[
  {
    "path": ".gitignore",
    "content": "# Junk that could exist anywhere:\n.DS_Store\n*.swp\n*.tmp\n*~\n\n# Project files that should not be in the repo\n.*\n\\#*\n!/.gitignore\n.*.gz\n*.tmTheme.js\n\n# A handy place to put stuff that git should ignore:\n/ignore/\nnode_modules/\njam/\n* *\n\n.git-ref\nnpm-debug.log\ndeps/\n"
  },
  {
    "path": "CNAME",
    "content": "ace.c9.io"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "Contributing\n------------\n\nAce is a community project and wouldn't be what it is without contributions! We actively encourage and support contributions. The Ace source code is released under the BSD License. This license is very simple, and is friendly to all kinds of projects, whether open source or not. Take charge of your editor and add your favorite language highlighting and keybindings!\n\nFeel free to fork and improve/enhance Ace any way you want. If you feel that the editor or the Ace community will benefit from your changes, please open a pull request. To protect the interests of the Ace contributors and users we require contributors to sign a Contributors License Agreement (CLA) before we pull the changes into the main repository. Our CLA is the simplest of agreements, requiring that the contributions you make to an ajax.org project are only those you're allowed to make. This helps us significantly reduce future legal risk for everyone involved. It is easy, helps everyone, takes ten minutes, and only needs to be completed once.\n\nThere are two versions of the agreement:\n\n1. [The Individual CLA](https://docs.google.com/a/c9.io/forms/d/1MfmfrxqD_PNlNsuK0lC2KSelRLxGLGfh_wEcG0ijVvo/viewform): use this version if you're working on the Cloud9 SDK or open source projects in your spare time, or can clearly claim ownership of copyright in what you'll be submitting.\n2. [The Corporate CLA](https://docs.google.com/a/c9.io/forms/d/1vFejn4111GdnCNuQ6BfnJDaxdsUEMD4KCo1ayovAfu0/viewform): have your corporate lawyer review and submit this if your company is going to be contributing to the Cloud9 SDK and/or open source projects.\n\nIf you want to contribute to the Cloud9 SDK and/or open source projects please go to the online form, fill it out and submit it.\n\nHappy coding, Cloud9\n"
  },
  {
    "path": "ChangeLog.txt",
    "content": "2017.10.17 Version 1.2.9\n\n* added support for bidirectional text, with monospace font (Alex Shensis)\n* added support for emoji 😊\n\n* new language modes\n  - Red (Toomas Vooglaid)\n  - CSound (Nathan Whetsell)\n  - JSSM (John Haugeland)\n\n* New Themes\n  - Dracula (Austin Schwartz)\n\n2017.07.02 Version 1.2.8\n* Fixed small bugs in searchbox and autocompleter\n\n2017.06.18 Version 1.2.7\n\n* Added Support for arrow keys on external IPad keyboard (Emanuele Tamponi)\n* added match counter to searchbox extension\n\n- implemented higlighting of multiline strings in yaml mode (Maxim Trushin)\n- improved haml syntax highlighter (Andrés Álvarez)\n\n2016.12.03 Version 1.2.6\n\n* Fixed IME handling on new Chrome\n* Support for php 7 in the syntax checker\n\n2016.08.16 Version 1.2.5\n\n* Fixed regression in noconflict mode\n\n2016.07.27 Version 1.2.4\n\n* Maintenance release with several new modes and small bugfixes\n\n2016.01.17 Version 1.2.3\n\n* Bugfixes\n  - fix memory leak in setSession (Tyler Stalder)\n  - double click not working on linux/mac\n  \n* new language modes\n  - reStructuredText (Robin Jarry)\n  - NSIS (Jan T. Sott)\n\n\n2015.10.28 Version 1.2.1\n\n* new language modes\n  - Swift\n  - JSX\n\n2015.07.11 Version 1.2.0\n\n* New Features\n  - Indented soft wrap (danyaPostfactum)\n  - Rounded borders on selections\n\n* API Changes\n  - unified delta types `{start, end, action, lines}`  (Alden Daniels https://github.com/ajaxorg/ace/pull/1745)\n  - \"change\" event listeners on session and editor get delta objects directly\n\n* new language modes\n  - SQLServer (Morgan Yarbrough)\n  \n2015.04.03 Version 1.1.9\n\n  - Small Enhancements and Bugfixes\n\n2014.11.08 Version 1.1.8\n\n* API Changes\n  - `editor.commands.commandKeyBinding` now contains direct map from keys to commands instead of grouping them by hashid\n  \n* New Features\n  - Improved autoindent for html and php modes (Adam Jimenez)\n  - Find All from searchbox (Colton Voege)\n  \n* new language modes\n  - Elixir, Elm\n \n2014.09.21 Version 1.1.7\n\n* Bugfixes\n  - fix several bugs in autocompletion\n  - workaround for inaccurate getBoundingClientRect on chrome 37\n\n2014.08.17 Version 1.1.6\n\n* Bugfixes\n  - fix regression in double tap to highlight \n  - Improved Latex Mode (Daniel Felder)\n  \n* API Changes\n  - editor.destroy destroys editor.session too (call editor.setSession(null) to prevent that)\n\n* new language modes\n - Praat (José Joaquín Atria)\n - Eiffel (Victorien Elvinger)\n - G-code (Adam Joseph Cook)\n \n2014.07.09 Version 1.1.5\n\n* Bugfixes\n  - fix regression in autocomplete popup\n\n* new language modes\n - gitignore (Devon Carew)\n \n2014.07.01 Version 1.1.4\n\n* New Features\n  - Highlight matching tags (Adam Jimenez)\n  - Improved jump to matching command (Adam Jimenez)\n\n* new language modes\n - AppleScript (Yaogang Lian)\n - Vala\n\n2014.03.08 Version 1.1.3\n\n* New Features\n  - Allow syntax checkers to be loaded from CDN (Derk-Jan Hartman)\n  - Add ColdFusion behavior (Abram Adams)\n  - add showLineNumbers option\n  - Add html syntax checker (danyaPostfactum)\n \n* new language modes\n  - Gherkin (Patrick Nevels)\n  - Smarty\n\n2013.12.02 Version 1.1.2\n\n* New Features\n  - Accessibility Theme for Ace (Peter Xiao)\n  - use snipetManager for expanding emmet snippets\n  - update jshint to 2.1.4\n  - improve php syntax checker (jdalegonzalez)\n  - add option for autoresizing\n  - add option for autohiding vertical scrollbar\n  - improvements to highlighting of xml like languages (danyaPostfactum)\n  - add support for autocompletion and snippets (gjtorikyan danyaPostfactum and others)\n  - add option to merge similar changes in undo history\n  - add scrollPastEnd option\n  - use html5 dragndrop for text dragging (danyaPostfactum)\n  \n* API Changes\n  - fixed typo in HashHandler commmandManager\n\n* new language modes\n  - Nix (Zef Hemel)\n  - Protobuf (Zef Hemel)\n  - Soy\n  - Handlebars\n\n2013.06.04 Version 1.1.1\n\n  - Improved emacs keybindings (Robert Krahn)\n  - Added markClean, isClean methods to UndoManager (Joonsoo Jeon)\n  - Do not allow `Toggle comments` command to remove spaces from indentation\n  - Softer colors for indent guides in dark themes\n\n* new language modes\n  - Ada\n  - Assembly_x86\n  - Cobol\n  - D\n  - ejs\n  - MATLAB\n  - MySQL\n  - Twig\n  - Verilog\n\n2013.05.01, Version 1.1.0\n\n* API Changes\n  - Default position of the editor container is changed to relative. Add `.ace_editor {position: absolute}` css rule to restore old behavior\n  - Changed default line-height to `normal` to not conflict with bootstrap. Use `line-height: inherit` for old behavior.\n  - Changed marker types accepted by session.addMarker. It now accepts \"text\"|\"line\"|\"fullLine\"|\"screenLine\"\n  - Internal classnames used by editor were made more consistent\n  - Introduced `editor.setOption/getOption/setOptions/getOptions` methods\n  - Introduced positionToIndex, indexToPosition methods\n\n* New Features\n  - Improved emacs mode (chetstone)\n    with Incremental search and Occur modes (Robert Krahn)\n\n  - Improved ime handling\n  - Searchbox (Vlad Zinculescu)\n\n  - Added elastic tabstops lite extension (Garen Torikian)\n  - Added extension for whitespace manipulation\n  - Added extension for enabling spellchecking from contextmenu\n  - Added extension for displaying available keyboard shortcuts (Matthew Christopher Kastor-Inare III)\n  - Added extension for displaying options panel (Matthew Christopher Kastor-Inare III)\n  - Added modelist extension (Matthew Christopher Kastor-Inare III)\n\n  - Improved toggleCommentLines and added ToggleCommentBlock command\n  - `:;` pairing in CSS mode (danyaPostfactum)\n\n  - Added suppoert for Delete and SelectAll from context menu (danyaPostfactum)\n\n  - Make wrapping behavior optional\n  - Selective bracket insertion/skipping \n    \n  - Added commands for increase/decrease numbers, sort lines (Vlad Zinculescu)    \n  - Folding for Markdown, Lua, LaTeX    \n  - Selective bracket insertion/skipping for C-like languages\n\n* Many new languages\n  - Scheme (Mu Lei)\n  - Dot (edwardsp)\n  - FreeMarker (nguillaumin)\n  - Tiny Mushcode (h3rb)\n  - Velocity (Ryan Griffith)\n  - TOML (Garen Torikian) \n  - LSL (Nemurimasu Neiro, Builders Brewery)\n  - Curly (Libo Cannici)\n  - vbScript (Jan Jongboom) \n  - R (RStudio) \n  - ABAP\n  - Lucene (Graham Scott)\n  - Haml (Garen Torikian)\n  - Objective-C (Garen Torikian) \n  - Makefile (Garen Torikian) \n  - TypeScript (Garen Torikian) \n  - Lisp (Garen Torikian) \n  - Stylus (Garen Torikian) \n  - Dart (Garen Torikian)\n\n* Live syntax checks\n  - PHP (danyaPostfactum)\n  - Lua\n\n* New Themes\n  - Chaos \n  - Terminal \n   \n2012.09.17, Version 1.0.0\n\n* New Features\n  - Multiple cursors and selections (https://c9.io/site/blog/2012/08/be-an-armenian-warrior-with-block-selection-on-steroids/)\n  - Fold buttons displayed in the gutter\n  - Indent Guides\n  - Completely reworked vim mode (Sergi Mansilla)\n  - Improved emacs keybindings\n  - Autoclosing of html tags (danyaPostfactum)\n\n* 20 New language modes\n  - Coldfusion (Russ)\n  - Diff\n  - GLSL (Ed Mackey)\n  - Go (Davide Saurino)\n  - Haxe (Jason O'Neil)\n  - Jade (Garen Torikian)\n  - jsx (Syu Kato)\n  - LaTeX (James Allen)\n  - Less (John Roepke)\n  - Liquid (Bernie Telles)\n  - Lua (Lee Gao)\n  - LuaPage (Choonster)\n  - Markdown (Chris Spencer)\n  - PostgreSQL (John DeSoi)\n  - Powershell (John Kane)\n  - Sh (Richo Healey)\n  - SQL (Jonathan Camile)\n  - Tcl (Cristoph Hochreiner)\n  - XQuery (William Candillion)\n  - Yaml (Meg Sharkey)\n\n  * Live syntax checks\n  - for XQuery and JSON\n\n* New Themes\n  - Ambiance (Irakli Gozalishvili)\n  - Dreamweaver (Adam Jimenez)\n  - Github (bootstraponline)\n  - Tommorrow themes (https://github.com/chriskempson/tomorrow-theme)\n  - XCode\n\n* Many Small Enhancements and Bugfixes\n \n2011.08.02, Version 0.2.0\n\n* Split view (Julian Viereck)\n  - split editor area horizontally or vertivally to show two files at the same\n    time\n\n* Code Folding (Julian Viereck)\n  - Unstructured code folding\n  - Will be the basis for language aware folding\n\n* Mode behaviours (Chris Spencer)\n  - Adds mode specific hooks which allow transformations of entered text\n  - Autoclosing of braces, paranthesis and quotation marks in C style modes\n  - Autoclosing of angular brackets in XML style modes\n\n* New language modes\n  - Clojure (Carin Meier)\n  - C# (Rob Conery)\n  - Groovy (Ben Tilford)\n  - Scala (Ben Tilford)\n  - JSON\n  - OCaml (Sergi Mansilla)\n  - Perl (Panagiotis Astithas)\n  - SCSS/SASS (Andreas Madsen)\n  - SVG\n  - Textile (Kelley van Evert)\n  - SCAD (Jacob Hansson)\n  \n* Live syntax checks\n  - Lint for CSS using CSS Lint <http://csslint.net/>\n  - CoffeeScript\n\n* New Themes\n  - Crimson Editor (iebuggy)\n  - Merbivore (Michael Schwartz)\n  - Merbivore soft (Michael Schwartz)\n  - Solarized dark/light <http://ethanschoonover.com/solarized> (David Alan Hjelle)\n  - Vibrant Ink (Michael Schwartz)\n\n* Small Features/Enhancements\n  - Lots of render performance optimizations (Harutyun Amirjanyan)\n  - Improved Ruby highlighting (Chris Wanstrath, Trent Ogren)\n  - Improved PHP highlighting (Thomas Hruska)\n  - Improved CSS highlighting (Sean Kellogg)\n  - Clicks which cause the editor to be focused don't reset the selection\n  - Make padding text layer specific so that print margin and active line\n    highlight are not affected (Irakli Gozalishvili)\n  - Added setFontSize method\n  - Improved vi keybindings (Trent Ogren)\n  - When unfocused make cursor transparent instead of removing it (Harutyun Amirjanyan)\n  - Support for matching groups in tokenizer with arrays of tokens (Chris Spencer)\n\n* Bug fixes\n  - Add support for the new OSX scroll bars\n  - Properly highlight JavaScript regexp literals\n  - Proper handling of unicode characters in JavaScript identifiers\n  - Fix remove lines command on last line (Harutyun Amirjanyan)\n  - Fix scroll wheel sluggishness in Safari\n  - Make keyboard infrastructure route keys like []^$ the right way (Julian Viereck)\n\n2011.02.14, Version 0.1.6\n\n* Floating Anchors\n  - An Anchor is a floating pointer in the document. \n  - Whenever text is inserted or deleted before the cursor, the position of\n    the cursor is updated\n  - Usesd for the cursor and selection\n  - Basis for bookmarks, multiple cursors and snippets in the future\n* Extensive support for Cocoa style keybindings on the Mac <https://github.com/ajaxorg/ace/issues/closed#issue/116/comment/767803>\n* New commands:\n  - center selection in viewport\n  - remove to end/start of line\n  - split line\n  - transpose letters\n* Refator markers  \n  - Custom code can be used to render markers\n  - Markers can be in front or behind the text\n  - Markers are now stored in the session (was in the renderer)\n* Lots of IE8 fixes including copy, cut and selections\n* Unit tests can also be run in the browser\n  <https://github.com/ajaxorg/ace/blob/master/lib/ace/test/tests.html>\n* Soft wrap can adapt to the width of the editor (Mike Ratcliffe, Joe Cheng)\n* Add minimal node server server.js to run the Ace demo in Chrome\n* The top level editor.html demo has been renamed to index.html\n* Bug fixes\n  - Fixed gotoLine to consider wrapped lines when calculating where to scroll to (James Allen)\n  - Fixed isues when the editor was scrolled in the web page (Eric Allam)\n  - Highlighting of Python string literals\n  - Syntax rule for PHP comments\n\n2011.02.08, Version 0.1.5\n\n* Add Coffeescript Mode (Satoshi Murakami)\n* Fix word wrap bug (Julian Viereck)\n* Fix packaged version of the Eclipse mode\n* Loading of workers is more robust\n* Fix \"click selection\"\n* Allow tokizing empty lines (Daniel Krech)\n* Make PageUp/Down behavior more consistent with native OS (Joe Cheng)\n\n2011.02.04, Version 0.1.4\n\n* Add C/C++ mode contributed by Gastón Kleiman\n* Fix exception in key input\n\n2011.02.04, Version 0.1.3\n\n* Let the packaged version play nice with requireJS\n* Add Ruby mode contributed by Shlomo Zalman Heigh\n* Add Java mode contributed by Tom Tasche\n* Fix annotation bug\n* Changing a document added a new empty line at the end\n"
  },
  {
    "path": "LICENSE",
    "content": "Copyright (c) 2010, Ajax.org B.V.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n    * Neither the name of Ajax.org B.V. nor the\n      names of its contributors may be used to endorse or promote products\n      derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\nDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\nON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "Makefile",
    "content": ".PHONY : doc build clean dist\n\npre_build:\n\tgit rev-parse HEAD > .git-ref\n\tmkdir -p build/src\n\tmkdir -p build/demo/kitchen-sink\n\tmkdir -p build/textarea/src\n\t\n\tcp -r demo/kitchen-sink/styles.css build/demo/kitchen-sink/styles.css\n\tcp demo/kitchen-sink/logo.png build/demo/kitchen-sink/logo.png\n\tcp -r doc/site/images build/textarea\n\nbuild: pre_build\n\t./Makefile.dryice.js normal\n\t./Makefile.dryice.js demo\n\n# Minimal build: call Makefile.dryice.js only if our sources changed\nbasic: build/src/ace.js\n\nbuild/src/ace.js : ${wildcard lib/*} \\\n                   ${wildcard lib/*/*} \\\n                   ${wildcard lib/*/*/*} \\\n                   ${wildcard lib/*/*/*/*} \\\n                   ${wildcard lib/*/*/*/*/*} \\\n                   ${wildcard lib/*/*/*/*/*/*}\n\t./Makefile.dryice.js\n\ndoc:\n\tcd doc;\\\n\t(test -d node_modules && npm update) || npm install;\\\n\tnode build.js\n\nclean:\n\trm -rf build\n\trm -rf ace-*\n\trm -f ace-*.tgz\n\nace.tgz: build\n\tmv build ace-`./version.js`/\n\tcp Readme.md ace-`./version.js`/\n\tcp LICENSE ace-`./version.js`/\n\ttar cvfz ace-`./version.js`.tgz ace-`./version.js`/\n\ndist: clean build ace.tgz\n"
  },
  {
    "path": "Makefile.dryice.js",
    "content": "#!/usr/bin/env node\n/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\nvar fs = require(\"fs\");\nvar path = require(\"path\");\nvar copy = require('architect-build/copy');\nvar build = require('architect-build/build');\n\nvar ACE_HOME = __dirname;\nvar BUILD_DIR = ACE_HOME + \"/build\";\nvar CACHE = {};\n\nfunction main(args) {\n    if (args.indexOf(\"updateModes\") !== -1) {\n        return updateModes();\n    }\n    var type = \"minimal\";\n    args = args.map(function(x) {\n        if (x[0] == \"-\" && x[1] != \"-\")\n            return \"-\" + x;\n        return x;\n    }).filter(Boolean);\n\n    if (args[2] && (args[2][0] != \"-\" || args[2].indexOf(\"h\") != -1))\n        type = args[2];\n\n    var i = args.indexOf(\"--target\");\n    if (i != -1 && args[i+1])\n        BUILD_DIR = args[i+1];\n\n    if (args.indexOf(\"--h\") == -1) {\n        if (type == \"minimal\") {\n            buildAce({\n                compress: args.indexOf(\"--m\") != -1,\n                noconflict: args.indexOf(\"--nc\") != -1,\n                shrinkwrap: args.indexOf(\"--s\") != -1\n            });\n        } else if (type == \"normal\") {\n            ace();\n        } else if (type == \"demo\") {\n            demo();\n        } else if (type == \"full\") {\n            ace();\n            demo();\n        } else if (type == \"highlighter\") {\n            // TODO\n        }\n    }\n}\n\nfunction showHelp(type) {\n    console.log(\"--- Ace Dryice Build Tool ---\");\n    console.log(\"\");\n    console.log(\"Options:\");\n    console.log(\"  minimal      Places necessary Ace files out in build dir; uses configuration flags below [default]\");\n    console.log(\"  normal       Runs four Ace builds--minimal, minimal-noconflict, minimal-min, and minimal-noconflict-min\");\n    console.log(\"  demo         Runs demo build of Ace\");\n    console.log(\"  full         all of above\");\n    console.log(\"  highlighter  \");\n    console.log(\"args:\");\n    console.log(\"  --target ./path   path to build folder\");\n    console.log(\"flags:\");\n    console.log(\"  --h                print this help\");\n    console.log(\"  --m                minify\");\n    console.log(\"  --nc               namespace require\");\n    console.log(\"  --s                shrinkwrap (combines all output files into one)\");\n    console.log(\"\");\n    if (type)\n        console.log(\"  output for \" + type + \" generated in \" + BUILD_DIR);\n}\n\nfunction ace() {\n    console.log('# ace License | Readme | Changelog ---------');\n\n    copy.file(ACE_HOME + \"/build_support/editor.html\",  BUILD_DIR + \"/editor.html\");\n    copy.file(ACE_HOME + \"/LICENSE\", BUILD_DIR + \"/LICENSE\");\n    copy.file(ACE_HOME + \"/ChangeLog.txt\", BUILD_DIR + \"/ChangeLog.txt\");\n    \n    console.log('# ace ---------');\n    for (var i = 0; i < 4; i++)\n        buildAce({compress: i & 2, noconflict: i & 1, check: true});\n}\n\nfunction demo() {\n    console.log('# kitchen sink ---------');\n\n    var version = \"\", ref = \"\";\n    try {\n        version = JSON.parse(fs.readFileSync(ACE_HOME + \"/package.json\")).version;\n        ref = fs.readFileSync(ACE_HOME + \"/.git-ref\").toString();\n    } catch(e) {}\n\n    function changeComments(data) {\n        return (data\n            .replace(\"doc/site/images/ace-logo.png\", \"demo/kitchen-sink/ace-logo.png\")\n            .replace(/<!\\-\\-DEVEL[\\d\\D]*?DEVEL\\-\\->/g, \"\")\n            .replace(/PACKAGE\\-\\->|<!\\-\\-PACKAGE/g, \"\")\n            .replace(/\\/\\*DEVEL[\\d\\D]*?DEVEL\\*\\//g, \"\")\n            .replace(/PACKAGE\\*\\/|\\/\\*PACKAGE/g, \"\")\n            .replace(\"%version%\", version)\n            .replace(\"%commit%\", ref)\n        );\n    }\n    \n    copy(ACE_HOME +\"/demo/kitchen-sink/docs/\", BUILD_DIR + \"/demo/kitchen-sink/docs/\");\n    \n    copy.file(ACE_HOME + \"/demo/kitchen-sink/logo.png\", BUILD_DIR + \"/demo/kitchen-sink/logo.png\");\n    copy.file(ACE_HOME + \"/demo/kitchen-sink/styles.css\", BUILD_DIR + \"/demo/kitchen-sink/styles.css\");\n    copy.file(ACE_HOME + \"/kitchen-sink.html\", BUILD_DIR + \"/kitchen-sink.html\", changeComments);\n\n    buildSubmodule({}, {\n        require: [\"kitchen-sink/demo\"],\n        projectType: \"demo\"\n    }, BUILD_DIR + \"/demo/kitchen-sink/demo\");\n\n    copy(ACE_HOME + \"/demo/\", BUILD_DIR + \"/demo/\", {\n        shallow: true,\n        exclude: /\\s|requirejs/,\n        include: /\\.(js|html)$/,\n        replace: function(source) {\n            if (!/^\\s*</.test(source))\n                return source;\n            var removeRequireJS;\n            source = source.replace(/<script src=\"kitchen-sink\\/require.js\"[\\s\\S]+?require\\(\\[([^\\]]+).*/, function(e, m) {\n                removeRequireJS = true;\n                var scripts = m.split(/,\\s*/);\n                var result = [];\n                function comment(str) {result.push(\"<!-- \" + str + \" -->\")}\n                function script(str) {result.push('<script src=\"../src/' + str + '.js\"></script>')}\n                scripts.forEach(function(s) {\n                    s = s.replace(/\"/g, \"\");\n                    if (s == \"ace/ace\") {\n                        comment(\"load ace\");\n                        script(\"ace\");\n                    } else {\n                        var extName = s.match(/[^/]*$/)[0];\n                        comment(\"load ace \" + extName + \" extension\");\n                        script(\"ext-\" + extName);\n                    }\n                });\n                result.push(\"<script>\");\n                return result.join(\"\\n\");\n            });\n            if (removeRequireJS)\n                source = source.replace(/\\s*\\}\\);?\\s*(<\\/script>)/, \"\\n$1\");\n            source = source.replace(/\"\\.\\.\\/build\\//g, function(e) {\n                console.log(e); return '\"../';\n            });\n            return source;\n        }\n    });\n}\n\nfunction jsFileList(path, filter) {\n    path = ACE_HOME + \"/\" + path;\n    if (!filter)\n        filter = /_test/;\n\n    return fs.readdirSync(path).map(function(x) {\n        if (x.slice(-3) == \".js\" && !filter.test(x) && !/\\s|BASE|(\\b|_)dummy(\\b|_)/.test(x))\n            return x.slice(0, -3);\n    }).filter(Boolean);\n}\n\nfunction workers(path) {\n    return jsFileList(path).map(function(x) {\n        if (x.slice(-7) == \"_worker\")\n            return x.slice(0, -7);\n    }).filter(function(x) { return !!x; });\n}\n\nfunction modeList() {\n    return jsFileList(\"lib/ace/mode\", /_highlight_rules|_test|_worker|xml_util|_outdent|behaviour|completions/);\n}\n\nfunction buildAceModule(opts, callback) {\n    // calling buildAceModuleInternal many times in parallel is slow, so we use queue\n    if (!buildAceModule.queue) {\n        buildAceModule.queue = [];\n        buildAceModule.dequeue = function() {\n            if (buildAceModule.running) return;\n            var call = buildAceModule.queue.shift();\n            buildAceModule.running = call;\n            if (call)\n                buildAceModuleInternal.apply(null, call);\n        };\n    }\n    \n    buildAceModule.queue.push([opts, function(err, result) {\n        callback && callback(err, result);\n        buildAceModule.running = null;\n        buildAceModule.dequeue();\n    }]);\n\n    if (!buildAceModule.running) {\n        buildAceModule.dequeue();\n    } else {\n        process.nextTick(buildAceModule.dequeue);\n    }\n}\n\nfunction buildAceModuleInternal(opts, callback) {\n    var cache = opts.cache == undefined ? CACHE : opts.cache;\n    var key = opts.require + \"|\" + opts.projectType;\n    if (cache && cache.configs && cache.configs[key])\n        return write(null, cache.configs[key]);\n        \n    var pathConfig = {\n        paths: {\n            ace: ACE_HOME + \"/lib/ace\",\n            \"kitchen-sink\": ACE_HOME + \"/demo/kitchen-sink\",\n            build_support:  ACE_HOME + \"/build_support\"\n        },\n        root: ACE_HOME\n    };\n        \n    function write(err, result) {\n        if (cache && key && !(cache.configs && cache.configs[key])) {\n            cache.configs = cache.configs || Object.create(null);\n            cache.configs[key] = result;\n            result.sources = result.sources.map(function(pkg) {\n                return {deps: pkg.deps};\n            });\n        } \n        \n        if (!opts.outputFile)\n            return callback(err, result);\n        \n        var code = result.code;\n        if (opts.compress) {\n            if (!result.codeMin)\n                result.codeMin = compress(result.code);\n            code = result.codeMin;\n        }\n            \n        var targetDir = getTargetDir(opts);\n        \n        var to = /^([\\\\/]|\\w:)/.test(opts.outputFile)\n            ? opts.outputFile\n            : path.join(opts.outputFolder || targetDir, opts.outputFile);\n    \n        var filters = [];\n\n        var ns = opts.ns || \"ace\";\n        if (opts.filters)\n            filters = filters.concat(opts.filters);\n    \n        if (opts.noconflict)\n            filters.push(namespace(ns));\n        var projectType = opts.projectType;\n        if (projectType == \"main\" || projectType == \"ext\") {\n            filters.push(exportAce(ns, opts.require[0],\n                opts.noconflict ? ns : \"\", projectType == \"ext\"));\n        }\n        \n        filters.push(normalizeLineEndings);\n        \n        filters.forEach(function(f) { code = f(code); });\n        \n        build.writeToFile({code: code}, {\n            outputFolder: path.dirname(to),\n            outputFile: path.basename(to)\n        }, function() {});\n        \n        callback && callback(err, result);\n    }\n    \n    build(opts.require, {\n        cache: cache,\n        quiet: opts.quiet,\n        pathConfig: pathConfig,\n        additional: opts.additional,\n        enableBrowser: true,\n        keepDepArrays: \"all\",\n        noArchitect: true,\n        compress: false,\n        ignore: opts.ignore || [],\n        withRequire: false,\n        basepath: ACE_HOME,\n        transforms: [normalizeLineEndings],\n        afterRead: [optimizeTextModules]\n    }, write);\n}\n\nfunction buildCore(options, extra, callback) {\n    options = extend(extra, options);\n    options.additional = [{\n        id: \"build_support/mini_require\", \n        order: -1000,\n        literal: true\n    }];\n    options.require =[\"ace/ace\"];\n    options.projectType = \"main\";\n    options.ns = \"ace\";\n    buildAceModule(options, callback);\n}\n\nfunction buildSubmodule(options, extra, file, callback) {\n    options = extend(extra, options);\n    getLoadedFileList(options, function(coreFiles) {\n        options.outputFile = file + \".js\";\n        options.ignore = options.ignore || coreFiles;\n        options.quiet = true;\n        buildAceModule(options, callback);\n    });\n}\n\nfunction buildAce(options, callback) {\n    var snippetFiles = jsFileList(\"lib/ace/snippets\");\n    var modeNames = modeList();\n\n    buildCore(options, {outputFile: \"ace.js\"}, addCb());\n    // modes\n    modeNames.forEach(function(name) {\n        buildSubmodule(options, {\n            projectType: \"mode\",\n            require: [\"ace/mode/\" + name]\n        }, \"mode-\" + name, addCb());\n    });\n    // snippets\n    modeNames.forEach(function(name) {\n        if (snippetFiles.indexOf(name + \".js\") == -1)\n            addSnippetFile(name);\n        \n        buildSubmodule(options, {\n            require: [\"ace/snippets/\" + name]\n        }, \"snippets/\" + name, addCb());\n    });\n    // themes\n    jsFileList(\"lib/ace/theme\").forEach(function(name) {\n        buildSubmodule(options, {\n            projectType: \"theme\",\n            require: [\"ace/theme/\" + name]\n        }, \"theme-\" +  name, addCb());\n    });\n    // keybindings\n    [\"vim\", \"emacs\"].forEach(function(name) {\n        buildSubmodule(options, {\n            projectType: \"keybinding\",\n            require: [\"ace/keyboard/\" + name ]\n        }, \"keybinding-\" + name, addCb());\n    });\n    // extensions\n    jsFileList(\"lib/ace/ext\").forEach(function(name) {\n        buildSubmodule(options, {\n            projectType: \"ext\",\n            require: [\"ace/ext/\" + name]\n        }, \"ext-\" + name, addCb());\n    });\n    // workers\n    workers(\"lib/ace/mode\").forEach(function(name) {\n        buildSubmodule(options, {\n            projectType: \"worker\",\n            require: [\"ace/mode/\" + name + \"_worker\"],\n            ignore: [],\n            additional: [{\n                id: \"ace/worker/worker\",\n                transforms: [],\n                order: -1000\n            }]\n        }, \"worker-\" + name, addCb());\n    });\n    // \n    function addCb() {\n        addCb.count = (addCb.count || 0) + 1; \n        return done\n    }\n    function done() {\n        if (--addCb.count > 0)\n            return;\n        if (options.check)\n            sanityCheck(options, callback);\n        if (callback) \n            return callback();\n        console.log(\"Finished building \" + getTargetDir(options))\n    }\n}\n\nfunction getLoadedFileList(options, callback, result) {\n    if (!result) {\n        return buildCore({}, {}, function(e, result) {\n            getLoadedFileList(options, callback, result);\n        });\n    }\n    var deps = Object.create(null);\n    result.sources.forEach(function(pkg) {\n        pkg.deps && pkg.deps.forEach(function(p) {\n            if (!deps[p]) deps[p] = 1;\n        });\n    });\n    delete deps[\"ace/theme/textmate\"];\n    deps[\"ace/ace\"] = 1;\n    callback(Object.keys(deps));\n}\n\nfunction normalizeLineEndings(module) {\n    if (typeof module == \"string\") \n        module = {source: module};\n    return module.source = module.source.replace(/\\r\\n/g, \"\\n\");\n}\n\nfunction optimizeTextModules(sources) {\n    var textModules = {};\n    return sources.filter(function(pkg) {\n        if (!pkg.id) {\n            return true;\n        }\n        else if (pkg.id.indexOf(\"text!\") > -1) {\n            detectTextModules(pkg);\n            return false;\n        }\n        else {\n            pkg.source = rewriteTextImports(pkg.source, pkg.deps);\n            return true;\n        }\n    }).map(function(pkg) {\n        if (pkg && pkg.deps) {\n            pkg.deps = pkg.deps && pkg.deps.filter(function(p) {\n                return p.indexOf(\"text!\") == -1;\n            });\n        }\n        return pkg;\n    });\n    \n    function rewriteTextImports(text, deps) {\n        return text.replace(/ require\\(['\"](?:ace|[.\\/]+)\\/requirejs\\/text!(.*?)['\"]\\)/g, function(_, call) {\n            if (call) {\n                var dep;\n                deps.some(function(d) {\n                    if (d.split(\"/\").pop() == call.split(\"/\").pop()) {\n                        dep = d;\n                        return true;\n                    }\n                });\n    \n                call = textModules[dep];\n                if (call)\n                    return \" \" + call;\n            }\n        });\n    }\n    function detectTextModules(pkg) {\n        var input = pkg.source.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"');\n        if (/\\.css$/.test(pkg.id)) {\n            // remove unnecessary whitespace from css\n            input = input.replace(/\\n\\s+/g, \"\\n\");\n            input = '\"' + input.replace(/\\n/g, '\\\\\\n') + '\"';\n        } else {\n            // but don't break other files!\n            input = '\"' + input.replace(/\\n/g, '\\\\n\\\\\\n') + '\"';\n        }\n        textModules[pkg.id] = input;\n    }\n}\n\nfunction namespace(ns) {\n    return function(text) {\n        text = text\n            .toString()\n            .replace(/ACE_NAMESPACE\\s*=\\s*\"\"/, 'ACE_NAMESPACE = \"' + ns +'\"')\n            .replace(/\\bdefine\\(/g, function(def, index, source) {\n                if (/(^|[;}),])\\s*$/.test(source.slice(0, index)))\n                    return ns + \".\" + def;\n                return def;\n            });\n\n        return text;\n    };\n}\n\nfunction exportAce(ns, modules, requireBase, extModules) {\n    requireBase = requireBase || \"window\";\n    return function(text) {\n        /*globals REQUIRE_NS, MODULES, NS*/\n        var template = function() {\n            (function() {\n                REQUIRE_NS.require(MODULES, function(a) {\n                    if (a) {\n                        a.config.init(true);\n                        a.define = REQUIRE_NS.define;\n                    }\n                    if (!window.NS)\n                        window.NS = a;\n                    for (var key in a) if (a.hasOwnProperty(key))\n                        window.NS[key] = a[key];\n                });\n            })();\n        };\n        \n        if (extModules) {\n            template = function() {\n                (function() {\n                    REQUIRE_NS.require(MODULES, function() {});\n                })();\n            };\n        }\n        \n        text = text.replace(/function init\\(packaged\\) {/, \"init(true);$&\\n\");\n        \n        if (typeof modules == \"string\")\n            modules = [modules];\n            \n        return (text.replace(/;\\s*$/, \"\") + \";\" + template\n            .toString()\n            .replace(/MODULES/g, JSON.stringify(modules))\n            .replace(/REQUIRE_NS/g, requireBase)\n            .replace(/NS/g, ns)\n            .slice(13, -1)\n        );\n    };\n}\n\nfunction updateModes() {\n    modeList().forEach(function(m) {\n        var filepath = __dirname + \"/lib/ace/mode/\" + m + \".js\";\n        var source = fs.readFileSync(filepath, \"utf8\");\n        if (!/this.\\$id\\s*=\\s*\"/.test(source))\n            source = source.replace(/\\n([ \\t]*)(\\}\\).call\\(\\w*Mode.prototype\\))/, '\\n$1    this.$id = \"\";\\n$1$2');\n        \n        source = source.replace(/(this.\\$id\\s*=\\s*)\"[^\"]*\"/,  '$1\"ace/mode/' + m + '\"');\n        fs.writeFileSync(filepath, source, \"utf8\");\n    });\n}\n\nfunction generateThemesModule(themes) {\n    var themelist = [\n        'define(function(require, exports, module) {',\n        '\\n\\nmodule.exports.themes = ' + JSON.stringify(themes, null, '    '),\n        ';\\n\\n});'\n    ].join('');\n    fs.writeFileSync(__dirname + '/lib/ace/ext/themelist_utils/themes.js', themelist, 'utf8');\n}\n\nfunction addSnippetFile(modeName) {\n    var snippetFilePath = ACE_HOME + \"/lib/ace/snippets/\" + modeName;\n    if (!fs.existsSync(snippetFilePath + \".js\")) {\n        copy.file(ACE_HOME + \"/tool/templates/snippets.js\", snippetFilePath + \".js\", function(t) {\n            return t.replace(/%modeName%/g, modeName);\n        });\n    }\n    if (!fs.existsSync(snippetFilePath + \".snippets\")) {\n        fs.writeFileSync(snippetFilePath + \".snippets\", \"\");\n    }\n}\n\nfunction compress(text) {\n    var ujs = require(\"dryice\").copy.filter.uglifyjs;\n    ujs.options.mangle_toplevel = {except: [\"ACE_NAMESPACE\", \"requirejs\"]};\n    ujs.options.beautify = {ascii_only: true, inline_script: true}\n    return ujs(text);\n}\n\nfunction extend(base, extra) {\n    Object.keys(extra).forEach(function(k) {\n        base[k] = extra[k];\n    });\n    return base;\n}\n\nfunction getTargetDir(opts) {\n    var targetDir = BUILD_DIR + \"/src\";\n    if (opts.compress)\n        targetDir += \"-min\";\n    if (opts.noconflict)\n        targetDir += \"-noconflict\";\n    return targetDir;\n}\n\nfunction sanityCheck(opts, callback) {\n    var targetDir = getTargetDir(opts);\n    require(\"child_process\").execFile(process.execPath, [\"-e\", \"(\" + function() {\n        window = global;\n        require(\"./ace\");\n        if (typeof ace.edit != \"function\")\n            process.exit(1);\n        require(\"fs\").readdirSync(\".\").forEach(function(p) {\n            if (!/ace\\.js$/.test(p) && /\\.js$/.test(p))\n                require(\"./\" + p);\n        });\n        process.exit(0);\n    } + \")()\"], {\n        cwd: targetDir\n    }, function(err, stdout) {\n        if (callback) return callback(err, stdout);\n        if (err)\n            throw err;\n    });\n}\n\nif (!module.parent)\n    main(process.argv);\nelse\n    exports.buildAce = buildAce;\n"
  },
  {
    "path": "Readme.md",
    "content": "Ace (Ajax.org Cloud9 Editor)\n============================\n\n[![npm](https://img.shields.io/npm/v/ace-builds.svg)](https://www.npmjs.com/package/ace-builds)\n\n_Note_: The new site at http://ace.c9.io contains all the info below along with an embedding guide and all the other resources you need to get started with Ace.\n\nAce is a standalone code editor written in JavaScript. Our goal is to create a browser based editor that matches and extends the features, usability and performance of existing native editors such as TextMate, Vim or Eclipse. It can be easily embedded in any web page or JavaScript application. Ace is developed as the primary editor for [Cloud9 IDE](https://c9.io/) and the successor of the Mozilla Skywriter (Bespin) Project.\n\nFeatures\n--------\n\n* Syntax highlighting for over 120 languages (TextMate/Sublime/_.tmlanguage_ files can be imported)\n* Over 20 themes (TextMate/Sublime/_.tmtheme_ files can be imported)\n* Automatic indent and outdent\n* An optional command line\n* Handles huge documents (at last check, 4,000,000 lines is the upper limit)\n* Fully customizable key bindings including vim and Emacs modes\n* Search and replace with regular expressions\n* Highlight matching parentheses\n* Toggle between soft tabs and real tabs\n* Displays hidden characters\n* Drag and drop text using the mouse\n* Line wrapping\n* Code folding\n* Multiple cursors and selections\n* Live syntax checker (currently JavaScript/CoffeeScript/CSS/XQuery)\n* Cut, copy, and paste functionality\n\nTake Ace for a spin!\n--------------------\n\nCheck out the Ace live [demo](http://ace.c9.io/build/kitchen-sink.html) or get a [Cloud9 IDE account](https://c9.io/) to experience Ace while editing one of your own GitHub projects.\n\nIf you want, you can use Ace as a textarea replacement thanks to the [Ace Bookmarklet](http://ajaxorg.github.io/ace/build/demo/bookmarklet/index.html).\n\nEmbedding Ace\n-------------\n\nAce can be easily embedded into any existing web page. You can either use one of pre-packaged versions of [ace](https://github.com/ajaxorg/ace-builds/) (just copy one of `src*` subdirectories somewhere into your project), or use requireJS to load contents of [lib/ace](https://github.com/ajaxorg/ace/tree/master/lib/ace) as `ace`\n\n\nThe easiest version is simply:\n\n```html\n<div id=\"editor\">some text</div>\n<script src=\"src/ace.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\n<script>\n    var editor = ace.edit(\"editor\");\n</script>\n```\n\nWith \"editor\" being the id of the DOM element, which should be converted to an editor. Note that this element must be explicitly sized and positioned `absolute` or `relative` for Ace to work. e.g.\n\n```css\n#editor {\n    position: absolute;\n    width: 500px;\n    height: 400px;\n}\n```\n\nTo change the theme simply include the Theme's JavaScript file\n\n```html\n<script src=\"src/theme-twilight.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\n```\n\nand configure the editor to use the theme:\n\n```javascript\neditor.setTheme(\"ace/theme/twilight\");\n```\n\nBy default the editor only supports plain text mode; many other languages are available as separate modules. After including the mode's JavaScript file:\n\n```html\n<script src=\"src/mode-javascript.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\n```\n\nThe mode can then be used like this:\n\n```javascript\nvar JavaScriptMode = ace.require(\"ace/mode/javascript\").Mode;\neditor.session.setMode(new JavaScriptMode());\n```\n\nto destroy editor use\n\n```javascript\neditor.destroy();\neditor.container.remove();\n```\n\n\nDocumentation\n-------------\n\nAdditional usage information, including events to listen to and extending syntax highlighters, can be found [on the main Ace website](http://ace.c9.io).\n\nYou can also find API documentation at [http://ace.c9.io/#nav=api](http://ace.c9.io/#nav=api).\n\nAlso check out the sample code for the kitchen sink [demo app](https://github.com/ajaxorg/ace/blob/master/demo/kitchen-sink/demo.js).\n\nIf you still need help, feel free to drop a mail on the [ace mailing list](http://groups.google.com/group/ace-discuss), or at `irc.freenode.net#ace`.\n\nRunning Ace\n-----------\n\nAfter the checkout Ace works out of the box. No build step is required. To try it out, simply start the bundled mini HTTP server using Node.JS\n\n```bash\nnode ./static.js\n```\n\nThe editor can then be opened at http://localhost:8888/kitchen-sink.html. \n\nTo open the editor with a file:/// URL see [the wiki](https://github.com/ajaxorg/ace/wiki/Running-Ace-from-file).\n\nBuilding Ace\n-----------\n\nYou do not generally need to build ACE. The [ace-builds repository](https://github.com/ajaxorg/ace-builds/) endeavours to maintain the latest build, and you can just copy one of _src*_ subdirectories somewhere into your project.\n\nHowever, all you need is Node.js and npm installed to package ACE. Just run `npm install` in the ace folder to install dependencies:\n\n```bash\nnpm install\nnode ./Makefile.dryice.js\n```\n\nTo package Ace, we use the dryice build tool developed by the Mozilla Skywriter team. Call `node Makefile.dryice.js` on the command-line to start the packing. This build script accepts the following options\n\n```bash\n-m                 minify build files with uglify-js          \n-nc                namespace require and define calls with \"ace\"\n-bm                builds the bookmarklet version\n--target ./path    specify relative path for output folder (default value is \"./build\")\n```\n\nTo generate all the files in the ace-builds repository, run `node Makefile.dryice.js full --target ../ace-builds`\n\nRunning the Unit Tests\n----------------------\n\nThe Ace unit tests can run on node.js. Assuming you have already done `npm install`, just call:\n\n```bash\nnode lib/ace/test/all.js\n```\n\nYou can also run the tests in your browser by serving:\n\n    http://localhost:8888/lib/ace/test/tests.html\n\nThis makes debugging failing tests way more easier.\n\nContributing\n-----------------------------\n\nAce is a community project and wouldn't be what it is without contributions! We actively encourage and support contributions. The Ace source code is released under the BSD License. This license is very simple, and is friendly to all kinds of projects, whether open source or not. Take charge of your editor and add your favorite language highlighting and keybindings!\n\nFeel free to fork and improve/enhance Ace any way you want. If you feel that the editor or the Ace community will benefit from your changes, please open a pull request. For more information on our contributing guidelines, see [CONTRIBUTING.md](https://github.com/ajaxorg/ace/blob/master/CONTRIBUTING.md).\n\nContinuous Integration status\n-----------------------------\n\nThis project is tested with [Travis CI](http://travis-ci.org)\n[![Build Status](https://secure.travis-ci.org/ajaxorg/ace.png?branch=master)](http://travis-ci.org/ajaxorg/ace)\n\n\n"
  },
  {
    "path": "api/ace.html",
    "content": "\n<div id=\"documentation\" class=\"span9\">\n  <div class=\"classContent\">\n    <div class=\"membersBackground\"></div>\n    <div class=\" members pos0\">\n      <div class=\" membersContent pos0\">\n        <h1 class=\"memberHeader\"><span class=\"name\">Ace</span>\n        </h1>\n        <ul data-tabs=\"tabs\" class=\"nav tabs pos0\">\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\"><a href=\"#\" data-toggle=\"dropdown\" class=\"dropdown-toggle\"><span>Functions (3)</span><b class=\"caret\"></b></a>\n            <ul class=\"dropdown-menu\">\n              <li id=\"dropdown_Ace.createEditSession\" data-id=\"Ace.createEditSession\" class=\"memberLink\"><a href=\"#Ace.createEditSession\" class=\"\" title=\"Ace.createEditSession (class method)\" data-id=\"Ace.createEditSession\">createEditSession</a>\n              </li>\n              <li id=\"dropdown_Ace.edit\" data-id=\"Ace.edit\" class=\"memberLink\"><a href=\"#Ace.edit\" class=\"\" title=\"Ace.edit (class method)\" data-id=\"Ace.edit\">edit</a>\n              </li>\n              <li id=\"dropdown_Ace.require\" data-id=\"Ace.require\" class=\"memberLink\"><a href=\"#Ace.require\" class=\"\" title=\"Ace.require (class method)\" data-id=\"Ace.require\">require</a>\n              </li>\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n        </ul>\n      </div>\n    </div>\n    <article id=\"Ace\" data-title=\"Ace (class)\" class=\"article\">\n      <div class=\"section description\">\n        <div class=\"memberContent\"><p>The main class required to set up an Ace instance in the browser.</p>\n\n        </div>\n      </div>\n    </article>\n    <h3 class=\"sectionHeader\">Methods</h3>\n    <article id=\"Ace.createEditSession\" data-title=\"Ace.createEditSession (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Ace.createEditSession\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Ace.createEditSession\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Ace.</span><span class=\"sigMemberName\">createEditSession</span></span>(<span class=\"sigArgList\"><a href=\"document.html\" class=\"argument methodClicker\" title=\"Document (class)\" data-id=\"Document\">Document</a> | <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"argument methodClicker\" title=\"String\" data-id=\"String\">String</a> text, <a href=\"https://github.com/ajaxorg/ace/blob/master/lib/ace/mode/text.js\" class=\"argument methodClicker\" title=\"TextMode\" data-id=\"TextMode\">TextMode</a> mode</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Ace.createEditSession\" class=\"ellipsis_description\"><p>Creates a new <a href=\"edit_session.html\" class=\"link-short\" title=\"EditSession (class)\" data-id=\"EditSession\"><code>EditSession</code></a>, and returns the associated <a href=\"document.html\" class=\"link-short\" title=\"Document (class)\" data-id=\"Document\"><code>Document</code></a>.</p>\n\n            </div>\n            <div class=\"description\"><p>Creates a new <a href=\"edit_session.html\" class=\"link-short\" title=\"EditSession (class)\" data-id=\"EditSession\"><code>EditSession</code></a>, and returns the associated <a href=\"document.html\" class=\"link-short\" title=\"Document (class)\" data-id=\"Document\"><code>Document</code></a>.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">text</td><td class=\"argType\" \"><a href=\"document.html\" class=\"\" title=\"Document (class)\" data-id=\"Document\">Document</a> | <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"\" title=\"String\" data-id=\"String\">String</a></td><td class=\"argDescription \"><p>Required. If <code>text</code> is a <code>Document</code>, it associates the <code>EditSession</code> with it. Otherwise, a new <code>Document</code> is created, with the initial text</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">mode</td><td class=\"argType\" \"><a href=\"https://github.com/ajaxorg/ace/blob/master/lib/ace/mode/text.js\" class=\"\" title=\"TextMode\" data-id=\"TextMode\">TextMode</a></td><td class=\"argDescription \"><p>Required. The initial language mode to use for the document</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Ace.edit\" data-title=\"Ace.edit (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Ace.edit\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Ace.edit\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Ace.</span><span class=\"sigMemberName\">edit</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"argument methodClicker\" title=\"String\" data-id=\"String\">String</a> | <a href=\"https://developer.mozilla.org/en/DOM/element\" class=\"argument methodClicker\" title=\"DOMElement\" data-id=\"DOMElement\">DOMElement</a> el</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Ace.edit\" class=\"ellipsis_description\"><p>Embeds the Ace editor into the DOM, at the element provided by <code>el</code>.</p>\n\n            </div>\n            <div class=\"description\"><p>Embeds the Ace editor into the DOM, at the element provided by <code>el</code>.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">el</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"\" title=\"String\" data-id=\"String\">String</a> | <a href=\"https://developer.mozilla.org/en/DOM/element\" class=\"\" title=\"DOMElement\" data-id=\"DOMElement\">DOMElement</a></td><td class=\"argDescription \"><p>Required. Either the id of an element, or the element itself</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Ace.require\" data-title=\"Ace.require (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Ace.require\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Ace.require\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Ace.</span><span class=\"sigMemberName\">require</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"argument methodClicker\" title=\"String\" data-id=\"String\">String</a> moduleName</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"returnType \" title=\"Object\" data-id=\"Object\">Object</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Ace.require\" class=\"ellipsis_description\"><p>Provides access to require in packed noconflict mode</p>\n\n            </div>\n            <div class=\"description\"><p>Provides access to require in packed noconflict mode</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">moduleName</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"\" title=\"String\" data-id=\"String\">String</a></td><td class=\"argDescription \"><p>Required. </p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n  </div>\n  <script defer src=\"./resources/javascripts/ux.js\"></script>\n  <script src=\"./resources/javascripts/clicker.js\"></script>\n  <script src=\"./resources/javascripts/jquery-scrollspy.js\"></script>\n  <script defer src=\"./resources/javascripts/disqus-ext.js\"></script>\n  <script defer src=\"./resources/javascripts/ga.js\"></script>\n  <div id=\"disqus_thread\"></div>\n</div>\n"
  },
  {
    "path": "api/anchor.html",
    "content": "\n<div id=\"documentation\" class=\"span9\">\n  <div class=\"classContent\">\n    <div class=\"membersBackground\"></div>\n    <div class=\" members pos0\">\n      <div class=\" membersContent pos0\">\n        <h1 class=\"memberHeader\"><span class=\"name\">Anchor</span>\n        </h1>\n        <ul data-tabs=\"tabs\" class=\"nav tabs pos0\">\n          <li data-dropdown=\"dropdown\" class=\"dropdown\"><a href=\"#\" data-toggle=\"dropdown\" class=\"dropdown-toggle\"><span>Events (1)</span><b class=\"caret\"></b></a>\n            <ul class=\"dropdown-menu\">\n              <li id=\"dropdown_Anchor.event.change\" data-id=\"Anchor.event.change\" class=\"memberLink\"><a href=\"#Anchor.event.change\" class=\"\" title=\"Anchor.event.change (event)\" data-id=\"Anchor.event.change\">change</a>\n              </li>\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\"><a href=\"#\" data-toggle=\"dropdown\" class=\"dropdown-toggle\"><span>Constructors (1)</span><b class=\"caret\"></b></a>\n            <ul class=\"dropdown-menu\">\n              <li id=\"dropdown_Anchor.new\" data-id=\"Anchor.new\" class=\"memberLink\"><a href=\"#Anchor.new\" class=\"\" title=\"Anchor.new (constructor)\" data-id=\"Anchor.new\">new</a>\n              </li>\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\"><a href=\"#\" data-toggle=\"dropdown\" class=\"dropdown-toggle\"><span>Functions (6)</span><b class=\"caret\"></b></a>\n            <ul class=\"dropdown-menu\">\n              <li id=\"dropdown_Anchor.detach\" data-id=\"Anchor.detach\" class=\"memberLink\"><a href=\"#Anchor.detach\" class=\"\" title=\"Anchor.detach (class method)\" data-id=\"Anchor.detach\">detach</a>\n              </li>\n              <li id=\"dropdown_Anchor.getDocument\" data-id=\"Anchor.getDocument\" class=\"memberLink\"><a href=\"#Anchor.getDocument\" class=\"\" title=\"Anchor.getDocument (class method)\" data-id=\"Anchor.getDocument\">getDocument</a>\n              </li>\n              <li id=\"dropdown_Anchor.getPosition\" data-id=\"Anchor.getPosition\" class=\"memberLink\"><a href=\"#Anchor.getPosition\" class=\"\" title=\"Anchor.getPosition (class method)\" data-id=\"Anchor.getPosition\">getPosition</a>\n              </li>\n              <li id=\"dropdown_Anchor.onChange\" data-id=\"Anchor.onChange\" class=\"memberLink\"><a href=\"#Anchor.onChange\" class=\"\" title=\"Anchor.onChange (class method)\" data-id=\"Anchor.onChange\">onChange</a>\n              </li>\n              <li id=\"dropdown_Anchor.setPosition\" data-id=\"Anchor.setPosition\" class=\"memberLink\"><a href=\"#Anchor.setPosition\" class=\"\" title=\"Anchor.setPosition (class method)\" data-id=\"Anchor.setPosition\">setPosition</a>\n              </li>\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n        </ul>\n      </div>\n    </div>\n    <article id=\"Anchor\" data-title=\"Anchor (class)\" class=\"article\">\n      <div class=\"section description\">\n        <div class=\"memberContent\"><p>Defines the floating pointer in the document. Whenever text is inserted or deleted before the cursor, the position of the cursor is updated.</p>\n\n        </div>\n      </div>\n    </article>\n    <h3 class=\"sectionHeader\">Constructors</h3>\n    <article id=\"Anchor.new\" data-title=\"Anchor.new (constructor)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Anchor.new\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span class=\"constructorIdentifier\">new </span><span id=\"Anchor.new\" class=\"member-name methodClicker\">Anchor</span>(<span class=\"sigArgList\"><a href=\"document.html\" class=\"argument methodClicker\" title=\"Document (class)\" data-id=\"Document\">Document</a> doc, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> row, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> column</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Anchor.new\" class=\"ellipsis_description\"><p>Creates a new <code>Anchor</code> and associates it with a document.</p>\n\n            </div>\n            <div class=\"description\"><p>Creates a new <code>Anchor</code> and associates it with a document.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">doc</td><td class=\"argType\" \"><a href=\"document.html\" class=\"\" title=\"Document (class)\" data-id=\"Document\">Document</a></td><td class=\"argDescription \"><p>Required. The document to associate with the anchor</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">row</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The starting row position</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">column</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The starting column position</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <h3 class=\"sectionHeader\">Events</h3>\n    <article id=\"Anchor.event.change\" data-title=\"Anchor.event.change (event)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Anchor.event.change\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span class=\"eventObjName\">Anchor</span><span class=\"eventListenerStart\">.on(\"</span><span id=\"Anchor.event.change\" class=\"member-name eventMember methodClicker\">change</span><span class=\"eventListenerClose\">\", </span><span class=\"eventFunctionOpen\">function(</span><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> e<span class=\"eventFunctionClose\">))</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Anchor.event.change\" class=\"ellipsis_description\"><p>Fires whenever the anchor position changes.</p>\n\n            </div>\n            <div class=\"description\"><p>Fires whenever the anchor position changes.</p>\n<p>Both of these objects have a <code>row</code> and <code>column</code> property corresponding to the position.</p>\n<p>Events that can trigger this function include <a href=\"#Anchor.setPosition\" class=\"link-short\" title=\"Anchor.setPosition (class method)\" data-id=\"Anchor.setPosition\"><code>setPosition()</code></a>.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">e</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. An object containing information about the anchor position. It has two properties:  </p>\n<ul>\n<li><code>old</code>: An object describing the old Anchor position</li>\n<li><code>value</code>: An object describing the new Anchor position</li>\n</ul>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <h3 class=\"sectionHeader\">Methods</h3>\n    <article id=\"Anchor.detach\" data-title=\"Anchor.detach (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Anchor.detach\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Anchor.detach\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Anchor.</span><span class=\"sigMemberName\">detach</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Anchor.detach\" class=\"ellipsis_description\"><p>When called, the <code>&#39;change&#39;</code> event listener is removed.</p>\n\n            </div>\n            <div class=\"description\"><p>When called, the <code>&#39;change&#39;</code> event listener is removed.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Anchor.getDocument\" data-title=\"Anchor.getDocument (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Anchor.getDocument\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Anchor.getDocument\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Anchor.</span><span class=\"sigMemberName\">getDocument</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"document.html\" class=\"returnType \" title=\"Document (class)\" data-id=\"Document\">Document</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Anchor.getDocument\" class=\"ellipsis_description\"><p>Returns the current document.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the current document.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Anchor.getPosition\" data-title=\"Anchor.getPosition (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Anchor.getPosition\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Anchor.getPosition\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Anchor.</span><span class=\"sigMemberName\">getPosition</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"returnType \" title=\"Object\" data-id=\"Object\">Object</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Anchor.getPosition\" class=\"ellipsis_description\"><p>Returns an object identifying the <code>row</code> and <code>column</code> position of the current anchor.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns an object identifying the <code>row</code> and <code>column</code> position of the current anchor.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Anchor.onChange\" data-title=\"Anchor.onChange (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Anchor.onChange\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Anchor.onChange\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Anchor.</span><span class=\"sigMemberName\">onChange</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Anchor.onChange\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Anchor.setPosition\" data-title=\"Anchor.setPosition (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Anchor.setPosition\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Anchor.setPosition\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Anchor.</span><span class=\"sigMemberName\">setPosition</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> row, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> column, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"argument methodClicker\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a> noClip</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Anchor.setPosition\" class=\"ellipsis_description\"><p>Sets the anchor position to the specified row and column. If <code>noClip</code> is <code>true</code>, the position is not clipped.</p>\n\n            </div>\n            <div class=\"description\"><p>Sets the anchor position to the specified row and column. If <code>noClip</code> is <code>true</code>, the position is not clipped.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">row</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The row index to move the anchor to</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">column</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The column index to move the anchor to</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">noClip</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></td><td class=\"argDescription \"><p>Required. Identifies if you want the position to be clipped</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n  </div>\n  <script defer src=\"./resources/javascripts/ux.js\"></script>\n  <script src=\"./resources/javascripts/clicker.js\"></script>\n  <script src=\"./resources/javascripts/jquery-scrollspy.js\"></script>\n  <script defer src=\"./resources/javascripts/disqus-ext.js\"></script>\n  <script defer src=\"./resources/javascripts/ga.js\"></script>\n  <div id=\"disqus_thread\"></div>\n</div>"
  },
  {
    "path": "api/background_tokenizer.html",
    "content": "\n<div id=\"documentation\" class=\"span9\">\n  <div class=\"classContent\">\n    <div class=\"membersBackground\"></div>\n    <div class=\" members pos0\">\n      <div class=\" membersContent pos0\">\n        <h1 class=\"memberHeader\"><span class=\"name\">BackgroundTokenizer</span>\n        </h1>\n        <ul data-tabs=\"tabs\" class=\"nav tabs pos0\">\n          <li data-dropdown=\"dropdown\" class=\"dropdown\"><a href=\"#\" data-toggle=\"dropdown\" class=\"dropdown-toggle\"><span>Events (1)</span><b class=\"caret\"></b></a>\n            <ul class=\"dropdown-menu\">\n              <li id=\"dropdown_BackgroundTokenizer.event.update\" data-id=\"BackgroundTokenizer.event.update\" class=\"memberLink\"><a href=\"#BackgroundTokenizer.event.update\" class=\"\" title=\"BackgroundTokenizer.event.update (event)\" data-id=\"BackgroundTokenizer.event.update\">update</a>\n              </li>\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\"><a href=\"#\" data-toggle=\"dropdown\" class=\"dropdown-toggle\"><span>Constructors (1)</span><b class=\"caret\"></b></a>\n            <ul class=\"dropdown-menu\">\n              <li id=\"dropdown_BackgroundTokenizer.new\" data-id=\"BackgroundTokenizer.new\" class=\"memberLink\"><a href=\"#BackgroundTokenizer.new\" class=\"\" title=\"BackgroundTokenizer.new (constructor)\" data-id=\"BackgroundTokenizer.new\">new</a>\n              </li>\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\"><a href=\"#\" data-toggle=\"dropdown\" class=\"dropdown-toggle\"><span>Functions (7)</span><b class=\"caret\"></b></a>\n            <ul class=\"dropdown-menu\">\n              <li id=\"dropdown_BackgroundTokenizer.fireUpdateEvent\" data-id=\"BackgroundTokenizer.fireUpdateEvent\" class=\"memberLink\"><a href=\"#BackgroundTokenizer.fireUpdateEvent\" class=\"\" title=\"BackgroundTokenizer.fireUpdateEvent (class method)\" data-id=\"BackgroundTokenizer.fireUpdateEvent\">fireUpdateEvent</a>\n              </li>\n              <li id=\"dropdown_BackgroundTokenizer.getState\" data-id=\"BackgroundTokenizer.getState\" class=\"memberLink\"><a href=\"#BackgroundTokenizer.getState\" class=\"\" title=\"BackgroundTokenizer.getState (class method)\" data-id=\"BackgroundTokenizer.getState\">getState</a>\n              </li>\n              <li id=\"dropdown_BackgroundTokenizer.getTokens\" data-id=\"BackgroundTokenizer.getTokens\" class=\"memberLink\"><a href=\"#BackgroundTokenizer.getTokens\" class=\"\" title=\"BackgroundTokenizer.getTokens (class method)\" data-id=\"BackgroundTokenizer.getTokens\">getTokens</a>\n              </li>\n              <li id=\"dropdown_BackgroundTokenizer.setDocument\" data-id=\"BackgroundTokenizer.setDocument\" class=\"memberLink\"><a href=\"#BackgroundTokenizer.setDocument\" class=\"\" title=\"BackgroundTokenizer.setDocument (class method)\" data-id=\"BackgroundTokenizer.setDocument\">setDocument</a>\n              </li>\n              <li id=\"dropdown_BackgroundTokenizer.setTokenizer\" data-id=\"BackgroundTokenizer.setTokenizer\" class=\"memberLink\"><a href=\"#BackgroundTokenizer.setTokenizer\" class=\"\" title=\"BackgroundTokenizer.setTokenizer (class method)\" data-id=\"BackgroundTokenizer.setTokenizer\">setTokenizer</a>\n              </li>\n              <li id=\"dropdown_BackgroundTokenizer.start\" data-id=\"BackgroundTokenizer.start\" class=\"memberLink\"><a href=\"#BackgroundTokenizer.start\" class=\"\" title=\"BackgroundTokenizer.start (class method)\" data-id=\"BackgroundTokenizer.start\">start</a>\n              </li>\n              <li id=\"dropdown_BackgroundTokenizer.stop\" data-id=\"BackgroundTokenizer.stop\" class=\"memberLink\"><a href=\"#BackgroundTokenizer.stop\" class=\"\" title=\"BackgroundTokenizer.stop (class method)\" data-id=\"BackgroundTokenizer.stop\">stop</a>\n              </li>\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n        </ul>\n      </div>\n    </div>\n    <article id=\"BackgroundTokenizer\" data-title=\"BackgroundTokenizer (class)\" class=\"article\">\n      <div class=\"section description\">\n        <div class=\"memberContent\"><p>Tokenizes the current <a href=\"document.html\" class=\"link-short\" title=\"Document (class)\" data-id=\"Document\"><code>Document</code></a> in the background, and caches the tokenized rows for future use. </p>\n<p>If a certain row is changed, everything below that row is re-tokenized.</p>\n\n        </div>\n      </div>\n    </article>\n    <h3 class=\"sectionHeader\">Constructors</h3>\n    <article id=\"BackgroundTokenizer.new\" data-title=\"BackgroundTokenizer.new (constructor)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"BackgroundTokenizer.new\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span class=\"constructorIdentifier\">new </span><span id=\"BackgroundTokenizer.new\" class=\"member-name methodClicker\">BackgroundTokenizer</span>(<span class=\"sigArgList\"><a href=\"tokenizer.html\" class=\"argument methodClicker\" title=\"Tokenizer (class)\" data-id=\"Tokenizer\">Tokenizer</a> tokenizer, <a href=\"editor.html\" class=\"argument methodClicker\" title=\"Editor (class)\" data-id=\"Editor\">Editor</a> editor</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_BackgroundTokenizer.new\" class=\"ellipsis_description\"><p>Creates a new <code>BackgroundTokenizer</code> object.</p>\n\n            </div>\n            <div class=\"description\"><p>Creates a new <code>BackgroundTokenizer</code> object.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">tokenizer</td><td class=\"argType\" \"><a href=\"tokenizer.html\" class=\"\" title=\"Tokenizer (class)\" data-id=\"Tokenizer\">Tokenizer</a></td><td class=\"argDescription \"><p>Required. The tokenizer to use</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">editor</td><td class=\"argType\" \"><a href=\"editor.html\" class=\"\" title=\"Editor (class)\" data-id=\"Editor\">Editor</a></td><td class=\"argDescription \"><p>Required. The editor to associate with</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <h3 class=\"sectionHeader\">Events</h3>\n    <article id=\"BackgroundTokenizer.event.update\" data-title=\"BackgroundTokenizer.event.update (event)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"BackgroundTokenizer.event.update\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span class=\"eventObjName\">BackgroundTokenizer</span><span class=\"eventListenerStart\">.on(\"</span><span id=\"BackgroundTokenizer.event.update\" class=\"member-name eventMember methodClicker\">update</span><span class=\"eventListenerClose\">\", </span><span class=\"eventFunctionOpen\">function(</span><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> e<span class=\"eventFunctionClose\">))</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_BackgroundTokenizer.event.update\" class=\"ellipsis_description\"><p>Fires whenever the background tokeniziers between a range of rows are going to be updated.</p>\n\n            </div>\n            <div class=\"description\"><p>Fires whenever the background tokeniziers between a range of rows are going to be updated.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">e</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. An object containing two properties, <code>first</code> and <code>last</code>, which indicate the rows of the region being updated.</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <h3 class=\"sectionHeader\">Methods</h3>\n    <article id=\"BackgroundTokenizer.fireUpdateEvent\" data-title=\"BackgroundTokenizer.fireUpdateEvent (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"BackgroundTokenizer.fireUpdateEvent\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"BackgroundTokenizer.fireUpdateEvent\" class=\"member-name methodClicker\"><span class=\"sigClassName\">BackgroundTokenizer.</span><span class=\"sigMemberName\">fireUpdateEvent</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> firstRow, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> lastRow</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_BackgroundTokenizer.fireUpdateEvent\" class=\"ellipsis_description\"><p>Emits the <code>&#39;update&#39;</code> event. <code>firstRow</code> and <code>lastRow</code> are used to define the boundaries of the region to be updated.</p>\n\n            </div>\n            <div class=\"description\"><p>Emits the <code>&#39;update&#39;</code> event. <code>firstRow</code> and <code>lastRow</code> are used to define the boundaries of the region to be updated.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">firstRow</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The starting row region</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">lastRow</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The final row region</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"BackgroundTokenizer.getState\" data-title=\"BackgroundTokenizer.getState (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"BackgroundTokenizer.getState\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"BackgroundTokenizer.getState\" class=\"member-name methodClicker\"><span class=\"sigClassName\">BackgroundTokenizer.</span><span class=\"sigMemberName\">getState</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> row</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_BackgroundTokenizer.getState\" class=\"ellipsis_description\"><p>Returns the state of tokenization at the end of a row.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the state of tokenization at the end of a row.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">row</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The row to get state at</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"BackgroundTokenizer.getTokens\" data-title=\"BackgroundTokenizer.getTokens (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"BackgroundTokenizer.getTokens\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"BackgroundTokenizer.getTokens\" class=\"member-name methodClicker\"><span class=\"sigClassName\">BackgroundTokenizer.</span><span class=\"sigMemberName\">getTokens</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> row</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_BackgroundTokenizer.getTokens\" class=\"ellipsis_description\"><p>Gives list of tokens of the row. (tokens are cached)</p>\n\n            </div>\n            <div class=\"description\"><p>Gives list of tokens of the row. (tokens are cached)</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">row</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The row to get tokens at</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"BackgroundTokenizer.setDocument\" data-title=\"BackgroundTokenizer.setDocument (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"BackgroundTokenizer.setDocument\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"BackgroundTokenizer.setDocument\" class=\"member-name methodClicker\"><span class=\"sigClassName\">BackgroundTokenizer.</span><span class=\"sigMemberName\">setDocument</span></span>(<span class=\"sigArgList\"><a href=\"document.html\" class=\"argument methodClicker\" title=\"Document (class)\" data-id=\"Document\">Document</a> doc</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_BackgroundTokenizer.setDocument\" class=\"ellipsis_description\"><p>Sets a new document to associate with this object.</p>\n\n            </div>\n            <div class=\"description\"><p>Sets a new document to associate with this object.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">doc</td><td class=\"argType\" \"><a href=\"document.html\" class=\"\" title=\"Document (class)\" data-id=\"Document\">Document</a></td><td class=\"argDescription \"><p>Required. The new document to associate with</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"BackgroundTokenizer.setTokenizer\" data-title=\"BackgroundTokenizer.setTokenizer (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"BackgroundTokenizer.setTokenizer\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"BackgroundTokenizer.setTokenizer\" class=\"member-name methodClicker\"><span class=\"sigClassName\">BackgroundTokenizer.</span><span class=\"sigMemberName\">setTokenizer</span></span>(<span class=\"sigArgList\"><a href=\"tokenizer.html\" class=\"argument methodClicker\" title=\"Tokenizer (class)\" data-id=\"Tokenizer\">Tokenizer</a> tokenizer</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_BackgroundTokenizer.setTokenizer\" class=\"ellipsis_description\"><p>Sets a new tokenizer for this object.</p>\n\n            </div>\n            <div class=\"description\"><p>Sets a new tokenizer for this object.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">tokenizer</td><td class=\"argType\" \"><a href=\"tokenizer.html\" class=\"\" title=\"Tokenizer (class)\" data-id=\"Tokenizer\">Tokenizer</a></td><td class=\"argDescription \"><p>Required. The new tokenizer to use</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"BackgroundTokenizer.start\" data-title=\"BackgroundTokenizer.start (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"BackgroundTokenizer.start\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"BackgroundTokenizer.start\" class=\"member-name methodClicker\"><span class=\"sigClassName\">BackgroundTokenizer.</span><span class=\"sigMemberName\">start</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> startRow</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_BackgroundTokenizer.start\" class=\"ellipsis_description\"><p>Starts tokenizing at the row indicated.</p>\n\n            </div>\n            <div class=\"description\"><p>Starts tokenizing at the row indicated.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">startRow</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The row to start at</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"BackgroundTokenizer.stop\" data-title=\"BackgroundTokenizer.stop (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"BackgroundTokenizer.stop\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"BackgroundTokenizer.stop\" class=\"member-name methodClicker\"><span class=\"sigClassName\">BackgroundTokenizer.</span><span class=\"sigMemberName\">stop</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_BackgroundTokenizer.stop\" class=\"ellipsis_description\"><p>Stops tokenizing.</p>\n\n            </div>\n            <div class=\"description\"><p>Stops tokenizing.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n  </div>\n  <script defer src=\"./resources/javascripts/ux.js\"></script>\n  <script src=\"./resources/javascripts/clicker.js\"></script>\n  <script src=\"./resources/javascripts/jquery-scrollspy.js\"></script>\n  <script defer src=\"./resources/javascripts/disqus-ext.js\"></script>\n  <script defer src=\"./resources/javascripts/ga.js\"></script>\n  <div id=\"disqus_thread\"></div>\n</div>\n"
  },
  {
    "path": "api/command_manager.html",
    "content": "\n<div id=\"documentation\" class=\"span9\">\n  <div class=\"classContent\">\n    <div class=\"membersBackground\"></div>\n    <div class=\" members pos0\">\n      <div class=\" membersContent pos0\">\n        <h1 class=\"memberHeader\"><span class=\"name\">CommandManager</span>\n        </h1>\n        <ul data-tabs=\"tabs\" class=\"nav tabs pos0\">\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n        </ul>\n      </div>\n    </div>\n    <article id=\"CommandManager\" data-title=\"CommandManager (class)\" class=\"article\">\n      <div class=\"section description\">\n        <div class=\"memberContent\"><p>new CommandManager(platform, commands)</p>\n\n        </div>\n      </div>\n    </article>\n  </div>\n  <script defer src=\"./resources/javascripts/ux.js\"></script>\n  <script src=\"./resources/javascripts/clicker.js\"></script>\n  <script src=\"./resources/javascripts/jquery-scrollspy.js\"></script>\n  <script defer src=\"./resources/javascripts/disqus-ext.js\"></script>\n  <script defer src=\"./resources/javascripts/ga.js\"></script>\n  <div id=\"disqus_thread\"></div>\n</div>"
  },
  {
    "path": "api/document.html",
    "content": "\n<div id=\"documentation\" class=\"span9\">\n  <div class=\"classContent\">\n    <div class=\"membersBackground\"></div>\n    <div class=\" members pos0\">\n      <div class=\" membersContent pos0\">\n        <h1 class=\"memberHeader\"><span class=\"name\">Document</span>\n        </h1>\n        <ul data-tabs=\"tabs\" class=\"nav tabs pos0\">\n          <li data-dropdown=\"dropdown\" class=\"dropdown\"><a href=\"#\" data-toggle=\"dropdown\" class=\"dropdown-toggle\"><span>Events (1)</span><b class=\"caret\"></b></a>\n            <ul class=\"dropdown-menu\">\n              <li id=\"dropdown_Document.event.change\" data-id=\"Document.event.change\" class=\"memberLink\"><a href=\"#Document.event.change\" class=\"\" title=\"Document.event.change (event)\" data-id=\"Document.event.change\">change</a>\n              </li>\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\"><a href=\"#\" data-toggle=\"dropdown\" class=\"dropdown-toggle\"><span>Constructors (1)</span><b class=\"caret\"></b></a>\n            <ul class=\"dropdown-menu\">\n              <li id=\"dropdown_Document.new\" data-id=\"Document.new\" class=\"memberLink\"><a href=\"#Document.new\" class=\"\" title=\"Document.new (constructor)\" data-id=\"Document.new\">new</a>\n              </li>\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\"><a href=\"#\" data-toggle=\"dropdown\" class=\"dropdown-toggle\"><span>Functions (26)</span><b class=\"caret\"></b></a>\n            <ul class=\"dropdown-menu\">\n              <li id=\"dropdown_Document.applyDeltas\" data-id=\"Document.applyDeltas\" class=\"memberLink\"><a href=\"#Document.applyDeltas\" class=\"\" title=\"Document.applyDeltas (class method)\" data-id=\"Document.applyDeltas\">applyDeltas</a>\n              </li>\n              <li id=\"dropdown_Document.createAnchor\" data-id=\"Document.createAnchor\" class=\"memberLink\"><a href=\"#Document.createAnchor\" class=\"\" title=\"Document.createAnchor (class method)\" data-id=\"Document.createAnchor\">createAnchor</a>\n              </li>\n              <li id=\"dropdown_Document.getAllLines\" data-id=\"Document.getAllLines\" class=\"memberLink\"><a href=\"#Document.getAllLines\" class=\"\" title=\"Document.getAllLines (class method)\" data-id=\"Document.getAllLines\">getAllLines</a>\n              </li>\n              <li id=\"dropdown_Document.getLength\" data-id=\"Document.getLength\" class=\"memberLink\"><a href=\"#Document.getLength\" class=\"\" title=\"Document.getLength (class method)\" data-id=\"Document.getLength\">getLength</a>\n              </li>\n              <li id=\"dropdown_Document.getLine\" data-id=\"Document.getLine\" class=\"memberLink\"><a href=\"#Document.getLine\" class=\"\" title=\"Document.getLine (class method)\" data-id=\"Document.getLine\">getLine</a>\n              </li>\n              <li id=\"dropdown_Document.getLines\" data-id=\"Document.getLines\" class=\"memberLink\"><a href=\"#Document.getLines\" class=\"\" title=\"Document.getLines (class method)\" data-id=\"Document.getLines\">getLines</a>\n              </li>\n              <li id=\"dropdown_Document.getNewLineCharacter\" data-id=\"Document.getNewLineCharacter\" class=\"memberLink\"><a href=\"#Document.getNewLineCharacter\" class=\"\" title=\"Document.getNewLineCharacter (class method)\" data-id=\"Document.getNewLineCharacter\">getNewLineCharacter</a>\n              </li>\n              <li id=\"dropdown_Document.getNewLineMode\" data-id=\"Document.getNewLineMode\" class=\"memberLink\"><a href=\"#Document.getNewLineMode\" class=\"\" title=\"Document.getNewLineMode (class method)\" data-id=\"Document.getNewLineMode\">getNewLineMode</a>\n              </li>\n              <li id=\"dropdown_Document.getTextRange\" data-id=\"Document.getTextRange\" class=\"memberLink\"><a href=\"#Document.getTextRange\" class=\"\" title=\"Document.getTextRange (class method)\" data-id=\"Document.getTextRange\">getTextRange</a>\n              </li>\n              <li id=\"dropdown_Document.getValue\" data-id=\"Document.getValue\" class=\"memberLink\"><a href=\"#Document.getValue\" class=\"\" title=\"Document.getValue (class method)\" data-id=\"Document.getValue\">getValue</a>\n              </li>\n              <li id=\"dropdown_Document.indexToPosition\" data-id=\"Document.indexToPosition\" class=\"memberLink\"><a href=\"#Document.indexToPosition\" class=\"\" title=\"Document.indexToPosition (class method)\" data-id=\"Document.indexToPosition\">indexToPosition</a>\n              </li>\n              <li id=\"dropdown_Document.insert\" data-id=\"Document.insert\" class=\"memberLink\"><a href=\"#Document.insert\" class=\"\" title=\"Document.insert (class method)\" data-id=\"Document.insert\">insert</a>\n              </li>\n              <li id=\"dropdown_Document.insertInLine\" data-id=\"Document.insertInLine\" class=\"memberLink\"><a href=\"#Document.insertInLine\" class=\"\" title=\"Document.insertInLine (class method)\" data-id=\"Document.insertInLine\">insertInLine</a>\n              </li>\n              <li id=\"dropdown_Document.insertLines\" data-id=\"Document.insertLines\" class=\"memberLink\"><a href=\"#Document.insertLines\" class=\"\" title=\"Document.insertLines (class method)\" data-id=\"Document.insertLines\">insertLines</a>\n              </li>\n              <li id=\"dropdown_Document.insertNewLine\" data-id=\"Document.insertNewLine\" class=\"memberLink\"><a href=\"#Document.insertNewLine\" class=\"\" title=\"Document.insertNewLine (class method)\" data-id=\"Document.insertNewLine\">insertNewLine</a>\n              </li>\n              <li id=\"dropdown_Document.isNewLine\" data-id=\"Document.isNewLine\" class=\"memberLink\"><a href=\"#Document.isNewLine\" class=\"\" title=\"Document.isNewLine (class method)\" data-id=\"Document.isNewLine\">isNewLine</a>\n              </li>\n              <li id=\"dropdown_Document.positionToIndex\" data-id=\"Document.positionToIndex\" class=\"memberLink\"><a href=\"#Document.positionToIndex\" class=\"\" title=\"Document.positionToIndex (class method)\" data-id=\"Document.positionToIndex\">positionToIndex</a>\n              </li>\n              <li id=\"dropdown_Document.remove\" data-id=\"Document.remove\" class=\"memberLink\"><a href=\"#Document.remove\" class=\"\" title=\"Document.remove (class method)\" data-id=\"Document.remove\">remove</a>\n              </li>\n              <li id=\"dropdown_Document.removeInLine\" data-id=\"Document.removeInLine\" class=\"memberLink\"><a href=\"#Document.removeInLine\" class=\"\" title=\"Document.removeInLine (class method)\" data-id=\"Document.removeInLine\">removeInLine</a>\n              </li>\n              <li id=\"dropdown_Document.removeLines\" data-id=\"Document.removeLines\" class=\"memberLink\"><a href=\"#Document.removeLines\" class=\"\" title=\"Document.removeLines (class method)\" data-id=\"Document.removeLines\">removeLines</a>\n              </li>\n              <li id=\"dropdown_Document.removeNewLine\" data-id=\"Document.removeNewLine\" class=\"memberLink\"><a href=\"#Document.removeNewLine\" class=\"\" title=\"Document.removeNewLine (class method)\" data-id=\"Document.removeNewLine\">removeNewLine</a>\n              </li>\n              <li id=\"dropdown_Document.replace\" data-id=\"Document.replace\" class=\"memberLink\"><a href=\"#Document.replace\" class=\"\" title=\"Document.replace (class method)\" data-id=\"Document.replace\">replace</a>\n              </li>\n              <li id=\"dropdown_Document.revertDeltas\" data-id=\"Document.revertDeltas\" class=\"memberLink\"><a href=\"#Document.revertDeltas\" class=\"\" title=\"Document.revertDeltas (class method)\" data-id=\"Document.revertDeltas\">revertDeltas</a>\n              </li>\n              <li id=\"dropdown_Document.setNewLineMode\" data-id=\"Document.setNewLineMode\" class=\"memberLink\"><a href=\"#Document.setNewLineMode\" class=\"\" title=\"Document.setNewLineMode (class method)\" data-id=\"Document.setNewLineMode\">setNewLineMode</a>\n              </li>\n              <li id=\"dropdown_Document.setValue\" data-id=\"Document.setValue\" class=\"memberLink\"><a href=\"#Document.setValue\" class=\"\" title=\"Document.setValue (class method)\" data-id=\"Document.setValue\">setValue</a>\n              </li>\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n        </ul>\n      </div>\n    </div>\n    <article id=\"Document\" data-title=\"Document (class)\" class=\"article\">\n      <div class=\"section description\">\n        <div class=\"memberContent\"><p>Contains the text of the document. Document can be attached to several <a href=\"edit_session.html\" class=\"link-short\" title=\"EditSession (class)\" data-id=\"EditSession\"><code>EditSession</code></a>s. </p>\n<p>At its core, <code>Document</code>s are just an array of strings, with each row in the document matching up to the array index.</p>\n\n        </div>\n      </div>\n    </article>\n    <h3 class=\"sectionHeader\">Constructors</h3>\n    <article id=\"Document.new\" data-title=\"Document.new (constructor)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Document.new\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span class=\"constructorIdentifier\">new </span><span id=\"Document.new\" class=\"member-name methodClicker\">Document</span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"argument methodClicker\" title=\"String\" data-id=\"String\">String</a> | <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array\" class=\"argument methodClicker\" title=\"Array\" data-id=\"Array\">Array</a> text</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Document.new\" class=\"ellipsis_description\"><p>Creates a new <code>Document</code>. If <code>text</code> is included, the <code>Document</code> contains those strings; otherwise, it&#39;s empty.</p>\n\n            </div>\n            <div class=\"description\"><p>Creates a new <code>Document</code>. If <code>text</code> is included, the <code>Document</code> contains those strings; otherwise, it&#39;s empty.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">text</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"\" title=\"String\" data-id=\"String\">String</a> | <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array\" class=\"\" title=\"Array\" data-id=\"Array\">Array</a></td><td class=\"argDescription \"><p>Required. The starting text</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <h3 class=\"sectionHeader\">Events</h3>\n    <article id=\"Document.event.change\" data-title=\"Document.event.change (event)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Document.event.change\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span class=\"eventObjName\">Document</span><span class=\"eventListenerStart\">.on(\"</span><span id=\"Document.event.change\" class=\"member-name eventMember methodClicker\">change</span><span class=\"eventListenerClose\">\", </span><span class=\"eventFunctionOpen\">function(</span><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> e<span class=\"eventFunctionClose\">))</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Document.event.change\" class=\"ellipsis_description\"><p>Fires whenever the document changes.</p>\n\n            </div>\n            <div class=\"description\"><p>Fires whenever the document changes.</p>\n<p>Several methods trigger different <code>&quot;change&quot;</code> events. Below is a list of each action type, followed by each property that&#39;s also available:</p>\n<ul>\n<li><code>&quot;insertLines&quot;</code> (emitted by <a href=\"#Document.insertLines\" class=\"link-short\" title=\"Document.insertLines (class method)\" data-id=\"Document.insertLines\"><code>Document.insertLines()</code></a>)</li>\n<li><code>range</code>: the <a href=\"range.html\" class=\"link-short\" title=\"Range (class)\" data-id=\"Range\"><code>Range</code></a> of the change within the document</li>\n<li><code>lines</code>: the lines in the document that are changing</li>\n<li><code>&quot;insertText&quot;</code> (emitted by <a href=\"#Document.insertNewLine\" class=\"link-short\" title=\"Document.insertNewLine (class method)\" data-id=\"Document.insertNewLine\"><code>Document.insertNewLine()</code></a>)</li>\n<li><code>range</code>: the <a href=\"range.html\" class=\"link-short\" title=\"Range (class)\" data-id=\"Range\"><code>Range</code></a> of the change within the document</li>\n<li><code>text</code>: the text that&#39;s being added</li>\n<li><code>&quot;removeLines&quot;</code> (emitted by <a href=\"#Document.insertLines\" class=\"link-short\" title=\"Document.insertLines (class method)\" data-id=\"Document.insertLines\"><code>Document.insertLines()</code></a>)</li>\n<li><code>range</code>: the <a href=\"range.html\" class=\"link-short\" title=\"Range (class)\" data-id=\"Range\"><code>Range</code></a> of the change within the document</li>\n<li><code>lines</code>: the lines in the document that were removed</li>\n<li><code>nl</code>: the new line character (as defined by <a href=\"#Document.getNewLineCharacter\" class=\"link-short\" title=\"Document.getNewLineCharacter (class method)\" data-id=\"Document.getNewLineCharacter\"><code>Document.getNewLineCharacter()</code></a>)</li>\n<li><code>&quot;removeText&quot;</code> (emitted by <a href=\"#Document.removeInLine\" class=\"link-short\" title=\"Document.removeInLine (class method)\" data-id=\"Document.removeInLine\"><code>Document.removeInLine()</code></a> and <a href=\"#Document.removeNewLine\" class=\"link-short\" title=\"Document.removeNewLine (class method)\" data-id=\"Document.removeNewLine\"><code>Document.removeNewLine()</code></a>)</li>\n<li><code>range</code>: the <a href=\"range.html\" class=\"link-short\" title=\"Range (class)\" data-id=\"Range\"><code>Range</code></a> of the change within the document</li>\n<li><code>text</code>: the text that&#39;s being removed</li>\n</ul>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">e</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. Contains at least one property called <code>&quot;action&quot;</code>. <code>&quot;action&quot;</code> indicates the action that triggered the change. Each action also has a set of additional properties.</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <h3 class=\"sectionHeader\">Methods</h3>\n    <article id=\"Document.applyDeltas\" data-title=\"Document.applyDeltas (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Document.applyDeltas\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Document.applyDeltas\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Document.</span><span class=\"sigMemberName\">applyDeltas</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> deltas</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Document.applyDeltas\" class=\"ellipsis_description\"><p>Applies all the changes previously accumulated. These can be either <code>&#39;includeText&#39;</code>, <code>&#39;insertLines&#39;</code>, <code>&#39;removeText&#39;</code>, and <code>&#39;removeLines&#39;</code>.</p>\n\n            </div>\n            <div class=\"description\"><p>Applies all the changes previously accumulated. These can be either <code>&#39;includeText&#39;</code>, <code>&#39;insertLines&#39;</code>, <code>&#39;removeText&#39;</code>, and <code>&#39;removeLines&#39;</code>.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">deltas</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. </p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Document.createAnchor\" data-title=\"Document.createAnchor (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Document.createAnchor\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Document.createAnchor\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Document.</span><span class=\"sigMemberName\">createAnchor</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> row, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> column</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Document.createAnchor\" class=\"ellipsis_description\"><p>Creates a new <code>Anchor</code> to define a floating point in the document.</p>\n\n            </div>\n            <div class=\"description\"><p>Creates a new <code>Anchor</code> to define a floating point in the document.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">row</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The row number to use</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">column</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The column number to use</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Document.getAllLines\" data-title=\"Document.getAllLines (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Document.getAllLines\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Document.getAllLines\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Document.</span><span class=\"sigMemberName\">getAllLines</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Document.getAllLines\" class=\"ellipsis_description\"><p>Returns all lines in the document as string array.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns all lines in the document as string array. Warning: The caller should not modify this array!</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Document.getLength\" data-title=\"Document.getLength (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Document.getLength\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Document.getLength\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Document.</span><span class=\"sigMemberName\">getLength</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Document.getLength\" class=\"ellipsis_description\"><p>Returns the number of rows in the document.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the number of rows in the document.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Document.getLine\" data-title=\"Document.getLine (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Document.getLine\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Document.getLine\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Document.</span><span class=\"sigMemberName\">getLine</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> row</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Document.getLine\" class=\"ellipsis_description\"><p>Returns a verbatim copy of the given line as it is in the document</p>\n\n            </div>\n            <div class=\"description\"><p>Returns a verbatim copy of the given line as it is in the document</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">row</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The row index to retrieve</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Document.getLines\" data-title=\"Document.getLines (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Document.getLines\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Document.getLines\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Document.</span><span class=\"sigMemberName\">getLines</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> firstRow, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> lastRow</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Document.getLines\" class=\"ellipsis_description\"><p>Returns an array of strings of the rows between <code>firstRow</code> and <code>lastRow</code>. This function is inclusive of <code>lastRow</code>.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns an array of strings of the rows between <code>firstRow</code> and <code>lastRow</code>. This function is inclusive of <code>lastRow</code>.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">firstRow</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The first row index to retrieve</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">lastRow</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The final row index to retrieve</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Document.getNewLineCharacter\" data-title=\"Document.getNewLineCharacter (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Document.getNewLineCharacter\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Document.getNewLineCharacter\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Document.</span><span class=\"sigMemberName\">getNewLineCharacter</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"returnType \" title=\"String\" data-id=\"String\">String</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Document.getNewLineCharacter\" class=\"ellipsis_description\"><p>Returns the newline character that&#39;s being used, depending on the value of <code>newLineMode</code>.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the newline character that&#39;s being used, depending on the value of <code>newLineMode</code>.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Document.getNewLineMode\" data-title=\"Document.getNewLineMode (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Document.getNewLineMode\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Document.getNewLineMode\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Document.</span><span class=\"sigMemberName\">getNewLineMode</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"returnType \" title=\"String\" data-id=\"String\">String</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Document.getNewLineMode\" class=\"ellipsis_description\"><p>Returns the type of newlines being used; either <code>windows</code>, <code>unix</code>, or <code>auto</code></p>\n\n            </div>\n            <div class=\"description\"><p>Returns the type of newlines being used; either <code>windows</code>, <code>unix</code>, or <code>auto</code></p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Document.getTextRange\" data-title=\"Document.getTextRange (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Document.getTextRange\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Document.getTextRange\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Document.</span><span class=\"sigMemberName\">getTextRange</span></span>(<span class=\"sigArgList\"><a href=\"range.html\" class=\"argument methodClicker\" title=\"Range (class)\" data-id=\"Range\">Range</a> range</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Document.getTextRange\" class=\"ellipsis_description\"><p>Given a range within the document, this function returns all the text within that range as a single string.</p>\n\n            </div>\n            <div class=\"description\"><p>Given a range within the document, this function returns all the text within that range as a single string.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">range</td><td class=\"argType\" \"><a href=\"range.html\" class=\"\" title=\"Range (class)\" data-id=\"Range\">Range</a></td><td class=\"argDescription \"><p>Required. The range to work with</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Document.getValue\" data-title=\"Document.getValue (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Document.getValue\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Document.getValue\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Document.</span><span class=\"sigMemberName\">getValue</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Document.getValue\" class=\"ellipsis_description\"><p>Returns all the lines in the document as a single string, split by the new line character.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns all the lines in the document as a single string, split by the new line character.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Document.indexToPosition\" data-title=\"Document.indexToPosition (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Document.indexToPosition\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Document.indexToPosition\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Document.</span><span class=\"sigMemberName\">indexToPosition</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> index, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> startRow</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"returnType \" title=\"Object\" data-id=\"Object\">Object</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Document.indexToPosition\" class=\"ellipsis_description\"><p>Converts an index position in a document to a <code>{row, column}</code> object.</p>\n\n            </div>\n            <div class=\"description\"><p>Converts an index position in a document to a <code>{row, column}</code> object.</p>\n<p>Index refers to the &quot;absolute position&quot; of a character in the document. For example:</p>\n<pre><code class=\"language-javascript\"><span class=\"keyword\">var</span> x = <span class=\"number\">0</span>; <span class=\"comment\">// 10 characters, plus one for newline</span>\n<span class=\"keyword\">var</span> y = -<span class=\"number\">1</span>;</code></pre>\n<p>Here, <code>y</code> is an index 15: 11 characters for the first row, and 5 characters until <code>y</code> in the second.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">index</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. An index to convert</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">startRow</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. =0 The row from which to start the conversion</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Document.insert\" data-title=\"Document.insert (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Document.insert\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Document.insert\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Document.</span><span class=\"sigMemberName\">insert</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> position, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"argument methodClicker\" title=\"String\" data-id=\"String\">String</a> text</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"returnType \" title=\"Object\" data-id=\"Object\">Object</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Document.insert\" class=\"ellipsis_description\"><p>Inserts a block of <code>text</code> and the indicated <code>position</code>.</p>\n\n            </div>\n            <div class=\"description\"><p>Inserts a block of <code>text</code> and the indicated <code>position</code>.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">position</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. The position to start inserting at</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">text</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"\" title=\"String\" data-id=\"String\">String</a></td><td class=\"argDescription \"><p>Required. A chunk of text to insert</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Document.insertInLine\" data-title=\"Document.insertInLine (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Document.insertInLine\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Document.insertInLine\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Document.</span><span class=\"sigMemberName\">insertInLine</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> position, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"argument methodClicker\" title=\"String\" data-id=\"String\">String</a> text</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"returnType \" title=\"Object\" data-id=\"Object\">Object</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Document.insertInLine\" class=\"ellipsis_description\"><p>Inserts <code>text</code> into the <code>position</code> at the current row. This method also triggers the <code>&#39;change&#39;</code> event.</p>\n\n            </div>\n            <div class=\"description\"><p>Inserts <code>text</code> into the <code>position</code> at the current row. This method also triggers the <code>&#39;change&#39;</code> event.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">position</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. The position to insert at</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">text</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"\" title=\"String\" data-id=\"String\">String</a></td><td class=\"argDescription \"><p>Required. A chunk of text</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Document.insertLines\" data-title=\"Document.insertLines (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Document.insertLines\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Document.insertLines\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Document.</span><span class=\"sigMemberName\">insertLines</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> row, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array\" class=\"argument methodClicker\" title=\"Array\" data-id=\"Array\">Array</a> lines</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"returnType \" title=\"Object\" data-id=\"Object\">Object</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Document.insertLines\" class=\"ellipsis_description\"><p>Inserts the elements in <code>lines</code> into the document, starting at the row index given by <code>row</code>. This method also triggers the <code>&#39;change&#39;</code> event.</p>\n\n            </div>\n            <div class=\"description\"><p>Inserts the elements in <code>lines</code> into the document, starting at the row index given by <code>row</code>. This method also triggers the <code>&#39;change&#39;</code> event.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">row</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The index of the row to insert at</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">lines</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array\" class=\"\" title=\"Array\" data-id=\"Array\">Array</a></td><td class=\"argDescription \"><p>Required. An array of strings</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Document.insertNewLine\" data-title=\"Document.insertNewLine (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Document.insertNewLine\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Document.insertNewLine\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Document.</span><span class=\"sigMemberName\">insertNewLine</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> position</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"returnType \" title=\"Object\" data-id=\"Object\">Object</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Document.insertNewLine\" class=\"ellipsis_description\"><p>Inserts a new line into the document at the current row&#39;s <code>position</code>. This method also triggers the <code>&#39;change&#39;</code> event.</p>\n\n            </div>\n            <div class=\"description\"><p>Inserts a new line into the document at the current row&#39;s <code>position</code>. This method also triggers the <code>&#39;change&#39;</code> event.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">position</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. The position to insert at</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Document.isNewLine\" data-title=\"Document.isNewLine (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Document.isNewLine\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Document.isNewLine\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Document.</span><span class=\"sigMemberName\">isNewLine</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"argument methodClicker\" title=\"String\" data-id=\"String\">String</a> text</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Document.isNewLine\" class=\"ellipsis_description\"><p>Returns <code>true</code> if <code>text</code> is a newline character (either <code>\\r\\n</code>, <code>\\r</code>, or <code>\\n</code>).</p>\n\n            </div>\n            <div class=\"description\"><p>Returns <code>true</code> if <code>text</code> is a newline character (either <code>\\r\\n</code>, <code>\\r</code>, or <code>\\n</code>).</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">text</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"\" title=\"String\" data-id=\"String\">String</a></td><td class=\"argDescription \"><p>Required. The text to check</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Document.positionToIndex\" data-title=\"Document.positionToIndex (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Document.positionToIndex\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Document.positionToIndex\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Document.</span><span class=\"sigMemberName\">positionToIndex</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> pos, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> startRow</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"returnType \" title=\"Number\" data-id=\"Number\">Number</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Document.positionToIndex\" class=\"ellipsis_description\"><p>Converts the <code>{row, column}</code> position in a document to the character&#39;s index.</p>\n\n            </div>\n            <div class=\"description\"><p>Converts the <code>{row, column}</code> position in a document to the character&#39;s index.</p>\n<p>Index refers to the &quot;absolute position&quot; of a character in the document. For example:</p>\n<pre><code class=\"language-javascript\"><span class=\"keyword\">var</span> x = <span class=\"number\">0</span>; <span class=\"comment\">// 10 characters, plus one for newline</span>\n<span class=\"keyword\">var</span> y = -<span class=\"number\">1</span>;</code></pre>\n<p>Here, <code>y</code> is an index 15: 11 characters for the first row, and 5 characters until <code>y</code> in the second.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">pos</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. The <code>{row, column}</code> to convert</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">startRow</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. =0 The row from which to start the conversion</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Document.remove\" data-title=\"Document.remove (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Document.remove\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Document.remove\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Document.</span><span class=\"sigMemberName\">remove</span></span>(<span class=\"sigArgList\"><a href=\"range.html\" class=\"argument methodClicker\" title=\"Range (class)\" data-id=\"Range\">Range</a> range</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"returnType \" title=\"Object\" data-id=\"Object\">Object</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Document.remove\" class=\"ellipsis_description\"><p>Removes the <code>range</code> from the document.</p>\n\n            </div>\n            <div class=\"description\"><p>Removes the <code>range</code> from the document.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">range</td><td class=\"argType\" \"><a href=\"range.html\" class=\"\" title=\"Range (class)\" data-id=\"Range\">Range</a></td><td class=\"argDescription \"><p>Required. A specified Range to remove</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Document.removeInLine\" data-title=\"Document.removeInLine (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Document.removeInLine\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Document.removeInLine\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Document.</span><span class=\"sigMemberName\">removeInLine</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> row, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> startColumn, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> endColumn</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"returnType \" title=\"Object\" data-id=\"Object\">Object</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Document.removeInLine\" class=\"ellipsis_description\"><p>Removes the specified columns from the <code>row</code>. This method also triggers the <code>&#39;change&#39;</code> event.</p>\n\n            </div>\n            <div class=\"description\"><p>Removes the specified columns from the <code>row</code>. This method also triggers the <code>&#39;change&#39;</code> event.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">row</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The row to remove from</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">startColumn</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The column to start removing at</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">endColumn</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The column to stop removing at</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Document.removeLines\" data-title=\"Document.removeLines (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Document.removeLines\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Document.removeLines\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Document.</span><span class=\"sigMemberName\">removeLines</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> firstRow, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> lastRow</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"returnType \" title=\"String\" data-id=\"String\">String</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Document.removeLines\" class=\"ellipsis_description\"><p>Removes a range of full lines. This method also triggers the <code>&#39;change&#39;</code> event.</p>\n\n            </div>\n            <div class=\"description\"><p>Removes a range of full lines. This method also triggers the <code>&#39;change&#39;</code> event.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">firstRow</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The first row to be removed</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">lastRow</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The last row to be removed</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Document.removeNewLine\" data-title=\"Document.removeNewLine (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Document.removeNewLine\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Document.removeNewLine\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Document.</span><span class=\"sigMemberName\">removeNewLine</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> row</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Document.removeNewLine\" class=\"ellipsis_description\"><p>Removes the new line between <code>row</code> and the row immediately following it. This method also triggers the <code>&#39;change&#39;</code> event.</p>\n\n            </div>\n            <div class=\"description\"><p>Removes the new line between <code>row</code> and the row immediately following it. This method also triggers the <code>&#39;change&#39;</code> event.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">row</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The row to check</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Document.replace\" data-title=\"Document.replace (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Document.replace\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Document.replace\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Document.</span><span class=\"sigMemberName\">replace</span></span>(<span class=\"sigArgList\"><a href=\"range.html\" class=\"argument methodClicker\" title=\"Range (class)\" data-id=\"Range\">Range</a> range, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"argument methodClicker\" title=\"String\" data-id=\"String\">String</a> text</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"returnType \" title=\"Object\" data-id=\"Object\">Object</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Document.replace\" class=\"ellipsis_description\"><p>Replaces a range in the document with the new <code>text</code>.</p>\n\n            </div>\n            <div class=\"description\"><p>Replaces a range in the document with the new <code>text</code>.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">range</td><td class=\"argType\" \"><a href=\"range.html\" class=\"\" title=\"Range (class)\" data-id=\"Range\">Range</a></td><td class=\"argDescription \"><p>Required. A specified Range to replace</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">text</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"\" title=\"String\" data-id=\"String\">String</a></td><td class=\"argDescription \"><p>Required. The new text to use as a replacement</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Document.revertDeltas\" data-title=\"Document.revertDeltas (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Document.revertDeltas\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Document.revertDeltas\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Document.</span><span class=\"sigMemberName\">revertDeltas</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> deltas</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Document.revertDeltas\" class=\"ellipsis_description\"><p>Reverts any changes previously applied. These can be either <code>&#39;includeText&#39;</code>, <code>&#39;insertLines&#39;</code>, <code>&#39;removeText&#39;</code>, and <code>&#39;removeLines&#39;</code>.</p>\n\n            </div>\n            <div class=\"description\"><p>Reverts any changes previously applied. These can be either <code>&#39;includeText&#39;</code>, <code>&#39;insertLines&#39;</code>, <code>&#39;removeText&#39;</code>, and <code>&#39;removeLines&#39;</code>.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">deltas</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. </p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Document.setNewLineMode\" data-title=\"Document.setNewLineMode (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Document.setNewLineMode\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Document.setNewLineMode\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Document.</span><span class=\"sigMemberName\">setNewLineMode</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"argument methodClicker\" title=\"String\" data-id=\"String\">String</a> newLineMode</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Document.setNewLineMode\" class=\"ellipsis_description\"><p>Sets the new line mode.</p>\n\n            </div>\n            <div class=\"description\"><p>Sets the new line mode.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">newLineMode</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"\" title=\"String\" data-id=\"String\">String</a></td><td class=\"argDescription \"><p>Required. The newline mode to use; can be either <code>windows</code>, <code>unix</code>, or <code>auto</code></p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Document.setValue\" data-title=\"Document.setValue (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Document.setValue\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Document.setValue\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Document.</span><span class=\"sigMemberName\">setValue</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"argument methodClicker\" title=\"String\" data-id=\"String\">String</a> text</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Document.setValue\" class=\"ellipsis_description\"><p>Replaces all the lines in the current <code>Document</code> with the value of <code>text</code>.</p>\n\n            </div>\n            <div class=\"description\"><p>Replaces all the lines in the current <code>Document</code> with the value of <code>text</code>.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">text</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"\" title=\"String\" data-id=\"String\">String</a></td><td class=\"argDescription \"><p>Required. The text to use</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n  </div>\n  <script defer src=\"./resources/javascripts/ux.js\"></script>\n  <script src=\"./resources/javascripts/clicker.js\"></script>\n  <script src=\"./resources/javascripts/jquery-scrollspy.js\"></script>\n  <script defer src=\"./resources/javascripts/disqus-ext.js\"></script>\n  <script defer src=\"./resources/javascripts/ga.js\"></script>\n  <div id=\"disqus_thread\"></div>\n</div>"
  },
  {
    "path": "api/edit_session.html",
    "content": "\n<div id=\"documentation\" class=\"span7\">\n  <div class=\"classContent\">\n    <div class=\"membersBackground\"></div>\n    <div class=\" members pos0\">\n      <div class=\" membersContent pos0\">\n        <h1 class=\"memberHeader\"><span class=\"name\">EditSession</span>\n        </h1>\n        <ul data-tabs=\"tabs\" class=\"nav tabs pos0\">\n          <li data-dropdown=\"dropdown\" class=\"dropdown\"><a href=\"#\" data-toggle=\"dropdown\" class=\"dropdown-toggle\"><span>Events (15)</span><b class=\"caret\"></b></a>\n            <ul class=\"dropdown-menu\">\n              <li id=\"dropdown_EditSession.event.change\" data-id=\"EditSession.event.change\" class=\"memberLink\"><a href=\"#EditSession.event.change\" class=\"\" title=\"EditSession.event.change (event)\" data-id=\"EditSession.event.change\">change</a>\n              </li>\n              <li id=\"dropdown_EditSession.event.changeAnnotation\" data-id=\"EditSession.event.changeAnnotation\" class=\"memberLink\"><a href=\"#EditSession.event.changeAnnotation\" class=\"\" title=\"EditSession.event.changeAnnotation (event)\" data-id=\"EditSession.event.changeAnnotation\">changeAnnotation</a>\n              </li>\n              <li id=\"dropdown_EditSession.event.changeBackMarker\" data-id=\"EditSession.event.changeBackMarker\" class=\"memberLink\"><a href=\"#EditSession.event.changeBackMarker\" class=\"\" title=\"EditSession.event.changeBackMarker (event)\" data-id=\"EditSession.event.changeBackMarker\">changeBackMarker</a>\n              </li>\n              <li id=\"dropdown_EditSession.event.changeBreakpoint\" data-id=\"EditSession.event.changeBreakpoint\" class=\"memberLink\"><a href=\"#EditSession.event.changeBreakpoint\" class=\"\" title=\"EditSession.event.changeBreakpoint (event)\" data-id=\"EditSession.event.changeBreakpoint\">changeBreakpoint</a>\n              </li>\n              <li id=\"dropdown_EditSession.event.changeFold\" data-id=\"EditSession.event.changeFold\" class=\"memberLink\"><a href=\"#EditSession.event.changeFold\" class=\"\" title=\"EditSession.event.changeFold (event)\" data-id=\"EditSession.event.changeFold\">changeFold</a>\n              </li>\n              <li id=\"dropdown_EditSession.event.changeFrontMarker\" data-id=\"EditSession.event.changeFrontMarker\" class=\"memberLink\"><a href=\"#EditSession.event.changeFrontMarker\" class=\"\" title=\"EditSession.event.changeFrontMarker (event)\" data-id=\"EditSession.event.changeFrontMarker\">changeFrontMarker</a>\n              </li>\n              <li id=\"dropdown_EditSession.event.changeMode\" data-id=\"EditSession.event.changeMode\" class=\"memberLink\"><a href=\"#EditSession.event.changeMode\" class=\"\" title=\"EditSession.event.changeMode (event)\" data-id=\"EditSession.event.changeMode\">changeMode</a>\n              </li>\n              <li id=\"dropdown_EditSession.event.changeOverwrite\" data-id=\"EditSession.event.changeOverwrite\" class=\"memberLink\"><a href=\"#EditSession.event.changeOverwrite\" class=\"\" title=\"EditSession.event.changeOverwrite (event)\" data-id=\"EditSession.event.changeOverwrite\">changeOverwrite</a>\n              </li>\n              <li id=\"dropdown_EditSession.event.changeScrollLeft\" data-id=\"EditSession.event.changeScrollLeft\" class=\"memberLink\"><a href=\"#EditSession.event.changeScrollLeft\" class=\"\" title=\"EditSession.event.changeScrollLeft (event)\" data-id=\"EditSession.event.changeScrollLeft\">changeScrollLeft</a>\n              </li>\n              <li id=\"dropdown_EditSession.event.changeScrollTop\" data-id=\"EditSession.event.changeScrollTop\" class=\"memberLink\"><a href=\"#EditSession.event.changeScrollTop\" class=\"\" title=\"EditSession.event.changeScrollTop (event)\" data-id=\"EditSession.event.changeScrollTop\">changeScrollTop</a>\n              </li>\n              <li id=\"dropdown_EditSession.event.changeTabSize\" data-id=\"EditSession.event.changeTabSize\" class=\"memberLink\"><a href=\"#EditSession.event.changeTabSize\" class=\"\" title=\"EditSession.event.changeTabSize (event)\" data-id=\"EditSession.event.changeTabSize\">changeTabSize</a>\n              </li>\n              <li id=\"dropdown_EditSession.event.changeWrapLimit\" data-id=\"EditSession.event.changeWrapLimit\" class=\"memberLink\"><a href=\"#EditSession.event.changeWrapLimit\" class=\"\" title=\"EditSession.event.changeWrapLimit (event)\" data-id=\"EditSession.event.changeWrapLimit\">changeWrapLimit</a>\n              </li>\n              <li id=\"dropdown_EditSession.event.changeWrapMode\" data-id=\"EditSession.event.changeWrapMode\" class=\"memberLink\"><a href=\"#EditSession.event.changeWrapMode\" class=\"\" title=\"EditSession.event.changeWrapMode (event)\" data-id=\"EditSession.event.changeWrapMode\">changeWrapMode</a>\n              </li>\n              <li id=\"dropdown_EditSession.event.tokenizerUpdate\" data-id=\"EditSession.event.tokenizerUpdate\" class=\"memberLink\"><a href=\"#EditSession.event.tokenizerUpdate\" class=\"\" title=\"EditSession.event.tokenizerUpdate (event)\" data-id=\"EditSession.event.tokenizerUpdate\">tokenizerUpdate</a>\n              </li>\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\"><a href=\"#\" data-toggle=\"dropdown\" class=\"dropdown-toggle\"><span>Constructors (1)</span><b class=\"caret\"></b></a>\n            <ul class=\"dropdown-menu\">\n              <li id=\"dropdown_EditSession.new\" data-id=\"EditSession.new\" class=\"memberLink\"><a href=\"#EditSession.new\" class=\"\" title=\"EditSession.new (constructor)\" data-id=\"EditSession.new\">new</a>\n              </li>\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\"><a href=\"#\" data-toggle=\"dropdown\" class=\"dropdown-toggle\"><span>Functions (97)</span><b class=\"caret\"></b></a>\n            <ul class=\"dropdown-menu\">\n              <li id=\"dropdown_EditSession.addDynamicMarker\" data-id=\"EditSession.addDynamicMarker\" class=\"memberLink\"><a href=\"#EditSession.addDynamicMarker\" class=\"\" title=\"EditSession.addDynamicMarker (class method)\" data-id=\"EditSession.addDynamicMarker\">addDynamicMarker</a>\n              </li>\n              <li id=\"dropdown_EditSession.addGutterDecoration\" data-id=\"EditSession.addGutterDecoration\" class=\"memberLink\"><a href=\"#EditSession.addGutterDecoration\" class=\"\" title=\"EditSession.addGutterDecoration (class method)\" data-id=\"EditSession.addGutterDecoration\">addGutterDecoration</a>\n              </li>\n              <li id=\"dropdown_EditSession.addMarker\" data-id=\"EditSession.addMarker\" class=\"memberLink\"><a href=\"#EditSession.addMarker\" class=\"\" title=\"EditSession.addMarker (class method)\" data-id=\"EditSession.addMarker\">addMarker</a>\n              </li>\n              <li id=\"dropdown_EditSession.clearAnnotations\" data-id=\"EditSession.clearAnnotations\" class=\"memberLink\"><a href=\"#EditSession.clearAnnotations\" class=\"\" title=\"EditSession.clearAnnotations (class method)\" data-id=\"EditSession.clearAnnotations\">clearAnnotations</a>\n              </li>\n              <li id=\"dropdown_EditSession.clearBreakpoint\" data-id=\"EditSession.clearBreakpoint\" class=\"memberLink\"><a href=\"#EditSession.clearBreakpoint\" class=\"\" title=\"EditSession.clearBreakpoint (class method)\" data-id=\"EditSession.clearBreakpoint\">clearBreakpoint</a>\n              </li>\n              <li id=\"dropdown_EditSession.clearBreakpoints\" data-id=\"EditSession.clearBreakpoints\" class=\"memberLink\"><a href=\"#EditSession.clearBreakpoints\" class=\"\" title=\"EditSession.clearBreakpoints (class method)\" data-id=\"EditSession.clearBreakpoints\">clearBreakpoints</a>\n              </li>\n              <li id=\"dropdown_EditSession.documentToScreenColumn\" data-id=\"EditSession.documentToScreenColumn\" class=\"memberLink\"><a href=\"#EditSession.documentToScreenColumn\" class=\"\" title=\"EditSession.documentToScreenColumn (class method)\" data-id=\"EditSession.documentToScreenColumn\">documentToScreenColumn</a>\n              </li>\n              <li id=\"dropdown_EditSession.documentToScreenPosition\" data-id=\"EditSession.documentToScreenPosition\" class=\"memberLink\"><a href=\"#EditSession.documentToScreenPosition\" class=\"\" title=\"EditSession.documentToScreenPosition (class method)\" data-id=\"EditSession.documentToScreenPosition\">documentToScreenPosition</a>\n              </li>\n              <li id=\"dropdown_EditSession.documentToScreenRow\" data-id=\"EditSession.documentToScreenRow\" class=\"memberLink\"><a href=\"#EditSession.documentToScreenRow\" class=\"\" title=\"EditSession.documentToScreenRow (class method)\" data-id=\"EditSession.documentToScreenRow\">documentToScreenRow</a>\n              </li>\n              <li id=\"dropdown_EditSession.duplicateLines\" data-id=\"EditSession.duplicateLines\" class=\"memberLink\"><a href=\"#EditSession.duplicateLines\" class=\"\" title=\"EditSession.duplicateLines (class method)\" data-id=\"EditSession.duplicateLines\">duplicateLines</a>\n              </li>\n              <li id=\"dropdown_EditSession.getAnnotations\" data-id=\"EditSession.getAnnotations\" class=\"memberLink\"><a href=\"#EditSession.getAnnotations\" class=\"\" title=\"EditSession.getAnnotations (class method)\" data-id=\"EditSession.getAnnotations\">getAnnotations</a>\n              </li>\n              <li id=\"dropdown_EditSession.getAWordRange\" data-id=\"EditSession.getAWordRange\" class=\"memberLink\"><a href=\"#EditSession.getAWordRange\" class=\"\" title=\"EditSession.getAWordRange (class method)\" data-id=\"EditSession.getAWordRange\">getAWordRange</a>\n              </li>\n              <li id=\"dropdown_EditSession.getBreakpoints\" data-id=\"EditSession.getBreakpoints\" class=\"memberLink\"><a href=\"#EditSession.getBreakpoints\" class=\"\" title=\"EditSession.getBreakpoints (class method)\" data-id=\"EditSession.getBreakpoints\">getBreakpoints</a>\n              </li>\n              <li id=\"dropdown_EditSession.getDocument\" data-id=\"EditSession.getDocument\" class=\"memberLink\"><a href=\"#EditSession.getDocument\" class=\"\" title=\"EditSession.getDocument (class method)\" data-id=\"EditSession.getDocument\">getDocument</a>\n              </li>\n              <li id=\"dropdown_EditSession.getDocumentLastRowColumn\" data-id=\"EditSession.getDocumentLastRowColumn\" class=\"memberLink\"><a href=\"#EditSession.getDocumentLastRowColumn\" class=\"\" title=\"EditSession.getDocumentLastRowColumn (class method)\" data-id=\"EditSession.getDocumentLastRowColumn\">getDocumentLastRowColumn</a>\n              </li>\n              <li id=\"dropdown_EditSession.getDocumentLastRowColumnPosition\" data-id=\"EditSession.getDocumentLastRowColumnPosition\" class=\"memberLink\"><a href=\"#EditSession.getDocumentLastRowColumnPosition\" class=\"\" title=\"EditSession.getDocumentLastRowColumnPosition (class method)\" data-id=\"EditSession.getDocumentLastRowColumnPosition\">getDocumentLastRowColumnPosition</a>\n              </li>\n              <li id=\"dropdown_EditSession.getLength\" data-id=\"EditSession.getLength\" class=\"memberLink\"><a href=\"#EditSession.getLength\" class=\"\" title=\"EditSession.getLength (class method)\" data-id=\"EditSession.getLength\">getLength</a>\n              </li>\n              <li id=\"dropdown_EditSession.getLine\" data-id=\"EditSession.getLine\" class=\"memberLink\"><a href=\"#EditSession.getLine\" class=\"\" title=\"EditSession.getLine (class method)\" data-id=\"EditSession.getLine\">getLine</a>\n              </li>\n              <li id=\"dropdown_EditSession.getLines\" data-id=\"EditSession.getLines\" class=\"memberLink\"><a href=\"#EditSession.getLines\" class=\"\" title=\"EditSession.getLines (class method)\" data-id=\"EditSession.getLines\">getLines</a>\n              </li>\n              <li id=\"dropdown_EditSession.getMarkers\" data-id=\"EditSession.getMarkers\" class=\"memberLink\"><a href=\"#EditSession.getMarkers\" class=\"\" title=\"EditSession.getMarkers (class method)\" data-id=\"EditSession.getMarkers\">getMarkers</a>\n              </li>\n              <li id=\"dropdown_EditSession.getMode\" data-id=\"EditSession.getMode\" class=\"memberLink\"><a href=\"#EditSession.getMode\" class=\"\" title=\"EditSession.getMode (class method)\" data-id=\"EditSession.getMode\">getMode</a>\n              </li>\n              <li id=\"dropdown_EditSession.getNewLineMode\" data-id=\"EditSession.getNewLineMode\" class=\"memberLink\"><a href=\"#EditSession.getNewLineMode\" class=\"\" title=\"EditSession.getNewLineMode (class method)\" data-id=\"EditSession.getNewLineMode\">getNewLineMode</a>\n              </li>\n              <li id=\"dropdown_EditSession.getOverwrite\" data-id=\"EditSession.getOverwrite\" class=\"memberLink\"><a href=\"#EditSession.getOverwrite\" class=\"\" title=\"EditSession.getOverwrite (class method)\" data-id=\"EditSession.getOverwrite\">getOverwrite</a>\n              </li>\n              <li id=\"dropdown_EditSession.getRowLength\" data-id=\"EditSession.getRowLength\" class=\"memberLink\"><a href=\"#EditSession.getRowLength\" class=\"\" title=\"EditSession.getRowLength (class method)\" data-id=\"EditSession.getRowLength\">getRowLength</a>\n              </li>\n              <li id=\"dropdown_EditSession.getRowSplitData\" data-id=\"EditSession.getRowSplitData\" class=\"memberLink\"><a href=\"#EditSession.getRowSplitData\" class=\"\" title=\"EditSession.getRowSplitData (class method)\" data-id=\"EditSession.getRowSplitData\">getRowSplitData</a>\n              </li>\n              <li id=\"dropdown_EditSession.getScreenLastRowColumn\" data-id=\"EditSession.getScreenLastRowColumn\" class=\"memberLink\"><a href=\"#EditSession.getScreenLastRowColumn\" class=\"\" title=\"EditSession.getScreenLastRowColumn (class method)\" data-id=\"EditSession.getScreenLastRowColumn\">getScreenLastRowColumn</a>\n              </li>\n              <li id=\"dropdown_EditSession.getScreenLength\" data-id=\"EditSession.getScreenLength\" class=\"memberLink\"><a href=\"#EditSession.getScreenLength\" class=\"\" title=\"EditSession.getScreenLength (class method)\" data-id=\"EditSession.getScreenLength\">getScreenLength</a>\n              </li>\n              <li id=\"dropdown_EditSession.getScreenTabSize\" data-id=\"EditSession.getScreenTabSize\" class=\"memberLink\"><a href=\"#EditSession.getScreenTabSize\" class=\"\" title=\"EditSession.getScreenTabSize (class method)\" data-id=\"EditSession.getScreenTabSize\">getScreenTabSize</a>\n              </li>\n              <li id=\"dropdown_EditSession.getScreenWidth\" data-id=\"EditSession.getScreenWidth\" class=\"memberLink\"><a href=\"#EditSession.getScreenWidth\" class=\"\" title=\"EditSession.getScreenWidth (class method)\" data-id=\"EditSession.getScreenWidth\">getScreenWidth</a>\n              </li>\n              <li id=\"dropdown_EditSession.getScrollLeft\" data-id=\"EditSession.getScrollLeft\" class=\"memberLink\"><a href=\"#EditSession.getScrollLeft\" class=\"\" title=\"EditSession.getScrollLeft (class method)\" data-id=\"EditSession.getScrollLeft\">getScrollLeft</a>\n              </li>\n              <li id=\"dropdown_EditSession.getScrollTop\" data-id=\"EditSession.getScrollTop\" class=\"memberLink\"><a href=\"#EditSession.getScrollTop\" class=\"\" title=\"EditSession.getScrollTop (class method)\" data-id=\"EditSession.getScrollTop\">getScrollTop</a>\n              </li>\n              <li id=\"dropdown_EditSession.getSelection\" data-id=\"EditSession.getSelection\" class=\"memberLink\"><a href=\"#EditSession.getSelection\" class=\"\" title=\"EditSession.getSelection (class method)\" data-id=\"EditSession.getSelection\">getSelection</a>\n              </li>\n              <li id=\"dropdown_EditSession.getState\" data-id=\"EditSession.getState\" class=\"memberLink\"><a href=\"#EditSession.getState\" class=\"\" title=\"EditSession.getState (class method)\" data-id=\"EditSession.getState\">getState</a>\n              </li>\n              <li id=\"dropdown_EditSession.getTabSize\" data-id=\"EditSession.getTabSize\" class=\"memberLink\"><a href=\"#EditSession.getTabSize\" class=\"\" title=\"EditSession.getTabSize (class method)\" data-id=\"EditSession.getTabSize\">getTabSize</a>\n              </li>\n              <li id=\"dropdown_EditSession.getTabString\" data-id=\"EditSession.getTabString\" class=\"memberLink\"><a href=\"#EditSession.getTabString\" class=\"\" title=\"EditSession.getTabString (class method)\" data-id=\"EditSession.getTabString\">getTabString</a>\n              </li>\n              <li id=\"dropdown_EditSession.getTextRange\" data-id=\"EditSession.getTextRange\" class=\"memberLink\"><a href=\"#EditSession.getTextRange\" class=\"\" title=\"EditSession.getTextRange (class method)\" data-id=\"EditSession.getTextRange\">getTextRange</a>\n              </li>\n              <li id=\"dropdown_EditSession.getTokenAt\" data-id=\"EditSession.getTokenAt\" class=\"memberLink\"><a href=\"#EditSession.getTokenAt\" class=\"\" title=\"EditSession.getTokenAt (class method)\" data-id=\"EditSession.getTokenAt\">getTokenAt</a>\n              </li>\n              <li id=\"dropdown_EditSession.getTokens\" data-id=\"EditSession.getTokens\" class=\"memberLink\"><a href=\"#EditSession.getTokens\" class=\"\" title=\"EditSession.getTokens (class method)\" data-id=\"EditSession.getTokens\">getTokens</a>\n              </li>\n              <li id=\"dropdown_EditSession.getUndoManager\" data-id=\"EditSession.getUndoManager\" class=\"memberLink\"><a href=\"#EditSession.getUndoManager\" class=\"\" title=\"EditSession.getUndoManager (class method)\" data-id=\"EditSession.getUndoManager\">getUndoManager</a>\n              </li>\n              <li id=\"dropdown_EditSession.getUseSoftTabs\" data-id=\"EditSession.getUseSoftTabs\" class=\"memberLink\"><a href=\"#EditSession.getUseSoftTabs\" class=\"\" title=\"EditSession.getUseSoftTabs (class method)\" data-id=\"EditSession.getUseSoftTabs\">getUseSoftTabs</a>\n              </li>\n              <li id=\"dropdown_EditSession.getUseWorker\" data-id=\"EditSession.getUseWorker\" class=\"memberLink\"><a href=\"#EditSession.getUseWorker\" class=\"\" title=\"EditSession.getUseWorker (class method)\" data-id=\"EditSession.getUseWorker\">getUseWorker</a>\n              </li>\n              <li id=\"dropdown_EditSession.getUseWrapMode\" data-id=\"EditSession.getUseWrapMode\" class=\"memberLink\"><a href=\"#EditSession.getUseWrapMode\" class=\"\" title=\"EditSession.getUseWrapMode (class method)\" data-id=\"EditSession.getUseWrapMode\">getUseWrapMode</a>\n              </li>\n              <li id=\"dropdown_EditSession.getValue\" data-id=\"EditSession.getValue\" class=\"memberLink\"><a href=\"#EditSession.getValue\" class=\"\" title=\"EditSession.getValue (class method)\" data-id=\"EditSession.getValue\">getValue</a>\n              </li>\n              <li id=\"dropdown_EditSession.getWordRange\" data-id=\"EditSession.getWordRange\" class=\"memberLink\"><a href=\"#EditSession.getWordRange\" class=\"\" title=\"EditSession.getWordRange (class method)\" data-id=\"EditSession.getWordRange\">getWordRange</a>\n              </li>\n              <li id=\"dropdown_EditSession.getWrapLimit\" data-id=\"EditSession.getWrapLimit\" class=\"memberLink\"><a href=\"#EditSession.getWrapLimit\" class=\"\" title=\"EditSession.getWrapLimit (class method)\" data-id=\"EditSession.getWrapLimit\">getWrapLimit</a>\n              </li>\n              <li id=\"dropdown_EditSession.getWrapLimitRange\" data-id=\"EditSession.getWrapLimitRange\" class=\"memberLink\"><a href=\"#EditSession.getWrapLimitRange\" class=\"\" title=\"EditSession.getWrapLimitRange (class method)\" data-id=\"EditSession.getWrapLimitRange\">getWrapLimitRange</a>\n              </li>\n              <li id=\"dropdown_EditSession.highlight\" data-id=\"EditSession.highlight\" class=\"memberLink\"><a href=\"#EditSession.highlight\" class=\"\" title=\"EditSession.highlight (class method)\" data-id=\"EditSession.highlight\">highlight</a>\n              </li>\n              <li id=\"dropdown_EditSession.highlightLines\" data-id=\"EditSession.highlightLines\" class=\"memberLink\"><a href=\"#EditSession.highlightLines\" class=\"\" title=\"EditSession.highlightLines (class method)\" data-id=\"EditSession.highlightLines\">highlightLines</a>\n              </li>\n              <li id=\"dropdown_EditSession.indentRows\" data-id=\"EditSession.indentRows\" class=\"memberLink\"><a href=\"#EditSession.indentRows\" class=\"\" title=\"EditSession.indentRows (class method)\" data-id=\"EditSession.indentRows\">indentRows</a>\n              </li>\n              <li id=\"dropdown_EditSession.insert\" data-id=\"EditSession.insert\" class=\"memberLink\"><a href=\"#EditSession.insert\" class=\"\" title=\"EditSession.insert (class method)\" data-id=\"EditSession.insert\">insert</a>\n              </li>\n              <li id=\"dropdown_EditSession.isTabStop\" data-id=\"EditSession.isTabStop\" class=\"memberLink\"><a href=\"#EditSession.isTabStop\" class=\"\" title=\"EditSession.isTabStop (class method)\" data-id=\"EditSession.isTabStop\">isTabStop</a>\n              </li>\n              <li id=\"dropdown_EditSession.moveLinesDown\" data-id=\"EditSession.moveLinesDown\" class=\"memberLink\"><a href=\"#EditSession.moveLinesDown\" class=\"\" title=\"EditSession.moveLinesDown (class method)\" data-id=\"EditSession.moveLinesDown\">moveLinesDown</a>\n              </li>\n              <li id=\"dropdown_EditSession.moveLinesUp\" data-id=\"EditSession.moveLinesUp\" class=\"memberLink\"><a href=\"#EditSession.moveLinesUp\" class=\"\" title=\"EditSession.moveLinesUp (class method)\" data-id=\"EditSession.moveLinesUp\">moveLinesUp</a>\n              </li>\n              <li id=\"dropdown_EditSession.moveText\" data-id=\"EditSession.moveText\" class=\"memberLink\"><a href=\"#EditSession.moveText\" class=\"\" title=\"EditSession.moveText (class method)\" data-id=\"EditSession.moveText\">moveText</a>\n              </li>\n              <li id=\"dropdown_EditSession.onChange\" data-id=\"EditSession.onChange\" class=\"memberLink\"><a href=\"#EditSession.onChange\" class=\"\" title=\"EditSession.onChange (class method)\" data-id=\"EditSession.onChange\">onChange</a>\n              </li>\n              <li id=\"dropdown_EditSession.onChangeFold\" data-id=\"EditSession.onChangeFold\" class=\"memberLink\"><a href=\"#EditSession.onChangeFold\" class=\"\" title=\"EditSession.onChangeFold (class method)\" data-id=\"EditSession.onChangeFold\">onChangeFold</a>\n              </li>\n              <li id=\"dropdown_EditSession.onReloadTokenizer\" data-id=\"EditSession.onReloadTokenizer\" class=\"memberLink\"><a href=\"#EditSession.onReloadTokenizer\" class=\"\" title=\"EditSession.onReloadTokenizer (class method)\" data-id=\"EditSession.onReloadTokenizer\">onReloadTokenizer</a>\n              </li>\n              <li id=\"dropdown_EditSession.outdentRows\" data-id=\"EditSession.outdentRows\" class=\"memberLink\"><a href=\"#EditSession.outdentRows\" class=\"\" title=\"EditSession.outdentRows (class method)\" data-id=\"EditSession.outdentRows\">outdentRows</a>\n              </li>\n              <li id=\"dropdown_EditSession.redo\" data-id=\"EditSession.redo\" class=\"memberLink\"><a href=\"#EditSession.redo\" class=\"\" title=\"EditSession.redo (class method)\" data-id=\"EditSession.redo\">redo</a>\n              </li>\n              <li id=\"dropdown_EditSession.redoChanges\" data-id=\"EditSession.redoChanges\" class=\"memberLink\"><a href=\"#EditSession.redoChanges\" class=\"\" title=\"EditSession.redoChanges (class method)\" data-id=\"EditSession.redoChanges\">redoChanges</a>\n              </li>\n              <li id=\"dropdown_EditSession.remove\" data-id=\"EditSession.remove\" class=\"memberLink\"><a href=\"#EditSession.remove\" class=\"\" title=\"EditSession.remove (class method)\" data-id=\"EditSession.remove\">remove</a>\n              </li>\n              <li id=\"dropdown_EditSession.removeGutterDecoration\" data-id=\"EditSession.removeGutterDecoration\" class=\"memberLink\"><a href=\"#EditSession.removeGutterDecoration\" class=\"\" title=\"EditSession.removeGutterDecoration (class method)\" data-id=\"EditSession.removeGutterDecoration\">removeGutterDecoration</a>\n              </li>\n              <li id=\"dropdown_EditSession.removeMarker\" data-id=\"EditSession.removeMarker\" class=\"memberLink\"><a href=\"#EditSession.removeMarker\" class=\"\" title=\"EditSession.removeMarker (class method)\" data-id=\"EditSession.removeMarker\">removeMarker</a>\n              </li>\n              <li id=\"dropdown_EditSession.replace\" data-id=\"EditSession.replace\" class=\"memberLink\"><a href=\"#EditSession.replace\" class=\"\" title=\"EditSession.replace (class method)\" data-id=\"EditSession.replace\">replace</a>\n              </li>\n              <li id=\"dropdown_EditSession.reset\" data-id=\"EditSession.reset\" class=\"memberLink\"><a href=\"#EditSession.reset\" class=\"\" title=\"EditSession.reset (class method)\" data-id=\"EditSession.reset\">reset</a>\n              </li>\n              <li id=\"dropdown_EditSession.resetCaches\" data-id=\"EditSession.resetCaches\" class=\"memberLink\"><a href=\"#EditSession.resetCaches\" class=\"\" title=\"EditSession.resetCaches (class method)\" data-id=\"EditSession.resetCaches\">resetCaches</a>\n              </li>\n              <li id=\"dropdown_EditSession.screenToDocumentColumn\" data-id=\"EditSession.screenToDocumentColumn\" class=\"memberLink\"><a href=\"#EditSession.screenToDocumentColumn\" class=\"\" title=\"EditSession.screenToDocumentColumn (class method)\" data-id=\"EditSession.screenToDocumentColumn\">screenToDocumentColumn</a>\n              </li>\n              <li id=\"dropdown_EditSession.screenToDocumentPosition\" data-id=\"EditSession.screenToDocumentPosition\" class=\"memberLink\"><a href=\"#EditSession.screenToDocumentPosition\" class=\"\" title=\"EditSession.screenToDocumentPosition (class method)\" data-id=\"EditSession.screenToDocumentPosition\">screenToDocumentPosition</a>\n              </li>\n              <li id=\"dropdown_EditSession.screenToDocumentRow\" data-id=\"EditSession.screenToDocumentRow\" class=\"memberLink\"><a href=\"#EditSession.screenToDocumentRow\" class=\"\" title=\"EditSession.screenToDocumentRow (class method)\" data-id=\"EditSession.screenToDocumentRow\">screenToDocumentRow</a>\n              </li>\n              <li id=\"dropdown_EditSession.setAnnotations\" data-id=\"EditSession.setAnnotations\" class=\"memberLink\"><a href=\"#EditSession.setAnnotations\" class=\"\" title=\"EditSession.setAnnotations (class method)\" data-id=\"EditSession.setAnnotations\">setAnnotations</a>\n              </li>\n              <li id=\"dropdown_EditSession.setBreakpoint\" data-id=\"EditSession.setBreakpoint\" class=\"memberLink\"><a href=\"#EditSession.setBreakpoint\" class=\"\" title=\"EditSession.setBreakpoint (class method)\" data-id=\"EditSession.setBreakpoint\">setBreakpoint</a>\n              </li>\n              <li id=\"dropdown_EditSession.setBreakpoints\" data-id=\"EditSession.setBreakpoints\" class=\"memberLink\"><a href=\"#EditSession.setBreakpoints\" class=\"\" title=\"EditSession.setBreakpoints (class method)\" data-id=\"EditSession.setBreakpoints\">setBreakpoints</a>\n              </li>\n              <li id=\"dropdown_EditSession.setDocument\" data-id=\"EditSession.setDocument\" class=\"memberLink\"><a href=\"#EditSession.setDocument\" class=\"\" title=\"EditSession.setDocument (class method)\" data-id=\"EditSession.setDocument\">setDocument</a>\n              </li>\n              <li id=\"dropdown_EditSession.setMode\" data-id=\"EditSession.setMode\" class=\"memberLink\"><a href=\"#EditSession.setMode\" class=\"\" title=\"EditSession.setMode (class method)\" data-id=\"EditSession.setMode\">setMode</a>\n              </li>\n              <li id=\"dropdown_EditSession.setNewLineMode\" data-id=\"EditSession.setNewLineMode\" class=\"memberLink\"><a href=\"#EditSession.setNewLineMode\" class=\"\" title=\"EditSession.setNewLineMode (class method)\" data-id=\"EditSession.setNewLineMode\">setNewLineMode</a>\n              </li>\n              <li id=\"dropdown_EditSession.setOverwrite\" data-id=\"EditSession.setOverwrite\" class=\"memberLink\"><a href=\"#EditSession.setOverwrite\" class=\"\" title=\"EditSession.setOverwrite (class method)\" data-id=\"EditSession.setOverwrite\">setOverwrite</a>\n              </li>\n              <li id=\"dropdown_EditSession.setScrollLeft\" data-id=\"EditSession.setScrollLeft\" class=\"memberLink\"><a href=\"#EditSession.setScrollLeft\" class=\"\" title=\"EditSession.setScrollLeft (class method)\" data-id=\"EditSession.setScrollLeft\">setScrollLeft</a>\n              </li>\n              <li id=\"dropdown_EditSession.setScrollTop\" data-id=\"EditSession.setScrollTop\" class=\"memberLink\"><a href=\"#EditSession.setScrollTop\" class=\"\" title=\"EditSession.setScrollTop (class method)\" data-id=\"EditSession.setScrollTop\">setScrollTop</a>\n              </li>\n              <li id=\"dropdown_EditSession.setTabSize\" data-id=\"EditSession.setTabSize\" class=\"memberLink\"><a href=\"#EditSession.setTabSize\" class=\"\" title=\"EditSession.setTabSize (class method)\" data-id=\"EditSession.setTabSize\">setTabSize</a>\n              </li>\n              <li id=\"dropdown_EditSession.setUndoManager\" data-id=\"EditSession.setUndoManager\" class=\"memberLink\"><a href=\"#EditSession.setUndoManager\" class=\"\" title=\"EditSession.setUndoManager (class method)\" data-id=\"EditSession.setUndoManager\">setUndoManager</a>\n              </li>\n              <li id=\"dropdown_EditSession.setUndoSelect\" data-id=\"EditSession.setUndoSelect\" class=\"memberLink\"><a href=\"#EditSession.setUndoSelect\" class=\"\" title=\"EditSession.setUndoSelect (class method)\" data-id=\"EditSession.setUndoSelect\">setUndoSelect</a>\n              </li>\n              <li id=\"dropdown_EditSession.setUseSoftTabs\" data-id=\"EditSession.setUseSoftTabs\" class=\"memberLink\"><a href=\"#EditSession.setUseSoftTabs\" class=\"\" title=\"EditSession.setUseSoftTabs (class method)\" data-id=\"EditSession.setUseSoftTabs\">setUseSoftTabs</a>\n              </li>\n              <li id=\"dropdown_EditSession.setUseWorker\" data-id=\"EditSession.setUseWorker\" class=\"memberLink\"><a href=\"#EditSession.setUseWorker\" class=\"\" title=\"EditSession.setUseWorker (class method)\" data-id=\"EditSession.setUseWorker\">setUseWorker</a>\n              </li>\n              <li id=\"dropdown_EditSession.setUseWrapMode\" data-id=\"EditSession.setUseWrapMode\" class=\"memberLink\"><a href=\"#EditSession.setUseWrapMode\" class=\"\" title=\"EditSession.setUseWrapMode (class method)\" data-id=\"EditSession.setUseWrapMode\">setUseWrapMode</a>\n              </li>\n              <li id=\"dropdown_EditSession.setValue\" data-id=\"EditSession.setValue\" class=\"memberLink\"><a href=\"#EditSession.setValue\" class=\"\" title=\"EditSession.setValue (class method)\" data-id=\"EditSession.setValue\">setValue</a>\n              </li>\n              <li id=\"dropdown_EditSession.setWrapLimitRange\" data-id=\"EditSession.setWrapLimitRange\" class=\"memberLink\"><a href=\"#EditSession.setWrapLimitRange\" class=\"\" title=\"EditSession.setWrapLimitRange (class method)\" data-id=\"EditSession.setWrapLimitRange\">setWrapLimitRange</a>\n              </li>\n              <li id=\"dropdown_EditSession.toggleOverwrite\" data-id=\"EditSession.toggleOverwrite\" class=\"memberLink\"><a href=\"#EditSession.toggleOverwrite\" class=\"\" title=\"EditSession.toggleOverwrite (class method)\" data-id=\"EditSession.toggleOverwrite\">toggleOverwrite</a>\n              </li>\n              <li id=\"dropdown_EditSession.toString\" data-id=\"EditSession.toString\" class=\"memberLink\"><a href=\"#EditSession.toString\" class=\"\" title=\"EditSession.toString (class method)\" data-id=\"EditSession.toString\">toString</a>\n              </li>\n              <li id=\"dropdown_EditSession.undo\" data-id=\"EditSession.undo\" class=\"memberLink\"><a href=\"#EditSession.undo\" class=\"\" title=\"EditSession.undo (class method)\" data-id=\"EditSession.undo\">undo</a>\n              </li>\n              <li id=\"dropdown_EditSession.undoChanges\" data-id=\"EditSession.undoChanges\" class=\"memberLink\"><a href=\"#EditSession.undoChanges\" class=\"\" title=\"EditSession.undoChanges (class method)\" data-id=\"EditSession.undoChanges\">undoChanges</a>\n              </li>\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n        </ul>\n      </div>\n    </div>\n    <article id=\"EditSession\" data-title=\"EditSession (class)\" class=\"article\">\n      <div class=\"section description\">\n        <div class=\"memberContent\"><p>Stores all the data about <a href=\"editor.html\" class=\"link-short\" title=\"Editor (class)\" data-id=\"Editor\"><code>Editor</code></a> state providing easy way to change editors state.  </p>\n<p><code>EditSession</code> can be attached to only one <a href=\"document.html\" class=\"link-short\" title=\"Document (class)\" data-id=\"Document\"><code>Document</code></a>. Same <code>Document</code> can be attached to several <code>EditSession</code>s.</p>\n\n        </div>\n      </div>\n    </article>\n    <h3 class=\"sectionHeader\">Constructors</h3>\n    <article id=\"EditSession.new\" data-title=\"EditSession.new (constructor)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.new\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span class=\"constructorIdentifier\">new </span><span id=\"EditSession.new\" class=\"member-name methodClicker\">EditSession</span>(<span class=\"sigArgList\"><a href=\"document.html\" class=\"argument methodClicker\" title=\"Document (class)\" data-id=\"Document\">Document</a> | <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"argument methodClicker\" title=\"String\" data-id=\"String\">String</a> text, <a href=\"https://github.com/ajaxorg/ace/blob/master/lib/ace/mode/text.js\" class=\"argument methodClicker\" title=\"TextMode\" data-id=\"TextMode\">TextMode</a> mode</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.new\" class=\"ellipsis_description\"><p>Sets up a new <code>EditSession</code> and associates it with the given <code>Document</code> and <code>TextMode</code>.</p>\n\n            </div>\n            <div class=\"description\"><p>Sets up a new <code>EditSession</code> and associates it with the given <code>Document</code> and <code>TextMode</code>.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">text</td><td class=\"argType\" \"><a href=\"document.html\" class=\"\" title=\"Document (class)\" data-id=\"Document\">Document</a> | <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"\" title=\"String\" data-id=\"String\">String</a></td><td class=\"argDescription \"><p>Required. If <code>text</code> is a <code>Document</code>, it associates the <code>EditSession</code> with it. Otherwise, a new <code>Document</code> is created, with the initial text</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">mode</td><td class=\"argType\" \"><a href=\"https://github.com/ajaxorg/ace/blob/master/lib/ace/mode/text.js\" class=\"\" title=\"TextMode\" data-id=\"TextMode\">TextMode</a></td><td class=\"argDescription \"><p>Required. The initial language mode to use for the document</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <h3 class=\"sectionHeader\">Events</h3>\n    <article id=\"EditSession.event.change\" data-title=\"EditSession.event.change (event)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.event.change\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span class=\"eventObjName\">EditSession</span><span class=\"eventListenerStart\">.on(\"</span><span id=\"EditSession.event.change\" class=\"member-name eventMember methodClicker\">change</span><span class=\"eventListenerClose\">\", </span><span class=\"eventFunctionOpen\">function(</span><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> e<span class=\"eventFunctionClose\">))</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.event.change\" class=\"ellipsis_description\"><p>Emitted when the document changes.</p>\n\n            </div>\n            <div class=\"description\"><p>Emitted when the document changes.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">e</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. An object containing a <code>delta</code> of information about the change.</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.event.changeAnnotation\" data-title=\"EditSession.event.changeAnnotation (event)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.event.changeAnnotation\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span class=\"eventObjName\">EditSession</span><span class=\"eventListenerStart\">.on(\"</span><span id=\"EditSession.event.changeAnnotation\" class=\"member-name eventMember methodClicker\">changeAnnotation</span><span class=\"eventListenerClose\">\", </span><span class=\"eventFunctionOpen\">function(</span><span class=\"eventFunctionClose\">))</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.event.changeAnnotation\" class=\"ellipsis_description\"><p>Emitted when an annotation changes, like through <a href=\"#EditSession.setAnnotations\" class=\"link-short\" title=\"EditSession.setAnnotations (class method)\" data-id=\"EditSession.setAnnotations\"><code>EditSession.setAnnotations()</code></a>.</p>\n\n            </div>\n            <div class=\"description\"><p>Emitted when an annotation changes, like through <a href=\"#EditSession.setAnnotations\" class=\"link-short\" title=\"EditSession.setAnnotations (class method)\" data-id=\"EditSession.setAnnotations\"><code>EditSession.setAnnotations()</code></a>.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.event.changeBackMarker\" data-title=\"EditSession.event.changeBackMarker (event)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.event.changeBackMarker\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span class=\"eventObjName\">EditSession</span><span class=\"eventListenerStart\">.on(\"</span><span id=\"EditSession.event.changeBackMarker\" class=\"member-name eventMember methodClicker\">changeBackMarker</span><span class=\"eventListenerClose\">\", </span><span class=\"eventFunctionOpen\">function(</span><span class=\"eventFunctionClose\">))</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.event.changeBackMarker\" class=\"ellipsis_description\"><p>Emitted when a back marker changes.</p>\n\n            </div>\n            <div class=\"description\"><p>Emitted when a back marker changes.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.event.changeBreakpoint\" data-title=\"EditSession.event.changeBreakpoint (event)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.event.changeBreakpoint\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span class=\"eventObjName\">EditSession</span><span class=\"eventListenerStart\">.on(\"</span><span id=\"EditSession.event.changeBreakpoint\" class=\"member-name eventMember methodClicker\">changeBreakpoint</span><span class=\"eventListenerClose\">\", </span><span class=\"eventFunctionOpen\">function(</span><span class=\"eventFunctionClose\">))</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.event.changeBreakpoint\" class=\"ellipsis_description\"><p>Emitted when the gutter changes, either by setting or removing breakpoints, or when the gutter decorations change.</p>\n\n            </div>\n            <div class=\"description\"><p>Emitted when the gutter changes, either by setting or removing breakpoints, or when the gutter decorations change.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.event.changeFold\" data-title=\"EditSession.event.changeFold (event)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.event.changeFold\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span class=\"eventObjName\">EditSession</span><span class=\"eventListenerStart\">.on(\"</span><span id=\"EditSession.event.changeFold\" class=\"member-name eventMember methodClicker\">changeFold</span><span class=\"eventListenerClose\">\", </span><span class=\"eventFunctionOpen\">function(</span><span class=\"eventFunctionClose\">))</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.event.changeFold\" class=\"ellipsis_description\"><p>Emitted when a code fold is added or removed.</p>\n\n            </div>\n            <div class=\"description\"><p>Emitted when a code fold is added or removed.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.event.changeFrontMarker\" data-title=\"EditSession.event.changeFrontMarker (event)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.event.changeFrontMarker\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span class=\"eventObjName\">EditSession</span><span class=\"eventListenerStart\">.on(\"</span><span id=\"EditSession.event.changeFrontMarker\" class=\"member-name eventMember methodClicker\">changeFrontMarker</span><span class=\"eventListenerClose\">\", </span><span class=\"eventFunctionOpen\">function(</span><span class=\"eventFunctionClose\">))</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.event.changeFrontMarker\" class=\"ellipsis_description\"><p>Emitted when a front marker changes.</p>\n\n            </div>\n            <div class=\"description\"><p>Emitted when a front marker changes.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.event.changeMode\" data-title=\"EditSession.event.changeMode (event)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.event.changeMode\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span class=\"eventObjName\">EditSession</span><span class=\"eventListenerStart\">.on(\"</span><span id=\"EditSession.event.changeMode\" class=\"member-name eventMember methodClicker\">changeMode</span><span class=\"eventListenerClose\">\", </span><span class=\"eventFunctionOpen\">function(</span><span class=\"eventFunctionClose\">))</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.event.changeMode\" class=\"ellipsis_description\"><p>Emitted when the current mode changes.</p>\n\n            </div>\n            <div class=\"description\"><p>Emitted when the current mode changes.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.event.changeOverwrite\" data-title=\"EditSession.event.changeOverwrite (event)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.event.changeOverwrite\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span class=\"eventObjName\">EditSession</span><span class=\"eventListenerStart\">.on(\"</span><span id=\"EditSession.event.changeOverwrite\" class=\"member-name eventMember methodClicker\">changeOverwrite</span><span class=\"eventListenerClose\">\", </span><span class=\"eventFunctionOpen\">function(</span><span class=\"eventFunctionClose\">))</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.event.changeOverwrite\" class=\"ellipsis_description\"><p>Emitted when the ability to overwrite text changes, via <a href=\"#EditSession.setOverwrite\" class=\"link-short\" title=\"EditSession.setOverwrite (class method)\" data-id=\"EditSession.setOverwrite\"><code>EditSession.setOverwrite()</code></a>.</p>\n\n            </div>\n            <div class=\"description\"><p>Emitted when the ability to overwrite text changes, via <a href=\"#EditSession.setOverwrite\" class=\"link-short\" title=\"EditSession.setOverwrite (class method)\" data-id=\"EditSession.setOverwrite\"><code>EditSession.setOverwrite()</code></a>.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.event.changeScrollLeft\" data-title=\"EditSession.event.changeScrollLeft (event)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.event.changeScrollLeft\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span class=\"eventObjName\">EditSession</span><span class=\"eventListenerStart\">.on(\"</span><span id=\"EditSession.event.changeScrollLeft\" class=\"member-name eventMember methodClicker\">changeScrollLeft</span><span class=\"eventListenerClose\">\", </span><span class=\"eventFunctionOpen\">function(</span><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> scrollLeft<span class=\"eventFunctionClose\">))</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.event.changeScrollLeft\" class=\"ellipsis_description\"><p>Emitted when the scroll left changes.</p>\n\n            </div>\n            <div class=\"description\"><p>Emitted when the scroll left changes.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">scrollLeft</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The new scroll left value</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.event.changeScrollTop\" data-title=\"EditSession.event.changeScrollTop (event)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.event.changeScrollTop\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span class=\"eventObjName\">EditSession</span><span class=\"eventListenerStart\">.on(\"</span><span id=\"EditSession.event.changeScrollTop\" class=\"member-name eventMember methodClicker\">changeScrollTop</span><span class=\"eventListenerClose\">\", </span><span class=\"eventFunctionOpen\">function(</span><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> scrollTop<span class=\"eventFunctionClose\">))</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.event.changeScrollTop\" class=\"ellipsis_description\"><p>Emitted when the scroll top changes.</p>\n\n            </div>\n            <div class=\"description\"><p>Emitted when the scroll top changes.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">scrollTop</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The new scroll top value</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.event.changeTabSize\" data-title=\"EditSession.event.changeTabSize (event)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.event.changeTabSize\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span class=\"eventObjName\">EditSession</span><span class=\"eventListenerStart\">.on(\"</span><span id=\"EditSession.event.changeTabSize\" class=\"member-name eventMember methodClicker\">changeTabSize</span><span class=\"eventListenerClose\">\", </span><span class=\"eventFunctionOpen\">function(</span><span class=\"eventFunctionClose\">))</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.event.changeTabSize\" class=\"ellipsis_description\"><p>Emitted when the tab size changes, via <a href=\"#EditSession.setTabSize\" class=\"link-short\" title=\"EditSession.setTabSize (class method)\" data-id=\"EditSession.setTabSize\"><code>EditSession.setTabSize()</code></a>.</p>\n\n            </div>\n            <div class=\"description\"><p>Emitted when the tab size changes, via <a href=\"#EditSession.setTabSize\" class=\"link-short\" title=\"EditSession.setTabSize (class method)\" data-id=\"EditSession.setTabSize\"><code>EditSession.setTabSize()</code></a>.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.event.changeWrapLimit\" data-title=\"EditSession.event.changeWrapLimit (event)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.event.changeWrapLimit\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span class=\"eventObjName\">EditSession</span><span class=\"eventListenerStart\">.on(\"</span><span id=\"EditSession.event.changeWrapLimit\" class=\"member-name eventMember methodClicker\">changeWrapLimit</span><span class=\"eventListenerClose\">\", </span><span class=\"eventFunctionOpen\">function(</span><span class=\"eventFunctionClose\">))</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.event.changeWrapLimit\" class=\"ellipsis_description\"><p>Emitted when the wrapping limit changes.</p>\n\n            </div>\n            <div class=\"description\"><p>Emitted when the wrapping limit changes.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.event.changeWrapMode\" data-title=\"EditSession.event.changeWrapMode (event)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.event.changeWrapMode\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span class=\"eventObjName\">EditSession</span><span class=\"eventListenerStart\">.on(\"</span><span id=\"EditSession.event.changeWrapMode\" class=\"member-name eventMember methodClicker\">changeWrapMode</span><span class=\"eventListenerClose\">\", </span><span class=\"eventFunctionOpen\">function(</span><span class=\"eventFunctionClose\">))</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.event.changeWrapMode\" class=\"ellipsis_description\"><p>Emitted when the wrap mode changes.</p>\n\n            </div>\n            <div class=\"description\"><p>Emitted when the wrap mode changes.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.event.tokenizerUpdate\" data-title=\"EditSession.event.tokenizerUpdate (event)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.event.tokenizerUpdate\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span class=\"eventObjName\">EditSession</span><span class=\"eventListenerStart\">.on(\"</span><span id=\"EditSession.event.tokenizerUpdate\" class=\"member-name eventMember methodClicker\">tokenizerUpdate</span><span class=\"eventListenerClose\">\", </span><span class=\"eventFunctionOpen\">function(</span><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> e<span class=\"eventFunctionClose\">))</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.event.tokenizerUpdate\" class=\"ellipsis_description\"><p>Emitted when a background tokenizer asynchronously processes new rows.</p>\n\n            </div>\n            <div class=\"description\"><p>Emitted when a background tokenizer asynchronously processes new rows.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">e</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. An object containing one property, <code>&quot;data&quot;</code>, that contains information about the changing rows</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <h3 class=\"sectionHeader\">Methods</h3>\n    <article id=\"EditSession.addDynamicMarker\" data-title=\"EditSession.addDynamicMarker (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.addDynamicMarker\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.addDynamicMarker\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">addDynamicMarker</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> marker, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"argument methodClicker\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a> inFront</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"returnType \" title=\"Object\" data-id=\"Object\">Object</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.addDynamicMarker\" class=\"ellipsis_description\"><p>Adds a dynamic marker to the session.</p>\n\n            </div>\n            <div class=\"description\"><p>Adds a dynamic marker to the session.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">marker</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. Object with update method</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">inFront</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></td><td class=\"argDescription \"><p>Required. Set to <code>true</code> to establish a front marker</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.addGutterDecoration\" data-title=\"EditSession.addGutterDecoration (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.addGutterDecoration\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.addGutterDecoration\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">addGutterDecoration</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> row, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"argument methodClicker\" title=\"String\" data-id=\"String\">String</a> className</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.addGutterDecoration\" class=\"ellipsis_description\"><p>Adds <code>className</code> to the <code>row</code>, to be used for CSS stylings and whatnot.</p>\n\n            </div>\n            <div class=\"description\"><p>Adds <code>className</code> to the <code>row</code>, to be used for CSS stylings and whatnot.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">row</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The row number</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">className</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"\" title=\"String\" data-id=\"String\">String</a></td><td class=\"argDescription \"><p>Required. The class to add</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.addMarker\" data-title=\"EditSession.addMarker (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.addMarker\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.addMarker\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">addMarker</span></span>(<span class=\"sigArgList\"><a href=\"range.html\" class=\"argument methodClicker\" title=\"Range (class)\" data-id=\"Range\">Range</a> range, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"argument methodClicker\" title=\"String\" data-id=\"String\">String</a> clazz, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function\" class=\"argument methodClicker\" title=\"Function\" data-id=\"Function\">Function</a> | <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"argument methodClicker\" title=\"String\" data-id=\"String\">String</a> type, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"argument methodClicker\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a> inFront</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"returnType \" title=\"Number\" data-id=\"Number\">Number</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.addMarker\" class=\"ellipsis_description\"><p>Adds a new marker to the given <code>Range</code>. If <code>inFront</code> is <code>true</code>, a front marker is defined, and the <code>&#39;changeFrontMarker&#39;</code> event fires; otherwise, the <code>&#39;changeBackMarker&#39;</code> event fires.</p>\n\n            </div>\n            <div class=\"description\"><p>Adds a new marker to the given <code>Range</code>. If <code>inFront</code> is <code>true</code>, a front marker is defined, and the <code>&#39;changeFrontMarker&#39;</code> event fires; otherwise, the <code>&#39;changeBackMarker&#39;</code> event fires.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">range</td><td class=\"argType\" \"><a href=\"range.html\" class=\"\" title=\"Range (class)\" data-id=\"Range\">Range</a></td><td class=\"argDescription \"><p>Required. Define the range of the marker</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">clazz</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"\" title=\"String\" data-id=\"String\">String</a></td><td class=\"argDescription \"><p>Required. Set the CSS class for the marker</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">type</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function\" class=\"\" title=\"Function\" data-id=\"Function\">Function</a> | <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"\" title=\"String\" data-id=\"String\">String</a></td><td class=\"argDescription \"><p>Required. Identify the type of the marker</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">inFront</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></td><td class=\"argDescription \"><p>Required. Set to <code>true</code> to establish a front marker</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.clearAnnotations\" data-title=\"EditSession.clearAnnotations (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.clearAnnotations\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.clearAnnotations\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">clearAnnotations</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.clearAnnotations\" class=\"ellipsis_description\"><p>Clears all the annotations for this session. This function also triggers the <code>&#39;changeAnnotation&#39;</code> event.</p>\n\n            </div>\n            <div class=\"description\"><p>Clears all the annotations for this session. This function also triggers the <code>&#39;changeAnnotation&#39;</code> event.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.clearBreakpoint\" data-title=\"EditSession.clearBreakpoint (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.clearBreakpoint\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.clearBreakpoint\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">clearBreakpoint</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> row</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.clearBreakpoint\" class=\"ellipsis_description\"><p>Removes a breakpoint on the row number given by <code>rows</code>. This function also emits the <code>&#39;changeBreakpoint&#39;</code> event.</p>\n\n            </div>\n            <div class=\"description\"><p>Removes a breakpoint on the row number given by <code>rows</code>. This function also emits the <code>&#39;changeBreakpoint&#39;</code> event.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">row</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. A row index</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.clearBreakpoints\" data-title=\"EditSession.clearBreakpoints (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.clearBreakpoints\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.clearBreakpoints\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">clearBreakpoints</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.clearBreakpoints\" class=\"ellipsis_description\"><p>Removes all breakpoints on the rows. This function also emites the <code>&#39;changeBreakpoint&#39;</code> event.</p>\n\n            </div>\n            <div class=\"description\"><p>Removes all breakpoints on the rows. This function also emites the <code>&#39;changeBreakpoint&#39;</code> event.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.documentToScreenColumn\" data-title=\"EditSession.documentToScreenColumn (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.documentToScreenColumn\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.documentToScreenColumn\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">documentToScreenColumn</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> row, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> docColumn</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"returnType \" title=\"Number\" data-id=\"Number\">Number</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.documentToScreenColumn\" class=\"ellipsis_description\"><p>For the given document row and column, returns the screen column.</p>\n\n            </div>\n            <div class=\"description\"><p>For the given document row and column, returns the screen column.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">row</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. </p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">docColumn</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. </p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.documentToScreenPosition\" data-title=\"EditSession.documentToScreenPosition (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.documentToScreenPosition\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.documentToScreenPosition\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">documentToScreenPosition</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> docRow, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> docColumn</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"returnType \" title=\"Object\" data-id=\"Object\">Object</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.documentToScreenPosition\" class=\"ellipsis_description\"><p>Converts document coordinates to screen coordinates. This takes into account code folding, word wrap, tab size, and any other visual modifications.</p>\n\n            </div>\n            <div class=\"description\"><p>Converts document coordinates to screen coordinates. This takes into account code folding, word wrap, tab size, and any other visual modifications.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">docRow</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The document row to check</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">docColumn</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The document column to check</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.documentToScreenRow\" data-title=\"EditSession.documentToScreenRow (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.documentToScreenRow\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.documentToScreenRow\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">documentToScreenRow</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> docRow, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> docColumn</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.documentToScreenRow\" class=\"ellipsis_description\"><p>For the given document row and column, returns the screen row.</p>\n\n            </div>\n            <div class=\"description\"><p>For the given document row and column, returns the screen row.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">docRow</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. </p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">docColumn</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. </p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.duplicateLines\" data-title=\"EditSession.duplicateLines (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.duplicateLines\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.duplicateLines\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">duplicateLines</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> firstRow, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> lastRow</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"returnType \" title=\"Number\" data-id=\"Number\">Number</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.duplicateLines\" class=\"ellipsis_description\"><p>Duplicates all the text between <code>firstRow</code> and <code>lastRow</code>.</p>\n\n            </div>\n            <div class=\"description\"><p>Duplicates all the text between <code>firstRow</code> and <code>lastRow</code>.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">firstRow</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The starting row to duplicate</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">lastRow</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The final row to duplicate</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.getAnnotations\" data-title=\"EditSession.getAnnotations (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.getAnnotations\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.getAnnotations\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">getAnnotations</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"returnType \" title=\"Object\" data-id=\"Object\">Object</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.getAnnotations\" class=\"ellipsis_description\"><p>Returns the annotations for the <code>EditSession</code>.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the annotations for the <code>EditSession</code>.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.getAWordRange\" data-title=\"EditSession.getAWordRange (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.getAWordRange\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.getAWordRange\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">getAWordRange</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> row, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> column</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"range.html\" class=\"returnType \" title=\"Range (class)\" data-id=\"Range\">Range</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.getAWordRange\" class=\"ellipsis_description\"><p>Gets the range of a word, including its right whitespace.</p>\n\n            </div>\n            <div class=\"description\"><p>Gets the range of a word, including its right whitespace.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">row</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The row number to start from</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">column</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The column number to start from</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.getBreakpoints\" data-title=\"EditSession.getBreakpoints (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.getBreakpoints\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.getBreakpoints\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">getBreakpoints</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"returnType \" title=\"Number\" data-id=\"Number\">Number</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.getBreakpoints\" class=\"ellipsis_description\"><p>Returns an array of numbers, indicating which rows have breakpoints.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns an array of numbers, indicating which rows have breakpoints.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.getDocument\" data-title=\"EditSession.getDocument (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.getDocument\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.getDocument\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">getDocument</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"document.html\" class=\"returnType \" title=\"Document (class)\" data-id=\"Document\">Document</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.getDocument\" class=\"ellipsis_description\"><p>Returns the <code>Document</code> associated with this session.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the <code>Document</code> associated with this session.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.getDocumentLastRowColumn\" data-title=\"EditSession.getDocumentLastRowColumn (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.getDocumentLastRowColumn\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.getDocumentLastRowColumn\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">getDocumentLastRowColumn</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> docRow, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> docColumn</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.getDocumentLastRowColumn\" class=\"ellipsis_description\"><p>For the given document row and column, this returns the column position of the last screen row.</p>\n\n            </div>\n            <div class=\"description\"><p>For the given document row and column, this returns the column position of the last screen row.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">docRow</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. </p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">docColumn</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. </p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.getDocumentLastRowColumnPosition\" data-title=\"EditSession.getDocumentLastRowColumnPosition (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.getDocumentLastRowColumnPosition\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.getDocumentLastRowColumnPosition\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">getDocumentLastRowColumnPosition</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> docRow, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> docColumn</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.getDocumentLastRowColumnPosition\" class=\"ellipsis_description\"><p>For the given document row and column, this returns the document position of the last row.</p>\n\n            </div>\n            <div class=\"description\"><p>For the given document row and column, this returns the document position of the last row.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">docRow</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. </p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">docColumn</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. </p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.getLength\" data-title=\"EditSession.getLength (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.getLength\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.getLength\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">getLength</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"returnType \" title=\"Number\" data-id=\"Number\">Number</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.getLength\" class=\"ellipsis_description\"><p>Returns the number of rows in the document.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the number of rows in the document.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.getLine\" data-title=\"EditSession.getLine (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.getLine\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.getLine\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">getLine</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> row</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"returnType \" title=\"String\" data-id=\"String\">String</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.getLine\" class=\"ellipsis_description\"><p>Returns a verbatim copy of the given line as it is in the document</p>\n\n            </div>\n            <div class=\"description\"><p>Returns a verbatim copy of the given line as it is in the document</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">row</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The row to retrieve from</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.getLines\" data-title=\"EditSession.getLines (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.getLines\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.getLines\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">getLines</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> firstRow, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> lastRow</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"returnType \" title=\"String\" data-id=\"String\">String</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.getLines\" class=\"ellipsis_description\"><p>Returns an array of strings of the rows between <code>firstRow</code> and <code>lastRow</code>. This function is inclusive of <code>lastRow</code>.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns an array of strings of the rows between <code>firstRow</code> and <code>lastRow</code>. This function is inclusive of <code>lastRow</code>.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">firstRow</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The first row index to retrieve</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">lastRow</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The final row index to retrieve</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.getMarkers\" data-title=\"EditSession.getMarkers (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.getMarkers\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.getMarkers\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">getMarkers</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"argument methodClicker\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a> inFront</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array\" class=\"returnType \" title=\"Array\" data-id=\"Array\">Array</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.getMarkers\" class=\"ellipsis_description\"><p>Returns an array containing the IDs of all the markers, either front or back.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns an array containing the IDs of all the markers, either front or back.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">inFront</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></td><td class=\"argDescription \"><p>Required. If <code>true</code>, indicates you only want front markers; <code>false</code> indicates only back markers</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.getMode\" data-title=\"EditSession.getMode (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.getMode\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.getMode\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">getMode</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://github.com/ajaxorg/ace/blob/master/lib/ace/mode/text.js\" class=\"returnType \" title=\"TextMode\" data-id=\"TextMode\">TextMode</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.getMode\" class=\"ellipsis_description\"><p>Returns the current text mode.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the current text mode.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.getNewLineMode\" data-title=\"EditSession.getNewLineMode (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.getNewLineMode\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.getNewLineMode\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">getNewLineMode</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"returnType \" title=\"String\" data-id=\"String\">String</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.getNewLineMode\" class=\"ellipsis_description\"><p>Returns the current new line mode.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the current new line mode.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.getOverwrite\" data-title=\"EditSession.getOverwrite (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.getOverwrite\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.getOverwrite\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">getOverwrite</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.getOverwrite\" class=\"ellipsis_description\"><p>Returns <code>true</code> if overwrites are enabled; <code>false</code> otherwise.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns <code>true</code> if overwrites are enabled; <code>false</code> otherwise.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.getRowLength\" data-title=\"EditSession.getRowLength (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.getRowLength\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.getRowLength\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">getRowLength</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> row</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"returnType \" title=\"Number\" data-id=\"Number\">Number</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.getRowLength\" class=\"ellipsis_description\"><p>Returns number of screenrows in a wrapped line.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns number of screenrows in a wrapped line.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">row</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The row number to check</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.getRowSplitData\" data-title=\"EditSession.getRowSplitData (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.getRowSplitData\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.getRowSplitData\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">getRowSplitData</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> row</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"returnType \" title=\"String\" data-id=\"String\">String</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.getRowSplitData\" class=\"ellipsis_description\"><p>For the given row, this returns the split data.</p>\n\n            </div>\n            <div class=\"description\"><p>For the given row, this returns the split data.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">row</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. </p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.getScreenLastRowColumn\" data-title=\"EditSession.getScreenLastRowColumn (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.getScreenLastRowColumn\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.getScreenLastRowColumn\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">getScreenLastRowColumn</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> screenRow</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"returnType \" title=\"Number\" data-id=\"Number\">Number</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.getScreenLastRowColumn\" class=\"ellipsis_description\"><p>Returns the position (on screen) for the last character in the provided screen row.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the position (on screen) for the last character in the provided screen row.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">screenRow</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The screen row to check</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.getScreenLength\" data-title=\"EditSession.getScreenLength (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.getScreenLength\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.getScreenLength\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">getScreenLength</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"returnType \" title=\"Number\" data-id=\"Number\">Number</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.getScreenLength\" class=\"ellipsis_description\"><p>Returns the length of the screen.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the length of the screen.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.getScreenTabSize\" data-title=\"EditSession.getScreenTabSize (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.getScreenTabSize\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.getScreenTabSize\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">getScreenTabSize</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> screenColumn</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"returnType \" title=\"Number\" data-id=\"Number\">Number</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.getScreenTabSize\" class=\"ellipsis_description\"><p>The distance to the next tab stop at the specified screen column.</p>\n\n            </div>\n            <div class=\"description\"><p>The distance to the next tab stop at the specified screen column.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">screenColumn</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The screen column to check</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.getScreenWidth\" data-title=\"EditSession.getScreenWidth (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.getScreenWidth\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.getScreenWidth\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">getScreenWidth</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"returnType \" title=\"Number\" data-id=\"Number\">Number</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.getScreenWidth\" class=\"ellipsis_description\"><p>Returns the width of the screen.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the width of the screen.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.getScrollLeft\" data-title=\"EditSession.getScrollLeft (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.getScrollLeft\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.getScrollLeft\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">getScrollLeft</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"returnType \" title=\"Number\" data-id=\"Number\">Number</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.getScrollLeft\" class=\"ellipsis_description\"><p>Returns the value of the distance between the left of the editor and the leftmost part of the visible content.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the value of the distance between the left of the editor and the leftmost part of the visible content.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.getScrollTop\" data-title=\"EditSession.getScrollTop (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.getScrollTop\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.getScrollTop\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">getScrollTop</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"returnType \" title=\"Number\" data-id=\"Number\">Number</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.getScrollTop\" class=\"ellipsis_description\"><p>Returns the value of the distance between the top of the editor and the topmost part of the visible content.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the value of the distance between the top of the editor and the topmost part of the visible content.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.getSelection\" data-title=\"EditSession.getSelection (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.getSelection\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.getSelection\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">getSelection</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.getSelection\" class=\"ellipsis_description\"><p>Returns selection object.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns selection object.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.getState\" data-title=\"EditSession.getState (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.getState\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.getState\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">getState</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> row</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.getState\" class=\"ellipsis_description\"><p>Returns the state of tokenization at the end of a row.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the state of tokenization at the end of a row.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">row</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The row to start at</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.getTabSize\" data-title=\"EditSession.getTabSize (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.getTabSize\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.getTabSize\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">getTabSize</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.getTabSize\" class=\"ellipsis_description\"><p>Returns the current tab size.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the current tab size.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.getTabString\" data-title=\"EditSession.getTabString (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.getTabString\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.getTabString\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">getTabString</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.getTabString\" class=\"ellipsis_description\"><p>Returns the current value for tabs. If the user is using soft tabs, this will be a series of spaces (defined by <a href=\"#EditSession.getTabSize\" class=\"link-short\" title=\"EditSession.getTabSize (class method)\" data-id=\"EditSession.getTabSize\"><code>getTabSize()</code></a>); otherwise it&#39;s simply <code>&#39;\\t&#39;</code>.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the current value for tabs. If the user is using soft tabs, this will be a series of spaces (defined by <a href=\"#EditSession.getTabSize\" class=\"link-short\" title=\"EditSession.getTabSize (class method)\" data-id=\"EditSession.getTabSize\"><code>getTabSize()</code></a>); otherwise it&#39;s simply <code>&#39;\\t&#39;</code>.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.getTextRange\" data-title=\"EditSession.getTextRange (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.getTextRange\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.getTextRange\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">getTextRange</span></span>(<span class=\"sigArgList\"><a href=\"range.html\" class=\"argument methodClicker\" title=\"Range (class)\" data-id=\"Range\">Range</a> range</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"returnType \" title=\"String\" data-id=\"String\">String</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.getTextRange\" class=\"ellipsis_description\"><p>Given a range within the document, this function returns all the text within that range as a single string.</p>\n\n            </div>\n            <div class=\"description\"><p>Given a range within the document, this function returns all the text within that range as a single string.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">range</td><td class=\"argType\" \"><a href=\"range.html\" class=\"\" title=\"Range (class)\" data-id=\"Range\">Range</a></td><td class=\"argDescription \"><p>Required. The range to work with</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.getTokenAt\" data-title=\"EditSession.getTokenAt (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.getTokenAt\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.getTokenAt\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">getTokenAt</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> row, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> column</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.getTokenAt\" class=\"ellipsis_description\"><p>Returns an object indicating the token at the current row. The object has two properties: <code>index</code> and <code>start</code>.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns an object indicating the token at the current row. The object has two properties: <code>index</code> and <code>start</code>.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">row</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The row number to retrieve from</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">column</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The column number to retrieve from</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.getTokens\" data-title=\"EditSession.getTokens (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.getTokens\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.getTokens\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">getTokens</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> row</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.getTokens\" class=\"ellipsis_description\"><p>Starts tokenizing at the row indicated. Returns a list of objects of the tokenized rows.</p>\n\n            </div>\n            <div class=\"description\"><p>Starts tokenizing at the row indicated. Returns a list of objects of the tokenized rows.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">row</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The row to start at</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.getUndoManager\" data-title=\"EditSession.getUndoManager (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.getUndoManager\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.getUndoManager\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">getUndoManager</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.getUndoManager\" class=\"ellipsis_description\"><p>Returns the current undo manager.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the current undo manager.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.getUseSoftTabs\" data-title=\"EditSession.getUseSoftTabs (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.getUseSoftTabs\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.getUseSoftTabs\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">getUseSoftTabs</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"returnType \" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.getUseSoftTabs\" class=\"ellipsis_description\"><p>Returns <code>true</code> if soft tabs are being used, <code>false</code> otherwise.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns <code>true</code> if soft tabs are being used, <code>false</code> otherwise.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.getUseWorker\" data-title=\"EditSession.getUseWorker (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.getUseWorker\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.getUseWorker\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">getUseWorker</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.getUseWorker\" class=\"ellipsis_description\"><p>Returns <code>true</code> if workers are being used.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns <code>true</code> if workers are being used.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.getUseWrapMode\" data-title=\"EditSession.getUseWrapMode (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.getUseWrapMode\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.getUseWrapMode\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">getUseWrapMode</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"returnType \" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.getUseWrapMode\" class=\"ellipsis_description\"><p>Returns <code>true</code> if wrap mode is being used; <code>false</code> otherwise.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns <code>true</code> if wrap mode is being used; <code>false</code> otherwise.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.getValue\" data-title=\"EditSession.getValue (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.getValue\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.getValue\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">getValue</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"returnType \" title=\"String\" data-id=\"String\">String</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.getValue\" class=\"ellipsis_description\"><p>Returns the current <a href=\"document.html\" class=\"link-short\" title=\"Document (class)\" data-id=\"Document\"><code>Document</code></a> as a string.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the current <a href=\"document.html\" class=\"link-short\" title=\"Document (class)\" data-id=\"Document\"><code>Document</code></a> as a string.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.getWordRange\" data-title=\"EditSession.getWordRange (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.getWordRange\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.getWordRange\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">getWordRange</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> row, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> column</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"range.html\" class=\"returnType \" title=\"Range (class)\" data-id=\"Range\">Range</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.getWordRange\" class=\"ellipsis_description\"><p>Given a starting row and column, this method returns the <code>Range</code> of the first word boundary it finds.</p>\n\n            </div>\n            <div class=\"description\"><p>Given a starting row and column, this method returns the <code>Range</code> of the first word boundary it finds.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">row</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The row to start at</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">column</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The column to start at</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.getWrapLimit\" data-title=\"EditSession.getWrapLimit (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.getWrapLimit\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.getWrapLimit\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">getWrapLimit</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"returnType \" title=\"Number\" data-id=\"Number\">Number</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.getWrapLimit\" class=\"ellipsis_description\"><p>Returns the value of wrap limit.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the value of wrap limit.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.getWrapLimitRange\" data-title=\"EditSession.getWrapLimitRange (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.getWrapLimitRange\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.getWrapLimitRange\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">getWrapLimitRange</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"returnType \" title=\"Object\" data-id=\"Object\">Object</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.getWrapLimitRange\" class=\"ellipsis_description\"><p>Returns an object that defines the minimum and maximum of the wrap limit; it looks something like this:</p>\n\n            </div>\n            <div class=\"description\"><p>Returns an object that defines the minimum and maximum of the wrap limit; it looks something like this:</p>\n<p>{ min: wrapLimitRange_min, max: wrapLimitRange_max }</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.highlight\" data-title=\"EditSession.highlight (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.highlight\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.highlight\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">highlight</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.highlight\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.highlightLines\" data-title=\"EditSession.highlightLines (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.highlightLines\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.highlightLines\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">highlightLines</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.highlightLines\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.indentRows\" data-title=\"EditSession.indentRows (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.indentRows\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.indentRows\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">indentRows</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> startRow, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> endRow, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"argument methodClicker\" title=\"String\" data-id=\"String\">String</a> indentString</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.indentRows\" class=\"ellipsis_description\"><p>Indents all the rows, from <code>startRow</code> to <code>endRow</code> (inclusive), by prefixing each row with the token in <code>indentString</code>.</p>\n\n            </div>\n            <div class=\"description\"><p>Indents all the rows, from <code>startRow</code> to <code>endRow</code> (inclusive), by prefixing each row with the token in <code>indentString</code>.</p>\n<p>If <code>indentString</code> contains the <code>&#39;\\t&#39;</code> character, it&#39;s replaced by whatever is defined by <a href=\"#EditSession.getTabString\" class=\"link-short\" title=\"EditSession.getTabString (class method)\" data-id=\"EditSession.getTabString\"><code>getTabString()</code></a>.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">startRow</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. Starting row</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">endRow</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. Ending row</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">indentString</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"\" title=\"String\" data-id=\"String\">String</a></td><td class=\"argDescription \"><p>Required. The indent token</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.insert\" data-title=\"EditSession.insert (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.insert\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.insert\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">insert</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> position, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"argument methodClicker\" title=\"String\" data-id=\"String\">String</a> text</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"returnType \" title=\"Object\" data-id=\"Object\">Object</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.insert\" class=\"ellipsis_description\"><p>Inserts a block of <code>text</code> and the indicated <code>position</code>.</p>\n\n            </div>\n            <div class=\"description\"><p>Inserts a block of <code>text</code> and the indicated <code>position</code>.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">position</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. The position {row, column} to start inserting at</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">text</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"\" title=\"String\" data-id=\"String\">String</a></td><td class=\"argDescription \"><p>Required. A chunk of text to insert</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.isTabStop\" data-title=\"EditSession.isTabStop (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.isTabStop\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.isTabStop\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">isTabStop</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> position</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.isTabStop\" class=\"ellipsis_description\"><p>Returns <code>true</code> if the character at the position is a soft tab.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns <code>true</code> if the character at the position is a soft tab.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">position</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. The position to check</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.moveLinesDown\" data-title=\"EditSession.moveLinesDown (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.moveLinesDown\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.moveLinesDown\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">moveLinesDown</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> firstRow, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> lastRow</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"returnType \" title=\"Number\" data-id=\"Number\">Number</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.moveLinesDown\" class=\"ellipsis_description\"><p>Shifts all the lines in the document down one, starting from <code>firstRow</code> and ending at <code>lastRow</code>.</p>\n\n            </div>\n            <div class=\"description\"><p>Shifts all the lines in the document down one, starting from <code>firstRow</code> and ending at <code>lastRow</code>.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">firstRow</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The starting row to move down</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">lastRow</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The final row to move down</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.moveLinesUp\" data-title=\"EditSession.moveLinesUp (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.moveLinesUp\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.moveLinesUp\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">moveLinesUp</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> firstRow, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> lastRow</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"returnType \" title=\"Number\" data-id=\"Number\">Number</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.moveLinesUp\" class=\"ellipsis_description\"><p>Shifts all the lines in the document up one, starting from <code>firstRow</code> and ending at <code>lastRow</code>.</p>\n\n            </div>\n            <div class=\"description\"><p>Shifts all the lines in the document up one, starting from <code>firstRow</code> and ending at <code>lastRow</code>.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">firstRow</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The starting row to move up</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">lastRow</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The final row to move up</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.moveText\" data-title=\"EditSession.moveText (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.moveText\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.moveText\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">moveText</span></span>(<span class=\"sigArgList\"><a href=\"range.html\" class=\"argument methodClicker\" title=\"Range (class)\" data-id=\"Range\">Range</a> fromRange, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> toPosition</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"range.html\" class=\"returnType \" title=\"Range (class)\" data-id=\"Range\">Range</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.moveText\" class=\"ellipsis_description\"><p>Moves a range of text from the given range to the given position. <code>toPosition</code> is an object that looks like this:</p>\n<pre><code class=\"language-json\">   { row: newRowLocation, column: newColumnLocation }</code></pre>\n\n            </div>\n            <div class=\"description\"><p>Moves a range of text from the given range to the given position. <code>toPosition</code> is an object that looks like this:</p>\n<pre><code class=\"language-json\">   { row: newRowLocation, column: newColumnLocation }</code></pre>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">fromRange</td><td class=\"argType\" \"><a href=\"range.html\" class=\"\" title=\"Range (class)\" data-id=\"Range\">Range</a></td><td class=\"argDescription \"><p>Required. The range of text you want moved within the document</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">toPosition</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. The location (row and column) where you want to move the text to</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.onChange\" data-title=\"EditSession.onChange (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.onChange\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.onChange\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">onChange</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.onChange\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.onChangeFold\" data-title=\"EditSession.onChangeFold (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.onChangeFold\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.onChangeFold\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">onChangeFold</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.onChangeFold\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.onReloadTokenizer\" data-title=\"EditSession.onReloadTokenizer (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.onReloadTokenizer\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.onReloadTokenizer\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">onReloadTokenizer</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> e</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.onReloadTokenizer\" class=\"ellipsis_description\"><p>Reloads all the tokens on the current session. This function calls <a href=\"#nav=api&api=background_tokenizer\" class=\"link-short\" title=\"BackgroundTokenizer.start (class method)\" data-id=\"BackgroundTokenizer.start\"><code>BackgroundTokenizer.start ()</code></a> to all the rows; it also emits the <code>&#39;tokenizerUpdate&#39;</code> event.</p>\n\n            </div>\n            <div class=\"description\"><p>Reloads all the tokens on the current session. This function calls <a href=\"#nav=api&api=background_tokenizer\" class=\"link-short\" title=\"BackgroundTokenizer.start (class method)\" data-id=\"BackgroundTokenizer.start\"><code>BackgroundTokenizer.start ()</code></a> to all the rows; it also emits the <code>&#39;tokenizerUpdate&#39;</code> event.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">e</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. </p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.outdentRows\" data-title=\"EditSession.outdentRows (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.outdentRows\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.outdentRows\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">outdentRows</span></span>(<span class=\"sigArgList\"><a href=\"range.html\" class=\"argument methodClicker\" title=\"Range (class)\" data-id=\"Range\">Range</a> range</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.outdentRows\" class=\"ellipsis_description\"><p>Outdents all the rows defined by the <code>start</code> and <code>end</code> properties of <code>range</code>.</p>\n\n            </div>\n            <div class=\"description\"><p>Outdents all the rows defined by the <code>start</code> and <code>end</code> properties of <code>range</code>.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">range</td><td class=\"argType\" \"><a href=\"range.html\" class=\"\" title=\"Range (class)\" data-id=\"Range\">Range</a></td><td class=\"argDescription \"><p>Required. A range of rows</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.redo\" data-title=\"EditSession.redo (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.redo\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.redo\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">redo</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.redo\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.redoChanges\" data-title=\"EditSession.redoChanges (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.redoChanges\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.redoChanges\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">redoChanges</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array\" class=\"argument methodClicker\" title=\"Array\" data-id=\"Array\">Array</a> deltas, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"argument methodClicker\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a> dontSelect</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"range.html\" class=\"returnType \" title=\"Range (class)\" data-id=\"Range\">Range</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.redoChanges\" class=\"ellipsis_description\"><p>Re-implements a previously undone change to your document.</p>\n\n            </div>\n            <div class=\"description\"><p>Re-implements a previously undone change to your document.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">deltas</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array\" class=\"\" title=\"Array\" data-id=\"Array\">Array</a></td><td class=\"argDescription \"><p>Required. An array of previous changes</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">dontSelect</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></td><td class=\"argDescription \"><p>Required. If <code>true</code>, doesn&#39;t select the range of where the change occurred</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.remove\" data-title=\"EditSession.remove (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.remove\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.remove\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">remove</span></span>(<span class=\"sigArgList\"><a href=\"range.html\" class=\"argument methodClicker\" title=\"Range (class)\" data-id=\"Range\">Range</a> range</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"returnType \" title=\"Object\" data-id=\"Object\">Object</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.remove\" class=\"ellipsis_description\"><p>Removes the <code>range</code> from the document.</p>\n\n            </div>\n            <div class=\"description\"><p>Removes the <code>range</code> from the document.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">range</td><td class=\"argType\" \"><a href=\"range.html\" class=\"\" title=\"Range (class)\" data-id=\"Range\">Range</a></td><td class=\"argDescription \"><p>Required. A specified Range to remove</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.removeGutterDecoration\" data-title=\"EditSession.removeGutterDecoration (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.removeGutterDecoration\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.removeGutterDecoration\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">removeGutterDecoration</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> row, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"argument methodClicker\" title=\"String\" data-id=\"String\">String</a> className</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.removeGutterDecoration\" class=\"ellipsis_description\"><p>Removes <code>className</code> from the <code>row</code>.</p>\n\n            </div>\n            <div class=\"description\"><p>Removes <code>className</code> from the <code>row</code>.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">row</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The row number</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">className</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"\" title=\"String\" data-id=\"String\">String</a></td><td class=\"argDescription \"><p>Required. The class to add</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.removeMarker\" data-title=\"EditSession.removeMarker (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.removeMarker\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.removeMarker\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">removeMarker</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> markerId</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.removeMarker\" class=\"ellipsis_description\"><p>Removes the marker with the specified ID. If this marker was in front, the <code>&#39;changeFrontMarker&#39;</code> event is emitted. If the marker was in the back, the <code>&#39;changeBackMarker&#39;</code> event is emitted.</p>\n\n            </div>\n            <div class=\"description\"><p>Removes the marker with the specified ID. If this marker was in front, the <code>&#39;changeFrontMarker&#39;</code> event is emitted. If the marker was in the back, the <code>&#39;changeBackMarker&#39;</code> event is emitted.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">markerId</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. A number representing a marker</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.replace\" data-title=\"EditSession.replace (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.replace\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.replace\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">replace</span></span>(<span class=\"sigArgList\"><a href=\"range.html\" class=\"argument methodClicker\" title=\"Range (class)\" data-id=\"Range\">Range</a> range, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"argument methodClicker\" title=\"String\" data-id=\"String\">String</a> text</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"returnType \" title=\"Object\" data-id=\"Object\">Object</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.replace\" class=\"ellipsis_description\"><p>Replaces a range in the document with the new <code>text</code>.</p>\n\n            </div>\n            <div class=\"description\"><p>Replaces a range in the document with the new <code>text</code>.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">range</td><td class=\"argType\" \"><a href=\"range.html\" class=\"\" title=\"Range (class)\" data-id=\"Range\">Range</a></td><td class=\"argDescription \"><p>Required. A specified Range to replace</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">text</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"\" title=\"String\" data-id=\"String\">String</a></td><td class=\"argDescription \"><p>Required. The new text to use as a replacement</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.reset\" data-title=\"EditSession.reset (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.reset\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.reset\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">reset</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.reset\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.resetCaches\" data-title=\"EditSession.resetCaches (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.resetCaches\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.resetCaches\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">resetCaches</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.resetCaches\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.screenToDocumentColumn\" data-title=\"EditSession.screenToDocumentColumn (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.screenToDocumentColumn\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.screenToDocumentColumn\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">screenToDocumentColumn</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.screenToDocumentColumn\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.screenToDocumentPosition\" data-title=\"EditSession.screenToDocumentPosition (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.screenToDocumentPosition\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.screenToDocumentPosition\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">screenToDocumentPosition</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> screenRow, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> screenColumn</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"returnType \" title=\"Object\" data-id=\"Object\">Object</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.screenToDocumentPosition\" class=\"ellipsis_description\"><p>Converts characters coordinates on the screen to characters coordinates within the document. This takes into account code folding, word wrap, tab size, and any other visual modifications.</p>\n\n            </div>\n            <div class=\"description\"><p>Converts characters coordinates on the screen to characters coordinates within the document. This takes into account code folding, word wrap, tab size, and any other visual modifications.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">screenRow</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The screen row to check</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">screenColumn</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The screen column to check</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.screenToDocumentRow\" data-title=\"EditSession.screenToDocumentRow (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.screenToDocumentRow\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.screenToDocumentRow\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">screenToDocumentRow</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.screenToDocumentRow\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.setAnnotations\" data-title=\"EditSession.setAnnotations (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.setAnnotations\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.setAnnotations\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">setAnnotations</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array\" class=\"argument methodClicker\" title=\"Array\" data-id=\"Array\">Array</a> annotations</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.setAnnotations\" class=\"ellipsis_description\"><p>Sets annotations for the <code>EditSession</code>. This functions emits the <code>&#39;changeAnnotation&#39;</code> event.</p>\n\n            </div>\n            <div class=\"description\"><p>Sets annotations for the <code>EditSession</code>. This functions emits the <code>&#39;changeAnnotation&#39;</code> event.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">annotations</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array\" class=\"\" title=\"Array\" data-id=\"Array\">Array</a></td><td class=\"argDescription \"><p>Required. A list of annotations</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.setBreakpoint\" data-title=\"EditSession.setBreakpoint (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.setBreakpoint\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.setBreakpoint\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">setBreakpoint</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> row, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"argument methodClicker\" title=\"String\" data-id=\"String\">String</a> className</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.setBreakpoint\" class=\"ellipsis_description\"><p>Sets a breakpoint on the row number given by <code>rows</code>. This function also emites the <code>&#39;changeBreakpoint&#39;</code> event.</p>\n\n            </div>\n            <div class=\"description\"><p>Sets a breakpoint on the row number given by <code>rows</code>. This function also emites the <code>&#39;changeBreakpoint&#39;</code> event.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">row</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. A row index</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">className</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"\" title=\"String\" data-id=\"String\">String</a></td><td class=\"argDescription \"><p>Required. Class of the breakpoint</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.setBreakpoints\" data-title=\"EditSession.setBreakpoints (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.setBreakpoints\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.setBreakpoints\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">setBreakpoints</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array\" class=\"argument methodClicker\" title=\"Array\" data-id=\"Array\">Array</a> rows</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.setBreakpoints\" class=\"ellipsis_description\"><p>Sets a breakpoint on every row number given by <code>rows</code>. This function also emites the <code>&#39;changeBreakpoint&#39;</code> event.</p>\n\n            </div>\n            <div class=\"description\"><p>Sets a breakpoint on every row number given by <code>rows</code>. This function also emites the <code>&#39;changeBreakpoint&#39;</code> event.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">rows</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array\" class=\"\" title=\"Array\" data-id=\"Array\">Array</a></td><td class=\"argDescription \"><p>Required. An array of row indices</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.setDocument\" data-title=\"EditSession.setDocument (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.setDocument\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.setDocument\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">setDocument</span></span>(<span class=\"sigArgList\"><a href=\"document.html\" class=\"argument methodClicker\" title=\"Document (class)\" data-id=\"Document\">Document</a> doc</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.setDocument\" class=\"ellipsis_description\"><p>Sets the <code>EditSession</code> to point to a new <code>Document</code>. If a <code>BackgroundTokenizer</code> exists, it also points to <code>doc</code>.</p>\n\n            </div>\n            <div class=\"description\"><p>Sets the <code>EditSession</code> to point to a new <code>Document</code>. If a <code>BackgroundTokenizer</code> exists, it also points to <code>doc</code>.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">doc</td><td class=\"argType\" \"><a href=\"document.html\" class=\"\" title=\"Document (class)\" data-id=\"Document\">Document</a></td><td class=\"argDescription \"><p>Required. The new <code>Document</code> to use</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.setMode\" data-title=\"EditSession.setMode (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.setMode\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.setMode\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">setMode</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.setMode\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.setNewLineMode\" data-title=\"EditSession.setNewLineMode (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.setNewLineMode\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.setNewLineMode\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">setNewLineMode</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"argument methodClicker\" title=\"String\" data-id=\"String\">String</a> newLineMode</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.setNewLineMode\" class=\"ellipsis_description\"><p>Sets the new line mode.</p>\n\n            </div>\n            <div class=\"description\"><p>Sets the new line mode.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">newLineMode</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"\" title=\"String\" data-id=\"String\">String</a></td><td class=\"argDescription \"><p>Required. The newline mode to use; can be either <code>windows</code>, <code>unix</code>, or <code>auto</code></p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.setOverwrite\" data-title=\"EditSession.setOverwrite (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.setOverwrite\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.setOverwrite\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">setOverwrite</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"argument methodClicker\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a> overwrite</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.setOverwrite\" class=\"ellipsis_description\"><p>Pass in <code>true</code> to enable overwrites in your session, or <code>false</code> to disable. </p>\n\n            </div>\n            <div class=\"description\"><p>Pass in <code>true</code> to enable overwrites in your session, or <code>false</code> to disable. </p>\n<p>If overwrites is enabled, any text you enter will type over any text after it. If the value of <code>overwrite</code> changes, this function also emits the <code>changeOverwrite</code> event.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">overwrite</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></td><td class=\"argDescription \"><p>Required. Defines wheter or not to set overwrites</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.setScrollLeft\" data-title=\"EditSession.setScrollLeft (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.setScrollLeft\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.setScrollLeft\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">setScrollLeft</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> scrollLeft</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.setScrollLeft\" class=\"ellipsis_description\"><p>Sets the value of the distance between the left of the editor and the leftmost part of the visible content.</p>\n\n            </div>\n            <div class=\"description\"><p>Sets the value of the distance between the left of the editor and the leftmost part of the visible content.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">scrollLeft</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. </p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.setScrollTop\" data-title=\"EditSession.setScrollTop (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.setScrollTop\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.setScrollTop\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">setScrollTop</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> scrollTop</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.setScrollTop\" class=\"ellipsis_description\"><p>This function sets the scroll top value. It also emits the <code>&#39;changeScrollTop&#39;</code> event.</p>\n\n            </div>\n            <div class=\"description\"><p>This function sets the scroll top value. It also emits the <code>&#39;changeScrollTop&#39;</code> event.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">scrollTop</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The new scroll top value</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.setTabSize\" data-title=\"EditSession.setTabSize (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.setTabSize\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.setTabSize\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">setTabSize</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> tabSize</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.setTabSize\" class=\"ellipsis_description\"><p>Set the number of spaces that define a soft tab; for example, passing in <code>4</code> transforms the soft tabs to be equivalent to four spaces. This function also emits the <code>changeTabSize</code> event.</p>\n\n            </div>\n            <div class=\"description\"><p>Set the number of spaces that define a soft tab; for example, passing in <code>4</code> transforms the soft tabs to be equivalent to four spaces. This function also emits the <code>changeTabSize</code> event.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">tabSize</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The new tab size</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.setUndoManager\" data-title=\"EditSession.setUndoManager (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.setUndoManager\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.setUndoManager\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">setUndoManager</span></span>(<span class=\"sigArgList\"><a href=\"undomanager.html\" class=\"argument methodClicker\" title=\"UndoManager (class)\" data-id=\"UndoManager\">UndoManager</a> undoManager</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.setUndoManager\" class=\"ellipsis_description\"><p>Sets the undo manager.</p>\n\n            </div>\n            <div class=\"description\"><p>Sets the undo manager.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">undoManager</td><td class=\"argType\" \"><a href=\"undomanager.html\" class=\"\" title=\"UndoManager (class)\" data-id=\"UndoManager\">UndoManager</a></td><td class=\"argDescription \"><p>Required. The new undo manager</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.setUndoSelect\" data-title=\"EditSession.setUndoSelect (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.setUndoSelect\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.setUndoSelect\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">setUndoSelect</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"argument methodClicker\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a> enable</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.setUndoSelect\" class=\"ellipsis_description\"><p>Enables or disables highlighting of the range where an undo occured.</p>\n\n            </div>\n            <div class=\"description\"><p>Enables or disables highlighting of the range where an undo occured.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">enable</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></td><td class=\"argDescription \"><p>Required. If <code>true</code>, selects the range of the reinserted change</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.setUseSoftTabs\" data-title=\"EditSession.setUseSoftTabs (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.setUseSoftTabs\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.setUseSoftTabs\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">setUseSoftTabs</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"argument methodClicker\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a> useSoftTabs</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.setUseSoftTabs\" class=\"ellipsis_description\"><p>Pass <code>true</code> to enable the use of soft tabs. Soft tabs means you&#39;re using spaces instead of the tab character (<code>&#39;\\t&#39;</code>).</p>\n\n            </div>\n            <div class=\"description\"><p>Pass <code>true</code> to enable the use of soft tabs. Soft tabs means you&#39;re using spaces instead of the tab character (<code>&#39;\\t&#39;</code>).</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">useSoftTabs</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></td><td class=\"argDescription \"><p>Required. Value indicating whether or not to use soft tabs</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.setUseWorker\" data-title=\"EditSession.setUseWorker (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.setUseWorker\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.setUseWorker\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">setUseWorker</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"argument methodClicker\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a> useWorker</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.setUseWorker\" class=\"ellipsis_description\"><p>Identifies if you want to use a worker for the <code>EditSession</code>.</p>\n\n            </div>\n            <div class=\"description\"><p>Identifies if you want to use a worker for the <code>EditSession</code>.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">useWorker</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></td><td class=\"argDescription \"><p>Required. Set to <code>true</code> to use a worker</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.setUseWrapMode\" data-title=\"EditSession.setUseWrapMode (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.setUseWrapMode\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.setUseWrapMode\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">setUseWrapMode</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"argument methodClicker\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a> useWrapMode</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.setUseWrapMode\" class=\"ellipsis_description\"><p>Sets whether or not line wrapping is enabled. If <code>useWrapMode</code> is different than the current value, the <code>&#39;changeWrapMode&#39;</code> event is emitted.</p>\n\n            </div>\n            <div class=\"description\"><p>Sets whether or not line wrapping is enabled. If <code>useWrapMode</code> is different than the current value, the <code>&#39;changeWrapMode&#39;</code> event is emitted.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">useWrapMode</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></td><td class=\"argDescription \"><p>Required. Enable (or disable) wrap mode</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.setValue\" data-title=\"EditSession.setValue (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.setValue\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.setValue\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">setValue</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"argument methodClicker\" title=\"String\" data-id=\"String\">String</a> text</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.setValue\" class=\"ellipsis_description\"><p>Sets the session text.</p>\n\n            </div>\n            <div class=\"description\"><p>Sets the session text.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">text</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"\" title=\"String\" data-id=\"String\">String</a></td><td class=\"argDescription \"><p>Required. The new text to place</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.setWrapLimitRange\" data-title=\"EditSession.setWrapLimitRange (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.setWrapLimitRange\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.setWrapLimitRange\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">setWrapLimitRange</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> min, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> max</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.setWrapLimitRange\" class=\"ellipsis_description\"><p>Sets the boundaries of wrap. Either value can be <code>null</code> to have an unconstrained wrap, or, they can be the same number to pin the limit. If the wrap limits for <code>min</code> or <code>max</code> are different, this method also emits the <code>&#39;changeWrapMode&#39;</code> event.</p>\n\n            </div>\n            <div class=\"description\"><p>Sets the boundaries of wrap. Either value can be <code>null</code> to have an unconstrained wrap, or, they can be the same number to pin the limit. If the wrap limits for <code>min</code> or <code>max</code> are different, this method also emits the <code>&#39;changeWrapMode&#39;</code> event.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">min</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The minimum wrap value (the left side wrap)</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">max</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The maximum wrap value (the right side wrap)</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.toggleOverwrite\" data-title=\"EditSession.toggleOverwrite (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.toggleOverwrite\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.toggleOverwrite\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">toggleOverwrite</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.toggleOverwrite\" class=\"ellipsis_description\"><p>Sets the value of overwrite to the opposite of whatever it currently is.</p>\n\n            </div>\n            <div class=\"description\"><p>Sets the value of overwrite to the opposite of whatever it currently is.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.toString\" data-title=\"EditSession.toString (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.toString\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.toString\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">toString</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"returnType \" title=\"String\" data-id=\"String\">String</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.toString\" class=\"ellipsis_description\"><p>Returns the current <a href=\"document.html\" class=\"link-short\" title=\"Document (class)\" data-id=\"Document\"><code>Document</code></a> as a string.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the current <a href=\"document.html\" class=\"link-short\" title=\"Document (class)\" data-id=\"Document\"><code>Document</code></a> as a string.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.undo\" data-title=\"EditSession.undo (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.undo\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.undo\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">undo</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.undo\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"EditSession.undoChanges\" data-title=\"EditSession.undoChanges (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"EditSession.undoChanges\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"EditSession.undoChanges\" class=\"member-name methodClicker\"><span class=\"sigClassName\">EditSession.</span><span class=\"sigMemberName\">undoChanges</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array\" class=\"argument methodClicker\" title=\"Array\" data-id=\"Array\">Array</a> deltas, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"argument methodClicker\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a> dontSelect</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"range.html\" class=\"returnType \" title=\"Range (class)\" data-id=\"Range\">Range</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_EditSession.undoChanges\" class=\"ellipsis_description\"><p>Reverts previous changes to your document.</p>\n\n            </div>\n            <div class=\"description\"><p>Reverts previous changes to your document.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">deltas</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array\" class=\"\" title=\"Array\" data-id=\"Array\">Array</a></td><td class=\"argDescription \"><p>Required. An array of previous changes</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">dontSelect</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></td><td class=\"argDescription \"><p>Required. If <code>true</code>, doesn&#39;t select the range of where the change occurred</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n  </div>\n  <script defer src=\"./resources/javascripts/ux.js\"></script>\n  <script src=\"./resources/javascripts/clicker.js\"></script>\n  <script src=\"./resources/javascripts/jquery-scrollspy.js\"></script>\n  <script defer src=\"./resources/javascripts/disqus-ext.js\"></script>\n  <script defer src=\"./resources/javascripts/ga.js\"></script>\n  <div id=\"disqus_thread\"></div>\n</div>\n"
  },
  {
    "path": "api/editor.html",
    "content": "\n<div id=\"documentation\" class=\"span9\">\n  <div class=\"classContent\">\n    <div class=\"membersBackground\"></div>\n    <div class=\" members pos0\">\n      <div class=\" membersContent pos0\">\n        <h1 class=\"memberHeader\"><span class=\"name\">Editor</span>\n        </h1>\n        <ul data-tabs=\"tabs\" class=\"nav tabs pos0\">\n          <li data-dropdown=\"dropdown\" class=\"dropdown\"><a href=\"#\" data-toggle=\"dropdown\" class=\"dropdown-toggle\"><span>Events (7)</span><b class=\"caret\"></b></a>\n            <ul class=\"dropdown-menu\">\n              <li id=\"dropdown_Editor.event.blur\" data-id=\"Editor.event.blur\" class=\"memberLink\"><a href=\"#Editor.event.blur\" class=\"\" title=\"Editor.event.blur (event)\" data-id=\"Editor.event.blur\">blur</a>\n              </li>\n              <li id=\"dropdown_Editor.event.change\" data-id=\"Editor.event.change\" class=\"memberLink\"><a href=\"#Editor.event.change\" class=\"\" title=\"Editor.event.change (event)\" data-id=\"Editor.event.change\">change</a>\n              </li>\n              <li id=\"dropdown_Editor.event.changeSelectionStyle\" data-id=\"Editor.event.changeSelectionStyle\" class=\"memberLink\"><a href=\"#Editor.event.changeSelectionStyle\" class=\"\" title=\"Editor.event.changeSelectionStyle (event)\" data-id=\"Editor.event.changeSelectionStyle\">changeSelectionStyle</a>\n              </li>\n              <li id=\"dropdown_Editor.event.changeSession\" data-id=\"Editor.event.changeSession\" class=\"memberLink\"><a href=\"#Editor.event.changeSession\" class=\"\" title=\"Editor.event.changeSession (event)\" data-id=\"Editor.event.changeSession\">changeSession</a>\n              </li>\n              <li id=\"dropdown_Editor.event.copy\" data-id=\"Editor.event.copy\" class=\"memberLink\"><a href=\"#Editor.event.copy\" class=\"\" title=\"Editor.event.copy (event)\" data-id=\"Editor.event.copy\">copy</a>\n              </li>\n              <li id=\"dropdown_Editor.event.focus\" data-id=\"Editor.event.focus\" class=\"memberLink\"><a href=\"#Editor.event.focus\" class=\"\" title=\"Editor.event.focus (event)\" data-id=\"Editor.event.focus\">focus</a>\n              </li>\n              <li id=\"dropdown_Editor.event.paste\" data-id=\"Editor.event.paste\" class=\"memberLink\"><a href=\"#Editor.event.paste\" class=\"\" title=\"Editor.event.paste (event)\" data-id=\"Editor.event.paste\">paste</a>\n              </li>\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\"><a href=\"#\" data-toggle=\"dropdown\" class=\"dropdown-toggle\"><span>Constructors (1)</span><b class=\"caret\"></b></a>\n            <ul class=\"dropdown-menu\">\n              <li id=\"dropdown_Editor.new\" data-id=\"Editor.new\" class=\"memberLink\"><a href=\"#Editor.new\" class=\"\" title=\"Editor.new (constructor)\" data-id=\"Editor.new\">new</a>\n              </li>\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\"><a href=\"#\" data-toggle=\"dropdown\" class=\"dropdown-toggle\"><span>Functions (156)</span><b class=\"caret\"></b></a>\n            <ul class=\"dropdown-menu\">\n              <li id=\"dropdown_Editor.addSelectionMarker\" data-id=\"Editor.addSelectionMarker\" class=\"memberLink\"><a href=\"#nav=api&api=multi_select\" class=\"\" title=\"Editor.addSelectionMarker (class method)\" data-id=\"Editor.addSelectionMarker\">addSelectionMarker</a>\n              </li>\n              <li id=\"dropdown_Editor.alignCursors\" data-id=\"Editor.alignCursors\" class=\"memberLink\"><a href=\"#nav=api&api=multi_select\" class=\"\" title=\"Editor.alignCursors (class method)\" data-id=\"Editor.alignCursors\">alignCursors</a>\n              </li>\n              <li id=\"dropdown_Editor.blockOutdent\" data-id=\"Editor.blockOutdent\" class=\"memberLink\"><a href=\"#Editor.blockOutdent\" class=\"\" title=\"Editor.blockOutdent (class method)\" data-id=\"Editor.blockOutdent\">blockOutdent</a>\n              </li>\n              <li id=\"dropdown_Editor.blur\" data-id=\"Editor.blur\" class=\"memberLink\"><a href=\"#Editor.blur\" class=\"\" title=\"Editor.blur (class method)\" data-id=\"Editor.blur\">blur</a>\n              </li>\n              <li id=\"dropdown_Editor.centerSelection\" data-id=\"Editor.centerSelection\" class=\"memberLink\"><a href=\"#Editor.centerSelection\" class=\"\" title=\"Editor.centerSelection (class method)\" data-id=\"Editor.centerSelection\">centerSelection</a>\n              </li>\n              <li id=\"dropdown_Editor.clearSelection\" data-id=\"Editor.clearSelection\" class=\"memberLink\"><a href=\"#Editor.clearSelection\" class=\"\" title=\"Editor.clearSelection (class method)\" data-id=\"Editor.clearSelection\">clearSelection</a>\n              </li>\n              <li id=\"dropdown_Editor.copyLinesDown\" data-id=\"Editor.copyLinesDown\" class=\"memberLink\"><a href=\"#Editor.copyLinesDown\" class=\"\" title=\"Editor.copyLinesDown (class method)\" data-id=\"Editor.copyLinesDown\">copyLinesDown</a>\n              </li>\n              <li id=\"dropdown_Editor.copyLinesUp\" data-id=\"Editor.copyLinesUp\" class=\"memberLink\"><a href=\"#Editor.copyLinesUp\" class=\"\" title=\"Editor.copyLinesUp (class method)\" data-id=\"Editor.copyLinesUp\">copyLinesUp</a>\n              </li>\n              <li id=\"dropdown_Editor.destroy\" data-id=\"Editor.destroy\" class=\"memberLink\"><a href=\"#Editor.destroy\" class=\"\" title=\"Editor.destroy (class method)\" data-id=\"Editor.destroy\">destroy</a>\n              </li>\n              <li id=\"dropdown_Editor.duplicateSelection\" data-id=\"Editor.duplicateSelection\" class=\"memberLink\"><a href=\"#Editor.duplicateSelection\" class=\"\" title=\"Editor.duplicateSelection (class method)\" data-id=\"Editor.duplicateSelection\">duplicateSelection</a>\n              </li>\n              <li id=\"dropdown_Editor.execCommand\" data-id=\"Editor.execCommand\" class=\"memberLink\"><a href=\"#Editor.execCommand\" class=\"\" title=\"Editor.execCommand (class method)\" data-id=\"Editor.execCommand\">execCommand</a>\n              </li>\n              <li id=\"dropdown_Editor.exitMultiSelectMode\" data-id=\"Editor.exitMultiSelectMode\" class=\"memberLink\"><a href=\"#nav=api&api=multi_select\" class=\"\" title=\"Editor.exitMultiSelectMode (class method)\" data-id=\"Editor.exitMultiSelectMode\">exitMultiSelectMode</a>\n              </li>\n              <li id=\"dropdown_Editor.find\" data-id=\"Editor.find\" class=\"memberLink\"><a href=\"#Editor.find\" class=\"\" title=\"Editor.find (class method)\" data-id=\"Editor.find\">find</a>\n              </li>\n              <li id=\"dropdown_Editor.findAll\" data-id=\"Editor.findAll\" class=\"memberLink\"><a href=\"#nav=api&api=multi_select\" class=\"\" title=\"Editor.findAll (class method)\" data-id=\"Editor.findAll\">findAll</a>\n              </li>\n              <li id=\"dropdown_Editor.findNext\" data-id=\"Editor.findNext\" class=\"memberLink\"><a href=\"#Editor.findNext\" class=\"\" title=\"Editor.findNext (class method)\" data-id=\"Editor.findNext\">findNext</a>\n              </li>\n              <li id=\"dropdown_Editor.findPrevious\" data-id=\"Editor.findPrevious\" class=\"memberLink\"><a href=\"#Editor.findPrevious\" class=\"\" title=\"Editor.findPrevious (class method)\" data-id=\"Editor.findPrevious\">findPrevious</a>\n              </li>\n              <li id=\"dropdown_Editor.focus\" data-id=\"Editor.focus\" class=\"memberLink\"><a href=\"#Editor.focus\" class=\"\" title=\"Editor.focus (class method)\" data-id=\"Editor.focus\">focus</a>\n              </li>\n              <li id=\"dropdown_Editor.forEachSelection\" data-id=\"Editor.forEachSelection\" class=\"memberLink\"><a href=\"#nav=api&api=multi_select\" class=\"\" title=\"Editor.forEachSelection (class method)\" data-id=\"Editor.forEachSelection\">forEachSelection</a>\n              </li>\n              <li id=\"dropdown_Editor.getAnimatedScroll\" data-id=\"Editor.getAnimatedScroll\" class=\"memberLink\"><a href=\"#Editor.getAnimatedScroll\" class=\"\" title=\"Editor.getAnimatedScroll (class method)\" data-id=\"Editor.getAnimatedScroll\">getAnimatedScroll</a>\n              </li>\n              <li id=\"dropdown_Editor.getBehavioursEnabled\" data-id=\"Editor.getBehavioursEnabled\" class=\"memberLink\"><a href=\"#Editor.getBehavioursEnabled\" class=\"\" title=\"Editor.getBehavioursEnabled (class method)\" data-id=\"Editor.getBehavioursEnabled\">getBehavioursEnabled</a>\n              </li>\n              <li id=\"dropdown_Editor.getCopyText\" data-id=\"Editor.getCopyText\" class=\"memberLink\"><a href=\"#Editor.getCopyText\" class=\"\" title=\"Editor.getCopyText (class method)\" data-id=\"Editor.getCopyText\">getCopyText</a>\n              </li>\n              <li id=\"dropdown_Editor.getCursorPosition\" data-id=\"Editor.getCursorPosition\" class=\"memberLink\"><a href=\"#Editor.getCursorPosition\" class=\"\" title=\"Editor.getCursorPosition (class method)\" data-id=\"Editor.getCursorPosition\">getCursorPosition</a>\n              </li>\n              <li id=\"dropdown_Editor.getCursorPositionScreen\" data-id=\"Editor.getCursorPositionScreen\" class=\"memberLink\"><a href=\"#Editor.getCursorPositionScreen\" class=\"\" title=\"Editor.getCursorPositionScreen (class method)\" data-id=\"Editor.getCursorPositionScreen\">getCursorPositionScreen</a>\n              </li>\n              <li id=\"dropdown_Editor.getDisplayIndentGuides\" data-id=\"Editor.getDisplayIndentGuides\" class=\"memberLink\"><a href=\"#Editor.getDisplayIndentGuides\" class=\"\" title=\"Editor.getDisplayIndentGuides (class method)\" data-id=\"Editor.getDisplayIndentGuides\">getDisplayIndentGuides</a>\n              </li>\n              <li id=\"dropdown_Editor.getDragDelay\" data-id=\"Editor.getDragDelay\" class=\"memberLink\"><a href=\"#Editor.getDragDelay\" class=\"\" title=\"Editor.getDragDelay (class method)\" data-id=\"Editor.getDragDelay\">getDragDelay</a>\n              </li>\n              <li id=\"dropdown_Editor.getFadeFoldWidgets\" data-id=\"Editor.getFadeFoldWidgets\" class=\"memberLink\"><a href=\"#Editor.getFadeFoldWidgets\" class=\"\" title=\"Editor.getFadeFoldWidgets (class method)\" data-id=\"Editor.getFadeFoldWidgets\">getFadeFoldWidgets</a>\n              </li>\n              <li id=\"dropdown_Editor.getFirstVisibleRow\" data-id=\"Editor.getFirstVisibleRow\" class=\"memberLink\"><a href=\"#Editor.getFirstVisibleRow\" class=\"\" title=\"Editor.getFirstVisibleRow (class method)\" data-id=\"Editor.getFirstVisibleRow\">getFirstVisibleRow</a>\n              </li>\n              <li id=\"dropdown_Editor.getHighlightActiveLine\" data-id=\"Editor.getHighlightActiveLine\" class=\"memberLink\"><a href=\"#Editor.getHighlightActiveLine\" class=\"\" title=\"Editor.getHighlightActiveLine (class method)\" data-id=\"Editor.getHighlightActiveLine\">getHighlightActiveLine</a>\n              </li>\n              <li id=\"dropdown_Editor.getHighlightGutterLine\" data-id=\"Editor.getHighlightGutterLine\" class=\"memberLink\"><a href=\"#Editor.getHighlightGutterLine\" class=\"\" title=\"Editor.getHighlightGutterLine (class method)\" data-id=\"Editor.getHighlightGutterLine\">getHighlightGutterLine</a>\n              </li>\n              <li id=\"dropdown_Editor.getHighlightSelectedWord\" data-id=\"Editor.getHighlightSelectedWord\" class=\"memberLink\"><a href=\"#Editor.getHighlightSelectedWord\" class=\"\" title=\"Editor.getHighlightSelectedWord (class method)\" data-id=\"Editor.getHighlightSelectedWord\">getHighlightSelectedWord</a>\n              </li>\n              <li id=\"dropdown_Editor.getKeyboardHandler\" data-id=\"Editor.getKeyboardHandler\" class=\"memberLink\"><a href=\"#Editor.getKeyboardHandler\" class=\"\" title=\"Editor.getKeyboardHandler (class method)\" data-id=\"Editor.getKeyboardHandler\">getKeyboardHandler</a>\n              </li>\n              <li id=\"dropdown_Editor.getLastSearchOptions\" data-id=\"Editor.getLastSearchOptions\" class=\"memberLink\"><a href=\"#Editor.getLastSearchOptions\" class=\"\" title=\"Editor.getLastSearchOptions (class method)\" data-id=\"Editor.getLastSearchOptions\">getLastSearchOptions</a>\n              </li>\n              <li id=\"dropdown_Editor.getLastVisibleRow\" data-id=\"Editor.getLastVisibleRow\" class=\"memberLink\"><a href=\"#Editor.getLastVisibleRow\" class=\"\" title=\"Editor.getLastVisibleRow (class method)\" data-id=\"Editor.getLastVisibleRow\">getLastVisibleRow</a>\n              </li>\n              <li id=\"dropdown_Editor.getNumberAt\" data-id=\"Editor.getNumberAt\" class=\"memberLink\"><a href=\"#Editor.getNumberAt\" class=\"\" title=\"Editor.getNumberAt (class method)\" data-id=\"Editor.getNumberAt\">getNumberAt</a>\n              </li>\n              <li id=\"dropdown_Editor.getOverwrite\" data-id=\"Editor.getOverwrite\" class=\"memberLink\"><a href=\"#Editor.getOverwrite\" class=\"\" title=\"Editor.getOverwrite (class method)\" data-id=\"Editor.getOverwrite\">getOverwrite</a>\n              </li>\n              <li id=\"dropdown_Editor.getPrintMarginColumn\" data-id=\"Editor.getPrintMarginColumn\" class=\"memberLink\"><a href=\"#Editor.getPrintMarginColumn\" class=\"\" title=\"Editor.getPrintMarginColumn (class method)\" data-id=\"Editor.getPrintMarginColumn\">getPrintMarginColumn</a>\n              </li>\n              <li id=\"dropdown_Editor.getReadOnly\" data-id=\"Editor.getReadOnly\" class=\"memberLink\"><a href=\"#Editor.getReadOnly\" class=\"\" title=\"Editor.getReadOnly (class method)\" data-id=\"Editor.getReadOnly\">getReadOnly</a>\n              </li>\n              <li id=\"dropdown_Editor.getScrollSpeed\" data-id=\"Editor.getScrollSpeed\" class=\"memberLink\"><a href=\"#Editor.getScrollSpeed\" class=\"\" title=\"Editor.getScrollSpeed (class method)\" data-id=\"Editor.getScrollSpeed\">getScrollSpeed</a>\n              </li>\n              <li id=\"dropdown_Editor.getSelection\" data-id=\"Editor.getSelection\" class=\"memberLink\"><a href=\"#Editor.getSelection\" class=\"\" title=\"Editor.getSelection (class method)\" data-id=\"Editor.getSelection\">getSelection</a>\n              </li>\n              <li id=\"dropdown_Editor.getSelectionRange\" data-id=\"Editor.getSelectionRange\" class=\"memberLink\"><a href=\"#Editor.getSelectionRange\" class=\"\" title=\"Editor.getSelectionRange (class method)\" data-id=\"Editor.getSelectionRange\">getSelectionRange</a>\n              </li>\n              <li id=\"dropdown_Editor.getSelectionStyle\" data-id=\"Editor.getSelectionStyle\" class=\"memberLink\"><a href=\"#Editor.getSelectionStyle\" class=\"\" title=\"Editor.getSelectionStyle (class method)\" data-id=\"Editor.getSelectionStyle\">getSelectionStyle</a>\n              </li>\n              <li id=\"dropdown_Editor.getSession\" data-id=\"Editor.getSession\" class=\"memberLink\"><a href=\"#Editor.getSession\" class=\"\" title=\"Editor.getSession (class method)\" data-id=\"Editor.getSession\">getSession</a>\n              </li>\n              <li id=\"dropdown_Editor.getShowFoldWidgets\" data-id=\"Editor.getShowFoldWidgets\" class=\"memberLink\"><a href=\"#Editor.getShowFoldWidgets\" class=\"\" title=\"Editor.getShowFoldWidgets (class method)\" data-id=\"Editor.getShowFoldWidgets\">getShowFoldWidgets</a>\n              </li>\n              <li id=\"dropdown_Editor.getShowInvisibles\" data-id=\"Editor.getShowInvisibles\" class=\"memberLink\"><a href=\"#Editor.getShowInvisibles\" class=\"\" title=\"Editor.getShowInvisibles (class method)\" data-id=\"Editor.getShowInvisibles\">getShowInvisibles</a>\n              </li>\n              <li id=\"dropdown_Editor.getShowPrintMargin\" data-id=\"Editor.getShowPrintMargin\" class=\"memberLink\"><a href=\"#Editor.getShowPrintMargin\" class=\"\" title=\"Editor.getShowPrintMargin (class method)\" data-id=\"Editor.getShowPrintMargin\">getShowPrintMargin</a>\n              </li>\n              <li id=\"dropdown_Editor.getTheme\" data-id=\"Editor.getTheme\" class=\"memberLink\"><a href=\"#Editor.getTheme\" class=\"\" title=\"Editor.getTheme (class method)\" data-id=\"Editor.getTheme\">getTheme</a>\n              </li>\n              <li id=\"dropdown_Editor.getValue\" data-id=\"Editor.getValue\" class=\"memberLink\"><a href=\"#Editor.getValue\" class=\"\" title=\"Editor.getValue (class method)\" data-id=\"Editor.getValue\">getValue</a>\n              </li>\n              <li id=\"dropdown_Editor.getWrapBehavioursEnabled\" data-id=\"Editor.getWrapBehavioursEnabled\" class=\"memberLink\"><a href=\"#Editor.getWrapBehavioursEnabled\" class=\"\" title=\"Editor.getWrapBehavioursEnabled (class method)\" data-id=\"Editor.getWrapBehavioursEnabled\">getWrapBehavioursEnabled</a>\n              </li>\n              <li id=\"dropdown_Editor.gotoLine\" data-id=\"Editor.gotoLine\" class=\"memberLink\"><a href=\"#Editor.gotoLine\" class=\"\" title=\"Editor.gotoLine (class method)\" data-id=\"Editor.gotoLine\">gotoLine</a>\n              </li>\n              <li id=\"dropdown_Editor.gotoPageDown\" data-id=\"Editor.gotoPageDown\" class=\"memberLink\"><a href=\"#Editor.gotoPageDown\" class=\"\" title=\"Editor.gotoPageDown (class method)\" data-id=\"Editor.gotoPageDown\">gotoPageDown</a>\n              </li>\n              <li id=\"dropdown_Editor.gotoPageUp\" data-id=\"Editor.gotoPageUp\" class=\"memberLink\"><a href=\"#Editor.gotoPageUp\" class=\"\" title=\"Editor.gotoPageUp (class method)\" data-id=\"Editor.gotoPageUp\">gotoPageUp</a>\n              </li>\n              <li id=\"dropdown_Editor.indent\" data-id=\"Editor.indent\" class=\"memberLink\"><a href=\"#Editor.indent\" class=\"\" title=\"Editor.indent (class method)\" data-id=\"Editor.indent\">indent</a>\n              </li>\n              <li id=\"dropdown_Editor.insert\" data-id=\"Editor.insert\" class=\"memberLink\"><a href=\"#Editor.insert\" class=\"\" title=\"Editor.insert (class method)\" data-id=\"Editor.insert\">insert</a>\n              </li>\n              <li id=\"dropdown_Editor.isFocused\" data-id=\"Editor.isFocused\" class=\"memberLink\"><a href=\"#Editor.isFocused\" class=\"\" title=\"Editor.isFocused (class method)\" data-id=\"Editor.isFocused\">isFocused</a>\n              </li>\n              <li id=\"dropdown_Editor.isRowFullyVisible\" data-id=\"Editor.isRowFullyVisible\" class=\"memberLink\"><a href=\"#Editor.isRowFullyVisible\" class=\"\" title=\"Editor.isRowFullyVisible (class method)\" data-id=\"Editor.isRowFullyVisible\">isRowFullyVisible</a>\n              </li>\n              <li id=\"dropdown_Editor.isRowVisible\" data-id=\"Editor.isRowVisible\" class=\"memberLink\"><a href=\"#Editor.isRowVisible\" class=\"\" title=\"Editor.isRowVisible (class method)\" data-id=\"Editor.isRowVisible\">isRowVisible</a>\n              </li>\n              <li id=\"dropdown_Editor.jumpToMatching\" data-id=\"Editor.jumpToMatching\" class=\"memberLink\"><a href=\"#Editor.jumpToMatching\" class=\"\" title=\"Editor.jumpToMatching (class method)\" data-id=\"Editor.jumpToMatching\">jumpToMatching</a>\n              </li>\n              <li id=\"dropdown_Editor.modifyNumber\" data-id=\"Editor.modifyNumber\" class=\"memberLink\"><a href=\"#Editor.modifyNumber\" class=\"\" title=\"Editor.modifyNumber (class method)\" data-id=\"Editor.modifyNumber\">modifyNumber</a>\n              </li>\n              <li id=\"dropdown_Editor.moveCursorTo\" data-id=\"Editor.moveCursorTo\" class=\"memberLink\"><a href=\"#Editor.moveCursorTo\" class=\"\" title=\"Editor.moveCursorTo (class method)\" data-id=\"Editor.moveCursorTo\">moveCursorTo</a>\n              </li>\n              <li id=\"dropdown_Editor.moveCursorToPosition\" data-id=\"Editor.moveCursorToPosition\" class=\"memberLink\"><a href=\"#Editor.moveCursorToPosition\" class=\"\" title=\"Editor.moveCursorToPosition (class method)\" data-id=\"Editor.moveCursorToPosition\">moveCursorToPosition</a>\n              </li>\n              <li id=\"dropdown_Editor.moveLinesDown\" data-id=\"Editor.moveLinesDown\" class=\"memberLink\"><a href=\"#Editor.moveLinesDown\" class=\"\" title=\"Editor.moveLinesDown (class method)\" data-id=\"Editor.moveLinesDown\">moveLinesDown</a>\n              </li>\n              <li id=\"dropdown_Editor.moveLinesUp\" data-id=\"Editor.moveLinesUp\" class=\"memberLink\"><a href=\"#Editor.moveLinesUp\" class=\"\" title=\"Editor.moveLinesUp (class method)\" data-id=\"Editor.moveLinesUp\">moveLinesUp</a>\n              </li>\n              <li id=\"dropdown_Editor.moveText\" data-id=\"Editor.moveText\" class=\"memberLink\"><a href=\"#Editor.moveText\" class=\"\" title=\"Editor.moveText (class method)\" data-id=\"Editor.moveText\">moveText</a>\n              </li>\n              <li id=\"dropdown_Editor.navigateDown\" data-id=\"Editor.navigateDown\" class=\"memberLink\"><a href=\"#Editor.navigateDown\" class=\"\" title=\"Editor.navigateDown (class method)\" data-id=\"Editor.navigateDown\">navigateDown</a>\n              </li>\n              <li id=\"dropdown_Editor.navigateFileEnd\" data-id=\"Editor.navigateFileEnd\" class=\"memberLink\"><a href=\"#Editor.navigateFileEnd\" class=\"\" title=\"Editor.navigateFileEnd (class method)\" data-id=\"Editor.navigateFileEnd\">navigateFileEnd</a>\n              </li>\n              <li id=\"dropdown_Editor.navigateFileStart\" data-id=\"Editor.navigateFileStart\" class=\"memberLink\"><a href=\"#Editor.navigateFileStart\" class=\"\" title=\"Editor.navigateFileStart (class method)\" data-id=\"Editor.navigateFileStart\">navigateFileStart</a>\n              </li>\n              <li id=\"dropdown_Editor.navigateLeft\" data-id=\"Editor.navigateLeft\" class=\"memberLink\"><a href=\"#Editor.navigateLeft\" class=\"\" title=\"Editor.navigateLeft (class method)\" data-id=\"Editor.navigateLeft\">navigateLeft</a>\n              </li>\n              <li id=\"dropdown_Editor.navigateLineEnd\" data-id=\"Editor.navigateLineEnd\" class=\"memberLink\"><a href=\"#Editor.navigateLineEnd\" class=\"\" title=\"Editor.navigateLineEnd (class method)\" data-id=\"Editor.navigateLineEnd\">navigateLineEnd</a>\n              </li>\n              <li id=\"dropdown_Editor.navigateLineStart\" data-id=\"Editor.navigateLineStart\" class=\"memberLink\"><a href=\"#Editor.navigateLineStart\" class=\"\" title=\"Editor.navigateLineStart (class method)\" data-id=\"Editor.navigateLineStart\">navigateLineStart</a>\n              </li>\n              <li id=\"dropdown_Editor.navigateRight\" data-id=\"Editor.navigateRight\" class=\"memberLink\"><a href=\"#Editor.navigateRight\" class=\"\" title=\"Editor.navigateRight (class method)\" data-id=\"Editor.navigateRight\">navigateRight</a>\n              </li>\n              <li id=\"dropdown_Editor.navigateTo\" data-id=\"Editor.navigateTo\" class=\"memberLink\"><a href=\"#Editor.navigateTo\" class=\"\" title=\"Editor.navigateTo (class method)\" data-id=\"Editor.navigateTo\">navigateTo</a>\n              </li>\n              <li id=\"dropdown_Editor.navigateUp\" data-id=\"Editor.navigateUp\" class=\"memberLink\"><a href=\"#Editor.navigateUp\" class=\"\" title=\"Editor.navigateUp (class method)\" data-id=\"Editor.navigateUp\">navigateUp</a>\n              </li>\n              <li id=\"dropdown_Editor.navigateWordLeft\" data-id=\"Editor.navigateWordLeft\" class=\"memberLink\"><a href=\"#Editor.navigateWordLeft\" class=\"\" title=\"Editor.navigateWordLeft (class method)\" data-id=\"Editor.navigateWordLeft\">navigateWordLeft</a>\n              </li>\n              <li id=\"dropdown_Editor.navigateWordRight\" data-id=\"Editor.navigateWordRight\" class=\"memberLink\"><a href=\"#Editor.navigateWordRight\" class=\"\" title=\"Editor.navigateWordRight (class method)\" data-id=\"Editor.navigateWordRight\">navigateWordRight</a>\n              </li>\n              <li id=\"dropdown_Editor.onBlur\" data-id=\"Editor.onBlur\" class=\"memberLink\"><a href=\"#Editor.onBlur\" class=\"\" title=\"Editor.onBlur (class method)\" data-id=\"Editor.onBlur\">onBlur</a>\n              </li>\n              <li id=\"dropdown_Editor.onChangeAnnotation\" data-id=\"Editor.onChangeAnnotation\" class=\"memberLink\"><a href=\"#Editor.onChangeAnnotation\" class=\"\" title=\"Editor.onChangeAnnotation (class method)\" data-id=\"Editor.onChangeAnnotation\">onChangeAnnotation</a>\n              </li>\n              <li id=\"dropdown_Editor.onChangeBackMarker\" data-id=\"Editor.onChangeBackMarker\" class=\"memberLink\"><a href=\"#Editor.onChangeBackMarker\" class=\"\" title=\"Editor.onChangeBackMarker (class method)\" data-id=\"Editor.onChangeBackMarker\">onChangeBackMarker</a>\n              </li>\n              <li id=\"dropdown_Editor.onChangeBreakpoint\" data-id=\"Editor.onChangeBreakpoint\" class=\"memberLink\"><a href=\"#Editor.onChangeBreakpoint\" class=\"\" title=\"Editor.onChangeBreakpoint (class method)\" data-id=\"Editor.onChangeBreakpoint\">onChangeBreakpoint</a>\n              </li>\n              <li id=\"dropdown_Editor.onChangeFold\" data-id=\"Editor.onChangeFold\" class=\"memberLink\"><a href=\"#Editor.onChangeFold\" class=\"\" title=\"Editor.onChangeFold (class method)\" data-id=\"Editor.onChangeFold\">onChangeFold</a>\n              </li>\n              <li id=\"dropdown_Editor.onChangeFrontMarker\" data-id=\"Editor.onChangeFrontMarker\" class=\"memberLink\"><a href=\"#Editor.onChangeFrontMarker\" class=\"\" title=\"Editor.onChangeFrontMarker (class method)\" data-id=\"Editor.onChangeFrontMarker\">onChangeFrontMarker</a>\n              </li>\n              <li id=\"dropdown_Editor.onChangeMode\" data-id=\"Editor.onChangeMode\" class=\"memberLink\"><a href=\"#Editor.onChangeMode\" class=\"\" title=\"Editor.onChangeMode (class method)\" data-id=\"Editor.onChangeMode\">onChangeMode</a>\n              </li>\n              <li id=\"dropdown_Editor.onChangeWrapLimit\" data-id=\"Editor.onChangeWrapLimit\" class=\"memberLink\"><a href=\"#Editor.onChangeWrapLimit\" class=\"\" title=\"Editor.onChangeWrapLimit (class method)\" data-id=\"Editor.onChangeWrapLimit\">onChangeWrapLimit</a>\n              </li>\n              <li id=\"dropdown_Editor.onChangeWrapMode\" data-id=\"Editor.onChangeWrapMode\" class=\"memberLink\"><a href=\"#Editor.onChangeWrapMode\" class=\"\" title=\"Editor.onChangeWrapMode (class method)\" data-id=\"Editor.onChangeWrapMode\">onChangeWrapMode</a>\n              </li>\n              <li id=\"dropdown_Editor.onCommandKey\" data-id=\"Editor.onCommandKey\" class=\"memberLink\"><a href=\"#Editor.onCommandKey\" class=\"\" title=\"Editor.onCommandKey (class method)\" data-id=\"Editor.onCommandKey\">onCommandKey</a>\n              </li>\n              <li id=\"dropdown_Editor.onCompositionEnd\" data-id=\"Editor.onCompositionEnd\" class=\"memberLink\"><a href=\"#Editor.onCompositionEnd\" class=\"\" title=\"Editor.onCompositionEnd (class method)\" data-id=\"Editor.onCompositionEnd\">onCompositionEnd</a>\n              </li>\n              <li id=\"dropdown_Editor.onCompositionStart\" data-id=\"Editor.onCompositionStart\" class=\"memberLink\"><a href=\"#Editor.onCompositionStart\" class=\"\" title=\"Editor.onCompositionStart (class method)\" data-id=\"Editor.onCompositionStart\">onCompositionStart</a>\n              </li>\n              <li id=\"dropdown_Editor.onCompositionUpdate\" data-id=\"Editor.onCompositionUpdate\" class=\"memberLink\"><a href=\"#Editor.onCompositionUpdate\" class=\"\" title=\"Editor.onCompositionUpdate (class method)\" data-id=\"Editor.onCompositionUpdate\">onCompositionUpdate</a>\n              </li>\n              <li id=\"dropdown_Editor.onCopy\" data-id=\"Editor.onCopy\" class=\"memberLink\"><a href=\"#Editor.onCopy\" class=\"\" title=\"Editor.onCopy (class method)\" data-id=\"Editor.onCopy\">onCopy</a>\n              </li>\n              <li id=\"dropdown_Editor.onCursorChange\" data-id=\"Editor.onCursorChange\" class=\"memberLink\"><a href=\"#Editor.onCursorChange\" class=\"\" title=\"Editor.onCursorChange (class method)\" data-id=\"Editor.onCursorChange\">onCursorChange</a>\n              </li>\n              <li id=\"dropdown_Editor.onCut\" data-id=\"Editor.onCut\" class=\"memberLink\"><a href=\"#Editor.onCut\" class=\"\" title=\"Editor.onCut (class method)\" data-id=\"Editor.onCut\">onCut</a>\n              </li>\n              <li id=\"dropdown_Editor.onDocumentChange\" data-id=\"Editor.onDocumentChange\" class=\"memberLink\"><a href=\"#Editor.onDocumentChange\" class=\"\" title=\"Editor.onDocumentChange (class method)\" data-id=\"Editor.onDocumentChange\">onDocumentChange</a>\n              </li>\n              <li id=\"dropdown_Editor.onFocus\" data-id=\"Editor.onFocus\" class=\"memberLink\"><a href=\"#Editor.onFocus\" class=\"\" title=\"Editor.onFocus (class method)\" data-id=\"Editor.onFocus\">onFocus</a>\n              </li>\n              <li id=\"dropdown_Editor.onPaste\" data-id=\"Editor.onPaste\" class=\"memberLink\"><a href=\"#Editor.onPaste\" class=\"\" title=\"Editor.onPaste (class method)\" data-id=\"Editor.onPaste\">onPaste</a>\n              </li>\n              <li id=\"dropdown_Editor.onScrollLeftChange\" data-id=\"Editor.onScrollLeftChange\" class=\"memberLink\"><a href=\"#Editor.onScrollLeftChange\" class=\"\" title=\"Editor.onScrollLeftChange (class method)\" data-id=\"Editor.onScrollLeftChange\">onScrollLeftChange</a>\n              </li>\n              <li id=\"dropdown_Editor.onScrollTopChange\" data-id=\"Editor.onScrollTopChange\" class=\"memberLink\"><a href=\"#Editor.onScrollTopChange\" class=\"\" title=\"Editor.onScrollTopChange (class method)\" data-id=\"Editor.onScrollTopChange\">onScrollTopChange</a>\n              </li>\n              <li id=\"dropdown_Editor.onSelectionChange\" data-id=\"Editor.onSelectionChange\" class=\"memberLink\"><a href=\"#Editor.onSelectionChange\" class=\"\" title=\"Editor.onSelectionChange (class method)\" data-id=\"Editor.onSelectionChange\">onSelectionChange</a>\n              </li>\n              <li id=\"dropdown_Editor.onTextInput\" data-id=\"Editor.onTextInput\" class=\"memberLink\"><a href=\"#Editor.onTextInput\" class=\"\" title=\"Editor.onTextInput (class method)\" data-id=\"Editor.onTextInput\">onTextInput</a>\n              </li>\n              <li id=\"dropdown_Editor.onTokenizerUpdate\" data-id=\"Editor.onTokenizerUpdate\" class=\"memberLink\"><a href=\"#Editor.onTokenizerUpdate\" class=\"\" title=\"Editor.onTokenizerUpdate (class method)\" data-id=\"Editor.onTokenizerUpdate\">onTokenizerUpdate</a>\n              </li>\n              <li id=\"dropdown_Editor.redo\" data-id=\"Editor.redo\" class=\"memberLink\"><a href=\"#Editor.redo\" class=\"\" title=\"Editor.redo (class method)\" data-id=\"Editor.redo\">redo</a>\n              </li>\n              <li id=\"dropdown_Editor.remove\" data-id=\"Editor.remove\" class=\"memberLink\"><a href=\"#Editor.remove\" class=\"\" title=\"Editor.remove (class method)\" data-id=\"Editor.remove\">remove</a>\n              </li>\n              <li id=\"dropdown_Editor.removeLines\" data-id=\"Editor.removeLines\" class=\"memberLink\"><a href=\"#Editor.removeLines\" class=\"\" title=\"Editor.removeLines (class method)\" data-id=\"Editor.removeLines\">removeLines</a>\n              </li>\n              <li id=\"dropdown_Editor.removeSelectionMarker\" data-id=\"Editor.removeSelectionMarker\" class=\"memberLink\"><a href=\"#nav=api&api=multi_select\" class=\"\" title=\"Editor.removeSelectionMarker (class method)\" data-id=\"Editor.removeSelectionMarker\">removeSelectionMarker</a>\n              </li>\n              <li id=\"dropdown_Editor.removeToLineEnd\" data-id=\"Editor.removeToLineEnd\" class=\"memberLink\"><a href=\"#Editor.removeToLineEnd\" class=\"\" title=\"Editor.removeToLineEnd (class method)\" data-id=\"Editor.removeToLineEnd\">removeToLineEnd</a>\n              </li>\n              <li id=\"dropdown_Editor.removeToLineStart\" data-id=\"Editor.removeToLineStart\" class=\"memberLink\"><a href=\"#Editor.removeToLineStart\" class=\"\" title=\"Editor.removeToLineStart (class method)\" data-id=\"Editor.removeToLineStart\">removeToLineStart</a>\n              </li>\n              <li id=\"dropdown_Editor.removeWordLeft\" data-id=\"Editor.removeWordLeft\" class=\"memberLink\"><a href=\"#Editor.removeWordLeft\" class=\"\" title=\"Editor.removeWordLeft (class method)\" data-id=\"Editor.removeWordLeft\">removeWordLeft</a>\n              </li>\n              <li id=\"dropdown_Editor.removeWordRight\" data-id=\"Editor.removeWordRight\" class=\"memberLink\"><a href=\"#Editor.removeWordRight\" class=\"\" title=\"Editor.removeWordRight (class method)\" data-id=\"Editor.removeWordRight\">removeWordRight</a>\n              </li>\n              <li id=\"dropdown_Editor.replace\" data-id=\"Editor.replace\" class=\"memberLink\"><a href=\"#Editor.replace\" class=\"\" title=\"Editor.replace (class method)\" data-id=\"Editor.replace\">replace</a>\n              </li>\n              <li id=\"dropdown_Editor.replaceAll\" data-id=\"Editor.replaceAll\" class=\"memberLink\"><a href=\"#Editor.replaceAll\" class=\"\" title=\"Editor.replaceAll (class method)\" data-id=\"Editor.replaceAll\">replaceAll</a>\n              </li>\n              <li id=\"dropdown_Editor.resize\" data-id=\"Editor.resize\" class=\"memberLink\"><a href=\"#Editor.resize\" class=\"\" title=\"Editor.resize (class method)\" data-id=\"Editor.resize\">resize</a>\n              </li>\n              <li id=\"dropdown_Editor.revealRange\" data-id=\"Editor.revealRange\" class=\"memberLink\"><a href=\"#Editor.revealRange\" class=\"\" title=\"Editor.revealRange (class method)\" data-id=\"Editor.revealRange\">revealRange</a>\n              </li>\n              <li id=\"dropdown_Editor.scrollPageDown\" data-id=\"Editor.scrollPageDown\" class=\"memberLink\"><a href=\"#Editor.scrollPageDown\" class=\"\" title=\"Editor.scrollPageDown (class method)\" data-id=\"Editor.scrollPageDown\">scrollPageDown</a>\n              </li>\n              <li id=\"dropdown_Editor.scrollPageUp\" data-id=\"Editor.scrollPageUp\" class=\"memberLink\"><a href=\"#Editor.scrollPageUp\" class=\"\" title=\"Editor.scrollPageUp (class method)\" data-id=\"Editor.scrollPageUp\">scrollPageUp</a>\n              </li>\n              <li id=\"dropdown_Editor.scrollToLine\" data-id=\"Editor.scrollToLine\" class=\"memberLink\"><a href=\"#Editor.scrollToLine\" class=\"\" title=\"Editor.scrollToLine (class method)\" data-id=\"Editor.scrollToLine\">scrollToLine</a>\n              </li>\n              <li id=\"dropdown_Editor.scrollToRow\" data-id=\"Editor.scrollToRow\" class=\"memberLink\"><a href=\"#Editor.scrollToRow\" class=\"\" title=\"Editor.scrollToRow (class method)\" data-id=\"Editor.scrollToRow\">scrollToRow</a>\n              </li>\n              <li id=\"dropdown_Editor.selectAll\" data-id=\"Editor.selectAll\" class=\"memberLink\"><a href=\"#Editor.selectAll\" class=\"\" title=\"Editor.selectAll (class method)\" data-id=\"Editor.selectAll\">selectAll</a>\n              </li>\n              <li id=\"dropdown_Editor.selectMore\" data-id=\"Editor.selectMore\" class=\"memberLink\"><a href=\"#nav=api&api=multi_select\" class=\"\" title=\"Editor.selectMore (class method)\" data-id=\"Editor.selectMore\">selectMore</a>\n              </li>\n              <li id=\"dropdown_Editor.selectMoreLines\" data-id=\"Editor.selectMoreLines\" class=\"memberLink\"><a href=\"#nav=api&api=multi_select\" class=\"\" title=\"Editor.selectMoreLines (class method)\" data-id=\"Editor.selectMoreLines\">selectMoreLines</a>\n              </li>\n              <li id=\"dropdown_Editor.selectPageDown\" data-id=\"Editor.selectPageDown\" class=\"memberLink\"><a href=\"#Editor.selectPageDown\" class=\"\" title=\"Editor.selectPageDown (class method)\" data-id=\"Editor.selectPageDown\">selectPageDown</a>\n              </li>\n              <li id=\"dropdown_Editor.selectPageUp\" data-id=\"Editor.selectPageUp\" class=\"memberLink\"><a href=\"#Editor.selectPageUp\" class=\"\" title=\"Editor.selectPageUp (class method)\" data-id=\"Editor.selectPageUp\">selectPageUp</a>\n              </li>\n              <li id=\"dropdown_Editor.setAnimatedScroll\" data-id=\"Editor.setAnimatedScroll\" class=\"memberLink\"><a href=\"#Editor.setAnimatedScroll\" class=\"\" title=\"Editor.setAnimatedScroll (class method)\" data-id=\"Editor.setAnimatedScroll\">setAnimatedScroll</a>\n              </li>\n              <li id=\"dropdown_Editor.setBehavioursEnabled\" data-id=\"Editor.setBehavioursEnabled\" class=\"memberLink\"><a href=\"#Editor.setBehavioursEnabled\" class=\"\" title=\"Editor.setBehavioursEnabled (class method)\" data-id=\"Editor.setBehavioursEnabled\">setBehavioursEnabled</a>\n              </li>\n              <li id=\"dropdown_Editor.setDisplayIndentGuides\" data-id=\"Editor.setDisplayIndentGuides\" class=\"memberLink\"><a href=\"#Editor.setDisplayIndentGuides\" class=\"\" title=\"Editor.setDisplayIndentGuides (class method)\" data-id=\"Editor.setDisplayIndentGuides\">setDisplayIndentGuides</a>\n              </li>\n              <li id=\"dropdown_Editor.setDragDelay\" data-id=\"Editor.setDragDelay\" class=\"memberLink\"><a href=\"#Editor.setDragDelay\" class=\"\" title=\"Editor.setDragDelay (class method)\" data-id=\"Editor.setDragDelay\">setDragDelay</a>\n              </li>\n              <li id=\"dropdown_Editor.setFadeFoldWidgets\" data-id=\"Editor.setFadeFoldWidgets\" class=\"memberLink\"><a href=\"#Editor.setFadeFoldWidgets\" class=\"\" title=\"Editor.setFadeFoldWidgets (class method)\" data-id=\"Editor.setFadeFoldWidgets\">setFadeFoldWidgets</a>\n              </li>\n              <li id=\"dropdown_Editor.setFontSize\" data-id=\"Editor.setFontSize\" class=\"memberLink\"><a href=\"#Editor.setFontSize\" class=\"\" title=\"Editor.setFontSize (class method)\" data-id=\"Editor.setFontSize\">setFontSize</a>\n              </li>\n              <li id=\"dropdown_Editor.setHighlightActiveLine\" data-id=\"Editor.setHighlightActiveLine\" class=\"memberLink\"><a href=\"#Editor.setHighlightActiveLine\" class=\"\" title=\"Editor.setHighlightActiveLine (class method)\" data-id=\"Editor.setHighlightActiveLine\">setHighlightActiveLine</a>\n              </li>\n              <li id=\"dropdown_Editor.setHighlightGutterLine\" data-id=\"Editor.setHighlightGutterLine\" class=\"memberLink\"><a href=\"#Editor.setHighlightGutterLine\" class=\"\" title=\"Editor.setHighlightGutterLine (class method)\" data-id=\"Editor.setHighlightGutterLine\">setHighlightGutterLine</a>\n              </li>\n              <li id=\"dropdown_Editor.setHighlightSelectedWord\" data-id=\"Editor.setHighlightSelectedWord\" class=\"memberLink\"><a href=\"#Editor.setHighlightSelectedWord\" class=\"\" title=\"Editor.setHighlightSelectedWord (class method)\" data-id=\"Editor.setHighlightSelectedWord\">setHighlightSelectedWord</a>\n              </li>\n              <li id=\"dropdown_Editor.setKeyboardHandler\" data-id=\"Editor.setKeyboardHandler\" class=\"memberLink\"><a href=\"#Editor.setKeyboardHandler\" class=\"\" title=\"Editor.setKeyboardHandler (class method)\" data-id=\"Editor.setKeyboardHandler\">setKeyboardHandler</a>\n              </li>\n              <li id=\"dropdown_Editor.setOverwrite\" data-id=\"Editor.setOverwrite\" class=\"memberLink\"><a href=\"#Editor.setOverwrite\" class=\"\" title=\"Editor.setOverwrite (class method)\" data-id=\"Editor.setOverwrite\">setOverwrite</a>\n              </li>\n              <li id=\"dropdown_Editor.setPrintMarginColumn\" data-id=\"Editor.setPrintMarginColumn\" class=\"memberLink\"><a href=\"#Editor.setPrintMarginColumn\" class=\"\" title=\"Editor.setPrintMarginColumn (class method)\" data-id=\"Editor.setPrintMarginColumn\">setPrintMarginColumn</a>\n              </li>\n              <li id=\"dropdown_Editor.setReadOnly\" data-id=\"Editor.setReadOnly\" class=\"memberLink\"><a href=\"#Editor.setReadOnly\" class=\"\" title=\"Editor.setReadOnly (class method)\" data-id=\"Editor.setReadOnly\">setReadOnly</a>\n              </li>\n              <li id=\"dropdown_Editor.setScrollSpeed\" data-id=\"Editor.setScrollSpeed\" class=\"memberLink\"><a href=\"#Editor.setScrollSpeed\" class=\"\" title=\"Editor.setScrollSpeed (class method)\" data-id=\"Editor.setScrollSpeed\">setScrollSpeed</a>\n              </li>\n              <li id=\"dropdown_Editor.setSelectionStyle\" data-id=\"Editor.setSelectionStyle\" class=\"memberLink\"><a href=\"#Editor.setSelectionStyle\" class=\"\" title=\"Editor.setSelectionStyle (class method)\" data-id=\"Editor.setSelectionStyle\">setSelectionStyle</a>\n              </li>\n              <li id=\"dropdown_Editor.setSession\" data-id=\"Editor.setSession\" class=\"memberLink\"><a href=\"#Editor.setSession\" class=\"\" title=\"Editor.setSession (class method)\" data-id=\"Editor.setSession\">setSession</a>\n              </li>\n              <li id=\"dropdown_Editor.setShowFoldWidgets\" data-id=\"Editor.setShowFoldWidgets\" class=\"memberLink\"><a href=\"#Editor.setShowFoldWidgets\" class=\"\" title=\"Editor.setShowFoldWidgets (class method)\" data-id=\"Editor.setShowFoldWidgets\">setShowFoldWidgets</a>\n              </li>\n              <li id=\"dropdown_Editor.setShowInvisibles\" data-id=\"Editor.setShowInvisibles\" class=\"memberLink\"><a href=\"#Editor.setShowInvisibles\" class=\"\" title=\"Editor.setShowInvisibles (class method)\" data-id=\"Editor.setShowInvisibles\">setShowInvisibles</a>\n              </li>\n              <li id=\"dropdown_Editor.setShowPrintMargin\" data-id=\"Editor.setShowPrintMargin\" class=\"memberLink\"><a href=\"#Editor.setShowPrintMargin\" class=\"\" title=\"Editor.setShowPrintMargin (class method)\" data-id=\"Editor.setShowPrintMargin\">setShowPrintMargin</a>\n              </li>\n              <li id=\"dropdown_Editor.setStyle\" data-id=\"Editor.setStyle\" class=\"memberLink\"><a href=\"#Editor.setStyle\" class=\"\" title=\"Editor.setStyle (class method)\" data-id=\"Editor.setStyle\">setStyle</a>\n              </li>\n              <li id=\"dropdown_Editor.setTheme\" data-id=\"Editor.setTheme\" class=\"memberLink\"><a href=\"#Editor.setTheme\" class=\"\" title=\"Editor.setTheme (class method)\" data-id=\"Editor.setTheme\">setTheme</a>\n              </li>\n              <li id=\"dropdown_Editor.setValue\" data-id=\"Editor.setValue\" class=\"memberLink\"><a href=\"#Editor.setValue\" class=\"\" title=\"Editor.setValue (class method)\" data-id=\"Editor.setValue\">setValue</a>\n              </li>\n              <li id=\"dropdown_Editor.setWrapBehavioursEnabled\" data-id=\"Editor.setWrapBehavioursEnabled\" class=\"memberLink\"><a href=\"#Editor.setWrapBehavioursEnabled\" class=\"\" title=\"Editor.setWrapBehavioursEnabled (class method)\" data-id=\"Editor.setWrapBehavioursEnabled\">setWrapBehavioursEnabled</a>\n              </li>\n              <li id=\"dropdown_Editor.sortLines\" data-id=\"Editor.sortLines\" class=\"memberLink\"><a href=\"#Editor.sortLines\" class=\"\" title=\"Editor.sortLines (class method)\" data-id=\"Editor.sortLines\">sortLines</a>\n              </li>\n              <li id=\"dropdown_Editor.splitLine\" data-id=\"Editor.splitLine\" class=\"memberLink\"><a href=\"#Editor.splitLine\" class=\"\" title=\"Editor.splitLine (class method)\" data-id=\"Editor.splitLine\">splitLine</a>\n              </li>\n              <li id=\"dropdown_Editor.toggleCommentLines\" data-id=\"Editor.toggleCommentLines\" class=\"memberLink\"><a href=\"#Editor.toggleCommentLines\" class=\"\" title=\"Editor.toggleCommentLines (class method)\" data-id=\"Editor.toggleCommentLines\">toggleCommentLines</a>\n              </li>\n              <li id=\"dropdown_Editor.toggleOverwrite\" data-id=\"Editor.toggleOverwrite\" class=\"memberLink\"><a href=\"#Editor.toggleOverwrite\" class=\"\" title=\"Editor.toggleOverwrite (class method)\" data-id=\"Editor.toggleOverwrite\">toggleOverwrite</a>\n              </li>\n              <li id=\"dropdown_Editor.toLowerCase\" data-id=\"Editor.toLowerCase\" class=\"memberLink\"><a href=\"#Editor.toLowerCase\" class=\"\" title=\"Editor.toLowerCase (class method)\" data-id=\"Editor.toLowerCase\">toLowerCase</a>\n              </li>\n              <li id=\"dropdown_Editor.toUpperCase\" data-id=\"Editor.toUpperCase\" class=\"memberLink\"><a href=\"#Editor.toUpperCase\" class=\"\" title=\"Editor.toUpperCase (class method)\" data-id=\"Editor.toUpperCase\">toUpperCase</a>\n              </li>\n              <li id=\"dropdown_Editor.transposeLetters\" data-id=\"Editor.transposeLetters\" class=\"memberLink\"><a href=\"#Editor.transposeLetters\" class=\"\" title=\"Editor.transposeLetters (class method)\" data-id=\"Editor.transposeLetters\">transposeLetters</a>\n              </li>\n              <li id=\"dropdown_Editor.transposeSelections\" data-id=\"Editor.transposeSelections\" class=\"memberLink\"><a href=\"#nav=api&api=multi_select\" class=\"\" title=\"Editor.transposeSelections (class method)\" data-id=\"Editor.transposeSelections\">transposeSelections</a>\n              </li>\n              <li id=\"dropdown_Editor.undo\" data-id=\"Editor.undo\" class=\"memberLink\"><a href=\"#Editor.undo\" class=\"\" title=\"Editor.undo (class method)\" data-id=\"Editor.undo\">undo</a>\n              </li>\n              <li id=\"dropdown_Editor.unsetStyle\" data-id=\"Editor.unsetStyle\" class=\"memberLink\"><a href=\"#Editor.unsetStyle\" class=\"\" title=\"Editor.unsetStyle (class method)\" data-id=\"Editor.unsetStyle\">unsetStyle</a>\n              </li>\n              <li id=\"dropdown_Editor.updateSelectionMarkers\" data-id=\"Editor.updateSelectionMarkers\" class=\"memberLink\"><a href=\"#nav=api&api=multi_select\" class=\"\" title=\"Editor.updateSelectionMarkers (class method)\" data-id=\"Editor.updateSelectionMarkers\">updateSelectionMarkers</a>\n              </li>\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n        </ul>\n      </div>\n    </div>\n    <article id=\"Editor\" data-title=\"Editor (class)\" class=\"article\">\n      <div class=\"section description\">\n        <div class=\"memberContent\"><p>The main entry point into the Ace functionality. </p>\n<p>The <code>Editor</code> manages the <a href=\"edit_session.html\" class=\"link-short\" title=\"EditSession (class)\" data-id=\"EditSession\"><code>EditSession</code></a> (which manages <a href=\"document.html\" class=\"link-short\" title=\"Document (class)\" data-id=\"Document\"><code>Document</code></a>s), as well as the <a href=\"virtual_renderer.html\" class=\"link-short\" title=\"VirtualRenderer (class)\" data-id=\"VirtualRenderer\"><code>VirtualRenderer</code></a>, which draws everything to the screen. </p>\n<p>Event sessions dealing with the mouse and keyboard are bubbled up from <code>Document</code> to the <code>Editor</code>, which decides what to do with them.</p>\n\n        </div>\n      </div>\n    </article>\n    <h3 class=\"sectionHeader\">Constructors</h3>\n    <article id=\"Editor.new\" data-title=\"Editor.new (constructor)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.new\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span class=\"constructorIdentifier\">new </span><span id=\"Editor.new\" class=\"member-name methodClicker\">Editor</span>(<span class=\"sigArgList\"><a href=\"virtual_renderer.html\" class=\"argument methodClicker\" title=\"VirtualRenderer (class)\" data-id=\"VirtualRenderer\">VirtualRenderer</a> renderer, <a href=\"edit_session.html\" class=\"argument methodClicker\" title=\"EditSession (class)\" data-id=\"EditSession\">EditSession</a> session</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.new\" class=\"ellipsis_description\"><p>Creates a new <code>Editor</code> object.</p>\n\n            </div>\n            <div class=\"description\"><p>Creates a new <code>Editor</code> object.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">renderer</td><td class=\"argType\"><a href=\"virtual_renderer.html\" class=\"\" title=\"VirtualRenderer (class)\" data-id=\"VirtualRenderer\">VirtualRenderer</a></td><td class=\"argDescription \"><p>Required. Associated <code>VirtualRenderer</code> that draws everything</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">session</td><td class=\"argType\"><a href=\"edit_session.html\" class=\"\" title=\"EditSession (class)\" data-id=\"EditSession\">EditSession</a></td><td class=\"argDescription \"><p>Required. The <code>EditSession</code> to refer to</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <h3 class=\"sectionHeader\">Events</h3>\n    <article id=\"Editor.event.blur\" data-title=\"Editor.event.blur (event)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.event.blur\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span class=\"eventObjName\">Editor</span><span class=\"eventListenerStart\">.on(\"</span><span id=\"Editor.event.blur\" class=\"member-name eventMember methodClicker\">blur</span><span class=\"eventListenerClose\">\", </span><span class=\"eventFunctionOpen\">function(</span><span class=\"eventFunctionClose\">))</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.event.blur\" class=\"ellipsis_description\"><p>Emitted once the editor has been blurred.</p>\n\n            </div>\n            <div class=\"description\"><p>Emitted once the editor has been blurred.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.event.change\" data-title=\"Editor.event.change (event)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.event.change\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span class=\"eventObjName\">Editor</span><span class=\"eventListenerStart\">.on(\"</span><span id=\"Editor.event.change\" class=\"member-name eventMember methodClicker\">change</span><span class=\"eventListenerClose\">\", </span><span class=\"eventFunctionOpen\">function(</span><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> e<span class=\"eventFunctionClose\">))</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.event.change\" class=\"ellipsis_description\"><p>Emitted whenever the document is changed.</p>\n\n            </div>\n            <div class=\"description\"><p>Emitted whenever the document is changed.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">e</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. Contains a single property, <code>data</code>, which has the delta of changes</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.event.changeSelectionStyle\" data-title=\"Editor.event.changeSelectionStyle (event)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.event.changeSelectionStyle\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span class=\"eventObjName\">Editor</span><span class=\"eventListenerStart\">.on(\"</span><span id=\"Editor.event.changeSelectionStyle\" class=\"member-name eventMember methodClicker\">changeSelectionStyle</span><span class=\"eventListenerClose\">\", </span><span class=\"eventFunctionOpen\">function(</span><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> data<span class=\"eventFunctionClose\">))</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.event.changeSelectionStyle\" class=\"ellipsis_description\"><p>Emitted when the selection style changes, via <a href=\"#Editor.setSelectionStyle\" class=\"link-short\" title=\"Editor.setSelectionStyle (class method)\" data-id=\"Editor.setSelectionStyle\"><code>Editor.setSelectionStyle()</code></a>.</p>\n\n            </div>\n            <div class=\"description\"><p>Emitted when the selection style changes, via <a href=\"#Editor.setSelectionStyle\" class=\"link-short\" title=\"Editor.setSelectionStyle (class method)\" data-id=\"Editor.setSelectionStyle\"><code>Editor.setSelectionStyle()</code></a>.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">data</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. Contains one property, <code>data</code>, which indicates the new selection style</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.event.changeSession\" data-title=\"Editor.event.changeSession (event)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.event.changeSession\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span class=\"eventObjName\">Editor</span><span class=\"eventListenerStart\">.on(\"</span><span id=\"Editor.event.changeSession\" class=\"member-name eventMember methodClicker\">changeSession</span><span class=\"eventListenerClose\">\", </span><span class=\"eventFunctionOpen\">function(</span><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> e<span class=\"eventFunctionClose\">))</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.event.changeSession\" class=\"ellipsis_description\"><p>Emitted whenever the <a href=\"edit_session.html\" class=\"link-short\" title=\"EditSession (class)\" data-id=\"EditSession\"><code>EditSession</code></a> changes.</p>\n\n            </div>\n            <div class=\"description\"><p>Emitted whenever the <a href=\"edit_session.html\" class=\"link-short\" title=\"EditSession (class)\" data-id=\"EditSession\"><code>EditSession</code></a> changes.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">e</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. An object with two properties, <code>oldSession</code> and <code>session</code>, that represent the old and new <a href=\"edit_session.html\" class=\"link-short\" title=\"EditSession (class)\" data-id=\"EditSession\"><code>EditSession</code></a>s.</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.event.copy\" data-title=\"Editor.event.copy (event)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.event.copy\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span class=\"eventObjName\">Editor</span><span class=\"eventListenerStart\">.on(\"</span><span id=\"Editor.event.copy\" class=\"member-name eventMember methodClicker\">copy</span><span class=\"eventListenerClose\">\", </span><span class=\"eventFunctionOpen\">function(</span><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"argument methodClicker\" title=\"String\" data-id=\"String\">String</a> text<span class=\"eventFunctionClose\">))</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.event.copy\" class=\"ellipsis_description\"><p>Emitted when text is copied.</p>\n\n            </div>\n            <div class=\"description\"><p>Emitted when text is copied.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">text</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"\" title=\"String\" data-id=\"String\">String</a></td><td class=\"argDescription \"><p>Required. The copied text</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.event.focus\" data-title=\"Editor.event.focus (event)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.event.focus\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span class=\"eventObjName\">Editor</span><span class=\"eventListenerStart\">.on(\"</span><span id=\"Editor.event.focus\" class=\"member-name eventMember methodClicker\">focus</span><span class=\"eventListenerClose\">\", </span><span class=\"eventFunctionOpen\">function(</span><span class=\"eventFunctionClose\">))</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.event.focus\" class=\"ellipsis_description\"><p>Emitted once the editor comes into focus.</p>\n\n            </div>\n            <div class=\"description\"><p>Emitted once the editor comes into focus.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.event.paste\" data-title=\"Editor.event.paste (event)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.event.paste\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span class=\"eventObjName\">Editor</span><span class=\"eventListenerStart\">.on(\"</span><span id=\"Editor.event.paste\" class=\"member-name eventMember methodClicker\">paste</span><span class=\"eventListenerClose\">\", </span><span class=\"eventFunctionOpen\">function(</span><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> e<span class=\"eventFunctionClose\">))</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.event.paste\" class=\"ellipsis_description\"><p>Emitted when text is pasted.</p>\n\n            </div>\n            <div class=\"description\"><p>Emitted when text is pasted.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">e</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. An object which contains one property, <code>text</code>, that represents the text to be pasted. Editing this property will alter the text that is pasted.</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <h3 class=\"sectionHeader\">Methods</h3>\n    <article id=\"Editor.addSelectionMarker\" data-title=\"Editor.addSelectionMarker (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.addSelectionMarker\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.addSelectionMarker\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">addSelectionMarker</span></span>(<span class=\"sigArgList\"><a href=\"range.html\" class=\"argument methodClicker\" title=\"Range (class)\" data-id=\"Range\">Range</a> orientedRange</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"range.html\" class=\"returnType \" title=\"Range (class)\" data-id=\"Range\">Range</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.addSelectionMarker\" class=\"ellipsis_description\"><p>Adds the selection and cursor.</p>\n\n            </div>\n            <div class=\"description\"><p>Adds the selection and cursor.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">orientedRange</td><td class=\"argType\"><a href=\"range.html\" class=\"\" title=\"Range (class)\" data-id=\"Range\">Range</a></td><td class=\"argDescription \"><p>Required. A range containing a cursor</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.alignCursors\" data-title=\"Editor.alignCursors (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.alignCursors\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.alignCursors\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">alignCursors</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.alignCursors\" class=\"ellipsis_description\"><p>Aligns the cursors or selected text.</p>\n\n            </div>\n            <div class=\"description\"><p>Aligns the cursors or selected text.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.blockOutdent\" data-title=\"Editor.blockOutdent (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.blockOutdent\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.blockOutdent\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">blockOutdent</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.blockOutdent\" class=\"ellipsis_description\"><p>Outdents the current line.</p>\n\n            </div>\n            <div class=\"description\"><p>Outdents the current line.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.blur\" data-title=\"Editor.blur (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.blur\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.blur\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">blur</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.blur\" class=\"ellipsis_description\"><p>Blurs the current <code>textInput</code>.</p>\n\n            </div>\n            <div class=\"description\"><p>Blurs the current <code>textInput</code>.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.centerSelection\" data-title=\"Editor.centerSelection (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.centerSelection\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.centerSelection\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">centerSelection</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.centerSelection\" class=\"ellipsis_description\"><p>Attempts to center the current selection on the screen.</p>\n\n            </div>\n            <div class=\"description\"><p>Attempts to center the current selection on the screen.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.clearSelection\" data-title=\"Editor.clearSelection (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.clearSelection\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.clearSelection\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">clearSelection</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.clearSelection\" class=\"ellipsis_description\"><p>Empties the selection (by de-selecting it). This function also emits the <code>&#39;changeSelection&#39;</code> event.</p>\n\n            </div>\n            <div class=\"description\"><p>Empties the selection (by de-selecting it). This function also emits the <code>&#39;changeSelection&#39;</code> event.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.copyLinesDown\" data-title=\"Editor.copyLinesDown (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.copyLinesDown\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.copyLinesDown\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">copyLinesDown</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"returnType \" title=\"Number\" data-id=\"Number\">Number</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.copyLinesDown\" class=\"ellipsis_description\"><p>Copies all the selected lines down one row.</p>\n\n            </div>\n            <div class=\"description\"><p>Copies all the selected lines down one row.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.copyLinesUp\" data-title=\"Editor.copyLinesUp (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.copyLinesUp\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.copyLinesUp\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">copyLinesUp</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"returnType \" title=\"Number\" data-id=\"Number\">Number</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.copyLinesUp\" class=\"ellipsis_description\"><p>Copies all the selected lines up one row.</p>\n\n            </div>\n            <div class=\"description\"><p>Copies all the selected lines up one row.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.destroy\" data-title=\"Editor.destroy (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.destroy\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.destroy\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">destroy</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.destroy\" class=\"ellipsis_description\"><p>Cleans up the entire editor.</p>\n\n            </div>\n            <div class=\"description\"><p>Cleans up the entire editor.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.duplicateSelection\" data-title=\"Editor.duplicateSelection (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.duplicateSelection\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.duplicateSelection\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">duplicateSelection</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.duplicateSelection\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.execCommand\" data-title=\"Editor.execCommand (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.execCommand\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.execCommand\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">execCommand</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.execCommand\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.exitMultiSelectMode\" data-title=\"Editor.exitMultiSelectMode (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.exitMultiSelectMode\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.exitMultiSelectMode\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">exitMultiSelectMode</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.exitMultiSelectMode\" class=\"ellipsis_description\"><p>Removes all the selections except the last added one.</p>\n\n            </div>\n            <div class=\"description\"><p>Removes all the selections except the last added one.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.find\" data-title=\"Editor.find (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.find\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.find\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">find</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"argument methodClicker\" title=\"String\" data-id=\"String\">String</a> needle, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> options, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"argument methodClicker\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a> animate</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.find\" class=\"ellipsis_description\"><p>Attempts to find <code>needle</code> within the document. For more information on <code>options</code>, see <a href=\"search.html\" class=\"link-short\" title=\"Search (class)\" data-id=\"Search\"><code>Search</code></a>.</p>\n\n            </div>\n            <div class=\"description\"><p>Attempts to find <code>needle</code> within the document. For more information on <code>options</code>, see <a href=\"search.html\" class=\"link-short\" title=\"Search (class)\" data-id=\"Search\"><code>Search</code></a>.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">needle</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"\" title=\"String\" data-id=\"String\">String</a></td><td class=\"argDescription \"><p>Required. The text to search for (optional)</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">options</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. An object defining various search properties</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">animate</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></td><td class=\"argDescription \"><p>Required. If <code>true</code> animate scrolling</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.findAll\" data-title=\"Editor.findAll (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.findAll\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.findAll\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">findAll</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"argument methodClicker\" title=\"String\" data-id=\"String\">String</a> The, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> The, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"argument methodClicker\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a> keeps</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"returnType \" title=\"Number\" data-id=\"Number\">Number</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.findAll\" class=\"ellipsis_description\"><p>Finds and selects all the occurrences of <code>needle</code>.</p>\n\n            </div>\n            <div class=\"description\"><p>Finds and selects all the occurrences of <code>needle</code>.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">The</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"\" title=\"String\" data-id=\"String\">String</a></td><td class=\"argDescription \"><p>Required. Text to find</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">The</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. Search options</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">keeps</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></td><td class=\"argDescription \"><p>Required. </p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.findNext\" data-title=\"Editor.findNext (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.findNext\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.findNext\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">findNext</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> options, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"argument methodClicker\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a> animate</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.findNext\" class=\"ellipsis_description\"><p>Performs another search for <code>needle</code> in the document. For more information on <code>options</code>, see <a href=\"search.html\" class=\"link-short\" title=\"Search (class)\" data-id=\"Search\"><code>Search</code></a>.</p>\n\n            </div>\n            <div class=\"description\"><p>Performs another search for <code>needle</code> in the document. For more information on <code>options</code>, see <a href=\"search.html\" class=\"link-short\" title=\"Search (class)\" data-id=\"Search\"><code>Search</code></a>.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">options</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. Search options</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">animate</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></td><td class=\"argDescription \"><p>Required. If <code>true</code> animate scrolling</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.findPrevious\" data-title=\"Editor.findPrevious (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.findPrevious\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.findPrevious\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">findPrevious</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> options, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"argument methodClicker\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a> animate</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.findPrevious\" class=\"ellipsis_description\"><p>Performs a search for <code>needle</code> backwards. For more information on <code>options</code>, see <a href=\"search.html\" class=\"link-short\" title=\"Search (class)\" data-id=\"Search\"><code>Search</code></a>.</p>\n\n            </div>\n            <div class=\"description\"><p>Performs a search for <code>needle</code> backwards. For more information on <code>options</code>, see <a href=\"search.html\" class=\"link-short\" title=\"Search (class)\" data-id=\"Search\"><code>Search</code></a>.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">options</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. Search options</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">animate</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></td><td class=\"argDescription \"><p>Required. If <code>true</code> animate scrolling</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.focus\" data-title=\"Editor.focus (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.focus\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.focus\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">focus</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.focus\" class=\"ellipsis_description\"><p>Brings the current <code>textInput</code> into focus.</p>\n\n            </div>\n            <div class=\"description\"><p>Brings the current <code>textInput</code> into focus.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.forEachSelection\" data-title=\"Editor.forEachSelection (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.forEachSelection\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.forEachSelection\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">forEachSelection</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"argument methodClicker\" title=\"String\" data-id=\"String\">String</a> cmd, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"argument methodClicker\" title=\"String\" data-id=\"String\">String</a> args</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.forEachSelection\" class=\"ellipsis_description\"><p>Executes a command for each selection range.</p>\n\n            </div>\n            <div class=\"description\"><p>Executes a command for each selection range.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">cmd</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"\" title=\"String\" data-id=\"String\">String</a></td><td class=\"argDescription \"><p>Required. The command to execute</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">args</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"\" title=\"String\" data-id=\"String\">String</a></td><td class=\"argDescription \"><p>Required. Any arguments for the command</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.getAnimatedScroll\" data-title=\"Editor.getAnimatedScroll (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.getAnimatedScroll\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.getAnimatedScroll\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">getAnimatedScroll</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.getAnimatedScroll\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.getBehavioursEnabled\" data-title=\"Editor.getBehavioursEnabled (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.getBehavioursEnabled\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.getBehavioursEnabled\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">getBehavioursEnabled</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"returnType \" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.getBehavioursEnabled\" class=\"ellipsis_description\"><p>Returns <code>true</code> if the behaviors are currently enabled. &quot;Behaviors&quot; in this case is the auto-pairing of special characters, like quotation marks, parenthesis, or brackets.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns <code>true</code> if the behaviors are currently enabled. &quot;Behaviors&quot; in this case is the auto-pairing of special characters, like quotation marks, parenthesis, or brackets.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.getCopyText\" data-title=\"Editor.getCopyText (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.getCopyText\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.getCopyText\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">getCopyText</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"returnType \" title=\"String\" data-id=\"String\">String</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.getCopyText\" class=\"ellipsis_description\"><p>Returns the string of text currently highlighted.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the string of text currently highlighted.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.getCursorPosition\" data-title=\"Editor.getCursorPosition (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.getCursorPosition\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.getCursorPosition\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">getCursorPosition</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"returnType \" title=\"Object\" data-id=\"Object\">Object</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.getCursorPosition\" class=\"ellipsis_description\"><p>Gets the current position of the cursor.</p>\n\n            </div>\n            <div class=\"description\"><p>Gets the current position of the cursor.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.getCursorPositionScreen\" data-title=\"Editor.getCursorPositionScreen (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.getCursorPositionScreen\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.getCursorPositionScreen\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">getCursorPositionScreen</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"returnType \" title=\"Number\" data-id=\"Number\">Number</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.getCursorPositionScreen\" class=\"ellipsis_description\"><p>Returns the screen position of the cursor.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the screen position of the cursor.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.getDisplayIndentGuides\" data-title=\"Editor.getDisplayIndentGuides (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.getDisplayIndentGuides\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.getDisplayIndentGuides\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">getDisplayIndentGuides</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.getDisplayIndentGuides\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.getDragDelay\" data-title=\"Editor.getDragDelay (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.getDragDelay\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.getDragDelay\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">getDragDelay</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"returnType \" title=\"Number\" data-id=\"Number\">Number</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.getDragDelay\" class=\"ellipsis_description\"><p>Returns the current mouse drag delay.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the current mouse drag delay.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.getFadeFoldWidgets\" data-title=\"Editor.getFadeFoldWidgets (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.getFadeFoldWidgets\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.getFadeFoldWidgets\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">getFadeFoldWidgets</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.getFadeFoldWidgets\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.getFirstVisibleRow\" data-title=\"Editor.getFirstVisibleRow (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.getFirstVisibleRow\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.getFirstVisibleRow\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">getFirstVisibleRow</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"returnType \" title=\"Number\" data-id=\"Number\">Number</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.getFirstVisibleRow\" class=\"ellipsis_description\"><p>Returns the index of the first visible row.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the index of the first visible row.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.getHighlightActiveLine\" data-title=\"Editor.getHighlightActiveLine (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.getHighlightActiveLine\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.getHighlightActiveLine\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">getHighlightActiveLine</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"returnType \" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.getHighlightActiveLine\" class=\"ellipsis_description\"><p>Returns <code>true</code> if current lines are always highlighted.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns <code>true</code> if current lines are always highlighted.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.getHighlightGutterLine\" data-title=\"Editor.getHighlightGutterLine (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.getHighlightGutterLine\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.getHighlightGutterLine\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">getHighlightGutterLine</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.getHighlightGutterLine\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.getHighlightSelectedWord\" data-title=\"Editor.getHighlightSelectedWord (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.getHighlightSelectedWord\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.getHighlightSelectedWord\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">getHighlightSelectedWord</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"returnType \" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.getHighlightSelectedWord\" class=\"ellipsis_description\"><p>Returns <code>true</code> if currently highlighted words are to be highlighted.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns <code>true</code> if currently highlighted words are to be highlighted.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.getKeyboardHandler\" data-title=\"Editor.getKeyboardHandler (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.getKeyboardHandler\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.getKeyboardHandler\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">getKeyboardHandler</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"returnType \" title=\"String\" data-id=\"String\">String</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.getKeyboardHandler\" class=\"ellipsis_description\"><p>Returns the keyboard handler, such as &quot;vim&quot; or &quot;windows&quot;.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the keyboard handler, such as &quot;vim&quot; or &quot;windows&quot;.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.getLastSearchOptions\" data-title=\"Editor.getLastSearchOptions (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.getLastSearchOptions\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.getLastSearchOptions\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">getLastSearchOptions</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"returnType \" title=\"Object\" data-id=\"Object\">Object</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.getLastSearchOptions\" class=\"ellipsis_description\"><p>Returns an object containing all the search options. For more information on <code>options</code>, see <a href=\"search.html\" class=\"link-short\" title=\"Search (class)\" data-id=\"Search\"><code>Search</code></a>.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns an object containing all the search options. For more information on <code>options</code>, see <a href=\"search.html\" class=\"link-short\" title=\"Search (class)\" data-id=\"Search\"><code>Search</code></a>.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.getLastVisibleRow\" data-title=\"Editor.getLastVisibleRow (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.getLastVisibleRow\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.getLastVisibleRow\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">getLastVisibleRow</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"returnType \" title=\"Number\" data-id=\"Number\">Number</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.getLastVisibleRow\" class=\"ellipsis_description\"><p>Returns the index of the last visible row.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the index of the last visible row.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.getNumberAt\" data-title=\"Editor.getNumberAt (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.getNumberAt\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.getNumberAt\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">getNumberAt</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> row, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> column</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"returnType \" title=\"Number\" data-id=\"Number\">Number</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.getNumberAt\" class=\"ellipsis_description\"><p>Works like <a href=\"#nav=api&api=edit_session\" class=\"link-short\" title=\"EditSession.getTokenAt (class method)\" data-id=\"EditSession.getTokenAt\"><code>EditSession.getTokenAt()</code></a>, except it returns a number.</p>\n\n            </div>\n            <div class=\"description\"><p>Works like <a href=\"#nav=api&api=edit_session\" class=\"link-short\" title=\"EditSession.getTokenAt (class method)\" data-id=\"EditSession.getTokenAt\"><code>EditSession.getTokenAt()</code></a>, except it returns a number.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">row</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. </p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">column</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. </p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.getOverwrite\" data-title=\"Editor.getOverwrite (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.getOverwrite\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.getOverwrite\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">getOverwrite</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"returnType \" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.getOverwrite\" class=\"ellipsis_description\"><p>Returns <code>true</code> if overwrites are enabled; <code>false</code> otherwise.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns <code>true</code> if overwrites are enabled; <code>false</code> otherwise.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.getPrintMarginColumn\" data-title=\"Editor.getPrintMarginColumn (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.getPrintMarginColumn\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.getPrintMarginColumn\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">getPrintMarginColumn</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"returnType \" title=\"Number\" data-id=\"Number\">Number</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.getPrintMarginColumn\" class=\"ellipsis_description\"><p>Returns the column number of where the print margin is.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the column number of where the print margin is.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.getReadOnly\" data-title=\"Editor.getReadOnly (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.getReadOnly\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.getReadOnly\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">getReadOnly</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"returnType \" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.getReadOnly\" class=\"ellipsis_description\"><p>Returns <code>true</code> if the editor is set to read-only mode.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns <code>true</code> if the editor is set to read-only mode.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.getScrollSpeed\" data-title=\"Editor.getScrollSpeed (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.getScrollSpeed\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.getScrollSpeed\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">getScrollSpeed</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"returnType \" title=\"Number\" data-id=\"Number\">Number</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.getScrollSpeed\" class=\"ellipsis_description\"><p>Returns the value indicating how fast the mouse scroll speed is (in milliseconds).</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the value indicating how fast the mouse scroll speed is (in milliseconds).</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.getSelection\" data-title=\"Editor.getSelection (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.getSelection\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.getSelection\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">getSelection</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"returnType \" title=\"String\" data-id=\"String\">Selection</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.getSelection\" class=\"ellipsis_description\"><p>Returns selection object.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns selection object.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.getSelectionRange\" data-title=\"Editor.getSelectionRange (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.getSelectionRange\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.getSelectionRange\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">getSelectionRange</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"range.html\" class=\"returnType \" title=\"Range (class)\" data-id=\"Range\">Range</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.getSelectionRange\" class=\"ellipsis_description\"><p>Returns the <a href=\"range.html\" class=\"link-short\" title=\"Range (class)\" data-id=\"Range\"><code>Range</code></a> for the selected text.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the <a href=\"range.html\" class=\"link-short\" title=\"Range (class)\" data-id=\"Range\"><code>Range</code></a> for the selected text.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.getSelectionStyle\" data-title=\"Editor.getSelectionStyle (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.getSelectionStyle\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.getSelectionStyle\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">getSelectionStyle</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"returnType \" title=\"String\" data-id=\"String\">String</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.getSelectionStyle\" class=\"ellipsis_description\"><p>Returns the current selection style.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the current selection style.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.getSession\" data-title=\"Editor.getSession (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.getSession\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.getSession\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">getSession</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"edit_session.html\" class=\"returnType \" title=\"EditSession (class)\" data-id=\"EditSession\">EditSession</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.getSession\" class=\"ellipsis_description\"><p>Returns the current session being used.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the current session being used.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.getShowFoldWidgets\" data-title=\"Editor.getShowFoldWidgets (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.getShowFoldWidgets\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.getShowFoldWidgets\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">getShowFoldWidgets</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"returnType \" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.getShowFoldWidgets\" class=\"ellipsis_description\"><p>Returns <code>true</code> if the fold widgets are shown.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns <code>true</code> if the fold widgets are shown.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.getShowInvisibles\" data-title=\"Editor.getShowInvisibles (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.getShowInvisibles\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.getShowInvisibles\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">getShowInvisibles</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"returnType \" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.getShowInvisibles\" class=\"ellipsis_description\"><p>Returns <code>true</code> if invisible characters are being shown.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns <code>true</code> if invisible characters are being shown.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.getShowPrintMargin\" data-title=\"Editor.getShowPrintMargin (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.getShowPrintMargin\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.getShowPrintMargin\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">getShowPrintMargin</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"returnType \" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.getShowPrintMargin\" class=\"ellipsis_description\"><p>Returns <code>true</code> if the print margin is being shown.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns <code>true</code> if the print margin is being shown.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.getTheme\" data-title=\"Editor.getTheme (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.getTheme\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.getTheme\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">getTheme</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"returnType \" title=\"String\" data-id=\"String\">String</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.getTheme\" class=\"ellipsis_description\"><p>Returns the path of the current theme.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the path of the current theme.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.getValue\" data-title=\"Editor.getValue (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.getValue\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.getValue\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">getValue</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"returnType \" title=\"String\" data-id=\"String\">String</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.getValue\" class=\"ellipsis_description\"><p>Returns the current session&#39;s content.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the current session&#39;s content.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.getWrapBehavioursEnabled\" data-title=\"Editor.getWrapBehavioursEnabled (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.getWrapBehavioursEnabled\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.getWrapBehavioursEnabled\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">getWrapBehavioursEnabled</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.getWrapBehavioursEnabled\" class=\"ellipsis_description\"><p>Returns <code>true</code> if the wrapping behaviors are currently enabled.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns <code>true</code> if the wrapping behaviors are currently enabled.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.gotoLine\" data-title=\"Editor.gotoLine (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.gotoLine\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.gotoLine\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">gotoLine</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> lineNumber, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> column, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"argument methodClicker\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a> animate</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.gotoLine\" class=\"ellipsis_description\"><p>Moves the cursor to the specified line number, and also into the indicated column.</p>\n\n            </div>\n            <div class=\"description\"><p>Moves the cursor to the specified line number, and also into the indicated column.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">lineNumber</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The line number to go to</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">column</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. A column number to go to</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">animate</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></td><td class=\"argDescription \"><p>Required. If <code>true</code> animates scrolling</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.gotoPageDown\" data-title=\"Editor.gotoPageDown (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.gotoPageDown\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.gotoPageDown\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">gotoPageDown</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.gotoPageDown\" class=\"ellipsis_description\"><p>Shifts the document to wherever &quot;page down&quot; is, as well as moving the cursor position.</p>\n\n            </div>\n            <div class=\"description\"><p>Shifts the document to wherever &quot;page down&quot; is, as well as moving the cursor position.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.gotoPageUp\" data-title=\"Editor.gotoPageUp (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.gotoPageUp\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.gotoPageUp\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">gotoPageUp</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.gotoPageUp\" class=\"ellipsis_description\"><p>Shifts the document to wherever &quot;page up&quot; is, as well as moving the cursor position.</p>\n\n            </div>\n            <div class=\"description\"><p>Shifts the document to wherever &quot;page up&quot; is, as well as moving the cursor position.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.indent\" data-title=\"Editor.indent (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.indent\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.indent\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">indent</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.indent\" class=\"ellipsis_description\"><p>Indents the current line.</p>\n\n            </div>\n            <div class=\"description\"><p>Indents the current line.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.insert\" data-title=\"Editor.insert (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.insert\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.insert\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">insert</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"argument methodClicker\" title=\"String\" data-id=\"String\">String</a> text</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.insert\" class=\"ellipsis_description\"><p>Inserts <code>text</code> into wherever the cursor is pointing.</p>\n\n            </div>\n            <div class=\"description\"><p>Inserts <code>text</code> into wherever the cursor is pointing.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">text</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"\" title=\"String\" data-id=\"String\">String</a></td><td class=\"argDescription \"><p>Required. The new text to add</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.isFocused\" data-title=\"Editor.isFocused (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.isFocused\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.isFocused\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">isFocused</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"returnType \" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.isFocused\" class=\"ellipsis_description\"><p>Returns <code>true</code> if the current <code>textInput</code> is in focus.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns <code>true</code> if the current <code>textInput</code> is in focus.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.isRowFullyVisible\" data-title=\"Editor.isRowFullyVisible (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.isRowFullyVisible\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.isRowFullyVisible\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">isRowFullyVisible</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> row</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"returnType \" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.isRowFullyVisible\" class=\"ellipsis_description\"><p>Indicates if the entire row is currently visible on the screen.</p>\n\n            </div>\n            <div class=\"description\"><p>Indicates if the entire row is currently visible on the screen.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">row</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The row to check</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.isRowVisible\" data-title=\"Editor.isRowVisible (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.isRowVisible\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.isRowVisible\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">isRowVisible</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> row</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"returnType \" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.isRowVisible\" class=\"ellipsis_description\"><p>Indicates if the row is currently visible on the screen.</p>\n\n            </div>\n            <div class=\"description\"><p>Indicates if the row is currently visible on the screen.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">row</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The row to check</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.jumpToMatching\" data-title=\"Editor.jumpToMatching (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.jumpToMatching\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.jumpToMatching\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">jumpToMatching</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> select</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.jumpToMatching\" class=\"ellipsis_description\"><p>Moves the cursor&#39;s row and column to the next matching bracket.</p>\n\n            </div>\n            <div class=\"description\"><p>Moves the cursor&#39;s row and column to the next matching bracket.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">select</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. </p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.modifyNumber\" data-title=\"Editor.modifyNumber (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.modifyNumber\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.modifyNumber\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">modifyNumber</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> amount</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.modifyNumber\" class=\"ellipsis_description\"><p>If the character before the cursor is a number, this functions changes its value by <code>amount</code>.</p>\n\n            </div>\n            <div class=\"description\"><p>If the character before the cursor is a number, this functions changes its value by <code>amount</code>.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">amount</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The value to change the numeral by (can be negative to decrease value)</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.moveCursorTo\" data-title=\"Editor.moveCursorTo (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.moveCursorTo\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.moveCursorTo\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">moveCursorTo</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> row, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> column</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.moveCursorTo\" class=\"ellipsis_description\"><p>Moves the cursor to the specified row and column. Note that this does not de-select the current selection.</p>\n\n            </div>\n            <div class=\"description\"><p>Moves the cursor to the specified row and column. Note that this does not de-select the current selection.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">row</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The new row number</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">column</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The new column number</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.moveCursorToPosition\" data-title=\"Editor.moveCursorToPosition (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.moveCursorToPosition\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.moveCursorToPosition\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">moveCursorToPosition</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> pos</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.moveCursorToPosition\" class=\"ellipsis_description\"><p>Moves the cursor to the position indicated by <code>pos.row</code> and <code>pos.column</code>.</p>\n\n            </div>\n            <div class=\"description\"><p>Moves the cursor to the position indicated by <code>pos.row</code> and <code>pos.column</code>.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">pos</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. An object with two properties, row and column</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.moveLinesDown\" data-title=\"Editor.moveLinesDown (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.moveLinesDown\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.moveLinesDown\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">moveLinesDown</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"returnType \" title=\"Number\" data-id=\"Number\">Number</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.moveLinesDown\" class=\"ellipsis_description\"><p>Shifts all the selected lines down one row.</p>\n\n            </div>\n            <div class=\"description\"><p>Shifts all the selected lines down one row.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.moveLinesUp\" data-title=\"Editor.moveLinesUp (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.moveLinesUp\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.moveLinesUp\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">moveLinesUp</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"returnType \" title=\"Number\" data-id=\"Number\">Number</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.moveLinesUp\" class=\"ellipsis_description\"><p>Shifts all the selected lines up one row.</p>\n\n            </div>\n            <div class=\"description\"><p>Shifts all the selected lines up one row.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.moveText\" data-title=\"Editor.moveText (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.moveText\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.moveText\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">moveText</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.moveText\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.navigateDown\" data-title=\"Editor.navigateDown (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.navigateDown\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.navigateDown\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">navigateDown</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> times</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.navigateDown\" class=\"ellipsis_description\"><p>Moves the cursor down in the document the specified number of times. Note that this does de-select the current selection.</p>\n\n            </div>\n            <div class=\"description\"><p>Moves the cursor down in the document the specified number of times. Note that this does de-select the current selection.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">times</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The number of times to change navigation</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.navigateFileEnd\" data-title=\"Editor.navigateFileEnd (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.navigateFileEnd\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.navigateFileEnd\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">navigateFileEnd</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.navigateFileEnd\" class=\"ellipsis_description\"><p>Moves the cursor to the end of the current file. Note that this does de-select the current selection.</p>\n\n            </div>\n            <div class=\"description\"><p>Moves the cursor to the end of the current file. Note that this does de-select the current selection.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.navigateFileStart\" data-title=\"Editor.navigateFileStart (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.navigateFileStart\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.navigateFileStart\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">navigateFileStart</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.navigateFileStart\" class=\"ellipsis_description\"><p>Moves the cursor to the start of the current file. Note that this does de-select the current selection.</p>\n\n            </div>\n            <div class=\"description\"><p>Moves the cursor to the start of the current file. Note that this does de-select the current selection.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.navigateLeft\" data-title=\"Editor.navigateLeft (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.navigateLeft\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.navigateLeft\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">navigateLeft</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> times</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.navigateLeft\" class=\"ellipsis_description\"><p>Moves the cursor left in the document the specified number of times. Note that this does de-select the current selection.</p>\n\n            </div>\n            <div class=\"description\"><p>Moves the cursor left in the document the specified number of times. Note that this does de-select the current selection.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">times</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The number of times to change navigation</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.navigateLineEnd\" data-title=\"Editor.navigateLineEnd (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.navigateLineEnd\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.navigateLineEnd\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">navigateLineEnd</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.navigateLineEnd\" class=\"ellipsis_description\"><p>Moves the cursor to the end of the current line. Note that this does de-select the current selection.</p>\n\n            </div>\n            <div class=\"description\"><p>Moves the cursor to the end of the current line. Note that this does de-select the current selection.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.navigateLineStart\" data-title=\"Editor.navigateLineStart (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.navigateLineStart\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.navigateLineStart\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">navigateLineStart</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.navigateLineStart\" class=\"ellipsis_description\"><p>Moves the cursor to the start of the current line. Note that this does de-select the current selection.</p>\n\n            </div>\n            <div class=\"description\"><p>Moves the cursor to the start of the current line. Note that this does de-select the current selection.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.navigateRight\" data-title=\"Editor.navigateRight (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.navigateRight\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.navigateRight\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">navigateRight</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> times</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.navigateRight\" class=\"ellipsis_description\"><p>Moves the cursor right in the document the specified number of times. Note that this does de-select the current selection.</p>\n\n            </div>\n            <div class=\"description\"><p>Moves the cursor right in the document the specified number of times. Note that this does de-select the current selection.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">times</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The number of times to change navigation</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.navigateTo\" data-title=\"Editor.navigateTo (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.navigateTo\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.navigateTo\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">navigateTo</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> row, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> column</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.navigateTo\" class=\"ellipsis_description\"><p>Moves the cursor to the specified row and column. Note that this does de-select the current selection.</p>\n\n            </div>\n            <div class=\"description\"><p>Moves the cursor to the specified row and column. Note that this does de-select the current selection.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">row</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The new row number</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">column</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The new column number</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.navigateUp\" data-title=\"Editor.navigateUp (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.navigateUp\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.navigateUp\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">navigateUp</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> times</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.navigateUp\" class=\"ellipsis_description\"><p>Moves the cursor up in the document the specified number of times. Note that this does de-select the current selection.</p>\n\n            </div>\n            <div class=\"description\"><p>Moves the cursor up in the document the specified number of times. Note that this does de-select the current selection.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">times</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The number of times to change navigation</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.navigateWordLeft\" data-title=\"Editor.navigateWordLeft (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.navigateWordLeft\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.navigateWordLeft\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">navigateWordLeft</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.navigateWordLeft\" class=\"ellipsis_description\"><p>Moves the cursor to the word immediately to the left of the current position. Note that this does de-select the current selection.</p>\n\n            </div>\n            <div class=\"description\"><p>Moves the cursor to the word immediately to the left of the current position. Note that this does de-select the current selection.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.navigateWordRight\" data-title=\"Editor.navigateWordRight (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.navigateWordRight\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.navigateWordRight\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">navigateWordRight</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.navigateWordRight\" class=\"ellipsis_description\"><p>Moves the cursor to the word immediately to the right of the current position. Note that this does de-select the current selection.</p>\n\n            </div>\n            <div class=\"description\"><p>Moves the cursor to the word immediately to the right of the current position. Note that this does de-select the current selection.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.onBlur\" data-title=\"Editor.onBlur (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.onBlur\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.onBlur\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">onBlur</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.onBlur\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.onChangeAnnotation\" data-title=\"Editor.onChangeAnnotation (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.onChangeAnnotation\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.onChangeAnnotation\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">onChangeAnnotation</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.onChangeAnnotation\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.onChangeBackMarker\" data-title=\"Editor.onChangeBackMarker (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.onChangeBackMarker\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.onChangeBackMarker\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">onChangeBackMarker</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.onChangeBackMarker\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.onChangeBreakpoint\" data-title=\"Editor.onChangeBreakpoint (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.onChangeBreakpoint\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.onChangeBreakpoint\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">onChangeBreakpoint</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.onChangeBreakpoint\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.onChangeFold\" data-title=\"Editor.onChangeFold (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.onChangeFold\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.onChangeFold\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">onChangeFold</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.onChangeFold\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.onChangeFrontMarker\" data-title=\"Editor.onChangeFrontMarker (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.onChangeFrontMarker\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.onChangeFrontMarker\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">onChangeFrontMarker</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.onChangeFrontMarker\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.onChangeMode\" data-title=\"Editor.onChangeMode (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.onChangeMode\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.onChangeMode\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">onChangeMode</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.onChangeMode\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.onChangeWrapLimit\" data-title=\"Editor.onChangeWrapLimit (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.onChangeWrapLimit\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.onChangeWrapLimit\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">onChangeWrapLimit</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.onChangeWrapLimit\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.onChangeWrapMode\" data-title=\"Editor.onChangeWrapMode (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.onChangeWrapMode\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.onChangeWrapMode\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">onChangeWrapMode</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.onChangeWrapMode\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.onCommandKey\" data-title=\"Editor.onCommandKey (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.onCommandKey\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.onCommandKey\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">onCommandKey</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.onCommandKey\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.onCompositionEnd\" data-title=\"Editor.onCompositionEnd (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.onCompositionEnd\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.onCompositionEnd\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">onCompositionEnd</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.onCompositionEnd\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.onCompositionStart\" data-title=\"Editor.onCompositionStart (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.onCompositionStart\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.onCompositionStart\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">onCompositionStart</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.onCompositionStart\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.onCompositionUpdate\" data-title=\"Editor.onCompositionUpdate (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.onCompositionUpdate\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.onCompositionUpdate\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">onCompositionUpdate</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.onCompositionUpdate\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.onCopy\" data-title=\"Editor.onCopy (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.onCopy\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.onCopy\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">onCopy</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.onCopy\" class=\"ellipsis_description\"><p>Called whenever a text &quot;copy&quot; happens.</p>\n\n            </div>\n            <div class=\"description\"><p>Called whenever a text &quot;copy&quot; happens.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.onCursorChange\" data-title=\"Editor.onCursorChange (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.onCursorChange\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.onCursorChange\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">onCursorChange</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.onCursorChange\" class=\"ellipsis_description\"><p>Emitted when the selection changes.</p>\n\n            </div>\n            <div class=\"description\"><p>Emitted when the selection changes.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.onCut\" data-title=\"Editor.onCut (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.onCut\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.onCut\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">onCut</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.onCut\" class=\"ellipsis_description\"><p>Called whenever a text &quot;cut&quot; happens.</p>\n\n            </div>\n            <div class=\"description\"><p>Called whenever a text &quot;cut&quot; happens.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.onDocumentChange\" data-title=\"Editor.onDocumentChange (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.onDocumentChange\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.onDocumentChange\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">onDocumentChange</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.onDocumentChange\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.onFocus\" data-title=\"Editor.onFocus (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.onFocus\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.onFocus\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">onFocus</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.onFocus\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.onPaste\" data-title=\"Editor.onPaste (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.onPaste\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.onPaste\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">onPaste</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"argument methodClicker\" title=\"String\" data-id=\"String\">String</a> text</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.onPaste\" class=\"ellipsis_description\"><p>Called whenever a text &quot;paste&quot; happens.</p>\n\n            </div>\n            <div class=\"description\"><p>Called whenever a text &quot;paste&quot; happens.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">text</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"\" title=\"String\" data-id=\"String\">String</a></td><td class=\"argDescription \"><p>Required. The pasted text</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.onScrollLeftChange\" data-title=\"Editor.onScrollLeftChange (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.onScrollLeftChange\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.onScrollLeftChange\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">onScrollLeftChange</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.onScrollLeftChange\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.onScrollTopChange\" data-title=\"Editor.onScrollTopChange (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.onScrollTopChange\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.onScrollTopChange\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">onScrollTopChange</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.onScrollTopChange\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.onSelectionChange\" data-title=\"Editor.onSelectionChange (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.onSelectionChange\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.onSelectionChange\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">onSelectionChange</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.onSelectionChange\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.onTextInput\" data-title=\"Editor.onTextInput (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.onTextInput\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.onTextInput\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">onTextInput</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.onTextInput\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.onTokenizerUpdate\" data-title=\"Editor.onTokenizerUpdate (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.onTokenizerUpdate\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.onTokenizerUpdate\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">onTokenizerUpdate</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.onTokenizerUpdate\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.redo\" data-title=\"Editor.redo (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.redo\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.redo\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">redo</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.redo\" class=\"ellipsis_description\"><p>Perform a redo operation on the document, reimplementing the last change.</p>\n\n            </div>\n            <div class=\"description\"><p>Perform a redo operation on the document, reimplementing the last change.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.remove\" data-title=\"Editor.remove (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.remove\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.remove\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">remove</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"argument methodClicker\" title=\"String\" data-id=\"String\">String</a> dir</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.remove\" class=\"ellipsis_description\"><p>Removes words of text from the editor. A &quot;word&quot; is defined as a string of characters bookended by whitespace.</p>\n\n            </div>\n            <div class=\"description\"><p>Removes words of text from the editor. A &quot;word&quot; is defined as a string of characters bookended by whitespace.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">dir</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"\" title=\"String\" data-id=\"String\">String</a></td><td class=\"argDescription \"><p>Required. The direction of the deletion to occur, either &quot;left&quot; or &quot;right&quot;</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.removeLines\" data-title=\"Editor.removeLines (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.removeLines\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.removeLines\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">removeLines</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.removeLines\" class=\"ellipsis_description\"><p>Removes all the lines in the current selection</p>\n\n            </div>\n            <div class=\"description\"><p>Removes all the lines in the current selection</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.removeSelectionMarker\" data-title=\"Editor.removeSelectionMarker (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.removeSelectionMarker\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.removeSelectionMarker\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">removeSelectionMarker</span></span>(<span class=\"sigArgList\"><a href=\"range.html\" class=\"argument methodClicker\" title=\"Range (class)\" data-id=\"Range\">Range</a> The</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.removeSelectionMarker\" class=\"ellipsis_description\"><p>Removes the selection marker.</p>\n\n            </div>\n            <div class=\"description\"><p>Removes the selection marker.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">The</td><td class=\"argType\"><a href=\"range.html\" class=\"\" title=\"Range (class)\" data-id=\"Range\">Range</a></td><td class=\"argDescription \"><p>Required. selection range added with <a href=\"#nav=api&api=multi_select\" class=\"link-short\" title=\"Editor.addSelectionMarker (class method)\" data-id=\"Editor.addSelectionMarker\"><code>addSelectionMarker()</code></a>.</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.removeToLineEnd\" data-title=\"Editor.removeToLineEnd (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.removeToLineEnd\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.removeToLineEnd\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">removeToLineEnd</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.removeToLineEnd\" class=\"ellipsis_description\"><p>Removes all the words to the right of the current selection, until the end of the line.</p>\n\n            </div>\n            <div class=\"description\"><p>Removes all the words to the right of the current selection, until the end of the line.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.removeToLineStart\" data-title=\"Editor.removeToLineStart (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.removeToLineStart\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.removeToLineStart\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">removeToLineStart</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.removeToLineStart\" class=\"ellipsis_description\"><p>Removes all the words to the left of the current selection, until the start of the line.</p>\n\n            </div>\n            <div class=\"description\"><p>Removes all the words to the left of the current selection, until the start of the line.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.removeWordLeft\" data-title=\"Editor.removeWordLeft (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.removeWordLeft\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.removeWordLeft\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">removeWordLeft</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.removeWordLeft\" class=\"ellipsis_description\"><p>Removes the word directly to the left of the current selection.</p>\n\n            </div>\n            <div class=\"description\"><p>Removes the word directly to the left of the current selection.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.removeWordRight\" data-title=\"Editor.removeWordRight (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.removeWordRight\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.removeWordRight\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">removeWordRight</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.removeWordRight\" class=\"ellipsis_description\"><p>Removes the word directly to the right of the current selection.</p>\n\n            </div>\n            <div class=\"description\"><p>Removes the word directly to the right of the current selection.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.replace\" data-title=\"Editor.replace (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.replace\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.replace\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">replace</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"argument methodClicker\" title=\"String\" data-id=\"String\">String</a> replacement, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> options</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.replace\" class=\"ellipsis_description\"><p>Replaces the first occurrence of <code>options.needle</code> with the value in <code>replacement</code>.</p>\n\n            </div>\n            <div class=\"description\"><p>Replaces the first occurrence of <code>options.needle</code> with the value in <code>replacement</code>.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">replacement</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"\" title=\"String\" data-id=\"String\">String</a></td><td class=\"argDescription \"><p>Required. The text to replace with</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">options</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. The <a href=\"search.html\" class=\"link-short\" title=\"Search (class)\" data-id=\"Search\"><code>Search</code></a> options to use</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.replaceAll\" data-title=\"Editor.replaceAll (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.replaceAll\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.replaceAll\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">replaceAll</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"argument methodClicker\" title=\"String\" data-id=\"String\">String</a> replacement, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> options</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.replaceAll\" class=\"ellipsis_description\"><p>Replaces all occurrences of <code>options.needle</code> with the value in <code>replacement</code>.</p>\n\n            </div>\n            <div class=\"description\"><p>Replaces all occurrences of <code>options.needle</code> with the value in <code>replacement</code>.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">replacement</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"\" title=\"String\" data-id=\"String\">String</a></td><td class=\"argDescription \"><p>Required. The text to replace with</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">options</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. The <a href=\"search.html\" class=\"link-short\" title=\"Search (class)\" data-id=\"Search\"><code>Search</code></a> options to use</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.resize\" data-title=\"Editor.resize (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.resize\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.resize\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">resize</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"argument methodClicker\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a> force</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.resize\" class=\"ellipsis_description\"><p>Triggers a resize of the editor.</p>\n\n            </div>\n            <div class=\"description\"><p>Triggers a resize of the editor.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">force</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></td><td class=\"argDescription \"><p>Required. If <code>true</code>, recomputes the size, even if the height and width haven&#39;t changed</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.revealRange\" data-title=\"Editor.revealRange (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.revealRange\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.revealRange\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">revealRange</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.revealRange\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.scrollPageDown\" data-title=\"Editor.scrollPageDown (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.scrollPageDown\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.scrollPageDown\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">scrollPageDown</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.scrollPageDown\" class=\"ellipsis_description\"><p>Scrolls the document to wherever &quot;page down&quot; is, without changing the cursor position.</p>\n\n            </div>\n            <div class=\"description\"><p>Scrolls the document to wherever &quot;page down&quot; is, without changing the cursor position.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.scrollPageUp\" data-title=\"Editor.scrollPageUp (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.scrollPageUp\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.scrollPageUp\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">scrollPageUp</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.scrollPageUp\" class=\"ellipsis_description\"><p>Scrolls the document to wherever &quot;page up&quot; is, without changing the cursor position.</p>\n\n            </div>\n            <div class=\"description\"><p>Scrolls the document to wherever &quot;page up&quot; is, without changing the cursor position.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.scrollToLine\" data-title=\"Editor.scrollToLine (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.scrollToLine\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.scrollToLine\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">scrollToLine</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> line, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"argument methodClicker\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a> center, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"argument methodClicker\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a> animate, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function\" class=\"argument methodClicker\" title=\"Function\" data-id=\"Function\">Function</a> callback</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.scrollToLine\" class=\"ellipsis_description\"><p>Scrolls to a line. If <code>center</code> is <code>true</code>, it puts the line in middle of screen (or attempts to).</p>\n\n            </div>\n            <div class=\"description\"><p>Scrolls to a line. If <code>center</code> is <code>true</code>, it puts the line in middle of screen (or attempts to).</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">line</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The line to scroll to</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">center</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></td><td class=\"argDescription \"><p>Required. If <code>true</code></p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">animate</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></td><td class=\"argDescription \"><p>Required. If <code>true</code> animates scrolling</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">callback</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function\" class=\"\" title=\"Function\" data-id=\"Function\">Function</a></td><td class=\"argDescription \"><p>Required. Function to be called when the animation has finished</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.scrollToRow\" data-title=\"Editor.scrollToRow (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.scrollToRow\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.scrollToRow\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">scrollToRow</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> row</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.scrollToRow\" class=\"ellipsis_description\"><p>Moves the editor to the specified row.</p>\n\n            </div>\n            <div class=\"description\"><p>Moves the editor to the specified row.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">row</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. </p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.selectAll\" data-title=\"Editor.selectAll (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.selectAll\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.selectAll\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">selectAll</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.selectAll\" class=\"ellipsis_description\"><p>Selects all the text in editor.</p>\n\n            </div>\n            <div class=\"description\"><p>Selects all the text in editor.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.selectMore\" data-title=\"Editor.selectMore (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.selectMore\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.selectMore\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">selectMore</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> dir, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"argument methodClicker\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a> skip</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.selectMore\" class=\"ellipsis_description\"><p>Finds the next occurrence of text in an active selection and adds it to the selections.</p>\n\n            </div>\n            <div class=\"description\"><p>Finds the next occurrence of text in an active selection and adds it to the selections.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">dir</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The direction of lines to select: -1 for up, 1 for down</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">skip</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></td><td class=\"argDescription \"><p>Required. If <code>true</code>, removes the active selection range</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.selectMoreLines\" data-title=\"Editor.selectMoreLines (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.selectMoreLines\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.selectMoreLines\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">selectMoreLines</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> dir, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"argument methodClicker\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a> skip</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.selectMoreLines\" class=\"ellipsis_description\"><p>Adds a cursor above or below the active cursor.</p>\n\n            </div>\n            <div class=\"description\"><p>Adds a cursor above or below the active cursor.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">dir</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The direction of lines to select: -1 for up, 1 for down</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">skip</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></td><td class=\"argDescription \"><p>Required. If <code>true</code>, removes the active selection range</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.selectPageDown\" data-title=\"Editor.selectPageDown (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.selectPageDown\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.selectPageDown\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">selectPageDown</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.selectPageDown\" class=\"ellipsis_description\"><p>Selects the text from the current position of the document until where a &quot;page down&quot; finishes.</p>\n\n            </div>\n            <div class=\"description\"><p>Selects the text from the current position of the document until where a &quot;page down&quot; finishes.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.selectPageUp\" data-title=\"Editor.selectPageUp (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.selectPageUp\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.selectPageUp\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">selectPageUp</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.selectPageUp\" class=\"ellipsis_description\"><p>Selects the text from the current position of the document until where a &quot;page up&quot; finishes.</p>\n\n            </div>\n            <div class=\"description\"><p>Selects the text from the current position of the document until where a &quot;page up&quot; finishes.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.setAnimatedScroll\" data-title=\"Editor.setAnimatedScroll (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.setAnimatedScroll\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.setAnimatedScroll\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">setAnimatedScroll</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.setAnimatedScroll\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.setBehavioursEnabled\" data-title=\"Editor.setBehavioursEnabled (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.setBehavioursEnabled\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.setBehavioursEnabled\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">setBehavioursEnabled</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"argument methodClicker\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a> enabled</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.setBehavioursEnabled\" class=\"ellipsis_description\"><p>Specifies whether to use behaviors or not. &quot;Behaviors&quot; in this case is the auto-pairing of special characters, like quotation marks, parenthesis, or brackets.</p>\n\n            </div>\n            <div class=\"description\"><p>Specifies whether to use behaviors or not. &quot;Behaviors&quot; in this case is the auto-pairing of special characters, like quotation marks, parenthesis, or brackets.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">enabled</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></td><td class=\"argDescription \"><p>Required. Enables or disables behaviors</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.setDisplayIndentGuides\" data-title=\"Editor.setDisplayIndentGuides (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.setDisplayIndentGuides\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.setDisplayIndentGuides\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">setDisplayIndentGuides</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.setDisplayIndentGuides\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.setDragDelay\" data-title=\"Editor.setDragDelay (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.setDragDelay\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.setDragDelay\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">setDragDelay</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> dragDelay</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.setDragDelay\" class=\"ellipsis_description\"><p>Sets the delay (in milliseconds) of the mouse drag.</p>\n\n            </div>\n            <div class=\"description\"><p>Sets the delay (in milliseconds) of the mouse drag.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">dragDelay</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. A value indicating the new delay</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.setFadeFoldWidgets\" data-title=\"Editor.setFadeFoldWidgets (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.setFadeFoldWidgets\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.setFadeFoldWidgets\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">setFadeFoldWidgets</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.setFadeFoldWidgets\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.setFontSize\" data-title=\"Editor.setFontSize (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.setFontSize\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.setFontSize\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">setFontSize</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> size</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.setFontSize\" class=\"ellipsis_description\"><p>Set a new font size (in pixels) for the editor text.</p>\n\n            </div>\n            <div class=\"description\"><p>Set a new font size (in pixels) for the editor text.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">size</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. A font size</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.setHighlightActiveLine\" data-title=\"Editor.setHighlightActiveLine (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.setHighlightActiveLine\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.setHighlightActiveLine\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">setHighlightActiveLine</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"argument methodClicker\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a> shouldHighlight</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.setHighlightActiveLine\" class=\"ellipsis_description\"><p>Determines whether or not the current line should be highlighted.</p>\n\n            </div>\n            <div class=\"description\"><p>Determines whether or not the current line should be highlighted.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">shouldHighlight</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></td><td class=\"argDescription \"><p>Required. Set to <code>true</code> to highlight the current line</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.setHighlightGutterLine\" data-title=\"Editor.setHighlightGutterLine (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.setHighlightGutterLine\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.setHighlightGutterLine\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">setHighlightGutterLine</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.setHighlightGutterLine\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.setHighlightSelectedWord\" data-title=\"Editor.setHighlightSelectedWord (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.setHighlightSelectedWord\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.setHighlightSelectedWord\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">setHighlightSelectedWord</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"argument methodClicker\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a> shouldHighlight</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.setHighlightSelectedWord\" class=\"ellipsis_description\"><p>Determines if the currently selected word should be highlighted.</p>\n\n            </div>\n            <div class=\"description\"><p>Determines if the currently selected word should be highlighted.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">shouldHighlight</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></td><td class=\"argDescription \"><p>Required. Set to <code>true</code> to highlight the currently selected word</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.setKeyboardHandler\" data-title=\"Editor.setKeyboardHandler (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.setKeyboardHandler\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.setKeyboardHandler\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">setKeyboardHandler</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"argument methodClicker\" title=\"String\" data-id=\"String\">String</a> keyboardHandler</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.setKeyboardHandler\" class=\"ellipsis_description\"><p>Sets a new key handler, such as &quot;vim&quot; or &quot;windows&quot;.</p>\n\n            </div>\n            <div class=\"description\"><p>Sets a new key handler, such as &quot;vim&quot; or &quot;windows&quot;.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">keyboardHandler</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"\" title=\"String\" data-id=\"String\">String</a></td><td class=\"argDescription \"><p>Required. The new key handler</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.setOverwrite\" data-title=\"Editor.setOverwrite (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.setOverwrite\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.setOverwrite\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">setOverwrite</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"argument methodClicker\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a> overwrite</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.setOverwrite\" class=\"ellipsis_description\"><p>Pass in <code>true</code> to enable overwrites in your session, or <code>false</code> to disable. If overwrites is enabled, any text you enter will type over any text after it. If the value of <code>overwrite</code> changes, this function also emits the <code>changeOverwrite</code> event.</p>\n\n            </div>\n            <div class=\"description\"><p>Pass in <code>true</code> to enable overwrites in your session, or <code>false</code> to disable. If overwrites is enabled, any text you enter will type over any text after it. If the value of <code>overwrite</code> changes, this function also emits the <code>changeOverwrite</code> event.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">overwrite</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></td><td class=\"argDescription \"><p>Required. Defines whether or not to set overwrites</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.setPrintMarginColumn\" data-title=\"Editor.setPrintMarginColumn (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.setPrintMarginColumn\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.setPrintMarginColumn\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">setPrintMarginColumn</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> showPrintMargin</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.setPrintMarginColumn\" class=\"ellipsis_description\"><p>Sets the column defining where the print margin should be.</p>\n\n            </div>\n            <div class=\"description\"><p>Sets the column defining where the print margin should be.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">showPrintMargin</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. Specifies the new print margin</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.setReadOnly\" data-title=\"Editor.setReadOnly (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.setReadOnly\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.setReadOnly\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">setReadOnly</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"argument methodClicker\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a> readOnly</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.setReadOnly\" class=\"ellipsis_description\"><p>If <code>readOnly</code> is true, then the editor is set to read-only mode, and none of the content can change.</p>\n\n            </div>\n            <div class=\"description\"><p>If <code>readOnly</code> is true, then the editor is set to read-only mode, and none of the content can change.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">readOnly</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></td><td class=\"argDescription \"><p>Required. Specifies whether the editor can be modified or not</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.setScrollSpeed\" data-title=\"Editor.setScrollSpeed (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.setScrollSpeed\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.setScrollSpeed\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">setScrollSpeed</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> speed</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.setScrollSpeed\" class=\"ellipsis_description\"><p>Sets how fast the mouse scrolling should do.</p>\n\n            </div>\n            <div class=\"description\"><p>Sets how fast the mouse scrolling should do.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">speed</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. A value indicating the new speed (in milliseconds)</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.setSelectionStyle\" data-title=\"Editor.setSelectionStyle (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.setSelectionStyle\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.setSelectionStyle\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">setSelectionStyle</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"argument methodClicker\" title=\"String\" data-id=\"String\">String</a> style</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.setSelectionStyle\" class=\"ellipsis_description\"><p>Indicates how selections should occur.  </p>\n\n            </div>\n            <div class=\"description\"><p>Indicates how selections should occur.  </p>\n<p>By default, selections are set to &quot;line&quot;. There are no other styles at the moment,\nalthough this code change in the future.</p>\n<p>This function also emits the <code>&#39;changeSelectionStyle&#39;</code> event.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">style</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"\" title=\"String\" data-id=\"String\">String</a></td><td class=\"argDescription \"><p>Required. The new selection style</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.setSession\" data-title=\"Editor.setSession (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.setSession\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.setSession\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">setSession</span></span>(<span class=\"sigArgList\"><a href=\"edit_session.html\" class=\"argument methodClicker\" title=\"EditSession (class)\" data-id=\"EditSession\">EditSession</a> session</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.setSession\" class=\"ellipsis_description\"><p>Sets a new editsession to use. This method also emits the <code>&#39;changeSession&#39;</code> event.</p>\n\n            </div>\n            <div class=\"description\"><p>Sets a new editsession to use. This method also emits the <code>&#39;changeSession&#39;</code> event.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">session</td><td class=\"argType\"><a href=\"edit_session.html\" class=\"\" title=\"EditSession (class)\" data-id=\"EditSession\">EditSession</a></td><td class=\"argDescription \"><p>Required. The new session to use</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.setShowFoldWidgets\" data-title=\"Editor.setShowFoldWidgets (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.setShowFoldWidgets\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.setShowFoldWidgets\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">setShowFoldWidgets</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"argument methodClicker\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a> show</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.setShowFoldWidgets\" class=\"ellipsis_description\"><p>Indicates whether the fold widgets are shown or not.</p>\n\n            </div>\n            <div class=\"description\"><p>Indicates whether the fold widgets are shown or not.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">show</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></td><td class=\"argDescription \"><p>Required. Specifies whether the fold widgets are shown</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.setShowInvisibles\" data-title=\"Editor.setShowInvisibles (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.setShowInvisibles\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.setShowInvisibles\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">setShowInvisibles</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"argument methodClicker\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a> showInvisibles</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.setShowInvisibles\" class=\"ellipsis_description\"><p>If <code>showInvisibles</code> is set to <code>true</code>, invisible characters&mdash;like spaces or new lines&mdash;are show in the editor.</p>\n\n            </div>\n            <div class=\"description\"><p>If <code>showInvisibles</code> is set to <code>true</code>, invisible characters&mdash;like spaces or new lines&mdash;are show in the editor.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">showInvisibles</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></td><td class=\"argDescription \"><p>Required. Specifies whether or not to show invisible characters</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.setShowPrintMargin\" data-title=\"Editor.setShowPrintMargin (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.setShowPrintMargin\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.setShowPrintMargin\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">setShowPrintMargin</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"argument methodClicker\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a> showPrintMargin</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.setShowPrintMargin\" class=\"ellipsis_description\"><p>If <code>showPrintMargin</code> is set to <code>true</code>, the print margin is shown in the editor.</p>\n\n            </div>\n            <div class=\"description\"><p>If <code>showPrintMargin</code> is set to <code>true</code>, the print margin is shown in the editor.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">showPrintMargin</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></td><td class=\"argDescription \"><p>Required. Specifies whether or not to show the print margin</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.setStyle\" data-title=\"Editor.setStyle (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.setStyle\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.setStyle\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">setStyle</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"argument methodClicker\" title=\"String\" data-id=\"String\">String</a> style</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.setStyle\" class=\"ellipsis_description\"><p>Adds a new class, <code>style</code>, to the editor.</p>\n\n            </div>\n            <div class=\"description\"><p>Adds a new class, <code>style</code>, to the editor.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">style</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"\" title=\"String\" data-id=\"String\">String</a></td><td class=\"argDescription \"><p>Required. A class name</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.setTheme\" data-title=\"Editor.setTheme (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.setTheme\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.setTheme\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">setTheme</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"argument methodClicker\" title=\"String\" data-id=\"String\">String</a> theme</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.setTheme\" class=\"ellipsis_description\"><p>Sets a new theme for the editor. <code>theme</code> should exist, and be a directory path, like <code>ace/theme/textmate</code>.</p>\n\n            </div>\n            <div class=\"description\"><p>Sets a new theme for the editor. <code>theme</code> should exist, and be a directory path, like <code>ace/theme/textmate</code>.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">theme</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"\" title=\"String\" data-id=\"String\">String</a></td><td class=\"argDescription \"><p>Required. The path to a theme</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.setValue\" data-title=\"Editor.setValue (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.setValue\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.setValue\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">setValue</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"argument methodClicker\" title=\"String\" data-id=\"String\">String</a> val, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> cursorPos</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"returnType \" title=\"String\" data-id=\"String\">String</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.setValue\" class=\"ellipsis_description\"><p>Sets the current document to <code>val</code>.</p>\n\n            </div>\n            <div class=\"description\"><p>Sets the current document to <code>val</code>.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">val</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"\" title=\"String\" data-id=\"String\">String</a></td><td class=\"argDescription \"><p>Required. The new value to set for the document</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">cursorPos</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. Where to set the new value. <code>undefined</code> or 0 is selectAll, -1 is at the document start, and 1 is at the end</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.setWrapBehavioursEnabled\" data-title=\"Editor.setWrapBehavioursEnabled (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.setWrapBehavioursEnabled\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.setWrapBehavioursEnabled\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">setWrapBehavioursEnabled</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"argument methodClicker\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a> enabled</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.setWrapBehavioursEnabled\" class=\"ellipsis_description\"><p>Specifies whether to use wrapping behaviors or not, i.e. automatically wrapping the selection with characters such as brackets\nwhen such a character is typed in.</p>\n\n            </div>\n            <div class=\"description\"><p>Specifies whether to use wrapping behaviors or not, i.e. automatically wrapping the selection with characters such as brackets\nwhen such a character is typed in.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">enabled</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></td><td class=\"argDescription \"><p>Required. Enables or disables wrapping behaviors</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.sortLines\" data-title=\"Editor.sortLines (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.sortLines\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.sortLines\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">sortLines</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.sortLines\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.splitLine\" data-title=\"Editor.splitLine (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.splitLine\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.splitLine\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">splitLine</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.splitLine\" class=\"ellipsis_description\"><p>Splits the line at the current selection (by inserting an <code>&#39;\\n&#39;</code>).</p>\n\n            </div>\n            <div class=\"description\"><p>Splits the line at the current selection (by inserting an <code>&#39;\\n&#39;</code>).</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.toggleCommentLines\" data-title=\"Editor.toggleCommentLines (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.toggleCommentLines\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.toggleCommentLines\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">toggleCommentLines</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.toggleCommentLines\" class=\"ellipsis_description\"><p>Given the currently selected range, this function either comments all the lines, or uncomments all of them.</p>\n\n            </div>\n            <div class=\"description\"><p>Given the currently selected range, this function either comments all the lines, or uncomments all of them.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.toggleOverwrite\" data-title=\"Editor.toggleOverwrite (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.toggleOverwrite\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.toggleOverwrite\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">toggleOverwrite</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.toggleOverwrite\" class=\"ellipsis_description\"><p>Sets the value of overwrite to the opposite of whatever it currently is.</p>\n\n            </div>\n            <div class=\"description\"><p>Sets the value of overwrite to the opposite of whatever it currently is.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.toLowerCase\" data-title=\"Editor.toLowerCase (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.toLowerCase\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.toLowerCase\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">toLowerCase</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.toLowerCase\" class=\"ellipsis_description\"><p>Converts the current selection entirely into lowercase.</p>\n\n            </div>\n            <div class=\"description\"><p>Converts the current selection entirely into lowercase.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.toUpperCase\" data-title=\"Editor.toUpperCase (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.toUpperCase\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.toUpperCase\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">toUpperCase</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.toUpperCase\" class=\"ellipsis_description\"><p>Converts the current selection entirely into uppercase.</p>\n\n            </div>\n            <div class=\"description\"><p>Converts the current selection entirely into uppercase.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.transposeLetters\" data-title=\"Editor.transposeLetters (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.transposeLetters\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.transposeLetters\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">transposeLetters</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.transposeLetters\" class=\"ellipsis_description\"><p>Transposes current line.</p>\n\n            </div>\n            <div class=\"description\"><p>Transposes current line.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.transposeSelections\" data-title=\"Editor.transposeSelections (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.transposeSelections\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.transposeSelections\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">transposeSelections</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> dir</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.transposeSelections\" class=\"ellipsis_description\"><p>Transposes the selected ranges.</p>\n\n            </div>\n            <div class=\"description\"><p>Transposes the selected ranges.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">dir</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The direction to rotate selections</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.undo\" data-title=\"Editor.undo (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.undo\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.undo\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">undo</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.undo\" class=\"ellipsis_description\"><p>Perform an undo operation on the document, reverting the last change.</p>\n\n            </div>\n            <div class=\"description\"><p>Perform an undo operation on the document, reverting the last change.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.unsetStyle\" data-title=\"Editor.unsetStyle (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.unsetStyle\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.unsetStyle\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">unsetStyle</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> style</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.unsetStyle\" class=\"ellipsis_description\"><p>Removes the class <code>style</code> from the editor.</p>\n\n            </div>\n            <div class=\"description\"><p>Removes the class <code>style</code> from the editor.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">style</td><td class=\"argType\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. </p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Editor.updateSelectionMarkers\" data-title=\"Editor.updateSelectionMarkers (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Editor.updateSelectionMarkers\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Editor.updateSelectionMarkers\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Editor.</span><span class=\"sigMemberName\">updateSelectionMarkers</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Editor.updateSelectionMarkers\" class=\"ellipsis_description\"><p>Updates the cursor and marker layers.</p>\n\n            </div>\n            <div class=\"description\"><p>Updates the cursor and marker layers.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n  </div>\n  <script defer src=\"./resources/javascripts/ux.js\"></script>\n  <script src=\"./resources/javascripts/clicker.js\"></script>\n  <script src=\"./resources/javascripts/jquery-scrollspy.js\"></script>\n  <script defer src=\"./resources/javascripts/disqus-ext.js\"></script>\n  <script defer src=\"./resources/javascripts/ga.js\"></script>\n  <div id=\"disqus_thread\"></div>\n</div>\n"
  },
  {
    "path": "api/index.html",
    "content": "\n<div id=\"documentation\" class=\"span9\"><h1>Ace API Reference</h1>\n<p>Welcome to the Ace API Reference Guide. Ace is a standalone code editor written in JavaScript that you can embed onto any website. We&#39;re used in a bunch of places already, like GitHub, Google, and Facebook.</p>\n<p>On the left, you&#39;ll find a list of all of our currently documented classes. There are plenty more to do, but these represent the &quot;core&quot; set. For more information on how to work with Ace, check out the <a href=\"http://ace.ajax.org\">main Ace website</a>.</p>\n\n  <script defer src=\"./resources/javascripts/ux.js\"></script>\n  <script src=\"./resources/javascripts/clicker.js\"></script>\n  <script src=\"./resources/javascripts/jquery-scrollspy.js\"></script>\n  <script defer src=\"./resources/javascripts/disqus-ext.js\"></script>\n  <script defer src=\"./resources/javascripts/ga.js\"></script>\n  <div id=\"disqus_thread\"></div>\n</div>"
  },
  {
    "path": "api/placeholder.html",
    "content": "\n<div id=\"documentation\" class=\"span9\">\n  <div class=\"classContent\">\n    <div class=\"membersBackground\"></div>\n    <div class=\" members pos0\">\n      <div class=\" membersContent pos0\">\n        <h1 class=\"memberHeader\"><span class=\"name\">PlaceHolder</span>\n        </h1>\n        <ul data-tabs=\"tabs\" class=\"nav tabs pos0\">\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\"><a href=\"#\" data-toggle=\"dropdown\" class=\"dropdown-toggle\"><span>Constructors (1)</span><b class=\"caret\"></b></a>\n            <ul class=\"dropdown-menu\">\n              <li id=\"dropdown_PlaceHolder.new\" data-id=\"PlaceHolder.new\" class=\"memberLink\"><a href=\"#PlaceHolder.new\" class=\"\" title=\"PlaceHolder.new (constructor)\" data-id=\"PlaceHolder.new\">new</a>\n              </li>\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\"><a href=\"#\" data-toggle=\"dropdown\" class=\"dropdown-toggle\"><span>Functions (7)</span><b class=\"caret\"></b></a>\n            <ul class=\"dropdown-menu\">\n              <li id=\"dropdown_PlaceHolder.cancel\" data-id=\"PlaceHolder.cancel\" class=\"memberLink\"><a href=\"#PlaceHolder.cancel\" class=\"\" title=\"PlaceHolder.cancel (class method)\" data-id=\"PlaceHolder.cancel\">cancel</a>\n              </li>\n              <li id=\"dropdown_PlaceHolder.detach\" data-id=\"PlaceHolder.detach\" class=\"memberLink\"><a href=\"#PlaceHolder.detach\" class=\"\" title=\"PlaceHolder.detach (class method)\" data-id=\"PlaceHolder.detach\">detach</a>\n              </li>\n              <li id=\"dropdown_PlaceHolder.hideOtherMarkers\" data-id=\"PlaceHolder.hideOtherMarkers\" class=\"memberLink\"><a href=\"#PlaceHolder.hideOtherMarkers\" class=\"\" title=\"PlaceHolder.hideOtherMarkers (class method)\" data-id=\"PlaceHolder.hideOtherMarkers\">hideOtherMarkers</a>\n              </li>\n              <li id=\"dropdown_PlaceHolder.onCursorChange\" data-id=\"PlaceHolder.onCursorChange\" class=\"memberLink\"><a href=\"#PlaceHolder.onCursorChange\" class=\"\" title=\"PlaceHolder.onCursorChange (class method)\" data-id=\"PlaceHolder.onCursorChange\">onCursorChange</a>\n              </li>\n              <li id=\"dropdown_PlaceHolder.onUpdate\" data-id=\"PlaceHolder.onUpdate\" class=\"memberLink\"><a href=\"#PlaceHolder.onUpdate\" class=\"\" title=\"PlaceHolder.onUpdate (class method)\" data-id=\"PlaceHolder.onUpdate\">onUpdate</a>\n              </li>\n              <li id=\"dropdown_PlaceHolder.setup\" data-id=\"PlaceHolder.setup\" class=\"memberLink\"><a href=\"#PlaceHolder.setup\" class=\"\" title=\"PlaceHolder.setup (class method)\" data-id=\"PlaceHolder.setup\">setup</a>\n              </li>\n              <li id=\"dropdown_PlaceHolder.showOtherMarkers\" data-id=\"PlaceHolder.showOtherMarkers\" class=\"memberLink\"><a href=\"#PlaceHolder.showOtherMarkers\" class=\"\" title=\"PlaceHolder.showOtherMarkers (class method)\" data-id=\"PlaceHolder.showOtherMarkers\">showOtherMarkers</a>\n              </li>\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n        </ul>\n      </div>\n    </div>\n    <article id=\"PlaceHolder\" data-title=\"PlaceHolder (class)\" class=\"article\">\n    </article>\n    <h3 class=\"sectionHeader\">Constructors</h3>\n    <article id=\"PlaceHolder.new\" data-title=\"PlaceHolder.new (constructor)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"PlaceHolder.new\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span class=\"constructorIdentifier\">new </span><span id=\"PlaceHolder.new\" class=\"member-name methodClicker\">PlaceHolder</span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_PlaceHolder.new\" class=\"ellipsis_description\"><ul>\n<li>session (Document): The document to associate with the anchor</li>\n<li>length (Number): The starting row position</li>\n<li>pos (Number): The starting column position</li>\n<li>others (String):</li>\n<li>mainClass (String):</li>\n<li>othersClass (String):</li>\n</ul>\n\n            </div>\n            <div class=\"description\"><ul>\n<li>session (Document): The document to associate with the anchor</li>\n<li>length (Number): The starting row position</li>\n<li>pos (Number): The starting column position</li>\n<li>others (String):</li>\n<li>mainClass (String):</li>\n<li>othersClass (String):</li>\n</ul>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <h3 class=\"sectionHeader\">Methods</h3>\n    <article id=\"PlaceHolder.cancel\" data-title=\"PlaceHolder.cancel (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"PlaceHolder.cancel\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"PlaceHolder.cancel\" class=\"member-name methodClicker\"><span class=\"sigClassName\">PlaceHolder.</span><span class=\"sigMemberName\">cancel</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_PlaceHolder.cancel\" class=\"ellipsis_description\"><p>PlaceHolder.cancel()</p>\n\n            </div>\n            <div class=\"description\"><p>PlaceHolder.cancel()</p>\n<p>TODO</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"PlaceHolder.detach\" data-title=\"PlaceHolder.detach (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"PlaceHolder.detach\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"PlaceHolder.detach\" class=\"member-name methodClicker\"><span class=\"sigClassName\">PlaceHolder.</span><span class=\"sigMemberName\">detach</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_PlaceHolder.detach\" class=\"ellipsis_description\"><p>PlaceHolder.detach()</p>\n\n            </div>\n            <div class=\"description\"><p>PlaceHolder.detach()</p>\n<p>TODO</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"PlaceHolder.hideOtherMarkers\" data-title=\"PlaceHolder.hideOtherMarkers (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"PlaceHolder.hideOtherMarkers\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"PlaceHolder.hideOtherMarkers\" class=\"member-name methodClicker\"><span class=\"sigClassName\">PlaceHolder.</span><span class=\"sigMemberName\">hideOtherMarkers</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_PlaceHolder.hideOtherMarkers\" class=\"ellipsis_description\"><p>PlaceHolder.hideOtherMarkers()</p>\n\n            </div>\n            <div class=\"description\"><p>PlaceHolder.hideOtherMarkers()</p>\n<p>Hides all over markers in the <a href=\"edit_session.html\" class=\"link-short\" title=\"EditSession (class)\" data-id=\"EditSession\"><code>EditSession</code></a> that are not the currently selected one.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"PlaceHolder.onCursorChange\" data-title=\"PlaceHolder.onCursorChange (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"PlaceHolder.onCursorChange\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"PlaceHolder.onCursorChange\" class=\"member-name methodClicker\"><span class=\"sigClassName\">PlaceHolder.</span><span class=\"sigMemberName\">onCursorChange</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> event</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_PlaceHolder.onCursorChange\" class=\"ellipsis_description\"><p>PlaceHolder@onCursorChange(e)</p>\n\n            </div>\n            <div class=\"description\"><p>PlaceHolder@onCursorChange(e)</p>\n<p>Emitted when the cursor changes.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">event</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. </p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"PlaceHolder.onUpdate\" data-title=\"PlaceHolder.onUpdate (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"PlaceHolder.onUpdate\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"PlaceHolder.onUpdate\" class=\"member-name methodClicker\"><span class=\"sigClassName\">PlaceHolder.</span><span class=\"sigMemberName\">onUpdate</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> event</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_PlaceHolder.onUpdate\" class=\"ellipsis_description\"><p>PlaceHolder@onUpdate(e)</p>\n\n            </div>\n            <div class=\"description\"><p>PlaceHolder@onUpdate(e)</p>\n<p>Emitted when the place holder updates.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">event</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. </p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"PlaceHolder.setup\" data-title=\"PlaceHolder.setup (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"PlaceHolder.setup\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"PlaceHolder.setup\" class=\"member-name methodClicker\"><span class=\"sigClassName\">PlaceHolder.</span><span class=\"sigMemberName\">setup</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_PlaceHolder.setup\" class=\"ellipsis_description\"><p>PlaceHolder.setup()</p>\n\n            </div>\n            <div class=\"description\"><p>PlaceHolder.setup()</p>\n<p>TODO</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"PlaceHolder.showOtherMarkers\" data-title=\"PlaceHolder.showOtherMarkers (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"PlaceHolder.showOtherMarkers\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"PlaceHolder.showOtherMarkers\" class=\"member-name methodClicker\"><span class=\"sigClassName\">PlaceHolder.</span><span class=\"sigMemberName\">showOtherMarkers</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_PlaceHolder.showOtherMarkers\" class=\"ellipsis_description\"><p>PlaceHolder.showOtherMarkers()</p>\n\n            </div>\n            <div class=\"description\"><p>PlaceHolder.showOtherMarkers()</p>\n<p>TODO</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n  </div>\n  <script defer src=\"./resources/javascripts/ux.js\"></script>\n  <script src=\"./resources/javascripts/clicker.js\"></script>\n  <script src=\"./resources/javascripts/jquery-scrollspy.js\"></script>\n  <script defer src=\"./resources/javascripts/disqus-ext.js\"></script>\n  <script defer src=\"./resources/javascripts/ga.js\"></script>\n  <div id=\"disqus_thread\"></div>\n</div>"
  },
  {
    "path": "api/range.html",
    "content": "\n<div id=\"documentation\" class=\"span9\">\n  <div class=\"classContent\">\n    <div class=\"membersBackground\"></div>\n    <div class=\" members pos0\">\n      <div class=\" membersContent pos0\">\n        <h1 class=\"memberHeader\"><span class=\"name\">Range</span>\n        </h1>\n        <ul data-tabs=\"tabs\" class=\"nav tabs pos0\">\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\"><a href=\"#\" data-toggle=\"dropdown\" class=\"dropdown-toggle\"><span>Constructors (1)</span><b class=\"caret\"></b></a>\n            <ul class=\"dropdown-menu\">\n              <li id=\"dropdown_Range.new\" data-id=\"Range.new\" class=\"memberLink\"><a href=\"#Range.new\" class=\"\" title=\"Range.new (constructor)\" data-id=\"Range.new\">new</a>\n              </li>\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\"><a href=\"#\" data-toggle=\"dropdown\" class=\"dropdown-toggle\"><span>Functions (26)</span><b class=\"caret\"></b></a>\n            <ul class=\"dropdown-menu\">\n              <li id=\"dropdown_Range.clipRows\" data-id=\"Range.clipRows\" class=\"memberLink\"><a href=\"#Range.clipRows\" class=\"\" title=\"Range.clipRows (class method)\" data-id=\"Range.clipRows\">clipRows</a>\n              </li>\n              <li id=\"dropdown_Range.clone\" data-id=\"Range.clone\" class=\"memberLink\"><a href=\"#Range.clone\" class=\"\" title=\"Range.clone (class method)\" data-id=\"Range.clone\">clone</a>\n              </li>\n              <li id=\"dropdown_Range.collapseRows\" data-id=\"Range.collapseRows\" class=\"memberLink\"><a href=\"#Range.collapseRows\" class=\"\" title=\"Range.collapseRows (class method)\" data-id=\"Range.collapseRows\">collapseRows</a>\n              </li>\n              <li id=\"dropdown_Range.compare\" data-id=\"Range.compare\" class=\"memberLink\"><a href=\"#Range.compare\" class=\"\" title=\"Range.compare (class method)\" data-id=\"Range.compare\">compare</a>\n              </li>\n              <li id=\"dropdown_Range.compareEnd\" data-id=\"Range.compareEnd\" class=\"memberLink\"><a href=\"#Range.compareEnd\" class=\"\" title=\"Range.compareEnd (class method)\" data-id=\"Range.compareEnd\">compareEnd</a>\n              </li>\n              <li id=\"dropdown_Range.compareInside\" data-id=\"Range.compareInside\" class=\"memberLink\"><a href=\"#Range.compareInside\" class=\"\" title=\"Range.compareInside (class method)\" data-id=\"Range.compareInside\">compareInside</a>\n              </li>\n              <li id=\"dropdown_Range.comparePoint\" data-id=\"Range.comparePoint\" class=\"memberLink\"><a href=\"#Range.comparePoint\" class=\"\" title=\"Range.comparePoint (class method)\" data-id=\"Range.comparePoint\">comparePoint</a>\n              </li>\n              <li id=\"dropdown_Range.compareRange\" data-id=\"Range.compareRange\" class=\"memberLink\"><a href=\"#Range.compareRange\" class=\"\" title=\"Range.compareRange (class method)\" data-id=\"Range.compareRange\">compareRange</a>\n              </li>\n              <li id=\"dropdown_Range.compareStart\" data-id=\"Range.compareStart\" class=\"memberLink\"><a href=\"#Range.compareStart\" class=\"\" title=\"Range.compareStart (class method)\" data-id=\"Range.compareStart\">compareStart</a>\n              </li>\n              <li id=\"dropdown_Range.contains\" data-id=\"Range.contains\" class=\"memberLink\"><a href=\"#Range.contains\" class=\"\" title=\"Range.contains (class method)\" data-id=\"Range.contains\">contains</a>\n              </li>\n              <li id=\"dropdown_Range.containsRange\" data-id=\"Range.containsRange\" class=\"memberLink\"><a href=\"#Range.containsRange\" class=\"\" title=\"Range.containsRange (class method)\" data-id=\"Range.containsRange\">containsRange</a>\n              </li>\n              <li id=\"dropdown_Range.extend\" data-id=\"Range.extend\" class=\"memberLink\"><a href=\"#Range.extend\" class=\"\" title=\"Range.extend (class method)\" data-id=\"Range.extend\">extend</a>\n              </li>\n              <li id=\"dropdown_Range.fromPoints\" data-id=\"Range.fromPoints\" class=\"memberLink\"><a href=\"#Range.fromPoints\" class=\"\" title=\"Range.fromPoints (class method)\" data-id=\"Range.fromPoints\">fromPoints</a>\n              </li>\n              <li id=\"dropdown_Range.inside\" data-id=\"Range.inside\" class=\"memberLink\"><a href=\"#Range.inside\" class=\"\" title=\"Range.inside (class method)\" data-id=\"Range.inside\">inside</a>\n              </li>\n              <li id=\"dropdown_Range.insideEnd\" data-id=\"Range.insideEnd\" class=\"memberLink\"><a href=\"#Range.insideEnd\" class=\"\" title=\"Range.insideEnd (class method)\" data-id=\"Range.insideEnd\">insideEnd</a>\n              </li>\n              <li id=\"dropdown_Range.insideStart\" data-id=\"Range.insideStart\" class=\"memberLink\"><a href=\"#Range.insideStart\" class=\"\" title=\"Range.insideStart (class method)\" data-id=\"Range.insideStart\">insideStart</a>\n              </li>\n              <li id=\"dropdown_Range.intersects\" data-id=\"Range.intersects\" class=\"memberLink\"><a href=\"#Range.intersects\" class=\"\" title=\"Range.intersects (class method)\" data-id=\"Range.intersects\">intersects</a>\n              </li>\n              <li id=\"dropdown_Range.isEmpty\" data-id=\"Range.isEmpty\" class=\"memberLink\"><a href=\"#Range.isEmpty\" class=\"\" title=\"Range.isEmpty (class method)\" data-id=\"Range.isEmpty\">isEmpty</a>\n              </li>\n              <li id=\"dropdown_Range.isEnd\" data-id=\"Range.isEnd\" class=\"memberLink\"><a href=\"#Range.isEnd\" class=\"\" title=\"Range.isEnd (class method)\" data-id=\"Range.isEnd\">isEnd</a>\n              </li>\n              <li id=\"dropdown_Range.isEqual\" data-id=\"Range.isEqual\" class=\"memberLink\"><a href=\"#Range.isEqual\" class=\"\" title=\"Range.isEqual (class method)\" data-id=\"Range.isEqual\">isEqual</a>\n              </li>\n              <li id=\"dropdown_Range.isMultiLine\" data-id=\"Range.isMultiLine\" class=\"memberLink\"><a href=\"#Range.isMultiLine\" class=\"\" title=\"Range.isMultiLine (class method)\" data-id=\"Range.isMultiLine\">isMultiLine</a>\n              </li>\n              <li id=\"dropdown_Range.isStart\" data-id=\"Range.isStart\" class=\"memberLink\"><a href=\"#Range.isStart\" class=\"\" title=\"Range.isStart (class method)\" data-id=\"Range.isStart\">isStart</a>\n              </li>\n              <li id=\"dropdown_Range.setEnd\" data-id=\"Range.setEnd\" class=\"memberLink\"><a href=\"#Range.setEnd\" class=\"\" title=\"Range.setEnd (class method)\" data-id=\"Range.setEnd\">setEnd</a>\n              </li>\n              <li id=\"dropdown_Range.setStart\" data-id=\"Range.setStart\" class=\"memberLink\"><a href=\"#Range.setStart\" class=\"\" title=\"Range.setStart (class method)\" data-id=\"Range.setStart\">setStart</a>\n              </li>\n              <li id=\"dropdown_Range.toScreenRange\" data-id=\"Range.toScreenRange\" class=\"memberLink\"><a href=\"#Range.toScreenRange\" class=\"\" title=\"Range.toScreenRange (class method)\" data-id=\"Range.toScreenRange\">toScreenRange</a>\n              </li>\n              <li id=\"dropdown_Range.toString\" data-id=\"Range.toString\" class=\"memberLink\"><a href=\"#Range.toString\" class=\"\" title=\"Range.toString (class method)\" data-id=\"Range.toString\">toString</a>\n              </li>\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n        </ul>\n      </div>\n    </div>\n    <article id=\"Range\" data-title=\"Range (class)\" class=\"article\">\n      <div class=\"section description\">\n        <div class=\"memberContent\"><p>This object is used in various places to indicate a region within the editor. To better visualize how this works, imagine a rectangle. Each quadrant of the rectangle is analogous to a range, as ranges contain a starting row and starting column, and an ending row, and ending column.</p>\n\n        </div>\n      </div>\n    </article>\n    <h3 class=\"sectionHeader\">Constructors</h3>\n    <article id=\"Range.new\" data-title=\"Range.new (constructor)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Range.new\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span class=\"constructorIdentifier\">new </span><span id=\"Range.new\" class=\"member-name methodClicker\">Range</span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> startRow, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> startColumn, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> endRow, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> endColumn</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Range.new\" class=\"ellipsis_description\"><p>Creates a new <code>Range</code> object with the given starting and ending row and column points.</p>\n\n            </div>\n            <div class=\"description\"><p>Creates a new <code>Range</code> object with the given starting and ending row and column points.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">startRow</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The starting row</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">startColumn</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The starting column</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">endRow</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The ending row</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">endColumn</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The ending column</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <h3 class=\"sectionHeader\">Methods</h3>\n    <article id=\"Range.clipRows\" data-title=\"Range.clipRows (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Range.clipRows\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Range.clipRows\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Range.</span><span class=\"sigMemberName\">clipRows</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> firstRow, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> lastRow</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"range.html\" class=\"returnType \" title=\"Range (class)\" data-id=\"Range\">Range</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Range.clipRows\" class=\"ellipsis_description\"><p>Returns the part of the current <code>Range</code> that occurs within the boundaries of <code>firstRow</code> and <code>lastRow</code> as a new <code>Range</code> object.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the part of the current <code>Range</code> that occurs within the boundaries of <code>firstRow</code> and <code>lastRow</code> as a new <code>Range</code> object.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">firstRow</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The starting row</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">lastRow</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The ending row</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Range.clone\" data-title=\"Range.clone (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Range.clone\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Range.clone\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Range.</span><span class=\"sigMemberName\">clone</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"range.html\" class=\"returnType \" title=\"Range (class)\" data-id=\"Range\">Range</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Range.clone\" class=\"ellipsis_description\"><p>Returns a duplicate of the calling range.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns a duplicate of the calling range.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Range.collapseRows\" data-title=\"Range.collapseRows (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Range.collapseRows\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Range.collapseRows\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Range.</span><span class=\"sigMemberName\">collapseRows</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"range.html\" class=\"returnType \" title=\"Range (class)\" data-id=\"Range\">Range</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Range.collapseRows\" class=\"ellipsis_description\"><p>Returns a range containing the starting and ending rows of the original range, but with a column value of <code>0</code>.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns a range containing the starting and ending rows of the original range, but with a column value of <code>0</code>.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Range.compare\" data-title=\"Range.compare (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Range.compare\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Range.compare\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Range.</span><span class=\"sigMemberName\">compare</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> row, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> column</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"returnType \" title=\"Number\" data-id=\"Number\">Number</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Range.compare\" class=\"ellipsis_description\"><p>Checks the row and column points with the row and column points of the calling range.</p>\n\n            </div>\n            <div class=\"description\"><p>Checks the row and column points with the row and column points of the calling range.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">row</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. A row point to compare with</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">column</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. A column point to compare with</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Range.compareEnd\" data-title=\"Range.compareEnd (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Range.compareEnd\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Range.compareEnd\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Range.</span><span class=\"sigMemberName\">compareEnd</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> row, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> column</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"returnType \" title=\"Number\" data-id=\"Number\">Number</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Range.compareEnd\" class=\"ellipsis_description\"><p>Checks the row and column points with the row and column points of the calling range.</p>\n\n            </div>\n            <div class=\"description\"><p>Checks the row and column points with the row and column points of the calling range.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">row</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. A row point to compare with</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">column</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. A column point to compare with</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Range.compareInside\" data-title=\"Range.compareInside (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Range.compareInside\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Range.compareInside\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Range.</span><span class=\"sigMemberName\">compareInside</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> row, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> column</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"returnType \" title=\"Number\" data-id=\"Number\">Number</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Range.compareInside\" class=\"ellipsis_description\"><p>Checks the row and column points with the row and column points of the calling range.</p>\n\n            </div>\n            <div class=\"description\"><p>Checks the row and column points with the row and column points of the calling range.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">row</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. A row point to compare with</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">column</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. A column point to compare with</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Range.comparePoint\" data-title=\"Range.comparePoint (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Range.comparePoint\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Range.comparePoint\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Range.</span><span class=\"sigMemberName\">comparePoint</span></span>(<span class=\"sigArgList\"><a href=\"range.html\" class=\"argument methodClicker\" title=\"Range (class)\" data-id=\"Range\">Range</a> p</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"returnType \" title=\"Number\" data-id=\"Number\">Number</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Range.comparePoint\" class=\"ellipsis_description\"><p>Checks the row and column points of <code>p</code> with the row and column points of the calling range.</p>\n\n            </div>\n            <div class=\"description\"><p>Checks the row and column points of <code>p</code> with the row and column points of the calling range.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">p</td><td class=\"argType\" \"><a href=\"range.html\" class=\"\" title=\"Range (class)\" data-id=\"Range\">Range</a></td><td class=\"argDescription \"><p>Required. A point to compare with</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Range.compareRange\" data-title=\"Range.compareRange (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Range.compareRange\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Range.compareRange\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Range.</span><span class=\"sigMemberName\">compareRange</span></span>(<span class=\"sigArgList\"><a href=\"range.html\" class=\"argument methodClicker\" title=\"Range (class)\" data-id=\"Range\">Range</a> range</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"returnType \" title=\"Number\" data-id=\"Number\">Number</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Range.compareRange\" class=\"ellipsis_description\"><p>Compares <code>this</code> range (A) with another range (B).</p>\n\n            </div>\n            <div class=\"description\"><p>Compares <code>this</code> range (A) with another range (B).</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">range</td><td class=\"argType\" \"><a href=\"range.html\" class=\"\" title=\"Range (class)\" data-id=\"Range\">Range</a></td><td class=\"argDescription \"><p>Required. A range to compare with</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Range.compareStart\" data-title=\"Range.compareStart (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Range.compareStart\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Range.compareStart\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Range.</span><span class=\"sigMemberName\">compareStart</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> row, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> column</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"returnType \" title=\"Number\" data-id=\"Number\">Number</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Range.compareStart\" class=\"ellipsis_description\"><p>Checks the row and column points with the row and column points of the calling range.</p>\n\n            </div>\n            <div class=\"description\"><p>Checks the row and column points with the row and column points of the calling range.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">row</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. A row point to compare with</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">column</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. A column point to compare with</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Range.contains\" data-title=\"Range.contains (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Range.contains\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Range.contains\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Range.</span><span class=\"sigMemberName\">contains</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> row, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> column</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"returnType \" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Range.contains\" class=\"ellipsis_description\"><p>Returns <code>true</code> if the <code>row</code> and <code>column</code> provided are within the given range. This can better be expressed as returning <code>true</code> if:</p>\n<pre><code class=\"language-javascript\">   <span class=\"keyword\">this</span>.start.row &lt;= row &lt;= <span class=\"keyword\">this</span>.end.row &amp;&amp;\n   <span class=\"keyword\">this</span>.start.column &lt;= column &lt;= <span class=\"keyword\">this</span>.end.column</code></pre>\n\n            </div>\n            <div class=\"description\"><p>Returns <code>true</code> if the <code>row</code> and <code>column</code> provided are within the given range. This can better be expressed as returning <code>true</code> if:</p>\n<pre><code class=\"language-javascript\">   <span class=\"keyword\">this</span>.start.row &lt;= row &lt;= <span class=\"keyword\">this</span>.end.row &amp;&amp;\n   <span class=\"keyword\">this</span>.start.column &lt;= column &lt;= <span class=\"keyword\">this</span>.end.column</code></pre>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">row</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. A row to check for</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">column</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. A column to check for</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Range.containsRange\" data-title=\"Range.containsRange (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Range.containsRange\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Range.containsRange\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Range.</span><span class=\"sigMemberName\">containsRange</span></span>(<span class=\"sigArgList\"><a href=\"range.html\" class=\"argument methodClicker\" title=\"Range (class)\" data-id=\"Range\">Range</a> range</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"returnType \" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Range.containsRange\" class=\"ellipsis_description\"><p>Checks the start and end points of <code>range</code> and compares them to the calling range. Returns <code>true</code> if the <code>range</code> is contained within the caller&#39;s range.</p>\n\n            </div>\n            <div class=\"description\"><p>Checks the start and end points of <code>range</code> and compares them to the calling range. Returns <code>true</code> if the <code>range</code> is contained within the caller&#39;s range.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">range</td><td class=\"argType\" \"><a href=\"range.html\" class=\"\" title=\"Range (class)\" data-id=\"Range\">Range</a></td><td class=\"argDescription \"><p>Required. A range to compare with</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Range.extend\" data-title=\"Range.extend (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Range.extend\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Range.extend\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Range.</span><span class=\"sigMemberName\">extend</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> row, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> column</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"range.html\" class=\"returnType \" title=\"Range (class)\" data-id=\"Range\">Range</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Range.extend\" class=\"ellipsis_description\"><p>Changes the row and column points for the calling range for both the starting and ending points.</p>\n\n            </div>\n            <div class=\"description\"><p>Changes the row and column points for the calling range for both the starting and ending points.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">row</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. A new row to extend to</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">column</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. A new column to extend to</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Range.fromPoints\" data-title=\"Range.fromPoints (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Range.fromPoints\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Range.fromPoints\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Range.</span><span class=\"sigMemberName\">fromPoints</span></span>(<span class=\"sigArgList\"><a href=\"range.html\" class=\"argument methodClicker\" title=\"Range (class)\" data-id=\"Range\">Range</a> start, <a href=\"range.html\" class=\"argument methodClicker\" title=\"Range (class)\" data-id=\"Range\">Range</a> end</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"range.html\" class=\"returnType \" title=\"Range (class)\" data-id=\"Range\">Range</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Range.fromPoints\" class=\"ellipsis_description\"><p>Creates and returns a new <code>Range</code> based on the row and column of the given parameters.</p>\n\n            </div>\n            <div class=\"description\"><p>Creates and returns a new <code>Range</code> based on the row and column of the given parameters.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">start</td><td class=\"argType\" \"><a href=\"range.html\" class=\"\" title=\"Range (class)\" data-id=\"Range\">Range</a></td><td class=\"argDescription \"><p>Required. A starting point to use</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">end</td><td class=\"argType\" \"><a href=\"range.html\" class=\"\" title=\"Range (class)\" data-id=\"Range\">Range</a></td><td class=\"argDescription \"><p>Required. An ending point to use</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Range.inside\" data-title=\"Range.inside (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Range.inside\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Range.inside\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Range.</span><span class=\"sigMemberName\">inside</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> row, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> column</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"returnType \" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Range.inside\" class=\"ellipsis_description\"><p>Returns <code>true</code> if the <code>row</code> and <code>column</code> are within the given range.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns <code>true</code> if the <code>row</code> and <code>column</code> are within the given range.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">row</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. A row point to compare with</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">column</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. A column point to compare with</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Range.insideEnd\" data-title=\"Range.insideEnd (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Range.insideEnd\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Range.insideEnd\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Range.</span><span class=\"sigMemberName\">insideEnd</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> row, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> column</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"returnType \" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Range.insideEnd\" class=\"ellipsis_description\"><p>Returns <code>true</code> if the <code>row</code> and <code>column</code> are within the given range&#39;s ending points.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns <code>true</code> if the <code>row</code> and <code>column</code> are within the given range&#39;s ending points.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">row</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. A row point to compare with</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">column</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. A column point to compare with</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Range.insideStart\" data-title=\"Range.insideStart (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Range.insideStart\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Range.insideStart\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Range.</span><span class=\"sigMemberName\">insideStart</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> row, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> column</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"returnType \" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Range.insideStart\" class=\"ellipsis_description\"><p>Returns <code>true</code> if the <code>row</code> and <code>column</code> are within the given range&#39;s starting points.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns <code>true</code> if the <code>row</code> and <code>column</code> are within the given range&#39;s starting points.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">row</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. A row point to compare with</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">column</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. A column point to compare with</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Range.intersects\" data-title=\"Range.intersects (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Range.intersects\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Range.intersects\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Range.</span><span class=\"sigMemberName\">intersects</span></span>(<span class=\"sigArgList\"><a href=\"range.html\" class=\"argument methodClicker\" title=\"Range (class)\" data-id=\"Range\">Range</a> range</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"returnType \" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Range.intersects\" class=\"ellipsis_description\"><p>Returns <code>true</code> if passed in <code>range</code> intersects with the one calling this method.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns <code>true</code> if passed in <code>range</code> intersects with the one calling this method.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">range</td><td class=\"argType\" \"><a href=\"range.html\" class=\"\" title=\"Range (class)\" data-id=\"Range\">Range</a></td><td class=\"argDescription \"><p>Required. A range to compare with</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Range.isEmpty\" data-title=\"Range.isEmpty (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Range.isEmpty\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Range.isEmpty\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Range.</span><span class=\"sigMemberName\">isEmpty</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Range.isEmpty\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Range.isEnd\" data-title=\"Range.isEnd (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Range.isEnd\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Range.isEnd\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Range.</span><span class=\"sigMemberName\">isEnd</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> row, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> column</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"returnType \" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Range.isEnd\" class=\"ellipsis_description\"><p>Returns <code>true</code> if the caller&#39;s ending row point is the same as <code>row</code>, and if the caller&#39;s ending column is the same as <code>column</code>.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns <code>true</code> if the caller&#39;s ending row point is the same as <code>row</code>, and if the caller&#39;s ending column is the same as <code>column</code>.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">row</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. A row point to compare with</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">column</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. A column point to compare with</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Range.isEqual\" data-title=\"Range.isEqual (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Range.isEqual\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Range.isEqual\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Range.</span><span class=\"sigMemberName\">isEqual</span></span>(<span class=\"sigArgList\"><a href=\"range.html\" class=\"argument methodClicker\" title=\"Range (class)\" data-id=\"Range\">Range</a> range</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"returnType \" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Range.isEqual\" class=\"ellipsis_description\"><p>Returns <code>true</code> if and only if the starting row and column, and ending row and column, are equivalent to those given by <code>range</code>.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns <code>true</code> if and only if the starting row and column, and ending row and column, are equivalent to those given by <code>range</code>.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">range</td><td class=\"argType\" \"><a href=\"range.html\" class=\"\" title=\"Range (class)\" data-id=\"Range\">Range</a></td><td class=\"argDescription \"><p>Required. A range to check against</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Range.isMultiLine\" data-title=\"Range.isMultiLine (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Range.isMultiLine\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Range.isMultiLine\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Range.</span><span class=\"sigMemberName\">isMultiLine</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"returnType \" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Range.isMultiLine\" class=\"ellipsis_description\"><p>Returns <code>true</code> if the range spans across multiple lines.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns <code>true</code> if the range spans across multiple lines.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Range.isStart\" data-title=\"Range.isStart (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Range.isStart\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Range.isStart\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Range.</span><span class=\"sigMemberName\">isStart</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> row, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> column</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"returnType \" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Range.isStart\" class=\"ellipsis_description\"><p>Returns <code>true</code> if the caller&#39;s starting row point is the same as <code>row</code>, and if the caller&#39;s starting column is the same as <code>column</code>.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns <code>true</code> if the caller&#39;s starting row point is the same as <code>row</code>, and if the caller&#39;s starting column is the same as <code>column</code>.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">row</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. A row point to compare with</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">column</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. A column point to compare with</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Range.setEnd\" data-title=\"Range.setEnd (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Range.setEnd\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Range.setEnd\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Range.</span><span class=\"sigMemberName\">setEnd</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> row, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> column</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Range.setEnd\" class=\"ellipsis_description\"><p>Sets the starting row and column for the range.</p>\n\n            </div>\n            <div class=\"description\"><p>Sets the starting row and column for the range.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">row</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. A row point to set</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">column</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. A column point to set</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Range.setStart\" data-title=\"Range.setStart (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Range.setStart\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Range.setStart\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Range.</span><span class=\"sigMemberName\">setStart</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> row, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> column</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Range.setStart\" class=\"ellipsis_description\"><p>Sets the starting row and column for the range.</p>\n\n            </div>\n            <div class=\"description\"><p>Sets the starting row and column for the range.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">row</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. A row point to set</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">column</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. A column point to set</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Range.toScreenRange\" data-title=\"Range.toScreenRange (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Range.toScreenRange\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Range.toScreenRange\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Range.</span><span class=\"sigMemberName\">toScreenRange</span></span>(<span class=\"sigArgList\"><a href=\"edit_session.html\" class=\"argument methodClicker\" title=\"EditSession (class)\" data-id=\"EditSession\">EditSession</a> session</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"range.html\" class=\"returnType \" title=\"Range (class)\" data-id=\"Range\">Range</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Range.toScreenRange\" class=\"ellipsis_description\"><p>Given the current <code>Range</code>, this function converts those starting and ending points into screen positions, and then returns a new <code>Range</code> object.</p>\n\n            </div>\n            <div class=\"description\"><p>Given the current <code>Range</code>, this function converts those starting and ending points into screen positions, and then returns a new <code>Range</code> object.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">session</td><td class=\"argType\" \"><a href=\"edit_session.html\" class=\"\" title=\"EditSession (class)\" data-id=\"EditSession\">EditSession</a></td><td class=\"argDescription \"><p>Required. The <code>EditSession</code> to retrieve coordinates from</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Range.toString\" data-title=\"Range.toString (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Range.toString\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Range.toString\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Range.</span><span class=\"sigMemberName\">toString</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"returnType \" title=\"String\" data-id=\"String\">String</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Range.toString\" class=\"ellipsis_description\"><p>Returns a string containing the range&#39;s row and column information, given like this:</p>\n<pre><code>   [<span class=\"operator\"><span class=\"keyword\">start</span>.row/<span class=\"keyword\">start</span>.<span class=\"keyword\">column</span>] -&gt; [<span class=\"keyword\">end</span>.row/<span class=\"keyword\">end</span>.<span class=\"keyword\">column</span>]</code></pre>\n\n            </div>\n            <div class=\"description\"><p>Returns a string containing the range&#39;s row and column information, given like this:</p>\n<pre><code>   [<span class=\"operator\"><span class=\"keyword\">start</span>.row/<span class=\"keyword\">start</span>.<span class=\"keyword\">column</span>] -&gt; [<span class=\"keyword\">end</span>.row/<span class=\"keyword\">end</span>.<span class=\"keyword\">column</span>]</code></pre>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n  </div>\n  <script defer src=\"./resources/javascripts/ux.js\"></script>\n  <script src=\"./resources/javascripts/clicker.js\"></script>\n  <script src=\"./resources/javascripts/jquery-scrollspy.js\"></script>\n  <script defer src=\"./resources/javascripts/disqus-ext.js\"></script>\n  <script defer src=\"./resources/javascripts/ga.js\"></script>\n  <div id=\"disqus_thread\"></div>\n</div>\n"
  },
  {
    "path": "api/renderloop.html",
    "content": "\n<div id=\"documentation\" class=\"span9\">\n  <div class=\"classContent\">\n    <div class=\"membersBackground\"></div>\n    <div class=\" members pos0\">\n      <div class=\" membersContent pos0\">\n        <h1 class=\"memberHeader\"><span class=\"name\">RenderLoop</span>\n        </h1>\n        <ul data-tabs=\"tabs\" class=\"nav tabs pos0\">\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n        </ul>\n      </div>\n    </div>\n    <article id=\"RenderLoop\" data-title=\"RenderLoop (class)\" class=\"article\">\n      <div class=\"section description\">\n        <div class=\"memberContent\"><p>Batches changes (that force something to be redrawn) in the background.</p>\n\n        </div>\n      </div>\n    </article>\n  </div>\n  <script defer src=\"./resources/javascripts/ux.js\"></script>\n  <script src=\"./resources/javascripts/clicker.js\"></script>\n  <script src=\"./resources/javascripts/jquery-scrollspy.js\"></script>\n  <script defer src=\"./resources/javascripts/disqus-ext.js\"></script>\n  <script defer src=\"./resources/javascripts/ga.js\"></script>\n  <div id=\"disqus_thread\"></div>\n</div>"
  },
  {
    "path": "api/resources/csses/ace_api.css",
    "content": "/*\n  Generic \"affects everything\" stuff\n*/\n\n#wrapper .content .column2 {\n    float: none;\n}\n\n#documentation ul {\n    font-size: 13px;\n}\n\n#documentation li {\n    color: black;\n}\n\npre {\n    background-color: #FFFFFF;\n}\n\ncode {\n    font-size: 12px;\n    line-height: 16px;\n    font-family: 'Ubuntu Mono',Monaco,Consolas,monospace !important;\n    background-color: #F9F9F9;\n    border-radius: 3px 3px 3px 3px;\n    display: inline-block;\n    padding: 0 4px;\n    margin: 2px 1px;\n    color: inherit;\n}\n\n#documentation pre {\n    margin-top: 10px;\n    border-radius: none;\n    box-shadow: none;\n    background : white;\n    /*background : #f5f5f5;\n    border: 0;*/\n    \n    -webkit-border-radius: 6px 6px 0 0;\n    -moz-border-radius: 6px 6px 0 0;\n    border-radius: 6px 6px 0 0;\n    \n    padding: 5px;\n}\n\n.method pre, .event pre, .property pre  {\n    background : white;\n}\n\n#documentation pre code {\n    background-color: transparent;\n    border-radius: none;\n    box-shadow: none;\n}\n\n#documentation a code {\n    color: #00438a;\n}\n\n#documentation h2 {\n    font-size: 26px;\n}\n#documentation p {\n    font-size: 13px;\n}\n#documentation li p:last-child {\n    margin-bottom : 5px;\n}\n\n#documentation blockquote p{\n    font-size: 14px;\n    font-weight: 500;\n    line-height: 23px;\n    font-style: italic;\n}\n\n.alert-message{\n    margin-bottom : 13px;\n}\n/* \n  Header and shoulders\n*/\n\n.navbar .nav > li {\n    float:none;\n    display:inline-block;\n    *display:inline; /* ie7 fix */\n     zoom:1; /* hasLayout ie7 trigger */\n}\n\n.navbar .nav > li > a {\n    padding: 10px 15px 11px;\n}\n\n.navbar {\n    text-align:center;\n}\n\n#topSection {\n    width: 1000px;\n}\n.small_win #topSection {\n    width: 100%;\n}\n.small_win #topSection .dropdown {\n    margin-right: 40%;\n}\n.navbar .brand {\n    margin-left: 0px;\n}\n.brand {\n    background: transparent url(../images/ace_logo_menu.png) no-repeat 33px 5px;\n    width: 80px;\n    outline: none;\n    height: 40px;\n    padding: 0 10px !important;\n    border: none;\n}\n.brand.dropdown-toggle:after {\n    content: none;\n    display: block;\n    height: 40px;\n    border: none;\n}\n\n.ace_logo {\n    position: absolute;\n    top: 45px;\n    z-index: 20000;\n    left: 210px;\n}\n\n.headerTitle {\n    position: relative;\n    top: 100px;\n    left: 250px;\n}\n\n/*\n  Menu venue\n*/\n\n\nh3.api_title {\n    padding-top: 10px;\n}\n\nul.menu {\n    margin-left: 2px;\n}\n\n.menu li {\n    list-style-image: url(../images/menu_disc.png);\n    margin-bottom: 4px;\n    font-weight: 700;\n    padding-left: 10px;\n    margin-left: 0;\n}\n\n.menu li .menu-item a.menuLink, .menu li .menu-item span.menuLink {\n    color: #3E7096;\n    font-weight: 100;\n}\n.menuTwo {\n    margin-bottom: 5px;\n    margin-top: 2px;\n}\n.menuTwo li .menu-item a.menuLink {\n    color: #3E7096;\n    font-weight: 100;\n}\n\n/* need specificity to \"beat\" the above colors */\n.menu li .menu-item a.currentItem, .menuTwo li .menu-item  {\n    color: #0072bc;\n}\n\n/*\n  Members and the tabs that represent them\n*/\n\n.srolled .members {\n    width: 100%;\n/*    -webkit-box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.35);\n    -moz-box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.35);\n    box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.35); */\n    padding-bottom: 15px;\n/*    height: 31px;*/\n    position: fixed;\n}\n.shadow.members{\n    background: #edf8fd;\n    box-shadow: 0 0.1em 1em rgba(0,0,0, 0.3);\n    -moz-box-shadow: 0 0.1em 1em rgba(0,0,0, 0.3);\n    -o-box-shadow: 0 0.1em 1em rgba(0,0,0, 0.3);\n    -webkit-box-shadow: 0 0.1em 1em rgba(0,0,0, 0.3);\n}\n\n.membersContent {\n  \n/*  border-bottom: 0.1em solid #FFF;*/\n  height: 3em;\n  padding-top: 4px;\n/*  line-height: 4;*/\n/*  margin-top: -0.1em;*/\n  position: relative;\n/*  transition-property: border-color, line-height;\n  transition-duration: 125ms, 250ms;\n  transition-timing-function: ease-out, ease-out;\n  -moz-transition-property: border-color, line-height;\n  -moz-transition-duration: 125ms, 250ms;\n  -moz-transition-timing-function: ease-out, ease-out;\n  -o-transition-property: border-color, line-height;\n  -o-transition-duration: 125ms, 250ms;\n  -o-transition-timing-function: ease-out, ease-out;\n  -webkit-transition-property: border-color, line-height;\n  -webkit-transition-duration: 125ms, 250ms;\n  -webkit-transition-timing-function: ease-out, ease-out;*/\n  \n  /*transition-duration: 125ms;\n  transition-property: top;\n  transition-timing-function: ease-out;\n  \n  top : 11px;*/\n  z-index: 103;\n  padding-right: 10px;\n  margin-right: -5px;\n  /*width: 700px;*/\n}\n.srolledHeader .membersContent {\n    line-height: 3;\n}\n.srolled .membersContent {\n    /*top : 0;*/\n    width: 625px;\n    padding-left: 327px;\n    margin : 0 auto 0 auto;\n}\n\n.srolled ul.nav {\n    padding-right: 10px;\n}\n\n.membersBackground {\n/*    background-color: white;\n    position: fixed;\n    z-index: 2;\n    top: 40px;\n    left: 0px;\n    right: 0px;\n    width: 100%;\n    height: 55px;\n    opacity: 0;\n    display: none;\n    box-shadow: rgba(0, 0, 0, 0.398438) 1px 4px 6px;*/\n\n    background-color: transparent;\n    height: 47px;\n    /*width: 700px;*/\n    position: absolute;\n}\n.srolled .membersBackground {\n    position: relative;\n}\n.srolledHeader .membersBackground {\n/*    display: block;*/\n}\n.memberHeader {\n    float: left;\n    padding-right: 10px;\n    margin-bottom: 5px;\n    position: absolute;\n    padding-top: 4px;\n\n}\n\nul.tabs li:first-child ul{\n    left: -63px;\n}\n\n.tabs a.menu:after, .tabs .dropdown-toggle:after {\n    margin-top: 22px;\n}\n\n.nav .dropdown-toggle .caret  {\n    margin-top: 12px;\n    border-top-color: #6D8CA0;\n    border-bottom-color: #6D8CA0;\n}\n\nli.dropdown {\n    color: #2D2D2D;\n    font-weight: bold;\n}\n\n.editInC9 {\n    font-size: 11px;\n    color: #657383;\n}\n\n.editInC9 a {\n    color: #657383;\n    font-weight: normal;\n    position : relative;\n    top : -2px;\n}\n\n.tabs {\n    padding-top: 14px;\n    /*border-bottom: 1px solid #848484;*/\n    min-height : 27px;\n    padding-bottom : 5px;\n}\n.tabsSansBorder {\n    border: 0;\n}\n.tabs, .pills {\n    margin-bottom: 0;\n}\n.srolledHeader .members .tabs {\n    background-color: white;\n}\n\nli.dropdown {\n    color: #2D2D2D;\n    font-weight: bold;\n}\n\n.members .tabs .dropdown a,\n.members .tabs a.menu:after, \n.members .tabs .dropdown-toggle:after {\n    margin-right: 0;\n    margin-left: 6px;\n}\n\n.memberLink a {\n    margin-left: 0 !important;\n}\n.menu-dropdown {\n    min-width : 105px;\n    max-height: 350px;\n    overflow: auto;\n    border-color : rgba(0, 0, 0, 0.1);\n}\n.topbar div > ul .menu-dropdown li a:hover,\n.nav .menu-dropdown li a:hover,\n.topbar div > ul .dropdown-menu li a:hover,\n.nav .dropdown-menu li a:hover {\n    background-color: #ffffff;\n    color: #000000;\n}\n\n.tabs a.menu:after, .tabs .dropdown-toggle:after {\n    margin-top: 13px;\n    line-height: 28px;\n}\n.open .menu, .dropdown.open .menu, .open .dropdown-toggle, .dropdown.open .dropdown-toggle  {\n    background: transparent;\n    color: black;\n/*    font-weight: bold;*/\n}\n#topSection .open .menu, #topSection .dropdown.open .menu, #topSection .open .dropdown-toggle, \n#topSection .dropdown.open .dropdown-toggle  {\n    color: #bfbfbf;\n}\n\n.tabs > li {\n    font-weight: bold;\n}\n\n.tabs > li > a {\n    border: none;\n    outline: none;\n    line-height: 28px;\n    font-size: 11px;\n    padding: 0 5px;\n}\n.tabs > li > a:hover {\n    color: #000000;\n    text-decoration: none;\n    background-color: transparent;\n    border: none;\n}\n.tabs > li, .pills > li {\n    float: right;\n}\n.topbar .dropdown-menu a, .dropdown-menu a {\n    font-size: 11px;\n/*    padding: 2px 12px;*/\n    line-height: 14px;\n}\n.tabs .active > a, .tabs .active > a:hover {\n    color: #000000;\n    border: none;\n    cursor: default;\n}\n.tabs .menu-dropdown, .tabs .dropdown-menu {\n    border-radius: 0 0 6px 6px;\n    left: 10px;\n    width: 160px;\n}\n.srolled .tabs .menu-dropdown, .srolled .tabs .dropdown-menu {\n    top: 32px;\n}\n.dropdown-toggle {\n    color: #6D8CA0;\n}\n\nul.tabs .double ul, ul.tabs .triple ul, ul.tabs .quad ul{\n    width:760px;\n    margin-bottom:20px;\n    overflow:hidden;\n    border-top:1px solid #ccc;\n}\n/*ul.tabs .double li, ul.tabs .triple li, ul.tabs .quad li{\n    line-height:1.5em;\n    border-bottom:1px solid #ccc;\n    float:left;\n    display:inline;\n}*/\n\n/*\n  Center content (the \"real stuff\")\n*/\n\n#nonFooter {\n    padding-top: 40px;\n}\n#wrapper {\n    height: 100%;\n}\n\n.content {\n    height: 100%;\n}\n\nheader.filler {\n    position: relative;\n    height: 40px;\n    width: 100%;\n}\n\n/*\n.container-fluid .row-fluid {\n    width: 1000px;\n    margin-left: auto;\n    margin-right: auto;\n}*/\n\n.divider {\n    height: 3px;\n    background-color: #BEDAEA;\n    margin-bottom: 3px;\n}\n\n#sidebar h3 a,\n#sidebar h3 a:hover {\n    color: #404040;\n}\n\n#sidebarContainer {\n    padding-top: 20px;\n}\n\n#mainContent {\n    margin-left: 30px;\n}\n\n#documentation {\n    padding-top: 35px;\n    padding-bottom: 10px;\n}\n\n#documentation article.article {\n    border-top: 1px solid #e9e9e9;\n    padding: 16px 10px 2px;\n    -webkit-transition: padding 0.2s;\n    -moz-transition: padding 0.2s;\n    -o-transition: padding 0.2s;\n}\n\n#documentation h3.sectionHeader + article.article {\n    border-top: none;\n}\n\ndiv#documentation article:last-child {\n    border-bottom: 1px solid #e9e9e9;\n    padding-bottom: 40px;\n}\n#documentation article.article.methodToggleOpen {\n    background: rgba(255, 255, 255, 0.5);\n    font-size: 13px;\n    line-height: 24px;\n    margin: 0 0 10px 0;\n}\n\n#documentation article:first-child {\n    border:none;\n}\n\n.site_logo {\n    display: block;  \n    margin-left: auto;   \n    margin-right: auto;\n}\n/*\n    Edit in Cloud9, sucka\n*/\n\n.snippet pre {\n    margin-bottom: 0;\n}\n\n.snippet .toolbar {\n    -webkit-border-radius: 0 0 6px 6px;\n    -moz-border-radius: 0 0 6px 6px;\n    border-radius: 0 0 6px 6px;\n    \n    text-align: right;\n    padding: 3px 10px;\n    margin-top : -1px;\n}\n\n.snippet .filename, .snippet .toolbar {\n    font-family: Ubuntu, sans-serif;\n    font-size: 12px;\n    color: #EEE;\n}\n\n.snippet .filename {\n    padding: 0 5px 2px 5px;\n    font-size: 10px;\n    background: rgba(230,230,230,0.5);\n    padding: 0 5px 2px 5px;\n    border-radius: 0 6px 0 6px;\n    margin : 1px;\n    position : absolute;\n    right : 0;\n    top : 0;\n}\n\n.snippet .filename span{\n    color : #666;\n}\n\n.snippet .toolbar {\n    background-color: rgba(30,30,30,0.5);\n}\n\ndiv.snippet {\n    margin-bottom: 18px;\n    position : relative;\n}\n\ndiv.snippet a, div.toolbar a {\n    color: #FFF;\n}\n\n/*\n  All about signatures\n*/\n\n.signatures {\n/*    width: 800px;*/\n    margin-left: 20px;\n    margin-bottom: 5px;\n}\n.sideToggler {\n    padding-left: 20px;\n}\nul.signatures ul {\n    list-style: none;\n    display: inline;\n}\n\nli.signature {\n    list-style: none;\n}\n\n.signature ul {\n    padding: 0;\n    margin: 0;\n}\n\n.signature li {\n    display: inline;\n}\n\n.signature ul.argument-types::before {\n    content: '→';\n    margin: 0 5px;\n}\n\n.signature li.argument-type::after {\n    content: '|';\n    padding: 0 5px 0 5px;\n}\n\n.signature li.argument-type:last-child:after {\n    content: '';\n    padding: 0 5px 0 5px;\n}\n\n.member-name {\n    color: #4397cd;\n    font-weight: bold;\n    text-decoration: none;\n    cursor: pointer;\n    padding-right: 3px;\n}\n\n.signature-call {\n    cursor: pointer;\n}\n\n#documentation .signature-call a {\n    color: #8e487e;\n}\n\n.sigClassName {\n    display: none;\n}\n\n.eventObjName {\n    font-style: italic;\n}\n.eventListenerStart, .eventListenerClose, .eventFunctionOpen, .eventFunctionClose {\n    color: #999999;\n}\n.eventMember {\n    padding-right: 0px;\n}\n\n.metaInfo {\n    float: right;\n    z-index: 1;\n    position: relative;\n}\n\n.chainable {\n    background-color: #0072bc;\n    color: #ffffff;\n}\n\n.deprecated {\n    background-color: #f7941d;\n    color: #ffffff;\n}\n\n.alias {\n    background-color: #6c951e;\n    color: #ffffff;\n}\n\n.related-to {\n    background-color: #89289a;\n    color: #ffffff;\n    font-size: 10px;\n    padding: 2px 5px 3px;\n    text-transform: capitalize;\n}\n\n.undocumented {\n    background-color: #B94A48;\n    color: #ffffff;\n}\n\n#documentation .alias a, #documentation .related-to a {\n    color: #ffffff;\n    /* text-decoration: underline; */ \n}\n#documentation .alias a:hover, #documentation .related-to a:hover {\n    text-decoration: none;\n}\n.#documentation alias:hover, #documentation .related-to:hover {\n    opacity: 0.8;\n    cursor: pointer;\n}\n.memberContent .title {\n    \n}\n.memberContent .description {\n    position:relative;\n    /*top: -13px;*/\n    display: none;\n}\n.snip-container .actions .toggle-plaintext label {\n    margin-top: 1px;\n    padding-top: 0;\n    text-align: left;\n}\n.snip-container .actions .toggle-plaintext input {\n    margin-top: 4px !important;\n}\n.snip-container label {\n    color: #ffffff;\n}\n.description h4 {\n    padding-top: 10px;\n    font-size: 18px;\n    line-height : 18px;\n}\n\n.table-striped tbody tr:nth-child(odd) td, .table-striped tbody tr:nth-child(odd) th {\n    background-color: #F9F9F9;\n}\n.table-striped tbody tr:nth-child(even) td, .table-striped tbody tr:nth-child(even) th {\n    background-color: #fbfbfb;\n} \n\n.argument-list {\n    margin-bottom : 13px;\n}\n.argName {\n    font-style: italic;\n}\n\n\n/*\n  Everyday I'm togglin'\n*/\n\n#documentation i.methodToggle {\n    cursor: pointer;\n    color: #9f9f9f;\n    padding-top: 2px;\n    float: left;\n}\n#documentation i.methodToggle.methodToggleHover {\n    text-shadow: 0 0 10px #4699d5;\n    color: #4699d5;\n}\n#documentation i.methodToggle.active {\n    text-shadow: 0 0 10px #4699d5;\n    color: #4699d5;\n    /* Safari */\n    -webkit-transform: rotate(45deg);\n    \n    /* Firefox */\n    -moz-transform: rotate(45deg);\n    \n    /* IE */\n    -ms-transform: rotate(45deg);\n    \n    /* Opera */\n    -o-transform: rotate(45deg);\n    padding-top: 9px;\n}\n\n#documentation h3.sectionHeader {\n    line-height : 24px;\n}\n\ndiv.method {\n    position: relative;\n}\n\n.methodToggle a {\n    color: #fff;\n    border-bottom: 0px;\n    text-decoration: none;\n}\n\nh3.methodToggle {\n    height               : 13px; \n    width                : 8px; \n    background-position  : 0px 0px; \n    position: absolute;\n    top: -20px;\n    background-image     : url(../images/member-sprites.png); \n    background-color     : transparent; \n    background-repeat    : no-repeat; \n    overflow: hidden;\n    left: 0px;\n}\n\nh3.methodToggleHover {\n    /* background-position  : 0px -28px; */\n}\n\nh3.methodToggle.inactive {\n    top: 4px;\n}\n\nh3.methodToggle.active {\n    top:                  6px;\n    height               : 13px; \n    width                : 8px; \n    background-position  : 0px -59px; \n} \n\n.hidden {\n    display: none;\n    visibility: hidden;\n}\n\n.hiddenSpan {\n    display: none;\n}\n\n.ellipsis_description, .short_description {\n/*    width: 800px;*/\n}\n.methodToggleOpen .ellipsis_description {\n    display: none;\n}\n.sideToggler .short_description,\n.sideToggler .description{\n    display: none;\n}\n.methodToggleOpen .short_description,\n.methodToggleOpen .description {\n    display: block;\n}\n.description td p {\n    margin: 0;\n}\n/*\n  Footer? I hardly know her\n*/\n\n#footer {\n    width:100%;\n    background: #101010 url(../images/dashed_back.png) repeat 0 0;\n    font-size: 12px;\n    color: white;\n    height: 40px;\n}\n#footer .footerInner {\n    padding-left: 300px;\n    margin-left: auto;\n    margin-right: auto;\n    min-height: 40px;\n}\n#footer .footer-text {\n    display: block;\n    font-size: 12px;\n    float: right;\n}\n#footer div.footerInner div.footer-text p {\n    font-size: 12px;\n    font-family: Arial;\n    line-height: 18px;\n    margin: 10px 15px 0px 1px;\n}\n\n#footer a, #footer a:hover {\n    color: #8DD0FF;\n}\n\n.logoText, .logoImg {\n    /*position: absolute;*/\n    margin-bottom: 5px;\n}\n\n.logoImg {\n    top: 40px;\n}\n.topbar div > ul .menu-dropdown li a:hover,\n.nav .menu-dropdown li a:hover,\n.topbar div > ul .dropdown-menu li a:hover,\n.nav .dropdown-menu li a:hover {\n  background-color: #191919;\n  background-repeat: repeat-x;\n  background-image: -khtml-gradient(linear, left top, left bottom, from(#292929), to(#191919));\n  background-image: -moz-linear-gradient(top, #292929, #191919);\n  background-image: -ms-linear-gradient(top, #292929, #191919);\n  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #292929), color-stop(100%, #191919));\n  background-image: -webkit-linear-gradient(top, #292929, #191919);\n  background-image: -o-linear-gradient(top, #292929, #191919);\n  background-image: linear-gradient(top, #292929, #191919);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#292929', endColorstr='#191919', GradientType=0);\n  color: #ffffff;\n}\n\n.alert-message.block-message {\n    background: #fefaca;\n    border-color : #fefaca;\n    padding : 8px 14px 8px 14px;\n}\n\nbody .dsq-reply{\n    margin-top : 10px;\n}\n\n#disqus_thread{\n    border-top : 1px solid #ddd;\n    margin-top : 30px;\n}\n\n#disqus_thread h3, body #dsq-content h3 {\n    font-size : 12px;\n    margin : 0 0 20px 0;\n    line-height : 12px;\n}\nbody #dsq-reply h3{\n    font-size : 18px;\n    line-height : 18px;\n    margin : 15px 0 20px 0;\n}\n\n#disqus_thread select{\n    font-size : 11px;\n    height : 20px;\n    color : #444;\n}\n\n#dsq-global-toolbar, #dsq-pagination, .dsq-trackback-url{\n    display : none;\n}\n"
  },
  {
    "path": "api/resources/javascripts/bbq.js",
    "content": "/*\n * jQuery BBQ: Back Button & Query Library - v1.2.1 - 2/17/2010\n * http://benalman.com/projects/jquery-bbq-plugin/\n * \n * Copyright (c) 2010 \"Cowboy\" Ben Alman\n * Dual licensed under the MIT and GPL licenses.\n * http://benalman.com/about/license/\n */\n(function($,p){var i,m=Array.prototype.slice,r=decodeURIComponent,a=$.param,c,l,v,b=$.bbq=$.bbq||{},q,u,j,e=$.event.special,d=\"hashchange\",A=\"querystring\",D=\"fragment\",y=\"elemUrlAttr\",g=\"location\",k=\"href\",t=\"src\",x=/^.*\\?|#.*$/g,w=/^.*\\#/,h,C={};function E(F){return typeof F===\"string\"}function B(G){var F=m.call(arguments,1);return function(){return G.apply(this,F.concat(m.call(arguments)))}}function n(F){return F.replace(/^[^#]*#?(.*)$/,\"$1\")}function o(F){return F.replace(/(?:^[^?#]*\\?([^#]*).*$)?.*/,\"$1\")}function f(H,M,F,I,G){var O,L,K,N,J;if(I!==i){K=F.match(H?/^([^#]*)\\#?(.*)$/:/^([^#?]*)\\??([^#]*)(#?.*)/);J=K[3]||\"\";if(G===2&&E(I)){L=I.replace(H?w:x,\"\")}else{N=l(K[2]);I=E(I)?l[H?D:A](I):I;L=G===2?I:G===1?$.extend({},I,N):$.extend({},N,I);L=a(L);if(H){L=L.replace(h,r)}}O=K[1]+(H?\"#\":L||!K[1]?\"?\":\"\")+L+J}else{O=M(F!==i?F:p[g][k])}return O}a[A]=B(f,0,o);a[D]=c=B(f,1,n);c.noEscape=function(G){G=G||\"\";var F=$.map(G.split(\"\"),encodeURIComponent);h=new RegExp(F.join(\"|\"),\"g\")};c.noEscape(\",/\");$.deparam=l=function(I,F){var H={},G={\"true\":!0,\"false\":!1,\"null\":null};$.each(I.replace(/\\+/g,\" \").split(\"&\"),function(L,Q){var K=Q.split(\"=\"),P=r(K[0]),J,O=H,M=0,R=P.split(\"][\"),N=R.length-1;if(/\\[/.test(R[0])&&/\\]$/.test(R[N])){R[N]=R[N].replace(/\\]$/,\"\");R=R.shift().split(\"[\").concat(R);N=R.length-1}else{N=0}if(K.length===2){J=r(K[1]);if(F){J=J&&!isNaN(J)?+J:J===\"undefined\"?i:G[J]!==i?G[J]:J}if(N){for(;M<=N;M++){P=R[M]===\"\"?O.length:R[M];O=O[P]=M<N?O[P]||(R[M+1]&&isNaN(R[M+1])?{}:[]):J}}else{if($.isArray(H[P])){H[P].push(J)}else{if(H[P]!==i){H[P]=[H[P],J]}else{H[P]=J}}}}else{if(P){H[P]=F?i:\"\"}}});return H};function z(H,F,G){if(F===i||typeof F===\"boolean\"){G=F;F=a[H?D:A]()}else{F=E(F)?F.replace(H?w:x,\"\"):F}return l(F,G)}l[A]=B(z,0);l[D]=v=B(z,1);$[y]||($[y]=function(F){return $.extend(C,F)})({a:k,base:k,iframe:t,img:t,input:t,form:\"action\",link:k,script:t});j=$[y];function s(I,G,H,F){if(!E(H)&&typeof H!==\"object\"){F=H;H=G;G=i}return this.each(function(){var L=$(this),J=G||j()[(this.nodeName||\"\").toLowerCase()]||\"\",K=J&&L.attr(J)||\"\";L.attr(J,a[I](K,H,F))})}$.fn[A]=B(s,A);$.fn[D]=B(s,D);b.pushState=q=function(I,F){if(E(I)&&/^#/.test(I)&&F===i){F=2}var H=I!==i,G=c(p[g][k],H?I:{},H?F:2);p[g][k]=G+(/#/.test(G)?\"\":\"#\")};b.getState=u=function(F,G){return F===i||typeof F===\"boolean\"?v(F):v(G)[F]};b.removeState=function(F){var G={};if(F!==i){G=u();$.each($.isArray(F)?F:arguments,function(I,H){delete G[H]})}q(G,2)};e[d]=$.extend(e[d],{add:function(F){var H;function G(J){var I=J[D]=c();J.getState=function(K,L){return K===i||typeof K===\"boolean\"?l(I,K):l(I,L)[K]};H.apply(this,arguments)}if($.isFunction(F)){H=F;return G}else{H=F.handler;F.handler=G}}})})(jQuery,this);\n/*\n * jQuery hashchange event - v1.2 - 2/11/2010\n * http://benalman.com/projects/jquery-hashchange-plugin/\n * \n * Copyright (c) 2010 \"Cowboy\" Ben Alman\n * Dual licensed under the MIT and GPL licenses.\n * http://benalman.com/about/license/\n */\n(function($,i,b){var j,k=$.event.special,c=\"location\",d=\"hashchange\",l=\"href\",f=$.browser,g=document.documentMode,h=f.msie&&(g===b||g<8),e=\"on\"+d in i&&!h;function a(m){m=m||i[c][l];return m.replace(/^[^#]*#?(.*)$/,\"$1\")}$[d+\"Delay\"]=100;k[d]=$.extend(k[d],{setup:function(){if(e){return false}$(j.start)},teardown:function(){if(e){return false}$(j.stop)}});j=(function(){var m={},r,n,o,q;function p(){o=q=function(s){return s};if(h){n=$('<iframe src=\"javascript:0\"/>').hide().insertAfter(\"body\")[0].contentWindow;q=function(){return a(n.document[c][l])};o=function(u,s){if(u!==s){var t=n.document;t.open().close();t[c].hash=\"#\"+u}};o(a())}}m.start=function(){if(r){return}var t=a();o||p();(function s(){var v=a(),u=q(t);if(v!==t){o(t=v,u);$(i).trigger(d)}else{if(u!==t){i[c][l]=i[c][l].replace(/#.*/,\"\")+\"#\"+u}}r=setTimeout(s,$[d+\"Delay\"])})()};m.stop=function(){if(!n){r&&clearTimeout(r);r=0}};return m})()})(jQuery,this);"
  },
  {
    "path": "api/resources/javascripts/bootstrap.js",
    "content": "/* ============================================================\n * bootstrap-dropdown.js v2.1.1\n * http://twitter.github.com/bootstrap/javascript.html#dropdowns\n * ============================================================\n * Copyright 2012 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ============================================================ */\n\n\n!function ($) {\n\n  \"use strict\"; // jshint ;_;\n\n\n /* DROPDOWN CLASS DEFINITION\n  * ========================= */\n\n  var toggle = '[data-toggle=dropdown]'\n    , Dropdown = function (element) {\n        var $el = $(element).on('click.dropdown.data-api', this.toggle)\n        $('html').on('click.dropdown.data-api', function () {\n          $el.parent().removeClass('open')\n        })\n      }\n\n  Dropdown.prototype = {\n\n    constructor: Dropdown\n\n  , toggle: function (e) {\n      var $this = $(this)\n        , $parent\n        , isActive\n\n      if ($this.is('.disabled, :disabled')) return\n\n      $parent = getParent($this)\n\n      isActive = $parent.hasClass('open')\n\n      clearMenus()\n\n      if (!isActive) {\n        $parent.toggleClass('open')\n        $this.focus()\n      }\n\n      return false\n    }\n\n  , keydown: function (e) {\n      var $this\n        , $items\n        , $active\n        , $parent\n        , isActive\n        , index\n\n      if (!/(38|40|27)/.test(e.keyCode)) return\n\n      $this = $(this)\n\n      e.preventDefault()\n      e.stopPropagation()\n\n      if ($this.is('.disabled, :disabled')) return\n\n      $parent = getParent($this)\n\n      isActive = $parent.hasClass('open')\n\n      if (!isActive || (isActive && e.keyCode == 27)) return $this.click()\n\n      $items = $('[role=menu] li:not(.divider) a', $parent)\n\n      if (!$items.length) return\n\n      index = $items.index($items.filter(':focus'))\n\n      if (e.keyCode == 38 && index > 0) index--                                        // up\n      if (e.keyCode == 40 && index < $items.length - 1) index++                        // down\n      if (!~index) index = 0\n\n      $items\n        .eq(index)\n        .focus()\n    }\n\n  }\n\n  function clearMenus() {\n    getParent($(toggle))\n      .removeClass('open')\n  }\n\n  function getParent($this) {\n    var selector = $this.attr('data-target')\n      , $parent\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, '') //strip for ie7\n    }\n\n    $parent = $(selector)\n    $parent.length || ($parent = $this.parent())\n\n    return $parent\n  }\n\n\n  /* DROPDOWN PLUGIN DEFINITION\n   * ========================== */\n\n  $.fn.dropdown = function (option) {\n    return this.each(function () {\n      var $this = $(this)\n        , data = $this.data('dropdown')\n      if (!data) $this.data('dropdown', (data = new Dropdown(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  $.fn.dropdown.Constructor = Dropdown\n\n\n  /* APPLY TO STANDARD DROPDOWN ELEMENTS\n   * =================================== */\n\n  $(function () {\n    $('html')\n      .on('click.dropdown.data-api touchstart.dropdown.data-api', clearMenus)\n    $('body')\n      .on('click.dropdown touchstart.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })\n      .on('click.dropdown.data-api touchstart.dropdown.data-api'  , toggle, Dropdown.prototype.toggle)\n      .on('keydown.dropdown.data-api touchstart.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown)\n  })\n\n}(window.jQuery);\n/* ========================================================\n * bootstrap-tab.js v2.1.1\n * http://twitter.github.com/bootstrap/javascript.html#tabs\n * ========================================================\n * Copyright 2012 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================== */\n\n\n!function ($) {\n\n  \"use strict\"; // jshint ;_;\n\n\n /* TAB CLASS DEFINITION\n  * ==================== */\n\n  var Tab = function (element) {\n    this.element = $(element)\n  }\n\n  Tab.prototype = {\n\n    constructor: Tab\n\n  , show: function () {\n      var $this = this.element\n        , $ul = $this.closest('ul:not(.dropdown-menu)')\n        , selector = $this.attr('data-target')\n        , previous\n        , $target\n        , e\n\n      if (!selector) {\n        selector = $this.attr('href')\n        selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') //strip for ie7\n      }\n\n      if ( $this.parent('li').hasClass('active') ) return\n\n      previous = $ul.find('.active a').last()[0]\n\n      e = $.Event('show', {\n        relatedTarget: previous\n      })\n\n      $this.trigger(e)\n\n      if (e.isDefaultPrevented()) return\n\n      $target = $(selector)\n\n      this.activate($this.parent('li'), $ul)\n      this.activate($target, $target.parent(), function () {\n        $this.trigger({\n          type: 'shown'\n        , relatedTarget: previous\n        })\n      })\n    }\n\n  , activate: function ( element, container, callback) {\n      var $active = container.find('> .active')\n        , transition = callback\n            && $.support.transition\n            && $active.hasClass('fade')\n\n      function next() {\n        $active\n          .removeClass('active')\n          .find('> .dropdown-menu > .active')\n          .removeClass('active')\n\n        element.addClass('active')\n\n        if (transition) {\n          element[0].offsetWidth // reflow for transition\n          element.addClass('in')\n        } else {\n          element.removeClass('fade')\n        }\n\n        if ( element.parent('.dropdown-menu') ) {\n          element.closest('li.dropdown').addClass('active')\n        }\n\n        callback && callback()\n      }\n\n      transition ?\n        $active.one($.support.transition.end, next) :\n        next()\n\n      $active.removeClass('in')\n    }\n  }\n\n\n /* TAB PLUGIN DEFINITION\n  * ===================== */\n\n  $.fn.tab = function ( option ) {\n    return this.each(function () {\n      var $this = $(this)\n        , data = $this.data('tab')\n      if (!data) $this.data('tab', (data = new Tab(this)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  $.fn.tab.Constructor = Tab\n\n\n /* TAB DATA-API\n  * ============ */\n\n  $(function () {\n    $('body').on('click.tab.data-api', '[data-toggle=\"tab\"], [data-toggle=\"pill\"]', function (e) {\n      e.preventDefault()\n      $(this).tab('show')\n    })\n  })\n\n}(window.jQuery);\n/* ==========================================================\n * bootstrap-affix.js v2.1.1\n * http://twitter.github.com/bootstrap/javascript.html#affix\n * ==========================================================\n * Copyright 2012 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ========================================================== */\n\n\n!function ($) {\n\n  \"use strict\"; // jshint ;_;\n\n\n /* AFFIX CLASS DEFINITION\n  * ====================== */\n\n  var Affix = function (element, options) {\n    this.options = $.extend({}, $.fn.affix.defaults, options)\n    this.$window = $(window).on('scroll.affix.data-api', $.proxy(this.checkPosition, this))\n    this.$element = $(element)\n    this.checkPosition()\n  }\n\n  Affix.prototype.checkPosition = function () {\n    if (!this.$element.is(':visible')) return\n\n    var scrollHeight = $(document).height()\n      , scrollTop = this.$window.scrollTop()\n      , position = this.$element.offset()\n      , offset = this.options.offset\n      , offsetBottom = offset.bottom\n      , offsetTop = offset.top\n      , reset = 'affix affix-top affix-bottom'\n      , affix\n\n    if (typeof offset != 'object') offsetBottom = offsetTop = offset\n    if (typeof offsetTop == 'function') offsetTop = offset.top()\n    if (typeof offsetBottom == 'function') offsetBottom = offset.bottom()\n\n    affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ?\n      false    : offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ?\n      'bottom' : offsetTop != null && scrollTop <= offsetTop ?\n      'top'    : false\n\n    if (this.affixed === affix) return\n\n    this.affixed = affix\n    this.unpin = affix == 'bottom' ? position.top - scrollTop : null\n\n    this.$element.removeClass(reset).addClass('affix' + (affix ? '-' + affix : ''))\n  }\n\n\n /* AFFIX PLUGIN DEFINITION\n  * ======================= */\n\n  $.fn.affix = function (option) {\n    return this.each(function () {\n      var $this = $(this)\n        , data = $this.data('affix')\n        , options = typeof option == 'object' && option\n      if (!data) $this.data('affix', (data = new Affix(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  $.fn.affix.Constructor = Affix\n\n  $.fn.affix.defaults = {\n    offset: 0\n  }\n\n\n /* AFFIX DATA-API\n  * ============== */\n\n  $(window).on('load', function () {\n    $('[data-spy=\"affix\"]').each(function () {\n      var $spy = $(this)\n        , data = $spy.data()\n\n      data.offset = data.offset || {}\n\n      data.offsetBottom && (data.offset.bottom = data.offsetBottom)\n      data.offsetTop && (data.offset.top = data.offsetTop)\n\n      $spy.affix(data)\n    })\n  })\n\n\n}(window.jQuery);"
  },
  {
    "path": "api/resources/javascripts/clicker.js",
    "content": "function setupClicker() {\n  // when hovering over arrow, add highlight (only if inactive)\n  $(\"i.methodToggle\").hover(function () {\n      if (!$(\"i.methodToggle\").hasClass('active'))\n        $(this).addClass(\"methodToggleHover\");\n    },\n    function () {\n      $(this).removeClass(\"methodToggleHover\");\n    }\n  );\n\n  function handleClick(e, linkHref) {\n      //if (linkHref.indexOf(\"nav=api&api=\") >= 0)\n      //  return;\n      if (linkHref == \"api\")\n        return;\n        \n      e.preventDefault();\n      \n      var dstElem;\n      if (linkHref) {\n          dstElem = $(\"article[id='\" + linkHref + \"']\");\n      }\n      \n      var $article = (dstElem || $(this)).closest('.article'),\n          $arrow   = $('i.methodClicker', $article);\n\n      if (!$article.hasClass('methodToggleOpen') || this.force) {\n          $article.addClass('methodToggleOpen');\n          $arrow.removeClass('inactive').addClass('active');\n\n          if (!$arrow[0])\n            return;\n\n          var data = $arrow[0].id.replace(/^js_/, \"\");\n          //var state = {};\n          //state.section = data;\n          //$.bbq.pushState(state);\n          \n          scrollTo(null, data);\n      }\n      else {\n          $article.removeClass('methodToggleOpen');\n          $arrow.removeClass('active').addClass('inactive');\n      }\n  }\n  \n  function transformHash(e) {\n      // some bs to figure out link hash\n      var hashId = (e.srcElement ? e.srcElement.href : (e.hash || e.target.href)) || e.currentTarget.hash;\n      \n      handleClick(e, hashId.substring(hashId.indexOf(\"#\") + 1));\n  }\n  \n  // for the arrow\n  $(\"i.methodToggle\").click(handleClick);\n  \n  // for the signature\n  $('.member-name').click(handleClick);\n  \n  // for the top dropdown\n  $('li.memberLink a').click(transformHash);\n  \n  //$('a[href^=\"#\"]').click(transformHash);\n  \n  $('.related-to', '.metaInfo').click(function(){\n      location.hash = $(this).find('a').attr('href').split('#')[1];\n  });\n}"
  },
  {
    "path": "api/resources/javascripts/disqus-ext.js",
    "content": "function setupDisqus(href) {\n    var disqus_shortname = 'aceapi';\n    \n    //var paths = window.location.pathname.split(\"/\");\n    //var fileName = paths[paths.length - 2] + \"/\" + paths[paths.length - 1];\n    \n    //var disqus_identifier = fileName;\n    var disqus_identifier =  href.substring(2);\n    \n    (function() {\n        if (document.getElementById(\"disqusScript\") === null) {\n            var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;\n            dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';\n            (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);       \n        }\n    })();\n}"
  },
  {
    "path": "api/resources/javascripts/jquery-scrollspy.js",
    "content": "/*!\n * jQuery Scrollspy Plugin\n * Author: @sxalexander\n * Licensed under the MIT license\n */\n\n\n;(function ( $, window, document, undefined ) {\n\n    $.fn.extend({\n      scrollspy: function ( options ) {\n        \n          var defaults = {\n            min: 0,\n            max: 0,\n            mode: 'vertical',\n            buffer: 0,\n            container: window,\n            onEnter: options.onEnter ? options.onEnter : [],\n            onLeave: options.onLeave ? options.onLeave : [],\n            onTick: options.onTick ? options.onTick : []\n          }\n          \n          var options = $.extend( {}, defaults, options );\n\n          return this.each(function (i) {\n\n              var element = this;\n              var o = options;\n              var $container = $(o.container);\n              var mode = o.mode;\n              var buffer = o.buffer;\n              var enters = leaves = 0;\n              var inside = false;\n                            \n              /* add listener to container */\n              $container.bind('scroll', function(e){\n                  var position = {top: $(this).scrollTop(), left: $(this).scrollLeft()};\n                  var xy = (mode == 'vertical') ? position.top + buffer : position.left + buffer;\n                  var max = o.max;\n                  var min = o.min;\n                  \n                  /* fix max */\n                  if($.isFunction(o.max)){\n                    max = o.max();\n                  }\n\n                  /* fix max */\n                  if($.isFunction(o.min)){\n                    min = o.min();\n                  }\n\n                  if(max == 0){\n                      max = (mode == 'vertical') ? $container.height() : $container.outerWidth() + $(element).outerWidth();\n                  }\n                  \n                  /* if we have reached the minimum bound but are below the max ... */\n                  if(xy >= o.min && xy <= max){\n                    /* trigger enter event */\n                    if(!inside){\n                       inside = true;\n                       enters++;\n                       \n                       /* fire enter event */\n                       $(element).trigger('scrollEnter', {position: position})\n                       if($.isFunction(o.onEnter)){\n                         o.onEnter(element, position);\n                       }\n                      \n                     }\n                     \n                     /* triger tick event */\n                     $(element).trigger('scrollTick', {position: position, inside: inside, enters: enters, leaves: leaves})\n                     if($.isFunction(o.onTick)){\n                       o.onTick(element, position, inside, enters, leaves);\n                     }\n                  }else{\n                    \n                    if(inside){\n                      inside = false;\n                      leaves++;\n                      /* trigger leave event */\n                      $(element).trigger('scrollLeave', {position: position, leaves:leaves})\n\n                      if($.isFunction(o.onLeave)){\n                        o.onLeave(element, position);\n                      }\n                    }\n                  }\n              }); \n\n          });\n      }\n\n    })\n\n    \n})( jQuery, window );\n"
  },
  {
    "path": "api/resources/javascripts/jquery.collapse.js",
    "content": "/*!\n * Collapse plugin for jQuery\n * http://github.com/danielstocks/jQuery-Collapse/\n *\n * @author Daniel Stocks (http://webcloud.se)\n * @version 0.9.1\n * @updated 17-AUG-2010\n * \n * Copyright 2010, Daniel Stocks\n * Released under the MIT, BSD, and GPL Licenses.\n */\n \n(function($) {\n    \n    // Use a cookie counter to allow multiple instances of the plugin\n    var cookieCounter = 0;\n    \n    $.fn.extend({\n        collapse: function(options) {\n            \n            var defaults = {\n                head : \"h3\",\n                group : \"div, ul\",\n                cookieName : \"collapse\",\n                // Default function for showing content\n                show: function() { \n                    this.show();\n                },\n                // Default function for hiding content\n                hide: function() { \n                    this.hide();\n                }\n            };\n            var op = $.extend(defaults, options);\n            \n            // Default CSS classes\n            var active = \"active\",\n                inactive = \"inactive\";\n            \n            return this.each(function() {\n                \n                // Increment coookie counter to ensure cookie name integrity\n                cookieCounter++;\n                var obj = $(this),\n                    // Find all headers and wrap them in <a> for accessibility.\n                    sections = obj.find(op.head).wrapInner('<a href=\"#\"></a>'),\n                    l = sections.length,\n                    cookie = op.cookieName + \"_\" + cookieCounter;\n                    // Locate all panels directly following a header\n                    var panel = obj.find(op.head).map(function() {\n                        var head = $(this)\n                        if(!head.hasClass(active)) {\n                            return head.next(op.group).hide()[0];\n                        }\n                        return head.next(op.group)[0];\n                    });\n    \n                // Bind event for showing content\n                obj.bind(\"show\", function(e, bypass) {\n                    var obj = $(e.target);\n                    // ARIA attribute\n                    obj.attr('aria-hidden', false)\n                        .prev()\n                        .removeClass(inactive)\n                        .addClass(active);\n                    // Bypass method for instant display\n                    if(bypass) {\n                        obj.show();\n                    } else {\n                        op.show.call(obj);\n                    }\n                });\n\n                // Bind event for hiding content\n                obj.bind(\"hide\", function(e, bypass) {\n                    var obj = $(e.target);\n                    obj.attr('aria-hidden', true)\n                        .prev()\n                        .removeClass(active)\n                        .addClass(inactive);\n                    if(bypass) {\n                        obj.hide();\n                    } else {\n                        op.hide.call(obj);\n                    }\n                });\n                \n                // Look for existing cookies\n                if(cookieSupport) {\n                    for (var c=0;c<=l;c++) {\n                        var val = $.cookie(cookie + c);\n                        // Show content if associating cookie is found\n                        if ( val == c + \"open\" ) {\n                            panel.eq(c).trigger('show', [true]);\n                        // Hide content\n                        } else if ( val == c + \"closed\") {\n                            panel.eq(c).trigger('hide', [true]);\n                        }\n                    }\n                }\n                \n                // Delegate click event to show/hide content.\n                obj.bind(\"click\", function(e) {\n                    var t = $(e.target);\n                    // Check if header was clicked\n                    if(!t.is(op.head)) {\n                        // What about link inside header.\n                        if ( t.parent().is(op.head) ) {\n                            t = t.parent();\n                        } else {\n                            return;\n                        }\n                        e.preventDefault();\n                    }\n                    // Figure out what position the clicked header has.\n                    var num = sections.index(t),\n                        cookieName = cookie + num,\n                        cookieVal = num,\n                        content = t.next(op.group);\n                    // If content is already active, hide it.\n                    if(t.hasClass(active)) {\n                        content.trigger('hide');\n                        cookieVal += 'closed';\n                        if(cookieSupport) {\n                            $.cookie(cookieName, cookieVal, { path: '/', expires: 10 });\n                        }\n                        return;\n                    }\n                    // Otherwise show it.\n                    content.trigger('show');\n                    cookieVal += 'open';\n                    if(cookieSupport) {\n                        $.cookie(cookieName, cookieVal, { path: '/', expires: 10 });\n                    }\n                });\n            });\n        }\n    });\n\n    // Make sure can we eat cookies without getting into trouble.\n    var cookieSupport = (function() {\n        try {\n            $.cookie('x', 'x', { path: '/', expires: 10 });\n            $.cookie('x', null);\n        }\n        catch(e) {\n            return false;\n        }\n        return true;\n    })();\n})(jQuery);"
  },
  {
    "path": "api/resources/javascripts/jquery.cookie.js",
    "content": "/**\n * Cookie plugin\n *\n * Copyright (c) 2006 Klaus Hartl (stilbuero.de)\n * Dual licensed under the MIT and GPL licenses:\n * http://www.opensource.org/licenses/mit-license.php\n * http://www.gnu.org/licenses/gpl.html\n *\n */\n\n/**\n * Create a cookie with the given name and value and other optional parameters.\n *\n * @example $.cookie('the_cookie', 'the_value');\n * @desc Set the value of a cookie.\n * @example $.cookie('the_cookie', 'the_value', { expires: 7, path: '/', domain: 'jquery.com', secure: true });\n * @desc Create a cookie with all available options.\n * @example $.cookie('the_cookie', 'the_value');\n * @desc Create a session cookie.\n * @example $.cookie('the_cookie', null);\n * @desc Delete a cookie by passing null as value. Keep in mind that you have to use the same path and domain\n *       used when the cookie was set.\n *\n * @param String name The name of the cookie.\n * @param String value The value of the cookie.\n * @param Object options An object literal containing key/value pairs to provide optional cookie attributes.\n * @option Number|Date expires Either an integer specifying the expiration date from now on in days or a Date object.\n *                             If a negative value is specified (e.g. a date in the past), the cookie will be deleted.\n *                             If set to null or omitted, the cookie will be a session cookie and will not be retained\n *                             when the the browser exits.\n * @option String path The value of the path atribute of the cookie (default: path of page that created the cookie).\n * @option String domain The value of the domain attribute of the cookie (default: domain of page that created the cookie).\n * @option Boolean secure If true, the secure attribute of the cookie will be set and the cookie transmission will\n *                        require a secure protocol (like HTTPS).\n * @type undefined\n *\n * @name $.cookie\n * @cat Plugins/Cookie\n * @author Klaus Hartl/klaus.hartl@stilbuero.de\n */\n\n/**\n * Get the value of a cookie with the given name.\n *\n * @example $.cookie('the_cookie');\n * @desc Get the value of a cookie.\n *\n * @param String name The name of the cookie.\n * @return The value of the cookie.\n * @type String\n *\n * @name $.cookie\n * @cat Plugins/Cookie\n * @author Klaus Hartl/klaus.hartl@stilbuero.de\n */\njQuery.cookie = function(name, value, options) {\n    if (typeof value != 'undefined') { // name and value given, set cookie\n        options = options || {};\n        if (value === null) {\n            value = '';\n            options.expires = -1;\n        }\n        var expires = '';\n        if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {\n            var date;\n            if (typeof options.expires == 'number') {\n                date = new Date();\n                date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));\n            } else {\n                date = options.expires;\n            }\n            expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE\n        }\n        // CAUTION: Needed to parenthesize options.path and options.domain\n        // in the following expressions, otherwise they evaluate to undefined\n        // in the packed version for some reason...\n        var path = options.path ? '; path=' + (options.path) : '';\n        var domain = options.domain ? '; domain=' + (options.domain) : '';\n        var secure = options.secure ? '; secure' : '';\n        document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');\n    } else { // only name given, get cookie\n        var cookieValue = null;\n        if (document.cookie && document.cookie != '') {\n            var cookies = document.cookie.split(';');\n            for (var i = 0; i < cookies.length; i++) {\n                var cookie = jQuery.trim(cookies[i]);\n                // Does this cookie string begin with the name we want?\n                if (cookie.substring(0, name.length + 1) == (name + '=')) {\n                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));\n                    break;\n                }\n            }\n        }\n        return cookieValue;\n    }\n};"
  },
  {
    "path": "api/resources/javascripts/plugins.js",
    "content": "window.log=function(){log.history=log.history||[];log.history.push(arguments);if(this.console){arguments.callee=arguments.callee.caller;var a=[].slice.call(arguments);(typeof console.log===\"object\"?log.apply.call(console.log,console,a):console.log.apply(console,a))}};\n(function(b){function c(){}for(var d=\"assert,count,debug,dir,dirxml,error,exception,group,groupCollapsed,groupEnd,info,log,timeStamp,profile,profileEnd,time,timeEnd,trace,warn\".split(\",\"),a;a=d.pop();){b[a]=b[a]||c}})((function(){try\n{console.log();return window.console;}catch(err){return window.console={};}})());\n\n/*\n * jQuery throttle / debounce - v1.1 - 3/7/2010\n * http://benalman.com/projects/jquery-throttle-debounce-plugin/\n * \n * Copyright (c) 2010 \"Cowboy\" Ben Alman\n * Dual licensed under the MIT and GPL licenses.\n * http://benalman.com/about/license/\n */\n(function(b,c){var $=b.jQuery||b.Cowboy||(b.Cowboy={}),a;$.throttle=a=function(e,f,j,i){var h,d=0;if(typeof f!==\"boolean\"){i=j;j=f;f=c}function g(){var o=this,m=+new Date()-d,n=arguments;function l(){d=+new Date();j.apply(o,n)}function k(){h=c}if(i&&!h){l()}h&&clearTimeout(h);if(i===c&&m>e){l()}else{if(f!==true){h=setTimeout(i?k:l,i===c?e-m:e)}}}if($.guid){g.guid=j.guid=j.guid||$.guid++}return g};$.debounce=function(d,e,f){return f===c?a(d,e,false):a(d,f,e!==false)}})(this);\n"
  },
  {
    "path": "api/resources/javascripts/prettify-extension.js",
    "content": "// Stolen from StackOverflow. Find all </code><pre><code> \n// elements on the page and add the \"prettyprint\" style. If at least one \n// prettyprint element was found, call the Google Prettify prettyPrint() API.\n//http://sstatic.net/so/js/master.js?v=6523\nfunction styleCode() \n{\n    if (typeof disableStyleCode != \"undefined\") \n    {\n        return;\n    }\n\n    var a = false;\n\n    $(\"pre code\").parent().each(function() \n    {\n        if (!$(this).hasClass(\"prettyprint\")) \n        {\n            $(this).addClass(\"prettyprint\");\n            a = true\n        }\n    });\n    \n    if (a) { prettyPrint() } \n}"
  },
  {
    "path": "api/resources/javascripts/prettify.js",
    "content": "var q=null;window.PR_SHOULD_USE_CONTINUATION=!0;\n(function(){function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92)return f;var b=a.charAt(1);return(f=r[b])?f:\"0\"<=b&&b<=\"7\"?parseInt(a.substring(1),8):b===\"u\"||b===\"x\"?parseInt(a.substring(2),16):a.charCodeAt(1)}function e(a){if(a<32)return(a<16?\"\\\\x0\":\"\\\\x\")+a.toString(16);a=String.fromCharCode(a);if(a===\"\\\\\"||a===\"-\"||a===\"[\"||a===\"]\")a=\"\\\\\"+a;return a}function h(a){for(var f=a.substring(1,a.length-1).match(/\\\\u[\\dA-Fa-f]{4}|\\\\x[\\dA-Fa-f]{2}|\\\\[0-3][0-7]{0,2}|\\\\[0-7]{1,2}|\\\\[\\S\\s]|[^\\\\]/g),a=\n[],b=[],o=f[0]===\"^\",c=o?1:0,i=f.length;c<i;++c){var j=f[c];if(/\\\\[bdsw]/i.test(j))a.push(j);else{var j=m(j),d;c+2<i&&\"-\"===f[c+1]?(d=m(f[c+2]),c+=2):d=j;b.push([j,d]);d<65||j>122||(d<65||j>90||b.push([Math.max(65,j)|32,Math.min(d,90)|32]),d<97||j>122||b.push([Math.max(97,j)&-33,Math.min(d,122)&-33]))}}b.sort(function(a,f){return a[0]-f[0]||f[1]-a[1]});f=[];j=[NaN,NaN];for(c=0;c<b.length;++c)i=b[c],i[0]<=j[1]+1?j[1]=Math.max(j[1],i[1]):f.push(j=i);b=[\"[\"];o&&b.push(\"^\");b.push.apply(b,a);for(c=0;c<\nf.length;++c)i=f[c],b.push(e(i[0])),i[1]>i[0]&&(i[1]+1>i[0]&&b.push(\"-\"),b.push(e(i[1])));b.push(\"]\");return b.join(\"\")}function y(a){for(var f=a.source.match(/\\[(?:[^\\\\\\]]|\\\\[\\S\\s])*]|\\\\u[\\dA-Fa-f]{4}|\\\\x[\\dA-Fa-f]{2}|\\\\\\d+|\\\\[^\\dux]|\\(\\?[!:=]|[()^]|[^()[\\\\^]+/g),b=f.length,d=[],c=0,i=0;c<b;++c){var j=f[c];j===\"(\"?++i:\"\\\\\"===j.charAt(0)&&(j=+j.substring(1))&&j<=i&&(d[j]=-1)}for(c=1;c<d.length;++c)-1===d[c]&&(d[c]=++t);for(i=c=0;c<b;++c)j=f[c],j===\"(\"?(++i,d[i]===void 0&&(f[c]=\"(?:\")):\"\\\\\"===j.charAt(0)&&\n(j=+j.substring(1))&&j<=i&&(f[c]=\"\\\\\"+d[i]);for(i=c=0;c<b;++c)\"^\"===f[c]&&\"^\"!==f[c+1]&&(f[c]=\"\");if(a.ignoreCase&&s)for(c=0;c<b;++c)j=f[c],a=j.charAt(0),j.length>=2&&a===\"[\"?f[c]=h(j):a!==\"\\\\\"&&(f[c]=j.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return\"[\"+String.fromCharCode(a&-33,a|32)+\"]\"}));return f.join(\"\")}for(var t=0,s=!1,l=!1,p=0,d=a.length;p<d;++p){var g=a[p];if(g.ignoreCase)l=!0;else if(/[a-z]/i.test(g.source.replace(/\\\\u[\\da-f]{4}|\\\\x[\\da-f]{2}|\\\\[^UXux]/gi,\"\"))){s=!0;l=!1;break}}for(var r=\n{b:8,t:9,n:10,v:11,f:12,r:13},n=[],p=0,d=a.length;p<d;++p){g=a[p];if(g.global||g.multiline)throw Error(\"\"+g);n.push(\"(?:\"+y(g)+\")\")}return RegExp(n.join(\"|\"),l?\"gi\":\"g\")}function M(a){function m(a){switch(a.nodeType){case 1:if(e.test(a.className))break;for(var g=a.firstChild;g;g=g.nextSibling)m(g);g=a.nodeName;if(\"BR\"===g||\"LI\"===g)h[s]=\"\\n\",t[s<<1]=y++,t[s++<<1|1]=a;break;case 3:case 4:g=a.nodeValue,g.length&&(g=p?g.replace(/\\r\\n?/g,\"\\n\"):g.replace(/[\\t\\n\\r ]+/g,\" \"),h[s]=g,t[s<<1]=y,y+=g.length,\nt[s++<<1|1]=a)}}var e=/(?:^|\\s)nocode(?:\\s|$)/,h=[],y=0,t=[],s=0,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=document.defaultView.getComputedStyle(a,q).getPropertyValue(\"white-space\"));var p=l&&\"pre\"===l.substring(0,3);m(a);return{a:h.join(\"\").replace(/\\n$/,\"\"),c:t}}function B(a,m,e,h){m&&(a={a:m,d:a},e(a),h.push.apply(h,a.e))}function x(a,m){function e(a){for(var l=a.d,p=[l,\"pln\"],d=0,g=a.a.match(y)||[],r={},n=0,z=g.length;n<z;++n){var f=g[n],b=r[f],o=void 0,c;if(typeof b===\n\"string\")c=!1;else{var i=h[f.charAt(0)];if(i)o=f.match(i[1]),b=i[0];else{for(c=0;c<t;++c)if(i=m[c],o=f.match(i[1])){b=i[0];break}o||(b=\"pln\")}if((c=b.length>=5&&\"lang-\"===b.substring(0,5))&&!(o&&typeof o[1]===\"string\"))c=!1,b=\"src\";c||(r[f]=b)}i=d;d+=f.length;if(c){c=o[1];var j=f.indexOf(c),k=j+c.length;o[2]&&(k=f.length-o[2].length,j=k-c.length);b=b.substring(5);B(l+i,f.substring(0,j),e,p);B(l+i+j,c,C(b,c),p);B(l+i+k,f.substring(k),e,p)}else p.push(l+i,b)}a.e=p}var h={},y;(function(){for(var e=a.concat(m),\nl=[],p={},d=0,g=e.length;d<g;++d){var r=e[d],n=r[3];if(n)for(var k=n.length;--k>=0;)h[n.charAt(k)]=r;r=r[1];n=\"\"+r;p.hasOwnProperty(n)||(l.push(r),p[n]=q)}l.push(/[\\S\\s]/);y=L(l)})();var t=m.length;return e}function u(a){var m=[],e=[];a.tripleQuotedStrings?m.push([\"str\",/^(?:'''(?:[^'\\\\]|\\\\[\\S\\s]|''?(?=[^']))*(?:'''|$)|\"\"\"(?:[^\"\\\\]|\\\\[\\S\\s]|\"\"?(?=[^\"]))*(?:\"\"\"|$)|'(?:[^'\\\\]|\\\\[\\S\\s])*(?:'|$)|\"(?:[^\"\\\\]|\\\\[\\S\\s])*(?:\"|$))/,q,\"'\\\"\"]):a.multiLineStrings?m.push([\"str\",/^(?:'(?:[^'\\\\]|\\\\[\\S\\s])*(?:'|$)|\"(?:[^\"\\\\]|\\\\[\\S\\s])*(?:\"|$)|`(?:[^\\\\`]|\\\\[\\S\\s])*(?:`|$))/,\nq,\"'\\\"`\"]):m.push([\"str\",/^(?:'(?:[^\\n\\r'\\\\]|\\\\.)*(?:'|$)|\"(?:[^\\n\\r\"\\\\]|\\\\.)*(?:\"|$))/,q,\"\\\"'\"]);a.verbatimStrings&&e.push([\"str\",/^@\"(?:[^\"]|\"\")*(?:\"|$)/,q]);var h=a.hashComments;h&&(a.cStyleComments?(h>1?m.push([\"com\",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,\"#\"]):m.push([\"com\",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\\b|[^\\n\\r]*)/,q,\"#\"]),e.push([\"str\",/^<(?:(?:(?:\\.\\.\\/)*|\\/?)(?:[\\w-]+(?:\\/[\\w-]+)+)?[\\w-]+\\.h|[a-z]\\w*)>/,q])):m.push([\"com\",/^#[^\\n\\r]*/,\nq,\"#\"]));a.cStyleComments&&(e.push([\"com\",/^\\/\\/[^\\n\\r]*/,q]),e.push([\"com\",/^\\/\\*[\\S\\s]*?(?:\\*\\/|$)/,q]));a.regexLiterals&&e.push([\"lang-regex\",/^(?:^^\\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|,|-=|->|\\/|\\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\\^=|\\^\\^|\\^\\^=|{|\\||\\|=|\\|\\||\\|\\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*(\\/(?=[^*/])(?:[^/[\\\\]|\\\\[\\S\\s]|\\[(?:[^\\\\\\]]|\\\\[\\S\\s])*(?:]|$))+\\/)/]);(h=a.types)&&e.push([\"typ\",h]);a=(\"\"+a.keywords).replace(/^ | $/g,\n\"\");a.length&&e.push([\"kwd\",RegExp(\"^(?:\"+a.replace(/[\\s,]+/g,\"|\")+\")\\\\b\"),q]);m.push([\"pln\",/^\\s+/,q,\" \\r\\n\\t\\xa0\"]);e.push([\"lit\",/^@[$_a-z][\\w$@]*/i,q],[\"typ\",/^(?:[@_]?[A-Z]+[a-z][\\w$@]*|\\w+_t\\b)/,q],[\"pln\",/^[$_a-z][\\w$@]*/i,q],[\"lit\",/^(?:0x[\\da-f]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+-]?\\d+)?)[a-z]*/i,q,\"0123456789\"],[\"pln\",/^\\\\[\\S\\s]?/,q],[\"pun\",/^.[^\\s\\w\"-$'./@\\\\`]*/,q]);return x(m,e)}function D(a,m){function e(a){switch(a.nodeType){case 1:if(k.test(a.className))break;if(\"BR\"===a.nodeName)h(a),\na.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)e(a);break;case 3:case 4:if(p){var b=a.nodeValue,d=b.match(t);if(d){var c=b.substring(0,d.index);a.nodeValue=c;(b=b.substring(d.index+d[0].length))&&a.parentNode.insertBefore(s.createTextNode(b),a.nextSibling);h(a);c||a.parentNode.removeChild(a)}}}}function h(a){function b(a,d){var e=d?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),g=a.nextSibling;f.appendChild(e);for(var h=g;h;h=g)g=h.nextSibling,f.appendChild(h)}return e}\nfor(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),e;(e=a.parentNode)&&e.nodeType===1;)a=e;d.push(a)}var k=/(?:^|\\s)nocode(?:\\s|$)/,t=/\\r\\n?|\\n/,s=a.ownerDocument,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=s.defaultView.getComputedStyle(a,q).getPropertyValue(\"white-space\"));var p=l&&\"pre\"===l.substring(0,3);for(l=s.createElement(\"LI\");a.firstChild;)l.appendChild(a.firstChild);for(var d=[l],g=0;g<d.length;++g)e(d[g]);m===(m|0)&&d[0].setAttribute(\"value\",\nm);var r=s.createElement(\"OL\");r.className=\"linenums\";for(var n=Math.max(0,m-1|0)||0,g=0,z=d.length;g<z;++g)l=d[g],l.className=\"L\"+(g+n)%10,l.firstChild||l.appendChild(s.createTextNode(\"\\xa0\")),r.appendChild(l);a.appendChild(r)}function k(a,m){for(var e=m.length;--e>=0;){var h=m[e];A.hasOwnProperty(h)?window.console&&console.warn(\"cannot override language handler %s\",h):A[h]=a}}function C(a,m){if(!a||!A.hasOwnProperty(a))a=/^\\s*</.test(m)?\"default-markup\":\"default-code\";return A[a]}function E(a){var m=\na.g;try{var e=M(a.h),h=e.a;a.a=h;a.c=e.c;a.d=0;C(m,h)(a);var k=/\\bMSIE\\b/.test(navigator.userAgent),m=/\\n/g,t=a.a,s=t.length,e=0,l=a.c,p=l.length,h=0,d=a.e,g=d.length,a=0;d[g]=s;var r,n;for(n=r=0;n<g;)d[n]!==d[n+2]?(d[r++]=d[n++],d[r++]=d[n++]):n+=2;g=r;for(n=r=0;n<g;){for(var z=d[n],f=d[n+1],b=n+2;b+2<=g&&d[b+1]===f;)b+=2;d[r++]=z;d[r++]=f;n=b}for(d.length=r;h<p;){var o=l[h+2]||s,c=d[a+2]||s,b=Math.min(o,c),i=l[h+1],j;if(i.nodeType!==1&&(j=t.substring(e,b))){k&&(j=j.replace(m,\"\\r\"));i.nodeValue=\nj;var u=i.ownerDocument,v=u.createElement(\"SPAN\");v.className=d[a+1];var x=i.parentNode;x.replaceChild(v,i);v.appendChild(i);e<o&&(l[h+1]=i=u.createTextNode(t.substring(b,o)),x.insertBefore(i,v.nextSibling))}e=b;e>=o&&(h+=2);e>=c&&(a+=2)}}catch(w){\"console\"in window&&console.log(w&&w.stack?w.stack:w)}}var v=[\"break,continue,do,else,for,if,return,while\"],w=[[v,\"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile\"],\n\"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof\"],F=[w,\"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where\"],G=[w,\"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient\"],\nH=[G,\"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var\"],w=[w,\"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN\"],I=[v,\"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None\"],\nJ=[v,\"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END\"],v=[v,\"case,done,elif,esac,eval,fi,function,in,local,set,then,until\"],K=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\\d*)/,N=/\\S/,O=u({keywords:[F,H,w,\"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END\"+\nI,J,v],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};k(O,[\"default-code\"]);k(x([],[[\"pln\",/^[^<?]+/],[\"dec\",/^<!\\w[^>]*(?:>|$)/],[\"com\",/^<\\!--[\\S\\s]*?(?:--\\>|$)/],[\"lang-\",/^<\\?([\\S\\s]+?)(?:\\?>|$)/],[\"lang-\",/^<%([\\S\\s]+?)(?:%>|$)/],[\"pun\",/^(?:<[%?]|[%?]>)/],[\"lang-\",/^<xmp\\b[^>]*>([\\S\\s]+?)<\\/xmp\\b[^>]*>/i],[\"lang-js\",/^<script\\b[^>]*>([\\S\\s]*?)(<\\/script\\b[^>]*>)/i],[\"lang-css\",/^<style\\b[^>]*>([\\S\\s]*?)(<\\/style\\b[^>]*>)/i],[\"lang-in.tag\",/^(<\\/?[a-z][^<>]*>)/i]]),\n[\"default-markup\",\"htm\",\"html\",\"mxml\",\"xhtml\",\"xml\",\"xsl\"]);k(x([[\"pln\",/^\\s+/,q,\" \\t\\r\\n\"],[\"atv\",/^(?:\"[^\"]*\"?|'[^']*'?)/,q,\"\\\"'\"]],[[\"tag\",/^^<\\/?[a-z](?:[\\w-.:]*\\w)?|\\/?>$/i],[\"atn\",/^(?!style[\\s=]|on)[a-z](?:[\\w:-]*\\w)?/i],[\"lang-uq.val\",/^=\\s*([^\\s\"'>]*(?:[^\\s\"'/>]|\\/(?=\\s)))/],[\"pun\",/^[/<->]+/],[\"lang-js\",/^on\\w+\\s*=\\s*\"([^\"]+)\"/i],[\"lang-js\",/^on\\w+\\s*=\\s*'([^']+)'/i],[\"lang-js\",/^on\\w+\\s*=\\s*([^\\s\"'>]+)/i],[\"lang-css\",/^style\\s*=\\s*\"([^\"]+)\"/i],[\"lang-css\",/^style\\s*=\\s*'([^']+)'/i],[\"lang-css\",\n/^style\\s*=\\s*([^\\s\"'>]+)/i]]),[\"in.tag\"]);k(x([],[[\"atv\",/^[\\S\\s]+/]]),[\"uq.val\"]);k(u({keywords:F,hashComments:!0,cStyleComments:!0,types:K}),[\"c\",\"cc\",\"cpp\",\"cxx\",\"cyc\",\"m\"]);k(u({keywords:\"null,true,false\"}),[\"json\"]);k(u({keywords:H,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:K}),[\"cs\"]);k(u({keywords:G,cStyleComments:!0}),[\"java\"]);k(u({keywords:v,hashComments:!0,multiLineStrings:!0}),[\"bsh\",\"csh\",\"sh\"]);k(u({keywords:I,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}),\n[\"cv\",\"py\"]);k(u({keywords:\"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END\",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),[\"perl\",\"pl\",\"pm\"]);k(u({keywords:J,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),[\"rb\"]);k(u({keywords:w,cStyleComments:!0,regexLiterals:!0}),[\"js\"]);k(u({keywords:\"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes\",\nhashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),[\"coffee\"]);k(x([],[[\"str\",/^[\\S\\s]+/]]),[\"regex\"]);window.prettyPrintOne=function(a,m,e){var h=document.createElement(\"PRE\");h.innerHTML=a;e&&D(h,e);E({g:m,i:e,h:h});return h.innerHTML};window.prettyPrint=function(a){function m(){for(var e=window.PR_SHOULD_USE_CONTINUATION?l.now()+250:Infinity;p<h.length&&l.now()<e;p++){var n=h[p],k=n.className;if(k.indexOf(\"prettyprint\")>=0){var k=k.match(g),f,b;if(b=\n!k){b=n;for(var o=void 0,c=b.firstChild;c;c=c.nextSibling)var i=c.nodeType,o=i===1?o?b:c:i===3?N.test(c.nodeValue)?b:o:o;b=(f=o===b?void 0:o)&&\"CODE\"===f.tagName}b&&(k=f.className.match(g));k&&(k=k[1]);b=!1;for(o=n.parentNode;o;o=o.parentNode)if((o.tagName===\"pre\"||o.tagName===\"code\"||o.tagName===\"xmp\")&&o.className&&o.className.indexOf(\"prettyprint\")>=0){b=!0;break}b||((b=(b=n.className.match(/\\blinenums\\b(?::(\\d+))?/))?b[1]&&b[1].length?+b[1]:!0:!1)&&D(n,b),d={g:k,h:n,i:b},E(d))}}p<h.length?setTimeout(m,\n250):a&&a()}for(var e=[document.getElementsByTagName(\"pre\"),document.getElementsByTagName(\"code\"),document.getElementsByTagName(\"xmp\")],h=[],k=0;k<e.length;++k)for(var t=0,s=e[k].length;t<s;++t)h.push(e[k][t]);var e=q,l=Date;l.now||(l={now:function(){return+new Date}});var p=0,d,g=/\\blang(?:uage)?-([\\w.]+)(?!\\S)/;m()};window.PR={createSimpleLexer:x,registerLangHandler:k,sourceDecorator:u,PR_ATTRIB_NAME:\"atn\",PR_ATTRIB_VALUE:\"atv\",PR_COMMENT:\"com\",PR_DECLARATION:\"dec\",PR_KEYWORD:\"kwd\",PR_LITERAL:\"lit\",\nPR_NOCODE:\"nocode\",PR_PLAIN:\"pln\",PR_PUNCTUATION:\"pun\",PR_SOURCE:\"src\",PR_STRING:\"str\",PR_TAG:\"tag\",PR_TYPE:\"typ\"}})();\n"
  },
  {
    "path": "api/resources/javascripts/ux.js",
    "content": "$(function () {\n    'use strict';\n\n   var pagePath = document.location.pathname.substring(document.location.pathname.lastIndexOf(\"/\") + 1);\n\n   // select current page in sidenav and set up prev/next links if they exist\n   var $selNavLink = $('#sidebar').find('a[href=\"' + pagePath + '\"]');\n   if ($selNavLink.length) {\n      //$selListItem = $selNavLink.closest('li');\n\n      $selNavLink.addClass('currentItem');\n   }\n\n    if (window.addEventListener) window.addEventListener('load', loadCallback, true);\n    else window.attachEvent('load', loadCallback, true);\n\n    function loadCallback(evt) {\n        var form = document.getElementById(\"searchbox\");\n\n        if (form) {\n            var input = form.query;\n            form.onsubmit = function (evt) {\n                var query = input.value;\n                if (query) {\n                    input.value = \"\";\n                    input.blur();\n                    var url = \"https://www.google.com/search?q=\" + encodeURIComponent(\"site:ace.ajax.org\" + \" \" + query);\n                    window.open(url);\n                }\n                return false;\n            };\n        }\n    }\n\n    // init search\n    $('#search')\n    // prevent from form submit\n    .on('submit', function () {\n        return false;\n    }).find('input');\n});\n\nfunction ux() {\n    var d = 'a.menu, .dropdown-toggle'\n\n    function clearMenus() {\n        $(d).parent('li').each(function () {\n            $(this).removeClass('open')\n        });\n    }\n\n    var s, sx;\n\n    // scrolling offset calculation via www.quirksmode.org\n    if (window.pageYOffset || window.pageXOffset) {\n        s = window.pageYOffset;\n        sx = window.pageXOffset;\n    }\n    else if (document.documentElement && (document.documentElement.scrollTop || document.documentElement.scrollLeft)) {\n        s = document.documentElement.scrollTop;\n        sx = document.documentElement.scrollLeft;\n    }\n    else if (document.body) {\n        s = document.body.scrollTop;\n        sx = document.body.scrollLeft;\n    }\n\n    if (document.documentElement.offsetWidth < 1010) {\n        if (sx <= 0) sx = 0;\n        else if (sx + document.documentElement.offsetWidth > 1010) sx = 1010 - document.documentElement.offsetWidth;\n    }\n    else sx = 0;\n\n    $('span.methodClicker, article.article, i.methodClicker').each(function () {\n        var a = $(this);\n        var constructorPos = a.attr(\"id\").indexOf(\"new \");\n\n        var objName = a.attr(\"id\");\n        if (constructorPos >= 0) {\n            objName = objName.substring(constructorPos + 4);\n            objName += \".new\";\n        }\n\n        a.attr(\"id\", objName);\n    });\n    \n    function showMethodContent() {\n        var locationHash = location.hash.replace(/^#/, '').replace(/\\./g, '\\\\.');\n        var equalsPos = location.hash.indexOf(\"=\");\n        \n        if (equalsPos >=0) {\n            locationHash = locationHash.substring(0, location.hash.indexOf(\"=\"));\n        }\n        \n        var $clickerEl = $('span#' + locationHash);\n        if ($clickerEl.length > 0 && $clickerEl.hasClass('methodClicker')) {\n            var p = $clickerEl.parent();\n            p[0].force = true;\n            p.trigger('click');\n            p[0].force = false;\n        }\n    }\n\n    if (location.hash.indexOf(\"section\") >= 1) {\n        showMethodContent();\n        var data = location.hash;\n        scrollTo(null, data.substr(1));\n    }\n\n    window.onhashchange = function () {\n        showMethodContent();\n    }\n};\n\nfunction scrollTo(el, data) {\n    if (!data) {\n        data = el.getAttribute(\"data-id\");\n        //location.hash = data;\n    }\n    var el = $(\"span#\" + data.replace(/\\./g, \"\\\\.\"))[0];\n    if (!el) return;\n\n    var article = $(el).closest('.article')[0];\n\n    var top = article.offsetTop - 100;\n\n    if (document.body.scrollTop > top || document.body.scrollTop != top && document.body.scrollTop + (window.innerHeight || document.documentElement.offsetHeight) < top + article.offsetHeight) {\n        $('body').animate({\n            scrollTop: top\n        }, {\n            duration: 200,\n            easing: \"swing\"\n        });\n    }\n}"
  },
  {
    "path": "api/scrollbar.html",
    "content": "\n<div id=\"documentation\" class=\"span9\">\n  <div class=\"classContent\">\n    <div class=\"membersBackground\"></div>\n    <div class=\" members pos0\">\n      <div class=\" membersContent pos0\">\n        <h1 class=\"memberHeader\"><span class=\"name\">ScrollBar</span>\n        </h1>\n        <ul data-tabs=\"tabs\" class=\"nav tabs pos0\">\n          <li data-dropdown=\"dropdown\" class=\"dropdown\"><a href=\"#\" data-toggle=\"dropdown\" class=\"dropdown-toggle\"><span>Events (1)</span><b class=\"caret\"></b></a>\n            <ul class=\"dropdown-menu\">\n              <li id=\"dropdown_ScrollBar.event.scroll\" data-id=\"ScrollBar.event.scroll\" class=\"memberLink\"><a href=\"#ScrollBar.event.scroll\" class=\"\" title=\"ScrollBar.event.scroll (event)\" data-id=\"ScrollBar.event.scroll\">scroll</a>\n              </li>\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\"><a href=\"#\" data-toggle=\"dropdown\" class=\"dropdown-toggle\"><span>Constructors (1)</span><b class=\"caret\"></b></a>\n            <ul class=\"dropdown-menu\">\n              <li id=\"dropdown_ScrollBar.new\" data-id=\"ScrollBar.new\" class=\"memberLink\"><a href=\"#ScrollBar.new\" class=\"\" title=\"ScrollBar.new (constructor)\" data-id=\"ScrollBar.new\">new</a>\n              </li>\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\"><a href=\"#\" data-toggle=\"dropdown\" class=\"dropdown-toggle\"><span>Functions (5)</span><b class=\"caret\"></b></a>\n            <ul class=\"dropdown-menu\">\n              <li id=\"dropdown_ScrollBar.getWidth\" data-id=\"ScrollBar.getWidth\" class=\"memberLink\"><a href=\"#ScrollBar.getWidth\" class=\"\" title=\"ScrollBar.getWidth (class method)\" data-id=\"ScrollBar.getWidth\">getWidth</a>\n              </li>\n              <li id=\"dropdown_ScrollBar.onScroll\" data-id=\"ScrollBar.onScroll\" class=\"memberLink\"><a href=\"#ScrollBar.onScroll\" class=\"\" title=\"ScrollBar.onScroll (class method)\" data-id=\"ScrollBar.onScroll\">onScroll</a>\n              </li>\n              <li id=\"dropdown_ScrollBar.setHeight\" data-id=\"ScrollBar.setHeight\" class=\"memberLink\"><a href=\"#ScrollBar.setHeight\" class=\"\" title=\"ScrollBar.setHeight (class method)\" data-id=\"ScrollBar.setHeight\">setHeight</a>\n              </li>\n              <li id=\"dropdown_ScrollBar.setInnerHeight\" data-id=\"ScrollBar.setInnerHeight\" class=\"memberLink\"><a href=\"#ScrollBar.setInnerHeight\" class=\"\" title=\"ScrollBar.setInnerHeight (class method)\" data-id=\"ScrollBar.setInnerHeight\">setInnerHeight</a>\n              </li>\n              <li id=\"dropdown_ScrollBar.setScrollTop\" data-id=\"ScrollBar.setScrollTop\" class=\"memberLink\"><a href=\"#ScrollBar.setScrollTop\" class=\"\" title=\"ScrollBar.setScrollTop (class method)\" data-id=\"ScrollBar.setScrollTop\">setScrollTop</a>\n              </li>\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n        </ul>\n      </div>\n    </div>\n    <article id=\"ScrollBar\" data-title=\"ScrollBar (class)\" class=\"article\">\n      <div class=\"section description\">\n        <div class=\"memberContent\"><p>A set of methods for setting and retrieving the editor&#39;s scrollbar.</p>\n\n        </div>\n      </div>\n    </article>\n    <h3 class=\"sectionHeader\">Constructors</h3>\n    <article id=\"ScrollBar.new\" data-title=\"ScrollBar.new (constructor)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"ScrollBar.new\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span class=\"constructorIdentifier\">new </span><span id=\"ScrollBar.new\" class=\"member-name methodClicker\">ScrollBar</span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en/DOM/element\" class=\"argument methodClicker\" title=\"DOMElement\" data-id=\"DOMElement\">DOMElement</a> parent</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_ScrollBar.new\" class=\"ellipsis_description\"><p>Creates a new <code>ScrollBar</code>. <code>parent</code> is the owner of the scroll bar.</p>\n\n            </div>\n            <div class=\"description\"><p>Creates a new <code>ScrollBar</code>. <code>parent</code> is the owner of the scroll bar.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">parent</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en/DOM/element\" class=\"\" title=\"DOMElement\" data-id=\"DOMElement\">DOMElement</a></td><td class=\"argDescription \"><p>Required. A DOM element</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <h3 class=\"sectionHeader\">Events</h3>\n    <article id=\"ScrollBar.event.scroll\" data-title=\"ScrollBar.event.scroll (event)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"ScrollBar.event.scroll\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span class=\"eventObjName\">ScrollBar</span><span class=\"eventListenerStart\">.on(\"</span><span id=\"ScrollBar.event.scroll\" class=\"member-name eventMember methodClicker\">scroll</span><span class=\"eventListenerClose\">\", </span><span class=\"eventFunctionOpen\">function(</span><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> e<span class=\"eventFunctionClose\">))</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_ScrollBar.event.scroll\" class=\"ellipsis_description\"><p>Emitted when the scroll bar, well, scrolls.</p>\n\n            </div>\n            <div class=\"description\"><p>Emitted when the scroll bar, well, scrolls.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">e</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. Contains one property, <code>&quot;data&quot;</code>, which indicates the current scroll top position</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <h3 class=\"sectionHeader\">Methods</h3>\n    <article id=\"ScrollBar.getWidth\" data-title=\"ScrollBar.getWidth (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"ScrollBar.getWidth\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"ScrollBar.getWidth\" class=\"member-name methodClicker\"><span class=\"sigClassName\">ScrollBar.</span><span class=\"sigMemberName\">getWidth</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"returnType \" title=\"Number\" data-id=\"Number\">Number</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_ScrollBar.getWidth\" class=\"ellipsis_description\"><p>Returns the width of the scroll bar.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the width of the scroll bar.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"ScrollBar.onScroll\" data-title=\"ScrollBar.onScroll (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"ScrollBar.onScroll\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"ScrollBar.onScroll\" class=\"member-name methodClicker\"><span class=\"sigClassName\">ScrollBar.</span><span class=\"sigMemberName\">onScroll</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_ScrollBar.onScroll\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"ScrollBar.setHeight\" data-title=\"ScrollBar.setHeight (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"ScrollBar.setHeight\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"ScrollBar.setHeight\" class=\"member-name methodClicker\"><span class=\"sigClassName\">ScrollBar.</span><span class=\"sigMemberName\">setHeight</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> height</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_ScrollBar.setHeight\" class=\"ellipsis_description\"><p>Sets the height of the scroll bar, in pixels.</p>\n\n            </div>\n            <div class=\"description\"><p>Sets the height of the scroll bar, in pixels.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">height</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The new height</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"ScrollBar.setInnerHeight\" data-title=\"ScrollBar.setInnerHeight (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"ScrollBar.setInnerHeight\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"ScrollBar.setInnerHeight\" class=\"member-name methodClicker\"><span class=\"sigClassName\">ScrollBar.</span><span class=\"sigMemberName\">setInnerHeight</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> height</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_ScrollBar.setInnerHeight\" class=\"ellipsis_description\"><p>Sets the inner height of the scroll bar, in pixels.</p>\n\n            </div>\n            <div class=\"description\"><p>Sets the inner height of the scroll bar, in pixels.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">height</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The new inner height</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"ScrollBar.setScrollTop\" data-title=\"ScrollBar.setScrollTop (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"ScrollBar.setScrollTop\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"ScrollBar.setScrollTop\" class=\"member-name methodClicker\"><span class=\"sigClassName\">ScrollBar.</span><span class=\"sigMemberName\">setScrollTop</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> scrollTop</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_ScrollBar.setScrollTop\" class=\"ellipsis_description\"><p>Sets the scroll top of the scroll bar.</p>\n\n            </div>\n            <div class=\"description\"><p>Sets the scroll top of the scroll bar.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">scrollTop</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The new scroll top</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n  </div>\n  <script defer src=\"./resources/javascripts/ux.js\"></script>\n  <script src=\"./resources/javascripts/clicker.js\"></script>\n  <script src=\"./resources/javascripts/jquery-scrollspy.js\"></script>\n  <script defer src=\"./resources/javascripts/disqus-ext.js\"></script>\n  <script defer src=\"./resources/javascripts/ga.js\"></script>\n  <div id=\"disqus_thread\"></div>\n</div>"
  },
  {
    "path": "api/search.html",
    "content": "\n<div id=\"documentation\" class=\"span9\">\n  <div class=\"classContent\">\n    <div class=\"membersBackground\"></div>\n    <div class=\" members pos0\">\n      <div class=\" membersContent pos0\">\n        <h1 class=\"memberHeader\"><span class=\"name\">Search</span>\n        </h1>\n        <ul data-tabs=\"tabs\" class=\"nav tabs pos0\">\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\"><a href=\"#\" data-toggle=\"dropdown\" class=\"dropdown-toggle\"><span>Constructors (1)</span><b class=\"caret\"></b></a>\n            <ul class=\"dropdown-menu\">\n              <li id=\"dropdown_Search.new\" data-id=\"Search.new\" class=\"memberLink\"><a href=\"#Search.new\" class=\"\" title=\"Search.new (constructor)\" data-id=\"Search.new\">new</a>\n              </li>\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\"><a href=\"#\" data-toggle=\"dropdown\" class=\"dropdown-toggle\"><span>Functions (6)</span><b class=\"caret\"></b></a>\n            <ul class=\"dropdown-menu\">\n              <li id=\"dropdown_Search.find\" data-id=\"Search.find\" class=\"memberLink\"><a href=\"#Search.find\" class=\"\" title=\"Search.find (class method)\" data-id=\"Search.find\">find</a>\n              </li>\n              <li id=\"dropdown_Search.findAll\" data-id=\"Search.findAll\" class=\"memberLink\"><a href=\"#Search.findAll\" class=\"\" title=\"Search.findAll (class method)\" data-id=\"Search.findAll\">findAll</a>\n              </li>\n              <li id=\"dropdown_Search.getOptions\" data-id=\"Search.getOptions\" class=\"memberLink\"><a href=\"#Search.getOptions\" class=\"\" title=\"Search.getOptions (class method)\" data-id=\"Search.getOptions\">getOptions</a>\n              </li>\n              <li id=\"dropdown_Search.replace\" data-id=\"Search.replace\" class=\"memberLink\"><a href=\"#Search.replace\" class=\"\" title=\"Search.replace (class method)\" data-id=\"Search.replace\">replace</a>\n              </li>\n              <li id=\"dropdown_Search.set\" data-id=\"Search.set\" class=\"memberLink\"><a href=\"#Search.set\" class=\"\" title=\"Search.set (class method)\" data-id=\"Search.set\">set</a>\n              </li>\n              <li id=\"dropdown_Search.setOptions\" data-id=\"Search.setOptions\" class=\"memberLink\"><a href=\"#Search.setOptions\" class=\"\" title=\"Search.setOptions (class method)\" data-id=\"Search.setOptions\">setOptions</a>\n              </li>\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n        </ul>\n      </div>\n    </div>\n    <article id=\"Search\" data-title=\"Search (class)\" class=\"article\">\n      <div class=\"section description\">\n        <div class=\"memberContent\"><p>A class designed to handle all sorts of text searches within a <a href=\"document.html\" class=\"link-short\" title=\"Document (class)\" data-id=\"Document\"><code>Document</code></a>.</p>\n\n        </div>\n      </div>\n    </article>\n    <h3 class=\"sectionHeader\">Constructors</h3>\n    <article id=\"Search.new\" data-title=\"Search.new (constructor)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Search.new\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span class=\"constructorIdentifier\">new </span><span id=\"Search.new\" class=\"member-name methodClicker\">Search</span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Search.new\" class=\"ellipsis_description\"><p>Creates a new <code>Search</code> object. The following search options are available:</p>\n\n            </div>\n            <div class=\"description\"><p>Creates a new <code>Search</code> object. The following search options are available:</p>\n<ul>\n<li><code>needle</code>: The string or regular expression you&#39;re looking for</li>\n<li><code>backwards</code>: Whether to search backwards from where cursor currently is. Defaults to <code>false</code>.</li>\n<li><code>wrap</code>: Whether to wrap the search back to the beginning when it hits the end. Defaults to <code>false</code>.</li>\n<li><code>caseSensitive</code>: Whether the search ought to be case-sensitive. Defaults to <code>false</code>.</li>\n<li><code>wholeWord</code>: Whether the search matches only on whole words. Defaults to <code>false</code>.</li>\n<li><code>range</code>: The <a href=\"range.html\" class=\"link-short\" title=\"Range (class)\" data-id=\"Range\"><code>Range</code></a> to search within. Set this to <code>null</code> for the whole document</li>\n<li><code>regExp</code>: Whether the search is a regular expression or not. Defaults to <code>false</code>.</li>\n<li><code>start</code>: The starting <a href=\"range.html\" class=\"link-short\" title=\"Range (class)\" data-id=\"Range\"><code>Range</code></a> or cursor position to begin the search</li>\n<li><code>skipCurrent</code>: Whether or not to include the current line in the search. Default to <code>false</code>.</li>\n</ul>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <h3 class=\"sectionHeader\">Methods</h3>\n    <article id=\"Search.find\" data-title=\"Search.find (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Search.find\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Search.find\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Search.</span><span class=\"sigMemberName\">find</span></span>(<span class=\"sigArgList\"><a href=\"edit_session.html\" class=\"argument methodClicker\" title=\"EditSession (class)\" data-id=\"EditSession\">EditSession</a> session</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"range.html\" class=\"returnType \" title=\"Range (class)\" data-id=\"Range\">Range</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Search.find\" class=\"ellipsis_description\"><p>Searches for <code>options.needle</code>. If found, this method returns the <a href=\"range.html\" class=\"link-short\" title=\"Range (class)\" data-id=\"Range\"><code>Range</code></a> where the text first occurs. If <code>options.backwards</code> is <code>true</code>, the search goes backwards in the session.</p>\n\n            </div>\n            <div class=\"description\"><p>Searches for <code>options.needle</code>. If found, this method returns the <a href=\"range.html\" class=\"link-short\" title=\"Range (class)\" data-id=\"Range\"><code>Range</code></a> where the text first occurs. If <code>options.backwards</code> is <code>true</code>, the search goes backwards in the session.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">session</td><td class=\"argType\" \"><a href=\"edit_session.html\" class=\"\" title=\"EditSession (class)\" data-id=\"EditSession\">EditSession</a></td><td class=\"argDescription \"><p>Required. The session to search with</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Search.findAll\" data-title=\"Search.findAll (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Search.findAll\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Search.findAll\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Search.</span><span class=\"sigMemberName\">findAll</span></span>(<span class=\"sigArgList\"><a href=\"edit_session.html\" class=\"argument methodClicker\" title=\"EditSession (class)\" data-id=\"EditSession\">EditSession</a> session</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"range.html\" class=\"returnType \" title=\"Range (class)\" data-id=\"Range\">Range</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Search.findAll\" class=\"ellipsis_description\"><p>Searches for all occurances <code>options.needle</code>. If found, this method returns an array of <a href=\"range.html\" class=\"link-short\" title=\"Range (class)\" data-id=\"Range\"><code>Range</code>s</a> where the text first occurs. If <code>options.backwards</code> is <code>true</code>, the search goes backwards in the session.</p>\n\n            </div>\n            <div class=\"description\"><p>Searches for all occurances <code>options.needle</code>. If found, this method returns an array of <a href=\"range.html\" class=\"link-short\" title=\"Range (class)\" data-id=\"Range\"><code>Range</code>s</a> where the text first occurs. If <code>options.backwards</code> is <code>true</code>, the search goes backwards in the session.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">session</td><td class=\"argType\" \"><a href=\"edit_session.html\" class=\"\" title=\"EditSession (class)\" data-id=\"EditSession\">EditSession</a></td><td class=\"argDescription \"><p>Required. The session to search with</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Search.getOptions\" data-title=\"Search.getOptions (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Search.getOptions\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Search.getOptions\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Search.</span><span class=\"sigMemberName\">getOptions</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"returnType \" title=\"Object\" data-id=\"Object\">Object</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Search.getOptions\" class=\"ellipsis_description\"><p>Returns an object containing all the search options.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns an object containing all the search options.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Search.replace\" data-title=\"Search.replace (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Search.replace\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Search.replace\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Search.</span><span class=\"sigMemberName\">replace</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"argument methodClicker\" title=\"String\" data-id=\"String\">String</a> input, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"argument methodClicker\" title=\"String\" data-id=\"String\">String</a> replacement</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"returnType \" title=\"String\" data-id=\"String\">String</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Search.replace\" class=\"ellipsis_description\"><p>Searches for <code>options.needle</code> in <code>input</code>, and, if found, replaces it with <code>replacement</code>.</p>\n\n            </div>\n            <div class=\"description\"><p>Searches for <code>options.needle</code> in <code>input</code>, and, if found, replaces it with <code>replacement</code>.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">input</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"\" title=\"String\" data-id=\"String\">String</a></td><td class=\"argDescription \"><p>Required. The text to search in</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">replacement</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"\" title=\"String\" data-id=\"String\">String</a></td><td class=\"argDescription \"><p>Required. The replacing text</p>\n<ul>\n<li>(String): If <code>options.regExp</code> is <code>true</code>, this function returns <code>input</code> with the replacement already made. Otherwise, this function just returns <code>replacement</code>.<br/>\nIf <code>options.needle</code> was not found, this function returns <code>null</code>.</li>\n</ul>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Search.set\" data-title=\"Search.set (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Search.set\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Search.set\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Search.</span><span class=\"sigMemberName\">set</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> options</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"search.html\" class=\"returnType \" title=\"Search (class)\" data-id=\"Search\">Search</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label chainable\">Chainable</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Search.set\" class=\"ellipsis_description\"><p>Sets the search options via the <code>options</code> parameter.</p>\n\n            </div>\n            <div class=\"description\"><p>Sets the search options via the <code>options</code> parameter.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">options</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. An object containing all the new search properties</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Search.setOptions\" data-title=\"Search.setOptions (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Search.setOptions\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Search.setOptions\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Search.</span><span class=\"sigMemberName\">setOptions</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Search.setOptions\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n  </div>\n  <script defer src=\"./resources/javascripts/ux.js\"></script>\n  <script src=\"./resources/javascripts/clicker.js\"></script>\n  <script src=\"./resources/javascripts/jquery-scrollspy.js\"></script>\n  <script defer src=\"./resources/javascripts/disqus-ext.js\"></script>\n  <script defer src=\"./resources/javascripts/ga.js\"></script>\n  <div id=\"disqus_thread\"></div>\n</div>\n"
  },
  {
    "path": "api/selection.html",
    "content": "\n<div id=\"documentation\" class=\"span9\">\n  <div class=\"classContent\">\n    <div class=\"membersBackground\"></div>\n    <div class=\" members pos0\">\n      <div class=\" membersContent pos0\">\n        <h1 class=\"memberHeader\"><span class=\"name\">Selection</span>\n        </h1>\n        <ul data-tabs=\"tabs\" class=\"nav tabs pos0\">\n          <li data-dropdown=\"dropdown\" class=\"dropdown\"><a href=\"#\" data-toggle=\"dropdown\" class=\"dropdown-toggle\"><span>Events (2)</span><b class=\"caret\"></b></a>\n            <ul class=\"dropdown-menu\">\n              <li id=\"dropdown_Selection.event.changeCursor\" data-id=\"Selection.event.changeCursor\" class=\"memberLink\"><a href=\"#Selection.event.changeCursor\" class=\"\" title=\"Selection.event.changeCursor (event)\" data-id=\"Selection.event.changeCursor\">changeCursor</a>\n              </li>\n              <li id=\"dropdown_Selection.event.changeSelection\" data-id=\"Selection.event.changeSelection\" class=\"memberLink\"><a href=\"#Selection.event.changeSelection\" class=\"\" title=\"Selection.event.changeSelection (event)\" data-id=\"Selection.event.changeSelection\">changeSelection</a>\n              </li>\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\"><a href=\"#\" data-toggle=\"dropdown\" class=\"dropdown-toggle\"><span>Constructors (1)</span><b class=\"caret\"></b></a>\n            <ul class=\"dropdown-menu\">\n              <li id=\"dropdown_Selection.new\" data-id=\"Selection.new\" class=\"memberLink\"><a href=\"#Selection.new\" class=\"\" title=\"Selection.new (constructor)\" data-id=\"Selection.new\">new</a>\n              </li>\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\"><a href=\"#\" data-toggle=\"dropdown\" class=\"dropdown-toggle\"><span>Functions (58)</span><b class=\"caret\"></b></a>\n            <ul class=\"dropdown-menu\">\n              <li id=\"dropdown_Selection.addRange\" data-id=\"Selection.addRange\" class=\"memberLink\"><a href=\"#nav=api&api=multi_select\" class=\"\" title=\"Selection.addRange (class method)\" data-id=\"Selection.addRange\">addRange</a>\n              </li>\n              <li id=\"dropdown_Selection.clearSelection\" data-id=\"Selection.clearSelection\" class=\"memberLink\"><a href=\"#Selection.clearSelection\" class=\"\" title=\"Selection.clearSelection (class method)\" data-id=\"Selection.clearSelection\">clearSelection</a>\n              </li>\n              <li id=\"dropdown_Selection.detach\" data-id=\"Selection.detach\" class=\"memberLink\"><a href=\"#Selection.detach\" class=\"\" title=\"Selection.detach (class method)\" data-id=\"Selection.detach\">detach</a>\n              </li>\n              <li id=\"dropdown_Selection.fromOrientedRange\" data-id=\"Selection.fromOrientedRange\" class=\"memberLink\"><a href=\"#Selection.fromOrientedRange\" class=\"\" title=\"Selection.fromOrientedRange (class method)\" data-id=\"Selection.fromOrientedRange\">fromOrientedRange</a>\n              </li>\n              <li id=\"dropdown_Selection.getAllRanges\" data-id=\"Selection.getAllRanges\" class=\"memberLink\"><a href=\"#nav=api&api=multi_select\" class=\"\" title=\"Selection.getAllRanges (class method)\" data-id=\"Selection.getAllRanges\">getAllRanges</a>\n              </li>\n              <li id=\"dropdown_Selection.getCursor\" data-id=\"Selection.getCursor\" class=\"memberLink\"><a href=\"#Selection.getCursor\" class=\"\" title=\"Selection.getCursor (class method)\" data-id=\"Selection.getCursor\">getCursor</a>\n              </li>\n              <li id=\"dropdown_Selection.getLineRange\" data-id=\"Selection.getLineRange\" class=\"memberLink\"><a href=\"#Selection.getLineRange\" class=\"\" title=\"Selection.getLineRange (class method)\" data-id=\"Selection.getLineRange\">getLineRange</a>\n              </li>\n              <li id=\"dropdown_Selection.getRange\" data-id=\"Selection.getRange\" class=\"memberLink\"><a href=\"#Selection.getRange\" class=\"\" title=\"Selection.getRange (class method)\" data-id=\"Selection.getRange\">getRange</a>\n              </li>\n              <li id=\"dropdown_Selection.getSelectionAnchor\" data-id=\"Selection.getSelectionAnchor\" class=\"memberLink\"><a href=\"#Selection.getSelectionAnchor\" class=\"\" title=\"Selection.getSelectionAnchor (class method)\" data-id=\"Selection.getSelectionAnchor\">getSelectionAnchor</a>\n              </li>\n              <li id=\"dropdown_Selection.getSelectionLead\" data-id=\"Selection.getSelectionLead\" class=\"memberLink\"><a href=\"#Selection.getSelectionLead\" class=\"\" title=\"Selection.getSelectionLead (class method)\" data-id=\"Selection.getSelectionLead\">getSelectionLead</a>\n              </li>\n              <li id=\"dropdown_Selection.getWordRange\" data-id=\"Selection.getWordRange\" class=\"memberLink\"><a href=\"#Selection.getWordRange\" class=\"\" title=\"Selection.getWordRange (class method)\" data-id=\"Selection.getWordRange\">getWordRange</a>\n              </li>\n              <li id=\"dropdown_Selection.isBackwards\" data-id=\"Selection.isBackwards\" class=\"memberLink\"><a href=\"#Selection.isBackwards\" class=\"\" title=\"Selection.isBackwards (class method)\" data-id=\"Selection.isBackwards\">isBackwards</a>\n              </li>\n              <li id=\"dropdown_Selection.isEmpty\" data-id=\"Selection.isEmpty\" class=\"memberLink\"><a href=\"#Selection.isEmpty\" class=\"\" title=\"Selection.isEmpty (class method)\" data-id=\"Selection.isEmpty\">isEmpty</a>\n              </li>\n              <li id=\"dropdown_Selection.isMultiLine\" data-id=\"Selection.isMultiLine\" class=\"memberLink\"><a href=\"#Selection.isMultiLine\" class=\"\" title=\"Selection.isMultiLine (class method)\" data-id=\"Selection.isMultiLine\">isMultiLine</a>\n              </li>\n              <li id=\"dropdown_Selection.mergeOverlappingRanges\" data-id=\"Selection.mergeOverlappingRanges\" class=\"memberLink\"><a href=\"#nav=api&api=multi_select\" class=\"\" title=\"Selection.mergeOverlappingRanges (class method)\" data-id=\"Selection.mergeOverlappingRanges\">mergeOverlappingRanges</a>\n              </li>\n              <li id=\"dropdown_Selection.moveCursorBy\" data-id=\"Selection.moveCursorBy\" class=\"memberLink\"><a href=\"#Selection.moveCursorBy\" class=\"\" title=\"Selection.moveCursorBy (class method)\" data-id=\"Selection.moveCursorBy\">moveCursorBy</a>\n              </li>\n              <li id=\"dropdown_Selection.moveCursorDown\" data-id=\"Selection.moveCursorDown\" class=\"memberLink\"><a href=\"#Selection.moveCursorDown\" class=\"\" title=\"Selection.moveCursorDown (class method)\" data-id=\"Selection.moveCursorDown\">moveCursorDown</a>\n              </li>\n              <li id=\"dropdown_Selection.moveCursorFileEnd\" data-id=\"Selection.moveCursorFileEnd\" class=\"memberLink\"><a href=\"#Selection.moveCursorFileEnd\" class=\"\" title=\"Selection.moveCursorFileEnd (class method)\" data-id=\"Selection.moveCursorFileEnd\">moveCursorFileEnd</a>\n              </li>\n              <li id=\"dropdown_Selection.moveCursorFileStart\" data-id=\"Selection.moveCursorFileStart\" class=\"memberLink\"><a href=\"#Selection.moveCursorFileStart\" class=\"\" title=\"Selection.moveCursorFileStart (class method)\" data-id=\"Selection.moveCursorFileStart\">moveCursorFileStart</a>\n              </li>\n              <li id=\"dropdown_Selection.moveCursorLeft\" data-id=\"Selection.moveCursorLeft\" class=\"memberLink\"><a href=\"#Selection.moveCursorLeft\" class=\"\" title=\"Selection.moveCursorLeft (class method)\" data-id=\"Selection.moveCursorLeft\">moveCursorLeft</a>\n              </li>\n              <li id=\"dropdown_Selection.moveCursorLineEnd\" data-id=\"Selection.moveCursorLineEnd\" class=\"memberLink\"><a href=\"#Selection.moveCursorLineEnd\" class=\"\" title=\"Selection.moveCursorLineEnd (class method)\" data-id=\"Selection.moveCursorLineEnd\">moveCursorLineEnd</a>\n              </li>\n              <li id=\"dropdown_Selection.moveCursorLineStart\" data-id=\"Selection.moveCursorLineStart\" class=\"memberLink\"><a href=\"#Selection.moveCursorLineStart\" class=\"\" title=\"Selection.moveCursorLineStart (class method)\" data-id=\"Selection.moveCursorLineStart\">moveCursorLineStart</a>\n              </li>\n              <li id=\"dropdown_Selection.moveCursorLongWordLeft\" data-id=\"Selection.moveCursorLongWordLeft\" class=\"memberLink\"><a href=\"#Selection.moveCursorLongWordLeft\" class=\"\" title=\"Selection.moveCursorLongWordLeft (class method)\" data-id=\"Selection.moveCursorLongWordLeft\">moveCursorLongWordLeft</a>\n              </li>\n              <li id=\"dropdown_Selection.moveCursorLongWordRight\" data-id=\"Selection.moveCursorLongWordRight\" class=\"memberLink\"><a href=\"#Selection.moveCursorLongWordRight\" class=\"\" title=\"Selection.moveCursorLongWordRight (class method)\" data-id=\"Selection.moveCursorLongWordRight\">moveCursorLongWordRight</a>\n              </li>\n              <li id=\"dropdown_Selection.moveCursorRight\" data-id=\"Selection.moveCursorRight\" class=\"memberLink\"><a href=\"#Selection.moveCursorRight\" class=\"\" title=\"Selection.moveCursorRight (class method)\" data-id=\"Selection.moveCursorRight\">moveCursorRight</a>\n              </li>\n              <li id=\"dropdown_Selection.moveCursorShortWordLeft\" data-id=\"Selection.moveCursorShortWordLeft\" class=\"memberLink\"><a href=\"#Selection.moveCursorShortWordLeft\" class=\"\" title=\"Selection.moveCursorShortWordLeft (class method)\" data-id=\"Selection.moveCursorShortWordLeft\">moveCursorShortWordLeft</a>\n              </li>\n              <li id=\"dropdown_Selection.moveCursorShortWordRight\" data-id=\"Selection.moveCursorShortWordRight\" class=\"memberLink\"><a href=\"#Selection.moveCursorShortWordRight\" class=\"\" title=\"Selection.moveCursorShortWordRight (class method)\" data-id=\"Selection.moveCursorShortWordRight\">moveCursorShortWordRight</a>\n              </li>\n              <li id=\"dropdown_Selection.moveCursorTo\" data-id=\"Selection.moveCursorTo\" class=\"memberLink\"><a href=\"#Selection.moveCursorTo\" class=\"\" title=\"Selection.moveCursorTo (class method)\" data-id=\"Selection.moveCursorTo\">moveCursorTo</a>\n              </li>\n              <li id=\"dropdown_Selection.moveCursorToPosition\" data-id=\"Selection.moveCursorToPosition\" class=\"memberLink\"><a href=\"#Selection.moveCursorToPosition\" class=\"\" title=\"Selection.moveCursorToPosition (class method)\" data-id=\"Selection.moveCursorToPosition\">moveCursorToPosition</a>\n              </li>\n              <li id=\"dropdown_Selection.moveCursorToScreen\" data-id=\"Selection.moveCursorToScreen\" class=\"memberLink\"><a href=\"#Selection.moveCursorToScreen\" class=\"\" title=\"Selection.moveCursorToScreen (class method)\" data-id=\"Selection.moveCursorToScreen\">moveCursorToScreen</a>\n              </li>\n              <li id=\"dropdown_Selection.moveCursorUp\" data-id=\"Selection.moveCursorUp\" class=\"memberLink\"><a href=\"#Selection.moveCursorUp\" class=\"\" title=\"Selection.moveCursorUp (class method)\" data-id=\"Selection.moveCursorUp\">moveCursorUp</a>\n              </li>\n              <li id=\"dropdown_Selection.moveCursorWordLeft\" data-id=\"Selection.moveCursorWordLeft\" class=\"memberLink\"><a href=\"#Selection.moveCursorWordLeft\" class=\"\" title=\"Selection.moveCursorWordLeft (class method)\" data-id=\"Selection.moveCursorWordLeft\">moveCursorWordLeft</a>\n              </li>\n              <li id=\"dropdown_Selection.moveCursorWordRight\" data-id=\"Selection.moveCursorWordRight\" class=\"memberLink\"><a href=\"#Selection.moveCursorWordRight\" class=\"\" title=\"Selection.moveCursorWordRight (class method)\" data-id=\"Selection.moveCursorWordRight\">moveCursorWordRight</a>\n              </li>\n              <li id=\"dropdown_Selection.rectangularRangeBlock\" data-id=\"Selection.rectangularRangeBlock\" class=\"memberLink\"><a href=\"#nav=api&api=multi_select\" class=\"\" title=\"Selection.rectangularRangeBlock (class method)\" data-id=\"Selection.rectangularRangeBlock\">rectangularRangeBlock</a>\n              </li>\n              <li id=\"dropdown_Selection.selectAll\" data-id=\"Selection.selectAll\" class=\"memberLink\"><a href=\"#Selection.selectAll\" class=\"\" title=\"Selection.selectAll (class method)\" data-id=\"Selection.selectAll\">selectAll</a>\n              </li>\n              <li id=\"dropdown_Selection.selectAWord\" data-id=\"Selection.selectAWord\" class=\"memberLink\"><a href=\"#Selection.selectAWord\" class=\"\" title=\"Selection.selectAWord (class method)\" data-id=\"Selection.selectAWord\">selectAWord</a>\n              </li>\n              <li id=\"dropdown_Selection.selectDown\" data-id=\"Selection.selectDown\" class=\"memberLink\"><a href=\"#Selection.selectDown\" class=\"\" title=\"Selection.selectDown (class method)\" data-id=\"Selection.selectDown\">selectDown</a>\n              </li>\n              <li id=\"dropdown_Selection.selectFileEnd\" data-id=\"Selection.selectFileEnd\" class=\"memberLink\"><a href=\"#Selection.selectFileEnd\" class=\"\" title=\"Selection.selectFileEnd (class method)\" data-id=\"Selection.selectFileEnd\">selectFileEnd</a>\n              </li>\n              <li id=\"dropdown_Selection.selectFileStart\" data-id=\"Selection.selectFileStart\" class=\"memberLink\"><a href=\"#Selection.selectFileStart\" class=\"\" title=\"Selection.selectFileStart (class method)\" data-id=\"Selection.selectFileStart\">selectFileStart</a>\n              </li>\n              <li id=\"dropdown_Selection.selectLeft\" data-id=\"Selection.selectLeft\" class=\"memberLink\"><a href=\"#Selection.selectLeft\" class=\"\" title=\"Selection.selectLeft (class method)\" data-id=\"Selection.selectLeft\">selectLeft</a>\n              </li>\n              <li id=\"dropdown_Selection.selectLine\" data-id=\"Selection.selectLine\" class=\"memberLink\"><a href=\"#Selection.selectLine\" class=\"\" title=\"Selection.selectLine (class method)\" data-id=\"Selection.selectLine\">selectLine</a>\n              </li>\n              <li id=\"dropdown_Selection.selectLineEnd\" data-id=\"Selection.selectLineEnd\" class=\"memberLink\"><a href=\"#Selection.selectLineEnd\" class=\"\" title=\"Selection.selectLineEnd (class method)\" data-id=\"Selection.selectLineEnd\">selectLineEnd</a>\n              </li>\n              <li id=\"dropdown_Selection.selectLineStart\" data-id=\"Selection.selectLineStart\" class=\"memberLink\"><a href=\"#Selection.selectLineStart\" class=\"\" title=\"Selection.selectLineStart (class method)\" data-id=\"Selection.selectLineStart\">selectLineStart</a>\n              </li>\n              <li id=\"dropdown_Selection.selectRight\" data-id=\"Selection.selectRight\" class=\"memberLink\"><a href=\"#Selection.selectRight\" class=\"\" title=\"Selection.selectRight (class method)\" data-id=\"Selection.selectRight\">selectRight</a>\n              </li>\n              <li id=\"dropdown_Selection.selectTo\" data-id=\"Selection.selectTo\" class=\"memberLink\"><a href=\"#Selection.selectTo\" class=\"\" title=\"Selection.selectTo (class method)\" data-id=\"Selection.selectTo\">selectTo</a>\n              </li>\n              <li id=\"dropdown_Selection.selectToPosition\" data-id=\"Selection.selectToPosition\" class=\"memberLink\"><a href=\"#Selection.selectToPosition\" class=\"\" title=\"Selection.selectToPosition (class method)\" data-id=\"Selection.selectToPosition\">selectToPosition</a>\n              </li>\n              <li id=\"dropdown_Selection.selectUp\" data-id=\"Selection.selectUp\" class=\"memberLink\"><a href=\"#Selection.selectUp\" class=\"\" title=\"Selection.selectUp (class method)\" data-id=\"Selection.selectUp\">selectUp</a>\n              </li>\n              <li id=\"dropdown_Selection.selectWord\" data-id=\"Selection.selectWord\" class=\"memberLink\"><a href=\"#Selection.selectWord\" class=\"\" title=\"Selection.selectWord (class method)\" data-id=\"Selection.selectWord\">selectWord</a>\n              </li>\n              <li id=\"dropdown_Selection.selectWordLeft\" data-id=\"Selection.selectWordLeft\" class=\"memberLink\"><a href=\"#Selection.selectWordLeft\" class=\"\" title=\"Selection.selectWordLeft (class method)\" data-id=\"Selection.selectWordLeft\">selectWordLeft</a>\n              </li>\n              <li id=\"dropdown_Selection.selectWordRight\" data-id=\"Selection.selectWordRight\" class=\"memberLink\"><a href=\"#Selection.selectWordRight\" class=\"\" title=\"Selection.selectWordRight (class method)\" data-id=\"Selection.selectWordRight\">selectWordRight</a>\n              </li>\n              <li id=\"dropdown_Selection.setSelectionAnchor\" data-id=\"Selection.setSelectionAnchor\" class=\"memberLink\"><a href=\"#Selection.setSelectionAnchor\" class=\"\" title=\"Selection.setSelectionAnchor (class method)\" data-id=\"Selection.setSelectionAnchor\">setSelectionAnchor</a>\n              </li>\n              <li id=\"dropdown_Selection.setSelectionRange\" data-id=\"Selection.setSelectionRange\" class=\"memberLink\"><a href=\"#Selection.setSelectionRange\" class=\"\" title=\"Selection.setSelectionRange (class method)\" data-id=\"Selection.setSelectionRange\">setSelectionRange</a>\n              </li>\n              <li id=\"dropdown_Selection.shiftSelection\" data-id=\"Selection.shiftSelection\" class=\"memberLink\"><a href=\"#Selection.shiftSelection\" class=\"\" title=\"Selection.shiftSelection (class method)\" data-id=\"Selection.shiftSelection\">shiftSelection</a>\n              </li>\n              <li id=\"dropdown_Selection.splitIntoLines\" data-id=\"Selection.splitIntoLines\" class=\"memberLink\"><a href=\"#nav=api&api=multi_select\" class=\"\" title=\"Selection.splitIntoLines (class method)\" data-id=\"Selection.splitIntoLines\">splitIntoLines</a>\n              </li>\n              <li id=\"dropdown_Selection.substractPoint\" data-id=\"Selection.substractPoint\" class=\"memberLink\"><a href=\"#nav=api&api=multi_select\" class=\"\" title=\"Selection.substractPoint (class method)\" data-id=\"Selection.substractPoint\">substractPoint</a>\n              </li>\n              <li id=\"dropdown_Selection.toggleBlockSelection\" data-id=\"Selection.toggleBlockSelection\" class=\"memberLink\"><a href=\"#nav=api&api=multi_select\" class=\"\" title=\"Selection.toggleBlockSelection (class method)\" data-id=\"Selection.toggleBlockSelection\">toggleBlockSelection</a>\n              </li>\n              <li id=\"dropdown_Selection.toOrientedRange\" data-id=\"Selection.toOrientedRange\" class=\"memberLink\"><a href=\"#Selection.toOrientedRange\" class=\"\" title=\"Selection.toOrientedRange (class method)\" data-id=\"Selection.toOrientedRange\">toOrientedRange</a>\n              </li>\n              <li id=\"dropdown_Selection.toSingleRange\" data-id=\"Selection.toSingleRange\" class=\"memberLink\"><a href=\"#nav=api&api=multi_select\" class=\"\" title=\"Selection.toSingleRange (class method)\" data-id=\"Selection.toSingleRange\">toSingleRange</a>\n              </li>\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n        </ul>\n      </div>\n    </div>\n    <article id=\"Selection\" data-title=\"Selection (class)\" class=\"article\">\n      <div class=\"section description\">\n        <div class=\"memberContent\"><p>Contains the cursor position and the text selection of an edit session.</p>\n<p>The row/columns used in the selection are in document coordinates representing the coordinates as they appear in the document before applying soft wrap and folding.</p>\n\n        </div>\n      </div>\n    </article>\n    <h3 class=\"sectionHeader\">Constructors</h3>\n    <article id=\"Selection.new\" data-title=\"Selection.new (constructor)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.new\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span class=\"constructorIdentifier\">new </span><span id=\"Selection.new\" class=\"member-name methodClicker\">Selection</span>(<span class=\"sigArgList\"><a href=\"edit_session.html\" class=\"argument methodClicker\" title=\"EditSession (class)\" data-id=\"EditSession\">EditSession</a> session</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.new\" class=\"ellipsis_description\"><p>Creates a new <code>Selection</code> object.</p>\n\n            </div>\n            <div class=\"description\"><p>Creates a new <code>Selection</code> object.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">session</td><td class=\"argType\" \"><a href=\"edit_session.html\" class=\"\" title=\"EditSession (class)\" data-id=\"EditSession\">EditSession</a></td><td class=\"argDescription \"><p>Required. The session to use</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <h3 class=\"sectionHeader\">Events</h3>\n    <article id=\"Selection.event.changeCursor\" data-title=\"Selection.event.changeCursor (event)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.event.changeCursor\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span class=\"eventObjName\">Selection</span><span class=\"eventListenerStart\">.on(\"</span><span id=\"Selection.event.changeCursor\" class=\"member-name eventMember methodClicker\">changeCursor</span><span class=\"eventListenerClose\">\", </span><span class=\"eventFunctionOpen\">function(</span><span class=\"eventFunctionClose\">))</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.event.changeCursor\" class=\"ellipsis_description\"><p>Emitted when the cursor position changes.</p>\n\n            </div>\n            <div class=\"description\"><p>Emitted when the cursor position changes.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.event.changeSelection\" data-title=\"Selection.event.changeSelection (event)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.event.changeSelection\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span class=\"eventObjName\">Selection</span><span class=\"eventListenerStart\">.on(\"</span><span id=\"Selection.event.changeSelection\" class=\"member-name eventMember methodClicker\">changeSelection</span><span class=\"eventListenerClose\">\", </span><span class=\"eventFunctionOpen\">function(</span><span class=\"eventFunctionClose\">))</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.event.changeSelection\" class=\"ellipsis_description\"><p>Emitted when the cursor selection changes.</p>\n\n            </div>\n            <div class=\"description\"><p>Emitted when the cursor selection changes.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <h3 class=\"sectionHeader\">Methods</h3>\n    <article id=\"Selection.addRange\" data-title=\"Selection.addRange (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.addRange\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.addRange\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">addRange</span></span>(<span class=\"sigArgList\"><a href=\"range.html\" class=\"argument methodClicker\" title=\"Range (class)\" data-id=\"Range\">Range</a> range, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"argument methodClicker\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a> $blockChangeEvents</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.addRange\" class=\"ellipsis_description\"><p>Adds a range to a selection by entering multiselect mode, if necessary.</p>\n\n            </div>\n            <div class=\"description\"><p>Adds a range to a selection by entering multiselect mode, if necessary.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">range</td><td class=\"argType\" \"><a href=\"range.html\" class=\"\" title=\"Range (class)\" data-id=\"Range\">Range</a></td><td class=\"argDescription \"><p>Required. The new range to add</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">$blockChangeEvents</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></td><td class=\"argDescription \"><p>Required. Whether or not to block changing events</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.clearSelection\" data-title=\"Selection.clearSelection (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.clearSelection\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.clearSelection\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">clearSelection</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.clearSelection\" class=\"ellipsis_description\"><p>Empties the selection (by de-selecting it). This function also emits the <code>&#39;changeSelection&#39;</code> event.</p>\n\n            </div>\n            <div class=\"description\"><p>Empties the selection (by de-selecting it). This function also emits the <code>&#39;changeSelection&#39;</code> event.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.detach\" data-title=\"Selection.detach (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.detach\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.detach\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">detach</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.detach\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.fromOrientedRange\" data-title=\"Selection.fromOrientedRange (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.fromOrientedRange\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.fromOrientedRange\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">fromOrientedRange</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.fromOrientedRange\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.getAllRanges\" data-title=\"Selection.getAllRanges (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.getAllRanges\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.getAllRanges\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">getAllRanges</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array\" class=\"returnType \" title=\"Array\" data-id=\"Array\">Array</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.getAllRanges\" class=\"ellipsis_description\"><p>Returns a concatenation of all the ranges.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns a concatenation of all the ranges.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.getCursor\" data-title=\"Selection.getCursor (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.getCursor\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.getCursor\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">getCursor</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"returnType \" title=\"Number\" data-id=\"Number\">Number</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.getCursor\" class=\"ellipsis_description\"><p>Gets the current position of the cursor.</p>\n\n            </div>\n            <div class=\"description\"><p>Gets the current position of the cursor.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.getLineRange\" data-title=\"Selection.getLineRange (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.getLineRange\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.getLineRange\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">getLineRange</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.getLineRange\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.getRange\" data-title=\"Selection.getRange (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.getRange\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.getRange\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">getRange</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"range.html\" class=\"returnType \" title=\"Range (class)\" data-id=\"Range\">Range</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.getRange\" class=\"ellipsis_description\"><p>Returns the <a href=\"range.html\" class=\"link-short\" title=\"Range (class)\" data-id=\"Range\"><code>Range</code></a> for the selected text.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the <a href=\"range.html\" class=\"link-short\" title=\"Range (class)\" data-id=\"Range\"><code>Range</code></a> for the selected text.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.getSelectionAnchor\" data-title=\"Selection.getSelectionAnchor (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.getSelectionAnchor\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.getSelectionAnchor\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">getSelectionAnchor</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"returnType \" title=\"Object\" data-id=\"Object\">Object</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.getSelectionAnchor\" class=\"ellipsis_description\"><p>Returns an object containing the <code>row</code> and <code>column</code> of the calling selection anchor.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns an object containing the <code>row</code> and <code>column</code> of the calling selection anchor.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.getSelectionLead\" data-title=\"Selection.getSelectionLead (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.getSelectionLead\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.getSelectionLead\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">getSelectionLead</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"returnType \" title=\"Object\" data-id=\"Object\">Object</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.getSelectionLead\" class=\"ellipsis_description\"><p>Returns an object containing the <code>row</code> and <code>column</code> of the calling selection lead.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns an object containing the <code>row</code> and <code>column</code> of the calling selection lead.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.getWordRange\" data-title=\"Selection.getWordRange (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.getWordRange\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.getWordRange\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">getWordRange</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> row, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> column</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.getWordRange\" class=\"ellipsis_description\"><p>Moves the selection to highlight the entire word.</p>\n\n            </div>\n            <div class=\"description\"><p>Moves the selection to highlight the entire word.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">row</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. </p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">column</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. </p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.isBackwards\" data-title=\"Selection.isBackwards (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.isBackwards\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.isBackwards\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">isBackwards</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"returnType \" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.isBackwards\" class=\"ellipsis_description\"><p>Returns <code>true</code> if the selection is going backwards in the document.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns <code>true</code> if the selection is going backwards in the document.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.isEmpty\" data-title=\"Selection.isEmpty (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.isEmpty\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.isEmpty\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">isEmpty</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"returnType \" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.isEmpty\" class=\"ellipsis_description\"><p>Returns <code>true</code> if the selection is empty.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns <code>true</code> if the selection is empty.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.isMultiLine\" data-title=\"Selection.isMultiLine (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.isMultiLine\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.isMultiLine\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">isMultiLine</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"returnType \" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.isMultiLine\" class=\"ellipsis_description\"><p>Returns <code>true</code> if the selection is a multi-line.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns <code>true</code> if the selection is a multi-line.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.mergeOverlappingRanges\" data-title=\"Selection.mergeOverlappingRanges (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.mergeOverlappingRanges\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.mergeOverlappingRanges\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">mergeOverlappingRanges</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.mergeOverlappingRanges\" class=\"ellipsis_description\"><p>Merges overlapping ranges ensuring consistency after changes</p>\n\n            </div>\n            <div class=\"description\"><p>Merges overlapping ranges ensuring consistency after changes</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.moveCursorBy\" data-title=\"Selection.moveCursorBy (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.moveCursorBy\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.moveCursorBy\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">moveCursorBy</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> rows, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> chars</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.moveCursorBy\" class=\"ellipsis_description\"><p>Moves the cursor to position indicated by the parameters. Negative numbers move the cursor backwards in the document.</p>\n\n            </div>\n            <div class=\"description\"><p>Moves the cursor to position indicated by the parameters. Negative numbers move the cursor backwards in the document.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">rows</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The number of rows to move by</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">chars</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The number of characters to move by</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.moveCursorDown\" data-title=\"Selection.moveCursorDown (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.moveCursorDown\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.moveCursorDown\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">moveCursorDown</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.moveCursorDown\" class=\"ellipsis_description\"><p>Moves the cursor down one row.</p>\n\n            </div>\n            <div class=\"description\"><p>Moves the cursor down one row.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.moveCursorFileEnd\" data-title=\"Selection.moveCursorFileEnd (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.moveCursorFileEnd\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.moveCursorFileEnd\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">moveCursorFileEnd</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.moveCursorFileEnd\" class=\"ellipsis_description\"><p>Moves the cursor to the end of the file.</p>\n\n            </div>\n            <div class=\"description\"><p>Moves the cursor to the end of the file.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.moveCursorFileStart\" data-title=\"Selection.moveCursorFileStart (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.moveCursorFileStart\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.moveCursorFileStart\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">moveCursorFileStart</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.moveCursorFileStart\" class=\"ellipsis_description\"><p>Moves the cursor to the start of the file.</p>\n\n            </div>\n            <div class=\"description\"><p>Moves the cursor to the start of the file.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.moveCursorLeft\" data-title=\"Selection.moveCursorLeft (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.moveCursorLeft\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.moveCursorLeft\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">moveCursorLeft</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.moveCursorLeft\" class=\"ellipsis_description\"><p>Moves the cursor left one column.</p>\n\n            </div>\n            <div class=\"description\"><p>Moves the cursor left one column.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.moveCursorLineEnd\" data-title=\"Selection.moveCursorLineEnd (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.moveCursorLineEnd\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.moveCursorLineEnd\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">moveCursorLineEnd</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.moveCursorLineEnd\" class=\"ellipsis_description\"><p>Moves the cursor to the end of the line.</p>\n\n            </div>\n            <div class=\"description\"><p>Moves the cursor to the end of the line.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.moveCursorLineStart\" data-title=\"Selection.moveCursorLineStart (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.moveCursorLineStart\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.moveCursorLineStart\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">moveCursorLineStart</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.moveCursorLineStart\" class=\"ellipsis_description\"><p>Moves the cursor to the start of the line.</p>\n\n            </div>\n            <div class=\"description\"><p>Moves the cursor to the start of the line.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.moveCursorLongWordLeft\" data-title=\"Selection.moveCursorLongWordLeft (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.moveCursorLongWordLeft\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.moveCursorLongWordLeft\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">moveCursorLongWordLeft</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.moveCursorLongWordLeft\" class=\"ellipsis_description\"><p>Moves the cursor to the word on the left.</p>\n\n            </div>\n            <div class=\"description\"><p>Moves the cursor to the word on the left.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.moveCursorLongWordRight\" data-title=\"Selection.moveCursorLongWordRight (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.moveCursorLongWordRight\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.moveCursorLongWordRight\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">moveCursorLongWordRight</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.moveCursorLongWordRight\" class=\"ellipsis_description\"><p>Moves the cursor to the word on the right.</p>\n\n            </div>\n            <div class=\"description\"><p>Moves the cursor to the word on the right.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.moveCursorRight\" data-title=\"Selection.moveCursorRight (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.moveCursorRight\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.moveCursorRight\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">moveCursorRight</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.moveCursorRight\" class=\"ellipsis_description\"><p>Moves the cursor right one column.</p>\n\n            </div>\n            <div class=\"description\"><p>Moves the cursor right one column.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.moveCursorShortWordLeft\" data-title=\"Selection.moveCursorShortWordLeft (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.moveCursorShortWordLeft\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.moveCursorShortWordLeft\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">moveCursorShortWordLeft</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.moveCursorShortWordLeft\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.moveCursorShortWordRight\" data-title=\"Selection.moveCursorShortWordRight (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.moveCursorShortWordRight\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.moveCursorShortWordRight\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">moveCursorShortWordRight</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.moveCursorShortWordRight\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.moveCursorTo\" data-title=\"Selection.moveCursorTo (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.moveCursorTo\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.moveCursorTo\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">moveCursorTo</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> row, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> column, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"argument methodClicker\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a> keepDesiredColumn</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.moveCursorTo\" class=\"ellipsis_description\"><p>Moves the cursor to the row and column provided. If <code>preventUpdateDesiredColumn</code> is <code>true</code>, then the cursor stays in the same column position as its original point.</p>\n\n            </div>\n            <div class=\"description\"><p>Moves the cursor to the row and column provided. If <code>preventUpdateDesiredColumn</code> is <code>true</code>, then the cursor stays in the same column position as its original point.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">row</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The row to move to</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">column</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The column to move to</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">keepDesiredColumn</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></td><td class=\"argDescription \"><p>Required. If <code>true</code>, the cursor move does not respect the previous column</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.moveCursorToPosition\" data-title=\"Selection.moveCursorToPosition (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.moveCursorToPosition\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.moveCursorToPosition\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">moveCursorToPosition</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> position</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.moveCursorToPosition\" class=\"ellipsis_description\"><p>Moves the selection to the position indicated by its <code>row</code> and <code>column</code>.</p>\n\n            </div>\n            <div class=\"description\"><p>Moves the selection to the position indicated by its <code>row</code> and <code>column</code>.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">position</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. The position to move to</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.moveCursorToScreen\" data-title=\"Selection.moveCursorToScreen (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.moveCursorToScreen\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.moveCursorToScreen\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">moveCursorToScreen</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> row, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> column, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"argument methodClicker\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a> keepDesiredColumn</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.moveCursorToScreen\" class=\"ellipsis_description\"><p>Moves the cursor to the screen position indicated by row and column. If <code>preventUpdateDesiredColumn</code> is <code>true</code>, then the cursor stays in the same column position as its original point.</p>\n\n            </div>\n            <div class=\"description\"><p>Moves the cursor to the screen position indicated by row and column. If <code>preventUpdateDesiredColumn</code> is <code>true</code>, then the cursor stays in the same column position as its original point.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">row</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The row to move to</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">column</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The column to move to</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">keepDesiredColumn</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></td><td class=\"argDescription \"><p>Required. If <code>true</code>, the cursor move does not respect the previous column</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.moveCursorUp\" data-title=\"Selection.moveCursorUp (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.moveCursorUp\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.moveCursorUp\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">moveCursorUp</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.moveCursorUp\" class=\"ellipsis_description\"><p>Moves the cursor up one row.</p>\n\n            </div>\n            <div class=\"description\"><p>Moves the cursor up one row.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.moveCursorWordLeft\" data-title=\"Selection.moveCursorWordLeft (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.moveCursorWordLeft\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.moveCursorWordLeft\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">moveCursorWordLeft</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.moveCursorWordLeft\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.moveCursorWordRight\" data-title=\"Selection.moveCursorWordRight (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.moveCursorWordRight\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.moveCursorWordRight\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">moveCursorWordRight</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.moveCursorWordRight\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.rectangularRangeBlock\" data-title=\"Selection.rectangularRangeBlock (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.rectangularRangeBlock\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.rectangularRangeBlock\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">rectangularRangeBlock</span></span>(<span class=\"sigArgList\"><a href=\"https://github.com/ajaxorg/ace/blob/master/lib/ace/layer/cursor.js\" class=\"argument methodClicker\" title=\"Cursor\" data-id=\"Cursor\">Cursor</a> screenCursor, <a href=\"anchor.html\" class=\"argument methodClicker\" title=\"Anchor (class)\" data-id=\"Anchor\">Anchor</a> screenAnchor, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"argument methodClicker\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a> includeEmptyLines</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"range.html\" class=\"returnType \" title=\"Range (class)\" data-id=\"Range\">Range</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.rectangularRangeBlock\" class=\"ellipsis_description\"><p>Gets list of ranges composing rectangular block on the screen</p>\n\n            </div>\n            <div class=\"description\"><p>Gets list of ranges composing rectangular block on the screen</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">screenCursor</td><td class=\"argType\" \"><a href=\"https://github.com/ajaxorg/ace/blob/master/lib/ace/layer/cursor.js\" class=\"\" title=\"Cursor\" data-id=\"Cursor\">Cursor</a></td><td class=\"argDescription \"><p>Required. The cursor to use</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">screenAnchor</td><td class=\"argType\" \"><a href=\"anchor.html\" class=\"\" title=\"Anchor (class)\" data-id=\"Anchor\">Anchor</a></td><td class=\"argDescription \"><p>Required. The anchor to use</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">includeEmptyLines</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></td><td class=\"argDescription \"><p>Required. If true, this includes ranges inside the block which are empty due to clipping</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.selectAll\" data-title=\"Selection.selectAll (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.selectAll\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.selectAll\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">selectAll</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.selectAll\" class=\"ellipsis_description\"><p>Selects all the text in the document.</p>\n\n            </div>\n            <div class=\"description\"><p>Selects all the text in the document.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.selectAWord\" data-title=\"Selection.selectAWord (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.selectAWord\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.selectAWord\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">selectAWord</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.selectAWord\" class=\"ellipsis_description\"><p>Selects a word, including its right whitespace.</p>\n\n            </div>\n            <div class=\"description\"><p>Selects a word, including its right whitespace.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.selectDown\" data-title=\"Selection.selectDown (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.selectDown\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.selectDown\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">selectDown</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.selectDown\" class=\"ellipsis_description\"><p>Moves the selection down one row.</p>\n\n            </div>\n            <div class=\"description\"><p>Moves the selection down one row.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.selectFileEnd\" data-title=\"Selection.selectFileEnd (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.selectFileEnd\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.selectFileEnd\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">selectFileEnd</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.selectFileEnd\" class=\"ellipsis_description\"><p>Moves the selection to the end of the file.</p>\n\n            </div>\n            <div class=\"description\"><p>Moves the selection to the end of the file.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.selectFileStart\" data-title=\"Selection.selectFileStart (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.selectFileStart\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.selectFileStart\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">selectFileStart</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.selectFileStart\" class=\"ellipsis_description\"><p>Moves the selection to the start of the file.</p>\n\n            </div>\n            <div class=\"description\"><p>Moves the selection to the start of the file.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.selectLeft\" data-title=\"Selection.selectLeft (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.selectLeft\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.selectLeft\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">selectLeft</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.selectLeft\" class=\"ellipsis_description\"><p>Moves the selection left one column.</p>\n\n            </div>\n            <div class=\"description\"><p>Moves the selection left one column.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.selectLine\" data-title=\"Selection.selectLine (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.selectLine\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.selectLine\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">selectLine</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.selectLine\" class=\"ellipsis_description\"><p>Selects the entire line.</p>\n\n            </div>\n            <div class=\"description\"><p>Selects the entire line.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.selectLineEnd\" data-title=\"Selection.selectLineEnd (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.selectLineEnd\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.selectLineEnd\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">selectLineEnd</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.selectLineEnd\" class=\"ellipsis_description\"><p>Moves the selection to the end of the current line.</p>\n\n            </div>\n            <div class=\"description\"><p>Moves the selection to the end of the current line.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.selectLineStart\" data-title=\"Selection.selectLineStart (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.selectLineStart\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.selectLineStart\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">selectLineStart</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.selectLineStart\" class=\"ellipsis_description\"><p>Moves the selection to the beginning of the current line.</p>\n\n            </div>\n            <div class=\"description\"><p>Moves the selection to the beginning of the current line.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.selectRight\" data-title=\"Selection.selectRight (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.selectRight\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.selectRight\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">selectRight</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.selectRight\" class=\"ellipsis_description\"><p>Moves the selection right one column.</p>\n\n            </div>\n            <div class=\"description\"><p>Moves the selection right one column.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.selectTo\" data-title=\"Selection.selectTo (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.selectTo\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.selectTo\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">selectTo</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> row, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> column</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.selectTo\" class=\"ellipsis_description\"><p>Moves the selection cursor to the indicated row and column.</p>\n\n            </div>\n            <div class=\"description\"><p>Moves the selection cursor to the indicated row and column.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">row</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The row to select to</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">column</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The column to select to</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.selectToPosition\" data-title=\"Selection.selectToPosition (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.selectToPosition\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.selectToPosition\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">selectToPosition</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> pos</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.selectToPosition\" class=\"ellipsis_description\"><p>Moves the selection cursor to the row and column indicated by <code>pos</code>.</p>\n\n            </div>\n            <div class=\"description\"><p>Moves the selection cursor to the row and column indicated by <code>pos</code>.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">pos</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. An object containing the row and column</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.selectUp\" data-title=\"Selection.selectUp (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.selectUp\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.selectUp\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">selectUp</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.selectUp\" class=\"ellipsis_description\"><p>Moves the selection up one row.</p>\n\n            </div>\n            <div class=\"description\"><p>Moves the selection up one row.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.selectWord\" data-title=\"Selection.selectWord (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.selectWord\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.selectWord\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">selectWord</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.selectWord\" class=\"ellipsis_description\"><p>Selects an entire word boundary.</p>\n\n            </div>\n            <div class=\"description\"><p>Selects an entire word boundary.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.selectWordLeft\" data-title=\"Selection.selectWordLeft (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.selectWordLeft\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.selectWordLeft\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">selectWordLeft</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.selectWordLeft\" class=\"ellipsis_description\"><p>Moves the selection to the first word on the left.</p>\n\n            </div>\n            <div class=\"description\"><p>Moves the selection to the first word on the left.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.selectWordRight\" data-title=\"Selection.selectWordRight (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.selectWordRight\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.selectWordRight\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">selectWordRight</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.selectWordRight\" class=\"ellipsis_description\"><p>Moves the selection to the first word on the right.</p>\n\n            </div>\n            <div class=\"description\"><p>Moves the selection to the first word on the right.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.setSelectionAnchor\" data-title=\"Selection.setSelectionAnchor (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.setSelectionAnchor\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.setSelectionAnchor\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">setSelectionAnchor</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> row, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> column</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.setSelectionAnchor\" class=\"ellipsis_description\"><p>Sets the row and column position of the anchor. This function also emits the <code>&#39;changeSelection&#39;</code> event.</p>\n\n            </div>\n            <div class=\"description\"><p>Sets the row and column position of the anchor. This function also emits the <code>&#39;changeSelection&#39;</code> event.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">row</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The new row</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">column</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The new column</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.setSelectionRange\" data-title=\"Selection.setSelectionRange (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.setSelectionRange\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.setSelectionRange\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">setSelectionRange</span></span>(<span class=\"sigArgList\"><a href=\"range.html\" class=\"argument methodClicker\" title=\"Range (class)\" data-id=\"Range\">Range</a> range, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"argument methodClicker\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a> reverse</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.setSelectionRange\" class=\"ellipsis_description\"><p>Sets the selection to the provided range.</p>\n\n            </div>\n            <div class=\"description\"><p>Sets the selection to the provided range.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">range</td><td class=\"argType\" \"><a href=\"range.html\" class=\"\" title=\"Range (class)\" data-id=\"Range\">Range</a></td><td class=\"argDescription \"><p>Required. The range of text to select</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">reverse</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></td><td class=\"argDescription \"><p>Required. Indicates if the range should go backwards (<code>true</code>) or not</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.shiftSelection\" data-title=\"Selection.shiftSelection (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.shiftSelection\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.shiftSelection\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">shiftSelection</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> columns</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.shiftSelection\" class=\"ellipsis_description\"><p>Shifts the selection up (or down, if <a href=\"#Selection.isBackwards\" class=\"link-short\" title=\"Selection.isBackwards (class method)\" data-id=\"Selection.isBackwards\"><code>isBackwards()</code></a> is true) the given number of columns.</p>\n\n            </div>\n            <div class=\"description\"><p>Shifts the selection up (or down, if <a href=\"#Selection.isBackwards\" class=\"link-short\" title=\"Selection.isBackwards (class method)\" data-id=\"Selection.isBackwards\"><code>isBackwards()</code></a> is true) the given number of columns.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">columns</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The number of columns to shift by</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.splitIntoLines\" data-title=\"Selection.splitIntoLines (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.splitIntoLines\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.splitIntoLines\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">splitIntoLines</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.splitIntoLines\" class=\"ellipsis_description\"><p>Splits all the ranges into lines.</p>\n\n            </div>\n            <div class=\"description\"><p>Splits all the ranges into lines.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.substractPoint\" data-title=\"Selection.substractPoint (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.substractPoint\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.substractPoint\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">substractPoint</span></span>(<span class=\"sigArgList\"><a href=\"range.html\" class=\"argument methodClicker\" title=\"Range (class)\" data-id=\"Range\">Range</a> pos</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.substractPoint\" class=\"ellipsis_description\"><p>Removes a Range containing pos (if it exists).</p>\n\n            </div>\n            <div class=\"description\"><p>Removes a Range containing pos (if it exists).</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">pos</td><td class=\"argType\" \"><a href=\"range.html\" class=\"\" title=\"Range (class)\" data-id=\"Range\">Range</a></td><td class=\"argDescription \"><p>Required. The position to remove, as a <code>{row, column}</code> object</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.toggleBlockSelection\" data-title=\"Selection.toggleBlockSelection (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.toggleBlockSelection\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.toggleBlockSelection\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">toggleBlockSelection</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.toggleBlockSelection\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.toOrientedRange\" data-title=\"Selection.toOrientedRange (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.toOrientedRange\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.toOrientedRange\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">toOrientedRange</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.toOrientedRange\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Selection.toSingleRange\" data-title=\"Selection.toSingleRange (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Selection.toSingleRange\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Selection.toSingleRange\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Selection.</span><span class=\"sigMemberName\">toSingleRange</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Selection.toSingleRange\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n  </div>\n  <script defer src=\"./resources/javascripts/ux.js\"></script>\n  <script src=\"./resources/javascripts/clicker.js\"></script>\n  <script src=\"./resources/javascripts/jquery-scrollspy.js\"></script>\n  <script defer src=\"./resources/javascripts/disqus-ext.js\"></script>\n  <script defer src=\"./resources/javascripts/ga.js\"></script>\n  <div id=\"disqus_thread\"></div>\n</div>\n"
  },
  {
    "path": "api/split.html",
    "content": "\n<div id=\"documentation\" class=\"span9\">\n  <div class=\"classContent\">\n    <div class=\"membersBackground\"></div>\n    <div class=\" members pos0\">\n      <div class=\" membersContent pos0\">\n        <h1 class=\"memberHeader\"><span class=\"name\">Split</span>\n        </h1>\n        <ul data-tabs=\"tabs\" class=\"nav tabs pos0\">\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\"><a href=\"#\" data-toggle=\"dropdown\" class=\"dropdown-toggle\"><span>Functions (21)</span><b class=\"caret\"></b></a>\n            <ul class=\"dropdown-menu\">\n              <li id=\"dropdown_Split.blur\" data-id=\"Split.blur\" class=\"memberLink\"><a href=\"#Split.blur\" class=\"\" title=\"Split.blur (class method)\" data-id=\"Split.blur\">blur</a>\n              </li>\n              <li id=\"dropdown_Split.execute\" data-id=\"Split.execute\" class=\"memberLink\"><a href=\"#Split.execute\" class=\"\" title=\"Split.execute (class method)\" data-id=\"Split.execute\">execute</a>\n              </li>\n              <li id=\"dropdown_Split.focus\" data-id=\"Split.focus\" class=\"memberLink\"><a href=\"#Split.focus\" class=\"\" title=\"Split.focus (class method)\" data-id=\"Split.focus\">focus</a>\n              </li>\n              <li id=\"dropdown_Split.forEach\" data-id=\"Split.forEach\" class=\"memberLink\"><a href=\"#Split.forEach\" class=\"\" title=\"Split.forEach (class method)\" data-id=\"Split.forEach\">forEach</a>\n              </li>\n              <li id=\"dropdown_Split.getCurrentEditor\" data-id=\"Split.getCurrentEditor\" class=\"memberLink\"><a href=\"#Split.getCurrentEditor\" class=\"\" title=\"Split.getCurrentEditor (class method)\" data-id=\"Split.getCurrentEditor\">getCurrentEditor</a>\n              </li>\n              <li id=\"dropdown_Split.getEditor\" data-id=\"Split.getEditor\" class=\"memberLink\"><a href=\"#Split.getEditor\" class=\"\" title=\"Split.getEditor (class method)\" data-id=\"Split.getEditor\">getEditor</a>\n              </li>\n              <li id=\"dropdown_Split.getOrientation\" data-id=\"Split.getOrientation\" class=\"memberLink\"><a href=\"#Split.getOrientation\" class=\"\" title=\"Split.getOrientation (class method)\" data-id=\"Split.getOrientation\">getOrientation</a>\n              </li>\n              <li id=\"dropdown_Split.getSplits\" data-id=\"Split.getSplits\" class=\"memberLink\"><a href=\"#Split.getSplits\" class=\"\" title=\"Split.getSplits (class method)\" data-id=\"Split.getSplits\">getSplits</a>\n              </li>\n              <li id=\"dropdown_Split.hasRedo\" data-id=\"Split.hasRedo\" class=\"memberLink\"><a href=\"#Split.hasRedo\" class=\"\" title=\"Split.hasRedo (class method)\" data-id=\"Split.hasRedo\">hasRedo</a>\n              </li>\n              <li id=\"dropdown_Split.hasUndo\" data-id=\"Split.hasUndo\" class=\"memberLink\"><a href=\"#Split.hasUndo\" class=\"\" title=\"Split.hasUndo (class method)\" data-id=\"Split.hasUndo\">hasUndo</a>\n              </li>\n              <li id=\"dropdown_Split.redo\" data-id=\"Split.redo\" class=\"memberLink\"><a href=\"#Split.redo\" class=\"\" title=\"Split.redo (class method)\" data-id=\"Split.redo\">redo</a>\n              </li>\n              <li id=\"dropdown_Split.reset\" data-id=\"Split.reset\" class=\"memberLink\"><a href=\"#Split.reset\" class=\"\" title=\"Split.reset (class method)\" data-id=\"Split.reset\">reset</a>\n              </li>\n              <li id=\"dropdown_Split.resize\" data-id=\"Split.resize\" class=\"memberLink\"><a href=\"#Split.resize\" class=\"\" title=\"Split.resize (class method)\" data-id=\"Split.resize\">resize</a>\n              </li>\n              <li id=\"dropdown_Split.setFontSize\" data-id=\"Split.setFontSize\" class=\"memberLink\"><a href=\"#Split.setFontSize\" class=\"\" title=\"Split.setFontSize (class method)\" data-id=\"Split.setFontSize\">setFontSize</a>\n              </li>\n              <li id=\"dropdown_Split.setKeyboardHandler\" data-id=\"Split.setKeyboardHandler\" class=\"memberLink\"><a href=\"#Split.setKeyboardHandler\" class=\"\" title=\"Split.setKeyboardHandler (class method)\" data-id=\"Split.setKeyboardHandler\">setKeyboardHandler</a>\n              </li>\n              <li id=\"dropdown_Split.setOrientation\" data-id=\"Split.setOrientation\" class=\"memberLink\"><a href=\"#Split.setOrientation\" class=\"\" title=\"Split.setOrientation (class method)\" data-id=\"Split.setOrientation\">setOrientation</a>\n              </li>\n              <li id=\"dropdown_Split.setSession\" data-id=\"Split.setSession\" class=\"memberLink\"><a href=\"#Split.setSession\" class=\"\" title=\"Split.setSession (class method)\" data-id=\"Split.setSession\">setSession</a>\n              </li>\n              <li id=\"dropdown_Split.setSplits\" data-id=\"Split.setSplits\" class=\"memberLink\"><a href=\"#Split.setSplits\" class=\"\" title=\"Split.setSplits (class method)\" data-id=\"Split.setSplits\">setSplits</a>\n              </li>\n              <li id=\"dropdown_Split.setTheme\" data-id=\"Split.setTheme\" class=\"memberLink\"><a href=\"#Split.setTheme\" class=\"\" title=\"Split.setTheme (class method)\" data-id=\"Split.setTheme\">setTheme</a>\n              </li>\n              <li id=\"dropdown_Split.undo\" data-id=\"Split.undo\" class=\"memberLink\"><a href=\"#Split.undo\" class=\"\" title=\"Split.undo (class method)\" data-id=\"Split.undo\">undo</a>\n              </li>\n              <li id=\"dropdown_Split.UndoManagerProxy\" data-id=\"Split.UndoManagerProxy\" class=\"memberLink\"><a href=\"#Split.UndoManagerProxy\" class=\"\" title=\"Split.UndoManagerProxy (class method)\" data-id=\"Split.UndoManagerProxy\">UndoManagerProxy</a>\n              </li>\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n        </ul>\n      </div>\n    </div>\n    <article id=\"Split\" data-title=\"Split (class)\" class=\"article\">\n    </article>\n    <h3 class=\"sectionHeader\">Methods</h3>\n    <article id=\"Split.blur\" data-title=\"Split.blur (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Split.blur\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Split.blur\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Split.</span><span class=\"sigMemberName\">blur</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Split.blur\" class=\"ellipsis_description\"><p>Blurs the current editor.</p>\n\n            </div>\n            <div class=\"description\"><p>Blurs the current editor.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Split.execute\" data-title=\"Split.execute (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Split.execute\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Split.execute\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Split.</span><span class=\"sigMemberName\">execute</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Split.execute\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Split.focus\" data-title=\"Split.focus (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Split.focus\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Split.focus\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Split.</span><span class=\"sigMemberName\">focus</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Split.focus\" class=\"ellipsis_description\"><p>Focuses the current editor.</p>\n\n            </div>\n            <div class=\"description\"><p>Focuses the current editor.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Split.forEach\" data-title=\"Split.forEach (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Split.forEach\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Split.forEach\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Split.</span><span class=\"sigMemberName\">forEach</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function\" class=\"argument methodClicker\" title=\"Function\" data-id=\"Function\">Function</a> callback, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"argument methodClicker\" title=\"String\" data-id=\"String\">String</a> scope</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Split.forEach\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">callback</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function\" class=\"\" title=\"Function\" data-id=\"Function\">Function</a></td><td class=\"argDescription \"><p>Required. A callback function to execute</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">scope</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"\" title=\"String\" data-id=\"String\">String</a></td><td class=\"argDescription \"><p>Required. The default scope for the callback</p>\n<p>Executes <code>callback</code> on all of the available editors.</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Split.getCurrentEditor\" data-title=\"Split.getCurrentEditor (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Split.getCurrentEditor\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Split.getCurrentEditor\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Split.</span><span class=\"sigMemberName\">getCurrentEditor</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"editor.html\" class=\"returnType \" title=\"Editor (class)\" data-id=\"Editor\">Editor</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Split.getCurrentEditor\" class=\"ellipsis_description\"><p>Returns the current editor.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the current editor.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Split.getEditor\" data-title=\"Split.getEditor (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Split.getEditor\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Split.getEditor\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Split.</span><span class=\"sigMemberName\">getEditor</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> idx</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Split.getEditor\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">idx</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The index of the editor you want</p>\n<p>Returns the editor identified by the index <code>idx</code>.</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Split.getOrientation\" data-title=\"Split.getOrientation (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Split.getOrientation\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Split.getOrientation\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Split.</span><span class=\"sigMemberName\">getOrientation</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"returnType \" title=\"Number\" data-id=\"Number\">Number</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Split.getOrientation\" class=\"ellipsis_description\"><p>Returns the orientation.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the orientation.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Split.getSplits\" data-title=\"Split.getSplits (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Split.getSplits\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Split.getSplits\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Split.</span><span class=\"sigMemberName\">getSplits</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"returnType \" title=\"Number\" data-id=\"Number\">Number</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Split.getSplits\" class=\"ellipsis_description\"><p>Returns the number of splits.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the number of splits.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Split.hasRedo\" data-title=\"Split.hasRedo (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Split.hasRedo\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Split.hasRedo\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Split.</span><span class=\"sigMemberName\">hasRedo</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Split.hasRedo\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Split.hasUndo\" data-title=\"Split.hasUndo (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Split.hasUndo\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Split.hasUndo\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Split.</span><span class=\"sigMemberName\">hasUndo</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Split.hasUndo\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Split.redo\" data-title=\"Split.redo (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Split.redo\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Split.redo\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Split.</span><span class=\"sigMemberName\">redo</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Split.redo\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Split.reset\" data-title=\"Split.reset (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Split.reset\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Split.reset\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Split.</span><span class=\"sigMemberName\">reset</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Split.reset\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Split.resize\" data-title=\"Split.resize (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Split.resize\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Split.resize\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Split.</span><span class=\"sigMemberName\">resize</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Split.resize\" class=\"ellipsis_description\"><p>Resizes the editor.</p>\n\n            </div>\n            <div class=\"description\"><p>Resizes the editor.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Split.setFontSize\" data-title=\"Split.setFontSize (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Split.setFontSize\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Split.setFontSize\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Split.</span><span class=\"sigMemberName\">setFontSize</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> size</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Split.setFontSize\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">size</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The new font size</p>\n<p>Sets the font size, in pixels, for all the available editors.</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Split.setKeyboardHandler\" data-title=\"Split.setKeyboardHandler (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Split.setKeyboardHandler\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Split.setKeyboardHandler\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Split.</span><span class=\"sigMemberName\">setKeyboardHandler</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"argument methodClicker\" title=\"String\" data-id=\"String\">String</a> keybinding</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Split.setKeyboardHandler\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">keybinding</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"\" title=\"String\" data-id=\"String\">String</a></td><td class=\"argDescription \"><p>Required. Sets the keyboard handler for the editor.</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Split.setOrientation\" data-title=\"Split.setOrientation (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Split.setOrientation\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Split.setOrientation\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Split.</span><span class=\"sigMemberName\">setOrientation</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> orientation</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Split.setOrientation\" class=\"ellipsis_description\"><p>Sets the orientation.</p>\n\n            </div>\n            <div class=\"description\"><p>Sets the orientation.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">orientation</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The new orientation value</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Split.setSession\" data-title=\"Split.setSession (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Split.setSession\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Split.setSession\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Split.</span><span class=\"sigMemberName\">setSession</span></span>(<span class=\"sigArgList\"><a href=\"edit_session.html\" class=\"argument methodClicker\" title=\"EditSession (class)\" data-id=\"EditSession\">EditSession</a> session, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> idx</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Split.setSession\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">session</td><td class=\"argType\" \"><a href=\"edit_session.html\" class=\"\" title=\"EditSession (class)\" data-id=\"EditSession\">EditSession</a></td><td class=\"argDescription \"><p>Required. The new edit session</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">idx</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The editor&#39;s index you&#39;re interested in</p>\n<p>Sets a new <a href=\"edit_session.html\" class=\"link-short\" title=\"EditSession (class)\" data-id=\"EditSession\"><code>EditSession</code></a> for the indicated editor.</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Split.setSplits\" data-title=\"Split.setSplits (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Split.setSplits\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Split.setSplits\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Split.</span><span class=\"sigMemberName\">setSplits</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Split.setSplits\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Split.setTheme\" data-title=\"Split.setTheme (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Split.setTheme\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Split.setTheme\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Split.</span><span class=\"sigMemberName\">setTheme</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"argument methodClicker\" title=\"String\" data-id=\"String\">String</a> theme</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Split.setTheme\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">theme</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"\" title=\"String\" data-id=\"String\">String</a></td><td class=\"argDescription \"><p>Required. The name of the theme to set</p>\n<p>Sets a theme for each of the available editors.</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Split.undo\" data-title=\"Split.undo (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Split.undo\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Split.undo\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Split.</span><span class=\"sigMemberName\">undo</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Split.undo\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"Split.UndoManagerProxy\" data-title=\"Split.UndoManagerProxy (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Split.UndoManagerProxy\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Split.UndoManagerProxy\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Split.</span><span class=\"sigMemberName\">UndoManagerProxy</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Split.UndoManagerProxy\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n  </div>\n  <script defer src=\"./resources/javascripts/ux.js\"></script>\n  <script src=\"./resources/javascripts/clicker.js\"></script>\n  <script src=\"./resources/javascripts/jquery-scrollspy.js\"></script>\n  <script defer src=\"./resources/javascripts/disqus-ext.js\"></script>\n  <script defer src=\"./resources/javascripts/ga.js\"></script>\n  <div id=\"disqus_thread\"></div>\n</div>"
  },
  {
    "path": "api/token_iterator.html",
    "content": "\n<div id=\"documentation\" class=\"span9\">\n  <div class=\"classContent\">\n    <div class=\"membersBackground\"></div>\n    <div class=\" members pos0\">\n      <div class=\" membersContent pos0\">\n        <h1 class=\"memberHeader\"><span class=\"name\">TokenIterator</span>\n        </h1>\n        <ul data-tabs=\"tabs\" class=\"nav tabs pos0\">\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\"><a href=\"#\" data-toggle=\"dropdown\" class=\"dropdown-toggle\"><span>Constructors (1)</span><b class=\"caret\"></b></a>\n            <ul class=\"dropdown-menu\">\n              <li id=\"dropdown_TokenIterator.new\" data-id=\"TokenIterator.new\" class=\"memberLink\"><a href=\"#TokenIterator.new\" class=\"\" title=\"TokenIterator.new (constructor)\" data-id=\"TokenIterator.new\">new</a>\n              </li>\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\"><a href=\"#\" data-toggle=\"dropdown\" class=\"dropdown-toggle\"><span>Functions (5)</span><b class=\"caret\"></b></a>\n            <ul class=\"dropdown-menu\">\n              <li id=\"dropdown_TokenIterator.getCurrentToken\" data-id=\"TokenIterator.getCurrentToken\" class=\"memberLink\"><a href=\"#TokenIterator.getCurrentToken\" class=\"\" title=\"TokenIterator.getCurrentToken (class method)\" data-id=\"TokenIterator.getCurrentToken\">getCurrentToken</a>\n              </li>\n              <li id=\"dropdown_TokenIterator.getCurrentTokenColumn\" data-id=\"TokenIterator.getCurrentTokenColumn\" class=\"memberLink\"><a href=\"#TokenIterator.getCurrentTokenColumn\" class=\"\" title=\"TokenIterator.getCurrentTokenColumn (class method)\" data-id=\"TokenIterator.getCurrentTokenColumn\">getCurrentTokenColumn</a>\n              </li>\n              <li id=\"dropdown_TokenIterator.getCurrentTokenRow\" data-id=\"TokenIterator.getCurrentTokenRow\" class=\"memberLink\"><a href=\"#TokenIterator.getCurrentTokenRow\" class=\"\" title=\"TokenIterator.getCurrentTokenRow (class method)\" data-id=\"TokenIterator.getCurrentTokenRow\">getCurrentTokenRow</a>\n              </li>\n              <li id=\"dropdown_TokenIterator.stepBackward\" data-id=\"TokenIterator.stepBackward\" class=\"memberLink\"><a href=\"#TokenIterator.stepBackward\" class=\"\" title=\"TokenIterator.stepBackward (class method)\" data-id=\"TokenIterator.stepBackward\">stepBackward</a>\n              </li>\n              <li id=\"dropdown_TokenIterator.stepForward\" data-id=\"TokenIterator.stepForward\" class=\"memberLink\"><a href=\"#TokenIterator.stepForward\" class=\"\" title=\"TokenIterator.stepForward (class method)\" data-id=\"TokenIterator.stepForward\">stepForward</a>\n              </li>\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n        </ul>\n      </div>\n    </div>\n    <article id=\"TokenIterator\" data-title=\"TokenIterator (class)\" class=\"article\">\n      <div class=\"section description\">\n        <div class=\"memberContent\"><p>This class provides an essay way to treat the document as a stream of tokens, and provides methods to iterate over these tokens.</p>\n\n        </div>\n      </div>\n    </article>\n    <h3 class=\"sectionHeader\">Constructors</h3>\n    <article id=\"TokenIterator.new\" data-title=\"TokenIterator.new (constructor)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"TokenIterator.new\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span class=\"constructorIdentifier\">new </span><span id=\"TokenIterator.new\" class=\"member-name methodClicker\">TokenIterator</span>(<span class=\"sigArgList\"><a href=\"edit_session.html\" class=\"argument methodClicker\" title=\"EditSession (class)\" data-id=\"EditSession\">EditSession</a> session, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> initialRow, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> initialColumn</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_TokenIterator.new\" class=\"ellipsis_description\"><p>Creates a new token iterator object. The initial token index is set to the provided row and column coordinates.</p>\n\n            </div>\n            <div class=\"description\"><p>Creates a new token iterator object. The initial token index is set to the provided row and column coordinates.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">session</td><td class=\"argType\" \"><a href=\"edit_session.html\" class=\"\" title=\"EditSession (class)\" data-id=\"EditSession\">EditSession</a></td><td class=\"argDescription \"><p>Required. The session to associate with</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">initialRow</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The row to start the tokenizing at</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">initialColumn</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The column to start the tokenizing at</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <h3 class=\"sectionHeader\">Methods</h3>\n    <article id=\"TokenIterator.getCurrentToken\" data-title=\"TokenIterator.getCurrentToken (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"TokenIterator.getCurrentToken\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"TokenIterator.getCurrentToken\" class=\"member-name methodClicker\"><span class=\"sigClassName\">TokenIterator.</span><span class=\"sigMemberName\">getCurrentToken</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"returnType \" title=\"String\" data-id=\"String\">String</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_TokenIterator.getCurrentToken\" class=\"ellipsis_description\"><p>Returns the current tokenized string.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the current tokenized string.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"TokenIterator.getCurrentTokenColumn\" data-title=\"TokenIterator.getCurrentTokenColumn (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"TokenIterator.getCurrentTokenColumn\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"TokenIterator.getCurrentTokenColumn\" class=\"member-name methodClicker\"><span class=\"sigClassName\">TokenIterator.</span><span class=\"sigMemberName\">getCurrentTokenColumn</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"returnType \" title=\"Number\" data-id=\"Number\">Number</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_TokenIterator.getCurrentTokenColumn\" class=\"ellipsis_description\"><p>Returns the current column.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the current column.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"TokenIterator.getCurrentTokenRow\" data-title=\"TokenIterator.getCurrentTokenRow (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"TokenIterator.getCurrentTokenRow\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"TokenIterator.getCurrentTokenRow\" class=\"member-name methodClicker\"><span class=\"sigClassName\">TokenIterator.</span><span class=\"sigMemberName\">getCurrentTokenRow</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"returnType \" title=\"Number\" data-id=\"Number\">Number</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_TokenIterator.getCurrentTokenRow\" class=\"ellipsis_description\"><p>Returns the current row.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the current row.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"TokenIterator.stepBackward\" data-title=\"TokenIterator.stepBackward (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"TokenIterator.stepBackward\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"TokenIterator.stepBackward\" class=\"member-name methodClicker\"><span class=\"sigClassName\">TokenIterator.</span><span class=\"sigMemberName\">stepBackward</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"returnType \" title=\"String\" data-id=\"String\">String</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_TokenIterator.stepBackward\" class=\"ellipsis_description\"><p>Tokenizes all the items from the current point to the row prior in the document.</p>\n\n            </div>\n            <div class=\"description\"><p>Tokenizes all the items from the current point to the row prior in the document.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"TokenIterator.stepForward\" data-title=\"TokenIterator.stepForward (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"TokenIterator.stepForward\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"TokenIterator.stepForward\" class=\"member-name methodClicker\"><span class=\"sigClassName\">TokenIterator.</span><span class=\"sigMemberName\">stepForward</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"returnType \" title=\"String\" data-id=\"String\">String</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_TokenIterator.stepForward\" class=\"ellipsis_description\"><p>Tokenizes all the items from the current point until the next row in the document. If the current point is at the end of the file, this function returns <code>null</code>. Otherwise, it returns the tokenized string.</p>\n\n            </div>\n            <div class=\"description\"><p>Tokenizes all the items from the current point until the next row in the document. If the current point is at the end of the file, this function returns <code>null</code>. Otherwise, it returns the tokenized string.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n  </div>\n  <script defer src=\"./resources/javascripts/ux.js\"></script>\n  <script src=\"./resources/javascripts/clicker.js\"></script>\n  <script src=\"./resources/javascripts/jquery-scrollspy.js\"></script>\n  <script defer src=\"./resources/javascripts/disqus-ext.js\"></script>\n  <script defer src=\"./resources/javascripts/ga.js\"></script>\n  <div id=\"disqus_thread\"></div>\n</div>\n"
  },
  {
    "path": "api/tokenizer.html",
    "content": "\n<div id=\"documentation\" class=\"span9\">\n  <div class=\"classContent\">\n    <div class=\"membersBackground\"></div>\n    <div class=\" members pos0\">\n      <div class=\" membersContent pos0\">\n        <h1 class=\"memberHeader\"><span class=\"name\">Tokenizer</span>\n        </h1>\n        <ul data-tabs=\"tabs\" class=\"nav tabs pos0\">\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\"><a href=\"#\" data-toggle=\"dropdown\" class=\"dropdown-toggle\"><span>Constructors (1)</span><b class=\"caret\"></b></a>\n            <ul class=\"dropdown-menu\">\n              <li id=\"dropdown_Tokenizer.new\" data-id=\"Tokenizer.new\" class=\"memberLink\"><a href=\"#Tokenizer.new\" class=\"\" title=\"Tokenizer.new (constructor)\" data-id=\"Tokenizer.new\">new</a>\n              </li>\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\"><a href=\"#\" data-toggle=\"dropdown\" class=\"dropdown-toggle\"><span>Functions (1)</span><b class=\"caret\"></b></a>\n            <ul class=\"dropdown-menu\">\n              <li id=\"dropdown_Tokenizer.getLineTokens\" data-id=\"Tokenizer.getLineTokens\" class=\"memberLink\"><a href=\"#Tokenizer.getLineTokens\" class=\"\" title=\"Tokenizer.getLineTokens (class method)\" data-id=\"Tokenizer.getLineTokens\">getLineTokens</a>\n              </li>\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n        </ul>\n      </div>\n    </div>\n    <article id=\"Tokenizer\" data-title=\"Tokenizer (class)\" class=\"article\">\n      <div class=\"section description\">\n        <div class=\"memberContent\"><p>This class takes a set of highlighting rules, and creates a tokenizer out of them. For more information, see <a href=\"https://github.com/ajaxorg/ace/wiki/Creating-or-Extending-an-Edit-Mode#wiki-extendingTheHighlighter\">the wiki on extending highlighters</a>.</p>\n\n        </div>\n      </div>\n    </article>\n    <h3 class=\"sectionHeader\">Constructors</h3>\n    <article id=\"Tokenizer.new\" data-title=\"Tokenizer.new (constructor)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Tokenizer.new\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span class=\"constructorIdentifier\">new </span><span id=\"Tokenizer.new\" class=\"member-name methodClicker\">Tokenizer</span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> rules, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"argument methodClicker\" title=\"String\" data-id=\"String\">String</a> flag</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Tokenizer.new\" class=\"ellipsis_description\"><p>Constructs a new tokenizer based on the given rules and flags.</p>\n\n            </div>\n            <div class=\"description\"><p>Constructs a new tokenizer based on the given rules and flags.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">rules</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. The highlighting rules</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">flag</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"\" title=\"String\" data-id=\"String\">String</a></td><td class=\"argDescription \"><p>Required. Any additional regular expression flags to pass (like &quot;i&quot; for case insensitive)</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <h3 class=\"sectionHeader\">Methods</h3>\n    <article id=\"Tokenizer.getLineTokens\" data-title=\"Tokenizer.getLineTokens (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"Tokenizer.getLineTokens\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"Tokenizer.getLineTokens\" class=\"member-name methodClicker\"><span class=\"sigClassName\">Tokenizer.</span><span class=\"sigMemberName\">getLineTokens</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> line, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> startState</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"returnType \" title=\"Object\" data-id=\"Object\">Object</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_Tokenizer.getLineTokens\" class=\"ellipsis_description\"><p>Returns an object containing two properties: <code>tokens</code>, which contains all the tokens; and <code>state</code>, the current state.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns an object containing two properties: <code>tokens</code>, which contains all the tokens; and <code>state</code>, the current state.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">line</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. </p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">startState</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. </p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n  </div>\n  <script defer src=\"./resources/javascripts/ux.js\"></script>\n  <script src=\"./resources/javascripts/clicker.js\"></script>\n  <script src=\"./resources/javascripts/jquery-scrollspy.js\"></script>\n  <script defer src=\"./resources/javascripts/disqus-ext.js\"></script>\n  <script defer src=\"./resources/javascripts/ga.js\"></script>\n  <div id=\"disqus_thread\"></div>\n</div>"
  },
  {
    "path": "api/undomanager.html",
    "content": "\n<div id=\"documentation\" class=\"span9\">\n  <div class=\"classContent\">\n    <div class=\"membersBackground\"></div>\n    <div class=\" members pos0\">\n      <div class=\" membersContent pos0\">\n        <h1 class=\"memberHeader\"><span class=\"name\">UndoManager</span>\n        </h1>\n        <ul data-tabs=\"tabs\" class=\"nav tabs pos0\">\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\"><a href=\"#\" data-toggle=\"dropdown\" class=\"dropdown-toggle\"><span>Constructors (1)</span><b class=\"caret\"></b></a>\n            <ul class=\"dropdown-menu\">\n              <li id=\"dropdown_UndoManager.new\" data-id=\"UndoManager.new\" class=\"memberLink\"><a href=\"#UndoManager.new\" class=\"\" title=\"UndoManager.new (constructor)\" data-id=\"UndoManager.new\">new</a>\n              </li>\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\"><a href=\"#\" data-toggle=\"dropdown\" class=\"dropdown-toggle\"><span>Functions (6)</span><b class=\"caret\"></b></a>\n            <ul class=\"dropdown-menu\">\n              <li id=\"dropdown_UndoManager.execute\" data-id=\"UndoManager.execute\" class=\"memberLink\"><a href=\"#UndoManager.execute\" class=\"\" title=\"UndoManager.execute (class method)\" data-id=\"UndoManager.execute\">execute</a>\n              </li>\n              <li id=\"dropdown_UndoManager.hasRedo\" data-id=\"UndoManager.hasRedo\" class=\"memberLink\"><a href=\"#UndoManager.hasRedo\" class=\"\" title=\"UndoManager.hasRedo (class method)\" data-id=\"UndoManager.hasRedo\">hasRedo</a>\n              </li>\n              <li id=\"dropdown_UndoManager.hasUndo\" data-id=\"UndoManager.hasUndo\" class=\"memberLink\"><a href=\"#UndoManager.hasUndo\" class=\"\" title=\"UndoManager.hasUndo (class method)\" data-id=\"UndoManager.hasUndo\">hasUndo</a>\n              </li>\n              <li id=\"dropdown_UndoManager.redo\" data-id=\"UndoManager.redo\" class=\"memberLink\"><a href=\"#UndoManager.redo\" class=\"\" title=\"UndoManager.redo (class method)\" data-id=\"UndoManager.redo\">redo</a>\n              </li>\n              <li id=\"dropdown_UndoManager.reset\" data-id=\"UndoManager.reset\" class=\"memberLink\"><a href=\"#UndoManager.reset\" class=\"\" title=\"UndoManager.reset (class method)\" data-id=\"UndoManager.reset\">reset</a>\n              </li>\n              <li id=\"dropdown_UndoManager.undo\" data-id=\"UndoManager.undo\" class=\"memberLink\"><a href=\"#UndoManager.undo\" class=\"\" title=\"UndoManager.undo (class method)\" data-id=\"UndoManager.undo\">undo</a>\n              </li>\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n        </ul>\n      </div>\n    </div>\n    <article id=\"UndoManager\" data-title=\"UndoManager (class)\" class=\"article\">\n      <div class=\"section description\">\n        <div class=\"memberContent\"><p>This object maintains the undo stack for an <a href=\"edit_session.html\" class=\"link-short\" title=\"EditSession (class)\" data-id=\"EditSession\"><code>EditSession</code></a>.</p>\n\n        </div>\n      </div>\n    </article>\n    <h3 class=\"sectionHeader\">Constructors</h3>\n    <article id=\"UndoManager.new\" data-title=\"UndoManager.new (constructor)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"UndoManager.new\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span class=\"constructorIdentifier\">new </span><span id=\"UndoManager.new\" class=\"member-name methodClicker\">UndoManager</span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_UndoManager.new\" class=\"ellipsis_description\"><p>Resets the current undo state and creates a new <code>UndoManager</code>.</p>\n\n            </div>\n            <div class=\"description\"><p>Resets the current undo state and creates a new <code>UndoManager</code>.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <h3 class=\"sectionHeader\">Methods</h3>\n    <article id=\"UndoManager.execute\" data-title=\"UndoManager.execute (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"UndoManager.execute\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"UndoManager.execute\" class=\"member-name methodClicker\"><span class=\"sigClassName\">UndoManager.</span><span class=\"sigMemberName\">execute</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> options</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_UndoManager.execute\" class=\"ellipsis_description\"><p>Provides a means for implementing your own undo manager. <code>options</code> has one property, <code>args</code>, an <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array\" class=\"link-short\" title=\"<code>Array</code>\" data-id=\"<code>Array</code>\"><code>Array</code></a>, with two elements:</p>\n\n            </div>\n            <div class=\"description\"><p>Provides a means for implementing your own undo manager. <code>options</code> has one property, <code>args</code>, an <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array\" class=\"link-short\" title=\"<code>Array</code>\" data-id=\"<code>Array</code>\"><code>Array</code></a>, with two elements:</p>\n<ul>\n<li><code>args[0]</code> is an array of deltas</li>\n<li><code>args[1]</code> is the document to associate with</li>\n</ul>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">options</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. Contains additional properties</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"UndoManager.hasRedo\" data-title=\"UndoManager.hasRedo (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"UndoManager.hasRedo\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"UndoManager.hasRedo\" class=\"member-name methodClicker\"><span class=\"sigClassName\">UndoManager.</span><span class=\"sigMemberName\">hasRedo</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"returnType \" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_UndoManager.hasRedo\" class=\"ellipsis_description\"><p>Returns <code>true</code> if there are redo operations left to perform.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns <code>true</code> if there are redo operations left to perform.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"UndoManager.hasUndo\" data-title=\"UndoManager.hasUndo (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"UndoManager.hasUndo\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"UndoManager.hasUndo\" class=\"member-name methodClicker\"><span class=\"sigClassName\">UndoManager.</span><span class=\"sigMemberName\">hasUndo</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"returnType \" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_UndoManager.hasUndo\" class=\"ellipsis_description\"><p>Returns <code>true</code> if there are undo operations left to perform.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns <code>true</code> if there are undo operations left to perform.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"UndoManager.redo\" data-title=\"UndoManager.redo (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"UndoManager.redo\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"UndoManager.redo\" class=\"member-name methodClicker\"><span class=\"sigClassName\">UndoManager.</span><span class=\"sigMemberName\">redo</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"argument methodClicker\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a> dontSelect</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_UndoManager.redo\" class=\"ellipsis_description\"><p>Perform a redo operation on the document, reimplementing the last change.</p>\n\n            </div>\n            <div class=\"description\"><p>Perform a redo operation on the document, reimplementing the last change.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">dontSelect</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></td><td class=\"argDescription \"><p>Required. If <code>true</code>, doesn&#39;t select the range of where the change occurred</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"UndoManager.reset\" data-title=\"UndoManager.reset (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"UndoManager.reset\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"UndoManager.reset\" class=\"member-name methodClicker\"><span class=\"sigClassName\">UndoManager.</span><span class=\"sigMemberName\">reset</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_UndoManager.reset\" class=\"ellipsis_description\"><p>Destroys the stack of undo and redo redo operations.</p>\n\n            </div>\n            <div class=\"description\"><p>Destroys the stack of undo and redo redo operations.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"UndoManager.undo\" data-title=\"UndoManager.undo (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"UndoManager.undo\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"UndoManager.undo\" class=\"member-name methodClicker\"><span class=\"sigClassName\">UndoManager.</span><span class=\"sigMemberName\">undo</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"argument methodClicker\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a> dontSelect</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"range.html\" class=\"returnType \" title=\"Range (class)\" data-id=\"Range\">Range</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_UndoManager.undo\" class=\"ellipsis_description\"><p>Perform an undo operation on the document, reverting the last change.</p>\n\n            </div>\n            <div class=\"description\"><p>Perform an undo operation on the document, reverting the last change.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">dontSelect</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></td><td class=\"argDescription \"><p>Required. If <code>true</code>, doesn&#39;t select the range of where the change occurred</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n  </div>\n  <script defer src=\"./resources/javascripts/ux.js\"></script>\n  <script src=\"./resources/javascripts/clicker.js\"></script>\n  <script src=\"./resources/javascripts/jquery-scrollspy.js\"></script>\n  <script defer src=\"./resources/javascripts/disqus-ext.js\"></script>\n  <script defer src=\"./resources/javascripts/ga.js\"></script>\n  <div id=\"disqus_thread\"></div>\n</div>\n"
  },
  {
    "path": "api/virtual_renderer.html",
    "content": "\n<div id=\"documentation\" class=\"span9\">\n  <div class=\"classContent\">\n    <div class=\"membersBackground\"></div>\n    <div class=\" members pos0\">\n      <div class=\" membersContent pos0\">\n        <h1 class=\"memberHeader\"><span class=\"name\">VirtualRenderer</span>\n        </h1>\n        <ul data-tabs=\"tabs\" class=\"nav tabs pos0\">\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\"><a href=\"#\" data-toggle=\"dropdown\" class=\"dropdown-toggle\"><span>Constructors (1)</span><b class=\"caret\"></b></a>\n            <ul class=\"dropdown-menu\">\n              <li id=\"dropdown_VirtualRenderer.new\" data-id=\"VirtualRenderer.new\" class=\"memberLink\"><a href=\"#VirtualRenderer.new\" class=\"\" title=\"VirtualRenderer.new (constructor)\" data-id=\"VirtualRenderer.new\">new</a>\n              </li>\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\"><a href=\"#\" data-toggle=\"dropdown\" class=\"dropdown-toggle\"><span>Functions (73)</span><b class=\"caret\"></b></a>\n            <ul class=\"dropdown-menu\">\n              <li id=\"dropdown_VirtualRenderer._loadTheme\" data-id=\"VirtualRenderer._loadTheme\" class=\"memberLink\"><a href=\"#VirtualRenderer._loadTheme\" class=\"\" title=\"VirtualRenderer._loadTheme (class method)\" data-id=\"VirtualRenderer._loadTheme\">_loadTheme</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.addGutterDecoration\" data-id=\"VirtualRenderer.addGutterDecoration\" class=\"memberLink\"><a href=\"#VirtualRenderer.addGutterDecoration\" class=\"\" title=\"VirtualRenderer.addGutterDecoration (class method)\" data-id=\"VirtualRenderer.addGutterDecoration\">addGutterDecoration</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.adjustWrapLimit\" data-id=\"VirtualRenderer.adjustWrapLimit\" class=\"memberLink\"><a href=\"#VirtualRenderer.adjustWrapLimit\" class=\"\" title=\"VirtualRenderer.adjustWrapLimit (class method)\" data-id=\"VirtualRenderer.adjustWrapLimit\">adjustWrapLimit</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.alignCursor\" data-id=\"VirtualRenderer.alignCursor\" class=\"memberLink\"><a href=\"#VirtualRenderer.alignCursor\" class=\"\" title=\"VirtualRenderer.alignCursor (class method)\" data-id=\"VirtualRenderer.alignCursor\">alignCursor</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.animateScrolling\" data-id=\"VirtualRenderer.animateScrolling\" class=\"memberLink\"><a href=\"#VirtualRenderer.animateScrolling\" class=\"\" title=\"VirtualRenderer.animateScrolling (class method)\" data-id=\"VirtualRenderer.animateScrolling\">animateScrolling</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.destroy\" data-id=\"VirtualRenderer.destroy\" class=\"memberLink\"><a href=\"#VirtualRenderer.destroy\" class=\"\" title=\"VirtualRenderer.destroy (class method)\" data-id=\"VirtualRenderer.destroy\">destroy</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.getAnimatedScroll\" data-id=\"VirtualRenderer.getAnimatedScroll\" class=\"memberLink\"><a href=\"#VirtualRenderer.getAnimatedScroll\" class=\"\" title=\"VirtualRenderer.getAnimatedScroll (class method)\" data-id=\"VirtualRenderer.getAnimatedScroll\">getAnimatedScroll</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.getContainerElement\" data-id=\"VirtualRenderer.getContainerElement\" class=\"memberLink\"><a href=\"#VirtualRenderer.getContainerElement\" class=\"\" title=\"VirtualRenderer.getContainerElement (class method)\" data-id=\"VirtualRenderer.getContainerElement\">getContainerElement</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.getDisplayIndentGuides\" data-id=\"VirtualRenderer.getDisplayIndentGuides\" class=\"memberLink\"><a href=\"#VirtualRenderer.getDisplayIndentGuides\" class=\"\" title=\"VirtualRenderer.getDisplayIndentGuides (class method)\" data-id=\"VirtualRenderer.getDisplayIndentGuides\">getDisplayIndentGuides</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.getFadeFoldWidgets\" data-id=\"VirtualRenderer.getFadeFoldWidgets\" class=\"memberLink\"><a href=\"#VirtualRenderer.getFadeFoldWidgets\" class=\"\" title=\"VirtualRenderer.getFadeFoldWidgets (class method)\" data-id=\"VirtualRenderer.getFadeFoldWidgets\">getFadeFoldWidgets</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.getFirstFullyVisibleRow\" data-id=\"VirtualRenderer.getFirstFullyVisibleRow\" class=\"memberLink\"><a href=\"#VirtualRenderer.getFirstFullyVisibleRow\" class=\"\" title=\"VirtualRenderer.getFirstFullyVisibleRow (class method)\" data-id=\"VirtualRenderer.getFirstFullyVisibleRow\">getFirstFullyVisibleRow</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.getFirstVisibleRow\" data-id=\"VirtualRenderer.getFirstVisibleRow\" class=\"memberLink\"><a href=\"#VirtualRenderer.getFirstVisibleRow\" class=\"\" title=\"VirtualRenderer.getFirstVisibleRow (class method)\" data-id=\"VirtualRenderer.getFirstVisibleRow\">getFirstVisibleRow</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.getHighlightGutterLine\" data-id=\"VirtualRenderer.getHighlightGutterLine\" class=\"memberLink\"><a href=\"#VirtualRenderer.getHighlightGutterLine\" class=\"\" title=\"VirtualRenderer.getHighlightGutterLine (class method)\" data-id=\"VirtualRenderer.getHighlightGutterLine\">getHighlightGutterLine</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.getHScrollBarAlwaysVisible\" data-id=\"VirtualRenderer.getHScrollBarAlwaysVisible\" class=\"memberLink\"><a href=\"#VirtualRenderer.getHScrollBarAlwaysVisible\" class=\"\" title=\"VirtualRenderer.getHScrollBarAlwaysVisible (class method)\" data-id=\"VirtualRenderer.getHScrollBarAlwaysVisible\">getHScrollBarAlwaysVisible</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.getLastFullyVisibleRow\" data-id=\"VirtualRenderer.getLastFullyVisibleRow\" class=\"memberLink\"><a href=\"#VirtualRenderer.getLastFullyVisibleRow\" class=\"\" title=\"VirtualRenderer.getLastFullyVisibleRow (class method)\" data-id=\"VirtualRenderer.getLastFullyVisibleRow\">getLastFullyVisibleRow</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.getLastVisibleRow\" data-id=\"VirtualRenderer.getLastVisibleRow\" class=\"memberLink\"><a href=\"#VirtualRenderer.getLastVisibleRow\" class=\"\" title=\"VirtualRenderer.getLastVisibleRow (class method)\" data-id=\"VirtualRenderer.getLastVisibleRow\">getLastVisibleRow</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.getMouseEventTarget\" data-id=\"VirtualRenderer.getMouseEventTarget\" class=\"memberLink\"><a href=\"#VirtualRenderer.getMouseEventTarget\" class=\"\" title=\"VirtualRenderer.getMouseEventTarget (class method)\" data-id=\"VirtualRenderer.getMouseEventTarget\">getMouseEventTarget</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.getPrintMarginColumn\" data-id=\"VirtualRenderer.getPrintMarginColumn\" class=\"memberLink\"><a href=\"#VirtualRenderer.getPrintMarginColumn\" class=\"\" title=\"VirtualRenderer.getPrintMarginColumn (class method)\" data-id=\"VirtualRenderer.getPrintMarginColumn\">getPrintMarginColumn</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.getScrollBottomRow\" data-id=\"VirtualRenderer.getScrollBottomRow\" class=\"memberLink\"><a href=\"#VirtualRenderer.getScrollBottomRow\" class=\"\" title=\"VirtualRenderer.getScrollBottomRow (class method)\" data-id=\"VirtualRenderer.getScrollBottomRow\">getScrollBottomRow</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.getScrollLeft\" data-id=\"VirtualRenderer.getScrollLeft\" class=\"memberLink\"><a href=\"#VirtualRenderer.getScrollLeft\" class=\"\" title=\"VirtualRenderer.getScrollLeft (class method)\" data-id=\"VirtualRenderer.getScrollLeft\">getScrollLeft</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.getScrollTop\" data-id=\"VirtualRenderer.getScrollTop\" class=\"memberLink\"><a href=\"#VirtualRenderer.getScrollTop\" class=\"\" title=\"VirtualRenderer.getScrollTop (class method)\" data-id=\"VirtualRenderer.getScrollTop\">getScrollTop</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.getScrollTopRow\" data-id=\"VirtualRenderer.getScrollTopRow\" class=\"memberLink\"><a href=\"#VirtualRenderer.getScrollTopRow\" class=\"\" title=\"VirtualRenderer.getScrollTopRow (class method)\" data-id=\"VirtualRenderer.getScrollTopRow\">getScrollTopRow</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.getShowGutter\" data-id=\"VirtualRenderer.getShowGutter\" class=\"memberLink\"><a href=\"#VirtualRenderer.getShowGutter\" class=\"\" title=\"VirtualRenderer.getShowGutter (class method)\" data-id=\"VirtualRenderer.getShowGutter\">getShowGutter</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.getShowInvisibles\" data-id=\"VirtualRenderer.getShowInvisibles\" class=\"memberLink\"><a href=\"#VirtualRenderer.getShowInvisibles\" class=\"\" title=\"VirtualRenderer.getShowInvisibles (class method)\" data-id=\"VirtualRenderer.getShowInvisibles\">getShowInvisibles</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.getShowPrintMargin\" data-id=\"VirtualRenderer.getShowPrintMargin\" class=\"memberLink\"><a href=\"#VirtualRenderer.getShowPrintMargin\" class=\"\" title=\"VirtualRenderer.getShowPrintMargin (class method)\" data-id=\"VirtualRenderer.getShowPrintMargin\">getShowPrintMargin</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.getTextAreaContainer\" data-id=\"VirtualRenderer.getTextAreaContainer\" class=\"memberLink\"><a href=\"#VirtualRenderer.getTextAreaContainer\" class=\"\" title=\"VirtualRenderer.getTextAreaContainer (class method)\" data-id=\"VirtualRenderer.getTextAreaContainer\">getTextAreaContainer</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.getTheme\" data-id=\"VirtualRenderer.getTheme\" class=\"memberLink\"><a href=\"#VirtualRenderer.getTheme\" class=\"\" title=\"VirtualRenderer.getTheme (class method)\" data-id=\"VirtualRenderer.getTheme\">getTheme</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.hideComposition\" data-id=\"VirtualRenderer.hideComposition\" class=\"memberLink\"><a href=\"#VirtualRenderer.hideComposition\" class=\"\" title=\"VirtualRenderer.hideComposition (class method)\" data-id=\"VirtualRenderer.hideComposition\">hideComposition</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.hideCursor\" data-id=\"VirtualRenderer.hideCursor\" class=\"memberLink\"><a href=\"#VirtualRenderer.hideCursor\" class=\"\" title=\"VirtualRenderer.hideCursor (class method)\" data-id=\"VirtualRenderer.hideCursor\">hideCursor</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.isScrollableBy\" data-id=\"VirtualRenderer.isScrollableBy\" class=\"memberLink\"><a href=\"#VirtualRenderer.isScrollableBy\" class=\"\" title=\"VirtualRenderer.isScrollableBy (class method)\" data-id=\"VirtualRenderer.isScrollableBy\">isScrollableBy</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.onChangeTabSize\" data-id=\"VirtualRenderer.onChangeTabSize\" class=\"memberLink\"><a href=\"#VirtualRenderer.onChangeTabSize\" class=\"\" title=\"VirtualRenderer.onChangeTabSize (class method)\" data-id=\"VirtualRenderer.onChangeTabSize\">onChangeTabSize</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.onGutterResize\" data-id=\"VirtualRenderer.onGutterResize\" class=\"memberLink\"><a href=\"#VirtualRenderer.onGutterResize\" class=\"\" title=\"VirtualRenderer.onGutterResize (class method)\" data-id=\"VirtualRenderer.onGutterResize\">onGutterResize</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.onResize\" data-id=\"VirtualRenderer.onResize\" class=\"memberLink\"><a href=\"#VirtualRenderer.onResize\" class=\"\" title=\"VirtualRenderer.onResize (class method)\" data-id=\"VirtualRenderer.onResize\">onResize</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.pixelToScreenCoordinates\" data-id=\"VirtualRenderer.pixelToScreenCoordinates\" class=\"memberLink\"><a href=\"#VirtualRenderer.pixelToScreenCoordinates\" class=\"\" title=\"VirtualRenderer.pixelToScreenCoordinates (class method)\" data-id=\"VirtualRenderer.pixelToScreenCoordinates\">pixelToScreenCoordinates</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.removeGutterDecoration\" data-id=\"VirtualRenderer.removeGutterDecoration\" class=\"memberLink\"><a href=\"#VirtualRenderer.removeGutterDecoration\" class=\"\" title=\"VirtualRenderer.removeGutterDecoration (class method)\" data-id=\"VirtualRenderer.removeGutterDecoration\">removeGutterDecoration</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.screenToTextCoordinates\" data-id=\"VirtualRenderer.screenToTextCoordinates\" class=\"memberLink\"><a href=\"#VirtualRenderer.screenToTextCoordinates\" class=\"\" title=\"VirtualRenderer.screenToTextCoordinates (class method)\" data-id=\"VirtualRenderer.screenToTextCoordinates\">screenToTextCoordinates</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.scrollBy\" data-id=\"VirtualRenderer.scrollBy\" class=\"memberLink\"><a href=\"#VirtualRenderer.scrollBy\" class=\"\" title=\"VirtualRenderer.scrollBy (class method)\" data-id=\"VirtualRenderer.scrollBy\">scrollBy</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.scrollCursorIntoView\" data-id=\"VirtualRenderer.scrollCursorIntoView\" class=\"memberLink\"><a href=\"#VirtualRenderer.scrollCursorIntoView\" class=\"\" title=\"VirtualRenderer.scrollCursorIntoView (class method)\" data-id=\"VirtualRenderer.scrollCursorIntoView\">scrollCursorIntoView</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.scrollSelectionIntoView\" data-id=\"VirtualRenderer.scrollSelectionIntoView\" class=\"memberLink\"><a href=\"#VirtualRenderer.scrollSelectionIntoView\" class=\"\" title=\"VirtualRenderer.scrollSelectionIntoView (class method)\" data-id=\"VirtualRenderer.scrollSelectionIntoView\">scrollSelectionIntoView</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.scrollToLine\" data-id=\"VirtualRenderer.scrollToLine\" class=\"memberLink\"><a href=\"#VirtualRenderer.scrollToLine\" class=\"\" title=\"VirtualRenderer.scrollToLine (class method)\" data-id=\"VirtualRenderer.scrollToLine\">scrollToLine</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.scrollToRow\" data-id=\"VirtualRenderer.scrollToRow\" class=\"memberLink\"><a href=\"#VirtualRenderer.scrollToRow\" class=\"\" title=\"VirtualRenderer.scrollToRow (class method)\" data-id=\"VirtualRenderer.scrollToRow\">scrollToRow</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.scrollToX\" data-id=\"VirtualRenderer.scrollToX\" class=\"memberLink\"><a href=\"#VirtualRenderer.scrollToX\" class=\"\" title=\"VirtualRenderer.scrollToX (class method)\" data-id=\"VirtualRenderer.scrollToX\">scrollToX</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.scrollToY\" data-id=\"VirtualRenderer.scrollToY\" class=\"memberLink\"><a href=\"#VirtualRenderer.scrollToY\" class=\"\" title=\"VirtualRenderer.scrollToY (class method)\" data-id=\"VirtualRenderer.scrollToY\">scrollToY</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.setAnimatedScroll\" data-id=\"VirtualRenderer.setAnimatedScroll\" class=\"memberLink\"><a href=\"#VirtualRenderer.setAnimatedScroll\" class=\"\" title=\"VirtualRenderer.setAnimatedScroll (class method)\" data-id=\"VirtualRenderer.setAnimatedScroll\">setAnimatedScroll</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.setAnnotations\" data-id=\"VirtualRenderer.setAnnotations\" class=\"memberLink\"><a href=\"#VirtualRenderer.setAnnotations\" class=\"\" title=\"VirtualRenderer.setAnnotations (class method)\" data-id=\"VirtualRenderer.setAnnotations\">setAnnotations</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.setCompositionText\" data-id=\"VirtualRenderer.setCompositionText\" class=\"memberLink\"><a href=\"#VirtualRenderer.setCompositionText\" class=\"\" title=\"VirtualRenderer.setCompositionText (class method)\" data-id=\"VirtualRenderer.setCompositionText\">setCompositionText</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.setDisplayIndentGuides\" data-id=\"VirtualRenderer.setDisplayIndentGuides\" class=\"memberLink\"><a href=\"#VirtualRenderer.setDisplayIndentGuides\" class=\"\" title=\"VirtualRenderer.setDisplayIndentGuides (class method)\" data-id=\"VirtualRenderer.setDisplayIndentGuides\">setDisplayIndentGuides</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.setFadeFoldWidgets\" data-id=\"VirtualRenderer.setFadeFoldWidgets\" class=\"memberLink\"><a href=\"#VirtualRenderer.setFadeFoldWidgets\" class=\"\" title=\"VirtualRenderer.setFadeFoldWidgets (class method)\" data-id=\"VirtualRenderer.setFadeFoldWidgets\">setFadeFoldWidgets</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.setHighlightGutterLine\" data-id=\"VirtualRenderer.setHighlightGutterLine\" class=\"memberLink\"><a href=\"#VirtualRenderer.setHighlightGutterLine\" class=\"\" title=\"VirtualRenderer.setHighlightGutterLine (class method)\" data-id=\"VirtualRenderer.setHighlightGutterLine\">setHighlightGutterLine</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.setHScrollBarAlwaysVisible\" data-id=\"VirtualRenderer.setHScrollBarAlwaysVisible\" class=\"memberLink\"><a href=\"#VirtualRenderer.setHScrollBarAlwaysVisible\" class=\"\" title=\"VirtualRenderer.setHScrollBarAlwaysVisible (class method)\" data-id=\"VirtualRenderer.setHScrollBarAlwaysVisible\">setHScrollBarAlwaysVisible</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.setPadding\" data-id=\"VirtualRenderer.setPadding\" class=\"memberLink\"><a href=\"#VirtualRenderer.setPadding\" class=\"\" title=\"VirtualRenderer.setPadding (class method)\" data-id=\"VirtualRenderer.setPadding\">setPadding</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.setPrintMarginColumn\" data-id=\"VirtualRenderer.setPrintMarginColumn\" class=\"memberLink\"><a href=\"#VirtualRenderer.setPrintMarginColumn\" class=\"\" title=\"VirtualRenderer.setPrintMarginColumn (class method)\" data-id=\"VirtualRenderer.setPrintMarginColumn\">setPrintMarginColumn</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.setSession\" data-id=\"VirtualRenderer.setSession\" class=\"memberLink\"><a href=\"#VirtualRenderer.setSession\" class=\"\" title=\"VirtualRenderer.setSession (class method)\" data-id=\"VirtualRenderer.setSession\">setSession</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.setShowGutter\" data-id=\"VirtualRenderer.setShowGutter\" class=\"memberLink\"><a href=\"#VirtualRenderer.setShowGutter\" class=\"\" title=\"VirtualRenderer.setShowGutter (class method)\" data-id=\"VirtualRenderer.setShowGutter\">setShowGutter</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.setShowInvisibles\" data-id=\"VirtualRenderer.setShowInvisibles\" class=\"memberLink\"><a href=\"#VirtualRenderer.setShowInvisibles\" class=\"\" title=\"VirtualRenderer.setShowInvisibles (class method)\" data-id=\"VirtualRenderer.setShowInvisibles\">setShowInvisibles</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.setShowPrintMargin\" data-id=\"VirtualRenderer.setShowPrintMargin\" class=\"memberLink\"><a href=\"#VirtualRenderer.setShowPrintMargin\" class=\"\" title=\"VirtualRenderer.setShowPrintMargin (class method)\" data-id=\"VirtualRenderer.setShowPrintMargin\">setShowPrintMargin</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.setStyle\" data-id=\"VirtualRenderer.setStyle\" class=\"memberLink\"><a href=\"#VirtualRenderer.setStyle\" class=\"\" title=\"VirtualRenderer.setStyle (class method)\" data-id=\"VirtualRenderer.setStyle\">setStyle</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.setTheme\" data-id=\"VirtualRenderer.setTheme\" class=\"memberLink\"><a href=\"#VirtualRenderer.setTheme\" class=\"\" title=\"VirtualRenderer.setTheme (class method)\" data-id=\"VirtualRenderer.setTheme\">setTheme</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.showCursor\" data-id=\"VirtualRenderer.showCursor\" class=\"memberLink\"><a href=\"#VirtualRenderer.showCursor\" class=\"\" title=\"VirtualRenderer.showCursor (class method)\" data-id=\"VirtualRenderer.showCursor\">showCursor</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.textToScreenCoordinates\" data-id=\"VirtualRenderer.textToScreenCoordinates\" class=\"memberLink\"><a href=\"#VirtualRenderer.textToScreenCoordinates\" class=\"\" title=\"VirtualRenderer.textToScreenCoordinates (class method)\" data-id=\"VirtualRenderer.textToScreenCoordinates\">textToScreenCoordinates</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.unsetStyle\" data-id=\"VirtualRenderer.unsetStyle\" class=\"memberLink\"><a href=\"#VirtualRenderer.unsetStyle\" class=\"\" title=\"VirtualRenderer.unsetStyle (class method)\" data-id=\"VirtualRenderer.unsetStyle\">unsetStyle</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.updateBackMarkers\" data-id=\"VirtualRenderer.updateBackMarkers\" class=\"memberLink\"><a href=\"#VirtualRenderer.updateBackMarkers\" class=\"\" title=\"VirtualRenderer.updateBackMarkers (class method)\" data-id=\"VirtualRenderer.updateBackMarkers\">updateBackMarkers</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.updateBreakpoints\" data-id=\"VirtualRenderer.updateBreakpoints\" class=\"memberLink\"><a href=\"#VirtualRenderer.updateBreakpoints\" class=\"\" title=\"VirtualRenderer.updateBreakpoints (class method)\" data-id=\"VirtualRenderer.updateBreakpoints\">updateBreakpoints</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.updateCharacterSize\" data-id=\"VirtualRenderer.updateCharacterSize\" class=\"memberLink\"><a href=\"#VirtualRenderer.updateCharacterSize\" class=\"\" title=\"VirtualRenderer.updateCharacterSize (class method)\" data-id=\"VirtualRenderer.updateCharacterSize\">updateCharacterSize</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.updateCursor\" data-id=\"VirtualRenderer.updateCursor\" class=\"memberLink\"><a href=\"#VirtualRenderer.updateCursor\" class=\"\" title=\"VirtualRenderer.updateCursor (class method)\" data-id=\"VirtualRenderer.updateCursor\">updateCursor</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.updateFontSize\" data-id=\"VirtualRenderer.updateFontSize\" class=\"memberLink\"><a href=\"#VirtualRenderer.updateFontSize\" class=\"\" title=\"VirtualRenderer.updateFontSize (class method)\" data-id=\"VirtualRenderer.updateFontSize\">updateFontSize</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.updateFrontMarkers\" data-id=\"VirtualRenderer.updateFrontMarkers\" class=\"memberLink\"><a href=\"#VirtualRenderer.updateFrontMarkers\" class=\"\" title=\"VirtualRenderer.updateFrontMarkers (class method)\" data-id=\"VirtualRenderer.updateFrontMarkers\">updateFrontMarkers</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.updateFull\" data-id=\"VirtualRenderer.updateFull\" class=\"memberLink\"><a href=\"#VirtualRenderer.updateFull\" class=\"\" title=\"VirtualRenderer.updateFull (class method)\" data-id=\"VirtualRenderer.updateFull\">updateFull</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.updateLines\" data-id=\"VirtualRenderer.updateLines\" class=\"memberLink\"><a href=\"#VirtualRenderer.updateLines\" class=\"\" title=\"VirtualRenderer.updateLines (class method)\" data-id=\"VirtualRenderer.updateLines\">updateLines</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.updateText\" data-id=\"VirtualRenderer.updateText\" class=\"memberLink\"><a href=\"#VirtualRenderer.updateText\" class=\"\" title=\"VirtualRenderer.updateText (class method)\" data-id=\"VirtualRenderer.updateText\">updateText</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.visualizeBlur\" data-id=\"VirtualRenderer.visualizeBlur\" class=\"memberLink\"><a href=\"#VirtualRenderer.visualizeBlur\" class=\"\" title=\"VirtualRenderer.visualizeBlur (class method)\" data-id=\"VirtualRenderer.visualizeBlur\">visualizeBlur</a>\n              </li>\n              <li id=\"dropdown_VirtualRenderer.visualizeFocus\" data-id=\"VirtualRenderer.visualizeFocus\" class=\"memberLink\"><a href=\"#VirtualRenderer.visualizeFocus\" class=\"\" title=\"VirtualRenderer.visualizeFocus (class method)\" data-id=\"VirtualRenderer.visualizeFocus\">visualizeFocus</a>\n              </li>\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n          <li data-dropdown=\"dropdown\" class=\"dropdown\">\n            <ul class=\"dropdown-menu\">\n            </ul>\n          </li>\n        </ul>\n      </div>\n    </div>\n    <article id=\"VirtualRenderer\" data-title=\"VirtualRenderer (class)\" class=\"article\">\n      <div class=\"section description\">\n        <div class=\"memberContent\"><p>The class that is responsible for drawing everything you see on the screen!</p>\n\n        </div>\n      </div>\n    </article>\n    <h3 class=\"sectionHeader\">Constructors</h3>\n    <article id=\"VirtualRenderer.new\" data-title=\"VirtualRenderer.new (constructor)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.new\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span class=\"constructorIdentifier\">new </span><span id=\"VirtualRenderer.new\" class=\"member-name methodClicker\">VirtualRenderer</span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en/DOM/element\" class=\"argument methodClicker\" title=\"DOMElement\" data-id=\"DOMElement\">DOMElement</a> container, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"argument methodClicker\" title=\"String\" data-id=\"String\">String</a> theme</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.new\" class=\"ellipsis_description\"><p>Constructs a new <code>VirtualRenderer</code> within the <code>container</code> specified, applying the given <code>theme</code>.</p>\n\n            </div>\n            <div class=\"description\"><p>Constructs a new <code>VirtualRenderer</code> within the <code>container</code> specified, applying the given <code>theme</code>.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">container</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en/DOM/element\" class=\"\" title=\"DOMElement\" data-id=\"DOMElement\">DOMElement</a></td><td class=\"argDescription \"><p>Required. The root element of the editor</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">theme</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"\" title=\"String\" data-id=\"String\">String</a></td><td class=\"argDescription \"><p>Required. The starting theme</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <h3 class=\"sectionHeader\">Methods</h3>\n    <article id=\"VirtualRenderer._loadTheme\" data-title=\"VirtualRenderer._loadTheme (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer._loadTheme\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer._loadTheme\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">_loadTheme</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer._loadTheme\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.addGutterDecoration\" data-title=\"VirtualRenderer.addGutterDecoration (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.addGutterDecoration\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.addGutterDecoration\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">addGutterDecoration</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> row, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> className</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.addGutterDecoration\" class=\"ellipsis_description\"><p>Deprecated; (moved to <a href=\"edit_session.html\" class=\"link-short\" title=\"EditSession (class)\" data-id=\"EditSession\"><code>EditSession</code></a>)</p>\n\n            </div>\n            <div class=\"description\"><p>Deprecated; (moved to <a href=\"edit_session.html\" class=\"link-short\" title=\"EditSession (class)\" data-id=\"EditSession\"><code>EditSession</code></a>)</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">row</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. </p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">className</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. </p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.adjustWrapLimit\" data-title=\"VirtualRenderer.adjustWrapLimit (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.adjustWrapLimit\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.adjustWrapLimit\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">adjustWrapLimit</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.adjustWrapLimit\" class=\"ellipsis_description\"><p>Adjusts the wrap limit, which is the number of characters that can fit within the width of the edit area on screen.</p>\n\n            </div>\n            <div class=\"description\"><p>Adjusts the wrap limit, which is the number of characters that can fit within the width of the edit area on screen.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.alignCursor\" data-title=\"VirtualRenderer.alignCursor (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.alignCursor\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.alignCursor\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">alignCursor</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.alignCursor\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.animateScrolling\" data-title=\"VirtualRenderer.animateScrolling (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.animateScrolling\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.animateScrolling\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">animateScrolling</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.animateScrolling\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.destroy\" data-title=\"VirtualRenderer.destroy (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.destroy\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.destroy\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">destroy</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.destroy\" class=\"ellipsis_description\"><p>Destroys the text and cursor layers for this renderer.</p>\n\n            </div>\n            <div class=\"description\"><p>Destroys the text and cursor layers for this renderer.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.getAnimatedScroll\" data-title=\"VirtualRenderer.getAnimatedScroll (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.getAnimatedScroll\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.getAnimatedScroll\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">getAnimatedScroll</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"returnType \" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.getAnimatedScroll\" class=\"ellipsis_description\"><p>Returns whether an animated scroll happens or not.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns whether an animated scroll happens or not.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.getContainerElement\" data-title=\"VirtualRenderer.getContainerElement (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.getContainerElement\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.getContainerElement\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">getContainerElement</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en/DOM/element\" class=\"returnType \" title=\"DOMElement\" data-id=\"DOMElement\">DOMElement</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.getContainerElement\" class=\"ellipsis_description\"><p>Returns the root element containing this renderer.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the root element containing this renderer.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.getDisplayIndentGuides\" data-title=\"VirtualRenderer.getDisplayIndentGuides (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.getDisplayIndentGuides\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.getDisplayIndentGuides\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">getDisplayIndentGuides</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.getDisplayIndentGuides\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.getFadeFoldWidgets\" data-title=\"VirtualRenderer.getFadeFoldWidgets (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.getFadeFoldWidgets\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.getFadeFoldWidgets\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">getFadeFoldWidgets</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.getFadeFoldWidgets\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.getFirstFullyVisibleRow\" data-title=\"VirtualRenderer.getFirstFullyVisibleRow (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.getFirstFullyVisibleRow\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.getFirstFullyVisibleRow\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">getFirstFullyVisibleRow</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"returnType \" title=\"Number\" data-id=\"Number\">Number</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.getFirstFullyVisibleRow\" class=\"ellipsis_description\"><p>Returns the index of the first fully visible row. &quot;Fully&quot; here means that the characters in the row are not truncated; that the top and the bottom of the row are on the screen.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the index of the first fully visible row. &quot;Fully&quot; here means that the characters in the row are not truncated; that the top and the bottom of the row are on the screen.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.getFirstVisibleRow\" data-title=\"VirtualRenderer.getFirstVisibleRow (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.getFirstVisibleRow\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.getFirstVisibleRow\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">getFirstVisibleRow</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"returnType \" title=\"Number\" data-id=\"Number\">Number</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.getFirstVisibleRow\" class=\"ellipsis_description\"><p>Returns the index of the first visible row.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the index of the first visible row.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.getHighlightGutterLine\" data-title=\"VirtualRenderer.getHighlightGutterLine (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.getHighlightGutterLine\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.getHighlightGutterLine\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">getHighlightGutterLine</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.getHighlightGutterLine\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.getHScrollBarAlwaysVisible\" data-title=\"VirtualRenderer.getHScrollBarAlwaysVisible (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.getHScrollBarAlwaysVisible\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.getHScrollBarAlwaysVisible\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">getHScrollBarAlwaysVisible</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"returnType \" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.getHScrollBarAlwaysVisible\" class=\"ellipsis_description\"><p>Returns whether the horizontal scrollbar is set to be always visible.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns whether the horizontal scrollbar is set to be always visible.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.getLastFullyVisibleRow\" data-title=\"VirtualRenderer.getLastFullyVisibleRow (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.getLastFullyVisibleRow\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.getLastFullyVisibleRow\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">getLastFullyVisibleRow</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"returnType \" title=\"Number\" data-id=\"Number\">Number</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.getLastFullyVisibleRow\" class=\"ellipsis_description\"><p>Returns the index of the last fully visible row. &quot;Fully&quot; here means that the characters in the row are not truncated; that the top and the bottom of the row are on the screen.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the index of the last fully visible row. &quot;Fully&quot; here means that the characters in the row are not truncated; that the top and the bottom of the row are on the screen.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.getLastVisibleRow\" data-title=\"VirtualRenderer.getLastVisibleRow (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.getLastVisibleRow\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.getLastVisibleRow\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">getLastVisibleRow</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"returnType \" title=\"Number\" data-id=\"Number\">Number</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.getLastVisibleRow\" class=\"ellipsis_description\"><p>Returns the index of the last visible row.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the index of the last visible row.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.getMouseEventTarget\" data-title=\"VirtualRenderer.getMouseEventTarget (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.getMouseEventTarget\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.getMouseEventTarget\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">getMouseEventTarget</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en/DOM/element\" class=\"returnType \" title=\"DOMElement\" data-id=\"DOMElement\">DOMElement</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.getMouseEventTarget\" class=\"ellipsis_description\"><p>Returns the element that the mouse events are attached to</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the element that the mouse events are attached to</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.getPrintMarginColumn\" data-title=\"VirtualRenderer.getPrintMarginColumn (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.getPrintMarginColumn\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.getPrintMarginColumn\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">getPrintMarginColumn</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"returnType \" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.getPrintMarginColumn\" class=\"ellipsis_description\"><p>Returns whether the print margin column is being shown or not.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns whether the print margin column is being shown or not.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.getScrollBottomRow\" data-title=\"VirtualRenderer.getScrollBottomRow (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.getScrollBottomRow\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.getScrollBottomRow\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">getScrollBottomRow</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"returnType \" title=\"Number\" data-id=\"Number\">Number</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.getScrollBottomRow\" class=\"ellipsis_description\"><p>Returns the last visible row, regardless of whether it&#39;s fully visible or not.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the last visible row, regardless of whether it&#39;s fully visible or not.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.getScrollLeft\" data-title=\"VirtualRenderer.getScrollLeft (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.getScrollLeft\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.getScrollLeft\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">getScrollLeft</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"returnType \" title=\"Number\" data-id=\"Number\">Number</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.getScrollLeft\" class=\"ellipsis_description\"><p>Returns the value of the distance between the left of the editor and the leftmost part of the visible content.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the value of the distance between the left of the editor and the leftmost part of the visible content.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.getScrollTop\" data-title=\"VirtualRenderer.getScrollTop (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.getScrollTop\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.getScrollTop\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">getScrollTop</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"returnType \" title=\"Number\" data-id=\"Number\">Number</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.getScrollTop\" class=\"ellipsis_description\"><p>Returns the value of the distance between the top of the editor and the topmost part of the visible content.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the value of the distance between the top of the editor and the topmost part of the visible content.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.getScrollTopRow\" data-title=\"VirtualRenderer.getScrollTopRow (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.getScrollTopRow\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.getScrollTopRow\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">getScrollTopRow</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"returnType \" title=\"Number\" data-id=\"Number\">Number</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.getScrollTopRow\" class=\"ellipsis_description\"><p>Returns the first visible row, regardless of whether it&#39;s fully visible or not.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the first visible row, regardless of whether it&#39;s fully visible or not.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.getShowGutter\" data-title=\"VirtualRenderer.getShowGutter (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.getShowGutter\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.getShowGutter\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">getShowGutter</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"returnType \" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.getShowGutter\" class=\"ellipsis_description\"><p>Returns <code>true</code> if the gutter is being shown.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns <code>true</code> if the gutter is being shown.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.getShowInvisibles\" data-title=\"VirtualRenderer.getShowInvisibles (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.getShowInvisibles\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.getShowInvisibles\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">getShowInvisibles</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"returnType \" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.getShowInvisibles\" class=\"ellipsis_description\"><p>Returns whether invisible characters are being shown or not.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns whether invisible characters are being shown or not.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.getShowPrintMargin\" data-title=\"VirtualRenderer.getShowPrintMargin (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.getShowPrintMargin\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.getShowPrintMargin\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">getShowPrintMargin</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"returnType \" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.getShowPrintMargin\" class=\"ellipsis_description\"><p>Returns whether the print margin is being shown or not.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns whether the print margin is being shown or not.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.getTextAreaContainer\" data-title=\"VirtualRenderer.getTextAreaContainer (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.getTextAreaContainer\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.getTextAreaContainer\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">getTextAreaContainer</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en/DOM/element\" class=\"returnType \" title=\"DOMElement\" data-id=\"DOMElement\">DOMElement</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.getTextAreaContainer\" class=\"ellipsis_description\"><p>Returns the element to which the hidden text area is added.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the element to which the hidden text area is added.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.getTheme\" data-title=\"VirtualRenderer.getTheme (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.getTheme\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.getTheme\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">getTheme</span></span><span class=\"emptyArgumentList\">()</span>\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"returnType \" title=\"String\" data-id=\"String\">String</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.getTheme\" class=\"ellipsis_description\"><p>Returns the path of the current theme.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns the path of the current theme.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.hideComposition\" data-title=\"VirtualRenderer.hideComposition (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.hideComposition\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.hideComposition\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">hideComposition</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.hideComposition\" class=\"ellipsis_description\"><p>Hides the current composition.</p>\n\n            </div>\n            <div class=\"description\"><p>Hides the current composition.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.hideCursor\" data-title=\"VirtualRenderer.hideCursor (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.hideCursor\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.hideCursor\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">hideCursor</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.hideCursor\" class=\"ellipsis_description\"><p>Hides the cursor icon.</p>\n\n            </div>\n            <div class=\"description\"><p>Hides the cursor icon.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.isScrollableBy\" data-title=\"VirtualRenderer.isScrollableBy (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.isScrollableBy\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.isScrollableBy\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">isScrollableBy</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> deltaX, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> deltaY</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"returnType \" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.isScrollableBy\" class=\"ellipsis_description\"><p>Returns <code>true</code> if you can still scroll by either parameter; in other words, you haven&#39;t reached the end of the file or line.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns <code>true</code> if you can still scroll by either parameter; in other words, you haven&#39;t reached the end of the file or line.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">deltaX</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The x value to scroll by</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">deltaY</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The y value to scroll by</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.onChangeTabSize\" data-title=\"VirtualRenderer.onChangeTabSize (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.onChangeTabSize\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.onChangeTabSize\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">onChangeTabSize</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.onChangeTabSize\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.onGutterResize\" data-title=\"VirtualRenderer.onGutterResize (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.onGutterResize\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.onGutterResize\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">onGutterResize</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.onGutterResize\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.onResize\" data-title=\"VirtualRenderer.onResize (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.onResize\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.onResize\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">onResize</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"argument methodClicker\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a> force, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> gutterWidth, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> width, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> height</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.onResize\" class=\"ellipsis_description\"><p>Triggers a resize of the editor.</p>\n\n            </div>\n            <div class=\"description\"><p>Triggers a resize of the editor.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">force</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></td><td class=\"argDescription \"><p>Required. If <code>true</code>, recomputes the size, even if the height and width haven&#39;t changed</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">gutterWidth</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The width of the gutter in pixels</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">width</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The width of the editor in pixels</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">height</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The height of the editor, in pixels</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.pixelToScreenCoordinates\" data-title=\"VirtualRenderer.pixelToScreenCoordinates (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.pixelToScreenCoordinates\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.pixelToScreenCoordinates\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">pixelToScreenCoordinates</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.pixelToScreenCoordinates\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.removeGutterDecoration\" data-title=\"VirtualRenderer.removeGutterDecoration (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.removeGutterDecoration\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.removeGutterDecoration\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">removeGutterDecoration</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> row, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> className</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.removeGutterDecoration\" class=\"ellipsis_description\"><p>Deprecated; (moved to <a href=\"edit_session.html\" class=\"link-short\" title=\"EditSession (class)\" data-id=\"EditSession\"><code>EditSession</code></a>)</p>\n\n            </div>\n            <div class=\"description\"><p>Deprecated; (moved to <a href=\"edit_session.html\" class=\"link-short\" title=\"EditSession (class)\" data-id=\"EditSession\"><code>EditSession</code></a>)</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">row</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. </p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">className</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. </p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.screenToTextCoordinates\" data-title=\"VirtualRenderer.screenToTextCoordinates (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.screenToTextCoordinates\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.screenToTextCoordinates\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">screenToTextCoordinates</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.screenToTextCoordinates\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.scrollBy\" data-title=\"VirtualRenderer.scrollBy (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.scrollBy\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.scrollBy\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">scrollBy</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> deltaX, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> deltaY</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.scrollBy\" class=\"ellipsis_description\"><p>Scrolls the editor across both x- and y-axes.</p>\n\n            </div>\n            <div class=\"description\"><p>Scrolls the editor across both x- and y-axes.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">deltaX</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The x value to scroll by</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">deltaY</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The y value to scroll by</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.scrollCursorIntoView\" data-title=\"VirtualRenderer.scrollCursorIntoView (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.scrollCursorIntoView\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.scrollCursorIntoView\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">scrollCursorIntoView</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> cursor, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> offset</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.scrollCursorIntoView\" class=\"ellipsis_description\"><p>Scrolls the cursor into the first visible area of the editor</p>\n\n            </div>\n            <div class=\"description\"><p>Scrolls the cursor into the first visible area of the editor</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">cursor</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. </p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">offset</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. </p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.scrollSelectionIntoView\" data-title=\"VirtualRenderer.scrollSelectionIntoView (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.scrollSelectionIntoView\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.scrollSelectionIntoView\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">scrollSelectionIntoView</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.scrollSelectionIntoView\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.scrollToLine\" data-title=\"VirtualRenderer.scrollToLine (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.scrollToLine\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.scrollToLine\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">scrollToLine</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> line, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"argument methodClicker\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a> center, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"argument methodClicker\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a> animate, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function\" class=\"argument methodClicker\" title=\"Function\" data-id=\"Function\">Function</a> callback</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.scrollToLine\" class=\"ellipsis_description\"><p>Gracefully scrolls the editor to the row indicated.</p>\n\n            </div>\n            <div class=\"description\"><p>Gracefully scrolls the editor to the row indicated.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">line</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. A line number</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">center</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></td><td class=\"argDescription \"><p>Required. If <code>true</code>, centers the editor the to indicated line</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">animate</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></td><td class=\"argDescription \"><p>Required. If <code>true</code> animates scrolling</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">callback</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function\" class=\"\" title=\"Function\" data-id=\"Function\">Function</a></td><td class=\"argDescription \"><p>Required. Function to be called after the animation has finished</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.scrollToRow\" data-title=\"VirtualRenderer.scrollToRow (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.scrollToRow\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.scrollToRow\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">scrollToRow</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> row</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.scrollToRow\" class=\"ellipsis_description\"><p>Gracefully scrolls from the top of the editor to the row indicated.</p>\n\n            </div>\n            <div class=\"description\"><p>Gracefully scrolls from the top of the editor to the row indicated.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">row</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. A row id</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.scrollToX\" data-title=\"VirtualRenderer.scrollToX (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.scrollToX\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.scrollToX\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">scrollToX</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> scrollLeft</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"returnType \" title=\"Number\" data-id=\"Number\">Number</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.scrollToX\" class=\"ellipsis_description\"><p>Scrolls the editor across the x-axis to the pixel indicated.</p>\n\n            </div>\n            <div class=\"description\"><p>Scrolls the editor across the x-axis to the pixel indicated.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">scrollLeft</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The position to scroll to</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.scrollToY\" data-title=\"VirtualRenderer.scrollToY (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.scrollToY\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.scrollToY\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">scrollToY</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> scrollTop</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"returnType \" title=\"Number\" data-id=\"Number\">Number</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.scrollToY\" class=\"ellipsis_description\"><p>Scrolls the editor to the y pixel indicated.</p>\n\n            </div>\n            <div class=\"description\"><p>Scrolls the editor to the y pixel indicated.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">scrollTop</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The position to scroll to</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.setAnimatedScroll\" data-title=\"VirtualRenderer.setAnimatedScroll (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.setAnimatedScroll\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.setAnimatedScroll\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">setAnimatedScroll</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"argument methodClicker\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a> shouldAnimate</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.setAnimatedScroll\" class=\"ellipsis_description\"><p>Identifies whether you want to have an animated scroll or not.</p>\n\n            </div>\n            <div class=\"description\"><p>Identifies whether you want to have an animated scroll or not.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">shouldAnimate</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></td><td class=\"argDescription \"><p>Required. Set to <code>true</code> to show animated scrolls</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.setAnnotations\" data-title=\"VirtualRenderer.setAnnotations (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.setAnnotations\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.setAnnotations\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">setAnnotations</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array\" class=\"argument methodClicker\" title=\"Array\" data-id=\"Array\">Array</a> annotations</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.setAnnotations\" class=\"ellipsis_description\"><p>Sets annotations for the gutter.</p>\n\n            </div>\n            <div class=\"description\"><p>Sets annotations for the gutter.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">annotations</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array\" class=\"\" title=\"Array\" data-id=\"Array\">Array</a></td><td class=\"argDescription \"><p>Required. An array containing annotations</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.setCompositionText\" data-title=\"VirtualRenderer.setCompositionText (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.setCompositionText\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.setCompositionText\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">setCompositionText</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"argument methodClicker\" title=\"String\" data-id=\"String\">String</a> text</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.setCompositionText\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">text</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"\" title=\"String\" data-id=\"String\">String</a></td><td class=\"argDescription \"><p>Required. A string of text to use</p>\n<p>Sets the inner text of the current composition to <code>text</code>.</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.setDisplayIndentGuides\" data-title=\"VirtualRenderer.setDisplayIndentGuides (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.setDisplayIndentGuides\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.setDisplayIndentGuides\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">setDisplayIndentGuides</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.setDisplayIndentGuides\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.setFadeFoldWidgets\" data-title=\"VirtualRenderer.setFadeFoldWidgets (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.setFadeFoldWidgets\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.setFadeFoldWidgets\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">setFadeFoldWidgets</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.setFadeFoldWidgets\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.setHighlightGutterLine\" data-title=\"VirtualRenderer.setHighlightGutterLine (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.setHighlightGutterLine\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.setHighlightGutterLine\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">setHighlightGutterLine</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.setHighlightGutterLine\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.setHScrollBarAlwaysVisible\" data-title=\"VirtualRenderer.setHScrollBarAlwaysVisible (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.setHScrollBarAlwaysVisible\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.setHScrollBarAlwaysVisible\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">setHScrollBarAlwaysVisible</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"argument methodClicker\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a> alwaysVisible</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.setHScrollBarAlwaysVisible\" class=\"ellipsis_description\"><p>Identifies whether you want to show the horizontal scrollbar or not.</p>\n\n            </div>\n            <div class=\"description\"><p>Identifies whether you want to show the horizontal scrollbar or not.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">alwaysVisible</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></td><td class=\"argDescription \"><p>Required. Set to <code>true</code> to make the horizontal scroll bar visible</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.setPadding\" data-title=\"VirtualRenderer.setPadding (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.setPadding\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.setPadding\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">setPadding</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> padding</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.setPadding\" class=\"ellipsis_description\"><p>Sets the padding for all the layers.</p>\n\n            </div>\n            <div class=\"description\"><p>Sets the padding for all the layers.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">padding</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. A new padding value (in pixels)</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.setPrintMarginColumn\" data-title=\"VirtualRenderer.setPrintMarginColumn (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.setPrintMarginColumn\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.setPrintMarginColumn\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">setPrintMarginColumn</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"argument methodClicker\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a> showPrintMargin</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.setPrintMarginColumn\" class=\"ellipsis_description\"><p>Identifies whether you want to show the print margin column or not.</p>\n\n            </div>\n            <div class=\"description\"><p>Identifies whether you want to show the print margin column or not.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">showPrintMargin</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></td><td class=\"argDescription \"><p>Required. Set to <code>true</code> to show the print margin column</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.setSession\" data-title=\"VirtualRenderer.setSession (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.setSession\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.setSession\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">setSession</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> session</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.setSession\" class=\"ellipsis_description\"><p>Associates the renderer with an <a href=\"edit_session.html\" class=\"link-short\" title=\"EditSession (class)\" data-id=\"EditSession\"><code>EditSession</code></a>.</p>\n\n            </div>\n            <div class=\"description\"><p>Associates the renderer with an <a href=\"edit_session.html\" class=\"link-short\" title=\"EditSession (class)\" data-id=\"EditSession\"><code>EditSession</code></a>.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">session</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. </p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.setShowGutter\" data-title=\"VirtualRenderer.setShowGutter (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.setShowGutter\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.setShowGutter\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">setShowGutter</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"argument methodClicker\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a> show</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.setShowGutter\" class=\"ellipsis_description\"><p>Identifies whether you want to show the gutter or not.</p>\n\n            </div>\n            <div class=\"description\"><p>Identifies whether you want to show the gutter or not.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">show</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></td><td class=\"argDescription \"><p>Required. Set to <code>true</code> to show the gutter</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.setShowInvisibles\" data-title=\"VirtualRenderer.setShowInvisibles (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.setShowInvisibles\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.setShowInvisibles\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">setShowInvisibles</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"argument methodClicker\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a> showInvisibles</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.setShowInvisibles\" class=\"ellipsis_description\"><p>Identifies whether you want to show invisible characters or not.</p>\n\n            </div>\n            <div class=\"description\"><p>Identifies whether you want to show invisible characters or not.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">showInvisibles</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></td><td class=\"argDescription \"><p>Required. Set to <code>true</code> to show invisibles</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.setShowPrintMargin\" data-title=\"VirtualRenderer.setShowPrintMargin (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.setShowPrintMargin\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.setShowPrintMargin\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">setShowPrintMargin</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"argument methodClicker\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a> showPrintMargin</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.setShowPrintMargin\" class=\"ellipsis_description\"><p>Identifies whether you want to show the print margin or not.</p>\n\n            </div>\n            <div class=\"description\"><p>Identifies whether you want to show the print margin or not.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">showPrintMargin</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></td><td class=\"argDescription \"><p>Required. Set to <code>true</code> to show the print margin</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.setStyle\" data-title=\"VirtualRenderer.setStyle (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.setStyle\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.setStyle\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">setStyle</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.setStyle\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.setTheme\" data-title=\"VirtualRenderer.setTheme (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.setTheme\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.setTheme\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">setTheme</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"argument methodClicker\" title=\"String\" data-id=\"String\">String</a> theme</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.setTheme\" class=\"ellipsis_description\"><p>Sets a new theme for the editor. <code>theme</code> should exist, and be a directory path, like <code>ace/theme/textmate</code>.</p>\n\n            </div>\n            <div class=\"description\"><p>Sets a new theme for the editor. <code>theme</code> should exist, and be a directory path, like <code>ace/theme/textmate</code>.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">theme</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"\" title=\"String\" data-id=\"String\">String</a></td><td class=\"argDescription \"><p>Required. The path to a theme</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.showCursor\" data-title=\"VirtualRenderer.showCursor (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.showCursor\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.showCursor\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">showCursor</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.showCursor\" class=\"ellipsis_description\"><p>Shows the cursor icon.</p>\n\n            </div>\n            <div class=\"description\"><p>Shows the cursor icon.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.textToScreenCoordinates\" data-title=\"VirtualRenderer.textToScreenCoordinates (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.textToScreenCoordinates\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.textToScreenCoordinates\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">textToScreenCoordinates</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> row, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> column</span>)\n                    <li class=\"signature-returns\">\n                      <ul class=\"argument-types\">\n                        <li class=\"argument-type\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"returnType \" title=\"Object\" data-id=\"Object\">Object</a></li>\n                      </ul>\n                    </li></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.textToScreenCoordinates\" class=\"ellipsis_description\"><p>Returns an object containing the <code>pageX</code> and <code>pageY</code> coordinates of the document position.</p>\n\n            </div>\n            <div class=\"description\"><p>Returns an object containing the <code>pageX</code> and <code>pageY</code> coordinates of the document position.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">row</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The document row position</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">column</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The document column position</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.unsetStyle\" data-title=\"VirtualRenderer.unsetStyle (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.unsetStyle\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.unsetStyle\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">unsetStyle</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"argument methodClicker\" title=\"String\" data-id=\"String\">String</a> style</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.unsetStyle\" class=\"ellipsis_description\"><p>Removes the class <code>style</code> from the editor.</p>\n\n            </div>\n            <div class=\"description\"><p>Removes the class <code>style</code> from the editor.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">style</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\" class=\"\" title=\"String\" data-id=\"String\">String</a></td><td class=\"argDescription \"><p>Required. A class name</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.updateBackMarkers\" data-title=\"VirtualRenderer.updateBackMarkers (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.updateBackMarkers\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.updateBackMarkers\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">updateBackMarkers</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.updateBackMarkers\" class=\"ellipsis_description\"><p>Schedules an update to all the back markers in the document.</p>\n\n            </div>\n            <div class=\"description\"><p>Schedules an update to all the back markers in the document.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.updateBreakpoints\" data-title=\"VirtualRenderer.updateBreakpoints (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.updateBreakpoints\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.updateBreakpoints\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">updateBreakpoints</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"argument methodClicker\" title=\"Object\" data-id=\"Object\">Object</a> rows</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.updateBreakpoints\" class=\"ellipsis_description\"><p>Redraw breakpoints.</p>\n\n            </div>\n            <div class=\"description\"><p>Redraw breakpoints.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">rows</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\" class=\"\" title=\"Object\" data-id=\"Object\">Object</a></td><td class=\"argDescription \"><p>Required. </p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.updateCharacterSize\" data-title=\"VirtualRenderer.updateCharacterSize (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.updateCharacterSize\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.updateCharacterSize\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">updateCharacterSize</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                  <li><span class=\"label undocumented\">Undocumented</span></li>\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.updateCharacterSize\" class=\"ellipsis_description\">\n            </div>\n            <div class=\"description\">\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.updateCursor\" data-title=\"VirtualRenderer.updateCursor (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.updateCursor\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.updateCursor\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">updateCursor</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.updateCursor\" class=\"ellipsis_description\"><p>Updates the cursor icon.</p>\n\n            </div>\n            <div class=\"description\"><p>Updates the cursor icon.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.updateFontSize\" data-title=\"VirtualRenderer.updateFontSize (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.updateFontSize\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.updateFontSize\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">updateFontSize</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.updateFontSize\" class=\"ellipsis_description\"><p>Updates the font size.</p>\n\n            </div>\n            <div class=\"description\"><p>Updates the font size.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.updateFrontMarkers\" data-title=\"VirtualRenderer.updateFrontMarkers (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.updateFrontMarkers\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.updateFrontMarkers\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">updateFrontMarkers</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.updateFrontMarkers\" class=\"ellipsis_description\"><p>Schedules an update to all the front markers in the document.</p>\n\n            </div>\n            <div class=\"description\"><p>Schedules an update to all the front markers in the document.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.updateFull\" data-title=\"VirtualRenderer.updateFull (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.updateFull\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.updateFull\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">updateFull</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"argument methodClicker\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a> force</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.updateFull\" class=\"ellipsis_description\"><p>Triggers a full update of all the layers, for all the rows.</p>\n\n            </div>\n            <div class=\"description\"><p>Triggers a full update of all the layers, for all the rows.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">force</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\" class=\"\" title=\"Boolean\" data-id=\"Boolean\">Boolean</a></td><td class=\"argDescription \"><p>Required. If <code>true</code>, forces the changes through</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.updateLines\" data-title=\"VirtualRenderer.updateLines (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.updateLines\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.updateLines\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">updateLines</span></span>(<span class=\"sigArgList\"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> firstRow, <a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"argument methodClicker\" title=\"Number\" data-id=\"Number\">Number</a> lastRow</span>)</li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.updateLines\" class=\"ellipsis_description\"><p>Triggers a partial update of the text, from the range given by the two parameters.</p>\n\n            </div>\n            <div class=\"description\"><p>Triggers a partial update of the text, from the range given by the two parameters.</p>\n\n              <h4>Arguments</h4><table class=\"argumentTable argument-list table table-striped table-bordered\"><tr class=\"argumentRow \"><td class=\"argName \">firstRow</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The first row to update</p>\n</td></tr><tr class=\"argumentRow \"><td class=\"argName \">lastRow</td><td class=\"argType\" \"><a href=\"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\" class=\"\" title=\"Number\" data-id=\"Number\">Number</a></td><td class=\"argDescription \"><p>Required. The last row to update</p>\n</td></tr></table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.updateText\" data-title=\"VirtualRenderer.updateText (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.updateText\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.updateText\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">updateText</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.updateText\" class=\"ellipsis_description\"><p>Triggers a full update of the text, for all the rows.</p>\n\n            </div>\n            <div class=\"description\"><p>Triggers a full update of the text, for all the rows.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.visualizeBlur\" data-title=\"VirtualRenderer.visualizeBlur (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.visualizeBlur\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.visualizeBlur\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">visualizeBlur</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.visualizeBlur\" class=\"ellipsis_description\"><p>Blurs the current container.</p>\n\n            </div>\n            <div class=\"description\"><p>Blurs the current container.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n    <article id=\"VirtualRenderer.visualizeFocus\" data-title=\"VirtualRenderer.visualizeFocus (class method)\" class=\"article\">\n      <div class=\"section method\">\n        <div class=\"memberContent\">\n          <div class=\"title\"><i id=\"VirtualRenderer.visualizeFocus\" class=\"methodToggle methodClicker inactive icon-caret-right\"></i>\n            <ul class=\"signatures\">\n              <li class=\"signature\">\n                <ul>\n                  <li class=\"signature-call\"><span id=\"VirtualRenderer.visualizeFocus\" class=\"member-name methodClicker\"><span class=\"sigClassName\">VirtualRenderer.</span><span class=\"sigMemberName\">visualizeFocus</span></span><span class=\"emptyArgumentList\">()</span></li>\n                </ul>\n                <ul class=\"metaInfo\">\n                </ul>\n              </li>\n            </ul>\n          </div>\n          <div class=\"sideToggler\">\n            <div id=\"ellipsis_VirtualRenderer.visualizeFocus\" class=\"ellipsis_description\"><p>Focuses the current container.</p>\n\n            </div>\n            <div class=\"description\"><p>Focuses the current container.</p>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </article>\n  </div>\n  <script defer src=\"./resources/javascripts/ux.js\"></script>\n  <script src=\"./resources/javascripts/clicker.js\"></script>\n  <script src=\"./resources/javascripts/jquery-scrollspy.js\"></script>\n  <script defer src=\"./resources/javascripts/disqus-ext.js\"></script>\n  <script defer src=\"./resources/javascripts/ga.js\"></script>\n  <div id=\"disqus_thread\"></div>\n</div>\n"
  },
  {
    "path": "build_support/bookmarklet.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\">\n  <link href=\"style.css\" rel=\"stylesheet\" type=\"text/css\">\n  <title>Ace Bookmarklet Builder</title>\n</head>\n<body>\n\n<div id=\"wrapper\">\n\n<div class=\"content\" style=\"width: 950px\">\n    <div class=\"column1\" style=\"margin-top: 47px\">\n        <textarea id=\"textarea\" style=\"width:300px; height:300px\">\n/**\n * This is Ace injected using a bookmarklet.\n */\nfunction foo() {\n    var bar = true;\n}</textarea><br>\n        SourceUrl: <br>\n        <input id=\"srcURL\" style=\"width:300px\" value=\"http://ajaxorg.github.com/ace-builds/src-noconflict\"></input><br>\n        <button id=\"buBuild\">Build Link</button> <br> <a href=\"#\"></a>\n        <a href=\"https://github.com/ajaxorg/ace/\">\n            <div class=\"fork_on_github\" ></div>\n        </a>\n    </div>\n    <div class=\"column2\">\n        <h1>Ace Bookmarklet Builder</h1>\n\n        <p id=\"first\">\n        <strong>WARNING:</strong> Currently, this is only supported in non IE browsers.\n        </p>\n\n        <h2>How to use it:</h2>\n        <ul>\n            <li>Select the options as you want them to be by default.</li>\n            <li>Enter the \"SourceUrl\". This has to be the URL pointing to build/textarea/src/ (you can leave the default to server the scripts from GitHub).</li>\n            <li>Click the \"Build Link\" button to generate your custom Ace Bookmarklet.</li>\n            <li>Drag the generated link to your toolbar or store it somewhere else.</li>\n            <li>Go to a page with a textarea element and click the bookmarklet - wait a little bit till the files are loaded.</li>\n            <li>Click three times on the textarea you want to replace - Ace will replace it.</li>\n            <li>To change settings, just click the red icon in the bottom right corner.</li>\n        </ul>\n    </div>\n</div>\n</div>\n\n<script>\n\nfunction inject(options, callback) {\n    var baseUrl = options.baseUrl || \"../../src-noconflict\";\n\n    var load = function(path, callback) {\n        var head = document.getElementsByTagName('head')[0];\n        var s = document.createElement('script');\n\n        s.src = baseUrl + \"/\" + path;\n        head.appendChild(s);\n\n        s.onload = s.onreadystatechange = function(_, isAbort) {\n            if (isAbort || !s.readyState || s.readyState == \"loaded\" || s.readyState == \"complete\") {\n                s = s.onload = s.onreadystatechange = null;\n                if (!isAbort)\n                    callback();\n            }\n        };\n    };\n\n    load(\"ace.js\", function() {\n        ace.config.loadModule(\"ace/ext/textarea\", function() {\n            var event = ace.require(\"ace/lib/event\");\n            var areas = document.getElementsByTagName(\"textarea\");\n            for (var i = 0; i < areas.length; i++) {\n                event.addListener(areas[i], \"click\", function(e) {\n                    if (e.detail == 3) {\n                        ace.transformTextarea(e.target, options.ace);\n                    }\n                });\n            }\n            callback && callback();\n        });\n    });\n}\n\n// Call the inject function to load the ace files.\nvar textAce;\ninject({}, function () {\n    // Transform the textarea on the page into an ace editor.\n    var t = document.querySelector(\"textarea\");\n    textAce = ace.require(\"ace/ext/textarea\").transformTextarea(t);\n    setTimeout(function(){textAce.setDisplaySettings(true)});\n});\n\n\ndocument.getElementById(\"buBuild\").onclick = function() {\n    var injectSrc = inject.toString().split(\"\\n\").join(\"\");\n    injectSrc = injectSrc.replace(/\\s+/g, \" \");\n\n    var options = textAce.getOptions();\n    options.baseUrl = document.getElementById(\"srcURL\").value;\n\n    var a = document.querySelector(\"a\");\n    a.href = \"javascript:(\" + injectSrc + \")(\" + JSON.stringify(options) + \")\";\n    a.innerHTML = \"Ace Bookmarklet Link\";\n}\n\n</script>\n\n</body>\n</html>\n"
  },
  {
    "path": "build_support/editor.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\">\n  <title>Editor</title>\n  <style type=\"text/css\" media=\"screen\">\n    body {\n        overflow: hidden;\n    }\n\n    #editor {\n        margin: 0;\n        position: absolute;\n        top: 0;\n        bottom: 0;\n        left: 0;\n        right: 0;\n    }\n  </style>\n</head>\n<body>\n\n<pre id=\"editor\">function foo(items) {\n    var i;\n    for (i = 0; i &lt; items.length; i++) {\n        alert(\"Ace Rocks \" + items[i]);\n    }\n}</pre>\n\n<script src=\"src-noconflict/ace.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\n<script>\n    var editor = ace.edit(\"editor\");\n    editor.setTheme(\"ace/theme/twilight\");\n    editor.session.setMode(\"ace/mode/javascript\");\n</script>\n\n</body>\n</html>\n"
  },
  {
    "path": "build_support/mini_require.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/**\n * Define a module along with a payload\n * @param module a name for the payload\n * @param payload a function to call with (require, exports, module) params\n */\n\n(function() {\n\nvar ACE_NAMESPACE = \"\";\n\nvar global = (function() { return this; })();\nif (!global && typeof window != \"undefined\") global = window; // strict mode\n\n\nif (!ACE_NAMESPACE && typeof requirejs !== \"undefined\")\n    return;\n\n\nvar define = function(module, deps, payload) {\n    if (typeof module !== \"string\") {\n        if (define.original)\n            define.original.apply(this, arguments);\n        else {\n            console.error(\"dropping module because define wasn\\'t a string.\");\n            console.trace();\n        }\n        return;\n    }\n    if (arguments.length == 2)\n        payload = deps;\n    if (!define.modules[module]) {\n        define.payloads[module] = payload;\n        define.modules[module] = null;\n    }\n};\n\ndefine.modules = {};\ndefine.payloads = {};\n\n/**\n * Get at functionality define()ed using the function above\n */\nvar _require = function(parentId, module, callback) {\n    if (typeof module === \"string\") {\n        var payload = lookup(parentId, module);\n        if (payload != undefined) {\n            callback && callback();\n            return payload;\n        }\n    } else if (Object.prototype.toString.call(module) === \"[object Array]\") {\n        var params = [];\n        for (var i = 0, l = module.length; i < l; ++i) {\n            var dep = lookup(parentId, module[i]);\n            if (dep == undefined && require.original)\n                return;\n            params.push(dep);\n        }\n        return callback && callback.apply(null, params) || true;\n    }\n};\n\nvar require = function(module, callback) {\n    var packagedModule = _require(\"\", module, callback);\n    if (packagedModule == undefined && require.original)\n        return require.original.apply(this, arguments);\n    return packagedModule;\n};\n\nvar normalizeModule = function(parentId, moduleName) {\n    // normalize plugin requires\n    if (moduleName.indexOf(\"!\") !== -1) {\n        var chunks = moduleName.split(\"!\");\n        return normalizeModule(parentId, chunks[0]) + \"!\" + normalizeModule(parentId, chunks[1]);\n    }\n    // normalize relative requires\n    if (moduleName.charAt(0) == \".\") {\n        var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n        moduleName = base + \"/\" + moduleName;\n\n        while(moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n            var previous = moduleName;\n            moduleName = moduleName.replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n        }\n    }\n    return moduleName;\n};\n\n/**\n * Internal function to lookup moduleNames and resolve them by calling the\n * definition function if needed.\n */\nvar lookup = function(parentId, moduleName) {\n    moduleName = normalizeModule(parentId, moduleName);\n\n    var module = define.modules[moduleName];\n    if (!module) {\n        module = define.payloads[moduleName];\n        if (typeof module === 'function') {\n            var exports = {};\n            var mod = {\n                id: moduleName,\n                uri: '',\n                exports: exports,\n                packaged: true\n            };\n\n            var req = function(module, callback) {\n                return _require(moduleName, module, callback);\n            };\n\n            var returnValue = module(req, exports, mod);\n            exports = returnValue || mod.exports;\n            define.modules[moduleName] = exports;\n            delete define.payloads[moduleName];\n        }\n        module = define.modules[moduleName] = exports || module;\n    }\n    return module;\n};\n\nfunction exportAce(ns) {\n    var root = global;\n    if (ns) {\n        if (!global[ns])\n            global[ns] = {};\n        root = global[ns];\n    }\n\n    if (!root.define || !root.define.packaged) {\n        define.original = root.define;\n        root.define = define;\n        root.define.packaged = true;\n    }\n\n    if (!root.require || !root.require.packaged) {\n        require.original = root.require;\n        root.require = require;\n        root.require.packaged = true;\n    }\n}\n\nexportAce(ACE_NAMESPACE);\n\n})();\n"
  },
  {
    "path": "build_support/style.css",
    "content": "@import url(//fonts.googleapis.com/css?family=Droid+Sans+Mono);\n\nbody {\n    margin:0;\n    padding:0;\n    background-color:#e6f5fc;\n\n}\n\nH2, H3, H4 {\n    font-family:Trebuchet MS;\n    font-weight:bold;\n    margin:0;\n    padding:0;\n}\n\nH2 {\n    font-size:28px;\n    color:#263842;\n    padding-bottom:6px;\n}\n\nH3 {\n    font-family:Trebuchet MS;\n    font-weight:bold;\n    font-size:22px;\n    color:#253741;\n    margin-top:43px;\n    margin-bottom:8px;\n}\n\nH4 {\n    font-family:Trebuchet MS;\n    font-weight:bold;\n    font-size:21px;\n    color:#222222;\n    margin-bottom:4px;\n}\n\nP {\n    padding:13px 0;\n    margin:0;\n    line-height:22px;\n}\n\nUL{\n    line-height : 22px;\n}\n\nPRE{\n    background : #333;\n    color : white;\n    padding : 10px;\n}\n\n#header {\n    height : 227px;\n    position:relative;\n    overflow:hidden;\n    background: url(images/background.png) repeat-x 0 0;\n    border-bottom:1px solid #c9e8fa;\n}\n\n#header .content .signature {\n    font-family:Trebuchet MS;\n    font-size:11px;\n    color:#ebe4d6;\n    position:absolute;\n    bottom:5px;\n    right:42px;\n    letter-spacing : 1px;\n}\n\n.content {\n    width:970px;\n    position:relative;\n    margin:0 auto;\n}\n\n#header .content {\n    height:184px;\n    margin-top:22px;\n}\n\n#header .content .logo {\n    width  : 282px;\n    height : 184px;\n    background:url(images/logo.png) no-repeat 0 0;\n    position:absolute;\n    top:0;\n    left:0;\n}\n\n#header .content .title {\n    width  : 605px;\n    height : 58px;\n    background:url(images/ace.png) no-repeat 0 0;\n    position:absolute;\n    top:98px;\n    left:329px;\n}\n\n#wrapper {\n    background:url(images/body_background.png) repeat-x 0 0;\n    min-height:250px;\n}\n\n#wrapper .content {\n    font-family:Arial;\n    font-size:14px;\n    color:#222222;\n    width:1000px;\n}\n\n#wrapper .content .column1 {\n    position:relative;\n    float:left;\n    width:315px;\n    margin-right:31px;\n}\n\n#wrapper .content .column2 {\n    position:relative;\n    overflow:hidden;\n    float:left;\n    width:600px;\n    padding-top:47px;\n}\n\n.fork_on_github {\n    width:310px;\n    height:80px;\n    background:url(images/fork_on_github.png) no-repeat 0 0;\n    position:relative;\n    overflow:hidden;\n    margin-top:49px;\n    cursor:pointer;\n}\n\n.fork_on_github:hover {\n    background-position:0 -80px;\n}\n\n.divider {\n    height:3px;\n    background-color:#bedaea;\n    margin-bottom:3px;\n}\n\n.menu {\n    padding:23px 0 0 24px;\n}\n\nUL.content-list {\n    padding:15px;\n    margin:0;\n}\n\nUL.menu-list {\n    padding:0;\n    margin:0 0 20px 0;\n    list-style-type:none;\n    line-height : 16px;\n}\n\nUL.menu-list LI {\n    color:#2557b4;\n    font-family:Trebuchet MS;\n    font-size:14px;\n    padding:7px 0;\n    border-bottom:1px dotted #d6e2e7;\n}\n\nUL.menu-list LI:last-child {\n    border-bottom:0;\n}\n\nA {\n    color:#2557b4;\n    text-decoration:none;\n}\n\nA:hover {\n    text-decoration:underline;\n}\n\nP#first{\n    background : rgba(255,255,255,0.5);\n    padding : 20px;\n    font-size : 16px;\n    line-height : 24px;\n    margin : 0 0 20px 0;\n}\n\n#footer {\n    height:40px;\n    position:relative;\n    overflow:hidden;\n    background:url(images/bottombar.png) repeat-x 0 0;\n    position:relative;\n    margin-top:40px;\n}\n\nUL.menu-footer {\n    padding:0;\n    margin:8px 11px 0 0;\n    list-style-type:none;\n    float:right;\n}\n\nUL.menu-footer LI {\n    color:white;\n    font-family:Arial;\n    font-size:12px;\n    display:inline-block;\n    margin:0 1px;\n}\n\nUL.menu-footer LI A {\n    color:#8dd0ff;\n    text-decoration:none;\n}\n\nUL.menu-footer LI A:hover {\n    text-decoration:underline;\n}\n"
  },
  {
    "path": "demo/autocompletion.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <title>ACE Autocompletion demo</title>\n  <style type=\"text/css\" media=\"screen\">\n    body {\n        overflow: hidden;\n    }\n    \n    #editor { \n        margin: 0;\n        position: absolute;\n        top: 0;\n        bottom: 0;\n        left: 0;\n        right: 0;\n    }\n  </style>\n</head>\n<body>\n\n<pre id=\"editor\"></pre>\n\n<!-- load ace -->\n<script src=\"../build/src-noconflict/ace.js\"></script>\n<!-- load ace language tools -->\n<script src=\"../build/src-noconflict/ext-language_tools.js\"></script>\n<script>\n    // trigger extension\n    ace.require(\"ace/ext/language_tools\");\n    var editor = ace.edit(\"editor\");\n    editor.session.setMode(\"ace/mode/html\");\n    editor.setTheme(\"ace/theme/tomorrow\");\n    // enable autocompletion and snippets\n    editor.setOptions({\n        enableBasicAutocompletion: true,\n        enableSnippets: true,\n        enableLiveAutocompletion: false\n    });\n</script>\n\n<script src=\"./show_own_source.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "demo/autoresize.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\">\n  <title>Editor</title>\n  <style type=\"text/css\" media=\"screen\">\n\n\t.ace_editor {\n\t\tborder: 1px solid lightgray;\n\t\tmargin: auto;\n\t\theight: 200px;\n\t\twidth: 80%;\n\t}\n\t.scrollmargin {\n\t\theight: 80px;\n        text-align: center;\n\t}\n    </style>\n</head>\n<body>\n<pre id=\"editor1\">autoresizing editor</pre>\n<div class=\"scrollmargin\"></div>\n<pre id=\"editor2\">minHeight = 2 lines</pre>\n<div class=\"scrollmargin\"></div>\n<pre id=\"editor3\" style=\"width: 40%;\"></pre>\n<div class=\"scrollmargin\"></div>\n<pre id=\"editor\"></pre>\n\n<script src=\"kitchen-sink/require.js\"></script>\n<script>\n// setup paths\nrequire.config({paths: { \"ace\" : \"../lib/ace\"}});\n// load ace and extensions\nrequire([\"ace/ace\"], function(ace) {\n\n    var editor1 = ace.edit(\"editor1\");\n    editor1.setTheme(\"ace/theme/tomorrow_night_eighties\");\n    editor1.session.setMode(\"ace/mode/html\");\n    editor1.setAutoScrollEditorIntoView(true);\n    editor1.setOption(\"maxLines\", 30);\n\n    var editor2 = ace.edit(\"editor2\");\n    editor2.setTheme(\"ace/theme/tomorrow_night_blue\");\n    editor2.session.setMode(\"ace/mode/html\");\n    editor2.setAutoScrollEditorIntoView(true);\n    editor2.setOption(\"maxLines\", 30);\n    editor2.setOption(\"minLines\", 2);\n\n    var editor = ace.edit(\"editor3\");\n    editor.setOptions({\n        autoScrollEditorIntoView: true,\n        maxLines: 8\n    });\n    editor.renderer.setScrollMargin(10, 10, 10, 10);\n    \n    var editor = ace.edit(\"editor\");\n    editor.setTheme(\"ace/theme/tomorrow\");\n    editor.session.setMode(\"ace/mode/html\");\n    editor.setAutoScrollEditorIntoView(true);\n    editor.setOption(\"maxLines\", 100);\n});\n</script>\n\n<script src=\"./show_own_source.js\"></script>\n\n</body>\n</html>\n"
  },
  {
    "path": "demo/emmet.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <title>ACE Emmet demo</title>\n  <style type=\"text/css\" media=\"screen\">\n    body {\n        overflow: hidden;\n    }\n    \n    #editor { \n        margin: 0;\n        position: absolute;\n        top: 0;\n        bottom: 0;\n        left: 0;\n        right: 0;\n    }\n  </style>\n</head>\n<body>\n\n<pre id=\"editor\"></pre>\n\n<!-- load emmet code and snippets compiled for browser -->\n<script src=\"https://cloud9ide.github.io/emmet-core/emmet.js\"></script>\n\n<script src=\"kitchen-sink/require.js\"></script>\n<script>\n// setup paths\nrequire.config({paths: { \"ace\" : \"../lib/ace\"}});\n// load ace and extensions\nrequire([\"ace/ace\", \"ace/ext/emmet\"], function(ace) {\n    var editor = ace.edit(\"editor\");\n    editor.session.setMode(\"ace/mode/html\");\n    // enable emmet on the current editor\n    editor.setOption(\"enableEmmet\", true);\n});\n</script>\n\n<script src=\"./show_own_source.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "demo/ie7.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\">\n  <title>ACE Editor StatusBar Demo</title>\n  <style type=\"text/css\" media=\"screen\">\n    /*!important without this top: 0; bottom: 0 doesn't work on old ie */\n    body, html {\n        position: absolute;\n        top: 0px; bottom: 0; left: 0; right: 0;\n        margin:0; padding:0;\n        overflow:hidden\n    }\n    \n    #editor { \n        margin: 0;\n        position: absolute;\n        top: 0; bottom: 0; left: 0; right: 0;\n    }\n  </style>\n</head>\n<body>\n\n<pre id=\"editor\">\nrequire(\"ace/ext/old_ie\");\n// now ace will work even on ie7!\nvar editor = ace.edit(\"editor\");\n</pre>\n    \n<script src=\"../build/src/ace.js\"></script>\n<script src=\"../build/src/ext-old_ie.js\"></script>\n<script>\n    // before creating an editor patch up things for old ie\n    require(\"ace/ext/old_ie\");\n    // now ace will work even on ie7!\n    var editor = ace.edit(\"editor\");\n    editor.setTheme(\"ace/theme/textmate\");\n    editor.session.setMode(\"ace/mode/javascript\");\n</script>\n\n\n</body>\n</html>\n"
  },
  {
    "path": "demo/keyboard_shortcuts.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\">\n  <title>Editor</title>\n  <style type=\"text/css\" media=\"screen\">\n    body {\n        overflow: hidden;\n    }    \n    #editor { \n        margin: 0;\n        position: absolute;\n        top: 0;\n        bottom: 0;\n        left: 0;\n        right: 0;\n    }\n  </style>\n</head>\n<body>\n\n<pre id=\"editor\"></pre>\n    \n<script src=\"kitchen-sink/require.js\"></script>\n<script>\n// setup paths\nrequire.config({paths: { \"ace\" : \"../lib/ace\"}});\nrequire([\"ace/ace\"], function(ace) {\n    var editor = ace.edit(\"editor\")\n    editor.setTheme(\"ace/theme/twilight\")\n    editor.session.setMode(\"ace/mode/html\")\n    \n    // add command to lazy-load keybinding_menu extension\n    editor.commands.addCommand({\n        name: \"showKeyboardShortcuts\",\n        bindKey: {win: \"Ctrl-Alt-h\", mac: \"Command-Alt-h\"},\n        exec: function(editor) {\n            ace.config.loadModule(\"ace/ext/keybinding_menu\", function(module) {\n                module.init(editor);\n                editor.showKeyboardShortcuts()\n            })\n        }\n    })\n    editor.execCommand(\"showKeyboardShortcuts\")\n})\n</script>\n\n<script src=\"./show_own_source.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "demo/kitchen-sink/demo.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nrequire(\"ace/lib/fixoldbrowsers\");\n\nrequire(\"ace/multi_select\");\nrequire(\"ace/ext/spellcheck\");\nrequire(\"./inline_editor\");\nrequire(\"./dev_util\");\nrequire(\"./file_drop\");\n\nvar config = require(\"ace/config\");\nconfig.init();\nvar env = {};\n\nvar dom = require(\"ace/lib/dom\");\nvar net = require(\"ace/lib/net\");\nvar lang = require(\"ace/lib/lang\");\nvar useragent = require(\"ace/lib/useragent\");\n\nvar event = require(\"ace/lib/event\");\nvar theme = require(\"ace/theme/textmate\");\nvar EditSession = require(\"ace/edit_session\").EditSession;\nvar UndoManager = require(\"ace/undomanager\").UndoManager;\n\nvar HashHandler = require(\"ace/keyboard/hash_handler\").HashHandler;\n\nvar Renderer = require(\"ace/virtual_renderer\").VirtualRenderer;\nvar Editor = require(\"ace/editor\").Editor;\n\nvar whitespace = require(\"ace/ext/whitespace\");\n\n\n\nvar doclist = require(\"./doclist\");\nvar modelist = require(\"ace/ext/modelist\");\nvar themelist = require(\"ace/ext/themelist\");\nvar layout = require(\"./layout\");\nvar TokenTooltip = require(\"./token_tooltip\").TokenTooltip;\nvar util = require(\"./util\");\nvar saveOption = util.saveOption;\nvar fillDropdown = util.fillDropdown;\nvar bindCheckbox = util.bindCheckbox;\nvar bindDropdown = util.bindDropdown;\n\nvar ElasticTabstopsLite = require(\"ace/ext/elastic_tabstops_lite\").ElasticTabstopsLite;\n\nvar IncrementalSearch = require(\"ace/incremental_search\").IncrementalSearch;\n\n\nvar workerModule = require(\"ace/worker/worker_client\");\nif (location.href.indexOf(\"noworker\") !== -1) {\n    workerModule.WorkerClient = workerModule.UIWorkerClient;\n}\n\n/*********** create editor ***************************/\nvar container = document.getElementById(\"editor-container\");\n\n// Splitting.\nvar Split = require(\"ace/split\").Split;\nvar split = new Split(container, theme, 1);\nenv.editor = split.getEditor(0);\nsplit.on(\"focus\", function(editor) {\n    env.editor = editor;\n    updateUIEditorOptions();\n});\nenv.split = split;\nwindow.env = env;\n\n\nvar consoleEl = dom.createElement(\"div\");\ncontainer.parentNode.appendChild(consoleEl);\nconsoleEl.style.cssText = \"position:fixed; bottom:1px; right:0;\\\nborder:1px solid #baf; z-index:100\";\n\nvar cmdLine = new layout.singleLineEditor(consoleEl);\ncmdLine.editor = env.editor;\nenv.editor.cmdLine = cmdLine;\n\nenv.editor.showCommandLine = function(val) {\n    this.cmdLine.focus();\n    if (typeof val == \"string\")\n        this.cmdLine.setValue(val, 1);\n};\n\n/**\n * This demonstrates how you can define commands and bind shortcuts to them.\n */\nenv.editor.commands.addCommands([{\n    name: \"gotoline\",\n    bindKey: {win: \"Ctrl-L\", mac: \"Command-L\"},\n    exec: function(editor, line) {\n        if (typeof line == \"object\") {\n            var arg = this.name + \" \" + editor.getCursorPosition().row;\n            editor.cmdLine.setValue(arg, 1);\n            editor.cmdLine.focus();\n            return;\n        }\n        line = parseInt(line, 10);\n        if (!isNaN(line))\n            editor.gotoLine(line);\n    },\n    readOnly: true\n}, {\n    name: \"snippet\",\n    bindKey: {win: \"Alt-C\", mac: \"Command-Alt-C\"},\n    exec: function(editor, needle) {\n        if (typeof needle == \"object\") {\n            editor.cmdLine.setValue(\"snippet \", 1);\n            editor.cmdLine.focus();\n            return;\n        }\n        var s = snippetManager.getSnippetByName(needle, editor);\n        if (s)\n            snippetManager.insertSnippet(editor, s.content);\n    },\n    readOnly: true\n}, {\n    name: \"focusCommandLine\",\n    bindKey: \"shift-esc|ctrl-`\",\n    exec: function(editor, needle) { editor.cmdLine.focus(); },\n    readOnly: true\n}, {\n    name: \"nextFile\",\n    bindKey: \"Ctrl-tab\",\n    exec: function(editor) { doclist.cycleOpen(editor, 1); },\n    readOnly: true\n}, {\n    name: \"previousFile\",\n    bindKey: \"Ctrl-shift-tab\",\n    exec: function(editor) { doclist.cycleOpen(editor, -1); },\n    readOnly: true\n}, {\n    name: \"execute\",\n    bindKey: \"ctrl+enter\",\n    exec: function(editor) {\n        try {\n            var r = window.eval(editor.getCopyText() || editor.getValue());\n        } catch(e) {\n            r = e;\n        }\n        editor.cmdLine.setValue(r + \"\");\n    },\n    readOnly: true\n}, {\n    name: \"showKeyboardShortcuts\",\n    bindKey: {win: \"Ctrl-Alt-h\", mac: \"Command-Alt-h\"},\n    exec: function(editor) {\n        config.loadModule(\"ace/ext/keybinding_menu\", function(module) {\n            module.init(editor);\n            editor.showKeyboardShortcuts();\n        });\n    }\n}, {\n    name: \"increaseFontSize\",\n    bindKey: \"Ctrl-=|Ctrl-+\",\n    exec: function(editor) {\n        var size = parseInt(editor.getFontSize(), 10) || 12;\n        editor.setFontSize(size + 1);\n    }\n}, {\n    name: \"decreaseFontSize\",\n    bindKey: \"Ctrl+-|Ctrl-_\",\n    exec: function(editor) {\n        var size = parseInt(editor.getFontSize(), 10) || 12;\n        editor.setFontSize(Math.max(size - 1 || 1));\n    }\n}, {\n    name: \"resetFontSize\",\n    bindKey: \"Ctrl+0|Ctrl-Numpad0\",\n    exec: function(editor) {\n        editor.setFontSize(12);\n    }\n}]);\n\n\nenv.editor.commands.addCommands(whitespace.commands);\n\ncmdLine.commands.bindKeys({\n    \"Shift-Return|Ctrl-Return|Alt-Return\": function(cmdLine) { cmdLine.insert(\"\\n\"); },\n    \"Esc|Shift-Esc\": function(cmdLine){ cmdLine.editor.focus(); },\n    \"Return\": function(cmdLine){\n        var command = cmdLine.getValue().split(/\\s+/);\n        var editor = cmdLine.editor;\n        editor.commands.exec(command[0], editor, command[1]);\n        editor.focus();\n    }\n});\n\ncmdLine.commands.removeCommands([\"find\", \"gotoline\", \"findall\", \"replace\", \"replaceall\"]);\n\nvar commands = env.editor.commands;\ncommands.addCommand({\n    name: \"save\",\n    bindKey: {win: \"Ctrl-S\", mac: \"Command-S\"},\n    exec: function(arg) {\n        var session = env.editor.session;\n        var name = session.name.match(/[^\\/]+$/);\n        localStorage.setItem(\n            \"saved_file:\" + name,\n            session.getValue()\n        );\n        env.editor.cmdLine.setValue(\"saved \"+ name);\n    }\n});\n\ncommands.addCommand({\n    name: \"load\",\n    bindKey: {win: \"Ctrl-O\", mac: \"Command-O\"},\n    exec: function(arg) {\n        var session = env.editor.session;\n        var name = session.name.match(/[^\\/]+$/);\n        var value = localStorage.getItem(\"saved_file:\" + name);\n        if (typeof value == \"string\") {\n            session.setValue(value);\n            env.editor.cmdLine.setValue(\"loaded \"+ name);\n        } else {\n            env.editor.cmdLine.setValue(\"no previuos value saved for \"+ name);\n        }\n    }\n});\n\nvar keybindings = {\n    ace: null, // Null = use \"default\" keymapping\n    vim: require(\"ace/keyboard/vim\").handler,\n    emacs: \"ace/keyboard/emacs\",\n    // This is a way to define simple keyboard remappings\n    custom: new HashHandler({\n        \"gotoright\":      \"Tab\",\n        \"indent\":         \"]\",\n        \"outdent\":        \"[\",\n        \"gotolinestart\":  \"^\",\n        \"gotolineend\":    \"$\"\n    })\n};\n\n\n\n/*********** manage layout ***************************/\nvar consoleHeight = 20;\nfunction onResize() {\n    var left = env.split.$container.offsetLeft;\n    var width = document.documentElement.clientWidth - left;\n    container.style.width = width + \"px\";\n    container.style.height = document.documentElement.clientHeight - consoleHeight + \"px\";\n    env.split.resize();\n\n    consoleEl.style.width = width + \"px\";\n    cmdLine.resize();\n}\n\nwindow.onresize = onResize;\nonResize();\n\n/*********** options panel ***************************/\nvar docEl = document.getElementById(\"doc\");\nvar modeEl = document.getElementById(\"mode\");\nvar wrapModeEl = document.getElementById(\"soft_wrap\");\nvar themeEl = document.getElementById(\"theme\");\nvar foldingEl = document.getElementById(\"folding\");\nvar selectStyleEl = document.getElementById(\"select_style\");\nvar highlightActiveEl = document.getElementById(\"highlight_active\");\nvar showHiddenEl = document.getElementById(\"show_hidden\");\nvar showGutterEl = document.getElementById(\"show_gutter\");\nvar showPrintMarginEl = document.getElementById(\"show_print_margin\");\nvar highlightSelectedWordE = document.getElementById(\"highlight_selected_word\");\nvar showHScrollEl = document.getElementById(\"show_hscroll\");\nvar showVScrollEl = document.getElementById(\"show_vscroll\");\nvar animateScrollEl = document.getElementById(\"animate_scroll\");\nvar softTabEl = document.getElementById(\"soft_tab\");\nvar navigateWithinSoftTabEl = document.getElementById(\"navigate_within_soft_tab\");\nvar behavioursEl = document.getElementById(\"enable_behaviours\");\n\nfillDropdown(docEl, doclist.all);\n\nfillDropdown(modeEl, modelist.modes);\nvar modesByName = modelist.modesByName;\nbindDropdown(\"mode\", function(value) {\n    env.editor.session.setMode(modesByName[value].mode || modesByName.text.mode);\n    env.editor.session.modeName = value;\n});\n\ndoclist.history = doclist.docs.map(function(doc) {\n    return doc.name;\n});\ndoclist.history.index = 0;\ndoclist.cycleOpen = function(editor, dir) {\n    var h = this.history;\n    h.index += dir;\n    if (h.index >= h.length)\n        h.index = 0;\n    else if (h.index <= 0)\n        h.index = h.length - 1;\n    var s = h[h.index];\n    docEl.value = s;\n    docEl.onchange();\n};\ndoclist.addToHistory = function(name) {\n    var h = this.history;\n    var i = h.indexOf(name);\n    if (i != h.index) {\n        if (i != -1)\n            h.splice(i, 1);\n        h.index = h.push(name);\n    }\n};\n\nbindDropdown(\"doc\", function(name) {\n    doclist.loadDoc(name, function(session) {\n        if (!session)\n            return;\n        doclist.addToHistory(session.name);\n        session = env.split.setSession(session);\n        whitespace.detectIndentation(session);\n        updateUIEditorOptions();\n        env.editor.focus();\n    });\n});\n\n\nfunction updateUIEditorOptions() {\n    var editor = env.editor;\n    var session = editor.session;\n\n    session.setFoldStyle(foldingEl.value);\n\n    saveOption(docEl, session.name);\n    saveOption(modeEl, session.modeName || \"text\");\n    saveOption(wrapModeEl, session.getUseWrapMode() ? session.getWrapLimitRange().min || \"free\" : \"off\");\n\n    saveOption(selectStyleEl, editor.getSelectionStyle() == \"line\");\n    saveOption(themeEl, editor.getTheme());\n    saveOption(highlightActiveEl, editor.getHighlightActiveLine());\n    saveOption(showHiddenEl, editor.getShowInvisibles());\n    saveOption(showGutterEl, editor.renderer.getShowGutter());\n    saveOption(showPrintMarginEl, editor.renderer.getShowPrintMargin());\n    saveOption(highlightSelectedWordE, editor.getHighlightSelectedWord());\n    saveOption(showHScrollEl, editor.renderer.getHScrollBarAlwaysVisible());\n    saveOption(animateScrollEl, editor.getAnimatedScroll());\n    saveOption(softTabEl, session.getUseSoftTabs());\n    saveOption(navigateWithinSoftTabEl, session.getNavigateWithinSoftTabs());\n    saveOption(behavioursEl, editor.getBehavioursEnabled());\n}\n\nthemelist.themes.forEach(function(x){ x.value = x.theme });\nfillDropdown(themeEl, {\n    Bright: themelist.themes.filter(function(x){return !x.isDark}),\n    Dark: themelist.themes.filter(function(x){return x.isDark})\n});\n\nevent.addListener(themeEl, \"mouseover\", function(e){\n    themeEl.desiredValue = e.target.value;\n    if (!themeEl.$timer)\n        themeEl.$timer = setTimeout(themeEl.updateTheme);\n});\n\nevent.addListener(themeEl, \"mouseout\", function(e){\n    themeEl.desiredValue = null;\n    if (!themeEl.$timer)\n        themeEl.$timer = setTimeout(themeEl.updateTheme, 20);\n});\n\nthemeEl.updateTheme = function(){\n    env.split.setTheme((themeEl.desiredValue || themeEl.selectedValue));\n    themeEl.$timer = null;\n};\n\nbindDropdown(\"theme\", function(value) {\n    if (!value)\n        return;\n    env.editor.setTheme(value);\n    themeEl.selectedValue = value;\n});\n\nbindDropdown(\"keybinding\", function(value) {\n    env.editor.setKeyboardHandler(keybindings[value]);\n});\n\nbindDropdown(\"fontsize\", function(value) {\n    env.split.setFontSize(value);\n});\n\nbindDropdown(\"folding\", function(value) {\n    env.editor.session.setFoldStyle(value);\n    env.editor.setShowFoldWidgets(value !== \"manual\");\n});\n\nbindDropdown(\"soft_wrap\", function(value) {\n    env.editor.setOption(\"wrap\", value);\n});\n\nbindCheckbox(\"select_style\", function(checked) {\n    env.editor.setOption(\"selectionStyle\", checked ? \"line\" : \"text\");\n});\n\nbindCheckbox(\"highlight_active\", function(checked) {\n    env.editor.setHighlightActiveLine(checked);\n});\n\nbindCheckbox(\"show_hidden\", function(checked) {\n    env.editor.setShowInvisibles(checked);\n});\n\nbindCheckbox(\"display_indent_guides\", function(checked) {\n    env.editor.setDisplayIndentGuides(checked);\n});\n\nbindCheckbox(\"show_gutter\", function(checked) {\n    env.editor.renderer.setShowGutter(checked);\n});\n\nbindCheckbox(\"show_print_margin\", function(checked) {\n    env.editor.renderer.setShowPrintMargin(checked);\n});\n\nbindCheckbox(\"highlight_selected_word\", function(checked) {\n    env.editor.setHighlightSelectedWord(checked);\n});\n\nbindCheckbox(\"show_hscroll\", function(checked) {\n    env.editor.setOption(\"hScrollBarAlwaysVisible\", checked);\n});\n\nbindCheckbox(\"show_vscroll\", function(checked) {\n    env.editor.setOption(\"vScrollBarAlwaysVisible\", checked);\n});\n\nbindCheckbox(\"animate_scroll\", function(checked) {\n    env.editor.setAnimatedScroll(checked);\n});\n\nbindCheckbox(\"soft_tab\", function(checked) {\n    env.editor.session.setUseSoftTabs(checked);\n});\n\nbindCheckbox(\"navigate_within_soft_tab\", function(checked) {\n    env.editor.session.setNavigateWithinSoftTabs(checked);\n});\n\nbindCheckbox(\"enable_behaviours\", function(checked) {\n    env.editor.setBehavioursEnabled(checked);\n});\n\nbindCheckbox(\"fade_fold_widgets\", function(checked) {\n    env.editor.setFadeFoldWidgets(checked);\n});\nbindCheckbox(\"read_only\", function(checked) {\n    env.editor.setReadOnly(checked);\n});\nbindCheckbox(\"scrollPastEnd\", function(checked) {\n    env.editor.setOption(\"scrollPastEnd\", checked);\n});\n\nbindDropdown(\"split\", function(value) {\n    var sp = env.split;\n    if (value == \"none\") {\n        sp.setSplits(1);\n    } else {\n        var newEditor = (sp.getSplits() == 1);\n        sp.setOrientation(value == \"below\" ? sp.BELOW : sp.BESIDE);\n        sp.setSplits(2);\n\n        if (newEditor) {\n            var session = sp.getEditor(0).session;\n            var newSession = sp.setSession(session, 1);\n            newSession.name = session.name;\n        }\n    }\n});\n\n\nbindCheckbox(\"elastic_tabstops\", function(checked) {\n    env.editor.setOption(\"useElasticTabstops\", checked);\n});\n\nvar iSearchCheckbox = bindCheckbox(\"isearch\", function(checked) {\n    env.editor.setOption(\"useIncrementalSearch\", checked);\n});\n\nenv.editor.addEventListener('incrementalSearchSettingChanged', function(event) {\n    iSearchCheckbox.checked = event.isEnabled;\n});\n\n\nfunction synchroniseScrolling() {\n    var s1 = env.split.$editors[0].session;\n    var s2 = env.split.$editors[1].session;\n    s1.on('changeScrollTop', function(pos) {s2.setScrollTop(pos)});\n    s2.on('changeScrollTop', function(pos) {s1.setScrollTop(pos)});\n    s1.on('changeScrollLeft', function(pos) {s2.setScrollLeft(pos)});\n    s2.on('changeScrollLeft', function(pos) {s1.setScrollLeft(pos)});\n}\n\nbindCheckbox(\"highlight_token\", function(checked) {\n    var editor = env.editor;\n    if (editor.tokenTooltip && !checked) {\n        editor.tokenTooltip.destroy();\n        delete editor.tokenTooltip;\n    } else if (checked) {\n        editor.tokenTooltip = new TokenTooltip(editor);\n    }\n});\n\nvar StatusBar = require(\"ace/ext/statusbar\").StatusBar;\nnew StatusBar(env.editor, cmdLine.container);\n\n\nvar Emmet = require(\"ace/ext/emmet\");\nnet.loadScript(\"https://cloud9ide.github.io/emmet-core/emmet.js\", function() {\n    Emmet.setCore(window.emmet);\n    env.editor.setOption(\"enableEmmet\", true);\n});\n\n\n// require(\"ace/placeholder\").PlaceHolder;\n\nvar snippetManager = require(\"ace/snippets\").snippetManager;\n\nenv.editSnippets = function() {\n    var sp = env.split;\n    if (sp.getSplits() == 2) {\n        sp.setSplits(1);\n        return;\n    }\n    sp.setSplits(1);\n    sp.setSplits(2);\n    sp.setOrientation(sp.BESIDE);\n    var editor = sp.$editors[1];\n    var id = sp.$editors[0].session.$mode.$id || \"\";\n    var m = snippetManager.files[id];\n    if (!doclist[\"snippets/\" + id]) {\n        var text = m.snippetText;\n        var s = doclist.initDoc(text, \"\", {});\n        s.setMode(\"ace/mode/snippets\");\n        doclist[\"snippets/\" + id] = s;\n    }\n    editor.on(\"blur\", function() {\n        m.snippetText = editor.getValue();\n        snippetManager.unregister(m.snippets);\n        m.snippets = snippetManager.parseSnippetFile(m.snippetText, m.scope);\n        snippetManager.register(m.snippets);\n    });\n    sp.$editors[0].once(\"changeMode\", function() {\n        sp.setSplits(1);\n    });\n    editor.setSession(doclist[\"snippets/\" + id], 1);\n    editor.focus();\n};\n\nrequire(\"ace/ext/language_tools\");\nenv.editor.setOptions({\n    enableBasicAutocompletion: true,\n    enableLiveAutocompletion: false,\n    enableSnippets: true\n});\n\nvar beautify = require(\"ace/ext/beautify\");\nenv.editor.commands.addCommands(beautify.commands);\n\n\n// global keybindings\n\nvar KeyBinding = require(\"ace/keyboard/keybinding\").KeyBinding;\nvar CommandManager = require(\"ace/commands/command_manager\").CommandManager;\nvar commandManager = new CommandManager();\nvar kb = new KeyBinding({\n    commands: commandManager,\n    fake: true\n});\nevent.addCommandKeyListener(document.documentElement, kb.onCommandKey.bind(kb));\nevent.addListener(document.documentElement, \"keyup\", function(e) {\n    if (e.keyCode === 18) // do not trigger browser menu on windows\n        e.preventDefault();\n});\ncommandManager.addCommands([{\n    name: \"window-left\",\n    bindKey: {win: \"cmd-alt-left\", mac: \"ctrl-cmd-left\"},\n    exec: function() {\n        moveFocus();\n    }\n}, {\n    name: \"window-right\",\n    bindKey: {win: \"cmd-alt-right\", mac: \"ctrl-cmd-right\"},\n    exec: function() {\n        moveFocus();\n    }\n}, {\n    name: \"window-up\",\n    bindKey: {win: \"cmd-alt-up\", mac: \"ctrl-cmd-up\"},\n    exec: function() {\n        moveFocus();\n    }\n}, {\n    name: \"window-down\",\n    bindKey: {win: \"cmd-alt-down\", mac: \"ctrl-cmd-down\"},\n    exec: function() {\n        moveFocus();\n    }\n}]);\n\nfunction moveFocus() {\n    var el = document.activeElement;\n    if (el == env.editor.textInput.getElement())\n        env.editor.cmdLine.focus();    \n    else\n        env.editor.focus();\n}\n\n});"
  },
  {
    "path": "demo/kitchen-sink/dev_util.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\nvar dom = require(\"ace/lib/dom\");\nvar Range = require(\"ace/range\").Range;\nfunction warn() {\n    var s = (new Error()).stack || \"\";\n    s = s.split(\"\\n\");\n    if (s[1] == \"Error\") s.shift(); // remove error description on chrome\n    s.shift(); // remove warn\n    s.shift(); // remove the getter\n    s = s.join(\"\\n\");\n    // allow easy access to ace in console, but not in ace code\n    if (!/at Object.InjectedScript.|@debugger eval|snippets:\\/{3}|<anonymous>:\\d+:\\d+/.test(s)) {\n        console.error(\"trying to access to global variable\");\n    }\n}\nfunction def(o, key, get) {\n    try {\n        Object.defineProperty(o, key, {\n            configurable: true, \n            get: get,\n            set: function(val) {\n                delete o[key];\n                o[key] = val;\n            }\n        });\n    } catch(e) {\n        console.error(e);\n    }\n}\ndef(window, \"ace\", function(){ warn(); return window.env.editor });\ndef(window, \"editor\", function(){ warn(); return window.env.editor });\ndef(window, \"session\", function(){ warn(); return window.env.editor.session });\ndef(window, \"split\", function(){ warn(); return window.env.split });\n\n\ndef(window, \"devUtil\", function(){ warn(); return exports });\nexports.showTextArea = function(argument) {\n    dom.importCssString(\"\\\n      .ace_text-input {\\\n        position: absolute;\\\n        z-index: 10!important;\\\n        width: 6em!important;\\\n        height: 1em;\\\n        opacity: 1!important;\\\n        background: rgba(0, 92, 255, 0.11);\\\n        border: none;\\\n        font: inherit;\\\n        padding: 0 1px;\\\n        margin: 0 -1px;\\\n        text-indent: 0em;\\\n    }\\\n    \");\n};\n\nexports.addGlobals = function() {\n    window.oop = require(\"ace/lib/oop\");\n    window.dom = require(\"ace/lib/dom\");\n    window.Range = require(\"ace/range\").Range;\n    window.Editor = require(\"ace/editor\").Editor;\n    window.assert = require(\"ace/test/asyncjs/assert\");\n    window.asyncjs = require(\"ace/test/asyncjs/async\");\n    window.UndoManager = require(\"ace/undomanager\").UndoManager;\n    window.EditSession = require(\"ace/edit_session\").EditSession;\n    window.MockRenderer = require(\"ace/test/mockrenderer\").MockRenderer;\n    window.EventEmitter = require(\"ace/lib/event_emitter\").EventEmitter;\n    \n    window.getSelection = getSelection;\n    window.setSelection = setSelection;\n    window.testSelection = testSelection;\n};\n\nfunction getSelection(editor) {\n    var data = editor.multiSelect.toJSON();\n    if (!data.length) data = [data];\n    data = data.map(function(x) {\n        var a, c;\n        if (x.isBackwards) {\n            a = x.end;\n            c = x.start;\n        } else {\n            c = x.end;\n            a = x.start;\n        }\n        return Range.comparePoints(a, c) \n            ? [a.row, a.column, c.row, c.column]\n            : [a.row, a.column];\n    });\n    return data.length > 1 ? data : data[0];\n}\nfunction setSelection(editor, data) {\n    if (typeof data[0] == \"number\")\n        data = [data];\n    editor.selection.fromJSON(data.map(function(x) {\n        var start = {row: x[0], column: x[1]};\n        var end = x.length == 2 ? start : {row: x[2], column: x[3]};\n        var isBackwards = Range.comparePoints(start, end) > 0;\n        return isBackwards ? {\n            start: end,\n            end: start,\n            isBackwards: true\n        } : {\n            start: start,\n            end: end,\n            isBackwards: true\n        };\n    }));\n}\nfunction testSelection(editor, data) {\n    assert.equal(getSelection(editor) + \"\", data + \"\");\n}\n\nexports.recordTestCase = function() {\n    exports.addGlobals();\n    var editor = window.editor;\n    var testcase = window.testcase = [];\n    var assert;\n\n    testcase.push({\n        type: \"setValue\",\n        data: editor.getValue()\n    }, {\n        type: \"setSelection\",\n        data: getSelection(editor)\n    });\n    editor.commands.on(\"afterExec\", function(e) {\n        testcase.push({\n            type: \"exec\",\n            data: e\n        });\n        testcase.push({\n            type: \"value\",\n            data: editor.getValue()\n        });\n        testcase.push({\n            type: \"selection\",\n            data: getSelection(editor)\n        });\n    });\n    editor.on(\"mouseup\", function() {\n        testcase.push({\n            type: \"setSelection\",\n            data: getSelection(editor)\n        });\n    });\n    \n    testcase.toString = function() {\n        var lastValue = \"\";\n        // var lastSelection = \"\"\n        var str = this.map(function(x) {\n            var data = x.data;\n            switch (x.type) {\n                case \"exec\": \n                    return 'editor.execCommand(\"' \n                        + data.command.name\n                        + (data.args ? '\", ' + JSON.stringify(data.args) : '\"')\n                    + ')';\n                case \"setSelection\":\n                    return 'setSelection(editor, ' + JSON.stringify(data)  + ')';\n                case \"setValue\":\n                    if (lastValue != data) {\n                        lastValue = data;\n                        return 'editor.setValue(' + JSON.stringify(data) + ', -1)';\n                    }\n                    return;\n                case \"selection\":\n                    return 'testSelection(editor, ' + JSON.stringify(data) + ')';\n                case \"value\":\n                    if (lastValue != data) {\n                        lastValue = data;\n                        return 'assert.equal('\n                            + 'editor.getValue(),'\n                            + JSON.stringify(data)\n                        + ')';\n                    }\n                    return;\n            }\n        }).filter(Boolean).join(\"\\n\");\n        \n        return getSelection + \"\\n\"\n            + testSelection + \"\\n\"\n            + setSelection + \"\\n\"\n            + \"\\n\" + str + \"\\n\";\n    };\n};\n\n\n});\n"
  },
  {
    "path": "demo/kitchen-sink/doclist.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n define(function(require, exports, module) {\n\"use strict\";\n\nvar EditSession = require(\"ace/edit_session\").EditSession;\nvar UndoManager = require(\"ace/undomanager\").UndoManager;\nvar net = require(\"ace/lib/net\");\n\nvar modelist = require(\"ace/ext/modelist\");\n/*********** demo documents ***************************/\nvar fileCache = {};\n\nfunction initDoc(file, path, doc) {\n    if (doc.prepare)\n        file = doc.prepare(file);\n\n    var session = new EditSession(file);\n    session.setUndoManager(new UndoManager());\n    doc.session = session;\n    doc.path = path;\n    session.name = doc.name;\n    if (doc.wrapped) {\n        session.setUseWrapMode(true);\n        session.setWrapLimitRange(80, 80);\n    }\n    var mode = modelist.getModeForPath(path);\n    session.modeName = mode.name;\n    session.setMode(mode.mode);\n    return session;\n}\n\n\nfunction makeHuge(txt) {\n    for (var i = 0; i < 5; i++)\n        txt += txt;\n    return txt;\n}\n\nvar docs = {\n    \"docs/javascript.js\": {order: 1, name: \"JavaScript\"},\n\n    \"docs/latex.tex\": {name: \"LaTeX\", wrapped: true},\n    \"docs/markdown.md\": {name: \"Markdown\", wrapped: true},\n    \"docs/mushcode.mc\": {name: \"MUSHCode\", wrapped: true},\n    \"docs/pgsql.pgsql\": {name: \"pgSQL\", wrapped: true},\n    \"docs/plaintext.txt\": {name: \"Plain Text\", prepare: makeHuge, wrapped: true},\n    \"docs/sql.sql\": {name: \"SQL\", wrapped: true},\n\n    \"docs/textile.textile\": {name: \"Textile\", wrapped: true},\n\n    \"docs/c9search.c9search_results\": \"C9 Search Results\",\n    \"docs/mel.mel\": \"MEL\",\n    \"docs/Nix.nix\": \"Nix\"\n};\n\nvar ownSource = {\n    /* filled from require*/\n};\n\nvar hugeDocs = require.toUrl ? {\n    \"build/src/ace.js\": \"\",\n    \"build/src-min/ace.js\": \"\"\n} : {\n    \"src/ace.js\": \"\",\n    \"src-min/ace.js\": \"\"\n};\n\nmodelist.modes.forEach(function(m) {\n    var ext = m.extensions.split(\"|\")[0];\n    if (ext[0] === \"^\") {\n        path = ext.substr(1);\n    } else {\n        var path = m.name + \".\" + ext;\n    }\n    path = \"docs/\" + path;\n    if (!docs[path]) {\n        docs[path] = {name: m.caption};\n    } else if (typeof docs[path] == \"object\" && !docs[path].name) {\n        docs[path].name = m.caption;\n    }\n});\n\n\n\nif (window.require && window.require.s) try {\n    for (var path in window.require.s.contexts._.defined) {\n        if (path.indexOf(\"!\") != -1)\n            path = path.split(\"!\").pop();\n        else\n            path = path + \".js\";\n        ownSource[path] = \"\";\n    }\n} catch(e) {}\n\nfunction sort(list) {\n    return list.sort(function(a, b) {\n        var cmp = (b.order || 0) - (a.order || 0);\n        return cmp || a.name && a.name.localeCompare(b.name);\n    });\n}\n\nfunction prepareDocList(docs) {\n    var list = [];\n    for (var path in docs) {\n        var doc = docs[path];\n        if (typeof doc != \"object\")\n            doc = {name: doc || path};\n\n        doc.path = path;\n        doc.desc = doc.name.replace(/^(ace|docs|demo|build)\\//, \"\");\n        if (doc.desc.length > 18)\n            doc.desc = doc.desc.slice(0, 7) + \"..\" + doc.desc.slice(-9);\n\n        fileCache[doc.name] = doc;\n        list.push(doc);\n    }\n\n    return list;\n}\n\nfunction loadDoc(name, callback) {\n    var doc = fileCache[name];\n    if (!doc)\n        return callback(null);\n\n    if (doc.session)\n        return callback(doc.session);\n\n    // TODO: show load screen while waiting\n    var path = doc.path;\n    var parts = path.split(\"/\");\n    if (parts[0] == \"docs\")\n        path = \"demo/kitchen-sink/\" + path;\n    else if (parts[0] == \"ace\")\n        path = \"lib/\" + path;\n\n    net.get(path, function(x) {\n        initDoc(x, path, doc);\n        callback(doc.session);\n    });\n}\n\nfunction saveDoc(name, callback) {\n    var doc = fileCache[name] || name;\n    if (!doc || !doc.session)\n        return callback(\"Unknown document: \" + name);\n\n    var path = doc.path;\n    var parts = path.split(\"/\");\n    if (parts[0] == \"docs\")\n        path = \"demo/kitchen-sink/\" + path;\n    else if (parts[0] == \"ace\")\n        path = \"lib/\" + path;\n\n    upload(path, doc.session.getValue(), callback);\n}\n\nfunction upload(url, data, callback) {\n    var absUrl = net.qualifyURL(url);\n    if (/^file:/.test(absUrl))\n        absUrl = \"http://localhost:8888/\" + url;\n    url = absUrl\n    if (!/^https?:/.test(url))\n        return callback(new Error(\"Unsupported url scheme\"));\n    var xhr = new XMLHttpRequest();\n    xhr.open(\"PUT\", url, true);\n    xhr.onreadystatechange = function () {\n        if (xhr.readyState === 4) {\n            callback(!/^2../.test(xhr.status));\n        }\n    };\n    xhr.send(data);\n};\n\n\nmodule.exports = {\n    fileCache: fileCache,\n    docs: sort(prepareDocList(docs)),\n    ownSource: prepareDocList(ownSource),\n    hugeDocs: prepareDocList(hugeDocs),\n    initDoc: initDoc,\n    loadDoc: loadDoc,\n    saveDoc: saveDoc\n};\nmodule.exports.all = {\n    \"Mode Examples\": module.exports.docs,\n    \"Huge documents\": module.exports.hugeDocs,\n    \"own source\": module.exports.ownSource\n};\n\n});\n\n"
  },
  {
    "path": "demo/kitchen-sink/docs/Dockerfile",
    "content": "#\n# example Dockerfile for http://docs.docker.io/en/latest/examples/postgresql_service/\n#\n\nFROM ubuntu\nMAINTAINER SvenDowideit@docker.com\n\n# Add the PostgreSQL PGP key to verify their Debian packages.\n# It should be the same key as https://www.postgresql.org/media/keys/ACCC4CF8.asc \nRUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys B97B0AFCAA1A47F044F244A07FCC7D46ACCC4CF8\n\n# Add PostgreSQL's repository. It contains the most recent stable release\n#     of PostgreSQL, ``9.3``.\nRUN echo \"deb http://apt.postgresql.org/pub/repos/apt/ precise-pgdg main\" > /etc/apt/sources.list.d/pgdg.list\n\n# Update the Ubuntu and PostgreSQL repository indexes\nRUN apt-get update\n\n# Install ``python-software-properties``, ``software-properties-common`` and PostgreSQL 9.3\n#  There are some warnings (in red) that show up during the build. You can hide\n#  them by prefixing each apt-get statement with DEBIAN_FRONTEND=noninteractive\nRUN apt-get -y -q install python-software-properties software-properties-common\nRUN apt-get -y -q install postgresql-9.3 postgresql-client-9.3 postgresql-contrib-9.3\n\n# Note: The official Debian and Ubuntu images automatically ``apt-get clean``\n# after each ``apt-get`` \n\n# Run the rest of the commands as the ``postgres`` user created by the ``postgres-9.3`` package when it was ``apt-get installed``\nUSER postgres\n\n# Create a PostgreSQL role named ``docker`` with ``docker`` as the password and\n# then create a database `docker` owned by the ``docker`` role.\n# Note: here we use ``&&\\`` to run commands one after the other - the ``\\``\n#       allows the RUN command to span multiple lines.\nRUN    /etc/init.d/postgresql start &&\\\n    psql --command \"CREATE USER docker WITH SUPERUSER PASSWORD 'docker';\" &&\\\n    createdb -O docker docker\n\n# Adjust PostgreSQL configuration so that remote connections to the\n# database are possible. \nRUN echo \"host all  all    0.0.0.0/0  md5\" >> /etc/postgresql/9.3/main/pg_hba.conf\n\n# And add ``listen_addresses`` to ``/etc/postgresql/9.3/main/postgresql.conf``\nRUN echo \"listen_addresses='*'\" >> /etc/postgresql/9.3/main/postgresql.conf\n\n# Expose the PostgreSQL port\nEXPOSE 5432\n\n# Add VOLUMEs to allow backup of config, logs and databases\nVOLUME\t[\"/etc/postgresql\", \"/var/log/postgresql\", \"/var/lib/postgresql\"]\n\n# Set the default command to run when starting the container\nCMD [\"/usr/lib/postgresql/9.3/bin/postgres\", \"-D\", \"/var/lib/postgresql/9.3/main\", \"-c\", \"config_file=/etc/postgresql/9.3/main/postgresql.conf\"]"
  },
  {
    "path": "demo/kitchen-sink/docs/Haxe.hx",
    "content": "class Haxe \n{\n    public static function main() \n    {\n        // Say Hello!\n        var greeting:String = \"Hello World\";\n        trace(greeting);\n        \n        var targets:Array<String> = [\"Flash\",\"Javascript\",\"PHP\",\"Neko\",\"C++\",\"iOS\",\"Android\",\"webOS\"];\n        trace(\"Haxe is a great language that can target:\");\n        for (target in targets)\n        {\n            trace (\" - \" + target);\n        }\n        trace(\"And many more!\");\n    }\n}"
  },
  {
    "path": "demo/kitchen-sink/docs/Jack.jack",
    "content": "vars it, p\n\np = {label, value|\n  print(\"\\n\" + label)\n  print(inspect(value))\n}\n-- Create an array from 0 to 15\np(\"range\", i-collect(range(5)))\n\n-- Create an array from 0 to 15 and break up in chunks of 4\np(\"chunked range\", i-collect(i-chunk(4, range(16))))\n\n-- Check if all or none items in stream pass test.\np(\"all < 60 in range(60)\", i-all?({i|i<60}, range(60)))\np(\"any < 60 in range(60)\", i-any?({i|i>60}, range(60)))\np(\"all < 60 in range(70)\", i-all?({i|i<60}, range(70)))\np(\"any < 60 in range(70)\", i-any?({i|i>60}, range(70)))\n\n-- Zip three different collections together\np(\"zipped\", i-collect(i-zip(\n  range(10),\n  [1,2,3,4,5],\n  i-map({i|i*i}, range(10))\n)))\n\nvars names, person, i, doubles, lengths, cubeRange\nnames = [\"Thorin\", \"Dwalin\", \"Balin\", \"Bifur\", \"Bofur\", \"Bombur\", \"Oin\",\n         \"Gloin\", \"Ori\", \"Nori\", \"Dori\", \"Fili\", \"Kili\", \"Bilbo\", \"Gandalf\"]\n\nfor name in names {\n  if name != \"Bilbo\" && name != \"Gandalf\" {\n    print(name)\n  }\n}\n\nperson = {name: \"Tim\", age: 30}\nfor key, value in person {\n  print(key + \" = \" + value)\n}\n\ni = 0\nwhile i < 10 {\n  i = i + 1\n  print(i)\n}\n\nprint(\"range\")\nfor i in range(10) {\n  print(i + 1)\n}\nfor i in range(10) {\n  print(10 - i)\n}\n\n-- Dynamic object that gives the first 10 doubles\ndoubles = {\n  @len: {| 10 }\n  @get: {key|\n    if key is Integer { key * key }\n  }\n}\nprint(\"#doubles\", #doubles)\n\nprint(\"Doubles\")\nfor k, v in doubles {\n  print([k, v])\n}\n\n-- Dynamic object that has names list as keys and string lenth as values\nlengths = {\n  @keys: {| names }\n  @get: {key|\n    if key is String { #key }\n  }\n}\n\nprint (\"Lengths\")\nfor k, v in lengths {\n  print([k, v])\n}\n\n\ncubeRange = {n|\n  vars i, v\n  i = 0\n  {\n    @call: {|\n      v = i\n      i = i + 1\n      if v < n { v * v * v }\n    }\n  }\n}\n\nprint(\"Cubes\")\nfor k, v in cubeRange(5) {\n  print([k, v])\n}\nprint(\"String\")\nfor k, v in \"Hello World\" {\n  print([k, v])\n}\n\n\nprint([i for i in range(10)])\nprint([i for i in range(20) if i % 3])\n\n\n\n-- Example showing how to do parallel work using split..and\nbase = {bootstrap, target-dir|\n  split {\n    copy(\"res\", target-dir)\n  } and {\n    if newer(\"src/*.less\", target-dir + \"/style.css\") {\n      lessc(\"src/\" + bootstrap + \".less\", target-dir + \"/style.css\")\n    }\n  } and {\n    build(\"src/\" + bootstrap + \".js\", target-dir + \"/app.js\")\n  }\n}\n\n\nvars Dragon, pet\n\nDragon = {name|\n  vars asleep, stuff-in-belly, stuff-in-intestine,\n       feed, walk, put-to-bed, toss, rock,\n       hungry?, poopy?, passage-of-time\n\n  asleep = false\n  stuff-in-belly     = 10 -- He's full.\n  stuff-in-intestine =  0 -- He doesn't need to go.\n\n  print(name + ' is born.')\n\n  feed = {|\n    print('You feed ' + name + '.')\n    stuff-in-belly = 10\n    passage-of-time()\n  }\n\n  walk = {|\n    print('You walk ' + name + \".\")\n    stuff-in-intestine = 0\n    passage-of-time\n  }\n\n  put-to-bed = {|\n    print('You put ' + name + ' to bed.')\n    asleep = true\n    for i in range(3) {\n      if asleep {\n        passage-of-time()\n      }\n      if asleep {\n        print(name + ' snores, filling the room with smoke.')\n      }\n    }\n    if asleep {\n      asleep = false\n      print(name + ' wakes up slowly.')\n    }\n  }\n\n  toss = {|\n    print('You toss ' + name + ' up into the air.')\n    print('He giggles, which singes your eyebrows.')\n    passage-of-time()\n  }\n\n  rock = {|\n    print('You rock ' + name + ' gently.')\n    asleep = true\n    print('He briefly dozes off...')\n    passage-of-time()\n    if asleep {\n      asleep = false\n      print('...but wakes when you stop.')\n    }\n  }\n\n  hungry? = {|\n    stuff-in-belly <= 2\n  }\n\n  poopy? = {|\n    stuff-in-intestine >= 8\n  }\n\n  passage-of-time = {|\n    if stuff-in-belly > 0 {\n      -- Move food from belly to intestine\n      stuff-in-belly     = stuff-in-belly     - 1\n      stuff-in-intestine = stuff-in-intestine + 1\n    } else { -- Our dragon is starving!\n      if asleep {\n        asleep = false\n        print('He wakes up suddenly!')\n      }\n      print(name + ' is starving! In desperation, he ate YOU!')\n      abort \"died\"\n    }\n\n    if stuff-in-intestine >= 10 {\n      stuff-in-intestine = 0\n      print('Whoops! ' + name + ' had an accident...')\n    }\n\n    if hungry?() {\n      if asleep {\n        asleep = false\n        print('He wakes up suddenly!')\n      }\n      print(name + \"'s stomach grumbles...\")\n    }\n\n    if poopy?() {\n      if asleep {\n        asleep = false\n        print('He wakes up suddenly!')\n      }\n      print(name + ' does the potty dance...')\n    }\n  }\n\n  -- Export the public interface to this closure object.\n  {\n   feed: feed\n   walk: walk\n   put-to-bed: put-to-bed\n   toss: toss\n   rock: rock\n  }\n\n}\n\npet = Dragon('Norbert')\npet.feed()\npet.toss()\npet.walk()\npet.put-to-bed()\npet.rock()\npet.put-to-bed()\npet.put-to-bed()\npet.put-to-bed()\npet.put-to-bed()\n"
  },
  {
    "path": "demo/kitchen-sink/docs/Makefile",
    "content": ".PHONY:    apf ext worker mode theme package test\n\ndefault: apf worker\n\nupdate: worker\n\n# packages apf\n\n# This is the first line of a comment \\\nand this is still part of the comment \\\nas is this, since I keep ending each line \\\nwith a backslash character\n\napf:\n    cd node_modules/packager; node package.js projects/apf_cloud9.apr\n\tcd node_modules/packager; cat build/apf_release.js | sed 's/\\(\\/\\*FILEHEAD(\\).*//g' > ../../plugins-client/lib.apf/www/apf-packaged/apf_release.js\n\n# package debug version of apf\napfdebug:\n\tcd node_modules/packager/projects; cat apf_cloud9.apr | sed 's/<p:define name=\\\"__DEBUG\\\" value=\\\"0\\\" \\/>/<p:define name=\\\"__DEBUG\\\" value=\\\"1\\\" \\/>/g' > apf_cloud9_debug2.apr\n\tcd node_modules/packager/projects; cat apf_cloud9_debug2.apr | sed 's/apf_release/apf_debug/g' > apf_cloud9_debug.apr; rm apf_cloud9_debug2.apr\n\tcd node_modules/packager; node package.js projects/apf_cloud9_debug.apr\n\tcd node_modules/packager; cat build/apf_debug.js | sed 's/\\(\\/\\*FILEHEAD(\\).*\\/apf\\/\\(.*\\)/\\1\\2/g' > ../../plugins-client/lib.apf/www/apf-packaged/apf_debug.js\n\n# package_apf--temporary fix for non-workering infra\npack_apf:\n\tmkdir -p build/src\n\tmv plugins-client/lib.apf/www/apf-packaged/apf_release.js build/src/apf_release.js\n\tnode build/r.js -o name=./build/src/apf_release.js out=./plugins-client/lib.apf/www/apf-packaged/apf_release.js baseUrl=.\n\n# makes ace; at the moment, requires dryice@0.4.2\nace:\n\tcd node_modules/ace; make clean pre_build; ./Makefile.dryice.js minimal\n\n\n# packages core\ncore: ace\n\tmkdir -p build/src\n\tnode build/r.js -o build/core.build.js\n\n# generates packed template\nhelper: \n\tnode build/packed_helper.js\n\nhelper_clean:\n\tmkdir -p build/src\n\tnode build/packed_helper.js 1\n\n# packages ext\next: \n\tnode build/r.js -o build/app.build.js\n\n# calls dryice on worker & packages it\nworker: plugins-client/lib.ace/www/worker/worker-language.js\n\nplugins-client/lib.ace/www/worker/worker-language.js plugins-client/lib.ace/www/worker/worker-javascript.js : \\\n        $(wildcard node_modules/ace/*) $(wildcard node_modules/ace/*/*) $(wildcard node_modules/ace/*/*/mode/*) \\\n        $(wildcard plugins-client/ext.language/*) \\\n        $(wildcard plugins-client/ext.language/*/*) \\\n        $(wildcard plugins-client/ext.linereport/*) \\\n        $(wildcard plugins-client/ext.codecomplete/*) \\\n        $(wildcard plugins-client/ext.codecomplete/*/*) \\\n        $(wildcard plugins-client/ext.jslanguage/*) \\\n        $(wildcard plugins-client/ext.jslanguage/*/*) \\\n        $(wildcard plugins-client/ext.csslanguage/*) \\\n        $(wildcard plugins-client/ext.csslanguage/*/*) \\\n        $(wildcard plugins-client/ext.htmllanguage/*) \\\n        $(wildcard plugins-client/ext.htmllanguage/*/*) \\\n        $(wildcard plugins-client/ext.jsinfer/*) \\\n        $(wildcard plugins-client/ext.jsinfer/*/*) \\\n        $(wildcard node_modules/treehugger/lib/*) \\\n        $(wildcard node_modules/treehugger/lib/*/*) \\\n        $(wildcard node_modules/ace/lib/*) \\\n        $(wildcard node_modules/ace/*/*) \\\n        Makefile.dryice.js\n\tmkdir -p plugins-client/lib.ace/www/worker\n\trm -rf /tmp/c9_worker_build\n\tmkdir -p /tmp/c9_worker_build/ext\n\tln -s `pwd`/plugins-client/ext.language /tmp/c9_worker_build/ext/language\n\tln -s `pwd`/plugins-client/ext.codecomplete /tmp/c9_worker_build/ext/codecomplete\n\tln -s `pwd`/plugins-client/ext.jslanguage /tmp/c9_worker_build/ext/jslanguage\n\tln -s `pwd`/plugins-client/ext.csslanguage /tmp/c9_worker_build/ext/csslanguage\n\tln -s `pwd`/plugins-client/ext.htmllanguage /tmp/c9_worker_build/ext/htmllanguage\n\tln -s `pwd`/plugins-client/ext.linereport /tmp/c9_worker_build/ext/linereport\n\tln -s `pwd`/plugins-client/ext.linereport_php /tmp/c9_worker_build/ext/linereport_php\n\tnode Makefile.dryice.js worker\n\tcp node_modules/ace/build/src/worker* plugins-client/lib.ace/www/worker\n\ndefine \n\nifeq\n\noverride\n\n# copies built ace modes\nmode:\n\tmkdir -p plugins-client/lib.ace/www/mode\n\tcp `find node_modules/ace/build/src | grep -E \"mode-[a-zA-Z_0-9]+.js\"`  plugins-client/lib.ace/www/mode\n\n# copies built ace themes\ntheme:\n\tmkdir -p plugins-client/lib.ace/www/theme\n\tcp `find node_modules/ace/build/src | grep -E \"theme-[a-zA-Z_0-9]+.js\"` plugins-client/lib.ace/www/theme\n\ngzip_safe:\n\tfor i in `ls ./plugins-client/lib.packed/www/*.js`; do \\\n\t\tgzip -9 -v -c -q -f $$i > $$i.gz ; \\\n\tdone\n\ngzip:\n\tfor i in `ls ./plugins-client/lib.packed/www/*.js`; do \\\n\t\tgzip -9 -v -q -f $$i ; \\\n\tdone\n\nc9core: apf ace core worker mode theme\n    \npackage_clean: helper_clean c9core ext\n\npackage: helper c9core ext\n\ntest check:\n\ttest/run-tests.sh\t"
  },
  {
    "path": "demo/kitchen-sink/docs/Nix.nix",
    "content": "{\n  # Name of our deployment\n  network.description = \"HelloWorld\";\n  # Enable rolling back to previous versions of our infrastructure\n  network.enableRollback = true;\n\n  # It consists of a single server named 'helloserver'\n  helloserver =\n    # Every server gets passed a few arguments, including a reference\n    # to nixpkgs (pkgs)\n    { config, pkgs, ... }:\n    let\n      # We import our custom packages from ./default passing pkgs as argument\n      packages = import ./default.nix { pkgs = pkgs; };\n      # This is the nodejs version specified in default.nix\n      nodejs   = packages.nodejs;\n      # And this is the application we'd like to deploy\n      app      = packages.app;\n    in\n    {\n      # We'll be running our application on port 8080, because a regular\n      # user cannot bind to port 80\n      # Then, using some iptables magic we'll forward traffic designated to port 80 to 8080\n      networking.firewall.enable = true;\n      # We will open up port 22 (SSH) as well otherwise we're locking ourselves out\n      networking.firewall.allowedTCPPorts = [ 80 8080 22 ];\n      networking.firewall.allowPing = true;\n\n      # Port forwarding using iptables\n      networking.firewall.extraCommands = ''\n        iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080\n      '';\n\n      # To run our node.js program we're going to use a systemd service\n      # We can configure the service to automatically start on boot and to restart\n      # the process in case it crashes\n      systemd.services.helloserver = {\n        description = \"Hello world application\";\n        # Start the service after the network is available\n        after = [ \"network.target\" ];\n        # We're going to run it on port 8080 in production\n        environment = { PORT = \"8080\"; };\n        serviceConfig = {\n          # The actual command to run\n          ExecStart = \"${nodejs}/bin/node ${app}/server.js\";\n          # For security reasons we'll run this process as a special 'nodejs' user\n          User = \"nodejs\";\n          Restart = \"always\";\n        };\n      };\n\n      # And lastly we ensure the user we run our application as is created\n      users.extraUsers = {\n        nodejs = { };\n      };\n    };\n}"
  },
  {
    "path": "demo/kitchen-sink/docs/abap.abap",
    "content": "***************************************\n** Program: EXAMPLE                  **\n** Author: Joe Byte, 07-Jul-2007     **\n***************************************\n \nREPORT BOOKINGS.\n \n* Read flight bookings from the database\nSELECT * FROM FLIGHTINFO\n  WHERE CLASS = 'Y'       \"Y = economy\n  OR    CLASS = 'C'.      \"C = business\n(...)\n\nREPORT TEST.\nWRITE 'Hello World'.\n\nUSERPROMPT = 'Please double-click on a line in the output list ' &\n             'to see the complete details of the transaction.'.\n\n\nDATA LAST_EOM    TYPE D.  \"last end-of-month date\n \n* Start from today's date\n  LAST_EOM = SY-DATUM.\n* Set characters 6 and 7 (0-relative) of the YYYYMMDD string to \"01\",\n* giving the first day of the current month\n  LAST_EOM+6(2) = '01'.\n* Subtract one day\n  LAST_EOM = LAST_EOM - 1.\n \n  WRITE: 'Last day of previous month was', LAST_EOM.\n  \nDATA : BEGIN OF I_VBRK OCCURS 0,\n         VBELN LIKE VBRK-VBELN,\n         ZUONR LIKE VBRK-ZUONR,\n       END OF I_VBRK.\n\nSORT i_vbrk BY vbeln ASCENDING.\nSORT i_vbrk BY vbeln DESCENDING.\n\nRETURN."
  },
  {
    "path": "demo/kitchen-sink/docs/abc.abc",
    "content": "%abc-2.1\r\nH:This file contains some example English tunes\r\n% note that the comments (like this one) are to highlight usages\r\n%  and would not normally be included in such detail\r\nO:England             % the origin of all tunes is England\r\n\r\nX:1                   % tune no 1\r\nT:Dusty Miller, The   % title\r\nT:Binny's Jig         % an alternative title\r\nC:Trad.               % traditional\r\nR:DH                  % double hornpipe\r\nM:3/4                 % meter\r\nK:G                   % key\r\nB>cd BAG|FA Ac BA|B>cd BAG|DG GB AG:|\r\nBdd gfg|aA Ac BA|Bdd gfa|gG GB AG:|\r\nBG G/2G/2G BG|FA Ac BA|BG G/2G/2G BG|DG GB AG:|\r\nW:Hey, the dusty miller, and his dusty coat;\r\nW:He will win a shilling, or he spend a groat.\r\nW:Dusty was the coat, dusty was the colour;\r\nW:Dusty was the kiss, that I got frae the miller.\r\n\r\nX:2\r\nT:Old Sir Simon the King\r\nC:Trad.\r\nS:Offord MSS          % from Offord manuscript\r\nN:see also Playford   % reference note\r\nM:9/8\r\nR:SJ                  % slip jig\r\nN:originally in C     % transcription note\r\nK:G\r\nD|GFG GAG G2D|GFG GAG F2D|EFE EFE EFG|A2G F2E D2:|\r\nD|GAG GAB d2D|GAG GAB c2D|[1 EFE EFE EFG|[A2G] F2E D2:|\\ % no line-break in score\r\nM:12/8                % change of meter\r\n[2 E2E EFE E2E EFG|\\  % no line-break in score\r\nM:9/8                 % change of meter\r\nA2G F2E D2|]\r\n\r\nX:3\r\nT:William and Nancy\r\nT:New Mown Hay\r\nT:Legacy, The\r\nC:Trad.\r\nO:England; Gloucs; Bledington % place of origin\r\nB:Sussex Tune Book            % can be found in these books\r\nB:Mally's Cotswold Morris vol.1 2\r\nD:Morris On                   % can be heard on this record\r\nP:(AB)2(AC)2A                 % play the parts in this order\r\nM:6/8\r\nK:G                        \r\n[P:A] D|\"G\"G2G GBd|\"C\"e2e \"G\"dBG|\"D7\"A2d \"G\"BAG|\"C\"E2\"D7\"F \"G\"G2:|\r\n[P:B] d|\"G\"e2d B2d|\"C\"gfe \"G\"d2d| \"G\"e2d    B2d|\"C\"gfe    \"D7\"d2c|\r\n        \"G\"B2B Bcd|\"C\"e2e \"G\"dBG|\"D7\"A2d \"G\"BAG|\"C\"E2\"D7\"F \"G\"G2:|\r\n% changes of meter, using inline fields\r\n[T:Slows][M:4/4][L:1/4][P:C]\"G\"d2|\"C\"e2 \"G\"d2|B2 d2|\"Em\"gf \"A7\"e2|\"D7\"d2 \"G\"d2|\\\r\n       \"C\"e2 \"G\"d2|[M:3/8][L:1/8] \"G\"B2 d |[M:6/8] \"C\"gfe \"D7\"d2c|\r\n        \"G\"B2B Bcd|\"C\"e2e \"G\"dBG|\"D7\"A2d \"G\"BAG|\"C\"E2\"D7\"F \"G\"G2:|\r\n\r\nX:4\r\nT:South Downs Jig\r\nR:jig\r\nS:Robert Harbron\r\nM:6/8\r\nL:1/8\r\nK:G\r\n|: d | dcA G3 | EFG AFE | DEF GAB | cde d2d |\r\ndcA G3 | EFG AFE | DEF GAB | cAF G2 :|\r\nB | Bcd e2c | d2B c2A | Bcd e2c | [M:9/8]d2B c2B A3 |\r\n[M:6/8]DGF E3 | cBA FED | DEF GAB |1 cAF G2 :|2 cAF G3 |]\r\n\r\nX:5\r\nT:Atholl Brose\r\n% in this example, which reproduces Highland Bagpipe gracing,\r\n%  the large number of grace notes mean that it is more convenient to be specific about\r\n%  score line-breaks (using the $ symbol), rather than using code line breaks to indicate them\r\nI:linebreak $\r\nK:D\r\n{gcd}c<{e}A {gAGAG}A2 {gef}e>A {gAGAG}Ad|\r\n{gcd}c<{e}A {gAGAG}A>e {ag}a>f {gef}e>d|\r\n{gcd}c<{e}A {gAGAG}A2 {gef}e>A {gAGAG}Ad|\r\n{g}c/d/e {g}G>{d}B {gf}gG {dc}d>B:|$\r\n{g}c<e {gf}g>e {ag}a>e {gf}g>e|\r\n{g}c<e {gf}g>e {ag}a2 {GdG}a>d|\r\n{g}c<e {gf}g>e {ag}a>e {gf}g>f|\r\n{gef}e>d {gf}g>d {gBd}B<{e}G {dc}d>B|\r\n{g}c<e {gf}g>e {ag}a>e {gf}g>e|\r\n{g}c<e {gf}g>e {ag}a2 {GdG}ad|\r\n{g}c<{GdG}e {gf}ga {f}g>e {g}f>d|\r\n{g}e/f/g {Gdc}d>c {gBd}B<{e}G {dc}d2|]\r\n\r\nX:6\r\nT:Untitled Reel\r\nC:Trad.\r\nK:D\r\neg|a2ab ageg|agbg agef|g2g2 fgag|f2d2 d2:|\\\r\ned|cecA B2ed|cAcA E2ed|cecA B2ed|c2A2 A2:|\r\nK:G\r\nAB|cdec BcdB|ABAF GFE2|cdec BcdB|c2A2 A2:|\r\n\r\nX:7\r\nT:Kitchen Girl\r\nC:Trad.\r\nK:D\r\n[c4a4] [B4g4]|efed c2cd|e2f2 gaba|g2e2 e2fg|\r\na4 g4|efed cdef|g2d2 efed|c2A2 A4:|\r\nK:G\r\nABcA BAGB|ABAG EDEG|A2AB c2d2|e3f edcB|ABcA BAGB|\r\nABAG EGAB|cBAc BAG2|A4 A4:|\r\n\r\n%abc-2.1\r\n%%pagewidth      21cm\r\n%%pageheight     29.7cm\r\n%%topspace       0.5cm\r\n%%topmargin      1cm\r\n%%botmargin      0cm\r\n%%leftmargin     1cm\r\n%%rightmargin    1cm\r\n%%titlespace     0cm\r\n%%titlefont      Times-Bold 32\r\n%%subtitlefont   Times-Bold 24\r\n%%composerfont   Times 16\r\n%%vocalfont      Times-Roman 14\r\n%%staffsep       60pt\r\n%%sysstaffsep    20pt\r\n%%musicspace     1cm\r\n%%vocalspace     5pt\r\n%%measurenb      0\r\n%%barsperstaff   5\r\n%%scale          0.7\r\nX: 1\r\nT: Canzonetta a tre voci\r\nC: Claudio Monteverdi (1567-1643)\r\nM: C\r\nL: 1/4\r\nQ: \"Andante mosso\" 1/4 = 110\r\n%%score [1 2 3]\r\nV: 1 clef=treble name=\"Soprano\"sname=\"A\"\r\nV: 2 clef=treble name=\"Alto\"   sname=\"T\"\r\nV: 3 clef=bass middle=d name=\"Tenor\"  sname=\"B\"\r\n%%MIDI program 1 75 % recorder\r\n%%MIDI program 2 75\r\n%%MIDI program 3 75\r\nK: Eb\r\n% 1 - 4\r\n[V: 1] |:z4  |z4  |f2ec         |_ddcc        |\r\nw: Son que-sti~i cre-spi cri-ni~e\r\nw: Que-sti son gli~oc-chi che mi-\r\n[V: 2] |:c2BG|AAGc|(F/G/A/B/)c=A|B2AA         |\r\nw: Son que-sti~i cre-spi cri-ni~e que - - - - sto~il vi-so e\r\nw: Que-sti son~gli oc-chi che mi-ran - - - - do fi-so mi-\r\n[V: 3] |:z4  |f2ec|_ddcf        |(B/c/_d/e/)ff|\r\nw: Son que-sti~i cre-spi cri-ni~e que - - - - sto~il\r\nw: Que-sti son~gli oc-chi che mi-ran - - - - do\r\n% 5 - 9\r\n[V: 1] cAB2     |cAAA |c3B|G2!fermata!Gz ::e4|\r\nw: que-sto~il vi-so ond' io ri-man-go~uc-ci-so. Deh,\r\nw: ran-do fi-so, tut-to re-stai con-qui-so.\r\n[V: 2] AAG2     |AFFF |A3F|=E2!fermata!Ez::c4|\r\nw: que-sto~il vi-so ond' io ri-man-go~uc-ci-so. Deh,\r\nw: ran-do fi-so tut-to re-stai con-qui-so.\r\n[V: 3] (ag/f/e2)|A_ddd|A3B|c2!fermata!cz ::A4|\r\nw: vi - - - so ond' io ti-man-go~uc-ci-so. Deh,\r\nw: fi - - - so tut-to re-stai con-qui-so.\r\n% 10 - 15\r\n[V: 1] f_dec |B2c2|zAGF  |\\\r\nw: dim-me-lo ben mi-o, che que-sto\\\r\n=EFG2          |1F2z2:|2F8|] % more notes\r\nw: sol de-si-o_. % more lyrics\r\n[V: 2] ABGA  |G2AA|GF=EF |(GF3/2=E//D//E)|1F2z2:|2F8|]\r\nw: dim-me-lo ben mi-o, che que-sto sol de-si - - - - o_.\r\n[V: 3] _dBc>d|e2AF|=EFc_d|c4             |1F2z2:|2F8|]\r\nw: dim-me-lo ben mi-o, che que-sto sol de-si-o_."
  },
  {
    "path": "demo/kitchen-sink/docs/actionscript.as",
    "content": "package code\n{\n    /*****************************************\n\t * based on textmate actionscript bundle\n\t ****************************************/\n\t \n\timport fl.events.SliderEvent;\n\t\n\tpublic class Foo extends MovieClip\n\t{\n\t\t//*************************\n\t\t// Properties:\n\t\t\n\t\tpublic var activeSwatch:MovieClip;\n\t\t\n\t\t// Color offsets\n\t\tpublic var c1:Number = 0;\t// R\n\t\t\n\t\t//*************************\n\t\t// Constructor:\n\t\t\n\t\tpublic function Foo()\n\t\t{\n\t\t\t// Respond to mouse events\n\t\t\tswatch1_btn.addEventListener(MouseEvent.CLICK,swatchHandler,false,0,false);\n\t\t\tpreviewBox_btn.addEventListener(MouseEvent.MOUSE_DOWN,dragPressHandler);\n\t\t\t\n\t\t\t// Respond to drag events\n\t\t\tred_slider.addEventListener(SliderEvent.THUMB_DRAG,sliderHandler);\n\t\t\t\n\t\t\t// Draw a frame later\n\t\t\taddEventListener(Event.ENTER_FRAME,draw);\n\t\t}\n        \n\t\tprotected function clickHandler(event:MouseEvent):void\n\t\t{\n\t\t\tcar.transform.colorTransform = new ColorTransform(0,0,0,1,c1,c2,c3);\n\t\t}\n\t\t\n\t\tprotected function changeRGBHandler(event:Event):void\n\t\t{\n\t\t\tc1 = Number(c1_txt.text);\n            \n\t\t\tif(!(c1>=0)){\n\t\t\t\tc1 = 0;\n\t\t\t}\t\t\t\n\t\t\t\n\t\t\tupdateSliders();\n\t\t}\n\t}\n}"
  },
  {
    "path": "demo/kitchen-sink/docs/ada.ada",
    "content": "with Ada.Text_IO; use Ada.Text_IO;\nprocedure Hello is\nbegin\n  Put_Line(\"Hello, world!\");\nend Hello;"
  },
  {
    "path": "demo/kitchen-sink/docs/asciidoc.asciidoc",
    "content": "AsciiDoc User Guide\n===================\nStuart Rackham <srackham@gmail.com>\n:Author Initials: SJR\n:toc:\n:icons:\n:numbered:\n:website: http://www.methods.co.nz/asciidoc/\n\nAsciiDoc is a text document format for writing notes, documentation,\narticles, books, ebooks, slideshows, web pages, blogs and UNIX man\npages.  AsciiDoc files can be translated to many formats including\nHTML, PDF, EPUB, man page.  AsciiDoc is highly configurable: both the\nAsciiDoc source file syntax and the backend output markups (which can\nbe almost any type of SGML/XML markup) can be customized and extended\nby the user.\n\n.This document\n**********************************************************************\nThis is an overly large document, it probably needs to be refactored\ninto a Tutorial, Quick Reference and Formal Reference.\n\nIf you're new to AsciiDoc read this section and the <<X6,Getting\nStarted>> section and take a look at the example AsciiDoc (`*.txt`)\nsource files in the distribution `doc` directory.\n**********************************************************************\n\n\nIntroduction\n------------\nAsciiDoc is a plain text human readable/writable document format that\ncan be translated to DocBook or HTML using the asciidoc(1) command.\nYou can then either use asciidoc(1) generated HTML directly or run\nasciidoc(1) DocBook output through your favorite DocBook toolchain or\nuse the AsciiDoc a2x(1) toolchain wrapper to produce PDF, EPUB, DVI,\nLaTeX, PostScript, man page, HTML and text formats.\n\nThe AsciiDoc format is a useful presentation format in its own right:\nAsciiDoc markup is simple, intuitive and as such is easily proofed and\nedited.\n\nAsciiDoc is light weight: it consists of a single Python script and a\nbunch of configuration files. Apart from asciidoc(1) and a Python\ninterpreter, no other programs are required to convert AsciiDoc text\nfiles to DocBook or HTML. See <<X11,Example AsciiDoc Documents>>\nbelow.\n\nText markup conventions tend to be a matter of (often strong) personal\npreference: if the default syntax is not to your liking you can define\nyour own by editing the text based asciidoc(1) configuration files.\nYou can also create configuration files to translate AsciiDoc\ndocuments to almost any SGML/XML markup.\n\nasciidoc(1) comes with a set of configuration files to translate\nAsciiDoc articles, books and man pages to HTML or DocBook backend\nformats.\n\n.My AsciiDoc Itch\n**********************************************************************\nDocBook has emerged as the de facto standard Open Source documentation\nformat. But DocBook is a complex language, the markup is difficult to\nread and even more difficult to write directly -- I found I was\nspending more time typing markup tags, consulting reference manuals\nand fixing syntax errors, than I was writing the documentation.\n**********************************************************************\n\n\n[[X6]]\nGetting Started\n---------------\nInstalling AsciiDoc\n~~~~~~~~~~~~~~~~~~~\nSee the `README` and `INSTALL` files for install prerequisites and\nprocedures. Packagers take a look at <<X38,Packager Notes>>.\n\n[[X11]]\nExample AsciiDoc Documents\n~~~~~~~~~~~~~~~~~~~~~~~~~~\nThe best way to quickly get a feel for AsciiDoc is to view the\nAsciiDoc web site and/or distributed examples:\n\n- Take a look at the linked examples on the AsciiDoc web site home\n  page {website}.  Press the 'Page Source' sidebar menu item to view\n  corresponding AsciiDoc source.\n- Read the `*.txt` source files in the distribution `./doc` directory\n  along with the corresponding HTML and DocBook XML files.\n\n\nAsciiDoc Document Types\n-----------------------\nThere are three types of AsciiDoc documents: article, book and\nmanpage. All document types share the same AsciiDoc format with some\nminor variations. If you are familiar with DocBook you will have\nnoticed that AsciiDoc document types correspond to the same-named\nDocBook document types.\n\nUse the asciidoc(1) `-d` (`--doctype`) option to specify the AsciiDoc\ndocument type -- the default document type is 'article'.\n\nBy convention the `.txt` file extension is used for AsciiDoc document\nsource files.\n\narticle\n~~~~~~~\nUsed for short documents, articles and general documentation.  See the\nAsciiDoc distribution `./doc/article.txt` example.\n\nAsciiDoc defines standard DocBook article frontmatter and backmatter\n<<X93,section markup templates>> (appendix, abstract, bibliography,\nglossary, index).\n\nbook\n~~~~\nBooks share the same format as articles, with the following\ndifferences:\n\n- The part titles in multi-part books are <<X17,top level titles>>\n  (same level as book title).\n- Some sections are book specific e.g. preface and colophon.\n\nBook documents will normally be used to produce DocBook output since\nDocBook processors can automatically generate footnotes, table of\ncontents, list of tables, list of figures, list of examples and\nindexes.\n\nAsciiDoc defines standard DocBook book frontmatter and backmatter\n<<X93,section markup templates>> (appendix, dedication, preface,\nbibliography, glossary, index, colophon).\n\n.Example book documents\nBook::\n  The `./doc/book.txt` file in the AsciiDoc distribution.\n\nMulti-part book::\n  The `./doc/book-multi.txt` file in the AsciiDoc distribution.\n\nmanpage\n~~~~~~~\nUsed to generate roff format UNIX manual pages.  AsciiDoc manpage\ndocuments observe special header title and section naming conventions\n-- see the <<X1,Manpage Documents>> section for details.\n\nAsciiDoc defines the 'synopsis' <<X93,section markup template>> to\ngenerate the DocBook `refsynopsisdiv` section.\n\nSee also the asciidoc(1) man page source (`./doc/asciidoc.1.txt`) from\nthe AsciiDoc distribution.\n\n\n[[X5]]\nAsciiDoc Backends\n-----------------\nThe asciidoc(1) command translates an AsciiDoc formatted file to the\nbackend format specified by the `-b` (`--backend`) command-line\noption. asciidoc(1) itself has little intrinsic knowledge of backend\nformats, all translation rules are contained in customizable cascading\nconfiguration files. Backend specific attributes are listed in the\n<<X88,Backend Attributes>> section.\n\ndocbook45::\n  Outputs DocBook XML 4.5 markup.\n\nhtml4::\n  This backend generates plain HTML 4.01 Transitional markup.\n\nxhtml11::\n  This backend generates XHTML 1.1 markup styled with CSS2. Output\n  files have an `.html` extension.\n\nhtml5::\n  This backend generates HTML 5 markup, apart from the inclusion of\n  <<X98,audio and video block macros>> it is functionally identical to\n  the 'xhtml11' backend.\n\nslidy::\n  Use this backend to generate self-contained\n  http://www.w3.org/Talks/Tools/Slidy2/[Slidy] HTML slideshows for\n  your web browser from AsciiDoc documents. The Slidy backend is\n  documented in the distribution `doc/slidy.txt` file and\n  {website}slidy.html[online].\n\nwordpress::\n  A minor variant of the 'html4' backend to support\n  http://srackham.wordpress.com/blogpost1/[blogpost].\n\nlatex::\n  Experimental LaTeX backend.\n\nBackend Aliases\n~~~~~~~~~~~~~~~\nBackend aliases are alternative names for AsciiDoc backends.  AsciiDoc\ncomes with two backend aliases: 'html' (aliased to 'xhtml11') and\n'docbook' (aliased to 'docbook45').\n\nYou can assign (or reassign) backend aliases by setting an AsciiDoc\nattribute named like `backend-alias-<alias>` to an AsciiDoc backend\nname. For example, the following backend alias attribute definitions\nappear in the `[attributes]` section of the global `asciidoc.conf`\nconfiguration file:\n\n  backend-alias-html=xhtml11\n  backend-alias-docbook=docbook45\n\n[[X100]]\nBackend Plugins\n~~~~~~~~~~~~~~~\nThe asciidoc(1) `--backend` option is also used to install and manage\nbackend <<X101,plugins>>.\n\n- A backend plugin is used just like the built-in backends.\n- Backend plugins <<X27,take precedence>> over built-in backends with\n  the same name.\n- You can use the `{asciidoc-confdir}` <<X60, intrinsic attribute>> to\n  refer to the built-in backend configuration file location from\n  backend plugin configuration files.\n- You can use the `{backend-confdir}` <<X60, intrinsic attribute>> to\n  refer to the backend plugin configuration file location.\n- By default backends plugins are installed in\n  `$HOME/.asciidoc/backends/<backend>` where `<backend>` is the\n  backend name.\n\n\nDocBook\n-------\nAsciiDoc generates 'article', 'book' and 'refentry'\nhttp://www.docbook.org/[DocBook] documents (corresponding to the\nAsciiDoc 'article', 'book' and 'manpage' document types).\n\nMost Linux distributions come with conversion tools (collectively\ncalled a toolchain) for <<X12,converting DocBook files>> to\npresentation formats such as Postscript, HTML, PDF, EPUB, DVI,\nPostScript, LaTeX, roff (the native man page format), HTMLHelp,\nJavaHelp and text.  There are also programs that allow you to view\nDocBook files directly, for example http://live.gnome.org/Yelp[Yelp]\n(the GNOME help viewer).\n\n[[X12]]\nConverting DocBook to other file formats\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nDocBook files are validated, parsed and translated various\npresentation file formats using a combination of applications\ncollectively called a DocBook 'tool chain'. The function of a tool\nchain is to read the DocBook markup (produced by AsciiDoc) and\ntransform it to a presentation format (for example HTML, PDF, HTML\nHelp, EPUB, DVI, PostScript, LaTeX).\n\nA wide range of user output format requirements coupled with a choice\nof available tools and stylesheets results in many valid tool chain\ncombinations.\n\n[[X43]]\na2x Toolchain Wrapper\n~~~~~~~~~~~~~~~~~~~~~\nOne of the biggest hurdles for new users is installing, configuring\nand using a DocBook XML toolchain. `a2x(1)` can help -- it's a\ntoolchain wrapper command that will generate XHTML (chunked and\nunchunked), PDF, EPUB, DVI, PS, LaTeX, man page, HTML Help and text\nfile outputs from an AsciiDoc text file.  `a2x(1)` does all the grunt\nwork associated with generating and sequencing the toolchain commands\nand managing intermediate and output files.  `a2x(1)` also optionally\ndeploys admonition and navigation icons and a CSS stylesheet. See the\n`a2x(1)` man page for more details. In addition to `asciidoc(1)` you\nalso need <<X40,xsltproc(1)>>, <<X13,DocBook XSL Stylesheets>> and\noptionally: <<X31,dblatex>> or <<X14,FOP>> (to generate PDF);\n`w3m(1)` or `lynx(1)` (to generate text).\n\nThe following examples generate `doc/source-highlight-filter.pdf` from\nthe AsciiDoc `doc/source-highlight-filter.txt` source file. The first\nexample uses `dblatex(1)` (the default PDF generator) the second\nexample forces FOP to be used:\n\n  $ a2x -f pdf doc/source-highlight-filter.txt\n  $ a2x -f pdf --fop doc/source-highlight-filter.txt\n\nSee the `a2x(1)` man page for details.\n\nTIP: Use the `--verbose` command-line option to view executed\ntoolchain commands.\n\nHTML generation\n~~~~~~~~~~~~~~~\nAsciiDoc produces nicely styled HTML directly without requiring a\nDocBook toolchain but there are also advantages in going the DocBook\nroute:\n\n- HTML from DocBook can optionally include automatically generated\n  indexes, tables of contents, footnotes, lists of figures and tables.\n- DocBook toolchains can also (optionally) generate separate (chunked)\n  linked HTML pages for each document section.\n- Toolchain processing performs link and document validity checks.\n- If the DocBook 'lang' attribute is set then things like table of\n  contents, figure and table captions and admonition captions will be\n  output in the specified language (setting the AsciiDoc 'lang'\n  attribute sets the DocBook 'lang' attribute).\n\nOn the other hand, HTML output directly from AsciiDoc is much faster,\nis easily customized and can be used in situations where there is no\nsuitable DocBook toolchain (for example, see the {website}[AsciiDoc\nwebsite]).\n\nPDF generation\n~~~~~~~~~~~~~~\nThere are two commonly used tools to generate PDFs from DocBook,\n<<X31,dblatex>> and <<X14,FOP>>.\n\n.dblatex or FOP?\n- 'dblatex' is easier to install, there's zero configuration\n  required and no Java VM to install -- it just works out of the box.\n- 'dblatex' source code highlighting and numbering is superb.\n- 'dblatex' is easier to use as it converts DocBook directly to PDF\n  whereas before using 'FOP' you have to convert DocBook to XML-FO\n  using <<X13,DocBook XSL Stylesheets>>.\n- 'FOP' is more feature complete (for example, callouts are processed\n  inside literal layouts) and arguably produces nicer looking output.\n\nHTML Help generation\n~~~~~~~~~~~~~~~~~~~~\n. Convert DocBook XML documents to HTML Help compiler source files\n  using <<X13,DocBook XSL Stylesheets>> and <<X40,xsltproc(1)>>.\n. Convert the HTML Help source (`.hhp` and `.html`) files to HTML Help\n  (`.chm`) files using the <<X67,Microsoft HTML Help Compiler>>.\n\nToolchain components summary\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nAsciiDoc::\n    Converts AsciiDoc (`.txt`) files to DocBook XML (`.xml`) files.\n\n[[X13]]http://docbook.sourceforge.net/projects/xsl/[DocBook XSL Stylesheets]::\n  These are a set of XSL stylesheets containing rules for converting\n  DocBook XML documents to HTML, XSL-FO, manpage and HTML Help files.\n  The stylesheets are used in conjunction with an XML parser such as\n  <<X40,xsltproc(1)>>.\n\n[[X40]]http://www.xmlsoft.org[xsltproc]::\n  An XML parser for applying XSLT stylesheets (in our case the\n  <<X13,DocBook XSL Stylesheets>>) to XML documents.\n\n[[X31]]http://dblatex.sourceforge.net/[dblatex]::\n  Generates PDF, DVI, PostScript and LaTeX formats directly from\n  DocBook source via the intermediate LaTeX typesetting language --\n  uses <<X13,DocBook XSL Stylesheets>>, <<X40,xsltproc(1)>> and\n  `latex(1)`.\n\n[[X14]]http://xml.apache.org/fop/[FOP]::\n  The Apache Formatting Objects Processor converts XSL-FO (`.fo`)\n  files to PDF files.  The XSL-FO files are generated from DocBook\n  source files using <<X13,DocBook XSL Stylesheets>> and\n  <<X40,xsltproc(1)>>.\n\n[[X67]]Microsoft Help Compiler::\n  The Microsoft HTML Help Compiler (`hhc.exe`) is a command-line tool\n  that converts HTML Help source files to a single HTML Help (`.chm`)\n  file. It runs on MS Windows platforms and can be downloaded from\n  http://www.microsoft.com.\n\nAsciiDoc dblatex configuration files\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nThe AsciiDoc distribution `./dblatex` directory contains\n`asciidoc-dblatex.xsl` (customized XSL parameter settings) and\n`asciidoc-dblatex.sty` (customized LaTeX settings). These are examples\nof optional <<X31,dblatex>> output customization and are used by\n<<X43,a2x(1)>>.\n\nAsciiDoc DocBook XSL Stylesheets drivers\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nYou will have noticed that the distributed HTML and HTML Help\ndocumentation files (for example `./doc/asciidoc.html`) are not the\nplain outputs produced using the default 'DocBook XSL Stylesheets'\nconfiguration.  This is because they have been processed using\ncustomized DocBook XSL Stylesheets along with (in the case of HTML\noutputs) the custom `./stylesheets/docbook-xsl.css` CSS stylesheet.\n\nYou'll find the customized DocBook XSL drivers along with additional\ndocumentation in the distribution `./docbook-xsl` directory. The\nexamples that follow are executed from the distribution documentation\n(`./doc`) directory. These drivers are also used by <<X43,a2x(1)>>.\n\n`common.xsl`::\n    Shared driver parameters.  This file is not used directly but is\n    included in all the following drivers.\n\n`chunked.xsl`::\n    Generate chunked XHTML (separate HTML pages for each document\n    section) in the `./doc/chunked` directory. For example:\n\n    $ python ../asciidoc.py -b docbook asciidoc.txt\n    $ xsltproc --nonet ../docbook-xsl/chunked.xsl asciidoc.xml\n\n`epub.xsl`::\n    Used by <<X43,a2x(1)>> to generate EPUB formatted documents.\n\n`fo.xsl`::\n    Generate XSL Formatting Object (`.fo`) files for subsequent PDF\n    file generation using FOP. For example:\n\n    $ python ../asciidoc.py -b docbook article.txt\n    $ xsltproc --nonet ../docbook-xsl/fo.xsl article.xml > article.fo\n    $ fop article.fo article.pdf\n\n`htmlhelp.xsl`::\n    Generate Microsoft HTML Help source files for the MS HTML Help\n    Compiler in the `./doc/htmlhelp` directory. This example is run on\n    MS Windows from a Cygwin shell prompt:\n\n    $ python ../asciidoc.py -b docbook asciidoc.txt\n    $ xsltproc --nonet ../docbook-xsl/htmlhelp.xsl asciidoc.xml\n    $ c:/Program\\ Files/HTML\\ Help\\ Workshop/hhc.exe htmlhelp.hhp\n\n`manpage.xsl`::\n    Generate a `roff(1)` format UNIX man page from a DocBook XML\n    'refentry' document. This example generates an `asciidoc.1` man\n    page file:\n\n    $ python ../asciidoc.py -d manpage -b docbook asciidoc.1.txt\n    $ xsltproc --nonet ../docbook-xsl/manpage.xsl asciidoc.1.xml\n\n`xhtml.xsl`::\n    Convert a DocBook XML file to a single XHTML file. For example:\n\n    $ python ../asciidoc.py -b docbook asciidoc.txt\n    $ xsltproc --nonet ../docbook-xsl/xhtml.xsl asciidoc.xml > asciidoc.html\n\nIf you want to see how the complete documentation set is processed\ntake a look at the A-A-P script `./doc/main.aap`.\n\n\nGenerating Plain Text Files\n---------------------------\nAsciiDoc does not have a text backend (for most purposes AsciiDoc\nsource text is fine), however you can convert AsciiDoc text files to\nformatted text using the AsciiDoc <<X43,a2x(1)>> toolchain wrapper\nutility.\n\n\n[[X35]]\nHTML5 and XHTML 1.1\n-------------------\nThe 'xhtml11' and 'html5' backends embed or link CSS and JavaScript\nfiles in their outputs, there is also a <<X99,themes>> plugin\nframework.\n\n- If the AsciiDoc 'linkcss' attribute is defined then CSS and\n  JavaScript files are linked to the output document, otherwise they\n  are embedded (the default behavior).\n- The default locations for CSS and JavaScript files can be changed by\n  setting the AsciiDoc 'stylesdir' and 'scriptsdir' attributes\n  respectively.\n- The default locations for embedded and linked files differ and are\n  calculated at different times -- embedded files are loaded when\n  asciidoc(1) generates the output document, linked files are loaded\n  by the browser when the user views the output document.\n- Embedded files are automatically inserted in the output files but\n  you need to manually copy linked CSS and Javascript files from\n  AsciiDoc <<X27,configuration directories>> to the correct location\n  relative to the output document.\n\n.Stylesheet file locations\n[cols=\"3*\",frame=\"topbot\",options=\"header\"]\n|====================================================================\n|'stylesdir' attribute\n|Linked location ('linkcss' attribute defined)\n|Embedded location ('linkcss' attribute undefined)\n\n|Undefined (default).\n|Same directory as the output document.\n|`stylesheets` subdirectory in the AsciiDoc configuration directory\n(the directory containing the backend conf file).\n\n|Absolute or relative directory name.\n|Absolute or relative to the output document.\n|Absolute or relative to the AsciiDoc configuration directory (the\ndirectory containing the backend conf file).\n\n|====================================================================\n\n.JavaScript file locations\n[cols=\"3*\",frame=\"topbot\",options=\"header\"]\n|====================================================================\n|'scriptsdir' attribute\n|Linked location ('linkcss' attribute defined)\n|Embedded location ('linkcss' attribute undefined)\n\n|Undefined (default).\n|Same directory as the output document.\n|`javascripts` subdirectory in the AsciiDoc configuration directory\n(the directory containing the backend conf file).\n\n|Absolute or relative directory name.\n|Absolute or relative to the output document.\n|Absolute or relative to the AsciiDoc configuration directory (the\ndirectory containing the backend conf file).\n\n|====================================================================\n\n[[X99]]\nThemes\n~~~~~~\nThe AsciiDoc 'theme' attribute is used to select an alternative CSS\nstylesheet and to optionally include additional JavaScript code.\n\n- Theme files reside in an AsciiDoc <<X27,configuration directory>>\n  named `themes/<theme>/` (where `<theme>` is the the theme name set\n  by the 'theme' attribute). asciidoc(1) sets the 'themedir' attribute\n  to the theme directory path name.\n- The 'theme' attribute can also be set using the asciidoc(1)\n  `--theme` option, the `--theme` option can also be used to manage\n  theme <<X101,plugins>>.\n- AsciiDoc ships with two themes: 'flask' and 'volnitsky'.\n- The `<theme>.css` file replaces the default `asciidoc.css` CSS file.\n- The `<theme>.js` file is included in addition to the default\n  `asciidoc.js` JavaScript file.\n- If the <<X66,data-uri>> attribute is defined then icons are loaded\n  from the theme `icons` sub-directory if it exists (i.e.  the\n  'iconsdir' attribute is set to theme `icons` sub-directory path).\n- Embedded theme files are automatically inserted in the output files\n  but you need to manually copy linked CSS and Javascript files to the\n  location of the output documents.\n- Linked CSS and JavaScript theme files are linked to the same linked\n  locations as <<X35,other CSS and JavaScript files>>.\n\nFor example, the command-line option `--theme foo` (or `--attribute\ntheme=foo`) will cause asciidoc(1) to search <<\"X27\",\"configuration\nfile locations 1, 2 and 3\">> for a sub-directory called `themes/foo`\ncontaining the stylesheet `foo.css` and optionally a JavaScript file\nname `foo.js`.\n\n\nDocument Structure\n------------------\nAn AsciiDoc document consists of a series of <<X8,block elements>>\nstarting with an optional document Header, followed by an optional\nPreamble, followed by zero or more document Sections.\n\nAlmost any combination of zero or more elements constitutes a valid\nAsciiDoc document: documents can range from a single sentence to a\nmulti-part book.\n\nBlock Elements\n~~~~~~~~~~~~~~\nBlock elements consist of one or more lines of text and may contain\nother block elements.\n\nThe AsciiDoc block structure can be informally summarized as follows\nfootnote:[This is a rough structural guide, not a rigorous syntax\ndefinition]:\n\n  Document      ::= (Header?,Preamble?,Section*)\n  Header        ::= (Title,(AuthorInfo,RevisionInfo?)?)\n  AuthorInfo    ::= (FirstName,(MiddleName?,LastName)?,EmailAddress?)\n  RevisionInfo  ::= (RevisionNumber?,RevisionDate,RevisionRemark?)\n  Preamble      ::= (SectionBody)\n  Section       ::= (Title,SectionBody?,(Section)*)\n  SectionBody   ::= ((BlockTitle?,Block)|BlockMacro)+\n  Block         ::= (Paragraph|DelimitedBlock|List|Table)\n  List          ::= (BulletedList|NumberedList|LabeledList|CalloutList)\n  BulletedList  ::= (ListItem)+\n  NumberedList  ::= (ListItem)+\n  CalloutList   ::= (ListItem)+\n  LabeledList   ::= (ListEntry)+\n  ListEntry     ::= (ListLabel,ListItem)\n  ListLabel     ::= (ListTerm+)\n  ListItem      ::= (ItemText,(List|ListParagraph|ListContinuation)*)\n\nWhere:\n\n- '?' implies zero or one occurrence, '+' implies one or more\n  occurrences, '*' implies zero or more occurrences.\n- All block elements are separated by line boundaries.\n- `BlockId`, `AttributeEntry` and `AttributeList` block elements (not\n  shown) can occur almost anywhere.\n- There are a number of document type and backend specific\n  restrictions imposed on the block syntax.\n- The following elements cannot contain blank lines: Header, Title,\n  Paragraph, ItemText.\n- A ListParagraph is a Paragraph with its 'listelement' option set.\n- A ListContinuation is a <<X15,list continuation element>>.\n\n[[X95]]\nHeader\n~~~~~~\nThe Header contains document meta-data, typically title plus optional\nauthorship and revision information:\n\n- The Header is optional, but if it is used it must start with a\n  document <<X17,title>>.\n- Optional Author and Revision information immediately follows the\n  header title.\n- The document header must be separated from the remainder of the\n  document by one or more blank lines and cannot contain blank lines.\n- The header can include comments.\n- The header can include <<X18,attribute entries>>, typically\n  'doctype', 'lang', 'encoding', 'icons', 'data-uri', 'toc',\n  'numbered'.\n- Header attributes are overridden by command-line attributes.\n- If the header contains non-UTF-8 characters then the 'encoding' must\n  precede the header (either in the document or on the command-line).\n\nHere's an example AsciiDoc document header:\n\n  Writing Documentation using AsciiDoc\n  ====================================\n  Joe Bloggs <jbloggs@mymail.com>\n  v2.0, February 2003:\n  Rewritten for version 2 release.\n\nThe author information line contains the author's name optionally\nfollowed by the author's email address. The author's name is formatted\nlike:\n\n  firstname[ [middlename ]lastname][ <email>]]\n\ni.e. a first name followed by optional middle and last names followed\nby an email address in that order.  Multi-word first, middle and last\nnames can be entered using the underscore as a word separator.  The\nemail address comes last and must be enclosed in angle <> brackets.\nHere a some examples of author information lines:\n\n  Joe Bloggs <jbloggs@mymail.com>\n  Joe Bloggs\n  Vincent Willem van_Gogh\n\nIf the author line does not match the above specification then the\nentire author line is treated as the first name.\n\nThe optional revision information line follows the author information\nline. The revision information can be one of two formats:\n\n. An optional document revision number followed by an optional\n  revision date followed by an optional revision remark:\n+\n--\n  * If the revision number is specified it must be followed by a\n    comma.\n  * The revision number must contain at least one numeric character.\n  * Any non-numeric characters preceding the first numeric character\n    will be dropped.\n  * If a revision remark is specified it must be preceded by a colon.\n    The revision remark extends from the colon up to the next blank\n    line, attribute entry or comment and is subject to normal text\n    substitutions.\n  * If a revision number or remark has been set but the revision date\n    has not been set then the revision date is set to the value of the\n    'docdate' attribute.\n\nExamples:\n\n  v2.0, February 2003\n  February 2003\n  v2.0,\n  v2.0, February 2003: Rewritten for version 2 release.\n  February 2003: Rewritten for version 2 release.\n  v2.0,: Rewritten for version 2 release.\n  :Rewritten for version 2 release.\n--\n\n. The revision information line can also be an RCS/CVS/SVN $Id$\n  marker:\n+\n--\n  * AsciiDoc extracts the 'revnumber', 'revdate', and 'author'\n    attributes from the $Id$ revision marker and displays them in the\n    document header.\n  * If an $Id$ revision marker is used the header author line can be\n    omitted.\n\nExample:\n\n  $Id: mydoc.txt,v 1.5 2009/05/17 17:58:44 jbloggs Exp $\n--\n\nYou can override or set header parameters by passing 'revnumber',\n'revremark', 'revdate', 'email', 'author', 'authorinitials',\n'firstname' and 'lastname' attributes using the asciidoc(1) `-a`\n(`--attribute`) command-line option. For example:\n\n  $ asciidoc -a revdate=2004/07/27 article.txt\n\nAttribute entries can also be added to the header for substitution in\nthe header template with <<X18,Attribute Entry>> elements.\n\nThe 'title' element in HTML outputs is set to the AsciiDoc document\ntitle, you can set it to a different value by including a 'title'\nattribute entry in the document header.\n\n[[X87]]\nAdditional document header information\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nAsciiDoc has two mechanisms for optionally including additional\nmeta-data in the header of the output document:\n\n'docinfo' configuration file sections::\nIf a <<X7,configuration file>> section named 'docinfo' has been loaded\nthen it will be included in the document header. Typically the\n'docinfo' section name will be prefixed with a '+' character so that it\nis appended to (rather than replace) other 'docinfo' sections.\n\n'docinfo' files::\nTwo docinfo files are recognized: one named `docinfo` and a second\nnamed like the AsciiDoc source file with a `-docinfo` suffix.  For\nexample, if the source document is called `mydoc.txt` then the\ndocument information files would be `docinfo.xml` and\n`mydoc-docinfo.xml` (for DocBook outputs) and `docinfo.html` and\n`mydoc-docinfo.html` (for HTML outputs).  The <<X97,docinfo, docinfo1\nand docinfo2>> attributes control which docinfo files are included in\nthe output files.\n\nThe contents docinfo templates and files is dependent on the type of\noutput:\n\nHTML::\n  Valid 'head' child elements. Typically 'style' and 'script' elements\n  for CSS and JavaScript inclusion.\n\nDocBook::\n  Valid 'articleinfo' or 'bookinfo' child elements.  DocBook defines\n  numerous elements for document meta-data, for example: copyrights,\n  document history and authorship information.  See the DocBook\n  `./doc/article-docinfo.xml` example that comes with the AsciiDoc\n  distribution.  The rendering of meta-data elements (or not) is\n  DocBook processor dependent.\n\n\n[[X86]]\nPreamble\n~~~~~~~~\nThe Preamble is an optional untitled section body between the document\nHeader and the first Section title.\n\nSections\n~~~~~~~~\nIn addition to the document title (level 0), AsciiDoc supports four\nsection levels: 1 (top) to 4 (bottom).  Section levels are delimited\nby section <<X17,titles>>.  Sections are translated using\nconfiguration file <<X93,section markup templates>>. AsciiDoc\ngenerates the following <<X60,intrinsic attributes>> specifically for\nuse in section markup templates:\n\nlevel::\nThe `level` attribute is the section level number, it is normally just\nthe <<X17,title>> level number (1..4). However, if the `leveloffset`\nattribute is defined it will be added to the `level` attribute. The\n`leveloffset` attribute is useful for <<X90,combining documents>>.\n\nsectnum::\nThe `-n` (`--section-numbers`) command-line option generates the\n`sectnum` (section number) attribute.  The `sectnum` attribute is used\nfor section numbers in HTML outputs (DocBook section numbering are\nhandled automatically by the DocBook toolchain commands).\n\n[[X93]]\nSection markup templates\n^^^^^^^^^^^^^^^^^^^^^^^^\nSection markup templates specify output markup and are defined in\nAsciiDoc configuration files.  Section markup template names are\nderived as follows (in order of precedence):\n\n1. From the title's first positional attribute or 'template'\n   attribute. For example, the following three section titles are\n   functionally equivalent:\n+\n.....................................................................\n[[terms]]\n[glossary]\nList of Terms\n-------------\n\n[\"glossary\",id=\"terms\"]\nList of Terms\n-------------\n\n[template=\"glossary\",id=\"terms\"]\nList of Terms\n-------------\n.....................................................................\n\n2. When the title text matches a configuration file\n   <<X16,`[specialsections]`>> entry.\n3. If neither of the above the default `sect<level>` template is used\n   (where `<level>` is a number from 1 to 4).\n\nIn addition to the normal section template names ('sect1', 'sect2',\n'sect3', 'sect4') AsciiDoc has the following templates for\nfrontmatter, backmatter and other special sections: 'abstract',\n'preface', 'colophon', 'dedication', 'glossary', 'bibliography',\n'synopsis', 'appendix', 'index'.  These special section templates\ngenerate the corresponding Docbook elements; for HTML outputs they\ndefault to the 'sect1' section template.\n\nSection IDs\n^^^^^^^^^^^\nIf no explicit section ID is specified an ID will be synthesised from\nthe section title.  The primary purpose of this feature is to ensure\npersistence of table of contents links (permalinks): the missing\nsection IDs are generated dynamically by the JavaScript TOC generator\n*after* the page is loaded. If you link to a dynamically generated TOC\naddress the page will load but the browser will ignore the (as yet\nungenerated) section ID.\n\nThe IDs are generated by the following algorithm:\n\n- Replace all non-alphanumeric title characters with underscores.\n- Strip leading or trailing underscores.\n- Convert to lowercase.\n- Prepend the `idprefix` attribute (so there's no possibility of name\n  clashes with existing document IDs). Prepend an underscore if the\n  `idprefix` attribute is not defined.\n- A numbered suffix (`_2`, `_3` ...) is added if a same named\n  auto-generated section ID exists.\n- If the `ascii-ids` attribute is defined then non-ASCII characters\n  are replaced with ASCII equivalents. This attribute may be\n  deprecated in future releases and *should be avoided*, it's sole\n  purpose is to accommodate deficient downstream applications that\n  cannot process non-ASCII ID attributes.\n\nExample: the title 'Jim's House' would generate the ID `_jim_s_house`.\n\nSection ID synthesis can be disabled by undefining the `sectids`\nattribute.\n\n[[X16]]\nSpecial Section Titles\n^^^^^^^^^^^^^^^^^^^^^^\nAsciiDoc has a mechanism for mapping predefined section titles\nauto-magically to specific markup templates. For example a title\n'Appendix A: Code Reference' will automatically use the 'appendix'\n<<X93,section markup template>>. The mappings from title to template\nname are specified in `[specialsections]` sections in the Asciidoc\nlanguage configuration files (`lang-*.conf`).  Section entries are\nformatted like:\n\n  <title>=<template>\n\n`<title>` is a Python regular expression and `<template>` is the name\nof a configuration file markup template section. If the `<title>`\nmatches an AsciiDoc document section title then the backend output is\nmarked up using the `<template>` markup template (instead of the\ndefault `sect<level>` section template). The `{title}` attribute value\nis set to the value of the matched regular expression group named\n'title', if there is no 'title' group `{title}` defaults to the whole\nof the AsciiDoc section title. If `<template>` is blank then any\nexisting entry with the same `<title>` will be deleted.\n\n.Special section titles vs. explicit template names\n*********************************************************************\nAsciiDoc has two mechanisms for specifying non-default section markup\ntemplates: you can specify the template name explicitly (using the\n'template' attribute) or indirectly (using 'special section titles').\nSpecifying a <<X93,section template>> attribute explicitly is\npreferred.  Auto-magical 'special section titles' have the following\ndrawbacks:\n\n- They are non-obvious, you have to know the exact matching\n  title for each special section on a language by language basis.\n- Section titles are predefined and can only be customised with a\n  configuration change.\n- The implementation is complicated by multiple languages: every\n  special section title has to be defined for each language (in each\n  of the `lang-*.conf` files).\n\nSpecifying special section template names explicitly does add more\nnoise to the source document (the 'template' attribute declaration),\nbut the intention is obvious and the syntax is consistent with other\nAsciiDoc elements c.f.  bibliographic, Q&A and glossary lists.\n\nSpecial section titles have been deprecated but are retained for\nbackward compatibility.\n\n*********************************************************************\n\nInline Elements\n~~~~~~~~~~~~~~~\n<<X34,Inline document elements>> are used to format text and to\nperform various types of text substitution. Inline elements and inline\nelement syntax is defined in the asciidoc(1) configuration files.\n\nHere is a list of AsciiDoc inline elements in the (default) order in\nwhich they are processed:\n\nSpecial characters::\n        These character sequences escape special characters used by\n        the backend markup (typically `<`, `>`, and `&` characters).\n        See `[specialcharacters]` configuration file sections.\n\nQuotes::\n        Elements that markup words and phrases; usually for character\n        formatting. See `[quotes]` configuration file sections.\n\nSpecial Words::\n        Word or word phrase patterns singled out for markup without\n        the need for further annotation.  See `[specialwords]`\n        configuration file sections.\n\nReplacements::\n        Each replacement defines a word or word phrase pattern to\n        search for along with corresponding replacement text. See\n        `[replacements]` configuration file sections.\n\nAttribute references::\n        Document attribute names enclosed in braces are replaced by\n        the corresponding attribute value.\n\nInline Macros::\n        Inline macros are replaced by the contents of parametrized\n        configuration file sections.\n\n\nDocument Processing\n-------------------\nThe AsciiDoc source document is read and processed as follows:\n\n1. The document 'Header' is parsed, header parameter values are\n   substituted into the configuration file `[header]` template section\n   which is then written to the output file.\n2. Each document 'Section' is processed and its constituent elements\n   translated to the output file.\n3. The configuration file `[footer]` template section is substituted\n   and written to the output file.\n\nWhen a block element is encountered asciidoc(1) determines the type of\nblock by checking in the following order (first to last): (section)\nTitles, BlockMacros, Lists, DelimitedBlocks, Tables, AttributeEntrys,\nAttributeLists, BlockTitles, Paragraphs.\n\nThe default paragraph definition `[paradef-default]` is last element\nto be checked.\n\nKnowing the parsing order will help you devise unambiguous macro, list\nand block syntax rules.\n\nInline substitutions within block elements are performed in the\nfollowing default order:\n\n1. Special characters\n2. Quotes\n3. Special words\n4. Replacements\n5. Attributes\n6. Inline Macros\n7. Replacements2\n\nThe substitutions and substitution order performed on\nTitle, Paragraph and DelimitedBlock elements is determined by\nconfiguration file parameters.\n\n\nText Formatting\n---------------\n[[X51]]\nQuoted Text\n~~~~~~~~~~~\nWords and phrases can be formatted by enclosing inline text with\nquote characters:\n\n_Emphasized text_::\n        Word phrases \\'enclosed in single quote characters' (acute\n        accents) or \\_underline characters_ are emphasized.\n\n*Strong text*::\n        Word phrases \\*enclosed in asterisk characters* are rendered\n        in a strong font (usually bold).\n\n[[X81]]+Monospaced text+::\n        Word phrases \\+enclosed in plus characters+ are rendered in a\n        monospaced font. Word phrases \\`enclosed in backtick\n        characters` (grave accents) are also rendered in a monospaced\n        font but in this case the enclosed text is rendered literally\n        and is not subject to further expansion (see <<X80,inline\n        literal passthrough>>).\n\n`Single quoted text'::\n        Phrases enclosed with a \\`single grave accent to the left and\n        a single acute accent to the right' are rendered in single\n        quotation marks.\n\n``Double quoted text''::\n        Phrases enclosed with \\\\``two grave accents to the left and\n        two acute accents to the right'' are rendered in quotation\n        marks.\n\n#Unquoted text#::\n        Placing \\#hashes around text# does nothing, it is a mechanism\n        to allow inline attributes to be applied to otherwise\n        unformatted text.\n\nNew quote types can be defined by editing asciidoc(1) configuration\nfiles. See the <<X7,Configuration Files>> section for details.\n\n.Quoted text behavior\n- Quoting cannot be overlapped.\n- Different quoting types can be nested.\n- To suppress quoted text formatting place a backslash character\n  immediately in front of the leading quote character(s). In the case\n  of ambiguity between escaped and non-escaped text you will need to\n  escape both leading and trailing quotes, in the case of\n  multi-character quotes you may even need to escape individual\n  characters.\n\n[[X96]]\nQuoted text attributes\n^^^^^^^^^^^^^^^^^^^^^^\nQuoted text can be prefixed with an <<X21,attribute list>>.  The first\npositional attribute ('role' attribute) is translated by AsciiDoc to\nan HTML 'span' element 'class' attribute or a DocBook 'phrase' element\n'role' attribute.\n\nDocBook XSL Stylesheets translate DocBook 'phrase' elements with\n'role' attributes to corresponding HTML 'span' elements with the same\n'class' attributes; CSS can then be used\nhttp://www.sagehill.net/docbookxsl/UsingCSS.html[to style the\ngenerated HTML].  Thus CSS styling can be applied to both DocBook and\nAsciiDoc generated HTML outputs.  You can also specify multiple class\nnames separated by spaces.\n\nCSS rules for text color, text background color, text size and text\ndecorators are included in the distributed AsciiDoc CSS files and are\nused in conjunction with AsciiDoc 'xhtml11', 'html5' and 'docbook'\noutputs. The CSS class names are:\n\n- '<color>' (text foreground color).\n- '<color>-background' (text background color).\n- 'big' and 'small' (text size).\n- 'underline', 'overline' and 'line-through' (strike through) text\n  decorators.\n\nWhere '<color>' can be any of the\nhttp://en.wikipedia.org/wiki/Web_colors#HTML_color_names[sixteen HTML\ncolor names].  Examples:\n\n  [red]#Obvious# and [big red yellow-background]*very obvious*.\n\n  [underline]#Underline text#, [overline]#overline text# and\n  [blue line-through]*bold blue and line-through*.\n\nis rendered as:\n\n[red]#Obvious# and [big red yellow-background]*very obvious*.\n\n[underline]#Underline text#, [overline]#overline text# and\n[bold blue line-through]*bold blue and line-through*.\n\nNOTE: Color and text decorator attributes are rendered for XHTML and\nHTML 5 outputs using CSS stylesheets.  The mechanism to implement\ncolor and text decorator attributes is provided for DocBook toolchains\nvia the DocBook 'phrase' element 'role' attribute, but the actual\nrendering is toolchain specific and is not part of the AsciiDoc\ndistribution.\n\n[[X52]]\nConstrained and Unconstrained Quotes\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nThere are actually two types of quotes:\n\nConstrained quotes\n++++++++++++++++++\nQuoted must be bounded by white space or commonly adjoining\npunctuation characters. These are the most commonly used type of\nquote.\n\nUnconstrained quotes\n++++++++++++++++++++\nUnconstrained quotes have no boundary constraints and can be placed\nanywhere within inline text. For consistency and to make them easier\nto remember unconstrained quotes are double-ups of the `_`, `*`, `+`\nand `#` constrained quotes:\n\n  __unconstrained emphasized text__\n  **unconstrained strong text**\n  ++unconstrained monospaced text++\n  ##unconstrained unquoted text##\n\nThe following example emboldens the letter F:\n\n  **F**ile Open...\n\nSuperscripts and Subscripts\n~~~~~~~~~~~~~~~~~~~~~~~~~~~\nPut \\^carets on either^ side of the text to be superscripted, put\n\\~tildes on either side~ of text to be subscripted.  For example, the\nfollowing line:\n\n  e^&#960;i^+1 = 0. H~2~O and x^10^. Some ^super text^\n  and ~some sub text~\n\nIs rendered like:\n\ne^&#960;i^+1 = 0. H~2~O and x^10^. Some ^super text^\nand ~some sub text~\n\nSuperscripts and subscripts are implemented as <<X52,unconstrained\nquotes>> and they can be escaped with a leading backslash and prefixed\nwith with an attribute list.\n\nLine Breaks\n~~~~~~~~~~~\nA plus character preceded by at least one space character at the end\nof a non-blank line forces a line break. It generates a line break\n(`br`) tag for HTML outputs and a custom XML `asciidoc-br` processing\ninstruction for DocBook outputs. The `asciidoc-br` processing\ninstruction is handled by <<X43,a2x(1)>>.\n\nPage Breaks\n~~~~~~~~~~~\nA line of three or more less-than (`<<<`) characters will generate a\nhard page break in DocBook and printed HTML outputs.  It uses the CSS\n`page-break-after` property for HTML outputs and a custom XML\n`asciidoc-pagebreak` processing instruction for DocBook outputs. The\n`asciidoc-pagebreak` processing instruction is handled by\n<<X43,a2x(1)>>. Hard page breaks are sometimes handy but as a general\nrule you should let your page processor generate page breaks for you.\n\nRulers\n~~~~~~\nA line of three or more apostrophe characters will generate a ruler\nline.  It generates a ruler (`hr`) tag for HTML outputs and a custom\nXML `asciidoc-hr` processing instruction for DocBook outputs. The\n`asciidoc-hr` processing instruction is handled by <<X43,a2x(1)>>.\n\nTabs\n~~~~\nBy default tab characters input files will translated to 8 spaces. Tab\nexpansion is set with the 'tabsize' entry in the configuration file\n`[miscellaneous]` section and can be overridden in included files by\nsetting a 'tabsize' attribute in the `include` macro's attribute list.\nFor example:\n\n  include::addendum.txt[tabsize=2]\n\nThe tab size can also be set using the attribute command-line option,\nfor example `--attribute tabsize=4`\n\nReplacements\n~~~~~~~~~~~~\nThe following replacements are defined in the default AsciiDoc\nconfiguration:\n\n  (C) copyright, (TM) trademark, (R) registered trademark,\n  -- em dash, ... ellipsis, -> right arrow, <- left arrow, => right\n  double arrow, <= left double arrow.\n\nWhich are rendered as:\n\n(C) copyright, (TM) trademark, (R) registered trademark,\n-- em dash, ... ellipsis, -> right arrow, <- left arrow, => right\ndouble arrow, <= left double arrow.\n\nYou can also include arbitrary entity references in the AsciiDoc\nsource. Examples:\n\n  &#x278a; &#182;\n\nrenders:\n\n&#x278a; &#182;\n\nTo render a replacement literally escape it with a leading back-slash.\n\nThe <<X7,Configuration Files>> section explains how to configure your\nown replacements.\n\nSpecial Words\n~~~~~~~~~~~~~\nWords defined in `[specialwords]` configuration file sections are\nautomatically marked up without having to be explicitly notated.\n\nThe <<X7,Configuration Files>> section explains how to add and replace\nspecial words.\n\n\n[[X17]]\nTitles\n------\nDocument and section titles can be in either of two formats:\n\nTwo line titles\n~~~~~~~~~~~~~~~\nA two line title consists of a title line, starting hard against the\nleft margin, and an underline. Section underlines consist a repeated\ncharacter pairs spanning the width of the preceding title (give or\ntake up to two characters):\n\nThe default title underlines for each of the document levels are:\n\n\n  Level 0 (top level):     ======================\n  Level 1:                 ----------------------\n  Level 2:                 ~~~~~~~~~~~~~~~~~~~~~~\n  Level 3:                 ^^^^^^^^^^^^^^^^^^^^^^\n  Level 4 (bottom level):  ++++++++++++++++++++++\n\nExamples:\n\n  Level One Section Title\n  -----------------------\n\n  Level 2 Subsection Title\n  ~~~~~~~~~~~~~~~~~~~~~~~~\n\n[[X46]]\nOne line titles\n~~~~~~~~~~~~~~~\nOne line titles consist of a single line delimited on either side by\none or more equals characters (the number of equals characters\ncorresponds to the section level minus one).  Here are some examples:\n\n  = Document Title (level 0) =\n  == Section title (level 1) ==\n  === Section title (level 2) ===\n  ==== Section title (level 3) ====\n  ===== Section title (level 4) =====\n\n[NOTE]\n=====================================================================\n- One or more spaces must fall between the title and the delimiters.\n- The trailing title delimiter is optional.\n- The one-line title syntax can be changed by editing the\n  configuration file `[titles]` section `sect0`...`sect4` entries.\n=====================================================================\n\nFloating titles\n~~~~~~~~~~~~~~~\nSetting the title's first positional attribute or 'style' attribute to\n'float' generates a free-floating title. A free-floating title is\nrendered just like a normal section title but is not formally\nassociated with a text body and is not part of the regular section\nhierarchy so the normal ordering rules do not apply. Floating titles\ncan also be used in contexts where section titles are illegal: for\nexample sidebar and admonition blocks.  Example:\n\n  [float]\n  The second day\n  ~~~~~~~~~~~~~~\n\nFloating titles do not appear in a document's table of contents.\n\n\n[[X42]]\nBlock Titles\n------------\nA 'BlockTitle' element is a single line beginning with a period\nfollowed by the title text. A BlockTitle is applied to the immediately\nfollowing Paragraph, DelimitedBlock, List, Table or BlockMacro. For\nexample:\n\n........................\n.Notes\n- Note 1.\n- Note 2.\n........................\n\nis rendered as:\n\n.Notes\n- Note 1.\n- Note 2.\n\n\n[[X41]]\nBlockId Element\n---------------\nA 'BlockId' is a single line block element containing a unique\nidentifier enclosed in double square brackets. It is used to assign an\nidentifier to the ensuing block element. For example:\n\n  [[chapter-titles]]\n  Chapter titles can be ...\n\nThe preceding example identifies the ensuing paragraph so it can be\nreferenced from other locations, for example with\n`<<chapter-titles,chapter titles>>`.\n\n'BlockId' elements can be applied to Title, Paragraph, List,\nDelimitedBlock, Table and BlockMacro elements.  The BlockId element\nsets the `{id}` attribute for substitution in the subsequent block's\nmarkup template. If a second positional argument is supplied it sets\nthe `{reftext}` attribute which is used to set the DocBook `xreflabel`\nattribute.\n\nThe 'BlockId' element has the same syntax and serves the same function\nto the <<X30,anchor inline macro>>.\n\n[[X79]]\nAttributeList Element\n---------------------\nAn 'AttributeList' block element is an <<X21,attribute list>> on a\nline by itself:\n\n- 'AttributeList' attributes are only applied to the immediately\n  following block element -- the attributes are made available to the\n  block's markup template.\n- Multiple contiguous 'AttributeList' elements are additively combined\n  in the order they appear..\n- The first positional attribute in the list is often used to specify\n  the ensuing element's <<X23,style>>.\n\nAttribute value substitution\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nBy default, only substitutions that take place inside attribute list\nvalues are attribute references, this is because not all attributes\nare destined to be marked up and rendered as text (for example the\ntable 'cols' attribute). To perform normal inline text substitutions\n(special characters, quotes, macros, replacements) on an attribute\nvalue you need to enclose it in single quotes. In the following quote\nblock the second attribute value in the AttributeList is quoted to\nensure the 'http' macro is expanded to a hyperlink.\n\n---------------------------------------------------------------------\n[quote,'http://en.wikipedia.org/wiki/Samuel_Johnson[Samuel Johnson]']\n_____________________________________________________________________\nSir, a woman's preaching is like a dog's walking on his hind legs. It\nis not done well; but you are surprised to find it done at all.\n_____________________________________________________________________\n---------------------------------------------------------------------\n\nCommon attributes\n~~~~~~~~~~~~~~~~~\nMost block elements support the following attributes:\n\n[cols=\"1e,1,5a\",frame=\"topbot\",options=\"header\"]\n|====================================================================\n|Name |Backends |Description\n\n|id |html4, html5, xhtml11, docbook |\nUnique identifier typically serve as link targets.\nCan also be set by the 'BlockId' element.\n\n|role |html4, html5, xhtml11, docbook |\nRole contains a string used to classify or subclassify an element and\ncan be applied to AsciiDoc block elements.  The AsciiDoc 'role'\nattribute is translated to the 'role' attribute in DocBook outputs and\nis included in the 'class' attribute in HTML outputs, in this respect\nit behaves like the <<X96,quoted text role attribute>>.\n\nDocBook XSL Stylesheets translate DocBook 'role' attributes to HTML\n'class' attributes; CSS can then be used\nhttp://www.sagehill.net/docbookxsl/UsingCSS.html[to style the\ngenerated HTML].\n\n|reftext |docbook |\n'reftext' is used to set the DocBook 'xreflabel' attribute.\nThe 'reftext' attribute can an also be set by the 'BlockId' element.\n\n|====================================================================\n\n\nParagraphs\n----------\nParagraphs are blocks of text terminated by a blank line, the end of\nfile, or the start of a delimited block or a list.  There are three\nparagraph syntaxes: normal, indented (literal) and admonition which\nare rendered, by default, with the corresponding paragraph style.\n\nEach syntax has a default style, but you can explicitly apply any\nparagraph style to any paragraph syntax. You can also apply\n<<X104,delimited block>> styles to single paragraphs.\n\nThe built-in paragraph styles are: 'normal', 'literal', 'verse',\n'quote', 'listing', 'TIP', 'NOTE', 'IMPORTANT', 'WARNING', 'CAUTION',\n'abstract', 'partintro', 'comment', 'example', 'sidebar', 'source',\n'music', 'latex', 'graphviz'.\n\nnormal paragraph syntax\n~~~~~~~~~~~~~~~~~~~~~~~\nNormal paragraph syntax consists of one or more non-blank lines of\ntext. The first line must start hard against the left margin (no\nintervening white space). The default processing expectation is that\nof a normal paragraph of text.\n\n[[X85]]\nliteral paragraph syntax\n~~~~~~~~~~~~~~~~~~~~~~~~\nLiteral paragraphs are rendered verbatim in a monospaced font without\nany distinguishing background or border.  By default there is no text\nformatting or substitutions within Literal paragraphs apart from\nSpecial Characters and Callouts.\n\nThe 'literal' style is applied implicitly to indented paragraphs i.e.\nwhere the first line of the paragraph is indented by one or more space\nor tab characters.  For example:\n\n---------------------------------------------------------------------\n  Consul *necessitatibus* per id,\n  consetetur, eu pro everti postulant\n  homero verear ea mea, qui.\n---------------------------------------------------------------------\n\nRenders:\n\n  Consul *necessitatibus* per id,\n  consetetur, eu pro everti postulant\n  homero verear ea mea, qui.\n\nNOTE: Because <<X64,lists>> can be indented it's possible for your\nindented paragraph to be misinterpreted as a list -- in situations\nlike this apply the 'literal' style to a normal paragraph.\n\nInstead of using a paragraph indent you could apply the 'literal'\nstyle explicitly, for example:\n\n---------------------------------------------------------------------\n[literal]\nConsul *necessitatibus* per id,\nconsetetur, eu pro everti postulant\nhomero verear ea mea, qui.\n---------------------------------------------------------------------\n\nRenders:\n\n[literal]\nConsul *necessitatibus* per id,\nconsetetur, eu pro everti postulant\nhomero verear ea mea, qui.\n\n[[X94]]\nquote and verse paragraph styles\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nThe optional 'attribution' and 'citetitle' attributes (positional\nattributes 2 and 3) specify the author and source respectively.\n\nThe 'verse' style retains the line breaks, for example:\n\n---------------------------------------------------------------------\n[verse, William Blake, from Auguries of Innocence]\nTo see a world in a grain of sand,\nAnd a heaven in a wild flower,\nHold infinity in the palm of your hand,\nAnd eternity in an hour.\n---------------------------------------------------------------------\n\nWhich is rendered as:\n\n[verse, William Blake, from Auguries of Innocence]\nTo see a world in a grain of sand,\nAnd a heaven in a wild flower,\nHold infinity in the palm of your hand,\nAnd eternity in an hour.\n\nThe 'quote' style flows the text at left and right margins, for\nexample:\n\n---------------------------------------------------------------------\n[quote, Bertrand Russell, The World of Mathematics (1956)]\nA good notation has subtlety and suggestiveness which at times makes\nit almost seem like a live teacher.\n---------------------------------------------------------------------\n\nWhich is rendered as:\n\n[quote, Bertrand Russell, The World of Mathematics (1956)]\nA good notation has subtlety and suggestiveness which at times makes\nit almost seem like a live teacher.\n\n[[X28]]\nAdmonition Paragraphs\n~~~~~~~~~~~~~~~~~~~~~\n'TIP', 'NOTE', 'IMPORTANT', 'WARNING' and 'CAUTION' admonishment\nparagraph styles are generated by placing `NOTE:`, `TIP:`,\n`IMPORTANT:`, `WARNING:` or `CAUTION:` as the first word of the\nparagraph. For example:\n\n  NOTE: This is an example note.\n\nAlternatively, you can specify the paragraph admonition style\nexplicitly using an <<X79,AttributeList element>>. For example:\n\n  [NOTE]\n  This is an example note.\n\nRenders:\n\nNOTE: This is an example note.\n\nTIP: If your admonition requires more than a single paragraph use an\n<<X22,admonition block>> instead.\n\n[[X47]]\nAdmonition Icons and Captions\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nNOTE: Admonition customization with `icons`, `iconsdir`, `icon` and\n`caption` attributes does not apply when generating DocBook output. If\nyou are going the DocBook route then the <<X43,a2x(1)>> `--no-icons`\nand `--icons-dir` options can be used to set the appropriate XSL\nStylesheets parameters.\n\nBy default the asciidoc(1) HTML backends generate text captions\ninstead of admonition icon image links. To generate links to icon\nimages define the <<X45,`icons`>> attribute, for example using the `-a\nicons` command-line option.\n\nThe <<X44,`iconsdir`>> attribute sets the location of linked icon\nimages.\n\nYou can override the default icon image using the `icon` attribute to\nspecify the path of the linked image. For example:\n\n  [icon=\"./images/icons/wink.png\"]\n  NOTE: What lovely war.\n\nUse the `caption` attribute to customize the admonition captions (not\napplicable to `docbook` backend). The following example suppresses the\nicon image and customizes the caption of a 'NOTE' admonition\n(undefining the `icons` attribute with `icons=None` is only necessary\nif <<X45,admonition icons>> have been enabled):\n\n  [icons=None, caption=\"My Special Note\"]\n  NOTE: This is my special note.\n\nThis subsection also applies to <<X22,Admonition Blocks>>.\n\n\n[[X104]]\nDelimited Blocks\n----------------\nDelimited blocks are blocks of text enveloped by leading and trailing\ndelimiter lines (normally a series of four or more repeated\ncharacters). The behavior of Delimited Blocks is specified by entries\nin configuration file `[blockdef-*]` sections.\n\nPredefined Delimited Blocks\n~~~~~~~~~~~~~~~~~~~~~~~~~~~\nAsciiDoc ships with a number of predefined DelimitedBlocks (see the\n`asciidoc.conf` configuration file in the asciidoc(1) program\ndirectory):\n\nPredefined delimited block underlines:\n\n  CommentBlock:     //////////////////////////\n  PassthroughBlock: ++++++++++++++++++++++++++\n  ListingBlock:     --------------------------\n  LiteralBlock:     ..........................\n  SidebarBlock:     **************************\n  QuoteBlock:       __________________________\n  ExampleBlock:     ==========================\n  OpenBlock:        --\n\n.Default DelimitedBlock substitutions\n[cols=\"2e,7*^\",frame=\"topbot\",options=\"header,autowidth\"]\n|=====================================================\n| |Attributes |Callouts |Macros | Quotes |Replacements\n|Special chars |Special words\n\n|PassthroughBlock |Yes |No  |Yes |No  |No  |No  |No\n|ListingBlock     |No  |Yes |No  |No  |No  |Yes |No\n|LiteralBlock     |No  |Yes |No  |No  |No  |Yes |No\n|SidebarBlock     |Yes |No  |Yes |Yes |Yes |Yes |Yes\n|QuoteBlock       |Yes |No  |Yes |Yes |Yes |Yes |Yes\n|ExampleBlock     |Yes |No  |Yes |Yes |Yes |Yes |Yes\n|OpenBlock        |Yes |No  |Yes |Yes |Yes |Yes |Yes\n|=====================================================\n\nListing Blocks\n~~~~~~~~~~~~~~\n'ListingBlocks' are rendered verbatim in a monospaced font, they\nretain line and whitespace formatting and are often distinguished by a\nbackground or border. There is no text formatting or substitutions\nwithin Listing blocks apart from Special Characters and Callouts.\nListing blocks are often used for computer output and file listings.\n\nHere's an example:\n\n[listing]\n......................................\n--------------------------------------\n#include <stdio.h>\n\nint main() {\n   printf(\"Hello World!\\n\");\n   exit(0);\n}\n--------------------------------------\n......................................\n\nWhich will be rendered like:\n\n--------------------------------------\n#include <stdio.h>\n\nint main() {\n    printf(\"Hello World!\\n\");\n    exit(0);\n}\n--------------------------------------\n\nBy convention <<X59,filter blocks>> use the listing block syntax and\nare implemented as distinct listing block styles.\n\n[[X65]]\nLiteral Blocks\n~~~~~~~~~~~~~~\n'LiteralBlocks' are rendered just like <<X85,literal paragraphs>>.\nExample:\n\n---------------------------------------------------------------------\n...................................\nConsul *necessitatibus* per id,\nconsetetur, eu pro everti postulant\nhomero verear ea mea, qui.\n...................................\n---------------------------------------------------------------------\n\nRenders:\n...................................\nConsul *necessitatibus* per id,\nconsetetur, eu pro everti postulant\nhomero verear ea mea, qui.\n...................................\n\nIf the 'listing' style is applied to a LiteralBlock it will be\nrendered as a ListingBlock (this is handy if you have a listing\ncontaining a ListingBlock).\n\nSidebar Blocks\n~~~~~~~~~~~~~~\nA sidebar is a short piece of text presented outside the narrative\nflow of the main text. The sidebar is normally presented inside a\nbordered box to set it apart from the main text.\n\nThe sidebar body is treated like a normal section body.\n\nHere's an example:\n\n---------------------------------------------------------------------\n.An Example Sidebar\n************************************************\nAny AsciiDoc SectionBody element (apart from\nSidebarBlocks) can be placed inside a sidebar.\n************************************************\n---------------------------------------------------------------------\n\nWhich will be rendered like:\n\n.An Example Sidebar\n************************************************\nAny AsciiDoc SectionBody element (apart from\nSidebarBlocks) can be placed inside a sidebar.\n************************************************\n\n[[X26]]\nComment Blocks\n~~~~~~~~~~~~~~\nThe contents of 'CommentBlocks' are not processed; they are useful for\nannotations and for excluding new or outdated content that you don't\nwant displayed. CommentBlocks are never written to output files.\nExample:\n\n---------------------------------------------------------------------\n//////////////////////////////////////////\nCommentBlock contents are not processed by\nasciidoc(1).\n//////////////////////////////////////////\n---------------------------------------------------------------------\n\nSee also <<X25,Comment Lines>>.\n\nNOTE: System macros are executed inside comment blocks.\n\n[[X76]]\nPassthrough Blocks\n~~~~~~~~~~~~~~~~~~\nBy default the block contents is subject only to 'attributes' and\n'macros' substitutions (use an explicit 'subs' attribute to apply\ndifferent substitutions).  PassthroughBlock content will often be\nbackend specific. Here's an example:\n\n---------------------------------------------------------------------\n[subs=\"quotes\"]\n++++++++++++++++++++++++++++++++++++++\n<table border=\"1\"><tr>\n  <td>*Cell 1*</td>\n  <td>*Cell 2*</td>\n</tr></table>\n++++++++++++++++++++++++++++++++++++++\n---------------------------------------------------------------------\n\nThe following styles can be applied to passthrough blocks:\n\npass::\n  No substitutions are performed. This is equivalent to `subs=\"none\"`.\n\nasciimath, latexmath::\n  By default no substitutions are performed, the contents are rendered\n  as <<X78,mathematical formulas>>.\n\nQuote Blocks\n~~~~~~~~~~~~\n'QuoteBlocks' are used for quoted passages of text. There are two\nstyles: 'quote' and 'verse'. The style behavior is identical to\n<<X94,quote and verse paragraphs>> except that blocks can contain\nmultiple paragraphs and, in the case of the 'quote' style, other\nsection elements.  The first positional attribute sets the style, if\nno attributes are specified the 'quote' style is used.  The optional\n'attribution' and 'citetitle' attributes (positional attributes 2 and\n3) specify the quote's author and source. For example:\n\n---------------------------------------------------------------------\n[quote, Sir Arthur Conan Doyle, The Adventures of Sherlock Holmes]\n____________________________________________________________________\nAs he spoke there was the sharp sound of horses' hoofs and\ngrating wheels against the curb, followed by a sharp pull at the\nbell. Holmes whistled.\n\n\"A pair, by the sound,\" said he. \"Yes,\" he continued, glancing\nout of the window. \"A nice little brougham and a pair of\nbeauties. A hundred and fifty guineas apiece. There's money in\nthis case, Watson, if there is nothing else.\"\n____________________________________________________________________\n---------------------------------------------------------------------\n\nWhich is rendered as:\n\n[quote, Sir Arthur Conan Doyle, The Adventures of Sherlock Holmes]\n____________________________________________________________________\nAs he spoke there was the sharp sound of horses' hoofs and\ngrating wheels against the curb, followed by a sharp pull at the\nbell. Holmes whistled.\n\n\"A pair, by the sound,\" said he. \"Yes,\" he continued, glancing\nout of the window. \"A nice little brougham and a pair of\nbeauties. A hundred and fifty guineas apiece. There's money in\nthis case, Watson, if there is nothing else.\"\n____________________________________________________________________\n\n[[X48]]\nExample Blocks\n~~~~~~~~~~~~~~\n'ExampleBlocks' encapsulate the DocBook Example element and are used\nfor, well, examples.  Example blocks can be titled by preceding them\nwith a 'BlockTitle'.  DocBook toolchains will normally automatically\nnumber examples and generate a 'List of Examples' backmatter section.\n\nExample blocks are delimited by lines of equals characters and can\ncontain any block elements apart from Titles, BlockTitles and\nSidebars) inside an example block. For example:\n\n---------------------------------------------------------------------\n.An example\n=====================================================================\nQui in magna commodo, est labitur dolorum an. Est ne magna primis\nadolescens.\n=====================================================================\n---------------------------------------------------------------------\n\nRenders:\n\n.An example\n=====================================================================\nQui in magna commodo, est labitur dolorum an. Est ne magna primis\nadolescens.\n=====================================================================\n\nA title prefix that can be inserted with the `caption` attribute\n(HTML backends). For example:\n\n---------------------------------------------------------------------\n[caption=\"Example 1: \"]\n.An example with a custom caption\n=====================================================================\nQui in magna commodo, est labitur dolorum an. Est ne magna primis\nadolescens.\n=====================================================================\n---------------------------------------------------------------------\n\n[[X22]]\nAdmonition Blocks\n~~~~~~~~~~~~~~~~~\nThe 'ExampleBlock' definition includes a set of admonition\n<<X23,styles>> ('NOTE', 'TIP', 'IMPORTANT', 'WARNING', 'CAUTION') for\ngenerating admonition blocks (admonitions containing more than a\n<<X28,single paragraph>>).  Just precede the 'ExampleBlock' with an\nattribute list specifying the admonition style name. For example:\n\n---------------------------------------------------------------------\n[NOTE]\n.A NOTE admonition block\n=====================================================================\nQui in magna commodo, est labitur dolorum an. Est ne magna primis\nadolescens.\n\n. Fusce euismod commodo velit.\n. Vivamus fringilla mi eu lacus.\n  .. Fusce euismod commodo velit.\n  .. Vivamus fringilla mi eu lacus.\n. Donec eget arcu bibendum\n  nunc consequat lobortis.\n=====================================================================\n---------------------------------------------------------------------\n\nRenders:\n\n[NOTE]\n.A NOTE admonition block\n=====================================================================\nQui in magna commodo, est labitur dolorum an. Est ne magna primis\nadolescens.\n\n. Fusce euismod commodo velit.\n. Vivamus fringilla mi eu lacus.\n  .. Fusce euismod commodo velit.\n  .. Vivamus fringilla mi eu lacus.\n. Donec eget arcu bibendum\n  nunc consequat lobortis.\n=====================================================================\n\nSee also <<X47,Admonition Icons and Captions>>.\n\n[[X29]]\nOpen Blocks\n~~~~~~~~~~~\nOpen blocks are special:\n\n- The open block delimiter is line containing two hyphen characters\n  (instead of four or more repeated characters).\n\n- They can be used to group block elements for <<X15,List item\n  continuation>>.\n\n- Open blocks can be styled to behave like any other type of delimited\n  block.  The  following built-in styles can be applied to open\n  blocks: 'literal', 'verse', 'quote', 'listing', 'TIP', 'NOTE',\n  'IMPORTANT', 'WARNING', 'CAUTION', 'abstract', 'partintro',\n  'comment', 'example', 'sidebar', 'source', 'music', 'latex',\n  'graphviz'. For example, the following open block and listing block\n  are functionally identical:\n\n  [listing]\n  --\n  Lorum ipsum ...\n  --\n\n  ---------------\n  Lorum ipsum ...\n  ---------------\n\n- An unstyled open block groups section elements but otherwise does\n  nothing.\n\nOpen blocks are used to generate document abstracts and book part\nintroductions:\n\n- Apply the 'abstract' style to generate an abstract, for example:\n\n  [abstract]\n  --\n  In this paper we will ...\n  --\n\n. Apply the 'partintro' style to generate a book part introduction for\n  a multi-part book, for example:\n\n  [partintro]\n  .Optional part introduction title\n  --\n  Optional part introduction goes here.\n  --\n\n\n[[X64]]\nLists\n-----\n.List types\n- Bulleted lists. Also known as itemized or unordered lists.\n- Numbered lists. Also called ordered lists.\n- Labeled lists. Sometimes called variable or definition lists.\n- Callout lists (a list of callout annotations).\n\n.List behavior\n- List item indentation is optional and does not determine nesting,\n  indentation does however make the source more readable.\n- Another list or a literal paragraph immediately following a list\n  item will be implicitly included in the list item; use <<X15, list\n  item continuation>> to explicitly append other block elements to a\n  list item.\n- A comment block or a comment line block macro element will terminate\n  a list -- use inline comment lines to put comments inside lists.\n- The `listindex` <<X60,intrinsic attribute>> is the current list item\n  index (1..). If this attribute is used outside a list then it's value\n  is the number of items in the most recently closed list. Useful for\n  displaying the number of items in a list.\n\nBulleted Lists\n~~~~~~~~~~~~~~\nBulleted list items start with a single dash or one to five asterisks\nfollowed by some white space then some text. Bulleted list syntaxes\nare:\n\n...................\n- List item.\n* List item.\n** List item.\n*** List item.\n**** List item.\n***** List item.\n...................\n\nNumbered Lists\n~~~~~~~~~~~~~~\nList item numbers are explicit or implicit.\n\n.Explicit numbering\nList items begin with a number followed by some white space then the\nitem text. The numbers can be decimal (arabic), roman (upper or lower\ncase) or alpha (upper or lower case). Decimal and alpha numbers are\nterminated with a period, roman numbers are terminated with a closing\nparenthesis. The different terminators are necessary to ensure 'i',\n'v' and 'x' roman numbers are are distinguishable from 'x', 'v' and\n'x' alpha numbers. Examples:\n\n.....................................................................\n1.   Arabic (decimal) numbered list item.\na.   Lower case alpha (letter) numbered list item.\nF.   Upper case alpha (letter) numbered list item.\niii) Lower case roman numbered list item.\nIX)  Upper case roman numbered list item.\n.....................................................................\n\n.Implicit numbering\nList items begin one to five period characters, followed by some white\nspace then the item text. Examples:\n\n.....................................................................\n. Arabic (decimal) numbered list item.\n.. Lower case alpha (letter) numbered list item.\n... Lower case roman numbered list item.\n.... Upper case alpha (letter) numbered list item.\n..... Upper case roman numbered list item.\n.....................................................................\n\nYou can use the 'style' attribute (also the first positional\nattribute) to specify an alternative numbering style.  The numbered\nlist style can be one of the following values: 'arabic', 'loweralpha',\n'upperalpha', 'lowerroman', 'upperroman'.\n\nHere are some examples of bulleted and numbered lists:\n\n---------------------------------------------------------------------\n- Praesent eget purus quis magna eleifend eleifend.\n  1. Fusce euismod commodo velit.\n    a. Fusce euismod commodo velit.\n    b. Vivamus fringilla mi eu lacus.\n    c. Donec eget arcu bibendum nunc consequat lobortis.\n  2. Vivamus fringilla mi eu lacus.\n    i)  Fusce euismod commodo velit.\n    ii) Vivamus fringilla mi eu lacus.\n  3. Donec eget arcu bibendum nunc consequat lobortis.\n  4. Nam fermentum mattis ante.\n- Lorem ipsum dolor sit amet, consectetuer adipiscing elit.\n  * Fusce euismod commodo velit.\n  ** Qui in magna commodo, est labitur dolorum an. Est ne magna primis\n     adolescens. Sit munere ponderum dignissim et. Minim luptatum et\n     vel.\n  ** Vivamus fringilla mi eu lacus.\n  * Donec eget arcu bibendum nunc consequat lobortis.\n- Nulla porttitor vulputate libero.\n  . Fusce euismod commodo velit.\n  . Vivamus fringilla mi eu lacus.\n[upperroman]\n    .. Fusce euismod commodo velit.\n    .. Vivamus fringilla mi eu lacus.\n  . Donec eget arcu bibendum nunc consequat lobortis.\n---------------------------------------------------------------------\n\nWhich render as:\n\n- Praesent eget purus quis magna eleifend eleifend.\n  1. Fusce euismod commodo velit.\n    a. Fusce euismod commodo velit.\n    b. Vivamus fringilla mi eu lacus.\n    c. Donec eget arcu bibendum nunc consequat lobortis.\n  2. Vivamus fringilla mi eu lacus.\n    i)  Fusce euismod commodo velit.\n    ii) Vivamus fringilla mi eu lacus.\n  3. Donec eget arcu bibendum nunc consequat lobortis.\n  4. Nam fermentum mattis ante.\n- Lorem ipsum dolor sit amet, consectetuer adipiscing elit.\n  * Fusce euismod commodo velit.\n  ** Qui in magna commodo, est labitur dolorum an. Est ne magna primis\n     adolescens. Sit munere ponderum dignissim et. Minim luptatum et\n     vel.\n  ** Vivamus fringilla mi eu lacus.\n  * Donec eget arcu bibendum nunc consequat lobortis.\n- Nulla porttitor vulputate libero.\n  . Fusce euismod commodo velit.\n  . Vivamus fringilla mi eu lacus.\n[upperroman]\n    .. Fusce euismod commodo velit.\n    .. Vivamus fringilla mi eu lacus.\n  . Donec eget arcu bibendum nunc consequat lobortis.\n\nA predefined 'compact' option is available to bulleted and numbered\nlists -- this translates to the DocBook 'spacing=\"compact\"' lists\nattribute which may or may not be processed by the DocBook toolchain.\nExample:\n\n  [options=\"compact\"]\n  - Compact list item.\n  - Another compact list item.\n\nTIP: To apply the 'compact' option globally define a document-wide\n'compact-option' attribute, e.g. using the `-a compact-option`\ncommand-line option.\n\nYou can set the list start number using the 'start' attribute (works\nfor HTML outputs and DocBook outputs processed by DocBook XSL\nStylesheets). Example:\n\n  [start=7]\n  . List item 7.\n  . List item 8.\n\nLabeled Lists\n~~~~~~~~~~~~~\nLabeled list items consist of one or more text labels followed by the\ntext of the list item.\n\nAn item label begins a line with an alphanumeric character hard\nagainst the left margin and ends with two, three or four colons or two\nsemi-colons. A list item can have multiple labels, one per line.\n\nThe list item text consists of one or more lines of text starting\nafter the last label (either on the same line or a new line) and can\nbe followed by nested List or ListParagraph elements. Item text can be\noptionally indented.\n\nHere are some examples:\n\n---------------------------------------------------------------------\nIn::\nLorem::\n  Fusce euismod commodo velit.\n\n  Fusce euismod commodo velit.\n\nIpsum:: Vivamus fringilla mi eu lacus.\n  * Vivamus fringilla mi eu lacus.\n  * Donec eget arcu bibendum nunc consequat lobortis.\nDolor::\n  Donec eget arcu bibendum nunc consequat lobortis.\n  Suspendisse;;\n    A massa id sem aliquam auctor.\n  Morbi;;\n    Pretium nulla vel lorem.\n  In;;\n    Dictum mauris in urna.\n    Vivamus::: Fringilla mi eu lacus.\n    Donec:::   Eget arcu bibendum nunc consequat lobortis.\n---------------------------------------------------------------------\n\nWhich render as:\n\nIn::\nLorem::\n  Fusce euismod commodo velit.\n\n  Fusce euismod commodo velit.\n\nIpsum:: Vivamus fringilla mi eu lacus.\n  * Vivamus fringilla mi eu lacus.\n  * Donec eget arcu bibendum nunc consequat lobortis.\nDolor::\n  Donec eget arcu bibendum nunc consequat lobortis.\n  Suspendisse;;\n    A massa id sem aliquam auctor.\n  Morbi;;\n    Pretium nulla vel lorem.\n  In;;\n    Dictum mauris in urna.\n    Vivamus::: Fringilla mi eu lacus.\n    Donec:::   Eget arcu bibendum nunc consequat lobortis.\n\nHorizontal labeled list style\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nThe 'horizontal' labeled list style (also the first positional\nattribute) places the list text side-by-side with the label instead of\nunder the label. Here is an example:\n\n---------------------------------------------------------------------\n[horizontal]\n*Lorem*:: Fusce euismod commodo velit.  Qui in magna commodo, est\nlabitur dolorum an. Est ne magna primis adolescens.\n\n  Fusce euismod commodo velit.\n\n*Ipsum*:: Vivamus fringilla mi eu lacus.\n- Vivamus fringilla mi eu lacus.\n- Donec eget arcu bibendum nunc consequat lobortis.\n\n*Dolor*::\n  - Vivamus fringilla mi eu lacus.\n  - Donec eget arcu bibendum nunc consequat lobortis.\n\n---------------------------------------------------------------------\n\nWhich render as:\n\n[horizontal]\n*Lorem*:: Fusce euismod commodo velit.  Qui in magna commodo, est\nlabitur dolorum an. Est ne magna primis adolescens.\n\n  Fusce euismod commodo velit.\n\n*Ipsum*:: Vivamus fringilla mi eu lacus.\n- Vivamus fringilla mi eu lacus.\n- Donec eget arcu bibendum nunc consequat lobortis.\n\n*Dolor*::\n  - Vivamus fringilla mi eu lacus.\n  - Donec eget arcu bibendum nunc consequat lobortis.\n\n[NOTE]\n=====================================================================\n- Current PDF toolchains do not make a good job of determining\n  the relative column widths for horizontal labeled lists.\n- Nested horizontal labeled lists will generate DocBook validation\n  errors because the 'DocBook XML V4.2' DTD does not permit nested\n  informal tables (although <<X13,DocBook XSL Stylesheets>> and\n  <<X31,dblatex>> process them correctly).\n- The label width can be set as a percentage of the total width by\n  setting the 'width' attribute e.g. `width=\"10%\"`\n=====================================================================\n\nQuestion and Answer Lists\n~~~~~~~~~~~~~~~~~~~~~~~~~\nAsciiDoc comes pre-configured with a 'qanda' style labeled list for generating\nDocBook question and answer (Q&A) lists. Example:\n\n---------------------------------------------------------------------\n[qanda]\nQuestion one::\n        Answer one.\nQuestion two::\n        Answer two.\n---------------------------------------------------------------------\n\nRenders:\n\n[qanda]\nQuestion one::\n        Answer one.\nQuestion two::\n        Answer two.\n\nGlossary Lists\n~~~~~~~~~~~~~~\nAsciiDoc comes pre-configured with a 'glossary' style labeled list for\ngenerating DocBook glossary lists. Example:\n\n---------------------------------------------------------------------\n[glossary]\nA glossary term::\n    The corresponding definition.\nA second glossary term::\n    The corresponding definition.\n---------------------------------------------------------------------\n\nFor working examples see the `article.txt` and `book.txt` documents in\nthe AsciiDoc `./doc` distribution directory.\n\nNOTE: To generate valid DocBook output glossary lists must be located\nin a section that uses the 'glossary' <<X93,section markup template>>.\n\nBibliography Lists\n~~~~~~~~~~~~~~~~~~\nAsciiDoc comes with a predefined 'bibliography' bulleted list style\ngenerating DocBook bibliography entries. Example:\n\n---------------------------------------------------------------------\n[bibliography]\n.Optional list title\n- [[[taoup]]] Eric Steven Raymond. 'The Art of UNIX\n  Programming'. Addison-Wesley. ISBN 0-13-142901-9.\n- [[[walsh-muellner]]] Norman Walsh & Leonard Muellner.\n  'DocBook - The Definitive Guide'. O'Reilly & Associates.\n  1999. ISBN 1-56592-580-7.\n---------------------------------------------------------------------\n\nThe `[[[<reference>]]]` syntax is a bibliography entry anchor, it\ngenerates an anchor named `<reference>` and additionally displays\n`[<reference>]` at the anchor position. For example `[[[taoup]]]`\ngenerates an anchor named `taoup` that displays `[taoup]` at the\nanchor position. Cite the reference from elsewhere your document using\n`<<taoup>>`, this displays a hyperlink (`[taoup]`) to the\ncorresponding bibliography entry anchor.\n\nFor working examples see the `article.txt` and `book.txt` documents in\nthe AsciiDoc `./doc` distribution directory.\n\nNOTE: To generate valid DocBook output bibliography lists must be\nlocated in a <<X93,bibliography section>>.\n\n[[X15]]\nList Item Continuation\n~~~~~~~~~~~~~~~~~~~~~~\nAnother list or a literal paragraph immediately following a list item\nis implicitly appended to the list item; to append other block\nelements to a list item you need to explicitly join them to the list\nitem with a 'list continuation' (a separator line containing a single\nplus character). Multiple block elements can be appended to a list\nitem using list continuations (provided they are legal list item\nchildren in the backend markup).\n\nHere are some examples of list item continuations: list item one\ncontains multiple continuations; list item two is continued with an\n<<X29,OpenBlock>> containing multiple elements:\n\n---------------------------------------------------------------------\n1. List item one.\n+\nList item one continued with a second paragraph followed by an\nIndented block.\n+\n.................\n$ ls *.sh\n$ mv *.sh ~/tmp\n.................\n+\nList item continued with a third paragraph.\n\n2. List item two continued with an open block.\n+\n--\nThis paragraph is part of the preceding list item.\n\na. This list is nested and does not require explicit item continuation.\n+\nThis paragraph is part of the preceding list item.\n\nb. List item b.\n\nThis paragraph belongs to item two of the outer list.\n--\n---------------------------------------------------------------------\n\nRenders:\n\n1. List item one.\n+\nList item one continued with a second paragraph followed by an\nIndented block.\n+\n.................\n$ ls *.sh\n$ mv *.sh ~/tmp\n.................\n+\nList item continued with a third paragraph.\n\n2. List item two continued with an open block.\n+\n--\nThis paragraph is part of the preceding list item.\n\na. This list is nested and does not require explicit item continuation.\n+\nThis paragraph is part of the preceding list item.\n\nb. List item b.\n\nThis paragraph belongs to item two of the outer list.\n--\n\n\n[[X92]]\nFootnotes\n---------\nThe shipped AsciiDoc configuration includes three footnote inline\nmacros:\n\n`footnote:[<text>]`::\n  Generates a footnote with text `<text>`.\n\n`footnoteref:[<id>,<text>]`::\n  Generates a footnote with a reference ID `<id>` and text `<text>`.\n\n`footnoteref:[<id>]`::\n  Generates a reference to the footnote with ID `<id>`.\n\nThe footnote text can span multiple lines.\n\nThe 'xhtml11' and 'html5' backends render footnotes dynamically using\nJavaScript; 'html4' outputs do not use JavaScript and leave the\nfootnotes inline; 'docbook' footnotes are processed by the downstream\nDocBook toolchain.\n\nExample footnotes:\n\n  A footnote footnote:[An example footnote.];\n  a second footnote with a reference ID footnoteref:[note2,Second footnote.];\n  finally a reference to the second footnote footnoteref:[note2].\n\nRenders:\n\nA footnote footnote:[An example footnote.];\na second footnote with a reference ID footnoteref:[note2,Second footnote.];\nfinally a reference to the second footnote footnoteref:[note2].\n\n\nIndexes\n-------\nThe shipped AsciiDoc configuration includes the inline macros for\ngenerating DocBook index entries.\n\n`indexterm:[<primary>,<secondary>,<tertiary>]`::\n`(((<primary>,<secondary>,<tertiary>)))`::\n    This inline macro generates an index term (the `<secondary>` and\n    `<tertiary>` positional attributes are optional). Example:\n    `indexterm:[Tigers,Big cats]` (or, using the alternative syntax\n    `(((Tigers,Big cats)))`.  Index terms that have secondary and\n    tertiary entries also generate separate index terms for the\n    secondary and tertiary entries. The index terms appear in the\n    index, not the primary text flow.\n\n`indexterm2:[<primary>]`::\n`((<primary>))`::\n    This inline macro generates an index term that appears in both the\n    index and the primary text flow.  The `<primary>` should not be\n    padded to the left or right with white space characters.\n\nFor working examples see the `article.txt` and `book.txt` documents in\nthe AsciiDoc `./doc` distribution directory.\n\nNOTE: Index entries only really make sense if you are generating\nDocBook markup -- DocBook conversion programs automatically generate\nan index at the point an 'Index' section appears in source document.\n\n\n[[X105]]\nCallouts\n--------\nCallouts are a mechanism for annotating verbatim text (for example:\nsource code, computer output and user input). Callout markers are\nplaced inside the annotated text while the actual annotations are\npresented in a callout list after the annotated text. Here's an\nexample:\n\n---------------------------------------------------------------------\n .MS-DOS directory listing\n -----------------------------------------------------\n 10/17/97   9:04         <DIR>    bin\n 10/16/97  14:11         <DIR>    DOS            \\<1>\n 10/16/97  14:40         <DIR>    Program Files\n 10/16/97  14:46         <DIR>    TEMP\n 10/17/97   9:04         <DIR>    tmp\n 10/16/97  14:37         <DIR>    WINNT\n 10/16/97  14:25             119  AUTOEXEC.BAT   \\<2>\n  2/13/94   6:21          54,619  COMMAND.COM    \\<2>\n 10/16/97  14:25             115  CONFIG.SYS     \\<2>\n 11/16/97  17:17      61,865,984  pagefile.sys\n  2/13/94   6:21           9,349  WINA20.386     \\<3>\n -----------------------------------------------------\n\n \\<1> This directory holds MS-DOS.\n \\<2> System startup code for DOS.\n \\<3> Some sort of Windows 3.1 hack.\n---------------------------------------------------------------------\n\nWhich renders:\n\n.MS-DOS directory listing\n-----------------------------------------------------\n10/17/97   9:04         <DIR>    bin\n10/16/97  14:11         <DIR>    DOS            <1>\n10/16/97  14:40         <DIR>    Program Files\n10/16/97  14:46         <DIR>    TEMP\n10/17/97   9:04         <DIR>    tmp\n10/16/97  14:37         <DIR>    WINNT\n10/16/97  14:25             119  AUTOEXEC.BAT   <2>\n 2/13/94   6:21          54,619  COMMAND.COM    <2>\n10/16/97  14:25             115  CONFIG.SYS     <2>\n11/16/97  17:17      61,865,984  pagefile.sys\n 2/13/94   6:21           9,349  WINA20.386     <3>\n-----------------------------------------------------\n\n<1> This directory holds MS-DOS.\n<2> System startup code for DOS.\n<3> Some sort of Windows 3.1 hack.\n\n.Explanation\n- The callout marks are whole numbers enclosed in angle brackets --\n  they refer to the correspondingly numbered item in the following\n  callout list.\n- By default callout marks are confined to 'LiteralParagraphs',\n  'LiteralBlocks' and 'ListingBlocks' (although this is a\n  configuration file option and can be changed).\n- Callout list item numbering is fairly relaxed -- list items can\n  start with `<n>`, `n>` or `>` where `n` is the optional list item\n  number (in the latter case list items starting with a single `>`\n  character are implicitly numbered starting at one).\n- Callout lists should not be nested.\n- Callout lists start list items hard against the left margin.\n- If you want to present a number inside angle brackets you'll need to\n  escape it with a backslash to prevent it being interpreted as a\n  callout mark.\n\nNOTE: Define the AsciiDoc 'icons' attribute (for example using the `-a\nicons` command-line option) to display callout icons.\n\nImplementation Notes\n~~~~~~~~~~~~~~~~~~~~\nCallout marks are generated by the 'callout' inline macro while\ncallout lists are generated using the 'callout' list definition. The\n'callout' macro and 'callout' list are special in that they work\ntogether. The 'callout' inline macro is not enabled by the normal\n'macros' substitutions option, instead it has its own 'callouts'\nsubstitution option.\n\nThe following attributes are available during inline callout macro\nsubstitution:\n\n`{index}`::\n    The callout list item index inside the angle brackets.\n`{coid}`::\n    An identifier formatted like `CO<listnumber>-<index>` that\n    uniquely identifies the callout mark. For example `CO2-4`\n    identifies the fourth callout mark in the second set of callout\n    marks.\n\nThe `{coids}` attribute can be used during callout list item\nsubstitution -- it is a space delimited list of callout IDs that refer\nto the explanatory list item.\n\nIncluding callouts in included code\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nYou can annotate working code examples with callouts -- just remember\nto put the callouts inside source code comments. This example displays\nthe `test.py` source file (containing a single callout) using the\n'source' (code highlighter) filter:\n\n.AsciiDoc source\n---------------------------------------------------------------------\n [source,python]\n -------------------------------------------\n \\include::test.py[]\n -------------------------------------------\n\n \\<1> Print statement.\n---------------------------------------------------------------------\n\n.Included `test.py` source\n---------------------------------------------------------------------\nprint 'Hello World!'   # \\<1>\n---------------------------------------------------------------------\n\n\nMacros\n------\nMacros are a mechanism for substituting parametrized text into output\ndocuments.\n\nMacros have a 'name', a single 'target' argument and an 'attribute\nlist'.  The usual syntax is `<name>:<target>[<attrlist>]` (for\ninline macros) and `<name>::<target>[<attrlist>]` (for block\nmacros).  Here are some examples:\n\n  http://www.docbook.org/[DocBook.org]\n  include::chapt1.txt[tabsize=2]\n  mailto:srackham@gmail.com[]\n\n.Macro behavior\n- `<name>` is the macro name. It can only contain letters, digits or\n  dash characters and cannot start with a dash.\n- The optional `<target>` cannot contain white space characters.\n- `<attrlist>` is a <<X21,list of attributes>> enclosed in square\n  brackets.\n- `]` characters inside attribute lists must be escaped with a\n  backslash.\n- Expansion of macro references can normally be escaped by prefixing a\n  backslash character (see the AsciiDoc 'FAQ' for examples of\n  exceptions to this rule).\n- Attribute references in block macros are expanded.\n- The substitutions performed prior to Inline macro macro expansion\n  are determined by the inline context.\n- Macros are processed in the order they appear in the configuration\n  file(s).\n- Calls to inline macros can be nested inside different inline macros\n  (an inline macro call cannot contain a nested call to itself).\n- In addition to `<name>`, `<target>` and `<attrlist>` the\n  `<passtext>` and `<subslist>` named groups are available to\n  <<X77,passthrough macros>>. A macro is a passthrough macro if the\n  definition includes a `<passtext>` named group.\n\nInline Macros\n~~~~~~~~~~~~~\nInline Macros occur in an inline element context. Predefined Inline\nmacros include 'URLs', 'image' and 'link' macros.\n\nURLs\n^^^^\n'http', 'https', 'ftp', 'file', 'mailto' and 'callto' URLs are\nrendered using predefined inline macros.\n\n- If you don't need a custom link caption you can enter the 'http',\n  'https', 'ftp', 'file' URLs and email addresses without any special\n  macro syntax.\n- If the `<attrlist>` is empty the URL is displayed.\n\nHere are some examples:\n\n  http://www.docbook.org/[DocBook.org]\n  http://www.docbook.org/\n  mailto:joe.bloggs@foobar.com[email Joe Bloggs]\n  joe.bloggs@foobar.com\n\nWhich are rendered:\n\nhttp://www.docbook.org/[DocBook.org]\n\nhttp://www.docbook.org/\n\nmailto:joe.bloggs@foobar.com[email Joe Bloggs]\n\njoe.bloggs@foobar.com\n\nIf the `<target>` necessitates space characters use `%20`, for example\n`large%20image.png`.\n\nInternal Cross References\n^^^^^^^^^^^^^^^^^^^^^^^^^\nTwo AsciiDoc inline macros are provided for creating hypertext links\nwithin an AsciiDoc document. You can use either the standard macro\nsyntax or the (preferred) alternative.\n\n[[X30]]\nanchor\n++++++\nUsed to specify hypertext link targets:\n\n  [[<id>,<xreflabel>]]\n  anchor:<id>[<xreflabel>]\n\nThe `<id>` is a unique string that conforms to the output markup's\nanchor syntax. The optional `<xreflabel>` is the text to be displayed\nby captionless 'xref' macros that refer to this anchor. The optional\n`<xreflabel>` is only really useful when generating DocBook output.\nExample anchor:\n\n  [[X1]]\n\nYou may have noticed that the syntax of this inline element is the\nsame as that of the <<X41,BlockId block element>>, this is no\ncoincidence since they are functionally equivalent.\n\nxref\n++++\nCreates a hypertext link to a document anchor.\n\n  <<<id>,<caption>>>\n  xref:<id>[<caption>]\n\nThe `<id>` refers to an anchor ID. The optional `<caption>` is the\nlink's displayed text. Example:\n\n  <<X21,attribute lists>>\n\nIf `<caption>` is not specified then the displayed text is\nauto-generated:\n\n- The AsciiDoc 'xhtml11' and 'html5' backends display the `<id>`\n  enclosed in square brackets.\n- If DocBook is produced the DocBook toolchain is responsible for the\n  displayed text which will normally be the referenced figure, table\n  or section title number followed by the element's title text.\n\nHere is an example:\n\n---------------------------------------------------------------------\n[[tiger_image]]\n.Tyger tyger\nimage::tiger.png[]\n\nThis can be seen in <<tiger_image>>.\n---------------------------------------------------------------------\n\nLinking to Local Documents\n^^^^^^^^^^^^^^^^^^^^^^^^^^\nHypertext links to files on the local file system are specified using\nthe 'link' inline macro.\n\n  link:<target>[<caption>]\n\nThe 'link' macro generates relative URLs. The link macro `<target>` is\nthe target file name (relative to the file system location of the\nreferring document). The optional `<caption>` is the link's displayed\ntext. If `<caption>` is not specified then `<target>` is displayed.\nExample:\n\n  link:downloads/foo.zip[download foo.zip]\n\nYou can use the `<filename>#<id>` syntax to refer to an anchor within\na target document but this usually only makes sense when targeting\nHTML documents.\n\n[[X9]]\nImages\n^^^^^^\nInline images are inserted into the output document using the 'image'\nmacro. The inline syntax is:\n\n  image:<target>[<attributes>]\n\nThe contents of the image file `<target>` is displayed. To display the\nimage its file format must be supported by the target backend\napplication. HTML and DocBook applications normally support PNG or JPG\nfiles.\n\n`<target>` file name paths are relative to the location of the\nreferring document.\n\n[[X55]]\n.Image macro attributes\n- The optional 'alt' attribute is also the first positional attribute,\n  it specifies alternative text which is displayed if the output\n  application is unable to display the image file (see also\n  http://htmlhelp.com/feature/art3.htm[Use of ALT texts in IMGs]). For\n  example:\n\n  image:images/logo.png[Company Logo]\n\n- The optional 'title' attribute provides a title for the image. The\n  <<X49,block image macro>> renders the title alongside the image.\n  The inline image macro displays the title as a popup ``tooltip'' in\n  visual browsers (AsciiDoc HTML outputs only).\n\n- The optional `width` and `height` attributes scale the image size\n  and can be used in any combination. The units are pixels.  The\n  following example scales the previous example to a height of 32\n  pixels:\n\n  image:images/logo.png[\"Company Logo\",height=32]\n\n- The optional `link` attribute is used to link the image to an\n  external document. The following example links a screenshot\n  thumbnail to a full size version:\n\n  image:screen-thumbnail.png[height=32,link=\"screen.png\"]\n\n- The optional `scaledwidth` attribute is only used in DocBook block\n  images (specifically for PDF documents). The following example\n  scales the images to 75% of the available print width:\n\n  image::images/logo.png[scaledwidth=\"75%\",alt=\"Company Logo\"]\n\n- The image `scale` attribute sets the DocBook `imagedata` element\n  `scale` attribute.\n\n- The optional `align` attribute is used for horizontal image\n  alignment.  Allowed values are `center`, `left` and `right`. For\n  example:\n\n  image::images/tiger.png[\"Tiger image\",align=\"left\"]\n\n- The optional `float` attribute floats the image `left` or `right` on\n  the page (works with HTML outputs only, has no effect on DocBook\n  outputs). `float` and `align` attributes are mutually exclusive.\n  Use the `unfloat::[]` block macro to stop floating.\n\nComment Lines\n^^^^^^^^^^^^^\nSee <<X25,comment block macro>>.\n\nBlock Macros\n~~~~~~~~~~~~\nA Block macro reference must be contained in a single line separated\neither side by a blank line or a block delimiter.\n\nBlock macros behave just like Inline macros, with the following\ndifferences:\n\n- They occur in a block context.\n- The default syntax is `<name>::<target>[<attrlist>]` (two\n  colons, not one).\n- Markup template section names end in `-blockmacro` instead of\n  `-inlinemacro`.\n\nBlock Identifier\n^^^^^^^^^^^^^^^^\nThe Block Identifier macro sets the `id` attribute and has the same\nsyntax as the <<X30,anchor inline macro>> since it performs\nessentially the same function -- block templates use the `id`\nattribute as a block element ID. For example:\n\n  [[X30]]\n\nThis is equivalent to the `[id=\"X30\"]` <<X79,AttributeList element>>).\n\n[[X49]]\nImages\n^^^^^^\nThe 'image' block macro is used to display images in a block context.\nThe syntax is:\n\n  image::<target>[<attributes>]\n\nThe block `image` macro has the same <<X55,macro attributes>> as it's\n<<X9,inline image macro>> counterpart.\n\nBlock images can be titled by preceding the 'image' macro with a\n'BlockTitle'.  DocBook toolchains normally number titled block images\nand optionally list them in an automatically generated 'List of\nFigures' backmatter section.\n\nThis example:\n\n  .Main circuit board\n  image::images/layout.png[J14P main circuit board]\n\nis equivalent to:\n\n  image::images/layout.png[\"J14P main circuit board\",\n                            title=\"Main circuit board\"]\n\nA title prefix that can be inserted with the `caption` attribute\n(HTML backends). For example:\n\n  .Main circuit board\n  [caption=\"Figure 2: \"]\n  image::images/layout.png[J14P main circuit board]\n\n[[X66]]\n.Embedding images in XHTML documents\n*********************************************************************\nIf you define the `data-uri` attribute then images will be embedded in\nXHTML outputs using the\nhttp://en.wikipedia.org/wiki/Data:_URI_scheme[data URI scheme].  You\ncan use the 'data-uri' attribute with the 'xhtml11' and 'html5'\nbackends to produce single-file XHTML documents with embedded images\nand CSS, for example:\n\n  $ asciidoc -a data-uri mydocument.txt\n\n[NOTE]\n======\n- All current popular browsers support data URIs, although versions\n  of Internet Explorer prior to version 8 do not.\n- Some browsers limit the size of data URIs.\n======\n*********************************************************************\n\n[[X25]]\nComment Lines\n^^^^^^^^^^^^^\nSingle lines starting with two forward slashes hard up against the\nleft margin are treated as comments. Comment lines do not appear in\nthe output unless the 'showcomments' attribute is defined.  Comment\nlines have been implemented as both block and inline macros so a\ncomment line can appear as a stand-alone block or within block elements\nthat support inline macro expansion. Example comment line:\n\n  // This is a comment.\n\nIf the 'showcomments' attribute is defined comment lines are written\nto the output:\n\n- In DocBook the comment lines are enclosed by the 'remark' element\n  (which may or may not be rendered by your toolchain).\n- The 'showcomments' attribute does not expose <<X26,Comment Blocks>>.\n  Comment Blocks are never passed to the output.\n\nSystem Macros\n~~~~~~~~~~~~~\nSystem macros are block macros that perform a predefined task and are\nhardwired into the asciidoc(1) program.\n\n- You can escape system macros with a leading backslash character\n  (as you can with other macros).\n- The syntax and tasks performed by system macros is built into\n  asciidoc(1) so they don't appear in configuration files.  You can\n  however customize the syntax by adding entries to a configuration\n  file `[macros]` section.\n\n[[X63]]\nInclude Macros\n^^^^^^^^^^^^^^\nThe `include` and `include1`  system macros to include the contents of\na named file into the source document.\n\nThe `include` macro includes a file as if it were part of the parent\ndocument -- tabs are expanded and system macros processed. The\ncontents of `include1` files are not subject to tab expansion or\nsystem macro processing nor are attribute or lower priority\nsubstitutions performed. The `include1` macro's intended use is to\ninclude verbatim embedded CSS or scripts into configuration file\nheaders.  Example:\n\n------------------------------------\n\\include::chapter1.txt[tabsize=4]\n------------------------------------\n\n.Include macro behavior\n- If the included file name is specified with a relative path then the\n  path is relative to the location of the referring document.\n- Include macros can appear inside configuration files.\n- Files included from within 'DelimitedBlocks' are read to completion\n  to avoid false end-of-block underline termination.\n- Attribute references are expanded inside the include 'target'; if an\n  attribute is undefined then the included file is silently skipped.\n- The 'tabsize' macro attribute sets the number of space characters to\n  be used for tab expansion in the included file (not applicable to\n  `include1` macro).\n- The 'depth' macro attribute sets the maximum permitted number of\n  subsequent nested includes (not applicable to `include1` macro which\n  does not process nested includes). Setting 'depth' to '1' disables\n  nesting inside the included file. By default, nesting is limited to\n  a depth of ten.\n- If the he 'warnings' attribute is set to 'False' (or any other\n  Python literal that evaluates to boolean false) then no warning\n  message is printed if the included file does not exist. By default\n  'warnings' are enabled.\n- Internally the `include1` macro is translated to the `include1`\n  system attribute which means it must be evaluated in a region where\n  attribute substitution is enabled. To inhibit nested substitution in\n  included files it is preferable to use the `include` macro and set\n  the attribute `depth=1`.\n\nConditional Inclusion Macros\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nLines of text in the source document can be selectively included or\nexcluded from processing based on the existence (or not) of a document\nattribute.\n\nDocument text between the `ifdef` and `endif` macros is included if a\ndocument attribute is defined:\n\n  ifdef::<attribute>[]\n  :\n  endif::<attribute>[]\n\nDocument text between the `ifndef` and `endif` macros is not included\nif a document attribute is defined:\n\n  ifndef::<attribute>[]\n  :\n  endif::<attribute>[]\n\n`<attribute>` is an attribute name which is optional in the trailing\n`endif` macro.\n\nIf you only want to process a single line of text then the text can be\nput inside the square brackets and the `endif` macro omitted, for\nexample:\n\n  ifdef::revnumber[Version number 42]\n\nIs equivalent to:\n\n  ifdef::revnumber[]\n  Version number 42\n  endif::revnumber[]\n\n'ifdef' and 'ifndef' macros also accept multiple attribute names:\n\n- Multiple ',' separated attribute names evaluate to defined if one\n  or more of the attributes is defined, otherwise it's value is\n  undefined.\n- Multiple '+' separated attribute names evaluate to defined if all\n  of the attributes is defined, otherwise it's value is undefined.\n\nDocument text between the `ifeval` and `endif` macros is included if\nthe Python expression inside the square brackets is true. Example:\n\n  ifeval::[{rs458}==2]\n  :\n  endif::[]\n\n- Document attribute references are expanded before the expression is\n  evaluated.\n- If an attribute reference is undefined then the expression is\n  considered false.\n\nTake a look at the `*.conf` configuration files in the AsciiDoc\ndistribution for examples of conditional inclusion macro usage.\n\nExecutable system macros\n^^^^^^^^^^^^^^^^^^^^^^^^\nThe 'eval', 'sys' and 'sys2' block macros exhibit the same behavior as\ntheir same named <<X24, system attribute references>>. The difference\nis that system macros occur in a block macro context whereas system\nattributes are confined to inline contexts where attribute\nsubstitution is enabled.\n\nThe following example displays a long directory listing inside a\nliteral block:\n\n  ------------------\n  sys::[ls -l *.txt]\n  ------------------\n\nNOTE: There are no block macro versions of the 'eval3' and 'sys3'\nsystem attributes.\n\nTemplate System Macro\n^^^^^^^^^^^^^^^^^^^^^\nThe `template` block macro allows the inclusion of one configuration\nfile template section within another.  The following example includes\nthe `[admonitionblock]` section in the `[admonitionparagraph]`\nsection:\n\n  [admonitionparagraph]\n  template::[admonitionblock]\n\n.Template macro behavior\n- The `template::[]` macro is useful for factoring configuration file\n  markup.\n- `template::[]` macros cannot be nested.\n- `template::[]` macro expansion is applied after all configuration\n  files have been read.\n\n\n[[X77]]\nPassthrough macros\n~~~~~~~~~~~~~~~~~~\nPassthrough macros are analogous to <<X76,passthrough blocks>> and are\nused to pass text directly to the output. The substitution performed\non the text is determined by the macro definition but can be overridden\nby the `<subslist>`.  The usual syntax is\n`<name>:<subslist>[<passtext>]` (for inline macros) and\n`<name>::<subslist>[<passtext>]` (for block macros). Passthroughs, by\ndefinition, take precedence over all other text substitutions.\n\npass::\n  Inline and block. Passes text unmodified (apart from explicitly\n  specified substitutions). Examples:\n\n  pass:[<q>To be or not to be</q>]\n  pass:attributes,quotes[<u>the '{author}'</u>]\n\nasciimath, latexmath::\n  Inline and block. Passes text unmodified.  Used for\n  <<X78,mathematical formulas>>.\n\n\\+++::\n  Inline and block. The triple-plus passthrough is functionally\n  identical to the 'pass' macro but you don't have to escape `]`\n  characters and you can prefix with quoted attributes in the inline\n  version. Example:\n\n  Red [red]+++`sum_(i=1)\\^n i=(n(n+1))/2`$+++ AsciiMathML formula\n\n$$::\n  Inline and block. The double-dollar passthrough is functionally\n  identical to the triple-plus passthrough with one exception: special\n  characters are escaped. Example:\n\n  $$`[[a,b],[c,d]]((n),(k))`$$\n\n[[X80]]`::\n  Text quoted with single backtick characters constitutes an 'inline\n  literal' passthrough. The enclosed text is rendered in a monospaced\n  font and is only subject to special character substitution.  This\n  makes sense since monospace text is usually intended to be rendered\n  literally and often contains characters that would otherwise have to\n  be escaped. If you need monospaced text containing inline\n  substitutions use a <<X81,plus character instead of a backtick>>.\n\nMacro Definitions\n~~~~~~~~~~~~~~~~~\nEach entry in the configuration `[macros]` section is a macro\ndefinition which can take one of the following forms:\n\n`<pattern>=<name>[<subslist]`:: Inline macro definition.\n`<pattern>=#<name>[<subslist]`:: Block macro definition.\n`<pattern>=+<name>[<subslist]`:: System macro definition.\n`<pattern>`:: Delete the existing macro with this `<pattern>`.\n\n`<pattern>` is a Python regular expression and `<name>` is the name of\na markup template. If `<name>` is omitted then it is the value of the\nregular expression match group named 'name'.  The optional\n`[<subslist]` is a comma-separated list of substitution names enclosed\nin `[]` brackets, it sets the default substitutions for passthrough\ntext, if omitted then no passthrough substitutions are performed.\n\n.Pattern named groups\nThe following named groups can be used in macro `<pattern>` regular\nexpressions and are available as markup template attributes:\n\nname::\n  The macro name.\n\ntarget::\n  The macro target.\n\nattrlist::\n  The macro attribute list.\n\npasstext::\n  Contents of this group are passed unmodified to the output subject\n  only to 'subslist' substitutions.\n\nsubslist::\n  Processed as a comma-separated list of substitution names for\n  'passtext' substitution, overrides the the macro definition\n  'subslist'.\n\n.Here's what happens during macro substitution\n- Each contextually relevant macro 'pattern' from the `[macros]`\n  section is matched against the input source line.\n- If a match is found the text to be substituted is loaded from a\n  configuration markup template section named like\n  `<name>-inlinemacro` or `<name>-blockmacro` (depending on the macro\n  type).\n- Global and macro attribute list attributes are substituted in the\n  macro's markup template.\n- The substituted template replaces the macro reference in the output\n  document.\n\n\n[[X98]]\nHTML 5 audio and video block macros\n-----------------------------------\nThe 'html5' backend 'audio' and 'video' block macros generate the HTML\n5 'audio' and 'video' elements respectively.  They follow the usual\nAsciiDoc block macro syntax `<name>::<target>[<attrlist>]` where:\n\n[horizontal]\n`<name>`:: 'audio' or 'video'.\n`<target>`:: The URL or file name of the video or audio file.\n`<attrlist>`:: A list of named attributes (see below).\n\n.Audio macro attributes\n[options=\"header\",cols=\"1,5\",frame=\"topbot\"]\n|====================================================================\n|Name | Value\n|options\n|A comma separated list of one or more of the following items:\n'autoplay', 'loop' which correspond to the same-named HTML 5 'audio'\nelement boolean attributes.  By default the player 'controls' are\nenabled, include the 'nocontrols' option value to hide them.\n|====================================================================\n\n.Video macro attributes\n[options=\"header\",cols=\"1,5\",frame=\"topbot\"]\n|====================================================================\n|Name   | Value\n|height | The height of the player in pixels.\n|width  | The width of the player in pixels.\n|poster | The URL or file name of an image representing the video.\n|options\n|A comma separated list of one or more of the following items:\n'autoplay', 'loop' and 'nocontrols'. The 'autoplay' and 'loop' options\ncorrespond to the same-named HTML 5 'video' element boolean\nattributes.  By default the player 'controls' are enabled, include the\n'nocontrols' option value to hide them.\n|====================================================================\n\nExamples:\n\n---------------------------------------------------------------------\naudio::images/example.ogg[]\n\nvideo::gizmo.ogv[width=200,options=\"nocontrols,autoplay\"]\n\n.Example video\nvideo::gizmo.ogv[]\n\nvideo::http://www.808.dk/pics/video/gizmo.ogv[]\n---------------------------------------------------------------------\n\nIf your needs are more complex put raw HTML 5 in a markup block, for\nexample (from http://www.808.dk/?code-html-5-video):\n\n---------------------------------------------------------------------\n++++\n<video poster=\"pics/video/gizmo.jpg\" id=\"video\" style=\"cursor: pointer;\" >\n  <source src=\"pics/video/gizmo.mp4\" />\n  <source src=\"pics/video/gizmo.webm\" type=\"video/webm\" />\n  <source src=\"pics/video/gizmo.ogv\" type=\"video/ogg\" />\n  Video not playing? <a href=\"pics/video/gizmo.mp4\">Download file</a> instead.\n</video>\n\n<script type=\"text/javascript\">\n  var video = document.getElementById('video');\n  video.addEventListener('click',function(){\n    video.play();\n  },false);\n</script>\n++++\n---------------------------------------------------------------------\n\n\nTables\n------\nThe AsciiDoc table syntax looks and behaves like other delimited block\ntypes and supports standard <<X73,block configuration entries>>.\nFormatting is easy to read and, just as importantly, easy to enter.\n\n- Cells and columns can be formatted using built-in customizable styles.\n- Horizontal and vertical cell alignment can be set on columns and\n  cell.\n- Horizontal and vertical cell spanning is supported.\n\n.Use tables sparingly\n*********************************************************************\nWhen technical users first start creating documents, tables (complete\nwith column spanning and table nesting) are often considered very\nimportant. The reality is that tables are seldom used, even in\ntechnical documentation.\n\nTry this exercise: thumb through your library of technical books,\nyou'll be surprised just how seldom tables are actually used, even\nless seldom are tables containing block elements (such as paragraphs\nor lists) or spanned cells. This is no accident, like figures, tables\nare outside the normal document flow -- tables are for consulting not\nfor reading.\n\nTables are designed for, and should normally only be used for,\ndisplaying column oriented tabular data.\n*********************************************************************\n\nExample tables\n~~~~~~~~~~~~~~\n\n.Simple table\n[width=\"15%\"]\n|=======\n|1 |2 |A\n|3 |4 |B\n|5 |6 |C\n|=======\n\n.AsciiDoc source\n---------------------------------------------------------------------\n[width=\"15%\"]\n|=======\n|1 |2 |A\n|3 |4 |B\n|5 |6 |C\n|=======\n---------------------------------------------------------------------\n\n.Columns formatted with strong, monospaced and emphasis styles\n[width=\"50%\",cols=\">s,^m,e\",frame=\"topbot\",options=\"header,footer\"]\n|==========================\n|      2+|Columns 2 and 3\n|1       |Item 1  |Item 1\n|2       |Item 2  |Item 2\n|3       |Item 3  |Item 3\n|4       |Item 4  |Item 4\n|footer 1|footer 2|footer 3\n|==========================\n\n.AsciiDoc source\n---------------------------------------------------------------------\n.An example table\n[width=\"50%\",cols=\">s,^m,e\",frame=\"topbot\",options=\"header,footer\"]\n|==========================\n|      2+|Columns 2 and 3\n|1       |Item 1  |Item 1\n|2       |Item 2  |Item 2\n|3       |Item 3  |Item 3\n|4       |Item 4  |Item 4\n|footer 1|footer 2|footer 3\n|==========================\n---------------------------------------------------------------------\n\n.Horizontal and vertical source data\n[width=\"80%\",cols=\"3,^2,^2,10\",options=\"header\"]\n|=========================================================\n|Date |Duration |Avg HR |Notes\n\n|22-Aug-08 |10:24 | 157 |\nWorked out MSHR (max sustainable heart rate) by going hard\nfor this interval.\n\n|22-Aug-08 |23:03 | 152 |\nBack-to-back with previous interval.\n\n|24-Aug-08 |40:00 | 145 |\nModerately hard interspersed with 3x 3min intervals (2min\nhard + 1min really hard taking the HR up to 160).\n\n|=========================================================\n\nShort cells can be entered horizontally, longer cells vertically.  The\ndefault behavior is to strip leading and trailing blank lines within a\ncell. These characteristics aid readability and data entry.\n\n.AsciiDoc source\n---------------------------------------------------------------------\n.Windtrainer workouts\n[width=\"80%\",cols=\"3,^2,^2,10\",options=\"header\"]\n|=========================================================\n|Date |Duration |Avg HR |Notes\n\n|22-Aug-08 |10:24 | 157 |\nWorked out MSHR (max sustainable heart rate) by going hard\nfor this interval.\n\n|22-Aug-08 |23:03 | 152 |\nBack-to-back with previous interval.\n\n|24-Aug-08 |40:00 | 145 |\nModerately hard interspersed with 3x 3min intervals (2min\nhard + 1min really hard taking the HR up to 160).\n\n|=========================================================\n---------------------------------------------------------------------\n\n.A table with externally sourced CSV data\n[format=\"csv\",cols=\"^1,4*2\",options=\"header\"]\n|===================================================\nID,Customer Name,Contact Name,Customer Address,Phone\ninclude::customers.csv[]\n|===================================================\n\n.AsciiDoc source\n---------------------------------------------------------------------\n[format=\"csv\",cols=\"^1,4*2\",options=\"header\"]\n|===================================================\nID,Customer Name,Contact Name,Customer Address,Phone\n\\include::customers.csv[]\n|===================================================\n---------------------------------------------------------------------\n\n\n.Cell spans, alignments and styles\n[cols=\"e,m,^,>s\",width=\"25%\"]\n|============================\n|1 >s|2 |3 |4\n^|5 2.2+^.^|6 .3+<.>m|7\n^|8\n|9 2+>|10\n|============================\n\n.AsciiDoc source\n---------------------------------------------------------------------\n[cols=\"e,m,^,>s\",width=\"25%\"]\n|============================\n|1 >s|2 |3 |4\n^|5 2.2+^.^|6 .3+<.>m|7\n^|8\n|9 2+>|10\n|============================\n---------------------------------------------------------------------\n\n[[X68]]\nTable input data formats\n~~~~~~~~~~~~~~~~~~~~~~~~\nAsciiDoc table data can be 'psv', 'dsv' or 'csv' formatted.  The\ndefault table format is 'psv'.\n\nAsciiDoc 'psv' ('Prefix Separated Values') and 'dsv' ('Delimiter\nSeparated Values') formats are cell oriented -- the table is treated\nas a sequence of cells -- there are no explicit row separators.\n\n- 'psv' prefixes each cell with a separator whereas 'dsv' delimits\n  cells with a separator.\n- 'psv' and 'dsv' separators are Python regular expressions.\n- The default 'psv' separator contains <<X84, cell specifier>> related\n  named regular expression groups.\n- The default 'dsv' separator is `:|\\n` (a colon or a new line\n  character).\n- 'psv' and 'dsv' cell separators can be escaped by preceding them\n  with a backslash character.\n\nHere are four 'psv' cells (the second item spans two columns; the\nlast contains an escaped separator):\n\n  |One 2+|Two and three |A \\| separator character\n\n'csv'  is the quasi-standard row oriented 'Comma Separated Values\n(CSV)' format commonly used to import and export spreadsheet and\ndatabase data.\n\n[[X69]]\nTable attributes\n~~~~~~~~~~~~~~~~\nTables can be customized by the following attributes:\n\nformat::\n'psv' (default), 'dsv' or 'csv' (See <<X68, Table Data Formats>>).\n\nseparator::\nThe cell separator. A Python regular expression ('psv' and 'dsv'\nformats) or a single character ('csv' format).\n\nframe::\nDefines the table border and can take the following values: 'topbot'\n(top and bottom), 'all' (all sides), 'none' and 'sides' (left and\nright sides). The default value is 'all'.\n\ngrid::\nDefines which ruler lines are drawn between table rows and columns.\nThe 'grid' attribute value can be any of the following values: 'none',\n'cols', 'rows' and 'all'. The default value is 'all'.\n\nalign::\nUse the 'align' attribute to horizontally align the table on the\npage (works with HTML outputs only, has no effect on DocBook outputs).\nThe following values are valid: 'left', 'right', and 'center'.\n\nfloat::\nUse the 'float' attribute to float the table 'left' or 'right' on the\npage (works with HTML outputs only, has no effect on DocBook outputs).\nFloating only makes sense in conjunction with a table 'width'\nattribute value of less than 100% (otherwise the table will take up\nall the available space).  'float' and 'align' attributes are mutually\nexclusive.  Use the `unfloat::[]` block macro to stop floating.\n\nhalign::\nUse the 'halign' attribute to horizontally align all cells in a table.\nThe following values are valid: 'left', 'right', and 'center'\n(defaults to 'left'). Overridden by <<X70,Column specifiers>>  and\n<<X84,Cell specifiers>>.\n\nvalign::\nUse the 'valign' attribute to vertically align all cells in a table.\nThe following values are valid: 'top', 'bottom', and 'middle'\n(defaults to 'top'). Overridden by <<X70,Column specifiers>>  and\n<<X84,Cell specifiers>>.\n\noptions::\nThe 'options' attribute can contain comma separated values, for\nexample: 'header', 'footer'. By default header and footer rows are\nomitted.  See <<X74,attribute options>> for a complete list of\navailable table options.\n\ncols::\nThe 'cols' attribute is a comma separated list of <<X70,column\nspecifiers>>. For example `cols=\"2<p,2*,4p,>\"`.\n\n- If 'cols' is present it must specify all columns.\n- If the 'cols' attribute is not specified the number of columns is\n  calculated as the number of data items in the *first line* of the\n  table.\n- The degenerate form for the 'cols' attribute is an integer\n  specifying the number of columns e.g. `cols=4`.\n\nwidth::\nThe 'width' attribute is expressed as a percentage value\n('\"1%\"'...'\"99%\"'). The width specifies the table width relative to\nthe available width. HTML backends use this value to set the table\nwidth attribute. It's a bit more complicated with DocBook, see the\n<<X89,DocBook table widths>> sidebar.\n\nfilter::\nThe 'filter' attribute defines an external shell command that is\ninvoked for each cell. The built-in 'asciidoc' table style is\nimplemented using a filter.\n\n[[X89]]\n.DocBook table widths\n**********************************************************************\nThe AsciiDoc docbook backend generates CALS tables. CALS tables do not\nsupport a table width attribute -- table width can only be controlled\nby specifying absolute column widths.\n\nSpecifying absolute column widths is not media independent because\ndifferent presentation media have different physical dimensions. To\nget round this limitation both\nhttp://www.sagehill.net/docbookxsl/Tables.html#TableWidth[DocBook XSL\nStylesheets] and\nhttp://dblatex.sourceforge.net/doc/manual/ch03s05.html#sec-table-width[dblatex]\nhave implemented table width processing instructions for setting the\ntable width as a percentage of the available width. AsciiDoc emits\nthese processing instructions if the 'width' attribute is set along\nwith proportional column widths (the AsciiDoc docbook backend\n'pageunits' attribute defaults to '*').\n\nTo generate DocBook tables with absolute column widths set the\n'pageunits' attribute to a CALS absolute unit such as 'pt' and set the\n'pagewidth' attribute to match the width of the presentation media.\n**********************************************************************\n\n[[X70]]\nColumn Specifiers\n~~~~~~~~~~~~~~~~~\nColumn specifiers define how columns are rendered and appear in the\ntable <<X69,cols attribute>>.  A column specifier consists of an\noptional column multiplier followed by optional alignment, width and\nstyle values and is formatted like:\n\n  [<multiplier>*][<align>][<width>][<style>]\n\n- All components are optional. The multiplier must be first and the\n  style last. The order of `<align>` or `<width>` is not important.\n- Column `<width>` can be either an integer proportional value (1...)\n  or a percentage (1%...100%). The default value is 1. To ensure\n  portability across different backends, there is no provision for\n  absolute column widths (not to be confused with output column width\n  <<X72,markup attributes>> which are available in both percentage and\n  absolute units).\n- The '<align>' column alignment specifier is formatted like:\n\n  [<horizontal>][.<vertical>]\n+\nWhere `<horizontal>` and `<vertical>` are one of the following\ncharacters: `<`, `^` or `>` which represent 'left', 'center' and\n'right' horizontal alignment or 'top', 'middle' and 'bottom' vertical\nalignment respectively.\n\n- A `<multiplier>` can be used to specify repeated columns e.g.\n  `cols=\"4*<\"` specifies four left-justified columns. The default\n  multiplier value is 1.\n- The `<style>` name specifies a <<X71,table style>> to used to markup\n  column cells (you can use the full style names if you wish but the\n  first letter is normally sufficient).\n- Column specific styles are not applied to header rows.\n\n[[X84]]\nCell Specifiers\n~~~~~~~~~~~~~~~\nCell specifiers allow individual cells in 'psv' formatted tables to be\nspanned, multiplied, aligned and styled.  Cell specifiers prefix 'psv'\n`|` delimiters and are formatted like:\n\n  [<span>*|+][<align>][<style>]\n\n- '<span>' specifies horizontal and vertical cell spans ('+' operator) or\n  the number of times the cell is replicated ('*' operator). '<span>'\n  is formatted like:\n\n  [<colspan>][.<rowspan>]\n+\nWhere `<colspan>` and `<rowspan>` are integers specifying the number of\ncolumns and rows to span.\n\n- `<align>` specifies horizontal and vertical cell alignment an is the\n  same as in <<X70,column specifiers>>.\n- A `<style>` value is the first letter of <<X71,table style>> name.\n\nFor example, the following 'psv' formatted cell will span two columns\nand the text will be centered and emphasized:\n\n  `2+^e| Cell text`\n\n[[X71]]\nTable styles\n~~~~~~~~~~~~\nTable styles can be applied to the entire table (by setting the\n'style' attribute in the table's attribute list) or on a per column\nbasis (by specifying the style in the table's <<X69,cols attribute>>).\nTable data can be formatted using the following predefined styles:\n\ndefault::\nThe default style: AsciiDoc inline text formatting; blank lines are\ntreated as paragraph breaks.\n\nemphasis::\nLike default but all text is emphasised.\n\nmonospaced::\nLike default but all text is in a monospaced font.\n\nstrong::\nLike default but all text is bold.\n\nheader::\nApply the same style as the table header. Normally used to create a\nvertical header in the first column.\n\nasciidoc::\nWith this style table cells can contain any of the AsciiDoc elements\nthat are allowed inside document sections. This style runs asciidoc(1)\nas a filter to process cell contents. See also <<X83,Docbook table\nlimitations>>.\n\nliteral::\nNo text formatting; monospaced font; all line breaks are retained\n(the same as the AsciiDoc <<X65,LiteralBlock>> element).\n\nverse::\nAll line breaks are retained (just like the AsciiDoc <<X94,verse\nparagraph style>>).\n\n[[X72]]\nMarkup attributes\n~~~~~~~~~~~~~~~~~\nAsciiDoc makes a number of attributes available to table markup\ntemplates and tags. Column specific attributes are available when\nsubstituting the 'colspec' cell data tags.\n\npageunits::\nDocBook backend only. Specifies table column absolute width units.\nDefaults to '*'.\n\npagewidth::\nDocBook backend only. The nominal output page width in 'pageunit'\nunits. Used to calculate CALS tables absolute column and table\nwidths. Defaults to '425'.\n\ntableabswidth::\nInteger value calculated from 'width' and 'pagewidth' attributes.\nIn 'pageunit' units.\n\ntablepcwidth::\nTable width expressed as a percentage of the available width. Integer\nvalue (0..100).\n\ncolabswidth::\nInteger value calculated from 'cols' column width, 'width' and\n'pagewidth' attributes.  In 'pageunit' units.\n\ncolpcwidth::\nColumn width expressed as a percentage of the table width. Integer\nvalue (0..100).\n\ncolcount::\nTotal number of table columns.\n\nrowcount::\nTotal number of table rows.\n\nhalign::\nHorizontal cell content alignment: 'left', 'right' or 'center'.\n\nvalign::\nVertical cell content alignment: 'top', 'bottom' or 'middle'.\n\ncolnumber, colstart::\nThe number of the leftmost column occupied by the cell (1...).\n\ncolend::\nThe number of the rightmost column occupied by the cell (1...).\n\ncolspan::\nNumber of columns the cell should span.\n\nrowspan::\nNumber of rows the cell should span (1...).\n\nmorerows::\nNumber of additional rows the cell should span (0...).\n\nNested tables\n~~~~~~~~~~~~~\nAn alternative 'psv' separator character '!' can be used (instead of\n'|') in nested tables. This allows a single level of table nesting.\nColumns containing nested tables must use the 'asciidoc' style. An\nexample can be found in `./examples/website/newtables.txt`.\n\n[[X83]]\nDocBook table limitations\n~~~~~~~~~~~~~~~~~~~~~~~~~\nFully implementing tables is not trivial, some DocBook toolchains do\nbetter than others.  AsciiDoc HTML table outputs are rendered\ncorrectly in all the popular browsers -- if your DocBook generated\ntables don't look right compare them with the output generated by the\nAsciiDoc 'xhtml11' backend or try a different DocBook toolchain.  Here\nis a list of things to be aware of:\n\n- Although nested tables are not legal in DocBook 4 the FOP and\n  dblatex toolchains will process them correctly.  If you use `a2x(1)`\n  you will need to include the `--no-xmllint` option to suppress\n  DocBook validation errors.\n+\nNOTE: In theory you can nest DocBook 4 tables one level using the\n'entrytbl' element, but not all toolchains process 'entrytbl'.\n\n- DocBook only allows a subset of block elements inside table cells so\n  not all AsciiDoc elements produce valid DocBook inside table cells.\n  If you get validation errors running `a2x(1)` try the `--no-xmllint`\n  option, toolchains will often process nested block elements such as\n  sidebar blocks and floating titles correctly even though, strictly\n  speaking, they are not legal.\n\n- Text formatting in cells using the 'monospaced' table style will\n  raise validation errors because the DocBook 'literal' element was\n  not designed to support formatted text (using the 'literal' element\n  is a kludge on the part of AsciiDoc as there is no easy way to set\n  the font style in DocBook.\n\n- Cell alignments are ignored for 'verse', 'literal' or 'asciidoc'\n  table styles.\n\n\n[[X1]]\nManpage Documents\n-----------------\nSooner or later, if you program in a UNIX environment, you're going\nto have to write a man page.\n\nBy observing a couple of additional conventions (detailed below) you\ncan write AsciiDoc files that will generate HTML and PDF man pages\nplus the native manpage roff format.  The easiest way to generate roff\nmanpages from AsciiDoc source is to use the a2x(1) command. The\nfollowing example generates a roff formatted manpage file called\n`asciidoc.1` (a2x(1) uses asciidoc(1) to convert `asciidoc.1.txt` to\nDocBook which it then converts to roff using DocBook XSL Stylesheets):\n\n  a2x --doctype manpage --format manpage asciidoc.1.txt\n\n.Viewing and printing manpage files\n**********************************************************************\nUse the `man(1)` command to view the manpage file:\n\n  $ man -l asciidoc.1\n\nTo print a high quality man page to a postscript printer:\n\n  $ man -l -Tps asciidoc.1 | lpr\n\nYou could also create a PDF version of the man page by converting\nPostScript to PDF using `ps2pdf(1)`:\n\n  $ man -l -Tps asciidoc.1 | ps2pdf - asciidoc.1.pdf\n\nThe `ps2pdf(1)` command is included in the Ghostscript distribution.\n**********************************************************************\n\nTo find out more about man pages view the `man(7)` manpage\n(`man 7 man` and `man man-pages` commands).\n\n\nDocument Header\n~~~~~~~~~~~~~~~\nA manpage document Header is mandatory. The title line contains the\nman page name followed immediately by the manual section number in\nbrackets, for example 'ASCIIDOC(1)'. The title name should not contain\nwhite space and the manual section number is a single digit optionally\nfollowed by a single character.\n\nThe NAME Section\n~~~~~~~~~~~~~~~~\nThe first manpage section is mandatory, must be titled 'NAME' and must\ncontain a single paragraph (usually a single line) consisting of a\nlist of one or more comma separated command name(s) separated from the\ncommand purpose by a dash character. The dash must have at least one\nwhite space character on either side. For example:\n\n  printf, fprintf, sprintf - print formatted output\n\nThe SYNOPSIS Section\n~~~~~~~~~~~~~~~~~~~~\nThe second manpage section is mandatory and must be titled 'SYNOPSIS'.\n\nrefmiscinfo attributes\n~~~~~~~~~~~~~~~~~~~~~~\nIn addition to the automatically created man page <<X60,intrinsic\nattributes>> you can assign DocBook\nhttp://www.docbook.org/tdg5/en/html/refmiscinfo.html[refmiscinfo]\nelement 'source', 'version' and 'manual' values using AsciiDoc\n`{mansource}`, `{manversion}` and `{manmanual}` attributes\nrespectively. This example is from the AsciiDoc header of a man page\nsource file:\n\n  :man source:   AsciiDoc\n  :man version:  {revnumber}\n  :man manual:   AsciiDoc Manual\n\n\n[[X78]]\nMathematical Formulas\n---------------------\nThe 'asciimath' and 'latexmath' <<X77,passthrough macros>> along with\n'asciimath' and 'latexmath'  <<X76,passthrough blocks>> provide a\n(backend dependent) mechanism for rendering mathematical formulas. You\ncan use the following math markups:\n\nNOTE: The 'latexmath' macro used to include 'LaTeX Math' in DocBook\noutputs is not the same as the 'latexmath' macro used to include\n'LaTeX MathML' in XHTML outputs.  'LaTeX Math' applies to DocBook\noutputs that are processed by <<X31,dblatex>> and is normally used to\ngenerate PDF files.  'LaTeXMathML' is very much a subset of 'LaTeX\nMath' and applies to XHTML documents.\n\nLaTeX Math\n~~~~~~~~~~\nftp://ftp.ams.org/pub/tex/doc/amsmath/short-math-guide.pdf[LaTeX\nmath] can be included in documents that are processed by\n<<X31,dblatex(1)>>.  Example inline formula:\n\n  latexmath:[$C = \\alpha + \\beta Y^{\\gamma} + \\epsilon$]\n\nFor more examples see the {website}[AsciiDoc website] or the\ndistributed `doc/latexmath.txt` file.\n\nASCIIMathML\n~~~~~~~~~~~\n/////////////////////////////////////////////////////////////////////\nThe older ASCIIMathML 1.47 version is used instead of version 2\nbecause:\n\n1. Version 2 doesn't work when embedded.\n2. Version 2 is much larger.\n/////////////////////////////////////////////////////////////////////\n\nhttp://www1.chapman.edu/~jipsen/mathml/asciimath.html[ASCIIMathML]\nformulas can be included in XHTML documents generated using the\n'xhtml11' and 'html5' backends. To enable ASCIIMathML support you must\ndefine the 'asciimath' attribute, for example using the `-a asciimath`\ncommand-line option.  Example inline formula:\n\n  asciimath:[`x/x={(1,if x!=0),(text{undefined},if x=0):}`]\n\nFor more examples see the {website}[AsciiDoc website] or the\ndistributed `doc/asciimathml.txt` file.\n\nLaTeXMathML\n~~~~~~~~~~~\n/////////////////////////////////////////////////////////////////////\nThere is an http://math.etsu.edu/LaTeXMathML/[extended LaTeXMathML\nversion] by Jeff Knisley, in addition to a JavaScript file it requires\nthe inclusion of a CSS file.\n/////////////////////////////////////////////////////////////////////\n\n'LaTeXMathML' allows LaTeX Math style formulas to be included in XHTML\ndocuments generated using the AsciiDoc 'xhtml11' and 'html5' backends.\nAsciiDoc uses the\nhttp://www.maths.nottingham.ac.uk/personal/drw/lm.html[original\nLaTeXMathML] by Douglas Woodall.  'LaTeXMathML' is derived from\nASCIIMathML and is for users who are more familiar with or prefer\nusing LaTeX math formulas (it recognizes a subset of LaTeX Math, the\ndifferences are documented on the 'LaTeXMathML' web page).  To enable\nLaTeXMathML support you must define the 'latexmath' attribute, for\nexample using the `-a latexmath` command-line option.  Example inline\nformula:\n\n  latexmath:[$\\sum_{n=1}^\\infty \\frac{1}{2^n}$]\n\nFor more examples see the {website}[AsciiDoc website] or the\ndistributed `doc/latexmathml.txt` file.\n\nMathML\n~~~~~~\nhttp://www.w3.org/Math/[MathML] is a low level XML markup for\nmathematics. AsciiDoc has no macros for MathML but users familiar with\nthis markup could use passthrough macros and passthrough blocks to\ninclude MathML in output documents.\n\n\n[[X7]]\nConfiguration Files\n-------------------\nAsciiDoc source file syntax and output file markup is largely\ncontrolled by a set of cascading, text based, configuration files.  At\nruntime The AsciiDoc default configuration files are combined with\noptional user and document specific configuration files.\n\nConfiguration File Format\n~~~~~~~~~~~~~~~~~~~~~~~~~\nConfiguration files contain named sections. Each section begins with a\nsection name in square brackets []. The section body consists of the\nlines of text between adjacent section headings.\n\n- Section names consist of one or more alphanumeric, underscore or\n  dash characters and cannot begin or end with a dash.\n- Lines starting with a '#' character are treated as comments and\n  ignored.\n- If the section name is prefixed with a '+' character then the\n  section contents is appended to the contents of an already existing\n  same-named section.\n- Otherwise same-named sections and section entries override\n  previously loaded sections and section entries (this is sometimes\n  referred to as 'cascading').  Consequently, downstream configuration\n  files need only contain those sections and section entries that need\n  to be overridden.\n\nTIP: When creating custom configuration files you only need to include\nthe sections and entries that differ from the default configuration.\n\nTIP: The best way to learn about configuration files is to read the\ndefault configuration files in the AsciiDoc distribution in\nconjunction with asciidoc(1) output files. You can view configuration\nfile load sequence by turning on the asciidoc(1) `-v` (`--verbose`)\ncommand-line option.\n\nAsciiDoc reserves the following section names for specific purposes:\n\nmiscellaneous::\n        Configuration options that don't belong anywhere else.\nattributes::\n        Attribute name/value entries.\nspecialcharacters::\n        Special characters reserved by the backend markup.\ntags::\n        Backend markup tags.\nquotes::\n        Definitions for quoted inline character formatting.\nspecialwords::\n        Lists of words and phrases singled out for special markup.\nreplacements, replacements2, replacements3::\n        Find and replace substitution definitions.\nspecialsections::\n        Used to single out special section names for specific markup.\nmacros::\n        Macro syntax definitions.\ntitles::\n        Heading, section and block title definitions.\nparadef-*::\n        Paragraph element definitions.\nblockdef-*::\n        DelimitedBlock element definitions.\nlistdef-*::\n        List element definitions.\nlisttags-*::\n        List element tag definitions.\ntabledef-*::\n        Table element definitions.\ntabletags-*::\n        Table element tag definitions.\n\nEach line of text in these sections is a 'section entry'. Section\nentries share the following syntax:\n\nname=value::\n        The entry value is set to value.\nname=::\n        The entry value is set to a zero length string.\nname!::\n        The entry is undefined (deleted from the configuration). This\n        syntax only applies to 'attributes' and 'miscellaneous'\n        sections.\n\n.Section entry behavior\n- All equals characters inside the `name` must be escaped with a\n  backslash character.\n- `name` and `value` are stripped of leading and trailing white space.\n- Attribute names, tag entry names and markup template section names\n  consist of one or more alphanumeric, underscore or dash characters.\n  Names should not begin or end with a dash.\n- A blank configuration file section (one without any entries) deletes\n  any preceding section with the same name (applies to non-markup\n  template sections).\n\n\nMiscellaneous section\n~~~~~~~~~~~~~~~~~~~~~\nThe optional `[miscellaneous]` section specifies the following\n`name=value` options:\n\nnewline::\n        Output file line termination characters. Can include any\n        valid Python string escape sequences. The default value is\n        `\\r\\n` (carriage return, line feed). Should not be quoted or\n        contain explicit spaces (use `\\x20` instead). For example:\n\n        $ asciidoc -a 'newline=\\n' -b docbook mydoc.txt\n\noutfilesuffix::\n        The default extension for the output file, for example\n        `outfilesuffix=.html`. Defaults to backend name.\ntabsize::\n        The number of spaces to expand tab characters, for example\n        `tabsize=4`. Defaults to 8. A 'tabsize' of zero suppresses tab\n        expansion (useful when piping included files through block\n        filters). Included files can override this option using the\n        'tabsize' attribute.\npagewidth, pageunits::\n        These global table related options are documented in the\n        <<X4,Table Configuration File Definitions>> sub-section.\n\nNOTE: `[miscellaneous]` configuration file entries can be set using\nthe asciidoc(1) `-a` (`--attribute`) command-line option.\n\nTitles section\n~~~~~~~~~~~~~~\nsectiontitle::\n        Two line section title pattern. The entry value is a Python\n        regular expression containing the named group 'title'.\n\nunderlines::\n        A comma separated list of document and section title underline\n        character pairs starting with the section level 0 and ending\n        with section level 4 underline. The default setting is:\n\n        underlines=\"==\",\"--\",\"~~\",\"^^\",\"++\"\n\nsect0...sect4::\n        One line section title patterns. The entry value is a Python\n        regular expression containing the named group 'title'.\n\nblocktitle::\n        <<X42,BlockTitle element>> pattern.  The entry value is a\n        Python regular expression containing the named group 'title'.\n\nsubs::\n        A comma separated list of substitutions that are performed on\n        the document header and section titles. Defaults to 'normal'\n        substitution.\n\nTags section\n~~~~~~~~~~~~\nThe `[tags]` section contains backend tag definitions (one per\nline). Tags are used to translate AsciiDoc elements to backend\nmarkup.\n\nAn AsciiDoc tag definition is formatted like\n`<tagname>=<starttag>|<endtag>`. For example:\n\n  emphasis=<em>|</em>\n\nIn this example asciidoc(1) replaces the | character with the\nemphasized text from the AsciiDoc input file and writes the result to\nthe output file.\n\nUse the `{brvbar}` attribute reference if you need to include a | pipe\ncharacter inside tag text.\n\nAttributes section\n~~~~~~~~~~~~~~~~~~\nThe optional `[attributes]` section contains predefined attributes.\n\nIf the attribute value requires leading or trailing spaces then the\ntext text should be enclosed in quotation mark (\") characters.\n\nTo delete a attribute insert a `name!` entry in a downstream\nconfiguration file or use the asciidoc(1) `--attribute name!`\ncommand-line option (an attribute name suffixed with a `!` character\ndeletes the attribute)\n\nSpecial Characters section\n~~~~~~~~~~~~~~~~~~~~~~~~~~\nThe `[specialcharacters]` section specifies how to escape characters\nreserved by the backend markup. Each translation is specified on a\nsingle line formatted like:\n\n  <special_character>=<translated_characters>\n\nSpecial characters are normally confined to those that resolve\nmarkup ambiguity (in the case of HTML and XML markups the ampersand,\nless than and greater than characters).  The following example causes\nall occurrences of the `<` character to be replaced by `&lt;`.\n\n  <=&lt;\n\nQuoted Text section\n~~~~~~~~~~~~~~~~~~~\nQuoting is used primarily for text formatting.  The `[quotes]` section\ndefines AsciiDoc quoting characters and their corresponding backend\nmarkup tags.  Each section entry value is the name of a of a `[tags]`\nsection entry. The entry name is the character (or characters) that\nquote the text.  The following examples are taken from AsciiDoc\nconfiguration files:\n\n  [quotes]\n  _=emphasis\n\n  [tags]\n  emphasis=<em>|</em>\n\nYou can specify the left and right quote strings separately by\nseparating them with a | character, for example:\n\n  ``|''=quoted\n\nOmitting the tag will disable quoting, for example, if you don't want\nsuperscripts or subscripts put the following in a custom configuration\nfile or edit the global `asciidoc.conf` configuration file:\n\n  [quotes]\n  ^=\n  ~=\n\n<<X52,Unconstrained quotes>> are differentiated from constrained\nquotes by prefixing the tag name with a hash character, for example:\n\n  __=#emphasis\n\n.Quoted text behavior\n- Quote characters must be non-alphanumeric.\n- To minimize quoting ambiguity try not to use the same quote\n  characters in different quote types.\n\nSpecial Words section\n~~~~~~~~~~~~~~~~~~~~~\nThe `[specialwords]` section is used to single out words and phrases\nthat you want to consistently format in some way throughout your\ndocument without having to repeatedly specify the markup. The name of\neach entry corresponds to a markup template section and the entry\nvalue consists of a list of words and phrases to be marked up. For\nexample:\n\n  [specialwords]\n  strongwords=NOTE IMPORTANT\n\n  [strongwords]\n  <strong>{words}</strong>\n\nThe examples specifies that any occurrence of `NOTE` or `IMPORTANT`\nshould appear in a bold font.\n\nWords and word phrases are treated as Python regular expressions: for\nexample, the word `^NOTE` would only match `NOTE` if appeared at\nthe start of a line.\n\nAsciiDoc comes with three built-in Special Word types:\n'emphasizedwords', 'monospacedwords' and 'strongwords', each has a\ncorresponding (backend specific) markup template section. Edit the\nconfiguration files to customize existing Special Words and to add new\nones.\n\n.Special word behavior\n- Word list entries must be separated by space characters.\n- Word list entries with embedded spaces should be enclosed in quotation (\")\n  characters.\n- A `[specialwords]` section entry of the form\n  +name=word1{nbsp}[word2...]+ adds words to existing `name` entries.\n- A `[specialwords]` section entry of the form `name` undefines\n  (deletes) all existing `name` words.\n- Since word list entries are processed as Python regular expressions\n  you need to be careful to escape regular expression special\n  characters.\n- By default Special Words are substituted before Inline Macros, this\n  may lead to undesirable consequences. For example the special word\n  `foobar` would be expanded inside the macro call\n  `http://www.foobar.com[]`.  A possible solution is to emphasize\n  whole words only by defining the word using regular expression\n  characters, for example `\\bfoobar\\b`.\n- If the first matched character of a special word is a backslash then\n  the remaining characters are output without markup i.e. the\n  backslash can be used to escape special word markup.  For example\n  the special word `\\\\?\\b[Tt]en\\b` will mark up the words `Ten` and\n  `ten` only if they are not preceded by a backslash.\n\n[[X10]]\nReplacements section\n~~~~~~~~~~~~~~~~~~~~\n`[replacements]`, `[replacements2]` and `[replacements3]`\nconfiguration file entries specify find and replace text and are\nformatted like:\n\n  <find_pattern>=<replacement_text>\n\nThe find text can be a Python regular expression; the replace text can\ncontain Python regular expression group references.\n\nUse Replacement shortcuts for often used macro references, for\nexample (the second replacement allows us to backslash escape the\nmacro name):\n\n  NEW!=image:./images/smallnew.png[New!]\n  \\\\NEW!=NEW!\n\nThe only difference between the three replacement types is how they\nare applied. By default 'replacements' and 'replacement2' are applied\nin <<X102,normal>> substitution contexts whereas 'replacements3' needs\nto be configured explicitly and should only be used in backend\nconfiguration files.\n\n.Replacement behavior\n- The built-in replacements can be escaped with a backslash.\n- If the find or replace text has leading or trailing spaces then the\n  text should be enclosed in quotation (\") characters.\n- Since the find text is processed as a regular expression you need to\n  be careful to escape regular expression special characters.\n- Replacements are performed in the same order they appear in the\n  configuration file replacements section.\n\nMarkup Template Sections\n~~~~~~~~~~~~~~~~~~~~~~~~\nMarkup template sections supply backend markup for translating\nAsciiDoc elements.  Since the text is normally backend dependent\nyou'll find these sections in the backend specific configuration\nfiles. Template sections differ from other sections in that they\ncontain a single block of text instead of per line 'name=value'\nentries. A markup template section body can contain:\n\n- Attribute references\n- System macro calls.\n- A document content placeholder\n\nThe document content placeholder is a single | character and is\nreplaced by text from the source element.  Use the `{brvbar}`\nattribute reference if you need a literal | character in the template.\n\n[[X27]]\nConfiguration file names, precedence and locations\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nConfiguration files have a `.conf` file name extension; they are\nloaded from the following locations:\n\n1. The directory containing the asciidoc executable.\n2. If there is no `asciidoc.conf` file in the directory containing the\n   asciidoc executable then load from the global configuration\n   directory (normally `/etc/asciidoc` or `/usr/local/etc/asciidoc`)\n   i.e. the global configuration files directory is skipped if\n   AsciiDoc configuration files are installed in the same directory as\n   the asciidoc executable. This allows both a system wide copy and\n   multiple local copies of AsciiDoc to coexist on the same host PC.\n3. The user's `$HOME/.asciidoc` directory (if it exists).\n4. The directory containing the AsciiDoc source file.\n5. Explicit configuration files specified using:\n   - The `conf-files` attribute (one or more file names separated by a\n     `|` character). These files are loaded in the order they are\n     specified and prior to files specified using the `--conf-file`\n     command-line option.\n   - The asciidoc(1) `--conf-file`) command-line option.  The\n     `--conf-file` option can be specified multiple times, in which\n     case configuration files will be processed in the same order they\n     appear on the command-line.\n6. <<X100,Backend plugin>> configuration files are loaded from\n   subdirectories named like `backends/<backend>` in locations 1, 2\n   and 3.\n7. <<X59,Filter>> configuration files are loaded from subdirectories\n   named like `filters/<filter>` in locations 1, 2 and 3.\n\nConfiguration files from the above locations are loaded in the\nfollowing order:\n\n- The `[attributes]` section only from:\n  * `asciidoc.conf` in location 3\n  * Files from location 5.\n+\nThis first pass makes locally set attributes available in the global\n`asciidoc.conf` file.\n\n- `asciidoc.conf` from locations 1, 2, 3.\n- 'attributes', 'titles' and 'specialcharacters' sections from the\n  `asciidoc.conf` in location 4.\n- The document header is parsed at this point and we can assume the\n  'backend' and 'doctype' have now been defined.\n- Backend plugin `<backend>.conf` and `<backend>-<doctype>.conf` files\n  from locations 6.  If a backend plugin is not found then try\n  locations 1, 2 and 3 for `<backend>.conf` and\n  `<backend>-<doctype>.conf` backend configuration files.\n- Filter conf files from locations 7.\n- `lang-<lang>.conf` from locations 1, 2, 3.\n- `asciidoc.conf` from location 4.\n- `<backend>.conf` and `<backend>-<doctype>.conf` from location 4.\n- Filter conf files from location 4.\n- `<docfile>.conf` and `<docfile>-<backend>.conf` from location 4.\n- Configuration files from location 5.\n\nWhere:\n\n- `<backend>` and `<doctype>` are values specified by the asciidoc(1)\n  `-b` (`--backend`) and `-d` (`--doctype`) command-line options.\n- `<infile>` is the path name of the AsciiDoc input file without the\n  file name extension.\n- `<lang>` is a two letter country code set by the the AsciiDoc 'lang'\n  attribute.\n\n[NOTE]\n=====================================================================\nThe backend and language global configuration files are loaded *after*\nthe header has been parsed.  This means that you can set most\nattributes in the document header. Here's an example header:\n\n  Life's Mysteries\n  ================\n  :author: Hu Nose\n  :doctype: book\n  :toc:\n  :icons:\n  :data-uri:\n  :lang: en\n  :encoding: iso-8859-1\n\nAttributes set in the document header take precedence over\nconfiguration file attributes.\n\n=====================================================================\n\nTIP: Use the asciidoc(1) `-v` (`--verbose`) command-line option to see\nwhich configuration files are loaded and the order in which they are\nloaded.\n\n\nDocument Attributes\n-------------------\nA document attribute is comprised of a 'name' and a textual 'value'\nand is used for textual substitution in AsciiDoc documents and\nconfiguration files. An attribute reference (an attribute name\nenclosed in braces) is replaced by the corresponding attribute\nvalue. Attribute names are case insensitive and can only contain\nalphanumeric, dash and underscore characters.\n\nThere are four sources of document attributes (from highest to lowest\nprecedence):\n\n- Command-line attributes.\n- AttributeEntry, AttributeList, Macro and BlockId elements.\n- Configuration file `[attributes]` sections.\n- Intrinsic attributes.\n\nWithin each of these divisions the last processed entry takes\nprecedence.\n\nNOTE: If an attribute is not defined then the line containing the\nattribute reference is dropped. This property is used extensively in\nAsciiDoc configuration files to facilitate conditional markup\ngeneration.\n\n\n[[X18]]\nAttribute Entries\n-----------------\nThe `AttributeEntry` block element allows document attributes to be\nassigned within an AsciiDoc document. Attribute entries are added to\nthe global document attributes dictionary. The attribute name/value\nsyntax is a single line like:\n\n  :<name>: <value>\n\nFor example:\n\n  :Author Initials: JB\n\nThis will set an attribute reference `{authorinitials}` to the value\n'JB' in the current document.\n\nTo delete (undefine) an attribute use the following syntax:\n\n  :<name>!:\n\n.AttributeEntry behavior\n- The attribute entry line begins with colon -- no white space allowed\n  in left margin.\n- AsciiDoc converts the `<name>` to a legal attribute name (lower\n  case, alphanumeric, dash and underscore characters only -- all other\n  characters deleted). This allows more human friendly text to be\n  used.\n- Leading and trailing white space is stripped from the `<value>`.\n- Lines ending in a space followed by a plus character are continued\n  to the next line, for example:\n\n  :description: AsciiDoc is a text document format for writing notes, +\n                documentation, articles, books, slideshows, web pages +\n                and man pages.\n\n- If the `<value>` is blank then the corresponding attribute value is\n  set to an empty string.\n- Attribute references contained in the entry `<value>` will be\n  expanded.\n- By default AttributeEntry values are substituted for\n  `specialcharacters` and `attributes` (see above), if you want to\n  change or disable AttributeEntry substitution use the <<X77,pass:[]\n  inline macro>> syntax.\n- Attribute entries in the document Header are available for header\n  markup template substitution.\n- Attribute elements override configuration file and intrinsic\n  attributes but do not override command-line attributes.\n\nHere are some more attribute entry examples:\n\n---------------------------------------------------------------------\nAsciiDoc User Manual\n====================\n:author:    Stuart Rackham\n:email:     srackham@gmail.com\n:revdate:   April 23, 2004\n:revnumber: 5.1.1\n---------------------------------------------------------------------\n\nWhich creates these attributes:\n\n  {author}, {firstname}, {lastname}, {authorinitials}, {email},\n  {revdate}, {revnumber}\n\nThe previous example is equivalent to this <<X95,document header>>:\n\n---------------------------------------------------------------------\nAsciiDoc User Manual\n====================\nStuart Rackham <srackham@gmail.com>\n5.1.1, April 23, 2004\n---------------------------------------------------------------------\n\nSetting configuration entries\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nA variant of the Attribute Entry syntax allows configuration file\nsection entries and markup template sections to be set from within an\nAsciiDoc document:\n\n  :<section_name>.[<entry_name>]: <entry_value>\n\nWhere `<section_name>` is the configuration section name,\n`<entry_name>` is the name of the entry and `<entry_value>` is the\noptional entry value. This example sets the default labeled list\nstyle to 'horizontal':\n\n  :listdef-labeled.style: horizontal\n\nIt is exactly equivalent to a configuration file containing:\n\n  [listdef-labeled]\n  style=horizontal\n\n- If the `<entry_name>` is omitted then the entire section is\n  substituted with the `<entry_value>`. This feature should only be\n  used to set markup template sections. The following example sets the\n  'xref2' inline macro markup template:\n\n  :xref2-inlinemacro.: <a href=\"#{1}\">{2?{2}}</a>\n\n- No substitution is performed on configuration file attribute entries\n  and they cannot be undefined.\n- This feature can only be used in attribute entries -- configuration\n  attributes cannot be set using the asciidoc(1) command `--attribute`\n  option.\n\n[[X62]]\n.Attribute entries promote clarity and eliminate repetition\n*********************************************************************\nURLs and file names in AsciiDoc macros are often quite long -- they\nbreak paragraph flow and readability suffers.  The problem is\ncompounded by redundancy if the same name is used repeatedly.\nAttribute entries can be used to make your documents easier to read\nand write, here are some examples:\n\n  :1:         http://freshmeat.net/projects/asciidoc/\n  :homepage:  http://methods.co.nz/asciidoc/[AsciiDoc home page]\n  :new:       image:./images/smallnew.png[]\n  :footnote1: footnote:[A meaningless latin term]\n\n  Using previously defined attributes: See the {1}[Freshmeat summary]\n  or the {homepage} for something new {new}. Lorem ispum {footnote1}.\n\n.Note\n- The attribute entry definition must precede it's usage.\n- You are not limited to URLs or file names, entire macro calls or\n  arbitrary lines of text can be abbreviated.\n- Shared attributes entries could be grouped into a separate file and\n  <<X63,included>> in multiple documents.\n*********************************************************************\n\n\n[[X21]]\nAttribute Lists\n---------------\n- An attribute list is a comma separated list of attribute values.\n- The entire list is enclosed in square brackets.\n- Attribute lists are used to pass parameters to macros, blocks (using\n  the <<X79,AttributeList element>>) and inline quotes.\n\nThe list consists of zero or more positional attribute values followed\nby zero or more named attribute values.  Here are three examples: a\nsingle unquoted positional attribute; three unquoted positional\nattribute values; one positional attribute followed by two named\nattributes; the unquoted attribute value in the final example contains\ncomma (`&#44;`) and double-quote (`&#34;`) character entities:\n\n  [Hello]\n  [quote, Bertrand Russell, The World of Mathematics (1956)]\n  [\"22 times\", backcolor=\"#0e0e0e\", options=\"noborders,wide\"]\n  [A footnote&#44; &#34;with an image&#34; image:smallnew.png[]]\n\n.Attribute list behavior\n- If one or more attribute values contains a comma the all string\n  values must be quoted (enclosed in double quotation mark\n  characters).\n- If the list contains any named or quoted attributes then all string\n  attribute values must be quoted.\n- To include a double quotation mark (\") character in a quoted\n  attribute value the the quotation mark must be escaped with a\n  backslash.\n- List attributes take precedence over existing attributes.\n- List attributes can only be referenced in configuration file markup\n  templates and tags, they are not available elsewhere in the\n  document.\n- Setting a named attribute to `None` undefines the attribute.\n- Positional attributes are referred to as `{1}`,`{2}`,`{3}`,...\n- Attribute `{0}` refers to the entire list (excluding the enclosing\n  square brackets).\n- Named attribute names cannot contain dash characters.\n\n[[X75]]\nOptions attribute\n~~~~~~~~~~~~~~~~~\nIf the attribute list contains an attribute named `options` it is\nprocessed as a comma separated list of option names:\n\n- Each name generates an attribute named like `<option>-option` (where\n  `<option>` is the option name) with an empty string value.  For\n  example `[options=\"opt1,opt2,opt3\"]` is equivalent to setting the\n  following three attributes\n  `[opt1-option=\"\",opt2-option=\"\",opt2-option=\"\"]`.\n- If you define a an option attribute globally (for example with an\n  <<X18,attribute entry>>) then it will apply to all elements in the\n  document.\n- AsciiDoc implements a number of predefined options which are listed\n  in the <<X74,Attribute Options appendix>>.\n\nMacro Attribute lists\n~~~~~~~~~~~~~~~~~~~~~\nMacros calls are suffixed with an attribute list. The list may be\nempty but it cannot be omitted. List entries are used to pass\nattribute values to macro markup templates.\n\n\nAttribute References\n--------------------\nAn attribute reference is an attribute name (possibly followed by an\nadditional parameters) enclosed in curly braces.  When an attribute\nreference is encountered it is evaluated and replaced by its\ncorresponding text value.  If the attribute is undefined the line\ncontaining the attribute is dropped.\n\nThere are three types of attribute reference: 'Simple', 'Conditional'\nand 'System'.\n\n.Attribute reference evaluation\n- You can suppress attribute reference expansion by placing a\n  backslash character immediately in front of the opening brace\n  character.\n- By default attribute references are not expanded in\n  'LiteralParagraphs', 'ListingBlocks' or 'LiteralBlocks'.\n- Attribute substitution proceeds line by line in reverse line order.\n- Attribute reference evaluation is performed in the following order:\n  'Simple' then 'Conditional' and finally 'System'.\n\nSimple Attributes References\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nSimple attribute references take the form `{<name>}`. If the\nattribute name is defined its text value is substituted otherwise the\nline containing the reference is dropped from the output.\n\nConditional Attribute References\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nAdditional parameters are used in conjunction with attribute names to\ncalculate a substitution value. Conditional attribute references take\nthe following forms:\n\n`{<names>=<value>}`::\n        `<value>` is substituted if the attribute `<names>` is\n        undefined otherwise its value is substituted. `<value>` can\n        contain simple attribute references.\n\n`{<names>?<value>}`::\n        `<value>` is substituted if the attribute `<names>` is defined\n        otherwise an empty string is substituted.  `<value>` can\n        contain simple attribute references.\n\n`{<names>!<value>}`::\n        `<value>` is substituted if the attribute `<names>` is\n        undefined otherwise an empty string is substituted.  `<value>`\n        can contain simple attribute references.\n\n`{<names>#<value>}`::\n        `<value>` is substituted if the attribute `<names>` is defined\n        otherwise the undefined attribute entry causes the containing\n        line to be dropped.  `<value>` can contain simple attribute\n        references.\n\n`{<names>%<value>}`::\n        `<value>` is substituted if the attribute `<names>` is not\n        defined otherwise the containing line is dropped.  `<value>`\n        can contain simple attribute references.\n\n`{<names>@<regexp>:<value1>[:<value2>]}`::\n        `<value1>` is substituted if the value of attribute `<names>`\n        matches the regular expression `<regexp>` otherwise `<value2>`\n        is substituted. If attribute `<names>` is not defined the\n        containing line is dropped. If `<value2>` is omitted an empty\n        string is assumed. The values and the regular expression can\n        contain simple attribute references.  To embed colons in the\n        values or the regular expression escape them with backslashes.\n\n`{<names>$<regexp>:<value1>[:<value2>]}`::\n        Same behavior as the previous ternary attribute except for\n        the following cases:\n\n        `{<names>$<regexp>:<value>}`;;\n                Substitutes `<value>` if `<names>` matches `<regexp>`\n                otherwise the result is undefined and the containing\n                line is dropped.\n\n        `{<names>$<regexp>::<value>}`;;\n                Substitutes `<value>` if `<names>` does not match\n                `<regexp>` otherwise the result is undefined and the\n                containing line is dropped.\n\nThe attribute `<names>` parameter normally consists of a single\nattribute name but it can be any one of the following:\n\n- A single attribute name which evaluates to the attributes value.\n- Multiple ',' separated attribute names which evaluates to an empty\n  string if one or more of the attributes is defined, otherwise it's\n  value is undefined.\n- Multiple '+' separated attribute names which evaluates to an empty\n  string if all of the attributes are defined, otherwise it's value is\n  undefined.\n\nConditional attributes with single attribute names are evaluated first\nso they can be used inside the multi-attribute conditional `<value>`.\n\nConditional attribute examples\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nConditional attributes are mainly used in AsciiDoc configuration\nfiles -- see the distribution `.conf` files for examples.\n\nAttribute equality test::\n  If `{backend}` is 'docbook45' or 'xhtml11' the example evaluates to\n  ``DocBook 4.5 or XHTML 1.1 backend'' otherwise it evaluates to\n  ``some other backend'':\n\n  {backend@docbook45|xhtml11:DocBook 4.5 or XHTML 1.1 backend:some other backend}\n\nAttribute value map::\n  This example maps the `frame` attribute values [`topbot`, `all`,\n  `none`, `sides`] to [`hsides`, `border`, `void`, `vsides`]:\n\n  {frame@topbot:hsides}{frame@all:border}{frame@none:void}{frame@sides:vsides}\n\n\n[[X24]]\nSystem Attribute References\n~~~~~~~~~~~~~~~~~~~~~~~~~~~\nSystem attribute references generate the attribute text value by\nexecuting a predefined action that is parametrized by one or more\narguments. The syntax is `{<action>:<arguments>}`.\n\n`{counter:<attrname>[:<seed>]}`::\n        Increments the document attribute (if the attribute is\n        undefined it is set to `1`). Returns the new attribute value.\n\n        - Counters generate global (document wide) attributes.\n        - The optional `<seed>` specifies the counter's initial value;\n          it can be a number or a single letter; defaults to '1'.\n        - `<seed>` can contain simple and conditional attribute\n          references.\n        - The 'counter' system attribute will not be executed if the\n          containing line is dropped by the prior evaluation of an\n          undefined attribute.\n\n`{counter2:<attrname>[:<seed>]}`::\n        Same as `counter` except the it always returns a blank string.\n\n`{eval:<expression>}`::\n        Substitutes the result of the Python `<expression>`.\n\n        - If `<expression>` evaluates to `None` or `False` the\n          reference is deemed undefined and the line containing the\n          reference is dropped from the output.\n        - If the expression evaluates to `True` the attribute\n          evaluates to an empty string.\n        - `<expression>` can contain simple and conditional attribute\n          references.\n        - The 'eval' system attribute can be nested inside other\n          system attributes.\n\n`{eval3:<command>}`::\n        Passthrough version of `{eval:<expression>}` -- the generated\n        output is written directly to the output without any further\n        substitutions.\n\n`{include:<filename>}`::\n        Substitutes contents of the file named `<filename>`.\n\n        - The included file is read at the time of attribute\n          substitution.\n        - If the file does not exist a warning is emitted and the line\n          containing the reference is dropped from the output file.\n        - Tabs are expanded based on the current 'tabsize' attribute\n          value.\n\n`{set:<attrname>[!][:<value>]}`::\n        Sets or unsets document attribute. Normally only used in\n        configuration file markup templates (use\n        <<X18,AttributeEntries>> in AsciiDoc documents).\n\n        - If the attribute name is followed by an exclamation mark\n          the attribute becomes undefined.\n        - If `<value>` is omitted the attribute is set to a blank\n          string.\n        - `<value>` can contain simple and conditional attribute\n          references.\n        - Returns a blank string unless the attribute is undefined in\n          which case the return value is undefined and the enclosing\n          line will be dropped.\n\n`{set2:<attrname>[!][:<value>]}`::\n        Same as `set` except that the attribute scope is local to the\n        template.\n\n`{sys:<command>}`::\n        Substitutes the stdout generated by the execution of the shell\n        `<command>`.\n\n`{sys2:<command>}`::\n        Substitutes the stdout and stderr generated by the execution\n        of the shell `<command>`.\n\n`{sys3:<command>}`::\n        Passthrough version of `{sys:<command>}` -- the generated\n        output is written directly to the output without any further\n        substitutions.\n\n`{template:<template>}`::\n        Substitutes the contents of the configuration file section\n        named `<template>`. Attribute references contained in the\n        template are substituted.\n\n.System reference behavior\n- System attribute arguments can contain non-system attribute\n  references.\n- Closing brace characters inside system attribute arguments must be\n  escaped with a backslash.\n\n[[X60]]\nIntrinsic Attributes\n--------------------\nIntrinsic attributes are simple attributes that are created\nautomatically from: AsciiDoc document header parameters; asciidoc(1)\ncommand-line arguments; attributes defined in the default\nconfiguration files; the execution context.  Here's the list of\npredefined intrinsic attributes:\n\n  {amp}                 ampersand (&) character entity\n  {asciidoc-args}       used to pass inherited arguments to asciidoc filters\n  {asciidoc-confdir}    the asciidoc(1) global configuration directory\n  {asciidoc-dir}        the asciidoc(1) application directory\n  {asciidoc-file}       the full path name of the asciidoc(1) script\n  {asciidoc-version}    the version of asciidoc(1)\n  {author}              author's full name\n  {authored}            empty string '' if {author} or {email} defined,\n  {authorinitials}      author initials (from document header)\n  {backend-<backend>}   empty string ''\n  {<backend>-<doctype>} empty string ''\n  {backend}             document backend specified by `-b` option\n  {backend-confdir}     the directory containing the <backend>.conf file\n  {backslash}           backslash character\n  {basebackend-<base>}  empty string ''\n  {basebackend}         html or docbook\n  {blockname}           current block name (note 8).\n  {brvbar}              broken vertical bar (|) character\n  {docdate}             document last modified date\n  {docdir}              document input directory name  (note 5)\n  {docfile}             document file name  (note 5)\n  {docname}             document file name without extension (note 6)\n  {doctime}             document last modified time\n  {doctitle}            document title (from document header)\n  {doctype-<doctype>}   empty string ''\n  {doctype}             document type specified by `-d` option\n  {email}               author's email address (from document header)\n  {empty}               empty string ''\n  {encoding}            specifies input and output encoding\n  {filetype-<fileext>}  empty string ''\n  {filetype}            output file name file extension\n  {firstname}           author first name (from document header)\n  {gt}                  greater than (>) character entity\n  {id}                  running block id generated by BlockId elements\n  {indir}               input file directory name (note 2,5)\n  {infile}              input file name (note 2,5)\n  {lastname}            author last name (from document header)\n  {ldquo}               Left double quote character (note 7)\n  {level}               title level 1..4 (in section titles)\n  {listindex}           the list index (1..) of the most recent list item\n  {localdate}           the current date\n  {localtime}           the current time\n  {lsquo}               Left single quote character (note 7)\n  {lt}                  less than (<) character entity\n  {manname}             manpage name (defined in NAME section)\n  {manpurpose}          manpage (defined in NAME section)\n  {mantitle}            document title minus the manpage volume number\n  {manvolnum}           manpage volume number (1..8) (from document header)\n  {middlename}          author middle name (from document header)\n  {nbsp}                non-breaking space character entity\n  {notitle}             do not display the document title\n  {outdir}              document output directory name (note 2)\n  {outfile}             output file name (note 2)\n  {python}              the full path name of the Python interpreter executable\n  {rdquo}               Right double quote character (note 7)\n  {reftext}             running block xreflabel generated by BlockId elements\n  {revdate}             document revision date (from document header)\n  {revnumber}           document revision number (from document header)\n  {rsquo}               Right single quote character (note 7)\n  {sectnum}             formatted section number (in section titles)\n  {sp}                  space character\n  {showcomments}        send comment lines to the output\n  {title}               section title (in titled elements)\n  {two-colons}          Two colon characters\n  {two-semicolons}      Two semicolon characters\n  {user-dir}            the ~/.asciidoc directory (if it exists)\n  {verbose}             defined as '' if --verbose command option specified\n  {wj}                  Word-joiner\n  {zwsp}                Zero-width space character entity\n\n[NOTE]\n======\n1. Intrinsic attributes are global so avoid defining custom attributes\n   with the same names.\n2. `{outfile}`, `{outdir}`, `{infile}`, `{indir}` attributes are\n   effectively read-only (you can set them but it won't affect the\n   input or output file paths).\n3.  See also the <<X88,Backend Attributes>> section for attributes\n    that relate to AsciiDoc XHTML file generation.\n4. The entries that translate to blank strings are designed to be used\n   for conditional text inclusion. You can also use the `ifdef`,\n   `ifndef` and `endif` System macros for conditional inclusion.\n   footnote:[Conditional inclusion using `ifdef` and `ifndef` macros\n   differs from attribute conditional inclusion in that the former\n   occurs when the file is read while the latter occurs when the\n   contents are written.]\n5. `{docfile}` and `{docdir}` refer to root document specified on the\n   asciidoc(1) command-line; `{infile}` and `{indir}` refer to the\n   current input file which may be the root document or an included\n   file. When the input is being read from the standard input\n   (`stdin`) these attributes are undefined.\n6. If the input file is the standard input and the output file is not\n   the standard output then `{docname}` is the output file name sans\n   file extension.\n7. See\n   http://en.wikipedia.org/wiki/Non-English_usage_of_quotation_marks[non-English\n   usage of quotation marks].\n8. The `{blockname}` attribute identifies the style of the current\n   block. It applies to delimited blocks, lists and tables. Here is a\n   list of `{blockname}` values (does not include filters or custom\n   block and style names):\n\n   delimited blocks:: comment, sidebar, open, pass, literal, verse,\n   listing, quote, example, note, tip, important, caution, warning,\n   abstract, partintro\n\n   lists:: arabic, loweralpha, upperalpha, lowerroman, upperroman,\n   labeled, labeled3, labeled4, qanda, horizontal, bibliography,\n   glossary\n\n   tables:: table\n\n======\n\n\n[[X73]]\nBlock Element Definitions\n-------------------------\nThe syntax and behavior of Paragraph, DelimitedBlock, List and Table\nblock elements is determined by block definitions contained in\n<<X7,AsciiDoc configuration file>> sections.\n\nEach definition consists of a section title followed by one or more\nsection entries. Each entry defines a block parameter controlling some\naspect of the block's behavior. Here's an example:\n\n---------------------------------------------------------------------\n[blockdef-listing]\ndelimiter=^-{4,}$\ntemplate=listingblock\npresubs=specialcharacters,callouts\n---------------------------------------------------------------------\n\nConfiguration file block definition sections are processed\nincrementally after each configuration file is loaded. Block\ndefinition section entries are merged into the block definition, this\nallows block parameters to be overridden and extended by later\n<<X27,loading configuration files>>.\n\nAsciiDoc Paragraph, DelimitedBlock, List and Table block elements\nshare a common subset of configuration file parameters:\n\ndelimiter::\n  A Python regular expression that matches the first line of a block\n  element -- in the case of DelimitedBlocks and Tables it also matches\n  the last line.\n\ntemplate::\n  The name of the configuration file markup template section that will\n  envelope the block contents. The pipe ('|') character is substituted\n  for the block contents. List elements use a set of (list specific)\n  tag parameters instead of a single template. The template name can\n  contain attribute references allowing dynamic template selection a\n  the time of template substitution.\n\noptions::\n  A comma delimited list of element specific option names. In addition\n  to being used internally, options are available during markup tag\n  and template substitution as attributes with an empty string value\n  named like `<option>-option` (where `<option>` is the option name).\n  See <<X74,attribute options>> for a complete list of available\n  options.\n\nsubs, presubs, postsubs::\n  * 'presubs' and 'postsubs' are lists of comma separated substitutions that are\n    performed on the block contents. 'presubs' is applied first,\n    'postsubs' (if specified) second.\n\n  * 'subs' is an alias for 'presubs'.\n\n  * If a 'filter' is allowed (Paragraphs, DelimitedBlocks and Tables)\n    and has been specified then 'presubs' and 'postsubs' substitutions\n    are performed before and after the filter is run respectively.\n\n  * Allowed values: 'specialcharacters', 'quotes', 'specialwords',\n    'replacements', 'macros', 'attributes', 'callouts'.\n\n  * [[X102]]The following composite values are also allowed:\n\n    'none';;\n        No substitutions.\n    'normal';;\n        The following substitutions in the following order:\n        'specialcharacters', 'quotes', 'attributes', 'specialwords',\n        'replacements', 'macros', 'replacements2'.\n    'verbatim';;\n        The following substitutions in the following order:\n        'specialcharacters' and 'callouts'.\n\n  * 'normal' and 'verbatim' substitutions can be redefined by with\n    `subsnormal` and `subsverbatim` entries in a configuration file\n    `[miscellaneous]` section.\n\n  * The substitutions are processed in the order in which they are\n    listed and can appear more than once.\n\nfilter::\n  This optional entry specifies an executable shell command for\n  processing block content (Paragraphs, DelimitedBlocks and Tables).\n  The filter command can contain attribute references.\n\nposattrs::\n  Optional comma separated list of positional attribute names. This\n  list maps positional attributes (in the block's <<X21,attribute\n  list>>) to named block attributes. The following example, from the\n  QuoteBlock definition, maps the first and section positional\n  attributes:\n\n  posattrs=attribution,citetitle\n\nstyle::\n  This optional parameter specifies the default style name.\n\n\n<stylename>-style::\n  Optional style definition (see <<X23,Styles>> below).\n\nThe following block parameters behave like document attributes and can\nbe set in block attribute lists and style definitions: 'template',\n'options', 'subs', 'presubs', 'postsubs', 'filter'.\n\n[[X23]]\nStyles\n~~~~~~\nA style is a set of block parameter bundled as a single named\nparameter. The following example defines a style named 'verbatim':\n\n  verbatim-style=template=\"literalblock\",subs=\"verbatim\"\n\nIf a block's <<X21,attribute list>> contains a 'style' attribute then\nthe corresponding style parameters are be merged into the default\nblock definition parameters.\n\n- All style parameter names must be suffixed with `-style` and the\n  style parameter value is in the form of a list of <<X21,named\n  attributes>>.\n- The 'template' style parameter is mandatory, other parameters can be\n  omitted in which case they inherit their values from the default\n  block definition parameters.\n- Multi-item style parameters ('subs','presubs','postsubs','posattrs')\n  must be specified using Python tuple syntax (rather than a simple\n  list of values as they in separate entries) e.g.\n  `postsubs=(\"callouts\",)` not `postsubs=\"callouts\"`.\n\nParagraphs\n~~~~~~~~~~\nParagraph translation is controlled by `[paradef-*]` configuration\nfile section entries. Users can define new types of paragraphs and\nmodify the behavior of existing types by editing AsciiDoc\nconfiguration files.\n\nHere is the shipped Default paragraph definition:\n\n--------------------------------------------------------------------\n[paradef-default]\ndelimiter=(?P<text>\\S.*)\ntemplate=paragraph\n--------------------------------------------------------------------\n\nThe normal paragraph definition has a couple of special properties:\n\n1. It must exist and be defined in a configuration file section named\n   `[paradef-default]`.\n2. Irrespective of its position in the configuration files default\n   paragraph document matches are attempted only after trying all\n   other paragraph types.\n\nParagraph specific block parameter notes:\n\ndelimiter::\n  This regular expression must contain the named group 'text' which\n  matches the text on the first line.  Paragraphs are terminated by a\n  blank line, the end of file, or the start of a DelimitedBlock.\n\noptions::\n  The 'listelement' option specifies that paragraphs of this type will\n  automatically be considered part of immediately preceding list\n  items.  The 'skip' option causes the paragraph to be treated as a\n  comment (see <<X26,CommentBlocks>>).\n\n.Paragraph processing proceeds as follows:\n1. The paragraph text is aligned to the left margin.\n2. Optional 'presubs' inline substitutions are performed on the\n   paragraph text.\n3. If a filter command is specified it is executed and the paragraph\n   text piped to its standard input; the filter output replaces the\n   paragraph text.\n4. Optional 'postsubs' inline substitutions are performed on the\n   paragraph text.\n5. The paragraph text is enveloped by the paragraph's markup template\n   and written to the output file.\n\nDelimited Blocks\n~~~~~~~~~~~~~~~~\nDelimitedBlock 'options' values are:\n\nsectionbody::\n    The block contents are processed as a SectionBody.\n\nskip::\n    The block is treated as a comment (see <<X26,CommentBlocks>>).\n    Preceding <<X21,attribute lists>> and <<X42,block titles>> are not\n    consumed.\n\n'presubs', 'postsubs' and 'filter' entries are ignored when\n'sectionbody' or 'skip' options are set.\n\nDelimitedBlock processing proceeds as follows:\n\n1. Optional 'presubs' substitutions are performed on the block\n   contents.\n2. If a filter is specified it is executed and the block's contents\n   piped to its standard input. The filter output replaces the block\n   contents.\n3. Optional 'postsubs' substitutions are performed on the block\n   contents.\n4. The block contents is enveloped by the block's markup template and\n   written to the output file.\n\nTIP: Attribute expansion is performed on the block filter command\nbefore it is executed, this is useful for passing arguments to the\nfilter.\n\nLists\n~~~~~\nList behavior and syntax is determined by `[listdef-*]` configuration\nfile sections. The user can change existing list behavior and add new\nlist types by editing configuration files.\n\nList specific block definition notes:\n\ntype::\n  This is either 'bulleted','numbered','labeled' or 'callout'.\n\ndelimiter::\n  A Python regular expression that matches the first line of a\n  list element entry. This expression can contain the named groups\n  'text' (bulleted groups), 'index' and 'text' (numbered lists),\n  'label' and 'text' (labeled lists).\n\ntags::\n  The `<name>` of the `[listtags-<name>]` configuration file section\n  containing list markup tag definitions.  The tag entries ('list',\n  'entry', 'label', 'term', 'text') map the AsciiDoc list structure to\n  backend markup; see the 'listtags' sections in the AsciiDoc\n  distributed backend `.conf` configuration files for examples.\n\nTables\n~~~~~~\nTable behavior and syntax is determined by `[tabledef-*]` and\n`[tabletags-*]` configuration file sections. The user can change\nexisting table behavior and add new table types by editing\nconfiguration files.  The following `[tabledef-*]` section entries\ngenerate table output markup elements:\n\ncolspec::\n  The table 'colspec' tag definition.\n\nheadrow, footrow, bodyrow::\n  Table header, footer and body row tag definitions. 'headrow' and\n  'footrow' table definition entries default to 'bodyrow' if\n  they are undefined.\n\nheaddata, footdata, bodydata::\n  Table header, footer and body data tag definitions. 'headdata' and\n  'footdata' table definition entries default to 'bodydata' if they\n  are undefined.\n\nparagraph::\n  If the 'paragraph' tag is specified then blank lines in the cell\n  data are treated as paragraph delimiters and marked up using this\n  tag.\n\n[[X4]]\nTable behavior is also influenced by the following `[miscellaneous]`\nconfiguration file entries:\n\npagewidth::\n  This integer value is the printable width of the output media. See\n  <<X69,table attributes>>.\n\npageunits::\n  The units of width in output markup width attribute values.\n\n.Table definition behavior\n- The output markup generation is specifically designed to work with\n  the HTML and CALS (DocBook) table models, but should be adaptable to\n  most XML table schema.\n- Table definitions can be ``mixed in'' from multiple cascading\n  configuration files.\n- New table definitions inherit the default table and table tags\n  definitions (`[tabledef-default]` and `[tabletags-default]`) so you\n  only need to override those conf file entries that require\n  modification.\n\n\n[[X59]]\nFilters\n-------\nAsciiDoc filters allow external commands to process AsciiDoc\n'Paragraphs', 'DelimitedBlocks' and 'Table' content. Filters are\nprimarily an extension mechanism for generating specialized outputs.\nFilters are implemented using external commands which are specified in\nconfiguration file definitions.\n\nThere's nothing special about the filters, they're just standard UNIX\nfilters: they read text from the standard input, process it, and write\nto the standard output.\n\nThe asciidoc(1) command `--filter` option can be used to install and\nremove filters. The same option is used to unconditionally load a\nfilter.\n\nAttribute substitution is performed on the filter command prior to\nexecution -- attributes can be used to pass parameters from the\nAsciiDoc source document to the filter.\n\nWARNING: Filters sometimes included executable code. Before installing\na filter you should verify that it is from a trusted source.\n\nFilter Search Paths\n~~~~~~~~~~~~~~~~~~~\nIf the filter command does not specify a directory path then\nasciidoc(1) recursively searches for the executable filter command:\n\n- First it looks in the user's `$HOME/.asciidoc/filters` directory.\n- Next the global filters directory (usually `/etc/asciidoc/filters`\n  or `/usr/local/etc/asciidoc`) directory is searched.\n- Then it looks in the asciidoc(1) `./filters` directory.\n- Finally it relies on the executing shell to search the environment\n  search path (`$PATH`).\n\nStandard practice is to install each filter in it's own sub-directory\nwith the same name as the filter's style definition. For example the\nmusic filter's style name is 'music' so it's configuration and filter\nfiles are stored in the `filters/music` directory.\n\nFilter Configuration Files\n~~~~~~~~~~~~~~~~~~~~~~~~~~\nFilters are normally accompanied by a configuration file containing a\nParagraph or DelimitedBlock definition along with corresponding markup\ntemplates.\n\nWhile it is possible to create new 'Paragraph' or 'DelimitedBlock'\ndefinitions the preferred way to implement a filter is to add a\n<<X23,style>> to the existing Paragraph and ListingBlock definitions\n(all filters shipped with AsciiDoc use this technique). The filter is\napplied to the paragraph or delimited block by preceding it with an\nattribute list: the first positional attribute is the style name,\nremaining attributes are normally filter specific parameters.\n\nasciidoc(1) auto-loads all `.conf` files found in the filter search\npaths unless the container directory also contains a file named\n`__noautoload__` (see previous section). The `__noautoload__` feature\nis used for filters that will be loaded manually using the `--filter`\noption.\n\n[[X56]]\nExample Filter\n~~~~~~~~~~~~~~\nAsciiDoc comes with a toy filter for highlighting source code keywords\nand comments.  See also the `./filters/code/code-filter-readme.txt`\nfile.\n\nNOTE: The purpose of this toy filter is to demonstrate how to write a\nfilter -- it's much to simplistic to be passed off as a code syntax\nhighlighter.  If you want a full featured multi-language highlighter\nuse the {website}source-highlight-filter.html[source code highlighter\nfilter].\n\nBuilt-in filters\n~~~~~~~~~~~~~~~~\nThe AsciiDoc distribution includes 'source', 'music', 'latex' and\n'graphviz' filters, details are on the\n{website}index.html#_filters[AsciiDoc website].\n\n[cols=\"1e,5\",frame=\"topbot\",options=\"header\"]\n.Built-in filters list\n|====================================================================\n|Filter name |Description\n\n|music\n|A {website}music-filter.html[music filter] is included in the\ndistribution `./filters/` directory. It translates music in\nhttp://lilypond.org/[LilyPond] or http://abcnotation.org.uk/[ABC]\nnotation to standard classical notation.\n\n|source\n|A {website}source-highlight-filter.html[source code highlight filter]\nis included in the distribution `./filters/` directory.\n\n|latex\n|The {website}latex-filter.html[AsciiDoc LaTeX filter] translates\nLaTeX source to a PNG image that is automatically inserted into the\nAsciiDoc output documents.\n\n|graphviz\n|Gouichi Iisaka has written a http://www.graphviz.org/[Graphviz]\nfilter for AsciiDoc.  Graphviz generates diagrams from a textual\nspecification. Gouichi Iisaka's Graphviz filter is included in the\nAsciiDoc distribution. Here are some\n{website}asciidoc-graphviz-sample.html[AsciiDoc Graphviz examples].\n\n|====================================================================\n\n[[X58]]\nFilter plugins\n~~~~~~~~~~~~~~\nFilter <<X101,plugins>> are a mechanism for distributing AsciiDoc\nfilters.  A filter plugin is a Zip file containing the files that\nconstitute a filter.  The asciidoc(1) `--filter` option is used to\nload and manage filer <<X101,plugins>>.\n\n- Filter plugins <<X27,take precedence>> over built-in filters with\n  the same name.\n- By default filter plugins are installed in\n  `$HOME/.asciidoc/filters/<filter>` where `<filter>` is the filter\n  name.\n\n\n[[X101]]\nPlugins\n-------\nThe AsciiDoc plugin architecture is an extension mechanism that allows\nadditional <<X100,backends>>, <<X58,filters>> and <<X99,themes>> to be\nadded to AsciiDoc.\n\n- A plugin is a Zip file containing an AsciiDoc backend, filter or\n  theme (configuration files, stylesheets, scripts, images).\n- The asciidoc(1) `--backend`, `--filter` and `--theme` command-line\n  options are used to load and manage plugins. Each of these options\n  responds to the plugin management 'install', 'list', 'remove' and\n  'build' commands.\n- The plugin management command names are reserved and cannot be used\n  for filter, backend or theme names.\n- The plugin Zip file name always begins with the backend, filter or\n  theme name.\n\nPlugin commands and conventions are documented in the asciidoc(1) man\npage.  You can find lists of plugins on the\n{website}plugins.html[AsciiDoc website].\n\n\n[[X36]]\nHelp Commands\n-------------\nThe asciidoc(1) command has a `--help` option which prints help topics\nto stdout. The default topic summarizes asciidoc(1) usage:\n\n  $ asciidoc --help\n\nTo print a help topic specify the topic name as a command argument.\nHelp topic names can be shortened so long as they are not ambiguous.\nExamples:\n\n  $ asciidoc --help manpage\n  $ asciidoc -h m              # Short version of previous example.\n  $ asciidoc --help syntax\n  $ asciidoc -h s              # Short version of previous example.\n\nCustomizing Help\n~~~~~~~~~~~~~~~~\nTo change, delete or add your own help topics edit a help\nconfiguration file.  The help file name `help-<lang>.conf` is based on\nthe setting of the `lang` attribute, it defaults to `help.conf`\n(English).  The <<X27,help file location>> will depend on whether you\nwant the topics to apply to all users or just the current user.\n\nThe help topic files have the same named section format as other\n<<X7,configuration files>>. The `help.conf` files are stored in the\nsame locations and loaded in the same order as other configuration\nfiles.\n\nWhen the `--help` command-line option is specified AsciiDoc loads the\nappropriate help files and then prints the contents of the section\nwhose name matches the help topic name.  If a topic name is not\nspecified `default` is used. You don't need to specify the whole help\ntopic name on the command-line, just enough letters to ensure it's not\nambiguous. If a matching help file section is not found a list of\navailable topics is printed.\n\n\nTips and Tricks\n---------------\n\nKnow Your Editor\n~~~~~~~~~~~~~~~~\nWriting AsciiDoc documents will be a whole lot more pleasant if you\nknow your favorite text editor. Learn how to indent and reformat text\nblocks, paragraphs, lists and sentences. <<X20,Tips for 'vim' users>>\nfollow.\n\n[[X20]]\nVim Commands for Formatting AsciiDoc\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nText Wrap Paragraphs\n^^^^^^^^^^^^^^^^^^^^\nUse the vim `:gq` command to reformat paragraphs. Setting the\n'textwidth' sets the right text wrap margin; for example:\n\n  :set textwidth=70\n\nTo reformat a paragraph:\n\n1. Position the cursor at the start of the paragraph.\n2. Type `gq}`.\n\nExecute `:help gq` command to read about the vim gq command.\n\n[TIP]\n=====================================================================\n- Assign the `gq}` command to the Q key with the `nnoremap Q gq}`\n  command or put it in your `~/.vimrc` file to so it's always\n  available (see the <<X61, Example `~/.vimrc` file>>).\n- Put `set` commands in your `~/.vimrc` file so you don't have to\n  enter them manually.\n- The Vim website (http://www.vim.org) has a wealth of resources,\n  including scripts for automated spell checking and ASCII Art\n  drawing.\n=====================================================================\n\nFormat Lists\n^^^^^^^^^^^^\nThe `gq` command can also be used to format bulleted, numbered and\ncallout lists. First you need to set the `comments`, `formatoptions`\nand `formatlistpat` (see the <<X61, Example `~/.vimrc` file>>).\n\nNow you can format simple lists that use dash, asterisk, period and\nplus bullets along with numbered ordered lists:\n\n1. Position the cursor at the start of the list.\n2. Type `gq}`.\n\nIndent Paragraphs\n^^^^^^^^^^^^^^^^^\nIndent whole paragraphs by indenting the fist line with the desired\nindent and then executing the `gq}` command.\n\n[[X61]]\nExample `~/.vimrc` File\n^^^^^^^^^^^^^^^^^^^^^^^\n---------------------------------------------------------------------\n\" Use bold bright fonts.\nset background=dark\n\n\" Show tabs and trailing characters.\nset listchars=tab:,trail:\nset list\n\n\" Don't highlight searched text.\nhighlight clear Search\n\n\" Don't move to matched text while search pattern is being entered.\nset noincsearch\n\n\" Reformat paragraphs and list.\nnnoremap R gq}\n\n\" Delete trailing white space and Dos-returns and to expand tabs to spaces.\nnnoremap S :set et<CR>:retab!<CR>:%s/[\\r \\t]\\+$//<CR>\n\nautocmd BufRead,BufNewFile *.txt,README,TODO,CHANGELOG,NOTES\n        \\ setlocal autoindent expandtab tabstop=8 softtabstop=2 shiftwidth=2 filetype=asciidoc\n        \\ textwidth=70 wrap formatoptions=tcqn\n        \\ formatlistpat=^\\\\s*\\\\d\\\\+\\\\.\\\\s\\\\+\\\\\\\\|^\\\\s*<\\\\d\\\\+>\\\\s\\\\+\\\\\\\\|^\\\\s*[a-zA-Z.]\\\\.\\\\s\\\\+\\\\\\\\|^\\\\s*[ivxIVX]\\\\+\\\\.\\\\s\\\\+\n        \\ comments=s1:/*,ex:*/,://,b:#,:%,:XCOMM,fb:-,fb:*,fb:+,fb:.,fb:>\n---------------------------------------------------------------------\n\nTroubleshooting\n~~~~~~~~~~~~~~~\nAsciiDoc diagnostic features are detailed in the <<X82,Diagnostics\nappendix>>.\n\nGotchas\n~~~~~~~\nIncorrect character encoding::\n    If you get an error message like `'UTF-8' codec can't decode ...`\n    then you source file contains invalid UTF-8 characters -- set the\n    AsciiDoc <<X54,encoding attribute>> for the correct character set\n    (typically ISO-8859-1 (Latin-1) for European languages).\n\nInvalid output::\n    AsciiDoc attempts to validate the input AsciiDoc source but makes\n    no attempt to validate the output markup, it leaves that to\n    external tools such as `xmllint(1)` (integrated into `a2x(1)`).\n    Backend validation cannot be hardcoded into AsciiDoc because\n    backends are dynamically configured. The following example\n    generates valid HTML but invalid DocBook (the DocBook `literal`\n    element cannot contain an `emphasis` element):\n\n    +monospaced text with an _emphasized_ word+\n\nMisinterpreted text formatting::\n    You can suppress markup expansion by placing a backslash character\n    immediately in front of the element. The following example\n    suppresses inline monospaced formatting:\n\n    \\+1 for C++.\n\nOverlapping text formatting::\n    Overlapping text formatting will generate illegal overlapping\n    markup tags which will result in downstream XML parsing errors.\n    Here's an example:\n\n    Some *strong markup _that overlaps* emphasized markup_.\n\nAmbiguous underlines::\n    A DelimitedBlock can immediately follow a paragraph without an\n    intervening blank line, but be careful, a single line paragraph\n    underline may be misinterpreted as a section title underline\n    resulting in a ``closing block delimiter expected'' error.\n\nAmbiguous ordered list items::\n    Lines beginning with numbers at the end of sentences will be\n    interpreted as ordered list items.  The following example\n    (incorrectly) begins a new list with item number 1999:\n\n    He was last sighted in\n    1999. Since then things have moved on.\n+\nThe 'list item out of sequence' warning makes it unlikely that this\nproblem will go unnoticed.\n\nSpecial characters in attribute values::\n    Special character substitution precedes attribute substitution so\n    if attribute values contain special characters you may, depending\n    on the substitution context, need to escape the special characters\n    yourself. For example:\n\n    $ asciidoc -a 'orgname=Bill &amp; Ben Inc.' mydoc.txt\n\nAttribute lists::\n    If any named attribute entries are present then all string\n    attribute values must be quoted.  For example:\n\n    [\"Desktop screenshot\",width=32]\n\n[[X90]]\nCombining separate documents\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nYou have a number of stand-alone AsciiDoc documents that you want to\nprocess as a single document. Simply processing them with a series of\n`include` macros won't work because the documents contain (level 0)\ndocument titles.  The solution is to create a top level wrapper\ndocument and use the `leveloffset` attribute to push them all down one\nlevel. For example:\n\n[listing]\n.....................................................................\nCombined Document Title\n=======================\n\n// Push titles down one level.\n:leveloffset: 1\n\n\\include::document1.txt[]\n\n// Return to normal title levels.\n:leveloffset: 0\n\nA Top Level Section\n-------------------\nLorum ipsum.\n\n// Push titles down one level.\n:leveloffset: 1\n\n\\include::document2.txt[]\n\n\\include::document3.txt[]\n.....................................................................\n\nThe document titles in the included documents will now be processed as\nlevel 1 section titles, level 1 sections as level 2 sections and so\non.\n\n- Put a blank line between the `include` macro lines to ensure the\n  title of the included document is not seen as part of the last\n  paragraph of the previous document.\n- You won't want non-title document header lines (for example, Author\n  and Revision lines) in the included files -- conditionally exclude\n  them if they are necessary for stand-alone processing.\n\nProcessing document sections separately\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nYou have divided your AsciiDoc document into separate files (one per\ntop level section) which are combined and processed with the following\ntop level document:\n\n---------------------------------------------------------------------\nCombined Document Title\n=======================\nJoe Bloggs\nv1.0, 12-Aug-03\n\n\\include::section1.txt[]\n\n\\include::section2.txt[]\n\n\\include::section3.txt[]\n---------------------------------------------------------------------\n\nYou also want to process the section files as separate documents.\nThis is easy because asciidoc(1) will quite happily process\n`section1.txt`, `section2.txt` and `section3.txt` separately -- the\nresulting output documents contain the section but have no document\ntitle.\n\nProcessing document snippets\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nUse the `-s` (`--no-header-footer`) command-line option to suppress\nheader and footer output, this is useful if the processed output is to\nbe included in another file. For example:\n\n  $ asciidoc -sb docbook section1.txt\n\nasciidoc(1) can be used as a filter, so you can pipe chunks of text\nthrough it. For example:\n\n  $ echo 'Hello *World!*' | asciidoc -s -\n  <div class=\"paragraph\"><p>Hello <strong>World!</strong></p></div>\n\nBadges in HTML page footers\n~~~~~~~~~~~~~~~~~~~~~~~~~~~\nSee the `[footer]` section in the AsciiDoc distribution `xhtml11.conf`\nconfiguration file.\n\nPretty printing AsciiDoc output\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nIf the indentation and layout of the asciidoc(1) output is not to your\nliking you can:\n\n1. Change the indentation and layout of configuration file markup\n   template sections. The `{empty}` attribute is useful for outputting\n   trailing blank lines in markup templates.\n\n2. Use Dave Raggett's http://tidy.sourceforge.net/[HTML Tidy] program\n   to tidy asciidoc(1) output. Example:\n\n   $ asciidoc -b docbook -o - mydoc.txt | tidy -indent -xml >mydoc.xml\n\n3. Use the `xmllint(1)` format option. Example:\n\n   $ xmllint --format mydoc.xml\n\nSupporting minor DocBook DTD variations\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nThe conditional inclusion of DocBook SGML markup at the end of the\ndistribution `docbook45.conf` file illustrates how to support minor\nDTD variations. The included sections override corresponding entries\nfrom preceding sections.\n\nCreating stand-alone HTML documents\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nIf you've ever tried to send someone an HTML document that includes\nstylesheets and images you'll know that it's not as straight-forward\nas exchanging a single file.  AsciiDoc has options to create\nstand-alone documents containing embedded images, stylesheets and\nscripts.  The following AsciiDoc command creates a single file\ncontaining <<X66,embedded images>>, CSS stylesheets, and JavaScript\n(for table of contents and footnotes):\n\n  $ asciidoc -a data-uri -a icons -a toc -a max-width=55em article.txt\n\nYou can view the HTML file here: {website}article-standalone.html[]\n\nShipping stand-alone AsciiDoc source\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nReproducing presentation documents from someone else's source has one\nmajor problem: unless your configuration files are the same as the\ncreator's you won't get the same output.\n\nThe solution is to create a single backend specific configuration file\nusing the asciidoc(1) `-c` (`--dump-conf`) command-line option. You\nthen ship this file along with the AsciiDoc source document plus the\n`asciidoc.py` script. The only end user requirement is that they have\nPython installed (and that they consider you a trusted source). This\nexample creates a composite HTML configuration file for `mydoc.txt`:\n\n  $ asciidoc -cb xhtml11 mydoc.txt > mydoc-xhtml11.conf\n\nShip `mydoc.txt`, `mydoc-html.conf`, and `asciidoc.py`. With\nthese three files (and a Python interpreter) the recipient can\nregenerate the HMTL output:\n\n  $ ./asciidoc.py -eb xhtml11 mydoc.txt\n\nThe `-e` (`--no-conf`) option excludes the use of implicit\nconfiguration files, ensuring that only entries from the\n`mydoc-html.conf` configuration are used.\n\nInserting blank space\n~~~~~~~~~~~~~~~~~~~~~\nAdjust your style sheets to add the correct separation between block\nelements. Inserting blank paragraphs containing a single non-breaking\nspace character `{nbsp}` works but is an ad hoc solution compared\nto using style sheets.\n\nClosing open sections\n~~~~~~~~~~~~~~~~~~~~~\nYou can close off section tags up to level `N` by calling the\n`eval::[Section.setlevel(N)]` system macro. This is useful if you\nwant to include a section composed of raw markup. The following\nexample includes a DocBook glossary division at the top section level\n(level 0):\n\n---------------------------------------------------------------------\n\\ifdef::basebackend-docbook[]\n\n\\eval::[Section.setlevel(0)]\n\n+++++++++++++++++++++++++++++++\n<glossary>\n  <title>Glossary</title>\n  <glossdiv>\n  ...\n  </glossdiv>\n</glossary>\n+++++++++++++++++++++++++++++++\n\\endif::basebackend-docbook[]\n---------------------------------------------------------------------\n\nValidating output files\n~~~~~~~~~~~~~~~~~~~~~~~\nUse `xmllint(1)` to check the AsciiDoc generated markup is both well\nformed and valid. Here are some examples:\n\n  $ xmllint --nonet --noout --valid docbook-file.xml\n  $ xmllint --nonet --noout --valid xhtml11-file.html\n  $ xmllint --nonet --noout --valid --html html4-file.html\n\nThe `--valid` option checks the file is valid against the document\ntype's DTD, if the DTD is not installed in your system's catalog then\nit will be fetched from its Internet location. If you omit the\n`--valid` option the document will only be checked that it is well\nformed.\n\nThe online http://validator.w3.org/#validate_by_uri+with_options[W3C\nMarkup Validation Service] is the defacto standard when it comes to\nvalidating HTML (it validates all HTML standards including HTML5).\n\n\n:numbered!:\n\n[glossary]\nGlossary\n--------\n[glossary]\n[[X8]] Block element::\n    An AsciiDoc block element is a document entity composed of one or\n    more whole lines of text.\n\n[[X34]] Inline element::\n    AsciiDoc inline elements occur within block element textual\n    content, they perform formatting and substitution tasks.\n\nFormal element::\n    An AsciiDoc block element that has a BlockTitle. Formal elements\n    are normally listed in front or back matter, for example lists of\n    tables, examples and figures.\n\nVerbatim element::\n    The word verbatim indicates that white space and line breaks in\n    the source document are to be preserved in the output document.\n\n\n[appendix]\nMigration Notes\n---------------\n[[X53]]\nVersion 7 to version 8\n~~~~~~~~~~~~~~~~~~~~~~\n- A new set of quotes has been introduced which may match inline text\n  in existing documents -- if they do you'll need to escape the\n  matched text with backslashes.\n- The index entry inline macro syntax has changed -- if your documents\n  include indexes you may need to edit them.\n- Replaced a2x(1) `--no-icons` and `--no-copy` options with their\n  negated equivalents: `--icons` and `--copy` respectively. The\n  default behavior has also changed -- the use of icons and copying of\n  icon and CSS files must be specified explicitly with the `--icons`\n  and `--copy` options.\n\nThe rationale for the changes can be found in the AsciiDoc\n`CHANGELOG`.\n\nNOTE: If you want to disable unconstrained quotes, the new alternative\nconstrained quotes syntax and the new index entry syntax then you can\ndefine the attribute `asciidoc7compatible` (for example by using the\n`-a asciidoc7compatible` command-line option).\n\n[[X38]]\n[appendix]\nPackager Notes\n--------------\nRead the `README` and `INSTALL` files (in the distribution root\ndirectory) for install prerequisites and procedures.  The distribution\n`Makefile.in` (used by `configure` to generate the `Makefile`) is the\ncanonical installation procedure.\n\n\n[[X39]]\n[appendix]\nAsciiDoc Safe Mode\n-------------------\nAsciiDoc 'safe mode' skips potentially dangerous scripted sections in\nAsciiDoc source files by inhibiting the execution of arbitrary code or\nthe inclusion of arbitrary files.\n\nThe safe mode is disabled by default, it can be enabled with the\nasciidoc(1) `--safe` command-line option.\n\n.Safe mode constraints\n- `eval`, `sys` and `sys2` executable attributes and block macros are\n  not executed.\n- `include::<filename>[]` and `include1::<filename>[]` block macro\n  files must reside inside the parent file's directory.\n- `{include:<filename>}` executable attribute files must reside\n  inside the source document directory.\n- Passthrough Blocks are dropped.\n\n[WARNING]\n=====================================================================\nThe safe mode is not designed to protect against unsafe AsciiDoc\nconfiguration files. Be especially careful when:\n\n1. Implementing filters.\n2. Implementing elements that don't escape special characters.\n3. Accepting configuration files from untrusted sources.\n=====================================================================\n\n\n[appendix]\nUsing AsciiDoc with non-English Languages\n-----------------------------------------\nAsciiDoc can process UTF-8 character sets but there are some things\nyou need to be aware of:\n\n- If you are generating output documents using a DocBook toolchain\n  then you should set the AsciiDoc `lang` attribute to the appropriate\n  language (it defaults to `en` (English)). This will ensure things\n  like table of contents, figure and table captions and admonition\n  captions are output in the specified language.  For example:\n\n  $ a2x -a lang=es doc/article.txt\n\n- If you are outputting HTML directly from asciidoc(1) you'll\n  need to set the various `*_caption` attributes to match your target\n  language (see the list of captions and titles in the `[attributes]`\n  section of the distribution `lang-*.conf` files). The easiest way is\n  to create a language `.conf` file (see the AsciiDoc's `lang-en.conf`\n  file).\n+\nNOTE: You still use the 'NOTE', 'CAUTION', 'TIP', 'WARNING',\n'IMPORTANT' captions in the AsciiDoc source, they get translated in\nthe HTML output file.\n\n- asciidoc(1) automatically loads configuration files named like\n  `lang-<lang>.conf` where `<lang>` is a two letter language code that\n  matches the current AsciiDoc `lang` attribute. See also\n  <<X27,Configuration File Names and Locations>>.\n\n\n[appendix]\nVim Syntax Highlighter\n----------------------\nSyntax highlighting is incredibly useful, in addition to making\nreading AsciiDoc documents much easier syntax highlighting also helps\nyou catch AsciiDoc syntax errors as you write your documents.\n\nThe AsciiDoc `./vim/` distribution directory contains Vim syntax\nhighlighter and filetype detection scripts for AsciiDoc.  Syntax\nhighlighting makes it much easier to spot AsciiDoc syntax errors.\n\nIf Vim is installed on your system the AsciiDoc installer\n(`install.sh`) will automatically install the vim scripts in the Vim\nglobal configuration directory (`/etc/vim`).\n\nYou can also turn on syntax highlighting by adding the following line\nto the end of you AsciiDoc source files:\n\n  // vim: set syntax=asciidoc:\n\nTIP: Bold fonts are often easier to read, use the Vim `:set\nbackground=dark` command to set bold bright fonts.\n\nNOTE: There are a number of alternative syntax highlighters for\nvarious editors listed on the {website}[AsciiDoc website].\n\nLimitations\n~~~~~~~~~~~\nThe current implementation does a reasonable job but on occasions gets\nthings wrong:\n\n- Nested quoted text formatting is highlighted according to the outer\n  format.\n- If a closing Example Block delimiter is sometimes mistaken for a\n  title underline. A workaround is to insert a blank line before the\n  closing delimiter.\n- Lines within a paragraph starting with equals characters may be\n  highlighted as single-line titles.\n- Lines within a paragraph beginning with a period may be highlighted\n  as block titles.\n\n\n[[X74]]\n[appendix]\nAttribute Options\n-----------------\nHere is the list of predefined <<X75,attribute list options>>:\n\n\n[cols=\"2e,2,2,5\",frame=\"topbot\",options=\"header\"]\n|====================================================================\n|Option|Backends|AsciiDoc Elements|Description\n\n|autowidth |xhtml11, html5, html4 |table|\nThe column widths are determined by the browser, not the AsciiDoc\n'cols' attribute. If there is no 'width' attribute the table width is\nalso left up to the browser.\n\n|unbreakable |xhtml11, html5 |block elements|\n'unbreakable' attempts to keep the block element together on a single\nprinted page c.f. the 'breakable' and 'unbreakable' docbook (XSL/FO)\noptions below.\n\n|breakable, unbreakable |docbook (XSL/FO) |table, example, block image|\nThe 'breakable' options allows block elements to break across page\nboundaries; 'unbreakable' attempts to keep the block element together\non a single page. If neither option is specified the default XSL\nstylesheet behavior prevails.\n\n|compact |docbook, xhtml11, html5 |bulleted list, numbered list|\nMinimizes vertical space in the list\n\n|footer |docbook, xhtml11, html5, html4 |table|\nThe last row of the table is rendered as a footer.\n\n|header |docbook, xhtml11, html5, html4 |table|\nThe first row of the table is rendered as a header.\n\n|pgwide |docbook (XSL/FO) |table, block image, horizontal labeled list|\nSpecifies that the element should be rendered across the full text\nwidth of the page irrespective of the current indentation.\n\n|strong |xhtml11, html5, html4 |labeled lists|\nEmboldens label text.\n|====================================================================\n\n\n[[X82]]\n[appendix]\nDiagnostics\n-----------\nThe `asciidoc(1)` `--verbose` command-line option prints additional\ninformation to stderr: files processed, filters processed, warnings,\nsystem attribute evaluation.\n\nA special attribute named 'trace' enables the output of\nelement-by-element diagnostic messages detailing output markup\ngeneration to stderr.  The 'trace' attribute can be set on the\ncommand-line or from within the document using <<X18,Attribute\nEntries>> (the latter allows tracing to be confined to specific\nportions of the document).\n\n- Trace messages print the source file name and line number and the\n  trace name followed by related markup.\n- 'trace names' are normally the names of AsciiDoc elements (see the\n  list below).\n- The trace message is only printed if the 'trace' attribute value\n  matches the start of a 'trace name'. The 'trace' attribute value can\n  be any Python regular expression.  If a trace value is not specified\n  all trace messages will be printed (this can result in large amounts\n  of output if applied to the whole document).\n\n- In the case of inline substitutions:\n  * The text before and after the substitution is printed; the before\n    text is preceded by a line containing `<<<` and the after text by\n    a line containing `>>>`.\n  * The 'subs' trace value is an alias for all inline substitutions.\n\n.Trace names\n.....................................................................\n<blockname> block close\n<blockname> block open\n<subs>\ndropped line (a line containing an undefined attribute reference).\nfloating title\nfooter\nheader\nlist close\nlist entry close\nlist entry open\nlist item close\nlist item open\nlist label close\nlist label open\nlist open\nmacro block (a block macro)\nname (man page NAME section)\nparagraph\npreamble close\npreamble open\npush blockname\npop blockname\nsection close\nsection open: level <level>\nsubs (all inline substitutions)\ntable\n.....................................................................\n\nWhere:\n\n- `<level>` is section level number '0...4'.\n- `<blockname>` is a delimited block name: 'comment', 'sidebar',\n  'open', 'pass', 'listing', 'literal', 'quote', 'example'.\n- `<subs>` is an inline substitution type:\n  'specialcharacters','quotes','specialwords', 'replacements',\n  'attributes','macros','callouts', 'replacements2', 'replacements3'.\n\nCommand-line examples:\n\n. Trace the entire document.\n\n  $ asciidoc -a trace mydoc.txt\n\n. Trace messages whose names start with `quotes` or `macros`:\n\n  $ asciidoc -a 'trace=quotes|macros'  mydoc.txt\n\n. Print the first line of each trace message:\n\n  $ asciidoc -a trace mydoc.txt 2>&1 | grep ^TRACE:\n\nAttribute Entry examples:\n\n. Begin printing all trace messages:\n\n  :trace:\n\n. Print only matched trace messages:\n\n  :trace: quotes|macros\n\n. Turn trace messages off:\n\n  :trace!:\n\n\n[[X88]]\n[appendix]\nBackend Attributes\n------------------\nThis table contains a list of optional attributes that influence the\ngenerated outputs.\n\n[cols=\"1e,1,5a\",frame=\"topbot\",options=\"header\"]\n|====================================================================\n|Name |Backends |Description\n\n|badges |xhtml11, html5 |\nLink badges ('XHTML 1.1' and 'CSS') in document footers. By default\nbadges are omitted ('badges' is undefined).\n\nNOTE: The path names of images, icons and scripts are relative path\nnames to the output document not the source document.\n\n|data-uri |xhtml11, html5 |\nEmbed images using the <<X66,data: uri scheme>>.\n\n|css-signature |html5, xhtml11 |\nSet a 'CSS signature' for the document (sets the 'id' attribute of the\nHTML 'body' element). CSS signatures provide a mechanism that allows\nusers to personalize the document appearance. The term 'CSS signature'\nwas http://archivist.incutio.com/viewlist/css-discuss/13291[coined by\nEric Meyer].\n\n\n|disable-javascript |xhtml11, html5 |\nIf the `disable-javascript` attribute is defined the `asciidoc.js`\nJavaScript is not embedded or linked to the output document.  By\ndefault AsciiDoc automatically embeds or links the `asciidoc.js`\nJavaScript to the output document. The script dynamically generates\n<<X91,table of contents>> and <<X92,footnotes>>.\n\n|[[X97]] docinfo, docinfo1, docinfo2 |All backends |\nThese three attributes control which <<X87,document information\nfiles>> will be included in the the header of the output file:\n\ndocinfo:: Include `<filename>-docinfo.<ext>`\ndocinfo1:: Include `docinfo.<ext>`\ndocinfo2:: Include `docinfo.<ext>` and `<filename>-docinfo.<ext>`\n\nWhere `<filename>` is the file name (sans extension) of the AsciiDoc\ninput file and `<ext>` is `.html` for HTML outputs or `.xml` for\nDocBook outputs. If the input file is the standard input then the\noutput file name is used. The following example will include the\n`mydoc-docinfo.xml` docinfo file in the DocBook `mydoc.xml` output\nfile:\n\n  $ asciidoc -a docinfo -b docbook mydoc.txt\n\nThis next example will include `docinfo.html` and `mydoc-docinfo.html`\ndocinfo files in the HTML output file:\n\n  $ asciidoc -a docinfo2 -b html4 mydoc.txt\n\n\n|[[X54]]encoding |html4, html5, xhtml11, docbook |\nSet the input and output document character set encoding. For example\nthe `--attribute encoding=ISO-8859-1` command-line option will set the\ncharacter set encoding to `ISO-8859-1`.\n\n- The default encoding is UTF-8.\n- This attribute specifies the character set in the output document.\n- The encoding name must correspond to a Python codec name or alias.\n- The 'encoding' attribute can be set using an AttributeEntry inside\n  the document header. For example:\n\n  :encoding: ISO-8859-1\n\n|[[X45]]icons |xhtml11, html5 |\nLink admonition paragraph and admonition block icon images and badge\nimages. By default 'icons' is undefined and text is used in place of\nicon images.\n\n|[[X44]]iconsdir |html4, html5, xhtml11, docbook |\nThe name of the directory containing linked admonition icons,\nnavigation icons and the `callouts` sub-directory (the `callouts`\nsub-directory contains <<X105,callout>> number images). 'iconsdir'\ndefaults to `./images/icons`.\n\n|imagesdir |html4, html5, xhtml11, docbook |\nIf this attribute is defined it is prepended to the target image file\nname paths in inline and block image macros.\n\n|keywords, description, title |html4, html5, xhtml11 |\nThe 'keywords' and 'description' attributes set the correspondingly\nnamed HTML meta tag contents; the 'title' attribute sets the HTML\ntitle tag contents.  Their principle use is for SEO (Search Engine\nOptimisation).  All three are optional, but if they are used they must\nappear in the document header (or on the command-line). If 'title' is\nnot specified the AsciiDoc document title is used.\n\n|linkcss |html5, xhtml11 |\nLink CSS stylesheets and JavaScripts. By default 'linkcss' is\nundefined in which case stylesheets and scripts are automatically\nembedded in the output document.\n\n|[[X103]]max-width |html5, xhtml11 |\nSet the document maximum display width (sets the 'body' element CSS\n'max-width' property).\n\n|numbered |html4, html5, xhtml11, docbook (XSL Stylesheets) |\nAdds section numbers to section titles. The 'docbook' backend ignores\n'numbered' attribute entries after the document header.\n\n|plaintext | All backends |\nIf this global attribute is defined all inline substitutions are\nsuppressed and block indents are retained.  This option is useful when\ndealing with large amounts of imported plain text.\n\n|quirks |xhtml11 |\nInclude the `xhtml11-quirks.conf` configuration file and\n`xhtml11-quirks.css` <<X35,stylesheet>> to work around IE6 browser\nincompatibilities. This feature is deprecated and its use is\ndiscouraged -- documents are still viewable in IE6 without it.\n\n|revremark |docbook |\nA short summary of changes in this document revision. Must be defined\nprior to the first document section. The document also needs to be\ndated to output this attribute.\n\n|scriptsdir |html5, xhtml11 |\nThe name of the directory containing linked JavaScripts.\nSee <<X35,HTML stylesheets and JavaScript locations>>.\n\n|sgml |docbook45 |\nThe `--backend=docbook45` command-line option produces DocBook 4.5\nXML.  You can produce the older DocBook SGML format using the\n`--attribute sgml` command-line option.\n\n|stylesdir |html5, xhtml11 |\nThe name of the directory containing linked or embedded\n<<X35,stylesheets>>.\nSee <<X35,HTML stylesheets and JavaScript locations>>.\n\n|stylesheet |html5, xhtml11 |\nThe file name of an optional additional CSS <<X35,stylesheet>>.\n\n|theme |html5, xhtml11 |\nUse alternative stylesheet (see <<X35,Stylesheets>>).\n\n|[[X91]]toc |html5, xhtml11, docbook (XSL Stylesheets) |\nAdds a table of contents to the start of an article or book document.\nThe `toc` attribute can be specified using the `--attribute toc`\ncommand-line option or a `:toc:` attribute entry in the document\nheader. The 'toc' attribute is defined by default when the 'docbook'\nbackend is used. To disable table of contents generation undefine the\n'toc' attribute by putting a `:toc!:` attribute entry in the document\nheader or from the command-line with an `--attribute toc!` option.\n\n*xhtml11 and html5 backends*\n\n- JavaScript needs to be enabled in your browser.\n- The following example generates a numbered table of contents using a\n  JavaScript embedded in the `mydoc.html` output document:\n\n  $ asciidoc -a toc -a numbered mydoc.txt\n\n|toc2 |html5, xhtml11 |\nAdds a scrollable table of contents in the left hand margin of an\narticle or book document. Use the 'max-width' attribute to change the\ncontent width. In all other respects behaves the same as the 'toc'\nattribute.\n\n|toc-placement |html5, xhtml11 |\nWhen set to 'auto' (the default value) asciidoc(1) will place the\ntable of contents in the document header. When 'toc-placement' is set\nto 'manual' the TOC can be positioned anywhere in the document by\nplacing the `toc::[]` block macro at the point you want the TOC to\nappear.\n\nNOTE: If you use 'toc-placement' then you also have to define the\n<<X91,toc>> attribute.\n\n|toc-title |html5, xhtml11 |\nSets the table of contents title (defaults to 'Table of Contents').\n\n|toclevels |html5, xhtml11 |\nSets the number of title levels (1..4) reported in the table of\ncontents (see the 'toc' attribute above). Defaults to 2 and must be\nused with the 'toc' attribute. Example usage:\n\n  $ asciidoc -a toc -a toclevels=3 doc/asciidoc.txt\n\n|====================================================================\n\n\n[appendix]\nLicense\n-------\nAsciiDoc is free software; you can redistribute it and/or modify it\nunder the terms of the 'GNU General Public License version 2' (GPLv2)\nas published by the Free Software Foundation.\n\nAsciiDoc is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\nGeneral Public License version 2 for more details.\n\nAsciiDoc Highlighter sponsored by O'Reilly Media\n\nCopyright (C) 2002-2011 Stuart Rackham.\n"
  },
  {
    "path": "demo/kitchen-sink/docs/assembly_x86.asm",
    "content": "section\t.text\n    global main         ;must be declared for using gcc\n\nmain:\t                ;tell linker entry point\n\n\tmov\tedx, len\t    ;message length\n\tmov\tecx, msg\t    ;message to write\n\tmov\tebx, 1\t        ;file descriptor (stdout)\n\tmov\teax, 4\t        ;system call number (sys_write)\n\tint\t0x80\t        ;call kernel\n\n\tmov\teax, 1\t        ;system call number (sys_exit)\n\tint\t0x80\t        ;call kernel\n\nsection\t.data\n\nmsg\tdb\t'Hello, world!',0xa\t;our dear string\nlen\tequ\t$ - msg\t\t\t;length of our dear string\n"
  },
  {
    "path": "demo/kitchen-sink/docs/autohotkey.ahk",
    "content": "#NoEnv\nSetBatchLines -1\n\nCoordMode Mouse, Screen\nOnExit GuiClose\n\nzoom := 9\n\ncomputeSize(){\n\tglobal as_x\n\tas_x := Round(ws_x/zoom/2 - 0.5)\n\tif (zoom>1) {\n\t\tpix := Round(zoom)\n\t} ele {\n\t\tpix := 1\n\t}\n    ToolTip Message %as_x% %zoom% %ws_x% %hws_x% \n}\n\nhdc_frame := DllCall(\"GetDC\", UInt, MagnifierID)\n\n; comment\nDrawCross(byRef x=\"\", rX,rY,z, dc){\n        ;specify the style, thickness and color of the cross lines\n    h_pen := DllCall( \"gdi32.dll\\CreatePen\", Int, 0, Int, 1, UInt, 0x0000FF)\n}\n\n;Ctrl ^; Shift +; Win #; Alt !\n^NumPadAdd::\n^WheelUp::   \n^;::   ;comment\n    If(zoom < ws_x and ( A_ThisHotKey = \"^WheelUp\" or A_ThisHotKey =\"^NumPadAdd\") )\n\t\tzoom *= 1.189207115         ; sqrt(sqrt(2))\n\tGosub,setZoom\nreturn\n"
  },
  {
    "path": "demo/kitchen-sink/docs/batchfile.bat",
    "content": ":: batch file highlighting in Ace!\n@echo off\n\nCALL set var1=%cd%\necho unhide everything in %var1%!\n\n:: FOR loop in bat is super strange!\nFOR /f \"tokens=*\" %%G IN ('dir /A:D /b') DO (\necho %var1%%%G\nattrib -r -a -h -s \"%var1%%%G\" /D /S\n)\n\npause\n\nREM that's all\n"
  },
  {
    "path": "demo/kitchen-sink/docs/bro.bro",
    "content": "##! Add countries for the originator and responder of a connection\n##! to the connection logs.\n\nmodule Conn;\n\nexport {\n\tredef record Conn::Info += {\n\t\t## Country code for the originator of the connection based \n\t\t## on a GeoIP lookup.\n\t\torig_cc: string &optional &log;\n\t\t## Country code for the responser of the connection based \n\t\t## on a GeoIP lookup.\n\t\tresp_cc: string &optional &log;\n\t};\n}\n\nevent connection_state_remove(c: connection) \n\t{\n\tlocal orig_loc = lookup_location(c$id$orig_h);\n\tif ( orig_loc?$country_code )\n\t\tc$conn$orig_cc = orig_loc$country_code;\n\n\tlocal resp_loc = lookup_location(c$id$resp_h);\n\tif ( resp_loc?$country_code )\n\t\tc$conn$resp_cc = resp_loc$country_code;\n\t}"
  },
  {
    "path": "demo/kitchen-sink/docs/c9search.c9search_results",
    "content": "Searching for \u0001var\u0001 in\u0001/.c9/metadata/workspace/plugins\u0001\u0001regexp, case sensitive, whole word\u0001\n\nconfigs/default.js:\n    1: var fs = require(\"fs\");\n\t2: var argv = require('optimist').argv;\n\t3: var path = require(\"path\");\n\t5: var clientExtensions = {};\n\t6: var clientDirs = fs.readdirSync(__dirname + \"/../plugins-client\");\n\t7: for (var i = 0; i < clientDirs.length; i++) {\n\t8:     var dir = clientDirs[i];\n\t12:     var name = dir.split(\".\")[1];\n\t16: var projectDir = (argv.w && path.resolve(process.cwd(), argv.w)) || process.cwd();\n\t17: var fsUrl = \"/workspace\";\n\t19: var port = argv.p || process.env.PORT || 3131;\n\t20: var host = argv.l || \"localhost\";\n\t22: var config = {\n\nconfigs/local.js:\n\t2: var config = require(\"./default\");\n\nconfigs/packed.js:\n\t1: var config = require(\"./default\");\n\n\nFound 15 matches in 3 files"
  },
  {
    "path": "demo/kitchen-sink/docs/c_cpp.cpp",
    "content": "// compound assignment operators\n\n#include <iostream>\n\n#include \\\n   <iostream>\n\n#include \\\n   \\\n   <iostream>\n\n#include \\\n   \\\n   \"iostream\"\n\n#include <boost/asio/io_service.hpp>\n#include \"boost/asio/io_service.hpp\"\n\n#include \\\n   \\\n   \"iostream\" \\\n   \"string\" \\\n   <vector>\n   \nusing namespace std;\n\n//\nint main ()\n{\n    int a, b=3; /* foobar */\n    a = b; // single line comment\\\n        continued\n    a+=2; // equivalent to a=a+2\n    cout << a;\n    #if VERBOSE >= 2\n        prints(\"trace message\\n\");\n    #endif\n    return 0;\n}\n\n/* Print an error message and get out */\n#define ABORT                             \\\n    do {                                  \\\n        print( \"Abort\\n\" );                \\\n        exit(8);                          \\\n} while (0)                      /* Note: No semicolon */"
  },
  {
    "path": "demo/kitchen-sink/docs/cirru.cirru",
    "content": "-- https://github.com/Cirru/cirru-gopher/blob/master/code/scope.cr,\n\nset a (int 2)\n\nprint (self)\n\nset c (child)\n\nunder c\n  under parent\n    print a\n\nprint $ get c a\n\nset c x (int 3)\nprint $ get c x\n\nset just-print $ code\n  print a\n\nprint just-print\n\neval (self) just-print\neval just-print\n\nprint (string \"string with space\")\nprint (string \"escapes \\n \\\"\\\\\")\n\nbrackets ((((()))))\n\n\"eval\" $ string \"eval\"\n\nprint (add $ (int 1) (int 2))\n\nprint $ unwrap $\n  map (a $ int 1) (b $ int 2)\n\nprint a\n  int 1\n  , b c\n  int 2\n  , d"
  },
  {
    "path": "demo/kitchen-sink/docs/clojure.clj",
    "content": "(defn parting\n  \"returns a String parting in a given language\"\n  ([] (parting \"World\"))\n  ([name] (parting name \"en\"))\n  ([name language]\n    ; condp is similar to a case statement in other languages.\n    ; It is described in more detail later.\n    ; It is used here to take different actions based on whether the\n    ; parameter \"language\" is set to \"en\", \"es\" or something else.\n    (condp = language\n      \"en\" (str \"Goodbye, \" name)\n      \"es\" (str \"Adios, \" name)\n      (throw (IllegalArgumentException.\n        (str \"unsupported language \" language))))))\n\n(println (parting)) ; -> Goodbye, World\n(println (parting \"Mark\")) ; -> Goodbye, Mark\n(println (parting \"Mark\" \"es\")) ; -> Adios, Mark\n(println (parting \"Mark\", \"xy\")) ; -> java.lang.IllegalArgumentException: unsupported language xy"
  },
  {
    "path": "demo/kitchen-sink/docs/cobol.CBL",
    "content": "TODO"
  },
  {
    "path": "demo/kitchen-sink/docs/coffee.coffee",
    "content": "#!/usr/bin/env coffee\n\ntry\n    throw URIError decodeURI(0xC0ffee * 123456.7e-8 / .9)\ncatch e\n    console.log 'qstring' + \"qqstring\" + '''\n        qdoc\n    ''' + \"\"\"\n        qqdoc\n    \"\"\"\n\ndo ->\n    ###\n    herecomment\n    ###\n    re = /regex/imgy.test ///\n        heregex  # comment\n    ///imgy\n    this isnt: `just JavaScript`\n    undefined\n    \nsentence = \"#{ 22 / 7 } is a decent approximation of π\""
  },
  {
    "path": "demo/kitchen-sink/docs/coldfusion.cfm",
    "content": "<!--- hello world --->\n\n<cfset welcome=\"Hello World!\">\n\n<cfoutput>#welcome#</cfoutput>"
  },
  {
    "path": "demo/kitchen-sink/docs/csharp.cs",
    "content": "public void HelloWorld() {\n    //Say Hello!\n    Console.WriteLine(\"Hello World\");\n}"
  },
  {
    "path": "demo/kitchen-sink/docs/csound_document.csd",
    "content": "text\n<CsoundSynthesizer>\n<CsInstruments>\n0dbfs = 1\nprints \"hello, world\\n\"\n</CsInstruments>\n<CsScore>\ni 1 0 0\n</CsScore>\n<html>\n<!DOCTYPE html>\n</html>\n</CsoundSynthesizer>\n"
  },
  {
    "path": "demo/kitchen-sink/docs/csound_orchestra.orc",
    "content": "/*\n * comment\n */\n; comment\n// comment\n\ninstr/**/1,/**/N_a_M_e_,/**/+Name/**///\n  iDuration = p3\n  outc:a(aSignal)\nendin\n\nopcode/**/aUDO,/**/i[],/**/aik//\n  aUDO\nendop\n\n123 0123456789\n0xabcdef0123456789 0XABCDEF\n1e2 3e+4 5e-6 7E8 9E+0 1E-2 3. 4.56 .789\n\n\"characters$MACRO.\"\n\"\\\\\\a\\b\\n\\r\\t\\012\\345\\67\\\"\"\n\n{{\ncharacters$MACRO.\n}}\n{{\\\\\\a\\b\\n\\r\\t\\\"\\012\\345\\67}}\n\n+ - ~ ¬ ! * / ^ % << >> < > <= >= == != & # | && || ? : += -= *= /=\n\n0dbfs A4 kr ksmps nchnls nchnls_i sr\n\ndo else elseif endif enduntil fi if ithen kthen od then until while\nreturn rireturn\n\naLabel:\n label2:\n\ngoto aLabel\nreinit aLabel\ncggoto 1==0, aLabel\ntimout 0, 0, aLabel\nloop_ge 0, 0, 0, aLabel\n\nreadscore {{\ni 1 0 0\n}}\npyrun {{\n# Python\n}}\nlua_exec {{\n-- Lua\n}}\n\n#include/**/\"file.udo\"\n#include/**/|file.udo|\n\n#ifdef MACRO\n#else\n#ifndef MACRO\n#endif\n#undef MACRO\n\n#   define MACRO#macro_body#\n#define/**/\nMACRO/**/\n#\\#macro\nbody\\##\n\n#define MACRO(ARG1#ARG2) #macro_body#\n#define/**/\nMACRO(ARG1'ARG2'ARG3)/**/\n#\\#macro\nbody\\##\n\n$MACRO $MACRO.\n$MACRO(x)\n@0\n@@ 1\n$MACRO.(((x#y\\)))' \"(#'x)\\)x\\))\"# {{x\\))x)\\)(#'}});\n"
  },
  {
    "path": "demo/kitchen-sink/docs/csound_score.sco",
    "content": "/*\n * comment\n */\n; comment\n// comment\na b C d e f i q s t v x y\nz\nnp0 nP1 Np2 NP3\nm/**/label;\nn label\n123 0123456789\n0xabcdef0123456789 0XABCDEF\n1e2 3e+4 5e-6 7E8 9E+0 1E-2 3. 4.56 .789\n\"characters$MACRO.\"\n{ 1 I\n  { 2 J\n    { 3 K\n      $I $J $K\n    }\n  }\n}\n#include \"score.sco\"\n"
  },
  {
    "path": "demo/kitchen-sink/docs/css.css",
    "content": ".text-layer {\n    font: 12px Monaco, \"Courier New\", monospace;\n    cursor: text;\n}\n\n.blinker {\n    animation: blink 1s linear infinite alternate;\n}\n\n@keyframes blink {\n    0%, 40% {\n        opacity: 0; /*\n        */\n        opacity: 1\n    }\n\n    40.5%, 100% {\n        opacity: 1\n    }\n}\n\n@document url(http://c9.io/), url-prefix(http://ace.c9.io/build/),\n   domain(c9.io), regexp(\"https:.*\") /**/\n{\n    /**/\n    img[title]:before \n    {\n        content: attr(title) \"\\AImage \\\n            retrieved from\"\n            attr(src); /*\n            */\n        white-space: pre;\n        display: block;\n        background: url(asdasd); \"err\n    }\n}\n\n"
  },
  {
    "path": "demo/kitchen-sink/docs/curly.curly",
    "content": "<html>\n    <head>\n\n    <style type=\"text/css\">\n        .text-layer {\n            font-family: Monaco, \"Courier New\", monospace;\n            font-size: 12px;\n            cursor: text;\n        }\n    </style>\n\n    </head>\n    <body>\n        <h1 style=\"color:red\">{{author_name}}</h1>\n    </body>\n</html>\n"
  },
  {
    "path": "demo/kitchen-sink/docs/d.d",
    "content": "#!/usr/bin/env rdmd\n// Computes average line length for standard input.\nimport std.stdio;\n\nvoid main() {\n    ulong lines = 0;\n    double sumLength = 0;\n    foreach (line; stdin.byLine()) {\n        ++lines;\n        sumLength += line.length;\n    }\n    writeln(\"Average line length: \",\n        lines ? sumLength / lines : 0);\n}"
  },
  {
    "path": "demo/kitchen-sink/docs/dart.dart",
    "content": "// Go ahead and modify this example.\n\nimport \"dart:html\";\n\n// Computes the nth Fibonacci number.\nint fibonacci(int n) {\n  if (n < 2) return n;\n  return fibonacci(n - 1) + fibonacci(n - 2);\n}\n\n// Displays a Fibonacci number.\nvoid main() {\n  int i = 20;\n  String message = \"fibonacci($i) = ${fibonacci(i)}\";\n\n  // This example uses HTML to display the result and it will appear\n  // in a nested HTML frame (an iframe).\n  document.body.append(new HeadingElement.h1()..appendText(message));\n}\n"
  },
  {
    "path": "demo/kitchen-sink/docs/diff.diff",
    "content": "diff --git a/lib/ace/edit_session.js b/lib/ace/edit_session.js\r\nindex 23fc3fc..ed3b273 100644\r\n--- a/lib/ace/edit_session.js\r\n+++ b/lib/ace/edit_session.js\r\n@@ -51,6 +51,7 @@ var TextMode = require(\"./mode/text\").Mode;\r\n var Range = require(\"./range\").Range;\r\n var Document = require(\"./document\").Document;\r\n var BackgroundTokenizer = require(\"./background_tokenizer\").BackgroundTokenizer;\r\n+var SearchHighlight = require(\"./search_highlight\").SearchHighlight;\r\n \r\n /**\r\n  * class EditSession\r\n@@ -307,6 +308,13 @@ var EditSession = function(text, mode) {\r\n         return token;\r\n     };\r\n \r\n+    this.highlight = function(re) {\r\n+        if (!this.$searchHighlight) {\r\n+            var highlight = new SearchHighlight(null, \"ace_selected-word\", \"text\");\r\n+            this.$searchHighlight = this.addDynamicMarker(highlight);\r\n+        }\r\n+        this.$searchHighlight.setRegexp(re);\r\n+    }\r\n     /**\r\n     * EditSession.setUndoManager(undoManager)\r\n     * - undoManager (UndoManager): The new undo manager\r\n@@ -556,7 +564,8 @@ var EditSession = function(text, mode) {\r\n             type : type || \"line\",\r\n             renderer: typeof type == \"function\" ? type : null,\r\n             clazz : clazz,\r\n-            inFront: !!inFront\r\n+            inFront: !!inFront,\r\n+            id: id\r\n         }\r\n \r\n         if (inFront) {\r\ndiff --git a/lib/ace/editor.js b/lib/ace/editor.js\r\nindex 834e603..b27ec73 100644\r\n--- a/lib/ace/editor.js\r\n+++ b/lib/ace/editor.js\r\n@@ -494,7 +494,7 @@ var Editor = function(renderer, session) {\r\n      * Emitted when a selection has changed.\r\n      **/\r\n     this.onSelectionChange = function(e) {\r\n-        var session = this.getSession();\r\n+        var session = this.session;\r\n \r\n         if (session.$selectionMarker) {\r\n             session.removeMarker(session.$selectionMarker);\r\n@@ -509,12 +509,40 @@ var Editor = function(renderer, session) {\r\n             this.$updateHighlightActiveLine();\r\n         }\r\n \r\n-        var self = this;\r\n-        if (this.$highlightSelectedWord && !this.$wordHighlightTimer)\r\n-            this.$wordHighlightTimer = setTimeout(function() {\r\n-                self.session.$mode.highlightSelection(self);\r\n-                self.$wordHighlightTimer = null;\r\n-            }, 30, this);\r\n+        var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp()\r\n     };\r\ndiff --git a/lib/ace/search_highlight.js b/lib/ace/search_highlight.js\r\nnew file mode 100644\r\nindex 0000000..b2df779\r\n--- /dev/null\r\n+++ b/lib/ace/search_highlight.js\r\n@@ -0,0 +1,3 @@\r\n+new\r\n+empty file"
  },
  {
    "path": "demo/kitchen-sink/docs/dot.dot",
    "content": "// Original source: http://www.graphviz.org/content/lion_share\n##\"A few people in the field of genetics are using dot to draw \"marriage node diagram\"  pedigree drawings.  Here is one I have done of a test pedigree from the FTREE pedigree drawing package (Lion Share was a racehorse).\" Contributed by David Duffy.\n\n##Command to get the layout: \"dot -Tpng thisfile > thisfile.png\"\n\ndigraph Ped_Lion_Share           {\n# page = \"8.2677165,11.692913\" ;\nratio = \"auto\" ;\nmincross = 2.0 ;\nlabel = \"Pedigree Lion_Share\" ;\n\n\"001\" [shape=box     , regular=1,style=filled,fillcolor=white   ] ;\n\"002\" [shape=box     , regular=1,style=filled,fillcolor=white   ] ;\n\"003\" [shape=circle  , regular=1,style=filled,fillcolor=white   ] ;\n\"004\" [shape=box     , regular=1,style=filled,fillcolor=white   ] ;\n\"005\" [shape=box     , regular=1,style=filled,fillcolor=white   ] ;\n\"006\" [shape=circle  , regular=1,style=filled,fillcolor=white   ] ;\n\"007\" [shape=circle  , regular=1,style=filled,fillcolor=white   ] ;\n\"009\" [shape=circle  , regular=1,style=filled,fillcolor=white   ] ;\n\"014\" [shape=circle  , regular=1,style=filled,fillcolor=white   ] ;\n\"015\" [shape=circle  , regular=1,style=filled,fillcolor=white   ] ;\n\"016\" [shape=circle  , regular=1,style=filled,fillcolor=white   ] ;\n\"ZZ01\" [shape=circle  , regular=1,style=filled,fillcolor=white   ] ;\n\"ZZ02\" [shape=circle  , regular=1,style=filled,fillcolor=white   ] ;\n\"017\" [shape=circle  , regular=1,style=filled,fillcolor=white   ] ;\n\"012\" [shape=circle  , regular=1,style=filled,fillcolor=white   ] ;\n\"008\" [shape=box     , regular=1,style=filled,fillcolor=white   ] ;\n\"011\" [shape=box     , regular=1,style=filled,fillcolor=white   ] ;\n\"013\" [shape=box     , regular=1,style=filled,fillcolor=white   ] ;\n\"010\" [shape=box     , regular=1,style=filled,fillcolor=white   ] ;\n\"023\" [shape=circle  , regular=1,style=filled,fillcolor=white   ] ;\n\"020\" [shape=circle  , regular=1,style=filled,fillcolor=white   ] ;\n\"021\" [shape=circle  , regular=1,style=filled,fillcolor=white   ] ;\n\"018\" [shape=circle  , regular=1,style=filled,fillcolor=white   ] ;\n\"025\" [shape=circle  , regular=1,style=filled,fillcolor=white   ] ;\n\"019\" [shape=box     , regular=1,style=filled,fillcolor=white   ] ;\n\"022\" [shape=box     , regular=1,style=filled,fillcolor=white   ] ;\n\"024\" [shape=box     , regular=1,style=filled,fillcolor=white   ] ;\n\"027\" [shape=circle  , regular=1,style=filled,fillcolor=white   ] ;\n\"026\" [shape=box     , regular=1,style=filled,fillcolor=white   ] ;\n\"028\" [shape=box     , regular=1,style=filled,fillcolor=grey    ] ;\n\"marr0001\" [shape=diamond,style=filled,label=\"\",height=.1,width=.1] ;\n\"001\" -> \"marr0001\" [dir=none,weight=1] ;\n\"007\" -> \"marr0001\" [dir=none,weight=1] ;\n\"marr0001\" -> \"017\" [dir=none, weight=2] ;\n\"marr0002\" [shape=diamond,style=filled,label=\"\",height=.1,width=.1] ;\n\"001\" -> \"marr0002\" [dir=none,weight=1] ;\n\"ZZ02\" -> \"marr0002\" [dir=none,weight=1] ;\n\"marr0002\" -> \"012\" [dir=none, weight=2] ;\n\"marr0003\" [shape=diamond,style=filled,label=\"\",height=.1,width=.1] ;\n\"002\" -> \"marr0003\" [dir=none,weight=1] ;\n\"003\" -> \"marr0003\" [dir=none,weight=1] ;\n\"marr0003\" -> \"008\" [dir=none, weight=2] ;\n\"marr0004\" [shape=diamond,style=filled,label=\"\",height=.1,width=.1] ;\n\"002\" -> \"marr0004\" [dir=none,weight=1] ;\n\"006\" -> \"marr0004\" [dir=none,weight=1] ;\n\"marr0004\" -> \"011\" [dir=none, weight=2] ;\n\"marr0005\" [shape=diamond,style=filled,label=\"\",height=.1,width=.1] ;\n\"002\" -> \"marr0005\" [dir=none,weight=1] ;\n\"ZZ01\" -> \"marr0005\" [dir=none,weight=1] ;\n\"marr0005\" -> \"013\" [dir=none, weight=2] ;\n\"marr0006\" [shape=diamond,style=filled,label=\"\",height=.1,width=.1] ;\n\"004\" -> \"marr0006\" [dir=none,weight=1] ;\n\"009\" -> \"marr0006\" [dir=none,weight=1] ;\n\"marr0006\" -> \"010\" [dir=none, weight=2] ;\n\"marr0007\" [shape=diamond,style=filled,label=\"\",height=.1,width=.1] ;\n\"005\" -> \"marr0007\" [dir=none,weight=1] ;\n\"015\" -> \"marr0007\" [dir=none,weight=1] ;\n\"marr0007\" -> \"023\" [dir=none, weight=2] ;\n\"marr0008\" [shape=diamond,style=filled,label=\"\",height=.1,width=.1] ;\n\"005\" -> \"marr0008\" [dir=none,weight=1] ;\n\"016\" -> \"marr0008\" [dir=none,weight=1] ;\n\"marr0008\" -> \"020\" [dir=none, weight=2] ;\n\"marr0009\" [shape=diamond,style=filled,label=\"\",height=.1,width=.1] ;\n\"005\" -> \"marr0009\" [dir=none,weight=1] ;\n\"012\" -> \"marr0009\" [dir=none,weight=1] ;\n\"marr0009\" -> \"021\" [dir=none, weight=2] ;\n\"marr0010\" [shape=diamond,style=filled,label=\"\",height=.1,width=.1] ;\n\"008\" -> \"marr0010\" [dir=none,weight=1] ;\n\"017\" -> \"marr0010\" [dir=none,weight=1] ;\n\"marr0010\" -> \"018\" [dir=none, weight=2] ;\n\"marr0011\" [shape=diamond,style=filled,label=\"\",height=.1,width=.1] ;\n\"011\" -> \"marr0011\" [dir=none,weight=1] ;\n\"023\" -> \"marr0011\" [dir=none,weight=1] ;\n\"marr0011\" -> \"025\" [dir=none, weight=2] ;\n\"marr0012\" [shape=diamond,style=filled,label=\"\",height=.1,width=.1] ;\n\"013\" -> \"marr0012\" [dir=none,weight=1] ;\n\"014\" -> \"marr0012\" [dir=none,weight=1] ;\n\"marr0012\" -> \"019\" [dir=none, weight=2] ;\n\"marr0013\" [shape=diamond,style=filled,label=\"\",height=.1,width=.1] ;\n\"010\" -> \"marr0013\" [dir=none,weight=1] ;\n\"021\" -> \"marr0013\" [dir=none,weight=1] ;\n\"marr0013\" -> \"022\" [dir=none, weight=2] ;\n\"marr0014\" [shape=diamond,style=filled,label=\"\",height=.1,width=.1] ;\n\"019\" -> \"marr0014\" [dir=none,weight=1] ;\n\"020\" -> \"marr0014\" [dir=none,weight=1] ;\n\"marr0014\" -> \"024\" [dir=none, weight=2] ;\n\"marr0015\" [shape=diamond,style=filled,label=\"\",height=.1,width=.1] ;\n\"022\" -> \"marr0015\" [dir=none,weight=1] ;\n\"025\" -> \"marr0015\" [dir=none,weight=1] ;\n\"marr0015\" -> \"027\" [dir=none, weight=2] ;\n\"marr0016\" [shape=diamond,style=filled,label=\"\",height=.1,width=.1] ;\n\"024\" -> \"marr0016\" [dir=none,weight=1] ;\n\"018\" -> \"marr0016\" [dir=none,weight=1] ;\n\"marr0016\" -> \"026\" [dir=none, weight=2] ;\n\"marr0017\" [shape=diamond,style=filled,label=\"\",height=.1,width=.1] ;\n\"026\" -> \"marr0017\" [dir=none,weight=1] ;\n\"027\" -> \"marr0017\" [dir=none,weight=1] ;\n\"marr0017\" -> \"028\" [dir=none, weight=2] ;\n}\n"
  },
  {
    "path": "demo/kitchen-sink/docs/drools.drl",
    "content": "/*\n * Copyright 2010 JBoss Inc\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n Original source\n https://github.com/droolsjbpm/drools/blob/master/drools-examples/\n http://docs.jboss.org/drools/\n*/\npackage com.example.ace\n\nimport java.math.BigDecimal\nimport function my.package.Foo.hello\n\ndeclare FactType\n  @author( Bob )\n  id : String\n  name : String @maxLength(100) @notnull\n\n  value : BigDecimal\nend\n\ndeclare FactType2 extends AnotherType\nend\n\ndeclare trait TraitType extends com.package.AnotherType\nend\n\n\ndeclare trait GoldenCustomer\n    balance : long @Alias( \"org.acme.foo.accountBalance\" )\nend\n\nglobal org.slf4j.Logger logger\n\n/**\n * @param name who we'll salute?\n */\nfunction String hello(String name) {\n    return \"Hello \"+name+\"!\";\n}\n\nrule \"Trim all strings\"\n  dialect \"java\"\n  no-loop\nwhen // fdsfds\n  $s : String(a == null || == \"empty\", $g : size)\n  Cheese( name matches \"(Buffalo)?\\\\S*Mozarella\" )\n    CheeseCounter( cheeses contains $var ) // contains with a variable\n    CheeseCounter( cheese memberof $matureCheeses )\n    Cheese( name soundslike 'foobar' )\n    Message( routingValue str[startsWith] \"R1\" )\n    Cheese( name in ( \"stilton\", \"cheddar\", $cheese ) )\n    Person( eval( age == girlAge + 2 ), sex = 'M' )\nthen\n  /**\n   * TODO There mus be better way\n   */\n  retract($s);\n  String a = \"fd\";\n  a.toString();\n\n  insert($s.trim());\nend\n\nquery isContainedIn( String x, String y )\n  Location( x, y; )\n  or\n  ( Location( z, y; ) and isContainedIn( x, z; ) )\nend\n\nrule \"go\" salience 10\nwhen\n    $s : String(  )\nthen\n    System.out.println( $s );\nend\n\nrule \"When all English buses are not red\"\nwhen\n    not(forall( $bus : Bus( nationality == 'english')\n                Bus( this == $bus, color = 'red' ) ))\nthen\n    // What if all english buses are not red?\nend\n\nrule \"go1\"\nwhen\n    String( this == \"go1\" )\n    isContainedIn(\"Office\", \"House\"; )\nthen\n    System.out.println( \"office is in the house\" );\nend\n\nrule \"go2\"\nwhen\n    String( this == \"go2\" )\n    isContainedIn(\"Draw\", \"House\"; )\nthen\n    System.out.println( \"Draw in the House\" );\nend\n\n/**\n * Go Right\n */\nrule GoRight dialect \"mvel\"  salience (Math.abs( $df.colDiff ))  when\n    $df   : DirectionDiff(colDiff > 0 )\n    $target : Cell(  row == $df.row, col == ($df.col + 1) )\n    CellContents( cell == $target, cellType != CellType.WALL )\n    not Direction(character == $df.fromChar, horizontal == Direction.RIGHT )\nthen\n    System.out.println( \"monster right\" );\n    retract( $df );\n    insert( new Direction($df.fromChar, Direction.RIGHT, Direction.NONE ) );\nend\n"
  },
  {
    "path": "demo/kitchen-sink/docs/eiffel.e",
    "content": "note\n\tdescription: \"Represents a person.\"\n\nclass\n\tPERSON\n\ncreate\n\tmake, make_unknown\n\nfeature {NONE} -- Creation\n\n\tmake (a_name: like name)\n\t\t\t-- Create a person with `a_name' as `name'.\n\t\tdo\n\t\t\tname := a_name\n\t\tensure\n\t\t\tname = a_name\n\t\tend\n\n\tmake_unknown\n\t\tdo ensure\n\t\t\tname = Void\n\t\tend\n\nfeature -- Access\n\n\tname: detachable STRING\n\t\t\t-- Full name or Void if unknown.\n\nend"
  },
  {
    "path": "demo/kitchen-sink/docs/ejs.ejs",
    "content": "<!DOCTYPE html>\n<html>\n    <head>\n        <title>Cloud9 Rocks!</title>\n    </head>\n    <body>\n\n    <table class=\"table\">\n        <tr>\n            <th>Name</th>\n            <th>Size</th>\n        </tr>\n        <% if (!isRoot) { %>\n            <tr>\n                <td><a href=\"..\">..</a></td>\n                <td></td></td>\n            </tr>\n        <% } %>\n        <% entries.forEach(function(entry) { %>\n            <tr>\n                <td>\n                    <span class=\"glyphicon <%= entry.mime == 'directory' ? 'folder': 'file'%>\"></span>\n                    <a href=\"<%= entry.name %>\"><%= entry.name %></a>\n                </td>\n                <td><%= entry.size %></td>\n            </tr>\n        <% }) %>\n    </table>\n    \n    </body>\n</html>"
  },
  {
    "path": "demo/kitchen-sink/docs/elixir.ex",
    "content": "defmodule HelloModule do\n  @moduledoc \"\"\"\n    This is supposed to be `markdown`.\n    __Yes__ this is [mark](http://down.format)\n\n    # Truly\n\n    ## marked\n\n    * with lists\n    * more\n    * and more\n\n        Even.with(code)\n        blocks |> with |> samples\n\n    _Docs are first class citizens in Elixir_ (Jose Valim)\n  \"\"\"\n  \n  # A \"Hello world\" function\n  def some_fun do\n    IO.puts \"Juhu Kinners!\"\n  end\n  # A private function\n  defp priv do\n    is_regex ~r\"\"\"\n       This is a regex\n       spanning several\n       lines.\n    \"\"\"\n    x = elem({ :a, :b, :c }, 0)  #=> :a\n  end\nend\n\ntest_fun = fn(x) ->\n  cond do\n    x > 10 ->\n      :greater_than_ten\n    true ->\n      :maybe_ten\n  end\nend"
  },
  {
    "path": "demo/kitchen-sink/docs/elm.elm",
    "content": "{- Ace {- 4 -} Elm -}\nmain = lift clock (every second)\n\nclock t = collage 400 400 [ filled    lightGrey   (ngon 12 110)\n                          , outlined (solid grey) (ngon 12 110)\n                          , hand orange   100  t\n                          , hand charcoal 100 (t/60)\n                          , hand charcoal 60  (t/720) ]\n\nhand clr len time =\n  let angle = degrees (90 - 6 * inSeconds time)\n  in  traced (solid clr) <| segment (0,0) (len * cos angle, len * sin angle)"
  },
  {
    "path": "demo/kitchen-sink/docs/erlang.erl",
    "content": "  %% A process whose only job is to keep a counter.\n  %% First version\n  -module(counter).\n  -export([start/0, codeswitch/1]).\n \n  start() -> loop(0).\n \n  loop(Sum) ->\n    receive\n       {increment, Count} ->\n          loop(Sum+Count);\n       {counter, Pid} ->\n          Pid ! {counter, Sum},\n          loop(Sum);\n       code_switch ->\n          ?MODULE:codeswitch(Sum)\n          % Force the use of 'codeswitch/1' from the latest MODULE version\n    end.\n \n  codeswitch(Sum) -> loop(Sum)."
  },
  {
    "path": "demo/kitchen-sink/docs/forth.frt",
    "content": ": HELLO  ( -- )  CR .\" Hello, world!\" ; \n\nHELLO <cr>\nHello, world!\n\n: [CHAR]   CHAR  POSTPONE LITERAL ; IMMEDIATE\n\n0 value ii        0 value jj\n0 value KeyAddr   0 value KeyLen\ncreate SArray   256 allot   \\ state array of 256 bytes\n: KeyArray      KeyLen mod   KeyAddr ;\n\n: get_byte      + c@ ;\n: set_byte      + c! ;\n: as_byte       255 and ;\n: reset_ij      0 TO ii   0 TO jj ;\n: i_update      1 +   as_byte TO ii ;\n: j_update      ii SArray get_byte +   as_byte TO jj ;\n: swap_s_ij\n    jj SArray get_byte\n       ii SArray get_byte  jj SArray set_byte\n    ii SArray set_byte\n;\n\n: rc4_init ( KeyAddr KeyLen -- )\n    256 min TO KeyLen   TO KeyAddr\n    256 0 DO   i i SArray set_byte   LOOP\n    reset_ij\n    BEGIN\n        ii KeyArray get_byte   jj +  j_update\n        swap_s_ij\n        ii 255 < WHILE\n        ii i_update\n    REPEAT\n    reset_ij\n;\n: rc4_byte\n    ii i_update   jj j_update\n    swap_s_ij\n    ii SArray get_byte   jj SArray get_byte +   as_byte SArray get_byte  xor\n;"
  },
  {
    "path": "demo/kitchen-sink/docs/fortran.f90",
    "content": "#include \"globalDefines.h\"\n\n!=========================================================\nprogram main\n!========================================================= \n    use params_module, only : nx, ny, nz\n\n    implicit none\n\n    integer, parameter :: g = 9.81\n    real, allocatable, dimension(:,:,:) :: array\n    integer :: a, b, c\n    real*8 :: x, y, z\n      \n    b = 5\n    c = 7\n\n#ifdef ARRAY_COMP\n    allocate(array(10,10,10), status=a)\n\n    write(c,'(i5.5)') b\n#endif\n\n    if(x.lt.5.0) then\n        array(:,:,:) = g\n    else\n        array(:,:,:) = x - y\n    endif\n\n    return\n!========================================================    \nend program main\n!========================================================\n"
  },
  {
    "path": "demo/kitchen-sink/docs/ftl.ftl",
    "content": "<#ftl encoding=\"utf-8\" />\n<#setting locale=\"en_US\" />\n<#import \"library\" as lib />\n<#--\n    FreeMarker comment\n    ${abc} <#assign a=12 />\n-->\n\n<!DOCTYPE html>\n<html lang=\"en-us\">\n    <head>\n        <meta charset=\"utf-8\" />\n        \n        <title>${title!\"FreeMarker\"}<title>\n    </head>\n    \n    <body>\n    \n        <h1>Hello ${name!\"\"}</h1>\n        \n        <p>Today is: ${.now?date}</p>\n        \n        <#assign x = 13>\n        <#if x &gt; 12 && x lt 14>x equals 13: ${x}</#if>\n        \n        <ul>\n            <#list items as item>\n                <li>${item_index}: ${item.name!?split(\"\\n\")[0]}</li>\n            </#list>\n        </ul>\n        \n        User directive: <@lib.function attr1=true attr2='value' attr3=-42.12>Test</@lib.function>\n        <@anotherOne />\n        \n        <#if variable?exists>\n            Deprecated\n        <#elseif variable??>\n            Better\n        <#else>\n            Default\n        </#if>\n        \n        <img src=\"images/${user.id}.png\" />\n        \n    </body>\n</html>\n"
  },
  {
    "path": "demo/kitchen-sink/docs/gcode.gcode",
    "content": "O003 (DIAMOND SQUARE)\nN2 G54 G90 G49 G80\nN3 M6 T1 (1.ENDMILL)\nN4 M3 S1800\nN5 G0 X-.6 Y2.050\nN6 G43  H1  Z.1\nN7 G1 Z-.3 F50.\nN8 G41 D1 Y1.45\nN9 G1 X0 F20.\nN10 G2 J-1.45\n(CUTTER COMP CANCEL)\nN11 G1 Z-.2 F50.\nN12 Y-.990\nN13 G40\nN14 G0 X-.6 Y1.590\nN15 G0 Z.1\nN16 M5 G49 G28 G91 Z0\nN17 CALL O9456\nN18 #500=0.004\nN19 #503=[#500+#501]\nN20 VC45=0.0006\nVS4=0.0007\nN21 G90 G10 L20 P3 X5.Y4. Z6.567\nN22 G0 X5000\nN23 IF [#1 LT 0.370] GOTO 49\nN24 X-0.678 Y+.990\nN25 G84.3 X-0.1\nN26 #4=#5*COS[45]\nN27 #4=#5*SIN[45]\nN28 VZOFZ=652.9658\n%"
  },
  {
    "path": "demo/kitchen-sink/docs/gherkin.feature",
    "content": "@these @_are_ @tags\nFeature: Serve coffee\n  Coffee should not be served until paid for\n  Coffee should not be served until the button has been pressed\n  If there is no coffee left then money should be refunded\n  \n  Scenario Outline: Eating\n    Given there are <start> cucumbers\n    When I eat <eat> cucumbers\n    Then I should have <left> cucumbers\n\n    Examples:\n      | start | eat | left |\n      |  12   |  5  |  7   |\n      |  @20  |  5  |  15  |    \n\n  Scenario: Buy last coffee\n    Given there are 1 coffees left in the machine\n    And I have deposited 1$ \n    When I press the coffee button\n    Then I should be served a \"coffee\"\n    \n  # this a comment\n  \n  \"\"\"\n  this is a \n  pystring\n  \"\"\""
  },
  {
    "path": "demo/kitchen-sink/docs/glsl.glsl",
    "content": "uniform float amplitude;\nattribute float displacement;\nvarying vec3 vNormal;\n\nvoid main() {\n\n    vNormal = normal;\n  \n    // multiply our displacement by the\n    // amplitude. The amp will get animated\n    // so we'll have animated displacement\n    vec3 newPosition = position + \n                       normal * \n                       vec3(displacement *\n                            amplitude);\n\n    gl_Position = projectionMatrix *\n                  modelViewMatrix *\n                  vec4(newPosition,1.0);\n}"
  },
  {
    "path": "demo/kitchen-sink/docs/gobstones.gbs",
    "content": "program {\n    /*\n     * A gobstons multiline comment\n     * Taken from:\n     * http://www.exploringbinary.com/java-hangs-when-converting-2-2250738585072012e-308/\"\n     */\n    sumar(2, 3)\n    }\n    function sumar(a, b) {\n        r := a + b\n    }\n        // unreachable code\n        -- unreachable code\n        # unreachable code\n    procedure hacerAlgo() {\n        Mover(Este)\n        Poner(Rojo)\n        Sacar(Azul)\n    }"
  },
  {
    "path": "demo/kitchen-sink/docs/golang.go",
    "content": "// Concurrent computation of pi.\n// See http://goo.gl/ZuTZM.\n//\n// This demonstrates Go's ability to handle\n// large numbers of concurrent processes.\n// It is an unreasonable way to calculate pi.\npackage main\n\nimport (\n    \"fmt\"\n    \"math\"\n)\n\nfunc main() {\n    fmt.Println(pi(5000))\n}\n\n// pi launches n goroutines to compute an\n// approximation of pi.\nfunc pi(n int) float64 {\n    ch := make(chan float64)\n    for k := 0; k <= n; k++ {\n        go term(ch, float64(k))\n    }\n    f := 0.0\n    for k := 0; k <= n; k++ {\n        f += <-ch\n    }\n    return f\n}\n\nfunc term(ch chan float64, k float64) {\n    ch <- 4 * math.Pow(-1, k) / (2*k + 1)\n}\n"
  },
  {
    "path": "demo/kitchen-sink/docs/graphqlschema.gql",
    "content": "# Main Schema\nschema {\n\tquery: Query;\n}\n\nscalar Date;\n\n# Simple type to contain all scalar types\ntype AllTypes {\n\t# Field Description for String\n\ttestString: String;\n\t# Field Description for Int\n\ttestInt: Int;\n\t# Field Description for ID\n\ttestID: ID;\n\t# Field Description for Boolean\n\ttestBoolean: Boolean;\n\t# Field Description for Float\n\ttestFloat: Float;\n}\n\ninterface ISearchable {\n    searchPreview: String!;\n}\n\nunion ProductTypes = Movie | Book;\n\n# Testing enum\nenum MovieGenere {\n    ACTION\n    COMEDY\n    THRILLER\n    DRAMA\n}\n\n# Testing Input\ninput SearchByGenere {\n\tbefore: Date;\n\tafter: Date;\n\tgenere: MovieGenere!;\n}\n\n# Testing Interface\ntype Movie implements ISearchable {\n\tid: ID!;\n\tsearchPreview: String!;\n\trentPrice: Float;\n\tpublishDate: Date;\n\tgenere: MovieGenere;\n\tcast: [String];\n}\n\n# Testing Interface\ntype Book implements ISearchable {\n    id: ID!;\n\tsearchPreview: String!;\n\tprice: Float;\n\tpublishDate: Date;\n\tauthors: [String];\n}\n\ntype Query {\n\ttestString: String;\n\ttestDate; Date;\n\tallTypes: AllTypes;\n\tallProducts: [ProductTypes];\n\n\t# searches only movies by genere with sophisticated argument\n\tsearchMovieByGenere(searchObject: SearchByGenere!): [Movie];\n\n\t# Searchs all products by text string\n\tsearchProduct(text: String!): [ISearchable];\n}\n"
  },
  {
    "path": "demo/kitchen-sink/docs/groovy.groovy",
    "content": "//http://groovy.codehaus.org/Martin+Fowler%27s+closure+examples+in+Groovy\n\nclass Employee {\n    def name, salary\n    boolean manager\n    String toString() { return name }\n}\n\ndef emps = [new Employee(name:'Guillaume', manager:true, salary:200),\n    new Employee(name:'Graeme', manager:true, salary:200),\n    new Employee(name:'Dierk', manager:false, salary:151),\n    new Employee(name:'Bernd', manager:false, salary:50)]\n\ndef managers(emps) {\n    emps.findAll { e -> e.isManager() }\n}\n\nassert emps[0..1] == managers(emps) // [Guillaume, Graeme]\n\ndef highPaid(emps) {\n    threshold = 150\n    emps.findAll { e -> e.salary > threshold }\n}\n\nassert emps[0..2] == highPaid(emps) // [Guillaume, Graeme, Dierk]\n\ndef paidMore(amount) {\n    { e -> e.salary > amount}\n}\ndef highPaid = paidMore(150)\n\nassert highPaid(emps[0]) // true\nassert emps[0..2] == emps.findAll(highPaid)\n\ndef filename = 'test.txt'\nnew File(filename).withReader{ reader -> doSomethingWith(reader) }\n\ndef readersText\ndef doSomethingWith(reader) { readersText = reader.text }\n\nassert new File(filename).text == readersText"
  },
  {
    "path": "demo/kitchen-sink/docs/haml.haml",
    "content": "!!!5\n\n/[if IE]\n  %a{ :href => 'http://www.mozilla.com/en-US/firefox/' }\n    %h1 Get Firefox\n\n-# This is a HAML comment. It will not show in the output HTML\n\n-#\n  This is a HAML multiline comment\n  This won't be displayed\n    Nor will this\n                   Nor will this.\n\n/ This is a HTML comment. It will be rendered as HTML\n\n/\n  %p This doesn't render...\n  %div\n    %h1 Because it's commented out!\n\n.row\n  .col-md-6\n\n  .col-md-6\n\n\n#users.row.green\n  #articles{:style => \"border: 5px;\"}\n  #lists.list-inline\n\n%div#todos.bg-green{:id => \"#{@item.type}_#{@item.number}\", :class => '#{@item.type} #{@item.urgency}', :phoney => `asdasdasd`}\n\n/ file: app/views/movies/index.html.haml\n\n%ads:{:bleh => 33}\n%p\n  Date/Time:\n  - now = DateTime.now\n  %strong= now\n   = if now DateTime.parse(\"December 31, 2006\")\n    = \"Happy new \" + \"year!\"\n\n%sfd.dfdfg\n#content\n .title\n   %h1= @title\n   = link_to 'Home', home_url\n\n   #contents\n%div#content\n  %div.articles\n    %div.article.title Blah\n    %div.article.date 2006-11-05\n    %div.article.entry\n      Neil Patrick Harris\n\n%div[@user, :greeting]\n  %bar[290]\n\n/ This is a comment\n\n/ This is another comment with line break above\n\n.row\n  .col-md-6\n  .col-md-6\n\n  .col-md-6\n\n.row\n  .col-md-6\n\n\n  .col-md-6"
  },
  {
    "path": "demo/kitchen-sink/docs/handlebars.hbs",
    "content": "{{!-- Ace + :-}} --}}\n\n<div id=\"comments\">\n  {{#each comments}}\n  <h2><a href=\"/posts/{{../permalink}}#{{id}}\">{{title}}</a></h2>\n  <div>{{{body}}}</div>\n  {{/each}}\n</div>\n"
  },
  {
    "path": "demo/kitchen-sink/docs/haskell.hs",
    "content": "-- Type annotation (optional)\nfib :: Int -> Integer\n \n-- With self-referencing data\nfib n = fibs !! n\n        where fibs = 0 : scanl (+) 1 fibs\n        -- 0,1,1,2,3,5,...\n \n-- Same, coded directly\nfib n = fibs !! n\n        where fibs = 0 : 1 : next fibs\n              next (a : t@(b:_)) = (a+b) : next t\n \n-- Similar idea, using zipWith\nfib n = fibs !! n\n        where fibs = 0 : 1 : zipWith (+) fibs (tail fibs)\n \n-- Using a generator function\nfib n = fibs (0,1) !! n\n        where fibs (a,b) = a : fibs (b,a+b)"
  },
  {
    "path": "demo/kitchen-sink/docs/haskell_cabal.cabal",
    "content": "name:                reload\nversion:             0.1.0.0\nsynopsis:            Initial project template from stack\nDescription:\n    The \\'cabal\\' command-line program simplifies the process of managing\n    Haskell software by automating the fetching, configuration, compilation\n    and installation of Haskell libraries and programs.\nhomepage:            https://github.com/jpmoresmau/dbIDE/reload#readme\nlicense:             BSD3\nlicense-file:        LICENSE\nauthor:              JP Moresmau\nmaintainer:          jpmoresmau@gmail.com\ncopyright:           2016 JP Moresmau\ncategory:            Web\nbuild-type:          Simple\n-- extra-source-files:\ncabal-version:       >=1.10\n\nFlag network-uri\n  description:  Get Network.URI from the network-uri package\n  default:      True\n\nlibrary\n  hs-source-dirs:      src\n  exposed-modules:     Language.Haskell.Reload\n  build-depends:       base >= 4.7 && < 5\n                     , aeson\n                     , scotty\n                     , wai\n                     , text\n                     , directory\n                     , filepath\n                     , bytestring\n                     , containers\n                     , mime-types\n                     , transformers\n                     , wai-handler-launch\n                     , wai-middleware-static\n                     , wai-extra\n                     , http-types\n  default-language:    Haskell2010\n  other-modules:       Language.Haskell.Reload.FileBrowser\n  ghc-options:         -Wall -O2\n\nexecutable reload-exe\n  hs-source-dirs:      app\n  main-is:             Main.hs\n  ghc-options:         -threaded -O2 -rtsopts -with-rtsopts=-N\n  build-depends:       base\n                     , reload\n  default-language:    Haskell2010\n\ntest-suite reload-test\n  type:                exitcode-stdio-1.0\n  hs-source-dirs:      test\n  main-is:             Spec.hs\n  build-depends:       base\n                     , reload\n                     , hspec\n                     , hspec-wai\n                     , hspec-wai-json\n                     , aeson\n                     , directory\n                     , filepath\n                     , text\n                     , containers\n                     , unordered-containers\n                     , bytestring\n                     , wai-extra\n  ghc-options:         -threaded -O2 -rtsopts -with-rtsopts=-N\n  default-language:    Haskell2010\n  other-modules:       Language.Haskell.Reload.FileBrowserSpec\n                       Language.Haskell.ReloadSpec\n\nsource-repository head\n  type:     git\n  location: https://github.com/jpmoresmau/dbIDE/reload\n"
  },
  {
    "path": "demo/kitchen-sink/docs/hjson.hjson",
    "content": "{\n  # specify rate in requests/second (because comments are helpful!)\n  rate: 1000\n\n  // prefer c-style comments?\n  /* feeling old fashioned? */\n\n  # did you notice that rate doesn't need quotes?\n  hey: look ma, no quotes for strings either!\n\n  # best of all\n  notice: []\n  anything: ?\n\n  # yes, commas are optional!\n}\n"
  },
  {
    "path": "demo/kitchen-sink/docs/htaccess",
    "content": "Redirect /linux http://www.linux.org\nRedirect 301 /kernel http://www.linux.org\n\n# comment\nRewriteEngine on\n\nRewriteCond %{HTTP_USER_AGENT} ^Mozilla.*\nRewriteRule ^/$ /homepage.max.html [L]\n\nRewriteRule ^/$ /homepage.std.html [L]\n"
  },
  {
    "path": "demo/kitchen-sink/docs/html.html",
    "content": "<!DOCTYPE html>\n<html>\n    <head>\n\n    <style type=\"text/css\">\n        .text-layer {\n            font-family: Monaco, \"Courier New\", monospace;\n            font-size: 12px;\n            cursor: text;\n        }\n    </style>\n\n    </head>\n    <body>\n        <h1 style=\"color:red\">Juhu Kinners</h1>\n    </body>\n</html>"
  },
  {
    "path": "demo/kitchen-sink/docs/html_elixir.eex",
    "content": "<h1>Listing Books</h1>\n \n<table>\n  <tr>\n    <th>Title</th>\n    <th>Summary</th>\n    <th></th>\n    <th></th>\n    <th></th>\n  </tr>\n\n<%= for book <- @books do %>\n  <tr>\n    <%# comment %>\n    <td><%= book.title %></td>\n    <td><%= book.content %></td>\n    <td><%= link \"Show\", to: book_path(@conn, :show, book) %></td>\n    <td><%= link \"Edit\", to: book_path(@conn, :edit, book) %></td>\n    <td><%= link \"Delete\", to: book_path(@conn, :delete, book), method: :delete, data: [confirm: \"Are you sure?\"] %></td>\n  </tr>\n<% end %>\n</table>\n \n<br />\n \n<%= link \"New book\", to: book_path(@conn, :new) %>\n"
  },
  {
    "path": "demo/kitchen-sink/docs/html_ruby.erb",
    "content": "<h1>Listing Books</h1>\n \n<table>\n  <tr>\n    <th>Title</th>\n    <th>Summary</th>\n    <th></th>\n    <th></th>\n    <th></th>\n  </tr>\n \n<% @books.each do |book| %>\n  <tr>\n    <%# comment %>\n    <td><%= book.title %></td>\n    <td><%= book.content %></td>\n    <td><%= link_to 'Show', book %></td>\n    <td><%= link_to 'Edit', edit_book_path(book) %></td>\n    <td><%= link_to 'Remove', book, :confirm => 'Are you sure?', :method => :delete %></td>\n  </tr>\n<% end %>\n</table>\n \n<br />\n \n<%= link_to 'New book', new_book_path %>"
  },
  {
    "path": "demo/kitchen-sink/docs/ini.ini",
    "content": "[.ShellClassInfo]\nIconResource=..\\logo.png\n[ViewState]\nFolderType=Generic\n"
  },
  {
    "path": "demo/kitchen-sink/docs/io.io",
    "content": "// computes factorial of a number\nfactorial := method(n,\n    if(n == 0, return 1)\n    res := 1\n    Range 1 to(n) foreach(i, res = res * i)\n)"
  },
  {
    "path": "demo/kitchen-sink/docs/jade.jade",
    "content": "!!!doctype\n!!!5\n!!!\n\ninclude something\n\n         include another_thing\n\n  // let's talk about it\n\n// \n  here it is. a block comment!\n and another row!\nbut not here.\n\n     // \n        a far spaced\n    should be lack of block\n\n   // also not a comment\n     div.attemptAtBlock\n  \n  span#myName\n\n  #{implicit}\n     !{more_explicit}\n\n  #idDiv\n\n    .idDiv\n\n    test(id=\"tag\")\n    header(id=\"tag\", blah=\"foo\", meh=\"aads\")\nmixin article(obj, parents)\n\n  mixin bleh()\n\n    mixin clever-name\n\n -var x = \"0\";\n - y each z\n\n - var items = [\"one\", \"two\", \"three\"]\n   each item in items\n    li= item"
  },
  {
    "path": "demo/kitchen-sink/docs/java.java",
    "content": "public class InfiniteLoop {\n\n    /*\n     * This will cause the program to hang...\n     *\n     * Taken from:\n     * http://www.exploringbinary.com/java-hangs-when-converting-2-2250738585072012e-308/\n     */\n    public static void main(String[] args) {\n        double d = Double.parseDouble(\"2.2250738585072012e-308\");\n\n        // unreachable code\n        System.out.println(\"Value: \" + d);\n    }\n}"
  },
  {
    "path": "demo/kitchen-sink/docs/javascript.js",
    "content": "function foo(items, nada) {\n    for (var i=0; i<items.length; i++) {\n        alert(items[i] + \"juhu\\n\");\n    }\t// Real Tab.\n}"
  },
  {
    "path": "demo/kitchen-sink/docs/json.json",
    "content": "{\n \"query\": {\n  \"count\": 10,\n  \"created\": \"2011-06-21T08:10:46Z\",\n  \"lang\": \"en-US\",\n  \"results\": {\n   \"photo\": [\n    {\n     \"farm\": \"6\",\n     \"id\": \"5855620975\",\n     \"isfamily\": \"0\",\n     \"isfriend\": \"0\",\n     \"ispublic\": \"1\",\n     \"owner\": \"32021554@N04\",\n     \"secret\": \"f1f5e8515d\",\n     \"server\": \"5110\",\n     \"title\": \"7087 bandit cat\"\n    },\n    {\n     \"farm\": \"4\",\n     \"id\": \"5856170534\",\n     \"isfamily\": \"0\",\n     \"isfriend\": \"0\",\n     \"ispublic\": \"1\",\n     \"owner\": \"32021554@N04\",\n     \"secret\": \"ff1efb2a6f\",\n     \"server\": \"3217\",\n     \"title\": \"6975 rusty cat\"\n    },\n    {\n     \"farm\": \"6\",\n     \"id\": \"5856172972\",\n     \"isfamily\": \"0\",\n     \"isfriend\": \"0\",\n     \"ispublic\": \"1\",\n     \"owner\": \"51249875@N03\",\n     \"secret\": \"6c6887347c\",\n     \"server\": \"5192\",\n     \"title\": \"watermarked-cats\"\n    },\n    {\n     \"farm\": \"6\",\n     \"id\": \"5856168328\",\n     \"isfamily\": \"0\",\n     \"isfriend\": \"0\",\n     \"ispublic\": \"1\",\n     \"owner\": \"32021554@N04\",\n     \"secret\": \"0c1cfdf64c\",\n     \"server\": \"5078\",\n     \"title\": \"7020 mandy cat\"\n    },\n    {\n     \"farm\": \"3\",\n     \"id\": \"5856171774\",\n     \"isfamily\": \"0\",\n     \"isfriend\": \"0\",\n     \"ispublic\": \"1\",\n     \"owner\": \"32021554@N04\",\n     \"secret\": \"7f5a3180ab\",\n     \"server\": \"2696\",\n     \"title\": \"7448 bobby cat\"\n    }\n   ]\n  }\n }\n}"
  },
  {
    "path": "demo/kitchen-sink/docs/jsoniq.jq",
    "content": "TODO"
  },
  {
    "path": "demo/kitchen-sink/docs/jsp.jsp",
    "content": "<html>\n<body>\n    <script>\n        var x = \"abc\";\n        function y {\n        }\n    </script>\n    <style>\n        .class {\n            background: #124356;\n        }\n    </style>\n\n    <p>\n        Today's date: <%= (new java.util.Date()).toLocaleString()%>\n    </p>\n    <%! int i = 0; %>\n    <jsp:declaration>\n       int j = 10;\n    </jsp:declaration>\n\n    <%-- This is JSP comment --%>\n    <%@ directive attribute=\"value\" %>\n\n    <h2>Select Languages:</h2>\n\n    <form ACTION=\"jspCheckBox.jsp\">\n        <input type=\"checkbox\" name=\"id\" value=\"Java\"> Java<BR>\n        <input type=\"checkbox\" name=\"id\" value=\".NET\"> .NET<BR>\n        <input type=\"checkbox\" name=\"id\" value=\"PHP\"> PHP<BR>\n        <input type=\"checkbox\" name=\"id\" value=\"C/C++\"> C/C++<BR>\n        <input type=\"checkbox\" name=\"id\" value=\"PERL\"> PERL <BR>\n        <input type=\"submit\" value=\"Submit\">\n    </form>\n\n    <%\n    String select[] = request.getParameterValues(\"id\"); \n    if (select != null && select.length != 0) {\n        out.println(\"You have selected: \");\n        for (int i = 0; i < select.length; i++) {\n           out.println(select[i]); \n        }\n    }\n    %>\n</body>\n</html>"
  },
  {
    "path": "demo/kitchen-sink/docs/jssm.jssm",
    "content": "\nmachine_name    : \"Three-state traffic light, plus off and flash-red\";\nmachine_version : 1.2.1;\n\njssm_version    : >= 5.0.0;\ngraph_layout    : dot;\n\non_init         : ${setup};\non_halt         : ${finalize};\n\n\n\n/* turn on */\nOff 'Enable' { follow: ${turned_on}; } -> Red;\n\n// main sequence\nRed 'Proceed' => Green 'Proceed' => Yellow 'Proceed' => Red;\n\n// emergency flash red\n[Red Yellow Green] 'Flash' -> Flash;\nFlash 'Proceed' { label: 'no change'; } -> Flash 'Exit' -> Red;\n\n// turn off\n[Red Yellow Green Flash] 'Disable' { follow: ${turned_off}; } ~> Off;\n\n"
  },
  {
    "path": "demo/kitchen-sink/docs/jsx.jsx",
    "content": "/*EXPECTED\nhello world!\n*/\nclass Test {\n    static function run() : void {\n        // console.log(\"hello world!\");\n        log \"hello world!\";\n    }\n}"
  },
  {
    "path": "demo/kitchen-sink/docs/julia.jl",
    "content": "for op = (:+, :*, :&, :|, :$)\n  @eval ($op)(a,b,c) = ($op)(($op)(a,b),c)\nend\n\nv = α';\nfunction g(x,y)\n  return x * y\n  x + y\nend\n\ncd(\"data\") do\n    open(\"outfile\", \"w\") do f\n        write(f, data)\n    end\nend\n"
  },
  {
    "path": "demo/kitchen-sink/docs/kotlin.kt",
    "content": "/*Taken from http://try.kotlinlang.org/#/Examples/Longer%20examples/Life/Life.kt*/\n/**\n * This is a straightforward implementation of The Game of Life\n * See http://en.wikipedia.org/wiki/Conway's_Game_of_Life\n */\npackage life\n\n/*\n * A field where cells live. Effectively immutable\n */\nclass Field(\n        val width: Int,\n        val height: Int,\n        // This function tells the constructor which cells are alive\n        // if init(i, j) is true, the cell (i, j) is alive\n        init: (Int, Int) -> Boolean\n) {\n    private val live: Array<Array<Boolean>> = Array(height) { i -> Array(width) { j -> init(i, j) } }\n\n    private fun liveCount(i: Int, j: Int)\n            = if (i in 0..height - 1 &&\n            j in 0..width - 1 &&\n            live[i][j]) 1 else 0\n\n    // How many neighbors of (i, j) are alive?\n    fun liveNeighbors(i: Int, j: Int) =\n            liveCount(i - 1, j - 1) +\n                    liveCount(i - 1, j) +\n                    liveCount(i - 1, j + 1) +\n                    liveCount(i, j - 1) +\n                    liveCount(i, j + 1) +\n                    liveCount(i + 1, j - 1) +\n                    liveCount(i + 1, j) +\n                    liveCount(i + 1, j + 1)\n\n    // You can say field[i, j], and this function gets called\n    operator fun get(i: Int, j: Int) = live[i][j]\n}\n\n/**\n * This function takes the present state of the field\n * and returns a new field representing the next moment of time\n */\nfun next(field: Field): Field {\n    return Field(field.width, field.height) { i, j ->\n        val n = field.liveNeighbors(i, j)\n        if (field[i, j])\n        // (i, j) is alive\n            n in 2..3 // It remains alive iff it has 2 or 3 neighbors\n        else\n        // (i, j) is dead\n            n == 3 // A new cell is born if there are 3 neighbors alive\n    }\n}\n\n/** A few colony examples here */\nfun main(args: Array<String>) {\n    // Simplistic demo\n    runGameOfLife(\"***\", 3)\n    // \"Star burst\"\n    runGameOfLife(\"\"\"\n        _______\n        ___*___\n        __***__\n        ___*___\n        _______\n    \"\"\", 10)\n    // Stable colony\n    runGameOfLife(\"\"\"\n        _____\n        __*__\n        _*_*_\n        __*__\n        _____\n    \"\"\", 3)\n    // Stable from the step 2\n    runGameOfLife(\"\"\"\n        __**__\n        __**__\n        __**__\n    \"\"\", 3)\n    // Oscillating colony\n    runGameOfLife(\"\"\"\n        __**____\n        __**____\n        ____**__\n        ____**__\n    \"\"\", 6)\n    // A fancier oscillating colony\n    runGameOfLife(\"\"\"\n        -------------------\n        -------***---***---\n        -------------------\n        -----*----*-*----*-\n        -----*----*-*----*-\n        -----*----*-*----*-\n        -------***---***---\n        -------------------\n        -------***---***---\n        -----*----*-*----*-\n        -----*----*-*----*-\n        -----*----*-*----*-\n        -------------------\n        -------***---***---\n        -------------------\n    \"\"\", 10)\n}\n\n// UTILITIES\n\nfun runGameOfLife(fieldText: String, steps: Int) {\n    var field = makeField(fieldText)\n    for (step in 1..steps) {\n        println(\"Step: $step\")\n        for (i in 0..field.height - 1) {\n            for (j in 0..field.width - 1) {\n                print(if (field[i, j]) \"*\" else \" \")\n            }\n            println(\"\")\n        }\n        field = next(field)\n    }\n}\n\nfun makeField(s: String): Field {\n    val lines = s.replace(\" \", \"\").split('\\n').filter({ it.isNotEmpty() })\n    val longestLine = lines.toList().maxBy { it.length } ?: \"\"\n\n    return Field(longestLine.length, lines.size) { i, j -> lines[i][j] == '*' }\n}\n"
  },
  {
    "path": "demo/kitchen-sink/docs/latex.tex",
    "content": "\\usepackage{amsmath}\n\\title{\\LaTeX}\n\\date{}\n\\begin{document}\n  \\maketitle\n  \\LaTeX{} is a document preparation system for the \\TeX{}\n  typesetting program. It offers programmable desktop publishing\n  features and extensive facilities for automating most aspects of\n  typesetting and desktop publishing, including numbering and\n  cross-referencing, tables and figures, page layout, bibliographies,\n  and much more. \\LaTeX{} was originally written in 1984 by Leslie\n  Lamport and has become the dominant method for using \\TeX; few\n  people write in plain \\TeX{} anymore. The current version  is\n  \\LaTeXe.\n \n  % This is a comment; it will not be shown in the final output.\n  % The following shows a little of the typesetting power of LaTeX:\n  \\begin{align}\n    E &= mc^2                              \\\\\n    m &= \\frac{m_0}{\\sqrt{1-\\frac{v^2}{c^2}}}\n  \\end{align}\n\\end{document}"
  },
  {
    "path": "demo/kitchen-sink/docs/less.less",
    "content": "/* styles.less */\n\n@base: #f938ab;\n\n.box-shadow(@style, @c) when (iscolor(@c)) {\n    box-shadow:         @style @c;\n    -webkit-box-shadow: @style @c;\n    -moz-box-shadow:    @style @c;\n}\n.box-shadow(@style, @alpha: 50%) when (isnumber(@alpha)) {\n    .box-shadow(@style, rgba(0, 0, 0, @alpha));\n}\n\n// Box styles\n.box { \n    color: saturate(@base, 5%);\n    border-color: lighten(@base, 30%);\n    \n    div { .box-shadow(0 0 5px, 30%) }\n  \n    a {\n        color: @base;\n        \n        &:hover {\n            color: lighten(@base, 50%);\n        }\n    }\n}\n"
  },
  {
    "path": "demo/kitchen-sink/docs/liquid.liquid",
    "content": "The following examples can be found in full at http://liquidmarkup.org/\n\nLiquid is an extraction from the e-commerce system Shopify.\nShopify powers many thousands of e-commerce stores which all call for unique designs.\nFor this we developed Liquid which allows our customers complete design freedom while\nmaintaining the integrity of our servers.\n\nLiquid has been in production use since June 2006 and is now used by many other\nhosted web applications.\n\nIt was developed for usage in Ruby on Rails web applications and integrates seamlessly\nas a plugin but it also works excellently as a stand alone library.\n\nHere's what it looks like:\n\n  <ul id=\"products\">\n    {% for product in products %}\n      <li>\n        <h2>{{ product.title }}</h2>\n        Only {{ product.price | format_as_money }}\n\n        <p>{{ product.description | prettyprint | truncate: 200  }}</p>\n\n      </li>\n    {% endfor %}\n  </ul>\n\n\nSome more features include:\n\n<h2>Filters</h2>\n<p> The word \"tobi\" in uppercase: {{ 'tobi' | upcase }} </p>\n<p>The word \"tobi\" has {{ 'tobi' | size }} letters! </p>\n<p>Change \"Hello world\" to \"Hi world\": {{ 'Hello world' | replace: 'Hello', 'Hi' }} </p>\n<p>The date today is {{ 'now' | date: \"%Y %b %d\" }} </p>\n\n\n<h2>If</h2>\n<p>\n  {% if user.name == 'tobi' or user.name == 'marc' %} \n    hi marc or tobi\n  {% endif %}\n</p>\n\n\n<h2>Case</h2>\n<p>\n  {% case template %}\n    {% when 'index' %}\n       Welcome\n    {% when 'product' %}\n       {{ product.vendor | link_to_vendor }} / {{ product.title }}\n    {% else %}\n       {{ page_title }}\n  {% endcase %}\n</p>\n\n\n<h2>For Loops</h2>\n<p>\n  {% for item in array %} \n    {{ item }}\n  {% endfor %}\n</p>\n\n\n<h2>Tables</h2>\n<p>\n  {% tablerow item in items cols: 3 %}\n    {% if tablerowloop.col_first %}\n      First column: {{ item.variable }}\n    {% else %}\n      Different column: {{ item.variable }}\n    {% endif %}\n  {% endtablerow %}\n</p>\n"
  },
  {
    "path": "demo/kitchen-sink/docs/lisp.lisp",
    "content": "(defun prompt-for-cd ()\n   \"Prompts\n    for CD\"\n   (prompt-read \"Title\" 1.53 1 2/4 1.7 1.7e0 2.9E-4 +42 -7 #b001 #b001/100 #o777 #O777 #xabc55 #c(0 -5.6))\n   (prompt-read \"Artist\" &rest)\n   (or (parse-integer (prompt-read \"Rating\") :junk-allowed t) 0)\n  (if x (format t \"yes\") (format t \"no\" nil) ;and here comment\n  ) 0xFFLL -23ull\n  ;; second line comment\n  '(+ 1 2)\n  (defvar *lines*)                ; list of all lines\n  (position-if-not #'sys::whitespacep line :start beg))\n  (quote (privet 1 2 3))\n  '(hello world)\n  (* 5 7)\n  (1 2 34 5)\n  (:use \"aaaa\")\n  (let ((x 10) (y 20))\n    (print (+ x y))\n  ) LAmbDa\n\n  \"asdad\\0eqweqe\""
  },
  {
    "path": "demo/kitchen-sink/docs/livescript.ls",
    "content": "# Defines an editing mode for [Ace](http://ace.ajax.org).\n#\n# Open [test/ace.html](../test/ace.html) to test.\n\nrequire, exports, module <-! define \\ace/mode/ls\n\nidentifier = /(?![\\d\\s])[$\\w\\xAA-\\uFFDC](?:(?!\\s)[$\\w\\xAA-\\uFFDC]|-[A-Za-z])*/$\n\nexports.Mode = class LiveScriptMode extends require(\\ace/mode/text)Mode\n  ->\n    @$tokenizer =\n      new (require \\ace/tokenizer)Tokenizer LiveScriptMode.Rules\n    if require \\ace/mode/matching_brace_outdent\n      @$outdent = new that.MatchingBraceOutdent\n\n  indenter = // (?\n    : [({[=:]\n    | [-~]>\n    | \\b (?: e(?:lse|xport) | d(?:o|efault) | t(?:ry|hen) | finally |\n             import (?:\\s* all)? | const | var |\n             let | new | catch (?:\\s* #identifier)? )\n  ) \\s* $ //\n\n  getNextLineIndent: (state, line, tab) ->\n    indent   = @$getIndent line\n    {tokens} = @$tokenizer.getLineTokens line, state\n    unless tokens.length and tokens[*-1]type is \\comment\n      indent += tab if state is \\start and indenter.test line\n    indent\n\n  toggleCommentLines: (state, doc, startRow, endRow) ->\n    comment = /^(\\s*)#/; range = new (require \\ace/range)Range 0 0 0 0\n    for i from startRow to endRow\n      if out = comment.test line = doc.getLine i\n      then line.=replace comment, \\$1\n      else line.=replace /^\\s*/   \\$&#\n      range.end.row = range.start.row = i\n      range.end.column = line.length + 1\n      doc.replace range, line\n    1 - out * 2\n\n  checkOutdent: (state, line, input) -> @$outdent?checkOutdent line, input\n\n  autoOutdent: (state, doc, row) -> @$outdent?autoOutdent doc, row\n\n### Highlight Rules\n\nkeywordend = /(?![$\\w]|-[A-Za-z]|\\s*:(?![:=]))/$\nstringfill = token: \\string, regex: '.+'\n\nLiveScriptMode.Rules =\n  start:\n    * token: \\keyword\n      regex: //(?\n        :t(?:h(?:is|row|en)|ry|ypeof!?)\n        |c(?:on(?:tinue|st)|a(?:se|tch)|lass)\n        |i(?:n(?:stanceof)?|mp(?:ort(?:\\s+all)?|lements)|[fs])\n        |d(?:e(?:fault|lete|bugger)|o)\n        |f(?:or(?:\\s+own)?|inally|unction)\n        |s(?:uper|witch)\n        |e(?:lse|x(?:tends|port)|val)\n        |a(?:nd|rguments)\n        |n(?:ew|ot)\n        |un(?:less|til)\n        |w(?:hile|ith)\n        |o[fr]|return|break|let|var|loop\n      )//$ + keywordend\n\n    * token: \\constant.language\n      regex: '(?:true|false|yes|no|on|off|null|void|undefined)' + keywordend\n\n    * token: \\invalid.illegal\n      regex: '(?\n        :p(?:ackage|r(?:ivate|otected)|ublic)\n        |i(?:mplements|nterface)\n        |enum|static|yield\n      )' + keywordend\n\n    * token: \\language.support.class\n      regex: '(?\n        :R(?:e(?:gExp|ferenceError)|angeError)\n        |S(?:tring|yntaxError)\n        |E(?:rror|valError)\n        |Array|Boolean|Date|Function|Number|Object|TypeError|URIError\n      )' + keywordend\n\n    * token: \\language.support.function\n      regex: '(?\n        :is(?:NaN|Finite)\n        |parse(?:Int|Float)\n        |Math|JSON\n        |(?:en|de)codeURI(?:Component)?\n      )' + keywordend\n\n    * token: \\variable.language\n      regex: '(?:t(?:hat|il|o)|f(?:rom|allthrough)|it|by|e)' + keywordend\n\n    * token: \\identifier\n      regex: identifier + /\\s*:(?![:=])/$\n\n    * token: \\variable\n      regex: identifier\n\n    * token: \\keyword.operator\n      regex: /(?:\\.{3}|\\s+\\?)/$\n\n    * token: \\keyword.variable\n      regex: /(?:@+|::|\\.\\.)/$\n      next : \\key\n\n    * token: \\keyword.operator\n      regex: /\\.\\s*/$\n      next : \\key\n\n    * token: \\string\n      regex: /\\\\\\S[^\\s,;)}\\]]*/$\n\n    * token: \\string.doc\n      regex: \\'''\n      next : \\qdoc\n\n    * token: \\string.doc\n      regex: \\\"\"\"\n      next : \\qqdoc\n\n    * token: \\string\n      regex: \\'\n      next : \\qstring\n\n    * token: \\string\n      regex: \\\"\n      next : \\qqstring\n\n    * token: \\string\n      regex: \\`\n      next : \\js\n\n    * token: \\string\n      regex: '<\\\\['\n      next : \\words\n\n    * token: \\string.regex\n      regex: \\//\n      next : \\heregex\n\n    * token: \\comment.doc\n      regex: '/\\\\*'\n      next : \\comment\n\n    * token: \\comment\n      regex: '#.*'\n\n    * token: \\string.regex\n      regex: //\n        /(?: [^ [ / \\n \\\\ ]*\n          (?: (?: \\\\.\n                | \\[ [^\\]\\n\\\\]* (?:\\\\.[^\\]\\n\\\\]*)* \\]\n              ) [^ [ / \\n \\\\ ]*\n          )*\n        )/ [gimy$]{0,4}\n      //$\n      next : \\key\n\n    * token: \\constant.numeric\n      regex: '(?:0x[\\\\da-fA-F][\\\\da-fA-F_]*\n                |(?:[2-9]|[12]\\\\d|3[0-6])r[\\\\da-zA-Z][\\\\da-zA-Z_]*\n                |(?:\\\\d[\\\\d_]*(?:\\\\.\\\\d[\\\\d_]*)?|\\\\.\\\\d[\\\\d_]*)\n                 (?:e[+-]?\\\\d[\\\\d_]*)?[\\\\w$]*)'\n\n    * token: \\lparen\n      regex: '[({[]'\n\n    * token: \\rparen\n      regex: '[)}\\\\]]'\n      next : \\key\n\n    * token: \\keyword.operator\n      regex: \\\\\\S+\n\n    * token: \\text\n      regex: \\\\\\s+\n\n  heregex:\n    * token: \\string.regex\n      regex: '.*?//[gimy$?]{0,4}'\n      next : \\start\n    * token: \\string.regex\n      regex: '\\\\s*#{'\n    * token: \\comment.regex\n      regex: '\\\\s+(?:#.*)?'\n    * token: \\string.regex\n      regex: '\\\\S+'\n\n  key:\n    * token: \\keyword.operator\n      regex: '[.?@!]+'\n    * token: \\identifier\n      regex: identifier\n      next : \\start\n    * token: \\text\n      regex: '.'\n      next : \\start\n\n  comment:\n    * token: \\comment.doc\n      regex: '.*?\\\\*/'\n      next : \\start\n    * token: \\comment.doc\n      regex: '.+'\n\n  qdoc:\n    token: \\string\n    regex: \".*?'''\"\n    next : \\key\n    stringfill\n\n  qqdoc:\n    token: \\string\n    regex: '.*?\"\"\"'\n    next : \\key\n    stringfill\n\n  qstring:\n    token: \\string\n    regex: /[^\\\\']*(?:\\\\.[^\\\\']*)*'/$\n    next : \\key\n    stringfill\n\n  qqstring:\n    token: \\string\n    regex: /[^\\\\\"]*(?:\\\\.[^\\\\\"]*)*\"/$\n    next : \\key\n    stringfill\n\n  js:\n    token: \\string\n    regex: /[^\\\\`]*(?:\\\\.[^\\\\`]*)*`/$\n    next : \\key\n    stringfill\n\n  words:\n    token: \\string\n    regex: '.*?\\\\]>'\n    next : \\key\n    stringfill\n"
  },
  {
    "path": "demo/kitchen-sink/docs/logiql.logic",
    "content": "// ancestors\nparentof(\"douglas\", \"john\").\nparentof(\"john\", \"bob\").\nparentof(\"bob\", \"ebbon\").\n\nparentof(\"douglas\", \"jane\").\nparentof(\"jane\", \"jan\").\n\nancestorof(A, B) <- parentof(A, B).\nancestorof(A, C) <- ancestorof(A, B), parentof(B,C).\n\ngrandparentof(A, B) <- parentof(A, C), parentof(C, B).\n\ncousins(A,B) <- grandparentof(C,A), grandparentof(C,B).\n\nparentof[`arg](A, B) -> int[32](A), !string(B)."
  },
  {
    "path": "demo/kitchen-sink/docs/lsl.lsl",
    "content": "/*\n    Testing syntax highlighting\n    of Ace Editor\n    for the Linden Scripting Language\n*/\n\ninteger someIntNormal       = 3672;\ninteger someIntHex          = 0x00000000;\ninteger someIntMath         = PI_BY_TWO;\n\ninteger event               = 5673;                                             // invalid.illegal\n\nkey someKeyTexture          = TEXTURE_DEFAULT;\nstring someStringSpecial    = EOF;\n\nsome_user_defined_function_without_return_type(string inputAsString)\n{\n    llSay(PUBLIC_CHANNEL, inputAsString);\n}\n\nstring user_defined_function_returning_a_string(key inputAsKey)\n{\n    return (string)inputAsKey;\n}\n\ndefault\n{\n    state_entry()\n    {\n        key someKey = NULL_KEY;\n        someKey = llGetOwner();\n\n        string someString = user_defined_function_returning_a_string(someKey);\n\n        some_user_defined_function_without_return_type(someString);\n    }\n\n    touch_start(integer num_detected)\n    {\n        list agentsInRegion = llGetAgentList(AGENT_LIST_REGION, []);\n        integer numOfAgents = llGetListLength(agentsInRegion);\n\n        integer index;                                                          // defaults to 0\n        for (; index <= numOfAgents - 1; index++)                               // for each agent in region\n        {\n            llRegionSayTo(llList2Key(agentsInRegion, index), PUBLIC_CHANNEL, \"Hello, Avatar!\");\n        }\n    }\n\n    touch_end(integer num_detected)\n    {\n        someIntNormal       = 3672;\n        someIntHex          = 0x00000000;\n        someIntMath         = PI_BY_TWO;\n\n        event               = 5673;                                             // invalid.illegal\n\n        someKeyTexture      = TEXTURE_DEFAULT;\n        someStringSpecial   = EOF;\n\n        llSetInventoryPermMask(\"some item\", MASK_NEXT, PERM_ALL);               // reserved.godmode\n\n        llWhisper(PUBLIC_CHANNEL, \"Leaving \\\"default\\\" now...\");\n        state other;\n    }\n}\n\nstate other\n{\n    state_entry()\n    {\n        llWhisper(PUBLIC_CHANNEL, \"Entered \\\"state other\\\", returning to \\\"default\\\" again...\");\n        state default;\n    }\n}\n"
  },
  {
    "path": "demo/kitchen-sink/docs/lua.lua",
    "content": "--[[--\nnum_args takes in 5.1 byte code and extracts the number of arguments\nfrom its function header.\n--]]--\n\nfunction int(t)\n\treturn t:byte(1)+t:byte(2)*0x100+t:byte(3)*0x10000+t:byte(4)*0x1000000\nend\n\nfunction num_args(func)\n\tlocal dump = string.dump(func)\n\tlocal offset, cursor = int(dump:sub(13)), offset + 26\n\t--Get the params and var flag (whether there's a ... in the param)\n\treturn dump:sub(cursor):byte(), dump:sub(cursor+1):byte()\nend\n\n-- Usage:\nnum_args(function(a,b,c,d, ...) end) -- return 4, 7\n\n-- Python styled string format operator\nlocal gm = debug.getmetatable(\"\")\n\ngm.__mod=function(self, other)\n    if type(other) ~= \"table\" then other = {other} end\n    for i,v in ipairs(other) do other[i] = tostring(v) end\n    return self:format(unpack(other))\nend\n\nprint([===[\n    blah blah %s, (%d %d)\n]===]%{\"blah\", num_args(int)})\n\n--[=[--\ntable.maxn is deprecated, use # instead.\n--]=]--\nprint(table.maxn{1,2,[4]=4,[8]=8) -- outputs 8 instead of 2\n\nprint(5 --[[ blah ]])"
  },
  {
    "path": "demo/kitchen-sink/docs/luapage.lp",
    "content": "﻿<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n   \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html>\n<% --[[--\n    index.lp from the Kepler Project's LuaDoc HTML doclet.\n    http://keplerproject.github.com/luadoc/\n--]] %>\n<head>\n    <title>Reference</title>\n    <link rel=\"stylesheet\" href=\"<%=luadoc.doclet.html.link(\"luadoc.css\")%>\" type=\"text/css\" />\n\t<!--meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"/-->\n</head>\n\n<body>\n<div id=\"container\">\n\n<div id=\"product\">\n\t<div id=\"product_logo\"></div>\n\t<div id=\"product_name\"><big><b></b></big></div>\n\t<div id=\"product_description\"></div>\n</div> <!-- id=\"product\" -->\n\n<div id=\"main\">\n\n<div id=\"navigation\">\n<%=luadoc.doclet.html.include(\"menu.lp\", { doc=doc })%>\n\n</div> <!-- id=\"navigation\" -->\n\n<div id=\"content\">\n\n\n<%if not options.nomodules and #doc.modules > 0 then%>\n<h2>Modules</h2>\n<table class=\"module_list\">\n<!--<tr><td colspan=\"2\">Modules</td></tr>-->\n<%for _, modulename in ipairs(doc.modules) do%>\n\t<tr>\n\t\t<td class=\"name\"><a href=\"<%=luadoc.doclet.html.module_link(modulename, doc)%>\"><%=modulename%></a></td>\n\t\t<td class=\"summary\"><%=doc.modules[modulename].summary%></td>\n\t</tr>\n<%end%>\n</table>\n<%end%>\n\n\n\n<%if not options.nofiles and #doc.files > 0 then%>\n<h2>Files</h2>\n<table class=\"file_list\">\n<!--<tr><td colspan=\"2\">Files</td></tr>-->\n<%for _, filepath in ipairs(doc.files) do%>\n\t<tr>\n\t\t<td class=\"name\"><a href=\"<%=luadoc.doclet.html.file_link(filepath)%>\"><%=filepath%></a></td>\n\t\t<td class=\"summary\"></td>\n\t</tr>\n<%end%>\n</table>\n<%end%>\n\n</div> <!-- id=\"content\" -->\n\n</div> <!-- id=\"main\" -->\n\n<div id=\"about\">\n\t<p><a href=\"http://validator.w3.org/check?uri=referer\"><img src=\"http://www.w3.org/Icons/valid-xhtml10\" alt=\"Valid XHTML 1.0!\" height=\"31\" width=\"88\" /></a></p>\n</div> <!-- id=\"about\" -->\n\n</div> <!-- id=\"container\" -->\t\n</body>\n</html>\n"
  },
  {
    "path": "demo/kitchen-sink/docs/lucene.lucene",
    "content": "(title:\"foo bar\" AND body:\"quick fox\") OR title:fox"
  },
  {
    "path": "demo/kitchen-sink/docs/markdown.md",
    "content": "Ace (Ajax.org Cloud9 Editor)\n============================\n\nAce is a standalone code editor written in JavaScript. Our goal is to create a browser based editor that matches and extends the features, usability and performance of existing native editors such as TextMate, Vim or Eclipse. It can be easily embedded in any web page or JavaScript application. Ace is developed as the primary editor for [Cloud9 IDE](http://www.cloud9ide.com/) and the successor of the Mozilla Skywriter (Bespin) Project.\n\nFeatures\n--------\n\n* Syntax highlighting\n* Automatic indent and outdent\n* An optional command line\n* Handles huge documents (100,000 lines and more are no problem)\n* Fully customizable key bindings including VI and Emacs modes\n* Themes (TextMate themes can be imported)\n* Search and replace with regular expressions\n* Highlight matching parentheses\n* Toggle between soft tabs and real tabs\n* Displays hidden characters\n* Drag and drop text using the mouse\n* Line wrapping\n* Unstructured / user code folding\n* Live syntax checker (currently JavaScript/CoffeeScript)\n\nTake Ace for a spin!\n--------------------\n\nCheck out the Ace live [demo](http://ajaxorg.github.com/ace/) or get a [Cloud9 IDE account](http://run.cloud9ide.com) to experience Ace while editing one of your own GitHub projects.\n\nIf you want, you can use Ace as a textarea replacement thanks to the [Ace Bookmarklet](http://ajaxorg.github.com/ace/build/textarea/editor.html).\n\nHistory\n-------\n\nPreviously known as “Bespin” and “Skywriter” it’s now known as Ace (Ajax.org Cloud9 Editor)! Bespin and Ace started as two independent projects, both aiming to build a no-compromise code editor component for the web. Bespin started as part of Mozilla Labs and was based on the canvas tag, while Ace is the Editor component of the Cloud9 IDE and is using the DOM for rendering. After the release of Ace at JSConf.eu 2010 in Berlin the Skywriter team decided to merge Ace with a simplified version of Skywriter's plugin system and some of Skywriter's extensibility points. All these changes have been merged back to Ace. Both Ajax.org and Mozilla are actively developing and maintaining Ace.\n\nGetting the code\n----------------\n\nAce is a community project. We actively encourage and support contributions. The Ace source code is hosted on GitHub. It is released under the BSD License. This license is very simple, and is friendly to all kinds of projects, whether open source or not. Take charge of your editor and add your favorite language highlighting and keybindings!\n\n```bash\n    git clone git://github.com/ajaxorg/ace.git\n    cd ace\n    git submodule update --init --recursive\n```\n\nEmbedding Ace\n-------------\n\nAce can be easily embedded into any existing web page. The Ace git repository ships with a pre-packaged version of Ace inside of the `build` directory. The same packaged files are also available as a separate [download](https://github.com/ajaxorg/ace/downloads). Simply copy the contents of the `src` subdirectory somewhere into your project and take a look at the included demos of how to use Ace.\n\nThe easiest version is simply:\n\n```html\n    <div id=\"editor\">some text</div>\n    <script src=\"src/ace.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\n    <script>\n    window.onload = function() {\n        var editor = ace.edit(\"editor\");\n    };\n    </script>\n```\n\nWith \"editor\" being the id of the DOM element, which should be converted to an editor. Note that this element must be explicitly sized and positioned `absolute` or `relative` for Ace to work. e.g.\n\n```css\n    #editor {\n        position: absolute;\n        width: 500px;\n        height: 400px;\n    }\n```\n\nTo change the theme simply include the Theme's JavaScript file\n\n```html\n    <script src=\"src/theme-twilight.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\n```\n\nand configure the editor to use the theme:\n\n```javascript\n    editor.setTheme(\"ace/theme/twilight\");\n```\n\nBy default the editor only supports plain text mode; many other languages are available as separate modules. After including the mode's JavaScript file:\n\n```html\n    <script src=\"src/mode-javascript.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\n```\n\nThen the mode can be used like this:\n\n```javascript\n    var JavaScriptMode = require(\"ace/mode/javascript\").Mode;\n    editor.getSession().setMode(new JavaScriptMode());\n```\n\nDocumentation\n-------------\n\nYou find a lot more sample code in the [demo app](https://github.com/ajaxorg/ace/blob/master/demo/demo.js).\n\nThere is also some documentation on the [wiki page](https://github.com/ajaxorg/ace/wiki).\n\nIf you still need help, feel free to drop a mail on the [ace mailing list](http://groups.google.com/group/ace-discuss).\n\nRunning Ace\n-----------\n\nAfter the checkout Ace works out of the box. No build step is required. Open 'editor.html' in any browser except Google Chrome. Google Chrome doesn't allow XMLHTTPRequests from files loaded from disc (i.e. with a file:/// URL). To open Ace in Chrome simply start the bundled mini HTTP server:\n\n```bash\n    ./static.py\n```\n\nOr using Node.JS\n\n```bash\n    ./static.js\n```\n\nThe editor can then be opened at http://localhost:8888/index.html.\n\nPackage Ace\n-----------\n\nTo package Ace we use the dryice build tool developed by the Mozilla Skywriter team. Before you can build you need to make sure that the submodules are up to date.\n\n```bash\n    git submodule update --init --recursive\n```\n\nAfterwards Ace can be built by calling\n\n```bash\n    ./Makefile.dryice.js normal\n```\n\nThe packaged Ace will be put in the 'build' folder.\n\nTo build the bookmarklet version execute\n\n```bash\n    ./Makefile.dryice.js bm\n```\n\nRunning the Unit Tests\n----------------------\n\nThe Ace unit tests run on node.js. Before the first run a couple of node modules have to be installed. The easiest way to do this is by using the node package manager (npm). In the Ace base directory simply call\n\n```bash\n    npm link .\n```\n\nTo run the tests call:\n\n```bash\n    node lib/ace/test/all.js\n```\n\nYou can also run the tests in your browser by serving:\n\n    http://localhost:8888/lib/ace/test/tests.html\n\nThis makes debugging failing tests way more easier.\n\nContributing\n------------\n\nAce wouldn't be what it is without contributions! Feel free to fork and improve/enhance Ace any way you want. If you feel that the editor or the Ace community will benefit from your changes, please open a pull request. To protect the interests of the Ace contributors and users we require contributors to sign a Contributors License Agreement (CLA) before we pull the changes into the main repository. Our CLA is the simplest of agreements, requiring that the contributions you make to an ajax.org project are only those you're allowed to make. This helps us significantly reduce future legal risk for everyone involved. It is easy, helps everyone, takes ten minutes, and only needs to be completed once.  There are two versions of the agreement:\n\n1. [The Individual CLA](https://github.com/ajaxorg/ace/raw/master/doc/Contributor_License_Agreement-v2.pdf): use this version if you're working on an ajax.org in your spare time, or can clearly claim ownership of copyright in what you'll be submitting.\n2. [The Corporate CLA](https://github.com/ajaxorg/ace/raw/master/doc/Corporate_Contributor_License_Agreement-v2.pdf): have your corporate lawyer review and submit this if your company is going to be contributing to ajax.org  projects\n\nIf you want to contribute to an ajax.org project please print the CLA and fill it out and sign it. Then either send it by snail mail or fax to us or send it back scanned (or as a photo) by email.\n\nEmail: fabian.jakobs@web.de\n\nFax: +31 (0) 206388953\n\nAddress: Ajax.org B.V.\n  Keizersgracht 241\n  1016 EA, Amsterdam\n  the Netherlands"
  },
  {
    "path": "demo/kitchen-sink/docs/mask.mask",
    "content": "/* Mask Syntax Demo */\n\ndiv > ' Test ~[name]';\n\ndefine :userProfile {\n\theader {\n\t\th4 > @title;\n\t\tbutton.close;\n\t}\n}\n\n:userProfile {\n\t@title > ' Hello ~[: username.toUpperCase()]'\n}\n\nstyle {\n    html, body {\n        background: url('name.png') 0 0 no-repeat;\n    }\n}\n\nbutton {\n\tevent click (e) {\n\t    this.textContent = `name ${e.clientX} !`;\n\t}\n}\n\nmd > \"\"\"\n\n- div\n- span\n \nHello\n\n[one](http://google.com)\n\n\"\"\";\n\n\nheader .foo > 'Heading'\n\nbutton .baz x-signal='click: test' disabled > \"\n\tHello,\n\tworld \n\t\\\"Buddy\\\"\n\"\n\nvar a = {\n    name: `name ${window.innerWidth}`\n};\n\nspan .foo > \"~[bind: a.name]\""
  },
  {
    "path": "demo/kitchen-sink/docs/matlab.matlab",
    "content": "%{\n   %{\n      Ace Matlab demo\n   %}\n%}\n\nclassdef hello\n   methods\n      function greet(this)\n         disp('Hello!')  % say hi\n      end\n   end\nend\n\n% transpose \na = [ 'x''y', \"x\\n\\\n      y\", 1' ]' + 2'"
  },
  {
    "path": "demo/kitchen-sink/docs/maze.mz",
    "content": "## ## () ## ^^ ## ## ## ##\n## H1 C2 S1 <> S2 H2 DN ##\n## %U <> %D *2 %L IZ .. ##\n## ## ## .. ## DN *3 ## ##\n## ## ## %R C1 IZ () ## ##\n## ## ## ## >/ *1\n## () *3 *1 %L ()\n\n\n// Set divisor and dividend\nS1-> = 9\nS2-> = 24\n\n// Holding cells\nH1-> IF *1 THEN %R ELSE %N\nH2-> IF *2 THEN %R ELSE %N\n\n// Arithmetic\nDN-> -= 1\nIZ-> IF <= 0 THEN %D ELSE %U\n\nC1-> IF *3 THEN %D ELSE %R\nC2-> IF *3 THEN %U ELSE %D\n"
  },
  {
    "path": "demo/kitchen-sink/docs/mel.mel",
    "content": "// animated duplicates, instances script\nproc animatedDuplication (int $rangeStart, int $rangeEnd, int $numOfDuplicates, int $duplicateOrInstance)\n{\n    int $range_start = $rangeStart;\n    int $range_end = $rangeEnd;\n    int $num_of_duplicates = $numOfDuplicates;\n    int $step_size = ($range_end - $range_start) / $num_of_duplicates;\n    int $i = 0;\n    int $temp;\n\n    currentTime $range_start;     // set to range start\n\n    string $selectedObjects[];    // to store selected objects\n    $selectedObjects = `ls -sl`;  // store selected objects\n    select $selectedObjects;\n\n    while ($i <= $num_of_duplicates)\n    {\n        $temp = $range_start + ($step_size * $i);\n        currentTime ($temp);\n        // seleced the objects to duplicate or instance\n        select $selectedObjects;\n        if($duplicateOrInstance == 0)\n        {\n            duplicate;\n        }\n        else\n        {\n            instance;\n        }\n        $i++;\n    }\n}"
  },
  {
    "path": "demo/kitchen-sink/docs/mixal.mixal",
    "content": "* PROGRAM START\nΔSTART     LDA  2000 LOAD A FROM CELL 2000\n           CMP7 =15=\n12345      HLT\n           END  START\nABC        ALF abc\n"
  },
  {
    "path": "demo/kitchen-sink/docs/mushcode.mc",
    "content": "@create phone\n&pickup phone=$pick up:@ifelse [u(is,u(mode),ICC)]={@pemit %#=You pick up the [fullname(me)].[set(me,PHONER:%#)][set(me,MODE:CIP)][set([u(INCOMING)],CONNECTED:[num(me)])][set(me,CONNECTED:[u(INCOMING)])]%r[showpicture(PICPICKUP)]%rUse '[color(green,black,psay <message>)]' (or '[color(green,black,p <message>)]') to talk into the phone.;@oemit %#=%N picks up the [fullname(me)].},{@pemit %#=You pick up the phone but no one is there. You hear a dialtone and then hang up. [play(u(DIALTONE))];@oemit %#=%N picks up the phone, but no one is on the other end.}\n&ringfun phone=[ifelse(eq(comp([u(%0/ringtone)],off),0),[color(black,cyan,INCOMING CALL FROM %1)],[play([switch([u(%0/ringtone)],1,[u(%0/ringtone1)],2,[u(%0/ringtone2)],3,[u(%0/ringtone3)],4,[u(%0/ringtone4)],5,[u(%0/ringtone5)],6,[u(%0/ringtone6)],7,[u(%0/ringtone7)],8,[u(%0/ringtone8)],9,[u(%0/ringtone9)],custom,[u(%0/customtone)],vibrate,[u(%0/vibrate)])])]\n&ringloop phone=@switch [u(ringstate)]=1,{@emit [setq(q,[u(connecting)])][set(%qq,rangs:0)][set(%qq,mode:WFC)][set(%qq,INCOMING:)];@ifelse [u(%qq/HASVMB)]={@tr me/ROUTEVMB=[u(connecting)];},{@pemit %#=[u(MSGCNC)];}},2,{@pemit %#=The call is connected.[setq(q,[u(CONNECTING)])][set(me,CONNECTED:%qq)][set(%qq,CONNECTED:[num(me)])][set(%qq,MODE:CIP)];@tr me/ciploop;@tr %qq/ciploop;},3,{@emit On [fullname(me)]'s earpiece you hear a ringing sound.[play(u(LINETONE))];@tr me/ringhere;@increment [u(connecting)]/RANGS;@wait 5={@tr me/ringloop};},4,{}\n&ringstate phone=[setq(q,u(connecting))][setq(1,[gt(u(%qq/rangs),sub(u(%qq/rings),1))])][setq(2,[and(u(is,u(%qq/MODE),CIP),u(is,u(%qq/INCOMING),[num(me)]))][setq(3,[u(is,u(%qq/MODE),ICC)])][ifelse(%q1,1,ifelse(%q2,2,ifelse(%q3,3,4)))]\n;comment\n@@(comment)\nsay [time()]\n"
  },
  {
    "path": "demo/kitchen-sink/docs/mysql.mysql",
    "content": "TODO"
  },
  {
    "path": "demo/kitchen-sink/docs/nsis.nsi",
    "content": "/*\n  NSIS Mode\n  for Ace\n*/\n\n; Includes\n!include MUI2.nsh\n\n; Settings\nName \"installer_name\"\nOutFile \"installer_name.exe\"\nRequestExecutionLevel user\nCRCCheck on\n!ifdef x64\n  InstallDir \"$PROGRAMFILES64\\installer_name\"\n!else\n  InstallDir \"$PROGRAMFILES\\installer_name\"\n!endif\n\n; Pages\n!insertmacro MUI_PAGE_INSTFILES\n\n; Sections\nSection \"section_name\" section_index\n  # your code here\nSectionEnd\n\n; Functions\nFunction .onInit\n  MessageBox MB_OK \"Here comes a$\\n$\\rline-break!\"\nFunctionEnd"
  },
  {
    "path": "demo/kitchen-sink/docs/objectivec.m",
    "content": "@protocol Printing: someParent\n-(void) print;\n@end\n\n@interface Fraction: NSObject <Printing, NSCopying> {\n    int numerator;\n    int denominator;\n}\n@end\n\n@\"blah\\8\" @\"a\\222sd\\d\" @\"\\faw\\\"\\? \\' \\4 n\\\\\" @\"\\56\"\n@\"\\xSF42\"\n\n-(NSDecimalNumber*)addCount:(id)addObject{\n\nreturn [count decimalNumberByAdding:addObject.count];\n\n}\n\n  NS_DURING  NS_HANDLER NS_ENDHANDLER\n\n@try {\n   if (argc > 1)    {\n    @throw [NSException exceptionWithName:@\"Throwing a test exception\" reason:@\"Testing the @throw directive.\" userInfo:nil];\n   }\n} \n@catch (id theException) {\n    NSLog(@\"%@\", theException);\n    result = 1  ;\n} \n@finally {\n    NSLog(@\"This always happens.\");\n    result += 2 ;\n}\n\n    @synchronized(lock) {\n        NSLog(@\"Hello World\");\n    }\n\nstruct { @defs( NSObject) }\n\nchar *enc1 = @encode(int);\n\n         IBOutlet|IBAction|BOOL|SEL|id|unichar|IMP|Class \n\n\n @class @protocol\n\n@public\n  // instance variables\n@package\n  // instance variables\n@protected\n  // instance variables\n@private\n  // instance variables\n\n  YES NO Nil nil\nNSApp()\nNSRectToCGRect (Protocol ProtocolFromString:\"NSTableViewDelegate\"))\n\n[SPPoint pointFromCGPoint:self.position]\n\nNSRoundDownToMultipleOfPageSize\n\n#import <stdio.h>\n\nint main( int argc, const char *argv[] ) {\n    printf( \"hello world\\n\" );\n    return 0;\n}\n\nNSChangeSpelling\n\n@\"0 != SUBQUERY(image, $x, 0 != SUBQUERY($x.bookmarkItems, $y, $y.@count == 0).@count).@count\"\n\n@selector(lowercaseString) @selector(uppercaseString:)\n\nNSFetchRequest *localRequest = [[NSFetchRequest alloc] init];  \nlocalRequest.entity = [NSEntityDescription entityForName:@\"VNSource\" inManagedObjectContext:context];  \nlocalRequest.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@\"resolution\" ascending:YES]];  \nNSPredicate *predicate = [NSPredicate predicateWithFormat:@\"0 != SUBQUERY(image, $x, 0 != SUBQUERY($x.bookmarkItems, $y, $y.@count == 0).@count).@count\"];\n[NSPredicate predicateWithFormat:]\nNSString *predicateString = [NSString stringWithFormat:@\"SELF beginsWith[cd] %@\", searchString];\nNSPredicate *pred = [NSPredicate predicateWithFormat:predicateString];\nNSArray *filteredKeys = [[myMutableDictionary allKeys] filteredArrayUsingPredicate:pred]; \n\nlocalRequest.predicate = [NSPredicate predicateWithFormat:@\"whichChart = %@\" argumentArray: listChartToDownload];\nlocalRequest.fetchBatchSize = 100;\narrayRequest    = [context  executeFetchRequest:localRequest error:&error1];\n\n[localRequest   release];\n\n#ifndef Nil\n#define Nil __DARWIN_NULL   /* id of Nil class */\n#endif\n\n@implementation MyObject\n- (unsigned int)areaOfWidth:(unsigned int)width\n                height:(unsigned int)height\n{\n  return width*height;\n}\n@end\n"
  },
  {
    "path": "demo/kitchen-sink/docs/ocaml.ml",
    "content": "(*\n * Example of early return implementation taken from\n * http://ocaml.janestreet.com/?q=node/91\n *)\n\nlet with_return (type t) (f : _ -> t) =\n  let module M =\n     struct exception Return of t end\n  in\n  let return = { return = (fun x -> raise (M.Return x)); } in\n  try f return with M.Return x -> x\n\n\n(* Function that uses the 'early return' functionality provided by `with_return` *)\nlet sum_until_first_negative list =\n  with_return (fun r ->\n    List.fold list ~init:0 ~f:(fun acc x ->\n      if x >= 0 then acc + x else r.return acc))"
  },
  {
    "path": "demo/kitchen-sink/docs/pascal.pas",
    "content": "(*****************************************************************************\n * A simple bubble sort program.  Reads integers, one per line, and prints   *\n * them out in sorted order.  Blows up if there are more than 49.            *\n *****************************************************************************)\nPROGRAM Sort(input, output);\n    CONST\n        (* Max array size. *)\n        MaxElts = 50;\n    TYPE \n        (* Type of the element array. *)\n        IntArrType = ARRAY [1..MaxElts] OF Integer;\n\n    VAR\n        (* Indexes, exchange temp, array size. *)\n        i, j, tmp, size: integer;\n\n        (* Array of ints *)\n        arr: IntArrType;\n\n    (* Read in the integers. *)\n    PROCEDURE ReadArr(VAR size: Integer; VAR a: IntArrType); \n        BEGIN\n            size := 1;\n            WHILE NOT eof DO BEGIN\n                readln(a[size]);\n                IF NOT eof THEN \n                    size := size + 1\n            END\n        END;\n\n    BEGIN\n        (* Read *)\n        ReadArr(size, arr);\n\n        (* Sort using bubble sort. *)\n        FOR i := size - 1 DOWNTO 1 DO\n            FOR j := 1 TO i DO \n                IF arr[j] > arr[j + 1] THEN BEGIN\n                    tmp := arr[j];\n                    arr[j] := arr[j + 1];\n                    arr[j + 1] := tmp;\n                END;\n\n        (* Print. *)\n        FOR i := 1 TO size DO\n            writeln(arr[i])\n    END.\n            "
  },
  {
    "path": "demo/kitchen-sink/docs/perl.pl",
    "content": "#!/usr/bin/perl\n=begin\n perl example code for Ace\n=cut\n\nuse v5.10;\nuse strict;\nuse warnings;\n\nuse List::Util qw(first);\nmy @primes;\n\n# Put 2 as the first prime so we won't have an empty array\npush @primes, 2;\n\nfor my $number_to_check (3 .. 200) {\n    # Check if the current number is divisible by any previous prime\n    # if it is, skip to the next number.  Use first to bail out as soon\n    # as we find a prime that divides it.\n    next if (first {$number_to_check % $_ == 0} @primes);\n\n    # If we reached this point it means $number_to_check is not\n    # divisable by any prime number that came before it.\n    push @primes, $number_to_check;\n}\n\n# List out all of the primes\nsay join(', ', @primes);\n"
  },
  {
    "path": "demo/kitchen-sink/docs/pgsql.pgsql",
    "content": "\nBEGIN;\n\n/**\n* Samples from PostgreSQL src/tutorial/basics.source\n*/\nCREATE TABLE weather (\n\tcity\t\tvarchar(80),\n\ttemp_lo\t\tint,\t\t-- low temperature\n\ttemp_hi\t\tint,\t\t-- high temperature\n\tprcp\t\treal,\t\t-- precipitation\n\t\"date\"\t\tdate\n);\n\nCREATE TABLE cities (\n\tname\t\tvarchar(80),\n\tlocation\tpoint\n);\n\n\nINSERT INTO weather\n    VALUES ('San Francisco', 46, 50, 0.25, '1994-11-27');\n\nINSERT INTO cities\n    VALUES ('San Francisco', '(-194.0, 53.0)');\n\nINSERT INTO weather (city, temp_lo, temp_hi, prcp, \"date\")\n    VALUES ('San Francisco', 43, 57, 0.0, '1994-11-29');\n\nINSERT INTO weather (date, city, temp_hi, temp_lo)\n    VALUES ('1994-11-29', 'Hayward', 54, 37);\n\n\nSELECT city, (temp_hi+temp_lo)/2 AS temp_avg, \"date\" FROM weather;\n\nSELECT city, temp_lo, temp_hi, prcp, \"date\", location\n    FROM weather, cities\n    WHERE city = name;\n\n\n\n/**\n* Dollar quotes starting at the end of the line are colored as SQL unless\n* a special language tag is used. Dollar quote syntax coloring is implemented\n* for Perl, Python, JavaScript, and Json.\n*/\ncreate or replace function blob_content_chunked(\n    in p_data bytea, \n    in p_chunk integer)\nreturns setof bytea as $$\n-- Still SQL comments\ndeclare\n\tv_size integer = octet_length(p_data);\nbegin\n\tfor i in 1..v_size by p_chunk loop\n\t\treturn next substring(p_data from i for p_chunk);\n\tend loop;\nend;\n$$ language plpgsql stable;\n\n\n-- pl/perl\nCREATE FUNCTION perl_max (integer, integer) RETURNS integer AS $perl$\n    # perl comment...\n    my ($x,$y) = @_;\n    if (! defined $x) {\n        if (! defined $y) { return undef; }\n        return $y;\n    }\n    if (! defined $y) { return $x; }\n    if ($x > $y) { return $x; }\n    return $y;\n$perl$ LANGUAGE plperl;\n\n-- pl/python\nCREATE FUNCTION usesavedplan() RETURNS trigger AS $python$\n    # python comment...\n    if SD.has_key(\"plan\"):\n        plan = SD[\"plan\"]\n    else:\n        plan = plpy.prepare(\"SELECT 1\")\n        SD[\"plan\"] = plan\n$python$ LANGUAGE plpythonu;\n\n-- pl/v8 (javascript)\nCREATE FUNCTION plv8_test(keys text[], vals text[]) RETURNS text AS $javascript$\nvar o = {};\nfor(var i=0; i<keys.length; i++){\n o[keys[i]] = vals[i];\n}\nreturn JSON.stringify(o);\n$javascript$ LANGUAGE plv8 IMMUTABLE STRICT;\n\n-- json\nselect * from json_object_keys($json$\n{\n  \"f1\": 5,\n  \"f2\": \"test\",\n  \"f3\": {}\n}\n$json$);\n\n\n-- psql commands\n\\df cash*\n\n\n-- Some string samples.\nselect 'don''t do it now;' || 'maybe later';\nselect E'dont\\'t do it';\nselect length('some other''s stuff' || $$cat in hat's stuff $$);\n\nselect $$ strings\nover multiple \nlines - use dollar quotes\n$$;\n\nEND;\n"
  },
  {
    "path": "demo/kitchen-sink/docs/php.php",
    "content": "<?php\n\nfunction nfact($n) {\n    if ($n == 0) {\n        return 1;\n    }\n    else {\n        return $n * nfact($n - 1);\n    }\n}\n\necho \"\\n\\nPlease enter a whole number ... \";\n$num = trim(fgets(STDIN));\n\n// ===== PROCESS - Determing the factorial of the input number =====\n$output = \"\\n\\nFactorial \" . $num . \" = \" . nfact($num) . \"\\n\\n\";\necho $output;\n\n?>"
  },
  {
    "path": "demo/kitchen-sink/docs/pig.pig",
    "content": "A = load 'mobydick.txt';\nB = foreach A generate flatten(TOKENIZE((chararray)$0)) as word;\nC = filter B by word matches '\\\\w+';\nD = group C by word;\nE = foreach D generate COUNT(C) as count, group as word;\nF = order E by count desc;\n-- one comment\n/* another comment */\ndump F;\n"
  },
  {
    "path": "demo/kitchen-sink/docs/plaintext.txt",
    "content": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.\n\nDuis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.\n\nUt wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.\n\nNam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.\n\nDuis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis.\n\nAt vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, At accusam aliquyam diam diam dolore dolores duo eirmod eos erat, et nonumy sed tempor et et invidunt justo labore Stet clita ea et gubergren, kasd magna no rebum. sanctus sea sed takimata ut vero voluptua. est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur"
  },
  {
    "path": "demo/kitchen-sink/docs/powershell.ps1",
    "content": "# This is a simple comment\nfunction Hello($name) {\n  Write-host \"Hello $name\"\n}\n\nfunction add($left, $right=4) {\n    if ($right -ne 4) {\n        return $left\n    } elseif ($left -eq $null -and $right -eq 2) {\n        return 3\n    } else {\n        return 2\n    }\n}\n\n$number = 1 + 2;\n$number += 3\n\nWrite-Host Hello -name \"World\"\n\n$an_array = @(1, 2, 3)\n$a_hash = @{\"something\" = \"something else\"}\n\n& notepad .\\readme.md\n"
  },
  {
    "path": "demo/kitchen-sink/docs/praat.praat",
    "content": "form Highlighter test\n  sentence My_sentence This should all be a string\n  text My_text This should also all be a string\n  word My_word Only the first word is a string, the rest is invalid\n  boolean Binary 1\n  boolean Text no\n  boolean Quoted \"yes\"\n  comment This should be a string\n  real left_Range -123.6\n  positive right_Range_max 3.3\n  integer Int 4\n  natural Nat 4\nendform\n\n# External scripts\ninclude /path/to/file\nrunScript: \"/path/to/file\"\nexecute /path/to/file\n\nstopwatch\n\n# old-style procedure call\ncall oldStyle \"quoted\" 2 unquoted string\nassert oldStyle.local = 1\n\n# New-style procedure call with parens\n@newStyle(\"quoted\", 2, \"quoted string\")\nif praatVersion >= 5364 \n  # New-style procedure call with colon\n  @newStyle: \"quoted\", 2, \"quoted string\"\nendif\n\n# if-block with built-in variables\nif windows\n  # We are on Windows\nelsif unix = 1 or !macintosh\n  exitScript: \"We are on Linux\"\nelse macintosh == 1\n  exit We are on Mac\nendif\n\n# inline if with inline comment\nvar = if macintosh = 1 then 0 else 1 fi ; This is an inline comment\n\n# for-loop with explicit from using local variable\n# and paren-style function calls and variable interpolation\nn = numberOfSelected(\"Sound\")\nfor i from newStyle.local to n\n  sound'i' = selected(\"Sound\", i)\n  sound[i] = sound'i'\nendfor\n\nfor i from 1 to n\n  # Different styles of object selection\n  select sound'i'\n  sound = selected()\n  sound$ = selected$(\"Sound\")\n  select Sound 'sound$'\n  selectObject(sound[i])\n  selectObject: sound\n  \n  # Pause commands\n  beginPause(\"Viewing \" + sound$)\n  if i > 1\n    button = endPause(\"Stop\", \"Previous\",\n      ...if i = total_sounds then \"Finish\" else \"Next\" fi,\n      ...3, 1)\n  else\n    button = endPause(\"Stop\",\n      ...if i = total_sounds then \"Finish\" else \"Next\" fi,\n      ...2, 1)  \n  endif\n  editor_name$ = if total_textgrids then \"TextGrid \" else \"Sound \" fi + name$\n  nocheck editor 'editor_name$'\n    nocheck Close\n  nocheck endeditor\n  \n  # New-style standalone command call\n  Rename: \"SomeName\"\n\n  # Command call with assignment\n  duration = Get total duration\n  \n  # Multi-line command with modifier\n  pitch = noprogress To Pitch (ac): 0, 75, 15, \"no\",\n    ...0.03, 0.45, 0.01, 0.35, 0.14, 600\n    \n  # do-style command with assignment\n  minimum = do(\"Get minimum...\", 0, 0, \"Hertz\", \"Parabolic\")\n\n  # New-style multi-line command call with broken strings\n  table = Create Table with column names: \"table\", 0,\n    ...\"file subject speaker\n    ...f0 f1 f2 f3 \" +\n    ...\"duration response\"\n  \n  removeObject: pitch, table\n    \n  # Picture window commands\n  selectObject: sound\n  # do-style command\n  do(\"Select inner viewport...\", 1, 6, 0.5, 1.5)\n  Black\n  Draw... 0 0 0 0 \"no\" Curve\n  Draw inner box\n  Text bottom: \"yes\", sound$\n  Erase all\n  \n  # Demo window commands\n  demo Erase all\n  demo Select inner viewport... 0 100 0 100\n  demo Axes... 0 100 0 100\n  demo Paint rectangle... white 0 100 0 100\n  demo Text... 50 centre 50 half Click to finish\n  demoWaitForInput ( )\n  demo Erase all\n  demo Text: 50, \"centre\", 50, \"half\", \"Finished\"\nendfor\n\n# An old-style sendpraat block\nsendpraat Praat\n  ...'newline$' Create Sound as pure tone... \"tone\" 1 0 0.4 44100 440 0.2 0.01 0.01\n  ...'newline$' Play\n  ...'newline$' Remove\n\n# A new-style sendpraat block\nbeginSendPraat: \"Praat\"\n  Create Sound as pure tone: \"tone\", 1, 0, 0.4, 44100, 440, 0.2, 0.01, 0.01\n  duration = Get total duration\n  Remove\nendSendPraat: \"duration\"\nappendInfoLine: \"The generated sound lasted for \", duration, \"seconds\"\n\ntime = stopwatch\nclearinfo\necho This script took \nprint 'time' seconds to \nprintline execute.\n\n# Old-style procedure declaration\nprocedure oldStyle .str1$ .num .str2$\n  .local = 1\nendproc\n\n# New-style procedure declaration\nprocedure newStyle (.str1$, .num, .str2$)\n  .local = 1\nendproc\n"
  },
  {
    "path": "demo/kitchen-sink/docs/prolog.plg",
    "content": "partition([], _, [], []).\npartition([X|Xs], Pivot, Smalls, Bigs) :-\n    (   X @< Pivot ->\n        Smalls = [X|Rest],\n        partition(Xs, Pivot, Rest, Bigs)\n    ;   Bigs = [X|Rest],\n        partition(Xs, Pivot, Smalls, Rest)\n    ).\n \nquicksort([])     --> [].\nquicksort([X|Xs]) -->\n    { partition(Xs, X, Smaller, Bigger) },\n    quicksort(Smaller), [X], quicksort(Bigger).\n\nperfect(N) :-\n    between(1, inf, N), U is N // 2,\n    findall(D, (between(1,U,D), N mod D =:= 0), Ds),\n    sumlist(Ds, N)."
  },
  {
    "path": "demo/kitchen-sink/docs/properties.properties",
    "content": "# You are reading the \".properties\" entry.\n! The exclamation mark can also mark text as comments.\n# The key and element characters #, !, =, and : are written with a preceding backslash to ensure that they are properly loaded.\nwebsite = http\\://en.wikipedia.org/\nlanguage = English\n# The backslash below tells the application to continue reading\n# the value onto the next line.\nmessage = Welcome to \\\n          Wikipedia!\n# Add spaces to the key\nkey\\ with\\ spaces = This is the value that could be looked up with the key \"key with spaces\".\n# Unicode\ntab : \\u0009\nempty-key=\nlast.line=value\n"
  },
  {
    "path": "demo/kitchen-sink/docs/protobuf.proto",
    "content": "message Point {\n  required int32 x = 1;\n  required int32 y = 2;\n  optional string label = 3;\n}\n\nmessage Line {\n  required Point start = 1;\n  required Point end = 2;\n  optional string label = 3;\n}\n\nmessage Polyline {\n  repeated Point point = 1;\n  optional string label = 2;\n}"
  },
  {
    "path": "demo/kitchen-sink/docs/python.py",
    "content": "#!/usr/local/bin/python\n\nimport string, sys\n\n# If no arguments were given, print a helpful message\nif len(sys.argv)==1:\n    print '''Usage:\ncelsius temp1 temp2 ...'''\n    sys.exit(0)\n\n# Loop over the arguments\nfor i in sys.argv[1:]:\n    try:\n        fahrenheit=float(string.atoi(i))\n    except string.atoi_error:\n        print repr(i), \"not a numeric value\"\n    else:\n        celsius=(fahrenheit-32)*5.0/9.0\n        print '%i\\260F = %i\\260C' % (int(fahrenheit), int(celsius+.5))"
  },
  {
    "path": "demo/kitchen-sink/docs/r.r",
    "content": "Call:\nlm(formula = y ~ x)\n \nResiduals:\n1       2       3       4       5       6\n3.3333 -0.6667 -2.6667 -2.6667 -0.6667  3.3333\n \nCoefficients:\n            Estimate Std. Error t value Pr(>|t|)\n(Intercept)  -9.3333     2.8441  -3.282 0.030453 *\nx             7.0000     0.7303   9.585 0.000662 ***\n---\nSignif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1\n \nResidual standard error: 3.055 on 4 degrees of freedom\nMultiple R-squared: 0.9583,     Adjusted R-squared: 0.9478\nF-statistic: 91.88 on 1 and 4 DF,  p-value: 0.000662\n \n> par(mfrow=c(2, 2))     # Request 2x2 plot layout\n> plot(lm_1)             # Diagnostic plot of regression model"
  },
  {
    "path": "demo/kitchen-sink/docs/razor.cshtml",
    "content": "@* razor mode *@\n@{\n\tLayout = \"~/layout\"\n\t@: <a>\n\t@Layout\n\t@: </a>\n}"
  },
  {
    "path": "demo/kitchen-sink/docs/rdoc.Rd",
    "content": "\\name{picker}\n\\alias{picker}\n\\title{Create a picker control}\n\\description{\n  Create a picker control to enable manipulation of plot variables based on a set of fixed choices.\n}\n\n\\usage{\npicker(..., initial = NULL, label = NULL)\n}\n\n\n\\arguments{\n  \\item{\\dots}{\n    Arguments containing objects to be presented as choices for the picker (or a list containing the choices). If an element is named then the name is used to display it within the picker. If an element is not named then it is displayed within the picker using \\code{\\link{as.character}}. \n}\n  \\item{initial}{\n    Initial value for picker. Value must be present in the list of choices specified. If not specified defaults to the first choice.\n}\n  \\item{label}{\n    Display label for picker. Defaults to the variable name if not specified.\n}\n}\n\n\\value{\n  An object of class \"manipulator.picker\" which can be passed to the \\code{\\link{manipulate}} function.\n}\n\n\\seealso{\n\\code{\\link{manipulate}}, \\code{\\link{slider}}, \\code{\\link{checkbox}}, \\code{\\link{button}}\n}\n\n\n\\examples{\n\\dontrun{\n\n## Filtering data with a picker\nmanipulate(\n  barplot(as.matrix(longley[,factor]), \n          beside = TRUE, main = factor),\n  factor = picker(\"GNP\", \"Unemployed\", \"Employed\"))\n\n## Create a picker with labels\nmanipulate(\n  plot(pressure, type = type), \n  type = picker(\"points\" = \"p\", \"line\" = \"l\", \"step\" = \"s\"))\n  \n## Picker with groups\nmanipulate(\n  barplot(as.matrix(mtcars[group,\"mpg\"]), beside=TRUE),\n  group = picker(\"Group 1\" = 1:11, \n                 \"Group 2\" = 12:22, \n                 \"Group 3\" = 23:32))\n\n## Histogram w/ picker to select type\nrequire(lattice)\nrequire(stats)\nmanipulate(\n  histogram(~ height | voice.part, \n            data = singer, type = type),\n  type = picker(\"percent\", \"count\", \"density\"))\n\n}\n}"
  },
  {
    "path": "demo/kitchen-sink/docs/red.red",
    "content": "Red []\r\ninfo: func ['fn  /name /intro /args /refinements /locals /return /spec \r\n\t/arg-num /arg-names /arg-types /ref-names /ref-types /ref-num /type\r\n\t/local intr ars refs locs ret arg ref typ\r\n][\r\n\tintr: copy \"\" ars: make map! copy [] refs: make map! copy [] locs: copy [] ret: copy [] typ: ref-arg: ref-arg-type: none\r\n\tif lit-word? fn [fn: to-word fn]\r\n\tunless find [op! native! function! action!] type?/word get fn [\r\n\t\tcause-error 'user 'message [\"Only function types accepted!\"]\r\n\t]\r\n\tout: make map! copy []\r\n\tspecs: spec-of get fn \r\n\tparse specs [\r\n\t\topt [set intr string!]\r\n\t\tany [set arg [word! | lit-word!] opt [set typ block!] opt string! (put ars arg either typ [typ][[any-type!]])]\r\n\t\tany [set ref refinement! [\r\n\t\t\tif (ref <> /local) (put refs to-lit-word ref make map! copy []) \r\n\t\t\t\topt string! \r\n\t\t\t\tany [set ref-arg word! opt [set ref-arg-type block!] \r\n\t\t\t\t\t(put refs/(to-word ref) to-lit-word ref-arg either ref-arg-type [ref-arg-type][[any-type!]])\r\n\t\t\t\t]\r\n\t\t\t|\tany [set loc word! (append locs loc) opt string!] \r\n\t\t\t\topt [set-word! set ret block!]\r\n\t\t]]\r\n\t\t\r\n\t\t(\r\n\t\tout: case [\r\n\t\t\tname\t\t[to-word fn]\r\n\t\t\tintro \t\t[intr] \r\n\t\t\targs\t\t[ars]\r\n\t\t\targ-num\t\t[length? ars]\r\n\t\t\targ-names \t[copy keys-of ars] \r\n\t\t\targ-types\t[copy values-of ars]\r\n\t\t\trefinements [refs] \r\n\t\t\tref-names\t[copy keys-of refs]\r\n\t\t\tref-types\t[copy values-of refs]\r\n\t\t\tref-num\t\t[length? refs]\r\n\t\t\tlocals \t\t[locs] \r\n\t\t\treturn \t\t[ret]\r\n\t\t\tspec\t\t[specs]\r\n\t\t\ttrue \t\t[\r\n\t\t\t\tmake object!  [\r\n\t\t\t\t\tname: \t\tto-word fn \r\n\t\t\t\t\tintro: \t\tintr \r\n\t\t\t\t\targs: \t\tars \r\n\t\t\t\t\trefinements: refs \r\n\t\t\t\t\tlocals: \tlocs \r\n\t\t\t\t\treturn: \tret \r\n\t\t\t\t\tspec: \t\tspecs \r\n\t\t\t\t\ttype: \t\ttype? get fn\r\n\t\t\t\t\targ-num: \tlength? args\r\n\t\t\t\t\targ-names: \tcopy keys-of args\r\n\t\t\t\t\targ-types: \tcopy values-of args\r\n\t\t\t\t\tref-names: \tcopy keys-of refinements\r\n\t\t\t\t\tref-types: \tcopy values-of refinements\r\n\t\t\t\t\tref-num:\tlength? refinements\r\n\t\t\t\t]\r\n\t\t\t]\r\n\t\t])\r\n\t]\r\n\tout\r\n]\r\n"
  },
  {
    "path": "demo/kitchen-sink/docs/rhtml.Rhtml",
    "content": "<html>\n\n<head>\n<title>Title</title>\n</head>\n\n<body>\n\n<p>This is an R HTML document. When you click the <b>Knit HTML</b> button a web page will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:</p>\n\n<!--begin.rcode\nsummary(cars)\nend.rcode-->\n\n<p>You can also embed plots, for example:</p>\n\n<!--begin.rcode fig.width=7, fig.height=6\nplot(cars)\nend.rcode-->\n\n</body>\n</html>\n"
  },
  {
    "path": "demo/kitchen-sink/docs/rst.rst",
    "content": "==========================================\n*reStructuredText* Highlighter for **Ace**\n==========================================\n\n.. seealso::\n\n   http://docutils.sourceforge.net/docs/user/rst/quickstart.html\n\n\nReStructuredText Primer\n=======================\n\n:Author: Richard Jones\n:Version: $Revision: 5801 $\n:Copyright: This document has been placed in the public domain.\n\n.. contents::\n\n\nThe text below contains links that look like \"(quickref__)\".  These\nare relative links that point to the `Quick reStructuredText`_ user\nreference.  If these links don't work, please refer to the `master\nquick reference`_ document.\n\n__\n.. _Quick reStructuredText: quickref.html\n.. _master quick reference:\n   http://docutils.sourceforge.net/docs/user/rst/quickref.html\n\n.. Note:: This document is an informal introduction to\n   reStructuredText.  The `What Next?`_ section below has links to\n   further resources, including a formal reference.\n\n\nStructure\n---------\n\nFrom the outset, let me say that \"Structured Text\" is probably a bit\nof a misnomer.  It's more like \"Relaxed Text\" that uses certain\nconsistent patterns.  These patterns are interpreted by a HTML\nconverter to produce \"Very Structured Text\" that can be used by a web\nbrowser.\n\nThe most basic pattern recognised is a **paragraph** (quickref__).\nThat's a chunk of text that is separated by blank lines (one is\nenough).  Paragraphs must have the same indentation -- that is, line\nup at their left edge.  Paragraphs that start indented will result in\nindented quote paragraphs. For example::\n\n  This is a paragraph.  It's quite\n  short.\n\n     This paragraph will result in an indented block of\n     text, typically used for quoting other text.\n\n  This is another one.\n\nResults in:\n\n  This is a paragraph.  It's quite\n  short.\n\n     This paragraph will result in an indented block of\n     text, typically used for quoting other text.\n\n  This is another one.\n\n__ quickref.html#paragraphs\n\n\nText styles\n-----------\n\n(quickref__)\n\n__ quickref.html#inline-markup\n\nInside paragraphs and other bodies of text, you may additionally mark\ntext for *italics* with \"``*italics*``\" or **bold** with\n\"``**bold**``\".  This is called \"inline markup\".\n\nIf you want something to appear as a fixed-space literal, use\n\"````double back-quotes````\".  Note that no further fiddling is done\ninside the double back-quotes -- so asterisks \"``*``\" etc. are left\nalone.\n\nIf you find that you want to use one of the \"special\" characters in\ntext, it will generally be OK -- reStructuredText is pretty smart.\nFor example, this lone asterisk * is handled just fine, as is the\nasterisk in this equation: 5*6=30.  If you actually\nwant text \\*surrounded by asterisks* to **not** be italicised, then\nyou need to indicate that the asterisk is not special.  You do this by\nplacing a backslash just before it, like so \"``\\*``\" (quickref__), or\nby enclosing it in double back-quotes (inline literals), like this::\n\n    ``*``\n\n__ quickref.html#escaping\n\n.. Tip:: Think of inline markup as a form of (parentheses) and use it\n   the same way: immediately before and after the text being marked\n   up.  Inline markup by itself (surrounded by whitespace) or in the\n   middle of a word won't be recognized.  See the `markup spec`__ for\n   full details.\n\n__ ../../ref/rst/restructuredtext.html#inline-markup\n\n\nLists\n-----\n\nLists of items come in three main flavours: **enumerated**,\n**bulleted** and **definitions**.  In all list cases, you may have as\nmany paragraphs, sublists, etc. as you want, as long as the left-hand\nside of the paragraph or whatever aligns with the first line of text\nin the list item.\n\nLists must always start a new paragraph -- that is, they must appear\nafter a blank line.\n\n**enumerated** lists (numbers, letters or roman numerals; quickref__)\n__ quickref.html#enumerated-lists\n\nStart a line off with a number or letter followed by a period \".\",\nright bracket \")\" or surrounded by brackets \"( )\" -- whatever you're\ncomfortable with.  All of the following forms are recognised::\n\n  1. numbers\n\n  A. upper-case letters\n     and it goes over many lines\n\n     with two paragraphs and all!\n\n  a. lower-case letters\n\n     3. with a sub-list starting at a different number\n     4. make sure the numbers are in the correct sequence though!\n\n  I. upper-case roman numerals\n\n  i. lower-case roman numerals\n\n  (1) numbers again\n\n  1) and again\n\nResults in (note: the different enumerated list styles are not\nalways supported by every web browser, so you may not get the full\neffect here):\n\n1. numbers\n\nA. upper-case letters\n   and it goes over many lines\n\n   with two paragraphs and all!\n\na. lower-case letters\n\n   3. with a sub-list starting at a different number\n   4. make sure the numbers are in the correct sequence though!\n\nI. upper-case roman numerals\n\ni. lower-case roman numerals\n\n(1) numbers again\n\n1) and again\n\n**bulleted** lists (quickref__)\n__ quickref.html#bullet-lists\n\nJust like enumerated lists, start the line off with a bullet point\ncharacter - either \"-\", \"+\" or \"\\*\"::\n\n  * a bullet point using \"\\*\"\n\n    - a sub-list using \"-\"\n\n      + yet another sub-list\n\n    - another item\n\nResults in:\n\n* a bullet point using \"\\*\"\n\n  - a sub-list using \"-\"\n\n    + yet another sub-list\n\n  - another item\n\n**definition** lists (quickref__)\n__ quickref.html#definition-lists\n\nUnlike the other two, the definition lists consist of a term, and\nthe definition of that term.  The format of a definition list is::\n\n  what\n    Definition lists associate a term with a definition.\n\n  *how*\n    The term is a one-line phrase, and the definition is one or more\n    paragraphs or body elements, indented relative to the term.\n    Blank lines are not allowed between term and definition.\n\nResults in:\n\nwhat\n  Definition lists associate a term with a definition.\n\n*how*\n  The term is a one-line phrase, and the definition is one or more\n  paragraphs or body elements, indented relative to the term.\n  Blank lines are not allowed between term and definition.\n\n\nPreformatting (code samples)\n----------------------------\n(quickref__)\n\n__ quickref.html#literal-blocks\n\nTo just include a chunk of preformatted, never-to-be-fiddled-with\ntext, finish the prior paragraph with \"``::``\".  The preformatted\nblock is finished when the text falls back to the same indentation\nlevel as a paragraph prior to the preformatted block.  For example::\n\n  An example::\n\n      Whitespace, newlines, blank lines, and all kinds of markup\n        (like *this* or \\this) is preserved by literal blocks.\n    Lookie here, I've dropped an indentation level\n    (but not far enough)\n\n  no more example\n\nResults in:\n\nAn example::\n\n    Whitespace, newlines, blank lines, and all kinds of markup\n      (like *this* or \\this) is preserved by literal blocks.\n  Lookie here, I've dropped an indentation level\n  (but not far enough)\n\nno more example\n\nNote that if a paragraph consists only of \"``::``\", then it's removed\nfrom the output::\n\n  ::\n\n      This is preformatted text, and the\n      last \"::\" paragraph is removed\n\nResults in:\n\n::\n\n    This is preformatted text, and the\n    last \"::\" paragraph is removed\n\n\nSections\n--------\n\n(quickref__)\n\n__ quickref.html#section-structure\n\nTo break longer text up into sections, you use **section headers**.\nThese are a single line of text (one or more words) with adornment: an\nunderline alone, or an underline and an overline together, in dashes\n\"``-----``\", equals \"``======``\", tildes \"``~~~~~~``\" or any of the\nnon-alphanumeric characters ``= - ` : ' \" ~ ^ _ * + # < >`` that you\nfeel comfortable with.  An underline-only adornment is distinct from\nan overline-and-underline adornment using the same character.  The\nunderline/overline must be at least as long as the title text.  Be\nconsistent, since all sections marked with the same adornment style\nare deemed to be at the same level::\n\n  Chapter 1 Title\n  ===============\n\n  Section 1.1 Title\n  -----------------\n\n  Subsection 1.1.1 Title\n  ~~~~~~~~~~~~~~~~~~~~~~\n\n  Section 1.2 Title\n  -----------------\n\n  Chapter 2 Title\n  ===============\n\nThis results in the following structure, illustrated by simplified\npseudo-XML::\n\n    <section>\n        <title>\n            Chapter 1 Title\n        <section>\n            <title>\n                Section 1.1 Title\n            <section>\n                <title>\n                    Subsection 1.1.1 Title\n        <section>\n            <title>\n                Section 1.2 Title\n    <section>\n        <title>\n            Chapter 2 Title\n\n(Pseudo-XML uses indentation for nesting and has no end-tags.  It's\nnot possible to show actual processed output, as in the other\nexamples, because sections cannot exist inside block quotes.  For a\nconcrete example, compare the section structure of this document's\nsource text and processed output.)\n\nNote that section headers are available as link targets, just using\ntheir name.  To link to the Lists_ heading, I write \"``Lists_``\".  If\nthe heading has a space in it like `text styles`_, we need to quote\nthe heading \"```text styles`_``\".\n\n\nDocument Title / Subtitle\n`````````````````````````\n\nThe title of the whole document is distinct from section titles and\nmay be formatted somewhat differently (e.g. the HTML writer by default\nshows it as a centered heading).\n\nTo indicate the document title in reStructuredText, use a unique adornment\nstyle at the beginning of the document.  To indicate the document subtitle,\nuse another unique adornment style immediately after the document title.  For\nexample::\n\n    ================\n     Document Title\n    ================\n    ----------\n     Subtitle\n    ----------\n\n    Section Title\n    =============\n\n    ...\n\nNote that \"Document Title\" and \"Section Title\" above both use equals\nsigns, but are distict and unrelated styles.  The text of\noverline-and-underlined titles (but not underlined-only) may be inset\nfor aesthetics.\n\n\nImages\n------\n\n(quickref__)\n\n__ quickref.html#directives\n\nTo include an image in your document, you use the the ``image`` directive__.\nFor example::\n\n  .. image:: images/biohazard.png\n\nresults in:\n\n.. image:: images/biohazard.png\n\nThe ``images/biohazard.png`` part indicates the filename of the image\nyou wish to appear in the document. There's no restriction placed on\nthe image (format, size etc).  If the image is to appear in HTML and\nyou wish to supply additional information, you may::\n\n  .. image:: images/biohazard.png\n     :height: 100\n     :width: 200\n     :scale: 50\n     :alt: alternate text\n\nSee the full `image directive documentation`__ for more info.\n\n__ ../../ref/rst/directives.html\n__ ../../ref/rst/directives.html#images\n\n\nWhat Next?\n----------\n\nThis primer introduces the most common features of reStructuredText,\nbut there are a lot more to explore.  The `Quick reStructuredText`_\nuser reference is a good place to go next.  For complete details, the\n`reStructuredText Markup Specification`_ is the place to go [#]_.\n\nUsers who have questions or need assistance with Docutils or\nreStructuredText should post a message to the Docutils-users_ mailing\nlist.\n\n.. [#] If that relative link doesn't work, try the master document:\n   http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html.\n\n.. _reStructuredText Markup Specification:\n   ../../ref/rst/restructuredtext.html\n.. _Docutils-users: ../mailing-lists.html#docutils-users\n.. _Docutils project web site: http://docutils.sourceforge.net/\n"
  },
  {
    "path": "demo/kitchen-sink/docs/ruby.rb",
    "content": "#!/usr/bin/ruby\n\n# Program to find the factorial of a number\ndef fact(n)\n    if n == 0\n        1\n    else\n        n * fact(n-1)\n    end\nend\n\nputs fact(ARGV[0].to_i)\n\nclass Range\n  def to_json(*a)\n    {\n      'json_class'   => self.class.name, # = 'Range'\n      'data'         => [ first, last, exclude_end? ]\n    }.to_json(*a)\n  end\nend\n\n{:id => ?\", :key => \"value\"}\n\n\n    herDocs = [<<'FOO', <<BAR, <<-BAZ, <<-`EXEC`] #comment\n  FOO #{literal}\nFOO\n  BAR #{fact(10)}\nBAR\n  BAZ indented\n    BAZ\n        echo hi\n    EXEC\nputs herDocs"
  },
  {
    "path": "demo/kitchen-sink/docs/rust.rs",
    "content": "use core::rand::RngUtil;\n\nfn main() {\n    for [\"Alice\", \"Bob\", \"Carol\"].each |&name| {\n        do spawn {\n            let v = rand::Rng().shuffle([1, 2, 3]);\n            for v.each |&num| {\n                print(fmt!(\"%s says: '%d'\\n\", name, num + 1))\n            }\n        }\n    }\n}\n\nfn map<T, U>(vector: &[T], function: &fn(v: &T) -> U) -> ~[U] {\n    let mut accumulator = ~[];\n    for vec::each(vector) |element| {\n        accumulator.push(function(element));\n    }\n    return accumulator;\n}\n"
  },
  {
    "path": "demo/kitchen-sink/docs/sass.sass",
    "content": "// sass ace mode;\n\n@import url(http://fonts.googleapis.com/css?family=Ace:700)\n\nhtml, body\n  :background-color #ace\n  text-align: center\n  height: 100%\n  /*;*********;\n    ;comment  ;\n    ;*********;\n\n.toggle\n  $size: 14px\n\n  :background url(http://subtlepatterns.com/patterns/dark_stripes.png)\n  border-radius: 8px\n  height: $size\n\n  &:before\n    $radius: $size * 0.845\n    $glow: $size * 0.125\n\n    box-shadow: 0 0 $glow $glow / 2 #fff\n    border-radius: $radius\n    \n    &:active\n      ~ .button\n        box-shadow: 0 15px 25px -4px rgba(0,0,0,0.4)      \n      ~ .label\n        font-size: 40px\n        color: rgba(0,0,0,0.45)\n\n    &:checked      \n      ~ .button\n        box-shadow: 0 15px 25px -4px #ace\n      ~ .label\n        font-size: 40px\n        color: #c9c9c9\n"
  },
  {
    "path": "demo/kitchen-sink/docs/scad.scad",
    "content": "// ace can highlight scad!\nmodule Element(xpos, ypos, zpos){\n\ttranslate([xpos,ypos,zpos]){\n\t\tunion(){\n\t\t\tcube([10,10,4],true);\n\t\t\tcylinder(10,15,5);\n\t\t\ttranslate([0,0,10])sphere(5);\n\t\t}\n\t}\n}\n\nunion(){\n\tfor(i=[0:30]){\n\t\t# Element(0,0,0);\n\t\tElement(15*i,0,0);\n\t}\n}\n\nfor (i = [3, 5, 7, 11]){\n\trotate([i*10,0,0])scale([1,1,i])cube(10);\n}"
  },
  {
    "path": "demo/kitchen-sink/docs/scala.scala",
    "content": "// http://www.scala-lang.org/node/54\n\npackage examples.actors\n\nimport scala.actors.Actor\nimport scala.actors.Actor._\n\nabstract class PingMessage\ncase object Start extends PingMessage\ncase object SendPing extends PingMessage\ncase object Pong extends PingMessage\n\nabstract class PongMessage\ncase object Ping extends PongMessage\ncase object Stop extends PongMessage\n\nobject pingpong extends Application {\n  val pong = new Pong\n  val ping = new Ping(100000, pong)\n  ping.start\n  pong.start\n  ping ! Start\n}\n\nclass Ping(count: Int, pong: Actor) extends Actor {\n  def act() {\n    println(\"Ping: Initializing with count \"+count+\": \"+pong)\n    var pingsLeft = count\n    loop {\n      react {\n        case Start =>\n          println(\"Ping: starting.\")\n          pong ! Ping\n          pingsLeft = pingsLeft - 1\n        case SendPing =>\n          pong ! Ping\n          pingsLeft = pingsLeft - 1\n        case Pong =>\n          if (pingsLeft % 1000 == 0)\n            println(\"Ping: pong from: \"+sender)\n          if (pingsLeft > 0)\n            self ! SendPing\n          else {\n            println(\"Ping: Stop.\")\n            pong ! Stop\n            exit('stop)\n          }\n      }\n    }\n  }\n}\n\nclass Pong extends Actor {\n  def act() {\n    var pongCount = 0\n    loop {\n      react {\n        case Ping =>\n          if (pongCount % 1000 == 0)\n            println(\"Pong: ping \"+pongCount+\" from \"+sender)\n          sender ! Pong\n          pongCount = pongCount + 1\n        case Stop =>\n          println(\"Pong: Stop.\")\n          exit('stop)\n      }\n    }\n  }\n}"
  },
  {
    "path": "demo/kitchen-sink/docs/scheme.scm",
    "content": "(define (prompt-for-cd)\n   \"Prompts\n    for CD\"\n   (prompt-read \"Title\" 1.53 1 2/4 1.7 1.7e0 2.9E-4 +42 -7 #b001 #b001/100 #o777 #O777 #xabc55 #c(0 -5.6))\n   (prompt-read \"Artist\")\n   (or (parse-integer (prompt-read \"Rating\") #:junk-allowed #t) 0)\n  (if x (format #t \"yes\") (format #f \"no\") ;and here comment\n  ) \n  ;; second line comment\n  '(+ 1 2)\n  (position-if-not char-set:whitespace line #:start beg))\n  (quote (privet 1 2 3))\n  '(hello world)\n  (* 5 7)\n  (1 2 34 5)\n  (#:use \"aaaa\")\n  (let ((x 10) (y 20))\n    (display (+ x y))\n  ) \n\n  \"asdad\\0eqweqe\"\n"
  },
  {
    "path": "demo/kitchen-sink/docs/scss.scss",
    "content": "/* style.scss */\n\n#navbar {\n    $navbar-width: 800px;\n    $items: 5;\n    $navbar-color: #ce4dd6;\n\n    width: $navbar-width;\n    border-bottom: 2px solid $navbar-color;\n\n    li {\n        float: left;\n        width: $navbar-width/$items - 10px;\n\n        background-color: lighten($navbar-color, 20%);\n        &:hover {\n            background-color: lighten($navbar-color, 10%);\n        }\n    }\n}"
  },
  {
    "path": "demo/kitchen-sink/docs/sh.sh",
    "content": "#!/bin/sh\n\n# Script to open a browser to current branch\n# Repo formats:\n# ssh   git@github.com:richo/gh_pr.git\n# http  https://richoH@github.com/richo/gh_pr.git\n# git   git://github.com/richo/gh_pr.git\n\nusername=`git config --get github.user`\n\nget_repo() {\n    git remote -v | grep ${@:-$username} | while read remote; do\n      if repo=`echo $remote | grep -E -o \"git@github.com:[^ ]*\"`; then\n          echo $repo | sed -e \"s/^git@github\\.com://\" -e \"s/\\.git$//\"\n          exit 1\n      fi\n      if repo=`echo $remote | grep -E -o \"https?://([^@]*@)?github.com/[^ ]*\\.git\"`; then\n          echo $repo | sed -e \"s|^https?://||\" -e \"s/^.*github\\.com\\///\" -e \"s/\\.git$//\"\n          exit 1\n      fi\n      if repo=`echo $remote | grep -E -o \"git://github.com/[^ ]*\\.git\"`; then\n          echo $repo | sed -e \"s|^git://github.com/||\" -e \"s/\\.git$//\"\n          exit 1\n      fi\n    done\n\n    if [ $? -eq 0 ]; then\n        echo \"Couldn't find a valid remote\" >&2\n        exit 1\n    fi\n}\n\necho ${#x[@]}\n\nif repo=`get_repo $@`; then\n    branch=`git symbolic-ref HEAD 2>/dev/null`\n    echo \"http://github.com/$repo/pull/new/${branch##refs/heads/}\"\nelse\n    exit 1\nfi\n"
  },
  {
    "path": "demo/kitchen-sink/docs/sjs.sjs",
    "content": "var { each, map } = require('sjs:sequence');\nvar { get } = require('sjs:http');\n\nfunction foo(items, nada) {\n    var component = { name: \"Ace\", role: \"Editor\" };\n    console.log(\"\n        Welcome, #{component.name}\n    \".trim());\n\n    logging.debug(`Component added: $String(component) (${component})`);\n\n    console.log(`\n        Welcome, {${function() {\n            return { x: 1, y: \"why?}\"};\n        }()}\n    `.trim());\n\n    waitfor {\n        items .. each.par { |item|\n            get(item);\n        }\n    } and {\n        var lengths = items .. map(i -> i.length);\n    } or {\n        hold(1500);\n        throw new Error(\"timed out\");\n    }\n}\t// Real Tab.\n"
  },
  {
    "path": "demo/kitchen-sink/docs/smarty.smarty",
    "content": "{foreach $foo as $bar}\n  <a href=\"{$bar.zig}\">{$bar.zag}</a>\n  <a href=\"{$bar.zig2}\">{$bar.zag2}</a>\n  <a href=\"{$bar.zig3}\">{$bar.zag3}</a>\n{foreachelse}\n  There were no rows found.\n{/foreach}"
  },
  {
    "path": "demo/kitchen-sink/docs/snippets.snippets",
    "content": "# Function\nsnippet fun\n\tfunction ${1?:function_name}(${2:argument}) {\n\t\t${3:// body...}\n\t}\n# Anonymous Function\nregex /((=)\\s*|(:)\\s*|(\\()|\\b)/f/(\\))?/\nname f\n\tfunction${M1?: ${1:functionName}}($2) {\n\t\t${0:$TM_SELECTED_TEXT}\n\t}${M2?;}${M3?,}${M4?)}\n# Immediate function\ntrigger \\(?f\\(\nendTrigger \\)?\nsnippet f(\n\t(function(${1}) {\n\t\t${0:${TM_SELECTED_TEXT:/* code */}}\n\t}(${1}));\n# if\nsnippet if\n\tif (${1:true}) {\n\t\t${0}\n\t}\n\t\n\t\n\t"
  },
  {
    "path": "demo/kitchen-sink/docs/soy_template.soy",
    "content": "/**\n * Greets a person using \"Hello\" by default.\n * @param name The name of the person.\n * @param? greetingWord Optional greeting word to use instead of \"Hello\".\n */\n{template .helloName #eee}\n  {if not $greetingWord}\n    Hello {$name}!\n  {else}\n    {$greetingWord} {$name}!\n  {/if}\n{/template}\n\n/**\n * Greets a person and optionally a list of other people.\n * @param name The name of the person.\n * @param additionalNames The additional names to greet. May be an empty list.\n */\n{template .helloNames}\n  // Greet the person.\n  {call .helloName data=\"all\" /}<br>\n  // Greet the additional people.\n  {foreach $additionalName in $additionalNames}\n    {call .helloName}\n      {param name: $additionalName /}\n    {/call}\n    {if not isLast($additionalName)}\n      <br>  // break after every line except the last\n    {/if}\n  {ifempty}\n    No additional people to greet.\n  {/foreach}\n{/template}\n\n\n{/foreach}\n{if length($items) > 5}\n{msg desc=\"Says hello to the user.\"}\n\n\n{namespace ns autoescape=\"contextual\"}\n\n/** Example. */\n{template .example}\n  foo is {$ij.foo}\n{/template}"
  },
  {
    "path": "demo/kitchen-sink/docs/space.space",
    "content": "query\n count 10\n created 2011-06-21T08:10:46Z\n lang en-US\n results\n  photo\n   0\n    farm 6\n    id 5855620975\n    isfamily 0\n    isfriend 0\n    ispublic 1\n    owner 32021554@N04\n    secret f1f5e8515d\n    server 5110\n    title 7087 bandit cat\n   1\n    farm 4\n    id 5856170534\n    isfamily 0\n    isfriend 0\n    ispublic 1\n    owner 32021554@N04\n    secret ff1efb2a6f\n    server 3217\n    title 6975 rusty cat\n   2\n    farm 6\n    id 5856172972\n    isfamily 0\n    isfriend 0\n    ispublic 1\n    owner 51249875@N03\n    secret 6c6887347c\n    server 5192\n    title watermarked-cats\n   3\n    farm 6\n    id 5856168328\n    isfamily 0\n    isfriend 0\n    ispublic 1\n    owner 32021554@N04\n    secret 0c1cfdf64c\n    server 5078\n    title 7020 mandy cat\n   4\n    farm 3\n    id 5856171774\n    isfamily 0\n    isfriend 0\n    ispublic 1\n    owner 32021554@N04\n    secret 7f5a3180ab\n    server 2696\n    title 7448 bobby cat\n"
  },
  {
    "path": "demo/kitchen-sink/docs/sparql.rq",
    "content": "PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>\nPREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n\n# 1. Directors of movies starring Brad Pitt\n# Datasource: http://fragments.dbpedia.org/*/en\nSELECT ?movie ?title ?name\nWHERE {\n  ?movie dbpedia-owl:starring [ rdfs:label \"Brad Pitt\"@en ];\n         rdfs:label ?title;\n         dbpedia-owl:director [ rdfs:label ?name ].\n  FILTER LANGMATCHES(LANG(?title), \"EN\")\n  FILTER LANGMATCHES(LANG(?name),  \"EN\")\n}\n"
  },
  {
    "path": "demo/kitchen-sink/docs/sql.sql",
    "content": "SELECT city, COUNT(id) AS users_count\nFROM users\nWHERE group_name = 'salesman'\nAND created > '2011-05-21'\nGROUP BY 1\nORDER BY 2 DESC"
  },
  {
    "path": "demo/kitchen-sink/docs/sqlserver.sqlserver",
    "content": "-- =============================================\n-- Author:\t\tMorgan Yarbrough\n-- Create date: 4/27/2015\n-- Description:\tTest procedure that shows off language features.\n-- \t\t\t\tIncludes non-standard folding with region comments using either\n-- \t\t\t\tline comments or block comments (both are demonstrated below).\n--\t\t\t\tThis mode imitates SSMS and it designed to be used with SQL Server theme.\n-- =============================================\nCREATE PROCEDURE dbo.TestProcedure\n\t\n--#region parameters\n\t@vint INT = 1\n\t,@vdate DATE = NULL\n\t,@vdatetime DATETIME = DATEADD(dd, 1, GETDATE())\n\t,@vvarchar VARCHAR(MAX) = ''\n--#endregion\n\nAS\nBEGIN\n\n\t/*#region set statements */\n\tSET NOCOUNT ON;\n\tSET XACT_ABORT ON;\n\tSET QUOTED_IDENTIFIER ON;\n\t/*#endregion*/\n\t\n\t/**\n\t * These comments will produce a fold widget\n\t */\n\t\n\t-- folding demonstration\n\tSET @vint = CASE\n\t\t\t\t\tWHEN @vdate IS NULL\n\t\t\t\t\t\tTHEN 1\n\t\t\t\t\tELSE 2\n\t\t\t\tEND\n\t\n\t-- another folding demonstration\n\tIF @vint = 1 \n\tBEGIN\n\t\tSET @vvarchar = 'one'\n\t\tSET @vint = DATEDIFF(dd, @vdate, @vdatetime)\n\tEND\n\t\n\t-- this mode handles strings properly\n\tDECLARE @sql NVARCHAR(4000) = N'SELECT TOP(1) OrderID \n\t\t\t\t\t\t\t\t\tFROM Orders\n\t\t\t\t\t\t\t\t\tWHERE @OrderDate > GETDATE()'\n\t\t\t\t\t\t\t\t\n\t-- this mode is aware of built in stored procedures \n\tEXECUTE sp_executesql @sql\n\t\n\t-- demonstrating some syntax highlighting\n\tSELECT Orders.OrderID\n\t\t,Customers.CompanyName\n\t\t,DATEFROMPARTS(YEAR(GETDATE()), 1, 1) AS FirstDayOfYear\n\tFROM Orders\n\tINNER JOIN Customers\n\t\tON Orders.CustomerID = Customers.CustomerID\n\tWHERE CompanyName NOT LIKE '%something'\n\t\tOR CompanyName IS NULL\n\t\tOR CompanyName IN ('bla', 'nothing')\n\t\t\n\t-- this mode includes snippets\n\t-- place your cusor at the end of the line below and trigger auto complete (Ctrl+Space)\n\tcreatepr\n\t\n\t-- SQL Server allows using keywords as object names (not recommended) as long as they are wrapped in brackets\n\tDATABASE -- keyword\n\t[DATABASE] -- not a keyword\n\t\nEND\n"
  },
  {
    "path": "demo/kitchen-sink/docs/stylus.styl",
    "content": "// I'm a comment!\n\n/*\n * Adds the given numbers together.\n */\n\n\n/*!\n * Adds the given numbers together.\n */\n\n\nasdasdasdad(df, ad=23)\n\nadd(a, b = a)\n   a + b\ngreen(#0c0)\n add(10, 5)\n // => 15\n\n add(10)\n add(a, b)\n\n    &asdasd\n\n    (arguments)\n\n    @sdfsdf\n.signatures\n  background-color #e0e8e0\n  border 1px solid grayLighter\n  box-shadow 0 0 3px grayLightest\n  border-radius 3px\n  padding 3px 5px\n  \"adsads\"\n  margin-left 0\n  list-style none\n.signature\n  list-style none\n  display: inline\n  margin-left 0\n  > li\n    display inline\nis not\n.signature-values\n  list-style none\n  display inline\n  margin-left 0\n  &:before\n    content '→'\n    margin 0 5px\n  > li\n  !important\n\n  unless"
  },
  {
    "path": "demo/kitchen-sink/docs/swift.swift",
    "content": "import UIKit\n \nclass DetailsViewController: UIViewController {\n    var album: Album?\n    @IBOutlet weak var albumCover: UIImageView!\n     \n    required init(coder aDecoder: NSCoder) {\n        super.init(coder: aDecoder)\n    }\n     \n    override func viewDidLoad() {\n        super.viewDidLoad()\n        mLabel.text = self.album?.title && \"Juhu \\( \"kinners\" )! \"\n        albumCover.image = UIImage(data: NSData(contentsOfURL: NSURL(string: self.album!.largeImageURL)!)!)\n    }\n}"
  },
  {
    "path": "demo/kitchen-sink/docs/tcl.tcl",
    "content": "\nproc dijkstra {graph origin} {\n    # Initialize\n    dict for {vertex distmap} $graph {\n\tdict set dist $vertex Inf\n\tdict set path $vertex {}\n    }\n    dict set dist $origin 0\n    dict set path $origin [list $origin]\n \n    while {[dict size $graph]} {\n\t# Find unhandled node with least weight\n\tset d Inf\n\tdict for {uu -} $graph {\n\t    if {$d > [set dd [dict get $dist $uu]]} {\n\t\tset u $uu\n\t\tset d $dd\n\t    }\n\t}\n \n\t# No such node; graph must be disconnected\n\tif {$d == Inf} break\n \n\t# Update the weights for nodes\\\n\t lead to by the node we've picked\n\tdict for {v dd} [dict get $graph $u] {\n\t    if {[dict exists $graph $v]} {\n\t\tset alt [expr {$d + $dd}]\n\t\tif {$alt < [dict get $dist $v]} {\n\t\t    dict set dist $v $alt\n\t\t    dict set path $v [list {*}[dict get $path $u] $v]\n\t\t}\n\t    }\n\t}\n \n\t# Remove chosen node from graph still to be handled\n\tdict unset graph $u\n    }\n    return [list $dist $path]\n}"
  },
  {
    "path": "demo/kitchen-sink/docs/tex.tex",
    "content": "The quadratic formula is $$-b \\pm \\sqrt{b^2 - 4ac} \\over 2a$$\n\\bye\n\n\\makeatletter\n \\newcommand{\\be}{%\n \\begingroup\n % \\setlength{\\arraycolsep}{2pt}\n \\eqnarray%\n \\@ifstar{\\nonumber}{}%\n  }\n  \\newcommand{\\ee}{\\endeqnarray\\endgroup}\n  \\makeatother\n\n \\begin{equation}\n x=\\left\\{ \\begin{array}{cl}\n 0 & \\textrm{if }A=\\ldots\\\\\n 1 & \\textrm{if }B=\\ldots\\\\\n x & \\textrm{this runs with as much text as you like, but without an raggeright text\n.}\\end{array}\\right.\n \\end{equation}"
  },
  {
    "path": "demo/kitchen-sink/docs/textile.textile",
    "content": "h1. Textile document\n\nh2. Heading Two\n\nh3. A two-line\n    header\n\nh2. Another two-line\nheader\n\nParagraph:\none, two,\nthee lines!\n\np(classone two three). This is a paragraph with classes\n\np(#id). (one with an id)\n\np(one two three#my_id). ..classes + id\n\n* Unordered list\n** sublist\n* back again!\n** sublist again..\n\n# ordered\n\nbg. Blockquote!\n    This is a two-list blockquote..!"
  },
  {
    "path": "demo/kitchen-sink/docs/toml.toml",
    "content": "# This is a TOML document. Boom.\n\ntitle = \"TOML Example\"\n\n[owner]\nname = \"Tom Preston-Werner\"\norganization = \"GitHub\"\nbio = \"GitHub Cofounder & CEO\\nLikes tater tots and beer.\"\ndob = 1979-05-27T07:32:00Z # First class dates? Why not?\n\n[database]\nserver = \"192.168.1.1\"\nports = [ 8001, 8001, 8002 ]\nconnection_max = 5000\nenabled = true\n\n[servers]\n\n  # You can indent as you please. Tabs or spaces. TOML don't care.\n  [servers.alpha]\n  ip = \"10.0.0.1\"\n  dc = \"eqdc10\"\n\n  [servers.beta]\n  ip = \"10.0.0.2\"\n  dc = \"eqdc10\"\n\n[clients]\ndata = [ [\"gamma\", \"delta\"], [1, 2] ] # just an update to make sure parsers support it"
  },
  {
    "path": "demo/kitchen-sink/docs/tsx.tsx",
    "content": "var mode = <div> \n    Typescript + <b> JSX </b> \n</div>;"
  },
  {
    "path": "demo/kitchen-sink/docs/turtle.ttl",
    "content": "@base <http://example.org/> .\n@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .\n@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .\n@prefix foaf: <http://xmlns.com/foaf/0.1/> .\n@prefix rel: <http://www.perceive.net/schemas/relationship/> .\n\n<#green-goblin>\n    rel:enemyOf <#spiderman> ;\n    a foaf:Person ;    # in the context of the Marvel universe\n    foaf:name \"Green Goblin\" .\n\n<#spiderman>\n    rel:enemyOf <#green-goblin> ;\n    a foaf:Person ;\n    foaf:name \"Spiderman\", \"Человек-паук\"@ru ."
  },
  {
    "path": "demo/kitchen-sink/docs/twig.twig",
    "content": "<!DOCTYPE html>\n<html>\n    <head>\n        <title>My Webpage</title>\n    </head>\n    <body>\n        <ul id=\"navigation\">\n        {% for item in navigation %}\n            <li><a href=\"{{ item.href|escape }}\">{{ item.caption }}</a></li>\n        {% endfor %}\n        </ul>\n\n        {% if 1 not in [1, 2, 3] %}\n\n        {# is equivalent to #}\n        {% if not (1 in [1, 2, 3]) %}\n\n        {% autoescape true %}\n            {{ var }}\n            {{ var|raw }}     {# var won't be escaped #}\n            {{ var|escape }}  {# var won't be doubled-escaped #}\n        {% endautoescape %}\n\n        {{ include('twig.html', sandboxed = true) }}\n\n        {{\"string #{with} \\\" escapes\" 'another#one' }}\n        <h1>My Webpage</h1>\n        {{ a_variable }}\n    </body>\n</html>"
  },
  {
    "path": "demo/kitchen-sink/docs/typescript.ts",
    "content": "class Greeter {\n\tgreeting: string;\n\tconstructor (message: string) {\n\t\tthis.greeting = message;\n\t}\n\tgreet() {\n\t\treturn \"Hello, \" + this.greeting;\n\t}\n}   \n\nvar greeter = new Greeter(\"world\");\n\nvar button = document.createElement('button')\nbutton.innerText = <string>\"Say Hello\";\nbutton.onclick = function() {\n\talert(greeter.greet())\n}\n\ndocument.body.appendChild(button)\n\nclass Snake extends Animal {\n   move() {\n       alert(\"Slithering...\");\n       super(5);\n   }\n}\n\nclass Horse extends Animal {\n   move() {\n       alert(\"Galloping...\");\n       super.move(45);\n   }\n}\n\nmodule Sayings {\n    export class Greeter {\n        greeting: string;\n        constructor (message: string) {\n            this.greeting = message;\n        }\n        greet() {\n            return \"Hello, \" + this.greeting;\n        }\n    }\n}\nmodule Mankala {\n   export class Features {\n       public turnContinues = false;\n       public seedStoredCount = 0;\n       public capturedCount = 0;\n       public spaceCaptured = NoSpace;\n\n       public clear() {\n           this.turnContinues = false;\n           this.seedStoredCount = 0;\n           this.capturedCount = 0;\n           this.spaceCaptured = NoSpace;\n       }\n\n       public toString() {\n           var stringBuilder = \"\";\n           if (this.turnContinues) {\n               stringBuilder += \" turn continues,\";\n           }\n           stringBuilder += \" stores \" + this.seedStoredCount;\n           if (this.capturedCount > 0) {\n               stringBuilder += \" captures \" + this.capturedCount + \" from space \" + this.spaceCaptured;\n           }\n           return stringBuilder;\n       }\n   }\n}"
  },
  {
    "path": "demo/kitchen-sink/docs/vala.vala",
    "content": "﻿using Gtk;\n \nint main (string[] args) {\n    Gtk.init (ref args);\n    var foo = new MyFoo<string[](), MyBar<string, int>>();\n\n    var window = new Window();\n    window.title = \"Hello, World!\";\n    window.border_width = 10;\n    window.window_position = WindowPosition.CENTER;\n    window.set_default_size(350, 70);\n    window.destroy.connect(Gtk.main_quit);\n \n    var label = new Label(\"Hello, World!\");\n \n    window.add(label);\n    window.show_all();\n \n    Gtk.main();\n    return 0;\n}"
  },
  {
    "path": "demo/kitchen-sink/docs/vbscript.vbs",
    "content": "myfilename = \"C:\\Wikipedia - VBScript - Example - Hello World.txt\"\r\nMakeHelloWorldFile myfilename\r\n \r\nSub MakeHelloWorldFile (FileName)\r\n'Create a new file in C: drive or overwrite existing file\r\n   Set FSO = CreateObject(\"Scripting.FileSystemObject\")\r\n   If FSO.FileExists(FileName) Then \r\n      Answer = MsgBox (\"File \" & FileName & \" exists ... OK to overwrite?\", vbOKCancel)\r\n      'If button selected is not OK, then quit now\r\n      'vbOK is a language constant\r\n      If Answer <> vbOK Then Exit Sub\r\n   Else\r\n      'Confirm OK to create\r\n      Answer = MsgBox (\"File \" & FileName & \" ... OK to create?\", vbOKCancel)\r\n      If Answer <> vbOK Then Exit Sub\r\n   End If\r\n   'Create new file (or replace an existing file)\r\n   Set FileObject = FSO.CreateTextFile (FileName)\r\n   FileObject.WriteLine \"Time ... \" & Now()\r\n   FileObject.WriteLine \"Hello World\"\r\n   FileObject.Close()\r\n   MsgBox \"File \" & FileName & \" ... updated.\"\r\nEnd Sub"
  },
  {
    "path": "demo/kitchen-sink/docs/velocity.vm",
    "content": "#*\n  This is a sample comment block that\n  spans multiple lines.\n*#\n\n#macro ( outputItem $item )\n  <li>${item}</li>\n#end\n\n## Define the items to iterate\n#set ( $items = [1, 2, 3, 4] )\n\n<ul>\n  ## Iterate over the items and output the evens.\n  #foreach ( $item in $items )\n    #if ( $_MathTool.mod($item, 2) == 0 )\n      #outputItem ($item)\n    #end\n  #end\n</ul>\n\n<script>\n  /*\n    A sample function to decomstrate\n    JavaScript highlighting and folding.\n  */\n  function foo(items, nada) {\n    for (var i=0; i<items.length; i++) {\n      alert(items[i] + \"juhu\\n\");\n    }\n  }\n</script>\n\n<style>\n  /*\n    A sample style to decomstrate\n    CSS highlighting and folding.\n  */\n  .class {\n    font-family: Monaco, \"Courier New\", monospace;\n    font-size: 12px;\n    cursor: text;\n  }\n</style>"
  },
  {
    "path": "demo/kitchen-sink/docs/verilog.v",
    "content": "always @(negedge reset or posedge clk) begin\n  if (reset == 0) begin\n    d_out <= 16'h0000;\n    d_out_mem[resetcount] <= d_out;\n    laststoredvalue <= d_out;\n  end else begin\n    d_out <= d_out + 1'b1; \n  end\nend\n\nalways @(bufreadaddr)\n  bufreadval = d_out_mem[bufreadaddr];"
  },
  {
    "path": "demo/kitchen-sink/docs/vhdl.vhd",
    "content": "library IEEE\nuser IEEE.std_logic_1164.all;\nuse IEEE.numeric_std.all;\n\nentity COUNT16 is\n\n    port (\n        cOut    :out    std_logic_vector(15 downto 0);  -- counter output\n        clkEn   :in     std_logic;                      -- count enable\n        clk     :in     std_logic;                      -- clock input\n        rst     :in     std_logic                       -- reset input\n        );\n        \nend entity;\n\narchitecture count_rtl of COUNT16 is\n    signal count :std_logic_vector (15 downto 0);\n    \nbegin\n    process (clk, rst) begin\n        \n        if(rst = '1') then\n            count <= (others=>'0');\n        elsif(rising_edge(clk)) then\n            if(clkEn = '1') then\n                count <= count + 1;\n            end if;\n        end if;\n        \n    end process;\n    cOut <= count;\n\nend architecture;\n    "
  },
  {
    "path": "demo/kitchen-sink/docs/wollok.wlk",
    "content": "class Actividad {\n\tmethod calcularMejora()\n}\n\nclass EstudiarMateria inherits Actividad {\n\tvar materia\n\tvar puntos = 0\n\t\n\tnew(m, p) {\n\t\tmateria = m\n\t\tpuntos = p\n\t}\n\t\n\toverride method calcularMejora() = puntos\n}\n\nclass EjercitarEnSimulador inherits Actividad {\n\tvar horas = 0\n\tnew(h) { horas = h }\n\toverride method calcularMejora() = 10 * horas\n}\n\nobject pepita {\n\tvar energia = 100\n\tmethod volar(m) {\n\t\tenergia -= m\n\t}\n}"
  },
  {
    "path": "demo/kitchen-sink/docs/xml.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<query xmlns:yahoo=\"http://www.yahooapis.com/v1/base.rng\"\n    yahoo:count=\"7\" yahoo:created=\"2011-10-11T08:40:23Z\" yahoo:lang=\"en-US\">\n    <diagnostics>\n        <publiclyCallable>true</publiclyCallable>\n        <url execution-start-time=\"0\" execution-stop-time=\"25\" execution-time=\"25\"><![CDATA[http://where.yahooapis.com/v1/continents;start=0;count=10]]></url>\n        <user-time>26</user-time>\n        <service-time>25</service-time>\n        <build-version>21978</build-version>\n    </diagnostics> \n    <results>\n        <place xmlns=\"http://where.yahooapis.com/v1/schema.rng\"\n            xml:lang=\"en-US\" yahoo:uri=\"http://where.yahooapis.com/v1/place/24865670\">\n            <woeid>24865670</woeid>\n            <placeTypeName code=\"29\">Continent</placeTypeName>\n            <name>Africa</name>\n        </place>\n        <place xmlns=\"http://where.yahooapis.com/v1/schema.rng\"\n            xml:lang=\"en-US\" yahoo:uri=\"http://where.yahooapis.com/v1/place/24865675\">\n            <woeid>24865675</woeid>\n            <placeTypeName code=\"29\">Continent</placeTypeName>\n            <name>Europe</name>\n        </place>\n        <place xmlns=\"http://where.yahooapis.com/v1/schema.rng\"\n            xml:lang=\"en-US\" yahoo:uri=\"http://where.yahooapis.com/v1/place/24865673\">\n            <woeid>24865673</woeid>\n            <placeTypeName code=\"29\">Continent</placeTypeName>\n            <name>South America</name>\n        </place>\n        <place xmlns=\"http://where.yahooapis.com/v1/schema.rng\"\n            xml:lang=\"en-US\" yahoo:uri=\"http://where.yahooapis.com/v1/place/28289421\">\n            <woeid>28289421</woeid>\n            <placeTypeName code=\"29\">Continent</placeTypeName>\n            <name>Antarctic</name>\n        </place>\n        <place xmlns=\"http://where.yahooapis.com/v1/schema.rng\"\n            xml:lang=\"en-US\" yahoo:uri=\"http://where.yahooapis.com/v1/place/24865671\">\n            <woeid>24865671</woeid>\n            <placeTypeName code=\"29\">Continent</placeTypeName>\n            <name>Asia</name>\n        </place>\n        <place xmlns=\"http://where.yahooapis.com/v1/schema.rng\"\n            xml:lang=\"en-US\" yahoo:uri=\"http://where.yahooapis.com/v1/place/24865672\">\n            <woeid>24865672</woeid>\n            <placeTypeName code=\"29\">Continent</placeTypeName>\n            <name>North America</name>\n        </place>\n        <place xmlns=\"http://where.yahooapis.com/v1/schema.rng\"\n            xml:lang=\"en-US\" yahoo:uri=\"http://where.yahooapis.com/v1/place/55949070\">\n            <woeid>55949070</woeid>\n            <placeTypeName code=\"29\">Continent</placeTypeName>\n            <name>Australia</name>\n        </place>\n    </results>\n</query>"
  },
  {
    "path": "demo/kitchen-sink/docs/xquery.xq",
    "content": "xquery version \"1.0\";\n\nlet $message := \"Hello World!\"\nreturn <results>\n  <message>{$message}</message>\n</results>\n"
  },
  {
    "path": "demo/kitchen-sink/docs/yaml.yaml",
    "content": "# This sample document was taken from wikipedia:\n# http://en.wikipedia.org/wiki/YAML#Sample_document\n---\nreceipt:     Oz-Ware Purchase Invoice\ndate:        2007-08-06\ncustomer:\n    given:   Dorothy\n    family:  Gale\n\nitems:\n    - part_no:   'A4786'\n      descrip:   Water Bucket (Filled)\n      price:     1.47\n      quantity:  4\n\n    - part_no:   'E1628'\n      descrip:   High Heeled \"Ruby\" Slippers\n      size:      8\n      price:     100.27\n      quantity:  1\n\nbill-to:  &id001\n    street: |\n            123 Tornado Alley\n            Suite 16\n    city:   East Centerville\n    state:  KS\n\nship-to:  *id001\n\nspecialDelivery:  >\n    Follow the Yellow Brick\n    Road to the Emerald City.\n    Pay no attention to the\n    man behind the curtain.\n"
  },
  {
    "path": "demo/kitchen-sink/file_drop.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\nvar config = require(\"ace/config\");\nvar event = require(\"ace/lib/event\");\nvar modelist = require(\"ace/ext/modelist\");\n\nmodule.exports = function(editor) {\n    event.addListener(editor.container, \"dragover\", function(e) {\n        var types = e.dataTransfer.types;\n        if (types && Array.prototype.indexOf.call(types, 'Files') !== -1)\n            return event.preventDefault(e);\n    });\n\n    event.addListener(editor.container, \"drop\", function(e) {\n        var file;\n        try {\n            file = e.dataTransfer.files[0];\n            if (window.FileReader) {\n                var reader = new FileReader();\n                reader.onload = function() {\n                    var mode = modelist.getModeForPath(file.name);\n                    editor.session.doc.setValue(reader.result);\n                    editor.session.setMode(mode.mode);\n                    editor.session.modeName = mode.name;\n                };\n                reader.readAsText(file);\n            }\n            return event.preventDefault(e);\n        } catch(err) {\n            return event.stopEvent(e);\n        }\n    });\n};\n\nvar Editor = require(\"ace/editor\").Editor;\nconfig.defineOptions(Editor.prototype, \"editor\", {\n    loadDroppedFile: {\n        set: function() { module.exports(this); },\n        value: true\n    }\n});\n\n});"
  },
  {
    "path": "demo/kitchen-sink/inline_editor.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar LineWidgets = require(\"ace/line_widgets\").LineWidgets;\nvar Editor = require(\"ace/editor\").Editor;\nvar Renderer = require(\"ace/virtual_renderer\").VirtualRenderer;\nvar dom = require(\"ace/lib/dom\");\n\n\nrequire(\"ace/commands/default_commands\").commands.push({\n    name: \"openInlineEditor\",\n    bindKey: \"F3\",\n    exec: function(editor) {\n        var split = window.env.split;\n        var s = editor.session;\n        var inlineEditor = new Editor(new Renderer());\n        var splitSession = split.$cloneSession(s);\n\n        var row = editor.getCursorPosition().row;\n        if (editor.session.lineWidgets && editor.session.lineWidgets[row]) {\n            editor.session.lineWidgets[row].destroy();\n            return;\n        }\n        \n        var rowCount = 10;\n        var w = {\n            row: row, \n           // rowCount: rowCount, \n            fixedWidth: true,\n            el: dom.createElement(\"div\"),\n            editor: inlineEditor\n        };\n        var el = w.el;\n        el.appendChild(inlineEditor.container);\n\n        if (!editor.session.widgetManager) {\n            editor.session.widgetManager = new LineWidgets(editor.session);\n            editor.session.widgetManager.attach(editor);\n        }\n        \n        var h = rowCount*editor.renderer.layerConfig.lineHeight;\n        inlineEditor.container.style.height = h + \"px\";\n\n        el.style.position = \"absolute\";\n        el.style.zIndex = \"4\";\n        el.style.borderTop = \"solid blue 2px\";\n        el.style.borderBottom = \"solid blue 2px\";\n        \n        inlineEditor.setSession(splitSession);\n        editor.session.widgetManager.addLineWidget(w);\n        \n        var kb = {\n            handleKeyboard:function(_,hashId, keyString) {\n                if (hashId === 0 && keyString === \"esc\") {\n                    w.destroy();\n                    return true;\n                }\n            }\n        };\n        \n        w.destroy = function() {\n            editor.keyBinding.removeKeyboardHandler(kb);\n            s.widgetManager.removeLineWidget(w);\n        };\n        \n        editor.keyBinding.addKeyboardHandler(kb);\n        inlineEditor.keyBinding.addKeyboardHandler(kb);\n        inlineEditor.setTheme(\"ace/theme/solarized_light\");\n    }\n});\n});\n"
  },
  {
    "path": "demo/kitchen-sink/layout.js",
    "content": "\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar dom = require(\"ace/lib/dom\");\nvar event = require(\"ace/lib/event\");\n\nvar EditSession = require(\"ace/edit_session\").EditSession;\nvar UndoManager = require(\"ace/undomanager\").UndoManager;\nvar Renderer = require(\"ace/virtual_renderer\").VirtualRenderer;\nvar Editor = require(\"ace/editor\").Editor;\nvar MultiSelect = require(\"ace/multi_select\").MultiSelect;\n\ndom.importCssString(\"\\\nsplitter {\\\n    border: 1px solid #C6C6D2;\\\n    width: 0px;\\\n    cursor: ew-resize;\\\n    z-index:10}\\\nsplitter:hover {\\\n    margin-left: -2px;\\\n    width:3px;\\\n    border-color: #B5B4E0;\\\n}\\\n\", \"splitEditor\");\n\nexports.edit = function(el) {\n    if (typeof(el) == \"string\")\n        el = document.getElementById(el);\n\n    var editor = new Editor(new Renderer(el, require(\"ace/theme/textmate\")));\n\n    editor.resize();\n    event.addListener(window, \"resize\", function() {\n        editor.resize();\n    });\n    return editor;\n};\n\n\nvar SplitRoot = function(el, theme, position, getSize) {\n    el.style.position = position || \"relative\";\n    this.container = el;\n    this.getSize = getSize || this.getSize;\n    this.resize = this.$resize.bind(this);\n\n    event.addListener(el.ownerDocument.defaultView, \"resize\", this.resize);\n    this.editor = this.createEditor();\n};\n\n(function(){\n    this.createEditor = function() {\n        var el = document.createElement(\"div\");\n        el.className = this.$editorCSS;\n        el.style.cssText = \"position: absolute; top:0px; bottom:0px\";\n        this.$container.appendChild(el);\n        var session = new EditSession(\"\");\n        var editor = new Editor(new Renderer(el, this.$theme));\n\n        /*editor.on(\"focus\", function() {\n            this._emit(\"focus\", editor);\n        }.bind(this));*/\n\n        this.$editors.push(editor);\n        editor.setFontSize(this.$fontSize);\n        return editor;\n    };\n    this.$resize = function() {\n        var size = this.getSize(this.container);\n        this.rect = {\n            x: size.left,\n            y: size.top,\n            w: size.width,\n            h: size.height\n        };\n        this.item.resize(this.rect);\n    };\n    this.getSize = function(el) {\n        return el.getBoundingClientRect();\n    };\n    this.destroy = function() {\n        var win = this.container.ownerDocument.defaultView;\n        event.removeListener(win, \"resize\", this.resize);\n    };\n\n\n}).call(SplitRoot.prototype);\n\n\n\nvar Split = function(){\n\n};\n(function(){\n    this.execute = function(options) {\n        this.$u.execute(options);\n    };\n\n}).call(Split.prototype);\n\n\n\nexports.singleLineEditor = function(el) {\n    var renderer = new Renderer(el);\n    el.style.overflow = \"hidden\";\n\n    renderer.screenToTextCoordinates = function(x, y) {\n        var pos = this.pixelToScreenCoordinates(x, y);\n        return this.session.screenToDocumentPosition(\n            Math.min(this.session.getScreenLength() - 1, Math.max(pos.row, 0)),\n            Math.max(pos.column, 0)\n        );\n    };\n\n    renderer.$maxLines = 4;\n\n    renderer.setStyle(\"ace_one-line\");\n    var editor = new Editor(renderer);\n    editor.session.setUndoManager(new UndoManager());\n\n    editor.setShowPrintMargin(false);\n    editor.renderer.setShowGutter(false);\n    editor.renderer.setHighlightGutterLine(false);\n    editor.$mouseHandler.$focusWaitTimout = 0;\n\n    return editor;\n};\n\n\n\n});\n\n"
  },
  {
    "path": "demo/kitchen-sink/require.js",
    "content": "/** vim: et:ts=4:sw=4:sts=4\n * @license RequireJS 2.1.11+ Copyright (c) 2010-2014, The Dojo Foundation All Rights Reserved.\n * Available via the MIT or new BSD license.\n * see: http://github.com/jrburke/requirejs for details\n */\n//Not using strict: uneven strict support in browsers, #392, and causes\n//problems with requirejs.exec()/transpiler plugins that may not be strict.\n/*jslint regexp: true, nomen: true, sloppy: true */\n/*global window, navigator, document, importScripts, setTimeout, opera */\n\nvar requirejs, require, define;\n(function (global) {\n    var req, s, head, baseElement, dataMain, src,\n        interactiveScript, currentlyAddingScript, mainScript, subPath,\n        version = '2.1.11+',\n        commentRegExp = /(\\/\\*([\\s\\S]*?)\\*\\/|([^:]|^)\\/\\/(.*)$)/mg,\n        cjsRequireRegExp = /[^.]\\s*require\\s*\\(\\s*[\"']([^'\"\\s]+)[\"']\\s*\\)/g,\n        jsSuffixRegExp = /\\.js$/,\n        currDirRegExp = /^\\.\\//,\n        op = Object.prototype,\n        ostring = op.toString,\n        hasOwn = op.hasOwnProperty,\n        ap = Array.prototype,\n        apsp = ap.splice,\n        isBrowser = !!(typeof window !== 'undefined' && typeof navigator !== 'undefined' && window.document),\n        isWebWorker = !isBrowser && typeof importScripts !== 'undefined',\n        //PS3 indicates loaded and complete, but need to wait for complete\n        //specifically. Sequence is 'loading', 'loaded', execution,\n        // then 'complete'. The UA check is unfortunate, but not sure how\n        //to feature test w/o causing perf issues.\n        readyRegExp = isBrowser && navigator.platform === 'PLAYSTATION 3' ?\n                      /^complete$/ : /^(complete|loaded)$/,\n        defContextName = '_',\n        //Oh the tragedy, detecting opera. See the usage of isOpera for reason.\n        isOpera = typeof opera !== 'undefined' && opera.toString() === '[object Opera]',\n        contexts = {},\n        cfg = {},\n        globalDefQueue = [],\n        useInteractive = false;\n\n    function isFunction(it) {\n        return ostring.call(it) === '[object Function]';\n    }\n\n    function isArray(it) {\n        return ostring.call(it) === '[object Array]';\n    }\n\n    /**\n     * Helper function for iterating over an array. If the func returns\n     * a true value, it will break out of the loop.\n     */\n    function each(ary, func) {\n        if (ary) {\n            var i;\n            for (i = 0; i < ary.length; i += 1) {\n                if (ary[i] && func(ary[i], i, ary)) {\n                    break;\n                }\n            }\n        }\n    }\n\n    /**\n     * Helper function for iterating over an array backwards. If the func\n     * returns a true value, it will break out of the loop.\n     */\n    function eachReverse(ary, func) {\n        if (ary) {\n            var i;\n            for (i = ary.length - 1; i > -1; i -= 1) {\n                if (ary[i] && func(ary[i], i, ary)) {\n                    break;\n                }\n            }\n        }\n    }\n\n    function hasProp(obj, prop) {\n        return hasOwn.call(obj, prop);\n    }\n\n    function getOwn(obj, prop) {\n        return hasProp(obj, prop) && obj[prop];\n    }\n\n    /**\n     * Cycles over properties in an object and calls a function for each\n     * property value. If the function returns a truthy value, then the\n     * iteration is stopped.\n     */\n    function eachProp(obj, func) {\n        var prop;\n        for (prop in obj) {\n            if (hasProp(obj, prop)) {\n                if (func(obj[prop], prop)) {\n                    break;\n                }\n            }\n        }\n    }\n\n    /**\n     * Simple function to mix in properties from source into target,\n     * but only if target does not already have a property of the same name.\n     */\n    function mixin(target, source, force, deepStringMixin) {\n        if (source) {\n            eachProp(source, function (value, prop) {\n                if (force || !hasProp(target, prop)) {\n                    if (deepStringMixin && typeof value === 'object' && value &&\n                        !isArray(value) && !isFunction(value) &&\n                        !(value instanceof RegExp)) {\n\n                        if (!target[prop]) {\n                            target[prop] = {};\n                        }\n                        mixin(target[prop], value, force, deepStringMixin);\n                    } else {\n                        target[prop] = value;\n                    }\n                }\n            });\n        }\n        return target;\n    }\n\n    //Similar to Function.prototype.bind, but the 'this' object is specified\n    //first, since it is easier to read/figure out what 'this' will be.\n    function bind(obj, fn) {\n        return function () {\n            return fn.apply(obj, arguments);\n        };\n    }\n\n    function scripts() {\n        return document.getElementsByTagName('script');\n    }\n\n    function defaultOnError(err) {\n        throw err;\n    }\n\n    //Allow getting a global that is expressed in\n    //dot notation, like 'a.b.c'.\n    function getGlobal(value) {\n        if (!value) {\n            return value;\n        }\n        var g = global;\n        each(value.split('.'), function (part) {\n            g = g[part];\n        });\n        return g;\n    }\n\n    /**\n     * Constructs an error with a pointer to an URL with more information.\n     * @param {String} id the error ID that maps to an ID on a web page.\n     * @param {String} message human readable error.\n     * @param {Error} [err] the original error, if there is one.\n     *\n     * @returns {Error}\n     */\n    function makeError(id, msg, err, requireModules) {\n        var e = new Error(msg + '\\nhttp://requirejs.org/docs/errors.html#' + id);\n        e.requireType = id;\n        e.requireModules = requireModules;\n        if (err) {\n            e.originalError = err;\n        }\n        return e;\n    }\n\n    if (typeof define !== 'undefined') {\n        //If a define is already in play via another AMD loader,\n        //do not overwrite.\n        return;\n    }\n\n    if (typeof requirejs !== 'undefined') {\n        if (isFunction(requirejs)) {\n            //Do not overwrite an existing requirejs instance.\n            return;\n        }\n        cfg = requirejs;\n        requirejs = undefined;\n    }\n\n    //Allow for a require config object\n    if (typeof require !== 'undefined' && !isFunction(require)) {\n        //assume it is a config object.\n        cfg = require;\n        require = undefined;\n    }\n\n    function newContext(contextName) {\n        var inCheckLoaded, Module, context, handlers,\n            checkLoadedTimeoutId,\n            config = {\n                //Defaults. Do not set a default for map\n                //config to speed up normalize(), which\n                //will run faster if there is no default.\n                waitSeconds: 7,\n                baseUrl: './',\n                paths: {},\n                bundles: {},\n                pkgs: {},\n                shim: {},\n                config: {}\n            },\n            registry = {},\n            //registry of just enabled modules, to speed\n            //cycle breaking code when lots of modules\n            //are registered, but not activated.\n            enabledRegistry = {},\n            undefEvents = {},\n            defQueue = [],\n            defined = {},\n            urlFetched = {},\n            bundlesMap = {},\n            requireCounter = 1,\n            unnormalizedCounter = 1;\n\n        /**\n         * Trims the . and .. from an array of path segments.\n         * It will keep a leading path segment if a .. will become\n         * the first path segment, to help with module name lookups,\n         * which act like paths, but can be remapped. But the end result,\n         * all paths that use this function should look normalized.\n         * NOTE: this method MODIFIES the input array.\n         * @param {Array} ary the array of path segments.\n         */\n        function trimDots(ary) {\n            var i, part, length = ary.length;\n            for (i = 0; i < length; i++) {\n                part = ary[i];\n                if (part === '.') {\n                    ary.splice(i, 1);\n                    i -= 1;\n                } else if (part === '..') {\n                    if (i === 1 && (ary[2] === '..' || ary[0] === '..')) {\n                        //End of the line. Keep at least one non-dot\n                        //path segment at the front so it can be mapped\n                        //correctly to disk. Otherwise, there is likely\n                        //no path mapping for a path starting with '..'.\n                        //This can still fail, but catches the most reasonable\n                        //uses of ..\n                        break;\n                    } else if (i > 0) {\n                        ary.splice(i - 1, 2);\n                        i -= 2;\n                    }\n                }\n            }\n        }\n\n        /**\n         * Given a relative module name, like ./something, normalize it to\n         * a real name that can be mapped to a path.\n         * @param {String} name the relative name\n         * @param {String} baseName a real name that the name arg is relative\n         * to.\n         * @param {Boolean} applyMap apply the map config to the value. Should\n         * only be done if this normalization is for a dependency ID.\n         * @returns {String} normalized name\n         */\n        function normalize(name, baseName, applyMap) {\n            var pkgMain, mapValue, nameParts, i, j, nameSegment, lastIndex,\n                foundMap, foundI, foundStarMap, starI,\n                baseParts = baseName && baseName.split('/'),\n                normalizedBaseParts = baseParts,\n                map = config.map,\n                starMap = map && map['*'];\n\n            //Adjust any relative paths.\n            if (name && name.charAt(0) === '.') {\n                //If have a base name, try to normalize against it,\n                //otherwise, assume it is a top-level require that will\n                //be relative to baseUrl in the end.\n                if (baseName) {\n                    //Convert baseName to array, and lop off the last part,\n                    //so that . matches that 'directory' and not name of the baseName's\n                    //module. For instance, baseName of 'one/two/three', maps to\n                    //'one/two/three.js', but we want the directory, 'one/two' for\n                    //this normalization.\n                    normalizedBaseParts = baseParts.slice(0, baseParts.length - 1);\n                    name = name.split('/');\n                    lastIndex = name.length - 1;\n\n                    // If wanting node ID compatibility, strip .js from end\n                    // of IDs. Have to do this here, and not in nameToUrl\n                    // because node allows either .js or non .js to map\n                    // to same file.\n                    if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {\n                        name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');\n                    }\n\n                    name = normalizedBaseParts.concat(name);\n                    trimDots(name);\n                    name = name.join('/');\n                } else if (name.indexOf('./') === 0) {\n                    // No baseName, so this is ID is resolved relative\n                    // to baseUrl, pull off the leading dot.\n                    name = name.substring(2);\n                }\n            }\n\n            //Apply map config if available.\n            if (applyMap && map && (baseParts || starMap)) {\n                nameParts = name.split('/');\n\n                outerLoop: for (i = nameParts.length; i > 0; i -= 1) {\n                    nameSegment = nameParts.slice(0, i).join('/');\n\n                    if (baseParts) {\n                        //Find the longest baseName segment match in the config.\n                        //So, do joins on the biggest to smallest lengths of baseParts.\n                        for (j = baseParts.length; j > 0; j -= 1) {\n                            mapValue = getOwn(map, baseParts.slice(0, j).join('/'));\n\n                            //baseName segment has config, find if it has one for\n                            //this name.\n                            if (mapValue) {\n                                mapValue = getOwn(mapValue, nameSegment);\n                                if (mapValue) {\n                                    //Match, update name to the new value.\n                                    foundMap = mapValue;\n                                    foundI = i;\n                                    break outerLoop;\n                                }\n                            }\n                        }\n                    }\n\n                    //Check for a star map match, but just hold on to it,\n                    //if there is a shorter segment match later in a matching\n                    //config, then favor over this star map.\n                    if (!foundStarMap && starMap && getOwn(starMap, nameSegment)) {\n                        foundStarMap = getOwn(starMap, nameSegment);\n                        starI = i;\n                    }\n                }\n\n                if (!foundMap && foundStarMap) {\n                    foundMap = foundStarMap;\n                    foundI = starI;\n                }\n\n                if (foundMap) {\n                    nameParts.splice(0, foundI, foundMap);\n                    name = nameParts.join('/');\n                }\n            }\n\n            // If the name points to a package's name, use\n            // the package main instead.\n            pkgMain = getOwn(config.pkgs, name);\n\n            return pkgMain ? pkgMain : name;\n        }\n\n        function removeScript(name) {\n            if (isBrowser) {\n                each(scripts(), function (scriptNode) {\n                    if (scriptNode.getAttribute('data-requiremodule') === name &&\n                            scriptNode.getAttribute('data-requirecontext') === context.contextName) {\n                        scriptNode.parentNode.removeChild(scriptNode);\n                        return true;\n                    }\n                });\n            }\n        }\n\n        function hasPathFallback(id) {\n            var pathConfig = getOwn(config.paths, id);\n            if (pathConfig && isArray(pathConfig) && pathConfig.length > 1) {\n                //Pop off the first array value, since it failed, and\n                //retry\n                pathConfig.shift();\n                context.require.undef(id);\n\n                //Custom require that does not do map translation, since\n                //ID is \"absolute\", already mapped/resolved.\n                context.makeRequire(null, {\n                    skipMap: true\n                })([id]);\n\n                return true;\n            }\n        }\n\n        //Turns a plugin!resource to [plugin, resource]\n        //with the plugin being undefined if the name\n        //did not have a plugin prefix.\n        function splitPrefix(name) {\n            var prefix,\n                index = name ? name.indexOf('!') : -1;\n            if (index > -1) {\n                prefix = name.substring(0, index);\n                name = name.substring(index + 1, name.length);\n            }\n            return [prefix, name];\n        }\n\n        /**\n         * Creates a module mapping that includes plugin prefix, module\n         * name, and path. If parentModuleMap is provided it will\n         * also normalize the name via require.normalize()\n         *\n         * @param {String} name the module name\n         * @param {String} [parentModuleMap] parent module map\n         * for the module name, used to resolve relative names.\n         * @param {Boolean} isNormalized: is the ID already normalized.\n         * This is true if this call is done for a define() module ID.\n         * @param {Boolean} applyMap: apply the map config to the ID.\n         * Should only be true if this map is for a dependency.\n         *\n         * @returns {Object}\n         */\n        function makeModuleMap(name, parentModuleMap, isNormalized, applyMap) {\n            var url, pluginModule, suffix, nameParts,\n                prefix = null,\n                parentName = parentModuleMap ? parentModuleMap.name : null,\n                originalName = name,\n                isDefine = true,\n                normalizedName = '';\n\n            //If no name, then it means it is a require call, generate an\n            //internal name.\n            if (!name) {\n                isDefine = false;\n                name = '_@r' + (requireCounter += 1);\n            }\n\n            nameParts = splitPrefix(name);\n            prefix = nameParts[0];\n            name = nameParts[1];\n\n            if (prefix) {\n                prefix = normalize(prefix, parentName, applyMap);\n                pluginModule = getOwn(defined, prefix);\n            }\n\n            //Account for relative paths if there is a base name.\n            if (name) {\n                if (prefix) {\n                    if (pluginModule && pluginModule.normalize) {\n                        //Plugin is loaded, use its normalize method.\n                        normalizedName = pluginModule.normalize(name, function (name) {\n                            return normalize(name, parentName, applyMap);\n                        });\n                    } else {\n                        normalizedName = normalize(name, parentName, applyMap);\n                    }\n                } else {\n                    //A regular module.\n                    normalizedName = normalize(name, parentName, applyMap);\n\n                    //Normalized name may be a plugin ID due to map config\n                    //application in normalize. The map config values must\n                    //already be normalized, so do not need to redo that part.\n                    nameParts = splitPrefix(normalizedName);\n                    prefix = nameParts[0];\n                    normalizedName = nameParts[1];\n                    isNormalized = true;\n\n                    url = context.nameToUrl(normalizedName);\n                }\n            }\n\n            //If the id is a plugin id that cannot be determined if it needs\n            //normalization, stamp it with a unique ID so two matching relative\n            //ids that may conflict can be separate.\n            suffix = prefix && !pluginModule && !isNormalized ?\n                     '_unnormalized' + (unnormalizedCounter += 1) :\n                     '';\n\n            return {\n                prefix: prefix,\n                name: normalizedName,\n                parentMap: parentModuleMap,\n                unnormalized: !!suffix,\n                url: url,\n                originalName: originalName,\n                isDefine: isDefine,\n                id: (prefix ?\n                        prefix + '!' + normalizedName :\n                        normalizedName) + suffix\n            };\n        }\n\n        function getModule(depMap) {\n            var id = depMap.id,\n                mod = getOwn(registry, id);\n\n            if (!mod) {\n                mod = registry[id] = new context.Module(depMap);\n            }\n\n            return mod;\n        }\n\n        function on(depMap, name, fn) {\n            var id = depMap.id,\n                mod = getOwn(registry, id);\n\n            if (hasProp(defined, id) &&\n                    (!mod || mod.defineEmitComplete)) {\n                if (name === 'defined') {\n                    fn(defined[id]);\n                }\n            } else {\n                mod = getModule(depMap);\n                if (mod.error && name === 'error') {\n                    fn(mod.error);\n                } else {\n                    mod.on(name, fn);\n                }\n            }\n        }\n\n        function onError(err, errback) {\n            var ids = err.requireModules,\n                notified = false;\n\n            if (errback) {\n                errback(err);\n            } else {\n                each(ids, function (id) {\n                    var mod = getOwn(registry, id);\n                    if (mod) {\n                        //Set error on module, so it skips timeout checks.\n                        mod.error = err;\n                        if (mod.events.error) {\n                            notified = true;\n                            mod.emit('error', err);\n                        }\n                    }\n                });\n\n                if (!notified) {\n                    req.onError(err);\n                }\n            }\n        }\n\n        /**\n         * Internal method to transfer globalQueue items to this context's\n         * defQueue.\n         */\n        function takeGlobalQueue() {\n            //Push all the globalDefQueue items into the context's defQueue\n            if (globalDefQueue.length) {\n                //Array splice in the values since the context code has a\n                //local var ref to defQueue, so cannot just reassign the one\n                //on context.\n                apsp.apply(defQueue,\n                           [defQueue.length, 0].concat(globalDefQueue));\n                globalDefQueue = [];\n            }\n        }\n\n        handlers = {\n            'require': function (mod) {\n                if (mod.require) {\n                    return mod.require;\n                } else {\n                    return (mod.require = context.makeRequire(mod.map));\n                }\n            },\n            'exports': function (mod) {\n                mod.usingExports = true;\n                if (mod.map.isDefine) {\n                    if (mod.exports) {\n                        return (defined[mod.map.id] = mod.exports);\n                    } else {\n                        return (mod.exports = defined[mod.map.id] = {});\n                    }\n                }\n            },\n            'module': function (mod) {\n                if (mod.module) {\n                    return mod.module;\n                } else {\n                    return (mod.module = {\n                        id: mod.map.id,\n                        uri: mod.map.url,\n                        config: function () {\n                            return  getOwn(config.config, mod.map.id) || {};\n                        },\n                        exports: mod.exports || (mod.exports = {})\n                    });\n                }\n            }\n        };\n\n        function cleanRegistry(id) {\n            //Clean up machinery used for waiting modules.\n            delete registry[id];\n            delete enabledRegistry[id];\n        }\n\n        function breakCycle(mod, traced, processed) {\n            var id = mod.map.id;\n\n            if (mod.error) {\n                mod.emit('error', mod.error);\n            } else {\n                traced[id] = true;\n                each(mod.depMaps, function (depMap, i) {\n                    var depId = depMap.id,\n                        dep = getOwn(registry, depId);\n\n                    //Only force things that have not completed\n                    //being defined, so still in the registry,\n                    //and only if it has not been matched up\n                    //in the module already.\n                    if (dep && !mod.depMatched[i] && !processed[depId]) {\n                        if (getOwn(traced, depId)) {\n                            mod.defineDep(i, defined[depId]);\n                            mod.check(); //pass false?\n                        } else {\n                            breakCycle(dep, traced, processed);\n                        }\n                    }\n                });\n                processed[id] = true;\n            }\n        }\n\n        function checkLoaded() {\n            var err, usingPathFallback,\n                waitInterval = config.waitSeconds * 1000,\n                //It is possible to disable the wait interval by using waitSeconds of 0.\n                expired = waitInterval && (context.startTime + waitInterval) < new Date().getTime(),\n                noLoads = [],\n                reqCalls = [],\n                stillLoading = false,\n                needCycleCheck = true;\n\n            //Do not bother if this call was a result of a cycle break.\n            if (inCheckLoaded) {\n                return;\n            }\n\n            inCheckLoaded = true;\n\n            //Figure out the state of all the modules.\n            eachProp(enabledRegistry, function (mod) {\n                var map = mod.map,\n                    modId = map.id;\n\n                //Skip things that are not enabled or in error state.\n                if (!mod.enabled) {\n                    return;\n                }\n\n                if (!map.isDefine) {\n                    reqCalls.push(mod);\n                }\n\n                if (!mod.error) {\n                    //If the module should be executed, and it has not\n                    //been inited and time is up, remember it.\n                    if (!mod.inited && expired) {\n                        if (hasPathFallback(modId)) {\n                            usingPathFallback = true;\n                            stillLoading = true;\n                        } else {\n                            noLoads.push(modId);\n                            removeScript(modId);\n                        }\n                    } else if (!mod.inited && mod.fetched && map.isDefine) {\n                        stillLoading = true;\n                        if (!map.prefix) {\n                            //No reason to keep looking for unfinished\n                            //loading. If the only stillLoading is a\n                            //plugin resource though, keep going,\n                            //because it may be that a plugin resource\n                            //is waiting on a non-plugin cycle.\n                            return (needCycleCheck = false);\n                        }\n                    }\n                }\n            });\n\n            if (expired && noLoads.length) {\n                //If wait time expired, throw error of unloaded modules.\n                err = makeError('timeout', 'Load timeout for modules: ' + noLoads, null, noLoads);\n                err.contextName = context.contextName;\n                return onError(err);\n            }\n\n            //Not expired, check for a cycle.\n            if (needCycleCheck) {\n                each(reqCalls, function (mod) {\n                    breakCycle(mod, {}, {});\n                });\n            }\n\n            //If still waiting on loads, and the waiting load is something\n            //other than a plugin resource, or there are still outstanding\n            //scripts, then just try back later.\n            if ((!expired || usingPathFallback) && stillLoading) {\n                //Something is still waiting to load. Wait for it, but only\n                //if a timeout is not already in effect.\n                if ((isBrowser || isWebWorker) && !checkLoadedTimeoutId) {\n                    checkLoadedTimeoutId = setTimeout(function () {\n                        checkLoadedTimeoutId = 0;\n                        checkLoaded();\n                    }, 50);\n                }\n            }\n\n            inCheckLoaded = false;\n        }\n\n        Module = function (map) {\n            this.events = getOwn(undefEvents, map.id) || {};\n            this.map = map;\n            this.shim = getOwn(config.shim, map.id);\n            this.depExports = [];\n            this.depMaps = [];\n            this.depMatched = [];\n            this.pluginMaps = {};\n            this.depCount = 0;\n\n            /* this.exports this.factory\n               this.depMaps = [],\n               this.enabled, this.fetched\n            */\n        };\n\n        Module.prototype = {\n            init: function (depMaps, factory, errback, options) {\n                options = options || {};\n\n                //Do not do more inits if already done. Can happen if there\n                //are multiple define calls for the same module. That is not\n                //a normal, common case, but it is also not unexpected.\n                if (this.inited) {\n                    return;\n                }\n\n                this.factory = factory;\n\n                if (errback) {\n                    //Register for errors on this module.\n                    this.on('error', errback);\n                } else if (this.events.error) {\n                    //If no errback already, but there are error listeners\n                    //on this module, set up an errback to pass to the deps.\n                    errback = bind(this, function (err) {\n                        this.emit('error', err);\n                    });\n                }\n\n                //Do a copy of the dependency array, so that\n                //source inputs are not modified. For example\n                //\"shim\" deps are passed in here directly, and\n                //doing a direct modification of the depMaps array\n                //would affect that config.\n                this.depMaps = depMaps && depMaps.slice(0);\n\n                this.errback = errback;\n\n                //Indicate this module has be initialized\n                this.inited = true;\n\n                this.ignore = options.ignore;\n\n                //Could have option to init this module in enabled mode,\n                //or could have been previously marked as enabled. However,\n                //the dependencies are not known until init is called. So\n                //if enabled previously, now trigger dependencies as enabled.\n                if (options.enabled || this.enabled) {\n                    //Enable this module and dependencies.\n                    //Will call this.check()\n                    this.enable();\n                } else {\n                    this.check();\n                }\n            },\n\n            defineDep: function (i, depExports) {\n                //Because of cycles, defined callback for a given\n                //export can be called more than once.\n                if (!this.depMatched[i]) {\n                    this.depMatched[i] = true;\n                    this.depCount -= 1;\n                    this.depExports[i] = depExports;\n                }\n            },\n\n            fetch: function () {\n                if (this.fetched) {\n                    return;\n                }\n                this.fetched = true;\n\n                context.startTime = (new Date()).getTime();\n\n                var map = this.map;\n\n                //If the manager is for a plugin managed resource,\n                //ask the plugin to load it now.\n                if (this.shim) {\n                    context.makeRequire(this.map, {\n                        enableBuildCallback: true\n                    })(this.shim.deps || [], bind(this, function () {\n                        return map.prefix ? this.callPlugin() : this.load();\n                    }));\n                } else {\n                    //Regular dependency.\n                    return map.prefix ? this.callPlugin() : this.load();\n                }\n            },\n\n            load: function () {\n                var url = this.map.url;\n\n                //Regular dependency.\n                if (!urlFetched[url]) {\n                    urlFetched[url] = true;\n                    context.load(this.map.id, url);\n                }\n            },\n\n            /**\n             * Checks if the module is ready to define itself, and if so,\n             * define it.\n             */\n            check: function () {\n                if (!this.enabled || this.enabling) {\n                    return;\n                }\n\n                var err, cjsModule,\n                    id = this.map.id,\n                    depExports = this.depExports,\n                    exports = this.exports,\n                    factory = this.factory;\n\n                if (!this.inited) {\n                    this.fetch();\n                } else if (this.error) {\n                    this.emit('error', this.error);\n                } else if (!this.defining) {\n                    //The factory could trigger another require call\n                    //that would result in checking this module to\n                    //define itself again. If already in the process\n                    //of doing that, skip this work.\n                    this.defining = true;\n\n                    if (this.depCount < 1 && !this.defined) {\n                        if (isFunction(factory)) {\n                            //If there is an error listener, favor passing\n                            //to that instead of throwing an error. However,\n                            //only do it for define()'d  modules. require\n                            //errbacks should not be called for failures in\n                            //their callbacks (#699). However if a global\n                            //onError is set, use that.\n                            if ((this.events.error && this.map.isDefine) ||\n                                req.onError !== defaultOnError) {\n                                try {\n                                    exports = context.execCb(id, factory, depExports, exports);\n                                } catch (e) {\n                                    err = e;\n                                }\n                            } else {\n                                exports = context.execCb(id, factory, depExports, exports);\n                            }\n\n                            // Favor return value over exports. If node/cjs in play,\n                            // then will not have a return value anyway. Favor\n                            // module.exports assignment over exports object.\n                            if (this.map.isDefine && exports === undefined) {\n                                cjsModule = this.module;\n                                if (cjsModule) {\n                                    exports = cjsModule.exports;\n                                } else if (this.usingExports) {\n                                    //exports already set the defined value.\n                                    exports = this.exports;\n                                }\n                            }\n\n                            if (err) {\n                                err.requireMap = this.map;\n                                err.requireModules = this.map.isDefine ? [this.map.id] : null;\n                                err.requireType = this.map.isDefine ? 'define' : 'require';\n                                return onError((this.error = err));\n                            }\n\n                        } else {\n                            //Just a literal value\n                            exports = factory;\n                        }\n\n                        this.exports = exports;\n\n                        if (this.map.isDefine && !this.ignore) {\n                            defined[id] = exports;\n\n                            if (req.onResourceLoad) {\n                                req.onResourceLoad(context, this.map, this.depMaps);\n                            }\n                        }\n\n                        //Clean up\n                        cleanRegistry(id);\n\n                        this.defined = true;\n                    }\n\n                    //Finished the define stage. Allow calling check again\n                    //to allow define notifications below in the case of a\n                    //cycle.\n                    this.defining = false;\n\n                    if (this.defined && !this.defineEmitted) {\n                        this.defineEmitted = true;\n                        this.emit('defined', this.exports);\n                        this.defineEmitComplete = true;\n                    }\n\n                }\n            },\n\n            callPlugin: function () {\n                var map = this.map,\n                    id = map.id,\n                    //Map already normalized the prefix.\n                    pluginMap = makeModuleMap(map.prefix);\n\n                //Mark this as a dependency for this plugin, so it\n                //can be traced for cycles.\n                this.depMaps.push(pluginMap);\n\n                on(pluginMap, 'defined', bind(this, function (plugin) {\n                    var load, normalizedMap, normalizedMod,\n                        bundleId = getOwn(bundlesMap, this.map.id),\n                        name = this.map.name,\n                        parentName = this.map.parentMap ? this.map.parentMap.name : null,\n                        localRequire = context.makeRequire(map.parentMap, {\n                            enableBuildCallback: true\n                        });\n\n                    //If current map is not normalized, wait for that\n                    //normalized name to load instead of continuing.\n                    if (this.map.unnormalized) {\n                        //Normalize the ID if the plugin allows it.\n                        if (plugin.normalize) {\n                            name = plugin.normalize(name, function (name) {\n                                return normalize(name, parentName, true);\n                            }) || '';\n                        }\n\n                        //prefix and name should already be normalized, no need\n                        //for applying map config again either.\n                        normalizedMap = makeModuleMap(map.prefix + '!' + name,\n                                                      this.map.parentMap);\n                        on(normalizedMap,\n                            'defined', bind(this, function (value) {\n                                this.init([], function () { return value; }, null, {\n                                    enabled: true,\n                                    ignore: true\n                                });\n                            }));\n\n                        normalizedMod = getOwn(registry, normalizedMap.id);\n                        if (normalizedMod) {\n                            //Mark this as a dependency for this plugin, so it\n                            //can be traced for cycles.\n                            this.depMaps.push(normalizedMap);\n\n                            if (this.events.error) {\n                                normalizedMod.on('error', bind(this, function (err) {\n                                    this.emit('error', err);\n                                }));\n                            }\n                            normalizedMod.enable();\n                        }\n\n                        return;\n                    }\n\n                    //If a paths config, then just load that file instead to\n                    //resolve the plugin, as it is built into that paths layer.\n                    if (bundleId) {\n                        this.map.url = context.nameToUrl(bundleId);\n                        this.load();\n                        return;\n                    }\n\n                    load = bind(this, function (value) {\n                        this.init([], function () { return value; }, null, {\n                            enabled: true\n                        });\n                    });\n\n                    load.error = bind(this, function (err) {\n                        this.inited = true;\n                        this.error = err;\n                        err.requireModules = [id];\n\n                        //Remove temp unnormalized modules for this module,\n                        //since they will never be resolved otherwise now.\n                        eachProp(registry, function (mod) {\n                            if (mod.map.id.indexOf(id + '_unnormalized') === 0) {\n                                cleanRegistry(mod.map.id);\n                            }\n                        });\n\n                        onError(err);\n                    });\n\n                    //Allow plugins to load other code without having to know the\n                    //context or how to 'complete' the load.\n                    load.fromText = bind(this, function (text, textAlt) {\n                        /*jslint evil: true */\n                        var moduleName = map.name,\n                            moduleMap = makeModuleMap(moduleName),\n                            hasInteractive = useInteractive;\n\n                        //As of 2.1.0, support just passing the text, to reinforce\n                        //fromText only being called once per resource. Still\n                        //support old style of passing moduleName but discard\n                        //that moduleName in favor of the internal ref.\n                        if (textAlt) {\n                            text = textAlt;\n                        }\n\n                        //Turn off interactive script matching for IE for any define\n                        //calls in the text, then turn it back on at the end.\n                        if (hasInteractive) {\n                            useInteractive = false;\n                        }\n\n                        //Prime the system by creating a module instance for\n                        //it.\n                        getModule(moduleMap);\n\n                        //Transfer any config to this other module.\n                        if (hasProp(config.config, id)) {\n                            config.config[moduleName] = config.config[id];\n                        }\n\n                        try {\n                            req.exec(text);\n                        } catch (e) {\n                            return onError(makeError('fromtexteval',\n                                             'fromText eval for ' + id +\n                                            ' failed: ' + e,\n                                             e,\n                                             [id]));\n                        }\n\n                        if (hasInteractive) {\n                            useInteractive = true;\n                        }\n\n                        //Mark this as a dependency for the plugin\n                        //resource\n                        this.depMaps.push(moduleMap);\n\n                        //Support anonymous modules.\n                        context.completeLoad(moduleName);\n\n                        //Bind the value of that module to the value for this\n                        //resource ID.\n                        localRequire([moduleName], load);\n                    });\n\n                    //Use parentName here since the plugin's name is not reliable,\n                    //could be some weird string with no path that actually wants to\n                    //reference the parentName's path.\n                    plugin.load(map.name, localRequire, load, config);\n                }));\n\n                context.enable(pluginMap, this);\n                this.pluginMaps[pluginMap.id] = pluginMap;\n            },\n\n            enable: function () {\n                enabledRegistry[this.map.id] = this;\n                this.enabled = true;\n\n                //Set flag mentioning that the module is enabling,\n                //so that immediate calls to the defined callbacks\n                //for dependencies do not trigger inadvertent load\n                //with the depCount still being zero.\n                this.enabling = true;\n\n                //Enable each dependency\n                each(this.depMaps, bind(this, function (depMap, i) {\n                    var id, mod, handler;\n\n                    if (typeof depMap === 'string') {\n                        //Dependency needs to be converted to a depMap\n                        //and wired up to this module.\n                        depMap = makeModuleMap(depMap,\n                                               (this.map.isDefine ? this.map : this.map.parentMap),\n                                               false,\n                                               !this.skipMap);\n                        this.depMaps[i] = depMap;\n\n                        handler = getOwn(handlers, depMap.id);\n\n                        if (handler) {\n                            this.depExports[i] = handler(this);\n                            return;\n                        }\n\n                        this.depCount += 1;\n\n                        on(depMap, 'defined', bind(this, function (depExports) {\n                            this.defineDep(i, depExports);\n                            this.check();\n                        }));\n\n                        if (this.errback) {\n                            on(depMap, 'error', bind(this, this.errback));\n                        }\n                    }\n\n                    id = depMap.id;\n                    mod = registry[id];\n\n                    //Skip special modules like 'require', 'exports', 'module'\n                    //Also, don't call enable if it is already enabled,\n                    //important in circular dependency cases.\n                    if (!hasProp(handlers, id) && mod && !mod.enabled) {\n                        context.enable(depMap, this);\n                    }\n                }));\n\n                //Enable each plugin that is used in\n                //a dependency\n                eachProp(this.pluginMaps, bind(this, function (pluginMap) {\n                    var mod = getOwn(registry, pluginMap.id);\n                    if (mod && !mod.enabled) {\n                        context.enable(pluginMap, this);\n                    }\n                }));\n\n                this.enabling = false;\n\n                this.check();\n            },\n\n            on: function (name, cb) {\n                var cbs = this.events[name];\n                if (!cbs) {\n                    cbs = this.events[name] = [];\n                }\n                cbs.push(cb);\n            },\n\n            emit: function (name, evt) {\n                each(this.events[name], function (cb) {\n                    cb(evt);\n                });\n                if (name === 'error') {\n                    //Now that the error handler was triggered, remove\n                    //the listeners, since this broken Module instance\n                    //can stay around for a while in the registry.\n                    delete this.events[name];\n                }\n            }\n        };\n\n        function callGetModule(args) {\n            //Skip modules already defined.\n            if (!hasProp(defined, args[0])) {\n                getModule(makeModuleMap(args[0], null, true)).init(args[1], args[2]);\n            }\n        }\n\n        function removeListener(node, func, name, ieName) {\n            //Favor detachEvent because of IE9\n            //issue, see attachEvent/addEventListener comment elsewhere\n            //in this file.\n            if (node.detachEvent && !isOpera) {\n                //Probably IE. If not it will throw an error, which will be\n                //useful to know.\n                if (ieName) {\n                    node.detachEvent(ieName, func);\n                }\n            } else {\n                node.removeEventListener(name, func, false);\n            }\n        }\n\n        /**\n         * Given an event from a script node, get the requirejs info from it,\n         * and then removes the event listeners on the node.\n         * @param {Event} evt\n         * @returns {Object}\n         */\n        function getScriptData(evt) {\n            //Using currentTarget instead of target for Firefox 2.0's sake. Not\n            //all old browsers will be supported, but this one was easy enough\n            //to support and still makes sense.\n            var node = evt.currentTarget || evt.srcElement;\n\n            //Remove the listeners once here.\n            removeListener(node, context.onScriptLoad, 'load', 'onreadystatechange');\n            removeListener(node, context.onScriptError, 'error');\n\n            return {\n                node: node,\n                id: node && node.getAttribute('data-requiremodule')\n            };\n        }\n\n        function intakeDefines() {\n            var args;\n\n            //Any defined modules in the global queue, intake them now.\n            takeGlobalQueue();\n\n            //Make sure any remaining defQueue items get properly processed.\n            while (defQueue.length) {\n                args = defQueue.shift();\n                if (args[0] === null) {\n                    return onError(makeError('mismatch', 'Mismatched anonymous define() module: ' + args[args.length - 1]));\n                } else {\n                    //args are id, deps, factory. Should be normalized by the\n                    //define() function.\n                    callGetModule(args);\n                }\n            }\n        }\n\n        context = {\n            config: config,\n            contextName: contextName,\n            registry: registry,\n            defined: defined,\n            urlFetched: urlFetched,\n            defQueue: defQueue,\n            Module: Module,\n            makeModuleMap: makeModuleMap,\n            nextTick: req.nextTick,\n            onError: onError,\n\n            /**\n             * Set a configuration for the context.\n             * @param {Object} cfg config object to integrate.\n             */\n            configure: function (cfg) {\n                //Make sure the baseUrl ends in a slash.\n                if (cfg.baseUrl) {\n                    if (cfg.baseUrl.charAt(cfg.baseUrl.length - 1) !== '/') {\n                        cfg.baseUrl += '/';\n                    }\n                }\n\n                //Save off the paths since they require special processing,\n                //they are additive.\n                var shim = config.shim,\n                    objs = {\n                        paths: true,\n                        bundles: true,\n                        config: true,\n                        map: true\n                    };\n\n                eachProp(cfg, function (value, prop) {\n                    if (objs[prop]) {\n                        if (!config[prop]) {\n                            config[prop] = {};\n                        }\n                        mixin(config[prop], value, true, true);\n                    } else {\n                        config[prop] = value;\n                    }\n                });\n\n                //Reverse map the bundles\n                if (cfg.bundles) {\n                    eachProp(cfg.bundles, function (value, prop) {\n                        each(value, function (v) {\n                            if (v !== prop) {\n                                bundlesMap[v] = prop;\n                            }\n                        });\n                    });\n                }\n\n                //Merge shim\n                if (cfg.shim) {\n                    eachProp(cfg.shim, function (value, id) {\n                        //Normalize the structure\n                        if (isArray(value)) {\n                            value = {\n                                deps: value\n                            };\n                        }\n                        if ((value.exports || value.init) && !value.exportsFn) {\n                            value.exportsFn = context.makeShimExports(value);\n                        }\n                        shim[id] = value;\n                    });\n                    config.shim = shim;\n                }\n\n                //Adjust packages if necessary.\n                if (cfg.packages) {\n                    each(cfg.packages, function (pkgObj) {\n                        var location, name;\n\n                        pkgObj = typeof pkgObj === 'string' ? { name: pkgObj } : pkgObj;\n\n                        name = pkgObj.name;\n                        location = pkgObj.location;\n                        if (location) {\n                            config.paths[name] = pkgObj.location;\n                        }\n\n                        //Save pointer to main module ID for pkg name.\n                        //Remove leading dot in main, so main paths are normalized,\n                        //and remove any trailing .js, since different package\n                        //envs have different conventions: some use a module name,\n                        //some use a file name.\n                        config.pkgs[name] = pkgObj.name + '/' + (pkgObj.main || 'main')\n                                     .replace(currDirRegExp, '')\n                                     .replace(jsSuffixRegExp, '');\n                    });\n                }\n\n                //If there are any \"waiting to execute\" modules in the registry,\n                //update the maps for them, since their info, like URLs to load,\n                //may have changed.\n                eachProp(registry, function (mod, id) {\n                    //If module already has init called, since it is too\n                    //late to modify them, and ignore unnormalized ones\n                    //since they are transient.\n                    if (!mod.inited && !mod.map.unnormalized) {\n                        mod.map = makeModuleMap(id);\n                    }\n                });\n\n                //If a deps array or a config callback is specified, then call\n                //require with those args. This is useful when require is defined as a\n                //config object before require.js is loaded.\n                if (cfg.deps || cfg.callback) {\n                    context.require(cfg.deps || [], cfg.callback);\n                }\n            },\n\n            makeShimExports: function (value) {\n                function fn() {\n                    var ret;\n                    if (value.init) {\n                        ret = value.init.apply(global, arguments);\n                    }\n                    return ret || (value.exports && getGlobal(value.exports));\n                }\n                return fn;\n            },\n\n            makeRequire: function (relMap, options) {\n                options = options || {};\n\n                function localRequire(deps, callback, errback) {\n                    var id, map, requireMod;\n\n                    if (options.enableBuildCallback && callback && isFunction(callback)) {\n                        callback.__requireJsBuild = true;\n                    }\n\n                    if (typeof deps === 'string') {\n                        if (isFunction(callback)) {\n                            //Invalid call\n                            return onError(makeError('requireargs', 'Invalid require call'), errback);\n                        }\n\n                        //If require|exports|module are requested, get the\n                        //value for them from the special handlers. Caveat:\n                        //this only works while module is being defined.\n                        if (relMap && hasProp(handlers, deps)) {\n                            return handlers[deps](registry[relMap.id]);\n                        }\n\n                        //Synchronous access to one module. If require.get is\n                        //available (as in the Node adapter), prefer that.\n                        if (req.get) {\n                            return req.get(context, deps, relMap, localRequire);\n                        }\n\n                        //Normalize module name, if it contains . or ..\n                        map = makeModuleMap(deps, relMap, false, true);\n                        id = map.id;\n\n                        if (!hasProp(defined, id)) {\n                            return onError(makeError('notloaded', 'Module name \"' +\n                                        id +\n                                        '\" has not been loaded yet for context: ' +\n                                        contextName +\n                                        (relMap ? '' : '. Use require([])')));\n                        }\n                        return defined[id];\n                    }\n\n                    //Grab defines waiting in the global queue.\n                    intakeDefines();\n\n                    //Mark all the dependencies as needing to be loaded.\n                    context.nextTick(function () {\n                        //Some defines could have been added since the\n                        //require call, collect them.\n                        intakeDefines();\n\n                        requireMod = getModule(makeModuleMap(null, relMap));\n\n                        //Store if map config should be applied to this require\n                        //call for dependencies.\n                        requireMod.skipMap = options.skipMap;\n\n                        requireMod.init(deps, callback, errback, {\n                            enabled: true\n                        });\n\n                        checkLoaded();\n                    });\n\n                    return localRequire;\n                }\n\n                mixin(localRequire, {\n                    isBrowser: isBrowser,\n\n                    /**\n                     * Converts a module name + .extension into an URL path.\n                     * *Requires* the use of a module name. It does not support using\n                     * plain URLs like nameToUrl.\n                     */\n                    toUrl: function (moduleNamePlusExt) {\n                        var ext,\n                            index = moduleNamePlusExt.lastIndexOf('.'),\n                            segment = moduleNamePlusExt.split('/')[0],\n                            isRelative = segment === '.' || segment === '..';\n\n                        //Have a file extension alias, and it is not the\n                        //dots from a relative path.\n                        if (index !== -1 && (!isRelative || index > 1)) {\n                            ext = moduleNamePlusExt.substring(index, moduleNamePlusExt.length);\n                            moduleNamePlusExt = moduleNamePlusExt.substring(0, index);\n                        }\n\n                        return context.nameToUrl(normalize(moduleNamePlusExt,\n                                                relMap && relMap.id, true), ext,  true);\n                    },\n\n                    defined: function (id) {\n                        return hasProp(defined, makeModuleMap(id, relMap, false, true).id);\n                    },\n\n                    specified: function (id) {\n                        id = makeModuleMap(id, relMap, false, true).id;\n                        return hasProp(defined, id) || hasProp(registry, id);\n                    }\n                });\n\n                //Only allow undef on top level require calls\n                if (!relMap) {\n                    localRequire.undef = function (id) {\n                        //Bind any waiting define() calls to this context,\n                        //fix for #408\n                        takeGlobalQueue();\n\n                        var map = makeModuleMap(id, relMap, true),\n                            mod = getOwn(registry, id);\n\n                        removeScript(id);\n\n                        delete defined[id];\n                        delete urlFetched[map.url];\n                        delete undefEvents[id];\n\n                        //Clean queued defines too. Go backwards\n                        //in array so that the splices do not\n                        //mess up the iteration.\n                        eachReverse(defQueue, function(args, i) {\n                            if(args[0] === id) {\n                                defQueue.splice(i, 1);\n                            }\n                        });\n\n                        if (mod) {\n                            //Hold on to listeners in case the\n                            //module will be attempted to be reloaded\n                            //using a different config.\n                            if (mod.events.defined) {\n                                undefEvents[id] = mod.events;\n                            }\n\n                            cleanRegistry(id);\n                        }\n                    };\n                }\n\n                return localRequire;\n            },\n\n            /**\n             * Called to enable a module if it is still in the registry\n             * awaiting enablement. A second arg, parent, the parent module,\n             * is passed in for context, when this method is overridden by\n             * the optimizer. Not shown here to keep code compact.\n             */\n            enable: function (depMap) {\n                var mod = getOwn(registry, depMap.id);\n                if (mod) {\n                    getModule(depMap).enable();\n                }\n            },\n\n            /**\n             * Internal method used by environment adapters to complete a load event.\n             * A load event could be a script load or just a load pass from a synchronous\n             * load call.\n             * @param {String} moduleName the name of the module to potentially complete.\n             */\n            completeLoad: function (moduleName) {\n                var found, args, mod,\n                    shim = getOwn(config.shim, moduleName) || {},\n                    shExports = shim.exports;\n\n                takeGlobalQueue();\n\n                while (defQueue.length) {\n                    args = defQueue.shift();\n                    if (args[0] === null) {\n                        args[0] = moduleName;\n                        //If already found an anonymous module and bound it\n                        //to this name, then this is some other anon module\n                        //waiting for its completeLoad to fire.\n                        if (found) {\n                            break;\n                        }\n                        found = true;\n                    } else if (args[0] === moduleName) {\n                        //Found matching define call for this script!\n                        found = true;\n                    }\n\n                    callGetModule(args);\n                }\n\n                //Do this after the cycle of callGetModule in case the result\n                //of those calls/init calls changes the registry.\n                mod = getOwn(registry, moduleName);\n\n                if (!found && !hasProp(defined, moduleName) && mod && !mod.inited) {\n                    if (config.enforceDefine && (!shExports || !getGlobal(shExports))) {\n                        if (hasPathFallback(moduleName)) {\n                            return;\n                        } else {\n                            return onError(makeError('nodefine',\n                                             'No define call for ' + moduleName,\n                                             null,\n                                             [moduleName]));\n                        }\n                    } else {\n                        //A script that does not call define(), so just simulate\n                        //the call for it.\n                        callGetModule([moduleName, (shim.deps || []), shim.exportsFn]);\n                    }\n                }\n\n                checkLoaded();\n            },\n\n            /**\n             * Converts a module name to a file path. Supports cases where\n             * moduleName may actually be just an URL.\n             * Note that it **does not** call normalize on the moduleName,\n             * it is assumed to have already been normalized. This is an\n             * internal API, not a public one. Use toUrl for the public API.\n             */\n            nameToUrl: function (moduleName, ext, skipExt) {\n                var paths, syms, i, parentModule, url,\n                    parentPath, bundleId,\n                    pkgMain = getOwn(config.pkgs, moduleName);\n\n                if (pkgMain) {\n                    moduleName = pkgMain;\n                }\n\n                bundleId = getOwn(bundlesMap, moduleName);\n\n                if (bundleId) {\n                    return context.nameToUrl(bundleId, ext, skipExt);\n                }\n\n                //If a colon is in the URL, it indicates a protocol is used and it is just\n                //an URL to a file, or if it starts with a slash, contains a query arg (i.e. ?)\n                //or ends with .js, then assume the user meant to use an url and not a module id.\n                //The slash is important for protocol-less URLs as well as full paths.\n                if (req.jsExtRegExp.test(moduleName)) {\n                    //Just a plain path, not module name lookup, so just return it.\n                    //Add extension if it is included. This is a bit wonky, only non-.js things pass\n                    //an extension, this method probably needs to be reworked.\n                    url = moduleName + (ext || '');\n                } else {\n                    //A module that needs to be converted to a path.\n                    paths = config.paths;\n\n                    syms = moduleName.split('/');\n                    //For each module name segment, see if there is a path\n                    //registered for it. Start with most specific name\n                    //and work up from it.\n                    for (i = syms.length; i > 0; i -= 1) {\n                        parentModule = syms.slice(0, i).join('/');\n\n                        parentPath = getOwn(paths, parentModule);\n                        if (parentPath) {\n                            //If an array, it means there are a few choices,\n                            //Choose the one that is desired\n                            if (isArray(parentPath)) {\n                                parentPath = parentPath[0];\n                            }\n                            syms.splice(0, i, parentPath);\n                            break;\n                        }\n                    }\n\n                    //Join the path parts together, then figure out if baseUrl is needed.\n                    url = syms.join('/');\n                    url += (ext || (/^data\\:|\\?/.test(url) || skipExt ? '' : '.js'));\n                    url = (url.charAt(0) === '/' || url.match(/^[\\w\\+\\.\\-]+:/) ? '' : config.baseUrl) + url;\n                }\n\n                return config.urlArgs ? url +\n                                        ((url.indexOf('?') === -1 ? '?' : '&') +\n                                         config.urlArgs) : url;\n            },\n\n            //Delegates to req.load. Broken out as a separate function to\n            //allow overriding in the optimizer.\n            load: function (id, url) {\n                req.load(context, id, url);\n            },\n\n            /**\n             * Executes a module callback function. Broken out as a separate function\n             * solely to allow the build system to sequence the files in the built\n             * layer in the right sequence.\n             *\n             * @private\n             */\n            execCb: function (name, callback, args, exports) {\n                return callback.apply(exports, args);\n            },\n\n            /**\n             * callback for script loads, used to check status of loading.\n             *\n             * @param {Event} evt the event from the browser for the script\n             * that was loaded.\n             */\n            onScriptLoad: function (evt) {\n                //Using currentTarget instead of target for Firefox 2.0's sake. Not\n                //all old browsers will be supported, but this one was easy enough\n                //to support and still makes sense.\n                if (evt.type === 'load' ||\n                        (readyRegExp.test((evt.currentTarget || evt.srcElement).readyState))) {\n                    //Reset interactive script so a script node is not held onto for\n                    //to long.\n                    interactiveScript = null;\n\n                    //Pull out the name of the module and the context.\n                    var data = getScriptData(evt);\n                    context.completeLoad(data.id);\n                }\n            },\n\n            /**\n             * Callback for script errors.\n             */\n            onScriptError: function (evt) {\n                var data = getScriptData(evt);\n                if (!hasPathFallback(data.id)) {\n                    return onError(makeError('scripterror', 'Script error for: ' + data.id, evt, [data.id]));\n                }\n            }\n        };\n\n        context.require = context.makeRequire();\n        return context;\n    }\n\n    /**\n     * Main entry point.\n     *\n     * If the only argument to require is a string, then the module that\n     * is represented by that string is fetched for the appropriate context.\n     *\n     * If the first argument is an array, then it will be treated as an array\n     * of dependency string names to fetch. An optional function callback can\n     * be specified to execute when all of those dependencies are available.\n     *\n     * Make a local req variable to help Caja compliance (it assumes things\n     * on a require that are not standardized), and to give a short\n     * name for minification/local scope use.\n     */\n    req = requirejs = function (deps, callback, errback, optional) {\n\n        //Find the right context, use default\n        var context, config,\n            contextName = defContextName;\n\n        // Determine if have config object in the call.\n        if (!isArray(deps) && typeof deps !== 'string') {\n            // deps is a config object\n            config = deps;\n            if (isArray(callback)) {\n                // Adjust args if there are dependencies\n                deps = callback;\n                callback = errback;\n                errback = optional;\n            } else {\n                deps = [];\n            }\n        }\n\n        if (config && config.context) {\n            contextName = config.context;\n        }\n\n        context = getOwn(contexts, contextName);\n        if (!context) {\n            context = contexts[contextName] = req.s.newContext(contextName);\n        }\n\n        if (config) {\n            context.configure(config);\n        }\n\n        return context.require(deps, callback, errback);\n    };\n\n    /**\n     * Support require.config() to make it easier to cooperate with other\n     * AMD loaders on globally agreed names.\n     */\n    req.config = function (config) {\n        return req(config);\n    };\n\n    /**\n     * Execute something after the current tick\n     * of the event loop. Override for other envs\n     * that have a better solution than setTimeout.\n     * @param  {Function} fn function to execute later.\n     */\n    req.nextTick = typeof setTimeout !== 'undefined' ? function (fn) {\n        setTimeout(fn, 4);\n    } : function (fn) { fn(); };\n\n    /**\n     * Export require as a global, but only if it does not already exist.\n     */\n    if (!require) {\n        require = req;\n    }\n\n    req.version = version;\n\n    //Used to filter out dependencies that are already paths.\n    req.jsExtRegExp = /^\\/|:|\\?|\\.js$/;\n    req.isBrowser = isBrowser;\n    s = req.s = {\n        contexts: contexts,\n        newContext: newContext\n    };\n\n    //Create default context.\n    req({});\n\n    //Exports some context-sensitive methods on global require.\n    each([\n        'toUrl',\n        'undef',\n        'defined',\n        'specified'\n    ], function (prop) {\n        //Reference from contexts instead of early binding to default context,\n        //so that during builds, the latest instance of the default context\n        //with its config gets used.\n        req[prop] = function () {\n            var ctx = contexts[defContextName];\n            return ctx.require[prop].apply(ctx, arguments);\n        };\n    });\n\n    if (isBrowser) {\n        head = s.head = document.getElementsByTagName('head')[0];\n        //If BASE tag is in play, using appendChild is a problem for IE6.\n        //When that browser dies, this can be removed. Details in this jQuery bug:\n        //http://dev.jquery.com/ticket/2709\n        baseElement = document.getElementsByTagName('base')[0];\n        if (baseElement) {\n            head = s.head = baseElement.parentNode;\n        }\n    }\n\n    /**\n     * Any errors that require explicitly generates will be passed to this\n     * function. Intercept/override it if you want custom error handling.\n     * @param {Error} err the error object.\n     */\n    req.onError = defaultOnError;\n\n    /**\n     * Creates the node for the load command. Only used in browser envs.\n     */\n    req.createNode = function (config, moduleName, url) {\n        var node = config.xhtml ?\n                document.createElementNS('http://www.w3.org/1999/xhtml', 'html:script') :\n                document.createElement('script');\n        node.type = config.scriptType || 'text/javascript';\n        node.charset = 'utf-8';\n        node.async = true;\n        return node;\n    };\n\n    /**\n     * Does the request to load a module for the browser case.\n     * Make this a separate function to allow other environments\n     * to override it.\n     *\n     * @param {Object} context the require context to find state.\n     * @param {String} moduleName the name of the module.\n     * @param {Object} url the URL to the module.\n     */\n    req.load = function (context, moduleName, url) {\n        var config = (context && context.config) || {},\n            node;\n        if (isBrowser) {\n            //In the browser so use a script tag\n            node = req.createNode(config, moduleName, url);\n\n            node.setAttribute('data-requirecontext', context.contextName);\n            node.setAttribute('data-requiremodule', moduleName);\n\n            //Set up load listener. Test attachEvent first because IE9 has\n            //a subtle issue in its addEventListener and script onload firings\n            //that do not match the behavior of all other browsers with\n            //addEventListener support, which fire the onload event for a\n            //script right after the script execution. See:\n            //https://connect.microsoft.com/IE/feedback/details/648057/script-onload-event-is-not-fired-immediately-after-script-execution\n            //UNFORTUNATELY Opera implements attachEvent but does not follow the script\n            //script execution mode.\n            if (node.attachEvent &&\n                    //Check if node.attachEvent is artificially added by custom script or\n                    //natively supported by browser\n                    //read https://github.com/jrburke/requirejs/issues/187\n                    //if we can NOT find [native code] then it must NOT natively supported.\n                    //in IE8, node.attachEvent does not have toString()\n                    //Note the test for \"[native code\" with no closing brace, see:\n                    //https://github.com/jrburke/requirejs/issues/273\n                    !(node.attachEvent.toString && node.attachEvent.toString().indexOf('[native code') < 0) &&\n                    !isOpera) {\n                //Probably IE. IE (at least 6-8) do not fire\n                //script onload right after executing the script, so\n                //we cannot tie the anonymous define call to a name.\n                //However, IE reports the script as being in 'interactive'\n                //readyState at the time of the define call.\n                useInteractive = true;\n\n                node.attachEvent('onreadystatechange', context.onScriptLoad);\n                //It would be great to add an error handler here to catch\n                //404s in IE9+. However, onreadystatechange will fire before\n                //the error handler, so that does not help. If addEventListener\n                //is used, then IE will fire error before load, but we cannot\n                //use that pathway given the connect.microsoft.com issue\n                //mentioned above about not doing the 'script execute,\n                //then fire the script load event listener before execute\n                //next script' that other browsers do.\n                //Best hope: IE10 fixes the issues,\n                //and then destroys all installs of IE 6-9.\n                //node.attachEvent('onerror', context.onScriptError);\n            } else {\n                node.addEventListener('load', context.onScriptLoad, false);\n                node.addEventListener('error', context.onScriptError, false);\n            }\n            node.src = url;\n\n            //For some cache cases in IE 6-8, the script executes before the end\n            //of the appendChild execution, so to tie an anonymous define\n            //call to the module name (which is stored on the node), hold on\n            //to a reference to this node, but clear after the DOM insertion.\n            currentlyAddingScript = node;\n            if (baseElement) {\n                head.insertBefore(node, baseElement);\n            } else {\n                head.appendChild(node);\n            }\n            currentlyAddingScript = null;\n\n            return node;\n        } else if (isWebWorker) {\n            try {\n                //In a web worker, use importScripts. This is not a very\n                //efficient use of importScripts, importScripts will block until\n                //its script is downloaded and evaluated. However, if web workers\n                //are in play, the expectation that a build has been done so that\n                //only one script needs to be loaded anyway. This may need to be\n                //reevaluated if other use cases become common.\n                importScripts(url);\n\n                //Account for anonymous modules\n                context.completeLoad(moduleName);\n            } catch (e) {\n                context.onError(makeError('importscripts',\n                                'importScripts failed for ' +\n                                    moduleName + ' at ' + url,\n                                e,\n                                [moduleName]));\n            }\n        }\n    };\n\n    function getInteractiveScript() {\n        if (interactiveScript && interactiveScript.readyState === 'interactive') {\n            return interactiveScript;\n        }\n\n        eachReverse(scripts(), function (script) {\n            if (script.readyState === 'interactive') {\n                return (interactiveScript = script);\n            }\n        });\n        return interactiveScript;\n    }\n\n    //Look for a data-main script attribute, which could also adjust the baseUrl.\n    if (isBrowser && !cfg.skipDataMain) {\n        //Figure out baseUrl. Get it from the script tag with require.js in it.\n        eachReverse(scripts(), function (script) {\n            //Set the 'head' where we can append children by\n            //using the script's parent.\n            if (!head) {\n                head = script.parentNode;\n            }\n\n            //Look for a data-main attribute to set main script for the page\n            //to load. If it is there, the path to data main becomes the\n            //baseUrl, if it is not already set.\n            dataMain = script.getAttribute('data-main');\n            if (dataMain) {\n                //Preserve dataMain in case it is a path (i.e. contains '?')\n                mainScript = dataMain;\n\n                //Set final baseUrl if there is not already an explicit one.\n                if (!cfg.baseUrl) {\n                    //Pull off the directory of data-main for use as the\n                    //baseUrl.\n                    src = mainScript.split('/');\n                    mainScript = src.pop();\n                    subPath = src.length ? src.join('/')  + '/' : './';\n\n                    cfg.baseUrl = subPath;\n                }\n\n                //Strip off any trailing .js since mainScript is now\n                //like a module name.\n                mainScript = mainScript.replace(jsSuffixRegExp, '');\n\n                 //If mainScript is still a path, fall back to dataMain\n                if (req.jsExtRegExp.test(mainScript)) {\n                    mainScript = dataMain;\n                }\n\n                //Put the data-main script in the files to load.\n                cfg.deps = cfg.deps ? cfg.deps.concat(mainScript) : [mainScript];\n\n                return true;\n            }\n        });\n    }\n\n    /**\n     * The function that handles definitions of modules. Differs from\n     * require() in that a string for the module should be the first argument,\n     * and the function to execute after dependencies are loaded should\n     * return a value to define the module corresponding to the first argument's\n     * name.\n     */\n    define = function (name, deps, callback) {\n        var node, context;\n\n        //Allow for anonymous modules\n        if (typeof name !== 'string') {\n            //Adjust args appropriately\n            callback = deps;\n            deps = name;\n            name = null;\n        }\n\n        //This module may not have dependencies\n        if (!isArray(deps)) {\n            callback = deps;\n            deps = null;\n        }\n\n        //If no name, and callback is a function, then figure out if it a\n        //CommonJS thing with dependencies.\n        if (!deps && isFunction(callback)) {\n            deps = [];\n            //Remove comments from the callback string,\n            //look for require calls, and pull them into the dependencies,\n            //but only if there are function args.\n            if (callback.length) {\n                callback\n                    .toString()\n                    .replace(commentRegExp, '')\n                    .replace(cjsRequireRegExp, function (match, dep) {\n                        deps.push(dep);\n                    });\n\n                //May be a CommonJS thing even without require calls, but still\n                //could use exports, and module. Avoid doing exports and module\n                //work though if it just needs require.\n                //REQUIRES the function to expect the CommonJS variables in the\n                //order listed below.\n                deps = (callback.length === 1 ? ['require'] : ['require', 'exports', 'module']).concat(deps);\n            }\n        }\n\n        //If in IE 6-8 and hit an anonymous define() call, do the interactive\n        //work.\n        if (useInteractive) {\n            node = currentlyAddingScript || getInteractiveScript();\n            if (node) {\n                if (!name) {\n                    name = node.getAttribute('data-requiremodule');\n                }\n                context = contexts[node.getAttribute('data-requirecontext')];\n            }\n        }\n\n        //Always save off evaluating the def call until the script onload handler.\n        //This allows multiple modules to be in a file without prematurely\n        //tracing dependencies, and allows for anonymous module support,\n        //where the module name is not known until the script onload event\n        //occurs. If no context, use the global queue, and get it processed\n        //in the onscript load callback.\n        (context ? context.defQueue : globalDefQueue).push([name, deps, callback]);\n    };\n\n    define.amd = {\n        jQuery: true\n    };\n\n\n    /**\n     * Executes the text. Normally just uses eval, but can be modified\n     * to use a better, environment-specific call. Only used for transpiling\n     * loader plugins, not for plain JS modules.\n     * @param {String} text the text to execute/evaluate.\n     */\n    req.exec = function (text) {\n        /*jslint evil: true */\n        return eval(text);\n    };\n\n    //Set up with config info.\n    req(cfg);\n}(this));\n"
  },
  {
    "path": "demo/kitchen-sink/styles.css",
    "content": "html {\n    height: 100%;\n    width: 100%;\n    overflow: hidden;\n}\n\nbody {\n    overflow: hidden;\n    margin: 0;\n    padding: 0;\n    height: 100%;\n    width: 100%;\n    font-family: Arial, Helvetica, sans-serif, Tahoma, Verdana, sans-serif;\n    font-size: 12px;\n    background: rgb(14, 98, 165);\n    color: white;\n}\n\n#c9-logo, #ace-logo {\n    padding: 0;\n    border: none;\n}\n\n#editor-container {\n    position: absolute;\n    top:  0px;\n    left: 280px;\n    bottom: 0px;\n    right: 0px;\n    background: white;\n}\n\n#controls {\n    padding: 5px;\n}\n\n#controls td {\n    text-align: right;\n}\n\n#controls td + td {\n    text-align: left;\n}\n.ace_status-indicator {\n    color: gray;\n    position: absolute;\n    right: 0;\n    border-left: 1px solid;\n}\n\n/* .ace_text-input {\n    z-index: 10!important;\n    opacity: 1!important;\n    background: rgb(84, 0, 255)!important;\n    color: rgb(255, 255, 255)!important;\n    width: 10em!important;\n}*/\n"
  },
  {
    "path": "demo/kitchen-sink/token_tooltip.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar dom = require(\"ace/lib/dom\");\nvar oop = require(\"ace/lib/oop\");\nvar event = require(\"ace/lib/event\");\nvar Range = require(\"ace/range\").Range;\nvar Tooltip = require(\"ace/tooltip\").Tooltip;\n\nfunction TokenTooltip (editor) {\n    if (editor.tokenTooltip)\n        return;\n    Tooltip.call(this, editor.container);\n    editor.tokenTooltip = this;\n    this.editor = editor;\n\n    this.update = this.update.bind(this);\n    this.onMouseMove = this.onMouseMove.bind(this);\n    this.onMouseOut = this.onMouseOut.bind(this);\n    event.addListener(editor.renderer.scroller, \"mousemove\", this.onMouseMove);\n    event.addListener(editor.renderer.content, \"mouseout\", this.onMouseOut);\n}\n\noop.inherits(TokenTooltip, Tooltip);\n\n(function(){\n    this.token = {};\n    this.range = new Range();\n    \n    this.update = function() {\n        this.$timer = null;\n        \n        var r = this.editor.renderer;\n        if (this.lastT - (r.timeStamp || 0) > 1000) {\n            r.rect = null;\n            r.timeStamp = this.lastT;\n            this.maxHeight = window.innerHeight;\n            this.maxWidth = window.innerWidth;\n        }\n\n        var canvasPos = r.rect || (r.rect = r.scroller.getBoundingClientRect());\n        var offset = (this.x + r.scrollLeft - canvasPos.left - r.$padding) / r.characterWidth;\n        var row = Math.floor((this.y + r.scrollTop - canvasPos.top) / r.lineHeight);\n        var col = Math.round(offset);\n\n        var screenPos = {row: row, column: col, side: offset - col > 0 ? 1 : -1};\n        var session = this.editor.session;\n        var docPos = session.screenToDocumentPosition(screenPos.row, screenPos.column);\n        var token = session.getTokenAt(docPos.row, docPos.column);\n\n        if (!token && !session.getLine(docPos.row)) {\n            token = {\n                type: \"\",\n                value: \"\",\n                state: session.bgTokenizer.getState(0)\n            };\n        }\n        if (!token) {\n            session.removeMarker(this.marker);\n            this.hide();\n            return;\n        }\n\n        var tokenText = token.type;\n        if (token.state)\n            tokenText += \"|\" + token.state;\n        if (token.merge)\n            tokenText += \"\\n  merge\";\n        if (token.stateTransitions)\n            tokenText += \"\\n  \" + token.stateTransitions.join(\"\\n  \");\n\n        if (this.tokenText != tokenText) {\n            this.setText(tokenText);\n            this.width = this.getWidth();\n            this.height = this.getHeight();\n            this.tokenText = tokenText;\n        }\n\n        this.show(null, this.x, this.y);\n\n        this.token = token;\n        session.removeMarker(this.marker);\n        this.range = new Range(docPos.row, token.start, docPos.row, token.start + token.value.length);\n        this.marker = session.addMarker(this.range, \"ace_bracket\", \"text\");\n    };\n    \n    this.onMouseMove = function(e) {\n        this.x = e.clientX;\n        this.y = e.clientY;\n        if (this.isOpen) {\n            this.lastT = e.timeStamp;\n            this.setPosition(this.x, this.y);\n        }\n        if (!this.$timer)\n            this.$timer = setTimeout(this.update, 100);\n    };\n\n    this.onMouseOut = function(e) {\n        if (e && e.currentTarget.contains(e.relatedTarget))\n            return;\n        this.hide();\n        this.editor.session.removeMarker(this.marker);\n        this.$timer = clearTimeout(this.$timer);\n    };\n\n    this.setPosition = function(x, y) {\n        if (x + 10 + this.width > this.maxWidth)\n            x = window.innerWidth - this.width - 10;\n        if (y > window.innerHeight * 0.75 || y + 20 + this.height > this.maxHeight)\n            y = y - this.height - 30;\n\n        Tooltip.prototype.setPosition.call(this, x + 10, y + 20);\n    };\n\n    this.destroy = function() {\n        this.onMouseOut();\n        event.removeListener(this.editor.renderer.scroller, \"mousemove\", this.onMouseMove);\n        event.removeListener(this.editor.renderer.content, \"mouseout\", this.onMouseOut);\n        delete this.editor.tokenTooltip;\n    };\n\n}).call(TokenTooltip.prototype);\n\nexports.TokenTooltip = TokenTooltip;\n\n});\n"
  },
  {
    "path": "demo/kitchen-sink/util.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar dom = require(\"ace/lib/dom\");\nvar event = require(\"ace/lib/event\");\n\nvar EditSession = require(\"ace/edit_session\").EditSession;\nvar UndoManager = require(\"ace/undomanager\").UndoManager;\nvar Renderer = require(\"ace/virtual_renderer\").VirtualRenderer;\nvar Editor = require(\"ace/editor\").Editor;\nvar MultiSelect = require(\"ace/multi_select\").MultiSelect;\n\nvar urlOptions = {}\ntry {\n    window.location.search.slice(1).split(/[&]/).forEach(function(e) {\n        var parts = e.split(\"=\");\n        urlOptions[decodeURIComponent(parts[0])] = decodeURIComponent(parts[1]);\n    });\n} catch(e) {\n    console.error(e);\n}\nexports.createEditor = function(el) {\n    return new Editor(new Renderer(el));\n};\n\nexports.createSplitEditor = function(el) {\n    if (typeof(el) == \"string\")\n        el = document.getElementById(el);\n\n    var e0 = document.createElement(\"div\");\n    var s = document.createElement(\"splitter\");\n    var e1 = document.createElement(\"div\");\n    el.appendChild(e0);\n    el.appendChild(e1);\n    el.appendChild(s);\n    e0.style.position = e1.style.position = s.style.position = \"absolute\";\n    el.style.position = \"relative\";\n    var split = {$container: el};\n\n    split.editor0 = split[0] = new Editor(new Renderer(e0));\n    split.editor1 = split[1] = new Editor(new Renderer(e1));\n    split.splitter = s;\n\n    s.ratio = 0.5;\n\n    split.resize = function resize(){\n        var height = el.parentNode.clientHeight - el.offsetTop;\n        var total = el.clientWidth;\n        var w1 = total * s.ratio;\n        var w2 = total * (1- s.ratio);\n        s.style.left = w1 - 1 + \"px\";\n        s.style.height = el.style.height = height + \"px\";\n\n        var st0 = split[0].container.style;\n        var st1 = split[1].container.style;\n        st0.width = w1 + \"px\";\n        st1.width = w2 + \"px\";\n        st0.left = 0 + \"px\";\n        st1.left = w1 + \"px\";\n\n        st0.top = st1.top = \"0px\";\n        st0.height = st1.height = height + \"px\";\n\n        split[0].resize();\n        split[1].resize();\n    };\n\n    split.onMouseDown = function(e) {\n        var rect = el.getBoundingClientRect();\n        var x = e.clientX;\n        var y = e.clientY;\n\n        var button = e.button;\n        if (button !== 0) {\n            return;\n        }\n\n        var onMouseMove = function(e) {\n            x = e.clientX;\n            y = e.clientY;\n        };\n        var onResizeEnd = function(e) {\n            clearInterval(timerId);\n        };\n\n        var onResizeInterval = function() {\n            s.ratio = (x - rect.left) / rect.width;\n            split.resize();\n        };\n\n        event.capture(s, onMouseMove, onResizeEnd);\n        var timerId = setInterval(onResizeInterval, 40);\n\n        return e.preventDefault();\n    };\n\n\n\n    event.addListener(s, \"mousedown\", split.onMouseDown);\n    event.addListener(window, \"resize\", split.resize);\n    split.resize();\n    return split;\n};\n\n/***************************/\nexports.stripLeadingComments = function(str) {\n    if(str.slice(0,2)=='/*') {\n        var j = str.indexOf('*/')+2;\n        str = str.substr(j);\n    }\n    return str.trim() + \"\\n\";\n};\n\n/***************************/\nexports.saveOption = function(el, val) {\n    if (!el.onchange && !el.onclick)\n        return;\n\n    if (\"checked\" in el) {\n        if (val !== undefined)\n            el.checked = val;\n\n        localStorage && localStorage.setItem(el.id, el.checked ? 1 : 0);\n    }\n    else {\n        if (val !== undefined)\n            el.value = val;\n\n        localStorage && localStorage.setItem(el.id, el.value);\n    }\n};\n\nexports.bindCheckbox = function(id, callback, noInit) {\n    if (typeof id == \"string\")\n        var el = document.getElementById(id);\n    else {\n        var el = id;\n        id = el.id;\n    }\n    var el = document.getElementById(id);\n    \n    if (urlOptions[id])\n        el.checked = urlOptions[id] == \"1\";\n    else if (localStorage && localStorage.getItem(id))\n        el.checked = localStorage.getItem(id) == \"1\";\n\n    var onCheck = function() {\n        callback(!!el.checked);\n        exports.saveOption(el);\n    };\n    el.onclick = onCheck;\n    noInit || onCheck();\n    return el;\n};\n\nexports.bindDropdown = function(id, callback, noInit) {\n    if (typeof id == \"string\")\n        var el = document.getElementById(id);\n    else {\n        var el = id;\n        id = el.id;\n    }\n    \n    if (urlOptions[id])\n        el.value = urlOptions[id];\n    else if (localStorage && localStorage.getItem(id))\n        el.value = localStorage.getItem(id);\n\n    var onChange = function() {\n        callback(el.value);\n        exports.saveOption(el);\n    };\n\n    el.onchange = onChange;\n    noInit || onChange();\n};\n\nexports.fillDropdown = function(el, values) {\n    if (typeof el == \"string\")\n        el = document.getElementById(el);\n\n    dropdown(values).forEach(function(e) {\n        el.appendChild(e);\n    });\n};\n\nfunction elt(tag, attributes, content) {\n    var el = dom.createElement(tag);\n    if (typeof content == \"string\") {\n        el.appendChild(document.createTextNode(content));\n    } else if (content) {\n        content.forEach(function(ch) {\n            el.appendChild(ch);\n        });\n    }\n\n    for (var i in attributes)\n        el.setAttribute(i, attributes[i]);\n    return el;\n}\n\nfunction optgroup(values) {\n    return values.map(function(item) {\n        if (typeof item == \"string\")\n            item = {name: item, caption: item};\n        return elt(\"option\", {value: item.value || item.name}, item.caption || item.desc);\n    });\n}\n\nfunction dropdown(values) {\n    if (Array.isArray(values))\n        return optgroup(values);\n\n    return Object.keys(values).map(function(i) {\n        return elt(\"optgroup\", {\"label\": i}, optgroup(values[i]));\n    });\n}\n\n\n});\n"
  },
  {
    "path": "demo/modelist.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\">\n  <title>ACE Editor Modelist Demo</title>\n  <style type=\"text/css\" media=\"screen\">\n    body {\n        overflow: hidden;\n    }\n    \n    #editor { \n        margin: 0;\n        position: absolute;\n        top: 0;\n        bottom: 0;\n        left: 0;\n        right: 0;\n    }\n  </style>\n</head>\n<body>\n\n<pre id=\"editor\"></pre>\n    \n<script src=\"kitchen-sink/require.js\"></script>\n<script>\n// setup paths\nrequire.config({paths: { \"ace\" : \"../lib/ace\"}});\n// load ace and extensions\nrequire([\"ace/ace\", \"ace/ext/modelist\"], function(ace) {\n    var editor = ace.edit(\"editor\");\n    editor.setTheme(\"ace/theme/twilight\");\n    (function () {\n        var modelist = ace.require(\"ace/ext/modelist\");\n        // the file path could come from an xmlhttp request, a drop event,\n        // or any other scriptable file loading process.\n        // Extensions could consume the modelist and use it to dynamically\n        // set the editor mode. Webmasters could use it in their scripts\n        // for site specific purposes as well.\n        var filePath = \"blahblah/weee/some.js\";\n        var mode = modelist.getModeForPath(filePath).mode;\n        console.log(mode);\n        editor.session.setMode(mode);\n    }());\n})\n</script>\n\n<script src=\"./show_own_source.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "demo/r.js/build.js",
    "content": "({\n    optimize: \"none\",\n    preserveLicenseComments: false,\n    name: \"node_modules/almond/almond\",\n    baseUrl: \"../../\",\n    paths: {\n        ace : \"lib/ace\",\n        demo: \"demo/kitchen-sink\"        \n    },\n    packages: [\n    ],\n    include: [\n        \"ace/ace\"\n    ],\n    exclude: [\n    ],\n    out: \"./packed.js\",\n    useStrict: true,\n    wrap: false\n})"
  },
  {
    "path": "demo/r.js/editor.html",
    "content": "<!DOCTYPE html>\n\n<html>\n<head>\n    <title>Editor</title>\n    <link rel=\"stylesheet\" href=\"../kitchen-sink/styles.css\" type=\"text/css\" media=\"screen\" charset=\"utf-8\">    \n</head>\n<body>\n    <div id=\"optionsPanel\" style=\"position:absolute;height:100%;width:260px\">\n        <a href=\"http://c9.io\" title=\"Cloud9 IDE | Your code anywhere, anytime\">\n            <img id=\"c9-logo\" src=\"../kitchen-sink/logo.png\" style=\"width: 172px;margin: -9px 30px -12px 51px;\">\n        </a>\n    </div>\n    <pre id=\"editor-container\">\n        <div style=\"color:black; padding: 10px\">\n            demo showing Ace usage with r.js:\n            \n            install r.js and almond\n            and run `<code>r.js -o demo/r.js/build.js</code>`\n            \n            note that you also need ace/build/src to lazy load modes and themes\n            require(\"ace/config\").set(\"basePath\", \"../../build/src\");\n            require(\"ace/config\").set(\"packaged\", true);\n        <div>\n    </pre>\n\n    <script src=\"./packed.js\" data-ace-base=\"src\" type=\"text/javascript\" charset=\"utf-8\"></script>  \n    <script type=\"text/javascript\" charset=\"utf-8\">\n        require(\"ace/config\").set(\"basePath\", \"../../build/src\")\n        require(\"ace/config\").set(\"packaged\", true)\n        var editor = require(\"ace/ace\").edit(\"editor-container\");\n        editor.session.setMode(\"ace/mode/javascript\");\n        // editor.session.setValue(\"var editor = Ace!\")\n    </script>\n</body>\n</html>\n"
  },
  {
    "path": "demo/requirejs+build.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\">\n  <title>Editor</title>\n  <style type=\"text/css\" media=\"screen\">\n    body {\n        overflow: hidden;\n    }\n\n    #editor {\n        margin: 0;\n        position: absolute;\n        top: 0;\n        bottom: 0;\n        left: 0;\n        right: 0;\n    }\n  </style>\n</head>\n<body>\n\n<pre id=\"editor\">function foo(items) {\n    var i;\n    for (i = 0; i &lt; items.length; i++) {\n        alert(\"Ace Rocks \" + items[i]);\n    }\n}</pre>\n\n<script src=\"../demo/kitchen-sink/require.js\"></script>\n<script>\n    require.config({paths: {ace: \"../build/src\"}})\n    define('testace', ['ace/ace'],\n        function(ace, langtools) {\n            console.log(\"This is the testace module\");\n            var editor = ace.edit(\"editor\");\n            editor.setTheme(\"ace/theme/twilight\");\n            editor.session.setMode(\"ace/mode/javascript\");\n            require([\"ace/requirejs/text!src/ace\"], function(e){\n                editor.setValue(e);\n            })\n        }\n    );\n    require(['testace'])\n</script>\n\n</body>\n</html>\n"
  },
  {
    "path": "demo/scrollable-page.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\">\n  <title>Editor</title>\n  <style type=\"text/css\" media=\"screen\">\n    .ace_editor {\n        position: relative !important;\n        border: 1px solid lightgray;\n        margin: auto;\n        height: 200px;\n        width: 80%;\n    }\n\n    .ace_editor.fullScreen {\n        height: auto;\n        width: auto;\n        border: 0;\n        margin: 0;\n        position: fixed !important;\n        top: 0;\n        bottom: 0;\n        left: 0;\n        right: 0;\n        z-index: 10;\n    }\n\n    .fullScreen {\n        overflow: hidden\n    }\n\n    .scrollmargin {\n        height: 500px;\n        text-align: center;\n    }\n\n    .large-button {\n        color: lightblue;\n        cursor: pointer;\n        font: 30px arial;\n        padding: 20px;\n        text-align: center;\n        border: medium solid transparent;\n        display: inline-block;\n    }\n    .large-button:hover {\n        border: medium solid lightgray;\n        border-radius: 10px 10px 10px 10px;\n        box-shadow: 0 0 12px 0 lightblue;\n    }\n  </style>\n</head>\n<body>\n<div class=\"scrollmargin\">\n    <span onclick=\"scroll()\" class=\"large-button\">\n    scroll down &dArr;\n    </span>\n</div>\n<pre id=\"editor\">function foo(items) {\n    var i;\n    for (i = 0; i &lt; items.length; i++) {\n        alert(\"Ace Rocks \" + items[i]);\n    }\n\n}</pre>\n<div class=\"scrollmargin\">\n    <div style=\"padding:20px\">\n        press F11 to switch to fullscreen mode\n    </div>\n    <span onclick=\"add()\" class=\"large-button\">\n        +\n    </span>\n\n</div>\n\n<script src=\"kitchen-sink/require.js\"></script>\n<script>\nrequire.config({paths: { \"ace\" : \"../lib/ace\"}});\nrequire([\"ace/ace\", \"ace/ext/themelist\"], function(ace) {\n\nvar $ = document.getElementById.bind(document);\nvar dom = require(\"ace/lib/dom\");\n\n//add command to all new editor instances\nrequire(\"ace/commands/default_commands\").commands.push({\n    name: \"Toggle Fullscreen\",\n    bindKey: \"F11\",\n    exec: function(editor) {\n        var fullScreen = dom.toggleCssClass(document.body, \"fullScreen\")\n        dom.setCssClass(editor.container, \"fullScreen\", fullScreen)\n        editor.setAutoScrollEditorIntoView(!fullScreen)\n        editor.resize()\n    }\n})\n\n// create first editor\nvar editor = ace.edit(\"editor\");\neditor.setTheme(\"ace/theme/twilight\");\neditor.session.setMode(\"ace/mode/javascript\");\neditor.renderer.setScrollMargin(10, 10);\neditor.setOptions({\n    // \"scrollPastEnd\": 0.8,\n    autoScrollEditorIntoView: true\n});\n\nvar count = 1;\nfunction add() {\n    var oldEl = editor.container\n    var pad = document.createElement(\"div\")\n    pad.style.padding = \"40px\"\n    oldEl.parentNode.insertBefore(pad, oldEl.nextSibling)\n\n    var el = document.createElement(\"div\")\n    oldEl.parentNode.insertBefore(el, pad.nextSibling)\n\n    count++\n    var theme = themes[Math.floor(themes.length * Math.random() - 1e-5)]\n    editor = ace.edit(el)\n    editor.setOptions({\n        mode: \"ace/mode/javascript\",\n        theme: theme,\n        autoScrollEditorIntoView: true\n    })\n\n    editor.setValue([\n        \"this is editor number: \", count, \"\\n\",\n        \"using theme \\\"\", theme, \"\\\"\\n\",\n        \":)\"\n    ].join(\"\"), -1)\n\n    scroll()\n}\n\nfunction scroll(speed) {\n    var top = editor.container.getBoundingClientRect().top\n    speed = speed || 10\n    if (top > 60 && speed < 500) {\n        if (speed > top - speed - 50)\n            speed = top - speed - 50\n        else\n            setTimeout(scroll, 10, speed + 10)\n        window.scrollBy(0, speed)\n    }\n}\n\nvar themes = require(\"ace/ext/themelist\").themes.map(function(t){return t.theme});\n\nwindow.add = add;\nwindow.scroll = scroll;\n});\n</script>\n\n</body>\n</html>\n"
  },
  {
    "path": "demo/settings_menu.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\">\n  <title>Editor</title>\n  <style type=\"text/css\" media=\"screen\">\n    body {\n        overflow: hidden;\n    }\n    \n    #editor { \n        margin: 0;\n        position: absolute;\n        top: 0;\n        bottom: 0;\n        left: 0;\n        right: 0;\n    }\n  </style>\n</head>\n<body>\n\n<pre id=\"editor\"></pre>\n    \n<script src=\"kitchen-sink/require.js\"></script>\n<script>\n// setup paths\nrequire.config({paths: { \"ace\" : \"../lib/ace\"}});\n// load ace and extensions\nrequire([\"ace/ace\", \"ace/ext/settings_menu\"], function(ace) {\n    var editor = ace.edit(\"editor\");\n    ace.require('ace/ext/settings_menu').init(editor);\n    editor.setTheme(\"ace/theme/twilight\");\n    editor.session.setMode(\"ace/mode/html\");\n\teditor.commands.addCommands([{\n\t\tname: \"showSettingsMenu\",\n\t\tbindKey: {win: \"Ctrl-q\", mac: \"Ctrl-q\"},\n\t\texec: function(editor) {\n\t\t\teditor.showSettingsMenu();\n\t\t},\n\t\treadOnly: true\n\t}]);\n})\n</script>\n\n<script src=\"./show_own_source.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "demo/show_own_source.js",
    "content": "if (typeof ace == \"undefined\" && typeof require == \"undefined\") {\n    document.body.innerHTML = \"<p style='padding: 20px 50px;'>couldn't find ace.js file, <br>\"\n        + \"to build it run <code>node Makefile.dryice.js full<code>\"\n} else if (typeof ace == \"undefined\" && typeof require != \"undefined\") {\n    require([\"ace/ace\"], setValue)\n} else {\n    require = ace.require;\n    setValue()\n}\n\nfunction setValue() {\n    require(\"ace/lib/net\").get(document.baseURI, function(t){\n        var el = document.getElementById(\"editor\");\n        el.env.editor.setValue(t, 1);\n    })\n}"
  },
  {
    "path": "demo/static-highlighter/client.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\"\n   \"http://www.w3.org/TR/html4/strict.dtd\">\n\n<html lang=\"en\">\n<head>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n\t<title>Static Code highlighter using Ace</title>\n\t<meta name=\"author\" content=\"Fabian Jakobs\">\n</head>\n<body>\n\n<h2>Client Side Syntax Highlighting</h2>\n\n<p>Syntax highlighting using Ace language modes and themes.</p>\n    \n<div id=\"code\"></div>\n\n<script type=\"text/javascript\">\n    var require = {\n        paths: {\n            demo: \"..\",\n            ace: \"../../lib/ace\"\n        }\n    };\n</script>\n<script src=\"../kitchen-sink/require.js\"></script>\n<script>\n    \nrequire([\"ace/ext/static_highlight\", \"ace/mode/javascript\", \"ace/theme/twilight\", \"ace/lib/dom\"], function() {\n\n    var highlighter = require(\"ace/ext/static_highlight\");\n    var JavaScriptMode = require(\"ace/mode/javascript\").Mode;\n    var theme = require(\"ace/theme/twilight\");\n    var dom = require(\"ace/lib/dom\");\n\n    var codeEl = document.getElementById(\"code\");\n    var data = document.body.innerHTML;\n\n    var highlighted = highlighter.render(data, new JavaScriptMode(), theme);\n\n    dom.importCssString(highlighted.css, \"ace_highlight\");\n    codeEl.innerHTML = highlighted.html;\n});\n    \n</script>\n</body>\n</html>\n"
  },
  {
    "path": "demo/static-highlighter/server.js",
    "content": "/**\n * Simple node.js server, which generates the synax highlighted version of itself \n * using the Ace modes and themes on the server and serving a static web page.\n */\n\n// include ace search path and modules\nrequire(\"amd-loader\");\n\nvar http = require(\"http\");\nvar fs = require(\"fs\");\nvar resolve = require(\"path\").resolve;\n\n// load the highlighter and the desired mode and theme\nvar highlighter = require(\"../../lib/ace/ext/static_highlight\");\nvar JavaScriptMode = require(\"../../lib/ace/mode/javascript\").Mode;\nvar theme = require(\"../../lib/ace/theme/twilight\");\n\nvar port = process.env.PORT || 2222;\n\nhttp.createServer(function(req, res) {\n    var url = req.url;\n    var path = /[^#?\\x00]*/.exec(url)[0];\n    var root = resolve(__dirname + \"/../../\").replace(/\\\\/g, \"/\");\n    path = resolve(root + \"/\" + path).replace(/\\\\/g, \"/\");\n    if (path.indexOf(root + \"/\") != 0)\n        path = __filename;\n    res.writeHead(200, {\"Content-Type\": \"text/html; charset=utf-8\"});\n    fs.readFile(path, \"utf8\", function(err, data) {\n        if (err) data = err.message;\n        var highlighted = highlighter.render(data, new JavaScriptMode(), theme);\n        res.end(\n            '<html><body>\\n' +\n                '<style type=\"text/css\" media=\"screen\">\\n' +\n                    highlighted.css +\n                '</style>\\n' + \n                highlighted.html +\n            '</body></html>'\n        );\n    });\n}).listen(port);\n\nconsole.log(\"Listening on port \" + port);"
  },
  {
    "path": "demo/static-highlighter.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n    <title>Static Code highlighter using Ace</title>\n    <meta name=\"author\" content=\"Matthew Kastor\">\n    <style type=\"text/css\">\n        .code {\n            width: 50%;\n            white-space: pre-wrap;\n            border: solid lightgrey 1px\n        }\n    </style>\n</head>\n<body>\n\n<h2>Client Side Syntax Highlighting</h2>\n\n<p>Syntax highlighting using Ace language modes and themes.</p>\n\n<div class=\"code\" ace-mode=\"ace/mode/css\" ace-theme=\"ace/theme/chrome\" ace-gutter=\"true\">\n.code {\n    width: 50%;\n    white-space: pre-wrap;\n    border: solid lightgrey 1px\n}\n\n</div>\n\n<pre class=\"code\" ace-mode=\"ace/mode/javascript\" ace-theme=\"ace/theme/twilight\">\nfunction wobble (flam) {\n    return flam.wobbled = true;\n}\n\n</pre>\n\n\n<div class=\"code\" ace-mode=\"ace/mode/lua\" ace-theme=\"ace/theme/chrome\" ace-gutter=\"true\" style=\"width: 30em;\">\n--[[--\nnum_args takes in 5.1 byte code and extracts the number of arguments from its function header.\n--]]--\n\nfunction int(t)\n    return t:byte(1) + t:byte(2) * 0x100 + t:byte(3) * 0x10000 + t:byte(4) * 0x1000000\nend\n\nfunction num_args(func)\n    local dump = string.dump(func)\n    local offset, cursor = int(dump:sub(13)), offset + 26\n    --Get the params and var flag (whether there's a ... in the param)\n    return dump:sub(cursor):byte(), dump:sub(cursor+1):byte()\nend\n\n</div>\n\n\n<script src=\"kitchen-sink/require.js\"></script>\n<script>\nrequire.config({paths: { \"ace\" : \"../lib/ace\"}});\n\nrequire([\"ace/ace\", \"ace/ext/static_highlight\"], function(ace) {\n    var highlight = ace.require(\"ace/ext/static_highlight\")\n    var dom = ace.require(\"ace/lib/dom\")\n    function qsa(sel) {\n        return Array.apply(null, document.querySelectorAll(sel));\n    }\n\n    qsa(\".code\").forEach(function (codeEl) {\n        highlight(codeEl, {\n            mode: codeEl.getAttribute(\"ace-mode\"),\n            theme: codeEl.getAttribute(\"ace-theme\"),\n            startLineNumber: 1,\n            showGutter: codeEl.getAttribute(\"ace-gutter\"),\n            trim: true\n        }, function (highlighted) {\n            \n        });\n    });\n})\n</script>\n\n</body>\n</html>\n"
  },
  {
    "path": "demo/statusbar.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\">\n  <title>ACE Editor StatusBar Demo</title>\n  <style type=\"text/css\" media=\"screen\">\n    body {\n        overflow: hidden;\n    }\n    \n    #editor { \n        margin: 0;\n        position: absolute;\n        top: 0;\n        bottom: 20px;\n        left: 0;\n        right: 0;\n    }\n    #statusBar {\n        margin: 0;\n        padding: 0;\n        position: absolute;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        height: 20px;\n        background-color: rgb(245, 245, 245);\n        color: gray;\n    }\n    .ace_status-indicator {\n        color: gray;\n        position: absolute;\n        right: 0;\n        border-left: 1px solid;\n    }\n  </style>\n</head>\n<body>\n\n<pre id=\"editor\"></pre>\n<div id=\"statusBar\">ace rocks!</div>\n    \n<script src=\"kitchen-sink/require.js\"></script>\n<script>\n// setup paths\nrequire.config({paths: { \"ace\" : \"../lib/ace\"}});\n// load ace and extensions\nrequire([\"ace/ace\", \"ace/ext/statusbar\"], function(ace) {\n    var editor = ace.edit(\"editor\");\n    var StatusBar = ace.require(\"ace/ext/statusbar\").StatusBar;\n    // create a simple selection status indicator\n    var statusBar = new StatusBar(editor, document.getElementById(\"statusBar\"));\n    editor.setTheme(\"ace/theme/dawn\");\n    editor.session.setMode(\"ace/mode/html\");\n});\n</script>\n\n<script src=\"./show_own_source.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "demo/xml.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\"></meta>\n    <title>ACE Autocompletion demo</title>\n    <style type=\"text/css\" media=\"screen\">\n        body { overflow: hidden; }\n        #editor {\n            margin: 0; position: absolute;\n            top: 0; bottom: 0; left: 0; right: 0;\n        }\n    </style>\n</head>\n<body>\n    <pre id=\"editor\"></pre>\n\n    <script src=\"kitchen-sink/require.js\"></script>\n    <script><![CDATA[\n    // setup paths\n    require.config({paths: { \"ace\" : \"../lib/ace\"}});\n    // load ace and extensions\n    require([\"ace/ace\", \"ace/ext/language_tools\"], function(ace) {\n        var langagueTools = require(\"ace/ext/language_tools\");\n        var editor = ace.edit(\"editor\");\n        editor.session.setMode(\"ace/mode/xml\");\n        editor.setTheme(\"ace/theme/tomorrow\");\n    });    \n    ]]></script>\n\n    <script src=\"./show_own_source.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "doc/README.md",
    "content": "# Introduction\n\nThe API doc build takes a look a source Javascript files in the _lib_ directory, and turns it into HTML output in the _api_ directory. It uses [Panino](https://github.com/gjtorikian/panino-docs) to perform the conversion.\n\nFor any questions on the build system, please see that repo.\n\n# Building\n\nIn the root directory, just run:\n\n    make doc\n\nIn this directory, just run:\n\n    npm install\n    node build.js\n\n"
  },
  {
    "path": "doc/additionalObjs.json",
    "content": "{\n\t\"Array\" : \"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array\",\n\t\"Boolean\" : \"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean\",\n\t\"Date\" : \"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date\",\n\t\"Error\" : \"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Error\",\n\t\"EvalError\" : \"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/EvalError\",\n\t\"RangeError\" : \"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/RangeError\",\n\t\"ReferenceError\" : \"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/ReferenceError\",\n\t\"SyntaxError\" : \"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/SyntaxError\",\n\t\"TypeError\" : \"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/TypeError\",\n\t\"URIError\" : \"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/URIError\",\n\t\"Function\" : \"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function\",\n\t\"Infinity\" : \"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Infinity\",\n\t\"JSON\" : \"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/JSON\",\n\t\"Math\" : \"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math\",\n\t\"NaN\" : \"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/NaN\",\n\t\"Number\" : \"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number\",\n\t\"Object\" : \"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object\",\n\t\"RegExp\" : \"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/RegExp\",\n\t\"String\" : \"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String\",\n    \n    \"DOMElement\": \"https://developer.mozilla.org/en/DOM/element\",\n    \"Event\": \"https://github.com/ajaxorg/ace/blob/master/lib/ace/lib/event.js\",\n    \"TextMode\": \"https://github.com/ajaxorg/ace/blob/master/lib/ace/mode/text.js\",\n    \"KeyBinding\": \"https://github.com/ajaxorg/ace/blob/master/lib/ace/keyboard/keybinding.js\",\n    \"Cursor\": \"https://github.com/ajaxorg/ace/blob/master/lib/ace/layer/cursor.js\"\n}"
  },
  {
    "path": "doc/build.js",
    "content": "var fs = require(\"fs\");\nvar path = require(\"path\");\nvar panino = require(\"panino\");\nvar srcPath = __dirname + \"/../lib/ace\";\nvar buildType = process.argv.splice(2)[0];\n\nvar options = {\n  title       : \"Ace API\",\n  parseType   : \"jsd\",\n  linkFormat  : function(linkHtml) {\n      var href = linkHtml.href;\n      var o = href.match(/(.+)\\.html(#.+)/);\n      var c = href.match(/#(.+)/);\n      \n      if ( o !== null ) {\n          href = href.replace(href, '#nav=api&api=' + o[1]);// + '&section=' + o[2]);\n      }\n      \n      linkHtml.href = href;\n      \n      return linkHtml;\n  },\n  output      : \"../api/\",\n  outputAssets : \"../api/resources\",\n  skin        : \"./template/jade/layout.jade\",\n  assets      : \"./template/resources\",\n  additionalObjs : \"./additionalObjs.json\",\n  exclude     : [\"**/*_test.js\", \"**/mode/**\", \"default_commands.js\", \"multi_select_commands.js\", \"**/test/**\", \"**/theme/**\", \"**/worker/**\"],\n  index       : \"./index.md\"\n};\n\nfiles = [srcPath];\n\npanino.parse(files, options, function (err, ast) {\n  if (err) {\n    console.error(err);\n    process.exit(1);\n  }\n  \n  panino.render(buildType || 'html', ast, options, function (err) {\n    if (err) {\n      console.error(err);\n      process.exit(1);\n    }\n    \n    /*fs.readdir(options.output, function (err, files) {\n        files.forEach(function(file) {\n            if (file.match(/\\.html$/)) {\n                var outFile = options.output + \"/\" + file;\n                fs.readFile(outFile, \"utf8\", function(err, data) {\n                    var otherPageRegExp = new RegExp('<a href=\"(.+?.html)(#.+?)?\"', \"g\");\n                    var m;\n                    \n                    if ( (m = data.match(otherPageRegExp)) ) {\n                        console.log(m)\n                        data = data.replace(otherPageRegExp, '<a href=\"#nav=api&api=' + m[1] + '&section=' + m[2] + '\"')\n                    }\n                    \n                    fs.writeFile(outFile, data, function (err) {\n                      if (err) throw err;\n                    });\n                });\n            }\n        });\n    });*/\n  });\n});"
  },
  {
    "path": "doc/index.md",
    "content": "# Ace API Reference\n\nWelcome to the Ace API Reference Guide. Ace is a standalone code editor written in JavaScript that you can embed onto any website. We're used in a bunch of places already, like GitHub, Google, and Facebook.\n\nOn the left, you'll find a list of all of our currently documented classes. There are plenty more to do, but these represent the \"core\" set. For more information on how to work with Ace, check out the [main Ace website](http://ace.ajax.org)."
  },
  {
    "path": "doc/package.json",
    "content": "{\n    \"name\": \"ace-api\",\n    \"version\": \"0.1.0\",\n    \"dependencies\": {\n        \"panino\" : \">=2.2.0\",\n        \"asset-smasher\": \"0.2.0\"\n    }\n}"
  },
  {
    "path": "doc/site/iphone.css",
    "content": "#wrapper {\n    position:relative;\n    overflow:hidden;\n}\n\n#wrapper .content .column1 {\n    margin:0 16px 0 15px;\n}\n\n#header .content .signature {\n    font-size:18px;\n    bottom:0;\n}\n\nUL.menu-list LI {\n    font-size:22px;\n}\n\nUL.menu-footer LI {\n    font-size:22px;\n}\n\nPRE{\n    font-size:22px;\n}"
  },
  {
    "path": "doc/site/js/ga.js",
    "content": " var _gaq = _gaq || [];\n _gaq.push(['_setAccount', 'UA-31998201-1']);\n _gaq.push(['_trackPageview']);\n \n (function() {\n   var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;\n   ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';\n   var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n })();"
  },
  {
    "path": "doc/site/js/main.js",
    "content": "var editor;\nvar embedded_editor;\n$(function() {\n    if (typeof ace !== \"undefined\") {\n        ace.config.set(\"workerPath\", \"build/src-min\");\n        editor = ace.edit(\"ace_editor_demo\");\n        editor.container.style.opacity = \"\";\n        embedded_editor = ace.edit(\"embedded_ace_code\");\n        embedded_editor.container.style.opacity = \"\";\n        embedded_editor.session.setMode(\"ace/mode/html\");\n        embedded_editor.setAutoScrollEditorIntoView(true);\n        embedded_editor.setOption(\"maxLines\", 40);\n        \n        editor.setOptions({\n            maxLines: 30,\n            mode: \"ace/mode/javascript\",\n            autoScrollEditorIntoView: true\n        });\n        \n        ace.config.loadModule(\"ace/ext/emmet\", function() {\n            ace.require(\"ace/lib/net\").loadScript(\"http://cloud9ide.github.io/emmet-core/emmet.js\", function() {\n                embedded_editor.setOption(\"enableEmmet\", true);\n                editor.setOption(\"enableEmmet\", true);\n            });\n        });\n        \n        ace.config.loadModule(\"ace/ext/language_tools\", function() {\n            embedded_editor.setOptions({\n                enableSnippets: true,\n                enableBasicAutocompletion: true\n            });\n            editor.setOptions({\n                enableSnippets: true,\n                enableBasicAutocompletion: true\n            });\n        });\n    } else {\n        document.body.insertAdjacentHTML(\"afterbegin\", '<div class=\"bs-docs-example\">\\\n            <div class=\"alert alert-error\">\\\n              <button type=\"button\" class=\"close\" data-dismiss=\"alert\">\\xd7</button>\\\n              <strong>Oh No!</strong> Couldn\\'t load <code>build/src/ace.js</code>.<br>\\\n                You can build it by running <code>npm install ; node Makefile.dryice.js</code><br>\\\n                Or download older version by running <code>git submodule update --init --recursive</code><br>\\\n            </div>\\\n          </div>');\n    }\n    $(\"ul.menu-list\").mousedown(function(e) {\n        if (e.button === 1) {\n            e.preventDefault();\n        }\n    });\n    \n    $(\"ul.menu-list li\").click(\"click auxclick\", function(e) {\n        if (e.target.tagName !== \"A\") {\n            var href = $(this).find(\"a\").attr(\"href\");\n            if (e.originalEvent.button == 1)\n                window.open(href, \"_blank\");\n            else if (e.originalEvent.button == 0)\n                window.location = href;\n        }\n    });\n    \n    // used when page is access directly\n    function magicClickInterceptor(e) {\n        e.preventDefault();\n            \n        var state = {};\n        state.api = $(this).attr(\"href\").substring(6, $(this).attr(\"href\").length - 5);\n        $.bbq.pushState(state);\n        \n        var _self = $(this);\n        $(\"#apiHolder\").load($(this).attr(\"href\") + \" #documentation\", function(){\n        $(\"#apiHolder\").removeClass(\"apiIntro\").removeClass(\"span9\");\n        $(\"#documentation\").removeClass(\"span9\").addClass(\"span7\");\n            ux();\n            setupClicker();\n        \n            // handles dropping in from new link\n            var section = $.bbq.getState(\"section\");\n            if (section) {\n                $(\"li#dropdown_\" + section.replace(/\\./g, '\\\\.') + \" a\").triggerHandler('click');\n            }\n            \n            //setupDisqus(_self.attr(\"href\"));\n        });\n    }\n    \n    $('.menu-item a').click(magicClickInterceptor);\n    $('a.argument').click(magicClickInterceptor);\n    \n    $('a.external').click(function(e) {\n        e.preventDefault();\n    });\n\n    var tabs = $(\"#tabnav\"),\n        tab_a_selector = \"a\";\n\n    var firstLoad = true;\n     \n    tabs.find(tab_a_selector).click(function(e) {\n        e.preventDefault();\n        if ($(this).attr(\"href\") === \"/\") {\n            window.location = \"http://ace.ajax.org\";\n            return;\n        }\n        if ($(this).attr(\"href\").indexOf(\"#api\") === 0) {\n            $(\"#top_container\").addClass(\"collapse\");\n            scrollIntoPosition(null, 0);\n        }\n        else if ($(this).is(\":visible\")) {\n            if (firstLoad) {\n                firstLoad = false;\n                setTimeout(function() {\n                    $(\"#top_container\").removeClass(\"collapse\");\n                    scrollIntoPosition(e.target);\n                }, 700);\n            }\n            else {\n                $(\"#top_container\").removeClass(\"collapse\");\n                scrollIntoPosition(e.target);\n            }\n        }\n\n        function scrollIntoPosition(el, overridePosition) {\n            if (typeof overridePosition !== \"undefined\") {\n                $(\"body\").stop().animate({\n                    scrollTop: overridePosition\n                }, 400);\n            }\n            else if ($(\"body\").scrollTop() > 345) {\n                $(\"body\").stop().animate({\n                    scrollTop: ($(el).offset().top - 10)\n                }, 400);\n            }\n        }\n\n        $(this).tab(\"show\");\n\n        var state = {};\n        state.nav = $(this).attr(\"href\").substr(1);\n        var oldState = $.bbq.getState(\"nav\") || \"about\";\n        if (state.nav != oldState)\n            $.bbq.pushState(state);\n     });\n\n    $('#tabnav a[data-toggle=\"tab\"]').on('shown', function (e) {\n        $(\".tab-content .tab-pane.active .ace_editor\").each(function(i, el){\n            el.env.onResize();\n        });\n    });\n\n    $(window).on(\"hashchange\", function(e) {\n        _gaq.push(['_trackPageview',location.pathname + location.search  + location.hash]);\n        tabs.each(function() {\n            var idx = $.bbq.getState(\"nav\") || \"about\";\n            var section = e.fragment.split(\"&\")[1] || \"\";\n            $(this).find(tab_a_selector + \"[href='#\" + idx + \"']\").triggerHandler('click');\n           \n            // handles dropping in from new link\n            var api = $.bbq.getState(\"api\");\n            if (api) {\n                $(tab_a_selector + \"[href='./api/\" + api + \".html']\").triggerHandler('click');\n            }\n        });\n    }).trigger(\"hashchange\");\n     \n    highlight();\n});\n\n\n\nfunction highlight() {\n    var highlighter = ace.require(\"ace/ext/static_highlight\")\n    var dom = ace.require(\"ace/lib/dom\")\n    function qsa(sel) {\n        var els = document.querySelectorAll(sel);\n        var result = [];\n        for (var i = 0, l = els.length; i < l; i++)\n            result[i] = els[i];\n        return result;\n    }\n\n    qsa(\"code[class]\").forEach(function(el) {\n        var m = el.className.match(/language-(\\w+)|(javascript)/);\n        if (!m) return\n        var mode = \"ace/mode/\" + (m[1] || m[2]);\n        highlighter.highlight(el, {mode: mode, theme: \"ace/theme/xcode\"})\n    });\n}"
  },
  {
    "path": "doc/site/style.css",
    "content": "body {\n    margin:0;\n    padding:0;\n    background-color:#e6f5fc;\n    font-family: Helvetica, Arial;\n}\n\n\n\n#ace_editor_demo, #embedded_ace_code {\n    height: 275px;\n    border: 1px solid #DDD;\n    border-radius: 4px;\n    border-bottom-right-radius: 0px;\n    margin-top: 5px;\n}\n\n#embedded_ace_code {\n    height: 525px;\n}\n\nh1, h2, h3, h4, h5, h6 {\n    font-family: Helvetica;\n    font-weight: 100;\n    margin:0;\n    padding:0;\n}\n\nh2, h3, h4, h5, h6 {\n    padding-top: 30px;\n    border-bottom: 1px solid #bedaea;\n}\n\nH2 {\n    font-size:28px;\n    color:#263842;\n    padding-bottom:6px;\n}\n\nH3 {\n    font-size:22px;\n    color:#253741;\n    margin-bottom:8px;\n}\n\nH4 {\n    font-size:21px;\n    color:#222222;\n    margin-bottom:8px;\n}\n\nP {\n    padding:13px 0;\n    margin:0;\n    line-height:21px;\n    font-size: 15px;\n}\n\nUL{\n    font-size: 15px;\n}\n\n#header {\n\theight: 93px;\n\tposition: relative;\n\tbackground: url(images/background.png) repeat-x 0 0;\n\tborder-bottom: 1px solid #C9E8FA;\n\tmargin-top: 40px;\n}\n\n#header .content .signature {\n    font-family:Trebuchet MS;\n    font-size:11px;\n    color:#ebe4d6;\n    position:absolute;\n    bottom:5px;\n    right:42px;\n    letter-spacing : 1px;\n}\n\n.content {\n    width:970px;\n    position:relative;\n    margin:0 auto;\n}\n\n#header .content {\n\theight: 100%;\n\tz-index: 90000;\n}\n\n#header .content .logo {\n\twidth: 141px;\n\theight: 92px;\n\tbackground: url(images/logo_half.png) no-repeat 0 0;\n\tposition: absolute;\n\ttop: -14px;\n\tleft: 0;\n}\n\n#header .content .title {\n\twidth: 605px;\n\theight: 58px;\n\tbackground: url(images/ace.png) no-repeat 0 0;\n\tposition: absolute;\n\ttop: 22px;\n\tleft: 329px;\n}\n\n#wrapper {\n    background:url(images/body_background.png) repeat-x 0 -15px;\n    min-height:250px;\n}\n\n#wrapper .content {\n    font-family:Arial;\n    font-size:14px;\n    color:#222222;\n    width: 960px;\n}\n\n#wrapper .content .column1 {\n    position:relative;\n    overflow:hidden;\n    float:left;\n    width:315px;\n    margin-right:31px;\n}\n\n#wrapper .content .column2 {\n    position:relative;\n    overflow:hidden;\n    float:left;\n    /*width:600px;*/\n}\n\n#top_container h1 {\n    font-size: 68px;\n    line-height: 60px;\n    width: 515px;\n    float: left;\n    font-weight: 100;\n    font-family: Helvetica;\n    padding: 65px 0 0 14px;\n    color: #333;\n}\n\n#top_container {\n    background: url(images/header-bg.png) 0 0;\n    overflow: hidden;\n    padding: 11px 36px 19px 40px;\n    height: 267px;\n    -webkit-transition: height 0.4s ease-out, opacity 0.4s ease-out, padding 0.4s ease-out, margin 0.4s ease-out;\n    -moz-transition: height 0.4s ease-out, opacity 0.4s ease-out, padding 0.4s ease-out, margin 0.4s ease-out;\n    opacity: 1;\n    margin-top: 25px;\n}\n\n#top_container.collapse {\n    padding: 0px;\n    height: 0px;\n    opacity: 0;\n    margin: 0;\n}\n\n#page_logo {\n    padding: 35px 0 15px 0;\n    width: 350px;\n    float: right;\n    text-align: center;\n    height: 220px;\n}\n\n.fork_on_github {\n    width:310px;\n    height:80px;\n    background:url(images/fork_on_github.png) no-repeat 0 0;\n    position:relative;\n    overflow:hidden;\n    margin-top:49px;\n    cursor:pointer;\n}\n\n.fork_on_github:hover {\n    background-position:0 -80px;\n}\n\n.divider {\n    height: 1px;\n    background-color:#bedaea;\n    margin-bottom:3px;\n}\n\n.menu, .site-menu {\n    padding: 25px 0 0 35px;\n}\n\nUL.content-list {\n    padding: 15px 0 15px 20px;\n    margin:0;\n}\n\nUL.content-list li {\n    padding-left: 10px;\n    padding-bottom: 3px;\n}\n\nul.menu-list {\n    padding: 15px 0;\n    margin: 0 0 20px 0;\n    list-style-type: none;\n    line-height: 16px;\n    overflow: auto;\n}\n\nul.menu-list li {\n    color: #2557B4;\n    font-family: Helvetica, Trebuchet MS;\n    font-size: 12px;\n    padding: 5px;\n    cursor: pointer;\n    display: block;\n    float: left;\n    margin-right: 15px;\n    margin-bottom: 20px;\n    width: 100px;\n    height: 90px;\n    border-radius: 5px;\n    position: relative;\n    background: rgba(255, 255, 255, 0.7);\n    margin-left: 22px;\n    margin-top: 20px;\n    box-shadow: 0 0 4px rgba(0, 0, 0, 0.1);\n    -moz-box-shadow: 0 0 4px rgba(0, 0, 0, 0.1);\n    -webkit-transition: box-shadow 0.4s;\n    -moz-transition: box-shadow 0.4s;\n    border: 1px solid #999;\n    background-image:   -webkit-repeating-linear-gradient(left, hsla(0,0%,100%,0) 0%, hsla(0,0%,100%,0)   6%, hsla(0,0%,100%, .1) 7.5%),\t\t\t\t\t\n\t\t\t\t\t\t-webkit-repeating-linear-gradient(left, hsla(0,0%,  0%,0) 0%, hsla(0,0%,  0%,0)   4%, hsla(0,0%,  0%,.03) 4.5%),\t\t\t\t\t\n\t\t\t\t\t\t-webkit-repeating-linear-gradient(left, hsla(0,0%,100%,0) 0%, hsla(0,0%,100%,0) 1.2%, hsla(0,0%,100%,.15) 2.2%),\n\t\t\t\t\t\t\n\t\t\t\t\t\t-webkit-linear-gradient(-90deg, hsl(0,0%,78%)  0%, \n\t\t\t\t\t\t\t\t\t\t\t\t\t\thsl(0,0%,90%) 47%, \n\t\t\t\t\t\t\t\t\t\t\t\t\t\thsl(0,0%,78%) 53%,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\thsl(0,0%,70%)100%);\n    background-image:   -moz-repeating-linear-gradient(left, hsla(0,0%,100%,0) 0%, hsla(0,0%,100%,0)   6%, hsla(0,0%,100%, .1) 7.5%),    \t\t\t\t\n\t\t\t\t\t\t-moz-repeating-linear-gradient(left, hsla(0,0%,  0%,0) 0%, hsla(0,0%,  0%,0)   4%, hsla(0,0%,  0%,.03) 4.5%),\t\t\t\t\t\n\t\t\t\t\t\t-moz-repeating-linear-gradient(left, hsla(0,0%,100%,0) 0%, hsla(0,0%,100%,0) 1.2%, hsla(0,0%,100%,.15) 2.2%),\n\t\t\t\t\t\t\n\t\t\t\t\t\t-moz-linear-gradient(-90deg, hsl(0,0%,78%)  0%, \n\t\t\t\t\t\t\t\t\t\t\t\t\t\thsl(0,0%,90%) 47%, \n\t\t\t\t\t\t\t\t\t\t\t\t\t\thsl(0,0%,78%) 53%,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\thsl(0,0%,70%)100%);\n}\n\nul.menu-list li:hover {\n    box-shadow: 0 0 4px rgba(0, 0, 0, 0.5);\n    -moz-box-shadow: 0 0 4px rgba(0, 0, 0, 0.5);\n}\n\nul.menu-list li a {\n    position: absolute;\n    bottom: 0px;\n    left: 0px;\n    color: white;\n    text-align: center;\n    font-weight: bold;\n    text-shadow: 0px 0px 4px rgba(0, 0, 0, 0.8);\n    width: 100%;\n    display: block;\n    background: rgba(0, 0, 0, 0.6);\n    line-height: 12px;\n    padding: 4px 0;\n}\n\nUL.menu-list LI a:hover {\n    text-decoration: none;\n}\n\nli#add_your_site p {\n    font-size: 32px;\n    border: 3px solid #34A034;\n    color: #34A034;\n    border-radius: 34px;\n    padding: 3px 4px 4px 5px;\n    width: 20px;\n    height: 22px;\n    line-height: 18px;\n    position: relative;\n    left: 33px;\n    top: 22px;\n    background: #fff;\n}\n\nul.menu-list li#add_your_site a {\n    color: #A3EEA3;\n}\n\n/* This is the animation code. */\n@-webkit-keyframes example {\n    0% { -webkit-transform: rotate(0deg); }\n    25% { -webkit-transform: rotate(3deg); }\n    50%   { -webkit-transform: rotate(0deg); }\n    75%   { -webkit-transform: rotate(-3deg); }\n}\n\n/* This is the element that we apply the animation to. */\nli#add_your_site {\n   -webkit-animation-name: example;\n   -webkit-animation-duration: 0.4s;\n   -webkit-animation-timing-function: ease; /* ease is the default */\n   -webkit-animation-delay: 0s;             /* 0 is the default */\n   -webkit-animation-iteration-count: infinite;    /* 1 is the default */\n   -webkit-animation-direction: alternate;  /* normal is the default */\n}\n\nA {\n    color:#2557b4;\n    text-decoration:none;\n}\n\nA:hover {\n    text-decoration:underline;\n}\n\n#footer {\n    height:40px;\n    position:relative;\n    overflow:hidden;\n    background:url(images/bottombar.png) repeat-x 0 0;\n    position:relative;\n    margin-top:40px;\n}\n\nUL.menu-footer {\n    padding:0;\n    margin:8px 11px 0 0;\n    list-style-type:none;\n    float:right;\n}\n\nUL.menu-footer LI {\n    color:white;\n    font-family:Arial;\n    font-size:12px;\n    display:inline-block;\n    margin:0 1px;\n}\n\nUL.menu-footer LI A {\n    color:#8dd0ff;\n    text-decoration:none;\n}\n\nUL.menu-footer LI A:hover {\n    text-decoration:underline;\n}\n\n.nav-pills.nav {\n    margin: 10px 0 25px 0;\n    padding: 0;\n    border-radius: 5px;\n    border: 1px solid #d7d7d7;\n    background: #eeeeee;\n    background: -moz-linear-gradient(top,  #eeeeee 0%, #cccccc 100%);\n    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#eeeeee), color-stop(100%,#cccccc));\n    background: -webkit-linear-gradient(top,  #eeeeee 0%,#cccccc 100%);\n    background: -o-linear-gradient(top,  #eeeeee 0%,#cccccc 100%);\n    background: -ms-linear-gradient(top,  #eeeeee 0%,#cccccc 100%);\n    background: linear-gradient(to bottom,  #eeeeee 0%,#cccccc 100%);\n    filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#eeeeee', endColorstr='#cccccc',GradientType=0 );\n    overflow: hidden;\n}\n\n.nav-pills > .active > a, .nav-pills > .active > a:hover {\n    color: white;\n    background-color: #555;\n    box-shadow: inset 0 0 8px rgba(0, 0, 0, 0.8)!important;\n    text-shadow: 0px 0px 3px #000;\n}\n\n.nav-tabs > li > a, .nav-pills > li > a {\n    padding-right: 17px;\n    padding-left: 17px;\n    border-right: 1px solid #bbb;\n    border-radius: 0;\n    margin: 0;\n    line-height: 25px;\n    font-size: 14px;\n    color: #333;\n    text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.3);\n    box-shadow: 0 0 1px rgba(255, 255, 255, 1);\n    -moz-box-shadow: 0 0 1px rgba(255, 255, 255, 1);\n    -webkit-transition: background 0.2s;\n    -moz-transition: background 0.2s;\n}\n\n.nav.nav-pills li:first-child > a {\n    padding-left: 28px;\n    padding-right: 28px;\n}\n\n.nav.nav-pills li:first-child > a > img {\n    width: 34px;\n}\n\n.nav.nav-pills li:last-child > a {\n    border-right: none;\n    box-shadow: none;\n    -moz-box-shadow: none;\n}\n\n.tab-content {\n    margin-bottom: 50px;\n}\n\n.tab-content > .active, .pill-content > .active {\n    padding: 25px 30px;\n}\n\n#top_container, .tab-content > .active, .pill-content > .active {\n    border: 1px solid #DDD;\n    border-radius: 5px;\n    -moz-border-radius: 5px;\n}\n\n.tab-content > .active, .pill-content > .active {\n    background: rgba(255, 255, 255, 0.7);\n}\n\npre .xml .javascript, pre .xml .css {\n    opacity: 1;\n}\n\n#embed_link {\n    text-align: right;\n    padding-top: 0;\n}\n#embed_link a {\n    color: #059C05;\n    font-weight: 100;\n    font-family: helvetica;\n    font-size: 13px;\n    display: inline-block;\n    padding: 2px 10px;\n    background: #f4f4f4;\n    border: 1px solid #ddd;\n    border-top: none;\n    border-bottom-left-radius: 4px;\n    border-bottom-right-radius: 4px;\n    text-shadow: 0px 1px 0px rgba(255, 255, 255, 1);\n    text-decoration: none;\n}\n\np.highlight_note {\n    padding: 8px 35px 8px 14px;\n    margin-top: 10px;\n    color: #A0762E;\n    text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);\n    background-color: #FCF8E3;\n    border: 1px solid #CA9C44;\n    -webkit-border-radius: 4px;\n    -moz-border-radius: 4px;\n    border-radius: 4px;\n}\n\np.highlight_note a {\n    color: #537CC7;\n}\n\n.prod_no_image {\n    position: relative; left: -10px; top: -12px;\n}\n\n\n#api {\n    padding: 0;\n}\n\n/*https://github.com/twitter/bootstrap/issues/5262*/\nimg {\n    max-width: none;\n}\n\n.text-logo{\n    color: black;\n    font-size: 24px;\n    font-weight: lighter;\n    margin-top: 23px;\n    text-align: center;\n    text-shadow: 1px 17px 2px gray, 1px 1px 2px gray;\n}\n\n.menu-list>li>img {\n    position: relative;\n}\n\n.rotating-logo {    \n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n    -webkit-transition: all 0.5s ease-out;\n    transition: all 0.5s ease-out;\n}\n.rotating-logo:hover {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n    -webkit-transition: all 0.5s ease-in-out;\n    transition: all 0.5s ease-in-out;\n}"
  },
  {
    "path": "doc/template/jade/common_layout.jade",
    "content": "-var dirPrefix = \"./\";\n-var sitePrefix = \"../doc/site/\";\n-var landingPage = 'false'\n-var versions = []\n\nmixin doctype\n    !!! 5\n\n    <!--[if lt IE 7]> <html class=\"no-js ie6 oldie\" lang=\"en\"> <![endif]-->\n    <!--[if IE 7]> <html class=\"no-js ie7 oldie\" lang=\"en\"> <![endif]-->\n    <!--[if IE 8]> <html class=\"no-js ie8 oldie\" lang=\"en\"> <![endif]-->\n    <!--[if gt IE 8]><!--> <html class=\"no-js\" lang=\"en\"> <!--<![endif]-->\n\nmixin head\n    meta(http-equiv='Content-Type', content='text/html; charset=UTF-8')\n\n    -if (isIndex)\n        title #{title}\n    -else\n        title #{classId} - #{title}\n\n    meta(name=\"generator\", content=\"panino-doc-build\")\n    meta(name=\"description\", content=\"Ace API documentation for the online code editor\")\n    meta(name=\"author\", content=\"Garen J. Torikian\")\n\n    script(src='#{sitePrefix}/js/main.js')\n    link(rel='stylesheet', media='all and (max-device-width: 480px)', href='doc/site/iphone.css')\n    link(rel='stylesheet', media='all and (min-device-width: 481px) and (max-device-width: 1024px)', href='doc/site/iphone.css')\n    link(href='#{dirPrefix}resources/ace/skeleton/images/favicon.ico', rel='icon', type='image/x-icon')\n\n    link(href='#{sitePrefix}/style.css', rel='stylesheet', type='text/css')\n    link(rel=\"stylesheet\", href=\"#{dirPrefix}resources/csses/ace_api.css\")\n    link(rel=\"stylesheet\", href=\"#{dirPrefix}resources/csses/font-awesome.css\")\n\n    link(href=\"#{dirPrefix}resources/images/favicon.ico\", rel=\"icon\", type=\"image/x-icon\")\n\n    script(src='#{dirPrefix}resources/javascripts/bbq.js')\n    script(src=\"#{dirPrefix}resources/javascripts/jquery.collapse.js\")\n    script(src=\"#{dirPrefix}resources/javascripts/jquery.cookie.js\")\n    script(src=\"#{dirPrefix}resources/javascripts/bootstrap.js\")\n\n\nmixin endingScripts\n    script(defer, src=\"#{dirPrefix}resources/javascripts/ux.js\")\n    script(src=\"#{dirPrefix}resources/javascripts/clicker.js\")\n    script(src=\"#{dirPrefix}resources/javascripts/jquery-scrollspy.js\")\n    script(defer, src=\"#{dirPrefix}resources/javascripts/disqus-ext.js\")\n    script(defer, src=\"#{dirPrefix}resources/javascripts/ga.js\")\n\nmixin identifyBuild(tree, type)\n        landingPage = 'true'\n        -dirPrefix = './'\n\nmixin markdown(text, inline)\n    != markdown(text, inline)"
  },
  {
    "path": "doc/template/jade/layout.jade",
    "content": "include common_layout\ninclude lib\n\n#documentation.span9\n    -if (isIndex)\n        != indexContent\n    -else\n        mixin api()\n\n    mixin endingScripts\n\n    div(id=\"disqus_thread\")"
  },
  {
    "path": "doc/template/jade/lib.jade",
    "content": "- var methodSection, constructorSection, propertySection, eventSection;\n\n-function renameMemberTitle(title, count)\n  if title.indexOf(\"ethods\") >= 0\n    span Functions (#{count})\n  else if title.indexOf(\"ropert\") >= 0\n    span Properties (#{count})   \n  else\n    span #{title} (#{count})\n\nmixin article(obj, parents)\n  if typeof obj === 'string'\n    obj = list[obj]\n\n  if (obj.private !== true && obj.name.charAt(0) !== \"$\")\n    title = obj.path + (obj.type ? ' (' + obj.type + ')' : '')\n    article.article(id=obj.path, data-title=title)\n      if obj.type === 'section' || obj.type === 'namespace' || obj.type === 'class' || obj.type === 'mixin'\n\n        if obj.stability\n          mixin markdown(\">\" + obj.stability)\n\n        if obj.description\n          .section.description\n            .memberContent\n              mixin markdown(obj.description)\n      \n      else\n        .section.method\n          .memberContent\n            if obj.signatures\n              div.title\n                i(id='#{obj.path}', class='methodToggle methodClicker inactive icon-caret-right')\n                ul.signatures\n                  -var loops = 0;\n                  for sig in obj.signatures\n                    li.signature\n                      ul\n                        li.signature-call!= signature(obj, sig, [\"methodClicker\"])\n                          if sig.returns\n                            li.signature-returns\n                              ul.argument-types\n                                for ret in sig.returns\n                                  li.argument-type!= returnLink(obj, ret, [])\n                      -if (loops == 0)\n                        -loops = 1 // ensure that we only print ONE meta info UL per signature (some methods have multiple signatures)\n                        ul.metaInfo\n                            if obj.undocumented\n                              li\n                                span.label.undocumented Undocumented\n                            if obj.experimental\n                              li\n                                span.label.experimental Experimental\n                            if obj.readonly\n                              li\n                                span.label.read-only Read-Only\n                            if obj.chainable\n                              li\n                                span.label.chainable Chainable\n                            if obj.internal\n                              li\n                                span.label.internal Internal\n                            if obj.deprecated\n                              li\n                                span.label.deprecated\n                                  | Deprecated\n                                  if obj.deprecated.from\n                                    | &nbsp; (since #{obj.deprecated.from})\n                                    if obj.deprecated.off\n                                      | &nbsp;and will be removed on #{obj.deprecated.off}\n                            if obj.alias_of\n                              li\n                                span.label.alias.single\n                                  | Aliased as: \n                                  != link(obj.alias_of)\n                            else if obj.aliases.length\n                              li\n                                span.label.alias.multiple\n                                  | Aliased as:\n                                  ul.alias\n                                    for alias in obj.aliases\n                                      li\n                                        mixin link(alias)\n\n                            if obj.related_to\n                              li\n                                span.label.related-to\n                                  | Related to \n                                  mixin link(obj.related_to, [\"relatedToLink\"])  \n                                    \n            div.sideToggler\n\n              div(id='ellipsis_#{obj.path}', class='ellipsis_description')\n                mixin markdown(obj.short_description)\n\n\n              div.description\n\n                mixin markdown(obj.description)\n\n                if obj.bound && ~obj.bound.indexOf('#')\n                  p.note.methodized\n                    | This method can be called <em>either</em> as an \n                    != link(obj.bound, ['link-short'], 'instance method')\n                    |  <em>or</em> as a generic method. If calling as generic, pass the instance in as the first argument.\n                else if obj.bound && !~obj.bound.indexOf('#')\n                  p.note.functionalized\n                    | This method can be called <em>either</em> as an instance method <em>or</em> as a \n                    != link(obj.bound, ['link-short'], 'generic method')\n                    |. If calling as generic, pass the instance in as the first argument.\n\n                if obj.arguments && obj.arguments.length\n                  h4 Arguments\n                  != argumentTable(obj.arguments, [\"argument-list\", \"table\", \"table-striped\", \"table-bordered\"])\n\n                if obj.returns && obj.returns.length\n                  h4 Returns\n                  != returnTable(obj.returns, [\"return-list\", \"table\", \"table-striped\", \"table-bordered\"])\n\n  //- children\n  for child in obj.children.filter(function(x){return x.type === 'section'})\n    mixin article(child, parents.concat(obj))\n  for child in obj.children.filter(function(x){return x.type === 'utility'})\n    mixin article(child, parents.concat(obj))\n\n  for child in obj.children.filter(function(x){return x.type === 'constructor'})\n    - if (!constructorSection)\n      - constructorSection = true\n      h3.sectionHeader Constructors\n    mixin article(child, parents.concat(obj))\n\n  for child in obj.children.filter(function(x){return x.type === 'event'})\n    - if (!eventSection)\n      - eventSection = true\n      h3.sectionHeader Events\n    mixin article(child, parents.concat(obj), 'event')\n\n  for child in obj.children.filter(function(x){return x.type === 'class method'})  \n    - if (!methodSection)\n      - methodSection = true\n      h3.sectionHeader Methods\n    mixin article(child, parents.concat(obj))\n\n  for child in obj.children.filter(function(x){return x.type === 'class property'})\n    - if (!propertySection)\n      - propertySection = true\n      h3.sectionHeader Properties\n    mixin article(child, parents.concat(obj))\n\n  for child in obj.children.filter(function(x){return x.type === 'instance method'})\n    mixin article(child, parents.concat(obj))\n  for child in obj.children.filter(function(x){return x.type === 'instance property'})\n    mixin article(child, parents.concat(obj))\n  for child in obj.children.filter(function(x){return x.type === 'constant'})\n    mixin article(child, parents.concat(obj))\n\n\n\nmixin api()\n  -pos = 0\n  for obj in tree.children\n    -if (obj.subclasses.length == 0)\n      mixin render_starting_tabs(obj, pos)\n    -else\n      mixin render_starting_tabs(obj, pos)\n      for child in obj.children.filter(function(x){return x.type === 'namespace' || x.type === 'class' || x.type === 'mixin'})\n        -pos++\n        mixin render_starting_tabs(child, pos)\n\n\nmixin render_starting_tabs(obj, pos)\n  .classContent\n    .membersBackground\n\n    div(class=' members pos#{pos}')\n      div(class=' membersContent pos#{pos}')\n          h1.memberHeader\n            -var heading = obj.path\n            span.name #{heading}\n                  \n          -if (true || obj.filename.indexOf(\"index\") < 0)\n            ul(class='nav tabs pos#{pos}', data-tabs='tabs')\n              for selector, title in {'Events': ['event', 'events'], 'Constructors': ['constructor', 'constructors'], 'Class methods': ['class method', 'class_methods'], 'Class properties': ['class property', 'class_properties'], 'Instance methods': ['instance method', 'instance_methods'], 'Instance properties': ['instance property', 'instance_properties'], 'Constants': ['constant', 'constants']}\n                members = obj.children.filter(function(x){return x.type === selector[0]})\n                  li(class=\"dropdown\", data-dropdown=\"dropdown\")\n                    if members.length\n                       a(href=\"\\#\", class=\"dropdown-toggle\", data-toggle=\"dropdown\")\n                          != renameMemberTitle(title, members.length)\n                          b.caret\n                      ul.dropdown-menu\n                        for m in members\n                          if (m.private !== true && m.name.charAt(0) !== \"$\")\n                            li(id='dropdown_#{m.path}', data-id='#{m.path}', class='memberLink')\n                              mixin link(m, [], true)\n     -methodSection = constructorSection = propertySection = eventSection = false;\n     mixin article(obj, [])\n\nmixin short_description_list(collection)\n  ul.method-details-list\n    for obj in collection\n      if typeof obj === 'string'\n        obj = list[obj]\n      li.method-description\n        h4\n          mixin link(obj)\n        if obj.short_description\n          mixin markdown(obj.short_description)\n\nmixin link(obj, classes, short)\n  l = link(obj, classes, short)\n  != l\n\nmixin links(collection)\n  ul.method-list\n    for obj in collection\n      li\n        mixin link(obj)"
  },
  {
    "path": "doc/template/resources/csses/ace_api.css",
    "content": "/*\n  Generic \"affects everything\" stuff\n*/\n\n#wrapper .content .column2 {\n    float: none;\n}\n\n#documentation ul {\n    font-size: 13px;\n}\n\n#documentation li {\n    color: black;\n}\n\npre {\n    background-color: #FFFFFF;\n}\n\ncode {\n    font-size: 12px;\n    line-height: 16px;\n    font-family: 'Ubuntu Mono',Monaco,Consolas,monospace !important;\n    background-color: #F9F9F9;\n    border-radius: 3px 3px 3px 3px;\n    display: inline-block;\n    padding: 0 4px;\n    margin: 2px 1px;\n    color: inherit;\n}\n\n#documentation pre {\n    margin-top: 10px;\n    border-radius: none;\n    box-shadow: none;\n    background : white;\n    /*background : #f5f5f5;\n    border: 0;*/\n    \n    -webkit-border-radius: 6px 6px 0 0;\n    -moz-border-radius: 6px 6px 0 0;\n    border-radius: 6px 6px 0 0;\n    \n    padding: 5px;\n}\n\n.method pre, .event pre, .property pre  {\n    background : white;\n}\n\n#documentation pre code {\n    background-color: transparent;\n    border-radius: none;\n    box-shadow: none;\n}\n\n#documentation a code {\n    color: #00438a;\n}\n\n#documentation h2 {\n    font-size: 26px;\n}\n#documentation p {\n    font-size: 13px;\n}\n#documentation li p:last-child {\n    margin-bottom : 5px;\n}\n\n#documentation blockquote p{\n    font-size: 14px;\n    font-weight: 500;\n    line-height: 23px;\n    font-style: italic;\n}\n\n.alert-message{\n    margin-bottom : 13px;\n}\n/* \n  Header and shoulders\n*/\n\n.navbar .nav > li {\n    float:none;\n    display:inline-block;\n    *display:inline; /* ie7 fix */\n     zoom:1; /* hasLayout ie7 trigger */\n}\n\n.navbar .nav > li > a {\n    padding: 10px 15px 11px;\n}\n\n.navbar {\n    text-align:center;\n}\n\n#topSection {\n    width: 1000px;\n}\n.small_win #topSection {\n    width: 100%;\n}\n.small_win #topSection .dropdown {\n    margin-right: 40%;\n}\n.navbar .brand {\n    margin-left: 0px;\n}\n.brand {\n    background: transparent url(../images/ace_logo_menu.png) no-repeat 33px 5px;\n    width: 80px;\n    outline: none;\n    height: 40px;\n    padding: 0 10px !important;\n    border: none;\n}\n.brand.dropdown-toggle:after {\n    content: none;\n    display: block;\n    height: 40px;\n    border: none;\n}\n\n.ace_logo {\n    position: absolute;\n    top: 45px;\n    z-index: 20000;\n    left: 210px;\n}\n\n.headerTitle {\n    position: relative;\n    top: 100px;\n    left: 250px;\n}\n\n/*\n  Menu venue\n*/\n\n\nh3.api_title {\n    padding-top: 10px;\n}\n\nul.menu {\n    margin-left: 2px;\n}\n\n.menu li {\n    list-style-image: url(../images/menu_disc.png);\n    margin-bottom: 4px;\n    font-weight: 700;\n    padding-left: 10px;\n    margin-left: 0;\n}\n\n.menu li .menu-item a.menuLink, .menu li .menu-item span.menuLink {\n    color: #3E7096;\n    font-weight: 100;\n}\n.menuTwo {\n    margin-bottom: 5px;\n    margin-top: 2px;\n}\n.menuTwo li .menu-item a.menuLink {\n    color: #3E7096;\n    font-weight: 100;\n}\n\n/* need specificity to \"beat\" the above colors */\n.menu li .menu-item a.currentItem, .menuTwo li .menu-item  {\n    color: #0072bc;\n}\n\n/*\n  Members and the tabs that represent them\n*/\n\n.srolled .members {\n    width: 100%;\n/*    -webkit-box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.35);\n    -moz-box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.35);\n    box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.35); */\n    padding-bottom: 15px;\n/*    height: 31px;*/\n    position: fixed;\n}\n.shadow.members{\n    background: #edf8fd;\n    box-shadow: 0 0.1em 1em rgba(0,0,0, 0.3);\n    -moz-box-shadow: 0 0.1em 1em rgba(0,0,0, 0.3);\n    -o-box-shadow: 0 0.1em 1em rgba(0,0,0, 0.3);\n    -webkit-box-shadow: 0 0.1em 1em rgba(0,0,0, 0.3);\n}\n\n.membersContent {\n  \n/*  border-bottom: 0.1em solid #FFF;*/\n  height: 3em;\n  padding-top: 4px;\n/*  line-height: 4;*/\n/*  margin-top: -0.1em;*/\n  position: relative;\n/*  transition-property: border-color, line-height;\n  transition-duration: 125ms, 250ms;\n  transition-timing-function: ease-out, ease-out;\n  -moz-transition-property: border-color, line-height;\n  -moz-transition-duration: 125ms, 250ms;\n  -moz-transition-timing-function: ease-out, ease-out;\n  -o-transition-property: border-color, line-height;\n  -o-transition-duration: 125ms, 250ms;\n  -o-transition-timing-function: ease-out, ease-out;\n  -webkit-transition-property: border-color, line-height;\n  -webkit-transition-duration: 125ms, 250ms;\n  -webkit-transition-timing-function: ease-out, ease-out;*/\n  \n  /*transition-duration: 125ms;\n  transition-property: top;\n  transition-timing-function: ease-out;\n  \n  top : 11px;*/\n  z-index: 103;\n  padding-right: 10px;\n  margin-right: -5px;\n  /*width: 700px;*/\n}\n.srolledHeader .membersContent {\n    line-height: 3;\n}\n.srolled .membersContent {\n    /*top : 0;*/\n    width: 625px;\n    padding-left: 327px;\n    margin : 0 auto 0 auto;\n}\n\n.srolled ul.nav {\n    padding-right: 10px;\n}\n\n.membersBackground {\n/*    background-color: white;\n    position: fixed;\n    z-index: 2;\n    top: 40px;\n    left: 0px;\n    right: 0px;\n    width: 100%;\n    height: 55px;\n    opacity: 0;\n    display: none;\n    box-shadow: rgba(0, 0, 0, 0.398438) 1px 4px 6px;*/\n\n    background-color: transparent;\n    height: 47px;\n    /*width: 700px;*/\n    position: absolute;\n}\n.srolled .membersBackground {\n    position: relative;\n}\n.srolledHeader .membersBackground {\n/*    display: block;*/\n}\n.memberHeader {\n    float: left;\n    padding-right: 10px;\n    margin-bottom: 5px;\n    position: absolute;\n    padding-top: 4px;\n\n}\n\nul.tabs li:first-child ul{\n    left: -63px;\n}\n\n.tabs a.menu:after, .tabs .dropdown-toggle:after {\n    margin-top: 22px;\n}\n\n.nav .dropdown-toggle .caret  {\n    margin-top: 12px;\n    border-top-color: #6D8CA0;\n    border-bottom-color: #6D8CA0;\n}\n\nli.dropdown {\n    color: #2D2D2D;\n    font-weight: bold;\n}\n\n.editInC9 {\n    font-size: 11px;\n    color: #657383;\n}\n\n.editInC9 a {\n    color: #657383;\n    font-weight: normal;\n    position : relative;\n    top : -2px;\n}\n\n.tabs {\n    padding-top: 14px;\n    /*border-bottom: 1px solid #848484;*/\n    min-height : 27px;\n    padding-bottom : 5px;\n}\n.tabsSansBorder {\n    border: 0;\n}\n.tabs, .pills {\n    margin-bottom: 0;\n}\n.srolledHeader .members .tabs {\n    background-color: white;\n}\n\nli.dropdown {\n    color: #2D2D2D;\n    font-weight: bold;\n}\n\n.members .tabs .dropdown a,\n.members .tabs a.menu:after, \n.members .tabs .dropdown-toggle:after {\n    margin-right: 0;\n    margin-left: 6px;\n}\n\n.memberLink a {\n    margin-left: 0 !important;\n}\n.menu-dropdown {\n    min-width : 105px;\n    max-height: 350px;\n    overflow: auto;\n    border-color : rgba(0, 0, 0, 0.1);\n}\n.topbar div > ul .menu-dropdown li a:hover,\n.nav .menu-dropdown li a:hover,\n.topbar div > ul .dropdown-menu li a:hover,\n.nav .dropdown-menu li a:hover {\n    background-color: #ffffff;\n    color: #000000;\n}\n\n.tabs a.menu:after, .tabs .dropdown-toggle:after {\n    margin-top: 13px;\n    line-height: 28px;\n}\n.open .menu, .dropdown.open .menu, .open .dropdown-toggle, .dropdown.open .dropdown-toggle  {\n    background: transparent;\n    color: black;\n/*    font-weight: bold;*/\n}\n#topSection .open .menu, #topSection .dropdown.open .menu, #topSection .open .dropdown-toggle, \n#topSection .dropdown.open .dropdown-toggle  {\n    color: #bfbfbf;\n}\n\n.tabs > li {\n    font-weight: bold;\n}\n\n.tabs > li > a {\n    border: none;\n    outline: none;\n    line-height: 28px;\n    font-size: 11px;\n    padding: 0 5px;\n}\n.tabs > li > a:hover {\n    color: #000000;\n    text-decoration: none;\n    background-color: transparent;\n    border: none;\n}\n.tabs > li, .pills > li {\n    float: right;\n}\n.topbar .dropdown-menu a, .dropdown-menu a {\n    font-size: 11px;\n/*    padding: 2px 12px;*/\n    line-height: 14px;\n}\n.tabs .active > a, .tabs .active > a:hover {\n    color: #000000;\n    border: none;\n    cursor: default;\n}\n.tabs .menu-dropdown, .tabs .dropdown-menu {\n    border-radius: 0 0 6px 6px;\n    left: 10px;\n    width: 160px;\n}\n.srolled .tabs .menu-dropdown, .srolled .tabs .dropdown-menu {\n    top: 32px;\n}\n.dropdown-toggle {\n    color: #6D8CA0;\n}\n\nul.tabs .double ul, ul.tabs .triple ul, ul.tabs .quad ul{\n    width:760px;\n    margin-bottom:20px;\n    overflow:hidden;\n    border-top:1px solid #ccc;\n}\n/*ul.tabs .double li, ul.tabs .triple li, ul.tabs .quad li{\n    line-height:1.5em;\n    border-bottom:1px solid #ccc;\n    float:left;\n    display:inline;\n}*/\n\n/*\n  Center content (the \"real stuff\")\n*/\n\n#nonFooter {\n    padding-top: 40px;\n}\n#wrapper {\n    height: 100%;\n}\n\n.content {\n    height: 100%;\n}\n\nheader.filler {\n    position: relative;\n    height: 40px;\n    width: 100%;\n}\n\n/*\n.container-fluid .row-fluid {\n    width: 1000px;\n    margin-left: auto;\n    margin-right: auto;\n}*/\n\n.divider {\n    height: 3px;\n    background-color: #BEDAEA;\n    margin-bottom: 3px;\n}\n\n#sidebar h3 a,\n#sidebar h3 a:hover {\n    color: #404040;\n}\n\n#sidebarContainer {\n    padding-top: 20px;\n}\n\n#mainContent {\n    margin-left: 30px;\n}\n\n#documentation {\n    padding-top: 35px;\n    padding-bottom: 10px;\n}\n\n#documentation article.article {\n    border-top: 1px solid #e9e9e9;\n    padding: 16px 10px 2px;\n    -webkit-transition: padding 0.2s;\n    -moz-transition: padding 0.2s;\n    -o-transition: padding 0.2s;\n}\n\n#documentation h3.sectionHeader + article.article {\n    border-top: none;\n}\n\ndiv#documentation article:last-child {\n    border-bottom: 1px solid #e9e9e9;\n    padding-bottom: 40px;\n}\n#documentation article.article.methodToggleOpen {\n    background: rgba(255, 255, 255, 0.5);\n    font-size: 13px;\n    line-height: 24px;\n    margin: 0 0 10px 0;\n}\n\n#documentation article:first-child {\n    border:none;\n}\n\n.site_logo {\n    display: block;  \n    margin-left: auto;   \n    margin-right: auto;\n}\n/*\n    Edit in Cloud9, sucka\n*/\n\n.snippet pre {\n    margin-bottom: 0;\n}\n\n.snippet .toolbar {\n    -webkit-border-radius: 0 0 6px 6px;\n    -moz-border-radius: 0 0 6px 6px;\n    border-radius: 0 0 6px 6px;\n    \n    text-align: right;\n    padding: 3px 10px;\n    margin-top : -1px;\n}\n\n.snippet .filename, .snippet .toolbar {\n    font-family: Ubuntu, sans-serif;\n    font-size: 12px;\n    color: #EEE;\n}\n\n.snippet .filename {\n    padding: 0 5px 2px 5px;\n    font-size: 10px;\n    background: rgba(230,230,230,0.5);\n    padding: 0 5px 2px 5px;\n    border-radius: 0 6px 0 6px;\n    margin : 1px;\n    position : absolute;\n    right : 0;\n    top : 0;\n}\n\n.snippet .filename span{\n    color : #666;\n}\n\n.snippet .toolbar {\n    background-color: rgba(30,30,30,0.5);\n}\n\ndiv.snippet {\n    margin-bottom: 18px;\n    position : relative;\n}\n\ndiv.snippet a, div.toolbar a {\n    color: #FFF;\n}\n\n/*\n  All about signatures\n*/\n\n.signatures {\n/*    width: 800px;*/\n    margin-left: 20px;\n    margin-bottom: 5px;\n}\n.sideToggler {\n    padding-left: 20px;\n}\nul.signatures ul {\n    list-style: none;\n    display: inline;\n}\n\nli.signature {\n    list-style: none;\n}\n\n.signature ul {\n    padding: 0;\n    margin: 0;\n}\n\n.signature li {\n    display: inline;\n}\n\n.signature ul.argument-types::before {\n    content: '→';\n    margin: 0 5px;\n}\n\n.signature li.argument-type::after {\n    content: '|';\n    padding: 0 5px 0 5px;\n}\n\n.signature li.argument-type:last-child:after {\n    content: '';\n    padding: 0 5px 0 5px;\n}\n\n.member-name {\n    color: #4397cd;\n    font-weight: bold;\n    text-decoration: none;\n    cursor: pointer;\n    padding-right: 3px;\n}\n\n.signature-call {\n    cursor: pointer;\n}\n\n#documentation .signature-call a {\n    color: #8e487e;\n}\n\n.sigClassName {\n    display: none;\n}\n\n.eventObjName {\n    font-style: italic;\n}\n.eventListenerStart, .eventListenerClose, .eventFunctionOpen, .eventFunctionClose {\n    color: #999999;\n}\n.eventMember {\n    padding-right: 0px;\n}\n\n.metaInfo {\n    float: right;\n    z-index: 1;\n    position: relative;\n}\n\n.chainable {\n    background-color: #0072bc;\n    color: #ffffff;\n}\n\n.deprecated {\n    background-color: #f7941d;\n    color: #ffffff;\n}\n\n.alias {\n    background-color: #6c951e;\n    color: #ffffff;\n}\n\n.related-to {\n    background-color: #89289a;\n    color: #ffffff;\n    font-size: 10px;\n    padding: 2px 5px 3px;\n    text-transform: capitalize;\n}\n\n.undocumented {\n    background-color: #B94A48;\n    color: #ffffff;\n}\n\n#documentation .alias a, #documentation .related-to a {\n    color: #ffffff;\n    /* text-decoration: underline; */ \n}\n#documentation .alias a:hover, #documentation .related-to a:hover {\n    text-decoration: none;\n}\n.#documentation alias:hover, #documentation .related-to:hover {\n    opacity: 0.8;\n    cursor: pointer;\n}\n.memberContent .title {\n    \n}\n.memberContent .description {\n    position:relative;\n    /*top: -13px;*/\n    display: none;\n}\n.snip-container .actions .toggle-plaintext label {\n    margin-top: 1px;\n    padding-top: 0;\n    text-align: left;\n}\n.snip-container .actions .toggle-plaintext input {\n    margin-top: 4px !important;\n}\n.snip-container label {\n    color: #ffffff;\n}\n.description h4 {\n    padding-top: 10px;\n    font-size: 18px;\n    line-height : 18px;\n}\n\n.table-striped tbody tr:nth-child(odd) td, .table-striped tbody tr:nth-child(odd) th {\n    background-color: #F9F9F9;\n}\n.table-striped tbody tr:nth-child(even) td, .table-striped tbody tr:nth-child(even) th {\n    background-color: #fbfbfb;\n} \n\n.argument-list {\n    margin-bottom : 13px;\n}\n.argName {\n    font-style: italic;\n}\n\n\n/*\n  Everyday I'm togglin'\n*/\n\n#documentation i.methodToggle {\n    cursor: pointer;\n    color: #9f9f9f;\n    padding-top: 2px;\n    float: left;\n}\n#documentation i.methodToggle.methodToggleHover {\n    text-shadow: 0 0 10px #4699d5;\n    color: #4699d5;\n}\n#documentation i.methodToggle.active {\n    text-shadow: 0 0 10px #4699d5;\n    color: #4699d5;\n    /* Safari */\n    -webkit-transform: rotate(45deg);\n    \n    /* Firefox */\n    -moz-transform: rotate(45deg);\n    \n    /* IE */\n    -ms-transform: rotate(45deg);\n    \n    /* Opera */\n    -o-transform: rotate(45deg);\n    padding-top: 9px;\n}\n\n#documentation h3.sectionHeader {\n    line-height : 24px;\n}\n\ndiv.method {\n    position: relative;\n}\n\n.methodToggle a {\n    color: #fff;\n    border-bottom: 0px;\n    text-decoration: none;\n}\n\nh3.methodToggle {\n    height               : 13px; \n    width                : 8px; \n    background-position  : 0px 0px; \n    position: absolute;\n    top: -20px;\n    background-image     : url(../images/member-sprites.png); \n    background-color     : transparent; \n    background-repeat    : no-repeat; \n    overflow: hidden;\n    left: 0px;\n}\n\nh3.methodToggleHover {\n    /* background-position  : 0px -28px; */\n}\n\nh3.methodToggle.inactive {\n    top: 4px;\n}\n\nh3.methodToggle.active {\n    top:                  6px;\n    height               : 13px; \n    width                : 8px; \n    background-position  : 0px -59px; \n} \n\n.hidden {\n    display: none;\n    visibility: hidden;\n}\n\n.hiddenSpan {\n    display: none;\n}\n\n.ellipsis_description, .short_description {\n/*    width: 800px;*/\n}\n.methodToggleOpen .ellipsis_description {\n    display: none;\n}\n.sideToggler .short_description,\n.sideToggler .description{\n    display: none;\n}\n.methodToggleOpen .short_description,\n.methodToggleOpen .description {\n    display: block;\n}\n.description td p {\n    margin: 0;\n}\n/*\n  Footer? I hardly know her\n*/\n\n#footer {\n    width:100%;\n    background: #101010 url(../images/dashed_back.png) repeat 0 0;\n    font-size: 12px;\n    color: white;\n    height: 40px;\n}\n#footer .footerInner {\n    padding-left: 300px;\n    margin-left: auto;\n    margin-right: auto;\n    min-height: 40px;\n}\n#footer .footer-text {\n    display: block;\n    font-size: 12px;\n    float: right;\n}\n#footer div.footerInner div.footer-text p {\n    font-size: 12px;\n    font-family: Arial;\n    line-height: 18px;\n    margin: 10px 15px 0px 1px;\n}\n\n#footer a, #footer a:hover {\n    color: #8DD0FF;\n}\n\n.logoText, .logoImg {\n    /*position: absolute;*/\n    margin-bottom: 5px;\n}\n\n.logoImg {\n    top: 40px;\n}\n.topbar div > ul .menu-dropdown li a:hover,\n.nav .menu-dropdown li a:hover,\n.topbar div > ul .dropdown-menu li a:hover,\n.nav .dropdown-menu li a:hover {\n  background-color: #191919;\n  background-repeat: repeat-x;\n  background-image: -khtml-gradient(linear, left top, left bottom, from(#292929), to(#191919));\n  background-image: -moz-linear-gradient(top, #292929, #191919);\n  background-image: -ms-linear-gradient(top, #292929, #191919);\n  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #292929), color-stop(100%, #191919));\n  background-image: -webkit-linear-gradient(top, #292929, #191919);\n  background-image: -o-linear-gradient(top, #292929, #191919);\n  background-image: linear-gradient(top, #292929, #191919);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#292929', endColorstr='#191919', GradientType=0);\n  color: #ffffff;\n}\n\n.alert-message.block-message {\n    background: #fefaca;\n    border-color : #fefaca;\n    padding : 8px 14px 8px 14px;\n}\n\nbody .dsq-reply{\n    margin-top : 10px;\n}\n\n#disqus_thread{\n    border-top : 1px solid #ddd;\n    margin-top : 30px;\n}\n\n#disqus_thread h3, body #dsq-content h3 {\n    font-size : 12px;\n    margin : 0 0 20px 0;\n    line-height : 12px;\n}\nbody #dsq-reply h3{\n    font-size : 18px;\n    line-height : 18px;\n    margin : 15px 0 20px 0;\n}\n\n#disqus_thread select{\n    font-size : 11px;\n    height : 20px;\n    color : #444;\n}\n\n#dsq-global-toolbar, #dsq-pagination, .dsq-trackback-url{\n    display : none;\n}\n"
  },
  {
    "path": "doc/template/resources/javascripts/bbq.js",
    "content": "/*\n * jQuery BBQ: Back Button & Query Library - v1.2.1 - 2/17/2010\n * http://benalman.com/projects/jquery-bbq-plugin/\n * \n * Copyright (c) 2010 \"Cowboy\" Ben Alman\n * Dual licensed under the MIT and GPL licenses.\n * http://benalman.com/about/license/\n */\n(function($,p){var i,m=Array.prototype.slice,r=decodeURIComponent,a=$.param,c,l,v,b=$.bbq=$.bbq||{},q,u,j,e=$.event.special,d=\"hashchange\",A=\"querystring\",D=\"fragment\",y=\"elemUrlAttr\",g=\"location\",k=\"href\",t=\"src\",x=/^.*\\?|#.*$/g,w=/^.*\\#/,h,C={};function E(F){return typeof F===\"string\"}function B(G){var F=m.call(arguments,1);return function(){return G.apply(this,F.concat(m.call(arguments)))}}function n(F){return F.replace(/^[^#]*#?(.*)$/,\"$1\")}function o(F){return F.replace(/(?:^[^?#]*\\?([^#]*).*$)?.*/,\"$1\")}function f(H,M,F,I,G){var O,L,K,N,J;if(I!==i){K=F.match(H?/^([^#]*)\\#?(.*)$/:/^([^#?]*)\\??([^#]*)(#?.*)/);J=K[3]||\"\";if(G===2&&E(I)){L=I.replace(H?w:x,\"\")}else{N=l(K[2]);I=E(I)?l[H?D:A](I):I;L=G===2?I:G===1?$.extend({},I,N):$.extend({},N,I);L=a(L);if(H){L=L.replace(h,r)}}O=K[1]+(H?\"#\":L||!K[1]?\"?\":\"\")+L+J}else{O=M(F!==i?F:p[g][k])}return O}a[A]=B(f,0,o);a[D]=c=B(f,1,n);c.noEscape=function(G){G=G||\"\";var F=$.map(G.split(\"\"),encodeURIComponent);h=new RegExp(F.join(\"|\"),\"g\")};c.noEscape(\",/\");$.deparam=l=function(I,F){var H={},G={\"true\":!0,\"false\":!1,\"null\":null};$.each(I.replace(/\\+/g,\" \").split(\"&\"),function(L,Q){var K=Q.split(\"=\"),P=r(K[0]),J,O=H,M=0,R=P.split(\"][\"),N=R.length-1;if(/\\[/.test(R[0])&&/\\]$/.test(R[N])){R[N]=R[N].replace(/\\]$/,\"\");R=R.shift().split(\"[\").concat(R);N=R.length-1}else{N=0}if(K.length===2){J=r(K[1]);if(F){J=J&&!isNaN(J)?+J:J===\"undefined\"?i:G[J]!==i?G[J]:J}if(N){for(;M<=N;M++){P=R[M]===\"\"?O.length:R[M];O=O[P]=M<N?O[P]||(R[M+1]&&isNaN(R[M+1])?{}:[]):J}}else{if($.isArray(H[P])){H[P].push(J)}else{if(H[P]!==i){H[P]=[H[P],J]}else{H[P]=J}}}}else{if(P){H[P]=F?i:\"\"}}});return H};function z(H,F,G){if(F===i||typeof F===\"boolean\"){G=F;F=a[H?D:A]()}else{F=E(F)?F.replace(H?w:x,\"\"):F}return l(F,G)}l[A]=B(z,0);l[D]=v=B(z,1);$[y]||($[y]=function(F){return $.extend(C,F)})({a:k,base:k,iframe:t,img:t,input:t,form:\"action\",link:k,script:t});j=$[y];function s(I,G,H,F){if(!E(H)&&typeof H!==\"object\"){F=H;H=G;G=i}return this.each(function(){var L=$(this),J=G||j()[(this.nodeName||\"\").toLowerCase()]||\"\",K=J&&L.attr(J)||\"\";L.attr(J,a[I](K,H,F))})}$.fn[A]=B(s,A);$.fn[D]=B(s,D);b.pushState=q=function(I,F){if(E(I)&&/^#/.test(I)&&F===i){F=2}var H=I!==i,G=c(p[g][k],H?I:{},H?F:2);p[g][k]=G+(/#/.test(G)?\"\":\"#\")};b.getState=u=function(F,G){return F===i||typeof F===\"boolean\"?v(F):v(G)[F]};b.removeState=function(F){var G={};if(F!==i){G=u();$.each($.isArray(F)?F:arguments,function(I,H){delete G[H]})}q(G,2)};e[d]=$.extend(e[d],{add:function(F){var H;function G(J){var I=J[D]=c();J.getState=function(K,L){return K===i||typeof K===\"boolean\"?l(I,K):l(I,L)[K]};H.apply(this,arguments)}if($.isFunction(F)){H=F;return G}else{H=F.handler;F.handler=G}}})})(jQuery,this);\n/*\n * jQuery hashchange event - v1.2 - 2/11/2010\n * http://benalman.com/projects/jquery-hashchange-plugin/\n * \n * Copyright (c) 2010 \"Cowboy\" Ben Alman\n * Dual licensed under the MIT and GPL licenses.\n * http://benalman.com/about/license/\n */\n(function($,i,b){var j,k=$.event.special,c=\"location\",d=\"hashchange\",l=\"href\",f=$.browser,g=document.documentMode,h=f.msie&&(g===b||g<8),e=\"on\"+d in i&&!h;function a(m){m=m||i[c][l];return m.replace(/^[^#]*#?(.*)$/,\"$1\")}$[d+\"Delay\"]=100;k[d]=$.extend(k[d],{setup:function(){if(e){return false}$(j.start)},teardown:function(){if(e){return false}$(j.stop)}});j=(function(){var m={},r,n,o,q;function p(){o=q=function(s){return s};if(h){n=$('<iframe src=\"javascript:0\"/>').hide().insertAfter(\"body\")[0].contentWindow;q=function(){return a(n.document[c][l])};o=function(u,s){if(u!==s){var t=n.document;t.open().close();t[c].hash=\"#\"+u}};o(a())}}m.start=function(){if(r){return}var t=a();o||p();(function s(){var v=a(),u=q(t);if(v!==t){o(t=v,u);$(i).trigger(d)}else{if(u!==t){i[c][l]=i[c][l].replace(/#.*/,\"\")+\"#\"+u}}r=setTimeout(s,$[d+\"Delay\"])})()};m.stop=function(){if(!n){r&&clearTimeout(r);r=0}};return m})()})(jQuery,this);"
  },
  {
    "path": "doc/template/resources/javascripts/bootstrap.js",
    "content": "/* ============================================================\n * bootstrap-dropdown.js v2.1.1\n * http://twitter.github.com/bootstrap/javascript.html#dropdowns\n * ============================================================\n * Copyright 2012 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ============================================================ */\n\n\n!function ($) {\n\n  \"use strict\"; // jshint ;_;\n\n\n /* DROPDOWN CLASS DEFINITION\n  * ========================= */\n\n  var toggle = '[data-toggle=dropdown]'\n    , Dropdown = function (element) {\n        var $el = $(element).on('click.dropdown.data-api', this.toggle)\n        $('html').on('click.dropdown.data-api', function () {\n          $el.parent().removeClass('open')\n        })\n      }\n\n  Dropdown.prototype = {\n\n    constructor: Dropdown\n\n  , toggle: function (e) {\n      var $this = $(this)\n        , $parent\n        , isActive\n\n      if ($this.is('.disabled, :disabled')) return\n\n      $parent = getParent($this)\n\n      isActive = $parent.hasClass('open')\n\n      clearMenus()\n\n      if (!isActive) {\n        $parent.toggleClass('open')\n        $this.focus()\n      }\n\n      return false\n    }\n\n  , keydown: function (e) {\n      var $this\n        , $items\n        , $active\n        , $parent\n        , isActive\n        , index\n\n      if (!/(38|40|27)/.test(e.keyCode)) return\n\n      $this = $(this)\n\n      e.preventDefault()\n      e.stopPropagation()\n\n      if ($this.is('.disabled, :disabled')) return\n\n      $parent = getParent($this)\n\n      isActive = $parent.hasClass('open')\n\n      if (!isActive || (isActive && e.keyCode == 27)) return $this.click()\n\n      $items = $('[role=menu] li:not(.divider) a', $parent)\n\n      if (!$items.length) return\n\n      index = $items.index($items.filter(':focus'))\n\n      if (e.keyCode == 38 && index > 0) index--                                        // up\n      if (e.keyCode == 40 && index < $items.length - 1) index++                        // down\n      if (!~index) index = 0\n\n      $items\n        .eq(index)\n        .focus()\n    }\n\n  }\n\n  function clearMenus() {\n    getParent($(toggle))\n      .removeClass('open')\n  }\n\n  function getParent($this) {\n    var selector = $this.attr('data-target')\n      , $parent\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, '') //strip for ie7\n    }\n\n    $parent = $(selector)\n    $parent.length || ($parent = $this.parent())\n\n    return $parent\n  }\n\n\n  /* DROPDOWN PLUGIN DEFINITION\n   * ========================== */\n\n  $.fn.dropdown = function (option) {\n    return this.each(function () {\n      var $this = $(this)\n        , data = $this.data('dropdown')\n      if (!data) $this.data('dropdown', (data = new Dropdown(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  $.fn.dropdown.Constructor = Dropdown\n\n\n  /* APPLY TO STANDARD DROPDOWN ELEMENTS\n   * =================================== */\n\n  $(function () {\n    $('html')\n      .on('click.dropdown.data-api touchstart.dropdown.data-api', clearMenus)\n    $('body')\n      .on('click.dropdown touchstart.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })\n      .on('click.dropdown.data-api touchstart.dropdown.data-api'  , toggle, Dropdown.prototype.toggle)\n      .on('keydown.dropdown.data-api touchstart.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown)\n  })\n\n}(window.jQuery);\n/* ========================================================\n * bootstrap-tab.js v2.1.1\n * http://twitter.github.com/bootstrap/javascript.html#tabs\n * ========================================================\n * Copyright 2012 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================== */\n\n\n!function ($) {\n\n  \"use strict\"; // jshint ;_;\n\n\n /* TAB CLASS DEFINITION\n  * ==================== */\n\n  var Tab = function (element) {\n    this.element = $(element)\n  }\n\n  Tab.prototype = {\n\n    constructor: Tab\n\n  , show: function () {\n      var $this = this.element\n        , $ul = $this.closest('ul:not(.dropdown-menu)')\n        , selector = $this.attr('data-target')\n        , previous\n        , $target\n        , e\n\n      if (!selector) {\n        selector = $this.attr('href')\n        selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') //strip for ie7\n      }\n\n      if ( $this.parent('li').hasClass('active') ) return\n\n      previous = $ul.find('.active a').last()[0]\n\n      e = $.Event('show', {\n        relatedTarget: previous\n      })\n\n      $this.trigger(e)\n\n      if (e.isDefaultPrevented()) return\n\n      $target = $(selector)\n\n      this.activate($this.parent('li'), $ul)\n      this.activate($target, $target.parent(), function () {\n        $this.trigger({\n          type: 'shown'\n        , relatedTarget: previous\n        })\n      })\n    }\n\n  , activate: function ( element, container, callback) {\n      var $active = container.find('> .active')\n        , transition = callback\n            && $.support.transition\n            && $active.hasClass('fade')\n\n      function next() {\n        $active\n          .removeClass('active')\n          .find('> .dropdown-menu > .active')\n          .removeClass('active')\n\n        element.addClass('active')\n\n        if (transition) {\n          element[0].offsetWidth // reflow for transition\n          element.addClass('in')\n        } else {\n          element.removeClass('fade')\n        }\n\n        if ( element.parent('.dropdown-menu') ) {\n          element.closest('li.dropdown').addClass('active')\n        }\n\n        callback && callback()\n      }\n\n      transition ?\n        $active.one($.support.transition.end, next) :\n        next()\n\n      $active.removeClass('in')\n    }\n  }\n\n\n /* TAB PLUGIN DEFINITION\n  * ===================== */\n\n  $.fn.tab = function ( option ) {\n    return this.each(function () {\n      var $this = $(this)\n        , data = $this.data('tab')\n      if (!data) $this.data('tab', (data = new Tab(this)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  $.fn.tab.Constructor = Tab\n\n\n /* TAB DATA-API\n  * ============ */\n\n  $(function () {\n    $('body').on('click.tab.data-api', '[data-toggle=\"tab\"], [data-toggle=\"pill\"]', function (e) {\n      e.preventDefault()\n      $(this).tab('show')\n    })\n  })\n\n}(window.jQuery);\n/* ==========================================================\n * bootstrap-affix.js v2.1.1\n * http://twitter.github.com/bootstrap/javascript.html#affix\n * ==========================================================\n * Copyright 2012 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ========================================================== */\n\n\n!function ($) {\n\n  \"use strict\"; // jshint ;_;\n\n\n /* AFFIX CLASS DEFINITION\n  * ====================== */\n\n  var Affix = function (element, options) {\n    this.options = $.extend({}, $.fn.affix.defaults, options)\n    this.$window = $(window).on('scroll.affix.data-api', $.proxy(this.checkPosition, this))\n    this.$element = $(element)\n    this.checkPosition()\n  }\n\n  Affix.prototype.checkPosition = function () {\n    if (!this.$element.is(':visible')) return\n\n    var scrollHeight = $(document).height()\n      , scrollTop = this.$window.scrollTop()\n      , position = this.$element.offset()\n      , offset = this.options.offset\n      , offsetBottom = offset.bottom\n      , offsetTop = offset.top\n      , reset = 'affix affix-top affix-bottom'\n      , affix\n\n    if (typeof offset != 'object') offsetBottom = offsetTop = offset\n    if (typeof offsetTop == 'function') offsetTop = offset.top()\n    if (typeof offsetBottom == 'function') offsetBottom = offset.bottom()\n\n    affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ?\n      false    : offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ?\n      'bottom' : offsetTop != null && scrollTop <= offsetTop ?\n      'top'    : false\n\n    if (this.affixed === affix) return\n\n    this.affixed = affix\n    this.unpin = affix == 'bottom' ? position.top - scrollTop : null\n\n    this.$element.removeClass(reset).addClass('affix' + (affix ? '-' + affix : ''))\n  }\n\n\n /* AFFIX PLUGIN DEFINITION\n  * ======================= */\n\n  $.fn.affix = function (option) {\n    return this.each(function () {\n      var $this = $(this)\n        , data = $this.data('affix')\n        , options = typeof option == 'object' && option\n      if (!data) $this.data('affix', (data = new Affix(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  $.fn.affix.Constructor = Affix\n\n  $.fn.affix.defaults = {\n    offset: 0\n  }\n\n\n /* AFFIX DATA-API\n  * ============== */\n\n  $(window).on('load', function () {\n    $('[data-spy=\"affix\"]').each(function () {\n      var $spy = $(this)\n        , data = $spy.data()\n\n      data.offset = data.offset || {}\n\n      data.offsetBottom && (data.offset.bottom = data.offsetBottom)\n      data.offsetTop && (data.offset.top = data.offsetTop)\n\n      $spy.affix(data)\n    })\n  })\n\n\n}(window.jQuery);"
  },
  {
    "path": "doc/template/resources/javascripts/clicker.js",
    "content": "function setupClicker() {\n  // when hovering over arrow, add highlight (only if inactive)\n  $(\"i.methodToggle\").hover(function () {\n      if (!$(\"i.methodToggle\").hasClass('active'))\n        $(this).addClass(\"methodToggleHover\");\n    },\n    function () {\n      $(this).removeClass(\"methodToggleHover\");\n    }\n  );\n\n  function handleClick(e, linkHref) {\n      //if (linkHref.indexOf(\"nav=api&api=\") >= 0)\n      //  return;\n      if (linkHref == \"api\")\n        return;\n        \n      e.preventDefault();\n      \n      var dstElem;\n      if (linkHref) {\n          dstElem = $(\"article[id='\" + linkHref + \"']\");\n      }\n      \n      var $article = (dstElem || $(this)).closest('.article'),\n          $arrow   = $('i.methodClicker', $article);\n\n      if (!$article.hasClass('methodToggleOpen') || this.force) {\n          $article.addClass('methodToggleOpen');\n          $arrow.removeClass('inactive').addClass('active');\n\n          if (!$arrow[0])\n            return;\n\n          var data = $arrow[0].id.replace(/^js_/, \"\");\n          //var state = {};\n          //state.section = data;\n          //$.bbq.pushState(state);\n          \n          scrollTo(null, data);\n      }\n      else {\n          $article.removeClass('methodToggleOpen');\n          $arrow.removeClass('active').addClass('inactive');\n      }\n  }\n  \n  function transformHash(e) {\n      // some bs to figure out link hash\n      var hashId = (e.srcElement ? e.srcElement.href : (e.hash || e.target.href)) || e.currentTarget.hash;\n      \n      handleClick(e, hashId.substring(hashId.indexOf(\"#\") + 1));\n  }\n  \n  // for the arrow\n  $(\"i.methodToggle\").click(handleClick);\n  \n  // for the signature\n  $('.member-name').click(handleClick);\n  \n  // for the top dropdown\n  $('li.memberLink a').click(transformHash);\n  \n  //$('a[href^=\"#\"]').click(transformHash);\n  \n  $('.related-to', '.metaInfo').click(function(){\n      location.hash = $(this).find('a').attr('href').split('#')[1];\n  });\n}"
  },
  {
    "path": "doc/template/resources/javascripts/disqus-ext.js",
    "content": "function setupDisqus(href) {\n    var disqus_shortname = 'aceapi';\n    \n    //var paths = window.location.pathname.split(\"/\");\n    //var fileName = paths[paths.length - 2] + \"/\" + paths[paths.length - 1];\n    \n    //var disqus_identifier = fileName;\n    var disqus_identifier =  href.substring(2);\n    \n    (function() {\n        if (document.getElementById(\"disqusScript\") === null) {\n            var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;\n            dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';\n            (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);       \n        }\n    })();\n}"
  },
  {
    "path": "doc/template/resources/javascripts/jquery-scrollspy.js",
    "content": "/*!\n * jQuery Scrollspy Plugin\n * Author: @sxalexander\n * Licensed under the MIT license\n */\n\n\n;(function ( $, window, document, undefined ) {\n\n    $.fn.extend({\n      scrollspy: function ( options ) {\n        \n          var defaults = {\n            min: 0,\n            max: 0,\n            mode: 'vertical',\n            buffer: 0,\n            container: window,\n            onEnter: options.onEnter ? options.onEnter : [],\n            onLeave: options.onLeave ? options.onLeave : [],\n            onTick: options.onTick ? options.onTick : []\n          }\n          \n          var options = $.extend( {}, defaults, options );\n\n          return this.each(function (i) {\n\n              var element = this;\n              var o = options;\n              var $container = $(o.container);\n              var mode = o.mode;\n              var buffer = o.buffer;\n              var enters = leaves = 0;\n              var inside = false;\n                            \n              /* add listener to container */\n              $container.bind('scroll', function(e){\n                  var position = {top: $(this).scrollTop(), left: $(this).scrollLeft()};\n                  var xy = (mode == 'vertical') ? position.top + buffer : position.left + buffer;\n                  var max = o.max;\n                  var min = o.min;\n                  \n                  /* fix max */\n                  if($.isFunction(o.max)){\n                    max = o.max();\n                  }\n\n                  /* fix max */\n                  if($.isFunction(o.min)){\n                    min = o.min();\n                  }\n\n                  if(max == 0){\n                      max = (mode == 'vertical') ? $container.height() : $container.outerWidth() + $(element).outerWidth();\n                  }\n                  \n                  /* if we have reached the minimum bound but are below the max ... */\n                  if(xy >= o.min && xy <= max){\n                    /* trigger enter event */\n                    if(!inside){\n                       inside = true;\n                       enters++;\n                       \n                       /* fire enter event */\n                       $(element).trigger('scrollEnter', {position: position})\n                       if($.isFunction(o.onEnter)){\n                         o.onEnter(element, position);\n                       }\n                      \n                     }\n                     \n                     /* triger tick event */\n                     $(element).trigger('scrollTick', {position: position, inside: inside, enters: enters, leaves: leaves})\n                     if($.isFunction(o.onTick)){\n                       o.onTick(element, position, inside, enters, leaves);\n                     }\n                  }else{\n                    \n                    if(inside){\n                      inside = false;\n                      leaves++;\n                      /* trigger leave event */\n                      $(element).trigger('scrollLeave', {position: position, leaves:leaves})\n\n                      if($.isFunction(o.onLeave)){\n                        o.onLeave(element, position);\n                      }\n                    }\n                  }\n              }); \n\n          });\n      }\n\n    })\n\n    \n})( jQuery, window );\n"
  },
  {
    "path": "doc/template/resources/javascripts/jquery.collapse.js",
    "content": "/*!\n * Collapse plugin for jQuery\n * http://github.com/danielstocks/jQuery-Collapse/\n *\n * @author Daniel Stocks (http://webcloud.se)\n * @version 0.9.1\n * @updated 17-AUG-2010\n * \n * Copyright 2010, Daniel Stocks\n * Released under the MIT, BSD, and GPL Licenses.\n */\n \n(function($) {\n    \n    // Use a cookie counter to allow multiple instances of the plugin\n    var cookieCounter = 0;\n    \n    $.fn.extend({\n        collapse: function(options) {\n            \n            var defaults = {\n                head : \"h3\",\n                group : \"div, ul\",\n                cookieName : \"collapse\",\n                // Default function for showing content\n                show: function() { \n                    this.show();\n                },\n                // Default function for hiding content\n                hide: function() { \n                    this.hide();\n                }\n            };\n            var op = $.extend(defaults, options);\n            \n            // Default CSS classes\n            var active = \"active\",\n                inactive = \"inactive\";\n            \n            return this.each(function() {\n                \n                // Increment coookie counter to ensure cookie name integrity\n                cookieCounter++;\n                var obj = $(this),\n                    // Find all headers and wrap them in <a> for accessibility.\n                    sections = obj.find(op.head).wrapInner('<a href=\"#\"></a>'),\n                    l = sections.length,\n                    cookie = op.cookieName + \"_\" + cookieCounter;\n                    // Locate all panels directly following a header\n                    var panel = obj.find(op.head).map(function() {\n                        var head = $(this)\n                        if(!head.hasClass(active)) {\n                            return head.next(op.group).hide()[0];\n                        }\n                        return head.next(op.group)[0];\n                    });\n    \n                // Bind event for showing content\n                obj.bind(\"show\", function(e, bypass) {\n                    var obj = $(e.target);\n                    // ARIA attribute\n                    obj.attr('aria-hidden', false)\n                        .prev()\n                        .removeClass(inactive)\n                        .addClass(active);\n                    // Bypass method for instant display\n                    if(bypass) {\n                        obj.show();\n                    } else {\n                        op.show.call(obj);\n                    }\n                });\n\n                // Bind event for hiding content\n                obj.bind(\"hide\", function(e, bypass) {\n                    var obj = $(e.target);\n                    obj.attr('aria-hidden', true)\n                        .prev()\n                        .removeClass(active)\n                        .addClass(inactive);\n                    if(bypass) {\n                        obj.hide();\n                    } else {\n                        op.hide.call(obj);\n                    }\n                });\n                \n                // Look for existing cookies\n                if(cookieSupport) {\n                    for (var c=0;c<=l;c++) {\n                        var val = $.cookie(cookie + c);\n                        // Show content if associating cookie is found\n                        if ( val == c + \"open\" ) {\n                            panel.eq(c).trigger('show', [true]);\n                        // Hide content\n                        } else if ( val == c + \"closed\") {\n                            panel.eq(c).trigger('hide', [true]);\n                        }\n                    }\n                }\n                \n                // Delegate click event to show/hide content.\n                obj.bind(\"click\", function(e) {\n                    var t = $(e.target);\n                    // Check if header was clicked\n                    if(!t.is(op.head)) {\n                        // What about link inside header.\n                        if ( t.parent().is(op.head) ) {\n                            t = t.parent();\n                        } else {\n                            return;\n                        }\n                        e.preventDefault();\n                    }\n                    // Figure out what position the clicked header has.\n                    var num = sections.index(t),\n                        cookieName = cookie + num,\n                        cookieVal = num,\n                        content = t.next(op.group);\n                    // If content is already active, hide it.\n                    if(t.hasClass(active)) {\n                        content.trigger('hide');\n                        cookieVal += 'closed';\n                        if(cookieSupport) {\n                            $.cookie(cookieName, cookieVal, { path: '/', expires: 10 });\n                        }\n                        return;\n                    }\n                    // Otherwise show it.\n                    content.trigger('show');\n                    cookieVal += 'open';\n                    if(cookieSupport) {\n                        $.cookie(cookieName, cookieVal, { path: '/', expires: 10 });\n                    }\n                });\n            });\n        }\n    });\n\n    // Make sure can we eat cookies without getting into trouble.\n    var cookieSupport = (function() {\n        try {\n            $.cookie('x', 'x', { path: '/', expires: 10 });\n            $.cookie('x', null);\n        }\n        catch(e) {\n            return false;\n        }\n        return true;\n    })();\n})(jQuery);"
  },
  {
    "path": "doc/template/resources/javascripts/jquery.cookie.js",
    "content": "/**\n * Cookie plugin\n *\n * Copyright (c) 2006 Klaus Hartl (stilbuero.de)\n * Dual licensed under the MIT and GPL licenses:\n * http://www.opensource.org/licenses/mit-license.php\n * http://www.gnu.org/licenses/gpl.html\n *\n */\n\n/**\n * Create a cookie with the given name and value and other optional parameters.\n *\n * @example $.cookie('the_cookie', 'the_value');\n * @desc Set the value of a cookie.\n * @example $.cookie('the_cookie', 'the_value', { expires: 7, path: '/', domain: 'jquery.com', secure: true });\n * @desc Create a cookie with all available options.\n * @example $.cookie('the_cookie', 'the_value');\n * @desc Create a session cookie.\n * @example $.cookie('the_cookie', null);\n * @desc Delete a cookie by passing null as value. Keep in mind that you have to use the same path and domain\n *       used when the cookie was set.\n *\n * @param String name The name of the cookie.\n * @param String value The value of the cookie.\n * @param Object options An object literal containing key/value pairs to provide optional cookie attributes.\n * @option Number|Date expires Either an integer specifying the expiration date from now on in days or a Date object.\n *                             If a negative value is specified (e.g. a date in the past), the cookie will be deleted.\n *                             If set to null or omitted, the cookie will be a session cookie and will not be retained\n *                             when the the browser exits.\n * @option String path The value of the path atribute of the cookie (default: path of page that created the cookie).\n * @option String domain The value of the domain attribute of the cookie (default: domain of page that created the cookie).\n * @option Boolean secure If true, the secure attribute of the cookie will be set and the cookie transmission will\n *                        require a secure protocol (like HTTPS).\n * @type undefined\n *\n * @name $.cookie\n * @cat Plugins/Cookie\n * @author Klaus Hartl/klaus.hartl@stilbuero.de\n */\n\n/**\n * Get the value of a cookie with the given name.\n *\n * @example $.cookie('the_cookie');\n * @desc Get the value of a cookie.\n *\n * @param String name The name of the cookie.\n * @return The value of the cookie.\n * @type String\n *\n * @name $.cookie\n * @cat Plugins/Cookie\n * @author Klaus Hartl/klaus.hartl@stilbuero.de\n */\njQuery.cookie = function(name, value, options) {\n    if (typeof value != 'undefined') { // name and value given, set cookie\n        options = options || {};\n        if (value === null) {\n            value = '';\n            options.expires = -1;\n        }\n        var expires = '';\n        if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {\n            var date;\n            if (typeof options.expires == 'number') {\n                date = new Date();\n                date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));\n            } else {\n                date = options.expires;\n            }\n            expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE\n        }\n        // CAUTION: Needed to parenthesize options.path and options.domain\n        // in the following expressions, otherwise they evaluate to undefined\n        // in the packed version for some reason...\n        var path = options.path ? '; path=' + (options.path) : '';\n        var domain = options.domain ? '; domain=' + (options.domain) : '';\n        var secure = options.secure ? '; secure' : '';\n        document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');\n    } else { // only name given, get cookie\n        var cookieValue = null;\n        if (document.cookie && document.cookie != '') {\n            var cookies = document.cookie.split(';');\n            for (var i = 0; i < cookies.length; i++) {\n                var cookie = jQuery.trim(cookies[i]);\n                // Does this cookie string begin with the name we want?\n                if (cookie.substring(0, name.length + 1) == (name + '=')) {\n                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));\n                    break;\n                }\n            }\n        }\n        return cookieValue;\n    }\n};"
  },
  {
    "path": "doc/template/resources/javascripts/plugins.js",
    "content": "window.log=function(){log.history=log.history||[];log.history.push(arguments);if(this.console){arguments.callee=arguments.callee.caller;var a=[].slice.call(arguments);(typeof console.log===\"object\"?log.apply.call(console.log,console,a):console.log.apply(console,a))}};\n(function(b){function c(){}for(var d=\"assert,count,debug,dir,dirxml,error,exception,group,groupCollapsed,groupEnd,info,log,timeStamp,profile,profileEnd,time,timeEnd,trace,warn\".split(\",\"),a;a=d.pop();){b[a]=b[a]||c}})((function(){try\n{console.log();return window.console;}catch(err){return window.console={};}})());\n\n/*\n * jQuery throttle / debounce - v1.1 - 3/7/2010\n * http://benalman.com/projects/jquery-throttle-debounce-plugin/\n * \n * Copyright (c) 2010 \"Cowboy\" Ben Alman\n * Dual licensed under the MIT and GPL licenses.\n * http://benalman.com/about/license/\n */\n(function(b,c){var $=b.jQuery||b.Cowboy||(b.Cowboy={}),a;$.throttle=a=function(e,f,j,i){var h,d=0;if(typeof f!==\"boolean\"){i=j;j=f;f=c}function g(){var o=this,m=+new Date()-d,n=arguments;function l(){d=+new Date();j.apply(o,n)}function k(){h=c}if(i&&!h){l()}h&&clearTimeout(h);if(i===c&&m>e){l()}else{if(f!==true){h=setTimeout(i?k:l,i===c?e-m:e)}}}if($.guid){g.guid=j.guid=j.guid||$.guid++}return g};$.debounce=function(d,e,f){return f===c?a(d,e,false):a(d,f,e!==false)}})(this);\n"
  },
  {
    "path": "doc/template/resources/javascripts/prettify-extension.js",
    "content": "// Stolen from StackOverflow. Find all </code><pre><code> \n// elements on the page and add the \"prettyprint\" style. If at least one \n// prettyprint element was found, call the Google Prettify prettyPrint() API.\n//http://sstatic.net/so/js/master.js?v=6523\nfunction styleCode() \n{\n    if (typeof disableStyleCode != \"undefined\") \n    {\n        return;\n    }\n\n    var a = false;\n\n    $(\"pre code\").parent().each(function() \n    {\n        if (!$(this).hasClass(\"prettyprint\")) \n        {\n            $(this).addClass(\"prettyprint\");\n            a = true\n        }\n    });\n    \n    if (a) { prettyPrint() } \n}"
  },
  {
    "path": "doc/template/resources/javascripts/prettify.js",
    "content": "var q=null;window.PR_SHOULD_USE_CONTINUATION=!0;\n(function(){function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92)return f;var b=a.charAt(1);return(f=r[b])?f:\"0\"<=b&&b<=\"7\"?parseInt(a.substring(1),8):b===\"u\"||b===\"x\"?parseInt(a.substring(2),16):a.charCodeAt(1)}function e(a){if(a<32)return(a<16?\"\\\\x0\":\"\\\\x\")+a.toString(16);a=String.fromCharCode(a);if(a===\"\\\\\"||a===\"-\"||a===\"[\"||a===\"]\")a=\"\\\\\"+a;return a}function h(a){for(var f=a.substring(1,a.length-1).match(/\\\\u[\\dA-Fa-f]{4}|\\\\x[\\dA-Fa-f]{2}|\\\\[0-3][0-7]{0,2}|\\\\[0-7]{1,2}|\\\\[\\S\\s]|[^\\\\]/g),a=\n[],b=[],o=f[0]===\"^\",c=o?1:0,i=f.length;c<i;++c){var j=f[c];if(/\\\\[bdsw]/i.test(j))a.push(j);else{var j=m(j),d;c+2<i&&\"-\"===f[c+1]?(d=m(f[c+2]),c+=2):d=j;b.push([j,d]);d<65||j>122||(d<65||j>90||b.push([Math.max(65,j)|32,Math.min(d,90)|32]),d<97||j>122||b.push([Math.max(97,j)&-33,Math.min(d,122)&-33]))}}b.sort(function(a,f){return a[0]-f[0]||f[1]-a[1]});f=[];j=[NaN,NaN];for(c=0;c<b.length;++c)i=b[c],i[0]<=j[1]+1?j[1]=Math.max(j[1],i[1]):f.push(j=i);b=[\"[\"];o&&b.push(\"^\");b.push.apply(b,a);for(c=0;c<\nf.length;++c)i=f[c],b.push(e(i[0])),i[1]>i[0]&&(i[1]+1>i[0]&&b.push(\"-\"),b.push(e(i[1])));b.push(\"]\");return b.join(\"\")}function y(a){for(var f=a.source.match(/\\[(?:[^\\\\\\]]|\\\\[\\S\\s])*]|\\\\u[\\dA-Fa-f]{4}|\\\\x[\\dA-Fa-f]{2}|\\\\\\d+|\\\\[^\\dux]|\\(\\?[!:=]|[()^]|[^()[\\\\^]+/g),b=f.length,d=[],c=0,i=0;c<b;++c){var j=f[c];j===\"(\"?++i:\"\\\\\"===j.charAt(0)&&(j=+j.substring(1))&&j<=i&&(d[j]=-1)}for(c=1;c<d.length;++c)-1===d[c]&&(d[c]=++t);for(i=c=0;c<b;++c)j=f[c],j===\"(\"?(++i,d[i]===void 0&&(f[c]=\"(?:\")):\"\\\\\"===j.charAt(0)&&\n(j=+j.substring(1))&&j<=i&&(f[c]=\"\\\\\"+d[i]);for(i=c=0;c<b;++c)\"^\"===f[c]&&\"^\"!==f[c+1]&&(f[c]=\"\");if(a.ignoreCase&&s)for(c=0;c<b;++c)j=f[c],a=j.charAt(0),j.length>=2&&a===\"[\"?f[c]=h(j):a!==\"\\\\\"&&(f[c]=j.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return\"[\"+String.fromCharCode(a&-33,a|32)+\"]\"}));return f.join(\"\")}for(var t=0,s=!1,l=!1,p=0,d=a.length;p<d;++p){var g=a[p];if(g.ignoreCase)l=!0;else if(/[a-z]/i.test(g.source.replace(/\\\\u[\\da-f]{4}|\\\\x[\\da-f]{2}|\\\\[^UXux]/gi,\"\"))){s=!0;l=!1;break}}for(var r=\n{b:8,t:9,n:10,v:11,f:12,r:13},n=[],p=0,d=a.length;p<d;++p){g=a[p];if(g.global||g.multiline)throw Error(\"\"+g);n.push(\"(?:\"+y(g)+\")\")}return RegExp(n.join(\"|\"),l?\"gi\":\"g\")}function M(a){function m(a){switch(a.nodeType){case 1:if(e.test(a.className))break;for(var g=a.firstChild;g;g=g.nextSibling)m(g);g=a.nodeName;if(\"BR\"===g||\"LI\"===g)h[s]=\"\\n\",t[s<<1]=y++,t[s++<<1|1]=a;break;case 3:case 4:g=a.nodeValue,g.length&&(g=p?g.replace(/\\r\\n?/g,\"\\n\"):g.replace(/[\\t\\n\\r ]+/g,\" \"),h[s]=g,t[s<<1]=y,y+=g.length,\nt[s++<<1|1]=a)}}var e=/(?:^|\\s)nocode(?:\\s|$)/,h=[],y=0,t=[],s=0,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=document.defaultView.getComputedStyle(a,q).getPropertyValue(\"white-space\"));var p=l&&\"pre\"===l.substring(0,3);m(a);return{a:h.join(\"\").replace(/\\n$/,\"\"),c:t}}function B(a,m,e,h){m&&(a={a:m,d:a},e(a),h.push.apply(h,a.e))}function x(a,m){function e(a){for(var l=a.d,p=[l,\"pln\"],d=0,g=a.a.match(y)||[],r={},n=0,z=g.length;n<z;++n){var f=g[n],b=r[f],o=void 0,c;if(typeof b===\n\"string\")c=!1;else{var i=h[f.charAt(0)];if(i)o=f.match(i[1]),b=i[0];else{for(c=0;c<t;++c)if(i=m[c],o=f.match(i[1])){b=i[0];break}o||(b=\"pln\")}if((c=b.length>=5&&\"lang-\"===b.substring(0,5))&&!(o&&typeof o[1]===\"string\"))c=!1,b=\"src\";c||(r[f]=b)}i=d;d+=f.length;if(c){c=o[1];var j=f.indexOf(c),k=j+c.length;o[2]&&(k=f.length-o[2].length,j=k-c.length);b=b.substring(5);B(l+i,f.substring(0,j),e,p);B(l+i+j,c,C(b,c),p);B(l+i+k,f.substring(k),e,p)}else p.push(l+i,b)}a.e=p}var h={},y;(function(){for(var e=a.concat(m),\nl=[],p={},d=0,g=e.length;d<g;++d){var r=e[d],n=r[3];if(n)for(var k=n.length;--k>=0;)h[n.charAt(k)]=r;r=r[1];n=\"\"+r;p.hasOwnProperty(n)||(l.push(r),p[n]=q)}l.push(/[\\S\\s]/);y=L(l)})();var t=m.length;return e}function u(a){var m=[],e=[];a.tripleQuotedStrings?m.push([\"str\",/^(?:'''(?:[^'\\\\]|\\\\[\\S\\s]|''?(?=[^']))*(?:'''|$)|\"\"\"(?:[^\"\\\\]|\\\\[\\S\\s]|\"\"?(?=[^\"]))*(?:\"\"\"|$)|'(?:[^'\\\\]|\\\\[\\S\\s])*(?:'|$)|\"(?:[^\"\\\\]|\\\\[\\S\\s])*(?:\"|$))/,q,\"'\\\"\"]):a.multiLineStrings?m.push([\"str\",/^(?:'(?:[^'\\\\]|\\\\[\\S\\s])*(?:'|$)|\"(?:[^\"\\\\]|\\\\[\\S\\s])*(?:\"|$)|`(?:[^\\\\`]|\\\\[\\S\\s])*(?:`|$))/,\nq,\"'\\\"`\"]):m.push([\"str\",/^(?:'(?:[^\\n\\r'\\\\]|\\\\.)*(?:'|$)|\"(?:[^\\n\\r\"\\\\]|\\\\.)*(?:\"|$))/,q,\"\\\"'\"]);a.verbatimStrings&&e.push([\"str\",/^@\"(?:[^\"]|\"\")*(?:\"|$)/,q]);var h=a.hashComments;h&&(a.cStyleComments?(h>1?m.push([\"com\",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,\"#\"]):m.push([\"com\",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\\b|[^\\n\\r]*)/,q,\"#\"]),e.push([\"str\",/^<(?:(?:(?:\\.\\.\\/)*|\\/?)(?:[\\w-]+(?:\\/[\\w-]+)+)?[\\w-]+\\.h|[a-z]\\w*)>/,q])):m.push([\"com\",/^#[^\\n\\r]*/,\nq,\"#\"]));a.cStyleComments&&(e.push([\"com\",/^\\/\\/[^\\n\\r]*/,q]),e.push([\"com\",/^\\/\\*[\\S\\s]*?(?:\\*\\/|$)/,q]));a.regexLiterals&&e.push([\"lang-regex\",/^(?:^^\\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|,|-=|->|\\/|\\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\\^=|\\^\\^|\\^\\^=|{|\\||\\|=|\\|\\||\\|\\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*(\\/(?=[^*/])(?:[^/[\\\\]|\\\\[\\S\\s]|\\[(?:[^\\\\\\]]|\\\\[\\S\\s])*(?:]|$))+\\/)/]);(h=a.types)&&e.push([\"typ\",h]);a=(\"\"+a.keywords).replace(/^ | $/g,\n\"\");a.length&&e.push([\"kwd\",RegExp(\"^(?:\"+a.replace(/[\\s,]+/g,\"|\")+\")\\\\b\"),q]);m.push([\"pln\",/^\\s+/,q,\" \\r\\n\\t\\xa0\"]);e.push([\"lit\",/^@[$_a-z][\\w$@]*/i,q],[\"typ\",/^(?:[@_]?[A-Z]+[a-z][\\w$@]*|\\w+_t\\b)/,q],[\"pln\",/^[$_a-z][\\w$@]*/i,q],[\"lit\",/^(?:0x[\\da-f]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+-]?\\d+)?)[a-z]*/i,q,\"0123456789\"],[\"pln\",/^\\\\[\\S\\s]?/,q],[\"pun\",/^.[^\\s\\w\"-$'./@\\\\`]*/,q]);return x(m,e)}function D(a,m){function e(a){switch(a.nodeType){case 1:if(k.test(a.className))break;if(\"BR\"===a.nodeName)h(a),\na.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)e(a);break;case 3:case 4:if(p){var b=a.nodeValue,d=b.match(t);if(d){var c=b.substring(0,d.index);a.nodeValue=c;(b=b.substring(d.index+d[0].length))&&a.parentNode.insertBefore(s.createTextNode(b),a.nextSibling);h(a);c||a.parentNode.removeChild(a)}}}}function h(a){function b(a,d){var e=d?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),g=a.nextSibling;f.appendChild(e);for(var h=g;h;h=g)g=h.nextSibling,f.appendChild(h)}return e}\nfor(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),e;(e=a.parentNode)&&e.nodeType===1;)a=e;d.push(a)}var k=/(?:^|\\s)nocode(?:\\s|$)/,t=/\\r\\n?|\\n/,s=a.ownerDocument,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=s.defaultView.getComputedStyle(a,q).getPropertyValue(\"white-space\"));var p=l&&\"pre\"===l.substring(0,3);for(l=s.createElement(\"LI\");a.firstChild;)l.appendChild(a.firstChild);for(var d=[l],g=0;g<d.length;++g)e(d[g]);m===(m|0)&&d[0].setAttribute(\"value\",\nm);var r=s.createElement(\"OL\");r.className=\"linenums\";for(var n=Math.max(0,m-1|0)||0,g=0,z=d.length;g<z;++g)l=d[g],l.className=\"L\"+(g+n)%10,l.firstChild||l.appendChild(s.createTextNode(\"\\xa0\")),r.appendChild(l);a.appendChild(r)}function k(a,m){for(var e=m.length;--e>=0;){var h=m[e];A.hasOwnProperty(h)?window.console&&console.warn(\"cannot override language handler %s\",h):A[h]=a}}function C(a,m){if(!a||!A.hasOwnProperty(a))a=/^\\s*</.test(m)?\"default-markup\":\"default-code\";return A[a]}function E(a){var m=\na.g;try{var e=M(a.h),h=e.a;a.a=h;a.c=e.c;a.d=0;C(m,h)(a);var k=/\\bMSIE\\b/.test(navigator.userAgent),m=/\\n/g,t=a.a,s=t.length,e=0,l=a.c,p=l.length,h=0,d=a.e,g=d.length,a=0;d[g]=s;var r,n;for(n=r=0;n<g;)d[n]!==d[n+2]?(d[r++]=d[n++],d[r++]=d[n++]):n+=2;g=r;for(n=r=0;n<g;){for(var z=d[n],f=d[n+1],b=n+2;b+2<=g&&d[b+1]===f;)b+=2;d[r++]=z;d[r++]=f;n=b}for(d.length=r;h<p;){var o=l[h+2]||s,c=d[a+2]||s,b=Math.min(o,c),i=l[h+1],j;if(i.nodeType!==1&&(j=t.substring(e,b))){k&&(j=j.replace(m,\"\\r\"));i.nodeValue=\nj;var u=i.ownerDocument,v=u.createElement(\"SPAN\");v.className=d[a+1];var x=i.parentNode;x.replaceChild(v,i);v.appendChild(i);e<o&&(l[h+1]=i=u.createTextNode(t.substring(b,o)),x.insertBefore(i,v.nextSibling))}e=b;e>=o&&(h+=2);e>=c&&(a+=2)}}catch(w){\"console\"in window&&console.log(w&&w.stack?w.stack:w)}}var v=[\"break,continue,do,else,for,if,return,while\"],w=[[v,\"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile\"],\n\"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof\"],F=[w,\"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where\"],G=[w,\"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient\"],\nH=[G,\"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var\"],w=[w,\"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN\"],I=[v,\"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None\"],\nJ=[v,\"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END\"],v=[v,\"case,done,elif,esac,eval,fi,function,in,local,set,then,until\"],K=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\\d*)/,N=/\\S/,O=u({keywords:[F,H,w,\"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END\"+\nI,J,v],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};k(O,[\"default-code\"]);k(x([],[[\"pln\",/^[^<?]+/],[\"dec\",/^<!\\w[^>]*(?:>|$)/],[\"com\",/^<\\!--[\\S\\s]*?(?:--\\>|$)/],[\"lang-\",/^<\\?([\\S\\s]+?)(?:\\?>|$)/],[\"lang-\",/^<%([\\S\\s]+?)(?:%>|$)/],[\"pun\",/^(?:<[%?]|[%?]>)/],[\"lang-\",/^<xmp\\b[^>]*>([\\S\\s]+?)<\\/xmp\\b[^>]*>/i],[\"lang-js\",/^<script\\b[^>]*>([\\S\\s]*?)(<\\/script\\b[^>]*>)/i],[\"lang-css\",/^<style\\b[^>]*>([\\S\\s]*?)(<\\/style\\b[^>]*>)/i],[\"lang-in.tag\",/^(<\\/?[a-z][^<>]*>)/i]]),\n[\"default-markup\",\"htm\",\"html\",\"mxml\",\"xhtml\",\"xml\",\"xsl\"]);k(x([[\"pln\",/^\\s+/,q,\" \\t\\r\\n\"],[\"atv\",/^(?:\"[^\"]*\"?|'[^']*'?)/,q,\"\\\"'\"]],[[\"tag\",/^^<\\/?[a-z](?:[\\w-.:]*\\w)?|\\/?>$/i],[\"atn\",/^(?!style[\\s=]|on)[a-z](?:[\\w:-]*\\w)?/i],[\"lang-uq.val\",/^=\\s*([^\\s\"'>]*(?:[^\\s\"'/>]|\\/(?=\\s)))/],[\"pun\",/^[/<->]+/],[\"lang-js\",/^on\\w+\\s*=\\s*\"([^\"]+)\"/i],[\"lang-js\",/^on\\w+\\s*=\\s*'([^']+)'/i],[\"lang-js\",/^on\\w+\\s*=\\s*([^\\s\"'>]+)/i],[\"lang-css\",/^style\\s*=\\s*\"([^\"]+)\"/i],[\"lang-css\",/^style\\s*=\\s*'([^']+)'/i],[\"lang-css\",\n/^style\\s*=\\s*([^\\s\"'>]+)/i]]),[\"in.tag\"]);k(x([],[[\"atv\",/^[\\S\\s]+/]]),[\"uq.val\"]);k(u({keywords:F,hashComments:!0,cStyleComments:!0,types:K}),[\"c\",\"cc\",\"cpp\",\"cxx\",\"cyc\",\"m\"]);k(u({keywords:\"null,true,false\"}),[\"json\"]);k(u({keywords:H,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:K}),[\"cs\"]);k(u({keywords:G,cStyleComments:!0}),[\"java\"]);k(u({keywords:v,hashComments:!0,multiLineStrings:!0}),[\"bsh\",\"csh\",\"sh\"]);k(u({keywords:I,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}),\n[\"cv\",\"py\"]);k(u({keywords:\"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END\",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),[\"perl\",\"pl\",\"pm\"]);k(u({keywords:J,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),[\"rb\"]);k(u({keywords:w,cStyleComments:!0,regexLiterals:!0}),[\"js\"]);k(u({keywords:\"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes\",\nhashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),[\"coffee\"]);k(x([],[[\"str\",/^[\\S\\s]+/]]),[\"regex\"]);window.prettyPrintOne=function(a,m,e){var h=document.createElement(\"PRE\");h.innerHTML=a;e&&D(h,e);E({g:m,i:e,h:h});return h.innerHTML};window.prettyPrint=function(a){function m(){for(var e=window.PR_SHOULD_USE_CONTINUATION?l.now()+250:Infinity;p<h.length&&l.now()<e;p++){var n=h[p],k=n.className;if(k.indexOf(\"prettyprint\")>=0){var k=k.match(g),f,b;if(b=\n!k){b=n;for(var o=void 0,c=b.firstChild;c;c=c.nextSibling)var i=c.nodeType,o=i===1?o?b:c:i===3?N.test(c.nodeValue)?b:o:o;b=(f=o===b?void 0:o)&&\"CODE\"===f.tagName}b&&(k=f.className.match(g));k&&(k=k[1]);b=!1;for(o=n.parentNode;o;o=o.parentNode)if((o.tagName===\"pre\"||o.tagName===\"code\"||o.tagName===\"xmp\")&&o.className&&o.className.indexOf(\"prettyprint\")>=0){b=!0;break}b||((b=(b=n.className.match(/\\blinenums\\b(?::(\\d+))?/))?b[1]&&b[1].length?+b[1]:!0:!1)&&D(n,b),d={g:k,h:n,i:b},E(d))}}p<h.length?setTimeout(m,\n250):a&&a()}for(var e=[document.getElementsByTagName(\"pre\"),document.getElementsByTagName(\"code\"),document.getElementsByTagName(\"xmp\")],h=[],k=0;k<e.length;++k)for(var t=0,s=e[k].length;t<s;++t)h.push(e[k][t]);var e=q,l=Date;l.now||(l={now:function(){return+new Date}});var p=0,d,g=/\\blang(?:uage)?-([\\w.]+)(?!\\S)/;m()};window.PR={createSimpleLexer:x,registerLangHandler:k,sourceDecorator:u,PR_ATTRIB_NAME:\"atn\",PR_ATTRIB_VALUE:\"atv\",PR_COMMENT:\"com\",PR_DECLARATION:\"dec\",PR_KEYWORD:\"kwd\",PR_LITERAL:\"lit\",\nPR_NOCODE:\"nocode\",PR_PLAIN:\"pln\",PR_PUNCTUATION:\"pun\",PR_SOURCE:\"src\",PR_STRING:\"str\",PR_TAG:\"tag\",PR_TYPE:\"typ\"}})();\n"
  },
  {
    "path": "doc/template/resources/javascripts/ux.js",
    "content": "$(function () {\n    'use strict';\n\n   var pagePath = document.location.pathname.substring(document.location.pathname.lastIndexOf(\"/\") + 1);\n\n   // select current page in sidenav and set up prev/next links if they exist\n   var $selNavLink = $('#sidebar').find('a[href=\"' + pagePath + '\"]');\n   if ($selNavLink.length) {\n      //$selListItem = $selNavLink.closest('li');\n\n      $selNavLink.addClass('currentItem');\n   }\n\n    if (window.addEventListener) window.addEventListener('load', loadCallback, true);\n    else window.attachEvent('load', loadCallback, true);\n\n    function loadCallback(evt) {\n        var form = document.getElementById(\"searchbox\");\n\n        if (form) {\n            var input = form.query;\n            form.onsubmit = function (evt) {\n                var query = input.value;\n                if (query) {\n                    input.value = \"\";\n                    input.blur();\n                    var url = \"https://www.google.com/search?q=\" + encodeURIComponent(\"site:ace.ajax.org\" + \" \" + query);\n                    window.open(url);\n                }\n                return false;\n            };\n        }\n    }\n\n    // init search\n    $('#search')\n    // prevent from form submit\n    .on('submit', function () {\n        return false;\n    }).find('input');\n});\n\nfunction ux() {\n    var d = 'a.menu, .dropdown-toggle'\n\n    function clearMenus() {\n        $(d).parent('li').each(function () {\n            $(this).removeClass('open')\n        });\n    }\n\n    var s, sx;\n\n    // scrolling offset calculation via www.quirksmode.org\n    if (window.pageYOffset || window.pageXOffset) {\n        s = window.pageYOffset;\n        sx = window.pageXOffset;\n    }\n    else if (document.documentElement && (document.documentElement.scrollTop || document.documentElement.scrollLeft)) {\n        s = document.documentElement.scrollTop;\n        sx = document.documentElement.scrollLeft;\n    }\n    else if (document.body) {\n        s = document.body.scrollTop;\n        sx = document.body.scrollLeft;\n    }\n\n    if (document.documentElement.offsetWidth < 1010) {\n        if (sx <= 0) sx = 0;\n        else if (sx + document.documentElement.offsetWidth > 1010) sx = 1010 - document.documentElement.offsetWidth;\n    }\n    else sx = 0;\n\n    $('span.methodClicker, article.article, i.methodClicker').each(function () {\n        var a = $(this);\n        var constructorPos = a.attr(\"id\").indexOf(\"new \");\n\n        var objName = a.attr(\"id\");\n        if (constructorPos >= 0) {\n            objName = objName.substring(constructorPos + 4);\n            objName += \".new\";\n        }\n\n        a.attr(\"id\", objName);\n    });\n    \n    function showMethodContent() {\n        var locationHash = location.hash.replace(/^#/, '').replace(/\\./g, '\\\\.');\n        var equalsPos = location.hash.indexOf(\"=\");\n        \n        if (equalsPos >=0) {\n            locationHash = locationHash.substring(0, location.hash.indexOf(\"=\"));\n        }\n        \n        var $clickerEl = $('span#' + locationHash);\n        if ($clickerEl.length > 0 && $clickerEl.hasClass('methodClicker')) {\n            var p = $clickerEl.parent();\n            p[0].force = true;\n            p.trigger('click');\n            p[0].force = false;\n        }\n    }\n\n    if (location.hash.indexOf(\"section\") >= 1) {\n        showMethodContent();\n        var data = location.hash;\n        scrollTo(null, data.substr(1));\n    }\n\n    window.onhashchange = function () {\n        showMethodContent();\n    }\n};\n\nfunction scrollTo(el, data) {\n    if (!data) {\n        data = el.getAttribute(\"data-id\");\n        //location.hash = data;\n    }\n    var el = $(\"span#\" + data.replace(/\\./g, \"\\\\.\"))[0];\n    if (!el) return;\n\n    var article = $(el).closest('.article')[0];\n\n    var top = article.offsetTop - 100;\n\n    if (document.body.scrollTop > top || document.body.scrollTop != top && document.body.scrollTop + (window.innerHeight || document.documentElement.offsetHeight) < top + article.offsetHeight) {\n        $('body').animate({\n            scrollTop: top\n        }, {\n            duration: 200,\n            easing: \"swing\"\n        });\n    }\n}"
  },
  {
    "path": "experiments/animate_folding.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n\n<!--\n\nAnimate Code Folding Experiment\n\nAnimates closing of folds in Chrome and WebKit. Requires 3D CSS and CSS \ntransitions.\n\nTODO\n\n* animate opening\n* fix closing at the bottom of the file\n* support folding with closed folds on the screen (rows are off)\n* support more browsers\n* speed\n\n-->\n\n  <meta charset=\"UTF-8\">\n  <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\">\n  <title>Editor</title>\n  <style type=\"text/css\" media=\"screen\">\n    body {\n        overflow: hidden;\n    }\n    \n    pre {\n        margin: 0;\n    }\n    \n    #editor { \n        position: absolute;\n        height: 100%;\n        width: 100%;\n    }\n    \n    #container {\n        -webkit-transform: scaleZ(0.0000001);\n        margin: 0;\n        position: absolute;\n        top: 0;\n        left: 0;\n        width: 100%;\n        height: 100%;\n        overflow: hidden;\n    }\n    \n    .ace_slide {\n        position: absolute;\n        width: 100%;\n        overflow: hidden;\n        \n        background-image: url(zenbg.png);\n    \n        /* ease in sine */ \n        -webkit-transition: height 500ms cubic-bezier(0.470, 0.000, 0.745, 0.715);\n        \n        -webkit-perspective: 2000;\n        -webkit-perspective-origin: 50% 50%;\n    }\n    \n    .ace_anim_slide_top {\n        z-index: -1;\n        background-color: white;\n        background-image: -webkit-linear-gradient(top, rgba(255, 255, 255, 0) 0%,rgba(0, 0, 0, 0.05) 50%);\n        top: 0;\n        \n        -webkit-transition: -webkit-transform 500ms linear;\n        \n        -webkit-transform-style: preserve-3d;\n        -webkit-transform-origin: top;\n        -webkit-transform: rotateX(0deg);\n    }\n    \n    .ace_anim_slide_bottom {\n        background-color: white;\n        background-image: -webkit-linear-gradient(bottom, rgba(255, 255, 255, 0) 0%,rgba(0, 0, 0, 0.05) 100%);\n        bottom: 0;\n        \n        -webkit-transition: -webkit-transform 500ms linear;\n        \n        -webkit-transform-style: preserve-3d;\n        -webkit-transform-origin: bottom;\n        -webkit-transform: rotateX(0deg);\n    }\n    \n    .ace_anim_hidden .ace_anim_slide_top {\n        -webkit-transform: rotateX(-90deg);\n    }\n    \n    .ace_anim_hidden .ace_anim_slide_bottom {\n        -webkit-transform: rotateX(90deg);\n    }\n    \n    .ace_anim_bottom {\n        /* ease in sine */ \n        -webkit-transition: top 500ms cubic-bezier(0.470, 0.000, 0.745, 0.715);\n        -webkit-transform: scaleZ(0.0000001);\n    }\n    \n  </style>\n</head>\n<body>\n\n<div id=\"container\">\n<div id=\"editor\"></div>\n</div>\n\n<script src=\"../build/src/ace-uncompressed.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\n<script src=\"../build/src/mode-javascript.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\n<script id=\"main\">\n\nwindow.onload = function() {\n    var editor = ace.edit(\"editor\");\n    \n    var JavaScriptMode = require(\"ace/mode/javascript\").Mode;\n    var EditSession = require(\"ace/edit_session\").EditSession;\n    var lang = require(\"ace/lib/lang\");\n    var Range = require(\"ace/range\").Range;\n    editor.getSession().setMode(new JavaScriptMode());\n    editor.getSession().setValue(document.getElementById(\"main\").innerHTML);\n    \n    \n    function cloneSession(session) {\n        var s = new EditSession(session.getDocument(), session.getMode());\n\n        // Copy over 'settings' from the session.\n        s.setTabSize(session.getTabSize());\n        s.setUseSoftTabs(session.getUseSoftTabs());\n        s.setOverwrite(session.getOverwrite());\n        s.setBreakpoints(session.getBreakpoints());\n        s.setUseWrapMode(session.getUseWrapMode());\n        s.setUseWorker(false);\n        s.setWrapLimitRange(session.$wrapLimitRange.min, session.$wrapLimitRange.max);\n        s.$foldData = session.$cloneFoldData();\n    \n        return s;\n    }\n    \n    function animateFold(editor, placeholder, range) {\n        var session = editor.getSession();\n        var ed = document.getElementById(\"editor\");\n        var parent = ed.parentNode;\n        \n        var clone = ed.cloneNode();\n        var cloneEd = ace.edit(clone);\n        var renderer = cloneEd.renderer;\n        \n        cloneEd.setSession(cloneSession(session));\n        cloneEd.setTheme(editor.getTheme());\n        renderer.scrollToY(editor.renderer.getScrollTop());\n        \n        parent.appendChild(clone);\n\n        cloneEd.resize();\n        renderer.$size = lang.copyObject(cloneEd.renderer.$size);\n        renderer.layerConfig = lang.copyObject(cloneEd.renderer.layerConfig);\n        renderer.$textLayer.$characterSize = lang.copyObject(editor.renderer.$textLayer.$characterSize);\n        renderer.$textLayer._emit(\"changeCharaterSize\", {data: renderer.$textLayer.$characterSize});\n        \n        renderer.$loop.onRender(renderer.$loop.changes);\n\n        // top area\n        var clone2 = clone.cloneNode(true);\n        var topHeight = range.start.row * renderer.lineHeight - renderer.scrollTop\n        clone2.style.height = topHeight + \"px\";\n        \n        parent.appendChild(clone2);\n\n        // middle\n        cloneEd.scrollToRow(range.start.row);\n        renderer.$loop.onRender(renderer.$loop.changes);\n        var middleHeight = (range.end.row - range.start.row) * renderer.lineHeight;        \n        \n        var slide = document.createElement(\"div\");\n        slide.className = \"ace_slide\";\n        slide.style.top = topHeight + \"px\";\n        slide.style.height = middleHeight + \"px\";\n        \n        var clone3 = clone.cloneNode(true);\n        clone3.className += \" ace_anim_slide_top\";\n        clone3.style.height = middleHeight + \"px\";\n        slide.appendChild(clone3);\n        \n        renderer.scrollToY(renderer.scrollTop + Math.floor(middleHeight / 2));\n        renderer.$loop.onRender(renderer.$loop.changes);\n        \n        var clone3 = clone.cloneNode(true);\n        clone3.className += \" ace_anim_slide_bottom\";\n        clone3.style.top = null;\n        clone3.style.height = (middleHeight / 2) + \"px\";\n        slide.appendChild(clone3);\n        \n        parent.appendChild(slide);\n\n        // bottom\n        cloneEd.scrollToRow(range.start.row)\n        cloneEd.getSession().addFold(placeholder, range);\n        renderer.$loop.onRender(renderer.$loop.changes);\n        \n        var clone4 = clone.cloneNode(true);\n        clone4.className += \" ace_anim_bottom\";\n        clone4.style.top = (topHeight + middleHeight) + \"px\";\n        parent.appendChild(clone4);\n        \n        cloneEd.destroy();\n        parent.removeChild(clone);\n        ed.style.left = \"-10000px\";\n    \n        setTimeout(function() {\n            clone4.style.top = topHeight + \"px\";\n            slide.style.height = 0;\n            slide.className += \" ace_anim_hidden\";\n            \n            setTimeout(function() {\n                ed.style.left = 0;\n                \n                setTimeout(function() {\n                    parent.removeChild(clone2);\n                    parent.removeChild(slide);\n                    parent.removeChild(clone4);\n                }, 0);\n            }, 500);\n        }, 0);\n    } \n\n    var origOnFoldWidgetClick = EditSession.prototype.onFoldWidgetClick;\n    EditSession.prototype.onFoldWidgetClick = function() {\n        \n        var orig = EditSession.prototype.addFold;\n        \n        EditSession.prototype.addFold = function(placeholder, range) {\n            EditSession.prototype.addFold = orig;\n            animateFold(editor, placeholder, range);\n            this.addFold(placeholder, range);\n        }\n        \n        var ret = origOnFoldWidgetClick.apply(this, arguments);\n        \n        return ret;\n    }\n};\n</script>\n\n</body>\n</html>\n"
  },
  {
    "path": "experiments/basic_animation.html",
    "content": "<!DOCTYPE html>\n<html  xmlns=\"http://www.w3.org/1999/xhtml\">\n    <head profile=\"http://www.w3.org/2005/10/profile\">\n        <title> </title>\n        \n          <style type=\"text/css\" media=\"screen\">\n          \n#container {\n    position: absolute;\n    width: 400px;\n    height: 500px;\n    border: 1px solid black;\n    overflow: hidden;\n}\n\n#top {\n    position: absolute;\n    width: 100%;\n    height: 150px;\n    background: green;\n}\n\n#slide {\n    position: absolute;\n    width: 100%;\n    top: 150px;\n    height: 0;\n    background: orange;\n    overflow: hidden;\n    \n    -webkit-transition: height 5000ms cubic-bezier(0.390, 0.575, 0.565, 1.000);\n    \n    -webkit-perspective: 360;\n    -webkit-perspective-origin: 50% 50%;\n}\n\n#slide-top {\n    position: absolute;\n    width: 100%;\n    top: 0;\n    height: 100px;\n    \n    background-color: yellow;\n    /* easeOutSine */\n    background-image: -webkit-linear-gradient(top, rgba(255, 255, 255, 0) 0%,rgba(0, 0, 0, 0.20) 100%);\n    \n    -webkit-transition: -webkit-transform 5000ms linear;\n    \n    -webkit-transform-style: preserve-3d;\n    -webkit-transform-origin: top;\n    -webkit-transform: rotateX(-90deg);\n}\n\n.visible #slide-top {\n    -webkit-transform: rotateX(0deg);\n}\n\n.visible #slide-bottom {\n    -webkit-transform: rotateX(0deg);\n}\n\n#slide-bottom {\n    position: absolute;\n    width: 100%;\n    top: auto;\n    bottom: 0;\n    height: 200px;\n    z-index: -1;\n    \n    background-color: blue;\n    background-image: -webkit-linear-gradient(bottom, rgba(255, 255, 255, 0) 0%,rgba(0, 0, 0, 0.20) 50%);\n    \n    -webkit-transition: -webkit-transform 5000ms linear;\n    \n    -webkit-transform-style: preserve-3d;\n    -webkit-transform-origin: bottom;\n    -webkit-transform: rotateX(90deg);\n}\n\n#bottom {\n    position: absolute;\n    width: 100%;\n    top: 150px;\n    height: 500px;\n    background: red;\n    /* easeOutSine */\n    -webkit-transition: top 5000ms cubic-bezier(0.390, 0.575, 0.565, 1.000);\n}\n          \n          </style>\n    </head>\n    <body>\n\n    <div id=\"container\">\n        <div id=\"top\">Lorem ipsum dolor sit amet, consectetuer adipiscing elit,\n        sed diam nonummy nibh euismod tincidunt ut laoreet dolore\n        magna aliquam erat volutpat. Ut wisi enim ad minim veniam,\n        quis nostrud exerci tation ullamcorper suscipit lobortis nisl\n        ut aliquip ex ea commodo consequat. Duis autem vel eum iriure\n        dolor in hendrerit in vulputate velit esse molestie consequat,\n        vel illum dolore eu feugiat nulla facilisis at vero eros et\n        accumsan et iusto odio dignissim qui blandit praesent luptatum\n        zzril delenit augue duis dolore te feugait nulla facilisi.\n        Nam liber tempor cum soluta nobis eleifend option congue\n        nihil imperdiet doming id quod mazim placerat facer possim\n        assum. Typi non habent claritatem insitam; est usus legentis\n        in iis qui facit eorum claritatem. Investigationes\n        demonstraverunt lectores legere me lius quod ii legunt saepius.\n        Claritas est etiam processus dynamicus, qui sequitur mutationem\n        consuetudium lectorum. Mirum est notare quam littera gothica,\n        quam nunc putamus parum claram, anteposuerit litterarum formas\n        humanitatis per seacula quarta decima et quinta decima. Eodem\n        modo typi, qui nunc nobis videntur parum clari, fiant sollemnes\n        in futurum.</div>\n        <div id=\"slide\">\n            <div id=\"slide-top\">Lorem ipsum dolor sit amet, consectetuer adipiscing elit,\n            sed diam nonummy nibh euismod tincidunt ut laoreet dolore\n            magna aliquam erat volutpat. Ut wisi enim ad minim veniam,\n            quis nostrud exerci tation ullamcorper suscipit lobortis nisl\n            ut aliquip ex ea commodo consequat. Duis autem vel eum iriure\n            dolor in hendrerit in vulputate velit esse molestie consequat,\n            vel illum dolore eu feugiat nulla facilisis at vero eros et\n            accumsan et iusto odio dignissim qui blandit praesent luptatum\n            zzril delenit augue duis dolore te feugait nulla facilisi.\n            Nam liber tempor cum soluta nobis eleifend option congue\n            nihil imperdiet doming id quod mazim placerat facer possim\n            assum. Typi non habent claritatem insitam; est usus legentis\n            in iis qui facit eorum claritatem. Investigationes\n            demonstraverunt lectores legere me lius quod ii legunt saepius.\n            Claritas est etiam processus dynamicus, qui sequitur mutationem\n            consuetudium lectorum. Mirum est notare quam littera gothica,\n            quam nunc putamus parum claram, anteposuerit litterarum formas\n            humanitatis per seacula quarta decima et quinta decima. Eodem\n            modo typi, qui nunc nobis videntur parum clari, fiant sollemnes\n            in futurum.</div>\n            <div id=\"slide-bottom\">Lorem ipsum dolor sit amet, consectetuer adipiscing elit,\n            sed diam nonummy nibh euismod tincidunt ut laoreet dolore\n            magna aliquam erat volutpat. Ut wisi enim ad minim veniam,\n            quis nostrud exerci tation ullamcorper suscipit lobortis nisl\n            ut aliquip ex ea commodo consequat. Duis autem vel eum iriure\n            dolor in hendrerit in vulputate velit esse molestie consequat,\n            vel illum dolore eu feugiat nulla facilisis at vero eros et\n            accumsan et iusto odio dignissim qui blandit praesent luptatum\n            zzril delenit augue duis dolore te feugait nulla facilisi.\n            Nam liber tempor cum soluta nobis eleifend option congue\n            nihil imperdiet doming id quod mazim placerat facer possim\n            assum. Typi non habent claritatem insitam; est usus legentis\n            in iis qui facit eorum claritatem. Investigationes\n            demonstraverunt lectores legere me lius quod ii legunt saepius.\n            Claritas est etiam processus dynamicus, qui sequitur mutationem\n            consuetudium lectorum. Mirum est notare quam littera gothica,\n            quam nunc putamus parum claram, anteposuerit litterarum formas\n            humanitatis per seacula quarta decima et quinta decima. Eodem\n            modo typi, qui nunc nobis videntur parum clari, fiant sollemnes\n            in futurum.</div>\n        </div>\n        <div id=\"bottom\">Lorem ipsum dolor sit amet, consectetuer adipiscing elit,\n        sed diam nonummy nibh euismod tincidunt ut laoreet dolore\n        magna aliquam erat volutpat. Ut wisi enim ad minim veniam,\n        quis nostrud exerci tation ullamcorper suscipit lobortis nisl\n        ut aliquip ex ea commodo consequat. Duis autem vel eum iriure\n        dolor in hendrerit in vulputate velit esse molestie consequat,\n        vel illum dolore eu feugiat nulla facilisis at vero eros et\n        accumsan et iusto odio dignissim qui blandit praesent luptatum\n        zzril delenit augue duis dolore te feugait nulla facilisi.\n        Nam liber tempor cum soluta nobis eleifend option congue\n        nihil imperdiet doming id quod mazim placerat facer possim\n        assum. Typi non habent claritatem insitam; est usus legentis\n        in iis qui facit eorum claritatem. Investigationes\n        demonstraverunt lectores legere me lius quod ii legunt saepius.\n        Claritas est etiam processus dynamicus, qui sequitur mutationem\n        consuetudium lectorum. Mirum est notare quam littera gothica,\n        quam nunc putamus parum claram, anteposuerit litterarum formas\n        humanitatis per seacula quarta decima et quinta decima. Eodem\n        modo typi, qui nunc nobis videntur parum clari, fiant sollemnes\n        in futurum.</div>\n    </div>\n\n    <script>\n\nsetTimeout(function() {\n    document.getElementById(\"bottom\").style.top = \"350px\";\n    document.getElementById(\"slide\").style.height = \"200px\";\n    document.getElementById(\"slide\").className += \" visible\";\n    \n}, 1000);\n\n    </script>\n\n    </body>\n</html>\n"
  },
  {
    "path": "experiments/capture.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\"\n   \"http://www.w3.org/TR/html4/strict.dtd\">\n\n<html lang=\"en\">\n<head>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n\t<meta name=\"author\" content=\"Fabian Jakobs\">\n\t<!-- Date: 2010-04-07 -->\n\t\n\t<style type=\"text/css\" media=\"screen\">\n\t#juhu {\n\t  width: 100px;\n\t  height: 50px;\n\t  background: yellow;\t  \n\t}\n\t</style>\n</head>\n<body>\n\n<div id=\"juhu\">\n  \n</div>\n\n<script src=\"../src/ace.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\n<script type=\"text/javascript\" charset=\"utf-8\">\n\nvar el = document.getElementById(\"juhu\");\n\nace.addListener(el, \"mousedown\", function(e) {  \n  el.innerHTML = ace.getDocumentX(e) + \" \" + ace.getDocumentY(e);\n  ace.capture(\n    el,\n    function(e) {\n      el.innerHTML = ace.getDocumentX(e) + \" \" + ace.getDocumentY(e);\n    }, function() {\n      el.innerHTML = \"\";\n    }\n  );\n});\n\n\n  \n</script>\n</body>\n</html>\n"
  },
  {
    "path": "experiments/cut_copy.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\"\n   \"http://www.w3.org/TR/html4/strict.dtd\">\n\n<html lang=\"en\">\n<head>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n\t<title>Text Events</title>\n\t<meta name=\"author\" content=\"Fabian Jakobs\">\n\t\n\t<style type=\"text/css\" media=\"screen\">\n\t\n\t#container {\n\t    border: 1px solid black;\n\t    width: 600px;\n\t}\n\t\n\t#canvas {\n\t    border: 1px solid black;\n        margin: 4px;\n\t    width: 590px;\n\t    height: 400px;\n\t}\n\n\t</style>\n\t\n</head>\n<body>\n    \n    <div id=\"container\">    \n        <textarea id=\"text\"></textarea>    \n        <div id=\"canvas\"></div>\n    </div>\n\n    <input type=\"button\" value=\"Clear\" id=\"some_name\" onclick=\"document.getElementById('logger').innerHTML = ''\">\n    <div id=\"logger\">\n        \n    </div>\n    \n<script type=\"text/javascript\" charset=\"utf-8\">\n    \nif (!window.console) window.console = {};\nif (!console.log) {\n    var logger = document.getElementById(\"logger\");\n    console.log = function() {\n        logger.innerHTML += Array.prototype.join.call(arguments, \", \") + \"<br>\";\n    }\n}\n\nfunction addListener(elem, type, callback) {\n    if (elem.addEventListener) {\n        return elem.addEventListener(type, callback, false);\n    }\n    if (elem.attachEvent) {\n        elem.attachEvent(\"on\" + type, function() {\n            callback(window.event);\n        });\n    }\n}\n\n    \nvar container = document.getElementById(\"container\");\nvar canvas = document.getElementById(\"canvas\");\nvar text = document.getElementById(\"text\");\n    \nfunction log(e) {\n    console.log(e.type, e);\n}\n\nfunction logKey(e) {\n    console.log(e.type, e.charCode, e.keyCode, e);\n}\n\naddListener(text, \"keydown\", logKey, false);\naddListener(text, \"keyup\", logKey, false);\naddListener(text, \"keypress\", logKey, false);\n\naddListener(text, \"textInput\", function(e) {\n    console.log(e.type, e.data, e);\n}, false);\n\nfunction fillSelection() {\n  text.value = \"Juhu Kinners\";\n  text.select();\n}\n\naddListener(text, \"copy\", fillSelection, false);\naddListener(text, \"paste\", log, false);\naddListener(text, \"cut\", fillSelection, false);\n\naddListener(text, \"beforecopy\", log, false);\naddListener(text, \"beforepaste\", log, false);\naddListener(text, \"beforecut\", log, false);\n\naddListener(text, \"compositionstart\", log, false);\naddListener(text, \"compositionupdate\", log, false);\naddListener(text, \"compositionend\", log, false);\n\naddListener(text, \"propertychange\", function(e) {\n    console.log(e.type, e.propertyName, e);\n}, false);\n    \n</script>\n\n</body>\n</html>\n"
  },
  {
    "path": "experiments/debug_mem_leak.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n    <head>\n        <meta charset=\"utf-8\">\n        <script src=\"../demo/kitchen-sink/require.js\"></script>\n        <script type=\"text/javascript\">\n            require.config({\n                paths: { ace: \"../lib/ace\" },\n                waitSeconds: 0\n            });\n        </script>\n    </head>\n    <body>\n        <p><button onclick=\"toggleEditor()\">Toggle editor</button></p>\n\n        <div id=\"container\"></div>\n        <script>\n            var editor;\n            var counter = 0\n\n            function toggleEditor() {\n                if (!editor) {\n                    var root = document.createElement(\"div\");\n                    root.style.height = \"100px\";\n                    root.setAttribute(\"id\", \"editor\");\n                    root.textContent = \"function foo(items) {\\nvar x = 'All this is syntax highlighted';\\nreturn x;\\n}\";\n\n                    document.getElementById(\"container\").appendChild(root);\n\n                    editor = ace.edit(root);\n\n                    if (counter++ % 2)\n                        editor.setTheme(\"ace/theme/monokai\");\n                    else\n                        editor.setTheme(\"ace/theme/clouds\");\n\n                    editor.session.setMode(\"ace/mode/javascript\");\n                } else {\n                    editor.destroy();\n                    var el = editor.container;\n                    el.parentNode.removeChild(el);\n\n                    editor.container = null\n                    editor.renderer = null\n\n                    editor = null;\n\n                    var root = document.getElementById(\"editor\")\n                    if (root)\n                        root.parentNode.removeChild(root);\n                }\n            }\n            require([\"ace/ace\"], function(ace) {\n                window.ace = ace;\n                toggleEditor();            \n            })\n        </script>\n    </body>\n</html>"
  },
  {
    "path": "experiments/dom.html",
    "content": "<!DOCTYPE html>\n\n<html>\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n    <title>Dom test</title>\n</head>\n<body>\n\n<pre id=\"root\"></pre>\n\n<script type=\"text/javascript\" charset=\"utf-8\">\n    var tests = {};\n    tests.innerHTML = function() {\n        function update(rootEl, lines) {\n            var html = []\n            for (var i = 0; i < lines.length; i++) {\n                html.push(\"<div class='line'>\")\n                renderLine(html, lines[i])\n                html.push(\"</div>\")\n            }\n            rootEl.innerHTML = html.join(\"\")\n        }\n    \n        function renderLine(html, tokens) {\n            for (var i = 0; i < tokens.length; i ++) {\n                html.push(\"<span class='\", tokens[i], \"'>\", tokens[i], \"</span>\")\n            }\n        }\n        return update;\n    }\n    tests.domNewNodes = function() {\n        function elt(parent, name, className, content) {\n            var el = document.createElement(name);\n            if (content) {\n                el.appendChild(document.createTextNode(content))\n            }\n            parent && parent.appendChild(el)\n            el.className = className\n            return el;\n        }\n        function txtEl(parent, str) {\n            return parent.appendChild(document.createTextNode(str))\n        }\n        function clearEl(el) {\n            while (el.lastChild)\n                el.removeChild(el.lastChild);\n        }\n\n        \n        function update(rootEl, lines) {\n            clearEl(rootEl)\n            for (var i = 0; i < lines.length; i++) {\n                var el = elt(rootEl, \"div\", \"line\")\n                renderLine(el, lines[i])\n            }\n        }\n    \n        function renderLine(html, tokens) {\n            for (var i = 0; i < tokens.length; i ++) {\n                elt(html, \"span\", tokens[i], tokens[i])\n            }\n        }\n        return update;\n    }\n    tests.domCloneNode = function() {\n        var els = {}\n        function elt(parent, name, className, content) {\n            if (!els[name]) els[name] = document.createElement(name);\n            var el = els[name].cloneNode(false)\n            if (content) {\n                el.appendChild(document.createTextNode(content))\n            }\n            parent && parent.appendChild(el)\n            el.className = className\n            return el;\n        }\n        function txtEl(parent, str) {\n            return parent.appendChild(document.createTextNode(str))\n        }\n        function clearEl(el) {\n            while (el.lastChild)\n                el.removeChild(el.lastChild);\n        }\n\n        \n        function update(rootEl, lines) {\n            clearEl(rootEl)\n            for (var i = 0; i < lines.length; i++) {\n                var el = elt(rootEl, \"div\", \"line\")\n                renderLine(el, lines[i])\n            }\n        }\n    \n        function renderLine(html, tokens) {\n            for (var i = 0; i < tokens.length; i ++) {\n                elt(html, \"span\", tokens[i], tokens[i])\n            }\n        }\n        return update;\n    }\n    tests.domReuseNodes = function() {\n        function elt(parent, name, className, content) {\n            var el = document.createElement(name);\n            if (content) {\n                el.appendChild(document.createTextNode(content))\n            }\n            parent && parent.appendChild(el)\n            el.className = className\n            return el;\n        }\n        function txtEl(parent, str) {\n            return parent.appendChild(document.createTextNode(str))\n        }\n        function clearEl(el, l) {\n            while (l --> 0)\n                el.removeChild(el.lastChild);\n        }\n\n        \n        function update(rootEl, lines) {\n            var ch = rootEl.childNodes\n            for (var i = 0; i < lines.length; i++) {\n                if (ch[i]) {\n                    var el = ch[i]\n                    el.className = \"line\"\n                }\n                else\n                    var el = elt(rootEl, \"div\", \"line\")\n                renderLine(el, lines[i])\n            }\n            clearEl(rootEl, ch.length - i)\n        }\n    \n        function renderLine(rootEl, tokens) {\n            var ch = rootEl.childNodes\n            for (var i = 0; i < tokens.length; i ++) {\n                if (ch[i]) {\n                    var el = ch[i]\n                    el.className = tokens[i]\n                    el.firstChild.nodeValue = tokens[i]\n                }\n                else\n                    elt(rootEl, \"span\", tokens[i], tokens[i])\n            }\n            clearEl(rootEl, ch.length - i)\n        }\n        return update;\n    }\n    tests.domReuseNodesWithFragment = function() {\n        function elt(parent, name, className, content) {\n            var el = document.createElement(name);\n            if (content) {\n                el.appendChild(document.createTextNode(content))\n            }\n            parent && parent.appendChild(el)\n            el.className = className\n            return el;\n        }\n        function txtEl(parent, str) {\n            return parent.appendChild(document.createTextNode(str))\n        }\n        function clearEl(el, l) {\n            while (l --> 0)\n                el.removeChild(el.lastChild);\n        }\n\n        \n        function update(rootEl, lines) {\n            var fr = document.createDocumentFragment()\n            var ch = rootEl.childNodes\n            for (var i = 0; i < lines.length; i++) {\n                if (ch[i]) {\n                    var el = ch[i]\n                    el.className = \"line\"\n                    fr.appendChild(el)\n                }\n                else\n                    var el = elt(fr, \"div\", \"line\")\n                renderLine(el, lines[i])\n            }\n            clearEl(rootEl, ch.length - i)\n            rootEl.appendChild(fr)\n        }\n    \n        function renderLine(rootEl, tokens) {\n            var ch = rootEl.childNodes\n            for (var i = 0; i < tokens.length; i ++) {\n                if (ch[i]) {\n                    var el = ch[i]\n                    el.className = tokens[i]\n                    el.firstChild.nodeValue = tokens[i]\n                }\n                else\n                    elt(rootEl, \"span\", tokens[i], tokens[i])\n            }\n            clearEl(rootEl, ch.length - i)\n        }\n        return update;\n    }\n    tests.domWithFragment = function() {\n        function elt(parent, name, className, content) {\n            var el = document.createElement(name);\n            if (content) {\n                el.appendChild(document.createTextNode(content))\n            }\n            parent && parent.appendChild(el)\n            el.className = className\n            return el;\n        }\n        function txtEl(parent, str) {\n            return parent.appendChild(document.createTextNode(str))\n        }\n        function clearEl(el) {\n            while (el.lastChild)\n                el.removeChild(el.lastChild);\n        }\n\n        \n        function update(rootEl, lines) {\n            var fr = document.createDocumentFragment()\n            clearEl(rootEl)\n            for (var i = 0; i < lines.length; i++) {\n                var el = elt(fr, \"div\", \"line\")\n                renderLine(el, lines[i])\n            }\n            rootEl.appendChild(fr)\n        }\n    \n        function renderLine(html, tokens) {\n            for (var i = 0; i < tokens.length; i ++) {\n                elt(html, \"span\", tokens[i], tokens[i])\n            }\n        }\n        return update;\n    }\n    \n    tests.domdomReuseNodes_allowTextNodes = function dom31() {\n        function elt(parent, name, className, content) {\n            var el = document.createElement(name);\n            if (content) {\n                el.appendChild(document.createTextNode(content))\n            }\n            parent && parent.appendChild(el)\n            el.className = className\n            return el;\n        }\n        function txtEl(parent, str) {\n            return parent.appendChild(document.createTextNode(str))\n        }\n        function clearEl(el, l) {\n            while (l --> 0)\n                el.removeChild(el.lastChild);\n        }\n\n        \n        function update(rootEl, lines) {\n            var ch = rootEl.childNodes\n            for (var i = 0; i < lines.length; i++) {\n                if (ch[i]) {\n                    var el = ch[i]\n                    el.className = \"line\"\n                }\n                else\n                    var el = elt(rootEl, \"div\", \"line\")\n                renderLine(el, lines[i])\n            }\n            clearEl(rootEl, ch.length - i)\n        }\n    \n        function renderLine(rootEl, tokens) {\n            var ch = rootEl.childNodes\n            for (var i = 0; i < tokens.length; i ++) {\n                if (i % 2) {\n                    if (ch[i]) {\n                        var el = ch[i]\n                        el.className = tokens[i]\n                        el.firstChild.nodeValue = tokens[i]\n                    }\n                    else\n                        elt(rootEl, \"span\", tokens[i], tokens[i])\n                }\n                else {\n                    if (ch[i]) {\n                        var el = ch[i]\n                        el.nodeValue = tokens[i]\n                    }\n                    else\n                        txtEl(rootEl, tokens[i])\n                }\n            }\n            clearEl(rootEl, ch.length - i)\n        }\n        return update;\n    }\n    tests.domdomReuseNodes_AllWrapped = function dom32() {\n        function elt(parent, name, className, content) {\n            var el = document.createElement(name);\n            if (content) {\n                el.appendChild(document.createTextNode(content))\n            }\n            parent && parent.appendChild(el)\n            el.className = className\n            return el;\n        }\n        function txtEl(parent, str) {\n            return parent.appendChild(document.createTextNode(str))\n        }\n        function clearEl(el, l) {\n            while (l --> 0)\n                el.removeChild(el.lastChild);\n        }\n\n        \n        function update(rootEl, lines) {\n            var ch = rootEl.childNodes\n            for (var i = 0; i < lines.length; i++) {\n                if (ch[i]) {\n                    var el = ch[i]\n                    el.className = \"line\"\n                }\n                else\n                    var el = elt(rootEl, \"div\", \"line\")\n                renderLine(el, lines[i])\n            }\n            clearEl(rootEl, ch.length - i)\n        }\n    \n        function renderLine(rootEl, tokens) {\n            var ch = rootEl.childNodes\n            for (var i = 0; i < tokens.length; i ++) {\n                if (ch[i]) {\n                    var el = ch[i]\n                    el.className = tokens[i]\n                    el.firstChild.nodeValue = tokens[i]\n                }\n                else\n                    elt(rootEl, \"span\", tokens[i], tokens[i])\n            }\n            clearEl(rootEl, ch.length - i)\n        }\n        return update;\n    }\n    \n    function runTest(render, cb) {\n        var rootEl = document.getElementById(\"root\")\n        rootEl.innerHTML = \"\";\n        var lines = [];\n        for (var i = 0; i < LINES; i++) {\n            var line = []\n            lines.push(line)\n            for (var j = 0; j < COLS; j ++) {\n                var ch = ((i + j) % COLS).toString(20)\n                var ch = \" \" + Array(5).join(ch) + \" \"\n                line.push(ch)\n            }\n        }\n        var now = performance.now();\n        var repeat = 100\n        function next() {\n            if (repeat --< 0) {\n                var dt = now - performance.now()\n                console.log(dt)\n                return cb && cb(null, dt)\n            }\n            lines.push(lines.shift())\n            render(rootEl, lines);\n            requestAnimationFrame(next)\n        }\n        next()\n    }\n    \n    var LINES = 100\n    var COLS = 50\n    var method = /test=(\\w+)|$/.exec(location.search)[1]\n    window.clearResults = function() {\n        Object.keys(localStorage).forEach(function(x) {\n            if (/^m_/.test(x)) delete localStorage[x]\n        })\n        showResults()\n    }\n    \n    function showResults() {\n        document.getElementById(\"root\").innerHTML = Object.keys(tests).map(function(x) { \n            return \"<a href='?test=\" + x + \"'>\" + x + \"</a>: \" + (localStorage[\"m_\" + x] || \"no results\");\n        }).join(\"<br>\")\n        + \"<br><br><a onclick='clearResults()' href='?'>clearResults</a>\";\n    }\n    \n    if (method && tests[method]) {\n        var update = tests[method]();\n        runTest(update, function(e, a) {\n            var all = localStorage[\"m_\" + method];\n            localStorage[\"m_\" + method] = all ?   all + \",\" + a : a;\n            showResults()\n        })\n    } else {\n        showResults();\n    }\n    \n</script>\n\n</body>\n</html>\n"
  },
  {
    "path": "experiments/triple_click.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\"\n   \"http://www.w3.org/TR/html4/strict.dtd\">\n\n<html lang=\"en\">\n<head>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n\t<title>triple_click</title>\n\t<meta name=\"author\" content=\"Fabian Jakobs\">\n</head>\n<body>\n\n\n<div id=\"juhu\">\n  Juhu Kinners\n</div>\n\n<script src=\"../src/ace/lib/core.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\n<script src=\"../src/ace/lib/event.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\n<script type=\"text/javascript\" charset=\"utf-8\">\n\nvar el = document.getElementById(\"juhu\");\nace.addTripleClickListener(el, function() {\n  console.log(\"triple\");\n});\n\nace.addListener(el, \"selectstart\", function(e) {\n    return ace.preventDefault(e);\n});\n\n  \n</script>\n\n</body>\n</html>\n"
  },
  {
    "path": "experiments/worker.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\"\n   \"http://www.w3.org/TR/html4/strict.dtd\">\n\n<html lang=\"en\">\n<head>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n\t<title>worker</title>\n\t<meta name=\"generator\" content=\"TextMate http://macromates.com/\">\n\t<meta name=\"author\" content=\"Fabian Jakobs\">\n\t<!-- Date: 2010-04-08 -->\n</head>\n<body>\n\n<script type=\"text/javascript\" charset=\"utf-8\">\n  \nvar worker = new Worker(\"worker.js\");\n\nworker.onmessage = function(e) {\n  console.log(e.data);\n};\n\nworker.onerror = function(e) {\n  console.log(e.data);\n};\n\nworker.postMessage(\"postMessage('juhu')\");\nworker.postMessage(\"postMessage('juhu')\");\n\n  \n</script>\n\n</body>\n</html>\n"
  },
  {
    "path": "experiments/worker.js",
    "content": "onmessage = function(e) {\n    onmessage = new Function(\"e\", e.data);\n};"
  },
  {
    "path": "index.html",
    "content": "<!DOCTYPE html> \n<html>\n    <head>\n        <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n        <title>Ace - The High Performance Code Editor for the Web</title>\n        <link rel=\"stylesheet\" href=\"https://netdna.bootstrapcdn.com/twitter-bootstrap/2.2.2/css/bootstrap.no-icons.min.css\" />\n        <link rel=\"stylesheet\" href=\"https://netdna.bootstrapcdn.com/font-awesome/3.0/css/font-awesome.css\" />\n        <link href=\"./api/resources/csses/ace_api.css\" rel=\"stylesheet\" type=\"text/css\" />\n        <link href=\"./doc/site/style.css\" rel=\"stylesheet\" type=\"text/css\" />\n        <link href=\"./doc/site/images/favicon.ico\" rel=\"icon\" type=\"image/x-icon\" />\n\n        <script src=\"./build/src/ace.js\"></script>\n        <script src=\"./build/src/ext-static_highlight.js\"></script>\n        <!--[if lt IE 9]>\n            <script src=\"./build/src/ext-old_ie.js\"></script>\n        <![endif]-->\n    </head>\n    <body>\n        <a href=\"https://github.com/ajaxorg/ace\">\n        <img style=\"z-index: 50000; position: absolute; top: 0; right: 0; border: 0; width: 125px; height: 125px\" src=\"https://camo.githubusercontent.com/e6bef7a091f5f3138b8cd40bc3e114258dd68ddf/687474703a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f7265645f6161303030302e706e67\" alt=\"Fork me on GitHub\" />\n        </a>\n        <div id=\"wrapper\">\n            <div class=\"content\">\n                <div class=\"column2\">\n                    <div id=\"top_container\" class=\"collapse\">\n                        <h1><img src=\"./doc/site/images/textimage.png\" alt=\"The high performance code editor for the web.\" /></h1>\n                        <div id=\"page_logo\">\n                            <img src=\"./doc/site/images/ace-logo.png\" />\n                            <iframe style=\"padding-top:5px\" src=\"https://ghbtns.com/github-btn.html?user=ajaxorg&amp;repo=ace&amp;type=watch&amp;count=true\" allowtransparency=\"true\" frameborder=\"0\" scrolling=\"0\" width=\"110px\" height=\"20px\"></iframe>\n                            <iframe src=\"https://ghbtns.com/github-btn.html?user=ajaxorg&amp;repo=ace&amp;type=fork&amp;count=true\" allowtransparency=\"true\" frameborder=\"0\" scrolling=\"0\" width=\"110px\" height=\"20px\"></iframe>\n                        </div>\n                    </div>\n                    <div style=\"clear: both\"></div>\n                    <ul id=\"tabnav\" class=\"nav nav-pills\">\n                        <li>\n                            <a href=\"/\"><img src=\"./doc/site/images/ace-tab.png\" /></a>\n                        </li>\n                        <li>\n                            <a href=\"#about\" data-toggle=\"tab\">About</a>\n                        </li>\n                        <li>\n                            <a href=\"#embedding\" data-toggle=\"tab\">Embedding Guide</a>\n                        </li>\n                        <li>\n                            <a href=\"#howto\" data-toggle=\"tab\">How-To Guide</a>\n                        </li>\n                        <li>\n                            <a href=\"#higlighter\" data-toggle=\"tab\">Syntax Highlighters</a>\n                        </li>\n                        <li>\n                            <a href=\"#api\">API Reference</a>\n                        </li>\n                        <li>\n                            <a href=\"#production\" data-toggle=\"tab\">Real World Users</a>\n                        </li>\n                        <li class=\"last-tab\">\n                            <a href=\"#support\" data-toggle=\"tab\">Support</a>\n                        </li>\n                    </ul>\n                    <div class=\"tab-content\">\n                        <div class=\"tab-pane fade\" id=\"about\">\n                            <h1>Built for Code</h1>\n                            <p id=\"first\">Ace is an embeddable code editor written in JavaScript.\n                                It matches the features and performance of native\n                                editors such as Sublime, Vim and TextMate. It can be easily embedded\n                                in any web page and JavaScript application. Ace is maintained as the\n                                primary editor for <a href=\"https://c9.io\">Cloud9 IDE</a>\n                                and is the successor of the Mozilla Skywriter (Bespin) project.\n                            </p>\n                            \n                                <pre id=\"ace_editor_demo\" style=\"opacity:0\">/**\n * In fact, you're looking at ACE right now. Go ahead and play with it!\n *\n * We are currently showing off the JavaScript mode. ACE has support for 45\n * language modes and 24 color themes!\n */\n\nfunction add(x, y) {\n    var resultString = \"Hello, ACE! The result of your math is: \";\n    var result = x + y;\n    return resultString + result;\n}\n\nvar addResult = add(3, 2);\nconsole.log(addResult);\n</pre>\n                            <p id=\"embed_link\"><a href=\"#nav=embedding\">Learn how to embed this in your own site</a></p>\n                            <p class=\"highlight_note\">Looking for a more full-featured demo? Check out the\n                                <a href=\"build/kitchen-sink.html\" target=\"_blank\"  rel=\"noreferer\">kitchen sink</a>.\n                            </p>\n                            <h2>Features</h2>\n                            <ul class=\"content-list\">\n                                <li><a href=\"https://pcwalton.blogspot.com/2010/11/syntax-highlighting-specification.html\">Syntax highlighting</a> for over 110 languages (TextMate/Sublime Text<em>.tmlanguage</em> files can be imported)</li>\n                                <li>Over 20 themes (TextMate/Sublime Text <em>.tmtheme</em> files can be imported)</li>\n                                <li>Automatic indent and outdent</li>\n                                <li>An optional command line</li>\n                                <li>Handles huge documents (four million lines seems to be the limit!)</li>\n                                <li>Fully customizable key bindings including vim and Emacs modes</li>\n                                <li>Search and replace with regular expressions</li>\n                                <li>Highlight matching parentheses</li>\n                                <li>Toggle between soft tabs and real tabs</li>\n                                <li>Displays hidden characters</li>\n                                <li>Drag and drop text using the mouse</li>\n                                <li>Line wrapping</li>\n                                <li>Code folding</li>\n                                <li>Multiple cursors and selections</li>\n                                <li>Live syntax checker (currently JavaScript/CoffeeScript/CSS/XQuery)</li>\n                                <li>Cut, copy, and paste functionality</li>\n                            </ul>\n                            <h2>Get the Open-Source Code</h2>\n                            <p>Ace is a community project. We actively encourage and support\n                                contributions! The Ace source code is <a href=\"https://github.com/ajaxorg/ace\">hosted on GitHub</a>\n                                and released under the BSD license &dash; \n                                very simple and friendly to all kinds of projects, whether open-source\n                                or not. Take charge of your editor and add your favorite language\n                                highlighting and keybindings!\n                            </p>\n                            <pre>git clone git://github.com/ajaxorg/ace.git</pre>\n                            <h2>History</h2>\n                            <p>Skywriter/Bespin and Ace started\n                                as two independent projects both aiming to build a no compromise\n                                code editor component for the web. Bespin started as part of\n                                Mozilla Labs and was based on the &lt;canvas> tag, while Ace is\n                                the editor component of <a href=\"https://c9.io\">Cloud9 IDE</a>\n                                and uses the DOM for rendering. After the release of Ace at\n                                <a href=\"https://www.youtube.com/watch?v=hN_7tAKh0dM\" title=\"[JSConfEU 2010] Fabian Jakobs: Kick ass code editing and end to end JavaScript debugging\">JSConf.eu 2010</a>\n                                in Berlin the Skywriter team decided to merge Ace with a simplified \n                                version of Skywriter's plugin system and some of Skywriter&apos;s\n                                extensibility points. All these changes have been merged back to Ace\n                                now, which supersedes Skywriter. Both <a href=\"https://c9.io\">Cloud9 IDE</a>\n                                and <a href=\"https://mozilla.org\">Mozilla</a> are actively developing and\n                                maintaining Ace.\n                            </p>\n                            <h2>Related Projects</h2>\n                            <ul class=\"content-list\">\n                                <li><a href=\"https://github.com/joewalker/gcli\">GCLI</a></li>\n                                <li><a href=\"https://github.com/mozilla/dryice\">DryIce</a></li>\n                                <li><a href=\"https://github.com/cadorn/ace-extjs\">Ace wrapper for ExtJS</a></li>\n                                <li><a href=\"https://github.com/daveho/AceGWT\">Ace wrapper for GWT</a></li>\n                            </ul>\n                        </div>\n                        <div class=\"tab-pane fade active in\" id=\"embedding\">\n                            <h1>Embedding Ace in Your Site</h1>\n                            <p>Ace can be easily embedded into a web page. Get prebuilt version of ace from \n                            <a href=\"https://github.com/ajaxorg/ace-builds/\">ace-builds</a> repository and use the code below:</p>\n                                <pre id=\"embedded_ace_code\" style=\"opacity:0\">&lt;!DOCTYPE html>\n&lt;html lang=\"en\">\n&lt;head>\n&lt;title>ACE in Action&lt;/title>\n&lt;style type=\"text/css\" media=\"screen\">\n    #editor { \n        position: absolute;\n        top: 0;\n        right: 0;\n        bottom: 0;\n        left: 0;\n    }\n&lt;/style>\n&lt;/head>\n&lt;body>\n\n&lt;div id=\"editor\">function foo(items) {\n    var x = \"All this is syntax highlighted\";\n    return x;\n}&lt;/div>\n    \n&lt;script src=\"/ace-builds/src-noconflict/ace.js\" type=\"text/javascript\" charset=\"utf-8\">&lt;/script>\n&lt;script>\n    var editor = ace.edit(\"editor\");\n    editor.setTheme(\"ace/theme/monokai\");\n    editor.getSession().setMode(\"ace/mode/javascript\");\n&lt;/script>\n&lt;/body>\n&lt;/html></pre>\n                            <p>Now check out the <a href=\"#nav=howto\">How-To Guide</a> for instructions on\n                                common operations, such as setting a different language mode or\n                                getting the contents from the editor.\n                            </p>\n                            <h2>Loading Ace from a Local URL</h2>                            \n                            <p>If you want to clone and host Ace locally you can\n                                use one of the <a href=\"https://github.com/ajaxorg/ace-builds/\">pre-packaged versions</a>. Just copy\n                                one of <code>src*</code> subdirectories somewhere into your project, or use RequireJS to load the\n                                contents of <a href=\"https://github.com/ajaxorg/ace/tree/master/lib/ace\">lib/ace</a> folder as <code>ace</code>:\n                            </p>\n                            <p>The packaged version can also be loaded from CDN's such as <a href=\"http://www.jsdelivr.com/#!ace\">jsDelivr</a> or <a href=\"http://cdnjs.com/libraries/ace/\">cdnjs</a>.\n                            </p>\n                        </div>\n                        <div class=\"tab-pane fade\" id=\"howto\">\n                            <h1>Working with Ace</h1>\n                            <p><em>In all of these examples Ace has been invoked \n                                as shown in the <a href=\"#nav=embedding\">embedding guide</a>.</em>\n                            </p>\n                            <h2>Setting Themes</h2>\n                            <p>Themes are loaded on demand; all you have to do is pass the string name:</p>\n                            <pre><code class=\"javascript\">editor.setTheme(\"ace/theme/twilight\");</code></pre>\n                            <p><span class=\"expand_arrow\">&gt;</span> <a href=\"https://github.com/ajaxorg/ace/tree/master/lib/ace/theme\" target=\"_blank\" rel=\"noreferer\">See all themes</a></p>\n                            <h2>Setting the Programming Language Mode</h2>\n                            <p>By default, the editor supports plain text mode. All other language modes are available as separate modules, loaded on demand like this:</p>\n                            <pre><code class=\"javascript\">editor.getSession().setMode(\"ace/mode/javascript\");</code></pre>\n                            <!--h2>One Editor, Multiple Sessions</h2>\n                                <p>Ace keeps everything about the state of the editor (selection, scroll position, etc.)\n                                    in <code class=\"javascript\">editor.session</code>. This means you can grab the\n                                    session, store it in a var, and set the editor to another session (e.g. a tabbed editor).</p>\n                                <p>You might accomplish this like so:</p>\n                                \n                                <pre><code class=\"javascript\">var EditSession = require(\"ace/edit_session\").EditSession;\n                                var js = new EditSession(\"some js code\");\n                                var css = new EditSession([\"some\", \"css\", \"code here\"]);\n                                // and then to load document into editor, just call\n                                editor.setSession(js);</code></pre-->\n                            <h2>Common Operations</h2>\n                            <p>Set and get content:</p>\n                            <pre><code class=\"javascript\">editor.setValue(\"the new text here\"); // or session.setValue\neditor.getValue(); // or session.getValue</code></pre>\n                            <p>Get selected text:</p>\n                            <pre><code class=\"javascript\">editor.session.getTextRange(editor.getSelectionRange());</code></pre>\n                            <p>Insert at cursor:</p>\n                            <pre><code class=\"javascript\">editor.insert(\"Something cool\");</code></pre>\n                            <p>Get the current cursor line and column:</p>\n                            <pre><code class=\"javascript\">editor.selection.getCursor();</code></pre>\n                            <p>Go to a line:</p>\n                            <pre><code class=\"javascript\">editor.gotoLine(lineNumber);</code></pre>\n                            <p>Get total number of lines:</p>\n                            <pre><code class=\"javascript\">editor.session.getLength();</code></pre>\n                            <p>Set the default tab size:</p>\n                            <pre><code class=\"javascript\">editor.getSession().setTabSize(4);</code></pre>\n                            <p>Use soft tabs:</p>\n                            <pre><code class=\"javascript\">editor.getSession().setUseSoftTabs(true);</code></pre>\n                            <p>Set the font size:</p>\n                            <pre><code class=\"javascript\">document.getElementById('editor').style.fontSize='12px';</code></pre>\n                            <p>Toggle word wrapping:</p>\n                            <pre><code class=\"javascript\">editor.getSession().setUseWrapMode(true);</code></pre>\n                            <p>Set line highlighting:</p>\n                            <pre><code class=\"javascript\">editor.setHighlightActiveLine(false);</code></pre>\n                            <p>Set the print margin visibility:</p>\n                            <pre><code class=\"javascript\">editor.setShowPrintMargin(false);</code></pre>\n                            <p>Set the editor to read-only:</p>\n                            <pre><code class=\"javascript\">editor.setReadOnly(true);  // false to make it editable</code></pre>\n                            <h3>Triggering Resizes</h3>\n                            <p>Ace only resizes itself on window events. If you resize the editor div in another manner, and need Ace to resize, use the following:</p>\n                            <pre><code class=\"javascript\">editor.resize()</code></pre>\n                            <h3>Searching</h3>\n                            <pre><code class=\"language-javascript\">editor.find('needle',{\n    backwards: false,\n    wrap: false,\n    caseSensitive: false,\n    wholeWord: false,\n    regExp: false\n});\neditor.findNext();\neditor.findPrevious();</code></pre>\n                            <p>The following options are available to you for your search parameters:</p>\n                            <ul>\n                                <li>\n                                    <code>needle</code>: The string or regular expression you're looking for\n                                </li>\n                                <li>\n                                    <code>backwards</code>: Whether to search backwards from where cursor currently is. Defaults to <code>false</code>.\n                                </li>\n                                <li>\n                                    <code>wrap</code>: Whether to wrap the search back to the beginning when it hits the end. Defaults to <code>false</code>.\n                                </li>\n                                <li>\n                                    <code>caseSensitive</code>: Whether the search ought to be case-sensitive. Defaults to <code>false</code>.\n                                </li>\n                                <li>\n                                    <code>wholeWord</code>: Whether the search matches only on whole words. Defaults to <code>false</code>.\n                                </li>\n                                <li>\n                                    <code>range</code>: The <a class=\"internal absent\" href=\"/ajaxorg/ace/wiki/Range\">Range</a> to search within. Set this to <code>null</code> for the whole document\n                                </li>\n                                <li>\n                                    <code>regExp</code>: Whether the search is a regular expression or not. Defaults to <code>false</code>.\n                                </li>\n                                <li>\n                                    <code>start</code>: The starting <a class=\"internal absent\" href=\"/ajaxorg/ace/wiki/Range\">Range</a> or cursor position to begin the search\n                                </li>\n                                <li>\n                                    <code>skipCurrent</code>: Whether or not to include the current line in the search. Default to <code>false</code>.\n                                </li>\n                            </ul>\n                            <p>Here's how you can perform a replace:</p>\n                            <pre><code class=\"javascript\">editor.find('foo');\neditor.replace('bar');</code></pre>\n                            <p>And here's a replace all: </p>\n                            <pre><code class=\"javascript\">editor.replaceAll('bar');</code></pre>\n                            <p>(<code>editor.replaceAll</code> uses the needle set earlier by <code>editor.find('needle', ...</code>)</p>\n                            <h3>Listening to Events</h3>\n                            <p>To listen for an <code>onchange</code>:</p>\n                            <pre><code class=\"javascript\">editor.getSession().on('change', function(e) {\n    // e.type, etc\n});</code></pre>\n                            <p>To listen for an <code>selection</code> change:</p>\n                            <pre><code class=\"javascript\">editor.getSession().selection.on('changeSelection', function(e) {\n});</code></pre>\n                            <p>To listen for a <code>cursor</code> change:</p>\n                            <pre><code class=\"javascript\">editor.getSession().selection.on('changeCursor', function(e) {\n});</code></pre>\n                            <h3>Adding New Commands and Keybindings</h3>\n                            <p>To assign key bindings to a custom function:</p>\n                            <pre><code class=\"javascript\">editor.commands.addCommand({\n    name: 'myCommand',\n    bindKey: {win: 'Ctrl-M',  mac: 'Command-M'},\n    exec: function(editor) {\n        //...\n    },\n    readOnly: true // false if this command should not apply in readOnly mode\n});</code></pre>\n                        </div>\n                        <div class=\"tab-pane fade\" id=\"higlighter\">\n                            <h1>Creating a Syntax Highlighter for Ace</h1>\n                            <p>Creating a new syntax highlighter for Ace is extremely simple. You'll need to define two pieces of code: a new mode, and a new set of highlighting rules.</p>\n                            <h2 id=\"where-to-start\"><a class=\"heading_anchor\" href=\"#where-to-start\"><i class=\"headerLinkIcon\"></i></a>Where to Start</h2>\n                            <p>We recommend using the <a href=\"tool/mode_creator.html\">Ace Mode Creator</a> when defining your highlighter. This allows you to inspect your code's tokens, as well as providing a live preview of the syntax highlighter in action.</p>\n                            <h2 id=\"defining-a-mode\"><a class=\"heading_anchor\" href=\"#defining-a-mode\"><i class=\"headerLinkIcon\"></i></a>Defining a Mode</h2>\n                            <p>Every language needs a mode. A mode contains the paths to a language's syntax highlighting rules, indentation rules, and code folding rules. Without defining a mode, Ace won't know anything about the finer aspects of your language.</p>\n                            <p>Here is the starter template we'll use to create a new mode:</p>\n                            <pre><code class=\"language-javascript\">define(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\n// defines the parent mode\nvar TextMode = require(\"./text\").Mode;\nvar Tokenizer = require(\"../tokenizer\").Tokenizer;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\n\n// defines the language specific highlighters and folding rules\nvar MyNewHighlightRules = require(\"./mynew_highlight_rules\").MyNewHighlightRules;\nvar MyNewFoldMode = require(\"./folding/mynew\").MyNewFoldMode;\n\nvar Mode = function() {\n    // set everything up\n    this.HighlightRules = MyNewHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.foldingRules = new MyNewFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    // configure comment start/end characters\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    \n    // special logic for indent/outdent. \n    // By default ace keeps indentation of previous line\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    \n    // create worker for live syntax checking\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/mynew_worker\", \"NewWorker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"errors\", function(e) {\n            session.setAnnotations(e.data);\n        });\n        return worker;\n    };\n    \n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});</code></pre>\n                            <p>What's going on here? First, you're defining the path to <code>TextMode</code> (more on this later). Then you're pointing the mode to your definitions for the highlighting rules, as well as your rules for code folding. Finally, you're setting everything up to find those rules, and exporting the Mode so that it can be consumed. That's it!</p>\n                            <p>Regarding <code>TextMode</code>, you'll notice that it's only being used once: <code>oop.inherits(Mode, TextMode);</code>. If your new language depends on the rules of another language, you can choose to inherit the same rules, while expanding on it with your language's own requirements. For example, PHP inherits from HTML, since it can be embedded directly inside <em>.html</em> pages. You can either inherit from <code>TextMode</code>, or any other existing mode, if it already relates to your language.</p>\n                            <p>All Ace modes can be found in the <em>lib/ace/mode</em> folder.</p>\n                            <h2 id=\"defining-syntax-highlighting-rules\"><a class=\"heading_anchor\" href=\"#defining-syntax-highlighting-rules\"><i class=\"headerLinkIcon\"></i></a>Defining Syntax Highlighting Rules</h2>\n                            <p>The Ace highlighter can be considered to be a state machine. Regular expressions define the tokens for the current state, as well as the transitions into another state. Let's define <em>mynew_highlight_rules.js</em>, which our mode above uses.</p>\n                            <p>All syntax highlighters start off looking something like this:</p>\n                            <pre><code class=\"language-javascript\">define(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar MyNewHighlightRules = function() {\n\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -&gt; the first match is used\n   this.$rules = {\n        \"start\" : [\n            {\n                token: token, // String, Array, or Function: the CSS token to apply\n                regex: regex, // String or RegExp: the regexp to match\n                next:  next   // [Optional] String: next state to enter\n            }\n        ]\n    };\n};\n\noop.inherits(MyNewHighlightRules, TextHighlightRules);\n\nexports.MyNewHighlightRules = MyNewHighlightRules;\n\n});</code></pre>\n                            <p>The token state machine operates on whatever is defined in <code>this.$rules</code>. The highlighter always begins at the <code>start</code> state, and progresses down the list, looking for a matching <code>regex</code>. When one is found, the resulting text is wrapped within a <code>&lt;span class=&quot;ace_&lt;token&gt;&quot;&gt;</code> tag, where <code>&lt;token&gt;</code> is defined as the <code>token</code> property. Note that all tokens are preceded by the <code>ace_</code> prefix when they're rendered on the page.</p>\n                            <p>Once again, we're inheriting from <code>TextHighlightRules</code> here. We could choose to make this any other language set we want, if our new language requires previously defined syntaxes. For more information on extending languages, see &quot;<a href=\"#extending-highlighters\">extending Highlighters</a>&quot; below.</p>\n                            <h3 id=\"defining-tokens\"><a class=\"heading_anchor\" href=\"#defining-tokens\"><i class=\"headerLinkIcon\"></i></a>Defining Tokens</h3>\n                            <p>The Ace highlighting system is heavily inspired by the <a href=\"http://manual.macromates.com/en/language_grammars\">TextMate language grammar</a>. Most tokens will follow the conventions of TextMate when naming grammars. A thorough (albeit incomplete) list of tokens can be found <a href=\"https://github.com/ajaxorg/ace/wiki/Creating-or-Extending-an-Edit-Mode#wiki-commonTokens\">on the Ace Wiki</a>.</p>\n                            <p>For the complete list of tokens, see <em><a href=\"https://github.com/ajaxorg/ace/blob/master/tool/tmtheme.js\">tool/tmtheme.js</a></em>. It is possible to add new token names, but the scope of that knowledge is outside of this document.</p>\n                            <p>Multiple tokens can be applied to the same text by adding dots in the token, <em>e.g.</em> <code>token: support.function</code> wraps the text in a <code>&lt;span class=&quot;ace_support ace_function&quot;&gt;</code> tag.</p>\n                            <h3 id=\"defining-regular-expressions\"><a class=\"heading_anchor\" href=\"#defining-regular-expressions\"><i class=\"headerLinkIcon\"></i></a>Defining Regular Expressions</h3>\n                            <p>Regular expressions can either be a RegExp or String definition</p>\n                            <p>If you're using a regular expression, remember to start and end the line with the <code>/</code> character, like this:</p>\n                            <pre><code class=\"language-javascript\">{\n    token : \"constant.language.escape\",\n    regex : /\\$[\\w\\d]+/\n}</code></pre>\n                            <p>A caveat of using stringed regular expressions is that any <code>\\</code> character must be escaped. That means that even an innocuous regular expression like this:</p>\n                            <pre><code class=\"language-javascript\">regex: \"function\\s*\\(\\w+\\)\"</code></pre>\n                            <p>Must actually be written like this:</p>\n                            <pre><code class=\"language-javascript\">regex: \"function\\\\s*\\(\\\\w+\\)\"</code></pre>\n                            <h4 id=\"groupings\"><a class=\"heading_anchor\" href=\"#groupings\"><i class=\"headerLinkIcon\"></i></a>Groupings</h4>\n                            <p>You can also include flat regexps--<code>(var)</code>--or have matching groups--<code>((a+)(b+))</code>. There is a strict requirement whereby matching groups <strong>must</strong> cover the entire matched string; thus, <code>(hel)lo</code> is invalid. If you want to create a non-matching group, simply start the group with the <code>?:</code> predicate; thus, <code>(hel)(?:lo)</code> is okay. You can, of course, create longer non-matching groups. For example:</p>\n                            <pre><code class=\"language-javascript\">{\n    token : \"constant.language.boolean\",\n    regex : /(?:true|false)\\b/\n},</code></pre>\n                            <p>For flat regular expression matches, <code>token</code> can be a String, or a Function that takes a single argument (the match) and returns a string token. For example, using a function might look like this:</p>\n                            <pre><code class=\"language-javascript\">var colors = lang.arrayToMap(\n    (\"aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|\" +\n    \"purple|red|silver|teal|white|yellow\").split(\"|\")\n);\n\nvar fonts = lang.arrayToMap(\n    (\"arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|\" +\n    \"symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|\" +\n    \"serif|monospace\").split(\"|\")\n);\n\n...\n\n{\n    token: function(value) {\n        if (colors.hasOwnProperty(value.toLowerCase())) {\n            return \"support.constant.color\";\n        }\n        else if (fonts.hasOwnProperty(value.toLowerCase())) {\n            return \"support.constant.fonts\";\n        }\n        else {\n            return \"text\";\n        }\n    },\n    regex: \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n}</code></pre>\n                            <p>If <code>token</code> is a function,it should take the same number of arguments as there are groups, and return an array of tokens.</p>\n                            <p>For grouped regular expressions, <code>token</code> can be a String, in which case all matched groups are given that same token, like this:</p>\n                            <pre><code class=\"language-javascript\">{\n    token: \"identifier\",\n    regex: \"(\\\\w+\\\\s*:)(\\\\w*)\"\n}</code></pre>\n                            <p>More commonly, though, <code>token</code> is an Array (of the same length as the number of groups), whereby matches are given the token of the same alignment as in the match. For a complicated regular expression, like defining a function, that might look something like this:</p>\n                            <pre><code class=\"language-javascript\">{\n    token : [\"storage.type\", \"text\", \"entity.name.function\"],\n    regex : \"(function)(\\\\s+)([a-zA-Z_][a-zA-Z0-9_]*\\\\b)\"\n}</code></pre>\n                            <h2 id=\"defining-states\"><a class=\"heading_anchor\" href=\"#defining-states\"><i class=\"headerLinkIcon\"></i></a>Defining States</h2>\n                            <p>The syntax highlighting state machine stays in the <code>start</code> state, until you define a <code>next</code> state for it to advance to. At that point, the tokenizer stays in that new <code>state</code>, until it advances to another state. Afterwards, you should return to the original <code>start</code> state.</p>\n                            <p>Here's an example:</p>\n                            <pre><code class=\"language-javascript\">this.$rules = {\n    \"start\" : [ {\n        token : \"text\",\n        regex : \"&lt;\\\\!\\\\[CDATA\\\\[\",\n        next : \"cdata\"\n    } ],\n\n    \"cdata\" : [ {\n        token : \"text\",\n        regex : \"\\\\]\\\\]&gt;\",\n        next : \"start\"\n    }, {\n        defaultToken : \"text\"\n    } ]\n};</code></pre>\n                            <p>In this extremely short sample, we're defining some highlighting rules for when Ace detects a <code>&lt;![CDATA</code> tag. When one is encountered, the tokenizer moves from <code>start</code> into the <code>cdata</code> state. It remains there, applying the <code>text</code> token to any string it encounters. Finally, when it hits a closing <code>]&gt;</code> symbol, it returns to the <code>start</code> state and continues to tokenize anything else.</p>\n                            <h2>Using the TMLanguage Tool</h2>\n                            <p>There is a tool that \n                                will take an existing <em>tmlanguage</em> file and do its best to convert it into Javascript for Ace to consume. Here's what you need to get started:\n                            </p>\n                            <ol>\n                                <li>In the Ace repository, navigate to the <em><a href=\"https://github.com/ajaxorg/ace/tree/master/tool\">tools</a></em> folder.</li>\n                                <li>Run <code>npm install</code>  to install required dependencies.</li>\n                                <li>Run <code>node tmlanguage.js &lt;path_to_tmlanguage_file&gt;</code>; for example, <code>node &lt;path_to_tmlanguage_file&gt; /Users/Elrond/elven.tmLanguage</code></li>\n                            </ol>\n                            <p>Two files are created and placed in <em>lib/ace/mode</em>: one for the language mode, and one for the set of highlight rules. You will still need to add the code into <em>ace/ext/modelist.js</em>, and add a sample file for testing.</p>\n                            <h3 id=\"a-note-on-accuracy\"><a class=\"heading_anchor\" href=\"#a-note-on-accuracy\"><i class=\"headerLinkIcon\"></i></a>A Note on Accuracy</h3>\n                            <p>Your <em>.tmlanguage</em> file will then be converted to the best of the converter’s ability. It is an understatement to say that the tool is imperfect. Probably, language mode creation will never be able to be fully autogenerated. There's a list of non-determinable items; for example:</p>\n                            <ul>\n                                <li>The use of regular expression lookbehinds<br />This is a concept that JavaScript simply does not have and needs to be faked</li>\n                                <li>Deciding which state to transition to<br />While the tool does create new states correctly, it labels them with generic terms like <code>state_2</code>, <code>state_10</code>, <em>e.t.c.</em></li>\n                                <li>Extending modes<br />Many modes say something like <code>include source.c</code>, to mean, “add all the rules in C highlighting.” That syntax does not make sense to Ace or this tool (though of course you can <a href=\"/extension-development-resources/guides/extending_highlighters.html\">extending existing highlighters</a>).</li>\n                                <li>Rule preference order</li>\n                                <li>Gathering keywords<br />Most likely, you’ll need to take keywords from your language file and run them through <code>createKeywordMapper()</code></li>\n                            </ul>\n                            <p>However, the tool is an excellent way to get a quick start, if you already possess a <em>tmlanguage</em> file for you language.</p>\n                            <h2>Extending Highlighters</h2>\n                            <p>Suppose you&#39;re working on a LuaPage, PHP embedded in HTML, or a Django template. You&#39;ll need to create a syntax highlighter that takes all the rules from the original language (Lua, PHP, or Python) and extends it with some additional identifiers (<code>&lt;?lua</code>, <code>&lt;?php</code>, <code>{%</code>, for example). Ace allows you to easily extend a highlighter using a few helper functions.</p>\n                            <h3 id=\"getting-existing-rules\"><a class=\"heading_anchor\" href=\"#getting-existing-rules\"><i class=\"headerLinkIcon\"></i></a>Getting Existing Rules</h3>\n                            <p>To get the existing syntax highlighting rules for a particular language, use the <code>getRules()</code> function. For example:</p>\n                            <pre><code class=\"language-javascript\">var HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\n\nthis.$rules = new HtmlHighlightRules().getRules();\n\n/*\n    this.$rules == Same this.$rules as HTML highlighting\n*/</code></pre>\n                            <h3 id=\"extending-a-highlighter\"><a class=\"heading_anchor\" href=\"#extending-a-highlighter\"><i class=\"headerLinkIcon\"></i></a>Extending a Highlighter</h3>\n                            <p>The <code>addRules</code> method does one thing, and it does one thing well: it adds new rules to an existing rule set, and prefixes any state with a given tag. For example, let&#39;s say you&#39;ve got two sets of rules, defined like this:</p>\n                            <pre><code class=\"language-javascript\">this.$rules = {\n    \"start\": [ /* ... */ ]\n};\n\nvar newRules = {\n    \"start\": [ /* ... */ ]\n}</code></pre>\n                            <p>If you want to incorporate <code>newRules</code> into <code>this.$rules</code>, you&#39;d do something like this:</p>\n                            <pre><code class=\"language-javascript\">this.addRules(newRules, \"new-\");\n\n/*\n    this.$rules = {\n        \"start\": [ ... ],\n        \"new-start\": [ ... ]\n    };\n*/</code></pre>\n                            <h3 id=\"extending-two-highlighters\"><a class=\"heading_anchor\" href=\"#extending-two-highlighters\"><i class=\"headerLinkIcon\"></i></a>Extending Two Highlighters</h3>\n                            <p>The last function available to you combines both of these concepts, and it&#39;s called <code>embedRules</code>. It takes three parameters:</p>\n                            <ol>\n                                <li>An existing rule set to embed with</li>\n                                <li>A prefix to apply for each state in the existing rule set</li>\n                                <li>A set of new states to add</li>\n                            </ol>\n                            <p>Like <code>addRules</code>, <code>embedRules</code> adds on to the existing <code>this.$rules</code> object. </p>\n                            <p>To explain this visually, let&#39;s take a look at the syntax highlighter for Lua pages, which combines all of these concepts:</p>\n                            <pre><code class=\"language-javascript\">var HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar LuaHighlightRules = require(\"./lua_highlight_rules\").LuaHighlightRules;\n\nvar LuaPageHighlightRules = function() {\n    this.$rules = new HtmlHighlightRules().getRules();\n\n    for (var i in this.$rules) {\n        this.$rules[i].unshift({\n            token: \"keyword\",\n            regex: \"&lt;\\\\%\\\\=?\",\n            next: \"lua-start\"\n        }, {\n            token: \"keyword\",\n            regex: \"&lt;\\\\?lua\\\\=?\",\n            next: \"lua-start\"\n        });\n    }\n    this.embedRules(LuaHighlightRules, \"lua-\", [\n        {\n            token: \"keyword\",\n            regex: \"\\\\%&gt;\",\n            next: \"start\"\n        },\n        {\n            token: \"keyword\",\n            regex: \"\\\\?&gt;\",\n            next: \"start\"\n        }\n    ]);\n};</code></pre>\n                            <p>Here, <code>this.$rules</code> starts off as a set of HTML highlighting rules. To this set, we add two new checks for <code>&lt;%=</code> and <code>&lt;?lua=</code>. We also delegate that if one of these rules are matched, we should move onto the <code>lua-start</code> state. Next, <code>embedRules</code> takes the already existing set of <code>LuaHighlightRules</code> and applies the <code>lua-</code> prefix to each state there. Finally, it adds two new checks for <code>%&gt;</code> and <code>?&gt;</code>, allowing the state machine to return to <code>start</code>.</p>\n                            <h3>Code Folding</h3>\n                            <p>Adding new folding rules to your mode can be a little tricky. First, insert the following lines of code into your mode definition:</p>\n                            <pre><code class=\"language-javascript\">var MyFoldMode = require(\"./folding/newrules\").FoldMode;\n\n...\nvar MyMode = function() {\n\n    ...\n\n    this.foldingRules = new MyFoldMode();\n};</code></pre>\n                            <p>You&#39;ll be defining your code folding rules into the <em>lib/ace/mode/folding</em> folder. Here&#39;s a template that you can use to get started:</p>\n                            <pre><code class=\"language-javascript\">define(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    // regular expressions that identify starting and stopping points\n    this.foldingStartMarker; \n    this.foldingStopMarker;\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n\n        // test each line, and return a range of segments to collapse\n    };\n\n}).call(FoldMode.prototype);\n\n});</code></pre>\n                            <p>Just like with <code>TextMode</code> for syntax highlighting, <code>BaseFoldMode</code> contains the starting point for code folding logic. <code>foldingStartMarker</code> defines your opening folding point, while <code>foldingStopMarker</code> defines the stopping point. For example, for a C-style folding system, these values might look like this:</p>\n                            <pre><code class=\"language-javascript\">this.foldingStartMarker = /(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/;\nthis.foldingStopMarker = /^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/;</code></pre>\n                            <p>These regular expressions identify various symbols--<code>{</code>, <code>[</code>, <code>//</code>--to pay attention to. <code>getFoldWidgetRange</code> matches on these regular expressions, and when found, returns the range of relevant folding points. For more information on the <code>Range</code> object, see <a href=\"#nav=api&amp;api=range\">the Ace API documentation</a>.</p>\n                            <p>Again, for a C-style folding mechanism, a range to return for the starting fold might look like this:</p>\n                            <pre><code class=\"language-javascript\">var line = session.getLine(row);\nvar match = line.match(this.foldingStartMarker);\nif (match) {\n    var i = match.index;\n\n    if (match[1])\n        return this.openingBracketBlock(session, match[1], row, i);\n\n    var range = session.getCommentFoldRange(row, i + match[0].length);\n    range.end.column -= 2;\n    return range;\n}</code></pre>\n                            <p>Let&#39;s say we stumble across the code block <code>hello_world() {</code>. Our range object here becomes:</p>\n                            <pre><code class=\"language-json\">{\n  startRow: 0,\n  endRow: 0,\n  startColumn: 0,\n  endColumn: 13\n}</code></pre>\n                            <h2>Testing Your Highlighter</h2>\n                            <p>The best way to test your tokenizer is to see it live, right? To do that, you&#39;ll want to modify the <a href=\"build/kitchen-sink.html\">live Ace demo</a> to preview your changes. You can find this file in the root Ace directory with the name <em>kitchen-sink.html</em>.</p>\n                            <ol>\n                                <li>\n                                    add an entry to <code>supportedModes</code> in <a href=\"https://github.com/ajaxorg/ace/blob/master/lib/ace/ext/modelist.js#L53\"><code>ace/ext/modelist.js</code></a>\n                                </li>\n                                <li>\n                                    <p>add a sample file to <code>demo/kitchen-sink/docs/</code> with same name as the mode file\n                                </li>\n                            </ol>\n                            <p>Once you set this up, you should be able to witness a live demonstration of your new highlighter.</p>\n                            <h3 id=\"adding-automated-tests\"><a class=\"heading_anchor\" href=\"#adding-automated-tests\"><i class=\"headerLinkIcon\"></i></a>Adding Automated Tests</h3>\n                            <p>Adding automated tests for a highlighter is trivial so you are not required to do it, but it can help during development.</p>\n                            <p>In <code>lib/ace/mode/_test</code> create a file named <code><pre>text_<span style=\"color:#AA0D91\">&lt;modeName&gt;</span>.txt</pre></code> with some example code. (You can skip this if the document you have added in <code>demo/docs</code> both looks good and covers various edge cases in your language syntax).\n                            </p>\n                            <p> Run <code><span style=\"color:#AA0D91\">node</span> <span style=\"color:#008800\">highlight_rules_test.js</span> <span style=\"color:#000088\">-gen</span></code> to preserve current output of your tokenizer in <code>tokens_<span style=\"color:#AA0D91\">&lt;modeName&gt;</span>.json</code>\n                            </p>\n                            <p>After this running <code><span style=\"color:#008800\">highlight_rules_test.js</span> <span style=\"color:#000088\">optionalLanguageName</span></code> will compare output of your tokenizer with the correct output you've created.\n                            </p>\n                            <p>Any files ending with the <em>_test.js</em> suffix are automatically run by Ace&#39;s <a href=\"https://travis-ci.org/#!/ajaxorg/ace\">Travis CI</a> server.</p>\n                        </div>\n                        <div class=\"tab-pane fade\" id=\"api\">\n                            <div class=\"row centerpiece\">\n                                <div id=\"sidebarContainer\" class=\"span2\">\n                                    <div id=\"sidebar\">\n                                        <div id=\"well\">\n                                            \n                                            <ul class=\"menu\">\n                                                <li>\n                                                    <div class=\"menu-item\"><a href=\"./api/ace.html\" class=\"menuLink namespace\">Ace</a></div>\n                                                </li>\n                                                <li>\n                                                    <div class=\"menu-item\"><a href=\"./api/anchor.html\" class=\"menuLink namespace\">Anchor</a></div>\n                                                </li>\n                                                <li>\n                                                    <div class=\"menu-item\"><a href=\"./api/background_tokenizer.html\" class=\"menuLink namespace\">BackgroundTokenizer     </a></div>\n                                                </li>\n                                                <li>\n                                                    <div class=\"menu-item\"><a href=\"./api/document.html\" class=\"menuLink namespace\">Document    </a></div>\n                                                </li>\n                                                <li>\n                                                    <div class=\"menu-item\"><a href=\"./api/edit_session.html\" class=\"menuLink namespace\">EditSession</a></div>\n                                                </li>\n                                                <li>\n                                                    <div class=\"menu-item\"><a href=\"./api/editor.html\" class=\"menuLink namespace\">Editor</a></div>\n                                                </li>\n                                                <li>\n                                                    <div class=\"menu-item\"><a href=\"./api/range.html\" class=\"menuLink namespace\">Range</a></div>\n                                                </li>\n                                                <li>\n                                                    <div class=\"menu-item\"><a href=\"./api/scrollbar.html\" class=\"menuLink namespace\">Scrollbar</a></div>\n                                                </li>\n                                                <li>\n                                                    <div class=\"menu-item\"><a href=\"./api/search.html\" class=\"menuLink namespace\">Search                     </a></div>\n                                                </li>\n                                                <li>\n                                                    <div class=\"menu-item\"><a href=\"./api/selection.html\" class=\"menuLink namespace\">Selection   </a></div>\n                                                </li>\n                                                <li>\n                                                    <div class=\"menu-item\"><a href=\"./api/token_iterator.html\" class=\"menuLink namespace\">TokenIterator</a></div>\n                                                </li>\n                                                <li>\n                                                    <div class=\"menu-item\"><a href=\"./api/tokenizer.html\" class=\"menuLink namespace\">Tokenizer</a></div>\n                                                </li>\n                                                <li>\n                                                    <div class=\"menu-item\"><a href=\"./api/undomanager.html\" class=\"menuLink namespace\">UndoManager</a></div>\n                                                </li>\n                                                <li>\n                                                    <div class=\"menu-item\"><a href=\"./api/virtual_renderer.html\" class=\"menuLink namespace\">VirtualRenderer</a></div>\n                                                </li>\n                                            </ul>\n                                        </div>\n                                    </div>\n                                </div>\n                                <div id=\"apiHolder\">\n                                    <div id=\"documentation\" class=\"span7\">\n                                    <h1>Ace API Reference</h1>\n                                    <p>Welcome to the Ace API Reference!</p>\n                                    <p>On the left, you'll find a list of all of our currently documented classes. \n                                        These is not a complete set of classes, but rather, the \"core\" set. For more \n                                        information on how to work with Ace, check out the <a href=\"#nav=embedding\">embedding guide</a>.\n                                    </p>\n                                    <p>Below is an ERD diagram describing some fundamentals about how the internals of Ace works:</p>\n                                    <img src=\"doc/template/resources/images/Ace_ERD.png\" style=\"max-width:100%; max-height:100%\" />\n                                </div>\n                                </div>\n                            </div>\n                        </div>\n                        <div class=\"tab-pane fade\" id=\"production\">\n                            <h1>Projects Using Ace</h1>\n                            <p>Ace is used all over the web in all kinds of production applications. Here is\n                                just a small sampling:</p>\n                            <ul class=\"menu-list\">\n                                <li>\n                                    <img src=\"doc/site/images/github-logo.png\"\n                                        style=\"left: -15px; top: -9px;\" />\n                                    <a href=\"https://github.com/blog/905-edit-like-an-ace\">GitHub</a>\n                                </li>\n                                <li>\n                                    <img src=\"doc/site/images/khan-logo.png\"\n                                        style=\"left: -10px; top: -27px; width: 120px\" />\n                                    <a href=\"http://ejohn.org/blog/introducing-khan-cs/\">Khan Academy</a>\n                                </li>\n                                <li>\n                                    <img src=\"doc/site/images/cloud9-logo.png\"\n                                        style=\"left: -11px;top:-12px; width:122px\" />\n                                    <a href=\"https://github.com/ajaxorg/cloud9\">Cloud9 IDE</a>\n                                </li>\n                                \n                                <li>\n                                    <img src=\"doc/site/images/firefox-logo.png\"\n                                        style=\"left:10px;top:-5px;width:80px\" />\n                                    <a href=\"https://builder.addons.mozilla.org/\">Firefox Add-on Builder</a>\n                                </li>\n                                <li>\n                                    <img src=\"doc/site/images/codecademy-logo.png\"\n                                        style=\"left: -5px; top: 10px;\" />\n                                    <a href=\"http://www.codecademy.com/\">Codecademy</a>\n                                </li>\n                                <li>\n                                    <img src=\"doc/site/images/rstudio_logo_64.png\"\n                                        style=\"left: 19px; top: 2px;\" />\n                                    <a href=\"http://rstudio.org/\">RStudio</a>\n                                </li>\n                                <li>\n                                    <img src=\"https://zedapp.s3.amazonaws.com/uploads/2014/02/zed-small.png\" style=\"left: -1px;top: -20px;width: 103px;\">\n                                    <a href=\"http://zedapp.org\">Zed</a>\n                                </li>\n                                <li>\n                                    <img src=\"https://raw.githubusercontent.com/creationix/tedit/gh-pages/icons/icon-128.png\"\n                                        style=\"width: 104px; left: -1px; top: -17px;\">\n                                    <a href=\"https://github.com/creationix/tedit\">Tedit</a>\n                                </li>\n                                <li>\n                                    <img src=\"https://upload.wikimedia.org/wikipedia/commons/6/63/Wikipedia-logo.png\" style=\"left: -5px; top: -35px; width: 110px;\">\n                                    <a href=\"https://en.wikipedia.org/wiki/Special:Version\" style=\"font-family: 'Linux Libertine','Hoefler Text',Georgia,'Times New Roman',Times,serif;\">W<span style=\"font-variant: small-caps;\">Wikipedia</span>A</a>\n                                </li>\n                                <li>\n                                    <img src=\"doc/site/images/codiad.png\"\n                                        style=\"left: 10px; top: -4px; width:80px\" />\n                                    <a href=\"http://codiad.com/\">Codiad</a>\n                                </li>\n                                <li>\n                                    <img src=\"doc/site/images/zorba-logo.png\"\n                                        style=\"left: -5px; top: 16px;\n                                                padding: 6px 4px 6px 6px; width: 100px\" />\n                                    <a href=\"http://try.zorba.io/queries/xquery\">Zorba XQuery</a>\n                                </li>\n                                <li>\n                                    <img src=\"doc/site/images/plunker.png\"\n                                        style=\"left: 13px; top: -4px; width: 75px\" />\n                                    <a href=\"http://plnkr.co/edit/\">Plunker</a>\n                                </li>\n                                <li>\n                                    <img src=\"https://raw.githubusercontent.com/dart-lang/chromedeveditor/master/ide/web/images/icon_128.png\"\n                                        style=\"left: 0px;top: -15px;width: 100px;\" />\n                                    <a href=\"https://github.com/dart-lang/chromedeveditor\">Chrome Dev Editor</a>\n                                </li> \n                                <li>\n                                    <img src=\"doc/site/images/sassmeister-logo.png\"\n                                        style=\"left: 10px;top: -5px;width: 80px;\" />\n                                    <a href=\"http://sassmeister.com/\">SassMeister</a>\n                                </li> \n                                <li>\n                                    <img src=\"doc/site/images/sx-logo.png\"\n                                        style=\"left: -11px; top: -12px;\">\n                                    <a href=\"http://www.scroipe.com\">Scroipe</a>\n                                </li>\n                                <li>\n                                    <img src=\"doc/site/images/ideone-logo.png\"\n                                        style=\"left: -5px; top: 20px;\">\n                                    <a href=\"http://ideone.com\">Ideone.com</a>\n                                </li>\n                                <li>\n                                    <div style=\"\n                                        background: url(http://lively-web.org/core/media/lively-web-logo.png) no-repeat;\n                                        position: absolute; left: -5px; height: 71px; width: 103px; background-size: 390px;\n                                        background-position: 19px;\"></div>\n                                    \n                                    <a href=\"http://lively-web.org\">Lively Web</a>\n                                </li>\n                                <li>\n                                    <img src=\"doc/site/images/modx-logo-4.png\"\n                                        style=\"left: 18px; top: 6px;\">\n                                    <a href=\"http://modx.com/extras/package/ace\">MODX</a>\n                                </li>\n                                <li>\n                                    <img src=\"doc/site/images/shiftedit-logo.png\"\n                                        style=\"left: -10px; top: -20px; width: 120px\" />\n                                    <a href=\"http://shiftedit.net/\">ShiftEdit</a>\n                                </li>\n                                <li>\n                                    <div class=\"rotating-logo\" style=\"background:url(doc/site/images/habitat-logo.svg) center no-repeat;\n                                        left: 19px; top: 6px;width: 60px;height: 60px;background-size: 60px;position: relative;\"></div>\n                                    <a href=\"http://habitat.inkling.com\">Inkling Habitat</a>\n                                </li>\n                                <li style=\"width: 248px;\">\n                                    <img src=\"https://codecombat.com/images/pages/base/logo.png\" style=\"left: 0px; top: 1px; width: 248px\">\n                                    <a href=\"http://codecombat.com\">Code Combat</a>\n                                </li>\n                                <!--seems to be down <li>\n                                    <img src=\"doc/site/images/lws-logo.png\"\n                                        style=\"left: 0px; top: 0px; width: 100px\" />\n                                    <a href=\"http://liveworkspace.org\">Live Workspace</a>\n                                </li>-->\n                                <li>\n                                    <img src=\"doc/site/images/repl.it-logo.png\"\n                                        style=\"left: 0px; top: 17px; width: 100px\" />\n                                    <a href=\"http://repl.it/\">Repl.it</a>\n                                </li>\n                                <li>\n                                    <img src=\"doc/site/images/stypi-logo.png\"\n                                        style=\"left: 9px; top: -5px; width: 84px\" />\n                                    <a href=\"https://code.stypi.com/\">Stypi</a>\n                                </li>\n                                <li>\n                                    <img src=\"doc/site/images/weecod-logo.png\"\n                                        style=\"left: 0px; top: 0px; width: 100px\" />\n                                    <a href=\"http://www.weecod.com\">Weecod</a>\n                                </li>\n                                <li>\n                                    <img src=\"doc/site/images/processwire-logo.svg\"\n                                        style=\"left: 0px; top: 25px; width: 102px\" />\n                                    <a href=\" http://modules.processwire.com/modules/inputfield-ace-editor/\">Process<i>Wire</i></a>\n                                </li>\n                                <li>\n                                    <img src=\"doc/site/images/crunchapp-logo.png\"\n                                        style=\"left: 9px; top: -5px; width: 84px\" />\n                                    <a href=\"http://crunchapp.net/\">Crunch</a>\n                                </li>\n                                <li>\n                                    <img src=\"https://drivenotepad.github.io/images/icon-128.png\" \n                                        style=\"left: 9px; top: -5px; width: 84px\">\n                                    <a href=\"https://drivenotepad.appspot.com/support\">Drive Notepad</a>\n                                </li>\n                                <li>\n                                    <div class=\"text-logo\">textor</div>\n                                    <a href=\"http://textor.houfeng.net/\">Textor</a>\n                                </li>\n                                <li>\n                                    <div class=\"text-logo\">Dillinger</div>\n                                    <a href=\"http://dillinger.io/\">Dillinger</a>\n                                </li>\n                                <li>\n                                    <div class=\"text-logo\">Evaluzio</div>\n                                    <a href=\"http://www.evaluzio.net/editor\">Evaluzio</a>\n                                </li>\n                                <li>\n                                    <div class=\"text-logo\">CodeHelper</div>\n                                    <a href=\"http://www.gamedevhelper.com/\">CodeHelper</a>\n                                </li>\n                                <li>\n                                    <div class=\"text-logo\">Edicy</div>\n                                    <a href=\"http://www.edicy.com/blog/new-code-editor-for-creating-unique-website-designs\">Edicy</a>\n                                </li>\n                                <li>\n                                    <div class=\"text-logo\">pixelJET</div>\n                                    <a href=\"http://www.pixeljet.net/index.html\">pixelJET</a>\n                                </li>\n                                <li>\n                                    <div class=\"text-logo\">Orbit</div>\n                                    <a href=\"http://orbit.bonsaijs.org/\">BonsaiJS playground</a>\n                                </li>\n                                <li>\n                                    <img src=\"https://approximatrix.com/static/images/simplytext/logo-long-white.png\"\n                                        style=\"width: 106px; left: -4px; top: 26px;\">\n                                    <a href=\"http://approximatrix.com/products/simplytext\">Simply Text</a>\n                                </li>\n                                <li>\n                                    <div class=\"text-logo\" style=\"font-size: 18px;\">ShareLaTeX</div>\n                                    <a href=\"https://www.sharelatex.com\">ShareLaTeX</a>\n                                </li>\n                                <li>\n                                    <div class=\"text-logo\" style=\"font-size: 18px;\">Code Complete</div>\n                                    <a href=\"http://pagesofinterest.net/shop/code-complete\">Code Complete</a>\n                                </li>\n                                <li>\n                                    <div class=\"text-logo\" style=\"font-size: 18px;\">ACEView</div>\n                                    <a href=\"https://github.com/faceleg/ACEView\">ACEView</a>\n                                </li>\n                                <li>\n                                    <div class=\"text-logo\" style=\"margin-left:-12px;\">BootTheme</div>\n                                    <a href=\"http://www.boottheme.com/\">BootTheme</a>\n                                </li>\n                                <li>\n                                    <img src=\"https://codebender.cc/images/codebender-transparent.png\"\n                                        style=\"left: -9px; width: 117px;top: -22px;\">\n                                    <a href=\"http://codebender.cc/\">Codebender</a>\n                                </li>\n                                <li>\n                                    <div class=\"text-logo\" style=\"margin-left:-5px;\">Debuggex</div>\n                                    <a href=\"http://www.debuggex.com\">Debuggex</a>\n                                </li>\n                                <li>\n                                    <div style=\"width:90px; left:9px; top:-6px;background:rgb(23,23,23);color:rgb(181,232,83);\n                                        font: 90px/90px Monaco, 'Bitstream Vera Sans Mono', 'Lucida Console', Terminal, monospace;\n                                        text-shadow: 0 1px 1px rgba(0, 0, 0, 0.1), 0 0 5px rgba(181, 232, 83, 0.1), 0 0 10px rgba(181, 232, 83, 0.1);\n                                        -webkit-font-smoothing: antialiased; text-align: center; position: absolute;\">S</div>\n                                    <a href=\"http://slimtext.org/\">Slim Text</a>\n                                </li>\n                                <li>\n                                    <img src=\"https://www.decor-tab-creator.com/_files/decor_logo_white_new.png\"\n                                        style=\"left: -5px; width: 111px;top: 20px;\">\n                                    <a href=\"https://www.decor-tab-creator.com\">Decor</a>\n                                </li>\n                                <li>\n                                    <img src=\"https://papeeria.com/assets/all/images/papeeria_small.png\" style=\"width: 95px; left: 2px; top: 8px;\">\n                                    <a href=\"http://papeeria.com\">Papeeria</a>\n                                </li>\n                                <li>\n                                    <script>\n                                        ace.require(\"ace/lib/dom\").importCssStylsheet(\"https://fonts.googleapis.com/css?family=Henny+Penny\", document);\n                                    </script>\n                                    <div class=\"text-logo\" style=\"margin-left:-17px;font-family:'Henny Penny',cursive;\">ChocolateJs</div>\n                                    <a href=\"https://chocolatejs.org\">Chocolatejs</a>\n                                </li>\n                                <li>\n                                    <img src=\"doc/site/images/ac-logo.png\"\n                                        style=\"left: 4px; top: 25px;\" />\n                                    <a href=\"http://www.applicationcraft.com/\">Application Craft</a>\n                                </li>\n                                <li>\n                                    <img src=\"https://playir.com/common/icon_playir.png\"\n                                        style=\"left: 11px; width: 96px;top: -17px;\">\n                                    <a href=\"http://playir.com\">Playir</a>\n                                </li>\n                                <li>\n                                    <div class=\"text-logo\" style=\"font-size: 23px;\">Runnable</div>\n                                    <a href=\"http://runnable.com\">Runnable</a>\n                                </li>\n                                <li>\n                                    <img src=\"https://joshnuss.github.io/mruby-web-irb/images/favicon.png\"\n                                        style=\"left: 4px; width: 90px;top: -17px;\">\n                                    <a href=\"http://joshnuss.github.io/mruby-web-irb/\">Mruby-web-irb</a>\n                                </li>\n                                <li>\n                                    <div class=\"text-logo\" style=\"margin-left:0px;\">Codiqa</div>\n                                    <a href=\"https://codiqa.com/\">Codiqa</a>\n                                </li>\n                                <li>\n                                    <div class=\"text-logo\" style=\"margin-left:0px;\">Jetstrap</div>\n                                    <a href=\"http://jetstrap.com/\">Jetstrap</a>\n                                </li>\n                                <li title=\"Remote pair programming\">\n                                    <div class=\"text-logo\" style=\"margin-left:0px;\">MadEye</div>\n                                    <a href=\"http://madeye.io/\">MadEye</a>\n                                </li>\n                                <li>\n                                    <div class=\"text-logo\" style=\"text-shadow:none\">Online Judge</div>\n                                    <a href=\"http://www.realoj.com\">RealOJ</a>\n                                </li>\n                                <li title=\"WebRTC based video chat + code editor\">\n                                    <div class=\"text-logo\" style=\"font-size: 18px;\">(codassium);</div>\n                                    <a href=\"http://codassium.com/\">(codassium);</a>\n                                </li>\n                                <li>\n                                    <div style=\"font-size:50px\" class=\"text-logo\">t<span style=\"color:green\">p<span></div>\n                                    <a href=\"https://tutorialspoint.com\">tutorialspoint</a>\n                                </li>\n                                <li>\n                                    <!-- <img src=\"https://iknode.com/iknode_symbol.png\"\n                                        style=\"width: 96px; left: 2px; top: -21px;\"> -->\n                                    <a href=\"http://iknode.com/\">iKnode</a>\n                                </li>\n                                <li title=\"Online conference and code review tool\">\n                                    <div style=\"width: 90px; left: 10px; top: 0px;background:rgb(24,73,92);color: white;position: absolute;\n                                        font-size: 68px;text-align: center;font-weight: bold;font-family: inherit;line-height: normal;\">sT</div>\n                                    <a href=\"http://sourcetalk.net/\">SourceTalk</a>\n                                </li>\n                                <li title=\"Php framework\">\n                                    <div class=\"text-logo\" style=\"margin-left:-12px;\">Andromeda</div>\n                                    <a href=\"http://www.andromeda-project.org/index.php\">Andromeda</a>\n                                </li>\n                                <li>\n                                    <img src=\"https://raw.github.com/Gisto/Gisto/master/app/icon.png\"\n                                        style=\"width: 96px; left: 2px; top: -21px;\">\n                                    <a href=\"http://www.gistoapp.com/\">Gisto</a>\n                                </li>\n                                <li>\n                                    <img src=\"https://jdoodle.com/static/images/jdoodle.png\"\n                                        style=\"width: 122px; left: -3px; top: -12px;\">\n                                    <a href=\"http://jdoodle.com/\">JDoodle</a>\n                                </li>\n                                <li>\n                                    <div class=\"text-logo\" style=\"margin-top:4px\">Run PHP Code</div>\n                                    <a href=\"https://github.com/websiteduck/Run-PHP-Code\">RunPHPCode</a>\n                                </li>\n                                <li>\n                                    <div class=\"text-logo\">InstaEDU</div>\n                                    <a href=\"http://instaedu.com/lesson-demo/\">InstaEDU</a>\n                                </li>\n                                <li>\n                                    <img src=\"https://s7.postimg.org/tbw9lfcvb/cloudcmd.png\"\n                                        style=\"width: 74px; left: 13px; top: -2px;\">\n                                    <a href=\"http://cloudcmd.io\">Cloud Commander</a>\n                                </li>\n                                <li>\n                                    <div class=\"text-logo\">NapCat</div>\n                                    <a href=\"http://napcatapp.tumblr.com/post/60598006734/version-1-3-is-released\">NapCat</a>\n                                </li>\n                                <li>\n                                    <div class=\"text-logo\">CorsLit</div>\n                                    <a href=\"http://www.corslit.com/new/melloWorld\">CorsLit</a>\n                                </li>\n                                <li>\n                                    <div style=\"color:orange;font-size:50px\" class=\"text-logo\">OJ</div>\n                                    <a href=\"http://ojjs.org/index.html\">OJjs</a>\n                                </li>\n                                <li>\n                                    <div class=\"text-logo\">Codechat</div>\n                                    <a href=\"http://codechat.net/\">Codechat</a>\n                                </li>\n                                <li>\n                                    <img src=\"doc/site/images/wolf_3d_logo_trans.png\"\n                                        style=\"left: 10px; top: -4px; width:80px\" />\n                                    <a href=\"http://www.wolfcms.org/repository/133\">Wolf CMS</a>\n                                </li>\n                                <li>\n                                    <div style=\"color:green;font-size:50px\" class=\"text-logo\">&lt;/&gt;</div>\n                                    <a href=\"http://thlorenz.github.io/scriptie-talkie/\">Scriptie-Talkie</a>\n                                </li>\n                                <li>\n                                    <div class=\"text-logo\">md</div>\n                                    <a href=\"http://thlorenz.github.io/browserify-markdown-editor/\">browserify-markdown-editor</a>\n                                </li>\n                                <li>\n                                    <!-- <img src=\"https://www.siteleaf.com/images/logo.svg\" style=\"left: 20px; top: -15px; width: 60px;\"> -->\n                                    <a href=\"http://www.siteleaf.com/\">Siteleaf</a>\n                                </li>\n                                <li>\n                                    <div class=\"\" style=\"\n                                        background: url(http://colorsublime.com/img/ColorSublime_logo.png);\n                                        position: absolute;height: 65px;width: 99px;\n                                        background-size: 310px 128px;background-position: 210px top;\n                                    \"></div>\n                                    <a href=\"http://colorsublime.com/\">ColorSublime</a>\n                                </li>\n                                <li>\n                                    <div class=\"text-logo\">iMDone</div>\n                                    <a href=\"http://piascikj.github.io/imdone/\">iMDone</a>\n                                </li>\n                                <li>\n                                    <div class=\"text-logo\"></div>\n                                    <a href=\"http://bakemycss.mypathforpython.appspot.com/\">BakeMyCss</a>\n                                </li>\n                                <li>\n                                    <div style=\"\n                                        background: url(https://s3.amazonaws.com/spark-website/spark.png) no-repeat;\n                                        position: absolute; height: 65px; width: 83px; background-size: 200px 65px;\n                                        background-position: 19px;\"></div>\n                                    <a href=\"http://spark.io/build\">Spark Core</a>\n                                </li>\n                                <li>\n                                    <img src=\"https://2.gravatar.com/avatar/021e207e86fe81a7d81c67ef1ff38a0c\" style=\"left: 11px; top: -5px;\">\n                                    <a href=\"http://owncloud.org\">ownCloud</a>\n                                </li>\n                                <li>\n                                   <!--  <img src=\"https://www.ezoui.com/prod/images/EZo_logo.png\" style=\"left: 11px; top: -5px;\"> -->\n                                    <a href=\"http://jqmdesigner.appspot.com\">JQM Designer</a>\n                                </li>\n                                <li>\n                                    <div class=\"text-logo\">qooxdoo</div>\n                                    <a href=\"http://demo.qooxdoo.org/devel/playground/#\">Qooxdoo playground</a>\n                                </li>\n                                <li>\n                                    <div class=\"text-logo\">ShareJS</div>\n                                    <a href=\"http://sharejs.org/hello-ace.html\">ShareJS</a>\n                                </li>\n                                <li>\n                                    <img src=\"https://neutron-drive.appspot.com/static/img/neutron_face_high.png\"\n                                        style=\"width: 86px; left: 7px; top: -11px;\">\n                                    <a href=\"http://neutronide.com/\">Neutron IDE</a>\n                                </li>\n                                <li>\n                                    <div style=\"\n                                        background: url(https://www.pythonanywhere.com/static/anywhere/images/logo-234x35.png) no-repeat;\n                                        position: absolute; height: 65px; width: 94px; background-size: 234px 35px;\n                                        background-position: 19px;\"></div>\n                                    <a href=\"http://www.pythonanywhere.com/\">PythonAnywhere</a>\n                                </li>\n                                <li>\n                                    <!-- <img src=\"https://subtexteditor.com/images/subtext-icon-4.png\"\n                                        style=\"width: 86px; left: 7px; top: -11px;\"> -->\n                                    <a href=\"http://subtexteditor.com/\">Subtext Editor</a>\n                                </li>\n                                <li>\n                                    <img src=\"https://climbi.com/static/img/logo.png\"\n                                        style=\"width: 86px; left: 7px; top: -11px;\">\n                                    <a href=\"http://climbi.com/\">Climbi</a>\n                                </li>\n                                <li>\n                                    <img src=\"https://octobercms.com/themes/website/assets/images/october.png\" style=\"width: 95px; left: 2px; top: -17px;\">\n                                    <a href=\"http://octobercms.com\">October CMS</a>\n                                </li>\n                                <li style=\"width: 248px;\">\n                                    <img src=\"https://www.codeavengers.com/image/RedLogoSmall.png\" style=\"width: 248px; top: 30px;\">\n                                    <a href=\"http://www.codeavengers.com/image/RedLogoSmall.png\">Code Avengers</a>\n                                </li>\n                                <li style=\"width: 248px;\">\n                                    <!-- <img src=\"https://playcodemonkey.com/images/logoSmallFaceTopTrans.png\" style=\"width: 238px; top: -2px; left: 5px\"> -->\n                                    <a href=\"http://www.codemonkey.co.il/\">CodeMonkey</a>\n                                <li>\n                                    <img src=\"https://funprogramming.org/i/fun_programming_logo_for_ace.png\" style=\"width: 75px; left: 12px; top: -5px;\">\n                                    <a href=\"http://funprogramming.org\">Fun Programming</a>\n                                </li>\n                                </li>\n                                <li>\n                                    <div style=\"font-size:23px\" class=\"text-logo\">{dev<span style=\"color:#ef4423\">un</span>ity}</div>\n                                    <a href=\"http://devunity.com/\">Devunity</a>\n                                </li>\n                                <li>\n                                   <!--  <img src=\"https://asciidocfx.com/images/logo.png\" style=\"width: 75px; left: 12px; top: 0px;\"> -->\n                                    <a href=\"http://asciidocfx.com/\">Asciidoc FX</a>\n                                </li>\n                                <li>\n                                    <!-- <img src=\"https://learn-angular.org/Content/Images/LearnAngular-small.png\" style=\"width: 275px; left: -12px; top: 7px;\"> -->\n                                    <a href=\"http://learn-angular.org\">Learn Angular</a>\n                                </li>\n                                <li>\n                                    <a href=\"http://www.divshot.com/\">Divshot</a>\n                                </li>\n                                <li>\n                                    <img src=\"https://lh4.ggpht.com/hG5bDu1GBXwxpPnrgPcAmTNQyZK4ICBDC9aeLNmMZahEYQOz_2vYT6sBqLNGLIGPopWjdveEvPuM9NBuErUSLQ=s60\" style=\"width: 75px; left: 12px; top: -5px;\">\n                                    <a href=\"http://bootzee.com\">Bootzee</a>\n                                </li>\n                                <li>\n                                    <img src=\" http://www.branchcms.com/layout/images/branch-brand-logo-2.png\" style=\"width: 125px; left: -12px; top: 15px;\">\n                                    <a href=\"http://www.branchcms.com/blog/post/new-code-editor-ace\">Branch CMS</a>\n                                </li>\n                                <li>\n                                   <!--  <img src=\"https://neocities.org/assets/img/cat.png\" style=\"width: 95px; left: 2px; top: 0px;\"> -->\n                                    <a href=\"https://neocities.org\">Neocities</a>\n                                </li>\n                                <li>\n                                   <!--  <img src=\"https://webftp.selfbuild.fr/images/logo/logo_128.png\" style=\"width: 95px; left: 2px; top: -17px;\"> -->\n                                    <a href=\"http://webftp.selfbuild.fr\">SelfBuild </a>\n                                </li>\n                                <li>\n                                   <!--  <img src=\"https://fnboard.herokuapp.com/logo.png\"\n                                        style=\"left: 5px; width: 90px;top: 0px;\"> -->\n                                    <a href=\"http://fnboard.herokuapp.com/\">Pixeladded</a>\n                                </li>\n                                <li>\n                                    <!-- <img src=\"https://www.aldryn.com/static/img/logo-main-print.png\" style=\"width: 125px; left: -12px; top: 18px;\"> -->\n                                    <a href=\"http://www.aldryn.com\">Aldryn</a>\n                                </li>\n                                <li>\n                                    <!-- <img src=\"https://sbp.selfbuild.fr/sbp.png\" style=\"width: 95px; left: 2px; top: -8px;\"> -->\n                                    <a href=\"http://sbp.selfbuild.fr/\">SBP</a>\n                                </li>\n                                <li>\n                                    <img src=\"https://mycodestock.com/assets/img/mycodestock.png?v=2.1.0\" style=\"width: 126px; left: -18px; top: -30px;\">\n                                    <a href=\"https://mycodestock.com/\">my code stock</a>\n                                </li>\n                                <li>\n                                    <!-- <img src=\"https://eseecode.com/web/sites/eseecode.com/files/favicon.png\" style=\"width: 100px; left: 0px; top: -20px;\"> -->\n                                    <a href=\"http://eseecode.com/\">eSeeCode</a>\n                                </li>\n                                <li>\n                                    <img src=\"https://codinghire.com/static/img/twitter.png\" style=\"width: 80px; left: 10px; top: -3px;\">\n                                    <a href=\"https://codinghire.com/\">Coding Hire</a>\n                                </li>\n                                <li>\n                                    <div style=\"\n                                        background: url(https://apiary.a.ssl.fastly.net/assets/images/website/logotype-apiary-cb8fa3918bdf3961.png) no-repeat;\n                                        position: absolute; height: 65px; width: 87px; background-size: 200px;\n                                        background-position: 19px;\"></div>\n                                    <a href=\"http://apiary.io/\">Apiary</a>\n                                </li>\n                                <li>\n                                    <!-- <img src=\"https://exist-db.org/exist/apps/eXide/resources/images/logo.png\" style=\"width: 120px; left: -10px; top: 15px;\"> -->\n                                    <a href=\"http://exist-db.org\">ExistDB</a>\n                                </li>\n                                <li>\n                                    <img src=\"https://jscalc.io/img/icons/jscalc_full_bleed_24.svg\" style=\"width: 90px; left: 5px; top: -10px;\">\n                                    <a href=\"https://jscalc.io/\">JSCalc</a>\n                                </li>\n                                <li>\n                                    <!-- <img src=\"https://tworld-ai.com/imgs/web-app/rob_face.png\" style=\"width: 90px; left: 5px; top: -10px;\"> -->\n                                    <a href=\"http://tworld-ai.com/imgs/web-app/rob_face.png\">T-World</a>\n                                </li>\n                                <li>\n                                    <img src=\"https://www.gestixi.com/assets/img/icons/gestixi-64.png\" style=\"width: 90px; left: 5px; top: 20px;\">\n                                    <a href=\"https://www.gestixi.com/\">GestiXi</a>\n                                </li>\n                                <li>\n                                    <div class=\"text-logo\">Clicpilot</div>\n                                    <a href=\"http://www.clicpilot.com/\">clicpilot</a>\n                                </li>\n                                <li>\n                                    <div class=\"text-logo\" style=\"font-size:22px;text-shadow:none;margin-top:13px\">Code-Fight.Club</div>\n                                    <a href=\"http://code-fight.club\">Code-Fight.Club</a>\n                                </li>\n                                \n                                <li>\n                                    <a href=\"https://cloud.formcycle.de/formcycle/fd2/\">Formcycle</a>\n                                </li>\n                                <li>\n                                    <a href=\"http://www.wavemaker.com/\">WaveMaker</a>\n                                </li>\n                                <li>\n                                    <a href=\"http://www.playmycode.com/\">Play My Code</a>\n                                </li>\n                                <li>\n                                    <a href=\"http://ext.radiantcms.org/extensions/264-ace\">Radiant CMS</a>\n                                </li>\n                                <li>\n                                    <a href=\"http://developercompanion.com/\">Developer Companion</a>\n                                </li>\n                                <li>\n                                    <a href=\"http://www.akshell.com/\">Akshell</a>\n                                </li>\n                                \n                                <li>\n                                    <div class=\"text-logo\">Semantic Ui</div>\n                                    <a href=\"http://semantic-ui.com/\">Semantic Ui</a>\n                                </li>\n                                <li>\n                                    <div class=\"text-logo\">tmpltr</div>\n                                    <a href=\"http://rocktronica.github.com/tmpltr/\">tmpltr</a>\n                                </li>\n                                <li>\n                                    <div class=\"text-logo\">Git-Edit</div>\n                                    <a href=\"https://github.com/krispo/git-edit\">Git-Edit</a>\n                                </li>\n                                <li>\n                                    <a href=\"http://dev.cmsmadesimple.org/projects/aceeditor\">CMS Made Simple</a>\n                                </li>\n                                <li>\n                                    <a href=\"http://tryjasmine.com/\">Try Jasmine</a>\n                                </li>\n                                <li>\n                                    <a href=\"http://codebender.cc/\">Codebender</a>\n                                </li>\n                                <li>\n                                    <a href=\"http://beautifytools.com/\">BeautifyTools</a>\n                                </li>\n                                <li id=\"add_your_site\">\n                                    <p>+</p>\n                                    <a href=\"mailto:ace@c9.io?subject=Put%20me%20on%20the%20Ace%20site!&body=Please include a link to a logo hosted on your site!\">Your Site Here</a>\n                                </li>\n                            </ul>\n                        </div>\n                        <div class=\"tab-pane fade\" id=\"support\">\n                            <h1>Support and User Resources</h1>\n                            <p>Aside from our GitHub page, here's a list of places you can find help for Ace:</p>\n                            <ul class=\"content-list\">\n                                <li><a href=\"http://groups.google.com/group/ace-discuss\">Ace Google Group</a></li>\n                                <li><a href=\"http://groups.google.com/group/ace-internals\">Ace Core Google Group</a></li>\n                                <li><a href=\"irc://irc.freenode.net/%23ace\">irc.freenode.net #ace</a></li>\n                            </ul>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <script src=\"https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js\"></script>\n        <script src=\"https://netdna.bootstrapcdn.com/twitter-bootstrap/2.2.2/js/bootstrap.min.js\"></script>\n        <script src=\"./doc/template/resources/javascripts/bbq.js\"></script>\n        <script src=\"./api/resources/javascripts/ux.js\"></script>\n        <script src=\"./doc/site/js/main.js\"></script>\n        <script defer src=\"./api/resources/javascripts/clicker.js\"></script>\n        <script defer src=\"./doc/site/js/ga.js\"></script>\n    </body>\n</html>\n"
  },
  {
    "path": "kitchen-sink.html",
    "content": "<!DOCTYPE html>\n\n<html lang=\"en\">\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n    <title>Ace Kitchen Sink</title>\n    <meta name=\"author\" content=\"Fabian Jakobs\">\n    <!--\n    Ace\n      version %version%\n      commit  %commit%\n    -->\n\n    <link rel=\"stylesheet\" href=\"demo/kitchen-sink/styles.css\" type=\"text/css\" media=\"screen\" charset=\"utf-8\">\n    <!--PACKAGE\n    <script async=\"true\" src=\"https://use.edgefonts.net/source-code-pro.js\"></script>\n    PACKAGE-->\n\n    <link href=\"./doc/site/images/favicon.ico\" rel=\"icon\" type=\"image/x-icon\">\n</head>\n<body>\n<div id=\"optionsPanel\" style=\"position:absolute;height:100%;width:260px\">\n  <a href=\"https://c9.io\" title=\"Cloud9 IDE | Your code anywhere, anytime\">\n    <img id=\"c9-logo\" src=\"demo/kitchen-sink/logo.png\" style=\"width: 172px;margin: -9px 30px -12px 51px;\">\n  </a>\n  <div style=\"position: absolute; overflow: hidden; top:100px; bottom:0\">\n  <div style=\"width: 120%; height:100%; overflow-y: scroll\">\n\n  <table id=\"controls\">\n    <tr>\n      <td>\n        <label for=\"doc\">Document</label>\n      </td><td>\n        <select id=\"doc\" size=\"1\">\n        </select>\n      </td>\n    </tr>\n    <tr>\n      <td >\n        <label for=\"mode\">Mode</label>\n      </td><td>\n        <select id=\"mode\" size=\"1\">\n        </select>\n      </td>\n    </tr>\n    <tr>\n      <td>\n        <label for=\"split\">Split</label>\n      </td><td>\n        <select id=\"split\" size=\"1\">\n          <option value=\"none\">None</option>\n          <option value=\"below\">Below</option>\n          <option value=\"beside\">Beside</option>\n        </select>\n      </td>\n    </tr>\n    <tr>\n      <td >\n        <label for=\"theme\">Theme</label>\n      </td><td>\n        <select id=\"theme\" size=\"1\">\n          \n        </select>\n      </td>\n    </tr>\n    <tr>\n      <td>\n        <label for=\"fontsize\">Font Size</label>\n      </td><td>\n        <select id=\"fontsize\" size=\"1\">\n          <option value=\"10px\">10px</option>\n          <option value=\"11px\">11px</option>\n          <option value=\"12px\" selected=\"selected\">12px</option>\n          <option value=\"13px\">13px</option>\n          <option value=\"14px\">14px</option>\n          <option value=\"16px\">16px</option>\n          <option value=\"18px\">18px</option>\n          <option value=\"20px\">20px</option>\n          <option value=\"24px\">24px</option>\n        </select>\n      </td>\n    </tr>\n    <tr>\n      <td>\n        <label for=\"folding\">Code Folding</label>\n      </td><td>\n        <select id=\"folding\" size=\"1\">\n          <option value=\"manual\">manual</option>\n          <option value=\"markbegin\" selected=\"selected\">mark begin</option>\n          <option value=\"markbeginend\">mark begin and end</option>\n        </select>\n      </td>\n    </tr>\n    <tr>\n      <td >\n        <label for=\"keybinding\">Key Binding</label>\n      </td><td>\n        <select id=\"keybinding\" size=\"1\">\n          <option value=\"ace\">Ace</option>\n          <option value=\"vim\">Vim</option>\n          <option value=\"emacs\">Emacs</option>\n          <option value=\"custom\">Custom</option>\n        </select>\n      </td>\n    </tr>\n    <tr>\n      <td >\n        <label for=\"soft_wrap\">Soft Wrap</label>\n      </td><td>\n        <select id=\"soft_wrap\" size=\"1\">\n          <option value=\"off\">Off</option>\n          <option value=\"40\">40 Chars</option>\n          <option value=\"80\">80 Chars</option>\n          <option value=\"free\">Free</option>\n        </select>\n      </td>\n    </tr>\n\n    <tr><td colspan=\"2\">\n    <table id=\"more-controls\">\n    <tr>\n      <td>\n        <label for=\"select_style\">Full Line Selection</label>\n      </td><td>\n        <input type=\"checkbox\" name=\"select_style\" id=\"select_style\" checked>\n      </td>\n    </tr>\n    <tr>\n      <td>\n        <label for=\"highlight_active\">Highlight Active Line</label>\n      </td><td>\n        <input type=\"checkbox\" name=\"highlight_active\" id=\"highlight_active\" checked>\n      </td>\n    </tr>\n    <tr>\n      <td >\n        <label for=\"show_hidden\">Show Invisibles</label>\n      </td><td>\n        <input type=\"checkbox\" name=\"show_hidden\" id=\"show_hidden\" checked>\n      </td>\n    </tr>\n    <tr>\n      <td >\n        <label for=\"display_indent_guides\">Show Indent Guides</label>\n      </td><td>\n        <input type=\"checkbox\" name=\"display_indent_guides\" id=\"display_indent_guides\" checked>\n      </td>\n    </tr>\n    <tr>\n      <td >\n        <label for=\"show_hscroll\">Persistent HScroll</label>\n      </td><td>\n        <input type=\"checkbox\" name=\"show_hscroll\" id=\"show_hscroll\">\n\t\t<label for=\"show_hscroll\">VScroll</label>\n        <input type=\"checkbox\" name=\"show_vscroll\" id=\"show_vscroll\">\n      </td>\n    </tr>\n    <tr>\n      <td >\n        <label for=\"animate_scroll\">Animate scrolling</label>\n      </td><td>\n        <input type=\"checkbox\" name=\"animate_scroll\" id=\"animate_scroll\">\n      </td>\n    </tr>\n    <tr>\n      <td >\n        <label for=\"show_gutter\">Show Gutter</label>\n      </td><td>\n        <input type=\"checkbox\" id=\"show_gutter\" checked>\n      </td>\n    </tr>\n    <tr>\n      <td >\n        <label for=\"show_print_margin\">Show Print Margin</label>\n      </td><td>\n        <input type=\"checkbox\" id=\"show_print_margin\" checked>\n      </td>\n    </tr>\n    <tr>\n      <td >\n        <label for=\"soft_tab\">Use Soft Tab</label>\n      </td><td>\n        <input type=\"checkbox\" id=\"soft_tab\" checked>\n      </td>\n    </tr>\n    <tr>\n      <td >\n        <label for=\"navigate_within_soft_tab\">Navigate within soft tabs</label>\n      </td><td>\n        <input type=\"checkbox\" id=\"navigate_within_soft_tab\">\n      </td>\n    </tr>\n    <tr>\n      <td >\n        <label for=\"highlight_selected_word\">Highlight selected word</label>\n      </td>\n      <td>\n        <input type=\"checkbox\" id=\"highlight_selected_word\" checked>\n      </td>\n    </tr>\n    <tr>\n      <td >\n        <label for=\"enable_behaviours\">Enable Behaviours</label>\n      </td>\n      <td>\n        <input type=\"checkbox\" id=\"enable_behaviours\">\n      </td>\n    </tr>\n    <tr>\n      <td >\n        <label for=\"fade_fold_widgets\">Fade Fold Widgets</label>\n      </td>\n      <td>\n        <input type=\"checkbox\" id=\"fade_fold_widgets\">\n      </td>\n    </tr>\n    <tr>\n      <td >\n        <label for=\"elastic_tabstops\">Enable Elastic Tabstops</label>\n      </td>\n      <td>\n        <input type=\"checkbox\" id=\"elastic_tabstops\">\n      </td>\n    </tr>\n    <tr>\n      <td >\n        <label for=\"isearch\">Incremental Search</label>\n      </td>\n      <td>\n        <input type=\"checkbox\" id=\"isearch\">\n      </td>\n    </tr>\n    <tr>\n      <td >\n        <label for=\"highlight_token\">Show token info</label>\n      </td>\n      <td>\n        <input type=\"checkbox\" id=\"highlight_token\">\n      </td>\n    </tr>\n    <tr>\n      <td >\n        <label for=\"read_only\">Read-only</label>\n      </td>\n      <td>\n        <input type=\"checkbox\" id=\"read_only\">\n      </td>\n    </tr>\n    <tr>\n      <td >\n        <label for=\"scrollPastEnd\">Scroll Past End</label>\n      </td>\n      <td>\n        <input type=\"checkbox\" id=\"scrollPastEnd\" checked>\n      </td>\n    </tr>\n    <tr>\n      <td colspan=\"2\">\n        <input type=\"button\" value=\"Edit Snippets\" onclick=\"env.editSnippets()\">\n      </td>\n    </tr>\n    <tr>\n      <td colspan=\"2\">\n        <input type=\"button\" value=\"Add Textarea\" onclick=\"this.parentNode.replaceChild(\n          document.createElement('textarea'), this\n        )\">\n      </td>\n    </tr>\n  </table>\n  </td></tr>\n  </table>\n  \n  <a href=\"https://ace.c9.io\">\n    <img id=\"ace-logo\" src=\"doc/site/images/ace-logo.png\" style=\"width: 134px;margin: 46px 0px 4px 66px;\">\n  </a>\n<!--DEVEL-->\n  <div style=\"text-align: left; padding: 0.5em 1em;\">\n    <a style=\"color: whitesmoke;\" target=\"_test\"  rel=\"noreferer\" href=\"./lib/ace/test/tests.html\">tests</a>\n  </div>\n  <div style=\"text-align: left; padding: 0.5em 1em;\">\n    <a style=\"color: whitesmoke;\" target=\"_test\"  rel=\"noreferer\" href=\"./tool/mode_creator.html\">Mode Creator</a>\n  </div>\n<!--DEVEL-->\n  </div>\n  </div>\n</div>\n  <div id=\"editor-container\"></div>\n\n<!--DEVEL-->\n  <script type=\"text/javascript\">\n      var require = {\n          baseUrl: window.location.protocol + \"//\" + window.location.host + window.location.pathname.split(\"/\").slice(0, -1).join(\"/\"),\n          paths: {\n              ace: \"lib/ace\"\n          },\n          waitSeconds: 30\n      };\n  </script>\n  <script src=\"demo/kitchen-sink/require.js\" data-main=\"demo/kitchen-sink/demo\" type=\"text/javascript\"></script>\n\n<!--DEVEL-->\n\n<!--PACKAGE\n  <script src=\"src/ace.js\" data-ace-base=\"src\" type=\"text/javascript\" charset=\"utf-8\"></script>\n  <script src=\"src/keybinding-vim.js\"></script>\n  <script src=\"src/keybinding-emacs.js\"></script>\n  <script src=\"demo/kitchen-sink/demo.js\"></script>\n  <script type=\"text/javascript\" charset=\"utf-8\">\n    require(\"kitchen-sink/demo\");\n  </script>\n    PACKAGE-->\n\n</body>\n</html>\n"
  },
  {
    "path": "lib/ace/ace.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/**\n * The main class required to set up an Ace instance in the browser.\n *\n * @class Ace\n **/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nrequire(\"./lib/fixoldbrowsers\");\n\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\n\nvar Editor = require(\"./editor\").Editor;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar UndoManager = require(\"./undomanager\").UndoManager;\nvar Renderer = require(\"./virtual_renderer\").VirtualRenderer;\n\n// The following require()s are for inclusion in the built ace file\nrequire(\"./worker/worker_client\");\nrequire(\"./keyboard/hash_handler\");\nrequire(\"./placeholder\");\nrequire(\"./multi_select\");\nrequire(\"./mode/folding/fold_mode\");\nrequire(\"./theme/textmate\");\nrequire(\"./ext/error_marker\");\n\nexports.config = require(\"./config\");\n\n/**\n * Provides access to require in packed noconflict mode\n * @param {String} moduleName\n * @returns {Object}\n **/\nexports.require = require;\n\nif (typeof define === \"function\")\n    exports.define = define;\n\n/**\n * Embeds the Ace editor into the DOM, at the element provided by `el`.\n * @param {String | DOMElement} el Either the id of an element, or the element itself\n *\n **/\nexports.edit = function(el) {\n    if (typeof el == \"string\") {\n        var _id = el;\n        el = document.getElementById(_id);\n        if (!el)\n            throw new Error(\"ace.edit can't find div #\" + _id);\n    }\n\n    if (el && el.env && el.env.editor instanceof Editor)\n        return el.env.editor;\n\n    var value = \"\";\n    if (el && /input|textarea/i.test(el.tagName)) {\n        var oldNode = el;\n        value = oldNode.value;\n        el = dom.createElement(\"pre\");\n        oldNode.parentNode.replaceChild(el, oldNode);\n    } else if (el) {\n        value = dom.getInnerText(el);\n        el.innerHTML = \"\";\n    }\n\n    var doc = exports.createEditSession(value);\n\n    var editor = new Editor(new Renderer(el));\n    editor.setSession(doc);\n\n    var env = {\n        document: doc,\n        editor: editor,\n        onResize: editor.resize.bind(editor, null)\n    };\n    if (oldNode) env.textarea = oldNode;\n    event.addListener(window, \"resize\", env.onResize);\n    editor.on(\"destroy\", function() {\n        event.removeListener(window, \"resize\", env.onResize);\n        env.editor.container.env = null; // prevent memory leak on old ie\n    });\n    editor.container.env = editor.env = env;\n    return editor;\n};\n\n/**\n * Creates a new [[EditSession]], and returns the associated [[Document]].\n * @param {Document | String} text {:textParam}\n * @param {TextMode} mode {:modeParam}\n * \n **/\nexports.createEditSession = function(text, mode) {\n    var doc = new EditSession(text, mode);\n    doc.setUndoManager(new UndoManager());\n    return doc;\n};\nexports.EditSession = EditSession;\nexports.UndoManager = UndoManager;\nexports.version = \"1.2.9\";\n});\n"
  },
  {
    "path": "lib/ace/anchor.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\n/**\n *\n * Defines a floating pointer in the document. Whenever text is inserted or deleted before the cursor, the position of the anchor is updated.\n *\n * @class Anchor\n **/\n\n/**\n * Creates a new `Anchor` and associates it with a document.\n *\n * @param {Document} doc The document to associate with the anchor\n * @param {Number} row The starting row position\n * @param {Number} column The starting column position\n *\n * @constructor\n **/\n\nvar Anchor = exports.Anchor = function(doc, row, column) {\n    this.$onChange = this.onChange.bind(this);\n    this.attach(doc);\n    \n    if (typeof column == \"undefined\")\n        this.setPosition(row.row, row.column);\n    else\n        this.setPosition(row, column);\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n\n    /**\n     * Returns an object identifying the `row` and `column` position of the current anchor.\n     * @returns {Object}\n     **/\n    this.getPosition = function() {\n        return this.$clipPositionToDocument(this.row, this.column);\n    };\n\n    /**\n     *\n     * Returns the current document.\n     * @returns {Document}\n     **/\n    this.getDocument = function() {\n        return this.document;\n    };\n\n    /**\n     * experimental: allows anchor to stick to the next on the left\n     */\n    this.$insertRight = false;\n    /**\n     * Fires whenever the anchor position changes.\n     *\n     * Both of these objects have a `row` and `column` property corresponding to the position.\n     *\n     * Events that can trigger this function include [[Anchor.setPosition `setPosition()`]].\n     *\n     * @event change\n     * @param {Object} e  An object containing information about the anchor position. It has two properties:\n     *  - `old`: An object describing the old Anchor position\n     *  - `value`: An object describing the new Anchor position\n     *\n     **/\n    this.onChange = function(delta) {\n        if (delta.start.row == delta.end.row && delta.start.row != this.row)\n            return;\n\n        if (delta.start.row > this.row)\n            return;\n            \n        var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight);\n        this.setPosition(point.row, point.column, true);\n    };\n    \n    function $pointsInOrder(point1, point2, equalPointsInOrder) {\n        var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n        return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n    }\n            \n    function $getTransformedPoint(delta, point, moveIfEqual) {\n        // Get delta info.\n        var deltaIsInsert = delta.action == \"insert\";\n        var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row    - delta.start.row);\n        var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n        var deltaStart = delta.start;\n        var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n        \n        // DELTA AFTER POINT: No change needed.\n        if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n            return {\n                row: point.row,\n                column: point.column\n            };\n        }\n        \n        // DELTA BEFORE POINT: Move point by delta shift.\n        if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n            return {\n                row: point.row + deltaRowShift,\n                column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n            };\n        }\n        \n        // DELTA ENVELOPS POINT (delete only): Move point to delta start.\n        // TODO warn if delta.action != \"remove\" ?\n        \n        return {\n            row: deltaStart.row,\n            column: deltaStart.column\n        };\n    }\n\n    /**\n     * Sets the anchor position to the specified row and column. If `noClip` is `true`, the position is not clipped.\n     * @param {Number} row The row index to move the anchor to\n     * @param {Number} column The column index to move the anchor to\n     * @param {Boolean} noClip Identifies if you want the position to be clipped\n     *\n     **/\n    this.setPosition = function(row, column, noClip) {\n        var pos;\n        if (noClip) {\n            pos = {\n                row: row,\n                column: column\n            };\n        } else {\n            pos = this.$clipPositionToDocument(row, column);\n        }\n\n        if (this.row == pos.row && this.column == pos.column)\n            return;\n\n        var old = {\n            row: this.row,\n            column: this.column\n        };\n\n        this.row = pos.row;\n        this.column = pos.column;\n        this._signal(\"change\", {\n            old: old,\n            value: pos\n        });\n    };\n\n    /**\n     * When called, the `\"change\"` event listener is removed.\n     *\n     **/\n    this.detach = function() {\n        this.document.removeEventListener(\"change\", this.$onChange);\n    };\n    this.attach = function(doc) {\n        this.document = doc || this.document;\n        this.document.on(\"change\", this.$onChange);\n    };\n\n    /**\n     * Clips the anchor position to the specified row and column.\n     * @param {Number} row The row index to clip the anchor to\n     * @param {Number} column The column index to clip the anchor to\n     *\n     **/\n    this.$clipPositionToDocument = function(row, column) {\n        var pos = {};\n\n        if (row >= this.document.getLength()) {\n            pos.row = Math.max(0, this.document.getLength() - 1);\n            pos.column = this.document.getLine(pos.row).length;\n        }\n        else if (row < 0) {\n            pos.row = 0;\n            pos.column = 0;\n        }\n        else {\n            pos.row = row;\n            pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n        }\n\n        if (column < 0)\n            pos.column = 0;\n\n        return pos;\n    };\n\n}).call(Anchor.prototype);\n\n});\n"
  },
  {
    "path": "lib/ace/anchor_test.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\nif (typeof process !== \"undefined\") {\n    require(\"amd-loader\");\n}\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar Document = require(\"./document\").Document;\nvar Anchor = require(\"./anchor\").Anchor;\nvar Range = require(\"./range\").Range;\nvar assert = require(\"./test/assertions\");\n\nmodule.exports = {\n\n    \"test create anchor\" : function() {\n        var doc = new Document(\"juhu\");\n        var anchor = new Anchor(doc, 0, 0);\n        \n        assert.position(anchor.getPosition(), 0, 0);\n        assert.equal(anchor.getDocument(), doc);\n    },\n    \n    \"test insert text in same row before cursor should move anchor column\": function() {\n        var doc = new Document(\"juhu\\nkinners\");\n        var anchor = new Anchor(doc, 1, 4);\n        \n        doc.insert({row: 1, column: 1}, \"123\");\n        assert.position(anchor.getPosition(), 1, 7);\n    },\n\n    \"test insert text at anchor should not move anchor when insertRight is true\": function() {\n        var doc = new Document(\"juhu\\nkinners\");\n        var anchor = new Anchor(doc, 1, 4);\n        anchor.$insertRight = true;\n        \n        doc.insert({row: 1, column: 4}, \"123\");\n        assert.position(anchor.getPosition(), 1, 4);\n    },    \n    \n    \"test insert lines before cursor should move anchor row\": function() {\n        var doc = new Document(\"juhu\\nkinners\");\n        var anchor = new Anchor(doc, 1, 4);\n        \n        doc.insertFullLines(1, [\"123\", \"456\"]);\n        assert.position(anchor.getPosition(), 3, 4);    \n    },\n\n    \"test insert lines at anchor position should move anchor down\": function() {\n        var doc = new Document(\"juhu\\nkinners\");\n        var anchor = new Anchor(doc, 1, 0);\n        \n        doc.insertLines(1, [\"line\"]);\n        assert.position(anchor.getPosition(), 2, 0);\n    },\n    \n    \"test insert lines at anchor position should not move anchor down when insertRight is true and column is 0\": function() {\n        var doc = new Document(\"juhu\\nkinners\");\n        var anchor = new Anchor(doc, 1, 0);\n        anchor.$insertRight = true;\n        \n        doc.insertLines(1, [\"line\"]);\n        assert.position(anchor.getPosition(), 1, 0);\n    }, \n\n    \"test insert lines at anchor row should move anchor down when column > 0\": function() {\n        var doc = new Document(\"juhu\\nkinners\");\n        var anchor = new Anchor(doc, 1, 2);\n        anchor.$insertRight = true;\n        \n        doc.insertLines(1, [\"line\"]);\n        assert.position(anchor.getPosition(), 2, 2);            \n    },\n    \n    \"test insert new line before cursor should move anchor column\": function() {\n        var doc = new Document(\"juhu\\nkinners\");\n        var anchor = new Anchor(doc, 1, 4);\n        \n        doc.insertMergedLines({row: 0, column: 0}, ['', '']);\n        assert.position(anchor.getPosition(), 2, 4);    \n    },\n    \n    \"test insert new line in anchor line before anchor should move anchor column and row\": function() {\n        var doc = new Document(\"juhu\\nkinners\");\n        var anchor = new Anchor(doc, 1, 4);\n        \n        doc.insertMergedLines({row: 1, column: 2}, ['', '']);\n        assert.position(anchor.getPosition(), 2, 2);\n    },\n    \n    \"test delete text in anchor line before anchor should move anchor column\": function() {\n        var doc = new Document(\"juhu\\nkinners\");\n        var anchor = new Anchor(doc, 1, 4);\n        \n        doc.remove(new Range(1, 1, 1, 3));\n        assert.position(anchor.getPosition(), 1, 2);\n    },\n    \n    \"test remove range which contains the anchor should move the anchor to the start of the range\": function() {\n        var doc = new Document(\"juhu\\nkinners\");\n        var anchor = new Anchor(doc, 0, 3);\n        \n        doc.remove(new Range(0, 1, 1, 3));\n        assert.position(anchor.getPosition(), 0, 1);\n    },\n    \n    \"test delete character before the anchor should have no effect\": function() {\n        var doc = new Document(\"juhu\\nkinners\");\n        var anchor = new Anchor(doc, 1, 4);\n        \n        doc.remove(new Range(1, 4, 1, 5));\n        assert.position(anchor.getPosition(), 1, 4);\n    },\n    \n    \"test delete lines in anchor line before anchor should move anchor row\": function() {\n        var doc = new Document(\"juhu\\n1\\n2\\nkinners\");\n        var anchor = new Anchor(doc, 3, 4);\n        \n        doc.removeFullLines(1, 2);\n        assert.position(anchor.getPosition(), 1, 4);\n    },\n    \n    \"test remove new line before the cursor\": function() {\n        var doc = new Document(\"juhu\\nkinners\");\n        var anchor = new Anchor(doc, 1, 4);\n        \n        doc.removeNewLine(0);\n        assert.position(anchor.getPosition(), 0, 8);\n    },\n    \n    \"test delete range which contains the anchor should move anchor to the end of the range\": function() {\n        var doc = new Document(\"juhu\\nkinners\");\n        var anchor = new Anchor(doc, 1, 4);\n        \n        doc.remove(new Range(0, 2, 1, 2));\n        assert.position(anchor.getPosition(), 0, 4);\n    },\n    \n    \"test delete line which contains the anchor should move anchor to the end of the range\": function() {\n        var doc = new Document(\"juhu\\nkinners\\n123\");\n        var anchor = new Anchor(doc, 1, 5);\n        \n        doc.removeFullLines(1, 1);\n        assert.position(anchor.getPosition(), 1, 0);\n    },\n    \n    \"test remove after the anchor should have no effect\": function() {\n        var doc = new Document(\"juhu\\nkinners\\n123\");\n        var anchor = new Anchor(doc, 1, 2);\n        \n        doc.remove(new Range(1, 4, 2, 2));\n        assert.position(anchor.getPosition(), 1, 2);\n    },\n    \n    \"test anchor changes triggered by document changes should emit change event\": function(next) {\n        var doc = new Document(\"juhu\\nkinners\\n123\");\n        var anchor = new Anchor(doc, 1, 5);\n        \n        anchor.on(\"change\", function(e) {\n            assert.position(anchor.getPosition(), 0, 0);\n            next();\n        });\n        \n        doc.remove(new Range(0, 0, 2, 1));\n    },\n    \n    \"test only fire change event if position changes\": function() {\n        var doc = new Document(\"juhu\\nkinners\\n123\");\n        var anchor = new Anchor(doc, 1, 5);\n        \n        anchor.on(\"change\", function(e) {\n            assert.fail();\n        });\n        \n        doc.remove(new Range(2, 0, 2, 1));\n    },\n    \n    \"test insert/remove lines at the end of the document\": function() {\n        var doc = new Document(\"juhu\\nkinners\\n123\");\n        var anchor = new Anchor(doc, 2, 4);\n        \n        doc.removeFullLines(0, 3);\n        assert.position(anchor.getPosition(), 0, 0);\n        doc.insertFullLines(0, [\"a\", \"b\", \"c\"]);        \n        assert.position(anchor.getPosition(), 3, 0);\n        assert.equal(doc.getValue(), \"a\\nb\\nc\\n\");\n    }\n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main) {\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n}\n"
  },
  {
    "path": "lib/ace/apply_delta.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nfunction throwDeltaError(delta, errorText){\n    console.log(\"Invalid Delta:\", delta);\n    throw \"Invalid Delta: \" + errorText;\n}\n\nfunction positionInDocument(docLines, position) {\n    return position.row    >= 0 && position.row    <  docLines.length &&\n           position.column >= 0 && position.column <= docLines[position.row].length;\n}\n\nfunction validateDelta(docLines, delta) {\n    // Validate action string.\n    if (delta.action != \"insert\" && delta.action != \"remove\")\n        throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n    \n    // Validate lines type.\n    if (!(delta.lines instanceof Array))\n        throwDeltaError(delta, \"delta.lines must be an Array\");\n\n    // Validate range type.\n    if (!delta.start || !delta.end)\n       throwDeltaError(delta, \"delta.start/end must be an present\");\n\n    // Validate that the start point is contained in the document.\n    var start = delta.start;\n    if (!positionInDocument(docLines, delta.start))\n        throwDeltaError(delta, \"delta.start must be contained in document\");\n    \n    // Validate that the end point is contained in the document (remove deltas only).\n    var end = delta.end;\n    if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n        throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n    \n    // Validate that the .range size matches the .lines size.\n    var numRangeRows = end.row - start.row;\n    var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n    if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n        throwDeltaError(delta, \"delta.range must match delta lines\");\n}\n\nexports.applyDelta = function(docLines, delta, doNotValidate) {\n    // disabled validation since it breaks autocompletion popup\n    // if (!doNotValidate)\n    //    validateDelta(docLines, delta);\n    \n    var row = delta.start.row;\n    var startColumn = delta.start.column;\n    var line = docLines[row] || \"\";\n    switch (delta.action) {\n        case \"insert\":\n            var lines = delta.lines;\n            if (lines.length === 1) {\n                docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n            } else {\n                var args = [row, 1].concat(delta.lines);\n                docLines.splice.apply(docLines, args);\n                docLines[row] = line.substring(0, startColumn) + docLines[row];\n                docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n            }\n            break;\n        case \"remove\":\n            var endColumn = delta.end.column;\n            var endRow = delta.end.row;\n            if (row === endRow) {\n                docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n            } else {\n                docLines.splice(\n                    row, endRow - row + 1,\n                    line.substring(0, startColumn) + docLines[endRow].substring(endColumn)\n                );\n            }\n            break;\n    }\n};\n});\n"
  },
  {
    "path": "lib/ace/autocomplete/popup.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar Renderer = require(\"../virtual_renderer\").VirtualRenderer;\nvar Editor = require(\"../editor\").Editor;\nvar Range = require(\"../range\").Range;\nvar event = require(\"../lib/event\");\nvar lang = require(\"../lib/lang\");\nvar dom = require(\"../lib/dom\");\n\nvar $singleLineEditor = function(el) {\n    var renderer = new Renderer(el);\n\n    renderer.$maxLines = 4;\n\n    var editor = new Editor(renderer);\n\n    editor.setHighlightActiveLine(false);\n    editor.setShowPrintMargin(false);\n    editor.renderer.setShowGutter(false);\n    editor.renderer.setHighlightGutterLine(false);\n\n    editor.$mouseHandler.$focusWaitTimout = 0;\n    editor.$highlightTagPending = true;\n\n    return editor;\n};\n\nvar AcePopup = function(parentNode) {\n    var el = dom.createElement(\"div\");\n    var popup = new $singleLineEditor(el);\n\n    if (parentNode)\n        parentNode.appendChild(el);\n    el.style.display = \"none\";\n    popup.renderer.content.style.cursor = \"default\";\n    popup.renderer.setStyle(\"ace_autocomplete\");\n\n    popup.setOption(\"displayIndentGuides\", false);\n    popup.setOption(\"dragDelay\", 150);\n\n    var noop = function(){};\n\n    popup.focus = noop;\n    popup.$isFocused = true;\n\n    popup.renderer.$cursorLayer.restartTimer = noop;\n    popup.renderer.$cursorLayer.element.style.opacity = 0;\n\n    popup.renderer.$maxLines = 8;\n    popup.renderer.$keepTextAreaAtCursor = false;\n\n    popup.setHighlightActiveLine(false);\n    // set default highlight color\n    popup.session.highlight(\"\");\n    popup.session.$searchHighlight.clazz = \"ace_highlight-marker\";\n\n    popup.on(\"mousedown\", function(e) {\n        var pos = e.getDocumentPosition();\n        popup.selection.moveToPosition(pos);\n        selectionMarker.start.row = selectionMarker.end.row = pos.row;\n        e.stop();\n    });\n\n    var lastMouseEvent;\n    var hoverMarker = new Range(-1,0,-1,Infinity);\n    var selectionMarker = new Range(-1,0,-1,Infinity);\n    selectionMarker.id = popup.session.addMarker(selectionMarker, \"ace_active-line\", \"fullLine\");\n    popup.setSelectOnHover = function(val) {\n        if (!val) {\n            hoverMarker.id = popup.session.addMarker(hoverMarker, \"ace_line-hover\", \"fullLine\");\n        } else if (hoverMarker.id) {\n            popup.session.removeMarker(hoverMarker.id);\n            hoverMarker.id = null;\n        }\n    };\n    popup.setSelectOnHover(false);\n    popup.on(\"mousemove\", function(e) {\n        if (!lastMouseEvent) {\n            lastMouseEvent = e;\n            return;\n        }\n        if (lastMouseEvent.x == e.x && lastMouseEvent.y == e.y) {\n            return;\n        }\n        lastMouseEvent = e;\n        lastMouseEvent.scrollTop = popup.renderer.scrollTop;\n        var row = lastMouseEvent.getDocumentPosition().row;\n        if (hoverMarker.start.row != row) {\n            if (!hoverMarker.id)\n                popup.setRow(row);\n            setHoverMarker(row);\n        }\n    });\n    popup.renderer.on(\"beforeRender\", function() {\n        if (lastMouseEvent && hoverMarker.start.row != -1) {\n            lastMouseEvent.$pos = null;\n            var row = lastMouseEvent.getDocumentPosition().row;\n            if (!hoverMarker.id)\n                popup.setRow(row);\n            setHoverMarker(row, true);\n        }\n    });\n    popup.renderer.on(\"afterRender\", function() {\n        var row = popup.getRow();\n        var t = popup.renderer.$textLayer;\n        var selected = t.element.childNodes[row - t.config.firstRow];\n        if (selected == t.selectedNode)\n            return;\n        if (t.selectedNode)\n            dom.removeCssClass(t.selectedNode, \"ace_selected\");\n        t.selectedNode = selected;\n        if (selected)\n            dom.addCssClass(selected, \"ace_selected\");\n    });\n    var hideHoverMarker = function() { setHoverMarker(-1); };\n    var setHoverMarker = function(row, suppressRedraw) {\n        if (row !== hoverMarker.start.row) {\n            hoverMarker.start.row = hoverMarker.end.row = row;\n            if (!suppressRedraw)\n                popup.session._emit(\"changeBackMarker\");\n            popup._emit(\"changeHoverMarker\");\n        }\n    };\n    popup.getHoveredRow = function() {\n        return hoverMarker.start.row;\n    };\n\n    event.addListener(popup.container, \"mouseout\", hideHoverMarker);\n    popup.on(\"hide\", hideHoverMarker);\n    popup.on(\"changeSelection\", hideHoverMarker);\n\n    popup.session.doc.getLength = function() {\n        return popup.data.length;\n    };\n    popup.session.doc.getLine = function(i) {\n        var data = popup.data[i];\n        if (typeof data == \"string\")\n            return data;\n        return (data && data.value) || \"\";\n    };\n\n    var bgTokenizer = popup.session.bgTokenizer;\n    bgTokenizer.$tokenizeRow = function(row) {\n        var data = popup.data[row];\n        var tokens = [];\n        if (!data)\n            return tokens;\n        if (typeof data == \"string\")\n            data = {value: data};\n        if (!data.caption)\n            data.caption = data.value || data.name;\n\n        var last = -1;\n        var flag, c;\n        for (var i = 0; i < data.caption.length; i++) {\n            c = data.caption[i];\n            flag = data.matchMask & (1 << i) ? 1 : 0;\n            if (last !== flag) {\n                tokens.push({type: data.className || \"\" + ( flag ? \"completion-highlight\" : \"\"), value: c});\n                last = flag;\n            } else {\n                tokens[tokens.length - 1].value += c;\n            }\n        }\n\n        if (data.meta) {\n            var maxW = popup.renderer.$size.scrollerWidth / popup.renderer.layerConfig.characterWidth;\n            var metaData = data.meta;\n            if (metaData.length + data.caption.length > maxW - 2) {\n                // trim meta to fit this popup and add ellipsis\n                metaData = metaData.substr(0, maxW - data.caption.length - 3) + \"\\u2026\";\n            }\n            tokens.push({type: \"rightAlignedText\", value: metaData});\n        }\n        return tokens;\n    };\n    bgTokenizer.$updateOnChange = noop;\n    bgTokenizer.start = noop;\n\n    popup.session.$computeWidth = function() {\n        return this.screenWidth = 0;\n    };\n\n    // public\n    popup.isOpen = false;\n    popup.isTopdown = false;\n    popup.autoSelect = true;\n\n    popup.data = [];\n    popup.setData = function(list) {\n        popup.setValue(lang.stringRepeat(\"\\n\", list.length), -1);\n        popup.data = list || [];\n        popup.setRow(0);\n    };\n    popup.getData = function(row) {\n        return popup.data[row];\n    };\n\n    popup.getRow = function() {\n        return selectionMarker.start.row;\n    };\n    popup.setRow = function(line) {\n        line = Math.max(this.autoSelect ? 0 : -1, Math.min(this.data.length, line));\n        if (selectionMarker.start.row != line) {\n            popup.selection.clearSelection();\n            selectionMarker.start.row = selectionMarker.end.row = line || 0;\n            popup.session._emit(\"changeBackMarker\");\n            popup.moveCursorTo(line || 0, 0);\n            if (popup.isOpen)\n                popup._signal(\"select\");\n        }\n    };\n\n    popup.on(\"changeSelection\", function() {\n        if (popup.isOpen)\n            popup.setRow(popup.selection.lead.row);\n        popup.renderer.scrollCursorIntoView();\n    });\n\n    popup.hide = function() {\n        this.container.style.display = \"none\";\n        this._signal(\"hide\");\n        popup.isOpen = false;\n    };\n    popup.show = function(pos, lineHeight, topdownOnly) {\n        var el = this.container;\n        var screenHeight = window.innerHeight;\n        var screenWidth = window.innerWidth;\n        var renderer = this.renderer;\n        // var maxLines = Math.min(renderer.$maxLines, this.session.getLength());\n        var maxH = renderer.$maxLines * lineHeight * 1.4;\n        var top = pos.top + this.$borderSize;\n        var allowTopdown = top > screenHeight / 2 && !topdownOnly;\n        if (allowTopdown && top + lineHeight + maxH > screenHeight) {\n            renderer.$maxPixelHeight = top - 2 * this.$borderSize;\n            el.style.top = \"\";\n            el.style.bottom = screenHeight - top + \"px\";\n            popup.isTopdown = false;\n        } else {\n            top += lineHeight;\n            renderer.$maxPixelHeight = screenHeight - top - 0.2 * lineHeight;\n            el.style.top = top + \"px\";\n            el.style.bottom = \"\";\n            popup.isTopdown = true;\n        }\n\n        el.style.display = \"\";\n        this.renderer.$textLayer.checkForSizeChanges();\n\n        var left = pos.left;\n        if (left + el.offsetWidth > screenWidth)\n            left = screenWidth - el.offsetWidth;\n\n        el.style.left = left + \"px\";\n\n        this._signal(\"show\");\n        lastMouseEvent = null;\n        popup.isOpen = true;\n    };\n\n    popup.getTextLeftOffset = function() {\n        return this.$borderSize + this.renderer.$padding + this.$imageSize;\n    };\n\n    popup.$imageSize = 0;\n    popup.$borderSize = 1;\n\n    return popup;\n};\n\ndom.importCssString(\"\\\n.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\\\n    background-color: #CAD6FA;\\\n    z-index: 1;\\\n}\\\n.ace_editor.ace_autocomplete .ace_line-hover {\\\n    border: 1px solid #abbffe;\\\n    margin-top: -1px;\\\n    background: rgba(233,233,253,0.4);\\\n}\\\n.ace_editor.ace_autocomplete .ace_line-hover {\\\n    position: absolute;\\\n    z-index: 2;\\\n}\\\n.ace_editor.ace_autocomplete .ace_scroller {\\\n   background: none;\\\n   border: none;\\\n   box-shadow: none;\\\n}\\\n.ace_rightAlignedText {\\\n    color: gray;\\\n    display: inline-block;\\\n    position: absolute;\\\n    right: 4px;\\\n    text-align: right;\\\n    z-index: -1;\\\n}\\\n.ace_editor.ace_autocomplete .ace_completion-highlight{\\\n    color: #000;\\\n    text-shadow: 0 0 0.01em;\\\n}\\\n.ace_editor.ace_autocomplete {\\\n    width: 280px;\\\n    z-index: 200000;\\\n    background: #fbfbfb;\\\n    color: #444;\\\n    border: 1px lightgray solid;\\\n    position: fixed;\\\n    box-shadow: 2px 3px 5px rgba(0,0,0,.2);\\\n    line-height: 1.4;\\\n}\");\n\nexports.AcePopup = AcePopup;\n\n});\n"
  },
  {
    "path": "lib/ace/autocomplete/text_completer.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n    var Range = require(\"../range\").Range;\n    \n    var splitRegex = /[^a-zA-Z_0-9\\$\\-\\u00C0-\\u1FFF\\u2C00-\\uD7FF\\w]+/;\n\n    function getWordIndex(doc, pos) {\n        var textBefore = doc.getTextRange(Range.fromPoints({row: 0, column:0}, pos));\n        return textBefore.split(splitRegex).length - 1;\n    }\n\n    /**\n     * Does a distance analysis of the word `prefix` at position `pos` in `doc`.\n     * @return Map\n     */\n    function wordDistance(doc, pos) {\n        var prefixPos = getWordIndex(doc, pos);\n        var words = doc.getValue().split(splitRegex);\n        var wordScores = Object.create(null);\n        \n        var currentWord = words[prefixPos];\n\n        words.forEach(function(word, idx) {\n            if (!word || word === currentWord) return;\n\n            var distance = Math.abs(prefixPos - idx);\n            var score = words.length - distance;\n            if (wordScores[word]) {\n                wordScores[word] = Math.max(score, wordScores[word]);\n            } else {\n                wordScores[word] = score;\n            }\n        });\n        return wordScores;\n    }\n\n    exports.getCompletions = function(editor, session, pos, prefix, callback) {\n        var wordScore = wordDistance(session, pos);\n        var wordList = Object.keys(wordScore);\n        callback(null, wordList.map(function(word) {\n            return {\n                caption: word,\n                value: word,\n                score: wordScore[word],\n                meta: \"local\"\n            };\n        }));\n    };\n});\n"
  },
  {
    "path": "lib/ace/autocomplete/util.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nexports.parForEach = function(array, fn, callback) {\n    var completed = 0;\n    var arLength = array.length;\n    if (arLength === 0)\n        callback();\n    for (var i = 0; i < arLength; i++) {\n        fn(array[i], function(result, err) {\n            completed++;\n            if (completed === arLength)\n                callback(result, err);\n        });\n    }\n};\n\nvar ID_REGEX = /[a-zA-Z_0-9\\$\\-\\u00A2-\\uFFFF]/;\n\nexports.retrievePrecedingIdentifier = function(text, pos, regex) {\n    regex = regex || ID_REGEX;\n    var buf = [];\n    for (var i = pos-1; i >= 0; i--) {\n        if (regex.test(text[i]))\n            buf.push(text[i]);\n        else\n            break;\n    }\n    return buf.reverse().join(\"\");\n};\n\nexports.retrieveFollowingIdentifier = function(text, pos, regex) {\n    regex = regex || ID_REGEX;\n    var buf = [];\n    for (var i = pos; i < text.length; i++) {\n        if (regex.test(text[i]))\n            buf.push(text[i]);\n        else\n            break;\n    }\n    return buf;\n};\n\nexports.getCompletionPrefix = function (editor) {\n    var pos = editor.getCursorPosition();\n    var line = editor.session.getLine(pos.row);\n    var prefix;\n    editor.completers.forEach(function(completer) {\n        if (completer.identifierRegexps) {\n            completer.identifierRegexps.forEach(function(identifierRegex) {\n                if (!prefix && identifierRegex)\n                    prefix = this.retrievePrecedingIdentifier(line, pos.column, identifierRegex);\n            }.bind(this));\n        }\n    }.bind(this));\n    return prefix || this.retrievePrecedingIdentifier(line, pos.column);\n};\n\n});\n"
  },
  {
    "path": "lib/ace/autocomplete.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar HashHandler = require(\"./keyboard/hash_handler\").HashHandler;\nvar AcePopup = require(\"./autocomplete/popup\").AcePopup;\nvar util = require(\"./autocomplete/util\");\nvar event = require(\"./lib/event\");\nvar lang = require(\"./lib/lang\");\nvar dom = require(\"./lib/dom\");\nvar snippetManager = require(\"./snippets\").snippetManager;\n\nvar Autocomplete = function() {\n    this.autoInsert = false;\n    this.autoSelect = true;\n    this.exactMatch = false;\n    this.gatherCompletionsId = 0;\n    this.keyboardHandler = new HashHandler();\n    this.keyboardHandler.bindKeys(this.commands);\n\n    this.blurListener = this.blurListener.bind(this);\n    this.changeListener = this.changeListener.bind(this);\n    this.mousedownListener = this.mousedownListener.bind(this);\n    this.mousewheelListener = this.mousewheelListener.bind(this);\n\n    this.changeTimer = lang.delayedCall(function() {\n        this.updateCompletions(true);\n    }.bind(this));\n\n    this.tooltipTimer = lang.delayedCall(this.updateDocTooltip.bind(this), 50);\n};\n\n(function() {\n\n    this.$init = function() {\n        this.popup = new AcePopup(document.body || document.documentElement);\n        this.popup.on(\"click\", function(e) {\n            this.insertMatch();\n            e.stop();\n        }.bind(this));\n        this.popup.focus = this.editor.focus.bind(this.editor);\n        this.popup.on(\"show\", this.tooltipTimer.bind(null, null));\n        this.popup.on(\"select\", this.tooltipTimer.bind(null, null));\n        this.popup.on(\"changeHoverMarker\", this.tooltipTimer.bind(null, null));\n        return this.popup;\n    };\n\n    this.getPopup = function() {\n        return this.popup || this.$init();\n    };\n\n    this.openPopup = function(editor, prefix, keepPopupPosition) {\n        if (!this.popup)\n            this.$init();\n\n\tthis.popup.autoSelect = this.autoSelect;\n\n        this.popup.setData(this.completions.filtered);\n\n        editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n        \n        var renderer = editor.renderer;\n        this.popup.setRow(this.autoSelect ? 0 : -1);\n        if (!keepPopupPosition) {\n            this.popup.setTheme(editor.getTheme());\n            this.popup.setFontSize(editor.getFontSize());\n\n            var lineHeight = renderer.layerConfig.lineHeight;\n\n            var pos = renderer.$cursorLayer.getPixelPosition(this.base, true);\n            pos.left -= this.popup.getTextLeftOffset();\n\n            var rect = editor.container.getBoundingClientRect();\n            pos.top += rect.top - renderer.layerConfig.offset;\n            pos.left += rect.left - editor.renderer.scrollLeft;\n            pos.left += renderer.gutterWidth;\n\n            this.popup.show(pos, lineHeight);\n        } else if (keepPopupPosition && !prefix) {\n            this.detach();\n        }\n    };\n\n    this.detach = function() {\n        this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);\n        this.editor.off(\"changeSelection\", this.changeListener);\n        this.editor.off(\"blur\", this.blurListener);\n        this.editor.off(\"mousedown\", this.mousedownListener);\n        this.editor.off(\"mousewheel\", this.mousewheelListener);\n        this.changeTimer.cancel();\n        this.hideDocTooltip();\n\n        this.gatherCompletionsId += 1;\n        if (this.popup && this.popup.isOpen)\n            this.popup.hide();\n\n        if (this.base)\n            this.base.detach();\n        this.activated = false;\n        this.completions = this.base = null;\n    };\n\n    this.changeListener = function(e) {\n        var cursor = this.editor.selection.lead;\n        if (cursor.row != this.base.row || cursor.column < this.base.column) {\n            this.detach();\n        }\n        if (this.activated)\n            this.changeTimer.schedule();\n        else\n            this.detach();\n    };\n\n    this.blurListener = function(e) {\n        // we have to check if activeElement is a child of popup because\n        // on IE preventDefault doesn't stop scrollbar from being focussed\n        var el = document.activeElement;\n        var text = this.editor.textInput.getElement();\n        var fromTooltip = e.relatedTarget && this.tooltipNode && this.tooltipNode.contains(e.relatedTarget);\n        var container = this.popup && this.popup.container;\n        if (el != text && el.parentNode != container && !fromTooltip\n            && el != this.tooltipNode && e.relatedTarget != text\n        ) {\n            this.detach();\n        }\n    };\n\n    this.mousedownListener = function(e) {\n        this.detach();\n    };\n\n    this.mousewheelListener = function(e) {\n        this.detach();\n    };\n\n    this.goTo = function(where) {\n        var row = this.popup.getRow();\n        var max = this.popup.session.getLength() - 1;\n\n        switch(where) {\n            case \"up\": row = row <= 0 ? max : row - 1; break;\n            case \"down\": row = row >= max ? -1 : row + 1; break;\n            case \"start\": row = 0; break;\n            case \"end\": row = max; break;\n        }\n\n        this.popup.setRow(row);\n    };\n\n    this.insertMatch = function(data, options) {\n        if (!data)\n            data = this.popup.getData(this.popup.getRow());\n        if (!data)\n            return false;\n\n        if (data.completer && data.completer.insertMatch) {\n            data.completer.insertMatch(this.editor, data);\n        } else {\n            // TODO add support for options.deleteSuffix\n            if (this.completions.filterText) {\n                var ranges = this.editor.selection.getAllRanges();\n                for (var i = 0, range; range = ranges[i]; i++) {\n                    range.start.column -= this.completions.filterText.length;\n                    this.editor.session.remove(range);\n                }\n            }\n            if (data.snippet)\n                snippetManager.insertSnippet(this.editor, data.snippet);\n            else\n                this.editor.execCommand(\"insertstring\", data.value || data);\n        }\n        this.detach();\n    };\n\n\n    this.commands = {\n        \"Up\": function(editor) { editor.completer.goTo(\"up\"); },\n        \"Down\": function(editor) { editor.completer.goTo(\"down\"); },\n        \"Ctrl-Up|Ctrl-Home\": function(editor) { editor.completer.goTo(\"start\"); },\n        \"Ctrl-Down|Ctrl-End\": function(editor) { editor.completer.goTo(\"end\"); },\n\n        \"Esc\": function(editor) { editor.completer.detach(); },\n        \"Return\": function(editor) { return editor.completer.insertMatch(); },\n        \"Shift-Return\": function(editor) { editor.completer.insertMatch(null, {deleteSuffix: true}); },\n        \"Tab\": function(editor) {\n            var result = editor.completer.insertMatch();\n            if (!result && !editor.tabstopManager)\n                editor.completer.goTo(\"down\");\n            else\n                return result;\n        },\n\n        \"PageUp\": function(editor) { editor.completer.popup.gotoPageUp(); },\n        \"PageDown\": function(editor) { editor.completer.popup.gotoPageDown(); }\n    };\n\n    this.gatherCompletions = function(editor, callback) {\n        var session = editor.getSession();\n        var pos = editor.getCursorPosition();\n\n        var prefix = util.getCompletionPrefix(editor);\n\n        this.base = session.doc.createAnchor(pos.row, pos.column - prefix.length);\n        this.base.$insertRight = true;\n\n        var matches = [];\n        var total = editor.completers.length;\n        editor.completers.forEach(function(completer, i) {\n            completer.getCompletions(editor, session, pos, prefix, function(err, results) {\n                if (!err && results)\n                    matches = matches.concat(results);\n                // Fetch prefix again, because they may have changed by now\n                callback(null, {\n                    prefix: util.getCompletionPrefix(editor),\n                    matches: matches,\n                    finished: (--total === 0)\n                });\n            });\n        });\n        return true;\n    };\n\n    this.showPopup = function(editor) {\n        if (this.editor)\n            this.detach();\n\n        this.activated = true;\n\n        this.editor = editor;\n        if (editor.completer != this) {\n            if (editor.completer)\n                editor.completer.detach();\n            editor.completer = this;\n        }\n\n        editor.on(\"changeSelection\", this.changeListener);\n        editor.on(\"blur\", this.blurListener);\n        editor.on(\"mousedown\", this.mousedownListener);\n        editor.on(\"mousewheel\", this.mousewheelListener);\n\n        this.updateCompletions();\n    };\n\n    this.updateCompletions = function(keepPopupPosition) {\n        if (keepPopupPosition && this.base && this.completions) {\n            var pos = this.editor.getCursorPosition();\n            var prefix = this.editor.session.getTextRange({start: this.base, end: pos});\n            if (prefix == this.completions.filterText)\n                return;\n            this.completions.setFilter(prefix);\n            if (!this.completions.filtered.length)\n                return this.detach();\n            if (this.completions.filtered.length == 1\n            && this.completions.filtered[0].value == prefix\n            && !this.completions.filtered[0].snippet)\n                return this.detach();\n            this.openPopup(this.editor, prefix, keepPopupPosition);\n            return;\n        }\n\n        // Save current gatherCompletions session, session is close when a match is insert\n        var _id = this.gatherCompletionsId;\n        this.gatherCompletions(this.editor, function(err, results) {\n            // Only detach if result gathering is finished\n            var detachIfFinished = function() {\n                if (!results.finished) return;\n                return this.detach();\n            }.bind(this);\n\n            var prefix = results.prefix;\n            var matches = results && results.matches;\n\n            if (!matches || !matches.length)\n                return detachIfFinished();\n\n            // Wrong prefix or wrong session -> ignore\n            if (prefix.indexOf(results.prefix) !== 0 || _id != this.gatherCompletionsId)\n                return;\n\n            this.completions = new FilteredList(matches);\n\n            if (this.exactMatch)\n                this.completions.exactMatch = true;\n\n            this.completions.setFilter(prefix);\n            var filtered = this.completions.filtered;\n\n            // No results\n            if (!filtered.length)\n                return detachIfFinished();\n\n            // One result equals to the prefix\n            if (filtered.length == 1 && filtered[0].value == prefix && !filtered[0].snippet)\n                return detachIfFinished();\n\n            // Autoinsert if one result\n            if (this.autoInsert && filtered.length == 1 && results.finished)\n                return this.insertMatch(filtered[0]);\n\n            this.openPopup(this.editor, prefix, keepPopupPosition);\n        }.bind(this));\n    };\n\n    this.cancelContextMenu = function() {\n        this.editor.$mouseHandler.cancelContextMenu();\n    };\n\n    this.updateDocTooltip = function() {\n        var popup = this.popup;\n        var all = popup.data;\n        var selected = all && (all[popup.getHoveredRow()] || all[popup.getRow()]);\n        var doc = null;\n        if (!selected || !this.editor || !this.popup.isOpen)\n            return this.hideDocTooltip();\n        this.editor.completers.some(function(completer) {\n            if (completer.getDocTooltip)\n                doc = completer.getDocTooltip(selected);\n            return doc;\n        });\n        if (!doc)\n            doc = selected;\n\n        if (typeof doc == \"string\")\n            doc = {docText: doc};\n        if (!doc || !(doc.docHTML || doc.docText))\n            return this.hideDocTooltip();\n        this.showDocTooltip(doc);\n    };\n\n    this.showDocTooltip = function(item) {\n        if (!this.tooltipNode) {\n            this.tooltipNode = dom.createElement(\"div\");\n            this.tooltipNode.className = \"ace_tooltip ace_doc-tooltip\";\n            this.tooltipNode.style.margin = 0;\n            this.tooltipNode.style.pointerEvents = \"auto\";\n            this.tooltipNode.tabIndex = -1;\n            this.tooltipNode.onblur = this.blurListener.bind(this);\n            this.tooltipNode.onclick = this.onTooltipClick.bind(this);\n        }\n\n        var tooltipNode = this.tooltipNode;\n        if (item.docHTML) {\n            tooltipNode.innerHTML = item.docHTML;\n        } else if (item.docText) {\n            tooltipNode.textContent = item.docText;\n        }\n\n        if (!tooltipNode.parentNode)\n            document.body.appendChild(tooltipNode);\n        var popup = this.popup;\n        var rect = popup.container.getBoundingClientRect();\n        tooltipNode.style.top = popup.container.style.top;\n        tooltipNode.style.bottom = popup.container.style.bottom;\n\n        if (window.innerWidth - rect.right < 320) {\n            tooltipNode.style.right = window.innerWidth - rect.left + \"px\";\n            tooltipNode.style.left = \"\";\n        } else {\n            tooltipNode.style.left = (rect.right + 1) + \"px\";\n            tooltipNode.style.right = \"\";\n        }\n        tooltipNode.style.display = \"block\";\n    };\n\n    this.hideDocTooltip = function() {\n        this.tooltipTimer.cancel();\n        if (!this.tooltipNode) return;\n        var el = this.tooltipNode;\n        if (!this.editor.isFocused() && document.activeElement == el)\n            this.editor.focus();\n        this.tooltipNode = null;\n        if (el.parentNode)\n            el.parentNode.removeChild(el);\n    };\n    \n    this.onTooltipClick = function(e) {\n        var a = e.target;\n        while (a && a != this.tooltipNode) {\n            if (a.nodeName == \"A\" && a.href) {\n                a.rel = \"noreferrer\";\n                a.target = \"_blank\";\n                break;\n            }\n            a = a.parentNode;\n        }\n    };\n\n}).call(Autocomplete.prototype);\n\nAutocomplete.startCommand = {\n    name: \"startAutocomplete\",\n    exec: function(editor) {\n        if (!editor.completer)\n            editor.completer = new Autocomplete();\n        editor.completer.autoInsert = false;\n        editor.completer.autoSelect = true;\n        editor.completer.showPopup(editor);\n        // prevent ctrl-space opening context menu on firefox on mac\n        editor.completer.cancelContextMenu();\n    },\n    bindKey: \"Ctrl-Space|Ctrl-Shift-Space|Alt-Space\"\n};\n\nvar FilteredList = function(array, filterText) {\n    this.all = array;\n    this.filtered = array;\n    this.filterText = filterText || \"\";\n    this.exactMatch = false;\n};\n(function(){\n    this.setFilter = function(str) {\n        if (str.length > this.filterText && str.lastIndexOf(this.filterText, 0) === 0)\n            var matches = this.filtered;\n        else\n            var matches = this.all;\n\n        this.filterText = str;\n        matches = this.filterCompletions(matches, this.filterText);\n        matches = matches.sort(function(a, b) {\n            return b.exactMatch - a.exactMatch || b.score - a.score;\n        });\n\n        // make unique\n        var prev = null;\n        matches = matches.filter(function(item){\n            var caption = item.snippet || item.caption || item.value;\n            if (caption === prev) return false;\n            prev = caption;\n            return true;\n        });\n\n        this.filtered = matches;\n    };\n    this.filterCompletions = function(items, needle) {\n        var results = [];\n        var upper = needle.toUpperCase();\n        var lower = needle.toLowerCase();\n        loop: for (var i = 0, item; item = items[i]; i++) {\n            var caption = item.value || item.caption || item.snippet;\n            if (!caption) continue;\n            var lastIndex = -1;\n            var matchMask = 0;\n            var penalty = 0;\n            var index, distance;\n\n            if (this.exactMatch) {\n                if (needle !== caption.substr(0, needle.length))\n                    continue loop;\n            }else{\n                // caption char iteration is faster in Chrome but slower in Firefox, so lets use indexOf\n                for (var j = 0; j < needle.length; j++) {\n                    // TODO add penalty on case mismatch\n                    var i1 = caption.indexOf(lower[j], lastIndex + 1);\n                    var i2 = caption.indexOf(upper[j], lastIndex + 1);\n                    index = (i1 >= 0) ? ((i2 < 0 || i1 < i2) ? i1 : i2) : i2;\n                    if (index < 0)\n                        continue loop;\n                    distance = index - lastIndex - 1;\n                    if (distance > 0) {\n                        // first char mismatch should be more sensitive\n                        if (lastIndex === -1)\n                            penalty += 10;\n                        penalty += distance;\n                    }\n                    matchMask = matchMask | (1 << index);\n                    lastIndex = index;\n                }\n            }\n            item.matchMask = matchMask;\n            item.exactMatch = penalty ? 0 : 1;\n            item.score = (item.score || 0) - penalty;\n            results.push(item);\n        }\n        return results;\n    };\n}).call(FilteredList.prototype);\n\nexports.Autocomplete = Autocomplete;\nexports.FilteredList = FilteredList;\n\n});\n"
  },
  {
    "path": "lib/ace/background_tokenizer.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\n\n/**\n * Tokenizes the current [[Document `Document`]] in the background, and caches the tokenized rows for future use. \n * \n * If a certain row is changed, everything below that row is re-tokenized.\n *\n * @class BackgroundTokenizer\n **/\n\n/**\n * Creates a new `BackgroundTokenizer` object.\n * @param {Tokenizer} tokenizer The tokenizer to use\n * @param {Editor} editor The editor to associate with\n *\n * @constructor\n **/\n\nvar BackgroundTokenizer = function(tokenizer, editor) {\n    this.running = false;\n    this.lines = [];\n    this.states = [];\n    this.currentLine = 0;\n    this.tokenizer = tokenizer;\n\n    var self = this;\n\n    this.$worker = function() {\n        if (!self.running) { return; }\n\n        var workerStart = new Date();\n        var currentLine = self.currentLine;\n        var endLine = -1;\n        var doc = self.doc;\n\n        var startLine = currentLine;\n        while (self.lines[currentLine])\n            currentLine++;\n        \n        var len = doc.getLength();\n        var processedLines = 0;\n        self.running = false;\n        while (currentLine < len) {\n            self.$tokenizeRow(currentLine);\n            endLine = currentLine;\n            do {\n                currentLine++;\n            } while (self.lines[currentLine]);\n\n            // only check every 5 lines\n            processedLines ++;\n            if ((processedLines % 5 === 0) && (new Date() - workerStart) > 20) {                \n                self.running = setTimeout(self.$worker, 20);\n                break;\n            }\n        }\n        self.currentLine = currentLine;\n        \n        if (endLine == -1)\n            endLine = currentLine;\n        \n        if (startLine <= endLine)\n            self.fireUpdateEvent(startLine, endLine);\n    };\n};\n\n(function(){\n\n    oop.implement(this, EventEmitter);\n\n    /**\n     * Sets a new tokenizer for this object.\n     *\n     * @param {Tokenizer} tokenizer The new tokenizer to use\n     *\n     **/\n    this.setTokenizer = function(tokenizer) {\n        this.tokenizer = tokenizer;\n        this.lines = [];\n        this.states = [];\n\n        this.start(0);\n    };\n\n    /**\n     * Sets a new document to associate with this object.\n     * @param {Document} doc The new document to associate with\n     **/\n    this.setDocument = function(doc) {\n        this.doc = doc;\n        this.lines = [];\n        this.states = [];\n\n        this.stop();\n    };\n\n     /**\n     * Fires whenever the background tokeniziers between a range of rows are going to be updated.\n     * \n     * @event update\n     * @param {Object} e An object containing two properties, `first` and `last`, which indicate the rows of the region being updated.\n     *\n     **/\n    /**\n     * Emits the `'update'` event. `firstRow` and `lastRow` are used to define the boundaries of the region to be updated.\n     * @param {Number} firstRow The starting row region\n     * @param {Number} lastRow The final row region\n     *\n     **/\n    this.fireUpdateEvent = function(firstRow, lastRow) {\n        var data = {\n            first: firstRow,\n            last: lastRow\n        };\n        this._signal(\"update\", {data: data});\n    };\n\n    /**\n     * Starts tokenizing at the row indicated.\n     *\n     * @param {Number} startRow The row to start at\n     *\n     **/\n    this.start = function(startRow) {\n        this.currentLine = Math.min(startRow || 0, this.currentLine, this.doc.getLength());\n\n        // remove all cached items below this line\n        this.lines.splice(this.currentLine, this.lines.length);\n        this.states.splice(this.currentLine, this.states.length);\n\n        this.stop();\n        // pretty long delay to prevent the tokenizer from interfering with the user\n        this.running = setTimeout(this.$worker, 700);\n    };\n    \n    this.scheduleStart = function() {\n        if (!this.running)\n            this.running = setTimeout(this.$worker, 700);\n    };\n\n    this.$updateOnChange = function(delta) {\n        var startRow = delta.start.row;\n        var len = delta.end.row - startRow;\n\n        if (len === 0) {\n            this.lines[startRow] = null;\n        } else if (delta.action == \"remove\") {\n            this.lines.splice(startRow, len + 1, null);\n            this.states.splice(startRow, len + 1, null);\n        } else {\n            var args = Array(len + 1);\n            args.unshift(startRow, 1);\n            this.lines.splice.apply(this.lines, args);\n            this.states.splice.apply(this.states, args);\n        }\n\n        this.currentLine = Math.min(startRow, this.currentLine, this.doc.getLength());\n\n        this.stop();\n    };\n\n    /**\n     * Stops tokenizing.\n     *\n     **/\n    this.stop = function() {\n        if (this.running)\n            clearTimeout(this.running);\n        this.running = false;\n    };\n\n    /**\n     * Gives list of tokens of the row. (tokens are cached)\n     * \n     * @param {Number} row The row to get tokens at\n     *\n     * \n     *\n     **/\n    this.getTokens = function(row) {\n        return this.lines[row] || this.$tokenizeRow(row);\n    };\n\n    /**\n     * [Returns the state of tokenization at the end of a row.]{: #BackgroundTokenizer.getState}\n     *\n     * @param {Number} row The row to get state at\n     **/\n    this.getState = function(row) {\n        if (this.currentLine == row)\n            this.$tokenizeRow(row);\n        return this.states[row] || \"start\";\n    };\n\n    this.$tokenizeRow = function(row) {\n        var line = this.doc.getLine(row);\n        var state = this.states[row - 1];\n\n        var data = this.tokenizer.getLineTokens(line, state, row);\n\n        if (this.states[row] + \"\" !== data.state + \"\") {\n            this.states[row] = data.state;\n            this.lines[row + 1] = null;\n            if (this.currentLine > row + 1)\n                this.currentLine = row + 1;\n        } else if (this.currentLine == row) {\n            this.currentLine = row + 1;\n        }\n\n        return this.lines[row] = data.tokens;\n    };\n\n}).call(BackgroundTokenizer.prototype);\n\nexports.BackgroundTokenizer = BackgroundTokenizer;\n});\n"
  },
  {
    "path": "lib/ace/background_tokenizer_test.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\nif (typeof process !== \"undefined\") {\n    require(\"amd-loader\");\n}\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar EditSession = require(\"./edit_session\").EditSession;\nvar JavaScriptMode = require(\"./mode/javascript\").Mode;\nvar LuaMode = require(\"./mode/lua\").Mode;\nvar Range = require(\"./range\").Range;\nvar assert = require(\"./test/assertions\");\n\nfunction forceTokenize(session, startLine) {\n    for (var i = startLine || 0, l = session.getLength(); i < l; i++)\n        session.getTokens(i);\n}\n\nfunction testStates(session, states) {\n    for (var i = 0, l = session.getLength(); i < l; i++)\n        assert.equal(session.bgTokenizer.states[i], states[i]);\n    assert.ok(l == states.length);\n}\n\nmodule.exports = {\n\n    \"test background tokenizer update on session change\" : function() {\n        var doc = new EditSession([\n            \"/*\",\n            \"*/\",\n            \"var juhu\"\n        ]);\n        doc.setMode(\"./mode/javascript\");  \n        \n        forceTokenize(doc);\n        testStates(doc, [\"comment1\", \"start\", \"no_regex\"]);\n        \n        doc.remove(new Range(0,2,1,2));\n        testStates(doc, [null, \"no_regex\"]);\n        \n        forceTokenize(doc);\n        testStates(doc, [\"comment1\", \"comment1\"]);\n        \n        doc.insert({row:0, column:2}, \"\\n*/\");\n        testStates(doc, [undefined, undefined, \"comment1\"]);\n        \n        forceTokenize(doc);\n        testStates(doc, [\"comment1\", \"start\", \"no_regex\"]);\n    },\n    \"test background tokenizer sends update event\" : function() {\n        var doc = new EditSession([\n            \"/*\",\n            \"var\",\n            \"juhu\",\n            \"*/\"\n        ]);\n        doc.setMode(\"./mode/javascript\");\n        \n        var updateEvent = null;\n        doc.bgTokenizer.on(\"update\", function(e) {\n            updateEvent = e.data;\n        });\n        function checkEvent(first, last) {\n            assert.ok(!updateEvent, \"unneccessary update event\");\n            doc.bgTokenizer.running = 1;\n            doc.bgTokenizer.$worker();\n            assert.ok(updateEvent);\n            assert.equal([first, last] + \"\", \n                [updateEvent.first, updateEvent.last] + \"\");\n            updateEvent = null;\n        }\n        \n        forceTokenize(doc);\n        var comment = \"comment1\";\n        testStates(doc, [comment, comment, comment, \"start\"]);\n        \n        doc.remove(new Range(0,0,0,2));\n        testStates(doc, [comment, comment, comment, \"start\"]);\n        \n        checkEvent(0, 3);\n        testStates(doc, [\"start\", \"no_regex\", \"no_regex\", \"regex\"]);\n        \n        // insert /* and and press down several times quickly\n        doc.insert({row:0, column:0}, \"/*\");\n        doc.getTokens(0);\n        doc.getTokens(1);\n        doc.getTokens(2);\n        checkEvent(0, 3);\n        \n        forceTokenize(doc);\n        testStates(doc, [comment, comment, comment, \"start\"]);\n    },\n    \"test background tokenizer sends update event 2\" : function(next) {\n        var doc = new EditSession([\n            \"-[[\",\n            \"juhu\",\n            \"kinners]]--\",\n            \"\"\n        ]);\n        doc.setMode(\"./mode/lua\");\n        forceTokenize(doc);\n        var string = \"bracketedString,2,start\";\n        var comment = \"bracketedComment,2,start\";\n        testStates(doc, [string, string, \"start\", \"start\"]);\n        \n        doc.insert({row:0, column:0}, \"-\");\n        forceTokenize(doc);\n        doc.bgTokenizer.once(\"update\", function(e) {\n            assert.equal([0, 4] + \"\", [e.data.first, e.data.last] + \"\");\n            testStates(doc, [comment, comment, \"start\", \"start\"]);\n            next();\n        });\n        doc.bgTokenizer.running = 1;\n        doc.bgTokenizer.$worker();\n    }\n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main) {\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n}\n"
  },
  {
    "path": "lib/ace/bidihandler.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar bidiUtil = require(\"./lib/bidiutil\");\nvar lang = require(\"./lib/lang\");\nvar useragent = require(\"./lib/useragent\");\nvar bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/;\n\n/**\n * This object is used to ensure Bi-Directional support (for languages with text flowing from right to left, like Arabic or Hebrew)\n * including correct caret positioning, text selection mouse and keyboard arrows functioning\n * @class BidiHandler\n **/\n\n/**\n * Creates a new `BidiHandler` object\n * @param {EditSession} session The session to use\n *\n * @constructor\n **/\nvar BidiHandler = function(session) {\n    this.session = session;\n    this.bidiMap = {};\n    /* current screen row */\n    this.currentRow = null;\n    this.bidiUtil = bidiUtil;\n    /* Arabic/Hebrew character width differs from regular character width */\n    this.charWidths = [];\n    this.EOL = \"\\xAC\";\n    this.showInvisibles = true;\n    this.isRtlDir = false;\n    this.line = \"\";\n    this.wrapIndent = 0;\n    this.isLastRow = false;\n    this.EOF = \"\\xB6\";\n    this.seenBidi = false;\n};\n\n(function() {\n    /**\n     * Returns 'true' if row contains Bidi characters, in such case\n     * creates Bidi map to be used in operations related to selection\n     * (keyboard arrays, mouse click, select)\n     * @param {Number} the screen row to be checked\n     * @param {Number} the document row to be checked [optional]\n     * @param {Number} the wrapped screen line index [ optional]\n    **/\n    this.isBidiRow = function(screenRow, docRow, splitIndex) {\n        if (!this.seenBidi)\n            return false;\n        if (screenRow !== this.currentRow) {\n            this.currentRow = screenRow;\n            this.updateRowLine(docRow, splitIndex);\n            this.updateBidiMap();\n        }\n        return this.bidiMap.bidiLevels;\n    };\n\n    this.onChange = function(delta) {\n        if (!this.seenBidi) {\n            if (delta.action == \"insert\" && bidiRE.test(delta.lines.join(\"\\n\"))) {\n                this.seenBidi = true;\n                this.currentRow = null;\n            }\n        } \n        else {\n            this.currentRow = null;\n        }\n    };\n\n    this.getDocumentRow = function() {\n        var docRow = 0;\n        var rowCache = this.session.$screenRowCache;\n        if (rowCache.length) {\n            var index = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n            if (index >= 0)\n                docRow = this.session.$docRowCache[index];\n        }\n\n        return docRow;\n    };\n\n    this.getSplitIndex = function() {\n        var splitIndex = 0;\n        var rowCache = this.session.$screenRowCache;\n        if (rowCache.length) {\n            var currentIndex, prevIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n            while (this.currentRow - splitIndex > 0) {\n                currentIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow - splitIndex - 1);\n                if (currentIndex !== prevIndex)\n                    break;\n\n                prevIndex = currentIndex;\n                splitIndex++;\n            }\n        }\n\n        return splitIndex;\n    };\n\n    this.updateRowLine = function(docRow, splitIndex) {\n        if (docRow === undefined)\n            docRow = this.getDocumentRow();\n            \n        this.wrapIndent = 0;\n        this.isLastRow = (docRow === this.session.getLength() - 1);\n        this.line = this.session.getLine(docRow);\n        if (this.session.$useWrapMode) {\n            var splits = this.session.$wrapData[docRow];\n            if (splits) {\n                if (splitIndex === undefined)\n                    splitIndex = this.getSplitIndex();\n\n                if(splitIndex > 0 && splits.length) {\n                    this.wrapIndent = splits.indent;\n                    this.line = (splitIndex < splits.length) ?\n                        this.line.substring(splits[splitIndex - 1], splits[splits.length - 1]) :\n                            this.line.substring(splits[splits.length - 1]);\n                } else {\n                    this.line = this.line.substring(0, splits[splitIndex]);\n                }\n            }\n        }\n            \n        /* replace tab and wide characters by commensurate spaces */\n        var session = this.session, shift = 0, size;\n        this.line = this.line.replace(/\\t|[\\u1100-\\u2029, \\u202F-\\uFFE6]/g, function(ch, i){\n            if (ch === '\\t' || session.isFullWidth(ch.charCodeAt(0))) {\n                size = (ch === '\\t') ? session.getScreenTabSize(i + shift) : 2;\n                shift += size - 1;\n                return lang.stringRepeat(bidiUtil.DOT, size);\n            }\n            return ch;\n        });\n    };\n    \n    this.updateBidiMap = function() {\n        var textCharTypes = [], endOfLine = this.isLastRow ? this.EOF : this.EOL;\n        var line = this.line + (this.showInvisibles ? endOfLine : bidiUtil.DOT);\n        if (bidiUtil.hasBidiCharacters(line, textCharTypes)) {\n            this.bidiMap = bidiUtil.doBidiReorder(line, textCharTypes, this.isRtlDir);\n        } else {\n            this.bidiMap = {};\n        }\n    };\n\n    /**\n     * Resets stored info related to current screen row\n    **/\n    this.markAsDirty = function() {\n        this.currentRow = null;\n    };\n\n    /**\n     * Updates array of character widths\n     * @param {Object} font metrics\n     *\n    **/\n    this.updateCharacterWidths = function(fontMetrics) {\n        if (!this.seenBidi)\n            return;\n        if (this.characterWidth === fontMetrics.$characterSize.width)\n            return;\n\n        var characterWidth = this.characterWidth = fontMetrics.$characterSize.width;\n        var bidiCharWidth = fontMetrics.$measureCharWidth(\"\\u05d4\");\n\n        this.charWidths[bidiUtil.L] = this.charWidths[bidiUtil.EN] = this.charWidths[bidiUtil.ON_R] = characterWidth;\n        this.charWidths[bidiUtil.R] = this.charWidths[bidiUtil.AN] = bidiCharWidth;\n        this.charWidths[bidiUtil.R_H] = useragent.isChrome ? bidiCharWidth : bidiCharWidth * 0.45;\n        this.charWidths[bidiUtil.B] = 0;\n\n        this.currentRow = null;\n    };\n\n    this.getShowInvisibles = function() {\n        return this.showInvisibles;\n    };\n\n    this.setShowInvisibles = function(showInvisibles) {\n        this.showInvisibles = showInvisibles;\n        this.currentRow = null;\n    };\n\n    this.setEolChar = function(eolChar) {\n        this.EOL = eolChar; \n    };\n\n    this.setTextDir = function(isRtlDir) {\n        this.isRtlDir = isRtlDir; \n    };\n\n    /**\n     * Returns offset of character at position defined by column.\n     * @param {Number} the screen column position\n     *\n     * @return {int} horizontal pixel offset of given screen column\n     **/\n    this.getPosLeft = function(col) {\n        col -= this.wrapIndent;\n        var visualIdx = bidiUtil.getVisualFromLogicalIdx(col > 0 ? col - 1 : 0, this.bidiMap),\n            levels = this.bidiMap.bidiLevels, left = 0;\n\n        if (col === 0 && levels[visualIdx] % 2 !== 0)\n            visualIdx++;\n\n        for (var i = 0; i < visualIdx; i++) {\n            left += this.charWidths[levels[i]];\n        }\n\n        if (col !== 0 && levels[visualIdx] % 2 === 0)\n            left += this.charWidths[levels[visualIdx]];\n\n        if (this.wrapIndent)\n            left += this.wrapIndent * this.charWidths[bidiUtil.L];\n\n        return left;\n    };\n\n    /**\n     * Returns 'selections' - array of objects defining set of selection rectangles\n     * @param {Number} the start column position\n     * @param {Number} the end column position\n     *\n     * @return {Array of Objects} Each object contains 'left' and 'width' values defining selection rectangle.\n    **/\n    this.getSelections = function(startCol, endCol) {\n        var map = this.bidiMap, levels = map.bidiLevels, level, offset = this.wrapIndent * this.charWidths[bidiUtil.L], selections = [],\n            selColMin = Math.min(startCol, endCol) - this.wrapIndent, selColMax = Math.max(startCol, endCol) - this.wrapIndent,\n                isSelected = false, isSelectedPrev = false, selectionStart = 0;\n\n        for (var logIdx, visIdx = 0; visIdx < levels.length; visIdx++) {\n            logIdx = map.logicalFromVisual[visIdx];\n            level = levels[visIdx];\n            isSelected = (logIdx >= selColMin) && (logIdx < selColMax);\n            if (isSelected && !isSelectedPrev) {\n                selectionStart = offset;\n            } else if (!isSelected && isSelectedPrev) {\n                selections.push({left: selectionStart, width: offset - selectionStart});\n            }\n            offset += this.charWidths[level];\n            isSelectedPrev = isSelected;\n        }\n\n        if (isSelected && (visIdx === levels.length)) {\n            selections.push({left: selectionStart, width: offset - selectionStart});\n        }\n\n        return selections;\n    };\n\n    /**\n     * Converts character coordinates on the screen to respective document column number\n     * @param {int} character horizontal offset\n     *\n     * @return {Number} screen column number corresponding to given pixel offset\n    **/\n    this.offsetToCol = function(posX) {\n        var logicalIdx = 0, posX = Math.max(posX, 0),\n            offset = 0, visualIdx = 0, levels = this.bidiMap.bidiLevels,\n                charWidth = this.charWidths[levels[visualIdx]];\n\n        if (this.wrapIndent) {\n            posX -= this.wrapIndent * this.charWidths[bidiUtil.L];\n        }\n    \n        while(posX > offset + charWidth/2) {\n            offset += charWidth;\n            if(visualIdx === levels.length - 1) {\n                /* quit when we on the right of the last character, flag this by charWidth = 0 */\n                charWidth = 0;\n                break;\n            }\n            charWidth = this.charWidths[levels[++visualIdx]];\n        }\n    \n        if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && (levels[visualIdx] % 2 === 0)){\n        /* Bidi character on the left and None Bidi character on the right */\n            if(posX < offset)\n                visualIdx--;\n            logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n\n        } else if (visualIdx > 0 && (levels[visualIdx - 1] % 2 === 0) && (levels[visualIdx] % 2 !== 0)){\n        /* None Bidi character on the left and Bidi character on the right */\n            logicalIdx = 1 + ((posX > offset) ? this.bidiMap.logicalFromVisual[visualIdx]\n                    : this.bidiMap.logicalFromVisual[visualIdx - 1]);\n\n        } else if ((this.isRtlDir && visualIdx === levels.length - 1 && charWidth === 0 && (levels[visualIdx - 1] % 2 === 0))\n                || (!this.isRtlDir && visualIdx === 0 && (levels[visualIdx] % 2 !== 0))){\n        /* To the right of last character, which is None Bidi, in RTL direction or */\n        /* to the left of first Bidi character, in LTR direction */\n            logicalIdx = 1 + this.bidiMap.logicalFromVisual[visualIdx];\n        } else {\n            /* Tweak visual position when Bidi character on the left in order to map it to corresponding logical position */\n            if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && charWidth !== 0)\n                visualIdx--;\n\n            /* Regular case */\n            logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n        }\n\n        return (logicalIdx + this.wrapIndent);\n    };\n\n}).call(BidiHandler.prototype);\n\nexports.BidiHandler = BidiHandler;\n});\n"
  },
  {
    "path": "lib/ace/clipboard.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nmodule.exports = { lineMode: false };\n\n});\n"
  },
  {
    "path": "lib/ace/commands/command_manager.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar MultiHashHandler = require(\"../keyboard/hash_handler\").MultiHashHandler;\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\n\n/**\n * @class CommandManager\n *\n **/\n\n/**\n * new CommandManager(platform, commands)\n * @param {String} platform Identifier for the platform; must be either `\"mac\"` or `\"win\"`\n * @param {Array} commands A list of commands\n *\n **/\n\nvar CommandManager = function(platform, commands) {\n    MultiHashHandler.call(this, commands, platform);\n    this.byName = this.commands;\n    this.setDefaultHandler(\"exec\", function(e) {\n        return e.command.exec(e.editor, e.args || {});\n    });\n};\n\noop.inherits(CommandManager, MultiHashHandler);\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n\n    this.exec = function(command, editor, args) {\n        if (Array.isArray(command)) {\n            for (var i = command.length; i--; ) {\n                if (this.exec(command[i], editor, args)) return true;\n            }\n            return false;\n        }\n\n        if (typeof command === \"string\")\n            command = this.commands[command];\n\n        if (!command)\n            return false;\n\n        if (editor && editor.$readOnly && !command.readOnly)\n            return false;\n\n        if (command.isAvailable && !command.isAvailable(editor))\n            return false;\n\n        var e = {editor: editor, command: command, args: args};\n        e.returnValue = this._emit(\"exec\", e);\n        this._signal(\"afterExec\", e);\n\n        return e.returnValue === false ? false : true;\n    };\n\n    this.toggleRecording = function(editor) {\n        if (this.$inReplay)\n            return;\n\n        editor && editor._emit(\"changeStatus\");\n        if (this.recording) {\n            this.macro.pop();\n            this.removeEventListener(\"exec\", this.$addCommandToMacro);\n\n            if (!this.macro.length)\n                this.macro = this.oldMacro;\n\n            return this.recording = false;\n        }\n        if (!this.$addCommandToMacro) {\n            this.$addCommandToMacro = function(e) {\n                this.macro.push([e.command, e.args]);\n            }.bind(this);\n        }\n\n        this.oldMacro = this.macro;\n        this.macro = [];\n        this.on(\"exec\", this.$addCommandToMacro);\n        return this.recording = true;\n    };\n\n    this.replay = function(editor) {\n        if (this.$inReplay || !this.macro)\n            return;\n\n        if (this.recording)\n            return this.toggleRecording(editor);\n\n        try {\n            this.$inReplay = true;\n            this.macro.forEach(function(x) {\n                if (typeof x == \"string\")\n                    this.exec(x, editor);\n                else\n                    this.exec(x[0], editor, x[1]);\n            }, this);\n        } finally {\n            this.$inReplay = false;\n        }\n    };\n\n    this.trimMacro = function(m) {\n        return m.map(function(x){\n            if (typeof x[0] != \"string\")\n                x[0] = x[0].name;\n            if (!x[1])\n                x = x[0];\n            return x;\n        });\n    };\n\n}).call(CommandManager.prototype);\n\nexports.CommandManager = CommandManager;\n\n});\n"
  },
  {
    "path": "lib/ace/commands/command_manager_test.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\nif (typeof process !== \"undefined\") {\n    require(\"amd-loader\");\n}\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar CommandManager = require(\"./command_manager\").CommandManager;\nvar keys = require(\"../lib/keys\");\nvar assert = require(\"../test/assertions\");\n\nmodule.exports = {\n\n    setUp: function() {\n        this.command = {\n            name: \"gotoline\",\n            bindKey: {\n                mac: \"Command-L\",\n                win: \"Ctrl-L\"\n            },\n            called: false,\n            available: true,\n            exec: function(editor) { this.called = true; },\n            isAvailable: function(editor) { return this.available; }\n        };\n\n        this.cm = new CommandManager(\"mac\", [this.command]);\n    },\n\n    \"test: register command\": function() {\n        this.cm.exec(\"gotoline\");\n        assert.ok(this.command.called);\n    },\n\n    \"test: mac hotkeys\": function() {\n        var command = this.cm.findKeyCommand(keys.KEY_MODS.command, \"l\");\n        assert.equal(command, this.command);\n\n        var command = this.cm.findKeyCommand(keys.KEY_MODS.ctrl, \"l\");\n        assert.equal(command, undefined);\n    },\n\n    \"test: win hotkeys\": function() {\n        var cm = new CommandManager(\"win\", [this.command]);\n\n        var command = cm.findKeyCommand(keys.KEY_MODS.command, \"l\");\n        assert.equal(command, undefined);\n\n        var command = cm.findKeyCommand(keys.KEY_MODS.ctrl, \"l\");\n        assert.equal(command, this.command);\n    },\n\n    \"test: command isAvailable\": function() {\n        this.command.available = false;\n\n        this.cm.exec(\"gotoline\");\n        assert.ok(!this.command.called);\n    },\n\n    \"test: remove command by object\": function() {\n        this.cm.removeCommand(this.command);\n\n        this.cm.exec(\"gotoline\");\n        assert.ok(!this.command.called);\n\n        var command = this.cm.findKeyCommand(keys.KEY_MODS.command, \"l\");\n        assert.equal(command, null);\n    },\n\n    \"test: remove command by name\": function() {\n        this.cm.removeCommand(\"gotoline\");\n\n        this.cm.exec(\"gotoline\");\n        assert.ok(!this.command.called);\n\n        var command = this.cm.findKeyCommand(keys.KEY_MODS.command, \"l\");\n        assert.equal(command, null);\n    },\n\n    \"test: adding a new command with the same name as an existing one should remove the old one first\": function() {\n        var command = {\n            name: \"gotoline\",\n            bindKey: {\n                mac: \"Command-L\",\n                win: \"Ctrl-L\"\n            },\n            called: false,\n            exec: function(editor) { this.called = true; }\n        };\n        this.cm.addCommand(command);\n\n        this.cm.exec(\"gotoline\");\n        assert.ok(command.called);\n        assert.ok(!this.command.called);\n\n        assert.equal(this.cm.findKeyCommand(keys.KEY_MODS.command, \"l\"), command);\n    },\n\n    \"test: adding commands and recording a macro\": function() {\n        var called = \"\";\n        this.cm.addCommands({\n            togglerecording: function(editor) {\n                editor.cm.toggleRecording(editor);\n            },\n            replay: function(editor) {\n                editor.cm.replay();\n            },\n            cm1: function(editor, arg) {\n                called += \"1\" + (arg || \"\");\n            },\n            cm2: function(editor) {\n                called += \"2\";\n            }\n        });\n\n\n        var statusUpdateEmitted = false;\n        this._emit = function() {statusUpdateEmitted = true;};\n\n        this.cm.exec(\"togglerecording\", this);\n        assert.ok(this.cm.recording);\n        assert.ok(statusUpdateEmitted);\n\n        this.cm.exec(\"cm1\", this, \"-\");\n        this.cm.exec(\"cm2\");\n        this.cm.exec(\"replay\", this);\n        assert.ok(!this.cm.recording);\n        assert.equal(called, \"1-2\");\n\n        called = \"\";\n        this.cm.exec(\"replay\", this);\n        assert.equal(called, \"1-2\");\n    },\n\n    \"test: bindkeys\": function() {\n        this.cm.bindKeys({\n            \"Ctrl-L|Command-C\": \"cm1\",\n            \"Ctrl-R\": \"cm2\"\n        });\n\n        var command = this.cm.findKeyCommand(keys.KEY_MODS.command, \"c\");\n        assert.equal(command, \"cm1\");\n\n        var command = this.cm.findKeyCommand(keys.KEY_MODS.ctrl, \"r\");\n        assert.equal(command, \"cm2\");\n\n        this.cm.bindKeys({\n            \"Ctrl-R\": null\n        });\n\n        var command = this.cm.findKeyCommand(keys.KEY_MODS.ctrl, \"r\");\n        assert.equal(command, null);\n    },\n\n    \"test: binding keys without modifiers\": function() {\n        this.cm.bindKeys({\n            \"R\": \"cm1\",\n            \"Shift-r\": \"cm2\",\n            \"Return\": \"cm4\",\n            \"Enter\": \"cm3\"\n        });\n\n        var command = this.cm.findKeyCommand(-1, \"r\");\n        assert.equal(command, \"cm1\");\n\n        var command = this.cm.findKeyCommand(-1, \"R\");\n        assert.equal(command, \"cm2\");\n\n        var command = this.cm.findKeyCommand(0, \"return\");\n        assert.equal(command + \"\", [\"cm4\", \"cm3\"] + \"\");\n    }\n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main) {\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n}\n"
  },
  {
    "path": "lib/ace/commands/default_commands.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar lang = require(\"../lib/lang\");\nvar config = require(\"../config\");\nvar Range = require(\"../range\").Range;\n\nfunction bindKey(win, mac) {\n    return {win: win, mac: mac};\n}\n\n/*\n    multiSelectAction: \"forEach\"|\"forEachLine\"|function|undefined,\n    scrollIntoView: true|\"cursor\"|\"center\"|\"selectionPart\"\n*/\nexports.commands = [{\n    name: \"showSettingsMenu\",\n    bindKey: bindKey(\"Ctrl-,\", \"Command-,\"),\n    exec: function(editor) {\n        config.loadModule(\"ace/ext/settings_menu\", function(module) {\n            module.init(editor);\n            editor.showSettingsMenu();\n        });\n    },\n    readOnly: true\n}, {\n    name: \"goToNextError\",\n    bindKey: bindKey(\"Alt-E\", \"F4\"),\n    exec: function(editor) {\n        config.loadModule(\"ace/ext/error_marker\", function(module) {\n            module.showErrorMarker(editor, 1);\n        });\n    },\n    scrollIntoView: \"animate\",\n    readOnly: true\n}, {\n    name: \"goToPreviousError\",\n    bindKey: bindKey(\"Alt-Shift-E\", \"Shift-F4\"),\n    exec: function(editor) {\n        config.loadModule(\"ace/ext/error_marker\", function(module) {\n            module.showErrorMarker(editor, -1);\n        });\n    },\n    scrollIntoView: \"animate\",\n    readOnly: true\n}, {\n    name: \"selectall\",\n    bindKey: bindKey(\"Ctrl-A\", \"Command-A\"),\n    exec: function(editor) { editor.selectAll(); },\n    readOnly: true\n}, {\n    name: \"centerselection\",\n    bindKey: bindKey(null, \"Ctrl-L\"),\n    exec: function(editor) { editor.centerSelection(); },\n    readOnly: true\n}, {\n    name: \"gotoline\",\n    bindKey: bindKey(\"Ctrl-L\", \"Command-L\"),\n    exec: function(editor, line) {\n        if (typeof line !== \"number\")\n            line = parseInt(prompt(\"Enter line number:\"), 10);\n        if (!isNaN(line)) {\n            editor.gotoLine(line);\n        }\n    },\n    readOnly: true\n}, {\n    name: \"fold\",\n    bindKey: bindKey(\"Alt-L|Ctrl-F1\", \"Command-Alt-L|Command-F1\"),\n    exec: function(editor) { editor.session.toggleFold(false); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"center\",\n    readOnly: true\n}, {\n    name: \"unfold\",\n    bindKey: bindKey(\"Alt-Shift-L|Ctrl-Shift-F1\", \"Command-Alt-Shift-L|Command-Shift-F1\"),\n    exec: function(editor) { editor.session.toggleFold(true); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"center\",\n    readOnly: true\n}, {\n    name: \"toggleFoldWidget\",\n    bindKey: bindKey(\"F2\", \"F2\"),\n    exec: function(editor) { editor.session.toggleFoldWidget(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"center\",\n    readOnly: true\n}, {\n    name: \"toggleParentFoldWidget\",\n    bindKey: bindKey(\"Alt-F2\", \"Alt-F2\"),\n    exec: function(editor) { editor.session.toggleFoldWidget(true); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"center\",\n    readOnly: true\n}, {\n    name: \"foldall\",\n    bindKey: bindKey(null, \"Ctrl-Command-Option-0\"),\n    exec: function(editor) { editor.session.foldAll(); },\n    scrollIntoView: \"center\",\n    readOnly: true\n}, {\n    name: \"foldOther\",\n    bindKey: bindKey(\"Alt-0\", \"Command-Option-0\"),\n    exec: function(editor) { \n        editor.session.foldAll();\n        editor.session.unfold(editor.selection.getAllRanges());\n    },\n    scrollIntoView: \"center\",\n    readOnly: true\n}, {\n    name: \"unfoldall\",\n    bindKey: bindKey(\"Alt-Shift-0\", \"Command-Option-Shift-0\"),\n    exec: function(editor) { editor.session.unfold(); },\n    scrollIntoView: \"center\",\n    readOnly: true\n}, {\n    name: \"findnext\",\n    bindKey: bindKey(\"Ctrl-K\", \"Command-G\"),\n    exec: function(editor) { editor.findNext(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"center\",\n    readOnly: true\n}, {\n    name: \"findprevious\",\n    bindKey: bindKey(\"Ctrl-Shift-K\", \"Command-Shift-G\"),\n    exec: function(editor) { editor.findPrevious(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"center\",\n    readOnly: true\n}, {\n    name: \"selectOrFindNext\",\n    bindKey: bindKey(\"Alt-K\", \"Ctrl-G\"),\n    exec: function(editor) {\n        if (editor.selection.isEmpty())\n            editor.selection.selectWord();\n        else\n            editor.findNext(); \n    },\n    readOnly: true\n}, {\n    name: \"selectOrFindPrevious\",\n    bindKey: bindKey(\"Alt-Shift-K\", \"Ctrl-Shift-G\"),\n    exec: function(editor) { \n        if (editor.selection.isEmpty())\n            editor.selection.selectWord();\n        else\n            editor.findPrevious();\n    },\n    readOnly: true\n}, {\n    name: \"find\",\n    bindKey: bindKey(\"Ctrl-F\", \"Command-F\"),\n    exec: function(editor) {\n        config.loadModule(\"ace/ext/searchbox\", function(e) {e.Search(editor);});\n    },\n    readOnly: true\n}, {\n    name: \"overwrite\",\n    bindKey: \"Insert\",\n    exec: function(editor) { editor.toggleOverwrite(); },\n    readOnly: true\n}, {\n    name: \"selecttostart\",\n    bindKey: bindKey(\"Ctrl-Shift-Home\", \"Command-Shift-Home|Command-Shift-Up\"),\n    exec: function(editor) { editor.getSelection().selectFileStart(); },\n    multiSelectAction: \"forEach\",\n    readOnly: true,\n    scrollIntoView: \"animate\",\n    aceCommandGroup: \"fileJump\"\n}, {\n    name: \"gotostart\",\n    bindKey: bindKey(\"Ctrl-Home\", \"Command-Home|Command-Up\"),\n    exec: function(editor) { editor.navigateFileStart(); },\n    multiSelectAction: \"forEach\",\n    readOnly: true,\n    scrollIntoView: \"animate\",\n    aceCommandGroup: \"fileJump\"\n}, {\n    name: \"selectup\",\n    bindKey: bindKey(\"Shift-Up\", \"Shift-Up|Ctrl-Shift-P\"),\n    exec: function(editor) { editor.getSelection().selectUp(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"golineup\",\n    bindKey: bindKey(\"Up\", \"Up|Ctrl-P\"),\n    exec: function(editor, args) { editor.navigateUp(args.times); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selecttoend\",\n    bindKey: bindKey(\"Ctrl-Shift-End\", \"Command-Shift-End|Command-Shift-Down\"),\n    exec: function(editor) { editor.getSelection().selectFileEnd(); },\n    multiSelectAction: \"forEach\",\n    readOnly: true,\n    scrollIntoView: \"animate\",\n    aceCommandGroup: \"fileJump\"\n}, {\n    name: \"gotoend\",\n    bindKey: bindKey(\"Ctrl-End\", \"Command-End|Command-Down\"),\n    exec: function(editor) { editor.navigateFileEnd(); },\n    multiSelectAction: \"forEach\",\n    readOnly: true,\n    scrollIntoView: \"animate\",\n    aceCommandGroup: \"fileJump\"\n}, {\n    name: \"selectdown\",\n    bindKey: bindKey(\"Shift-Down\", \"Shift-Down|Ctrl-Shift-N\"),\n    exec: function(editor) { editor.getSelection().selectDown(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"golinedown\",\n    bindKey: bindKey(\"Down\", \"Down|Ctrl-N\"),\n    exec: function(editor, args) { editor.navigateDown(args.times); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selectwordleft\",\n    bindKey: bindKey(\"Ctrl-Shift-Left\", \"Option-Shift-Left\"),\n    exec: function(editor) { editor.getSelection().selectWordLeft(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"gotowordleft\",\n    bindKey: bindKey(\"Ctrl-Left\", \"Option-Left\"),\n    exec: function(editor) { editor.navigateWordLeft(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selecttolinestart\",\n    bindKey: bindKey(\"Alt-Shift-Left\", \"Command-Shift-Left|Ctrl-Shift-A\"),\n    exec: function(editor) { editor.getSelection().selectLineStart(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"gotolinestart\",\n    bindKey: bindKey(\"Alt-Left|Home\", \"Command-Left|Home|Ctrl-A\"),\n    exec: function(editor) { editor.navigateLineStart(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selectleft\",\n    bindKey: bindKey(\"Shift-Left\", \"Shift-Left|Ctrl-Shift-B\"),\n    exec: function(editor) { editor.getSelection().selectLeft(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"gotoleft\",\n    bindKey: bindKey(\"Left\", \"Left|Ctrl-B\"),\n    exec: function(editor, args) { editor.navigateLeft(args.times); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selectwordright\",\n    bindKey: bindKey(\"Ctrl-Shift-Right\", \"Option-Shift-Right\"),\n    exec: function(editor) { editor.getSelection().selectWordRight(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"gotowordright\",\n    bindKey: bindKey(\"Ctrl-Right\", \"Option-Right\"),\n    exec: function(editor) { editor.navigateWordRight(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selecttolineend\",\n    bindKey: bindKey(\"Alt-Shift-Right\", \"Command-Shift-Right|Shift-End|Ctrl-Shift-E\"),\n    exec: function(editor) { editor.getSelection().selectLineEnd(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"gotolineend\",\n    bindKey: bindKey(\"Alt-Right|End\", \"Command-Right|End|Ctrl-E\"),\n    exec: function(editor) { editor.navigateLineEnd(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selectright\",\n    bindKey: bindKey(\"Shift-Right\", \"Shift-Right\"),\n    exec: function(editor) { editor.getSelection().selectRight(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"gotoright\",\n    bindKey: bindKey(\"Right\", \"Right|Ctrl-F\"),\n    exec: function(editor, args) { editor.navigateRight(args.times); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selectpagedown\",\n    bindKey: \"Shift-PageDown\",\n    exec: function(editor) { editor.selectPageDown(); },\n    readOnly: true\n}, {\n    name: \"pagedown\",\n    bindKey: bindKey(null, \"Option-PageDown\"),\n    exec: function(editor) { editor.scrollPageDown(); },\n    readOnly: true\n}, {\n    name: \"gotopagedown\",\n    bindKey: bindKey(\"PageDown\", \"PageDown|Ctrl-V\"),\n    exec: function(editor) { editor.gotoPageDown(); },\n    readOnly: true\n}, {\n    name: \"selectpageup\",\n    bindKey: \"Shift-PageUp\",\n    exec: function(editor) { editor.selectPageUp(); },\n    readOnly: true\n}, {\n    name: \"pageup\",\n    bindKey: bindKey(null, \"Option-PageUp\"),\n    exec: function(editor) { editor.scrollPageUp(); },\n    readOnly: true\n}, {\n    name: \"gotopageup\",\n    bindKey: \"PageUp\",\n    exec: function(editor) { editor.gotoPageUp(); },\n    readOnly: true\n}, {\n    name: \"scrollup\",\n    bindKey: bindKey(\"Ctrl-Up\", null),\n    exec: function(e) { e.renderer.scrollBy(0, -2 * e.renderer.layerConfig.lineHeight); },\n    readOnly: true\n}, {\n    name: \"scrolldown\",\n    bindKey: bindKey(\"Ctrl-Down\", null),\n    exec: function(e) { e.renderer.scrollBy(0, 2 * e.renderer.layerConfig.lineHeight); },\n    readOnly: true\n}, {\n    name: \"selectlinestart\",\n    bindKey: \"Shift-Home\",\n    exec: function(editor) { editor.getSelection().selectLineStart(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selectlineend\",\n    bindKey: \"Shift-End\",\n    exec: function(editor) { editor.getSelection().selectLineEnd(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"togglerecording\",\n    bindKey: bindKey(\"Ctrl-Alt-E\", \"Command-Option-E\"),\n    exec: function(editor) { editor.commands.toggleRecording(editor); },\n    readOnly: true\n}, {\n    name: \"replaymacro\",\n    bindKey: bindKey(\"Ctrl-Shift-E\", \"Command-Shift-E\"),\n    exec: function(editor) { editor.commands.replay(editor); },\n    readOnly: true\n}, {\n    name: \"jumptomatching\",\n    bindKey: bindKey(\"Ctrl-P\", \"Ctrl-P\"),\n    exec: function(editor) { editor.jumpToMatching(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"animate\",\n    readOnly: true\n}, {\n    name: \"selecttomatching\",\n    bindKey: bindKey(\"Ctrl-Shift-P\", \"Ctrl-Shift-P\"),\n    exec: function(editor) { editor.jumpToMatching(true); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"animate\",\n    readOnly: true\n}, {\n    name: \"expandToMatching\",\n    bindKey: bindKey(\"Ctrl-Shift-M\", \"Ctrl-Shift-M\"),\n    exec: function(editor) { editor.jumpToMatching(true, true); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"animate\",\n    readOnly: true\n}, {\n    name: \"passKeysToBrowser\",\n    bindKey: bindKey(null, null),\n    exec: function() {},\n    passEvent: true,\n    readOnly: true\n}, {\n    name: \"copy\",\n    exec: function(editor) {\n        // placeholder for replay macro\n    },\n    readOnly: true\n},\n\n// commands disabled in readOnly mode\n{\n    name: \"cut\",\n    exec: function(editor) {\n        var cutLine = editor.$copyWithEmptySelection && editor.selection.isEmpty();\n        var range = cutLine ? editor.selection.getLineRange() : editor.selection.getRange();\n        editor._emit(\"cut\", range);\n\n        if (!range.isEmpty())\n            editor.session.remove(range);\n        editor.clearSelection();\n    },\n    scrollIntoView: \"cursor\",\n    multiSelectAction: \"forEach\"\n}, {\n    name: \"paste\",\n    exec: function(editor, args) {\n        editor.$handlePaste(args);\n    },\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"removeline\",\n    bindKey: bindKey(\"Ctrl-D\", \"Command-D\"),\n    exec: function(editor) { editor.removeLines(); },\n    scrollIntoView: \"cursor\",\n    multiSelectAction: \"forEachLine\"\n}, {\n    name: \"duplicateSelection\",\n    bindKey: bindKey(\"Ctrl-Shift-D\", \"Command-Shift-D\"),\n    exec: function(editor) { editor.duplicateSelection(); },\n    scrollIntoView: \"cursor\",\n    multiSelectAction: \"forEach\"\n}, {\n    name: \"sortlines\",\n    bindKey: bindKey(\"Ctrl-Alt-S\", \"Command-Alt-S\"),\n    exec: function(editor) { editor.sortLines(); },\n    scrollIntoView: \"selection\",\n    multiSelectAction: \"forEachLine\"\n}, {\n    name: \"togglecomment\",\n    bindKey: bindKey(\"Ctrl-/\", \"Command-/\"),\n    exec: function(editor) { editor.toggleCommentLines(); },\n    multiSelectAction: \"forEachLine\",\n    scrollIntoView: \"selectionPart\"\n}, {\n    name: \"toggleBlockComment\",\n    bindKey: bindKey(\"Ctrl-Shift-/\", \"Command-Shift-/\"),\n    exec: function(editor) { editor.toggleBlockComment(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"selectionPart\"\n}, {\n    name: \"modifyNumberUp\",\n    bindKey: bindKey(\"Ctrl-Shift-Up\", \"Alt-Shift-Up\"),\n    exec: function(editor) { editor.modifyNumber(1); },\n    scrollIntoView: \"cursor\",\n    multiSelectAction: \"forEach\"\n}, {\n    name: \"modifyNumberDown\",\n    bindKey: bindKey(\"Ctrl-Shift-Down\", \"Alt-Shift-Down\"),\n    exec: function(editor) { editor.modifyNumber(-1); },\n    scrollIntoView: \"cursor\",\n    multiSelectAction: \"forEach\"\n}, {\n    name: \"replace\",\n    bindKey: bindKey(\"Ctrl-H\", \"Command-Option-F\"),\n    exec: function(editor) {\n        config.loadModule(\"ace/ext/searchbox\", function(e) {e.Search(editor, true);});\n    }\n}, {\n    name: \"undo\",\n    bindKey: bindKey(\"Ctrl-Z\", \"Command-Z\"),\n    exec: function(editor) { editor.undo(); }\n}, {\n    name: \"redo\",\n    bindKey: bindKey(\"Ctrl-Shift-Z|Ctrl-Y\", \"Command-Shift-Z|Command-Y\"),\n    exec: function(editor) { editor.redo(); }\n}, {\n    name: \"copylinesup\",\n    bindKey: bindKey(\"Alt-Shift-Up\", \"Command-Option-Up\"),\n    exec: function(editor) { editor.copyLinesUp(); },\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"movelinesup\",\n    bindKey: bindKey(\"Alt-Up\", \"Option-Up\"),\n    exec: function(editor) { editor.moveLinesUp(); },\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"copylinesdown\",\n    bindKey: bindKey(\"Alt-Shift-Down\", \"Command-Option-Down\"),\n    exec: function(editor) { editor.copyLinesDown(); },\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"movelinesdown\",\n    bindKey: bindKey(\"Alt-Down\", \"Option-Down\"),\n    exec: function(editor) { editor.moveLinesDown(); },\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"del\",\n    bindKey: bindKey(\"Delete\", \"Delete|Ctrl-D|Shift-Delete\"),\n    exec: function(editor) { editor.remove(\"right\"); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"backspace\",\n    bindKey: bindKey(\n        \"Shift-Backspace|Backspace\",\n        \"Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H\"\n    ),\n    exec: function(editor) { editor.remove(\"left\"); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"cut_or_delete\",\n    bindKey: bindKey(\"Shift-Delete\", null),\n    exec: function(editor) { \n        if (editor.selection.isEmpty()) {\n            editor.remove(\"left\");\n        } else {\n            return false;\n        }\n    },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"removetolinestart\",\n    bindKey: bindKey(\"Alt-Backspace\", \"Command-Backspace\"),\n    exec: function(editor) { editor.removeToLineStart(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"removetolineend\",\n    bindKey: bindKey(\"Alt-Delete\", \"Ctrl-K|Command-Delete\"),\n    exec: function(editor) { editor.removeToLineEnd(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"removetolinestarthard\",\n    bindKey: bindKey(\"Ctrl-Shift-Backspace\", null),\n    exec: function(editor) {\n        var range = editor.selection.getRange();\n        range.start.column = 0;\n        editor.session.remove(range);\n    },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"removetolineendhard\",\n    bindKey: bindKey(\"Ctrl-Shift-Delete\", null),\n    exec: function(editor) {\n        var range = editor.selection.getRange();\n        range.end.column = Number.MAX_VALUE;\n        editor.session.remove(range);\n    },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"removewordleft\",\n    bindKey: bindKey(\"Ctrl-Backspace\", \"Alt-Backspace|Ctrl-Alt-Backspace\"),\n    exec: function(editor) { editor.removeWordLeft(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"removewordright\",\n    bindKey: bindKey(\"Ctrl-Delete\", \"Alt-Delete\"),\n    exec: function(editor) { editor.removeWordRight(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"outdent\",\n    bindKey: bindKey(\"Shift-Tab\", \"Shift-Tab\"),\n    exec: function(editor) { editor.blockOutdent(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"selectionPart\"\n}, {\n    name: \"indent\",\n    bindKey: bindKey(\"Tab\", \"Tab\"),\n    exec: function(editor) { editor.indent(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"selectionPart\"\n}, {\n    name: \"blockoutdent\",\n    bindKey: bindKey(\"Ctrl-[\", \"Ctrl-[\"),\n    exec: function(editor) { editor.blockOutdent(); },\n    multiSelectAction: \"forEachLine\",\n    scrollIntoView: \"selectionPart\"\n}, {\n    name: \"blockindent\",\n    bindKey: bindKey(\"Ctrl-]\", \"Ctrl-]\"),\n    exec: function(editor) { editor.blockIndent(); },\n    multiSelectAction: \"forEachLine\",\n    scrollIntoView: \"selectionPart\"\n}, {\n    name: \"insertstring\",\n    exec: function(editor, str) { editor.insert(str); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"inserttext\",\n    exec: function(editor, args) {\n        editor.insert(lang.stringRepeat(args.text  || \"\", args.times || 1));\n    },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"splitline\",\n    bindKey: bindKey(null, \"Ctrl-O\"),\n    exec: function(editor) { editor.splitLine(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"transposeletters\",\n    bindKey: bindKey(\"Alt-Shift-X\", \"Ctrl-T\"),\n    exec: function(editor) { editor.transposeLetters(); },\n    multiSelectAction: function(editor) {editor.transposeSelections(1); },\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"touppercase\",\n    bindKey: bindKey(\"Ctrl-U\", \"Ctrl-U\"),\n    exec: function(editor) { editor.toUpperCase(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"tolowercase\",\n    bindKey: bindKey(\"Ctrl-Shift-U\", \"Ctrl-Shift-U\"),\n    exec: function(editor) { editor.toLowerCase(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"expandtoline\",\n    bindKey: bindKey(\"Ctrl-Shift-L\", \"Command-Shift-L\"),\n    exec: function(editor) {\n        var range = editor.selection.getRange();\n\n        range.start.column = range.end.column = 0;\n        range.end.row++;\n        editor.selection.setRange(range, false);\n    },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"joinlines\",\n    bindKey: bindKey(null, null),\n    exec: function(editor) {\n        var isBackwards = editor.selection.isBackwards();\n        var selectionStart = isBackwards ? editor.selection.getSelectionLead() : editor.selection.getSelectionAnchor();\n        var selectionEnd = isBackwards ? editor.selection.getSelectionAnchor() : editor.selection.getSelectionLead();\n        var firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length;\n        var selectedText = editor.session.doc.getTextRange(editor.selection.getRange());\n        var selectedCount = selectedText.replace(/\\n\\s*/, \" \").length;\n        var insertLine = editor.session.doc.getLine(selectionStart.row);\n\n        for (var i = selectionStart.row + 1; i <= selectionEnd.row + 1; i++) {\n            var curLine = lang.stringTrimLeft(lang.stringTrimRight(editor.session.doc.getLine(i)));\n            if (curLine.length !== 0) {\n                curLine = \" \" + curLine;\n            }\n            insertLine += curLine;\n        }\n\n        if (selectionEnd.row + 1 < (editor.session.doc.getLength() - 1)) {\n            // Don't insert a newline at the end of the document\n            insertLine += editor.session.doc.getNewLineCharacter();\n        }\n\n        editor.clearSelection();\n        editor.session.doc.replace(new Range(selectionStart.row, 0, selectionEnd.row + 2, 0), insertLine);\n\n        if (selectedCount > 0) {\n            // Select the text that was previously selected\n            editor.selection.moveCursorTo(selectionStart.row, selectionStart.column);\n            editor.selection.selectTo(selectionStart.row, selectionStart.column + selectedCount);\n        } else {\n            // If the joined line had something in it, start the cursor at that something\n            firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length > firstLineEndCol ? (firstLineEndCol + 1) : firstLineEndCol;\n            editor.selection.moveCursorTo(selectionStart.row, firstLineEndCol);\n        }\n    },\n    multiSelectAction: \"forEach\",\n    readOnly: true\n}, {\n    name: \"invertSelection\",\n    bindKey: bindKey(null, null),\n    exec: function(editor) {\n        var endRow = editor.session.doc.getLength() - 1;\n        var endCol = editor.session.doc.getLine(endRow).length;\n        var ranges = editor.selection.rangeList.ranges;\n        var newRanges = [];\n\n        // If multiple selections don't exist, rangeList will return 0 so replace with single range\n        if (ranges.length < 1) {\n            ranges = [editor.selection.getRange()];\n        }\n\n        for (var i = 0; i < ranges.length; i++) {\n            if (i == (ranges.length - 1)) {\n                // The last selection must connect to the end of the document, unless it already does\n                if (!(ranges[i].end.row === endRow && ranges[i].end.column === endCol)) {\n                    newRanges.push(new Range(ranges[i].end.row, ranges[i].end.column, endRow, endCol));\n                }\n            }\n\n            if (i === 0) {\n                // The first selection must connect to the start of the document, unless it already does\n                if (!(ranges[i].start.row === 0 && ranges[i].start.column === 0)) {\n                    newRanges.push(new Range(0, 0, ranges[i].start.row, ranges[i].start.column));\n                }\n            } else {\n                newRanges.push(new Range(ranges[i-1].end.row, ranges[i-1].end.column, ranges[i].start.row, ranges[i].start.column));\n            }\n        }\n\n        editor.exitMultiSelectMode();\n        editor.clearSelection();\n\n        for(var i = 0; i < newRanges.length; i++) {\n            editor.selection.addRange(newRanges[i], false);\n        }\n    },\n    readOnly: true,\n    scrollIntoView: \"none\"\n}];\n\n});\n"
  },
  {
    "path": "lib/ace/commands/incremental_search_commands.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\nvar config = require(\"../config\");\nvar oop = require(\"../lib/oop\");\nvar HashHandler = require(\"../keyboard/hash_handler\").HashHandler;\nvar occurStartCommand = require(\"./occur_commands\").occurStartCommand;\n\n// These commands can be installed in a normal key handler to start iSearch:\nexports.iSearchStartCommands = [{\n    name: \"iSearch\",\n    bindKey: {win: \"Ctrl-F\", mac: \"Command-F\"},\n    exec: function(editor, options) {\n        config.loadModule([\"core\", \"ace/incremental_search\"], function(e) {\n            var iSearch = e.iSearch = e.iSearch || new e.IncrementalSearch();\n            iSearch.activate(editor, options.backwards);\n            if (options.jumpToFirstMatch) iSearch.next(options);\n        });\n    },\n    readOnly: true\n}, {\n    name: \"iSearchBackwards\",\n    exec: function(editor, jumpToNext) { editor.execCommand('iSearch', {backwards: true}); },\n    readOnly: true\n}, {\n    name: \"iSearchAndGo\",\n    bindKey: {win: \"Ctrl-K\", mac: \"Command-G\"},\n    exec: function(editor, jumpToNext) { editor.execCommand('iSearch', {jumpToFirstMatch: true, useCurrentOrPrevSearch: true}); },\n    readOnly: true\n}, {\n    name: \"iSearchBackwardsAndGo\",\n    bindKey: {win: \"Ctrl-Shift-K\", mac: \"Command-Shift-G\"},\n    exec: function(editor) { editor.execCommand('iSearch', {jumpToFirstMatch: true, backwards: true, useCurrentOrPrevSearch: true}); },\n    readOnly: true\n}];\n\n// These commands are only available when incremental search mode is active:\nexports.iSearchCommands = [{\n    name: \"restartSearch\",\n    bindKey: {win: \"Ctrl-F\", mac: \"Command-F\"},\n    exec: function(iSearch) {\n        iSearch.cancelSearch(true);\n    }\n}, {\n    name: \"searchForward\",\n    bindKey: {win: \"Ctrl-S|Ctrl-K\", mac: \"Ctrl-S|Command-G\"},\n    exec: function(iSearch, options) {\n        options.useCurrentOrPrevSearch = true;\n        iSearch.next(options);\n    }\n}, {\n    name: \"searchBackward\",\n    bindKey: {win: \"Ctrl-R|Ctrl-Shift-K\", mac: \"Ctrl-R|Command-Shift-G\"},\n    exec: function(iSearch, options) {\n        options.useCurrentOrPrevSearch = true;\n        options.backwards = true;\n        iSearch.next(options);\n    }\n}, {\n    name: \"extendSearchTerm\",\n    exec: function(iSearch, string) {\n        iSearch.addString(string);\n    }\n}, {\n    name: \"extendSearchTermSpace\",\n    bindKey: \"space\",\n    exec: function(iSearch) { iSearch.addString(' '); }\n}, {\n    name: \"shrinkSearchTerm\",\n    bindKey: \"backspace\",\n    exec: function(iSearch) {\n        iSearch.removeChar();\n    }\n}, {\n    name: 'confirmSearch',\n    bindKey: 'return',\n    exec: function(iSearch) { iSearch.deactivate(); }\n}, {\n    name: 'cancelSearch',\n    bindKey: 'esc|Ctrl-G',\n    exec: function(iSearch) { iSearch.deactivate(true); }\n}, {\n    name: 'occurisearch',\n    bindKey: 'Ctrl-O',\n    exec: function(iSearch) {\n        var options = oop.mixin({}, iSearch.$options);\n        iSearch.deactivate();\n        occurStartCommand.exec(iSearch.$editor, options);\n    }\n}, {\n    name: \"yankNextWord\",\n    bindKey: \"Ctrl-w\",\n    exec: function(iSearch) {\n        var ed = iSearch.$editor,\n            range = ed.selection.getRangeOfMovements(function(sel) { sel.moveCursorWordRight(); }),\n            string = ed.session.getTextRange(range);\n        iSearch.addString(string);\n    }\n}, {\n    name: \"yankNextChar\",\n    bindKey: \"Ctrl-Alt-y\",\n    exec: function(iSearch) {\n        var ed = iSearch.$editor,\n            range = ed.selection.getRangeOfMovements(function(sel) { sel.moveCursorRight(); }),\n            string = ed.session.getTextRange(range);\n        iSearch.addString(string);\n    }\n}, {\n    name: 'recenterTopBottom',\n    bindKey: 'Ctrl-l',\n    exec: function(iSearch) { iSearch.$editor.execCommand('recenterTopBottom'); }\n}, {\n    name: 'selectAllMatches',\n    bindKey: 'Ctrl-space',\n    exec: function(iSearch) {\n        var ed = iSearch.$editor,\n            hl = ed.session.$isearchHighlight,\n            ranges = hl && hl.cache ? hl.cache\n                .reduce(function(ranges, ea) {\n                    return ranges.concat(ea ? ea : []); }, []) : [];\n        iSearch.deactivate(false);\n        ranges.forEach(ed.selection.addRange.bind(ed.selection));\n    }\n}, {\n    name: 'searchAsRegExp',\n    bindKey: 'Alt-r',\n    exec: function(iSearch) {\n        iSearch.convertNeedleToRegExp();\n    }\n}].map(function(cmd) {\n    cmd.readOnly = true;\n    cmd.isIncrementalSearchCommand = true;\n    cmd.scrollIntoView = \"animate-cursor\";\n    return cmd;\n});\n\nfunction IncrementalSearchKeyboardHandler(iSearch) {\n    this.$iSearch = iSearch;\n}\n\noop.inherits(IncrementalSearchKeyboardHandler, HashHandler);\n\n(function() {\n\n    this.attach = function(editor) {\n        var iSearch = this.$iSearch;\n        HashHandler.call(this, exports.iSearchCommands, editor.commands.platform);\n        this.$commandExecHandler = editor.commands.addEventListener('exec', function(e) {\n            if (!e.command.isIncrementalSearchCommand)\n                return iSearch.deactivate();\n            e.stopPropagation();\n            e.preventDefault();\n            var scrollTop = editor.session.getScrollTop();\n            var result = e.command.exec(iSearch, e.args || {});\n            editor.renderer.scrollCursorIntoView(null, 0.5);\n            editor.renderer.animateScrolling(scrollTop);\n            return result;\n        });\n    };\n\n    this.detach = function(editor) {\n        if (!this.$commandExecHandler) return;\n        editor.commands.removeEventListener('exec', this.$commandExecHandler);\n        delete this.$commandExecHandler;\n    };\n\n    var handleKeyboard$super = this.handleKeyboard;\n    this.handleKeyboard = function(data, hashId, key, keyCode) {\n        if (((hashId === 1/*ctrl*/ || hashId === 8/*command*/) && key === 'v')\n         || (hashId === 1/*ctrl*/ && key === 'y')) return null;\n        var cmd = handleKeyboard$super.call(this, data, hashId, key, keyCode);\n        if (cmd.command) { return cmd; }\n        if (hashId == -1) {\n            var extendCmd = this.commands.extendSearchTerm;\n            if (extendCmd) { return {command: extendCmd, args: key}; }\n        }\n        return false;\n    };\n\n}).call(IncrementalSearchKeyboardHandler.prototype);\n\n\nexports.IncrementalSearchKeyboardHandler = IncrementalSearchKeyboardHandler;\n\n});\n"
  },
  {
    "path": "lib/ace/commands/multi_select_commands.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\n// commands to enter multiselect mode\nexports.defaultCommands = [{\n    name: \"addCursorAbove\",\n    exec: function(editor) { editor.selectMoreLines(-1); },\n    bindKey: {win: \"Ctrl-Alt-Up\", mac: \"Ctrl-Alt-Up\"},\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"addCursorBelow\",\n    exec: function(editor) { editor.selectMoreLines(1); },\n    bindKey: {win: \"Ctrl-Alt-Down\", mac: \"Ctrl-Alt-Down\"},\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"addCursorAboveSkipCurrent\",\n    exec: function(editor) { editor.selectMoreLines(-1, true); },\n    bindKey: {win: \"Ctrl-Alt-Shift-Up\", mac: \"Ctrl-Alt-Shift-Up\"},\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"addCursorBelowSkipCurrent\",\n    exec: function(editor) { editor.selectMoreLines(1, true); },\n    bindKey: {win: \"Ctrl-Alt-Shift-Down\", mac: \"Ctrl-Alt-Shift-Down\"},\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selectMoreBefore\",\n    exec: function(editor) { editor.selectMore(-1); },\n    bindKey: {win: \"Ctrl-Alt-Left\", mac: \"Ctrl-Alt-Left\"},\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selectMoreAfter\",\n    exec: function(editor) { editor.selectMore(1); },\n    bindKey: {win: \"Ctrl-Alt-Right\", mac: \"Ctrl-Alt-Right\"},\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selectNextBefore\",\n    exec: function(editor) { editor.selectMore(-1, true); },\n    bindKey: {win: \"Ctrl-Alt-Shift-Left\", mac: \"Ctrl-Alt-Shift-Left\"},\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selectNextAfter\",\n    exec: function(editor) { editor.selectMore(1, true); },\n    bindKey: {win: \"Ctrl-Alt-Shift-Right\", mac: \"Ctrl-Alt-Shift-Right\"},\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"splitIntoLines\",\n    exec: function(editor) { editor.multiSelect.splitIntoLines(); },\n    bindKey: {win: \"Ctrl-Alt-L\", mac: \"Ctrl-Alt-L\"},\n    readOnly: true\n}, {\n    name: \"alignCursors\",\n    exec: function(editor) { editor.alignCursors(); },\n    bindKey: {win: \"Ctrl-Alt-A\", mac: \"Ctrl-Alt-A\"},\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"findAll\",\n    exec: function(editor) { editor.findAll(); },\n    bindKey: {win: \"Ctrl-Alt-K\", mac: \"Ctrl-Alt-G\"},\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}];\n\n// commands active only in multiselect mode\nexports.multiSelectCommands = [{\n    name: \"singleSelection\",\n    bindKey: \"esc\",\n    exec: function(editor) { editor.exitMultiSelectMode(); },\n    scrollIntoView: \"cursor\",\n    readOnly: true,\n    isAvailable: function(editor) {return editor && editor.inMultiSelectMode;}\n}];\n\nvar HashHandler = require(\"../keyboard/hash_handler\").HashHandler;\nexports.keyboardHandler = new HashHandler(exports.multiSelectCommands);\n\n});\n"
  },
  {
    "path": "lib/ace/commands/occur_commands.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\nvar config = require(\"../config\"),\n    Occur = require(\"../occur\").Occur;\n\n// These commands can be installed in a normal command handler to start occur:\nvar occurStartCommand = {\n    name: \"occur\",\n    exec: function(editor, options) {\n        var alreadyInOccur = !!editor.session.$occur;\n        var occurSessionActive = new Occur().enter(editor, options);\n        if (occurSessionActive && !alreadyInOccur)\n            OccurKeyboardHandler.installIn(editor);\n    },\n    readOnly: true\n};\n\nvar occurCommands = [{\n    name: \"occurexit\",\n    bindKey: 'esc|Ctrl-G',\n    exec: function(editor) {\n        var occur = editor.session.$occur;\n        if (!occur) return;\n        occur.exit(editor, {});\n        if (!editor.session.$occur) OccurKeyboardHandler.uninstallFrom(editor);\n    },\n    readOnly: true\n}, {\n    name: \"occuraccept\",\n    bindKey: 'enter',\n    exec: function(editor) {\n        var occur = editor.session.$occur;\n        if (!occur) return;\n        occur.exit(editor, {translatePosition: true});\n        if (!editor.session.$occur) OccurKeyboardHandler.uninstallFrom(editor);\n    },\n    readOnly: true\n}];\n\nvar HashHandler = require(\"../keyboard/hash_handler\").HashHandler;\nvar oop = require(\"../lib/oop\");\n\n\nfunction OccurKeyboardHandler() {}\n\noop.inherits(OccurKeyboardHandler, HashHandler);\n\n(function() {\n\n    this.isOccurHandler = true;\n\n    this.attach = function(editor) {\n        HashHandler.call(this, occurCommands, editor.commands.platform);\n        this.$editor = editor;\n    };\n\n    var handleKeyboard$super = this.handleKeyboard;\n    this.handleKeyboard = function(data, hashId, key, keyCode) {\n        var cmd = handleKeyboard$super.call(this, data, hashId, key, keyCode);\n        return (cmd && cmd.command) ? cmd : undefined;\n    };\n\n}).call(OccurKeyboardHandler.prototype);\n\nOccurKeyboardHandler.installIn = function(editor) {\n    var handler = new this();\n    editor.keyBinding.addKeyboardHandler(handler);\n    editor.commands.addCommands(occurCommands);\n};\n\nOccurKeyboardHandler.uninstallFrom = function(editor) {\n    editor.commands.removeCommands(occurCommands);\n    var handler = editor.getKeyboardHandler();\n    if (handler.isOccurHandler)\n        editor.keyBinding.removeKeyboardHandler(handler);\n};\n\nexports.occurStartCommand = occurStartCommand;\n\n});\n"
  },
  {
    "path": "lib/ace/config.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"no use strict\";\n\nvar lang = require(\"./lib/lang\");\nvar oop = require(\"./lib/oop\");\nvar net = require(\"./lib/net\");\nvar AppConfig = require(\"./lib/app_config\").AppConfig;\n\nmodule.exports = exports = new AppConfig();\n\nvar global = (function() {\n    return this || typeof window != \"undefined\" && window;\n})();\n\nvar options = {\n    packaged: false,\n    workerPath: null,\n    modePath: null,\n    themePath: null,\n    basePath: \"\",\n    suffix: \".js\",\n    $moduleUrls: {}\n};\n\nexports.get = function(key) {\n    if (!options.hasOwnProperty(key))\n        throw new Error(\"Unknown config key: \" + key);\n\n    return options[key];\n};\n\nexports.set = function(key, value) {\n    if (!options.hasOwnProperty(key))\n        throw new Error(\"Unknown config key: \" + key);\n\n    options[key] = value;\n};\n\nexports.all = function() {\n    return lang.copyObject(options);\n};\n\n// module loading\nexports.moduleUrl = function(name, component) {\n    if (options.$moduleUrls[name])\n        return options.$moduleUrls[name];\n\n    var parts = name.split(\"/\");\n    component = component || parts[parts.length - 2] || \"\";\n    \n    // todo make this configurable or get rid of '-'\n    var sep = component == \"snippets\" ? \"/\" : \"-\";\n    var base = parts[parts.length - 1];\n    if (component == \"worker\" && sep == \"-\") {\n        var re = new RegExp(\"^\" + component + \"[\\\\-_]|[\\\\-_]\" + component + \"$\", \"g\");\n        base = base.replace(re, \"\");\n    }\n\n    if ((!base || base == component) && parts.length > 1)\n        base = parts[parts.length - 2];\n    var path = options[component + \"Path\"];\n    if (path == null) {\n        path = options.basePath;\n    } else if (sep == \"/\") {\n        component = sep = \"\";\n    }\n    if (path && path.slice(-1) != \"/\")\n        path += \"/\";\n    return path + component + sep + base + this.get(\"suffix\");\n};\n\nexports.setModuleUrl = function(name, subst) {\n    return options.$moduleUrls[name] = subst;\n};\n\nexports.$loading = {};\nexports.loadModule = function(moduleName, onLoad) {\n    var module, moduleType;\n    if (Array.isArray(moduleName)) {\n        moduleType = moduleName[0];\n        moduleName = moduleName[1];\n    }\n\n    try {\n        module = require(moduleName);\n    } catch (e) {}\n    // require(moduleName) can return empty object if called after require([moduleName], callback)\n    if (module && !exports.$loading[moduleName])\n        return onLoad && onLoad(module);\n\n    if (!exports.$loading[moduleName])\n        exports.$loading[moduleName] = [];\n\n    exports.$loading[moduleName].push(onLoad);\n\n    if (exports.$loading[moduleName].length > 1)\n        return;\n\n    var afterLoad = function() {\n        require([moduleName], function(module) {\n            exports._emit(\"load.module\", {name: moduleName, module: module});\n            var listeners = exports.$loading[moduleName];\n            exports.$loading[moduleName] = null;\n            listeners.forEach(function(onLoad) {\n                onLoad && onLoad(module);\n            });\n        });\n    };\n\n    if (!exports.get(\"packaged\"))\n        return afterLoad();\n    net.loadScript(exports.moduleUrl(moduleName, moduleType), afterLoad);\n};\n\n// initialization\nfunction init(packaged) {\n    if (!global || !global.document)\n        return;\n    \n    options.packaged = packaged || require.packaged || module.packaged || (global.define && define.packaged);\n\n    var scriptOptions = {};\n    var scriptUrl = \"\";\n\n    // Use currentScript.ownerDocument in case this file was loaded from imported document. (HTML Imports)\n    var currentScript = (document.currentScript || document._currentScript ); // native or polyfill\n    var currentDocument = currentScript && currentScript.ownerDocument || document;\n    \n    var scripts = currentDocument.getElementsByTagName(\"script\");\n    for (var i=0; i<scripts.length; i++) {\n        var script = scripts[i];\n\n        var src = script.src || script.getAttribute(\"src\");\n        if (!src)\n            continue;\n\n        var attributes = script.attributes;\n        for (var j=0, l=attributes.length; j < l; j++) {\n            var attr = attributes[j];\n            if (attr.name.indexOf(\"data-ace-\") === 0) {\n                scriptOptions[deHyphenate(attr.name.replace(/^data-ace-/, \"\"))] = attr.value;\n            }\n        }\n\n        var m = src.match(/^(.*)\\/ace(\\-\\w+)?\\.js(\\?|$)/);\n        if (m)\n            scriptUrl = m[1];\n    }\n\n    if (scriptUrl) {\n        scriptOptions.base = scriptOptions.base || scriptUrl;\n        scriptOptions.packaged = true;\n    }\n\n    scriptOptions.basePath = scriptOptions.base;\n    scriptOptions.workerPath = scriptOptions.workerPath || scriptOptions.base;\n    scriptOptions.modePath = scriptOptions.modePath || scriptOptions.base;\n    scriptOptions.themePath = scriptOptions.themePath || scriptOptions.base;\n    delete scriptOptions.base;\n\n    for (var key in scriptOptions)\n        if (typeof scriptOptions[key] !== \"undefined\")\n            exports.set(key, scriptOptions[key]);\n}\n\nexports.init = init;\n\nfunction deHyphenate(str) {\n    return str.replace(/-(.)/g, function(m, m1) { return m1.toUpperCase(); });\n}\n\n});\n"
  },
  {
    "path": "lib/ace/config_test.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\nif (typeof process !== \"undefined\") {\n    require(\"amd-loader\");\n}\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar config = require(\"./config\");\nvar assert = require(\"./test/assertions\");\n\nmodule.exports = {\n\n    \"test: path resolution\" : function() {\n        config.set(\"packaged\", \"true\");\n        var url = config.moduleUrl(\"kr_theme\", \"theme\");\n        assert.equal(url, \"theme-kr_theme.js\");\n        \n        config.set(\"basePath\", \"a/b\");\n        url = config.moduleUrl(\"m/theme\", \"theme\");\n        assert.equal(url, \"a/b/theme-m.js\");\n        \n        url = config.moduleUrl(\"m/theme\", \"ext\");\n        assert.equal(url, \"a/b/ext-theme.js\");\n        \n        config.set(\"workerPath\", \"c/\");\n        url = config.moduleUrl(\"foo/1\", \"worker\");\n        assert.equal(url, \"c/worker-1.js\");\n        \n        config.setModuleUrl(\"foo/1\", \"a/b1.js\");\n        url = config.moduleUrl(\"foo/1\", \"theme\");\n        assert.equal(url, \"a/b1.js\");\n        \n        url = config.moduleUrl(\"snippets/js\");\n        assert.equal(url, \"a/b/snippets/js.js\");\n        \n        config.setModuleUrl(\"snippets/js\", \"_.js\");\n        url = config.moduleUrl(\"snippets/js\");\n        assert.equal(url, \"_.js\");\n        \n        url = config.moduleUrl(\"ace/ext/textarea\");\n        assert.equal(url, \"a/b/ext-textarea.js\");\n        \n        assert.equal();\n    },\n    \"test: define options\" : function() {\n        var o = {};\n        config.defineOptions(o, \"test_object\", {\n            opt1: {\n                set: function(val) {\n                    this.x = val;\n                },\n                value: 7\n            },\n            initialValue: {\n                set: function(val) {\n                    this.x = val;\n                },\n                initialValue: 8\n            },\n            opt2: {\n                get: function(val) {\n                    return this.x;\n                }\n            },\n            forwarded: \"model\"\n        });\n        o.model = {};\n        config.defineOptions(o.model, \"model\", {\n            forwarded: {value: 1}\n        });\n        \n        config.resetOptions(o);\n        config.resetOptions(o.model);\n        assert.equal(o.getOption(\"opt1\"), 7);\n        assert.equal(o.getOption(\"opt2\"), 7);\n        o.setOption(\"opt1\", 8);\n        assert.equal(o.getOption(\"opt1\"), 8);\n        assert.equal(o.getOption(\"opt2\"), 8);\n        \n        assert.equal(o.getOption(\"forwarded\"), 1);\n        \n        assert.equal(o.getOption(\"new\"), undefined);\n        o.setOption(\"new\", 0);\n        assert.equal(o.getOption(\"new\"), undefined);\n        \n\n        assert.equal(o.getOption(\"initialValue\"), 8);\n        o.setOption(\"initialValue\", 7);\n        assert.equal(o.getOption(\"opt2\"), 7);\n        \n        config.setDefaultValues(\"test_object\", {\n            opt1: 1,\n            forwarded: 2\n        });\n        config.resetOptions(o);\n        assert.equal(o.getOption(\"opt1\"), 1);\n        assert.equal(o.getOption(\"forwarded\"), 2);\n    }\n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main) {\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n}\n"
  },
  {
    "path": "lib/ace/css/editor.css",
    "content": ".ace_editor {\n    position: relative;\n    overflow: hidden;\n    font: 12px/normal 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace;\n    direction: ltr;\n    text-align: left;\n    -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\n.ace_scroller {\n    position: absolute;\n    overflow: hidden;\n    top: 0;\n    bottom: 0;\n    background-color: inherit;\n    -ms-user-select: none;\n    -moz-user-select: none;\n    -webkit-user-select: none;\n    user-select: none;\n    cursor: text;\n}\n\n.ace_content {\n    position: absolute;\n    -moz-box-sizing: border-box;\n    -webkit-box-sizing: border-box;\n    box-sizing: border-box;\n    min-width: 100%;\n}\n\n.ace_dragging .ace_scroller:before{\n    position: absolute;\n    top: 0;\n    left: 0;\n    right: 0;\n    bottom: 0;\n    content: '';\n    background: rgba(250, 250, 250, 0.01);\n    z-index: 1000;\n}\n.ace_dragging.ace_dark .ace_scroller:before{\n    background: rgba(0, 0, 0, 0.01);\n}\n\n.ace_selecting, .ace_selecting * {\n    cursor: text !important;\n}\n\n.ace_gutter {\n    position: absolute;\n    overflow : hidden;\n    width: auto;\n    top: 0;\n    bottom: 0;\n    left: 0;\n    cursor: default;\n    z-index: 4;\n    -ms-user-select: none;\n    -moz-user-select: none;\n    -webkit-user-select: none;\n    user-select: none;\n}\n\n.ace_gutter-active-line {\n    position: absolute;\n    left: 0;\n    right: 0;\n}\n\n.ace_scroller.ace_scroll-left {\n    box-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;\n}\n\n.ace_gutter-cell {\n    padding-left: 19px;\n    padding-right: 6px;\n    background-repeat: no-repeat;\n}\n\n.ace_gutter-cell.ace_error {\n    background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==\");\n    background-repeat: no-repeat;\n    background-position: 2px center;\n}\n\n.ace_gutter-cell.ace_warning {\n    background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==\");\n    background-position: 2px center;\n}\n\n.ace_gutter-cell.ace_info {\n    background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=\");\n    background-position: 2px center;\n}\n.ace_dark .ace_gutter-cell.ace_info {\n    background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC\");\n}\n\n.ace_scrollbar {\n    position: absolute;\n    right: 0;\n    bottom: 0;\n    z-index: 6;\n}\n\n.ace_scrollbar-inner {\n    position: absolute;\n    cursor: text;\n    left: 0;\n    top: 0;\n}\n\n.ace_scrollbar-v{\n    overflow-x: hidden;\n    overflow-y: scroll;\n    top: 0;\n}\n\n.ace_scrollbar-h {\n    overflow-x: scroll;\n    overflow-y: hidden;\n    left: 0;\n}\n\n.ace_print-margin {\n    position: absolute;\n    height: 100%;\n}\n\n.ace_text-input {\n    position: absolute;\n    z-index: 0;\n    width: 0.5em;\n    height: 1em;\n    opacity: 0;\n    background: transparent;\n    -moz-appearance: none;\n    appearance: none;\n    border: none;\n    resize: none;\n    outline: none;\n    overflow: hidden;\n    font: inherit;\n    padding: 0 1px;\n    margin: 0 -1px;\n    text-indent: -1em;\n    -ms-user-select: text;\n    -moz-user-select: text;\n    -webkit-user-select: text;\n    user-select: text;\n    /*with `pre-line` chrome inserts &nbsp; instead of space*/\n    white-space: pre!important;\n}\n\n.ace_text-input.ace_composition {\n    background: inherit;\n    color: inherit;\n    z-index: 1000;\n    opacity: 1;\n    text-indent: 0;\n}\n\n.ace_layer {\n    z-index: 1;\n    position: absolute;\n    overflow: hidden;\n    /* workaround for chrome bug https://github.com/ajaxorg/ace/issues/2312*/\n    word-wrap: normal;\n    white-space: pre;\n    height: 100%;\n    width: 100%;\n    -moz-box-sizing: border-box;\n    -webkit-box-sizing: border-box;\n    box-sizing: border-box;\n    /* setting pointer-events: auto; on node under the mouse, which changes\n        during scroll, will break mouse wheel scrolling in Safari */\n    pointer-events: none;\n}\n\n.ace_gutter-layer {\n    position: relative;\n    width: auto;\n    text-align: right;\n    pointer-events: auto;\n}\n\n.ace_text-layer {\n    font: inherit !important;\n}\n\n.ace_cjk {\n    display: inline-block;\n    text-align: center;\n}\n\n.ace_cursor-layer {\n    z-index: 4;\n}\n\n.ace_cursor {\n    z-index: 4;\n    position: absolute;\n    -moz-box-sizing: border-box;\n    -webkit-box-sizing: border-box;\n    box-sizing: border-box;\n    border-left: 2px solid;\n    /* workaround for smooth cursor repaintng whole screen in chrome */\n    transform: translatez(0);\n}\n\n.ace_multiselect .ace_cursor {\n    border-left-width: 1px;\n}\n\n.ace_slim-cursors .ace_cursor {\n    border-left-width: 1px;\n}\n\n.ace_overwrite-cursors .ace_cursor {\n    border-left-width: 0;\n    border-bottom: 1px solid;\n}\n\n.ace_hidden-cursors .ace_cursor {\n    opacity: 0.2;\n}\n\n.ace_smooth-blinking .ace_cursor {\n    -webkit-transition: opacity 0.18s;\n            transition: opacity 0.18s;\n}\n\n.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {\n    position: absolute;\n    z-index: 3;\n}\n\n.ace_marker-layer .ace_selection {\n    position: absolute;\n    z-index: 5;\n}\n\n.ace_marker-layer .ace_bracket {\n    position: absolute;\n    z-index: 6;\n}\n\n.ace_marker-layer .ace_active-line {\n    position: absolute;\n    z-index: 2;\n}\n\n.ace_marker-layer .ace_selected-word {\n    position: absolute;\n    z-index: 4;\n    -moz-box-sizing: border-box;\n    -webkit-box-sizing: border-box;\n    box-sizing: border-box;\n}\n\n.ace_line .ace_fold {\n    -moz-box-sizing: border-box;\n    -webkit-box-sizing: border-box;\n    box-sizing: border-box;\n\n    display: inline-block;\n    height: 11px;\n    margin-top: -2px;\n    vertical-align: middle;\n\n    background-image:\n        url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\"),\n        url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\");\n    background-repeat: no-repeat, repeat-x;\n    background-position: center center, top left;\n    color: transparent;\n\n    border: 1px solid black;\n    border-radius: 2px;\n\n    cursor: pointer;\n    pointer-events: auto;\n}\n\n.ace_dark .ace_fold {\n}\n\n.ace_fold:hover{\n    background-image:\n        url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\"),\n        url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\");\n}\n\n.ace_tooltip {\n    background-color: #FFF;\n    background-image: -webkit-linear-gradient(top, transparent, rgba(0, 0, 0, 0.1));\n    background-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));\n    border: 1px solid gray;\n    border-radius: 1px;\n    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\n    color: black;\n    max-width: 100%;\n    padding: 3px 4px;\n    position: fixed;\n    z-index: 999999;\n    -moz-box-sizing: border-box;\n    -webkit-box-sizing: border-box;\n    box-sizing: border-box;\n    cursor: default;\n    white-space: pre;\n    word-wrap: break-word;\n    line-height: normal;\n    font-style: normal;\n    font-weight: normal;\n    letter-spacing: normal;\n    pointer-events: none;\n}\n\n.ace_folding-enabled > .ace_gutter-cell {\n    padding-right: 13px;\n}\n\n.ace_fold-widget {\n    -moz-box-sizing: border-box;\n    -webkit-box-sizing: border-box;\n    box-sizing: border-box;\n\n    margin: 0 -12px 0 1px;\n    display: none;\n    width: 11px;\n    vertical-align: top;\n\n    background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\");\n    background-repeat: no-repeat;\n    background-position: center;\n\n    border-radius: 3px;\n    \n    border: 1px solid transparent;\n    cursor: pointer;\n}\n\n.ace_folding-enabled .ace_fold-widget {\n    display: inline-block;   \n}\n\n.ace_fold-widget.ace_end {\n    background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\");\n}\n\n.ace_fold-widget.ace_closed {\n    background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\");\n}\n\n.ace_fold-widget:hover {\n    border: 1px solid rgba(0, 0, 0, 0.3);\n    background-color: rgba(255, 255, 255, 0.2);\n    box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\n}\n\n.ace_fold-widget:active {\n    border: 1px solid rgba(0, 0, 0, 0.4);\n    background-color: rgba(0, 0, 0, 0.05);\n    box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\n}\n/**\n * Dark version for fold widgets\n */\n.ace_dark .ace_fold-widget {\n    background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\");\n}\n.ace_dark .ace_fold-widget.ace_end {\n    background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\");\n}\n.ace_dark .ace_fold-widget.ace_closed {\n    background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\");\n}\n.ace_dark .ace_fold-widget:hover {\n    box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\n    background-color: rgba(255, 255, 255, 0.1);\n}\n.ace_dark .ace_fold-widget:active {\n    box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\n}\n\n.ace_fold-widget.ace_invalid {\n    background-color: #FFB4B4;\n    border-color: #DE5555;\n}\n\n.ace_fade-fold-widgets .ace_fold-widget {\n    -webkit-transition: opacity 0.4s ease 0.05s;\n            transition: opacity 0.4s ease 0.05s;\n    opacity: 0;\n}\n\n.ace_fade-fold-widgets:hover .ace_fold-widget {\n    -webkit-transition: opacity 0.05s ease 0.05s;\n            transition: opacity 0.05s ease 0.05s;\n    opacity:1;\n}\n\n.ace_underline {\n    text-decoration: underline;\n}\n\n.ace_bold {\n    font-weight: bold;\n}\n\n.ace_nobold .ace_bold {\n    font-weight: normal;\n}\n\n.ace_italic {\n    font-style: italic;\n}\n\n\n.ace_error-marker {\n    background-color: rgba(255, 0, 0,0.2);\n    position: absolute;\n    z-index: 9;\n}\n\n.ace_highlight-marker {\n    background-color: rgba(255, 255, 0,0.2);\n    position: absolute;\n    z-index: 8;\n}\n\n/*\nstyles = []\nfor (var i = 1; i < 16; i++) {\n    styles.push(\".ace_br\" + i + \"{\" + (\n        [\"top-left\", \"top-right\", \"bottom-right\", \"bottom-left\"]\n    ).map(function(x, j) {\n        return i & (1<<j) ? \"border-\" + x + \"-radius: 3px;\" : \"\" \n    }).filter(Boolean).join(\" \") + \"}\")\n}\nstyles.join(\"\\n\")\n*/\n.ace_br1 {border-top-left-radius    : 3px;}\n.ace_br2 {border-top-right-radius   : 3px;}\n.ace_br3 {border-top-left-radius    : 3px; border-top-right-radius:    3px;}\n.ace_br4 {border-bottom-right-radius: 3px;}\n.ace_br5 {border-top-left-radius    : 3px; border-bottom-right-radius: 3px;}\n.ace_br6 {border-top-right-radius   : 3px; border-bottom-right-radius: 3px;}\n.ace_br7 {border-top-left-radius    : 3px; border-top-right-radius:    3px; border-bottom-right-radius: 3px;}\n.ace_br8 {border-bottom-left-radius : 3px;}\n.ace_br9 {border-top-left-radius    : 3px; border-bottom-left-radius:  3px;}\n.ace_br10{border-top-right-radius   : 3px; border-bottom-left-radius:  3px;}\n.ace_br11{border-top-left-radius    : 3px; border-top-right-radius:    3px; border-bottom-left-radius:  3px;}\n.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius:  3px;}\n.ace_br13{border-top-left-radius    : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius:  3px;}\n.ace_br14{border-top-right-radius   : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius:  3px;}\n.ace_br15{border-top-left-radius    : 3px; border-top-right-radius:    3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\n\n.ace_text-input-ios {\n  position: absolute !important;\n  top: -100000px !important;\n  left: -100000px !important;\n}\n"
  },
  {
    "path": "lib/ace/document.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\n\n/**\n * Contains the text of the document. Document can be attached to several [[EditSession `EditSession`]]s. \n * At its core, `Document`s are just an array of strings, with each row in the document matching up to the array index.\n *\n * @class Document\n **/\n\n/**\n *\n * Creates a new `Document`. If `text` is included, the `Document` contains those strings; otherwise, it's empty.\n * @param {String | Array} text The starting text\n * @constructor\n **/\n\nvar Document = function(textOrLines) {\n    this.$lines = [\"\"];\n\n    // There has to be one line at least in the document. If you pass an empty\n    // string to the insert function, nothing will happen. Workaround.\n    if (textOrLines.length === 0) {\n        this.$lines = [\"\"];\n    } else if (Array.isArray(textOrLines)) {\n        this.insertMergedLines({row: 0, column: 0}, textOrLines);\n    } else {\n        this.insert({row: 0, column:0}, textOrLines);\n    }\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n\n    /**\n     * Replaces all the lines in the current `Document` with the value of `text`.\n     *\n     * @param {String} text The text to use\n     **/\n    this.setValue = function(text) {\n        var len = this.getLength() - 1;\n        this.remove(new Range(0, 0, len, this.getLine(len).length));\n        this.insert({row: 0, column: 0}, text);\n    };\n\n    /**\n     * Returns all the lines in the document as a single string, joined by the new line character.\n     **/\n    this.getValue = function() {\n        return this.getAllLines().join(this.getNewLineCharacter());\n    };\n\n    /** \n     * Creates a new `Anchor` to define a floating point in the document.\n     * @param {Number} row The row number to use\n     * @param {Number} column The column number to use\n     *\n     **/\n    this.createAnchor = function(row, column) {\n        return new Anchor(this, row, column);\n    };\n\n    /** \n     * Splits a string of text on any newline (`\\n`) or carriage-return (`\\r`) characters.\n     *\n     * @method $split\n     * @param {String} text The text to work with\n     * @returns {String} A String array, with each index containing a piece of the original `text` string.\n     *\n     **/\n\n    // check for IE split bug\n    if (\"aaa\".split(/a/).length === 0) {\n        this.$split = function(text) {\n            return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n        };\n    } else {\n        this.$split = function(text) {\n            return text.split(/\\r\\n|\\r|\\n/);\n        };\n    }\n\n\n    this.$detectNewLine = function(text) {\n        var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n        this.$autoNewLine = match ? match[1] : \"\\n\";\n        this._signal(\"changeNewLineMode\");\n    };\n\n    /**\n     * Returns the newline character that's being used, depending on the value of `newLineMode`. \n     * @returns {String} If `newLineMode == windows`, `\\r\\n` is returned.  \n     *  If `newLineMode == unix`, `\\n` is returned.  \n     *  If `newLineMode == auto`, the value of `autoNewLine` is returned.\n     *\n     **/\n    this.getNewLineCharacter = function() {\n        switch (this.$newLineMode) {\n          case \"windows\":\n            return \"\\r\\n\";\n          case \"unix\":\n            return \"\\n\";\n          default:\n            return this.$autoNewLine || \"\\n\";\n        }\n    };\n\n    this.$autoNewLine = \"\";\n    this.$newLineMode = \"auto\";\n    /**\n     * [Sets the new line mode.]{: #Document.setNewLineMode.desc}\n     * @param {String} newLineMode [The newline mode to use; can be either `windows`, `unix`, or `auto`]{: #Document.setNewLineMode.param}\n     *\n     **/\n    this.setNewLineMode = function(newLineMode) {\n        if (this.$newLineMode === newLineMode)\n            return;\n\n        this.$newLineMode = newLineMode;\n        this._signal(\"changeNewLineMode\");\n    };\n\n    /**\n     * [Returns the type of newlines being used; either `windows`, `unix`, or `auto`]{: #Document.getNewLineMode}\n     * @returns {String}\n     **/\n    this.getNewLineMode = function() {\n        return this.$newLineMode;\n    };\n\n    /**\n     * Returns `true` if `text` is a newline character (either `\\r\\n`, `\\r`, or `\\n`).\n     * @param {String} text The text to check\n     *\n     **/\n    this.isNewLine = function(text) {\n        return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n    };\n\n    /**\n     * Returns a verbatim copy of the given line as it is in the document\n     * @param {Number} row The row index to retrieve\n     *\n     **/\n    this.getLine = function(row) {\n        return this.$lines[row] || \"\";\n    };\n\n    /**\n     * Returns an array of strings of the rows between `firstRow` and `lastRow`. This function is inclusive of `lastRow`.\n     * @param {Number} firstRow The first row index to retrieve\n     * @param {Number} lastRow The final row index to retrieve\n     *\n     **/\n    this.getLines = function(firstRow, lastRow) {\n        return this.$lines.slice(firstRow, lastRow + 1);\n    };\n\n    /**\n     * Returns all lines in the document as string array.\n     **/\n    this.getAllLines = function() {\n        return this.getLines(0, this.getLength());\n    };\n\n    /**\n     * Returns the number of rows in the document.\n     **/\n    this.getLength = function() {\n        return this.$lines.length;\n    };\n\n    /**\n     * Returns all the text within `range` as a single string.\n     * @param {Range} range The range to work with.\n     * \n     * @returns {String}\n     **/\n    this.getTextRange = function(range) {\n        return this.getLinesForRange(range).join(this.getNewLineCharacter());\n    };\n    \n    /**\n     * Returns all the text within `range` as an array of lines.\n     * @param {Range} range The range to work with.\n     * \n     * @returns {Array}\n     **/\n    this.getLinesForRange = function(range) {\n        var lines;\n        if (range.start.row === range.end.row) {\n            // Handle a single-line range.\n            lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n        } else {\n            // Handle a multi-line range.\n            lines = this.getLines(range.start.row, range.end.row);\n            lines[0] = (lines[0] || \"\").substring(range.start.column);\n            var l = lines.length - 1;\n            if (range.end.row - range.start.row == l)\n                lines[l] = lines[l].substring(0, range.end.column);\n        }\n        return lines;\n    };\n\n    // Deprecated methods retained for backwards compatibility.\n    this.insertLines = function(row, lines) {\n        console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n        return this.insertFullLines(row, lines);\n    };\n    this.removeLines = function(firstRow, lastRow) {\n        console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n        return this.removeFullLines(firstRow, lastRow);\n    };\n    this.insertNewLine = function(position) {\n        console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n        return this.insertMergedLines(position, [\"\", \"\"]);\n    };\n\n    /**\n     * Inserts a block of `text` at the indicated `position`.\n     * @param {Object} position The position to start inserting at; it's an object that looks like `{ row: row, column: column}`\n     * @param {String} text A chunk of text to insert\n     * @returns {Object} The position ({row, column}) of the last line of `text`. If the length of `text` is 0, this function simply returns `position`. \n     *\n     **/\n    this.insert = function(position, text) {\n        // Only detect new lines if the document has no line break yet.\n        if (this.getLength() <= 1)\n            this.$detectNewLine(text);\n        \n        return this.insertMergedLines(position, this.$split(text));\n    };\n    \n    /**\n     * Inserts `text` into the `position` at the current row. This method also triggers the `\"change\"` event.\n     * \n     * This differs from the `insert` method in two ways:\n     *   1. This does NOT handle newline characters (single-line text only).\n     *   2. This is faster than the `insert` method for single-line text insertions.\n     * \n     * @param {Object} position The position to insert at; it's an object that looks like `{ row: row, column: column}`\n     * @param {String} text A chunk of text\n     * @returns {Object} Returns an object containing the final row and column, like this:  \n     *     ```\n     *     {row: endRow, column: 0}\n     *     ```\n     **/\n    this.insertInLine = function(position, text) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = this.pos(position.row, position.column + text.length);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: [text]\n        }, true);\n        \n        return this.clonePos(end);\n    };\n    \n    this.clippedPos = function(row, column) {\n        var length = this.getLength();\n        if (row === undefined) {\n            row = length;\n        } else if (row < 0) {\n            row = 0;\n        } else if (row >= length) {\n            row = length - 1;\n            column = undefined;\n        }\n        var line = this.getLine(row);\n        if (column == undefined)\n            column = line.length;\n        column = Math.min(Math.max(column, 0), line.length);\n        return {row: row, column: column};\n    };\n    \n    this.clonePos = function(pos) {\n        return {row: pos.row, column: pos.column};\n    };\n    \n    this.pos = function(row, column) {\n        return {row: row, column: column};\n    };\n    \n    this.$clipPosition = function(position) {\n        var length = this.getLength();\n        if (position.row >= length) {\n            position.row = Math.max(0, length - 1);\n            position.column = this.getLine(length - 1).length;\n        } else {\n            position.row = Math.max(0, position.row);\n            position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n        }\n        return position;\n    };\n\n    /**\n     * Fires whenever the document changes.\n     *\n     * Several methods trigger different `\"change\"` events. Below is a list of each action type, followed by each property that's also available:\n     *\n     *  * `\"insert\"`\n     *    * `range`: the [[Range]] of the change within the document\n     *    * `lines`: the lines being added\n     *  * `\"remove\"`\n     *    * `range`: the [[Range]] of the change within the document\n     *    * `lines`: the lines being removed\n     *\n     * @event change\n     * @param {Object} e Contains at least one property called `\"action\"`. `\"action\"` indicates the action that triggered the change. Each action also has a set of additional properties.\n     *\n     **/\n    \n    /**\n     * Inserts the elements in `lines` into the document as full lines (does not merge with existing line), starting at the row index given by `row`. This method also triggers the `\"change\"` event.\n     * @param {Number} row The index of the row to insert at\n     * @param {Array} lines An array of strings\n     * @returns {Object} Contains the final row and column, like this:  \n     *   ```\n     *   {row: endRow, column: 0}\n     *   ```  \n     *   If `lines` is empty, this function returns an object containing the current row, and column, like this:  \n     *   ``` \n     *   {row: row, column: 0}\n     *   ```\n     *\n     **/\n    this.insertFullLines = function(row, lines) {\n        // Clip to document.\n        // Allow one past the document end.\n        row = Math.min(Math.max(row, 0), this.getLength());\n        \n        // Calculate insertion point.\n        var column = 0;\n        if (row < this.getLength()) {\n            // Insert before the specified row.\n            lines = lines.concat([\"\"]);\n            column = 0;\n        } else {\n            // Insert after the last row in the document.\n            lines = [\"\"].concat(lines);\n            row--;\n            column = this.$lines[row].length;\n        }\n        \n        // Insert.\n        this.insertMergedLines({row: row, column: column}, lines);\n    };\n\n    /**\n     * Inserts the elements in `lines` into the document, starting at the position index given by `row`. This method also triggers the `\"change\"` event.\n     * @param {Number} row The index of the row to insert at\n     * @param {Array} lines An array of strings\n     * @returns {Object} Contains the final row and column, like this:  \n     *   ```\n     *   {row: endRow, column: 0}\n     *   ```  \n     *   If `lines` is empty, this function returns an object containing the current row, and column, like this:  \n     *   ``` \n     *   {row: row, column: 0}\n     *   ```\n     *\n     **/    \n    this.insertMergedLines = function(position, lines) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = {\n            row: start.row + lines.length - 1,\n            column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n        };\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: lines\n        });\n        \n        return this.clonePos(end);\n    };\n\n    /**\n     * Removes the `range` from the document.\n     * @param {Range} range A specified Range to remove\n     * @returns {Object} Returns the new `start` property of the range, which contains `startRow` and `startColumn`. If `range` is empty, this function returns the unmodified value of `range.start`.\n     *\n     **/\n    this.remove = function(range) {\n        var start = this.clippedPos(range.start.row, range.start.column);\n        var end = this.clippedPos(range.end.row, range.end.column);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        });\n        return this.clonePos(start);\n    };\n\n    /**\n     * Removes the specified columns from the `row`. This method also triggers a `\"change\"` event.\n     * @param {Number} row The row to remove from\n     * @param {Number} startColumn The column to start removing at \n     * @param {Number} endColumn The column to stop removing at\n     * @returns {Object} Returns an object containing `startRow` and `startColumn`, indicating the new row and column values.<br/>If `startColumn` is equal to `endColumn`, this function returns nothing.\n     *\n     **/\n    this.removeInLine = function(row, startColumn, endColumn) {\n        var start = this.clippedPos(row, startColumn);\n        var end = this.clippedPos(row, endColumn);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        }, true);\n        \n        return this.clonePos(start);\n    };\n\n    /**\n     * Removes a range of full lines. This method also triggers the `\"change\"` event.\n     * @param {Number} firstRow The first row to be removed\n     * @param {Number} lastRow The last row to be removed\n     * @returns {[String]} Returns all the removed lines.\n     *\n     **/\n    this.removeFullLines = function(firstRow, lastRow) {\n        // Clip to document.\n        firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n        lastRow  = Math.min(Math.max(0, lastRow ), this.getLength() - 1);\n        \n        // Calculate deletion range.\n        // Delete the ending new line unless we're at the end of the document.\n        // If we're at the end of the document, delete the starting new line.\n        var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n        var deleteLastNewLine  = lastRow  < this.getLength() - 1;\n        var startRow = ( deleteFirstNewLine ? firstRow - 1                  : firstRow                    );\n        var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0                           );\n        var endRow   = ( deleteLastNewLine  ? lastRow + 1                   : lastRow                     );\n        var endCol   = ( deleteLastNewLine  ? 0                             : this.getLine(endRow).length ); \n        var range = new Range(startRow, startCol, endRow, endCol);\n        \n        // Store delelted lines with bounding newlines ommitted (maintains previous behavior).\n        var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n        \n        this.applyDelta({\n            start: range.start,\n            end: range.end,\n            action: \"remove\",\n            lines: this.getLinesForRange(range)\n        });\n        \n        // Return the deleted lines.\n        return deletedLines;\n    };\n\n    /**\n     * Removes the new line between `row` and the row immediately following it. This method also triggers the `\"change\"` event.\n     * @param {Number} row The row to check\n     *\n     **/\n    this.removeNewLine = function(row) {\n        if (row < this.getLength() - 1 && row >= 0) {\n            this.applyDelta({\n                start: this.pos(row, this.getLine(row).length),\n                end: this.pos(row + 1, 0),\n                action: \"remove\",\n                lines: [\"\", \"\"]\n            });\n        }\n    };\n\n    /**\n     * Replaces a range in the document with the new `text`.\n     * @param {Range} range A specified Range to replace\n     * @param {String} text The new text to use as a replacement\n     * @returns {Object} Returns an object containing the final row and column, like this:\n     *     {row: endRow, column: 0}\n     * If the text and range are empty, this function returns an object containing the current `range.start` value.\n     * If the text is the exact same as what currently exists, this function returns an object containing the current `range.end` value.\n     *\n     **/\n    this.replace = function(range, text) {\n        if (!(range instanceof Range))\n            range = Range.fromPoints(range.start, range.end);\n        if (text.length === 0 && range.isEmpty())\n            return range.start;\n\n        // Shortcut: If the text we want to insert is the same as it is already\n        // in the document, we don't have to replace anything.\n        if (text == this.getTextRange(range))\n            return range.end;\n\n        this.remove(range);\n        var end;\n        if (text) {\n            end = this.insert(range.start, text);\n        }\n        else {\n            end = range.start;\n        }\n        \n        return end;\n    };\n\n    /**\n     * Applies all changes in `deltas` to the document.\n     * @param {Array} deltas An array of delta objects (can include \"insert\" and \"remove\" actions)\n     **/\n    this.applyDeltas = function(deltas) {\n        for (var i=0; i<deltas.length; i++) {\n            this.applyDelta(deltas[i]);\n        }\n    };\n    \n    /**\n     * Reverts all changes in `deltas` from the document.\n     * @param {Array} deltas An array of delta objects (can include \"insert\" and \"remove\" actions)\n     **/\n    this.revertDeltas = function(deltas) {\n        for (var i=deltas.length-1; i>=0; i--) {\n            this.revertDelta(deltas[i]);\n        }\n    };\n    \n    /**\n     * Applies `delta` to the document.\n     * @param {Object} delta A delta object (can include \"insert\" and \"remove\" actions)\n     **/\n    this.applyDelta = function(delta, doNotValidate) {\n        var isInsert = delta.action == \"insert\";\n        // An empty range is a NOOP.\n        if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n            : !Range.comparePoints(delta.start, delta.end)) {\n            return;\n        }\n        \n        if (isInsert && delta.lines.length > 20000)\n            this.$splitAndapplyLargeDelta(delta, 20000);\n        \n        // Apply.\n        applyDelta(this.$lines, delta, doNotValidate);\n        this._signal(\"change\", delta);\n    };\n    \n    this.$splitAndapplyLargeDelta = function(delta, MAX) {\n        // Split large insert deltas. This is necessary because:\n        //    1. We need to support splicing delta lines into the document via $lines.splice.apply(...)\n        //    2. fn.apply() doesn't work for a large number of params. The smallest threshold is on chrome 40 ~42000.\n        // we use 20000 to leave some space for actual stack\n        // \n        // To Do: Ideally we'd be consistent and also split 'delete' deltas. We don't do this now, because delete\n        //        delta handling is too slow. If we make delete delta handling faster we can split all large deltas\n        //        as shown in https://gist.github.com/aldendaniels/8367109#file-document-snippet-js\n        //        If we do this, update validateDelta() to limit the number of lines in a delete delta.\n        var lines = delta.lines;\n        var l = lines.length;\n        var row = delta.start.row; \n        var column = delta.start.column;\n        var from = 0, to = 0;\n        do {\n            from = to;\n            to += MAX - 1;\n            var chunk = lines.slice(from, to);\n            if (to > l) {\n                // Update remaining delta.\n                delta.lines = chunk;\n                delta.start.row = row + from;\n                delta.start.column = column;\n                break;\n            }\n            chunk.push(\"\");\n            this.applyDelta({\n                start: this.pos(row + from, column),\n                end: this.pos(row + to, column = 0),\n                action: delta.action,\n                lines: chunk\n            }, true);\n        } while(true);\n    };\n    \n    /**\n     * Reverts `delta` from the document.\n     * @param {Object} delta A delta object (can include \"insert\" and \"remove\" actions)\n     **/\n    this.revertDelta = function(delta) {\n        this.applyDelta({\n            start: this.clonePos(delta.start),\n            end: this.clonePos(delta.end),\n            action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n            lines: delta.lines.slice()\n        });\n    };\n    \n    /**\n     * Converts an index position in a document to a `{row, column}` object.\n     *\n     * Index refers to the \"absolute position\" of a character in the document. For example:\n     *\n     * ```javascript\n     * var x = 0; // 10 characters, plus one for newline\n     * var y = -1;\n     * ```\n     * \n     * Here, `y` is an index 15: 11 characters for the first row, and 5 characters until `y` in the second.\n     *\n     * @param {Number} index An index to convert\n     * @param {Number} startRow=0 The row from which to start the conversion\n     * @returns {Object} A `{row, column}` object of the `index` position\n     */\n    this.indexToPosition = function(index, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        for (var i = startRow || 0, l = lines.length; i < l; i++) {\n            index -= lines[i].length + newlineLength;\n            if (index < 0)\n                return {row: i, column: index + lines[i].length + newlineLength};\n        }\n        return {row: l-1, column: lines[l-1].length};\n    };\n\n    /**\n     * Converts the `{row, column}` position in a document to the character's index.\n     *\n     * Index refers to the \"absolute position\" of a character in the document. For example:\n     *\n     * ```javascript\n     * var x = 0; // 10 characters, plus one for newline\n     * var y = -1;\n     * ```\n     * \n     * Here, `y` is an index 15: 11 characters for the first row, and 5 characters until `y` in the second.\n     *\n     * @param {Object} pos The `{row, column}` to convert\n     * @param {Number} startRow=0 The row from which to start the conversion\n     * @returns {Number} The index position in the document\n     */\n    this.positionToIndex = function(pos, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        var index = 0;\n        var row = Math.min(pos.row, lines.length);\n        for (var i = startRow || 0; i < row; ++i)\n            index += lines[i].length + newlineLength;\n\n        return index + pos.column;\n    };\n\n}).call(Document.prototype);\n\nexports.Document = Document;\n});\n"
  },
  {
    "path": "lib/ace/document_test.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\nif (typeof process !== \"undefined\") {\n    require(\"amd-loader\");\n    require(\"./test/mockdom\");\n}\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar Document = require(\"./document\").Document;\nvar Range = require(\"./range\").Range;\nvar assert = require(\"./test/assertions\");\n\nmodule.exports = {\n\n    \"test: insert text in line\" : function() {\n        var doc = new Document([\"12\", \"34\"]);\n\n        var deltas = [];\n        doc.on(\"change\", function(e) { deltas.push(e); });\n\n        doc.insert({row: 0, column: 1}, \"juhu\");\n        assert.equal(doc.getValue(), [\"1juhu2\", \"34\"].join(\"\\n\"));\n\n        var d = deltas.concat();\n        doc.revertDeltas(d);\n        assert.equal(doc.getValue(), [\"12\", \"34\"].join(\"\\n\"));\n\n        doc.applyDeltas(d);\n        assert.equal(doc.getValue(), [\"1juhu2\", \"34\"].join(\"\\n\"));\n    },\n\n    \"test: insert new line\" : function() {\n        var doc = new Document([\"12\", \"34\"]);\n\n        var deltas = [];\n        doc.on(\"change\", function(e) { deltas.push(e); });\n\n        doc.insertMergedLines({row: 0, column: 1}, ['', '']);\n        assert.equal(doc.getValue(), [\"1\", \"2\", \"34\"].join(\"\\n\"));\n\n        var d = deltas.concat();\n        doc.revertDeltas(d);\n        assert.equal(doc.getValue(), [\"12\", \"34\"].join(\"\\n\"));\n\n        doc.applyDeltas(d);\n        assert.equal(doc.getValue(), [\"1\", \"2\", \"34\"].join(\"\\n\"));\n    },\n\n    \"test: insert lines at the beginning\" : function() {\n        var doc = new Document([\"12\", \"34\"]);\n\n        var deltas = [];\n        doc.on(\"change\", function(e) { deltas.push(e); });\n\n        doc.insertFullLines(0, [\"aa\", \"bb\"]);\n        assert.equal(doc.getValue(), [\"aa\", \"bb\", \"12\", \"34\"].join(\"\\n\"));\n\n        var d = deltas.concat();\n        doc.revertDeltas(d);\n        assert.equal(doc.getValue(), [\"12\", \"34\"].join(\"\\n\"));\n\n        doc.applyDeltas(d);\n        assert.equal(doc.getValue(), [\"aa\", \"bb\", \"12\", \"34\"].join(\"\\n\"));\n    },\n\n    \"test: insert lines at the end\" : function() {\n        var doc = new Document([\"12\", \"34\"]);\n\n        var deltas = [];\n        doc.on(\"change\", function(e) { deltas.push(e); });\n\n        doc.insertFullLines(2, [\"aa\", \"bb\"]);\n        assert.equal(doc.getValue(), [\"12\", \"34\", \"aa\", \"bb\"].join(\"\\n\"));\n    },\n\n    \"test: insert lines in the middle\" : function() {\n        var doc = new Document([\"12\", \"34\"]);\n\n        var deltas = [];\n        doc.on(\"change\", function(e) { deltas.push(e); });\n\n        doc.insertFullLines(1, [\"aa\", \"bb\"]);\n        assert.equal(doc.getValue(), [\"12\", \"aa\", \"bb\", \"34\"].join(\"\\n\"));\n\n        var d = deltas.concat();\n        doc.revertDeltas(d);\n        assert.equal(doc.getValue(), [\"12\", \"34\"].join(\"\\n\"));\n\n        doc.applyDeltas(d);\n        assert.equal(doc.getValue(), [\"12\", \"aa\", \"bb\", \"34\"].join(\"\\n\"));\n    },\n\n    \"test: insert multi line string at the start\" : function() {\n        var doc = new Document([\"12\", \"34\"]);\n\n        var deltas = [];\n        doc.on(\"change\", function(e) { deltas.push(e); });\n\n        doc.insert({row: 0, column: 0}, \"aa\\nbb\\ncc\");\n        assert.equal(doc.getValue(), [\"aa\", \"bb\", \"cc12\", \"34\"].join(\"\\n\"));\n\n        var d = deltas.concat();\n        doc.revertDeltas(d);\n        assert.equal(doc.getValue(), [\"12\", \"34\"].join(\"\\n\"));\n\n        doc.applyDeltas(d);\n        assert.equal(doc.getValue(), [\"aa\", \"bb\", \"cc12\", \"34\"].join(\"\\n\"));\n    },\n\n    \"test: insert multi line string at the end\" : function() {\n        var doc = new Document([\"12\", \"34\"]);\n\n        var deltas = [];\n        doc.on(\"change\", function(e) { deltas.push(e); });\n\n        doc.insert({row: 1, column: 2}, \"aa\\nbb\\ncc\");\n        assert.equal(doc.getValue(), [\"12\", \"34aa\", \"bb\", \"cc\"].join(\"\\n\"));\n\n        var d = deltas.concat();\n        doc.revertDeltas(d);\n        assert.equal(doc.getValue(), [\"12\", \"34\"].join(\"\\n\"));\n\n        doc.applyDeltas(d);\n        assert.equal(doc.getValue(), [\"12\", \"34aa\", \"bb\", \"cc\"].join(\"\\n\"));\n    },\n\n    \"test: insert multi line string in the middle\" : function() {\n        var doc = new Document([\"12\", \"34\"]);\n\n        var deltas = [];\n        doc.on(\"change\", function(e) { deltas.push(e); });\n\n        doc.insert({row: 0, column: 1}, \"aa\\nbb\\ncc\");\n        assert.equal(doc.getValue(), [\"1aa\", \"bb\", \"cc2\", \"34\"].join(\"\\n\"));\n\n        var d = deltas.concat();\n        doc.revertDeltas(d);\n        assert.equal(doc.getValue(), [\"12\", \"34\"].join(\"\\n\"));\n\n        doc.applyDeltas(d);\n        assert.equal(doc.getValue(), [\"1aa\", \"bb\", \"cc2\", \"34\"].join(\"\\n\"));\n    },\n\n    \"test: delete in line\" : function() {\n        var doc = new Document([\"1234\", \"5678\"]);\n\n        var deltas = [];\n        doc.on(\"change\", function(e) { deltas.push(e); });\n\n        doc.remove(new Range(0, 1, 0, 3));\n        assert.equal(doc.getValue(), [\"14\", \"5678\"].join(\"\\n\"));\n\n        var d = deltas.concat();\n        doc.revertDeltas(d);\n        assert.equal(doc.getValue(), [\"1234\", \"5678\"].join(\"\\n\"));\n\n        doc.applyDeltas(d);\n        assert.equal(doc.getValue(), [\"14\", \"5678\"].join(\"\\n\"));\n    },\n\n    \"test: delete new line\" : function() {\n        var doc = new Document([\"1234\", \"5678\"]);\n\n        var deltas = [];\n        doc.on(\"change\", function(e) { deltas.push(e); });\n\n        doc.remove(new Range(0, 4, 1, 0));\n        assert.equal(doc.getValue(), [\"12345678\"].join(\"\\n\"));\n\n        var d = deltas.concat();\n        doc.revertDeltas(d);\n        assert.equal(doc.getValue(), [\"1234\", \"5678\"].join(\"\\n\"));\n\n        doc.applyDeltas(d);\n        assert.equal(doc.getValue(), [\"12345678\"].join(\"\\n\"));\n    },\n\n    \"test: delete multi line range line\" : function() {\n        var doc = new Document([\"1234\", \"5678\", \"abcd\"]);\n\n        var deltas = [];\n        doc.on(\"change\", function(e) { deltas.push(e); });\n\n        doc.remove(new Range(0, 2, 2, 2));\n        assert.equal(doc.getValue(), [\"12cd\"].join(\"\\n\"));\n\n        var d = deltas.concat();\n        doc.revertDeltas(d);\n        assert.equal(doc.getValue(), [\"1234\", \"5678\", \"abcd\"].join(\"\\n\"));\n\n        doc.applyDeltas(d);\n        assert.equal(doc.getValue(), [\"12cd\"].join(\"\\n\"));\n    },\n\n    \"test: delete full lines\" : function() {\n        var doc = new Document([\"1234\", \"5678\", \"abcd\"]);\n\n        var deltas = [];\n        doc.on(\"change\", function(e) { deltas.push(e); });\n\n        doc.remove(new Range(1, 0, 3, 0));\n        assert.equal(doc.getValue(), [\"1234\", \"\"].join(\"\\n\"));\n    },\n\n    \"test: remove lines should return the removed lines\" : function() {\n        var doc = new Document([\"1234\", \"5678\", \"abcd\"]);\n\n        var removed = doc.removeFullLines(1, 2);\n        assert.equal(removed.join(\"\\n\"), [\"5678\", \"abcd\"].join(\"\\n\"));\n    },\n\n    \"test: should handle unix style new lines\" : function() {\n        var doc = new Document([\"1\", \"2\", \"3\"]);\n        assert.equal(doc.getValue(), [\"1\", \"2\", \"3\"].join(\"\\n\"));\n    },\n\n    \"test: should handle windows style new lines\" : function() {\n        var doc = new Document([\"1\", \"2\", \"3\"].join(\"\\r\\n\"));\n\n        doc.setNewLineMode(\"unix\");\n        assert.equal(doc.getValue(), [\"1\", \"2\", \"3\"].join(\"\\n\"));\n    },\n\n    \"test: set new line mode to 'windows' should use '\\\\r\\\\n' as new lines\": function() {\n        var doc = new Document([\"1\", \"2\", \"3\"].join(\"\\n\"));\n        doc.setNewLineMode(\"windows\");\n        assert.equal(doc.getValue(), [\"1\", \"2\", \"3\"].join(\"\\r\\n\"));\n    },\n\n    \"test: set new line mode to 'unix' should use '\\\\n' as new lines\": function() {\n        var doc = new Document([\"1\", \"2\", \"3\"].join(\"\\r\\n\"));\n\n        doc.setNewLineMode(\"unix\");\n        assert.equal(doc.getValue(), [\"1\", \"2\", \"3\"].join(\"\\n\"));\n    },\n\n    \"test: set new line mode to 'auto' should detect the incoming nl type\": function() {\n        var doc = new Document([\"1\", \"2\", \"3\"].join(\"\\n\"));\n\n        doc.setNewLineMode(\"auto\");\n        assert.equal(doc.getValue(), [\"1\", \"2\", \"3\"].join(\"\\n\"));\n\n        var doc = new Document([\"1\", \"2\", \"3\"].join(\"\\r\\n\"));\n\n        doc.setNewLineMode(\"auto\");\n        assert.equal(doc.getValue(), [\"1\", \"2\", \"3\"].join(\"\\r\\n\"));\n\n        doc.replace(new Range(0, 0, 2, 1), [\"4\", \"5\", \"6\"].join(\"\\n\"));\n        assert.equal([\"4\", \"5\", \"6\"].join(\"\\n\"), doc.getValue());\n    },\n\n    \"test: set value\": function() {\n        var doc = new Document(\"1\");\n        assert.equal(\"1\", doc.getValue());\n\n        doc.setValue(doc.getValue());\n        assert.equal(\"1\", doc.getValue());\n\n        var doc = new Document(\"1\\n2\");\n        assert.equal(\"1\\n2\", doc.getValue());\n\n        doc.setValue(doc.getValue());\n        assert.equal(\"1\\n2\", doc.getValue());\n    },\n\n    \"test: empty document has to contain one line\": function() {\n        var doc = new Document(\"\");\n        assert.equal(doc.$lines.length, 1);\n    },\n    \n    \"test: ignore empty delta\": function() {\n        var doc = new Document(\"\");\n        doc.on(\"change\", function() {\n            throw \"should ignore empty delta\";\n        });\n        doc.insert({row: 0, column: 0}, \"\");\n        doc.insert({row: 1, column: 1}, \"\");\n        doc.remove({start: {row: 1, column: 1}, end: {row: 1, column: 1}});\n    },\n    \n    \"test: inserting huge delta\": function() {\n        var doc = new Document(\"\");\n        var val = \"\";\n        var MAX = 0xF000;\n        for (var i = 0; i < 10 * MAX; i++) {\n            val += i + \"\\n\";\n        }\n        doc.setValue(val);\n        assert.equal(doc.getValue(), val);\n        \n        for (var i = 3 * MAX + 2; i >= 3 * MAX - 2; i--) {\n            val = doc.getLines(0, i).join(\"\\n\");\n            doc.setValue(\"\\nab\");\n            assert.equal(doc.getValue(), \"\\nab\");\n            doc.insert({row: 1, column: 1}, val);\n            assert.equal(doc.getValue(), \"\\na\" + val + \"b\");\n        }\n    }\n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main) {\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n}\n"
  },
  {
    "path": "lib/ace/edit_session/bracket_match.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar Range = require(\"../range\").Range;\n\n\nfunction BracketMatch() {\n\n    this.findMatchingBracket = function(position, chr) {\n        if (position.column == 0) return null;\n\n        var charBeforeCursor = chr || this.getLine(position.row).charAt(position.column-1);\n        if (charBeforeCursor == \"\") return null;\n\n        var match = charBeforeCursor.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n        if (!match)\n            return null;\n\n        if (match[1])\n            return this.$findClosingBracket(match[1], position);\n        else\n            return this.$findOpeningBracket(match[2], position);\n    };\n    \n    this.getBracketRange = function(pos) {\n        var line = this.getLine(pos.row);\n        var before = true, range;\n\n        var chr = line.charAt(pos.column-1);\n        var match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n        if (!match) {\n            chr = line.charAt(pos.column);\n            pos = {row: pos.row, column: pos.column + 1};\n            match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n            before = false;\n        }\n        if (!match)\n            return null;\n\n        if (match[1]) {\n            var bracketPos = this.$findClosingBracket(match[1], pos);\n            if (!bracketPos)\n                return null;\n            range = Range.fromPoints(pos, bracketPos);\n            if (!before) {\n                range.end.column++;\n                range.start.column--;\n            }\n            range.cursor = range.end;\n        } else {\n            var bracketPos = this.$findOpeningBracket(match[2], pos);\n            if (!bracketPos)\n                return null;\n            range = Range.fromPoints(bracketPos, pos);\n            if (!before) {\n                range.start.column++;\n                range.end.column--;\n            }\n            range.cursor = range.start;\n        }\n        \n        return range;\n    };\n\n    this.$brackets = {\n        \")\": \"(\",\n        \"(\": \")\",\n        \"]\": \"[\",\n        \"[\": \"]\",\n        \"{\": \"}\",\n        \"}\": \"{\"\n    };\n\n    this.$findOpeningBracket = function(bracket, position, typeRe) {\n        var openBracket = this.$brackets[bracket];\n        var depth = 1;\n\n        var iterator = new TokenIterator(this, position.row, position.column);\n        var token = iterator.getCurrentToken();\n        if (!token)\n            token = iterator.stepForward();\n        if (!token)\n            return;\n        \n         if (!typeRe){\n            typeRe = new RegExp(\n                \"(\\\\.?\" +\n                token.type.replace(\".\", \"\\\\.\").replace(\"rparen\", \".paren\")\n                    .replace(/\\b(?:end)\\b/, \"(?:start|begin|end)\")\n                + \")+\"\n            );\n        }\n        \n        // Start searching in token, just before the character at position.column\n        var valueIndex = position.column - iterator.getCurrentTokenColumn() - 2;\n        var value = token.value;\n        \n        while (true) {\n        \n            while (valueIndex >= 0) {\n                var chr = value.charAt(valueIndex);\n                if (chr == openBracket) {\n                    depth -= 1;\n                    if (depth == 0) {\n                        return {row: iterator.getCurrentTokenRow(),\n                            column: valueIndex + iterator.getCurrentTokenColumn()};\n                    }\n                }\n                else if (chr == bracket) {\n                    depth += 1;\n                }\n                valueIndex -= 1;\n            }\n\n            // Scan backward through the document, looking for the next token\n            // whose type matches typeRe\n            do {\n                token = iterator.stepBackward();\n            } while (token && !typeRe.test(token.type));\n\n            if (token == null)\n                break;\n                \n            value = token.value;\n            valueIndex = value.length - 1;\n        }\n        \n        return null;\n    };\n\n    this.$findClosingBracket = function(bracket, position, typeRe) {\n        var closingBracket = this.$brackets[bracket];\n        var depth = 1;\n\n        var iterator = new TokenIterator(this, position.row, position.column);\n        var token = iterator.getCurrentToken();\n        if (!token)\n            token = iterator.stepForward();\n        if (!token)\n            return;\n\n        if (!typeRe){\n            typeRe = new RegExp(\n                \"(\\\\.?\" +\n                token.type.replace(\".\", \"\\\\.\").replace(\"lparen\", \".paren\")\n                    .replace(/\\b(?:start|begin)\\b/, \"(?:start|begin|end)\")\n                + \")+\"\n            );\n        }\n\n        // Start searching in token, after the character at position.column\n        var valueIndex = position.column - iterator.getCurrentTokenColumn();\n\n        while (true) {\n\n            var value = token.value;\n            var valueLength = value.length;\n            while (valueIndex < valueLength) {\n                var chr = value.charAt(valueIndex);\n                if (chr == closingBracket) {\n                    depth -= 1;\n                    if (depth == 0) {\n                        return {row: iterator.getCurrentTokenRow(),\n                            column: valueIndex + iterator.getCurrentTokenColumn()};\n                    }\n                }\n                else if (chr == bracket) {\n                    depth += 1;\n                }\n                valueIndex += 1;\n            }\n\n            // Scan forward through the document, looking for the next token\n            // whose type matches typeRe\n            do {\n                token = iterator.stepForward();\n            } while (token && !typeRe.test(token.type));\n\n            if (token == null)\n                break;\n\n            valueIndex = 0;\n        }\n        \n        return null;\n    };\n}\nexports.BracketMatch = BracketMatch;\n\n});\n"
  },
  {
    "path": "lib/ace/edit_session/fold.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\nvar RangeList = require(\"../range_list\").RangeList;\nvar oop = require(\"../lib/oop\");\n/*\n * Simple fold-data struct.\n **/\nvar Fold = exports.Fold = function(range, placeholder) {\n    this.foldLine = null;\n    this.placeholder = placeholder;\n    this.range = range;\n    this.start = range.start;\n    this.end = range.end;\n\n    this.sameRow = range.start.row == range.end.row;\n    this.subFolds = this.ranges = [];\n};\n\noop.inherits(Fold, RangeList);\n\n(function() {\n\n    this.toString = function() {\n        return '\"' + this.placeholder + '\" ' + this.range.toString();\n    };\n\n    this.setFoldLine = function(foldLine) {\n        this.foldLine = foldLine;\n        this.subFolds.forEach(function(fold) {\n            fold.setFoldLine(foldLine);\n        });\n    };\n\n    this.clone = function() {\n        var range = this.range.clone();\n        var fold = new Fold(range, this.placeholder);\n        this.subFolds.forEach(function(subFold) {\n            fold.subFolds.push(subFold.clone());\n        });\n        fold.collapseChildren = this.collapseChildren;\n        return fold;\n    };\n\n    this.addSubFold = function(fold) {\n        if (this.range.isEqual(fold))\n            return;\n\n        if (!this.range.containsRange(fold))\n            throw new Error(\"A fold can't intersect already existing fold\" + fold.range + this.range);\n\n        // transform fold to local coordinates\n        consumeRange(fold, this.start);\n\n        var row = fold.start.row, column = fold.start.column;\n        for (var i = 0, cmp = -1; i < this.subFolds.length; i++) {\n            cmp = this.subFolds[i].range.compare(row, column);\n            if (cmp != 1)\n                break;\n        }\n        var afterStart = this.subFolds[i];\n\n        if (cmp == 0)\n            return afterStart.addSubFold(fold);\n\n        // cmp == -1\n        var row = fold.range.end.row, column = fold.range.end.column;\n        for (var j = i, cmp = -1; j < this.subFolds.length; j++) {\n            cmp = this.subFolds[j].range.compare(row, column);\n            if (cmp != 1)\n                break;\n        }\n        var afterEnd = this.subFolds[j];\n\n        if (cmp == 0)\n            throw new Error(\"A fold can't intersect already existing fold\" + fold.range + this.range);\n\n        var consumedFolds = this.subFolds.splice(i, j - i, fold);\n        fold.setFoldLine(this.foldLine);\n\n        return fold;\n    };\n    \n    this.restoreRange = function(range) {\n        return restoreRange(range, this.start);\n    };\n\n}).call(Fold.prototype);\n\nfunction consumePoint(point, anchor) {\n    point.row -= anchor.row;\n    if (point.row == 0)\n        point.column -= anchor.column;\n}\nfunction consumeRange(range, anchor) {\n    consumePoint(range.start, anchor);\n    consumePoint(range.end, anchor);\n}\nfunction restorePoint(point, anchor) {\n    if (point.row == 0)\n        point.column += anchor.column;\n    point.row += anchor.row;\n}\nfunction restoreRange(range, anchor) {\n    restorePoint(range.start, anchor);\n    restorePoint(range.end, anchor);\n}\n\n});\n"
  },
  {
    "path": "lib/ace/edit_session/fold_line.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\n/*\n * If an array is passed in, the folds are expected to be sorted already.\n */\nfunction FoldLine(foldData, folds) {\n    this.foldData = foldData;\n    if (Array.isArray(folds)) {\n        this.folds = folds;\n    } else {\n        folds = this.folds = [ folds ];\n    }\n\n    var last = folds[folds.length - 1];\n    this.range = new Range(folds[0].start.row, folds[0].start.column,\n                           last.end.row, last.end.column);\n    this.start = this.range.start;\n    this.end   = this.range.end;\n\n    this.folds.forEach(function(fold) {\n        fold.setFoldLine(this);\n    }, this);\n}\n\n(function() {\n    /*\n     * Note: This doesn't update wrapData!\n     */\n    this.shiftRow = function(shift) {\n        this.start.row += shift;\n        this.end.row += shift;\n        this.folds.forEach(function(fold) {\n            fold.start.row += shift;\n            fold.end.row += shift;\n        });\n    };\n\n    this.addFold = function(fold) {\n        if (fold.sameRow) {\n            if (fold.start.row < this.startRow || fold.endRow > this.endRow) {\n                throw new Error(\"Can't add a fold to this FoldLine as it has no connection\");\n            }\n            this.folds.push(fold);\n            this.folds.sort(function(a, b) {\n                return -a.range.compareEnd(b.start.row, b.start.column);\n            });\n            if (this.range.compareEnd(fold.start.row, fold.start.column) > 0) {\n                this.end.row = fold.end.row;\n                this.end.column =  fold.end.column;\n            } else if (this.range.compareStart(fold.end.row, fold.end.column) < 0) {\n                this.start.row = fold.start.row;\n                this.start.column = fold.start.column;\n            }\n        } else if (fold.start.row == this.end.row) {\n            this.folds.push(fold);\n            this.end.row = fold.end.row;\n            this.end.column = fold.end.column;\n        } else if (fold.end.row == this.start.row) {\n            this.folds.unshift(fold);\n            this.start.row = fold.start.row;\n            this.start.column = fold.start.column;\n        } else {\n            throw new Error(\"Trying to add fold to FoldRow that doesn't have a matching row\");\n        }\n        fold.foldLine = this;\n    };\n\n    this.containsRow = function(row) {\n        return row >= this.start.row && row <= this.end.row;\n    };\n\n    this.walk = function(callback, endRow, endColumn) {\n        var lastEnd = 0,\n            folds = this.folds,\n            fold,\n            cmp, stop, isNewRow = true;\n\n        if (endRow == null) {\n            endRow = this.end.row;\n            endColumn = this.end.column;\n        }\n\n        for (var i = 0; i < folds.length; i++) {\n            fold = folds[i];\n\n            cmp = fold.range.compareStart(endRow, endColumn);\n            // This fold is after the endRow/Column.\n            if (cmp == -1) {\n                callback(null, endRow, endColumn, lastEnd, isNewRow);\n                return;\n            }\n\n            stop = callback(null, fold.start.row, fold.start.column, lastEnd, isNewRow);\n            stop = !stop && callback(fold.placeholder, fold.start.row, fold.start.column, lastEnd);\n\n            // If the user requested to stop the walk or endRow/endColumn is\n            // inside of this fold (cmp == 0), then end here.\n            if (stop || cmp === 0) {\n                return;\n            }\n\n            // Note the new lastEnd might not be on the same line. However,\n            // it's the callback's job to recognize this.\n            isNewRow = !fold.sameRow;\n            lastEnd = fold.end.column;\n        }\n        callback(null, endRow, endColumn, lastEnd, isNewRow);\n    };\n\n    this.getNextFoldTo = function(row, column) {\n        var fold, cmp;\n        for (var i = 0; i < this.folds.length; i++) {\n            fold = this.folds[i];\n            cmp = fold.range.compareEnd(row, column);\n            if (cmp == -1) {\n                return {\n                    fold: fold,\n                    kind: \"after\"\n                };\n            } else if (cmp === 0) {\n                return {\n                    fold: fold,\n                    kind: \"inside\"\n                };\n            }\n        }\n        return null;\n    };\n\n    this.addRemoveChars = function(row, column, len) {\n        var ret = this.getNextFoldTo(row, column),\n            fold, folds;\n        if (ret) {\n            fold = ret.fold;\n            if (ret.kind == \"inside\"\n                && fold.start.column != column\n                && fold.start.row != row)\n            {\n                //throwing here breaks whole editor\n                //TODO: properly handle this\n                window.console && window.console.log(row, column, fold);\n            } else if (fold.start.row == row) {\n                folds = this.folds;\n                var i = folds.indexOf(fold);\n                if (i === 0) {\n                    this.start.column += len;\n                }\n                for (i; i < folds.length; i++) {\n                    fold = folds[i];\n                    fold.start.column += len;\n                    if (!fold.sameRow) {\n                        return;\n                    }\n                    fold.end.column += len;\n                }\n                this.end.column += len;\n            }\n        }\n    };\n\n    this.split = function(row, column) {\n        var pos = this.getNextFoldTo(row, column);\n        \n        if (!pos || pos.kind == \"inside\")\n            return null;\n            \n        var fold = pos.fold;\n        var folds = this.folds;\n        var foldData = this.foldData;\n        \n        var i = folds.indexOf(fold);\n        var foldBefore = folds[i - 1];\n        this.end.row = foldBefore.end.row;\n        this.end.column = foldBefore.end.column;\n\n        // Remove the folds after row/column and create a new FoldLine\n        // containing these removed folds.\n        folds = folds.splice(i, folds.length - i);\n\n        var newFoldLine = new FoldLine(foldData, folds);\n        foldData.splice(foldData.indexOf(this) + 1, 0, newFoldLine);\n        return newFoldLine;\n    };\n\n    this.merge = function(foldLineNext) {\n        var folds = foldLineNext.folds;\n        for (var i = 0; i < folds.length; i++) {\n            this.addFold(folds[i]);\n        }\n        // Remove the foldLineNext - no longer needed, as\n        // it's merged now with foldLineNext.\n        var foldData = this.foldData;\n        foldData.splice(foldData.indexOf(foldLineNext), 1);\n    };\n\n    this.toString = function() {\n        var ret = [this.range.toString() + \": [\" ];\n\n        this.folds.forEach(function(fold) {\n            ret.push(\"  \" + fold.toString());\n        });\n        ret.push(\"]\");\n        return ret.join(\"\\n\");\n    };\n\n    this.idxToPosition = function(idx) {\n        var lastFoldEndColumn = 0;\n\n        for (var i = 0; i < this.folds.length; i++) {\n            var fold = this.folds[i];\n\n            idx -= fold.start.column - lastFoldEndColumn;\n            if (idx < 0) {\n                return {\n                    row: fold.start.row,\n                    column: fold.start.column + idx\n                };\n            }\n\n            idx -= fold.placeholder.length;\n            if (idx < 0) {\n                return fold.start;\n            }\n\n            lastFoldEndColumn = fold.end.column;\n        }\n\n        return {\n            row: this.end.row,\n            column: this.end.column + idx\n        };\n    };\n}).call(FoldLine.prototype);\n\nexports.FoldLine = FoldLine;\n});\n"
  },
  {
    "path": "lib/ace/edit_session/folding.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\nvar FoldLine = require(\"./fold_line\").FoldLine;\nvar Fold = require(\"./fold\").Fold;\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nfunction Folding() {\n    /*\n     * Looks up a fold at a given row/column. Possible values for side:\n     *   -1: ignore a fold if fold.start = row/column\n     *   +1: ignore a fold if fold.end = row/column\n     */\n    this.getFoldAt = function(row, column, side) {\n        var foldLine = this.getFoldLine(row);\n        if (!foldLine)\n            return null;\n\n        var folds = foldLine.folds;\n        for (var i = 0; i < folds.length; i++) {\n            var fold = folds[i];\n            if (fold.range.contains(row, column)) {\n                if (side == 1 && fold.range.isEnd(row, column)) {\n                    continue;\n                } else if (side == -1 && fold.range.isStart(row, column)) {\n                    continue;\n                }\n                return fold;\n            }\n        }\n    };\n\n    /*\n     * Returns all folds in the given range. Note, that this will return folds\n     *\n     */\n    this.getFoldsInRange = function(range) {\n        var start = range.start;\n        var end = range.end;\n        var foldLines = this.$foldData;\n        var foundFolds = [];\n\n        start.column += 1;\n        end.column -= 1;\n\n        for (var i = 0; i < foldLines.length; i++) {\n            var cmp = foldLines[i].range.compareRange(range);\n            if (cmp == 2) {\n                // Range is before foldLine. No intersection. This means,\n                // there might be other foldLines that intersect.\n                continue;\n            }\n            else if (cmp == -2) {\n                // Range is after foldLine. There can't be any other foldLines then,\n                // so let's give up.\n                break;\n            }\n\n            var folds = foldLines[i].folds;\n            for (var j = 0; j < folds.length; j++) {\n                var fold = folds[j];\n                cmp = fold.range.compareRange(range);\n                if (cmp == -2) {\n                    break;\n                } else if (cmp == 2) {\n                    continue;\n                } else\n                // WTF-state: Can happen due to -1/+1 to start/end column.\n                if (cmp == 42) {\n                    break;\n                }\n                foundFolds.push(fold);\n            }\n        }\n        start.column -= 1;\n        end.column += 1;\n\n        return foundFolds;\n    };\n\n    this.getFoldsInRangeList = function(ranges) {\n        if (Array.isArray(ranges)) {\n            var folds = [];\n            ranges.forEach(function(range) {\n                folds = folds.concat(this.getFoldsInRange(range));\n            }, this);\n        } else {\n            var folds = this.getFoldsInRange(ranges);\n        }\n        return folds;\n    };\n    \n    /*\n     * Returns all folds in the document\n     */\n    this.getAllFolds = function() {\n        var folds = [];\n        var foldLines = this.$foldData;\n        \n        for (var i = 0; i < foldLines.length; i++)\n            for (var j = 0; j < foldLines[i].folds.length; j++)\n                folds.push(foldLines[i].folds[j]);\n\n        return folds;\n    };\n\n    /*\n     * Returns the string between folds at the given position.\n     * E.g.\n     *  foo<fold>b|ar<fold>wolrd -> \"bar\"\n     *  foo<fold>bar<fold>wol|rd -> \"world\"\n     *  foo<fold>bar<fo|ld>wolrd -> <null>\n     *\n     * where | means the position of row/column\n     *\n     * The trim option determs if the return string should be trimed according\n     * to the \"side\" passed with the trim value:\n     *\n     * E.g.\n     *  foo<fold>b|ar<fold>wolrd -trim=-1> \"b\"\n     *  foo<fold>bar<fold>wol|rd -trim=+1> \"rld\"\n     *  fo|o<fold>bar<fold>wolrd -trim=00> \"foo\"\n     */\n    this.getFoldStringAt = function(row, column, trim, foldLine) {\n        foldLine = foldLine || this.getFoldLine(row);\n        if (!foldLine)\n            return null;\n\n        var lastFold = {\n            end: { column: 0 }\n        };\n        // TODO: Refactor to use getNextFoldTo function.\n        var str, fold;\n        for (var i = 0; i < foldLine.folds.length; i++) {\n            fold = foldLine.folds[i];\n            var cmp = fold.range.compareEnd(row, column);\n            if (cmp == -1) {\n                str = this\n                    .getLine(fold.start.row)\n                    .substring(lastFold.end.column, fold.start.column);\n                break;\n            }\n            else if (cmp === 0) {\n                return null;\n            }\n            lastFold = fold;\n        }\n        if (!str)\n            str = this.getLine(fold.start.row).substring(lastFold.end.column);\n\n        if (trim == -1)\n            return str.substring(0, column - lastFold.end.column);\n        else if (trim == 1)\n            return str.substring(column - lastFold.end.column);\n        else\n            return str;\n    };\n\n    this.getFoldLine = function(docRow, startFoldLine) {\n        var foldData = this.$foldData;\n        var i = 0;\n        if (startFoldLine)\n            i = foldData.indexOf(startFoldLine);\n        if (i == -1)\n            i = 0;\n        for (i; i < foldData.length; i++) {\n            var foldLine = foldData[i];\n            if (foldLine.start.row <= docRow && foldLine.end.row >= docRow) {\n                return foldLine;\n            } else if (foldLine.end.row > docRow) {\n                return null;\n            }\n        }\n        return null;\n    };\n\n    // returns the fold which starts after or contains docRow\n    this.getNextFoldLine = function(docRow, startFoldLine) {\n        var foldData = this.$foldData;\n        var i = 0;\n        if (startFoldLine)\n            i = foldData.indexOf(startFoldLine);\n        if (i == -1)\n            i = 0;\n        for (i; i < foldData.length; i++) {\n            var foldLine = foldData[i];\n            if (foldLine.end.row >= docRow) {\n                return foldLine;\n            }\n        }\n        return null;\n    };\n\n    this.getFoldedRowCount = function(first, last) {\n        var foldData = this.$foldData, rowCount = last-first+1;\n        for (var i = 0; i < foldData.length; i++) {\n            var foldLine = foldData[i],\n                end = foldLine.end.row,\n                start = foldLine.start.row;\n            if (end >= last) {\n                if (start < last) {\n                    if (start >= first)\n                        rowCount -= last-start;\n                    else\n                        rowCount = 0; // in one fold\n                }\n                break;\n            } else if (end >= first){\n                if (start >= first) // fold inside range\n                    rowCount -=  end-start;\n                else\n                    rowCount -=  end-first+1;\n            }\n        }\n        return rowCount;\n    };\n\n    this.$addFoldLine = function(foldLine) {\n        this.$foldData.push(foldLine);\n        this.$foldData.sort(function(a, b) {\n            return a.start.row - b.start.row;\n        });\n        return foldLine;\n    };\n\n    /**\n     * Adds a new fold.\n     *\n     * @returns\n     *      The new created Fold object or an existing fold object in case the\n     *      passed in range fits an existing fold exactly.\n     */\n    this.addFold = function(placeholder, range) {\n        var foldData = this.$foldData;\n        var added = false;\n        var fold;\n        \n        if (placeholder instanceof Fold)\n            fold = placeholder;\n        else {\n            fold = new Fold(range, placeholder);\n            fold.collapseChildren = range.collapseChildren;\n        }\n        this.$clipRangeToDocument(fold.range);\n\n        var startRow = fold.start.row;\n        var startColumn = fold.start.column;\n        var endRow = fold.end.row;\n        var endColumn = fold.end.column;\n\n        // --- Some checking ---\n        if (!(startRow < endRow || \n            startRow == endRow && startColumn <= endColumn - 2))\n            throw new Error(\"The range has to be at least 2 characters width\");\n\n        var startFold = this.getFoldAt(startRow, startColumn, 1);\n        var endFold = this.getFoldAt(endRow, endColumn, -1);\n        if (startFold && endFold == startFold)\n            return startFold.addSubFold(fold);\n\n        if (startFold && !startFold.range.isStart(startRow, startColumn))\n            this.removeFold(startFold);\n        \n        if (endFold && !endFold.range.isEnd(endRow, endColumn))\n            this.removeFold(endFold);\n        \n        // Check if there are folds in the range we create the new fold for.\n        var folds = this.getFoldsInRange(fold.range);\n        if (folds.length > 0) {\n            // Remove the folds from fold data.\n            this.removeFolds(folds);\n            // Add the removed folds as subfolds on the new fold.\n            folds.forEach(function(subFold) {\n                fold.addSubFold(subFold);\n            });\n        }\n\n        for (var i = 0; i < foldData.length; i++) {\n            var foldLine = foldData[i];\n            if (endRow == foldLine.start.row) {\n                foldLine.addFold(fold);\n                added = true;\n                break;\n            } else if (startRow == foldLine.end.row) {\n                foldLine.addFold(fold);\n                added = true;\n                if (!fold.sameRow) {\n                    // Check if we might have to merge two FoldLines.\n                    var foldLineNext = foldData[i + 1];\n                    if (foldLineNext && foldLineNext.start.row == endRow) {\n                        // We need to merge!\n                        foldLine.merge(foldLineNext);\n                        break;\n                    }\n                }\n                break;\n            } else if (endRow <= foldLine.start.row) {\n                break;\n            }\n        }\n\n        if (!added)\n            foldLine = this.$addFoldLine(new FoldLine(this.$foldData, fold));\n\n        if (this.$useWrapMode)\n            this.$updateWrapData(foldLine.start.row, foldLine.start.row);\n        else\n            this.$updateRowLengthCache(foldLine.start.row, foldLine.start.row);\n\n        // Notify that fold data has changed.\n        this.$modified = true;\n        this._signal(\"changeFold\", { data: fold, action: \"add\" });\n\n        return fold;\n    };\n\n    this.addFolds = function(folds) {\n        folds.forEach(function(fold) {\n            this.addFold(fold);\n        }, this);\n    };\n\n    this.removeFold = function(fold) {\n        var foldLine = fold.foldLine;\n        var startRow = foldLine.start.row;\n        var endRow = foldLine.end.row;\n\n        var foldLines = this.$foldData;\n        var folds = foldLine.folds;\n        // Simple case where there is only one fold in the FoldLine such that\n        // the entire fold line can get removed directly.\n        if (folds.length == 1) {\n            foldLines.splice(foldLines.indexOf(foldLine), 1);\n        } else\n        // If the fold is the last fold of the foldLine, just remove it.\n        if (foldLine.range.isEnd(fold.end.row, fold.end.column)) {\n            folds.pop();\n            foldLine.end.row = folds[folds.length - 1].end.row;\n            foldLine.end.column = folds[folds.length - 1].end.column;\n        } else\n        // If the fold is the first fold of the foldLine, just remove it.\n        if (foldLine.range.isStart(fold.start.row, fold.start.column)) {\n            folds.shift();\n            foldLine.start.row = folds[0].start.row;\n            foldLine.start.column = folds[0].start.column;\n        } else\n        // We know there are more then 2 folds and the fold is not at the edge.\n        // This means, the fold is somewhere in between.\n        //\n        // If the fold is in one row, we just can remove it.\n        if (fold.sameRow) {\n            folds.splice(folds.indexOf(fold), 1);\n        } else\n        // The fold goes over more then one row. This means remvoing this fold\n        // will cause the fold line to get splitted up. newFoldLine is the second part\n        {\n            var newFoldLine = foldLine.split(fold.start.row, fold.start.column);\n            folds = newFoldLine.folds;\n            folds.shift();\n            newFoldLine.start.row = folds[0].start.row;\n            newFoldLine.start.column = folds[0].start.column;\n        }\n\n        if (!this.$updating) {\n            if (this.$useWrapMode)\n                this.$updateWrapData(startRow, endRow);\n            else\n                this.$updateRowLengthCache(startRow, endRow);\n        }\n        \n        // Notify that fold data has changed.\n        this.$modified = true;\n        this._signal(\"changeFold\", { data: fold, action: \"remove\" });\n    };\n\n    this.removeFolds = function(folds) {\n        // We need to clone the folds array passed in as it might be the folds\n        // array of a fold line and as we call this.removeFold(fold), folds\n        // are removed from folds and changes the current index.\n        var cloneFolds = [];\n        for (var i = 0; i < folds.length; i++) {\n            cloneFolds.push(folds[i]);\n        }\n\n        cloneFolds.forEach(function(fold) {\n            this.removeFold(fold);\n        }, this);\n        this.$modified = true;\n    };\n\n    this.expandFold = function(fold) {\n        this.removeFold(fold);\n        fold.subFolds.forEach(function(subFold) {\n            fold.restoreRange(subFold);\n            this.addFold(subFold);\n        }, this);\n        if (fold.collapseChildren > 0) {\n            this.foldAll(fold.start.row+1, fold.end.row, fold.collapseChildren-1);\n        }\n        fold.subFolds = [];\n    };\n\n    this.expandFolds = function(folds) {\n        folds.forEach(function(fold) {\n            this.expandFold(fold);\n        }, this);\n    };\n\n    this.unfold = function(location, expandInner) {\n        var range, folds;\n        if (location == null) {\n            range = new Range(0, 0, this.getLength(), 0);\n            expandInner = true;\n        } else if (typeof location == \"number\")\n            range = new Range(location, 0, location, this.getLine(location).length);\n        else if (\"row\" in location)\n            range = Range.fromPoints(location, location);\n        else\n            range = location;\n        \n        folds = this.getFoldsInRangeList(range);\n        if (expandInner) {\n            this.removeFolds(folds);\n        } else {\n            var subFolds = folds;\n            // TODO: might be better to remove and add folds in one go instead of using\n            // expandFolds several times.\n            while (subFolds.length) {\n                this.expandFolds(subFolds);\n                subFolds = this.getFoldsInRangeList(range);\n            }\n        }\n        if (folds.length)\n            return folds;\n    };\n\n    /*\n     * Checks if a given documentRow is folded. This is true if there are some\n     * folded parts such that some parts of the line is still visible.\n     **/\n    this.isRowFolded = function(docRow, startFoldRow) {\n        return !!this.getFoldLine(docRow, startFoldRow);\n    };\n\n    this.getRowFoldEnd = function(docRow, startFoldRow) {\n        var foldLine = this.getFoldLine(docRow, startFoldRow);\n        return foldLine ? foldLine.end.row : docRow;\n    };\n\n    this.getRowFoldStart = function(docRow, startFoldRow) {\n        var foldLine = this.getFoldLine(docRow, startFoldRow);\n        return foldLine ? foldLine.start.row : docRow;\n    };\n\n    this.getFoldDisplayLine = function(foldLine, endRow, endColumn, startRow, startColumn) {\n        if (startRow == null)\n            startRow = foldLine.start.row;\n        if (startColumn == null)\n            startColumn = 0;\n        if (endRow == null)\n            endRow = foldLine.end.row;\n        if (endColumn == null)\n            endColumn = this.getLine(endRow).length;\n        \n\n        // Build the textline using the FoldLine walker.\n        var doc = this.doc;\n        var textLine = \"\";\n\n        foldLine.walk(function(placeholder, row, column, lastColumn) {\n            if (row < startRow)\n                return;\n            if (row == startRow) {\n                if (column < startColumn)\n                    return;\n                lastColumn = Math.max(startColumn, lastColumn);\n            }\n\n            if (placeholder != null) {\n                textLine += placeholder;\n            } else {\n                textLine += doc.getLine(row).substring(lastColumn, column);\n            }\n        }, endRow, endColumn);\n        return textLine;\n    };\n\n    this.getDisplayLine = function(row, endColumn, startRow, startColumn) {\n        var foldLine = this.getFoldLine(row);\n\n        if (!foldLine) {\n            var line;\n            line = this.doc.getLine(row);\n            return line.substring(startColumn || 0, endColumn || line.length);\n        } else {\n            return this.getFoldDisplayLine(\n                foldLine, row, endColumn, startRow, startColumn);\n        }\n    };\n\n    this.$cloneFoldData = function() {\n        var fd = [];\n        fd = this.$foldData.map(function(foldLine) {\n            var folds = foldLine.folds.map(function(fold) {\n                return fold.clone();\n            });\n            return new FoldLine(fd, folds);\n        });\n\n        return fd;\n    };\n\n    this.toggleFold = function(tryToUnfold) {\n        var selection = this.selection;\n        var range = selection.getRange();\n        var fold;\n        var bracketPos;\n\n        if (range.isEmpty()) {\n            var cursor = range.start;\n            fold = this.getFoldAt(cursor.row, cursor.column);\n\n            if (fold) {\n                this.expandFold(fold);\n                return;\n            } else if (bracketPos = this.findMatchingBracket(cursor)) {\n                if (range.comparePoint(bracketPos) == 1) {\n                    range.end = bracketPos;\n                } else {\n                    range.start = bracketPos;\n                    range.start.column++;\n                    range.end.column--;\n                }\n            } else if (bracketPos = this.findMatchingBracket({row: cursor.row, column: cursor.column + 1})) {\n                if (range.comparePoint(bracketPos) == 1)\n                    range.end = bracketPos;\n                else\n                    range.start = bracketPos;\n\n                range.start.column++;\n            } else {\n                range = this.getCommentFoldRange(cursor.row, cursor.column) || range;\n            }\n        } else {\n            var folds = this.getFoldsInRange(range);\n            if (tryToUnfold && folds.length) {\n                this.expandFolds(folds);\n                return;\n            } else if (folds.length == 1 ) {\n                fold = folds[0];\n            }\n        }\n\n        if (!fold)\n            fold = this.getFoldAt(range.start.row, range.start.column);\n\n        if (fold && fold.range.toString() == range.toString()) {\n            this.expandFold(fold);\n            return;\n        }\n\n        var placeholder = \"...\";\n        if (!range.isMultiLine()) {\n            placeholder = this.getTextRange(range);\n            if (placeholder.length < 4)\n                return;\n            placeholder = placeholder.trim().substring(0, 2) + \"..\";\n        }\n\n        this.addFold(placeholder, range);\n    };\n\n    this.getCommentFoldRange = function(row, column, dir) {\n        var iterator = new TokenIterator(this, row, column);\n        var token = iterator.getCurrentToken();\n        var type = token.type;\n        if (token && /^comment|string/.test(type)) {\n            type = type.match(/comment|string/)[0];\n            if (type == \"comment\")\n                type += \"|doc-start\";\n            var re = new RegExp(type);\n            var range = new Range();\n            if (dir != 1) {\n                do {\n                    token = iterator.stepBackward();\n                } while (token && re.test(token.type));\n                iterator.stepForward();\n            }\n            \n            range.start.row = iterator.getCurrentTokenRow();\n            range.start.column = iterator.getCurrentTokenColumn() + 2;\n\n            iterator = new TokenIterator(this, row, column);\n            \n            if (dir != -1) {\n                var lastRow = -1;\n                do {\n                    token = iterator.stepForward();\n                    if (lastRow == -1) {\n                        var state = this.getState(iterator.$row);\n                        if (!re.test(state))\n                            lastRow = iterator.$row;\n                    } else if (iterator.$row > lastRow) {\n                        break;\n                    }\n                } while (token && re.test(token.type));\n                token = iterator.stepBackward();\n            } else\n                token = iterator.getCurrentToken();\n\n            range.end.row = iterator.getCurrentTokenRow();\n            range.end.column = iterator.getCurrentTokenColumn() + token.value.length - 2;\n            return range;\n        }\n    };\n\n    this.foldAll = function(startRow, endRow, depth) {\n        if (depth == undefined)\n            depth = 100000; // JSON.stringify doesn't hanle Infinity\n        var foldWidgets = this.foldWidgets;\n        if (!foldWidgets)\n            return; // mode doesn't support folding\n        endRow = endRow || this.getLength();\n        startRow = startRow || 0;\n        for (var row = startRow; row < endRow; row++) {\n            if (foldWidgets[row] == null)\n                foldWidgets[row] = this.getFoldWidget(row);\n            if (foldWidgets[row] != \"start\")\n                continue;\n\n            var range = this.getFoldWidgetRange(row);\n            // sometimes range can be incompatible with existing fold\n            // TODO change addFold to return null istead of throwing\n            if (range && range.isMultiLine()\n                && range.end.row <= endRow\n                && range.start.row >= startRow\n            ) {\n                row = range.end.row;\n                try {\n                    // addFold can change the range\n                    var fold = this.addFold(\"...\", range);\n                    if (fold)\n                        fold.collapseChildren = depth;\n                } catch(e) {}\n            }\n        }\n    };\n    \n    // structured folding\n    this.$foldStyles = {\n        \"manual\": 1,\n        \"markbegin\": 1,\n        \"markbeginend\": 1\n    };\n    this.$foldStyle = \"markbegin\";\n    this.setFoldStyle = function(style) {\n        if (!this.$foldStyles[style])\n            throw new Error(\"invalid fold style: \" + style + \"[\" + Object.keys(this.$foldStyles).join(\", \") + \"]\");\n        \n        if (this.$foldStyle == style)\n            return;\n\n        this.$foldStyle = style;\n        \n        if (style == \"manual\")\n            this.unfold();\n        \n        // reset folding\n        var mode = this.$foldMode;\n        this.$setFolding(null);\n        this.$setFolding(mode);\n    };\n\n    this.$setFolding = function(foldMode) {\n        if (this.$foldMode == foldMode)\n            return;\n            \n        this.$foldMode = foldMode;\n        \n        this.off('change', this.$updateFoldWidgets);\n        this.off('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n        this._signal(\"changeAnnotation\");\n        \n        if (!foldMode || this.$foldStyle == \"manual\") {\n            this.foldWidgets = null;\n            return;\n        }\n        \n        this.foldWidgets = [];\n        this.getFoldWidget = foldMode.getFoldWidget.bind(foldMode, this, this.$foldStyle);\n        this.getFoldWidgetRange = foldMode.getFoldWidgetRange.bind(foldMode, this, this.$foldStyle);\n        \n        this.$updateFoldWidgets = this.updateFoldWidgets.bind(this);\n        this.$tokenizerUpdateFoldWidgets = this.tokenizerUpdateFoldWidgets.bind(this);\n        this.on('change', this.$updateFoldWidgets);\n        this.on('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n    };\n\n    this.getParentFoldRangeData = function (row, ignoreCurrent) {\n        var fw = this.foldWidgets;\n        if (!fw || (ignoreCurrent && fw[row]))\n            return {};\n\n        var i = row - 1, firstRange;\n        while (i >= 0) {\n            var c = fw[i];\n            if (c == null)\n                c = fw[i] = this.getFoldWidget(i);\n\n            if (c == \"start\") {\n                var range = this.getFoldWidgetRange(i);\n                if (!firstRange)\n                    firstRange = range;\n                if (range && range.end.row >= row)\n                    break;\n            }\n            i--;\n        }\n\n        return {\n            range: i !== -1 && range,\n            firstRange: firstRange\n        };\n    };\n\n    this.onFoldWidgetClick = function(row, e) {\n        e = e.domEvent;\n        var options = {\n            children: e.shiftKey,\n            all: e.ctrlKey || e.metaKey,\n            siblings: e.altKey\n        };\n        \n        var range = this.$toggleFoldWidget(row, options);\n        if (!range) {\n            var el = (e.target || e.srcElement);\n            if (el && /ace_fold-widget/.test(el.className))\n                el.className += \" ace_invalid\";\n        }\n    };\n    \n    this.$toggleFoldWidget = function(row, options) {\n        if (!this.getFoldWidget)\n            return;\n        var type = this.getFoldWidget(row);\n        var line = this.getLine(row);\n\n        var dir = type === \"end\" ? -1 : 1;\n        var fold = this.getFoldAt(row, dir === -1 ? 0 : line.length, dir);\n\n        if (fold) {\n            if (options.children || options.all)\n                this.removeFold(fold);\n            else\n                this.expandFold(fold);\n            return fold;\n        }\n\n        var range = this.getFoldWidgetRange(row, true);\n        // sometimes singleline folds can be missed by the code above\n        if (range && !range.isMultiLine()) {\n            fold = this.getFoldAt(range.start.row, range.start.column, 1);\n            if (fold && range.isEqual(fold.range)) {\n                this.removeFold(fold);\n                return fold;\n            }\n        }\n        \n        if (options.siblings) {\n            var data = this.getParentFoldRangeData(row);\n            if (data.range) {\n                var startRow = data.range.start.row + 1;\n                var endRow = data.range.end.row;\n            }\n            this.foldAll(startRow, endRow, options.all ? 10000 : 0);\n        } else if (options.children) {\n            endRow = range ? range.end.row : this.getLength();\n            this.foldAll(row + 1, endRow, options.all ? 10000 : 0);\n        } else if (range) {\n            if (options.all) \n                range.collapseChildren = 10000;\n            this.addFold(\"...\", range);\n        }\n        \n        return range;\n    };\n    \n    \n    \n    this.toggleFoldWidget = function(toggleParent) {\n        var row = this.selection.getCursor().row;\n        row = this.getRowFoldStart(row);\n        var range = this.$toggleFoldWidget(row, {});\n        \n        if (range)\n            return;\n        // handle toggleParent\n        var data = this.getParentFoldRangeData(row, true);\n        range = data.range || data.firstRange;\n        \n        if (range) {\n            row = range.start.row;\n            var fold = this.getFoldAt(row, this.getLine(row).length, 1);\n\n            if (fold) {\n                this.removeFold(fold);\n            } else {\n                this.addFold(\"...\", range);\n            }\n        }\n    };\n\n    this.updateFoldWidgets = function(delta) {\n        var firstRow = delta.start.row;\n        var len = delta.end.row - firstRow;\n\n        if (len === 0) {\n            this.foldWidgets[firstRow] = null;\n        } else if (delta.action == 'remove') {\n            this.foldWidgets.splice(firstRow, len + 1, null);\n        } else {\n            var args = Array(len + 1);\n            args.unshift(firstRow, 1);\n            this.foldWidgets.splice.apply(this.foldWidgets, args);\n        }\n    };\n    this.tokenizerUpdateFoldWidgets = function(e) {\n        var rows = e.data;\n        if (rows.first != rows.last) {\n            if (this.foldWidgets.length > rows.first)\n                this.foldWidgets.splice(rows.first, this.foldWidgets.length);\n        }\n    };\n}\n\nexports.Folding = Folding;\n\n});\n"
  },
  {
    "path": "lib/ace/edit_session.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar lang = require(\"./lib/lang\");\nvar BidiHandler = require(\"./bidihandler\").BidiHandler;\nvar config = require(\"./config\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Selection = require(\"./selection\").Selection;\nvar TextMode = require(\"./mode/text\").Mode;\nvar Range = require(\"./range\").Range;\nvar Document = require(\"./document\").Document;\nvar BackgroundTokenizer = require(\"./background_tokenizer\").BackgroundTokenizer;\nvar SearchHighlight = require(\"./search_highlight\").SearchHighlight;\n\n/**\n * Stores all the data about [[Editor `Editor`]] state providing easy way to change editors state.\n *\n * `EditSession` can be attached to only one [[Document `Document`]]. Same `Document` can be attached to several `EditSession`s.\n * @class EditSession\n **/\n\n//{ events\n/**\n *\n * Emitted when the document changes.\n * @event change\n * @param {Object} e An object containing a `delta` of information about the change.\n **/\n/**\n * Emitted when the tab size changes, via [[EditSession.setTabSize]].\n *\n * @event changeTabSize\n **/\n/**\n * Emitted when the ability to overwrite text changes, via [[EditSession.setOverwrite]].\n *\n * @event changeOverwrite\n **/\n/**\n * Emitted when the gutter changes, either by setting or removing breakpoints, or when the gutter decorations change.\n *\n * @event changeBreakpoint\n **/\n/**\n * Emitted when a front marker changes.\n *\n * @event changeFrontMarker\n **/\n/**\n * Emitted when a back marker changes.\n *\n * @event changeBackMarker\n **/\n/**\n * Emitted when an annotation changes, like through [[EditSession.setAnnotations]].\n *\n * @event changeAnnotation\n **/\n/**\n * Emitted when a background tokenizer asynchronously processes new rows.\n * @event tokenizerUpdate\n *\n * @param {Object} e An object containing one property, `\"data\"`, that contains information about the changing rows\n *\n **/\n/**\n * Emitted when the current mode changes.\n *\n * @event changeMode\n *\n **/\n/**\n * Emitted when the wrap mode changes.\n *\n * @event changeWrapMode\n *\n **/\n/**\n * Emitted when the wrapping limit changes.\n *\n * @event changeWrapLimit\n *\n **/\n/**\n * Emitted when a code fold is added or removed.\n *\n * @event changeFold\n *\n **/\n /**\n * Emitted when the scroll top changes.\n * @event changeScrollTop\n *\n * @param {Number} scrollTop The new scroll top value\n **/\n/**\n * Emitted when the scroll left changes.\n * @event changeScrollLeft\n *\n * @param {Number} scrollLeft The new scroll left value\n **/\n//}\n\n/**\n * Sets up a new `EditSession` and associates it with the given `Document` and `TextMode`.\n * @param {Document | String} text [If `text` is a `Document`, it associates the `EditSession` with it. Otherwise, a new `Document` is created, with the initial text]{: #textParam}\n * @param {TextMode} mode [The initial language mode to use for the document]{: #modeParam}\n *\n * @constructor\n **/\n\nvar EditSession = function(text, mode) {\n    this.$breakpoints = [];\n    this.$decorations = [];\n    this.$frontMarkers = {};\n    this.$backMarkers = {};\n    this.$markerId = 1;\n    this.$undoSelect = true;\n\n    this.$foldData = [];\n    this.id = \"session\" + (++EditSession.$uid);\n    this.$foldData.toString = function() {\n        return this.join(\"\\n\");\n    };\n    this.on(\"changeFold\", this.onChangeFold.bind(this));\n    this.$onChange = this.onChange.bind(this);\n\n    if (typeof text != \"object\" || !text.getLine)\n        text = new Document(text);\n\n    this.$bidiHandler = new BidiHandler(this);\n    this.setDocument(text);\n    this.selection = new Selection(this);\n\n    config.resetOptions(this);\n    this.setMode(mode);\n    config._signal(\"session\", this);\n};\n\n\nEditSession.$uid = 0;\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n\n    /**\n     * Sets the `EditSession` to point to a new `Document`. If a `BackgroundTokenizer` exists, it also points to `doc`.\n     *\n     * @param {Document} doc The new `Document` to use\n     *\n     **/\n    this.setDocument = function(doc) {\n        if (this.doc)\n            this.doc.removeListener(\"change\", this.$onChange);\n\n        this.doc = doc;\n        doc.on(\"change\", this.$onChange);\n\n        if (this.bgTokenizer)\n            this.bgTokenizer.setDocument(this.getDocument());\n\n        this.resetCaches();\n    };\n\n    /**\n     * Returns the `Document` associated with this session.\n     * @return {Document}\n     **/\n    this.getDocument = function() {\n        return this.doc;\n    };\n\n    /**\n     * @param {Number} row The row to work with\n     *\n     **/\n    this.$resetRowCache = function(docRow) {\n        if (!docRow) {\n            this.$docRowCache = [];\n            this.$screenRowCache = [];\n            return;\n        }\n        var l = this.$docRowCache.length;\n        var i = this.$getRowCacheIndex(this.$docRowCache, docRow) + 1;\n        if (l > i) {\n            this.$docRowCache.splice(i, l);\n            this.$screenRowCache.splice(i, l);\n        }\n    };\n\n    this.$getRowCacheIndex = function(cacheArray, val) {\n        var low = 0;\n        var hi = cacheArray.length - 1;\n\n        while (low <= hi) {\n            var mid = (low + hi) >> 1;\n            var c = cacheArray[mid];\n\n            if (val > c)\n                low = mid + 1;\n            else if (val < c)\n                hi = mid - 1;\n            else\n                return mid;\n        }\n\n        return low -1;\n    };\n\n    this.resetCaches = function() {\n        this.$modified = true;\n        this.$wrapData = [];\n        this.$rowLengthCache = [];\n        this.$resetRowCache(0);\n        if (this.bgTokenizer)\n            this.bgTokenizer.start(0);\n    };\n\n    this.onChangeFold = function(e) {\n        var fold = e.data;\n        this.$resetRowCache(fold.start.row);\n    };\n\n    this.onChange = function(delta) {\n        this.$modified = true;\n        this.$bidiHandler.onChange(delta);\n        this.$resetRowCache(delta.start.row);\n\n        var removedFolds = this.$updateInternalDataOnChange(delta);\n        if (!this.$fromUndo && this.$undoManager) {\n            if (removedFolds && removedFolds.length) {\n                this.$undoManager.add({\n                    action: \"removeFolds\",\n                    folds:  removedFolds\n                }, this.mergeUndoDeltas);\n                this.mergeUndoDeltas = true;\n            }\n            this.$undoManager.add(delta, this.mergeUndoDeltas);\n            this.mergeUndoDeltas = true;\n            \n            this.$informUndoManager.schedule();\n        }\n\n        this.bgTokenizer && this.bgTokenizer.$updateOnChange(delta);\n        this._signal(\"change\", delta);\n    };\n\n    /**\n     * Sets the session text.\n     * @param {String} text The new text to place\n     *\n     **/\n    this.setValue = function(text) {\n        this.doc.setValue(text);\n        this.selection.moveTo(0, 0);\n\n        this.$resetRowCache(0);\n        this.setUndoManager(this.$undoManager);\n        this.getUndoManager().reset();\n    };\n\n    /**\n     * Returns the current [[Document `Document`]] as a string.\n     * @method toString\n     * @returns {String}\n     * @alias EditSession.getValue\n     *\n     **/\n\n    /**\n     * Returns the current [[Document `Document`]] as a string.\n     * @method getValue\n     * @returns {String}\n     * @alias EditSession.toString\n     **/\n    this.getValue =\n    this.toString = function() {\n        return this.doc.getValue();\n    };\n\n    /**\n     * Returns selection object.\n     **/\n    this.getSelection = function() {\n        return this.selection;\n    };\n\n    /**\n     * {:BackgroundTokenizer.getState}\n     * @param {Number} row The row to start at\n     *\n     * @related BackgroundTokenizer.getState\n     **/\n    this.getState = function(row) {\n        return this.bgTokenizer.getState(row);\n    };\n\n    /**\n     * Starts tokenizing at the row indicated. Returns a list of objects of the tokenized rows.\n     * @param {Number} row The row to start at\n     *\n     *\n     *\n     **/\n    this.getTokens = function(row) {\n        return this.bgTokenizer.getTokens(row);\n    };\n\n    /**\n     * Returns an object indicating the token at the current row. The object has two properties: `index` and `start`.\n     * @param {Number} row The row number to retrieve from\n     * @param {Number} column The column number to retrieve from\n     *\n     *\n     **/\n    this.getTokenAt = function(row, column) {\n        var tokens = this.bgTokenizer.getTokens(row);\n        var token, c = 0;\n        if (column == null) {\n            var i = tokens.length - 1;\n            c = this.getLine(row).length;\n        } else {\n            for (var i = 0; i < tokens.length; i++) {\n                c += tokens[i].value.length;\n                if (c >= column)\n                    break;\n            }\n        }\n        token = tokens[i];\n        if (!token)\n            return null;\n        token.index = i;\n        token.start = c - token.value.length;\n        return token;\n    };\n\n    /**\n     * Sets the undo manager.\n     * @param {UndoManager} undoManager The new undo manager\n     *\n     *\n     **/\n    this.setUndoManager = function(undoManager) {\n        this.$undoManager = undoManager;\n        \n        if (this.$informUndoManager)\n            this.$informUndoManager.cancel();\n        \n        if (undoManager) {\n            var self = this;\n            undoManager.addSession(this);\n            this.$syncInformUndoManager = function() {\n                self.$informUndoManager.cancel();\n                self.mergeUndoDeltas = false;\n            };\n            this.$informUndoManager = lang.delayedCall(this.$syncInformUndoManager);\n        } else {\n            this.$syncInformUndoManager = function() {};\n        }\n    };\n\n    /**\n     * starts a new group in undo history\n     **/\n    this.markUndoGroup = function() {\n        if (this.$syncInformUndoManager)\n            this.$syncInformUndoManager();\n    };\n    \n    this.$defaultUndoManager = {\n        undo: function() {},\n        redo: function() {},\n        reset: function() {},\n        add: function() {},\n        addSelection: function() {},\n        startNewGroup: function() {},\n        addSession: function() {}\n    };\n\n    /**\n     * Returns the current undo manager.\n     **/\n    this.getUndoManager = function() {\n        return this.$undoManager || this.$defaultUndoManager;\n    };\n\n    /**\n     * Returns the current value for tabs. If the user is using soft tabs, this will be a series of spaces (defined by [[EditSession.getTabSize `getTabSize()`]]); otherwise it's simply `'\\t'`.\n     **/\n    this.getTabString = function() {\n        if (this.getUseSoftTabs()) {\n            return lang.stringRepeat(\" \", this.getTabSize());\n        } else {\n            return \"\\t\";\n        }\n    };\n\n    /**\n     * Pass `true` to enable the use of soft tabs. Soft tabs means you're using spaces instead of the tab character (`'\\t'`).\n     * @param {Boolean} useSoftTabs Value indicating whether or not to use soft tabs\n     **/\n    this.setUseSoftTabs = function(val) {\n        this.setOption(\"useSoftTabs\", val);\n    };\n    /**\n     * Returns `true` if soft tabs are being used, `false` otherwise.\n     * @returns {Boolean}\n     **/\n    this.getUseSoftTabs = function() {\n        // todo might need more general way for changing settings from mode, but this is ok for now\n        return this.$useSoftTabs && !this.$mode.$indentWithTabs;\n    };\n    /**\n     * Set the number of spaces that define a soft tab; for example, passing in `4` transforms the soft tabs to be equivalent to four spaces. This function also emits the `changeTabSize` event.\n     * @param {Number} tabSize The new tab size\n     **/\n    this.setTabSize = function(tabSize) {\n        this.setOption(\"tabSize\", tabSize);\n    };\n    /**\n     * Returns the current tab size.\n     **/\n    this.getTabSize = function() {\n        return this.$tabSize;\n    };\n\n    /**\n     * Returns `true` if the character at the position is a soft tab.\n     * @param {Object} position The position to check\n     *\n     **/\n    this.isTabStop = function(position) {\n        return this.$useSoftTabs && (position.column % this.$tabSize === 0);\n    };\n\n    /**\n     * Set whether keyboard navigation of soft tabs moves the cursor within the soft tab, rather than over\n     * @param {Boolean} navigateWithinSoftTabs Value indicating whether or not to navigate within soft tabs\n     **/\n    this.setNavigateWithinSoftTabs = function (navigateWithinSoftTabs) {\n        this.setOption(\"navigateWithinSoftTabs\", navigateWithinSoftTabs);\n    };\n    /**\n     * Returns `true` if keyboard navigation moves the cursor within soft tabs, `false` if it moves the cursor over soft tabs.\n     * @returns {Boolean}\n     **/\n    this.getNavigateWithinSoftTabs = function() {\n        return this.$navigateWithinSoftTabs;\n    };\n\n    this.$overwrite = false;\n    /**\n     * Pass in `true` to enable overwrites in your session, or `false` to disable.\n     *\n     * If overwrites is enabled, any text you enter will type over any text after it. If the value of `overwrite` changes, this function also emits the `changeOverwrite` event.\n     *\n     * @param {Boolean} overwrite Defines whether or not to set overwrites\n     *\n     *\n     **/\n    this.setOverwrite = function(overwrite) {\n        this.setOption(\"overwrite\", overwrite);\n    };\n\n    /**\n     * Returns `true` if overwrites are enabled; `false` otherwise.\n     **/\n    this.getOverwrite = function() {\n        return this.$overwrite;\n    };\n\n    /**\n     * Sets the value of overwrite to the opposite of whatever it currently is.\n     **/\n    this.toggleOverwrite = function() {\n        this.setOverwrite(!this.$overwrite);\n    };\n\n    /**\n     * Adds `className` to the `row`, to be used for CSS stylings and whatnot.\n     * @param {Number} row The row number\n     * @param {String} className The class to add\n     *\n     **/\n    this.addGutterDecoration = function(row, className) {\n        if (!this.$decorations[row])\n            this.$decorations[row] = \"\";\n        this.$decorations[row] += \" \" + className;\n        this._signal(\"changeBreakpoint\", {});\n    };\n\n    /**\n     * Removes `className` from the `row`.\n     * @param {Number} row The row number\n     * @param {String} className The class to add\n     *\n     **/\n    this.removeGutterDecoration = function(row, className) {\n        this.$decorations[row] = (this.$decorations[row] || \"\").replace(\" \" + className, \"\");\n        this._signal(\"changeBreakpoint\", {});\n    };\n\n    /**\n     * Returns an array of strings, indicating the breakpoint class (if any) applied to each row.\n     * @returns {[String]}\n     **/\n    this.getBreakpoints = function() {\n        return this.$breakpoints;\n    };\n\n    /**\n     * Sets a breakpoint on every row number given by `rows`. This function also emites the `'changeBreakpoint'` event.\n     * @param {Array} rows An array of row indices\n     *\n     **/\n    this.setBreakpoints = function(rows) {\n        this.$breakpoints = [];\n        for (var i=0; i<rows.length; i++) {\n            this.$breakpoints[rows[i]] = \"ace_breakpoint\";\n        }\n        this._signal(\"changeBreakpoint\", {});\n    };\n\n    /**\n     * Removes all breakpoints on the rows. This function also emits the `'changeBreakpoint'` event.\n     **/\n    this.clearBreakpoints = function() {\n        this.$breakpoints = [];\n        this._signal(\"changeBreakpoint\", {});\n    };\n\n    /**\n     * Sets a breakpoint on the row number given by `row`. This function also emits the `'changeBreakpoint'` event.\n     * @param {Number} row A row index\n     * @param {String} className Class of the breakpoint\n     *\n     **/\n    this.setBreakpoint = function(row, className) {\n        if (className === undefined)\n            className = \"ace_breakpoint\";\n        if (className)\n            this.$breakpoints[row] = className;\n        else\n            delete this.$breakpoints[row];\n        this._signal(\"changeBreakpoint\", {});\n    };\n\n    /**\n     * Removes a breakpoint on the row number given by `row`. This function also emits the `'changeBreakpoint'` event.\n     * @param {Number} row A row index\n     *\n     **/\n    this.clearBreakpoint = function(row) {\n        delete this.$breakpoints[row];\n        this._signal(\"changeBreakpoint\", {});\n    };\n\n    /**\n     * Adds a new marker to the given `Range`. If `inFront` is `true`, a front marker is defined, and the `'changeFrontMarker'` event fires; otherwise, the `'changeBackMarker'` event fires.\n     * @param {Range} range Define the range of the marker\n     * @param {String} clazz Set the CSS class for the marker\n     * @param {Function | String} type Identify the type of the marker\n     * @param {Boolean} inFront Set to `true` to establish a front marker\n     *\n     * @return {Number} The new marker id\n     **/\n    this.addMarker = function(range, clazz, type, inFront) {\n        var id = this.$markerId++;\n\n        var marker = {\n            range : range,\n            type : type || \"line\",\n            renderer: typeof type == \"function\" ? type : null,\n            clazz : clazz,\n            inFront: !!inFront,\n            id: id\n        };\n\n        if (inFront) {\n            this.$frontMarkers[id] = marker;\n            this._signal(\"changeFrontMarker\");\n        } else {\n            this.$backMarkers[id] = marker;\n            this._signal(\"changeBackMarker\");\n        }\n\n        return id;\n    };\n\n    /**\n     * Adds a dynamic marker to the session.\n     * @param {Object} marker object with update method\n     * @param {Boolean} inFront Set to `true` to establish a front marker\n     *\n     * @return {Object} The added marker\n     **/\n    this.addDynamicMarker = function(marker, inFront) {\n        if (!marker.update)\n            return;\n        var id = this.$markerId++;\n        marker.id = id;\n        marker.inFront = !!inFront;\n\n        if (inFront) {\n            this.$frontMarkers[id] = marker;\n            this._signal(\"changeFrontMarker\");\n        } else {\n            this.$backMarkers[id] = marker;\n            this._signal(\"changeBackMarker\");\n        }\n\n        return marker;\n    };\n\n    /**\n     * Removes the marker with the specified ID. If this marker was in front, the `'changeFrontMarker'` event is emitted. If the marker was in the back, the `'changeBackMarker'` event is emitted.\n     * @param {Number} markerId A number representing a marker\n     *\n     **/\n    this.removeMarker = function(markerId) {\n        var marker = this.$frontMarkers[markerId] || this.$backMarkers[markerId];\n        if (!marker)\n            return;\n\n        var markers = marker.inFront ? this.$frontMarkers : this.$backMarkers;\n        delete (markers[markerId]);\n        this._signal(marker.inFront ? \"changeFrontMarker\" : \"changeBackMarker\");\n    };\n\n    /**\n     * Returns an object containing all of the markers, either front or back.\n     * @param {Boolean} inFront If `true`, indicates you only want front markers; `false` indicates only back markers\n     *\n     * @returns {Object}\n     **/\n    this.getMarkers = function(inFront) {\n        return inFront ? this.$frontMarkers : this.$backMarkers;\n    };\n\n    this.highlight = function(re) {\n        if (!this.$searchHighlight) {\n            var highlight = new SearchHighlight(null, \"ace_selected-word\", \"text\");\n            this.$searchHighlight = this.addDynamicMarker(highlight);\n        }\n        this.$searchHighlight.setRegexp(re);\n    };\n\n    // experimental\n    this.highlightLines = function(startRow, endRow, clazz, inFront) {\n        if (typeof endRow != \"number\") {\n            clazz = endRow;\n            endRow = startRow;\n        }\n        if (!clazz)\n            clazz = \"ace_step\";\n\n        var range = new Range(startRow, 0, endRow, Infinity);\n        range.id = this.addMarker(range, clazz, \"fullLine\", inFront);\n        return range;\n    };\n\n    /*\n     * Error:\n     *  {\n     *    row: 12,\n     *    column: 2, //can be undefined\n     *    text: \"Missing argument\",\n     *    type: \"error\" // or \"warning\" or \"info\"\n     *  }\n     */\n    /**\n     * Sets annotations for the `EditSession`. This functions emits the `'changeAnnotation'` event.\n     * @param {Array} annotations A list of annotations\n     *\n     **/\n    this.setAnnotations = function(annotations) {\n        this.$annotations = annotations;\n        this._signal(\"changeAnnotation\", {});\n    };\n\n    /**\n     * Returns the annotations for the `EditSession`.\n     * @returns {Array}\n     **/\n    this.getAnnotations = function() {\n        return this.$annotations || [];\n    };\n\n    /**\n     * Clears all the annotations for this session. This function also triggers the `'changeAnnotation'` event.\n     **/\n    this.clearAnnotations = function() {\n        this.setAnnotations([]);\n    };\n\n    /**\n     * If `text` contains either the newline (`\\n`) or carriage-return ('\\r') characters, `$autoNewLine` stores that value.\n     * @param {String} text A block of text\n     *\n     **/\n    this.$detectNewLine = function(text) {\n        var match = text.match(/^.*?(\\r?\\n)/m);\n        if (match) {\n            this.$autoNewLine = match[1];\n        } else {\n            this.$autoNewLine = \"\\n\";\n        }\n    };\n\n    /**\n     * Given a starting row and column, this method returns the `Range` of the first word boundary it finds.\n     * @param {Number} row The row to start at\n     * @param {Number} column The column to start at\n     *\n     * @returns {Range}\n     **/\n    this.getWordRange = function(row, column) {\n        var line = this.getLine(row);\n\n        var inToken = false;\n        if (column > 0)\n            inToken = !!line.charAt(column - 1).match(this.tokenRe);\n\n        if (!inToken)\n            inToken = !!line.charAt(column).match(this.tokenRe);\n\n        if (inToken)\n            var re = this.tokenRe;\n        else if (/^\\s+$/.test(line.slice(column-1, column+1)))\n            var re = /\\s/;\n        else\n            var re = this.nonTokenRe;\n\n        var start = column;\n        if (start > 0) {\n            do {\n                start--;\n            }\n            while (start >= 0 && line.charAt(start).match(re));\n            start++;\n        }\n\n        var end = column;\n        while (end < line.length && line.charAt(end).match(re)) {\n            end++;\n        }\n\n        return new Range(row, start, row, end);\n    };\n\n    /**\n     * Gets the range of a word, including its right whitespace.\n     * @param {Number} row The row number to start from\n     * @param {Number} column The column number to start from\n     *\n     * @return {Range}\n     **/\n    this.getAWordRange = function(row, column) {\n        var wordRange = this.getWordRange(row, column);\n        var line = this.getLine(wordRange.end.row);\n\n        while (line.charAt(wordRange.end.column).match(/[ \\t]/)) {\n            wordRange.end.column += 1;\n        }\n        return wordRange;\n    };\n\n    /**\n     * {:Document.setNewLineMode.desc}\n     * @param {String} newLineMode {:Document.setNewLineMode.param}\n     *\n     *\n     * @related Document.setNewLineMode\n     **/\n    this.setNewLineMode = function(newLineMode) {\n        this.doc.setNewLineMode(newLineMode);\n    };\n\n    /**\n     *\n     * Returns the current new line mode.\n     * @returns {String}\n     * @related Document.getNewLineMode\n     **/\n    this.getNewLineMode = function() {\n        return this.doc.getNewLineMode();\n    };\n\n    /**\n     * Identifies if you want to use a worker for the `EditSession`.\n     * @param {Boolean} useWorker Set to `true` to use a worker\n     *\n     **/\n    this.setUseWorker = function(useWorker) { this.setOption(\"useWorker\", useWorker); };\n\n    /**\n     * Returns `true` if workers are being used.\n     **/\n    this.getUseWorker = function() { return this.$useWorker; };\n\n    /**\n     * Reloads all the tokens on the current session. This function calls [[BackgroundTokenizer.start `BackgroundTokenizer.start ()`]] to all the rows; it also emits the `'tokenizerUpdate'` event.\n     **/\n    this.onReloadTokenizer = function(e) {\n        var rows = e.data;\n        this.bgTokenizer.start(rows.first);\n        this._signal(\"tokenizerUpdate\", e);\n    };\n\n    this.$modes = {};\n\n    /**\n     * Sets a new text mode for the `EditSession`. This method also emits the `'changeMode'` event. If a [[BackgroundTokenizer `BackgroundTokenizer`]] is set, the `'tokenizerUpdate'` event is also emitted.\n     * @param {TextMode} mode Set a new text mode\n     * @param {cb} optional callback\n     *\n     **/\n    this.$mode = null;\n    this.$modeId = null;\n    this.setMode = function(mode, cb) {\n        if (mode && typeof mode === \"object\") {\n            if (mode.getTokenizer)\n                return this.$onChangeMode(mode);\n            var options = mode;\n            var path = options.path;\n        } else {\n            path = mode || \"ace/mode/text\";\n        }\n\n        // this is needed if ace isn't on require path (e.g tests in node)\n        if (!this.$modes[\"ace/mode/text\"])\n            this.$modes[\"ace/mode/text\"] = new TextMode();\n\n        if (this.$modes[path] && !options) {\n            this.$onChangeMode(this.$modes[path]);\n            cb && cb();\n            return;\n        }\n        // load on demand\n        this.$modeId = path;\n        config.loadModule([\"mode\", path], function(m) {\n            if (this.$modeId !== path)\n                return cb && cb();\n            if (this.$modes[path] && !options) {\n                this.$onChangeMode(this.$modes[path]);\n            } else if (m && m.Mode) {\n                m = new m.Mode(options);\n                if (!options) {\n                    this.$modes[path] = m;\n                    m.$id = path;\n                }\n                this.$onChangeMode(m);\n            }\n            cb && cb();\n        }.bind(this));\n\n        // set mode to text until loading is finished\n        if (!this.$mode)\n            this.$onChangeMode(this.$modes[\"ace/mode/text\"], true);\n    };\n\n    this.$onChangeMode = function(mode, $isPlaceholder) {\n        if (!$isPlaceholder)\n            this.$modeId = mode.$id;\n        if (this.$mode === mode) \n            return;\n\n        this.$mode = mode;\n\n        this.$stopWorker();\n\n        if (this.$useWorker)\n            this.$startWorker();\n\n        var tokenizer = mode.getTokenizer();\n\n        if(tokenizer.addEventListener !== undefined) {\n            var onReloadTokenizer = this.onReloadTokenizer.bind(this);\n            tokenizer.addEventListener(\"update\", onReloadTokenizer);\n        }\n\n        if (!this.bgTokenizer) {\n            this.bgTokenizer = new BackgroundTokenizer(tokenizer);\n            var _self = this;\n            this.bgTokenizer.addEventListener(\"update\", function(e) {\n                _self._signal(\"tokenizerUpdate\", e);\n            });\n        } else {\n            this.bgTokenizer.setTokenizer(tokenizer);\n        }\n\n        this.bgTokenizer.setDocument(this.getDocument());\n\n        this.tokenRe = mode.tokenRe;\n        this.nonTokenRe = mode.nonTokenRe;\n\n        \n        if (!$isPlaceholder) {\n            // experimental method, used by c9 findiniles\n            if (mode.attachToSession)\n                mode.attachToSession(this);\n            this.$options.wrapMethod.set.call(this, this.$wrapMethod);\n            this.$setFolding(mode.foldingRules);\n            this.bgTokenizer.start(0);\n            this._emit(\"changeMode\");\n        }\n    };\n\n    this.$stopWorker = function() {\n        if (this.$worker) {\n            this.$worker.terminate();\n            this.$worker = null;\n        }\n    };\n\n    this.$startWorker = function() {\n        try {\n            this.$worker = this.$mode.createWorker(this);\n        } catch (e) {\n            config.warn(\"Could not load worker\", e);\n            this.$worker = null;\n        }\n    };\n\n    /**\n     * Returns the current text mode.\n     * @returns {TextMode} The current text mode\n     **/\n    this.getMode = function() {\n        return this.$mode;\n    };\n\n    this.$scrollTop = 0;\n    /**\n     * This function sets the scroll top value. It also emits the `'changeScrollTop'` event.\n     * @param {Number} scrollTop The new scroll top value\n     *\n     **/\n    this.setScrollTop = function(scrollTop) {\n        // TODO: should we force integer lineheight instead? scrollTop = Math.round(scrollTop); \n        if (this.$scrollTop === scrollTop || isNaN(scrollTop))\n            return;\n\n        this.$scrollTop = scrollTop;\n        this._signal(\"changeScrollTop\", scrollTop);\n    };\n\n    /**\n     * [Returns the value of the distance between the top of the editor and the topmost part of the visible content.]{: #EditSession.getScrollTop}\n     * @returns {Number}\n     **/\n    this.getScrollTop = function() {\n        return this.$scrollTop;\n    };\n\n    this.$scrollLeft = 0;\n    /**\n     * [Sets the value of the distance between the left of the editor and the leftmost part of the visible content.]{: #EditSession.setScrollLeft}\n     **/\n    this.setScrollLeft = function(scrollLeft) {\n        // scrollLeft = Math.round(scrollLeft);\n        if (this.$scrollLeft === scrollLeft || isNaN(scrollLeft))\n            return;\n\n        this.$scrollLeft = scrollLeft;\n        this._signal(\"changeScrollLeft\", scrollLeft);\n    };\n\n    /**\n     * [Returns the value of the distance between the left of the editor and the leftmost part of the visible content.]{: #EditSession.getScrollLeft}\n     * @returns {Number}\n     **/\n    this.getScrollLeft = function() {\n        return this.$scrollLeft;\n    };\n\n    /**\n     * Returns the width of the screen.\n     * @returns {Number}\n     **/\n    this.getScreenWidth = function() {\n        this.$computeWidth();\n        if (this.lineWidgets) \n            return Math.max(this.getLineWidgetMaxWidth(), this.screenWidth);\n        return this.screenWidth;\n    };\n    \n    this.getLineWidgetMaxWidth = function() {\n        if (this.lineWidgetsWidth != null) return this.lineWidgetsWidth;\n        var width = 0;\n        this.lineWidgets.forEach(function(w) {\n            if (w && w.screenWidth > width)\n                width = w.screenWidth;\n        });\n        return this.lineWidgetWidth = width;\n    };\n\n    this.$computeWidth = function(force) {\n        if (this.$modified || force) {\n            this.$modified = false;\n\n            if (this.$useWrapMode)\n                return this.screenWidth = this.$wrapLimit;\n\n            var lines = this.doc.getAllLines();\n            var cache = this.$rowLengthCache;\n            var longestScreenLine = 0;\n            var foldIndex = 0;\n            var foldLine = this.$foldData[foldIndex];\n            var foldStart = foldLine ? foldLine.start.row : Infinity;\n            var len = lines.length;\n\n            for (var i = 0; i < len; i++) {\n                if (i > foldStart) {\n                    i = foldLine.end.row + 1;\n                    if (i >= len)\n                        break;\n                    foldLine = this.$foldData[foldIndex++];\n                    foldStart = foldLine ? foldLine.start.row : Infinity;\n                }\n\n                if (cache[i] == null)\n                    cache[i] = this.$getStringScreenWidth(lines[i])[0];\n\n                if (cache[i] > longestScreenLine)\n                    longestScreenLine = cache[i];\n            }\n            this.screenWidth = longestScreenLine;\n        }\n    };\n\n    /**\n     * Returns a verbatim copy of the given line as it is in the document\n     * @param {Number} row The row to retrieve from\n     *\n     * @returns {String}\n     **/\n    this.getLine = function(row) {\n        return this.doc.getLine(row);\n    };\n\n    /**\n     * Returns an array of strings of the rows between `firstRow` and `lastRow`. This function is inclusive of `lastRow`.\n     * @param {Number} firstRow The first row index to retrieve\n     * @param {Number} lastRow The final row index to retrieve\n     *\n     * @returns {[String]}\n     *\n     **/\n    this.getLines = function(firstRow, lastRow) {\n        return this.doc.getLines(firstRow, lastRow);\n    };\n\n    /**\n     * Returns the number of rows in the document.\n     * @returns {Number}\n     **/\n    this.getLength = function() {\n        return this.doc.getLength();\n    };\n\n    /**\n     * {:Document.getTextRange.desc}\n     * @param {Range} range The range to work with\n     *\n     * @returns {String}\n     **/\n    this.getTextRange = function(range) {\n        return this.doc.getTextRange(range || this.selection.getRange());\n    };\n\n    /**\n     * Inserts a block of `text` and the indicated `position`.\n     * @param {Object} position The position {row, column} to start inserting at\n     * @param {String} text A chunk of text to insert\n     * @returns {Object} The position of the last line of `text`. If the length of `text` is 0, this function simply returns `position`.\n     *\n     *\n     **/\n    this.insert = function(position, text) {\n        return this.doc.insert(position, text);\n    };\n\n    /**\n     * Removes the `range` from the document.\n     * @param {Range} range A specified Range to remove\n     * @returns {Object} The new `start` property of the range, which contains `startRow` and `startColumn`. If `range` is empty, this function returns the unmodified value of `range.start`.\n     *\n     * @related Document.remove\n     *\n     **/\n    this.remove = function(range) {\n        return this.doc.remove(range);\n    };\n    \n    /**\n     * Removes a range of full lines. This method also triggers the `'change'` event.\n     * @param {Number} firstRow The first row to be removed\n     * @param {Number} lastRow The last row to be removed\n     * @returns {[String]} Returns all the removed lines.\n     *\n     * @related Document.removeFullLines\n     *\n     **/\n    this.removeFullLines = function(firstRow, lastRow){\n        return this.doc.removeFullLines(firstRow, lastRow);\n    };\n\n    /**\n     * Reverts previous changes to your document.\n     * @param {Array} deltas An array of previous changes\n     * @param {Boolean} dontSelect [If `true`, doesn't select the range of where the change occured]{: #dontSelect}\n     *\n     * @returns {Range}\n     **/\n    this.undoChanges = function(deltas, dontSelect) {\n        if (!deltas.length)\n            return;\n\n        this.$fromUndo = true;\n        for (var i = deltas.length - 1; i != -1; i--) {\n            var delta = deltas[i];\n            if (delta.action == \"insert\" || delta.action == \"remove\") {\n                this.doc.revertDelta(delta);\n            } else if (delta.folds) {\n                this.addFolds(delta.folds);\n            }\n        }\n        if (!dontSelect && this.$undoSelect) {\n            // console.log(deltas.selectionBefore + \"uuu\")\n            if (deltas.selectionBefore)\n                this.selection.fromJSON(deltas.selectionBefore);\n            else\n                this.selection.setRange(this.$getUndoSelection(deltas, true));\n        }\n        this.$fromUndo = false;\n    };\n\n    /**\n     * Re-implements a previously undone change to your document.\n     * @param {Array} deltas An array of previous changes\n     * @param {Boolean} dontSelect {:dontSelect}\n     *\n     * @returns {Range}\n     **/\n    this.redoChanges = function(deltas, dontSelect) {\n        if (!deltas.length)\n            return;\n\n        this.$fromUndo = true;\n        for (var i = 0; i < deltas.length; i++) {\n            var delta = deltas[i];\n            if (delta.action == \"insert\" || delta.action == \"remove\") {\n                this.doc.applyDelta(delta);\n            }\n        }\n\n        if (!dontSelect && this.$undoSelect) {\n            if (deltas.selectionAfter)\n                this.selection.fromJSON(deltas.selectionAfter);\n            else\n                this.selection.setRange(this.$getUndoSelection(deltas, false));\n        }\n        this.$fromUndo = false;\n    };\n\n    /**\n     * Enables or disables highlighting of the range where an undo occurred.\n     * @param {Boolean} enable If `true`, selects the range of the reinserted change\n     *      \n     **/\n    this.setUndoSelect = function(enable) {\n        this.$undoSelect = enable;\n    };\n\n    this.$getUndoSelection = function(deltas, isUndo) {\n        function isInsert(delta) {\n            return isUndo ? delta.action !== \"insert\" : delta.action === \"insert\";\n        }\n\n        var range, point;\n        var lastDeltaIsInsert;\n\n        for (var i = 0; i < deltas.length; i++) {\n            var delta = deltas[i];\n            if (!delta.start) continue; // skip folds\n            if (!range) {\n                if (isInsert(delta)) {\n                    range = Range.fromPoints(delta.start, delta.end);\n                    lastDeltaIsInsert = true;\n                } else {\n                    range = Range.fromPoints(delta.start, delta.start);\n                    lastDeltaIsInsert = false;\n                }\n                continue;\n            }\n            \n            if (isInsert(delta)) {\n                point = delta.start;\n                if (range.compare(point.row, point.column) == -1) {\n                    range.setStart(point);\n                }\n                point = delta.end;\n                if (range.compare(point.row, point.column) == 1) {\n                    range.setEnd(point);\n                }\n                lastDeltaIsInsert = true;\n            } else {\n                point = delta.start;\n                if (range.compare(point.row, point.column) == -1) {\n                    range = Range.fromPoints(delta.start, delta.start);\n                }\n                lastDeltaIsInsert = false;\n            }\n        }\n        return range;\n    };\n\n    /**\n     * Replaces a range in the document with the new `text`.\n     *\n     * @param {Range} range A specified Range to replace\n     * @param {String} text The new text to use as a replacement\n     * @returns {Object} An object containing the final row and column, like this:\n     * ```\n     * {row: endRow, column: 0}\n     * ```\n     * If the text and range are empty, this function returns an object containing the current `range.start` value.\n     * If the text is the exact same as what currently exists, this function returns an object containing the current `range.end` value.\n     *\n     * @related Document.replace\n     **/\n    this.replace = function(range, text) {\n        return this.doc.replace(range, text);\n    };\n\n    /**\n     * Moves a range of text from the given range to the given position. `toPosition` is an object that looks like this:\n     *  ```json\n     *    { row: newRowLocation, column: newColumnLocation }\n     *  ```\n     * @param {Range} fromRange The range of text you want moved within the document\n     * @param {Object} toPosition The location (row and column) where you want to move the text to\n     * @returns {Range} The new range where the text was moved to.\n     **/\n    this.moveText = function(fromRange, toPosition, copy) {\n        var text = this.getTextRange(fromRange);\n        var folds = this.getFoldsInRange(fromRange);\n\n        var toRange = Range.fromPoints(toPosition, toPosition);\n        if (!copy) {\n            this.remove(fromRange);\n            var rowDiff = fromRange.start.row - fromRange.end.row;\n            var collDiff = rowDiff ? -fromRange.end.column : fromRange.start.column - fromRange.end.column;\n            if (collDiff) {\n                if (toRange.start.row == fromRange.end.row && toRange.start.column > fromRange.end.column)\n                    toRange.start.column += collDiff;\n                if (toRange.end.row == fromRange.end.row && toRange.end.column > fromRange.end.column)\n                    toRange.end.column += collDiff;\n            }\n            if (rowDiff && toRange.start.row >= fromRange.end.row) {\n                toRange.start.row += rowDiff;\n                toRange.end.row += rowDiff;\n            }\n        }\n\n        toRange.end = this.insert(toRange.start, text);\n        if (folds.length) {\n            var oldStart = fromRange.start;\n            var newStart = toRange.start;\n            var rowDiff = newStart.row - oldStart.row;\n            var collDiff = newStart.column - oldStart.column;\n            this.addFolds(folds.map(function(x) {\n                x = x.clone();\n                if (x.start.row == oldStart.row)\n                    x.start.column += collDiff;\n                if (x.end.row == oldStart.row)\n                    x.end.column += collDiff;\n                x.start.row += rowDiff;\n                x.end.row += rowDiff;\n                return x;\n            }));\n        }\n\n        return toRange;\n    };\n\n    /**\n     * Indents all the rows, from `startRow` to `endRow` (inclusive), by prefixing each row with the token in `indentString`.\n     *\n     * If `indentString` contains the `'\\t'` character, it's replaced by whatever is defined by [[EditSession.getTabString `getTabString()`]].\n     * @param {Number} startRow Starting row\n     * @param {Number} endRow Ending row\n     * @param {String} indentString The indent token\n     *\n     *\n     **/\n    this.indentRows = function(startRow, endRow, indentString) {\n        indentString = indentString.replace(/\\t/g, this.getTabString());\n        for (var row=startRow; row<=endRow; row++)\n            this.doc.insertInLine({row: row, column: 0}, indentString);\n    };\n\n    /**\n     * Outdents all the rows defined by the `start` and `end` properties of `range`.\n     * @param {Range} range A range of rows\n     *\n     **/\n    this.outdentRows = function (range) {\n        var rowRange = range.collapseRows();\n        var deleteRange = new Range(0, 0, 0, 0);\n        var size = this.getTabSize();\n\n        for (var i = rowRange.start.row; i <= rowRange.end.row; ++i) {\n            var line = this.getLine(i);\n\n            deleteRange.start.row = i;\n            deleteRange.end.row = i;\n            for (var j = 0; j < size; ++j)\n                if (line.charAt(j) != ' ')\n                    break;\n            if (j < size && line.charAt(j) == '\\t') {\n                deleteRange.start.column = j;\n                deleteRange.end.column = j + 1;\n            } else {\n                deleteRange.start.column = 0;\n                deleteRange.end.column = j;\n            }\n            this.remove(deleteRange);\n        }\n    };\n\n    this.$moveLines = function(firstRow, lastRow, dir) {\n        firstRow = this.getRowFoldStart(firstRow);\n        lastRow = this.getRowFoldEnd(lastRow);\n        if (dir < 0) {\n            var row = this.getRowFoldStart(firstRow + dir);\n            if (row < 0) return 0;\n            var diff = row-firstRow;\n        } else if (dir > 0) {\n            var row = this.getRowFoldEnd(lastRow + dir);\n            if (row > this.doc.getLength()-1) return 0;\n            var diff = row-lastRow;\n        } else {\n            firstRow = this.$clipRowToDocument(firstRow);\n            lastRow = this.$clipRowToDocument(lastRow);\n            var diff = lastRow - firstRow + 1;\n        }\n\n        var range = new Range(firstRow, 0, lastRow, Number.MAX_VALUE);\n        var folds = this.getFoldsInRange(range).map(function(x){\n            x = x.clone();\n            x.start.row += diff;\n            x.end.row += diff;\n            return x;\n        });\n        \n        var lines = dir == 0\n            ? this.doc.getLines(firstRow, lastRow)\n            : this.doc.removeFullLines(firstRow, lastRow);\n        this.doc.insertFullLines(firstRow+diff, lines);\n        folds.length && this.addFolds(folds);\n        return diff;\n    };\n    /**\n     * Shifts all the lines in the document up one, starting from `firstRow` and ending at `lastRow`.\n     * @param {Number} firstRow The starting row to move up\n     * @param {Number} lastRow The final row to move up\n     * @returns {Number} If `firstRow` is less-than or equal to 0, this function returns 0. Otherwise, on success, it returns -1.\n     *\n     **/\n    this.moveLinesUp = function(firstRow, lastRow) {\n        return this.$moveLines(firstRow, lastRow, -1);\n    };\n\n    /**\n     * Shifts all the lines in the document down one, starting from `firstRow` and ending at `lastRow`.\n     * @param {Number} firstRow The starting row to move down\n     * @param {Number} lastRow The final row to move down\n     * @returns {Number} If `firstRow` is less-than or equal to 0, this function returns 0. Otherwise, on success, it returns -1.\n     **/\n    this.moveLinesDown = function(firstRow, lastRow) {\n        return this.$moveLines(firstRow, lastRow, 1);\n    };\n\n    /**\n     * Duplicates all the text between `firstRow` and `lastRow`.\n     * @param {Number} firstRow The starting row to duplicate\n     * @param {Number} lastRow The final row to duplicate\n     * @returns {Number} Returns the number of new rows added; in other words, `lastRow - firstRow + 1`.\n     *\n     *\n     **/\n    this.duplicateLines = function(firstRow, lastRow) {\n        return this.$moveLines(firstRow, lastRow, 0);\n    };\n\n\n    this.$clipRowToDocument = function(row) {\n        return Math.max(0, Math.min(row, this.doc.getLength()-1));\n    };\n\n    this.$clipColumnToRow = function(row, column) {\n        if (column < 0)\n            return 0;\n        return Math.min(this.doc.getLine(row).length, column);\n    };\n\n\n    this.$clipPositionToDocument = function(row, column) {\n        column = Math.max(0, column);\n\n        if (row < 0) {\n            row = 0;\n            column = 0;\n        } else {\n            var len = this.doc.getLength();\n            if (row >= len) {\n                row = len - 1;\n                column = this.doc.getLine(len-1).length;\n            } else {\n                column = Math.min(this.doc.getLine(row).length, column);\n            }\n        }\n\n        return {\n            row: row,\n            column: column\n        };\n    };\n\n    this.$clipRangeToDocument = function(range) {\n        if (range.start.row < 0) {\n            range.start.row = 0;\n            range.start.column = 0;\n        } else {\n            range.start.column = this.$clipColumnToRow(\n                range.start.row,\n                range.start.column\n            );\n        }\n\n        var len = this.doc.getLength() - 1;\n        if (range.end.row > len) {\n            range.end.row = len;\n            range.end.column = this.doc.getLine(len).length;\n        } else {\n            range.end.column = this.$clipColumnToRow(\n                range.end.row,\n                range.end.column\n            );\n        }\n        return range;\n    };\n\n    // WRAPMODE\n    this.$wrapLimit = 80;\n    this.$useWrapMode = false;\n    this.$wrapLimitRange = {\n        min : null,\n        max : null\n    };\n\n    /**\n     * Sets whether or not line wrapping is enabled. If `useWrapMode` is different than the current value, the `'changeWrapMode'` event is emitted.\n     * @param {Boolean} useWrapMode Enable (or disable) wrap mode\n     *\n     **/\n    this.setUseWrapMode = function(useWrapMode) {\n        if (useWrapMode != this.$useWrapMode) {\n            this.$useWrapMode = useWrapMode;\n            this.$modified = true;\n            this.$resetRowCache(0);\n\n            // If wrapMode is activaed, the wrapData array has to be initialized.\n            if (useWrapMode) {\n                var len = this.getLength();\n                this.$wrapData = Array(len);\n                this.$updateWrapData(0, len - 1);\n            }\n\n            this._signal(\"changeWrapMode\");\n        }\n    };\n\n    /**\n     * Returns `true` if wrap mode is being used; `false` otherwise.\n     * @returns {Boolean}\n     **/\n    this.getUseWrapMode = function() {\n        return this.$useWrapMode;\n    };\n\n    // Allow the wrap limit to move freely between min and max. Either\n    // parameter can be null to allow the wrap limit to be unconstrained\n    // in that direction. Or set both parameters to the same number to pin\n    // the limit to that value.\n    /**\n     * Sets the boundaries of wrap. Either value can be `null` to have an unconstrained wrap, or, they can be the same number to pin the limit. If the wrap limits for `min` or `max` are different, this method also emits the `'changeWrapMode'` event.\n     * @param {Number} min The minimum wrap value (the left side wrap)\n     * @param {Number} max The maximum wrap value (the right side wrap)\n     *\n     **/\n    this.setWrapLimitRange = function(min, max) {\n        if (this.$wrapLimitRange.min !== min || this.$wrapLimitRange.max !== max) {\n            this.$wrapLimitRange = { min: min, max: max };\n            this.$modified = true;\n            this.$bidiHandler.markAsDirty();\n\n            // This will force a recalculation of the wrap limit\n            if (this.$useWrapMode)\n                this._signal(\"changeWrapMode\");\n        }\n    };\n\n    /**\n     * This should generally only be called by the renderer when a resize is detected.\n     * @param {Number} desiredLimit The new wrap limit\n     * @returns {Boolean}\n     *\n     * @private\n     **/\n    this.adjustWrapLimit = function(desiredLimit, $printMargin) {\n        var limits = this.$wrapLimitRange;\n        if (limits.max < 0)\n            limits = {min: $printMargin, max: $printMargin};\n        var wrapLimit = this.$constrainWrapLimit(desiredLimit, limits.min, limits.max);\n        if (wrapLimit != this.$wrapLimit && wrapLimit > 1) {\n            this.$wrapLimit = wrapLimit;\n            this.$modified = true;\n            if (this.$useWrapMode) {\n                this.$updateWrapData(0, this.getLength() - 1);\n                this.$resetRowCache(0);\n                this._signal(\"changeWrapLimit\");\n            }\n            return true;\n        }\n        return false;\n    };\n\n    this.$constrainWrapLimit = function(wrapLimit, min, max) {\n        if (min)\n            wrapLimit = Math.max(min, wrapLimit);\n\n        if (max)\n            wrapLimit = Math.min(max, wrapLimit);\n\n        return wrapLimit;\n    };\n\n    /**\n     * Returns the value of wrap limit.\n     * @returns {Number} The wrap limit.\n     **/\n    this.getWrapLimit = function() {\n        return this.$wrapLimit;\n    };\n    \n    /**\n     * Sets the line length for soft wrap in the editor. Lines will break\n     *  at a minimum of the given length minus 20 chars and at a maximum\n     *  of the given number of chars.\n     * @param {number} limit The maximum line length in chars, for soft wrapping lines.\n     */\n    this.setWrapLimit = function (limit) {\n        this.setWrapLimitRange(limit, limit);\n    };\n    \n    /**\n     * Returns an object that defines the minimum and maximum of the wrap limit; it looks something like this:\n     *\n     *     { min: wrapLimitRange_min, max: wrapLimitRange_max }\n     *\n     * @returns {Object}\n     **/\n    this.getWrapLimitRange = function() {\n        // Avoid unexpected mutation by returning a copy\n        return {\n            min : this.$wrapLimitRange.min,\n            max : this.$wrapLimitRange.max\n        };\n    };\n\n    this.$updateInternalDataOnChange = function(delta) {\n        var useWrapMode = this.$useWrapMode;\n        var action = delta.action;\n        var start = delta.start;\n        var end = delta.end;\n        var firstRow = start.row;\n        var lastRow = end.row;\n        var len = lastRow - firstRow;\n        var removedFolds = null;\n        \n        this.$updating = true;\n        if (len != 0) {\n            if (action === \"remove\") {\n                this[useWrapMode ? \"$wrapData\" : \"$rowLengthCache\"].splice(firstRow, len);\n\n                var foldLines = this.$foldData;\n                removedFolds = this.getFoldsInRange(delta);\n                this.removeFolds(removedFolds);\n\n                var foldLine = this.getFoldLine(end.row);\n                var idx = 0;\n                if (foldLine) {\n                    foldLine.addRemoveChars(end.row, end.column, start.column - end.column);\n                    foldLine.shiftRow(-len);\n\n                    var foldLineBefore = this.getFoldLine(firstRow);\n                    if (foldLineBefore && foldLineBefore !== foldLine) {\n                        foldLineBefore.merge(foldLine);\n                        foldLine = foldLineBefore;\n                    }\n                    idx = foldLines.indexOf(foldLine) + 1;\n                }\n\n                for (idx; idx < foldLines.length; idx++) {\n                    var foldLine = foldLines[idx];\n                    if (foldLine.start.row >= end.row) {\n                        foldLine.shiftRow(-len);\n                    }\n                }\n\n                lastRow = firstRow;\n            } else {\n                var args = Array(len);\n                args.unshift(firstRow, 0);\n                var arr = useWrapMode ? this.$wrapData : this.$rowLengthCache;\n                arr.splice.apply(arr, args);\n\n                // If some new line is added inside of a foldLine, then split\n                // the fold line up.\n                var foldLines = this.$foldData;\n                var foldLine = this.getFoldLine(firstRow);\n                var idx = 0;\n                if (foldLine) {\n                    var cmp = foldLine.range.compareInside(start.row, start.column);\n                    // Inside of the foldLine range. Need to split stuff up.\n                    if (cmp == 0) {\n                        foldLine = foldLine.split(start.row, start.column);\n                        if (foldLine) {\n                            foldLine.shiftRow(len);\n                            foldLine.addRemoveChars(lastRow, 0, end.column - start.column);\n                        }\n                    } else\n                    // Infront of the foldLine but same row. Need to shift column.\n                    if (cmp == -1) {\n                        foldLine.addRemoveChars(firstRow, 0, end.column - start.column);\n                        foldLine.shiftRow(len);\n                    }\n                    // Nothing to do if the insert is after the foldLine.\n                    idx = foldLines.indexOf(foldLine) + 1;\n                }\n\n                for (idx; idx < foldLines.length; idx++) {\n                    var foldLine = foldLines[idx];\n                    if (foldLine.start.row >= firstRow) {\n                        foldLine.shiftRow(len);\n                    }\n                }\n            }\n        } else {\n            // Realign folds. E.g. if you add some new chars before a fold, the\n            // fold should \"move\" to the right.\n            len = Math.abs(delta.start.column - delta.end.column);\n            if (action === \"remove\") {\n                // Get all the folds in the change range and remove them.\n                removedFolds = this.getFoldsInRange(delta);\n                this.removeFolds(removedFolds);\n\n                len = -len;\n            }\n            var foldLine = this.getFoldLine(firstRow);\n            if (foldLine) {\n                foldLine.addRemoveChars(firstRow, start.column, len);\n            }\n        }\n\n        if (useWrapMode && this.$wrapData.length != this.doc.getLength()) {\n            console.error(\"doc.getLength() and $wrapData.length have to be the same!\");\n        }\n        this.$updating = false;\n\n        if (useWrapMode)\n            this.$updateWrapData(firstRow, lastRow);\n        else\n            this.$updateRowLengthCache(firstRow, lastRow);\n\n        return removedFolds;\n    };\n\n    this.$updateRowLengthCache = function(firstRow, lastRow, b) {\n        this.$rowLengthCache[firstRow] = null;\n        this.$rowLengthCache[lastRow] = null;\n    };\n\n    this.$updateWrapData = function(firstRow, lastRow) {\n        var lines = this.doc.getAllLines();\n        var tabSize = this.getTabSize();\n        var wrapData = this.$wrapData;\n        var wrapLimit = this.$wrapLimit;\n        var tokens;\n        var foldLine;\n\n        var row = firstRow;\n        lastRow = Math.min(lastRow, lines.length - 1);\n        while (row <= lastRow) {\n            foldLine = this.getFoldLine(row, foldLine);\n            if (!foldLine) {\n                tokens = this.$getDisplayTokens(lines[row]);\n                wrapData[row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n                row ++;\n            } else {\n                tokens = [];\n                foldLine.walk(function(placeholder, row, column, lastColumn) {\n                        var walkTokens;\n                        if (placeholder != null) {\n                            walkTokens = this.$getDisplayTokens(\n                                            placeholder, tokens.length);\n                            walkTokens[0] = PLACEHOLDER_START;\n                            for (var i = 1; i < walkTokens.length; i++) {\n                                walkTokens[i] = PLACEHOLDER_BODY;\n                            }\n                        } else {\n                            walkTokens = this.$getDisplayTokens(\n                                lines[row].substring(lastColumn, column),\n                                tokens.length);\n                        }\n                        tokens = tokens.concat(walkTokens);\n                    }.bind(this),\n                    foldLine.end.row,\n                    lines[foldLine.end.row].length + 1\n                );\n\n                wrapData[foldLine.start.row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n                row = foldLine.end.row + 1;\n            }\n        }\n    };\n\n    // \"Tokens\"\n    var CHAR = 1,\n        CHAR_EXT = 2,\n        PLACEHOLDER_START = 3,\n        PLACEHOLDER_BODY =  4,\n        PUNCTUATION = 9,\n        SPACE = 10,\n        TAB = 11,\n        TAB_SPACE = 12;\n\n\n    this.$computeWrapSplits = function(tokens, wrapLimit, tabSize) {\n        if (tokens.length == 0) {\n            return [];\n        }\n\n        var splits = [];\n        var displayLength = tokens.length;\n        var lastSplit = 0, lastDocSplit = 0;\n\n        var isCode = this.$wrapAsCode;\n\n        var indentedSoftWrap = this.$indentedSoftWrap;\n        var maxIndent = wrapLimit <= Math.max(2 * tabSize, 8)\n            || indentedSoftWrap === false ? 0 : Math.floor(wrapLimit / 2);\n\n        function getWrapIndent() {\n            var indentation = 0;\n            if (maxIndent === 0)\n                return indentation;\n            if (indentedSoftWrap) {\n                for (var i = 0; i < tokens.length; i++) {\n                    var token = tokens[i];\n                    if (token == SPACE)\n                        indentation += 1;\n                    else if (token == TAB)\n                        indentation += tabSize;\n                    else if (token == TAB_SPACE)\n                        continue;\n                    else\n                        break;\n                }\n            }\n            if (isCode && indentedSoftWrap !== false)\n                indentation += tabSize;\n            return Math.min(indentation, maxIndent);\n        }\n        function addSplit(screenPos) {\n            var displayed = tokens.slice(lastSplit, screenPos);\n\n            // The document size is the current size - the extra width for tabs\n            // and multipleWidth characters.\n            var len = displayed.length;\n            displayed.join(\"\")\n                // Get all the TAB_SPACEs.\n                .replace(/12/g, function() {\n                    len -= 1;\n                })\n                // Get all the CHAR_EXT/multipleWidth characters.\n                .replace(/2/g, function() {\n                    len -= 1;\n                });\n\n            if (!splits.length) {\n                indent = getWrapIndent();\n                splits.indent = indent;\n            }\n            lastDocSplit += len;\n            splits.push(lastDocSplit);\n            lastSplit = screenPos;\n        }\n        var indent = 0;\n        while (displayLength - lastSplit > wrapLimit - indent) {\n            // This is, where the split should be.\n            var split = lastSplit + wrapLimit - indent;\n\n            // If there is a space or tab at this split position, then making\n            // a split is simple.\n            if (tokens[split - 1] >= SPACE && tokens[split] >= SPACE) {\n                /* disabled see https://github.com/ajaxorg/ace/issues/1186\n                // Include all following spaces + tabs in this split as well.\n                while (tokens[split] >= SPACE) {\n                    split ++;\n                } */\n                addSplit(split);\n                continue;\n            }\n\n            // === ELSE ===\n            // Check if split is inside of a placeholder. Placeholder are\n            // not splitable. Therefore, seek the beginning of the placeholder\n            // and try to place the split before the placeholder's start.\n            if (tokens[split] == PLACEHOLDER_START || tokens[split] == PLACEHOLDER_BODY) {\n                // Seek the start of the placeholder and do the split\n                // before the placeholder. By definition there always\n                // a PLACEHOLDER_START between split and lastSplit.\n                for (split; split != lastSplit - 1; split--) {\n                    if (tokens[split] == PLACEHOLDER_START) {\n                        // split++; << No incremental here as we want to\n                        //  have the position before the Placeholder.\n                        break;\n                    }\n                }\n\n                // If the PLACEHOLDER_START is not the index of the\n                // last split, then we can do the split\n                if (split > lastSplit) {\n                    addSplit(split);\n                    continue;\n                }\n\n                // If the PLACEHOLDER_START IS the index of the last\n                // split, then we have to place the split after the\n                // placeholder. So, let's seek for the end of the placeholder.\n                split = lastSplit + wrapLimit;\n                for (split; split < tokens.length; split++) {\n                    if (tokens[split] != PLACEHOLDER_BODY) {\n                        break;\n                    }\n                }\n\n                // If spilt == tokens.length, then the placeholder is the last\n                // thing in the line and adding a new split doesn't make sense.\n                if (split == tokens.length) {\n                    break;  // Breaks the while-loop.\n                }\n\n                // Finally, add the split...\n                addSplit(split);\n                continue;\n            }\n\n            // === ELSE ===\n            // Search for the first non space/tab/placeholder/punctuation token backwards.\n            var minSplit = Math.max(split - (wrapLimit -(wrapLimit>>2)), lastSplit - 1);\n            while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n                split --;\n            }\n            if (isCode) {\n                while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n                    split --;\n                }\n                while (split > minSplit && tokens[split] == PUNCTUATION) {\n                    split --;\n                }\n            } else {\n                while (split > minSplit && tokens[split] < SPACE) {\n                    split --;\n                }\n            }\n            // If we found one, then add the split.\n            if (split > minSplit) {\n                addSplit(++split);\n                continue;\n            }\n\n            // === ELSE ===\n            split = lastSplit + wrapLimit;\n            // The split is inside of a CHAR or CHAR_EXT token and no space\n            // around -> force a split.\n            if (tokens[split] == CHAR_EXT)\n                split--;\n            addSplit(split - indent);\n        }\n        return splits;\n    };\n\n    /**\n     * Given a string, returns an array of the display characters, including tabs and spaces.\n     * @param {String} str The string to check\n     * @param {Number} offset The value to start at\n     *\n     **/\n    this.$getDisplayTokens = function(str, offset) {\n        var arr = [];\n        var tabSize;\n        offset = offset || 0;\n\n        for (var i = 0; i < str.length; i++) {\n            var c = str.charCodeAt(i);\n            // Tab\n            if (c == 9) {\n                tabSize = this.getScreenTabSize(arr.length + offset);\n                arr.push(TAB);\n                for (var n = 1; n < tabSize; n++) {\n                    arr.push(TAB_SPACE);\n                }\n            }\n            // Space\n            else if (c == 32) {\n                arr.push(SPACE);\n            } else if((c > 39 && c < 48) || (c > 57 && c < 64)) {\n                arr.push(PUNCTUATION);\n            }\n            // full width characters\n            else if (c >= 0x1100 && isFullWidth(c)) {\n                arr.push(CHAR, CHAR_EXT);\n            } else {\n                arr.push(CHAR);\n            }\n        }\n        return arr;\n    };\n\n    /**\n     * Calculates the width of the string `str` on the screen while assuming that the string starts at the first column on the screen.\n     * @param {String} str The string to calculate the screen width of\n     * @param {Number} maxScreenColumn\n     * @param {Number} screenColumn\n     * @returns {[Number]} Returns an `int[]` array with two elements:<br/>\n     * The first position indicates the number of columns for `str` on screen.<br/>\n     * The second value contains the position of the document column that this function read until.\n     *\n     **/\n    this.$getStringScreenWidth = function(str, maxScreenColumn, screenColumn) {\n        if (maxScreenColumn == 0)\n            return [0, 0];\n        if (maxScreenColumn == null)\n            maxScreenColumn = Infinity;\n        screenColumn = screenColumn || 0;\n\n        var c, column;\n        for (column = 0; column < str.length; column++) {\n            c = str.charCodeAt(column);\n            // tab\n            if (c == 9) {\n                screenColumn += this.getScreenTabSize(screenColumn);\n            }\n            // full width characters\n            else if (c >= 0x1100 && isFullWidth(c)) {\n                screenColumn += 2;\n            } else {\n                screenColumn += 1;\n            }\n            if (screenColumn > maxScreenColumn) {\n                break;\n            }\n        }\n\n        return [screenColumn, column];\n    };\n\n    this.lineWidgets = null;\n    /**\n     * Returns number of screenrows in a wrapped line.\n     * @param {Number} row The row number to check\n     *\n     * @returns {Number}\n     **/\n    this.getRowLength = function(row) {\n        if (this.lineWidgets)\n            var h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n        else \n            h = 0;\n        if (!this.$useWrapMode || !this.$wrapData[row]) {\n            return 1 + h;\n        } else {\n            return this.$wrapData[row].length + 1 + h;\n        }\n    };\n    this.getRowLineCount = function(row) {\n        if (!this.$useWrapMode || !this.$wrapData[row]) {\n            return 1;\n        } else {\n            return this.$wrapData[row].length + 1;\n        }\n    };\n\n    this.getRowWrapIndent = function(screenRow) {\n        if (this.$useWrapMode) {\n            var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n            var splits = this.$wrapData[pos.row];\n            return splits.length && splits[0] < pos.column ? splits.indent : 0;\n        } else {\n            return 0;\n        }\n    };\n\n    /**\n     * Returns the position (on screen) for the last character in the provided screen row.\n     * @param {Number} screenRow The screen row to check\n     * @returns {Number}\n     *\n     * @related EditSession.documentToScreenColumn\n     **/\n    this.getScreenLastRowColumn = function(screenRow) {\n        var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n        return this.documentToScreenColumn(pos.row, pos.column);\n    };\n\n    /**\n     * For the given document row and column, this returns the column position of the last screen row.\n     * @param {Number} docRow\n     *\n     * @param {Number} docColumn\n     **/\n    this.getDocumentLastRowColumn = function(docRow, docColumn) {\n        var screenRow = this.documentToScreenRow(docRow, docColumn);\n        return this.getScreenLastRowColumn(screenRow);\n    };\n\n    /**\n     * For the given document row and column, this returns the document position of the last row.\n     * @param {Number} docRow\n     * @param {Number} docColumn\n     *\n     **/\n    this.getDocumentLastRowColumnPosition = function(docRow, docColumn) {\n        var screenRow = this.documentToScreenRow(docRow, docColumn);\n        return this.screenToDocumentPosition(screenRow, Number.MAX_VALUE / 10);\n    };\n\n    /**\n     * For the given row, this returns the split data.\n     * @returns {String}\n     **/\n    this.getRowSplitData = function(row) {\n        if (!this.$useWrapMode) {\n            return undefined;\n        } else {\n            return this.$wrapData[row];\n        }\n    };\n\n    /**\n     * The distance to the next tab stop at the specified screen column.\n     * @param {Number} screenColumn The screen column to check\n     *\n     * @returns {Number}\n     **/\n    this.getScreenTabSize = function(screenColumn) {\n        return this.$tabSize - screenColumn % this.$tabSize;\n    };\n\n\n    this.screenToDocumentRow = function(screenRow, screenColumn) {\n        return this.screenToDocumentPosition(screenRow, screenColumn).row;\n    };\n\n\n    this.screenToDocumentColumn = function(screenRow, screenColumn) {\n        return this.screenToDocumentPosition(screenRow, screenColumn).column;\n    };\n\n    /**\n     * Converts characters coordinates on the screen to characters coordinates within the document. [This takes into account code folding, word wrap, tab size, and any other visual modifications.]{: #conversionConsiderations}\n     * @param {Number} screenRow The screen row to check\n     * @param {Number} screenColumn The screen column to check\n     * @param {int} screen character x-offset [optional]\n     *\n     * @returns {Object} The object returned has two properties: `row` and `column`.\n     *\n     * @related EditSession.documentToScreenPosition\n     **/\n    this.screenToDocumentPosition = function(screenRow, screenColumn, offsetX) {\n        if (screenRow < 0)\n            return {row: 0, column: 0};\n\n        var line;\n        var docRow = 0;\n        var docColumn = 0;\n        var column;\n        var row = 0;\n        var rowLength = 0;\n\n        var rowCache = this.$screenRowCache;\n        var i = this.$getRowCacheIndex(rowCache, screenRow);\n        var l = rowCache.length;\n        if (l && i >= 0) {\n            var row = rowCache[i];\n            var docRow = this.$docRowCache[i];\n            var doCache = screenRow > rowCache[l - 1];\n        } else {\n            var doCache = !l;\n        }\n\n        var maxRow = this.getLength() - 1;\n        var foldLine = this.getNextFoldLine(docRow);\n        var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n        while (row <= screenRow) {\n            rowLength = this.getRowLength(docRow);\n            if (row + rowLength > screenRow || docRow >= maxRow) {\n                break;\n            } else {\n                row += rowLength;\n                docRow++;\n                if (docRow > foldStart) {\n                    docRow = foldLine.end.row+1;\n                    foldLine = this.getNextFoldLine(docRow, foldLine);\n                    foldStart = foldLine ? foldLine.start.row : Infinity;\n                }\n            }\n\n            if (doCache) {\n                this.$docRowCache.push(docRow);\n                this.$screenRowCache.push(row);\n            }\n        }\n\n        if (foldLine && foldLine.start.row <= docRow) {\n            line = this.getFoldDisplayLine(foldLine);\n            docRow = foldLine.start.row;\n        } else if (row + rowLength <= screenRow || docRow > maxRow) {\n            // clip at the end of the document\n            return {\n                row: maxRow,\n                column: this.getLine(maxRow).length\n            };\n        } else {\n            line = this.getLine(docRow);\n            foldLine = null;\n        }\n        var wrapIndent = 0, splitIndex = Math.floor(screenRow - row);\n        if (this.$useWrapMode) {\n            var splits = this.$wrapData[docRow];\n            if (splits) {\n                column = splits[splitIndex];\n                if(splitIndex > 0 && splits.length) {\n                    wrapIndent = splits.indent;\n                    docColumn = splits[splitIndex - 1] || splits[splits.length - 1];\n                    line = line.substring(docColumn);\n                }\n            }\n        }\n\n        if (offsetX !== undefined && this.$bidiHandler.isBidiRow(row + splitIndex, docRow, splitIndex))\n            screenColumn = this.$bidiHandler.offsetToCol(offsetX);\n\n        docColumn += this.$getStringScreenWidth(line, screenColumn - wrapIndent)[1];\n\n        // We remove one character at the end so that the docColumn\n        // position returned is not associated to the next row on the screen.\n        if (this.$useWrapMode && docColumn >= column)\n            docColumn = column - 1;\n\n        if (foldLine)\n            return foldLine.idxToPosition(docColumn);\n\n        return {row: docRow, column: docColumn};\n    };\n\n    /**\n     * Converts document coordinates to screen coordinates. {:conversionConsiderations}\n     * @param {Number} docRow The document row to check\n     * @param {Number} docColumn The document column to check\n     * @returns {Object} The object returned by this method has two properties: `row` and `column`.\n     *\n     * @related EditSession.screenToDocumentPosition\n     **/\n    this.documentToScreenPosition = function(docRow, docColumn) {\n        // Normalize the passed in arguments.\n        if (typeof docColumn === \"undefined\")\n            var pos = this.$clipPositionToDocument(docRow.row, docRow.column);\n        else\n            pos = this.$clipPositionToDocument(docRow, docColumn);\n\n        docRow = pos.row;\n        docColumn = pos.column;\n\n        var screenRow = 0;\n        var foldStartRow = null;\n        var fold = null;\n\n        // Clamp the docRow position in case it's inside of a folded block.\n        fold = this.getFoldAt(docRow, docColumn, 1);\n        if (fold) {\n            docRow = fold.start.row;\n            docColumn = fold.start.column;\n        }\n\n        var rowEnd, row = 0;\n\n\n        var rowCache = this.$docRowCache;\n        var i = this.$getRowCacheIndex(rowCache, docRow);\n        var l = rowCache.length;\n        if (l && i >= 0) {\n            var row = rowCache[i];\n            var screenRow = this.$screenRowCache[i];\n            var doCache = docRow > rowCache[l - 1];\n        } else {\n            var doCache = !l;\n        }\n\n        var foldLine = this.getNextFoldLine(row);\n        var foldStart = foldLine ?foldLine.start.row :Infinity;\n\n        while (row < docRow) {\n            if (row >= foldStart) {\n                rowEnd = foldLine.end.row + 1;\n                if (rowEnd > docRow)\n                    break;\n                foldLine = this.getNextFoldLine(rowEnd, foldLine);\n                foldStart = foldLine ?foldLine.start.row :Infinity;\n            }\n            else {\n                rowEnd = row + 1;\n            }\n\n            screenRow += this.getRowLength(row);\n            row = rowEnd;\n\n            if (doCache) {\n                this.$docRowCache.push(row);\n                this.$screenRowCache.push(screenRow);\n            }\n        }\n\n        // Calculate the text line that is displayed in docRow on the screen.\n        var textLine = \"\";\n        // Check if the final row we want to reach is inside of a fold.\n        if (foldLine && row >= foldStart) {\n            textLine = this.getFoldDisplayLine(foldLine, docRow, docColumn);\n            foldStartRow = foldLine.start.row;\n        } else {\n            textLine = this.getLine(docRow).substring(0, docColumn);\n            foldStartRow = docRow;\n        }\n        var wrapIndent = 0;\n        // Clamp textLine if in wrapMode.\n        if (this.$useWrapMode) {\n            var wrapRow = this.$wrapData[foldStartRow];\n            if (wrapRow) {\n                var screenRowOffset = 0;\n                while (textLine.length >= wrapRow[screenRowOffset]) {\n                    screenRow ++;\n                    screenRowOffset++;\n                }\n                textLine = textLine.substring(\n                    wrapRow[screenRowOffset - 1] || 0, textLine.length\n                );\n                wrapIndent = screenRowOffset > 0 ? wrapRow.indent : 0;\n            }\n        }\n\n        return {\n            row: screenRow,\n            column: wrapIndent + this.$getStringScreenWidth(textLine)[0]\n        };\n    };\n\n    /**\n     * For the given document row and column, returns the screen column.\n     * @param {Number} row\n     * @param {Number} docColumn\n     * @returns {Number}\n     *\n     **/\n    this.documentToScreenColumn = function(row, docColumn) {\n        return this.documentToScreenPosition(row, docColumn).column;\n    };\n\n    /**\n     * For the given document row and column, returns the screen row.\n     * @param {Number} docRow\n     * @param {Number} docColumn\n     *\n     **/\n    this.documentToScreenRow = function(docRow, docColumn) {\n        return this.documentToScreenPosition(docRow, docColumn).row;\n    };\n\n    /**\n     * Returns the length of the screen.\n     * @returns {Number}\n     **/\n    this.getScreenLength = function() {\n        var screenRows = 0;\n        var fold = null;\n        if (!this.$useWrapMode) {\n            screenRows = this.getLength();\n\n            // Remove the folded lines again.\n            var foldData = this.$foldData;\n            for (var i = 0; i < foldData.length; i++) {\n                fold = foldData[i];\n                screenRows -= fold.end.row - fold.start.row;\n            }\n        } else {\n            var lastRow = this.$wrapData.length;\n            var row = 0, i = 0;\n            var fold = this.$foldData[i++];\n            var foldStart = fold ? fold.start.row :Infinity;\n\n            while (row < lastRow) {\n                var splits = this.$wrapData[row];\n                screenRows += splits ? splits.length + 1 : 1;\n                row ++;\n                if (row > foldStart) {\n                    row = fold.end.row+1;\n                    fold = this.$foldData[i++];\n                    foldStart = fold ?fold.start.row :Infinity;\n                }\n            }\n        }\n\n        // todo\n        if (this.lineWidgets)\n            screenRows += this.$getWidgetScreenLength();\n\n        return screenRows;\n    };\n    \n    /**\n     * @private\n     *\n     */\n    this.$setFontMetrics = function(fm) {\n        if (!this.$enableVarChar) return;\n        this.$getStringScreenWidth = function(str, maxScreenColumn, screenColumn) {\n            if (maxScreenColumn === 0)\n                return [0, 0];\n            if (!maxScreenColumn)\n                maxScreenColumn = Infinity;\n            screenColumn = screenColumn || 0;\n            \n            var c, column;\n            for (column = 0; column < str.length; column++) {\n                c = str.charAt(column);\n                // tab\n                if (c === \"\\t\") {\n                    screenColumn += this.getScreenTabSize(screenColumn);\n                } else {\n                    screenColumn += fm.getCharacterWidth(c);\n                }\n                if (screenColumn > maxScreenColumn) {\n                    break;\n                }\n            }\n            \n            return [screenColumn, column];\n        };\n    };\n    \n    this.destroy = function() {\n        if (this.bgTokenizer) {\n            this.bgTokenizer.setDocument(null);\n            this.bgTokenizer = null;\n        }\n        this.$stopWorker();\n    };\n\n    this.isFullWidth = isFullWidth;\n\n    // For every keystroke this gets called once per char in the whole doc!!\n    // Wouldn't hurt to make it a bit faster for c >= 0x1100\n    function isFullWidth(c) {\n        if (c < 0x1100)\n            return false;\n        return c >= 0x1100 && c <= 0x115F ||\n               c >= 0x11A3 && c <= 0x11A7 ||\n               c >= 0x11FA && c <= 0x11FF ||\n               c >= 0x2329 && c <= 0x232A ||\n               c >= 0x2E80 && c <= 0x2E99 ||\n               c >= 0x2E9B && c <= 0x2EF3 ||\n               c >= 0x2F00 && c <= 0x2FD5 ||\n               c >= 0x2FF0 && c <= 0x2FFB ||\n               c >= 0x3000 && c <= 0x303E ||\n               c >= 0x3041 && c <= 0x3096 ||\n               c >= 0x3099 && c <= 0x30FF ||\n               c >= 0x3105 && c <= 0x312D ||\n               c >= 0x3131 && c <= 0x318E ||\n               c >= 0x3190 && c <= 0x31BA ||\n               c >= 0x31C0 && c <= 0x31E3 ||\n               c >= 0x31F0 && c <= 0x321E ||\n               c >= 0x3220 && c <= 0x3247 ||\n               c >= 0x3250 && c <= 0x32FE ||\n               c >= 0x3300 && c <= 0x4DBF ||\n               c >= 0x4E00 && c <= 0xA48C ||\n               c >= 0xA490 && c <= 0xA4C6 ||\n               c >= 0xA960 && c <= 0xA97C ||\n               c >= 0xAC00 && c <= 0xD7A3 ||\n               c >= 0xD7B0 && c <= 0xD7C6 ||\n               c >= 0xD7CB && c <= 0xD7FB ||\n               c >= 0xF900 && c <= 0xFAFF ||\n               c >= 0xFE10 && c <= 0xFE19 ||\n               c >= 0xFE30 && c <= 0xFE52 ||\n               c >= 0xFE54 && c <= 0xFE66 ||\n               c >= 0xFE68 && c <= 0xFE6B ||\n               c >= 0xFF01 && c <= 0xFF60 ||\n               c >= 0xFFE0 && c <= 0xFFE6;\n    }\n\n}).call(EditSession.prototype);\n\nrequire(\"./edit_session/folding\").Folding.call(EditSession.prototype);\nrequire(\"./edit_session/bracket_match\").BracketMatch.call(EditSession.prototype);\n\n\nconfig.defineOptions(EditSession.prototype, \"session\", {\n    wrap: {\n        set: function(value) {\n            if (!value || value == \"off\")\n                value = false;\n            else if (value == \"free\")\n                value = true;\n            else if (value == \"printMargin\")\n                value = -1;\n            else if (typeof value == \"string\")\n                value = parseInt(value, 10) || false;\n\n            if (this.$wrap == value)\n                return;\n            this.$wrap = value;\n            if (!value) {\n                this.setUseWrapMode(false);\n            } else {\n                var col = typeof value == \"number\" ? value : null;\n                this.setWrapLimitRange(col, col);\n                this.setUseWrapMode(true);\n            }\n        },\n        get: function() {\n            if (this.getUseWrapMode()) {\n                if (this.$wrap == -1)\n                    return \"printMargin\";\n                if (!this.getWrapLimitRange().min)\n                    return \"free\";\n                return this.$wrap;\n            }\n            return \"off\";\n        },\n        handlesSet: true\n    },    \n    wrapMethod: {\n        // code|text|auto\n        set: function(val) {\n            val = val == \"auto\"\n                ? this.$mode.type != \"text\"\n                : val != \"text\";\n            if (val != this.$wrapAsCode) {\n                this.$wrapAsCode = val;\n                if (this.$useWrapMode) {\n                    this.$modified = true;\n                    this.$resetRowCache(0);\n                    this.$updateWrapData(0, this.getLength() - 1);\n                }\n            }\n        },\n        initialValue: \"auto\"\n    },\n    indentedSoftWrap: { initialValue: true },\n    firstLineNumber: {\n        set: function() {this._signal(\"changeBreakpoint\");},\n        initialValue: 1\n    },\n    useWorker: {\n        set: function(useWorker) {\n            this.$useWorker = useWorker;\n\n            this.$stopWorker();\n            if (useWorker)\n                this.$startWorker();\n        },\n        initialValue: true\n    },\n    useSoftTabs: {initialValue: true},\n    tabSize: {\n        set: function(tabSize) {\n            if (isNaN(tabSize) || this.$tabSize === tabSize) return;\n\n            this.$modified = true;\n            this.$rowLengthCache = [];\n            this.$tabSize = tabSize;\n            this._signal(\"changeTabSize\");\n        },\n        initialValue: 4,\n        handlesSet: true\n    },\n    navigateWithinSoftTabs: {initialValue: false},\n    overwrite: {\n        set: function(val) {this._signal(\"changeOverwrite\");},\n        initialValue: false\n    },\n    newLineMode: {\n        set: function(val) {this.doc.setNewLineMode(val);},\n        get: function() {return this.doc.getNewLineMode();},\n        handlesSet: true\n    },\n    mode: {\n        set: function(val) { this.setMode(val); },\n        get: function() { return this.$modeId; }\n    }\n});\n\nexports.EditSession = EditSession;\n});\n"
  },
  {
    "path": "lib/ace/edit_session_test.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\nif (typeof process !== \"undefined\") {\n    require(\"amd-loader\");\n    require(\"./test/mockdom\");\n}\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar lang = require(\"./lib/lang\");\nvar EditSession = require(\"./edit_session\").EditSession;\nvar Editor = require(\"./editor\").Editor;\nvar UndoManager = require(\"./undomanager\").UndoManager;\nvar MockRenderer = require(\"./test/mockrenderer\").MockRenderer;\nvar Range = require(\"./range\").Range;\nvar assert = require(\"./test/assertions\");\nvar JavaScriptMode = require(\"./mode/javascript\").Mode;\n\nfunction createFoldTestSession() {\n    var lines = [\n        \"function foo(items) {\",\n        \"    for (var i=0; i<items.length; i++) {\",\n        \"        alert(items[i] + \\\"juhu\\\");\",\n        \"    }    // Real Tab.\",\n        \"}\"\n    ];\n    var session = new EditSession(lines.join(\"\\n\"));\n    session.setUndoManager(new UndoManager());\n    session.addFold(\"args...\", new Range(0, 13, 0, 18));\n    session.addFold(\"foo...\", new Range(1, 10, 2, 10));\n    session.addFold(\"bar...\", new Range(2, 20, 2, 25));\n    return session;\n}\n\nfunction assertArray(a, b) {\n    assert.equal(a+\"\", b+\"\");\n    assert.ok(a.length == b.length);\n    for (var i = 0; i < a.length; i++) {\n        assert.equal(a[i], b[i]);\n    }\n}\n\nmodule.exports = {\n\n   \"test: find matching opening bracket in Text mode\" : function() {\n        var session = new EditSession([\"(()(\", \"())))\"]);\n\n        assert.position(session.findMatchingBracket({row: 0, column: 3}), 0, 1);\n        assert.position(session.findMatchingBracket({row: 1, column: 2}), 1, 0);\n        assert.position(session.findMatchingBracket({row: 1, column: 3}), 0, 3);\n        assert.position(session.findMatchingBracket({row: 1, column: 4}), 0, 0);\n        assert.equal(session.findMatchingBracket({row: 1, column: 5}), null);\n    },\n\n    \"test: find matching closing bracket in Text mode\" : function() {\n        var session = new EditSession([\"(()(\", \"())))\"]);\n\n        assert.position(session.findMatchingBracket({row: 1, column: 1}), 1, 1);\n        assert.position(session.findMatchingBracket({row: 1, column: 1}), 1, 1);\n        assert.position(session.findMatchingBracket({row: 0, column: 4}), 1, 2);\n        assert.position(session.findMatchingBracket({row: 0, column: 2}), 0, 2);\n        assert.position(session.findMatchingBracket({row: 0, column: 1}), 1, 3);\n        assert.equal(session.findMatchingBracket({row: 0, column: 0}), null);\n    },\n\n    \"test: find matching opening bracket in JavaScript mode\" : function() {\n        var lines = [\n            \"function foo() {\",\n            \"    var str = \\\"{ foo()\\\";\",\n            \"    if (debug) {\",\n            \"        // write str (a string) to the console\",\n            \"        console.log(str);\",\n            \"    }\",\n            \"    str += \\\" bar() }\\\";\",\n            \"}\"\n        ];\n        var session = new EditSession(lines.join(\"\\n\"), new JavaScriptMode());\n\n        assert.position(session.findMatchingBracket({row: 0, column: 14}), 0, 12);\n        assert.position(session.findMatchingBracket({row: 7, column: 1}), 0, 15);\n        assert.position(session.findMatchingBracket({row: 6, column: 20}), 1, 15);\n        assert.position(session.findMatchingBracket({row: 1, column: 22}), 1, 20);\n        assert.position(session.findMatchingBracket({row: 3, column: 31}), 3, 21);\n        assert.position(session.findMatchingBracket({row: 4, column: 24}), 4, 19);\n        assert.equal(session.findMatchingBracket({row: 0, column: 1}), null);\n    },\n\n    \"test: find matching closing bracket in JavaScript mode\" : function() {\n        var lines = [\n            \"function foo() {\",\n            \"    var str = \\\"{ foo()\\\";\",\n            \"    if (debug) {\",\n            \"        // write str (a string) to the console\",\n            \"        console.log(str);\",\n            \"    }\",\n            \"    str += \\\" bar() }\\\";\",\n            \"}\"\n        ];\n        var session = new EditSession(lines.join(\"\\n\"), new JavaScriptMode());\n\n        assert.position(session.findMatchingBracket({row: 0, column: 13}), 0, 13);\n        assert.position(session.findMatchingBracket({row: 0, column: 16}), 7, 0);\n        assert.position(session.findMatchingBracket({row: 1, column: 16}), 6, 19);\n        assert.position(session.findMatchingBracket({row: 1, column: 21}), 1, 21);\n        assert.position(session.findMatchingBracket({row: 3, column: 22}), 3, 30);\n        assert.position(session.findMatchingBracket({row: 4, column: 20}), 4, 23);\n    },\n\n    \"test: handle unbalanced brackets in JavaScript mode\" : function() {\n        var lines = [\n            \"function foo() {\",\n            \"    var str = \\\"{ foo()\\\";\",\n            \"    if (debug) {\",\n            \"        // write str a string) to the console\",\n            \"        console.log(str);\",\n            \"    \",\n            \"    str += \\\" bar() \\\";\",\n            \"}\"\n        ];\n        var session = new EditSession(lines.join(\"\\n\"), new JavaScriptMode());\n\n        assert.equal(session.findMatchingBracket({row: 0, column: 16}), null);\n        assert.equal(session.findMatchingBracket({row: 3, column: 30}), null);\n        assert.equal(session.findMatchingBracket({row: 1, column: 16}), null);\n    },\n\n    \"test: match different bracket types\" : function() {\n        var session = new EditSession([\"({[\", \")]}\"]);\n\n        assert.position(session.findMatchingBracket({row: 0, column: 1}), 1, 0);\n        assert.position(session.findMatchingBracket({row: 0, column: 2}), 1, 2);\n        assert.position(session.findMatchingBracket({row: 0, column: 3}), 1, 1);\n\n        assert.position(session.findMatchingBracket({row: 1, column: 1}), 0, 0);\n        assert.position(session.findMatchingBracket({row: 1, column: 2}), 0, 2);\n        assert.position(session.findMatchingBracket({row: 1, column: 3}), 0, 1);\n    },\n\n    \"test: move lines down\" : function() {\n        var session = new EditSession([\"a1\", \"a2\", \"a3\", \"a4\"]);\n\n        session.moveLinesDown(0, 1);\n        assert.equal(session.getValue(), [\"a3\", \"a1\", \"a2\", \"a4\"].join(\"\\n\"));\n\n        session.moveLinesDown(1, 2);\n        assert.equal(session.getValue(), [\"a3\", \"a4\", \"a1\", \"a2\"].join(\"\\n\"));\n\n        session.moveLinesDown(2, 3);\n        assert.equal(session.getValue(), [\"a3\", \"a4\", \"a1\", \"a2\"].join(\"\\n\"));\n\n        session.moveLinesDown(2, 2);\n        assert.equal(session.getValue(), [\"a3\", \"a4\", \"a2\", \"a1\"].join(\"\\n\"));\n    },\n\n    \"test: move lines up\" : function() {\n        var session = new EditSession([\"a1\", \"a2\", \"a3\", \"a4\"]);\n\n        session.moveLinesUp(2, 3);\n        assert.equal(session.getValue(), [\"a1\", \"a3\", \"a4\", \"a2\"].join(\"\\n\"));\n\n        session.moveLinesUp(1, 2);\n        assert.equal(session.getValue(), [\"a3\", \"a4\", \"a1\", \"a2\"].join(\"\\n\"));\n\n        session.moveLinesUp(0, 1);\n        assert.equal(session.getValue(), [\"a3\", \"a4\", \"a1\", \"a2\"].join(\"\\n\"));\n\n        session.moveLinesUp(2, 2);\n        assert.equal(session.getValue(), [\"a3\", \"a1\", \"a4\", \"a2\"].join(\"\\n\"));\n    },\n\n    \"test: duplicate lines\" : function() {\n        var session = new EditSession([\"1\", \"2\", \"3\", \"4\"]);\n\n        session.duplicateLines(1, 2);\n        assert.equal(session.getValue(), [\"1\", \"2\", \"3\", \"2\", \"3\", \"4\"].join(\"\\n\"));\n    },\n\n    \"test: duplicate last line\" : function() {\n        var session = new EditSession([\"1\", \"2\", \"3\"]);\n\n        session.duplicateLines(2, 2);\n        assert.equal(session.getValue(), [\"1\", \"2\", \"3\", \"3\"].join(\"\\n\"));\n    },\n\n    \"test: duplicate first line\" : function() {\n        var session = new EditSession([\"1\", \"2\", \"3\"]);\n\n        session.duplicateLines(0, 0);\n        assert.equal(session.getValue(), [\"1\", \"1\", \"2\", \"3\"].join(\"\\n\"));\n    },\n\n    \"test: getScreenLastRowColumn\": function() {\n        var session = new EditSession([\n            \"juhu\",\n            \"12\\t\\t34\",\n            \"ぁぁa\"\n        ]);\n\n        assert.equal(session.getScreenLastRowColumn(0), 4);\n        assert.equal(session.getScreenLastRowColumn(1), 10);\n        assert.equal(session.getScreenLastRowColumn(2), 5);\n    },\n\n    \"test: convert document to screen coordinates\" : function() {\n        var session = new EditSession(\"01234\\t567890\\t1234\");\n        session.setTabSize(4);\n\n        assert.equal(session.documentToScreenColumn(0, 0), 0);\n        assert.equal(session.documentToScreenColumn(0, 4), 4);\n        assert.equal(session.documentToScreenColumn(0, 5), 5);\n        assert.equal(session.documentToScreenColumn(0, 6), 8);\n        assert.equal(session.documentToScreenColumn(0, 12), 14);\n        assert.equal(session.documentToScreenColumn(0, 13), 16);\n\n        session.setTabSize(2);\n\n        assert.equal(session.documentToScreenColumn(0, 0), 0);\n        assert.equal(session.documentToScreenColumn(0, 4), 4);\n        assert.equal(session.documentToScreenColumn(0, 5), 5);\n        assert.equal(session.documentToScreenColumn(0, 6), 6);\n        assert.equal(session.documentToScreenColumn(0, 7), 7);\n        assert.equal(session.documentToScreenColumn(0, 12), 12);\n        assert.equal(session.documentToScreenColumn(0, 13), 14);\n    },\n\n    \"test: convert document to screen coordinates with leading tabs\": function() {\n        var session = new EditSession(\"\\t\\t123\");\n        session.setTabSize(4);\n\n        assert.equal(session.documentToScreenColumn(0, 0), 0);\n        assert.equal(session.documentToScreenColumn(0, 1), 4);\n        assert.equal(session.documentToScreenColumn(0, 2), 8);\n        assert.equal(session.documentToScreenColumn(0, 3), 9);\n    },\n\n    \"test: documentToScreen without soft wrap\": function() {\n        var session = new EditSession([\n            \"juhu\",\n            \"12\\t\\t34\",\n            \"ぁぁa\"\n        ]);\n\n        assert.position(session.documentToScreenPosition(0, 3), 0, 3);\n        assert.position(session.documentToScreenPosition(1, 3), 1, 4);\n        assert.position(session.documentToScreenPosition(1, 4), 1, 8);\n        assert.position(session.documentToScreenPosition(2, 2), 2, 4);\n    },\n\n    \"test: documentToScreen with soft wrap\": function() {\n        var session = new EditSession([\"foo bar foo bar\"]);\n        session.setUseWrapMode(true);\n        session.setWrapLimitRange(12, 12);\n        session.adjustWrapLimit(80);\n        session.setOption(\"wrapMethod\", \"text\");\n        assert.position(session.documentToScreenPosition(0, 11), 0, 11);\n        assert.position(session.documentToScreenPosition(0, 12), 1, 0);\n    },\n\n    \"test: documentToScreen with soft wrap and multibyte characters\": function() {\n        var session = new EditSession([\"ぁぁa\"]);\n        session.setUseWrapMode(true);\n        session.setWrapLimitRange(2, 2);\n        session.adjustWrapLimit(80);\n\n        assert.position(session.documentToScreenPosition(0, 1), 1, 0);\n        assert.position(session.documentToScreenPosition(0, 2), 2, 0);\n        assert.position(session.documentToScreenPosition(0, 4), 2, 1);\n    },\n\n    \"test: documentToScreen should clip position to the document boundaries\": function() {\n        var session = new EditSession(\"foo bar\\njuhu kinners\");\n\n        assert.position(session.documentToScreenPosition(-1, 4), 0, 0);\n        assert.position(session.documentToScreenPosition(3, 0), 1, 12);\n    },\n\n    \"test: convert screen to document coordinates\" : function() {\n        var session = new EditSession(\"01234\\t567890\\t1234\");\n        session.setTabSize(4);\n\n        assert.equal(session.screenToDocumentColumn(0, 0), 0);\n        assert.equal(session.screenToDocumentColumn(0, 4), 4);\n        assert.equal(session.screenToDocumentColumn(0, 5), 5);\n        assert.equal(session.screenToDocumentColumn(0, 6), 5);\n        assert.equal(session.screenToDocumentColumn(0, 7), 5);\n        assert.equal(session.screenToDocumentColumn(0, 8), 6);\n        assert.equal(session.screenToDocumentColumn(0, 9), 7);\n        assert.equal(session.screenToDocumentColumn(0, 15), 12);\n        assert.equal(session.screenToDocumentColumn(0, 19), 16);\n\n        session.setTabSize(2);\n\n        assert.equal(session.screenToDocumentColumn(0, 0), 0);\n        assert.equal(session.screenToDocumentColumn(0, 4), 4);\n        assert.equal(session.screenToDocumentColumn(0, 5), 5);\n        assert.equal(session.screenToDocumentColumn(0, 6), 6);\n        assert.equal(session.screenToDocumentColumn(0, 12), 12);\n        assert.equal(session.screenToDocumentColumn(0, 13), 12);\n        assert.equal(session.screenToDocumentColumn(0, 14), 13);\n    },\n\n    \"test: screenToDocument with soft wrap\": function() {\n        var session = new EditSession([\"foo bar foo bar\"]);\n        session.setUseWrapMode(true);\n        session.setWrapLimitRange(12, 12);\n        session.adjustWrapLimit(80);\n\n        assert.position(session.screenToDocumentPosition(1, 0), 0, 12);\n        assert.position(session.screenToDocumentPosition(0, 11), 0, 11);\n        // Check if the position is clamped the right way.\n        assert.position(session.screenToDocumentPosition(0, 12), 0, 11);\n        assert.position(session.screenToDocumentPosition(0, 20), 0, 11);\n    },\n\n    \"test: screenToDocument with soft wrap and multi byte characters\": function() {\n        var session = new EditSession([\"ぁ a\"]);\n        session.setUseWrapMode(true);\n        session.adjustWrapLimit(80);\n\n        assert.position(session.screenToDocumentPosition(0, 1), 0, 0);\n        assert.position(session.screenToDocumentPosition(0, 2), 0, 1);\n        assert.position(session.screenToDocumentPosition(0, 3), 0, 2);\n        assert.position(session.screenToDocumentPosition(0, 4), 0, 3);\n        assert.position(session.screenToDocumentPosition(0, 5), 0, 3);\n    },\n\n    \"test: screenToDocument should clip position to the document boundaries\": function() {\n        var session = new EditSession(\"foo bar\\njuhu kinners\");\n\n        assert.position(session.screenToDocumentPosition(-1, 4), 0, 0);\n        assert.position(session.screenToDocumentPosition(0, -1), 0, 0);\n        assert.position(session.screenToDocumentPosition(0, 30), 0, 7);\n        assert.position(session.screenToDocumentPosition(2, 4), 1, 12);\n        assert.position(session.screenToDocumentPosition(1, 30), 1, 12);\n        assert.position(session.screenToDocumentPosition(20, 50), 1, 12);\n        assert.position(session.screenToDocumentPosition(20, 5), 1, 12);\n\n        // and the same for folded rows\n        session.addFold(\"...\", new Range(0,1,1,3));\n        assert.position(session.screenToDocumentPosition(1, 2), 1, 12);\n        // for wrapped rows\n        session.setUseWrapMode(true);\n        session.setWrapLimitRange(5,5);\n        assert.position(session.screenToDocumentPosition(4, 1), 1, 12);\n    },\n\n    \"test: wrapLine split function\" : function() {\n        function computeAndAssert(line, assertEqual, wrapLimit, tabSize) {\n            wrapLimit = wrapLimit || 12;\n            tabSize = tabSize || 4;\n            line = lang.stringTrimRight(line);\n            var tokens = EditSession.prototype.$getDisplayTokens(line);\n            var splits = EditSession.prototype.$computeWrapSplits(tokens, wrapLimit, tabSize);\n            console.log(\"String:\", line, \"Result:\", splits, \"Expected:\", assertEqual);\n\n            assert.ok(splits.length == assertEqual.length);\n            for (var i = 0; i < splits.length; i++) {\n                assert.ok(splits[i] == assertEqual[i]);\n            }\n        }\n        \n        EditSession.prototype.$wrapAsCode = true;\n        EditSession.prototype.$indentedSoftWrap = false;\n        // Basic splitting.\n        computeAndAssert(\"foo bar foo bar\", [ 12 ]);\n        computeAndAssert(\"foo bar f   bar\", [ 12 ]);\n        computeAndAssert(\"foo bar f     r\", [ 12 ]); // 14 if we enable \n        computeAndAssert(\"foo bar foo bar foo bara foo\", [12, 25]);\n\n        // Don't split if there is only whitespaces/tabs at the end of the line.\n        computeAndAssert(\"foo foo foo \\t \\t\", [ ]);\n\n        // If there is no space to split, force split.\n        computeAndAssert(\"foooooooooooooo\", [ 12 ]);\n        computeAndAssert(\"fooooooooooooooooooooooooooo\", [12, 24]);\n        computeAndAssert(\"foo bar fooooooooooobooooooo\", [8,  20]);\n\n        // Basic splitting + tabs.\n        computeAndAssert(\"foo \\t\\tbar\", [ 6 ]);\n        computeAndAssert(\"foo \\t \\tbar\", [ 7 ]);\n\n        // Ignore spaces/tabs at beginning of split.\n        computeAndAssert(\"foo \\t \\t   \\t \\t bar\", [ 7 ]); // 14\n\n        // Test wrapping for asian characters.\n        computeAndAssert(\"ぁぁ\", [1], 2);\n        computeAndAssert(\" ぁぁ\", [1, 2], 2);\n        computeAndAssert(\" ぁ\\tぁ\", [1, 3], 2);\n        computeAndAssert(\" ぁぁ\\tぁ\", [2, 4], 4);\n        computeAndAssert(\"ぁぁ ぁぁ\\tぁ\", [3, 6], 6);\n\n        // Test wrapping for punctuation.\n        computeAndAssert(\" ab.c;ef++\", [2, 4, 6, 8], 2);\n        computeAndAssert(\" ab.c;ef++\", [3, 5, 8], 3);\n        computeAndAssert(\" a.b\", [1, 2, 3], 1);\n        computeAndAssert(\"#>>\", [1, 2], 1);\n        \n        // Test wrapping for punctuation in\n        EditSession.prototype.$wrapAsCode = false;\n        computeAndAssert(\"ab cde, Juhu kinners\", [3, 8, 13, 19], 6);\n\n        // test indented wrapping\n        EditSession.prototype.$indentedSoftWrap = true;\n        computeAndAssert(\"foo bar foo bar foo bara foo\", [12, 25]);\n        computeAndAssert(\"fooooooooooooooooooooooooooo\", [12, 24]);\n        computeAndAssert(\"\\t\\tfoo bar fooooooooooobooooooo\", [6, 10, 16, 22, 28]);\n        computeAndAssert(\"\\t\\t\\tfoo bar fooooooooooobooooooo\", [3, 7, 11, 17, 23, 29]);\n        computeAndAssert(\"\\tfoo \\t \\t   \\t \\t bar\", [6, 12]); // 14\n    },\n\n    \"test get longest line\" : function() {\n        var session = new EditSession([\"12\"]);\n        session.setTabSize(4);\n        assert.equal(session.getScreenWidth(), 2);\n\n        session.doc.insertMergedLines({row: 0, column: Infinity}, ['', '']);\n        session.doc.insertFullLines(1, [\"123\"]);\n        assert.equal(session.getScreenWidth(), 3);\n\n        session.doc.insertMergedLines({row: 0, column: Infinity}, ['', '']);\n        session.doc.insertFullLines(1, [\"\\t\\t\"]);\n\n        assert.equal(session.getScreenWidth(), 8);\n\n        session.setTabSize(2);\n        assert.equal(session.getScreenWidth(), 4);\n    },\n\n    \"test getDisplayString\": function() {\n        var session = new EditSession([\"12\"]);\n        session.setTabSize(4);\n\n        assert.equal(session.$getDisplayTokens(\"\\t\").length, 4);\n        assert.equal(session.$getDisplayTokens(\"abc\").length, 3);\n        assert.equal(session.$getDisplayTokens(\"abc\\t\").length, 4);\n    },\n\n    \"test issue 83\": function() {\n        var session = new EditSession(\"\");\n        var editor = new Editor(new MockRenderer(), session);\n        var document = session.getDocument();\n\n        session.setUseWrapMode(true);\n\n        document.insertFullLines(0, [\"a\", \"b\"]);\n        document.insertFullLines(2, [\"c\", \"d\"]);\n        document.removeFullLines(1, 2);\n    },\n\n    \"test wrapMode init has to create wrapData array\": function() {\n        var session = new EditSession(\"foo bar\\nfoo bar\");\n        var editor = new Editor(new MockRenderer(), session);\n        var document = session.getDocument();\n\n        session.setUseWrapMode(true);\n        session.setWrapLimitRange(3, 3);\n        session.adjustWrapLimit(80);\n\n        // Test if wrapData is there and was computed.\n        assert.equal(session.$wrapData.length, 2);\n        assert.equal(session.$wrapData[0].length, 1);\n        assert.equal(session.$wrapData[1].length, 1);\n    },\n\n    \"test first line blank with wrap\": function() {\n        var session = new EditSession(\"\\nfoo\");\n        session.setUseWrapMode(true);\n        assert.equal(session.doc.getValue(), [\"\", \"foo\"].join(\"\\n\"));\n    },\n\n    \"test first line blank with wrap 2\" : function() {\n        var session = new EditSession(\"\");\n        session.setUseWrapMode(true);\n        session.setValue(\"\\nfoo\");\n\n        assert.equal(session.doc.getValue(), [\"\", \"foo\"].join(\"\\n\"));\n    },\n\n    \"test fold getFoldDisplayLine\": function() {\n        var session = createFoldTestSession();\n        function assertDisplayLine(foldLine, str) {\n            var line = session.getLine(foldLine.end.row);\n            var displayLine =\n                session.getFoldDisplayLine(foldLine, foldLine.end.row, line.length);\n            assert.equal(displayLine, str);\n        }\n\n        assertDisplayLine(session.$foldData[0], \"function foo(args...) {\");\n        assertDisplayLine(session.$foldData[1], \"    for (vfoo...ert(items[bar...\\\"juhu\\\");\");\n    },\n\n    \"test foldLine idxToPosition\": function() {\n        var session = createFoldTestSession();\n\n        function assertIdx2Pos(foldLineIdx, idx, row, column) {\n            var foldLine = session.$foldData[foldLineIdx];\n            assert.position(foldLine.idxToPosition(idx), row, column);\n        }\n\n//        \"function foo(items) {\",\n//        \"    for (var i=0; i<items.length; i++) {\",\n//        \"        alert(items[i] + \\\"juhu\\\");\",\n//        \"    }    // Real Tab.\",\n//        \"}\"\n\n        assertIdx2Pos(0, 12, 0, 12);\n        assertIdx2Pos(0, 13, 0, 13);\n        assertIdx2Pos(0, 14, 0, 13);\n        assertIdx2Pos(0, 19, 0, 13);\n        assertIdx2Pos(0, 20, 0, 18);\n\n        assertIdx2Pos(1, 10, 1, 10);\n        assertIdx2Pos(1, 11, 1, 10);\n        assertIdx2Pos(1, 15, 1, 10);\n        assertIdx2Pos(1, 16, 2, 10);\n        assertIdx2Pos(1, 26, 2, 20);\n        assertIdx2Pos(1, 27, 2, 20);\n        assertIdx2Pos(1, 32, 2, 25);\n    },\n\n    \"test fold documentToScreen\": function() {\n        var session = createFoldTestSession();\n        function assertDoc2Screen(docRow, docCol, screenRow, screenCol) {\n            assert.position(\n                session.documentToScreenPosition(docRow, docCol),\n                screenRow, screenCol\n            );\n        }\n\n        // One fold ending in the same row.\n        assertDoc2Screen(0,  0, 0, 0);\n        assertDoc2Screen(0, 13, 0, 13);\n        assertDoc2Screen(0, 14, 0, 13);\n        assertDoc2Screen(0, 17, 0, 13);\n        assertDoc2Screen(0, 18, 0, 20);\n\n        // Fold ending on some other row.\n        assertDoc2Screen(1,  0, 1, 0);\n        assertDoc2Screen(1, 10, 1, 10);\n        assertDoc2Screen(1, 11, 1, 10);\n        assertDoc2Screen(1, 99, 1, 10);\n\n        assertDoc2Screen(2,  0, 1, 10);\n        assertDoc2Screen(2,  9, 1, 10);\n        assertDoc2Screen(2, 10, 1, 16);\n        assertDoc2Screen(2, 11, 1, 17);\n\n        // Fold in the same row with fold over more then one row in the same row.\n        assertDoc2Screen(2, 19, 1, 25);\n        assertDoc2Screen(2, 20, 1, 26);\n        assertDoc2Screen(2, 21, 1, 26);\n\n        assertDoc2Screen(2, 24, 1, 26);\n        assertDoc2Screen(2, 25, 1, 32);\n        assertDoc2Screen(2, 26, 1, 33);\n        assertDoc2Screen(2, 99, 1, 40);\n\n        // Test one position after the folds. Should be all like normal.\n        assertDoc2Screen(3,  0, 2,  0);\n    },\n\n    \"test fold screenToDocument\": function() {\n        var session = createFoldTestSession();\n        function assertScreen2Doc(docRow, docCol, screenRow, screenCol) {\n            assert.position(\n                session.screenToDocumentPosition(screenRow, screenCol),\n                docRow, docCol\n            );\n        }\n\n        // One fold ending in the same row.\n        assertScreen2Doc(0,  0, 0, 0);\n        assertScreen2Doc(0, 13, 0, 13);\n        assertScreen2Doc(0, 13, 0, 14);\n        assertScreen2Doc(0, 18, 0, 20);\n        assertScreen2Doc(0, 19, 0, 21);\n\n        // Fold ending on some other row.\n        assertScreen2Doc(1,  0, 1, 0);\n        assertScreen2Doc(1, 10, 1, 10);\n        assertScreen2Doc(1, 10, 1, 11);\n\n        assertScreen2Doc(1, 10, 1, 15);\n        assertScreen2Doc(2, 10, 1, 16);\n        assertScreen2Doc(2, 11, 1, 17);\n\n        // Fold in the same row with fold over more then one row in the same row.\n        assertScreen2Doc(2, 19, 1, 25);\n        assertScreen2Doc(2, 20, 1, 26);\n        assertScreen2Doc(2, 20, 1, 27);\n\n        assertScreen2Doc(2, 20, 1, 31);\n        assertScreen2Doc(2, 25, 1, 32);\n        assertScreen2Doc(2, 26, 1, 33);\n        assertScreen2Doc(2, 33, 1, 99);\n\n        // Test one position after the folds. Should be all like normal.\n        assertScreen2Doc(3,  0, 2,  0);\n    },\n\n    \"test getFoldsInRange()\": function() {\n        var session = createFoldTestSession();\n        var foldLines = session.$foldData;\n        var folds = foldLines[0].folds.concat(foldLines[1].folds);\n\n        function test(startRow, startColumn, endColumn, endRow, folds) {\n            var r = new Range(startRow, startColumn, endColumn, endRow);\n            var retFolds = session.getFoldsInRange(r);\n\n            assert.ok(retFolds.length == folds.length);\n            for (var i = 0; i < retFolds.length; i++) {\n                assert.equal(retFolds[i].range + \"\", folds[i].range + \"\");\n            }\n        }\n\n        test(0, 0, 0, 13,  [ ]);\n        test(0, 0, 0, 14,  [ folds[0] ]);\n        test(0, 0, 0, 18,  [ folds[0] ]);\n        test(0, 0, 1, 10,  [ folds[0] ]);\n        test(0, 0, 1, 11,  [ folds[0], folds[1] ]);\n        test(0, 18, 1, 11, [ folds[1] ]);\n        test(2, 0,  2, 13, [ folds[1] ]);\n        test(2, 10, 2, 20, [ ]);\n        test(2, 10, 2, 11, [ ]);\n        test(2, 19, 2, 20, [ ]);\n    },\n\n    \"test fold one-line text insert\": function() {\n        // These are mostly test for the FoldLine.addRemoveChars function.\n        var session = createFoldTestSession();\n        var undoManager = session.getUndoManager();\n        var foldLines = session.$foldData;\n\n        function insert(row, column, text) {\n            session.insert({row: row, column: column}, text);\n\n            // Force the session to store all changes made to the document NOW\n            // on the undoManager's queue. Otherwise we can't undo in separate\n            // steps later.\n            session.$syncInformUndoManager();\n        }\n\n        var foldLine, fold, folds;\n        // First line.\n        foldLine = session.$foldData[0];\n        fold = foldLine.folds[0];\n\n        insert(0, 0, \"0\");\n        assert.range(foldLine.range, 0, 14, 0, 19);\n        assert.range(fold.range,     0, 14, 0, 19);\n        insert(0, 14, \"1\");\n        assert.range(foldLine.range, 0, 15, 0, 20);\n        assert.range(fold.range,     0, 15, 0, 20);\n        insert(0, 20, \"2\");\n        assert.range(foldLine.range, 0, 15, 0, 20);\n        assert.range(fold.range,     0, 15, 0, 20);\n\n        // Second line.\n        foldLine = session.$foldData[1];\n        folds = foldLine.folds;\n\n        insert(1, 0, \"3\");\n        assert.range(foldLine.range, 1, 11, 2, 25);\n        assert.range(folds[0].range, 1, 11, 2, 10);\n        assert.range(folds[1].range, 2, 20, 2, 25);\n\n        insert(1, 11, \"4\");\n        assert.range(foldLine.range, 1, 12, 2, 25);\n        assert.range(folds[0].range, 1, 12, 2, 10);\n        assert.range(folds[1].range, 2, 20, 2, 25);\n\n        insert(2, 10, \"5\");\n        assert.range(foldLine.range, 1, 12, 2, 26);\n        assert.range(folds[0].range, 1, 12, 2, 10);\n        assert.range(folds[1].range, 2, 21, 2, 26);\n\n        insert(2, 21, \"6\");\n        assert.range(foldLine.range, 1, 12, 2, 27);\n        assert.range(folds[0].range, 1, 12, 2, 10);\n        assert.range(folds[1].range, 2, 22, 2, 27);\n\n        insert(2, 27, \"7\");\n        assert.range(foldLine.range, 1, 12, 2, 27);\n        assert.range(folds[0].range, 1, 12, 2, 10);\n        assert.range(folds[1].range, 2, 22, 2, 27);\n\n        // UNDO = REMOVE\n        undoManager.undo(); // 6\n        assert.range(foldLine.range, 1, 12, 2, 27);\n        assert.range(folds[0].range, 1, 12, 2, 10);\n        assert.range(folds[1].range, 2, 22, 2, 27);\n\n        undoManager.undo(); // 5\n        assert.range(foldLine.range, 1, 12, 2, 26);\n        assert.range(folds[0].range, 1, 12, 2, 10);\n        assert.range(folds[1].range, 2, 21, 2, 26);\n\n        undoManager.undo(); // 4\n        assert.range(foldLine.range, 1, 12, 2, 25);\n        assert.range(folds[0].range, 1, 12, 2, 10);\n        assert.range(folds[1].range, 2, 20, 2, 25);\n\n        undoManager.undo(); // 3\n        assert.range(foldLine.range, 1, 11, 2, 25);\n        assert.range(folds[0].range, 1, 11, 2, 10);\n        assert.range(folds[1].range, 2, 20, 2, 25);\n\n        undoManager.undo(); // Beginning first line.\n        assert.equal(foldLines.length, 2);\n        assert.range(foldLines[0].range, 0, 15, 0, 20);\n        assert.range(foldLines[1].range, 1, 10, 2, 25);\n\n        foldLine = session.$foldData[0];\n        fold = foldLine.folds[0];\n\n        undoManager.undo(); // 2\n        assert.range(foldLine.range, 0, 15, 0, 20);\n        assert.range(fold.range,     0, 15, 0, 20);\n\n        undoManager.undo(); // 1\n        assert.range(foldLine.range, 0, 14, 0, 19);\n        assert.range(fold.range,     0, 14, 0, 19);\n\n        undoManager.undo(); // 0\n        assert.range(foldLine.range, 0, 13, 0, 18);\n        assert.range(fold.range,     0, 13, 0, 18);\n    },\n\n    \"test fold multi-line insert/remove\": function() {\n        var session = createFoldTestSession(),\n            undoManager = session.getUndoManager(),\n            foldLines = session.$foldData;\n        function insert(row, column, text) {\n            session.insert({row: row, column: column}, text);\n            // Force the session to store all changes made to the document NOW\n            // on the undoManager's queue. Otherwise we can't undo in separate\n            // steps later.\n            session.$syncInformUndoManager();\n        }\n\n        var foldLines = session.$foldData, foldLine, fold, folds;\n\n        insert(0, 0, \"\\nfo0\");\n        assert.equal(foldLines.length, 2);\n        assert.range(foldLines[0].range, 1, 16, 1, 21);\n        assert.range(foldLines[1].range, 2, 10, 3, 25);\n\n        insert(2, 0, \"\\nba1\");\n        assert.equal(foldLines.length, 2);\n        assert.range(foldLines[0].range, 1, 16, 1, 21);\n        assert.range(foldLines[1].range, 3, 13, 4, 25);\n\n        insert(3, 10, \"\\nfo2\");\n        assert.equal(foldLines.length, 2);\n        assert.range(foldLines[0].range, 1, 16, 1, 21);\n        assert.range(foldLines[1].range, 4,  6, 5, 25);\n\n        insert(5, 10, \"\\nba3\");\n        assert.equal(foldLines.length, 3);\n        assert.range(foldLines[0].range, 1, 16, 1, 21);\n        assert.range(foldLines[1].range, 4,  6, 5, 10);\n        assert.range(foldLines[2].range, 6, 13, 6, 18);\n\n        insert(6, 18, \"\\nfo4\");\n        assert.equal(foldLines.length, 3);\n        assert.range(foldLines[0].range, 1, 16, 1, 21);\n        assert.range(foldLines[1].range, 4,  6, 5, 10);\n        assert.range(foldLines[2].range, 6, 13, 6, 18);\n\n        undoManager.undo(); // 3\n        assert.equal(foldLines.length, 3);\n        assert.range(foldLines[0].range, 1, 16, 1, 21);\n        assert.range(foldLines[1].range, 4,  6, 5, 10);\n        assert.range(foldLines[2].range, 6, 13, 6, 18);\n\n        undoManager.undo(); // 2\n        assert.equal(foldLines.length, 2);\n        assert.range(foldLines[0].range, 1, 16, 1, 21);\n        assert.range(foldLines[1].range, 4,  6, 5, 25);\n\n        undoManager.undo(); // 1\n        assert.equal(foldLines.length, 2);\n        assert.range(foldLines[0].range, 1, 16, 1, 21);\n        assert.range(foldLines[1].range, 3, 13, 4, 25);\n\n        undoManager.undo(); // 0\n        assert.equal(foldLines.length, 2);\n        assert.range(foldLines[0].range, 1, 16, 1, 21);\n        assert.range(foldLines[1].range, 2, 10, 3, 25);\n\n        undoManager.undo(); // Beginning\n        assert.equal(foldLines.length, 2);\n        assert.range(foldLines[0].range, 0, 13, 0, 18);\n        assert.range(foldLines[1].range, 1, 10, 2, 25);\n        // TODO: Add test for inseration inside of folds.\n    },\n\n    \"test fold wrap data compution\": function() {\n        function assertWrap(line0, line1, line2) {\n            line0 && assertArray(wrapData[0], line0);\n            line1 && assertArray(wrapData[1], line1);\n            line2 && assertArray(wrapData[2], line2);\n        }\n\n        function removeFoldAssertWrap(docRow, docColumn, line0, line1, line2) {\n            session.removeFold(session.getFoldAt(docRow, docColumn));\n            assertWrap(line0, line1, line2);\n        }\n\n        var lines = [\n            \"foo bar foo bar\",\n            \"foo bar foo bar\",\n            \"foo bar foo bar\"\n        ];\n\n        var session = new EditSession(lines.join(\"\\n\"));\n        session.setUseWrapMode(true);\n        session.$wrapLimit = 7;\n        session.$updateWrapData(0, 2);\n        var wrapData = session.$wrapData;\n\n        // Do a simple assertion without folds to check basic functionallity.\n        assertWrap([8], [8], [8]);\n\n        // --- Do in line folding ---\n\n        // Adding a fold. The split position is inside of the fold. As placeholder\n        // are not splitable, the split should be before the split.\n        session.addFold(\"woot\", new Range(0, 4, 0, 15));\n        assertWrap([4], [8], [8]);\n\n        // Remove the fold again which should reset the wrapData.\n        removeFoldAssertWrap(0, 4, [8], [8], [8]);\n\n        session.addFold(\"woot\", new Range(0, 6, 0, 9));\n        assertWrap([6, 13], [8], [8]);\n        removeFoldAssertWrap(0, 6, [8], [8], [8]);\n\n        // The fold fits into the wrap limit - no split expected.\n        session.addFold(\"woot\", new Range(0, 3, 0, 15));\n        assertWrap([], [8], [8]);\n        removeFoldAssertWrap(0, 4, [8], [8], [8]);\n\n        // Fold after split position should be all fine.\n        session.addFold(\"woot\", new Range(0, 8, 0, 15));\n        assertWrap([8], [8], [8]);\n        removeFoldAssertWrap(0, 8, [8], [8], [8]);\n\n        // Fold's placeholder is far too long for wrapSplit.\n        session.addFold(\"woot0123456789\", new Range(0, 8, 0, 15));\n        assertWrap([8], [8], [8]);\n        removeFoldAssertWrap(0, 8, [8], [8], [8]);\n\n        // Fold's placeholder is far too long for wrapSplit\n        // + content at the end of the line\n        session.addFold(\"woot0123456789\", new Range(0, 6, 0, 8));\n        assertWrap([6, 20], [8], [8]);\n        removeFoldAssertWrap(0, 8, [8], [8], [8]);\n\n        session.addFold(\"woot0123456789\", new Range(0, 6, 0, 8));\n        session.addFold(\"woot0123456789\", new Range(0, 8, 0, 10));\n        assertWrap([6, 20, 34], [8], [8]);\n        session.removeFold(session.getFoldAt(0, 7));\n        removeFoldAssertWrap(0, 8, [8], [8], [8]);\n\n        session.addFold(\"woot0123456789\", new Range(0, 7, 0, 9));\n        session.addFold(\"woot0123456789\", new Range(0, 13, 0, 15));\n        assertWrap([7, 21, 25], [8], [8]);\n        session.removeFold(session.getFoldAt(0, 7));\n        removeFoldAssertWrap(0, 14, [8], [8], [8]);\n\n        // --- Do some multiline folding ---\n\n        // Add a fold over two lines. Note, that the wrapData[1] stays the\n        // same. This is an implementation detail and expected behavior.\n        session.addFold(\"woot\", new Range(0, 8, 1, 15));\n        assertWrap([8], [8 /* See comments */], [8]);\n        removeFoldAssertWrap(0, 8, [8], [8], [8]);\n\n        session.addFold(\"woot\", new Range(0, 9, 1, 11));\n        assertWrap([8, 14], [8 /* See comments */], [8]);\n        removeFoldAssertWrap(0, 9, [8], [8], [8]);\n\n        session.addFold(\"woot\", new Range(0, 9, 1, 15));\n        assertWrap([8], [8 /* See comments */], [8]);\n        removeFoldAssertWrap(0, 9, [8], [8], [8]);\n\n        return session;\n    },\n    \n    \"test delete fold with wrap enabled\": function() {\n        var session = new EditSession(\"\");\n        session.setValue([\n            \"This is some placeholder text that will be folded inline.\",\n            \"This is some placeholder text that will be folded inline.\",\n            \"More text.\",\n            \"<p>The cursor in this paragraph text will be offset by 1 row.<p>\",\n            \"<p>Everything after this will be offset as well due to the folds in the row before too.</p>\"\n        ].join(\"\\n\"));\n        session.addFold('...', new Range(0, 8, 0, 42));\n        session.addFold('...', new Range(1, 8, 1, 42));\n        session.addFold('...', new Range(3, 7, 3, 51));\n        session.setOption(\"wrap\", 40);\n        session.remove(new Range(0,0, 2, 5));\n        // needed because adjustWrapLimit is called async from renderer\n        session.adjustWrapLimit(80);\n        \n        assert.equal(session.$wrapData + \"\", [[], [], [40, 76]] + \"\");\n    },\n        \n    \"test add fold\": function() {\n        var session = createFoldTestSession();\n        var fold;\n\n        function tryAddFold(placeholder, range, shouldFail) {\n            var fail = false;\n            try {\n                fold = session.addFold(placeholder, range);\n            } catch (e) {\n                fail = true;\n            }\n            if (fail != shouldFail) {\n                throw new Error(\"Expected to get an exception\");\n            }\n        }\n\n        tryAddFold(\"foo\", new Range(0, 13, 0, 17), false);\n        tryAddFold(\"foo\", new Range(0, 14, 0, 18), true);\n        tryAddFold(\"foo\", new Range(0, 13, 0, 18), false);\n        assert.equal(session.$foldData[0].folds.length, 1);\n\n        tryAddFold(\"f\", new Range(0, 13, 0, 18), false);\n        tryAddFold(\"foo\", new Range(0, 18, 0, 21), false);\n        assert.equal(session.$foldData[0].folds.length, 2);\n        session.removeFold(fold);\n\n        tryAddFold(\"foo\", new Range(0, 18, 0, 22), false);\n        tryAddFold(\"foo\", new Range(0, 18, 0, 19), true);\n        tryAddFold(\"foo\", new Range(0, 22, 1, 10), false);\n    },\n\n    \"test add subfolds\": function() {\n        var session = createFoldTestSession();\n        var fold, oldFold;\n        var foldData = session.$foldData;\n\n        oldFold = foldData[0].folds[0];\n\n        fold = session.addFold(\"fold0\", new Range(0, 10, 0, 21));\n        assert.equal(foldData[0].folds.length, 1);\n        assert.equal(fold.subFolds.length, 1);\n        assert.equal(fold.subFolds[0], oldFold);\n\n        session.expandFold(fold);\n        assert.equal(foldData[0].folds.length, 1);\n        assert.equal(foldData[0].folds[0], oldFold);\n        assert.equal(fold.subFolds.length, 0);\n\n        fold = session.addFold(\"fold0\", new Range(0, 13, 2, 10));\n        assert.equal(foldData.length, 1);\n        assert.equal(fold.subFolds.length, 2);\n        assert.equal(fold.subFolds[0], oldFold);\n\n        session.expandFold(fold);\n        assert.equal(foldData.length, 2);\n        assert.equal(foldData[0].folds.length, 1);\n        assert.equal(foldData[0].folds[0], oldFold);\n        assert.equal(fold.subFolds.length, 0);\n\n        session.unfold(null, true);\n        fold = session.addFold(\"fold0\", new Range(0, 0, 0, 21));\n        session.addFold(\"fold0\", new Range(0, 1, 0, 5));\n        session.addFold(\"fold0\", new Range(0, 6, 0, 8));\n        assert.equal(fold.subFolds.length, 2);\n    },\n\n    \"test row cache\": function() {\n        var session = createFoldTestSession();\n\n        session.screenToDocumentPosition(2,3);\n        assertArray(session.$docRowCache, [1,3]);\n        assertArray(session.$screenRowCache, [1,2]);\n\n        session.screenToDocumentPosition(5,3);\n        assertArray(session.$docRowCache, [1,3,4]);\n        assertArray(session.$screenRowCache, [1,2,3]);\n\n        session.screenToDocumentPosition(0,3);\n        assertArray(session.$docRowCache, [1,3,4]);\n        assertArray(session.$screenRowCache, [1,2,3]);\n\n        var pos = session.screenToDocumentPosition(0,0);\n        assert.equal(pos.row, 0);\n        assertArray(session.$docRowCache, [1,3,4]);\n        assertArray(session.$screenRowCache, [1,2,3]);\n        \n        session.screenToDocumentPosition(1,0);\n        assertArray(session.$docRowCache, [1,3,4]);\n        assertArray(session.$screenRowCache, [1,2,3]);\n\n        session.$resetRowCache();\n        assertArray(session.$docRowCache, []);\n        assertArray(session.$screenRowCache, []);\n        \n        session.screenToDocumentPosition(1,3);\n        assertArray(session.$docRowCache, [1]);\n        assertArray(session.$screenRowCache, [1]);\n       \n        session.screenToDocumentPosition(5,3);\n        assertArray(session.$docRowCache, [1,3,4]);\n        assertArray(session.$screenRowCache, [1,2,3]);\n        \n        session = new EditSession(new Array(30).join(\"\\n\"));\n        session.documentToScreenPosition(2,0);\n        session.documentToScreenPosition(2,0);\n        assertArray(session.$docRowCache, [1,2]);\n        assertArray(session.$screenRowCache, [1,2]);\n    },\n\n    \"test annotations\": function() {\n        var session = new EditSession([]),\n            annotation = {row: 0, type: 'info', text: \"This is a test.\"};\n\n        session.clearAnnotations();\n        assertArray(session.getAnnotations(), []);\n        session.setAnnotations([annotation]);\n        assertArray(session.getAnnotations(), [annotation]);\n    },\n    \n    \"test: mode loading\" : function(next) {\n        if (!require.undef) {\n            console.log(\"Skipping test: This test only runs in the browser\");\n            next();\n            return;\n        }\n        var session = new EditSession([]);\n        session.setMode(\"ace/mode/javascript\");\n        assert.equal(session.$modeid, \"ace/mode/javascript\");\n        session.on(\"changeMode\", function() {\n            assert.equal(session.$modeid, \"ace/mode/javascript\");\n        });\n        session.setMode(\"ace/mode/sh\", function(mode) {\n            assert.ok(!mode);\n        });\n        setTimeout(function() {\n            session.setMode(\"ace/mode/javascript\", function(mode) {\n                session.setMode(\"ace/mode/javascript\");\n                assert.equal(session.$modeid, \"ace/mode/javascript\");\n                next();\n            });\n        }, 0);\n    }\n};\n});\n\nif (typeof module !== \"undefined\" && module === require.main) {\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n}\n"
  },
  {
    "path": "lib/ace/editor.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nrequire(\"./lib/fixoldbrowsers\");\n\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar lang = require(\"./lib/lang\");\nvar useragent = require(\"./lib/useragent\");\nvar TextInput = require(\"./keyboard/textinput\").TextInput;\nvar MouseHandler = require(\"./mouse/mouse_handler\").MouseHandler;\nvar FoldHandler = require(\"./mouse/fold_handler\").FoldHandler;\nvar KeyBinding = require(\"./keyboard/keybinding\").KeyBinding;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar Search = require(\"./search\").Search;\nvar Range = require(\"./range\").Range;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar CommandManager = require(\"./commands/command_manager\").CommandManager;\nvar defaultCommands = require(\"./commands/default_commands\").commands;\nvar config = require(\"./config\");\nvar TokenIterator = require(\"./token_iterator\").TokenIterator;\n\nvar clipboard = require(\"./clipboard\");\n\n/**\n * The main entry point into the Ace functionality.\n *\n * The `Editor` manages the [[EditSession]] (which manages [[Document]]s), as well as the [[VirtualRenderer]], which draws everything to the screen.\n *\n * Event sessions dealing with the mouse and keyboard are bubbled up from `Document` to the `Editor`, which decides what to do with them.\n * @class Editor\n **/\n\n/**\n * Creates a new `Editor` object.\n *\n * @param {VirtualRenderer} renderer Associated `VirtualRenderer` that draws everything\n * @param {EditSession} session The `EditSession` to refer to\n *\n *\n * @constructor\n **/\nvar Editor = function(renderer, session) {\n    var container = renderer.getContainerElement();\n    this.container = container;\n    this.renderer = renderer;\n    this.id = \"editor\" + (++Editor.$uid);\n\n    this.commands = new CommandManager(useragent.isMac ? \"mac\" : \"win\", defaultCommands);\n    if (typeof document == \"object\") {\n        this.textInput  = new TextInput(renderer.getTextAreaContainer(), this);\n        this.renderer.textarea = this.textInput.getElement();\n        // TODO detect touch event support\n        this.$mouseHandler = new MouseHandler(this);\n        new FoldHandler(this);\n    }\n\n    this.keyBinding = new KeyBinding(this);\n\n    this.$search = new Search().set({\n        wrap: true\n    });\n\n    this.$historyTracker = this.$historyTracker.bind(this);\n    this.commands.on(\"exec\", this.$historyTracker);\n\n    this.$initOperationListeners();\n    \n    this._$emitInputEvent = lang.delayedCall(function() {\n        this._signal(\"input\", {});\n        if (this.session && this.session.bgTokenizer)\n            this.session.bgTokenizer.scheduleStart();\n    }.bind(this));\n    \n    this.on(\"change\", function(_, _self) {\n        _self._$emitInputEvent.schedule(31);\n    });\n\n    this.setSession(session || new EditSession(\"\"));\n    config.resetOptions(this);\n    config._signal(\"editor\", this);\n};\n\nEditor.$uid = 0;\n\n(function(){\n\n    oop.implement(this, EventEmitter);\n\n    this.$initOperationListeners = function() {\n        this.commands.on(\"exec\", this.startOperation.bind(this), true);\n        this.commands.on(\"afterExec\", this.endOperation.bind(this), true);\n\n        this.$opResetTimer = lang.delayedCall(this.endOperation.bind(this));\n        \n        // todo: add before change events?\n        this.on(\"change\", function() {\n            if (!this.curOp) {\n                this.startOperation();\n                this.curOp.selectionBefore = this.$lastSel;\n            }\n            this.curOp.docChanged = true;\n        }.bind(this), true);\n        \n        this.on(\"changeSelection\", function() {\n            if (!this.curOp) {\n                this.startOperation();\n                this.curOp.selectionBefore = this.$lastSel;\n            }\n            this.curOp.selectionChanged = true;\n        }.bind(this), true);\n    };\n\n    this.curOp = null;\n    this.prevOp = {};\n    this.startOperation = function(commadEvent) {\n        if (this.curOp) {\n            if (!commadEvent || this.curOp.command)\n                return;\n            this.prevOp = this.curOp;\n        }\n        if (!commadEvent) {\n            this.previousCommand = null;\n            commadEvent = {};\n        }\n\n        this.$opResetTimer.schedule();\n        this.curOp = this.session.curOp = {\n            command: commadEvent.command || {},\n            args: commadEvent.args,\n            scrollTop: this.renderer.scrollTop\n        };\n        this.curOp.selectionBefore = this.selection.toJSON();\n    };\n\n    this.endOperation = function(e) {\n        if (this.curOp) {\n            if (e && e.returnValue === false)\n                return (this.curOp = null);\n            this._signal(\"beforeEndOperation\");\n            var command = this.curOp.command;\n            var scrollIntoView = command && command.scrollIntoView;\n            if (scrollIntoView) {\n                switch (scrollIntoView) {\n                    case \"center-animate\":\n                        scrollIntoView = \"animate\";\n                        /* fall through */\n                    case \"center\":\n                        this.renderer.scrollCursorIntoView(null, 0.5);\n                        break;\n                    case \"animate\":\n                    case \"cursor\":\n                        this.renderer.scrollCursorIntoView();\n                        break;\n                    case \"selectionPart\":\n                        var range = this.selection.getRange();\n                        var config = this.renderer.layerConfig;\n                        if (range.start.row >= config.lastRow || range.end.row <= config.firstRow) {\n                            this.renderer.scrollSelectionIntoView(this.selection.anchor, this.selection.lead);\n                        }\n                        break;\n                    default:\n                        break;\n                }\n                if (scrollIntoView == \"animate\")\n                    this.renderer.animateScrolling(this.curOp.scrollTop);\n            }\n            var sel = this.selection.toJSON();\n            this.curOp.selectionAfter = sel;\n            this.$lastSel = this.selection.toJSON();\n            \n            // console.log(this.$lastSel+\"  endOP\")\n            this.session.getUndoManager().addSelection(sel);\n            this.prevOp = this.curOp;\n            this.curOp = null;\n        }\n    };\n\n    // TODO use property on commands instead of this\n    this.$mergeableCommands = [\"backspace\", \"del\", \"insertstring\"];\n    this.$historyTracker = function(e) {\n        if (!this.$mergeUndoDeltas)\n            return;\n\n        var prev = this.prevOp;\n        var mergeableCommands = this.$mergeableCommands;\n        // previous command was the same\n        var shouldMerge = prev.command && (e.command.name == prev.command.name);\n        if (e.command.name == \"insertstring\") {\n            var text = e.args;\n            if (this.mergeNextCommand === undefined)\n                this.mergeNextCommand = true;\n\n            shouldMerge = shouldMerge\n                && this.mergeNextCommand // previous command allows to coalesce with\n                && (!/\\s/.test(text) || /\\s/.test(prev.args)); // previous insertion was of same type\n\n            this.mergeNextCommand = true;\n        } else {\n            shouldMerge = shouldMerge\n                && mergeableCommands.indexOf(e.command.name) !== -1; // the command is mergeable\n        }\n\n        if (\n            this.$mergeUndoDeltas != \"always\"\n            && Date.now() - this.sequenceStartTime > 2000\n        ) {\n            shouldMerge = false; // the sequence is too long\n        }\n\n        if (shouldMerge)\n            this.session.mergeUndoDeltas = true;\n        else if (mergeableCommands.indexOf(e.command.name) !== -1)\n            this.sequenceStartTime = Date.now();\n    };\n\n    /**\n     * Sets a new key handler, such as \"vim\" or \"windows\".\n     * @param {String} keyboardHandler The new key handler\n     *\n     **/\n    this.setKeyboardHandler = function(keyboardHandler, cb) {\n        if (keyboardHandler && typeof keyboardHandler === \"string\") {\n            this.$keybindingId = keyboardHandler;\n            var _self = this;\n            config.loadModule([\"keybinding\", keyboardHandler], function(module) {\n                if (_self.$keybindingId == keyboardHandler)\n                    _self.keyBinding.setKeyboardHandler(module && module.handler);\n                cb && cb();\n            });\n        } else {\n            this.$keybindingId = null;\n            this.keyBinding.setKeyboardHandler(keyboardHandler);\n            cb && cb();\n        }\n    };\n\n    /**\n     * Returns the keyboard handler, such as \"vim\" or \"windows\".\n     *\n     * @returns {String}\n     *\n     **/\n    this.getKeyboardHandler = function() {\n        return this.keyBinding.getKeyboardHandler();\n    };\n\n\n    /**\n     * Emitted whenever the [[EditSession]] changes.\n     * @event changeSession\n     * @param {Object} e An object with two properties, `oldSession` and `session`, that represent the old and new [[EditSession]]s.\n     *\n     **/\n    /**\n     * Sets a new editsession to use. This method also emits the `'changeSession'` event.\n     * @param {EditSession} session The new session to use\n     *\n     **/\n    this.setSession = function(session) {\n        if (this.session == session)\n            return;\n        \n        // make sure operationEnd events are not emitted to wrong session\n        if (this.curOp) this.endOperation();\n        this.curOp = {};\n\n        var oldSession = this.session;\n        if (oldSession) {\n            this.session.off(\"change\", this.$onDocumentChange);\n            this.session.off(\"changeMode\", this.$onChangeMode);\n            this.session.off(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n            this.session.off(\"changeTabSize\", this.$onChangeTabSize);\n            this.session.off(\"changeWrapLimit\", this.$onChangeWrapLimit);\n            this.session.off(\"changeWrapMode\", this.$onChangeWrapMode);\n            this.session.off(\"changeFold\", this.$onChangeFold);\n            this.session.off(\"changeFrontMarker\", this.$onChangeFrontMarker);\n            this.session.off(\"changeBackMarker\", this.$onChangeBackMarker);\n            this.session.off(\"changeBreakpoint\", this.$onChangeBreakpoint);\n            this.session.off(\"changeAnnotation\", this.$onChangeAnnotation);\n            this.session.off(\"changeOverwrite\", this.$onCursorChange);\n            this.session.off(\"changeScrollTop\", this.$onScrollTopChange);\n            this.session.off(\"changeScrollLeft\", this.$onScrollLeftChange);\n\n            var selection = this.session.getSelection();\n            selection.off(\"changeCursor\", this.$onCursorChange);\n            selection.off(\"changeSelection\", this.$onSelectionChange);\n        }\n\n        this.session = session;\n        if (session) {\n            this.$onDocumentChange = this.onDocumentChange.bind(this);\n            session.on(\"change\", this.$onDocumentChange);\n            this.renderer.setSession(session);\n    \n            this.$onChangeMode = this.onChangeMode.bind(this);\n            session.on(\"changeMode\", this.$onChangeMode);\n    \n            this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this);\n            session.on(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n    \n            this.$onChangeTabSize = this.renderer.onChangeTabSize.bind(this.renderer);\n            session.on(\"changeTabSize\", this.$onChangeTabSize);\n    \n            this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this);\n            session.on(\"changeWrapLimit\", this.$onChangeWrapLimit);\n    \n            this.$onChangeWrapMode = this.onChangeWrapMode.bind(this);\n            session.on(\"changeWrapMode\", this.$onChangeWrapMode);\n    \n            this.$onChangeFold = this.onChangeFold.bind(this);\n            session.on(\"changeFold\", this.$onChangeFold);\n    \n            this.$onChangeFrontMarker = this.onChangeFrontMarker.bind(this);\n            this.session.on(\"changeFrontMarker\", this.$onChangeFrontMarker);\n    \n            this.$onChangeBackMarker = this.onChangeBackMarker.bind(this);\n            this.session.on(\"changeBackMarker\", this.$onChangeBackMarker);\n    \n            this.$onChangeBreakpoint = this.onChangeBreakpoint.bind(this);\n            this.session.on(\"changeBreakpoint\", this.$onChangeBreakpoint);\n    \n            this.$onChangeAnnotation = this.onChangeAnnotation.bind(this);\n            this.session.on(\"changeAnnotation\", this.$onChangeAnnotation);\n    \n            this.$onCursorChange = this.onCursorChange.bind(this);\n            this.session.on(\"changeOverwrite\", this.$onCursorChange);\n    \n            this.$onScrollTopChange = this.onScrollTopChange.bind(this);\n            this.session.on(\"changeScrollTop\", this.$onScrollTopChange);\n    \n            this.$onScrollLeftChange = this.onScrollLeftChange.bind(this);\n            this.session.on(\"changeScrollLeft\", this.$onScrollLeftChange);\n    \n            this.selection = session.getSelection();\n            this.selection.on(\"changeCursor\", this.$onCursorChange);\n    \n            this.$onSelectionChange = this.onSelectionChange.bind(this);\n            this.selection.on(\"changeSelection\", this.$onSelectionChange);\n    \n            this.onChangeMode();\n    \n            this.onCursorChange();\n    \n            this.onScrollTopChange();\n            this.onScrollLeftChange();\n            this.onSelectionChange();\n            this.onChangeFrontMarker();\n            this.onChangeBackMarker();\n            this.onChangeBreakpoint();\n            this.onChangeAnnotation();\n            this.session.getUseWrapMode() && this.renderer.adjustWrapLimit();\n            this.renderer.updateFull();\n        } else {\n            this.selection = null;\n            this.renderer.setSession(session);\n        }\n\n        this._signal(\"changeSession\", {\n            session: session,\n            oldSession: oldSession\n        });\n        \n        this.curOp = null;\n        \n        oldSession && oldSession._signal(\"changeEditor\", {oldEditor: this});\n        session && session._signal(\"changeEditor\", {editor: this});\n        \n        if (session && session.bgTokenizer)\n            session.bgTokenizer.scheduleStart();\n    };\n\n    /**\n     * Returns the current session being used.\n     * @returns {EditSession}\n     **/\n    this.getSession = function() {\n        return this.session;\n    };\n\n    /**\n     * Sets the current document to `val`.\n     * @param {String} val The new value to set for the document\n     * @param {Number} cursorPos Where to set the new value. `undefined` or 0 is selectAll, -1 is at the document start, and 1 is at the end\n     *\n     * @returns {String} The current document value\n     * @related Document.setValue\n     **/\n    this.setValue = function(val, cursorPos) {\n        this.session.doc.setValue(val);\n\n        if (!cursorPos)\n            this.selectAll();\n        else if (cursorPos == 1)\n            this.navigateFileEnd();\n        else if (cursorPos == -1)\n            this.navigateFileStart();\n\n        return val;\n    };\n\n    /**\n     * Returns the current session's content.\n     *\n     * @returns {String}\n     * @related EditSession.getValue\n     **/\n    this.getValue = function() {\n        return this.session.getValue();\n    };\n\n    /**\n     *\n     * Returns the currently highlighted selection.\n     * @returns {Selection} The selection object\n     **/\n    this.getSelection = function() {\n        return this.selection;\n    };\n\n    /**\n     * {:VirtualRenderer.onResize}\n     * @param {Boolean} force If `true`, recomputes the size, even if the height and width haven't changed\n     *\n     *\n     * @related VirtualRenderer.onResize\n     **/\n    this.resize = function(force) {\n        this.renderer.onResize(force);\n    };\n\n    /**\n     * {:VirtualRenderer.setTheme}\n     * @param {String} theme The path to a theme\n     * @param {Function} cb optional callback called when theme is loaded\n     **/\n    this.setTheme = function(theme, cb) {\n        this.renderer.setTheme(theme, cb);\n    };\n\n    /**\n     * {:VirtualRenderer.getTheme}\n     *\n     * @returns {String} The set theme\n     * @related VirtualRenderer.getTheme\n     **/\n    this.getTheme = function() {\n        return this.renderer.getTheme();\n    };\n\n    /**\n     * {:VirtualRenderer.setStyle}\n     * @param {String} style A class name\n     *\n     *\n     * @related VirtualRenderer.setStyle\n     **/\n    this.setStyle = function(style) {\n        this.renderer.setStyle(style);\n    };\n\n    /**\n     * {:VirtualRenderer.unsetStyle}\n     * @related VirtualRenderer.unsetStyle\n     **/\n    this.unsetStyle = function(style) {\n        this.renderer.unsetStyle(style);\n    };\n\n    /**\n     * Gets the current font size of the editor text.\n     */\n    this.getFontSize = function () {\n        return this.getOption(\"fontSize\") ||\n           dom.computedStyle(this.container, \"fontSize\");\n    };\n\n    /**\n     * Set a new font size (in pixels) for the editor text.\n     * @param {String} size A font size ( _e.g._ \"12px\")\n     *\n     *\n     **/\n    this.setFontSize = function(size) {\n        this.setOption(\"fontSize\", size);\n    };\n\n    this.$highlightBrackets = function() {\n        if (this.session.$bracketHighlight) {\n            this.session.removeMarker(this.session.$bracketHighlight);\n            this.session.$bracketHighlight = null;\n        }\n\n        if (this.$highlightPending) {\n            return;\n        }\n\n        // perform highlight async to not block the browser during navigation\n        var self = this;\n        this.$highlightPending = true;\n        setTimeout(function() {\n            self.$highlightPending = false;\n            var session = self.session;\n            if (!session || !session.bgTokenizer) return;\n            var pos = session.findMatchingBracket(self.getCursorPosition());\n            if (pos) {\n                var range = new Range(pos.row, pos.column, pos.row, pos.column + 1);\n            } else if (session.$mode.getMatching) {\n                var range = session.$mode.getMatching(self.session);\n            }\n            if (range)\n                session.$bracketHighlight = session.addMarker(range, \"ace_bracket\", \"text\");\n        }, 50);\n    };\n\n    // todo: move to mode.getMatching\n    this.$highlightTags = function() {\n        if (this.$highlightTagPending)\n            return;\n\n        // perform highlight async to not block the browser during navigation\n        var self = this;\n        this.$highlightTagPending = true;\n        setTimeout(function() {\n            self.$highlightTagPending = false;\n            \n            var session = self.session;\n            if (!session || !session.bgTokenizer) return;\n            \n            var pos = self.getCursorPosition();\n            var iterator = new TokenIterator(self.session, pos.row, pos.column);\n            var token = iterator.getCurrentToken();\n            \n            if (!token || !/\\b(?:tag-open|tag-name)/.test(token.type)) {\n                session.removeMarker(session.$tagHighlight);\n                session.$tagHighlight = null;\n                return;\n            }\n            \n            if (token.type.indexOf(\"tag-open\") != -1) {\n                token = iterator.stepForward();\n                if (!token)\n                    return;\n            }\n            \n            var tag = token.value;\n            var depth = 0;\n            var prevToken = iterator.stepBackward();\n            \n            if (prevToken.value == '<'){\n                //find closing tag\n                do {\n                    prevToken = token;\n                    token = iterator.stepForward();\n                    \n                    if (token && token.value === tag && token.type.indexOf('tag-name') !== -1) {\n                        if (prevToken.value === '<'){\n                            depth++;\n                        } else if (prevToken.value === '</'){\n                            depth--;\n                        }\n                    }\n                    \n                } while (token && depth >= 0);\n            } else {\n                //find opening tag\n                do {\n                    token = prevToken;\n                    prevToken = iterator.stepBackward();\n                    \n                    if (token && token.value === tag && token.type.indexOf('tag-name') !== -1) {\n                        if (prevToken.value === '<') {\n                            depth++;\n                        } else if (prevToken.value === '</') {\n                            depth--;\n                        }\n                    }\n                } while (prevToken && depth <= 0);\n                \n                //select tag again\n                iterator.stepForward();\n            }\n            \n            if (!token) {\n                session.removeMarker(session.$tagHighlight);\n                session.$tagHighlight = null;\n                return;\n            }\n            \n            var row = iterator.getCurrentTokenRow();\n            var column = iterator.getCurrentTokenColumn();\n            var range = new Range(row, column, row, column+token.value.length);\n            \n            //remove range if different\n            var sbm = session.$backMarkers[session.$tagHighlight];\n            if (session.$tagHighlight && sbm != undefined && range.compareRange(sbm.range) !== 0) {\n                session.removeMarker(session.$tagHighlight);\n                session.$tagHighlight = null;\n            }\n            \n            if (!session.$tagHighlight)\n                session.$tagHighlight = session.addMarker(range, \"ace_bracket\", \"text\");\n        }, 50);\n    };\n\n    /**\n     *\n     * Brings the current `textInput` into focus.\n     **/\n    this.focus = function() {\n        // Safari needs the timeout\n        // iOS and Firefox need it called immediately\n        // to be on the save side we do both\n        var _self = this;\n        setTimeout(function() {\n            _self.textInput.focus();\n        });\n        this.textInput.focus();\n    };\n\n    /**\n     * Returns `true` if the current `textInput` is in focus.\n     * @return {Boolean}\n     **/\n    this.isFocused = function() {\n        return this.textInput.isFocused();\n    };\n\n    /**\n     *\n     * Blurs the current `textInput`.\n     **/\n    this.blur = function() {\n        this.textInput.blur();\n    };\n\n    /**\n     * Emitted once the editor comes into focus.\n     * @event focus\n     *\n     *\n     **/\n    this.onFocus = function(e) {\n        if (this.$isFocused)\n            return;\n        this.$isFocused = true;\n        this.renderer.showCursor();\n        this.renderer.visualizeFocus();\n        this._emit(\"focus\", e);\n    };\n\n    /**\n     * Emitted once the editor has been blurred.\n     * @event blur\n     *\n     *\n     **/\n    this.onBlur = function(e) {\n        if (!this.$isFocused)\n            return;\n        this.$isFocused = false;\n        this.renderer.hideCursor();\n        this.renderer.visualizeBlur();\n        this._emit(\"blur\", e);\n    };\n\n    this.$cursorChange = function() {\n        this.renderer.updateCursor();\n    };\n\n    /**\n     * Emitted whenever the document is changed.\n     * @event change\n     * @param {Object} e Contains a single property, `data`, which has the delta of changes\n     *\n     *\n     *\n     **/\n    this.onDocumentChange = function(delta) {\n        // Rerender and emit \"change\" event.\n        var wrap = this.session.$useWrapMode;\n        var lastRow = (delta.start.row == delta.end.row ? delta.end.row : Infinity);\n        this.renderer.updateLines(delta.start.row, lastRow, wrap);\n\n        this._signal(\"change\", delta);\n        \n        // Update cursor because tab characters can influence the cursor position.\n        this.$cursorChange();\n        this.$updateHighlightActiveLine();\n    };\n\n    this.onTokenizerUpdate = function(e) {\n        var rows = e.data;\n        this.renderer.updateLines(rows.first, rows.last);\n    };\n\n\n    this.onScrollTopChange = function() {\n        this.renderer.scrollToY(this.session.getScrollTop());\n    };\n\n    this.onScrollLeftChange = function() {\n        this.renderer.scrollToX(this.session.getScrollLeft());\n    };\n\n    /**\n     * Emitted when the selection changes.\n     *\n     **/\n    this.onCursorChange = function() {\n        this.$cursorChange();\n\n        this.$highlightBrackets();\n        this.$highlightTags();\n        this.$updateHighlightActiveLine();\n        this._signal(\"changeSelection\");\n    };\n\n    this.$updateHighlightActiveLine = function() {\n        var session = this.getSession();\n\n        var highlight;\n        if (this.$highlightActiveLine) {\n            if ((this.$selectionStyle != \"line\" || !this.selection.isMultiLine()))\n                highlight = this.getCursorPosition();\n            if (this.renderer.$maxLines && this.session.getLength() === 1 && !(this.renderer.$minLines > 1))\n                highlight = false;\n        }\n\n        if (session.$highlightLineMarker && !highlight) {\n            session.removeMarker(session.$highlightLineMarker.id);\n            session.$highlightLineMarker = null;\n        } else if (!session.$highlightLineMarker && highlight) {\n            var range = new Range(highlight.row, highlight.column, highlight.row, Infinity);\n            range.id = session.addMarker(range, \"ace_active-line\", \"screenLine\");\n            session.$highlightLineMarker = range;\n        } else if (highlight) {\n            session.$highlightLineMarker.start.row = highlight.row;\n            session.$highlightLineMarker.end.row = highlight.row;\n            session.$highlightLineMarker.start.column = highlight.column;\n            session._signal(\"changeBackMarker\");\n        }\n    };\n\n    this.onSelectionChange = function(e) {\n        var session = this.session;\n\n        if (session.$selectionMarker) {\n            session.removeMarker(session.$selectionMarker);\n        }\n        session.$selectionMarker = null;\n\n        if (!this.selection.isEmpty()) {\n            var range = this.selection.getRange();\n            var style = this.getSelectionStyle();\n            session.$selectionMarker = session.addMarker(range, \"ace_selection\", style);\n        } else {\n            this.$updateHighlightActiveLine();\n        }\n\n        var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp();\n        this.session.highlight(re);\n\n        this._signal(\"changeSelection\");\n    };\n\n    this.$getSelectionHighLightRegexp = function() {\n        var session = this.session;\n\n        var selection = this.getSelectionRange();\n        if (selection.isEmpty() || selection.isMultiLine())\n            return;\n\n        var startColumn = selection.start.column;\n        var endColumn = selection.end.column;\n        var line = session.getLine(selection.start.row);\n        \n        var needle = line.substring(startColumn, endColumn);\n        if (!/[\\w\\d]/.test(needle))\n            return;\n\n        var re = this.$search.$assembleRegExp({\n            wholeWord: true,\n            caseSensitive: true,\n            needle: needle\n        });\n        \n        var wordWithBoundary = line.substring(startColumn - 1, endColumn + 1);\n        if (!re.test(wordWithBoundary))\n            return;\n        \n        return re;\n    };\n\n\n    this.onChangeFrontMarker = function() {\n        this.renderer.updateFrontMarkers();\n    };\n\n    this.onChangeBackMarker = function() {\n        this.renderer.updateBackMarkers();\n    };\n\n\n    this.onChangeBreakpoint = function() {\n        this.renderer.updateBreakpoints();\n    };\n\n    this.onChangeAnnotation = function() {\n        this.renderer.setAnnotations(this.session.getAnnotations());\n    };\n\n\n    this.onChangeMode = function(e) {\n        this.renderer.updateText();\n        this._emit(\"changeMode\", e);\n    };\n\n\n    this.onChangeWrapLimit = function() {\n        this.renderer.updateFull();\n    };\n\n    this.onChangeWrapMode = function() {\n        this.renderer.onResize(true);\n    };\n\n\n    this.onChangeFold = function() {\n        // Update the active line marker as due to folding changes the current\n        // line range on the screen might have changed.\n        this.$updateHighlightActiveLine();\n        // TODO: This might be too much updating. Okay for now.\n        this.renderer.updateFull();\n    };\n\n    \n    /**\n     * Returns the string of text currently highlighted.\n     * @returns {String}\n     **/\n    this.getSelectedText = function() {\n        return this.session.getTextRange(this.getSelectionRange());\n    };\n    \n    /**\n     * Emitted when text is copied.\n     * @event copy\n     * @param {String} text The copied text\n     *\n     **/\n    /**\n     * Returns the string of text currently highlighted.\n     * @returns {String}\n     **/\n    this.getCopyText = function() {\n        var text = this.getSelectedText();\n        var nl = this.session.doc.getNewLineCharacter();\n        var copyLine= false;\n        if (!text && this.$copyWithEmptySelection) {\n            copyLine = true;\n            var ranges = this.selection.getAllRanges();\n            for (var i = 0; i < ranges.length; i++) {\n                var range = ranges[i];\n                if (i && ranges[i - 1].start.row == range.start.row)\n                    continue;\n                text += this.session.getLine(range.start.row) + nl;\n            }\n        }\n        var e = {text: text};\n        this._signal(\"copy\", e);\n        clipboard.lineMode = copyLine ? e.text : \"\";\n        return e.text;\n    };\n\n    /**\n     * Called whenever a text \"copy\" happens.\n     **/\n    this.onCopy = function() {\n        this.commands.exec(\"copy\", this);\n    };\n\n    /**\n     * Called whenever a text \"cut\" happens.\n     **/\n    this.onCut = function() {\n        this.commands.exec(\"cut\", this);\n    };\n\n    /**\n     * Emitted when text is pasted.\n     * @event paste\n     * @param {Object} an object which contains one property, `text`, that represents the text to be pasted. Editing this property will alter the text that is pasted.\n     *\n     *\n     **/\n    /**\n     * Called whenever a text \"paste\" happens.\n     * @param {String} text The pasted text\n     *\n     *\n     **/\n    this.onPaste = function(text, event) {\n        var e = {text: text, event: event};\n        this.commands.exec(\"paste\", this, e);\n    };\n    \n    this.$handlePaste = function(e) {\n        if (typeof e == \"string\") \n            e = {text: e};\n        this._signal(\"paste\", e);\n        var text = e.text;\n\n        var lineMode = text == clipboard.lineMode;\n        var session = this.session;\n        if (!this.inMultiSelectMode || this.inVirtualSelectionMode) {\n            if (lineMode)\n                session.insert({ row: this.selection.lead.row, column: 0 }, text);\n            else\n                this.insert(text);\n        } else if (lineMode) {\n            this.selection.rangeList.ranges.forEach(function(range) {\n                session.insert({ row: range.start.row, column: 0 }, text);\n            });\n        } else {\n            var lines = text.split(/\\r\\n|\\r|\\n/);\n            var ranges = this.selection.rangeList.ranges;\n    \n            if (lines.length > ranges.length || lines.length < 2 || !lines[1])\n                return this.commands.exec(\"insertstring\", this, text);\n    \n            for (var i = ranges.length; i--;) {\n                var range = ranges[i];\n                if (!range.isEmpty())\n                    session.remove(range);\n    \n                session.insert(range.start, lines[i]);\n            }\n        }\n    };\n\n    this.execCommand = function(command, args) {\n        return this.commands.exec(command, this, args);\n    };\n\n    /**\n     * Inserts `text` into wherever the cursor is pointing.\n     * @param {String} text The new text to add\n     *\n     **/\n    this.insert = function(text, pasted) {\n        var session = this.session;\n        var mode = session.getMode();\n        var cursor = this.getCursorPosition();\n\n        if (this.getBehavioursEnabled() && !pasted) {\n            // Get a transform if the current mode wants one.\n            var transform = mode.transformAction(session.getState(cursor.row), 'insertion', this, session, text);\n            if (transform) {\n                if (text !== transform.text) {\n                    // keep automatic insertion in a separate delta, unless it is in multiselect mode\n                    if (!this.inVirtualSelectionMode) {\n                        this.session.mergeUndoDeltas = false;\n                        this.mergeNextCommand = false;\n                    }\n                }\n                text = transform.text;\n\n            }\n        }\n        \n        if (text == \"\\t\")\n            text = this.session.getTabString();\n\n        // remove selected text\n        if (!this.selection.isEmpty()) {\n            var range = this.getSelectionRange();\n            cursor = this.session.remove(range);\n            this.clearSelection();\n        }\n        else if (this.session.getOverwrite() && text.indexOf(\"\\n\") == -1) {\n            var range = new Range.fromPoints(cursor, cursor);\n            range.end.column += text.length;\n            this.session.remove(range);\n        }\n\n        if (text == \"\\n\" || text == \"\\r\\n\") {\n            var line = session.getLine(cursor.row);\n            if (cursor.column > line.search(/\\S|$/)) {\n                var d = line.substr(cursor.column).search(/\\S|$/);\n                session.doc.removeInLine(cursor.row, cursor.column, cursor.column + d);\n            }\n        }\n        this.clearSelection();\n\n        var start = cursor.column;\n        var lineState = session.getState(cursor.row);\n        var line = session.getLine(cursor.row);\n        var shouldOutdent = mode.checkOutdent(lineState, line, text);\n        var end = session.insert(cursor, text);\n\n        if (transform && transform.selection) {\n            if (transform.selection.length == 2) { // Transform relative to the current column\n                this.selection.setSelectionRange(\n                    new Range(cursor.row, start + transform.selection[0],\n                              cursor.row, start + transform.selection[1]));\n            } else { // Transform relative to the current row.\n                this.selection.setSelectionRange(\n                    new Range(cursor.row + transform.selection[0],\n                              transform.selection[1],\n                              cursor.row + transform.selection[2],\n                              transform.selection[3]));\n            }\n        }\n\n        if (session.getDocument().isNewLine(text)) {\n            var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString());\n\n            session.insert({row: cursor.row+1, column: 0}, lineIndent);\n        }\n        if (shouldOutdent)\n            mode.autoOutdent(lineState, session, cursor.row);\n    };\n\n    this.onTextInput = function(text) {\n        this.keyBinding.onTextInput(text);\n    };\n\n    this.onCommandKey = function(e, hashId, keyCode) {\n        this.keyBinding.onCommandKey(e, hashId, keyCode);\n    };\n\n    /**\n     * Pass in `true` to enable overwrites in your session, or `false` to disable. If overwrites is enabled, any text you enter will type over any text after it. If the value of `overwrite` changes, this function also emits the `changeOverwrite` event.\n     * @param {Boolean} overwrite Defines whether or not to set overwrites\n     *\n     *\n     * @related EditSession.setOverwrite\n     **/\n    this.setOverwrite = function(overwrite) {\n        this.session.setOverwrite(overwrite);\n    };\n\n    /**\n     * Returns `true` if overwrites are enabled; `false` otherwise.\n     * @returns {Boolean}\n     * @related EditSession.getOverwrite\n     **/\n    this.getOverwrite = function() {\n        return this.session.getOverwrite();\n    };\n\n    /**\n     * Sets the value of overwrite to the opposite of whatever it currently is.\n     * @related EditSession.toggleOverwrite\n     **/\n    this.toggleOverwrite = function() {\n        this.session.toggleOverwrite();\n    };\n\n    /**\n     * Sets how fast the mouse scrolling should do.\n     * @param {Number} speed A value indicating the new speed (in milliseconds)\n     **/\n    this.setScrollSpeed = function(speed) {\n        this.setOption(\"scrollSpeed\", speed);\n    };\n\n    /**\n     * Returns the value indicating how fast the mouse scroll speed is (in milliseconds).\n     * @returns {Number}\n     **/\n    this.getScrollSpeed = function() {\n        return this.getOption(\"scrollSpeed\");\n    };\n\n    /**\n     * Sets the delay (in milliseconds) of the mouse drag.\n     * @param {Number} dragDelay A value indicating the new delay\n     **/\n    this.setDragDelay = function(dragDelay) {\n        this.setOption(\"dragDelay\", dragDelay);\n    };\n\n    /**\n     * Returns the current mouse drag delay.\n     * @returns {Number}\n     **/\n    this.getDragDelay = function() {\n        return this.getOption(\"dragDelay\");\n    };\n\n    /**\n     * Emitted when the selection style changes, via [[Editor.setSelectionStyle]].\n     * @event changeSelectionStyle\n     * @param {Object} data Contains one property, `data`, which indicates the new selection style\n     **/\n    /**\n     * Draw selection markers spanning whole line, or only over selected text. Default value is \"line\"\n     * @param {String} style The new selection style \"line\"|\"text\"\n     *\n     **/\n    this.setSelectionStyle = function(val) {\n        this.setOption(\"selectionStyle\", val);\n    };\n\n    /**\n     * Returns the current selection style.\n     * @returns {String}\n     **/\n    this.getSelectionStyle = function() {\n        return this.getOption(\"selectionStyle\");\n    };\n\n    /**\n     * Determines whether or not the current line should be highlighted.\n     * @param {Boolean} shouldHighlight Set to `true` to highlight the current line\n     **/\n    this.setHighlightActiveLine = function(shouldHighlight) {\n        this.setOption(\"highlightActiveLine\", shouldHighlight);\n    };\n    /**\n     * Returns `true` if current lines are always highlighted.\n     * @return {Boolean}\n     **/\n    this.getHighlightActiveLine = function() {\n        return this.getOption(\"highlightActiveLine\");\n    };\n    this.setHighlightGutterLine = function(shouldHighlight) {\n        this.setOption(\"highlightGutterLine\", shouldHighlight);\n    };\n\n    this.getHighlightGutterLine = function() {\n        return this.getOption(\"highlightGutterLine\");\n    };\n\n    /**\n     * Determines if the currently selected word should be highlighted.\n     * @param {Boolean} shouldHighlight Set to `true` to highlight the currently selected word\n     *\n     **/\n    this.setHighlightSelectedWord = function(shouldHighlight) {\n        this.setOption(\"highlightSelectedWord\", shouldHighlight);\n    };\n\n    /**\n     * Returns `true` if currently highlighted words are to be highlighted.\n     * @returns {Boolean}\n     **/\n    this.getHighlightSelectedWord = function() {\n        return this.$highlightSelectedWord;\n    };\n\n    this.setAnimatedScroll = function(shouldAnimate){\n        this.renderer.setAnimatedScroll(shouldAnimate);\n    };\n\n    this.getAnimatedScroll = function(){\n        return this.renderer.getAnimatedScroll();\n    };\n\n    /**\n     * If `showInvisibles` is set to `true`, invisible characters&mdash;like spaces or new lines&mdash;are show in the editor.\n     * @param {Boolean} showInvisibles Specifies whether or not to show invisible characters\n     *\n     **/\n    this.setShowInvisibles = function(showInvisibles) {\n        this.renderer.setShowInvisibles(showInvisibles);\n    };\n\n    /**\n     * Returns `true` if invisible characters are being shown.\n     * @returns {Boolean}\n     **/\n    this.getShowInvisibles = function() {\n        return this.renderer.getShowInvisibles();\n    };\n\n    this.setDisplayIndentGuides = function(display) {\n        this.renderer.setDisplayIndentGuides(display);\n    };\n\n    this.getDisplayIndentGuides = function() {\n        return this.renderer.getDisplayIndentGuides();\n    };\n\n    /**\n     * If `showPrintMargin` is set to `true`, the print margin is shown in the editor.\n     * @param {Boolean} showPrintMargin Specifies whether or not to show the print margin\n     *\n     **/\n    this.setShowPrintMargin = function(showPrintMargin) {\n        this.renderer.setShowPrintMargin(showPrintMargin);\n    };\n\n    /**\n     * Returns `true` if the print margin is being shown.\n     * @returns {Boolean}\n     **/\n    this.getShowPrintMargin = function() {\n        return this.renderer.getShowPrintMargin();\n    };\n\n    /**\n     * Sets the column defining where the print margin should be.\n     * @param {Number} showPrintMargin Specifies the new print margin\n     *\n     **/\n    this.setPrintMarginColumn = function(showPrintMargin) {\n        this.renderer.setPrintMarginColumn(showPrintMargin);\n    };\n\n    /**\n     * Returns the column number of where the print margin is.\n     * @returns {Number}\n     **/\n    this.getPrintMarginColumn = function() {\n        return this.renderer.getPrintMarginColumn();\n    };\n\n    /**\n     * If `readOnly` is true, then the editor is set to read-only mode, and none of the content can change.\n     * @param {Boolean} readOnly Specifies whether the editor can be modified or not\n     *\n     **/\n    this.setReadOnly = function(readOnly) {\n        this.setOption(\"readOnly\", readOnly);\n    };\n\n    /**\n     * Returns `true` if the editor is set to read-only mode.\n     * @returns {Boolean}\n     **/\n    this.getReadOnly = function() {\n        return this.getOption(\"readOnly\");\n    };\n\n    /**\n     * Specifies whether to use behaviors or not. [\"Behaviors\" in this case is the auto-pairing of special characters, like quotation marks, parenthesis, or brackets.]{: #BehaviorsDef}\n     * @param {Boolean} enabled Enables or disables behaviors\n     *\n     **/\n    this.setBehavioursEnabled = function (enabled) {\n        this.setOption(\"behavioursEnabled\", enabled);\n    };\n\n    /**\n     * Returns `true` if the behaviors are currently enabled. {:BehaviorsDef}\n     *\n     * @returns {Boolean}\n     **/\n    this.getBehavioursEnabled = function () {\n        return this.getOption(\"behavioursEnabled\");\n    };\n\n    /**\n     * Specifies whether to use wrapping behaviors or not, i.e. automatically wrapping the selection with characters such as brackets\n     * when such a character is typed in.\n     * @param {Boolean} enabled Enables or disables wrapping behaviors\n     *\n     **/\n    this.setWrapBehavioursEnabled = function (enabled) {\n        this.setOption(\"wrapBehavioursEnabled\", enabled);\n    };\n\n    /**\n     * Returns `true` if the wrapping behaviors are currently enabled.\n     **/\n    this.getWrapBehavioursEnabled = function () {\n        return this.getOption(\"wrapBehavioursEnabled\");\n    };\n\n    /**\n     * Indicates whether the fold widgets should be shown or not.\n     * @param {Boolean} show Specifies whether the fold widgets are shown\n     **/\n    this.setShowFoldWidgets = function(show) {\n        this.setOption(\"showFoldWidgets\", show);\n\n    };\n    /**\n     * Returns `true` if the fold widgets are shown.\n     * @return {Boolean}\n     **/\n    this.getShowFoldWidgets = function() {\n        return this.getOption(\"showFoldWidgets\");\n    };\n\n    this.setFadeFoldWidgets = function(fade) {\n        this.setOption(\"fadeFoldWidgets\", fade);\n    };\n\n    this.getFadeFoldWidgets = function() {\n        return this.getOption(\"fadeFoldWidgets\");\n    };\n\n    /**\n     * Removes the current selection or one character.\n     * @param {String} dir The direction of the deletion to occur, either \"left\" or \"right\"\n     *\n     **/\n    this.remove = function(dir) {\n        if (this.selection.isEmpty()){\n            if (dir == \"left\")\n                this.selection.selectLeft();\n            else\n                this.selection.selectRight();\n        }\n\n        var range = this.getSelectionRange();\n        if (this.getBehavioursEnabled()) {\n            var session = this.session;\n            var state = session.getState(range.start.row);\n            var new_range = session.getMode().transformAction(state, 'deletion', this, session, range);\n\n            if (range.end.column === 0) {\n                var text = session.getTextRange(range);\n                if (text[text.length - 1] == \"\\n\") {\n                    var line = session.getLine(range.end.row);\n                    if (/^\\s+$/.test(line)) {\n                        range.end.column = line.length;\n                    }\n                }\n            }\n            if (new_range)\n                range = new_range;\n        }\n\n        this.session.remove(range);\n        this.clearSelection();\n    };\n\n    /**\n     * Removes the word directly to the right of the current selection.\n     **/\n    this.removeWordRight = function() {\n        if (this.selection.isEmpty())\n            this.selection.selectWordRight();\n\n        this.session.remove(this.getSelectionRange());\n        this.clearSelection();\n    };\n\n    /**\n     * Removes the word directly to the left of the current selection.\n     **/\n    this.removeWordLeft = function() {\n        if (this.selection.isEmpty())\n            this.selection.selectWordLeft();\n\n        this.session.remove(this.getSelectionRange());\n        this.clearSelection();\n    };\n\n    /**\n     * Removes all the words to the left of the current selection, until the start of the line.\n     **/\n    this.removeToLineStart = function() {\n        if (this.selection.isEmpty())\n            this.selection.selectLineStart();\n\n        this.session.remove(this.getSelectionRange());\n        this.clearSelection();\n    };\n\n    /**\n     * Removes all the words to the right of the current selection, until the end of the line.\n     **/\n    this.removeToLineEnd = function() {\n        if (this.selection.isEmpty())\n            this.selection.selectLineEnd();\n\n        var range = this.getSelectionRange();\n        if (range.start.column == range.end.column && range.start.row == range.end.row) {\n            range.end.column = 0;\n            range.end.row++;\n        }\n\n        this.session.remove(range);\n        this.clearSelection();\n    };\n\n    /**\n     * Splits the line at the current selection (by inserting an `'\\n'`).\n     **/\n    this.splitLine = function() {\n        if (!this.selection.isEmpty()) {\n            this.session.remove(this.getSelectionRange());\n            this.clearSelection();\n        }\n\n        var cursor = this.getCursorPosition();\n        this.insert(\"\\n\");\n        this.moveCursorToPosition(cursor);\n    };\n\n    /**\n     * Transposes current line.\n     **/\n    this.transposeLetters = function() {\n        if (!this.selection.isEmpty()) {\n            return;\n        }\n\n        var cursor = this.getCursorPosition();\n        var column = cursor.column;\n        if (column === 0)\n            return;\n\n        var line = this.session.getLine(cursor.row);\n        var swap, range;\n        if (column < line.length) {\n            swap = line.charAt(column) + line.charAt(column-1);\n            range = new Range(cursor.row, column-1, cursor.row, column+1);\n        }\n        else {\n            swap = line.charAt(column-1) + line.charAt(column-2);\n            range = new Range(cursor.row, column-2, cursor.row, column);\n        }\n        this.session.replace(range, swap);\n        this.session.selection.moveToPosition(range.end);\n    };\n\n    /**\n     * Converts the current selection entirely into lowercase.\n     **/\n    this.toLowerCase = function() {\n        var originalRange = this.getSelectionRange();\n        if (this.selection.isEmpty()) {\n            this.selection.selectWord();\n        }\n\n        var range = this.getSelectionRange();\n        var text = this.session.getTextRange(range);\n        this.session.replace(range, text.toLowerCase());\n        this.selection.setSelectionRange(originalRange);\n    };\n\n    /**\n     * Converts the current selection entirely into uppercase.\n     **/\n    this.toUpperCase = function() {\n        var originalRange = this.getSelectionRange();\n        if (this.selection.isEmpty()) {\n            this.selection.selectWord();\n        }\n\n        var range = this.getSelectionRange();\n        var text = this.session.getTextRange(range);\n        this.session.replace(range, text.toUpperCase());\n        this.selection.setSelectionRange(originalRange);\n    };\n\n    /**\n     * Inserts an indentation into the current cursor position or indents the selected lines.\n     *\n     * @related EditSession.indentRows\n     **/\n    this.indent = function() {\n        var session = this.session;\n        var range = this.getSelectionRange();\n\n        if (range.start.row < range.end.row) {\n            var rows = this.$getSelectedRows();\n            session.indentRows(rows.first, rows.last, \"\\t\");\n            return;\n        } else if (range.start.column < range.end.column) {\n            var text = session.getTextRange(range);\n            if (!/^\\s+$/.test(text)) {\n                var rows = this.$getSelectedRows();\n                session.indentRows(rows.first, rows.last, \"\\t\");\n                return;\n            }\n        }\n        \n        var line = session.getLine(range.start.row);\n        var position = range.start;\n        var size = session.getTabSize();\n        var column = session.documentToScreenColumn(position.row, position.column);\n\n        if (this.session.getUseSoftTabs()) {\n            var count = (size - column % size);\n            var indentString = lang.stringRepeat(\" \", count);\n        } else {\n            var count = column % size;\n            while (line[range.start.column - 1] == \" \" && count) {\n                range.start.column--;\n                count--;\n            }\n            this.selection.setSelectionRange(range);\n            indentString = \"\\t\";\n        }\n        return this.insert(indentString);\n    };\n\n    /**\n     * Indents the current line.\n     * @related EditSession.indentRows\n     **/\n    this.blockIndent = function() {\n        var rows = this.$getSelectedRows();\n        this.session.indentRows(rows.first, rows.last, \"\\t\");\n    };\n\n    /**\n     * Outdents the current line.\n     * @related EditSession.outdentRows\n     **/\n    this.blockOutdent = function() {\n        var selection = this.session.getSelection();\n        this.session.outdentRows(selection.getRange());\n    };\n\n    // TODO: move out of core when we have good mechanism for managing extensions\n    this.sortLines = function() {\n        var rows = this.$getSelectedRows();\n        var session = this.session;\n\n        var lines = [];\n        for (var i = rows.first; i <= rows.last; i++)\n            lines.push(session.getLine(i));\n\n        lines.sort(function(a, b) {\n            if (a.toLowerCase() < b.toLowerCase()) return -1;\n            if (a.toLowerCase() > b.toLowerCase()) return 1;\n            return 0;\n        });\n\n        var deleteRange = new Range(0, 0, 0, 0);\n        for (var i = rows.first; i <= rows.last; i++) {\n            var line = session.getLine(i);\n            deleteRange.start.row = i;\n            deleteRange.end.row = i;\n            deleteRange.end.column = line.length;\n            session.replace(deleteRange, lines[i-rows.first]);\n        }\n    };\n\n    /**\n     * Given the currently selected range, this function either comments all the lines, or uncomments all of them.\n     **/\n    this.toggleCommentLines = function() {\n        var state = this.session.getState(this.getCursorPosition().row);\n        var rows = this.$getSelectedRows();\n        this.session.getMode().toggleCommentLines(state, this.session, rows.first, rows.last);\n    };\n\n    this.toggleBlockComment = function() {\n        var cursor = this.getCursorPosition();\n        var state = this.session.getState(cursor.row);\n        var range = this.getSelectionRange();\n        this.session.getMode().toggleBlockComment(state, this.session, range, cursor);\n    };\n\n    /**\n     * Works like [[EditSession.getTokenAt]], except it returns a number.\n     * @returns {Number}\n     **/\n    this.getNumberAt = function(row, column) {\n        var _numberRx = /[\\-]?[0-9]+(?:\\.[0-9]+)?/g;\n        _numberRx.lastIndex = 0;\n\n        var s = this.session.getLine(row);\n        while (_numberRx.lastIndex < column) {\n            var m = _numberRx.exec(s);\n            if(m.index <= column && m.index+m[0].length >= column){\n                var number = {\n                    value: m[0],\n                    start: m.index,\n                    end: m.index+m[0].length\n                };\n                return number;\n            }\n        }\n        return null;\n    };\n\n    /**\n     * If the character before the cursor is a number, this functions changes its value by `amount`.\n     * @param {Number} amount The value to change the numeral by (can be negative to decrease value)\n     *\n     **/\n    this.modifyNumber = function(amount) {\n        var row = this.selection.getCursor().row;\n        var column = this.selection.getCursor().column;\n\n        // get the char before the cursor\n        var charRange = new Range(row, column-1, row, column);\n\n        var c = this.session.getTextRange(charRange);\n        // if the char is a digit\n        if (!isNaN(parseFloat(c)) && isFinite(c)) {\n            // get the whole number the digit is part of\n            var nr = this.getNumberAt(row, column);\n            // if number found\n            if (nr) {\n                var fp = nr.value.indexOf(\".\") >= 0 ? nr.start + nr.value.indexOf(\".\") + 1 : nr.end;\n                var decimals = nr.start + nr.value.length - fp;\n\n                var t = parseFloat(nr.value);\n                t *= Math.pow(10, decimals);\n\n\n                if(fp !== nr.end && column < fp){\n                    amount *= Math.pow(10, nr.end - column - 1);\n                } else {\n                    amount *= Math.pow(10, nr.end - column);\n                }\n\n                t += amount;\n                t /= Math.pow(10, decimals);\n                var nnr = t.toFixed(decimals);\n\n                //update number\n                var replaceRange = new Range(row, nr.start, row, nr.end);\n                this.session.replace(replaceRange, nnr);\n\n                //reposition the cursor\n                this.moveCursorTo(row, Math.max(nr.start +1, column + nnr.length - nr.value.length));\n\n            }\n        }\n    };\n\n    /**\n     * Removes all the lines in the current selection\n     * @related EditSession.remove\n     **/\n    this.removeLines = function() {\n        var rows = this.$getSelectedRows();\n        this.session.removeFullLines(rows.first, rows.last);\n        this.clearSelection();\n    };\n\n    this.duplicateSelection = function() {\n        var sel = this.selection;\n        var doc = this.session;\n        var range = sel.getRange();\n        var reverse = sel.isBackwards();\n        if (range.isEmpty()) {\n            var row = range.start.row;\n            doc.duplicateLines(row, row);\n        } else {\n            var point = reverse ? range.start : range.end;\n            var endPoint = doc.insert(point, doc.getTextRange(range), false);\n            range.start = point;\n            range.end = endPoint;\n\n            sel.setSelectionRange(range, reverse);\n        }\n    };\n\n    /**\n     * Shifts all the selected lines down one row.\n     *\n     * @returns {Number} On success, it returns -1.\n     * @related EditSession.moveLinesUp\n     **/\n    this.moveLinesDown = function() {\n        this.$moveLines(1, false);\n    };\n\n    /**\n     * Shifts all the selected lines up one row.\n     * @returns {Number} On success, it returns -1.\n     * @related EditSession.moveLinesDown\n     **/\n    this.moveLinesUp = function() {\n        this.$moveLines(-1, false);\n    };\n\n    /**\n     * Moves a range of text from the given range to the given position. `toPosition` is an object that looks like this:\n     * ```json\n     *    { row: newRowLocation, column: newColumnLocation }\n     * ```\n     * @param {Range} fromRange The range of text you want moved within the document\n     * @param {Object} toPosition The location (row and column) where you want to move the text to\n     *\n     * @returns {Range} The new range where the text was moved to.\n     * @related EditSession.moveText\n     **/\n    this.moveText = function(range, toPosition, copy) {\n        return this.session.moveText(range, toPosition, copy);\n    };\n\n    /**\n     * Copies all the selected lines up one row.\n     * @returns {Number} On success, returns 0.\n     *\n     **/\n    this.copyLinesUp = function() {\n        this.$moveLines(-1, true);\n    };\n\n    /**\n     * Copies all the selected lines down one row.\n     * @returns {Number} On success, returns the number of new rows added; in other words, `lastRow - firstRow + 1`.\n     * @related EditSession.duplicateLines\n     *\n     **/\n    this.copyLinesDown = function() {\n        this.$moveLines(1, true);\n    };\n\n    /**\n     * for internal use\n     * @ignore\n     *\n     **/\n    this.$moveLines = function(dir, copy) {\n        var rows, moved;\n        var selection = this.selection;\n        if (!selection.inMultiSelectMode || this.inVirtualSelectionMode) {\n            var range = selection.toOrientedRange();\n            rows = this.$getSelectedRows(range);\n            moved = this.session.$moveLines(rows.first, rows.last, copy ? 0 : dir);\n            if (copy && dir == -1) moved = 0;\n            range.moveBy(moved, 0);\n            selection.fromOrientedRange(range);\n        } else {\n            var ranges = selection.rangeList.ranges;\n            selection.rangeList.detach(this.session);\n            this.inVirtualSelectionMode = true;\n            \n            var diff = 0;\n            var totalDiff = 0;\n            var l = ranges.length;\n            for (var i = 0; i < l; i++) {\n                var rangeIndex = i;\n                ranges[i].moveBy(diff, 0);\n                rows = this.$getSelectedRows(ranges[i]);\n                var first = rows.first;\n                var last = rows.last;\n                while (++i < l) {\n                    if (totalDiff) ranges[i].moveBy(totalDiff, 0);\n                    var subRows = this.$getSelectedRows(ranges[i]);\n                    if (copy && subRows.first != last)\n                        break;\n                    else if (!copy && subRows.first > last + 1)\n                        break;\n                    last = subRows.last;\n                }\n                i--;\n                diff = this.session.$moveLines(first, last, copy ? 0 : dir);\n                if (copy && dir == -1) rangeIndex = i + 1;\n                while (rangeIndex <= i) {\n                    ranges[rangeIndex].moveBy(diff, 0);\n                    rangeIndex++;\n                }\n                if (!copy) diff = 0;\n                totalDiff += diff;\n            }\n            \n            selection.fromOrientedRange(selection.ranges[0]);\n            selection.rangeList.attach(this.session);\n            this.inVirtualSelectionMode = false;\n        }\n    };\n\n    /**\n     * Returns an object indicating the currently selected rows. The object looks like this:\n     *\n     * ```json\n     * { first: range.start.row, last: range.end.row }\n     * ```\n     *\n     * @returns {Object}\n     **/\n    this.$getSelectedRows = function(range) {\n        range = (range || this.getSelectionRange()).collapseRows();\n\n        return {\n            first: this.session.getRowFoldStart(range.start.row),\n            last: this.session.getRowFoldEnd(range.end.row)\n        };\n    };\n\n    this.onCompositionStart = function(text) {\n        this.renderer.showComposition(this.getCursorPosition());\n    };\n\n    this.onCompositionUpdate = function(text) {\n        this.renderer.setCompositionText(text);\n    };\n\n    this.onCompositionEnd = function() {\n        this.renderer.hideComposition();\n    };\n\n    /**\n     * {:VirtualRenderer.getFirstVisibleRow}\n     *\n     * @returns {Number}\n     * @related VirtualRenderer.getFirstVisibleRow\n     **/\n    this.getFirstVisibleRow = function() {\n        return this.renderer.getFirstVisibleRow();\n    };\n\n    /**\n     * {:VirtualRenderer.getLastVisibleRow}\n     *\n     * @returns {Number}\n     * @related VirtualRenderer.getLastVisibleRow\n     **/\n    this.getLastVisibleRow = function() {\n        return this.renderer.getLastVisibleRow();\n    };\n\n    /**\n     * Indicates if the row is currently visible on the screen.\n     * @param {Number} row The row to check\n     *\n     * @returns {Boolean}\n     **/\n    this.isRowVisible = function(row) {\n        return (row >= this.getFirstVisibleRow() && row <= this.getLastVisibleRow());\n    };\n\n    /**\n     * Indicates if the entire row is currently visible on the screen.\n     * @param {Number} row The row to check\n     *\n     *\n     * @returns {Boolean}\n     **/\n    this.isRowFullyVisible = function(row) {\n        return (row >= this.renderer.getFirstFullyVisibleRow() && row <= this.renderer.getLastFullyVisibleRow());\n    };\n\n    /**\n     * Returns the number of currently visible rows.\n     * @returns {Number}\n     **/\n    this.$getVisibleRowCount = function() {\n        return this.renderer.getScrollBottomRow() - this.renderer.getScrollTopRow() + 1;\n    };\n\n    this.$moveByPage = function(dir, select) {\n        var renderer = this.renderer;\n        var config = this.renderer.layerConfig;\n        var rows = dir * Math.floor(config.height / config.lineHeight);\n\n        if (select === true) {\n            this.selection.$moveSelection(function(){\n                this.moveCursorBy(rows, 0);\n            });\n        } else if (select === false) {\n            this.selection.moveCursorBy(rows, 0);\n            this.selection.clearSelection();\n        }\n\n        var scrollTop = renderer.scrollTop;\n\n        renderer.scrollBy(0, rows * config.lineHeight);\n        if (select != null)\n            renderer.scrollCursorIntoView(null, 0.5);\n\n        renderer.animateScrolling(scrollTop);\n    };\n\n    /**\n     * Selects the text from the current position of the document until where a \"page down\" finishes.\n     **/\n    this.selectPageDown = function() {\n        this.$moveByPage(1, true);\n    };\n\n    /**\n     * Selects the text from the current position of the document until where a \"page up\" finishes.\n     **/\n    this.selectPageUp = function() {\n        this.$moveByPage(-1, true);\n    };\n\n    /**\n     * Shifts the document to wherever \"page down\" is, as well as moving the cursor position.\n     **/\n    this.gotoPageDown = function() {\n       this.$moveByPage(1, false);\n    };\n\n    /**\n     * Shifts the document to wherever \"page up\" is, as well as moving the cursor position.\n     **/\n    this.gotoPageUp = function() {\n        this.$moveByPage(-1, false);\n    };\n\n    /**\n     * Scrolls the document to wherever \"page down\" is, without changing the cursor position.\n     **/\n    this.scrollPageDown = function() {\n        this.$moveByPage(1);\n    };\n\n    /**\n     * Scrolls the document to wherever \"page up\" is, without changing the cursor position.\n     **/\n    this.scrollPageUp = function() {\n        this.$moveByPage(-1);\n    };\n\n    /**\n     * Moves the editor to the specified row.\n     * @related VirtualRenderer.scrollToRow\n     **/\n    this.scrollToRow = function(row) {\n        this.renderer.scrollToRow(row);\n    };\n\n    /**\n     * Scrolls to a line. If `center` is `true`, it puts the line in middle of screen (or attempts to).\n     * @param {Number} line The line to scroll to\n     * @param {Boolean} center If `true`\n     * @param {Boolean} animate If `true` animates scrolling\n     * @param {Function} callback Function to be called when the animation has finished\n     *\n     *\n     * @related VirtualRenderer.scrollToLine\n     **/\n    this.scrollToLine = function(line, center, animate, callback) {\n        this.renderer.scrollToLine(line, center, animate, callback);\n    };\n\n    /**\n     * Attempts to center the current selection on the screen.\n     **/\n    this.centerSelection = function() {\n        var range = this.getSelectionRange();\n        var pos = {\n            row: Math.floor(range.start.row + (range.end.row - range.start.row) / 2),\n            column: Math.floor(range.start.column + (range.end.column - range.start.column) / 2)\n        };\n        this.renderer.alignCursor(pos, 0.5);\n    };\n\n    /**\n     * Gets the current position of the cursor.\n     * @returns {Object} An object that looks something like this:\n     *\n     * ```json\n     * { row: currRow, column: currCol }\n     * ```\n     *\n     * @related Selection.getCursor\n     **/\n    this.getCursorPosition = function() {\n        return this.selection.getCursor();\n    };\n\n    /**\n     * Returns the screen position of the cursor.\n     * @returns {Number}\n     * @related EditSession.documentToScreenPosition\n     **/\n    this.getCursorPositionScreen = function() {\n        return this.session.documentToScreenPosition(this.getCursorPosition());\n    };\n\n    /**\n     * {:Selection.getRange}\n     * @returns {Range}\n     * @related Selection.getRange\n     **/\n    this.getSelectionRange = function() {\n        return this.selection.getRange();\n    };\n\n\n    /**\n     * Selects all the text in editor.\n     * @related Selection.selectAll\n     **/\n    this.selectAll = function() {\n        this.selection.selectAll();\n    };\n\n    /**\n     * {:Selection.clearSelection}\n     * @related Selection.clearSelection\n     **/\n    this.clearSelection = function() {\n        this.selection.clearSelection();\n    };\n\n    /**\n     * Moves the cursor to the specified row and column. Note that this does not de-select the current selection.\n     * @param {Number} row The new row number\n     * @param {Number} column The new column number\n     *\n     *\n     * @related Selection.moveCursorTo\n     **/\n    this.moveCursorTo = function(row, column) {\n        this.selection.moveCursorTo(row, column);\n    };\n\n    /**\n     * Moves the cursor to the position indicated by `pos.row` and `pos.column`.\n     * @param {Object} pos An object with two properties, row and column\n     *\n     *\n     * @related Selection.moveCursorToPosition\n     **/\n    this.moveCursorToPosition = function(pos) {\n        this.selection.moveCursorToPosition(pos);\n    };\n\n    /**\n     * Moves the cursor's row and column to the next matching bracket or HTML tag.\n     *\n     **/\n    this.jumpToMatching = function(select, expand) {\n        var cursor = this.getCursorPosition();\n        var iterator = new TokenIterator(this.session, cursor.row, cursor.column);\n        var prevToken = iterator.getCurrentToken();\n        var token = prevToken || iterator.stepForward();\n\n        if (!token) return;\n\n        //get next closing tag or bracket\n        var matchType;\n        var found = false;\n        var depth = {};\n        var i = cursor.column - token.start;\n        var bracketType;\n        var brackets = {\n            \")\": \"(\",\n            \"(\": \"(\",\n            \"]\": \"[\",\n            \"[\": \"[\",\n            \"{\": \"{\",\n            \"}\": \"{\"\n        };\n        \n        do {\n            if (token.value.match(/[{}()\\[\\]]/g)) {\n                for (; i < token.value.length && !found; i++) {\n                    if (!brackets[token.value[i]]) {\n                        continue;\n                    }\n\n                    bracketType = brackets[token.value[i]] + '.' + token.type.replace(\"rparen\", \"lparen\");\n\n                    if (isNaN(depth[bracketType])) {\n                        depth[bracketType] = 0;\n                    }\n\n                    switch (token.value[i]) {\n                        case '(':\n                        case '[':\n                        case '{':\n                            depth[bracketType]++;\n                            break;\n                        case ')':\n                        case ']':\n                        case '}':\n                            depth[bracketType]--;\n\n                            if (depth[bracketType] === -1) {\n                                matchType = 'bracket';\n                                found = true;\n                            }\n                        break;\n                    }\n                }\n            }\n            else if (token.type.indexOf('tag-name') !== -1) {\n                if (isNaN(depth[token.value])) {\n                    depth[token.value] = 0;\n                }\n                \n                if (prevToken.value === '<') {\n                    depth[token.value]++;\n                }\n                else if (prevToken.value === '</') {\n                    depth[token.value]--;\n                }\n                \n                if (depth[token.value] === -1) {\n                    matchType = 'tag';\n                    found = true;\n                }\n            }\n\n            if (!found) {\n                prevToken = token;\n                token = iterator.stepForward();\n                i = 0;\n            }\n        } while (token && !found);\n\n        //no match found\n        if (!matchType)\n            return;\n\n        var range, pos;\n        if (matchType === 'bracket') {\n            range = this.session.getBracketRange(cursor);\n            if (!range) {\n                range = new Range(\n                    iterator.getCurrentTokenRow(),\n                    iterator.getCurrentTokenColumn() + i - 1,\n                    iterator.getCurrentTokenRow(),\n                    iterator.getCurrentTokenColumn() + i - 1\n                );\n                pos = range.start;\n                if (expand || pos.row === cursor.row && Math.abs(pos.column - cursor.column) < 2)\n                    range = this.session.getBracketRange(pos);\n            }\n        }\n        else if (matchType === 'tag') {\n            if (token && token.type.indexOf('tag-name') !== -1) \n                var tag = token.value;\n            else\n                return;\n\n            range = new Range(\n                iterator.getCurrentTokenRow(),\n                iterator.getCurrentTokenColumn() - 2,\n                iterator.getCurrentTokenRow(),\n                iterator.getCurrentTokenColumn() - 2\n            );\n\n            //find matching tag\n            if (range.compare(cursor.row, cursor.column) === 0) {\n                found = false;\n                do {\n                    token = prevToken;\n                    prevToken = iterator.stepBackward();\n                    \n                    if (prevToken) {\n                        if (prevToken.type.indexOf('tag-close') !== -1) {\n                            range.setEnd(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1);\n                        }\n\n                        if (token.value === tag && token.type.indexOf('tag-name') !== -1) {\n                            if (prevToken.value === '<') {\n                                depth[tag]++;\n                            }\n                            else if (prevToken.value === '</') {\n                                depth[tag]--;\n                            }\n                            \n                            if (depth[tag] === 0)\n                                found = true;\n                        }\n                    }\n                } while (prevToken && !found);\n            }\n\n            //we found it\n            if (token && token.type.indexOf('tag-name')) {\n                pos = range.start;\n                if (pos.row == cursor.row && Math.abs(pos.column - cursor.column) < 2)\n                    pos = range.end;\n            }\n        }\n\n        pos = range && range.cursor || pos;\n        if (pos) {\n            if (select) {\n                if (range && expand) {\n                    this.selection.setRange(range);\n                } else if (range && range.isEqual(this.getSelectionRange())) {\n                    this.clearSelection();\n                } else {\n                    this.selection.selectTo(pos.row, pos.column);\n                }\n            } else {\n                this.selection.moveTo(pos.row, pos.column);\n            }\n        }\n    };\n\n    /**\n     * Moves the cursor to the specified line number, and also into the indicated column.\n     * @param {Number} lineNumber The line number to go to\n     * @param {Number} column A column number to go to\n     * @param {Boolean} animate If `true` animates scolling\n     *\n     **/\n    this.gotoLine = function(lineNumber, column, animate) {\n        this.selection.clearSelection();\n        this.session.unfold({row: lineNumber - 1, column: column || 0});\n\n        // todo: find a way to automatically exit multiselect mode\n        this.exitMultiSelectMode && this.exitMultiSelectMode();\n        this.moveCursorTo(lineNumber - 1, column || 0);\n\n        if (!this.isRowFullyVisible(lineNumber - 1))\n            this.scrollToLine(lineNumber - 1, true, animate);\n    };\n\n    /**\n     * Moves the cursor to the specified row and column. Note that this does de-select the current selection.\n     * @param {Number} row The new row number\n     * @param {Number} column The new column number\n     *\n     *\n     * @related Editor.moveCursorTo\n     **/\n    this.navigateTo = function(row, column) {\n        this.selection.moveTo(row, column);\n    };\n\n    /**\n     * Moves the cursor up in the document the specified number of times. Note that this does de-select the current selection.\n     * @param {Number} times The number of times to change navigation\n     *\n     *\n     **/\n    this.navigateUp = function(times) {\n        if (this.selection.isMultiLine() && !this.selection.isBackwards()) {\n            var selectionStart = this.selection.anchor.getPosition();\n            return this.moveCursorToPosition(selectionStart);\n        }\n        this.selection.clearSelection();\n        this.selection.moveCursorBy(-times || -1, 0);\n    };\n\n    /**\n     * Moves the cursor down in the document the specified number of times. Note that this does de-select the current selection.\n     * @param {Number} times The number of times to change navigation\n     *\n     *\n     **/\n    this.navigateDown = function(times) {\n        if (this.selection.isMultiLine() && this.selection.isBackwards()) {\n            var selectionEnd = this.selection.anchor.getPosition();\n            return this.moveCursorToPosition(selectionEnd);\n        }\n        this.selection.clearSelection();\n        this.selection.moveCursorBy(times || 1, 0);\n    };\n\n    /**\n     * Moves the cursor left in the document the specified number of times. Note that this does de-select the current selection.\n     * @param {Number} times The number of times to change navigation\n     *\n     *\n     **/\n    this.navigateLeft = function(times) {\n        if (!this.selection.isEmpty()) {\n            var selectionStart = this.getSelectionRange().start;\n            this.moveCursorToPosition(selectionStart);\n        }\n        else {\n            times = times || 1;\n            while (times--) {\n                this.selection.moveCursorLeft();\n            }\n        }\n        this.clearSelection();\n    };\n\n    /**\n     * Moves the cursor right in the document the specified number of times. Note that this does de-select the current selection.\n     * @param {Number} times The number of times to change navigation\n     *\n     *\n     **/\n    this.navigateRight = function(times) {\n        if (!this.selection.isEmpty()) {\n            var selectionEnd = this.getSelectionRange().end;\n            this.moveCursorToPosition(selectionEnd);\n        }\n        else {\n            times = times || 1;\n            while (times--) {\n                this.selection.moveCursorRight();\n            }\n        }\n        this.clearSelection();\n    };\n\n    /**\n     *\n     * Moves the cursor to the start of the current line. Note that this does de-select the current selection.\n     **/\n    this.navigateLineStart = function() {\n        this.selection.moveCursorLineStart();\n        this.clearSelection();\n    };\n\n    /**\n     *\n     * Moves the cursor to the end of the current line. Note that this does de-select the current selection.\n     **/\n    this.navigateLineEnd = function() {\n        this.selection.moveCursorLineEnd();\n        this.clearSelection();\n    };\n\n    /**\n     *\n     * Moves the cursor to the end of the current file. Note that this does de-select the current selection.\n     **/\n    this.navigateFileEnd = function() {\n        this.selection.moveCursorFileEnd();\n        this.clearSelection();\n    };\n\n    /**\n     *\n     * Moves the cursor to the start of the current file. Note that this does de-select the current selection.\n     **/\n    this.navigateFileStart = function() {\n        this.selection.moveCursorFileStart();\n        this.clearSelection();\n    };\n\n    /**\n     *\n     * Moves the cursor to the word immediately to the right of the current position. Note that this does de-select the current selection.\n     **/\n    this.navigateWordRight = function() {\n        this.selection.moveCursorWordRight();\n        this.clearSelection();\n    };\n\n    /**\n     *\n     * Moves the cursor to the word immediately to the left of the current position. Note that this does de-select the current selection.\n     **/\n    this.navigateWordLeft = function() {\n        this.selection.moveCursorWordLeft();\n        this.clearSelection();\n    };\n\n    /**\n     * Replaces the first occurrence of `options.needle` with the value in `replacement`.\n     * @param {String} replacement The text to replace with\n     * @param {Object} options The [[Search `Search`]] options to use\n     *\n     *\n     **/\n    this.replace = function(replacement, options) {\n        if (options)\n            this.$search.set(options);\n\n        var range = this.$search.find(this.session);\n        var replaced = 0;\n        if (!range)\n            return replaced;\n\n        if (this.$tryReplace(range, replacement)) {\n            replaced = 1;\n        }\n\n        this.selection.setSelectionRange(range);\n        this.renderer.scrollSelectionIntoView(range.start, range.end);\n\n        return replaced;\n    };\n\n    /**\n     * Replaces all occurrences of `options.needle` with the value in `replacement`.\n     * @param {String} replacement The text to replace with\n     * @param {Object} options The [[Search `Search`]] options to use\n     *\n     *\n     **/\n    this.replaceAll = function(replacement, options) {\n        if (options) {\n            this.$search.set(options);\n        }\n\n        var ranges = this.$search.findAll(this.session);\n        var replaced = 0;\n        if (!ranges.length)\n            return replaced;\n\n        var selection = this.getSelectionRange();\n        this.selection.moveTo(0, 0);\n\n        for (var i = ranges.length - 1; i >= 0; --i) {\n            if(this.$tryReplace(ranges[i], replacement)) {\n                replaced++;\n            }\n        }\n\n        this.selection.setSelectionRange(selection);\n\n        return replaced;\n    };\n\n    this.$tryReplace = function(range, replacement) {\n        var input = this.session.getTextRange(range);\n        replacement = this.$search.replace(input, replacement);\n        if (replacement !== null) {\n            range.end = this.session.replace(range, replacement);\n            return range;\n        } else {\n            return null;\n        }\n    };\n\n    /**\n     * {:Search.getOptions} For more information on `options`, see [[Search `Search`]].\n     * @related Search.getOptions\n     * @returns {Object}\n     **/\n    this.getLastSearchOptions = function() {\n        return this.$search.getOptions();\n    };\n\n    /**\n     * Attempts to find `needle` within the document. For more information on `options`, see [[Search `Search`]].\n     * @param {String} needle The text to search for (optional)\n     * @param {Object} options An object defining various search properties\n     * @param {Boolean} animate If `true` animate scrolling\n     *\n     *\n     * @related Search.find\n     **/\n    this.find = function(needle, options, animate) {\n        if (!options)\n            options = {};\n\n        if (typeof needle == \"string\" || needle instanceof RegExp)\n            options.needle = needle;\n        else if (typeof needle == \"object\")\n            oop.mixin(options, needle);\n\n        var range = this.selection.getRange();\n        if (options.needle == null) {\n            needle = this.session.getTextRange(range)\n                || this.$search.$options.needle;\n            if (!needle) {\n                range = this.session.getWordRange(range.start.row, range.start.column);\n                needle = this.session.getTextRange(range);\n            }\n            this.$search.set({needle: needle});\n        }\n\n        this.$search.set(options);\n        if (!options.start)\n            this.$search.set({start: range});\n\n        var newRange = this.$search.find(this.session);\n        if (options.preventScroll)\n            return newRange;\n        if (newRange) {\n            this.revealRange(newRange, animate);\n            return newRange;\n        }\n        // clear selection if nothing is found\n        if (options.backwards)\n            range.start = range.end;\n        else\n            range.end = range.start;\n        this.selection.setRange(range);\n    };\n\n    /**\n     * Performs another search for `needle` in the document. For more information on `options`, see [[Search `Search`]].\n     * @param {Object} options search options\n     * @param {Boolean} animate If `true` animate scrolling\n     *\n     *\n     * @related Editor.find\n     **/\n    this.findNext = function(options, animate) {\n        this.find({skipCurrent: true, backwards: false}, options, animate);\n    };\n\n    /**\n     * Performs a search for `needle` backwards. For more information on `options`, see [[Search `Search`]].\n     * @param {Object} options search options\n     * @param {Boolean} animate If `true` animate scrolling\n     *\n     *\n     * @related Editor.find\n     **/\n    this.findPrevious = function(options, animate) {\n        this.find(options, {skipCurrent: true, backwards: true}, animate);\n    };\n\n    this.revealRange = function(range, animate) {\n        this.session.unfold(range);\n        this.selection.setSelectionRange(range);\n\n        var scrollTop = this.renderer.scrollTop;\n        this.renderer.scrollSelectionIntoView(range.start, range.end, 0.5);\n        if (animate !== false)\n            this.renderer.animateScrolling(scrollTop);\n    };\n\n    /**\n     * {:UndoManager.undo}\n     * @related UndoManager.undo\n     **/\n    this.undo = function() {\n        this.session.getUndoManager().undo(this.session);\n        this.renderer.scrollCursorIntoView(null, 0.5);\n    };\n\n    /**\n     * {:UndoManager.redo}\n     * @related UndoManager.redo\n     **/\n    this.redo = function() {\n        this.session.getUndoManager().redo(this.session);\n        this.renderer.scrollCursorIntoView(null, 0.5);\n    };\n\n    /**\n     *\n     * Cleans up the entire editor.\n     **/\n    this.destroy = function() {\n        this.renderer.destroy();\n        this._signal(\"destroy\", this);\n        if (this.session) {\n            this.session.destroy();\n        }\n    };\n\n    /**\n     * Enables automatic scrolling of the cursor into view when editor itself is inside scrollable element\n     * @param {Boolean} enable default true\n     **/\n    this.setAutoScrollEditorIntoView = function(enable) {\n        if (!enable)\n            return;\n        var rect;\n        var self = this;\n        var shouldScroll = false;\n        if (!this.$scrollAnchor)\n            this.$scrollAnchor = document.createElement(\"div\");\n        var scrollAnchor = this.$scrollAnchor;\n        scrollAnchor.style.cssText = \"position:absolute\";\n        this.container.insertBefore(scrollAnchor, this.container.firstChild);\n        var onChangeSelection = this.on(\"changeSelection\", function() {\n            shouldScroll = true;\n        });\n        // needed to not trigger sync reflow\n        var onBeforeRender = this.renderer.on(\"beforeRender\", function() {\n            if (shouldScroll)\n                rect = self.renderer.container.getBoundingClientRect();\n        });\n        var onAfterRender = this.renderer.on(\"afterRender\", function() {\n            if (shouldScroll && rect && (self.isFocused()\n                || self.searchBox && self.searchBox.isFocused())\n            ) {\n                var renderer = self.renderer;\n                var pos = renderer.$cursorLayer.$pixelPos;\n                var config = renderer.layerConfig;\n                var top = pos.top - config.offset;\n                if (pos.top >= 0 && top + rect.top < 0) {\n                    shouldScroll = true;\n                } else if (pos.top < config.height &&\n                    pos.top + rect.top + config.lineHeight > window.innerHeight) {\n                    shouldScroll = false;\n                } else {\n                    shouldScroll = null;\n                }\n                if (shouldScroll != null) {\n                    scrollAnchor.style.top = top + \"px\";\n                    scrollAnchor.style.left = pos.left + \"px\";\n                    scrollAnchor.style.height = config.lineHeight + \"px\";\n                    scrollAnchor.scrollIntoView(shouldScroll);\n                }\n                shouldScroll = rect = null;\n            }\n        });\n        this.setAutoScrollEditorIntoView = function(enable) {\n            if (enable)\n                return;\n            delete this.setAutoScrollEditorIntoView;\n            this.off(\"changeSelection\", onChangeSelection);\n            this.renderer.off(\"afterRender\", onAfterRender);\n            this.renderer.off(\"beforeRender\", onBeforeRender);\n        };\n    };\n\n\n    this.$resetCursorStyle = function() {\n        var style = this.$cursorStyle || \"ace\";\n        var cursorLayer = this.renderer.$cursorLayer;\n        if (!cursorLayer)\n            return;\n        cursorLayer.setSmoothBlinking(/smooth/.test(style));\n        cursorLayer.isBlinking = !this.$readOnly && style != \"wide\";\n        dom.setCssClass(cursorLayer.element, \"ace_slim-cursors\", /slim/.test(style));\n    };\n\n}).call(Editor.prototype);\n\n\n\nconfig.defineOptions(Editor.prototype, \"editor\", {\n    selectionStyle: {\n        set: function(style) {\n            this.onSelectionChange();\n            this._signal(\"changeSelectionStyle\", {data: style});\n        },\n        initialValue: \"line\"\n    },\n    highlightActiveLine: {\n        set: function() {this.$updateHighlightActiveLine();},\n        initialValue: true\n    },\n    highlightSelectedWord: {\n        set: function(shouldHighlight) {this.$onSelectionChange();},\n        initialValue: true\n    },\n    readOnly: {\n        set: function(readOnly) {\n            // disabled to not break vim mode!\n            // this.textInput.setReadOnly(readOnly);\n            this.$resetCursorStyle(); \n        },\n        initialValue: false\n    },\n    copyWithEmptySelection: {\n        set: function(value) {\n            this.textInput.setCopyWithEmptySelection(value);\n        },\n        initialValue: false\n    },\n    cursorStyle: {\n        set: function(val) { this.$resetCursorStyle(); },\n        values: [\"ace\", \"slim\", \"smooth\", \"wide\"],\n        initialValue: \"ace\"\n    },\n    mergeUndoDeltas: {\n        values: [false, true, \"always\"],\n        initialValue: true\n    },\n    behavioursEnabled: {initialValue: true},\n    wrapBehavioursEnabled: {initialValue: true},\n    autoScrollEditorIntoView: {\n        set: function(val) {this.setAutoScrollEditorIntoView(val);}\n    },\n    keyboardHandler: {\n        set: function(val) { this.setKeyboardHandler(val); },\n        get: function() { return this.keybindingId; },\n        handlesSet: true\n    },\n\n    hScrollBarAlwaysVisible: \"renderer\",\n    vScrollBarAlwaysVisible: \"renderer\",\n    highlightGutterLine: \"renderer\",\n    animatedScroll: \"renderer\",\n    showInvisibles: \"renderer\",\n    showPrintMargin: \"renderer\",\n    printMarginColumn: \"renderer\",\n    printMargin: \"renderer\",\n    fadeFoldWidgets: \"renderer\",\n    showFoldWidgets: \"renderer\",\n    showLineNumbers: \"renderer\",\n    showGutter: \"renderer\",\n    displayIndentGuides: \"renderer\",\n    fontSize: \"renderer\",\n    fontFamily: \"renderer\",\n    maxLines: \"renderer\",\n    minLines: \"renderer\",\n    scrollPastEnd: \"renderer\",\n    fixedWidthGutter: \"renderer\",\n    theme: \"renderer\",\n\n    scrollSpeed: \"$mouseHandler\",\n    dragDelay: \"$mouseHandler\",\n    dragEnabled: \"$mouseHandler\",\n    focusTimout: \"$mouseHandler\",\n    tooltipFollowsMouse: \"$mouseHandler\",\n\n    firstLineNumber: \"session\",\n    overwrite: \"session\",\n    newLineMode: \"session\",\n    useWorker: \"session\",\n    useSoftTabs: \"session\",\n    tabSize: \"session\",\n    wrap: \"session\",\n    indentedSoftWrap: \"session\",\n    foldStyle: \"session\",\n    mode: \"session\"\n});\n\nexports.Editor = Editor;\n});\n"
  },
  {
    "path": "lib/ace/editor_change_document_test.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\nif (typeof process !== \"undefined\") {\n    require(\"amd-loader\");\n    require(\"./test/mockdom\");\n}\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar EditSession = require(\"./edit_session\").EditSession;\nvar Editor = require(\"./editor\").Editor;\nvar Text = require(\"./mode/text\").Mode;\nvar JavaScriptMode = require(\"./mode/javascript\").Mode;\nvar CssMode = require(\"./mode/css\").Mode;\nvar HtmlMode = require(\"./mode/html\").Mode;\nvar MockRenderer = require(\"./test/mockrenderer\").MockRenderer;\nvar assert = require(\"./test/assertions\");\n\nmodule.exports = {\n\n    setUp : function(next) {\n        this.session1 = new EditSession([\"abc\", \"def\"]);\n        this.session2 = new EditSession([\"ghi\", \"jkl\"]);\n        \n        \n        this.editor = new Editor(new MockRenderer());\n        next();\n    },\n\n    \"test: change document\" : function() {\n        this.editor.setSession(this.session1);\n        assert.equal(this.editor.getSession(), this.session1);\n\n        this.editor.setSession(this.session2);\n        assert.equal(this.editor.getSession(), this.session2);\n    },\n\n    \"test: only changes to the new document should have effect\" : function() {\n        var called = false;\n        this.editor.onDocumentChange = function() {\n            called = true;\n        };\n\n        this.editor.setSession(this.session1);\n        this.editor.setSession(this.session2);\n\n        this.session1.duplicateLines(0, 0);\n        assert.notOk(called);\n\n        this.session2.duplicateLines(0, 0);\n        assert.ok(called);\n    },\n\n    \"test: should use cursor of new document\" : function() {\n        this.session1.getSelection().moveCursorTo(0, 1);\n        this.session2.getSelection().moveCursorTo(1, 0);\n\n        this.editor.setSession(this.session1);\n        assert.position(this.editor.getCursorPosition(), 0, 1);\n\n        this.editor.setSession(this.session2);\n        assert.position(this.editor.getCursorPosition(), 1, 0);\n    },\n\n    \"test: only changing the cursor of the new doc should not have an effect\" : function() {\n        this.editor.onCursorChange = function() {\n            called = true;\n        };\n\n        this.editor.setSession(this.session1);\n        this.editor.setSession(this.session2);\n        assert.position(this.editor.getCursorPosition(), 0, 0);\n\n        var called = false;\n        this.session1.getSelection().moveCursorTo(0, 1);\n        assert.position(this.editor.getCursorPosition(), 0, 0);\n        assert.notOk(called);\n\n        this.session2.getSelection().moveCursorTo(1, 1);\n        assert.position(this.editor.getCursorPosition(), 1, 1);\n        assert.ok(called);\n    },\n\n    \"test: should use selection of new document\" : function() {\n        this.session1.getSelection().selectTo(0, 1);\n        this.session2.getSelection().selectTo(1, 0);\n\n        this.editor.setSession(this.session1);\n        assert.position(this.editor.getSelection().getSelectionLead(), 0, 1);\n\n        this.editor.setSession(this.session2);\n        assert.position(this.editor.getSelection().getSelectionLead(), 1, 0);\n    },\n\n    \"test: only changing the selection of the new doc should not have an effect\" : function() {\n        this.editor.onSelectionChange = function() {\n            called = true;\n        };\n\n        this.editor.setSession(this.session1);\n        this.editor.setSession(this.session2);\n        assert.position(this.editor.getSelection().getSelectionLead(), 0, 0);\n\n        var called = false;\n        this.session1.getSelection().selectTo(0, 1);\n        assert.position(this.editor.getSelection().getSelectionLead(), 0, 0);\n        assert.notOk(called);\n\n        this.session2.getSelection().selectTo(1, 1);\n        assert.position(this.editor.getSelection().getSelectionLead(), 1, 1);\n        assert.ok(called);\n    },\n\n    \"test: should use mode of new document\" : function() {\n        this.editor.onChangeMode = function() {\n            called = true;\n        };\n        this.editor.setSession(this.session1);\n        this.editor.setSession(this.session2);\n\n        var called = false;\n        this.session1.setMode(new Text());\n        assert.notOk(called);\n\n        this.session2.setMode(new JavaScriptMode());\n        assert.ok(called);\n    },\n    \n    \"test: should use stop worker of old document\" : function(next) {\n        var self = this;\n        \n        // 1. Open an editor and set the session to CssMode\n        self.editor.setSession(self.session1);\n        self.session1.setMode(new CssMode());\n        \n        // 2. Add a line or two of valid CSS.\n        self.session1.setValue(\"DIV { color: red; }\");\n        \n        // 3. Clear the session value.\n        self.session1.setValue(\"\");\n        \n        // 4. Set the session to HtmlMode\n        self.session1.setMode(new HtmlMode());\n\n        // 5. Try to type valid HTML\n        self.session1.insert({row: 0, column: 0}, \"<html></html>\");\n        \n        setTimeout(function() {\n            assert.equal(Object.keys(self.session1.getAnnotations()).length, 0);\n            next();\n        }, 600);\n    }\n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main) {\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n}\n"
  },
  {
    "path": "lib/ace/editor_highlight_selected_word_test.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\nif (typeof process !== \"undefined\") {\n    require(\"amd-loader\");\n    require(\"./test/mockdom\");\n}\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar EditSession = require(\"./edit_session\").EditSession;\nvar Editor = require(\"./editor\").Editor;\nvar MockRenderer = require(\"./test/mockrenderer\").MockRenderer;\nvar assert = require(\"./test/assertions\");\n\nvar lipsum = \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. \" +\n             \"Mauris at arcu mi, eu lobortis mauris. Quisque ut libero eget \" +\n             \"diam congue vehicula. Quisque ut odio ut mi aliquam tincidunt. \" +\n             \"Duis lacinia aliquam lorem eget eleifend. Morbi eget felis mi. \" +\n             \"Duis quam ligula, consequat vitae convallis volutpat, blandit \" +\n             \"nec neque. Nulla facilisi. Etiam suscipit lorem ac justo \" +\n             \"sollicitudin tristique. Phasellus ut posuere nunc. Aliquam \" +\n             \"scelerisque mollis felis non gravida. Vestibulum lacus sem, \" +\n             \"posuere non bibendum id, luctus non dolor. Aenean id metus \" +\n             \"lorem, vel dapibus est. Donec gravida feugiat augue nec \" +\n             \"accumsan.Lorem ipsum dolor sit amet, consectetur adipiscing \" +\n             \"elit. Nulla vulputate, velit vitae tincidunt congue, nunc \" +\n             \"augue accumsan velit, eu consequat turpis lectus ac orci. \" +\n             \"Pellentesque ornare dolor feugiat dui auctor eu varius nulla \" +\n             \"fermentum. Sed aliquam odio at velit lacinia vel fermentum \" +\n             \"felis sodales. In dignissim magna eget nunc lobortis non \" +\n             \"fringilla nibh ullamcorper. Donec facilisis malesuada elit \" +\n             \"at egestas. Etiam bibendum, diam vitae tempor aliquet, dui \" +\n             \"libero vehicula odio, eget bibendum mauris velit eu lorem.\\n\" +\n             \"consectetur\";\n\nfunction callHighlighterUpdate(session, firstRow, lastRow) {\n    var rangeCount = 0;\n    var  mockMarkerLayer = { drawSingleLineMarker: function() {rangeCount++;} };\n    session.$searchHighlight.update([], mockMarkerLayer, session, {\n        firstRow: firstRow,\n        lastRow: lastRow\n    });\n    return rangeCount;\n}\n\nmodule.exports = {\n    setUp: function(next) {\n        this.session = new EditSession(lipsum);\n        this.editor = new Editor(new MockRenderer(), this.session);\n        this.selection = this.session.getSelection();\n        this.search = this.editor.$search;\n        next();\n    },\n\n    \"test: highlight selected words by default\": function() {\n        assert.equal(this.editor.getHighlightSelectedWord(), true);\n    },\n\n    \"test: highlight a word\": function() {\n        this.editor.moveCursorTo(0, 9);\n        this.selection.selectWord();\n\n        var highlighter = this.editor.session.$searchHighlight;\n        assert.ok(highlighter != null);\n\n        var range = this.selection.getRange();\n        assert.equal(this.session.getTextRange(range), \"ipsum\");\n        assert.equal(highlighter.cache.length, 0);\n        assert.equal(callHighlighterUpdate(this.session, 0, 0), 2);\n    },\n\n    \"test: highlight a word and clear highlight\": function() {\n        this.editor.moveCursorTo(0, 8);\n        this.selection.selectWord();\n\n        var range = this.selection.getRange();\n        assert.equal(this.session.getTextRange(range), \"ipsum\");\n        assert.equal(callHighlighterUpdate(this.session, 0, 0), 2);\n\n        this.session.highlight(\"\");\n        assert.equal(this.session.$searchHighlight.cache.length, 0);\n        assert.equal(callHighlighterUpdate(this.session, 0, 0), 0);\n    },\n\n    \"test: highlight another word\": function() {\n        this.selection.moveCursorTo(0, 14);\n        this.selection.selectWord();\n\n        var range = this.selection.getRange();\n        assert.equal(this.session.getTextRange(range), \"dolor\");\n        assert.equal(callHighlighterUpdate(this.session, 0, 0), 4);\n    },\n\n    \"test: no selection, no highlight\": function() {\n        this.selection.clearSelection();\n        assert.equal(callHighlighterUpdate(this.session, 0, 0), 0);\n    },\n\n    \"test: select a word, no highlight\": function() {\n        this.selection.moveCursorTo(0, 14);\n        this.selection.selectWord();\n\n        this.editor.setHighlightSelectedWord(false);\n\n        var range = this.selection.getRange();\n        assert.equal(this.session.getTextRange(range), \"dolor\");\n        assert.equal(callHighlighterUpdate(this.session, 0, 0), 0);\n    },\n\n    \"test: select a word with no matches\": function() {\n        this.editor.setHighlightSelectedWord(true);\n\n        var currentOptions = this.search.getOptions();\n        var newOptions = {\n            wrap: true,\n            wholeWord: true,\n            caseSensitive: true,\n            needle: \"Mauris\"\n        };\n        this.search.set(newOptions);\n\n        var match = this.search.find(this.session);\n        assert.notEqual(match, null, \"found a match for 'Mauris'\");\n\n        this.search.set(currentOptions);\n\n        this.selection.setSelectionRange(match);\n\n        assert.equal(this.session.getTextRange(match), \"Mauris\");\n        assert.equal(callHighlighterUpdate(this.session, 0, 0), 1);\n    },\n\n    \"test: partial word selection 1\": function() {\n        this.selection.moveCursorTo(0, 14);\n        this.selection.selectWord();\n        this.selection.selectLeft();\n\n        var range = this.selection.getRange();\n        assert.equal(this.session.getTextRange(range), \"dolo\");\n        assert.equal(callHighlighterUpdate(this.session, 0, 0), 0);\n    },\n\n    \"test: partial word selection 2\": function() {\n        this.selection.moveCursorTo(0, 13);\n        this.selection.selectWord();\n        this.selection.selectRight();\n\n        var range = this.selection.getRange();\n        assert.equal(this.session.getTextRange(range), \"dolor \");\n        assert.equal(callHighlighterUpdate(this.session, 0, 0), 3);\n    },\n\n    \"test: partial word selection 3\": function() {\n        this.selection.moveCursorTo(0, 14);\n        this.selection.selectWord();\n        this.selection.selectLeft();\n        this.selection.shiftSelection(1);\n\n        var range = this.selection.getRange();\n        assert.equal(this.session.getTextRange(range), \"olor\");\n        assert.equal(callHighlighterUpdate(this.session, 0, 0), 0);\n    },\n\n    \"test: select last word\": function() {\n        this.selection.moveCursorTo(0, 1);\n\n        var currentOptions = this.search.getOptions();\n        var newOptions = {\n            wrap: true,\n            wholeWord: true,\n            caseSensitive: true,\n            backwards: true,\n            needle: \"consectetur\"\n        };\n        this.search.set(newOptions);\n\n        var match = this.search.find(this.session);\n        assert.notEqual(match, null, \"found a match for 'consectetur'\");\n        assert.position(match.start, 1, 0);\n\n        this.search.set(currentOptions);\n\n        this.selection.setSelectionRange(match);\n\n        assert.equal(this.session.getTextRange(match), \"consectetur\");\n        assert.equal(callHighlighterUpdate(this.session, 0, 1), 3);\n    }\n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main) {\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n}\n"
  },
  {
    "path": "lib/ace/editor_navigation_test.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\nif (typeof process !== \"undefined\") {\n    require(\"amd-loader\");\n    require(\"./test/mockdom\");\n}\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar EditSession = require(\"./edit_session\").EditSession;\nvar Editor = require(\"./editor\").Editor;\nvar MockRenderer = require(\"./test/mockrenderer\").MockRenderer;\nvar assert = require(\"./test/assertions\");\n\nmodule.exports = {\n    createEditSession : function(rows, cols) {\n        var line = new Array(cols + 1).join(\"a\");\n        var text = new Array(rows).join(line + \"\\n\") + line;\n        return new EditSession(text);\n    },\n\n    \"test: navigate to end of file should scroll the last line into view\" : function() {\n        var doc = this.createEditSession(200, 10);\n        var editor = new Editor(new MockRenderer(), doc);\n\n        editor.execCommand(\"gotoend\");\n        var cursor = editor.getCursorPosition();\n\n        assert.ok(editor.getFirstVisibleRow() <= cursor.row);\n        assert.ok(editor.getLastVisibleRow() >= cursor.row);\n    },\n\n    \"test: navigate to start of file should scroll the first row into view\" : function() {\n        var doc = this.createEditSession(200, 10);\n        var editor = new Editor(new MockRenderer(), doc);\n\n        editor.moveCursorTo(editor.getLastVisibleRow() + 20);\n        editor.execCommand(\"gotostart\");\n\n        assert.equal(editor.getFirstVisibleRow(), 0);\n    },\n\n    \"test: goto hidden line should scroll the line into the middle of the viewport\" : function() {\n        var editor = new Editor(new MockRenderer(), this.createEditSession(200, 5));\n\n        editor.navigateTo(0, 0);\n        editor.renderer.scrollCursorIntoView();\n        editor.gotoLine(101);\n        assert.position(editor.getCursorPosition(), 100, 0);\n        assert.equal(editor.getFirstVisibleRow(), 89);\n\n        editor.navigateTo(100, 0);\n        editor.renderer.scrollCursorIntoView();\n        editor.gotoLine(11);\n        assert.position(editor.getCursorPosition(), 10, 0);\n        assert.equal(editor.getFirstVisibleRow(), 0);\n\n        editor.navigateTo(100, 0);\n        editor.renderer.scrollCursorIntoView();\n        editor.gotoLine(6);\n        assert.position(editor.getCursorPosition(), 5, 0);\n        assert.equal(0, editor.getFirstVisibleRow(), 0);\n\n        editor.navigateTo(100, 0);\n        editor.renderer.scrollCursorIntoView();\n        editor.gotoLine(1);\n        assert.position(editor.getCursorPosition(), 0, 0);\n        assert.equal(editor.getFirstVisibleRow(), 0);\n\n        editor.navigateTo(0, 0);\n        editor.renderer.scrollCursorIntoView();\n        editor.gotoLine(191);\n        assert.position(editor.getCursorPosition(), 190, 0);\n        assert.equal(editor.getFirstVisibleRow(), 179);\n\n        editor.navigateTo(0, 0);\n        editor.renderer.scrollCursorIntoView();\n        editor.gotoLine(196);\n        assert.position(editor.getCursorPosition(), 195, 0);\n        assert.equal(editor.getFirstVisibleRow(), 180);\n    },\n\n    \"test: goto visible line should only move the cursor and not scroll\": function() {\n        var editor = new Editor(new MockRenderer(), this.createEditSession(200, 5));\n\n        editor.navigateTo(0, 0);\n        editor.renderer.scrollCursorIntoView();\n        editor.gotoLine(12);\n        assert.position(editor.getCursorPosition(), 11, 0);\n        assert.equal(editor.getFirstVisibleRow(), 0);\n\n        editor.navigateTo(30, 0);\n        editor.renderer.scrollCursorIntoView();\n        editor.gotoLine(33);\n        assert.position(editor.getCursorPosition(), 32, 0);\n        assert.equal(editor.getFirstVisibleRow(), 30);\n    },\n\n    \"test: navigate from the end of a long line down to a short line and back should maintain the curser column\": function() {\n        var editor = new Editor(new MockRenderer(), new EditSession([\"123456\", \"1\"]));\n\n        editor.navigateTo(0, 6);\n        assert.position(editor.getCursorPosition(), 0, 6);\n\n        editor.navigateDown();\n        assert.position(editor.getCursorPosition(), 1, 1);\n\n        editor.navigateUp();\n        assert.position(editor.getCursorPosition(), 0, 6);\n    },\n\n    \"test: reset desired column on navigate left or right\": function() {\n        var editor = new Editor(new MockRenderer(), new EditSession([\"123456\", \"12\"]));\n\n        editor.navigateTo(0, 6);\n        assert.position(editor.getCursorPosition(), 0, 6);\n\n        editor.navigateDown();\n        assert.position(editor.getCursorPosition(), 1, 2);\n\n        editor.navigateLeft();\n        assert.position(editor.getCursorPosition(), 1, 1);\n\n        editor.navigateUp();\n        assert.position(editor.getCursorPosition(), 0, 1);\n    },\n\n    \"test: navigate within soft tabs based on setting\": function() {\n        var editor = new Editor(new MockRenderer(), new EditSession([\"        \"]));\n\n        editor.getSession().setUseSoftTabs(true);\n        editor.getSession().setTabSize(4);\n\n        editor.navigateTo(0, 0);\n        editor.navigateRight();\n        assert.position(editor.getCursorPosition(), 0, 4);\n\n        editor.navigateLeft();\n        assert.position(editor.getCursorPosition(), 0, 0);\n\n        editor.getSession().setNavigateWithinSoftTabs(true);\n\n        editor.navigateRight();\n        assert.position(editor.getCursorPosition(), 0, 1);\n\n        editor.navigateTo(0, 4);\n        editor.navigateLeft();\n        assert.position(editor.getCursorPosition(), 0, 3);\n    },\n    \n    \"test: typing text should update the desired column\": function() {\n        var editor = new Editor(new MockRenderer(), new EditSession([\"1234\", \"1234567890\"]));\n\n        editor.navigateTo(0, 3);\n        editor.insert(\"juhu\");\n        \n        editor.navigateDown();\n        assert.position(editor.getCursorPosition(), 1, 7);\n    }\n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main) {\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n}\n"
  },
  {
    "path": "lib/ace/editor_text_edit_test.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\nif (typeof process !== \"undefined\") {\n    require(\"amd-loader\");\n    require(\"./test/mockdom\");\n}\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar EditSession = require(\"./edit_session\").EditSession;\nvar Editor = require(\"./editor\").Editor;\nvar JavaScriptMode = require(\"./mode/javascript\").Mode;\nvar UndoManager = require(\"./undomanager\").UndoManager;\nvar MockRenderer = require(\"./test/mockrenderer\").MockRenderer;\nvar assert = require(\"./test/assertions\");\nvar whitespace = require(\"./ext/whitespace\");\n\nmodule.exports = {\n    \"test: delete line from the middle\" : function() {\n        var session = new EditSession([\"a\", \"b\", \"c\", \"d\"].join(\"\\n\"));\n        var editor = new Editor(new MockRenderer(), session);\n\n        editor.moveCursorTo(1, 1);\n        editor.removeLines();\n\n        assert.equal(session.toString(), \"a\\nc\\nd\");\n        assert.position(editor.getCursorPosition(), 1, 0);\n\n        editor.removeLines();\n\n        assert.equal(session.toString(), \"a\\nd\");\n        assert.position(editor.getCursorPosition(), 1, 0);\n\n        editor.removeLines();\n\n        assert.equal(session.toString(), \"a\");\n        assert.position(editor.getCursorPosition(), 0, 1);\n\n        editor.removeLines();\n\n        assert.equal(session.toString(), \"\");\n        assert.position(editor.getCursorPosition(), 0, 0);\n    },\n\n    \"test: delete multiple selected lines\" : function() {\n        var session = new EditSession([\"a\", \"b\", \"c\", \"d\"].join(\"\\n\"));\n        var editor = new Editor(new MockRenderer(), session);\n\n        editor.moveCursorTo(1, 1);\n        editor.getSelection().selectDown();\n\n        editor.removeLines();\n        assert.equal(session.toString(), \"a\\nd\");\n        assert.position(editor.getCursorPosition(), 1, 0);\n    },\n\n    \"test: delete first line\" : function() {\n        var session = new EditSession([\"a\", \"b\", \"c\"].join(\"\\n\"));\n        var editor = new Editor(new MockRenderer(), session);\n\n        editor.removeLines();\n\n        assert.equal(session.toString(), \"b\\nc\");\n        assert.position(editor.getCursorPosition(), 0, 0);\n    },\n\n    \"test: delete last should also delete the new line of the previous line\" : function() {\n        var session = new EditSession([\"a\", \"b\", \"c\", \"\"].join(\"\\n\"));\n        var editor = new Editor(new MockRenderer(), session);\n\n        editor.moveCursorTo(3, 0);\n\n        editor.removeLines();\n        assert.equal(session.toString(), \"a\\nb\\nc\");\n        assert.position(editor.getCursorPosition(), 2, 1);\n\n        editor.removeLines();\n        assert.equal(session.toString(), \"a\\nb\");\n        assert.position(editor.getCursorPosition(), 1, 1);\n    },\n\n    \"test: indent block\" : function() {\n        var session = new EditSession([\"a12345\", \"b12345\", \"c12345\"].join(\"\\n\"));\n        var editor = new Editor(new MockRenderer(), session);\n\n        editor.moveCursorTo(1, 3);\n        editor.getSelection().selectDown();\n\n        editor.indent();\n\n        assert.equal([\"a12345\", \"    b12345\", \"    c12345\"].join(\"\\n\"), session.toString());\n\n        assert.position(editor.getCursorPosition(), 2, 7);\n\n        var range = editor.getSelectionRange();\n        assert.position(range.start, 1, 7);\n        assert.position(range.end, 2, 7);\n        \n        session.setValue(\"   x\");\n        session.setOption(\"useSoftTabs\", false);\n        editor.selection.moveTo(0, 3);\n        editor.indent();\n        assert.equal(\"\\tx\", session.toString());\n    },\n\n    \"test: indent selected lines\" : function() {\n        var session = new EditSession([\"a12345\", \"b12345\", \"c12345\"].join(\"\\n\"));\n        var editor = new Editor(new MockRenderer(), session);\n\n        editor.moveCursorTo(1, 0);\n        editor.getSelection().selectDown();\n\n        editor.indent();\n        assert.equal([\"a12345\", \"    b12345\", \"c12345\"].join(\"\\n\"), session.toString());\n    },\n\n    \"test: no auto indent if cursor is before the {\" : function() {\n        var session = new EditSession(\"{\", new JavaScriptMode());\n        var editor = new Editor(new MockRenderer(), session);\n\n        editor.moveCursorTo(0, 0);\n        editor.onTextInput(\"\\n\");\n        assert.equal([\"\", \"{\"].join(\"\\n\"), session.toString());\n    },\n    \n    \"test: outdent block\" : function() {\n        var session = new EditSession([\"        a12345\", \"    b12345\", \"        c12345\"].join(\"\\n\"));\n        var editor = new Editor(new MockRenderer(), session);\n\n        editor.moveCursorTo(0, 5);\n        editor.getSelection().selectDown();\n        editor.getSelection().selectDown();\n\n        editor.blockOutdent();\n        assert.equal(session.toString(), [\"    a12345\", \"b12345\", \"    c12345\"].join(\"\\n\"));\n\n        assert.position(editor.getCursorPosition(), 2, 1);\n\n        var range = editor.getSelectionRange();\n        assert.position(range.start, 0, 1);\n        assert.position(range.end, 2, 1);\n\n        editor.blockOutdent();\n        assert.equal(session.toString(), [\"a12345\", \"b12345\", \"c12345\"].join(\"\\n\"));\n\n        var range = editor.getSelectionRange();\n        assert.position(range.start, 0, 0);\n        assert.position(range.end, 2, 0);\n    },\n\n    \"test: outent without a selection should update cursor\" : function() {\n        var session = new EditSession(\"        12\");\n        var editor = new Editor(new MockRenderer(), session);\n\n        editor.moveCursorTo(0, 3);\n        editor.blockOutdent(\"  \");\n\n        assert.equal(session.toString(), \"    12\");\n        assert.position(editor.getCursorPosition(), 0, 0);\n    },\n\n    \"test: comment lines should perserve selection\" : function() {\n        var session = new EditSession([\"  abc\", \"cde\"].join(\"\\n\"), new JavaScriptMode());\n        var editor = new Editor(new MockRenderer(), session);\n        whitespace.detectIndentation(session);\n        \n        editor.moveCursorTo(0, 2);\n        editor.getSelection().selectDown();\n        editor.toggleCommentLines();\n\n        assert.equal([\"//   abc\", \"// cde\"].join(\"\\n\"), session.toString());\n\n        var selection = editor.getSelectionRange();\n        assert.position(selection.start, 0, 5);\n        assert.position(selection.end, 1, 5);\n    },\n\n    \"test: uncomment lines should perserve selection\" : function() {\n        var session = new EditSession([\"//   abc\", \"//cde\"].join(\"\\n\"), new JavaScriptMode());\n        var editor = new Editor(new MockRenderer(), session);\n        session.setTabSize(2);\n\n        editor.moveCursorTo(0, 1);\n        editor.getSelection().selectDown();\n        editor.getSelection().selectRight();\n        editor.getSelection().selectRight();\n\n        editor.toggleCommentLines();\n\n        assert.equal([\"  abc\", \"cde\"].join(\"\\n\"), session.toString());\n        assert.range(editor.getSelectionRange(), 0, 0, 1, 1);\n    },\n\n    \"test: toggle comment lines twice should return the original text\" : function() {\n        var session = new EditSession([\"  abc\", \"cde\", \"fg\"], new JavaScriptMode());\n        var editor = new Editor(new MockRenderer(), session);\n\n        editor.moveCursorTo(0, 0);\n        editor.getSelection().selectDown();\n        editor.getSelection().selectDown();\n\n        editor.toggleCommentLines();\n        editor.toggleCommentLines();\n\n        assert.equal([\"  abc\", \"cde\", \"fg\"].join(\"\\n\"), session.toString());\n    },\n\n\n    \"test: comment lines - if the selection end is at the line start it should stay there\": function() {\n        //select down\n        var session = new EditSession([\"abc\", \"cde\"].join(\"\\n\"), new JavaScriptMode());\n        var editor = new Editor(new MockRenderer(), session);\n\n        editor.moveCursorTo(0, 0);\n        editor.getSelection().selectDown();\n\n        editor.toggleCommentLines();\n        assert.range(editor.getSelectionRange(), 0, 3, 1, 0);\n\n        // select up\n        var session = new EditSession([\"abc\", \"cde\"].join(\"\\n\"), new JavaScriptMode());\n        var editor = new Editor(new MockRenderer(), session);\n\n        editor.moveCursorTo(1, 0);\n        editor.getSelection().selectUp();\n\n        editor.toggleCommentLines();\n        assert.range(editor.getSelectionRange(), 0, 3, 1, 0);\n    },\n\n    \"test: move lines down should keep selection on moved lines\" : function() {\n        var session = new EditSession([\"11\", \"22\", \"33\", \"44\"].join(\"\\n\"));\n        var editor = new Editor(new MockRenderer(), session);\n\n        editor.moveCursorTo(0, 1);\n        editor.getSelection().selectDown();\n\n        editor.moveLinesDown();\n        assert.equal([\"33\", \"11\", \"22\", \"44\"].join(\"\\n\"), session.toString());\n        assert.position(editor.getCursorPosition(), 2, 1);\n        assert.position(editor.getSelection().getSelectionAnchor(), 1, 1);\n        assert.position(editor.getSelection().getSelectionLead(), 2, 1);\n\n        editor.moveLinesDown();\n        assert.equal([\"33\", \"44\", \"11\", \"22\"].join(\"\\n\"), session.toString());\n        assert.position(editor.getCursorPosition(), 3, 1);\n        assert.position(editor.getSelection().getSelectionAnchor(), 2, 1);\n        assert.position(editor.getSelection().getSelectionLead(), 3, 1);\n\n        // moving again should have no effect\n        editor.moveLinesDown();\n        assert.equal([\"33\", \"44\", \"11\", \"22\"].join(\"\\n\"), session.toString());\n        assert.position(editor.getCursorPosition(), 3, 1);\n        assert.position(editor.getSelection().getSelectionAnchor(), 2, 1);\n        assert.position(editor.getSelection().getSelectionLead(), 3, 1);\n    },\n\n    \"test: move lines up should keep selection on moved lines\" : function() {\n        var session = new EditSession([\"11\", \"22\", \"33\", \"44\"].join(\"\\n\"));\n        var editor = new Editor(new MockRenderer(), session);\n\n        editor.moveCursorTo(2, 1);\n        editor.getSelection().selectDown();\n\n        editor.moveLinesUp();\n        assert.equal(session.toString(), [\"11\", \"33\", \"44\", \"22\"].join(\"\\n\"));\n        assert.position(editor.getCursorPosition(), 2, 1);\n        assert.position(editor.getSelection().getSelectionAnchor(), 1, 1);\n        assert.position(editor.getSelection().getSelectionLead(), 2, 1);\n\n        editor.moveLinesUp();\n        assert.equal(session.toString(), [\"33\", \"44\", \"11\", \"22\"].join(\"\\n\"));\n        assert.position(editor.getCursorPosition(), 1, 1);\n        assert.position(editor.getSelection().getSelectionAnchor(), 0, 1);\n        assert.position(editor.getSelection().getSelectionLead(), 1, 1);\n    },\n\n    \"test: move line without active selection should not move cursor relative to the moved line\" : function() {\n        var session = new EditSession([\"11\", \"22\", \"33\", \"44\"].join(\"\\n\"));\n        var editor = new Editor(new MockRenderer(), session);\n\n        editor.moveCursorTo(1, 1);\n        editor.clearSelection();\n\n        editor.moveLinesDown();\n        assert.equal([\"11\", \"33\", \"22\", \"44\"].join(\"\\n\"), session.toString());\n        assert.position(editor.getCursorPosition(), 2, 1);\n\n        editor.clearSelection();\n\n        editor.moveLinesUp();\n        assert.equal([\"11\", \"22\", \"33\", \"44\"].join(\"\\n\"), session.toString());\n        assert.position(editor.getCursorPosition(), 1, 1);\n    },\n\n    \"test: copy lines down should keep selection\" : function() {\n        var session = new EditSession([\"11\", \"22\", \"33\", \"44\"].join(\"\\n\"));\n        var editor = new Editor(new MockRenderer(), session);\n\n        editor.moveCursorTo(1, 1);\n        editor.getSelection().selectDown();\n\n        editor.copyLinesDown();\n        assert.equal([\"11\", \"22\", \"33\", \"22\", \"33\", \"44\"].join(\"\\n\"), session.toString());\n\n        assert.position(editor.getCursorPosition(), 4, 1);\n        assert.position(editor.getSelection().getSelectionAnchor(), 3, 1);\n        assert.position(editor.getSelection().getSelectionLead(), 4, 1);\n    },\n\n    \"test: copy lines up should keep selection\" : function() {\n        var session = new EditSession([\"11\", \"22\", \"33\", \"44\"].join(\"\\n\"));\n        var editor = new Editor(new MockRenderer(), session);\n\n        editor.moveCursorTo(1, 1);\n        editor.getSelection().selectDown();\n\n        editor.copyLinesUp();\n        assert.equal([\"11\", \"22\", \"33\", \"22\", \"33\", \"44\"].join(\"\\n\"), session.toString());\n\n        assert.position(editor.getCursorPosition(), 2, 1);\n        assert.position(editor.getSelection().getSelectionAnchor(), 1, 1);\n        assert.position(editor.getSelection().getSelectionLead(), 2, 1);\n    },\n\n    \"test: input a tab with soft tab should convert it to spaces\" : function() {\n        var session = new EditSession(\"\");\n        var editor = new Editor(new MockRenderer(), session);\n\n        session.setTabSize(2);\n        session.setUseSoftTabs(true);\n\n        editor.onTextInput(\"\\t\");\n        assert.equal(session.toString(), \"  \");\n\n        session.setTabSize(5);\n        editor.onTextInput(\"\\t\");\n        assert.equal(session.toString(), \"       \");\n    },\n\n    \"test: input tab without soft tabs should keep the tab character\" : function() {\n        var session = new EditSession(\"\");\n        var editor = new Editor(new MockRenderer(), session);\n\n        session.setUseSoftTabs(false);\n\n        editor.onTextInput(\"\\t\");\n        assert.equal(session.toString(), \"\\t\");\n    },\n\n    \"test: undo/redo for delete line\" : function() {\n        var session = new EditSession([\"111\", \"222\", \"333\"]);\n        var undoManager = new UndoManager();\n        session.setUndoManager(undoManager);\n\n        var initialText = session.toString();\n        var editor = new Editor(new MockRenderer(), session);\n\n        editor.removeLines();\n        var step1 = session.toString();\n        assert.equal(step1, \"222\\n333\");\n        session.$syncInformUndoManager();\n\n        editor.removeLines();\n        var step2 = session.toString();\n        assert.equal(step2, \"333\");\n        session.$syncInformUndoManager();\n\n        editor.removeLines();\n        var step3 = session.toString();\n        assert.equal(step3, \"\");\n        session.$syncInformUndoManager();\n\n        undoManager.undo();\n        session.$syncInformUndoManager();\n        assert.equal(session.toString(), step2);\n\n        undoManager.undo();\n        session.$syncInformUndoManager();\n        assert.equal(session.toString(), step1);\n\n        undoManager.undo();\n        session.$syncInformUndoManager();\n        assert.equal(session.toString(), initialText);\n\n        undoManager.undo();\n        session.$syncInformUndoManager();\n        assert.equal(session.toString(), initialText);\n    },\n\n    \"test: remove left should remove character left of the cursor\" : function() {\n        var session = new EditSession([\"123\", \"456\"]);\n\n        var editor = new Editor(new MockRenderer(), session);\n        editor.moveCursorTo(1, 1);\n        editor.remove(\"left\");\n        assert.equal(session.toString(), \"123\\n56\");\n    },\n\n    \"test: remove left should remove line break if cursor is at line start\" : function() {\n        var session = new EditSession([\"123\", \"456\"]);\n\n        var editor = new Editor(new MockRenderer(), session);\n        editor.moveCursorTo(1, 0);\n        editor.remove(\"left\");\n        assert.equal(session.toString(), \"123456\");\n    },\n\n    \"test: remove left should remove tabsize spaces if cursor is on a tab stop and preceeded by spaces\" : function() {\n        var session = new EditSession([\"123\", \"        456\"]);\n        session.setUseSoftTabs(true);\n        session.setTabSize(4);\n\n        var editor = new Editor(new MockRenderer(), session);\n        editor.moveCursorTo(1, 8);\n        editor.remove(\"left\");\n        assert.equal(session.toString(), \"123\\n    456\");\n    },\n    \n    \"test: transpose at line start should be a noop\": function() {\n        var session = new EditSession([\"123\", \"4567\", \"89\"]);\n        \n        var editor = new Editor(new MockRenderer(), session);\n        editor.moveCursorTo(1, 0);\n        editor.transposeLetters();\n        \n        assert.equal(session.getValue(), [\"123\", \"4567\", \"89\"].join(\"\\n\"));\n    },\n    \n    \"test: transpose in line should swap the charaters before and after the cursor\": function() {\n        var session = new EditSession([\"123\", \"4567\", \"89\"]);\n        \n        var editor = new Editor(new MockRenderer(), session);\n        editor.moveCursorTo(1, 2);\n        editor.transposeLetters();\n        \n        assert.equal(session.getValue(), [\"123\", \"4657\", \"89\"].join(\"\\n\"));\n    },\n    \n    \"test: transpose at line end should swap the last two characters\": function() {\n        var session = new EditSession([\"123\", \"4567\", \"89\"]);\n        \n        var editor = new Editor(new MockRenderer(), session);\n        editor.moveCursorTo(1, 4);\n        editor.transposeLetters();\n        \n        assert.equal(session.getValue(), [\"123\", \"4576\", \"89\"].join(\"\\n\"));\n    },\n    \n    \"test: transpose with non empty selection should be a noop\": function() {\n        var session = new EditSession([\"123\", \"4567\", \"89\"]);\n        \n        var editor = new Editor(new MockRenderer(), session);\n        editor.moveCursorTo(1, 1);\n        editor.getSelection().selectRight();\n        editor.transposeLetters();\n        \n        assert.equal(session.getValue(), [\"123\", \"4567\", \"89\"].join(\"\\n\"));\n    },\n    \n    \"test: transpose should move the cursor behind the last swapped character\": function() {\n        var session = new EditSession([\"123\", \"4567\", \"89\"]);\n        \n        var editor = new Editor(new MockRenderer(), session);\n        editor.moveCursorTo(1, 2);\n        editor.transposeLetters();\n        assert.position(editor.getCursorPosition(), 1, 3);\n    },\n    \n    \"test: remove to line end\": function() {\n        var session = new EditSession([\"123\", \"4567\", \"89\"]);\n        \n        var editor = new Editor(new MockRenderer(), session);\n        editor.moveCursorTo(1, 2);\n        editor.removeToLineEnd();\n        assert.equal(session.getValue(), [\"123\", \"45\", \"89\"].join(\"\\n\"));\n    },\n    \n    \"test: remove to line end at line end should remove the new line\": function() {\n        var session = new EditSession([\"123\", \"4567\", \"89\"]);\n        \n        var editor = new Editor(new MockRenderer(), session);\n        editor.moveCursorTo(1, 4);\n        editor.removeToLineEnd();\n        assert.position(editor.getCursorPosition(), 1, 4);\n        assert.equal(session.getValue(), [\"123\", \"456789\"].join(\"\\n\"));\n    },\n\n    \"test: transform selection to uppercase\": function() {\n        var session = new EditSession([\"ajax\", \"dot\", \"org\"]);\n\n        var editor = new Editor(new MockRenderer(), session);\n        editor.moveCursorTo(1, 0);\n        editor.getSelection().selectLineEnd();\n        editor.toUpperCase();\n        assert.equal(session.getValue(), [\"ajax\", \"DOT\", \"org\"].join(\"\\n\"));\n    },\n\n    \"test: transform word to uppercase\": function() {\n        var session = new EditSession([\"ajax\", \"dot\", \"org\"]);\n\n        var editor = new Editor(new MockRenderer(), session);\n        editor.moveCursorTo(1, 0);\n        editor.toUpperCase();\n        assert.equal(session.getValue(), [\"ajax\", \"DOT\", \"org\"].join(\"\\n\"));\n        assert.position(editor.getCursorPosition(), 1, 0);\n    },\n\n    \"test: transform selection to lowercase\": function() {\n        var session = new EditSession([\"AJAX\", \"DOT\", \"ORG\"]);\n\n        var editor = new Editor(new MockRenderer(), session);\n        editor.moveCursorTo(1, 0);\n        editor.getSelection().selectLineEnd();\n        editor.toLowerCase();\n        assert.equal(session.getValue(), [\"AJAX\", \"dot\", \"ORG\"].join(\"\\n\"));\n    },\n\n    \"test: transform word to lowercase\": function() {\n        var session = new EditSession([\"AJAX\", \"DOT\", \"ORG\"]);\n\n        var editor = new Editor(new MockRenderer(), session);\n        editor.moveCursorTo(1, 0);\n        editor.toLowerCase();\n        assert.equal(session.getValue(), [\"AJAX\", \"dot\", \"ORG\"].join(\"\\n\"));\n        assert.position(editor.getCursorPosition(), 1, 0);\n    }\n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main) {\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n}\n"
  },
  {
    "path": "lib/ace/ext/beautify/php_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\nvar TokenIterator = require(\"ace/token_iterator\").TokenIterator;\nexports.newLines = [{\n    type: 'support.php_tag',\n    value: '<?php'\n}, {\n    type: 'support.php_tag',\n    value: '<?'\n}, {\n    type: 'support.php_tag',\n    value: '?>'\n}, {\n    type: 'paren.lparen',\n    value: '{',\n    indent: true\n}, {\n    type: 'paren.rparen',\n    breakBefore: true,\n    value: '}',\n    indent: false\n}, {\n    type: 'paren.rparen',\n    breakBefore: true,\n    value: '})',\n    indent: false,\n    dontBreak: true\n}, {\n    type: 'comment'\n}, {\n    type: 'text',\n    value: ';'\n}, {\n    type: 'text',\n    value: ':',\n    context: 'php'\n}, {\n    type: 'keyword',\n    value: 'case',\n    indent: true,\n    dontBreak: true\n}, {\n    type: 'keyword',\n    value: 'default',\n    indent: true,\n    dontBreak: true\n}, {\n    type: 'keyword',\n    value: 'break',\n    indent: false,\n    dontBreak: true\n}, {\n    type: 'punctuation.doctype.end',\n    value: '>'\n}, {\n    type: 'meta.tag.punctuation.end',\n    value: '>'\n}, {\n    type: 'meta.tag.punctuation.begin',\n    value: '<',\n    blockTag: true,\n    indent: true,\n    dontBreak: true\n}, {\n    type: 'meta.tag.punctuation.begin',\n    value: '</',\n    indent: false,\n    breakBefore: true,\n    dontBreak: true\n}, {\n    type: 'punctuation.operator',\n    value: ';'\n}];\n\nexports.spaces = [{\n    type: 'xml-pe',\n    prepend: true\n},{\n    type: 'entity.other.attribute-name',\n    prepend: true\n}, {\n    type: 'storage.type',\n    value: 'var',\n    append: true\n}, {\n    type: 'storage.type',\n    value: 'function',\n    append: true\n}, {\n    type: 'keyword.operator',\n    value: '='\n}, {\n    type: 'keyword',\n    value: 'as',\n    prepend: true,\n    append: true\n}, {\n    type: 'keyword',\n    value: 'function',\n    append: true\n}, {\n    type: 'support.function',\n    next: /[^\\(]/,\n    append: true\n}, {\n    type: 'keyword',\n    value: 'or',\n    append: true,\n    prepend: true\n}, {\n    type: 'keyword',\n    value: 'and',\n    append: true,\n    prepend: true\n}, {\n    type: 'keyword',\n    value: 'case',\n    append: true\n}, {\n    type: 'keyword.operator',\n    value: '||',\n    append: true,\n    prepend: true\n}, {\n    type: 'keyword.operator',\n    value: '&&',\n    append: true,\n    prepend: true\n}];\nexports.singleTags = ['!doctype','area','base','br','hr','input','img','link','meta'];\n\nexports.transform = function(iterator, maxPos, context) {\n    var token = iterator.getCurrentToken();\n    \n    var newLines = exports.newLines;\n    var spaces = exports.spaces;\n    var singleTags = exports.singleTags;\n\n    var code = '';\n    \n    var indentation = 0;\n    var dontBreak = false;\n    var tag;\n    var lastTag;\n    var lastToken = {};\n    var nextTag;\n    var nextToken = {};\n    var breakAdded = false;\n    var value = '';\n\n    while (token!==null) {\n        console.log(token);\n\n        if( !token ){\n            token = iterator.stepForward();\n            continue;\n        }\n\n        //change syntax\n        //php\n        if( token.type == 'support.php_tag' && token.value != '?>' ){\n            context = 'php';\n        }\n        else if( token.type == 'support.php_tag' && token.value == '?>' ){\n            context = 'html';\n        }\n        //css\n        else if( token.type == 'meta.tag.name.style' && context != 'css' ){\n            context = 'css';\n        }\n        else if( token.type == 'meta.tag.name.style' && context == 'css' ){\n            context = 'html';\n        }\n        //js\n        else if( token.type == 'meta.tag.name.script' && context != 'js' ){\n            context = 'js';\n        }\n        else if( token.type == 'meta.tag.name.script' && context == 'js' ){\n            context = 'html';\n        }\n\n        nextToken = iterator.stepForward();\n\n        //tag name\n        if (nextToken && nextToken.type.indexOf('meta.tag.name') == 0) {\n            nextTag = nextToken.value;\n        }\n\n        //don't linebreak\n        if ( lastToken.type == 'support.php_tag' && lastToken.value == '<?=') {\n            dontBreak = true;\n        }\n\n        //lowercase\n        if (token.type == 'meta.tag.name') {\n            token.value = token.value.toLowerCase();\n        }\n\n        //trim spaces\n        if (token.type == 'text') {\n            token.value = token.value.trim();\n        }\n\n        //skip empty tokens\n        if (!token.value) {\n            token = nextToken;\n            continue;\n        }\n\n        //put spaces back in\n        value = token.value;\n        for (var i in spaces) {\n            if (\n                token.type == spaces[i].type &&\n                (!spaces[i].value || token.value == spaces[i].value) &&\n                (\n                    nextToken &&\n                    (!spaces[i].next || spaces[i].next.test(nextToken.value))\n                )\n            ) {\n                if (spaces[i].prepend) {\n                    value = ' ' + token.value;\n                }\n\n                if (spaces[i].append) {\n                    value += ' ';\n                }\n            }\n        }\n\n        //tag name\n        if (token.type.indexOf('meta.tag.name') == 0) {\n            tag = token.value;\n            //console.log(tag);\n        }\n\n        //new line before\n        breakAdded = false;\n\n        //outdent\n        for (i in newLines) {\n            if (\n                token.type == newLines[i].type &&\n                (\n                    !newLines[i].value ||\n                    token.value == newLines[i].value\n                ) &&\n                (\n                    !newLines[i].blockTag ||\n                    singleTags.indexOf(nextTag) === -1\n                ) &&\n                (\n                    !newLines[i].context ||\n                    newLines[i].context === context\n                )\n            ) {\n                if (newLines[i].indent === false) {\n                    indentation--;\n                }\n\n                if (\n                    newLines[i].breakBefore &&\n                    ( !newLines[i].prev || newLines[i].prev.test(lastToken.value) )\n                ) {\n                    code += \"\\n\";\n                    breakAdded = true;\n\n                    //indent\n                    for (i = 0; i < indentation; i++) {\n                        code += \"\\t\";\n                    }\n                }\n\n                break;\n            }\n        }\n\n        if (dontBreak===false) {\n            for (i in newLines) {\n                if (\n                    lastToken.type == newLines[i].type &&\n                    (\n                        !newLines[i].value || lastToken.value == newLines[i].value\n                    ) &&\n                    (\n                        !newLines[i].blockTag ||\n                        singleTags.indexOf(tag) === -1\n                    ) &&\n                    (\n                        !newLines[i].context ||\n                        newLines[i].context === context\n                    )\n                ) {\n                    if (newLines[i].indent === true) {\n                        indentation++;\n                    }\n\n                    if (!newLines[i].dontBreak  && !breakAdded) {\n                        code += \"\\n\";\n\n                        //indent\n                        for (i = 0; i < indentation; i++) {\n                            code += \"\\t\";\n                        }\n                    }\n\n                    break;\n                }\n            }\n        }\n\n        code += value;\n\n        //linebreaks back on after end short php tag\n        if ( lastToken.type == 'support.php_tag' && lastToken.value == '?>' ) {\n            dontBreak = false;\n        }\n\n        //next token\n        lastTag = tag;\n\n        lastToken = token;\n\n        token = nextToken;\n\n        if (token===null) {\n            break;\n        }\n    }\n    \n    return code;\n};\n\n\n\n});"
  },
  {
    "path": "lib/ace/ext/beautify.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n// [WIP]\n\ndefine(function(require, exports, module) {\n\"use strict\";\nvar TokenIterator = require(\"ace/token_iterator\").TokenIterator;\n\nvar phpTransform = require(\"./beautify/php_rules\").transform;\n\nexports.beautify = function(session) {\n    var iterator = new TokenIterator(session, 0, 0);\n    var token = iterator.getCurrentToken();\n\n    var context = session.$modeId.split(\"/\").pop();\n\n    var code = phpTransform(iterator, context);\n    session.doc.setValue(code);\n};\n\nexports.commands = [{\n    name: \"beautify\",\n    exec: function(editor) {\n        exports.beautify(editor.session);\n    },\n    bindKey: \"Ctrl-Shift-B\"\n}];\n\n});"
  },
  {
    "path": "lib/ace/ext/elastic_tabstops_lite.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar ElasticTabstopsLite = function(editor) {\n    this.$editor = editor;\n    var self = this;\n    var changedRows = [];\n    var recordChanges = false;\n    this.onAfterExec = function() {\n        recordChanges = false;\n        self.processRows(changedRows);\n        changedRows = [];\n    };\n    this.onExec = function() {\n        recordChanges = true;\n    };\n    this.onChange = function(delta) {\n        if (recordChanges) {\n            if (changedRows.indexOf(delta.start.row) == -1)\n                changedRows.push(delta.start.row);\n            if (delta.end.row != delta.start.row)\n                changedRows.push(delta.end.row);\n        }\n    };\n};\n\n(function() {\n    this.processRows = function(rows) {\n        this.$inChange = true;\n        var checkedRows = [];\n\n        for (var r = 0, rowCount = rows.length; r < rowCount; r++) {\n            var row = rows[r];\n\n            if (checkedRows.indexOf(row) > -1)\n                continue;\n\n            var cellWidthObj = this.$findCellWidthsForBlock(row);\n            var cellWidths = this.$setBlockCellWidthsToMax(cellWidthObj.cellWidths);\n            var rowIndex = cellWidthObj.firstRow;\n\n            for (var w = 0, l = cellWidths.length; w < l; w++) {\n                var widths = cellWidths[w];\n                checkedRows.push(rowIndex);\n                this.$adjustRow(rowIndex, widths);\n                rowIndex++;\n            }\n        }\n        this.$inChange = false;\n    };\n\n    this.$findCellWidthsForBlock = function(row) {\n        var cellWidths = [], widths;\n\n        // starting row and backward\n        var rowIter = row;\n        while (rowIter >= 0) {\n            widths = this.$cellWidthsForRow(rowIter);\n            if (widths.length == 0)\n                break;\n\n            cellWidths.unshift(widths);\n            rowIter--;\n        }\n        var firstRow = rowIter + 1;\n\n        // forward (not including starting row)\n        rowIter = row;\n        var numRows = this.$editor.session.getLength();\n\n        while (rowIter < numRows - 1) {\n            rowIter++;\n\n            widths = this.$cellWidthsForRow(rowIter);\n            if (widths.length == 0)\n                break;\n\n            cellWidths.push(widths);\n        }\n\n        return { cellWidths: cellWidths, firstRow: firstRow };\n    };\n\n    this.$cellWidthsForRow = function(row) {\n        var selectionColumns = this.$selectionColumnsForRow(row);\n        // todo: support multicursor\n\n        var tabs = [-1].concat(this.$tabsForRow(row));\n        var widths = tabs.map(function(el) { return 0; } ).slice(1);\n        var line = this.$editor.session.getLine(row);\n\n        for (var i = 0, len = tabs.length - 1; i < len; i++) {\n            var leftEdge = tabs[i]+1;\n            var rightEdge = tabs[i+1];\n\n            var rightmostSelection = this.$rightmostSelectionInCell(selectionColumns, rightEdge);\n            var cell = line.substring(leftEdge, rightEdge);\n            widths[i] = Math.max(cell.replace(/\\s+$/g,'').length, rightmostSelection - leftEdge);\n        }\n\n        return widths;\n    };\n\n    this.$selectionColumnsForRow = function(row) {\n        var selections = [], cursor = this.$editor.getCursorPosition();\n        if (this.$editor.session.getSelection().isEmpty()) {\n            // todo: support multicursor\n            if (row == cursor.row)\n                selections.push(cursor.column);\n        }\n\n        return selections;\n    };\n\n    this.$setBlockCellWidthsToMax = function(cellWidths) {\n        var startingNewBlock = true, blockStartRow, blockEndRow, maxWidth;\n        var columnInfo = this.$izip_longest(cellWidths);\n\n        for (var c = 0, l = columnInfo.length; c < l; c++) {\n            var column = columnInfo[c];\n            if (!column.push) {\n                console.error(column);\n                continue;\n            }\n            // add an extra None to the end so that the end of the column automatically\n            // finishes a block\n            column.push(NaN);\n\n            for (var r = 0, s = column.length; r < s; r++) {\n                var width = column[r];\n                if (startingNewBlock) {\n                    blockStartRow = r;\n                    maxWidth = 0;\n                    startingNewBlock = false;\n                }\n                if (isNaN(width)) {\n                    // block ended\n                    blockEndRow = r;\n\n                    for (var j = blockStartRow; j < blockEndRow; j++) {\n                        cellWidths[j][c] = maxWidth;\n                    }\n                    startingNewBlock = true;\n                }\n\n                maxWidth = Math.max(maxWidth, width);\n            }\n        }\n\n        return cellWidths;\n    };\n\n    this.$rightmostSelectionInCell = function(selectionColumns, cellRightEdge) {\n        var rightmost = 0;\n\n        if (selectionColumns.length) {\n            var lengths = [];\n            for (var s = 0, length = selectionColumns.length; s < length; s++) {\n                if (selectionColumns[s] <= cellRightEdge)\n                    lengths.push(s);\n                else\n                    lengths.push(0);\n            }\n            rightmost = Math.max.apply(Math, lengths);\n        }\n\n        return rightmost;\n    };\n\n    this.$tabsForRow = function(row) {\n        var rowTabs = [], line = this.$editor.session.getLine(row),\n            re = /\\t/g, match;\n\n        while ((match = re.exec(line)) != null) {\n            rowTabs.push(match.index);\n        }\n\n        return rowTabs;\n    };\n\n    this.$adjustRow = function(row, widths) {\n        var rowTabs = this.$tabsForRow(row);\n\n        if (rowTabs.length == 0)\n            return;\n\n        var bias = 0, location = -1;\n\n        // this always only contains two elements, so we're safe in the loop below\n        var expandedSet = this.$izip(widths, rowTabs);\n\n        for (var i = 0, l = expandedSet.length; i < l; i++) {\n            var w = expandedSet[i][0], it = expandedSet[i][1];\n            location += 1 + w;\n            it += bias;\n            var difference = location - it;\n\n            if (difference == 0)\n                continue;\n\n            var partialLine = this.$editor.session.getLine(row).substr(0, it );\n            var strippedPartialLine = partialLine.replace(/\\s*$/g, \"\");\n            var ispaces = partialLine.length - strippedPartialLine.length;\n\n            if (difference > 0) {\n                // put the spaces after the tab and then delete the tab, so any insertion\n                // points behave as expected\n                this.$editor.session.getDocument().insertInLine({row: row, column: it + 1}, Array(difference + 1).join(\" \") + \"\\t\");\n                this.$editor.session.getDocument().removeInLine(row, it, it + 1);\n\n                bias += difference;\n            }\n\n            if (difference < 0 && ispaces >= -difference) {\n                this.$editor.session.getDocument().removeInLine(row, it + difference, it);\n                bias += difference;\n            }\n        }\n    };\n\n    // the is a (naive) Python port--but works for these purposes\n    this.$izip_longest = function(iterables) {\n        if (!iterables[0])\n            return [];\n        var longest = iterables[0].length;\n        var iterablesLength = iterables.length;\n\n        for (var i = 1; i < iterablesLength; i++) {\n            var iLength = iterables[i].length;\n            if (iLength > longest)\n                longest = iLength;\n        }\n\n        var expandedSet = [];\n\n        for (var l = 0; l < longest; l++) {\n            var set = [];\n            for (var i = 0; i < iterablesLength; i++) {\n                if (iterables[i][l] === \"\")\n                    set.push(NaN);\n                else\n                    set.push(iterables[i][l]);\n            }\n\n            expandedSet.push(set);\n        }\n\n\n        return expandedSet;\n    };\n\n    // an even more (naive) Python port\n    this.$izip = function(widths, tabs) {\n        // grab the shorter size\n        var size = widths.length >= tabs.length ? tabs.length : widths.length;\n\n        var expandedSet = [];\n        for (var i = 0; i < size; i++) {\n            var set = [ widths[i], tabs[i] ];\n            expandedSet.push(set);\n        }\n        return expandedSet;\n    };\n\n}).call(ElasticTabstopsLite.prototype);\n\nexports.ElasticTabstopsLite = ElasticTabstopsLite;\n\nvar Editor = require(\"../editor\").Editor;\nrequire(\"../config\").defineOptions(Editor.prototype, \"editor\", {\n    useElasticTabstops: {\n        set: function(val) {\n            if (val) {\n                if (!this.elasticTabstops)\n                    this.elasticTabstops = new ElasticTabstopsLite(this);\n                this.commands.on(\"afterExec\", this.elasticTabstops.onAfterExec);\n                this.commands.on(\"exec\", this.elasticTabstops.onExec);\n                this.on(\"change\", this.elasticTabstops.onChange);\n            } else if (this.elasticTabstops) {\n                this.commands.removeListener(\"afterExec\", this.elasticTabstops.onAfterExec);\n                this.commands.removeListener(\"exec\", this.elasticTabstops.onExec);\n                this.removeListener(\"change\", this.elasticTabstops.onChange);\n            }\n        }\n    }\n});\n\n});"
  },
  {
    "path": "lib/ace/ext/emmet.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\nvar HashHandler = require(\"ace/keyboard/hash_handler\").HashHandler;\nvar Editor = require(\"ace/editor\").Editor;\nvar snippetManager = require(\"ace/snippets\").snippetManager;\nvar Range = require(\"ace/range\").Range;\nvar emmet, emmetPath;\n\n/**\n * Implementation of {@link IEmmetEditor} interface for Ace\n */\nfunction AceEmmetEditor() {}\n\nAceEmmetEditor.prototype = {\n    setupContext: function(editor) {\n        this.ace = editor;\n        this.indentation = editor.session.getTabString();\n        if (!emmet)\n            emmet = window.emmet;\n        var resources = emmet.resources || emmet.require(\"resources\");\n        resources.setVariable(\"indentation\", this.indentation);\n        this.$syntax = null;\n        this.$syntax = this.getSyntax();\n    },\n    /**\n     * Returns character indexes of selected text: object with <code>start</code>\n     * and <code>end</code> properties. If there's no selection, should return\n     * object with <code>start</code> and <code>end</code> properties referring\n     * to current caret position\n     * @return {Object}\n     * @example\n     * var selection = editor.getSelectionRange();\n     * alert(selection.start + ', ' + selection.end);\n     */\n    getSelectionRange: function() {\n        // TODO should start be caret position instead?\n        var range = this.ace.getSelectionRange();\n        var doc = this.ace.session.doc;\n        return {\n            start: doc.positionToIndex(range.start),\n            end: doc.positionToIndex(range.end)\n        };\n    },\n\n    /**\n     * Creates selection from <code>start</code> to <code>end</code> character\n     * indexes. If <code>end</code> is ommited, this method should place caret\n     * and <code>start</code> index\n     * @param {Number} start\n     * @param {Number} [end]\n     * @example\n     * editor.createSelection(10, 40);\n     *\n     * //move caret to 15th character\n     * editor.createSelection(15);\n     */\n    createSelection: function(start, end) {\n        var doc = this.ace.session.doc;\n        this.ace.selection.setRange({\n            start: doc.indexToPosition(start),\n            end: doc.indexToPosition(end)\n        });\n    },\n\n    /**\n     * Returns current line's start and end indexes as object with <code>start</code>\n     * and <code>end</code> properties\n     * @return {Object}\n     * @example\n     * var range = editor.getCurrentLineRange();\n     * alert(range.start + ', ' + range.end);\n     */\n    getCurrentLineRange: function() {\n        var ace = this.ace;\n        var row = ace.getCursorPosition().row;\n        var lineLength = ace.session.getLine(row).length;\n        var index = ace.session.doc.positionToIndex({row: row, column: 0});\n        return {\n            start: index,\n            end: index + lineLength\n        };\n    },\n\n    /**\n     * Returns current caret position\n     * @return {Number|null}\n     */\n    getCaretPos: function(){\n        var pos = this.ace.getCursorPosition();\n        return this.ace.session.doc.positionToIndex(pos);\n    },\n\n    /**\n     * Set new caret position\n     * @param {Number} index Caret position\n     */\n    setCaretPos: function(index){\n        var pos = this.ace.session.doc.indexToPosition(index);\n        this.ace.selection.moveToPosition(pos);\n    },\n\n    /**\n     * Returns content of current line\n     * @return {String}\n     */\n    getCurrentLine: function() {\n        var row = this.ace.getCursorPosition().row;\n        return this.ace.session.getLine(row);\n    },\n\n    /**\n     * Replace editor's content or it's part (from <code>start</code> to\n     * <code>end</code> index). If <code>value</code> contains\n     * <code>caret_placeholder</code>, the editor will put caret into\n     * this position. If you skip <code>start</code> and <code>end</code>\n     * arguments, the whole target's content will be replaced with\n     * <code>value</code>.\n     *\n     * If you pass <code>start</code> argument only,\n     * the <code>value</code> will be placed at <code>start</code> string\n     * index of current content.\n     *\n     * If you pass <code>start</code> and <code>end</code> arguments,\n     * the corresponding substring of current target's content will be\n     * replaced with <code>value</code>.\n     * @param {String} value Content you want to paste\n     * @param {Number} [start] Start index of editor's content\n     * @param {Number} [end] End index of editor's content\n     * @param {Boolean} [noIndent] Do not auto indent <code>value</code>\n     */\n    replaceContent: function(value, start, end, noIndent) {\n        if (end == null)\n            end = start == null ? this.getContent().length : start;\n        if (start == null)\n            start = 0;        \n        \n        var editor = this.ace;\n        var doc = editor.session.doc;\n        var range = Range.fromPoints(doc.indexToPosition(start), doc.indexToPosition(end));\n        editor.session.remove(range);\n        \n        range.end = range.start;\n        //editor.selection.setRange(range);\n        \n        value = this.$updateTabstops(value);\n        snippetManager.insertSnippet(editor, value);\n    },\n\n    /**\n     * Returns editor's content\n     * @return {String}\n     */\n    getContent: function(){\n        return this.ace.getValue();\n    },\n\n    /**\n     * Returns current editor's syntax mode\n     * @return {String}\n     */\n    getSyntax: function() {\n        if (this.$syntax)\n            return this.$syntax;\n        var syntax = this.ace.session.$modeId.split(\"/\").pop();\n        if (syntax == \"html\" || syntax == \"php\") {\n            var cursor = this.ace.getCursorPosition();\n            var state = this.ace.session.getState(cursor.row);\n            if (typeof state != \"string\")\n                state = state[0];\n            if (state) {\n                state = state.split(\"-\");\n                if (state.length > 1)\n                    syntax = state[0];\n                else if (syntax == \"php\")\n                    syntax = \"html\";\n            }\n        }\n        return syntax;\n    },\n\n    /**\n     * Returns current output profile name (@see emmet#setupProfile)\n     * @return {String}\n     */\n    getProfileName: function() {\n        var resources = emmet.resources || emmet.require(\"resources\");\n        switch (this.getSyntax()) {\n          case \"css\": return \"css\";\n          case \"xml\":\n          case \"xsl\":\n            return \"xml\";\n          case \"html\":\n            var profile = resources.getVariable(\"profile\");\n            // no forced profile, guess from content html or xhtml?\n            if (!profile)\n                profile = this.ace.session.getLines(0,2).join(\"\").search(/<!DOCTYPE[^>]+XHTML/i) != -1 ? \"xhtml\": \"html\";\n            return profile;\n          default:\n            var mode = this.ace.session.$mode;\n            return mode.emmetConfig && mode.emmetConfig.profile || \"xhtml\";\n        }\n    },\n\n    /**\n     * Ask user to enter something\n     * @param {String} title Dialog title\n     * @return {String} Entered data\n     * @since 0.65\n     */\n    prompt: function(title) {\n        return prompt(title);\n    },\n\n    /**\n     * Returns current selection\n     * @return {String}\n     * @since 0.65\n     */\n    getSelection: function() {\n        return this.ace.session.getTextRange();\n    },\n\n    /**\n     * Returns current editor's file path\n     * @return {String}\n     * @since 0.65\n     */\n    getFilePath: function() {\n        return \"\";\n    },\n    \n    // update tabstops: make sure all caret placeholders are unique\n    // by default, abbreviation parser generates all unlinked (un-mirrored)\n    // tabstops as ${0}, so we have upgrade all caret tabstops with unique\n    // positions but make sure that all other tabstops are not linked accidentally\n    // based on https://github.com/sergeche/emmet-sublime/blob/master/editor.js#L119-L171\n    $updateTabstops: function(value) {\n        var base = 1000;\n        var zeroBase = 0;\n        var lastZero = null;\n        var ts = emmet.tabStops || emmet.require('tabStops');\n        var resources = emmet.resources || emmet.require(\"resources\");\n        var settings = resources.getVocabulary(\"user\");\n        var tabstopOptions = {\n            tabstop: function(data) {\n                var group = parseInt(data.group, 10);\n                var isZero = group === 0;\n                if (isZero)\n                    group = ++zeroBase;\n                else\n                    group += base;\n\n                var placeholder = data.placeholder;\n                if (placeholder) {\n                    // recursively update nested tabstops\n                    placeholder = ts.processText(placeholder, tabstopOptions);\n                }\n\n                var result = '${' + group + (placeholder ? ':' + placeholder : '') + '}';\n\n                if (isZero) {\n                    lastZero = [data.start, result];\n                }\n\n                return result;\n            },\n            escape: function(ch) {\n                if (ch == '$') return '\\\\$';\n                if (ch == '\\\\') return '\\\\\\\\';\n                return ch;\n            }\n        };\n\n        value = ts.processText(value, tabstopOptions);\n\n        if (settings.variables['insert_final_tabstop'] && !/\\$\\{0\\}$/.test(value)) {\n            value += '${0}';\n        } else if (lastZero) {\n            var common = emmet.utils ? emmet.utils.common : emmet.require('utils');\n            value = common.replaceSubstring(value, '${0}', lastZero[0], lastZero[1]);\n        }\n        \n        return value;\n    }\n};\n\n\nvar keymap = {\n    expand_abbreviation: {\"mac\": \"ctrl+alt+e\", \"win\": \"alt+e\"},\n    match_pair_outward: {\"mac\": \"ctrl+d\", \"win\": \"ctrl+,\"},\n    match_pair_inward: {\"mac\": \"ctrl+j\", \"win\": \"ctrl+shift+0\"},\n    matching_pair: {\"mac\": \"ctrl+alt+j\", \"win\": \"alt+j\"},\n    next_edit_point: \"alt+right\",\n    prev_edit_point: \"alt+left\",\n    toggle_comment: {\"mac\": \"command+/\", \"win\": \"ctrl+/\"},\n    split_join_tag: {\"mac\": \"shift+command+'\", \"win\": \"shift+ctrl+`\"},\n    remove_tag: {\"mac\": \"command+'\", \"win\": \"shift+ctrl+;\"},\n    evaluate_math_expression: {\"mac\": \"shift+command+y\", \"win\": \"shift+ctrl+y\"},\n    increment_number_by_1: \"ctrl+up\",\n    decrement_number_by_1: \"ctrl+down\",\n    increment_number_by_01: \"alt+up\",\n    decrement_number_by_01: \"alt+down\",\n    increment_number_by_10: {\"mac\": \"alt+command+up\", \"win\": \"shift+alt+up\"},\n    decrement_number_by_10: {\"mac\": \"alt+command+down\", \"win\": \"shift+alt+down\"},\n    select_next_item: {\"mac\": \"shift+command+.\", \"win\": \"shift+ctrl+.\"},\n    select_previous_item: {\"mac\": \"shift+command+,\", \"win\": \"shift+ctrl+,\"},\n    reflect_css_value: {\"mac\": \"shift+command+r\", \"win\": \"shift+ctrl+r\"},\n\n    encode_decode_data_url: {\"mac\": \"shift+ctrl+d\", \"win\": \"ctrl+'\"},\n    // update_image_size: {\"mac\": \"shift+ctrl+i\", \"win\": \"ctrl+u\"},\n    // expand_as_you_type: \"ctrl+alt+enter\",\n    // wrap_as_you_type: {\"mac\": \"shift+ctrl+g\", \"win\": \"shift+ctrl+g\"},\n    expand_abbreviation_with_tab: \"Tab\",\n    wrap_with_abbreviation: {\"mac\": \"shift+ctrl+a\", \"win\": \"shift+ctrl+a\"}\n};\n\nvar editorProxy = new AceEmmetEditor();\nexports.commands = new HashHandler();\nexports.runEmmetCommand = function runEmmetCommand(editor) {\n    try {\n        editorProxy.setupContext(editor);\n        var actions = emmet.actions || emmet.require(\"actions\");\n    \n        if (this.action == \"expand_abbreviation_with_tab\") {\n            if (!editor.selection.isEmpty())\n                return false;\n            var pos = editor.selection.lead;\n            var token = editor.session.getTokenAt(pos.row, pos.column);\n            if (token && /\\btag\\b/.test(token.type))\n                return false;\n        }\n        \n        if (this.action == \"wrap_with_abbreviation\") {\n            // without setTimeout prompt doesn't work on firefox\n            return setTimeout(function() {\n                actions.run(\"wrap_with_abbreviation\", editorProxy);\n            }, 0);\n        }\n        \n        var result = actions.run(this.action, editorProxy);\n    } catch(e) {\n        if (!emmet) {\n            load(runEmmetCommand.bind(this, editor));\n            return true;\n        }\n        editor._signal(\"changeStatus\", typeof e == \"string\" ? e : e.message);\n        console.log(e);\n        result = false;\n    }\n    return result;\n};\n\nfor (var command in keymap) {\n    exports.commands.addCommand({\n        name: \"emmet:\" + command,\n        action: command,\n        bindKey: keymap[command],\n        exec: exports.runEmmetCommand,\n        multiSelectAction: \"forEach\"\n    });\n}\n\nexports.updateCommands = function(editor, enabled) {\n    if (enabled) {\n        editor.keyBinding.addKeyboardHandler(exports.commands);\n    } else {\n        editor.keyBinding.removeKeyboardHandler(exports.commands);\n    }\n};\n\nexports.isSupportedMode = function(mode) {\n    if (!mode) return false;\n    if (mode.emmetConfig) return true;\n    var id = mode.$id || mode;\n    return /css|less|scss|sass|stylus|html|php|twig|ejs|handlebars/.test(id);\n};\n\nexports.isAvailable = function(editor, command) {\n    if (/(evaluate_math_expression|expand_abbreviation)$/.test(command))\n        return true;\n    var mode = editor.session.$mode;\n    var isSupported = exports.isSupportedMode(mode);\n    if (isSupported && mode.$modes) {\n        // TODO refactor mode delegates to make this simpler\n        try {\n            editorProxy.setupContext(editor);\n            if (/js|php/.test(editorProxy.getSyntax()))\n                isSupported = false;\n        } catch(e) {}\n    }\n    return isSupported;\n};\n\nvar onChangeMode = function(e, target) {\n    var editor = target;\n    if (!editor)\n        return;\n    var enabled = exports.isSupportedMode(editor.session.$mode);\n    if (e.enableEmmet === false)\n        enabled = false;\n    if (enabled)\n        load();\n    exports.updateCommands(editor, enabled);\n};\n\nvar load = function(cb) {\n    if (typeof emmetPath == \"string\") {\n        require(\"ace/config\").loadModule(emmetPath, function() {\n            emmetPath = null;\n            cb && cb();\n        });\n    }\n};\n\nexports.AceEmmetEditor = AceEmmetEditor;\nrequire(\"ace/config\").defineOptions(Editor.prototype, \"editor\", {\n    enableEmmet: {\n        set: function(val) {\n            this[val ? \"on\" : \"removeListener\"](\"changeMode\", onChangeMode);\n            onChangeMode({enableEmmet: !!val}, this);\n        },\n        value: true\n    }\n});\n\nexports.setCore = function(e) {\n    if (typeof e == \"string\")\n       emmetPath = e;\n    else\n       emmet = e;\n};\n});\n\n"
  },
  {
    "path": "lib/ace/ext/error_marker.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\nvar LineWidgets = require(\"../line_widgets\").LineWidgets;\nvar dom = require(\"../lib/dom\");\nvar Range = require(\"../range\").Range;\n\nfunction binarySearch(array, needle, comparator) {\n    var first = 0;\n    var last = array.length - 1;\n\n    while (first <= last) {\n        var mid = (first + last) >> 1;\n        var c = comparator(needle, array[mid]);\n        if (c > 0)\n            first = mid + 1;\n        else if (c < 0)\n            last = mid - 1;\n        else\n            return mid;\n    }\n\n    // Return the nearest lesser index, \"-1\" means \"0, \"-2\" means \"1\", etc.\n    return -(first + 1);\n}\n\nfunction findAnnotations(session, row, dir) {\n    var annotations = session.getAnnotations().sort(Range.comparePoints);\n    if (!annotations.length)\n        return;\n    \n    var i = binarySearch(annotations, {row: row, column: -1}, Range.comparePoints);\n    if (i < 0)\n        i = -i - 1;\n    \n    if (i >= annotations.length)\n        i = dir > 0 ? 0 : annotations.length - 1;\n    else if (i === 0 && dir < 0)\n        i = annotations.length - 1;\n    \n    var annotation = annotations[i];\n    if (!annotation || !dir)\n        return;\n\n    if (annotation.row === row) {\n        do {\n            annotation = annotations[i += dir];\n        } while (annotation && annotation.row === row);\n        if (!annotation)\n            return annotations.slice();\n    }\n    \n    \n    var matched = [];\n    row = annotation.row;\n    do {\n        matched[dir < 0 ? \"unshift\" : \"push\"](annotation);\n        annotation = annotations[i += dir];\n    } while (annotation && annotation.row == row);\n    return matched.length && matched;\n}\n\nexports.showErrorMarker = function(editor, dir) {\n    var session = editor.session;\n    if (!session.widgetManager) {\n        session.widgetManager = new LineWidgets(session);\n        session.widgetManager.attach(editor);\n    }\n    \n    var pos = editor.getCursorPosition();\n    var row = pos.row;\n    var oldWidget = session.widgetManager.getWidgetsAtRow(row).filter(function(w) {\n        return w.type == \"errorMarker\";\n    })[0];\n    if (oldWidget) {\n        oldWidget.destroy();\n    } else {\n        row -= dir;\n    }\n    var annotations = findAnnotations(session, row, dir);\n    var gutterAnno;\n    if (annotations) {\n        var annotation = annotations[0];\n        pos.column = (annotation.pos && typeof annotation.column != \"number\"\n            ? annotation.pos.sc\n            : annotation.column) || 0;\n        pos.row = annotation.row;\n        gutterAnno = editor.renderer.$gutterLayer.$annotations[pos.row];\n    } else if (oldWidget) {\n        return;\n    } else {\n        gutterAnno = {\n            text: [\"Looks good!\"],\n            className: \"ace_ok\"\n        };\n    }\n    editor.session.unfold(pos.row);\n    editor.selection.moveToPosition(pos);\n    \n    var w = {\n        row: pos.row, \n        fixedWidth: true,\n        coverGutter: true,\n        el: dom.createElement(\"div\"),\n        type: \"errorMarker\"\n    };\n    var el = w.el.appendChild(dom.createElement(\"div\"));\n    var arrow = w.el.appendChild(dom.createElement(\"div\"));\n    arrow.className = \"error_widget_arrow \" + gutterAnno.className;\n    \n    var left = editor.renderer.$cursorLayer\n        .getPixelPosition(pos).left;\n    arrow.style.left = left + editor.renderer.gutterWidth - 5 + \"px\";\n    \n    w.el.className = \"error_widget_wrapper\";\n    el.className = \"error_widget \" + gutterAnno.className;\n    el.innerHTML = gutterAnno.text.join(\"<br>\");\n    \n    el.appendChild(dom.createElement(\"div\"));\n    \n    var kb = function(_, hashId, keyString) {\n        if (hashId === 0 && (keyString === \"esc\" || keyString === \"return\")) {\n            w.destroy();\n            return {command: \"null\"};\n        }\n    };\n    \n    w.destroy = function() {\n        if (editor.$mouseHandler.isMousePressed)\n            return;\n        editor.keyBinding.removeKeyboardHandler(kb);\n        session.widgetManager.removeLineWidget(w);\n        editor.off(\"changeSelection\", w.destroy);\n        editor.off(\"changeSession\", w.destroy);\n        editor.off(\"mouseup\", w.destroy);\n        editor.off(\"change\", w.destroy);\n    };\n    \n    editor.keyBinding.addKeyboardHandler(kb);\n    editor.on(\"changeSelection\", w.destroy);\n    editor.on(\"changeSession\", w.destroy);\n    editor.on(\"mouseup\", w.destroy);\n    editor.on(\"change\", w.destroy);\n    \n    editor.session.widgetManager.addLineWidget(w);\n    \n    w.el.onmousedown = editor.focus.bind(editor);\n    \n    editor.renderer.scrollCursorIntoView(null, 0.5, {bottom: w.el.offsetHeight});\n};\n\n\ndom.importCssString(\"\\\n    .error_widget_wrapper {\\\n        background: inherit;\\\n        color: inherit;\\\n        border:none\\\n    }\\\n    .error_widget {\\\n        border-top: solid 2px;\\\n        border-bottom: solid 2px;\\\n        margin: 5px 0;\\\n        padding: 10px 40px;\\\n        white-space: pre-wrap;\\\n    }\\\n    .error_widget.ace_error, .error_widget_arrow.ace_error{\\\n        border-color: #ff5a5a\\\n    }\\\n    .error_widget.ace_warning, .error_widget_arrow.ace_warning{\\\n        border-color: #F1D817\\\n    }\\\n    .error_widget.ace_info, .error_widget_arrow.ace_info{\\\n        border-color: #5a5a5a\\\n    }\\\n    .error_widget.ace_ok, .error_widget_arrow.ace_ok{\\\n        border-color: #5aaa5a\\\n    }\\\n    .error_widget_arrow {\\\n        position: absolute;\\\n        border: solid 5px;\\\n        border-top-color: transparent!important;\\\n        border-right-color: transparent!important;\\\n        border-left-color: transparent!important;\\\n        top: -5px;\\\n    }\\\n\", \"\");\n\n});"
  },
  {
    "path": "lib/ace/ext/keybinding_menu.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2013 Matthew Christopher Kastor-Inare III, Atropa Inc. Intl\n * All rights reserved.\n *\n * Contributed to Ajax.org under the BSD license.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*jslint indent: 4, maxerr: 50, white: true, browser: true, vars: true*/\n/*global define, require */\n\n/**\n * Show Keyboard Shortcuts\n * @fileOverview Show Keyboard Shortcuts <br />\n * Generates a menu which displays the keyboard shortcuts.\n * @author <a href=\"mailto:matthewkastor@gmail.com\">\n *  Matthew Christopher Kastor-Inare III </a><br />\n *  ☭ Hial Atropa!! ☭\n */\n\ndefine(function(require, exports, module) {\n    \"use strict\";\n    var Editor = require(\"ace/editor\").Editor;\n    /**\n     * Generates a menu which displays the keyboard shortcuts.\n     * @author <a href=\"mailto:matthewkastor@gmail.com\">\n     *  Matthew Christopher Kastor-Inare III </a><br />\n     *  ☭ Hial Atropa!! ☭\n     * @param {ace.Editor} editor An instance of the ace editor.\n     */\n    function showKeyboardShortcuts (editor) {\n        // make sure the menu isn't open already.\n        if(!document.getElementById('kbshortcutmenu')) {\n            var overlayPage = require('./menu_tools/overlay_page').overlayPage;\n            var getEditorKeybordShortcuts = require('./menu_tools/get_editor_keyboard_shortcuts').getEditorKeybordShortcuts;\n            var kb = getEditorKeybordShortcuts(editor);\n            var el = document.createElement('div');\n            var commands = kb.reduce(function(previous, current) {\n                return previous + '<div class=\"ace_optionsMenuEntry\"><span class=\"ace_optionsMenuCommand\">' \n                    + current.command + '</span> : '\n                    + '<span class=\"ace_optionsMenuKey\">' + current.key + '</span></div>';\n            }, '');\n\n            el.id = 'kbshortcutmenu';\n            el.innerHTML = '<h1>Keyboard Shortcuts</h1>' + commands + '</div>';\n            overlayPage(editor, el, '0', '0', '0', null);\n        }\n    }\n    module.exports.init = function(editor) {\n        Editor.prototype.showKeyboardShortcuts = function() {\n            showKeyboardShortcuts(this);\n        };\n        editor.commands.addCommands([{\n            name: \"showKeyboardShortcuts\",\n            bindKey: {win: \"Ctrl-Alt-h\", mac: \"Command-Alt-h\"},\n            exec: function(editor, line) {\n                editor.showKeyboardShortcuts();\n            }\n        }]);\n    };\n\n});"
  },
  {
    "path": "lib/ace/ext/language_tools.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar snippetManager = require(\"../snippets\").snippetManager;\nvar Autocomplete = require(\"../autocomplete\").Autocomplete;\nvar config = require(\"../config\");\nvar lang = require(\"../lib/lang\");\nvar util = require(\"../autocomplete/util\");\n\nvar textCompleter = require(\"../autocomplete/text_completer\");\nvar keyWordCompleter = {\n    getCompletions: function(editor, session, pos, prefix, callback) {\n        if (session.$mode.completer) {\n            return session.$mode.completer.getCompletions(editor, session, pos, prefix, callback);\n        }\n        var state = editor.session.getState(pos.row);\n        var completions = session.$mode.getCompletions(state, session, pos, prefix);\n        callback(null, completions);\n    }\n};\n\nvar snippetCompleter = {\n    getCompletions: function(editor, session, pos, prefix, callback) {\n        var snippetMap = snippetManager.snippetMap;\n        var completions = [];\n        snippetManager.getActiveScopes(editor).forEach(function(scope) {\n            var snippets = snippetMap[scope] || [];\n            for (var i = snippets.length; i--;) {\n                var s = snippets[i];\n                var caption = s.name || s.tabTrigger;\n                if (!caption)\n                    continue;\n                completions.push({\n                    caption: caption,\n                    snippet: s.content,\n                    meta: s.tabTrigger && !s.name ? s.tabTrigger + \"\\u21E5 \" : \"snippet\",\n                    type: \"snippet\"\n                });\n            }\n        }, this);\n        callback(null, completions);\n    },\n    getDocTooltip: function(item) {\n        if (item.type == \"snippet\" && !item.docHTML) {\n            item.docHTML = [\n                \"<b>\", lang.escapeHTML(item.caption), \"</b>\", \"<hr></hr>\",\n                lang.escapeHTML(item.snippet)\n            ].join(\"\");\n        }\n    }\n};\n\nvar completers = [snippetCompleter, textCompleter, keyWordCompleter];\n// Modifies list of default completers\nexports.setCompleters = function(val) {\n    completers.length = 0;\n    if (val) completers.push.apply(completers, val);\n};\nexports.addCompleter = function(completer) {\n    completers.push(completer);\n};\n\n// Exports existing completer so that user can construct his own set of completers.\nexports.textCompleter = textCompleter;\nexports.keyWordCompleter = keyWordCompleter;\nexports.snippetCompleter = snippetCompleter;\n\nvar expandSnippet = {\n    name: \"expandSnippet\",\n    exec: function(editor) {\n        return snippetManager.expandWithTab(editor);\n    },\n    bindKey: \"Tab\"\n};\n\nvar onChangeMode = function(e, editor) {\n    loadSnippetsForMode(editor.session.$mode);\n};\n\nvar loadSnippetsForMode = function(mode) {\n    var id = mode.$id;\n    if (!snippetManager.files)\n        snippetManager.files = {};\n    loadSnippetFile(id);\n    if (mode.modes)\n        mode.modes.forEach(loadSnippetsForMode);\n};\n\nvar loadSnippetFile = function(id) {\n    if (!id || snippetManager.files[id])\n        return;\n    var snippetFilePath = id.replace(\"mode\", \"snippets\");\n    snippetManager.files[id] = {};\n    config.loadModule(snippetFilePath, function(m) {\n        if (m) {\n            snippetManager.files[id] = m;\n            if (!m.snippets && m.snippetText)\n                m.snippets = snippetManager.parseSnippetFile(m.snippetText);\n            snippetManager.register(m.snippets || [], m.scope);\n            if (m.includeScopes) {\n                snippetManager.snippetMap[m.scope].includeScopes = m.includeScopes;\n                m.includeScopes.forEach(function(x) {\n                    loadSnippetFile(\"ace/mode/\" + x);\n                });\n            }\n        }\n    });\n};\n\nvar doLiveAutocomplete = function(e) {\n    var editor = e.editor;\n    var hasCompleter = editor.completer && editor.completer.activated;\n\n    // We don't want to autocomplete with no prefix\n    if (e.command.name === \"backspace\") {\n        if (hasCompleter && !util.getCompletionPrefix(editor))\n            editor.completer.detach();\n    }\n    else if (e.command.name === \"insertstring\") {\n        var prefix = util.getCompletionPrefix(editor);\n        // Only autocomplete if there's a prefix that can be matched\n        if (prefix && !hasCompleter) {\n            if (!editor.completer) {\n                // Create new autocompleter\n                editor.completer = new Autocomplete();\n            }\n            // Disable autoInsert\n            editor.completer.autoInsert = false;\n            editor.completer.showPopup(editor);\n        }\n    }\n};\n\nvar Editor = require(\"../editor\").Editor;\nrequire(\"../config\").defineOptions(Editor.prototype, \"editor\", {\n    enableBasicAutocompletion: {\n        set: function(val) {\n            if (val) {\n                if (!this.completers)\n                    this.completers = Array.isArray(val)? val: completers;\n                this.commands.addCommand(Autocomplete.startCommand);\n            } else {\n                this.commands.removeCommand(Autocomplete.startCommand);\n            }\n        },\n        value: false\n    },\n    /**\n     * Enable live autocomplete. If the value is an array, it is assumed to be an array of completers\n     * and will use them instead of the default completers.\n     */\n    enableLiveAutocompletion: {\n        set: function(val) {\n            if (val) {\n                if (!this.completers)\n                    this.completers = Array.isArray(val)? val: completers;\n                // On each change automatically trigger the autocomplete\n                this.commands.on('afterExec', doLiveAutocomplete);\n            } else {\n                this.commands.removeListener('afterExec', doLiveAutocomplete);\n            }\n        },\n        value: false\n    },\n    enableSnippets: {\n        set: function(val) {\n            if (val) {\n                this.commands.addCommand(expandSnippet);\n                this.on(\"changeMode\", onChangeMode);\n                onChangeMode(null, this);\n            } else {\n                this.commands.removeCommand(expandSnippet);\n                this.off(\"changeMode\", onChangeMode);\n            }\n        },\n        value: false\n    }\n});\n});\n"
  },
  {
    "path": "lib/ace/ext/linking.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\nvar Editor = require(\"ace/editor\").Editor;\n\nrequire(\"../config\").defineOptions(Editor.prototype, \"editor\", {\n    enableLinking: {\n        set: function(val) {\n            if (val) {\n                this.on(\"click\", onClick);\n                this.on(\"mousemove\", onMouseMove);\n            } else {\n                this.off(\"click\", onClick);\n                this.off(\"mousemove\", onMouseMove);\n            }\n        },\n        value: false\n    }\n});\n\nexports.previousLinkingHover = false;\n\nfunction onMouseMove(e) {\n    var editor = e.editor;\n    var ctrl = e.getAccelKey();\n\n    if (ctrl) {\n        var editor = e.editor;\n        var docPos = e.getDocumentPosition();\n        var session = editor.session;\n        var token = session.getTokenAt(docPos.row, docPos.column);\n\n        if (exports.previousLinkingHover && exports.previousLinkingHover != token) {\n            editor._emit(\"linkHoverOut\");\n        }\n        editor._emit(\"linkHover\", {position: docPos, token: token});\n        exports.previousLinkingHover = token;\n    } else if (exports.previousLinkingHover) {\n        editor._emit(\"linkHoverOut\");\n        exports.previousLinkingHover = false;\n    }\n}\n\nfunction onClick(e) {\n    var ctrl = e.getAccelKey();\n    var button = e.getButton();\n\n    if (button == 0 && ctrl) {\n        var editor = e.editor;\n        var docPos = e.getDocumentPosition();\n        var session = editor.session;\n        var token = session.getTokenAt(docPos.row, docPos.column);\n\n        editor._emit(\"linkClick\", {position: docPos, token: token});\n    }\n}\n\n});\n"
  },
  {
    "path": "lib/ace/ext/menu_tools/add_editor_menu_options.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2013 Matthew Christopher Kastor-Inare III, Atropa Inc. Intl\n * All rights reserved.\n *\n * Contributed to Ajax.org under the BSD license.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*jslint indent: 4, maxerr: 50, white: true, browser: true, vars: true*/\n/*global define, require */\n\n/**\n * Add Editor Menu Options\n * @fileOverview Add Editor Menu Options <br />\n * The menu options property needs to be added to the editor\n *  so that the settings menu can know about options for\n *  selection elements and track which option is selected.\n * @author <a href=\"mailto:matthewkastor@gmail.com\">\n *  Matthew Christopher Kastor-Inare III </a><br />\n *  ☭ Hial Atropa!! ☭\n */\n\ndefine(function(require, exports, module) {\n'use strict';\n\n/**\n * The menu options property needs to be added to the editor\n *  so that the settings menu can know about options for\n *  selection elements and track which option is selected.\n * @author <a href=\"mailto:matthewkastor@gmail.com\">\n *  Matthew Christopher Kastor-Inare III </a><br />\n *  ☭ Hial Atropa!! ☭\n * @param {ace.Editor} editor An instance of the ace editor.\n */\nmodule.exports.addEditorMenuOptions = function addEditorMenuOptions (editor) {\n    var modelist = require('../modelist');\n    var themelist = require('../themelist');\n    editor.menuOptions = {\n        setNewLineMode: [{\n            textContent: \"unix\",\n            value: \"unix\"\n        }, {\n            textContent: \"windows\",\n            value: \"windows\"\n        }, {\n            textContent: \"auto\",\n            value: \"auto\"\n        }],\n        setTheme: [],\n        setMode: [],\n        setKeyboardHandler: [{\n            textContent: \"ace\",\n            value: \"\"\n        }, {\n            textContent: \"vim\",\n            value: \"ace/keyboard/vim\"\n        }, {\n            textContent: \"emacs\",\n            value: \"ace/keyboard/emacs\"\n        }, {\n            textContent: \"textarea\",\n            value: \"ace/keyboard/textarea\"\n        }, {\n            textContent: \"sublime\",\n            value: \"ace/keyboard/sublime\"\n        }]\n    };\n\n    editor.menuOptions.setTheme = themelist.themes.map(function(theme) {\n        return {\n            textContent: theme.caption,\n            value: theme.theme\n        };\n    });\n\n    editor.menuOptions.setMode = modelist.modes.map(function(mode) {\n        return {\n            textContent: mode.name,\n            value: mode.mode\n        };\n    });\n};\n\n\n});\n"
  },
  {
    "path": "lib/ace/ext/menu_tools/element_generator.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2013 Matthew Christopher Kastor-Inare III, Atropa Inc. Intl\n * All rights reserved.\n *\n * Contributed to Ajax.org under the BSD license.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*jslint indent: 4, maxerr: 50, white: true, browser: true, vars: true*/\n/*global define, require */\n\n/**\n * Element Generator\n * @fileOverview Element Generator <br />\n * Contains methods for generating elements.\n * @author <a href=\"mailto:matthewkastor@gmail.com\">\n *  Matthew Christopher Kastor-Inare III </a><br />\n *  ☭ Hial Atropa!! ☭\n */\n\ndefine(function(require, exports, module) {\n'use strict';\n/**\n * Creates a DOM option element\n * @author <a href=\"mailto:matthewkastor@gmail.com\">\n *  Matthew Christopher Kastor-Inare III </a><br />\n *  ☭ Hial Atropa!! ☭\n * @param {object} obj An object containing properties to add to the dom\n *  element. If one of those properties is named `selected` then it will be\n *  added as an attribute on the element instead.\n */\nmodule.exports.createOption = function createOption (obj) {\n    var attribute;\n    var el = document.createElement('option');\n    for(attribute in obj) {\n        if(obj.hasOwnProperty(attribute)) {\n            if(attribute === 'selected') {\n                el.setAttribute(attribute, obj[attribute]);\n            } else {\n                el[attribute] = obj[attribute];\n            }\n        }\n    }\n    return el;\n};\n/**\n * Creates a DOM checkbox element.\n * @author <a href=\"mailto:matthewkastor@gmail.com\">\n *  Matthew Christopher Kastor-Inare III </a><br />\n *  ☭ Hial Atropa!! ☭\n * @param {string} id The id of the element.\n * @param {boolean} checked Whether or not the element is checked.\n * @param {string} clss The class of the element.\n * @returns {DOMElement} Returns a checkbox element reference.\n */\nmodule.exports.createCheckbox = function createCheckbox (id, checked, clss) {\n    var el = document.createElement('input');\n    el.setAttribute('type', 'checkbox');\n    el.setAttribute('id', id);\n    el.setAttribute('name', id);\n    el.setAttribute('value', checked);\n    el.setAttribute('class', clss);\n    if(checked) {\n        el.setAttribute('checked', 'checked');\n    }\n    return el;\n};\n/**\n * Creates a DOM text input element.\n * @author <a href=\"mailto:matthewkastor@gmail.com\">\n *  Matthew Christopher Kastor-Inare III </a><br />\n *  ☭ Hial Atropa!! ☭\n * @param {string} id The id of the element.\n * @param {string} value The default value of the input element.\n * @param {string} clss The class of the element.\n * @returns {DOMElement} Returns an input element reference.\n */\nmodule.exports.createInput = function createInput (id, value, clss) {\n    var el = document.createElement('input');\n    el.setAttribute('type', 'text');\n    el.setAttribute('id', id);\n    el.setAttribute('name', id);\n    el.setAttribute('value', value);\n    el.setAttribute('class', clss);\n    return el;\n};\n/**\n * Creates a DOM label element.\n * @author <a href=\"mailto:matthewkastor@gmail.com\">\n *  Matthew Christopher Kastor-Inare III </a><br />\n *  ☭ Hial Atropa!! ☭\n * @param {string} text The label text.\n * @param {string} labelFor The id of the element being labeled.\n * @returns {DOMElement} Returns a label element reference.\n */\nmodule.exports.createLabel = function createLabel (text, labelFor) {\n    var el = document.createElement('label');\n    el.setAttribute('for', labelFor);\n    el.textContent = text;\n    return el;\n};\n/**\n * Creates a DOM selection element.\n * @author <a href=\"mailto:matthewkastor@gmail.com\">\n *  Matthew Christopher Kastor-Inare III </a><br />\n *  ☭ Hial Atropa!! ☭\n * @param {string} id The id of the element.\n * @param {string} values An array of objects suitable for `createOption`\n * @param {string} clss The class of the element.\n * @returns {DOMElement} Returns a selection element reference.\n * @see ace/ext/element_generator.createOption\n */\nmodule.exports.createSelection = function createSelection (id, values, clss) {\n    var el = document.createElement('select');\n    el.setAttribute('id', id);\n    el.setAttribute('name', id);\n    el.setAttribute('class', clss);\n    values.forEach(function(item) {\n        el.appendChild(module.exports.createOption(item));\n    });\n    return el;\n};\n\n});"
  },
  {
    "path": "lib/ace/ext/menu_tools/generate_settings_menu.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2013 Matthew Christopher Kastor-Inare III, Atropa Inc. Intl\n * All rights reserved.\n *\n * Contributed to Ajax.org under the BSD license.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*jslint indent: 4, maxerr: 50, white: true, browser: true, vars: true*/\n/*global define*/\n\n/**\n * Generates the settings menu\n * @fileOverview Generates the settings menu.\n * @author <a href=\"mailto:matthewkastor@gmail.com\">\n *  Matthew Christopher Kastor-Inare III </a><br />\n *  ☭ Hial Atropa!! ☭\n */\n\ndefine(function(require, exports, module) {\n'use strict';\nvar egen = require('./element_generator');\nvar addEditorMenuOptions = require('./add_editor_menu_options').addEditorMenuOptions;\nvar getSetFunctions = require('./get_set_functions').getSetFunctions;\n\n/**\n * Generates an interactive menu with settings useful to end users.\n * @author <a href=\"mailto:matthewkastor@gmail.com\">\n *  Matthew Christopher Kastor-Inare III </a><br />\n *  ☭ Hial Atropa!! ☭\n * @param {ace.Editor} editor An instance of the ace editor.\n */\nmodule.exports.generateSettingsMenu = function generateSettingsMenu (editor) {\n    /**\n     * container for dom elements that will go in the menu.\n     * @author <a href=\"mailto:matthewkastor@gmail.com\">\n     *  Matthew Christopher Kastor-Inare III </a><br />\n     *  ☭ Hial Atropa!! ☭\n     */\n    var elements = [];\n    /**\n     * Sorts the menu entries (elements var) so they'll appear in alphabetical order\n     *  the sort is performed based on the value of the contains property\n     *  of each element. Since this is an `array.sort` the array is sorted\n     *  in place.\n     * @author <a href=\"mailto:matthewkastor@gmail.com\">\n     *  Matthew Christopher Kastor-Inare III </a><br />\n     *  ☭ Hial Atropa!! ☭\n     */\n    function cleanupElementsList() {\n        elements.sort(function(a, b) {\n            var x = a.getAttribute('contains');\n            var y = b.getAttribute('contains');\n            return x.localeCompare(y);\n        });\n    }\n    /**\n     * Wraps all dom elements contained in the elements var with a single\n     *  div.\n     * @author <a href=\"mailto:matthewkastor@gmail.com\">\n     *  Matthew Christopher Kastor-Inare III </a><br />\n     *  ☭ Hial Atropa!! ☭\n     */\n    function wrapElements() {\n        var topmenu = document.createElement('div');\n        topmenu.setAttribute('id', 'ace_settingsmenu');\n        elements.forEach(function(element) {\n            topmenu.appendChild(element);\n        });\n        \n        var el = topmenu.appendChild(document.createElement('div'));\n        var version = require(\"../../ace\").version;\n        el.style.padding = \"1em\";\n        el.textContent = \"Ace version \" + version;\n        \n        return topmenu;\n    }\n    /**\n     * Creates a new menu entry.\n     * @author <a href=\"mailto:matthewkastor@gmail.com\">\n     *  Matthew Christopher Kastor-Inare III </a><br />\n     *  ☭ Hial Atropa!! ☭\n     * @param {object} obj This is a reference to the object containing the\n     *  set function. It is used to set up event listeners for when the\n     *  menu options change.\n     * @param {string} clss Maps to the class of the dom element. This is\n     *  the name of the object containing the set function e.g. `editor`,\n     *  `session`, `renderer`.\n     * @param {string} item  This is the set function name. It maps to the\n     *  id of the dom element (check, select, input) and to the \"contains\"\n     *  attribute of the div holding both the element and its label.\n     * @param {mixed} val This is the value of the setting. It is mapped to\n     *  the dom element's value, checked, or selected option accordingly.\n     */\n    function createNewEntry(obj, clss, item, val) {\n        var el;\n        var div = document.createElement('div');\n        div.setAttribute('contains', item);\n        div.setAttribute('class', 'ace_optionsMenuEntry');\n        div.setAttribute('style', 'clear: both;');\n\n        div.appendChild(egen.createLabel(\n            item.replace(/^set/, '').replace(/([A-Z])/g, ' $1').trim(),\n            item\n        ));\n\n        if (Array.isArray(val)) {\n            el = egen.createSelection(item, val, clss);\n            el.addEventListener('change', function(e) {\n                try{\n                    editor.menuOptions[e.target.id].forEach(function(x) {\n                        if(x.textContent !== e.target.textContent) {\n                            delete x.selected;\n                        }\n                    });\n                    obj[e.target.id](e.target.value);\n                } catch (err) {\n                    throw new Error(err);\n                }\n            });\n        } else if(typeof val === 'boolean') {\n            el = egen.createCheckbox(item, val, clss);\n            el.addEventListener('change', function(e) {\n                try{\n                    // renderer['setHighlightGutterLine'](true);\n                    obj[e.target.id](!!e.target.checked);\n                } catch (err) {\n                    throw new Error(err);\n                }\n            });\n        } else {\n            // this aids in giving the ability to specify settings through\n            // post and get requests.\n            // /ace_editor.html?setMode=ace/mode/html&setOverwrite=true\n            el = egen.createInput(item, val, clss);\n            el.addEventListener('change', function(e) {\n                try{\n                    if(e.target.value === 'true') {\n                        obj[e.target.id](true);\n                    } else if(e.target.value === 'false') {\n                        obj[e.target.id](false);\n                    } else {\n                        obj[e.target.id](e.target.value);\n                    }\n                } catch (err) {\n                    throw new Error(err);\n                }\n            });\n        }\n        el.style.cssText = 'float:right;';\n        div.appendChild(el);\n        return div;\n    }\n    /**\n     * Generates selection fields for the menu and populates their options\n     *  using information from `editor.menuOptions`\n     * @author <a href=\"mailto:matthewkastor@gmail.com\">\n     *  Matthew Christopher Kastor-Inare III </a><br />\n     *  ☭ Hial Atropa!! ☭\n     * @param {string} item The set function name.\n     * @param {object} esr A reference to the object having the set function.\n     * @param {string} clss The name of the object containing the set function.\n     * @param {string} fn The matching get function's function name.\n     * @returns {DOMElement} Returns a dom element containing a selection\n     *  element populated with options. The option whose value matches that\n     *  returned from `esr[fn]()` will be selected.\n     */\n    function makeDropdown(item, esr, clss, fn) {\n        var val = editor.menuOptions[item];\n        var currentVal = esr[fn]();\n        if (typeof currentVal == 'object')\n            currentVal = currentVal.$id;\n        val.forEach(function(valuex) {\n            if (valuex.value === currentVal)\n                valuex.selected = 'selected';\n        });\n        return createNewEntry(esr, clss, item, val);\n    }\n    /**\n     * Processes the set functions returned from `getSetFunctions`. First it\n     *  checks for menu options defined in `editor.menuOptions`. If no\n     *  options are specified then it checks whether there is a get function\n     *  (replace set with get) for the setting. When either of those\n     *  conditions are met it will attempt to create a new entry for the\n     *  settings menu and push it into the elements array defined above.\n     *  It can only do so for get functions which return\n     *  strings, numbers, and booleans. A special case is written in for\n     *  `getMode` where it looks at the returned objects `$id` property and\n     *  forwards that through instead. Other special cases could be written\n     *  in but that would get a bit ridiculous.\n     * @author <a href=\"mailto:matthewkastor@gmail.com\">\n     *  Matthew Christopher Kastor-Inare III </a><br />\n     *  ☭ Hial Atropa!! ☭\n     * @param {object} setObj An item from the array returned by\n     *  `getSetFunctions`.\n     */\n    function handleSet(setObj) {\n        var item = setObj.functionName;\n        var esr = setObj.parentObj;\n        var clss = setObj.parentName;\n        var val;\n        var fn = item.replace(/^set/, 'get');\n        if(editor.menuOptions[item] !== undefined) {\n            // has options for select element\n            elements.push(makeDropdown(item, esr, clss, fn));\n        } else if(typeof esr[fn] === 'function') {\n            // has get function\n            try {\n                val = esr[fn]();\n                if(typeof val === 'object') {\n                    // setMode takes a string, getMode returns an object\n                    // the $id property of that object is the string\n                    // which may be given to setMode...\n                    val = val.$id;\n                }\n                // the rest of the get functions return strings,\n                // booleans, or numbers.\n                elements.push(\n                    createNewEntry(esr, clss, item, val)\n                );\n            } catch (e) {\n                // if there are errors it is because the element\n                // does not belong in the settings menu\n            }\n        }\n    }\n    addEditorMenuOptions(editor);\n    // gather the set functions\n    getSetFunctions(editor).forEach(function(setObj) {\n        // populate the elements array with good stuff.\n        handleSet(setObj);\n    });\n    // sort the menu entries in the elements list so people can find\n    // the settings in alphabetical order.\n    cleanupElementsList();\n    // dump the entries from the elements list and wrap them up in a div\n    return wrapElements();\n};\n\n});"
  },
  {
    "path": "lib/ace/ext/menu_tools/get_editor_keyboard_shortcuts.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2013 Matthew Christopher Kastor-Inare III, Atropa Inc. Intl\n * All rights reserved.\n *\n * Contributed to Ajax.org under the BSD license.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*jslint indent: 4, maxerr: 50, white: true, browser: true, vars: true*/\n/*global define, require */\n\n/**\n * Get Editor Keyboard Shortcuts\n * @fileOverview Get Editor Keyboard Shortcuts <br />\n * Gets a map of keyboard shortcuts to command names for the current platform.\n * @author <a href=\"mailto:matthewkastor@gmail.com\">\n *  Matthew Christopher Kastor-Inare III </a><br />\n *  ☭ Hial Atropa!! ☭\n */\n\ndefine(function(require, exports, module) {\n\"use strict\";\nvar keys = require(\"../../lib/keys\");\n\n/**\n * Gets a map of keyboard shortcuts to command names for the current platform.\n * @author <a href=\"mailto:matthewkastor@gmail.com\">\n *  Matthew Christopher Kastor-Inare III </a><br />\n *  ☭ Hial Atropa!! ☭\n * @param {ace.Editor} editor An editor instance.\n * @returns {Array} Returns an array of objects representing the keyboard\n *  shortcuts for the given editor.\n * @example\n * var getKbShortcuts = require('./get_keyboard_shortcuts');\n * console.log(getKbShortcuts(editor));\n * // [\n * //     {'command' : aCommand, 'key' : 'Control-d'},\n * //     {'command' : aCommand, 'key' : 'Control-d'}\n * // ]\n */\nmodule.exports.getEditorKeybordShortcuts = function(editor) {\n    var KEY_MODS = keys.KEY_MODS;\n    var keybindings = [];\n    var commandMap = {};\n    editor.keyBinding.$handlers.forEach(function(handler) {\n        var ckb = handler.commandKeyBinding;\n        for (var i in ckb) {\n            var key = i.replace(/(^|-)\\w/g, function(x) { return x.toUpperCase(); });\n            var commands = ckb[i];\n            if (!Array.isArray(commands))\n                commands = [commands];\n            commands.forEach(function(command) {\n                if (typeof command != \"string\")\n                    command  = command.name;\n                if (commandMap[command]) {\n                    commandMap[command].key += \"|\" + key;\n                } else {\n                    commandMap[command] = {key: key, command: command};\n                    keybindings.push(commandMap[command]);\n                }         \n            });\n        }\n    });\n    return keybindings;\n};\n\n});"
  },
  {
    "path": "lib/ace/ext/menu_tools/get_set_functions.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2013 Matthew Christopher Kastor-Inare III, Atropa Inc. Intl\n * All rights reserved.\n *\n * Contributed to Ajax.org under the BSD license.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*jslint indent: 4, maxerr: 50, white: true, browser: true, vars: true */\n/*global define*/\n\n/**\n * Get Set Functions\n * @fileOverview Get Set Functions <br />\n * Gets various functions for setting settings.\n * @author <a href=\"mailto:matthewkastor@gmail.com\">\n *  Matthew Christopher Kastor-Inare III </a><br />\n *  ☭ Hial Atropa!! ☭\n */\n\ndefine(function(require, exports, module) {\n'use strict';\n/**\n * Generates a list of set functions for the settings menu.\n * @author <a href=\"mailto:matthewkastor@gmail.com\">\n *  Matthew Christopher Kastor-Inare III </a><br />\n *  ☭ Hial Atropa!! ☭\n * @param {object} editor The editor instance\n * @return {array} Returns an array of objects. Each object contains the\n *  following properties: functionName, parentObj, and parentName. The\n *  function name will be the name of a method beginning with the string\n *  `set` which was found. The parent object will be a reference to the\n *  object having the method matching the function name. The parent name\n *  will be a string representing the identifier of the parent object e.g.\n *  `editor`, `session`, or `renderer`.\n */\nmodule.exports.getSetFunctions = function getSetFunctions (editor) {\n    /**\n     * Output array. Will hold the objects described above.\n     * @author <a href=\"mailto:matthewkastor@gmail.com\">\n     *  Matthew Christopher Kastor-Inare III </a><br />\n     *  ☭ Hial Atropa!! ☭\n     */\n    var out = [];\n    /**\n     * This object provides a map between the objects which will be\n     *  traversed and the parent name which will appear in the output.\n     * @author <a href=\"mailto:matthewkastor@gmail.com\">\n     *  Matthew Christopher Kastor-Inare III </a><br />\n     *  ☭ Hial Atropa!! ☭\n     */\n    var my = {\n        'editor' : editor,\n        'session' : editor.session,\n        'renderer' : editor.renderer\n    };\n    /**\n     * This array will hold the set function names which have already been\n     *  found so that they are not added to the output multiple times.\n     * @author <a href=\"mailto:matthewkastor@gmail.com\">\n     *  Matthew Christopher Kastor-Inare III </a><br />\n     *  ☭ Hial Atropa!! ☭\n     */\n    var opts = [];\n    /**\n     * This is a list of set functions which will not appear in the settings\n     *  menu. I don't know what to do with setKeyboardHandler. When I tried\n     *  to use it, it didn't appear to be working. Someone who knows better\n     *  could remove it from this list and add it's options to\n     *  add_editor_menu_options.js\n     * @author <a href=\"mailto:matthewkastor@gmail.com\">\n     *  Matthew Christopher Kastor-Inare III </a><br />\n     *  ☭ Hial Atropa!! ☭\n     */\n    var skip = [\n        'setOption',\n        'setUndoManager',\n        'setDocument',\n        'setValue',\n        'setBreakpoints',\n        'setScrollTop',\n        'setScrollLeft',\n        'setSelectionStyle',\n        'setWrapLimitRange'\n    ];\n\n\n    /**\n     * This will search the objects mapped to the `my` variable above. When\n     *  it finds a set function in the object that is not listed in the\n     *  `skip` list or the `opts` list it will push a new object to the\n     *  output array.\n     * @author <a href=\"mailto:matthewkastor@gmail.com\">\n     *  Matthew Christopher Kastor-Inare III </a><br />\n     *  ☭ Hial Atropa!! ☭\n     */\n    ['renderer', 'session', 'editor'].forEach(function(esra) {\n        var esr = my[esra];\n        var clss = esra;\n        for(var fn in esr) {\n            if(skip.indexOf(fn) === -1) {\n                if(/^set/.test(fn) && opts.indexOf(fn) === -1) {\n                    // found set function\n                    opts.push(fn);\n                    out.push({\n                        'functionName' : fn,\n                        'parentObj' : esr,\n                        'parentName' : clss\n                    });\n                }\n            }\n        }\n    });\n    return out;\n};\n\n});"
  },
  {
    "path": "lib/ace/ext/menu_tools/overlay_page.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2013 Matthew Christopher Kastor-Inare III, Atropa Inc. Intl\n * All rights reserved.\n *\n * Contributed to Ajax.org under the BSD license.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*jslint indent: 4, maxerr: 50, white: true, browser: true, vars: true*/\n/*global define, require */\n\n/**\n * Overlay Page\n * @fileOverview Overlay Page <br />\n * Generates an overlay for displaying menus. The overlay is an absolutely\n *  positioned div.\n * @author <a href=\"mailto:matthewkastor@gmail.com\">\n *  Matthew Christopher Kastor-Inare III </a><br />\n *  ☭ Hial Atropa!! ☭\n */\n\ndefine(function(require, exports, module) {\n'use strict';\nvar dom = require(\"../../lib/dom\");\nvar cssText = require(\"../../requirejs/text!./settings_menu.css\");\ndom.importCssString(cssText);\n\n/**\n * Generates an overlay for displaying menus. The overlay is an absolutely\n *  positioned div.\n * @author <a href=\"mailto:matthewkastor@gmail.com\">\n *  Matthew Christopher Kastor-Inare III </a><br />\n *  ☭ Hial Atropa!! ☭\n * @param {DOMElement} contentElement Any element which may be presented inside\n *  a div.\n * @param {string|number} top absolute position value.\n * @param {string|number} right absolute position value.\n * @param {string|number} bottom absolute position value.\n * @param {string|number} left absolute position value.\n */\nmodule.exports.overlayPage = function overlayPage(editor, contentElement, top, right, bottom, left) {\n    top = top ? 'top: ' + top + ';' : '';\n    bottom = bottom ? 'bottom: ' + bottom + ';' : '';\n    right = right ? 'right: ' + right + ';' : '';\n    left = left ? 'left: ' + left + ';' : '';\n\n    var closer = document.createElement('div');\n    var contentContainer = document.createElement('div');\n\n    function documentEscListener(e) {\n        if (e.keyCode === 27) {\n            closer.click();\n        }\n    }\n\n    closer.style.cssText = 'margin: 0; padding: 0; ' +\n        'position: fixed; top:0; bottom:0; left:0; right:0;' +\n        'z-index: 9990; ' +\n        'background-color: rgba(0, 0, 0, 0.3);';\n    closer.addEventListener('click', function() {\n        document.removeEventListener('keydown', documentEscListener);\n        closer.parentNode.removeChild(closer);\n        editor.focus();\n        closer = null;\n    });\n    // click closer if esc key is pressed\n    document.addEventListener('keydown', documentEscListener);\n\n    contentContainer.style.cssText = top + right + bottom + left;\n    contentContainer.addEventListener('click', function(e) {\n        e.stopPropagation();\n    });\n\n    var wrapper = dom.createElement(\"div\");\n    wrapper.style.position = \"relative\";\n    \n    var closeButton = dom.createElement(\"div\");\n    closeButton.className = \"ace_closeButton\";\n    closeButton.addEventListener('click', function() {\n        closer.click();\n    });\n    \n    wrapper.appendChild(closeButton);\n    contentContainer.appendChild(wrapper);\n    \n    contentContainer.appendChild(contentElement);\n    closer.appendChild(contentContainer);\n    document.body.appendChild(closer);\n    editor.blur();\n};\n\n});"
  },
  {
    "path": "lib/ace/ext/menu_tools/settings_menu.css",
    "content": "#ace_settingsmenu, #kbshortcutmenu {\n    background-color: #F7F7F7;\n    color: black;\n    box-shadow: -5px 4px 5px rgba(126, 126, 126, 0.55);\n    padding: 1em 0.5em 2em 1em;\n    overflow: auto;\n    position: absolute;\n    margin: 0;\n    bottom: 0;\n    right: 0;\n    top: 0;\n    z-index: 9991;\n    cursor: default;\n}\n\n.ace_dark #ace_settingsmenu, .ace_dark #kbshortcutmenu {\n    box-shadow: -20px 10px 25px rgba(126, 126, 126, 0.25);\n    background-color: rgba(255, 255, 255, 0.6);\n    color: black;\n}\n\n.ace_optionsMenuEntry:hover {\n    background-color: rgba(100, 100, 100, 0.1);\n    -webkit-transition: all 0.5s;\n    transition: all 0.3s\n}\n\n.ace_closeButton {\n    background: rgba(245, 146, 146, 0.5);\n    border: 1px solid #F48A8A;\n    border-radius: 50%;\n    padding: 7px;\n    position: absolute;\n    right: -8px;\n    top: -8px;\n    z-index: 1000;\n}\n.ace_closeButton{\n    background: rgba(245, 146, 146, 0.9);\n}\n.ace_optionsMenuKey {\n    color: darkslateblue;\n    font-weight: bold;\n}\n.ace_optionsMenuCommand {\n    color: darkcyan;\n    font-weight: normal;\n}"
  },
  {
    "path": "lib/ace/ext/modelist.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nvar modes = [];\n/**\n * Suggests a mode based on the file extension present in the given path\n * @param {string} path The path to the file\n * @returns {object} Returns an object containing information about the\n *  suggested mode.\n */\nfunction getModeForPath(path) {\n    var mode = modesByName.text;\n    var fileName = path.split(/[\\/\\\\]/).pop();\n    for (var i = 0; i < modes.length; i++) {\n        if (modes[i].supportsFile(fileName)) {\n            mode = modes[i];\n            break;\n        }\n    }\n    return mode;\n}\n\nvar Mode = function(name, caption, extensions) {\n    this.name = name;\n    this.caption = caption;\n    this.mode = \"ace/mode/\" + name;\n    this.extensions = extensions;\n    var re;\n    if (/\\^/.test(extensions)) {\n        re = extensions.replace(/\\|(\\^)?/g, function(a, b){\n            return \"$|\" + (b ? \"^\" : \"^.*\\\\.\");\n        }) + \"$\";\n    } else {\n        re = \"^.*\\\\.(\" + extensions + \")$\";\n    }\n\n    this.extRe = new RegExp(re, \"gi\");\n};\n\nMode.prototype.supportsFile = function(filename) {\n    return filename.match(this.extRe);\n};\n\n// todo firstlinematch\nvar supportedModes = {\n    ABAP:        [\"abap\"],\n    ABC:         [\"abc\"],\n    ActionScript:[\"as\"],\n    ADA:         [\"ada|adb\"],\n    Apache_Conf: [\"^htaccess|^htgroups|^htpasswd|^conf|htaccess|htgroups|htpasswd\"],\n    AsciiDoc:    [\"asciidoc|adoc\"],\n    Assembly_x86:[\"asm|a\"],\n    AutoHotKey:  [\"ahk\"],\n    BatchFile:   [\"bat|cmd\"],\n    Bro:         [\"bro\"],\n    C_Cpp:       [\"cpp|c|cc|cxx|h|hh|hpp|ino\"],\n    C9Search:    [\"c9search_results\"],\n    Cirru:       [\"cirru|cr\"],\n    Clojure:     [\"clj|cljs\"],\n    Cobol:       [\"CBL|COB\"],\n    coffee:      [\"coffee|cf|cson|^Cakefile\"],\n    ColdFusion:  [\"cfm\"],\n    CSharp:      [\"cs\"],\n    Csound_Document: [\"csd\"],\n    Csound_Orchestra: [\"orc\"],\n    Csound_Score: [\"sco\"],\n    CSS:         [\"css\"],\n    Curly:       [\"curly\"],\n    D:           [\"d|di\"],\n    Dart:        [\"dart\"],\n    Diff:        [\"diff|patch\"],\n    Dockerfile:  [\"^Dockerfile\"],\n    Dot:         [\"dot\"],\n    Drools:      [\"drl\"],\n    Eiffel:      [\"e|ge\"],\n    EJS:         [\"ejs\"],\n    Elixir:      [\"ex|exs\"],\n    Elm:         [\"elm\"],\n    Erlang:      [\"erl|hrl\"],\n    Forth:       [\"frt|fs|ldr|fth|4th\"],\n    Fortran:     [\"f|f90\"],\n    FTL:         [\"ftl\"],\n    Gcode:       [\"gcode\"],\n    Gherkin:     [\"feature\"],\n    Gitignore:   [\"^.gitignore\"],\n    Glsl:        [\"glsl|frag|vert\"],\n    Gobstones:   [\"gbs\"],\n    golang:      [\"go\"],\n    GraphQLSchema: [\"gql\"],\n    Groovy:      [\"groovy\"],\n    HAML:        [\"haml\"],\n    Handlebars:  [\"hbs|handlebars|tpl|mustache\"],\n    Haskell:     [\"hs\"],\n    Haskell_Cabal:     [\"cabal\"],\n    haXe:        [\"hx\"],\n    Hjson:       [\"hjson\"],\n    HTML:        [\"html|htm|xhtml|vue|we|wpy\"],\n    HTML_Elixir: [\"eex|html.eex\"],\n    HTML_Ruby:   [\"erb|rhtml|html.erb\"],\n    INI:         [\"ini|conf|cfg|prefs\"],\n    Io:          [\"io\"],\n    Jack:        [\"jack\"],\n    Jade:        [\"jade|pug\"],\n    Java:        [\"java\"],\n    JavaScript:  [\"js|jsm|jsx\"],\n    JSON:        [\"json\"],\n    JSONiq:      [\"jq\"],\n    JSP:         [\"jsp\"],\n    JSSM:        [\"jssm|jssm_state\"],\n    JSX:         [\"jsx\"],\n    Julia:       [\"jl\"],\n    Kotlin:      [\"kt|kts\"],\n    LaTeX:       [\"tex|latex|ltx|bib\"],\n    LESS:        [\"less\"],\n    Liquid:      [\"liquid\"],\n    Lisp:        [\"lisp\"],\n    LiveScript:  [\"ls\"],\n    LogiQL:      [\"logic|lql\"],\n    LSL:         [\"lsl\"],\n    Lua:         [\"lua\"],\n    LuaPage:     [\"lp\"],\n    Lucene:      [\"lucene\"],\n    Makefile:    [\"^Makefile|^GNUmakefile|^makefile|^OCamlMakefile|make\"],\n    Markdown:    [\"md|markdown\"],\n    Mask:        [\"mask\"],\n    MATLAB:      [\"matlab\"],\n    Maze:        [\"mz\"],\n    MEL:         [\"mel\"],\n    MIXAL:       [\"mixal\"],\n    MUSHCode:    [\"mc|mush\"],\n    MySQL:       [\"mysql\"],\n    Nix:         [\"nix\"],\n    NSIS:        [\"nsi|nsh\"],\n    ObjectiveC:  [\"m|mm\"],\n    OCaml:       [\"ml|mli\"],\n    Pascal:      [\"pas|p\"],\n    Perl:        [\"pl|pm\"],\n    pgSQL:       [\"pgsql\"],\n    PHP:         [\"php|phtml|shtml|php3|php4|php5|phps|phpt|aw|ctp|module\"],\n    Pig:         [\"pig\"],\n    Powershell:  [\"ps1\"],\n    Praat:       [\"praat|praatscript|psc|proc\"],\n    Prolog:      [\"plg|prolog\"],\n    Properties:  [\"properties\"],\n    Protobuf:    [\"proto\"],\n    Python:      [\"py\"],\n    R:           [\"r\"],\n    Razor:       [\"cshtml|asp\"],\n    RDoc:        [\"Rd\"],\n    Red:         [\"red|reds\"],\n    RHTML:       [\"Rhtml\"],\n    RST:         [\"rst\"],\n    Ruby:        [\"rb|ru|gemspec|rake|^Guardfile|^Rakefile|^Gemfile\"],\n    Rust:        [\"rs\"],\n    SASS:        [\"sass\"],\n    SCAD:        [\"scad\"],\n    Scala:       [\"scala\"],\n    Scheme:      [\"scm|sm|rkt|oak|scheme\"],\n    SCSS:        [\"scss\"],\n    SH:          [\"sh|bash|^.bashrc\"],\n    SJS:         [\"sjs\"],\n    Smarty:      [\"smarty|tpl\"],\n    snippets:    [\"snippets\"],\n    Soy_Template:[\"soy\"],\n    Space:       [\"space\"],\n    SQL:         [\"sql\"],\n    SQLServer:   [\"sqlserver\"],\n    Stylus:      [\"styl|stylus\"],\n    SVG:         [\"svg\"],\n    Swift:       [\"swift\"],\n    Tcl:         [\"tcl\"],\n    Tex:         [\"tex\"],\n    Text:        [\"txt\"],\n    Textile:     [\"textile\"],\n    Toml:        [\"toml\"],\n    TSX:         [\"tsx\"],\n    Twig:        [\"twig|swig\"],\n    Typescript:  [\"ts|typescript|str\"],\n    Vala:        [\"vala\"],\n    VBScript:    [\"vbs|vb\"],\n    Velocity:    [\"vm\"],\n    Verilog:     [\"v|vh|sv|svh\"],\n    VHDL:        [\"vhd|vhdl\"],\n    Wollok:      [\"wlk|wpgm|wtest\"],\n    XML:         [\"xml|rdf|rss|wsdl|xslt|atom|mathml|mml|xul|xbl|xaml\"],\n    XQuery:      [\"xq\"],\n    YAML:        [\"yaml|yml\"],\n    // Add the missing mode \"Django\" to ext-modelist\n    Django:      [\"html\"]\n};\n\nvar nameOverrides = {\n    ObjectiveC: \"Objective-C\",\n    CSharp: \"C#\",\n    golang: \"Go\",\n    C_Cpp: \"C and C++\",\n    Csound_Document: \"Csound Document\",\n    Csound_Orchestra: \"Csound\",\n    Csound_Score: \"Csound Score\",\n    coffee: \"CoffeeScript\",\n    HTML_Ruby: \"HTML (Ruby)\",\n    HTML_Elixir: \"HTML (Elixir)\",\n    FTL: \"FreeMarker\"\n};\nvar modesByName = {};\nfor (var name in supportedModes) {\n    var data = supportedModes[name];\n    var displayName = (nameOverrides[name] || name).replace(/_/g, \" \");\n    var filename = name.toLowerCase();\n    var mode = new Mode(filename, displayName, data[0]);\n    modesByName[filename] = mode;\n    modes.push(mode);\n}\n\nmodule.exports = {\n    getModeForPath: getModeForPath,\n    modes: modes,\n    modesByName: modesByName\n};\n\n});\n"
  },
  {
    "path": "lib/ace/ext/searchbox.css",
    "content": "\n\n/* ------------------------------------------------------------------------------------------\n * Editor Search Form\n * --------------------------------------------------------------------------------------- */\n.ace_search {\n    background-color: #ddd;\n    color: #666;\n    border: 1px solid #cbcbcb;\n    border-top: 0 none;\n    overflow: hidden;\n    margin: 0;\n    padding: 4px 6px 0 4px;\n    position: absolute;\n    top: 0;\n    z-index: 99;\n    white-space: normal;\n}\n.ace_search.left {\n    border-left: 0 none;\n    border-radius: 0px 0px 5px 0px;\n    left: 0;\n}\n.ace_search.right {\n    border-radius: 0px 0px 0px 5px;\n    border-right: 0 none;\n    right: 0;\n}\n\n.ace_search_form, .ace_replace_form {\n    margin: 0 20px 4px 0;\n    overflow: hidden;\n    line-height: 1.9;\n}\n.ace_replace_form {\n    margin-right: 0;\n}\n.ace_search_form.ace_nomatch {\n    outline: 1px solid red;\n}\n\n.ace_search_field {\n    border-radius: 3px 0 0 3px;\n    background-color: white;\n    color: black;\n    border: 1px solid #cbcbcb;\n    border-right: 0 none;\n    box-sizing: border-box!important;\n    outline: 0;\n    padding: 0;\n    font-size: inherit;\n    margin: 0;\n    line-height: inherit;\n    padding: 0 6px;\n    min-width: 17em;\n    vertical-align: top;\n}\n.ace_searchbtn {\n    border: 1px solid #cbcbcb;\n    line-height: inherit;\n    display: inline-block;\n    padding: 0 6px;\n    background: #fff;\n    border-right: 0 none;\n    border-left: 1px solid #dcdcdc;\n    cursor: pointer;\n    margin: 0;\n    position: relative;\n    box-sizing: content-box!important;\n    color: #666;\n}\n.ace_searchbtn:last-child {\n    border-radius: 0 3px 3px 0;\n    border-right: 1px solid #cbcbcb;\n}\n.ace_searchbtn:disabled {\n    background: none;\n    cursor: default;\n}\n.ace_searchbtn:hover {\n    background-color: #eef1f6;\n}\n.ace_searchbtn.prev, .ace_searchbtn.next {\n     padding: 0px 0.7em\n}\n.ace_searchbtn.prev:after, .ace_searchbtn.next:after {\n     content: \"\";\n     border: solid 2px #888;\n     width: 0.5em;\n     height: 0.5em;\n     border-width:  2px 0 0 2px;\n     display:inline-block;\n     transform: rotate(-45deg);\n}\n.ace_searchbtn.next:after {\n     border-width: 0 2px 2px 0 ;\n}\n.ace_searchbtn_close {\n    background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAcCAYAAABRVo5BAAAAZ0lEQVR42u2SUQrAMAhDvazn8OjZBilCkYVVxiis8H4CT0VrAJb4WHT3C5xU2a2IQZXJjiQIRMdkEoJ5Q2yMqpfDIo+XY4k6h+YXOyKqTIj5REaxloNAd0xiKmAtsTHqW8sR2W5f7gCu5nWFUpVjZwAAAABJRU5ErkJggg==) no-repeat 50% 0;\n    border-radius: 50%;\n    border: 0 none;\n    color: #656565;\n    cursor: pointer;\n    font: 16px/16px Arial;\n    padding: 0;\n    height: 14px;\n    width: 14px;\n    top: 9px;\n    right: 7px;\n    position: absolute;\n}\n.ace_searchbtn_close:hover {\n    background-color: #656565;\n    background-position: 50% 100%;\n    color: white;\n}\n\n.ace_button {\n    margin-left: 2px;\n    cursor: pointer;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -o-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n    overflow: hidden;\n    opacity: 0.7;\n    border: 1px solid rgba(100,100,100,0.23);\n    padding: 1px;\n    box-sizing:    border-box!important;\n    color: black;\n}\n\n.ace_button:hover {\n    background-color: #eee;\n    opacity:1;\n}\n.ace_button:active {\n    background-color: #ddd;\n}\n\n.ace_button.checked {\n    border-color: #3399ff;\n    opacity:1;\n}\n\n.ace_search_options{\n    margin-bottom: 3px;\n    text-align: right;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -o-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n    clear: both;\n}\n\n.ace_search_counter {\n    float: left;\n    font-family: arial;\n    padding: 0 8px;\n}"
  },
  {
    "path": "lib/ace/ext/searchbox.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar event = require(\"../lib/event\");\nvar searchboxCss = require(\"../requirejs/text!./searchbox.css\");\nvar HashHandler = require(\"../keyboard/hash_handler\").HashHandler;\nvar keyUtil = require(\"../lib/keys\");\n\nvar MAX_COUNT = 999;\n\ndom.importCssString(searchboxCss, \"ace_searchbox\");\n\nvar html = '<div class=\"ace_search right\">\\\n    <span action=\"hide\" class=\"ace_searchbtn_close\"></span>\\\n    <div class=\"ace_search_form\">\\\n        <input class=\"ace_search_field\" placeholder=\"Search for\" spellcheck=\"false\"></input>\\\n        <span action=\"findPrev\" class=\"ace_searchbtn prev\"></span>\\\n        <span action=\"findNext\" class=\"ace_searchbtn next\"></span>\\\n        <span action=\"findAll\" class=\"ace_searchbtn\" title=\"Alt-Enter\">All</span>\\\n    </div>\\\n    <div class=\"ace_replace_form\">\\\n        <input class=\"ace_search_field\" placeholder=\"Replace with\" spellcheck=\"false\"></input>\\\n        <span action=\"replaceAndFindNext\" class=\"ace_searchbtn\">Replace</span>\\\n        <span action=\"replaceAll\" class=\"ace_searchbtn\">All</span>\\\n    </div>\\\n    <div class=\"ace_search_options\">\\\n        <span action=\"toggleReplace\" class=\"ace_button\" title=\"Toggle Replace mode\"\\\n            style=\"float:left;margin-top:-2px;padding:0 5px;\">+</span>\\\n        <span class=\"ace_search_counter\"></span>\\\n        <span action=\"toggleRegexpMode\" class=\"ace_button\" title=\"RegExp Search\">.*</span>\\\n        <span action=\"toggleCaseSensitive\" class=\"ace_button\" title=\"CaseSensitive Search\">Aa</span>\\\n        <span action=\"toggleWholeWords\" class=\"ace_button\" title=\"Whole Word Search\">\\\\b</span>\\\n        <span action=\"searchInSelection\" class=\"ace_button\" title=\"Search In Selection\">S</span>\\\n    </div>\\\n</div>'.replace(/> +/g, \">\");\n\nvar SearchBox = function(editor, range, showReplaceForm) {\n    var div = dom.createElement(\"div\");\n    div.innerHTML = html;\n    this.element = div.firstChild;\n    \n    this.setSession = this.setSession.bind(this);\n\n    this.$init();\n    this.setEditor(editor);\n};\n\n(function() {\n    this.setEditor = function(editor) {\n        editor.searchBox = this;\n        editor.renderer.scroller.appendChild(this.element);\n        this.editor = editor;\n    };\n    \n    this.setSession = function(e) {\n        this.searchRange = null;\n        this.$syncOptions(true);\n    };\n\n    this.$initElements = function(sb) {\n        this.searchBox = sb.querySelector(\".ace_search_form\");\n        this.replaceBox = sb.querySelector(\".ace_replace_form\");\n        this.searchOption = sb.querySelector(\"[action=searchInSelection]\");\n        this.replaceOption = sb.querySelector(\"[action=toggleReplace]\");\n        this.regExpOption = sb.querySelector(\"[action=toggleRegexpMode]\");\n        this.caseSensitiveOption = sb.querySelector(\"[action=toggleCaseSensitive]\");\n        this.wholeWordOption = sb.querySelector(\"[action=toggleWholeWords]\");\n        this.searchInput = this.searchBox.querySelector(\".ace_search_field\");\n        this.replaceInput = this.replaceBox.querySelector(\".ace_search_field\");\n        this.searchCounter = sb.querySelector(\".ace_search_counter\");\n    };\n    \n    this.$init = function() {\n        var sb = this.element;\n        \n        this.$initElements(sb);\n        \n        var _this = this;\n        event.addListener(sb, \"mousedown\", function(e) {\n            setTimeout(function(){\n                _this.activeInput.focus();\n            }, 0);\n            event.stopPropagation(e);\n        });\n        event.addListener(sb, \"click\", function(e) {\n            var t = e.target || e.srcElement;\n            var action = t.getAttribute(\"action\");\n            if (action && _this[action])\n                _this[action]();\n            else if (_this.$searchBarKb.commands[action])\n                _this.$searchBarKb.commands[action].exec(_this);\n            event.stopPropagation(e);\n        });\n\n        event.addCommandKeyListener(sb, function(e, hashId, keyCode) {\n            var keyString = keyUtil.keyCodeToString(keyCode);\n            var command = _this.$searchBarKb.findKeyCommand(hashId, keyString);\n            if (command && command.exec) {\n                command.exec(_this);\n                event.stopEvent(e);\n            }\n        });\n\n        this.$onChange = lang.delayedCall(function() {\n            _this.find(false, false);\n        });\n\n        event.addListener(this.searchInput, \"input\", function() {\n            _this.$onChange.schedule(20);\n        });\n        event.addListener(this.searchInput, \"focus\", function() {\n            _this.activeInput = _this.searchInput;\n            _this.searchInput.value && _this.highlight();\n        });\n        event.addListener(this.replaceInput, \"focus\", function() {\n            _this.activeInput = _this.replaceInput;\n            _this.searchInput.value && _this.highlight();\n        });\n    };\n\n    //keybinding outside of the searchbox\n    this.$closeSearchBarKb = new HashHandler([{\n        bindKey: \"Esc\",\n        name: \"closeSearchBar\",\n        exec: function(editor) {\n            editor.searchBox.hide();\n        }\n    }]);\n\n    //keybinding outside of the searchbox\n    this.$searchBarKb = new HashHandler();\n    this.$searchBarKb.bindKeys({\n        \"Ctrl-f|Command-f\": function(sb) {\n            var isReplace = sb.isReplace = !sb.isReplace;\n            sb.replaceBox.style.display = isReplace ? \"\" : \"none\";\n            sb.replaceOption.checked = false;\n            sb.$syncOptions();\n            sb.searchInput.focus();\n        },\n        \"Ctrl-H|Command-Option-F\": function(sb) {\n            sb.replaceOption.checked = true;\n            sb.$syncOptions();\n            sb.replaceInput.focus();\n        },\n        \"Ctrl-G|Command-G\": function(sb) {\n            sb.findNext();\n        },\n        \"Ctrl-Shift-G|Command-Shift-G\": function(sb) {\n            sb.findPrev();\n        },\n        \"esc\": function(sb) {\n            setTimeout(function() { sb.hide();});\n        },\n        \"Return\": function(sb) {\n            if (sb.activeInput == sb.replaceInput)\n                sb.replace();\n            sb.findNext();\n        },\n        \"Shift-Return\": function(sb) {\n            if (sb.activeInput == sb.replaceInput)\n                sb.replace();\n            sb.findPrev();\n        },\n        \"Alt-Return\": function(sb) {\n            if (sb.activeInput == sb.replaceInput)\n                sb.replaceAll();\n            sb.findAll();\n        },\n        \"Tab\": function(sb) {\n            (sb.activeInput == sb.replaceInput ? sb.searchInput : sb.replaceInput).focus();\n        }\n    });\n\n    this.$searchBarKb.addCommands([{\n        name: \"toggleRegexpMode\",\n        bindKey: {win: \"Alt-R|Alt-/\", mac: \"Ctrl-Alt-R|Ctrl-Alt-/\"},\n        exec: function(sb) {\n            sb.regExpOption.checked = !sb.regExpOption.checked;\n            sb.$syncOptions();\n        }\n    }, {\n        name: \"toggleCaseSensitive\",\n        bindKey: {win: \"Alt-C|Alt-I\", mac: \"Ctrl-Alt-R|Ctrl-Alt-I\"},\n        exec: function(sb) {\n            sb.caseSensitiveOption.checked = !sb.caseSensitiveOption.checked;\n            sb.$syncOptions();\n        }\n    }, {\n        name: \"toggleWholeWords\",\n        bindKey: {win: \"Alt-B|Alt-W\", mac: \"Ctrl-Alt-B|Ctrl-Alt-W\"},\n        exec: function(sb) {\n            sb.wholeWordOption.checked = !sb.wholeWordOption.checked;\n            sb.$syncOptions();\n        }\n    }, {\n        name: \"toggleReplace\",\n        exec: function(sb) {\n            sb.replaceOption.checked = !sb.replaceOption.checked;\n            sb.$syncOptions();\n        }\n    }, {\n        name: \"searchInSelection\",\n        exec: function(sb) {\n            sb.searchOption.checked = !sb.searchRange;\n            sb.setSearchRange(sb.searchOption.checked && sb.editor.getSelectionRange());\n            sb.$syncOptions();\n        }\n    }]);\n    \n    this.setSearchRange = function(range) {\n        this.searchRange = range;\n        if (range) {\n            this.searchRangeMarker = this.editor.session.addMarker(range, \"ace_active-line\");\n        } else if (this.searchRangeMarker) {\n            this.editor.session.removeMarker(this.searchRangeMarker);\n            this.searchRangeMarker = null;\n        }\n    };\n\n    this.$syncOptions = function(preventScroll) {\n        dom.setCssClass(this.replaceOption, \"checked\", this.searchRange);\n        dom.setCssClass(this.searchOption, \"checked\", this.searchOption.checked);\n        this.replaceOption.textContent = this.replaceOption.checked ? \"-\" : \"+\";\n        dom.setCssClass(this.regExpOption, \"checked\", this.regExpOption.checked);\n        dom.setCssClass(this.wholeWordOption, \"checked\", this.wholeWordOption.checked);\n        dom.setCssClass(this.caseSensitiveOption, \"checked\", this.caseSensitiveOption.checked);\n        this.replaceBox.style.display = this.replaceOption.checked ? \"\" : \"none\";\n        this.find(false, false, preventScroll);\n    };\n\n    this.highlight = function(re) {\n        this.editor.session.highlight(re || this.editor.$search.$options.re);\n        this.editor.renderer.updateBackMarkers();\n    };\n    this.find = function(skipCurrent, backwards, preventScroll) {\n        var range = this.editor.find(this.searchInput.value, {\n            skipCurrent: skipCurrent,\n            backwards: backwards,\n            wrap: true,\n            regExp: this.regExpOption.checked,\n            caseSensitive: this.caseSensitiveOption.checked,\n            wholeWord: this.wholeWordOption.checked,\n            preventScroll: preventScroll,\n            range: this.searchRange\n        });\n        var noMatch = !range && this.searchInput.value;\n        dom.setCssClass(this.searchBox, \"ace_nomatch\", noMatch);\n        this.editor._emit(\"findSearchBox\", { match: !noMatch });\n        this.highlight();\n        this.updateCounter();\n    };\n    this.updateCounter = function() {\n        var editor = this.editor;\n        var regex = editor.$search.$options.re;\n        var all = 0;\n        var before = 0;\n        if (regex) {\n            var value = this.searchRange\n                ? editor.session.getTextRange(this.searchRange)\n                : editor.getValue();\n            \n            var offset = editor.session.doc.positionToIndex(editor.selection.anchor);\n            if (this.searchRange)\n                offset -= editor.session.doc.positionToIndex(this.searchRange.start);\n                \n            var last = regex.lastIndex = 0;\n            var m;\n            while ((m = regex.exec(value))) {\n                all++;\n                last = m.index;\n                if (last <= offset)\n                    before++;\n                if (all > MAX_COUNT)\n                    break;\n                if (!m[0]) {\n                    regex.lastIndex = last += 1;\n                    if (last >= value.length)\n                        break;\n                }\n            }\n        }\n        this.searchCounter.textContent = before + \" of \" + (all > MAX_COUNT ? MAX_COUNT + \"+\" : all);\n    };\n    this.findNext = function() {\n        this.find(true, false);\n    };\n    this.findPrev = function() {\n        this.find(true, true);\n    };\n    this.findAll = function(){\n        var range = this.editor.findAll(this.searchInput.value, {            \n            regExp: this.regExpOption.checked,\n            caseSensitive: this.caseSensitiveOption.checked,\n            wholeWord: this.wholeWordOption.checked\n        });\n        var noMatch = !range && this.searchInput.value;\n        dom.setCssClass(this.searchBox, \"ace_nomatch\", noMatch);\n        this.editor._emit(\"findSearchBox\", { match: !noMatch });\n        this.highlight();\n        this.hide();\n    };\n    this.replace = function() {\n        if (!this.editor.getReadOnly())\n            this.editor.replace(this.replaceInput.value);\n    };    \n    this.replaceAndFindNext = function() {\n        if (!this.editor.getReadOnly()) {\n            this.editor.replace(this.replaceInput.value);\n            this.findNext();\n        }\n    };\n    this.replaceAll = function() {\n        if (!this.editor.getReadOnly())\n            this.editor.replaceAll(this.replaceInput.value);\n    };\n\n    this.hide = function() {\n        this.active = false;\n        this.setSearchRange(null);\n        this.editor.off(\"changeSession\", this.setSession);\n        \n        this.element.style.display = \"none\";\n        this.editor.keyBinding.removeKeyboardHandler(this.$closeSearchBarKb);\n        this.editor.focus();\n    };\n    this.show = function(value, isReplace) {\n        this.active = true;\n        this.editor.on(\"changeSession\", this.setSession);\n        this.element.style.display = \"\";\n        this.replaceOption.checked = isReplace;\n        \n        if (value)\n            this.searchInput.value = value;\n        \n        this.searchInput.focus();\n        this.searchInput.select();\n\n        this.editor.keyBinding.addKeyboardHandler(this.$closeSearchBarKb);\n        \n        this.$syncOptions(true);\n    };\n\n    this.isFocused = function() {\n        var el = document.activeElement;\n        return el == this.searchInput || el == this.replaceInput;\n    };\n}).call(SearchBox.prototype);\n\nexports.SearchBox = SearchBox;\n\nexports.Search = function(editor, isReplace) {\n    var sb = editor.searchBox || new SearchBox(editor);\n    sb.show(editor.session.getTextRange(), isReplace);\n};\n\n});\n\n\n/* ------------------------------------------------------------------------------------------\n * TODO\n * --------------------------------------------------------------------------------------- */\n/*\n- move search form to the left if it masks current word\n- include all options that search has. ex: regex\n- searchbox.searchbox is not that pretty. We should have just searchbox\n- disable prev button if it makes sense\n*/\n"
  },
  {
    "path": "lib/ace/ext/settings_menu.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2013 Matthew Christopher Kastor-Inare III, Atropa Inc. Intl\n * All rights reserved.\n *\n * Contributed to Ajax.org under the BSD license.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*jslint indent: 4, maxerr: 50, white: true, browser: true, vars: true*/\n/*global define, require */\n\n/**\n * Show Settings Menu\n * @fileOverview Show Settings Menu <br />\n * Displays an interactive settings menu mostly generated on the fly based on\n *  the current state of the editor.\n * @author <a href=\"mailto:matthewkastor@gmail.com\">\n *  Matthew Christopher Kastor-Inare III </a><br />\n *  ☭ Hial Atropa!! ☭\n */\n\ndefine(function(require, exports, module) {\n\"use strict\";\nvar generateSettingsMenu = require('./menu_tools/generate_settings_menu').generateSettingsMenu;\nvar overlayPage = require('./menu_tools/overlay_page').overlayPage;\n/**\n * This displays the settings menu if it is not already being shown.\n * @author <a href=\"mailto:matthewkastor@gmail.com\">\n *  Matthew Christopher Kastor-Inare III </a><br />\n *  ☭ Hial Atropa!! ☭\n * @param {ace.Editor} editor An instance of the ace editor.\n */\nfunction showSettingsMenu(editor) {\n    // make sure the menu isn't open already.\n    var sm = document.getElementById('ace_settingsmenu');\n    if (!sm)    \n        overlayPage(editor, generateSettingsMenu(editor), '0', '0', '0');\n}\n\n/**\n * Initializes the settings menu extension. It adds the showSettingsMenu\n *  method to the given editor object and adds the showSettingsMenu command\n *  to the editor with appropriate keyboard shortcuts.\n * @param {ace.Editor} editor An instance of the Editor.\n */\nmodule.exports.init = function(editor) {\n    var Editor = require(\"ace/editor\").Editor;\n    Editor.prototype.showSettingsMenu = function() {\n        showSettingsMenu(this);\n    };\n};\n});"
  },
  {
    "path": "lib/ace/ext/spellcheck.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\nvar event = require(\"../lib/event\");\n\nexports.contextMenuHandler = function(e){\n    var host = e.target;\n    var text = host.textInput.getElement();\n    if (!host.selection.isEmpty())\n        return;\n    var c = host.getCursorPosition();\n    var r = host.session.getWordRange(c.row, c.column);\n    var w = host.session.getTextRange(r);\n\n    host.session.tokenRe.lastIndex = 0;\n    if (!host.session.tokenRe.test(w))\n        return;\n    var PLACEHOLDER = \"\\x01\\x01\";\n    var value = w + \" \" + PLACEHOLDER;\n    text.value = value;\n    text.setSelectionRange(w.length, w.length + 1);\n    text.setSelectionRange(0, 0);\n    text.setSelectionRange(0, w.length);\n\n    var afterKeydown = false;\n    event.addListener(text, \"keydown\", function onKeydown() {\n        event.removeListener(text, \"keydown\", onKeydown);\n        afterKeydown = true;\n    });\n\n    host.textInput.setInputHandler(function(newVal) {\n        console.log(newVal , value, text.selectionStart, text.selectionEnd);\n        if (newVal == value)\n            return '';\n        if (newVal.lastIndexOf(value, 0) === 0)\n            return newVal.slice(value.length);\n        if (newVal.substr(text.selectionEnd) == value)\n            return newVal.slice(0, -value.length);\n        if (newVal.slice(-2) == PLACEHOLDER) {\n            var val = newVal.slice(0, -2);\n            if (val.slice(-1) == \" \") {\n                if (afterKeydown)\n                    return val.substring(0, text.selectionEnd);\n                val = val.slice(0, -1);\n                host.session.replace(r, val);\n                return \"\";\n            }\n        }\n\n        return newVal;\n    });\n};\n// todo support highlighting with typo.js\nvar Editor = require(\"../editor\").Editor;\nrequire(\"../config\").defineOptions(Editor.prototype, \"editor\", {\n    spellcheck: {\n        set: function(val) {\n            var text = this.textInput.getElement();\n            text.spellcheck = !!val;\n            if (!val)\n                this.removeListener(\"nativecontextmenu\", exports.contextMenuHandler);\n            else\n                this.on(\"nativecontextmenu\", exports.contextMenuHandler);\n        },\n        value: true\n    }\n});\n\n});\n\n"
  },
  {
    "path": "lib/ace/ext/split.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\n/**\n * this is experimental, and subject to change, use at your own risk!\n */\nmodule.exports = require(\"../split\");\n\n});\n\n"
  },
  {
    "path": "lib/ace/ext/static.css",
    "content": ".ace_static_highlight {\n    font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', 'Droid Sans Mono', monospace;\n    font-size: 12px;\n    white-space: pre-wrap\n}\n\n.ace_static_highlight .ace_gutter {\n    width: 2em;\n    text-align: right;\n    padding: 0 3px 0 0;\n    margin-right: 3px;\n}\n\n.ace_static_highlight.ace_show_gutter .ace_line {\n    padding-left: 2.6em;\n}\n\n.ace_static_highlight .ace_line { position: relative; }\n\n.ace_static_highlight .ace_gutter-cell {\n    -moz-user-select: -moz-none;\n    -khtml-user-select: none;\n    -webkit-user-select: none;\n    user-select: none;\n    top: 0;\n    bottom: 0;\n    left: 0;\n    position: absolute;\n}\n\n\n.ace_static_highlight .ace_gutter-cell:before {\n    content: counter(ace_line, decimal);\n    counter-increment: ace_line;\n}\n.ace_static_highlight {\n    counter-reset: ace_line;\n}\n"
  },
  {
    "path": "lib/ace/ext/static_highlight.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar EditSession = require(\"../edit_session\").EditSession;\nvar TextLayer = require(\"../layer/text\").Text;\nvar baseStyles = require(\"../requirejs/text!./static.css\");\nvar config = require(\"../config\");\nvar dom = require(\"../lib/dom\");\n\nvar SimpleTextLayer = function() {\n    this.config = {};\n};\nSimpleTextLayer.prototype = TextLayer.prototype;\n\nvar highlight = function(el, opts, callback) {\n    var m = el.className.match(/lang-(\\w+)/);\n    var mode = opts.mode || m && (\"ace/mode/\" + m[1]);\n    if (!mode)\n        return false;\n    var theme = opts.theme || \"ace/theme/textmate\";\n    \n    var data = \"\";\n    var nodes = [];\n\n    if (el.firstElementChild) {\n        var textLen = 0;\n        for (var i = 0; i < el.childNodes.length; i++) {\n            var ch = el.childNodes[i];\n            if (ch.nodeType == 3) {\n                textLen += ch.data.length;\n                data += ch.data;\n            } else {\n                nodes.push(textLen, ch);\n            }\n        }\n    } else {\n        data = dom.getInnerText(el);\n        if (opts.trim)\n            data = data.trim();\n    }\n    \n    highlight.render(data, mode, theme, opts.firstLineNumber, !opts.showGutter, function (highlighted) {\n        dom.importCssString(highlighted.css, \"ace_highlight\");\n        el.innerHTML = highlighted.html;\n        var container = el.firstChild.firstChild;\n        for (var i = 0; i < nodes.length; i += 2) {\n            var pos = highlighted.session.doc.indexToPosition(nodes[i]);\n            var node = nodes[i + 1];\n            var lineEl = container.children[pos.row];\n            lineEl && lineEl.appendChild(node);\n        }\n        callback && callback();\n    });\n};\n\n/**\n * Transforms a given input code snippet into HTML using the given mode\n *\n * @param {string} input Code snippet\n * @param {string|mode} mode String specifying the mode to load such as\n *  `ace/mode/javascript` or, a mode loaded from `/ace/mode`\n *  (use 'ServerSideHiglighter.getMode').\n * @param {string|theme} theme String specifying the theme to load such as\n *  `ace/theme/twilight` or, a theme loaded from `/ace/theme`.\n * @param {number} lineStart A number indicating the first line number. Defaults\n *  to 1.\n * @param {boolean} disableGutter Specifies whether or not to disable the gutter.\n *  `true` disables the gutter, `false` enables the gutter. Defaults to `false`.\n * @param {function} callback When specifying the mode or theme as a string,\n *  this method has no return value and you must specify a callback function. The\n *  callback will receive the rendered object containing the properties `html`\n *  and `css`.\n * @returns {object} An object containing the properties `html` and `css`.\n */\nhighlight.render = function(input, mode, theme, lineStart, disableGutter, callback) {\n    var waiting = 1;\n    var modeCache = EditSession.prototype.$modes;\n\n    // if either the theme or the mode were specified as objects\n    // then we need to lazily load them.\n    if (typeof theme == \"string\") {\n        waiting++;\n        config.loadModule(['theme', theme], function(m) {\n            theme = m;\n            --waiting || done();\n        });\n    }\n    // allow setting mode options e.h {path: \"ace/mode/php\", inline:true}\n    var modeOptions;\n    if (mode && typeof mode === \"object\" && !mode.getTokenizer) {\n        modeOptions = mode;\n        mode = modeOptions.path;\n    }\n    if (typeof mode == \"string\") {\n        waiting++;\n        config.loadModule(['mode', mode], function(m) {\n            if (!modeCache[mode] || modeOptions)\n                modeCache[mode] = new m.Mode(modeOptions);\n            mode = modeCache[mode];\n            --waiting || done();\n        });\n    }\n\n    // loads or passes the specified mode module then calls renderer\n    function done() {\n        var result = highlight.renderSync(input, mode, theme, lineStart, disableGutter);\n        return callback ? callback(result) : result;\n    }\n    return --waiting || done();\n};\n\n/**\n * Transforms a given input code snippet into HTML using the given mode\n * @param {string} input Code snippet\n * @param {mode} mode Mode loaded from /ace/mode (use 'ServerSideHiglighter.getMode')\n * @param {string} r Code snippet\n * @returns {object} An object containing: html, css\n */\nhighlight.renderSync = function(input, mode, theme, lineStart, disableGutter) {\n    lineStart = parseInt(lineStart || 1, 10);\n\n    var session = new EditSession(\"\");\n    session.setUseWorker(false);\n    session.setMode(mode);\n\n    var textLayer = new SimpleTextLayer();\n    textLayer.setSession(session);\n\n    session.setValue(input);\n\n    var stringBuilder = [];\n    var length =  session.getLength();\n\n    for(var ix = 0; ix < length; ix++) {\n        stringBuilder.push(\"<div class='ace_line'>\");\n        if (!disableGutter)\n            stringBuilder.push(\"<span class='ace_gutter ace_gutter-cell' unselectable='on'>\" + /*(ix + lineStart) + */ \"</span>\");\n        textLayer.$renderLine(stringBuilder, ix, true, false);\n        stringBuilder.push(\"\\n</div>\");\n    }\n\n    // let's prepare the whole html\n    var html = \"<div class='\" + theme.cssClass + \"'>\" +\n        \"<div class='ace_static_highlight\" + (disableGutter ? \"\" : \" ace_show_gutter\") +\n            \"' style='counter-reset:ace_line \" + (lineStart - 1) + \"'>\" +\n            stringBuilder.join(\"\") +\n        \"</div>\" +\n    \"</div>\";\n\n    textLayer.destroy();\n\n    return {\n        css: baseStyles + theme.cssText,\n        html: html,\n        session: session\n    };\n};\n\nmodule.exports = highlight;\nmodule.exports.highlight = highlight;\n});\n"
  },
  {
    "path": "lib/ace/ext/static_highlight_test.js",
    "content": "if (typeof process !== \"undefined\") {\n    require(\"amd-loader\");\n}\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar assert = require(\"assert\");\nvar highlighter = require(\"./static_highlight\");\nvar JavaScriptMode = require(\"../mode/javascript\").Mode;\nvar TextMode = require(\"../mode/text\").Mode;\n\n// Execution ORDER: test.setUpSuite, setUp, testFn, tearDown, test.tearDownSuite\nmodule.exports = {\n    timeout: 10000,\n\n    \"test loading in node\": function(next) {\n        assert.equal(typeof window, \"undefined\");\n        require(\"../ace\");\n        next();\n    },\n\n    \"test simple snippet\": function(next) {\n        var theme = require(\"../theme/tomorrow\");\n        var snippet = [\n            \"/** this is a function\",\n            \"*\",\n            \"*/\",\n            \"function hello (a, b, c) {\",\n            \"    console.log(a * b + c + 'sup$');\",\n            \"}\"\n        ].join(\"\\n\");\n        var mode = new JavaScriptMode();\n\n        var result = highlighter.render(snippet, mode, theme);\n        assert.equal(result.html, \"<div class='ace-tomorrow'><div class='ace_static_highlight ace_show_gutter' style='counter-reset:ace_line 0'>\" \n            + \"<div class='ace_line'><span class='ace_gutter ace_gutter-cell' unselectable='on'></span><span class='ace_comment ace_doc'>/** this is a function</span>\\n</div>\"\n            + \"<div class='ace_line'><span class='ace_gutter ace_gutter-cell' unselectable='on'></span><span class='ace_comment ace_doc'>*</span>\\n</div>\"\n            + \"<div class='ace_line'><span class='ace_gutter ace_gutter-cell' unselectable='on'></span><span class='ace_comment ace_doc'>*/</span>\\n</div>\"\n            + \"<div class='ace_line'><span class='ace_gutter ace_gutter-cell' unselectable='on'></span><span class='ace_storage ace_type'>function</span> <span class='ace_entity ace_name ace_function'>hello</span> <span class='ace_paren ace_lparen'>(</span><span class='ace_variable ace_parameter'>a</span><span class='ace_punctuation ace_operator'>, </span><span class='ace_variable ace_parameter'>b</span><span class='ace_punctuation ace_operator'>, </span><span class='ace_variable ace_parameter'>c</span><span class='ace_paren ace_rparen'>)</span> <span class='ace_paren ace_lparen'>{</span>\\n</div>\"\n            + \"<div class='ace_line'><span class='ace_gutter ace_gutter-cell' unselectable='on'></span>    <span class='ace_storage ace_type'>console</span><span class='ace_punctuation ace_operator'>.</span><span class='ace_support ace_function ace_firebug'>log</span><span class='ace_paren ace_lparen'>(</span><span class='ace_identifier'>a</span> <span class='ace_keyword ace_operator'>*</span> <span class='ace_identifier'>b</span> <span class='ace_keyword ace_operator'>+</span> <span class='ace_identifier'>c</span> <span class='ace_keyword ace_operator'>+</span> <span class='ace_string'>'sup$'</span><span class='ace_paren ace_rparen'>)</span><span class='ace_punctuation ace_operator'>;</span>\\n</div>\"\n            + \"<div class='ace_line'><span class='ace_gutter ace_gutter-cell' unselectable='on'></span><span class='ace_paren ace_rparen'>}</span>\\n</div>\"\n            + \"</div></div>\");\n        assert.ok(!!result.css);\n        next();\n    },\n\n    \"test css from theme is used\": function(next) {\n        var theme = require(\"../theme/tomorrow\");\n        var snippet = [\n            \"/** this is a function\",\n            \"*\",\n            \"*/\",\n            \"function hello (a, b, c) {\",\n            \"    console.log(a * b + c + 'sup?');\",\n            \"}\"\n        ].join(\"\\n\");\n        var mode = new JavaScriptMode();\n\n        var result = highlighter.render(snippet, mode, theme);\n\n        assert.ok(result.css.indexOf(theme.cssText) !== -1);\n\n        next();\n    },\n\n    \"test theme classname should be in output html\": function(next) {\n        var theme = require(\"../theme/tomorrow\");\n        var snippet = [\n            \"/** this is a function\",\n            \"*\",\n            \"*/\",\n            \"function hello (a, b, c) {\",\n            \"    console.log(a * b + c + 'sup?');\",\n            \"}\"\n        ].join(\"\\n\");\n        var mode = new JavaScriptMode();\n\n        var result = highlighter.render(snippet, mode, theme);\n        assert.equal(!!result.html.match(/<div class='ace-tomorrow'>/), true);\n\n        next();\n    },\n    \n    \"test js string replace specials\": function(next) {\n        var theme = require(\"../theme/tomorrow\");\n        var snippet = \"$'$1$2$$$&\";\n        var mode = new TextMode();\n\n        var result = highlighter.render(snippet, mode, theme);\n        assert.ok(result.html.indexOf(snippet) != -1);\n\n        next();\n    }\n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main) {\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n}\n"
  },
  {
    "path": "lib/ace/ext/statusbar.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n/** simple statusbar **/\nvar dom = require(\"ace/lib/dom\");\nvar lang = require(\"ace/lib/lang\");\n\nvar StatusBar = function(editor, parentNode) {\n    this.element = dom.createElement(\"div\");\n    this.element.className = \"ace_status-indicator\";\n    this.element.style.cssText = \"display: inline-block;\";\n    parentNode.appendChild(this.element);\n\n    var statusUpdate = lang.delayedCall(function(){\n        this.updateStatus(editor);\n    }.bind(this)).schedule.bind(null, 100);\n    \n    editor.on(\"changeStatus\", statusUpdate);\n    editor.on(\"changeSelection\", statusUpdate);\n    editor.on(\"keyboardActivity\", statusUpdate);\n};\n\n(function(){\n    this.updateStatus = function(editor) {\n        var status = [];\n        function add(str, separator) {\n            str && status.push(str, separator || \"|\");\n        }\n\n        add(editor.keyBinding.getStatusText(editor));\n        if (editor.commands.recording)\n            add(\"REC\");\n        \n        var sel = editor.selection;\n        var c = sel.lead;\n        \n        if (!sel.isEmpty()) {\n            var r = editor.getSelectionRange();\n            add(\"(\" + (r.end.row - r.start.row) + \":\"  +(r.end.column - r.start.column) + \")\", \" \");\n        }\n        add(c.row + \":\" + c.column, \" \");        \n        if (sel.rangeCount)\n            add(\"[\" + sel.rangeCount + \"]\", \" \");\n        status.pop();\n        this.element.textContent = status.join(\"\");\n    };\n}).call(StatusBar.prototype);\n\nexports.StatusBar = StatusBar;\n\n});"
  },
  {
    "path": "lib/ace/ext/textarea.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar event = require(\"../lib/event\");\nvar UA = require(\"../lib/useragent\");\nvar net = require(\"../lib/net\");\nvar ace = require(\"../ace\");\n\nrequire(\"../theme/textmate\");\n\nmodule.exports = exports = ace;\n\n/*\n * Returns the CSS property of element.\n *   1) If the CSS property is on the style object of the element, use it, OR\n *   2) Compute the CSS property\n *\n * If the property can't get computed, is 'auto' or 'intrinsic', the former\n * calculated property is used (this can happen in cases where the textarea\n * is hidden and has no dimension styles).\n */\nvar getCSSProperty = function(element, container, property) {\n    var ret = element.style[property];\n\n    if (!ret) {\n        if (window.getComputedStyle) {\n            ret = window.getComputedStyle(element, '').getPropertyValue(property);\n        } else {\n            ret = element.currentStyle[property];\n        }\n    }\n\n    if (!ret || ret == 'auto' || ret == 'intrinsic') {\n        ret = container.style[property];\n    }\n    return ret;\n};\n\nfunction applyStyles(elm, styles) {\n    for (var style in styles) {\n        elm.style[style] = styles[style];\n    }\n}\n\nfunction setupContainer(element, getValue) {\n    if (element.type != 'textarea') {\n        throw new Error(\"Textarea required!\");\n    }\n\n    var parentNode = element.parentNode;\n\n    // This will hold the editor.\n    var container = document.createElement('div');\n\n    // To put Ace in the place of the textarea, we have to copy a few of the\n    // textarea's style attributes to the div container.\n    //\n    // The problem is that the properties have to get computed (they might be\n    // defined by a CSS file on the page - you can't access such rules that\n    // apply to an element via elm.style). Computed properties are converted to\n    // pixels although the dimension might be given as percentage. When the\n    // window resizes, the dimensions defined by percentages changes, so the\n    // properties have to get recomputed to get the new/true pixels.\n    var resizeEvent = function() {\n        var style = 'position:relative;';\n        [\n            'margin-top', 'margin-left', 'margin-right', 'margin-bottom'\n        ].forEach(function(item) {\n            style += item + ':' +\n                        getCSSProperty(element, container, item) + ';';\n        });\n\n        // Calculating the width/height of the textarea is somewhat tricky. To\n        // do it right, you have to include the paddings to the sides as well\n        // (eg. width = width + padding-left, -right).  This works well, as\n        // long as the width of the element is not set or given in pixels. In\n        // this case and after the textarea is hidden, getCSSProperty(element,\n        // container, 'width') will still return pixel value. If the element\n        // has realtiv dimensions (e.g. width='95<percent>')\n        // getCSSProperty(...) will return pixel values only as long as the\n        // textarea is visible. After it is hidden getCSSProperty will return\n        // the relative dimensions as they are set on the element (in the case\n        // of width, 95<percent>).\n        // Making the sum of pixel vaules (e.g. padding) and realtive values\n        // (e.g. <percent>) is not possible. As such the padding styles are\n        // ignored.\n\n        // The complete width is the width of the textarea + the padding\n        // to the left and right.\n        var width = getCSSProperty(element, container, 'width') || (element.clientWidth + \"px\");\n        var height = getCSSProperty(element, container, 'height')  || (element.clientHeight + \"px\");\n        style += 'height:' + height + ';width:' + width + ';';\n\n        // Set the display property to 'inline-block'.\n        style += 'display:inline-block;';\n        container.setAttribute('style', style);\n    };\n    event.addListener(window, 'resize', resizeEvent);\n\n    // Call the resizeEvent once, so that the size of the container is\n    // calculated.\n    resizeEvent();\n\n    // Insert the div container after the element.\n    parentNode.insertBefore(container, element.nextSibling);\n\n    // Override the forms onsubmit function. Set the innerHTML and value\n    // of the textarea before submitting.\n    while (parentNode !== document) {\n        if (parentNode.tagName.toUpperCase() === 'FORM') {\n            var oldSumit = parentNode.onsubmit;\n            // Override the onsubmit function of the form.\n            parentNode.onsubmit = function(evt) {\n                element.value = getValue();\n                // If there is a onsubmit function already, then call\n                // it with the current context and pass the event.\n                if (oldSumit) {\n                    oldSumit.call(this, evt);\n                }\n            };\n            break;\n        }\n        parentNode = parentNode.parentNode;\n    }\n    return container;\n}\n\nexports.transformTextarea = function(element, options) {\n    var session;\n    var container = setupContainer(element, function() {\n        return session.getValue();\n    });\n\n    // Hide the element.\n    element.style.display = 'none';\n    container.style.background = 'white';\n\n    //\n    var editorDiv = document.createElement(\"div\");\n    applyStyles(editorDiv, {\n        top: \"0px\",\n        left: \"0px\",\n        right: \"0px\",\n        bottom: \"0px\",\n        border: \"1px solid gray\",\n        position: \"absolute\"\n    });\n    container.appendChild(editorDiv);\n\n    var settingOpener = document.createElement(\"div\");\n    applyStyles(settingOpener, {\n        position: \"absolute\",\n        right: \"0px\",\n        bottom: \"0px\",\n        background: \"red\",\n        cursor: \"nw-resize\",\n        borderStyle: \"solid\",\n        borderWidth: \"9px 8px 10px 9px\",\n        width: \"2px\",\n        borderColor: \"lightblue gray gray lightblue\",\n        zIndex: 101\n    });\n\n    var settingDiv = document.createElement(\"div\");\n    var settingDivStyles = {\n        top: \"0px\",\n        left: \"20%\",\n        right: \"0px\",\n        bottom: \"0px\",\n        position: \"absolute\",\n        padding: \"5px\",\n        zIndex: 100,\n        color: \"white\",\n        display: \"none\",\n        overflow: \"auto\",\n        fontSize: \"14px\",\n        boxShadow: \"-5px 2px 3px gray\"\n    };\n    if (!UA.isOldIE) {\n        settingDivStyles.backgroundColor = \"rgba(0, 0, 0, 0.6)\";\n    } else {\n        settingDivStyles.backgroundColor = \"#333\";\n    }\n\n    applyStyles(settingDiv, settingDivStyles);\n    container.appendChild(settingDiv);\n\n    options = options || exports.defaultOptions;\n    // Power up ace on the textarea:\n    var editor = ace.edit(editorDiv);\n    session = editor.getSession();\n\n    session.setValue(element.value || element.innerHTML);\n    editor.focus();\n\n    // Add the settingPanel opener to the editor's div.\n    container.appendChild(settingOpener);\n\n    // Create the API.\n    setupApi(editor, editorDiv, settingDiv, ace, options);\n\n    // Create the setting's panel.\n    setupSettingPanel(settingDiv, settingOpener, editor);\n\n    var state = \"\";\n    event.addListener(settingOpener, \"mousemove\", function(e) {\n        var rect = this.getBoundingClientRect();\n        var x = e.clientX - rect.left, y = e.clientY - rect.top;\n        if (x + y < (rect.width + rect.height)/2) {\n            this.style.cursor = \"pointer\";\n            state = \"toggle\";\n        } else {\n            state = \"resize\";\n            this.style.cursor = \"nw-resize\";\n        }\n    });\n\n    event.addListener(settingOpener, \"mousedown\", function(e) {\n        if (state == \"toggle\") {\n            editor.setDisplaySettings();\n            return;\n        }\n        container.style.zIndex = 100000;\n        var rect = container.getBoundingClientRect();\n        var startX = rect.width  + rect.left - e.clientX;\n        var startY = rect.height  + rect.top - e.clientY;\n        event.capture(settingOpener, function(e) {\n            container.style.width = e.clientX - rect.left + startX + \"px\";\n            container.style.height = e.clientY - rect.top + startY + \"px\";\n            editor.resize();\n        }, function() {});\n    });\n\n    return editor;\n};\n\nfunction load(url, module, callback) {\n    net.loadScript(url, function() {\n        require([module], callback);\n    });\n}\n\nfunction setupApi(editor, editorDiv, settingDiv, ace, options) {\n    var session = editor.getSession();\n    var renderer = editor.renderer;\n\n    function toBool(value) {\n        return value === \"true\" || value == true;\n    }\n\n    editor.setDisplaySettings = function(display) {\n        if (display == null)\n            display = settingDiv.style.display == \"none\";\n        if (display) {\n            settingDiv.style.display = \"block\";\n            settingDiv.hideButton.focus();\n            editor.on(\"focus\", function onFocus() {\n                editor.removeListener(\"focus\", onFocus);\n                settingDiv.style.display = \"none\";\n            });\n        } else {\n            editor.focus();\n        }\n    };\n\n    editor.$setOption = editor.setOption;\n    editor.$getOption = editor.getOption;\n    editor.setOption = function(key, value) {\n        switch (key) {\n            case \"mode\":\n                editor.$setOption(\"mode\", \"ace/mode/\" + value);\n            break;\n            case \"theme\":\n                editor.$setOption(\"theme\", \"ace/theme/\" + value);\n            break;\n            case \"keybindings\":\n                switch (value) {\n                    case \"vim\":\n                        editor.setKeyboardHandler(\"ace/keyboard/vim\");\n                        break;\n                    case \"emacs\":\n                        editor.setKeyboardHandler(\"ace/keyboard/emacs\");\n                        break;\n                    default:\n                        editor.setKeyboardHandler(null);\n                }\n            break;\n\n            case \"softWrap\":\n            case \"fontSize\":\n                editor.$setOption(key, value);\n            break;\n            \n            default:\n                editor.$setOption(key, toBool(value));\n        }\n    };\n\n    editor.getOption = function(key) {\n        switch (key) {\n            case \"mode\":\n                return editor.$getOption(\"mode\").substr(\"ace/mode/\".length);\n            break;\n\n            case \"theme\":\n                return editor.$getOption(\"theme\").substr(\"ace/theme/\".length);\n            break;\n\n            case \"keybindings\":\n                var value = editor.getKeyboardHandler();\n                switch (value && value.$id) {\n                    case \"ace/keyboard/vim\":\n                        return \"vim\";\n                    case \"ace/keyboard/emacs\":\n                        return \"emacs\";\n                    default:\n                        return \"ace\";\n                }\n            break;\n\n            default:\n                return editor.$getOption(key);\n        }\n    };\n\n    editor.setOptions(options);\n    return editor;\n}\n\nfunction setupSettingPanel(settingDiv, settingOpener, editor) {\n    var BOOL = null;\n\n    var desc = {\n        mode:            \"Mode:\",\n        wrap:            \"Soft Wrap:\",\n        theme:           \"Theme:\",\n        fontSize:        \"Font Size:\",\n        showGutter:      \"Display Gutter:\",\n        keybindings:     \"Keyboard\",\n        showPrintMargin: \"Show Print Margin:\",\n        useSoftTabs:     \"Use Soft Tabs:\",\n        showInvisibles:  \"Show Invisibles\"\n    };\n\n    var optionValues = {\n        mode: {\n            text:       \"Plain\",\n            javascript: \"JavaScript\",\n            xml:        \"XML\",\n            html:       \"HTML\",\n            css:        \"CSS\",\n            scss:       \"SCSS\",\n            python:     \"Python\",\n            php:        \"PHP\",\n            java:       \"Java\",\n            ruby:       \"Ruby\",\n            c_cpp:      \"C/C++\",\n            coffee:     \"CoffeeScript\",\n            json:       \"json\",\n            perl:       \"Perl\",\n            clojure:    \"Clojure\",\n            ocaml:      \"OCaml\",\n            csharp:     \"C#\",\n            haxe:       \"haXe\",\n            svg:        \"SVG\",\n            textile:    \"Textile\",\n            groovy:     \"Groovy\",\n            liquid:     \"Liquid\",\n            Scala:      \"Scala\"\n        },\n        theme: {\n            clouds:           \"Clouds\",\n            clouds_midnight:  \"Clouds Midnight\",\n            cobalt:           \"Cobalt\",\n            crimson_editor:   \"Crimson Editor\",\n            dawn:             \"Dawn\",\n            gob:              \"Green on Black\",\n            eclipse:          \"Eclipse\",\n            idle_fingers:     \"Idle Fingers\",\n            kr_theme:         \"Kr Theme\",\n            merbivore:        \"Merbivore\",\n            merbivore_soft:   \"Merbivore Soft\",\n            mono_industrial:  \"Mono Industrial\",\n            monokai:          \"Monokai\",\n            pastel_on_dark:   \"Pastel On Dark\",\n            solarized_dark:   \"Solarized Dark\",\n            solarized_light:  \"Solarized Light\",\n            textmate:         \"Textmate\",\n            twilight:         \"Twilight\",\n            vibrant_ink:      \"Vibrant Ink\"\n        },\n        showGutter: BOOL,\n        fontSize: {\n            \"10px\": \"10px\",\n            \"11px\": \"11px\",\n            \"12px\": \"12px\",\n            \"14px\": \"14px\",\n            \"16px\": \"16px\"\n        },\n        wrap: {\n            off:    \"Off\",\n            40:     \"40\",\n            80:     \"80\",\n            free:   \"Free\"\n        },\n        keybindings: {\n            ace: \"ace\",\n            vim: \"vim\",\n            emacs: \"emacs\"\n        },\n        showPrintMargin:    BOOL,\n        useSoftTabs:        BOOL,\n        showInvisibles:     BOOL\n    };\n\n    var table = [];\n    table.push(\"<table><tr><th>Setting</th><th>Value</th></tr>\");\n\n    function renderOption(builder, option, obj, cValue) {\n        if (!obj) {\n            builder.push(\n                \"<input type='checkbox' title='\", option, \"' \",\n                    cValue + \"\" == \"true\" ? \"checked='true'\" : \"\",\n               \"'></input>\"\n            );\n            return;\n        }\n        builder.push(\"<select title='\" + option + \"'>\");\n        for (var value in obj) {\n            builder.push(\"<option value='\" + value + \"' \");\n\n            if (cValue == value) {\n                builder.push(\" selected \");\n            }\n\n            builder.push(\">\",\n                obj[value],\n                \"</option>\");\n        }\n        builder.push(\"</select>\");\n    }\n\n    for (var option in exports.defaultOptions) {\n        table.push(\"<tr><td>\", desc[option], \"</td>\");\n        table.push(\"<td>\");\n        renderOption(table, option, optionValues[option], editor.getOption(option));\n        table.push(\"</td></tr>\");\n    }\n    table.push(\"</table>\");\n    settingDiv.innerHTML = table.join(\"\");\n\n    var onChange = function(e) {\n        var select = e.currentTarget;\n        editor.setOption(select.title, select.value);\n    };\n    var onClick = function(e) {\n        var cb = e.currentTarget;\n        editor.setOption(cb.title, cb.checked);\n    };\n    var selects = settingDiv.getElementsByTagName(\"select\");\n    for (var i = 0; i < selects.length; i++)\n        selects[i].onchange = onChange;\n    var cbs = settingDiv.getElementsByTagName(\"input\");\n    for (var i = 0; i < cbs.length; i++)\n        cbs[i].onclick = onClick;\n\n\n    var button = document.createElement(\"input\");\n    button.type = \"button\";\n    button.value = \"Hide\";\n    event.addListener(button, \"click\", function() {\n        editor.setDisplaySettings(false);\n    });\n    settingDiv.appendChild(button);\n    settingDiv.hideButton = button;\n}\n\n// Default startup options.\nexports.defaultOptions = {\n    mode:               \"javascript\",\n    theme:              \"textmate\",\n    wrap:               \"off\",\n    fontSize:           \"12px\",\n    showGutter:         \"false\",\n    keybindings:        \"ace\",\n    showPrintMargin:    \"false\",\n    useSoftTabs:        \"true\",\n    showInvisibles:     \"false\"\n};\n\n});\n"
  },
  {
    "path": "lib/ace/ext/themelist.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2013 Matthew Christopher Kastor-Inare III, Atropa Inc. Intl\n * All rights reserved.\n *\n * Contributed to Ajax.org under the BSD license.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n\n/**\n * Generates a list of themes available when ace was built.\n * @fileOverview Generates a list of themes available when ace was built.\n * @author <a href=\"mailto:matthewkastor@gmail.com\">\n *  Matthew Christopher Kastor-Inare III </a><br />\n *  ☭ Hial Atropa!! ☭\n */\n\ndefine(function(require, exports, module) {\n\"use strict\";\nrequire(\"ace/lib/fixoldbrowsers\");\n\nvar themeData = [\n    [\"Chrome\"         ],\n    [\"Clouds\"         ],\n    [\"Crimson Editor\" ],\n    [\"Dawn\"           ],\n    [\"Dreamweaver\"    ],\n    [\"Eclipse\"        ],\n    [\"GitHub\"         ],\n    [\"IPlastic\"       ],\n    [\"Solarized Light\"],\n    [\"TextMate\"       ],\n    [\"Tomorrow\"       ],\n    [\"XCode\"          ],\n    [\"Kuroir\"],\n    [\"KatzenMilch\"],\n    [\"SQL Server\"           ,\"sqlserver\"               , \"light\"],\n    [\"Ambiance\"             ,\"ambiance\"                ,  \"dark\"],\n    [\"Chaos\"                ,\"chaos\"                   ,  \"dark\"],\n    [\"Clouds Midnight\"      ,\"clouds_midnight\"         ,  \"dark\"],\n    [\"Cobalt\"               ,\"cobalt\"                  ,  \"dark\"],\n    [\"Gruvbox\"              ,\"gruvbox\"                 ,  \"dark\"],\n    [\"Green on Black\"       ,\"gob\"                     ,  \"dark\"],\n    [\"idle Fingers\"         ,\"idle_fingers\"            ,  \"dark\"],\n    [\"krTheme\"              ,\"kr_theme\"                ,  \"dark\"],\n    [\"Merbivore\"            ,\"merbivore\"               ,  \"dark\"],\n    [\"Merbivore Soft\"       ,\"merbivore_soft\"          ,  \"dark\"],\n    [\"Mono Industrial\"      ,\"mono_industrial\"         ,  \"dark\"],\n    [\"Monokai\"              ,\"monokai\"                 ,  \"dark\"],\n    [\"Pastel on dark\"       ,\"pastel_on_dark\"          ,  \"dark\"],\n    [\"Solarized Dark\"       ,\"solarized_dark\"          ,  \"dark\"],\n    [\"Terminal\"             ,\"terminal\"                ,  \"dark\"],\n    [\"Tomorrow Night\"       ,\"tomorrow_night\"          ,  \"dark\"],\n    [\"Tomorrow Night Blue\"  ,\"tomorrow_night_blue\"     ,  \"dark\"],\n    [\"Tomorrow Night Bright\",\"tomorrow_night_bright\"   ,  \"dark\"],\n    [\"Tomorrow Night 80s\"   ,\"tomorrow_night_eighties\" ,  \"dark\"],\n    [\"Twilight\"             ,\"twilight\"                ,  \"dark\"],\n    [\"Vibrant Ink\"          ,\"vibrant_ink\"             ,  \"dark\"]\n];\n\n\nexports.themesByName = {};\n\n/**\n * An array containing information about available themes.\n */\nexports.themes = themeData.map(function(data) {\n    var name = data[1] || data[0].replace(/ /g, \"_\").toLowerCase();\n    var theme = {\n        caption: data[0],\n        theme: \"ace/theme/\" + name,\n        isDark: data[2] == \"dark\",\n        name: name\n    };\n    exports.themesByName[name] = theme;\n    return theme;\n});\n\n});\n\n"
  },
  {
    "path": "lib/ace/ext/whitespace.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar lang = require(\"../lib/lang\");\n\n// based on http://www.freehackers.org/Indent_Finder\nexports.$detectIndentation = function(lines, fallback) {\n    var stats = [];\n    var changes = [];\n    var tabIndents = 0;\n    var prevSpaces = 0;\n    var max = Math.min(lines.length, 1000);\n    for (var i = 0; i < max; i++) {\n        var line = lines[i];\n        // ignore empty and comment lines\n        if (!/^\\s*[^*+\\-\\s]/.test(line))\n            continue;\n\n        if (line[0] == \"\\t\") {\n            tabIndents++;\n            prevSpaces = -Number.MAX_VALUE;\n        } else {\n            var spaces = line.match(/^ */)[0].length;\n            if (spaces && line[spaces] != \"\\t\") {\n                var diff = spaces - prevSpaces;\n                if (diff > 0 && !(prevSpaces%diff) && !(spaces%diff))\n                    changes[diff] = (changes[diff] || 0) + 1;\n    \n                stats[spaces] = (stats[spaces] || 0) + 1;\n            }\n            prevSpaces = spaces;\n        }\n        // ignore lines ending with backslash\n        while (i < max && line[line.length - 1] == \"\\\\\")\n            line = lines[i++];\n    }\n    \n    function getScore(indent) {\n        var score = 0;\n        for (var i = indent; i < stats.length; i += indent)\n            score += stats[i] || 0;\n        return score;\n    }\n\n    var changesTotal = changes.reduce(function(a,b){return a+b;}, 0);\n\n    var first = {score: 0, length: 0};\n    var spaceIndents = 0;\n    for (var i = 1; i < 12; i++) {\n        var score = getScore(i);\n        if (i == 1) {\n            spaceIndents = score;\n            score = stats[1] ? 0.9 : 0.8;\n            if (!stats.length)\n                score = 0;\n        } else\n            score /= spaceIndents;\n\n        if (changes[i])\n            score += changes[i] / changesTotal;\n\n        if (score > first.score)\n            first = {score: score, length: i};\n    }\n\n    if (first.score && first.score > 1.4)\n        var tabLength = first.length;\n\n    if (tabIndents > spaceIndents + 1) {\n        if (tabLength == 1 || spaceIndents < tabIndents / 4 || first.score < 1.8)\n            tabLength = undefined;\n        return {ch: \"\\t\", length: tabLength};\n    }\n    if (spaceIndents > tabIndents + 1)\n        return {ch: \" \", length: tabLength};\n};\n\nexports.detectIndentation = function(session) {\n    var lines = session.getLines(0, 1000);\n    var indent = exports.$detectIndentation(lines) || {};\n\n    if (indent.ch)\n        session.setUseSoftTabs(indent.ch == \" \");\n\n    if (indent.length)\n        session.setTabSize(indent.length);\n    return indent;\n};\n\n/**\n * EditSession session\n * options.trimEmpty trim empty lines too\n * options.keepCursorPosition do not trim whitespace before the cursor\n */\nexports.trimTrailingSpace = function(session, options) {\n    var doc = session.getDocument();\n    var lines = doc.getAllLines();\n    \n    var min = options && options.trimEmpty ? -1 : 0;\n    var cursors = [], ci = -1;\n    if (options && options.keepCursorPosition) {\n        if (session.selection.rangeCount) {\n            session.selection.rangeList.ranges.forEach(function(x, i, ranges) {\n               var next = ranges[i + 1];\n               if (next && next.cursor.row == x.cursor.row)\n                  return;\n              cursors.push(x.cursor);\n            });\n        } else {\n            cursors.push(session.selection.getCursor());\n        }\n        ci = 0;\n    }\n    var cursorRow = cursors[ci] && cursors[ci].row;\n\n    for (var i = 0, l=lines.length; i < l; i++) {\n        var line = lines[i];\n        var index = line.search(/\\s+$/);\n\n        if (i == cursorRow) {\n            if (index < cursors[ci].column && index > min)\n               index = cursors[ci].column;\n            ci++;\n            cursorRow = cursors[ci] ? cursors[ci].row : -1;\n        }\n\n        if (index > min)\n            doc.removeInLine(i, index, line.length);\n    }\n};\n\nexports.convertIndentation = function(session, ch, len) {\n    var oldCh = session.getTabString()[0];\n    var oldLen = session.getTabSize();\n    if (!len) len = oldLen;\n    if (!ch) ch = oldCh;\n\n    var tab = ch == \"\\t\" ? ch: lang.stringRepeat(ch, len);\n\n    var doc = session.doc;\n    var lines = doc.getAllLines();\n\n    var cache = {};\n    var spaceCache = {};\n    for (var i = 0, l=lines.length; i < l; i++) {\n        var line = lines[i];\n        var match = line.match(/^\\s*/)[0];\n        if (match) {\n            var w = session.$getStringScreenWidth(match)[0];\n            var tabCount = Math.floor(w/oldLen);\n            var reminder = w%oldLen;\n            var toInsert = cache[tabCount] || (cache[tabCount] = lang.stringRepeat(tab, tabCount));\n            toInsert += spaceCache[reminder] || (spaceCache[reminder] = lang.stringRepeat(\" \", reminder));\n\n            if (toInsert != match) {\n                doc.removeInLine(i, 0, match.length);\n                doc.insertInLine({row: i, column: 0}, toInsert);\n            }\n        }\n    }\n    session.setTabSize(len);\n    session.setUseSoftTabs(ch == \" \");\n};\n\nexports.$parseStringArg = function(text) {\n    var indent = {};\n    if (/t/.test(text))\n        indent.ch = \"\\t\";\n    else if (/s/.test(text))\n        indent.ch = \" \";\n    var m = text.match(/\\d+/);\n    if (m)\n        indent.length = parseInt(m[0], 10);\n    return indent;\n};\n\nexports.$parseArg = function(arg) {\n    if (!arg)\n        return {};\n    if (typeof arg == \"string\")\n        return exports.$parseStringArg(arg);\n    if (typeof arg.text == \"string\")\n        return exports.$parseStringArg(arg.text);\n    return arg;\n};\n\nexports.commands = [{\n    name: \"detectIndentation\",\n    exec: function(editor) {\n        exports.detectIndentation(editor.session);\n        // todo show message?\n    }\n}, {\n    name: \"trimTrailingSpace\",\n    exec: function(editor) {\n        exports.trimTrailingSpace(editor.session);\n    }\n}, {\n    name: \"convertIndentation\",\n    exec: function(editor, arg) {\n        var indent = exports.$parseArg(arg);\n        exports.convertIndentation(editor.session, indent.ch, indent.length);\n    }\n}, {\n    name: \"setIndentation\",\n    exec: function(editor, arg) {\n        var indent = exports.$parseArg(arg);\n        indent.length && editor.session.setTabSize(indent.length);\n        indent.ch && editor.session.setUseSoftTabs(indent.ch == \" \");\n    }\n}];\n\n});\n"
  },
  {
    "path": "lib/ace/ext/whitespace_test.js",
    "content": "if (typeof process !== \"undefined\") {\n    require(\"amd-loader\");\n}\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nrequire(\"../multi_select\");\nvar assert = require(\"assert\");\nvar EditSession = require(\"../edit_session\").EditSession;\nvar UndoManager = require(\"../undomanager\").UndoManager;\nvar whitespace = require(\"./whitespace\");\n\n// Execution ORDER: test.setUpSuite, setUp, testFn, tearDown, test.tearDownSuite\nmodule.exports = {\n    timeout: 10000,\n\n    \"test tab detection\": function(next) {\n        var s = new EditSession([\n            \"define({\",\n            \"\\tfoo:1,\",\n            \"\\tbar:2,\",\n            \"\\tbaz:{,\",\n            \"\\t\\tx:3\",\n            \"\\t}\",\n            \"})\"\n        ]);\n         \n        var indent = whitespace.$detectIndentation(s.doc.$lines);\n        assert.equal(indent.ch, \"\\t\");\n        assert.equal(indent.length, undefined);\n        \n        s.insert({row: 0, column: 0}, \"  \");\n        indent = whitespace.$detectIndentation(s.doc.$lines);\n        assert.equal(indent.ch, \"\\t\");\n        assert.equal(indent.length, undefined);\n        s.doc.removeInLine(0, 0, 2);\n        \n        s.insert({row: 0, column: 0}, \"x\\n    y\\n        z\\n\");\n        indent = whitespace.$detectIndentation(s.doc.$lines);\n        assert.equal(indent.ch, \"\\t\");\n        assert.equal(indent.length, 4);\n        \n        s.setValue(\"\");\n        indent = whitespace.$detectIndentation(s.doc.$lines);\n        assert.ok(!indent);\n        \n        next();\n    },\n\n    \"test empty session\": function(next) {\n        var s = new EditSession([\n            \"define({\",\n            \"foo:1,\",\n            \"})\"\n        ]);\n        var indent = whitespace.$detectIndentation(s.doc.$lines);\n        assert.ok(!indent);\n        s.insert({row: 1, column: 0}, \"    x\\n    \");\n        \n        indent = whitespace.$detectIndentation(s.doc.$lines);\n        assert.equal(indent.ch, \" \");\n        assert.equal(indent.length, 4);\n        \n        next();\n    },\n    \n    \"!test one line\": function(next) {\n        var s = new EditSession([\n            \"define({\",\n            \"    foo:1,\",\n            \"})\"\n        ]);\n        var indent = whitespace.$detectIndentation(s.doc.$lines);\n        assert.equal(indent.ch, \" \");\n        assert.equal(indent.length, 4);\n        \n        next();\n    },\n    \n    \"test 1 width indents\": function(next) {\n        var s = new EditSession([\n            \"define({\",\n            \"    foo:1,\",\n            \"})\",\n            \"define({\",\n            \"    bar:1,\",\n            \"})\",\n            \"     t\",\n            \"      t\",\n            \"     t\",\n            \"      t\",\n            \"     t\",\n            \"      t\",\n            \"     t\",\n            \"      t\"\n        ]);\n        var indent = whitespace.$detectIndentation(s.doc.$lines);\n        // assert.equal(indent.ch, \" \");\n        // assert.equal(indent.length, 4);\n        \n        s = new EditSession([\n            \"{\",\n            \" foo:1,\",\n            \" bar: {\",\n            \"  baz:2\",\n            \" }\",\n            \"}\"\n        ]);\n        indent = whitespace.$detectIndentation(s.doc.$lines);\n        assert.equal(indent.ch, \" \");\n        assert.equal(indent.length, 1);\n        \n        next();\n    },\n\n    \"test trimTrailingSpace\": function(next) {\n        var session = new EditSession([\n            \"a\",\n            \"\\t b \\t\",\n            \"    \",\n            \"\\t\",\n            \"\\t\\tx\\t\\t\",\n            \" \",\n            \"   \"\n        ]);\n        session.setUndoManager(new UndoManager());\n        \n        function testOne(value, options) {\n            console.log(JSON.stringify(session.getValue()));\n\n            whitespace.trimTrailingSpace(session, options);\n            assert.equal(value, session.getValue());\n            session.markUndoGroup();\n            session.getUndoManager().undo();\n        }\n        \n        testOne(\"a\\n\\t b\\n    \\n\\t\\n\\t\\tx\\n \\n   \");\n        \n        testOne(\"a\\n\\t b\\n\\n\\n\\t\\tx\\n\\n\", {\n            trimEmpty: true\n        });\n        \n        session.selection.fromJSON([{\n            start: {row:2,column:3},\n            end: {row:4,column:4}\n        }]);\n        testOne(\"a\\n\\t b\\n\\n\\n\\t\\tx\\t\\n\\n\", {\n            keepCursorPosition: true,\n            trimEmpty: true\n        });\n        \n        session.selection.fromJSON([{\n            start: {row:2,column:3},\n            end: {row:4,column:4},\n            isBackwards: true\n        }]);\n        testOne(\"a\\n\\t b\\n   \\n\\n\\t\\tx\\n\\n\", {\n            keepCursorPosition: true,\n            trimEmpty: true\n        });\n        \n        session.selection.$initRangeList();\n        session.selection.fromJSON([{\n            start: {row:2, column:3},\n            end: {row:2,column:3}\n        }, {\n            start: {row:1, column:1},\n            end: {row:1, column:1}\n        }, {\n            start: {row:2,column:2},\n            end: {row:2,column:2}\n        }, {\n            start: {row:0,column:5},\n            end: {row:0,column:5},\n            isBackwards:false\n        }, {\n            start: {row:6,column:1},\n            end: {row:6,column:1},\n            isBackwards:false\n        }]);\n        testOne(\"a\\n\\t b\\n   \\n\\n\\t\\tx\\n\\n \", {\n            trimEmpty: true,\n            keepCursorPosition: true\n        });\n        \n        session.setValue(\"some text\");\n        session.selection.fromJSON([{\n            start: {row:0,column:4},\n            end: {row:0,column:4}\n        }]);\n        testOne(\"some text\", {\n            keepCursorPosition: true,\n            trimEmpty: true\n        });\n        \n        next();\n    }\n\n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main) {\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n}\n"
  },
  {
    "path": "lib/ace/incremental_search.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar Range = require(\"./range\").Range;\nvar Search = require(\"./search\").Search;\nvar SearchHighlight = require(\"./search_highlight\").SearchHighlight;\nvar iSearchCommandModule = require(\"./commands/incremental_search_commands\");\nvar ISearchKbd = iSearchCommandModule.IncrementalSearchKeyboardHandler;\n\n/**\n * @class IncrementalSearch\n *\n * Implements immediate searching while the user is typing. When incremental\n * search is activated, keystrokes into the editor will be used for composing\n * a search term. Immediately after every keystroke the search is updated:\n * - so-far-matching characters are highlighted\n * - the cursor is moved to the next match\n *\n **/\n\n\n/**\n *\n *\n * Creates a new `IncrementalSearch` object.\n *\n * @constructor\n **/\nfunction IncrementalSearch() {\n    this.$options = {wrap: false, skipCurrent: false};\n    this.$keyboardHandler = new ISearchKbd(this);\n}\n\noop.inherits(IncrementalSearch, Search);\n\n// regexp handling\n\nfunction isRegExp(obj) {\n    return obj instanceof RegExp;\n}\n\nfunction regExpToObject(re) {\n    var string = String(re),\n        start = string.indexOf('/'),\n        flagStart = string.lastIndexOf('/');\n    return {\n        expression: string.slice(start+1, flagStart),\n        flags: string.slice(flagStart+1)\n    };\n}\n\nfunction stringToRegExp(string, flags) {\n    try {\n        return new RegExp(string, flags);\n    } catch (e) { return string; }\n}\n\nfunction objectToRegExp(obj) {\n    return stringToRegExp(obj.expression, obj.flags);\n}\n\n// iSearch class\n\n(function() {\n\n    this.activate = function(ed, backwards) {\n        this.$editor = ed;\n        this.$startPos = this.$currentPos = ed.getCursorPosition();\n        this.$options.needle = '';\n        this.$options.backwards = backwards;\n        ed.keyBinding.addKeyboardHandler(this.$keyboardHandler);\n        // we need to completely intercept paste, just registering an event handler does not work\n        this.$originalEditorOnPaste = ed.onPaste; ed.onPaste = this.onPaste.bind(this);\n        this.$mousedownHandler = ed.addEventListener('mousedown', this.onMouseDown.bind(this));\n        this.selectionFix(ed);\n        this.statusMessage(true);\n    };\n\n    this.deactivate = function(reset) {\n        this.cancelSearch(reset);\n        var ed = this.$editor;\n        ed.keyBinding.removeKeyboardHandler(this.$keyboardHandler);\n        if (this.$mousedownHandler) {\n            ed.removeEventListener('mousedown', this.$mousedownHandler);\n            delete this.$mousedownHandler;\n        }\n        ed.onPaste = this.$originalEditorOnPaste;\n        this.message('');\n    };\n\n    this.selectionFix = function(editor) {\n        // Fix selection bug: When clicked inside the editor\n        // editor.selection.$isEmpty is false even if the mouse click did not\n        // open a selection. This is interpreted by the move commands to\n        // extend the selection. To only extend the selection when there is\n        // one, we clear it here\n        if (editor.selection.isEmpty() && !editor.session.$emacsMark) {\n            editor.clearSelection();\n        }\n    };\n\n    this.highlight = function(regexp) {\n        var sess = this.$editor.session,\n            hl = sess.$isearchHighlight = sess.$isearchHighlight || sess.addDynamicMarker(\n                new SearchHighlight(null, \"ace_isearch-result\", \"text\"));\n        hl.setRegexp(regexp);\n        sess._emit(\"changeBackMarker\"); // force highlight layer redraw\n    };\n\n    this.cancelSearch = function(reset) {\n        var e = this.$editor;\n        this.$prevNeedle = this.$options.needle;\n        this.$options.needle = '';\n        if (reset) {\n            e.moveCursorToPosition(this.$startPos);\n            this.$currentPos = this.$startPos;\n        } else {\n            e.pushEmacsMark && e.pushEmacsMark(this.$startPos, false);\n        }\n        this.highlight(null);\n        return Range.fromPoints(this.$currentPos, this.$currentPos);\n    };\n\n    this.highlightAndFindWithNeedle = function(moveToNext, needleUpdateFunc) {\n        if (!this.$editor) return null;\n        var options = this.$options;\n\n        // get search term\n        if (needleUpdateFunc) {\n            options.needle = needleUpdateFunc.call(this, options.needle || '') || '';\n        }\n        if (options.needle.length === 0) {\n            this.statusMessage(true);\n            return this.cancelSearch(true);\n        }\n\n        // try to find the next occurrence and enable  highlighting marker\n        options.start = this.$currentPos;\n        var session = this.$editor.session,\n            found = this.find(session),\n            shouldSelect = this.$editor.emacsMark ?\n                !!this.$editor.emacsMark() : !this.$editor.selection.isEmpty();\n        if (found) {\n            if (options.backwards) found = Range.fromPoints(found.end, found.start);\n            this.$editor.selection.setRange(Range.fromPoints(shouldSelect ? this.$startPos : found.end, found.end));\n            if (moveToNext) this.$currentPos = found.end;\n            // highlight after cursor move, so selection works properly\n            this.highlight(options.re);\n        }\n\n        this.statusMessage(found);\n\n        return found;\n    };\n\n    this.addString = function(s) {\n        return this.highlightAndFindWithNeedle(false, function(needle) {\n            if (!isRegExp(needle))\n              return needle + s;\n            var reObj = regExpToObject(needle);\n            reObj.expression += s;\n            return objectToRegExp(reObj);\n        });\n    };\n\n    this.removeChar = function(c) {\n        return this.highlightAndFindWithNeedle(false, function(needle) {\n            if (!isRegExp(needle))\n              return needle.substring(0, needle.length-1);\n            var reObj = regExpToObject(needle);\n            reObj.expression = reObj.expression.substring(0, reObj.expression.length-1);\n            return objectToRegExp(reObj);\n        });\n    };\n\n    this.next = function(options) {\n        // try to find the next occurrence of whatever we have searched for\n        // earlier.\n        // options = {[backwards: BOOL], [useCurrentOrPrevSearch: BOOL]}\n        options = options || {};\n        this.$options.backwards = !!options.backwards;\n        this.$currentPos = this.$editor.getCursorPosition();\n        return this.highlightAndFindWithNeedle(true, function(needle) {\n            return options.useCurrentOrPrevSearch && needle.length === 0 ?\n                this.$prevNeedle || '' : needle;\n        });\n    };\n\n    this.onMouseDown = function(evt) {\n        // when mouse interaction happens then we quit incremental search\n        this.deactivate();\n        return true;\n    };\n\n    this.onPaste = function(text) {\n        this.addString(text);\n    };\n\n    this.convertNeedleToRegExp = function() {\n        return this.highlightAndFindWithNeedle(false, function(needle) {\n            return isRegExp(needle) ? needle : stringToRegExp(needle, 'ig');\n        });\n    };\n\n    this.convertNeedleToString = function() {\n        return this.highlightAndFindWithNeedle(false, function(needle) {\n            return isRegExp(needle) ? regExpToObject(needle).expression : needle;\n        });\n    };\n\n    this.statusMessage = function(found) {\n        var options = this.$options, msg = '';\n        msg += options.backwards ? 'reverse-' : '';\n        msg += 'isearch: ' + options.needle;\n        msg += found ? '' : ' (not found)';\n        this.message(msg);\n    };\n\n    this.message = function(msg) {\n        if (this.$editor.showCommandLine) {\n            this.$editor.showCommandLine(msg);\n            this.$editor.focus();\n        } else {\n            console.log(msg);\n        }\n    };\n\n}).call(IncrementalSearch.prototype);\n\n\nexports.IncrementalSearch = IncrementalSearch;\n\n\n/**\n *\n * Config settings for enabling/disabling [[IncrementalSearch `IncrementalSearch`]].\n *\n **/\n\nvar dom = require('./lib/dom');\ndom.importCssString && dom.importCssString(\"\\\n.ace_marker-layer .ace_isearch-result {\\\n  position: absolute;\\\n  z-index: 6;\\\n  -moz-box-sizing: border-box;\\\n  -webkit-box-sizing: border-box;\\\n  box-sizing: border-box;\\\n}\\\ndiv.ace_isearch-result {\\\n  border-radius: 4px;\\\n  background-color: rgba(255, 200, 0, 0.5);\\\n  box-shadow: 0 0 4px rgb(255, 200, 0);\\\n}\\\n.ace_dark div.ace_isearch-result {\\\n  background-color: rgb(100, 110, 160);\\\n  box-shadow: 0 0 4px rgb(80, 90, 140);\\\n}\", \"incremental-search-highlighting\");\n\n// support for default keyboard handler\nvar commands = require(\"./commands/command_manager\");\n(function() {\n    this.setupIncrementalSearch = function(editor, val) {\n        if (this.usesIncrementalSearch == val) return;\n        this.usesIncrementalSearch = val;\n        var iSearchCommands = iSearchCommandModule.iSearchStartCommands;\n        var method = val ? 'addCommands' : 'removeCommands';\n        this[method](iSearchCommands);\n    };\n}).call(commands.CommandManager.prototype);\n\n// incremental search config option\nvar Editor = require(\"./editor\").Editor;\nrequire(\"./config\").defineOptions(Editor.prototype, \"editor\", {\n    useIncrementalSearch: {\n        set: function(val) {\n            this.keyBinding.$handlers.forEach(function(handler) {\n                if (handler.setupIncrementalSearch) {\n                    handler.setupIncrementalSearch(this, val);\n                }\n            });\n            this._emit('incrementalSearchSettingChanged', {isEnabled: val});\n        }\n    }\n});\n\n});\n"
  },
  {
    "path": "lib/ace/incremental_search_test.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\nif (typeof process !== \"undefined\") {\n    require(\"amd-loader\");\n}\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar emacs = require('./keyboard/emacs');\nvar EditSession = require(\"./edit_session\").EditSession;\nvar Editor = require(\"./editor\").Editor;\nvar MockRenderer = require(\"./test/mockrenderer\").MockRenderer;\nvar Range = require(\"./range\").Range;\nvar MultiSelect = require(\"./multi_select\").MultiSelect;\nvar assert = require(\"./test/assertions\");\nvar IncrementalSearch = require(\"./incremental_search\").IncrementalSearch;\n\nrequire(\"./multi_select\");\n\nvar editor, iSearch;\nfunction testRanges(str, ranges) {\n    ranges = ranges || editor.selection.getAllRanges();\n    assert.equal(ranges + \"\", str + \"\");\n}\n\n// force \"rerender\"\nfunction callHighlighterUpdate() {\n    var session = editor.session,\n        ranges = [],\n        mockMarkerLayer = {\n            drawSingleLineMarker: function(_, markerRanges) {\n                ranges = ranges.concat(markerRanges);\n            }\n        };\n    session.$isearchHighlight.update([], mockMarkerLayer, session, {\n        firstRow: 0, lastRow: session.getRowLength()});\n    return ranges;\n}\n\nmodule.exports = {\n\n    name: \"ACE incremental_search.js\",\n\n    setUp: function() {\n        var session = new EditSession([\"abc123\", \"xyz124\"]);\n        editor = new Editor(new MockRenderer(), session);\n        new MultiSelect(editor);\n        iSearch = new IncrementalSearch();\n    },\n\n    \"test: keyboard handler setup\" : function() {\n        iSearch.activate(editor);\n        assert.equal(editor.getKeyboardHandler(), iSearch.$keyboardHandler);\n        iSearch.deactivate();\n        assert.notEqual(editor.getKeyboardHandler(), iSearch.$keyboardHandler);\n    },\n\n    \"test: isearch highlight setup\" : function() {\n        var sess = editor.session;\n        iSearch.activate(editor);\n        iSearch.highlight('foo');\n        var highl = sess.$isearchHighlight.id;\n        assert.ok(sess.$isearchHighlight, 'session has no isearch highlighter');\n        assert.equal(sess.getMarkers()[highl.id], highl.id, 'isearch highlight not in markers');\n        iSearch.deactivate();\n        iSearch.activate(editor);\n        iSearch.highlight('bar');\n        var highl2 = sess.$isearchHighlight.id;\n        assert.equal(highl2, highl, 'multiple isearch highlights');\n    },\n\n    \"test: find simple text incrementally\" : function() {\n        iSearch.activate(editor);\n        var range = iSearch.addString('1'), // \"1\"\n            highlightRanges = callHighlighterUpdate();\n        testRanges(\"Range: [0/3] -> [0/4]\", [range]);\n        testRanges(\"Range: [0/3] -> [0/4],Range: [1/3] -> [1/4]\", highlightRanges);\n\n        range = iSearch.addString('2'); // \"12\"\n        highlightRanges = callHighlighterUpdate();\n        testRanges(\"Range: [0/3] -> [0/5]\", [range]);\n        testRanges(\"Range: [0/3] -> [0/5],Range: [1/3] -> [1/5]\", highlightRanges);\n\n        range = iSearch.addString('3'); // \"123\"\n        highlightRanges = callHighlighterUpdate();\n        testRanges(\"Range: [0/3] -> [0/6]\", [range]);\n        testRanges(\"Range: [0/3] -> [0/6]\", highlightRanges);\n\n        range = iSearch.removeChar(); // \"12\"\n        highlightRanges = callHighlighterUpdate();\n        testRanges(\"Range: [0/3] -> [0/5]\", [range]);\n        testRanges(\"Range: [0/3] -> [0/5],Range: [1/3] -> [1/5]\", highlightRanges);\n    },\n\n    \"test: forward / backward\" : function() {\n        iSearch.activate(editor);\n        iSearch.addString('1'); iSearch.addString('2');\n        var range = iSearch.next();\n        testRanges(\"Range: [1/3] -> [1/5]\", [range]);\n\n        range = iSearch.next(); // nothing to find\n        testRanges(\"\", [range]);\n\n        range = iSearch.next({backwards: true}); // backwards\n        testRanges(\"Range: [1/5] -> [1/3]\", [range]);\n    },\n\n    \"test: cancelSearch\" : function() {\n        iSearch.activate(editor);\n        iSearch.addString('1'); iSearch.addString('2');\n        var range = iSearch.cancelSearch(true);\n        testRanges(\"Range: [0/0] -> [0/0]\", [range]);\n\n        iSearch.addString('1'); range = iSearch.addString('2');\n        testRanges(\"Range: [0/3] -> [0/5]\", [range]);\n    },\n\n    \"test: failing search keeps pos\" : function() {\n        iSearch.activate(editor);\n        iSearch.addString('1'); iSearch.addString('2');\n        var range = iSearch.addString('x');\n        testRanges(\"\", [range]);\n        assert.position(editor.getCursorPosition(), 0, 5);\n    },\n\n    \"test: backwards search\" : function() {\n        editor.moveCursorTo(1,0);\n        iSearch.activate(editor, true);\n        iSearch.addString('1'); var range = iSearch.addString('2');\n        testRanges(\"Range: [0/5] -> [0/3]\", [range]);\n        assert.position(editor.getCursorPosition(), 0, 3);\n    },\n\n    \"test: forwards then backwards, same result, reoriented range\" : function() {\n        iSearch.activate(editor);\n        iSearch.addString('1'); var range = iSearch.addString('2');\n        testRanges(\"Range: [0/3] -> [0/5]\", [range]);\n        assert.position(editor.getCursorPosition(), 0, 5);\n\n        range = iSearch.next({backwards: true});\n        testRanges(\"Range: [0/5] -> [0/3]\", [range]);\n        assert.position(editor.getCursorPosition(), 0, 3);\n    },\n\n    \"test: reuse prev search via option\" : function() {\n        iSearch.activate(editor);\n        iSearch.addString('1'); iSearch.addString('2');\n        assert.position(editor.getCursorPosition(), 0, 5);\n        iSearch.deactivate();\n\n        iSearch.activate(editor);\n        iSearch.next({backwards: false, useCurrentOrPrevSearch: true});\n        assert.position(editor.getCursorPosition(), 1, 5);\n    },\n\n    \"test: don't extend selection range if selection is empty\" : function() {\n        iSearch.activate(editor);\n        iSearch.addString('1'); iSearch.addString('2');\n        testRanges(\"Range: [0/5] -> [0/5]\", [editor.getSelectionRange()]);\n    },\n\n    \"test: extend selection range if selection exists\" : function() {\n        iSearch.activate(editor);\n        editor.selection.selectTo(0, 1);\n        iSearch.addString('1'); iSearch.addString('2');\n        testRanges(\"Range: [0/0] -> [0/5]\", [editor.getSelectionRange()]);\n    },\n\n    \"test: extend selection in emacs mark mode\" : function() {\n        var emacs = require('./keyboard/emacs');\n        editor.keyBinding.addKeyboardHandler(emacs.handler);\n        emacs.handler.commands.setMark.exec(editor);\n        iSearch.activate(editor);\n        iSearch.addString('1'); iSearch.addString('2');\n        testRanges(\"Range: [0/0] -> [0/5]\", [editor.getSelectionRange()]);\n    }\n\n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main) {\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n}\n"
  },
  {
    "path": "lib/ace/keyboard/emacs.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar dom = require(\"../lib/dom\");\nrequire(\"../incremental_search\");\nvar iSearchCommandModule = require(\"../commands/incremental_search_commands\");\n\n\nvar screenToTextBlockCoordinates = function(x, y) {\n    var canvasPos = this.scroller.getBoundingClientRect();\n    var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n    \n    var col = Math.floor(offsetX / this.characterWidth);\n\n    var row = Math.floor(\n        (y + this.scrollTop - canvasPos.top) / this.lineHeight\n    );\n\n    return this.session.screenToDocumentPosition(row, col, offsetX);\n};\n\nvar HashHandler = require(\"./hash_handler\").HashHandler;\nexports.handler = new HashHandler();\n\nexports.handler.isEmacs = true;\nexports.handler.$id = \"ace/keyboard/emacs\";\n\nvar initialized = false;\nvar $formerLongWords;\nvar $formerLineStart;\n\nexports.handler.attach = function(editor) {\n    if (!initialized) {\n        initialized = true;\n        dom.importCssString('\\\n            .emacs-mode .ace_cursor{\\\n                border: 1px rgba(50,250,50,0.8) solid!important;\\\n                -moz-box-sizing: border-box!important;\\\n                -webkit-box-sizing: border-box!important;\\\n                box-sizing: border-box!important;\\\n                background-color: rgba(0,250,0,0.9);\\\n                opacity: 0.5;\\\n            }\\\n            .emacs-mode .ace_hidden-cursors .ace_cursor{\\\n                opacity: 1;\\\n                background-color: transparent;\\\n            }\\\n            .emacs-mode .ace_overwrite-cursors .ace_cursor {\\\n                opacity: 1;\\\n                background-color: transparent;\\\n                border-width: 0 0 2px 2px !important;\\\n            }\\\n            .emacs-mode .ace_text-layer {\\\n                z-index: 4\\\n            }\\\n            .emacs-mode .ace_cursor-layer {\\\n                z-index: 2\\\n            }', 'emacsMode'\n        );\n    }\n    // in emacs, gotowordleft/right should not count a space as a word..\n    $formerLongWords = editor.session.$selectLongWords;\n    editor.session.$selectLongWords = true;\n    // CTRL-A should go to actual beginning of line\n    $formerLineStart = editor.session.$useEmacsStyleLineStart;\n    editor.session.$useEmacsStyleLineStart = true;\n\n    editor.session.$emacsMark = null; // the active mark\n    editor.session.$emacsMarkRing = editor.session.$emacsMarkRing || [];\n\n    editor.emacsMark = function() {\n        return this.session.$emacsMark;\n    };\n\n    editor.setEmacsMark = function(p) {\n        // to deactivate pass in a falsy value\n        this.session.$emacsMark = p;\n    };\n\n    editor.pushEmacsMark = function(p, activate) {\n        var prevMark = this.session.$emacsMark;\n        if (prevMark)\n            this.session.$emacsMarkRing.push(prevMark);\n        if (!p || activate) this.setEmacsMark(p);\n        else this.session.$emacsMarkRing.push(p);\n    };\n\n    editor.popEmacsMark = function() {\n        var mark = this.emacsMark();\n        if (mark) { this.setEmacsMark(null); return mark; }\n        return this.session.$emacsMarkRing.pop();\n    };\n\n    editor.getLastEmacsMark = function(p) {\n        return this.session.$emacsMark || this.session.$emacsMarkRing.slice(-1)[0];\n    };\n\n    editor.emacsMarkForSelection = function(replacement) {\n        // find the mark in $emacsMarkRing corresponding to the current\n        // selection\n        var sel = this.selection,\n            multiRangeLength = this.multiSelect ?\n                this.multiSelect.getAllRanges().length : 1,\n            selIndex = sel.index || 0,\n            markRing = this.session.$emacsMarkRing,\n            markIndex = markRing.length - (multiRangeLength - selIndex),\n            lastMark = markRing[markIndex] || sel.anchor;\n        if (replacement) {\n            markRing.splice(markIndex, 1,\n                \"row\" in replacement && \"column\" in replacement ?\n                    replacement : undefined);\n        }\n        return lastMark;\n    };\n\n    editor.on(\"click\", $resetMarkMode);\n    editor.on(\"changeSession\", $kbSessionChange);\n    editor.renderer.screenToTextCoordinates = screenToTextBlockCoordinates;\n    editor.setStyle(\"emacs-mode\");\n    editor.commands.addCommands(commands);\n    exports.handler.platform = editor.commands.platform;\n    editor.$emacsModeHandler = this;\n    editor.addEventListener('copy', this.onCopy);\n    editor.addEventListener('paste', this.onPaste);\n};\n\nexports.handler.detach = function(editor) {\n    delete editor.renderer.screenToTextCoordinates;\n    editor.session.$selectLongWords = $formerLongWords;\n    editor.session.$useEmacsStyleLineStart = $formerLineStart;\n    editor.removeEventListener(\"click\", $resetMarkMode);\n    editor.removeEventListener(\"changeSession\", $kbSessionChange);\n    editor.unsetStyle(\"emacs-mode\");\n    editor.commands.removeCommands(commands);\n    editor.removeEventListener('copy', this.onCopy);\n    editor.removeEventListener('paste', this.onPaste);\n    editor.$emacsModeHandler = null;\n};\n\nvar $kbSessionChange = function(e) {\n    if (e.oldSession) {\n        e.oldSession.$selectLongWords = $formerLongWords;\n        e.oldSession.$useEmacsStyleLineStart = $formerLineStart;\n    }\n\n    $formerLongWords = e.session.$selectLongWords;\n    e.session.$selectLongWords = true;\n    $formerLineStart = e.session.$useEmacsStyleLineStart;\n    e.session.$useEmacsStyleLineStart = true;\n\n    if (!e.session.hasOwnProperty('$emacsMark'))\n        e.session.$emacsMark = null;\n    if (!e.session.hasOwnProperty('$emacsMarkRing'))\n        e.session.$emacsMarkRing = [];\n};\n\nvar $resetMarkMode = function(e) {\n    e.editor.session.$emacsMark = null;\n};\n\nvar keys = require(\"../lib/keys\").KEY_MODS;\nvar eMods = {C: \"ctrl\", S: \"shift\", M: \"alt\", CMD: \"command\"};\nvar combinations = [\"C-S-M-CMD\",\n                    \"S-M-CMD\", \"C-M-CMD\", \"C-S-CMD\", \"C-S-M\",\n                    \"M-CMD\", \"S-CMD\", \"S-M\", \"C-CMD\", \"C-M\", \"C-S\",\n                    \"CMD\", \"M\", \"S\", \"C\"];\ncombinations.forEach(function(c) {\n    var hashId = 0;\n    c.split(\"-\").forEach(function(c) {\n        hashId = hashId | keys[eMods[c]];\n    });\n    eMods[hashId] = c.toLowerCase() + \"-\";\n});\n\nexports.handler.onCopy = function(e, editor) {\n    if (editor.$handlesEmacsOnCopy) return;\n    editor.$handlesEmacsOnCopy = true;\n    exports.handler.commands.killRingSave.exec(editor);\n    editor.$handlesEmacsOnCopy = false;\n};\n\nexports.handler.onPaste = function(e, editor) {\n    editor.pushEmacsMark(editor.getCursorPosition());\n};\n\nexports.handler.bindKey = function(key, command) {\n    if (typeof key == \"object\")\n        key = key[this.platform];\n    if (!key)\n        return;\n\n    var ckb = this.commandKeyBinding;\n    key.split(\"|\").forEach(function(keyPart) {\n        keyPart = keyPart.toLowerCase();\n        ckb[keyPart] = command;\n        // register all partial key combos as null commands\n        // to be able to activate key combos with arbitrary length\n        // Example: if keyPart is \"C-c C-l t\" then \"C-c C-l t\" will\n        // get command assigned and \"C-c\" and \"C-c C-l\" will get\n        // a null command assigned in this.commandKeyBinding. For\n        // the lookup logic see handleKeyboard()\n        var keyParts = keyPart.split(\" \").slice(0,-1);\n        keyParts.reduce(function(keyMapKeys, keyPart, i) {\n            var prefix = keyMapKeys[i-1] ? keyMapKeys[i-1] + ' ' : '';\n            return keyMapKeys.concat([prefix + keyPart]);\n        }, []).forEach(function(keyPart) {\n            if (!ckb[keyPart]) ckb[keyPart] = \"null\";\n        });\n    }, this);\n};\n\nexports.handler.getStatusText = function(editor, data) {\n  var str = \"\";\n  if (data.count)\n    str += data.count;\n  if (data.keyChain)\n    str += \" \" + data.keyChain;\n  return str;\n};\n\nexports.handler.handleKeyboard = function(data, hashId, key, keyCode) {\n    // if keyCode == -1 a non-printable key was pressed, such as just\n    // control. Handling those is currently not supported in this handler\n    if (keyCode === -1) return undefined;\n\n    var editor = data.editor;\n    editor._signal(\"changeStatus\");\n    // insertstring data.count times\n    if (hashId == -1) {\n        editor.pushEmacsMark();\n        if (data.count) {\n            var str = new Array(data.count + 1).join(key);\n            data.count = null;\n            return {command: \"insertstring\", args: str};\n        }\n    }\n\n    var modifier = eMods[hashId];\n\n    // CTRL + number / universalArgument for setting data.count\n    if (modifier == \"c-\" || data.count) {\n        var count = parseInt(key[key.length - 1]);\n        if (typeof count === 'number' && !isNaN(count)) {\n            data.count = Math.max(data.count, 0) || 0;\n            data.count = 10 * data.count + count;\n            return {command: \"null\"};\n        }\n    }\n\n    // this.commandKeyBinding maps key specs like \"c-p\" (for CTRL + P) to\n    // command objects, for lookup key needs to include the modifier\n    if (modifier) key = modifier + key;\n\n    // Key combos like CTRL+X H build up the data.keyChain\n    if (data.keyChain) key = data.keyChain += \" \" + key;\n\n    // Key combo prefixes get stored as \"null\" (String!) in this\n    // this.commandKeyBinding. When encountered no command is invoked but we\n    // buld up data.keyChain\n    var command = this.commandKeyBinding[key];\n    data.keyChain = command == \"null\" ? key : \"\";\n\n    // there really is no command\n    if (!command) return undefined;\n\n    // we pass b/c of key combo or universalArgument\n    if (command === \"null\") return {command: \"null\"};\n\n    if (command === \"universalArgument\") {\n        // if no number pressed emacs repeats action 4 times.\n        // minus sign is needed to allow next keypress to replace it\n        data.count = -4;\n        return {command: \"null\"};\n    }\n\n    // lookup command\n    // TODO extract special handling of markmode\n    // TODO special case command.command is really unnecessary, remove\n    var args;\n    if (typeof command !== \"string\") {\n        args = command.args;\n        if (command.command) command = command.command;\n        if (command === \"goorselect\") {\n            command = editor.emacsMark() ? args[1] : args[0];\n            args = null;\n        }\n    }\n\n    if (typeof command === \"string\") {\n        if (command === \"insertstring\" ||\n            command === \"splitline\" ||\n            command === \"togglecomment\") {\n            editor.pushEmacsMark();\n        }\n        command = this.commands[command] || editor.commands.commands[command];\n        if (!command) return undefined;\n    }\n\n    if (!command.readOnly && !command.isYank)\n        data.lastCommand = null;\n\n    if (!command.readOnly && editor.emacsMark())\n        editor.setEmacsMark(null);\n        \n    if (data.count) {\n        var count = data.count;\n        data.count = 0;\n        if (!command || !command.handlesCount) {\n            return {\n                args: args,\n                command: {\n                    exec: function(editor, args) {\n                        for (var i = 0; i < count; i++)\n                            command.exec(editor, args);\n                    },\n                    multiSelectAction: command.multiSelectAction\n                }\n            };\n        } else {\n            if (!args) args = {};\n            if (typeof args === 'object') args.count = count;\n        }\n    }\n\n    return {command: command, args: args};\n};\n\nexports.emacsKeys = {\n    // movement\n    \"Up|C-p\"      : {command: \"goorselect\", args: [\"golineup\",\"selectup\"]},\n    \"Down|C-n\"    : {command: \"goorselect\", args: [\"golinedown\",\"selectdown\"]},\n    \"Left|C-b\"    : {command: \"goorselect\", args: [\"gotoleft\",\"selectleft\"]},\n    \"Right|C-f\"   : {command: \"goorselect\", args: [\"gotoright\",\"selectright\"]},\n    \"C-Left|M-b\"  : {command: \"goorselect\", args: [\"gotowordleft\",\"selectwordleft\"]},\n    \"C-Right|M-f\" : {command: \"goorselect\", args: [\"gotowordright\",\"selectwordright\"]},\n    \"Home|C-a\"    : {command: \"goorselect\", args: [\"gotolinestart\",\"selecttolinestart\"]},\n    \"End|C-e\"     : {command: \"goorselect\", args: [\"gotolineend\",\"selecttolineend\"]},\n    \"C-Home|S-M-,\": {command: \"goorselect\", args: [\"gotostart\",\"selecttostart\"]},\n    \"C-End|S-M-.\" : {command: \"goorselect\", args: [\"gotoend\",\"selecttoend\"]},\n\n    // selection\n    \"S-Up|S-C-p\"      : \"selectup\",\n    \"S-Down|S-C-n\"    : \"selectdown\",\n    \"S-Left|S-C-b\"    : \"selectleft\",\n    \"S-Right|S-C-f\"   : \"selectright\",\n    \"S-C-Left|S-M-b\"  : \"selectwordleft\",\n    \"S-C-Right|S-M-f\" : \"selectwordright\",\n    \"S-Home|S-C-a\"    : \"selecttolinestart\",\n    \"S-End|S-C-e\"     : \"selecttolineend\",\n    \"S-C-Home\"        : \"selecttostart\",\n    \"S-C-End\"         : \"selecttoend\",\n\n    \"C-l\" : \"recenterTopBottom\",\n    \"M-s\" : \"centerselection\",\n    \"M-g\": \"gotoline\",\n    \"C-x C-p\": \"selectall\",\n\n    // todo fix these\n    \"C-Down\": {command: \"goorselect\", args: [\"gotopagedown\",\"selectpagedown\"]},\n    \"C-Up\": {command: \"goorselect\", args: [\"gotopageup\",\"selectpageup\"]},\n    \"PageDown|C-v\": {command: \"goorselect\", args: [\"gotopagedown\",\"selectpagedown\"]},\n    \"PageUp|M-v\": {command: \"goorselect\", args: [\"gotopageup\",\"selectpageup\"]},\n    \"S-C-Down\": \"selectpagedown\",\n    \"S-C-Up\": \"selectpageup\",\n\n    \"C-s\": \"iSearch\",\n    \"C-r\": \"iSearchBackwards\",\n\n    \"M-C-s\": \"findnext\",\n    \"M-C-r\": \"findprevious\",\n    \"S-M-5\": \"replace\",\n\n    // basic editing\n    \"Backspace\": \"backspace\",\n    \"Delete|C-d\": \"del\",\n    \"Return|C-m\": {command: \"insertstring\", args: \"\\n\"}, // \"newline\"\n    \"C-o\": \"splitline\",\n\n    \"M-d|C-Delete\": {command: \"killWord\", args: \"right\"},\n    \"C-Backspace|M-Backspace|M-Delete\": {command: \"killWord\", args: \"left\"},\n    \"C-k\": \"killLine\",\n\n    \"C-y|S-Delete\": \"yank\",\n    \"M-y\": \"yankRotate\",\n    \"C-g\": \"keyboardQuit\",\n\n    \"C-w|C-S-W\": \"killRegion\",\n    \"M-w\": \"killRingSave\",\n    \"C-Space\": \"setMark\",\n    \"C-x C-x\": \"exchangePointAndMark\",\n\n    \"C-t\": \"transposeletters\",\n    \"M-u\": \"touppercase\",    // Doesn't work\n    \"M-l\": \"tolowercase\",\n    \"M-/\": \"autocomplete\",   // Doesn't work\n    \"C-u\": \"universalArgument\",\n\n    \"M-;\": \"togglecomment\",\n\n    \"C-/|C-x u|S-C--|C-z\": \"undo\",\n    \"S-C-/|S-C-x u|C--|S-C-z\": \"redo\", // infinite undo?\n    // vertical editing\n    \"C-x r\":  \"selectRectangularRegion\",\n    \"M-x\": {command: \"focusCommandLine\", args: \"M-x \"}\n    // todo\n    // \"C-x C-t\" \"M-t\" \"M-c\" \"F11\" \"C-M- \"M-q\"\n};\n\n\nexports.handler.bindKeys(exports.emacsKeys);\n\nexports.handler.addCommands({\n    recenterTopBottom: function(editor) {\n        var renderer = editor.renderer;\n        var pos = renderer.$cursorLayer.getPixelPosition();\n        var h = renderer.$size.scrollerHeight - renderer.lineHeight;\n        var scrollTop = renderer.scrollTop;\n        if (Math.abs(pos.top - scrollTop) < 2) {\n            scrollTop = pos.top - h;\n        } else if (Math.abs(pos.top - scrollTop - h * 0.5) < 2) {\n            scrollTop = pos.top;\n        } else {\n            scrollTop = pos.top - h * 0.5;\n        }\n        editor.session.setScrollTop(scrollTop);\n    },\n    selectRectangularRegion:  function(editor) {\n        editor.multiSelect.toggleBlockSelection();\n    },\n    setMark:  {\n        exec: function(editor, args) {\n            // Sets mark-mode and clears current selection.\n            // When mark is set, keyboard cursor movement commands become\n            // selection modification commands. That is,\n            // \"goto\" commands become \"select\" commands.\n            // Any insertion or mouse click resets mark-mode.\n            // setMark twice in a row at the same place resets markmode.\n            // in multi select mode, ea selection is handled individually\n\n            if (args && args.count) {\n                if (editor.inMultiSelectMode) editor.forEachSelection(moveToMark);\n                else moveToMark();\n                moveToMark();\n                return;\n            }\n\n            var mark = editor.emacsMark(),\n                ranges = editor.selection.getAllRanges(),\n                rangePositions = ranges.map(function(r) { return {row: r.start.row, column: r.start.column}; }),\n                transientMarkModeActive = true,\n                hasNoSelection = ranges.every(function(range) { return range.isEmpty(); });\n            // if transientMarkModeActive then mark behavior is a little\n            // different. Deactivate the mark when setMark is run with active\n            // mark\n            if (transientMarkModeActive && (mark || !hasNoSelection)) {\n                if (editor.inMultiSelectMode) editor.forEachSelection({exec: editor.clearSelection.bind(editor)});\n                else editor.clearSelection();\n                if (mark) editor.pushEmacsMark(null);\n                return;\n            }\n\n            if (!mark) {\n                rangePositions.forEach(function(pos) { editor.pushEmacsMark(pos); });\n                editor.setEmacsMark(rangePositions[rangePositions.length-1]);\n                return;\n            }\n\n            // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n\n            function moveToMark() {\n                var mark = editor.popEmacsMark();\n                mark && editor.moveCursorToPosition(mark);\n            }\n\n        },\n        readOnly: true,\n        handlesCount: true\n    },\n    exchangePointAndMark: {\n        exec: function exchangePointAndMark$exec(editor, args) {\n            var sel = editor.selection;\n            if (!args.count && !sel.isEmpty()) { // just invert selection\n                sel.setSelectionRange(sel.getRange(), !sel.isBackwards());\n                return;\n            }\n\n            if (args.count) { // replace mark and point\n                var pos = {row: sel.lead.row, column: sel.lead.column};\n                sel.clearSelection();\n                sel.moveCursorToPosition(editor.emacsMarkForSelection(pos));\n            } else { // create selection to last mark\n                sel.selectToPosition(editor.emacsMarkForSelection());\n            }\n        },\n        readOnly: true,\n        handlesCount: true,\n        multiSelectAction: \"forEach\"\n    },\n    killWord: {\n        exec: function(editor, dir) {\n            editor.clearSelection();\n            if (dir == \"left\")\n                editor.selection.selectWordLeft();\n            else\n                editor.selection.selectWordRight();\n\n            var range = editor.getSelectionRange();\n            var text = editor.session.getTextRange(range);\n            exports.killRing.add(text);\n\n            editor.session.remove(range);\n            editor.clearSelection();\n        },\n        multiSelectAction: \"forEach\"\n    },\n    killLine: function(editor) {\n        editor.pushEmacsMark(null);\n        // don't delete the selection if it's before the cursor\n        editor.clearSelection();\n        var range = editor.getSelectionRange();\n        var line = editor.session.getLine(range.start.row);\n        range.end.column = line.length;\n        line = line.substr(range.start.column);\n        \n        var foldLine = editor.session.getFoldLine(range.start.row);\n        if (foldLine && range.end.row != foldLine.end.row) {\n            range.end.row = foldLine.end.row;\n            line = \"x\";\n        }\n        // remove EOL if only whitespace remains after the cursor\n        if (/^\\s*$/.test(line)) {\n            range.end.row++;\n            line = editor.session.getLine(range.end.row);\n            range.end.column = /^\\s*$/.test(line) ? line.length : 0;\n        }\n        var text = editor.session.getTextRange(range);\n        if (editor.prevOp.command == this)\n            exports.killRing.append(text);\n        else\n            exports.killRing.add(text);\n\n        editor.session.remove(range);\n        editor.clearSelection();\n    },\n    yank: function(editor) {\n        editor.onPaste(exports.killRing.get() || '');\n        editor.keyBinding.$data.lastCommand = \"yank\";\n    },\n    yankRotate: function(editor) {\n        if (editor.keyBinding.$data.lastCommand != \"yank\")\n            return;\n        editor.undo();\n        editor.session.$emacsMarkRing.pop(); // also undo recording mark\n        editor.onPaste(exports.killRing.rotate());\n        editor.keyBinding.$data.lastCommand = \"yank\";\n    },\n    killRegion: {\n        exec: function(editor) {\n            exports.killRing.add(editor.getCopyText());\n            editor.commands.byName.cut.exec(editor);\n            editor.setEmacsMark(null);\n        },\n        readOnly: true,\n        multiSelectAction: \"forEach\"\n    },\n    killRingSave: {\n        exec: function(editor) {\n            // copy text and deselect. will save marks for starts of the\n            // selection(s)\n\n            editor.$handlesEmacsOnCopy = true;\n            var marks = editor.session.$emacsMarkRing.slice(),\n                deselectedMarks = [];\n            exports.killRing.add(editor.getCopyText());\n\n            setTimeout(function() {\n                function deselect() {\n                    var sel = editor.selection, range = sel.getRange(),\n                        pos = sel.isBackwards() ? range.end : range.start;\n                    deselectedMarks.push({row: pos.row, column: pos.column});\n                    sel.clearSelection();\n                }\n                editor.$handlesEmacsOnCopy = false;\n                if (editor.inMultiSelectMode) editor.forEachSelection({exec: deselect});\n                else deselect();\n                editor.session.$emacsMarkRing = marks.concat(deselectedMarks.reverse());\n            }, 0);\n        },\n        readOnly: true\n    },\n    keyboardQuit: function(editor) {\n        editor.selection.clearSelection();\n        editor.setEmacsMark(null);\n        editor.keyBinding.$data.count = null;\n    },\n    focusCommandLine: function(editor, arg) {\n        if (editor.showCommandLine)\n            editor.showCommandLine(arg);\n    }\n});\n\nexports.handler.addCommands(iSearchCommandModule.iSearchStartCommands);\n\nvar commands = exports.handler.commands;\ncommands.yank.isYank = true;\ncommands.yankRotate.isYank = true;\n\nexports.killRing = {\n    $data: [],\n    add: function(str) {\n        str && this.$data.push(str);\n        if (this.$data.length > 30)\n            this.$data.shift();\n    },\n    append: function(str) {\n        var idx = this.$data.length - 1;\n        var text = this.$data[idx] || \"\";\n        if (str) text += str;\n        if (text) this.$data[idx] = text;\n    },\n    get: function(n) {\n        n = n || 1;\n        return this.$data.slice(this.$data.length-n, this.$data.length).reverse().join('\\n');\n    },\n    pop: function() {\n        if (this.$data.length > 1)\n            this.$data.pop();\n        return this.get();\n    },\n    rotate: function() {\n        this.$data.unshift(this.$data.pop());\n        return this.get();\n    }\n};\n\n});\n"
  },
  {
    "path": "lib/ace/keyboard/emacs_test.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\nif (typeof process !== \"undefined\") {\n    require(\"amd-loader\");\n    require(\"../test/mockdom\");\n}\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nrequire(\"../multi_select\");\n\nvar EditSession = require(\"./../edit_session\").EditSession,\n    Editor = require(\"./../editor\").Editor,\n    Range = require(\"./../range\").Range,\n    MockRenderer = require(\"./../test/mockrenderer\").MockRenderer,\n    emacs = require('./emacs'),\n    assert = require(\"./../test/assertions\"),\n    editor, sel;\n\nfunction initEditor(docString) {\n    var doc = new EditSession(docString.split(\"\\n\"));\n    editor = new Editor(new MockRenderer(), doc);\n    editor.setKeyboardHandler(emacs.handler);\n    sel = editor.selection;\n}\n\nfunction print(obj) {\n    return JSON.stringify(obj, null, 2);\n}\n\nfunction pluck(arr, what) {\n    return arr.map(function(ea) { return ea[what]; });\n}\n\nmodule.exports = {\n\n    \"test: detach removes emacs commands from command manager\": function() {\n        initEditor('');\n        assert.ok(!!editor.commands.byName[\"keyboardQuit\"], 'setup error: emacs commands not installed');\n        editor.keyBinding.removeKeyboardHandler(editor.getKeyboardHandler());\n        assert.ok(!editor.commands.byName[\"keyboardQuit\"], 'emacs commands not removed');\n    },\n\n    \"test: keyboardQuit clears selection\": function() {\n        initEditor('foo');\n        editor.selectAll();\n        editor.execCommand('keyboardQuit');\n        assert.ok(editor.selection.isEmpty(), 'selection non-empty');\n    },\n\n    \"test: exchangePointAndMark without mark set\": function() {\n        initEditor('foo');\n        sel.setRange(Range.fromPoints({row: 0, column: 1}, {row: 0, column: 3}));\n        editor.execCommand('exchangePointAndMark');\n        assert.deepEqual({row: 0, column: 1}, editor.getCursorPosition(), print(editor.getCursorPosition()));\n    },\n\n    \"test: exchangePointAndMark with mark set\": function() {\n        initEditor('foo');\n        editor.pushEmacsMark({row: 0, column: 1});\n        editor.pushEmacsMark({row: 0, column: 2});\n        editor.execCommand('exchangePointAndMark', {count: 4});\n        assert.deepEqual({row: 0, column: 2}, editor.getCursorPosition(), print(editor.getCursorPosition()));\n        assert.deepEqual([{row: 0, column: 1}, {row: 0, column: 0}], editor.session.$emacsMarkRing, print(editor.session.$emacsMarkRing));\n    },\n\n    \"test: exchangePointAndMark with selection\": function() {\n        initEditor('foo');\n        editor.pushEmacsMark({row: 0, column: 1});\n        editor.pushEmacsMark({row: 0, column: 2});\n        sel.setRange(Range.fromPoints({row: 0, column: 0}, {row: 0, column: 1}), true);\n        editor.execCommand('exchangePointAndMark');\n        assert.deepEqual({row: 0, column: 1}, editor.getCursorPosition(), print(editor.getCursorPosition()));\n        assert.deepEqual([{row: 0, column: 1}, {row: 0, column: 2}], editor.session.$emacsMarkRing, print(editor.session.$emacsMarkRing));\n    },\n\n    \"test: exchangePointAndMark with multi selection\": function() {\n        initEditor('foo\\nhello world\\n123');\n        var ranges = [[{row: 0, column: 0}, {row: 0, column: 3}],\n                      [{row: 1, column: 0}, {row: 1, column: 5}],\n                      [{row: 1, column: 6}, {row: 1, column: 11}]];\n        ranges.forEach(function(r) {\n            sel.addRange(Range.fromPoints(r[0], r[1]));\n        });\n        assert.equal(\"foo\\nhello\\nworld\", editor.getSelectedText());\n        editor.execCommand('exchangePointAndMark');\n        assert.equal(\"foo\\nhello\\nworld\", editor.getSelectedText());\n        assert.deepEqual(pluck(ranges, 0), pluck(sel.getAllRanges(), 'cursor'), \"selections dir not inverted\");\n    },\n\n    \"test: exchangePointAndMark with multi cursors\": function() {\n        initEditor('foo\\nhello world\\n123');\n        var ranges = [[{row: 0, column: 0}, {row: 0, column: 3}],\n                      [{row: 1, column: 0}, {row: 1, column: 5}],\n                      [{row: 1, column: 6}, {row: 1, column: 11}]];\n        // move cursors to the start of each range and set a mark to its end\n        // without selecting anything\n        ranges.forEach(function(r) {\n            editor.pushEmacsMark(r[1]);\n            sel.addRange(Range.fromPoints(r[0], r[0]));\n        });\n        assert.deepEqual(pluck(ranges, 0), pluck(sel.getAllRanges(), 'cursor'), print(sel.getAllRanges()));\n        editor.execCommand('exchangePointAndMark');\n        assert.deepEqual(pluck(ranges, 1), pluck(sel.getAllRanges(), 'cursor'), \"not inverted: \" + print(sel.getAllRanges()));\n    },\n\n    \"test: setMark with multi cursors\": function() {\n        initEditor('foo\\nhello world\\n123');\n        var positions = [{row: 0, column: 0},\n                         {row: 1, column: 0},\n                         {row: 1, column: 6}];\n        positions.forEach(function(p) { sel.addRange(Range.fromPoints(p,p)); });\n        editor.execCommand('setMark');\n        assert.deepEqual(positions, editor.session.$emacsMarkRing, print(editor.session.$emacsMarkRing));\n    },\n    \n    \"test: killLine\": function() {\n        initEditor(\"foo  \\n Hello world\\n  \\n  123\");\n        sel.setRange(new Range(0, 0, 0, 2));\n        editor.endOperation();\n        editor.execCommand(\"killLine\");\n        assert.equal(editor.getValue(),\"fo\\n Hello world\\n  \\n  123\");\n        editor.execCommand(\"killLine\");\n        assert.equal(editor.getValue(),\"fo Hello world\\n  \\n  123\");\n        editor.execCommand(\"killLine\");\n        assert.equal(editor.getValue(),\"fo\\n  \\n  123\");\n        editor.execCommand(\"killLine\");\n        assert.equal(editor.getValue(),\"fo\\n  123\");\n        editor.execCommand(\"killLine\");\n        assert.equal(editor.getValue(),\"fo  123\");\n        editor.execCommand(\"killLine\");\n        assert.equal(editor.getValue(),\"fo\");\n        editor.execCommand(\"killLine\");\n        editor.execCommand(\"yank\");\n        assert.equal(editor.getValue(),\"foo  \\n Hello world\\n  \\n  123\");\n    }\n\n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main) {\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n}\n"
  },
  {
    "path": "lib/ace/keyboard/hash_handler.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar keyUtil = require(\"../lib/keys\");\nvar useragent = require(\"../lib/useragent\");\nvar KEY_MODS = keyUtil.KEY_MODS;\n\nfunction HashHandler(config, platform) {\n    this.platform = platform || (useragent.isMac ? \"mac\" : \"win\");\n    this.commands = {};\n    this.commandKeyBinding = {};\n    this.addCommands(config);\n    this.$singleCommand = true;\n}\n\nfunction MultiHashHandler(config, platform) {\n    HashHandler.call(this, config, platform);\n    this.$singleCommand = false;\n}\n\nMultiHashHandler.prototype = HashHandler.prototype;\n\n(function() {\n    \n\n    this.addCommand = function(command) {\n        if (this.commands[command.name])\n            this.removeCommand(command);\n\n        this.commands[command.name] = command;\n\n        if (command.bindKey)\n            this._buildKeyHash(command);\n    };\n\n    this.removeCommand = function(command, keepCommand) {\n        var name = command && (typeof command === 'string' ? command : command.name);\n        command = this.commands[name];\n        if (!keepCommand)\n            delete this.commands[name];\n\n        // exhaustive search is brute force but since removeCommand is\n        // not a performance critical operation this should be OK\n        var ckb = this.commandKeyBinding;\n        for (var keyId in ckb) {\n            var cmdGroup = ckb[keyId];\n            if (cmdGroup == command) {\n                delete ckb[keyId];\n            } else if (Array.isArray(cmdGroup)) {\n                var i = cmdGroup.indexOf(command);\n                if (i != -1) {\n                    cmdGroup.splice(i, 1);\n                    if (cmdGroup.length == 1)\n                        ckb[keyId] = cmdGroup[0];\n                }\n            }\n        }\n    };\n\n    this.bindKey = function(key, command, position) {\n        if (typeof key == \"object\" && key) {\n            if (position == undefined)\n                position = key.position;\n            key = key[this.platform];\n        }\n        if (!key)\n            return;\n        if (typeof command == \"function\")\n            return this.addCommand({exec: command, bindKey: key, name: command.name || key});\n        \n        key.split(\"|\").forEach(function(keyPart) {\n            var chain = \"\";\n            if (keyPart.indexOf(\" \") != -1) {\n                var parts = keyPart.split(/\\s+/);\n                keyPart = parts.pop();\n                parts.forEach(function(keyPart) {\n                    var binding = this.parseKeys(keyPart);\n                    var id = KEY_MODS[binding.hashId] + binding.key;\n                    chain += (chain ? \" \" : \"\") + id;\n                    this._addCommandToBinding(chain, \"chainKeys\");\n                }, this);\n                chain += \" \";\n            }\n            var binding = this.parseKeys(keyPart);\n            var id = KEY_MODS[binding.hashId] + binding.key;\n            this._addCommandToBinding(chain + id, command, position);\n        }, this);\n    };\n    \n    function getPosition(command) {\n        return typeof command == \"object\" && command.bindKey\n            && command.bindKey.position \n            || (command.isDefault ? -100 : 0);\n    }\n    this._addCommandToBinding = function(keyId, command, position) {\n        var ckb = this.commandKeyBinding, i;\n        if (!command) {\n            delete ckb[keyId];\n        } else if (!ckb[keyId] || this.$singleCommand) {\n            ckb[keyId] = command;\n        } else {\n            if (!Array.isArray(ckb[keyId])) {\n                ckb[keyId] = [ckb[keyId]];\n            } else if ((i = ckb[keyId].indexOf(command)) != -1) {\n                ckb[keyId].splice(i, 1);\n            }\n            \n            if (typeof position != \"number\") {\n                position = getPosition(command);\n            }\n\n            var commands = ckb[keyId];\n            for (i = 0; i < commands.length; i++) {\n                var other = commands[i];\n                var otherPos = getPosition(other);\n                if (otherPos > position)\n                    break;\n            }\n            commands.splice(i, 0, command);\n        }\n    };\n\n    this.addCommands = function(commands) {\n        commands && Object.keys(commands).forEach(function(name) {\n            var command = commands[name];\n            if (!command)\n                return;\n            \n            if (typeof command === \"string\")\n                return this.bindKey(command, name);\n\n            if (typeof command === \"function\")\n                command = { exec: command };\n\n            if (typeof command !== \"object\")\n                return;\n\n            if (!command.name)\n                command.name = name;\n\n            this.addCommand(command);\n        }, this);\n    };\n\n    this.removeCommands = function(commands) {\n        Object.keys(commands).forEach(function(name) {\n            this.removeCommand(commands[name]);\n        }, this);\n    };\n\n    this.bindKeys = function(keyList) {\n        Object.keys(keyList).forEach(function(key) {\n            this.bindKey(key, keyList[key]);\n        }, this);\n    };\n\n    this._buildKeyHash = function(command) {\n        this.bindKey(command.bindKey, command);\n    };\n\n    // accepts keys in the form ctrl+Enter or ctrl-Enter\n    // keys without modifiers or shift only \n    this.parseKeys = function(keys) {\n        var parts = keys.toLowerCase().split(/[\\-\\+]([\\-\\+])?/).filter(function(x){return x;});\n        var key = parts.pop();\n\n        var keyCode = keyUtil[key];\n        if (keyUtil.FUNCTION_KEYS[keyCode])\n            key = keyUtil.FUNCTION_KEYS[keyCode].toLowerCase();\n        else if (!parts.length)\n            return {key: key, hashId: -1};\n        else if (parts.length == 1 && parts[0] == \"shift\")\n            return {key: key.toUpperCase(), hashId: -1};\n\n        var hashId = 0;\n        for (var i = parts.length; i--;) {\n            var modifier = keyUtil.KEY_MODS[parts[i]];\n            if (modifier == null) {\n                if (typeof console != \"undefined\")\n                    console.error(\"invalid modifier \" + parts[i] + \" in \" + keys);\n                return false;\n            }\n            hashId |= modifier;\n        }\n        return {key: key, hashId: hashId};\n    };\n\n    this.findKeyCommand = function findKeyCommand(hashId, keyString) {\n        var key = KEY_MODS[hashId] + keyString;\n        return this.commandKeyBinding[key];\n    };\n\n    this.handleKeyboard = function(data, hashId, keyString, keyCode) {\n        if (keyCode < 0) return;\n        var key = KEY_MODS[hashId] + keyString;\n        var command = this.commandKeyBinding[key];\n        if (data.$keyChain) {\n            data.$keyChain += \" \" + key;\n            command = this.commandKeyBinding[data.$keyChain] || command;\n        }\n        \n        if (command) {\n            if (command == \"chainKeys\" || command[command.length - 1] == \"chainKeys\") {\n                data.$keyChain = data.$keyChain || key;\n                return {command: \"null\"};\n            }\n        }\n        \n        if (data.$keyChain) {\n            if ((!hashId || hashId == 4) && keyString.length == 1)\n                data.$keyChain = data.$keyChain.slice(0, -key.length - 1); // wait for input\n            else if (hashId == -1 || keyCode > 0)\n                data.$keyChain = \"\"; // reset keyChain\n        }\n        return {command: command};\n    };\n    \n    this.getStatusText = function(editor, data) {\n        return data.$keyChain || \"\";\n    };\n\n}).call(HashHandler.prototype);\n\nexports.HashHandler = HashHandler;\nexports.MultiHashHandler = MultiHashHandler;\n});\n"
  },
  {
    "path": "lib/ace/keyboard/keybinding.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar keyUtil  = require(\"../lib/keys\");\nvar event = require(\"../lib/event\");\n\nvar KeyBinding = function(editor) {\n    this.$editor = editor;\n    this.$data = {editor: editor};\n    this.$handlers = [];\n    this.setDefaultHandler(editor.commands);\n};\n\n(function() {\n    this.setDefaultHandler = function(kb) {\n        this.removeKeyboardHandler(this.$defaultHandler);\n        this.$defaultHandler = kb;\n        this.addKeyboardHandler(kb, 0);\n    };\n\n    this.setKeyboardHandler = function(kb) {\n        var h = this.$handlers;\n        if (h[h.length - 1] == kb)\n            return;\n\n        while (h[h.length - 1] && h[h.length - 1] != this.$defaultHandler)\n            this.removeKeyboardHandler(h[h.length - 1]);\n\n        this.addKeyboardHandler(kb, 1);\n    };\n\n    this.addKeyboardHandler = function(kb, pos) {\n        if (!kb)\n            return;\n        if (typeof kb == \"function\" && !kb.handleKeyboard)\n            kb.handleKeyboard = kb;\n        var i = this.$handlers.indexOf(kb);\n        if (i != -1)\n            this.$handlers.splice(i, 1);\n\n        if (pos == undefined)\n            this.$handlers.push(kb);\n        else\n            this.$handlers.splice(pos, 0, kb);\n\n        if (i == -1 && kb.attach)\n            kb.attach(this.$editor);\n    };\n\n    this.removeKeyboardHandler = function(kb) {\n        var i = this.$handlers.indexOf(kb);\n        if (i == -1)\n            return false;\n        this.$handlers.splice(i, 1);\n        kb.detach && kb.detach(this.$editor);\n        return true;\n    };\n\n    this.getKeyboardHandler = function() {\n        return this.$handlers[this.$handlers.length - 1];\n    };\n    \n    this.getStatusText = function() {\n        var data = this.$data;\n        var editor = data.editor;\n        return this.$handlers.map(function(h) {\n            return h.getStatusText && h.getStatusText(editor, data) || \"\";\n        }).filter(Boolean).join(\" \");\n    };\n\n    this.$callKeyboardHandlers = function(hashId, keyString, keyCode, e) {\n        var toExecute;\n        var success = false;\n        var commands = this.$editor.commands;\n\n        for (var i = this.$handlers.length; i--;) {\n            toExecute = this.$handlers[i].handleKeyboard(\n                this.$data, hashId, keyString, keyCode, e\n            );\n            if (!toExecute || !toExecute.command)\n                continue;\n            \n            // allow keyboardHandler to consume keys\n            if (toExecute.command == \"null\") {\n                success = true;\n            } else {\n                success = commands.exec(toExecute.command, this.$editor, toExecute.args, e);\n            }\n            // do not stop input events to not break repeating\n            if (success && e && hashId != -1 && \n                toExecute.passEvent != true && toExecute.command.passEvent != true\n            ) {\n                event.stopEvent(e);\n            }\n            if (success)\n                break;\n        }\n        \n        if (!success && hashId == -1) {\n            toExecute = {command: \"insertstring\"};\n            success = commands.exec(\"insertstring\", this.$editor, keyString);\n        }\n        \n        if (success && this.$editor._signal)\n            this.$editor._signal(\"keyboardActivity\", toExecute);\n        \n        return success;\n    };\n\n    this.onCommandKey = function(e, hashId, keyCode) {\n        var keyString = keyUtil.keyCodeToString(keyCode);\n        this.$callKeyboardHandlers(hashId, keyString, keyCode, e);\n    };\n\n    this.onTextInput = function(text) {\n        this.$callKeyboardHandlers(-1, text);\n    };\n\n}).call(KeyBinding.prototype);\n\nexports.KeyBinding = KeyBinding;\n});\n"
  },
  {
    "path": "lib/ace/keyboard/keybinding_test.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\nif (typeof process !== \"undefined\") {\n    require(\"amd-loader\");\n}\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar EditSession = require(\"./../edit_session\").EditSession,\n    Editor = require(\"./../editor\").Editor,\n    MockRenderer = require(\"./../test/mockrenderer\").MockRenderer,\n    assert = require(\"./../test/assertions\"),\n    HashHandler = require('./hash_handler').HashHandler,\n    keys = require('../lib/keys'),\n    editor;\n\nfunction initEditor(docString) {\n    var doc = new EditSession(docString.split(\"\\n\"));\n    editor = new Editor(new MockRenderer(), doc);\n}\n\nmodule.exports = {\n\n    \"test: adding a new keyboard handler does not remove the default handler\": function() {\n        initEditor('abc');\n        var handler = new HashHandler({'del': 'f1'});\n        editor.keyBinding.setKeyboardHandler(handler);\n        editor.onCommandKey({}, 0, keys['f1']);\n        assert.equal('bc', editor.getValue(), \"binding of new handler\");\n        editor.onCommandKey({}, 0, keys['delete']);\n        assert.equal('c', editor.getValue(), \"bindings of the old handler should still work\");\n    }\n\n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main) {\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n}\n"
  },
  {
    "path": "lib/ace/keyboard/state_handler.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\n// If you're developing a new keymapping and want to get an idea what's going\n// on, then enable debugging.\nvar DEBUG = false;\n\nfunction StateHandler(keymapping) {\n    this.keymapping = this.$buildKeymappingRegex(keymapping);\n}\n\nStateHandler.prototype = {\n    /*\n     * Build the RegExp from the keymapping as RegExp can't stored directly\n     * in the metadata JSON and as the RegExp used to match the keys/buffer\n     * need to be adapted.\n     */\n    $buildKeymappingRegex: function(keymapping) {\n        for (var state in keymapping) {\n            this.$buildBindingsRegex(keymapping[state]);\n        }\n        return keymapping;\n    },\n\n    $buildBindingsRegex: function(bindings) {\n        // Escape a given Regex string.\n        bindings.forEach(function(binding) {\n            if (binding.key) {\n                binding.key = new RegExp('^' + binding.key + '$');\n            } else if (Array.isArray(binding.regex)) {\n                if (!('key' in binding))\n                  binding.key = new RegExp('^' + binding.regex[1] + '$');\n                binding.regex = new RegExp(binding.regex.join('') + '$');\n            } else if (binding.regex) {\n                binding.regex = new RegExp(binding.regex + '$');\n            }\n        });\n    },\n\n    $composeBuffer: function(data, hashId, key, e) {\n        // Initialize the data object.\n        if (data.state == null || data.buffer == null) {\n            data.state = \"start\";\n            data.buffer = \"\";\n        }\n\n        var keyArray = [];\n        if (hashId & 1) keyArray.push(\"ctrl\");\n        if (hashId & 8) keyArray.push(\"command\");\n        if (hashId & 2) keyArray.push(\"option\");\n        if (hashId & 4) keyArray.push(\"shift\");\n        if (key)        keyArray.push(key);\n\n        var symbolicName = keyArray.join(\"-\");\n        var bufferToUse = data.buffer + symbolicName;\n\n        // Don't add the symbolic name to the key buffer if the alt_ key is\n        // part of the symbolic name. If it starts with alt_, this means\n        // that the user hit an alt keycombo and there will be a single,\n        // new character detected after this event, which then will be\n        // added to the buffer (e.g. alt_j will result in ∆).\n        //\n        // We test for 2 and not for & 2 as we only want to exclude the case where\n        // the option key is pressed alone.\n        if (hashId != 2) {\n            data.buffer = bufferToUse;\n        }\n\n        var bufferObj = {\n            bufferToUse: bufferToUse,\n            symbolicName: symbolicName\n        };\n\n        if (e) {\n            bufferObj.keyIdentifier = e.keyIdentifier;\n        }\n\n        return bufferObj;\n    },\n\n    $find: function(data, buffer, symbolicName, hashId, key, keyIdentifier) {\n        // Holds the command to execute and the args if a command matched.\n        var result = {};\n\n        // Loop over all the bindings of the keymap until a match is found.\n        this.keymapping[data.state].some(function(binding) {\n            var match;\n\n            // Check if the key matches.\n            if (binding.key && !binding.key.test(symbolicName)) {\n                return false;\n            }\n\n            // Check if the regex matches.\n            if (binding.regex && !(match = binding.regex.exec(buffer))) {\n                return false;\n            }\n\n            // Check if the match function matches.\n            if (binding.match && !binding.match(buffer, hashId, key, symbolicName, keyIdentifier)) {\n                return false;\n            }\n\n            // Check for disallowed matches.\n            if (binding.disallowMatches) {\n                for (var i = 0; i < binding.disallowMatches.length; i++) {\n                    if (!!match[binding.disallowMatches[i]]) {\n                        return false;\n                    }\n                }\n            }\n\n            // If there is a command to execute, then figure out the\n            // command and the arguments.\n            if (binding.exec) {\n                result.command = binding.exec;\n\n                // Build the arguments.\n                if (binding.params) {\n                    var value;\n                    result.args = {};\n                    binding.params.forEach(function(param) {\n                        if (param.match != null && match != null) {\n                            value = match[param.match] || param.defaultValue;\n                        } else {\n                            value = param.defaultValue;\n                        }\n\n                        if (param.type === 'number') {\n                            value = parseInt(value);\n                        }\n\n                        result.args[param.name] = value;\n                    });\n                }\n                data.buffer = \"\";\n            }\n\n            // Handle the 'then' property.\n            if (binding.then) {\n                data.state = binding.then;\n                data.buffer = \"\";\n            }\n\n            // If no command is set, then execute the \"null\" fake command.\n            if (result.command == null) {\n                result.command = \"null\";\n            }\n\n            if (DEBUG) {\n                console.log(\"KeyboardStateMapper#find\", binding);\n            }\n            return true;\n        });\n\n        if (result.command) {\n            return result;\n        } else {\n            data.buffer = \"\";\n            return false;\n        }\n    },\n\n    /*\n     * This function is called by keyBinding.\n     */\n    handleKeyboard: function(data, hashId, key, keyCode, e) {\n        if (hashId == -1)\n            hashId = 0;\n        // If we pressed any command key but no other key, then ignore the input.\n        // Otherwise \"shift-\" is added to the buffer, and later on \"shift-g\"\n        // which results in \"shift-shift-g\" which doesn't make sense.\n        if (hashId != 0 && (key == \"\" || key == String.fromCharCode(0))) {\n            return null;\n        }\n\n        // Compute the current value of the keyboard input buffer.\n        var r = this.$composeBuffer(data, hashId, key, e);\n        var buffer = r.bufferToUse;\n        var symbolicName = r.symbolicName;\n        var keyId = r.keyIdentifier;\n\n        r = this.$find(data, buffer, symbolicName, hashId, key, keyId);\n        if (DEBUG) {\n            console.log(\"KeyboardStateMapper#match\", buffer, symbolicName, r);\n        }\n\n        return r;\n    }\n};\n\n/*\n * This is a useful matching function and therefore is defined here so that\n * users of KeyboardStateMapper can use it.\n *\n * @return {Boolean} If no command key (Command|Option|Shift|Ctrl) is pressed, it\n *          returns true. If the only the Shift key is pressed + a character\n *          true is returned as well. Otherwise, false is returned.\n *          Summing up, the function returns true whenever the user typed\n *          a normal character on the keyboard and no shortcut.\n */\nexports.matchCharacterOnly = function(buffer, hashId, key, symbolicName) {\n    // If no command keys are pressed, then catch the input.\n    if (hashId == 0) {\n        return true;\n    }\n    // If only the shift key is pressed and a character key, then\n    // catch that input as well.\n    else if ((hashId == 4) && key.length == 1) {\n        return true;\n    }\n    // Otherwise, we let the input got through.\n    else {\n        return false;\n    }\n};\n\nexports.StateHandler = StateHandler;\n});\n"
  },
  {
    "path": "lib/ace/keyboard/textarea.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar HashHandler = require(\"./hash_handler\").HashHandler;\nexports.handler = new HashHandler();\n\n[{\n    bindKey: \"Shift-Tab|Tab\",\n    command: \"passKeysToBrowser\"\n}, {\n    bindKey: {win: \"Ctrl-L\", mac: \"Cmd-L\"},\n    command: \"passKeysToBrowser\"\n}, {\n    bindKey: {win: \"Ctrl-G\", mac: \"Cmd-G\"},\n    command: \"gotoline\"\n}, {\n    bindKey: {win: \"Ctrl-T|Ctrl-Shift-T|Ctrl-K\", mac: \"Cmd-T|Cmd-Shift-T\"},\n    // TODO can't used shared passKeysToBrowser command since passEvent from it is ignored\n    command: {\n        name: \"passKeysToBrowser\",\n        exec: function() {},\n        passEvent: true,\n        readOnly: true\n    }\n}, {\n    bindKey: {win: \"Ctrl-G\", mac: \"Cmd-G\"},\n    command: \"passKeysToBrowser\"\n}, {\n    bindKey: {win: \"Ctrl-G\", mac: \"Cmd-G\"},\n    command: \"passKeysToBrowser\"\n}, {\n    command: \"golineup\",\n    bindKey: {win: null, mac: \"Ctrl-P\"}\n}, {\n    command: \"golinedown\",\n    bindKey: {win: null, mac: \"Ctrl-N\"}\n}, {\n    command: \"gotoleft\",    \n    bindKey: {win: null, mac: \"Ctrl-B\"}\n}, {\n    command: \"gotoright\",\n    bindKey: {win: null, mac: \"Ctrl-F\"}\n}, {\n    command: \"gotolineend\",\n    bindKey: {win: null, mac: \"Ctrl-E\"}\n}, {\n    command: \"gotolinestart\",\n    bindKey: {win: null, mac: \"Ctrl-A\"}\n}\n].forEach(function(k) {\n    var bindKey = k.bindKey;\n    if (typeof bindKey == \"object\")\n        bindKey = bindKey[exports.handler.platform];\n    exports.handler.bindKey(bindKey, k.command);\n});\nexports.handler.$id = \"ace/keyboard/textarea\";\n\n});\n"
  },
  {
    "path": "lib/ace/keyboard/textinput.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar BROKEN_SETDATA = useragent.isChrome < 18;\nvar USE_IE_MIME_TYPE =  useragent.isIE;\n\nvar TextInputIOS = require(\"./textinput_ios\").TextInput;\nvar TextInput = function(parentNode, host) {\n    if (useragent.isIOS)\n        return TextInputIOS.call(this, parentNode, host);\n    \n    var text = dom.createElement(\"textarea\");\n    text.className = \"ace_text-input\";\n\n    text.setAttribute(\"wrap\", \"off\");\n    text.setAttribute(\"autocorrect\", \"off\");\n    text.setAttribute(\"autocapitalize\", \"off\");\n    text.setAttribute(\"spellcheck\", false);\n\n    text.style.opacity = \"0\";\n    parentNode.insertBefore(text, parentNode.firstChild);\n\n    var PLACEHOLDER = \"\\u2028\\u2028\";\n\n    var copied = false;\n    var pasted = false;\n    var inComposition = false;\n    var tempStyle = '';\n    var isSelectionEmpty = true;\n    var copyWithEmptySelection = false;\n\n    // FOCUS\n    // ie9 throws error if document.activeElement is accessed too soon\n    try { var isFocused = document.activeElement === text; } catch(e) {}\n    \n    event.addListener(text, \"blur\", function(e) {\n        host.onBlur(e);\n        isFocused = false;\n    });\n    event.addListener(text, \"focus\", function(e) {\n        isFocused = true;\n        host.onFocus(e);\n        resetSelection();\n    });\n    this.focus = function() {\n        if (tempStyle) return text.focus();\n        var top = text.style.top;\n        text.style.position = \"fixed\";\n        text.style.top = \"0px\";\n        text.focus();\n        setTimeout(function() {\n            text.style.position = \"\";\n            if (text.style.top == \"0px\")\n                text.style.top = top;\n        }, 0);\n    };\n    this.blur = function() {\n        text.blur();\n    };\n    this.isFocused = function() {\n        return isFocused;\n    };\n\n    // modifying selection of blured textarea can focus it (chrome mac/linux)\n    var syncSelection = lang.delayedCall(function() {\n        isFocused && resetSelection(isSelectionEmpty);\n    });\n    var syncValue = lang.delayedCall(function() {\n         if (!inComposition) {\n            text.value = PLACEHOLDER;\n            isFocused && resetSelection();\n         }\n    });\n\n    function resetSelection(isEmpty) {\n        isEmpty = copyWithEmptySelection ? false : isEmpty;\n        if (inComposition)\n            return;\n        \n        // this prevents infinite recursion on safari 8 \n        // see https://github.com/ajaxorg/ace/issues/2114\n        inComposition = true;\n        \n        if (inputHandler) {\n            var selectionStart = 0;\n            var selectionEnd = isEmpty ? 0 : text.value.length - 1;\n        } else {\n            var selectionStart = isEmpty ? 2 : 1;\n            var selectionEnd = 2;\n        }\n        // on firefox this throws if textarea is hidden\n        try {\n            text.setSelectionRange(selectionStart, selectionEnd);\n        } catch(e){}\n        \n        inComposition = false;\n    }\n\n    function resetValue() {\n        if (inComposition)\n            return;\n        text.value = PLACEHOLDER;\n        //http://code.google.com/p/chromium/issues/detail?id=76516\n        if (useragent.isWebKit)\n            syncValue.schedule();\n    }\n\n    useragent.isWebKit || host.addEventListener('changeSelection', function() {\n        if (host.selection.isEmpty() != isSelectionEmpty) {\n            isSelectionEmpty = !isSelectionEmpty;\n            syncSelection.schedule();\n        }\n    });\n\n    resetValue();\n    if (isFocused)\n        host.onFocus();\n\n\n    var isAllSelected = function(text) {\n        return text.selectionStart === 0 && text.selectionEnd === text.value.length;\n    };\n\n    var onSelect = function(e) {\n        if (copied) {\n            copied = false;\n        } else if (isAllSelected(text)) {\n            host.selectAll();\n            resetSelection();\n        } else if (inputHandler) {\n            resetSelection(host.selection.isEmpty());\n        }\n    };\n\n    var inputHandler = null;\n    this.setInputHandler = function(cb) {inputHandler = cb;};\n    this.getInputHandler = function() {return inputHandler;};\n    var afterContextMenu = false;\n    \n    var sendText = function(data) {\n        if (inputHandler) {\n            data = inputHandler(data);\n            inputHandler = null;\n        }\n        if (pasted) {\n            resetSelection();\n            if (data)\n                host.onPaste(data);\n            pasted = false;\n        } else if (data == PLACEHOLDER.charAt(0)) {\n            if (afterContextMenu)\n                host.execCommand(\"del\", {source: \"ace\"});\n            else // some versions of android do not fire keydown when pressing backspace\n                host.execCommand(\"backspace\", {source: \"ace\"});\n        } else {\n            if (data.substring(0, 2) == PLACEHOLDER)\n                data = data.substr(2);\n            else if (data.charAt(0) == PLACEHOLDER.charAt(0))\n                data = data.substr(1);\n            else if (data.charAt(data.length - 1) == PLACEHOLDER.charAt(0))\n                data = data.slice(0, -1);\n            // can happen if undo in textarea isn't stopped\n            if (data.charAt(data.length - 1) == PLACEHOLDER.charAt(0))\n                data = data.slice(0, -1);\n            \n            if (data)\n                host.onTextInput(data);\n        }\n        if (afterContextMenu)\n            afterContextMenu = false;\n    };\n    var onInput = function(e) {\n        // console.log(\"onInput\", inComposition)\n        if (inComposition)\n            return;\n        var data = text.value;\n        sendText(data);\n        resetValue();\n    };\n    \n    var handleClipboardData = function(e, data, forceIEMime) {\n        var clipboardData = e.clipboardData || window.clipboardData;\n        if (!clipboardData || BROKEN_SETDATA)\n            return;\n        // using \"Text\" doesn't work on old webkit but ie needs it\n        var mime = USE_IE_MIME_TYPE || forceIEMime ? \"Text\" : \"text/plain\";\n        try {\n            if (data) {\n                // Safari 5 has clipboardData object, but does not handle setData()\n                return clipboardData.setData(mime, data) !== false;\n            } else {\n                return clipboardData.getData(mime);\n            }\n        } catch(e) {\n            if (!forceIEMime)\n                return handleClipboardData(e, data, true);\n        }\n    };\n\n    var doCopy = function(e, isCut) {\n        var data = host.getCopyText();\n        if (!data)\n            return event.preventDefault(e);\n\n        if (handleClipboardData(e, data)) {\n            isCut ? host.onCut() : host.onCopy();\n            event.preventDefault(e);\n        } else {\n            copied = true;\n            text.value = data;\n            text.select();\n            setTimeout(function(){\n                copied = false;\n                resetValue();\n                resetSelection();\n                isCut ? host.onCut() : host.onCopy();\n            });\n        }\n    };\n    \n    var onCut = function(e) {\n        doCopy(e, true);\n    };\n    \n    var onCopy = function(e) {\n        doCopy(e, false);\n    };\n    \n    var onPaste = function(e) {\n        var data = handleClipboardData(e);\n        if (typeof data == \"string\") {\n            if (data)\n                host.onPaste(data, e);\n            if (useragent.isIE)\n                setTimeout(resetSelection);\n            event.preventDefault(e);\n        }\n        else {\n            text.value = \"\";\n            pasted = true;\n        }\n    };\n\n    event.addCommandKeyListener(text, host.onCommandKey.bind(host));\n\n    event.addListener(text, \"select\", onSelect);\n\n    event.addListener(text, \"input\", onInput);\n\n    event.addListener(text, \"cut\", onCut);\n    event.addListener(text, \"copy\", onCopy);\n    event.addListener(text, \"paste\", onPaste);\n\n\n    // Opera has no clipboard events\n    if (!('oncut' in text) || !('oncopy' in text) || !('onpaste' in text)) {\n        event.addListener(parentNode, \"keydown\", function(e) {\n            if ((useragent.isMac && !e.metaKey) || !e.ctrlKey)\n                return;\n\n            switch (e.keyCode) {\n                case 67:\n                    onCopy(e);\n                    break;\n                case 86:\n                    onPaste(e);\n                    break;\n                case 88:\n                    onCut(e);\n                    break;\n            }\n        });\n    }\n\n\n    // COMPOSITION\n    var onCompositionStart = function(e) {\n        if (inComposition || !host.onCompositionStart || host.$readOnly) \n            return;\n        // console.log(\"onCompositionStart\", inComposition)\n        inComposition = {};\n        inComposition.canUndo = host.session.$undoManager;\n        host.onCompositionStart();\n        setTimeout(onCompositionUpdate, 0);\n        host.on(\"mousedown\", onCompositionEnd);\n        if (inComposition.canUndo && !host.selection.isEmpty()) {\n            host.insert(\"\");\n            host.session.markUndoGroup();\n            host.selection.clearSelection();\n        }\n        host.session.markUndoGroup();\n    };\n\n    var onCompositionUpdate = function() {\n        // console.log(\"onCompositionUpdate\", inComposition && JSON.stringify(text.value))\n        if (!inComposition || !host.onCompositionUpdate || host.$readOnly)\n            return;\n        var val = text.value.replace(/\\u2028/g, \"\");\n        if (inComposition.lastValue === val) return;\n        \n        host.onCompositionUpdate(val);\n        if (inComposition.lastValue)\n            host.undo();\n        if (inComposition.canUndo)\n            inComposition.lastValue = val;\n        if (inComposition.lastValue) {\n            var r = host.selection.getRange();\n            host.insert(inComposition.lastValue);\n            host.session.markUndoGroup();\n            inComposition.range = host.selection.getRange();\n            host.selection.setRange(r);\n            host.selection.clearSelection();\n        }\n    };\n\n    var onCompositionEnd = function(e) {\n        if (!host.onCompositionEnd || host.$readOnly) return;\n        // console.log(\"onCompositionEnd\", inComposition &&inComposition.lastValue)\n        var c = inComposition;\n        inComposition = false;\n        var timer = setTimeout(function() {\n            timer = null;\n            var str = text.value.replace(/\\u2028/g, \"\");\n            // console.log(str, c.lastValue)\n            if (inComposition)\n                return;\n            else if (str == c.lastValue)\n                resetValue();\n            else if (!c.lastValue && str) {\n                resetValue();\n                sendText(str);\n            }\n        });\n        inputHandler = function compositionInputHandler(str) {\n            // console.log(\"onCompositionEnd\", str, c.lastValue)\n            if (timer)\n                clearTimeout(timer);\n            str = str.replace(/\\u2028/g, \"\");\n            if (str == c.lastValue)\n                return \"\";\n            if (c.lastValue && timer)\n                host.undo();\n            return str;\n        };\n        host.onCompositionEnd();\n        host.removeListener(\"mousedown\", onCompositionEnd);\n        if (e.type == \"compositionend\" && c.range) {\n            host.selection.setRange(c.range);\n        }\n        // Workaround for #3027, #3045, #3097, #3100, #3249\n        var needsOnInput =\n            (!!useragent.isChrome && useragent.isChrome >= 53) ||\n            (!!useragent.isWebKit && useragent.isWebKit >= 603);\n\n        if (needsOnInput) {\n          onInput();\n        }\n    };\n    \n    \n\n    var syncComposition = lang.delayedCall(onCompositionUpdate, 50);\n\n    event.addListener(text, \"compositionstart\", onCompositionStart);\n    event.addListener(text, \"compositionupdate\", function(){syncComposition.schedule();});\n    event.addListener(text, \"keyup\", function(){syncComposition.schedule();});\n    event.addListener(text, \"keydown\", function(){syncComposition.schedule();});\n    event.addListener(text, \"compositionend\", onCompositionEnd);\n\n    this.getElement = function() {\n        return text;\n    };\n\n    this.setReadOnly = function(readOnly) {\n       text.readOnly = readOnly;\n    };\n\n    this.setCopyWithEmptySelection = function(value) {\n        copyWithEmptySelection = value;\n    };\n\n    this.onContextMenu = function(e) {\n        afterContextMenu = true;\n        resetSelection(host.selection.isEmpty());\n        host._emit(\"nativecontextmenu\", {target: host, domEvent: e});\n        this.moveToMouse(e, true);\n    };\n    \n    this.moveToMouse = function(e, bringToFront) {\n        if (!tempStyle)\n            tempStyle = text.style.cssText;\n        text.style.cssText = (bringToFront ? \"z-index:100000;\" : \"\")\n            + \"height:\" + text.style.height + \";\"\n            + (useragent.isIE ? \"opacity:0.1;\" : \"\");\n\n        var rect = host.container.getBoundingClientRect();\n        var style = dom.computedStyle(host.container);\n        var top = rect.top + (parseInt(style.borderTopWidth) || 0);\n        var left = rect.left + (parseInt(rect.borderLeftWidth) || 0);\n        var maxTop = rect.bottom - top - text.clientHeight -2;\n        var move = function(e) {\n            text.style.left = e.clientX - left - 2 + \"px\";\n            text.style.top = Math.min(e.clientY - top - 2, maxTop) + \"px\";\n        }; \n        move(e);\n\n        if (e.type != \"mousedown\")\n            return;\n\n        if (host.renderer.$keepTextAreaAtCursor)\n            host.renderer.$keepTextAreaAtCursor = null;\n\n        clearTimeout(closeTimeout);\n        // on windows context menu is opened after mouseup\n        if (useragent.isWin)\n            event.capture(host.container, move, onContextMenuClose);\n    };\n\n    this.onContextMenuClose = onContextMenuClose;\n    var closeTimeout;\n    function onContextMenuClose() {\n        clearTimeout(closeTimeout);\n        closeTimeout = setTimeout(function () {\n            if (tempStyle) {\n                text.style.cssText = tempStyle;\n                tempStyle = '';\n            }\n            if (host.renderer.$keepTextAreaAtCursor == null) {\n                host.renderer.$keepTextAreaAtCursor = true;\n                host.renderer.$moveTextAreaToCursor();\n            }\n        }, 0);\n    }\n\n    var onContextMenu = function(e) {\n        host.textInput.onContextMenu(e);\n        onContextMenuClose();\n    };\n    event.addListener(text, \"mouseup\", onContextMenu);\n    event.addListener(text, \"mousedown\", function(e) {\n        e.preventDefault();\n        onContextMenuClose();\n    });\n    event.addListener(host.renderer.scroller, \"contextmenu\", onContextMenu);\n    event.addListener(text, \"contextmenu\", onContextMenu);\n};\n\nexports.TextInput = TextInput;\n});\n"
  },
  {
    "path": "lib/ace/keyboard/textinput_ios.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar KEYS = require(\"../lib/keys\");\nvar MODS = KEYS.KEY_MODS;\nvar BROKEN_SETDATA = useragent.isChrome < 18;\nvar USE_IE_MIME_TYPE =  useragent.isIE;\n\nvar TextInput = function(parentNode, host) {\n    var self = this;\n    var text = dom.createElement(\"textarea\");\n    text.className = useragent.isIOS ? \"ace_text-input ace_text-input-ios\" : \"ace_text-input\";\n\n    if (useragent.isTouchPad)\n        text.setAttribute(\"x-palm-disable-auto-cap\", true);\n\n    text.setAttribute(\"wrap\", \"off\");\n    text.setAttribute(\"autocorrect\", \"off\");\n    text.setAttribute(\"autocapitalize\", \"off\");\n    text.setAttribute(\"spellcheck\", false);\n\n    text.style.opacity = \"0\";\n    parentNode.insertBefore(text, parentNode.firstChild);\n\n    var PLACEHOLDER = \"\\n aaaa a\\n\";\n\n    var copied = false;\n    var cut = false;\n    var pasted = false;\n    var inComposition = false;\n    var tempStyle = '';\n    var isSelectionEmpty = true;\n\n    // FOCUS\n    // ie9 throws error if document.activeElement is accessed too soon\n    try { var isFocused = document.activeElement === text; } catch(e) {}\n    \n    event.addListener(text, \"blur\", function(e) {\n        host.onBlur(e);\n        isFocused = false;\n    });\n    event.addListener(text, \"focus\", function(e) {\n        isFocused = true;\n        host.onFocus(e);\n        resetSelection();\n    });\n    this.focus = function() {\n        if (tempStyle) return text.focus();\n        text.style.position = \"fixed\";\n        text.focus();\n    };\n    this.blur = function() {\n        text.blur();\n    };\n    this.isFocused = function() {\n        return isFocused;\n    };\n\n    // modifying selection of blured textarea can focus it (chrome mac/linux)\n    var syncSelection = lang.delayedCall(function() {\n        isFocused && resetSelection(isSelectionEmpty);\n    });\n    var syncValue = lang.delayedCall(function() {\n         if (!inComposition) {\n            text.value = PLACEHOLDER;\n            isFocused && resetSelection();\n         }\n    });\n\n    function resetSelection(isEmpty) {\n        if (inComposition)\n            return;\n        \n        // this prevents infinite recursion on safari 8 \n        // see https://github.com/ajaxorg/ace/issues/2114\n        inComposition = true;\n        \n        if (inputHandler) {\n            selectionStart = 0;\n            selectionEnd = isEmpty ? 0 : text.value.length - 1;\n        } else {\n            var selectionStart = 4;\n            var selectionEnd = 5;\n        }\n        // on firefox this throws if textarea is hidden\n        try {\n            text.setSelectionRange(selectionStart, selectionEnd);\n        } catch(e) {}\n        \n        inComposition = false;\n    }\n\n    function resetValue() {\n        if (inComposition)\n            return;\n        text.value = PLACEHOLDER;\n        //http://code.google.com/p/chromium/issues/detail?id=76516\n        if (useragent.isWebKit)\n            syncValue.schedule();\n    }\n\n    useragent.isWebKit || host.addEventListener('changeSelection', function() {\n        if (host.selection.isEmpty() != isSelectionEmpty) {\n            isSelectionEmpty = !isSelectionEmpty;\n            syncSelection.schedule();\n        }\n    });\n\n    resetValue();\n    if (isFocused)\n        host.onFocus();\n\n\n    var isAllSelected = function(text) {\n        return text.selectionStart === 0 && text.selectionEnd === text.value.length;\n    };\n\n    var onSelect = function(e) {\n        if (isAllSelected(text)) {\n            host.selectAll();\n            resetSelection();\n        } else if (inputHandler) {\n            resetSelection(host.selection.isEmpty());\n        }\n    };\n\n    var inputHandler = null;\n    this.setInputHandler = function(cb) {inputHandler = cb;};\n    this.getInputHandler = function() {return inputHandler;};\n    var afterContextMenu = false;\n    \n    var sendText = function(data) {\n        if (text.selectionStart === 4 && text.selectionEnd === 5) {\n          return;\n        }\n        if (inputHandler) {\n            data = inputHandler(data);\n            inputHandler = null;\n        }\n        if (pasted) {\n            resetSelection();\n            if (data)\n                host.onPaste(data);\n            pasted = false;\n        } else if (data == PLACEHOLDER.substr(0) && text.selectionStart === 4) {\n            if (afterContextMenu)\n                host.execCommand(\"del\", {source: \"ace\"});\n            else // some versions of android do not fire keydown when pressing backspace\n                host.execCommand(\"backspace\", {source: \"ace\"});\n        } else if (!copied) {\n            if (data.substring(0, 9) == PLACEHOLDER && data.length > PLACEHOLDER.length)\n                data = data.substr(9);\n            else if (data.substr(0, 4) == PLACEHOLDER.substr(0, 4))\n                data = data.substr(4, data.length - PLACEHOLDER.length + 1);\n            else if (data.charAt(data.length - 1) == PLACEHOLDER.charAt(0))\n                data = data.slice(0, -1);\n            // can happen if undo in textarea isn't stopped\n            if (data == PLACEHOLDER.charAt(0)) {\n              // Do nothing\n            } else if (data.charAt(data.length - 1) == PLACEHOLDER.charAt(0))\n                data = data.slice(0, -1);\n            \n            if (data)\n                host.onTextInput(data);\n        }\n        if (copied) {\n          copied = false;\n        }\n        if (afterContextMenu)\n            afterContextMenu = false;\n    };\n    var onInput = function(e) {\n        // console.log(\"onInput\", inComposition)\n        if (inComposition)\n            return;\n        var data = text.value;\n        sendText(data);\n        resetValue();\n    };\n    \n    var handleClipboardData = function(e, data, forceIEMime) {\n        var clipboardData = e.clipboardData || window.clipboardData;\n        if (!clipboardData || BROKEN_SETDATA)\n            return;\n        // using \"Text\" doesn't work on old webkit but ie needs it\n        var mime = USE_IE_MIME_TYPE || forceIEMime ? \"Text\" : \"text/plain\";\n        try {\n            if (data) {\n                // Safari 5 has clipboardData object, but does not handle setData()\n                return clipboardData.setData(mime, data) !== false;\n            } else {\n                return clipboardData.getData(mime);\n            }\n        } catch(e) {\n            if (!forceIEMime)\n                return handleClipboardData(e, data, true);\n        }\n    };\n\n    var doCopy = function(e, isCut) {\n        var data = host.getCopyText();\n        if (!data)\n            return event.preventDefault(e);\n\n        if (handleClipboardData(e, data)) {\n            if (useragent.isIOS) {\n                cut = isCut;\n                text.value = \"\\n aa\" + data + \"a a\\n\";\n                text.setSelectionRange(4, 4 + data.length);\n                copied = {\n                    value: data\n                };\n            }\n            isCut ? host.onCut() : host.onCopy();\n            if (!useragent.isIOS) event.preventDefault(e);\n        } else {\n            copied = true;\n            text.value = data;\n            text.select();\n            setTimeout(function(){\n                copied = false;\n                resetValue();\n                resetSelection();\n                isCut ? host.onCut() : host.onCopy();\n            });\n        }\n    };\n    \n    var onCut = function(e) {\n        doCopy(e, true);\n    };\n    \n    var onCopy = function(e) {\n        doCopy(e, false);\n    };\n    \n    var onPaste = function(e) {\n        var data = handleClipboardData(e);\n        if (typeof data == \"string\") {\n            if (data)\n                host.onPaste(data, e);\n            if (useragent.isIE)\n                setTimeout(resetSelection);\n            event.preventDefault(e);\n        }\n        else {\n            text.value = \"\";\n            pasted = true;\n        }\n    };\n\n    event.addCommandKeyListener(text, host.onCommandKey.bind(host));\n\n    event.addListener(text, \"select\", onSelect);\n\n    event.addListener(text, \"input\", onInput);\n\n    event.addListener(text, \"cut\", onCut);\n    event.addListener(text, \"copy\", onCopy);\n    event.addListener(text, \"paste\", onPaste);\n\n\n    // COMPOSITION\n    var onCompositionStart = function(e) {\n        if (inComposition || !host.onCompositionStart || host.$readOnly) \n            return;\n        // console.log(\"onCompositionStart\", inComposition)\n        inComposition = {};\n        inComposition.canUndo = host.session.$undoManager;\n        host.onCompositionStart();\n        setTimeout(onCompositionUpdate, 0);\n        host.on(\"mousedown\", onCompositionEnd);\n        if (inComposition.canUndo && !host.selection.isEmpty()) {\n            host.insert(\"\");\n            host.session.markUndoGroup();\n            host.selection.clearSelection();\n        }\n        host.session.markUndoGroup();\n    };\n\n    var onCompositionUpdate = function() {\n        // console.log(\"onCompositionUpdate\", inComposition && JSON.stringify(text.value))\n        if (!inComposition || !host.onCompositionUpdate || host.$readOnly)\n            return;\n        var val = text.value.replace(/\\x01/g, \"\");\n        if (inComposition.lastValue === val) return;\n        \n        host.onCompositionUpdate(val);\n        if (inComposition.lastValue)\n            host.undo();\n        if (inComposition.canUndo)\n            inComposition.lastValue = val;\n        if (inComposition.lastValue) {\n            var r = host.selection.getRange();\n            host.insert(inComposition.lastValue);\n            host.session.markUndoGroup();\n            inComposition.range = host.selection.getRange();\n            host.selection.setRange(r);\n            host.selection.clearSelection();\n        }\n    };\n\n    var onCompositionEnd = function(e) {\n        if (!host.onCompositionEnd || host.$readOnly) return;\n        // console.log(\"onCompositionEnd\", inComposition &&inComposition.lastValue)\n        var c = inComposition;\n        inComposition = false;\n        var timer = setTimeout(function() {\n            timer = null;\n            var str = text.value.replace(/\\x01/g, \"\");\n            // console.log(str, c.lastValue)\n            if (inComposition)\n                return;\n            else if (str == c.lastValue)\n                resetValue();\n            else if (!c.lastValue && str) {\n                resetValue();\n                sendText(str);\n            }\n        });\n        inputHandler = function compositionInputHandler(str) {\n            // console.log(\"onCompositionEnd\", str, c.lastValue)\n            if (timer)\n                clearTimeout(timer);\n            str = str.replace(/\\x01/g, \"\");\n            if (str == c.lastValue)\n                return \"\";\n            if (c.lastValue && timer)\n                host.undo();\n            return str;\n        };\n        host.onCompositionEnd();\n        host.removeListener(\"mousedown\", onCompositionEnd);\n        if (e.type == \"compositionend\" && c.range) {\n            host.selection.setRange(c.range);\n        }\n        // Workaround for #3027, #3045, #3097, #3100, #3249\n        var needsOnInput =\n            (!!useragent.isChrome && useragent.isChrome >= 53) ||\n            (!!useragent.isWebKit && useragent.isWebKit >= 603);\n\n        if (needsOnInput) {\n          onInput();\n        }\n    };\n    \n    \n\n    var syncComposition = lang.delayedCall(onCompositionUpdate, 50);\n\n    event.addListener(text, \"compositionstart\", onCompositionStart);\n    event.addListener(text, \"compositionupdate\", function(){syncComposition.schedule();});\n    event.addListener(text, \"keyup\", function(){syncComposition.schedule();});\n    event.addListener(text, \"keydown\", function(){syncComposition.schedule();});\n    event.addListener(text, \"compositionend\", onCompositionEnd);\n\n    this.getElement = function() {\n        return text;\n    };\n\n    this.setReadOnly = function(readOnly) {\n       text.readOnly = readOnly;\n    };\n\n    this.onContextMenu = function(e) {\n        afterContextMenu = true;\n        resetSelection(host.selection.isEmpty());\n        host._emit(\"nativecontextmenu\", {target: host, domEvent: e});\n        this.moveToMouse(e, true);\n    };\n    \n    this.moveToMouse = function(e, bringToFront) {\n        if (!tempStyle)\n            tempStyle = text.style.cssText;\n        text.style.cssText = (bringToFront ? \"z-index:100000;\" : \"\")\n            + \"height:\" + text.style.height + \";\"\n            + (useragent.isIE ? \"opacity:0.1;\" : \"\");\n\n        var rect = host.container.getBoundingClientRect();\n        var style = dom.computedStyle(host.container);\n        var top = rect.top + (parseInt(style.borderTopWidth) || 0);\n        var left = rect.left + (parseInt(rect.borderLeftWidth) || 0);\n        var maxTop = rect.bottom - top - text.clientHeight -2;\n        var move = function(e) {\n            text.style.left = e.clientX - left - 2 + \"px\";\n            text.style.top = Math.min(e.clientY - top - 2, maxTop) + \"px\";\n        }; \n        move(e);\n\n        if (e.type != \"mousedown\")\n            return;\n\n        if (host.renderer.$keepTextAreaAtCursor)\n            host.renderer.$keepTextAreaAtCursor = null;\n\n        clearTimeout(closeTimeout);\n        // on windows context menu is opened after mouseup\n        if (useragent.isWin)\n            event.capture(host.container, move, onContextMenuClose);\n    };\n\n    this.onContextMenuClose = onContextMenuClose;\n    var closeTimeout;\n    function onContextMenuClose() {\n        clearTimeout(closeTimeout);\n        closeTimeout = setTimeout(function () {\n            if (tempStyle) {\n                text.style.cssText = tempStyle;\n                tempStyle = '';\n            }\n            if (host.renderer.$keepTextAreaAtCursor == null) {\n                host.renderer.$keepTextAreaAtCursor = true;\n                host.renderer.$moveTextAreaToCursor();\n            }\n        }, 0);\n    }\n\n    var onContextMenu = function(e) {\n        host.textInput.onContextMenu(e);\n        onContextMenuClose();\n    };\n    event.addListener(text, \"mouseup\", onContextMenu);\n    event.addListener(text, \"mousedown\", function(e) {\n        e.preventDefault();\n        onContextMenuClose();\n    });\n    event.addListener(host.renderer.scroller, \"contextmenu\", onContextMenu);\n    event.addListener(text, \"contextmenu\", onContextMenu);\n    \n    if (useragent.isIOS) {\n        var typingResetTimeout = null;\n        var typing = false;\n\n        parentNode.addEventListener(\"keydown\", function (e) {\n            if (typingResetTimeout) clearTimeout(typingResetTimeout);\n            typing = true;\n        });\n\n        parentNode.addEventListener(\"keyup\", function (e) {\n            typingResetTimeout = setTimeout(function () {\n                typing = false;\n            }, 100);\n        });\n        \n        // IOS doesn't fire events for arrow keys, but this unique hack changes everything!\n        var detectArrowKeys = function(e) {\n            if (document.activeElement !== text) return;\n            if (typing) return;\n          \n            if (cut) {\n                return setTimeout(function () {\n                    cut = false;\n                }, 100);\n            }\n            var selectionStart = text.selectionStart;\n            var selectionEnd = text.selectionEnd;\n            text.setSelectionRange(4, 5);\n            if (selectionStart == selectionEnd) {\n                switch (selectionStart) {\n                    case 0: host.onCommandKey(null, 0, KEYS.up); break;\n                    case 1: host.onCommandKey(null, 0, KEYS.home); break;\n                    case 2: host.onCommandKey(null, MODS.option, KEYS.left); break;\n                    case 4: host.onCommandKey(null, 0, KEYS.left); break;\n                    case 5: host.onCommandKey(null, 0, KEYS.right); break;\n                    case 7: host.onCommandKey(null, MODS.option, KEYS.right); break;\n                    case 8: host.onCommandKey(null, 0, KEYS.end); break;\n                    case 9: host.onCommandKey(null, 0, KEYS.down); break;\n                }\n            } else {\n                switch (selectionEnd) {\n                    case 6: host.onCommandKey(null, MODS.shift, KEYS.right); break;\n                    case 7: host.onCommandKey(null, MODS.shift | MODS.option, KEYS.right); break;\n                    case 8: host.onCommandKey(null, MODS.shift, KEYS.end); break;\n                    case 9: host.onCommandKey(null, MODS.shift, KEYS.down); break;\n                }\n                switch (selectionStart) {\n                    case 0: host.onCommandKey(null, MODS.shift, KEYS.up); break;\n                    case 1: host.onCommandKey(null, MODS.shift, KEYS.home); break;\n                    case 2: host.onCommandKey(null, MODS.shift | MODS.option, KEYS.left); break;\n                    case 3: host.onCommandKey(null, MODS.shift, KEYS.left); break;\n                }\n            }\n        };\n        // On iOS, \"selectionchange\" can only be attached to the document object...\n        document.addEventListener(\"selectionchange\", detectArrowKeys);\n        host.on(\"destroy\", function() {\n            document.removeEventListener(\"selectionchange\", detectArrowKeys);\n        });\n    }\n};\n\nexports.TextInput = TextInput;\n});\n"
  },
  {
    "path": "lib/ace/keyboard/vim.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n/**\n * Supported keybindings:\n *   Too many to list. Refer to defaultKeyMap below.\n *\n * Supported Ex commands:\n *   Refer to defaultExCommandMap below.\n *\n * Registers: unnamed, -, a-z, A-Z, 0-9\n *   (Does not respect the special case for number registers when delete\n *    operator is made with these commands: %, (, ),  , /, ?, n, N, {, } )\n *   TODO: Implement the remaining registers.\n *\n * Marks: a-z, A-Z, and 0-9\n *   TODO: Implement the remaining special marks. They have more complex\n *       behavior.\n *\n * Events:\n *  'vim-mode-change' - raised on the editor anytime the current mode changes,\n *                      Event object: {mode: \"visual\", subMode: \"linewise\"}\n *\n * Code structure:\n *  1. Default keymap\n *  2. Variable declarations and short basic helpers\n *  3. Instance (External API) implementation\n *  4. Internal state tracking objects (input state, counter) implementation\n *     and instanstiation\n *  5. Key handler (the main command dispatcher) implementation\n *  6. Motion, operator, and action implementations\n *  7. Helper functions for the key handler, motions, operators, and actions\n *  8. Set up Vim to work as a keymap for CodeMirror.\n *  9. Ex command implementations.\n */\n\ndefine(function(require, exports, module) {\n  'use strict';\n\n  function log() {\n    var d = \"\";\n    function format(p) {\n      if (typeof p != \"object\")\n        return p + \"\";\n      if (\"line\" in p) {\n        return p.line + \":\" + p.ch;\n      }\n      if (\"anchor\" in p) {\n        return format(p.anchor) + \"->\" + format(p.head);\n      }\n      if (Array.isArray(p))\n        return \"[\" + p.map(function(x) {\n          return format(x);\n        }) + \"]\";\n      return JSON.stringify(p);\n    }\n    for (var i = 0; i < arguments.length; i++) {\n      var p = arguments[i];\n      var f = format(p);\n      d += f + \"  \";\n    }\n    console.log(d);\n  }\n  var Range = require(\"../range\").Range;\n  var EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\n  var dom = require(\"../lib/dom\");\n  var oop = require(\"../lib/oop\");\n  var KEYS = require(\"../lib/keys\");\n  var event = require(\"../lib/event\");\n  var Search = require(\"../search\").Search;\n  var useragent = require(\"../lib/useragent\");\n  var SearchHighlight = require(\"../search_highlight\").SearchHighlight;\n  var multiSelectCommands = require(\"../commands/multi_select_commands\");\n  var TextModeTokenRe = require(\"../mode/text\").Mode.prototype.tokenRe;\n  require(\"../multi_select\");\n\n  var CodeMirror = function(ace) {\n    this.ace = ace;\n    this.state = {};\n    this.marks = {};\n    this.$uid = 0;\n    this.onChange = this.onChange.bind(this);\n    this.onSelectionChange = this.onSelectionChange.bind(this);\n    this.onBeforeEndOperation = this.onBeforeEndOperation.bind(this);\n    this.ace.on('change', this.onChange);\n    this.ace.on('changeSelection', this.onSelectionChange);\n    this.ace.on('beforeEndOperation', this.onBeforeEndOperation);\n  };\n  CodeMirror.Pos = function(line, ch) {\n    if (!(this instanceof Pos)) return new Pos(line, ch);\n    this.line = line; this.ch = ch;\n  };\n  CodeMirror.defineOption = function(name, val, setter) {};\n  CodeMirror.commands = {\n    redo: function(cm) { cm.ace.redo(); },\n    undo: function(cm) { cm.ace.undo(); },\n    newlineAndIndent: function(cm) { cm.ace.insert(\"\\n\"); }\n  };\n  CodeMirror.keyMap = {};\n  CodeMirror.addClass = CodeMirror.rmClass =\n  CodeMirror.e_stop = function() {};\n  CodeMirror.keyName = function(e) {\n    if (e.key) return e.key;\n    var key = (KEYS[e.keyCode] || \"\");\n    if (key.length == 1) key = key.toUpperCase();\n    key = event.getModifierString(e).replace(/(^|-)\\w/g, function(m) {\n      return m.toUpperCase();\n    }) + key;\n    return key;\n  };\n  CodeMirror.keyMap['default'] = function(key) {\n    return function(cm) {\n      var cmd = cm.ace.commands.commandKeyBinding[key.toLowerCase()];\n      return cmd && cm.ace.execCommand(cmd) !== false;\n    };\n  };\n  CodeMirror.lookupKey = function lookupKey(key, map, handle) {\n    if (typeof map == \"string\")\n      map = CodeMirror.keyMap[map];\n    var found = typeof map == \"function\" ? map(key) : map[key];\n    if (found === false) return \"nothing\";\n    if (found === \"...\") return \"multi\";\n    if (found != null && handle(found)) return \"handled\";\n\n    if (map.fallthrough) {\n      if (!Array.isArray(map.fallthrough))\n        return lookupKey(key, map.fallthrough, handle);\n      for (var i = 0; i < map.fallthrough.length; i++) {\n        var result = lookupKey(key, map.fallthrough[i], handle);\n        if (result) return result;\n      }\n    }\n  };\n\n  CodeMirror.signal = function(o, name, e) { return o._signal(name, e) };\n  CodeMirror.on = event.addListener;\n  CodeMirror.off = event.removeListener;\n  CodeMirror.isWordChar = function(ch) {\n    if (ch < \"\\x7f\") return /^\\w$/.test(ch);\n    TextModeTokenRe.lastIndex = 0;\n    return TextModeTokenRe.test(ch);\n  };\n  \n(function() {\n  oop.implement(CodeMirror.prototype, EventEmitter);\n  \n  this.destroy = function() {\n    this.ace.off('change', this.onChange);\n    this.ace.off('changeSelection', this.onSelectionChange);\n    this.ace.off('beforeEndOperation', this.onBeforeEndOperation);\n    this.removeOverlay();\n  };\n  this.virtualSelectionMode = function() {\n    return this.ace.inVirtualSelectionMode && this.ace.selection.index;\n  };\n  this.onChange = function(delta) {\n    var change = { text: delta.action[0] == 'i' ? delta.lines : [] };\n    var curOp = this.curOp = this.curOp || {};\n    if (!curOp.changeHandlers)\n      curOp.changeHandlers = this._eventRegistry[\"change\"] && this._eventRegistry[\"change\"].slice();\n    if (this.virtualSelectionMode()) return;\n    if (!curOp.lastChange) {\n      curOp.lastChange = curOp.change = change;\n    } else {\n      curOp.lastChange.next = curOp.lastChange = change;\n    }\n    this.$updateMarkers(delta);\n  };\n  this.onSelectionChange = function() {\n    var curOp = this.curOp = this.curOp || {};\n    if (!curOp.cursorActivityHandlers)\n      curOp.cursorActivityHandlers = this._eventRegistry[\"cursorActivity\"] && this._eventRegistry[\"cursorActivity\"].slice();\n    this.curOp.cursorActivity = true;\n    if (this.ace.inMultiSelectMode) {\n      this.ace.keyBinding.removeKeyboardHandler(multiSelectCommands.keyboardHandler);\n    }\n  };\n  this.operation = function(fn, force) {\n    if (!force && this.curOp || force && this.curOp && this.curOp.force) {\n      return fn();\n    }\n    if (force || !this.ace.curOp) {\n      if (this.curOp)\n        this.onBeforeEndOperation();\n    }\n    if (!this.ace.curOp) {\n      var prevOp = this.ace.prevOp;\n      this.ace.startOperation({\n        command: { name: \"vim\",  scrollIntoView: \"cursor\" }\n      });\n    }\n    var curOp = this.curOp = this.curOp || {};\n    this.curOp.force = force;\n    var result = fn();\n    if (this.ace.curOp && this.ace.curOp.command.name == \"vim\") {\n      this.ace.endOperation();\n      if (!curOp.cursorActivity && !curOp.lastChange && prevOp)\n        this.ace.prevOp = prevOp;\n    }\n    if (force || !this.ace.curOp) {\n      if (this.curOp)\n        this.onBeforeEndOperation();\n    }\n    return result;\n  };\n  this.onBeforeEndOperation = function() {\n    var op = this.curOp;\n    if (op) {\n      if (op.change) { this.signal(\"change\", op.change, op); }\n      if (op && op.cursorActivity) { this.signal(\"cursorActivity\", null, op); }\n      this.curOp = null;\n    }\n  };\n\n  this.signal = function(eventName, e, handlers) {\n    var listeners = handlers ? handlers[eventName + \"Handlers\"]\n        : (this._eventRegistry || {})[eventName];\n    if (!listeners)\n        return;\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++)\n        listeners[i](this, e);\n  };\n  this.firstLine = function() { return 0; };\n  this.lastLine = function() { return this.ace.session.getLength() - 1; };\n  this.lineCount = function() { return this.ace.session.getLength(); };\n  this.setCursor = function(line, ch) {\n    if (typeof line === 'object') {\n      ch = line.ch;\n      line = line.line;\n    }\n    if (!this.ace.inVirtualSelectionMode)\n      this.ace.exitMultiSelectMode();\n    this.ace.session.unfold({row: line, column: ch});\n    this.ace.selection.moveTo(line, ch);\n  };\n  this.getCursor = function(p) {\n    var sel = this.ace.selection;\n    var pos = p == 'anchor' ? (sel.isEmpty() ? sel.lead : sel.anchor) :\n        p == 'head' || !p ? sel.lead : sel.getRange()[p];\n    return toCmPos(pos);\n  };\n  this.listSelections = function(p) {\n    var ranges = this.ace.multiSelect.rangeList.ranges;\n    if (!ranges.length || this.ace.inVirtualSelectionMode)\n      return [{anchor: this.getCursor('anchor'), head: this.getCursor('head')}];\n    return ranges.map(function(r) {\n      return {\n        anchor: this.clipPos(toCmPos(r.cursor == r.end ? r.start : r.end)),\n        head: this.clipPos(toCmPos(r.cursor))\n      };\n    }, this);\n  };\n  this.setSelections = function(p, primIndex) {\n    var sel = this.ace.multiSelect;\n    var ranges = p.map(function(x) {\n      var anchor = toAcePos(x.anchor);\n      var head = toAcePos(x.head);\n      var r = Range.comparePoints(anchor, head) < 0\n        ? new Range.fromPoints(anchor, head)\n        : new Range.fromPoints(head, anchor);\n      r.cursor = Range.comparePoints(r.start, head) ? r.end : r.start;\n      return r;\n    });\n    \n    if (this.ace.inVirtualSelectionMode) {\n      this.ace.selection.fromOrientedRange(ranges[0]);\n      return;\n    }\n    if (!primIndex) {\n        ranges = ranges.reverse();\n    } else if (ranges[primIndex]) {\n       ranges.push(ranges.splice(primIndex, 1)[0]);\n    }\n    sel.toSingleRange(ranges[0].clone());\n    var session = this.ace.session;\n    for (var i = 0; i < ranges.length; i++) {\n      var range = session.$clipRangeToDocument(ranges[i]); // todo why ace doesn't do this?\n      sel.addRange(range);\n    }\n  };\n  this.setSelection = function(a, h, options) {\n    var sel = this.ace.selection;\n    sel.moveTo(a.line, a.ch);\n    sel.selectTo(h.line, h.ch);\n    if (options && options.origin == '*mouse') {\n      this.onBeforeEndOperation();\n    }\n  };\n  this.somethingSelected = function(p) {\n    return !this.ace.selection.isEmpty();\n  };\n  this.clipPos = function(p) {\n    var pos = this.ace.session.$clipPositionToDocument(p.line, p.ch);\n    return toCmPos(pos);\n  };\n  this.markText = function(cursor) {\n    // only used for fat-cursor, not needed\n    return {clear: function() {}, find: function() {}};\n  };\n  this.$updateMarkers = function(delta) {\n    var isInsert = delta.action == \"insert\";\n    var start = delta.start;\n    var end = delta.end;\n    var rowShift = (end.row - start.row) * (isInsert ? 1 : -1);\n    var colShift = (end.column - start.column) * (isInsert ? 1 : -1);\n    if (isInsert) end = start;\n    \n    for (var i in this.marks) {\n      var point = this.marks[i];\n      var cmp = Range.comparePoints(point, start);\n      if (cmp < 0) {\n        continue; // delta starts after the range\n      }\n      if (cmp === 0) {\n        if (isInsert) {\n          if (point.bias == 1) {\n            cmp = 1;\n          } else {\n            point.bias = -1;\n            continue;\n          }\n        }\n      }\n      var cmp2 = isInsert ? cmp : Range.comparePoints(point, end);\n      if (cmp2 > 0) {\n        point.row += rowShift;\n        point.column += point.row == end.row ? colShift : 0;\n        continue;\n      }\n      if (!isInsert && cmp2 <= 0) {\n        point.row = start.row;\n        point.column = start.column;\n        if (cmp2 === 0)\n          point.bias = 1;\n      }\n    }\n  };\n  var Marker = function(cm, id, row, column) {\n    this.cm = cm;\n    this.id = id;\n    this.row = row;\n    this.column = column;\n    cm.marks[this.id] = this;\n  };\n  Marker.prototype.clear = function() { delete this.cm.marks[this.id] };\n  Marker.prototype.find = function() { return toCmPos(this) };\n  this.setBookmark = function(cursor, options) {\n    var bm = new Marker(this, this.$uid++, cursor.line, cursor.ch);\n    if (!options || !options.insertLeft)\n      bm.$insertRight = true;\n    this.marks[bm.id] = bm;\n    return bm;\n  };\n  this.moveH = function(increment, unit) {\n    if (unit == 'char') {\n      var sel = this.ace.selection;\n      sel.clearSelection();\n      sel.moveCursorBy(0, increment);\n    }\n  };\n  this.findPosV = function(start, amount, unit, goalColumn) {\n    if (unit == 'page') {\n      var renderer = this.ace.renderer;\n      var config = renderer.layerConfig;\n      amount = amount * Math.floor(config.height / config.lineHeight);\n      unit = 'line';\n    }\n    if (unit == 'line') {\n      var screenPos = this.ace.session.documentToScreenPosition(start.line, start.ch);\n      if (goalColumn != null)\n        screenPos.column = goalColumn;\n      screenPos.row += amount;\n      // not what codemirror does but vim mode needs only this\n      screenPos.row = Math.min(Math.max(0, screenPos.row), this.ace.session.getScreenLength() - 1);\n      var pos = this.ace.session.screenToDocumentPosition(screenPos.row, screenPos.column);\n      return toCmPos(pos);\n    } else {\n      debugger;\n    }\n  };\n  this.charCoords = function(pos, mode) {\n    if (mode == 'div' || !mode) {\n      var sc = this.ace.session.documentToScreenPosition(pos.line, pos.ch);\n      return {left: sc.column, top: sc.row};\n    }if (mode == 'local') {\n      var renderer = this.ace.renderer;\n      var sc = this.ace.session.documentToScreenPosition(pos.line, pos.ch);\n      var lh = renderer.layerConfig.lineHeight;\n      var cw = renderer.layerConfig.characterWidth;\n      var top = lh * sc.row;\n      return {left: sc.column * cw, top: top, bottom: top + lh};\n    }\n  };\n  this.coordsChar = function(pos, mode) {\n    var renderer = this.ace.renderer;\n    if (mode == 'local') {\n      var row = Math.max(0, Math.floor(pos.top / renderer.lineHeight));\n      var col = Math.max(0, Math.floor(pos.left / renderer.characterWidth));\n      var ch = renderer.session.screenToDocumentPosition(row, col);\n      return toCmPos(ch);\n    } else if (mode == 'div') {\n      throw \"not implemented\";\n    }\n  };\n  this.getSearchCursor = function(query, pos, caseFold) {\n    var caseSensitive = false;\n    var isRegexp = false;\n    if (query instanceof RegExp && !query.global) {\n      caseSensitive = !query.ignoreCase;\n      query = query.source;\n      isRegexp = true;\n    }\n    var search = new Search();\n    if (pos.ch == undefined) pos.ch = Number.MAX_VALUE;\n    var acePos = {row: pos.line, column: pos.ch};\n    var cm = this;\n    var last = null;\n    return {\n      findNext: function() { return this.find(false) },\n      findPrevious: function() {return this.find(true) },\n      find: function(back) {\n        search.setOptions({\n          needle: query,\n          caseSensitive: caseSensitive,\n          wrap: false,\n          backwards: back,\n          regExp: isRegexp,\n          start: last || acePos\n        });\n        var range = search.find(cm.ace.session);\n        if (range && range.isEmpty()) {\n          if (cm.getLine(range.start.row).length == range.start.column) {\n            search.$options.start = range;\n            range = search.find(cm.ace.session);\n          }\n        }\n        last = range;\n        return last;\n      },\n      from: function() { return last && toCmPos(last.start) },\n      to: function() { return last && toCmPos(last.end) },\n      replace: function(text) {\n        if (last) {\n          last.end = cm.ace.session.doc.replace(last, text);\n        }\n      }\n    };\n  };\n  this.scrollTo = function(x, y) {\n    var renderer = this.ace.renderer;\n    var config = renderer.layerConfig;\n    var maxHeight = config.maxHeight;\n    maxHeight -= (renderer.$size.scrollerHeight - renderer.lineHeight) * renderer.$scrollPastEnd;\n    if (y != null) this.ace.session.setScrollTop(Math.max(0, Math.min(y, maxHeight)));\n    if (x != null) this.ace.session.setScrollLeft(Math.max(0, Math.min(x, config.width)));\n  };\n  this.scrollInfo = function() { return 0; };\n  this.scrollIntoView = function(pos, margin) {\n    if (pos) {\n      var renderer = this.ace.renderer;\n      var viewMargin = { \"top\": 0, \"bottom\": margin };\n      renderer.scrollCursorIntoView(toAcePos(pos),\n        (renderer.lineHeight * 2) / renderer.$size.scrollerHeight, viewMargin);\n    }\n  };\n  this.getLine = function(row) { return this.ace.session.getLine(row) };\n  this.getRange = function(s, e) {\n    return this.ace.session.getTextRange(new Range(s.line, s.ch, e.line, e.ch));\n  };\n  this.replaceRange = function(text, s, e) {\n    if (!e) e = s;\n    return this.ace.session.replace(new Range(s.line, s.ch, e.line, e.ch), text);\n  };\n  this.replaceSelections = function(p) {\n    var sel = this.ace.selection;\n    if (this.ace.inVirtualSelectionMode) {\n      this.ace.session.replace(sel.getRange(), p[0] || \"\");\n      return;\n    }\n    sel.inVirtualSelectionMode = true;\n    var ranges = sel.rangeList.ranges;\n    if (!ranges.length) ranges = [this.ace.multiSelect.getRange()];\n    for (var i = ranges.length; i--;)\n       this.ace.session.replace(ranges[i], p[i] || \"\");\n    sel.inVirtualSelectionMode = false;\n  };\n  this.getSelection = function() {\n    return this.ace.getSelectedText();\n  };\n  this.getSelections = function() {\n    return this.listSelections().map(function(x) {\n      return this.getRange(x.anchor, x.head);\n    }, this);\n  };\n  this.getInputField = function() {\n    return this.ace.textInput.getElement();\n  };\n  this.getWrapperElement = function() {\n    return this.ace.containter;\n  };\n  var optMap = {\n    indentWithTabs: \"useSoftTabs\",\n    indentUnit: \"tabSize\",\n    tabSize: \"tabSize\",\n    firstLineNumber: \"firstLineNumber\",\n    readOnly: \"readOnly\"\n  };\n  this.setOption = function(name, val) {\n    this.state[name] = val;\n    switch (name) {\n      case 'indentWithTabs':\n        name = optMap[name];\n        val = !val;\n      break;\n      default:\n        name = optMap[name];\n    }\n    if (name)\n      this.ace.setOption(name, val);\n  };\n  this.getOption = function(name, val) {\n    var aceOpt = optMap[name];\n    if (aceOpt)\n      val = this.ace.getOption(aceOpt);\n    switch (name) {\n      case 'indentWithTabs':\n        name = optMap[name];\n        return !val;\n    }\n    return aceOpt ? val : this.state[name];\n  };\n  this.toggleOverwrite = function(on) {\n    this.state.overwrite = on;\n    return this.ace.setOverwrite(on);\n  };\n  this.addOverlay = function(o) {\n    if (!this.$searchHighlight || !this.$searchHighlight.session) {\n      var highlight = new SearchHighlight(null, \"ace_highlight-marker\", \"text\");\n      var marker = this.ace.session.addDynamicMarker(highlight);\n      highlight.id = marker.id;\n      highlight.session = this.ace.session;\n      highlight.destroy = function(o) {\n        highlight.session.off(\"change\", highlight.updateOnChange);\n        highlight.session.off(\"changeEditor\", highlight.destroy);\n        highlight.session.removeMarker(highlight.id);\n        highlight.session = null;\n      };\n      highlight.updateOnChange = function(delta) {\n        var row = delta.start.row;\n        if (row == delta.end.row) highlight.cache[row] = undefined;\n        else highlight.cache.splice(row, highlight.cache.length);\n      };\n      highlight.session.on(\"changeEditor\", highlight.destroy);\n      highlight.session.on(\"change\", highlight.updateOnChange);\n    }\n    var re = new RegExp(o.query.source, \"gmi\");\n    this.$searchHighlight = o.highlight = highlight;\n    this.$searchHighlight.setRegexp(re);\n    this.ace.renderer.updateBackMarkers();\n  };\n  this.removeOverlay = function(o) {\n    if (this.$searchHighlight && this.$searchHighlight.session) {\n      this.$searchHighlight.destroy();\n    }\n  };\n  this.getScrollInfo = function() {\n    var renderer = this.ace.renderer;\n    var config = renderer.layerConfig;\n    return {\n      left: renderer.scrollLeft,\n      top: renderer.scrollTop,\n      height: config.maxHeight,\n      width: config.width,\n      clientHeight: config.height,\n      clientWidth: config.width\n    };\n  };\n  this.getValue = function() {\n    return this.ace.getValue();\n  };\n  this.setValue = function(v) {\n    return this.ace.setValue(v);\n  };\n  this.getTokenTypeAt = function(pos) {\n    var token = this.ace.session.getTokenAt(pos.line, pos.ch);\n    return token && /comment|string/.test(token.type) ? \"string\" : \"\";\n  };\n  this.findMatchingBracket = function(pos) {\n    var m = this.ace.session.findMatchingBracket(toAcePos(pos));\n    return {to: m && toCmPos(m)};\n  };\n  this.indentLine = function(line, method) {\n    if (method === true)\n        this.ace.session.indentRows(line, line, \"\\t\");\n    else if (method === false)\n        this.ace.session.outdentRows(new Range(line, 0, line, 0));\n  };\n  this.indexFromPos = function(pos) {\n    return this.ace.session.doc.positionToIndex(toAcePos(pos));\n  };\n  this.posFromIndex = function(index) {\n    return toCmPos(this.ace.session.doc.indexToPosition(index));\n  };\n  this.focus = function(index) {\n    return this.ace.focus();\n  };\n  this.blur = function(index) {\n    return this.ace.blur();\n  };\n  this.defaultTextHeight = function(index) {\n    return this.ace.renderer.layerConfig.lineHeight;\n  };\n  this.scanForBracket = function(pos, dir, _, options) {\n    var re = options.bracketRegex.source;\n    if (dir == 1) {\n      var m = this.ace.session.$findClosingBracket(re.slice(1, 2), toAcePos(pos), /paren|text/);\n    } else {\n      var m = this.ace.session.$findOpeningBracket(re.slice(-2, -1), {row: pos.line, column: pos.ch + 1}, /paren|text/);\n    }\n    return m && {pos: toCmPos(m)};\n  };\n  this.refresh = function() {\n    return this.ace.resize(true);\n  };\n  this.getMode = function() {\n    return { name : this.getOption(\"mode\") };\n  }\n}).call(CodeMirror.prototype);\n  function toAcePos(cmPos) {\n    return {row: cmPos.line, column: cmPos.ch};\n  }\n  function toCmPos(acePos) {\n    return new Pos(acePos.row, acePos.column);\n  }\n\n  var StringStream = CodeMirror.StringStream = function(string, tabSize) {\n    this.pos = this.start = 0;\n    this.string = string;\n    this.tabSize = tabSize || 8;\n    this.lastColumnPos = this.lastColumnValue = 0;\n    this.lineStart = 0;\n  };\n\n  StringStream.prototype = {\n    eol: function() {return this.pos >= this.string.length;},\n    sol: function() {return this.pos == this.lineStart;},\n    peek: function() {return this.string.charAt(this.pos) || undefined;},\n    next: function() {\n      if (this.pos < this.string.length)\n        return this.string.charAt(this.pos++);\n    },\n    eat: function(match) {\n      var ch = this.string.charAt(this.pos);\n      if (typeof match == \"string\") var ok = ch == match;\n      else var ok = ch && (match.test ? match.test(ch) : match(ch));\n      if (ok) {++this.pos; return ch;}\n    },\n    eatWhile: function(match) {\n      var start = this.pos;\n      while (this.eat(match)){}\n      return this.pos > start;\n    },\n    eatSpace: function() {\n      var start = this.pos;\n      while (/[\\s\\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos;\n      return this.pos > start;\n    },\n    skipToEnd: function() {this.pos = this.string.length;},\n    skipTo: function(ch) {\n      var found = this.string.indexOf(ch, this.pos);\n      if (found > -1) {this.pos = found; return true;}\n    },\n    backUp: function(n) {this.pos -= n;},\n    column: function() {\n      throw \"not implemented\";\n    },\n    indentation: function() {\n      throw \"not implemented\";\n    },\n    match: function(pattern, consume, caseInsensitive) {\n      if (typeof pattern == \"string\") {\n        var cased = function(str) {return caseInsensitive ? str.toLowerCase() : str;};\n        var substr = this.string.substr(this.pos, pattern.length);\n        if (cased(substr) == cased(pattern)) {\n          if (consume !== false) this.pos += pattern.length;\n          return true;\n        }\n      } else {\n        var match = this.string.slice(this.pos).match(pattern);\n        if (match && match.index > 0) return null;\n        if (match && consume !== false) this.pos += match[0].length;\n        return match;\n      }\n    },\n    current: function(){return this.string.slice(this.start, this.pos);},\n    hideFirstChars: function(n, inner) {\n      this.lineStart += n;\n      try { return inner(); }\n      finally { this.lineStart -= n; }\n    }\n  };\n\n// todo replace with showCommandLine\nCodeMirror.defineExtension = function(name, fn) {\n  CodeMirror.prototype[name] = fn;\n};\ndom.importCssString(\".normal-mode .ace_cursor{\\\n  border: 1px solid red;\\\n  background-color: red;\\\n  opacity: 0.5;\\\n}\\\n.normal-mode .ace_hidden-cursors .ace_cursor{\\\n  background-color: transparent;\\\n}\\\n.ace_dialog {\\\n  position: absolute;\\\n  left: 0; right: 0;\\\n  background: white;\\\n  z-index: 15;\\\n  padding: .1em .8em;\\\n  overflow: hidden;\\\n  color: #333;\\\n}\\\n.ace_dialog-top {\\\n  border-bottom: 1px solid #eee;\\\n  top: 0;\\\n}\\\n.ace_dialog-bottom {\\\n  border-top: 1px solid #eee;\\\n  bottom: 0;\\\n}\\\n.ace_dialog input {\\\n  border: none;\\\n  outline: none;\\\n  background: transparent;\\\n  width: 20em;\\\n  color: inherit;\\\n  font-family: monospace;\\\n}\", \"vimMode\");\n(function() {\n  function dialogDiv(cm, template, bottom) {\n    var wrap = cm.ace.container;\n    var dialog;\n    dialog = wrap.appendChild(document.createElement(\"div\"));\n    if (bottom)\n      dialog.className = \"ace_dialog ace_dialog-bottom\";\n    else\n      dialog.className = \"ace_dialog ace_dialog-top\";\n\n    if (typeof template == \"string\") {\n      dialog.innerHTML = template;\n    } else { // Assuming it's a detached DOM element.\n      dialog.appendChild(template);\n    }\n    return dialog;\n  }\n\n  function closeNotification(cm, newVal) {\n    if (cm.state.currentNotificationClose)\n      cm.state.currentNotificationClose();\n    cm.state.currentNotificationClose = newVal;\n  }\n\n  CodeMirror.defineExtension(\"openDialog\", function(template, callback, options) {\n    if (this.virtualSelectionMode()) return;\n    if (!options) options = {};\n\n    closeNotification(this, null);\n\n    var dialog = dialogDiv(this, template, options.bottom);\n    var closed = false, me = this;\n    function close(newVal) {\n      if (typeof newVal == 'string') {\n        inp.value = newVal;\n      } else {\n        if (closed) return;\n        closed = true;\n        dialog.parentNode.removeChild(dialog);\n        me.focus();\n\n        if (options.onClose) options.onClose(dialog);\n      }\n    }\n\n    var inp = dialog.getElementsByTagName(\"input\")[0], button;\n    if (inp) {\n      if (options.value) {\n        inp.value = options.value;\n        if (options.select !== false) inp.select();\n      }\n\n      if (options.onInput)\n        CodeMirror.on(inp, \"input\", function(e) { options.onInput(e, inp.value, close);});\n      if (options.onKeyUp)\n        CodeMirror.on(inp, \"keyup\", function(e) {options.onKeyUp(e, inp.value, close);});\n\n      CodeMirror.on(inp, \"keydown\", function(e) {\n        if (options && options.onKeyDown && options.onKeyDown(e, inp.value, close)) { return; }\n        if (e.keyCode == 27 || (options.closeOnEnter !== false && e.keyCode == 13)) {\n          inp.blur();\n          CodeMirror.e_stop(e);\n          close();\n        }\n        if (e.keyCode == 13) callback(inp.value);\n      });\n\n      if (options.closeOnBlur !== false) CodeMirror.on(inp, \"blur\", close);\n\n      inp.focus();\n    } else if (button = dialog.getElementsByTagName(\"button\")[0]) {\n      CodeMirror.on(button, \"click\", function() {\n        close();\n        me.focus();\n      });\n\n      if (options.closeOnBlur !== false) CodeMirror.on(button, \"blur\", close);\n\n      button.focus();\n    }\n    return close;\n  });\n\n  CodeMirror.defineExtension(\"openNotification\", function(template, options) {\n    if (this.virtualSelectionMode()) return;\n    closeNotification(this, close);\n    var dialog = dialogDiv(this, template, options && options.bottom);\n    var closed = false, doneTimer;\n    var duration = options && typeof options.duration !== \"undefined\" ? options.duration : 5000;\n\n    function close() {\n      if (closed) return;\n      closed = true;\n      clearTimeout(doneTimer);\n      dialog.parentNode.removeChild(dialog);\n    }\n\n    CodeMirror.on(dialog, 'click', function(e) {\n      CodeMirror.e_preventDefault(e);\n      close();\n    });\n\n    if (duration)\n      doneTimer = setTimeout(close, duration);\n\n    return close;\n  });\n})();\n\n  \n  var defaultKeymap = [\n    // Key to key mapping. This goes first to make it possible to override\n    // existing mappings.\n    { keys: '<Left>', type: 'keyToKey', toKeys: 'h' },\n    { keys: '<Right>', type: 'keyToKey', toKeys: 'l' },\n    { keys: '<Up>', type: 'keyToKey', toKeys: 'k' },\n    { keys: '<Down>', type: 'keyToKey', toKeys: 'j' },\n    { keys: '<Space>', type: 'keyToKey', toKeys: 'l' },\n    { keys: '<BS>', type: 'keyToKey', toKeys: 'h', context: 'normal'},\n    { keys: '<C-Space>', type: 'keyToKey', toKeys: 'W' },\n    { keys: '<C-BS>', type: 'keyToKey', toKeys: 'B', context: 'normal' },\n    { keys: '<S-Space>', type: 'keyToKey', toKeys: 'w' },\n    { keys: '<S-BS>', type: 'keyToKey', toKeys: 'b', context: 'normal' },\n    { keys: '<C-n>', type: 'keyToKey', toKeys: 'j' },\n    { keys: '<C-p>', type: 'keyToKey', toKeys: 'k' },\n    { keys: '<C-[>', type: 'keyToKey', toKeys: '<Esc>' },\n    { keys: '<C-c>', type: 'keyToKey', toKeys: '<Esc>' },\n    { keys: '<C-[>', type: 'keyToKey', toKeys: '<Esc>', context: 'insert' },\n    { keys: '<C-c>', type: 'keyToKey', toKeys: '<Esc>', context: 'insert' },\n    { keys: 's', type: 'keyToKey', toKeys: 'cl', context: 'normal' },\n    { keys: 's', type: 'keyToKey', toKeys: 'c', context: 'visual'},\n    { keys: 'S', type: 'keyToKey', toKeys: 'cc', context: 'normal' },\n    { keys: 'S', type: 'keyToKey', toKeys: 'VdO', context: 'visual' },\n    { keys: '<Home>', type: 'keyToKey', toKeys: '0' },\n    { keys: '<End>', type: 'keyToKey', toKeys: '$' },\n    { keys: '<PageUp>', type: 'keyToKey', toKeys: '<C-b>' },\n    { keys: '<PageDown>', type: 'keyToKey', toKeys: '<C-f>' },\n    { keys: '<CR>', type: 'keyToKey', toKeys: 'j^', context: 'normal' },\n    // Motions\n    { keys: 'H', type: 'motion', motion: 'moveToTopLine', motionArgs: { linewise: true, toJumplist: true }},\n    { keys: 'M', type: 'motion', motion: 'moveToMiddleLine', motionArgs: { linewise: true, toJumplist: true }},\n    { keys: 'L', type: 'motion', motion: 'moveToBottomLine', motionArgs: { linewise: true, toJumplist: true }},\n    { keys: 'h', type: 'motion', motion: 'moveByCharacters', motionArgs: { forward: false }},\n    { keys: 'l', type: 'motion', motion: 'moveByCharacters', motionArgs: { forward: true }},\n    { keys: 'j', type: 'motion', motion: 'moveByLines', motionArgs: { forward: true, linewise: true }},\n    { keys: 'k', type: 'motion', motion: 'moveByLines', motionArgs: { forward: false, linewise: true }},\n    { keys: 'gj', type: 'motion', motion: 'moveByDisplayLines', motionArgs: { forward: true }},\n    { keys: 'gk', type: 'motion', motion: 'moveByDisplayLines', motionArgs: { forward: false }},\n    { keys: 'w', type: 'motion', motion: 'moveByWords', motionArgs: { forward: true, wordEnd: false }},\n    { keys: 'W', type: 'motion', motion: 'moveByWords', motionArgs: { forward: true, wordEnd: false, bigWord: true }},\n    { keys: 'e', type: 'motion', motion: 'moveByWords', motionArgs: { forward: true, wordEnd: true, inclusive: true }},\n    { keys: 'E', type: 'motion', motion: 'moveByWords', motionArgs: { forward: true, wordEnd: true, bigWord: true, inclusive: true }},\n    { keys: 'b', type: 'motion', motion: 'moveByWords', motionArgs: { forward: false, wordEnd: false }},\n    { keys: 'B', type: 'motion', motion: 'moveByWords', motionArgs: { forward: false, wordEnd: false, bigWord: true }},\n    { keys: 'ge', type: 'motion', motion: 'moveByWords', motionArgs: { forward: false, wordEnd: true, inclusive: true }},\n    { keys: 'gE', type: 'motion', motion: 'moveByWords', motionArgs: { forward: false, wordEnd: true, bigWord: true, inclusive: true }},\n    { keys: '{', type: 'motion', motion: 'moveByParagraph', motionArgs: { forward: false, toJumplist: true }},\n    { keys: '}', type: 'motion', motion: 'moveByParagraph', motionArgs: { forward: true, toJumplist: true }},\n    { keys: '<C-f>', type: 'motion', motion: 'moveByPage', motionArgs: { forward: true }},\n    { keys: '<C-b>', type: 'motion', motion: 'moveByPage', motionArgs: { forward: false }},\n    { keys: '<C-d>', type: 'motion', motion: 'moveByScroll', motionArgs: { forward: true, explicitRepeat: true }},\n    { keys: '<C-u>', type: 'motion', motion: 'moveByScroll', motionArgs: { forward: false, explicitRepeat: true }},\n    { keys: 'gg', type: 'motion', motion: 'moveToLineOrEdgeOfDocument', motionArgs: { forward: false, explicitRepeat: true, linewise: true, toJumplist: true }},\n    { keys: 'G', type: 'motion', motion: 'moveToLineOrEdgeOfDocument', motionArgs: { forward: true, explicitRepeat: true, linewise: true, toJumplist: true }},\n    { keys: '0', type: 'motion', motion: 'moveToStartOfLine' },\n    { keys: '^', type: 'motion', motion: 'moveToFirstNonWhiteSpaceCharacter' },\n    { keys: '+', type: 'motion', motion: 'moveByLines', motionArgs: { forward: true, toFirstChar:true }},\n    { keys: '-', type: 'motion', motion: 'moveByLines', motionArgs: { forward: false, toFirstChar:true }},\n    { keys: '_', type: 'motion', motion: 'moveByLines', motionArgs: { forward: true, toFirstChar:true, repeatOffset:-1 }},\n    { keys: '$', type: 'motion', motion: 'moveToEol', motionArgs: { inclusive: true }},\n    { keys: '%', type: 'motion', motion: 'moveToMatchedSymbol', motionArgs: { inclusive: true, toJumplist: true }},\n    { keys: 'f<character>', type: 'motion', motion: 'moveToCharacter', motionArgs: { forward: true , inclusive: true }},\n    { keys: 'F<character>', type: 'motion', motion: 'moveToCharacter', motionArgs: { forward: false }},\n    { keys: 't<character>', type: 'motion', motion: 'moveTillCharacter', motionArgs: { forward: true, inclusive: true }},\n    { keys: 'T<character>', type: 'motion', motion: 'moveTillCharacter', motionArgs: { forward: false }},\n    { keys: ';', type: 'motion', motion: 'repeatLastCharacterSearch', motionArgs: { forward: true }},\n    { keys: ',', type: 'motion', motion: 'repeatLastCharacterSearch', motionArgs: { forward: false }},\n    { keys: '\\'<character>', type: 'motion', motion: 'goToMark', motionArgs: {toJumplist: true, linewise: true}},\n    { keys: '`<character>', type: 'motion', motion: 'goToMark', motionArgs: {toJumplist: true}},\n    { keys: ']`', type: 'motion', motion: 'jumpToMark', motionArgs: { forward: true } },\n    { keys: '[`', type: 'motion', motion: 'jumpToMark', motionArgs: { forward: false } },\n    { keys: ']\\'', type: 'motion', motion: 'jumpToMark', motionArgs: { forward: true, linewise: true } },\n    { keys: '[\\'', type: 'motion', motion: 'jumpToMark', motionArgs: { forward: false, linewise: true } },\n    // the next two aren't motions but must come before more general motion declarations\n    { keys: ']p', type: 'action', action: 'paste', isEdit: true, actionArgs: { after: true, isEdit: true, matchIndent: true}},\n    { keys: '[p', type: 'action', action: 'paste', isEdit: true, actionArgs: { after: false, isEdit: true, matchIndent: true}},\n    { keys: ']<character>', type: 'motion', motion: 'moveToSymbol', motionArgs: { forward: true, toJumplist: true}},\n    { keys: '[<character>', type: 'motion', motion: 'moveToSymbol', motionArgs: { forward: false, toJumplist: true}},\n    { keys: '|', type: 'motion', motion: 'moveToColumn'},\n    { keys: 'o', type: 'motion', motion: 'moveToOtherHighlightedEnd', context:'visual'},\n    { keys: 'O', type: 'motion', motion: 'moveToOtherHighlightedEnd', motionArgs: {sameLine: true}, context:'visual'},\n    // Operators\n    { keys: 'd', type: 'operator', operator: 'delete' },\n    { keys: 'y', type: 'operator', operator: 'yank' },\n    { keys: 'c', type: 'operator', operator: 'change' },\n    { keys: '>', type: 'operator', operator: 'indent', operatorArgs: { indentRight: true }},\n    { keys: '<', type: 'operator', operator: 'indent', operatorArgs: { indentRight: false }},\n    { keys: 'g~', type: 'operator', operator: 'changeCase' },\n    { keys: 'gu', type: 'operator', operator: 'changeCase', operatorArgs: {toLower: true}, isEdit: true },\n    { keys: 'gU', type: 'operator', operator: 'changeCase', operatorArgs: {toLower: false}, isEdit: true },\n    { keys: 'n', type: 'motion', motion: 'findNext', motionArgs: { forward: true, toJumplist: true }},\n    { keys: 'N', type: 'motion', motion: 'findNext', motionArgs: { forward: false, toJumplist: true }},\n    // Operator-Motion dual commands\n    { keys: 'x', type: 'operatorMotion', operator: 'delete', motion: 'moveByCharacters', motionArgs: { forward: true }, operatorMotionArgs: { visualLine: false }},\n    { keys: 'X', type: 'operatorMotion', operator: 'delete', motion: 'moveByCharacters', motionArgs: { forward: false }, operatorMotionArgs: { visualLine: true }},\n    { keys: 'D', type: 'operatorMotion', operator: 'delete', motion: 'moveToEol', motionArgs: { inclusive: true }, context: 'normal'},\n    { keys: 'D', type: 'operator', operator: 'delete', operatorArgs: { linewise: true }, context: 'visual'},\n    { keys: 'Y', type: 'operatorMotion', operator: 'yank', motion: 'moveToEol', motionArgs: { inclusive: true }, context: 'normal'},\n    { keys: 'Y', type: 'operator', operator: 'yank', operatorArgs: { linewise: true }, context: 'visual'},\n    { keys: 'C', type: 'operatorMotion', operator: 'change', motion: 'moveToEol', motionArgs: { inclusive: true }, context: 'normal'},\n    { keys: 'C', type: 'operator', operator: 'change', operatorArgs: { linewise: true }, context: 'visual'},\n    { keys: '~', type: 'operatorMotion', operator: 'changeCase', motion: 'moveByCharacters', motionArgs: { forward: true }, operatorArgs: { shouldMoveCursor: true }, context: 'normal'},\n    { keys: '~', type: 'operator', operator: 'changeCase', context: 'visual'},\n    { keys: '<C-w>', type: 'operatorMotion', operator: 'delete', motion: 'moveByWords', motionArgs: { forward: false, wordEnd: false }, context: 'insert' },\n    // Actions\n    { keys: '<C-i>', type: 'action', action: 'jumpListWalk', actionArgs: { forward: true }},\n    { keys: '<C-o>', type: 'action', action: 'jumpListWalk', actionArgs: { forward: false }},\n    { keys: '<C-e>', type: 'action', action: 'scroll', actionArgs: { forward: true, linewise: true }},\n    { keys: '<C-y>', type: 'action', action: 'scroll', actionArgs: { forward: false, linewise: true }},\n    { keys: 'a', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'charAfter' }, context: 'normal' },\n    { keys: 'A', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'eol' }, context: 'normal' },\n    { keys: 'A', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'endOfSelectedArea' }, context: 'visual' },\n    { keys: 'i', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'inplace' }, context: 'normal' },\n    { keys: 'I', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'firstNonBlank'}, context: 'normal' },\n    { keys: 'I', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'startOfSelectedArea' }, context: 'visual' },\n    { keys: 'o', type: 'action', action: 'newLineAndEnterInsertMode', isEdit: true, interlaceInsertRepeat: true, actionArgs: { after: true }, context: 'normal' },\n    { keys: 'O', type: 'action', action: 'newLineAndEnterInsertMode', isEdit: true, interlaceInsertRepeat: true, actionArgs: { after: false }, context: 'normal' },\n    { keys: 'v', type: 'action', action: 'toggleVisualMode' },\n    { keys: 'V', type: 'action', action: 'toggleVisualMode', actionArgs: { linewise: true }},\n    { keys: '<C-v>', type: 'action', action: 'toggleVisualMode', actionArgs: { blockwise: true }},\n    { keys: '<C-q>', type: 'action', action: 'toggleVisualMode', actionArgs: { blockwise: true }},\n    { keys: 'gv', type: 'action', action: 'reselectLastSelection' },\n    { keys: 'J', type: 'action', action: 'joinLines', isEdit: true },\n    { keys: 'p', type: 'action', action: 'paste', isEdit: true, actionArgs: { after: true, isEdit: true }},\n    { keys: 'P', type: 'action', action: 'paste', isEdit: true, actionArgs: { after: false, isEdit: true }},\n    { keys: 'r<character>', type: 'action', action: 'replace', isEdit: true },\n    { keys: '@<character>', type: 'action', action: 'replayMacro' },\n    { keys: 'q<character>', type: 'action', action: 'enterMacroRecordMode' },\n    // Handle Replace-mode as a special case of insert mode.\n    { keys: 'R', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { replace: true }},\n    { keys: 'u', type: 'action', action: 'undo', context: 'normal' },\n    { keys: 'u', type: 'operator', operator: 'changeCase', operatorArgs: {toLower: true}, context: 'visual', isEdit: true },\n    { keys: 'U', type: 'operator', operator: 'changeCase', operatorArgs: {toLower: false}, context: 'visual', isEdit: true },\n    { keys: '<C-r>', type: 'action', action: 'redo' },\n    { keys: 'm<character>', type: 'action', action: 'setMark' },\n    { keys: '\"<character>', type: 'action', action: 'setRegister' },\n    { keys: 'zz', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'center' }},\n    { keys: 'z.', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'center' }, motion: 'moveToFirstNonWhiteSpaceCharacter' },\n    { keys: 'zt', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'top' }},\n    { keys: 'z<CR>', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'top' }, motion: 'moveToFirstNonWhiteSpaceCharacter' },\n    { keys: 'z-', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'bottom' }},\n    { keys: 'zb', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'bottom' }, motion: 'moveToFirstNonWhiteSpaceCharacter' },\n    { keys: '.', type: 'action', action: 'repeatLastEdit' },\n    { keys: '<C-a>', type: 'action', action: 'incrementNumberToken', isEdit: true, actionArgs: {increase: true, backtrack: false}},\n    { keys: '<C-x>', type: 'action', action: 'incrementNumberToken', isEdit: true, actionArgs: {increase: false, backtrack: false}},\n    // Text object motions\n    { keys: 'a<character>', type: 'motion', motion: 'textObjectManipulation' },\n    { keys: 'i<character>', type: 'motion', motion: 'textObjectManipulation', motionArgs: { textObjectInner: true }},\n    // Search\n    { keys: '/', type: 'search', searchArgs: { forward: true, querySrc: 'prompt', toJumplist: true }},\n    { keys: '?', type: 'search', searchArgs: { forward: false, querySrc: 'prompt', toJumplist: true }},\n    { keys: '*', type: 'search', searchArgs: { forward: true, querySrc: 'wordUnderCursor', wholeWordOnly: true, toJumplist: true }},\n    { keys: '#', type: 'search', searchArgs: { forward: false, querySrc: 'wordUnderCursor', wholeWordOnly: true, toJumplist: true }},\n    { keys: 'g*', type: 'search', searchArgs: { forward: true, querySrc: 'wordUnderCursor', toJumplist: true }},\n    { keys: 'g#', type: 'search', searchArgs: { forward: false, querySrc: 'wordUnderCursor', toJumplist: true }},\n    // Ex command\n    { keys: ':', type: 'ex' }\n  ];\n\n  /**\n   * Ex commands\n   * Care must be taken when adding to the default Ex command map. For any\n   * pair of commands that have a shared prefix, at least one of their\n   * shortNames must not match the prefix of the other command.\n   */\n  var defaultExCommandMap = [\n    { name: 'colorscheme', shortName: 'colo' },\n    { name: 'map' },\n    { name: 'imap', shortName: 'im' },\n    { name: 'nmap', shortName: 'nm' },\n    { name: 'vmap', shortName: 'vm' },\n    { name: 'unmap' },\n    { name: 'write', shortName: 'w' },\n    { name: 'undo', shortName: 'u' },\n    { name: 'redo', shortName: 'red' },\n    { name: 'set', shortName: 'se' },\n    { name: 'set', shortName: 'se' },\n    { name: 'setlocal', shortName: 'setl' },\n    { name: 'setglobal', shortName: 'setg' },\n    { name: 'sort', shortName: 'sor' },\n    { name: 'substitute', shortName: 's', possiblyAsync: true },\n    { name: 'nohlsearch', shortName: 'noh' },\n    { name: 'delmarks', shortName: 'delm' },\n    { name: 'registers', shortName: 'reg', excludeFromCommandHistory: true },\n    { name: 'global', shortName: 'g' }\n  ];\n\n  var Pos = CodeMirror.Pos;\n\n  var Vim = function() { return vimApi; } //{\n    function enterVimMode(cm) {\n      cm.setOption('disableInput', true);\n      cm.setOption('showCursorWhenSelecting', false);\n      CodeMirror.signal(cm, \"vim-mode-change\", {mode: \"normal\"});\n      cm.on('cursorActivity', onCursorActivity);\n      maybeInitVimState(cm);\n      CodeMirror.on(cm.getInputField(), 'paste', getOnPasteFn(cm));\n    }\n\n    function leaveVimMode(cm) {\n      cm.setOption('disableInput', false);\n      cm.off('cursorActivity', onCursorActivity);\n      CodeMirror.off(cm.getInputField(), 'paste', getOnPasteFn(cm));\n      cm.state.vim = null;\n    }\n\n    function detachVimMap(cm, next) {\n      if (this == CodeMirror.keyMap.vim)\n        CodeMirror.rmClass(cm.getWrapperElement(), \"cm-fat-cursor\");\n\n      if (!next || next.attach != attachVimMap)\n        leaveVimMode(cm);\n    }\n    function attachVimMap(cm, prev) {\n      if (this == CodeMirror.keyMap.vim)\n        CodeMirror.addClass(cm.getWrapperElement(), \"cm-fat-cursor\");\n\n      if (!prev || prev.attach != attachVimMap)\n        enterVimMode(cm);\n    }\n\n    // Deprecated, simply setting the keymap works again.\n    CodeMirror.defineOption('vimMode', false, function(cm, val, prev) {\n      if (val && cm.getOption(\"keyMap\") != \"vim\")\n        cm.setOption(\"keyMap\", \"vim\");\n      else if (!val && prev != CodeMirror.Init && /^vim/.test(cm.getOption(\"keyMap\")))\n        cm.setOption(\"keyMap\", \"default\");\n    });\n\n    function cmKey(key, cm) {\n      if (!cm) { return undefined; }\n      var vimKey = cmKeyToVimKey(key);\n      if (!vimKey) {\n        return false;\n      }\n      var cmd = CodeMirror.Vim.findKey(cm, vimKey);\n      if (typeof cmd == 'function') {\n        CodeMirror.signal(cm, 'vim-keypress', vimKey);\n      }\n      return cmd;\n    }\n\n    var modifiers = {'Shift': 'S', 'Ctrl': 'C', 'Alt': 'A', 'Cmd': 'D', 'Mod': 'A'};\n    var specialKeys = {Enter:'CR',Backspace:'BS',Delete:'Del'};\n    function cmKeyToVimKey(key) {\n      if (key.charAt(0) == '\\'') {\n        // Keypress character binding of format \"'a'\"\n        return key.charAt(1);\n      }\n      var pieces = key.split(/-(?!$)/);\n      var lastPiece = pieces[pieces.length - 1];\n      if (pieces.length == 1 && pieces[0].length == 1) {\n        // No-modifier bindings use literal character bindings above. Skip.\n        return false;\n      } else if (pieces.length == 2 && pieces[0] == 'Shift' && lastPiece.length == 1) {\n        // Ignore Shift+char bindings as they should be handled by literal character.\n        return false;\n      }\n      var hasCharacter = false;\n      for (var i = 0; i < pieces.length; i++) {\n        var piece = pieces[i];\n        if (piece in modifiers) { pieces[i] = modifiers[piece]; }\n        else { hasCharacter = true; }\n        if (piece in specialKeys) { pieces[i] = specialKeys[piece]; }\n      }\n      if (!hasCharacter) {\n        // Vim does not support modifier only keys.\n        return false;\n      }\n      // TODO: Current bindings expect the character to be lower case, but\n      // it looks like vim key notation uses upper case.\n      if (isUpperCase(lastPiece)) {\n        pieces[pieces.length - 1] = lastPiece.toLowerCase();\n      }\n      return '<' + pieces.join('-') + '>';\n    }\n\n    function getOnPasteFn(cm) {\n      var vim = cm.state.vim;\n      if (!vim.onPasteFn) {\n        vim.onPasteFn = function() {\n          if (!vim.insertMode) {\n            cm.setCursor(offsetCursor(cm.getCursor(), 0, 1));\n            actions.enterInsertMode(cm, {}, vim);\n          }\n        };\n      }\n      return vim.onPasteFn;\n    }\n\n    var numberRegex = /[\\d]/;\n    var wordCharTest = [CodeMirror.isWordChar, function(ch) {\n      return ch && !CodeMirror.isWordChar(ch) && !/\\s/.test(ch);\n    }], bigWordCharTest = [function(ch) {\n      return /\\S/.test(ch);\n    }];\n    function makeKeyRange(start, size) {\n      var keys = [];\n      for (var i = start; i < start + size; i++) {\n        keys.push(String.fromCharCode(i));\n      }\n      return keys;\n    }\n    var upperCaseAlphabet = makeKeyRange(65, 26);\n    var lowerCaseAlphabet = makeKeyRange(97, 26);\n    var numbers = makeKeyRange(48, 10);\n    var validMarks = [].concat(upperCaseAlphabet, lowerCaseAlphabet, numbers, ['<', '>']);\n    var validRegisters = [].concat(upperCaseAlphabet, lowerCaseAlphabet, numbers, ['-', '\"', '.', ':', '/']);\n\n    function isLine(cm, line) {\n      return line >= cm.firstLine() && line <= cm.lastLine();\n    }\n    function isLowerCase(k) {\n      return (/^[a-z]$/).test(k);\n    }\n    function isMatchableSymbol(k) {\n      return '()[]{}'.indexOf(k) != -1;\n    }\n    function isNumber(k) {\n      return numberRegex.test(k);\n    }\n    function isUpperCase(k) {\n      return (/^[A-Z]$/).test(k);\n    }\n    function isWhiteSpaceString(k) {\n      return (/^\\s*$/).test(k);\n    }\n    function inArray(val, arr) {\n      for (var i = 0; i < arr.length; i++) {\n        if (arr[i] == val) {\n          return true;\n        }\n      }\n      return false;\n    }\n\n    var options = {};\n    function defineOption(name, defaultValue, type, aliases, callback) {\n      if (defaultValue === undefined && !callback) {\n        throw Error('defaultValue is required unless callback is provided');\n      }\n      if (!type) { type = 'string'; }\n      options[name] = {\n        type: type,\n        defaultValue: defaultValue,\n        callback: callback\n      };\n      if (aliases) {\n        for (var i = 0; i < aliases.length; i++) {\n          options[aliases[i]] = options[name];\n        }\n      }\n      if (defaultValue) {\n        setOption(name, defaultValue);\n      }\n    }\n\n    function setOption(name, value, cm, cfg) {\n      var option = options[name];\n      cfg = cfg || {};\n      var scope = cfg.scope;\n      if (!option) {\n        throw Error('Unknown option: ' + name);\n      }\n      if (option.type == 'boolean') {\n        if (value && value !== true) {\n          throw Error('Invalid argument: ' + name + '=' + value);\n        } else if (value !== false) {\n          // Boolean options are set to true if value is not defined.\n          value = true;\n        }\n      }\n      if (option.callback) {\n        if (scope !== 'local') {\n          option.callback(value, undefined);\n        }\n        if (scope !== 'global' && cm) {\n          option.callback(value, cm);\n        }\n      } else {\n        if (scope !== 'local') {\n          option.value = option.type == 'boolean' ? !!value : value;\n        }\n        if (scope !== 'global' && cm) {\n          cm.state.vim.options[name] = {value: value};\n        }\n      }\n    }\n\n    function getOption(name, cm, cfg) {\n      var option = options[name];\n      cfg = cfg || {};\n      var scope = cfg.scope;\n      if (!option) {\n        throw Error('Unknown option: ' + name);\n      }\n      if (option.callback) {\n        var local = cm && option.callback(undefined, cm);\n        if (scope !== 'global' && local !== undefined) {\n          return local;\n        }\n        if (scope !== 'local') {\n          return option.callback();\n        }\n        return;\n      } else {\n        var local = (scope !== 'global') && (cm && cm.state.vim.options[name]);\n        return (local || (scope !== 'local') && option || {}).value;\n      }\n    }\n\n    defineOption('filetype', undefined, 'string', ['ft'], function(name, cm) {\n      // Option is local. Do nothing for global.\n      if (cm === undefined) {\n        return;\n      }\n      // The 'filetype' option proxies to the CodeMirror 'mode' option.\n      if (name === undefined) {\n        var mode = cm.getOption('mode');\n        return mode == 'null' ? '' : mode;\n      } else {\n        var mode = name == '' ? 'null' : name;\n        cm.setOption('mode', mode);\n      }\n    });\n\n    var createCircularJumpList = function() {\n      var size = 100;\n      var pointer = -1;\n      var head = 0;\n      var tail = 0;\n      var buffer = new Array(size);\n      function add(cm, oldCur, newCur) {\n        var current = pointer % size;\n        var curMark = buffer[current];\n        function useNextSlot(cursor) {\n          var next = ++pointer % size;\n          var trashMark = buffer[next];\n          if (trashMark) {\n            trashMark.clear();\n          }\n          buffer[next] = cm.setBookmark(cursor);\n        }\n        if (curMark) {\n          var markPos = curMark.find();\n          // avoid recording redundant cursor position\n          if (markPos && !cursorEqual(markPos, oldCur)) {\n            useNextSlot(oldCur);\n          }\n        } else {\n          useNextSlot(oldCur);\n        }\n        useNextSlot(newCur);\n        head = pointer;\n        tail = pointer - size + 1;\n        if (tail < 0) {\n          tail = 0;\n        }\n      }\n      function move(cm, offset) {\n        pointer += offset;\n        if (pointer > head) {\n          pointer = head;\n        } else if (pointer < tail) {\n          pointer = tail;\n        }\n        var mark = buffer[(size + pointer) % size];\n        // skip marks that are temporarily removed from text buffer\n        if (mark && !mark.find()) {\n          var inc = offset > 0 ? 1 : -1;\n          var newCur;\n          var oldCur = cm.getCursor();\n          do {\n            pointer += inc;\n            mark = buffer[(size + pointer) % size];\n            // skip marks that are the same as current position\n            if (mark &&\n                (newCur = mark.find()) &&\n                !cursorEqual(oldCur, newCur)) {\n              break;\n            }\n          } while (pointer < head && pointer > tail);\n        }\n        return mark;\n      }\n      return {\n        cachedCursor: undefined, //used for # and * jumps\n        add: add,\n        move: move\n      };\n    };\n\n    // Returns an object to track the changes associated insert mode.  It\n    // clones the object that is passed in, or creates an empty object one if\n    // none is provided.\n    var createInsertModeChanges = function(c) {\n      if (c) {\n        // Copy construction\n        return {\n          changes: c.changes,\n          expectCursorActivityForChange: c.expectCursorActivityForChange\n        };\n      }\n      return {\n        // Change list\n        changes: [],\n        // Set to true on change, false on cursorActivity.\n        expectCursorActivityForChange: false\n      };\n    };\n\n    function MacroModeState() {\n      this.latestRegister = undefined;\n      this.isPlaying = false;\n      this.isRecording = false;\n      this.replaySearchQueries = [];\n      this.onRecordingDone = undefined;\n      this.lastInsertModeChanges = createInsertModeChanges();\n    }\n    MacroModeState.prototype = {\n      exitMacroRecordMode: function() {\n        var macroModeState = vimGlobalState.macroModeState;\n        if (macroModeState.onRecordingDone) {\n          macroModeState.onRecordingDone(); // close dialog\n        }\n        macroModeState.onRecordingDone = undefined;\n        macroModeState.isRecording = false;\n      },\n      enterMacroRecordMode: function(cm, registerName) {\n        var register =\n            vimGlobalState.registerController.getRegister(registerName);\n        if (register) {\n          register.clear();\n          this.latestRegister = registerName;\n          if (cm.openDialog) {\n            this.onRecordingDone = cm.openDialog(\n                '(recording)['+registerName+']', null, {bottom:true});\n          }\n          this.isRecording = true;\n        }\n      }\n    };\n\n    function maybeInitVimState(cm) {\n      if (!cm.state.vim) {\n        // Store instance state in the CodeMirror object.\n        cm.state.vim = {\n          inputState: new InputState(),\n          // Vim's input state that triggered the last edit, used to repeat\n          // motions and operators with '.'.\n          lastEditInputState: undefined,\n          // Vim's action command before the last edit, used to repeat actions\n          // with '.' and insert mode repeat.\n          lastEditActionCommand: undefined,\n          // When using jk for navigation, if you move from a longer line to a\n          // shorter line, the cursor may clip to the end of the shorter line.\n          // If j is pressed again and cursor goes to the next line, the\n          // cursor should go back to its horizontal position on the longer\n          // line if it can. This is to keep track of the horizontal position.\n          lastHPos: -1,\n          // Doing the same with screen-position for gj/gk\n          lastHSPos: -1,\n          // The last motion command run. Cleared if a non-motion command gets\n          // executed in between.\n          lastMotion: null,\n          marks: {},\n          // Mark for rendering fake cursor for visual mode.\n          fakeCursor: null,\n          insertMode: false,\n          // Repeat count for changes made in insert mode, triggered by key\n          // sequences like 3,i. Only exists when insertMode is true.\n          insertModeRepeat: undefined,\n          visualMode: false,\n          // If we are in visual line mode. No effect if visualMode is false.\n          visualLine: false,\n          visualBlock: false,\n          lastSelection: null,\n          lastPastedText: null,\n          sel: {},\n          // Buffer-local/window-local values of vim options.\n          options: {}\n        };\n      }\n      return cm.state.vim;\n    }\n    var vimGlobalState;\n    function resetVimGlobalState() {\n      vimGlobalState = {\n        // The current search query.\n        searchQuery: null,\n        // Whether we are searching backwards.\n        searchIsReversed: false,\n        // Replace part of the last substituted pattern\n        lastSubstituteReplacePart: undefined,\n        jumpList: createCircularJumpList(),\n        macroModeState: new MacroModeState,\n        // Recording latest f, t, F or T motion command.\n        lastChararacterSearch: {increment:0, forward:true, selectedCharacter:''},\n        registerController: new RegisterController({}),\n        // search history buffer\n        searchHistoryController: new HistoryController(),\n        // ex Command history buffer\n        exCommandHistoryController : new HistoryController()\n      };\n      for (var optionName in options) {\n        var option = options[optionName];\n        option.value = option.defaultValue;\n      }\n    }\n\n    var lastInsertModeKeyTimer;\n    var vimApi= {\n      buildKeyMap: function() {\n        // TODO: Convert keymap into dictionary format for fast lookup.\n      },\n      // Testing hook, though it might be useful to expose the register\n      // controller anyways.\n      getRegisterController: function() {\n        return vimGlobalState.registerController;\n      },\n      // Testing hook.\n      resetVimGlobalState_: resetVimGlobalState,\n\n      // Testing hook.\n      getVimGlobalState_: function() {\n        return vimGlobalState;\n      },\n\n      // Testing hook.\n      maybeInitVimState_: maybeInitVimState,\n\n      suppressErrorLogging: false,\n\n      InsertModeKey: InsertModeKey,\n      map: function(lhs, rhs, ctx) {\n        // Add user defined key bindings.\n        exCommandDispatcher.map(lhs, rhs, ctx);\n      },\n      unmap: function(lhs, ctx) {\n        exCommandDispatcher.unmap(lhs, ctx);\n      },\n      // TODO: Expose setOption and getOption as instance methods. Need to decide how to namespace\n      // them, or somehow make them work with the existing CodeMirror setOption/getOption API.\n      setOption: setOption,\n      getOption: getOption,\n      defineOption: defineOption,\n      defineEx: function(name, prefix, func){\n        if (!prefix) {\n          prefix = name;\n        } else if (name.indexOf(prefix) !== 0) {\n          throw new Error('(Vim.defineEx) \"'+prefix+'\" is not a prefix of \"'+name+'\", command not registered');\n        }\n        exCommands[name]=func;\n        exCommandDispatcher.commandMap_[prefix]={name:name, shortName:prefix, type:'api'};\n      },\n      handleKey: function (cm, key, origin) {\n        var command = this.findKey(cm, key, origin);\n        if (typeof command === 'function') {\n          return command();\n        }\n      },\n      /**\n       * This is the outermost function called by CodeMirror, after keys have\n       * been mapped to their Vim equivalents.\n       *\n       * Finds a command based on the key (and cached keys if there is a\n       * multi-key sequence). Returns `undefined` if no key is matched, a noop\n       * function if a partial match is found (multi-key), and a function to\n       * execute the bound command if a a key is matched. The function always\n       * returns true.\n       */\n      findKey: function(cm, key, origin) {\n        var vim = maybeInitVimState(cm);\n        function handleMacroRecording() {\n          var macroModeState = vimGlobalState.macroModeState;\n          if (macroModeState.isRecording) {\n            if (key == 'q') {\n              macroModeState.exitMacroRecordMode();\n              clearInputState(cm);\n              return true;\n            }\n            if (origin != 'mapping') {\n              logKey(macroModeState, key);\n            }\n          }\n        }\n        function handleEsc() {\n          if (key == '<Esc>') {\n            // Clear input state and get back to normal mode.\n            clearInputState(cm);\n            if (vim.visualMode) {\n              exitVisualMode(cm);\n            } else if (vim.insertMode) {\n              exitInsertMode(cm);\n            }\n            return true;\n          }\n        }\n        function doKeyToKey(keys) {\n          // TODO: prevent infinite recursion.\n          var match;\n          while (keys) {\n            // Pull off one command key, which is either a single character\n            // or a special sequence wrapped in '<' and '>', e.g. '<Space>'.\n            match = (/<\\w+-.+?>|<\\w+>|./).exec(keys);\n            key = match[0];\n            keys = keys.substring(match.index + key.length);\n            CodeMirror.Vim.handleKey(cm, key, 'mapping');\n          }\n        }\n\n        function handleKeyInsertMode() {\n          if (handleEsc()) { return true; }\n          var keys = vim.inputState.keyBuffer = vim.inputState.keyBuffer + key;\n          var keysAreChars = key.length == 1;\n          var match = commandDispatcher.matchCommand(keys, defaultKeymap, vim.inputState, 'insert');\n          // Need to check all key substrings in insert mode.\n          while (keys.length > 1 && match.type != 'full') {\n            var keys = vim.inputState.keyBuffer = keys.slice(1);\n            var thisMatch = commandDispatcher.matchCommand(keys, defaultKeymap, vim.inputState, 'insert');\n            if (thisMatch.type != 'none') { match = thisMatch; }\n          }\n          if (match.type == 'none') { clearInputState(cm); return false; }\n          else if (match.type == 'partial') {\n            if (lastInsertModeKeyTimer) { window.clearTimeout(lastInsertModeKeyTimer); }\n            lastInsertModeKeyTimer = window.setTimeout(\n              function() { if (vim.insertMode && vim.inputState.keyBuffer) { clearInputState(cm); } },\n              getOption('insertModeEscKeysTimeout'));\n            return !keysAreChars;\n          }\n\n          if (lastInsertModeKeyTimer) { window.clearTimeout(lastInsertModeKeyTimer); }\n          if (keysAreChars) {\n            var selections = cm.listSelections();\n            for (var i = 0; i < selections.length; i++) {\n              var here = selections[i].head;\n              cm.replaceRange('', offsetCursor(here, 0, -(keys.length - 1)), here, '+input');\n            }\n            vimGlobalState.macroModeState.lastInsertModeChanges.changes.pop();\n          }\n          clearInputState(cm);\n          return match.command;\n        }\n\n        function handleKeyNonInsertMode() {\n          if (handleMacroRecording() || handleEsc()) { return true; }\n\n          var keys = vim.inputState.keyBuffer = vim.inputState.keyBuffer + key;\n          if (/^[1-9]\\d*$/.test(keys)) { return true; }\n\n          var keysMatcher = /^(\\d*)(.*)$/.exec(keys);\n          if (!keysMatcher) { clearInputState(cm); return false; }\n          var context = vim.visualMode ? 'visual' :\n                                         'normal';\n          var match = commandDispatcher.matchCommand(keysMatcher[2] || keysMatcher[1], defaultKeymap, vim.inputState, context);\n          if (match.type == 'none') { clearInputState(cm); return false; }\n          else if (match.type == 'partial') { return true; }\n\n          vim.inputState.keyBuffer = '';\n          var keysMatcher = /^(\\d*)(.*)$/.exec(keys);\n          if (keysMatcher[1] && keysMatcher[1] != '0') {\n            vim.inputState.pushRepeatDigit(keysMatcher[1]);\n          }\n          return match.command;\n        }\n\n        var command;\n        if (vim.insertMode) { command = handleKeyInsertMode(); }\n        else { command = handleKeyNonInsertMode(); }\n        if (command === false) {\n          return undefined;\n        } else if (command === true) {\n          // TODO: Look into using CodeMirror's multi-key handling.\n          // Return no-op since we are caching the key. Counts as handled, but\n          // don't want act on it just yet.\n          return function() { return true; };\n        } else {\n          return function() {\n            if ((command.operator || command.isEdit) && cm.getOption('readOnly'))\n              return; // ace_patch\n            return cm.operation(function() {\n              cm.curOp.isVimOp = true;\n              try {\n                if (command.type == 'keyToKey') {\n                  doKeyToKey(command.toKeys);\n                } else {\n                  commandDispatcher.processCommand(cm, vim, command);\n                }\n              } catch (e) {\n                // clear VIM state in case it's in a bad state.\n                cm.state.vim = undefined;\n                maybeInitVimState(cm);\n                if (!CodeMirror.Vim.suppressErrorLogging) {\n                  console['log'](e);\n                }\n                throw e;\n              }\n              return true;\n            });\n          };\n        }\n      },\n      handleEx: function(cm, input) {\n        exCommandDispatcher.processCommand(cm, input);\n      },\n\n      defineMotion: defineMotion,\n      defineAction: defineAction,\n      defineOperator: defineOperator,\n      mapCommand: mapCommand,\n      _mapCommand: _mapCommand,\n\n      defineRegister: defineRegister,\n\n      exitVisualMode: exitVisualMode,\n      exitInsertMode: exitInsertMode\n    };\n\n    // Represents the current input state.\n    function InputState() {\n      this.prefixRepeat = [];\n      this.motionRepeat = [];\n\n      this.operator = null;\n      this.operatorArgs = null;\n      this.motion = null;\n      this.motionArgs = null;\n      this.keyBuffer = []; // For matching multi-key commands.\n      this.registerName = null; // Defaults to the unnamed register.\n    }\n    InputState.prototype.pushRepeatDigit = function(n) {\n      if (!this.operator) {\n        this.prefixRepeat = this.prefixRepeat.concat(n);\n      } else {\n        this.motionRepeat = this.motionRepeat.concat(n);\n      }\n    };\n    InputState.prototype.getRepeat = function() {\n      var repeat = 0;\n      if (this.prefixRepeat.length > 0 || this.motionRepeat.length > 0) {\n        repeat = 1;\n        if (this.prefixRepeat.length > 0) {\n          repeat *= parseInt(this.prefixRepeat.join(''), 10);\n        }\n        if (this.motionRepeat.length > 0) {\n          repeat *= parseInt(this.motionRepeat.join(''), 10);\n        }\n      }\n      return repeat;\n    };\n\n    function clearInputState(cm, reason) {\n      cm.state.vim.inputState = new InputState();\n      CodeMirror.signal(cm, 'vim-command-done', reason);\n    }\n\n    /*\n     * Register stores information about copy and paste registers.  Besides\n     * text, a register must store whether it is linewise (i.e., when it is\n     * pasted, should it insert itself into a new line, or should the text be\n     * inserted at the cursor position.)\n     */\n    function Register(text, linewise, blockwise) {\n      this.clear();\n      this.keyBuffer = [text || ''];\n      this.insertModeChanges = [];\n      this.searchQueries = [];\n      this.linewise = !!linewise;\n      this.blockwise = !!blockwise;\n    }\n    Register.prototype = {\n      setText: function(text, linewise, blockwise) {\n        this.keyBuffer = [text || ''];\n        this.linewise = !!linewise;\n        this.blockwise = !!blockwise;\n      },\n      pushText: function(text, linewise) {\n        // if this register has ever been set to linewise, use linewise.\n        if (linewise) {\n          if (!this.linewise) {\n            this.keyBuffer.push('\\n');\n          }\n          this.linewise = true;\n        }\n        this.keyBuffer.push(text);\n      },\n      pushInsertModeChanges: function(changes) {\n        this.insertModeChanges.push(createInsertModeChanges(changes));\n      },\n      pushSearchQuery: function(query) {\n        this.searchQueries.push(query);\n      },\n      clear: function() {\n        this.keyBuffer = [];\n        this.insertModeChanges = [];\n        this.searchQueries = [];\n        this.linewise = false;\n      },\n      toString: function() {\n        return this.keyBuffer.join('');\n      }\n    };\n\n    /**\n     * Defines an external register.\n     *\n     * The name should be a single character that will be used to reference the register.\n     * The register should support setText, pushText, clear, and toString(). See Register\n     * for a reference implementation.\n     */\n    function defineRegister(name, register) {\n      var registers = vimGlobalState.registerController.registers[name];\n      if (!name || name.length != 1) {\n        throw Error('Register name must be 1 character');\n      }\n      // ace_patch\n      registers[name] = register;\n      validRegisters.push(name);\n    }\n\n    /*\n     * vim registers allow you to keep many independent copy and paste buffers.\n     * See http://usevim.com/2012/04/13/registers/ for an introduction.\n     *\n     * RegisterController keeps the state of all the registers.  An initial\n     * state may be passed in.  The unnamed register '\"' will always be\n     * overridden.\n     */\n    function RegisterController(registers) {\n      this.registers = registers;\n      this.unnamedRegister = registers['\"'] = new Register();\n      registers['.'] = new Register();\n      registers[':'] = new Register();\n      registers['/'] = new Register();\n    }\n    RegisterController.prototype = {\n      pushText: function(registerName, operator, text, linewise, blockwise) {\n        if (linewise && text.charAt(0) == '\\n') {\n          text = text.slice(1) + '\\n';\n        }\n        if (linewise && text.charAt(text.length - 1) !== '\\n'){\n          text += '\\n';\n        }\n        // Lowercase and uppercase registers refer to the same register.\n        // Uppercase just means append.\n        var register = this.isValidRegister(registerName) ?\n            this.getRegister(registerName) : null;\n        // if no register/an invalid register was specified, things go to the\n        // default registers\n        if (!register) {\n          switch (operator) {\n            case 'yank':\n              // The 0 register contains the text from the most recent yank.\n              this.registers['0'] = new Register(text, linewise, blockwise);\n              break;\n            case 'delete':\n            case 'change':\n              if (text.indexOf('\\n') == -1) {\n                // Delete less than 1 line. Update the small delete register.\n                this.registers['-'] = new Register(text, linewise);\n              } else {\n                // Shift down the contents of the numbered registers and put the\n                // deleted text into register 1.\n                this.shiftNumericRegisters_();\n                this.registers['1'] = new Register(text, linewise);\n              }\n              break;\n          }\n          // Make sure the unnamed register is set to what just happened\n          this.unnamedRegister.setText(text, linewise, blockwise);\n          return;\n        }\n\n        // If we've gotten to this point, we've actually specified a register\n        var append = isUpperCase(registerName);\n        if (append) {\n          register.pushText(text, linewise);\n        } else {\n          register.setText(text, linewise, blockwise);\n        }\n        // The unnamed register always has the same value as the last used\n        // register.\n        this.unnamedRegister.setText(register.toString(), linewise);\n      },\n      // Gets the register named @name.  If one of @name doesn't already exist,\n      // create it.  If @name is invalid, return the unnamedRegister.\n      getRegister: function(name) {\n        if (!this.isValidRegister(name)) {\n          return this.unnamedRegister;\n        }\n        name = name.toLowerCase();\n        if (!this.registers[name]) {\n          this.registers[name] = new Register();\n        }\n        return this.registers[name];\n      },\n      isValidRegister: function(name) {\n        return name && inArray(name, validRegisters);\n      },\n      shiftNumericRegisters_: function() {\n        for (var i = 9; i >= 2; i--) {\n          this.registers[i] = this.getRegister('' + (i - 1));\n        }\n      }\n    };\n    function HistoryController() {\n        this.historyBuffer = [];\n        this.iterator;\n        this.initialPrefix = null;\n    }\n    HistoryController.prototype = {\n      // the input argument here acts a user entered prefix for a small time\n      // until we start autocompletion in which case it is the autocompleted.\n      nextMatch: function (input, up) {\n        var historyBuffer = this.historyBuffer;\n        var dir = up ? -1 : 1;\n        if (this.initialPrefix === null) this.initialPrefix = input;\n        for (var i = this.iterator + dir; up ? i >= 0 : i < historyBuffer.length; i+= dir) {\n          var element = historyBuffer[i];\n          for (var j = 0; j <= element.length; j++) {\n            if (this.initialPrefix == element.substring(0, j)) {\n              this.iterator = i;\n              return element;\n            }\n          }\n        }\n        // should return the user input in case we reach the end of buffer.\n        if (i >= historyBuffer.length) {\n          this.iterator = historyBuffer.length;\n          return this.initialPrefix;\n        }\n        // return the last autocompleted query or exCommand as it is.\n        if (i < 0 ) return input;\n      },\n      pushInput: function(input) {\n        var index = this.historyBuffer.indexOf(input);\n        if (index > -1) this.historyBuffer.splice(index, 1);\n        if (input.length) this.historyBuffer.push(input);\n      },\n      reset: function() {\n        this.initialPrefix = null;\n        this.iterator = this.historyBuffer.length;\n      }\n    };\n    var commandDispatcher = {\n      matchCommand: function(keys, keyMap, inputState, context) {\n        var matches = commandMatches(keys, keyMap, context, inputState);\n        if (!matches.full && !matches.partial) {\n          return {type: 'none'};\n        } else if (!matches.full && matches.partial) {\n          return {type: 'partial'};\n        }\n\n        var bestMatch;\n        for (var i = 0; i < matches.full.length; i++) {\n          var match = matches.full[i];\n          if (!bestMatch) {\n            bestMatch = match;\n          }\n        }\n        if (bestMatch.keys.slice(-11) == '<character>') {\n          var character = lastChar(keys);\n          if (/<C-.>/.test(character)) return {type: 'none'};\n          inputState.selectedCharacter = character;\n        }\n        return {type: 'full', command: bestMatch};\n      },\n      processCommand: function(cm, vim, command) {\n        vim.inputState.repeatOverride = command.repeatOverride;\n        switch (command.type) {\n          case 'motion':\n            this.processMotion(cm, vim, command);\n            break;\n          case 'operator':\n            this.processOperator(cm, vim, command);\n            break;\n          case 'operatorMotion':\n            this.processOperatorMotion(cm, vim, command);\n            break;\n          case 'action':\n            this.processAction(cm, vim, command);\n            break;\n          case 'search':\n            this.processSearch(cm, vim, command);\n            break;\n          case 'ex':\n          case 'keyToEx':\n            this.processEx(cm, vim, command);\n            break;\n          default:\n            break;\n        }\n      },\n      processMotion: function(cm, vim, command) {\n        vim.inputState.motion = command.motion;\n        vim.inputState.motionArgs = copyArgs(command.motionArgs);\n        this.evalInput(cm, vim);\n      },\n      processOperator: function(cm, vim, command) {\n        var inputState = vim.inputState;\n        if (inputState.operator) {\n          if (inputState.operator == command.operator) {\n            // Typing an operator twice like 'dd' makes the operator operate\n            // linewise\n            inputState.motion = 'expandToLine';\n            inputState.motionArgs = { linewise: true };\n            this.evalInput(cm, vim);\n            return;\n          } else {\n            // 2 different operators in a row doesn't make sense.\n            clearInputState(cm);\n          }\n        }\n        inputState.operator = command.operator;\n        inputState.operatorArgs = copyArgs(command.operatorArgs);\n        if (vim.visualMode) {\n          // Operating on a selection in visual mode. We don't need a motion.\n          this.evalInput(cm, vim);\n        }\n      },\n      processOperatorMotion: function(cm, vim, command) {\n        var visualMode = vim.visualMode;\n        var operatorMotionArgs = copyArgs(command.operatorMotionArgs);\n        if (operatorMotionArgs) {\n          // Operator motions may have special behavior in visual mode.\n          if (visualMode && operatorMotionArgs.visualLine) {\n            vim.visualLine = true;\n          }\n        }\n        this.processOperator(cm, vim, command);\n        if (!visualMode) {\n          this.processMotion(cm, vim, command);\n        }\n      },\n      processAction: function(cm, vim, command) {\n        var inputState = vim.inputState;\n        var repeat = inputState.getRepeat();\n        var repeatIsExplicit = !!repeat;\n        var actionArgs = copyArgs(command.actionArgs) || {};\n        if (inputState.selectedCharacter) {\n          actionArgs.selectedCharacter = inputState.selectedCharacter;\n        }\n        // Actions may or may not have motions and operators. Do these first.\n        if (command.operator) {\n          this.processOperator(cm, vim, command);\n        }\n        if (command.motion) {\n          this.processMotion(cm, vim, command);\n        }\n        if (command.motion || command.operator) {\n          this.evalInput(cm, vim);\n        }\n        actionArgs.repeat = repeat || 1;\n        actionArgs.repeatIsExplicit = repeatIsExplicit;\n        actionArgs.registerName = inputState.registerName;\n        clearInputState(cm);\n        vim.lastMotion = null;\n        if (command.isEdit) {\n          this.recordLastEdit(vim, inputState, command);\n        }\n        actions[command.action](cm, actionArgs, vim);\n      },\n      processSearch: function(cm, vim, command) {\n        if (!cm.getSearchCursor) {\n          // Search depends on SearchCursor.\n          return;\n        }\n        var forward = command.searchArgs.forward;\n        var wholeWordOnly = command.searchArgs.wholeWordOnly;\n        getSearchState(cm).setReversed(!forward);\n        var promptPrefix = (forward) ? '/' : '?';\n        var originalQuery = getSearchState(cm).getQuery();\n        var originalScrollPos = cm.getScrollInfo();\n        function handleQuery(query, ignoreCase, smartCase) {\n          vimGlobalState.searchHistoryController.pushInput(query);\n          vimGlobalState.searchHistoryController.reset();\n          try {\n            updateSearchQuery(cm, query, ignoreCase, smartCase);\n          } catch (e) {\n            showConfirm(cm, 'Invalid regex: ' + query);\n            clearInputState(cm);\n            return;\n          }\n          commandDispatcher.processMotion(cm, vim, {\n            type: 'motion',\n            motion: 'findNext',\n            motionArgs: { forward: true, toJumplist: command.searchArgs.toJumplist }\n          });\n        }\n        function onPromptClose(query) {\n          cm.scrollTo(originalScrollPos.left, originalScrollPos.top);\n          handleQuery(query, true /** ignoreCase */, true /** smartCase */);\n          var macroModeState = vimGlobalState.macroModeState;\n          if (macroModeState.isRecording) {\n            logSearchQuery(macroModeState, query);\n          }\n        }\n        function onPromptKeyUp(e, query, close) {\n          var keyName = CodeMirror.keyName(e), up;\n          if (keyName == 'Up' || keyName == 'Down') {\n            up = keyName == 'Up' ? true : false;\n            query = vimGlobalState.searchHistoryController.nextMatch(query, up) || '';\n            close(query);\n          } else {\n            if ( keyName != 'Left' && keyName != 'Right' && keyName != 'Ctrl' && keyName != 'Alt' && keyName != 'Shift')\n              vimGlobalState.searchHistoryController.reset();\n          }\n          var parsedQuery;\n          try {\n            parsedQuery = updateSearchQuery(cm, query,\n                true /** ignoreCase */, true /** smartCase */);\n          } catch (e) {\n            // Swallow bad regexes for incremental search.\n          }\n          if (parsedQuery) {\n            cm.scrollIntoView(findNext(cm, !forward, parsedQuery), 30);\n          } else {\n            clearSearchHighlight(cm);\n            cm.scrollTo(originalScrollPos.left, originalScrollPos.top);\n          }\n        }\n        function onPromptKeyDown(e, query, close) {\n          var keyName = CodeMirror.keyName(e);\n          if (keyName == 'Esc' || keyName == 'Ctrl-C' || keyName == 'Ctrl-[' ||\n              (keyName == 'Backspace' && query == '')) {\n            vimGlobalState.searchHistoryController.pushInput(query);\n            vimGlobalState.searchHistoryController.reset();\n            updateSearchQuery(cm, originalQuery);\n            clearSearchHighlight(cm);\n            cm.scrollTo(originalScrollPos.left, originalScrollPos.top);\n            CodeMirror.e_stop(e);\n            clearInputState(cm);\n            close();\n            cm.focus();\n          } else if (keyName == 'Ctrl-U') {\n            // Ctrl-U clears input.\n            CodeMirror.e_stop(e);\n            close('');\n          }\n        }\n        switch (command.searchArgs.querySrc) {\n          case 'prompt':\n            var macroModeState = vimGlobalState.macroModeState;\n            if (macroModeState.isPlaying) {\n              var query = macroModeState.replaySearchQueries.shift();\n              handleQuery(query, true /** ignoreCase */, false /** smartCase */);\n            } else {\n              showPrompt(cm, {\n                  onClose: onPromptClose,\n                  prefix: promptPrefix,\n                  desc: searchPromptDesc,\n                  onKeyUp: onPromptKeyUp,\n                  onKeyDown: onPromptKeyDown\n              });\n            }\n            break;\n          case 'wordUnderCursor':\n            var word = expandWordUnderCursor(cm, false /** inclusive */,\n                true /** forward */, false /** bigWord */,\n                true /** noSymbol */);\n            var isKeyword = true;\n            if (!word) {\n              word = expandWordUnderCursor(cm, false /** inclusive */,\n                  true /** forward */, false /** bigWord */,\n                  false /** noSymbol */);\n              isKeyword = false;\n            }\n            if (!word) {\n              return;\n            }\n            var query = cm.getLine(word.start.line).substring(word.start.ch,\n                word.end.ch);\n            if (isKeyword && wholeWordOnly) {\n                query = '\\\\b' + query + '\\\\b';\n            } else {\n              query = escapeRegex(query);\n            }\n\n            // cachedCursor is used to save the old position of the cursor\n            // when * or # causes vim to seek for the nearest word and shift\n            // the cursor before entering the motion.\n            vimGlobalState.jumpList.cachedCursor = cm.getCursor();\n            cm.setCursor(word.start);\n\n            handleQuery(query, true /** ignoreCase */, false /** smartCase */);\n            break;\n        }\n      },\n      processEx: function(cm, vim, command) {\n        function onPromptClose(input) {\n          // Give the prompt some time to close so that if processCommand shows\n          // an error, the elements don't overlap.\n          vimGlobalState.exCommandHistoryController.pushInput(input);\n          vimGlobalState.exCommandHistoryController.reset();\n          exCommandDispatcher.processCommand(cm, input);\n        }\n        function onPromptKeyDown(e, input, close) {\n          var keyName = CodeMirror.keyName(e), up;\n          if (keyName == 'Esc' || keyName == 'Ctrl-C' || keyName == 'Ctrl-[' ||\n              (keyName == 'Backspace' && input == '')) {\n            vimGlobalState.exCommandHistoryController.pushInput(input);\n            vimGlobalState.exCommandHistoryController.reset();\n            CodeMirror.e_stop(e);\n            clearInputState(cm);\n            close();\n            cm.focus();\n          }\n          if (keyName == 'Up' || keyName == 'Down') {\n            up = keyName == 'Up' ? true : false;\n            input = vimGlobalState.exCommandHistoryController.nextMatch(input, up) || '';\n            close(input);\n          } else if (keyName == 'Ctrl-U') {\n            // Ctrl-U clears input.\n            CodeMirror.e_stop(e);\n            close('');\n          } else {\n            if ( keyName != 'Left' && keyName != 'Right' && keyName != 'Ctrl' && keyName != 'Alt' && keyName != 'Shift')\n              vimGlobalState.exCommandHistoryController.reset();\n          }\n        }\n        if (command.type == 'keyToEx') {\n          // Handle user defined Ex to Ex mappings\n          exCommandDispatcher.processCommand(cm, command.exArgs.input);\n        } else {\n          if (vim.visualMode) {\n            showPrompt(cm, { onClose: onPromptClose, prefix: ':', value: '\\'<,\\'>',\n                onKeyDown: onPromptKeyDown});\n          } else {\n            showPrompt(cm, { onClose: onPromptClose, prefix: ':',\n                onKeyDown: onPromptKeyDown});\n          }\n        }\n      },\n      evalInput: function(cm, vim) {\n        // If the motion comand is set, execute both the operator and motion.\n        // Otherwise return.\n        var inputState = vim.inputState;\n        var motion = inputState.motion;\n        var motionArgs = inputState.motionArgs || {};\n        var operator = inputState.operator;\n        var operatorArgs = inputState.operatorArgs || {};\n        var registerName = inputState.registerName;\n        var sel = vim.sel;\n        // TODO: Make sure cm and vim selections are identical outside visual mode.\n        var origHead = copyCursor(vim.visualMode ? clipCursorToContent(cm, sel.head): cm.getCursor('head'));\n        var origAnchor = copyCursor(vim.visualMode ? clipCursorToContent(cm, sel.anchor) : cm.getCursor('anchor'));\n        var oldHead = copyCursor(origHead);\n        var oldAnchor = copyCursor(origAnchor);\n        var newHead, newAnchor;\n        var repeat;\n        if (operator) {\n          this.recordLastEdit(vim, inputState);\n        }\n        if (inputState.repeatOverride !== undefined) {\n          // If repeatOverride is specified, that takes precedence over the\n          // input state's repeat. Used by Ex mode and can be user defined.\n          repeat = inputState.repeatOverride;\n        } else {\n          repeat = inputState.getRepeat();\n        }\n        if (repeat > 0 && motionArgs.explicitRepeat) {\n          motionArgs.repeatIsExplicit = true;\n        } else if (motionArgs.noRepeat ||\n            (!motionArgs.explicitRepeat && repeat === 0)) {\n          repeat = 1;\n          motionArgs.repeatIsExplicit = false;\n        }\n        if (inputState.selectedCharacter) {\n          // If there is a character input, stick it in all of the arg arrays.\n          motionArgs.selectedCharacter = operatorArgs.selectedCharacter =\n              inputState.selectedCharacter;\n        }\n        motionArgs.repeat = repeat;\n        clearInputState(cm);\n        if (motion) {\n          var motionResult = motions[motion](cm, origHead, motionArgs, vim);\n          vim.lastMotion = motions[motion];\n          if (!motionResult) {\n            return;\n          }\n          if (motionArgs.toJumplist) {\n            if (!operator && cm.ace.curOp != null)\n              cm.ace.curOp.command.scrollIntoView = \"center-animate\"; // ace_patch\n            var jumpList = vimGlobalState.jumpList;\n            // if the current motion is # or *, use cachedCursor\n            var cachedCursor = jumpList.cachedCursor;\n            if (cachedCursor) {\n              recordJumpPosition(cm, cachedCursor, motionResult);\n              delete jumpList.cachedCursor;\n            } else {\n              recordJumpPosition(cm, origHead, motionResult);\n            }\n          }\n          if (motionResult instanceof Array) {\n            newAnchor = motionResult[0];\n            newHead = motionResult[1];\n          } else {\n            newHead = motionResult;\n          }\n          // TODO: Handle null returns from motion commands better.\n          if (!newHead) {\n            newHead = copyCursor(origHead);\n          }\n          if (vim.visualMode) {\n            if (!(vim.visualBlock && newHead.ch === Infinity)) {\n              newHead = clipCursorToContent(cm, newHead, vim.visualBlock);\n            }\n            if (newAnchor) {\n              newAnchor = clipCursorToContent(cm, newAnchor, true);\n            }\n            newAnchor = newAnchor || oldAnchor;\n            sel.anchor = newAnchor;\n            sel.head = newHead;\n            updateCmSelection(cm);\n            updateMark(cm, vim, '<',\n                cursorIsBefore(newAnchor, newHead) ? newAnchor\n                    : newHead);\n            updateMark(cm, vim, '>',\n                cursorIsBefore(newAnchor, newHead) ? newHead\n                    : newAnchor);\n          } else if (!operator) {\n            newHead = clipCursorToContent(cm, newHead);\n            cm.setCursor(newHead.line, newHead.ch);\n          }\n        }\n        if (operator) {\n          if (operatorArgs.lastSel) {\n            // Replaying a visual mode operation\n            newAnchor = oldAnchor;\n            var lastSel = operatorArgs.lastSel;\n            var lineOffset = Math.abs(lastSel.head.line - lastSel.anchor.line);\n            var chOffset = Math.abs(lastSel.head.ch - lastSel.anchor.ch);\n            if (lastSel.visualLine) {\n              // Linewise Visual mode: The same number of lines.\n              newHead = Pos(oldAnchor.line + lineOffset, oldAnchor.ch);\n            } else if (lastSel.visualBlock) {\n              // Blockwise Visual mode: The same number of lines and columns.\n              newHead = Pos(oldAnchor.line + lineOffset, oldAnchor.ch + chOffset);\n            } else if (lastSel.head.line == lastSel.anchor.line) {\n              // Normal Visual mode within one line: The same number of characters.\n              newHead = Pos(oldAnchor.line, oldAnchor.ch + chOffset);\n            } else {\n              // Normal Visual mode with several lines: The same number of lines, in the\n              // last line the same number of characters as in the last line the last time.\n              newHead = Pos(oldAnchor.line + lineOffset, oldAnchor.ch);\n            }\n            vim.visualMode = true;\n            vim.visualLine = lastSel.visualLine;\n            vim.visualBlock = lastSel.visualBlock;\n            sel = vim.sel = {\n              anchor: newAnchor,\n              head: newHead\n            };\n            updateCmSelection(cm);\n          } else if (vim.visualMode) {\n            operatorArgs.lastSel = {\n              anchor: copyCursor(sel.anchor),\n              head: copyCursor(sel.head),\n              visualBlock: vim.visualBlock,\n              visualLine: vim.visualLine\n            };\n          }\n          var curStart, curEnd, linewise, mode;\n          var cmSel;\n          if (vim.visualMode) {\n            // Init visual op\n            curStart = cursorMin(sel.head, sel.anchor);\n            curEnd = cursorMax(sel.head, sel.anchor);\n            linewise = vim.visualLine || operatorArgs.linewise;\n            mode = vim.visualBlock ? 'block' :\n                   linewise ? 'line' :\n                   'char';\n            cmSel = makeCmSelection(cm, {\n              anchor: curStart,\n              head: curEnd\n            }, mode);\n            if (linewise) {\n              var ranges = cmSel.ranges;\n              if (mode == 'block') {\n                // Linewise operators in visual block mode extend to end of line\n                for (var i = 0; i < ranges.length; i++) {\n                  ranges[i].head.ch = lineLength(cm, ranges[i].head.line);\n                }\n              } else if (mode == 'line') {\n                ranges[0].head = Pos(ranges[0].head.line + 1, 0);\n              }\n            }\n          } else {\n            // Init motion op\n            curStart = copyCursor(newAnchor || oldAnchor);\n            curEnd = copyCursor(newHead || oldHead);\n            if (cursorIsBefore(curEnd, curStart)) {\n              var tmp = curStart;\n              curStart = curEnd;\n              curEnd = tmp;\n            }\n            linewise = motionArgs.linewise || operatorArgs.linewise;\n            if (linewise) {\n              // Expand selection to entire line.\n              expandSelectionToLine(cm, curStart, curEnd);\n            } else if (motionArgs.forward) {\n              // Clip to trailing newlines only if the motion goes forward.\n              clipToLine(cm, curStart, curEnd);\n            }\n            mode = 'char';\n            var exclusive = !motionArgs.inclusive || linewise;\n            cmSel = makeCmSelection(cm, {\n              anchor: curStart,\n              head: curEnd\n            }, mode, exclusive);\n          }\n          cm.setSelections(cmSel.ranges, cmSel.primary);\n          vim.lastMotion = null;\n          operatorArgs.repeat = repeat; // For indent in visual mode.\n          operatorArgs.registerName = registerName;\n          // Keep track of linewise as it affects how paste and change behave.\n          operatorArgs.linewise = linewise;\n          var operatorMoveTo = operators[operator](\n            cm, operatorArgs, cmSel.ranges, oldAnchor, newHead);\n          if (vim.visualMode) {\n            exitVisualMode(cm, operatorMoveTo != null);\n          }\n          if (operatorMoveTo) {\n            cm.setCursor(operatorMoveTo);\n          }\n        }\n      },\n      recordLastEdit: function(vim, inputState, actionCommand) {\n        var macroModeState = vimGlobalState.macroModeState;\n        if (macroModeState.isPlaying) { return; }\n        vim.lastEditInputState = inputState;\n        vim.lastEditActionCommand = actionCommand;\n        macroModeState.lastInsertModeChanges.changes = [];\n        macroModeState.lastInsertModeChanges.expectCursorActivityForChange = false;\n      }\n    };\n\n    /**\n     * typedef {Object{line:number,ch:number}} Cursor An object containing the\n     *     position of the cursor.\n     */\n    // All of the functions below return Cursor objects.\n    var motions = {\n      moveToTopLine: function(cm, _head, motionArgs) {\n        var line = getUserVisibleLines(cm).top + motionArgs.repeat -1;\n        return Pos(line, findFirstNonWhiteSpaceCharacter(cm.getLine(line)));\n      },\n      moveToMiddleLine: function(cm) {\n        var range = getUserVisibleLines(cm);\n        var line = Math.floor((range.top + range.bottom) * 0.5);\n        return Pos(line, findFirstNonWhiteSpaceCharacter(cm.getLine(line)));\n      },\n      moveToBottomLine: function(cm, _head, motionArgs) {\n        var line = getUserVisibleLines(cm).bottom - motionArgs.repeat +1;\n        return Pos(line, findFirstNonWhiteSpaceCharacter(cm.getLine(line)));\n      },\n      expandToLine: function(_cm, head, motionArgs) {\n        // Expands forward to end of line, and then to next line if repeat is\n        // >1. Does not handle backward motion!\n        var cur = head;\n        return Pos(cur.line + motionArgs.repeat - 1, Infinity);\n      },\n      findNext: function(cm, _head, motionArgs) {\n        var state = getSearchState(cm);\n        var query = state.getQuery();\n        if (!query) {\n          return;\n        }\n        var prev = !motionArgs.forward;\n        // If search is initiated with ? instead of /, negate direction.\n        prev = (state.isReversed()) ? !prev : prev;\n        highlightSearchMatches(cm, query);\n        return findNext(cm, prev/** prev */, query, motionArgs.repeat);\n      },\n      goToMark: function(cm, _head, motionArgs, vim) {\n        var mark = vim.marks[motionArgs.selectedCharacter];\n        if (mark) {\n          var pos = mark.find();\n          return motionArgs.linewise ? { line: pos.line, ch: findFirstNonWhiteSpaceCharacter(cm.getLine(pos.line)) } : pos;\n        }\n        return null;\n      },\n      moveToOtherHighlightedEnd: function(cm, _head, motionArgs, vim) {\n        if (vim.visualBlock && motionArgs.sameLine) {\n          var sel = vim.sel;\n          return [\n            clipCursorToContent(cm, Pos(sel.anchor.line, sel.head.ch)),\n            clipCursorToContent(cm, Pos(sel.head.line, sel.anchor.ch))\n          ];\n        } else {\n          return ([vim.sel.head, vim.sel.anchor]);\n        }\n      },\n      jumpToMark: function(cm, head, motionArgs, vim) {\n        var best = head;\n        for (var i = 0; i < motionArgs.repeat; i++) {\n          var cursor = best;\n          for (var key in vim.marks) {\n            if (!isLowerCase(key)) {\n              continue;\n            }\n            var mark = vim.marks[key].find();\n            var isWrongDirection = (motionArgs.forward) ?\n              cursorIsBefore(mark, cursor) : cursorIsBefore(cursor, mark);\n\n            if (isWrongDirection) {\n              continue;\n            }\n            if (motionArgs.linewise && (mark.line == cursor.line)) {\n              continue;\n            }\n\n            var equal = cursorEqual(cursor, best);\n            var between = (motionArgs.forward) ?\n              cursorIsBetween(cursor, mark, best) :\n              cursorIsBetween(best, mark, cursor);\n\n            if (equal || between) {\n              best = mark;\n            }\n          }\n        }\n\n        if (motionArgs.linewise) {\n          // Vim places the cursor on the first non-whitespace character of\n          // the line if there is one, else it places the cursor at the end\n          // of the line, regardless of whether a mark was found.\n          best = Pos(best.line, findFirstNonWhiteSpaceCharacter(cm.getLine(best.line)));\n        }\n        return best;\n      },\n      moveByCharacters: function(_cm, head, motionArgs) {\n        var cur = head;\n        var repeat = motionArgs.repeat;\n        var ch = motionArgs.forward ? cur.ch + repeat : cur.ch - repeat;\n        return Pos(cur.line, ch);\n      },\n      moveByLines: function(cm, head, motionArgs, vim) {\n        var cur = head;\n        var endCh = cur.ch;\n        // Depending what our last motion was, we may want to do different\n        // things. If our last motion was moving vertically, we want to\n        // preserve the HPos from our last horizontal move.  If our last motion\n        // was going to the end of a line, moving vertically we should go to\n        // the end of the line, etc.\n        switch (vim.lastMotion) {\n          case this.moveByLines:\n          case this.moveByDisplayLines:\n          case this.moveByScroll:\n          case this.moveToColumn:\n          case this.moveToEol:\n            endCh = vim.lastHPos;\n            break;\n          default:\n            vim.lastHPos = endCh;\n        }\n        var repeat = motionArgs.repeat+(motionArgs.repeatOffset||0);\n        var line = motionArgs.forward ? cur.line + repeat : cur.line - repeat;\n        var first = cm.firstLine();\n        var last = cm.lastLine();\n        // Vim cancels linewise motions that start on an edge and move beyond\n        // that edge. It does not cancel motions that do not start on an edge.\n        if ((line < first && cur.line == first) ||\n            (line > last && cur.line == last)) {\n          return;\n        }\n        // ace_patch{\n        var fold = cm.ace.session.getFoldLine(line);\n        if (fold) {\n          if (motionArgs.forward) {\n            if (line > fold.start.row)\n              line = fold.end.row + 1;\n          } else {\n            line = fold.start.row;\n          }\n        }\n        // ace_patch}\n        if (motionArgs.toFirstChar){\n          endCh=findFirstNonWhiteSpaceCharacter(cm.getLine(line));\n          vim.lastHPos = endCh;\n        }\n        vim.lastHSPos = cm.charCoords(Pos(line, endCh),'div').left;\n        return Pos(line, endCh);\n      },\n      moveByDisplayLines: function(cm, head, motionArgs, vim) {\n        var cur = head;\n        switch (vim.lastMotion) {\n          case this.moveByDisplayLines:\n          case this.moveByScroll:\n          case this.moveByLines:\n          case this.moveToColumn:\n          case this.moveToEol:\n            break;\n          default:\n            vim.lastHSPos = cm.charCoords(cur,'div').left;\n        }\n        var repeat = motionArgs.repeat;\n        var res=cm.findPosV(cur,(motionArgs.forward ? repeat : -repeat),'line',vim.lastHSPos);\n        if (res.hitSide) {\n          if (motionArgs.forward) {\n            var lastCharCoords = cm.charCoords(res, 'div');\n            var goalCoords = { top: lastCharCoords.top + 8, left: vim.lastHSPos };\n            var res = cm.coordsChar(goalCoords, 'div');\n          } else {\n            var resCoords = cm.charCoords(Pos(cm.firstLine(), 0), 'div');\n            resCoords.left = vim.lastHSPos;\n            res = cm.coordsChar(resCoords, 'div');\n          }\n        }\n        vim.lastHPos = res.ch;\n        return res;\n      },\n      moveByPage: function(cm, head, motionArgs) {\n        // CodeMirror only exposes functions that move the cursor page down, so\n        // doing this bad hack to move the cursor and move it back. evalInput\n        // will move the cursor to where it should be in the end.\n        var curStart = head;\n        var repeat = motionArgs.repeat;\n        return cm.findPosV(curStart, (motionArgs.forward ? repeat : -repeat), 'page');\n      },\n      moveByParagraph: function(cm, head, motionArgs) {\n        var dir = motionArgs.forward ? 1 : -1;\n        return findParagraph(cm, head, motionArgs.repeat, dir);\n      },\n      moveByScroll: function(cm, head, motionArgs, vim) {\n        var scrollbox = cm.getScrollInfo();\n        var curEnd = null;\n        var repeat = motionArgs.repeat;\n        if (!repeat) {\n          repeat = scrollbox.clientHeight / (2 * cm.defaultTextHeight());\n        }\n        var orig = cm.charCoords(head, 'local');\n        motionArgs.repeat = repeat;\n        var curEnd = motions.moveByDisplayLines(cm, head, motionArgs, vim);\n        if (!curEnd) {\n          return null;\n        }\n        var dest = cm.charCoords(curEnd, 'local');\n        cm.scrollTo(null, scrollbox.top + dest.top - orig.top);\n        return curEnd;\n      },\n      moveByWords: function(cm, head, motionArgs) {\n        return moveToWord(cm, head, motionArgs.repeat, !!motionArgs.forward,\n            !!motionArgs.wordEnd, !!motionArgs.bigWord);\n      },\n      moveTillCharacter: function(cm, _head, motionArgs) {\n        var repeat = motionArgs.repeat;\n        var curEnd = moveToCharacter(cm, repeat, motionArgs.forward,\n            motionArgs.selectedCharacter);\n        var increment = motionArgs.forward ? -1 : 1;\n        recordLastCharacterSearch(increment, motionArgs);\n        if (!curEnd) return null;\n        curEnd.ch += increment;\n        return curEnd;\n      },\n      moveToCharacter: function(cm, head, motionArgs) {\n        var repeat = motionArgs.repeat;\n        recordLastCharacterSearch(0, motionArgs);\n        return moveToCharacter(cm, repeat, motionArgs.forward,\n            motionArgs.selectedCharacter) || head;\n      },\n      moveToSymbol: function(cm, head, motionArgs) {\n        var repeat = motionArgs.repeat;\n        return findSymbol(cm, repeat, motionArgs.forward,\n            motionArgs.selectedCharacter) || head;\n      },\n      moveToColumn: function(cm, head, motionArgs, vim) {\n        var repeat = motionArgs.repeat;\n        // repeat is equivalent to which column we want to move to!\n        vim.lastHPos = repeat - 1;\n        vim.lastHSPos = cm.charCoords(head,'div').left;\n        return moveToColumn(cm, repeat);\n      },\n      moveToEol: function(cm, head, motionArgs, vim) {\n        var cur = head;\n        vim.lastHPos = Infinity;\n        var retval= Pos(cur.line + motionArgs.repeat - 1, Infinity);\n        var end=cm.clipPos(retval);\n        end.ch--;\n        vim.lastHSPos = cm.charCoords(end,'div').left;\n        return retval;\n      },\n      moveToFirstNonWhiteSpaceCharacter: function(cm, head) {\n        // Go to the start of the line where the text begins, or the end for\n        // whitespace-only lines\n        var cursor = head;\n        return Pos(cursor.line,\n                   findFirstNonWhiteSpaceCharacter(cm.getLine(cursor.line)));\n      },\n      moveToMatchedSymbol: function(cm, head) {\n        var cursor = head;\n        var line = cursor.line;\n        var ch = cursor.ch;\n        var lineText = cm.getLine(line);\n        var symbol;\n        do {\n          symbol = lineText.charAt(ch++);\n          if (symbol && isMatchableSymbol(symbol)) {\n            var style = cm.getTokenTypeAt(Pos(line, ch));\n            if (style !== \"string\" && style !== \"comment\") {\n              break;\n            }\n          }\n        } while (symbol);\n        if (symbol) {\n          var matched = cm.findMatchingBracket(Pos(line, ch));\n          return matched.to;\n        } else {\n          return cursor;\n        }\n      },\n      moveToStartOfLine: function(_cm, head) {\n        return Pos(head.line, 0);\n      },\n      moveToLineOrEdgeOfDocument: function(cm, _head, motionArgs) {\n        var lineNum = motionArgs.forward ? cm.lastLine() : cm.firstLine();\n        if (motionArgs.repeatIsExplicit) {\n          lineNum = motionArgs.repeat - cm.getOption('firstLineNumber');\n        }\n        return Pos(lineNum,\n                   findFirstNonWhiteSpaceCharacter(cm.getLine(lineNum)));\n      },\n      textObjectManipulation: function(cm, head, motionArgs, vim) {\n        // TODO: lots of possible exceptions that can be thrown here. Try da(\n        //     outside of a () block.\n\n        // TODO: adding <> >< to this map doesn't work, presumably because\n        // they're operators\n        var mirroredPairs = {'(': ')', ')': '(',\n                             '{': '}', '}': '{',\n                             '[': ']', ']': '['};\n        var selfPaired = {'\\'': true, '\"': true};\n\n        var character = motionArgs.selectedCharacter;\n        // 'b' refers to  '()' block.\n        // 'B' refers to  '{}' block.\n        if (character == 'b') {\n          character = '(';\n        } else if (character == 'B') {\n          character = '{';\n        }\n\n        // Inclusive is the difference between a and i\n        // TODO: Instead of using the additional text object map to perform text\n        //     object operations, merge the map into the defaultKeyMap and use\n        //     motionArgs to define behavior. Define separate entries for 'aw',\n        //     'iw', 'a[', 'i[', etc.\n        var inclusive = !motionArgs.textObjectInner;\n\n        var tmp;\n        if (mirroredPairs[character]) {\n          tmp = selectCompanionObject(cm, head, character, inclusive);\n        } else if (selfPaired[character]) {\n          tmp = findBeginningAndEnd(cm, head, character, inclusive);\n        } else if (character === 'W') {\n          tmp = expandWordUnderCursor(cm, inclusive, true /** forward */,\n                                                     true /** bigWord */);\n        } else if (character === 'w') {\n          tmp = expandWordUnderCursor(cm, inclusive, true /** forward */,\n                                                     false /** bigWord */);\n        } else if (character === 'p') {\n          tmp = findParagraph(cm, head, motionArgs.repeat, 0, inclusive);\n          motionArgs.linewise = true;\n          if (vim.visualMode) {\n            if (!vim.visualLine) { vim.visualLine = true; }\n          } else {\n            var operatorArgs = vim.inputState.operatorArgs;\n            if (operatorArgs) { operatorArgs.linewise = true; }\n            tmp.end.line--;\n          }\n        } else {\n          // No text object defined for this, don't move.\n          return null;\n        }\n\n        if (!cm.state.vim.visualMode) {\n          return [tmp.start, tmp.end];\n        } else {\n          return expandSelection(cm, tmp.start, tmp.end);\n        }\n      },\n\n      repeatLastCharacterSearch: function(cm, head, motionArgs) {\n        var lastSearch = vimGlobalState.lastChararacterSearch;\n        var repeat = motionArgs.repeat;\n        var forward = motionArgs.forward === lastSearch.forward;\n        var increment = (lastSearch.increment ? 1 : 0) * (forward ? -1 : 1);\n        cm.moveH(-increment, 'char');\n        motionArgs.inclusive = forward ? true : false;\n        var curEnd = moveToCharacter(cm, repeat, forward, lastSearch.selectedCharacter);\n        if (!curEnd) {\n          cm.moveH(increment, 'char');\n          return head;\n        }\n        curEnd.ch += increment;\n        return curEnd;\n      }\n    };\n\n    function defineMotion(name, fn) {\n      motions[name] = fn;\n    }\n\n    function fillArray(val, times) {\n      var arr = [];\n      for (var i = 0; i < times; i++) {\n        arr.push(val);\n      }\n      return arr;\n    }\n    /**\n     * An operator acts on a text selection. It receives the list of selections\n     * as input. The corresponding CodeMirror selection is guaranteed to\n    * match the input selection.\n     */\n    var operators = {\n      change: function(cm, args, ranges) {\n        var finalHead, text;\n        var vim = cm.state.vim;\n        vimGlobalState.macroModeState.lastInsertModeChanges.inVisualBlock = vim.visualBlock;\n        if (!vim.visualMode) {\n          var anchor = ranges[0].anchor,\n              head = ranges[0].head;\n          text = cm.getRange(anchor, head);\n          var lastState = vim.lastEditInputState || {};\n          if (lastState.motion == \"moveByWords\" && !isWhiteSpaceString(text)) {\n            // Exclude trailing whitespace if the range is not all whitespace.\n            var match = (/\\s+$/).exec(text);\n            if (match && lastState.motionArgs && lastState.motionArgs.forward) {\n              head = offsetCursor(head, 0, - match[0].length);\n              text = text.slice(0, - match[0].length);\n            }\n          }\n          var prevLineEnd = new Pos(anchor.line - 1, Number.MAX_VALUE);\n          var wasLastLine = cm.firstLine() == cm.lastLine();\n          if (head.line > cm.lastLine() && args.linewise && !wasLastLine) {\n            cm.replaceRange('', prevLineEnd, head);\n          } else {\n            cm.replaceRange('', anchor, head);\n          }\n          if (args.linewise) {\n            // Push the next line back down, if there is a next line.\n            if (!wasLastLine) {\n              cm.setCursor(prevLineEnd);\n              CodeMirror.commands.newlineAndIndent(cm);\n            }\n            // make sure cursor ends up at the end of the line.\n            anchor.ch = Number.MAX_VALUE;\n          }\n          finalHead = anchor;\n        } else {\n          text = cm.getSelection();\n          var replacement = fillArray('', ranges.length);\n          cm.replaceSelections(replacement);\n          finalHead = cursorMin(ranges[0].head, ranges[0].anchor);\n        }\n        vimGlobalState.registerController.pushText(\n            args.registerName, 'change', text,\n            args.linewise, ranges.length > 1);\n        actions.enterInsertMode(cm, {head: finalHead}, cm.state.vim);\n      },\n      // delete is a javascript keyword.\n      'delete': function(cm, args, ranges) {\n        var finalHead, text;\n        var vim = cm.state.vim;\n        if (!vim.visualBlock) {\n          var anchor = ranges[0].anchor,\n              head = ranges[0].head;\n          if (args.linewise &&\n              head.line != cm.firstLine() &&\n              anchor.line == cm.lastLine() &&\n              anchor.line == head.line - 1) {\n            // Special case for dd on last line (and first line).\n            if (anchor.line == cm.firstLine()) {\n              anchor.ch = 0;\n            } else {\n              anchor = Pos(anchor.line - 1, lineLength(cm, anchor.line - 1));\n            }\n          }\n          text = cm.getRange(anchor, head);\n          cm.replaceRange('', anchor, head);\n          finalHead = anchor;\n          if (args.linewise) {\n            finalHead = motions.moveToFirstNonWhiteSpaceCharacter(cm, anchor);\n          }\n        } else {\n          text = cm.getSelection();\n          var replacement = fillArray('', ranges.length);\n          cm.replaceSelections(replacement);\n          finalHead = ranges[0].anchor;\n        }\n        vimGlobalState.registerController.pushText(\n            args.registerName, 'delete', text,\n            args.linewise, vim.visualBlock);\n        return clipCursorToContent(cm, finalHead);\n      },\n      indent: function(cm, args, ranges) {\n        var vim = cm.state.vim;\n        var startLine = ranges[0].anchor.line;\n        var endLine = vim.visualBlock ?\n          ranges[ranges.length - 1].anchor.line :\n          ranges[0].head.line;\n        // In visual mode, n> shifts the selection right n times, instead of\n        // shifting n lines right once.\n        var repeat = (vim.visualMode) ? args.repeat : 1;\n        if (args.linewise) {\n          // The only way to delete a newline is to delete until the start of\n          // the next line, so in linewise mode evalInput will include the next\n          // line. We don't want this in indent, so we go back a line.\n          endLine--;\n        }\n        for (var i = startLine; i <= endLine; i++) {\n          for (var j = 0; j < repeat; j++) {\n            cm.indentLine(i, args.indentRight);\n          }\n        }\n        return motions.moveToFirstNonWhiteSpaceCharacter(cm, ranges[0].anchor);\n      },\n      changeCase: function(cm, args, ranges, oldAnchor, newHead) {\n        var selections = cm.getSelections();\n        var swapped = [];\n        var toLower = args.toLower;\n        for (var j = 0; j < selections.length; j++) {\n          var toSwap = selections[j];\n          var text = '';\n          if (toLower === true) {\n            text = toSwap.toLowerCase();\n          } else if (toLower === false) {\n            text = toSwap.toUpperCase();\n          } else {\n            for (var i = 0; i < toSwap.length; i++) {\n              var character = toSwap.charAt(i);\n              text += isUpperCase(character) ? character.toLowerCase() :\n                  character.toUpperCase();\n            }\n          }\n          swapped.push(text);\n        }\n        cm.replaceSelections(swapped);\n        if (args.shouldMoveCursor){\n          return newHead;\n        } else if (!cm.state.vim.visualMode && args.linewise && ranges[0].anchor.line + 1 == ranges[0].head.line) {\n          return motions.moveToFirstNonWhiteSpaceCharacter(cm, oldAnchor);\n        } else if (args.linewise){\n          return oldAnchor;\n        } else {\n          return cursorMin(ranges[0].anchor, ranges[0].head);\n        }\n      },\n      yank: function(cm, args, ranges, oldAnchor) {\n        var vim = cm.state.vim;\n        var text = cm.getSelection();\n        var endPos = vim.visualMode\n          ? cursorMin(vim.sel.anchor, vim.sel.head, ranges[0].head, ranges[0].anchor)\n          : oldAnchor;\n        vimGlobalState.registerController.pushText(\n            args.registerName, 'yank',\n            text, args.linewise, vim.visualBlock);\n        return endPos;\n      }\n    };\n\n    function defineOperator(name, fn) {\n      operators[name] = fn;\n    }\n\n    var actions = {\n      jumpListWalk: function(cm, actionArgs, vim) {\n        if (vim.visualMode) {\n          return;\n        }\n        var repeat = actionArgs.repeat;\n        var forward = actionArgs.forward;\n        var jumpList = vimGlobalState.jumpList;\n\n        var mark = jumpList.move(cm, forward ? repeat : -repeat);\n        var markPos = mark ? mark.find() : undefined;\n        markPos = markPos ? markPos : cm.getCursor();\n        cm.setCursor(markPos);\n        cm.ace.curOp.command.scrollIntoView = \"center-animate\"; // ace_patch\n      },\n      scroll: function(cm, actionArgs, vim) {\n        if (vim.visualMode) {\n          return;\n        }\n        var repeat = actionArgs.repeat || 1;\n        var lineHeight = cm.defaultTextHeight();\n        var top = cm.getScrollInfo().top;\n        var delta = lineHeight * repeat;\n        var newPos = actionArgs.forward ? top + delta : top - delta;\n        var cursor = copyCursor(cm.getCursor());\n        var cursorCoords = cm.charCoords(cursor, 'local');\n        if (actionArgs.forward) {\n          if (newPos > cursorCoords.top) {\n             cursor.line += (newPos - cursorCoords.top) / lineHeight;\n             cursor.line = Math.ceil(cursor.line);\n             cm.setCursor(cursor);\n             cursorCoords = cm.charCoords(cursor, 'local');\n             cm.scrollTo(null, cursorCoords.top);\n          } else {\n             // Cursor stays within bounds.  Just reposition the scroll window.\n             cm.scrollTo(null, newPos);\n          }\n        } else {\n          var newBottom = newPos + cm.getScrollInfo().clientHeight;\n          if (newBottom < cursorCoords.bottom) {\n             cursor.line -= (cursorCoords.bottom - newBottom) / lineHeight;\n             cursor.line = Math.floor(cursor.line);\n             cm.setCursor(cursor);\n             cursorCoords = cm.charCoords(cursor, 'local');\n             cm.scrollTo(\n                 null, cursorCoords.bottom - cm.getScrollInfo().clientHeight);\n          } else {\n             // Cursor stays within bounds.  Just reposition the scroll window.\n             cm.scrollTo(null, newPos);\n          }\n        }\n      },\n      scrollToCursor: function(cm, actionArgs) {\n        var lineNum = cm.getCursor().line;\n        var charCoords = cm.charCoords(Pos(lineNum, 0), 'local');\n        var height = cm.getScrollInfo().clientHeight;\n        var y = charCoords.top;\n        var lineHeight = charCoords.bottom - y;\n        switch (actionArgs.position) {\n          case 'center': y = y - (height / 2) + lineHeight;\n            break;\n          case 'bottom': y = y - height + lineHeight*1.4;\n            break;\n          case 'top': y = y + lineHeight*0.4;\n            break;\n        }\n        cm.scrollTo(null, y);\n      },\n      replayMacro: function(cm, actionArgs, vim) {\n        var registerName = actionArgs.selectedCharacter;\n        var repeat = actionArgs.repeat;\n        var macroModeState = vimGlobalState.macroModeState;\n        if (registerName == '@') {\n          registerName = macroModeState.latestRegister;\n        }\n        while(repeat--){\n          executeMacroRegister(cm, vim, macroModeState, registerName);\n        }\n      },\n      enterMacroRecordMode: function(cm, actionArgs) {\n        var macroModeState = vimGlobalState.macroModeState;\n        var registerName = actionArgs.selectedCharacter;\n        macroModeState.enterMacroRecordMode(cm, registerName);\n      },\n      enterInsertMode: function(cm, actionArgs, vim) {\n        if (cm.getOption('readOnly')) { return; }\n        vim.insertMode = true;\n        vim.insertModeRepeat = actionArgs && actionArgs.repeat || 1;\n        var insertAt = (actionArgs) ? actionArgs.insertAt : null;\n        var sel = vim.sel;\n        var head = actionArgs.head || cm.getCursor('head');\n        var height = cm.listSelections().length;\n        if (insertAt == 'eol') {\n          head = Pos(head.line, lineLength(cm, head.line));\n        } else if (insertAt == 'charAfter') {\n          head = offsetCursor(head, 0, 1);\n        } else if (insertAt == 'firstNonBlank') {\n          head = motions.moveToFirstNonWhiteSpaceCharacter(cm, head);\n        } else if (insertAt == 'startOfSelectedArea') {\n          if (!vim.visualBlock) {\n            if (sel.head.line < sel.anchor.line) {\n              head = sel.head;\n            } else {\n              head = Pos(sel.anchor.line, 0);\n            }\n          } else {\n            head = Pos(\n                Math.min(sel.head.line, sel.anchor.line),\n                Math.min(sel.head.ch, sel.anchor.ch));\n            height = Math.abs(sel.head.line - sel.anchor.line) + 1;\n          }\n        } else if (insertAt == 'endOfSelectedArea') {\n          if (!vim.visualBlock) {\n            if (sel.head.line >= sel.anchor.line) {\n              head = offsetCursor(sel.head, 0, 1);\n            } else {\n              head = Pos(sel.anchor.line, 0);\n            }\n          } else {\n            head = Pos(\n                Math.min(sel.head.line, sel.anchor.line),\n                Math.max(sel.head.ch + 1, sel.anchor.ch));\n            height = Math.abs(sel.head.line - sel.anchor.line) + 1;\n          }\n        } else if (insertAt == 'inplace') {\n          if (vim.visualMode){\n            return;\n          }\n        }\n        cm.setOption('keyMap', 'vim-insert');\n        cm.setOption('disableInput', false);\n        if (actionArgs && actionArgs.replace) {\n          // Handle Replace-mode as a special case of insert mode.\n          cm.toggleOverwrite(true);\n          cm.setOption('keyMap', 'vim-replace');\n          CodeMirror.signal(cm, \"vim-mode-change\", {mode: \"replace\"});\n        } else {\n          cm.setOption('keyMap', 'vim-insert');\n          CodeMirror.signal(cm, \"vim-mode-change\", {mode: \"insert\"});\n        }\n        if (!vimGlobalState.macroModeState.isPlaying) {\n          // Only record if not replaying.\n          cm.on('change', onChange);\n          CodeMirror.on(cm.getInputField(), 'keydown', onKeyEventTargetKeyDown);\n        }\n        if (vim.visualMode) {\n          exitVisualMode(cm);\n        }\n        selectForInsert(cm, head, height);\n      },\n      toggleVisualMode: function(cm, actionArgs, vim) {\n        var repeat = actionArgs.repeat;\n        var anchor = cm.getCursor();\n        var head;\n        // TODO: The repeat should actually select number of characters/lines\n        //     equal to the repeat times the size of the previous visual\n        //     operation.\n        if (!vim.visualMode) {\n          // Entering visual mode\n          vim.visualMode = true;\n          vim.visualLine = !!actionArgs.linewise;\n          vim.visualBlock = !!actionArgs.blockwise;\n          head = clipCursorToContent(\n              cm, Pos(anchor.line, anchor.ch + repeat - 1),\n              true /** includeLineBreak */);\n          vim.sel = {\n            anchor: anchor,\n            head: head\n          };\n          CodeMirror.signal(cm, \"vim-mode-change\", {mode: \"visual\", subMode: vim.visualLine ? \"linewise\" : vim.visualBlock ? \"blockwise\" : \"\"});\n          updateCmSelection(cm);\n          updateMark(cm, vim, '<', cursorMin(anchor, head));\n          updateMark(cm, vim, '>', cursorMax(anchor, head));\n        } else if (vim.visualLine ^ actionArgs.linewise ||\n            vim.visualBlock ^ actionArgs.blockwise) {\n          // Toggling between modes\n          vim.visualLine = !!actionArgs.linewise;\n          vim.visualBlock = !!actionArgs.blockwise;\n          CodeMirror.signal(cm, \"vim-mode-change\", {mode: \"visual\", subMode: vim.visualLine ? \"linewise\" : vim.visualBlock ? \"blockwise\" : \"\"});\n          updateCmSelection(cm);\n        } else {\n          exitVisualMode(cm);\n        }\n      },\n      reselectLastSelection: function(cm, _actionArgs, vim) {\n        var lastSelection = vim.lastSelection;\n        if (vim.visualMode) {\n          updateLastSelection(cm, vim);\n        }\n        if (lastSelection) {\n          var anchor = lastSelection.anchorMark.find();\n          var head = lastSelection.headMark.find();\n          if (!anchor || !head) {\n            // If the marks have been destroyed due to edits, do nothing.\n            return;\n          }\n          vim.sel = {\n            anchor: anchor,\n            head: head\n          };\n          vim.visualMode = true;\n          vim.visualLine = lastSelection.visualLine;\n          vim.visualBlock = lastSelection.visualBlock;\n          updateCmSelection(cm);\n          updateMark(cm, vim, '<', cursorMin(anchor, head));\n          updateMark(cm, vim, '>', cursorMax(anchor, head));\n          CodeMirror.signal(cm, 'vim-mode-change', {\n            mode: 'visual',\n            subMode: vim.visualLine ? 'linewise' :\n                     vim.visualBlock ? 'blockwise' : ''});\n        }\n      },\n      joinLines: function(cm, actionArgs, vim) {\n        var curStart, curEnd;\n        if (vim.visualMode) {\n          curStart = cm.getCursor('anchor');\n          curEnd = cm.getCursor('head');\n          if (cursorIsBefore(curEnd, curStart)) {\n            var tmp = curEnd;\n            curEnd = curStart;\n            curStart = tmp;\n          }\n          curEnd.ch = lineLength(cm, curEnd.line) - 1;\n        } else {\n          // Repeat is the number of lines to join. Minimum 2 lines.\n          var repeat = Math.max(actionArgs.repeat, 2);\n          curStart = cm.getCursor();\n          curEnd = clipCursorToContent(cm, Pos(curStart.line + repeat - 1,\n                                               Infinity));\n        }\n        var finalCh = 0;\n        for (var i = curStart.line; i < curEnd.line; i++) {\n          finalCh = lineLength(cm, curStart.line);\n          var tmp = Pos(curStart.line + 1,\n                        lineLength(cm, curStart.line + 1));\n          var text = cm.getRange(curStart, tmp);\n          text = text.replace(/\\n\\s*/g, ' ');\n          cm.replaceRange(text, curStart, tmp);\n        }\n        var curFinalPos = Pos(curStart.line, finalCh);\n        if (vim.visualMode) {\n          exitVisualMode(cm, false);\n        }\n        cm.setCursor(curFinalPos);\n      },\n      newLineAndEnterInsertMode: function(cm, actionArgs, vim) {\n        vim.insertMode = true;\n        var insertAt = copyCursor(cm.getCursor());\n        if (insertAt.line === cm.firstLine() && !actionArgs.after) {\n          // Special case for inserting newline before start of document.\n          cm.replaceRange('\\n', Pos(cm.firstLine(), 0));\n          cm.setCursor(cm.firstLine(), 0);\n        } else {\n          insertAt.line = (actionArgs.after) ? insertAt.line :\n              insertAt.line - 1;\n          insertAt.ch = lineLength(cm, insertAt.line);\n          cm.setCursor(insertAt);\n          var newlineFn = CodeMirror.commands.newlineAndIndentContinueComment ||\n              CodeMirror.commands.newlineAndIndent;\n          newlineFn(cm);\n        }\n        this.enterInsertMode(cm, { repeat: actionArgs.repeat }, vim);\n      },\n      paste: function(cm, actionArgs, vim) {\n        var cur = copyCursor(cm.getCursor());\n        var register = vimGlobalState.registerController.getRegister(\n            actionArgs.registerName);\n        var text = register.toString();\n        if (!text) {\n          return;\n        }\n        if (actionArgs.matchIndent) {\n          var tabSize = cm.getOption(\"tabSize\");\n          // length that considers tabs and tabSize\n          var whitespaceLength = function(str) {\n            var tabs = (str.split(\"\\t\").length - 1);\n            var spaces = (str.split(\" \").length - 1);\n            return tabs * tabSize + spaces * 1;\n          };\n          var currentLine = cm.getLine(cm.getCursor().line);\n          var indent = whitespaceLength(currentLine.match(/^\\s*/)[0]);\n          // chomp last newline b/c don't want it to match /^\\s*/gm\n          var chompedText = text.replace(/\\n$/, '');\n          var wasChomped = text !== chompedText;\n          var firstIndent = whitespaceLength(text.match(/^\\s*/)[0]);\n          var text = chompedText.replace(/^\\s*/gm, function(wspace) {\n            var newIndent = indent + (whitespaceLength(wspace) - firstIndent);\n            if (newIndent < 0) {\n              return \"\";\n            }\n            else if (cm.getOption(\"indentWithTabs\")) {\n              var quotient = Math.floor(newIndent / tabSize);\n              return Array(quotient + 1).join('\\t');\n            }\n            else {\n              return Array(newIndent + 1).join(' ');\n            }\n          });\n          text += wasChomped ? \"\\n\" : \"\";\n        }\n        if (actionArgs.repeat > 1) {\n          var text = Array(actionArgs.repeat + 1).join(text);\n        }\n        var linewise = register.linewise;\n        var blockwise = register.blockwise;\n        if (linewise && !blockwise) {\n          if(vim.visualMode) {\n            text = vim.visualLine ? text.slice(0, -1) : '\\n' + text.slice(0, text.length - 1) + '\\n';\n          } else if (actionArgs.after) {\n            // Move the newline at the end to the start instead, and paste just\n            // before the newline character of the line we are on right now.\n            text = '\\n' + text.slice(0, text.length - 1);\n            cur.ch = lineLength(cm, cur.line);\n          } else {\n            cur.ch = 0;\n          }\n        } else {\n          if (blockwise) {\n            text = text.split('\\n');\n            for (var i = 0; i < text.length; i++) {\n              text[i] = (text[i] == '') ? ' ' : text[i];\n            }\n          }\n          cur.ch += actionArgs.after ? 1 : 0;\n        }\n        var curPosFinal;\n        var idx;\n        if (vim.visualMode) {\n          //  save the pasted text for reselection if the need arises\n          vim.lastPastedText = text;\n          var lastSelectionCurEnd;\n          var selectedArea = getSelectedAreaRange(cm, vim);\n          var selectionStart = selectedArea[0];\n          var selectionEnd = selectedArea[1];\n          var selectedText = cm.getSelection();\n          var selections = cm.listSelections();\n          var emptyStrings = new Array(selections.length).join('1').split('1');\n          // save the curEnd marker before it get cleared due to cm.replaceRange.\n          if (vim.lastSelection) {\n            lastSelectionCurEnd = vim.lastSelection.headMark.find();\n          }\n          // push the previously selected text to unnamed register\n          vimGlobalState.registerController.unnamedRegister.setText(selectedText);\n          if (blockwise) {\n            // first delete the selected text\n            cm.replaceSelections(emptyStrings);\n            // Set new selections as per the block length of the yanked text\n            selectionEnd = Pos(selectionStart.line + text.length-1, selectionStart.ch);\n            cm.setCursor(selectionStart);\n            selectBlock(cm, selectionEnd);\n            cm.replaceSelections(text);\n            curPosFinal = selectionStart;\n          } else if (vim.visualBlock) {\n            cm.replaceSelections(emptyStrings);\n            cm.setCursor(selectionStart);\n            cm.replaceRange(text, selectionStart, selectionStart);\n            curPosFinal = selectionStart;\n          } else {\n            cm.replaceRange(text, selectionStart, selectionEnd);\n            curPosFinal = cm.posFromIndex(cm.indexFromPos(selectionStart) + text.length - 1);\n          }\n          // restore the the curEnd marker\n          if(lastSelectionCurEnd) {\n            vim.lastSelection.headMark = cm.setBookmark(lastSelectionCurEnd);\n          }\n          if (linewise) {\n            curPosFinal.ch=0;\n          }\n        } else {\n          if (blockwise) {\n            cm.setCursor(cur);\n            for (var i = 0; i < text.length; i++) {\n              var line = cur.line+i;\n              if (line > cm.lastLine()) {\n                cm.replaceRange('\\n',  Pos(line, 0));\n              }\n              var lastCh = lineLength(cm, line);\n              if (lastCh < cur.ch) {\n                extendLineToColumn(cm, line, cur.ch);\n              }\n            }\n            cm.setCursor(cur);\n            selectBlock(cm, Pos(cur.line + text.length-1, cur.ch));\n            cm.replaceSelections(text);\n            curPosFinal = cur;\n          } else {\n            cm.replaceRange(text, cur);\n            // Now fine tune the cursor to where we want it.\n            if (linewise && actionArgs.after) {\n              curPosFinal = Pos(\n              cur.line + 1,\n              findFirstNonWhiteSpaceCharacter(cm.getLine(cur.line + 1)));\n            } else if (linewise && !actionArgs.after) {\n              curPosFinal = Pos(\n                cur.line,\n                findFirstNonWhiteSpaceCharacter(cm.getLine(cur.line)));\n            } else if (!linewise && actionArgs.after) {\n              idx = cm.indexFromPos(cur);\n              curPosFinal = cm.posFromIndex(idx + text.length - 1);\n            } else {\n              idx = cm.indexFromPos(cur);\n              curPosFinal = cm.posFromIndex(idx + text.length);\n            }\n          }\n        }\n        if (vim.visualMode) {\n          exitVisualMode(cm, false);\n        }\n        cm.setCursor(curPosFinal);\n      },\n      undo: function(cm, actionArgs) {\n        cm.operation(function() {\n          repeatFn(cm, CodeMirror.commands.undo, actionArgs.repeat)();\n          cm.setCursor(cm.getCursor('anchor'));\n        });\n      },\n      redo: function(cm, actionArgs) {\n        repeatFn(cm, CodeMirror.commands.redo, actionArgs.repeat)();\n      },\n      setRegister: function(_cm, actionArgs, vim) {\n        vim.inputState.registerName = actionArgs.selectedCharacter;\n      },\n      setMark: function(cm, actionArgs, vim) {\n        var markName = actionArgs.selectedCharacter;\n        updateMark(cm, vim, markName, cm.getCursor());\n      },\n      replace: function(cm, actionArgs, vim) {\n        var replaceWith = actionArgs.selectedCharacter;\n        var curStart = cm.getCursor();\n        var replaceTo;\n        var curEnd;\n        var selections = cm.listSelections();\n        if (vim.visualMode) {\n          curStart = cm.getCursor('start');\n          curEnd = cm.getCursor('end');\n        } else {\n          var line = cm.getLine(curStart.line);\n          replaceTo = curStart.ch + actionArgs.repeat;\n          if (replaceTo > line.length) {\n            replaceTo=line.length;\n          }\n          curEnd = Pos(curStart.line, replaceTo);\n        }\n        if (replaceWith=='\\n') {\n          if (!vim.visualMode) cm.replaceRange('', curStart, curEnd);\n          // special case, where vim help says to replace by just one line-break\n          (CodeMirror.commands.newlineAndIndentContinueComment || CodeMirror.commands.newlineAndIndent)(cm);\n        } else {\n          var replaceWithStr = cm.getRange(curStart, curEnd);\n          //replace all characters in range by selected, but keep linebreaks\n          replaceWithStr = replaceWithStr.replace(/[^\\n]/g, replaceWith);\n          if (vim.visualBlock) {\n            // Tabs are split in visua block before replacing\n            var spaces = new Array(cm.getOption(\"tabSize\")+1).join(' ');\n            replaceWithStr = cm.getSelection();\n            replaceWithStr = replaceWithStr.replace(/\\t/g, spaces).replace(/[^\\n]/g, replaceWith).split('\\n');\n            cm.replaceSelections(replaceWithStr);\n          } else {\n            cm.replaceRange(replaceWithStr, curStart, curEnd);\n          }\n          if (vim.visualMode) {\n            curStart = cursorIsBefore(selections[0].anchor, selections[0].head) ?\n                         selections[0].anchor : selections[0].head;\n            cm.setCursor(curStart);\n            exitVisualMode(cm, false);\n          } else {\n            cm.setCursor(offsetCursor(curEnd, 0, -1));\n          }\n        }\n      },\n      incrementNumberToken: function(cm, actionArgs) {\n        var cur = cm.getCursor();\n        var lineStr = cm.getLine(cur.line);\n        var re = /-?\\d+/g;\n        var match;\n        var start;\n        var end;\n        var numberStr;\n        var token;\n        while ((match = re.exec(lineStr)) !== null) {\n          token = match[0];\n          start = match.index;\n          end = start + token.length;\n          if (cur.ch < end)break;\n        }\n        if (!actionArgs.backtrack && (end <= cur.ch))return;\n        if (token) {\n          var increment = actionArgs.increase ? 1 : -1;\n          var number = parseInt(token) + (increment * actionArgs.repeat);\n          var from = Pos(cur.line, start);\n          var to = Pos(cur.line, end);\n          numberStr = number.toString();\n          cm.replaceRange(numberStr, from, to);\n        } else {\n          return;\n        }\n        cm.setCursor(Pos(cur.line, start + numberStr.length - 1));\n      },\n      repeatLastEdit: function(cm, actionArgs, vim) {\n        var lastEditInputState = vim.lastEditInputState;\n        if (!lastEditInputState) { return; }\n        var repeat = actionArgs.repeat;\n        if (repeat && actionArgs.repeatIsExplicit) {\n          vim.lastEditInputState.repeatOverride = repeat;\n        } else {\n          repeat = vim.lastEditInputState.repeatOverride || repeat;\n        }\n        repeatLastEdit(cm, vim, repeat, false /** repeatForInsert */);\n      },\n      exitInsertMode: exitInsertMode\n    };\n\n    function defineAction(name, fn) {\n      actions[name] = fn;\n    }\n\n    /*\n     * Below are miscellaneous utility functions used by vim.js\n     */\n\n    /**\n     * Clips cursor to ensure that line is within the buffer's range\n     * If includeLineBreak is true, then allow cur.ch == lineLength.\n     */\n    function clipCursorToContent(cm, cur, includeLineBreak) {\n      var line = Math.min(Math.max(cm.firstLine(), cur.line), cm.lastLine() );\n      var maxCh = lineLength(cm, line) - 1;\n      maxCh = (includeLineBreak) ? maxCh + 1 : maxCh;\n      var ch = Math.min(Math.max(0, cur.ch), maxCh);\n      return Pos(line, ch);\n    }\n    function copyArgs(args) {\n      var ret = {};\n      for (var prop in args) {\n        if (args.hasOwnProperty(prop)) {\n          ret[prop] = args[prop];\n        }\n      }\n      return ret;\n    }\n    function offsetCursor(cur, offsetLine, offsetCh) {\n      if (typeof offsetLine === 'object') {\n        offsetCh = offsetLine.ch;\n        offsetLine = offsetLine.line;\n      }\n      return Pos(cur.line + offsetLine, cur.ch + offsetCh);\n    }\n    function getOffset(anchor, head) {\n      return {\n        line: head.line - anchor.line,\n        ch: head.line - anchor.line\n      };\n    }\n    function commandMatches(keys, keyMap, context, inputState) {\n      // Partial matches are not applied. They inform the key handler\n      // that the current key sequence is a subsequence of a valid key\n      // sequence, so that the key buffer is not cleared.\n      var match, partial = [], full = [];\n      for (var i = 0; i < keyMap.length; i++) {\n        var command = keyMap[i];\n        if (context == 'insert' && command.context != 'insert' ||\n            command.context && command.context != context ||\n            inputState.operator && command.type == 'action' ||\n            !(match = commandMatch(keys, command.keys))) { continue; }\n        if (match == 'partial') { partial.push(command); }\n        if (match == 'full') { full.push(command); }\n      }\n      return {\n        partial: partial.length && partial,\n        full: full.length && full\n      };\n    }\n    function commandMatch(pressed, mapped) {\n      if (mapped.slice(-11) == '<character>') {\n        // Last character matches anything.\n        var prefixLen = mapped.length - 11;\n        var pressedPrefix = pressed.slice(0, prefixLen);\n        var mappedPrefix = mapped.slice(0, prefixLen);\n        return pressedPrefix == mappedPrefix && pressed.length > prefixLen ? 'full' :\n               mappedPrefix.indexOf(pressedPrefix) == 0 ? 'partial' : false;\n      } else {\n        return pressed == mapped ? 'full' :\n               mapped.indexOf(pressed) == 0 ? 'partial' : false;\n      }\n    }\n    function lastChar(keys) {\n      var match = /^.*(<[\\w\\-]+>)$/.exec(keys);\n      var selectedCharacter = match ? match[1] : keys.slice(-1);\n      if (selectedCharacter.length > 1){\n        switch(selectedCharacter){\n          case '<CR>':\n            selectedCharacter='\\n';\n            break;\n          case '<Space>':\n            selectedCharacter=' ';\n            break;\n          default:\n            break;\n        }\n      }\n      return selectedCharacter;\n    }\n    function repeatFn(cm, fn, repeat) {\n      return function() {\n        for (var i = 0; i < repeat; i++) {\n          fn(cm);\n        }\n      };\n    }\n    function copyCursor(cur) {\n      return Pos(cur.line, cur.ch);\n    }\n    function cursorEqual(cur1, cur2) {\n      return cur1.ch == cur2.ch && cur1.line == cur2.line;\n    }\n    function cursorIsBefore(cur1, cur2) {\n      if (cur1.line < cur2.line) {\n        return true;\n      }\n      if (cur1.line == cur2.line && cur1.ch < cur2.ch) {\n        return true;\n      }\n      return false;\n    }\n    function cursorMin(cur1, cur2) {\n      if (arguments.length > 2) {\n        cur2 = cursorMin.apply(undefined, Array.prototype.slice.call(arguments, 1));\n      }\n      return cursorIsBefore(cur1, cur2) ? cur1 : cur2;\n    }\n    function cursorMax(cur1, cur2) {\n      if (arguments.length > 2) {\n        cur2 = cursorMax.apply(undefined, Array.prototype.slice.call(arguments, 1));\n      }\n      return cursorIsBefore(cur1, cur2) ? cur2 : cur1;\n    }\n    function cursorIsBetween(cur1, cur2, cur3) {\n      // returns true if cur2 is between cur1 and cur3.\n      var cur1before2 = cursorIsBefore(cur1, cur2);\n      var cur2before3 = cursorIsBefore(cur2, cur3);\n      return cur1before2 && cur2before3;\n    }\n    function lineLength(cm, lineNum) {\n      return cm.getLine(lineNum).length;\n    }\n    function trim(s) {\n      if (s.trim) {\n        return s.trim();\n      }\n      return s.replace(/^\\s+|\\s+$/g, '');\n    }\n    function escapeRegex(s) {\n      return s.replace(/([.?*+$\\[\\]\\/\\\\(){}|\\-])/g, '\\\\$1');\n    }\n    function extendLineToColumn(cm, lineNum, column) {\n      var endCh = lineLength(cm, lineNum);\n      var spaces = new Array(column-endCh+1).join(' ');\n      cm.setCursor(Pos(lineNum, endCh));\n      cm.replaceRange(spaces, cm.getCursor());\n    }\n    // This functions selects a rectangular block\n    // of text with selectionEnd as any of its corner\n    // Height of block:\n    // Difference in selectionEnd.line and first/last selection.line\n    // Width of the block:\n    // Distance between selectionEnd.ch and any(first considered here) selection.ch\n    function selectBlock(cm, selectionEnd) {\n      var selections = [], ranges = cm.listSelections();\n      var head = copyCursor(cm.clipPos(selectionEnd));\n      var isClipped = !cursorEqual(selectionEnd, head);\n      var curHead = cm.getCursor('head');\n      var primIndex = getIndex(ranges, curHead);\n      var wasClipped = cursorEqual(ranges[primIndex].head, ranges[primIndex].anchor);\n      var max = ranges.length - 1;\n      var index = max - primIndex > primIndex ? max : 0;\n      var base = ranges[index].anchor;\n\n      var firstLine = Math.min(base.line, head.line);\n      var lastLine = Math.max(base.line, head.line);\n      var baseCh = base.ch, headCh = head.ch;\n\n      var dir = ranges[index].head.ch - baseCh;\n      var newDir = headCh - baseCh;\n      if (dir > 0 && newDir <= 0) {\n        baseCh++;\n        if (!isClipped) { headCh--; }\n      } else if (dir < 0 && newDir >= 0) {\n        baseCh--;\n        if (!wasClipped) { headCh++; }\n      } else if (dir < 0 && newDir == -1) {\n        baseCh--;\n        headCh++;\n      }\n      for (var line = firstLine; line <= lastLine; line++) {\n        var range = {anchor: new Pos(line, baseCh), head: new Pos(line, headCh)};\n        selections.push(range);\n      }\n      primIndex = head.line == lastLine ? selections.length - 1 : 0;\n      cm.setSelections(selections);\n      selectionEnd.ch = headCh;\n      base.ch = baseCh;\n      return base;\n    }\n    function selectForInsert(cm, head, height) {\n      var sel = [];\n      for (var i = 0; i < height; i++) {\n        var lineHead = offsetCursor(head, i, 0);\n        sel.push({anchor: lineHead, head: lineHead});\n      }\n      cm.setSelections(sel, 0);\n    }\n    // getIndex returns the index of the cursor in the selections.\n    function getIndex(ranges, cursor, end) {\n      for (var i = 0; i < ranges.length; i++) {\n        var atAnchor = end != 'head' && cursorEqual(ranges[i].anchor, cursor);\n        var atHead = end != 'anchor' && cursorEqual(ranges[i].head, cursor);\n        if (atAnchor || atHead) {\n          return i;\n        }\n      }\n      return -1;\n    }\n    function getSelectedAreaRange(cm, vim) {\n      var lastSelection = vim.lastSelection;\n      var getCurrentSelectedAreaRange = function() {\n        var selections = cm.listSelections();\n        var start =  selections[0];\n        var end = selections[selections.length-1];\n        var selectionStart = cursorIsBefore(start.anchor, start.head) ? start.anchor : start.head;\n        var selectionEnd = cursorIsBefore(end.anchor, end.head) ? end.head : end.anchor;\n        return [selectionStart, selectionEnd];\n      };\n      var getLastSelectedAreaRange = function() {\n        var selectionStart = cm.getCursor();\n        var selectionEnd = cm.getCursor();\n        var block = lastSelection.visualBlock;\n        if (block) {\n          var width = block.width;\n          var height = block.height;\n          selectionEnd = Pos(selectionStart.line + height, selectionStart.ch + width);\n          var selections = [];\n          // selectBlock creates a 'proper' rectangular block.\n          // We do not want that in all cases, so we manually set selections.\n          for (var i = selectionStart.line; i < selectionEnd.line; i++) {\n            var anchor = Pos(i, selectionStart.ch);\n            var head = Pos(i, selectionEnd.ch);\n            var range = {anchor: anchor, head: head};\n            selections.push(range);\n          }\n          cm.setSelections(selections);\n        } else {\n          var start = lastSelection.anchorMark.find();\n          var end = lastSelection.headMark.find();\n          var line = end.line - start.line;\n          var ch = end.ch - start.ch;\n          selectionEnd = {line: selectionEnd.line + line, ch: line ? selectionEnd.ch : ch + selectionEnd.ch};\n          if (lastSelection.visualLine) {\n            selectionStart = Pos(selectionStart.line, 0);\n            selectionEnd = Pos(selectionEnd.line, lineLength(cm, selectionEnd.line));\n          }\n          cm.setSelection(selectionStart, selectionEnd);\n        }\n        return [selectionStart, selectionEnd];\n      };\n      if (!vim.visualMode) {\n      // In case of replaying the action.\n        return getLastSelectedAreaRange();\n      } else {\n        return getCurrentSelectedAreaRange();\n      }\n    }\n    // Updates the previous selection with the current selection's values. This\n    // should only be called in visual mode.\n    function updateLastSelection(cm, vim) {\n      var anchor = vim.sel.anchor;\n      var head = vim.sel.head;\n      // To accommodate the effect of lastPastedText in the last selection\n      if (vim.lastPastedText) {\n        head = cm.posFromIndex(cm.indexFromPos(anchor) + vim.lastPastedText.length);\n        vim.lastPastedText = null;\n      }\n      vim.lastSelection = {'anchorMark': cm.setBookmark(anchor),\n                           'headMark': cm.setBookmark(head),\n                           'anchor': copyCursor(anchor),\n                           'head': copyCursor(head),\n                           'visualMode': vim.visualMode,\n                           'visualLine': vim.visualLine,\n                           'visualBlock': vim.visualBlock};\n    }\n    function expandSelection(cm, start, end) {\n      var sel = cm.state.vim.sel;\n      var head = sel.head;\n      var anchor = sel.anchor;\n      var tmp;\n      if (cursorIsBefore(end, start)) {\n        tmp = end;\n        end = start;\n        start = tmp;\n      }\n      if (cursorIsBefore(head, anchor)) {\n        head = cursorMin(start, head);\n        anchor = cursorMax(anchor, end);\n      } else {\n        anchor = cursorMin(start, anchor);\n        head = cursorMax(head, end);\n        head = offsetCursor(head, 0, -1);\n        if (head.ch == -1 && head.line != cm.firstLine()) {\n          head = Pos(head.line - 1, lineLength(cm, head.line - 1));\n        }\n      }\n      return [anchor, head];\n    }\n    /**\n     * Updates the CodeMirror selection to match the provided vim selection.\n     * If no arguments are given, it uses the current vim selection state.\n     */\n    function updateCmSelection(cm, sel, mode) {\n      var vim = cm.state.vim;\n      sel = sel || vim.sel;\n      var mode = mode ||\n        vim.visualLine ? 'line' : vim.visualBlock ? 'block' : 'char';\n      var cmSel = makeCmSelection(cm, sel, mode);\n      cm.setSelections(cmSel.ranges, cmSel.primary);\n      updateFakeCursor(cm);\n    }\n    function makeCmSelection(cm, sel, mode, exclusive) {\n      var head = copyCursor(sel.head);\n      var anchor = copyCursor(sel.anchor);\n      if (mode == 'char') {\n        var headOffset = !exclusive && !cursorIsBefore(sel.head, sel.anchor) ? 1 : 0;\n        var anchorOffset = cursorIsBefore(sel.head, sel.anchor) ? 1 : 0;\n        head = offsetCursor(sel.head, 0, headOffset);\n        anchor = offsetCursor(sel.anchor, 0, anchorOffset);\n        return {\n          ranges: [{anchor: anchor, head: head}],\n          primary: 0\n        };\n      } else if (mode == 'line') {\n        if (!cursorIsBefore(sel.head, sel.anchor)) {\n          anchor.ch = 0;\n\n          var lastLine = cm.lastLine();\n          if (head.line > lastLine) {\n            head.line = lastLine;\n          }\n          head.ch = lineLength(cm, head.line);\n        } else {\n          head.ch = 0;\n          anchor.ch = lineLength(cm, anchor.line);\n        }\n        return {\n          ranges: [{anchor: anchor, head: head}],\n          primary: 0\n        };\n      } else if (mode == 'block') {\n        var top = Math.min(anchor.line, head.line),\n            left = Math.min(anchor.ch, head.ch),\n            bottom = Math.max(anchor.line, head.line),\n            right = Math.max(anchor.ch, head.ch) + 1;\n        var height = bottom - top + 1;\n        var primary = head.line == top ? 0 : height - 1;\n        var ranges = [];\n        for (var i = 0; i < height; i++) {\n          ranges.push({\n            anchor: Pos(top + i, left),\n            head: Pos(top + i, right)\n          });\n        }\n        return {\n          ranges: ranges,\n          primary: primary\n        };\n      }\n    }\n    function getHead(cm) {\n      var cur = cm.getCursor('head');\n      if (cm.getSelection().length == 1) {\n        // Small corner case when only 1 character is selected. The \"real\"\n        // head is the left of head and anchor.\n        cur = cursorMin(cur, cm.getCursor('anchor'));\n      }\n      return cur;\n    }\n\n    /**\n     * If moveHead is set to false, the CodeMirror selection will not be\n     * touched. The caller assumes the responsibility of putting the cursor\n    * in the right place.\n     */\n    function exitVisualMode(cm, moveHead) {\n      var vim = cm.state.vim;\n      if (moveHead !== false) {\n        cm.setCursor(clipCursorToContent(cm, vim.sel.head));\n      }\n      updateLastSelection(cm, vim);\n      vim.visualMode = false;\n      vim.visualLine = false;\n      vim.visualBlock = false;\n      CodeMirror.signal(cm, \"vim-mode-change\", {mode: \"normal\"});\n      if (vim.fakeCursor) {\n        vim.fakeCursor.clear();\n      }\n    }\n\n    // Remove any trailing newlines from the selection. For\n    // example, with the caret at the start of the last word on the line,\n    // 'dw' should word, but not the newline, while 'w' should advance the\n    // caret to the first character of the next line.\n    function clipToLine(cm, curStart, curEnd) {\n      var selection = cm.getRange(curStart, curEnd);\n      // Only clip if the selection ends with trailing newline + whitespace\n      if (/\\n\\s*$/.test(selection)) {\n        var lines = selection.split('\\n');\n        // We know this is all whitepsace.\n        lines.pop();\n\n        // Cases:\n        // 1. Last word is an empty line - do not clip the trailing '\\n'\n        // 2. Last word is not an empty line - clip the trailing '\\n'\n        var line;\n        // Find the line containing the last word, and clip all whitespace up\n        // to it.\n        for (var line = lines.pop(); lines.length > 0 && line && isWhiteSpaceString(line); line = lines.pop()) {\n          curEnd.line--;\n          curEnd.ch = 0;\n        }\n        // If the last word is not an empty line, clip an additional newline\n        if (line) {\n          curEnd.line--;\n          curEnd.ch = lineLength(cm, curEnd.line);\n        } else {\n          curEnd.ch = 0;\n        }\n      }\n    }\n\n    // Expand the selection to line ends.\n    function expandSelectionToLine(_cm, curStart, curEnd) {\n      curStart.ch = 0;\n      curEnd.ch = 0;\n      curEnd.line++;\n    }\n\n    function findFirstNonWhiteSpaceCharacter(text) {\n      if (!text) {\n        return 0;\n      }\n      var firstNonWS = text.search(/\\S/);\n      return firstNonWS == -1 ? text.length : firstNonWS;\n    }\n\n    function expandWordUnderCursor(cm, inclusive, _forward, bigWord, noSymbol) {\n      var cur = getHead(cm);\n      var line = cm.getLine(cur.line);\n      var idx = cur.ch;\n\n      // Seek to first word or non-whitespace character, depending on if\n      // noSymbol is true.\n      var test = noSymbol ? wordCharTest[0] : bigWordCharTest [0];\n      while (!test(line.charAt(idx))) {\n        idx++;\n        if (idx >= line.length) { return null; }\n      }\n\n      if (bigWord) {\n        test = bigWordCharTest[0];\n      } else {\n        test = wordCharTest[0];\n        if (!test(line.charAt(idx))) {\n          test = wordCharTest[1];\n        }\n      }\n\n      var end = idx, start = idx;\n      while (test(line.charAt(end)) && end < line.length) { end++; }\n      while (test(line.charAt(start)) && start >= 0) { start--; }\n      start++;\n\n      if (inclusive) {\n        // If present, include all whitespace after word.\n        // Otherwise, include all whitespace before word, except indentation.\n        var wordEnd = end;\n        while (/\\s/.test(line.charAt(end)) && end < line.length) { end++; }\n        if (wordEnd == end) {\n          var wordStart = start;\n          while (/\\s/.test(line.charAt(start - 1)) && start > 0) { start--; }\n          if (!start) { start = wordStart; }\n        }\n      }\n      return { start: Pos(cur.line, start), end: Pos(cur.line, end) };\n    }\n\n    function recordJumpPosition(cm, oldCur, newCur) {\n      if (!cursorEqual(oldCur, newCur)) {\n        vimGlobalState.jumpList.add(cm, oldCur, newCur);\n      }\n    }\n\n    function recordLastCharacterSearch(increment, args) {\n        vimGlobalState.lastChararacterSearch.increment = increment;\n        vimGlobalState.lastChararacterSearch.forward = args.forward;\n        vimGlobalState.lastChararacterSearch.selectedCharacter = args.selectedCharacter;\n    }\n\n    var symbolToMode = {\n        '(': 'bracket', ')': 'bracket', '{': 'bracket', '}': 'bracket',\n        '[': 'section', ']': 'section',\n        '*': 'comment', '/': 'comment',\n        'm': 'method', 'M': 'method',\n        '#': 'preprocess'\n    };\n    var findSymbolModes = {\n      bracket: {\n        isComplete: function(state) {\n          if (state.nextCh === state.symb) {\n            state.depth++;\n            if (state.depth >= 1)return true;\n          } else if (state.nextCh === state.reverseSymb) {\n            state.depth--;\n          }\n          return false;\n        }\n      },\n      section: {\n        init: function(state) {\n          state.curMoveThrough = true;\n          state.symb = (state.forward ? ']' : '[') === state.symb ? '{' : '}';\n        },\n        isComplete: function(state) {\n          return state.index === 0 && state.nextCh === state.symb;\n        }\n      },\n      comment: {\n        isComplete: function(state) {\n          var found = state.lastCh === '*' && state.nextCh === '/';\n          state.lastCh = state.nextCh;\n          return found;\n        }\n      },\n      // TODO: The original Vim implementation only operates on level 1 and 2.\n      // The current implementation doesn't check for code block level and\n      // therefore it operates on any levels.\n      method: {\n        init: function(state) {\n          state.symb = (state.symb === 'm' ? '{' : '}');\n          state.reverseSymb = state.symb === '{' ? '}' : '{';\n        },\n        isComplete: function(state) {\n          if (state.nextCh === state.symb)return true;\n          return false;\n        }\n      },\n      preprocess: {\n        init: function(state) {\n          state.index = 0;\n        },\n        isComplete: function(state) {\n          if (state.nextCh === '#') {\n            var token = state.lineText.match(/#(\\w+)/)[1];\n            if (token === 'endif') {\n              if (state.forward && state.depth === 0) {\n                return true;\n              }\n              state.depth++;\n            } else if (token === 'if') {\n              if (!state.forward && state.depth === 0) {\n                return true;\n              }\n              state.depth--;\n            }\n            if (token === 'else' && state.depth === 0)return true;\n          }\n          return false;\n        }\n      }\n    };\n    function findSymbol(cm, repeat, forward, symb) {\n      var cur = copyCursor(cm.getCursor());\n      var increment = forward ? 1 : -1;\n      var endLine = forward ? cm.lineCount() : -1;\n      var curCh = cur.ch;\n      var line = cur.line;\n      var lineText = cm.getLine(line);\n      var state = {\n        lineText: lineText,\n        nextCh: lineText.charAt(curCh),\n        lastCh: null,\n        index: curCh,\n        symb: symb,\n        reverseSymb: (forward ?  { ')': '(', '}': '{' } : { '(': ')', '{': '}' })[symb],\n        forward: forward,\n        depth: 0,\n        curMoveThrough: false\n      };\n      var mode = symbolToMode[symb];\n      if (!mode)return cur;\n      var init = findSymbolModes[mode].init;\n      var isComplete = findSymbolModes[mode].isComplete;\n      if (init) { init(state); }\n      while (line !== endLine && repeat) {\n        state.index += increment;\n        state.nextCh = state.lineText.charAt(state.index);\n        if (!state.nextCh) {\n          line += increment;\n          state.lineText = cm.getLine(line) || '';\n          if (increment > 0) {\n            state.index = 0;\n          } else {\n            var lineLen = state.lineText.length;\n            state.index = (lineLen > 0) ? (lineLen-1) : 0;\n          }\n          state.nextCh = state.lineText.charAt(state.index);\n        }\n        if (isComplete(state)) {\n          cur.line = line;\n          cur.ch = state.index;\n          repeat--;\n        }\n      }\n      if (state.nextCh || state.curMoveThrough) {\n        return Pos(line, state.index);\n      }\n      return cur;\n    }\n\n    /**\n     * Returns the boundaries of the next word. If the cursor in the middle of\n     * the word, then returns the boundaries of the current word, starting at\n     * the cursor. If the cursor is at the start/end of a word, and we are going\n     * forward/backward, respectively, find the boundaries of the next word.\n     *\n     * @param {CodeMirror} cm CodeMirror object.\n     * @param {Cursor} cur The cursor position.\n     * @param {boolean} forward True to search forward. False to search\n     *     backward.\n     * @param {boolean} bigWord True if punctuation count as part of the word.\n     *     False if only [a-zA-Z0-9] characters count as part of the word.\n     * @param {boolean} emptyLineIsWord True if empty lines should be treated\n     *     as words.\n     * @return {Object{from:number, to:number, line: number}} The boundaries of\n     *     the word, or null if there are no more words.\n     */\n    function findWord(cm, cur, forward, bigWord, emptyLineIsWord) {\n      var lineNum = cur.line;\n      var pos = cur.ch;\n      var line = cm.getLine(lineNum);\n      var dir = forward ? 1 : -1;\n      var charTests = bigWord ? bigWordCharTest: wordCharTest;\n\n      if (emptyLineIsWord && line == '') {\n        lineNum += dir;\n        line = cm.getLine(lineNum);\n        if (!isLine(cm, lineNum)) {\n          return null;\n        }\n        pos = (forward) ? 0 : line.length;\n      }\n\n      while (true) {\n        if (emptyLineIsWord && line == '') {\n          return { from: 0, to: 0, line: lineNum };\n        }\n        var stop = (dir > 0) ? line.length : -1;\n        var wordStart = stop, wordEnd = stop;\n        // Find bounds of next word.\n        while (pos != stop) {\n          var foundWord = false;\n          for (var i = 0; i < charTests.length && !foundWord; ++i) {\n            if (charTests[i](line.charAt(pos))) {\n              wordStart = pos;\n              // Advance to end of word.\n              while (pos != stop && charTests[i](line.charAt(pos))) {\n                pos += dir;\n              }\n              wordEnd = pos;\n              foundWord = wordStart != wordEnd;\n              if (wordStart == cur.ch && lineNum == cur.line &&\n                  wordEnd == wordStart + dir) {\n                // We started at the end of a word. Find the next one.\n                continue;\n              } else {\n                return {\n                  from: Math.min(wordStart, wordEnd + 1),\n                  to: Math.max(wordStart, wordEnd),\n                  line: lineNum };\n              }\n            }\n          }\n          if (!foundWord) {\n            pos += dir;\n          }\n        }\n        // Advance to next/prev line.\n        lineNum += dir;\n        if (!isLine(cm, lineNum)) {\n          return null;\n        }\n        line = cm.getLine(lineNum);\n        pos = (dir > 0) ? 0 : line.length;\n      }\n      // Should never get here.\n      throw new Error('The impossible happened.');\n    }\n\n    /**\n     * @param {CodeMirror} cm CodeMirror object.\n     * @param {Pos} cur The position to start from.\n     * @param {int} repeat Number of words to move past.\n     * @param {boolean} forward True to search forward. False to search\n     *     backward.\n     * @param {boolean} wordEnd True to move to end of word. False to move to\n     *     beginning of word.\n     * @param {boolean} bigWord True if punctuation count as part of the word.\n     *     False if only alphabet characters count as part of the word.\n     * @return {Cursor} The position the cursor should move to.\n     */\n    function moveToWord(cm, cur, repeat, forward, wordEnd, bigWord) {\n      var curStart = copyCursor(cur);\n      var words = [];\n      if (forward && !wordEnd || !forward && wordEnd) {\n        repeat++;\n      }\n      // For 'e', empty lines are not considered words, go figure.\n      var emptyLineIsWord = !(forward && wordEnd);\n      for (var i = 0; i < repeat; i++) {\n        var word = findWord(cm, cur, forward, bigWord, emptyLineIsWord);\n        if (!word) {\n          var eodCh = lineLength(cm, cm.lastLine());\n          words.push(forward\n              ? {line: cm.lastLine(), from: eodCh, to: eodCh}\n              : {line: 0, from: 0, to: 0});\n          break;\n        }\n        words.push(word);\n        cur = Pos(word.line, forward ? (word.to - 1) : word.from);\n      }\n      var shortCircuit = words.length != repeat;\n      var firstWord = words[0];\n      var lastWord = words.pop();\n      if (forward && !wordEnd) {\n        // w\n        if (!shortCircuit && (firstWord.from != curStart.ch || firstWord.line != curStart.line)) {\n          // We did not start in the middle of a word. Discard the extra word at the end.\n          lastWord = words.pop();\n        }\n        return Pos(lastWord.line, lastWord.from);\n      } else if (forward && wordEnd) {\n        return Pos(lastWord.line, lastWord.to - 1);\n      } else if (!forward && wordEnd) {\n        // ge\n        if (!shortCircuit && (firstWord.to != curStart.ch || firstWord.line != curStart.line)) {\n          // We did not start in the middle of a word. Discard the extra word at the end.\n          lastWord = words.pop();\n        }\n        return Pos(lastWord.line, lastWord.to);\n      } else {\n        // b\n        return Pos(lastWord.line, lastWord.from);\n      }\n    }\n\n    function moveToCharacter(cm, repeat, forward, character) {\n      var cur = cm.getCursor();\n      var start = cur.ch;\n      var idx;\n      for (var i = 0; i < repeat; i ++) {\n        var line = cm.getLine(cur.line);\n        idx = charIdxInLine(start, line, character, forward, true);\n        if (idx == -1) {\n          return null;\n        }\n        start = idx;\n      }\n      return Pos(cm.getCursor().line, idx);\n    }\n\n    function moveToColumn(cm, repeat) {\n      // repeat is always >= 1, so repeat - 1 always corresponds\n      // to the column we want to go to.\n      var line = cm.getCursor().line;\n      return clipCursorToContent(cm, Pos(line, repeat - 1));\n    }\n\n    function updateMark(cm, vim, markName, pos) {\n      if (!inArray(markName, validMarks)) {\n        return;\n      }\n      if (vim.marks[markName]) {\n        vim.marks[markName].clear();\n      }\n      vim.marks[markName] = cm.setBookmark(pos);\n    }\n\n    function charIdxInLine(start, line, character, forward, includeChar) {\n      // Search for char in line.\n      // motion_options: {forward, includeChar}\n      // If includeChar = true, include it too.\n      // If forward = true, search forward, else search backwards.\n      // If char is not found on this line, do nothing\n      var idx;\n      if (forward) {\n        idx = line.indexOf(character, start + 1);\n        if (idx != -1 && !includeChar) {\n          idx -= 1;\n        }\n      } else {\n        idx = line.lastIndexOf(character, start - 1);\n        if (idx != -1 && !includeChar) {\n          idx += 1;\n        }\n      }\n      return idx;\n    }\n\n    function findParagraph(cm, head, repeat, dir, inclusive) {\n      var line = head.line;\n      var min = cm.firstLine();\n      var max = cm.lastLine();\n      var start, end, i = line;\n      function isEmpty(i) { return !/\\S/.test(cm.getLine(i)); } // ace_patch\n      function isBoundary(i, dir, any) {\n        if (any) { return isEmpty(i) != isEmpty(i + dir); }\n        return !isEmpty(i) && isEmpty(i + dir);\n      }\n      function skipFold(i) {\n          dir = dir > 0 ? 1 : -1;\n          var foldLine = cm.ace.session.getFoldLine(i);\n          if (foldLine) {\n              if (i + dir > foldLine.start.row && i + dir < foldLine.end.row)\n                  dir = (dir > 0 ? foldLine.end.row : foldLine.start.row) - i;\n          }\n      }\n      if (dir) {\n        while (min <= i && i <= max && repeat > 0) {\n          skipFold(i);\n          if (isBoundary(i, dir)) { repeat--; }\n          i += dir;\n        }\n        return new Pos(i, 0);\n      }\n\n      var vim = cm.state.vim;\n      if (vim.visualLine && isBoundary(line, 1, true)) {\n        var anchor = vim.sel.anchor;\n        if (isBoundary(anchor.line, -1, true)) {\n          if (!inclusive || anchor.line != line) {\n            line += 1;\n          }\n        }\n      }\n      var startState = isEmpty(line);\n      for (i = line; i <= max && repeat; i++) {\n        if (isBoundary(i, 1, true)) {\n          if (!inclusive || isEmpty(i) != startState) {\n            repeat--;\n          }\n        }\n      }\n      end = new Pos(i, 0);\n      // select boundary before paragraph for the last one\n      if (i > max && !startState) { startState = true; }\n      else { inclusive = false; }\n      for (i = line; i > min; i--) {\n        if (!inclusive || isEmpty(i) == startState || i == line) {\n          if (isBoundary(i, -1, true)) { break; }\n        }\n      }\n      start = new Pos(i, 0);\n      return { start: start, end: end };\n    }\n\n    // TODO: perhaps this finagling of start and end positions belonds\n    // in codmirror/replaceRange?\n    function selectCompanionObject(cm, head, symb, inclusive) {\n      var cur = head, start, end;\n\n      var bracketRegexp = ({\n        '(': /[()]/, ')': /[()]/,\n        '[': /[[\\]]/, ']': /[[\\]]/,\n        '{': /[{}]/, '}': /[{}]/})[symb];\n      var openSym = ({\n        '(': '(', ')': '(',\n        '[': '[', ']': '[',\n        '{': '{', '}': '{'})[symb];\n      var curChar = cm.getLine(cur.line).charAt(cur.ch);\n      // Due to the behavior of scanForBracket, we need to add an offset if the\n      // cursor is on a matching open bracket.\n      var offset = curChar === openSym ? 1 : 0;\n\n      start = cm.scanForBracket(Pos(cur.line, cur.ch + offset), -1, null, {'bracketRegex': bracketRegexp});\n      end = cm.scanForBracket(Pos(cur.line, cur.ch + offset), 1, null, {'bracketRegex': bracketRegexp});\n\n      if (!start || !end) {\n        return { start: cur, end: cur };\n      }\n\n      start = start.pos;\n      end = end.pos;\n\n      if ((start.line == end.line && start.ch > end.ch)\n          || (start.line > end.line)) {\n        var tmp = start;\n        start = end;\n        end = tmp;\n      }\n\n      if (inclusive) {\n        end.ch += 1;\n      } else {\n        start.ch += 1;\n      }\n\n      return { start: start, end: end };\n    }\n\n    // Takes in a symbol and a cursor and tries to simulate text objects that\n    // have identical opening and closing symbols\n    // TODO support across multiple lines\n    function findBeginningAndEnd(cm, head, symb, inclusive) {\n      var cur = copyCursor(head);\n      var line = cm.getLine(cur.line);\n      var chars = line.split('');\n      var start, end, i, len;\n      var firstIndex = chars.indexOf(symb);\n\n      // the decision tree is to always look backwards for the beginning first,\n      // but if the cursor is in front of the first instance of the symb,\n      // then move the cursor forward\n      if (cur.ch < firstIndex) {\n        cur.ch = firstIndex;\n        // Why is this line even here???\n        // cm.setCursor(cur.line, firstIndex+1);\n      }\n      // otherwise if the cursor is currently on the closing symbol\n      else if (firstIndex < cur.ch && chars[cur.ch] == symb) {\n        end = cur.ch; // assign end to the current cursor\n        --cur.ch; // make sure to look backwards\n      }\n\n      // if we're currently on the symbol, we've got a start\n      if (chars[cur.ch] == symb && !end) {\n        start = cur.ch + 1; // assign start to ahead of the cursor\n      } else {\n        // go backwards to find the start\n        for (i = cur.ch; i > -1 && !start; i--) {\n          if (chars[i] == symb) {\n            start = i + 1;\n          }\n        }\n      }\n\n      // look forwards for the end symbol\n      if (start && !end) {\n        for (i = start, len = chars.length; i < len && !end; i++) {\n          if (chars[i] == symb) {\n            end = i;\n          }\n        }\n      }\n\n      // nothing found\n      if (!start || !end) {\n        return { start: cur, end: cur };\n      }\n\n      // include the symbols\n      if (inclusive) {\n        --start; ++end;\n      }\n\n      return {\n        start: Pos(cur.line, start),\n        end: Pos(cur.line, end)\n      };\n    }\n\n    // Search functions\n    defineOption('pcre', true, 'boolean');\n    function SearchState() {}\n    SearchState.prototype = {\n      getQuery: function() {\n        return vimGlobalState.query;\n      },\n      setQuery: function(query) {\n        vimGlobalState.query = query;\n      },\n      getOverlay: function() {\n        return this.searchOverlay;\n      },\n      setOverlay: function(overlay) {\n        this.searchOverlay = overlay;\n      },\n      isReversed: function() {\n        return vimGlobalState.isReversed;\n      },\n      setReversed: function(reversed) {\n        vimGlobalState.isReversed = reversed;\n      },\n      getScrollbarAnnotate: function() {\n        return this.annotate;\n      },\n      setScrollbarAnnotate: function(annotate) {\n        this.annotate = annotate;\n      }\n    };\n    function getSearchState(cm) {\n      var vim = cm.state.vim;\n      return vim.searchState_ || (vim.searchState_ = new SearchState());\n    }\n    function dialog(cm, template, shortText, onClose, options) {\n      if (cm.openDialog) {\n        cm.openDialog(template, onClose, { bottom: true, value: options.value,\n            onKeyDown: options.onKeyDown, onKeyUp: options.onKeyUp,\n            selectValueOnOpen: false});\n      }\n      else {\n        onClose(prompt(shortText, ''));\n      }\n    }\n    function splitBySlash(argString) {\n      var slashes = findUnescapedSlashes(argString) || [];\n      if (!slashes.length) return [];\n      var tokens = [];\n      // in case of strings like foo/bar\n      if (slashes[0] !== 0) return;\n      for (var i = 0; i < slashes.length; i++) {\n        if (typeof slashes[i] == 'number')\n          tokens.push(argString.substring(slashes[i] + 1, slashes[i+1]));\n      }\n      return tokens;\n    }\n\n    function findUnescapedSlashes(str) {\n      var escapeNextChar = false;\n      var slashes = [];\n      for (var i = 0; i < str.length; i++) {\n        var c = str.charAt(i);\n        if (!escapeNextChar && c == '/') {\n          slashes.push(i);\n        }\n        escapeNextChar = !escapeNextChar && (c == '\\\\');\n      }\n      return slashes;\n    }\n\n    // Translates a search string from ex (vim) syntax into javascript form.\n    function translateRegex(str) {\n      // When these match, add a '\\' if unescaped or remove one if escaped.\n      var specials = '|(){';\n      // Remove, but never add, a '\\' for these.\n      var unescape = '}';\n      var escapeNextChar = false;\n      var out = [];\n      for (var i = -1; i < str.length; i++) {\n        var c = str.charAt(i) || '';\n        var n = str.charAt(i+1) || '';\n        var specialComesNext = (n && specials.indexOf(n) != -1);\n        if (escapeNextChar) {\n          if (c !== '\\\\' || !specialComesNext) {\n            out.push(c);\n          }\n          escapeNextChar = false;\n        } else {\n          if (c === '\\\\') {\n            escapeNextChar = true;\n            // Treat the unescape list as special for removing, but not adding '\\'.\n            if (n && unescape.indexOf(n) != -1) {\n              specialComesNext = true;\n            }\n            // Not passing this test means removing a '\\'.\n            if (!specialComesNext || n === '\\\\') {\n              out.push(c);\n            }\n          } else {\n            out.push(c);\n            if (specialComesNext && n !== '\\\\') {\n              out.push('\\\\');\n            }\n          }\n        }\n      }\n      return out.join('');\n    }\n\n    // Translates the replace part of a search and replace from ex (vim) syntax into\n    // javascript form.  Similar to translateRegex, but additionally fixes back references\n    // (translates '\\[0..9]' to '$[0..9]') and follows different rules for escaping '$'.\n    var charUnescapes = {'\\\\n': '\\n', '\\\\r': '\\r', '\\\\t': '\\t'};\n    function translateRegexReplace(str) {\n      var escapeNextChar = false;\n      var out = [];\n      for (var i = -1; i < str.length; i++) {\n        var c = str.charAt(i) || '';\n        var n = str.charAt(i+1) || '';\n        if (charUnescapes[c + n]) {\n          out.push(charUnescapes[c+n]);\n          i++;\n        } else if (escapeNextChar) {\n          // At any point in the loop, escapeNextChar is true if the previous\n          // character was a '\\' and was not escaped.\n          out.push(c);\n          escapeNextChar = false;\n        } else {\n          if (c === '\\\\') {\n            escapeNextChar = true;\n            if ((isNumber(n) || n === '$')) {\n              out.push('$');\n            } else if (n !== '/' && n !== '\\\\') {\n              out.push('\\\\');\n            }\n          } else {\n            if (c === '$') {\n              out.push('$');\n            }\n            out.push(c);\n            if (n === '/') {\n              out.push('\\\\');\n            }\n          }\n        }\n      }\n      return out.join('');\n    }\n\n    // Unescape \\ and / in the replace part, for PCRE mode.\n    var unescapes = {'\\\\/': '/', '\\\\\\\\': '\\\\', '\\\\n': '\\n', '\\\\r': '\\r', '\\\\t': '\\t'};\n    function unescapeRegexReplace(str) {\n      var stream = new CodeMirror.StringStream(str);\n      var output = [];\n      while (!stream.eol()) {\n        // Search for \\.\n        while (stream.peek() && stream.peek() != '\\\\') {\n          output.push(stream.next());\n        }\n        var matched = false;\n        for (var matcher in unescapes) {\n          if (stream.match(matcher, true)) {\n            matched = true;\n            output.push(unescapes[matcher]);\n            break;\n          }\n        }\n        if (!matched) {\n          // Don't change anything\n          output.push(stream.next());\n        }\n      }\n      return output.join('');\n    }\n\n    /**\n     * Extract the regular expression from the query and return a Regexp object.\n     * Returns null if the query is blank.\n     * If ignoreCase is passed in, the Regexp object will have the 'i' flag set.\n     * If smartCase is passed in, and the query contains upper case letters,\n     *   then ignoreCase is overridden, and the 'i' flag will not be set.\n     * If the query contains the /i in the flag part of the regular expression,\n     *   then both ignoreCase and smartCase are ignored, and 'i' will be passed\n     *   through to the Regex object.\n     */\n    function parseQuery(query, ignoreCase, smartCase) {\n      // First update the last search register\n      var lastSearchRegister = vimGlobalState.registerController.getRegister('/');\n      lastSearchRegister.setText(query);\n      // Check if the query is already a regex.\n      if (query instanceof RegExp) { return query; }\n      // First try to extract regex + flags from the input. If no flags found,\n      // extract just the regex. IE does not accept flags directly defined in\n      // the regex string in the form /regex/flags\n      var slashes = findUnescapedSlashes(query);\n      var regexPart;\n      var forceIgnoreCase;\n      if (!slashes.length) {\n        // Query looks like 'regexp'\n        regexPart = query;\n      } else {\n        // Query looks like 'regexp/...'\n        regexPart = query.substring(0, slashes[0]);\n        var flagsPart = query.substring(slashes[0]);\n        forceIgnoreCase = (flagsPart.indexOf('i') != -1);\n      }\n      if (!regexPart) {\n        return null;\n      }\n      if (!getOption('pcre')) {\n        regexPart = translateRegex(regexPart);\n      }\n      if (smartCase) {\n        ignoreCase = (/^[^A-Z]*$/).test(regexPart);\n      }\n      var regexp = new RegExp(regexPart,\n          (ignoreCase || forceIgnoreCase) ? 'i' : undefined);\n      return regexp;\n    }\n    function showConfirm(cm, text) {\n      if (cm.openNotification) {\n        cm.openNotification('<span style=\"color: red\">' + text + '</span>',\n                            {bottom: true, duration: 5000});\n      } else {\n        alert(text);\n      }\n    }\n    function makePrompt(prefix, desc) {\n      var raw = '';\n      if (prefix) {\n        raw += '<span style=\"font-family: monospace\">' + prefix + '</span>';\n      }\n      raw += '<input type=\"text\"/> ' +\n          '<span style=\"color: #888\">';\n      if (desc) {\n        raw += '<span style=\"color: #888\">';\n        raw += desc;\n        raw += '</span>';\n      }\n      return raw;\n    }\n    var searchPromptDesc = '(Javascript regexp)';\n    function showPrompt(cm, options) {\n      var shortText = (options.prefix || '') + ' ' + (options.desc || '');\n      var prompt = makePrompt(options.prefix, options.desc);\n      dialog(cm, prompt, shortText, options.onClose, options);\n    }\n    function regexEqual(r1, r2) {\n      if (r1 instanceof RegExp && r2 instanceof RegExp) {\n          var props = ['global', 'multiline', 'ignoreCase', 'source'];\n          for (var i = 0; i < props.length; i++) {\n              var prop = props[i];\n              if (r1[prop] !== r2[prop]) {\n                  return false;\n              }\n          }\n          return true;\n      }\n      return false;\n    }\n    // Returns true if the query is valid.\n    function updateSearchQuery(cm, rawQuery, ignoreCase, smartCase) {\n      if (!rawQuery) {\n        return;\n      }\n      var state = getSearchState(cm);\n      var query = parseQuery(rawQuery, !!ignoreCase, !!smartCase);\n      if (!query) {\n        return;\n      }\n      highlightSearchMatches(cm, query);\n      if (regexEqual(query, state.getQuery())) {\n        return query;\n      }\n      state.setQuery(query);\n      return query;\n    }\n    function searchOverlay(query) {\n      if (query.source.charAt(0) == '^') {\n        var matchSol = true;\n      }\n      return {\n        token: function(stream) {\n          if (matchSol && !stream.sol()) {\n            stream.skipToEnd();\n            return;\n          }\n          var match = stream.match(query, false);\n          if (match) {\n            if (match[0].length == 0) {\n              // Matched empty string, skip to next.\n              stream.next();\n              return 'searching';\n            }\n            if (!stream.sol()) {\n              // Backtrack 1 to match \\b\n              stream.backUp(1);\n              if (!query.exec(stream.next() + match[0])) {\n                stream.next();\n                return null;\n              }\n            }\n            stream.match(query);\n            return 'searching';\n          }\n          while (!stream.eol()) {\n            stream.next();\n            if (stream.match(query, false)) break;\n          }\n        },\n        query: query\n      };\n    }\n    function highlightSearchMatches(cm, query) {\n      var searchState = getSearchState(cm);\n      var overlay = searchState.getOverlay();\n      if (!overlay || query != overlay.query) {\n        if (overlay) {\n          cm.removeOverlay(overlay);\n        }\n        overlay = searchOverlay(query);\n        cm.addOverlay(overlay);\n        if (cm.showMatchesOnScrollbar) {\n          if (searchState.getScrollbarAnnotate()) {\n            searchState.getScrollbarAnnotate().clear();\n          }\n          searchState.setScrollbarAnnotate(cm.showMatchesOnScrollbar(query));\n        }\n        searchState.setOverlay(overlay);\n      }\n    }\n    function findNext(cm, prev, query, repeat) {\n      if (repeat === undefined) { repeat = 1; }\n      return cm.operation(function() {\n        var pos = cm.getCursor();\n        var cursor = cm.getSearchCursor(query, pos);\n        for (var i = 0; i < repeat; i++) {\n          var found = cursor.find(prev);\n          if (i == 0 && found && cursorEqual(cursor.from(), pos)) { found = cursor.find(prev); }\n          if (!found) {\n            // SearchCursor may have returned null because it hit EOF, wrap\n            // around and try again.\n            cursor = cm.getSearchCursor(query,\n                (prev) ? Pos(cm.lastLine()) : Pos(cm.firstLine(), 0) );\n            if (!cursor.find(prev)) {\n              return;\n            }\n          }\n        }\n        return cursor.from();\n      });\n    }\n    function clearSearchHighlight(cm) {\n      var state = getSearchState(cm);\n      cm.removeOverlay(getSearchState(cm).getOverlay());\n      state.setOverlay(null);\n      if (state.getScrollbarAnnotate()) {\n        state.getScrollbarAnnotate().clear();\n        state.setScrollbarAnnotate(null);\n      }\n    }\n    /**\n     * Check if pos is in the specified range, INCLUSIVE.\n     * Range can be specified with 1 or 2 arguments.\n     * If the first range argument is an array, treat it as an array of line\n     * numbers. Match pos against any of the lines.\n     * If the first range argument is a number,\n     *   if there is only 1 range argument, check if pos has the same line\n     *       number\n     *   if there are 2 range arguments, then check if pos is in between the two\n     *       range arguments.\n     */\n    function isInRange(pos, start, end) {\n      if (typeof pos != 'number') {\n        // Assume it is a cursor position. Get the line number.\n        pos = pos.line;\n      }\n      if (start instanceof Array) {\n        return inArray(pos, start);\n      } else {\n        if (end) {\n          return (pos >= start && pos <= end);\n        } else {\n          return pos == start;\n        }\n      }\n    }\n    function getUserVisibleLines(cm) {\n      // ace_patch{\n      var renderer = cm.ace.renderer;\n      return {\n        top: renderer.getFirstFullyVisibleRow(),\n        bottom: renderer.getLastFullyVisibleRow()\n      }\n      // ace_patch}\n    }\n\n    var ExCommandDispatcher = function() {\n      this.buildCommandMap_();\n    };\n    ExCommandDispatcher.prototype = {\n      processCommand: function(cm, input, opt_params) {\n        var that = this;\n        cm.operation(function () {\n          cm.curOp.isVimOp = true;\n          that._processCommand(cm, input, opt_params);\n        });\n      },\n      _processCommand: function(cm, input, opt_params) {\n        var vim = cm.state.vim;\n        var commandHistoryRegister = vimGlobalState.registerController.getRegister(':');\n        var previousCommand = commandHistoryRegister.toString();\n        if (vim.visualMode) {\n          exitVisualMode(cm);\n        }\n        var inputStream = new CodeMirror.StringStream(input);\n        // update \": with the latest command whether valid or invalid\n        commandHistoryRegister.setText(input);\n        var params = opt_params || {};\n        params.input = input;\n        try {\n          this.parseInput_(cm, inputStream, params);\n        } catch(e) {\n          showConfirm(cm, e);\n          throw e;\n        }\n        var command;\n        var commandName;\n        if (!params.commandName) {\n          // If only a line range is defined, move to the line.\n          if (params.line !== undefined) {\n            commandName = 'move';\n          }\n        } else {\n          command = this.matchCommand_(params.commandName);\n          if (command) {\n            commandName = command.name;\n            if (command.excludeFromCommandHistory) {\n              commandHistoryRegister.setText(previousCommand);\n            }\n            this.parseCommandArgs_(inputStream, params, command);\n            if (command.type == 'exToKey') {\n              // Handle Ex to Key mapping.\n              for (var i = 0; i < command.toKeys.length; i++) {\n                CodeMirror.Vim.handleKey(cm, command.toKeys[i], 'mapping');\n              }\n              return;\n            } else if (command.type == 'exToEx') {\n              // Handle Ex to Ex mapping.\n              this.processCommand(cm, command.toInput);\n              return;\n            }\n          }\n        }\n        if (!commandName) {\n          showConfirm(cm, 'Not an editor command \":' + input + '\"');\n          return;\n        }\n        try {\n          exCommands[commandName](cm, params);\n          // Possibly asynchronous commands (e.g. substitute, which might have a\n          // user confirmation), are responsible for calling the callback when\n          // done. All others have it taken care of for them here.\n          if ((!command || !command.possiblyAsync) && params.callback) {\n            params.callback();\n          }\n        } catch(e) {\n          showConfirm(cm, e);\n          throw e;\n        }\n      },\n      parseInput_: function(cm, inputStream, result) {\n        inputStream.eatWhile(':');\n        // Parse range.\n        if (inputStream.eat('%')) {\n          result.line = cm.firstLine();\n          result.lineEnd = cm.lastLine();\n        } else {\n          result.line = this.parseLineSpec_(cm, inputStream);\n          if (result.line !== undefined && inputStream.eat(',')) {\n            result.lineEnd = this.parseLineSpec_(cm, inputStream);\n          }\n        }\n\n        // Parse command name.\n        var commandMatch = inputStream.match(/^(\\w+)/);\n        if (commandMatch) {\n          result.commandName = commandMatch[1];\n        } else {\n          result.commandName = inputStream.match(/.*/)[0];\n        }\n\n        return result;\n      },\n      parseLineSpec_: function(cm, inputStream) {\n        var numberMatch = inputStream.match(/^(\\d+)/);\n        if (numberMatch) {\n          return parseInt(numberMatch[1], 10) - 1;\n        }\n        switch (inputStream.next()) {\n          case '.':\n            return cm.getCursor().line;\n          case '$':\n            return cm.lastLine();\n          case '\\'':\n            var mark = cm.state.vim.marks[inputStream.next()];\n            if (mark && mark.find()) {\n              return mark.find().line;\n            }\n            throw new Error('Mark not set');\n          default:\n            inputStream.backUp(1);\n            return undefined;\n        }\n      },\n      parseCommandArgs_: function(inputStream, params, command) {\n        if (inputStream.eol()) {\n          return;\n        }\n        params.argString = inputStream.match(/.*/)[0];\n        // Parse command-line arguments\n        var delim = command.argDelimiter || /\\s+/;\n        var args = trim(params.argString).split(delim);\n        if (args.length && args[0]) {\n          params.args = args;\n        }\n      },\n      matchCommand_: function(commandName) {\n        // Return the command in the command map that matches the shortest\n        // prefix of the passed in command name. The match is guaranteed to be\n        // unambiguous if the defaultExCommandMap's shortNames are set up\n        // correctly. (see @code{defaultExCommandMap}).\n        for (var i = commandName.length; i > 0; i--) {\n          var prefix = commandName.substring(0, i);\n          if (this.commandMap_[prefix]) {\n            var command = this.commandMap_[prefix];\n            if (command.name.indexOf(commandName) === 0) {\n              return command;\n            }\n          }\n        }\n        return null;\n      },\n      buildCommandMap_: function() {\n        this.commandMap_ = {};\n        for (var i = 0; i < defaultExCommandMap.length; i++) {\n          var command = defaultExCommandMap[i];\n          var key = command.shortName || command.name;\n          this.commandMap_[key] = command;\n        }\n      },\n      map: function(lhs, rhs, ctx) {\n        if (lhs != ':' && lhs.charAt(0) == ':') {\n          if (ctx) { throw Error('Mode not supported for ex mappings'); }\n          var commandName = lhs.substring(1);\n          if (rhs != ':' && rhs.charAt(0) == ':') {\n            // Ex to Ex mapping\n            this.commandMap_[commandName] = {\n              name: commandName,\n              type: 'exToEx',\n              toInput: rhs.substring(1),\n              user: true\n            };\n          } else {\n            // Ex to key mapping\n            this.commandMap_[commandName] = {\n              name: commandName,\n              type: 'exToKey',\n              toKeys: rhs,\n              user: true\n            };\n          }\n        } else {\n          if (rhs != ':' && rhs.charAt(0) == ':') {\n            // Key to Ex mapping.\n            var mapping = {\n              keys: lhs,\n              type: 'keyToEx',\n              exArgs: { input: rhs.substring(1) },\n              user: true};\n            if (ctx) { mapping.context = ctx; }\n            defaultKeymap.unshift(mapping);\n          } else {\n            // Key to key mapping\n            var mapping = {\n              keys: lhs,\n              type: 'keyToKey',\n              toKeys: rhs,\n              user: true\n            };\n            if (ctx) { mapping.context = ctx; }\n            defaultKeymap.unshift(mapping);\n          }\n        }\n      },\n      unmap: function(lhs, ctx) {\n        if (lhs != ':' && lhs.charAt(0) == ':') {\n          // Ex to Ex or Ex to key mapping\n          if (ctx) { throw Error('Mode not supported for ex mappings'); }\n          var commandName = lhs.substring(1);\n          if (this.commandMap_[commandName] && this.commandMap_[commandName].user) {\n            delete this.commandMap_[commandName];\n            return;\n          }\n        } else {\n          // Key to Ex or key to key mapping\n          var keys = lhs;\n          for (var i = 0; i < defaultKeymap.length; i++) {\n            if (keys == defaultKeymap[i].keys\n                && defaultKeymap[i].context === ctx\n                && defaultKeymap[i].user) {\n              defaultKeymap.splice(i, 1);\n              return;\n            }\n          }\n        }\n        // throw Error('No such mapping.');\n      }\n    };\n\n    var exCommands = {\n      colorscheme: function(cm, params) {\n        if (!params.args || params.args.length < 1) {\n          showConfirm(cm, cm.getOption('theme'));\n          return;\n        }\n        cm.setOption('theme', params.args[0]);\n      },\n      map: function(cm, params, ctx) {\n        var mapArgs = params.args;\n        if (!mapArgs || mapArgs.length < 2) {\n          if (cm) {\n            showConfirm(cm, 'Invalid mapping: ' + params.input);\n          }\n          return;\n        }\n        exCommandDispatcher.map(mapArgs[0], mapArgs[1], ctx);\n      },\n      imap: function(cm, params) { this.map(cm, params, 'insert'); },\n      nmap: function(cm, params) { this.map(cm, params, 'normal'); },\n      vmap: function(cm, params) { this.map(cm, params, 'visual'); },\n      unmap: function(cm, params, ctx) {\n        var mapArgs = params.args;\n        if (!mapArgs || mapArgs.length < 1) {\n          if (cm) {\n            showConfirm(cm, 'No such mapping: ' + params.input);\n          }\n          return;\n        }\n        exCommandDispatcher.unmap(mapArgs[0], ctx);\n      },\n      move: function(cm, params) {\n        commandDispatcher.processCommand(cm, cm.state.vim, {\n            type: 'motion',\n            motion: 'moveToLineOrEdgeOfDocument',\n            motionArgs: { forward: false, explicitRepeat: true,\n              linewise: true },\n            repeatOverride: params.line+1});\n      },\n      set: function(cm, params) {\n        var setArgs = params.args;\n        // Options passed through to the setOption/getOption calls. May be passed in by the\n        // local/global versions of the set command\n        var setCfg = params.setCfg || {};\n        if (!setArgs || setArgs.length < 1) {\n          if (cm) {\n            showConfirm(cm, 'Invalid mapping: ' + params.input);\n          }\n          return;\n        }\n        var expr = setArgs[0].split('=');\n        var optionName = expr[0];\n        var value = expr[1];\n        var forceGet = false;\n\n        if (optionName.charAt(optionName.length - 1) == '?') {\n          // If post-fixed with ?, then the set is actually a get.\n          if (value) { throw Error('Trailing characters: ' + params.argString); }\n          optionName = optionName.substring(0, optionName.length - 1);\n          forceGet = true;\n        }\n        if (value === undefined && optionName.substring(0, 2) == 'no') {\n          // To set boolean options to false, the option name is prefixed with\n          // 'no'.\n          optionName = optionName.substring(2);\n          value = false;\n        }\n\n        var optionIsBoolean = options[optionName] && options[optionName].type == 'boolean';\n        if (optionIsBoolean && value == undefined) {\n          // Calling set with a boolean option sets it to true.\n          value = true;\n        }\n        // If no value is provided, then we assume this is a get.\n        if (!optionIsBoolean && value === undefined || forceGet) {\n          var oldValue = getOption(optionName, cm, setCfg);\n          if (oldValue === true || oldValue === false) {\n            showConfirm(cm, ' ' + (oldValue ? '' : 'no') + optionName);\n          } else {\n            showConfirm(cm, '  ' + optionName + '=' + oldValue);\n          }\n        } else {\n          setOption(optionName, value, cm, setCfg);\n        }\n      },\n      setlocal: function (cm, params) {\n        // setCfg is passed through to setOption\n        params.setCfg = {scope: 'local'};\n        this.set(cm, params);\n      },\n      setglobal: function (cm, params) {\n        // setCfg is passed through to setOption\n        params.setCfg = {scope: 'global'};\n        this.set(cm, params);\n      },\n      registers: function(cm, params) {\n        var regArgs = params.args;\n        var registers = vimGlobalState.registerController.registers;\n        var regInfo = '----------Registers----------<br><br>';\n        if (!regArgs) {\n          for (var registerName in registers) {\n            var text = registers[registerName].toString();\n            if (text.length) {\n              regInfo += '\"' + registerName + '    ' + text + '<br>';\n            }\n          }\n        } else {\n          var registerName;\n          regArgs = regArgs.join('');\n          for (var i = 0; i < regArgs.length; i++) {\n            registerName = regArgs.charAt(i);\n            if (!vimGlobalState.registerController.isValidRegister(registerName)) {\n              continue;\n            }\n            var register = registers[registerName] || new Register();\n            regInfo += '\"' + registerName + '    ' + register.toString() + '<br>';\n          }\n        }\n        showConfirm(cm, regInfo);\n      },\n      sort: function(cm, params) {\n        var reverse, ignoreCase, unique, number;\n        function parseArgs() {\n          if (params.argString) {\n            var args = new CodeMirror.StringStream(params.argString);\n            if (args.eat('!')) { reverse = true; }\n            if (args.eol()) { return; }\n            if (!args.eatSpace()) { return 'Invalid arguments'; }\n            var opts = args.match(/[a-z]+/);\n            if (opts) {\n              opts = opts[0];\n              ignoreCase = opts.indexOf('i') != -1;\n              unique = opts.indexOf('u') != -1;\n              var decimal = opts.indexOf('d') != -1 && 1;\n              var hex = opts.indexOf('x') != -1 && 1;\n              var octal = opts.indexOf('o') != -1 && 1;\n              if (decimal + hex + octal > 1) { return 'Invalid arguments'; }\n              number = decimal && 'decimal' || hex && 'hex' || octal && 'octal';\n            }\n            if (args.match(/\\/.*\\//)) { return 'patterns not supported'; }\n          }\n        }\n        var err = parseArgs();\n        if (err) {\n          showConfirm(cm, err + ': ' + params.argString);\n          return;\n        }\n        var lineStart = params.line || cm.firstLine();\n        var lineEnd = params.lineEnd || params.line || cm.lastLine();\n        if (lineStart == lineEnd) { return; }\n        var curStart = Pos(lineStart, 0);\n        var curEnd = Pos(lineEnd, lineLength(cm, lineEnd));\n        var text = cm.getRange(curStart, curEnd).split('\\n');\n        var numberRegex = (number == 'decimal') ? /(-?)([\\d]+)/ :\n           (number == 'hex') ? /(-?)(?:0x)?([0-9a-f]+)/i :\n           (number == 'octal') ? /([0-7]+)/ : null;\n        var radix = (number == 'decimal') ? 10 : (number == 'hex') ? 16 : (number == 'octal') ? 8 : null;\n        var numPart = [], textPart = [];\n        if (number) {\n          for (var i = 0; i < text.length; i++) {\n            if (numberRegex.exec(text[i])) {\n              numPart.push(text[i]);\n            } else {\n              textPart.push(text[i]);\n            }\n          }\n        } else {\n          textPart = text;\n        }\n        function compareFn(a, b) {\n          if (reverse) { var tmp; tmp = a; a = b; b = tmp; }\n          if (ignoreCase) { a = a.toLowerCase(); b = b.toLowerCase(); }\n          var anum = number && numberRegex.exec(a);\n          var bnum = number && numberRegex.exec(b);\n          if (!anum) { return a < b ? -1 : 1; }\n          anum = parseInt((anum[1] + anum[2]).toLowerCase(), radix);\n          bnum = parseInt((bnum[1] + bnum[2]).toLowerCase(), radix);\n          return anum - bnum;\n        }\n        numPart.sort(compareFn);\n        textPart.sort(compareFn);\n        text = (!reverse) ? textPart.concat(numPart) : numPart.concat(textPart);\n        if (unique) { // Remove duplicate lines\n          var textOld = text;\n          var lastLine;\n          text = [];\n          for (var i = 0; i < textOld.length; i++) {\n            if (textOld[i] != lastLine) {\n              text.push(textOld[i]);\n            }\n            lastLine = textOld[i];\n          }\n        }\n        cm.replaceRange(text.join('\\n'), curStart, curEnd);\n      },\n      global: function(cm, params) {\n        // a global command is of the form\n        // :[range]g/pattern/[cmd]\n        // argString holds the string /pattern/[cmd]\n        var argString = params.argString;\n        if (!argString) {\n          showConfirm(cm, 'Regular Expression missing from global');\n          return;\n        }\n        // range is specified here\n        var lineStart = (params.line !== undefined) ? params.line : cm.firstLine();\n        var lineEnd = params.lineEnd || params.line || cm.lastLine();\n        // get the tokens from argString\n        var tokens = splitBySlash(argString);\n        var regexPart = argString, cmd;\n        if (tokens.length) {\n          regexPart = tokens[0];\n          cmd = tokens.slice(1, tokens.length).join('/');\n        }\n        if (regexPart) {\n          // If regex part is empty, then use the previous query. Otherwise\n          // use the regex part as the new query.\n          try {\n           updateSearchQuery(cm, regexPart, true /** ignoreCase */,\n             true /** smartCase */);\n          } catch (e) {\n           showConfirm(cm, 'Invalid regex: ' + regexPart);\n           return;\n          }\n        }\n        // now that we have the regexPart, search for regex matches in the\n        // specified range of lines\n        var query = getSearchState(cm).getQuery();\n        var matchedLines = [], content = '';\n        for (var i = lineStart; i <= lineEnd; i++) {\n          var matched = query.test(cm.getLine(i));\n          if (matched) {\n            matchedLines.push(i+1);\n            content+= cm.getLine(i) + '<br>';\n          }\n        }\n        // if there is no [cmd], just display the list of matched lines\n        if (!cmd) {\n          showConfirm(cm, content);\n          return;\n        }\n        var index = 0;\n        var nextCommand = function() {\n          if (index < matchedLines.length) {\n            var command = matchedLines[index] + cmd;\n            exCommandDispatcher.processCommand(cm, command, {\n              callback: nextCommand\n            });\n          }\n          index++;\n        };\n        nextCommand();\n      },\n      substitute: function(cm, params) {\n        if (!cm.getSearchCursor) {\n          throw new Error('Search feature not available. Requires searchcursor.js or ' +\n              'any other getSearchCursor implementation.');\n        }\n        var argString = params.argString;\n        var tokens = argString ? splitBySlash(argString) : [];\n        var regexPart, replacePart = '', trailing, flagsPart, count;\n        var confirm = false; // Whether to confirm each replace.\n        var global = false; // True to replace all instances on a line, false to replace only 1.\n        if (tokens.length) {\n          regexPart = tokens[0];\n          replacePart = tokens[1];\n          if (replacePart !== undefined) {\n            if (getOption('pcre')) {\n              replacePart = unescapeRegexReplace(replacePart);\n            } else {\n              replacePart = translateRegexReplace(replacePart);\n            }\n            vimGlobalState.lastSubstituteReplacePart = replacePart;\n          }\n          trailing = tokens[2] ? tokens[2].split(' ') : [];\n        } else {\n          // either the argString is empty or its of the form ' hello/world'\n          // actually splitBySlash returns a list of tokens\n          // only if the string starts with a '/'\n          if (argString && argString.length) {\n            showConfirm(cm, 'Substitutions should be of the form ' +\n                ':s/pattern/replace/');\n            return;\n          }\n        }\n        // After the 3rd slash, we can have flags followed by a space followed\n        // by count.\n        if (trailing) {\n          flagsPart = trailing[0];\n          count = parseInt(trailing[1]);\n          if (flagsPart) {\n            if (flagsPart.indexOf('c') != -1) {\n              confirm = true;\n              flagsPart.replace('c', '');\n            }\n            if (flagsPart.indexOf('g') != -1) {\n              global = true;\n              flagsPart.replace('g', '');\n            }\n            regexPart = regexPart + '/' + flagsPart;\n          }\n        }\n        if (regexPart) {\n          // If regex part is empty, then use the previous query. Otherwise use\n          // the regex part as the new query.\n          try {\n            updateSearchQuery(cm, regexPart, true /** ignoreCase */,\n              true /** smartCase */);\n          } catch (e) {\n            showConfirm(cm, 'Invalid regex: ' + regexPart);\n            return;\n          }\n        }\n        replacePart = replacePart || vimGlobalState.lastSubstituteReplacePart;\n        if (replacePart === undefined) {\n          showConfirm(cm, 'No previous substitute regular expression');\n          return;\n        }\n        var state = getSearchState(cm);\n        var query = state.getQuery();\n        var lineStart = (params.line !== undefined) ? params.line : cm.getCursor().line;\n        var lineEnd = params.lineEnd || lineStart;\n        if (lineStart == cm.firstLine() && lineEnd == cm.lastLine()) {\n          lineEnd = Infinity;\n        }\n        if (count) {\n          lineStart = lineEnd;\n          lineEnd = lineStart + count - 1;\n        }\n        var startPos = clipCursorToContent(cm, Pos(lineStart, 0));\n        var cursor = cm.getSearchCursor(query, startPos);\n        doReplace(cm, confirm, global, lineStart, lineEnd, cursor, query, replacePart, params.callback);\n      },\n      redo: CodeMirror.commands.redo,\n      undo: CodeMirror.commands.undo,\n      write: function(cm) {\n        if (CodeMirror.commands.save) {\n          // If a save command is defined, call it.\n          CodeMirror.commands.save(cm);\n        } else {\n          // Saves to text area if no save command is defined.\n          cm.save();\n        }\n      },\n      nohlsearch: function(cm) {\n        clearSearchHighlight(cm);\n      },\n      delmarks: function(cm, params) {\n        if (!params.argString || !trim(params.argString)) {\n          showConfirm(cm, 'Argument required');\n          return;\n        }\n\n        var state = cm.state.vim;\n        var stream = new CodeMirror.StringStream(trim(params.argString));\n        while (!stream.eol()) {\n          stream.eatSpace();\n\n          // Record the streams position at the beginning of the loop for use\n          // in error messages.\n          var count = stream.pos;\n\n          if (!stream.match(/[a-zA-Z]/, false)) {\n            showConfirm(cm, 'Invalid argument: ' + params.argString.substring(count));\n            return;\n          }\n\n          var sym = stream.next();\n          // Check if this symbol is part of a range\n          if (stream.match('-', true)) {\n            // This symbol is part of a range.\n\n            // The range must terminate at an alphabetic character.\n            if (!stream.match(/[a-zA-Z]/, false)) {\n              showConfirm(cm, 'Invalid argument: ' + params.argString.substring(count));\n              return;\n            }\n\n            var startMark = sym;\n            var finishMark = stream.next();\n            // The range must terminate at an alphabetic character which\n            // shares the same case as the start of the range.\n            if (isLowerCase(startMark) && isLowerCase(finishMark) ||\n                isUpperCase(startMark) && isUpperCase(finishMark)) {\n              var start = startMark.charCodeAt(0);\n              var finish = finishMark.charCodeAt(0);\n              if (start >= finish) {\n                showConfirm(cm, 'Invalid argument: ' + params.argString.substring(count));\n                return;\n              }\n\n              // Because marks are always ASCII values, and we have\n              // determined that they are the same case, we can use\n              // their char codes to iterate through the defined range.\n              for (var j = 0; j <= finish - start; j++) {\n                var mark = String.fromCharCode(start + j);\n                delete state.marks[mark];\n              }\n            } else {\n              showConfirm(cm, 'Invalid argument: ' + startMark + '-');\n              return;\n            }\n          } else {\n            // This symbol is a valid mark, and is not part of a range.\n            delete state.marks[sym];\n          }\n        }\n      }\n    };\n\n    var exCommandDispatcher = new ExCommandDispatcher();\n\n    /**\n    * @param {CodeMirror} cm CodeMirror instance we are in.\n    * @param {boolean} confirm Whether to confirm each replace.\n    * @param {Cursor} lineStart Line to start replacing from.\n    * @param {Cursor} lineEnd Line to stop replacing at.\n    * @param {RegExp} query Query for performing matches with.\n    * @param {string} replaceWith Text to replace matches with. May contain $1,\n    *     $2, etc for replacing captured groups using Javascript replace.\n    * @param {function()} callback A callback for when the replace is done.\n    */\n    function doReplace(cm, confirm, global, lineStart, lineEnd, searchCursor, query,\n        replaceWith, callback) {\n      // Set up all the functions.\n      cm.state.vim.exMode = true;\n      var done = false;\n      var lastPos = searchCursor.from();\n      function replaceAll() {\n        cm.operation(function() {\n          while (!done) {\n            replace();\n            next();\n          }\n          stop();\n        });\n      }\n      function replace() {\n        var text = cm.getRange(searchCursor.from(), searchCursor.to());\n        var newText = text.replace(query, replaceWith);\n        searchCursor.replace(newText);\n      }\n      function next() {\n        // The below only loops to skip over multiple occurrences on the same\n        // line when 'global' is not true.\n        while(searchCursor.findNext() &&\n              isInRange(searchCursor.from(), lineStart, lineEnd)) {\n          if (!global && lastPos && searchCursor.from().line == lastPos.line) {\n            continue;\n          }\n          cm.scrollIntoView(searchCursor.from(), 30);\n          cm.setSelection(searchCursor.from(), searchCursor.to());\n          lastPos = searchCursor.from();\n          done = false;\n          return;\n        }\n        done = true;\n      }\n      function stop(close) {\n        if (close) { close(); }\n        cm.focus();\n        if (lastPos) {\n          cm.setCursor(lastPos);\n          var vim = cm.state.vim;\n          vim.exMode = false;\n          vim.lastHPos = vim.lastHSPos = lastPos.ch;\n        }\n        if (callback) { callback(); }\n      }\n      function onPromptKeyDown(e, _value, close) {\n        // Swallow all keys.\n        CodeMirror.e_stop(e);\n        var keyName = CodeMirror.keyName(e);\n        switch (keyName) {\n          case 'Y':\n            replace(); next(); break;\n          case 'N':\n            next(); break;\n          case 'A':\n            // replaceAll contains a call to close of its own. We don't want it\n            // to fire too early or multiple times.\n            var savedCallback = callback;\n            callback = undefined;\n            cm.operation(replaceAll);\n            callback = savedCallback;\n            break;\n          case 'L':\n            replace();\n            // fall through and exit.\n          case 'Q':\n          case 'Esc':\n          case 'Ctrl-C':\n          case 'Ctrl-[':\n            stop(close);\n            break;\n        }\n        if (done) { stop(close); }\n        return true;\n      }\n\n      // Actually do replace.\n      next();\n      if (done) {\n        showConfirm(cm, 'No matches for ' + query.source);\n        return;\n      }\n      if (!confirm) {\n        replaceAll();\n        if (callback) { callback(); }\n        return;\n      }\n      showPrompt(cm, {\n        prefix: 'replace with <strong>' + replaceWith + '</strong> (y/n/a/q/l)',\n        onKeyDown: onPromptKeyDown\n      });\n    }\n\n    CodeMirror.keyMap.vim = {\n      attach: attachVimMap,\n      detach: detachVimMap,\n      call: cmKey\n    };\n\n    function exitInsertMode(cm) {\n      var vim = cm.state.vim;\n      var macroModeState = vimGlobalState.macroModeState;\n      var insertModeChangeRegister = vimGlobalState.registerController.getRegister('.');\n      var isPlaying = macroModeState.isPlaying;\n      var lastChange = macroModeState.lastInsertModeChanges;\n      // In case of visual block, the insertModeChanges are not saved as a\n      // single word, so we convert them to a single word\n      // so as to update the \". register as expected in real vim.\n      var text = [];\n      if (!isPlaying) {\n        var selLength = lastChange.inVisualBlock ? vim.lastSelection.visualBlock.height : 1;\n        var changes = lastChange.changes;\n        var text = [];\n        var i = 0;\n        // In case of multiple selections in blockwise visual,\n        // the inserted text, for example: 'f<Backspace>oo', is stored as\n        // 'f', 'f', InsertModeKey 'o', 'o', 'o', 'o'. (if you have a block with 2 lines).\n        // We push the contents of the changes array as per the following:\n        // 1. In case of InsertModeKey, just increment by 1.\n        // 2. In case of a character, jump by selLength (2 in the example).\n        while (i < changes.length) {\n          // This loop will convert 'ff<bs>oooo' to 'f<bs>oo'.\n          text.push(changes[i]);\n          if (changes[i] instanceof InsertModeKey) {\n             i++;\n          } else {\n             i+= selLength;\n          }\n        }\n        lastChange.changes = text;\n        cm.off('change', onChange);\n        CodeMirror.off(cm.getInputField(), 'keydown', onKeyEventTargetKeyDown);\n      }\n      if (!isPlaying && vim.insertModeRepeat > 1) {\n        // Perform insert mode repeat for commands like 3,a and 3,o.\n        repeatLastEdit(cm, vim, vim.insertModeRepeat - 1,\n            true /** repeatForInsert */);\n        vim.lastEditInputState.repeatOverride = vim.insertModeRepeat;\n      }\n      delete vim.insertModeRepeat;\n      vim.insertMode = false;\n      cm.setCursor(cm.getCursor().line, cm.getCursor().ch-1);\n      cm.setOption('keyMap', 'vim');\n      cm.setOption('disableInput', true);\n      \n      lastChange.overwrite = cm.state.overwrite;\n      cm.toggleOverwrite(false); // exit replace mode if we were in it.\n      // update the \". register before exiting insert mode\n      insertModeChangeRegister.setText(lastChange.changes.join(''));\n      CodeMirror.signal(cm, \"vim-mode-change\", {mode: \"normal\"});\n      if (macroModeState.isRecording) {\n        logInsertModeChange(macroModeState);\n      }\n    }\n\n    function _mapCommand(command) {\n      defaultKeymap.unshift(command);\n    }\n\n    function mapCommand(keys, type, name, args, extra) {\n      var command = {keys: keys, type: type};\n      command[type] = name;\n      command[type + \"Args\"] = args;\n      for (var key in extra)\n        command[key] = extra[key];\n      _mapCommand(command);\n    }\n\n    // The timeout in milliseconds for the two-character ESC keymap should be\n    // adjusted according to your typing speed to prevent false positives.\n    defineOption('insertModeEscKeysTimeout', 200, 'number');\n\n    CodeMirror.keyMap['vim-insert'] = {\n      // TODO: override navigation keys so that Esc will cancel automatic\n      // indentation from o, O, i_<CR>\n      'Ctrl-N': 'autocomplete',\n      'Ctrl-P': 'autocomplete',\n      'Enter': function(cm) {\n        var fn = CodeMirror.commands.newlineAndIndentContinueComment ||\n            CodeMirror.commands.newlineAndIndent;\n        fn(cm);\n      },\n      fallthrough: ['default'],\n      attach: attachVimMap,\n      detach: detachVimMap,\n      call: cmKey\n    };\n\n    CodeMirror.keyMap['vim-replace'] = {\n      'Backspace': 'goCharLeft',\n      fallthrough: ['vim-insert'],\n      attach: attachVimMap,\n      detach: detachVimMap,\n      call: cmKey\n    };\n\n    function executeMacroRegister(cm, vim, macroModeState, registerName) {\n      var register = vimGlobalState.registerController.getRegister(registerName);\n      if (registerName == ':') {\n        // Read-only register containing last Ex command.\n        if (register.keyBuffer[0]) {\n          exCommandDispatcher.processCommand(cm, register.keyBuffer[0]);\n        }\n        macroModeState.isPlaying = false;\n        return;\n      }\n      var keyBuffer = register.keyBuffer;\n      var imc = 0;\n      macroModeState.isPlaying = true;\n      macroModeState.replaySearchQueries = register.searchQueries.slice(0);\n      for (var i = 0; i < keyBuffer.length; i++) {\n        var text = keyBuffer[i];\n        var match, key;\n        while (text) {\n          // Pull off one command key, which is either a single character\n          // or a special sequence wrapped in '<' and '>', e.g. '<Space>'.\n          match = (/<\\w+-.+?>|<\\w+>|./).exec(text);\n          key = match[0];\n          text = text.substring(match.index + key.length);\n          CodeMirror.Vim.handleKey(cm, key, 'macro');\n          if (vim.insertMode) {\n            var changes = register.insertModeChanges[imc++].changes;\n            vimGlobalState.macroModeState.lastInsertModeChanges.changes =\n                changes;\n            repeatInsertModeChanges(cm, changes, 1);\n            exitInsertMode(cm);\n          }\n        }\n      }\n      macroModeState.isPlaying = false;\n    }\n\n    function logKey(macroModeState, key) {\n      if (macroModeState.isPlaying) { return; }\n      var registerName = macroModeState.latestRegister;\n      var register = vimGlobalState.registerController.getRegister(registerName);\n      if (register) {\n        register.pushText(key);\n      }\n    }\n\n    function logInsertModeChange(macroModeState) {\n      if (macroModeState.isPlaying) { return; }\n      var registerName = macroModeState.latestRegister;\n      var register = vimGlobalState.registerController.getRegister(registerName);\n      if (register && register.pushInsertModeChanges) {\n        register.pushInsertModeChanges(macroModeState.lastInsertModeChanges);\n      }\n    }\n\n    function logSearchQuery(macroModeState, query) {\n      if (macroModeState.isPlaying) { return; }\n      var registerName = macroModeState.latestRegister;\n      var register = vimGlobalState.registerController.getRegister(registerName);\n      if (register && register.pushSearchQuery) {\n        register.pushSearchQuery(query);\n      }\n    }\n\n    /**\n     * Listens for changes made in insert mode.\n     * Should only be active in insert mode.\n     */\n    function onChange(_cm, changeObj) {\n      var macroModeState = vimGlobalState.macroModeState;\n      var lastChange = macroModeState.lastInsertModeChanges;\n      if (!macroModeState.isPlaying) {\n        while(changeObj) {\n          lastChange.expectCursorActivityForChange = true;\n          if (changeObj.origin == '+input' || changeObj.origin == 'paste'\n              || changeObj.origin === undefined /* only in testing */) {\n            var text = changeObj.text.join('\\n');\n            if (lastChange.maybeReset) {\n              lastChange.changes = [];\n              lastChange.maybeReset = false;\n            }\n            lastChange.changes.push(text);\n          }\n          // Change objects may be chained with next.\n          changeObj = changeObj.next;\n        }\n      }\n    }\n\n    /**\n    * Listens for any kind of cursor activity on CodeMirror.\n    */\n    function onCursorActivity(cm) {\n      var vim = cm.state.vim;\n      if (vim.insertMode) {\n        // Tracking cursor activity in insert mode (for macro support).\n        var macroModeState = vimGlobalState.macroModeState;\n        if (macroModeState.isPlaying) { return; }\n        var lastChange = macroModeState.lastInsertModeChanges;\n        if (lastChange.expectCursorActivityForChange) {\n          lastChange.expectCursorActivityForChange = false;\n        } else {\n          // Cursor moved outside the context of an edit. Reset the change.\n          lastChange.maybeReset = true;\n        }\n      } else if (!cm.curOp.isVimOp) {\n        handleExternalSelection(cm, vim);\n      }\n      if (vim.visualMode) {\n        updateFakeCursor(cm);\n      }\n    }\n    function updateFakeCursor(cm) {\n      var vim = cm.state.vim;\n      var from = clipCursorToContent(cm, copyCursor(vim.sel.head));\n      var to = offsetCursor(from, 0, 1);\n      if (vim.fakeCursor) {\n        vim.fakeCursor.clear();\n      }\n      vim.fakeCursor = cm.markText(from, to, {className: 'cm-animate-fat-cursor'});\n    }\n    function handleExternalSelection(cm, vim) {\n      var anchor = cm.getCursor('anchor');\n      var head = cm.getCursor('head');\n      // Enter or exit visual mode to match mouse selection.\n      if (vim.visualMode && !cm.somethingSelected()) {\n        exitVisualMode(cm, false);\n      } else if (!vim.visualMode && !vim.insertMode && cm.somethingSelected()) {\n        vim.visualMode = true;\n        vim.visualLine = false;\n        CodeMirror.signal(cm, \"vim-mode-change\", {mode: \"visual\"});\n      }\n      if (vim.visualMode) {\n        // Bind CodeMirror selection model to vim selection model.\n        // Mouse selections are considered visual characterwise.\n        var headOffset = !cursorIsBefore(head, anchor) ? -1 : 0;\n        var anchorOffset = cursorIsBefore(head, anchor) ? -1 : 0;\n        head = offsetCursor(head, 0, headOffset);\n        anchor = offsetCursor(anchor, 0, anchorOffset);\n        vim.sel = {\n          anchor: anchor,\n          head: head\n        };\n        updateMark(cm, vim, '<', cursorMin(head, anchor));\n        updateMark(cm, vim, '>', cursorMax(head, anchor));\n      } else if (!vim.insertMode) {\n        // Reset lastHPos if selection was modified by something outside of vim mode e.g. by mouse.\n        vim.lastHPos = cm.getCursor().ch;\n      }\n    }\n\n    /** Wrapper for special keys pressed in insert mode */\n    function InsertModeKey(keyName) {\n      this.keyName = keyName;\n    }\n\n    /**\n    * Handles raw key down events from the text area.\n    * - Should only be active in insert mode.\n    * - For recording deletes in insert mode.\n    */\n    function onKeyEventTargetKeyDown(e) {\n      var macroModeState = vimGlobalState.macroModeState;\n      var lastChange = macroModeState.lastInsertModeChanges;\n      var keyName = CodeMirror.keyName(e);\n      if (!keyName) { return; }\n      function onKeyFound() {\n        if (lastChange.maybeReset) {\n          lastChange.changes = [];\n          lastChange.maybeReset = false;\n        }\n        lastChange.changes.push(new InsertModeKey(keyName));\n        return true;\n      }\n      if (keyName.indexOf('Delete') != -1 || keyName.indexOf('Backspace') != -1) {\n        CodeMirror.lookupKey(keyName, 'vim-insert', onKeyFound);\n      }\n    }\n\n    /**\n     * Repeats the last edit, which includes exactly 1 command and at most 1\n     * insert. Operator and motion commands are read from lastEditInputState,\n     * while action commands are read from lastEditActionCommand.\n     *\n     * If repeatForInsert is true, then the function was called by\n     * exitInsertMode to repeat the insert mode changes the user just made. The\n     * corresponding enterInsertMode call was made with a count.\n     */\n    function repeatLastEdit(cm, vim, repeat, repeatForInsert) {\n      var macroModeState = vimGlobalState.macroModeState;\n      macroModeState.isPlaying = true;\n      var isAction = !!vim.lastEditActionCommand;\n      var cachedInputState = vim.inputState;\n      function repeatCommand() {\n        if (isAction) {\n          commandDispatcher.processAction(cm, vim, vim.lastEditActionCommand);\n        } else {\n          commandDispatcher.evalInput(cm, vim);\n        }\n      }\n      function repeatInsert(repeat) {\n        if (macroModeState.lastInsertModeChanges.changes.length > 0) {\n          // For some reason, repeat cw in desktop VIM does not repeat\n          // insert mode changes. Will conform to that behavior.\n          repeat = !vim.lastEditActionCommand ? 1 : repeat;\n          var changeObject = macroModeState.lastInsertModeChanges;\n          repeatInsertModeChanges(cm, changeObject.changes, repeat, changeObject.overwrite);\n        }\n      }\n      vim.inputState = vim.lastEditInputState;\n      if (isAction && vim.lastEditActionCommand.interlaceInsertRepeat) {\n        // o and O repeat have to be interlaced with insert repeats so that the\n        // insertions appear on separate lines instead of the last line.\n        for (var i = 0; i < repeat; i++) {\n          repeatCommand();\n          repeatInsert(1);\n        }\n      } else {\n        if (!repeatForInsert) {\n          // Hack to get the cursor to end up at the right place. If I is\n          // repeated in insert mode repeat, cursor will be 1 insert\n          // change set left of where it should be.\n          repeatCommand();\n        }\n        repeatInsert(repeat);\n      }\n      vim.inputState = cachedInputState;\n      if (vim.insertMode && !repeatForInsert) {\n        // Don't exit insert mode twice. If repeatForInsert is set, then we\n        // were called by an exitInsertMode call lower on the stack.\n        exitInsertMode(cm);\n      }\n      macroModeState.isPlaying = false;\n    }\n\n    function repeatInsertModeChanges(cm, changes, repeat, overwrite) {\n      function keyHandler(binding) {\n        if (typeof binding == 'string') {\n          CodeMirror.commands[binding](cm);\n        } else {\n          binding(cm);\n        }\n        return true;\n      }\n      var head = cm.getCursor('head');\n      var inVisualBlock = vimGlobalState.macroModeState.lastInsertModeChanges.inVisualBlock;\n      if (inVisualBlock) {\n        // Set up block selection again for repeating the changes.\n        var vim = cm.state.vim;\n        var lastSel = vim.lastSelection;\n        var offset = getOffset(lastSel.anchor, lastSel.head);\n        selectForInsert(cm, head, offset.line + 1);\n        repeat = cm.listSelections().length;\n        cm.setCursor(head);\n      }\n      for (var i = 0; i < repeat; i++) {\n        if (inVisualBlock) {\n          cm.setCursor(offsetCursor(head, i, 0));\n        }\n        for (var j = 0; j < changes.length; j++) {\n          var change = changes[j];\n          if (change instanceof InsertModeKey) {\n            CodeMirror.lookupKey(change.keyName, 'vim-insert', keyHandler);\n          } else {\n            var cur = cm.getCursor();\n            var end = cur;\n            if (overwrite && !/\\n/.test(change)) {\n              end = offsetCursor(cur, 0, change.length);\n            }\n            cm.replaceRange(change, cur, end);\n          }\n        }\n      }\n      if (inVisualBlock) {\n        cm.setCursor(offsetCursor(head, 0, 1));\n      }\n    }\n\n    resetVimGlobalState();\n  //};\n  // Initialize Vim and make it available as an API.\n  CodeMirror.Vim = Vim();\n\n  Vim = CodeMirror.Vim;\n\n  var specialKey = {'return':'CR',backspace:'BS','delete':'Del',esc:'Esc',\n    left:'Left',right:'Right',up:'Up',down:'Down',space: 'Space',\n    home:'Home',end:'End',pageup:'PageUp',pagedown:'PageDown', enter: 'CR'\n  };\n  function lookupKey(hashId, key, e) {\n    if (key.length > 1 && key[0] == \"n\") {\n      key = key.replace(\"numpad\", \"\");\n    }\n    key = specialKey[key] || key;\n    var name = '';\n    if (e.ctrlKey) { name += 'C-'; }\n    if (e.altKey) { name += 'A-'; }\n    if (e.shiftKey) { name += 'S-'; }\n\n    name += key;\n    if (name.length > 1) { name = '<' + name + '>'; }\n    return name;\n  }\n  var handleKey = Vim.handleKey.bind(Vim);\n  Vim.handleKey = function(cm, key, origin) {\n    return cm.operation(function() {\n      return handleKey(cm, key, origin);\n    }, true);\n  }\n  function cloneVimState(state) {\n    var n = new state.constructor();\n    Object.keys(state).forEach(function(key) {\n      var o = state[key];\n      if (Array.isArray(o))\n        o = o.slice();\n      else if (o && typeof o == \"object\" && o.constructor != Object)\n        o = cloneVimState(o);\n      n[key] = o;\n    });\n    if (state.sel) {\n      n.sel = {\n        head: state.sel.head && copyCursor(state.sel.head),\n        anchor: state.sel.anchor && copyCursor(state.sel.anchor)\n      };\n    }\n    return n;\n  }\n  function multiSelectHandleKey(cm, key, origin) {\n    var isHandled = false;\n    var vim = Vim.maybeInitVimState_(cm);\n    var visualBlock = vim.visualBlock || vim.wasInVisualBlock;\n    if (vim.wasInVisualBlock && !cm.ace.inMultiSelectMode) {\n      vim.wasInVisualBlock = false;\n    } else if (cm.ace.inMultiSelectMode && vim.visualBlock) {\n       vim.wasInVisualBlock = true;\n    }\n    \n    if (key == '<Esc>' && !vim.insertMode && !vim.visualMode && cm.ace.inMultiSelectMode) {\n      cm.ace.exitMultiSelectMode();\n    } else if (visualBlock || !cm.ace.inMultiSelectMode || cm.ace.inVirtualSelectionMode) {\n      isHandled = Vim.handleKey(cm, key, origin);\n    } else {\n      var old = cloneVimState(vim);\n      cm.operation(function() {\n        cm.ace.forEachSelection(function() {\n          var sel = cm.ace.selection;\n          cm.state.vim.lastHPos = sel.$desiredColumn == null ? sel.lead.column : sel.$desiredColumn;\n          var head = cm.getCursor(\"head\");\n          var anchor = cm.getCursor(\"anchor\");\n          var headOffset = !cursorIsBefore(head, anchor) ? -1 : 0;\n          var anchorOffset = cursorIsBefore(head, anchor) ? -1 : 0;\n          head = offsetCursor(head, 0, headOffset);\n          anchor = offsetCursor(anchor, 0, anchorOffset);\n          cm.state.vim.sel.head = head;\n          cm.state.vim.sel.anchor = anchor;\n          \n          isHandled = handleKey(cm, key, origin);\n          sel.$desiredColumn = cm.state.vim.lastHPos == -1 ? null : cm.state.vim.lastHPos;\n          if (cm.virtualSelectionMode()) {\n            cm.state.vim = cloneVimState(old);\n          }\n        });\n        if (cm.curOp.cursorActivity && !isHandled)\n          cm.curOp.cursorActivity = false;\n      }, true);\n    }\n    return isHandled;\n  }\n  exports.CodeMirror = CodeMirror;\n  var getVim = Vim.maybeInitVimState_;\n  exports.handler = {\n    $id: \"ace/keyboard/vim\",\n    drawCursor: function(style, pixelPos, config, sel, session) {\n      var vim = this.state.vim || {};\n      var w = config.characterWidth;\n      var h = config.lineHeight;\n      var top = pixelPos.top;\n      var left = pixelPos.left;\n      if (!vim.insertMode) {\n        var isbackwards = !sel.cursor \n            ? session.selection.isBackwards() || session.selection.isEmpty()\n            : Range.comparePoints(sel.cursor, sel.start) <= 0;\n        if (!isbackwards && left > w)\n          left -= w;\n      }     \n      if (!vim.insertMode && vim.status) {\n        h = h / 2;\n        top += h;\n      }\n      style.left = left + \"px\";\n      style.top =  top + \"px\";\n      style.width = w + \"px\";\n      style.height = h + \"px\";\n    },\n    handleKeyboard: function(data, hashId, key, keyCode, e) {\n      var editor = data.editor;\n      var cm = editor.state.cm;\n      var vim = getVim(cm);\n      if (keyCode == -1) return;\n      \n      if (key == \"c\" && hashId == 1) { // key == \"ctrl-c\"\n        if (!useragent.isMac && editor.getCopyText()) {\n          editor.once(\"copy\", function() {\n            editor.selection.clearSelection();\n          });\n          return {command: \"null\", passEvent: true};\n        }\n      } else if (!vim.insertMode) {\n        if (useragent.isMac && this.handleMacRepeat(data, hashId, key)) {\n          hashId = -1;\n          key = data.inputChar;\n        }\n      }\n      \n      if (hashId == -1 || hashId & 1 || hashId === 0 && key.length > 1) {\n        var insertMode = vim.insertMode;\n        var name = lookupKey(hashId, key, e || {});\n        if (vim.status == null)\n          vim.status = \"\";\n        var isHandled = multiSelectHandleKey(cm, name, 'user');\n        vim = getVim(cm); // may be changed by multiSelectHandleKey\n        if (isHandled && vim.status != null)\n          vim.status += name;\n        else if (vim.status == null)\n          vim.status = \"\";\n        cm._signal(\"changeStatus\");\n        if (!isHandled && (hashId != -1 || insertMode))\n          return;\n        return {command: \"null\", passEvent: !isHandled};\n      }\n    },\n    attach: function(editor) {\n      if (!editor.state) editor.state = {};\n      var cm = new CodeMirror(editor);\n      editor.state.cm = cm;\n      editor.$vimModeHandler = this;\n      CodeMirror.keyMap.vim.attach(cm);\n      getVim(cm).status = null;\n      cm.on('vim-command-done', function() {\n        if (cm.virtualSelectionMode()) return;\n        getVim(cm).status = null;\n        cm.ace._signal(\"changeStatus\");\n        cm.ace.session.markUndoGroup();\n      });\n      cm.on(\"changeStatus\", function() {\n        cm.ace.renderer.updateCursor();\n        cm.ace._signal(\"changeStatus\");\n      });\n      cm.on(\"vim-mode-change\", function() {\n        if (cm.virtualSelectionMode()) return;\n        cm.ace.renderer.setStyle(\"normal-mode\", !getVim(cm).insertMode);\n        cm._signal(\"changeStatus\");\n      });\n      cm.ace.renderer.setStyle(\"normal-mode\", !getVim(cm).insertMode);\n      editor.renderer.$cursorLayer.drawCursor = this.drawCursor.bind(cm);\n      // renderVirtualNumbers.attach(editor);\n      this.updateMacCompositionHandlers(editor, true);\n    },\n    detach: function(editor) {\n      var cm = editor.state.cm;\n      CodeMirror.keyMap.vim.detach(cm);\n      cm.destroy();\n      editor.state.cm = null;\n      editor.$vimModeHandler = null;\n      editor.renderer.$cursorLayer.drawCursor = null;\n      editor.renderer.setStyle(\"normal-mode\", false);\n      // renderVirtualNumbers.detach(editor);\n      this.updateMacCompositionHandlers(editor, false);\n    },\n    getStatusText: function(editor) {\n      var cm = editor.state.cm;\n      var vim = getVim(cm);\n      if (vim.insertMode)\n        return \"INSERT\";\n      var status = \"\";\n      if (vim.visualMode) {\n        status += \"VISUAL\";\n        if (vim.visualLine)\n          status += \" LINE\";\n        if (vim.visualBlock)\n          status += \" BLOCK\";\n      }\n      if (vim.status)\n        status += (status ? \" \" : \"\") + vim.status;\n      return status;\n    },\n    // workaround for j not repeating with `defaults write -g ApplePressAndHoldEnabled -bool true`\n    handleMacRepeat: function(data, hashId, key) {\n      if (hashId == -1) {\n        // record key\n        data.inputChar = key;\n        data.lastEvent = \"input\";\n      } else if (data.inputChar && data.$lastHash == hashId && data.$lastKey == key) {\n        // check for repeated keypress \n        if (data.lastEvent == \"input\") {\n          data.lastEvent = \"input1\";\n        } else if (data.lastEvent == \"input1\") {\n          // simulate textinput\n          return true;\n        }\n      } else {\n        // reset\n        data.$lastHash = hashId;\n        data.$lastKey = key;\n        data.lastEvent = \"keypress\";\n      }\n    },\n    // on mac, with some keyboard layouts (e.g swedish) ^ starts composition, we don't need it in normal mode\n    updateMacCompositionHandlers: function(editor, enable) {\n      var onCompositionUpdateOverride = function(text) {\n        var cm = editor.state.cm;\n        var vim = getVim(cm);\n        if (!vim.insertMode) {\n          var el = this.textInput.getElement();\n          el.blur();\n          el.focus();\n          el.value = text;\n        } else {\n          this.onCompositionUpdateOrig(text);\n        }\n      };\n      var onCompositionStartOverride = function(text) {\n        var cm = editor.state.cm;\n        var vim = getVim(cm);\n        if (!vim.insertMode) {\n          this.onCompositionStartOrig(text);\n        }\n      };\n      if (enable) {\n        if (!editor.onCompositionUpdateOrig) {\n          editor.onCompositionUpdateOrig = editor.onCompositionUpdate;\n          editor.onCompositionUpdate = onCompositionUpdateOverride;\n          editor.onCompositionStartOrig = editor.onCompositionStart;\n          editor.onCompositionStart = onCompositionStartOverride;\n        }\n      } else {\n        if (editor.onCompositionUpdateOrig) {\n          editor.onCompositionUpdate = editor.onCompositionUpdateOrig;\n          editor.onCompositionUpdateOrig = null;\n          editor.onCompositionStart = editor.onCompositionStartOrig;\n          editor.onCompositionStartOrig = null;\n        }\n      }\n    }\n  };\n  var renderVirtualNumbers = {\n    getText: function(session, row) {\n      return (Math.abs(session.selection.lead.row - row)  || (row + 1 + (row < 9? \"\\xb7\" : \"\" ))) + \"\";\n    },\n    getWidth: function(session, lastLineNumber, config) {\n      return session.getLength().toString().length * config.characterWidth;\n    },\n    update: function(e, editor) {\n      editor.renderer.$loop.schedule(editor.renderer.CHANGE_GUTTER);\n    },\n    attach: function(editor) {\n      editor.renderer.$gutterLayer.$renderer = this;\n      editor.on(\"changeSelection\", this.update);\n    },\n    detach: function(editor) {\n      editor.renderer.$gutterLayer.$renderer = null;\n      editor.off(\"changeSelection\", this.update);\n    }\n  };\n  Vim.defineOption({\n    name: \"wrap\",\n    set: function(value, cm) {\n      if (cm) {cm.ace.setOption(\"wrap\", value)}\n    },\n    type: \"boolean\"\n  }, false);\n  Vim.defineEx('write', 'w', function() {\n    console.log(':write is not implemented')\n  });\n  defaultKeymap.push(\n    { keys: 'zc', type: 'action', action: 'fold', actionArgs: { open: false } },\n    { keys: 'zC', type: 'action', action: 'fold', actionArgs: { open: false, all: true } },\n    { keys: 'zo', type: 'action', action: 'fold', actionArgs: { open: true } },\n    { keys: 'zO', type: 'action', action: 'fold', actionArgs: { open: true, all: true } },\n    { keys: 'za', type: 'action', action: 'fold', actionArgs: { toggle: true } },\n    { keys: 'zA', type: 'action', action: 'fold', actionArgs: { toggle: true, all: true } },\n    { keys: 'zf', type: 'action', action: 'fold', actionArgs: { open: true, all: true } },\n    { keys: 'zd', type: 'action', action: 'fold', actionArgs: { open: true, all: true } },\n    \n    { keys: '<C-A-k>', type: 'action', action: 'aceCommand', actionArgs: { name: \"addCursorAbove\" } },\n    { keys: '<C-A-j>', type: 'action', action: 'aceCommand', actionArgs: { name: \"addCursorBelow\" } },\n    { keys: '<C-A-S-k>', type: 'action', action: 'aceCommand', actionArgs: { name: \"addCursorAboveSkipCurrent\" } },\n    { keys: '<C-A-S-j>', type: 'action', action: 'aceCommand', actionArgs: { name: \"addCursorBelowSkipCurrent\" } },\n    { keys: '<C-A-h>', type: 'action', action: 'aceCommand', actionArgs: { name: \"selectMoreBefore\" } },\n    { keys: '<C-A-l>', type: 'action', action: 'aceCommand', actionArgs: { name: \"selectMoreAfter\" } },\n    { keys: '<C-A-S-h>', type: 'action', action: 'aceCommand', actionArgs: { name: \"selectNextBefore\" } },\n    { keys: '<C-A-S-l>', type: 'action', action: 'aceCommand', actionArgs: { name: \"selectNextAfter\" } }\n  );\n  actions.aceCommand = function(cm, actionArgs, vim) {\n    cm.vimCmd = actionArgs;\n    if (cm.ace.inVirtualSelectionMode)\n      cm.ace.on(\"beforeEndOperation\", delayedExecAceCommand);\n    else\n      delayedExecAceCommand(null, cm.ace);\n  };\n  function delayedExecAceCommand(op, ace) {\n    ace.off(\"beforeEndOperation\", delayedExecAceCommand);\n    var cmd = ace.state.cm.vimCmd;\n    if (cmd) {\n      ace.execCommand(cmd.exec ? cmd : cmd.name, cmd.args);\n    }\n    ace.curOp = ace.prevOp;\n  }\n  actions.fold = function(cm, actionArgs, vim) {\n    cm.ace.execCommand(['toggleFoldWidget', 'toggleFoldWidget', 'foldOther', 'unfoldall'\n      ][(actionArgs.all ? 2 : 0) + (actionArgs.open ? 1 : 0)]);\n  };\n\n  exports.handler.defaultKeymap = defaultKeymap;\n  exports.handler.actions = actions;\n  exports.Vim = Vim;\n  \n  Vim.map(\"Y\", \"yy\", \"normal\");\n});\n"
  },
  {
    "path": "lib/ace/keyboard/vim_test.js",
    "content": "\nif (typeof process !== \"undefined\") {\n    require(\"amd-loader\");\n}\n\ndefine(function(require, exports, module) {\n\nvar EditSession = require(\"./../edit_session\").EditSession;\nvar Editor = require(\"./../editor\").Editor;\nvar UndoManager = require(\"./../undomanager\").UndoManager;\nvar MockRenderer = require(\"./../test/mockrenderer\").MockRenderer;\nvar JavaScriptMode = require(\"./../mode/javascript\").Mode;\nvar VirtualRenderer = require(\"./../virtual_renderer\").VirtualRenderer;\nvar assert = require(\"./../test/assertions\");\nvar keys = require(\"./../lib/keys\");\nvar vim = require(\"./vim\");\n\nvar el = document.createElement(\"div\");\nel.style.position = \"fixed\";\nel.style.left = \"20px\";\nel.style.top = \"30px\";\nel.style.width = \"500px\";\nel.style.height = \"300px\";\ndocument.body.appendChild(el);\n\nif (window.name == \"nodejs\")\n    return console.log(\"Skipping test: This test only runs in the browser\");\n\nvar renderer = new VirtualRenderer(el);\neditor = new Editor(renderer);//(new MockRenderer());\neditor.session.setUndoManager(new UndoManager());\neditor.session.setUseWorker(false);\neditor.session.setMode(new JavaScriptMode());\nfunction CodeMirror(place, opts) {\n    if (opts.value != null)\n        editor.session.setValue(opts.value);\n    editor.setOption(\"indentedSoftWrap\", false);\n    editor.setOption(\"wrap\", opts.lineWrapping);\n    editor.setOption(\"useSoftTabs\", !opts.indentWithTabs);\n    editor.setKeyboardHandler(null);\n    editor.setKeyboardHandler(vim.handler);\n    var cm = editor.state.cm;\n    cm.setOption(\"tabSize\", opts.tabSize || 4);\n    cm.setOption(\"indentUnit\", opts.indentUnit || 2);\n\n    cm.setSize = function(w, h) {\n        var changed = false;\n        if (w && editor.w != w) {\n            changed = true;\n            el.style.width = (editor.w = w) + \"px\";\n        }\n        if (h && editor.h != h) {\n            changed = true;\n            el.style.height = (editor.h = h) + \"px\";\n        }\n        if (changed)\n            editor.resize(true);\n    };\n    cm.setSize(500, 300);\n    return cm;\n}\nCodeMirror.defineMode = function() {}\nfor (var key in vim.CodeMirror)\n    CodeMirror[key] = vim.CodeMirror[key];\nvar editor;\nvar i = 0;\nfunction test(name, fn) {\n    // if (name != 'vim_search_history') return\n    // for (i = 0; i < 1000; i++)\n        // exports[\"test \" + name + i] = fn; // vim_ex_global_confirm\n    if (i++ < 0 || /-    /.test(name))\n        exports[\"test \" + name] = function() {};\n    else\n        exports[\"test \" + name] = fn;\n}\nfunction expectFail(fn) {\n    try {\n        fn();\n    } catch(expected) {};\n    throw new Error(\"Expected to throw an error\");\n}\n\nvim.CodeMirror.Vim.unmap(\"Y\");\nvim.CodeMirror.Vim.defineEx('write', 'w', function(cm) {\n  CodeMirror.commands.save(cm);\n});\n\n\n\n// cm.setBookmark({ch: 5, line: 0})\n// cm.setBookmark({ch: 4, line: 0})\n// cm.replaceRange(\"x-\", {ch: 4, line: 0}, {ch: 5, line: 0}); [editor.$vimModeHandler.cm.marks[0].find(),editor.$vimModeHandler.cm.marks[1].find()]\n\nvar lineText, verbose, phantom;\nvar Pos = CodeMirror.Pos;\nvar place = document.createElement(\"div\");\nvar eqPos = assert.deepEqual;\nvar eq = assert.equal;\nvar is = assert.ok;\n\nCodeMirror.Vim.suppressErrorLogging = true;\n\nvar code = '' +\n' wOrd1 (#%\\n' +\n' word3] \\n' +\n'aopop pop 0 1 2 3 4\\n' +\n' (a) [b] {c} \\n' +\n'int getchar(void) {\\n' +\n'  static char buf[BUFSIZ];\\n' +\n'  static char *bufp = buf;\\n' +\n'  if (n == 0) {  /* buffer is empty */\\n' +\n'    n = read(0, buf, sizeof buf);\\n' +\n'    bufp = buf;\\n' +\n'  }\\n' +\n'\\n' +\n'  return (--n >= 0) ? (unsigned char) *bufp++ : EOF;\\n' +\n' \\n' +\n'}\\n';\n\nvar lines = (function() {\n  lineText = code.split('\\n');\n  var ret = [];\n  for (var i = 0; i < lineText.length; i++) {\n    ret[i] = {\n      line: i,\n      length: lineText[i].length,\n      lineText: lineText[i],\n      textStart: /^\\s*/.exec(lineText[i])[0].length\n    };\n  }\n  return ret;\n})();\nvar endOfDocument = makeCursor(lines.length - 1,\n    lines[lines.length - 1].length);\nvar wordLine = lines[0];\nvar bigWordLine = lines[1];\nvar charLine = lines[2];\nvar bracesLine = lines[3];\nvar seekBraceLine = lines[4];\n\nvar word1 = {\n  start: { line: wordLine.line, ch: 1 },\n  end: { line: wordLine.line, ch: 5 }\n};\nvar word2 = {\n  start: { line: wordLine.line, ch: word1.end.ch + 2 },\n  end: { line: wordLine.line, ch: word1.end.ch + 4 }\n};\nvar word3 = {\n  start: { line: bigWordLine.line, ch: 1 },\n  end: { line: bigWordLine.line, ch: 5 }\n};\nvar bigWord1 = word1;\nvar bigWord2 = word2;\nvar bigWord3 = {\n  start: { line: bigWordLine.line, ch: 1 },\n  end: { line: bigWordLine.line, ch: 7 }\n};\nvar bigWord4 = {\n  start: { line: bigWordLine.line, ch: bigWord1.end.ch + 3 },\n  end: { line: bigWordLine.line, ch: bigWord1.end.ch + 7 }\n};\n\nvar oChars = [ { line: charLine.line, ch: 1 },\n    { line: charLine.line, ch: 3 },\n    { line: charLine.line, ch: 7 } ];\nvar pChars = [ { line: charLine.line, ch: 2 },\n    { line: charLine.line, ch: 4 },\n    { line: charLine.line, ch: 6 },\n    { line: charLine.line, ch: 8 } ];\nvar numChars = [ { line: charLine.line, ch: 10 },\n    { line: charLine.line, ch: 12 },\n    { line: charLine.line, ch: 14 },\n    { line: charLine.line, ch: 16 },\n    { line: charLine.line, ch: 18 }];\nvar parens1 = {\n  start: { line: bracesLine.line, ch: 1 },\n  end: { line: bracesLine.line, ch: 3 }\n};\nvar squares1 = {\n  start: { line: bracesLine.line, ch: 5 },\n  end: { line: bracesLine.line, ch: 7 }\n};\nvar curlys1 = {\n  start: { line: bracesLine.line, ch: 9 },\n  end: { line: bracesLine.line, ch: 11 }\n};\nvar seekOutside = {\n  start: { line: seekBraceLine.line, ch: 1 },\n  end: { line: seekBraceLine.line, ch: 16 }\n};\nvar seekInside = {\n  start: { line: seekBraceLine.line, ch: 14 },\n  end: { line: seekBraceLine.line, ch: 11 }\n};\n\nfunction copyCursor(cur) {\n  return { ch: cur.ch, line: cur.line };\n}\n\nfunction forEach(arr, func) {\n  for (var i = 0; i < arr.length; i++) {\n    func(arr[i], i, arr);\n  }\n}\n\nfunction testVim(name, run, opts, expectedFail) {\n  var vimOpts = {\n    lineNumbers: true,\n    vimMode: true,\n    showCursorWhenSelecting: true,\n    value: code\n  };\n  for (var prop in opts) {\n    if (opts.hasOwnProperty(prop)) {\n      vimOpts[prop] = opts[prop];\n    }\n  }\n  return test('vim_' + name, function() {\n    var place = document.getElementById(\"testground\");\n    var cm = CodeMirror(place, vimOpts);\n    var vim = CodeMirror.Vim.maybeInitVimState_(cm);\n\n    function doKeysFn(cm) {\n      return function(args) {\n        if (args instanceof Array) {\n          arguments = args;\n        }\n        for (var i = 0; i < arguments.length; i++) {\n          var result = CodeMirror.Vim.handleKey(cm, arguments[i]);\n          if (!result && cm.state.vim.insertMode) {\n            cm.replaceSelections(fillArray(arguments[i], cm.listSelections().length));\n          }\n        }\n      }\n    }\n    function doInsertModeKeysFn(cm) {\n      return function(args) {\n        if (args instanceof Array) { arguments = args; }\n        function executeHandler(handler) {\n          if (typeof handler == 'string') {\n            CodeMirror.commands[handler](cm);\n          } else {\n            handler(cm);\n          }\n          return true;\n        }\n        for (var i = 0; i < arguments.length; i++) {\n          var key = arguments[i];\n          // Find key in keymap and handle.\n          var handled = CodeMirror.lookupKey(key, 'vim-insert', executeHandler);\n          // Record for insert mode.\n          if (handled == \"handled\" && cm.state.vim.insertMode && arguments[i] != 'Esc') {\n            var lastChange = CodeMirror.Vim.getVimGlobalState_().macroModeState.lastInsertModeChanges;\n            if (lastChange && (key.indexOf('Delete') != -1 || key.indexOf('Backspace') != -1)) {\n              lastChange.changes.push(new CodeMirror.Vim.InsertModeKey(key));\n            }\n          }\n        }\n      }\n    }\n    function doExFn(cm) {\n      return function(command) {\n        cm.openDialog = helpers.fakeOpenDialog(command);\n        helpers.doKeys(':');\n      }\n    }\n    function assertCursorAtFn(cm) {\n      return function(line, ch) {\n        var pos;\n        if (ch == null && typeof line.line == 'number') {\n          pos = line;\n        } else {\n          pos = makeCursor(line, ch);\n        }\n        eqPos(pos, cm.getCursor());\n      }\n    }\n    function fakeOpenDialog(result) {\n      return function(text, callback) {\n        return callback(result);\n      }\n    }\n    function fakeOpenNotification(matcher) {\n      return function(text) {\n        matcher(text);\n      }\n    }\n    var helpers = {\n      doKeys: doKeysFn(cm),\n      // Warning: Only emulates keymap events, not character insertions. Use\n      // replaceRange to simulate character insertions.\n      // Keys are in CodeMirror format, NOT vim format.\n      doInsertModeKeys: doInsertModeKeysFn(cm),\n      doEx: doExFn(cm),\n      assertCursorAt: assertCursorAtFn(cm),\n      fakeOpenDialog: fakeOpenDialog,\n      fakeOpenNotification: fakeOpenNotification,\n      getRegisterController: function() {\n        return CodeMirror.Vim.getRegisterController();\n      }\n    }\n    CodeMirror.Vim.resetVimGlobalState_();\n    var successful = false;\n    var savedOpenNotification = cm.openNotification;\n    var savedOpenDialog = cm.openDialog;\n    try {\n      run(cm, vim, helpers);\n      successful = true;\n    } finally {\n      cm.openNotification = savedOpenNotification;\n      cm.openDialog = savedOpenDialog;\n      // ace_patch\n    }\n  });\n}\ntestVim('qq@q', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('q', 'q', 'l', 'l', 'q');\n  helpers.assertCursorAt(0,2);\n  helpers.doKeys('@', 'q');\n  helpers.assertCursorAt(0,4);\n}, { value: '            '});\ntestVim('@@', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('q', 'q', 'l', 'l', 'q');\n  helpers.assertCursorAt(0,2);\n  helpers.doKeys('@', 'q');\n  helpers.assertCursorAt(0,4);\n  helpers.doKeys('@', '@');\n  helpers.assertCursorAt(0,6);\n}, { value: '            '});\nvar jumplistScene = ''+\n  'word\\n'+\n  '(word)\\n'+\n  '{word\\n'+\n  'word.\\n'+\n  '\\n'+\n  'word search\\n'+\n  '}word\\n'+\n  'word\\n'+\n  'word\\n';\nfunction testJumplist(name, keys, endPos, startPos, dialog) {\n  endPos = makeCursor(endPos[0], endPos[1]);\n  startPos = makeCursor(startPos[0], startPos[1]);\n  testVim(name, function(cm, vim, helpers) {\n    CodeMirror.Vim.resetVimGlobalState_();\n    if(dialog)cm.openDialog = helpers.fakeOpenDialog('word');\n    cm.setCursor(startPos);\n    helpers.doKeys.apply(null, keys);\n    helpers.assertCursorAt(endPos);\n  }, {value: jumplistScene});\n}\ntestJumplist('jumplist_H', ['H', '<C-o>'], [5,2], [5,2]);\ntestJumplist('jumplist_M', ['M', '<C-o>'], [2,2], [2,2]);\ntestJumplist('jumplist_L', ['L', '<C-o>'], [2,2], [2,2]);\ntestJumplist('jumplist_[[', ['[', '[', '<C-o>'], [5,2], [5,2]);\ntestJumplist('jumplist_]]', [']', ']', '<C-o>'], [2,2], [2,2]);\ntestJumplist('jumplist_G', ['G', '<C-o>'], [5,2], [5,2]);\ntestJumplist('jumplist_gg', ['g', 'g', '<C-o>'], [5,2], [5,2]);\ntestJumplist('jumplist_%', ['%', '<C-o>'], [1,5], [1,5]);\ntestJumplist('jumplist_{', ['{', '<C-o>'], [1,5], [1,5]);\ntestJumplist('jumplist_}', ['}', '<C-o>'], [1,5], [1,5]);\ntestJumplist('jumplist_\\'', ['m', 'a', 'h', '\\'', 'a', 'h', '<C-i>'], [1,0], [1,5]);\ntestJumplist('jumplist_`', ['m', 'a', 'h', '`', 'a', 'h', '<C-i>'], [1,5], [1,5]);\ntestJumplist('jumplist_*_cachedCursor', ['*', '<C-o>'], [1,3], [1,3]);\ntestJumplist('jumplist_#_cachedCursor', ['#', '<C-o>'], [1,3], [1,3]);\ntestJumplist('jumplist_n', ['#', 'n', '<C-o>'], [1,1], [2,3]);\ntestJumplist('jumplist_N', ['#', 'N', '<C-o>'], [1,1], [2,3]);\ntestJumplist('jumplist_repeat_<c-o>', ['*', '*', '*', '3', '<C-o>'], [2,3], [2,3]);\ntestJumplist('jumplist_repeat_<c-i>', ['*', '*', '*', '3', '<C-o>', '2', '<C-i>'], [5,0], [2,3]);\ntestJumplist('jumplist_repeated_motion', ['3', '*', '<C-o>'], [2,3], [2,3]);\ntestJumplist('jumplist_/', ['/', '<C-o>'], [2,3], [2,3], 'dialog');\ntestJumplist('jumplist_?', ['?', '<C-o>'], [2,3], [2,3], 'dialog');\ntestJumplist('jumplist_skip_delted_mark<c-o>',\n             ['*', 'n', 'n', 'k', 'd', 'k', '<C-o>', '<C-o>', '<C-o>'],\n             [0,2], [0,2]);\ntestJumplist('jumplist_skip_delted_mark<c-i>',\n             ['*', 'n', 'n', 'k', 'd', 'k', '<C-o>', '<C-i>', '<C-i>'],\n             [1,0], [0,2]);\n\n/**\n * @param name Name of the test\n * @param keys An array of keys or a string with a single key to simulate.\n * @param endPos The expected end position of the cursor.\n * @param startPos The position the cursor should start at, defaults to 0, 0.\n */\nfunction testMotion(name, keys, endPos, startPos) {\n  testVim(name, function(cm, vim, helpers) {\n    if (!startPos) {\n      startPos = { line: 0, ch: 0 };\n    }\n    cm.setCursor(startPos);\n    helpers.doKeys(keys);\n    helpers.assertCursorAt(endPos);\n  });\n}\n\nfunction makeCursor(line, ch) {\n  return { line: line, ch: ch };\n}\n\nfunction offsetCursor(cur, offsetLine, offsetCh) {\n  return { line: cur.line + offsetLine, ch: cur.ch + offsetCh };\n}\n\n// Motion tests\ntestMotion('|', '|', makeCursor(0, 0), makeCursor(0,4));\ntestMotion('|_repeat', ['3', '|'], makeCursor(0, 2), makeCursor(0,4));\ntestMotion('h', 'h', makeCursor(0, 0), word1.start);\ntestMotion('h_repeat', ['3', 'h'], offsetCursor(word1.end, 0, -3), word1.end);\ntestMotion('l', 'l', makeCursor(0, 1));\ntestMotion('l_repeat', ['2', 'l'], makeCursor(0, 2));\ntestMotion('j', 'j', offsetCursor(word1.end, 1, 0), word1.end);\ntestMotion('j_repeat', ['2', 'j'], offsetCursor(word1.end, 2, 0), word1.end);\ntestMotion('j_repeat_clip', ['1000', 'j'], endOfDocument);\ntestMotion('k', 'k', offsetCursor(word3.end, -1, 0), word3.end);\ntestMotion('k_repeat', ['2', 'k'], makeCursor(0, 4), makeCursor(2, 4));\ntestMotion('k_repeat_clip', ['1000', 'k'], makeCursor(0, 4), makeCursor(2, 4));\ntestMotion('w', 'w', word1.start);\ntestMotion('w_multiple_newlines_no_space', 'w', makeCursor(12, 2), makeCursor(11, 2));\ntestMotion('w_multiple_newlines_with_space', 'w', makeCursor(14, 0), makeCursor(12, 51));\ntestMotion('w_repeat', ['2', 'w'], word2.start);\ntestMotion('w_wrap', ['w'], word3.start, word2.start);\ntestMotion('w_endOfDocument', 'w', endOfDocument, endOfDocument);\ntestMotion('w_start_to_end', ['1000', 'w'], endOfDocument, makeCursor(0, 0));\ntestMotion('W', 'W', bigWord1.start);\ntestMotion('W_repeat', ['2', 'W'], bigWord3.start, bigWord1.start);\ntestMotion('e', 'e', word1.end);\ntestMotion('e_repeat', ['2', 'e'], word2.end);\ntestMotion('e_wrap', 'e', word3.end, word2.end);\ntestMotion('e_endOfDocument', 'e', endOfDocument, endOfDocument);\ntestMotion('e_start_to_end', ['1000', 'e'], endOfDocument, makeCursor(0, 0));\ntestMotion('b', 'b', word3.start, word3.end);\ntestMotion('b_repeat', ['2', 'b'], word2.start, word3.end);\ntestMotion('b_wrap', 'b', word2.start, word3.start);\ntestMotion('b_startOfDocument', 'b', makeCursor(0, 0), makeCursor(0, 0));\ntestMotion('b_end_to_start', ['1000', 'b'], makeCursor(0, 0), endOfDocument);\ntestMotion('ge', ['g', 'e'], word2.end, word3.end);\ntestMotion('ge_repeat', ['2', 'g', 'e'], word1.end, word3.start);\ntestMotion('ge_wrap', ['g', 'e'], word2.end, word3.start);\ntestMotion('ge_startOfDocument', ['g', 'e'], makeCursor(0, 0),\n    makeCursor(0, 0));\ntestMotion('ge_end_to_start', ['1000', 'g', 'e'], makeCursor(0, 0), endOfDocument);\ntestMotion('gg', ['g', 'g'], makeCursor(lines[0].line, lines[0].textStart),\n    makeCursor(3, 1));\ntestMotion('gg_repeat', ['3', 'g', 'g'],\n    makeCursor(lines[2].line, lines[2].textStart));\ntestMotion('G', 'G',\n    makeCursor(lines[lines.length - 1].line, lines[lines.length - 1].textStart),\n    makeCursor(3, 1));\ntestMotion('G_repeat', ['3', 'G'], makeCursor(lines[2].line,\n    lines[2].textStart));\n// TODO: Make the test code long enough to test Ctrl-F and Ctrl-B.\ntestMotion('0', '0', makeCursor(0, 0), makeCursor(0, 8));\ntestMotion('^', '^', makeCursor(0, lines[0].textStart), makeCursor(0, 8));\ntestMotion('+', '+', makeCursor(1, lines[1].textStart), makeCursor(0, 8));\ntestMotion('-', '-', makeCursor(0, lines[0].textStart), makeCursor(1, 4));\ntestMotion('_', ['6','_'], makeCursor(5, lines[5].textStart), makeCursor(0, 8));\ntestMotion('$', '$', makeCursor(0, lines[0].length - 1), makeCursor(0, 1));\ntestMotion('$_repeat', ['2', '$'], makeCursor(1, lines[1].length - 1),\n    makeCursor(0, 3));\ntestMotion('f', ['f', 'p'], pChars[0], makeCursor(charLine.line, 0));\ntestMotion('f_repeat', ['2', 'f', 'p'], pChars[2], pChars[0]);\ntestMotion('f_num', ['f', '2'], numChars[2], makeCursor(charLine.line, 0));\ntestMotion('t', ['t','p'], offsetCursor(pChars[0], 0, -1),\n    makeCursor(charLine.line, 0));\ntestMotion('t_repeat', ['2', 't', 'p'], offsetCursor(pChars[2], 0, -1),\n    pChars[0]);\ntestMotion('F', ['F', 'p'], pChars[0], pChars[1]);\ntestMotion('F_repeat', ['2', 'F', 'p'], pChars[0], pChars[2]);\ntestMotion('T', ['T', 'p'], offsetCursor(pChars[0], 0, 1), pChars[1]);\ntestMotion('T_repeat', ['2', 'T', 'p'], offsetCursor(pChars[0], 0, 1), pChars[2]);\ntestMotion('%_parens', ['%'], parens1.end, parens1.start);\ntestMotion('%_squares', ['%'], squares1.end, squares1.start);\ntestMotion('%_braces', ['%'], curlys1.end, curlys1.start);\ntestMotion('%_seek_outside', ['%'], seekOutside.end, seekOutside.start);\ntestMotion('%_seek_inside', ['%'], seekInside.end, seekInside.start);\ntestVim('%_seek_skip', function(cm, vim, helpers) {\n  cm.setCursor(0,0);\n  helpers.doKeys(['%']);\n  helpers.assertCursorAt(0,9);\n}, {value:'01234\"(\"()'});\ntestVim('%_skip_string', function(cm, vim, helpers) {\n  cm.setCursor(0,0);\n  helpers.doKeys(['%']);\n  helpers.assertCursorAt(0,4);\n  cm.setCursor(0,2);\n  helpers.doKeys(['%']);\n  helpers.assertCursorAt(0,0);\n}, {value:'(\")\")'});\ntestVim('%_skip_comment', function(cm, vim, helpers) {\n  cm.setCursor(0,0);\n  helpers.doKeys(['%']);\n  helpers.assertCursorAt(0,6);\n  cm.setCursor(0,3);\n  helpers.doKeys(['%']);\n  helpers.assertCursorAt(0,0);\n}, {value:'(/*)*/)'});\n// Make sure that moving down after going to the end of a line always leaves you\n// at the end of a line, but preserves the offset in other cases\ntestVim('Changing lines after Eol operation', function(cm, vim, helpers) {\n  cm.setCursor(0,0);\n  helpers.doKeys(['$']);\n  helpers.doKeys(['j']);\n  // After moving to Eol and then down, we should be at Eol of line 2\n  helpers.assertCursorAt({ line: 1, ch: lines[1].length - 1 });\n  helpers.doKeys(['j']);\n  // After moving down, we should be at Eol of line 3\n  helpers.assertCursorAt({ line: 2, ch: lines[2].length - 1 });\n  helpers.doKeys(['h']);\n  helpers.doKeys(['j']);\n  // After moving back one space and then down, since line 4 is shorter than line 2, we should\n  // be at Eol of line 2 - 1\n  helpers.assertCursorAt({ line: 3, ch: lines[3].length - 1 });\n  helpers.doKeys(['j']);\n  helpers.doKeys(['j']);\n  // After moving down again, since line 3 has enough characters, we should be back to the\n  // same place we were at on line 1\n  helpers.assertCursorAt({ line: 5, ch: lines[2].length - 2 });\n});\n//making sure gj and gk recover from clipping\ntestVim('gj_gk_clipping', function(cm,vim,helpers){\n  cm.setCursor(0, 1);\n  helpers.doKeys('g','j','g','j');\n  helpers.assertCursorAt(2, 1);\n  helpers.doKeys('g','k','g','k');\n  helpers.assertCursorAt(0, 1);\n},{value: 'line 1\\n\\nline 2'});\n//testing a mix of j/k and gj/gk\ntestVim('j_k_and_gj_gk', function(cm,vim,helpers){\n  cm.setSize(120);\n  cm.setCursor(0, 0);\n  //go to the last character on the first line\n  helpers.doKeys('$');\n  //move up/down on the column within the wrapped line\n  //side-effect: cursor is not locked to eol anymore\n  helpers.doKeys('g','k');\n  var cur=cm.getCursor();\n  eq(cur.line,0);\n  is((cur.ch<176),'gk didn\\'t move cursor back (1)');\n  helpers.doKeys('g','j');\n  helpers.assertCursorAt(0, 176);\n  //should move to character 177 on line 2 (j/k preserve character index within line)\n  helpers.doKeys('j');\n  //due to different line wrapping, the cursor can be on a different screen-x now\n  //gj and gk preserve screen-x on movement, much like moveV\n  helpers.doKeys('3','g','k');\n  cur=cm.getCursor();\n  eq(cur.line,1);\n  is((cur.ch<176),'gk didn\\'t move cursor back (2)');\n  helpers.doKeys('g','j','2','g','j');\n  //should return to the same character-index\n  helpers.doKeys('k');\n  helpers.assertCursorAt(0, 176);\n},{ lineWrapping:true, value: 'This line is intentially long to test movement of gj and gk over wrapped lines. I will start on the end of this line, then make a step up and back to set the origin for j and k.\\nThis line is supposed to be even longer than the previous. I will jump here and make another wiggle with gj and gk, before I jump back to the line above. Both wiggles should not change my cursor\\'s target character but both j/k and gj/gk change each other\\'s reference position.'});\ntestVim('gj_gk', function(cm, vim, helpers) {\n  if (phantom) return;\n  cm.setSize(120);\n  // Test top of document edge case.\n  cm.setCursor(0, 4);\n  helpers.doKeys('g', 'j');\n  helpers.doKeys('10', 'g', 'k');\n  helpers.assertCursorAt(0, 4);\n\n  // Test moving down preserves column position.\n  helpers.doKeys('g', 'j');\n  var pos1 = cm.getCursor();\n  var expectedPos2 = { line: 0, ch: (pos1.ch - 4) * 2 + 4};\n  helpers.doKeys('g', 'j');\n  helpers.assertCursorAt(expectedPos2);\n\n  // Move to the last character\n  cm.setCursor(0, 0);\n  // Move left to reset HSPos\n  helpers.doKeys('h');\n  // Test bottom of document edge case.\n  helpers.doKeys('100', 'g', 'j');\n  var endingPos = cm.getCursor();\n  is(endingPos != 0, 'gj should not be on wrapped line 0');\n  var topLeftCharCoords = cm.charCoords(makeCursor(0, 0));\n  var endingCharCoords = cm.charCoords(endingPos);\n  is(topLeftCharCoords.left == endingCharCoords.left, 'gj should end up on column 0');\n},{ lineNumbers: false, lineWrapping:true, value: 'Thislineisintentiallylongtotestmovementofgjandgkoverwrappedlines.' });\ntestVim('}', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('}');\n  helpers.assertCursorAt(1, 0);\n  cm.setCursor(0, 0);\n  helpers.doKeys('2', '}');\n  helpers.assertCursorAt(4, 0);\n  cm.setCursor(0, 0);\n  helpers.doKeys('6', '}');\n  helpers.assertCursorAt(5, 0);\n}, { value: 'a\\n\\nb\\nc\\n\\nd' });\ntestVim('{', function(cm, vim, helpers) {\n  cm.setCursor(5, 0);\n  helpers.doKeys('{');\n  helpers.assertCursorAt(4, 0);\n  cm.setCursor(5, 0);\n  helpers.doKeys('2', '{');\n  helpers.assertCursorAt(1, 0);\n  cm.setCursor(5, 0);\n  helpers.doKeys('6', '{');\n  helpers.assertCursorAt(0, 0);\n}, { value: 'a\\n\\nb\\nc\\n\\nd' });\ntestVim('paragraph_motions', function(cm, vim, helpers) {\n  cm.setCursor(10, 0);\n  helpers.doKeys('{');\n  helpers.assertCursorAt(4, 0);\n  helpers.doKeys('{');\n  helpers.assertCursorAt(0, 0);\n  helpers.doKeys('2', '}');\n  helpers.assertCursorAt(7, 0);\n  helpers.doKeys('2', '}');\n  helpers.assertCursorAt(16, 0);\n\n  cm.setCursor(9, 0);\n  helpers.doKeys('}');\n  helpers.assertCursorAt(14, 0);\n\n  cm.setCursor(6, 0);\n  helpers.doKeys('}');\n  helpers.assertCursorAt(7, 0);\n\n  // ip inside empty space\n  cm.setCursor(10, 0);\n  helpers.doKeys('v', 'i', 'p');\n  eqPos(Pos(7, 0), cm.getCursor('anchor'));\n  eqPos(Pos(12, 0), cm.getCursor('head'));\n  helpers.doKeys('i', 'p');\n  eqPos(Pos(7, 0), cm.getCursor('anchor'));\n  eqPos(Pos(13, 1), cm.getCursor('head'));\n  helpers.doKeys('2', 'i', 'p');\n  eqPos(Pos(7, 0), cm.getCursor('anchor'));\n  eqPos(Pos(16, 1), cm.getCursor('head'));\n\n  // should switch to visualLine mode\n  cm.setCursor(14, 0);\n  helpers.doKeys('<Esc>', 'v', 'i', 'p');\n  helpers.assertCursorAt(14, 0);\n\n  cm.setCursor(14, 0);\n  helpers.doKeys('<Esc>', 'V', 'i', 'p');\n  eqPos(Pos(16, 1), cm.getCursor('head'));\n\n  // ap inside empty space\n  cm.setCursor(10, 0);\n  helpers.doKeys('<Esc>', 'v', 'a', 'p');\n  eqPos(Pos(7, 0), cm.getCursor('anchor'));\n  eqPos(Pos(13, 1), cm.getCursor('head'));\n  helpers.doKeys('a', 'p');\n  eqPos(Pos(7, 0), cm.getCursor('anchor'));\n  eqPos(Pos(16, 1), cm.getCursor('head'));\n\n  cm.setCursor(13, 0);\n  helpers.doKeys('v', 'a', 'p');\n  eqPos(Pos(13, 0), cm.getCursor('anchor'));\n  eqPos(Pos(14, 0), cm.getCursor('head'));\n\n  cm.setCursor(16, 0);\n  helpers.doKeys('v', 'a', 'p');\n  eqPos(Pos(14, 0), cm.getCursor('anchor'));\n  eqPos(Pos(16, 1), cm.getCursor('head'));\n\n  cm.setCursor(0, 0);\n  helpers.doKeys('v', 'a', 'p');\n  eqPos(Pos(0, 0), cm.getCursor('anchor'));\n  eqPos(Pos(4, 0), cm.getCursor('head'));\n\n  cm.setCursor(0, 0);\n  helpers.doKeys('d', 'i', 'p');\n  var register = helpers.getRegisterController().getRegister();\n  eq('a\\na\\n', register.toString());\n  is(register.linewise);\n  helpers.doKeys('3', 'j', 'p');\n  helpers.doKeys('y', 'i', 'p');\n  is(register.linewise);\n  eq('b\\na\\na\\nc\\n', register.toString());\n}, { value: 'a\\na\\n\\n\\n\\nb\\nc\\n\\n\\n\\n\\n\\n\\nd\\n\\ne\\nf' });\n\n// Operator tests\ntestVim('dl', function(cm, vim, helpers) {\n  var curStart = makeCursor(0, 0);\n  cm.setCursor(curStart);\n  helpers.doKeys('d', 'l');\n  eq('word1 ', cm.getValue());\n  var register = helpers.getRegisterController().getRegister();\n  eq(' ', register.toString());\n  is(!register.linewise);\n  eqPos(curStart, cm.getCursor());\n}, { value: ' word1 ' });\ntestVim('dl_eol', function(cm, vim, helpers) {\n  cm.setCursor(0, 6);\n  helpers.doKeys('d', 'l');\n  eq(' word1', cm.getValue());\n  var register = helpers.getRegisterController().getRegister();\n  eq(' ', register.toString());\n  is(!register.linewise);\n  helpers.assertCursorAt(0, 5);\n}, { value: ' word1 ' });\ntestVim('dl_repeat', function(cm, vim, helpers) {\n  var curStart = makeCursor(0, 0);\n  cm.setCursor(curStart);\n  helpers.doKeys('2', 'd', 'l');\n  eq('ord1 ', cm.getValue());\n  var register = helpers.getRegisterController().getRegister();\n  eq(' w', register.toString());\n  is(!register.linewise);\n  eqPos(curStart, cm.getCursor());\n}, { value: ' word1 ' });\ntestVim('dh', function(cm, vim, helpers) {\n  var curStart = makeCursor(0, 3);\n  cm.setCursor(curStart);\n  helpers.doKeys('d', 'h');\n  eq(' wrd1 ', cm.getValue());\n  var register = helpers.getRegisterController().getRegister();\n  eq('o', register.toString());\n  is(!register.linewise);\n  eqPos(offsetCursor(curStart, 0 , -1), cm.getCursor());\n}, { value: ' word1 ' });\ntestVim('dj', function(cm, vim, helpers) {\n  var curStart = makeCursor(0, 3);\n  cm.setCursor(curStart);\n  helpers.doKeys('d', 'j');\n  eq(' word3', cm.getValue());\n  var register = helpers.getRegisterController().getRegister();\n  eq(' word1\\nword2\\n', register.toString());\n  is(register.linewise);\n  helpers.assertCursorAt(0, 1);\n}, { value: ' word1\\nword2\\n word3' });\ntestVim('dj_end_of_document', function(cm, vim, helpers) {\n  var curStart = makeCursor(0, 3);\n  cm.setCursor(curStart);\n  helpers.doKeys('d', 'j');\n  eq(' word1 ', cm.getValue());\n  var register = helpers.getRegisterController().getRegister();\n  eq('', register.toString());\n  is(!register.linewise);\n  helpers.assertCursorAt(0, 3);\n}, { value: ' word1 ' });\ntestVim('dk', function(cm, vim, helpers) {\n  var curStart = makeCursor(1, 3);\n  cm.setCursor(curStart);\n  helpers.doKeys('d', 'k');\n  eq(' word3', cm.getValue());\n  var register = helpers.getRegisterController().getRegister();\n  eq(' word1\\nword2\\n', register.toString());\n  is(register.linewise);\n  helpers.assertCursorAt(0, 1);\n}, { value: ' word1\\nword2\\n word3' });\ntestVim('dk_start_of_document', function(cm, vim, helpers) {\n  var curStart = makeCursor(0, 3);\n  cm.setCursor(curStart);\n  helpers.doKeys('d', 'k');\n  eq(' word1 ', cm.getValue());\n  var register = helpers.getRegisterController().getRegister();\n  eq('', register.toString());\n  is(!register.linewise);\n  helpers.assertCursorAt(0, 3);\n}, { value: ' word1 ' });\ntestVim('dw_space', function(cm, vim, helpers) {\n  var curStart = makeCursor(0, 0);\n  cm.setCursor(curStart);\n  helpers.doKeys('d', 'w');\n  eq('word1 ', cm.getValue());\n  var register = helpers.getRegisterController().getRegister();\n  eq(' ', register.toString());\n  is(!register.linewise);\n  eqPos(curStart, cm.getCursor());\n}, { value: ' word1 ' });\ntestVim('dw_word', function(cm, vim, helpers) {\n  var curStart = makeCursor(0, 1);\n  cm.setCursor(curStart);\n  helpers.doKeys('d', 'w');\n  eq(' word2', cm.getValue());\n  var register = helpers.getRegisterController().getRegister();\n  eq('word1 ', register.toString());\n  is(!register.linewise);\n  eqPos(curStart, cm.getCursor());\n}, { value: ' word1 word2' });\ntestVim('dw_unicode_word', function(cm, vim, helpers) {\n  helpers.doKeys('d', 'w');\n  eq(cm.getValue().length, 10);\n  helpers.doKeys('d', 'w');\n  eq(cm.getValue().length, 6);\n  helpers.doKeys('d', 'w');\n  eq(cm.getValue().length, 5);\n  helpers.doKeys('d', 'e');\n  eq(cm.getValue().length, 2);\n}, { value: '  \\u0562\\u0561\\u0580\\u0587\\xbbe\\xb5g  ' });\ntestVim('dw_only_word', function(cm, vim, helpers) {\n  // Test that if there is only 1 word left, dw deletes till the end of the\n  // line.\n  cm.setCursor(0, 1);\n  helpers.doKeys('d', 'w');\n  eq(' ', cm.getValue());\n  var register = helpers.getRegisterController().getRegister();\n  eq('word1 ', register.toString());\n  is(!register.linewise);\n  helpers.assertCursorAt(0, 0);\n}, { value: ' word1 ' });\ntestVim('dw_eol', function(cm, vim, helpers) {\n  // Assert that dw does not delete the newline if last word to delete is at end\n  // of line.\n  cm.setCursor(0, 1);\n  helpers.doKeys('d', 'w');\n  eq(' \\nword2', cm.getValue());\n  var register = helpers.getRegisterController().getRegister();\n  eq('word1', register.toString());\n  is(!register.linewise);\n  helpers.assertCursorAt(0, 0);\n}, { value: ' word1\\nword2' });\ntestVim('dw_eol_with_multiple_newlines', function(cm, vim, helpers) {\n  // Assert that dw does not delete the newline if last word to delete is at end\n  // of line and it is followed by multiple newlines.\n  cm.setCursor(0, 1);\n  helpers.doKeys('d', 'w');\n  eq(' \\n\\nword2', cm.getValue());\n  var register = helpers.getRegisterController().getRegister();\n  eq('word1', register.toString());\n  is(!register.linewise);\n  helpers.assertCursorAt(0, 0);\n}, { value: ' word1\\n\\nword2' });\ntestVim('dw_empty_line_followed_by_whitespace', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('d', 'w');\n  eq('  \\nword', cm.getValue());\n}, { value: '\\n  \\nword' });\ntestVim('dw_empty_line_followed_by_word', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('d', 'w');\n  eq('word', cm.getValue());\n}, { value: '\\nword' });\ntestVim('dw_empty_line_followed_by_empty_line', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('d', 'w');\n  eq('\\n', cm.getValue());\n}, { value: '\\n\\n' });\ntestVim('dw_whitespace_followed_by_whitespace', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('d', 'w');\n  eq('\\n   \\n', cm.getValue());\n}, { value: '  \\n   \\n' });\ntestVim('dw_whitespace_followed_by_empty_line', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('d', 'w');\n  eq('\\n\\n', cm.getValue());\n}, { value: '  \\n\\n' });\ntestVim('dw_word_whitespace_word', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('d', 'w');\n  eq('\\n   \\nword2', cm.getValue());\n}, { value: 'word1\\n   \\nword2'})\ntestVim('dw_end_of_document', function(cm, vim, helpers) {\n  cm.setCursor(1, 2);\n  helpers.doKeys('d', 'w');\n  eq('\\nab', cm.getValue());\n}, { value: '\\nabc' });\ntestVim('dw_repeat', function(cm, vim, helpers) {\n  // Assert that dw does delete newline if it should go to the next line, and\n  // that repeat works properly.\n  cm.setCursor(0, 1);\n  helpers.doKeys('d', '2', 'w');\n  eq(' ', cm.getValue());\n  var register = helpers.getRegisterController().getRegister();\n  eq('word1\\nword2', register.toString());\n  is(!register.linewise);\n  helpers.assertCursorAt(0, 0);\n}, { value: ' word1\\nword2' });\ntestVim('de_word_start_and_empty_lines', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('d', 'e');\n  eq('\\n\\n', cm.getValue());\n}, { value: 'word\\n\\n' });\ntestVim('de_word_end_and_empty_lines', function(cm, vim, helpers) {\n  cm.setCursor(0, 3);\n  helpers.doKeys('d', 'e');\n  eq('wor', cm.getValue());\n}, { value: 'word\\n\\n\\n' });\ntestVim('de_whitespace_and_empty_lines', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('d', 'e');\n  eq('', cm.getValue());\n}, { value: '   \\n\\n\\n' });\ntestVim('de_end_of_document', function(cm, vim, helpers) {\n  cm.setCursor(1, 2);\n  helpers.doKeys('d', 'e');\n  eq('\\nab', cm.getValue());\n}, { value: '\\nabc' });\ntestVim('db_empty_lines', function(cm, vim, helpers) {\n  cm.setCursor(2, 0);\n  helpers.doKeys('d', 'b');\n  eq('\\n\\n', cm.getValue());\n}, { value: '\\n\\n\\n' });\ntestVim('db_word_start_and_empty_lines', function(cm, vim, helpers) {\n  cm.setCursor(2, 0);\n  helpers.doKeys('d', 'b');\n  eq('\\nword', cm.getValue());\n}, { value: '\\n\\nword' });\ntestVim('db_word_end_and_empty_lines', function(cm, vim, helpers) {\n  cm.setCursor(2, 3);\n  helpers.doKeys('d', 'b');\n  eq('\\n\\nd', cm.getValue());\n}, { value: '\\n\\nword' });\ntestVim('db_whitespace_and_empty_lines', function(cm, vim, helpers) {\n  cm.setCursor(2, 0);\n  helpers.doKeys('d', 'b');\n  eq('', cm.getValue());\n}, { value: '\\n   \\n' });\ntestVim('db_start_of_document', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('d', 'b');\n  eq('abc\\n', cm.getValue());\n}, { value: 'abc\\n' });\ntestVim('dge_empty_lines', function(cm, vim, helpers) {\n  cm.setCursor(1, 0);\n  helpers.doKeys('d', 'g', 'e');\n  // Note: In real VIM the result should be '', but it's not quite consistent,\n  // since 2 newlines are deleted. But in the similar case of word\\n\\n, only\n  // 1 newline is deleted. We'll diverge from VIM's behavior since it's much\n  // easier this way.\n  eq('\\n', cm.getValue());\n}, { value: '\\n\\n' });\ntestVim('dge_word_and_empty_lines', function(cm, vim, helpers) {\n  cm.setCursor(1, 0);\n  helpers.doKeys('d', 'g', 'e');\n  eq('wor\\n', cm.getValue());\n}, { value: 'word\\n\\n'});\ntestVim('dge_whitespace_and_empty_lines', function(cm, vim, helpers) {\n  cm.setCursor(2, 0);\n  helpers.doKeys('d', 'g', 'e');\n  eq('', cm.getValue());\n}, { value: '\\n  \\n' });\ntestVim('dge_start_of_document', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('d', 'g', 'e');\n  eq('bc\\n', cm.getValue());\n}, { value: 'abc\\n' });\ntestVim('d_inclusive', function(cm, vim, helpers) {\n  // Assert that when inclusive is set, the character the cursor is on gets\n  // deleted too.\n  var curStart = makeCursor(0, 1);\n  cm.setCursor(curStart);\n  helpers.doKeys('d', 'e');\n  eq('  ', cm.getValue());\n  var register = helpers.getRegisterController().getRegister();\n  eq('word1', register.toString());\n  is(!register.linewise);\n  eqPos(curStart, cm.getCursor());\n}, { value: ' word1 ' });\ntestVim('d_reverse', function(cm, vim, helpers) {\n  // Test that deleting in reverse works.\n  cm.setCursor(1, 0);\n  helpers.doKeys('d', 'b');\n  eq(' word2 ', cm.getValue());\n  var register = helpers.getRegisterController().getRegister();\n  eq('word1\\n', register.toString());\n  is(!register.linewise);\n  helpers.assertCursorAt(0, 1);\n}, { value: ' word1\\nword2 ' });\ntestVim('dd', function(cm, vim, helpers) {\n  cm.setCursor(0, 3);\n  var expectedBuffer = cm.getRange({ line: 0, ch: 0 },\n    { line: 1, ch: 0 });\n  var expectedLineCount = cm.lineCount() - 1;\n  helpers.doKeys('d', 'd');\n  eq(expectedLineCount, cm.lineCount());\n  var register = helpers.getRegisterController().getRegister();\n  eq(expectedBuffer, register.toString());\n  is(register.linewise);\n  helpers.assertCursorAt(0, lines[1].textStart);\n});\ntestVim('dd_prefix_repeat', function(cm, vim, helpers) {\n  cm.setCursor(0, 3);\n  var expectedBuffer = cm.getRange({ line: 0, ch: 0 },\n    { line: 2, ch: 0 });\n  var expectedLineCount = cm.lineCount() - 2;\n  helpers.doKeys('2', 'd', 'd');\n  eq(expectedLineCount, cm.lineCount());\n  var register = helpers.getRegisterController().getRegister();\n  eq(expectedBuffer, register.toString());\n  is(register.linewise);\n  helpers.assertCursorAt(0, lines[2].textStart);\n});\ntestVim('dd_motion_repeat', function(cm, vim, helpers) {\n  cm.setCursor(0, 3);\n  var expectedBuffer = cm.getRange({ line: 0, ch: 0 },\n    { line: 2, ch: 0 });\n  var expectedLineCount = cm.lineCount() - 2;\n  helpers.doKeys('d', '2', 'd');\n  eq(expectedLineCount, cm.lineCount());\n  var register = helpers.getRegisterController().getRegister();\n  eq(expectedBuffer, register.toString());\n  is(register.linewise);\n  helpers.assertCursorAt(0, lines[2].textStart);\n});\ntestVim('dd_multiply_repeat', function(cm, vim, helpers) {\n  cm.setCursor(0, 3);\n  var expectedBuffer = cm.getRange({ line: 0, ch: 0 },\n    { line: 6, ch: 0 });\n  var expectedLineCount = cm.lineCount() - 6;\n  helpers.doKeys('2', 'd', '3', 'd');\n  eq(expectedLineCount, cm.lineCount());\n  var register = helpers.getRegisterController().getRegister();\n  eq(expectedBuffer, register.toString());\n  is(register.linewise);\n  helpers.assertCursorAt(0, lines[6].textStart);\n});\ntestVim('dd_lastline', function(cm, vim, helpers) {\n  cm.setCursor(cm.lineCount(), 0);\n  var expectedLineCount = cm.lineCount() - 1;\n  helpers.doKeys('d', 'd');\n  eq(expectedLineCount, cm.lineCount());\n  helpers.assertCursorAt(cm.lineCount() - 1, 0);\n});\ntestVim('dd_only_line', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  var expectedRegister = cm.getValue() + \"\\n\";\n  helpers.doKeys('d','d');\n  eq(1, cm.lineCount());\n  eq('', cm.getValue());\n  var register = helpers.getRegisterController().getRegister();\n  eq(expectedRegister, register.toString());\n}, { value: \"thisistheonlyline\" });\n// Yank commands should behave the exact same as d commands, expect that nothing\n// gets deleted.\ntestVim('yw_repeat', function(cm, vim, helpers) {\n  // Assert that yw does yank newline if it should go to the next line, and\n  // that repeat works properly.\n  var curStart = makeCursor(0, 1);\n  cm.setCursor(curStart);\n  helpers.doKeys('y', '2', 'w');\n  eq(' word1\\nword2', cm.getValue());\n  var register = helpers.getRegisterController().getRegister();\n  eq('word1\\nword2', register.toString());\n  is(!register.linewise);\n  eqPos(curStart, cm.getCursor());\n}, { value: ' word1\\nword2' });\ntestVim('yy_multiply_repeat', function(cm, vim, helpers) {\n  var curStart = makeCursor(0, 3);\n  cm.setCursor(curStart);\n  var expectedBuffer = cm.getRange({ line: 0, ch: 0 },\n    { line: 6, ch: 0 });\n  var expectedLineCount = cm.lineCount();\n  helpers.doKeys('2', 'y', '3', 'y');\n  eq(expectedLineCount, cm.lineCount());\n  var register = helpers.getRegisterController().getRegister();\n  eq(expectedBuffer, register.toString());\n  is(register.linewise);\n  eqPos(curStart, cm.getCursor());\n});\n// Change commands behave like d commands except that it also enters insert\n// mode. In addition, when the change is linewise, an additional newline is\n// inserted so that insert mode starts on that line.\ntestVim('cw', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('c', '2', 'w');\n  eq(' word3', cm.getValue());\n  helpers.assertCursorAt(0, 0);\n}, { value: 'word1 word2 word3'});\ntestVim('cw_repeat', function(cm, vim, helpers) {\n  // Assert that cw does delete newline if it should go to the next line, and\n  // that repeat works properly.\n  var curStart = makeCursor(0, 1);\n  cm.setCursor(curStart);\n  helpers.doKeys('c', '2', 'w');\n  eq(' ', cm.getValue());\n  var register = helpers.getRegisterController().getRegister();\n  eq('word1\\nword2', register.toString());\n  is(!register.linewise);\n  eqPos(curStart, cm.getCursor());\n  eq('vim-insert', cm.getOption('keyMap'));\n}, { value: ' word1\\nword2' });\ntestVim('cc_multiply_repeat', function(cm, vim, helpers) {\n  cm.setCursor(0, 3);\n  var expectedBuffer = cm.getRange({ line: 0, ch: 0 },\n    { line: 6, ch: 0 });\n  var expectedLineCount = cm.lineCount() - 5;\n  helpers.doKeys('2', 'c', '3', 'c');\n  eq(expectedLineCount, cm.lineCount());\n  var register = helpers.getRegisterController().getRegister();\n  eq(expectedBuffer, register.toString());\n  is(register.linewise);\n  eq('vim-insert', cm.getOption('keyMap'));\n});\ntestVim('ct', function(cm, vim, helpers) {\n  cm.setCursor(0, 9);\n  helpers.doKeys('c', 't', 'w');\n  eq('  word1  word3', cm.getValue());\n  helpers.doKeys('<Esc>', 'c', '|');\n  eq(' word3', cm.getValue());\n  helpers.assertCursorAt(0, 0);\n  helpers.doKeys('<Esc>', '2', 'u', 'w', 'h');\n  helpers.doKeys('c', '2', 'g', 'e');\n  eq('  wordword3', cm.getValue());\n}, { value: '  word1  word2  word3'});\ntestVim('cc_should_not_append_to_document', function(cm, vim, helpers) {\n  var expectedLineCount = cm.lineCount();\n  cm.setCursor(cm.lastLine(), 0);\n  helpers.doKeys('c', 'c');\n  eq(expectedLineCount, cm.lineCount());\n});\nfunction fillArray(val, times) {\n  var arr = [];\n  for (var i = 0; i < times; i++) {\n    arr.push(val);\n  }\n  return arr;\n}\ntestVim('c_visual_block', function(cm, vim, helpers) {\n  cm.setCursor(0, 1);\n  helpers.doKeys('<C-v>', '2', 'j', 'l', 'l', 'l', 'c');\n  var replacement = fillArray('hello', 3);\n  cm.replaceSelections(replacement);\n  eq('1hello\\n5hello\\nahellofg', cm.getValue());\n  helpers.doKeys('<Esc>');\n  cm.setCursor(2, 3);\n  helpers.doKeys('<C-v>', '2', 'k', 'h', 'C');\n  replacement = fillArray('world', 3);\n  cm.replaceSelections(replacement);\n  eq('1hworld\\n5hworld\\nahworld', cm.getValue());\n}, {value: '1234\\n5678\\nabcdefg'});\ntestVim('c_visual_block_replay', function(cm, vim, helpers) {\n  cm.setCursor(0, 1);\n  helpers.doKeys('<C-v>', '2', 'j', 'l', 'c');\n  var replacement = fillArray('fo', 3);\n  cm.replaceSelections(replacement);\n  eq('1fo4\\n5fo8\\nafodefg', cm.getValue());\n  helpers.doKeys('<Esc>');\n  cm.setCursor(0, 0);\n  helpers.doKeys('.');\n  eq('foo4\\nfoo8\\nfoodefg', cm.getValue());\n}, {value: '1234\\n5678\\nabcdefg'});\n\ntestVim('d_visual_block', function(cm, vim, helpers) {\n  cm.setCursor(0, 1);\n  helpers.doKeys('<C-v>', '2', 'j', 'l', 'l', 'l', 'd');\n  eq('1\\n5\\nafg', cm.getValue());\n}, {value: '1234\\n5678\\nabcdefg'});\ntestVim('D_visual_block', function(cm, vim, helpers) {\n  cm.setCursor(0, 1);\n  helpers.doKeys('<C-v>', '2', 'j', 'l', 'D');\n  eq('1\\n5\\na', cm.getValue());\n}, {value: '1234\\n5678\\nabcdefg'});\n\ntestVim('s_visual_block', function(cm, vim, helpers) {\n  cm.setCursor(0, 1);\n  helpers.doKeys('<C-v>', '2', 'j', 'l', 'l', 'l', 's');\n  var replacement = fillArray('hello{', 3);\n  cm.replaceSelections(replacement);\n  eq('1hello{\\n5hello{\\nahello{fg\\n', cm.getValue());\n  helpers.doKeys('<Esc>');\n  cm.setCursor(2, 3);\n  helpers.doKeys('<C-v>', '1', 'k', 'h', 'S');\n  replacement = fillArray('world', 1);\n  cm.replaceSelections(replacement);\n  eq('1hello{\\n  world\\n', cm.getValue());\n}, {value: '1234\\n5678\\nabcdefg\\n'});\n\n// Swapcase commands edit in place and do not modify registers.\ntestVim('g~w_repeat', function(cm, vim, helpers) {\n  // Assert that dw does delete newline if it should go to the next line, and\n  // that repeat works properly.\n  var curStart = makeCursor(0, 1);\n  cm.setCursor(curStart);\n  helpers.doKeys('g', '~', '2', 'w');\n  eq(' WORD1\\nWORD2', cm.getValue());\n  var register = helpers.getRegisterController().getRegister();\n  eq('', register.toString());\n  is(!register.linewise);\n  eqPos(curStart, cm.getCursor());\n}, { value: ' word1\\nword2' });\ntestVim('g~g~', function(cm, vim, helpers) {\n  var curStart = makeCursor(0, 3);\n  cm.setCursor(curStart);\n  var expectedLineCount = cm.lineCount();\n  var expectedValue = cm.getValue().toUpperCase();\n  helpers.doKeys('2', 'g', '~', '3', 'g', '~');\n  eq(expectedValue, cm.getValue());\n  var register = helpers.getRegisterController().getRegister();\n  eq('', register.toString());\n  is(!register.linewise);\n  eqPos(curStart, cm.getCursor());\n}, { value: ' word1\\nword2\\nword3\\nword4\\nword5\\nword6' });\ntestVim('gu_and_gU', function(cm, vim, helpers) {\n  var curStart = makeCursor(0, 7);\n  var value = cm.getValue();\n  cm.setCursor(curStart);\n  helpers.doKeys('2', 'g', 'U', 'w');\n  eq(cm.getValue(), 'wa wb xX WC wd');\n  eqPos(curStart, cm.getCursor());\n  helpers.doKeys('2', 'g', 'u', 'w');\n  eq(cm.getValue(), value);\n\n  helpers.doKeys('2', 'g', 'U', 'B');\n  eq(cm.getValue(), 'wa WB Xx wc wd');\n  eqPos(makeCursor(0, 3), cm.getCursor());\n\n  cm.setCursor(makeCursor(0, 4));\n  helpers.doKeys('g', 'u', 'i', 'w');\n  eq(cm.getValue(), 'wa wb Xx wc wd');\n  eqPos(makeCursor(0, 3), cm.getCursor());\n\n  // TODO: support gUgU guu\n  // eqPos(makeCursor(0, 0), cm.getCursor());\n\n  var register = helpers.getRegisterController().getRegister();\n  eq('', register.toString());\n  is(!register.linewise);\n}, { value: 'wa wb xx wc wd' });\ntestVim('visual_block_~', function(cm, vim, helpers) {\n  cm.setCursor(1, 1);\n  helpers.doKeys('<C-v>', 'l', 'l', 'j', '~');\n  helpers.assertCursorAt(1, 1);\n  eq('hello\\nwoRLd\\naBCDe', cm.getValue());\n  cm.setCursor(2, 0);\n  helpers.doKeys('v', 'l', 'l', '~');\n  helpers.assertCursorAt(2, 0);\n  eq('hello\\nwoRLd\\nAbcDe', cm.getValue());\n},{value: 'hello\\nwOrld\\nabcde' });\ntestVim('._swapCase_visualBlock', function(cm, vim, helpers) {\n  helpers.doKeys('<C-v>', 'j', 'j', 'l', '~');\n  cm.setCursor(0, 3);\n  helpers.doKeys('.');\n  eq('HelLO\\nWorLd\\nAbcdE', cm.getValue());\n},{value: 'hEllo\\nwOrlD\\naBcDe' });\ntestVim('._delete_visualBlock', function(cm, vim, helpers) {\n  helpers.doKeys('<C-v>', 'j', 'x');\n  eq('ive\\ne\\nsome\\nsugar', cm.getValue());\n  helpers.doKeys('.');\n  eq('ve\\n\\nsome\\nsugar', cm.getValue());\n  helpers.doKeys('j', 'j', '.');\n  eq('ve\\n\\nome\\nugar', cm.getValue());\n  helpers.doKeys('u', '<C-r>', '.');\n  eq('ve\\n\\nme\\ngar', cm.getValue());\n},{value: 'give\\nme\\nsome\\nsugar' });\ntestVim('>{motion}', function(cm, vim, helpers) {\n  cm.setCursor(1, 3);\n  var expectedLineCount = cm.lineCount();\n  var expectedValue = '   word1\\n  word2\\nword3 ';\n  helpers.doKeys('>', 'k');\n  eq(expectedValue, cm.getValue());\n  var register = helpers.getRegisterController().getRegister();\n  eq('', register.toString());\n  is(!register.linewise);\n  helpers.assertCursorAt(0, 3);\n}, { value: ' word1\\nword2\\nword3 ', indentUnit: 2 });\ntestVim('>>', function(cm, vim, helpers) {\n  cm.setCursor(0, 3);\n  var expectedLineCount = cm.lineCount();\n  var expectedValue = '   word1\\n  word2\\nword3 ';\n  helpers.doKeys('2', '>', '>');\n  eq(expectedValue, cm.getValue());\n  var register = helpers.getRegisterController().getRegister();\n  eq('', register.toString());\n  is(!register.linewise);\n  helpers.assertCursorAt(0, 3);\n}, { value: ' word1\\nword2\\nword3 ', indentUnit: 2 });\ntestVim('<{motion}', function(cm, vim, helpers) {\n  cm.setCursor(1, 3);\n  var expectedLineCount = cm.lineCount();\n  var expectedValue = ' word1\\nword2\\nword3 ';\n  helpers.doKeys('<', 'k');\n  eq(expectedValue, cm.getValue());\n  var register = helpers.getRegisterController().getRegister();\n  eq('', register.toString());\n  is(!register.linewise);\n  helpers.assertCursorAt(0, 1);\n}, { value: '   word1\\n  word2\\nword3 ', indentUnit: 2 });\ntestVim('<<', function(cm, vim, helpers) {\n  cm.setCursor(0, 3);\n  var expectedLineCount = cm.lineCount();\n  var expectedValue = ' word1\\nword2\\nword3 ';\n  helpers.doKeys('2', '<', '<');\n  eq(expectedValue, cm.getValue());\n  var register = helpers.getRegisterController().getRegister();\n  eq('', register.toString());\n  is(!register.linewise);\n  helpers.assertCursorAt(0, 1);\n}, { value: '   word1\\n  word2\\nword3 ', indentUnit: 2 });\n\n// Edit tests\nfunction testEdit(name, before, pos, edit, after) {\n  return testVim(name, function(cm, vim, helpers) {\n             var ch = before.search(pos)\n             var line = before.substring(0, ch).split('\\n').length - 1;\n             if (line) {\n               ch = before.substring(0, ch).split('\\n').pop().length;\n             }\n             cm.setCursor(line, ch);\n             helpers.doKeys.apply(this, edit.split(''));\n             eq(after, cm.getValue());\n           }, {value: before});\n}\n\n// These Delete tests effectively cover word-wise Change, Visual & Yank.\n// Tabs are used as differentiated whitespace to catch edge cases.\n// Normal word:\ntestEdit('diw_mid_spc', 'foo \\tbAr\\t baz', /A/, 'diw', 'foo \\t\\t baz');\ntestEdit('daw_mid_spc', 'foo \\tbAr\\t baz', /A/, 'daw', 'foo \\tbaz');\ntestEdit('diw_mid_punct', 'foo \\tbAr.\\t baz', /A/, 'diw', 'foo \\t.\\t baz');\ntestEdit('daw_mid_punct', 'foo \\tbAr.\\t baz', /A/, 'daw', 'foo.\\t baz');\ntestEdit('diw_mid_punct2', 'foo \\t,bAr.\\t baz', /A/, 'diw', 'foo \\t,.\\t baz');\ntestEdit('daw_mid_punct2', 'foo \\t,bAr.\\t baz', /A/, 'daw', 'foo \\t,.\\t baz');\ntestEdit('diw_start_spc', 'bAr \\tbaz', /A/, 'diw', ' \\tbaz');\ntestEdit('daw_start_spc', 'bAr \\tbaz', /A/, 'daw', 'baz');\ntestEdit('diw_start_punct', 'bAr. \\tbaz', /A/, 'diw', '. \\tbaz');\ntestEdit('daw_start_punct', 'bAr. \\tbaz', /A/, 'daw', '. \\tbaz');\ntestEdit('diw_end_spc', 'foo \\tbAr', /A/, 'diw', 'foo \\t');\ntestEdit('daw_end_spc', 'foo \\tbAr', /A/, 'daw', 'foo');\ntestEdit('diw_end_punct', 'foo \\tbAr.', /A/, 'diw', 'foo \\t.');\ntestEdit('daw_end_punct', 'foo \\tbAr.', /A/, 'daw', 'foo.');\n// Big word:\ntestEdit('diW_mid_spc', 'foo \\tbAr\\t baz', /A/, 'diW', 'foo \\t\\t baz');\ntestEdit('daW_mid_spc', 'foo \\tbAr\\t baz', /A/, 'daW', 'foo \\tbaz');\ntestEdit('diW_mid_punct', 'foo \\tbAr.\\t baz', /A/, 'diW', 'foo \\t\\t baz');\ntestEdit('daW_mid_punct', 'foo \\tbAr.\\t baz', /A/, 'daW', 'foo \\tbaz');\ntestEdit('diW_mid_punct2', 'foo \\t,bAr.\\t baz', /A/, 'diW', 'foo \\t\\t baz');\ntestEdit('daW_mid_punct2', 'foo \\t,bAr.\\t baz', /A/, 'daW', 'foo \\tbaz');\ntestEdit('diW_start_spc', 'bAr\\t baz', /A/, 'diW', '\\t baz');\ntestEdit('daW_start_spc', 'bAr\\t baz', /A/, 'daW', 'baz');\ntestEdit('diW_start_punct', 'bAr.\\t baz', /A/, 'diW', '\\t baz');\ntestEdit('daW_start_punct', 'bAr.\\t baz', /A/, 'daW', 'baz');\ntestEdit('diW_end_spc', 'foo \\tbAr', /A/, 'diW', 'foo \\t');\ntestEdit('daW_end_spc', 'foo \\tbAr', /A/, 'daW', 'foo');\ntestEdit('diW_end_punct', 'foo \\tbAr.', /A/, 'diW', 'foo \\t');\ntestEdit('daW_end_punct', 'foo \\tbAr.', /A/, 'daW', 'foo');\n// Deleting text objects\n//    Open and close on same line\ntestEdit('di(_open_spc', 'foo (bAr) baz', /\\(/, 'di(', 'foo () baz');\ntestEdit('di)_open_spc', 'foo (bAr) baz', /\\(/, 'di)', 'foo () baz');\ntestEdit('dib_open_spc', 'foo (bAr) baz', /\\(/, 'dib', 'foo () baz');\ntestEdit('da(_open_spc', 'foo (bAr) baz', /\\(/, 'da(', 'foo  baz');\ntestEdit('da)_open_spc', 'foo (bAr) baz', /\\(/, 'da)', 'foo  baz');\n\ntestEdit('di(_middle_spc', 'foo (bAr) baz', /A/, 'di(', 'foo () baz');\ntestEdit('di)_middle_spc', 'foo (bAr) baz', /A/, 'di)', 'foo () baz');\ntestEdit('da(_middle_spc', 'foo (bAr) baz', /A/, 'da(', 'foo  baz');\ntestEdit('da)_middle_spc', 'foo (bAr) baz', /A/, 'da)', 'foo  baz');\n\ntestEdit('di(_close_spc', 'foo (bAr) baz', /\\)/, 'di(', 'foo () baz');\ntestEdit('di)_close_spc', 'foo (bAr) baz', /\\)/, 'di)', 'foo () baz');\ntestEdit('da(_close_spc', 'foo (bAr) baz', /\\)/, 'da(', 'foo  baz');\ntestEdit('da)_close_spc', 'foo (bAr) baz', /\\)/, 'da)', 'foo  baz');\n\n//  delete around and inner b.\ntestEdit('dab_on_(_should_delete_around_()block', 'o( in(abc) )', /\\(a/, 'dab', 'o( in )');\n\n//  delete around and inner B.\ntestEdit('daB_on_{_should_delete_around_{}block', 'o{ in{abc} }', /{a/, 'daB', 'o{ in }');\ntestEdit('diB_on_{_should_delete_inner_{}block', 'o{ in{abc} }', /{a/, 'diB', 'o{ in{} }');\n\ntestEdit('da{_on_{_should_delete_inner_block', 'o{ in{abc} }', /{a/, 'da{', 'o{ in }');\ntestEdit('di[_on_(_should_not_delete', 'foo (bAr) baz', /\\(/, 'di[', 'foo (bAr) baz');\ntestEdit('di[_on_)_should_not_delete', 'foo (bAr) baz', /\\)/, 'di[', 'foo (bAr) baz');\ntestEdit('da[_on_(_should_not_delete', 'foo (bAr) baz', /\\(/, 'da[', 'foo (bAr) baz');\ntestEdit('da[_on_)_should_not_delete', 'foo (bAr) baz', /\\)/, 'da[', 'foo (bAr) baz');\ntestMotion('di(_outside_should_stay', ['d', 'i', '('], { line: 0, ch: 0}, { line: 0, ch: 0});\n\n//  Open and close on different lines, equally indented\ntestEdit('di{_middle_spc', 'a{\\n\\tbar\\n}b', /r/, 'di{', 'a{}b');\ntestEdit('di}_middle_spc', 'a{\\n\\tbar\\n}b', /r/, 'di}', 'a{}b');\ntestEdit('da{_middle_spc', 'a{\\n\\tbar\\n}b', /r/, 'da{', 'ab');\ntestEdit('da}_middle_spc', 'a{\\n\\tbar\\n}b', /r/, 'da}', 'ab');\ntestEdit('daB_middle_spc', 'a{\\n\\tbar\\n}b', /r/, 'daB', 'ab');\n\n// open and close on diff lines, open indented less than close\ntestEdit('di{_middle_spc', 'a{\\n\\tbar\\n\\t}b', /r/, 'di{', 'a{}b');\ntestEdit('di}_middle_spc', 'a{\\n\\tbar\\n\\t}b', /r/, 'di}', 'a{}b');\ntestEdit('da{_middle_spc', 'a{\\n\\tbar\\n\\t}b', /r/, 'da{', 'ab');\ntestEdit('da}_middle_spc', 'a{\\n\\tbar\\n\\t}b', /r/, 'da}', 'ab');\n\n// open and close on diff lines, open indented more than close\ntestEdit('di[_middle_spc', 'a\\t[\\n\\tbar\\n]b', /r/, 'di[', 'a\\t[]b');\ntestEdit('di]_middle_spc', 'a\\t[\\n\\tbar\\n]b', /r/, 'di]', 'a\\t[]b');\ntestEdit('da[_middle_spc', 'a\\t[\\n\\tbar\\n]b', /r/, 'da[', 'a\\tb');\ntestEdit('da]_middle_spc', 'a\\t[\\n\\tbar\\n]b', /r/, 'da]', 'a\\tb');\n\nfunction testSelection(name, before, pos, keys, sel) {\n  return testVim(name, function(cm, vim, helpers) {\n             var ch = before.search(pos)\n             var line = before.substring(0, ch).split('\\n').length - 1;\n             if (line) {\n               ch = before.substring(0, ch).split('\\n').pop().length;\n             }\n             cm.setCursor(line, ch);\n             helpers.doKeys.apply(this, keys.split(''));\n             eq(sel, cm.getSelection());\n           }, {value: before});\n}\ntestSelection('viw_middle_spc', 'foo \\tbAr\\t baz', /A/, 'viw', 'bAr');\ntestSelection('vaw_middle_spc', 'foo \\tbAr\\t baz', /A/, 'vaw', 'bAr\\t ');\ntestSelection('viw_middle_punct', 'foo \\tbAr,\\t baz', /A/, 'viw', 'bAr');\ntestSelection('vaW_middle_punct', 'foo \\tbAr,\\t baz', /A/, 'vaW', 'bAr,\\t ');\ntestSelection('viw_start_spc', 'foo \\tbAr\\t baz', /b/, 'viw', 'bAr');\ntestSelection('viw_end_spc', 'foo \\tbAr\\t baz', /r/, 'viw', 'bAr');\ntestSelection('viw_eol', 'foo \\tbAr', /r/, 'viw', 'bAr');\ntestSelection('vi{_middle_spc', 'a{\\n\\tbar\\n\\t}b', /r/, 'vi{', '\\n\\tbar\\n\\t');\ntestSelection('va{_middle_spc', 'a{\\n\\tbar\\n\\t}b', /r/, 'va{', '{\\n\\tbar\\n\\t}');\n\ntestVim('mouse_select', function(cm, vim, helpers) {\n  cm.setSelection(Pos(0, 2), Pos(0, 4), {origin: '*mouse'});\n  is(cm.state.vim.visualMode);\n  is(!cm.state.vim.visualLine);\n  is(!cm.state.vim.visualBlock);\n  helpers.doKeys('<Esc>');\n  is(!cm.somethingSelected());\n  helpers.doKeys('g', 'v');\n  eq('cd', cm.getSelection());\n}, {value: 'abcdef'});\n\n// Operator-motion tests\ntestVim('D', function(cm, vim, helpers) {\n  cm.setCursor(0, 3);\n  helpers.doKeys('D');\n  eq(' wo\\nword2\\n word3', cm.getValue());\n  var register = helpers.getRegisterController().getRegister();\n  eq('rd1', register.toString());\n  is(!register.linewise);\n  helpers.assertCursorAt(0, 2);\n}, { value: ' word1\\nword2\\n word3' });\ntestVim('C', function(cm, vim, helpers) {\n  var curStart = makeCursor(0, 3);\n  cm.setCursor(curStart);\n  helpers.doKeys('C');\n  eq(' wo\\nword2\\n word3', cm.getValue());\n  var register = helpers.getRegisterController().getRegister();\n  eq('rd1', register.toString());\n  is(!register.linewise);\n  eqPos(curStart, cm.getCursor());\n  eq('vim-insert', cm.getOption('keyMap'));\n}, { value: ' word1\\nword2\\n word3' });\ntestVim('Y', function(cm, vim, helpers) {\n  var curStart = makeCursor(0, 3);\n  cm.setCursor(curStart);\n  helpers.doKeys('Y');\n  eq(' word1\\nword2\\n word3', cm.getValue());\n  var register = helpers.getRegisterController().getRegister();\n  eq('rd1', register.toString());\n  is(!register.linewise);\n  helpers.assertCursorAt(0, 3);\n}, { value: ' word1\\nword2\\n word3' });\ntestVim('~', function(cm, vim, helpers) {\n  helpers.doKeys('3', '~');\n  eq('ABCdefg', cm.getValue());\n  helpers.assertCursorAt(0, 3);\n}, { value: 'abcdefg' });\n\n// Action tests\ntestVim('ctrl-a', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('<C-a>');\n  eq('-9', cm.getValue());\n  helpers.assertCursorAt(0, 1);\n  helpers.doKeys('2','<C-a>');\n  eq('-7', cm.getValue());\n}, {value: '-10'});\ntestVim('ctrl-x', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('<C-x>');\n  eq('-1', cm.getValue());\n  helpers.assertCursorAt(0, 1);\n  helpers.doKeys('2','<C-x>');\n  eq('-3', cm.getValue());\n}, {value: '0'});\ntestVim('<C-x>/<C-a> search forward', function(cm, vim, helpers) {\n  forEach(['<C-x>', '<C-a>'], function(key) {\n    cm.setCursor(0, 0);\n    helpers.doKeys(key);\n    helpers.assertCursorAt(0, 5);\n    helpers.doKeys('l');\n    helpers.doKeys(key);\n    helpers.assertCursorAt(0, 10);\n    cm.setCursor(0, 11);\n    helpers.doKeys(key);\n    helpers.assertCursorAt(0, 11);\n  });\n}, {value: '__jmp1 jmp2 jmp'});\ntestVim('a', function(cm, vim, helpers) {\n  cm.setCursor(0, 1);\n  helpers.doKeys('a');\n  helpers.assertCursorAt(0, 2);\n  eq('vim-insert', cm.getOption('keyMap'));\n});\ntestVim('a_eol', function(cm, vim, helpers) {\n  cm.setCursor(0, lines[0].length - 1);\n  helpers.doKeys('a');\n  helpers.assertCursorAt(0, lines[0].length);\n  eq('vim-insert', cm.getOption('keyMap'));\n});\ntestVim('A_endOfSelectedArea', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('v', 'j', 'l');\n  helpers.doKeys('A');\n  helpers.assertCursorAt(1, 2);\n  eq('vim-insert', cm.getOption('keyMap'));\n}, {value: 'foo\\nbar'});\ntestVim('i', function(cm, vim, helpers) {\n  cm.setCursor(0, 1);\n  helpers.doKeys('i');\n  helpers.assertCursorAt(0, 1);\n  eq('vim-insert', cm.getOption('keyMap'));\n});\ntestVim('i_repeat', function(cm, vim, helpers) {\n  helpers.doKeys('3', 'i');\n  cm.replaceRange('test', cm.getCursor());\n  helpers.doKeys('<Esc>');\n  eq('testtesttest', cm.getValue());\n  helpers.assertCursorAt(0, 11);\n}, { value: '' });\ntestVim('i_repeat_delete', function(cm, vim, helpers) {\n  cm.setCursor(0, 4);\n  helpers.doKeys('2', 'i');\n  cm.replaceRange('z', cm.getCursor());\n  helpers.doInsertModeKeys('Backspace', 'Backspace');\n  helpers.doKeys('<Esc>');\n  eq('abe', cm.getValue());\n  helpers.assertCursorAt(0, 1);\n}, { value: 'abcde' });\ntestVim('A', function(cm, vim, helpers) {\n  helpers.doKeys('A');\n  helpers.assertCursorAt(0, lines[0].length);\n  eq('vim-insert', cm.getOption('keyMap'));\n});\ntestVim('A_visual_block', function(cm, vim, helpers) {\n  cm.setCursor(0, 1);\n  helpers.doKeys('<C-v>', '2', 'j', 'l', 'l', 'A');\n  var replacement = new Array(cm.listSelections().length+1).join('hello ').split(' ');\n  replacement.pop();\n  cm.replaceSelections(replacement);\n  eq('testhello\\nmehello\\npleahellose', cm.getValue());\n  helpers.doKeys('<Esc>');\n  cm.setCursor(0, 0);\n  helpers.doKeys('.');\n  // TODO this doesn't work yet\n  // eq('teshellothello\\nme hello hello\\nplehelloahellose', cm.getValue());\n}, {value: 'test\\nme\\nplease'});\ntestVim('I', function(cm, vim, helpers) {\n  cm.setCursor(0, 4);\n  helpers.doKeys('I');\n  helpers.assertCursorAt(0, lines[0].textStart);\n  eq('vim-insert', cm.getOption('keyMap'));\n});\ntestVim('I_repeat', function(cm, vim, helpers) {\n  cm.setCursor(0, 1);\n  helpers.doKeys('3', 'I');\n  cm.replaceRange('test', cm.getCursor());\n  helpers.doKeys('<Esc>');\n  eq('testtesttestblah', cm.getValue());\n  helpers.assertCursorAt(0, 11);\n}, { value: 'blah' });\ntestVim('I_visual_block', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('<C-v>', '2', 'j', 'l', 'l', 'I');\n  var replacement = new Array(cm.listSelections().length+1).join('hello ').split(' ');\n  replacement.pop();\n  cm.replaceSelections(replacement);\n  eq('hellotest\\nhellome\\nhelloplease', cm.getValue());\n}, {value: 'test\\nme\\nplease'});\ntestVim('o', function(cm, vim, helpers) {\n  cm.setCursor(0, 4);\n  helpers.doKeys('o');\n  eq('word1\\n\\nword2', cm.getValue());\n  helpers.assertCursorAt(1, 0);\n  eq('vim-insert', cm.getOption('keyMap'));\n}, { value: 'word1\\nword2' });\ntestVim('o_repeat', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('3', 'o');\n  cm.replaceRange('test', cm.getCursor());\n  helpers.doKeys('<Esc>');\n  eq('\\ntest\\ntest\\ntest', cm.getValue());\n  helpers.assertCursorAt(3, 3);\n}, { value: '' });\ntestVim('O', function(cm, vim, helpers) {\n  cm.setCursor(0, 4);\n  helpers.doKeys('O');\n  eq('\\nword1\\nword2', cm.getValue());\n  helpers.assertCursorAt(0, 0);\n  eq('vim-insert', cm.getOption('keyMap'));\n}, { value: 'word1\\nword2' });\ntestVim('J', function(cm, vim, helpers) {\n  cm.setCursor(0, 4);\n  helpers.doKeys('J');\n  var expectedValue = 'word1  word2\\nword3\\n word4';\n  eq(expectedValue, cm.getValue());\n  helpers.assertCursorAt(0, expectedValue.indexOf('word2') - 1);\n}, { value: 'word1 \\n    word2\\nword3\\n word4' });\ntestVim('J_repeat', function(cm, vim, helpers) {\n  cm.setCursor(0, 4);\n  helpers.doKeys('3', 'J');\n  var expectedValue = 'word1  word2 word3\\n word4';\n  eq(expectedValue, cm.getValue());\n  helpers.assertCursorAt(0, expectedValue.indexOf('word3') - 1);\n}, { value: 'word1 \\n    word2\\nword3\\n word4' });\ntestVim('p', function(cm, vim, helpers) {\n  cm.setCursor(0, 1);\n  helpers.getRegisterController().pushText('\"', 'yank', 'abc\\ndef', false);\n  helpers.doKeys('p');\n  eq('__abc\\ndef_', cm.getValue());\n  helpers.assertCursorAt(1, 2);\n}, { value: '___' });\ntestVim('p_register', function(cm, vim, helpers) {\n  cm.setCursor(0, 1);\n  helpers.getRegisterController().getRegister('a').setText('abc\\ndef', false);\n  helpers.doKeys('\"', 'a', 'p');\n  eq('__abc\\ndef_', cm.getValue());\n  helpers.assertCursorAt(1, 2);\n}, { value: '___' });\ntestVim('p_wrong_register', function(cm, vim, helpers) {\n  cm.setCursor(0, 1);\n  helpers.getRegisterController().getRegister('a').setText('abc\\ndef', false);\n  helpers.doKeys('p');\n  eq('___', cm.getValue());\n  helpers.assertCursorAt(0, 1);\n}, { value: '___' });\ntestVim('p_line', function(cm, vim, helpers) {\n  cm.setCursor(0, 1);\n  helpers.getRegisterController().pushText('\"', 'yank', '  a\\nd\\n', true);\n  helpers.doKeys('2', 'p');\n  eq('___\\n  a\\nd\\n  a\\nd', cm.getValue());\n  helpers.assertCursorAt(1, 2);\n}, { value: '___' });\ntestVim('p_lastline', function(cm, vim, helpers) {\n  cm.setCursor(0, 1);\n  helpers.getRegisterController().pushText('\"', 'yank', '  a\\nd', true);\n  helpers.doKeys('2', 'p');\n  eq('___\\n  a\\nd\\n  a\\nd', cm.getValue());\n  helpers.assertCursorAt(1, 2);\n}, { value: '___' });\ntestVim(']p_first_indent_is_smaller', function(cm, vim, helpers) {\n  helpers.getRegisterController().pushText('\"', 'yank', '  abc\\n    def\\n', true);\n  helpers.doKeys(']', 'p');\n  eq('  ___\\n  abc\\n    def', cm.getValue());\n}, { value: '  ___' });\ntestVim(']p_first_indent_is_larger', function(cm, vim, helpers) {\n  helpers.getRegisterController().pushText('\"', 'yank', '    abc\\n  def\\n', true);\n  helpers.doKeys(']', 'p');\n  eq('  ___\\n  abc\\ndef', cm.getValue());\n}, { value: '  ___' });\ntestVim(']p_with_tab_indents', function(cm, vim, helpers) {\n  helpers.getRegisterController().pushText('\"', 'yank', '\\t\\tabc\\n\\t\\t\\tdef\\n', true);\n  helpers.doKeys(']', 'p');\n  eq('\\t___\\n\\tabc\\n\\t\\tdef', cm.getValue());\n}, { value: '\\t___', indentWithTabs: true});\ntestVim(']p_with_spaces_translated_to_tabs', function(cm, vim, helpers) {\n  helpers.getRegisterController().pushText('\"', 'yank', '  abc\\n    def\\n', true);\n  helpers.doKeys(']', 'p');\n  eq('\\t___\\n\\tabc\\n\\t\\tdef', cm.getValue());\n}, { value: '\\t___', indentWithTabs: true, tabSize: 2 });\ntestVim('[p', function(cm, vim, helpers) {\n  helpers.getRegisterController().pushText('\"', 'yank', '  abc\\n    def\\n', true);\n  helpers.doKeys('[', 'p');\n  eq('  abc\\n    def\\n  ___', cm.getValue());\n}, { value: '  ___' });\ntestVim('P', function(cm, vim, helpers) {\n  cm.setCursor(0, 1);\n  helpers.getRegisterController().pushText('\"', 'yank', 'abc\\ndef', false);\n  helpers.doKeys('P');\n  eq('_abc\\ndef__', cm.getValue());\n  helpers.assertCursorAt(1, 3);\n}, { value: '___' });\ntestVim('P_line', function(cm, vim, helpers) {\n  cm.setCursor(0, 1);\n  helpers.getRegisterController().pushText('\"', 'yank', '  a\\nd\\n', true);\n  helpers.doKeys('2', 'P');\n  eq('  a\\nd\\n  a\\nd\\n___', cm.getValue());\n  helpers.assertCursorAt(0, 2);\n}, { value: '___' });\ntestVim('r', function(cm, vim, helpers) {\n  cm.setCursor(0, 1);\n  helpers.doKeys('3', 'r', 'u');\n  eq('wuuuet\\nanother', cm.getValue(),'3r failed');\n  helpers.assertCursorAt(0, 3);\n  cm.setCursor(0, 4);\n  helpers.doKeys('v', 'j', 'h', 'r', '<Space>');\n  eq('wuuu  \\n    her', cm.getValue(),'Replacing selection by space-characters failed');\n}, { value: 'wordet\\nanother' });\ntestVim('r_visual_block', function(cm, vim, helpers) {\n  cm.setCursor(2, 3);\n  helpers.doKeys('<C-v>', 'k', 'k', 'h', 'h', 'r', 'l');\n  eq('1lll\\n5lll\\nalllefg', cm.getValue());\n  helpers.doKeys('<C-v>', 'l', 'j', 'r', '<Space>');\n  eq('1  l\\n5  l\\nalllefg', cm.getValue());\n  cm.setCursor(2, 0);\n  helpers.doKeys('o');\n  helpers.doKeys('<Esc>');\n  cm.replaceRange('\\t\\t', cm.getCursor());\n  helpers.doKeys('<C-v>', 'h', 'h', 'r', 'r');\n  eq('1  l\\n5  l\\nalllefg\\nrrrrrrrr', cm.getValue());\n}, {value: '1234\\n5678\\nabcdefg'});\ntestVim('R', function(cm, vim, helpers) {\n  cm.setCursor(0, 1);\n  helpers.doKeys('R');\n  helpers.assertCursorAt(0, 1);\n  eq('vim-replace', cm.getOption('keyMap'));\n  is(cm.state.overwrite, 'Setting overwrite state failed');\n});\ntestVim('mark', function(cm, vim, helpers) {\n  cm.setCursor(2, 2);\n  helpers.doKeys('m', 't');\n  cm.setCursor(0, 0);\n  helpers.doKeys('`', 't');\n  helpers.assertCursorAt(2, 2);\n  cm.setCursor(2, 0);\n  cm.replaceRange('   h', cm.getCursor());\n  cm.setCursor(0, 0);\n  helpers.doKeys('\\'', 't');\n  helpers.assertCursorAt(2, 3);\n});\ntestVim('jumpToMark_next', function(cm, vim, helpers) {\n  cm.setCursor(2, 2);\n  helpers.doKeys('m', 't');\n  cm.setCursor(0, 0);\n  helpers.doKeys(']', '`');\n  helpers.assertCursorAt(2, 2);\n  cm.setCursor(0, 0);\n  helpers.doKeys(']', '\\'');\n  helpers.assertCursorAt(2, 0);\n});\ntestVim('jumpToMark_next_repeat', function(cm, vim, helpers) {\n  cm.setCursor(2, 2);\n  helpers.doKeys('m', 'a');\n  cm.setCursor(3, 2);\n  helpers.doKeys('m', 'b');\n  cm.setCursor(4, 2);\n  helpers.doKeys('m', 'c');\n  cm.setCursor(0, 0);\n  helpers.doKeys('2', ']', '`');\n  helpers.assertCursorAt(3, 2);\n  cm.setCursor(0, 0);\n  helpers.doKeys('2', ']', '\\'');\n  helpers.assertCursorAt(3, 1);\n});\ntestVim('jumpToMark_next_sameline', function(cm, vim, helpers) {\n  cm.setCursor(2, 0);\n  helpers.doKeys('m', 'a');\n  cm.setCursor(2, 4);\n  helpers.doKeys('m', 'b');\n  cm.setCursor(2, 2);\n  helpers.doKeys(']', '`');\n  helpers.assertCursorAt(2, 4);\n});\ntestVim('jumpToMark_next_onlyprev', function(cm, vim, helpers) {\n  cm.setCursor(2, 0);\n  helpers.doKeys('m', 'a');\n  cm.setCursor(4, 0);\n  helpers.doKeys(']', '`');\n  helpers.assertCursorAt(4, 0);\n});\ntestVim('jumpToMark_next_nomark', function(cm, vim, helpers) {\n  cm.setCursor(2, 2);\n  helpers.doKeys(']', '`');\n  helpers.assertCursorAt(2, 2);\n  helpers.doKeys(']', '\\'');\n  helpers.assertCursorAt(2, 0);\n});\ntestVim('jumpToMark_next_linewise_over', function(cm, vim, helpers) {\n  cm.setCursor(2, 2);\n  helpers.doKeys('m', 'a');\n  cm.setCursor(3, 4);\n  helpers.doKeys('m', 'b');\n  cm.setCursor(2, 1);\n  helpers.doKeys(']', '\\'');\n  helpers.assertCursorAt(3, 1);\n});\ntestVim('jumpToMark_next_action', function(cm, vim, helpers) {\n  cm.setCursor(2, 2);\n  helpers.doKeys('m', 't');\n  cm.setCursor(0, 0);\n  helpers.doKeys('d', ']', '`');\n  helpers.assertCursorAt(0, 0);\n  var actual = cm.getLine(0);\n  var expected = 'pop pop 0 1 2 3 4';\n  eq(actual, expected, \"Deleting while jumping to the next mark failed.\");\n});\ntestVim('jumpToMark_next_line_action', function(cm, vim, helpers) {\n  cm.setCursor(2, 2);\n  helpers.doKeys('m', 't');\n  cm.setCursor(0, 0);\n  helpers.doKeys('d', ']', '\\'');\n  helpers.assertCursorAt(0, 1);\n  var actual = cm.getLine(0);\n  var expected = ' (a) [b] {c} '\n  eq(actual, expected, \"Deleting while jumping to the next mark line failed.\");\n});\ntestVim('jumpToMark_prev', function(cm, vim, helpers) {\n  cm.setCursor(2, 2);\n  helpers.doKeys('m', 't');\n  cm.setCursor(4, 0);\n  helpers.doKeys('[', '`');\n  helpers.assertCursorAt(2, 2);\n  cm.setCursor(4, 0);\n  helpers.doKeys('[', '\\'');\n  helpers.assertCursorAt(2, 0);\n});\ntestVim('jumpToMark_prev_repeat', function(cm, vim, helpers) {\n  cm.setCursor(2, 2);\n  helpers.doKeys('m', 'a');\n  cm.setCursor(3, 2);\n  helpers.doKeys('m', 'b');\n  cm.setCursor(4, 2);\n  helpers.doKeys('m', 'c');\n  cm.setCursor(5, 0);\n  helpers.doKeys('2', '[', '`');\n  helpers.assertCursorAt(3, 2);\n  cm.setCursor(5, 0);\n  helpers.doKeys('2', '[', '\\'');\n  helpers.assertCursorAt(3, 1);\n});\ntestVim('jumpToMark_prev_sameline', function(cm, vim, helpers) {\n  cm.setCursor(2, 0);\n  helpers.doKeys('m', 'a');\n  cm.setCursor(2, 4);\n  helpers.doKeys('m', 'b');\n  cm.setCursor(2, 2);\n  helpers.doKeys('[', '`');\n  helpers.assertCursorAt(2, 0);\n});\ntestVim('jumpToMark_prev_onlynext', function(cm, vim, helpers) {\n  cm.setCursor(4, 4);\n  helpers.doKeys('m', 'a');\n  cm.setCursor(2, 0);\n  helpers.doKeys('[', '`');\n  helpers.assertCursorAt(2, 0);\n});\ntestVim('jumpToMark_prev_nomark', function(cm, vim, helpers) {\n  cm.setCursor(2, 2);\n  helpers.doKeys('[', '`');\n  helpers.assertCursorAt(2, 2);\n  helpers.doKeys('[', '\\'');\n  helpers.assertCursorAt(2, 0);\n});\ntestVim('jumpToMark_prev_linewise_over', function(cm, vim, helpers) {\n  cm.setCursor(2, 2);\n  helpers.doKeys('m', 'a');\n  cm.setCursor(3, 4);\n  helpers.doKeys('m', 'b');\n  cm.setCursor(3, 6);\n  helpers.doKeys('[', '\\'');\n  helpers.assertCursorAt(2, 0);\n});\ntestVim('delmark_single', function(cm, vim, helpers) {\n  cm.setCursor(1, 2);\n  helpers.doKeys('m', 't');\n  helpers.doEx('delmarks t');\n  cm.setCursor(0, 0);\n  helpers.doKeys('`', 't');\n  helpers.assertCursorAt(0, 0);\n});\ntestVim('delmark_range', function(cm, vim, helpers) {\n  cm.setCursor(1, 2);\n  helpers.doKeys('m', 'a');\n  cm.setCursor(2, 2);\n  helpers.doKeys('m', 'b');\n  cm.setCursor(3, 2);\n  helpers.doKeys('m', 'c');\n  cm.setCursor(4, 2);\n  helpers.doKeys('m', 'd');\n  cm.setCursor(5, 2);\n  helpers.doKeys('m', 'e');\n  helpers.doEx('delmarks b-d');\n  cm.setCursor(0, 0);\n  helpers.doKeys('`', 'a');\n  helpers.assertCursorAt(1, 2);\n  helpers.doKeys('`', 'b');\n  helpers.assertCursorAt(1, 2);\n  helpers.doKeys('`', 'c');\n  helpers.assertCursorAt(1, 2);\n  helpers.doKeys('`', 'd');\n  helpers.assertCursorAt(1, 2);\n  helpers.doKeys('`', 'e');\n  helpers.assertCursorAt(5, 2);\n});\ntestVim('delmark_multi', function(cm, vim, helpers) {\n  cm.setCursor(1, 2);\n  helpers.doKeys('m', 'a');\n  cm.setCursor(2, 2);\n  helpers.doKeys('m', 'b');\n  cm.setCursor(3, 2);\n  helpers.doKeys('m', 'c');\n  cm.setCursor(4, 2);\n  helpers.doKeys('m', 'd');\n  cm.setCursor(5, 2);\n  helpers.doKeys('m', 'e');\n  helpers.doEx('delmarks bcd');\n  cm.setCursor(0, 0);\n  helpers.doKeys('`', 'a');\n  helpers.assertCursorAt(1, 2);\n  helpers.doKeys('`', 'b');\n  helpers.assertCursorAt(1, 2);\n  helpers.doKeys('`', 'c');\n  helpers.assertCursorAt(1, 2);\n  helpers.doKeys('`', 'd');\n  helpers.assertCursorAt(1, 2);\n  helpers.doKeys('`', 'e');\n  helpers.assertCursorAt(5, 2);\n});\ntestVim('delmark_multi_space', function(cm, vim, helpers) {\n  cm.setCursor(1, 2);\n  helpers.doKeys('m', 'a');\n  cm.setCursor(2, 2);\n  helpers.doKeys('m', 'b');\n  cm.setCursor(3, 2);\n  helpers.doKeys('m', 'c');\n  cm.setCursor(4, 2);\n  helpers.doKeys('m', 'd');\n  cm.setCursor(5, 2);\n  helpers.doKeys('m', 'e');\n  helpers.doEx('delmarks b c d');\n  cm.setCursor(0, 0);\n  helpers.doKeys('`', 'a');\n  helpers.assertCursorAt(1, 2);\n  helpers.doKeys('`', 'b');\n  helpers.assertCursorAt(1, 2);\n  helpers.doKeys('`', 'c');\n  helpers.assertCursorAt(1, 2);\n  helpers.doKeys('`', 'd');\n  helpers.assertCursorAt(1, 2);\n  helpers.doKeys('`', 'e');\n  helpers.assertCursorAt(5, 2);\n});\ntestVim('delmark_all', function(cm, vim, helpers) {\n  cm.setCursor(1, 2);\n  helpers.doKeys('m', 'a');\n  cm.setCursor(2, 2);\n  helpers.doKeys('m', 'b');\n  cm.setCursor(3, 2);\n  helpers.doKeys('m', 'c');\n  cm.setCursor(4, 2);\n  helpers.doKeys('m', 'd');\n  cm.setCursor(5, 2);\n  helpers.doKeys('m', 'e');\n  helpers.doEx('delmarks a b-de');\n  cm.setCursor(0, 0);\n  helpers.doKeys('`', 'a');\n  helpers.assertCursorAt(0, 0);\n  helpers.doKeys('`', 'b');\n  helpers.assertCursorAt(0, 0);\n  helpers.doKeys('`', 'c');\n  helpers.assertCursorAt(0, 0);\n  helpers.doKeys('`', 'd');\n  helpers.assertCursorAt(0, 0);\n  helpers.doKeys('`', 'e');\n  helpers.assertCursorAt(0, 0);\n});\ntestVim('visual', function(cm, vim, helpers) {\n  helpers.doKeys('l', 'v', 'l', 'l');\n  helpers.assertCursorAt(0, 4);\n  eqPos(makeCursor(0, 1), cm.getCursor('anchor'));\n  helpers.doKeys('d');\n  eq('15', cm.getValue());\n}, { value: '12345' });\ntestVim('visual_yank', function(cm, vim, helpers) {\n  helpers.doKeys('v', '3', 'l', 'y');\n  helpers.assertCursorAt(0, 0);\n  helpers.doKeys('p');\n  eq('aa te test for yank', cm.getValue());\n}, { value: 'a test for yank' })\ntestVim('visual_w', function(cm, vim, helpers) {\n  helpers.doKeys('v', 'w');\n  eq(cm.getSelection(), 'motion t');\n}, { value: 'motion test'});\ntestVim('visual_initial_selection', function(cm, vim, helpers) {\n  cm.setCursor(0, 1);\n  helpers.doKeys('v');\n  cm.getSelection('n');\n}, { value: 'init'});\ntestVim('visual_crossover_left', function(cm, vim, helpers) {\n  cm.setCursor(0, 2);\n  helpers.doKeys('v', 'l', 'h', 'h');\n  cm.getSelection('ro');\n}, { value: 'cross'});\ntestVim('visual_crossover_left', function(cm, vim, helpers) {\n  cm.setCursor(0, 2);\n  helpers.doKeys('v', 'h', 'l', 'l');\n  cm.getSelection('os');\n}, { value: 'cross'});\ntestVim('visual_crossover_up', function(cm, vim, helpers) {\n  cm.setCursor(3, 2);\n  helpers.doKeys('v', 'j', 'k', 'k');\n  eqPos(Pos(2, 2), cm.getCursor('head'));\n  eqPos(Pos(3, 3), cm.getCursor('anchor'));\n  helpers.doKeys('k');\n  eqPos(Pos(1, 2), cm.getCursor('head'));\n  eqPos(Pos(3, 3), cm.getCursor('anchor'));\n}, { value: 'cross\\ncross\\ncross\\ncross\\ncross\\n'});\ntestVim('visual_crossover_down', function(cm, vim, helpers) {\n  cm.setCursor(1, 2);\n  helpers.doKeys('v', 'k', 'j', 'j');\n  eqPos(Pos(2, 3), cm.getCursor('head'));\n  eqPos(Pos(1, 2), cm.getCursor('anchor'));\n  helpers.doKeys('j');\n  eqPos(Pos(3, 3), cm.getCursor('head'));\n  eqPos(Pos(1, 2), cm.getCursor('anchor'));\n}, { value: 'cross\\ncross\\ncross\\ncross\\ncross\\n'});\ntestVim('visual_exit', function(cm, vim, helpers) {\n  helpers.doKeys('<C-v>', 'l', 'j', 'j', '<Esc>');\n  eqPos(cm.getCursor('anchor'), cm.getCursor('head'));\n  eq(vim.visualMode, false);\n}, { value: 'hello\\nworld\\nfoo' });\ntestVim('visual_line', function(cm, vim, helpers) {\n  helpers.doKeys('l', 'V', 'l', 'j', 'j', 'd');\n  eq(' 4\\n 5', cm.getValue());\n}, { value: ' 1\\n 2\\n 3\\n 4\\n 5' });\ntestVim('visual_block_move_to_eol', function(cm, vim, helpers) {\n  // moveToEol should move all block cursors to end of line\n  cm.setCursor(0, 0);\n  helpers.doKeys('<C-v>', 'G', '$');\n  var selections = cm.getSelections().join();\n  eq('123,45,6', selections);\n  // Checks that with cursor at Infinity, finding words backwards still works.\n  helpers.doKeys('2', 'k', 'b');\n  selections = cm.getSelections().join();\n  eq('1', selections);\n}, {value: '123\\n45\\n6'});\ntestVim('visual_block_different_line_lengths', function(cm, vim, helpers) {\n  // test the block selection with lines of different length\n  // i.e. extending the selection\n  // till the end of the longest line.\n  helpers.doKeys('<C-v>', 'l', 'j', 'j', '6', 'l', 'd');\n  helpers.doKeys('d', 'd', 'd', 'd');\n  eq('', cm.getValue());\n}, {value: '1234\\n5678\\nabcdefg'});\ntestVim('visual_block_truncate_on_short_line', function(cm, vim, helpers) {\n  // check for left side selection in case\n  // of moving up to a shorter line.\n  cm.replaceRange('', cm.getCursor());\n  cm.setCursor(3, 4);\n  helpers.doKeys('<C-v>', 'l', 'k', 'k', 'd');\n  eq('hello world\\n{\\ntis\\nsa!', cm.getValue());\n}, {value: 'hello world\\n{\\nthis is\\nsparta!'});\ntestVim('visual_block_corners', function(cm, vim, helpers) {\n  cm.setCursor(1, 2);\n  helpers.doKeys('<C-v>', '2', 'l', 'k');\n  // circle around the anchor\n  // and check the selections\n  var selections = cm.getSelections();\n  eq('345891', selections.join(''));\n  helpers.doKeys('4', 'h');\n  selections = cm.getSelections();\n  eq('123678', selections.join(''));\n  helpers.doKeys('j', 'j');\n  selections = cm.getSelections();\n  eq('678abc', selections.join(''));\n  helpers.doKeys('4', 'l');\n  selections = cm.getSelections();\n  eq('891cde', selections.join(''));\n}, {value: '12345\\n67891\\nabcde'});\ntestVim('visual_block_mode_switch', function(cm, vim, helpers) {\n  // switch between visual modes\n  cm.setCursor(1, 1);\n  // blockwise to characterwise visual\n  helpers.doKeys('<C-v>', 'j', 'l', 'v');\n  var selections = cm.getSelections();\n  eq('7891\\nabc', selections.join(''));\n  // characterwise to blockwise\n  helpers.doKeys('<C-v>');\n  selections = cm.getSelections();\n  eq('78bc', selections.join(''));\n  // blockwise to linewise visual\n  helpers.doKeys('V');\n  selections = cm.getSelections();\n  eq('67891\\nabcde', selections.join(''));\n}, {value: '12345\\n67891\\nabcde'});\ntestVim('visual_block_crossing_short_line', function(cm, vim, helpers) {\n  // visual block with long and short lines\n  cm.setCursor(0, 3);\n  helpers.doKeys('<C-v>', 'j', 'j', 'j');\n  var selections = cm.getSelections().join();\n  eq('4,,d,b', selections);\n  helpers.doKeys('3', 'k');\n  selections = cm.getSelections().join();\n  eq('4', selections);\n  helpers.doKeys('5', 'j', 'k');\n  selections = cm.getSelections().join(\"\");\n  eq(10, selections.length);\n}, {value: '123456\\n78\\nabcdefg\\nfoobar\\n}\\n'});\ntestVim('visual_block_curPos_on_exit', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('<C-v>', '3' , 'l', '<Esc>');\n  eqPos(makeCursor(0, 3), cm.getCursor());\n  helpers.doKeys('h', '<C-v>', '2' , 'j' ,'3' , 'l');\n  eq(cm.getSelections().join(), \"3456,,cdef\");\n  helpers.doKeys('4' , 'h');\n  eq(cm.getSelections().join(), \"23,8,bc\");\n  helpers.doKeys('2' , 'l');\n  eq(cm.getSelections().join(), \"34,,cd\");\n}, {value: '123456\\n78\\nabcdefg\\nfoobar'});\n\ntestVim('visual_marks', function(cm, vim, helpers) {\n  helpers.doKeys('l', 'v', 'l', 'l', 'j', 'j', 'v');\n  // Test visual mode marks\n  cm.setCursor(2, 1);\n  helpers.doKeys('\\'', '<');\n  helpers.assertCursorAt(0, 1);\n  helpers.doKeys('\\'', '>');\n  helpers.assertCursorAt(2, 0);\n});\ntestVim('visual_join', function(cm, vim, helpers) {\n  helpers.doKeys('l', 'V', 'l', 'j', 'j', 'J');\n  eq(' 1 2 3\\n 4\\n 5', cm.getValue());\n  is(!vim.visualMode);\n}, { value: ' 1\\n 2\\n 3\\n 4\\n 5' });\ntestVim('visual_join_2', function(cm, vim, helpers) {\n  helpers.doKeys('G', 'V', 'g', 'g', 'J');\n  eq('1 2 3 4 5 6 ', cm.getValue());\n  is(!vim.visualMode);\n}, { value: '1\\n2\\n3\\n4\\n5\\n6\\n'});\ntestVim('visual_blank', function(cm, vim, helpers) {\n  helpers.doKeys('v', 'k');\n  eq(vim.visualMode, true);\n}, { value: '\\n' });\ntestVim('reselect_visual', function(cm, vim, helpers) {\n  helpers.doKeys('l', 'v', 'l', 'l', 'l', 'y', 'g', 'v');\n  helpers.assertCursorAt(0, 5);\n  eqPos(makeCursor(0, 1), cm.getCursor('anchor'));\n  helpers.doKeys('v');\n  cm.setCursor(1, 0);\n  helpers.doKeys('v', 'l', 'l', 'p');\n  eq('123456\\n2345\\nbar', cm.getValue());\n  cm.setCursor(0, 0);\n  helpers.doKeys('g', 'v');\n  // here the fake cursor is at (1, 3)\n  helpers.assertCursorAt(1, 4);\n  eqPos(makeCursor(1, 0), cm.getCursor('anchor'));\n  helpers.doKeys('v');\n  cm.setCursor(2, 0);\n  helpers.doKeys('v', 'l', 'l', 'g', 'v');\n  helpers.assertCursorAt(1, 4);\n  eqPos(makeCursor(1, 0), cm.getCursor('anchor'));\n  helpers.doKeys('g', 'v');\n  helpers.assertCursorAt(2, 3);\n  eqPos(makeCursor(2, 0), cm.getCursor('anchor'));\n  eq('123456\\n2345\\nbar', cm.getValue());\n}, { value: '123456\\nfoo\\nbar' });\ntestVim('reselect_visual_line', function(cm, vim, helpers) {\n  helpers.doKeys('l', 'V', 'j', 'j', 'V', 'g', 'v', 'd');\n  eq('foo\\nand\\nbar', cm.getValue());\n  cm.setCursor(1, 0);\n  helpers.doKeys('V', 'y', 'j');\n  helpers.doKeys('V', 'p' , 'g', 'v', 'd');\n  eq('foo\\nand', cm.getValue());\n}, { value: 'hello\\nthis\\nis\\nfoo\\nand\\nbar' });\ntestVim('reselect_visual_block', function(cm, vim, helpers) {\n  cm.setCursor(1, 2);\n  helpers.doKeys('<C-v>', 'k', 'h', '<C-v>');\n  cm.setCursor(2, 1);\n  helpers.doKeys('v', 'l', 'g', 'v');\n  eqPos(Pos(1, 2), vim.sel.anchor);\n  eqPos(Pos(0, 1), vim.sel.head);\n  // Ensure selection is done with visual block mode rather than one\n  // continuous range.\n  eq(cm.getSelections().join(''), '23oo')\n  helpers.doKeys('g', 'v');\n  eqPos(Pos(2, 1), vim.sel.anchor);\n  eqPos(Pos(2, 2), vim.sel.head);\n  helpers.doKeys('<Esc>');\n  // Ensure selection of deleted range\n  cm.setCursor(1, 1);\n  helpers.doKeys('v', '<C-v>', 'j', 'd', 'g', 'v');\n  eq(cm.getSelections().join(''), 'or');\n}, { value: '123456\\nfoo\\nbar' });\ntestVim('s_normal', function(cm, vim, helpers) {\n  cm.setCursor(0, 1);\n  helpers.doKeys('s');\n  helpers.doKeys('<Esc>');\n  eq('ac', cm.getValue());\n}, { value: 'abc'});\ntestVim('s_visual', function(cm, vim, helpers) {\n  cm.setCursor(0, 1);\n  helpers.doKeys('v', 's');\n  helpers.doKeys('<Esc>');\n  helpers.assertCursorAt(0, 0);\n  eq('ac', cm.getValue());\n}, { value: 'abc'});\ntestVim('o_visual', function(cm, vim, helpers) {\n  cm.setCursor(0,0);\n  helpers.doKeys('v','l','l','l','o');\n  helpers.assertCursorAt(0,0);\n  helpers.doKeys('v','v','j','j','j','o');\n  helpers.assertCursorAt(0,0);\n  helpers.doKeys('O');\n  helpers.doKeys('l','l')\n  helpers.assertCursorAt(3, 3);\n  helpers.doKeys('d');\n  eq('p',cm.getValue());\n}, { value: 'abcd\\nefgh\\nijkl\\nmnop'});\ntestVim('o_visual_block', function(cm, vim, helpers) {\n  cm.setCursor(0, 1);\n  helpers.doKeys('<C-v>','3','j','l','l', 'o');\n  eqPos(Pos(3, 3), vim.sel.anchor);\n  eqPos(Pos(0, 1), vim.sel.head);\n  helpers.doKeys('O');\n  eqPos(Pos(3, 1), vim.sel.anchor);\n  eqPos(Pos(0, 3), vim.sel.head);\n  helpers.doKeys('o');\n  eqPos(Pos(0, 3), vim.sel.anchor);\n  eqPos(Pos(3, 1), vim.sel.head);\n}, { value: 'abcd\\nefgh\\nijkl\\nmnop'});\ntestVim('changeCase_visual', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('v', 'l', 'l');\n  helpers.doKeys('U');\n  helpers.assertCursorAt(0, 0);\n  helpers.doKeys('v', 'l', 'l');\n  helpers.doKeys('u');\n  helpers.assertCursorAt(0, 0);\n  helpers.doKeys('l', 'l', 'l', '.');\n  helpers.assertCursorAt(0, 3);\n  cm.setCursor(0, 0);\n  helpers.doKeys('q', 'a', 'v', 'j', 'U', 'q');\n  helpers.assertCursorAt(0, 0);\n  helpers.doKeys('j', '@', 'a');\n  helpers.assertCursorAt(1, 0);\n  cm.setCursor(3, 0);\n  helpers.doKeys('V', 'U', 'j', '.');\n  eq('ABCDEF\\nGHIJKL\\nMnopq\\nSHORT LINE\\nLONG LINE OF TEXT', cm.getValue());\n}, { value: 'abcdef\\nghijkl\\nmnopq\\nshort line\\nlong line of text'});\ntestVim('changeCase_visual_block', function(cm, vim, helpers) {\n  cm.setCursor(2, 1);\n  helpers.doKeys('<C-v>', 'k', 'k', 'h', 'U');\n  eq('ABcdef\\nGHijkl\\nMNopq\\nfoo', cm.getValue());\n  cm.setCursor(0, 2);\n  helpers.doKeys('.');\n  eq('ABCDef\\nGHIJkl\\nMNOPq\\nfoo', cm.getValue());\n  // check when last line is shorter.\n  cm.setCursor(2, 2);\n  helpers.doKeys('.');\n  eq('ABCDef\\nGHIJkl\\nMNOPq\\nfoO', cm.getValue());\n}, { value: 'abcdef\\nghijkl\\nmnopq\\nfoo'});\ntestVim('visual_paste', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('v', 'l', 'l', 'y');\n  helpers.assertCursorAt(0, 0);\n  helpers.doKeys('3', 'l', 'j', 'v', 'l', 'p');\n  helpers.assertCursorAt(1, 5);\n  eq('this is a\\nunithitest for visual paste', cm.getValue());\n  cm.setCursor(0, 0);\n  // in case of pasting whole line\n  helpers.doKeys('y', 'y');\n  cm.setCursor(1, 6);\n  helpers.doKeys('v', 'l', 'l', 'l', 'p');\n  helpers.assertCursorAt(2, 0);\n  eq('this is a\\nunithi\\nthis is a\\n for visual paste', cm.getValue());\n}, { value: 'this is a\\nunit test for visual paste'});\n\n// This checks the contents of the register used to paste the text\ntestVim('v_paste_from_register', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('\"', 'a', 'y', 'w');\n  cm.setCursor(1, 0);\n  helpers.doKeys('v', 'p');\n  cm.openDialog = helpers.fakeOpenDialog('registers');\n  cm.openNotification = helpers.fakeOpenNotification(function(text) {\n    is(/a\\s+register/.test(text));\n  });\n}, { value: 'register contents\\nare not erased'});\ntestVim('S_normal', function(cm, vim, helpers) {\n  cm.setCursor(0, 1);\n  helpers.doKeys('j', 'S');\n  helpers.doKeys('<Esc>');\n  helpers.assertCursorAt(1, 1);\n  eq('aa{\\n  \\ncc', cm.getValue());\n  helpers.doKeys('j', 'S');\n  eq('aa{\\n  \\n  ', cm.getValue());\n  helpers.assertCursorAt(2, 2);\n  helpers.doKeys('<Esc>');\n  helpers.doKeys('d', 'd', 'd', 'd');\n  helpers.assertCursorAt(0, 0);\n  helpers.doKeys('S');\n  is(vim.insertMode);\n  eq('', cm.getValue());\n}, { value: 'aa{\\nbb\\ncc'});\ntestVim('blockwise_paste', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('<C-v>', '3', 'j', 'l', 'y');\n  cm.setCursor(0, 2);\n  // paste one char after the current cursor position\n  helpers.doKeys('p');\n  eq('helhelo\\nworwold\\nfoofo\\nbarba', cm.getValue());\n  cm.setCursor(0, 0);\n  helpers.doKeys('v', '4', 'l', 'y');\n  cm.setCursor(0, 0);\n  helpers.doKeys('<C-v>', '3', 'j', 'p');\n  eq('helheelhelo\\norwold\\noofo\\narba', cm.getValue());\n}, { value: 'hello\\nworld\\nfoo\\nbar'});\ntestVim('blockwise_paste_long/short_line', function(cm, vim, helpers) {\n  // extend short lines in case of different line lengths.\n  cm.setCursor(0, 0);\n  helpers.doKeys('<C-v>', 'j', 'j', 'y');\n  cm.setCursor(0, 3);\n  helpers.doKeys('p');\n  eq('hellho\\nfoo f\\nbar b', cm.getValue());\n}, { value: 'hello\\nfoo\\nbar'});\ntestVim('blockwise_paste_cut_paste', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('<C-v>', '2', 'j', 'x');\n  cm.setCursor(0, 0);\n  helpers.doKeys('P');\n  eq('cut\\nand\\npaste\\nme', cm.getValue());\n}, { value: 'cut\\nand\\npaste\\nme'});\ntestVim('blockwise_paste_from_register', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('<C-v>', '2', 'j', '\"', 'a', 'y');\n  cm.setCursor(0, 3);\n  helpers.doKeys('\"', 'a', 'p');\n  eq('foobfar\\nhellho\\nworlwd', cm.getValue());\n}, { value: 'foobar\\nhello\\nworld'});\ntestVim('blockwise_paste_last_line', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('<C-v>', '2', 'j', 'l', 'y');\n  cm.setCursor(3, 0);\n  helpers.doKeys('p');\n  eq('cut\\nand\\npaste\\nmcue\\n an\\n pa', cm.getValue());\n}, { value: 'cut\\nand\\npaste\\nme'});\n\ntestVim('S_visual', function(cm, vim, helpers) {\n  cm.setCursor(0, 1);\n  helpers.doKeys('v', 'j', 'S');\n  helpers.doKeys('<Esc>');\n  helpers.assertCursorAt(0, 0);\n  eq('\\ncc', cm.getValue());\n}, { value: 'aa\\nbb\\ncc'});\n\ntestVim('d_/', function(cm, vim, helpers) {\n  cm.openDialog = helpers.fakeOpenDialog('match');\n  helpers.doKeys('2', 'd', '/');\n  helpers.assertCursorAt(0, 0);\n  eq('match \\n next', cm.getValue());\n  cm.openDialog = helpers.fakeOpenDialog('2');\n  helpers.doKeys('d', ':');\n  // TODO eq(' next', cm.getValue());\n}, { value: 'text match match \\n next' });\ntestVim('/ and n/N', function(cm, vim, helpers) {\n  cm.openDialog = helpers.fakeOpenDialog('match');\n  helpers.doKeys('/');\n  helpers.assertCursorAt(0, 11);\n  helpers.doKeys('n');\n  helpers.assertCursorAt(1, 6);\n  helpers.doKeys('N');\n  helpers.assertCursorAt(0, 11);\n\n  cm.setCursor(0, 0);\n  helpers.doKeys('2', '/');\n  helpers.assertCursorAt(1, 6);\n}, { value: 'match nope match \\n nope Match' });\ntestVim('/_case', function(cm, vim, helpers) {\n  cm.openDialog = helpers.fakeOpenDialog('Match');\n  helpers.doKeys('/');\n  helpers.assertCursorAt(1, 6);\n}, { value: 'match nope match \\n nope Match' });\ntestVim('/_2_pcre', function(cm, vim, helpers) {\n  CodeMirror.Vim.setOption('pcre', true);\n  cm.openDialog = helpers.fakeOpenDialog('(word){2}');\n  helpers.doKeys('/');\n  helpers.assertCursorAt(1, 9);\n  helpers.doKeys('n');\n  helpers.assertCursorAt(2, 1);\n}, { value: 'word\\n another wordword\\n wordwordword\\n' });\ntestVim('/_2_nopcre', function(cm, vim, helpers) {\n  CodeMirror.Vim.setOption('pcre', false);\n  cm.openDialog = helpers.fakeOpenDialog('\\\\(word\\\\)\\\\{2}');\n  helpers.doKeys('/');\n  helpers.assertCursorAt(1, 9);\n  helpers.doKeys('n');\n  helpers.assertCursorAt(2, 1);\n}, { value: 'word\\n another wordword\\n wordwordword\\n' });\ntestVim('/_nongreedy', function(cm, vim, helpers) {\n  cm.openDialog = helpers.fakeOpenDialog('aa');\n  helpers.doKeys('/');\n  helpers.assertCursorAt(0, 4);\n  helpers.doKeys('n');\n  helpers.assertCursorAt(1, 3);\n  helpers.doKeys('n');\n  helpers.assertCursorAt(0, 0);\n}, { value: 'aaa aa \\n a aa'});\ntestVim('?_nongreedy', function(cm, vim, helpers) {\n  cm.openDialog = helpers.fakeOpenDialog('aa');\n  helpers.doKeys('?');\n  helpers.assertCursorAt(1, 3);\n  helpers.doKeys('n');\n  helpers.assertCursorAt(0, 4);\n  helpers.doKeys('n');\n  helpers.assertCursorAt(0, 0);\n}, { value: 'aaa aa \\n a aa'});\ntestVim('/_greedy', function(cm, vim, helpers) {\n  cm.openDialog = helpers.fakeOpenDialog('a+');\n  helpers.doKeys('/');\n  helpers.assertCursorAt(0, 4);\n  helpers.doKeys('n');\n  helpers.assertCursorAt(1, 1);\n  helpers.doKeys('n');\n  helpers.assertCursorAt(1, 3);\n  helpers.doKeys('n');\n  helpers.assertCursorAt(0, 0);\n}, { value: 'aaa aa \\n a aa'});\ntestVim('?_greedy', function(cm, vim, helpers) {\n  cm.openDialog = helpers.fakeOpenDialog('a+');\n  helpers.doKeys('?');\n  helpers.assertCursorAt(1, 3);\n  helpers.doKeys('n');\n  helpers.assertCursorAt(1, 1);\n  helpers.doKeys('n');\n  helpers.assertCursorAt(0, 4);\n  helpers.doKeys('n');\n  helpers.assertCursorAt(0, 0);\n}, { value: 'aaa aa \\n a aa'});\ntestVim('/_greedy_0_or_more', function(cm, vim, helpers) {\n  cm.openDialog = helpers.fakeOpenDialog('a*');\n  helpers.doKeys('/');\n  helpers.assertCursorAt(0, 3);\n  helpers.doKeys('n');\n  helpers.assertCursorAt(0, 4);\n  helpers.doKeys('n');\n  helpers.assertCursorAt(0, 5);\n  helpers.doKeys('n');\n  helpers.assertCursorAt(1, 0);\n  helpers.doKeys('n');\n  helpers.assertCursorAt(1, 1);\n  helpers.doKeys('n');\n  helpers.assertCursorAt(0, 0);\n}, { value: 'aaa  aa\\n aa'});\ntestVim('?_greedy_0_or_more', function(cm, vim, helpers) {\n  cm.openDialog = helpers.fakeOpenDialog('a*');\n  helpers.doKeys('?');\n  helpers.assertCursorAt(1, 1);\n  helpers.doKeys('n');\n  helpers.assertCursorAt(1, 0);\n  helpers.doKeys('n');\n  helpers.assertCursorAt(0, 5);\n  helpers.doKeys('n');\n  helpers.assertCursorAt(0, 4);\n  helpers.doKeys('n');\n  helpers.assertCursorAt(0, 3);\n  helpers.doKeys('n');\n  helpers.assertCursorAt(0, 0);\n}, { value: 'aaa  aa\\n aa'});\ntestVim('? and n/N', function(cm, vim, helpers) {\n  cm.openDialog = helpers.fakeOpenDialog('match');\n  helpers.doKeys('?');\n  helpers.assertCursorAt(1, 6);\n  helpers.doKeys('n');\n  helpers.assertCursorAt(0, 11);\n  helpers.doKeys('N');\n  helpers.assertCursorAt(1, 6);\n\n  cm.setCursor(0, 0);\n  helpers.doKeys('2', '?');\n  helpers.assertCursorAt(0, 11);\n}, { value: 'match nope match \\n nope Match' });\ntestVim('*', function(cm, vim, helpers) {\n  cm.setCursor(0, 9);\n  helpers.doKeys('*');\n  helpers.assertCursorAt(0, 22);\n\n  cm.setCursor(0, 9);\n  helpers.doKeys('2', '*');\n  helpers.assertCursorAt(1, 8);\n}, { value: 'nomatch match nomatch match \\nnomatch Match' });\ntestVim('*_no_word', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('*');\n  helpers.assertCursorAt(0, 0);\n}, { value: ' \\n match \\n' });\ntestVim('*_symbol', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('*');\n  helpers.assertCursorAt(1, 0);\n}, { value: ' /}\\n/} match \\n' });\ntestVim('#', function(cm, vim, helpers) {\n  cm.setCursor(0, 9);\n  helpers.doKeys('#');\n  helpers.assertCursorAt(1, 8);\n\n  cm.setCursor(0, 9);\n  helpers.doKeys('2', '#');\n  helpers.assertCursorAt(0, 22);\n}, { value: 'nomatch match nomatch match \\nnomatch Match' });\ntestVim('*_seek', function(cm, vim, helpers) {\n  // Should skip over space and symbols.\n  cm.setCursor(0, 3);\n  helpers.doKeys('*');\n  helpers.assertCursorAt(0, 22);\n}, { value: '    :=  match nomatch match \\nnomatch Match' });\ntestVim('#', function(cm, vim, helpers) {\n  // Should skip over space and symbols.\n  cm.setCursor(0, 3);\n  helpers.doKeys('#');\n  helpers.assertCursorAt(1, 8);\n}, { value: '    :=  match nomatch match \\nnomatch Match' });\ntestVim('g*', function(cm, vim, helpers) {\n  cm.setCursor(0, 8);\n  helpers.doKeys('g', '*');\n  helpers.assertCursorAt(0, 18);\n  cm.setCursor(0, 8);\n  helpers.doKeys('3', 'g', '*');\n  helpers.assertCursorAt(1, 8);\n}, { value: 'matches match alsoMatch\\nmatchme matching' });\ntestVim('g#', function(cm, vim, helpers) {\n  cm.setCursor(0, 8);\n  helpers.doKeys('g', '#');\n  helpers.assertCursorAt(0, 0);\n  cm.setCursor(0, 8);\n  helpers.doKeys('3', 'g', '#');\n  helpers.assertCursorAt(1, 0);\n}, { value: 'matches match alsoMatch\\nmatchme matching' });\ntestVim('macro_insert', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('q', 'a', '0', 'i');\n  cm.replaceRange('foo', cm.getCursor());\n  helpers.doKeys('<Esc>');\n  helpers.doKeys('q', '@', 'a');\n  eq('foofoo', cm.getValue());\n}, { value: ''});\ntestVim('macro_insert_repeat', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('q', 'a', '$', 'a');\n  cm.replaceRange('larry.', cm.getCursor());\n  helpers.doKeys('<Esc>');\n  helpers.doKeys('a');\n  cm.replaceRange('curly.', cm.getCursor());\n  helpers.doKeys('<Esc>');\n  helpers.doKeys('q');\n  helpers.doKeys('a');\n  cm.replaceRange('moe.', cm.getCursor());\n  helpers.doKeys('<Esc>');\n  helpers.doKeys('@', 'a');\n  // At this point, the most recent edit should be the 2nd insert change\n  // inside the macro, i.e. \"curly.\".\n  helpers.doKeys('.');\n  eq('larry.curly.moe.larry.curly.curly.', cm.getValue());\n}, { value: ''});\ntestVim('macro_space', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('<Space>', '<Space>');\n  helpers.assertCursorAt(0, 2);\n  helpers.doKeys('q', 'a', '<Space>', '<Space>', 'q');\n  helpers.assertCursorAt(0, 4);\n  helpers.doKeys('@', 'a');\n  helpers.assertCursorAt(0, 6);\n  helpers.doKeys('@', 'a');\n  helpers.assertCursorAt(0, 8);\n}, { value: 'one line of text.'});\ntestVim('macro_t_search', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('q', 'a', 't', 'e', 'q');\n  helpers.assertCursorAt(0, 1);\n  helpers.doKeys('l', '@', 'a');\n  helpers.assertCursorAt(0, 6);\n  helpers.doKeys('l', ';');\n  helpers.assertCursorAt(0, 12);\n}, { value: 'one line of text.'});\ntestVim('macro_f_search', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('q', 'b', 'f', 'e', 'q');\n  helpers.assertCursorAt(0, 2);\n  helpers.doKeys('@', 'b');\n  helpers.assertCursorAt(0, 7);\n  helpers.doKeys(';');\n  helpers.assertCursorAt(0, 13);\n}, { value: 'one line of text.'});\ntestVim('macro_slash_search', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('q', 'c');\n  cm.openDialog = helpers.fakeOpenDialog('e');\n  helpers.doKeys('/', 'q');\n  helpers.assertCursorAt(0, 2);\n  helpers.doKeys('@', 'c');\n  helpers.assertCursorAt(0, 7);\n  helpers.doKeys('n');\n  helpers.assertCursorAt(0, 13);\n}, { value: 'one line of text.'});\ntestVim('macro_multislash_search', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('q', 'd');\n  cm.openDialog = helpers.fakeOpenDialog('e');\n  helpers.doKeys('/');\n  cm.openDialog = helpers.fakeOpenDialog('t');\n  helpers.doKeys('/', 'q');\n  helpers.assertCursorAt(0, 12);\n  helpers.doKeys('@', 'd');\n  helpers.assertCursorAt(0, 15);\n}, { value: 'one line of text to rule them all.'});\ntestVim('macro_last_ex_command_register', function (cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doEx('s/a/b');\n  helpers.doKeys('2', '@', ':');\n  eq('bbbaa', cm.getValue());\n  helpers.assertCursorAt(0, 2);\n}, { value: 'aaaaa'});\ntestVim('macro_parens', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('q', 'z', 'i');\n  cm.replaceRange('(', cm.getCursor());\n  helpers.doKeys('<Esc>');\n  helpers.doKeys('e', 'a');\n  cm.replaceRange(')', cm.getCursor());\n  helpers.doKeys('<Esc>');\n  helpers.doKeys('q');\n  helpers.doKeys('w', '@', 'z');\n  helpers.doKeys('w', '@', 'z');\n  eq('(see) (spot) (run)', cm.getValue());\n}, { value: 'see spot run'});\ntestVim('macro_overwrite', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('q', 'z', '0', 'i');\n  cm.replaceRange('I ', cm.getCursor());\n  helpers.doKeys('<Esc>');\n  helpers.doKeys('q');\n  helpers.doKeys('e');\n  // Now replace the macro with something else.\n  helpers.doKeys('q', 'z', 'a');\n  cm.replaceRange('.', cm.getCursor());\n  helpers.doKeys('<Esc>');\n  helpers.doKeys('q');\n  helpers.doKeys('e', '@', 'z');\n  helpers.doKeys('e', '@', 'z');\n  eq('I see. spot. run.', cm.getValue());\n}, { value: 'see spot run'});\ntestVim('macro_search_f', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('q', 'a', 'f', ' ');\n  helpers.assertCursorAt(0,3);\n  helpers.doKeys('q', '0');\n  helpers.assertCursorAt(0,0);\n  helpers.doKeys('@', 'a');\n  helpers.assertCursorAt(0,3);\n}, { value: 'The quick brown fox jumped over the lazy dog.'});\ntestVim('macro_search_2f', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('q', 'a', '2', 'f', ' ');\n  helpers.assertCursorAt(0,9);\n  helpers.doKeys('q', '0');\n  helpers.assertCursorAt(0,0);\n  helpers.doKeys('@', 'a');\n  helpers.assertCursorAt(0,9);\n}, { value: 'The quick brown fox jumped over the lazy dog.'});\ntestVim('yank_register', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('\"', 'a', 'y', 'y');\n  helpers.doKeys('j', '\"', 'b', 'y', 'y');\n  cm.openDialog = helpers.fakeOpenDialog('registers');\n  cm.openNotification = helpers.fakeOpenNotification(function(text) {\n    is(/a\\s+foo/.test(text));\n    is(/b\\s+bar/.test(text));\n  });\n  helpers.doKeys(':');\n}, { value: 'foo\\nbar'});\ntestVim('yank_visual_block', function(cm, vim, helpers) {\n  cm.setCursor(0, 1);\n  helpers.doKeys('<C-v>', 'l', 'j', '\"', 'a', 'y');\n  cm.openNotification = helpers.fakeOpenNotification(function(text) {\n    is(/a\\s+oo\\nar/.test(text));\n  });\n  helpers.doKeys(':');\n}, { value: 'foo\\nbar'});\ntestVim('yank_append_line_to_line_register', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('\"', 'a', 'y', 'y');\n  helpers.doKeys('j', '\"', 'A', 'y', 'y');\n  cm.openDialog = helpers.fakeOpenDialog('registers');\n  cm.openNotification = helpers.fakeOpenNotification(function(text) {\n    is(/a\\s+foo\\nbar/.test(text));\n    is(/\"\\s+foo\\nbar/.test(text));\n  });\n  helpers.doKeys(':');\n}, { value: 'foo\\nbar'});\ntestVim('yank_append_word_to_word_register', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('\"', 'a', 'y', 'w');\n  helpers.doKeys('j', '\"', 'A', 'y', 'w');\n  cm.openDialog = helpers.fakeOpenDialog('registers');\n  cm.openNotification = helpers.fakeOpenNotification(function(text) {\n    is(/a\\s+foobar/.test(text));\n    is(/\"\\s+foobar/.test(text));\n  });\n  helpers.doKeys(':');\n}, { value: 'foo\\nbar'});\ntestVim('yank_append_line_to_word_register', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('\"', 'a', 'y', 'w');\n  helpers.doKeys('j', '\"', 'A', 'y', 'y');\n  cm.openDialog = helpers.fakeOpenDialog('registers');\n  cm.openNotification = helpers.fakeOpenNotification(function(text) {\n    is(/a\\s+foo\\nbar/.test(text));\n    is(/\"\\s+foo\\nbar/.test(text));\n  });\n  helpers.doKeys(':');\n}, { value: 'foo\\nbar'});\ntestVim('yank_append_word_to_line_register', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('\"', 'a', 'y', 'y');\n  helpers.doKeys('j', '\"', 'A', 'y', 'w');\n  cm.openDialog = helpers.fakeOpenDialog('registers');\n  cm.openNotification = helpers.fakeOpenNotification(function(text) {\n    is(/a\\s+foo\\nbar/.test(text));\n    is(/\"\\s+foo\\nbar/.test(text));\n  });\n  helpers.doKeys(':');\n}, { value: 'foo\\nbar'});\ntestVim('macro_register', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('q', 'a', 'i');\n  cm.replaceRange('gangnam', cm.getCursor());\n  helpers.doKeys('<Esc>');\n  helpers.doKeys('q');\n  helpers.doKeys('q', 'b', 'o');\n  cm.replaceRange('style', cm.getCursor());\n  helpers.doKeys('<Esc>');\n  helpers.doKeys('q');\n  cm.openDialog = helpers.fakeOpenDialog('registers');\n  cm.openNotification = helpers.fakeOpenNotification(function(text) {\n    is(/a\\s+i/.test(text));\n    is(/b\\s+o/.test(text));\n  });\n  helpers.doKeys(':');\n}, { value: ''});\ntestVim('._register', function(cm,vim,helpers) {\n  cm.setCursor(0,0);\n  helpers.doKeys('i');\n  cm.replaceRange('foo',cm.getCursor());\n  helpers.doKeys('<Esc>');\n  cm.openDialog = helpers.fakeOpenDialog('registers');\n  cm.openNotification = helpers.fakeOpenNotification(function(text) {\n    is(/\\.\\s+foo/.test(text));\n  });\n  helpers.doKeys(':');\n}, {value: ''});\ntestVim(':_register', function(cm,vim,helpers) {\n  helpers.doEx('bar');\n  cm.openDialog = helpers.fakeOpenDialog('registers');\n  cm.openNotification = helpers.fakeOpenNotification(function(text) {\n    is(/:\\s+bar/.test(text));\n  });\n  helpers.doKeys(':');\n}, {value: ''});\ntestVim('search_register_escape', function(cm, vim, helpers) {\n  // Check that the register is restored if the user escapes rather than confirms.\n  cm.openDialog = helpers.fakeOpenDialog('waldo');\n  helpers.doKeys('/');\n  var onKeyDown;\n  var onKeyUp;\n  var KEYCODES = {\n    f: 70,\n    o: 79,\n    Esc: 27\n  };\n  cm.openDialog = function(template, callback, options) {\n    onKeyDown = options.onKeyDown;\n    onKeyUp = options.onKeyUp;\n  };\n  var close = function() {};\n  helpers.doKeys('/');\n  // Fake some keyboard events coming in.\n  onKeyDown({keyCode: KEYCODES.f}, '', close);\n  onKeyUp({keyCode: KEYCODES.f}, '', close);\n  onKeyDown({keyCode: KEYCODES.o}, 'f', close);\n  onKeyUp({keyCode: KEYCODES.o}, 'f', close);\n  onKeyDown({keyCode: KEYCODES.o}, 'fo', close);\n  onKeyUp({keyCode: KEYCODES.o}, 'fo', close);\n  onKeyDown({keyCode: KEYCODES.Esc}, 'foo', close);\n  cm.openDialog = helpers.fakeOpenDialog('registers');\n  cm.openNotification = helpers.fakeOpenNotification(function(text) {\n    is(/waldo/.test(text));\n    is(!/foo/.test(text));\n  });\n  helpers.doKeys(':');\n}, {value: ''});\ntestVim('search_register', function(cm, vim, helpers) {\n  cm.openDialog = helpers.fakeOpenDialog('foo');\n  helpers.doKeys('/');\n  cm.openDialog = helpers.fakeOpenDialog('registers');\n  cm.openNotification = helpers.fakeOpenNotification(function(text) {\n    is(/\\/\\s+foo/.test(text));\n  });\n  helpers.doKeys(':');\n}, {value: ''});\ntestVim('search_history', function(cm, vim, helpers) {\n  cm.openDialog = helpers.fakeOpenDialog('this');\n  helpers.doKeys('/');\n  cm.openDialog = helpers.fakeOpenDialog('checks');\n  helpers.doKeys('/');\n  cm.openDialog = helpers.fakeOpenDialog('search');\n  helpers.doKeys('/');\n  cm.openDialog = helpers.fakeOpenDialog('history');\n  helpers.doKeys('/');\n  cm.openDialog = helpers.fakeOpenDialog('checks');\n  helpers.doKeys('/');\n  var onKeyDown;\n  var onKeyUp;\n  var query = '';\n  var keyCodes = {\n    Up: 38,\n    Down: 40\n  };\n  cm.openDialog = function(template, callback, options) {\n    onKeyUp = options.onKeyUp;\n    onKeyDown = options.onKeyDown;\n  };\n  var close = function(newVal) {\n    if (typeof newVal == 'string') query = newVal;\n  }\n  helpers.doKeys('/');\n  onKeyDown({keyCode: keyCodes.Up}, query, close);\n  onKeyUp({keyCode: keyCodes.Up}, query, close);\n  eq(query, 'checks');\n  onKeyDown({keyCode: keyCodes.Up}, query, close);\n  onKeyUp({keyCode: keyCodes.Up}, query, close);\n  eq(query, 'history');\n  onKeyDown({keyCode: keyCodes.Up}, query, close);\n  onKeyUp({keyCode: keyCodes.Up}, query, close);\n  eq(query, 'search');\n  onKeyDown({keyCode: keyCodes.Up}, query, close);\n  onKeyUp({keyCode: keyCodes.Up}, query, close);\n  eq(query, 'this');\n  onKeyDown({keyCode: keyCodes.Down}, query, close);\n  onKeyUp({keyCode: keyCodes.Down}, query, close);\n  eq(query, 'search');\n}, {value: ''});\ntestVim('exCommand_history', function(cm, vim, helpers) {\n  cm.openDialog = helpers.fakeOpenDialog('registers');\n  helpers.doKeys(':');\n  cm.openDialog = helpers.fakeOpenDialog('sort');\n  helpers.doKeys(':');\n  cm.openDialog = helpers.fakeOpenDialog('map');\n  helpers.doKeys(':');\n  cm.openDialog = helpers.fakeOpenDialog('invalid');\n  helpers.doKeys(':');\n  var onKeyDown;\n  var onKeyUp;\n  var input = '';\n  var keyCodes = {\n    Up: 38,\n    Down: 40,\n    s: 115\n  };\n  cm.openDialog = function(template, callback, options) {\n    onKeyUp = options.onKeyUp;\n    onKeyDown = options.onKeyDown;\n  };\n  var close = function(newVal) {\n    if (typeof newVal == 'string') input = newVal;\n  }\n  helpers.doKeys(':');\n  onKeyDown({keyCode: keyCodes.Up}, input, close);\n  eq(input, 'invalid');\n  onKeyDown({keyCode: keyCodes.Up}, input, close);\n  eq(input, 'map');\n  onKeyDown({keyCode: keyCodes.Up}, input, close);\n  eq(input, 'sort');\n  onKeyDown({keyCode: keyCodes.Up}, input, close);\n  eq(input, 'registers');\n  onKeyDown({keyCode: keyCodes.s}, '', close);\n  input = 's';\n  onKeyDown({keyCode: keyCodes.Up}, input, close);\n  eq(input, 'sort');\n}, {value: ''});\ntestVim('search_clear', function(cm, vim, helpers) {\n  var onKeyDown;\n  var input = '';\n  var keyCodes = {\n    Ctrl: 17,\n    u: 85\n  };\n  cm.openDialog = function(template, callback, options) {\n    onKeyDown = options.onKeyDown;\n  };\n  var close = function(newVal) {\n    if (typeof newVal == 'string') input = newVal;\n  }\n  helpers.doKeys('/');\n  input = 'foo';\n  onKeyDown({keyCode: keyCodes.Ctrl}, input, close);\n  onKeyDown({keyCode: keyCodes.u, ctrlKey: true}, input, close);\n  eq(input, '');\n});\ntestVim('exCommand_clear', function(cm, vim, helpers) {\n  var onKeyDown;\n  var input = '';\n  var keyCodes = {\n    Ctrl: 17,\n    u: 85\n  };\n  cm.openDialog = function(template, callback, options) {\n    onKeyDown = options.onKeyDown;\n  };\n  var close = function(newVal) {\n    if (typeof newVal == 'string') input = newVal;\n  }\n  helpers.doKeys(':');\n  input = 'foo';\n  onKeyDown({keyCode: keyCodes.Ctrl}, input, close);\n  onKeyDown({keyCode: keyCodes.u, ctrlKey: true}, input, close);\n  eq(input, '');\n});\ntestVim('.', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('2', 'd', 'w');\n  helpers.doKeys('.');\n  eq('5 6', cm.getValue());\n}, { value: '1 2 3 4 5 6'});\ntestVim('._repeat', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('2', 'd', 'w');\n  helpers.doKeys('3', '.');\n  eq('6', cm.getValue());\n}, { value: '1 2 3 4 5 6'});\ntestVim('._insert', function(cm, vim, helpers) {\n  helpers.doKeys('i');\n  cm.replaceRange('test', cm.getCursor());\n  helpers.doKeys('<Esc>');\n  helpers.doKeys('.');\n  eq('testestt', cm.getValue());\n  helpers.assertCursorAt(0, 6);\n  helpers.doKeys('O');\n  cm.replaceRange('xyz', cm.getCursor());\n  helpers.doInsertModeKeys('Backspace');\n  helpers.doInsertModeKeys('Down');\n  helpers.doKeys('<Esc>');\n  helpers.doKeys('.');\n  eq('xy\\nxy\\ntestestt', cm.getValue());\n  helpers.assertCursorAt(1, 1);\n}, { value: ''});\ntestVim('._insert_repeat', function(cm, vim, helpers) {\n  helpers.doKeys('i');\n  cm.replaceRange('test', cm.getCursor());\n  cm.setCursor(0, 4);\n  helpers.doKeys('<Esc>');\n  helpers.doKeys('2', '.');\n  eq('testesttestt', cm.getValue());\n  helpers.assertCursorAt(0, 10);\n}, { value: ''});\ntestVim('._repeat_insert', function(cm, vim, helpers) {\n  helpers.doKeys('3', 'i');\n  cm.replaceRange('te', cm.getCursor());\n  cm.setCursor(0, 2);\n  helpers.doKeys('<Esc>');\n  helpers.doKeys('.');\n  eq('tetettetetee', cm.getValue());\n  helpers.assertCursorAt(0, 10);\n}, { value: ''});\ntestVim('._insert_o', function(cm, vim, helpers) {\n  helpers.doKeys('o');\n  cm.replaceRange('z', cm.getCursor());\n  cm.setCursor(1, 1);\n  helpers.doKeys('<Esc>');\n  helpers.doKeys('.');\n  eq('\\nz\\nz', cm.getValue());\n  helpers.assertCursorAt(2, 0);\n}, { value: ''});\ntestVim('._insert_o_repeat', function(cm, vim, helpers) {\n  helpers.doKeys('o');\n  cm.replaceRange('z', cm.getCursor());\n  helpers.doKeys('<Esc>');\n  cm.setCursor(1, 0);\n  helpers.doKeys('2', '.');\n  eq('\\nz\\nz\\nz', cm.getValue());\n  helpers.assertCursorAt(3, 0);\n}, { value: ''});\ntestVim('._insert_o_indent', function(cm, vim, helpers) {\n  helpers.doKeys('o');\n  cm.replaceRange('z', cm.getCursor());\n  helpers.doKeys('<Esc>');\n  cm.setCursor(1, 2);\n  helpers.doKeys('.');\n  eq('{\\n  z\\n  z', cm.getValue());\n  helpers.assertCursorAt(2, 2);\n}, { value: '{'});\ntestVim('._insert_cw', function(cm, vim, helpers) {\n  helpers.doKeys('c', 'w');\n  cm.replaceRange('test', cm.getCursor());\n  helpers.doKeys('<Esc>');\n  cm.setCursor(0, 3);\n  helpers.doKeys('2', 'l');\n  helpers.doKeys('.');\n  eq('test test word3', cm.getValue());\n  helpers.assertCursorAt(0, 8);\n}, { value: 'word1 word2 word3' });\ntestVim('._insert_cw_repeat', function(cm, vim, helpers) {\n  // For some reason, repeat cw in desktop VIM will does not repeat insert mode\n  // changes. Will conform to that behavior.\n  helpers.doKeys('c', 'w');\n  cm.replaceRange('test', cm.getCursor());\n  helpers.doKeys('<Esc>');\n  cm.setCursor(0, 4);\n  helpers.doKeys('l');\n  helpers.doKeys('2', '.');\n  eq('test test', cm.getValue());\n  helpers.assertCursorAt(0, 8);\n}, { value: 'word1 word2 word3' });\ntestVim('._delete', function(cm, vim, helpers) {\n  cm.setCursor(0, 5);\n  helpers.doKeys('i');\n  helpers.doInsertModeKeys('Backspace');\n  helpers.doKeys('<Esc>');\n  helpers.doKeys('.');\n  eq('zace', cm.getValue());\n  helpers.assertCursorAt(0, 1);\n}, { value: 'zabcde'});\ntestVim('._delete_repeat', function(cm, vim, helpers) {\n  cm.setCursor(0, 6);\n  helpers.doKeys('i');\n  helpers.doInsertModeKeys('Backspace');\n  helpers.doKeys('<Esc>');\n  helpers.doKeys('2', '.');\n  eq('zzce', cm.getValue());\n  helpers.assertCursorAt(0, 1);\n}, { value: 'zzabcde'});\ntestVim('._visual_>', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('V', 'j', '>');\n  cm.setCursor(2, 0)\n  helpers.doKeys('.');\n  eq('  1\\n  2\\n  3\\n  4', cm.getValue());\n  helpers.assertCursorAt(2, 2);\n}, { value: '1\\n2\\n3\\n4'});\ntestVim('f;', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('f', 'x');\n  helpers.doKeys(';');\n  helpers.doKeys('2', ';');\n  eq(9, cm.getCursor().ch);\n}, { value: '01x3xx678x'});\ntestVim('F;', function(cm, vim, helpers) {\n  cm.setCursor(0, 8);\n  helpers.doKeys('F', 'x');\n  helpers.doKeys(';');\n  helpers.doKeys('2', ';');\n  eq(2, cm.getCursor().ch);\n}, { value: '01x3xx6x8x'});\ntestVim('t;', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('t', 'x');\n  helpers.doKeys(';');\n  helpers.doKeys('2', ';');\n  eq(8, cm.getCursor().ch);\n}, { value: '01x3xx678x'});\ntestVim('T;', function(cm, vim, helpers) {\n  cm.setCursor(0, 9);\n  helpers.doKeys('T', 'x');\n  helpers.doKeys(';');\n  helpers.doKeys('2', ';');\n  eq(2, cm.getCursor().ch);\n}, { value: '0xx3xx678x'});\ntestVim('f,', function(cm, vim, helpers) {\n  cm.setCursor(0, 6);\n  helpers.doKeys('f', 'x');\n  helpers.doKeys(',');\n  helpers.doKeys('2', ',');\n  eq(2, cm.getCursor().ch);\n}, { value: '01x3xx678x'});\ntestVim('F,', function(cm, vim, helpers) {\n  cm.setCursor(0, 3);\n  helpers.doKeys('F', 'x');\n  helpers.doKeys(',');\n  helpers.doKeys('2', ',');\n  eq(9, cm.getCursor().ch);\n}, { value: '01x3xx678x'});\ntestVim('t,', function(cm, vim, helpers) {\n  cm.setCursor(0, 6);\n  helpers.doKeys('t', 'x');\n  helpers.doKeys(',');\n  helpers.doKeys('2', ',');\n  eq(3, cm.getCursor().ch);\n}, { value: '01x3xx678x'});\ntestVim('T,', function(cm, vim, helpers) {\n  cm.setCursor(0, 4);\n  helpers.doKeys('T', 'x');\n  helpers.doKeys(',');\n  helpers.doKeys('2', ',');\n  eq(8, cm.getCursor().ch);\n}, { value: '01x3xx67xx'});\ntestVim('fd,;', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('f', '4');\n  cm.setCursor(0, 0);\n  helpers.doKeys('d', ';');\n  eq('56789', cm.getValue());\n  helpers.doKeys('u');\n  cm.setCursor(0, 9);\n  helpers.doKeys('d', ',');\n  eq('01239', cm.getValue());\n}, { value: '0123456789'});\ntestVim('Fd,;', function(cm, vim, helpers) {\n  cm.setCursor(0, 9);\n  helpers.doKeys('F', '4');\n  cm.setCursor(0, 9);\n  helpers.doKeys('d', ';');\n  eq('01239', cm.getValue());\n  helpers.doKeys('u');\n  cm.setCursor(0, 0);\n  helpers.doKeys('d', ',');\n  eq('56789', cm.getValue());\n}, { value: '0123456789'});\ntestVim('td,;', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('t', '4');\n  cm.setCursor(0, 0);\n  helpers.doKeys('d', ';');\n  eq('456789', cm.getValue());\n  helpers.doKeys('u');\n  cm.setCursor(0, 9);\n  helpers.doKeys('d', ',');\n  eq('012349', cm.getValue());\n}, { value: '0123456789'});\ntestVim('Td,;', function(cm, vim, helpers) {\n  cm.setCursor(0, 9);\n  helpers.doKeys('T', '4');\n  cm.setCursor(0, 9);\n  helpers.doKeys('d', ';');\n  eq('012349', cm.getValue());\n  helpers.doKeys('u');\n  cm.setCursor(0, 0);\n  helpers.doKeys('d', ',');\n  eq('456789', cm.getValue());\n}, { value: '0123456789'});\ntestVim('fc,;', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('f', '4');\n  cm.setCursor(0, 0);\n  helpers.doKeys('c', ';', '<Esc>');\n  eq('56789', cm.getValue());\n  helpers.doKeys('u');\n  cm.setCursor(0, 9);\n  helpers.doKeys('c', ',');\n  eq('01239', cm.getValue());\n}, { value: '0123456789'});\ntestVim('Fc,;', function(cm, vim, helpers) {\n  cm.setCursor(0, 9);\n  helpers.doKeys('F', '4');\n  cm.setCursor(0, 9);\n  helpers.doKeys('c', ';', '<Esc>');\n  eq('01239', cm.getValue());\n  helpers.doKeys('u');\n  cm.setCursor(0, 0);\n  helpers.doKeys('c', ',');\n  eq('56789', cm.getValue());\n}, { value: '0123456789'});\ntestVim('tc,;', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('t', '4');\n  cm.setCursor(0, 0);\n  helpers.doKeys('c', ';', '<Esc>');\n  eq('456789', cm.getValue());\n  helpers.doKeys('u');\n  cm.setCursor(0, 9);\n  helpers.doKeys('c', ',');\n  eq('012349', cm.getValue());\n}, { value: '0123456789'});\ntestVim('Tc,;', function(cm, vim, helpers) {\n  cm.setCursor(0, 9);\n  helpers.doKeys('T', '4');\n  cm.setCursor(0, 9);\n  helpers.doKeys('c', ';', '<Esc>');\n  eq('012349', cm.getValue());\n  helpers.doKeys('u');\n  cm.setCursor(0, 0);\n  helpers.doKeys('c', ',');\n  eq('456789', cm.getValue());\n}, { value: '0123456789'});\ntestVim('fy,;', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('f', '4');\n  cm.setCursor(0, 0);\n  helpers.doKeys('y', ';', 'P');\n  eq('012340123456789', cm.getValue());\n  helpers.doKeys('u');\n  cm.setCursor(0, 9);\n  helpers.doKeys('y', ',', 'P');\n  eq('012345678456789', cm.getValue());\n}, { value: '0123456789'});\ntestVim('Fy,;', function(cm, vim, helpers) {\n  cm.setCursor(0, 9);\n  helpers.doKeys('F', '4');\n  cm.setCursor(0, 9);\n  helpers.doKeys('y', ';', 'p');\n  eq('012345678945678', cm.getValue());\n  helpers.doKeys('u');\n  cm.setCursor(0, 0);\n  helpers.doKeys('y', ',', 'P');\n  eq('012340123456789', cm.getValue());\n}, { value: '0123456789'});\ntestVim('ty,;', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys('t', '4');\n  cm.setCursor(0, 0);\n  helpers.doKeys('y', ';', 'P');\n  eq('01230123456789', cm.getValue());\n  helpers.doKeys('u');\n  cm.setCursor(0, 9);\n  helpers.doKeys('y', ',', 'p');\n  eq('01234567895678', cm.getValue());\n}, { value: '0123456789'});\ntestVim('Ty,;', function(cm, vim, helpers) {\n  cm.setCursor(0, 9);\n  helpers.doKeys('T', '4');\n  cm.setCursor(0, 9);\n  helpers.doKeys('y', ';', 'p');\n  eq('01234567895678', cm.getValue());\n  helpers.doKeys('u');\n  cm.setCursor(0, 0);\n  helpers.doKeys('y', ',', 'P');\n  eq('01230123456789', cm.getValue());\n}, { value: '0123456789'});\ntestVim('HML', function(cm, vim, helpers) {\n  var lines = 35;\n  var textHeight = cm.defaultTextHeight();\n  cm.setSize(600, lines*textHeight);\n  cm.setCursor(120, 0);\n  cm.refresh(); //ace_patch\n  helpers.doKeys('H');\n  helpers.assertCursorAt(86, 2);\n  helpers.doKeys('L');\n  helpers.assertCursorAt(120, 4);\n  helpers.doKeys('M');\n  helpers.assertCursorAt(103,4);\n}, { value: (function(){\n  var lines = new Array(100);\n  var upper = '  xx\\n';\n  var lower = '    xx\\n';\n  upper = lines.join(upper);\n  lower = lines.join(lower);\n  return upper + lower;\n})()});\n\nvar zVals = [];\nforEach(['zb','zz','zt','z-','z.','z<CR>'], function(e, idx){\n  var lineNum = 250;\n  var lines = 35;\n  testVim(e, function(cm, vim, helpers) {\n    var k1 = e[0];\n    var k2 = e.substring(1);\n    var textHeight = cm.defaultTextHeight();\n    cm.setSize(600, lines*textHeight);\n    cm.setCursor(lineNum, 0);\n    helpers.doKeys(k1, k2);\n    zVals[idx] = cm.getScrollInfo().top;\n  }, { value: (function(){\n    return new Array(500).join('\\n');\n  })()});\n});\ntestVim('zb_to_bottom', function(cm, vim, helpers){\n  var lineNum = 250;\n  cm.setSize(600, 35*cm.defaultTextHeight());\n  cm.setCursor(lineNum, 0);\n  helpers.doKeys('z', 'b');\n  var scrollInfo = cm.getScrollInfo();\n  eq(scrollInfo.top + scrollInfo.clientHeight, cm.charCoords(Pos(lineNum, 0), 'local').bottom);\n}, { value: (function(){\n  return new Array(500).join('\\n');\n})()});\ntestVim('zt_to_top', function(cm, vim, helpers){\n  var lineNum = 250;\n  cm.setSize(600, 35*cm.defaultTextHeight());\n  cm.setCursor(lineNum, 0);\n  helpers.doKeys('z', 't');\n  eq(cm.getScrollInfo().top, cm.charCoords(Pos(lineNum, 0), 'local').top);\n}, { value: (function(){\n  return new Array(500).join('\\n');\n})()});\ntestVim('zb<zz', function(cm, vim, helpers){\n  eq(zVals[0]<zVals[1], true);\n});\ntestVim('zz<zt', function(cm, vim, helpers){\n  eq(zVals[1]<zVals[2], true);\n});\ntestVim('zb==z-', function(cm, vim, helpers){\n  eq(zVals[0], zVals[3]);\n});\ntestVim('zz==z.', function(cm, vim, helpers){\n  eq(zVals[1], zVals[4]);\n});\ntestVim('zt==z<CR>', function(cm, vim, helpers){\n  eq(zVals[2], zVals[5]);\n});\n\nvar moveTillCharacterSandbox =\n  'The quick brown fox \\n';\ntestVim('moveTillCharacter', function(cm, vim, helpers){\n  cm.setCursor(0, 0);\n  // Search for the 'q'.\n  cm.openDialog = helpers.fakeOpenDialog('q');\n  helpers.doKeys('/');\n  eq(4, cm.getCursor().ch);\n  // Jump to just before the first o in the list.\n  helpers.doKeys('t');\n  helpers.doKeys('o');\n  eq('The quick brown fox \\n', cm.getValue());\n  // Delete that one character.\n  helpers.doKeys('d');\n  helpers.doKeys('t');\n  helpers.doKeys('o');\n  eq('The quick bown fox \\n', cm.getValue());\n  // Delete everything until the next 'o'.\n  helpers.doKeys('.');\n  eq('The quick box \\n', cm.getValue());\n  // An unmatched character should have no effect.\n  helpers.doKeys('d');\n  helpers.doKeys('t');\n  helpers.doKeys('q');\n  eq('The quick box \\n', cm.getValue());\n  // Matches should only be possible on single lines.\n  helpers.doKeys('d');\n  helpers.doKeys('t');\n  helpers.doKeys('z');\n  eq('The quick box \\n', cm.getValue());\n  // After all that, the search for 'q' should still be active, so the 'N' command\n  // can run it again in reverse. Use that to delete everything back to the 'q'.\n  helpers.doKeys('d');\n  helpers.doKeys('N');\n  eq('The ox \\n', cm.getValue());\n  eq(4, cm.getCursor().ch);\n}, { value: moveTillCharacterSandbox});\ntestVim('searchForPipe', function(cm, vim, helpers){\n  CodeMirror.Vim.setOption('pcre', false);\n  cm.setCursor(0, 0);\n  // Search for the '|'.\n  cm.openDialog = helpers.fakeOpenDialog('|');\n  helpers.doKeys('/');\n  eq(4, cm.getCursor().ch);\n}, { value: 'this|that'});\n\n\nvar scrollMotionSandbox =\n  '\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n';\ntestVim('scrollMotion', function(cm, vim, helpers){\n  var prevCursor, prevScrollInfo;\n  cm.setCursor(0, 0);\n  // ctrl-y at the top of the file should have no effect.\n  helpers.doKeys('<C-y>');\n  eq(0, cm.getCursor().line);\n  prevScrollInfo = cm.getScrollInfo();\n  helpers.doKeys('<C-e>');\n  eq(1, cm.getCursor().line);\n  is(prevScrollInfo.top < cm.getScrollInfo().top);\n  // Jump to the end of the sandbox.\n  cm.setCursor(1000, 0);\n  cm.refresh(); //ace_patch\n  prevCursor = cm.getCursor();\n  // ctrl-e at the bottom of the file should have no effect.\n  helpers.doKeys('<C-e>');\n  eq(prevCursor.line, cm.getCursor().line);\n  cm.refresh(); //ace_patch\n  prevScrollInfo = cm.getScrollInfo();\n  helpers.doKeys('<C-y>');\n  eq(prevCursor.line - 1, cm.getCursor().line, \"Y\");\n  is(prevScrollInfo.top > cm.getScrollInfo().top);\n}, { value: scrollMotionSandbox});\n\nvar squareBracketMotionSandbox = ''+\n  '({\\n'+//0\n  '  ({\\n'+//11\n  '  /*comment {\\n'+//2\n  '            */(\\n'+//3\n  '#else                \\n'+//4\n  '  /*       )\\n'+//5\n  '#if        }\\n'+//6\n  '  )}*/\\n'+//7\n  ')}\\n'+//8\n  '{}\\n'+//9\n  '#else {{\\n'+//10\n  '{}\\n'+//11\n  '}\\n'+//12\n  '{\\n'+//13\n  '#endif\\n'+//14\n  '}\\n'+//15\n  '}\\n'+//16\n  '#else';//17\ntestVim('[[, ]]', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys(']', ']');\n  helpers.assertCursorAt(9,0);\n  helpers.doKeys('2', ']', ']');\n  helpers.assertCursorAt(13,0);\n  helpers.doKeys(']', ']');\n  helpers.assertCursorAt(17,0);\n  helpers.doKeys('[', '[');\n  helpers.assertCursorAt(13,0);\n  helpers.doKeys('2', '[', '[');\n  helpers.assertCursorAt(9,0);\n  helpers.doKeys('[', '[');\n  helpers.assertCursorAt(0,0);\n}, { value: squareBracketMotionSandbox});\ntestVim('[], ][', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doKeys(']', '[');\n  helpers.assertCursorAt(12,0);\n  helpers.doKeys('2', ']', '[');\n  helpers.assertCursorAt(16,0);\n  helpers.doKeys(']', '[');\n  helpers.assertCursorAt(17,0);\n  helpers.doKeys('[', ']');\n  helpers.assertCursorAt(16,0);\n  helpers.doKeys('2', '[', ']');\n  helpers.assertCursorAt(12,0);\n  helpers.doKeys('[', ']');\n  helpers.assertCursorAt(0,0);\n}, { value: squareBracketMotionSandbox});\ntestVim('[{, ]}', function(cm, vim, helpers) {\n  cm.setCursor(4, 10);\n  helpers.doKeys('[', '{');\n  helpers.assertCursorAt(2,12);\n  helpers.doKeys('2', '[', '{');\n  helpers.assertCursorAt(0,1);\n  cm.setCursor(4, 10);\n  helpers.doKeys(']', '}');\n  helpers.assertCursorAt(6,11);\n  helpers.doKeys('2', ']', '}');\n  helpers.assertCursorAt(8,1);\n  cm.setCursor(0,1);\n  helpers.doKeys(']', '}');\n  helpers.assertCursorAt(8,1);\n  helpers.doKeys('[', '{');\n  helpers.assertCursorAt(0,1);\n}, { value: squareBracketMotionSandbox});\ntestVim('[(, ])', function(cm, vim, helpers) {\n  cm.setCursor(4, 10);\n  helpers.doKeys('[', '(');\n  helpers.assertCursorAt(3,14);\n  helpers.doKeys('2', '[', '(');\n  helpers.assertCursorAt(0,0);\n  cm.setCursor(4, 10);\n  helpers.doKeys(']', ')');\n  helpers.assertCursorAt(5,11);\n  helpers.doKeys('2', ']', ')');\n  helpers.assertCursorAt(8,0);\n  helpers.doKeys('[', '(');\n  helpers.assertCursorAt(0,0);\n  helpers.doKeys(']', ')');\n  helpers.assertCursorAt(8,0);\n}, { value: squareBracketMotionSandbox});\ntestVim('[*, ]*, [/, ]/', function(cm, vim, helpers) {\n  forEach(['*', '/'], function(key){\n    cm.setCursor(7, 0);\n    helpers.doKeys('2', '[', key);\n    helpers.assertCursorAt(2,2);\n    helpers.doKeys('2', ']', key);\n    helpers.assertCursorAt(7,5);\n  });\n}, { value: squareBracketMotionSandbox});\ntestVim('[#, ]#', function(cm, vim, helpers) {\n  cm.setCursor(10, 3);\n  helpers.doKeys('2', '[', '#');\n  helpers.assertCursorAt(4,0);\n  helpers.doKeys('5', ']', '#');\n  helpers.assertCursorAt(17,0);\n  cm.setCursor(10, 3);\n  helpers.doKeys(']', '#');\n  helpers.assertCursorAt(14,0);\n}, { value: squareBracketMotionSandbox});\ntestVim('[m, ]m, [M, ]M', function(cm, vim, helpers) {\n  cm.setCursor(11, 0);\n  helpers.doKeys('[', 'm');\n  helpers.assertCursorAt(10,7);\n  helpers.doKeys('4', '[', 'm');\n  helpers.assertCursorAt(1,3);\n  helpers.doKeys('5', ']', 'm');\n  helpers.assertCursorAt(11,0);\n  helpers.doKeys('[', 'M');\n  helpers.assertCursorAt(9,1);\n  helpers.doKeys('3', ']', 'M');\n  helpers.assertCursorAt(15,0);\n  helpers.doKeys('5', '[', 'M');\n  helpers.assertCursorAt(7,3);\n}, { value: squareBracketMotionSandbox});\n\n// Ex mode tests\ntestVim('ex_go_to_line', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doEx('4');\n  helpers.assertCursorAt(3, 0);\n}, { value: 'a\\nb\\nc\\nd\\ne\\n'});\ntestVim('ex_write', function(cm, vim, helpers) {\n  var tmp = CodeMirror.commands.save;\n  var written;\n  var actualCm;\n  CodeMirror.commands.save = function(cm) {\n    written = true;\n    actualCm = cm;\n  };\n  // Test that w, wr, wri ... write all trigger :write.\n  var command = 'write';\n  for (var i = 1; i < command.length; i++) {\n    written = false;\n    actualCm = null;\n    helpers.doEx(command.substring(0, i));\n    eq(written, true);\n    eq(actualCm, cm);\n  }\n  CodeMirror.commands.save = tmp;\n});\ntestVim('ex_sort', function(cm, vim, helpers) {\n  helpers.doEx('sort');\n  eq('Z\\na\\nb\\nc\\nd', cm.getValue());\n}, { value: 'b\\nZ\\nd\\nc\\na'});\ntestVim('ex_sort_reverse', function(cm, vim, helpers) {\n  helpers.doEx('sort!');\n  eq('d\\nc\\nb\\na', cm.getValue());\n}, { value: 'b\\nd\\nc\\na'});\ntestVim('ex_sort_range', function(cm, vim, helpers) {\n  helpers.doEx('2,3sort');\n  eq('b\\nc\\nd\\na', cm.getValue());\n}, { value: 'b\\nd\\nc\\na'});\ntestVim('ex_sort_oneline', function(cm, vim, helpers) {\n  helpers.doEx('2sort');\n  // Expect no change.\n  eq('b\\nd\\nc\\na', cm.getValue());\n}, { value: 'b\\nd\\nc\\na'});\ntestVim('ex_sort_ignoreCase', function(cm, vim, helpers) {\n  helpers.doEx('sort i');\n  eq('a\\nb\\nc\\nd\\nZ', cm.getValue());\n}, { value: 'b\\nZ\\nd\\nc\\na'});\ntestVim('ex_sort_unique', function(cm, vim, helpers) {\n  helpers.doEx('sort u');\n  eq('Z\\na\\nb\\nc\\nd', cm.getValue());\n}, { value: 'b\\nZ\\na\\na\\nd\\na\\nc\\na'});\ntestVim('ex_sort_decimal', function(cm, vim, helpers) {\n  helpers.doEx('sort d');\n  eq('d3\\n s5\\n6\\n.9', cm.getValue());\n}, { value: '6\\nd3\\n s5\\n.9'});\ntestVim('ex_sort_decimal_negative', function(cm, vim, helpers) {\n  helpers.doEx('sort d');\n  eq('z-9\\nd3\\n s5\\n6\\n.9', cm.getValue());\n}, { value: '6\\nd3\\n s5\\n.9\\nz-9'});\ntestVim('ex_sort_decimal_reverse', function(cm, vim, helpers) {\n  helpers.doEx('sort! d');\n  eq('.9\\n6\\n s5\\nd3', cm.getValue());\n}, { value: '6\\nd3\\n s5\\n.9'});\ntestVim('ex_sort_hex', function(cm, vim, helpers) {\n  helpers.doEx('sort x');\n  eq(' s5\\n6\\n.9\\n&0xB\\nd3', cm.getValue());\n}, { value: '6\\nd3\\n s5\\n&0xB\\n.9'});\ntestVim('ex_sort_octal', function(cm, vim, helpers) {\n  helpers.doEx('sort o');\n  eq('.8\\n.9\\nd3\\n s5\\n6', cm.getValue());\n}, { value: '6\\nd3\\n s5\\n.9\\n.8'});\ntestVim('ex_sort_decimal_mixed', function(cm, vim, helpers) {\n  helpers.doEx('sort d');\n  eq('y\\nz\\nc1\\nb2\\na3', cm.getValue());\n}, { value: 'a3\\nz\\nc1\\ny\\nb2'});\ntestVim('ex_sort_decimal_mixed_reverse', function(cm, vim, helpers) {\n  helpers.doEx('sort! d');\n  eq('a3\\nb2\\nc1\\nz\\ny', cm.getValue());\n}, { value: 'a3\\nz\\nc1\\ny\\nb2'});\ntestVim('ex_sort_patterns_not_supported', function(cm, vim, helpers) {\n  var notified = false;\n  cm.openNotification = helpers.fakeOpenNotification(function(text) {\n    notified = /patterns not supported/.test(text);\n  });\n  helpers.doEx('sort /abc/');\n  is(notified, 'No notification.');\n});\n// test for :global command\ntestVim('ex_global', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  helpers.doEx('g/one/s//two');\n  eq('two two\\n two two\\n two two', cm.getValue());\n  helpers.doEx('1,2g/two/s//one');\n  eq('one one\\n one one\\n two two', cm.getValue());\n}, {value: 'one one\\n one one\\n one one'});\ntestVim('ex_global_confirm', function(cm, vim, helpers) {\n  cm.setCursor(0, 0);\n  var onKeyDown;\n  var openDialogSave = cm.openDialog;\n  var KEYCODES = {\n    a: 65,\n    n: 78,\n    q: 81,\n    y: 89\n  };\n  // Intercept the ex command, 'global'\n  cm.openDialog = function(template, callback, options) {\n    // Intercept the prompt for the embedded ex command, 'substitute'\n    cm.openDialog = function(template, callback, options) {\n      onKeyDown = options.onKeyDown;\n    };\n    callback('g/one/s//two/gc');\n  };\n  helpers.doKeys(':');\n  var close = function() {};\n  onKeyDown({keyCode: KEYCODES.n}, '', close);\n  onKeyDown({keyCode: KEYCODES.y}, '', close);\n  onKeyDown({keyCode: KEYCODES.a}, '', close);\n  onKeyDown({keyCode: KEYCODES.q}, '', close);\n  onKeyDown({keyCode: KEYCODES.y}, '', close);\n  eq('one two\\n two two\\n one one\\n two one\\n one one', cm.getValue());\n}, {value: 'one one\\n one one\\n one one\\n one one\\n one one'});\n// Basic substitute tests.\ntestVim('ex_substitute_same_line', function(cm, vim, helpers) {\n  cm.setCursor(1, 0);\n  helpers.doEx('s/one/two/g');\n  eq('one one\\n two two', cm.getValue());\n}, { value: 'one one\\n one one'});\ntestVim('ex_substitute_full_file', function(cm, vim, helpers) {\n  cm.setCursor(1, 0);\n  helpers.doEx('%s/one/two/g');\n  eq('two two\\n two two', cm.getValue());\n}, { value: 'one one\\n one one'});\ntestVim('ex_substitute_input_range', function(cm, vim, helpers) {\n  cm.setCursor(1, 0);\n  helpers.doEx('1,3s/\\\\d/0/g');\n  eq('0\\n0\\n0\\n4', cm.getValue());\n}, { value: '1\\n2\\n3\\n4' });\ntestVim('ex_substitute_visual_range', function(cm, vim, helpers) {\n  cm.setCursor(1, 0);\n  // Set last visual mode selection marks '< and '> at lines 2 and 4\n  helpers.doKeys('V', '2', 'j', 'v');\n  helpers.doEx('\\'<,\\'>s/\\\\d/0/g');\n  eq('1\\n0\\n0\\n0\\n5', cm.getValue());\n}, { value: '1\\n2\\n3\\n4\\n5' });\ntestVim('ex_substitute_empty_query', function(cm, vim, helpers) {\n  // If the query is empty, use last query.\n  cm.setCursor(1, 0);\n  cm.openDialog = helpers.fakeOpenDialog('1');\n  helpers.doKeys('/');\n  helpers.doEx('s//b/g');\n  eq('abb ab2 ab3', cm.getValue());\n}, { value: 'a11 a12 a13' });\ntestVim('ex_substitute_javascript', function(cm, vim, helpers) {\n  CodeMirror.Vim.setOption('pcre', false);\n  cm.setCursor(1, 0);\n  // Throw all the things that javascript likes to treat as special values\n  // into the replace part. All should be literal (this is VIM).\n  helpers.doEx('s/\\\\(\\\\d+\\\\)/$$ $\\' $` $& \\\\1/g')\n  eq('a $$ $\\' $` $& 0 b', cm.getValue());\n}, { value: 'a 0 b' });\ntestVim('ex_substitute_empty_arguments', function(cm,vim,helpers) {\n  cm.setCursor(0, 0);\n  helpers.doEx('s/a/b/g');\n  cm.setCursor(1, 0);\n  helpers.doEx('s');\n  eq('b b\\nb a', cm.getValue());\n}, {value: 'a a\\na a'});\n\n// More complex substitute tests that test both pcre and nopcre options.\nfunction testSubstitute(name, options) {\n  testVim(name + '_pcre', function(cm, vim, helpers) {\n    cm.setCursor(1, 0);\n    CodeMirror.Vim.setOption('pcre', true);\n    helpers.doEx(options.expr);\n    eq(options.expectedValue, cm.getValue());\n  }, options);\n  // If no noPcreExpr is defined, assume that it's the same as the expr.\n  var noPcreExpr = options.noPcreExpr ? options.noPcreExpr : options.expr;\n  testVim(name + '_nopcre', function(cm, vim, helpers) {\n    cm.setCursor(1, 0);\n    CodeMirror.Vim.setOption('pcre', false);\n    helpers.doEx(noPcreExpr);\n    eq(options.expectedValue, cm.getValue());\n  }, options);\n}\ntestSubstitute('ex_substitute_capture', {\n  value: 'a11 a12 a13',\n  expectedValue: 'a1111 a1212 a1313',\n  // $n is a backreference\n  expr: 's/(\\\\d+)/$1$1/g',\n  // \\n is a backreference.\n  noPcreExpr: 's/\\\\(\\\\d+\\\\)/\\\\1\\\\1/g'});\ntestSubstitute('ex_substitute_capture2', {\n  value: 'a 0 b',\n  expectedValue: 'a $00 b',\n  expr: 's/(\\\\d+)/$$$1$1/g',\n  noPcreExpr: 's/\\\\(\\\\d+\\\\)/$\\\\1\\\\1/g'});\ntestSubstitute('ex_substitute_nocapture', {\n  value: 'a11 a12 a13',\n  expectedValue: 'a$1$1 a$1$1 a$1$1',\n  expr: 's/(\\\\d+)/$$1$$1/g',\n  noPcreExpr: 's/\\\\(\\\\d+\\\\)/$1$1/g'});\ntestSubstitute('ex_substitute_nocapture2', {\n  value: 'a 0 b',\n  expectedValue: 'a $10 b',\n  expr: 's/(\\\\d+)/$$1$1/g',\n  noPcreExpr: 's/\\\\(\\\\d+\\\\)/\\\\$1\\\\1/g'});\ntestSubstitute('ex_substitute_nocapture', {\n  value: 'a b c',\n  expectedValue: 'a $ c',\n  expr: 's/b/$$/',\n  noPcreExpr: 's/b/$/'});\ntestSubstitute('ex_substitute_slash_regex', {\n  value: 'one/two \\n three/four',\n  expectedValue: 'one|two \\n three|four',\n  expr: '%s/\\\\//|'});\ntestSubstitute('ex_substitute_pipe_regex', {\n  value: 'one|two \\n three|four',\n  expectedValue: 'one,two \\n three,four',\n  expr: '%s/\\\\|/,/',\n  noPcreExpr: '%s/|/,/'});\ntestSubstitute('ex_substitute_or_regex', {\n  value: 'one|two \\n three|four',\n  expectedValue: 'ana|twa \\n thraa|faar',\n  expr: '%s/o|e|u/a/g',\n  noPcreExpr: '%s/o\\\\|e\\\\|u/a/g'});\ntestSubstitute('ex_substitute_or_word_regex', {\n  value: 'one|two \\n three|four',\n  expectedValue: 'five|five \\n three|four',\n  expr: '%s/(one|two)/five/g',\n  noPcreExpr: '%s/\\\\(one\\\\|two\\\\)/five/g'});\ntestSubstitute('ex_substitute_backslashslash_regex', {\n  value: 'one\\\\two \\n three\\\\four',\n  expectedValue: 'one,two \\n three,four',\n  expr: '%s/\\\\\\\\/,'});\ntestSubstitute('ex_substitute_slash_replacement', {\n  value: 'one,two \\n three,four',\n  expectedValue: 'one/two \\n three/four',\n  expr: '%s/,/\\\\/'});\ntestSubstitute('ex_substitute_backslash_replacement', {\n  value: 'one,two \\n three,four',\n  expectedValue: 'one\\\\two \\n three\\\\four',\n  expr: '%s/,/\\\\\\\\/g'});\ntestSubstitute('ex_substitute_multibackslash_replacement', {\n  value: 'one,two \\n three,four',\n  expectedValue: 'one\\\\\\\\\\\\\\\\two \\n three\\\\\\\\\\\\\\\\four', // 2*8 backslashes.\n  expr: '%s/,/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/g'}); // 16 backslashes.\ntestSubstitute('ex_substitute_newline_replacement', {\n  value: 'one,two \\n three,four',\n  expectedValue: 'one\\ntwo \\n three\\nfour',\n  expr: '%s/,/\\\\n/g'});\ntestSubstitute('ex_substitute_braces_word', {\n  value: 'ababab abb ab{2}',\n  expectedValue: 'ab abb ab{2}',\n  expr: '%s/(ab){2}//g',\n  noPcreExpr: '%s/\\\\(ab\\\\)\\\\{2\\\\}//g'});\ntestSubstitute('ex_substitute_braces_range', {\n  value: 'a aa aaa aaaa',\n  expectedValue: 'a   a',\n  expr: '%s/a{2,3}//g',\n  noPcreExpr: '%s/a\\\\{2,3\\\\}//g'});\ntestSubstitute('ex_substitute_braces_literal', {\n  value: 'ababab abb ab{2}',\n  expectedValue: 'ababab abb ',\n  expr: '%s/ab\\\\{2\\\\}//g',\n  noPcreExpr: '%s/ab{2}//g'});\ntestSubstitute('ex_substitute_braces_char', {\n  value: 'ababab abb ab{2}',\n  expectedValue: 'ababab  ab{2}',\n  expr: '%s/ab{2}//g',\n  noPcreExpr: '%s/ab\\\\{2\\\\}//g'});\ntestSubstitute('ex_substitute_braces_no_escape', {\n  value: 'ababab abb ab{2}',\n  expectedValue: 'ababab  ab{2}',\n  expr: '%s/ab{2}//g',\n  noPcreExpr: '%s/ab\\\\{2}//g'});\ntestSubstitute('ex_substitute_count', {\n  value: '1\\n2\\n3\\n4',\n  expectedValue: '1\\n0\\n0\\n4',\n  expr: 's/\\\\d/0/i 2'});\ntestSubstitute('ex_substitute_count_with_range', {\n  value: '1\\n2\\n3\\n4',\n  expectedValue: '1\\n2\\n0\\n0',\n  expr: '1,3s/\\\\d/0/ 3'});\ntestSubstitute('ex_substitute_not_global', {\n  value: 'aaa\\nbaa\\ncaa',\n  expectedValue: 'xaa\\nbxa\\ncxa',\n  expr: '%s/a/x/'});\nfunction testSubstituteConfirm(name, command, initialValue, expectedValue, keys, finalPos) {\n  testVim(name, function(cm, vim, helpers) {\n    var savedOpenDialog = cm.openDialog;\n    var savedKeyName = CodeMirror.keyName;\n    var onKeyDown;\n    var recordedCallback;\n    var closed = true; // Start out closed, set false on second openDialog.\n    function close() {\n      closed = true;\n    }\n    // First openDialog should save callback.\n    cm.openDialog = function(template, callback, options) {\n      recordedCallback = callback;\n    }\n    // Do first openDialog.\n    helpers.doKeys(':');\n    // Second openDialog should save keyDown handler.\n    cm.openDialog = function(template, callback, options) {\n      onKeyDown = options.onKeyDown;\n      closed = false;\n    };\n    // Return the command to Vim and trigger second openDialog.\n    recordedCallback(command);\n    // The event should really use keyCode, but here just mock it out and use\n    // key and replace keyName to just return key.\n    CodeMirror.keyName = function (e) { return e.key; }\n    keys = keys.toUpperCase();\n    for (var i = 0; i < keys.length; i++) {\n      is(!closed);\n      onKeyDown({ key: keys.charAt(i) }, '', close);\n    }\n    try {\n      eq(expectedValue, cm.getValue());\n      helpers.assertCursorAt(finalPos);\n      is(closed);\n    } catch(e) {\n      throw e\n    } finally {\n      // Restore overriden functions.\n      CodeMirror.keyName = savedKeyName;\n      cm.openDialog = savedOpenDialog;\n    }\n  }, { value: initialValue });\n}\ntestSubstituteConfirm('ex_substitute_confirm_emptydoc',\n    '%s/x/b/c', '', '', '', makeCursor(0, 0));\ntestSubstituteConfirm('ex_substitute_confirm_nomatch',\n    '%s/x/b/c', 'ba a\\nbab', 'ba a\\nbab', '', makeCursor(0, 0));\ntestSubstituteConfirm('ex_substitute_confirm_accept',\n    '%s/a/b/cg', 'ba a\\nbab', 'bb b\\nbbb', 'yyy', makeCursor(1, 1));\ntestSubstituteConfirm('ex_substitute_confirm_random_keys',\n    '%s/a/b/cg', 'ba a\\nbab', 'bb b\\nbbb', 'ysdkywerty', makeCursor(1, 1));\ntestSubstituteConfirm('ex_substitute_confirm_some',\n    '%s/a/b/cg', 'ba a\\nbab', 'bb a\\nbbb', 'yny', makeCursor(1, 1));\ntestSubstituteConfirm('ex_substitute_confirm_all',\n    '%s/a/b/cg', 'ba a\\nbab', 'bb b\\nbbb', 'a', makeCursor(1, 1));\ntestSubstituteConfirm('ex_substitute_confirm_accept_then_all',\n    '%s/a/b/cg', 'ba a\\nbab', 'bb b\\nbbb', 'ya', makeCursor(1, 1));\ntestSubstituteConfirm('ex_substitute_confirm_quit',\n    '%s/a/b/cg', 'ba a\\nbab', 'bb a\\nbab', 'yq', makeCursor(0, 3));\ntestSubstituteConfirm('ex_substitute_confirm_last',\n    '%s/a/b/cg', 'ba a\\nbab', 'bb b\\nbab', 'yl', makeCursor(0, 3));\ntestSubstituteConfirm('ex_substitute_confirm_oneline',\n    '1s/a/b/cg', 'ba a\\nbab', 'bb b\\nbab', 'yl', makeCursor(0, 3));\ntestSubstituteConfirm('ex_substitute_confirm_range_accept',\n    '1,2s/a/b/cg', 'aa\\na \\na\\na', 'bb\\nb \\na\\na', 'yyy', makeCursor(1, 0));\ntestSubstituteConfirm('ex_substitute_confirm_range_some',\n    '1,3s/a/b/cg', 'aa\\na \\na\\na', 'ba\\nb \\nb\\na', 'ynyy', makeCursor(2, 0));\ntestSubstituteConfirm('ex_substitute_confirm_range_all',\n    '1,3s/a/b/cg', 'aa\\na \\na\\na', 'bb\\nb \\nb\\na', 'a', makeCursor(2, 0));\ntestSubstituteConfirm('ex_substitute_confirm_range_last',\n    '1,3s/a/b/cg', 'aa\\na \\na\\na', 'bb\\nb \\na\\na', 'yyl', makeCursor(1, 0));\n//:noh should clear highlighting of search-results but allow to resume search through n\ntestVim('ex_noh_clearSearchHighlight', function(cm, vim, helpers) {\n  cm.openDialog = helpers.fakeOpenDialog('match');\n  helpers.doKeys('?');\n  helpers.doEx('noh');\n  eq(vim.searchState_.getOverlay(),null,'match-highlighting wasn\\'t cleared');\n  helpers.doKeys('n');\n  helpers.assertCursorAt(0, 11,'can\\'t resume search after clearing highlighting');\n}, { value: 'match nope match \\n nope Match' });\ntestVim('set_boolean', function(cm, vim, helpers) {\n  CodeMirror.Vim.defineOption('testoption', true, 'boolean');\n  // Test default value is set.\n  is(CodeMirror.Vim.getOption('testoption'));\n  expectFail(function() {\n    // Test fail to set to non-boolean\n    CodeMirror.Vim.setOption('testoption', '5');\n  });\n  // Test setOption\n  CodeMirror.Vim.setOption('testoption', false);\n  is(!CodeMirror.Vim.getOption('testoption'));\n});\ntestVim('ex_set_boolean', function(cm, vim, helpers) {\n  CodeMirror.Vim.defineOption('testoption', true, 'boolean');\n  // Test default value is set.\n  is(CodeMirror.Vim.getOption('testoption'));\n  expectFail(function() {\n    // Test fail to set to non-boolean\n    helpers.doEx('set testoption=22');\n  });\n  // Test setOption\n  helpers.doEx('set notestoption');\n  is(!CodeMirror.Vim.getOption('testoption'));\n});\ntestVim('set_string', function(cm, vim, helpers) {\n  CodeMirror.Vim.defineOption('testoption', 'a', 'string');\n  // Test default value is set.\n  eq('a', CodeMirror.Vim.getOption('testoption'));\n  expectFail(function() {\n    // Test fail to set non-string.\n    CodeMirror.Vim.setOption('testoption', true);\n  });\n  expectFail(function() {\n    // Test fail to set 'notestoption'\n    CodeMirror.Vim.setOption('notestoption', 'b');\n  });\n  // Test setOption\n  CodeMirror.Vim.setOption('testoption', 'c');\n  eq('c', CodeMirror.Vim.getOption('testoption'));\n});\ntestVim('ex_set_string', function(cm, vim, helpers) {\n  CodeMirror.Vim.defineOption('testopt', 'a', 'string');\n  // Test default value is set.\n  eq('a', CodeMirror.Vim.getOption('testopt'));\n  expectFail(function() {\n    // Test fail to set 'notestopt'\n    helpers.doEx('set notestopt=b');\n  });\n  // Test setOption\n  helpers.doEx('set testopt=c')\n  eq('c', CodeMirror.Vim.getOption('testopt'));\n  helpers.doEx('set testopt=c')\n  eq('c', CodeMirror.Vim.getOption('testopt', cm)); //local || global\n  eq('c', CodeMirror.Vim.getOption('testopt', cm, {scope: 'local'})); // local\n  eq('c', CodeMirror.Vim.getOption('testopt', cm, {scope: 'global'})); // global\n  eq('c', CodeMirror.Vim.getOption('testopt')); // global\n  // Test setOption global\n  helpers.doEx('setg testopt=d')\n  eq('c', CodeMirror.Vim.getOption('testopt', cm));\n  eq('c', CodeMirror.Vim.getOption('testopt', cm, {scope: 'local'}));\n  eq('d', CodeMirror.Vim.getOption('testopt', cm, {scope: 'global'}));\n  eq('d', CodeMirror.Vim.getOption('testopt'));\n  // Test setOption local\n  helpers.doEx('setl testopt=e')\n  eq('e', CodeMirror.Vim.getOption('testopt', cm));\n  eq('e', CodeMirror.Vim.getOption('testopt', cm, {scope: 'local'}));\n  eq('d', CodeMirror.Vim.getOption('testopt', cm, {scope: 'global'}));\n  eq('d', CodeMirror.Vim.getOption('testopt'));\n});\ntestVim('ex_set_callback', function(cm, vim, helpers) {\n  var global;\n\n  function cb(val, cm, cfg) {\n    if (val === undefined) {\n      // Getter\n      if (cm) {\n        return cm._local;\n      } else {\n        return global;\n      }\n    } else {\n      // Setter\n      if (cm) {\n        cm._local = val;\n      } else {\n        global = val;\n      }\n    }\n  }\n\n  CodeMirror.Vim.defineOption('testopt', 'a', 'string', cb);\n  // Test default value is set.\n  eq('a', CodeMirror.Vim.getOption('testopt'));\n  expectFail(function() {\n    // Test fail to set 'notestopt'\n    helpers.doEx('set notestopt=b');\n  });\n  // Test setOption (Identical to the string tests, but via callback instead)\n  helpers.doEx('set testopt=c')\n  eq('c', CodeMirror.Vim.getOption('testopt', cm)); //local || global\n  eq('c', CodeMirror.Vim.getOption('testopt', cm, {scope: 'local'})); // local\n  eq('c', CodeMirror.Vim.getOption('testopt', cm, {scope: 'global'})); // global\n  eq('c', CodeMirror.Vim.getOption('testopt')); // global\n  // Test setOption global\n  helpers.doEx('setg testopt=d')\n  eq('c', CodeMirror.Vim.getOption('testopt', cm));\n  eq('c', CodeMirror.Vim.getOption('testopt', cm, {scope: 'local'}));\n  eq('d', CodeMirror.Vim.getOption('testopt', cm, {scope: 'global'}));\n  eq('d', CodeMirror.Vim.getOption('testopt'));\n  // Test setOption local\n  helpers.doEx('setl testopt=e')\n  eq('e', CodeMirror.Vim.getOption('testopt', cm));\n  eq('e', CodeMirror.Vim.getOption('testopt', cm, {scope: 'local'}));\n  eq('d', CodeMirror.Vim.getOption('testopt', cm, {scope: 'global'}));\n  eq('d', CodeMirror.Vim.getOption('testopt'));\n})\ntestVim('ex_set_filetype', function(cm, vim, helpers) {\n  CodeMirror.defineMode('test_mode', function() {\n    return {token: function(stream) {\n      stream.match(/^\\s+|^\\S+/);\n    }};\n  });\n  CodeMirror.defineMode('test_mode_2', function() {\n    return {token: function(stream) {\n      stream.match(/^\\s+|^\\S+/);\n    }};\n  });\n  // Test mode is set.\n  helpers.doEx('set filetype=test_mode');\n  eq('test_mode', cm.getMode().name);\n  // Test 'ft' alias also sets mode.\n  helpers.doEx('set ft=test_mode_2');\n  eq('test_mode_2', cm.getMode().name);\n});\ntestVim('ex_set_filetype_null', function(cm, vim, helpers) {\n  CodeMirror.defineMode('test_mode', function() {\n    return {token: function(stream) {\n      stream.match(/^\\s+|^\\S+/);\n    }};\n  });\n  cm.setOption('mode', 'test_mode');\n  // Test mode is set to null.\n  helpers.doEx('set filetype=');\n  eq('null', cm.getMode().name);\n});\n// TODO: Reset key maps after each test.\ntestVim('ex_map_key2key', function(cm, vim, helpers) {\n  helpers.doEx('map a x');\n  helpers.doKeys('a');\n  helpers.assertCursorAt(0, 0);\n  eq('bc', cm.getValue());\n}, { value: 'abc' });\ntestVim('ex_unmap_key2key', function(cm, vim, helpers) {\n  helpers.doEx('unmap a');\n  helpers.doKeys('a');\n  eq('vim-insert', cm.getOption('keyMap'));\n}, { value: 'abc' });\ntestVim('ex_unmap_key2key_does_not_remove_default', function(cm, vim, helpers) {\n  expectFail(function() {\n    helpers.doEx('unmap a');\n  });\n  helpers.doKeys('a');\n  eq('vim-insert', cm.getOption('keyMap'));\n}, { value: 'abc' });\ntestVim('ex_map_key2key_to_colon', function(cm, vim, helpers) {\n  helpers.doEx('map ; :');\n  var dialogOpened = false;\n  cm.openDialog = function() {\n    dialogOpened = true;\n  }\n  helpers.doKeys(';');\n  eq(dialogOpened, true);\n});\ntestVim('ex_map_ex2key:', function(cm, vim, helpers) {\n  helpers.doEx('map :del x');\n  helpers.doEx('del');\n  helpers.assertCursorAt(0, 0);\n  eq('bc', cm.getValue());\n}, { value: 'abc' });\ntestVim('ex_map_ex2ex', function(cm, vim, helpers) {\n  helpers.doEx('map :del :w');\n  var tmp = CodeMirror.commands.save;\n  var written = false;\n  var actualCm;\n  CodeMirror.commands.save = function(cm) {\n    written = true;\n    actualCm = cm;\n  };\n  helpers.doEx('del');\n  CodeMirror.commands.save = tmp;\n  eq(written, true);\n  eq(actualCm, cm);\n});\ntestVim('ex_map_key2ex', function(cm, vim, helpers) {\n  helpers.doEx('map a :w');\n  var tmp = CodeMirror.commands.save;\n  var written = false;\n  var actualCm;\n  CodeMirror.commands.save = function(cm) {\n    written = true;\n    actualCm = cm;\n  };\n  helpers.doKeys('a');\n  CodeMirror.commands.save = tmp;\n  eq(written, true);\n  eq(actualCm, cm);\n});\ntestVim('ex_map_key2key_visual_api', function(cm, vim, helpers) {\n  CodeMirror.Vim.map('b', ':w', 'visual');\n  var tmp = CodeMirror.commands.save;\n  var written = false;\n  var actualCm;\n  CodeMirror.commands.save = function(cm) {\n    written = true;\n    actualCm = cm;\n  };\n  // Mapping should not work in normal mode.\n  helpers.doKeys('b');\n  eq(written, false);\n  // Mapping should work in visual mode.\n  helpers.doKeys('v', 'b');\n  eq(written, true);\n  eq(actualCm, cm);\n\n  CodeMirror.commands.save = tmp;\n});\ntestVim('ex_imap', function(cm, vim, helpers) {\n  CodeMirror.Vim.map('jk', '<Esc>', 'insert');\n  helpers.doKeys('i');\n  is(vim.insertMode);\n  helpers.doKeys('j', 'k');\n  is(!vim.insertMode);\n  cm.setCursor(0, 1);\n  CodeMirror.Vim.map('jj', '<Esc>', 'insert');\n  helpers.doKeys('<C-v>', '2', 'j', 'l', 'c');\n  var replacement = fillArray('fo', 3);\n  cm.replaceSelections(replacement);\n  eq('1fo4\\n5fo8\\nafodefg', cm.getValue());\n  helpers.doKeys('j', 'j');\n  cm.setCursor(0, 0);\n  helpers.doKeys('.');\n  eq('foo4\\nfoo8\\nfoodefg', cm.getValue());\n}, { value: '1234\\n5678\\nabcdefg' });\ntestVim('ex_unmap_api', function(cm, vim, helpers) {\n  CodeMirror.Vim.map('<Alt-X>', 'gg', 'normal');\n  is(CodeMirror.Vim.handleKey(cm, \"<Alt-X>\", \"normal\"), \"Alt-X key is mapped\");\n  CodeMirror.Vim.unmap(\"<Alt-X>\", \"normal\");\n  is(!CodeMirror.Vim.handleKey(cm, \"<Alt-X>\", \"normal\"), \"Alt-X key is unmapped\");\n});\n\n// Testing registration of functions as ex-commands and mapping to <Key>-keys\ntestVim('ex_api_test', function(cm, vim, helpers) {\n  var res=false;\n  var val='from';\n  CodeMirror.Vim.defineEx('extest','ext',function(cm,params){\n    if(params.args)val=params.args[0];\n    else res=true;\n  });\n  helpers.doEx(':ext to');\n  eq(val,'to','Defining ex-command failed');\n  CodeMirror.Vim.map('<C-CR><Space>',':ext');\n  helpers.doKeys('<C-CR>','<Space>');\n  is(res,'Mapping to key failed');\n});\n// For now, this test needs to be last because it messes up : for future tests.\ntestVim('ex_map_key2key_from_colon', function(cm, vim, helpers) {\n  helpers.doEx('map : x');\n  helpers.doKeys(':');\n  helpers.assertCursorAt(0, 0);\n  eq('bc', cm.getValue());\n}, { value: 'abc' });\n\n// Test event handlers\ntestVim('beforeSelectionChange', function(cm, vim, helpers) {\n  cm.setCursor(0, 100);\n  eqPos(cm.getCursor('head'), cm.getCursor('anchor'));\n}, { value: 'abc' });\n\n\n});\n\n\nif (typeof module !== \"undefined\" && module === require.main) {\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n}\n"
  },
  {
    "path": "lib/ace/layer/cursor.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar dom = require(\"../lib/dom\");\nvar isIE8;\n\nvar Cursor = function(parentEl) {\n    this.element = dom.createElement(\"div\");\n    this.element.className = \"ace_layer ace_cursor-layer\";\n    parentEl.appendChild(this.element);\n    \n    if (isIE8 === undefined)\n        isIE8 = !(\"opacity\" in this.element.style);\n\n    this.isVisible = false;\n    this.isBlinking = true;\n    this.blinkInterval = 1000;\n    this.smoothBlinking = false;\n\n    this.cursors = [];\n    this.cursor = this.addCursor();\n    dom.addCssClass(this.element, \"ace_hidden-cursors\");\n    this.$updateCursors = (isIE8\n        ? this.$updateVisibility\n        : this.$updateOpacity).bind(this);\n};\n\n(function() {\n    \n    this.$updateVisibility = function(val) {\n        var cursors = this.cursors;\n        for (var i = cursors.length; i--; )\n            cursors[i].style.visibility = val ? \"\" : \"hidden\";\n    };\n    this.$updateOpacity = function(val) {\n        var cursors = this.cursors;\n        for (var i = cursors.length; i--; )\n            cursors[i].style.opacity = val ? \"\" : \"0\";\n    };\n    \n\n    this.$padding = 0;\n    this.setPadding = function(padding) {\n        this.$padding = padding;\n    };\n\n    this.setSession = function(session) {\n        this.session = session;\n    };\n\n    this.setBlinking = function(blinking) {\n        if (blinking != this.isBlinking){\n            this.isBlinking = blinking;\n            this.restartTimer();\n        }\n    };\n\n    this.setBlinkInterval = function(blinkInterval) {\n        if (blinkInterval != this.blinkInterval){\n            this.blinkInterval = blinkInterval;\n            this.restartTimer();\n        }\n    };\n\n    this.setSmoothBlinking = function(smoothBlinking) {\n        if (smoothBlinking != this.smoothBlinking && !isIE8) {\n            this.smoothBlinking = smoothBlinking;\n            dom.setCssClass(this.element, \"ace_smooth-blinking\", smoothBlinking);\n            this.$updateCursors(true);\n            this.$updateCursors = (this.$updateOpacity).bind(this);\n            this.restartTimer();\n        }\n    };\n\n    this.addCursor = function() {\n        var el = dom.createElement(\"div\");\n        el.className = \"ace_cursor\";\n        this.element.appendChild(el);\n        this.cursors.push(el);\n        return el;\n    };\n\n    this.removeCursor = function() {\n        if (this.cursors.length > 1) {\n            var el = this.cursors.pop();\n            el.parentNode.removeChild(el);\n            return el;\n        }\n    };\n\n    this.hideCursor = function() {\n        this.isVisible = false;\n        dom.addCssClass(this.element, \"ace_hidden-cursors\");\n        this.restartTimer();\n    };\n\n    this.showCursor = function() {\n        this.isVisible = true;\n        dom.removeCssClass(this.element, \"ace_hidden-cursors\");\n        this.restartTimer();\n    };\n\n    this.restartTimer = function() {\n        var update = this.$updateCursors;\n        clearInterval(this.intervalId);\n        clearTimeout(this.timeoutId);\n        if (this.smoothBlinking) {\n            dom.removeCssClass(this.element, \"ace_smooth-blinking\");\n        }\n        \n        update(true);\n\n        if (!this.isBlinking || !this.blinkInterval || !this.isVisible)\n            return;\n\n        if (this.smoothBlinking) {\n            setTimeout(function(){\n                dom.addCssClass(this.element, \"ace_smooth-blinking\");\n            }.bind(this));\n        }\n        \n        var blink = function(){\n            this.timeoutId = setTimeout(function() {\n                update(false);\n            }, 0.6 * this.blinkInterval);\n        }.bind(this);\n\n        this.intervalId = setInterval(function() {\n            update(true);\n            blink();\n        }, this.blinkInterval);\n\n        blink();\n    };\n\n    this.getPixelPosition = function(position, onScreen) {\n        if (!this.config || !this.session)\n            return {left : 0, top : 0};\n\n        if (!position)\n            position = this.session.selection.getCursor();\n        var pos = this.session.documentToScreenPosition(position);\n        var cursorLeft = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, position.row)\n            ? this.session.$bidiHandler.getPosLeft(pos.column)\n            : pos.column * this.config.characterWidth);\n\n        var cursorTop = (pos.row - (onScreen ? this.config.firstRowScreen : 0)) *\n            this.config.lineHeight;\n\n        return {left : cursorLeft, top : cursorTop};\n    };\n\n    this.update = function(config) {\n        this.config = config;\n\n        var selections = this.session.$selectionMarkers;\n        var i = 0, cursorIndex = 0;\n\n        if (selections === undefined || selections.length === 0){\n            selections = [{cursor: null}];\n        }\n\n        for (var i = 0, n = selections.length; i < n; i++) {\n            var pixelPos = this.getPixelPosition(selections[i].cursor, true);\n            if ((pixelPos.top > config.height + config.offset ||\n                 pixelPos.top < 0) && i > 1) {\n                continue;\n            }\n\n            var style = (this.cursors[cursorIndex++] || this.addCursor()).style;\n            \n            if (!this.drawCursor) {\n                style.left = pixelPos.left + \"px\";\n                style.top = pixelPos.top + \"px\";\n                style.width = config.characterWidth + \"px\";\n                style.height = config.lineHeight + \"px\";\n            } else {\n                this.drawCursor(style, pixelPos, config, selections[i], this.session);\n            }\n        }\n        while (this.cursors.length > cursorIndex)\n            this.removeCursor();\n\n        var overwrite = this.session.getOverwrite();\n        this.$setOverwrite(overwrite);\n\n        // cache for textarea and gutter highlight\n        this.$pixelPos = pixelPos;\n        this.restartTimer();\n    };\n    \n    this.drawCursor = null;\n\n    this.$setOverwrite = function(overwrite) {\n        if (overwrite != this.overwrite) {\n            this.overwrite = overwrite;\n            if (overwrite)\n                dom.addCssClass(this.element, \"ace_overwrite-cursors\");\n            else\n                dom.removeCssClass(this.element, \"ace_overwrite-cursors\");\n        }\n    };\n\n    this.destroy = function() {\n        clearInterval(this.intervalId);\n        clearTimeout(this.timeoutId);\n    };\n\n}).call(Cursor.prototype);\n\nexports.Cursor = Cursor;\n\n});\n"
  },
  {
    "path": "lib/ace/layer/font_metrics.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\nvar oop = require(\"../lib/oop\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar useragent = require(\"../lib/useragent\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\n\nvar CHAR_COUNT = 0;\n\nvar FontMetrics = exports.FontMetrics = function(parentEl) {\n    this.el = dom.createElement(\"div\");\n    this.$setMeasureNodeStyles(this.el.style, true);\n    \n    this.$main = dom.createElement(\"div\");\n    this.$setMeasureNodeStyles(this.$main.style);\n    \n    this.$measureNode = dom.createElement(\"div\");\n    this.$setMeasureNodeStyles(this.$measureNode.style);\n    \n    \n    this.el.appendChild(this.$main);\n    this.el.appendChild(this.$measureNode);\n    parentEl.appendChild(this.el);\n    \n    if (!CHAR_COUNT)\n        this.$testFractionalRect();\n    this.$measureNode.innerHTML = lang.stringRepeat(\"X\", CHAR_COUNT);\n    \n    this.$characterSize = {width: 0, height: 0};\n    this.checkForSizeChanges();\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n        \n    this.$characterSize = {width: 0, height: 0};\n    \n    this.$testFractionalRect = function() {\n        var el = dom.createElement(\"div\");\n        this.$setMeasureNodeStyles(el.style);\n        el.style.width = \"0.2px\";\n        document.documentElement.appendChild(el);\n        var w = el.getBoundingClientRect().width;\n        if (w > 0 && w < 1)\n            CHAR_COUNT = 50;\n        else\n            CHAR_COUNT = 100;\n        el.parentNode.removeChild(el);\n    };\n    \n    this.$setMeasureNodeStyles = function(style, isRoot) {\n        style.width = style.height = \"auto\";\n        style.left = style.top = \"0px\";\n        style.visibility = \"hidden\";\n        style.position = \"absolute\";\n        style.whiteSpace = \"pre\";\n\n        if (useragent.isIE < 8) {\n            style[\"font-family\"] = \"inherit\";\n        } else {\n            style.font = \"inherit\";\n        }\n        style.overflow = isRoot ? \"hidden\" : \"visible\";\n    };\n\n    this.checkForSizeChanges = function() {\n        var size = this.$measureSizes();\n        if (size && (this.$characterSize.width !== size.width || this.$characterSize.height !== size.height)) {\n            this.$measureNode.style.fontWeight = \"bold\";\n            var boldSize = this.$measureSizes();\n            this.$measureNode.style.fontWeight = \"\";\n            this.$characterSize = size;\n            this.charSizes = Object.create(null);\n            this.allowBoldFonts = boldSize && boldSize.width === size.width && boldSize.height === size.height;\n            this._emit(\"changeCharacterSize\", {data: size});\n        }\n    };\n\n    this.$pollSizeChanges = function() {\n        if (this.$pollSizeChangesTimer)\n            return this.$pollSizeChangesTimer;\n        var self = this;\n        return this.$pollSizeChangesTimer = setInterval(function() {\n            self.checkForSizeChanges();\n        }, 500);\n    };\n    \n    this.setPolling = function(val) {\n        if (val) {\n            this.$pollSizeChanges();\n        } else if (this.$pollSizeChangesTimer) {\n            clearInterval(this.$pollSizeChangesTimer);\n            this.$pollSizeChangesTimer = 0;\n        }\n    };\n\n    this.$measureSizes = function() {\n        if (CHAR_COUNT === 50) {\n            var rect = null;\n            try { \n               rect = this.$measureNode.getBoundingClientRect();\n            } catch(e) {\n               rect = {width: 0, height:0 };\n            }\n            var size = {\n                height: rect.height,\n                width: rect.width / CHAR_COUNT\n            };\n        } else {\n            var size = {\n                height: this.$measureNode.clientHeight,\n                width: this.$measureNode.clientWidth / CHAR_COUNT\n            };\n        }\n        // Size and width can be null if the editor is not visible or\n        // detached from the document\n        if (size.width === 0 || size.height === 0)\n            return null;\n        return size;\n    };\n\n    this.$measureCharWidth = function(ch) {\n        this.$main.innerHTML = lang.stringRepeat(ch, CHAR_COUNT);\n        var rect = this.$main.getBoundingClientRect();\n        return rect.width / CHAR_COUNT;\n    };\n    \n    this.getCharacterWidth = function(ch) {\n        var w = this.charSizes[ch];\n        if (w === undefined) {\n            w = this.charSizes[ch] = this.$measureCharWidth(ch) / this.$characterSize.width;\n        }\n        return w;\n    };\n\n    this.destroy = function() {\n        clearInterval(this.$pollSizeChangesTimer);\n        if (this.el && this.el.parentNode)\n            this.el.parentNode.removeChild(this.el);\n    };\n\n}).call(FontMetrics.prototype);\n\n});\n"
  },
  {
    "path": "lib/ace/layer/gutter.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar dom = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\n\nvar Gutter = function(parentEl) {\n    this.element = dom.createElement(\"div\");\n    this.element.className = \"ace_layer ace_gutter-layer\";\n    parentEl.appendChild(this.element);\n    this.setShowFoldWidgets(this.$showFoldWidgets);\n    \n    this.gutterWidth = 0;\n\n    this.$annotations = [];\n    this.$updateAnnotations = this.$updateAnnotations.bind(this);\n\n    this.$cells = [];\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n\n    this.setSession = function(session) {\n        if (this.session)\n            this.session.removeEventListener(\"change\", this.$updateAnnotations);\n        this.session = session;\n        if (session)\n            session.on(\"change\", this.$updateAnnotations);\n    };\n\n    this.addGutterDecoration = function(row, className){\n        if (window.console)\n            console.warn && console.warn(\"deprecated use session.addGutterDecoration\");\n        this.session.addGutterDecoration(row, className);\n    };\n\n    this.removeGutterDecoration = function(row, className){\n        if (window.console)\n            console.warn && console.warn(\"deprecated use session.removeGutterDecoration\");\n        this.session.removeGutterDecoration(row, className);\n    };\n\n    this.setAnnotations = function(annotations) {\n        // iterate over sparse array\n        this.$annotations = [];\n        for (var i = 0; i < annotations.length; i++) {\n            var annotation = annotations[i];\n            var row = annotation.row;\n            var rowInfo = this.$annotations[row];\n            if (!rowInfo)\n                rowInfo = this.$annotations[row] = {text: []};\n           \n            var annoText = annotation.text;\n            annoText = annoText ? lang.escapeHTML(annoText) : annotation.html || \"\";\n\n            if (rowInfo.text.indexOf(annoText) === -1)\n                rowInfo.text.push(annoText);\n\n            var type = annotation.type;\n            if (type == \"error\")\n                rowInfo.className = \" ace_error\";\n            else if (type == \"warning\" && rowInfo.className != \" ace_error\")\n                rowInfo.className = \" ace_warning\";\n            else if (type == \"info\" && (!rowInfo.className))\n                rowInfo.className = \" ace_info\";\n        }\n    };\n\n    this.$updateAnnotations = function (delta) {\n        if (!this.$annotations.length)\n            return;\n        var firstRow = delta.start.row;\n        var len = delta.end.row - firstRow;\n        if (len === 0) {\n            // do nothing\n        } else if (delta.action == 'remove') {\n            this.$annotations.splice(firstRow, len + 1, null);\n        } else {\n            var args = new Array(len + 1);\n            args.unshift(firstRow, 1);\n            this.$annotations.splice.apply(this.$annotations, args);\n        }\n    };\n\n    this.update = function(config) {\n        var session = this.session;\n        var firstRow = config.firstRow;\n        var lastRow = Math.min(config.lastRow + config.gutterOffset,  // needed to compensate for hor scollbar\n            session.getLength() - 1);\n        var fold = session.getNextFoldLine(firstRow);\n        var foldStart = fold ? fold.start.row : Infinity;\n        var foldWidgets = this.$showFoldWidgets && session.foldWidgets;\n        var breakpoints = session.$breakpoints;\n        var decorations = session.$decorations;\n        var firstLineNumber = session.$firstLineNumber;\n        var lastLineNumber = 0;\n        \n        var gutterRenderer = session.gutterRenderer || this.$renderer;\n\n        var cell = null;\n        var index = -1;\n        var row = firstRow;\n        while (true) {\n            if (row > foldStart) {\n                row = fold.end.row + 1;\n                fold = session.getNextFoldLine(row, fold);\n                foldStart = fold ? fold.start.row : Infinity;\n            }\n            if (row > lastRow) {\n                while (this.$cells.length > index + 1) {\n                    cell = this.$cells.pop();\n                    this.element.removeChild(cell.element);\n                }\n                break;\n            }\n\n            cell = this.$cells[++index];\n            if (!cell) {\n                cell = {element: null, textNode: null, foldWidget: null};\n                cell.element = dom.createElement(\"div\");\n                cell.textNode = document.createTextNode('');\n                cell.element.appendChild(cell.textNode);\n                this.element.appendChild(cell.element);\n                this.$cells[index] = cell;\n            }\n\n            var className = \"ace_gutter-cell \";\n            if (breakpoints[row])\n                className += breakpoints[row];\n            if (decorations[row])\n                className += decorations[row];\n            if (this.$annotations[row])\n                className += this.$annotations[row].className;\n            if (cell.element.className != className)\n                cell.element.className = className;\n\n            var height = session.getRowLength(row) * config.lineHeight + \"px\";\n            if (height != cell.element.style.height)\n                cell.element.style.height = height;\n\n            if (foldWidgets) {\n                var c = foldWidgets[row];\n                // check if cached value is invalidated and we need to recompute\n                if (c == null)\n                    c = foldWidgets[row] = session.getFoldWidget(row);\n            }\n\n            if (c) {\n                if (!cell.foldWidget) {\n                    cell.foldWidget = dom.createElement(\"span\");\n                    cell.element.appendChild(cell.foldWidget);\n                }\n                var className = \"ace_fold-widget ace_\" + c;\n                if (c == \"start\" && row == foldStart && row < fold.end.row)\n                    className += \" ace_closed\";\n                else\n                    className += \" ace_open\";\n                if (cell.foldWidget.className != className)\n                    cell.foldWidget.className = className;\n\n                var height = config.lineHeight + \"px\";\n                if (cell.foldWidget.style.height != height)\n                    cell.foldWidget.style.height = height;\n            } else {\n                if (cell.foldWidget) {\n                    cell.element.removeChild(cell.foldWidget);\n                    cell.foldWidget = null;\n                }\n            }\n            \n            var text = lastLineNumber = gutterRenderer\n                ? gutterRenderer.getText(session, row)\n                : row + firstLineNumber;\n            if (text !== cell.textNode.data)\n                cell.textNode.data = text;\n\n            row++;\n        }\n\n        this.element.style.height = config.minHeight + \"px\";\n\n        if (this.$fixedWidth || session.$useWrapMode)\n            lastLineNumber = session.getLength() + firstLineNumber;\n\n        var gutterWidth = gutterRenderer \n            ? gutterRenderer.getWidth(session, lastLineNumber, config)\n            : lastLineNumber.toString().length * config.characterWidth;\n        \n        var padding = this.$padding || this.$computePadding();\n        gutterWidth += padding.left + padding.right;\n        if (gutterWidth !== this.gutterWidth && !isNaN(gutterWidth)) {\n            this.gutterWidth = gutterWidth;\n            this.element.style.width = Math.ceil(this.gutterWidth) + \"px\";\n            this._emit(\"changeGutterWidth\", gutterWidth);\n        }\n    };\n\n    this.$fixedWidth = false;\n    \n    this.$showLineNumbers = true;\n    this.$renderer = \"\";\n    this.setShowLineNumbers = function(show) {\n        this.$renderer = !show && {\n            getWidth: function() {return \"\";},\n            getText: function() {return \"\";}\n        };\n    };\n    \n    this.getShowLineNumbers = function() {\n        return this.$showLineNumbers;\n    };\n    \n    this.$showFoldWidgets = true;\n    this.setShowFoldWidgets = function(show) {\n        if (show)\n            dom.addCssClass(this.element, \"ace_folding-enabled\");\n        else\n            dom.removeCssClass(this.element, \"ace_folding-enabled\");\n\n        this.$showFoldWidgets = show;\n        this.$padding = null;\n    };\n    \n    this.getShowFoldWidgets = function() {\n        return this.$showFoldWidgets;\n    };\n\n    this.$computePadding = function() {\n        if (!this.element.firstChild)\n            return {left: 0, right: 0};\n        var style = dom.computedStyle(this.element.firstChild);\n        this.$padding = {};\n        this.$padding.left = parseInt(style.paddingLeft) + 1 || 0;\n        this.$padding.right = parseInt(style.paddingRight) || 0;\n        return this.$padding;\n    };\n\n    this.getRegion = function(point) {\n        var padding = this.$padding || this.$computePadding();\n        var rect = this.element.getBoundingClientRect();\n        if (point.x < padding.left + rect.left)\n            return \"markers\";\n        if (this.$showFoldWidgets && point.x > rect.right - padding.right)\n            return \"foldWidgets\";\n    };\n\n}).call(Gutter.prototype);\n\nexports.Gutter = Gutter;\n\n});\n"
  },
  {
    "path": "lib/ace/layer/marker.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\nvar dom = require(\"../lib/dom\");\n\nvar Marker = function(parentEl) {\n    this.element = dom.createElement(\"div\");\n    this.element.className = \"ace_layer ace_marker-layer\";\n    parentEl.appendChild(this.element);\n};\n\n(function() {\n\n    this.$padding = 0;\n\n    this.setPadding = function(padding) {\n        this.$padding = padding;\n    };\n    this.setSession = function(session) {\n        this.session = session;\n    };\n    \n    this.setMarkers = function(markers) {\n        this.markers = markers;\n    };\n\n    this.update = function(config) {\n        if (!config) return;\n\n        this.config = config;\n\n\n        var html = [];\n        for (var key in this.markers) {\n            var marker = this.markers[key];\n\n            if (!marker.range) {\n                marker.update(html, this, this.session, config);\n                continue;\n            }\n\n            var range = marker.range.clipRows(config.firstRow, config.lastRow);\n            if (range.isEmpty()) continue;\n\n            range = range.toScreenRange(this.session);\n            if (marker.renderer) {\n                var top = this.$getTop(range.start.row, config);\n                var left = this.$padding + (this.session.$bidiHandler.isBidiRow(range.start.row)\n                    ? this.session.$bidiHandler.getPosLeft(range.start.column)\n                    : range.start.column * config.characterWidth);\n                marker.renderer(html, range, left, top, config);\n            } else if (marker.type == \"fullLine\") {\n                this.drawFullLineMarker(html, range, marker.clazz, config);\n            } else if (marker.type == \"screenLine\") {\n                this.drawScreenLineMarker(html, range, marker.clazz, config);\n            } else if (range.isMultiLine()) {\n                if (marker.type == \"text\")\n                    this.drawTextMarker(html, range, marker.clazz, config);\n                else\n                    this.drawMultiLineMarker(html, range, marker.clazz, config);\n            } else {\n                if (this.session.$bidiHandler.isBidiRow(range.start.row)) {\n                    this.drawBidiSingleLineMarker(html, range, marker.clazz + \" ace_start\" + \" ace_br15\", config);\n                } else {\n                    this.drawSingleLineMarker(html, range, marker.clazz + \" ace_start\" + \" ace_br15\", config);\n                }\n            }\n        }\n        this.element.innerHTML = html.join(\"\");\n    };\n\n    this.$getTop = function(row, layerConfig) {\n        return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight;\n    };\n\n    function getBorderClass(tl, tr, br, bl) {\n        return (tl ? 1 : 0) | (tr ? 2 : 0) | (br ? 4 : 0) | (bl ? 8 : 0);\n    }\n    // Draws a marker, which spans a range of text on multiple lines \n    this.drawTextMarker = function(stringBuilder, range, clazz, layerConfig, extraStyle) {\n        var session = this.session;\n        var start = range.start.row;\n        var end = range.end.row;\n        var row = start;\n        var prev = 0; \n        var curr = 0;\n        var next = session.getScreenLastRowColumn(row);\n        var clazzModified = null;\n        var lineRange = new Range(row, range.start.column, row, curr);\n        for (; row <= end; row++) {\n            lineRange.start.row = lineRange.end.row = row;\n            lineRange.start.column = row == start ? range.start.column : session.getRowWrapIndent(row);\n            lineRange.end.column = next;\n            prev = curr;\n            curr = next;\n            next = row + 1 < end ? session.getScreenLastRowColumn(row + 1) : row == end ? 0 : range.end.column;\n            clazzModified = clazz + (row == start  ? \" ace_start\" : \"\") + \" ace_br\"\n                + getBorderClass(row == start || row == start + 1 && range.start.column, prev < curr, curr > next, row == end);\n            \n            if (this.session.$bidiHandler.isBidiRow(row)) {\n                this.drawBidiSingleLineMarker(stringBuilder, lineRange, clazzModified, \n                    layerConfig, row == end ? 0 : 1, extraStyle);\n            } else {\n                this.drawSingleLineMarker(stringBuilder, lineRange, clazzModified,  \n                    layerConfig, row == end ? 0 : 1, extraStyle);\n            }\n        }\n    };\n\n    // Draws a multi line marker, where lines span the full width\n    this.drawMultiLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {\n        // from selection start to the end of the line\n        var padding = this.$padding;\n        var height, top, left;\n        extraStyle = extraStyle || \"\";\n       if (this.session.$bidiHandler.isBidiRow(range.start.row)) {\n           var range1 = range.clone();\n           range1.end.row = range1.start.row;\n           range1.end.column = this.session.getLine(range1.start.row).length;\n           this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + \" ace_br1 ace_start\", config, null, extraStyle);\n        } else {\n           height = config.lineHeight;\n           top = this.$getTop(range.start.row, config);\n           left = padding + range.start.column * config.characterWidth;\n           stringBuilder.push(\n               \"<div class='\", clazz, \" ace_br1 ace_start' style='\",\n               \"height:\", height, \"px;\",\n               \"right:0;\",\n               \"top:\", top, \"px;\",\n               \"left:\", left, \"px;\", extraStyle, \"'></div>\"\n           );\n        }\n        // from start of the last line to the selection end\n        if (this.session.$bidiHandler.isBidiRow(range.end.row)) {\n           var range1 = range.clone();\n           range1.start.row = range1.end.row;\n           range1.start.column = 0;\n           this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + \" ace_br12\", config, null, extraStyle);\n        } else {\n           var width = range.end.column * config.characterWidth;\n           height = config.lineHeight;\n           top = this.$getTop(range.end.row, config);\n           stringBuilder.push(\n               \"<div class='\", clazz, \" ace_br12' style='\",\n               \"height:\", height, \"px;\",\n               \"width:\", width, \"px;\",\n               \"top:\", top, \"px;\",\n               \"left:\", padding, \"px;\", extraStyle, \"'></div>\"\n           );\n        }\n        // all the complete lines\n        height = (range.end.row - range.start.row - 1) * config.lineHeight;\n        if (height <= 0)\n            return;\n        top = this.$getTop(range.start.row + 1, config);\n        \n        var radiusClass = (range.start.column ? 1 : 0) | (range.end.column ? 0 : 8);\n\n        stringBuilder.push(\n            \"<div class='\", clazz, (radiusClass ? \" ace_br\" + radiusClass : \"\"), \"' style='\",\n            \"height:\", height, \"px;\",\n            \"right:0;\",\n            \"top:\", top, \"px;\",\n            \"left:\", padding, \"px;\", extraStyle, \"'></div>\"\n        );\n    };\n\n    // Draws a marker which covers part or whole width of a single screen line\n    this.drawSingleLineMarker = function(stringBuilder, range, clazz, config, extraLength, extraStyle) {\n        var height = config.lineHeight;\n        var width = (range.end.column + (extraLength || 0) - range.start.column) * config.characterWidth;\n\n        var top = this.$getTop(range.start.row, config);\n        var left = this.$padding + range.start.column * config.characterWidth;\n\n        stringBuilder.push(\n            \"<div class='\", clazz, \"' style='\",\n            \"height:\", height, \"px;\",\n            \"width:\", width, \"px;\",\n            \"top:\", top, \"px;\",\n            \"left:\", left, \"px;\", extraStyle || \"\", \"'></div>\"\n        );\n    };\n\n    // Draws Bidi marker which covers part or whole width of a single screen line\n    this.drawBidiSingleLineMarker = function(stringBuilder, range, clazz, config, extraLength, extraStyle) {\n        var height = config.lineHeight, top = this.$getTop(range.start.row, config), padding = this.$padding;\n        var selections = this.session.$bidiHandler.getSelections(range.start.column, range.end.column);\n\n        selections.forEach(function(selection) {\n            stringBuilder.push(\n                \"<div class='\", clazz, \"' style='\",\n                \"height:\", height, \"px;\",\n                \"width:\", selection.width + (extraLength || 0), \"px;\",\n                \"top:\", top, \"px;\",\n                \"left:\", padding + selection.left, \"px;\", extraStyle || \"\", \"'></div>\"\n            );\n        });\n    };\n\n    this.drawFullLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {\n        var top = this.$getTop(range.start.row, config);\n        var height = config.lineHeight;\n        if (range.start.row != range.end.row)\n            height += this.$getTop(range.end.row, config) - top;\n\n        stringBuilder.push(\n            \"<div class='\", clazz, \"' style='\",\n            \"height:\", height, \"px;\",\n            \"top:\", top, \"px;\",\n            \"left:0;right:0;\", extraStyle || \"\", \"'></div>\"\n        );\n    };\n    \n    this.drawScreenLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {\n        var top = this.$getTop(range.start.row, config);\n        var height = config.lineHeight;\n\n        stringBuilder.push(\n            \"<div class='\", clazz, \"' style='\",\n            \"height:\", height, \"px;\",\n            \"top:\", top, \"px;\",\n            \"left:0;right:0;\", extraStyle || \"\", \"'></div>\"\n        );\n    };\n\n}).call(Marker.prototype);\n\nexports.Marker = Marker;\n\n});\n"
  },
  {
    "path": "lib/ace/layer/text.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar useragent = require(\"../lib/useragent\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\n\nvar Text = function(parentEl) {\n    this.element = dom.createElement(\"div\");\n    this.element.className = \"ace_layer ace_text-layer\";\n    parentEl.appendChild(this.element);\n    this.$updateEolChar = this.$updateEolChar.bind(this);\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n\n    this.EOF_CHAR = \"\\xB6\";\n    this.EOL_CHAR_LF = \"\\xAC\";\n    this.EOL_CHAR_CRLF = \"\\xa4\";\n    this.EOL_CHAR = this.EOL_CHAR_LF;\n    this.TAB_CHAR = \"\\u2014\"; //\"\\u21E5\";\n    this.SPACE_CHAR = \"\\xB7\";\n    this.$padding = 0;\n\n    this.$updateEolChar = function() {\n        var EOL_CHAR = this.session.doc.getNewLineCharacter() == \"\\n\"\n           ? this.EOL_CHAR_LF\n           : this.EOL_CHAR_CRLF;\n        if (this.EOL_CHAR != EOL_CHAR) {\n            this.EOL_CHAR = EOL_CHAR;\n            return true;\n        }\n    };\n\n    this.setPadding = function(padding) {\n        this.$padding = padding;\n        this.element.style.padding = \"0 \" + padding + \"px\";\n    };\n\n    this.getLineHeight = function() {\n        return this.$fontMetrics.$characterSize.height || 0;\n    };\n\n    this.getCharacterWidth = function() {\n        return this.$fontMetrics.$characterSize.width || 0;\n    };\n    \n    this.$setFontMetrics = function(measure) {\n        this.$fontMetrics = measure;\n        this.$fontMetrics.on(\"changeCharacterSize\", function(e) {\n            this._signal(\"changeCharacterSize\", e);\n        }.bind(this));\n        this.$pollSizeChanges();\n    };\n\n    this.checkForSizeChanges = function() {\n        this.$fontMetrics.checkForSizeChanges();\n    };\n    this.$pollSizeChanges = function() {\n        return this.$pollSizeChangesTimer = this.$fontMetrics.$pollSizeChanges();\n    };\n    this.setSession = function(session) {\n        this.session = session;\n        if (session)\n            this.$computeTabString();\n    };\n\n    this.showInvisibles = false;\n    this.setShowInvisibles = function(showInvisibles) {\n        if (this.showInvisibles == showInvisibles)\n            return false;\n\n        this.showInvisibles = showInvisibles;\n        this.$computeTabString();\n        return true;\n    };\n\n    this.displayIndentGuides = true;\n    this.setDisplayIndentGuides = function(display) {\n        if (this.displayIndentGuides == display)\n            return false;\n\n        this.displayIndentGuides = display;\n        this.$computeTabString();\n        return true;\n    };\n\n    this.$tabStrings = [];\n    this.onChangeTabSize =\n    this.$computeTabString = function() {\n        var tabSize = this.session.getTabSize();\n        this.tabSize = tabSize;\n        var tabStr = this.$tabStrings = [0];\n        for (var i = 1; i < tabSize + 1; i++) {\n            if (this.showInvisibles) {\n                tabStr.push(\"<span class='ace_invisible ace_invisible_tab'>\"\n                    + lang.stringRepeat(this.TAB_CHAR, i)\n                    + \"</span>\");\n            } else {\n                tabStr.push(lang.stringRepeat(\" \", i));\n            }\n        }\n        if (this.displayIndentGuides) {\n            this.$indentGuideRe =  /\\s\\S| \\t|\\t |\\s$/;\n            var className = \"ace_indent-guide\";\n            var spaceClass = \"\";\n            var tabClass = \"\";\n            if (this.showInvisibles) {\n                className += \" ace_invisible\";\n                spaceClass = \" ace_invisible_space\";\n                tabClass = \" ace_invisible_tab\";\n                var spaceContent = lang.stringRepeat(this.SPACE_CHAR, this.tabSize);\n                var tabContent = lang.stringRepeat(this.TAB_CHAR, this.tabSize);\n            } else{\n                var spaceContent = lang.stringRepeat(\" \", this.tabSize);\n                var tabContent = spaceContent;\n            }\n\n            this.$tabStrings[\" \"] = \"<span class='\" + className + spaceClass + \"'>\" + spaceContent + \"</span>\";\n            this.$tabStrings[\"\\t\"] = \"<span class='\" + className + tabClass + \"'>\" + tabContent + \"</span>\";\n        }\n    };\n\n    this.updateLines = function(config, firstRow, lastRow) {\n        // Due to wrap line changes there can be new lines if e.g.\n        // the line to updated wrapped in the meantime.\n        if (this.config.lastRow != config.lastRow ||\n            this.config.firstRow != config.firstRow) {\n            this.scrollLines(config);\n        }\n        this.config = config;\n\n        var first = Math.max(firstRow, config.firstRow);\n        var last = Math.min(lastRow, config.lastRow);\n\n        var lineElements = this.element.childNodes;\n        var lineElementsIdx = 0;\n\n        for (var row = config.firstRow; row < first; row++) {\n            var foldLine = this.session.getFoldLine(row);\n            if (foldLine) {\n                if (foldLine.containsRow(first)) {\n                    first = foldLine.start.row;\n                    break;\n                } else {\n                    row = foldLine.end.row;\n                }\n            }\n            lineElementsIdx ++;\n        }\n\n        var row = first;\n        var foldLine = this.session.getNextFoldLine(row);\n        var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n        while (true) {\n            if (row > foldStart) {\n                row = foldLine.end.row+1;\n                foldLine = this.session.getNextFoldLine(row, foldLine);\n                foldStart = foldLine ? foldLine.start.row :Infinity;\n            }\n            if (row > last)\n                break;\n\n            var lineElement = lineElements[lineElementsIdx++];\n            if (lineElement) {\n                var html = [];\n                this.$renderLine(\n                    html, row, !this.$useLineGroups(), row == foldStart ? foldLine : false\n                );\n                lineElement.style.height = config.lineHeight * this.session.getRowLength(row) + \"px\";\n                lineElement.innerHTML = html.join(\"\");\n            }\n            row++;\n        }\n    };\n\n    this.scrollLines = function(config) {\n        var oldConfig = this.config;\n        this.config = config;\n\n        if (!oldConfig || oldConfig.lastRow < config.firstRow)\n            return this.update(config);\n\n        if (config.lastRow < oldConfig.firstRow)\n            return this.update(config);\n\n        var el = this.element;\n        if (oldConfig.firstRow < config.firstRow)\n            for (var row=this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row>0; row--)\n                el.removeChild(el.firstChild);\n\n        if (oldConfig.lastRow > config.lastRow)\n            for (var row=this.session.getFoldedRowCount(config.lastRow + 1, oldConfig.lastRow); row>0; row--)\n                el.removeChild(el.lastChild);\n\n        if (config.firstRow < oldConfig.firstRow) {\n            var fragment = this.$renderLinesFragment(config, config.firstRow, oldConfig.firstRow - 1);\n            if (el.firstChild)\n                el.insertBefore(fragment, el.firstChild);\n            else\n                el.appendChild(fragment);\n        }\n\n        if (config.lastRow > oldConfig.lastRow) {\n            var fragment = this.$renderLinesFragment(config, oldConfig.lastRow + 1, config.lastRow);\n            el.appendChild(fragment);\n        }\n    };\n\n    this.$renderLinesFragment = function(config, firstRow, lastRow) {\n        var fragment = this.element.ownerDocument.createDocumentFragment();\n        var row = firstRow;\n        var foldLine = this.session.getNextFoldLine(row);\n        var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n        while (true) {\n            if (row > foldStart) {\n                row = foldLine.end.row+1;\n                foldLine = this.session.getNextFoldLine(row, foldLine);\n                foldStart = foldLine ? foldLine.start.row : Infinity;\n            }\n            if (row > lastRow)\n                break;\n\n            var container = dom.createElement(\"div\");\n\n            var html = [];\n            // Get the tokens per line as there might be some lines in between\n            // beeing folded.\n            this.$renderLine(html, row, false, row == foldStart ? foldLine : false);\n\n            // don't use setInnerHtml since we are working with an empty DIV\n            container.innerHTML = html.join(\"\");\n            if (this.$useLineGroups()) {\n                container.className = 'ace_line_group';\n                fragment.appendChild(container);\n                container.style.height = config.lineHeight * this.session.getRowLength(row) + \"px\";\n\n            } else {\n                while(container.firstChild)\n                    fragment.appendChild(container.firstChild);\n            }\n\n            row++;\n        }\n        return fragment;\n    };\n\n    this.update = function(config) {\n        this.config = config;\n\n        var html = [];\n        var firstRow = config.firstRow, lastRow = config.lastRow;\n\n        var row = firstRow;\n        var foldLine = this.session.getNextFoldLine(row);\n        var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n        while (true) {\n            if (row > foldStart) {\n                row = foldLine.end.row+1;\n                foldLine = this.session.getNextFoldLine(row, foldLine);\n                foldStart = foldLine ? foldLine.start.row :Infinity;\n            }\n            if (row > lastRow)\n                break;\n\n            if (this.$useLineGroups())\n                html.push(\"<div class='ace_line_group' style='height:\", config.lineHeight*this.session.getRowLength(row), \"px'>\");\n\n            this.$renderLine(html, row, false, row == foldStart ? foldLine : false);\n\n            if (this.$useLineGroups())\n                html.push(\"</div>\"); // end the line group\n\n            row++;\n        }\n        this.element.innerHTML = html.join(\"\");\n    };\n\n    this.$textToken = {\n        \"text\": true,\n        \"rparen\": true,\n        \"lparen\": true\n    };\n\n    this.$renderToken = function(stringBuilder, screenColumn, token, value) {\n        var self = this;\n        var replaceReg = /\\t|&|<|>|( +)|([\\x00-\\x1f\\x80-\\xa0\\xad\\u1680\\u180E\\u2000-\\u200f\\u2028\\u2029\\u202F\\u205F\\u3000\\uFEFF\\uFFF9-\\uFFFC])|[\\u1100-\\u115F\\u11A3-\\u11A7\\u11FA-\\u11FF\\u2329-\\u232A\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3000-\\u303E\\u3041-\\u3096\\u3099-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u3190-\\u31BA\\u31C0-\\u31E3\\u31F0-\\u321E\\u3220-\\u3247\\u3250-\\u32FE\\u3300-\\u4DBF\\u4E00-\\uA48C\\uA490-\\uA4C6\\uA960-\\uA97C\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFAFF\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE66\\uFE68-\\uFE6B\\uFF01-\\uFF60\\uFFE0-\\uFFE6]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n        var replaceFunc = function(c, a, b, tabIdx, idx4) {\n            if (a) {\n                return self.showInvisibles\n                    ? \"<span class='ace_invisible ace_invisible_space'>\" + lang.stringRepeat(self.SPACE_CHAR, c.length) + \"</span>\"\n                    : c;\n            } else if (c == \"&\") {\n                return \"&#38;\";\n            } else if (c == \"<\") {\n                return \"&#60;\";\n            } else if (c == \">\") {\n                // normally escaping this is not needed, but xml documents throw error when setting innerHTML to ]]>\n                return \"&#62;\";\n            } else if (c == \"\\t\") {\n                var tabSize = self.session.getScreenTabSize(screenColumn + tabIdx);\n                screenColumn += tabSize - 1;\n                return self.$tabStrings[tabSize];\n            } else if (c == \"\\u3000\") {\n                // U+3000 is both invisible AND full-width, so must be handled uniquely\n                var classToUse = self.showInvisibles ? \"ace_cjk ace_invisible ace_invisible_space\" : \"ace_cjk\";\n                var space = self.showInvisibles ? self.SPACE_CHAR : \"\";\n                screenColumn += 1;\n                return \"<span class='\" + classToUse + \"' style='width:\" +\n                    (self.config.characterWidth * 2) +\n                    \"px'>\" + space + \"</span>\";\n            } else if (b) {\n                return \"<span class='ace_invisible ace_invisible_space ace_invalid'>\" + self.SPACE_CHAR + \"</span>\";\n            } else {\n                screenColumn += 1;\n                return \"<span class='ace_cjk' style='width:\" +\n                    (self.config.characterWidth * 2) +\n                    \"px'>\" + c + \"</span>\";\n            }\n        };\n\n        var output = value.replace(replaceReg, replaceFunc);\n\n        if (!this.$textToken[token.type]) {\n            var classes = \"ace_\" + token.type.replace(/\\./g, \" ace_\");\n            var style = \"\";\n            if (token.type == \"fold\")\n                style = \" style='width:\" + (token.value.length * this.config.characterWidth) + \"px;' \";\n            stringBuilder.push(\"<span class='\", classes, \"'\", style, \">\", output, \"</span>\");\n        }\n        else {\n            stringBuilder.push(output);\n        }\n        return screenColumn + value.length;\n    };\n\n    this.renderIndentGuide = function(stringBuilder, value, max) {\n        var cols = value.search(this.$indentGuideRe);\n        if (cols <= 0 || cols >= max)\n            return value;\n        if (value[0] == \" \") {\n            cols -= cols % this.tabSize;\n            stringBuilder.push(lang.stringRepeat(this.$tabStrings[\" \"], cols/this.tabSize));\n            return value.substr(cols);\n        } else if (value[0] == \"\\t\") {\n            stringBuilder.push(lang.stringRepeat(this.$tabStrings[\"\\t\"], cols));\n            return value.substr(cols);\n        }\n        return value;\n    };\n\n    this.$renderWrappedLine = function(stringBuilder, tokens, splits, onlyContents) {\n        var chars = 0;\n        var split = 0;\n        var splitChars = splits[0];\n        var screenColumn = 0;\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            var value = token.value;\n            if (i == 0 && this.displayIndentGuides) {\n                chars = value.length;\n                value = this.renderIndentGuide(stringBuilder, value, splitChars);\n                if (!value)\n                    continue;\n                chars -= value.length;\n            }\n\n            if (chars + value.length < splitChars) {\n                screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value);\n                chars += value.length;\n            } else {\n                while (chars + value.length >= splitChars) {\n                    screenColumn = this.$renderToken(\n                        stringBuilder, screenColumn,\n                        token, value.substring(0, splitChars - chars)\n                    );\n                    value = value.substring(splitChars - chars);\n                    chars = splitChars;\n\n                    if (!onlyContents) {\n                        stringBuilder.push(\"</div>\",\n                            \"<div class='ace_line' style='height:\",\n                            this.config.lineHeight, \"px'>\"\n                        );\n                    }\n\n                    stringBuilder.push(lang.stringRepeat(\"\\xa0\", splits.indent));\n\n                    split ++;\n                    screenColumn = 0;\n                    splitChars = splits[split] || Number.MAX_VALUE;\n                }\n                if (value.length != 0) {\n                    chars += value.length;\n                    screenColumn = this.$renderToken(\n                        stringBuilder, screenColumn, token, value\n                    );\n                }\n            }\n        }\n    };\n\n    this.$renderSimpleLine = function(stringBuilder, tokens) {\n        var screenColumn = 0;\n        var token = tokens[0];\n        var value = token.value;\n        if (this.displayIndentGuides)\n            value = this.renderIndentGuide(stringBuilder, value);\n        if (value)\n            screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value);\n        for (var i = 1; i < tokens.length; i++) {\n            token = tokens[i];\n            value = token.value;\n            screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value);\n        }\n    };\n\n    // row is either first row of foldline or not in fold\n    this.$renderLine = function(stringBuilder, row, onlyContents, foldLine) {\n        if (!foldLine && foldLine != false)\n            foldLine = this.session.getFoldLine(row);\n\n        if (foldLine)\n            var tokens = this.$getFoldLineTokens(row, foldLine);\n        else\n            var tokens = this.session.getTokens(row);\n\n\n        if (!onlyContents) {\n            stringBuilder.push(\n                \"<div class='ace_line' style='height:\", \n                    this.config.lineHeight * (\n                        this.$useLineGroups() ? 1 :this.session.getRowLength(row)\n                    ), \"px'>\"\n            );\n        }\n\n        if (tokens.length) {\n            var splits = this.session.getRowSplitData(row);\n            if (splits && splits.length)\n                this.$renderWrappedLine(stringBuilder, tokens, splits, onlyContents);\n            else\n                this.$renderSimpleLine(stringBuilder, tokens);\n        }\n\n        if (this.showInvisibles) {\n            if (foldLine)\n                row = foldLine.end.row;\n\n            stringBuilder.push(\n                \"<span class='ace_invisible ace_invisible_eol'>\",\n                row == this.session.getLength() - 1 ? this.EOF_CHAR : this.EOL_CHAR,\n                \"</span>\"\n            );\n        }\n        if (!onlyContents)\n            stringBuilder.push(\"</div>\");\n    };\n\n    this.$getFoldLineTokens = function(row, foldLine) {\n        var session = this.session;\n        var renderTokens = [];\n\n        function addTokens(tokens, from, to) {\n            var idx = 0, col = 0;\n            while ((col + tokens[idx].value.length) < from) {\n                col += tokens[idx].value.length;\n                idx++;\n\n                if (idx == tokens.length)\n                    return;\n            }\n            if (col != from) {\n                var value = tokens[idx].value.substring(from - col);\n                // Check if the token value is longer then the from...to spacing.\n                if (value.length > (to - from))\n                    value = value.substring(0, to - from);\n\n                renderTokens.push({\n                    type: tokens[idx].type,\n                    value: value\n                });\n\n                col = from + value.length;\n                idx += 1;\n            }\n\n            while (col < to && idx < tokens.length) {\n                var value = tokens[idx].value;\n                if (value.length + col > to) {\n                    renderTokens.push({\n                        type: tokens[idx].type,\n                        value: value.substring(0, to - col)\n                    });\n                } else\n                    renderTokens.push(tokens[idx]);\n                col += value.length;\n                idx += 1;\n            }\n        }\n\n        var tokens = session.getTokens(row);\n        foldLine.walk(function(placeholder, row, column, lastColumn, isNewRow) {\n            if (placeholder != null) {\n                renderTokens.push({\n                    type: \"fold\",\n                    value: placeholder\n                });\n            } else {\n                if (isNewRow)\n                    tokens = session.getTokens(row);\n\n                if (tokens.length)\n                    addTokens(tokens, lastColumn, column);\n            }\n        }, foldLine.end.row, this.session.getLine(foldLine.end.row).length);\n\n        return renderTokens;\n    };\n\n    this.$useLineGroups = function() {\n        // For the updateLines function to work correctly, it's important that the\n        // child nodes of this.element correspond on a 1-to-1 basis to rows in the\n        // document (as distinct from lines on the screen). For sessions that are\n        // wrapped, this means we need to add a layer to the node hierarchy (tagged\n        // with the class name ace_line_group).\n        return this.session.getUseWrapMode();\n    };\n\n    this.destroy = function() {\n        clearInterval(this.$pollSizeChangesTimer);\n        if (this.$measureNode)\n            this.$measureNode.parentNode.removeChild(this.$measureNode);\n        delete this.$measureNode;\n    };\n\n}).call(Text.prototype);\n\nexports.Text = Text;\n\n});\n"
  },
  {
    "path": "lib/ace/layer/text_test.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\nif (typeof process !== \"undefined\") {\n    require(\"amd-loader\");\n    require(\"../test/mockdom\");\n}\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar assert = require(\"../test/assertions\");\nvar EditSession = require(\"../edit_session\").EditSession;\nvar TextLayer = require(\"./text\").Text;\nvar JavaScriptMode = require(\"../mode/javascript\").Mode;\n\nmodule.exports = {\n\n    setUp: function(next) {\n        this.session = new EditSession(\"\");\n        this.session.setMode(new JavaScriptMode());\n        this.textLayer = new TextLayer(document.createElement(\"div\"));\n        this.textLayer.setSession(this.session);\n        this.textLayer.config = {\n            characterWidth: 10,\n            lineHeight: 20\n        };\n        next();\n    },\n\n    \"test: render line with hard tabs should render the same as lines with soft tabs\" : function() {\n        this.session.setValue(\"a\\ta\\ta\\t\\na   a   a   \\n\");\n        this.textLayer.$computeTabString();\n        \n        // row with hard tabs\n        var stringBuilder = [];\n        this.textLayer.$renderLine(stringBuilder, 0);\n        \n        // row with soft tabs\n        var stringBuilder2 = [];\n        this.textLayer.$renderLine(stringBuilder2, 1);\n        assert.equal(stringBuilder.join(\"\"), stringBuilder2.join(\"\"));\n    },\n    \n    \"test rendering width of ideographic space (U+3000)\" : function() {\n        this.session.setValue(\"\\u3000\");\n        \n        var stringBuilder = [];\n        this.textLayer.$renderLine(stringBuilder, 0, true);\n        assert.equal(stringBuilder.join(\"\"), \"<span class='ace_cjk' style='width:20px'></span>\");\n\n        this.textLayer.setShowInvisibles(true);\n        var stringBuilder = [];\n        this.textLayer.$renderLine(stringBuilder, 0, true);\n        assert.equal(\n            stringBuilder.join(\"\"),\n            \"<span class='ace_cjk ace_invisible ace_invisible_space' style='width:20px'>\" + this.textLayer.SPACE_CHAR + \"</span>\"\n            + \"<span class='ace_invisible ace_invisible_eol'>\\xB6</span>\"\n        );\n    },\n\n    \"test rendering of indent guides\" : function() {\n        var textLayer = this.textLayer;\n        var EOL = \"<span class='ace_invisible ace_invisible_eol'>\" + textLayer.EOL_CHAR + \"</span>\";\n        var SPACE = function(i) {return Array(i+1).join(\" \");};\n        var DOT = function(i) {return Array(i+1).join(textLayer.SPACE_CHAR);};\n        var TAB = function(i) {return Array(i+1).join(textLayer.TAB_CHAR);};\n        function testRender(results) {\n            for (var i = results.length; i--; ) {\n                var stringBuilder = [];\n                textLayer.$renderLine(stringBuilder, i, true);\n                assert.equal(stringBuilder.join(\"\"), results[i]);\n            }\n        }\n        \n        this.session.setValue(\"      \\n\\t\\tf\\n   \");\n        testRender([\n            \"<span class='ace_indent-guide'>\" + SPACE(4) + \"</span>\" + SPACE(2),\n            \"<span class='ace_indent-guide'>\" + SPACE(4) + \"</span>\" + SPACE(4) + \"<span class='ace_identifier'>f</span>\",\n            SPACE(3)\n        ]);\n        this.textLayer.setShowInvisibles(true);\n        testRender([\n            \"<span class='ace_indent-guide ace_invisible ace_invisible_space'>\" + DOT(4) + \"</span><span class='ace_invisible ace_invisible_space'>\" + DOT(2) + \"</span>\" + EOL,\n            \"<span class='ace_indent-guide ace_invisible ace_invisible_tab'>\" + TAB(4) + \"</span><span class='ace_invisible ace_invisible_tab'>\" + TAB(4) + \"</span><span class='ace_identifier'>f</span>\" + EOL\n        ]);\n        this.textLayer.setDisplayIndentGuides(false);\n        testRender([\n            \"<span class='ace_invisible ace_invisible_space'>\" + DOT(6) + \"</span>\" + EOL,\n            \"<span class='ace_invisible ace_invisible_tab'>\" + TAB(4) + \"</span><span class='ace_invisible ace_invisible_tab'>\" + TAB(4) + \"</span><span class='ace_identifier'>f</span>\" + EOL\n        ]);\n    }\n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main) {\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n}\n"
  },
  {
    "path": "lib/ace/lib/app_config.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"no use strict\";\n\nvar oop = require(\"./oop\");\nvar EventEmitter = require(\"./event_emitter\").EventEmitter;\n\nvar optionsProvider = {\n    setOptions: function(optList) {\n        Object.keys(optList).forEach(function(key) {\n            this.setOption(key, optList[key]);\n        }, this);\n    },\n    getOptions: function(optionNames) {\n        var result = {};\n        if (!optionNames) {\n            optionNames = Object.keys(this.$options);\n        } else if (!Array.isArray(optionNames)) {\n            result = optionNames;\n            optionNames = Object.keys(result);\n        }\n        optionNames.forEach(function(key) {\n            result[key] = this.getOption(key);\n        }, this);\n        return result;\n    },\n    setOption: function(name, value) {\n        if (this[\"$\" + name] === value)\n            return;\n        var opt = this.$options[name];\n        if (!opt) {\n            return warn('misspelled option \"' + name + '\"');\n        }\n        if (opt.forwardTo)\n            return this[opt.forwardTo] && this[opt.forwardTo].setOption(name, value);\n\n        if (!opt.handlesSet)\n            this[\"$\" + name] = value;\n        if (opt && opt.set)\n            opt.set.call(this, value);\n    },\n    getOption: function(name) {\n        var opt = this.$options[name];\n        if (!opt) {\n            return warn('misspelled option \"' + name + '\"');\n        }\n        if (opt.forwardTo)\n            return this[opt.forwardTo] && this[opt.forwardTo].getOption(name);\n        return opt && opt.get ? opt.get.call(this) : this[\"$\" + name];\n    }\n};\n\nfunction warn(message) {\n    if (typeof console != \"undefined\" && console.warn)\n        console.warn.apply(console, arguments);\n}\n\nfunction reportError(msg, data) {\n    var e = new Error(msg);\n    e.data = data;\n    if (typeof console == \"object\" && console.error)\n        console.error(e);\n    setTimeout(function() { throw e; });\n}\n\nvar AppConfig = function() {\n    this.$defaultOptions = {};\n};\n\n(function() {\n    // module loading\n    oop.implement(this, EventEmitter);\n    /*\n     * option {name, value, initialValue, setterName, set, get }\n     */\n    this.defineOptions = function(obj, path, options) {\n        if (!obj.$options)\n            this.$defaultOptions[path] = obj.$options = {};\n\n        Object.keys(options).forEach(function(key) {\n            var opt = options[key];\n            if (typeof opt == \"string\")\n                opt = {forwardTo: opt};\n\n            opt.name || (opt.name = key);\n            obj.$options[opt.name] = opt;\n            if (\"initialValue\" in opt)\n                obj[\"$\" + opt.name] = opt.initialValue;\n        });\n\n        // implement option provider interface\n        oop.implement(obj, optionsProvider);\n\n        return this;\n    };\n\n    this.resetOptions = function(obj) {\n        Object.keys(obj.$options).forEach(function(key) {\n            var opt = obj.$options[key];\n            if (\"value\" in opt)\n                obj.setOption(key, opt.value);\n        });\n    };\n\n    this.setDefaultValue = function(path, name, value) {\n        var opts = this.$defaultOptions[path] || (this.$defaultOptions[path] = {});\n        if (opts[name]) {\n            if (opts.forwardTo)\n                this.setDefaultValue(opts.forwardTo, name, value);\n            else\n                opts[name].value = value;\n        }\n    };\n\n    this.setDefaultValues = function(path, optionHash) {\n        Object.keys(optionHash).forEach(function(key) {\n            this.setDefaultValue(path, key, optionHash[key]);\n        }, this);\n    };\n    \n    this.warn = warn;\n    this.reportError = reportError;\n    \n}).call(AppConfig.prototype);\n\nexports.AppConfig = AppConfig;\n\n});\n"
  },
  {
    "path": "lib/ace/lib/bidiutil.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar ArabicAlefBetIntervalsBegine = ['\\u0621', '\\u0641'];\nvar ArabicAlefBetIntervalsEnd = ['\\u063A', '\\u064a'];\nvar dir = 0, hiLevel = 0;\nvar lastArabic = false, hasUBAT_AL = false,  hasUBAT_B = false,  hasUBAT_S = false, hasBlockSep = false, hasSegSep = false;\n\nvar impTab_LTR = [\n\t\t\t\t/*\t\tL,\t\tR,\t\tEN,\t\tAN,\t\tN,\t\tIL,\t\tCond */\n/* 0 LTR text\t*/\t[\t0,\t\t3,\t\t0,\t\t1,\t\t0,\t\t0,\t\t0\t],\n/* 1 LTR+AN\t\t*/\t[\t0,\t\t3,\t\t0,\t\t1,\t\t2,\t\t2,\t\t0\t],\n/* 2 LTR+AN+N\t*/\t[\t0,\t\t3,\t\t0,\t\t0x11,\t\t2,\t\t0,\t\t1\t],\n/* 3 RTL text\t*/\t[\t0,\t\t3,\t\t5,\t\t5,\t\t4,\t\t1,\t\t0\t],\n/* 4 RTL cont\t*/\t[\t0,\t\t3,\t\t0x15,\t\t0x15,\t\t4,\t\t0,\t\t1\t],\n/* 5 RTL+EN/AN\t*/\t[\t0,\t\t3,\t\t5,\t\t5,\t\t4,\t\t2,\t\t0\t]\n];\n\nvar impTab_RTL = [\n\t\t/*\t\tL,\t\tR,\t\tEN,\t\tAN,\t\tN,\t\tIL,\t\tCond */\n/* 0 RTL text\t*/\t[\t2,\t\t0,\t\t1,\t\t1,\t\t0,\t\t1,\t\t0\t],\n/* 1 RTL+EN/AN\t*/\t[\t2,\t\t0,\t\t1,\t\t1,\t\t0,\t\t2,\t\t0\t],\n/* 2 LTR text\t*/\t[\t2,\t\t0,\t\t2,\t\t1,\t\t3,\t\t2,\t\t0\t],\n/* 3 LTR+cont\t*/\t[\t2,\t\t0,\t\t2,\t\t0x21,\t\t3,\t\t1,\t\t1\t]\n];\n\nvar LTR = 0, RTL = 1;\n\nvar L = 0; /* left to right */\nvar R = 1; /* right to left */\nvar EN = 2; /* European digit */\nvar AN = 3; /* Arabic-Indic digit */\nvar ON = 4; /* neutral */\nvar B = 5; /* block separator */\nvar S = 6; /* segment separator */\nvar AL = 7; /* Arabic Letter */\nvar WS = 8; /* white space */\nvar CS = 9; /* common digit separator */\nvar ES = 10; /* European digit separator */\nvar ET = 11; /* European digit terminator */\nvar NSM = 12; /* Non Spacing Mark */\nvar LRE = 13; /* LRE */\nvar RLE = 14; /* RLE */\nvar PDF = 15; /* PDF */\nvar LRO = 16; /* LRO */\nvar RLO = 17; /* RLO */\nvar BN = 18; /* Boundary Neutral */\n\nvar UnicodeTBL00 = [\nBN,BN,BN,BN,BN,BN,BN,BN,BN,S,B,S,WS,B,BN,BN,\nBN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,B,B,B,S,\nWS,ON,ON,ET,ET,ET,ON,ON,ON,ON,ON,ES,CS,ES,CS,CS,\nEN,EN,EN,EN,EN,EN,EN,EN,EN,EN,CS,ON,ON,ON,ON,ON,\nON,L,L,L,L,L,L,L,L,L,L,L,L,L,L,L,\nL,L,L,L,L,L,L,L,L,L,L,ON,ON,ON,ON,ON,\nON,L,L,L,L,L,L,L,L,L,L,L,L,L,L,L,\nL,L,L,L,L,L,L,L,L,L,L,ON,ON,ON,ON,BN,\nBN,BN,BN,BN,BN,B,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,\nBN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,\nCS,ON,ET,ET,ET,ET,ON,ON,ON,ON,L,ON,ON,BN,ON,ON,\nET,ET,EN,EN,ON,L,ON,ON,ON,EN,L,ON,ON,ON,ON,ON\n];\n\nvar UnicodeTBL20 = [\nWS,WS,WS,WS,WS,WS,WS,WS,WS,WS,WS,BN,BN,BN,L,R\t,\nON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,\nON,ON,ON,ON,ON,ON,ON,ON,WS,B,LRE,RLE,PDF,LRO,RLO,CS,\nET,ET,ET,ET,ET,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,\nON,ON,ON,ON,CS,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,\nON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,WS\n];\n\nfunction _computeLevels(chars, levels, len, charTypes) {\n\tvar impTab = dir ? impTab_RTL : impTab_LTR\n\t\t, prevState = null, newClass = null, newLevel = null, newState = 0\n\t\t, action = null, cond = null, condPos = -1, i = null, ix = null, classes = [];\n\n\tif (!charTypes) {\n\t\tfor (i = 0, charTypes = []; i < len; i++) {\n\t\t\tcharTypes[i] = _getCharacterType(chars[i]);\n\t\t}\n\t}\n\thiLevel = dir;\n\tlastArabic = false;\n\thasUBAT_AL = false;\n\thasUBAT_B = false;\n\thasUBAT_S = false;\n\tfor (ix = 0; ix < len; ix++){\n\t\tprevState = newState;\n\t\tclasses[ix] = newClass = _getCharClass(chars, charTypes, classes, ix);\n\t\tnewState = impTab[prevState][newClass];\n\t\taction = newState & 0xF0;\n\t\tnewState &= 0x0F;\n\t\tlevels[ix] = newLevel = impTab[newState][5];\n\t\tif (action > 0){\n\t\t\tif (action == 0x10){\n\t\t\t\tfor(i = condPos; i < ix; i++){\n\t\t\t\t\tlevels[i] = 1;\n\t\t\t\t}\n\t\t\t\tcondPos = -1;\n\t\t\t} else {\n\t\t\t\tcondPos = -1;\n\t\t\t}\n\t\t}\n\t\tcond = impTab[newState][6];\n\t\tif (cond){\n\t\t\tif(condPos == -1){\n\t\t\t\tcondPos = ix;\n\t\t\t}\n\t\t}else{\n\t\t\tif (condPos > -1){\n\t\t\t\tfor(i = condPos; i < ix; i++){\n\t\t\t\t\tlevels[i] = newLevel;\n\t\t\t\t}\n\t\t\t\tcondPos = -1;\n\t\t\t}\n\t\t}\n\t\tif (charTypes[ix] == B){\n\t\t\tlevels[ix] = 0;\n\t\t}\n\t\thiLevel |= newLevel;\n\t}\n\tif (hasUBAT_S){\n\t\tfor(i = 0; i < len; i++){\n\t\t\tif(charTypes[i] == S){\n\t\t\t\tlevels[i] = dir;\n\t\t\t\tfor(var j = i - 1; j >= 0; j--){\n\t\t\t\t\tif(charTypes[j] == WS){\n\t\t\t\t\t\tlevels[j] = dir;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction _invertLevel(lev, levels, _array) {\n\tif (hiLevel < lev){\n\t\treturn;\n\t}\n\tif (lev == 1 && dir == RTL && !hasUBAT_B){\n\t\t_array.reverse();\n\t\treturn;\n\t}\n\tvar len = _array.length, start = 0, end, lo, hi, tmp;\n\twhile(start < len){\n\t\tif (levels[start] >= lev){\n\t\t\tend = start + 1;\n\t\twhile(end < len && levels[end] >= lev){\n\t\t\tend++;\n\t\t}\n\t\tfor(lo = start, hi = end - 1 ; lo < hi; lo++, hi--){\n\t\t\ttmp = _array[lo];\n\t\t\t_array[lo] = _array[hi];\n\t\t\t_array[hi] = tmp;\n\t\t}\n\t\tstart = end;\n\t}\n\tstart++;\n\t}\n}\n\nfunction _getCharClass(chars, types, classes, ix) {\t\t\t\n\tvar cType = types[ix], wType, nType, len, i;\n\tswitch(cType){\n\t\tcase L:\n\t\tcase R:\n\t\t\tlastArabic = false;\n\t\tcase ON:\n\t\tcase AN:\n\t\t\treturn cType;\n\t\tcase EN:\n\t\t\treturn lastArabic ? AN : EN;\n\t\tcase AL:\n\t\t\tlastArabic = true;\n\t\t\thasUBAT_AL = true;\n\t\t\treturn R;\n\t\tcase WS:\n\t\t\treturn ON;\n\t\tcase CS:\n\t\t\tif (ix < 1 || (ix + 1) >= types.length ||\n\t\t\t\t((wType = classes[ix - 1]) != EN && wType != AN) ||\n\t\t\t\t((nType = types[ix + 1]) != EN && nType != AN)){\n\t\t\t\treturn ON;\n\t\t\t}\n\t\t\tif (lastArabic){nType = AN;}\n\t\t\treturn nType == wType ? nType : ON;\n\t\tcase ES:\n\t\t\twType = ix > 0 ? classes[ix - 1] : B;\n\t\t\tif (wType == EN && (ix + 1) < types.length && types[ix + 1] == EN){\n\t\t\t\treturn EN;\n\t\t\t}\n\t\t\treturn ON;\n\t\tcase ET:\n\t\t\tif (ix > 0 && classes[ix - 1] == EN){\n\t\t\t\treturn EN;\n\t\t\t}\n\t\t\tif (lastArabic){\n\t\t\t\treturn ON;\n\t\t\t}\n\t\t\ti = ix + 1;\n\t\t\tlen = types.length;\n\t\t\twhile (i < len && types[i] == ET){\n\t\t\t\ti++;\n\t\t\t}\n\t\t\tif (i < len && types[i] == EN){\n\t\t\t\treturn EN;\n\t\t\t}\n\t\t\treturn ON;\n\t\tcase NSM:\n\t\t\tlen = types.length;\n\t\t\ti = ix + 1;\n\t\t\twhile (i < len && types[i] == NSM){\n\t\t\t\ti++;\n\t\t\t}\n\t\t\tif (i < len){\n\t\t\t\tvar c = chars[ix], rtlCandidate = (c >= 0x0591 && c <= 0x08FF) || c == 0xFB1E;\n\t\t\t\t\n\t\t\t\twType = types[i];\n\t\t\t\tif (rtlCandidate && (wType == R || wType == AL)){\n\t\t\t\t\treturn R;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (ix < 1 || (wType = types[ix - 1]) == B){\n\t\t\t\treturn ON;\n\t\t\t}\n\t\t\treturn classes[ix - 1];\n\t\tcase B:\n\t\t\tlastArabic = false;\n\t\t\thasUBAT_B = true;\n\t\t\treturn dir;\n\t\tcase S:\n\t\t\thasUBAT_S = true;\n\t\t\treturn ON;\n\t\tcase LRE:\n\t\tcase RLE:\n\t\tcase LRO:\n\t\tcase RLO:\n\t\tcase PDF:\n\t\t\tlastArabic = false;\n\t\tcase BN:\n\t\t\treturn ON;\n\t}\n}\n\nfunction _getCharacterType( ch ) {\t\t\n\tvar uc = ch.charCodeAt(0), hi = uc >> 8;\n\t\n\tif (hi == 0) {\t\t\n\t\treturn ((uc > 0x00BF) ? L : UnicodeTBL00[uc]);\n\t} else if (hi == 5) {\n\t\treturn (/[\\u0591-\\u05f4]/.test(ch) ? R : L);\n\t} else if (hi == 6) {\n\t\tif (/[\\u0610-\\u061a\\u064b-\\u065f\\u06d6-\\u06e4\\u06e7-\\u06ed]/.test(ch))\n\t\t\treturn NSM;\n\t\telse if (/[\\u0660-\\u0669\\u066b-\\u066c]/.test(ch))\n\t\t\treturn AN;\n\t\telse if (uc == 0x066A)\n\t\t\treturn ET;\n\t\telse if (/[\\u06f0-\\u06f9]/.test(ch))\n\t\t\treturn EN;\t\t\t\n\t\telse\n\t\t\treturn AL;\n\t} else if (hi == 0x20 && uc <= 0x205F) {\n\t\treturn UnicodeTBL20[uc & 0xFF];\n\t} else if (hi == 0xFE) {\n\t\treturn (uc >= 0xFE70 ? AL : ON);\n\t}\t\t\n\treturn ON;\t\n}\n\nfunction _isArabicDiacritics( ch ) {\n\treturn (ch >= '\\u064b' && ch <= '\\u0655');\n}\n\n/* Strong LTR character (0 - even), regular width */\nexports.L = L;\n/* Strong RTL character (1 - odd), Bidi width */\nexports.R = R;\n/* European digit (2 - even), regular width */\nexports.EN = EN;\n/* Neutral RTL-by-context character (3 - odd), regular width */\nexports.ON_R = 3;\n/* Hindi (Arabic) digit (4 - even), Bidi width */\nexports.AN = 4;\n/* Arabic LamAlef (5 - odd), Half Bidi width */\nexports.R_H = 5;\n/* invisible EOL (6 - even), zero width */\nexports.B = 6;\n\nexports.DOT = \"\\xB7\";\n\n/**\n * Performs text reordering by implementing Unicode Bidi algorithm\n * with aim to produce logical<->visual map and Bidi levels\n * @param {String} text string to be reordered\n * @param {Array} unicode character types produced by call to 'hasBidiCharacters'\n * @param {Boolean} 'true' for right-to-left text direction, otherwise 'false'\n *\n * @return {Object} An object containing logicalFromVisual map and Bidi levels\n **/\nexports.doBidiReorder = function(text, textCharTypes, isRtl) {\n\tif (text.length < 2)\n\t\treturn {};\n\t\t\n\tvar chars = text.split(\"\"), logicalFromVisual = new Array(chars.length),\n\t\tbidiLevels = new Array(chars.length), levels = []; \n\n\tdir = isRtl ? RTL : LTR;\n\n\t_computeLevels(chars, levels, chars.length, textCharTypes);\n\n\tfor (var i = 0; i < logicalFromVisual.length; logicalFromVisual[i] = i, i++);\n\n\t_invertLevel(2, levels, logicalFromVisual);\n\t_invertLevel(1, levels, logicalFromVisual);\n\n\tfor (var i = 0; i < logicalFromVisual.length - 1; i++) { //fix levels to reflect character width\n\t\tif (textCharTypes[i] === AN) {\n\t\t\tlevels[i] = exports.AN;\n\t\t} else if (levels[i] === R && ((textCharTypes[i] > AL && textCharTypes[i] < LRE) \n\t\t\t|| textCharTypes[i] === ON || textCharTypes[i] === BN)) {\n\t\t\tlevels[i] = exports.ON_R;\n\t\t} else if ((i > 0 && chars[i - 1] === '\\u0644') && /\\u0622|\\u0623|\\u0625|\\u0627/.test(chars[i])) {\n\t\t\tlevels[i - 1] = levels[i] = exports.R_H;\n\t\t\ti++;\n\t\t}\n\t}\n\t/* fix level to mark zero length EOL */\n\tif (chars[chars.length - 1] === exports.DOT)\n\t\tlevels[chars.length - 1] = exports.B;\n\t\t\t\t\n\tfor (var i = 0; i < logicalFromVisual.length; i++) {\n\t\tbidiLevels[i] = levels[logicalFromVisual[i]];\n\t}\n\n\treturn {'logicalFromVisual': logicalFromVisual, 'bidiLevels': bidiLevels};\n};\t\n\n/**\n * Performs character classification, to be used in Unicode Bidi algorithm.\n * @param {String} text string to be reordered\n * @param {Array} unicode character types (to be filled by this method)\n *\n * @return {Boolean} 'true' if text contains Bidi characters, otherwise 'false'\n **/\nexports.hasBidiCharacters = function(text, textCharTypes){\n\tvar ret = false;\n\tfor (var i = 0; i < text.length; i++){\n\t\ttextCharTypes[i] = _getCharacterType(text.charAt(i));\n\t\tif (!ret && (textCharTypes[i] == R || textCharTypes[i] == AL))\n\t\t\tret = true;\n\t}\n\treturn ret;\n};\n\n/**\n * Returns visual index corresponding to logical index basing on logicalFromvisual \n * map provided by Unicode Bidi algorithm.\n * @param {int} logical index of character in text buffer\n * @param {Object} object containing logicalFromVisual map\n *\n * @return {int} visual index (on display) corresponding to logical index\n **/\t\nexports.getVisualFromLogicalIdx = function(logIdx, rowMap) {\n\tfor (var i = 0; i < rowMap.logicalFromVisual.length; i++) {\n\t\tif (rowMap.logicalFromVisual[i] == logIdx)\n\t\t\treturn i;\n\t}\n\treturn 0;\n};\n\n});\n"
  },
  {
    "path": "lib/ace/lib/dom.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar XHTML_NS = \"http://www.w3.org/1999/xhtml\";\n\nexports.getDocumentHead = function(doc) {\n    if (!doc)\n        doc = document;\n    return doc.head || doc.getElementsByTagName(\"head\")[0] || doc.documentElement;\n};\n\nexports.createElement = function(tag, ns) {\n    return document.createElementNS ?\n           document.createElementNS(ns || XHTML_NS, tag) :\n           document.createElement(tag);\n};\n\nexports.hasCssClass = function(el, name) {\n    var classes = (el.className + \"\").split(/\\s+/g);\n    return classes.indexOf(name) !== -1;\n};\n\n/*\n* Add a CSS class to the list of classes on the given node\n*/\nexports.addCssClass = function(el, name) {\n    if (!exports.hasCssClass(el, name)) {\n        el.className += \" \" + name;\n    }\n};\n\n/*\n* Remove a CSS class from the list of classes on the given node\n*/\nexports.removeCssClass = function(el, name) {\n    var classes = el.className.split(/\\s+/g);\n    while (true) {\n        var index = classes.indexOf(name);\n        if (index == -1) {\n            break;\n        }\n        classes.splice(index, 1);\n    }\n    el.className = classes.join(\" \");\n};\n\nexports.toggleCssClass = function(el, name) {\n    var classes = el.className.split(/\\s+/g), add = true;\n    while (true) {\n        var index = classes.indexOf(name);\n        if (index == -1) {\n            break;\n        }\n        add = false;\n        classes.splice(index, 1);\n    }\n    if (add)\n        classes.push(name);\n\n    el.className = classes.join(\" \");\n    return add;\n};\n\n\n/*\n * Add or remove a CSS class from the list of classes on the given node\n * depending on the value of <tt>include</tt>\n */\nexports.setCssClass = function(node, className, include) {\n    if (include) {\n        exports.addCssClass(node, className);\n    } else {\n        exports.removeCssClass(node, className);\n    }\n};\n\nexports.hasCssString = function(id, doc) {\n    var index = 0, sheets;\n    doc = doc || document;\n\n    if (doc.createStyleSheet && (sheets = doc.styleSheets)) {\n        while (index < sheets.length)\n            if (sheets[index++].owningElement.id === id) return true;\n    } else if ((sheets = doc.getElementsByTagName(\"style\"))) {\n        while (index < sheets.length)\n            if (sheets[index++].id === id) return true;\n    }\n\n    return false;\n};\n\nexports.importCssString = function importCssString(cssText, id, doc) {\n    doc = doc || document;\n    // If style is already imported return immediately.\n    if (id && exports.hasCssString(id, doc))\n        return null;\n    \n    var style;\n    \n    if (id)\n        cssText += \"\\n/*# sourceURL=ace/css/\" + id + \" */\";\n    \n    if (doc.createStyleSheet) {\n        style = doc.createStyleSheet();\n        style.cssText = cssText;\n        if (id)\n            style.owningElement.id = id;\n    } else {\n        style = exports.createElement(\"style\");\n        style.appendChild(doc.createTextNode(cssText));\n        if (id)\n            style.id = id;\n\n        exports.getDocumentHead(doc).appendChild(style);\n    }\n};\n\nexports.importCssStylsheet = function(uri, doc) {\n    if (doc.createStyleSheet) {\n        doc.createStyleSheet(uri);\n    } else {\n        var link = exports.createElement('link');\n        link.rel = 'stylesheet';\n        link.href = uri;\n\n        exports.getDocumentHead(doc).appendChild(link);\n    }\n};\n\nexports.getInnerWidth = function(element) {\n    return (\n        parseInt(exports.computedStyle(element, \"paddingLeft\"), 10) +\n        parseInt(exports.computedStyle(element, \"paddingRight\"), 10) + \n        element.clientWidth\n    );\n};\n\nexports.getInnerHeight = function(element) {\n    return (\n        parseInt(exports.computedStyle(element, \"paddingTop\"), 10) +\n        parseInt(exports.computedStyle(element, \"paddingBottom\"), 10) +\n        element.clientHeight\n    );\n};\n\nexports.scrollbarWidth = function(document) {\n    var inner = exports.createElement(\"ace_inner\");\n    inner.style.width = \"100%\";\n    inner.style.minWidth = \"0px\";\n    inner.style.height = \"200px\";\n    inner.style.display = \"block\";\n\n    var outer = exports.createElement(\"ace_outer\");\n    var style = outer.style;\n\n    style.position = \"absolute\";\n    style.left = \"-10000px\";\n    style.overflow = \"hidden\";\n    style.width = \"200px\";\n    style.minWidth = \"0px\";\n    style.height = \"150px\";\n    style.display = \"block\";\n\n    outer.appendChild(inner);\n\n    var body = document.documentElement;\n    body.appendChild(outer);\n\n    var noScrollbar = inner.offsetWidth;\n\n    style.overflow = \"scroll\";\n    var withScrollbar = inner.offsetWidth;\n\n    if (noScrollbar == withScrollbar) {\n        withScrollbar = outer.clientWidth;\n    }\n\n    body.removeChild(outer);\n\n    return noScrollbar-withScrollbar;\n};\n\nif (typeof document == \"undefined\") {\n    exports.importCssString = function() {};\n    return;\n}\n\nif (window.pageYOffset !== undefined) {\n    exports.getPageScrollTop = function() {\n        return window.pageYOffset;\n    };\n\n    exports.getPageScrollLeft = function() {\n        return window.pageXOffset;\n    };\n}\nelse {\n    exports.getPageScrollTop = function() {\n        return document.body.scrollTop;\n    };\n\n    exports.getPageScrollLeft = function() {\n        return document.body.scrollLeft;\n    };\n}\n\nif (window.getComputedStyle)\n    exports.computedStyle = function(element, style) {\n        if (style)\n            return (window.getComputedStyle(element, \"\") || {})[style] || \"\";\n        return window.getComputedStyle(element, \"\") || {};\n    };\nelse\n    exports.computedStyle = function(element, style) {\n        if (style)\n            return element.currentStyle[style];\n        return element.currentStyle;\n    };\n\n/*\n * Optimized set innerHTML. This is faster than plain innerHTML if the element\n * already contains a lot of child elements.\n *\n * See http://blog.stevenlevithan.com/archives/faster-than-innerhtml for details\n */\nexports.setInnerHtml = function(el, innerHtml) {\n    var element = el.cloneNode(false);//document.createElement(\"div\");\n    element.innerHTML = innerHtml;\n    el.parentNode.replaceChild(element, el);\n    return element;\n};\n\nif (\"textContent\" in document.documentElement) {\n    exports.setInnerText = function(el, innerText) {\n        el.textContent = innerText;\n    };\n\n    exports.getInnerText = function(el) {\n        return el.textContent;\n    };\n}\nelse {\n    exports.setInnerText = function(el, innerText) {\n        el.innerText = innerText;\n    };\n\n    exports.getInnerText = function(el) {\n        return el.innerText;\n    };\n}\n\nexports.getParentWindow = function(document) {\n    return document.defaultView || document.parentWindow;\n};\n\n});\n"
  },
  {
    "path": "lib/ace/lib/es5-shim.js",
    "content": "// https://github.com/kriskowal/es5-shim\n// Copyright 2009-2012 by contributors, MIT License\n\ndefine(function(require, exports, module) {\n\n/*\n * Brings an environment as close to ECMAScript 5 compliance\n * as is possible with the facilities of erstwhile engines.\n *\n * Annotated ES5: http://es5.github.com/ (specific links below)\n * ES5 Spec: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf\n * Required reading: http://javascriptweblog.wordpress.com/2011/12/05/extending-javascript-natives/\n */\n\n//\n// Function\n// ========\n//\n\n// ES-5 15.3.4.5\n// http://es5.github.com/#x15.3.4.5\n\nfunction Empty() {}\n\nif (!Function.prototype.bind) {\n    Function.prototype.bind = function bind(that) { // .length is 1\n        // 1. Let Target be the this value.\n        var target = this;\n        // 2. If IsCallable(Target) is false, throw a TypeError exception.\n        if (typeof target != \"function\") {\n            throw new TypeError(\"Function.prototype.bind called on incompatible \" + target);\n        }\n        // 3. Let A be a new (possibly empty) internal list of all of the\n        //   argument values provided after thisArg (arg1, arg2 etc), in order.\n        // XXX slicedArgs will stand in for \"A\" if used\n        var args = slice.call(arguments, 1); // for normal call\n        // 4. Let F be a new native ECMAScript object.\n        // 11. Set the [[Prototype]] internal property of F to the standard\n        //   built-in Function prototype object as specified in 15.3.3.1.\n        // 12. Set the [[Call]] internal property of F as described in\n        //   15.3.4.5.1.\n        // 13. Set the [[Construct]] internal property of F as described in\n        //   15.3.4.5.2.\n        // 14. Set the [[HasInstance]] internal property of F as described in\n        //   15.3.4.5.3.\n        var bound = function () {\n\n            if (this instanceof bound) {\n                // 15.3.4.5.2 [[Construct]]\n                // When the [[Construct]] internal method of a function object,\n                // F that was created using the bind function is called with a\n                // list of arguments ExtraArgs, the following steps are taken:\n                // 1. Let target be the value of F's [[TargetFunction]]\n                //   internal property.\n                // 2. If target has no [[Construct]] internal method, a\n                //   TypeError exception is thrown.\n                // 3. Let boundArgs be the value of F's [[BoundArgs]] internal\n                //   property.\n                // 4. Let args be a new list containing the same values as the\n                //   list boundArgs in the same order followed by the same\n                //   values as the list ExtraArgs in the same order.\n                // 5. Return the result of calling the [[Construct]] internal\n                //   method of target providing args as the arguments.\n\n                var result = target.apply(\n                    this,\n                    args.concat(slice.call(arguments))\n                );\n                if (Object(result) === result) {\n                    return result;\n                }\n                return this;\n\n            } else {\n                // 15.3.4.5.1 [[Call]]\n                // When the [[Call]] internal method of a function object, F,\n                // which was created using the bind function is called with a\n                // this value and a list of arguments ExtraArgs, the following\n                // steps are taken:\n                // 1. Let boundArgs be the value of F's [[BoundArgs]] internal\n                //   property.\n                // 2. Let boundThis be the value of F's [[BoundThis]] internal\n                //   property.\n                // 3. Let target be the value of F's [[TargetFunction]] internal\n                //   property.\n                // 4. Let args be a new list containing the same values as the\n                //   list boundArgs in the same order followed by the same\n                //   values as the list ExtraArgs in the same order.\n                // 5. Return the result of calling the [[Call]] internal method\n                //   of target providing boundThis as the this value and\n                //   providing args as the arguments.\n\n                // equiv: target.call(this, ...boundArgs, ...args)\n                return target.apply(\n                    that,\n                    args.concat(slice.call(arguments))\n                );\n\n            }\n\n        };\n        if(target.prototype) {\n            Empty.prototype = target.prototype;\n            bound.prototype = new Empty();\n            // Clean up dangling references.\n            Empty.prototype = null;\n        }\n        // XXX bound.length is never writable, so don't even try\n        //\n        // 15. If the [[Class]] internal property of Target is \"Function\", then\n        //     a. Let L be the length property of Target minus the length of A.\n        //     b. Set the length own property of F to either 0 or L, whichever is\n        //       larger.\n        // 16. Else set the length own property of F to 0.\n        // 17. Set the attributes of the length own property of F to the values\n        //   specified in 15.3.5.1.\n\n        // TODO\n        // 18. Set the [[Extensible]] internal property of F to true.\n\n        // TODO\n        // 19. Let thrower be the [[ThrowTypeError]] function Object (13.2.3).\n        // 20. Call the [[DefineOwnProperty]] internal method of F with\n        //   arguments \"caller\", PropertyDescriptor {[[Get]]: thrower, [[Set]]:\n        //   thrower, [[Enumerable]]: false, [[Configurable]]: false}, and\n        //   false.\n        // 21. Call the [[DefineOwnProperty]] internal method of F with\n        //   arguments \"arguments\", PropertyDescriptor {[[Get]]: thrower,\n        //   [[Set]]: thrower, [[Enumerable]]: false, [[Configurable]]: false},\n        //   and false.\n\n        // TODO\n        // NOTE Function objects created using Function.prototype.bind do not\n        // have a prototype property or the [[Code]], [[FormalParameters]], and\n        // [[Scope]] internal properties.\n        // XXX can't delete prototype in pure-js.\n\n        // 22. Return F.\n        return bound;\n    };\n}\n\n// Shortcut to an often accessed properties, in order to avoid multiple\n// dereference that costs universally.\n// _Please note: Shortcuts are defined after `Function.prototype.bind` as we\n// us it in defining shortcuts.\nvar call = Function.prototype.call;\nvar prototypeOfArray = Array.prototype;\nvar prototypeOfObject = Object.prototype;\nvar slice = prototypeOfArray.slice;\n// Having a toString local variable name breaks in Opera so use _toString.\nvar _toString = call.bind(prototypeOfObject.toString);\nvar owns = call.bind(prototypeOfObject.hasOwnProperty);\n\n// If JS engine supports accessors creating shortcuts.\nvar defineGetter;\nvar defineSetter;\nvar lookupGetter;\nvar lookupSetter;\nvar supportsAccessors;\nif ((supportsAccessors = owns(prototypeOfObject, \"__defineGetter__\"))) {\n    defineGetter = call.bind(prototypeOfObject.__defineGetter__);\n    defineSetter = call.bind(prototypeOfObject.__defineSetter__);\n    lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);\n    lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);\n}\n\n//\n// Array\n// =====\n//\n\n// ES5 15.4.4.12\n// http://es5.github.com/#x15.4.4.12\n// Default value for second param\n// [bugfix, ielt9, old browsers]\n// IE < 9 bug: [1,2].splice(0).join(\"\") == \"\" but should be \"12\"\nif ([1,2].splice(0).length != 2) {\n    if(function() { // test IE < 9 to splice bug - see issue #138\n        function makeArray(l) {\n            var a = new Array(l+2);\n            a[0] = a[1] = 0;\n            return a;\n        }\n        var array = [], lengthBefore;\n        \n        array.splice.apply(array, makeArray(20));\n        array.splice.apply(array, makeArray(26));\n\n        lengthBefore = array.length; //46\n        array.splice(5, 0, \"XXX\"); // add one element\n\n        lengthBefore + 1 == array.length\n\n        if (lengthBefore + 1 == array.length) {\n            return true;// has right splice implementation without bugs\n        }\n        // else {\n        // IE8 bug\n        // }\n    }()) {//IE 6/7\n        var array_splice = Array.prototype.splice;\n        Array.prototype.splice = function(start, deleteCount) {\n            if (!arguments.length) {\n                return [];\n            } else {\n                return array_splice.apply(this, [\n                    start === void 0 ? 0 : start,\n                    deleteCount === void 0 ? (this.length - start) : deleteCount\n                ].concat(slice.call(arguments, 2)))\n            }\n        };\n    } else {//IE8\n        // taken from http://docs.sencha.com/ext-js/4-1/source/Array2.html\n        Array.prototype.splice = function(pos, removeCount){\n            var length = this.length;\n            if (pos > 0) {\n                if (pos > length)\n                    pos = length;\n            } else if (pos == void 0) {\n                pos = 0;\n            } else if (pos < 0) {\n                pos = Math.max(length + pos, 0);\n            }\n\n            if (!(pos+removeCount < length))\n                removeCount = length - pos;\n\n            var removed = this.slice(pos, pos+removeCount);\n            var insert = slice.call(arguments, 2);\n            var add = insert.length;            \n\n            // we try to use Array.push when we can for efficiency...\n            if (pos === length) {\n                if (add) {\n                    this.push.apply(this, insert);\n                }\n            } else {\n                var remove = Math.min(removeCount, length - pos);\n                var tailOldPos = pos + remove;\n                var tailNewPos = tailOldPos + add - remove;\n                var tailCount = length - tailOldPos;\n                var lengthAfterRemove = length - remove;\n\n                if (tailNewPos < tailOldPos) { // case A\n                    for (var i = 0; i < tailCount; ++i) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } else if (tailNewPos > tailOldPos) { // case B\n                    for (i = tailCount; i--; ) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } // else, add == remove (nothing to do)\n\n                if (add && pos === lengthAfterRemove) {\n                    this.length = lengthAfterRemove; // truncate array\n                    this.push.apply(this, insert);\n                } else {\n                    this.length = lengthAfterRemove + add; // reserves space\n                    for (i = 0; i < add; ++i) {\n                        this[pos+i] = insert[i];\n                    }\n                }\n            }\n            return removed;\n        };\n    }\n}\n\n// ES5 15.4.3.2\n// http://es5.github.com/#x15.4.3.2\n// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/isArray\nif (!Array.isArray) {\n    Array.isArray = function isArray(obj) {\n        return _toString(obj) == \"[object Array]\";\n    };\n}\n\n// The IsCallable() check in the Array functions\n// has been replaced with a strict check on the\n// internal class of the object to trap cases where\n// the provided function was actually a regular\n// expression literal, which in V8 and\n// JavaScriptCore is a typeof \"function\".  Only in\n// V8 are regular expression literals permitted as\n// reduce parameters, so it is desirable in the\n// general case for the shim to match the more\n// strict and common behavior of rejecting regular\n// expressions.\n\n// ES5 15.4.4.18\n// http://es5.github.com/#x15.4.4.18\n// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/array/forEach\n\n// Check failure of by-index access of string characters (IE < 9)\n// and failure of `0 in boxedString` (Rhino)\nvar boxedString = Object(\"a\"),\n    splitString = boxedString[0] != \"a\" || !(0 in boxedString);\n\nif (!Array.prototype.forEach) {\n    Array.prototype.forEach = function forEach(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            thisp = arguments[1],\n            i = -1,\n            length = self.length >>> 0;\n\n        // If no callback function or if callback is not a callable function\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(); // TODO message\n        }\n\n        while (++i < length) {\n            if (i in self) {\n                // Invoke the callback function with call, passing arguments:\n                // context, property value, property key, thisArg object\n                // context\n                fun.call(thisp, self[i], i, object);\n            }\n        }\n    };\n}\n\n// ES5 15.4.4.19\n// http://es5.github.com/#x15.4.4.19\n// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/map\nif (!Array.prototype.map) {\n    Array.prototype.map = function map(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            result = Array(length),\n            thisp = arguments[1];\n\n        // If no callback function or if callback is not a callable function\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self)\n                result[i] = fun.call(thisp, self[i], i, object);\n        }\n        return result;\n    };\n}\n\n// ES5 15.4.4.20\n// http://es5.github.com/#x15.4.4.20\n// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/filter\nif (!Array.prototype.filter) {\n    Array.prototype.filter = function filter(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                    object,\n            length = self.length >>> 0,\n            result = [],\n            value,\n            thisp = arguments[1];\n\n        // If no callback function or if callback is not a callable function\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self) {\n                value = self[i];\n                if (fun.call(thisp, value, i, object)) {\n                    result.push(value);\n                }\n            }\n        }\n        return result;\n    };\n}\n\n// ES5 15.4.4.16\n// http://es5.github.com/#x15.4.4.16\n// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/every\nif (!Array.prototype.every) {\n    Array.prototype.every = function every(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n\n        // If no callback function or if callback is not a callable function\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && !fun.call(thisp, self[i], i, object)) {\n                return false;\n            }\n        }\n        return true;\n    };\n}\n\n// ES5 15.4.4.17\n// http://es5.github.com/#x15.4.4.17\n// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/some\nif (!Array.prototype.some) {\n    Array.prototype.some = function some(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n\n        // If no callback function or if callback is not a callable function\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && fun.call(thisp, self[i], i, object)) {\n                return true;\n            }\n        }\n        return false;\n    };\n}\n\n// ES5 15.4.4.21\n// http://es5.github.com/#x15.4.4.21\n// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/reduce\nif (!Array.prototype.reduce) {\n    Array.prototype.reduce = function reduce(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n\n        // If no callback function or if callback is not a callable function\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        // no value to return if no initial value and an empty array\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduce of empty array with no initial value\");\n        }\n\n        var i = 0;\n        var result;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i++];\n                    break;\n                }\n\n                // if array contains no values, no initial value to return\n                if (++i >= length) {\n                    throw new TypeError(\"reduce of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        for (; i < length; i++) {\n            if (i in self) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        }\n\n        return result;\n    };\n}\n\n// ES5 15.4.4.22\n// http://es5.github.com/#x15.4.4.22\n// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/reduceRight\nif (!Array.prototype.reduceRight) {\n    Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n\n        // If no callback function or if callback is not a callable function\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        // no value to return if no initial value, empty array\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduceRight of empty array with no initial value\");\n        }\n\n        var result, i = length - 1;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i--];\n                    break;\n                }\n\n                // if array contains no values, no initial value to return\n                if (--i < 0) {\n                    throw new TypeError(\"reduceRight of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        do {\n            if (i in this) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        } while (i--);\n\n        return result;\n    };\n}\n\n// ES5 15.4.4.14\n// http://es5.github.com/#x15.4.4.14\n// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf\nif (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) {\n    Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n\n        var i = 0;\n        if (arguments.length > 1) {\n            i = toInteger(arguments[1]);\n        }\n\n        // handle negative indices\n        i = i >= 0 ? i : Math.max(0, length + i);\n        for (; i < length; i++) {\n            if (i in self && self[i] === sought) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\n\n// ES5 15.4.4.15\n// http://es5.github.com/#x15.4.4.15\n// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/lastIndexOf\nif (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) {\n    Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n        var i = length - 1;\n        if (arguments.length > 1) {\n            i = Math.min(i, toInteger(arguments[1]));\n        }\n        // handle negative indices\n        i = i >= 0 ? i : length - Math.abs(i);\n        for (; i >= 0; i--) {\n            if (i in self && sought === self[i]) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\n\n//\n// Object\n// ======\n//\n\n// ES5 15.2.3.2\n// http://es5.github.com/#x15.2.3.2\nif (!Object.getPrototypeOf) {\n    // https://github.com/kriskowal/es5-shim/issues#issue/2\n    // http://ejohn.org/blog/objectgetprototypeof/\n    // recommended by fschaefer on github\n    Object.getPrototypeOf = function getPrototypeOf(object) {\n        return object.__proto__ || (\n            object.constructor ?\n            object.constructor.prototype :\n            prototypeOfObject\n        );\n    };\n}\n\n// ES5 15.2.3.3\n// http://es5.github.com/#x15.2.3.3\nif (!Object.getOwnPropertyDescriptor) {\n    var ERR_NON_OBJECT = \"Object.getOwnPropertyDescriptor called on a \" +\n                         \"non-object: \";\n    Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT + object);\n        // If object does not owns property return undefined immediately.\n        if (!owns(object, property))\n            return;\n\n        var descriptor, getter, setter;\n\n        // If object has a property then it's for sure both `enumerable` and\n        // `configurable`.\n        descriptor =  { enumerable: true, configurable: true };\n\n        // If JS engine supports accessor properties then property may be a\n        // getter or setter.\n        if (supportsAccessors) {\n            // Unfortunately `__lookupGetter__` will return a getter even\n            // if object has own non getter property along with a same named\n            // inherited getter. To avoid misbehavior we temporary remove\n            // `__proto__` so that `__lookupGetter__` will return getter only\n            // if it's owned by an object.\n            var prototype = object.__proto__;\n            object.__proto__ = prototypeOfObject;\n\n            var getter = lookupGetter(object, property);\n            var setter = lookupSetter(object, property);\n\n            // Once we have getter and setter we can put values back.\n            object.__proto__ = prototype;\n\n            if (getter || setter) {\n                if (getter) descriptor.get = getter;\n                if (setter) descriptor.set = setter;\n\n                // If it was accessor property we're done and return here\n                // in order to avoid adding `value` to the descriptor.\n                return descriptor;\n            }\n        }\n\n        // If we got this far we know that object has an own property that is\n        // not an accessor so we set it as a value and return descriptor.\n        descriptor.value = object[property];\n        return descriptor;\n    };\n}\n\n// ES5 15.2.3.4\n// http://es5.github.com/#x15.2.3.4\nif (!Object.getOwnPropertyNames) {\n    Object.getOwnPropertyNames = function getOwnPropertyNames(object) {\n        return Object.keys(object);\n    };\n}\n\n// ES5 15.2.3.5\n// http://es5.github.com/#x15.2.3.5\nif (!Object.create) {\n    var createEmpty;\n    if (Object.prototype.__proto__ === null) {\n        createEmpty = function () {\n            return { \"__proto__\": null };\n        };\n    } else {\n        // In old IE __proto__ can't be used to manually set `null`\n        createEmpty = function () {\n            var empty = {};\n            for (var i in empty)\n                empty[i] = null;\n            empty.constructor =\n            empty.hasOwnProperty =\n            empty.propertyIsEnumerable =\n            empty.isPrototypeOf =\n            empty.toLocaleString =\n            empty.toString =\n            empty.valueOf =\n            empty.__proto__ = null;\n            return empty;\n        }\n    }\n\n    Object.create = function create(prototype, properties) {\n        var object;\n        if (prototype === null) {\n            object = createEmpty();\n        } else {\n            if (typeof prototype != \"object\")\n                throw new TypeError(\"typeof prototype[\"+(typeof prototype)+\"] != 'object'\");\n            var Type = function () {};\n            Type.prototype = prototype;\n            object = new Type();\n            // IE has no built-in implementation of `Object.getPrototypeOf`\n            // neither `__proto__`, but this manually setting `__proto__` will\n            // guarantee that `Object.getPrototypeOf` will work as expected with\n            // objects created using `Object.create`\n            object.__proto__ = prototype;\n        }\n        if (properties !== void 0)\n            Object.defineProperties(object, properties);\n        return object;\n    };\n}\n\n// ES5 15.2.3.6\n// http://es5.github.com/#x15.2.3.6\n\n// Patch for WebKit and IE8 standard mode\n// Designed by hax <hax.github.com>\n// related issue: https://github.com/kriskowal/es5-shim/issues#issue/5\n// IE8 Reference:\n//     http://msdn.microsoft.com/en-us/library/dd282900.aspx\n//     http://msdn.microsoft.com/en-us/library/dd229916.aspx\n// WebKit Bugs:\n//     https://bugs.webkit.org/show_bug.cgi?id=36423\n\nfunction doesDefinePropertyWork(object) {\n    try {\n        Object.defineProperty(object, \"sentinel\", {});\n        return \"sentinel\" in object;\n    } catch (exception) {\n        // returns falsy\n    }\n}\n\n// check whether defineProperty works if it's given. Otherwise,\n// shim partially.\nif (Object.defineProperty) {\n    var definePropertyWorksOnObject = doesDefinePropertyWork({});\n    var definePropertyWorksOnDom = typeof document == \"undefined\" ||\n        doesDefinePropertyWork(document.createElement(\"div\"));\n    if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {\n        var definePropertyFallback = Object.defineProperty;\n    }\n}\n\nif (!Object.defineProperty || definePropertyFallback) {\n    var ERR_NON_OBJECT_DESCRIPTOR = \"Property description must be an object: \";\n    var ERR_NON_OBJECT_TARGET = \"Object.defineProperty called on non-object: \"\n    var ERR_ACCESSORS_NOT_SUPPORTED = \"getters & setters can not be defined \" +\n                                      \"on this javascript engine\";\n\n    Object.defineProperty = function defineProperty(object, property, descriptor) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT_TARGET + object);\n        if ((typeof descriptor != \"object\" && typeof descriptor != \"function\") || descriptor === null)\n            throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);\n\n        // make a valiant attempt to use the real defineProperty\n        // for I8's DOM elements.\n        if (definePropertyFallback) {\n            try {\n                return definePropertyFallback.call(Object, object, property, descriptor);\n            } catch (exception) {\n                // try the shim if the real one doesn't work\n            }\n        }\n\n        // If it's a data property.\n        if (owns(descriptor, \"value\")) {\n            // fail silently if \"writable\", \"enumerable\", or \"configurable\"\n            // are requested but not supported\n            /*\n            // alternate approach:\n            if ( // can't implement these features; allow false but not true\n                !(owns(descriptor, \"writable\") ? descriptor.writable : true) ||\n                !(owns(descriptor, \"enumerable\") ? descriptor.enumerable : true) ||\n                !(owns(descriptor, \"configurable\") ? descriptor.configurable : true)\n            )\n                throw new RangeError(\n                    \"This implementation of Object.defineProperty does not \" +\n                    \"support configurable, enumerable, or writable.\"\n                );\n            */\n\n            if (supportsAccessors && (lookupGetter(object, property) ||\n                                      lookupSetter(object, property)))\n            {\n                // As accessors are supported only on engines implementing\n                // `__proto__` we can safely override `__proto__` while defining\n                // a property to make sure that we don't hit an inherited\n                // accessor.\n                var prototype = object.__proto__;\n                object.__proto__ = prototypeOfObject;\n                // Deleting a property anyway since getter / setter may be\n                // defined on object itself.\n                delete object[property];\n                object[property] = descriptor.value;\n                // Setting original `__proto__` back now.\n                object.__proto__ = prototype;\n            } else {\n                object[property] = descriptor.value;\n            }\n        } else {\n            if (!supportsAccessors)\n                throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);\n            // If we got that far then getters and setters can be defined !!\n            if (owns(descriptor, \"get\"))\n                defineGetter(object, property, descriptor.get);\n            if (owns(descriptor, \"set\"))\n                defineSetter(object, property, descriptor.set);\n        }\n\n        return object;\n    };\n}\n\n// ES5 15.2.3.7\n// http://es5.github.com/#x15.2.3.7\nif (!Object.defineProperties) {\n    Object.defineProperties = function defineProperties(object, properties) {\n        for (var property in properties) {\n            if (owns(properties, property))\n                Object.defineProperty(object, property, properties[property]);\n        }\n        return object;\n    };\n}\n\n// ES5 15.2.3.8\n// http://es5.github.com/#x15.2.3.8\nif (!Object.seal) {\n    Object.seal = function seal(object) {\n        // this is misleading and breaks feature-detection, but\n        // allows \"securable\" code to \"gracefully\" degrade to working\n        // but insecure code.\n        return object;\n    };\n}\n\n// ES5 15.2.3.9\n// http://es5.github.com/#x15.2.3.9\nif (!Object.freeze) {\n    Object.freeze = function freeze(object) {\n        // this is misleading and breaks feature-detection, but\n        // allows \"securable\" code to \"gracefully\" degrade to working\n        // but insecure code.\n        return object;\n    };\n}\n\n// detect a Rhino bug and patch it\ntry {\n    Object.freeze(function () {});\n} catch (exception) {\n    Object.freeze = (function freeze(freezeObject) {\n        return function freeze(object) {\n            if (typeof object == \"function\") {\n                return object;\n            } else {\n                return freezeObject(object);\n            }\n        };\n    })(Object.freeze);\n}\n\n// ES5 15.2.3.10\n// http://es5.github.com/#x15.2.3.10\nif (!Object.preventExtensions) {\n    Object.preventExtensions = function preventExtensions(object) {\n        // this is misleading and breaks feature-detection, but\n        // allows \"securable\" code to \"gracefully\" degrade to working\n        // but insecure code.\n        return object;\n    };\n}\n\n// ES5 15.2.3.11\n// http://es5.github.com/#x15.2.3.11\nif (!Object.isSealed) {\n    Object.isSealed = function isSealed(object) {\n        return false;\n    };\n}\n\n// ES5 15.2.3.12\n// http://es5.github.com/#x15.2.3.12\nif (!Object.isFrozen) {\n    Object.isFrozen = function isFrozen(object) {\n        return false;\n    };\n}\n\n// ES5 15.2.3.13\n// http://es5.github.com/#x15.2.3.13\nif (!Object.isExtensible) {\n    Object.isExtensible = function isExtensible(object) {\n        // 1. If Type(O) is not Object throw a TypeError exception.\n        if (Object(object) === object) {\n            throw new TypeError(); // TODO message\n        }\n        // 2. Return the Boolean value of the [[Extensible]] internal property of O.\n        var name = '';\n        while (owns(object, name)) {\n            name += '?';\n        }\n        object[name] = true;\n        var returnValue = owns(object, name);\n        delete object[name];\n        return returnValue;\n    };\n}\n\n// ES5 15.2.3.14\n// http://es5.github.com/#x15.2.3.14\nif (!Object.keys) {\n    // http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation\n    var hasDontEnumBug = true,\n        dontEnums = [\n            \"toString\",\n            \"toLocaleString\",\n            \"valueOf\",\n            \"hasOwnProperty\",\n            \"isPrototypeOf\",\n            \"propertyIsEnumerable\",\n            \"constructor\"\n        ],\n        dontEnumsLength = dontEnums.length;\n\n    for (var key in {\"toString\": null}) {\n        hasDontEnumBug = false;\n    }\n\n    Object.keys = function keys(object) {\n\n        if (\n            (typeof object != \"object\" && typeof object != \"function\") ||\n            object === null\n        ) {\n            throw new TypeError(\"Object.keys called on a non-object\");\n        }\n\n        var keys = [];\n        for (var name in object) {\n            if (owns(object, name)) {\n                keys.push(name);\n            }\n        }\n\n        if (hasDontEnumBug) {\n            for (var i = 0, ii = dontEnumsLength; i < ii; i++) {\n                var dontEnum = dontEnums[i];\n                if (owns(object, dontEnum)) {\n                    keys.push(dontEnum);\n                }\n            }\n        }\n        return keys;\n    };\n\n}\n\n//\n// most of es5-shim Date section is removed since ace doesn't need it, it is too intrusive and it causes problems for users\n// ====\n//\n\n// ES5 15.9.4.4\n// http://es5.github.com/#x15.9.4.4\nif (!Date.now) {\n    Date.now = function now() {\n        return new Date().getTime();\n    };\n}\n\n\n//\n// String\n// ======\n//\n\n// ES5 15.5.4.20\n// http://es5.github.com/#x15.5.4.20\nvar ws = \"\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\" +\n    \"\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\" +\n    \"\\u2029\\uFEFF\";\nif (!String.prototype.trim || ws.trim()) {\n    // http://blog.stevenlevithan.com/archives/faster-trim-javascript\n    // http://perfectionkills.com/whitespace-deviations/\n    ws = \"[\" + ws + \"]\";\n    var trimBeginRegexp = new RegExp(\"^\" + ws + ws + \"*\"),\n        trimEndRegexp = new RegExp(ws + ws + \"*$\");\n    String.prototype.trim = function trim() {\n        return String(this).replace(trimBeginRegexp, \"\").replace(trimEndRegexp, \"\");\n    };\n}\n\n//\n// Util\n// ======\n//\n\n// ES5 9.4\n// http://es5.github.com/#x9.4\n// http://jsperf.com/to-integer\n\nfunction toInteger(n) {\n    n = +n;\n    if (n !== n) { // isNaN\n        n = 0;\n    } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) {\n        n = (n > 0 || -1) * Math.floor(Math.abs(n));\n    }\n    return n;\n}\n\nfunction isPrimitive(input) {\n    var type = typeof input;\n    return (\n        input === null ||\n        type === \"undefined\" ||\n        type === \"boolean\" ||\n        type === \"number\" ||\n        type === \"string\"\n    );\n}\n\nfunction toPrimitive(input) {\n    var val, valueOf, toString;\n    if (isPrimitive(input)) {\n        return input;\n    }\n    valueOf = input.valueOf;\n    if (typeof valueOf === \"function\") {\n        val = valueOf.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    toString = input.toString;\n    if (typeof toString === \"function\") {\n        val = toString.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    throw new TypeError();\n}\n\n// ES5 9.9\n// http://es5.github.com/#x9.9\nvar toObject = function (o) {\n    if (o == null) { // this matches both null and undefined\n        throw new TypeError(\"can't convert \"+o+\" to object\");\n    }\n    return Object(o);\n};\n\n});\n"
  },
  {
    "path": "lib/ace/lib/event.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar keys = require(\"./keys\");\nvar useragent = require(\"./useragent\");\n\nvar pressedKeys = null;\nvar ts = 0;\n\nexports.addListener = function(elem, type, callback) {\n    if (elem.addEventListener) {\n        return elem.addEventListener(type, callback, false);\n    }\n    if (elem.attachEvent) {\n        var wrapper = function() {\n            callback.call(elem, window.event);\n        };\n        callback._wrapper = wrapper;\n        elem.attachEvent(\"on\" + type, wrapper);\n    }\n};\n\nexports.removeListener = function(elem, type, callback) {\n    if (elem.removeEventListener) {\n        return elem.removeEventListener(type, callback, false);\n    }\n    if (elem.detachEvent) {\n        elem.detachEvent(\"on\" + type, callback._wrapper || callback);\n    }\n};\n\n/*\n* Prevents propagation and clobbers the default action of the passed event\n*/\nexports.stopEvent = function(e) {\n    exports.stopPropagation(e);\n    exports.preventDefault(e);\n    return false;\n};\n\nexports.stopPropagation = function(e) {\n    if (e.stopPropagation)\n        e.stopPropagation();\n    else\n        e.cancelBubble = true;\n};\n\nexports.preventDefault = function(e) {\n    if (e.preventDefault)\n        e.preventDefault();\n    else\n        e.returnValue = false;\n};\n\n/*\n * @return {Number} 0 for left button, 1 for middle button, 2 for right button\n */\nexports.getButton = function(e) {\n    if (e.type == \"dblclick\")\n        return 0;\n    if (e.type == \"contextmenu\" || (useragent.isMac && (e.ctrlKey && !e.altKey && !e.shiftKey)))\n        return 2;\n\n    // DOM Event\n    if (e.preventDefault) {\n        return e.button;\n    }\n    // old IE\n    else {\n        return {1:0, 2:2, 4:1}[e.button];\n    }\n};\n\nexports.capture = function(el, eventHandler, releaseCaptureHandler) {\n    function onMouseUp(e) {\n        eventHandler && eventHandler(e);\n        releaseCaptureHandler && releaseCaptureHandler(e);\n\n        exports.removeListener(document, \"mousemove\", eventHandler, true);\n        exports.removeListener(document, \"mouseup\", onMouseUp, true);\n        exports.removeListener(document, \"dragstart\", onMouseUp, true);\n    }\n\n    exports.addListener(document, \"mousemove\", eventHandler, true);\n    exports.addListener(document, \"mouseup\", onMouseUp, true);\n    exports.addListener(document, \"dragstart\", onMouseUp, true);\n    \n    return onMouseUp;\n};\n\nexports.addTouchMoveListener = function (el, callback) {\n    var startx, starty;\n    exports.addListener(el, \"touchstart\", function (e) {\n        var touches = e.touches;\n        var touchObj = touches[0];\n        startx = touchObj.clientX;\n        starty = touchObj.clientY;\n    });\n    exports.addListener(el, \"touchmove\", function (e) {\n        var touches = e.touches;\n        if (touches.length > 1) return;\n        \n        var touchObj = touches[0];\n\n        e.wheelX = startx - touchObj.clientX;\n        e.wheelY = starty - touchObj.clientY;\n\n        startx = touchObj.clientX;\n        starty = touchObj.clientY;\n\n        callback(e);\n    });\n};\n\nexports.addMouseWheelListener = function(el, callback) {\n    if (\"onmousewheel\" in el) {\n        exports.addListener(el, \"mousewheel\", function(e) {\n            var factor = 8;\n            if (e.wheelDeltaX !== undefined) {\n                e.wheelX = -e.wheelDeltaX / factor;\n                e.wheelY = -e.wheelDeltaY / factor;\n            } else {\n                e.wheelX = 0;\n                e.wheelY = -e.wheelDelta / factor;\n            }\n            callback(e);\n        });\n    } else if (\"onwheel\" in el) {\n        exports.addListener(el, \"wheel\",  function(e) {\n            var factor = 0.35;\n            switch (e.deltaMode) {\n                case e.DOM_DELTA_PIXEL:\n                    e.wheelX = e.deltaX * factor || 0;\n                    e.wheelY = e.deltaY * factor || 0;\n                    break;\n                case e.DOM_DELTA_LINE:\n                case e.DOM_DELTA_PAGE:\n                    e.wheelX = (e.deltaX || 0) * 5;\n                    e.wheelY = (e.deltaY || 0) * 5;\n                    break;\n            }\n            \n            callback(e);\n        });\n    } else {\n        exports.addListener(el, \"DOMMouseScroll\", function(e) {\n            if (e.axis && e.axis == e.HORIZONTAL_AXIS) {\n                e.wheelX = (e.detail || 0) * 5;\n                e.wheelY = 0;\n            } else {\n                e.wheelX = 0;\n                e.wheelY = (e.detail || 0) * 5;\n            }\n            callback(e);\n        });\n    }\n};\n\nexports.addMultiMouseDownListener = function(elements, timeouts, eventHandler, callbackName) {\n    var clicks = 0;\n    var startX, startY, timer; \n    var eventNames = {\n        2: \"dblclick\",\n        3: \"tripleclick\",\n        4: \"quadclick\"\n    };\n\n    function onMousedown(e) {\n        if (exports.getButton(e) !== 0) {\n            clicks = 0;\n        } else if (e.detail > 1) {\n            clicks++;\n            if (clicks > 4)\n                clicks = 1;\n        } else {\n            clicks = 1;\n        }\n        if (useragent.isIE) {\n            var isNewClick = Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5;\n            if (!timer || isNewClick)\n                clicks = 1;\n            if (timer)\n                clearTimeout(timer);\n            timer = setTimeout(function() {timer = null;}, timeouts[clicks - 1] || 600);\n\n            if (clicks == 1) {\n                startX = e.clientX;\n                startY = e.clientY;\n            }\n        }\n        \n        e._clicks = clicks;\n\n        eventHandler[callbackName](\"mousedown\", e);\n\n        if (clicks > 4)\n            clicks = 0;\n        else if (clicks > 1)\n            return eventHandler[callbackName](eventNames[clicks], e);\n    }\n    function onDblclick(e) {\n        clicks = 2;\n        if (timer)\n            clearTimeout(timer);\n        timer = setTimeout(function() {timer = null;}, timeouts[clicks - 1] || 600);\n        eventHandler[callbackName](\"mousedown\", e);\n        eventHandler[callbackName](eventNames[clicks], e);\n    }\n    if (!Array.isArray(elements))\n        elements = [elements];\n    elements.forEach(function(el) {\n        exports.addListener(el, \"mousedown\", onMousedown);\n        if (useragent.isOldIE)\n            exports.addListener(el, \"dblclick\", onDblclick);\n    });\n};\n\nvar getModifierHash = useragent.isMac && useragent.isOpera && !(\"KeyboardEvent\" in window)\n    ? function(e) {\n        return 0 | (e.metaKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.ctrlKey ? 8 : 0);\n    }\n    : function(e) {\n        return 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0);\n    };\n\nexports.getModifierString = function(e) {\n    return keys.KEY_MODS[getModifierHash(e)];\n};\n\nfunction normalizeCommandKeys(callback, e, keyCode) {\n    var hashId = getModifierHash(e);\n\n    if (!useragent.isMac && pressedKeys) {\n        if (e.getModifierState && (e.getModifierState(\"OS\") || e.getModifierState(\"Win\")))\n            hashId |= 8;\n        if (pressedKeys.altGr) {\n            if ((3 & hashId) != 3)\n                pressedKeys.altGr = 0;\n            else\n                return;\n        }\n        if (keyCode === 18 || keyCode === 17) {\n            var location = \"location\" in e ? e.location : e.keyLocation;\n            if (keyCode === 17 && location === 1) {\n                if (pressedKeys[keyCode] == 1)\n                    ts = e.timeStamp;\n            } else if (keyCode === 18 && hashId === 3 && location === 2) {\n                var dt = e.timeStamp - ts;\n                if (dt < 50)\n                    pressedKeys.altGr = true;\n            }\n        }\n    }\n    \n    if (keyCode in keys.MODIFIER_KEYS) {\n        keyCode = -1;\n    }\n\n    // keyCode of right command is 93 on mac and 92 on windows.\n    // keyCode of left command key is 91\n    if (hashId & 8 && (keyCode >= 91 && keyCode <= 93)) {\n        keyCode = -1;\n    }\n    \n    if (!hashId && keyCode === 13) {\n        var location = \"location\" in e ? e.location : e.keyLocation;\n        if (location === 3) {\n            callback(e, hashId, -keyCode);\n            if (e.defaultPrevented)\n                return;\n        }\n    }\n    \n    if (useragent.isChromeOS && hashId & 8) {\n        callback(e, hashId, keyCode);\n        if (e.defaultPrevented)\n            return;\n        else\n            hashId &= ~8;\n    }\n\n    // If there is no hashId and the keyCode is not a function key, then\n    // we don't call the callback as we don't handle a command key here\n    // (it's a normal key/character input).\n    if (!hashId && !(keyCode in keys.FUNCTION_KEYS) && !(keyCode in keys.PRINTABLE_KEYS)) {\n        return false;\n    }\n    \n    return callback(e, hashId, keyCode);\n}\n\n\nexports.addCommandKeyListener = function(el, callback) {\n    var addListener = exports.addListener;\n    if (useragent.isOldGecko || (useragent.isOpera && !(\"KeyboardEvent\" in window))) {\n        // Old versions of Gecko aka. Firefox < 4.0 didn't repeat the keydown\n        // event if the user pressed the key for a longer time. Instead, the\n        // keydown event was fired once and later on only the keypress event.\n        // To emulate the 'right' keydown behavior, the keyCode of the initial\n        // keyDown event is stored and in the following keypress events the\n        // stores keyCode is used to emulate a keyDown event.\n        var lastKeyDownKeyCode = null;\n        addListener(el, \"keydown\", function(e) {\n            lastKeyDownKeyCode = e.keyCode;\n        });\n        addListener(el, \"keypress\", function(e) {\n            return normalizeCommandKeys(callback, e, lastKeyDownKeyCode);\n        });\n    } else {\n        var lastDefaultPrevented = null;\n\n        addListener(el, \"keydown\", function(e) {\n            pressedKeys[e.keyCode] = (pressedKeys[e.keyCode] || 0) + 1;\n            var result = normalizeCommandKeys(callback, e, e.keyCode);\n            lastDefaultPrevented = e.defaultPrevented;\n            return result;\n        });\n\n        addListener(el, \"keypress\", function(e) {\n            if (lastDefaultPrevented && (e.ctrlKey || e.altKey || e.shiftKey || e.metaKey)) {\n                exports.stopEvent(e);\n                lastDefaultPrevented = null;\n            }\n        });\n\n        addListener(el, \"keyup\", function(e) {\n            pressedKeys[e.keyCode] = null;\n        });\n\n        if (!pressedKeys) {\n            resetPressedKeys();\n            addListener(window, \"focus\", resetPressedKeys);\n        }\n    }\n};\nfunction resetPressedKeys() {\n    // console.log(\"resetting\")\n    pressedKeys = Object.create(null);\n}\n\nif (typeof window == \"object\" && window.postMessage && !useragent.isOldIE) {\n    var postMessageId = 1;\n    exports.nextTick = function(callback, win) {\n        win = win || window;\n        var messageName = \"zero-timeout-message-\" + postMessageId;\n        exports.addListener(win, \"message\", function listener(e) {\n            if (e.data == messageName) {\n                exports.stopPropagation(e);\n                exports.removeListener(win, \"message\", listener);\n                callback();\n            }\n        });\n        win.postMessage(messageName, \"*\");\n    };\n}\n\n\nexports.nextFrame = typeof window == \"object\" && (window.requestAnimationFrame\n    || window.mozRequestAnimationFrame\n    || window.webkitRequestAnimationFrame\n    || window.msRequestAnimationFrame\n    || window.oRequestAnimationFrame);\n\nif (exports.nextFrame)\n    exports.nextFrame = exports.nextFrame.bind(window);\nelse\n    exports.nextFrame = function(callback) {\n        setTimeout(callback, 17);\n    };\n});\n"
  },
  {
    "path": "lib/ace/lib/event_emitter.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar EventEmitter = {};\nvar stopPropagation = function() { this.propagationStopped = true; };\nvar preventDefault = function() { this.defaultPrevented = true; };\n\nEventEmitter._emit =\nEventEmitter._dispatchEvent = function(eventName, e) {\n    this._eventRegistry || (this._eventRegistry = {});\n    this._defaultHandlers || (this._defaultHandlers = {});\n\n    var listeners = this._eventRegistry[eventName] || [];\n    var defaultHandler = this._defaultHandlers[eventName];\n    if (!listeners.length && !defaultHandler)\n        return;\n\n    if (typeof e != \"object\" || !e)\n        e = {};\n\n    if (!e.type)\n        e.type = eventName;\n    if (!e.stopPropagation)\n        e.stopPropagation = stopPropagation;\n    if (!e.preventDefault)\n        e.preventDefault = preventDefault;\n\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++) {\n        listeners[i](e, this);\n        if (e.propagationStopped)\n            break;\n    }\n    \n    if (defaultHandler && !e.defaultPrevented)\n        return defaultHandler(e, this);\n};\n\n\nEventEmitter._signal = function(eventName, e) {\n    var listeners = (this._eventRegistry || {})[eventName];\n    if (!listeners)\n        return;\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++)\n        listeners[i](e, this);\n};\n\nEventEmitter.once = function(eventName, callback) {\n    var _self = this;\n    callback && this.addEventListener(eventName, function newCallback() {\n        _self.removeEventListener(eventName, newCallback);\n        callback.apply(null, arguments);\n    });\n};\n\n\nEventEmitter.setDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        handlers = this._defaultHandlers = {_disabled_: {}};\n    \n    if (handlers[eventName]) {\n        var old = handlers[eventName];\n        var disabled = handlers._disabled_[eventName];\n        if (!disabled)\n            handlers._disabled_[eventName] = disabled = [];\n        disabled.push(old);\n        var i = disabled.indexOf(callback);\n        if (i != -1) \n            disabled.splice(i, 1);\n    }\n    handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        return;\n    var disabled = handlers._disabled_[eventName];\n    \n    if (handlers[eventName] == callback) {\n        var old = handlers[eventName];\n        if (disabled)\n            this.setDefaultHandler(eventName, disabled.pop());\n    } else if (disabled) {\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n};\n\nEventEmitter.on =\nEventEmitter.addEventListener = function(eventName, callback, capturing) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        listeners = this._eventRegistry[eventName] = [];\n\n    if (listeners.indexOf(callback) == -1)\n        listeners[capturing ? \"unshift\" : \"push\"](callback);\n    return callback;\n};\n\nEventEmitter.off =\nEventEmitter.removeListener =\nEventEmitter.removeEventListener = function(eventName, callback) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        return;\n\n    var index = listeners.indexOf(callback);\n    if (index !== -1)\n        listeners.splice(index, 1);\n};\n\nEventEmitter.removeAllListeners = function(eventName) {\n    if (this._eventRegistry) this._eventRegistry[eventName] = [];\n};\n\nexports.EventEmitter = EventEmitter;\n\n});\n"
  },
  {
    "path": "lib/ace/lib/event_emitter_test.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\nif (typeof process !== \"undefined\") {\n    require(\"amd-loader\");\n}\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar EventEmitter = require(\"./event_emitter\").EventEmitter;\nvar assert = require(\"../test/assertions\");\n\nvar Emitter = function() {};\n\noop.implement(Emitter.prototype, EventEmitter);\n\nmodule.exports = {\n    \"test: dispatch event with no data\" : function() {\n        var emitter = new Emitter();\n\n        var called = false;\n        emitter.addEventListener(\"juhu\", function(e) {\n           called = true;\n           assert.equal(e.type, \"juhu\");\n        });\n\n        emitter._emit(\"juhu\");\n        assert.ok(called);\n    }\n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main) {\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n}\n"
  },
  {
    "path": "lib/ace/lib/fixoldbrowsers.js",
    "content": "// vim:set ts=4 sts=4 sw=4 st:\n// -- kriskowal Kris Kowal Copyright (C) 2009-2010 MIT License\n// -- tlrobinson Tom Robinson Copyright (C) 2009-2010 MIT License (Narwhal Project)\n// -- dantman Daniel Friesen Copyright(C) 2010 XXX No License Specified\n// -- fschaefer Florian Schäfer Copyright (C) 2010 MIT License\n// -- Irakli Gozalishvili Copyright (C) 2010 MIT License\n\n/*!\n    Copyright (c) 2009, 280 North Inc. http://280north.com/\n    MIT License. http://github.com/280north/narwhal/blob/master/README.md\n*/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nrequire(\"./regexp\");\nrequire(\"./es5-shim\");\n\n});\n"
  },
  {
    "path": "lib/ace/lib/keys.js",
    "content": "/*! @license\n==========================================================================\nSproutCore -- JavaScript Application Framework\ncopyright 2006-2009, Sprout Systems Inc., Apple Inc. and contributors.\n\nPermission is hereby granted, free of charge, to any person obtaining a\ncopy of this software and associated documentation files (the \"Software\"),\nto deal in the Software without restriction, including without limitation\nthe rights to use, copy, modify, merge, publish, distribute, sublicense,\nand/or sell copies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\nDEALINGS IN THE SOFTWARE.\n\nSproutCore and the SproutCore logo are trademarks of Sprout Systems, Inc.\n\nFor more information about SproutCore, visit http://www.sproutcore.com\n\n\n==========================================================================\n@license */\n\n// Most of the following code is taken from SproutCore with a few changes.\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nrequire(\"./fixoldbrowsers\");\n\nvar oop = require(\"./oop\");\n\n/*\n * Helper functions and hashes for key handling.\n */\nvar Keys = (function() {\n    var ret = {\n        MODIFIER_KEYS: {\n            16: 'Shift', 17: 'Ctrl', 18: 'Alt', 224: 'Meta'\n        },\n\n        KEY_MODS: {\n            \"ctrl\": 1, \"alt\": 2, \"option\" : 2, \"shift\": 4,\n            \"super\": 8, \"meta\": 8, \"command\": 8, \"cmd\": 8\n        },\n\n        FUNCTION_KEYS : {\n            8  : \"Backspace\",\n            9  : \"Tab\",\n            13 : \"Return\",\n            19 : \"Pause\",\n            27 : \"Esc\",\n            32 : \"Space\",\n            33 : \"PageUp\",\n            34 : \"PageDown\",\n            35 : \"End\",\n            36 : \"Home\",\n            37 : \"Left\",\n            38 : \"Up\",\n            39 : \"Right\",\n            40 : \"Down\",\n            44 : \"Print\",\n            45 : \"Insert\",\n            46 : \"Delete\",\n            96 : \"Numpad0\",\n            97 : \"Numpad1\",\n            98 : \"Numpad2\",\n            99 : \"Numpad3\",\n            100: \"Numpad4\",\n            101: \"Numpad5\",\n            102: \"Numpad6\",\n            103: \"Numpad7\",\n            104: \"Numpad8\",\n            105: \"Numpad9\",\n            '-13': \"NumpadEnter\",\n            112: \"F1\",\n            113: \"F2\",\n            114: \"F3\",\n            115: \"F4\",\n            116: \"F5\",\n            117: \"F6\",\n            118: \"F7\",\n            119: \"F8\",\n            120: \"F9\",\n            121: \"F10\",\n            122: \"F11\",\n            123: \"F12\",\n            144: \"Numlock\",\n            145: \"Scrolllock\"\n        },\n\n        PRINTABLE_KEYS: {\n           32: ' ',  48: '0',  49: '1',  50: '2',  51: '3',  52: '4', 53:  '5',\n           54: '6',  55: '7',  56: '8',  57: '9',  59: ';',  61: '=', 65:  'a',\n           66: 'b',  67: 'c',  68: 'd',  69: 'e',  70: 'f',  71: 'g', 72:  'h',\n           73: 'i',  74: 'j',  75: 'k',  76: 'l',  77: 'm',  78: 'n', 79:  'o',\n           80: 'p',  81: 'q',  82: 'r',  83: 's',  84: 't',  85: 'u', 86:  'v',\n           87: 'w',  88: 'x',  89: 'y',  90: 'z', 107: '+', 109: '-', 110: '.',\n          186: ';', 187: '=', 188: ',', 189: '-', 190: '.', 191: '/', 192: '`',\n          219: '[', 220: '\\\\',221: ']', 222: \"'\", 111: '/', 106: '*'\n        }\n    };\n\n    // A reverse map of FUNCTION_KEYS\n    var name, i;\n    for (i in ret.FUNCTION_KEYS) {\n        name = ret.FUNCTION_KEYS[i].toLowerCase();\n        ret[name] = parseInt(i, 10);\n    }\n\n    // A reverse map of PRINTABLE_KEYS\n    for (i in ret.PRINTABLE_KEYS) {\n        name = ret.PRINTABLE_KEYS[i].toLowerCase();\n        ret[name] = parseInt(i, 10);\n    }\n\n    // Add the MODIFIER_KEYS, FUNCTION_KEYS and PRINTABLE_KEYS to the KEY\n    // variables as well.\n    oop.mixin(ret, ret.MODIFIER_KEYS);\n    oop.mixin(ret, ret.PRINTABLE_KEYS);\n    oop.mixin(ret, ret.FUNCTION_KEYS);\n\n    // aliases\n    ret.enter = ret[\"return\"];\n    ret.escape = ret.esc;\n    ret.del = ret[\"delete\"];\n\n    // workaround for firefox bug\n    ret[173] = '-';\n    \n    (function() {\n        var mods = [\"cmd\", \"ctrl\", \"alt\", \"shift\"];\n        for (var i = Math.pow(2, mods.length); i--;) {            \n            ret.KEY_MODS[i] = mods.filter(function(x) {\n                return i & ret.KEY_MODS[x];\n            }).join(\"-\") + \"-\";\n        }\n    })();\n\n    ret.KEY_MODS[0] = \"\";\n    ret.KEY_MODS[-1] = \"input-\";\n\n    return ret;\n})();\noop.mixin(exports, Keys);\n\nexports.keyCodeToString = function(keyCode) {\n    // Language-switching keystroke in Chrome/Linux emits keyCode 0.\n    var keyString = Keys[keyCode];\n    if (typeof keyString != \"string\")\n        keyString = String.fromCharCode(keyCode);\n    return keyString.toLowerCase();\n};\n\n});\n"
  },
  {
    "path": "lib/ace/lib/lang.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nexports.last = function(a) {\n    return a[a.length - 1];\n};\n\nexports.stringReverse = function(string) {\n    return string.split(\"\").reverse().join(\"\");\n};\n\nexports.stringRepeat = function (string, count) {\n    var result = '';\n    while (count > 0) {\n        if (count & 1)\n            result += string;\n\n        if (count >>= 1)\n            string += string;\n    }\n    return result;\n};\n\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\n\nexports.stringTrimLeft = function (string) {\n    return string.replace(trimBeginRegexp, '');\n};\n\nexports.stringTrimRight = function (string) {\n    return string.replace(trimEndRegexp, '');\n};\n\nexports.copyObject = function(obj) {\n    var copy = {};\n    for (var key in obj) {\n        copy[key] = obj[key];\n    }\n    return copy;\n};\n\nexports.copyArray = function(array){\n    var copy = [];\n    for (var i=0, l=array.length; i<l; i++) {\n        if (array[i] && typeof array[i] == \"object\")\n            copy[i] = this.copyObject(array[i]);\n        else \n            copy[i] = array[i];\n    }\n    return copy;\n};\n\nexports.deepCopy = function deepCopy(obj) {\n    if (typeof obj !== \"object\" || !obj)\n        return obj;\n    var copy;\n    if (Array.isArray(obj)) {\n        copy = [];\n        for (var key = 0; key < obj.length; key++) {\n            copy[key] = deepCopy(obj[key]);\n        }\n        return copy;\n    }\n    if (Object.prototype.toString.call(obj) !== \"[object Object]\")\n        return obj;\n    \n    copy = {};\n    for (var key in obj)\n        copy[key] = deepCopy(obj[key]);\n    return copy;\n};\n\nexports.arrayToMap = function(arr) {\n    var map = {};\n    for (var i=0; i<arr.length; i++) {\n        map[arr[i]] = 1;\n    }\n    return map;\n\n};\n\nexports.createMap = function(props) {\n    var map = Object.create(null);\n    for (var i in props) {\n        map[i] = props[i];\n    }\n    return map;\n};\n\n/*\n * splice out of 'array' anything that === 'value'\n */\nexports.arrayRemove = function(array, value) {\n  for (var i = 0; i <= array.length; i++) {\n    if (value === array[i]) {\n      array.splice(i, 1);\n    }\n  }\n};\n\nexports.escapeRegExp = function(str) {\n    return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\n\nexports.escapeHTML = function(str) {\n    return str.replace(/&/g, \"&#38;\").replace(/\"/g, \"&#34;\").replace(/'/g, \"&#39;\").replace(/</g, \"&#60;\");\n};\n\nexports.getMatchOffsets = function(string, regExp) {\n    var matches = [];\n\n    string.replace(regExp, function(str) {\n        matches.push({\n            offset: arguments[arguments.length-2],\n            length: str.length\n        });\n    });\n\n    return matches;\n};\n\n/* deprecated */\nexports.deferredCall = function(fcn) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var deferred = function(timeout) {\n        deferred.cancel();\n        timer = setTimeout(callback, timeout || 0);\n        return deferred;\n    };\n\n    deferred.schedule = deferred;\n\n    deferred.call = function() {\n        this.cancel();\n        fcn();\n        return deferred;\n    };\n\n    deferred.cancel = function() {\n        clearTimeout(timer);\n        timer = null;\n        return deferred;\n    };\n    \n    deferred.isPending = function() {\n        return timer;\n    };\n\n    return deferred;\n};\n\n\nexports.delayedCall = function(fcn, defaultTimeout) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var _self = function(timeout) {\n        if (timer == null)\n            timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n\n    _self.delay = function(timeout) {\n        timer && clearTimeout(timer);\n        timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.schedule = _self;\n\n    _self.call = function() {\n        this.cancel();\n        fcn();\n    };\n\n    _self.cancel = function() {\n        timer && clearTimeout(timer);\n        timer = null;\n    };\n\n    _self.isPending = function() {\n        return timer;\n    };\n\n    return _self;\n};\n});\n"
  },
  {
    "path": "lib/ace/lib/net.js",
    "content": "/*\n * based on code from:\n *\n * @license RequireJS text 0.25.0 Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved.\n * Available via the MIT or new BSD license.\n * see: http://github.com/jrburke/requirejs for details\n */\ndefine(function(require, exports, module) {\n\"use strict\";\nvar dom = require(\"./dom\");\n\nexports.get = function (url, callback) {\n    var xhr = new XMLHttpRequest();\n    xhr.open('GET', url, true);\n    xhr.onreadystatechange = function () {\n        //Do not explicitly handle errors, those should be\n        //visible via console output in the browser.\n        if (xhr.readyState === 4) {\n            callback(xhr.responseText);\n        }\n    };\n    xhr.send(null);\n};\n\nexports.loadScript = function(path, callback) {\n    var head = dom.getDocumentHead();\n    var s = document.createElement('script');\n\n    s.src = path;\n    head.appendChild(s);\n\n    s.onload = s.onreadystatechange = function(_, isAbort) {\n        if (isAbort || !s.readyState || s.readyState == \"loaded\" || s.readyState == \"complete\") {\n            s = s.onload = s.onreadystatechange = null;\n            if (!isAbort)\n                callback();\n        }\n    };\n};\n\n/*\n * Convert a url into a fully qualified absolute URL\n * This function does not work in IE6\n */\nexports.qualifyURL = function(url) {\n    var a = document.createElement('a');\n    a.href = url;\n    return a.href;\n};\n\n});\n"
  },
  {
    "path": "lib/ace/lib/oop.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nexports.inherits = function(ctor, superCtor) {\n    ctor.super_ = superCtor;\n    ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n            value: ctor,\n            enumerable: false,\n            writable: true,\n            configurable: true\n        }\n    });\n};\n\nexports.mixin = function(obj, mixin) {\n    for (var key in mixin) {\n        obj[key] = mixin[key];\n    }\n    return obj;\n};\n\nexports.implement = function(proto, mixin) {\n    exports.mixin(proto, mixin);\n};\n\n});\n"
  },
  {
    "path": "lib/ace/lib/regexp.js",
    "content": "/*\n *  Based on code from:\n *\n * XRegExp 1.5.0\n * (c) 2007-2010 Steven Levithan\n * MIT License\n * <http://xregexp.com>\n * Provides an augmented, extensible, cross-browser implementation of regular expressions,\n * including support for additional syntax, flags, and methods\n */\n \ndefine(function(require, exports, module) {\n\"use strict\";\n\n    //---------------------------------\n    //  Private variables\n    //---------------------------------\n\n    var real = {\n            exec: RegExp.prototype.exec,\n            test: RegExp.prototype.test,\n            match: String.prototype.match,\n            replace: String.prototype.replace,\n            split: String.prototype.split\n        },\n        compliantExecNpcg = real.exec.call(/()??/, \"\")[1] === undefined, // check `exec` handling of nonparticipating capturing groups\n        compliantLastIndexIncrement = function () {\n            var x = /^/g;\n            real.test.call(x, \"\");\n            return !x.lastIndex;\n        }();\n\n    if (compliantLastIndexIncrement && compliantExecNpcg)\n        return;\n\n    //---------------------------------\n    //  Overriden native methods\n    //---------------------------------\n\n    // Adds named capture support (with backreferences returned as `result.name`), and fixes two\n    // cross-browser issues per ES3:\n    // - Captured values for nonparticipating capturing groups should be returned as `undefined`,\n    //   rather than the empty string.\n    // - `lastIndex` should not be incremented after zero-length matches.\n    RegExp.prototype.exec = function (str) {\n        var match = real.exec.apply(this, arguments),\n            name, r2;\n        if ( typeof(str) == 'string' && match) {\n            // Fix browsers whose `exec` methods don't consistently return `undefined` for\n            // nonparticipating capturing groups\n            if (!compliantExecNpcg && match.length > 1 && indexOf(match, \"\") > -1) {\n                r2 = RegExp(this.source, real.replace.call(getNativeFlags(this), \"g\", \"\"));\n                // Using `str.slice(match.index)` rather than `match[0]` in case lookahead allowed\n                // matching due to characters outside the match\n                real.replace.call(str.slice(match.index), r2, function () {\n                    for (var i = 1; i < arguments.length - 2; i++) {\n                        if (arguments[i] === undefined)\n                            match[i] = undefined;\n                    }\n                });\n            }\n            // Attach named capture properties\n            if (this._xregexp && this._xregexp.captureNames) {\n                for (var i = 1; i < match.length; i++) {\n                    name = this._xregexp.captureNames[i - 1];\n                    if (name)\n                       match[name] = match[i];\n                }\n            }\n            // Fix browsers that increment `lastIndex` after zero-length matches\n            if (!compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index))\n                this.lastIndex--;\n        }\n        return match;\n    };\n\n    // Don't override `test` if it won't change anything\n    if (!compliantLastIndexIncrement) {\n        // Fix browser bug in native method\n        RegExp.prototype.test = function (str) {\n            // Use the native `exec` to skip some processing overhead, even though the overriden\n            // `exec` would take care of the `lastIndex` fix\n            var match = real.exec.call(this, str);\n            // Fix browsers that increment `lastIndex` after zero-length matches\n            if (match && this.global && !match[0].length && (this.lastIndex > match.index))\n                this.lastIndex--;\n            return !!match;\n        };\n    }\n\n    //---------------------------------\n    //  Private helper functions\n    //---------------------------------\n\n    function getNativeFlags (regex) {\n        return (regex.global     ? \"g\" : \"\") +\n               (regex.ignoreCase ? \"i\" : \"\") +\n               (regex.multiline  ? \"m\" : \"\") +\n               (regex.extended   ? \"x\" : \"\") + // Proposed for ES4; included in AS3\n               (regex.sticky     ? \"y\" : \"\");\n    }\n\n    function indexOf (array, item, from) {\n        if (Array.prototype.indexOf) // Use the native array method if available\n            return array.indexOf(item, from);\n        for (var i = from || 0; i < array.length; i++) {\n            if (array[i] === item)\n                return i;\n        }\n        return -1;\n    }\n\n});\n"
  },
  {
    "path": "lib/ace/lib/useragent.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\n/*\n * I hate doing this, but we need some way to determine if the user is on a Mac\n * The reason is that users have different expectations of their key combinations.\n *\n * Take copy as an example, Mac people expect to use CMD or APPLE + C\n * Windows folks expect to use CTRL + C\n */\nexports.OS = {\n    LINUX: \"LINUX\",\n    MAC: \"MAC\",\n    WINDOWS: \"WINDOWS\"\n};\n\n/*\n * Return an exports.OS constant\n */\nexports.getOS = function() {\n    if (exports.isMac) {\n        return exports.OS.MAC;\n    } else if (exports.isLinux) {\n        return exports.OS.LINUX;\n    } else {\n        return exports.OS.WINDOWS;\n    }\n};\n\n// this can be called in non browser environments (e.g. from ace/requirejs/text)\nif (typeof navigator != \"object\")\n    return;\n\nvar os = (navigator.platform.match(/mac|win|linux/i) || [\"other\"])[0].toLowerCase();\nvar ua = navigator.userAgent;\n\n// Is the user using a browser that identifies itself as Windows\nexports.isWin = (os == \"win\");\n\n// Is the user using a browser that identifies itself as Mac OS\nexports.isMac = (os == \"mac\");\n\n// Is the user using a browser that identifies itself as Linux\nexports.isLinux = (os == \"linux\");\n\n// Windows Store JavaScript apps (aka Metro apps written in HTML5 and JavaScript) do not use the \"Microsoft Internet Explorer\" string in their user agent, but \"MSAppHost\" instead.\nexports.isIE = \n    (navigator.appName == \"Microsoft Internet Explorer\" || navigator.appName.indexOf(\"MSAppHost\") >= 0)\n    ? parseFloat((ua.match(/(?:MSIE |Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1])\n    : parseFloat((ua.match(/(?:Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1]); // for ie\n    \nexports.isOldIE = exports.isIE && exports.isIE < 9;\n\n// Is this Firefox or related?\nexports.isGecko = exports.isMozilla = ua.match(/ Gecko\\/\\d+/);\n\n// Is this Opera \nexports.isOpera = window.opera && Object.prototype.toString.call(window.opera) == \"[object Opera]\";\n\n// Is the user using a browser that identifies itself as WebKit \nexports.isWebKit = parseFloat(ua.split(\"WebKit/\")[1]) || undefined;\n\nexports.isChrome = parseFloat(ua.split(\" Chrome/\")[1]) || undefined;\n\nexports.isAIR = ua.indexOf(\"AdobeAIR\") >= 0;\n\nexports.isIPad = ua.indexOf(\"iPad\") >= 0;\n\nexports.isChromeOS = ua.indexOf(\" CrOS \") >= 0;\n\nexports.isIOS = /iPad|iPhone|iPod/.test(ua) && !window.MSStream;\n\nif (exports.isIOS) exports.isMac = true;\n\n});\n"
  },
  {
    "path": "lib/ace/line_widgets.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar Range = require(\"./range\").Range;\n\n\nfunction LineWidgets(session) {\n    this.session = session;\n    this.session.widgetManager = this;\n    this.session.getRowLength = this.getRowLength;\n    this.session.$getWidgetScreenLength = this.$getWidgetScreenLength;\n    this.updateOnChange = this.updateOnChange.bind(this);\n    this.renderWidgets = this.renderWidgets.bind(this);\n    this.measureWidgets = this.measureWidgets.bind(this);\n    this.session._changedWidgets = [];\n    this.$onChangeEditor = this.$onChangeEditor.bind(this);\n    \n    this.session.on(\"change\", this.updateOnChange);\n    this.session.on(\"changeFold\", this.updateOnFold);\n    this.session.on(\"changeEditor\", this.$onChangeEditor);\n}\n\n(function() {\n    this.getRowLength = function(row) {\n        var h;\n        if (this.lineWidgets)\n            h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n        else \n            h = 0;\n        if (!this.$useWrapMode || !this.$wrapData[row]) {\n            return 1 + h;\n        } else {\n            return this.$wrapData[row].length + 1 + h;\n        }\n    };\n\n    this.$getWidgetScreenLength = function() {\n        var screenRows = 0;\n        this.lineWidgets.forEach(function(w){\n            if (w && w.rowCount && !w.hidden)\n                screenRows += w.rowCount;\n        });\n        return screenRows;\n    };    \n    \n    this.$onChangeEditor = function(e) {\n        this.attach(e.editor);\n    };\n    \n    this.attach = function(editor) {\n        if (editor  && editor.widgetManager && editor.widgetManager != this)\n            editor.widgetManager.detach();\n\n        if (this.editor == editor)\n            return;\n\n        this.detach();\n        this.editor = editor;\n        \n        if (editor) {\n            editor.widgetManager = this;\n            editor.renderer.on(\"beforeRender\", this.measureWidgets);\n            editor.renderer.on(\"afterRender\", this.renderWidgets);\n        }\n    };\n    this.detach = function(e) {\n        var editor = this.editor;\n        if (!editor)\n            return;\n        \n        this.editor = null;\n        editor.widgetManager = null;\n        \n        editor.renderer.off(\"beforeRender\", this.measureWidgets);\n        editor.renderer.off(\"afterRender\", this.renderWidgets);\n        var lineWidgets = this.session.lineWidgets;\n        lineWidgets && lineWidgets.forEach(function(w) {\n            if (w && w.el && w.el.parentNode) {\n                w._inDocument = false;\n                w.el.parentNode.removeChild(w.el);\n            }\n        });\n    };\n\n    this.updateOnFold = function(e, session) {\n        var lineWidgets = session.lineWidgets;\n        if (!lineWidgets || !e.action)\n            return;\n        var fold = e.data;\n        var start = fold.start.row;\n        var end = fold.end.row;\n        var hide = e.action == \"add\";\n        for (var i = start + 1; i < end; i++) {\n            if (lineWidgets[i])\n                lineWidgets[i].hidden = hide;\n        }\n        if (lineWidgets[end]) {\n            if (hide) {\n                if (!lineWidgets[start])\n                    lineWidgets[start] = lineWidgets[end];\n                else\n                    lineWidgets[end].hidden = hide;\n            } else {\n                if (lineWidgets[start] == lineWidgets[end])\n                    lineWidgets[start] = undefined;\n                lineWidgets[end].hidden = hide;\n            }\n        }\n    };\n    \n    this.updateOnChange = function(delta) {\n        var lineWidgets = this.session.lineWidgets;\n        if (!lineWidgets) return;\n        \n        var startRow = delta.start.row;\n        var len = delta.end.row - startRow;\n\n        if (len === 0) {\n            // return\n        } else if (delta.action == 'remove') {\n            var removed = lineWidgets.splice(startRow + 1, len);\n            removed.forEach(function(w) {\n                w && this.removeLineWidget(w);\n            }, this);\n            this.$updateRows();\n        } else {\n            var args = new Array(len);\n            args.unshift(startRow, 0);\n            lineWidgets.splice.apply(lineWidgets, args);\n            this.$updateRows();\n        }\n    };\n    \n    this.$updateRows = function() {\n        var lineWidgets = this.session.lineWidgets;\n        if (!lineWidgets) return;\n        var noWidgets = true;\n        lineWidgets.forEach(function(w, i) {\n            if (w) {\n                noWidgets = false;\n                w.row = i;\n                while (w.$oldWidget) {\n                    w.$oldWidget.row = i;\n                    w = w.$oldWidget;\n                }\n            }\n        });\n        if (noWidgets)\n            this.session.lineWidgets = null;\n    };\n\n    this.addLineWidget = function(w) {\n        if (!this.session.lineWidgets)\n            this.session.lineWidgets = new Array(this.session.getLength());\n        \n        var old = this.session.lineWidgets[w.row];\n        if (old) {\n            w.$oldWidget = old;\n            if (old.el && old.el.parentNode) {\n                old.el.parentNode.removeChild(old.el);\n                old._inDocument = false;\n            }\n        }\n            \n        this.session.lineWidgets[w.row] = w;\n        \n        w.session = this.session;\n        \n        var renderer = this.editor.renderer;\n        if (w.html && !w.el) {\n            w.el = dom.createElement(\"div\");\n            w.el.innerHTML = w.html;\n        }\n        if (w.el) {\n            dom.addCssClass(w.el, \"ace_lineWidgetContainer\");\n            w.el.style.position = \"absolute\";\n            w.el.style.zIndex = 5;\n            renderer.container.appendChild(w.el);\n            w._inDocument = true;\n        }\n        \n        if (!w.coverGutter) {\n            w.el.style.zIndex = 3;\n        }\n        if (w.pixelHeight == null) {\n            w.pixelHeight = w.el.offsetHeight;\n        }\n        if (w.rowCount == null) {\n            w.rowCount = w.pixelHeight / renderer.layerConfig.lineHeight;\n        }\n        \n        var fold = this.session.getFoldAt(w.row, 0);\n        w.$fold = fold;\n        if (fold) {\n            var lineWidgets = this.session.lineWidgets;\n            if (w.row == fold.end.row && !lineWidgets[fold.start.row])\n                lineWidgets[fold.start.row] = w;\n            else\n                w.hidden = true;\n        }\n            \n        this.session._emit(\"changeFold\", {data:{start:{row: w.row}}});\n        \n        this.$updateRows();\n        this.renderWidgets(null, renderer);\n        this.onWidgetChanged(w);\n        return w;\n    };\n    \n    this.removeLineWidget = function(w) {\n        w._inDocument = false;\n        w.session = null;\n        if (w.el && w.el.parentNode)\n            w.el.parentNode.removeChild(w.el);\n        if (w.editor && w.editor.destroy) try {\n            w.editor.destroy();\n        } catch(e){}\n        if (this.session.lineWidgets) {\n            var w1 = this.session.lineWidgets[w.row];\n            if (w1 == w) {\n                this.session.lineWidgets[w.row] = w.$oldWidget;\n                if (w.$oldWidget)\n                    this.onWidgetChanged(w.$oldWidget);\n            } else {\n                while (w1) {\n                    if (w1.$oldWidget == w) {\n                        w1.$oldWidget = w.$oldWidget;\n                        break;\n                    }\n                    w1 = w1.$oldWidget;\n                }\n            }\n        }\n        this.session._emit(\"changeFold\", {data:{start:{row: w.row}}});\n        this.$updateRows();\n    };\n    \n    this.getWidgetsAtRow = function(row) {\n        var lineWidgets = this.session.lineWidgets;\n        var w = lineWidgets && lineWidgets[row];\n        var list = [];\n        while (w) {\n            list.push(w);\n            w = w.$oldWidget;\n        }\n        return list;\n    };\n    \n    this.onWidgetChanged = function(w) {\n        this.session._changedWidgets.push(w);\n        this.editor && this.editor.renderer.updateFull();\n    };\n    \n    this.measureWidgets = function(e, renderer) {\n        var changedWidgets = this.session._changedWidgets;\n        var config = renderer.layerConfig;\n        \n        if (!changedWidgets || !changedWidgets.length) return;\n        var min = Infinity;\n        for (var i = 0; i < changedWidgets.length; i++) {\n            var w = changedWidgets[i];\n            if (!w || !w.el) continue;\n            if (w.session != this.session) continue;\n            if (!w._inDocument) {\n                if (this.session.lineWidgets[w.row] != w)\n                    continue;\n                w._inDocument = true;\n                renderer.container.appendChild(w.el);\n            }\n            \n            w.h = w.el.offsetHeight;\n            \n            if (!w.fixedWidth) {\n                w.w = w.el.offsetWidth;\n                w.screenWidth = Math.ceil(w.w / config.characterWidth);\n            }\n            \n            var rowCount = w.h / config.lineHeight;\n            if (w.coverLine) {\n                rowCount -= this.session.getRowLineCount(w.row);\n                if (rowCount < 0)\n                    rowCount = 0;\n            }\n            if (w.rowCount != rowCount) {\n                w.rowCount = rowCount;\n                if (w.row < min)\n                    min = w.row;\n            }\n        }\n        if (min != Infinity) {\n            this.session._emit(\"changeFold\", {data:{start:{row: min}}});\n            this.session.lineWidgetWidth = null;\n        }\n        this.session._changedWidgets = [];\n    };\n    \n    this.renderWidgets = function(e, renderer) {\n        var config = renderer.layerConfig;\n        var lineWidgets = this.session.lineWidgets;\n        if (!lineWidgets)\n            return;\n        var first = Math.min(this.firstRow, config.firstRow);\n        var last = Math.max(this.lastRow, config.lastRow, lineWidgets.length);\n        \n        while (first > 0 && !lineWidgets[first])\n            first--;\n        \n        this.firstRow = config.firstRow;\n        this.lastRow = config.lastRow;\n\n        renderer.$cursorLayer.config = config;\n        for (var i = first; i <= last; i++) {\n            var w = lineWidgets[i];\n            if (!w || !w.el) continue;\n            if (w.hidden) {\n                w.el.style.top = -100 - (w.pixelHeight || 0) + \"px\";\n                continue;\n            }\n            if (!w._inDocument) {\n                w._inDocument = true;\n                renderer.container.appendChild(w.el);\n            }\n            var top = renderer.$cursorLayer.getPixelPosition({row: i, column:0}, true).top;\n            if (!w.coverLine)\n                top += config.lineHeight * this.session.getRowLineCount(w.row);\n            w.el.style.top = top - config.offset + \"px\";\n            \n            var left = w.coverGutter ? 0 : renderer.gutterWidth;\n            if (!w.fixedWidth)\n                left -= renderer.scrollLeft;\n            w.el.style.left = left + \"px\";\n            \n            if (w.fullWidth && w.screenWidth) {\n                w.el.style.minWidth = config.width + 2 * config.padding + \"px\";\n            }\n            \n            if (w.fixedWidth) {\n                w.el.style.right = renderer.scrollBar.getWidth() + \"px\";\n            } else {\n                w.el.style.right = \"\";\n            }\n        }\n    };\n    \n}).call(LineWidgets.prototype);\n\n\nexports.LineWidgets = LineWidgets;\n\n});\n\n\n    \n\n"
  },
  {
    "path": "lib/ace/mode/_test/Readme.md",
    "content": "`tokens_<modeName>.json` files keep information about correct tokens and tokenizer states for all modes supported by ace.\nThey are generated from `text_<modeName>.txt` or `demo/kitchen-sink/doc/*` with\n\n```sh\nnode highlight_rules_test.js -gen\n```\n\ncommand.\n\n"
  },
  {
    "path": "lib/ace/mode/_test/highlight_rules_test.js",
    "content": "var fs = require(\"fs\");\nvar path = require(\"path\");\nif (!fs.existsSync)\n    fs.existsSync = path.existsSync;\n\nrequire(\"amd-loader\");\n\nvar cwd = __dirname + \"/\";\nvar root = path.normalize(cwd + Array(5).join(\"../\"));\n\nfunction jsFileList(path, filter) {\n    if (!filter) filter = /_test/;\n    return fs.readdirSync(path).map(function(x) {\n        if (x.slice(-3) == \".js\" && !filter.test(x) && !/\\s/.test(x))\n            return x.slice(0, -3);\n    }).filter(Boolean);\n}\n\nfunction modeList() {\n    return jsFileList(cwd + \"../\", /_highlight_rules|_test|_worker|xml_util|_outdent|behaviour|completions/);\n}\n\nfunction checkModes() {\n    modeList().forEach(function(modeName, i) {\n        console.log(padNumber(i+1, 3) + \") check: \\u001b[33m\" + modeName + \"\\u001b[0m\");\n        try {\n            var Mode = require(\"../\" + modeName).Mode;\n        } catch(e) {\n            console.warn(\"Can't load mode :\" + modeName, e);\n            return;\n        }\n        var m = new Mode();\n        if (!(\"lineCommentStart\" in m) && !(\"blockComment\" in m))\n            console.warn(\"missing comment in \" + modeName);\n        if (!m.$id)\n            console.warn(\"missing id in \" + modeName);\n        var tokenizer = (new Mode).getTokenizer();\n        \n        testComments(m.lineCommentStart, testLineComment, tokenizer, modeName);\n        testComments(m.blockComment, testBlockComment, tokenizer, modeName);\n    });\n    \n    function testComments(desc, fn, tokenizer, modeName) {\n        if (desc) {\n            if (Array.isArray(desc)) {\n                desc.forEach(function(x) {\n                    fn(tokenizer, x, modeName);\n                });\n            } else {\n                fn(tokenizer, desc, modeName);\n            }\n        }\n    }\n    \n    function testBlockComment(tokenizer, blockComment, modeName) {\n        if (blockComment.lineStartOnly)\n            return; // TODO test \n        var str = blockComment.start + \" \" + blockComment.end;\n        str = blockComment.start + str;\n        if (blockComment.nestable)\n            str += blockComment.end;     \n        var data = tokenizer.getLineTokens(str, \"start\");\n        var isBroken = data.tokens.some(function(t) { return !/comment/.test(t.type); });\n        if (isBroken)\n            console.warn(\"broken blockComment in \" + modeName, data);\n        if (!/start/.test(data.state))\n            console.warn(\"broken state after blockComment in \" + modeName, data);\n    }\n    \n    function testLineComment(tokenizer, commentStart, modeName) {\n        var tokens = tokenizer.getLineTokens(commentStart + \" \", \"start\").tokens;\n        if (!/comment/.test(tokens[0].type))\n            console.warn(\"broken lineCommentStart in \" + modeName);\n    }\n}\n\nfunction generateTestData(names, force) {\n    var docRoot = root + \"/demo/kitchen-sink/docs\";\n    var docs = fs.readdirSync(docRoot);\n    var specialDocs = fs.readdirSync(cwd);\n    var modes = modeList();\n\n    // console.log(\"Docs:\", docs);\n    // console.log(\"Modes:\", modes);\n\n    docs.forEach(function(docName) {\n        var p = docName.toLowerCase().split(\".\");\n        if (!p[1])\n            return;\n        var modeName;\n        if (modes.indexOf(p[0]) != -1)\n            modeName = p[0];\n        else if (modes.indexOf(p[1]) != -1)\n            modeName = p[1];\n        else\n            modeName = {\"txt\": \"text\", cpp: \"c_cpp\"}[p[1]];\n\n        if (names && names.length && names.indexOf(modeName) == -1)\n            return;\n        \n        var outputPath = cwd + \"tokens_\" + modeName + \".json\";\n        try {\n            var oldOutput = require(outputPath);\n        } catch(e) {}\n        if (oldOutput && !force) {\n            var oldText = oldOutput.map(function(x) {\n                if (x.length > 1 && typeof x[x.length - 1] == \"string\")\n                    return x[x.length - 1];\n                return x.slice(1).map(function(tok) {\n                    return tok[1];\n                }).join(\"\");\n            }).join(\"\\n\");\n        }\n        \n        var filePath = \"text_\" + modeName + \".txt\";\n        if (specialDocs.indexOf(filePath) !== -1) {\n            filePath = cwd + filePath;\n        } else {\n            filePath = docRoot + \"/\" + docName;\n            // oldText = \"\";\n        }\n        var text = oldText ||fs.readFileSync(filePath, \"utf8\");\n        \n        try {\n            var Mode = require(\"../\" + modeName).Mode;\n        } catch(e) {\n            console.warn(\"Can't load mode :\" + modeName, p, e);\n            return;\n        }\n        console.log(modeName);\n        var tokenizer = new Mode().getTokenizer();\n\n        var state = \"start\";\n        var data = text.split(/\\r\\n|\\r|\\n/).map(function(line) {\n            var data = tokenizer.getLineTokens(line, state);\n            var tmp = [];\n            tmp.push(JSON.stringify(data.state));\n            var tokenizedLine = \"\";\n            data.tokens.forEach(function(x) {\n                tokenizedLine += x.value;\n                tmp.push(JSON.stringify([x.type, x.value]));\n            });\n            if (tokenizedLine != line)\n                tmp.push(JSON.stringify(line));\n            state = data.state;\n            return tmp.join(\",\\n  \");\n        });\n        \n        var jsonStr = \"[[\\n   \" + data.join(\"\\n],[\\n   \") + \"\\n]]\";\n        \n        if (oldOutput && JSON.stringify(JSON.parse(jsonStr)) == JSON.stringify(oldOutput))\n            return;\n        \n        fs.writeFileSync(outputPath, jsonStr, \"utf8\");\n    });\n}\n\nfunction test(startAt) {\n    var modes = fs.readdirSync(cwd).map(function(x) {\n        return (x.match(/tokens_(.*).json/) || {})[1];\n    }).filter(function(x){return !!x;});\n\n    for (var i = Math.max(0, startAt||0); i < modes.length; i++)\n        testMode(modes[i], i);\n\n    console.log(\"\\u001b[32m\" + \"all ok\" + \"\\u001b[0m\");\n}\nfunction testMode(modeName, i) {\n    console.log(padNumber(i+1, 3) + \") testing: \\u001b[33m\" + modeName + \"\\u001b[0m\");\n\n    var text = fs.readFileSync(cwd + \"tokens_\" + modeName + \".json\", \"utf8\");\n    var data = JSON.parse(text);\n    var Mode = require(\"../\" + modeName).Mode;\n    var tokenizer = new Mode().getTokenizer();\n\n    var state = \"start\";\n    data.forEach(function(lineData) {\n        lineData.values = [];\n        lineData.types = [];\n        lineData.state = lineData.shift();\n        var line = null;\n        if (typeof lineData[lineData.length - 1] == \"string\")\n            line = lineData.pop();\n        lineData.forEach(function(x) {\n            lineData.types.push(x[0]);\n            lineData.values.push(x[1]);\n        });\n        if (typeof line != \"string\")\n            line = lineData.values.join(\"\");\n\n        var tokens = tokenizer.getLineTokens(line, state);\n        var values = tokens.tokens.map(function(x) {return x.value;});\n        var types = tokens.tokens.map(function(x) {return x.type;});\n\n        var err = testEqual([\n            JSON.stringify(lineData.state), JSON.stringify(tokens.state),\n            lineData.types, types,\n            lineData.values, values]);\n        \n        if (err) {\n            console.log(line);\n            throw \"error\";\n        }\n\n        state = tokens.state;\n    });\n}\nfunction testEqual(a) {\n    var err;\n    if (a[0] + \"\" !== a[1] + \"\") {\n        console.log(a[0],a[1]);\n        err = 1;\n    }\n\n    if ( a[2] + \"\" !== a[3] + \"\" || a[4] + \"\" !== a[5] + \"\") {\n        arrayDiff(a[2],a[3]);\n        arrayDiff(a[4],a[5]);\n        err = 1;\n    }\n    return err;\n}\nfunction arrayDiff(a1, a2) {\n    var l = Math.max(a1.length, a2.length);\n    var out = [];\n    for (var i = 0; i < l; i++) {\n        out.push(\"\\n\", padNumber(i+1, 3), \") \");\n        if (a1[i] !== a2[i])\n            out.push(\"\\u001b[31m\", a1[i], \"\\u001b[0m != \\u001b[32m\", a2[i], \"\\u001b[0m\");\n        else\n            out.push(a1[i]);\n    }\n    console.log(out.join(\"\"));\n}\nfunction padNumber(num, digits) {\n    return (\"      \" + num).slice(-digits);\n}\n\n// cli\nvar arg = process.argv[2];\nif (!arg) {\n    test();\n    checkModes();\n} else if (/--?g(en)?/.test(arg))\n    generateTestData(process.argv.splice(3));\nelse if (/--?c(heck)?/.test(arg))\n    checkModes();\nelse if (/\\d+/.test(arg))\n    test(parseInt(process.argv[2],10) || 0);\nelse\n    testMode(arg, -1);"
  },
  {
    "path": "lib/ace/mode/_test/package.json",
    "content": "{\n    \"name\": \"ace-mode-creator\",\n    \"version\": \"0.1.0\",\n    \"dependencies\": {\n        \"connect\": \"\",\n        \"socket.io\": \"\"\n    }\n}"
  },
  {
    "path": "lib/ace/mode/_test/text_asciidoc.txt",
    "content": "------------------------------------\n-----------------------------------\n_ita_lic_, *bo*ld*, +mo+no+, normal. \n``double quoted'', `single quoted'.\n  normal, ^super^, ~sub~.\n\n''''\nEscaped:\n\\_italic_, +++_italic_+++,\nt\\__e__st, +++t__e__st+++,\n+++<b>bold</b>+++, $$<b>normal</b>$$\n\\&#182; &#182;\n\\`not single quoted'\n\\`\\`not double quoted''\n\n\n[fffff]\n+++++++++++++++++++++++++++++++++++++\n(C) {ss} ss\n+++++++++++++++++++++++++++++++++++++\n\n.............\ncallout <1>\n..............\n\n> 1\n1> 2\n<2> 3\n\nEscaped:\n\\_italic_,\nt\\__e__st, o__\n\n.optional title\n.............\ncallout <1>\n..............\n\n\n:macro: dddd\n\n.lists\n. 1\n.. 2\n... d\n..... big\n+\ncontinue +\nnext line\nxi) no ++la+tin++\n\nxi) la++tin++\n2. num__ber__  [red]#red#\n--\n  5. f <<x6,ssss>> {macro}\n--\nimage::path[beauty] ->--<= -- replacements\n\n image::s\nsssss\nsss \nsssss\n\n\n== 1\n  heading\n=== not a heading\n====================================\n\n==================================\n====4 \nNOTE: above\n\nNOTE: above\n\n[[x6]]\nWARNING: \n\n[options[]]\n---------------------------\nliteral\n---------------------------\n\n\n= Tables\n|====================================\n| _italic_ |  *bold* | text | (R)\n\n|====================================\n\n\n[more, options]\n///////////\ncomment\n///////////\n// one line comment\n\n\n\n[red]#red text# [yellow-background]#on yellow#\n[big]#large# [red yellow-background big]*all bold*\n\n\t\nhttps://site text <mail@i.am> callto:ace http://ace.ajaxorg.com[awesome]\n  .still normal text\n.break out thoug should not\n---------------------------\n///////////////////////////\n---------------------------\n\n\n"
  },
  {
    "path": "lib/ace/mode/_test/text_coffee.txt",
    "content": "#test: tokenize keyword\n    for (i 1..2)\n#test: tokenize regexp\n/\"[a]/\n#test: tokenize functions\nfoo = ({args}) ->\n    foo = ({a1, a2}) ->\n    foo = ({@a1, a2}) ->\n    foo : ({args}) ->\n    foo = ({args}) ->\n    foo = ({0abc}) ->\n    foo = ({/abc}) =>\n    foo = ({abc/}) ->\n    foo = ({#abc}) ->\n    foo = ({abc#}) ->\n    foo = ({)abc}) ->\n    foo = ({abc)}) ->\n    foo = ({a{bc}) ->\n    foo = ({}) ->\n    foo = ({ }) ->\n    foo : ({}) ->\n    foo = (args) ->\n    foo = (arg1, arg2) ->\n    foo = (arg1 = 1, arg2 = 'name') ->\n    foo = (@arg1 = /abc/, arg2 = 'name') ->\n    #test: tokenize function: invalid case:\n    foo=(/args) ->\n    foo = () ->\n    foo = ( ) ->\n    foo : ( ) ->\n    window.foo = (args) ->\n    foo = ->\n    foo = ->\n    foo : ->\n    #test: tokenize callback function\n    foo bar: 1, (args) ->\n    foo = (1, 2 (x) ->\n#test: tokenize class\nclass Foo\nclass Foo extends Bar\n#test: tokenize illegal name property\nfoo.static.function\n#!test tokenize string with interpolation\na = \"#{ 22 / 7 + {x: \"#{a + b}\"} + 2}\"\n\" #{ \"\" + {} } )\"  \n\"\"\"heredoc\n   \"\"\"\ndo ->\n    ###\n    herecomment\n    ###\n    re = /regex/imgy.test ///\n        heregex  # comment\n    ///imgy\n    this isnt: `just \n       JavaScript`\n    undefined\n"
  },
  {
    "path": "lib/ace/mode/_test/text_coldfusion.txt",
    "content": "<!--- hello world --->\n\n<cfset <!--- x <!--- y --->  z ---> welcome=\"Hello World!\">\n<!-- x <!--- y --->  z -->\n<cfoutput>#welcome#</cfoutput>\n<cfscript>\n    Dateformat(now())\n</cfscript>"
  },
  {
    "path": "lib/ace/mode/_test/text_curly.txt",
    "content": "tokenize Curly template{{test}}\ntokenize embedded script\n<script a='a'>var</script>'123'\ntokenize multiline attribute value with double quotes\n<a href=\"abc{{xyz}}\ndef\">\ntokenize multiline attribute value with single quotes\n<a href='abc\ndef\\\"'>\n"
  },
  {
    "path": "lib/ace/mode/_test/text_ejs.txt",
    "content": "<!DOCTYPE html>\n<html>\n    <head>\n        <title>Cloud9 Rocks!</title>\n    </head>\n    <body>\n\n    <table class=\"table\">\n        <tr>\n            <th>Name</th>\n            <th>Size</th>\n        </tr>\n        <% if (!isRoot) { %>\n            <tr>\n                <td><a href=\"..\">..</a></td>\n                <td></td></td>\n            </tr>\n        <% } %>\n        <% entries.forEach(function(entry) { %>\n            <tr>\n                <td>\n                    <span class=\"glyphicon <%= entry.mime == 'directory' ? 'folder': 'file'%>\"></span>\n                    <a href=\"<%= entry.name %>\"><%= entry.name %></a>\n                </td>\n                <td><%= entry.size %></td>\n            </tr>\n        <% }) %>\n    </table>\n    <input  placeholder=\"Username or email\" \n<%\nif (typeof window != 'undefined') { \n%>\nvalue=\"<%=window%>\"\n<% \n\t}\n%>\n\t\t\t\t\t\t\t\t/>\n    </body>\n</html>"
  },
  {
    "path": "lib/ace/mode/_test/text_gobstones.txt",
    "content": "program {\n    /*\n     * A gobstons multiline comment\n     * Taken from:\n     * http://www.exploringbinary.com/java-hangs-when-converting-2-2250738585072012e-308/\"\n     */\n    sumar(2, 3)\n    }\n    function sumar(a, b) {\n        r := a + b\n    }\n        // unreachable code\n        -- unreachable code\n        # unreachable code\n    procedure hacerAlgo() {\n        Mover(Este)\n        Poner(Rojo)\n        Sacar(Azul)\n    }"
  },
  {
    "path": "lib/ace/mode/_test/text_html.txt",
    "content": "<html>\n<scripts>\n<script a='a'>var \"</scripts></script>'123'\n</scripts>\n<a href=\"abc\n  def\">\n<a href='abc\ndef\\'>\n\n</html>"
  },
  {
    "path": "lib/ace/mode/_test/text_javascript.txt",
    "content": "//test: tokenize 'standard' functions\nstring.charCodeAt(23); document.getElementById('test'); console.log('Here it is');\";\ntest: /**tokenize doc*/ comment\n/**tokenize doc comment with @tag {}*/\n//test: tokenize parens\n    var $line$ = \"[{( )}]\";\n//test tokenize arithmetic expression which looks like a regexp\na/b/c\na/=b/c\n//test tokenize reg exps\na=/b/g\na+/b/g\na = 1 + /2 + 1/gimyxk\na=/a/ / /a/\ncase /a/.test(c)\n//test tokenize multi-line comment containing a single line comment\nnoRegex\n/* foo // bar */\ncanBeRegex;\n/* foo // bar */\n// test tokenize identifier with umlauts\nfu?e\n// test // is not a regexp\n{ // 123\n//test skipping escaped chars\n'Meh\\\\nNeh'\nconsole.log('\\\\u1232Feh'\n\"test multiline\\\n strings\"\na='\nb=\"\\\nstill a string\n \n \nfunction foo(items, nada) {\n    for (var i=0; i<items.length; i++) {\n        alert(items[i] + \"juhu\\n\");\n    }\t// Real Tab.\n}\n\nregexp = /p|p/ // ends here\n\nr = /d{1,2}?f{e}++r*?\\d+?[]r[^r-o\\f\\f[\\f]?r{7}+r\\{7}+rr--rr$^(?:d|s)(?=a|)(?!y)[]|$?|^*/ o\na=/a/ jk = / / / / /\n /************************************/\n/** total mess, tricky to highlight**/\n\nfunction () {\n\t/**\n\t * docComment\n\t **/\n\tr = /u\\t*/\n\tg = 1.00E^1, y = 1.2 + 1. + .2 + 052 + 0O7 + 0x25\n\tt = ['d', '']\n}\nfunction () {\n\t/* eee */\n}\n\n\"s\\\ns\\u7824sss\\u1\"\n\n'\\\nstring'\n\n'\nstring'\n\n\"trailing space\\   \n\"         \"    /not a regexp/g\n\n/**\n *doc\n */\n\na = {\n\t'a': b,\n\t'g': function(t)\n\tgta:function(a,b)\n}\n\nz>>=t<<f>>r>>>s>=0b1\n\nfoo.protoype.d = function(a, b,\n                          c, d)\nfoo.d =function(a,     b)\nfoo.d =function(a,  /*****/ d\"string\"   \n\n<div\nz=<div {...this.props} x={1 + 2} y=\"z{a}b&amp;\" t={\n        1 + <a>{2}</a>\n    }>\n1 <a> { ++x  } </a>\n</div>\n\nvar o = {\n    t:`${[].map(x => {\n        return x\n    })}`\n};\n"
  },
  {
    "path": "lib/ace/mode/_test/text_livescript.txt",
    "content": "# comment\n"
  },
  {
    "path": "lib/ace/mode/_test/text_lucene.txt",
    "content": "test: recognises AND as keyword\ntest: recognises OR as keyword\ntest: recognises NOT as keyword\ntest: recognises \"hello this is dog\" as string\ntest: recognises -\"hello this is dog\" as negation with string\ntest: recognises ~100 as text with proximity\ntest: recognises \"hello this is dog\"~100 as string with proximity\ntest: recognises raw:\"hello this is dog\" as keyword\ntest: recognises raw:foo as\"keyword'\ntest: recognises \"(\" as opening parenthesis\ntest: recognises \")\" as closing parenthesis\ntest: recognises foo* as text with asterisk\ntest: recognises foo? as text with interro\ntest: recognises single word as text\n foo\n "
  },
  {
    "path": "lib/ace/mode/_test/text_markdown.txt",
    "content": "test: header 1 \n#f\ntest: header 2\n## foo\ntest: header ends with ' #'\n# # # \ntest: header ends with '#'\n#foo# \ntest: 6+ #s is not a valid header\n####### foo\ntest: # followed be only space is not a valid header\n# \ntest: only space between #s is not a valid header\n#  #\n\n# test links  [Cloud9 IDE](http://www.c9.io/) #\n* [demo](http://ajaxorg.github.com/ace/) [+](escape(\\) ) [+](a \"title\") [+](a \"space\" )\n* usually *work* fine (_em_)\nin lists\n\nin plain text <b>http://ace.ajaxorg.com<b>\n\n"
  },
  {
    "path": "lib/ace/mode/_test/text_php.txt",
    "content": "<?php\n\nfunction nfact($n) {\n    if ($n == 0) {\n        return 1;\n    }\n    else {\n        return $n * nfact($n - 1);\n    }\n}\n\necho \"\\n\\nPlease enter a whole number ... \";\n$num = trim(fgets(STDIN));\n\n// ===== PROCESS - Determing the factorial of the input number =====\n$output = \"\\n\\nFactorial \" . $num . \" = \" . nfact($num) . \"\\n\\n\";\necho $output;\n\n?> <script>  <?php\necho '\n';\n?>\n/*this is js <?php echo ':)'; ?>\n</script> not &js;\n"
  },
  {
    "path": "lib/ace/mode/_test/text_ruby.txt",
    "content": " #test: symbol tokenizer\n  [:@thing, :$thing, :_thing, :thing, :Thing, :thing1, :thing_a,\n              :THING, :thing!, :thing=, :thing?, :t?,\n              :, :@, :$, :1, :1thing, :th?ing, :thi=ng, :1thing,\n            :th!ing, :thing#\n    ]\n\n #test: namespaces aren't symbols\" : function() {\n   Namespaced::Class\n #test: hex tokenizer \n    0x9a, 0XA1, 0x9_a, 0x, 0x_9a, 0x9a_,\n #test: float tokenizer\n    [1, +1, -1, 12_345, 0.000_1,\n    _, 3_1, 1_2, 1_.0, 0._1];\n \n{:id => ?\", :key => \"value\", anotherKey: [x, y?]}\n\n=begin\n=end\n\n=begin x\n=end-\n=end   x\n\n    herDocs = [<<'FOO', <<BAR, <<-BAZ, <<-`EXEC`] #comment\n  FOO #{literal}\nFOO\n  BAR #{fact(10)}\nBAR\n  BAZ indented\n    BAZ\n        echo hi\n    EXEC\nputs herDocs"
  },
  {
    "path": "lib/ace/mode/_test/text_rust.txt",
    "content": "use core::rand::RngUtil;\n\nfn main() {\n    for [\"Alice\", \"Bob\", \"Carol\"].each |&name| {\n        do spawn {\n            let v = rand::Rng().shuffle([1, 2, 3]);\n            for v.each |&num| {\n                print(fmt!(\"%s says: '%d'\\n\", name, num + 1))\n            }\n        }\n    }\n\n    let _: i128 = -42i128;\n    let _: u128 = 42u128;\n}\n\n/* nested /* \n    comments */ */\n\nfn map<T, U>(vector: &[T], function: &fn(v: &T) -> U) -> ~[U] {\n    let mut accumulator = ~[];\n    for vec::each(vector) |element| {\n        accumulator.push(function(element));\n    }\n    return accumulator;\n}\n\n\n// numbers\n14E-111_f64; 45isize 0x1i32 0o777u32 0b01 14f32 1_2.78f32 1_2.3E+7f32\n\n// not numbers\n14._E-111_f64; 0xi32; 0b777u\n\n// identifiers ending in constant.numeric\nfoo1; foo1u32; foo1f32; foo0xF; foo1.0\n"
  },
  {
    "path": "lib/ace/mode/_test/text_wollok.txt",
    "content": "class Actividad {\n\tmethod calcularMejora()\n}\n\nclass EstudiarMateria inherits Actividad {\n\tvar materia\n\tvar puntos = 0\n\t\n\tnew(m, p) {\n\t\tmateria = m\n\t\tpuntos = p\n\t}\n\t\n\toverride method calcularMejora() = puntos\n}\n\nclass EjercitarEnSimulador inherits Actividad {\n\tvar horas = 0\n\tnew(h) { horas = h }\n\toverride method calcularMejora() = 10 * horas\n}\n\nobject pepita {\n\tvar energia = 100\n\tmethod volar(m) {\n\t\tenergia -= m\n\t}\n}"
  },
  {
    "path": "lib/ace/mode/_test/text_xml.txt",
    "content": "<Juhu>//Juhu Kinners</Kinners>\ntest: two tags in the same lines should be in separate tokens\"\n<Juhu><Kinners>\ntest: multiline attributes\"\n<copy set=\"{\n}\" undo=\"{\n}\"/>"
  },
  {
    "path": "lib/ace/mode/_test/tokens_abap.json",
    "content": "[[\n   \"start\",\n  [\"doc.comment\",\"***************************************\"]\n],[\n   \"start\",\n  [\"doc.comment\",\"** Program: EXAMPLE                  **\"]\n],[\n   \"start\",\n  [\"doc.comment\",\"** Author: Joe Byte, 07-Jul-2007     **\"]\n],[\n   \"start\",\n  [\"doc.comment\",\"***************************************\"]\n],[\n   \"start\",\n  [\"text\",\" \"]\n],[\n   \"start\",\n  [\"keyword\",\"REPORT\"],\n  [\"text\",\" BOOKINGS\"],\n  [\"keyword.operator\",\".\"]\n],[\n   \"start\",\n  [\"text\",\" \"]\n],[\n   \"start\",\n  [\"doc.comment\",\"* Read flight bookings from the database\"]\n],[\n   \"start\",\n  [\"keyword\",\"SELECT\"],\n  [\"keyword.operator\",\" * \"],\n  [\"keyword\",\"FROM\"],\n  [\"text\",\" FLIGHTINFO\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"WHERE\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"CLASS\"],\n  [\"keyword.operator\",\" = \"],\n  [\"string\",\"'Y'\"],\n  [\"text\",\"       \"],\n  [\"comment\",\"\\\"Y = economy\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"OR\"],\n  [\"text\",\"    \"],\n  [\"keyword\",\"CLASS\"],\n  [\"keyword.operator\",\" = \"],\n  [\"string\",\"'C'\"],\n  [\"keyword.operator\",\".\"],\n  [\"text\",\"      \"],\n  [\"comment\",\"\\\"C = business\"]\n],[\n   \"start\",\n  [\"paren.lparen\",\"(\"],\n  [\"invalid\",\"...\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"REPORT\"],\n  [\"text\",\" TEST\"],\n  [\"keyword.operator\",\".\"]\n],[\n   \"start\",\n  [\"keyword\",\"WRITE\"],\n  [\"text\",\" \"],\n  [\"string\",\"'Hello World'\"],\n  [\"keyword.operator\",\".\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"USERPROMPT\"],\n  [\"keyword.operator\",\" = \"],\n  [\"string\",\"'Please double-click on a line in the output list '\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"&\"]\n],[\n   \"start\",\n  [\"text\",\"             \"],\n  [\"string\",\"'to see the complete details of the transaction.'\"],\n  [\"keyword.operator\",\".\"]\n],[\n   \"start\"\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"DATA\"],\n  [\"text\",\" LAST_EOM    \"],\n  [\"keyword\",\"TYPE\"],\n  [\"text\",\" \"],\n  [\"support.type\",\"D\"],\n  [\"keyword.operator\",\".\"],\n  [\"text\",\"  \"],\n  [\"comment\",\"\\\"last end-of-month date\"]\n],[\n   \"start\",\n  [\"text\",\" \"]\n],[\n   \"start\",\n  [\"doc.comment\",\"* Start from today's date\"]\n],[\n   \"start\",\n  [\"text\",\"  LAST_EOM\"],\n  [\"keyword.operator\",\" = \"],\n  [\"variable.parameter\",\"SY\"],\n  [\"keyword.operator\",\"-\"],\n  [\"text\",\"DATUM\"],\n  [\"keyword.operator\",\".\"]\n],[\n   \"start\",\n  [\"doc.comment\",\"* Set characters 6 and 7 (0-relative) of the YYYYMMDD string to \\\"01\\\",\"]\n],[\n   \"start\",\n  [\"doc.comment\",\"* giving the first day of the current month\"]\n],[\n   \"start\",\n  [\"text\",\"  LAST_EOM\"],\n  [\"constant.numeric\",\"+6\"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"2\"],\n  [\"paren.rparen\",\")\"],\n  [\"keyword.operator\",\" = \"],\n  [\"string\",\"'01'\"],\n  [\"keyword.operator\",\".\"]\n],[\n   \"start\",\n  [\"doc.comment\",\"* Subtract one day\"]\n],[\n   \"start\",\n  [\"text\",\"  LAST_EOM\"],\n  [\"keyword.operator\",\" = \"],\n  [\"text\",\"LAST_EOM\"],\n  [\"keyword.operator\",\" - \"],\n  [\"constant.numeric\",\"1\"],\n  [\"keyword.operator\",\".\"]\n],[\n   \"start\",\n  [\"text\",\" \"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"WRITE\"],\n  [\"keyword.operator\",\":\"],\n  [\"text\",\" \"],\n  [\"string\",\"'Last day of previous month was'\"],\n  [\"keyword.operator\",\",\"],\n  [\"text\",\" LAST_EOM\"],\n  [\"keyword.operator\",\".\"]\n],[\n   \"start\",\n  [\"text\",\"  \"]\n],[\n   \"start\",\n  [\"keyword\",\"DATA\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\":\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"BEGIN OF\"],\n  [\"text\",\" I_VBRK \"],\n  [\"keyword\",\"OCCURS\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"keyword.operator\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"         VBELN \"],\n  [\"keyword\",\"LIKE\"],\n  [\"text\",\" \"],\n  [\"variable.parameter\",\"VBRK-VBELN\"],\n  [\"keyword.operator\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"         ZUONR \"],\n  [\"keyword\",\"LIKE\"],\n  [\"text\",\" \"],\n  [\"variable.parameter\",\"VBRK-ZUONR\"],\n  [\"keyword.operator\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"       \"],\n  [\"keyword\",\"END OF\"],\n  [\"text\",\" I_VBRK\"],\n  [\"keyword.operator\",\".\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"SORT\"],\n  [\"text\",\" i_vbrk \"],\n  [\"keyword\",\"BY\"],\n  [\"text\",\" vbeln \"],\n  [\"keyword\",\"ASCENDING\"],\n  [\"keyword.operator\",\".\"]\n],[\n   \"start\",\n  [\"keyword\",\"SORT\"],\n  [\"text\",\" i_vbrk \"],\n  [\"keyword\",\"BY\"],\n  [\"text\",\" vbeln \"],\n  [\"keyword\",\"DESCENDING\"],\n  [\"keyword.operator\",\".\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"RETURN\"],\n  [\"keyword.operator\",\".\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_abc.json",
    "content": "[[\n   \"start\",\n  [\"comment.line.percentage\",\"%abc-2.1\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"H:\"],\n  [\"information.argument.string.unquoted\",\"This file contains some example English tunes\"]\n],[\n   \"start\",\n  [\"comment.line.percentage\",\"% note that the comments (like this one) are to highlight usages\"]\n],[\n   \"start\",\n  [\"comment.line.percentage\",\"%  and would not normally be included in such detail\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"O:\"],\n  [\"information.argument.string.unquoted\",\"England             \"],\n  [\"comment.line.percentage\",\"% the origin of all tunes is England\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"information.keyword\",\"X:\"],\n  [\"information.argument.string.unquoted\",\"1                   \"],\n  [\"comment.line.percentage\",\"% tune no 1\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"T:\"],\n  [\"information.argument.string.unquoted\",\"Dusty Miller, The   \"],\n  [\"comment.line.percentage\",\"% title\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"T:\"],\n  [\"information.argument.string.unquoted\",\"Binny's Jig         \"],\n  [\"comment.line.percentage\",\"% an alternative title\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"C:\"],\n  [\"information.argument.string.unquoted\",\"Trad.               \"],\n  [\"comment.line.percentage\",\"% traditional\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"R:\"],\n  [\"information.argument.string.unquoted\",\"DH                  \"],\n  [\"comment.line.percentage\",\"% double hornpipe\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"M:\"],\n  [\"information.argument.string.unquoted\",\"3/4                 \"],\n  [\"comment.line.percentage\",\"% meter\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"K:\"],\n  [\"information.argument.string.unquoted\",\"G                   \"],\n  [\"comment.line.percentage\",\"% key\"]\n],[\n   \"start\",\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"duration.constant.numeric\",\">\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"F\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"duration.constant.numeric\",\">\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"D\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"barline.keyword.operator\",\":|\"]\n],[\n   \"start\",\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"pitch.constant.numeric\",\"f\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"a\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"pitch.constant.numeric\",\"f\"],\n  [\"pitch.constant.numeric\",\"a\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"barline.keyword.operator\",\":|\"]\n],[\n   \"start\",\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"duration.constant.numeric\",\"/2\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"duration.constant.numeric\",\"/2\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"F\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"duration.constant.numeric\",\"/2\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"duration.constant.numeric\",\"/2\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"D\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"barline.keyword.operator\",\":|\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"W:\"],\n  [\"information.argument.string.unquoted\",\"Hey, the dusty miller, and his dusty coat;\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"W:\"],\n  [\"information.argument.string.unquoted\",\"He will win a shilling, or he spend a groat.\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"W:\"],\n  [\"information.argument.string.unquoted\",\"Dusty was the coat, dusty was the colour;\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"W:\"],\n  [\"information.argument.string.unquoted\",\"Dusty was the kiss, that I got frae the miller.\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"information.keyword\",\"X:\"],\n  [\"information.argument.string.unquoted\",\"2\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"T:\"],\n  [\"information.argument.string.unquoted\",\"Old Sir Simon the King\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"C:\"],\n  [\"information.argument.string.unquoted\",\"Trad.\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"S:\"],\n  [\"information.argument.string.unquoted\",\"Offord MSS          \"],\n  [\"comment.line.percentage\",\"% from Offord manuscript\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"N:\"],\n  [\"information.argument.string.unquoted\",\"see also Playford   \"],\n  [\"comment.line.percentage\",\"% reference note\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"M:\"],\n  [\"information.argument.string.unquoted\",\"9/8\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"R:\"],\n  [\"information.argument.string.unquoted\",\"SJ                  \"],\n  [\"comment.line.percentage\",\"% slip jig\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"N:\"],\n  [\"information.argument.string.unquoted\",\"originally in C     \"],\n  [\"comment.line.percentage\",\"% transcription note\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"K:\"],\n  [\"information.argument.string.unquoted\",\"G\"]\n],[\n   \"start\",\n  [\"pitch.constant.numeric\",\"D\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"pitch.constant.numeric\",\"F\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"D\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"pitch.constant.numeric\",\"F\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"F\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"D\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"E\"],\n  [\"pitch.constant.numeric\",\"F\"],\n  [\"pitch.constant.numeric\",\"E\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"E\"],\n  [\"pitch.constant.numeric\",\"F\"],\n  [\"pitch.constant.numeric\",\"E\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"E\"],\n  [\"pitch.constant.numeric\",\"F\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"F\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"E\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"D\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"barline.keyword.operator\",\":|\"]\n],[\n   \"start\",\n  [\"pitch.constant.numeric\",\"D\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"D\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"D\"],\n  [\"barline.keyword.operator\",\"|[1\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"E\"],\n  [\"pitch.constant.numeric\",\"F\"],\n  [\"pitch.constant.numeric\",\"E\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"E\"],\n  [\"pitch.constant.numeric\",\"F\"],\n  [\"pitch.constant.numeric\",\"E\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"E\"],\n  [\"pitch.constant.numeric\",\"F\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"text\",\"[\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"text\",\"] \"],\n  [\"pitch.constant.numeric\",\"F\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"E\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"D\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"barline.keyword.operator\",\":|\"],\n  [\"text\",\"\\\\ \"],\n  [\"comment.line.percentage\",\"% no line-break in score\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"M:\"],\n  [\"information.argument.string.unquoted\",\"12/8                \"],\n  [\"comment.line.percentage\",\"% change of meter\"]\n],[\n   \"start\",\n  [\"barline.keyword.operator\",\"[2\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"E\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"E\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"E\"],\n  [\"pitch.constant.numeric\",\"F\"],\n  [\"pitch.constant.numeric\",\"E\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"E\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"E\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"E\"],\n  [\"pitch.constant.numeric\",\"F\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"text\",\"\\\\  \"],\n  [\"comment.line.percentage\",\"% no line-break in score\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"M:\"],\n  [\"information.argument.string.unquoted\",\"9/8                 \"],\n  [\"comment.line.percentage\",\"% change of meter\"]\n],[\n   \"start\",\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"F\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"E\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"D\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"barline.keyword.operator\",\"|]\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"information.keyword\",\"X:\"],\n  [\"information.argument.string.unquoted\",\"3\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"T:\"],\n  [\"information.argument.string.unquoted\",\"William and Nancy\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"T:\"],\n  [\"information.argument.string.unquoted\",\"New Mown Hay\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"T:\"],\n  [\"information.argument.string.unquoted\",\"Legacy, The\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"C:\"],\n  [\"information.argument.string.unquoted\",\"Trad.\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"O:\"],\n  [\"information.argument.string.unquoted\",\"England; Gloucs; Bledington \"],\n  [\"comment.line.percentage\",\"% place of origin\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"B:\"],\n  [\"information.argument.string.unquoted\",\"Sussex Tune Book            \"],\n  [\"comment.line.percentage\",\"% can be found in these books\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"B:\"],\n  [\"information.argument.string.unquoted\",\"Mally's Cotswold Morris vol.1 2\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"D:\"],\n  [\"information.argument.string.unquoted\",\"Morris On                   \"],\n  [\"comment.line.percentage\",\"% can be heard on this record\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"P:\"],\n  [\"information.argument.string.unquoted\",\"(AB)2(AC)2A                 \"],\n  [\"comment.line.percentage\",\"% play the parts in this order\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"M:\"],\n  [\"information.argument.string.unquoted\",\"6/8\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"K:\"],\n  [\"information.argument.string.unquoted\",\"G                        \"]\n],[\n   \"start\",\n  [\"information.keyword.embedded\",\"[P:\"],\n  [\"information.argument.string.unquoted\",\"A]\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"D\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"string.quoted\",\"\\\"G\\\"\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"string.quoted\",\"\\\"C\\\"\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"text\",\" \"],\n  [\"string.quoted\",\"\\\"G\\\"\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"string.quoted\",\"\\\"D7\\\"\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"text\",\" \"],\n  [\"string.quoted\",\"\\\"G\\\"\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"string.quoted\",\"\\\"C\\\"\"],\n  [\"pitch.constant.numeric\",\"E\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"string.quoted\",\"\\\"D7\\\"\"],\n  [\"pitch.constant.numeric\",\"F\"],\n  [\"text\",\" \"],\n  [\"string.quoted\",\"\\\"G\\\"\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"barline.keyword.operator\",\":|\"]\n],[\n   \"start\",\n  [\"information.keyword.embedded\",\"[P:\"],\n  [\"information.argument.string.unquoted\",\"B]\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"string.quoted\",\"\\\"G\\\"\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"string.quoted\",\"\\\"C\\\"\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"pitch.constant.numeric\",\"f\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"text\",\" \"],\n  [\"string.quoted\",\"\\\"G\\\"\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"text\",\" \"],\n  [\"string.quoted\",\"\\\"G\\\"\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"text\",\"    \"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"string.quoted\",\"\\\"C\\\"\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"pitch.constant.numeric\",\"f\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"text\",\"    \"],\n  [\"string.quoted\",\"\\\"D7\\\"\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"barline.keyword.operator\",\"|\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"string.quoted\",\"\\\"G\\\"\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"string.quoted\",\"\\\"C\\\"\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"text\",\" \"],\n  [\"string.quoted\",\"\\\"G\\\"\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"string.quoted\",\"\\\"D7\\\"\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"text\",\" \"],\n  [\"string.quoted\",\"\\\"G\\\"\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"string.quoted\",\"\\\"C\\\"\"],\n  [\"pitch.constant.numeric\",\"E\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"string.quoted\",\"\\\"D7\\\"\"],\n  [\"pitch.constant.numeric\",\"F\"],\n  [\"text\",\" \"],\n  [\"string.quoted\",\"\\\"G\\\"\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"barline.keyword.operator\",\":|\"]\n],[\n   \"start\",\n  [\"comment.line.percentage\",\"% changes of meter, using inline fields\"]\n],[\n   \"start\",\n  [\"information.keyword.embedded\",\"[T:\"],\n  [\"information.argument.string.unquoted\",\"Slows]\"],\n  [\"information.keyword.embedded\",\"[M:\"],\n  [\"information.argument.string.unquoted\",\"4/4]\"],\n  [\"information.keyword.embedded\",\"[L:\"],\n  [\"information.argument.string.unquoted\",\"1/4]\"],\n  [\"information.keyword.embedded\",\"[P:\"],\n  [\"information.argument.string.unquoted\",\"C]\"],\n  [\"string.quoted\",\"\\\"G\\\"\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"string.quoted\",\"\\\"C\\\"\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"text\",\" \"],\n  [\"string.quoted\",\"\\\"G\\\"\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"string.quoted\",\"\\\"Em\\\"\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"pitch.constant.numeric\",\"f\"],\n  [\"text\",\" \"],\n  [\"string.quoted\",\"\\\"A7\\\"\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"string.quoted\",\"\\\"D7\\\"\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"text\",\" \"],\n  [\"string.quoted\",\"\\\"G\\\"\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"text\",\"\\\\\"]\n],[\n   \"start\",\n  [\"text\",\"       \"],\n  [\"string.quoted\",\"\\\"C\\\"\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"text\",\" \"],\n  [\"string.quoted\",\"\\\"G\\\"\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"information.keyword.embedded\",\"[M:\"],\n  [\"information.argument.string.unquoted\",\"3/8]\"],\n  [\"information.keyword.embedded\",\"[L:\"],\n  [\"information.argument.string.unquoted\",\"1/8]\"],\n  [\"text\",\" \"],\n  [\"string.quoted\",\"\\\"G\\\"\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"text\",\" \"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"information.keyword.embedded\",\"[M:\"],\n  [\"information.argument.string.unquoted\",\"6/8]\"],\n  [\"text\",\" \"],\n  [\"string.quoted\",\"\\\"C\\\"\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"pitch.constant.numeric\",\"f\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"text\",\" \"],\n  [\"string.quoted\",\"\\\"D7\\\"\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"barline.keyword.operator\",\"|\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"string.quoted\",\"\\\"G\\\"\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"string.quoted\",\"\\\"C\\\"\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"text\",\" \"],\n  [\"string.quoted\",\"\\\"G\\\"\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"string.quoted\",\"\\\"D7\\\"\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"text\",\" \"],\n  [\"string.quoted\",\"\\\"G\\\"\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"string.quoted\",\"\\\"C\\\"\"],\n  [\"pitch.constant.numeric\",\"E\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"string.quoted\",\"\\\"D7\\\"\"],\n  [\"pitch.constant.numeric\",\"F\"],\n  [\"text\",\" \"],\n  [\"string.quoted\",\"\\\"G\\\"\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"barline.keyword.operator\",\":|\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"information.keyword\",\"X:\"],\n  [\"information.argument.string.unquoted\",\"4\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"T:\"],\n  [\"information.argument.string.unquoted\",\"South Downs Jig\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"R:\"],\n  [\"information.argument.string.unquoted\",\"jig\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"S:\"],\n  [\"information.argument.string.unquoted\",\"Robert Harbron\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"M:\"],\n  [\"information.argument.string.unquoted\",\"6/8\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"L:\"],\n  [\"information.argument.string.unquoted\",\"1/8\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"K:\"],\n  [\"information.argument.string.unquoted\",\"G\"]\n],[\n   \"start\",\n  [\"barline.keyword.operator\",\"|:\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"text\",\" \"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"duration.constant.numeric\",\"3\"],\n  [\"text\",\" \"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"E\"],\n  [\"pitch.constant.numeric\",\"F\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"F\"],\n  [\"pitch.constant.numeric\",\"E\"],\n  [\"text\",\" \"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"D\"],\n  [\"pitch.constant.numeric\",\"E\"],\n  [\"pitch.constant.numeric\",\"F\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"text\",\" \"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"text\",\" \"],\n  [\"barline.keyword.operator\",\"|\"]\n],[\n   \"start\",\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"duration.constant.numeric\",\"3\"],\n  [\"text\",\" \"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"E\"],\n  [\"pitch.constant.numeric\",\"F\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"F\"],\n  [\"pitch.constant.numeric\",\"E\"],\n  [\"text\",\" \"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"D\"],\n  [\"pitch.constant.numeric\",\"E\"],\n  [\"pitch.constant.numeric\",\"F\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"text\",\" \"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"F\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"text\",\" \"],\n  [\"barline.keyword.operator\",\":|\"]\n],[\n   \"start\",\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"text\",\" \"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"text\",\" \"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"text\",\" \"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"text\",\" \"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"text\",\" \"],\n  [\"information.keyword.embedded\",\"[M:\"],\n  [\"information.argument.string.unquoted\",\"9/8]\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"duration.constant.numeric\",\"3\"],\n  [\"text\",\" \"],\n  [\"barline.keyword.operator\",\"|\"]\n],[\n   \"start\",\n  [\"information.keyword.embedded\",\"[M:\"],\n  [\"information.argument.string.unquoted\",\"6/8]\"],\n  [\"pitch.constant.numeric\",\"D\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"pitch.constant.numeric\",\"F\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"E\"],\n  [\"duration.constant.numeric\",\"3\"],\n  [\"text\",\" \"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"F\"],\n  [\"pitch.constant.numeric\",\"E\"],\n  [\"pitch.constant.numeric\",\"D\"],\n  [\"text\",\" \"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"D\"],\n  [\"pitch.constant.numeric\",\"E\"],\n  [\"pitch.constant.numeric\",\"F\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"text\",\" \"],\n  [\"barline.keyword.operator\",\"|1\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"F\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"text\",\" \"],\n  [\"barline.keyword.operator\",\":|2\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"F\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"duration.constant.numeric\",\"3\"],\n  [\"text\",\" \"],\n  [\"barline.keyword.operator\",\"|]\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"information.keyword\",\"X:\"],\n  [\"information.argument.string.unquoted\",\"5\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"T:\"],\n  [\"information.argument.string.unquoted\",\"Atholl Brose\"]\n],[\n   \"start\",\n  [\"comment.line.percentage\",\"% in this example, which reproduces Highland Bagpipe gracing,\"]\n],[\n   \"start\",\n  [\"comment.line.percentage\",\"%  the large number of grace notes mean that it is more convenient to be specific about\"]\n],[\n   \"start\",\n  [\"comment.line.percentage\",\"%  score line-breaks (using the $ symbol), rather than using code line breaks to indicate them\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"I:\"],\n  [\"information.argument.string.unquoted\",\"linebreak $\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"K:\"],\n  [\"information.argument.string.unquoted\",\"D\"]\n],[\n   \"start\",\n  [\"text\",\"{\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"duration.constant.numeric\",\"<\"],\n  [\"text\",\"{\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"text\",\" {\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"text\",\" {\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"pitch.constant.numeric\",\"f\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"duration.constant.numeric\",\">\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"text\",\" {\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"barline.keyword.operator\",\"|\"]\n],[\n   \"start\",\n  [\"text\",\"{\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"duration.constant.numeric\",\"<\"],\n  [\"text\",\"{\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"text\",\" {\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"duration.constant.numeric\",\">\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"text\",\" {\"],\n  [\"pitch.constant.numeric\",\"a\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"a\"],\n  [\"duration.constant.numeric\",\">\"],\n  [\"pitch.constant.numeric\",\"f\"],\n  [\"text\",\" {\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"pitch.constant.numeric\",\"f\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"duration.constant.numeric\",\">\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"barline.keyword.operator\",\"|\"]\n],[\n   \"start\",\n  [\"text\",\"{\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"duration.constant.numeric\",\"<\"],\n  [\"text\",\"{\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"text\",\" {\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"text\",\" {\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"pitch.constant.numeric\",\"f\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"duration.constant.numeric\",\">\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"text\",\" {\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"barline.keyword.operator\",\"|\"]\n],[\n   \"start\",\n  [\"text\",\"{\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"duration.constant.numeric\",\"/\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"duration.constant.numeric\",\"/\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"text\",\" {\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"duration.constant.numeric\",\">\"],\n  [\"text\",\"{\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"text\",\" {\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"pitch.constant.numeric\",\"f\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"text\",\" {\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"duration.constant.numeric\",\">\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"barline.keyword.operator\",\":|\"],\n  [\"text\",\"$\"]\n],[\n   \"start\",\n  [\"text\",\"{\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"duration.constant.numeric\",\"<\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"text\",\" {\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"pitch.constant.numeric\",\"f\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"duration.constant.numeric\",\">\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"text\",\" {\"],\n  [\"pitch.constant.numeric\",\"a\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"a\"],\n  [\"duration.constant.numeric\",\">\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"text\",\" {\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"pitch.constant.numeric\",\"f\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"duration.constant.numeric\",\">\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"barline.keyword.operator\",\"|\"]\n],[\n   \"start\",\n  [\"text\",\"{\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"duration.constant.numeric\",\"<\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"text\",\" {\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"pitch.constant.numeric\",\"f\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"duration.constant.numeric\",\">\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"text\",\" {\"],\n  [\"pitch.constant.numeric\",\"a\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"a\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"text\",\" {\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"a\"],\n  [\"duration.constant.numeric\",\">\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"barline.keyword.operator\",\"|\"]\n],[\n   \"start\",\n  [\"text\",\"{\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"duration.constant.numeric\",\"<\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"text\",\" {\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"pitch.constant.numeric\",\"f\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"duration.constant.numeric\",\">\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"text\",\" {\"],\n  [\"pitch.constant.numeric\",\"a\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"a\"],\n  [\"duration.constant.numeric\",\">\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"text\",\" {\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"pitch.constant.numeric\",\"f\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"duration.constant.numeric\",\">\"],\n  [\"pitch.constant.numeric\",\"f\"],\n  [\"barline.keyword.operator\",\"|\"]\n],[\n   \"start\",\n  [\"text\",\"{\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"pitch.constant.numeric\",\"f\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"duration.constant.numeric\",\">\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"text\",\" {\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"pitch.constant.numeric\",\"f\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"duration.constant.numeric\",\">\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"text\",\" {\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"duration.constant.numeric\",\"<\"],\n  [\"text\",\"{\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"text\",\" {\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"duration.constant.numeric\",\">\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"barline.keyword.operator\",\"|\"]\n],[\n   \"start\",\n  [\"text\",\"{\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"duration.constant.numeric\",\"<\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"text\",\" {\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"pitch.constant.numeric\",\"f\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"duration.constant.numeric\",\">\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"text\",\" {\"],\n  [\"pitch.constant.numeric\",\"a\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"a\"],\n  [\"duration.constant.numeric\",\">\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"text\",\" {\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"pitch.constant.numeric\",\"f\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"duration.constant.numeric\",\">\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"barline.keyword.operator\",\"|\"]\n],[\n   \"start\",\n  [\"text\",\"{\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"duration.constant.numeric\",\"<\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"text\",\" {\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"pitch.constant.numeric\",\"f\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"duration.constant.numeric\",\">\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"text\",\" {\"],\n  [\"pitch.constant.numeric\",\"a\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"a\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"text\",\" {\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"a\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"barline.keyword.operator\",\"|\"]\n],[\n   \"start\",\n  [\"text\",\"{\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"duration.constant.numeric\",\"<\"],\n  [\"text\",\"{\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"text\",\" {\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"pitch.constant.numeric\",\"f\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"pitch.constant.numeric\",\"a\"],\n  [\"text\",\" {\"],\n  [\"pitch.constant.numeric\",\"f\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"duration.constant.numeric\",\">\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"text\",\" {\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"f\"],\n  [\"duration.constant.numeric\",\">\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"barline.keyword.operator\",\"|\"]\n],[\n   \"start\",\n  [\"text\",\"{\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"duration.constant.numeric\",\"/\"],\n  [\"pitch.constant.numeric\",\"f\"],\n  [\"duration.constant.numeric\",\"/\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"text\",\" {\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"duration.constant.numeric\",\">\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"text\",\" {\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"duration.constant.numeric\",\"<\"],\n  [\"text\",\"{\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"text\",\" {\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"text\",\"}\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"barline.keyword.operator\",\"|]\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"information.keyword\",\"X:\"],\n  [\"information.argument.string.unquoted\",\"6\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"T:\"],\n  [\"information.argument.string.unquoted\",\"Untitled Reel\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"C:\"],\n  [\"information.argument.string.unquoted\",\"Trad.\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"K:\"],\n  [\"information.argument.string.unquoted\",\"D\"]\n],[\n   \"start\",\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"a\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"a\"],\n  [\"pitch.constant.numeric\",\"b\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"a\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"a\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"pitch.constant.numeric\",\"b\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"a\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"pitch.constant.numeric\",\"f\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"f\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"pitch.constant.numeric\",\"a\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"f\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"barline.keyword.operator\",\":|\"],\n  [\"text\",\"\\\\\"]\n],[\n   \"start\",\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"E\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"barline.keyword.operator\",\":|\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"K:\"],\n  [\"information.argument.string.unquoted\",\"G\"]\n],[\n   \"start\",\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"F\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"pitch.constant.numeric\",\"F\"],\n  [\"pitch.constant.numeric\",\"E\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"barline.keyword.operator\",\":|\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"information.keyword\",\"X:\"],\n  [\"information.argument.string.unquoted\",\"7\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"T:\"],\n  [\"information.argument.string.unquoted\",\"Kitchen Girl\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"C:\"],\n  [\"information.argument.string.unquoted\",\"Trad.\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"K:\"],\n  [\"information.argument.string.unquoted\",\"D\"]\n],[\n   \"start\",\n  [\"text\",\"[\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"duration.constant.numeric\",\"4\"],\n  [\"pitch.constant.numeric\",\"a\"],\n  [\"duration.constant.numeric\",\"4\"],\n  [\"text\",\"] [\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"duration.constant.numeric\",\"4\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"duration.constant.numeric\",\"4\"],\n  [\"text\",\"]\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"pitch.constant.numeric\",\"f\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"f\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"pitch.constant.numeric\",\"a\"],\n  [\"pitch.constant.numeric\",\"b\"],\n  [\"pitch.constant.numeric\",\"a\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"f\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"barline.keyword.operator\",\"|\"]\n],[\n   \"start\",\n  [\"pitch.constant.numeric\",\"a\"],\n  [\"duration.constant.numeric\",\"4\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"duration.constant.numeric\",\"4\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"pitch.constant.numeric\",\"f\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"pitch.constant.numeric\",\"f\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"pitch.constant.numeric\",\"f\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"duration.constant.numeric\",\"4\"],\n  [\"barline.keyword.operator\",\":|\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"K:\"],\n  [\"information.argument.string.unquoted\",\"G\"]\n],[\n   \"start\",\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"E\"],\n  [\"pitch.constant.numeric\",\"D\"],\n  [\"pitch.constant.numeric\",\"E\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"duration.constant.numeric\",\"3\"],\n  [\"pitch.constant.numeric\",\"f\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"barline.keyword.operator\",\"|\"]\n],[\n   \"start\",\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"E\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"duration.constant.numeric\",\"4\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"duration.constant.numeric\",\"4\"],\n  [\"barline.keyword.operator\",\":|\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"comment.line.percentage\",\"%abc-2.1\"]\n],[\n   \"start\",\n  [\"information.comment.line.percentage\",\"%%\"],\n  [\"information.keyword.embedded\",\"pagewidth      21cm\"]\n],[\n   \"start\",\n  [\"information.comment.line.percentage\",\"%%\"],\n  [\"information.keyword.embedded\",\"pageheight     29.7cm\"]\n],[\n   \"start\",\n  [\"information.comment.line.percentage\",\"%%\"],\n  [\"information.keyword.embedded\",\"topspace       0.5cm\"]\n],[\n   \"start\",\n  [\"information.comment.line.percentage\",\"%%\"],\n  [\"information.keyword.embedded\",\"topmargin      1cm\"]\n],[\n   \"start\",\n  [\"information.comment.line.percentage\",\"%%\"],\n  [\"information.keyword.embedded\",\"botmargin      0cm\"]\n],[\n   \"start\",\n  [\"information.comment.line.percentage\",\"%%\"],\n  [\"information.keyword.embedded\",\"leftmargin     1cm\"]\n],[\n   \"start\",\n  [\"information.comment.line.percentage\",\"%%\"],\n  [\"information.keyword.embedded\",\"rightmargin    1cm\"]\n],[\n   \"start\",\n  [\"information.comment.line.percentage\",\"%%\"],\n  [\"information.keyword.embedded\",\"titlespace     0cm\"]\n],[\n   \"start\",\n  [\"information.comment.line.percentage\",\"%%\"],\n  [\"information.keyword.embedded\",\"titlefont      Times-Bold 32\"]\n],[\n   \"start\",\n  [\"information.comment.line.percentage\",\"%%\"],\n  [\"information.keyword.embedded\",\"subtitlefont   Times-Bold 24\"]\n],[\n   \"start\",\n  [\"information.comment.line.percentage\",\"%%\"],\n  [\"information.keyword.embedded\",\"composerfont   Times 16\"]\n],[\n   \"start\",\n  [\"information.comment.line.percentage\",\"%%\"],\n  [\"information.keyword.embedded\",\"vocalfont      Times-Roman 14\"]\n],[\n   \"start\",\n  [\"information.comment.line.percentage\",\"%%\"],\n  [\"information.keyword.embedded\",\"staffsep       60pt\"]\n],[\n   \"start\",\n  [\"information.comment.line.percentage\",\"%%\"],\n  [\"information.keyword.embedded\",\"sysstaffsep    20pt\"]\n],[\n   \"start\",\n  [\"information.comment.line.percentage\",\"%%\"],\n  [\"information.keyword.embedded\",\"musicspace     1cm\"]\n],[\n   \"start\",\n  [\"information.comment.line.percentage\",\"%%\"],\n  [\"information.keyword.embedded\",\"vocalspace     5pt\"]\n],[\n   \"start\",\n  [\"information.comment.line.percentage\",\"%%\"],\n  [\"information.keyword.embedded\",\"measurenb      0\"]\n],[\n   \"start\",\n  [\"information.comment.line.percentage\",\"%%\"],\n  [\"information.keyword.embedded\",\"barsperstaff   5\"]\n],[\n   \"start\",\n  [\"information.comment.line.percentage\",\"%%\"],\n  [\"information.keyword.embedded\",\"scale          0.7\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"X:\"],\n  [\"information.argument.string.unquoted\",\" 1\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"T:\"],\n  [\"information.argument.string.unquoted\",\" Canzonetta a tre voci\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"C:\"],\n  [\"information.argument.string.unquoted\",\" Claudio Monteverdi (1567-1643)\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"M:\"],\n  [\"information.argument.string.unquoted\",\" C\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"L:\"],\n  [\"information.argument.string.unquoted\",\" 1/4\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"Q:\"],\n  [\"information.argument.string.unquoted\",\" \\\"Andante mosso\\\" 1/4 = 110\"]\n],[\n   \"start\",\n  [\"information.comment.line.percentage\",\"%%\"],\n  [\"information.keyword.embedded\",\"score [1 2 3]\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"V:\"],\n  [\"information.argument.string.unquoted\",\" 1 clef=treble name=\\\"Soprano\\\"sname=\\\"A\\\"\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"V:\"],\n  [\"information.argument.string.unquoted\",\" 2 clef=treble name=\\\"Alto\\\"   sname=\\\"T\\\"\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"V:\"],\n  [\"information.argument.string.unquoted\",\" 3 clef=bass middle=d name=\\\"Tenor\\\"  sname=\\\"B\\\"\"]\n],[\n   \"start\",\n  [\"information.comment.line.percentage\",\"%%\"],\n  [\"information.keyword.embedded\",\"MIDI program 1 75 % recorder\"]\n],[\n   \"start\",\n  [\"information.comment.line.percentage\",\"%%\"],\n  [\"information.keyword.embedded\",\"MIDI program 2 75\"]\n],[\n   \"start\",\n  [\"information.comment.line.percentage\",\"%%\"],\n  [\"information.keyword.embedded\",\"MIDI program 3 75\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"K:\"],\n  [\"information.argument.string.unquoted\",\" Eb\"]\n],[\n   \"start\",\n  [\"comment.line.percentage\",\"% 1 - 4\"]\n],[\n   \"start\",\n  [\"information.keyword.embedded\",\"[V:\"],\n  [\"information.argument.string.unquoted\",\" 1]\"],\n  [\"text\",\" \"],\n  [\"barline.keyword.operator\",\"|:\"],\n  [\"pitch.constant.numeric\",\"z\"],\n  [\"duration.constant.numeric\",\"4\"],\n  [\"text\",\"  \"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"z\"],\n  [\"duration.constant.numeric\",\"4\"],\n  [\"text\",\"  \"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"f\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"text\",\"         \"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"accent.constant.language\",\"_\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"text\",\"        \"],\n  [\"barline.keyword.operator\",\"|\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"w:\"],\n  [\"information.argument.string.unquoted\",\" Son que-sti~i cre-spi cri-ni~e\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"w:\"],\n  [\"information.argument.string.unquoted\",\" Que-sti son gli~oc-chi che mi-\"]\n],[\n   \"start\",\n  [\"information.keyword.embedded\",\"[V:\"],\n  [\"information.argument.string.unquoted\",\" 2]\"],\n  [\"text\",\" \"],\n  [\"barline.keyword.operator\",\"|:\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"text\",\"(\"],\n  [\"pitch.constant.numeric\",\"F\"],\n  [\"duration.constant.numeric\",\"/\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"duration.constant.numeric\",\"/\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"duration.constant.numeric\",\"/\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"duration.constant.numeric\",\"/\"],\n  [\"text\",\")\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"accent.constant.language\",\"=\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"text\",\"         \"],\n  [\"barline.keyword.operator\",\"|\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"w:\"],\n  [\"information.argument.string.unquoted\",\" Son que-sti~i cre-spi cri-ni~e que - - - - sto~il vi-so e\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"w:\"],\n  [\"information.argument.string.unquoted\",\" Que-sti son~gli oc-chi che mi-ran - - - - do fi-so mi-\"]\n],[\n   \"start\",\n  [\"information.keyword.embedded\",\"[V:\"],\n  [\"information.argument.string.unquoted\",\" 3]\"],\n  [\"text\",\" \"],\n  [\"barline.keyword.operator\",\"|:\"],\n  [\"pitch.constant.numeric\",\"z\"],\n  [\"duration.constant.numeric\",\"4\"],\n  [\"text\",\"  \"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"f\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"accent.constant.language\",\"_\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"pitch.constant.numeric\",\"f\"],\n  [\"text\",\"        \"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"text\",\"(\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"duration.constant.numeric\",\"/\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"duration.constant.numeric\",\"/\"],\n  [\"accent.constant.language\",\"_\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"duration.constant.numeric\",\"/\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"duration.constant.numeric\",\"/\"],\n  [\"text\",\")\"],\n  [\"pitch.constant.numeric\",\"f\"],\n  [\"pitch.constant.numeric\",\"f\"],\n  [\"barline.keyword.operator\",\"|\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"w:\"],\n  [\"information.argument.string.unquoted\",\" Son que-sti~i cre-spi cri-ni~e que - - - - sto~il\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"w:\"],\n  [\"information.argument.string.unquoted\",\" Que-sti son~gli oc-chi che mi-ran - - - - do\"]\n],[\n   \"start\",\n  [\"comment.line.percentage\",\"% 5 - 9\"]\n],[\n   \"start\",\n  [\"information.keyword.embedded\",\"[V:\"],\n  [\"information.argument.string.unquoted\",\" 1]\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"text\",\"     \"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"text\",\" \"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"duration.constant.numeric\",\"3\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"string.quoted\",\"!fermata!\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"pitch.constant.numeric\",\"z\"],\n  [\"text\",\" \"],\n  [\"barline.keyword.operator\",\"::\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"duration.constant.numeric\",\"4\"],\n  [\"barline.keyword.operator\",\"|\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"w:\"],\n  [\"information.argument.string.unquoted\",\" que-sto~il vi-so ond' io ri-man-go~uc-ci-so. Deh,\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"w:\"],\n  [\"information.argument.string.unquoted\",\" ran-do fi-so, tut-to re-stai con-qui-so.\"]\n],[\n   \"start\",\n  [\"information.keyword.embedded\",\"[V:\"],\n  [\"information.argument.string.unquoted\",\" 2]\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"text\",\"     \"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"F\"],\n  [\"pitch.constant.numeric\",\"F\"],\n  [\"pitch.constant.numeric\",\"F\"],\n  [\"text\",\" \"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"duration.constant.numeric\",\"3\"],\n  [\"pitch.constant.numeric\",\"F\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"accent.constant.language\",\"=\"],\n  [\"pitch.constant.numeric\",\"E\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"string.quoted\",\"!fermata!\"],\n  [\"pitch.constant.numeric\",\"E\"],\n  [\"pitch.constant.numeric\",\"z\"],\n  [\"barline.keyword.operator\",\"::\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"duration.constant.numeric\",\"4\"],\n  [\"barline.keyword.operator\",\"|\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"w:\"],\n  [\"information.argument.string.unquoted\",\" que-sto~il vi-so ond' io ri-man-go~uc-ci-so. Deh,\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"w:\"],\n  [\"information.argument.string.unquoted\",\" ran-do fi-so tut-to re-stai con-qui-so.\"]\n],[\n   \"start\",\n  [\"information.keyword.embedded\",\"[V:\"],\n  [\"information.argument.string.unquoted\",\" 3]\"],\n  [\"text\",\" (\"],\n  [\"pitch.constant.numeric\",\"a\"],\n  [\"pitch.constant.numeric\",\"g\"],\n  [\"duration.constant.numeric\",\"/\"],\n  [\"pitch.constant.numeric\",\"f\"],\n  [\"duration.constant.numeric\",\"/\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"text\",\")\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"accent.constant.language\",\"_\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"duration.constant.numeric\",\"3\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"string.quoted\",\"!fermata!\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"pitch.constant.numeric\",\"z\"],\n  [\"text\",\" \"],\n  [\"barline.keyword.operator\",\"::\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"duration.constant.numeric\",\"4\"],\n  [\"barline.keyword.operator\",\"|\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"w:\"],\n  [\"information.argument.string.unquoted\",\" vi - - - so ond' io ti-man-go~uc-ci-so. Deh,\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"w:\"],\n  [\"information.argument.string.unquoted\",\" fi - - - so tut-to re-stai con-qui-so.\"]\n],[\n   \"start\",\n  [\"comment.line.percentage\",\"% 10 - 15\"]\n],[\n   \"start\",\n  [\"information.keyword.embedded\",\"[V:\"],\n  [\"information.argument.string.unquoted\",\" 1]\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"f\"],\n  [\"accent.constant.language\",\"_\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"text\",\" \"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"z\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"pitch.constant.numeric\",\"F\"],\n  [\"text\",\"  \"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"text\",\"\\\\\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"w:\"],\n  [\"information.argument.string.unquoted\",\" dim-me-lo ben mi-o, che que-sto\"],\n  [\"text\",\"\\\\\"]\n],[\n   \"start\",\n  [\"accent.constant.language\",\"=\"],\n  [\"pitch.constant.numeric\",\"E\"],\n  [\"pitch.constant.numeric\",\"F\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"text\",\"          \"],\n  [\"barline.keyword.operator\",\"|1\"],\n  [\"pitch.constant.numeric\",\"F\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"z\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"barline.keyword.operator\",\":|2\"],\n  [\"pitch.constant.numeric\",\"F\"],\n  [\"duration.constant.numeric\",\"8\"],\n  [\"barline.keyword.operator\",\"|]\"],\n  [\"text\",\" \"],\n  [\"comment.line.percentage\",\"% more notes\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"w:\"],\n  [\"information.argument.string.unquoted\",\" sol de-si-o_. \"],\n  [\"comment.line.percentage\",\"% more lyrics\"]\n],[\n   \"start\",\n  [\"information.keyword.embedded\",\"[V:\"],\n  [\"information.argument.string.unquoted\",\" 2]\"],\n  [\"text\",\" \"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"text\",\"  \"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"pitch.constant.numeric\",\"F\"],\n  [\"accent.constant.language\",\"=\"],\n  [\"pitch.constant.numeric\",\"E\"],\n  [\"pitch.constant.numeric\",\"F\"],\n  [\"text\",\" \"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"text\",\"(\"],\n  [\"pitch.constant.numeric\",\"G\"],\n  [\"pitch.constant.numeric\",\"F\"],\n  [\"duration.constant.numeric\",\"3/2\"],\n  [\"accent.constant.language\",\"=\"],\n  [\"pitch.constant.numeric\",\"E\"],\n  [\"duration.constant.numeric\",\"//\"],\n  [\"pitch.constant.numeric\",\"D\"],\n  [\"duration.constant.numeric\",\"//\"],\n  [\"pitch.constant.numeric\",\"E\"],\n  [\"text\",\")\"],\n  [\"barline.keyword.operator\",\"|1\"],\n  [\"pitch.constant.numeric\",\"F\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"z\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"barline.keyword.operator\",\":|2\"],\n  [\"pitch.constant.numeric\",\"F\"],\n  [\"duration.constant.numeric\",\"8\"],\n  [\"barline.keyword.operator\",\"|]\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"w:\"],\n  [\"information.argument.string.unquoted\",\" dim-me-lo ben mi-o, che que-sto sol de-si - - - - o_.\"]\n],[\n   \"start\",\n  [\"information.keyword.embedded\",\"[V:\"],\n  [\"information.argument.string.unquoted\",\" 3]\"],\n  [\"text\",\" \"],\n  [\"accent.constant.language\",\"_\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"pitch.constant.numeric\",\"B\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"duration.constant.numeric\",\">\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"e\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"A\"],\n  [\"pitch.constant.numeric\",\"F\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"accent.constant.language\",\"=\"],\n  [\"pitch.constant.numeric\",\"E\"],\n  [\"pitch.constant.numeric\",\"F\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"accent.constant.language\",\"_\"],\n  [\"pitch.constant.numeric\",\"d\"],\n  [\"barline.keyword.operator\",\"|\"],\n  [\"pitch.constant.numeric\",\"c\"],\n  [\"duration.constant.numeric\",\"4\"],\n  [\"text\",\"             \"],\n  [\"barline.keyword.operator\",\"|1\"],\n  [\"pitch.constant.numeric\",\"F\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"pitch.constant.numeric\",\"z\"],\n  [\"duration.constant.numeric\",\"2\"],\n  [\"barline.keyword.operator\",\":|2\"],\n  [\"pitch.constant.numeric\",\"F\"],\n  [\"duration.constant.numeric\",\"8\"],\n  [\"barline.keyword.operator\",\"|]\"]\n],[\n   \"start\",\n  [\"information.keyword\",\"w:\"],\n  [\"information.argument.string.unquoted\",\" dim-me-lo ben mi-o, che que-sto sol de-si-o_.\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_actionscript.json",
    "content": "[[\n   \"start\",\n  [\"text\",\"package code\"]\n],[\n   \"start\",\n  [\"text\",\"{\"]\n],[\n   \"punctuation.definition.comment.actionscript.2\",\n  [\"text\",\"    \"],\n  [\"punctuation.definition.comment.actionscript.2\",\"/*\"],\n  [\"comment.block.actionscript.2\",\"****************************************\"]\n],[\n   \"punctuation.definition.comment.actionscript.2\",\n  [\"comment.block.actionscript.2\",\"\\t * based on textmate actionscript bundle\"]\n],[\n   \"start\",\n  [\"comment.block.actionscript.2\",\"\\t ***************************************\"],\n  [\"punctuation.definition.comment.actionscript.2\",\"*/\"]\n],[\n   \"start\",\n  [\"text\",\"\\t \"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"keyword.control.actionscript.2\",\"import\"],\n  [\"text\",\" fl.events.SliderEvent;\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"keyword.control.actionscript.2\",\"public\"],\n  [\"text\",\" \"],\n  [\"storage.type.class.actionscript.2\",\"class\"],\n  [\"meta.class.actionscript.2\",\" \"],\n  [\"entity.name.type.class.actionscript.2\",\"Foo\"],\n  [\"meta.class.actionscript.2\",\" \"],\n  [\"storage.modifier.extends.actionscript.2\",\"extends\"],\n  [\"meta.class.actionscript.2\",\" \"],\n  [\"entity.other.inherited-class.actionscript.2\",\"MovieClip\"]\n],[\n   \"start\",\n  [\"text\",\"\\t{\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\"],\n  [\"punctuation.definition.comment.actionscript.2\",\"//*************************\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\"],\n  [\"punctuation.definition.comment.actionscript.2\",\"// Properties:\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\"],\n  [\"keyword.control.actionscript.2\",\"public\"],\n  [\"text\",\" \"],\n  [\"keyword.control.actionscript.2\",\"var\"],\n  [\"text\",\" activeSwatch\"],\n  [\"keyword.operator.symbolic.actionscript.2\",\":\"],\n  [\"support.class.actionscript.2\",\"MovieClip\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\"],\n  [\"punctuation.definition.comment.actionscript.2\",\"// Color offsets\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\"],\n  [\"keyword.control.actionscript.2\",\"public\"],\n  [\"text\",\" \"],\n  [\"keyword.control.actionscript.2\",\"var\"],\n  [\"text\",\" c1\"],\n  [\"keyword.operator.symbolic.actionscript.2\",\":\"],\n  [\"storage.type.actionscript.2\",\"Number\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.symbolic.actionscript.2\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.actionscript.2\",\"0\"],\n  [\"text\",\";\\t\"],\n  [\"punctuation.definition.comment.actionscript.2\",\"// R\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\"],\n  [\"punctuation.definition.comment.actionscript.2\",\"//*************************\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\"],\n  [\"punctuation.definition.comment.actionscript.2\",\"// Constructor:\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\"],\n  [\"keyword.control.actionscript.2\",\"public\"],\n  [\"text\",\" \"],\n  [\"storage.type.function.actionscript.2\",\"function\"],\n  [\"meta.function.actionscript.2\",\" \"],\n  [\"entity.name.function.actionscript.2\",\"Foo\"],\n  [\"punctuation.definition.parameters.begin.actionscript.2\",\"(\"],\n  [\"punctuation.definition.parameters.end.actionscript.2\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t{\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\\t\"],\n  [\"punctuation.definition.comment.actionscript.2\",\"// Respond to mouse events\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\\tswatch1_btn.\"],\n  [\"support.function.actionscript.2\",\"addEventListener\"],\n  [\"text\",\"(MouseEvent.CLICK,swatchHandler,\"],\n  [\"constant.language.actionscript.2\",\"false\"],\n  [\"text\",\",\"],\n  [\"constant.numeric.actionscript.2\",\"0\"],\n  [\"text\",\",\"],\n  [\"constant.language.actionscript.2\",\"false\"],\n  [\"text\",\");\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\\tpreviewBox_btn.\"],\n  [\"support.function.actionscript.2\",\"addEventListener\"],\n  [\"text\",\"(MouseEvent.MOUSE_DOWN,dragPressHandler);\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\\t\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\\t\"],\n  [\"punctuation.definition.comment.actionscript.2\",\"// Respond to drag events\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\\tred_slider.\"],\n  [\"support.function.actionscript.2\",\"addEventListener\"],\n  [\"text\",\"(SliderEvent.THUMB_DRAG,sliderHandler);\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\\t\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\\t\"],\n  [\"punctuation.definition.comment.actionscript.2\",\"// Draw a frame later\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\\t\"],\n  [\"support.function.actionscript.2\",\"addEventListener\"],\n  [\"text\",\"(Event.ENTER_FRAME,\"],\n  [\"support.function.actionscript.2\",\"draw\"],\n  [\"text\",\");\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t}\"]\n],[\n   \"start\",\n  [\"text\",\"        \"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\tprotected \"],\n  [\"storage.type.function.actionscript.2\",\"function\"],\n  [\"meta.function.actionscript.2\",\" \"],\n  [\"entity.name.function.actionscript.2\",\"clickHandler\"],\n  [\"punctuation.definition.parameters.begin.actionscript.2\",\"(\"],\n  [\"variable.parameter.function.actionscript.2\",\"event:MouseEvent\"],\n  [\"punctuation.definition.parameters.end.actionscript.2\",\")\"],\n  [\"keyword.operator.symbolic.actionscript.2\",\":\"],\n  [\"support.function.actionscript.2\",\"void\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t{\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\\tcar.transform.colorTransform \"],\n  [\"keyword.operator.symbolic.actionscript.2\",\"=\"],\n  [\"text\",\" \"],\n  [\"keyword.control.actionscript.2\",\"new\"],\n  [\"text\",\" ColorTransform(\"],\n  [\"constant.numeric.actionscript.2\",\"0\"],\n  [\"text\",\",\"],\n  [\"constant.numeric.actionscript.2\",\"0\"],\n  [\"text\",\",\"],\n  [\"constant.numeric.actionscript.2\",\"0\"],\n  [\"text\",\",\"],\n  [\"constant.numeric.actionscript.2\",\"1\"],\n  [\"text\",\",c1,c2,c3);\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t}\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\tprotected \"],\n  [\"storage.type.function.actionscript.2\",\"function\"],\n  [\"meta.function.actionscript.2\",\" \"],\n  [\"entity.name.function.actionscript.2\",\"changeRGBHandler\"],\n  [\"punctuation.definition.parameters.begin.actionscript.2\",\"(\"],\n  [\"variable.parameter.function.actionscript.2\",\"event:Event\"],\n  [\"punctuation.definition.parameters.end.actionscript.2\",\")\"],\n  [\"keyword.operator.symbolic.actionscript.2\",\":\"],\n  [\"support.function.actionscript.2\",\"void\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t{\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\\tc1 \"],\n  [\"keyword.operator.symbolic.actionscript.2\",\"=\"],\n  [\"text\",\" \"],\n  [\"storage.type.actionscript.2\",\"Number\"],\n  [\"text\",\"(c1_txt.\"],\n  [\"support.function.actionscript.2\",\"text\"],\n  [\"text\",\");\"]\n],[\n   \"start\",\n  [\"text\",\"            \"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\\t\"],\n  [\"keyword.control.actionscript.2\",\"if\"],\n  [\"text\",\"(\"],\n  [\"keyword.operator.symbolic.actionscript.2\",\"!\"],\n  [\"text\",\"(c1>\"],\n  [\"keyword.operator.symbolic.actionscript.2\",\"=\"],\n  [\"constant.numeric.actionscript.2\",\"0\"],\n  [\"text\",\")){\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\\t\\tc1 \"],\n  [\"keyword.operator.symbolic.actionscript.2\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.actionscript.2\",\"0\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\\t}\\t\\t\\t\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\\t\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\\tupdateSliders();\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t}\"]\n],[\n   \"start\",\n  [\"text\",\"\\t}\"]\n],[\n   \"start\",\n  [\"text\",\"}\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_ada.json",
    "content": "[[\n   \"start\",\n  [\"keyword\",\"with\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Ada\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"Text_IO\"],\n  [\"text\",\"; \"],\n  [\"keyword\",\"use\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Ada\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"Text_IO\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"keyword\",\"procedure\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Hello\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"is\"]\n],[\n   \"start\",\n  [\"keyword\",\"begin\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"identifier\",\"Put_Line\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\"Hello, world!\\\"\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"keyword\",\"end\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Hello\"],\n  [\"text\",\";\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_asciidoc.json",
    "content": "[[\n   \"literalBlock\",\n  [\"support.function\",\"------------------------------------\"]\n],[\n   \"dissallowDelimitedBlock\",\n  [\"support.function\",\"-----------------------------------\"]\n],[\n   \"text\",\n  [\"string.italic\",\"_ita_lic_\"],\n  [\"text\",\", \"],\n  [\"keyword.bold\",\"*bo*ld*\"],\n  [\"text\",\", \"],\n  [\"support.function\",\"+mo+no+\"],\n  [\"text\",\", normal. \"]\n],[\n   \"text\",\n  [\"keyword\",\"``\"],\n  [\"text\",\"double quoted\"],\n  [\"keyword\",\"''\"],\n  [\"text\",\", `single quoted'.\"]\n],[\n   \"text\",\n  [\"text\",\"  normal, ^super^, \"],\n  [\"keyword\",\"~sub~\"],\n  [\"text\",\".\"]\n],[\n   \"start\"\n],[\n   \"text\",\n  [\"text\",\"''''\"]\n],[\n   \"text\",\n  [\"text\",\"Escaped:\"]\n],[\n   \"text\",\n  [\"constant.language.escape\",\"\\\\_\"],\n  [\"text\",\"italic_, \"],\n  [\"support.function\",\"+++\"],\n  [\"text\",\"_italic_\"],\n  [\"support.function\",\"+++\"],\n  [\"text\",\",\"]\n],[\n   \"smallPassthrough\",\n  [\"text\",\"t\"],\n  [\"constant.language.escape\",\"\\\\_\"],\n  [\"text\",\"_e\"],\n  [\"string.italic\",\"__st, +++t__\"],\n  [\"text\",\"e__st\"],\n  [\"support.function\",\"+++\"],\n  [\"text\",\",\"]\n],[\n   \"smallPassthrough\",\n  [\"support.function\",\"+++\"],\n  [\"text\",\"<b>bold</b>\"],\n  [\"support.function\",\"+++\"],\n  [\"text\",\", $$<\"],\n  [\"support.function\",\"b\"],\n  [\"text\",\">\"],\n  [\"support.function\",\"normal\"],\n  [\"text\",\"</\"],\n  [\"support.function\",\"b\"],\n  [\"text\",\">$$\"]\n],[\n   \"smallPassthrough\",\n  [\"text\",\"\\\\&#\"],\n  [\"support.function\",\"182\"],\n  [\"text\",\"; &#\"],\n  [\"support.function\",\"182\"],\n  [\"text\",\";\"]\n],[\n   \"smallPassthrough\",\n  [\"text\",\"\\\\`\"],\n  [\"support.function\",\"not\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"single\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"quoted\"],\n  [\"text\",\"'\"]\n],[\n   \"smallPassthrough\",\n  [\"text\",\"\\\\`\\\\`\"],\n  [\"support.function\",\"not\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"double\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"quoted\"],\n  [\"text\",\"''\"]\n],[\n   \"dissallowDelimitedBlock\"\n],[\n   \"text\"\n],[\n   \"start\",\n  [\"string.regexp\",\"[fffff]\"]\n],[\n   \"passthroughBlock\",\n  [\"string\",\"+++++++++++++++++++++++++++++++++++++\"]\n],[\n   \"passthroughBlock\",\n  [\"support.function\",\"(C) \"],\n  [\"constant.character\",\"{ss}\"],\n  [\"support.function\",\" ss\"]\n],[\n   \"dissallowDelimitedBlock\",\n  [\"support.function\",\"+++++++++++++++++++++++++++++++++++++\"]\n],[\n   \"text\"\n],[\n   \"listingBlock\",\n  [\"support.function\",\".............\"]\n],[\n   \"listingBlock\",\n  [\"support.function\",\"callout \"],\n  [\"constant.numeric\",\"<1>\"]\n],[\n   \"dissallowDelimitedBlock\",\n  [\"support.function\",\"..............\"]\n],[\n   \"text\"\n],[\n   \"text\",\n  [\"text\",\"> 1\"]\n],[\n   \"text\",\n  [\"text\",\"1> 2\"]\n],[\n   \"text\",\n  [\"text\",\"<2> 3\"]\n],[\n   \"start\"\n],[\n   \"text\",\n  [\"text\",\"Escaped:\"]\n],[\n   \"text\",\n  [\"constant.language.escape\",\"\\\\_\"],\n  [\"text\",\"italic_,\"]\n],[\n   \"text\",\n  [\"text\",\"t\"],\n  [\"constant.language.escape\",\"\\\\_\"],\n  [\"text\",\"_e\"],\n  [\"string.italic\",\"__st, o__\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"constant.numeric\",\".optional title\"]\n],[\n   \"listingBlock\",\n  [\"support.function\",\".............\"]\n],[\n   \"listingBlock\",\n  [\"support.function\",\"callout \"],\n  [\"constant.numeric\",\"<1>\"]\n],[\n   \"dissallowDelimitedBlock\",\n  [\"support.function\",\"..............\"]\n],[\n   \"text\"\n],[\n   \"start\"\n],[\n   \"text\",\n  [\"keyword\",\":macro:\"],\n  [\"text\",\" dddd\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"constant.numeric\",\".lists\"]\n],[\n   \"listText\",\n  [\"keyword\",\". \"],\n  [\"text\",\"1\"]\n],[\n   \"listText\",\n  [\"keyword\",\".. \"],\n  [\"text\",\"2\"]\n],[\n   \"listText\",\n  [\"keyword\",\"... \"],\n  [\"text\",\"d\"]\n],[\n   \"listText\",\n  [\"keyword\",\"..... \"],\n  [\"text\",\"big\"]\n],[\n   \"start\",\n  [\"keyword\",\"+\"]\n],[\n   \"text\",\n  [\"text\",\"continue\"],\n  [\"keyword\",\" +\"]\n],[\n   \"text\",\n  [\"text\",\"next line\"]\n],[\n   \"text\",\n  [\"text\",\"xi) no \"],\n  [\"support.function\",\"++la+tin++\"]\n],[\n   \"start\"\n],[\n   \"listText\",\n  [\"keyword\",\"xi) \"],\n  [\"text\",\"la\"],\n  [\"support.function\",\"++tin++\"]\n],[\n   \"listText\",\n  [\"keyword\",\"2. \"],\n  [\"text\",\"num\"],\n  [\"string.italic\",\"__ber__\"],\n  [\"text\",\"  [red]\"],\n  [\"keyword\",\"#\"],\n  [\"text\",\"red\"],\n  [\"keyword\",\"#\"]\n],[\n   \"start\",\n  [\"keyword\",\"--\"]\n],[\n   \"listText\",\n  [\"keyword\",\"  5. \"],\n  [\"text\",\"f \"],\n  [\"keyword\",\"<<x6,\"],\n  [\"string\",\"ssss\"],\n  [\"keyword\",\">>\"],\n  [\"text\",\" \"],\n  [\"constant.character\",\"{macro}\"]\n],[\n   \"start\",\n  [\"keyword\",\"--\"]\n],[\n   \"text\",\n  [\"markup.list.macro\",\"image::\"],\n  [\"keyword\",\"path\"],\n  [\"string\",\"[beauty]\"],\n  [\"text\",\" \"],\n  [\"constant.language.escape\",\"->\"],\n  [\"text\",\"--\"],\n  [\"constant.language.escape\",\"<= --\"],\n  [\"text\",\" replacements\"]\n],[\n   \"start\"\n],[\n   \"indentedBlock\",\n  [\"support.function\",\" image::s\"]\n],[\n   \"indentedBlock\",\n  [\"support.function\",\"sssss\"]\n],[\n   \"indentedBlock\",\n  [\"support.function\",\"sss \"]\n],[\n   \"indentedBlock\",\n  [\"support.function\",\"sssss\"]\n],[\n   \"start\"\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"markup.heading\",\"== 1\"]\n],[\n   \"indentedBlock\",\n  [\"support.function\",\"  heading\"]\n],[\n   \"start\",\n  [\"markup.heading\",\"=== not a heading\"]\n],[\n   \"start\",\n  [\"keyword\",\"====================================\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"==================================\"]\n],[\n   \"text\",\n  [\"text\",\"====4 \"]\n],[\n   \"text\",\n  [\"text\",\"NOTE: above\"]\n],[\n   \"start\"\n],[\n   \"text\",\n  [\"keyword\",\"NOTE:\"],\n  [\"text\",\" above\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"string.regexp\",\"[[x6]]\"]\n],[\n   \"text\",\n  [\"keyword\",\"WARNING:\"],\n  [\"text\",\" \"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"string.regexp\",\"[options[]]\"]\n],[\n   \"literalBlock\",\n  [\"support.function\",\"---------------------------\"]\n],[\n   \"literalBlock\",\n  [\"support.function\",\"literal\"]\n],[\n   \"dissallowDelimitedBlock\",\n  [\"support.function\",\"---------------------------\"]\n],[\n   \"text\"\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"markup.heading\",\"= Tables\"]\n],[\n   \"tableBlock\",\n  [\"doc.comment\",\"|====================================\"]\n],[\n   \"tableBlock\",\n  [\"doc.comment\",\"|\"],\n  [\"text\",\" \"],\n  [\"string.italic\",\"_italic_\"],\n  [\"text\",\" \"],\n  [\"doc.comment\",\"|\"],\n  [\"text\",\"  \"],\n  [\"keyword.bold\",\"*bold*\"],\n  [\"text\",\" \"],\n  [\"doc.comment\",\"|\"],\n  [\"text\",\" text \"],\n  [\"doc.comment\",\"|\"],\n  [\"text\",\" \"],\n  [\"constant.language.escape\",\"(R)\"]\n],[\n   \"tableBlock\"\n],[\n   \"dissallowDelimitedBlock\",\n  [\"doc.comment\",\"|====================================\"]\n],[\n   \"text\"\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"string.regexp\",\"[more, options]\"]\n],[\n   \"commentBlock\",\n  [\"doc.comment\",\"///////////\"]\n],[\n   \"commentBlock\",\n  [\"doc.comment\",\"comment\"]\n],[\n   \"dissallowDelimitedBlock\",\n  [\"doc.comment\",\"///////////\"]\n],[\n   \"text\",\n  [\"comment\",\"// one line comment\"]\n],[\n   \"start\"\n],[\n   \"start\"\n],[\n   \"start\"\n],[\n   \"text\",\n  [\"text\",\"[red]\"],\n  [\"keyword\",\"#\"],\n  [\"text\",\"red text\"],\n  [\"keyword\",\"#\"],\n  [\"text\",\" [yellow-background]\"],\n  [\"keyword\",\"#\"],\n  [\"text\",\"on yellow\"],\n  [\"keyword\",\"#\"]\n],[\n   \"text\",\n  [\"text\",\"[big]\"],\n  [\"keyword\",\"#\"],\n  [\"text\",\"large\"],\n  [\"keyword\",\"#\"],\n  [\"text\",\" [red yellow-background big]\"],\n  [\"keyword.bold\",\"*all bold*\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"\\t\"]\n],[\n   \"text\",\n  [\"markup.underline.list\",\"https://site\"],\n  [\"text\",\" text <\"],\n  [\"markup.underline.list\",\"mail@i.am\"],\n  [\"text\",\"> \"],\n  [\"markup.underline.list\",\"callto:ace\"],\n  [\"text\",\" \"],\n  [\"link\",\"http://ace.ajaxorg.com\"],\n  [\"variable.language\",\"[awesome]\"]\n],[\n   \"text\",\n  [\"text\",\"  .still normal text\"]\n],[\n   \"start\",\n  [\"constant.numeric\",\".break out thoug should not\"]\n],[\n   \"literalBlock\",\n  [\"support.function\",\"---------------------------\"]\n],[\n   \"literalBlock\",\n  [\"support.function\",\"///////////////////////////\"]\n],[\n   \"dissallowDelimitedBlock\",\n  [\"support.function\",\"---------------------------\"]\n],[\n   \"text\"\n],[\n   \"start\"\n],[\n   \"start\"\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_assembly_x86.json",
    "content": "[[\n   \"start\",\n  [\"support.function.directive.assembly\",\"section\"],\n  [\"text\",\"\\t.text\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"support.function.directive.assembly\",\"global\"],\n  [\"text\",\" \"],\n  [\"entity.name.function.assembly\",\"main\"],\n  [\"text\",\"         \"],\n  [\"comment.assembly\",\";must be declared for using gcc\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"entity.name.function.assembly\",\"main:\"],\n  [\"text\",\"\\t                \"],\n  [\"comment.assembly\",\";tell linker entry point\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"keyword.control.assembly\",\"mov\"],\n  [\"text\",\"\\t\"],\n  [\"variable.parameter.register.assembly\",\"edx\"],\n  [\"text\",\", len\\t    \"],\n  [\"comment.assembly\",\";message length\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"keyword.control.assembly\",\"mov\"],\n  [\"text\",\"\\t\"],\n  [\"variable.parameter.register.assembly\",\"ecx\"],\n  [\"text\",\", msg\\t    \"],\n  [\"comment.assembly\",\";message to write\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"keyword.control.assembly\",\"mov\"],\n  [\"text\",\"\\t\"],\n  [\"variable.parameter.register.assembly\",\"ebx\"],\n  [\"text\",\", \"],\n  [\"constant.character.decimal.assembly\",\"1\"],\n  [\"text\",\"\\t        \"],\n  [\"comment.assembly\",\";file descriptor (stdout)\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"keyword.control.assembly\",\"mov\"],\n  [\"text\",\"\\t\"],\n  [\"variable.parameter.register.assembly\",\"eax\"],\n  [\"text\",\", \"],\n  [\"constant.character.decimal.assembly\",\"4\"],\n  [\"text\",\"\\t        \"],\n  [\"comment.assembly\",\";system call number (sys_write)\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"keyword.control.assembly\",\"int\"],\n  [\"text\",\"\\t\"],\n  [\"constant.character.hexadecimal.assembly\",\"0x80\"],\n  [\"text\",\"\\t        \"],\n  [\"comment.assembly\",\";call kernel\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"keyword.control.assembly\",\"mov\"],\n  [\"text\",\"\\t\"],\n  [\"variable.parameter.register.assembly\",\"eax\"],\n  [\"text\",\", \"],\n  [\"constant.character.decimal.assembly\",\"1\"],\n  [\"text\",\"\\t        \"],\n  [\"comment.assembly\",\";system call number (sys_exit)\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"keyword.control.assembly\",\"int\"],\n  [\"text\",\"\\t\"],\n  [\"constant.character.hexadecimal.assembly\",\"0x80\"],\n  [\"text\",\"\\t        \"],\n  [\"comment.assembly\",\";call kernel\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"support.function.directive.assembly\",\"section\"],\n  [\"text\",\"\\t.data\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"entity.name.function.assembly\",\"msg\"],\n  [\"text\",\"\\t\"],\n  [\"support.function.directive.assembly\",\"db\"],\n  [\"text\",\"\\t\"],\n  [\"string.assembly\",\"'Hello, world!'\"],\n  [\"text\",\",\"],\n  [\"constant.character.hexadecimal.assembly\",\"0xa\"],\n  [\"text\",\"\\t\"],\n  [\"comment.assembly\",\";our dear string\"]\n],[\n   \"start\",\n  [\"entity.name.function.assembly\",\"len\"],\n  [\"text\",\"\\t\"],\n  [\"support.function.directive.assembly\",\"equ\"],\n  [\"text\",\"\\t$ - msg\\t\\t\\t\"],\n  [\"comment.assembly\",\";length of our dear string\"]\n],[\n   \"start\"\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_autohotkey.json",
    "content": "[[\n   \"start\",\n  [\"punctuation.ahk\",\"#\"],\n  [\"keyword.command.ahk\",\"NoEnv\"]\n],[\n   \"start\",\n  [\"keyword.command.ahk\",\"SetBatchLines\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"-1\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword.command.ahk\",\"CoordMode\"],\n  [\"text\",\" \"],\n  [\"variable.parameter\",\"Mouse\"],\n  [\"punctuation.ahk\",\",\"],\n  [\"text\",\" \"],\n  [\"variable.parameter\",\"Screen\"]\n],[\n   \"start\",\n  [\"keyword.command.ahk\",\"OnExit\"],\n  [\"text\",\" \"],\n  [\"variable.parameter\",\"GuiClose\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"zoom \"],\n  [\"keyword.operator.ahk\",\":=\"],\n  [\"text\",\" 9\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"computeSize\"],\n  [\"punctuation.ahk\",\"(){\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"keyword.control.ahk\",\"global\"],\n  [\"text\",\" as_x\"]\n],[\n   \"start\",\n  [\"text\",\"\\tas_x \"],\n  [\"keyword.operator.ahk\",\":=\"],\n  [\"text\",\" \"],\n  [\"support.function.ahk\",\"Round\"],\n  [\"punctuation.ahk\",\"(\"],\n  [\"text\",\"ws_x\"],\n  [\"keyword.operator.ahk\",\"/\"],\n  [\"text\",\"zoom\"],\n  [\"keyword.operator.ahk\",\"/\"],\n  [\"text\",\"2 \"],\n  [\"keyword.operator.ahk\",\"-\"],\n  [\"text\",\" 0.5\"],\n  [\"punctuation.ahk\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"keyword.control.ahk\",\"if\"],\n  [\"text\",\" \"],\n  [\"punctuation.ahk\",\"(\"],\n  [\"text\",\"zoom\"],\n  [\"keyword.operator.ahk\",\">\"],\n  [\"text\",\"1\"],\n  [\"punctuation.ahk\",\")\"],\n  [\"text\",\" \"],\n  [\"punctuation.ahk\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\tpix \"],\n  [\"keyword.operator.ahk\",\":=\"],\n  [\"text\",\" \"],\n  [\"support.function.ahk\",\"Round\"],\n  [\"punctuation.ahk\",\"(\"],\n  [\"text\",\"zoom\"],\n  [\"punctuation.ahk\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"punctuation.ahk\",\"}\"],\n  [\"text\",\" ele \"],\n  [\"punctuation.ahk\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\tpix \"],\n  [\"keyword.operator.ahk\",\":=\"],\n  [\"text\",\" 1\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"punctuation.ahk\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword.command.ahk\",\"ToolTip\"],\n  [\"text\",\" Message \"],\n  [\"punctuation.ahk\",\"%\"],\n  [\"text\",\"as_x\"],\n  [\"punctuation.ahk\",\"%\"],\n  [\"text\",\" \"],\n  [\"punctuation.ahk\",\"%\"],\n  [\"text\",\"zoom\"],\n  [\"punctuation.ahk\",\"%\"],\n  [\"text\",\" \"],\n  [\"punctuation.ahk\",\"%\"],\n  [\"text\",\"ws_x\"],\n  [\"punctuation.ahk\",\"%\"],\n  [\"text\",\" \"],\n  [\"punctuation.ahk\",\"%\"],\n  [\"text\",\"hws_x\"],\n  [\"punctuation.ahk\",\"%\"],\n  [\"text\",\" \"]\n],[\n   \"start\",\n  [\"punctuation.ahk\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"hdc_frame \"],\n  [\"keyword.operator.ahk\",\":=\"],\n  [\"text\",\" \"],\n  [\"support.function.ahk\",\"DllCall\"],\n  [\"punctuation.ahk\",\"(\"],\n  [\"punctuation.quote.double\",\"\\\"\"],\n  [\"string.quoted.ahk\",\"GetDC\"],\n  [\"punctuation.quote.double\",\"\\\"\"],\n  [\"punctuation.ahk\",\",\"],\n  [\"text\",\" UInt\"],\n  [\"punctuation.ahk\",\",\"],\n  [\"text\",\" MagnifierID\"],\n  [\"punctuation.ahk\",\")\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"comment.line.ahk\",\"; comment\"]\n],[\n   \"start\",\n  [\"text\",\"DrawCross\"],\n  [\"punctuation.ahk\",\"(\"],\n  [\"keyword.control.ahk\",\"byRef\"],\n  [\"text\",\" x\"],\n  [\"keyword.operator.ahk\",\"=\"],\n  [\"punctuation.quote.double\",\"\\\"\"],\n  [\"punctuation.quote.double\",\"\\\"\"],\n  [\"punctuation.ahk\",\",\"],\n  [\"text\",\" rX\"],\n  [\"punctuation.ahk\",\",\"],\n  [\"text\",\"rY\"],\n  [\"punctuation.ahk\",\",\"],\n  [\"text\",\"z\"],\n  [\"punctuation.ahk\",\",\"],\n  [\"text\",\" dc\"],\n  [\"punctuation.ahk\",\"){\"]\n],[\n   \"start\",\n  [\"text\",\"       \"],\n  [\"comment.line.ahk\",\" ;specify the style, thickness and color of the cross lines\"]\n],[\n   \"start\",\n  [\"text\",\"    h_pen \"],\n  [\"keyword.operator.ahk\",\":=\"],\n  [\"text\",\" \"],\n  [\"support.function.ahk\",\"DllCall\"],\n  [\"punctuation.ahk\",\"(\"],\n  [\"text\",\" \"],\n  [\"punctuation.quote.double\",\"\\\"\"],\n  [\"string.quoted.ahk\",\"gdi32.dll\\\\CreatePen\"],\n  [\"punctuation.quote.double\",\"\\\"\"],\n  [\"punctuation.ahk\",\",\"],\n  [\"text\",\" \"],\n  [\"constant.language\",\"Int\"],\n  [\"punctuation.ahk\",\",\"],\n  [\"text\",\" 0\"],\n  [\"punctuation.ahk\",\",\"],\n  [\"text\",\" \"],\n  [\"constant.language\",\"Int\"],\n  [\"punctuation.ahk\",\",\"],\n  [\"text\",\" 1\"],\n  [\"punctuation.ahk\",\",\"],\n  [\"text\",\" UInt\"],\n  [\"punctuation.ahk\",\",\"],\n  [\"text\",\" 0x0000FF\"],\n  [\"punctuation.ahk\",\")\"]\n],[\n   \"start\",\n  [\"punctuation.ahk\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"comment.line.ahk\",\";Ctrl ^; Shift +; Win #; Alt !\"]\n],[\n   \"start\",\n  [\"text\",\"^\"],\n  [\"support.constant.ahk\",\"NumPadAdd\"],\n  [\"keyword.operator.ahk\",\"::\"]\n],[\n   \"start\",\n  [\"text\",\"^\"],\n  [\"support.constant.ahk\",\"WheelUp\"],\n  [\"keyword.operator.ahk\",\"::\"],\n  [\"text\",\"   \"]\n],[\n   \"start\",\n  [\"text\",\"^;\"],\n  [\"keyword.operator.ahk\",\"::\"],\n  [\"text\",\"  \"],\n  [\"comment.line.ahk\",\" ;comment\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword.control.ahk\",\"If\"],\n  [\"punctuation.ahk\",\"(\"],\n  [\"text\",\"zoom \"],\n  [\"keyword.operator.ahk\",\"<\"],\n  [\"text\",\" ws_x \"],\n  [\"variable.parameter\",\"and\"],\n  [\"text\",\" \"],\n  [\"punctuation.ahk\",\"(\"],\n  [\"text\",\" \"],\n  [\"variable.predefined.ahk\",\"A_ThisHotKey\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.ahk\",\"=\"],\n  [\"text\",\" \"],\n  [\"punctuation.quote.double\",\"\\\"\"],\n  [\"string.quoted.ahk\",\"^WheelUp\"],\n  [\"punctuation.quote.double\",\"\\\"\"],\n  [\"text\",\" \"],\n  [\"variable.parameter\",\"or\"],\n  [\"text\",\" \"],\n  [\"variable.predefined.ahk\",\"A_ThisHotKey\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.ahk\",\"=\"],\n  [\"punctuation.quote.double\",\"\\\"\"],\n  [\"string.quoted.ahk\",\"^NumPadAdd\"],\n  [\"punctuation.quote.double\",\"\\\"\"],\n  [\"punctuation.ahk\",\")\"],\n  [\"text\",\" \"],\n  [\"punctuation.ahk\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\tzoom \"],\n  [\"keyword.operator.ahk\",\"*=\"],\n  [\"text\",\" 1.189207115        \"],\n  [\"comment.line.ahk\",\" ; sqrt(sqrt(2))\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"keyword.command.ahk\",\"Gosub\"],\n  [\"punctuation.ahk\",\",\"],\n  [\"text\",\"setZoom\"]\n],[\n   \"start\",\n  [\"keyword.control.ahk\",\"return\"]\n],[\n   \"start\"\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_batchfile.json",
    "content": "[[\n   \"start\",\n  [\"comment.line.colons.dosbatch\",\":: batch file highlighting in Ace!\"]\n],[\n   \"start\",\n  [\"text\",\"@\"],\n  [\"keyword.command.dosbatch\",\"echo\"],\n  [\"text\",\" off\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword.control.statement.dosbatch\",\"CALL\"],\n  [\"text\",\" \"],\n  [\"keyword.command.dosbatch\",\"set\"],\n  [\"text\",\" var1=\"],\n  [\"constant.numeric\",\"%cd%\"]\n],[\n   \"start\",\n  [\"keyword.command.dosbatch\",\"echo\"],\n  [\"text\",\" unhide everything in \"],\n  [\"constant.numeric\",\"%var1%\"],\n  [\"text\",\"!\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"comment.line.colons.dosbatch\",\":: FOR loop in bat is super strange!\"]\n],[\n   \"start\",\n  [\"keyword.control.repeat.dosbatch\",\"FOR\"],\n  [\"text\",\" /f \"],\n  [\"punctuation.definition.string.begin.shell\",\"\\\"\"],\n  [\"string.quoted.double.dosbatch\",\"tokens=*\"],\n  [\"punctuation.definition.string.end.shell\",\"\\\"\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"%%G\"],\n  [\"text\",\" IN ('\"],\n  [\"keyword.command.dosbatch\",\"dir\"],\n  [\"text\",\" /A:D /b') DO (\"]\n],[\n   \"start\",\n  [\"keyword.command.dosbatch\",\"echo\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"%var1%%%G\"]\n],[\n   \"start\",\n  [\"keyword.command.dosbatch\",\"attrib\"],\n  [\"text\",\" -r -a -h -s \"],\n  [\"punctuation.definition.string.begin.shell\",\"\\\"\"],\n  [\"constant.numeric\",\"%var1%%%G\"],\n  [\"punctuation.definition.string.end.shell\",\"\\\"\"],\n  [\"text\",\" /D /S\"]\n],[\n   \"start\",\n  [\"text\",\")\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword.command.dosbatch\",\"pause\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"doc.comment\",\"REM\"],\n  [\"comment\",\" that's all\"]\n],[\n   \"start\"\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_c9search.json",
    "content": "[[\n   [\"start\",{}],\n  [\"text\",\"Searching for '\"],\n  [\"text\",\"var\"],\n  [\"text\",\"' in\"],\n  [\"text\",\" /.c9/metadata/workspace/plugins \"],\n  [\"text\",\"(regexp, case sensitive, whole word)\"],\n  \"Searching for \\u0001var\\u0001 in\\u0001/.c9/metadata/workspace/plugins\\u0001\\u0001regexp, case sensitive, whole word\\u0001\"\n],[\n   [\"start\",{}]\n],[\n   [\"start\",{}],\n  [\"string\",\"configs/default.js\"],\n  [\"text\",\":\"]\n],[\n   [\"start\",{}],\n  [\"c9searchresults.constant.numeric\",\"    1\"],\n  [\"c9searchresults.text\",\": \"],\n  [\"c9searchresults.keyword\",\"var\"],\n  [\"c9searchresults.text\",\" fs = require(\\\"fs\\\");\"]\n],[\n   [\"start\",{}],\n  [\"c9searchresults.constant.numeric\",\"\\t2\"],\n  [\"c9searchresults.text\",\": \"],\n  [\"c9searchresults.keyword\",\"var\"],\n  [\"c9searchresults.text\",\" argv = require('optimist').argv;\"]\n],[\n   [\"start\",{}],\n  [\"c9searchresults.constant.numeric\",\"\\t3\"],\n  [\"c9searchresults.text\",\": \"],\n  [\"c9searchresults.keyword\",\"var\"],\n  [\"c9searchresults.text\",\" path = require(\\\"path\\\");\"]\n],[\n   [\"start\",{}],\n  [\"c9searchresults.constant.numeric\",\"\\t5\"],\n  [\"c9searchresults.text\",\": \"],\n  [\"c9searchresults.keyword\",\"var\"],\n  [\"c9searchresults.text\",\" clientExtensions = {};\"]\n],[\n   [\"start\",{}],\n  [\"c9searchresults.constant.numeric\",\"\\t6\"],\n  [\"c9searchresults.text\",\": \"],\n  [\"c9searchresults.keyword\",\"var\"],\n  [\"c9searchresults.text\",\" clientDirs = fs.readdirSync(__dirname + \\\"/../plugins-client\\\");\"]\n],[\n   [\"start\",{}],\n  [\"c9searchresults.constant.numeric\",\"\\t7\"],\n  [\"c9searchresults.text\",\": \"],\n  [\"c9searchresults.text\",\"for (\"],\n  [\"c9searchresults.keyword\",\"var\"],\n  [\"c9searchresults.text\",\" i = 0; i < clientDirs.length; i++) {\"]\n],[\n   [\"start\",{}],\n  [\"c9searchresults.constant.numeric\",\"\\t8\"],\n  [\"c9searchresults.text\",\": \"],\n  [\"c9searchresults.text\",\"    \"],\n  [\"c9searchresults.keyword\",\"var\"],\n  [\"c9searchresults.text\",\" dir = clientDirs[i];\"]\n],[\n   [\"start\",{}],\n  [\"c9searchresults.constant.numeric\",\"\\t12\"],\n  [\"c9searchresults.text\",\": \"],\n  [\"c9searchresults.text\",\"    \"],\n  [\"c9searchresults.keyword\",\"var\"],\n  [\"c9searchresults.text\",\" name = dir.split(\\\".\\\")[1];\"]\n],[\n   [\"start\",{}],\n  [\"c9searchresults.constant.numeric\",\"\\t16\"],\n  [\"c9searchresults.text\",\": \"],\n  [\"c9searchresults.keyword\",\"var\"],\n  [\"c9searchresults.text\",\" projectDir = (argv.w && path.resolve(process.cwd(), argv.w)) || process.cwd();\"]\n],[\n   [\"start\",{}],\n  [\"c9searchresults.constant.numeric\",\"\\t17\"],\n  [\"c9searchresults.text\",\": \"],\n  [\"c9searchresults.keyword\",\"var\"],\n  [\"c9searchresults.text\",\" fsUrl = \\\"/workspace\\\";\"]\n],[\n   [\"start\",{}],\n  [\"c9searchresults.constant.numeric\",\"\\t19\"],\n  [\"c9searchresults.text\",\": \"],\n  [\"c9searchresults.keyword\",\"var\"],\n  [\"c9searchresults.text\",\" port = argv.p || process.env.PORT || 3131;\"]\n],[\n   [\"start\",{}],\n  [\"c9searchresults.constant.numeric\",\"\\t20\"],\n  [\"c9searchresults.text\",\": \"],\n  [\"c9searchresults.keyword\",\"var\"],\n  [\"c9searchresults.text\",\" host = argv.l || \\\"localhost\\\";\"]\n],[\n   [\"start\",{}],\n  [\"c9searchresults.constant.numeric\",\"\\t22\"],\n  [\"c9searchresults.text\",\": \"],\n  [\"c9searchresults.keyword\",\"var\"],\n  [\"c9searchresults.text\",\" config = {\"]\n],[\n   [\"start\",{}]\n],[\n   [\"start\",{}],\n  [\"string\",\"configs/local.js\"],\n  [\"text\",\":\"]\n],[\n   [\"start\",{}],\n  [\"c9searchresults.constant.numeric\",\"\\t2\"],\n  [\"c9searchresults.text\",\": \"],\n  [\"c9searchresults.keyword\",\"var\"],\n  [\"c9searchresults.text\",\" config = require(\\\"./default\\\");\"]\n],[\n   [\"start\",{}]\n],[\n   [\"start\",{}],\n  [\"string\",\"configs/packed.js\"],\n  [\"text\",\":\"]\n],[\n   [\"start\",{}],\n  [\"c9searchresults.constant.numeric\",\"\\t1\"],\n  [\"c9searchresults.text\",\": \"],\n  [\"c9searchresults.keyword\",\"var\"],\n  [\"c9searchresults.text\",\" config = require(\\\"./default\\\");\"]\n],[\n   [\"start\",{}]\n],[\n   [\"start\",{}]\n],[\n   [\"start\",{}],\n  [\"text\",\"Found \"],\n  [\"constant.numeric\",\"15\"],\n  [\"text\",\" matches in \"],\n  [\"constant.numeric\",\"3\"],\n  [\"text\",\" files\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_c_cpp.json",
    "content": "[[\n   \"start\",\n  [\"comment\",\"// compound assignment operators\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"#include\"],\n  [\"constant.other\",\" <iostream>\"]\n],[\n   \"start\"\n],[\n   \"directive\",\n  [\"keyword\",\"#include\"],\n  [\"constant.other.multiline\",\" \\\\\"]\n],[\n   \"start\",\n  [\"constant.other\",\"   <iostream>\"]\n],[\n   \"start\"\n],[\n   \"directive\",\n  [\"keyword\",\"#include\"],\n  [\"constant.other.multiline\",\" \\\\\"]\n],[\n   \"directive\",\n  [\"constant.other.multiline\",\"   \\\\\"]\n],[\n   \"start\",\n  [\"constant.other\",\"   <iostream>\"]\n],[\n   \"start\"\n],[\n   \"directive\",\n  [\"keyword\",\"#include\"],\n  [\"constant.other.multiline\",\" \\\\\"]\n],[\n   \"directive\",\n  [\"constant.other.multiline\",\"   \\\\\"]\n],[\n   \"start\",\n  [\"constant.other\",\"   \\\"iostream\\\"\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"#include\"],\n  [\"constant.other\",\" <boost/asio/io_service.hpp>\"]\n],[\n   \"start\",\n  [\"keyword\",\"#include\"],\n  [\"constant.other\",\" \\\"boost/asio/io_service.hpp\\\"\"]\n],[\n   \"start\"\n],[\n   \"directive\",\n  [\"keyword\",\"#include\"],\n  [\"constant.other.multiline\",\" \\\\\"]\n],[\n   \"directive\",\n  [\"constant.other.multiline\",\"   \\\\\"]\n],[\n   \"directive\",\n  [\"constant.other.multiline\",\"   \\\"iostream\\\" \\\\\"]\n],[\n   \"directive\",\n  [\"constant.other.multiline\",\"   \\\"string\\\" \\\\\"]\n],[\n   \"start\",\n  [\"constant.other\",\"   <vector>\"]\n],[\n   \"start\",\n  [\"text\",\"   \"]\n],[\n   \"start\",\n  [\"keyword.control\",\"using\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"namespace\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"std\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"comment\",\"//\"]\n],[\n   \"start\",\n  [\"storage.type\",\"int\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"main\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"storage.type\",\"int\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"a\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"b\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"3\"],\n  [\"punctuation.operator\",\";\"],\n  [\"text\",\" \"],\n  [\"comment\",\"/* foobar */\"]\n],[\n   \"singleLineComment\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"a\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"b\"],\n  [\"punctuation.operator\",\";\"],\n  [\"text\",\" \"],\n  [\"comment\",\"// single line comment\\\\\"]\n],[\n   \"start\",\n  [\"comment\",\"        continued\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"a\"],\n  [\"keyword.operator\",\"+=\"],\n  [\"constant.numeric\",\"2\"],\n  [\"punctuation.operator\",\";\"],\n  [\"text\",\" \"],\n  [\"comment\",\"// equivalent to a=a+2\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"cout\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"<<\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"a\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"#if\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"VERBOSE\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\">=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"2\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"identifier\",\"prints\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string.start\",\"\\\"\"],\n  [\"string\",\"trace message\"],\n  [\"constant.language.escape\",\"\\\\n\"],\n  [\"string.end\",\"\\\"\"],\n  [\"paren.rparen\",\")\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"#endif\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword.control\",\"return\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"comment\",\"/* Print an error message and get out */\"]\n],[\n   \"directive\",\n  [\"keyword\",\"#define\"],\n  [\"constant.other.multiline\",\" ABORT                             \\\\\"]\n],[\n   \"directive\",\n  [\"constant.other.multiline\",\"    do {                                  \\\\\"]\n],[\n   \"directive\",\n  [\"constant.other.multiline\",\"        print( \\\"Abort\\\\n\\\" );                \\\\\"]\n],[\n   \"directive\",\n  [\"constant.other.multiline\",\"        exit(8);                          \\\\\"]\n],[\n   \"start\",\n  [\"constant.other\",\"} while (0)                      \"],\n  [\"comment\",\"/* Note: No semicolon */\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_cirru.json",
    "content": "[[\n   \"start\",\n  [\"comment.line.double-dash\",\"-- https://github.com/Cirru/cirru-gopher/blob/master/code/scope.cr,\"]\n],[\n   \"start\"\n],[\n   \"line\",\n  [\"support.function\",\"set\"],\n  [\"text\",\" \"],\n  [\"variable.parameter\",\"a\"],\n  [\"text\",\" \"],\n  [\"storage.modifier\",\"(\"],\n  [\"support.function\",\"int\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"2\"],\n  [\"storage.modifier\",\")\"]\n],[\n   \"start\"\n],[\n   \"line\",\n  [\"support.function\",\"print\"],\n  [\"text\",\" \"],\n  [\"storage.modifier\",\"(\"],\n  [\"support.function\",\"self\"],\n  [\"storage.modifier\",\")\"]\n],[\n   \"start\"\n],[\n   \"line\",\n  [\"support.function\",\"set\"],\n  [\"text\",\" \"],\n  [\"variable.parameter\",\"c\"],\n  [\"text\",\" \"],\n  [\"storage.modifier\",\"(\"],\n  [\"support.function\",\"child\"],\n  [\"storage.modifier\",\")\"]\n],[\n   \"start\"\n],[\n   \"line\",\n  [\"support.function\",\"under\"],\n  [\"text\",\" \"],\n  [\"variable.parameter\",\"c\"]\n],[\n   \"line\",\n  [\"markup.raw\",\"  \"],\n  [\"support.function\",\"under\"],\n  [\"text\",\" \"],\n  [\"variable.parameter\",\"parent\"]\n],[\n   \"line\",\n  [\"markup.raw\",\"    \"],\n  [\"support.function\",\"print\"],\n  [\"text\",\" \"],\n  [\"variable.parameter\",\"a\"]\n],[\n   \"start\"\n],[\n   \"line\",\n  [\"support.function\",\"print\"],\n  [\"text\",\" \"],\n  [\"storage.modifier\",\"$\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"get\"],\n  [\"text\",\" \"],\n  [\"variable.parameter\",\"c\"],\n  [\"text\",\" \"],\n  [\"variable.parameter\",\"a\"]\n],[\n   \"start\"\n],[\n   \"line\",\n  [\"support.function\",\"set\"],\n  [\"text\",\" \"],\n  [\"variable.parameter\",\"c\"],\n  [\"text\",\" \"],\n  [\"variable.parameter\",\"x\"],\n  [\"text\",\" \"],\n  [\"storage.modifier\",\"(\"],\n  [\"support.function\",\"int\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"3\"],\n  [\"storage.modifier\",\")\"]\n],[\n   \"line\",\n  [\"support.function\",\"print\"],\n  [\"text\",\" \"],\n  [\"storage.modifier\",\"$\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"get\"],\n  [\"text\",\" \"],\n  [\"variable.parameter\",\"c\"],\n  [\"text\",\" \"],\n  [\"variable.parameter\",\"x\"]\n],[\n   \"start\"\n],[\n   \"line\",\n  [\"support.function\",\"set\"],\n  [\"text\",\" \"],\n  [\"variable.parameter\",\"just-print\"],\n  [\"text\",\" \"],\n  [\"storage.modifier\",\"$\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"code\"]\n],[\n   \"line\",\n  [\"markup.raw\",\"  \"],\n  [\"support.function\",\"print\"],\n  [\"text\",\" \"],\n  [\"variable.parameter\",\"a\"]\n],[\n   \"start\"\n],[\n   \"line\",\n  [\"support.function\",\"print\"],\n  [\"text\",\" \"],\n  [\"variable.parameter\",\"just-print\"]\n],[\n   \"start\"\n],[\n   \"line\",\n  [\"support.function\",\"eval\"],\n  [\"text\",\" \"],\n  [\"storage.modifier\",\"(\"],\n  [\"support.function\",\"self\"],\n  [\"storage.modifier\",\")\"],\n  [\"text\",\" \"],\n  [\"variable.parameter\",\"just-print\"]\n],[\n   \"line\",\n  [\"support.function\",\"eval\"],\n  [\"text\",\" \"],\n  [\"variable.parameter\",\"just-print\"]\n],[\n   \"start\"\n],[\n   \"line\",\n  [\"support.function\",\"print\"],\n  [\"text\",\" \"],\n  [\"storage.modifier\",\"(\"],\n  [\"support.function\",\"string\"],\n  [\"text\",\" \"],\n  [\"string.quoted.double\",\"\\\"string with space\\\"\"],\n  [\"storage.modifier\",\")\"]\n],[\n   \"line\",\n  [\"support.function\",\"print\"],\n  [\"text\",\" \"],\n  [\"storage.modifier\",\"(\"],\n  [\"support.function\",\"string\"],\n  [\"text\",\" \"],\n  [\"string.quoted.double\",\"\\\"escapes \"],\n  [\"constant.character.escape\",\"\\\\n\"],\n  [\"string.quoted.double\",\" \"],\n  [\"constant.character.escape\",\"\\\\\\\"\\\\\\\\\"],\n  [\"string.quoted.double\",\"\\\"\"],\n  [\"storage.modifier\",\")\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"support.function\",\"brackets\"],\n  [\"text\",\" \"],\n  [\"storage.modifier\",\"((((()))))\"]\n],[\n   \"start\"\n],[\n   \"line\",\n  [\"string.quoted.double\",\"\\\"eval\\\"\"],\n  [\"text\",\" \"],\n  [\"storage.modifier\",\"$\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"string\"],\n  [\"text\",\" \"],\n  [\"string.quoted.double\",\"\\\"eval\\\"\"]\n],[\n   \"start\"\n],[\n   \"line\",\n  [\"support.function\",\"print\"],\n  [\"text\",\" \"],\n  [\"storage.modifier\",\"(\"],\n  [\"support.function\",\"add\"],\n  [\"text\",\" \"],\n  [\"storage.modifier\",\"$\"],\n  [\"text\",\" \"],\n  [\"storage.modifier\",\"(\"],\n  [\"support.function\",\"int\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"],\n  [\"storage.modifier\",\")\"],\n  [\"text\",\" \"],\n  [\"storage.modifier\",\"(\"],\n  [\"support.function\",\"int\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"2\"],\n  [\"storage.modifier\",\"))\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"support.function\",\"print\"],\n  [\"text\",\" \"],\n  [\"storage.modifier\",\"$\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"unwrap\"],\n  [\"text\",\" \"],\n  [\"storage.modifier\",\"$\"]\n],[\n   \"line\",\n  [\"text\",\"  \"],\n  [\"support.function\",\"map\"],\n  [\"text\",\" \"],\n  [\"storage.modifier\",\"(\"],\n  [\"support.function\",\"a\"],\n  [\"text\",\" \"],\n  [\"storage.modifier\",\"$\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"int\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"],\n  [\"storage.modifier\",\")\"],\n  [\"text\",\" \"],\n  [\"storage.modifier\",\"(\"],\n  [\"support.function\",\"b\"],\n  [\"text\",\" \"],\n  [\"storage.modifier\",\"$\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"int\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"2\"],\n  [\"storage.modifier\",\")\"]\n],[\n   \"start\"\n],[\n   \"line\",\n  [\"support.function\",\"print\"],\n  [\"text\",\" \"],\n  [\"variable.parameter\",\"a\"]\n],[\n   \"line\",\n  [\"markup.raw\",\"  \"],\n  [\"support.function\",\"int\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"]\n],[\n   \"line\",\n  [\"markup.raw\",\"  \"],\n  [\"storage.modifier\",\",\"],\n  [\"text\",\" \"],\n  [\"variable.parameter\",\"b\"],\n  [\"text\",\" \"],\n  [\"variable.parameter\",\"c\"]\n],[\n   \"line\",\n  [\"markup.raw\",\"  \"],\n  [\"support.function\",\"int\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"2\"]\n],[\n   \"line\",\n  [\"markup.raw\",\"  \"],\n  [\"storage.modifier\",\",\"],\n  [\"text\",\" \"],\n  [\"variable.parameter\",\"d\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_clojure.json",
    "content": "[[\n   \"start\",\n  [\"keyword\",\"(\"],\n  [\"support.function\",\"defn\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"parting\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"string\",\"\\\"returns a String parting in a given language\\\"\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"([]\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"(\"],\n  [\"identifier\",\"parting\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"World\\\"\"],\n  [\"keyword\",\"))\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"([\"],\n  [\"support.function\",\"name\"],\n  [\"keyword\",\"]\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"(\"],\n  [\"identifier\",\"parting\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"name\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"en\\\"\"],\n  [\"keyword\",\"))\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"([\"],\n  [\"support.function\",\"name\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"language\"],\n  [\"keyword\",\"]\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"comment\",\"; condp is similar to a case statement in other languages.\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"comment\",\"; It is described in more detail later.\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"comment\",\"; It is used here to take different actions based on whether the\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"comment\",\"; parameter \\\"language\\\" is set to \\\"en\\\", \\\"es\\\" or something else.\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"(\"],\n  [\"support.function\",\"condp\"],\n  [\"text\",\" \"],\n  [\"constant.language\",\"=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"language\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"string\",\"\\\"en\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"(\"],\n  [\"support.function\",\"str\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"Goodbye, \\\"\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"name\"],\n  [\"keyword\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"string\",\"\\\"es\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"(\"],\n  [\"support.function\",\"str\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"Adios, \\\"\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"name\"],\n  [\"keyword\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"keyword\",\"(throw\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"(\"],\n  [\"identifier\",\"IllegalArgumentException\"],\n  [\"text\",\".\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"keyword\",\"(\"],\n  [\"support.function\",\"str\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"unsupported language \\\"\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"language\"],\n  [\"keyword\",\"))))))\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"(\"],\n  [\"support.function\",\"println\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"(\"],\n  [\"identifier\",\"parting\"],\n  [\"keyword\",\"))\"],\n  [\"text\",\" \"],\n  [\"comment\",\"; -> Goodbye, World\"]\n],[\n   \"start\",\n  [\"keyword\",\"(\"],\n  [\"support.function\",\"println\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"(\"],\n  [\"identifier\",\"parting\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"Mark\\\"\"],\n  [\"keyword\",\"))\"],\n  [\"text\",\" \"],\n  [\"comment\",\"; -> Goodbye, Mark\"]\n],[\n   \"start\",\n  [\"keyword\",\"(\"],\n  [\"support.function\",\"println\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"(\"],\n  [\"identifier\",\"parting\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"Mark\\\"\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"es\\\"\"],\n  [\"keyword\",\"))\"],\n  [\"text\",\" \"],\n  [\"comment\",\"; -> Adios, Mark\"]\n],[\n   \"start\",\n  [\"keyword\",\"(\"],\n  [\"support.function\",\"println\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"(\"],\n  [\"identifier\",\"parting\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"Mark\\\"\"],\n  [\"text\",\", \"],\n  [\"string\",\"\\\"xy\\\"\"],\n  [\"keyword\",\"))\"],\n  [\"text\",\" \"],\n  [\"comment\",\"; -> java.lang.IllegalArgumentException: unsupported language xy\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_cobol.json",
    "content": "[[\n   \"start\",\n  [\"identifier\",\"TODO\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_coffee.json",
    "content": "[[\n   \"start\",\n  [\"comment\",\"#test: tokenize keyword\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"for\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"i\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\"..\"],\n  [\"constant.numeric\",\"2\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"comment\",\"#test: tokenize regexp\"]\n],[\n   \"start\",\n  [\"string.regex\",\"/\\\"[a]/\"]\n],[\n   \"start\",\n  [\"comment\",\"#test: tokenize functions\"]\n],[\n   \"start\",\n  [\"entity.name.function\",\"foo\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable.parameter\",\"{args}\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"storage.type\",\"->\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"entity.name.function\",\"foo\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable.parameter\",\"{a1, a2}\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"storage.type\",\"->\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"entity.name.function\",\"foo\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable.parameter\",\"{@a1, a2}\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"storage.type\",\"->\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"entity.name.function\",\"foo\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\":\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable.parameter\",\"{args}\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"storage.type\",\"->\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"entity.name.function\",\"foo\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable.parameter\",\"{args}\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"storage.type\",\"->\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"entity.name.function\",\"foo\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable.parameter\",\"{0abc}\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"storage.type\",\"->\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"foo\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren\",\"{\"],\n  [\"keyword.operator\",\"/\"],\n  [\"identifier\",\"abc\"],\n  [\"paren\",\"}\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"storage.type\",\"=>\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"foo\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren\",\"{\"],\n  [\"identifier\",\"abc\"],\n  [\"keyword.operator\",\"/\"],\n  [\"paren\",\"}\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"storage.type\",\"->\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"entity.name.function\",\"foo\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable.parameter\",\"{#abc}\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"storage.type\",\"->\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"entity.name.function\",\"foo\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable.parameter\",\"{abc#}\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"storage.type\",\"->\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"foo\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren\",\"{\"],\n  [\"paren.rparen\",\")\"],\n  [\"identifier\",\"abc\"],\n  [\"paren\",\"}\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"storage.type\",\"->\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"foo\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren\",\"{\"],\n  [\"identifier\",\"abc\"],\n  [\"paren.rparen\",\")\"],\n  [\"paren\",\"}\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"storage.type\",\"->\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"entity.name.function\",\"foo\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable.parameter\",\"{a{bc}\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"storage.type\",\"->\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"entity.name.function\",\"foo\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable.parameter\",\"{}\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"storage.type\",\"->\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"entity.name.function\",\"foo\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable.parameter\",\"{ }\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"storage.type\",\"->\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"entity.name.function\",\"foo\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\":\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable.parameter\",\"{}\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"storage.type\",\"->\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"entity.name.function\",\"foo\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable.parameter\",\"args\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"storage.type\",\"->\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"entity.name.function\",\"foo\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable.parameter\",\"arg1, arg2\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"storage.type\",\"->\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"entity.name.function\",\"foo\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable.parameter\",\"arg1 = 1, arg2 = 'name'\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"storage.type\",\"->\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"entity.name.function\",\"foo\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable.parameter\",\"@arg1 = /abc/, arg2 = 'name'\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"storage.type\",\"->\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"comment\",\"#test: tokenize function: invalid case:\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"foo\"],\n  [\"keyword.operator\",\"=\"],\n  [\"paren.lparen\",\"(\"],\n  [\"keyword.operator\",\"/\"],\n  [\"identifier\",\"args\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"storage.type\",\"->\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"entity.name.function\",\"foo\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"storage.type\",\"->\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"entity.name.function\",\"foo\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable.parameter\",\" \"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"storage.type\",\"->\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"entity.name.function\",\"foo\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\":\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable.parameter\",\" \"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"storage.type\",\"->\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"variable.language\",\"window\"],\n  [\"punctuation.operator\",\".\"],\n  [\"entity.name.function\",\"foo\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable.parameter\",\"args\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"storage.type\",\"->\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"entity.name.function\",\"foo\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"storage.type\",\"->\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"entity.name.function\",\"foo\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"storage.type\",\"->\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"entity.name.function\",\"foo\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\":\"],\n  [\"text\",\" \"],\n  [\"storage.type\",\"->\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"comment\",\"#test: tokenize callback function\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"foo\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"bar\"],\n  [\"keyword.operator\",\":\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable.parameter\",\"args\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"storage.type\",\"->\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"foo\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"2\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable.parameter\",\"x\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"storage.type\",\"->\"]\n],[\n   \"start\",\n  [\"comment\",\"#test: tokenize class\"]\n],[\n   \"start\",\n  [\"keyword\",\"class\"],\n  [\"text\",\" \"],\n  [\"language.support.class\",\"Foo\"]\n],[\n   \"start\",\n  [\"keyword\",\"class\"],\n  [\"text\",\" \"],\n  [\"language.support.class\",\"Foo\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"extends\"],\n  [\"text\",\" \"],\n  [\"language.support.class\",\"Bar\"]\n],[\n   \"start\",\n  [\"comment\",\"#test: tokenize illegal name property\"]\n],[\n   \"start\",\n  [\"identifier\",\"foo\"],\n  [\"punctuation.operator\",\".\"],\n  [\"identifier\",\"static\"],\n  [\"punctuation.operator\",\".\"],\n  [\"identifier\",\"function\"]\n],[\n   \"start\",\n  [\"comment\",\"#!test tokenize string with interpolation\"]\n],[\n   \"start\",\n  [\"identifier\",\"a\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"string.start\",\"\\\"\"],\n  [\"paren.string\",\"#{\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"22\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"/\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"7\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"paren\",\"{\"],\n  [\"identifier\",\"x\"],\n  [\"keyword.operator\",\":\"],\n  [\"text\",\" \"],\n  [\"string.start\",\"\\\"\"],\n  [\"paren.string\",\"#{\"],\n  [\"identifier\",\"a\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"b\"],\n  [\"paren.string\",\"}\"],\n  [\"string.end\",\"\\\"\"],\n  [\"paren\",\"}\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"2\"],\n  [\"paren.string\",\"}\"],\n  [\"string.end\",\"\\\"\"]\n],[\n   \"start\",\n  [\"string.start\",\"\\\"\"],\n  [\"string\",\" \"],\n  [\"paren.string\",\"#{\"],\n  [\"text\",\" \"],\n  [\"string.start\",\"\\\"\"],\n  [\"string.end\",\"\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"paren\",\"{}\"],\n  [\"text\",\" \"],\n  [\"paren.string\",\"}\"],\n  [\"string\",\" )\"],\n  [\"string.end\",\"\\\"\"],\n  [\"text\",\"  \"]\n],[\n   \"qqdoc\",\n  [\"string\",\"\\\"\\\"\\\"heredoc\"]\n],[\n   \"start\",\n  [\"string\",\"   \\\"\\\"\\\"\"]\n],[\n   \"start\",\n  [\"keyword\",\"do\"],\n  [\"text\",\" \"],\n  [\"storage.type\",\"->\"]\n],[\n   \"comment\",\n  [\"text\",\"    \"],\n  [\"comment\",\"###\"]\n],[\n   \"comment\",\n  [\"comment\",\"    herecomment\"]\n],[\n   \"start\",\n  [\"comment\",\"    ###\"]\n],[\n   \"heregex\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"re\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"string.regex\",\"/regex/imgy\"],\n  [\"punctuation.operator\",\".\"],\n  [\"identifier\",\"test\"],\n  [\"text\",\" \"],\n  [\"string.regex\",\"///\"]\n],[\n   \"heregex\",\n  [\"comment.regex\",\"        \"],\n  [\"string.regex\",\"heregex\"],\n  [\"comment.regex\",\"  # comment\"]\n],[\n   \"start\",\n  [\"string.regex\",\"    ///imgy\"]\n],[\n   \"js\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"this\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"isnt\"],\n  [\"keyword.operator\",\":\"],\n  [\"text\",\" \"],\n  [\"string\",\"`just \"]\n],[\n   \"start\",\n  [\"string\",\"       JavaScript`\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"constant.language\",\"undefined\"]\n],[\n   \"start\"\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_coldfusion.json",
    "content": "[[\n   \"start\",\n  [\"comment.start\",\"<!---\"],\n  [\"comment\",\" hello world \"],\n  [\"comment.end\",\"--->\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"keyword.tag-name.xml\",\"cfset\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"comment.start\",\"<!---\"],\n  [\"comment\",\" x \"],\n  [\"comment.start\",\"<!---\"],\n  [\"comment\",\" y \"],\n  [\"comment.end\",\"--->\"],\n  [\"comment\",\"  z \"],\n  [\"comment.end\",\"--->\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"welcome\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"Hello World!\\\"\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"comment.start.xml\",\"<!--\"],\n  [\"comment.xml\",\" x \"],\n  [\"comment.start\",\"<!---\"],\n  [\"comment\",\" y \"],\n  [\"comment.end\",\"--->\"],\n  [\"comment.xml\",\"  z \"],\n  [\"comment.end.xml\",\"-->\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"keyword.tag-name.xml\",\"cfoutput\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\"#welcome#\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"keyword.tag-name.xml\",\"cfoutput\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"cfjs-start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.cfscript.tag-name.xml\",\"cfscript\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"cfjs-no_regex\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"Dateformat\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"now\"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\"))\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.cfscript.tag-name.xml\",\"cfscript\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_csharp.json",
    "content": "[[\n   \"start\",\n  [\"keyword\",\"public\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"void\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"HelloWorld\"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"comment\",\"//Say Hello!\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"Console\"],\n  [\"punctuation.operator\",\".\"],\n  [\"identifier\",\"WriteLine\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string.start\",\"\\\"\"],\n  [\"string\",\"Hello World\"],\n  [\"string.end\",\"\\\"\"],\n  [\"paren.rparen\",\")\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_csound_document.json",
    "content": "[[\n   \"start\",\n  [\"text.csound-document\",\"/*\"]\n],[\n   \"start\",\n  [\"text.csound-document\",\" * comment\"]\n],[\n   \"start\",\n  [\"text.csound-document\",\" */\"]\n],[\n   \"start\",\n  [\"text.csound-document\",\"; comment\"]\n],[\n   \"start\",\n  [\"text.csound-document\",\"// comment\"]\n],[\n   \"start\",\n  [\"text.csound-document\",\"/\"]\n],[\n   \"synthesizer\",\n  [\"meta.tag.punctuation.tag-open.csound-document\",\"<\"],\n  [\"entity.name.tag.begin.csound-document\",\"CsoundSynthesizer\"],\n  [\"meta.tag.punctuation.tag-close.csound-document\",\">\"]\n],[\n   \"csound-start\",\n  [\"meta.tag.punctuation.tag-open.csound-document\",\"<\"],\n  [\"entity.name.tag.begin.csound-document\",\"CsInstruments\"],\n  [\"meta.tag.punctuation.tag-close.csound-document\",\">\"]\n],[\n   \"csound-start\",\n  [\"variable.language.csound\",\"0dbfs\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.csound\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.integer.decimal.csound\",\"1\"]\n],[\n   \"csound-start\",\n  [\"support.function.csound\",\"prints\"],\n  [\"text\",\" \"],\n  [\"punctuation.definition.string.begin.csound\",\"\\\"\"],\n  [\"string.quoted.csound\",\"hello, world\"],\n  [\"constant.character.escape.csound\",\"\\\\n\"],\n  [\"punctuation.definition.string.end.csound\",\"\\\"\"]\n],[\n   \"synthesizer\",\n  [\"meta.tag.punctuation.end-tag-open.csound-document\",\"</\"],\n  [\"entity.name.tag.begin.csound-document\",\"CsInstruments\"],\n  [\"meta.tag.punctuation.tag-close.csound-document\",\">\"]\n],[\n   \"csound-score-start\",\n  [\"meta.tag.punctuation.tag-open.csound-document\",\"<\"],\n  [\"entity.name.tag.begin.csound-document\",\"CsScore\"],\n  [\"meta.tag.punctuation.tag-close.csound-document\",\">\"]\n],[\n   \"csound-score-start\",\n  [\"keyword.control.csound-score\",\"i\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.integer.decimal.csound\",\"1\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.integer.decimal.csound\",\"0\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.integer.decimal.csound\",\"0\"]\n],[\n   \"synthesizer\",\n  [\"meta.tag.punctuation.end-tag-open.csound-document\",\"</\"],\n  [\"entity.name.tag.begin.csound-document\",\"CsScore\"],\n  [\"meta.tag.punctuation.tag-close.csound-document\",\">\"]\n],[\n   \"html-start\",\n  [\"meta.tag.punctuation.tag-open.csound-document\",\"<\"],\n  [\"entity.name.tag.begin.csound-document\",\"html\"],\n  [\"meta.tag.punctuation.tag-close.csound-document\",\">\"]\n],[\n   \"html-start\",\n  [\"xml-pe.doctype.xml\",\"<!\"],\n  [\"xml-pe.doctype.xml\",\"DOCTYPE\"],\n  [\"text.whitespace.xml\",\" \"],\n  [\"xml-pe.xml\",\"html\"],\n  [\"xml-pe.doctype.xml\",\">\"]\n],[\n   \"synthesizer\",\n  [\"meta.tag.punctuation.end-tag-open.csound-document\",\"</\"],\n  [\"entity.name.tag.begin.csound-document\",\"html\"],\n  [\"meta.tag.punctuation.tag-close.csound-document\",\">\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.end-tag-open.csound-document\",\"</\"],\n  [\"entity.name.tag.begin.csound-document\",\"CsoundSynthesizer\"],\n  [\"meta.tag.punctuation.tag-close.csound-document\",\">\"]\n],[\n   \"start\"\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_csound_orchestra.json",
    "content": "[[\n   \"punctuation.definition.comment.begin.csound\",\n  [\"punctuation.definition.comment.begin.csound\",\"/*\"]\n],[\n   \"punctuation.definition.comment.begin.csound\",\n  [\"comment.block.csound\",\" * comment\"]\n],[\n   \"start\",\n  [\"comment.block.csound\",\" \"],\n  [\"punctuation.definition.comment.end.csound\",\"*/\"]\n],[\n   \"start\",\n  [\"comment.line.semicolon.csound\",\"; comment\"]\n],[\n   \"start\",\n  [\"comment.line.double-slash.csound\",\"// comment\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword.function.csound\",\"instr\"],\n  [\"punctuation.definition.comment.begin.csound\",\"/*\"],\n  [\"punctuation.definition.comment.end.csound\",\"*/\"],\n  [\"entity.name.function.csound\",\"1\"],\n  [\"text\",\",\"],\n  [\"punctuation.definition.comment.begin.csound\",\"/*\"],\n  [\"punctuation.definition.comment.end.csound\",\"*/\"],\n  [\"entity.name.function.csound\",\"N_a_M_e_\"],\n  [\"text\",\",\"],\n  [\"punctuation.definition.comment.begin.csound\",\"/*\"],\n  [\"punctuation.definition.comment.end.csound\",\"*/\"],\n  [\"text\",\"+\"],\n  [\"entity.name.function.csound\",\"Name\"],\n  [\"punctuation.definition.comment.begin.csound\",\"/*\"],\n  [\"punctuation.definition.comment.end.csound\",\"*/\"],\n  [\"comment.line.double-slash.csound\",\"//\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"text.csound\",\"iDuration\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.csound\",\"=\"],\n  [\"text\",\" \"],\n  [\"support.variable.csound\",\"p3\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"support.function.csound\",\"outc\"],\n  [\"punctuation.type-annotation.csound\",\":\"],\n  [\"type-annotation.storage.type.csound\",\"a\"],\n  [\"text\",\"(\"],\n  [\"text.csound\",\"aSignal\"],\n  [\"text\",\")\"]\n],[\n   \"start\",\n  [\"keyword.other.csound\",\"endin\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword.function.csound\",\"opcode\"],\n  [\"punctuation.definition.comment.begin.csound\",\"/*\"],\n  [\"punctuation.definition.comment.end.csound\",\"*/\"],\n  [\"entity.name.function.opcode.csound\",\"aUDO\"],\n  [\"text\",\",\"],\n  [\"punctuation.definition.comment.begin.csound\",\"/*\"],\n  [\"punctuation.definition.comment.end.csound\",\"*/\"],\n  [\"storage.type.csound\",\"i[]\"],\n  [\"text\",\",\"],\n  [\"punctuation.definition.comment.begin.csound\",\"/*\"],\n  [\"punctuation.definition.comment.end.csound\",\"*/\"],\n  [\"storage.type.csound\",\"aik\"],\n  [\"comment.line.double-slash.csound\",\"//\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"text.csound\",\"aUDO\"]\n],[\n   \"start\",\n  [\"keyword.other.csound\",\"endop\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"constant.numeric.integer.decimal.csound\",\"123\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.integer.decimal.csound\",\"0123456789\"]\n],[\n   \"start\",\n  [\"storage.type.number.csound\",\"0x\"],\n  [\"constant.numeric.integer.hexadecimal.csound\",\"abcdef0123456789\"],\n  [\"text\",\" \"],\n  [\"storage.type.number.csound\",\"0X\"],\n  [\"constant.numeric.integer.hexadecimal.csound\",\"ABCDEF\"]\n],[\n   \"start\",\n  [\"constant.numeric.float.csound\",\"1e2\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.float.csound\",\"3e+4\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.float.csound\",\"5e-6\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.float.csound\",\"7E8\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.float.csound\",\"9E+0\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.float.csound\",\"1E-2\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.float.csound\",\"3.\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.float.csound\",\"4.56\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.float.csound\",\".789\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"punctuation.definition.string.begin.csound\",\"\\\"\"],\n  [\"string.quoted.csound\",\"characters\"],\n  [\"entity.name.function.preprocessor.csound\",\"$MACRO.\"],\n  [\"punctuation.definition.string.end.csound\",\"\\\"\"]\n],[\n   \"start\",\n  [\"punctuation.definition.string.begin.csound\",\"\\\"\"],\n  [\"constant.character.escape.csound\",\"\\\\\\\\\\\\a\\\\b\\\\n\\\\r\\\\t\\\\012\\\\345\\\\67\\\\\\\"\"],\n  [\"punctuation.definition.string.end.csound\",\"\\\"\"]\n],[\n   \"start\"\n],[\n   [\"#tmp\",\"braced string\",\"start\",\"braced string\"],\n  [\"punctuation.definition.string.begin.csound\",\"{{\"]\n],[\n   [\"#tmp\",\"braced string\",\"start\",\"braced string\"],\n  [\"string.braced.csound\",\"characters$MACRO.\"]\n],[\n   \"start\",\n  [\"punctuation.definition.string.end.csound\",\"}}\"]\n],[\n   \"start\",\n  [\"punctuation.definition.string.begin.csound\",\"{{\"],\n  [\"constant.character.escape.csound\",\"\\\\\\\\\\\\a\\\\b\\\\n\\\\r\\\\t\\\\\\\"\\\\012\\\\345\\\\67\"],\n  [\"punctuation.definition.string.end.csound\",\"}}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword.operator.csound\",\"+\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.csound\",\"-\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.csound\",\"~\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.csound\",\"¬\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.csound\",\"!\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.csound\",\"*\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.csound\",\"/\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.csound\",\"^\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.csound\",\"%\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.csound\",\"<<\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.csound\",\">>\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.csound\",\"<\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.csound\",\">\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.csound\",\"<=\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.csound\",\">=\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.csound\",\"==\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.csound\",\"!=\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.csound\",\"&\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.csound\",\"#\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.csound\",\"|\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.csound\",\"&&\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.csound\",\"||\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.csound\",\"?\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.csound\",\":\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.csound\",\"+=\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.csound\",\"-=\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.csound\",\"*=\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.csound\",\"/=\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"variable.language.csound\",\"0dbfs\"],\n  [\"text\",\" \"],\n  [\"variable.language.csound\",\"A4\"],\n  [\"text\",\" \"],\n  [\"variable.language.csound\",\"kr\"],\n  [\"text\",\" \"],\n  [\"variable.language.csound\",\"ksmps\"],\n  [\"text\",\" \"],\n  [\"variable.language.csound\",\"nchnls\"],\n  [\"text\",\" \"],\n  [\"variable.language.csound\",\"nchnls_i\"],\n  [\"text\",\" \"],\n  [\"variable.language.csound\",\"sr\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword.control.csound\",\"do\"],\n  [\"text\",\" \"],\n  [\"keyword.control.csound\",\"else\"],\n  [\"text\",\" \"],\n  [\"keyword.control.csound\",\"elseif\"],\n  [\"text\",\" \"],\n  [\"keyword.control.csound\",\"endif\"],\n  [\"text\",\" \"],\n  [\"keyword.control.csound\",\"enduntil\"],\n  [\"text\",\" \"],\n  [\"keyword.control.csound\",\"fi\"],\n  [\"text\",\" \"],\n  [\"keyword.control.csound\",\"if\"],\n  [\"text\",\" \"],\n  [\"keyword.control.csound\",\"ithen\"],\n  [\"text\",\" \"],\n  [\"keyword.control.csound\",\"kthen\"],\n  [\"text\",\" \"],\n  [\"keyword.control.csound\",\"od\"],\n  [\"text\",\" \"],\n  [\"keyword.control.csound\",\"then\"],\n  [\"text\",\" \"],\n  [\"keyword.control.csound\",\"until\"],\n  [\"text\",\" \"],\n  [\"keyword.control.csound\",\"while\"]\n],[\n   \"start\",\n  [\"keyword.control.csound\",\"return\"],\n  [\"text\",\" \"],\n  [\"keyword.control.csound\",\"rireturn\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"entity.name.label.csound\",\"aLabel\"],\n  [\"entity.punctuation.label.csound\",\":\"]\n],[\n   \"start\",\n  [\"text.csound\",\" \"],\n  [\"entity.name.label.csound\",\"label2\"],\n  [\"entity.punctuation.label.csound\",\":\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword.control.csound\",\"goto\"],\n  [\"text.csound\",\" \"],\n  [\"entity.name.label.csound\",\"aLabel\"]\n],[\n   \"start\",\n  [\"keyword.control.csound\",\"reinit\"],\n  [\"text.csound\",\" \"],\n  [\"entity.name.label.csound\",\"aLabel\"]\n],[\n   \"start\",\n  [\"keyword.control.csound\",\"cggoto\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.integer.decimal.csound\",\"1\"],\n  [\"keyword.operator.csound\",\"==\"],\n  [\"constant.numeric.integer.decimal.csound\",\"0\"],\n  [\"text.csound\",\", \"],\n  [\"entity.name.label.csound\",\"aLabel\"]\n],[\n   \"start\",\n  [\"keyword.control.csound\",\"timout\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.integer.decimal.csound\",\"0\"],\n  [\"text.csound\",\",\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.integer.decimal.csound\",\"0\"],\n  [\"text.csound\",\", \"],\n  [\"entity.name.label.csound\",\"aLabel\"]\n],[\n   \"start\",\n  [\"keyword.control.csound\",\"loop_ge\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.integer.decimal.csound\",\"0\"],\n  [\"text.csound\",\",\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.integer.decimal.csound\",\"0\"],\n  [\"text.csound\",\",\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.integer.decimal.csound\",\"0\"],\n  [\"text.csound\",\", \"],\n  [\"entity.name.label.csound\",\"aLabel\"]\n],[\n   \"start\"\n],[\n   [\"#tmp\",\"csound-score-start\",\"start\",\"Csound score opcode\"],\n  [\"support.function.csound\",\"readscore\"],\n  [\"text\",\" \"],\n  [\"punctuation.definition.string.begin.csound\",\"{{\"]\n],[\n   [\"#tmp\",\"csound-score-start\",\"start\",\"Csound score opcode\"],\n  [\"keyword.control.csound-score\",\"i\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.integer.decimal.csound\",\"1\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.integer.decimal.csound\",\"0\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.integer.decimal.csound\",\"0\"]\n],[\n   \"start\",\n  [\"punctuation.definition.string.end.csound\",\"}}\"]\n],[\n   [\"#tmp\",\"python-start\",\"start\",\"Python opcode\"],\n  [\"support.function.csound\",\"pyrun\"],\n  [\"text\",\" \"],\n  [\"punctuation.definition.string.begin.csound\",\"{{\"]\n],[\n   [\"#tmp\",\"python-start\",\"start\",\"Python opcode\"],\n  [\"comment\",\"# Python\"]\n],[\n   \"start\",\n  [\"punctuation.definition.string.end.csound\",\"}}\"]\n],[\n   [\"#tmp\",\"lua-start\",\"start\",\"Lua opcode\"],\n  [\"support.function.csound\",\"lua_exec\"],\n  [\"text\",\" \"],\n  [\"punctuation.definition.string.begin.csound\",\"{{\"]\n],[\n   [\"#tmp\",\"lua-start\",\"start\",\"Lua opcode\"],\n  [\"comment\",\"-- Lua\"]\n],[\n   \"start\",\n  [\"punctuation.definition.string.end.csound\",\"}}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword.preprocessor.csound\",\"#include\"],\n  [\"punctuation.definition.comment.begin.csound\",\"/*\"],\n  [\"punctuation.definition.comment.end.csound\",\"*/\"],\n  [\"string.csound\",\"\\\"file.udo\\\"\"]\n],[\n   \"start\",\n  [\"keyword.preprocessor.csound\",\"#include\"],\n  [\"punctuation.definition.comment.begin.csound\",\"/*\"],\n  [\"punctuation.definition.comment.end.csound\",\"*/\"],\n  [\"string.csound\",\"|file.udo|\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword.preprocessor.csound\",\"#ifdef\"],\n  [\"text\",\" \"],\n  [\"entity.name.function.preprocessor.csound\",\"MACRO\"]\n],[\n   \"start\",\n  [\"keyword.preprocessor.csound\",\"#else\"]\n],[\n   \"start\",\n  [\"keyword.preprocessor.csound\",\"#ifndef\"],\n  [\"text\",\" \"],\n  [\"entity.name.function.preprocessor.csound\",\"MACRO\"]\n],[\n   \"start\",\n  [\"keyword.preprocessor.csound\",\"#endif\"]\n],[\n   \"start\",\n  [\"keyword.preprocessor.csound\",\"#undef\"],\n  [\"text\",\" \"],\n  [\"entity.name.function.preprocessor.csound\",\"MACRO\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword.preprocessor.csound\",\"#   define\"],\n  [\"text\",\" \"],\n  [\"entity.name.function.preprocessor.csound\",\"MACRO\"],\n  [\"punctuation.definition.macro.begin.csound\",\"#\"],\n  [\"text.csound\",\"macro_body\"],\n  [\"punctuation.definition.macro.end.csound\",\"#\"]\n],[\n   \"define directive\",\n  [\"keyword.preprocessor.csound\",\"#define\"],\n  [\"punctuation.definition.comment.begin.csound\",\"/*\"],\n  [\"punctuation.definition.comment.end.csound\",\"*/\"]\n],[\n   \"define directive\",\n  [\"entity.name.function.preprocessor.csound\",\"MACRO\"],\n  [\"punctuation.definition.comment.begin.csound\",\"/*\"],\n  [\"punctuation.definition.comment.end.csound\",\"*/\"]\n],[\n   \"macro body\",\n  [\"punctuation.definition.macro.begin.csound\",\"#\"],\n  [\"constant.character.escape.csound\",\"\\\\#\"],\n  [\"text.csound\",\"macro\"]\n],[\n   \"start\",\n  [\"text.csound\",\"body\"],\n  [\"constant.character.escape.csound\",\"\\\\#\"],\n  [\"punctuation.definition.macro.end.csound\",\"#\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword.preprocessor.csound\",\"#define\"],\n  [\"text\",\" \"],\n  [\"entity.name.function.preprocessor.csound\",\"MACRO\"],\n  [\"punctuation.definition.macro-parameter-name-list.begin.csound\",\"(\"],\n  [\"variable.parameter.preprocessor.csound\",\"ARG1\"],\n  [\"text\",\"#\"],\n  [\"variable.parameter.preprocessor.csound\",\"ARG2\"],\n  [\"punctuation.definition.macro-parameter-name-list.end.csound\",\")\"],\n  [\"text\",\" \"],\n  [\"punctuation.definition.macro.begin.csound\",\"#\"],\n  [\"text.csound\",\"macro_body\"],\n  [\"punctuation.definition.macro.end.csound\",\"#\"]\n],[\n   \"define directive\",\n  [\"keyword.preprocessor.csound\",\"#define\"],\n  [\"punctuation.definition.comment.begin.csound\",\"/*\"],\n  [\"punctuation.definition.comment.end.csound\",\"*/\"]\n],[\n   \"define directive\",\n  [\"entity.name.function.preprocessor.csound\",\"MACRO\"],\n  [\"punctuation.definition.macro-parameter-name-list.begin.csound\",\"(\"],\n  [\"variable.parameter.preprocessor.csound\",\"ARG1\"],\n  [\"text\",\"'\"],\n  [\"variable.parameter.preprocessor.csound\",\"ARG2\"],\n  [\"text\",\"'\"],\n  [\"variable.parameter.preprocessor.csound\",\"ARG3\"],\n  [\"punctuation.definition.macro-parameter-name-list.end.csound\",\")\"],\n  [\"punctuation.definition.comment.begin.csound\",\"/*\"],\n  [\"punctuation.definition.comment.end.csound\",\"*/\"]\n],[\n   \"macro body\",\n  [\"punctuation.definition.macro.begin.csound\",\"#\"],\n  [\"constant.character.escape.csound\",\"\\\\#\"],\n  [\"text.csound\",\"macro\"]\n],[\n   \"start\",\n  [\"text.csound\",\"body\"],\n  [\"constant.character.escape.csound\",\"\\\\#\"],\n  [\"punctuation.definition.macro.end.csound\",\"#\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"entity.name.function.preprocessor.csound\",\"$MACRO\"],\n  [\"text\",\" \"],\n  [\"entity.name.function.preprocessor.csound\",\"$MACRO.\"]\n],[\n   \"start\",\n  [\"entity.name.function.preprocessor.csound\",\"$MACRO\"],\n  [\"punctuation.definition.macro-parameter-value-list.begin.csound\",\"(\"],\n  [\"text\",\"x\"],\n  [\"punctuation.definition.macro-parameter-value-list.end.csound\",\")\"]\n],[\n   \"start\",\n  [\"keyword.preprocessor.csound\",\"@0\"]\n],[\n   \"start\",\n  [\"keyword.preprocessor.csound\",\"@@ 1\"]\n],[\n   \"start\",\n  [\"entity.name.function.preprocessor.csound\",\"$MACRO.\"],\n  [\"punctuation.definition.macro-parameter-value-list.begin.csound\",\"(\"],\n  [\"punctuation.macro-parameter-value-parenthetical.begin.csound\",\"((\"],\n  [\"text.csound\",\"x\"],\n  [\"keyword.operator.csound\",\"#\"],\n  [\"text.csound\",\"y\"],\n  [\"constant.character.escape.csound\",\"\\\\)\"],\n  [\"punctuation.macro-parameter-value-parenthetical.end.csound\",\"))\"],\n  [\"punctuation.macro-parameter-value-separator.csound\",\"'\"],\n  [\"text\",\" \"],\n  [\"punctuation.definition.string.begin.csound\",\"\\\"\"],\n  [\"invalid.illegal.csound\",\"(#'\"],\n  [\"string.quoted.csound\",\"x\"],\n  [\"invalid.illegal.csound\",\")\"],\n  [\"constant.character.escape.csound\",\"\\\\)\"],\n  [\"string.quoted.csound\",\"x\"],\n  [\"constant.character.escape.csound\",\"\\\\)\"],\n  [\"invalid.illegal.csound\",\")\"],\n  [\"punctuation.definition.string.end.csound\",\"\\\"\"],\n  [\"punctuation.macro-parameter-value-separator.csound\",\"#\"],\n  [\"text\",\" \"],\n  [\"punctuation.definition.string.begin.csound\",\"{{\"],\n  [\"string.braced.csound\",\"x\"],\n  [\"constant.character.escape.csound\",\"\\\\)\"],\n  [\"invalid.illegal.csound.csound\",\")\"],\n  [\"string.braced.csound\",\"x\"],\n  [\"invalid.illegal.csound.csound\",\")\"],\n  [\"constant.character.escape.csound\",\"\\\\)\"],\n  [\"invalid.illegal.csound.csound\",\"(#'\"],\n  [\"punctuation.definition.string.end.csound\",\"}}\"],\n  [\"punctuation.definition.macro-parameter-value-list.end.csound\",\")\"],\n  [\"comment.line.semicolon.csound\",\";\"]\n],[\n   \"start\"\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_csound_score.json",
    "content": "[[\n   \"punctuation.definition.comment.begin.csound\",\n  [\"punctuation.definition.comment.begin.csound\",\"/*\"]\n],[\n   \"punctuation.definition.comment.begin.csound\",\n  [\"comment.block.csound\",\" * comment\"]\n],[\n   \"start\",\n  [\"comment.block.csound\",\" \"],\n  [\"punctuation.definition.comment.end.csound\",\"*/\"]\n],[\n   \"start\",\n  [\"comment.line.semicolon.csound\",\"; comment\"]\n],[\n   \"start\",\n  [\"comment.line.double-slash.csound\",\"// comment\"]\n],[\n   \"start\",\n  [\"keyword.control.csound-score\",\"a\"],\n  [\"text\",\" \"],\n  [\"keyword.control.csound-score\",\"b\"],\n  [\"text\",\" \"],\n  [\"keyword.control.csound-score\",\"C\"],\n  [\"text\",\" \"],\n  [\"keyword.control.csound-score\",\"d\"],\n  [\"text\",\" \"],\n  [\"keyword.control.csound-score\",\"e\"],\n  [\"text\",\" \"],\n  [\"keyword.control.csound-score\",\"f\"],\n  [\"text\",\" \"],\n  [\"keyword.control.csound-score\",\"i\"],\n  [\"text\",\" \"],\n  [\"keyword.control.csound-score\",\"q\"],\n  [\"text\",\" \"],\n  [\"keyword.control.csound-score\",\"s\"],\n  [\"text\",\" \"],\n  [\"keyword.control.csound-score\",\"t\"],\n  [\"text\",\" \"],\n  [\"keyword.control.csound-score\",\"v\"],\n  [\"text\",\" \"],\n  [\"keyword.control.csound-score\",\"x\"],\n  [\"text\",\" \"],\n  [\"keyword.control.csound-score\",\"y\"]\n],[\n   \"start\",\n  [\"constant.numeric.language.csound-score\",\"z\"]\n],[\n   \"start\",\n  [\"keyword.control.csound-score\",\"np\"],\n  [\"constant.numeric.integer.decimal.csound-score\",\"0\"],\n  [\"text\",\" \"],\n  [\"keyword.control.csound-score\",\"nP\"],\n  [\"constant.numeric.integer.decimal.csound-score\",\"1\"],\n  [\"text\",\" \"],\n  [\"keyword.control.csound-score\",\"Np\"],\n  [\"constant.numeric.integer.decimal.csound-score\",\"2\"],\n  [\"text\",\" \"],\n  [\"keyword.control.csound-score\",\"NP\"],\n  [\"constant.numeric.integer.decimal.csound-score\",\"3\"]\n],[\n   \"start\",\n  [\"keyword.other.csound-score\",\"m\"],\n  [\"punctuation.definition.comment.begin.csound\",\"/*\"],\n  [\"punctuation.definition.comment.end.csound\",\"*/\"],\n  [\"entity.name.label.csound-score\",\"label\"],\n  [\"comment.line.semicolon.csound\",\";\"]\n],[\n   \"start\",\n  [\"keyword.other.csound-score\",\"n\"],\n  [\"text\",\" \"],\n  [\"entity.name.label.csound-score\",\"label\"]\n],[\n   \"start\",\n  [\"constant.numeric.integer.decimal.csound\",\"123\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.integer.decimal.csound\",\"0123456789\"]\n],[\n   \"start\",\n  [\"storage.type.number.csound\",\"0x\"],\n  [\"constant.numeric.integer.hexadecimal.csound\",\"abcdef0123456789\"],\n  [\"text\",\" \"],\n  [\"storage.type.number.csound\",\"0X\"],\n  [\"constant.numeric.integer.hexadecimal.csound\",\"ABCDEF\"]\n],[\n   \"start\",\n  [\"constant.numeric.float.csound\",\"1e2\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.float.csound\",\"3e+4\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.float.csound\",\"5e-6\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.float.csound\",\"7E8\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.float.csound\",\"9E+0\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.float.csound\",\"1E-2\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.float.csound\",\"3.\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.float.csound\",\"4.56\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.float.csound\",\".789\"]\n],[\n   \"start\",\n  [\"punctuation.definition.string.begin.csound-score\",\"\\\"\"],\n  [\"string.quoted.csound-score\",\"characters\"],\n  [\"entity.name.function.preprocessor.csound\",\"$MACRO.\"],\n  [\"punctuation.definition.string.end.csound-score\",\"\\\"\"]\n],[\n   [\"#tmp\",\"loop after macro name\",\"start\",\"loop after macro name\"],\n  [\"punctuation.braced-loop.begin.csound-score\",\"{\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.integer.decimal.csound-score\",\"1\"],\n  [\"text\",\" \"],\n  [\"entity.name.function.preprocessor.csound-score\",\"I\"]\n],[\n   [\"#tmp\",\"loop after macro name\",\"start\",\"loop after macro name\",\"loop after macro name\"],\n  [\"text\",\"  \"],\n  [\"punctuation.braced-loop.begin.csound-score\",\"{\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.integer.decimal.csound-score\",\"2\"],\n  [\"text\",\" \"],\n  [\"entity.name.function.preprocessor.csound-score\",\"J\"]\n],[\n   [\"#tmp\",\"loop after macro name\",\"start\",\"loop after macro name\",\"loop after macro name\",\"loop after macro name\"],\n  [\"text\",\"    \"],\n  [\"punctuation.braced-loop.begin.csound-score\",\"{\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.integer.decimal.csound-score\",\"3\"],\n  [\"text\",\" \"],\n  [\"entity.name.function.preprocessor.csound-score\",\"K\"]\n],[\n   [\"#tmp\",\"loop after macro name\",\"start\",\"loop after macro name\",\"loop after macro name\",\"loop after macro name\"],\n  [\"text\",\"      \"],\n  [\"entity.name.function.preprocessor.csound\",\"$I\"],\n  [\"text\",\" \"],\n  [\"entity.name.function.preprocessor.csound\",\"$J\"],\n  [\"text\",\" \"],\n  [\"entity.name.function.preprocessor.csound\",\"$K\"]\n],[\n   [\"#tmp\",\"loop after macro name\",\"start\",\"loop after macro name\",\"loop after macro name\"],\n  [\"text\",\"    \"],\n  [\"punctuation.braced-loop.end.csound-score\",\"}\"]\n],[\n   [\"#tmp\",\"loop after macro name\",\"start\",\"loop after macro name\"],\n  [\"text\",\"  \"],\n  [\"punctuation.braced-loop.end.csound-score\",\"}\"]\n],[\n   \"start\",\n  [\"punctuation.braced-loop.end.csound-score\",\"}\"]\n],[\n   \"start\",\n  [\"keyword.preprocessor.csound\",\"#include\"],\n  [\"text\",\" \"],\n  [\"string.csound\",\"\\\"score.sco\\\"\"]\n],[\n   \"start\"\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_css.json",
    "content": "[[\n   \"ruleset\",\n  [\"variable\",\".text-layer\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"ruleset\",\n  [\"text\",\"    \"],\n  [\"support.type\",\"font\"],\n  [\"text\",\": \"],\n  [\"constant.numeric\",\"12\"],\n  [\"keyword\",\"px\"],\n  [\"text\",\" Monaco, \"],\n  [\"string.start\",\"\\\"\"],\n  [\"string\",\"Courier New\"],\n  [\"string.end\",\"\\\"\"],\n  [\"text\",\", \"],\n  [\"support.constant.fonts\",\"monospace\"],\n  [\"text\",\";\"]\n],[\n   \"ruleset\",\n  [\"text\",\"    \"],\n  [\"support.type\",\"cursor\"],\n  [\"text\",\": \"],\n  [\"support.constant\",\"text\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"ruleset\",\n  [\"variable\",\".blinker\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"ruleset\",\n  [\"text\",\"    \"],\n  [\"support.type\",\"animation\"],\n  [\"text\",\": blink \"],\n  [\"constant.numeric\",\"1\"],\n  [\"keyword\",\"s\"],\n  [\"text\",\" \"],\n  [\"support.constant\",\"linear\"],\n  [\"text\",\" infinite alternate;\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"string\",\"@\"],\n  [\"keyword\",\"keyframes\"],\n  [\"text\",\" blink \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"ruleset\",\n  [\"text\",\"    \"],\n  [\"constant.numeric\",\"0\"],\n  [\"keyword\",\"%\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"40\"],\n  [\"keyword\",\"%\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   [\"comment\",\"ruleset\"],\n  [\"text\",\"        \"],\n  [\"support.type\",\"opacity\"],\n  [\"text\",\": \"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\"; \"],\n  [\"comment\",\"/*\"]\n],[\n   \"ruleset\",\n  [\"comment\",\"        */\"]\n],[\n   \"ruleset\",\n  [\"text\",\"        \"],\n  [\"support.type\",\"opacity\"],\n  [\"text\",\": \"],\n  [\"constant.numeric\",\"1\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"ruleset\",\n  [\"text\",\"    \"],\n  [\"constant.numeric\",\"40.5\"],\n  [\"keyword\",\"%\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"100\"],\n  [\"keyword\",\"%\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"ruleset\",\n  [\"text\",\"        \"],\n  [\"support.type\",\"opacity\"],\n  [\"text\",\": \"],\n  [\"constant.numeric\",\"1\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"media\",\n  [\"string\",\"@\"],\n  [\"keyword\",\"document\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"url(\"],\n  [\"string\",\"http://c9.io/\"],\n  [\"support.function\",\")\"],\n  [\"text\",\", \"],\n  [\"support.function\",\"url-prefix(\"],\n  [\"string\",\"http://ace.c9.io/build/\"],\n  [\"support.function\",\")\"],\n  [\"text\",\",\"]\n],[\n   \"media\",\n  [\"text\",\"   \"],\n  [\"support.function\",\"domain(\"],\n  [\"string\",\"c9.io\"],\n  [\"support.function\",\")\"],\n  [\"text\",\", \"],\n  [\"support.function\",\"regexp(\"],\n  [\"string\",\"\\\"https:.*\\\"\"],\n  [\"support.function\",\")\"],\n  [\"text\",\" \"],\n  [\"comment\",\"/**/\"]\n],[\n   \"start\",\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"comment\",\"/**/\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"constant\",\"img\"],\n  [\"text\",\"[\"],\n  [\"constant\",\"title\"],\n  [\"text\",\"]\"],\n  [\"string\",\":before\"],\n  [\"text\",\" \"]\n],[\n   \"ruleset\",\n  [\"text\",\"    \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   [\"string.start0\",\"ruleset\"],\n  [\"text\",\"        \"],\n  [\"support.type\",\"content\"],\n  [\"text\",\": \"],\n  [\"support.function\",\"attr\"],\n  [\"text\",\"(title) \"],\n  [\"string.start\",\"\\\"\"],\n  [\"constant.language.escape\",\"\\\\A\"],\n  [\"string\",\"Image \"],\n  [\"constant.language.escape\",\"\\\\\"]\n],[\n   \"ruleset\",\n  [\"string\",\"            retrieved from\"],\n  [\"string.end\",\"\\\"\"]\n],[\n   [\"comment\",\"ruleset\"],\n  [\"text\",\"            \"],\n  [\"support.function\",\"attr\"],\n  [\"text\",\"(src); \"],\n  [\"comment\",\"/*\"]\n],[\n   \"ruleset\",\n  [\"comment\",\"            */\"]\n],[\n   \"ruleset\",\n  [\"text\",\"        \"],\n  [\"support.type\",\"white-space\"],\n  [\"text\",\": \"],\n  [\"support.constant\",\"pre\"],\n  [\"text\",\";\"]\n],[\n   \"ruleset\",\n  [\"text\",\"        \"],\n  [\"support.type\",\"display\"],\n  [\"text\",\": \"],\n  [\"support.constant\",\"block\"],\n  [\"text\",\";\"]\n],[\n   \"ruleset\",\n  [\"text\",\"        \"],\n  [\"support.type\",\"background\"],\n  [\"text\",\": \"],\n  [\"support.function\",\"url(\"],\n  [\"string\",\"asdasd\"],\n  [\"support.function\",\")\"],\n  [\"text\",\"; \"],\n  [\"string.start\",\"\\\"\"],\n  [\"string\",\"err\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\"\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_curly.json",
    "content": "[[\n   \"start\",\n  [\"text.xml\",\"tokenize Curly template\"],\n  [\"variable\",\"{{\"],\n  [\"text\",\"test\"],\n  [\"variable\",\"}}\"]\n],[\n   \"start\",\n  [\"text.xml\",\"tokenize embedded script\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.script.tag-name.xml\",\"script\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"a\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"'a'\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"storage.type\",\"var\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.script.tag-name.xml\",\"script\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\"'123'\"]\n],[\n   \"start\",\n  [\"text.xml\",\"tokenize multiline attribute value with double quotes\"]\n],[\n   [\"string.attribute-value.xml0\",\"tag_stuff\"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.anchor.tag-name.xml\",\"a\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"href\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"abc{{xyz}}\"]\n],[\n   \"start\",\n  [\"string.attribute-value.xml\",\"def\\\"\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"tokenize multiline attribute value with single quotes\"]\n],[\n   [\"string.attribute-value.xml\",\"tag_stuff\"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.anchor.tag-name.xml\",\"a\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"href\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"'abc\"]\n],[\n   \"start\",\n  [\"string.attribute-value.xml\",\"def\\\\\\\"'\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\"\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_d.json",
    "content": "[[\n   \"start\",\n  [\"comment.shebang\",\"#!/usr/bin/env rdmd\"]\n],[\n   \"start\",\n  [\"comment\",\"// Computes average line length for standard input.\"]\n],[\n   \"start\",\n  [\"keyword\",\"import\"],\n  [\"text\",\" \"],\n  [\"variable.module\",\"std.stdio\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword.type\",\"void\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"main\"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword.type\",\"ulong\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"lines\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword.type\",\"double\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"sumLength\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword.control\",\"foreach\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"line\"],\n  [\"punctuation.operator\",\";\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"stdin\"],\n  [\"punctuation.operator\",\".\"],\n  [\"identifier\",\"byLine\"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\"))\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"keyword.operator\",\"++\"],\n  [\"identifier\",\"lines\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"identifier\",\"sumLength\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"line\"],\n  [\"punctuation.operator\",\".\"],\n  [\"identifier\",\"length\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"writeln\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\"Average line length: \\\"\"],\n  [\"punctuation.operator\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"identifier\",\"lines\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"?\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"sumLength\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"/\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"lines\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\":\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"paren.rparen\",\")\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_dart.json",
    "content": "[[\n   \"start\",\n  [\"identifier\",\"main\"],\n  [\"text\",\"() {\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"identifier\",\"print\"],\n  [\"text\",\"(\"],\n  [\"string\",\"'Hello World!'\"],\n  [\"text\",\");\"]\n],[\n   \"start\",\n  [\"text\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"storage.type.primitive.dart\",\"int\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"fib\"],\n  [\"text\",\"(\"],\n  [\"storage.type.primitive.dart\",\"int\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"n\"],\n  [\"text\",\") \"],\n  [\"keyword.operator.assignment.dart\",\"=\"],\n  [\"keyword.operator.comparison.dart\",\">\"],\n  [\"text\",\" (\"],\n  [\"identifier\",\"n\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.comparison.dart\",\">\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\") \"],\n  [\"keyword.control.ternary.dart\",\"?\"],\n  [\"text\",\" (\"],\n  [\"identifier\",\"fib\"],\n  [\"text\",\"(\"],\n  [\"identifier\",\"n\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.arithmetic.dart\",\"-\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\") \"],\n  [\"keyword.operator.arithmetic.dart\",\"+\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"fib\"],\n  [\"text\",\"(\"],\n  [\"identifier\",\"n\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.arithmetic.dart\",\"-\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"2\"],\n  [\"text\",\")) \"],\n  [\"keyword.control.ternary.dart\",\":\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"n\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"identifier\",\"main\"],\n  [\"text\",\"() {\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"identifier\",\"print\"],\n  [\"text\",\"(\"],\n  [\"string\",\"'fib(20) = ${fib(20)}'\"],\n  [\"text\",\");\"]\n],[\n   \"start\",\n  [\"text\",\"}\"]\n],[\n   \"comment\",\n  [\"comment\",\"/*asd\"]\n],[\n   \"comment\",\n  [\"comment\",\"asdad\"]\n],[\n   \"start\",\n  [\"comment\",\"*/\"]\n],[\n   \"start\",\n  [\"constant.numeric\",\"0.67\"]\n],[\n   \"start\",\n  [\"constant.numeric\",\"77\"]\n],[\n   \"start\",\n  [\"text\",\".\"],\n  [\"constant.numeric\",\"86\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword.other.import.dart\",\"import\"],\n  [\"text\",\"(\"],\n  [\"string\",\"\\\"http://dartwatch.com/myOtherLibrary.dart\\\"\"],\n  [\"text\",\");\"]\n],[\n   \"start\",\n  [\"keyword.other.import.dart\",\"import\"],\n  [\"text\",\"(\"],\n  [\"string\",\"\\\"myOtherLibrary.dart\\\"\"],\n  [\"text\",\", \"],\n  [\"keyword.other.import.dart\",\"prefix\"],\n  [\"text\",\":\"],\n  [\"string\",\"\\\"lib1\\\"\"],\n  [\"text\",\");\"]\n],[\n   \"start\"\n],[\n   \"qqdoc\",\n  [\"string\",\"\\\"\\\"\\\"asdasdads\"]\n],[\n   \"qqdoc\",\n  [\"string\",\"asdadsadsasd\"]\n],[\n   \"start\",\n  [\"string\",\"asdasdasdad\\\"\\\"\\\"\"]\n],[\n   \"start\",\n  [\"text\",\" \"]\n],[\n   \"start\",\n  [\"string\",\"'23424'\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"constant.numeric\",\"0x234\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"identifier\",\"foo\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.dart\",\"is\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"bar\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"storage.type.primitive.dart\",\"int\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"x\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.assignment.dart\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"4\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.bitwise.dart\",\"<<\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"10\"],\n  [\"text\",\" \"]\n],[\n   \"start\",\n  [\"comment\",\"// Create a class for Point.\"]\n],[\n   \"start\",\n  [\"keyword.declaration.dart\",\"class\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Point\"],\n  [\"text\",\" {\"]\n],[\n   \"start\",\n  [\"text\",\" \"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"comment\",\"// Final variables cannot be changed once they are assigned.\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"comment\",\"// Create two instance variables.\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"storage.modifier.dart\",\"final\"],\n  [\"text\",\" \"],\n  [\"storage.type.primitive.dart\",\"num\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"x\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"y\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\" \"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"comment\",\"// A constructor, with syntactic sugar for setting instance variables.\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"identifier\",\"Point\"],\n  [\"text\",\"(\"],\n  [\"variable.language.dart\",\"this\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"x\"],\n  [\"text\",\", \"],\n  [\"variable.language.dart\",\"this\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"y\"],\n  [\"text\",\");\"]\n],[\n   \"start\",\n  [\"text\",\" \"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"comment\",\"// A named constructor with an initializer list.\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"identifier\",\"Point\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"origin\"],\n  [\"text\",\"() \"],\n  [\"keyword.control.ternary.dart\",\":\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"x\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.assignment.dart\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"y\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.assignment.dart\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\" \"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"comment\",\"// A method.\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"storage.type.primitive.dart\",\"num\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"distanceTo\"],\n  [\"text\",\"(\"],\n  [\"identifier\",\"Point\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"other\"],\n  [\"text\",\") {\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"storage.type.primitive.dart\",\"var\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"dx\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.assignment.dart\",\"=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"x\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.arithmetic.dart\",\"-\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"other\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"x\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"storage.type.primitive.dart\",\"var\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"dy\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.assignment.dart\",\"=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"y\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.arithmetic.dart\",\"-\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"other\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"y\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword.control.dart\",\"return\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"sqrt\"],\n  [\"text\",\"(\"],\n  [\"identifier\",\"dx\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.arithmetic.dart\",\"*\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"dx\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.arithmetic.dart\",\"+\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"dy\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.arithmetic.dart\",\"*\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"dy\"],\n  [\"text\",\");\"]\n],[\n   \"start\",\n  [\"text\",\"  }\"]\n],[\n   \"start\",\n  [\"text\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\" \"]\n],[\n   \"start\",\n  [\"text\",\" \"],\n  [\"comment\",\"// Check for null.\"]\n],[\n   \"start\",\n  [\"storage.type.primitive.dart\",\"var\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"unicorn\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"keyword.control.dart\",\"assert\"],\n  [\"text\",\"(\"],\n  [\"identifier\",\"unicorn\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.comparison.dart\",\"==\"],\n  [\"text\",\" \"],\n  [\"constant.language.dart\",\"null\"],\n  [\"text\",\");\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"comment\",\"// Check for NaN.\"]\n],[\n   \"start\",\n  [\"storage.type.primitive.dart\",\"var\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"iMeantToDoThis\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.assignment.dart\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"keyword.operator.arithmetic.dart\",\"/\"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"keyword.control.dart\",\"assert\"],\n  [\"text\",\"(\"],\n  [\"identifier\",\"iMeantToDoThis\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"isNaN\"],\n  [\"text\",\"());\"]\n],[\n   \"start\"\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_diff.json",
    "content": "[[\n   \"start\",\n  [\"variable\",\"diff\"],\n  [\"variable\",\" --git\"],\n  [\"keyword\",\" a/lib/ace/edit_session.js\"],\n  [\"variable\",\" b/lib/ace/edit_session.js\"]\n],[\n   \"start\",\n  [\"variable\",\"index 23fc3fc..ed3b273 100644\"]\n],[\n   \"start\",\n  [\"constant.numeric\",\"---\"],\n  [\"meta.tag\",\" a/lib/ace/edit_session.js\"]\n],[\n   \"start\",\n  [\"constant.numeric\",\"+++\"],\n  [\"meta.tag\",\" b/lib/ace/edit_session.js\"]\n],[\n   \"start\",\n  [\"constant\",\"@@\"],\n  [\"constant.numeric\",\" -51,6 +51,7 \"],\n  [\"constant\",\"@@\"],\n  [\"comment.doc.tag\",\" var TextMode = require(\\\"./mode/text\\\").Mode;\"]\n],[\n   \"start\",\n  [\"invisible\",\" var Range = require(\\\"./range\\\").Range;\"]\n],[\n   \"start\",\n  [\"invisible\",\" var Document = require(\\\"./document\\\").Document;\"]\n],[\n   \"start\",\n  [\"invisible\",\" var BackgroundTokenizer = require(\\\"./background_tokenizer\\\").BackgroundTokenizer;\"]\n],[\n   \"start\",\n  [\"support.constant\",\"+\"],\n  [\"text\",\"var SearchHighlight = require(\\\"./search_highlight\\\").SearchHighlight;\"]\n],[\n   \"start\",\n  [\"text\",\" \"]\n],[\n   \"start\",\n  [\"invisible\",\" /**\"]\n],[\n   \"start\",\n  [\"invisible\",\"  * class EditSession\"]\n],[\n   \"start\",\n  [\"constant\",\"@@\"],\n  [\"constant.numeric\",\" -307,6 +308,13 \"],\n  [\"constant\",\"@@\"],\n  [\"comment.doc.tag\",\" var EditSession = function(text, mode) {\"]\n],[\n   \"start\",\n  [\"invisible\",\"         return token;\"]\n],[\n   \"start\",\n  [\"invisible\",\"     };\"]\n],[\n   \"start\",\n  [\"text\",\" \"]\n],[\n   \"start\",\n  [\"support.constant\",\"+\"],\n  [\"text\",\"    this.highlight = function(re) {\"]\n],[\n   \"start\",\n  [\"support.constant\",\"+\"],\n  [\"text\",\"        if (!this.$searchHighlight) {\"]\n],[\n   \"start\",\n  [\"support.constant\",\"+\"],\n  [\"text\",\"            var highlight = new SearchHighlight(null, \\\"ace_selected-word\\\", \\\"text\\\");\"]\n],[\n   \"start\",\n  [\"support.constant\",\"+\"],\n  [\"text\",\"            this.$searchHighlight = this.addDynamicMarker(highlight);\"]\n],[\n   \"start\",\n  [\"support.constant\",\"+\"],\n  [\"text\",\"        }\"]\n],[\n   \"start\",\n  [\"support.constant\",\"+\"],\n  [\"text\",\"        this.$searchHighlight.setRegexp(re);\"]\n],[\n   \"start\",\n  [\"support.constant\",\"+\"],\n  [\"text\",\"    }\"]\n],[\n   \"start\",\n  [\"invisible\",\"     /**\"]\n],[\n   \"start\",\n  [\"invisible\",\"     * EditSession.setUndoManager(undoManager)\"]\n],[\n   \"start\",\n  [\"invisible\",\"     * - undoManager (UndoManager): The new undo manager\"]\n],[\n   \"start\",\n  [\"constant\",\"@@\"],\n  [\"constant.numeric\",\" -556,7 +564,8 \"],\n  [\"constant\",\"@@\"],\n  [\"comment.doc.tag\",\" var EditSession = function(text, mode) {\"]\n],[\n   \"start\",\n  [\"invisible\",\"             type : type || \\\"line\\\",\"]\n],[\n   \"start\",\n  [\"invisible\",\"             renderer: typeof type == \\\"function\\\" ? type : null,\"]\n],[\n   \"start\",\n  [\"invisible\",\"             clazz : clazz,\"]\n],[\n   \"start\",\n  [\"support.function\",\"-\"],\n  [\"string\",\"            inFront: !!inFront\"]\n],[\n   \"start\",\n  [\"support.constant\",\"+\"],\n  [\"text\",\"            inFront: !!inFront,\"]\n],[\n   \"start\",\n  [\"support.constant\",\"+\"],\n  [\"text\",\"            id: id\"]\n],[\n   \"start\",\n  [\"invisible\",\"         }\"]\n],[\n   \"start\",\n  [\"text\",\" \"]\n],[\n   \"start\",\n  [\"invisible\",\"         if (inFront) {\"]\n],[\n   \"start\",\n  [\"variable\",\"diff\"],\n  [\"variable\",\" --git\"],\n  [\"keyword\",\" a/lib/ace/editor.js\"],\n  [\"variable\",\" b/lib/ace/editor.js\"]\n],[\n   \"start\",\n  [\"variable\",\"index 834e603..b27ec73 100644\"]\n],[\n   \"start\",\n  [\"constant.numeric\",\"---\"],\n  [\"meta.tag\",\" a/lib/ace/editor.js\"]\n],[\n   \"start\",\n  [\"constant.numeric\",\"+++\"],\n  [\"meta.tag\",\" b/lib/ace/editor.js\"]\n],[\n   \"start\",\n  [\"constant\",\"@@\"],\n  [\"constant.numeric\",\" -494,7 +494,7 \"],\n  [\"constant\",\"@@\"],\n  [\"comment.doc.tag\",\" var Editor = function(renderer, session) {\"]\n],[\n   \"start\",\n  [\"invisible\",\"      * Emitted when a selection has changed.\"]\n],[\n   \"start\",\n  [\"invisible\",\"      **/\"]\n],[\n   \"start\",\n  [\"invisible\",\"     this.onSelectionChange = function(e) {\"]\n],[\n   \"start\",\n  [\"support.function\",\"-\"],\n  [\"string\",\"        var session = this.getSession();\"]\n],[\n   \"start\",\n  [\"support.constant\",\"+\"],\n  [\"text\",\"        var session = this.session;\"]\n],[\n   \"start\",\n  [\"text\",\" \"]\n],[\n   \"start\",\n  [\"invisible\",\"         if (session.$selectionMarker) {\"]\n],[\n   \"start\",\n  [\"invisible\",\"             session.removeMarker(session.$selectionMarker);\"]\n],[\n   \"start\",\n  [\"constant\",\"@@\"],\n  [\"constant.numeric\",\" -509,12 +509,40 \"],\n  [\"constant\",\"@@\"],\n  [\"comment.doc.tag\",\" var Editor = function(renderer, session) {\"]\n],[\n   \"start\",\n  [\"invisible\",\"             this.$updateHighlightActiveLine();\"]\n],[\n   \"start\",\n  [\"invisible\",\"         }\"]\n],[\n   \"start\",\n  [\"text\",\" \"]\n],[\n   \"start\",\n  [\"support.function\",\"-\"],\n  [\"string\",\"        var self = this;\"]\n],[\n   \"start\",\n  [\"support.function\",\"-\"],\n  [\"string\",\"        if (this.$highlightSelectedWord && !this.$wordHighlightTimer)\"]\n],[\n   \"start\",\n  [\"support.function\",\"-\"],\n  [\"string\",\"            this.$wordHighlightTimer = setTimeout(function() {\"]\n],[\n   \"start\",\n  [\"support.function\",\"-\"],\n  [\"string\",\"                self.session.$mode.highlightSelection(self);\"]\n],[\n   \"start\",\n  [\"support.function\",\"-\"],\n  [\"string\",\"                self.$wordHighlightTimer = null;\"]\n],[\n   \"start\",\n  [\"support.function\",\"-\"],\n  [\"string\",\"            }, 30, this);\"]\n],[\n   \"start\",\n  [\"support.constant\",\"+\"],\n  [\"text\",\"        var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp()\"]\n],[\n   \"start\",\n  [\"invisible\",\"     };\"]\n],[\n   \"start\",\n  [\"variable\",\"diff\"],\n  [\"variable\",\" --git\"],\n  [\"keyword\",\" a/lib/ace/search_highlight.js\"],\n  [\"variable\",\" b/lib/ace/search_highlight.js\"]\n],[\n   \"start\",\n  [\"invisible\",\"new file mode 100644\"]\n],[\n   \"start\",\n  [\"variable\",\"index 0000000..b2df779\"]\n],[\n   \"start\",\n  [\"constant.numeric\",\"---\"],\n  [\"meta.tag\",\" /dev/null\"]\n],[\n   \"start\",\n  [\"constant.numeric\",\"+++\"],\n  [\"meta.tag\",\" b/lib/ace/search_highlight.js\"]\n],[\n   \"start\",\n  [\"constant\",\"@@\"],\n  [\"constant.numeric\",\" -0,0 +1,3 \"],\n  [\"constant\",\"@@\"]\n],[\n   \"start\",\n  [\"support.constant\",\"+\"],\n  [\"text\",\"new\"]\n],[\n   \"start\",\n  [\"support.constant\",\"+\"],\n  [\"text\",\"empty file\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_dot.json",
    "content": "[[\n   \"start\",\n  [\"comment\",\"// Original source: http://www.graphviz.org/content/lion_share\"]\n],[\n   \"start\",\n  [\"comment\",\"##\\\"A few people in the field of genetics are using dot to draw \\\"marriage node diagram\\\"  pedigree drawings.  Here is one I have done of a test pedigree from the FTREE pedigree drawing package (Lion Share was a racehorse).\\\" Contributed by David Duffy.\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"comment\",\"##Command to get the layout: \\\"dot -Tpng thisfile > thisfile.png\\\"\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"digraph\"],\n  [\"text\",\" Ped_Lion_Share           \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"comment\",\"# page = \\\"8.2677165,11.692913\\\" ;\"]\n],[\n   \"start\",\n  [\"variable\",\"ratio\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"auto\\\"\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"mincross \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"2.0\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"variable\",\"label\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"Pedigree Lion_Share\\\"\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"string\",\"\\\"001\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"shape\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"box     \"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"variable\",\"regular\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"style\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"filled\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"fillcolor\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"white   \"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"002\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"shape\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"box     \"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"variable\",\"regular\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"style\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"filled\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"fillcolor\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"white   \"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"003\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"shape\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"circle  \"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"variable\",\"regular\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"style\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"filled\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"fillcolor\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"white   \"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"004\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"shape\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"box     \"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"variable\",\"regular\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"style\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"filled\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"fillcolor\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"white   \"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"005\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"shape\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"box     \"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"variable\",\"regular\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"style\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"filled\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"fillcolor\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"white   \"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"006\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"shape\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"circle  \"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"variable\",\"regular\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"style\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"filled\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"fillcolor\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"white   \"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"007\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"shape\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"circle  \"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"variable\",\"regular\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"style\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"filled\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"fillcolor\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"white   \"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"009\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"shape\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"circle  \"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"variable\",\"regular\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"style\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"filled\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"fillcolor\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"white   \"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"014\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"shape\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"circle  \"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"variable\",\"regular\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"style\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"filled\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"fillcolor\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"white   \"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"015\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"shape\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"circle  \"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"variable\",\"regular\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"style\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"filled\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"fillcolor\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"white   \"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"016\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"shape\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"circle  \"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"variable\",\"regular\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"style\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"filled\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"fillcolor\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"white   \"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"ZZ01\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"shape\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"circle  \"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"variable\",\"regular\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"style\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"filled\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"fillcolor\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"white   \"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"ZZ02\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"shape\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"circle  \"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"variable\",\"regular\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"style\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"filled\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"fillcolor\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"white   \"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"017\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"shape\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"circle  \"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"variable\",\"regular\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"style\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"filled\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"fillcolor\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"white   \"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"012\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"shape\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"circle  \"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"variable\",\"regular\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"style\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"filled\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"fillcolor\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"white   \"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"008\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"shape\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"box     \"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"variable\",\"regular\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"style\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"filled\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"fillcolor\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"white   \"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"011\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"shape\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"box     \"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"variable\",\"regular\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"style\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"filled\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"fillcolor\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"white   \"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"013\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"shape\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"box     \"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"variable\",\"regular\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"style\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"filled\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"fillcolor\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"white   \"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"010\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"shape\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"box     \"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"variable\",\"regular\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"style\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"filled\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"fillcolor\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"white   \"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"023\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"shape\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"circle  \"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"variable\",\"regular\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"style\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"filled\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"fillcolor\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"white   \"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"020\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"shape\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"circle  \"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"variable\",\"regular\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"style\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"filled\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"fillcolor\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"white   \"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"021\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"shape\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"circle  \"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"variable\",\"regular\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"style\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"filled\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"fillcolor\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"white   \"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"018\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"shape\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"circle  \"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"variable\",\"regular\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"style\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"filled\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"fillcolor\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"white   \"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"025\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"shape\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"circle  \"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"variable\",\"regular\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"style\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"filled\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"fillcolor\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"white   \"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"019\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"shape\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"box     \"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"variable\",\"regular\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"style\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"filled\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"fillcolor\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"white   \"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"022\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"shape\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"box     \"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"variable\",\"regular\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"style\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"filled\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"fillcolor\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"white   \"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"024\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"shape\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"box     \"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"variable\",\"regular\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"style\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"filled\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"fillcolor\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"white   \"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"027\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"shape\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"circle  \"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"variable\",\"regular\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"style\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"filled\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"fillcolor\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"white   \"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"026\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"shape\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"box     \"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"variable\",\"regular\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"style\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"filled\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"fillcolor\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"white   \"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"028\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"shape\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"box     \"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"variable\",\"regular\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"style\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"filled\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"fillcolor\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"grey    \"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"marr0001\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"shape\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"diamond\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"style\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"filled\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"label\"],\n  [\"keyword.operator\",\"=\"],\n  [\"string\",\"\\\"\\\"\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"height\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\".\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"width\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\".\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"001\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"marr0001\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"dir\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"none\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"weight\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"007\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"marr0001\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"dir\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"none\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"weight\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"marr0001\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"017\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"dir\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"none\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"variable\",\"weight\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"2\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"marr0002\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"shape\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"diamond\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"style\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"filled\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"label\"],\n  [\"keyword.operator\",\"=\"],\n  [\"string\",\"\\\"\\\"\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"height\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\".\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"width\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\".\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"001\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"marr0002\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"dir\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"none\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"weight\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"ZZ02\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"marr0002\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"dir\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"none\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"weight\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"marr0002\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"012\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"dir\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"none\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"variable\",\"weight\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"2\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"marr0003\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"shape\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"diamond\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"style\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"filled\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"label\"],\n  [\"keyword.operator\",\"=\"],\n  [\"string\",\"\\\"\\\"\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"height\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\".\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"width\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\".\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"002\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"marr0003\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"dir\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"none\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"weight\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"003\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"marr0003\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"dir\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"none\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"weight\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"marr0003\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"008\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"dir\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"none\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"variable\",\"weight\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"2\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"marr0004\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"shape\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"diamond\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"style\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"filled\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"label\"],\n  [\"keyword.operator\",\"=\"],\n  [\"string\",\"\\\"\\\"\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"height\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\".\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"width\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\".\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"002\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"marr0004\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"dir\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"none\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"weight\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"006\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"marr0004\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"dir\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"none\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"weight\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"marr0004\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"011\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"dir\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"none\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"variable\",\"weight\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"2\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"marr0005\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"shape\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"diamond\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"style\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"filled\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"label\"],\n  [\"keyword.operator\",\"=\"],\n  [\"string\",\"\\\"\\\"\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"height\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\".\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"width\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\".\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"002\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"marr0005\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"dir\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"none\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"weight\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"ZZ01\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"marr0005\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"dir\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"none\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"weight\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"marr0005\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"013\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"dir\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"none\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"variable\",\"weight\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"2\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"marr0006\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"shape\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"diamond\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"style\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"filled\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"label\"],\n  [\"keyword.operator\",\"=\"],\n  [\"string\",\"\\\"\\\"\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"height\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\".\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"width\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\".\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"004\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"marr0006\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"dir\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"none\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"weight\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"009\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"marr0006\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"dir\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"none\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"weight\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"marr0006\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"010\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"dir\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"none\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"variable\",\"weight\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"2\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"marr0007\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"shape\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"diamond\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"style\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"filled\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"label\"],\n  [\"keyword.operator\",\"=\"],\n  [\"string\",\"\\\"\\\"\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"height\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\".\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"width\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\".\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"005\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"marr0007\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"dir\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"none\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"weight\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"015\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"marr0007\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"dir\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"none\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"weight\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"marr0007\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"023\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"dir\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"none\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"variable\",\"weight\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"2\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"marr0008\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"shape\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"diamond\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"style\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"filled\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"label\"],\n  [\"keyword.operator\",\"=\"],\n  [\"string\",\"\\\"\\\"\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"height\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\".\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"width\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\".\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"005\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"marr0008\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"dir\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"none\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"weight\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"016\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"marr0008\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"dir\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"none\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"weight\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"marr0008\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"020\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"dir\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"none\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"variable\",\"weight\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"2\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"marr0009\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"shape\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"diamond\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"style\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"filled\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"label\"],\n  [\"keyword.operator\",\"=\"],\n  [\"string\",\"\\\"\\\"\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"height\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\".\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"width\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\".\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"005\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"marr0009\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"dir\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"none\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"weight\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"012\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"marr0009\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"dir\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"none\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"weight\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"marr0009\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"021\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"dir\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"none\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"variable\",\"weight\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"2\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"marr0010\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"shape\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"diamond\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"style\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"filled\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"label\"],\n  [\"keyword.operator\",\"=\"],\n  [\"string\",\"\\\"\\\"\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"height\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\".\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"width\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\".\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"008\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"marr0010\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"dir\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"none\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"weight\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"017\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"marr0010\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"dir\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"none\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"weight\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"marr0010\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"018\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"dir\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"none\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"variable\",\"weight\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"2\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"marr0011\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"shape\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"diamond\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"style\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"filled\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"label\"],\n  [\"keyword.operator\",\"=\"],\n  [\"string\",\"\\\"\\\"\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"height\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\".\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"width\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\".\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"011\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"marr0011\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"dir\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"none\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"weight\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"023\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"marr0011\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"dir\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"none\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"weight\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"marr0011\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"025\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"dir\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"none\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"variable\",\"weight\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"2\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"marr0012\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"shape\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"diamond\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"style\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"filled\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"label\"],\n  [\"keyword.operator\",\"=\"],\n  [\"string\",\"\\\"\\\"\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"height\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\".\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"width\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\".\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"013\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"marr0012\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"dir\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"none\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"weight\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"014\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"marr0012\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"dir\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"none\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"weight\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"marr0012\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"019\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"dir\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"none\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"variable\",\"weight\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"2\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"marr0013\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"shape\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"diamond\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"style\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"filled\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"label\"],\n  [\"keyword.operator\",\"=\"],\n  [\"string\",\"\\\"\\\"\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"height\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\".\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"width\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\".\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"010\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"marr0013\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"dir\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"none\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"weight\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"021\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"marr0013\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"dir\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"none\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"weight\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"marr0013\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"022\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"dir\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"none\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"variable\",\"weight\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"2\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"marr0014\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"shape\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"diamond\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"style\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"filled\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"label\"],\n  [\"keyword.operator\",\"=\"],\n  [\"string\",\"\\\"\\\"\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"height\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\".\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"width\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\".\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"019\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"marr0014\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"dir\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"none\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"weight\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"020\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"marr0014\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"dir\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"none\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"weight\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"marr0014\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"024\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"dir\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"none\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"variable\",\"weight\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"2\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"marr0015\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"shape\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"diamond\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"style\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"filled\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"label\"],\n  [\"keyword.operator\",\"=\"],\n  [\"string\",\"\\\"\\\"\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"height\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\".\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"width\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\".\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"022\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"marr0015\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"dir\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"none\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"weight\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"025\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"marr0015\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"dir\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"none\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"weight\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"marr0015\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"027\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"dir\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"none\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"variable\",\"weight\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"2\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"marr0016\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"shape\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"diamond\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"style\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"filled\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"label\"],\n  [\"keyword.operator\",\"=\"],\n  [\"string\",\"\\\"\\\"\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"height\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\".\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"width\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\".\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"024\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"marr0016\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"dir\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"none\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"weight\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"018\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"marr0016\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"dir\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"none\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"weight\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"marr0016\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"026\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"dir\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"none\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"variable\",\"weight\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"2\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"marr0017\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"shape\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"diamond\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"style\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"filled\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"label\"],\n  [\"keyword.operator\",\"=\"],\n  [\"string\",\"\\\"\\\"\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"height\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\".\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"width\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\".\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"026\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"marr0017\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"dir\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"none\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"weight\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"027\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"marr0017\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"dir\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"none\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable\",\"weight\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"\\\"marr0017\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"028\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"variable\",\"dir\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"none\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"variable\",\"weight\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"2\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\"\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_drools.json",
    "content": "[[\n   \"block.comment\",\n  [\"comment\",\"/*\"]\n],[\n   \"block.comment\",\n  [\"comment.block\",\" * Copyright 2010 JBoss Inc\"]\n],[\n   \"block.comment\",\n  [\"comment.block\",\" *\"]\n],[\n   \"block.comment\",\n  [\"comment.block\",\" * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\"]\n],[\n   \"block.comment\",\n  [\"comment.block\",\" * you may not use this file except in compliance with the License.\"]\n],[\n   \"block.comment\",\n  [\"comment.block\",\" * You may obtain a copy of the License at\"]\n],[\n   \"block.comment\",\n  [\"comment.block\",\" *\"]\n],[\n   \"block.comment\",\n  [\"comment.block\",\" *      http://www.apache.org/licenses/LICENSE-2.0\"]\n],[\n   \"block.comment\",\n  [\"comment.block\",\" *\"]\n],[\n   \"block.comment\",\n  [\"comment.block\",\" * Unless required by applicable law or agreed to in writing, software\"]\n],[\n   \"block.comment\",\n  [\"comment.block\",\" * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\"]\n],[\n   \"block.comment\",\n  [\"comment.block\",\" * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\"]\n],[\n   \"block.comment\",\n  [\"comment.block\",\" * See the License for the specific language governing permissions and\"]\n],[\n   \"block.comment\",\n  [\"comment.block\",\" * limitations under the License.\"]\n],[\n   \"start\",\n  [\"comment.block\",\" */\"]\n],[\n   \"start\"\n],[\n   \"block.comment\",\n  [\"comment\",\"/*\"]\n],[\n   \"block.comment\",\n  [\"comment.block\",\" Original source\"]\n],[\n   \"block.comment\",\n  [\"comment.block\",\" https://github.com/droolsjbpm/drools/blob/master/drools-examples/\"]\n],[\n   \"block.comment\",\n  [\"comment.block\",\" http://docs.jboss.org/drools/\"]\n],[\n   \"start\",\n  [\"comment.block\",\"*/\"]\n],[\n   \"start\",\n  [\"keyword\",\"package\"],\n  [\"text\",\" \"],\n  [\"entity.name.type\",\"com.example.ace\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"import\"],\n  [\"text\",\" \"],\n  [\"entity.name.type\",\"java.math.BigDecimal\"]\n],[\n   \"start\",\n  [\"keyword\",\"import\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"function\"],\n  [\"text\",\" \"],\n  [\"entity.name.type\",\"my.package.Foo.hello\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"declare\"],\n  [\"text\",\" \"],\n  [\"entity.name.type\",\"FactType\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"entity.name.type\",\"@author\"],\n  [\"paren.lparen\",\"(\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Bob\"],\n  [\"text\",\" \"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"variable.other\",\"id\"],\n  [\"text\",\" \"],\n  [\"text\",\":\"],\n  [\"text\",\" \"],\n  [\"support.class\",\"String\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"variable.other\",\"name\"],\n  [\"text\",\" \"],\n  [\"text\",\":\"],\n  [\"text\",\" \"],\n  [\"support.class\",\"String\"],\n  [\"text\",\" \"],\n  [\"entity.name.type\",\"@maxLength\"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"100\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"entity.name.type\",\"@notnull\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"variable.other\",\"value\"],\n  [\"text\",\" \"],\n  [\"text\",\":\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"BigDecimal\"]\n],[\n   \"start\",\n  [\"keyword\",\"end\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"declare\"],\n  [\"text\",\" \"],\n  [\"entity.name.type\",\"FactType2\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"extends\"],\n  [\"text\",\" \"],\n  [\"entity.name.type\",\"AnotherType\"]\n],[\n   \"start\",\n  [\"keyword\",\"end\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"declare\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"trait\"],\n  [\"text\",\" \"],\n  [\"entity.name.type\",\"TraitType\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"extends\"],\n  [\"text\",\" \"],\n  [\"entity.name.type\",\"com.package.AnotherType\"]\n],[\n   \"start\",\n  [\"keyword\",\"end\"]\n],[\n   \"start\"\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"declare\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"trait\"],\n  [\"text\",\" \"],\n  [\"entity.name.type\",\"GoldenCustomer\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"variable.other\",\"balance\"],\n  [\"text\",\" \"],\n  [\"text\",\":\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"long\"],\n  [\"text\",\" \"],\n  [\"entity.name.type\",\"@Alias\"],\n  [\"paren.lparen\",\"(\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"org.acme.foo.accountBalance\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"keyword\",\"end\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"global\"],\n  [\"text\",\" \"],\n  [\"entity.name.type\",\"org.slf4j.Logger\"],\n  [\"text\",\" \"],\n  [\"variable\",\"logger\"]\n],[\n   \"start\"\n],[\n   \"doc-start\",\n  [\"comment.doc\",\"/**\"]\n],[\n   \"doc-start\",\n  [\"comment.doc\",\" * \"],\n  [\"comment.doc.tag\",\"@param\"],\n  [\"comment.doc\",\" name who we'll salute?\"]\n],[\n   \"start\",\n  [\"comment.doc\",\" */\"]\n],[\n   \"start\",\n  [\"keyword\",\"function\"],\n  [\"text\",\" \"],\n  [\"support.class\",\"String\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"hello\"],\n  [\"paren.lparen\",\"(\"],\n  [\"support.class\",\"String\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"name\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"return\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"Hello \\\"\"],\n  [\"keyword.operator\",\"+\"],\n  [\"identifier\",\"name\"],\n  [\"keyword.operator\",\"+\"],\n  [\"string\",\"\\\"!\\\"\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"rule\"],\n  [\"text\",\" \"],\n  [\"entity.name\",\"\\\"Trim all strings\\\"\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"dialect\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"java\\\"\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"no\"],\n  [\"keyword.operator\",\"-\"],\n  [\"keyword\",\"loop\"]\n],[\n   \"start\",\n  [\"keyword\",\"when\"],\n  [\"text\",\" \"],\n  [\"comment\",\"// fdsfds\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"variable.other\",\"$s\"],\n  [\"text\",\" \"],\n  [\"text\",\":\"],\n  [\"text\",\" \"],\n  [\"support.class\",\"String\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"a\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"==\"],\n  [\"text\",\" \"],\n  [\"constant.language\",\"null\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"||\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"==\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"empty\\\"\"],\n  [\"text\",\", \"],\n  [\"variable.other\",\"$g\"],\n  [\"text\",\" \"],\n  [\"text\",\":\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"size\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"identifier\",\"Cheese\"],\n  [\"paren.lparen\",\"(\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"name\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"matches\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"(Buffalo)?\\\\\\\\S*Mozarella\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"CheeseCounter\"],\n  [\"paren.lparen\",\"(\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"cheeses\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"contains\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"$var\"],\n  [\"text\",\" \"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"comment\",\"// contains with a variable\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"CheeseCounter\"],\n  [\"paren.lparen\",\"(\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"cheese\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"memberof\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"$matureCheeses\"],\n  [\"text\",\" \"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"Cheese\"],\n  [\"paren.lparen\",\"(\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"name\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"soundslike\"],\n  [\"text\",\" \"],\n  [\"string\",\"'foobar'\"],\n  [\"text\",\" \"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"Message\"],\n  [\"paren.lparen\",\"(\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"routingValue\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"str\"],\n  [\"paren.lparen\",\"[\"],\n  [\"identifier\",\"startsWith\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"R1\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"Cheese\"],\n  [\"paren.lparen\",\"(\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"name\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"in\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"stilton\\\"\"],\n  [\"text\",\", \"],\n  [\"string\",\"\\\"cheddar\\\"\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"$cheese\"],\n  [\"text\",\" \"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"Person\"],\n  [\"paren.lparen\",\"(\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"eval\"],\n  [\"paren.lparen\",\"(\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"age\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"==\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"girlAge\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"2\"],\n  [\"text\",\" \"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"sex\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"string\",\"'M'\"],\n  [\"text\",\" \"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"java-start\",\n  [\"keyword\",\"then\"]\n],[\n   \"java-doc-start\",\n  [\"text\",\"  \"],\n  [\"comment.doc\",\"/**\"]\n],[\n   \"java-doc-start\",\n  [\"comment.doc\",\"   * \"],\n  [\"comment.doc.tag.storage.type\",\"TODO\"],\n  [\"comment.doc\",\" There mus be better way\"]\n],[\n   \"java-start\",\n  [\"comment.doc\",\"   */\"]\n],[\n   \"java-start\",\n  [\"text\",\"  \"],\n  [\"support.function\",\"retract\"],\n  [\"lparen\",\"(\"],\n  [\"identifier\",\"$s\"],\n  [\"rparen\",\")\"],\n  [\"text\",\";\"]\n],[\n   \"java-start\",\n  [\"text\",\"  \"],\n  [\"support.function\",\"String\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"a\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"fd\\\"\"],\n  [\"text\",\";\"]\n],[\n   \"java-start\",\n  [\"text\",\"  \"],\n  [\"identifier\",\"a\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"toString\"],\n  [\"lparen\",\"(\"],\n  [\"rparen\",\")\"],\n  [\"text\",\";\"]\n],[\n   \"java-start\"\n],[\n   \"java-start\",\n  [\"text\",\"  \"],\n  [\"support.function\",\"insert\"],\n  [\"lparen\",\"(\"],\n  [\"identifier\",\"$s\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"trim\"],\n  [\"lparen\",\"(\"],\n  [\"rparen\",\"))\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"keyword\",\"end\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"query\"],\n  [\"text\",\" \"],\n  [\"entity.name\",\"isContainedIn\"],\n  [\"paren.lparen\",\"(\"],\n  [\"text\",\" \"],\n  [\"support.class\",\"String\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"x\"],\n  [\"text\",\", \"],\n  [\"support.class\",\"String\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"y\"],\n  [\"text\",\" \"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"identifier\",\"Location\"],\n  [\"paren.lparen\",\"(\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"x\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"y\"],\n  [\"text\",\"; \"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"or\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"paren.lparen\",\"(\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Location\"],\n  [\"paren.lparen\",\"(\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"z\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"y\"],\n  [\"text\",\"; \"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"and\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"isContainedIn\"],\n  [\"paren.lparen\",\"(\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"x\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"z\"],\n  [\"text\",\"; \"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"keyword\",\"end\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"rule\"],\n  [\"text\",\" \"],\n  [\"entity.name\",\"\\\"go\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"salience\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"10\"]\n],[\n   \"start\",\n  [\"keyword\",\"when\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"variable.other\",\"$s\"],\n  [\"text\",\" \"],\n  [\"text\",\":\"],\n  [\"text\",\" \"],\n  [\"support.class\",\"String\"],\n  [\"paren.lparen\",\"(\"],\n  [\"text\",\"  \"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"java-start\",\n  [\"keyword\",\"then\"]\n],[\n   \"java-start\",\n  [\"text\",\"    \"],\n  [\"support.function\",\"System\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"out\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"println\"],\n  [\"lparen\",\"(\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"$s\"],\n  [\"text\",\" \"],\n  [\"rparen\",\")\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"keyword\",\"end\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"rule\"],\n  [\"text\",\" \"],\n  [\"entity.name\",\"\\\"When all English buses are not red\\\"\"]\n],[\n   \"start\",\n  [\"keyword\",\"when\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"not\"],\n  [\"paren.lparen\",\"(\"],\n  [\"keyword\",\"forall\"],\n  [\"paren.lparen\",\"(\"],\n  [\"text\",\" \"],\n  [\"variable.other\",\"$bus\"],\n  [\"text\",\" \"],\n  [\"text\",\":\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Bus\"],\n  [\"paren.lparen\",\"(\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"nationality\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"==\"],\n  [\"text\",\" \"],\n  [\"string\",\"'english'\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"                \"],\n  [\"identifier\",\"Bus\"],\n  [\"paren.lparen\",\"(\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"this\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"==\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"$bus\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"color\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"string\",\"'red'\"],\n  [\"text\",\" \"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.rparen\",\"))\"]\n],[\n   \"java-start\",\n  [\"keyword\",\"then\"]\n],[\n   \"java-start\",\n  [\"text\",\"    \"],\n  [\"comment\",\"// What if all english buses are not red?\"]\n],[\n   \"start\",\n  [\"keyword\",\"end\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"rule\"],\n  [\"text\",\" \"],\n  [\"entity.name\",\"\\\"go1\\\"\"]\n],[\n   \"start\",\n  [\"keyword\",\"when\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"support.class\",\"String\"],\n  [\"paren.lparen\",\"(\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"this\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"==\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"go1\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"isContainedIn\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\"Office\\\"\"],\n  [\"text\",\", \"],\n  [\"string\",\"\\\"House\\\"\"],\n  [\"text\",\"; \"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"java-start\",\n  [\"keyword\",\"then\"]\n],[\n   \"java-start\",\n  [\"text\",\"    \"],\n  [\"support.function\",\"System\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"out\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"println\"],\n  [\"lparen\",\"(\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"office is in the house\\\"\"],\n  [\"text\",\" \"],\n  [\"rparen\",\")\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"keyword\",\"end\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"rule\"],\n  [\"text\",\" \"],\n  [\"entity.name\",\"\\\"go2\\\"\"]\n],[\n   \"start\",\n  [\"keyword\",\"when\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"support.class\",\"String\"],\n  [\"paren.lparen\",\"(\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"this\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"==\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"go2\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"isContainedIn\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\"Draw\\\"\"],\n  [\"text\",\", \"],\n  [\"string\",\"\\\"House\\\"\"],\n  [\"text\",\"; \"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"java-start\",\n  [\"keyword\",\"then\"]\n],[\n   \"java-start\",\n  [\"text\",\"    \"],\n  [\"support.function\",\"System\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"out\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"println\"],\n  [\"lparen\",\"(\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"Draw in the House\\\"\"],\n  [\"text\",\" \"],\n  [\"rparen\",\")\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"keyword\",\"end\"]\n],[\n   \"start\"\n],[\n   \"doc-start\",\n  [\"comment.doc\",\"/**\"]\n],[\n   \"doc-start\",\n  [\"comment.doc\",\" * Go Right\"]\n],[\n   \"start\",\n  [\"comment.doc\",\" */\"]\n],[\n   \"start\",\n  [\"keyword\",\"rule\"],\n  [\"text\",\" \"],\n  [\"entity.name\",\"GoRight\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"dialect\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"mvel\\\"\"],\n  [\"text\",\"  \"],\n  [\"keyword\",\"salience\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"support.class\",\"Math\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"abs\"],\n  [\"paren.lparen\",\"(\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"$df\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"colDiff\"],\n  [\"text\",\" \"],\n  [\"paren.rparen\",\"))\"],\n  [\"text\",\"  \"],\n  [\"keyword\",\"when\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"variable.other\",\"$df\"],\n  [\"text\",\"   \"],\n  [\"text\",\":\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"DirectionDiff\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"colDiff\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\">\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\" \"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"variable.other\",\"$target\"],\n  [\"text\",\" \"],\n  [\"text\",\":\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Cell\"],\n  [\"paren.lparen\",\"(\"],\n  [\"text\",\"  \"],\n  [\"identifier\",\"row\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"==\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"$df\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"row\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"col\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"==\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"$df\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"col\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"CellContents\"],\n  [\"paren.lparen\",\"(\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"cell\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"==\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"$target\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"cellType\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"!=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"CellType\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"WALL\"],\n  [\"text\",\" \"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"not\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Direction\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"character\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"==\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"$df\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"fromChar\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"horizontal\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"==\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Direction\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"RIGHT\"],\n  [\"text\",\" \"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"java-start\",\n  [\"keyword\",\"then\"]\n],[\n   \"java-start\",\n  [\"text\",\"    \"],\n  [\"support.function\",\"System\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"out\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"println\"],\n  [\"lparen\",\"(\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"monster right\\\"\"],\n  [\"text\",\" \"],\n  [\"rparen\",\")\"],\n  [\"text\",\";\"]\n],[\n   \"java-start\",\n  [\"text\",\"    \"],\n  [\"support.function\",\"retract\"],\n  [\"lparen\",\"(\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"$df\"],\n  [\"text\",\" \"],\n  [\"rparen\",\")\"],\n  [\"text\",\";\"]\n],[\n   \"java-start\",\n  [\"text\",\"    \"],\n  [\"support.function\",\"insert\"],\n  [\"lparen\",\"(\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"new\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Direction\"],\n  [\"lparen\",\"(\"],\n  [\"identifier\",\"$df\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"fromChar\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"Direction\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"RIGHT\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"Direction\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"NONE\"],\n  [\"text\",\" \"],\n  [\"rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"rparen\",\")\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"keyword\",\"end\"]\n],[\n   \"start\"\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_eiffel.json",
    "content": "[[\n   \"start\",\n  [\"keyword\",\"note\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"identifier\",\"description\"],\n  [\"keyword.operator\",\":\"],\n  [\"text\",\" \"],\n  [\"string.quoted.double\",\"\\\"Represents a person.\\\"\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"class\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"entity.name.type\",\"PERSON\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"create\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"identifier\",\"make\"],\n  [\"keyword.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"make_unknown\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"feature\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"],\n  [\"entity.name.type\",\"NONE\"],\n  [\"paren.rparen\",\"}\"],\n  [\"text\",\" \"],\n  [\"comment.line.double-dash\",\"-- Creation\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"identifier\",\"make\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"a_name\"],\n  [\"keyword.operator\",\":\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"like\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"name\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\\t\"],\n  [\"comment.line.double-dash\",\"-- Create a person with `a_name' as `name'.\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\"],\n  [\"keyword\",\"do\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\\t\"],\n  [\"identifier\",\"name\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\":=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"a_name\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\"],\n  [\"keyword\",\"ensure\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\\t\"],\n  [\"identifier\",\"name\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"a_name\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\"],\n  [\"keyword\",\"end\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"identifier\",\"make_unknown\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\"],\n  [\"keyword\",\"do\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"ensure\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\\t\"],\n  [\"identifier\",\"name\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.language\",\"Void\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\"],\n  [\"keyword\",\"end\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"feature\"],\n  [\"text\",\" \"],\n  [\"comment.line.double-dash\",\"-- Access\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"identifier\",\"name\"],\n  [\"keyword.operator\",\":\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"detachable\"],\n  [\"text\",\" \"],\n  [\"entity.name.type\",\"STRING\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\\t\"],\n  [\"comment.line.double-dash\",\"-- Full name or Void if unknown.\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"end\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_ejs.json",
    "content": "[[\n   \"start\",\n  [\"xml-pe.doctype.xml\",\"<!\"],\n  [\"xml-pe.doctype.xml\",\"DOCTYPE\"],\n  [\"text.whitespace.xml\",\" \"],\n  [\"xml-pe.xml\",\"html\"],\n  [\"xml-pe.doctype.xml\",\">\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"html\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"head\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"        \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"title\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\"Cloud9 Rocks!\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"title\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"head\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"body\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.table.tag-name.xml\",\"table\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"class\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"table\\\"\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"        \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.table.tag-name.xml\",\"tr\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"            \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.table.tag-name.xml\",\"th\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\"Name\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.table.tag-name.xml\",\"th\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"            \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.table.tag-name.xml\",\"th\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\"Size\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.table.tag-name.xml\",\"th\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"        \"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.table.tag-name.xml\",\"tr\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"        \"],\n  [\"markup.list.meta.tag\",\"<%\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"keyword.operator\",\"!\"],\n  [\"identifier\",\"isRoot\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"],\n  [\"text\",\" \"],\n  [\"markup.list.meta.tag\",\"%>\"]\n],[\n   \"start\",\n  [\"text.xml\",\"            \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.table.tag-name.xml\",\"tr\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"                \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.table.tag-name.xml\",\"td\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.anchor.tag-name.xml\",\"a\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"href\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"..\\\"\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\"..\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.anchor.tag-name.xml\",\"a\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.table.tag-name.xml\",\"td\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"                \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.table.tag-name.xml\",\"td\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.table.tag-name.xml\",\"td\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.table.tag-name.xml\",\"td\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"            \"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.table.tag-name.xml\",\"tr\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"        \"],\n  [\"markup.list.meta.tag\",\"<%\"],\n  [\"text\",\" \"],\n  [\"paren.rparen\",\"}\"],\n  [\"text\",\" \"],\n  [\"markup.list.meta.tag\",\"%>\"]\n],[\n   \"start\",\n  [\"text.xml\",\"        \"],\n  [\"markup.list.meta.tag\",\"<%\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"entries\"],\n  [\"punctuation.operator\",\".\"],\n  [\"identifier\",\"forEach\"],\n  [\"paren.lparen\",\"(\"],\n  [\"storage.type\",\"function\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"entry\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"],\n  [\"text\",\" \"],\n  [\"markup.list.meta.tag\",\"%>\"]\n],[\n   \"start\",\n  [\"text.xml\",\"            \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.table.tag-name.xml\",\"tr\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"                \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.table.tag-name.xml\",\"td\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"                    \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"span\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"class\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"glyphicon \"],\n  [\"markup.list.meta.tag\",\"<%=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"entry\"],\n  [\"punctuation.operator\",\".\"],\n  [\"identifier\",\"mime\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"==\"],\n  [\"text\",\" \"],\n  [\"string\",\"'directory'\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\"?\"],\n  [\"text\",\" \"],\n  [\"string\",\"'folder'\"],\n  [\"punctuation.operator\",\":\"],\n  [\"text\",\" \"],\n  [\"string\",\"'file'\"],\n  [\"markup.list.meta.tag\",\"%>\"],\n  [\"string.attribute-value.xml\",\"\\\"\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"span\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"                    \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.anchor.tag-name.xml\",\"a\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"href\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"\"],\n  [\"markup.list.meta.tag\",\"<%=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"entry\"],\n  [\"punctuation.operator\",\".\"],\n  [\"identifier\",\"name\"],\n  [\"text\",\" \"],\n  [\"markup.list.meta.tag\",\"%>\"],\n  [\"string.attribute-value.xml\",\"\\\"\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"markup.list.meta.tag\",\"<%=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"entry\"],\n  [\"punctuation.operator\",\".\"],\n  [\"identifier\",\"name\"],\n  [\"text\",\" \"],\n  [\"markup.list.meta.tag\",\"%>\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.anchor.tag-name.xml\",\"a\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"                \"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.table.tag-name.xml\",\"td\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"                \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.table.tag-name.xml\",\"td\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"markup.list.meta.tag\",\"<%=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"entry\"],\n  [\"punctuation.operator\",\".\"],\n  [\"identifier\",\"size\"],\n  [\"text\",\" \"],\n  [\"markup.list.meta.tag\",\"%>\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.table.tag-name.xml\",\"td\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"            \"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.table.tag-name.xml\",\"tr\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"        \"],\n  [\"markup.list.meta.tag\",\"<%\"],\n  [\"text\",\" \"],\n  [\"paren.rparen\",\"})\"],\n  [\"text\",\" \"],\n  [\"markup.list.meta.tag\",\"%>\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.table.tag-name.xml\",\"table\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"body\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"html\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_elixir.json",
    "content": "[[\n   \"start\",\n  [\"keyword.control.module.elixir\",\"defmodule\"],\n  [\"meta.module.elixir\",\" \"],\n  [\"entity.name.type.module.elixir\",\"HelloModule\"],\n  [\"text\",\" \"],\n  [\"keyword.control.elixir\",\"do\"]\n],[\n   \"comment.documentation.heredoc\",\n  [\"text\",\"  \"],\n  [\"comment.documentation.heredoc\",\"@moduledoc \\\"\\\"\\\"\"]\n],[\n   \"comment.documentation.heredoc\",\n  [\"comment.documentation.heredoc\",\"    This is supposed to be `markdown`.\"]\n],[\n   \"comment.documentation.heredoc\",\n  [\"comment.documentation.heredoc\",\"    __Yes__ this is [mark](http://down.format)\"]\n],[\n   \"comment.documentation.heredoc\"\n],[\n   \"comment.documentation.heredoc\",\n  [\"comment.documentation.heredoc\",\"    # Truly\"]\n],[\n   \"comment.documentation.heredoc\"\n],[\n   \"comment.documentation.heredoc\",\n  [\"comment.documentation.heredoc\",\"    ## marked\"]\n],[\n   \"comment.documentation.heredoc\"\n],[\n   \"comment.documentation.heredoc\",\n  [\"comment.documentation.heredoc\",\"    * with lists\"]\n],[\n   \"comment.documentation.heredoc\",\n  [\"comment.documentation.heredoc\",\"    * more\"]\n],[\n   \"comment.documentation.heredoc\",\n  [\"comment.documentation.heredoc\",\"    * and more\"]\n],[\n   \"comment.documentation.heredoc\"\n],[\n   \"comment.documentation.heredoc\",\n  [\"comment.documentation.heredoc\",\"        Even.with(code)\"]\n],[\n   \"comment.documentation.heredoc\",\n  [\"comment.documentation.heredoc\",\"        blocks |> with |> samples\"]\n],[\n   \"comment.documentation.heredoc\"\n],[\n   \"comment.documentation.heredoc\",\n  [\"comment.documentation.heredoc\",\"    _Docs are first class citizens in Elixir_ (Jose Valim)\"]\n],[\n   \"start\",\n  [\"comment.documentation.heredoc\",\"  \\\"\\\"\\\"\"]\n],[\n   \"start\",\n  [\"text\",\"  \"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"punctuation.definition.comment.elixir\",\"#\"],\n  [\"comment.line.number-sign.elixir\",\" A \\\"Hello world\\\" function\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword.control.elixir\",\"def\"],\n  [\"text\",\" some_fun \"],\n  [\"keyword.control.elixir\",\"do\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"variable.other.constant.elixir\",\"IO\"],\n  [\"punctuation.separator.method.elixir\",\".\"],\n  [\"text\",\"puts \"],\n  [\"punctuation.definition.string.begin.elixir\",\"\\\"\"],\n  [\"string.quoted.double.elixir\",\"Juhu Kinners!\"],\n  [\"punctuation.definition.string.end.elixir\",\"\\\"\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword.control.elixir\",\"end\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"punctuation.definition.comment.elixir\",\"#\"],\n  [\"comment.line.number-sign.elixir\",\" A private function\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword.control.elixir\",\"defp\"],\n  [\"text\",\" priv \"],\n  [\"keyword.control.elixir\",\"do\"]\n],[\n   \"punctuation.definition.string.begin.elixir7\",\n  [\"text\",\"    is_regex \"],\n  [\"punctuation.definition.string.begin.elixir\",\"~r\\\"\\\"\\\"\"]\n],[\n   \"punctuation.definition.string.begin.elixir7\",\n  [\"string.quoted.double.heredoc.elixir\",\"       This is a regex\"]\n],[\n   \"punctuation.definition.string.begin.elixir7\",\n  [\"string.quoted.double.heredoc.elixir\",\"       spanning several\"]\n],[\n   \"punctuation.definition.string.begin.elixir7\",\n  [\"string.quoted.double.heredoc.elixir\",\"       lines.\"]\n],[\n   \"start\",\n  [\"punctuation.definition.string.end.elixir\",\"    \\\"\\\"\\\"\"]\n],[\n   \"start\",\n  [\"text\",\"    x \"],\n  [\"keyword.operator.assignment.elixir\",\"=\"],\n  [\"text\",\" elem\"],\n  [\"punctuation.section.function.elixir\",\"(\"],\n  [\"punctuation.section.scope.elixir\",\"{\"],\n  [\"text\",\" \"],\n  [\"punctuation.definition.constant.elixir\",\":\"],\n  [\"constant.other.symbol.elixir\",\"a\"],\n  [\"punctuation.separator.object.elixir\",\",\"],\n  [\"text\",\" \"],\n  [\"punctuation.definition.constant.elixir\",\":\"],\n  [\"constant.other.symbol.elixir\",\"b\"],\n  [\"punctuation.separator.object.elixir\",\",\"],\n  [\"text\",\" \"],\n  [\"punctuation.definition.constant.elixir\",\":\"],\n  [\"constant.other.symbol.elixir\",\"c\"],\n  [\"text\",\" \"],\n  [\"punctuation.section.scope.elixir\",\"}\"],\n  [\"punctuation.separator.object.elixir\",\",\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.elixir\",\"0\"],\n  [\"punctuation.section.function.elixir\",\")\"],\n  [\"text\",\"  \"],\n  [\"punctuation.definition.comment.elixir\",\"#\"],\n  [\"comment.line.number-sign.elixir\",\"=> :a\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword.control.elixir\",\"end\"]\n],[\n   \"start\",\n  [\"keyword.control.elixir\",\"end\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"test_fun \"],\n  [\"keyword.operator.assignment.elixir\",\"=\"],\n  [\"text\",\" \"],\n  [\"keyword.control.elixir\",\"fn\"],\n  [\"punctuation.section.function.elixir\",\"(\"],\n  [\"text\",\"x\"],\n  [\"punctuation.section.function.elixir\",\")\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.arithmetic.elixir\",\"-\"],\n  [\"keyword.operator.comparison.elixir\",\">\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword.control.elixir\",\"cond\"],\n  [\"text\",\" \"],\n  [\"keyword.control.elixir\",\"do\"]\n],[\n   \"start\",\n  [\"text\",\"    x \"],\n  [\"keyword.operator.comparison.elixir\",\">\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.elixir\",\"10\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.arithmetic.elixir\",\"-\"],\n  [\"keyword.operator.comparison.elixir\",\">\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"punctuation.definition.constant.elixir\",\":\"],\n  [\"constant.other.symbol.elixir\",\"greater_than_ten\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"constant.language.elixir\",\"true\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.arithmetic.elixir\",\"-\"],\n  [\"keyword.operator.comparison.elixir\",\">\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"punctuation.definition.constant.elixir\",\":\"],\n  [\"constant.other.symbol.elixir\",\"maybe_ten\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword.control.elixir\",\"end\"]\n],[\n   \"start\",\n  [\"keyword.control.elixir\",\"end\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_elm.json",
    "content": "[[\n   \"start\",\n  [\"comment.start\",\"{-\"],\n  [\"comment\",\" Ace \"],\n  [\"comment.start\",\"{-\"],\n  [\"comment\",\" 4 \"],\n  [\"comment.end\",\"-}\"],\n  [\"comment\",\" Elm \"],\n  [\"comment.end\",\"-}\"]\n],[\n   \"start\",\n  [\"constant.language\",\"main\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"lift\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"clock\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"every\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"second\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"constant.language\",\"clock\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"t\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"collage\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"400\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"400\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"filled\"],\n  [\"text\",\"    \"],\n  [\"identifier\",\"lightGrey\"],\n  [\"text\",\"   \"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"ngon\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"12\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"110\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"                          \"],\n  [\"operator.punctuation\",\",\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"outlined\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"solid\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"grey\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"ngon\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"12\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"110\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"                          \"],\n  [\"operator.punctuation\",\",\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"hand\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"orange\"],\n  [\"text\",\"   \"],\n  [\"constant.numeric\",\"100\"],\n  [\"text\",\"  \"],\n  [\"identifier\",\"t\"]\n],[\n   \"start\",\n  [\"text\",\"                          \"],\n  [\"operator.punctuation\",\",\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"hand\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"charcoal\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"100\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"t\"],\n  [\"keyword.operator\",\"/\"],\n  [\"constant.numeric\",\"60\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"                          \"],\n  [\"operator.punctuation\",\",\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"hand\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"charcoal\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"60\"],\n  [\"text\",\"  \"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"t\"],\n  [\"keyword.operator\",\"/\"],\n  [\"constant.numeric\",\"720\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.rparen\",\"]\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"constant.language\",\"hand\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"clr\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"len\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"time\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"=\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"let\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"angle\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"degrees\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"90\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"-\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"6\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"*\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"inSeconds\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"time\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"in\"],\n  [\"text\",\"  \"],\n  [\"identifier\",\"traced\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"solid\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"clr\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"<|\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"segment\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"0\"],\n  [\"operator.punctuation\",\",\"],\n  [\"constant.numeric\",\"0\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"len\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"*\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"cos\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"angle\"],\n  [\"operator.punctuation\",\",\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"len\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"*\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"sin\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"angle\"],\n  [\"paren.rparen\",\")\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_erlang.json",
    "content": "[[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"punctuation.definition.comment.erlang\",\"%% A process whose only job is to keep a counter.\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"punctuation.definition.comment.erlang\",\"%% First version\"]\n],[\n   \"start\",\n  [\"meta.directive.module.erlang\",\"  \"],\n  [\"punctuation.section.directive.begin.erlang\",\"-\"],\n  [\"keyword.control.directive.module.erlang\",\"module\"],\n  [\"punctuation.definition.parameters.begin.erlang\",\"(\"],\n  [\"entity.name.type.class.module.definition.erlang\",\"counter\"],\n  [\"punctuation.definition.parameters.end.erlang\",\")\"],\n  [\"punctuation.section.directive.end.erlang\",\".\"]\n],[\n   \"start\",\n  [\"meta.directive.export.erlang\",\"  \"],\n  [\"punctuation.section.directive.begin.erlang\",\"-\"],\n  [\"keyword.control.directive.export.erlang\",\"export\"],\n  [\"punctuation.definition.parameters.begin.erlang\",\"(\"],\n  [\"punctuation.definition.list.begin.erlang\",\"[\"],\n  [\"entity.name.function.erlang\",\"start\"],\n  [\"punctuation.separator.function-arity.erlang\",\"/\"],\n  [\"constant.numeric.integer.decimal.erlang\",\"0\"],\n  [\"punctuation.separator.list.erlang\",\",\"],\n  [\"meta.structure.list.function.erlang\",\" \"],\n  [\"entity.name.function.erlang\",\"codeswitch\"],\n  [\"punctuation.separator.function-arity.erlang\",\"/\"],\n  [\"constant.numeric.integer.decimal.erlang\",\"1\"],\n  [\"punctuation.definition.list.end.erlang\",\"]\"],\n  [\"punctuation.definition.parameters.end.erlang\",\")\"],\n  [\"punctuation.section.directive.end.erlang\",\".\"]\n],[\n   \"start\",\n  [\"text\",\" \"]\n],[\n   \"start\",\n  [\"meta.function.erlang\",\"  \"],\n  [\"entity.name.function.definition.erlang\",\"start\"],\n  [\"punctuation.section.expression.begin.erlang\",\"(\"],\n  [\"punctuation.section.expression.end.erlang\",\")\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.symbolic.erlang\",\"->\"],\n  [\"text\",\" \"],\n  [\"entity.name.function.erlang\",\"loop\"],\n  [\"punctuation.definition.parameters.begin.erlang\",\"(\"],\n  [\"constant.numeric.integer.decimal.erlang\",\"0\"],\n  [\"punctuation.definition.parameters.end.erlang\",\")\"],\n  [\"punctuation.terminator.function.erlang\",\".\"]\n],[\n   \"start\",\n  [\"text\",\" \"]\n],[\n   [\"text6\",\"meta.function.erlang\"],\n  [\"meta.function.erlang\",\"  \"],\n  [\"entity.name.function.definition.erlang\",\"loop\"],\n  [\"punctuation.section.expression.begin.erlang\",\"(\"],\n  [\"variable.other.erlang\",\"Sum\"],\n  [\"punctuation.section.expression.end.erlang\",\")\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.symbolic.erlang\",\"->\"]\n],[\n   [\"keyword.control.receive.erlang\",\"text6\",\"text6\",\"meta.function.erlang\"],\n  [\"text\",\"    \"],\n  [\"keyword.control.receive.erlang\",\"receive\"]\n],[\n   [\"keyword.control.receive.erlang\",\"text6\",\"text6\",\"meta.function.erlang\"],\n  [\"meta.expression.receive.erlang\",\"       \"],\n  [\"punctuation.definition.tuple.begin.erlang\",\"{\"],\n  [\"constant.other.symbol.unquoted.erlang\",\"increment\"],\n  [\"punctuation.separator.tuple.erlang\",\",\"],\n  [\"meta.structure.tuple.erlang\",\" \"],\n  [\"variable.other.erlang\",\"Count\"],\n  [\"punctuation.definition.tuple.end.erlang\",\"}\"],\n  [\"meta.expression.receive.erlang\",\" \"],\n  [\"punctuation.separator.clause-head-body.erlang\",\"->\"]\n],[\n   [\"keyword.control.receive.erlang\",\"text6\",\"text6\",\"meta.function.erlang\"],\n  [\"meta.expression.receive.erlang\",\"          \"],\n  [\"entity.name.function.erlang\",\"loop\"],\n  [\"punctuation.definition.parameters.begin.erlang\",\"(\"],\n  [\"variable.other.erlang\",\"Sum\"],\n  [\"keyword.operator.symbolic.erlang\",\"+\"],\n  [\"variable.other.erlang\",\"Count\"],\n  [\"punctuation.definition.parameters.end.erlang\",\")\"],\n  [\"punctuation.separator.clauses.erlang\",\";\"]\n],[\n   [\"keyword.control.receive.erlang\",\"text6\",\"text6\",\"meta.function.erlang\"],\n  [\"meta.expression.receive.erlang\",\"       \"],\n  [\"punctuation.definition.tuple.begin.erlang\",\"{\"],\n  [\"constant.other.symbol.unquoted.erlang\",\"counter\"],\n  [\"punctuation.separator.tuple.erlang\",\",\"],\n  [\"meta.structure.tuple.erlang\",\" \"],\n  [\"variable.other.erlang\",\"Pid\"],\n  [\"punctuation.definition.tuple.end.erlang\",\"}\"],\n  [\"meta.expression.receive.erlang\",\" \"],\n  [\"punctuation.separator.clause-head-body.erlang\",\"->\"]\n],[\n   [\"keyword.control.receive.erlang\",\"text6\",\"text6\",\"meta.function.erlang\"],\n  [\"meta.expression.receive.erlang\",\"          \"],\n  [\"variable.other.erlang\",\"Pid\"],\n  [\"meta.expression.receive.erlang\",\" \"],\n  [\"keyword.operator.symbolic.erlang\",\"!\"],\n  [\"meta.expression.receive.erlang\",\" \"],\n  [\"punctuation.definition.tuple.begin.erlang\",\"{\"],\n  [\"constant.other.symbol.unquoted.erlang\",\"counter\"],\n  [\"punctuation.separator.tuple.erlang\",\",\"],\n  [\"meta.structure.tuple.erlang\",\" \"],\n  [\"variable.other.erlang\",\"Sum\"],\n  [\"punctuation.definition.tuple.end.erlang\",\"}\"],\n  [\"punctuation.separator.expressions.erlang\",\",\"]\n],[\n   [\"keyword.control.receive.erlang\",\"text6\",\"text6\",\"meta.function.erlang\"],\n  [\"meta.expression.receive.erlang\",\"          \"],\n  [\"entity.name.function.erlang\",\"loop\"],\n  [\"punctuation.definition.parameters.begin.erlang\",\"(\"],\n  [\"variable.other.erlang\",\"Sum\"],\n  [\"punctuation.definition.parameters.end.erlang\",\")\"],\n  [\"punctuation.separator.clauses.erlang\",\";\"]\n],[\n   [\"keyword.control.receive.erlang\",\"text6\",\"text6\",\"meta.function.erlang\"],\n  [\"meta.expression.receive.erlang\",\"       \"],\n  [\"constant.other.symbol.unquoted.erlang\",\"code_switch\"],\n  [\"meta.expression.receive.erlang\",\" \"],\n  [\"punctuation.separator.clause-head-body.erlang\",\"->\"]\n],[\n   [\"keyword.control.receive.erlang\",\"text6\",\"text6\",\"meta.function.erlang\"],\n  [\"meta.expression.receive.erlang\",\"          \"],\n  [\"keyword.operator.macro.erlang\",\"?\"],\n  [\"entity.name.function.macro.erlang\",\"MODULE\"],\n  [\"meta.expression.receive.erlang\",\":\"],\n  [\"entity.name.function.erlang\",\"codeswitch\"],\n  [\"punctuation.definition.parameters.begin.erlang\",\"(\"],\n  [\"variable.other.erlang\",\"Sum\"],\n  [\"punctuation.definition.parameters.end.erlang\",\")\"]\n],[\n   [\"keyword.control.receive.erlang\",\"text6\",\"text6\",\"meta.function.erlang\"],\n  [\"meta.expression.receive.erlang\",\"          \"],\n  [\"punctuation.definition.comment.erlang\",\"% Force the use of 'codeswitch/1' from the latest MODULE version\"]\n],[\n   \"start\",\n  [\"meta.expression.receive.erlang\",\"    \"],\n  [\"keyword.control.end.erlang\",\"end\"],\n  [\"punctuation.terminator.function.erlang\",\".\"]\n],[\n   \"start\",\n  [\"text\",\" \"]\n],[\n   \"start\",\n  [\"meta.function.erlang\",\"  \"],\n  [\"entity.name.function.definition.erlang\",\"codeswitch\"],\n  [\"punctuation.section.expression.begin.erlang\",\"(\"],\n  [\"variable.other.erlang\",\"Sum\"],\n  [\"punctuation.section.expression.end.erlang\",\")\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.symbolic.erlang\",\"->\"],\n  [\"text\",\" \"],\n  [\"entity.name.function.erlang\",\"loop\"],\n  [\"punctuation.definition.parameters.begin.erlang\",\"(\"],\n  [\"variable.other.erlang\",\"Sum\"],\n  [\"punctuation.definition.parameters.end.erlang\",\")\"],\n  [\"punctuation.terminator.function.erlang\",\".\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_forth.json",
    "content": "[[\n   \"start\",\n  [\"keyword.other.compile-only.forth\",\":\"],\n  [\"meta.block.forth\",\" \"],\n  [\"entity.name.function.forth\",\"HELLO\"],\n  [\"meta.block.forth\",\" \"],\n  [\"comment.line.parentheses.forth\",\" ( -- )\"],\n  [\"meta.block.forth\",\"  CR \"],\n  [\"string.quoted.double.forth\",\".\\\" Hello, world!\\\"\"],\n  [\"meta.block.forth\",\" \"],\n  [\"keyword.other.compile-only.forth\",\";\"],\n  [\"text\",\" \"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"HELLO <cr>\"]\n],[\n   \"start\",\n  [\"text\",\"Hello, world!\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword.other.compile-only.forth\",\":\"],\n  [\"meta.block.forth\",\" \"],\n  [\"entity.name.function.forth\",\"[CHAR]\"],\n  [\"meta.block.forth\",\"  \"],\n  [\"keyword.other.non-immediate.forth\",\" CHAR\"],\n  [\"meta.block.forth\",\" \"],\n  [\"keyword.other.compile-only.forth\",\" POSTPONE\"],\n  [\"meta.block.forth\",\" LITERAL \"],\n  [\"keyword.other.compile-only.forth\",\";\"],\n  [\"keyword.other.immediate.forth\",\" IMMEDIATE\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"constant.numeric.forth\",\"0\"],\n  [\"storage.type.forth\",\" value\"],\n  [\"text\",\" ii       \"],\n  [\"constant.numeric.forth\",\" 0\"],\n  [\"storage.type.forth\",\" value\"],\n  [\"text\",\" jj\"]\n],[\n   \"start\",\n  [\"constant.numeric.forth\",\"0\"],\n  [\"storage.type.forth\",\" value\"],\n  [\"text\",\" KeyAddr  \"],\n  [\"constant.numeric.forth\",\" 0\"],\n  [\"storage.type.forth\",\" value\"],\n  [\"text\",\" KeyLen\"]\n],[\n   \"start\",\n  [\"storage.type.forth\",\"create\"],\n  [\"text\",\" SArray  \"],\n  [\"constant.numeric.forth\",\" 256\"],\n  [\"text\",\" allot  \"],\n  [\"comment.line.backslash.forth\",\" \\\\ state array of 256 bytes\"]\n],[\n   \"start\",\n  [\"keyword.other.compile-only.forth\",\":\"],\n  [\"meta.block.forth\",\" \"],\n  [\"entity.name.function.forth\",\"KeyArray\"],\n  [\"meta.block.forth\",\"      KeyLen mod   KeyAddr \"],\n  [\"keyword.other.compile-only.forth\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword.other.compile-only.forth\",\":\"],\n  [\"meta.block.forth\",\" \"],\n  [\"entity.name.function.forth\",\"get_byte\"],\n  [\"meta.block.forth\",\"      + c@ \"],\n  [\"keyword.other.compile-only.forth\",\";\"]\n],[\n   \"start\",\n  [\"keyword.other.compile-only.forth\",\":\"],\n  [\"meta.block.forth\",\" \"],\n  [\"entity.name.function.forth\",\"set_byte\"],\n  [\"meta.block.forth\",\"      + c! \"],\n  [\"keyword.other.compile-only.forth\",\";\"]\n],[\n   \"start\",\n  [\"keyword.other.compile-only.forth\",\":\"],\n  [\"meta.block.forth\",\" \"],\n  [\"entity.name.function.forth\",\"as_byte\"],\n  [\"meta.block.forth\",\"      \"],\n  [\"constant.numeric.forth\",\" 255\"],\n  [\"meta.block.forth\",\" and \"],\n  [\"keyword.other.compile-only.forth\",\";\"]\n],[\n   \"start\",\n  [\"keyword.other.compile-only.forth\",\":\"],\n  [\"meta.block.forth\",\" \"],\n  [\"entity.name.function.forth\",\"reset_ij\"],\n  [\"meta.block.forth\",\"     \"],\n  [\"constant.numeric.forth\",\" 0\"],\n  [\"keyword.other.immediate.forth\",\" TO\"],\n  [\"meta.block.forth\",\" ii  \"],\n  [\"constant.numeric.forth\",\" 0\"],\n  [\"keyword.other.immediate.forth\",\" TO\"],\n  [\"meta.block.forth\",\" jj \"],\n  [\"keyword.other.compile-only.forth\",\";\"]\n],[\n   \"start\",\n  [\"keyword.other.compile-only.forth\",\":\"],\n  [\"meta.block.forth\",\" \"],\n  [\"entity.name.function.forth\",\"i_update\"],\n  [\"meta.block.forth\",\"     \"],\n  [\"constant.numeric.forth\",\" 1\"],\n  [\"meta.block.forth\",\" +   as_byte\"],\n  [\"keyword.other.immediate.forth\",\" TO\"],\n  [\"meta.block.forth\",\" ii \"],\n  [\"keyword.other.compile-only.forth\",\";\"]\n],[\n   \"start\",\n  [\"keyword.other.compile-only.forth\",\":\"],\n  [\"meta.block.forth\",\" \"],\n  [\"entity.name.function.forth\",\"j_update\"],\n  [\"meta.block.forth\",\"      ii SArray get_byte +   as_byte\"],\n  [\"keyword.other.immediate.forth\",\" TO\"],\n  [\"meta.block.forth\",\" jj \"],\n  [\"keyword.other.compile-only.forth\",\";\"]\n],[\n   \"keyword.other.compile-only.forth\",\n  [\"keyword.other.compile-only.forth\",\":\"],\n  [\"meta.block.forth\",\" \"],\n  [\"entity.name.function.forth\",\"swap_s_ij\"]\n],[\n   \"keyword.other.compile-only.forth\",\n  [\"meta.block.forth\",\"    jj SArray get_byte\"]\n],[\n   \"keyword.other.compile-only.forth\",\n  [\"meta.block.forth\",\"       ii SArray get_byte  jj SArray set_byte\"]\n],[\n   \"keyword.other.compile-only.forth\",\n  [\"meta.block.forth\",\"    ii SArray set_byte\"]\n],[\n   \"start\",\n  [\"keyword.other.compile-only.forth\",\";\"]\n],[\n   \"start\"\n],[\n   \"keyword.other.compile-only.forth\",\n  [\"keyword.other.compile-only.forth\",\":\"],\n  [\"meta.block.forth\",\" \"],\n  [\"entity.name.function.forth\",\"rc4_init\"],\n  [\"comment.line.parentheses.forth\",\" ( KeyAddr KeyLen -- )\"]\n],[\n   \"keyword.other.compile-only.forth\",\n  [\"meta.block.forth\",\"   \"],\n  [\"constant.numeric.forth\",\" 256\"],\n  [\"meta.block.forth\",\" min\"],\n  [\"keyword.other.immediate.forth\",\" TO\"],\n  [\"meta.block.forth\",\" KeyLen  \"],\n  [\"keyword.other.immediate.forth\",\" TO\"],\n  [\"meta.block.forth\",\" KeyAddr\"]\n],[\n   \"keyword.other.compile-only.forth\",\n  [\"meta.block.forth\",\"   \"],\n  [\"constant.numeric.forth\",\" 256 0\"],\n  [\"keyword.control.compile-only.forth\",\" DO\"],\n  [\"meta.block.forth\",\"   \"],\n  [\"variable.language.forth\",\"i\"],\n  [\"meta.block.forth\",\" \"],\n  [\"variable.language.forth\",\"i\"],\n  [\"meta.block.forth\",\" SArray set_byte  \"],\n  [\"keyword.control.compile-only.forth\",\" LOOP\"]\n],[\n   \"keyword.other.compile-only.forth\",\n  [\"meta.block.forth\",\"    reset_ij\"]\n],[\n   \"keyword.other.compile-only.forth\",\n  [\"meta.block.forth\",\"   \"],\n  [\"keyword.control.compile-only.forth\",\" BEGIN\"]\n],[\n   \"keyword.other.compile-only.forth\",\n  [\"meta.block.forth\",\"        ii KeyArray get_byte   jj +  j_update\"]\n],[\n   \"keyword.other.compile-only.forth\",\n  [\"meta.block.forth\",\"        swap_s_ij\"]\n],[\n   \"keyword.other.compile-only.forth\",\n  [\"meta.block.forth\",\"        ii\"],\n  [\"constant.numeric.forth\",\" 255\"],\n  [\"meta.block.forth\",\" <\"],\n  [\"keyword.control.compile-only.forth\",\" WHILE\"]\n],[\n   \"keyword.other.compile-only.forth\",\n  [\"meta.block.forth\",\"        ii i_update\"]\n],[\n   \"keyword.other.compile-only.forth\",\n  [\"meta.block.forth\",\"   \"],\n  [\"keyword.control.compile-only.forth\",\" REPEAT\"]\n],[\n   \"keyword.other.compile-only.forth\",\n  [\"meta.block.forth\",\"    reset_ij\"]\n],[\n   \"start\",\n  [\"keyword.other.compile-only.forth\",\";\"]\n],[\n   \"keyword.other.compile-only.forth\",\n  [\"keyword.other.compile-only.forth\",\":\"],\n  [\"meta.block.forth\",\" \"],\n  [\"entity.name.function.forth\",\"rc4_byte\"]\n],[\n   \"keyword.other.compile-only.forth\",\n  [\"meta.block.forth\",\"    ii i_update   jj j_update\"]\n],[\n   \"keyword.other.compile-only.forth\",\n  [\"meta.block.forth\",\"    swap_s_ij\"]\n],[\n   \"keyword.other.compile-only.forth\",\n  [\"meta.block.forth\",\"    ii SArray get_byte   jj SArray get_byte +   as_byte SArray get_byte  xor\"]\n],[\n   \"start\",\n  [\"keyword.other.compile-only.forth\",\";\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_fortran.json",
    "content": "[[\n   \"start\",\n  [\"keyword\",\"#include\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"globalDefines.h\\\"\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"comment\",\"!=========================================================\"]\n],[\n   \"start\",\n  [\"keyword\",\"program\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"main\"]\n],[\n   \"start\",\n  [\"comment\",\"!========================================================= \"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"use\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"params_module\"],\n  [\"text\",\", \"],\n  [\"keyword\",\"only\"],\n  [\"text\",\" : \"],\n  [\"identifier\",\"nx\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"ny\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"nz\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"implicit\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"none\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"storage.type\",\"integer\"],\n  [\"text\",\", \"],\n  [\"storage.modifier\",\"parameter\"],\n  [\"text\",\" :: \"],\n  [\"identifier\",\"g\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"9.81\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"storage.type\",\"real\"],\n  [\"text\",\", \"],\n  [\"storage.modifier\",\"allocatable\"],\n  [\"text\",\", \"],\n  [\"storage.modifier\",\"dimension\"],\n  [\"paren.lparen\",\"(\"],\n  [\"text\",\":,:,:\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" :: \"],\n  [\"identifier\",\"array\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"storage.type\",\"integer\"],\n  [\"text\",\" :: \"],\n  [\"identifier\",\"a\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"b\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"c\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"storage.type\",\"real\"],\n  [\"keyword.operator\",\"*\"],\n  [\"constant.numeric\",\"8\"],\n  [\"text\",\" :: \"],\n  [\"identifier\",\"x\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"y\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"z\"]\n],[\n   \"start\",\n  [\"text\",\"      \"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"b\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"5\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"c\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"7\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"#ifdef\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"ARRAY_COMP\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"support.function\",\"allocate\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"array\"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"10\"],\n  [\"text\",\",\"],\n  [\"constant.numeric\",\"10\"],\n  [\"text\",\",\"],\n  [\"constant.numeric\",\"10\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\", \"],\n  [\"keyword\",\"status\"],\n  [\"keyword.operator\",\"=\"],\n  [\"identifier\",\"a\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"write\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"c\"],\n  [\"text\",\",\"],\n  [\"string\",\"'(i5.5)'\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"b\"]\n],[\n   \"start\",\n  [\"keyword\",\"#endif\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"if\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"x\"],\n  [\"text\",\".\"],\n  [\"keyword.operator\",\"lt\"],\n  [\"constant.numeric\",\".5.0\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"then\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"identifier\",\"array\"],\n  [\"paren.lparen\",\"(\"],\n  [\"text\",\":,:,:\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"g\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"else\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"identifier\",\"array\"],\n  [\"paren.lparen\",\"(\"],\n  [\"text\",\":,:,:\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"x\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"-\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"y\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"endif\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"return\"]\n],[\n   \"start\",\n  [\"comment\",\"!========================================================    \"]\n],[\n   \"start\",\n  [\"keyword\",\"end\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"program\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"main\"]\n],[\n   \"start\",\n  [\"comment\",\"!========================================================\"]\n],[\n   \"start\"\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_ftl.json",
    "content": "[[\n   \"start\",\n  [\"keyword.function\",\"<#ftl\"],\n  [\"text\",\" \"],\n  [\"entity.other.attribute-name\",\"encoding\"],\n  [\"keyword.operator\",\"=\"],\n  [\"string\",\"\\\"utf-8\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"/>\"]\n],[\n   \"start\",\n  [\"keyword.function\",\"<#setting\"],\n  [\"text\",\" \"],\n  [\"entity.other.attribute-name\",\"locale\"],\n  [\"keyword.operator\",\"=\"],\n  [\"string\",\"\\\"en_US\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"/>\"]\n],[\n   \"start\",\n  [\"keyword.function\",\"<#import\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"library\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"as\"],\n  [\"text\",\" \"],\n  [\"variable\",\"lib\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"/>\"]\n],[\n   \"ftl-dcomment\",\n  [\"comment\",\"<#--\"]\n],[\n   \"ftl-dcomment\",\n  [\"comment\",\"    FreeMarker comment\"]\n],[\n   \"ftl-dcomment\",\n  [\"comment\",\"    ${abc} <#assign a=12 />\"]\n],[\n   \"start\",\n  [\"comment\",\"-->\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"xml-pe.doctype.xml\",\"<!\"],\n  [\"xml-pe.doctype.xml\",\"DOCTYPE\"],\n  [\"text.whitespace.xml\",\" \"],\n  [\"xml-pe.xml\",\"html\"],\n  [\"xml-pe.doctype.xml\",\">\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"html\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"lang\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"en-us\\\"\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"head\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"        \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"meta\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"charset\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"utf-8\\\"\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"meta.tag.punctuation.tag-close.xml\",\"/>\"]\n],[\n   \"start\",\n  [\"text.xml\",\"        \"]\n],[\n   \"start\",\n  [\"text.xml\",\"        \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"title\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"string.interpolated\",\"${\"],\n  [\"variable\",\"title\"],\n  [\"keyword.operator\",\"!\"],\n  [\"string\",\"\\\"FreeMarker\\\"\"],\n  [\"string.interpolated\",\"}\"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"title\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"head\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"body\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"]\n],[\n   \"start\",\n  [\"text.xml\",\"        \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"h1\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\"Hello \"],\n  [\"string.interpolated\",\"${\"],\n  [\"variable\",\"name\"],\n  [\"keyword.operator\",\"!\"],\n  [\"string\",\"\\\"\\\"\"],\n  [\"string.interpolated\",\"}\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"h1\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"        \"]\n],[\n   \"start\",\n  [\"text.xml\",\"        \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"p\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\"Today is: \"],\n  [\"string.interpolated\",\"${\"],\n  [\"language.variable\",\".now\"],\n  [\"support.function\",\"?date\"],\n  [\"string.interpolated\",\"}\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"p\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"        \"]\n],[\n   \"start\",\n  [\"text.xml\",\"        \"],\n  [\"keyword.function\",\"<#assign\"],\n  [\"text\",\" \"],\n  [\"variable\",\"x\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"13\"],\n  [\"keyword\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"        \"],\n  [\"keyword.function\",\"<#if\"],\n  [\"text\",\" \"],\n  [\"variable\",\"x\"],\n  [\"text\",\" \"],\n  [\"constant.character.entity\",\"&gt;\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"12\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"&&\"],\n  [\"text\",\" \"],\n  [\"variable\",\"x\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"lt\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"14\"],\n  [\"keyword\",\">\"],\n  [\"text.xml\",\"x equals 13: \"],\n  [\"string.interpolated\",\"${\"],\n  [\"variable\",\"x\"],\n  [\"string.interpolated\",\"}\"],\n  [\"keyword.function\",\"</#if\"],\n  [\"keyword\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"        \"]\n],[\n   \"start\",\n  [\"text.xml\",\"        \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"ul\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"            \"],\n  [\"keyword.function\",\"<#list\"],\n  [\"text\",\" \"],\n  [\"variable\",\"items\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"as\"],\n  [\"text\",\" \"],\n  [\"variable\",\"item\"],\n  [\"keyword\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"                \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"li\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"string.interpolated\",\"${\"],\n  [\"variable\",\"item_index\"],\n  [\"string.interpolated\",\"}\"],\n  [\"text.xml\",\": \"],\n  [\"string.interpolated\",\"${\"],\n  [\"variable\",\"item.name\"],\n  [\"keyword.operator\",\"!\"],\n  [\"support.function\",\"?split\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\"\"],\n  [\"constant.character.escape\",\"\\\\n\"],\n  [\"string\",\"\\\"\"],\n  [\"paren.rparen\",\")\"],\n  [\"paren.lparen\",\"[\"],\n  [\"constant.numeric\",\"0\"],\n  [\"paren.rparen\",\"]\"],\n  [\"string.interpolated\",\"}\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"li\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"            \"],\n  [\"keyword.function\",\"</#list\"],\n  [\"keyword\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"        \"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"ul\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"        \"]\n],[\n   \"start\",\n  [\"text.xml\",\"        User directive: \"],\n  [\"keyword.other\",\"<@lib.function\"],\n  [\"text\",\" \"],\n  [\"variable\",\"attr1\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.language\",\"true\"],\n  [\"text\",\" \"],\n  [\"variable\",\"attr2\"],\n  [\"keyword.operator\",\"=\"],\n  [\"string\",\"'value'\"],\n  [\"text\",\" \"],\n  [\"variable\",\"attr3\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"-42.12\"],\n  [\"keyword\",\">\"],\n  [\"text.xml\",\"Test\"],\n  [\"keyword.other\",\"</@lib.function\"],\n  [\"keyword\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"        \"],\n  [\"keyword.other\",\"<@anotherOne\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"/>\"]\n],[\n   \"start\",\n  [\"text.xml\",\"        \"]\n],[\n   \"start\",\n  [\"text.xml\",\"        \"],\n  [\"keyword.function\",\"<#if\"],\n  [\"text\",\" \"],\n  [\"variable\",\"variable\"],\n  [\"support.function.deprecated\",\"?exists\"],\n  [\"keyword\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"            Deprecated\"]\n],[\n   \"start\",\n  [\"text.xml\",\"        \"],\n  [\"keyword.function\",\"<#elseif\"],\n  [\"text\",\" \"],\n  [\"variable\",\"variable\"],\n  [\"support.function\",\"??\"],\n  [\"keyword\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"            Better\"]\n],[\n   \"start\",\n  [\"text.xml\",\"        \"],\n  [\"keyword.function\",\"<#else\"],\n  [\"keyword\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"            Default\"]\n],[\n   \"start\",\n  [\"text.xml\",\"        \"],\n  [\"keyword.function\",\"</#if\"],\n  [\"keyword\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"        \"]\n],[\n   \"start\",\n  [\"text.xml\",\"        \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.image.tag-name.xml\",\"img\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"src\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"images/\"],\n  [\"string.interpolated\",\"${\"],\n  [\"variable\",\"user.id\"],\n  [\"string.interpolated\",\"}\"],\n  [\"string.attribute-value.xml\",\".png\\\"\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"meta.tag.punctuation.tag-close.xml\",\"/>\"]\n],[\n   \"start\",\n  [\"text.xml\",\"        \"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"body\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"html\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\"\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_gcode.json",
    "content": "[[\n   \"start\",\n  [\"identifier\",\"O\"],\n  [\"constant.numeric\",\"003\"],\n  [\"text\",\" \"],\n  [\"comment\",\"(DIAMOND SQUARE)\"]\n],[\n   \"start\",\n  [\"comment\",\"N2\"],\n  [\"text\",\" \"],\n  [\"string\",\"G54\"],\n  [\"text\",\" \"],\n  [\"string\",\"G90\"],\n  [\"text\",\" \"],\n  [\"string\",\"G49\"],\n  [\"text\",\" \"],\n  [\"string\",\"G80\"]\n],[\n   \"start\",\n  [\"comment\",\"N3\"],\n  [\"text\",\" \"],\n  [\"string\",\"M6\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"T\"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\" \"],\n  [\"comment\",\"(1.ENDMILL)\"]\n],[\n   \"start\",\n  [\"comment\",\"N4\"],\n  [\"text\",\" \"],\n  [\"string\",\"M3\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"S\"],\n  [\"constant.numeric\",\"1800\"]\n],[\n   \"start\",\n  [\"comment\",\"N5\"],\n  [\"text\",\" \"],\n  [\"string\",\"G0\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"X\"],\n  [\"constant.numeric\",\"-.6\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Y\"],\n  [\"constant.numeric\",\"2.050\"]\n],[\n   \"start\",\n  [\"comment\",\"N6\"],\n  [\"text\",\" \"],\n  [\"string\",\"G43\"],\n  [\"text\",\"  \"],\n  [\"identifier\",\"H\"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\"  \"],\n  [\"identifier\",\"Z\"],\n  [\"constant.numeric\",\".1\"]\n],[\n   \"start\",\n  [\"comment\",\"N7\"],\n  [\"text\",\" \"],\n  [\"string\",\"G1\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Z\"],\n  [\"constant.numeric\",\"-.3\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"F\"],\n  [\"constant.numeric\",\"50.\"]\n],[\n   \"start\",\n  [\"comment\",\"N8\"],\n  [\"text\",\" \"],\n  [\"string\",\"G41\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"D\"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Y\"],\n  [\"constant.numeric\",\"1.45\"]\n],[\n   \"start\",\n  [\"comment\",\"N9\"],\n  [\"text\",\" \"],\n  [\"string\",\"G1\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"X\"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"F\"],\n  [\"constant.numeric\",\"20.\"]\n],[\n   \"start\",\n  [\"comment\",\"N10\"],\n  [\"text\",\" \"],\n  [\"string\",\"G2\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"J\"],\n  [\"constant.numeric\",\"-1.45\"]\n],[\n   \"start\",\n  [\"comment\",\"(CUTTER COMP CANCEL)\"]\n],[\n   \"start\",\n  [\"comment\",\"N11\"],\n  [\"text\",\" \"],\n  [\"string\",\"G1\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Z\"],\n  [\"constant.numeric\",\"-.2\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"F\"],\n  [\"constant.numeric\",\"50.\"]\n],[\n   \"start\",\n  [\"comment\",\"N12\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Y\"],\n  [\"constant.numeric\",\"-.990\"]\n],[\n   \"start\",\n  [\"comment\",\"N13\"],\n  [\"text\",\" \"],\n  [\"string\",\"G40\"]\n],[\n   \"start\",\n  [\"comment\",\"N14\"],\n  [\"text\",\" \"],\n  [\"string\",\"G0\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"X\"],\n  [\"constant.numeric\",\"-.6\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Y\"],\n  [\"constant.numeric\",\"1.590\"]\n],[\n   \"start\",\n  [\"comment\",\"N15\"],\n  [\"text\",\" \"],\n  [\"string\",\"G0\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Z\"],\n  [\"constant.numeric\",\".1\"]\n],[\n   \"start\",\n  [\"comment\",\"N16\"],\n  [\"text\",\" \"],\n  [\"string\",\"M5\"],\n  [\"text\",\" \"],\n  [\"string\",\"G49\"],\n  [\"text\",\" \"],\n  [\"string\",\"G28\"],\n  [\"text\",\" \"],\n  [\"string\",\"G91\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Z\"],\n  [\"constant.numeric\",\"0\"]\n],[\n   \"start\",\n  [\"comment\",\"N17\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"CALL\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"O\"],\n  [\"constant.numeric\",\"9456\"]\n],[\n   \"start\",\n  [\"comment\",\"N18\"],\n  [\"text\",\" #\"],\n  [\"constant.numeric\",\"500\"],\n  [\"text\",\"=\"],\n  [\"constant.numeric\",\"0.004\"]\n],[\n   \"start\",\n  [\"comment\",\"N19\"],\n  [\"text\",\" #\"],\n  [\"constant.numeric\",\"503\"],\n  [\"text\",\"=\"],\n  [\"paren.lparen\",\"[\"],\n  [\"text\",\"#\"],\n  [\"constant.numeric\",\"500\"],\n  [\"text\",\"+#\"],\n  [\"constant.numeric\",\"501\"],\n  [\"paren.rparen\",\"]\"]\n],[\n   \"start\",\n  [\"comment\",\"N20\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"VC\"],\n  [\"constant.numeric\",\"45\"],\n  [\"text\",\"=\"],\n  [\"constant.numeric\",\"0.0006\"]\n],[\n   \"start\",\n  [\"identifier\",\"VS\"],\n  [\"constant.numeric\",\"4\"],\n  [\"text\",\"=\"],\n  [\"constant.numeric\",\"0.0007\"]\n],[\n   \"start\",\n  [\"comment\",\"N21\"],\n  [\"text\",\" \"],\n  [\"string\",\"G90\"],\n  [\"text\",\" \"],\n  [\"string\",\"G10\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"L\"],\n  [\"constant.numeric\",\"20\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"P\"],\n  [\"constant.numeric\",\"3\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"X\"],\n  [\"constant.numeric\",\"5.\"],\n  [\"identifier\",\"Y\"],\n  [\"constant.numeric\",\"4.\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Z\"],\n  [\"constant.numeric\",\"6.567\"]\n],[\n   \"start\",\n  [\"comment\",\"N22\"],\n  [\"text\",\" \"],\n  [\"string\",\"G0\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"X\"],\n  [\"constant.numeric\",\"5000\"]\n],[\n   \"start\",\n  [\"comment\",\"N23\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"IF\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"text\",\"#\"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"LT\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0.370\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"GOTO\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"49\"]\n],[\n   \"start\",\n  [\"comment\",\"N24\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"X\"],\n  [\"constant.numeric\",\"-0.678\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Y\"],\n  [\"constant.numeric\",\"+.990\"]\n],[\n   \"start\",\n  [\"comment\",\"N25\"],\n  [\"text\",\" \"],\n  [\"string\",\"G84.3\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"X\"],\n  [\"constant.numeric\",\"-0.1\"]\n],[\n   \"start\",\n  [\"comment\",\"N26\"],\n  [\"text\",\" #\"],\n  [\"constant.numeric\",\"4\"],\n  [\"text\",\"=#\"],\n  [\"constant.numeric\",\"5\"],\n  [\"text\",\"*\"],\n  [\"identifier\",\"COS\"],\n  [\"paren.lparen\",\"[\"],\n  [\"constant.numeric\",\"45\"],\n  [\"paren.rparen\",\"]\"]\n],[\n   \"start\",\n  [\"comment\",\"N27\"],\n  [\"text\",\" #\"],\n  [\"constant.numeric\",\"4\"],\n  [\"text\",\"=#\"],\n  [\"constant.numeric\",\"5\"],\n  [\"text\",\"*\"],\n  [\"identifier\",\"SIN\"],\n  [\"paren.lparen\",\"[\"],\n  [\"constant.numeric\",\"45\"],\n  [\"paren.rparen\",\"]\"]\n],[\n   \"start\",\n  [\"comment\",\"N28\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"VZOFZ\"],\n  [\"text\",\"=\"],\n  [\"constant.numeric\",\"652.9658\"]\n],[\n   \"start\",\n  [\"text\",\"%\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_gherkin.json",
    "content": "[[\n   \"start\",\n  [\"variable.parameter\",\"@these\"],\n  [\"text\",\" \"],\n  [\"variable.parameter\",\"@_are_\"],\n  [\"text\",\" \"],\n  [\"variable.parameter\",\"@tags\"]\n],[\n   \"start\",\n  [\"keyword\",\"Feature:\"],\n  [\"text\",\" Serve coffee\"]\n],[\n   \"start\",\n  [\"text\",\"  Coffee should not be served until paid for\"]\n],[\n   \"start\",\n  [\"text\",\"  Coffee should not be served until the button has been pressed\"]\n],[\n   \"start\",\n  [\"text\",\"  If there is no coffee left then money should be refunded\"]\n],[\n   \"start\",\n  [\"text\",\"  \"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"Scenario Outline:\"],\n  [\"text\",\" Eating\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"Given\"],\n  [\"text\",\" there are \"],\n  [\"comment\",\"<start>\"],\n  [\"text\",\" cucumbers\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"When\"],\n  [\"text\",\" I eat \"],\n  [\"comment\",\"<eat>\"],\n  [\"text\",\" cucumbers\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"Then\"],\n  [\"text\",\" I should have \"],\n  [\"comment\",\"<left>\"],\n  [\"text\",\" cucumbers\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"Examples:\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"comment\",\"|\"],\n  [\"string\",\" start \"],\n  [\"comment\",\"|\"],\n  [\"string\",\" eat \"],\n  [\"comment\",\"|\"],\n  [\"string\",\" left \"],\n  [\"comment\",\"|\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"comment\",\"|\"],\n  [\"string\",\"  12   \"],\n  [\"comment\",\"|\"],\n  [\"string\",\"  5  \"],\n  [\"comment\",\"|\"],\n  [\"string\",\"  7   \"],\n  [\"comment\",\"|\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"comment\",\"|\"],\n  [\"string\",\"  @20  \"],\n  [\"comment\",\"|\"],\n  [\"string\",\"  5  \"],\n  [\"comment\",\"|\"],\n  [\"string\",\"  15  \"],\n  [\"comment\",\"|\"],\n  [\"string\",\"    \"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"Scenario:\"],\n  [\"text\",\" Buy last coffee\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"Given\"],\n  [\"text\",\" there are \"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\" coffees left in the machine\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"And\"],\n  [\"text\",\" I have deposited \"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\"$ \"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"When\"],\n  [\"text\",\" I press the coffee button\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"Then\"],\n  [\"text\",\" I should be served a \"],\n  [\"string\",\"\\\"coffee\\\"\"]\n],[\n   \"start\",\n  [\"text\",\"    \"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"comment\",\"# this a comment\"]\n],[\n   \"start\",\n  [\"text\",\"  \"]\n],[\n   \"qqstring3\",\n  [\"text\",\"  \"],\n  [\"string\",\"\\\"\\\"\\\"\"]\n],[\n   \"qqstring3\",\n  [\"string\",\"  this is a \"]\n],[\n   \"qqstring3\",\n  [\"string\",\"  pystring\"]\n],[\n   \"start\",\n  [\"string\",\"  \\\"\\\"\\\"\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_gitignore.json",
    "content": "[[\n   \"start\",\n  [\"comment\",\"# A sample .gitignore file.\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\".buildlog\"]\n],[\n   \"start\",\n  [\"text\",\".DS_Store\"]\n],[\n   \"start\",\n  [\"text\",\".svn\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"comment\",\"# Negated patterns:\"]\n],[\n   \"start\",\n  [\"keyword\",\"!foo.bar\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"comment\",\"# Also ignore user settings...\"]\n],[\n   \"start\",\n  [\"text\",\"/.settings\"]\n],[\n   \"start\"\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_glsl.json",
    "content": "[[\n   \"start\",\n  [\"keyword\",\"uniform\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"float\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"amplitude\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"keyword\",\"attribute\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"float\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"displacement\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"keyword\",\"varying\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"vec3\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"vNormal\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"void\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"main\"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"vNormal\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"normal\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"  \"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"comment\",\"// multiply our displacement by the\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"comment\",\"// amplitude. The amp will get animated\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"comment\",\"// so we'll have animated displacement\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"vec3\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"newPosition\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"position\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"]\n],[\n   \"start\",\n  [\"text\",\"                       \"],\n  [\"identifier\",\"normal\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"*\"],\n  [\"text\",\" \"]\n],[\n   \"start\",\n  [\"text\",\"                       \"],\n  [\"keyword\",\"vec3\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"displacement\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"*\"]\n],[\n   \"start\",\n  [\"text\",\"                            \"],\n  [\"identifier\",\"amplitude\"],\n  [\"paren.rparen\",\")\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"constant.language\",\"gl_Position\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"projectionMatrix\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"*\"]\n],[\n   \"start\",\n  [\"text\",\"                  \"],\n  [\"identifier\",\"modelViewMatrix\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"*\"]\n],[\n   \"start\",\n  [\"text\",\"                  \"],\n  [\"keyword\",\"vec4\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"newPosition\"],\n  [\"punctuation.operator\",\",\"],\n  [\"constant.numeric\",\"1.0\"],\n  [\"paren.rparen\",\")\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_gobstones.json",
    "content": "[[\n   \"start\",\n  [\"keyword\",\"program\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"{\"]\n],[\n   \"comment\",\n  [\"text\",\"    \"],\n  [\"comment\",\"/*\"]\n],[\n   \"comment\",\n  [\"comment\",\"     * A gobstons multiline comment\"]\n],[\n   \"comment\",\n  [\"comment\",\"     * Taken from:\"]\n],[\n   \"comment\",\n  [\"comment\",\"     * http://www.exploringbinary.com/java-hangs-when-converting-2-2250738585072012e-308/\\\"\"]\n],[\n   \"start\",\n  [\"comment\",\"     */\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"sumar\"],\n  [\"lparen\",\"(\"],\n  [\"constant.numeric\",\"2\"],\n  [\"keyword.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"3\"],\n  [\"rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"function\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"sumar\"],\n  [\"lparen\",\"(\"],\n  [\"identifier\",\"a\"],\n  [\"keyword.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"b\"],\n  [\"rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"identifier\",\"r\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\":=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"a\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"b\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"comment\",\"// unreachable code\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"comment\",\"-- unreachable code\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"comment\",\"# unreachable code\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"procedure\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"hacerAlgo\"],\n  [\"lparen\",\"(\"],\n  [\"rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"support.function\",\"Mover\"],\n  [\"lparen\",\"(\"],\n  [\"support.type\",\"Este\"],\n  [\"rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"support.function\",\"Poner\"],\n  [\"lparen\",\"(\"],\n  [\"support.type\",\"Rojo\"],\n  [\"rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"support.function\",\"Sacar\"],\n  [\"lparen\",\"(\"],\n  [\"support.type\",\"Azul\"],\n  [\"rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"rparen\",\"}\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_golang.json",
    "content": "[[\n   \"start\",\n  [\"comment\",\"// Concurrent computation of pi.\"]\n],[\n   \"start\",\n  [\"comment\",\"// See http://goo.gl/ZuTZM.\"]\n],[\n   \"start\",\n  [\"comment\",\"//\"]\n],[\n   \"start\",\n  [\"comment\",\"// This demonstrates Go's ability to handle\"]\n],[\n   \"start\",\n  [\"comment\",\"// large numbers of concurrent processes.\"]\n],[\n   \"start\",\n  [\"comment\",\"// It is an unreasonable way to calculate pi.\"]\n],[\n   \"start\",\n  [\"keyword\",\"package\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"main\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"import\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"string\",\"\\\"fmt\\\"\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"string\",\"\\\"math\\\"\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"func\"],\n  [\"text\",\" \"],\n  [\"entity.name.function\",\"main\"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"fmt\"],\n  [\"punctuation.operator\",\".\"],\n  [\"support.function\",\"Println\"],\n  [\"paren.lparen\",\"(\"],\n  [\"support.function\",\"pi\"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"5000\"],\n  [\"paren.rparen\",\"))\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"comment\",\"// pi launches n goroutines to compute an\"]\n],[\n   \"start\",\n  [\"comment\",\"// approximation of pi.\"]\n],[\n   \"start\",\n  [\"keyword\",\"func\"],\n  [\"text\",\" \"],\n  [\"entity.name.function\",\"pi\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"n\"],\n  [\"text\",\" \"],\n  [\"support.type\",\"int\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"support.type\",\"float64\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"ch\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\":\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"make\"],\n  [\"paren.lparen\",\"(\"],\n  [\"keyword\",\"chan\"],\n  [\"text\",\" \"],\n  [\"support.type\",\"float64\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"for\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"k\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\":\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"punctuation.operator\",\";\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"k\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"<=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"n\"],\n  [\"punctuation.operator\",\";\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"k\"],\n  [\"keyword.operator\",\"++\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"keyword\",\"go\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"term\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"ch\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"support.type\",\"float64\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"k\"],\n  [\"paren.rparen\",\"))\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"f\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\":\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0.0\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"for\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"k\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\":\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"punctuation.operator\",\";\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"k\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"<=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"n\"],\n  [\"punctuation.operator\",\";\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"k\"],\n  [\"keyword.operator\",\"++\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"identifier\",\"f\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+=\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"<-\"],\n  [\"identifier\",\"ch\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"return\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"f\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"func\"],\n  [\"text\",\" \"],\n  [\"entity.name.function\",\"term\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"ch\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"chan\"],\n  [\"text\",\" \"],\n  [\"support.type\",\"float64\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"k\"],\n  [\"text\",\" \"],\n  [\"support.type\",\"float64\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"ch\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"<-\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"4\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"*\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"math\"],\n  [\"punctuation.operator\",\".\"],\n  [\"support.function\",\"Pow\"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"-1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"k\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" / \"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"2\"],\n  [\"keyword.operator\",\"*\"],\n  [\"identifier\",\"k\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\"\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_groovy.json",
    "content": "[[\n   \"start\",\n  [\"comment\",\"//http://groovy.codehaus.org/Martin+Fowler%27s+closure+examples+in+Groovy\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"class\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Employee\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"def\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"name\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"salary\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"boolean\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"manager\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"support.function\",\"String\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"toString\"],\n  [\"lparen\",\"(\"],\n  [\"rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"{\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"return\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"name\"],\n  [\"text\",\" \"],\n  [\"rparen\",\"}\"]\n],[\n   \"start\",\n  [\"rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"def\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"emps\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"[\"],\n  [\"keyword\",\"new\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Employee\"],\n  [\"lparen\",\"(\"],\n  [\"identifier\",\"name\"],\n  [\"text\",\":\"],\n  [\"string\",\"'Guillaume'\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"manager\"],\n  [\"text\",\":\"],\n  [\"constant.language.boolean\",\"true\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"salary\"],\n  [\"text\",\":\"],\n  [\"constant.numeric\",\"200\"],\n  [\"rparen\",\")\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"new\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Employee\"],\n  [\"lparen\",\"(\"],\n  [\"identifier\",\"name\"],\n  [\"text\",\":\"],\n  [\"string\",\"'Graeme'\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"manager\"],\n  [\"text\",\":\"],\n  [\"constant.language.boolean\",\"true\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"salary\"],\n  [\"text\",\":\"],\n  [\"constant.numeric\",\"200\"],\n  [\"rparen\",\")\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"new\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Employee\"],\n  [\"lparen\",\"(\"],\n  [\"identifier\",\"name\"],\n  [\"text\",\":\"],\n  [\"string\",\"'Dierk'\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"manager\"],\n  [\"text\",\":\"],\n  [\"constant.language.boolean\",\"false\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"salary\"],\n  [\"text\",\":\"],\n  [\"constant.numeric\",\"151\"],\n  [\"rparen\",\")\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"new\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Employee\"],\n  [\"lparen\",\"(\"],\n  [\"identifier\",\"name\"],\n  [\"text\",\":\"],\n  [\"string\",\"'Bernd'\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"manager\"],\n  [\"text\",\":\"],\n  [\"constant.language.boolean\",\"false\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"salary\"],\n  [\"text\",\":\"],\n  [\"constant.numeric\",\"50\"],\n  [\"rparen\",\")]\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"def\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"managers\"],\n  [\"lparen\",\"(\"],\n  [\"identifier\",\"emps\"],\n  [\"rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"emps\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"findAll\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"{\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"e\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"e\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"isManager\"],\n  [\"lparen\",\"(\"],\n  [\"rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"rparen\",\"}\"]\n],[\n   \"start\",\n  [\"rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"assert\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"emps\"],\n  [\"lparen\",\"[\"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\"..\"],\n  [\"constant.numeric\",\"1\"],\n  [\"rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"==\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"managers\"],\n  [\"lparen\",\"(\"],\n  [\"identifier\",\"emps\"],\n  [\"rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"comment\",\"// [Guillaume, Graeme]\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"def\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"highPaid\"],\n  [\"lparen\",\"(\"],\n  [\"identifier\",\"emps\"],\n  [\"rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"threshold\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"150\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"emps\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"findAll\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"{\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"e\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"e\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"salary\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\">\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"threshold\"],\n  [\"text\",\" \"],\n  [\"rparen\",\"}\"]\n],[\n   \"start\",\n  [\"rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"assert\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"emps\"],\n  [\"lparen\",\"[\"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\"..\"],\n  [\"constant.numeric\",\"2\"],\n  [\"rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"==\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"highPaid\"],\n  [\"lparen\",\"(\"],\n  [\"identifier\",\"emps\"],\n  [\"rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"comment\",\"// [Guillaume, Graeme, Dierk]\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"def\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"paidMore\"],\n  [\"lparen\",\"(\"],\n  [\"identifier\",\"amount\"],\n  [\"rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"lparen\",\"{\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"e\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"e\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"salary\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\">\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"amount\"],\n  [\"rparen\",\"}\"]\n],[\n   \"start\",\n  [\"rparen\",\"}\"]\n],[\n   \"start\",\n  [\"keyword\",\"def\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"highPaid\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"paidMore\"],\n  [\"lparen\",\"(\"],\n  [\"constant.numeric\",\"150\"],\n  [\"rparen\",\")\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"assert\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"highPaid\"],\n  [\"lparen\",\"(\"],\n  [\"identifier\",\"emps\"],\n  [\"lparen\",\"[\"],\n  [\"constant.numeric\",\"0\"],\n  [\"rparen\",\"])\"],\n  [\"text\",\" \"],\n  [\"comment\",\"// true\"]\n],[\n   \"start\",\n  [\"keyword\",\"assert\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"emps\"],\n  [\"lparen\",\"[\"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\"..\"],\n  [\"constant.numeric\",\"2\"],\n  [\"rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"==\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"emps\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"findAll\"],\n  [\"lparen\",\"(\"],\n  [\"identifier\",\"highPaid\"],\n  [\"rparen\",\")\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"def\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"filename\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"string\",\"'test.txt'\"]\n],[\n   \"start\",\n  [\"keyword\",\"new\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"File\"],\n  [\"lparen\",\"(\"],\n  [\"identifier\",\"filename\"],\n  [\"rparen\",\")\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"withReader\"],\n  [\"lparen\",\"{\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"reader\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"doSomethingWith\"],\n  [\"lparen\",\"(\"],\n  [\"identifier\",\"reader\"],\n  [\"rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"def\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"readersText\"]\n],[\n   \"start\",\n  [\"keyword\",\"def\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"doSomethingWith\"],\n  [\"lparen\",\"(\"],\n  [\"identifier\",\"reader\"],\n  [\"rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"{\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"readersText\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"reader\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"text\"],\n  [\"text\",\" \"],\n  [\"rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"assert\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"new\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"File\"],\n  [\"lparen\",\"(\"],\n  [\"identifier\",\"filename\"],\n  [\"rparen\",\")\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"text\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"==\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"readersText\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_haml.json",
    "content": "[[\n   \"start\",\n  [\"keyword.other.doctype\",\"!!!5\"]\n],[\n   \"start\"\n],[\n   \"embedded_ruby\",\n  [\"text\",\"# <!--[\"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"lt\"],\n  [\"text\",\" \"],\n  [\"support.class\",\"IE\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"7\"],\n  [\"text\",\"]> <\"],\n  [\"identifier\",\"html\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"class\"],\n  [\"text\",\"=\"],\n  [\"string\",\"\\\"no-js lt-ie9 lt-ie8 lt-ie7\\\"\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"lang\"],\n  [\"text\",\"=\"],\n  [\"string\",\"\\\"en\\\"\"],\n  [\"text\",\"> <![\"],\n  [\"identifier\",\"endif\"],\n  [\"text\",\"]-->\"]\n],[\n   \"embedded_ruby\",\n  [\"text\",\"# <!--[\"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"support.class\",\"IE\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"7\"],\n  [\"text\",\"]>    <\"],\n  [\"identifier\",\"html\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"class\"],\n  [\"text\",\"=\"],\n  [\"string\",\"\\\"no-js lt-ie9 lt-ie8\\\"\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"lang\"],\n  [\"text\",\"=\"],\n  [\"string\",\"\\\"en\\\"\"],\n  [\"text\",\"> <![\"],\n  [\"identifier\",\"endif\"],\n  [\"text\",\"]-->\"]\n],[\n   \"embedded_ruby\",\n  [\"text\",\"# <!--[\"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"support.class\",\"IE\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"8\"],\n  [\"text\",\"]>    <\"],\n  [\"identifier\",\"html\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"class\"],\n  [\"text\",\"=\"],\n  [\"string\",\"\\\"no-js lt-ie9\\\"\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"lang\"],\n  [\"text\",\"=\"],\n  [\"string\",\"\\\"en\\\"\"],\n  [\"text\",\"> <![\"],\n  [\"identifier\",\"endif\"],\n  [\"text\",\"]-->\"]\n],[\n   \"embedded_ruby\",\n  [\"text\",\"# <!--[\"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"gt\"],\n  [\"text\",\" \"],\n  [\"support.class\",\"IE\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"8\"],\n  [\"text\",\"]><!--> <\"],\n  [\"identifier\",\"html\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"class\"],\n  [\"text\",\"=\"],\n  [\"string\",\"\\\"no-js\\\"\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"lang\"],\n  [\"text\",\"=\"],\n  [\"string\",\"\\\"en\\\"\"],\n  [\"text\",\"> <!--<![\"],\n  [\"identifier\",\"endif\"],\n  [\"text\",\"]-->\"]\n],[\n   \"start\"\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"comment.line\",\"/adasdasdad\"]\n],[\n   \"embedded_ruby\",\n  [\"meta.tag.haml\",\"%div\"],\n  [\"text\",\"{\"],\n  [\"constant.other.symbol.ruby\",\":id\"],\n  [\"text\",\" => \"],\n  [\"string\",\"\\\"#{@item.type}_#{@item.number}\\\"\"],\n  [\"text\",\", :\"],\n  [\"keyword\",\"class\"],\n  [\"text\",\" => \"],\n  [\"string\",\"'#{@item.type} #{@item.urgency}'\"],\n  [\"text\",\", :\"],\n  [\"identifier\",\"phoney\"],\n  [\"text\",\" => \"],\n  [\"string\",\"`asdasdasd`\"],\n  [\"text\",\"}\"]\n],[\n   \"start\",\n  [\"comment.line\",\"/ file: app/views/movies/index.html.haml\"]\n],[\n   \"start\",\n  [\"text\",\"\\\\d\"]\n],[\n   \"embedded_ruby\",\n  [\"meta.tag.haml\",\"%ads:\"],\n  [\"text\",\"{\"],\n  [\"constant.other.symbol.ruby\",\":bleh\"],\n  [\"text\",\" => \"],\n  [\"constant.numeric\",\"33\"],\n  [\"text\",\"}\"]\n],[\n   \"embedded_ruby\",\n  [\"meta.tag.haml\",\"%p\"],\n  [\"text\",\"==\"],\n  [\"identifier\",\"ddd\"],\n  [\"text\",\"==\"]\n],[\n   \"start\",\n  [\"text\",\"  Date\"],\n  [\"comment.line\",\"/Time:\"]\n],[\n   \"embedded_ruby\",\n  [\"text\",\"  - \"],\n  [\"identifier\",\"now\"],\n  [\"text\",\" = \"],\n  [\"support.class\",\"DateTime\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"now\"],\n  [\"text\",\" \"]\n],[\n   \"embedded_ruby\",\n  [\"text\",\"  \"],\n  [\"meta.tag.haml\",\"%strong\"],\n  [\"text\",\"= \"],\n  [\"identifier\",\"now\"]\n],[\n   \"embedded_ruby\",\n  [\"text\",\"   = \"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"now\"],\n  [\"text\",\"  \"],\n  [\"support.class\",\"DateTime\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"parse\"],\n  [\"text\",\"(\"],\n  [\"string\",\"\\\"December 31, 2006\\\"\"],\n  [\"text\",\")\"]\n],[\n   \"embedded_ruby\",\n  [\"text\",\"    = \"],\n  [\"string\",\"\\\"Happy new \\\"\"],\n  [\"text\",\" + \"],\n  [\"string\",\"\\\"year!\\\"\"]\n],[\n   \"start\",\n  [\"meta.tag.haml\",\"%sfd\"],\n  [\"keyword.attribute-name.class.haml\",\".dfdfg\"]\n],[\n   \"element_class\",\n  [\"keyword.attribute-name.id.haml\",\"#content\"]\n],[\n   \"start\",\n  [\"text\",\" \"],\n  [\"keyword.attribute-name.class.haml\",\".title\"]\n],[\n   \"embedded_ruby\",\n  [\"text\",\"   \"],\n  [\"meta.tag.haml\",\"%h1\"],\n  [\"text\",\"= \"],\n  [\"variable.instance\",\"@title\"]\n],[\n   \"embedded_ruby\",\n  [\"text\",\"   = \"],\n  [\"support.function\",\"link_to\"],\n  [\"text\",\" \"],\n  [\"string\",\"'Home'\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"home_url\"]\n],[\n   \"start\"\n],[\n   \"element_class\",\n  [\"text\",\"   \"],\n  [\"keyword.attribute-name.id.haml\",\"#contents\"]\n],[\n   \"element_class\",\n  [\"meta.tag.haml\",\"%div\"],\n  [\"keyword.attribute-name.id.haml\",\"#content\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"meta.tag.haml\",\"%div\"],\n  [\"keyword.attribute-name.class.haml\",\".articles\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"meta.tag.haml\",\"%div\"],\n  [\"keyword.attribute-name.class.haml\",\".article.title\"],\n  [\"text\",\" Blah\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"meta.tag.haml\",\"%div\"],\n  [\"keyword.attribute-name.class.haml\",\".article.date\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"2006-11-05\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"meta.tag.haml\",\"%div\"],\n  [\"keyword.attribute-name.class.haml\",\".article.entry\"]\n],[\n   \"start\",\n  [\"text\",\"      Neil Patrick Harris \"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"meta.tag.haml\",\"%div\"],\n  [\"text\",\"[@user, \"],\n  [\"constant.other.symbol.ruby\",\":greeting\"],\n  [\"text\",\"]\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"meta.tag.haml\",\"%bar\"],\n  [\"text\",\"[\"],\n  [\"constant.numeric\",\"290\"],\n  [\"text\",\"]\"],\n  [\"comment.line\",\"/\"]\n],[\n   \"embedded_ruby\",\n  [\"text\",\"  ==\"],\n  [\"support.class\",\"Hello\"],\n  [\"text\",\"!==\"]\n],[\n   \"start\"\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_handlebars.json",
    "content": "[[\n   \"start\",\n  [\"comment.start\",\"{{!--\"],\n  [\"comment\",\" Ace + :-}} \"],\n  [\"comment.end\",\"--}}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"div\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"id\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"comments\\\"\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"  \"],\n  [\"storage.type.start\",\"{{#\"],\n  [\"variable.parameter\",\"each\"],\n  [\"text\",\" \"],\n  [\"variable.parameter\",\"comments\"],\n  [\"storage.type.end\",\"}}\"]\n],[\n   \"start\",\n  [\"text.xml\",\"  \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"h2\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.anchor.tag-name.xml\",\"a\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"href\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"/posts/\"],\n  [\"storage.type.start\",\"{{\"],\n  [\"text\",\"../\"],\n  [\"variable.parameter\",\"permalink\"],\n  [\"storage.type.end\",\"}}\"],\n  [\"string.attribute-value.xml\",\"#\"],\n  [\"storage.type.start\",\"{{\"],\n  [\"variable.parameter\",\"id\"],\n  [\"storage.type.end\",\"}}\"],\n  [\"string.attribute-value.xml\",\"\\\"\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"storage.type.start\",\"{{\"],\n  [\"variable.parameter\",\"title\"],\n  [\"storage.type.end\",\"}}\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.anchor.tag-name.xml\",\"a\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"h2\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"  \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"div\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"support.function\",\"{{{\"],\n  [\"variable.parameter\",\"body\"],\n  [\"support.function\",\"}}}\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"div\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"  \"],\n  [\"storage.type.start\",\"{{/\"],\n  [\"variable.parameter\",\"each\"],\n  [\"storage.type.end\",\"}}\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"div\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\"\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_haskell.json",
    "content": "[[\n   \"start\",\n  [\"punctuation.definition.comment.haskell\",\"-- Type annotation (optional)\"]\n],[\n   \"start\",\n  [\"entity.name.function.haskell\",\"fib\"],\n  [\"meta.function.type-declaration.haskell\",\" \"],\n  [\"keyword.other.double-colon.haskell\",\"::\"],\n  [\"meta.function.type-declaration.haskell\",\" \"],\n  [\"support.type.prelude.haskell\",\"Int\"],\n  [\"meta.function.type-declaration.haskell\",\" \"],\n  [\"keyword.other.arrow.haskell\",\"->\"],\n  [\"meta.function.type-declaration.haskell\",\" \"],\n  [\"support.type.prelude.haskell\",\"Integer\"]\n],[\n   \"start\",\n  [\"text\",\" \"]\n],[\n   \"start\",\n  [\"punctuation.definition.comment.haskell\",\"-- With self-referencing data\"]\n],[\n   \"start\",\n  [\"text\",\"fib n \"],\n  [\"keyword.operator.haskell\",\"=\"],\n  [\"text\",\" fibs \"],\n  [\"keyword.operator.haskell\",\"!!\"],\n  [\"text\",\" n\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"keyword.other.haskell\",\"where\"],\n  [\"text\",\" fibs \"],\n  [\"keyword.operator.haskell\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.haskell\",\"0\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.haskell\",\":\"],\n  [\"text\",\" \"],\n  [\"support.function.prelude.haskell\",\"scanl\"],\n  [\"text\",\" \"],\n  [\"entity.name.function.infix.haskell\",\"(+)\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.haskell\",\"1\"],\n  [\"text\",\" fibs\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"punctuation.definition.comment.haskell\",\"-- 0,1,1,2,3,5,...\"]\n],[\n   \"start\",\n  [\"text\",\" \"]\n],[\n   \"start\",\n  [\"punctuation.definition.comment.haskell\",\"-- Same, coded directly\"]\n],[\n   \"start\",\n  [\"text\",\"fib n \"],\n  [\"keyword.operator.haskell\",\"=\"],\n  [\"text\",\" fibs \"],\n  [\"keyword.operator.haskell\",\"!!\"],\n  [\"text\",\" n\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"keyword.other.haskell\",\"where\"],\n  [\"text\",\" fibs \"],\n  [\"keyword.operator.haskell\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.haskell\",\"0\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.haskell\",\":\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.haskell\",\"1\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.haskell\",\":\"],\n  [\"text\",\" next fibs\"]\n],[\n   \"start\",\n  [\"text\",\"              next (a \"],\n  [\"keyword.operator.haskell\",\":\"],\n  [\"text\",\" t@(b\"],\n  [\"keyword.operator.haskell\",\":\"],\n  [\"text\",\"_)) \"],\n  [\"keyword.operator.haskell\",\"=\"],\n  [\"text\",\" (a\"],\n  [\"keyword.operator.haskell\",\"+\"],\n  [\"text\",\"b) \"],\n  [\"keyword.operator.haskell\",\":\"],\n  [\"text\",\" next t\"]\n],[\n   \"start\",\n  [\"text\",\" \"]\n],[\n   \"start\",\n  [\"punctuation.definition.comment.haskell\",\"-- Similar idea, using zipWith\"]\n],[\n   \"start\",\n  [\"text\",\"fib n \"],\n  [\"keyword.operator.haskell\",\"=\"],\n  [\"text\",\" fibs \"],\n  [\"keyword.operator.haskell\",\"!!\"],\n  [\"text\",\" n\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"keyword.other.haskell\",\"where\"],\n  [\"text\",\" fibs \"],\n  [\"keyword.operator.haskell\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.haskell\",\"0\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.haskell\",\":\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.haskell\",\"1\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.haskell\",\":\"],\n  [\"text\",\" \"],\n  [\"support.function.prelude.haskell\",\"zipWith\"],\n  [\"text\",\" \"],\n  [\"entity.name.function.infix.haskell\",\"(+)\"],\n  [\"text\",\" fibs (\"],\n  [\"support.function.prelude.haskell\",\"tail\"],\n  [\"text\",\" fibs)\"]\n],[\n   \"start\",\n  [\"text\",\" \"]\n],[\n   \"start\",\n  [\"punctuation.definition.comment.haskell\",\"-- Using a generator function\"]\n],[\n   \"start\",\n  [\"text\",\"fib n \"],\n  [\"keyword.operator.haskell\",\"=\"],\n  [\"text\",\" fibs (\"],\n  [\"constant.numeric.haskell\",\"0\"],\n  [\"punctuation.separator.comma.haskell\",\",\"],\n  [\"constant.numeric.haskell\",\"1\"],\n  [\"text\",\") \"],\n  [\"keyword.operator.haskell\",\"!!\"],\n  [\"text\",\" n\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"keyword.other.haskell\",\"where\"],\n  [\"text\",\" fibs (a\"],\n  [\"punctuation.separator.comma.haskell\",\",\"],\n  [\"text\",\"b) \"],\n  [\"keyword.operator.haskell\",\"=\"],\n  [\"text\",\" a \"],\n  [\"keyword.operator.haskell\",\":\"],\n  [\"text\",\" fibs (b\"],\n  [\"punctuation.separator.comma.haskell\",\",\"],\n  [\"text\",\"a\"],\n  [\"keyword.operator.haskell\",\"+\"],\n  [\"text\",\"b)\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_haxe.json",
    "content": "[[\n   \"start\",\n  [\"keyword\",\"class\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Haxe\"],\n  [\"text\",\" \"]\n],[\n   \"start\",\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"public\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"static\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"function\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"main\"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"comment\",\"// Say Hello!\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"keyword\",\"var\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"greeting\"],\n  [\"punctuation.operator\",\":\"],\n  [\"keyword\",\"String\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"Hello World\\\"\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"keyword\",\"trace\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"greeting\"],\n  [\"paren.rparen\",\")\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"        \"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"keyword\",\"var\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"targets\"],\n  [\"punctuation.operator\",\":\"],\n  [\"keyword\",\"Array\"],\n  [\"keyword.operator\",\"<\"],\n  [\"keyword\",\"String\"],\n  [\"keyword.operator\",\">\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"string\",\"\\\"Flash\\\"\"],\n  [\"punctuation.operator\",\",\"],\n  [\"string\",\"\\\"Javascript\\\"\"],\n  [\"punctuation.operator\",\",\"],\n  [\"string\",\"\\\"PHP\\\"\"],\n  [\"punctuation.operator\",\",\"],\n  [\"string\",\"\\\"Neko\\\"\"],\n  [\"punctuation.operator\",\",\"],\n  [\"string\",\"\\\"C++\\\"\"],\n  [\"punctuation.operator\",\",\"],\n  [\"string\",\"\\\"iOS\\\"\"],\n  [\"punctuation.operator\",\",\"],\n  [\"string\",\"\\\"Android\\\"\"],\n  [\"punctuation.operator\",\",\"],\n  [\"string\",\"\\\"webOS\\\"\"],\n  [\"paren.rparen\",\"]\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"keyword\",\"trace\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\"Haxe is a great language that can target:\\\"\"],\n  [\"paren.rparen\",\")\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"keyword\",\"for\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"target\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"in\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"targets\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"            \"],\n  [\"keyword\",\"trace\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\" - \\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"target\"],\n  [\"paren.rparen\",\")\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"keyword\",\"trace\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\"And many more!\\\"\"],\n  [\"paren.rparen\",\")\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_html.json",
    "content": "[[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"html\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"scripts\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.script.tag-name.xml\",\"script\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"a\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"'a'\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"storage.type\",\"var\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"</scripts>\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.script.tag-name.xml\",\"script\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\"'123'\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"scripts\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   [\"string.attribute-value.xml0\",\"tag_stuff\"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.anchor.tag-name.xml\",\"a\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"href\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"abc\"]\n],[\n   \"start\",\n  [\"string.attribute-value.xml\",\"  def\\\"\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   [\"string.attribute-value.xml\",\"tag_stuff\"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.anchor.tag-name.xml\",\"a\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"href\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"'abc\"]\n],[\n   \"start\",\n  [\"string.attribute-value.xml\",\"def\\\\'\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"html\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_html_elixir.json",
    "content": "[[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"h1\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\"Listing Books\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"h1\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\" \"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.table.tag-name.xml\",\"table\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"  \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.table.tag-name.xml\",\"tr\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.table.tag-name.xml\",\"th\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\"Title\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.table.tag-name.xml\",\"th\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.table.tag-name.xml\",\"th\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\"Summary\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.table.tag-name.xml\",\"th\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.table.tag-name.xml\",\"th\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.table.tag-name.xml\",\"th\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.table.tag-name.xml\",\"th\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.table.tag-name.xml\",\"th\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.table.tag-name.xml\",\"th\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.table.tag-name.xml\",\"th\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"  \"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.table.tag-name.xml\",\"tr\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"support.elixir_tag\",\"<%=\"],\n  [\"text\",\" \"],\n  [\"keyword.control.elixir\",\"for\"],\n  [\"text\",\" book \"],\n  [\"keyword.operator.comparison.elixir\",\"<\"],\n  [\"keyword.operator.arithmetic.elixir\",\"-\"],\n  [\"text\",\" \"],\n  [\"punctuation.definition.variable.elixir\",\"@\"],\n  [\"variable.other.readwrite.module.elixir\",\"books\"],\n  [\"text\",\" \"],\n  [\"keyword.control.elixir\",\"do\"],\n  [\"text\",\" \"],\n  [\"support.elixir_tag\",\"%>\"]\n],[\n   \"start\",\n  [\"text.xml\",\"  \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.table.tag-name.xml\",\"tr\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"comment.start.eex\",\"<%#\"],\n  [\"comment\",\" comment \"],\n  [\"comment.end.eex\",\"%>\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.table.tag-name.xml\",\"td\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"support.elixir_tag\",\"<%=\"],\n  [\"text\",\" book\"],\n  [\"punctuation.separator.method.elixir\",\".\"],\n  [\"text\",\"title \"],\n  [\"support.elixir_tag\",\"%>\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.table.tag-name.xml\",\"td\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.table.tag-name.xml\",\"td\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"support.elixir_tag\",\"<%=\"],\n  [\"text\",\" book\"],\n  [\"punctuation.separator.method.elixir\",\".\"],\n  [\"text\",\"content \"],\n  [\"support.elixir_tag\",\"%>\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.table.tag-name.xml\",\"td\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.table.tag-name.xml\",\"td\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"support.elixir_tag\",\"<%=\"],\n  [\"text\",\" link \"],\n  [\"punctuation.definition.string.begin.elixir\",\"\\\"\"],\n  [\"string.quoted.double.elixir\",\"Show\"],\n  [\"punctuation.definition.string.end.elixir\",\"\\\"\"],\n  [\"punctuation.separator.object.elixir\",\",\"],\n  [\"text\",\" \"],\n  [\"punctuation.definition.constant.elixir\",\"to:\"],\n  [\"text\",\" book_path\"],\n  [\"punctuation.section.function.elixir\",\"(\"],\n  [\"punctuation.definition.variable.elixir\",\"@\"],\n  [\"variable.other.readwrite.module.elixir\",\"conn\"],\n  [\"punctuation.separator.object.elixir\",\",\"],\n  [\"text\",\" \"],\n  [\"punctuation.definition.constant.elixir\",\":\"],\n  [\"constant.other.symbol.elixir\",\"show\"],\n  [\"punctuation.separator.object.elixir\",\",\"],\n  [\"text\",\" book\"],\n  [\"punctuation.section.function.elixir\",\")\"],\n  [\"text\",\" \"],\n  [\"support.elixir_tag\",\"%>\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.table.tag-name.xml\",\"td\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.table.tag-name.xml\",\"td\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"support.elixir_tag\",\"<%=\"],\n  [\"text\",\" link \"],\n  [\"punctuation.definition.string.begin.elixir\",\"\\\"\"],\n  [\"string.quoted.double.elixir\",\"Edit\"],\n  [\"punctuation.definition.string.end.elixir\",\"\\\"\"],\n  [\"punctuation.separator.object.elixir\",\",\"],\n  [\"text\",\" \"],\n  [\"punctuation.definition.constant.elixir\",\"to:\"],\n  [\"text\",\" book_path\"],\n  [\"punctuation.section.function.elixir\",\"(\"],\n  [\"punctuation.definition.variable.elixir\",\"@\"],\n  [\"variable.other.readwrite.module.elixir\",\"conn\"],\n  [\"punctuation.separator.object.elixir\",\",\"],\n  [\"text\",\" \"],\n  [\"punctuation.definition.constant.elixir\",\":\"],\n  [\"constant.other.symbol.elixir\",\"edit\"],\n  [\"punctuation.separator.object.elixir\",\",\"],\n  [\"text\",\" book\"],\n  [\"punctuation.section.function.elixir\",\")\"],\n  [\"text\",\" \"],\n  [\"support.elixir_tag\",\"%>\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.table.tag-name.xml\",\"td\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.table.tag-name.xml\",\"td\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"support.elixir_tag\",\"<%=\"],\n  [\"text\",\" link \"],\n  [\"punctuation.definition.string.begin.elixir\",\"\\\"\"],\n  [\"string.quoted.double.elixir\",\"Delete\"],\n  [\"punctuation.definition.string.end.elixir\",\"\\\"\"],\n  [\"punctuation.separator.object.elixir\",\",\"],\n  [\"text\",\" \"],\n  [\"punctuation.definition.constant.elixir\",\"to:\"],\n  [\"text\",\" book_path\"],\n  [\"punctuation.section.function.elixir\",\"(\"],\n  [\"punctuation.definition.variable.elixir\",\"@\"],\n  [\"variable.other.readwrite.module.elixir\",\"conn\"],\n  [\"punctuation.separator.object.elixir\",\",\"],\n  [\"text\",\" \"],\n  [\"punctuation.definition.constant.elixir\",\":\"],\n  [\"constant.other.symbol.elixir\",\"delete\"],\n  [\"punctuation.separator.object.elixir\",\",\"],\n  [\"text\",\" book\"],\n  [\"punctuation.section.function.elixir\",\")\"],\n  [\"punctuation.separator.object.elixir\",\",\"],\n  [\"text\",\" \"],\n  [\"punctuation.definition.constant.elixir\",\"method:\"],\n  [\"text\",\" \"],\n  [\"punctuation.definition.constant.elixir\",\":\"],\n  [\"constant.other.symbol.elixir\",\"delete\"],\n  [\"punctuation.separator.object.elixir\",\",\"],\n  [\"text\",\" \"],\n  [\"punctuation.definition.constant.elixir\",\"data:\"],\n  [\"text\",\" \"],\n  [\"punctuation.section.array.elixir\",\"[\"],\n  [\"punctuation.definition.constant.elixir\",\"confirm:\"],\n  [\"text\",\" \"],\n  [\"punctuation.definition.string.begin.elixir\",\"\\\"\"],\n  [\"string.quoted.double.elixir\",\"Are you sure?\"],\n  [\"punctuation.definition.string.end.elixir\",\"\\\"\"],\n  [\"punctuation.section.array.elixir\",\"]\"],\n  [\"text\",\" \"],\n  [\"support.elixir_tag\",\"%>\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.table.tag-name.xml\",\"td\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"  \"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.table.tag-name.xml\",\"tr\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"support.elixir_tag\",\"<%\"],\n  [\"text\",\" \"],\n  [\"keyword.control.elixir\",\"end\"],\n  [\"text\",\" \"],\n  [\"support.elixir_tag\",\"%>\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.table.tag-name.xml\",\"table\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\" \"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"br\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"meta.tag.punctuation.tag-close.xml\",\"/>\"]\n],[\n   \"start\",\n  [\"text.xml\",\" \"]\n],[\n   \"start\",\n  [\"support.elixir_tag\",\"<%=\"],\n  [\"text\",\" link \"],\n  [\"punctuation.definition.string.begin.elixir\",\"\\\"\"],\n  [\"string.quoted.double.elixir\",\"New book\"],\n  [\"punctuation.definition.string.end.elixir\",\"\\\"\"],\n  [\"punctuation.separator.object.elixir\",\",\"],\n  [\"text\",\" \"],\n  [\"punctuation.definition.constant.elixir\",\"to:\"],\n  [\"text\",\" book_path\"],\n  [\"punctuation.section.function.elixir\",\"(\"],\n  [\"punctuation.definition.variable.elixir\",\"@\"],\n  [\"variable.other.readwrite.module.elixir\",\"conn\"],\n  [\"punctuation.separator.object.elixir\",\",\"],\n  [\"text\",\" \"],\n  [\"punctuation.definition.constant.elixir\",\":\"],\n  [\"constant.other.symbol.elixir\",\"new\"],\n  [\"punctuation.section.function.elixir\",\")\"],\n  [\"text\",\" \"],\n  [\"support.elixir_tag\",\"%>\"]\n],[\n   \"start\"\n]]\n"
  },
  {
    "path": "lib/ace/mode/_test/tokens_html_ruby.json",
    "content": "[[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"h1\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\"Listing Books\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"h1\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\" \"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.table.tag-name.xml\",\"table\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"  \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.table.tag-name.xml\",\"tr\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.table.tag-name.xml\",\"th\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\"Title\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.table.tag-name.xml\",\"th\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.table.tag-name.xml\",\"th\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\"Summary\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.table.tag-name.xml\",\"th\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.table.tag-name.xml\",\"th\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.table.tag-name.xml\",\"th\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.table.tag-name.xml\",\"th\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.table.tag-name.xml\",\"th\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.table.tag-name.xml\",\"th\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.table.tag-name.xml\",\"th\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"  \"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.table.tag-name.xml\",\"tr\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\" \"]\n],[\n   \"start\",\n  [\"support.ruby_tag\",\"<%\"],\n  [\"text\",\" \"],\n  [\"variable.instance\",\"@books\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"each\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"do\"],\n  [\"text\",\" |\"],\n  [\"identifier\",\"book\"],\n  [\"text\",\"| \"],\n  [\"support.ruby_tag\",\"%>\"]\n],[\n   \"start\",\n  [\"text.xml\",\"  \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.table.tag-name.xml\",\"tr\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"comment.start.erb\",\"<%#\"],\n  [\"comment\",\" comment \"],\n  [\"comment.end.erb\",\"%>\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.table.tag-name.xml\",\"td\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"support.ruby_tag\",\"<%=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"book\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"title\"],\n  [\"text\",\" \"],\n  [\"support.ruby_tag\",\"%>\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.table.tag-name.xml\",\"td\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.table.tag-name.xml\",\"td\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"support.ruby_tag\",\"<%=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"book\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"content\"],\n  [\"text\",\" \"],\n  [\"support.ruby_tag\",\"%>\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.table.tag-name.xml\",\"td\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.table.tag-name.xml\",\"td\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"support.ruby_tag\",\"<%=\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"link_to\"],\n  [\"text\",\" \"],\n  [\"string.start\",\"'\"],\n  [\"string\",\"Show\"],\n  [\"string.end\",\"'\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"book\"],\n  [\"text\",\" \"],\n  [\"support.ruby_tag\",\"%>\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.table.tag-name.xml\",\"td\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.table.tag-name.xml\",\"td\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"support.ruby_tag\",\"<%=\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"link_to\"],\n  [\"text\",\" \"],\n  [\"string.start\",\"'\"],\n  [\"string\",\"Edit\"],\n  [\"string.end\",\"'\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"edit_book_path\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"book\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"support.ruby_tag\",\"%>\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.table.tag-name.xml\",\"td\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.table.tag-name.xml\",\"td\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"support.ruby_tag\",\"<%=\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"link_to\"],\n  [\"text\",\" \"],\n  [\"string.start\",\"'\"],\n  [\"string\",\"Remove\"],\n  [\"string.end\",\"'\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"book\"],\n  [\"text\",\", \"],\n  [\"constant.other.symbol.ruby\",\":confirm\"],\n  [\"text\",\" \"],\n  [\"punctuation.separator.key-value\",\"=>\"],\n  [\"text\",\" \"],\n  [\"string.start\",\"'\"],\n  [\"string\",\"Are you sure?\"],\n  [\"string.end\",\"'\"],\n  [\"text\",\", \"],\n  [\"constant.other.symbol.ruby\",\":method\"],\n  [\"text\",\" \"],\n  [\"punctuation.separator.key-value\",\"=>\"],\n  [\"text\",\" \"],\n  [\"constant.other.symbol.ruby\",\":delete\"],\n  [\"text\",\" \"],\n  [\"support.ruby_tag\",\"%>\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.table.tag-name.xml\",\"td\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"  \"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.table.tag-name.xml\",\"tr\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"support.ruby_tag\",\"<%\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"end\"],\n  [\"text\",\" \"],\n  [\"support.ruby_tag\",\"%>\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.table.tag-name.xml\",\"table\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\" \"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"br\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"meta.tag.punctuation.tag-close.xml\",\"/>\"]\n],[\n   \"start\",\n  [\"text.xml\",\" \"]\n],[\n   \"start\",\n  [\"support.ruby_tag\",\"<%=\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"link_to\"],\n  [\"text\",\" \"],\n  [\"string.start\",\"'\"],\n  [\"string\",\"New book\"],\n  [\"string.end\",\"'\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"new_book_path\"],\n  [\"text\",\" \"],\n  [\"support.ruby_tag\",\"%>\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_ini.json",
    "content": "[[\n   \"start\",\n  [\"punctuation.definition.entity.ini\",\"[\"],\n  [\"constant.section.group-title.ini\",\".ShellClassInfo\"],\n  [\"punctuation.definition.entity.ini\",\"]\"]\n],[\n   \"start\",\n  [\"keyword.other.definition.ini\",\"IconResource\"],\n  [\"punctuation.separator.key-value.ini\",\"=\"],\n  [\"text\",\"..\\\\logo.png\"]\n],[\n   \"start\",\n  [\"punctuation.definition.entity.ini\",\"[\"],\n  [\"constant.section.group-title.ini\",\"ViewState\"],\n  [\"punctuation.definition.entity.ini\",\"]\"]\n],[\n   \"start\",\n  [\"keyword.other.definition.ini\",\"FolderType\"],\n  [\"punctuation.separator.key-value.ini\",\"=\"],\n  [\"text\",\"Generic\"]\n],[\n   \"start\"\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_io.json",
    "content": "[[\n   \"start\",\n  [\"punctuation.definition.comment.io\",\"//\"],\n  [\"comment.line.double-slash.io\",\" computes factorial of a number\"]\n],[\n   \"start\",\n  [\"text\",\"factorial \"],\n  [\"keyword.operator.io\",\":=\"],\n  [\"text\",\" \"],\n  [\"support.function.io\",\"method\"],\n  [\"text\",\"(n,\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword.control.io\",\"if\"],\n  [\"text\",\"(n \"],\n  [\"keyword.operator.io\",\"==\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.io\",\"0\"],\n  [\"text\",\", \"],\n  [\"keyword.control.io\",\"return\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.io\",\"1\"],\n  [\"text\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"    res \"],\n  [\"keyword.operator.io\",\":=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.io\",\"1\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"support.class.io\",\"Range\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.io\",\"1\"],\n  [\"text\",\" \"],\n  [\"support.function.io\",\"to\"],\n  [\"text\",\"(n) \"],\n  [\"keyword.control.io\",\"foreach\"],\n  [\"text\",\"(i, res \"],\n  [\"keyword.operator.io\",\"=\"],\n  [\"text\",\" res \"],\n  [\"keyword.operator.io\",\"*\"],\n  [\"text\",\" i)\"]\n],[\n   \"start\",\n  [\"text\",\")\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_jack.json",
    "content": "[[\n   \"start\",\n  [\"keyword\",\"vars\"],\n  [\"text\",\" \"],\n  [\"variable\",\"it\"],\n  [\"text\",\", \"],\n  [\"variable\",\"p\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"variable\",\"p\"],\n  [\"text\",\" = \"],\n  [\"paren.lparen\",\"{\"],\n  [\"variable\",\"label\"],\n  [\"text\",\", \"],\n  [\"variable\",\"value\"],\n  [\"text\",\"|\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"language.builtin\",\"print\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\"\"],\n  [\"constant.language.escape\",\"\\\\n\"],\n  [\"string\",\"\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"variable\",\"label\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"language.builtin\",\"print\"],\n  [\"paren.lparen\",\"(\"],\n  [\"language.builtin\",\"inspect\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"value\"],\n  [\"paren.rparen\",\"))\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"comment\",\"-- Create an array from 0 to 15\"]\n],[\n   \"start\",\n  [\"variable\",\"p\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\"range\\\"\"],\n  [\"text\",\", \"],\n  [\"language.builtin\",\"i-collect\"],\n  [\"paren.lparen\",\"(\"],\n  [\"language.builtin\",\"range\"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"5\"],\n  [\"paren.rparen\",\")))\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"comment\",\"-- Create an array from 0 to 15 and break up in chunks of 4\"]\n],[\n   \"start\",\n  [\"variable\",\"p\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\"chunked range\\\"\"],\n  [\"text\",\", \"],\n  [\"language.builtin\",\"i-collect\"],\n  [\"paren.lparen\",\"(\"],\n  [\"language.builtin\",\"i-chunk\"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"4\"],\n  [\"text\",\", \"],\n  [\"language.builtin\",\"range\"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"16\"],\n  [\"paren.rparen\",\"))))\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"comment\",\"-- Check if all or none items in stream pass test.\"]\n],[\n   \"start\",\n  [\"variable\",\"p\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\"all < 60 in range(60)\\\"\"],\n  [\"text\",\", \"],\n  [\"variable\",\"i-all?\"],\n  [\"paren.lparen\",\"({\"],\n  [\"variable\",\"i\"],\n  [\"text\",\"|\"],\n  [\"variable\",\"i\"],\n  [\"keyword.operator\",\"<\"],\n  [\"constant.numeric\",\"60\"],\n  [\"paren.rparen\",\"}\"],\n  [\"text\",\", \"],\n  [\"language.builtin\",\"range\"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"60\"],\n  [\"paren.rparen\",\")))\"]\n],[\n   \"start\",\n  [\"variable\",\"p\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\"any < 60 in range(60)\\\"\"],\n  [\"text\",\", \"],\n  [\"variable\",\"i-any?\"],\n  [\"paren.lparen\",\"({\"],\n  [\"variable\",\"i\"],\n  [\"text\",\"|\"],\n  [\"variable\",\"i\"],\n  [\"keyword.operator\",\">\"],\n  [\"constant.numeric\",\"60\"],\n  [\"paren.rparen\",\"}\"],\n  [\"text\",\", \"],\n  [\"language.builtin\",\"range\"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"60\"],\n  [\"paren.rparen\",\")))\"]\n],[\n   \"start\",\n  [\"variable\",\"p\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\"all < 60 in range(70)\\\"\"],\n  [\"text\",\", \"],\n  [\"variable\",\"i-all?\"],\n  [\"paren.lparen\",\"({\"],\n  [\"variable\",\"i\"],\n  [\"text\",\"|\"],\n  [\"variable\",\"i\"],\n  [\"keyword.operator\",\"<\"],\n  [\"constant.numeric\",\"60\"],\n  [\"paren.rparen\",\"}\"],\n  [\"text\",\", \"],\n  [\"language.builtin\",\"range\"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"70\"],\n  [\"paren.rparen\",\")))\"]\n],[\n   \"start\",\n  [\"variable\",\"p\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\"any < 60 in range(70)\\\"\"],\n  [\"text\",\", \"],\n  [\"variable\",\"i-any?\"],\n  [\"paren.lparen\",\"({\"],\n  [\"variable\",\"i\"],\n  [\"text\",\"|\"],\n  [\"variable\",\"i\"],\n  [\"keyword.operator\",\">\"],\n  [\"constant.numeric\",\"60\"],\n  [\"paren.rparen\",\"}\"],\n  [\"text\",\", \"],\n  [\"language.builtin\",\"range\"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"70\"],\n  [\"paren.rparen\",\")))\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"comment\",\"-- Zip three different collections together\"]\n],[\n   \"start\",\n  [\"variable\",\"p\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\"zipped\\\"\"],\n  [\"text\",\", \"],\n  [\"language.builtin\",\"i-collect\"],\n  [\"paren.lparen\",\"(\"],\n  [\"language.builtin\",\"i-zip\"],\n  [\"paren.lparen\",\"(\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"language.builtin\",\"range\"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"10\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"paren.lparen\",\"[\"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\",\"],\n  [\"constant.numeric\",\"2\"],\n  [\"text\",\",\"],\n  [\"constant.numeric\",\"3\"],\n  [\"text\",\",\"],\n  [\"constant.numeric\",\"4\"],\n  [\"text\",\",\"],\n  [\"constant.numeric\",\"5\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"language.builtin\",\"i-map\"],\n  [\"paren.lparen\",\"({\"],\n  [\"variable\",\"i\"],\n  [\"text\",\"|\"],\n  [\"variable\",\"i\"],\n  [\"keyword.operator\",\"*\"],\n  [\"variable\",\"i\"],\n  [\"paren.rparen\",\"}\"],\n  [\"text\",\", \"],\n  [\"language.builtin\",\"range\"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"10\"],\n  [\"paren.rparen\",\"))\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\")))\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"vars\"],\n  [\"text\",\" \"],\n  [\"variable\",\"names\"],\n  [\"text\",\", \"],\n  [\"variable\",\"person\"],\n  [\"text\",\", \"],\n  [\"variable\",\"i\"],\n  [\"text\",\", \"],\n  [\"variable\",\"doubles\"],\n  [\"text\",\", \"],\n  [\"variable\",\"lengths\"],\n  [\"text\",\", \"],\n  [\"variable\",\"cubeRange\"]\n],[\n   \"start\",\n  [\"variable\",\"names\"],\n  [\"text\",\" = \"],\n  [\"paren.lparen\",\"[\"],\n  [\"string\",\"\\\"Thorin\\\"\"],\n  [\"text\",\", \"],\n  [\"string\",\"\\\"Dwalin\\\"\"],\n  [\"text\",\", \"],\n  [\"string\",\"\\\"Balin\\\"\"],\n  [\"text\",\", \"],\n  [\"string\",\"\\\"Bifur\\\"\"],\n  [\"text\",\", \"],\n  [\"string\",\"\\\"Bofur\\\"\"],\n  [\"text\",\", \"],\n  [\"string\",\"\\\"Bombur\\\"\"],\n  [\"text\",\", \"],\n  [\"string\",\"\\\"Oin\\\"\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"         \"],\n  [\"string\",\"\\\"Gloin\\\"\"],\n  [\"text\",\", \"],\n  [\"string\",\"\\\"Ori\\\"\"],\n  [\"text\",\", \"],\n  [\"string\",\"\\\"Nori\\\"\"],\n  [\"text\",\", \"],\n  [\"string\",\"\\\"Dori\\\"\"],\n  [\"text\",\", \"],\n  [\"string\",\"\\\"Fili\\\"\"],\n  [\"text\",\", \"],\n  [\"string\",\"\\\"Kili\\\"\"],\n  [\"text\",\", \"],\n  [\"string\",\"\\\"Bilbo\\\"\"],\n  [\"text\",\", \"],\n  [\"string\",\"\\\"Gandalf\\\"\"],\n  [\"paren.rparen\",\"]\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"for\"],\n  [\"text\",\" \"],\n  [\"variable\",\"name\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"in\"],\n  [\"text\",\" \"],\n  [\"variable\",\"names\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"variable\",\"name\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"!=\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"Bilbo\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"&&\"],\n  [\"text\",\" \"],\n  [\"variable\",\"name\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"!=\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"Gandalf\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"language.builtin\",\"print\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"name\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"variable\",\"person\"],\n  [\"text\",\" = \"],\n  [\"paren.lparen\",\"{\"],\n  [\"variable\",\"name\"],\n  [\"text\",\": \"],\n  [\"string\",\"\\\"Tim\\\"\"],\n  [\"text\",\", \"],\n  [\"variable\",\"age\"],\n  [\"text\",\": \"],\n  [\"constant.numeric\",\"30\"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"keyword\",\"for\"],\n  [\"text\",\" \"],\n  [\"variable\",\"key\"],\n  [\"text\",\", \"],\n  [\"variable\",\"value\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"in\"],\n  [\"text\",\" \"],\n  [\"variable\",\"person\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"language.builtin\",\"print\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"key\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\" = \\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"variable\",\"value\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"variable\",\"i\"],\n  [\"text\",\" = \"],\n  [\"constant.numeric\",\"0\"]\n],[\n   \"start\",\n  [\"keyword\",\"while\"],\n  [\"text\",\" \"],\n  [\"variable\",\"i\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"<\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"10\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"variable\",\"i\"],\n  [\"text\",\" = \"],\n  [\"variable\",\"i\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"language.builtin\",\"print\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"i\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"language.builtin\",\"print\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\"range\\\"\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"keyword\",\"for\"],\n  [\"text\",\" \"],\n  [\"variable\",\"i\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"in\"],\n  [\"text\",\" \"],\n  [\"language.builtin\",\"range\"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"10\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"language.builtin\",\"print\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"i\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"keyword\",\"for\"],\n  [\"text\",\" \"],\n  [\"variable\",\"i\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"in\"],\n  [\"text\",\" \"],\n  [\"language.builtin\",\"range\"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"10\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"language.builtin\",\"print\"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"10\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"-\"],\n  [\"text\",\" \"],\n  [\"variable\",\"i\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"comment\",\"-- Dynamic object that gives the first 10 doubles\"]\n],[\n   \"start\",\n  [\"variable\",\"doubles\"],\n  [\"text\",\" = \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"storage.form\",\"@len\"],\n  [\"text\",\": \"],\n  [\"paren.lparen\",\"{\"],\n  [\"text\",\"| \"],\n  [\"constant.numeric\",\"10\"],\n  [\"text\",\" \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"storage.form\",\"@get\"],\n  [\"text\",\": \"],\n  [\"paren.lparen\",\"{\"],\n  [\"variable\",\"key\"],\n  [\"text\",\"|\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"variable\",\"key\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"is\"],\n  [\"text\",\" \"],\n  [\"storage.type\",\"Integer\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"],\n  [\"text\",\" \"],\n  [\"variable\",\"key\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"*\"],\n  [\"text\",\" \"],\n  [\"variable\",\"key\"],\n  [\"text\",\" \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"language.builtin\",\"print\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\"#doubles\\\"\"],\n  [\"text\",\", \"],\n  [\"keyword.operator\",\"#\"],\n  [\"variable\",\"doubles\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"language.builtin\",\"print\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\"Doubles\\\"\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"keyword\",\"for\"],\n  [\"text\",\" \"],\n  [\"variable\",\"k\"],\n  [\"text\",\", \"],\n  [\"variable\",\"v\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"in\"],\n  [\"text\",\" \"],\n  [\"variable\",\"doubles\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"language.builtin\",\"print\"],\n  [\"paren.lparen\",\"([\"],\n  [\"variable\",\"k\"],\n  [\"text\",\", \"],\n  [\"variable\",\"v\"],\n  [\"paren.rparen\",\"])\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"comment\",\"-- Dynamic object that has names list as keys and string lenth as values\"]\n],[\n   \"start\",\n  [\"variable\",\"lengths\"],\n  [\"text\",\" = \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"storage.form\",\"@keys\"],\n  [\"text\",\": \"],\n  [\"paren.lparen\",\"{\"],\n  [\"text\",\"| \"],\n  [\"variable\",\"names\"],\n  [\"text\",\" \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"storage.form\",\"@get\"],\n  [\"text\",\": \"],\n  [\"paren.lparen\",\"{\"],\n  [\"variable\",\"key\"],\n  [\"text\",\"|\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"variable\",\"key\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"is\"],\n  [\"text\",\" \"],\n  [\"storage.type\",\"String\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"#\"],\n  [\"variable\",\"key\"],\n  [\"text\",\" \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"language.builtin\",\"print\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\"Lengths\\\"\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"keyword\",\"for\"],\n  [\"text\",\" \"],\n  [\"variable\",\"k\"],\n  [\"text\",\", \"],\n  [\"variable\",\"v\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"in\"],\n  [\"text\",\" \"],\n  [\"variable\",\"lengths\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"language.builtin\",\"print\"],\n  [\"paren.lparen\",\"([\"],\n  [\"variable\",\"k\"],\n  [\"text\",\", \"],\n  [\"variable\",\"v\"],\n  [\"paren.rparen\",\"])\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"variable\",\"cubeRange\"],\n  [\"text\",\" = \"],\n  [\"paren.lparen\",\"{\"],\n  [\"variable\",\"n\"],\n  [\"text\",\"|\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"vars\"],\n  [\"text\",\" \"],\n  [\"variable\",\"i\"],\n  [\"text\",\", \"],\n  [\"variable\",\"v\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"variable\",\"i\"],\n  [\"text\",\" = \"],\n  [\"constant.numeric\",\"0\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"storage.form\",\"@call\"],\n  [\"text\",\": \"],\n  [\"paren.lparen\",\"{\"],\n  [\"text\",\"|\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"variable\",\"v\"],\n  [\"text\",\" = \"],\n  [\"variable\",\"i\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"variable\",\"i\"],\n  [\"text\",\" = \"],\n  [\"variable\",\"i\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"variable\",\"v\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"<\"],\n  [\"text\",\" \"],\n  [\"variable\",\"n\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"],\n  [\"text\",\" \"],\n  [\"variable\",\"v\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"*\"],\n  [\"text\",\" \"],\n  [\"variable\",\"v\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"*\"],\n  [\"text\",\" \"],\n  [\"variable\",\"v\"],\n  [\"text\",\" \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"language.builtin\",\"print\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\"Cubes\\\"\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"keyword\",\"for\"],\n  [\"text\",\" \"],\n  [\"variable\",\"k\"],\n  [\"text\",\", \"],\n  [\"variable\",\"v\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"in\"],\n  [\"text\",\" \"],\n  [\"variable\",\"cubeRange\"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"5\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"language.builtin\",\"print\"],\n  [\"paren.lparen\",\"([\"],\n  [\"variable\",\"k\"],\n  [\"text\",\", \"],\n  [\"variable\",\"v\"],\n  [\"paren.rparen\",\"])\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"language.builtin\",\"print\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\"String\\\"\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"keyword\",\"for\"],\n  [\"text\",\" \"],\n  [\"variable\",\"k\"],\n  [\"text\",\", \"],\n  [\"variable\",\"v\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"in\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"Hello World\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"language.builtin\",\"print\"],\n  [\"paren.lparen\",\"([\"],\n  [\"variable\",\"k\"],\n  [\"text\",\", \"],\n  [\"variable\",\"v\"],\n  [\"paren.rparen\",\"])\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"language.builtin\",\"print\"],\n  [\"paren.lparen\",\"([\"],\n  [\"variable\",\"i\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"for\"],\n  [\"text\",\" \"],\n  [\"variable\",\"i\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"in\"],\n  [\"text\",\" \"],\n  [\"language.builtin\",\"range\"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"10\"],\n  [\"paren.rparen\",\")])\"]\n],[\n   \"start\",\n  [\"language.builtin\",\"print\"],\n  [\"paren.lparen\",\"([\"],\n  [\"variable\",\"i\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"for\"],\n  [\"text\",\" \"],\n  [\"variable\",\"i\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"in\"],\n  [\"text\",\" \"],\n  [\"language.builtin\",\"range\"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"20\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"variable\",\"i\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"%\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"3\"],\n  [\"paren.rparen\",\"])\"]\n],[\n   \"start\"\n],[\n   \"start\"\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"comment\",\"-- Example showing how to do parallel work using split..and\"]\n],[\n   \"start\",\n  [\"variable\",\"base\"],\n  [\"text\",\" = \"],\n  [\"paren.lparen\",\"{\"],\n  [\"variable\",\"bootstrap\"],\n  [\"text\",\", \"],\n  [\"variable\",\"target-dir\"],\n  [\"text\",\"|\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"split\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"variable\",\"copy\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\"res\\\"\"],\n  [\"text\",\", \"],\n  [\"variable\",\"target-dir\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"paren.rparen\",\"}\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"and\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"variable\",\"newer\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\"src/*.less\\\"\"],\n  [\"text\",\", \"],\n  [\"variable\",\"target-dir\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"/style.css\\\"\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"variable\",\"lessc\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\"src/\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"variable\",\"bootstrap\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\".less\\\"\"],\n  [\"text\",\", \"],\n  [\"variable\",\"target-dir\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"/style.css\\\"\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"paren.rparen\",\"}\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"and\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"variable\",\"build\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\"src/\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"variable\",\"bootstrap\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\".js\\\"\"],\n  [\"text\",\", \"],\n  [\"variable\",\"target-dir\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"/app.js\\\"\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"vars\"],\n  [\"text\",\" \"],\n  [\"variable\",\"Dragon\"],\n  [\"text\",\", \"],\n  [\"variable\",\"pet\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"variable\",\"Dragon\"],\n  [\"text\",\" = \"],\n  [\"paren.lparen\",\"{\"],\n  [\"variable\",\"name\"],\n  [\"text\",\"|\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"vars\"],\n  [\"text\",\" \"],\n  [\"variable\",\"asleep\"],\n  [\"text\",\", \"],\n  [\"variable\",\"stuff-in-belly\"],\n  [\"text\",\", \"],\n  [\"variable\",\"stuff-in-intestine\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"       \"],\n  [\"variable\",\"feed\"],\n  [\"text\",\", \"],\n  [\"variable\",\"walk\"],\n  [\"text\",\", \"],\n  [\"variable\",\"put-to-bed\"],\n  [\"text\",\", \"],\n  [\"variable\",\"toss\"],\n  [\"text\",\", \"],\n  [\"variable\",\"rock\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"       \"],\n  [\"variable\",\"hungry?\"],\n  [\"text\",\", \"],\n  [\"variable\",\"poopy?\"],\n  [\"text\",\", \"],\n  [\"variable\",\"passage-of-time\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"variable\",\"asleep\"],\n  [\"text\",\" = \"],\n  [\"constant.language.boolean\",\"false\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"variable\",\"stuff-in-belly\"],\n  [\"text\",\"     = \"],\n  [\"constant.numeric\",\"10\"],\n  [\"text\",\" \"],\n  [\"comment\",\"-- He's full.\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"variable\",\"stuff-in-intestine\"],\n  [\"text\",\" =  \"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\" \"],\n  [\"comment\",\"-- He doesn't need to go.\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"language.builtin\",\"print\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"name\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"string\",\"' is born.'\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"variable\",\"feed\"],\n  [\"text\",\" = \"],\n  [\"paren.lparen\",\"{\"],\n  [\"text\",\"|\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"language.builtin\",\"print\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"'You feed '\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"variable\",\"name\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"string\",\"'.'\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"variable\",\"stuff-in-belly\"],\n  [\"text\",\" = \"],\n  [\"constant.numeric\",\"10\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"variable\",\"passage-of-time\"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"variable\",\"walk\"],\n  [\"text\",\" = \"],\n  [\"paren.lparen\",\"{\"],\n  [\"text\",\"|\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"language.builtin\",\"print\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"'You walk '\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"variable\",\"name\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\".\\\"\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"variable\",\"stuff-in-intestine\"],\n  [\"text\",\" = \"],\n  [\"constant.numeric\",\"0\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"variable\",\"passage-of-time\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"variable\",\"put-to-bed\"],\n  [\"text\",\" = \"],\n  [\"paren.lparen\",\"{\"],\n  [\"text\",\"|\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"language.builtin\",\"print\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"'You put '\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"variable\",\"name\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"string\",\"' to bed.'\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"variable\",\"asleep\"],\n  [\"text\",\" = \"],\n  [\"constant.language.boolean\",\"true\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"for\"],\n  [\"text\",\" \"],\n  [\"variable\",\"i\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"in\"],\n  [\"text\",\" \"],\n  [\"language.builtin\",\"range\"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"3\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"variable\",\"asleep\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"variable\",\"passage-of-time\"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"variable\",\"asleep\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"language.builtin\",\"print\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"name\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"string\",\"' snores, filling the room with smoke.'\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"variable\",\"asleep\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"variable\",\"asleep\"],\n  [\"text\",\" = \"],\n  [\"constant.language.boolean\",\"false\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"language.builtin\",\"print\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"name\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"string\",\"' wakes up slowly.'\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"variable\",\"toss\"],\n  [\"text\",\" = \"],\n  [\"paren.lparen\",\"{\"],\n  [\"text\",\"|\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"language.builtin\",\"print\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"'You toss '\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"variable\",\"name\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"string\",\"' up into the air.'\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"language.builtin\",\"print\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"'He giggles, which singes your eyebrows.'\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"variable\",\"passage-of-time\"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"variable\",\"rock\"],\n  [\"text\",\" = \"],\n  [\"paren.lparen\",\"{\"],\n  [\"text\",\"|\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"language.builtin\",\"print\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"'You rock '\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"variable\",\"name\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"string\",\"' gently.'\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"variable\",\"asleep\"],\n  [\"text\",\" = \"],\n  [\"constant.language.boolean\",\"true\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"language.builtin\",\"print\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"'He briefly dozes off...'\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"variable\",\"passage-of-time\"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"variable\",\"asleep\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"variable\",\"asleep\"],\n  [\"text\",\" = \"],\n  [\"constant.language.boolean\",\"false\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"language.builtin\",\"print\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"'...but wakes when you stop.'\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"variable\",\"hungry?\"],\n  [\"text\",\" = \"],\n  [\"paren.lparen\",\"{\"],\n  [\"text\",\"|\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"variable\",\"stuff-in-belly\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"<=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"2\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"variable\",\"poopy?\"],\n  [\"text\",\" = \"],\n  [\"paren.lparen\",\"{\"],\n  [\"text\",\"|\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"variable\",\"stuff-in-intestine\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\">=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"8\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"variable\",\"passage-of-time\"],\n  [\"text\",\" = \"],\n  [\"paren.lparen\",\"{\"],\n  [\"text\",\"|\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"variable\",\"stuff-in-belly\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\">\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"comment\",\"-- Move food from belly to intestine\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"variable\",\"stuff-in-belly\"],\n  [\"text\",\"     = \"],\n  [\"variable\",\"stuff-in-belly\"],\n  [\"text\",\"     \"],\n  [\"keyword.operator\",\"-\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"variable\",\"stuff-in-intestine\"],\n  [\"text\",\" = \"],\n  [\"variable\",\"stuff-in-intestine\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"paren.rparen\",\"}\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"else\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"],\n  [\"text\",\" \"],\n  [\"comment\",\"-- Our dragon is starving!\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"variable\",\"asleep\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"variable\",\"asleep\"],\n  [\"text\",\" = \"],\n  [\"constant.language.boolean\",\"false\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"language.builtin\",\"print\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"'He wakes up suddenly!'\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"language.builtin\",\"print\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"name\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"string\",\"' is starving! In desperation, he ate YOU!'\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"keyword\",\"abort\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"died\\\"\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"variable\",\"stuff-in-intestine\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\">=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"10\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"variable\",\"stuff-in-intestine\"],\n  [\"text\",\" = \"],\n  [\"constant.numeric\",\"0\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"language.builtin\",\"print\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"'Whoops! '\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"variable\",\"name\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"string\",\"' had an accident...'\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"variable\",\"hungry?\"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"variable\",\"asleep\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"variable\",\"asleep\"],\n  [\"text\",\" = \"],\n  [\"constant.language.boolean\",\"false\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"language.builtin\",\"print\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"'He wakes up suddenly!'\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"language.builtin\",\"print\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"name\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"'s stomach grumbles...\\\"\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"variable\",\"poopy?\"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"variable\",\"asleep\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"variable\",\"asleep\"],\n  [\"text\",\" = \"],\n  [\"constant.language.boolean\",\"false\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"language.builtin\",\"print\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"'He wakes up suddenly!'\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"language.builtin\",\"print\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"name\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"string\",\"' does the potty dance...'\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"comment\",\"-- Export the public interface to this closure object.\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"   \"],\n  [\"variable\",\"feed\"],\n  [\"text\",\": \"],\n  [\"variable\",\"feed\"]\n],[\n   \"start\",\n  [\"text\",\"   \"],\n  [\"variable\",\"walk\"],\n  [\"text\",\": \"],\n  [\"variable\",\"walk\"]\n],[\n   \"start\",\n  [\"text\",\"   \"],\n  [\"variable\",\"put-to-bed\"],\n  [\"text\",\": \"],\n  [\"variable\",\"put-to-bed\"]\n],[\n   \"start\",\n  [\"text\",\"   \"],\n  [\"variable\",\"toss\"],\n  [\"text\",\": \"],\n  [\"variable\",\"toss\"]\n],[\n   \"start\",\n  [\"text\",\"   \"],\n  [\"variable\",\"rock\"],\n  [\"text\",\": \"],\n  [\"variable\",\"rock\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"variable\",\"pet\"],\n  [\"text\",\" = \"],\n  [\"variable\",\"Dragon\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"'Norbert'\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"variable\",\"pet\"],\n  [\"text\",\".\"],\n  [\"variable\",\"feed\"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"variable\",\"pet\"],\n  [\"text\",\".\"],\n  [\"variable\",\"toss\"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"variable\",\"pet\"],\n  [\"text\",\".\"],\n  [\"variable\",\"walk\"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"variable\",\"pet\"],\n  [\"text\",\".\"],\n  [\"variable\",\"put-to-bed\"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"variable\",\"pet\"],\n  [\"text\",\".\"],\n  [\"variable\",\"rock\"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"variable\",\"pet\"],\n  [\"text\",\".\"],\n  [\"variable\",\"put-to-bed\"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"variable\",\"pet\"],\n  [\"text\",\".\"],\n  [\"variable\",\"put-to-bed\"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"variable\",\"pet\"],\n  [\"text\",\".\"],\n  [\"variable\",\"put-to-bed\"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"variable\",\"pet\"],\n  [\"text\",\".\"],\n  [\"variable\",\"put-to-bed\"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\"\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_jade.json",
    "content": "[[\n   \"start\",\n  [\"keyword.other.doctype.jade\",\"!!!doctype\"]\n],[\n   \"start\",\n  [\"keyword.other.doctype.jade\",\"!!!5\"]\n],[\n   \"start\",\n  [\"keyword.other.doctype.jade\",\"!!!\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword.control.import.include.jade\",\"include\"],\n  [\"text\",\" something\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword.control.import.include.jade\",\"         include\"],\n  [\"text\",\" another_thing\"]\n],[\n   \"start\"\n],[\n   [\"comment_block\",2,\"start\"],\n  [\"comment\",\"  // let's talk about it\"]\n],[\n   \"start\"\n],[\n   [\"comment_block\",0,\"start\"],\n  [\"comment\",\"// \"]\n],[\n   [\"comment_block\",0,\"start\"],\n  [\"comment\",\"  here it is. a block comment!\"]\n],[\n   [\"comment_block\",0,\"start\"],\n  [\"comment\",\" and another row!\"]\n],[\n   \"start\",\n  [\"meta.tag.any.jade\",\"but\"],\n  [\"text\",\" not here.\"]\n],[\n   \"start\"\n],[\n   [\"comment_block\",5,\"start\"],\n  [\"comment\",\"     // \"]\n],[\n   [\"comment_block\",5,\"start\"],\n  [\"comment\",\"        a far spaced\"]\n],[\n   \"start\",\n  [\"text\",\"    should be lack of block\"]\n],[\n   \"start\"\n],[\n   [\"comment_block\",3,\"start\"],\n  [\"comment\",\"   // also not a comment\"]\n],[\n   [\"comment_block\",3,\"start\"],\n  [\"comment\",\"     div.attemptAtBlock\"]\n],[\n   \"start\",\n  [\"text\",\"  \"]\n],[\n   \"start\",\n  [\"meta.tag.any.jade\",\"  span\"],\n  [\"entity.other.attribute-name.id.jade\",\"#myName\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"string.interpolated.jade\",\"#{implicit}\"]\n],[\n   \"start\",\n  [\"text\",\"     \"],\n  [\"string.interpolated.jade\",\"!{more_explicit}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"suport.type.attribute.id.jade\",\"#idDiv\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"suport.type.attribute.class.jade\",\".idDiv\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"meta.tag.any.jade\",\"    test\"],\n  [\"punctuation\",\"(\"],\n  [\"entity.other.attribute-name.jade\",\"id\"],\n  [\"punctuation\",\"=\"],\n  [\"string\",\"\\\"tag\\\"\"],\n  [\"punctuation\",\")\"]\n],[\n   \"start\",\n  [\"meta.tag.any.jade\",\"    header\"],\n  [\"punctuation\",\"(\"],\n  [\"entity.other.attribute-name.jade\",\"id\"],\n  [\"punctuation\",\"=\"],\n  [\"string\",\"\\\"tag\\\"\"],\n  [\"text\",\", \"],\n  [\"entity.other.attribute-name.jade\",\"blah\"],\n  [\"punctuation\",\"=\"],\n  [\"string\",\"\\\"foo\\\"\"],\n  [\"text\",\", \"],\n  [\"entity.other.attribute-name.jade\",\"meh\"],\n  [\"punctuation\",\"=\"],\n  [\"string\",\"\\\"aads\\\"\"],\n  [\"punctuation\",\")\"]\n],[\n   \"start\",\n  [\"storage.type.function.jade\",\"mixin\"],\n  [\"entity.name.function.jade\",\" article\"],\n  [\"punctuation.definition.parameters.begin.jade\",\"(\"],\n  [\"variable.parameter.function.jade\",\"obj, parents\"],\n  [\"punctuation.definition.parameters.end.jade\",\")\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"storage.type.function.jade\",\"  mixin\"],\n  [\"entity.name.function.jade\",\" bleh\"],\n  [\"punctuation.definition.parameters.begin.jade\",\"(\"],\n  [\"punctuation.definition.parameters.end.jade\",\")\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"storage.type.function.jade\",\"    mixin\"],\n  [\"entity.name.function.jade\",\" clever-name\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"source.js.embedded.jade\",\" -\"],\n  [\"storage.type\",\"var\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"x\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"0\\\"\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"source.js.embedded.jade\",\" -\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"y\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"each\"],\n  [\"text\",\" z\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"source.js.embedded.jade\",\" -\"],\n  [\"text\",\" \"],\n  [\"storage.type\",\"var\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"items\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"string\",\"\\\"one\\\"\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"two\\\"\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"three\\\"\"],\n  [\"text\",\"]\"]\n],[\n   \"start\",\n  [\"meta.tag.any.jade\",\"   each\"],\n  [\"text\",\" item in items\"]\n],[\n   \"start\",\n  [\"meta.tag.any.jade\",\"    li\"],\n  [\"text\",\"= item\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_java.json",
    "content": "[[\n   \"start\",\n  [\"keyword\",\"public\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"class\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"InfiniteLoop\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"{\"]\n],[\n   \"start\"\n],[\n   \"comment\",\n  [\"text\",\"    \"],\n  [\"comment\",\"/*\"]\n],[\n   \"comment\",\n  [\"comment\",\"     * This will cause the program to hang...\"]\n],[\n   \"comment\",\n  [\"comment\",\"     *\"]\n],[\n   \"comment\",\n  [\"comment\",\"     * Taken from:\"]\n],[\n   \"comment\",\n  [\"comment\",\"     * http://www.exploringbinary.com/java-hangs-when-converting-2-2250738585072012e-308/\"]\n],[\n   \"start\",\n  [\"comment\",\"     */\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"public\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"static\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"void\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"main\"],\n  [\"lparen\",\"(\"],\n  [\"support.function\",\"String\"],\n  [\"lparen\",\"[\"],\n  [\"rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"args\"],\n  [\"rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"keyword\",\"double\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"d\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"Double\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"parseDouble\"],\n  [\"lparen\",\"(\"],\n  [\"string\",\"\\\"2.2250738585072012e-308\\\"\"],\n  [\"rparen\",\")\"],\n  [\"text\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"comment\",\"// unreachable code\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"support.function\",\"System\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"out\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"println\"],\n  [\"lparen\",\"(\"],\n  [\"string\",\"\\\"Value: \\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"d\"],\n  [\"rparen\",\")\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"rparen\",\"}\"]\n],[\n   \"start\",\n  [\"rparen\",\"}\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_javascript.json",
    "content": "[[\n   \"start\",\n  [\"comment\",\"//test: tokenize 'standard' functions\"]\n],[\n   \"no_regex\",\n  [\"identifier\",\"string\"],\n  [\"punctuation.operator\",\".\"],\n  [\"support.function\",\"charCodeAt\"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"23\"],\n  [\"paren.rparen\",\")\"],\n  [\"punctuation.operator\",\";\"],\n  [\"text\",\" \"],\n  [\"variable.language\",\"document\"],\n  [\"punctuation.operator\",\".\"],\n  [\"support.function.dom\",\"getElementById\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"'test'\"],\n  [\"paren.rparen\",\")\"],\n  [\"punctuation.operator\",\";\"],\n  [\"text\",\" \"],\n  [\"storage.type\",\"console\"],\n  [\"punctuation.operator\",\".\"],\n  [\"support.function.firebug\",\"log\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"'Here it is'\"],\n  [\"paren.rparen\",\")\"],\n  [\"punctuation.operator\",\";\"],\n  [\"string\",\"\\\";\"]\n],[\n   \"no_regex\",\n  [\"identifier\",\"test\"],\n  [\"punctuation.operator\",\":\"],\n  [\"text\",\" \"],\n  [\"comment.doc\",\"/**tokenize doc*/\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"comment\"]\n],[\n   \"no_regex\",\n  [\"comment.doc\",\"/**tokenize doc comment with \"],\n  [\"comment.doc.tag\",\"@tag\"],\n  [\"comment.doc\",\" {}*/\"]\n],[\n   \"no_regex\",\n  [\"comment\",\"//test: tokenize parens\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"storage.type\",\"var\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"$line$\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"[{( )}]\\\"\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"comment\",\"//test tokenize arithmetic expression which looks like a regexp\"]\n],[\n   \"no_regex\",\n  [\"identifier\",\"a\"],\n  [\"keyword.operator\",\"/\"],\n  [\"identifier\",\"b\"],\n  [\"keyword.operator\",\"/\"],\n  [\"identifier\",\"c\"]\n],[\n   \"no_regex\",\n  [\"identifier\",\"a\"],\n  [\"keyword.operator\",\"/=\"],\n  [\"identifier\",\"b\"],\n  [\"keyword.operator\",\"/\"],\n  [\"identifier\",\"c\"]\n],[\n   \"no_regex\",\n  [\"comment\",\"//test tokenize reg exps\"]\n],[\n   \"no_regex\",\n  [\"identifier\",\"a\"],\n  [\"keyword.operator\",\"=\"],\n  [\"string.regexp\",\"/b/g\"]\n],[\n   \"no_regex\",\n  [\"identifier\",\"a\"],\n  [\"keyword.operator\",\"+\"],\n  [\"string.regexp\",\"/b/g\"]\n],[\n   \"no_regex\",\n  [\"identifier\",\"a\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"string.regexp\",\"/2 \"],\n  [\"constant.language.escape\",\"+\"],\n  [\"string.regexp\",\" 1/gimyx\"],\n  [\"identifier\",\"k\"]\n],[\n   \"no_regex\",\n  [\"identifier\",\"a\"],\n  [\"keyword.operator\",\"=\"],\n  [\"string.regexp\",\"/a/\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"/\"],\n  [\"text\",\" \"],\n  [\"string.regexp\",\"/a/\"]\n],[\n   \"no_regex\",\n  [\"keyword\",\"case\"],\n  [\"text\",\" \"],\n  [\"string.regexp\",\"/a/\"],\n  [\"punctuation.operator\",\".\"],\n  [\"support.function\",\"test\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"c\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"no_regex\",\n  [\"comment\",\"//test tokenize multi-line comment containing a single line comment\"]\n],[\n   \"no_regex\",\n  [\"identifier\",\"noRegex\"]\n],[\n   \"no_regex\",\n  [\"comment\",\"/* foo // bar */\"]\n],[\n   \"start\",\n  [\"identifier\",\"canBeRegex\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"comment\",\"/* foo // bar */\"]\n],[\n   \"start\",\n  [\"comment\",\"// test tokenize identifier with umlauts\"]\n],[\n   \"no_regex\",\n  [\"identifier\",\"fu\"],\n  [\"punctuation.operator\",\"?\"],\n  [\"identifier\",\"e\"]\n],[\n   \"no_regex\",\n  [\"comment\",\"// test // is not a regexp\"]\n],[\n   \"start\",\n  [\"paren.lparen\",\"{\"],\n  [\"text\",\" \"],\n  [\"comment\",\"// 123\"]\n],[\n   \"start\",\n  [\"comment\",\"//test skipping escaped chars\"]\n],[\n   \"no_regex\",\n  [\"string\",\"'Meh\"],\n  [\"constant.language.escape\",\"\\\\\\\\\"],\n  [\"string\",\"nNeh'\"]\n],[\n   \"no_regex\",\n  [\"storage.type\",\"console\"],\n  [\"punctuation.operator\",\".\"],\n  [\"support.function.firebug\",\"log\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"'\"],\n  [\"constant.language.escape\",\"\\\\\\\\\"],\n  [\"string\",\"u1232Feh'\"]\n],[\n   \"qqstring\",\n  [\"string\",\"\\\"test multiline\\\\\"]\n],[\n   \"no_regex\",\n  [\"string\",\" strings\\\"\"]\n],[\n   \"no_regex\",\n  [\"identifier\",\"a\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"'\"]\n],[\n   \"qqstring\",\n  [\"identifier\",\"b\"],\n  [\"keyword.operator\",\"=\"],\n  [\"string\",\"\\\"\\\\\"]\n],[\n   \"no_regex\",\n  [\"string\",\"still a string\"]\n],[\n   \"no_regex\",\n  [\"text\",\" \"]\n],[\n   \"no_regex\",\n  [\"text\",\" \"]\n],[\n   \"start\",\n  [\"storage.type\",\"function\"],\n  [\"text\",\" \"],\n  [\"entity.name.function\",\"foo\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable.parameter\",\"items\"],\n  [\"punctuation.operator\",\", \"],\n  [\"variable.parameter\",\"nada\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"for\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"storage.type\",\"var\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"i\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"0\"],\n  [\"punctuation.operator\",\";\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"i\"],\n  [\"keyword.operator\",\"<\"],\n  [\"identifier\",\"items\"],\n  [\"punctuation.operator\",\".\"],\n  [\"support.constant\",\"length\"],\n  [\"punctuation.operator\",\";\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"i\"],\n  [\"keyword.operator\",\"++\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"support.function\",\"alert\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"items\"],\n  [\"paren.lparen\",\"[\"],\n  [\"identifier\",\"i\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"juhu\"],\n  [\"constant.language.escape\",\"\\\\n\"],\n  [\"string\",\"\\\"\"],\n  [\"paren.rparen\",\")\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"no_regex\",\n  [\"text\",\"    \"],\n  [\"paren.rparen\",\"}\"],\n  [\"text\",\"\\t\"],\n  [\"comment\",\"// Real Tab.\"]\n],[\n   \"no_regex\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"no_regex\"\n],[\n   \"no_regex\",\n  [\"identifier\",\"regexp\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"string.regexp\",\"/p\"],\n  [\"constant.language.delimiter\",\"|\"],\n  [\"string.regexp\",\"p/\"],\n  [\"text\",\" \"],\n  [\"comment\",\"// ends here\"]\n],[\n   \"no_regex\"\n],[\n   \"no_regex\",\n  [\"identifier\",\"r\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"string.regexp\",\"/d\"],\n  [\"constant.language.escape\",\"{1,2}?\"],\n  [\"string.regexp\",\"f{e}\"],\n  [\"invalid\",\"++\"],\n  [\"string.regexp\",\"r\"],\n  [\"constant.language.escape\",\"*?\"],\n  [\"regexp.keyword.operator\",\"\\\\d\"],\n  [\"constant.language.escape\",\"+?[]\"],\n  [\"string.regexp\",\"r\"],\n  [\"constant.language.escape\",\"[^\"],\n  [\"string.regexp.charachterclass\",\"r\"],\n  [\"constant.language.escape\",\"-\"],\n  [\"string.regexp.charachterclass\",\"o\"],\n  [\"regexp.charclass.keyword.operator\",\"\\\\f\\\\f\"],\n  [\"string.regexp.charachterclass\",\"[\"],\n  [\"regexp.charclass.keyword.operator\",\"\\\\f\"],\n  [\"constant.language.escape\",\"]?\"],\n  [\"string.regexp\",\"r\"],\n  [\"invalid\",\"{7}+\"],\n  [\"string.regexp\",\"r\"],\n  [\"regexp.keyword.operator\",\"\\\\{\"],\n  [\"string.regexp\",\"7}\"],\n  [\"constant.language.escape\",\"+\"],\n  [\"string.regexp\",\"rr--rr\"],\n  [\"constant.language.escape\",\"$^(?:\"],\n  [\"string.regexp\",\"d\"],\n  [\"constant.language.delimiter\",\"|\"],\n  [\"string.regexp\",\"s\"],\n  [\"constant.language.escape\",\")(?=\"],\n  [\"string.regexp\",\"a\"],\n  [\"constant.language.delimiter\",\"|\"],\n  [\"constant.language.escape\",\")(?!\"],\n  [\"string.regexp\",\"y\"],\n  [\"constant.language.escape\",\")[]\"],\n  [\"constant.language.delimiter\",\"|\"],\n  [\"invalid\",\"$?\"],\n  [\"constant.language.delimiter\",\"|\"],\n  [\"invalid\",\"^*\"],\n  [\"string.regexp\",\"/\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"o\"]\n],[\n   \"no_regex\",\n  [\"identifier\",\"a\"],\n  [\"keyword.operator\",\"=\"],\n  [\"string.regexp\",\"/a/\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"jk\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"string.regexp\",\"/ /\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"/\"],\n  [\"text\",\" \"],\n  [\"string.regexp\",\"/ /\"]\n],[\n   \"no_regex\",\n  [\"text\",\" \"],\n  [\"comment.doc\",\"/************************************/\"]\n],[\n   \"no_regex\",\n  [\"comment.doc\",\"/** total mess, tricky to highlight**/\"]\n],[\n   \"no_regex\"\n],[\n   \"start\",\n  [\"storage.type\",\"function\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"doc-start\",\n  [\"text\",\"\\t\"],\n  [\"comment.doc\",\"/**\"]\n],[\n   \"doc-start\",\n  [\"comment.doc\",\"\\t * docComment\"]\n],[\n   \"no_regex\",\n  [\"comment.doc\",\"\\t **/\"]\n],[\n   \"no_regex\",\n  [\"text\",\"\\t\"],\n  [\"identifier\",\"r\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"string.regexp\",\"/u\"],\n  [\"regexp.keyword.operator\",\"\\\\t\"],\n  [\"constant.language.escape\",\"*\"],\n  [\"string.regexp\",\"/\"]\n],[\n   \"no_regex\",\n  [\"text\",\"\\t\"],\n  [\"identifier\",\"g\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1.00\"],\n  [\"identifier\",\"E\"],\n  [\"keyword.operator\",\"^\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"y\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1.2\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1.\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\".2\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"052\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0O7\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0x25\"]\n],[\n   \"no_regex\",\n  [\"text\",\"\\t\"],\n  [\"identifier\",\"t\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"string\",\"'d'\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"string\",\"''\"],\n  [\"paren.rparen\",\"]\"]\n],[\n   \"no_regex\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"storage.type\",\"function\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"comment\",\"/* eee */\"]\n],[\n   \"no_regex\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"no_regex\"\n],[\n   \"qqstring\",\n  [\"string\",\"\\\"s\\\\\"]\n],[\n   \"no_regex\",\n  [\"string\",\"s\"],\n  [\"constant.language.escape\",\"\\\\u7824\"],\n  [\"string\",\"sss\"],\n  [\"constant.language.escape\",\"\\\\u\"],\n  [\"string\",\"1\\\"\"]\n],[\n   \"no_regex\"\n],[\n   \"qstring\",\n  [\"string\",\"'\\\\\"]\n],[\n   \"no_regex\",\n  [\"string\",\"string'\"]\n],[\n   \"no_regex\"\n],[\n   \"no_regex\",\n  [\"text\",\"'\"]\n],[\n   \"no_regex\",\n  [\"identifier\",\"string\"],\n  [\"text\",\"'\"]\n],[\n   \"no_regex\"\n],[\n   \"no_regex\",\n  [\"string\",\"\\\"trailing space\"],\n  [\"constant.language.escape\",\"\\\\ \"],\n  [\"string\",\"  \"]\n],[\n   \"no_regex\",\n  [\"string\",\"\\\"         \\\"\"],\n  [\"text\",\"    \"],\n  [\"keyword.operator\",\"/\"],\n  [\"identifier\",\"not\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"a\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"regexp\"],\n  [\"keyword.operator\",\"/\"],\n  [\"identifier\",\"g\"]\n],[\n   \"no_regex\"\n],[\n   \"doc-start\",\n  [\"comment.doc\",\"/**\"]\n],[\n   \"doc-start\",\n  [\"comment.doc\",\" *doc\"]\n],[\n   \"no_regex\",\n  [\"comment.doc\",\" */\"]\n],[\n   \"no_regex\"\n],[\n   \"start\",\n  [\"identifier\",\"a\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"string\",\"'a'\"],\n  [\"punctuation.operator\",\":\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"b\"],\n  [\"punctuation.operator\",\",\"]\n],[\n   \"no_regex\",\n  [\"text\",\"\\t\"],\n  [\"string\",\"'g'\"],\n  [\"text\",\":\"],\n  [\"text\",\" \"],\n  [\"storage.type\",\"function\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable.parameter\",\"t\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"no_regex\",\n  [\"text\",\"\\t\"],\n  [\"entity.name.function\",\"gta\"],\n  [\"punctuation.operator\",\":\"],\n  [\"storage.type\",\"function\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable.parameter\",\"a\"],\n  [\"punctuation.operator\",\",\"],\n  [\"variable.parameter\",\"b\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"no_regex\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"no_regex\"\n],[\n   \"no_regex\",\n  [\"identifier\",\"z\"],\n  [\"keyword.operator\",\">>=\"],\n  [\"identifier\",\"t\"],\n  [\"keyword.operator\",\"<<\"],\n  [\"identifier\",\"f\"],\n  [\"keyword.operator\",\">>\"],\n  [\"identifier\",\"r\"],\n  [\"keyword.operator\",\">>>\"],\n  [\"identifier\",\"s\"],\n  [\"keyword.operator\",\">=\"],\n  [\"constant.numeric\",\"0b1\"]\n],[\n   \"no_regex\"\n],[\n   \"function_arguments\",\n  [\"identifier\",\"foo\"],\n  [\"punctuation.operator\",\".\"],\n  [\"storage.type\",\"protoype\"],\n  [\"punctuation.operator\",\".\"],\n  [\"entity.name.function\",\"d\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"storage.type\",\"function\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable.parameter\",\"a\"],\n  [\"punctuation.operator\",\", \"],\n  [\"variable.parameter\",\"b\"],\n  [\"punctuation.operator\",\",\"]\n],[\n   \"no_regex\",\n  [\"punctuation.operator\",\"                          \"],\n  [\"variable.parameter\",\"c\"],\n  [\"punctuation.operator\",\", \"],\n  [\"variable.parameter\",\"d\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"no_regex\",\n  [\"storage.type\",\"foo\"],\n  [\"punctuation.operator\",\".\"],\n  [\"entity.name.function\",\"d\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"storage.type\",\"function\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable.parameter\",\"a\"],\n  [\"punctuation.operator\",\",     \"],\n  [\"variable.parameter\",\"b\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"no_regex\",\n  [\"storage.type\",\"foo\"],\n  [\"punctuation.operator\",\".\"],\n  [\"entity.name.function\",\"d\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"storage.type\",\"function\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable.parameter\",\"a\"],\n  [\"punctuation.operator\",\",  \"],\n  [\"comment.doc\",\"/*****/\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"d\"],\n  [\"string\",\"\\\"string\\\"\"],\n  [\"text\",\"   \"]\n],[\n   \"no_regex\"\n],[\n   \"no_regex\",\n  [\"keyword.operator\",\"<\"],\n  [\"identifier\",\"div\"]\n],[\n   [\"start\",\"jsxAttributes\",\"jsxAttributes\",\"jsx\",1],\n  [\"identifier\",\"z\"],\n  [\"keyword.operator\",\"=\"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"div\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"paren.quasi.start\",\"{\"],\n  [\"keyword.operator\",\"...\"],\n  [\"variable.language\",\"this\"],\n  [\"punctuation.operator\",\".\"],\n  [\"identifier\",\"props\"],\n  [\"paren.quasi.end\",\"}\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"x\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"paren.quasi.start\",\"{\"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"2\"],\n  [\"paren.quasi.end\",\"}\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"y\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"z{a}b\"],\n  [\"constant.language.escape.reference.xml\",\"&amp;\"],\n  [\"string.attribute-value.xml\",\"\\\"\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"t\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"paren.quasi.start\",\"{\"]\n],[\n   [\"start\",\"jsxAttributes\",\"jsxAttributes\",\"jsx\",1],\n  [\"text\",\"        \"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"a\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"paren.quasi.start\",\"{\"],\n  [\"constant.numeric\",\"2\"],\n  [\"paren.quasi.end\",\"}\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"a\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   [\"jsx\",1],\n  [\"text\",\"    \"],\n  [\"paren.quasi.end\",\"}\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   [\"jsx\",1],\n  [\"string\",\"1 \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"a\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"string\",\" \"],\n  [\"paren.quasi.start\",\"{\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"++\"],\n  [\"identifier\",\"x\"],\n  [\"text\",\"  \"],\n  [\"paren.quasi.end\",\"}\"],\n  [\"string\",\" \"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"a\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"div\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"storage.type\",\"var\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"o\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   [\"start\",\"no_regex\",\"start\",\"string.quasi.start\",\"string.quasi.start\",\"no_regex\"],\n  [\"text\",\"    \"],\n  [\"identifier\",\"t\"],\n  [\"punctuation.operator\",\":\"],\n  [\"string.quasi.start\",\"`\"],\n  [\"paren.quasi.start\",\"${\"],\n  [\"paren.lparen\",\"[\"],\n  [\"paren.rparen\",\"]\"],\n  [\"punctuation.operator\",\".\"],\n  [\"identifier\",\"map\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"x\"],\n  [\"text\",\" \"],\n  [\"storage.type\",\"=>\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   [\"#tmp\",\"no_regex\",\"start\",\"no_regex\",\"start\",\"string.quasi.start\",\"string.quasi.start\",\"no_regex\"],\n  [\"text\",\"        \"],\n  [\"keyword\",\"return\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"x\"]\n],[\n   \"no_regex\",\n  [\"text\",\"    \"],\n  [\"paren.rparen\",\"})\"],\n  [\"paren.quasi.end\",\"}\"],\n  [\"string.quasi.end\",\"`\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"],\n  [\"punctuation.operator\",\";\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_json.json",
    "content": "[[\n   \"start\",\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\" \"],\n  [\"variable\",\"\\\"query\\\"\"],\n  [\"text\",\": \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"variable\",\"\\\"count\\\"\"],\n  [\"text\",\": \"],\n  [\"constant.numeric\",\"10\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"variable\",\"\\\"created\\\"\"],\n  [\"text\",\": \"],\n  [\"string\",\"\\\"2011-06-21T08:10:46Z\\\"\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"variable\",\"\\\"lang\\\"\"],\n  [\"text\",\": \"],\n  [\"string\",\"\\\"en-US\\\"\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"variable\",\"\\\"results\\\"\"],\n  [\"text\",\": \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"   \"],\n  [\"variable\",\"\\\"photo\\\"\"],\n  [\"text\",\": \"],\n  [\"paren.lparen\",\"[\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"     \"],\n  [\"variable\",\"\\\"farm\\\"\"],\n  [\"text\",\": \"],\n  [\"string\",\"\\\"6\\\"\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"     \"],\n  [\"variable\",\"\\\"id\\\"\"],\n  [\"text\",\": \"],\n  [\"string\",\"\\\"5855620975\\\"\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"     \"],\n  [\"variable\",\"\\\"isfamily\\\"\"],\n  [\"text\",\": \"],\n  [\"string\",\"\\\"0\\\"\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"     \"],\n  [\"variable\",\"\\\"isfriend\\\"\"],\n  [\"text\",\": \"],\n  [\"string\",\"\\\"0\\\"\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"     \"],\n  [\"variable\",\"\\\"ispublic\\\"\"],\n  [\"text\",\": \"],\n  [\"string\",\"\\\"1\\\"\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"     \"],\n  [\"variable\",\"\\\"owner\\\"\"],\n  [\"text\",\": \"],\n  [\"string\",\"\\\"32021554@N04\\\"\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"     \"],\n  [\"variable\",\"\\\"secret\\\"\"],\n  [\"text\",\": \"],\n  [\"string\",\"\\\"f1f5e8515d\\\"\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"     \"],\n  [\"variable\",\"\\\"server\\\"\"],\n  [\"text\",\": \"],\n  [\"string\",\"\\\"5110\\\"\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"     \"],\n  [\"variable\",\"\\\"title\\\"\"],\n  [\"text\",\": \"],\n  [\"string\",\"\\\"7087 bandit cat\\\"\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"paren.rparen\",\"}\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"     \"],\n  [\"variable\",\"\\\"farm\\\"\"],\n  [\"text\",\": \"],\n  [\"string\",\"\\\"4\\\"\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"     \"],\n  [\"variable\",\"\\\"id\\\"\"],\n  [\"text\",\": \"],\n  [\"string\",\"\\\"5856170534\\\"\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"     \"],\n  [\"variable\",\"\\\"isfamily\\\"\"],\n  [\"text\",\": \"],\n  [\"string\",\"\\\"0\\\"\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"     \"],\n  [\"variable\",\"\\\"isfriend\\\"\"],\n  [\"text\",\": \"],\n  [\"string\",\"\\\"0\\\"\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"     \"],\n  [\"variable\",\"\\\"ispublic\\\"\"],\n  [\"text\",\": \"],\n  [\"string\",\"\\\"1\\\"\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"     \"],\n  [\"variable\",\"\\\"owner\\\"\"],\n  [\"text\",\": \"],\n  [\"string\",\"\\\"32021554@N04\\\"\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"     \"],\n  [\"variable\",\"\\\"secret\\\"\"],\n  [\"text\",\": \"],\n  [\"string\",\"\\\"ff1efb2a6f\\\"\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"     \"],\n  [\"variable\",\"\\\"server\\\"\"],\n  [\"text\",\": \"],\n  [\"string\",\"\\\"3217\\\"\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"     \"],\n  [\"variable\",\"\\\"title\\\"\"],\n  [\"text\",\": \"],\n  [\"string\",\"\\\"6975 rusty cat\\\"\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"paren.rparen\",\"}\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"     \"],\n  [\"variable\",\"\\\"farm\\\"\"],\n  [\"text\",\": \"],\n  [\"string\",\"\\\"6\\\"\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"     \"],\n  [\"variable\",\"\\\"id\\\"\"],\n  [\"text\",\": \"],\n  [\"string\",\"\\\"5856172972\\\"\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"     \"],\n  [\"variable\",\"\\\"isfamily\\\"\"],\n  [\"text\",\": \"],\n  [\"string\",\"\\\"0\\\"\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"     \"],\n  [\"variable\",\"\\\"isfriend\\\"\"],\n  [\"text\",\": \"],\n  [\"string\",\"\\\"0\\\"\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"     \"],\n  [\"variable\",\"\\\"ispublic\\\"\"],\n  [\"text\",\": \"],\n  [\"string\",\"\\\"1\\\"\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"     \"],\n  [\"variable\",\"\\\"owner\\\"\"],\n  [\"text\",\": \"],\n  [\"string\",\"\\\"51249875@N03\\\"\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"     \"],\n  [\"variable\",\"\\\"secret\\\"\"],\n  [\"text\",\": \"],\n  [\"string\",\"\\\"6c6887347c\\\"\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"     \"],\n  [\"variable\",\"\\\"server\\\"\"],\n  [\"text\",\": \"],\n  [\"string\",\"\\\"5192\\\"\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"     \"],\n  [\"variable\",\"\\\"title\\\"\"],\n  [\"text\",\": \"],\n  [\"string\",\"\\\"watermarked-cats\\\"\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"paren.rparen\",\"}\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"     \"],\n  [\"variable\",\"\\\"farm\\\"\"],\n  [\"text\",\": \"],\n  [\"string\",\"\\\"6\\\"\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"     \"],\n  [\"variable\",\"\\\"id\\\"\"],\n  [\"text\",\": \"],\n  [\"string\",\"\\\"5856168328\\\"\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"     \"],\n  [\"variable\",\"\\\"isfamily\\\"\"],\n  [\"text\",\": \"],\n  [\"string\",\"\\\"0\\\"\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"     \"],\n  [\"variable\",\"\\\"isfriend\\\"\"],\n  [\"text\",\": \"],\n  [\"string\",\"\\\"0\\\"\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"     \"],\n  [\"variable\",\"\\\"ispublic\\\"\"],\n  [\"text\",\": \"],\n  [\"string\",\"\\\"1\\\"\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"     \"],\n  [\"variable\",\"\\\"owner\\\"\"],\n  [\"text\",\": \"],\n  [\"string\",\"\\\"32021554@N04\\\"\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"     \"],\n  [\"variable\",\"\\\"secret\\\"\"],\n  [\"text\",\": \"],\n  [\"string\",\"\\\"0c1cfdf64c\\\"\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"     \"],\n  [\"variable\",\"\\\"server\\\"\"],\n  [\"text\",\": \"],\n  [\"string\",\"\\\"5078\\\"\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"     \"],\n  [\"variable\",\"\\\"title\\\"\"],\n  [\"text\",\": \"],\n  [\"string\",\"\\\"7020 mandy cat\\\"\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"paren.rparen\",\"}\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"     \"],\n  [\"variable\",\"\\\"farm\\\"\"],\n  [\"text\",\": \"],\n  [\"string\",\"\\\"3\\\"\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"     \"],\n  [\"variable\",\"\\\"id\\\"\"],\n  [\"text\",\": \"],\n  [\"string\",\"\\\"5856171774\\\"\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"     \"],\n  [\"variable\",\"\\\"isfamily\\\"\"],\n  [\"text\",\": \"],\n  [\"string\",\"\\\"0\\\"\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"     \"],\n  [\"variable\",\"\\\"isfriend\\\"\"],\n  [\"text\",\": \"],\n  [\"string\",\"\\\"0\\\"\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"     \"],\n  [\"variable\",\"\\\"ispublic\\\"\"],\n  [\"text\",\": \"],\n  [\"string\",\"\\\"1\\\"\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"     \"],\n  [\"variable\",\"\\\"owner\\\"\"],\n  [\"text\",\": \"],\n  [\"string\",\"\\\"32021554@N04\\\"\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"     \"],\n  [\"variable\",\"\\\"secret\\\"\"],\n  [\"text\",\": \"],\n  [\"string\",\"\\\"7f5a3180ab\\\"\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"     \"],\n  [\"variable\",\"\\\"server\\\"\"],\n  [\"text\",\": \"],\n  [\"string\",\"\\\"2696\\\"\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"     \"],\n  [\"variable\",\"\\\"title\\\"\"],\n  [\"text\",\": \"],\n  [\"string\",\"\\\"7448 bobby cat\\\"\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"   \"],\n  [\"paren.rparen\",\"]\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\" \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_jsoniq.json",
    "content": "[[\n   \"[\\\"start\\\"]\",\n  [\"support.function\",\"TODO\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_jsp.json",
    "content": "[[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"html\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"body\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"js-start\",\n  [\"text.xml\",\"    \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.script.tag-name.xml\",\"script\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"js-start\",\n  [\"text\",\"        \"],\n  [\"storage.type\",\"var\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"x\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"abc\\\"\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"js-start\",\n  [\"text\",\"        \"],\n  [\"storage.type\",\"function\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"y\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"js-no_regex\",\n  [\"text\",\"        \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.script.tag-name.xml\",\"script\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"css-start\",\n  [\"text.xml\",\"    \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.style.tag-name.xml\",\"style\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"css-ruleset\",\n  [\"text\",\"        \"],\n  [\"variable\",\".class\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"css-ruleset\",\n  [\"text\",\"            \"],\n  [\"support.type\",\"background\"],\n  [\"text\",\": \"],\n  [\"constant.numeric\",\"#124356\"],\n  [\"text\",\";\"]\n],[\n   \"css-start\",\n  [\"text\",\"        \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.style.tag-name.xml\",\"style\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"p\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"        Today's date: \"],\n  [\"meta.tag\",\"<%\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"(\"],\n  [\"keyword\",\"new\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"java\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"util\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"Date\"],\n  [\"lparen\",\"(\"],\n  [\"rparen\",\"))\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"toLocaleString\"],\n  [\"lparen\",\"(\"],\n  [\"rparen\",\")\"],\n  [\"meta.tag\",\"%>\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"p\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"meta.tag\",\"<%\"],\n  [\"keyword.operator\",\"!\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"int\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"i\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\"; \"],\n  [\"meta.tag\",\"%>\"]\n],[\n   \"jsp-start\",\n  [\"text.xml\",\"    \"],\n  [\"meta.tag\",\"<jsp:declaration>\"]\n],[\n   \"jsp-start\",\n  [\"text\",\"       \"],\n  [\"keyword\",\"int\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"j\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"10\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"meta.tag\",\"</jsp:declaration>\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"comment\",\"<%-- This is JSP comment --%>\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"meta.tag\",\"<%@\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"directive\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"attribute\"],\n  [\"keyword.operator\",\"=\"],\n  [\"string\",\"\\\"value\\\"\"],\n  [\"text\",\" \"],\n  [\"meta.tag\",\"%>\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"h2\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\"Select Languages:\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"h2\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.form.tag-name.xml\",\"form\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"ACTION\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"jspCheckBox.jsp\\\"\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"        \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.form.tag-name.xml\",\"input\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"type\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"checkbox\\\"\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"name\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"id\\\"\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"value\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"Java\\\"\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\" Java\"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"BR\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"        \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.form.tag-name.xml\",\"input\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"type\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"checkbox\\\"\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"name\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"id\\\"\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"value\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\".NET\\\"\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\" .NET\"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"BR\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"        \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.form.tag-name.xml\",\"input\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"type\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"checkbox\\\"\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"name\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"id\\\"\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"value\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"PHP\\\"\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\" PHP\"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"BR\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"        \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.form.tag-name.xml\",\"input\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"type\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"checkbox\\\"\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"name\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"id\\\"\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"value\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"C/C++\\\"\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\" C/C++\"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"BR\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"        \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.form.tag-name.xml\",\"input\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"type\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"checkbox\\\"\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"name\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"id\\\"\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"value\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"PERL\\\"\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\" PERL \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"BR\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"        \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.form.tag-name.xml\",\"input\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"type\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"submit\\\"\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"value\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"Submit\\\"\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.form.tag-name.xml\",\"form\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\"\n],[\n   \"jsp-start\",\n  [\"text.xml\",\"    \"],\n  [\"meta.tag\",\"<%\"]\n],[\n   \"jsp-start\",\n  [\"text\",\"    \"],\n  [\"support.function\",\"String\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"select\"],\n  [\"lparen\",\"[\"],\n  [\"rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"variable.language\",\"request\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"getParameterValues\"],\n  [\"lparen\",\"(\"],\n  [\"string\",\"\\\"id\\\"\"],\n  [\"rparen\",\")\"],\n  [\"text\",\"; \"]\n],[\n   \"jsp-start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"(\"],\n  [\"identifier\",\"select\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"!=\"],\n  [\"text\",\" \"],\n  [\"constant.language\",\"null\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"&&\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"select\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"length\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"!=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"{\"]\n],[\n   \"jsp-start\",\n  [\"text\",\"        \"],\n  [\"variable.language\",\"out\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"println\"],\n  [\"lparen\",\"(\"],\n  [\"string\",\"\\\"You have selected: \\\"\"],\n  [\"rparen\",\")\"],\n  [\"text\",\";\"]\n],[\n   \"jsp-start\",\n  [\"text\",\"        \"],\n  [\"keyword\",\"for\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"(\"],\n  [\"keyword\",\"int\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"i\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\"; \"],\n  [\"identifier\",\"i\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"<\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"select\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"length\"],\n  [\"text\",\"; \"],\n  [\"identifier\",\"i\"],\n  [\"keyword.operator\",\"++\"],\n  [\"rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"{\"]\n],[\n   \"jsp-start\",\n  [\"text\",\"           \"],\n  [\"variable.language\",\"out\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"println\"],\n  [\"lparen\",\"(\"],\n  [\"identifier\",\"select\"],\n  [\"lparen\",\"[\"],\n  [\"identifier\",\"i\"],\n  [\"rparen\",\"])\"],\n  [\"text\",\"; \"]\n],[\n   \"jsp-start\",\n  [\"text\",\"        \"],\n  [\"rparen\",\"}\"]\n],[\n   \"jsp-start\",\n  [\"text\",\"    \"],\n  [\"rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"meta.tag\",\"%>\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"body\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"html\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_jsx.json",
    "content": "[[\n   \"comment\",\n  [\"comment\",\"/*EXPECTED\"]\n],[\n   \"comment\",\n  [\"comment\",\"hello world!\"]\n],[\n   \"start\",\n  [\"comment\",\"*/\"]\n],[\n   \"start\",\n  [\"keyword\",\"class\"],\n  [\"text\",\" \"],\n  [\"language.support.class\",\"Test\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"static\"],\n  [\"text\",\" \"],\n  [\"storage.type\",\"function\"],\n  [\"text\",\" \"],\n  [\"entity.name.function\",\"run\"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\":\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"void\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"comment\",\"// console.log(\\\"hello world!\\\");\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"keyword\",\"log\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"hello world!\\\"\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_julia.json",
    "content": "[[\n   \"start\",\n  [\"keyword.control.julia\",\"for\"],\n  [\"text\",\" op \"],\n  [\"keyword.operator.update.julia\",\"=\"],\n  [\"text\",\" (\"],\n  [\"keyword.operator.ternary.julia\",\":\"],\n  [\"keyword.operator.arithmetic.julia\",\"+\"],\n  [\"text\",\", \"],\n  [\"keyword.operator.ternary.julia\",\":\"],\n  [\"keyword.operator.arithmetic.julia\",\"*\"],\n  [\"text\",\", \"],\n  [\"keyword.operator.ternary.julia\",\":\"],\n  [\"keyword.operator.bitwise.julia\",\"&\"],\n  [\"text\",\", \"],\n  [\"keyword.operator.ternary.julia\",\":\"],\n  [\"keyword.operator.bitwise.julia\",\"|\"],\n  [\"text\",\", \"],\n  [\"keyword.operator.ternary.julia\",\":\"],\n  [\"keyword.operator.interpolation.julia\",\"$\"],\n  [\"text\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"variable.macro.julia\",\"@eval\"],\n  [\"text\",\" (\"],\n  [\"keyword.operator.interpolation.julia\",\"$\"],\n  [\"text\",\"op)(a,b,c) \"],\n  [\"keyword.operator.update.julia\",\"=\"],\n  [\"text\",\" (\"],\n  [\"keyword.operator.interpolation.julia\",\"$\"],\n  [\"text\",\"op)((\"],\n  [\"keyword.operator.interpolation.julia\",\"$\"],\n  [\"text\",\"op)(a,b),c)\"]\n],[\n   \"start\",\n  [\"keyword.control.julia\",\"end\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"v \"],\n  [\"keyword.operator.update.julia\",\"=\"],\n  [\"text\",\" \"],\n  [\"variable\",\"α\"],\n  [\"keyword.operator.transposed-variable.julia\",\"'\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"keyword.other.julia\",\"function\"],\n  [\"meta.function.julia\",\" \"],\n  [\"entity.name.function.julia\",\"g\"],\n  [\"text\",\"(\"],\n  [\"text\",\"x,y)\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword.control.julia\",\"return\"],\n  [\"text\",\" x \"],\n  [\"keyword.operator.arithmetic.julia\",\"*\"],\n  [\"text\",\" y\"]\n],[\n   \"start\",\n  [\"text\",\"  x \"],\n  [\"keyword.operator.arithmetic.julia\",\"+\"],\n  [\"text\",\" y\"]\n],[\n   \"start\",\n  [\"keyword.control.julia\",\"end\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"support.function.julia\",\"cd\"],\n  [\"text\",\"(\"],\n  [\"punctuation.definition.string.begin.julia\",\"\\\"\"],\n  [\"string.quoted.double.julia\",\"data\"],\n  [\"punctuation.definition.string.end.julia\",\"\\\"\"],\n  [\"text\",\") \"],\n  [\"keyword.control.julia\",\"do\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"support.function.julia\",\"open\"],\n  [\"text\",\"(\"],\n  [\"punctuation.definition.string.begin.julia\",\"\\\"\"],\n  [\"string.quoted.double.julia\",\"outfile\"],\n  [\"punctuation.definition.string.end.julia\",\"\\\"\"],\n  [\"text\",\", \"],\n  [\"punctuation.definition.string.begin.julia\",\"\\\"\"],\n  [\"string.quoted.double.julia\",\"w\"],\n  [\"punctuation.definition.string.end.julia\",\"\\\"\"],\n  [\"text\",\") \"],\n  [\"keyword.control.julia\",\"do\"],\n  [\"text\",\" f\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"support.function.julia\",\"write\"],\n  [\"text\",\"(\"],\n  [\"text\",\"f, data)\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword.control.julia\",\"end\"]\n],[\n   \"start\",\n  [\"keyword.control.julia\",\"end\"]\n],[\n   \"start\"\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_latex.json",
    "content": "[[\n   \"start\",\n  [\"keyword\",\"\\\\usepackage\"],\n  [\"lparen\",\"{\"],\n  [\"storage.type\",\"amsmath\"],\n  [\"rparen\",\"}\"]\n],[\n   \"start\",\n  [\"storage.type\",\"\\\\title\"],\n  [\"lparen\",\"{\"],\n  [\"storage.type\",\"\\\\LaTeX\"],\n  [\"rparen\",\"}\"]\n],[\n   \"start\",\n  [\"storage.type\",\"\\\\date\"],\n  [\"lparen\",\"{\"],\n  [\"rparen\",\"}\"]\n],[\n   \"start\",\n  [\"storage.type\",\"\\\\begin\"],\n  [\"lparen\",\"{\"],\n  [\"variable.parameter\",\"document\"],\n  [\"rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"storage.type\",\"\\\\maketitle\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"storage.type\",\"\\\\LaTeX\"],\n  [\"lparen\",\"{\"],\n  [\"rparen\",\"}\"],\n  [\"text\",\" is a document preparation system for the \"],\n  [\"storage.type\",\"\\\\TeX\"],\n  [\"lparen\",\"{\"],\n  [\"rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"  typesetting program. It offers programmable desktop publishing\"]\n],[\n   \"start\",\n  [\"text\",\"  features and extensive facilities for automating most aspects of\"]\n],[\n   \"start\",\n  [\"text\",\"  typesetting and desktop publishing, including numbering and\"]\n],[\n   \"start\",\n  [\"text\",\"  cross-referencing, tables and figures, page layout, bibliographies,\"]\n],[\n   \"start\",\n  [\"text\",\"  and much more. \"],\n  [\"storage.type\",\"\\\\LaTeX\"],\n  [\"lparen\",\"{\"],\n  [\"rparen\",\"}\"],\n  [\"text\",\" was originally written in 1984 by Leslie\"]\n],[\n   \"start\",\n  [\"text\",\"  Lamport and has become the dominant method for using \"],\n  [\"storage.type\",\"\\\\TeX\"],\n  [\"text\",\"; few\"]\n],[\n   \"start\",\n  [\"text\",\"  people write in plain \"],\n  [\"storage.type\",\"\\\\TeX\"],\n  [\"lparen\",\"{\"],\n  [\"rparen\",\"}\"],\n  [\"text\",\" anymore. The current version  is\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"storage.type\",\"\\\\LaTeXe\"],\n  [\"text\",\".\"]\n],[\n   \"start\",\n  [\"text\",\" \"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"comment\",\"% This is a comment; it will not be shown in the final output.\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"comment\",\"% The following shows a little of the typesetting power of LaTeX:\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"storage.type\",\"\\\\begin\"],\n  [\"lparen\",\"{\"],\n  [\"variable.parameter\",\"align\"],\n  [\"rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"    E &= mc^2                              \"],\n  [\"constant.character.escape\",\"\\\\\\\\\"]\n],[\n   \"start\",\n  [\"text\",\"    m &= \"],\n  [\"storage.type\",\"\\\\frac\"],\n  [\"lparen\",\"{\"],\n  [\"text\",\"m_0\"],\n  [\"rparen\",\"}\"],\n  [\"lparen\",\"{\"],\n  [\"storage.type\",\"\\\\sqrt\"],\n  [\"lparen\",\"{\"],\n  [\"text\",\"1-\"],\n  [\"storage.type\",\"\\\\frac\"],\n  [\"lparen\",\"{\"],\n  [\"text\",\"v^2\"],\n  [\"rparen\",\"}\"],\n  [\"lparen\",\"{\"],\n  [\"text\",\"c^2\"],\n  [\"rparen\",\"}}}\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"storage.type\",\"\\\\end\"],\n  [\"lparen\",\"{\"],\n  [\"variable.parameter\",\"align\"],\n  [\"rparen\",\"}\"]\n],[\n   \"start\",\n  [\"storage.type\",\"\\\\end\"],\n  [\"lparen\",\"{\"],\n  [\"variable.parameter\",\"document\"],\n  [\"rparen\",\"}\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_less.json",
    "content": "[[\n   \"start\",\n  [\"comment\",\"/* styles.less */\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"variable\",\"@base\"],\n  [\"text\",\": \"],\n  [\"constant.numeric\",\"#f938ab\"],\n  [\"text\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"variable.language\",\".box-shadow\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"@style\"],\n  [\"text\",\", \"],\n  [\"variable\",\"@c\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"when\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"support.function\",\"iscolor\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"@c\"],\n  [\"paren.rparen\",\"))\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"support.type.property\",\"box-shadow\"],\n  [\"text\",\":\"],\n  [\"text\",\"         \"],\n  [\"variable\",\"@style\"],\n  [\"text\",\" \"],\n  [\"variable\",\"@c\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"support.type.unknownProperty\",\"-webkit-box-shadow\"],\n  [\"text\",\":\"],\n  [\"text\",\" \"],\n  [\"variable\",\"@style\"],\n  [\"text\",\" \"],\n  [\"variable\",\"@c\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"support.type.unknownProperty\",\"-moz-box-shadow\"],\n  [\"text\",\":\"],\n  [\"text\",\"    \"],\n  [\"variable\",\"@style\"],\n  [\"text\",\" \"],\n  [\"variable\",\"@c\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"variable.language\",\".box-shadow\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"@style\"],\n  [\"text\",\", \"],\n  [\"variable\",\"@alpha\"],\n  [\"text\",\": \"],\n  [\"constant.numeric\",\"50\"],\n  [\"keyword\",\"%\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"when\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"support.function\",\"isnumber\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"@alpha\"],\n  [\"paren.rparen\",\"))\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"variable.language\",\".box-shadow\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"@style\"],\n  [\"text\",\", \"],\n  [\"support.function\",\"rgba\"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\", \"],\n  [\"variable\",\"@alpha\"],\n  [\"paren.rparen\",\"))\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"comment\",\"// Box styles\"]\n],[\n   \"start\",\n  [\"variable.language\",\".box\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"],\n  [\"text\",\" \"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"support.type.property\",\"color\"],\n  [\"text\",\":\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"saturate\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"@base\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"5\"],\n  [\"keyword\",\"%\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"support.type.property\",\"border-color\"],\n  [\"text\",\":\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"lighten\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"@base\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"30\"],\n  [\"keyword\",\"%\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"    \"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"div\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"],\n  [\"text\",\" \"],\n  [\"variable.language\",\".box-shadow\"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"5\"],\n  [\"keyword\",\"px\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"30\"],\n  [\"keyword\",\"%\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"  \"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"a\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"support.type.property\",\"color\"],\n  [\"text\",\":\"],\n  [\"text\",\" \"],\n  [\"variable\",\"@base\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"        \"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"keyword\",\"&\"],\n  [\"variable.language\",\":hover\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"            \"],\n  [\"support.type.property\",\"color\"],\n  [\"text\",\":\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"lighten\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"@base\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"50\"],\n  [\"keyword\",\"%\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\"\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_liquid.json",
    "content": "[[\n   \"start\",\n  [\"text.xml\",\"The following examples can be found in full at http://liquidmarkup.org/\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text.xml\",\"Liquid is an extraction from the e-commerce system Shopify.\"]\n],[\n   \"start\",\n  [\"text.xml\",\"Shopify powers many thousands of e-commerce stores which all call for unique designs.\"]\n],[\n   \"start\",\n  [\"text.xml\",\"For this we developed Liquid which allows our customers complete design freedom while\"]\n],[\n   \"start\",\n  [\"text.xml\",\"maintaining the integrity of our servers.\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text.xml\",\"Liquid has been in production use since June 2006 and is now used by many other\"]\n],[\n   \"start\",\n  [\"text.xml\",\"hosted web applications.\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text.xml\",\"It was developed for usage in Ruby on Rails web applications and integrates seamlessly\"]\n],[\n   \"start\",\n  [\"text.xml\",\"as a plugin but it also works excellently as a stand alone library.\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text.xml\",\"Here's what it looks like:\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text.xml\",\"  \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"ul\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"id\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"products\\\"\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"variable\",\"{%\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"for\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"product\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"in\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"products\"],\n  [\"text\",\" \"],\n  [\"variable\",\"%}\"]\n],[\n   \"start\",\n  [\"text.xml\",\"      \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"li\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"        \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"h2\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"variable\",\"{{\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"product\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"title\"],\n  [\"text\",\" \"],\n  [\"variable\",\"}}\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"h2\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"        Only \"],\n  [\"variable\",\"{{\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"product\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"price\"],\n  [\"text\",\" | \"],\n  [\"identifier\",\"format_as_money\"],\n  [\"text\",\" \"],\n  [\"variable\",\"}}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text.xml\",\"        \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"p\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"variable\",\"{{\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"product\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"description\"],\n  [\"text\",\" | \"],\n  [\"identifier\",\"prettyprint\"],\n  [\"text\",\" | \"],\n  [\"support.function\",\"truncate\"],\n  [\"text\",\": \"],\n  [\"constant.numeric\",\"200\"],\n  [\"text\",\"  \"],\n  [\"variable\",\"}}\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"p\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text.xml\",\"      \"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"li\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"variable\",\"{%\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"endfor\"],\n  [\"text\",\" \"],\n  [\"variable\",\"%}\"]\n],[\n   \"start\",\n  [\"text.xml\",\"  \"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"ul\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\"\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text.xml\",\"Some more features include:\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"h2\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\"Filters\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"h2\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"p\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\" The word \\\"tobi\\\" in uppercase: \"],\n  [\"variable\",\"{{\"],\n  [\"text\",\" \"],\n  [\"string\",\"'tobi'\"],\n  [\"text\",\" | \"],\n  [\"support.function\",\"upcase\"],\n  [\"text\",\" \"],\n  [\"variable\",\"}}\"],\n  [\"text.xml\",\" \"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"p\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"p\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\"The word \\\"tobi\\\" has \"],\n  [\"variable\",\"{{\"],\n  [\"text\",\" \"],\n  [\"string\",\"'tobi'\"],\n  [\"text\",\" | \"],\n  [\"support.function\",\"size\"],\n  [\"text\",\" \"],\n  [\"variable\",\"}}\"],\n  [\"text.xml\",\" letters! \"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"p\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"p\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\"Change \\\"Hello world\\\" to \\\"Hi world\\\": \"],\n  [\"variable\",\"{{\"],\n  [\"text\",\" \"],\n  [\"string\",\"'Hello world'\"],\n  [\"text\",\" | \"],\n  [\"support.function\",\"replace\"],\n  [\"text\",\": \"],\n  [\"string\",\"'Hello'\"],\n  [\"text\",\", \"],\n  [\"string\",\"'Hi'\"],\n  [\"text\",\" \"],\n  [\"variable\",\"}}\"],\n  [\"text.xml\",\" \"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"p\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"p\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\"The date today is \"],\n  [\"variable\",\"{{\"],\n  [\"text\",\" \"],\n  [\"string\",\"'now'\"],\n  [\"text\",\" | \"],\n  [\"support.function\",\"date\"],\n  [\"text\",\": \"],\n  [\"string\",\"\\\"%Y %b %d\\\"\"],\n  [\"text\",\" \"],\n  [\"variable\",\"}}\"],\n  [\"text.xml\",\" \"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"p\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\"\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"h2\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\"If\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"h2\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"p\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"  \"],\n  [\"variable\",\"{%\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"user\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"name\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"==\"],\n  [\"text\",\" \"],\n  [\"string\",\"'tobi'\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"or\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"user\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"name\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"==\"],\n  [\"text\",\" \"],\n  [\"string\",\"'marc'\"],\n  [\"text\",\" \"],\n  [\"variable\",\"%}\"],\n  [\"text.xml\",\" \"]\n],[\n   \"start\",\n  [\"text.xml\",\"    hi marc or tobi\"]\n],[\n   \"start\",\n  [\"text.xml\",\"  \"],\n  [\"variable\",\"{%\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"endif\"],\n  [\"text\",\" \"],\n  [\"variable\",\"%}\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"p\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\"\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"h2\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\"Case\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"h2\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"p\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"  \"],\n  [\"variable\",\"{%\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"case\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"template\"],\n  [\"text\",\" \"],\n  [\"variable\",\"%}\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"variable\",\"{%\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"when\"],\n  [\"text\",\" \"],\n  [\"string\",\"'index'\"],\n  [\"text\",\" \"],\n  [\"variable\",\"%}\"]\n],[\n   \"start\",\n  [\"text.xml\",\"       Welcome\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"variable\",\"{%\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"when\"],\n  [\"text\",\" \"],\n  [\"string\",\"'product'\"],\n  [\"text\",\" \"],\n  [\"variable\",\"%}\"]\n],[\n   \"start\",\n  [\"text.xml\",\"       \"],\n  [\"variable\",\"{{\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"product\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"vendor\"],\n  [\"text\",\" | \"],\n  [\"identifier\",\"link_to_vendor\"],\n  [\"text\",\" \"],\n  [\"variable\",\"}}\"],\n  [\"text.xml\",\" / \"],\n  [\"variable\",\"{{\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"product\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"title\"],\n  [\"text\",\" \"],\n  [\"variable\",\"}}\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"variable\",\"{%\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"else\"],\n  [\"text\",\" \"],\n  [\"variable\",\"%}\"]\n],[\n   \"start\",\n  [\"text.xml\",\"       \"],\n  [\"variable\",\"{{\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"page_title\"],\n  [\"text\",\" \"],\n  [\"variable\",\"}}\"]\n],[\n   \"start\",\n  [\"text.xml\",\"  \"],\n  [\"variable\",\"{%\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"endcase\"],\n  [\"text\",\" \"],\n  [\"variable\",\"%}\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"p\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\"\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"h2\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\"For Loops\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"h2\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"p\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"  \"],\n  [\"variable\",\"{%\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"for\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"item\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"in\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"array\"],\n  [\"text\",\" \"],\n  [\"variable\",\"%}\"],\n  [\"text.xml\",\" \"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"variable\",\"{{\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"item\"],\n  [\"text\",\" \"],\n  [\"variable\",\"}}\"]\n],[\n   \"start\",\n  [\"text.xml\",\"  \"],\n  [\"variable\",\"{%\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"endfor\"],\n  [\"text\",\" \"],\n  [\"variable\",\"%}\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"p\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\"\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"h2\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\"Tables\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"h2\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"p\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"  \"],\n  [\"variable\",\"{%\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"tablerow\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"item\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"in\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"items\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"cols\"],\n  [\"text\",\": \"],\n  [\"constant.numeric\",\"3\"],\n  [\"text\",\" \"],\n  [\"variable\",\"%}\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"variable\",\"{%\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"variable.language\",\"tablerowloop\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"col_first\"],\n  [\"text\",\" \"],\n  [\"variable\",\"%}\"]\n],[\n   \"start\",\n  [\"text.xml\",\"      First column: \"],\n  [\"variable\",\"{{\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"item\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"variable\"],\n  [\"text\",\" \"],\n  [\"variable\",\"}}\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"variable\",\"{%\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"else\"],\n  [\"text\",\" \"],\n  [\"variable\",\"%}\"]\n],[\n   \"start\",\n  [\"text.xml\",\"      Different column: \"],\n  [\"variable\",\"{{\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"item\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"variable\"],\n  [\"text\",\" \"],\n  [\"variable\",\"}}\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"variable\",\"{%\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"endif\"],\n  [\"text\",\" \"],\n  [\"variable\",\"%}\"]\n],[\n   \"start\",\n  [\"text.xml\",\"  \"],\n  [\"variable\",\"{%\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"endtablerow\"],\n  [\"text\",\" \"],\n  [\"variable\",\"%}\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"p\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\"\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_lisp.json",
    "content": "[[\n   \"start\",\n  [\"text\",\"(\"],\n  [\"storage.type.function-type.lisp\",\"defun\"],\n  [\"text\",\" \"],\n  [\"entity.name.function.lisp\",\"prompt-for-cd\"],\n  [\"text\",\" ()\"]\n],[\n   \"start\",\n  [\"text\",\"   \"],\n  [\"string\",\"\\\"Prompts\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"for\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"CD\"],\n  [\"text\",\"\\\"\"]\n],[\n   \"start\",\n  [\"text\",\"   (\"],\n  [\"identifier\",\"prompt\"],\n  [\"text\",\"-\"],\n  [\"identifier\",\"read\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"Title\\\"\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1.53\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"2\"],\n  [\"text\",\"/\"],\n  [\"constant.numeric\",\"4\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1.7\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1.7e0\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"2.9E-4\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"+42\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"-7\"],\n  [\"text\",\" \"],\n  [\"punctuation.definition.constant.character.lisp\",\"#\"],\n  [\"constant.character.lisp\",\"b001\"],\n  [\"text\",\" \"],\n  [\"punctuation.definition.constant.character.lisp\",\"#\"],\n  [\"constant.character.lisp\",\"b001/100\"],\n  [\"text\",\" \"],\n  [\"punctuation.definition.constant.character.lisp\",\"#\"],\n  [\"constant.character.lisp\",\"o777\"],\n  [\"text\",\" \"],\n  [\"punctuation.definition.constant.character.lisp\",\"#\"],\n  [\"constant.character.lisp\",\"O777\"],\n  [\"text\",\" \"],\n  [\"punctuation.definition.constant.character.lisp\",\"#\"],\n  [\"constant.character.lisp\",\"xabc55\"],\n  [\"text\",\" \"],\n  [\"punctuation.definition.constant.character.lisp\",\"#\"],\n  [\"constant.character.lisp\",\"c\"],\n  [\"text\",\"(\"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"-5.6\"],\n  [\"text\",\"))\"]\n],[\n   \"start\",\n  [\"text\",\"   (\"],\n  [\"identifier\",\"prompt\"],\n  [\"text\",\"-\"],\n  [\"identifier\",\"read\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"Artist\\\"\"],\n  [\"text\",\" &\"],\n  [\"identifier\",\"rest\"],\n  [\"text\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"   (\"],\n  [\"keyword.operator\",\"or\"],\n  [\"text\",\" (\"],\n  [\"identifier\",\"parse\"],\n  [\"text\",\"-\"],\n  [\"identifier\",\"integer\"],\n  [\"text\",\" (\"],\n  [\"identifier\",\"prompt\"],\n  [\"text\",\"-\"],\n  [\"identifier\",\"read\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"Rating\\\"\"],\n  [\"text\",\") :\"],\n  [\"identifier\",\"junk\"],\n  [\"text\",\"-\"],\n  [\"identifier\",\"allowed\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"t\"],\n  [\"text\",\") \"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"  (\"],\n  [\"keyword.control\",\"if\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"x\"],\n  [\"text\",\" (\"],\n  [\"support.function\",\"format\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"t\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"yes\\\"\"],\n  [\"text\",\") (\"],\n  [\"support.function\",\"format\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"t\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"no\\\"\"],\n  [\"text\",\" \"],\n  [\"constant.language\",\"nil\"],\n  [\"text\",\") \"],\n  [\"comment\",\";and here comment\"]\n],[\n   \"start\",\n  [\"text\",\"  ) \"],\n  [\"constant.numeric\",\"0xFFLL\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"-23ull\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"comment\",\";; second line comment\"]\n],[\n   \"start\",\n  [\"text\",\"  '(+ \"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"2\"],\n  [\"text\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"  (\"],\n  [\"identifier\",\"defvar\"],\n  [\"text\",\" \"],\n  [\"punctuation.definition.variable.lisp\",\"*\"],\n  [\"variable.other.global.lisp\",\"lines\"],\n  [\"punctuation.definition.variable.lisp\",\"*\"],\n  [\"text\",\")                \"],\n  [\"comment\",\"; list of all lines\"]\n],[\n   \"start\",\n  [\"text\",\"  (\"],\n  [\"identifier\",\"position\"],\n  [\"text\",\"-\"],\n  [\"keyword.control\",\"if\"],\n  [\"text\",\"-\"],\n  [\"identifier\",\"not\"],\n  [\"text\",\" \"],\n  [\"punctuation.definition.constant.character.lisp\",\"#\"],\n  [\"constant.character.lisp\",\"'sys::whitespacep\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"line\"],\n  [\"text\",\" :\"],\n  [\"identifier\",\"start\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"beg\"],\n  [\"text\",\"))\"]\n],[\n   \"start\",\n  [\"text\",\"  (\"],\n  [\"support.function\",\"quote\"],\n  [\"text\",\" (\"],\n  [\"identifier\",\"privet\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"2\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"3\"],\n  [\"text\",\"))\"]\n],[\n   \"start\",\n  [\"text\",\"  '(\"],\n  [\"identifier\",\"hello\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"world\"],\n  [\"text\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"  (* \"],\n  [\"constant.numeric\",\"5\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"7\"],\n  [\"text\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"  (\"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"2\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"34\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"5\"],\n  [\"text\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"  (:\"],\n  [\"identifier\",\"use\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"aaaa\\\"\"],\n  [\"text\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"  (\"],\n  [\"keyword.control\",\"let\"],\n  [\"text\",\" ((\"],\n  [\"identifier\",\"x\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"10\"],\n  [\"text\",\") (\"],\n  [\"identifier\",\"y\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"20\"],\n  [\"text\",\"))\"]\n],[\n   \"start\",\n  [\"text\",\"    (\"],\n  [\"identifier\",\"print\"],\n  [\"text\",\" (+ \"],\n  [\"identifier\",\"x\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"y\"],\n  [\"text\",\"))\"]\n],[\n   \"start\",\n  [\"text\",\"  ) \"],\n  [\"support.function\",\"LAmbDa\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"string\",\"\\\"asdad\"],\n  [\"constant.character.escape.lisp\",\"\\\\0\"],\n  [\"string\",\"eqweqe\\\"\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_livescript.json",
    "content": "[[\n   \"start\",\n  [\"comment\",\"# comment\"]\n],[\n   \"start\"\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_logiql.json",
    "content": "[[\n   \"start\",\n  [\"comment.single\",\"// ancestors\"]\n],[\n   \"start\",\n  [\"entity.name\",\"parentof\"],\n  [\"text\",\"(\"],\n  [\"string\",\"\\\"douglas\\\"\"],\n  [\"keyword.other\",\",\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"john\\\"\"],\n  [\"text\",\")\"],\n  [\"keyword.end\",\".\"]\n],[\n   \"start\",\n  [\"entity.name\",\"parentof\"],\n  [\"text\",\"(\"],\n  [\"string\",\"\\\"john\\\"\"],\n  [\"keyword.other\",\",\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"bob\\\"\"],\n  [\"text\",\")\"],\n  [\"keyword.end\",\".\"]\n],[\n   \"start\",\n  [\"entity.name\",\"parentof\"],\n  [\"text\",\"(\"],\n  [\"string\",\"\\\"bob\\\"\"],\n  [\"keyword.other\",\",\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"ebbon\\\"\"],\n  [\"text\",\")\"],\n  [\"keyword.end\",\".\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"entity.name\",\"parentof\"],\n  [\"text\",\"(\"],\n  [\"string\",\"\\\"douglas\\\"\"],\n  [\"keyword.other\",\",\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"jane\\\"\"],\n  [\"text\",\")\"],\n  [\"keyword.end\",\".\"]\n],[\n   \"start\",\n  [\"entity.name\",\"parentof\"],\n  [\"text\",\"(\"],\n  [\"string\",\"\\\"jane\\\"\"],\n  [\"keyword.other\",\",\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"jan\\\"\"],\n  [\"text\",\")\"],\n  [\"keyword.end\",\".\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"entity.name\",\"ancestorof\"],\n  [\"text\",\"(\"],\n  [\"variable.parameter\",\"A\"],\n  [\"keyword.other\",\",\"],\n  [\"text\",\" \"],\n  [\"variable.parameter\",\"B\"],\n  [\"text\",\") \"],\n  [\"keyword.start\",\"<-\"],\n  [\"text\",\" \"],\n  [\"entity.name\",\"parentof\"],\n  [\"text\",\"(\"],\n  [\"variable.parameter\",\"A\"],\n  [\"keyword.other\",\",\"],\n  [\"text\",\" \"],\n  [\"variable.parameter\",\"B\"],\n  [\"text\",\")\"],\n  [\"keyword.end\",\".\"]\n],[\n   \"start\",\n  [\"entity.name\",\"ancestorof\"],\n  [\"text\",\"(\"],\n  [\"variable.parameter\",\"A\"],\n  [\"keyword.other\",\",\"],\n  [\"text\",\" \"],\n  [\"variable.parameter\",\"C\"],\n  [\"text\",\") \"],\n  [\"keyword.start\",\"<-\"],\n  [\"text\",\" \"],\n  [\"entity.name\",\"ancestorof\"],\n  [\"text\",\"(\"],\n  [\"variable.parameter\",\"A\"],\n  [\"keyword.other\",\",\"],\n  [\"text\",\" \"],\n  [\"variable.parameter\",\"B\"],\n  [\"text\",\")\"],\n  [\"keyword.other\",\",\"],\n  [\"text\",\" \"],\n  [\"entity.name\",\"parentof\"],\n  [\"text\",\"(\"],\n  [\"variable.parameter\",\"B\"],\n  [\"keyword.other\",\",\"],\n  [\"variable.parameter\",\"C\"],\n  [\"text\",\")\"],\n  [\"keyword.end\",\".\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"entity.name\",\"grandparentof\"],\n  [\"text\",\"(\"],\n  [\"variable.parameter\",\"A\"],\n  [\"keyword.other\",\",\"],\n  [\"text\",\" \"],\n  [\"variable.parameter\",\"B\"],\n  [\"text\",\") \"],\n  [\"keyword.start\",\"<-\"],\n  [\"text\",\" \"],\n  [\"entity.name\",\"parentof\"],\n  [\"text\",\"(\"],\n  [\"variable.parameter\",\"A\"],\n  [\"keyword.other\",\",\"],\n  [\"text\",\" \"],\n  [\"variable.parameter\",\"C\"],\n  [\"text\",\")\"],\n  [\"keyword.other\",\",\"],\n  [\"text\",\" \"],\n  [\"entity.name\",\"parentof\"],\n  [\"text\",\"(\"],\n  [\"variable.parameter\",\"C\"],\n  [\"keyword.other\",\",\"],\n  [\"text\",\" \"],\n  [\"variable.parameter\",\"B\"],\n  [\"text\",\")\"],\n  [\"keyword.end\",\".\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"entity.name\",\"cousins\"],\n  [\"text\",\"(\"],\n  [\"variable.parameter\",\"A\"],\n  [\"keyword.other\",\",\"],\n  [\"variable.parameter\",\"B\"],\n  [\"text\",\") \"],\n  [\"keyword.start\",\"<-\"],\n  [\"text\",\" \"],\n  [\"entity.name\",\"grandparentof\"],\n  [\"text\",\"(\"],\n  [\"variable.parameter\",\"C\"],\n  [\"keyword.other\",\",\"],\n  [\"variable.parameter\",\"A\"],\n  [\"text\",\")\"],\n  [\"keyword.other\",\",\"],\n  [\"text\",\" \"],\n  [\"entity.name\",\"grandparentof\"],\n  [\"text\",\"(\"],\n  [\"variable.parameter\",\"C\"],\n  [\"keyword.other\",\",\"],\n  [\"variable.parameter\",\"B\"],\n  [\"text\",\")\"],\n  [\"keyword.end\",\".\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"entity.name\",\"parentof\"],\n  [\"text\",\"[\"],\n  [\"entity.name.type.logicblox\",\"`arg\"],\n  [\"text\",\"](\"],\n  [\"variable.parameter\",\"A\"],\n  [\"keyword.other\",\",\"],\n  [\"text\",\" \"],\n  [\"variable.parameter\",\"B\"],\n  [\"text\",\") \"],\n  [\"keyword.start\",\"->\"],\n  [\"text\",\" \"],\n  [\"entity.name\",\"int\"],\n  [\"text\",\"[\"],\n  [\"constant.numeric\",\"32\"],\n  [\"text\",\"](\"],\n  [\"variable.parameter\",\"A\"],\n  [\"text\",\")\"],\n  [\"keyword.other\",\",\"],\n  [\"text\",\" \"],\n  [\"keyword.other\",\"!\"],\n  [\"entity.name\",\"string\"],\n  [\"text\",\"(\"],\n  [\"variable.parameter\",\"B\"],\n  [\"text\",\")\"],\n  [\"keyword.end\",\".\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_lsl.json",
    "content": "[[\n   \"comment\",\n  [\"comment.block.begin.lsl\",\"/*\"]\n],[\n   \"comment\",\n  [\"comment.block.lsl\",\"    Testing syntax highlighting\"]\n],[\n   \"comment\",\n  [\"comment.block.lsl\",\"    of Ace Editor\"]\n],[\n   \"comment\",\n  [\"comment.block.lsl\",\"    for the Linden Scripting Language\"]\n],[\n   \"start\",\n  [\"comment.block.end.lsl\",\"*/\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"storage.type.lsl\",\"integer\"],\n  [\"text.lsl\",\" \"],\n  [\"identifier\",\"someIntNormal\"],\n  [\"text.lsl\",\"       \"],\n  [\"keyword.operator.lsl\",\"=\"],\n  [\"text.lsl\",\" \"],\n  [\"constant.numeric.lsl\",\"3672\"],\n  [\"punctuation.operator.lsl\",\";\"]\n],[\n   \"start\",\n  [\"storage.type.lsl\",\"integer\"],\n  [\"text.lsl\",\" \"],\n  [\"identifier\",\"someIntHex\"],\n  [\"text.lsl\",\"          \"],\n  [\"keyword.operator.lsl\",\"=\"],\n  [\"text.lsl\",\" \"],\n  [\"constant.numeric.lsl\",\"0x00000000\"],\n  [\"punctuation.operator.lsl\",\";\"]\n],[\n   \"start\",\n  [\"storage.type.lsl\",\"integer\"],\n  [\"text.lsl\",\" \"],\n  [\"identifier\",\"someIntMath\"],\n  [\"text.lsl\",\"         \"],\n  [\"keyword.operator.lsl\",\"=\"],\n  [\"text.lsl\",\" \"],\n  [\"constant.language.float.lsl\",\"PI_BY_TWO\"],\n  [\"punctuation.operator.lsl\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"storage.type.lsl\",\"integer\"],\n  [\"text.lsl\",\" \"],\n  [\"invalid.illegal.lsl\",\"event\"],\n  [\"text.lsl\",\"               \"],\n  [\"keyword.operator.lsl\",\"=\"],\n  [\"text.lsl\",\" \"],\n  [\"constant.numeric.lsl\",\"5673\"],\n  [\"punctuation.operator.lsl\",\";\"],\n  [\"text.lsl\",\"                                             \"],\n  [\"comment.line.double-slash.lsl\",\"// invalid.illegal\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"storage.type.lsl\",\"key\"],\n  [\"text.lsl\",\" \"],\n  [\"identifier\",\"someKeyTexture\"],\n  [\"text.lsl\",\"          \"],\n  [\"keyword.operator.lsl\",\"=\"],\n  [\"text.lsl\",\" \"],\n  [\"constant.language.string.lsl\",\"TEXTURE_DEFAULT\"],\n  [\"punctuation.operator.lsl\",\";\"]\n],[\n   \"start\",\n  [\"storage.type.lsl\",\"string\"],\n  [\"text.lsl\",\" \"],\n  [\"identifier\",\"someStringSpecial\"],\n  [\"text.lsl\",\"    \"],\n  [\"keyword.operator.lsl\",\"=\"],\n  [\"text.lsl\",\" \"],\n  [\"constant.language.string.lsl\",\"EOF\"],\n  [\"punctuation.operator.lsl\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"identifier\",\"some_user_defined_function_without_return_type\"],\n  [\"paren.lparen.lsl\",\"(\"],\n  [\"storage.type.lsl\",\"string\"],\n  [\"text.lsl\",\" \"],\n  [\"identifier\",\"inputAsString\"],\n  [\"paren.rparen.lsl\",\")\"]\n],[\n   \"start\",\n  [\"paren.lparen.lsl\",\"{\"]\n],[\n   \"start\",\n  [\"text.lsl\",\"    \"],\n  [\"support.function.lsl\",\"llSay\"],\n  [\"paren.lparen.lsl\",\"(\"],\n  [\"constant.language.integer.lsl\",\"PUBLIC_CHANNEL\"],\n  [\"punctuation.operator.lsl\",\",\"],\n  [\"text.lsl\",\" \"],\n  [\"identifier\",\"inputAsString\"],\n  [\"paren.rparen.lsl\",\")\"],\n  [\"punctuation.operator.lsl\",\";\"]\n],[\n   \"start\",\n  [\"paren.rparen.lsl\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"storage.type.lsl\",\"string\"],\n  [\"text.lsl\",\" \"],\n  [\"identifier\",\"user_defined_function_returning_a_string\"],\n  [\"paren.lparen.lsl\",\"(\"],\n  [\"storage.type.lsl\",\"key\"],\n  [\"text.lsl\",\" \"],\n  [\"identifier\",\"inputAsKey\"],\n  [\"paren.rparen.lsl\",\")\"]\n],[\n   \"start\",\n  [\"paren.lparen.lsl\",\"{\"]\n],[\n   \"start\",\n  [\"text.lsl\",\"    \"],\n  [\"keyword.control.lsl\",\"return\"],\n  [\"text.lsl\",\" \"],\n  [\"paren.lparen.lsl\",\"(\"],\n  [\"storage.type.lsl\",\"string\"],\n  [\"paren.rparen.lsl\",\")\"],\n  [\"identifier\",\"inputAsKey\"],\n  [\"punctuation.operator.lsl\",\";\"]\n],[\n   \"start\",\n  [\"paren.rparen.lsl\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"entity.name.state.lsl\",\"default\"]\n],[\n   \"start\",\n  [\"paren.lparen.lsl\",\"{\"]\n],[\n   \"start\",\n  [\"text.lsl\",\"    \"],\n  [\"support.function.event.lsl\",\"state_entry\"],\n  [\"paren.lparen.lsl\",\"(\"],\n  [\"paren.rparen.lsl\",\")\"]\n],[\n   \"start\",\n  [\"text.lsl\",\"    \"],\n  [\"paren.lparen.lsl\",\"{\"]\n],[\n   \"start\",\n  [\"text.lsl\",\"        \"],\n  [\"storage.type.lsl\",\"key\"],\n  [\"text.lsl\",\" \"],\n  [\"identifier\",\"someKey\"],\n  [\"text.lsl\",\" \"],\n  [\"keyword.operator.lsl\",\"=\"],\n  [\"text.lsl\",\" \"],\n  [\"constant.language.string.lsl\",\"NULL_KEY\"],\n  [\"punctuation.operator.lsl\",\";\"]\n],[\n   \"start\",\n  [\"text.lsl\",\"        \"],\n  [\"identifier\",\"someKey\"],\n  [\"text.lsl\",\" \"],\n  [\"keyword.operator.lsl\",\"=\"],\n  [\"text.lsl\",\" \"],\n  [\"support.function.lsl\",\"llGetOwner\"],\n  [\"paren.lparen.lsl\",\"(\"],\n  [\"paren.rparen.lsl\",\")\"],\n  [\"punctuation.operator.lsl\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text.lsl\",\"        \"],\n  [\"storage.type.lsl\",\"string\"],\n  [\"text.lsl\",\" \"],\n  [\"identifier\",\"someString\"],\n  [\"text.lsl\",\" \"],\n  [\"keyword.operator.lsl\",\"=\"],\n  [\"text.lsl\",\" \"],\n  [\"identifier\",\"user_defined_function_returning_a_string\"],\n  [\"paren.lparen.lsl\",\"(\"],\n  [\"identifier\",\"someKey\"],\n  [\"paren.rparen.lsl\",\")\"],\n  [\"punctuation.operator.lsl\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text.lsl\",\"        \"],\n  [\"identifier\",\"some_user_defined_function_without_return_type\"],\n  [\"paren.lparen.lsl\",\"(\"],\n  [\"identifier\",\"someString\"],\n  [\"paren.rparen.lsl\",\")\"],\n  [\"punctuation.operator.lsl\",\";\"]\n],[\n   \"start\",\n  [\"text.lsl\",\"    \"],\n  [\"paren.rparen.lsl\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text.lsl\",\"    \"],\n  [\"support.function.event.lsl\",\"touch_start\"],\n  [\"paren.lparen.lsl\",\"(\"],\n  [\"storage.type.lsl\",\"integer\"],\n  [\"text.lsl\",\" \"],\n  [\"identifier\",\"num_detected\"],\n  [\"paren.rparen.lsl\",\")\"]\n],[\n   \"start\",\n  [\"text.lsl\",\"    \"],\n  [\"paren.lparen.lsl\",\"{\"]\n],[\n   \"start\",\n  [\"text.lsl\",\"        \"],\n  [\"storage.type.lsl\",\"list\"],\n  [\"text.lsl\",\" \"],\n  [\"identifier\",\"agentsInRegion\"],\n  [\"text.lsl\",\" \"],\n  [\"keyword.operator.lsl\",\"=\"],\n  [\"text.lsl\",\" \"],\n  [\"support.function.lsl\",\"llGetAgentList\"],\n  [\"paren.lparen.lsl\",\"(\"],\n  [\"constant.language.integer.lsl\",\"AGENT_LIST_REGION\"],\n  [\"punctuation.operator.lsl\",\",\"],\n  [\"text.lsl\",\" \"],\n  [\"paren.lparen.lsl\",\"[\"],\n  [\"paren.rparen.lsl\",\"])\"],\n  [\"punctuation.operator.lsl\",\";\"]\n],[\n   \"start\",\n  [\"text.lsl\",\"        \"],\n  [\"storage.type.lsl\",\"integer\"],\n  [\"text.lsl\",\" \"],\n  [\"identifier\",\"numOfAgents\"],\n  [\"text.lsl\",\" \"],\n  [\"keyword.operator.lsl\",\"=\"],\n  [\"text.lsl\",\" \"],\n  [\"support.function.lsl\",\"llGetListLength\"],\n  [\"paren.lparen.lsl\",\"(\"],\n  [\"identifier\",\"agentsInRegion\"],\n  [\"paren.rparen.lsl\",\")\"],\n  [\"punctuation.operator.lsl\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text.lsl\",\"        \"],\n  [\"storage.type.lsl\",\"integer\"],\n  [\"text.lsl\",\" \"],\n  [\"identifier\",\"index\"],\n  [\"punctuation.operator.lsl\",\";\"],\n  [\"text.lsl\",\"                                                          \"],\n  [\"comment.line.double-slash.lsl\",\"// defaults to 0\"]\n],[\n   \"start\",\n  [\"text.lsl\",\"        \"],\n  [\"keyword.control.lsl\",\"for\"],\n  [\"text.lsl\",\" \"],\n  [\"paren.lparen.lsl\",\"(\"],\n  [\"punctuation.operator.lsl\",\";\"],\n  [\"text.lsl\",\" \"],\n  [\"identifier\",\"index\"],\n  [\"text.lsl\",\" \"],\n  [\"keyword.operator.lsl\",\"<=\"],\n  [\"text.lsl\",\" \"],\n  [\"identifier\",\"numOfAgents\"],\n  [\"text.lsl\",\" \"],\n  [\"keyword.operator.lsl\",\"-\"],\n  [\"text.lsl\",\" \"],\n  [\"constant.numeric.lsl\",\"1\"],\n  [\"punctuation.operator.lsl\",\";\"],\n  [\"text.lsl\",\" \"],\n  [\"identifier\",\"index\"],\n  [\"keyword.operator.lsl\",\"++\"],\n  [\"paren.rparen.lsl\",\")\"],\n  [\"text.lsl\",\"                               \"],\n  [\"comment.line.double-slash.lsl\",\"// for each agent in region\"]\n],[\n   \"start\",\n  [\"text.lsl\",\"        \"],\n  [\"paren.lparen.lsl\",\"{\"]\n],[\n   \"start\",\n  [\"text.lsl\",\"            \"],\n  [\"support.function.lsl\",\"llRegionSayTo\"],\n  [\"paren.lparen.lsl\",\"(\"],\n  [\"support.function.lsl\",\"llList2Key\"],\n  [\"paren.lparen.lsl\",\"(\"],\n  [\"identifier\",\"agentsInRegion\"],\n  [\"punctuation.operator.lsl\",\",\"],\n  [\"text.lsl\",\" \"],\n  [\"identifier\",\"index\"],\n  [\"paren.rparen.lsl\",\")\"],\n  [\"punctuation.operator.lsl\",\",\"],\n  [\"text.lsl\",\" \"],\n  [\"constant.language.integer.lsl\",\"PUBLIC_CHANNEL\"],\n  [\"punctuation.operator.lsl\",\",\"],\n  [\"text.lsl\",\" \"],\n  [\"string.quoted.double.lsl.start\",\"\\\"\"],\n  [\"string.quoted.double.lsl\",\"Hello, Avatar!\"],\n  [\"string.quoted.double.lsl.end\",\"\\\"\"],\n  [\"paren.rparen.lsl\",\")\"],\n  [\"punctuation.operator.lsl\",\";\"]\n],[\n   \"start\",\n  [\"text.lsl\",\"        \"],\n  [\"paren.rparen.lsl\",\"}\"]\n],[\n   \"start\",\n  [\"text.lsl\",\"    \"],\n  [\"paren.rparen.lsl\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text.lsl\",\"    \"],\n  [\"support.function.event.lsl\",\"touch_end\"],\n  [\"paren.lparen.lsl\",\"(\"],\n  [\"storage.type.lsl\",\"integer\"],\n  [\"text.lsl\",\" \"],\n  [\"identifier\",\"num_detected\"],\n  [\"paren.rparen.lsl\",\")\"]\n],[\n   \"start\",\n  [\"text.lsl\",\"    \"],\n  [\"paren.lparen.lsl\",\"{\"]\n],[\n   \"start\",\n  [\"text.lsl\",\"        \"],\n  [\"identifier\",\"someIntNormal\"],\n  [\"text.lsl\",\"       \"],\n  [\"keyword.operator.lsl\",\"=\"],\n  [\"text.lsl\",\" \"],\n  [\"constant.numeric.lsl\",\"3672\"],\n  [\"punctuation.operator.lsl\",\";\"]\n],[\n   \"start\",\n  [\"text.lsl\",\"        \"],\n  [\"identifier\",\"someIntHex\"],\n  [\"text.lsl\",\"          \"],\n  [\"keyword.operator.lsl\",\"=\"],\n  [\"text.lsl\",\" \"],\n  [\"constant.numeric.lsl\",\"0x00000000\"],\n  [\"punctuation.operator.lsl\",\";\"]\n],[\n   \"start\",\n  [\"text.lsl\",\"        \"],\n  [\"identifier\",\"someIntMath\"],\n  [\"text.lsl\",\"         \"],\n  [\"keyword.operator.lsl\",\"=\"],\n  [\"text.lsl\",\" \"],\n  [\"constant.language.float.lsl\",\"PI_BY_TWO\"],\n  [\"punctuation.operator.lsl\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text.lsl\",\"        \"],\n  [\"invalid.illegal.lsl\",\"event\"],\n  [\"text.lsl\",\"               \"],\n  [\"keyword.operator.lsl\",\"=\"],\n  [\"text.lsl\",\" \"],\n  [\"constant.numeric.lsl\",\"5673\"],\n  [\"punctuation.operator.lsl\",\";\"],\n  [\"text.lsl\",\"                                             \"],\n  [\"comment.line.double-slash.lsl\",\"// invalid.illegal\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text.lsl\",\"        \"],\n  [\"identifier\",\"someKeyTexture\"],\n  [\"text.lsl\",\"      \"],\n  [\"keyword.operator.lsl\",\"=\"],\n  [\"text.lsl\",\" \"],\n  [\"constant.language.string.lsl\",\"TEXTURE_DEFAULT\"],\n  [\"punctuation.operator.lsl\",\";\"]\n],[\n   \"start\",\n  [\"text.lsl\",\"        \"],\n  [\"identifier\",\"someStringSpecial\"],\n  [\"text.lsl\",\"   \"],\n  [\"keyword.operator.lsl\",\"=\"],\n  [\"text.lsl\",\" \"],\n  [\"constant.language.string.lsl\",\"EOF\"],\n  [\"punctuation.operator.lsl\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text.lsl\",\"        \"],\n  [\"reserved.godmode.lsl\",\"llSetInventoryPermMask\"],\n  [\"paren.lparen.lsl\",\"(\"],\n  [\"string.quoted.double.lsl.start\",\"\\\"\"],\n  [\"string.quoted.double.lsl\",\"some item\"],\n  [\"string.quoted.double.lsl.end\",\"\\\"\"],\n  [\"punctuation.operator.lsl\",\",\"],\n  [\"text.lsl\",\" \"],\n  [\"constant.language.integer.lsl\",\"MASK_NEXT\"],\n  [\"punctuation.operator.lsl\",\",\"],\n  [\"text.lsl\",\" \"],\n  [\"constant.language.integer.lsl\",\"PERM_ALL\"],\n  [\"paren.rparen.lsl\",\")\"],\n  [\"punctuation.operator.lsl\",\";\"],\n  [\"text.lsl\",\"               \"],\n  [\"comment.line.double-slash.lsl\",\"// reserved.godmode\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text.lsl\",\"        \"],\n  [\"support.function.lsl\",\"llWhisper\"],\n  [\"paren.lparen.lsl\",\"(\"],\n  [\"constant.language.integer.lsl\",\"PUBLIC_CHANNEL\"],\n  [\"punctuation.operator.lsl\",\",\"],\n  [\"text.lsl\",\" \"],\n  [\"string.quoted.double.lsl.start\",\"\\\"\"],\n  [\"string.quoted.double.lsl\",\"Leaving \"],\n  [\"constant.character.escape.lsl\",\"\\\\\\\"\"],\n  [\"string.quoted.double.lsl\",\"default\"],\n  [\"constant.character.escape.lsl\",\"\\\\\\\"\"],\n  [\"string.quoted.double.lsl\",\" now...\"],\n  [\"string.quoted.double.lsl.end\",\"\\\"\"],\n  [\"paren.rparen.lsl\",\")\"],\n  [\"punctuation.operator.lsl\",\";\"]\n],[\n   \"start\",\n  [\"text.lsl\",\"        \"],\n  [\"entity.name.state.lsl\",\"state other\"],\n  [\"punctuation.operator.lsl\",\";\"]\n],[\n   \"start\",\n  [\"text.lsl\",\"    \"],\n  [\"paren.rparen.lsl\",\"}\"]\n],[\n   \"start\",\n  [\"paren.rparen.lsl\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"entity.name.state.lsl\",\"state other\"]\n],[\n   \"start\",\n  [\"paren.lparen.lsl\",\"{\"]\n],[\n   \"start\",\n  [\"text.lsl\",\"    \"],\n  [\"support.function.event.lsl\",\"state_entry\"],\n  [\"paren.lparen.lsl\",\"(\"],\n  [\"paren.rparen.lsl\",\")\"]\n],[\n   \"start\",\n  [\"text.lsl\",\"    \"],\n  [\"paren.lparen.lsl\",\"{\"]\n],[\n   \"start\",\n  [\"text.lsl\",\"        \"],\n  [\"support.function.lsl\",\"llWhisper\"],\n  [\"paren.lparen.lsl\",\"(\"],\n  [\"constant.language.integer.lsl\",\"PUBLIC_CHANNEL\"],\n  [\"punctuation.operator.lsl\",\",\"],\n  [\"text.lsl\",\" \"],\n  [\"string.quoted.double.lsl.start\",\"\\\"\"],\n  [\"string.quoted.double.lsl\",\"Entered \"],\n  [\"constant.character.escape.lsl\",\"\\\\\\\"\"],\n  [\"string.quoted.double.lsl\",\"state other\"],\n  [\"constant.character.escape.lsl\",\"\\\\\\\"\"],\n  [\"string.quoted.double.lsl\",\", returning to \"],\n  [\"constant.character.escape.lsl\",\"\\\\\\\"\"],\n  [\"string.quoted.double.lsl\",\"default\"],\n  [\"constant.character.escape.lsl\",\"\\\\\\\"\"],\n  [\"string.quoted.double.lsl\",\" again...\"],\n  [\"string.quoted.double.lsl.end\",\"\\\"\"],\n  [\"paren.rparen.lsl\",\")\"],\n  [\"punctuation.operator.lsl\",\";\"]\n],[\n   \"start\",\n  [\"text.lsl\",\"        \"],\n  [\"entity.name.state.lsl\",\"state default\"],\n  [\"punctuation.operator.lsl\",\";\"]\n],[\n   \"start\",\n  [\"text.lsl\",\"    \"],\n  [\"paren.rparen.lsl\",\"}\"]\n],[\n   \"start\",\n  [\"paren.rparen.lsl\",\"}\"]\n],[\n   \"start\"\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_lua.json",
    "content": "[[\n   [\"bracketedComment\",2,\"start\"],\n  [\"comment\",\"--[[--\"]\n],[\n   [\"bracketedComment\",2,\"start\"],\n  [\"comment\",\"num_args takes in 5.1 byte code and extracts the number of arguments\"]\n],[\n   [\"bracketedComment\",2,\"start\"],\n  [\"comment\",\"from its function header.\"]\n],[\n   \"start\",\n  [\"comment\",\"--]]--\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"function\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"int\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"t\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"keyword\",\"return\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"t\"],\n  [\"keyword.operator\",\":\"],\n  [\"support.function\",\"byte\"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\")\"],\n  [\"keyword.operator\",\"+\"],\n  [\"identifier\",\"t\"],\n  [\"keyword.operator\",\":\"],\n  [\"support.function\",\"byte\"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"2\"],\n  [\"paren.rparen\",\")\"],\n  [\"keyword.operator\",\"*\"],\n  [\"constant.numeric\",\"0x100\"],\n  [\"keyword.operator\",\"+\"],\n  [\"identifier\",\"t\"],\n  [\"keyword.operator\",\":\"],\n  [\"support.function\",\"byte\"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"3\"],\n  [\"paren.rparen\",\")\"],\n  [\"keyword.operator\",\"*\"],\n  [\"constant.numeric\",\"0x10000\"],\n  [\"keyword.operator\",\"+\"],\n  [\"identifier\",\"t\"],\n  [\"keyword.operator\",\":\"],\n  [\"support.function\",\"byte\"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"4\"],\n  [\"paren.rparen\",\")\"],\n  [\"keyword.operator\",\"*\"],\n  [\"constant.numeric\",\"0x1000000\"]\n],[\n   \"start\",\n  [\"keyword\",\"end\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"function\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"num_args\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"func\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"keyword\",\"local\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"dump\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.library\",\"string\"],\n  [\"text\",\".\"],\n  [\"support.function\",\"dump\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"func\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"keyword\",\"local\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"offset\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"cursor\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"int\"],\n  [\"paren.lparen\",\"(\"],\n  [\"support.function\",\"dump\"],\n  [\"keyword.operator\",\":\"],\n  [\"support.function\",\"sub\"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"13\"],\n  [\"paren.rparen\",\"))\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"offset\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"26\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"comment\",\"--Get the params and var flag (whether there's a ... in the param)\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"keyword\",\"return\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"dump\"],\n  [\"keyword.operator\",\":\"],\n  [\"support.function\",\"sub\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"cursor\"],\n  [\"paren.rparen\",\")\"],\n  [\"keyword.operator\",\":\"],\n  [\"support.function\",\"byte\"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\", \"],\n  [\"support.function\",\"dump\"],\n  [\"keyword.operator\",\":\"],\n  [\"support.function\",\"sub\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"cursor\"],\n  [\"keyword.operator\",\"+\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\")\"],\n  [\"keyword.operator\",\":\"],\n  [\"support.function\",\"byte\"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"keyword\",\"end\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"comment\",\"-- Usage:\"]\n],[\n   \"start\",\n  [\"identifier\",\"num_args\"],\n  [\"paren.lparen\",\"(\"],\n  [\"keyword\",\"function\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"a\"],\n  [\"text\",\",\"],\n  [\"identifier\",\"b\"],\n  [\"text\",\",\"],\n  [\"identifier\",\"c\"],\n  [\"text\",\",\"],\n  [\"identifier\",\"d\"],\n  [\"text\",\", \"],\n  [\"keyword.operator\",\"...\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"end\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"comment\",\"-- return 4, 7\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"comment\",\"-- Python styled string format operator\"]\n],[\n   \"start\",\n  [\"keyword\",\"local\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"gm\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.library\",\"debug\"],\n  [\"text\",\".\"],\n  [\"support.function\",\"getmetatable\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\"\\\"\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"identifier\",\"gm\"],\n  [\"text\",\".\"],\n  [\"support.function\",\"__mod\"],\n  [\"keyword.operator\",\"=\"],\n  [\"keyword\",\"function\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable.language\",\"self\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"other\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"type\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"other\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"~=\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"table\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"then\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"other\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"],\n  [\"identifier\",\"other\"],\n  [\"paren.rparen\",\"}\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"end\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"for\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"i\"],\n  [\"text\",\",\"],\n  [\"identifier\",\"v\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"in\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"ipairs\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"other\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"do\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"other\"],\n  [\"paren.lparen\",\"[\"],\n  [\"identifier\",\"i\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"tostring\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"v\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"end\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"return\"],\n  [\"text\",\" \"],\n  [\"variable.language\",\"self\"],\n  [\"keyword.operator\",\":\"],\n  [\"support.function\",\"format\"],\n  [\"paren.lparen\",\"(\"],\n  [\"support.function\",\"unpack\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"other\"],\n  [\"paren.rparen\",\"))\"]\n],[\n   \"start\",\n  [\"keyword\",\"end\"]\n],[\n   \"start\"\n],[\n   [\"bracketedString\",5,\"start\"],\n  [\"support.function\",\"print\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string.start\",\"[===[\"]\n],[\n   [\"bracketedString\",5,\"start\"],\n  [\"string\",\"    blah blah %s, (%d %d)\"]\n],[\n   \"start\",\n  [\"string.end\",\"]===]\"],\n  [\"keyword.operator\",\"%\"],\n  [\"paren.lparen\",\"{\"],\n  [\"string\",\"\\\"blah\\\"\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"num_args\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"int\"],\n  [\"paren.rparen\",\")})\"]\n],[\n   \"start\"\n],[\n   [\"bracketedComment\",3,\"start\"],\n  [\"comment\",\"--[=[--\"]\n],[\n   [\"bracketedComment\",3,\"start\"],\n  [\"comment\",\"table.maxn is deprecated, use # instead.\"]\n],[\n   \"start\",\n  [\"comment\",\"--]=]--\"]\n],[\n   \"start\",\n  [\"support.function\",\"print\"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.library\",\"table\"],\n  [\"text\",\".\"],\n  [\"keyword.deprecated\",\"maxn\"],\n  [\"paren.lparen\",\"{\"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\",\"],\n  [\"constant.numeric\",\"2\"],\n  [\"text\",\",\"],\n  [\"paren.lparen\",\"[\"],\n  [\"constant.numeric\",\"4\"],\n  [\"paren.rparen\",\"]\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"4\"],\n  [\"text\",\",\"],\n  [\"paren.lparen\",\"[\"],\n  [\"constant.numeric\",\"8\"],\n  [\"paren.rparen\",\"]\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"8\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"comment\",\"-- outputs 8 instead of 2\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"support.function\",\"print\"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"5\"],\n  [\"text\",\" \"],\n  [\"comment\",\"--[[ blah ]]\"],\n  [\"paren.rparen\",\")\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_luapage.json",
    "content": "[[\n   \"doctype\",\n  [\"text.xml\",\"﻿\"],\n  [\"xml-pe.doctype.xml\",\"<!\"],\n  [\"xml-pe.doctype.xml\",\"DOCTYPE\"],\n  [\"text.whitespace.xml\",\" \"],\n  [\"xml-pe.xml\",\"html\"],\n  [\"text.whitespace.xml\",\" \"],\n  [\"xml-pe.xml\",\"PUBLIC\"],\n  [\"text.whitespace.xml\",\" \"],\n  [\"string.xml\",\"\\\"-//W3C//DTD XHTML 1.0 Strict//EN\\\"\"]\n],[\n   \"start\",\n  [\"text.whitespace.xml\",\"   \"],\n  [\"string.xml\",\"\\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\\\"\"],\n  [\"xml-pe.doctype.xml\",\">\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"html\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   [\"lua-bracketedComment\",2,\"lua-start\"],\n  [\"keyword\",\"<%\"],\n  [\"text\",\" \"],\n  [\"comment\",\"--[[--\"]\n],[\n   [\"lua-bracketedComment\",2,\"lua-start\"],\n  [\"comment\",\"    index.lp from the Kepler Project's LuaDoc HTML doclet.\"]\n],[\n   [\"lua-bracketedComment\",2,\"lua-start\"],\n  [\"comment\",\"    http://keplerproject.github.com/luadoc/\"]\n],[\n   \"start\",\n  [\"comment\",\"--]]\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"%>\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"head\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"title\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\"Reference\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"title\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"link\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"rel\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"stylesheet\\\"\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"href\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"\"],\n  [\"keyword\",\"<%=\"],\n  [\"identifier\",\"luadoc\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"doclet\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"html\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"link\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\"luadoc.css\\\"\"],\n  [\"paren.rparen\",\")\"],\n  [\"keyword\",\"%>\"],\n  [\"string.attribute-value.xml\",\"\\\"\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"type\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"text/css\\\"\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"meta.tag.punctuation.tag-close.xml\",\"/>\"]\n],[\n   \"start\",\n  [\"text.xml\",\"\\t\"],\n  [\"comment.start.xml\",\"<!--\"],\n  [\"comment.xml\",\"meta http-equiv=\\\"Content-Type\\\" content=\\\"text/html; charset=UTF-8\\\"/\"],\n  [\"comment.end.xml\",\"-->\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"head\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"body\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"div\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"id\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"container\\\"\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"div\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"id\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"product\\\"\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"\\t\"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"div\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"id\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"product_logo\\\"\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"div\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"\\t\"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"div\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"id\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"product_name\\\"\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"big\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"b\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"b\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"big\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"div\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"\\t\"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"div\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"id\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"product_description\\\"\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"div\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"div\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\" \"],\n  [\"comment.start.xml\",\"<!--\"],\n  [\"comment.xml\",\" id=\\\"product\\\" \"],\n  [\"comment.end.xml\",\"-->\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"div\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"id\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"main\\\"\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"div\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"id\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"navigation\\\"\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"keyword\",\"<%=\"],\n  [\"identifier\",\"luadoc\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"doclet\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"html\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"include\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\"menu.lp\\\"\"],\n  [\"text\",\", \"],\n  [\"paren.lparen\",\"{\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"doc\"],\n  [\"keyword.operator\",\"=\"],\n  [\"identifier\",\"doc\"],\n  [\"text\",\" \"],\n  [\"paren.rparen\",\"})\"],\n  [\"keyword\",\"%>\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"div\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\" \"],\n  [\"comment.start.xml\",\"<!--\"],\n  [\"comment.xml\",\" id=\\\"navigation\\\" \"],\n  [\"comment.end.xml\",\"-->\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"div\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"id\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"content\\\"\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\"\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"<%if\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"not\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"options\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"nomodules\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"and\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"#\"],\n  [\"identifier\",\"doc\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"modules\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\">\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"then%>\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"h2\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\"Modules\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"h2\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.table.tag-name.xml\",\"table\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"class\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"module_list\\\"\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"comment.start.xml\",\"<!--\"],\n  [\"comment.xml\",\"<tr><td colspan=\\\"2\\\">Modules</td></tr>\"],\n  [\"comment.end.xml\",\"-->\"]\n],[\n   \"start\",\n  [\"keyword\",\"<%for\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"_\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"modulename\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"in\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"ipairs\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"doc\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"modules\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"do%>\"]\n],[\n   \"start\",\n  [\"text.xml\",\"\\t\"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.table.tag-name.xml\",\"tr\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"\\t\\t\"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.table.tag-name.xml\",\"td\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"class\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"name\\\"\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.anchor.tag-name.xml\",\"a\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"href\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"\"],\n  [\"keyword\",\"<%=\"],\n  [\"identifier\",\"luadoc\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"doclet\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"html\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"module_link\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"modulename\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"doc\"],\n  [\"paren.rparen\",\")\"],\n  [\"keyword\",\"%>\"],\n  [\"string.attribute-value.xml\",\"\\\"\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"keyword\",\"<%=\"],\n  [\"identifier\",\"modulename\"],\n  [\"keyword\",\"%>\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.anchor.tag-name.xml\",\"a\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.table.tag-name.xml\",\"td\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"\\t\\t\"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.table.tag-name.xml\",\"td\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"class\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"summary\\\"\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"keyword\",\"<%=\"],\n  [\"identifier\",\"doc\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"modules\"],\n  [\"paren.lparen\",\"[\"],\n  [\"identifier\",\"modulename\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"summary\"],\n  [\"keyword\",\"%>\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.table.tag-name.xml\",\"td\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"\\t\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.table.tag-name.xml\",\"tr\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"keyword\",\"<%end%>\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.table.tag-name.xml\",\"table\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"keyword\",\"<%end%>\"]\n],[\n   \"start\"\n],[\n   \"start\"\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"<%if\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"not\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"options\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"nofiles\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"and\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"#\"],\n  [\"identifier\",\"doc\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"files\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\">\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"then%>\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"h2\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\"Files\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"h2\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.table.tag-name.xml\",\"table\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"class\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"file_list\\\"\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"comment.start.xml\",\"<!--\"],\n  [\"comment.xml\",\"<tr><td colspan=\\\"2\\\">Files</td></tr>\"],\n  [\"comment.end.xml\",\"-->\"]\n],[\n   \"start\",\n  [\"keyword\",\"<%for\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"_\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"filepath\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"in\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"ipairs\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"doc\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"files\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"do%>\"]\n],[\n   \"start\",\n  [\"text.xml\",\"\\t\"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.table.tag-name.xml\",\"tr\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"\\t\\t\"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.table.tag-name.xml\",\"td\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"class\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"name\\\"\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.anchor.tag-name.xml\",\"a\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"href\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"\"],\n  [\"keyword\",\"<%=\"],\n  [\"identifier\",\"luadoc\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"doclet\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"html\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"file_link\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"filepath\"],\n  [\"paren.rparen\",\")\"],\n  [\"keyword\",\"%>\"],\n  [\"string.attribute-value.xml\",\"\\\"\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"keyword\",\"<%=\"],\n  [\"identifier\",\"filepath\"],\n  [\"keyword\",\"%>\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.anchor.tag-name.xml\",\"a\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.table.tag-name.xml\",\"td\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"\\t\\t\"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.table.tag-name.xml\",\"td\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"class\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"summary\\\"\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.table.tag-name.xml\",\"td\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"\\t\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.table.tag-name.xml\",\"tr\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"keyword\",\"<%end%>\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.table.tag-name.xml\",\"table\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"keyword\",\"<%end%>\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"div\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\" \"],\n  [\"comment.start.xml\",\"<!--\"],\n  [\"comment.xml\",\" id=\\\"content\\\" \"],\n  [\"comment.end.xml\",\"-->\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"div\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\" \"],\n  [\"comment.start.xml\",\"<!--\"],\n  [\"comment.xml\",\" id=\\\"main\\\" \"],\n  [\"comment.end.xml\",\"-->\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"div\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"id\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"about\\\"\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"\\t\"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"p\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.anchor.tag-name.xml\",\"a\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"href\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"http://validator.w3.org/check?uri=referer\\\"\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.image.tag-name.xml\",\"img\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"src\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"http://www.w3.org/Icons/valid-xhtml10\\\"\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"alt\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"Valid XHTML 1.0!\\\"\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"height\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"31\\\"\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"width\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"88\\\"\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"meta.tag.punctuation.tag-close.xml\",\"/>\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.anchor.tag-name.xml\",\"a\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"p\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"div\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\" \"],\n  [\"comment.start.xml\",\"<!--\"],\n  [\"comment.xml\",\" id=\\\"about\\\" \"],\n  [\"comment.end.xml\",\"-->\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"div\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\" \"],\n  [\"comment.start.xml\",\"<!--\"],\n  [\"comment.xml\",\" id=\\\"container\\\" \"],\n  [\"comment.end.xml\",\"-->\"],\n  [\"text.xml\",\"\\t\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"body\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"html\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\"\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_lucene.json",
    "content": "[[\n   \"start\",\n  [\"keyword\",\"test:\"],\n  [\"text\",\" recognises \"],\n  [\"keyword.operator\",\"AND\"],\n  [\"text\",\" as keyword\"]\n],[\n   \"start\",\n  [\"keyword\",\"test:\"],\n  [\"text\",\" recognises \"],\n  [\"keyword.operator\",\"OR\"],\n  [\"text\",\" as keyword\"]\n],[\n   \"start\",\n  [\"keyword\",\"test:\"],\n  [\"text\",\" recognises \"],\n  [\"keyword.operator\",\"NOT\"],\n  [\"text\",\" as keyword\"]\n],[\n   \"start\",\n  [\"keyword\",\"test:\"],\n  [\"text\",\" recognises \"],\n  [\"string\",\"\\\"hello this is dog\\\"\"],\n  [\"text\",\" as string\"]\n],[\n   \"start\",\n  [\"keyword\",\"test:\"],\n  [\"text\",\" recognises \"],\n  [\"constant.character.negation\",\"-\"],\n  [\"string\",\"\\\"hello this is dog\\\"\"],\n  [\"text\",\" as negation with string\"]\n],[\n   \"start\",\n  [\"keyword\",\"test:\"],\n  [\"text\",\" recognises \"],\n  [\"constant.character.proximity\",\"~100\"],\n  [\"text\",\" as text with proximity\"]\n],[\n   \"start\",\n  [\"keyword\",\"test:\"],\n  [\"text\",\" recognises \"],\n  [\"string\",\"\\\"hello this is dog\\\"\"],\n  [\"constant.character.proximity\",\"~100\"],\n  [\"text\",\" as string with proximity\"]\n],[\n   \"start\",\n  [\"keyword\",\"test:\"],\n  [\"text\",\" recognises \"],\n  [\"keyword\",\"raw:\"],\n  [\"string\",\"\\\"hello this is dog\\\"\"],\n  [\"text\",\" as keyword\"]\n],[\n   \"start\",\n  [\"keyword\",\"test:\"],\n  [\"text\",\" recognises \"],\n  [\"keyword\",\"raw:\"],\n  [\"text\",\"foo as\\\"keyword'\"]\n],[\n   \"start\",\n  [\"keyword\",\"test:\"],\n  [\"text\",\" recognises \"],\n  [\"string\",\"\\\"(\\\"\"],\n  [\"text\",\" as opening parenthesis\"]\n],[\n   \"start\",\n  [\"keyword\",\"test:\"],\n  [\"text\",\" recognises \"],\n  [\"string\",\"\\\")\\\"\"],\n  [\"text\",\" as closing parenthesis\"]\n],[\n   \"start\",\n  [\"keyword\",\"test:\"],\n  [\"text\",\" recognises foo\"],\n  [\"constant.character.asterisk\",\"*\"],\n  [\"text\",\" as text with asterisk\"]\n],[\n   \"start\",\n  [\"keyword\",\"test:\"],\n  [\"text\",\" recognises foo\"],\n  [\"constant.character.interro\",\"?\"],\n  [\"text\",\" as text with interro\"]\n],[\n   \"start\",\n  [\"keyword\",\"test:\"],\n  [\"text\",\" recognises single word as text\"]\n],[\n   \"start\",\n  [\"text\",\" foo\"]\n],[\n   \"start\",\n  [\"text\",\" \"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_markdown.json",
    "content": "[[\n   \"start\",\n  [\"text.xml\",\"test: header 1 \"]\n],[\n   \"start\",\n  [\"markup.heading.1\",\"#\"],\n  [\"heading\",\"f\"]\n],[\n   \"start\",\n  [\"text.xml\",\"test: header 2\"]\n],[\n   \"start\",\n  [\"markup.heading.2\",\"##\"],\n  [\"heading\",\" foo\"]\n],[\n   \"start\",\n  [\"text.xml\",\"test: header ends with ' #'\"]\n],[\n   \"start\",\n  [\"markup.heading.1\",\"#\"],\n  [\"heading\",\" # # \"]\n],[\n   \"start\",\n  [\"text.xml\",\"test: header ends with '#'\"]\n],[\n   \"start\",\n  [\"markup.heading.1\",\"#\"],\n  [\"heading\",\"foo# \"]\n],[\n   \"start\",\n  [\"text.xml\",\"test: 6+ #s is not a valid header\"]\n],[\n   \"start\",\n  [\"text.xml\",\"####### foo\"]\n],[\n   \"start\",\n  [\"text.xml\",\"test: # followed be only space is not a valid header\"]\n],[\n   \"start\",\n  [\"text.xml\",\"# \"]\n],[\n   \"start\",\n  [\"text.xml\",\"test: only space between #s is not a valid header\"]\n],[\n   \"start\",\n  [\"text.xml\",\"#  #\"]\n],[\n   \"allowBlock\"\n],[\n   \"start\",\n  [\"markup.heading.1\",\"#\"],\n  [\"heading\",\" test links  \"],\n  [\"text\",\"[\"],\n  [\"string\",\"Cloud9 IDE\"],\n  [\"text\",\"](\"],\n  [\"markup.underline\",\"http://www.c9.io/\"],\n  [\"text\",\")\"],\n  [\"heading\",\" #\"]\n],[\n   \"listblock\",\n  [\"markup.list\",\"* \"],\n  [\"text\",\"[\"],\n  [\"string\",\"demo\"],\n  [\"text\",\"](\"],\n  [\"markup.underline\",\"http://ajaxorg.github.com/ace/\"],\n  [\"text\",\")\"],\n  [\"list\",\" \"],\n  [\"text\",\"[\"],\n  [\"string\",\"+\"],\n  [\"text\",\"](\"],\n  [\"markup.underline\",\"escape(\\\\) \"],\n  [\"text\",\")\"],\n  [\"list\",\" \"],\n  [\"text\",\"[\"],\n  [\"string\",\"+\"],\n  [\"text\",\"](\"],\n  [\"markup.underline\",\"a\"],\n  [\"string\",\" \\\"title\\\"\"],\n  [\"text\",\")\"],\n  [\"list\",\" \"],\n  [\"text\",\"[\"],\n  [\"string\",\"+\"],\n  [\"text\",\"](\"],\n  [\"markup.underline\",\"a\"],\n  [\"string\",\" \\\"space\\\" \"],\n  [\"text\",\")\"]\n],[\n   \"listblock\",\n  [\"markup.list\",\"* \"],\n  [\"list\",\"usually \"],\n  [\"string.emphasis\",\"*work*\"],\n  [\"list\",\" fine (\"],\n  [\"string.emphasis\",\"_em_\"],\n  [\"list\",\")\"]\n],[\n   \"listblock\",\n  [\"list\",\"in lists\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text.xml\",\"in plain text \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"b\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\"http://ace.ajaxorg.com\"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"b\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"allowBlock\"\n],[\n   \"allowBlock\"\n]]\n"
  },
  {
    "path": "lib/ace/mode/_test/tokens_mask.json",
    "content": "[[\n   \"start\",\n  [\"comment\",\"/* Mask Syntax Demo */\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword.support.constant.language\",\"div\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\">\"],\n  [\"text\",\" \"],\n  [\"string.start\",\"'\"],\n  [\"string\",\" Test \"],\n  [\"paren.lparen.markup.italic\",\"~[\"],\n  [\"identifier\",\"name\"],\n  [\"paren.rparen.markup.italic\",\"]\"],\n  [\"string.end\",\"'\"],\n  [\"paren.rparen\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"define\"],\n  [\"text\",\" :\"],\n  [\"support.variable.class\",\"userProfile\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"keyword.support.constant.language\",\"header\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\"],\n  [\"keyword.support.constant.language\",\"h4\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\">\"],\n  [\"text\",\" \"],\n  [\"support.function.markup.bold\",\"@title\"],\n  [\"paren.lparen\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\"],\n  [\"keyword.support.constant.language\",\"button\"],\n  [\"support.variable.class\",\".close\"],\n  [\"paren.lparen\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"support.function.markup.bold\",\":userProfile\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"support.function.markup.bold\",\"@title\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\">\"],\n  [\"text\",\" \"],\n  [\"string.start\",\"'\"],\n  [\"string\",\" Hello \"],\n  [\"paren.lparen.markup.italic\",\"~[\"],\n  [\"keyword.control.markup.italic\",\":\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"username\"],\n  [\"punctuation.operator\",\".\"],\n  [\"support.function\",\"toUpperCase\"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\")\"],\n  [\"paren.rparen.markup.italic\",\"]\"],\n  [\"string.end\",\"'\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   [\"paren.lparen52\",\"constant.language40\"],\n  [\"constant.language\",\"style\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   [\"#tmp\",\"css-block-ruleset\",\"paren.lparen52\",\"constant.language40\"],\n  [\"text\",\"    \"],\n  [\"constant\",\"html\"],\n  [\"text\",\", \"],\n  [\"constant\",\"body\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   [\"#tmp\",\"css-block-ruleset\",\"paren.lparen52\",\"constant.language40\"],\n  [\"text\",\"        \"],\n  [\"support.type\",\"background\"],\n  [\"text\",\": \"],\n  [\"support.function\",\"url(\"],\n  [\"string\",\"'name.png'\"],\n  [\"support.function\",\")\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\" \"],\n  [\"support.constant\",\"no-repeat\"],\n  [\"text\",\";\"]\n],[\n   [\"#tmp\",\"css-block-start\",\"paren.lparen52\",\"constant.language40\"],\n  [\"text\",\"    \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   [\"#tmp\",\"css-block-end\",\"paren.lparen52\",\"constant.language40\"],\n  [\"paren.rparen\",\"}\"]\n],[\n   [\"#tmp\",\"start\",\"paren.lparen52\",\"constant.language40\"]\n],[\n   [\"#tmp\",\"start\",\"paren.lparen52\",\"constant.language40\"],\n  [\"keyword.support.constant.language\",\"button\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   [\"paren.lparen39\",\"constant.language27\",\"constant.language27\",\"start\",\"paren.lparen52\",\"constant.language40\"],\n  [\"text\",\"\\t\"],\n  [\"constant.language\",\"event\"],\n  [\"text\",\" \"],\n  [\"support.variable.class\",\"click\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"e\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   [\"#tmp\",\"js-block-start\",\"paren.lparen39\",\"constant.language27\",\"constant.language27\",\"start\",\"paren.lparen52\",\"constant.language40\"],\n  [\"text\",\"\\t    \"],\n  [\"variable.language\",\"this\"],\n  [\"punctuation.operator\",\".\"],\n  [\"identifier\",\"textContent\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"string.quasi.start\",\"`\"],\n  [\"string.quasi\",\"name \"],\n  [\"paren.quasi.start\",\"${\"],\n  [\"identifier\",\"e\"],\n  [\"punctuation.operator\",\".\"],\n  [\"identifier\",\"clientX\"],\n  [\"paren.quasi.end\",\"}\"],\n  [\"string.quasi\",\" !\"],\n  [\"string.quasi.end\",\"`\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   [\"#tmp\",\"js-block-end\",\"paren.lparen39\",\"constant.language27\",\"constant.language27\",\"start\",\"paren.lparen52\",\"constant.language40\"],\n  [\"text\",\"\\t\"],\n  [\"paren.rparen\",\"}\"]\n],[\n   [\"#tmp\",\"start\",\"paren.lparen39\",\"constant.language27\",\"constant.language27\",\"start\",\"paren.lparen52\",\"constant.language40\"],\n  [\"paren.rparen\",\"}\"]\n],[\n   [\"#tmp\",\"start\",\"paren.lparen39\",\"constant.language27\",\"constant.language27\",\"start\",\"paren.lparen52\",\"constant.language40\"]\n],[\n   [\"paren.lparen13\",\"constant.language\",\"constant.language\",\"start\",\"paren.lparen39\",\"constant.language27\",\"constant.language27\",\"start\",\"paren.lparen52\",\"constant.language40\"],\n  [\"constant.language\",\"md\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\">\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"\\\"\\\"\\\"\"]\n],[\n   [\"#tmp\",\"md-multiline-allowBlock\",\"paren.lparen13\",\"constant.language\",\"constant.language\",\"start\",\"paren.lparen39\",\"constant.language27\",\"constant.language27\",\"start\",\"paren.lparen52\",\"constant.language40\"]\n],[\n   [\"#tmp\",\"md-multiline-listblock\",\"paren.lparen13\",\"constant.language\",\"constant.language\",\"start\",\"paren.lparen39\",\"constant.language27\",\"constant.language27\",\"start\",\"paren.lparen52\",\"constant.language40\"],\n  [\"markup.list\",\"- \"],\n  [\"list\",\"div\"]\n],[\n   [\"#tmp\",\"md-multiline-listblock\",\"paren.lparen13\",\"constant.language\",\"constant.language\",\"start\",\"paren.lparen39\",\"constant.language27\",\"constant.language27\",\"start\",\"paren.lparen52\",\"constant.language40\"],\n  [\"markup.list\",\"- \"],\n  [\"list\",\"span\"]\n],[\n   [\"#tmp\",\"md-multiline-listblock\",\"paren.lparen13\",\"constant.language\",\"constant.language\",\"start\",\"paren.lparen39\",\"constant.language27\",\"constant.language27\",\"start\",\"paren.lparen52\",\"constant.language40\"],\n  [\"list\",\" \"]\n],[\n   [\"#tmp\",\"md-multiline-listblock\",\"paren.lparen13\",\"constant.language\",\"constant.language\",\"start\",\"paren.lparen39\",\"constant.language27\",\"constant.language27\",\"start\",\"paren.lparen52\",\"constant.language40\"],\n  [\"list\",\"Hello\"]\n],[\n   [\"#tmp\",\"md-multiline-start\",\"paren.lparen13\",\"constant.language\",\"constant.language\",\"start\",\"paren.lparen39\",\"constant.language27\",\"constant.language27\",\"start\",\"paren.lparen52\",\"constant.language40\"]\n],[\n   [\"#tmp\",\"md-multiline-start\",\"paren.lparen13\",\"constant.language\",\"constant.language\",\"start\",\"paren.lparen39\",\"constant.language27\",\"constant.language27\",\"start\",\"paren.lparen52\",\"constant.language40\"],\n  [\"text\",\"[\"],\n  [\"string\",\"one\"],\n  [\"text\",\"](\"],\n  [\"markup.underline\",\"http://google.com\"],\n  [\"text\",\")\"]\n],[\n   [\"#tmp\",\"md-multiline-allowBlock\",\"paren.lparen13\",\"constant.language\",\"constant.language\",\"start\",\"paren.lparen39\",\"constant.language27\",\"constant.language27\",\"start\",\"paren.lparen52\",\"constant.language40\"]\n],[\n   [\"#tmp\",\"start\",\"paren.lparen13\",\"constant.language\",\"constant.language\",\"start\",\"paren.lparen39\",\"constant.language27\",\"constant.language27\",\"start\",\"paren.lparen52\",\"constant.language40\"],\n  [\"paren.rparen\",\"\\\"\\\"\\\";\"]\n],[\n   [\"#tmp\",\"start\",\"paren.lparen13\",\"constant.language\",\"constant.language\",\"start\",\"paren.lparen39\",\"constant.language27\",\"constant.language27\",\"start\",\"paren.lparen52\",\"constant.language40\"]\n],[\n   [\"#tmp\",\"start\",\"paren.lparen13\",\"constant.language\",\"constant.language\",\"start\",\"paren.lparen39\",\"constant.language27\",\"constant.language27\",\"start\",\"paren.lparen52\",\"constant.language40\"]\n],[\n   [\"#tmp\",\"start\",\"paren.lparen13\",\"constant.language\",\"constant.language\",\"start\",\"paren.lparen39\",\"constant.language27\",\"constant.language27\",\"start\",\"paren.lparen52\",\"constant.language40\"],\n  [\"keyword.support.constant.language\",\"header\"],\n  [\"text\",\" \"],\n  [\"support.variable.class\",\".foo\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\">\"],\n  [\"text\",\" \"],\n  [\"string.start\",\"'\"],\n  [\"string\",\"Heading\"],\n  [\"string.end\",\"'\"]\n],[\n   [\"#tmp\",\"start\",\"paren.lparen13\",\"constant.language\",\"constant.language\",\"start\",\"paren.lparen39\",\"constant.language27\",\"constant.language27\",\"start\",\"paren.lparen52\",\"constant.language40\"]\n],[\n   [\"string.start2\",\"start\",\"paren.lparen13\",\"constant.language\",\"constant.language\",\"start\",\"paren.lparen39\",\"constant.language27\",\"constant.language27\",\"start\",\"paren.lparen52\",\"constant.language40\"],\n  [\"keyword.support.constant.language\",\"button\"],\n  [\"text\",\" \"],\n  [\"support.variable.class\",\".baz\"],\n  [\"text\",\" \"],\n  [\"support.variable.class.markup.bold\",\"x-signal\"],\n  [\"keyword.operator\",\"=\"],\n  [\"string.start\",\"'\"],\n  [\"string\",\"click: test\"],\n  [\"string.end\",\"'\"],\n  [\"text\",\" \"],\n  [\"support.variable.class\",\"disabled\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\">\"],\n  [\"text\",\" \"],\n  [\"string.start\",\"\\\"\"]\n],[\n   [\"string.start2\",\"start\",\"paren.lparen13\",\"constant.language\",\"constant.language\",\"start\",\"paren.lparen39\",\"constant.language27\",\"constant.language27\",\"start\",\"paren.lparen52\",\"constant.language40\"],\n  [\"string\",\"\\tHello,\"]\n],[\n   [\"string.start2\",\"start\",\"paren.lparen13\",\"constant.language\",\"constant.language\",\"start\",\"paren.lparen39\",\"constant.language27\",\"constant.language27\",\"start\",\"paren.lparen52\",\"constant.language40\"],\n  [\"string\",\"\\tworld \"]\n],[\n   [\"string.start2\",\"start\",\"paren.lparen13\",\"constant.language\",\"constant.language\",\"start\",\"paren.lparen39\",\"constant.language27\",\"constant.language27\",\"start\",\"paren.lparen52\",\"constant.language40\"],\n  [\"string\",\"\\t\"],\n  [\"string.escape\",\"\\\\\\\"\"],\n  [\"string\",\"Buddy\"],\n  [\"string.escape\",\"\\\\\\\"\"]\n],[\n   [\"#tmp\",\"start\",\"paren.lparen13\",\"constant.language\",\"constant.language\",\"start\",\"paren.lparen39\",\"constant.language27\",\"constant.language27\",\"start\",\"paren.lparen52\",\"constant.language40\"],\n  [\"string.end\",\"\\\"\"]\n],[\n   [\"#tmp\",\"start\",\"paren.lparen13\",\"constant.language\",\"constant.language\",\"start\",\"paren.lparen39\",\"constant.language27\",\"constant.language27\",\"start\",\"paren.lparen52\",\"constant.language40\"]\n],[\n   [\"#tmp\",\"js-statement-start\",\"start\",\"js-statement-no_regex\",\"constant.language53\",\"start\",\"paren.lparen13\",\"constant.language\",\"constant.language\",\"start\",\"paren.lparen39\",\"constant.language27\",\"constant.language27\",\"start\",\"paren.lparen52\",\"constant.language40\"],\n  [\"constant.language\",\"var\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"a\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   [\"#tmp\",\"js-statement-no_regex\",\"start\",\"js-statement-no_regex\",\"constant.language53\",\"start\",\"paren.lparen13\",\"constant.language\",\"constant.language\",\"start\",\"paren.lparen39\",\"constant.language27\",\"constant.language27\",\"start\",\"paren.lparen52\",\"constant.language40\"],\n  [\"text\",\"    \"],\n  [\"identifier\",\"name\"],\n  [\"punctuation.operator\",\":\"],\n  [\"text\",\" \"],\n  [\"string.quasi.start\",\"`\"],\n  [\"string.quasi\",\"name \"],\n  [\"paren.quasi.start\",\"${\"],\n  [\"variable.language\",\"window\"],\n  [\"punctuation.operator\",\".\"],\n  [\"support.constant\",\"innerWidth\"],\n  [\"paren.rparen\",\"}\"],\n  [\"string.quasi.end\",\"`\"]\n],[\n   [\"#tmp\",\"start\",\"paren.lparen13\",\"constant.language\",\"constant.language\",\"start\",\"paren.lparen39\",\"constant.language27\",\"constant.language27\",\"start\",\"paren.lparen52\",\"constant.language40\"],\n  [\"paren.rparen\",\"};\"]\n],[\n   [\"#tmp\",\"start\",\"paren.lparen13\",\"constant.language\",\"constant.language\",\"start\",\"paren.lparen39\",\"constant.language27\",\"constant.language27\",\"start\",\"paren.lparen52\",\"constant.language40\"]\n],[\n   [\"#tmp\",\"start\",\"paren.lparen13\",\"constant.language\",\"constant.language\",\"start\",\"paren.lparen39\",\"constant.language27\",\"constant.language27\",\"start\",\"paren.lparen52\",\"constant.language40\"],\n  [\"keyword.support.constant.language\",\"span\"],\n  [\"text\",\" \"],\n  [\"support.variable.class\",\".foo\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\">\"],\n  [\"text\",\" \"],\n  [\"string.start\",\"\\\"\"],\n  [\"paren.lparen.markup.italic\",\"~[\"],\n  [\"keyword.control.markup.italic\",\"bind:\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"a\"],\n  [\"punctuation.operator\",\".\"],\n  [\"identifier\",\"name\"],\n  [\"paren.rparen.markup.italic\",\"]\"],\n  [\"string.end\",\"\\\"\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_matlab.json",
    "content": "[[\n   [\"blockComment\",\"noQstring\"],\n  [\"comment.start\",\"%{\"]\n],[\n   [\"blockComment\",\"blockComment\",\"blockComment\",\"noQstring\"],\n  [\"comment.start\",\"   %{\"]\n],[\n   [\"blockComment\",\"blockComment\",\"blockComment\",\"noQstring\"],\n  [\"comment\",\"      Ace Matlab demo\"]\n],[\n   [\"blockComment\",\"noQstring\"],\n  [\"comment.end\",\"   %}\"]\n],[\n   \"noQstring\",\n  [\"comment.end\",\"%}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"classdef\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"hello\"]\n],[\n   \"start\",\n  [\"text\",\"   \"],\n  [\"support.function\",\"methods\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"keyword\",\"function\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"greet\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"this\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"         \"],\n  [\"support.function\",\"disp\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"'Hello!'\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\"  \"],\n  [\"comment\",\"% say hi\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"keyword\",\"end\"]\n],[\n   \"start\",\n  [\"text\",\"   \"],\n  [\"keyword\",\"end\"]\n],[\n   \"start\",\n  [\"keyword\",\"end\"]\n],[\n   \"noQstring\"\n],[\n   \"start\",\n  [\"comment\",\"% transpose \"]\n],[\n   \"qqstring\",\n  [\"identifier\",\"a\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"text\",\" \"],\n  [\"string\",\"'x\"],\n  [\"constant.language.escape\",\"''\"],\n  [\"string\",\"y'\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"x\"],\n  [\"constant.language.escape\",\"\\\\n\"],\n  [\"string\",\"\\\\\"]\n],[\n   \"start\",\n  [\"string\",\"      y\\\"\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\"' \"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\"' \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"2\"],\n  [\"text\",\"'\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_maze.json",
    "content": "[[\n   \"start\",\n  [\"keyword.control\",\"##\"],\n  [\"text\",\" \"],\n  [\"keyword.control\",\"##\"],\n  [\"text\",\" \"],\n  [\"keyword.control\",\"()\"],\n  [\"text\",\" \"],\n  [\"keyword.control\",\"##\"],\n  [\"text\",\" \"],\n  [\"keyword.control\",\"^^\"],\n  [\"text\",\" \"],\n  [\"keyword.control\",\"##\"],\n  [\"text\",\" \"],\n  [\"keyword.control\",\"##\"],\n  [\"text\",\" \"],\n  [\"keyword.control\",\"##\"],\n  [\"text\",\" \"],\n  [\"keyword.control\",\"##\"]\n],[\n   \"start\",\n  [\"keyword.control\",\"##\"],\n  [\"text\",\" \"],\n  [\"entity.name.function\",\"H1\"],\n  [\"text\",\" \"],\n  [\"entity.name.function\",\"C2\"],\n  [\"text\",\" \"],\n  [\"entity.name.function\",\"S1\"],\n  [\"text\",\" \"],\n  [\"keyword.control\",\"<>\"],\n  [\"text\",\" \"],\n  [\"entity.name.function\",\"S2\"],\n  [\"text\",\" \"],\n  [\"entity.name.function\",\"H2\"],\n  [\"text\",\" \"],\n  [\"entity.name.function\",\"DN\"],\n  [\"text\",\" \"],\n  [\"keyword.control\",\"##\"]\n],[\n   \"start\",\n  [\"keyword.control\",\"##\"],\n  [\"text\",\" \"],\n  [\"constant.language\",\"%U\"],\n  [\"text\",\" \"],\n  [\"keyword.control\",\"<>\"],\n  [\"text\",\" \"],\n  [\"constant.language\",\"%D\"],\n  [\"text\",\" \"],\n  [\"entity.name.tag\",\"*2\"],\n  [\"text\",\" \"],\n  [\"constant.language\",\"%L\"],\n  [\"text\",\" \"],\n  [\"entity.name.function\",\"IZ\"],\n  [\"text\",\" \"],\n  [\"entity.name.tag\",\"..\"],\n  [\"text\",\" \"],\n  [\"keyword.control\",\"##\"]\n],[\n   \"start\",\n  [\"keyword.control\",\"##\"],\n  [\"text\",\" \"],\n  [\"keyword.control\",\"##\"],\n  [\"text\",\" \"],\n  [\"keyword.control\",\"##\"],\n  [\"text\",\" \"],\n  [\"entity.name.tag\",\"..\"],\n  [\"text\",\" \"],\n  [\"keyword.control\",\"##\"],\n  [\"text\",\" \"],\n  [\"entity.name.function\",\"DN\"],\n  [\"text\",\" \"],\n  [\"entity.name.tag\",\"*3\"],\n  [\"text\",\" \"],\n  [\"keyword.control\",\"##\"],\n  [\"text\",\" \"],\n  [\"keyword.control\",\"##\"]\n],[\n   \"start\",\n  [\"keyword.control\",\"##\"],\n  [\"text\",\" \"],\n  [\"keyword.control\",\"##\"],\n  [\"text\",\" \"],\n  [\"keyword.control\",\"##\"],\n  [\"text\",\" \"],\n  [\"constant.language\",\"%R\"],\n  [\"text\",\" \"],\n  [\"entity.name.function\",\"C1\"],\n  [\"text\",\" \"],\n  [\"entity.name.function\",\"IZ\"],\n  [\"text\",\" \"],\n  [\"keyword.control\",\"()\"],\n  [\"text\",\" \"],\n  [\"keyword.control\",\"##\"],\n  [\"text\",\" \"],\n  [\"keyword.control\",\"##\"]\n],[\n   \"start\",\n  [\"keyword.control\",\"##\"],\n  [\"text\",\" \"],\n  [\"keyword.control\",\"##\"],\n  [\"text\",\" \"],\n  [\"keyword.control\",\"##\"],\n  [\"text\",\" \"],\n  [\"keyword.control\",\"##\"],\n  [\"text\",\" \"],\n  [\"support.function\",\">/\"],\n  [\"text\",\" \"],\n  [\"entity.name.tag\",\"*1\"]\n],[\n   \"start\",\n  [\"keyword.control\",\"##\"],\n  [\"text\",\" \"],\n  [\"keyword.control\",\"()\"],\n  [\"text\",\" \"],\n  [\"entity.name.tag\",\"*3\"],\n  [\"text\",\" \"],\n  [\"entity.name.tag\",\"*1\"],\n  [\"text\",\" \"],\n  [\"constant.language\",\"%L\"],\n  [\"text\",\" \"],\n  [\"keyword.control\",\"()\"]\n],[\n   \"start\"\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"comment.line.double-slash\",\"// Set divisor and dividend\"]\n],[\n   \"start\",\n  [\"entity.name.function\",\"S1\"],\n  [\"keyword.other\",\"-> \"],\n  [\"keyword.operator\",\"=\"],\n  [\"keyword.other\",\" \"],\n  [\"constant.numeric\",\"9\"]\n],[\n   \"start\",\n  [\"entity.name.function\",\"S2\"],\n  [\"keyword.other\",\"-> \"],\n  [\"keyword.operator\",\"=\"],\n  [\"keyword.other\",\" \"],\n  [\"constant.numeric\",\"24\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"comment.line.double-slash\",\"// Holding cells\"]\n],[\n   \"start\",\n  [\"entity.name.function\",\"H1\"],\n  [\"keyword.other\",\"-> \"],\n  [\"keyword.control\",\"IF\"],\n  [\"keyword.other\",\" \"],\n  [\"entity.name.tag\",\"*1\"],\n  [\"keyword.other\",\" \"],\n  [\"keyword.control\",\"THEN\"],\n  [\"keyword.other\",\" \"],\n  [\"constant.language\",\"%R\"],\n  [\"keyword.other\",\" \"],\n  [\"keyword.control\",\"ELSE\"],\n  [\"keyword.other\",\" \"],\n  [\"constant.language\",\"%N\"]\n],[\n   \"start\",\n  [\"entity.name.function\",\"H2\"],\n  [\"keyword.other\",\"-> \"],\n  [\"keyword.control\",\"IF\"],\n  [\"keyword.other\",\" \"],\n  [\"entity.name.tag\",\"*2\"],\n  [\"keyword.other\",\" \"],\n  [\"keyword.control\",\"THEN\"],\n  [\"keyword.other\",\" \"],\n  [\"constant.language\",\"%R\"],\n  [\"keyword.other\",\" \"],\n  [\"keyword.control\",\"ELSE\"],\n  [\"keyword.other\",\" \"],\n  [\"constant.language\",\"%N\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"comment.line.double-slash\",\"// Arithmetic\"]\n],[\n   \"start\",\n  [\"entity.name.function\",\"DN\"],\n  [\"keyword.other\",\"-> \"],\n  [\"keyword.operator\",\"-=\"],\n  [\"keyword.other\",\" \"],\n  [\"constant.numeric\",\"1\"]\n],[\n   \"start\",\n  [\"entity.name.function\",\"IZ\"],\n  [\"keyword.other\",\"-> \"],\n  [\"keyword.control\",\"IF\"],\n  [\"keyword.other\",\" \"],\n  [\"keyword.operator\",\"<=\"],\n  [\"keyword.other\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"keyword.other\",\" \"],\n  [\"keyword.control\",\"THEN\"],\n  [\"keyword.other\",\" \"],\n  [\"constant.language\",\"%D\"],\n  [\"keyword.other\",\" \"],\n  [\"keyword.control\",\"ELSE\"],\n  [\"keyword.other\",\" \"],\n  [\"constant.language\",\"%U\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"entity.name.function\",\"C1\"],\n  [\"keyword.other\",\"-> \"],\n  [\"keyword.control\",\"IF\"],\n  [\"keyword.other\",\" \"],\n  [\"entity.name.tag\",\"*3\"],\n  [\"keyword.other\",\" \"],\n  [\"keyword.control\",\"THEN\"],\n  [\"keyword.other\",\" \"],\n  [\"constant.language\",\"%D\"],\n  [\"keyword.other\",\" \"],\n  [\"keyword.control\",\"ELSE\"],\n  [\"keyword.other\",\" \"],\n  [\"constant.language\",\"%R\"]\n],[\n   \"start\",\n  [\"entity.name.function\",\"C2\"],\n  [\"keyword.other\",\"-> \"],\n  [\"keyword.control\",\"IF\"],\n  [\"keyword.other\",\" \"],\n  [\"entity.name.tag\",\"*3\"],\n  [\"keyword.other\",\" \"],\n  [\"keyword.control\",\"THEN\"],\n  [\"keyword.other\",\" \"],\n  [\"constant.language\",\"%U\"],\n  [\"keyword.other\",\" \"],\n  [\"keyword.control\",\"ELSE\"],\n  [\"keyword.other\",\" \"],\n  [\"constant.language\",\"%D\"]\n],[\n   \"start\"\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_mel.json",
    "content": "[[\n   \"start\",\n  [\"comment.line.double-slash.mel\",\"//\"],\n  [\"punctuation.definition.comment.mel\",\" animated duplicates, instances script\"]\n],[\n   \"start\",\n  [\"keyword.other.mel\",\"proc\"],\n  [\"storage.type.mel\",\" \"],\n  [\"entity.name.function.mel\",\"animatedDuplication\"],\n  [\"punctuation.section.function.mel\",\" (\"],\n  [\"meta.function.mel\",\"int $rangeStart, int $rangeEnd, int $numOfDuplicates, int $duplicateOrInstance\"],\n  [\"punctuation.section.function.mel\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"storage.type.mel\",\"int\"],\n  [\"text\",\" \"],\n  [\"variable.other.mel\",\"$\"],\n  [\"punctuation.definition.variable.mel\",\"range_start\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.symbolic.mel\",\"=\"],\n  [\"text\",\" \"],\n  [\"variable.other.mel\",\"$\"],\n  [\"punctuation.definition.variable.mel\",\"rangeStart\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"storage.type.mel\",\"int\"],\n  [\"text\",\" \"],\n  [\"variable.other.mel\",\"$\"],\n  [\"punctuation.definition.variable.mel\",\"range_end\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.symbolic.mel\",\"=\"],\n  [\"text\",\" \"],\n  [\"variable.other.mel\",\"$\"],\n  [\"punctuation.definition.variable.mel\",\"rangeEnd\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"storage.type.mel\",\"int\"],\n  [\"text\",\" \"],\n  [\"variable.other.mel\",\"$\"],\n  [\"punctuation.definition.variable.mel\",\"num_of_duplicates\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.symbolic.mel\",\"=\"],\n  [\"text\",\" \"],\n  [\"variable.other.mel\",\"$\"],\n  [\"punctuation.definition.variable.mel\",\"numOfDuplicates\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"storage.type.mel\",\"int\"],\n  [\"text\",\" \"],\n  [\"variable.other.mel\",\"$\"],\n  [\"punctuation.definition.variable.mel\",\"step_size\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.symbolic.mel\",\"=\"],\n  [\"text\",\" (\"],\n  [\"variable.other.mel\",\"$\"],\n  [\"punctuation.definition.variable.mel\",\"range_end\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.symbolic.mel\",\"-\"],\n  [\"text\",\" \"],\n  [\"variable.other.mel\",\"$\"],\n  [\"punctuation.definition.variable.mel\",\"range_start\"],\n  [\"text\",\") \"],\n  [\"keyword.operator.symbolic.mel\",\"/\"],\n  [\"text\",\" \"],\n  [\"variable.other.mel\",\"$\"],\n  [\"punctuation.definition.variable.mel\",\"num_of_duplicates\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"storage.type.mel\",\"int\"],\n  [\"text\",\" \"],\n  [\"variable.other.mel\",\"$\"],\n  [\"punctuation.definition.variable.mel\",\"i\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.symbolic.mel\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.mel\",\"0\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"storage.type.mel\",\"int\"],\n  [\"text\",\" \"],\n  [\"variable.other.mel\",\"$\"],\n  [\"punctuation.definition.variable.mel\",\"temp\"],\n  [\"text\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"support.function.mel\",\"currentTime\"],\n  [\"text\",\" \"],\n  [\"variable.other.mel\",\"$\"],\n  [\"punctuation.definition.variable.mel\",\"range_start\"],\n  [\"text\",\";     \"],\n  [\"comment.line.double-slash.mel\",\"//\"],\n  [\"punctuation.definition.comment.mel\",\" set to range start\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"storage.type.mel\",\"string\"],\n  [\"text\",\" \"],\n  [\"variable.other.mel\",\"$\"],\n  [\"punctuation.definition.variable.mel\",\"selectedObjects\"],\n  [\"text\",\"[];    \"],\n  [\"comment.line.double-slash.mel\",\"//\"],\n  [\"punctuation.definition.comment.mel\",\" to store selected objects\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"variable.other.mel\",\"$\"],\n  [\"punctuation.definition.variable.mel\",\"selectedObjects\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.symbolic.mel\",\"=\"],\n  [\"text\",\" `\"],\n  [\"support.function.mel\",\"ls\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.symbolic.mel\",\"-\"],\n  [\"text\",\"sl`;  \"],\n  [\"comment.line.double-slash.mel\",\"//\"],\n  [\"punctuation.definition.comment.mel\",\" store selected objects\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"support.function.mel\",\"select\"],\n  [\"text\",\" \"],\n  [\"variable.other.mel\",\"$\"],\n  [\"punctuation.definition.variable.mel\",\"selectedObjects\"],\n  [\"text\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword.control.mel\",\"while\"],\n  [\"text\",\" (\"],\n  [\"variable.other.mel\",\"$\"],\n  [\"punctuation.definition.variable.mel\",\"i\"],\n  [\"text\",\" <\"],\n  [\"keyword.operator.symbolic.mel\",\"=\"],\n  [\"text\",\" \"],\n  [\"variable.other.mel\",\"$\"],\n  [\"punctuation.definition.variable.mel\",\"num_of_duplicates\"],\n  [\"text\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"    {\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"variable.other.mel\",\"$\"],\n  [\"punctuation.definition.variable.mel\",\"temp\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.symbolic.mel\",\"=\"],\n  [\"text\",\" \"],\n  [\"variable.other.mel\",\"$\"],\n  [\"punctuation.definition.variable.mel\",\"range_start\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.symbolic.mel\",\"+\"],\n  [\"text\",\" (\"],\n  [\"variable.other.mel\",\"$\"],\n  [\"punctuation.definition.variable.mel\",\"step_size\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.symbolic.mel\",\"*\"],\n  [\"text\",\" \"],\n  [\"variable.other.mel\",\"$\"],\n  [\"punctuation.definition.variable.mel\",\"i\"],\n  [\"text\",\");\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"support.function.mel\",\"currentTime\"],\n  [\"text\",\" (\"],\n  [\"variable.other.mel\",\"$\"],\n  [\"punctuation.definition.variable.mel\",\"temp\"],\n  [\"text\",\");\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"comment.line.double-slash.mel\",\"//\"],\n  [\"punctuation.definition.comment.mel\",\" seleced the objects to duplicate or instance\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"support.function.mel\",\"select\"],\n  [\"text\",\" \"],\n  [\"variable.other.mel\",\"$\"],\n  [\"punctuation.definition.variable.mel\",\"selectedObjects\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"keyword.control.mel\",\"if\"],\n  [\"text\",\"(\"],\n  [\"variable.other.mel\",\"$\"],\n  [\"punctuation.definition.variable.mel\",\"duplicateOrInstance\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.symbolic.mel\",\"==\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.mel\",\"0\"],\n  [\"text\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"        {\"]\n],[\n   \"start\",\n  [\"text\",\"            \"],\n  [\"support.function.mel\",\"duplicate\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"        }\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"keyword.control.mel\",\"else\"]\n],[\n   \"start\",\n  [\"text\",\"        {\"]\n],[\n   \"start\",\n  [\"text\",\"            \"],\n  [\"support.function.mel\",\"instance\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"        }\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"variable.other.mel\",\"$\"],\n  [\"punctuation.definition.variable.mel\",\"i\"],\n  [\"keyword.operator.symbolic.mel\",\"++\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"    }\"]\n],[\n   \"start\",\n  [\"text\",\"}\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_mixal.json",
    "content": "[[\n   \"start\",\n  [\"comment.line.character\",\"* PROGRAM START\"]\n],[\n   \"start\",\n  [\"variable.other\",\"ΔSTART\"],\n  [\"text\",\"     \"],\n  [\"keyword.control\",\"LDA\"],\n  [\"text\",\"  \"],\n  [\"text\",\"2000\"],\n  [\"comment.line.character\",\" LOAD A FROM CELL 2000\"]\n],[\n   \"start\",\n  [\"text\",\"           \"],\n  [\"invalid.illegal\",\"CMP7\"],\n  [\"text\",\" \"],\n  [\"text\",\"=15=\"]\n],[\n   \"start\",\n  [\"invalid.illegal\",\"12345\"],\n  [\"text\",\"      \"],\n  [\"keyword.control\",\"HLT\"]\n],[\n   \"start\",\n  [\"text\",\"           \"],\n  [\"keyword.control\",\"END\"],\n  [\"text\",\"  \"],\n  [\"text\",\"START\"]\n],[\n   \"start\",\n  [\"variable.other\",\"ABC\"],\n  [\"text\",\"        \"],\n  [\"keyword.control\",\"ALF\"],\n  [\"text\",\" \"],\n  [\"invalid.illegal\",\"abc\"]\n],[\n   \"start\"\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_mushcode.json",
    "content": "[[\n   \"start\",\n  [\"text\",\"@\"],\n  [\"support.function\",\"create\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"phone\"]\n],[\n   \"start\",\n  [\"text\",\"&\"],\n  [\"identifier\",\"pickup\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"phone\"],\n  [\"keyword.operator\",\"=\"],\n  [\"identifier\",\"$pick\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"up\"],\n  [\"text\",\":@\"],\n  [\"support.function\",\"ifelse\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"u\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"is\"],\n  [\"text\",\",\"],\n  [\"support.function\",\"u\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"mode\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\",\"],\n  [\"identifier\",\"ICC\"],\n  [\"paren.rparen\",\")]\"],\n  [\"keyword.operator\",\"=\"],\n  [\"paren.lparen\",\"{\"],\n  [\"text\",\"@\"],\n  [\"support.function\",\"pemit\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"%#=\"],\n  [\"identifier\",\"You\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"pick\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"up\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"the\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"fullname\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"me\"],\n  [\"paren.rparen\",\")]\"],\n  [\"text\",\".\"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"set\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"me\"],\n  [\"text\",\",\"],\n  [\"identifier\",\"PHONER\"],\n  [\"text\",\":\"],\n  [\"keyword.operator\",\"%#\"],\n  [\"paren.rparen\",\")]\"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"set\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"me\"],\n  [\"text\",\",\"],\n  [\"identifier\",\"MODE\"],\n  [\"text\",\":\"],\n  [\"identifier\",\"CIP\"],\n  [\"paren.rparen\",\")]\"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"set\"],\n  [\"paren.lparen\",\"([\"],\n  [\"support.function\",\"u\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"INCOMING\"],\n  [\"paren.rparen\",\")]\"],\n  [\"text\",\",\"],\n  [\"identifier\",\"CONNECTED\"],\n  [\"text\",\":\"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"num\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"me\"],\n  [\"paren.rparen\",\")])]\"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"set\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"me\"],\n  [\"text\",\",\"],\n  [\"identifier\",\"CONNECTED\"],\n  [\"text\",\":\"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"u\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"INCOMING\"],\n  [\"paren.rparen\",\")])]\"],\n  [\"variable\",\"%r\"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"showpicture\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"PICPICKUP\"],\n  [\"paren.rparen\",\")]\"],\n  [\"variable\",\"%r\"],\n  [\"identifier\",\"Use\"],\n  [\"text\",\" '\"],\n  [\"paren.lparen\",\"[\"],\n  [\"identifier\",\"color\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"green\"],\n  [\"text\",\",\"],\n  [\"identifier\",\"black\"],\n  [\"text\",\",\"],\n  [\"identifier\",\"psay\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"<\"],\n  [\"identifier\",\"message\"],\n  [\"keyword.operator\",\">\"],\n  [\"paren.rparen\",\")]\"],\n  [\"text\",\"' \"],\n  [\"paren.lparen\",\"(\"],\n  [\"support.function\",\"or\"],\n  [\"text\",\" '\"],\n  [\"paren.lparen\",\"[\"],\n  [\"identifier\",\"color\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"green\"],\n  [\"text\",\",\"],\n  [\"identifier\",\"black\"],\n  [\"text\",\",\"],\n  [\"identifier\",\"p\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"<\"],\n  [\"identifier\",\"message\"],\n  [\"keyword.operator\",\">\"],\n  [\"paren.rparen\",\")]\"],\n  [\"text\",\"'\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"to\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"talk\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"into\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"the\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"phone\"],\n  [\"text\",\".;@\"],\n  [\"support.function\",\"oemit\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"%#=\"],\n  [\"variable\",\"%N\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"picks\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"up\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"the\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"fullname\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"me\"],\n  [\"paren.rparen\",\")]\"],\n  [\"text\",\".\"],\n  [\"paren.rparen\",\"}\"],\n  [\"text\",\",\"],\n  [\"paren.lparen\",\"{\"],\n  [\"text\",\"@\"],\n  [\"support.function\",\"pemit\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"%#=\"],\n  [\"identifier\",\"You\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"pick\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"up\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"the\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"phone\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"but\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"no\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"one\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"is\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"there\"],\n  [\"text\",\". \"],\n  [\"identifier\",\"You\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"hear\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"a\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"dialtone\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"and\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"then\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"hang\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"up\"],\n  [\"text\",\". \"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"play\"],\n  [\"paren.lparen\",\"(\"],\n  [\"support.function\",\"u\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"DIALTONE\"],\n  [\"paren.rparen\",\"))]\"],\n  [\"text\",\";@\"],\n  [\"support.function\",\"oemit\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"%#=\"],\n  [\"variable\",\"%N\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"picks\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"up\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"the\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"phone\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"but\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"no\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"one\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"is\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"on\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"the\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"other\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"end\"],\n  [\"text\",\".\"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"&\"],\n  [\"identifier\",\"ringfun\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"phone\"],\n  [\"keyword.operator\",\"=\"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"ifelse\"],\n  [\"paren.lparen\",\"(\"],\n  [\"support.function\",\"eq\"],\n  [\"paren.lparen\",\"(\"],\n  [\"support.function\",\"comp\"],\n  [\"paren.lparen\",\"([\"],\n  [\"support.function\",\"u\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"%0\"],\n  [\"keyword.operator\",\"/\"],\n  [\"identifier\",\"ringtone\"],\n  [\"paren.rparen\",\")]\"],\n  [\"text\",\",\"],\n  [\"identifier\",\"off\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\",\"],\n  [\"constant.numeric\",\"0\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\",\"],\n  [\"paren.lparen\",\"[\"],\n  [\"identifier\",\"color\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"black\"],\n  [\"text\",\",\"],\n  [\"identifier\",\"cyan\"],\n  [\"text\",\",\"],\n  [\"identifier\",\"INCOMING\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"CALL\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"FROM\"],\n  [\"text\",\" \"],\n  [\"variable\",\"%1\"],\n  [\"paren.rparen\",\")]\"],\n  [\"text\",\",\"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"play\"],\n  [\"paren.lparen\",\"([\"],\n  [\"support.function\",\"switch\"],\n  [\"paren.lparen\",\"([\"],\n  [\"support.function\",\"u\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"%0\"],\n  [\"keyword.operator\",\"/\"],\n  [\"identifier\",\"ringtone\"],\n  [\"paren.rparen\",\")]\"],\n  [\"text\",\",\"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\",\"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"u\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"%0\"],\n  [\"keyword.operator\",\"/\"],\n  [\"identifier\",\"ringtone1\"],\n  [\"paren.rparen\",\")]\"],\n  [\"text\",\",\"],\n  [\"constant.numeric\",\"2\"],\n  [\"text\",\",\"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"u\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"%0\"],\n  [\"keyword.operator\",\"/\"],\n  [\"identifier\",\"ringtone2\"],\n  [\"paren.rparen\",\")]\"],\n  [\"text\",\",\"],\n  [\"constant.numeric\",\"3\"],\n  [\"text\",\",\"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"u\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"%0\"],\n  [\"keyword.operator\",\"/\"],\n  [\"identifier\",\"ringtone3\"],\n  [\"paren.rparen\",\")]\"],\n  [\"text\",\",\"],\n  [\"constant.numeric\",\"4\"],\n  [\"text\",\",\"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"u\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"%0\"],\n  [\"keyword.operator\",\"/\"],\n  [\"identifier\",\"ringtone4\"],\n  [\"paren.rparen\",\")]\"],\n  [\"text\",\",\"],\n  [\"constant.numeric\",\"5\"],\n  [\"text\",\",\"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"u\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"%0\"],\n  [\"keyword.operator\",\"/\"],\n  [\"identifier\",\"ringtone5\"],\n  [\"paren.rparen\",\")]\"],\n  [\"text\",\",\"],\n  [\"constant.numeric\",\"6\"],\n  [\"text\",\",\"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"u\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"%0\"],\n  [\"keyword.operator\",\"/\"],\n  [\"identifier\",\"ringtone6\"],\n  [\"paren.rparen\",\")]\"],\n  [\"text\",\",\"],\n  [\"constant.numeric\",\"7\"],\n  [\"text\",\",\"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"u\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"%0\"],\n  [\"keyword.operator\",\"/\"],\n  [\"identifier\",\"ringtone7\"],\n  [\"paren.rparen\",\")]\"],\n  [\"text\",\",\"],\n  [\"constant.numeric\",\"8\"],\n  [\"text\",\",\"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"u\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"%0\"],\n  [\"keyword.operator\",\"/\"],\n  [\"identifier\",\"ringtone8\"],\n  [\"paren.rparen\",\")]\"],\n  [\"text\",\",\"],\n  [\"constant.numeric\",\"9\"],\n  [\"text\",\",\"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"u\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"%0\"],\n  [\"keyword.operator\",\"/\"],\n  [\"identifier\",\"ringtone9\"],\n  [\"paren.rparen\",\")]\"],\n  [\"text\",\",\"],\n  [\"identifier\",\"custom\"],\n  [\"text\",\",\"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"u\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"%0\"],\n  [\"keyword.operator\",\"/\"],\n  [\"identifier\",\"customtone\"],\n  [\"paren.rparen\",\")]\"],\n  [\"text\",\",\"],\n  [\"identifier\",\"vibrate\"],\n  [\"text\",\",\"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"u\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"%0\"],\n  [\"keyword.operator\",\"/\"],\n  [\"identifier\",\"vibrate\"],\n  [\"paren.rparen\",\")])])]\"]\n],[\n   \"start\",\n  [\"text\",\"&\"],\n  [\"identifier\",\"ringloop\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"phone\"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\"@\"],\n  [\"support.function\",\"switch\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"u\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"ringstate\"],\n  [\"paren.rparen\",\")]\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\",\"],\n  [\"paren.lparen\",\"{\"],\n  [\"text\",\"@\"],\n  [\"support.function\",\"emit\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"setq\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"q\"],\n  [\"text\",\",\"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"u\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"connecting\"],\n  [\"paren.rparen\",\")])]\"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"set\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"%qq\"],\n  [\"text\",\",\"],\n  [\"identifier\",\"rangs\"],\n  [\"text\",\":\"],\n  [\"constant.numeric\",\"0\"],\n  [\"paren.rparen\",\")]\"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"set\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"%qq\"],\n  [\"text\",\",\"],\n  [\"identifier\",\"mode\"],\n  [\"text\",\":\"],\n  [\"identifier\",\"WFC\"],\n  [\"paren.rparen\",\")]\"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"set\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"%qq\"],\n  [\"text\",\",\"],\n  [\"identifier\",\"INCOMING\"],\n  [\"text\",\":\"],\n  [\"paren.rparen\",\")]\"],\n  [\"text\",\";@\"],\n  [\"support.function\",\"ifelse\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"u\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"%qq\"],\n  [\"keyword.operator\",\"/\"],\n  [\"identifier\",\"HASVMB\"],\n  [\"paren.rparen\",\")]\"],\n  [\"keyword.operator\",\"=\"],\n  [\"paren.lparen\",\"{\"],\n  [\"text\",\"@\"],\n  [\"support.function\",\"tr\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"me\"],\n  [\"keyword.operator\",\"/\"],\n  [\"identifier\",\"ROUTEVMB\"],\n  [\"keyword.operator\",\"=\"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"u\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"connecting\"],\n  [\"paren.rparen\",\")]\"],\n  [\"text\",\";\"],\n  [\"paren.rparen\",\"}\"],\n  [\"text\",\",\"],\n  [\"paren.lparen\",\"{\"],\n  [\"text\",\"@\"],\n  [\"support.function\",\"pemit\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"%#=\"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"u\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"MSGCNC\"],\n  [\"paren.rparen\",\")]\"],\n  [\"text\",\";\"],\n  [\"paren.rparen\",\"}}\"],\n  [\"text\",\",\"],\n  [\"constant.numeric\",\"2\"],\n  [\"text\",\",\"],\n  [\"paren.lparen\",\"{\"],\n  [\"text\",\"@\"],\n  [\"support.function\",\"pemit\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"%#=\"],\n  [\"identifier\",\"The\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"call\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"is\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"connected\"],\n  [\"text\",\".\"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"setq\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"q\"],\n  [\"text\",\",\"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"u\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"CONNECTING\"],\n  [\"paren.rparen\",\")])]\"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"set\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"me\"],\n  [\"text\",\",\"],\n  [\"identifier\",\"CONNECTED\"],\n  [\"text\",\":\"],\n  [\"variable\",\"%qq\"],\n  [\"paren.rparen\",\")]\"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"set\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"%qq\"],\n  [\"text\",\",\"],\n  [\"identifier\",\"CONNECTED\"],\n  [\"text\",\":\"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"num\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"me\"],\n  [\"paren.rparen\",\")])]\"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"set\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"%qq\"],\n  [\"text\",\",\"],\n  [\"identifier\",\"MODE\"],\n  [\"text\",\":\"],\n  [\"identifier\",\"CIP\"],\n  [\"paren.rparen\",\")]\"],\n  [\"text\",\";@\"],\n  [\"support.function\",\"tr\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"me\"],\n  [\"keyword.operator\",\"/\"],\n  [\"identifier\",\"ciploop\"],\n  [\"text\",\";@\"],\n  [\"support.function\",\"tr\"],\n  [\"text\",\" \"],\n  [\"variable\",\"%qq\"],\n  [\"keyword.operator\",\"/\"],\n  [\"identifier\",\"ciploop\"],\n  [\"text\",\";\"],\n  [\"paren.rparen\",\"}\"],\n  [\"text\",\",\"],\n  [\"constant.numeric\",\"3\"],\n  [\"text\",\",\"],\n  [\"paren.lparen\",\"{\"],\n  [\"text\",\"@\"],\n  [\"support.function\",\"emit\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"On\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"fullname\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"me\"],\n  [\"paren.rparen\",\")]\"],\n  [\"text\",\"'\"],\n  [\"support.function\",\"s\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"earpiece\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"you\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"hear\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"a\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"ringing\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"sound\"],\n  [\"text\",\".\"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"play\"],\n  [\"paren.lparen\",\"(\"],\n  [\"support.function\",\"u\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"LINETONE\"],\n  [\"paren.rparen\",\"))]\"],\n  [\"text\",\";@\"],\n  [\"support.function\",\"tr\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"me\"],\n  [\"keyword.operator\",\"/\"],\n  [\"identifier\",\"ringhere\"],\n  [\"text\",\";@\"],\n  [\"identifier\",\"increment\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"u\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"connecting\"],\n  [\"paren.rparen\",\")]\"],\n  [\"keyword.operator\",\"/\"],\n  [\"identifier\",\"RANGS\"],\n  [\"text\",\";@\"],\n  [\"identifier\",\"wait\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"5\"],\n  [\"keyword.operator\",\"=\"],\n  [\"paren.lparen\",\"{\"],\n  [\"text\",\"@\"],\n  [\"support.function\",\"tr\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"me\"],\n  [\"keyword.operator\",\"/\"],\n  [\"identifier\",\"ringloop\"],\n  [\"paren.rparen\",\"}\"],\n  [\"text\",\";\"],\n  [\"paren.rparen\",\"}\"],\n  [\"text\",\",\"],\n  [\"constant.numeric\",\"4\"],\n  [\"text\",\",\"],\n  [\"paren.lparen\",\"{\"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"&\"],\n  [\"identifier\",\"ringstate\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"phone\"],\n  [\"keyword.operator\",\"=\"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"setq\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"q\"],\n  [\"text\",\",\"],\n  [\"support.function\",\"u\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"connecting\"],\n  [\"paren.rparen\",\"))]\"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"setq\"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\",\"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"gt\"],\n  [\"paren.lparen\",\"(\"],\n  [\"support.function\",\"u\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"%qq\"],\n  [\"keyword.operator\",\"/\"],\n  [\"identifier\",\"rangs\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\",\"],\n  [\"support.function\",\"sub\"],\n  [\"paren.lparen\",\"(\"],\n  [\"support.function\",\"u\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"%qq\"],\n  [\"keyword.operator\",\"/\"],\n  [\"identifier\",\"rings\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\",\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\"))])]\"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"setq\"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"2\"],\n  [\"text\",\",\"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"and\"],\n  [\"paren.lparen\",\"(\"],\n  [\"support.function\",\"u\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"is\"],\n  [\"text\",\",\"],\n  [\"support.function\",\"u\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"%qq\"],\n  [\"keyword.operator\",\"/\"],\n  [\"identifier\",\"MODE\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\",\"],\n  [\"identifier\",\"CIP\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\",\"],\n  [\"support.function\",\"u\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"is\"],\n  [\"text\",\",\"],\n  [\"support.function\",\"u\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"%qq\"],\n  [\"keyword.operator\",\"/\"],\n  [\"identifier\",\"INCOMING\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\",\"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"num\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"me\"],\n  [\"paren.rparen\",\")]))]\"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"setq\"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"3\"],\n  [\"text\",\",\"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"u\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"is\"],\n  [\"text\",\",\"],\n  [\"support.function\",\"u\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"%qq\"],\n  [\"keyword.operator\",\"/\"],\n  [\"identifier\",\"MODE\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\",\"],\n  [\"identifier\",\"ICC\"],\n  [\"paren.rparen\",\")])]\"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"ifelse\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"%q1\"],\n  [\"text\",\",\"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\",\"],\n  [\"support.function\",\"ifelse\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"%q2\"],\n  [\"text\",\",\"],\n  [\"constant.numeric\",\"2\"],\n  [\"text\",\",\"],\n  [\"support.function\",\"ifelse\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"%q3\"],\n  [\"text\",\",\"],\n  [\"constant.numeric\",\"3\"],\n  [\"text\",\",\"],\n  [\"constant.numeric\",\"4\"],\n  [\"paren.rparen\",\")))]\"]\n],[\n   \"start\",\n  [\"text\",\";\"],\n  [\"identifier\",\"comment\"]\n],[\n   \"start\",\n  [\"text\",\"@@\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"comment\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"keyword\",\"say\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"support.function\",\"time\"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\")]\"]\n],[\n   \"start\"\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_mysql.json",
    "content": "[[\n   \"start\",\n  [\"identifier\",\"TODO\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_nix.json",
    "content": "[[\n   \"start\",\n  [\"text\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"comment\",\"# Name of our deployment\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"identifier\",\"network\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"description\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.assignment.nix\",\"=\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"HelloWorld\\\"\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"comment\",\"# Enable rolling back to previous versions of our infrastructure\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"identifier\",\"network\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"enableRollback\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.assignment.nix\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.language.nix\",\"true\"],\n  [\"text\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"comment\",\"# It consists of a single server named 'helloserver'\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"identifier\",\"helloserver\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.assignment.nix\",\"=\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"comment\",\"# Every server gets passed a few arguments, including a reference\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"comment\",\"# to nixpkgs (pkgs)\"]\n],[\n   \"start\",\n  [\"text\",\"    { \"],\n  [\"identifier\",\"config\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"pkgs\"],\n  [\"text\",\", ... }:\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword.declaration.nix\",\"let\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"comment\",\"# We import our custom packages from ./default passing pkgs as argument\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"identifier\",\"packages\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.assignment.nix\",\"=\"],\n  [\"text\",\" \"],\n  [\"keyword.control.nix\",\"import\"],\n  [\"text\",\" ./\"],\n  [\"identifier\",\"default\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"nix\"],\n  [\"text\",\" { \"],\n  [\"identifier\",\"pkgs\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.assignment.nix\",\"=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"pkgs\"],\n  [\"text\",\"; };\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"comment\",\"# This is the nodejs version specified in default.nix\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"identifier\",\"nodejs\"],\n  [\"text\",\"   \"],\n  [\"keyword.operator.assignment.nix\",\"=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"packages\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"nodejs\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"comment\",\"# And this is the application we'd like to deploy\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"identifier\",\"app\"],\n  [\"text\",\"      \"],\n  [\"keyword.operator.assignment.nix\",\"=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"packages\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"app\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword.declaration.nix\",\"in\"]\n],[\n   \"start\",\n  [\"text\",\"    {\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"comment\",\"# We'll be running our application on port 8080, because a regular\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"comment\",\"# user cannot bind to port 80\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"comment\",\"# Then, using some iptables magic we'll forward traffic designated to port 80 to 8080\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"identifier\",\"networking\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"firewall\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"enable\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.assignment.nix\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.language.nix\",\"true\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"comment\",\"# We will open up port 22 (SSH) as well otherwise we're locking ourselves out\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"identifier\",\"networking\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"firewall\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"allowedTCPPorts\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.assignment.nix\",\"=\"],\n  [\"text\",\" [ \"],\n  [\"constant.numeric\",\"80\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"8080\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"22\"],\n  [\"text\",\" ];\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"identifier\",\"networking\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"firewall\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"allowPing\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.assignment.nix\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.language.nix\",\"true\"],\n  [\"text\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"comment\",\"# Port forwarding using iptables\"]\n],[\n   \"qqdoc\",\n  [\"text\",\"      \"],\n  [\"identifier\",\"networking\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"firewall\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"extraCommands\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.assignment.nix\",\"=\"],\n  [\"text\",\" \"],\n  [\"string\",\"''\"]\n],[\n   \"qqdoc\",\n  [\"string\",\"        iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080\"]\n],[\n   \"start\",\n  [\"string\",\"      ''\"],\n  [\"text\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"comment\",\"# To run our node.js program we're going to use a systemd service\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"comment\",\"# We can configure the service to automatically start on boot and to restart\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"comment\",\"# the process in case it crashes\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"identifier\",\"systemd\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"services\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"helloserver\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.assignment.nix\",\"=\"],\n  [\"text\",\" {\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"identifier\",\"description\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.assignment.nix\",\"=\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"Hello world application\\\"\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"comment\",\"# Start the service after the network is available\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"identifier\",\"after\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.assignment.nix\",\"=\"],\n  [\"text\",\" [ \"],\n  [\"string\",\"\\\"network.target\\\"\"],\n  [\"text\",\" ];\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"comment\",\"# We're going to run it on port 8080 in production\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"identifier\",\"environment\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.assignment.nix\",\"=\"],\n  [\"text\",\" { \"],\n  [\"identifier\",\"PORT\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.assignment.nix\",\"=\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"8080\\\"\"],\n  [\"text\",\"; };\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"identifier\",\"serviceConfig\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.assignment.nix\",\"=\"],\n  [\"text\",\" {\"]\n],[\n   \"start\",\n  [\"text\",\"          \"],\n  [\"comment\",\"# The actual command to run\"]\n],[\n   \"start\",\n  [\"text\",\"          \"],\n  [\"identifier\",\"ExecStart\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.assignment.nix\",\"=\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"\"],\n  [\"constant.language.escape\",\"${\"],\n  [\"identifier\",\"nodejs\"],\n  [\"constant.language.escape\",\"}\"],\n  [\"string\",\"/bin/node \"],\n  [\"constant.language.escape\",\"${\"],\n  [\"identifier\",\"app\"],\n  [\"constant.language.escape\",\"}\"],\n  [\"string\",\"/server.js\\\"\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"          \"],\n  [\"comment\",\"# For security reasons we'll run this process as a special 'nodejs' user\"]\n],[\n   \"start\",\n  [\"text\",\"          \"],\n  [\"identifier\",\"User\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.assignment.nix\",\"=\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"nodejs\\\"\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"          \"],\n  [\"identifier\",\"Restart\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.assignment.nix\",\"=\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"always\\\"\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"        };\"]\n],[\n   \"start\",\n  [\"text\",\"      };\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"comment\",\"# And lastly we ensure the user we run our application as is created\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"identifier\",\"users\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"extraUsers\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.assignment.nix\",\"=\"],\n  [\"text\",\" {\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"identifier\",\"nodejs\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.assignment.nix\",\"=\"],\n  [\"text\",\" { };\"]\n],[\n   \"start\",\n  [\"text\",\"      };\"]\n],[\n   \"start\",\n  [\"text\",\"    };\"]\n],[\n   \"start\",\n  [\"text\",\"}\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_nsis.json",
    "content": "[[\n   \"punctuation.definition.comment.nsis\",\n  [\"punctuation.definition.comment.nsis\",\"/*\"]\n],[\n   \"punctuation.definition.comment.nsis\",\n  [\"comment.block.nsis\",\"  NSIS Mode\"]\n],[\n   \"punctuation.definition.comment.nsis\",\n  [\"comment.block.nsis\",\"  for Ace\"]\n],[\n   \"start\",\n  [\"punctuation.definition.comment.nsis\",\"*/\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"punctuation.definition.comment.nsis\",\";\"],\n  [\"comment.line.nsis\",\" Includes\"]\n],[\n   \"start\",\n  [\"keyword.compiler.nsis\",\"!include\"],\n  [\"text\",\" MUI2.nsh\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"punctuation.definition.comment.nsis\",\";\"],\n  [\"comment.line.nsis\",\" Settings\"]\n],[\n   \"start\",\n  [\"keyword.command.nsis\",\"Name\"],\n  [\"text\",\" \"],\n  [\"punctuation.definition.string.begin.nsis\",\"\\\"\"],\n  [\"string.quoted.double.nsis\",\"installer_name\"],\n  [\"punctuation.definition.string.end.nsis\",\"\\\"\"]\n],[\n   \"start\",\n  [\"keyword.command.nsis\",\"OutFile\"],\n  [\"text\",\" \"],\n  [\"punctuation.definition.string.begin.nsis\",\"\\\"\"],\n  [\"string.quoted.double.nsis\",\"installer_name.exe\"],\n  [\"punctuation.definition.string.end.nsis\",\"\\\"\"]\n],[\n   \"start\",\n  [\"keyword.command.nsis\",\"RequestExecutionLevel\"],\n  [\"text\",\" \"],\n  [\"constant.language.option.nsis\",\"user\"]\n],[\n   \"start\",\n  [\"keyword.command.nsis\",\"CRCCheck\"],\n  [\"text\",\" \"],\n  [\"constant.language.boolean.true.nsis\",\"on\"]\n],[\n   \"start\",\n  [\"keyword.control.nsis\",\"!ifdef\"],\n  [\"text\",\" x64\"]\n],[\n   \"start\",\n  [\"keyword.command.nsis\",\"  InstallDir\"],\n  [\"text\",\" \"],\n  [\"punctuation.definition.string.begin.nsis\",\"\\\"\"],\n  [\"string.quoted.double.nsis\",\"$PROGRAMFILES64\\\\installer_name\"],\n  [\"punctuation.definition.string.end.nsis\",\"\\\"\"]\n],[\n   \"start\",\n  [\"keyword.control.nsis\",\"!else\"]\n],[\n   \"start\",\n  [\"keyword.command.nsis\",\"  InstallDir\"],\n  [\"text\",\" \"],\n  [\"punctuation.definition.string.begin.nsis\",\"\\\"\"],\n  [\"string.quoted.double.nsis\",\"$PROGRAMFILES\\\\installer_name\"],\n  [\"punctuation.definition.string.end.nsis\",\"\\\"\"]\n],[\n   \"start\",\n  [\"keyword.control.nsis\",\"!endif\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"punctuation.definition.comment.nsis\",\";\"],\n  [\"comment.line.nsis\",\" Pages\"]\n],[\n   \"start\",\n  [\"keyword.compiler.nsis\",\"!insertmacro\"],\n  [\"text\",\" MUI_PAGE_INSTFILES\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"punctuation.definition.comment.nsis\",\";\"],\n  [\"comment.line.nsis\",\" Sections\"]\n],[\n   \"start\",\n  [\"support.function.nsis\",\"Section\"],\n  [\"text\",\" \"],\n  [\"punctuation.definition.string.begin.nsis\",\"\\\"\"],\n  [\"string.quoted.double.nsis\",\"section_name\"],\n  [\"punctuation.definition.string.end.nsis\",\"\\\"\"],\n  [\"text\",\" section_index\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"punctuation.definition.comment.nsis\",\"#\"],\n  [\"comment.line.nsis\",\" your code here\"]\n],[\n   \"start\",\n  [\"support.function.nsis\",\"SectionEnd\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"punctuation.definition.comment.nsis\",\";\"],\n  [\"comment.line.nsis\",\" Functions\"]\n],[\n   \"start\",\n  [\"support.function.nsis\",\"Function\"],\n  [\"text\",\" .onInit\"]\n],[\n   \"start\",\n  [\"keyword.command.nsis\",\"  MessageBox\"],\n  [\"text\",\" \"],\n  [\"constant.nsis\",\"MB_OK\"],\n  [\"text\",\" \"],\n  [\"punctuation.definition.string.begin.nsis\",\"\\\"\"],\n  [\"string.quoted.double.nsis\",\"Here comes a\"],\n  [\"constant.character.escape.nsis\",\"$\\\\n$\\\\r\"],\n  [\"string.quoted.double.nsis\",\"line-break!\"],\n  [\"punctuation.definition.string.end.nsis\",\"\\\"\"]\n],[\n   \"start\",\n  [\"support.function.nsis\",\"FunctionEnd\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_objectivec.json",
    "content": "[[\n   \"start\",\n  [\"storage.type.objc\",\"@\"],\n  [\"punctuation.definition.storage.type.objc\",\"protocol\"],\n  [\"entity.name.type.objc\",\" Printing\"],\n  [\"text\",\": \"],\n  [\"entity.other.inherited-class.objc\",\"someParent\"]\n],[\n   \"start\",\n  [\"meta.function.objc\",\"-\"],\n  [\"paren.lparen\",\"(\"],\n  [\"storage.type\",\"void\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"print\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"storage.type.objc\",\"@end\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"storage.type.objc\",\"@\"],\n  [\"punctuation.definition.storage.type.objc\",\"interface\"],\n  [\"entity.name.type.objc\",\" Fraction\"],\n  [\"text\",\": \"],\n  [\"entity.other.inherited-class.objc\",\"NSObject\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"<\"],\n  [\"identifier\",\"Printing\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"support.class.cocoa\",\"NSCopying\"],\n  [\"keyword.operator\",\">\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"storage.type\",\"int\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"numerator\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"storage.type\",\"int\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"denominator\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"storage.type.objc\",\"@end\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"string.begin.objc\",\"@\\\"\"],\n  [\"string\",\"blah\"],\n  [\"invalid.illegal.unknown-escape.objc\",\"\\\\8\"],\n  [\"punctuation.definition.string.end\",\"\\\"\"],\n  [\"text\",\" \"],\n  [\"string.begin.objc\",\"@\\\"\"],\n  [\"string\",\"a\"],\n  [\"constant.character.escape.objc\",\"\\\\222\"],\n  [\"string\",\"sd\"],\n  [\"invalid.illegal.unknown-escape.objc\",\"\\\\d\"],\n  [\"punctuation.definition.string.end\",\"\\\"\"],\n  [\"text\",\" \"],\n  [\"string.begin.objc\",\"@\\\"\"],\n  [\"constant.character.escape.objc\",\"\\\\f\"],\n  [\"string\",\"aw\"],\n  [\"constant.character.escape.objc\",\"\\\\\\\"\\\\?\"],\n  [\"string\",\" \"],\n  [\"constant.character.escape.objc\",\"\\\\'\"],\n  [\"string\",\" \"],\n  [\"constant.character.escape.objc\",\"\\\\4\"],\n  [\"string\",\" n\"],\n  [\"constant.character.escape.objc\",\"\\\\\\\\\"],\n  [\"punctuation.definition.string.end\",\"\\\"\"],\n  [\"text\",\" \"],\n  [\"string.begin.objc\",\"@\\\"\"],\n  [\"constant.character.escape.objc\",\"\\\\56\"],\n  [\"punctuation.definition.string.end\",\"\\\"\"]\n],[\n   \"start\",\n  [\"string.begin.objc\",\"@\\\"\"],\n  [\"constant.character.escape.objc\",\"\\\\xSF42\"],\n  [\"punctuation.definition.string.end\",\"\\\"\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"meta.function.objc\",\"-\"],\n  [\"paren.lparen\",\"(\"],\n  [\"support.class.cocoa\",\"NSDecimalNumber\"],\n  [\"keyword.operator\",\"*\"],\n  [\"paren.rparen\",\")\"],\n  [\"identifier\",\"addCount\"],\n  [\"punctuation.operator\",\":\"],\n  [\"paren.lparen\",\"(\"],\n  [\"storage.type.id.objc\",\"id\"],\n  [\"paren.rparen\",\")\"],\n  [\"identifier\",\"addObject\"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword.control\",\"return\"],\n  [\"text\",\" \"],\n  [\"punctuation.section.scope.begin.objc\",\"[\"],\n  [\"identifier\",\"count\"],\n  [\"text\",\" \"],\n  [\"support.function.any-method.objc\",\"decimalNumberByAdding:\"],\n  [\"identifier\",\"addObject\"],\n  [\"punctuation.operator\",\".\"],\n  [\"identifier\",\"count\"],\n  [\"paren.rparen\",\"]\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword.control.macro.objc\",\"NS_DURING\"],\n  [\"text\",\"  \"],\n  [\"keyword.control.macro.objc\",\"NS_HANDLER\"],\n  [\"text\",\" \"],\n  [\"keyword.control.macro.objc\",\"NS_ENDHANDLER\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"punctuation.definition.keyword.objc\",\"@\"],\n  [\"keyword.control.exception.objc\",\"try\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"   \"],\n  [\"keyword.control\",\"if\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"argc\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\">\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\"    \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"punctuation.definition.keyword.objc\",\"@\"],\n  [\"keyword.control.exception.objc\",\"throw\"],\n  [\"text\",\" \"],\n  [\"punctuation.section.scope.begin.objc\",\"[\"],\n  [\"support.class.cocoa\",\"NSException\"],\n  [\"text\",\" \"],\n  [\"support.function.any-method.objc\",\"exceptionWithName:\"],\n  [\"string.begin.objc\",\"@\\\"\"],\n  [\"string\",\"Throwing a test exception\"],\n  [\"punctuation.definition.string.end\",\"\\\"\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"reason\"],\n  [\"punctuation.operator\",\":\"],\n  [\"string.begin.objc\",\"@\\\"\"],\n  [\"string\",\"Testing the @throw directive.\"],\n  [\"punctuation.definition.string.end\",\"\\\"\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"userInfo\"],\n  [\"punctuation.operator\",\":\"],\n  [\"constant.language.objc\",\"nil\"],\n  [\"paren.rparen\",\"]\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"   \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"],\n  [\"text\",\" \"]\n],[\n   \"start\",\n  [\"punctuation.definition.keyword.objc\",\"@\"],\n  [\"keyword.control.exception.objc\",\"catch\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"storage.type.id.objc\",\"id\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"theException\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"support.function.cocoa\",\"NSLog\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string.begin.objc\",\"@\\\"\"],\n  [\"string\",\"%@\"],\n  [\"punctuation.definition.string.end\",\"\\\"\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"theException\"],\n  [\"paren.rparen\",\")\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"result\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\"  \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"],\n  [\"text\",\" \"]\n],[\n   \"start\",\n  [\"punctuation.definition.keyword.objc\",\"@\"],\n  [\"keyword.control.exception.objc\",\"finally\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"support.function.cocoa\",\"NSLog\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string.begin.objc\",\"@\\\"\"],\n  [\"string\",\"This always happens.\"],\n  [\"punctuation.definition.string.end\",\"\\\"\"],\n  [\"paren.rparen\",\")\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"result\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"2\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"punctuation.definition.storage.modifier.objc\",\"@\"],\n  [\"storage.modifier.objc\",\"synchronized\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"lock\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"support.function.cocoa\",\"NSLog\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string.begin.objc\",\"@\\\"\"],\n  [\"string\",\"Hello World\"],\n  [\"punctuation.definition.string.end\",\"\\\"\"],\n  [\"paren.rparen\",\")\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"storage.type\",\"struct\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"],\n  [\"text\",\" \"],\n  [\"punctuation.definition.keyword.objc\",\"@\"],\n  [\"keyword.other.objc\",\"defs\"],\n  [\"paren.lparen\",\"(\"],\n  [\"text\",\" \"],\n  [\"support.class.cocoa\",\"NSObject\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"storage.type\",\"char\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"*\"],\n  [\"identifier\",\"enc1\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"punctuation.definition.keyword.objc\",\"@\"],\n  [\"keyword.other.objc\",\"encode\"],\n  [\"paren.lparen\",\"(\"],\n  [\"storage.type\",\"int\"],\n  [\"paren.rparen\",\")\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"         \"],\n  [\"storage.type.objc\",\"IBOutlet\"],\n  [\"keyword.operator\",\"|\"],\n  [\"storage.type.objc\",\"IBAction\"],\n  [\"keyword.operator\",\"|\"],\n  [\"storage.type.objc\",\"BOOL\"],\n  [\"keyword.operator\",\"|\"],\n  [\"storage.type.objc\",\"SEL\"],\n  [\"keyword.operator\",\"|\"],\n  [\"storage.type.id.objc\",\"id\"],\n  [\"keyword.operator\",\"|\"],\n  [\"storage.type.objc\",\"unichar\"],\n  [\"keyword.operator\",\"|\"],\n  [\"storage.type.objc\",\"IMP\"],\n  [\"keyword.operator\",\"|\"],\n  [\"storage.type.objc\",\"Class\"],\n  [\"text\",\" \"]\n],[\n   \"start\"\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\" \"],\n  [\"punctuation.definition.storage.type.objc\",\"@\"],\n  [\"storage.type.objc\",\"class\"],\n  [\"text\",\" \"],\n  [\"punctuation.definition.storage.type.objc\",\"@\"],\n  [\"storage.type.objc\",\"protocol\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"punctuation.definition.storage.modifier.objc\",\"@\"],\n  [\"storage.modifier.objc\",\"public\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"comment\",\"// instance variables\"]\n],[\n   \"start\",\n  [\"punctuation.definition.storage.modifier.objc\",\"@\"],\n  [\"storage.modifier.objc\",\"package\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"comment\",\"// instance variables\"]\n],[\n   \"start\",\n  [\"punctuation.definition.storage.modifier.objc\",\"@\"],\n  [\"storage.modifier.objc\",\"protected\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"comment\",\"// instance variables\"]\n],[\n   \"start\",\n  [\"punctuation.definition.storage.modifier.objc\",\"@\"],\n  [\"storage.modifier.objc\",\"private\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"comment\",\"// instance variables\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"constant.language.objc\",\"YES\"],\n  [\"text\",\" \"],\n  [\"constant.language.objc\",\"NO\"],\n  [\"text\",\" \"],\n  [\"constant.language.objc\",\"Nil\"],\n  [\"text\",\" \"],\n  [\"constant.language.objc\",\"nil\"]\n],[\n   \"start\",\n  [\"support.variable.foundation\",\"NSApp\"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"support.function.cocoa.leopard\",\"NSRectToCGRect\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"Protocol\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"ProtocolFromString\"],\n  [\"punctuation.operator\",\":\"],\n  [\"string.start\",\"\\\"\"],\n  [\"string\",\"NSTableViewDelegate\"],\n  [\"string.end\",\"\\\"\"],\n  [\"paren.rparen\",\"))\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"punctuation.section.scope.begin.objc\",\"[\"],\n  [\"identifier\",\"SPPoint\"],\n  [\"text\",\" \"],\n  [\"support.function.any-method.objc\",\"pointFromCGPoint:\"],\n  [\"identifier\",\"self\"],\n  [\"punctuation.operator\",\".\"],\n  [\"identifier\",\"position\"],\n  [\"paren.rparen\",\"]\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"support.function.cocoa\",\"NSRoundDownToMultipleOfPageSize\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"#import\"],\n  [\"constant.other\",\" <stdio.h>\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"storage.type\",\"int\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"main\"],\n  [\"paren.lparen\",\"(\"],\n  [\"text\",\" \"],\n  [\"storage.type\",\"int\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"argc\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"storage.modifier\",\"const\"],\n  [\"text\",\" \"],\n  [\"storage.type\",\"char\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"*\"],\n  [\"identifier\",\"argv\"],\n  [\"punctuation.section.scope.begin.objc\",\"[\"],\n  [\"punctuation.section.scope.end.objc\",\"]\"],\n  [\"text\",\" \"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"support.function.C99.c\",\"printf\"],\n  [\"paren.lparen\",\"(\"],\n  [\"text\",\" \"],\n  [\"string.start\",\"\\\"\"],\n  [\"string\",\"hello world\"],\n  [\"constant.language.escape\",\"\\\\n\"],\n  [\"string.end\",\"\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.rparen\",\")\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword.control\",\"return\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"support.class.cocoa\",\"NSChangeSpelling\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"string.begin.objc\",\"@\\\"\"],\n  [\"string\",\"0 != SUBQUERY(image, $x, 0 != SUBQUERY($x.bookmarkItems, $y, $y.@count == 0).@count).@count\"],\n  [\"punctuation.definition.string.end\",\"\\\"\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"punctuation.definition.storage.type.objc\",\"@selector\"],\n  [\"punctuation\",\"(\"],\n  [\"support.function.any-method.name-of-parameter.objc\",\"lowercaseString\"],\n  [\"punctuation\",\")\"],\n  [\"text\",\" \"],\n  [\"punctuation.definition.storage.type.objc\",\"@selector\"],\n  [\"punctuation\",\"(\"],\n  [\"support.function.any-method.name-of-parameter.objc\",\"uppercaseString:\"],\n  [\"punctuation\",\")\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"identifier\",\"NSFetchRequest\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"*\"],\n  [\"identifier\",\"localRequest\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"punctuation.section.scope.begin.objc\",\"[[\"],\n  [\"identifier\",\"NSFetchRequest\"],\n  [\"text\",\" \"],\n  [\"support.function.any-method.objc\",\"alloc\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"init\"],\n  [\"paren.rparen\",\"]\"],\n  [\"punctuation.operator\",\";\"],\n  [\"text\",\"  \"]\n],[\n   \"start\",\n  [\"identifier\",\"localRequest\"],\n  [\"punctuation.operator\",\".\"],\n  [\"identifier\",\"entity\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"punctuation.section.scope.begin.objc\",\"[\"],\n  [\"identifier\",\"NSEntityDescription\"],\n  [\"text\",\" \"],\n  [\"support.function.any-method.objc\",\"entityForName:\"],\n  [\"string.begin.objc\",\"@\\\"\"],\n  [\"string\",\"VNSource\"],\n  [\"punctuation.definition.string.end\",\"\\\"\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"inManagedObjectContext\"],\n  [\"punctuation.operator\",\":\"],\n  [\"identifier\",\"context\"],\n  [\"paren.rparen\",\"]\"],\n  [\"punctuation.operator\",\";\"],\n  [\"text\",\"  \"]\n],[\n   \"start\",\n  [\"identifier\",\"localRequest\"],\n  [\"punctuation.operator\",\".\"],\n  [\"identifier\",\"sortDescriptors\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"punctuation.section.scope.begin.objc\",\"[\"],\n  [\"support.class.cocoa\",\"NSArray\"],\n  [\"text\",\" \"],\n  [\"support.function.any-method.objc\",\"arrayWithObject:\"],\n  [\"punctuation.section.scope.begin.objc\",\"[\"],\n  [\"support.class.cocoa\",\"NSSortDescriptor\"],\n  [\"text\",\" \"],\n  [\"support.function.any-method.objc\",\"sortDescriptorWithKey:\"],\n  [\"string.begin.objc\",\"@\\\"\"],\n  [\"string\",\"resolution\"],\n  [\"punctuation.definition.string.end\",\"\\\"\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"ascending\"],\n  [\"punctuation.operator\",\":\"],\n  [\"constant.language.objc\",\"YES\"],\n  [\"paren.rparen\",\"]]\"],\n  [\"punctuation.operator\",\";\"],\n  [\"text\",\"  \"]\n],[\n   \"start\",\n  [\"support.class.cocoa\",\"NSPredicate\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"*\"],\n  [\"identifier\",\"predicate\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"punctuation.section.scope.begin.objc\",\"[\"],\n  [\"support.class.cocoa\",\"NSPredicate\"],\n  [\"text\",\" \"],\n  [\"support.function.any-method.objc\",\"predicateWithFormat:\"],\n  [\"string.begin.objc\",\"@\\\"\"],\n  [\"string\",\"0 != SUBQUERY(image, $x, 0 != SUBQUERY($x.bookmarkItems, $y, $y.@count == 0).@count).@count\"],\n  [\"punctuation.definition.string.end\",\"\\\"\"],\n  [\"paren.rparen\",\"]\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"punctuation.section.scope.begin.objc\",\"[\"],\n  [\"support.class.cocoa\",\"NSPredicate\"],\n  [\"text\",\" \"],\n  [\"support.function.any-method.objc\",\"predicateWithFormat:\"],\n  [\"paren.rparen\",\"]\"]\n],[\n   \"start\",\n  [\"support.class.cocoa\",\"NSString\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"*\"],\n  [\"identifier\",\"predicateString\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"punctuation.section.scope.begin.objc\",\"[\"],\n  [\"support.class.cocoa\",\"NSString\"],\n  [\"text\",\" \"],\n  [\"support.function.any-method.objc\",\"stringWithFormat:\"],\n  [\"string.begin.objc\",\"@\\\"\"],\n  [\"string\",\"SELF beginsWith[cd] %@\"],\n  [\"punctuation.definition.string.end\",\"\\\"\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"searchString\"],\n  [\"paren.rparen\",\"]\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"support.class.cocoa\",\"NSPredicate\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"*\"],\n  [\"identifier\",\"pred\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"punctuation.section.scope.begin.objc\",\"[\"],\n  [\"support.class.cocoa\",\"NSPredicate\"],\n  [\"text\",\" \"],\n  [\"support.function.any-method.objc\",\"predicateWithFormat:\"],\n  [\"identifier\",\"predicateString\"],\n  [\"paren.rparen\",\"]\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"support.class.cocoa\",\"NSArray\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"*\"],\n  [\"identifier\",\"filteredKeys\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"punctuation.section.scope.begin.objc\",\"[[\"],\n  [\"identifier\",\"myMutableDictionary\"],\n  [\"text\",\" \"],\n  [\"support.function.any-method.objc\",\"allKeys\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"filteredArrayUsingPredicate\"],\n  [\"punctuation.operator\",\":\"],\n  [\"identifier\",\"pred\"],\n  [\"paren.rparen\",\"]\"],\n  [\"punctuation.operator\",\";\"],\n  [\"text\",\" \"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"identifier\",\"localRequest\"],\n  [\"punctuation.operator\",\".\"],\n  [\"identifier\",\"predicate\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"punctuation.section.scope.begin.objc\",\"[\"],\n  [\"support.class.cocoa\",\"NSPredicate\"],\n  [\"text\",\" \"],\n  [\"support.function.any-method.objc\",\"predicateWithFormat:\"],\n  [\"string.begin.objc\",\"@\\\"\"],\n  [\"string\",\"whichChart = %@\"],\n  [\"punctuation.definition.string.end\",\"\\\"\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"argumentArray\"],\n  [\"punctuation.operator\",\":\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"listChartToDownload\"],\n  [\"paren.rparen\",\"]\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"identifier\",\"localRequest\"],\n  [\"punctuation.operator\",\".\"],\n  [\"identifier\",\"fetchBatchSize\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"100\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"identifier\",\"arrayRequest\"],\n  [\"text\",\"    \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"punctuation.section.scope.begin.objc\",\"[\"],\n  [\"identifier\",\"context\"],\n  [\"text\",\"  \"],\n  [\"support.function.any-method.objc\",\"executeFetchRequest:\"],\n  [\"identifier\",\"localRequest\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"error\"],\n  [\"punctuation.operator\",\":\"],\n  [\"keyword.operator\",\"&\"],\n  [\"identifier\",\"error1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"punctuation.section.scope.begin.objc\",\"[\"],\n  [\"identifier\",\"localRequest\"],\n  [\"text\",\"   \"],\n  [\"support.function.any-method.objc\",\"release\"],\n  [\"paren.rparen\",\"]\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"#ifndef\"],\n  [\"text\",\" \"],\n  [\"constant.language.objc\",\"Nil\"]\n],[\n   \"start\",\n  [\"keyword\",\"#define\"],\n  [\"constant.other\",\" Nil __DARWIN_NULL   \"],\n  [\"comment\",\"/* id of Nil class */\"]\n],[\n   \"start\",\n  [\"keyword\",\"#endif\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"storage.type.objc\",\"@implementation\"],\n  [\"entity.name.type.objc\",\" MyObject\"]\n],[\n   \"start\",\n  [\"meta.function.objc\",\"- \"],\n  [\"paren.lparen\",\"(\"],\n  [\"storage.type\",\"unsigned\"],\n  [\"text\",\" \"],\n  [\"storage.type\",\"int\"],\n  [\"paren.rparen\",\")\"],\n  [\"identifier\",\"areaOfWidth\"],\n  [\"punctuation.operator\",\":\"],\n  [\"paren.lparen\",\"(\"],\n  [\"storage.type\",\"unsigned\"],\n  [\"text\",\" \"],\n  [\"storage.type\",\"int\"],\n  [\"paren.rparen\",\")\"],\n  [\"identifier\",\"width\"]\n],[\n   \"start\",\n  [\"text\",\"                \"],\n  [\"identifier\",\"height\"],\n  [\"punctuation.operator\",\":\"],\n  [\"paren.lparen\",\"(\"],\n  [\"storage.type\",\"unsigned\"],\n  [\"text\",\" \"],\n  [\"storage.type\",\"int\"],\n  [\"paren.rparen\",\")\"],\n  [\"identifier\",\"height\"]\n],[\n   \"start\",\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword.control\",\"return\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"width\"],\n  [\"keyword.operator\",\"*\"],\n  [\"identifier\",\"height\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"storage.type.objc\",\"@end\"]\n],[\n   \"start\"\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_ocaml.json",
    "content": "[[\n   \"comment\",\n  [\"comment\",\"(*\"]\n],[\n   \"comment\",\n  [\"comment\",\" * Example of early return implementation taken from\"]\n],[\n   \"comment\",\n  [\"comment\",\" * http://ocaml.janestreet.com/?q=node/91\"]\n],[\n   \"start\",\n  [\"comment\",\" *)\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"let\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"with_return\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"keyword\",\"type\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"t\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"f\"],\n  [\"text\",\" : \"],\n  [\"identifier\",\"_\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"t\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"let\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"module\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"M\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"]\n],[\n   \"start\",\n  [\"text\",\"     \"],\n  [\"keyword\",\"struct\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"exception\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Return\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"of\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"t\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"end\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"in\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"let\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"return\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"return\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"keyword\",\"fun\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"x\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"raise\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"M\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"Return\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"x\"],\n  [\"paren.rparen\",\"))\"],\n  [\"text\",\"; \"],\n  [\"paren.rparen\",\"}\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"in\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"try\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"f\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"return\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"with\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"M\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"Return\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"x\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"x\"]\n],[\n   \"start\"\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"comment\",\"(* Function that uses the 'early return' functionality provided by `with_return` *)\"]\n],[\n   \"start\",\n  [\"keyword\",\"let\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"sum_until_first_negative\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"list\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"identifier\",\"with_return\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"keyword\",\"fun\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"r\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"support.function\",\"List\"],\n  [\"text\",\".\"],\n  [\"support.function\",\"fold\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"list\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"~\"],\n  [\"support.function\",\"init\"],\n  [\"text\",\":\"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"~\"],\n  [\"identifier\",\"f\"],\n  [\"text\",\":\"],\n  [\"paren.lparen\",\"(\"],\n  [\"keyword\",\"fun\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"acc\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"x\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"x\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\">=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"then\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"acc\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"x\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"else\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"r\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"return\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"acc\"],\n  [\"paren.rparen\",\"))\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_pascal.json",
    "content": "[[\n   \"punctuation.definition.comment.pascal\",\n  [\"punctuation.definition.comment.pascal\",\"(*\"],\n  [\"comment.block.pascal.one\",\"****************************************************************************\"]\n],[\n   \"punctuation.definition.comment.pascal\",\n  [\"comment.block.pascal.one\",\" * A simple bubble sort program.  Reads integers, one per line, and prints   *\"]\n],[\n   \"punctuation.definition.comment.pascal\",\n  [\"comment.block.pascal.one\",\" * them out in sorted order.  Blows up if there are more than 49.            *\"]\n],[\n   \"start\",\n  [\"comment.block.pascal.one\",\" ****************************************************************************\"],\n  [\"punctuation.definition.comment.pascal\",\"*)\"]\n],[\n   \"start\",\n  [\"keyword.control.pascal\",\"PROGRAM\"],\n  [\"text\",\" Sort(input\"],\n  [\"keyword.operator\",\",\"],\n  [\"text\",\" output)\"],\n  [\"keyword.operator\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword.control.pascal\",\"CONST\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"punctuation.definition.comment.pascal\",\"(*\"],\n  [\"comment.block.pascal.one\",\" Max array size. \"],\n  [\"punctuation.definition.comment.pascal\",\"*)\"]\n],[\n   \"start\",\n  [\"text\",\"        MaxElts \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.pascal\",\"50\"],\n  [\"keyword.operator\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword.control.pascal\",\"TYPE\"],\n  [\"text\",\" \"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"punctuation.definition.comment.pascal\",\"(*\"],\n  [\"comment.block.pascal.one\",\" Type of the element array. \"],\n  [\"punctuation.definition.comment.pascal\",\"*)\"]\n],[\n   \"start\",\n  [\"text\",\"        IntArrType \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"keyword.control.pascal\",\"ARRAY\"],\n  [\"text\",\" [\"],\n  [\"constant.numeric.pascal\",\"1\"],\n  [\"text\",\"..MaxElts] \"],\n  [\"keyword.control.pascal\",\"OF\"],\n  [\"text\",\" Integer\"],\n  [\"keyword.operator\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword.control.pascal\",\"VAR\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"punctuation.definition.comment.pascal\",\"(*\"],\n  [\"comment.block.pascal.one\",\" Indexes, exchange temp, array size. \"],\n  [\"punctuation.definition.comment.pascal\",\"*)\"]\n],[\n   \"start\",\n  [\"text\",\"        i\"],\n  [\"keyword.operator\",\",\"],\n  [\"text\",\" j\"],\n  [\"keyword.operator\",\",\"],\n  [\"text\",\" tmp\"],\n  [\"keyword.operator\",\",\"],\n  [\"text\",\" size: integer\"],\n  [\"keyword.operator\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"punctuation.definition.comment.pascal\",\"(*\"],\n  [\"comment.block.pascal.one\",\" Array of ints \"],\n  [\"punctuation.definition.comment.pascal\",\"*)\"]\n],[\n   \"start\",\n  [\"text\",\"        arr: IntArrType\"],\n  [\"keyword.operator\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"punctuation.definition.comment.pascal\",\"(*\"],\n  [\"comment.block.pascal.one\",\" Read in the integers. \"],\n  [\"punctuation.definition.comment.pascal\",\"*)\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"variable.pascal\",\"PROCEDURE\"],\n  [\"text\",\" \"],\n  [\"storage.type.function.pascal\",\"ReadArr\"],\n  [\"text\",\"(\"],\n  [\"keyword.control.pascal\",\"VAR\"],\n  [\"text\",\" size: Integer\"],\n  [\"keyword.operator\",\";\"],\n  [\"text\",\" \"],\n  [\"keyword.control.pascal\",\"VAR\"],\n  [\"text\",\" a: IntArrType)\"],\n  [\"keyword.operator\",\";\"],\n  [\"text\",\" \"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"keyword.control.pascal\",\"BEGIN\"]\n],[\n   \"start\",\n  [\"text\",\"            size \"],\n  [\"keyword.operator\",\":=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.pascal\",\"1\"],\n  [\"keyword.operator\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"            \"],\n  [\"keyword.control.pascal\",\"WHILE\"],\n  [\"text\",\" \"],\n  [\"keyword.control.pascal\",\"NOT\"],\n  [\"text\",\" eof \"],\n  [\"keyword.control.pascal\",\"DO\"],\n  [\"text\",\" \"],\n  [\"keyword.control.pascal\",\"BEGIN\"]\n],[\n   \"start\",\n  [\"text\",\"                readln(a[size])\"],\n  [\"keyword.operator\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"                \"],\n  [\"keyword.control.pascal\",\"IF\"],\n  [\"text\",\" \"],\n  [\"keyword.control.pascal\",\"NOT\"],\n  [\"text\",\" eof \"],\n  [\"keyword.control.pascal\",\"THEN\"],\n  [\"text\",\" \"]\n],[\n   \"start\",\n  [\"text\",\"                    size \"],\n  [\"keyword.operator\",\":=\"],\n  [\"text\",\" size \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.pascal\",\"1\"]\n],[\n   \"start\",\n  [\"text\",\"            \"],\n  [\"keyword.control.pascal\",\"END\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"keyword.control.pascal\",\"END\"],\n  [\"keyword.operator\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword.control.pascal\",\"BEGIN\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"punctuation.definition.comment.pascal\",\"(*\"],\n  [\"comment.block.pascal.one\",\" Read \"],\n  [\"punctuation.definition.comment.pascal\",\"*)\"]\n],[\n   \"start\",\n  [\"text\",\"        ReadArr(size\"],\n  [\"keyword.operator\",\",\"],\n  [\"text\",\" arr)\"],\n  [\"keyword.operator\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"punctuation.definition.comment.pascal\",\"(*\"],\n  [\"comment.block.pascal.one\",\" Sort using bubble sort. \"],\n  [\"punctuation.definition.comment.pascal\",\"*)\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"keyword.control.pascal\",\"FOR\"],\n  [\"text\",\" i \"],\n  [\"keyword.operator\",\":=\"],\n  [\"text\",\" size \"],\n  [\"keyword.operator\",\"-\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.pascal\",\"1\"],\n  [\"text\",\" DOWNTO \"],\n  [\"constant.numeric.pascal\",\"1\"],\n  [\"text\",\" \"],\n  [\"keyword.control.pascal\",\"DO\"]\n],[\n   \"start\",\n  [\"text\",\"            \"],\n  [\"keyword.control.pascal\",\"FOR\"],\n  [\"text\",\" j \"],\n  [\"keyword.operator\",\":=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.pascal\",\"1\"],\n  [\"text\",\" \"],\n  [\"keyword.control.pascal\",\"TO\"],\n  [\"text\",\" i \"],\n  [\"keyword.control.pascal\",\"DO\"],\n  [\"text\",\" \"]\n],[\n   \"start\",\n  [\"text\",\"                \"],\n  [\"keyword.control.pascal\",\"IF\"],\n  [\"text\",\" arr[j] > arr[j \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.pascal\",\"1\"],\n  [\"text\",\"] \"],\n  [\"keyword.control.pascal\",\"THEN\"],\n  [\"text\",\" \"],\n  [\"keyword.control.pascal\",\"BEGIN\"]\n],[\n   \"start\",\n  [\"text\",\"                    tmp \"],\n  [\"keyword.operator\",\":=\"],\n  [\"text\",\" arr[j]\"],\n  [\"keyword.operator\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"                    arr[j] \"],\n  [\"keyword.operator\",\":=\"],\n  [\"text\",\" arr[j \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.pascal\",\"1\"],\n  [\"text\",\"]\"],\n  [\"keyword.operator\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"                    arr[j \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.pascal\",\"1\"],\n  [\"text\",\"] \"],\n  [\"keyword.operator\",\":=\"],\n  [\"text\",\" tmp\"],\n  [\"keyword.operator\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"                \"],\n  [\"keyword.control.pascal\",\"END\"],\n  [\"keyword.operator\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"punctuation.definition.comment.pascal\",\"(*\"],\n  [\"comment.block.pascal.one\",\" Print. \"],\n  [\"punctuation.definition.comment.pascal\",\"*)\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"keyword.control.pascal\",\"FOR\"],\n  [\"text\",\" i \"],\n  [\"keyword.operator\",\":=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.pascal\",\"1\"],\n  [\"text\",\" \"],\n  [\"keyword.control.pascal\",\"TO\"],\n  [\"text\",\" size \"],\n  [\"keyword.control.pascal\",\"DO\"]\n],[\n   \"start\",\n  [\"text\",\"            writeln(arr[i])\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword.control.pascal\",\"END\"],\n  [\"text\",\".\"]\n],[\n   \"start\",\n  [\"text\",\"            \"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_perl.json",
    "content": "[[\n   \"start\",\n  [\"comment\",\"#!/usr/bin/perl\"]\n],[\n   \"block_comment\",\n  [\"comment.doc\",\"=begin\"]\n],[\n   \"block_comment\",\n  [\"comment.doc\",\" perl example code for Ace\"]\n],[\n   \"start\",\n  [\"comment.doc\",\"=cut\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"use\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"strict\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"keyword\",\"use\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"warnings\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"keyword\",\"my\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"$num_primes\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"keyword\",\"my\"],\n  [\"text\",\" @\"],\n  [\"identifier\",\"primes\"],\n  [\"text\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"comment\",\"# Put 2 as the first prime so we won't have an empty array\"]\n],[\n   \"start\",\n  [\"identifier\",\"$primes\"],\n  [\"lparen\",\"[\"],\n  [\"identifier\",\"$num_primes\"],\n  [\"rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"2\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"identifier\",\"$num_primes\"],\n  [\"keyword.operator\",\"++\"],\n  [\"text\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"identifier\",\"MAIN_LOOP\"],\n  [\"text\",\":\"]\n],[\n   \"start\",\n  [\"keyword\",\"for\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"my\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"$number_to_check\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"(\"],\n  [\"constant.numeric\",\"3\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"..\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"200\"],\n  [\"rparen\",\")\"]\n],[\n   \"start\",\n  [\"lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"for\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"my\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"$p\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"(\"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"..\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"(\"],\n  [\"identifier\",\"$num_primes\"],\n  [\"constant.numeric\",\"-1\"],\n  [\"rparen\",\"))\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"(\"],\n  [\"identifier\",\"$number_to_check\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"%\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"$primes\"],\n  [\"lparen\",\"[\"],\n  [\"identifier\",\"$p\"],\n  [\"rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"==\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"            \"],\n  [\"keyword\",\"next\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"MAIN_LOOP\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"comment\",\"# If we reached this point it means $number_to_check is not\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"comment\",\"# divisable by any prime number that came before it.\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"$primes\"],\n  [\"lparen\",\"[\"],\n  [\"identifier\",\"$num_primes\"],\n  [\"rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"$number_to_check\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"$num_primes\"],\n  [\"keyword.operator\",\"++\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"for\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"my\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"$p\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"(\"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"..\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"(\"],\n  [\"identifier\",\"$num_primes\"],\n  [\"constant.numeric\",\"-1\"],\n  [\"rparen\",\"))\"]\n],[\n   \"start\",\n  [\"lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"support.function\",\"print\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"$primes\"],\n  [\"lparen\",\"[\"],\n  [\"identifier\",\"$p\"],\n  [\"rparen\",\"]\"],\n  [\"keyword.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\", \\\"\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"rparen\",\"}\"]\n],[\n   \"start\",\n  [\"support.function\",\"print\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"\\\\n\\\"\"],\n  [\"text\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\"\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_pgsql.json",
    "content": "[[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword.statementBegin\",\"BEGIN\"],\n  [\"statementEnd\",\";\"]\n],[\n   \"start\"\n],[\n   \"doc-start\",\n  [\"comment.doc\",\"/**\"]\n],[\n   \"doc-start\",\n  [\"comment.doc\",\"* Samples from PostgreSQL src/tutorial/basics.source\"]\n],[\n   \"start\",\n  [\"comment.doc\",\"*/\"]\n],[\n   \"statement\",\n  [\"keyword.statementBegin\",\"CREATE\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"TABLE\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"weather\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"]\n],[\n   \"statement\",\n  [\"text\",\"\\t\"],\n  [\"identifier\",\"city\"],\n  [\"text\",\"\\t\\t\"],\n  [\"keyword\",\"varchar\"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"80\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\",\"]\n],[\n   \"statement\",\n  [\"text\",\"\\t\"],\n  [\"identifier\",\"temp_lo\"],\n  [\"text\",\"\\t\\t\"],\n  [\"keyword\",\"int\"],\n  [\"text\",\",\\t\\t\"],\n  [\"comment\",\"-- low temperature\"]\n],[\n   \"statement\",\n  [\"text\",\"\\t\"],\n  [\"identifier\",\"temp_hi\"],\n  [\"text\",\"\\t\\t\"],\n  [\"keyword\",\"int\"],\n  [\"text\",\",\\t\\t\"],\n  [\"comment\",\"-- high temperature\"]\n],[\n   \"statement\",\n  [\"text\",\"\\t\"],\n  [\"identifier\",\"prcp\"],\n  [\"text\",\"\\t\\t\"],\n  [\"keyword\",\"real\"],\n  [\"text\",\",\\t\\t\"],\n  [\"comment\",\"-- precipitation\"]\n],[\n   \"statement\",\n  [\"text\",\"\\t\"],\n  [\"variable.language\",\"\\\"date\\\"\"],\n  [\"text\",\"\\t\\t\"],\n  [\"keyword\",\"date\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\")\"],\n  [\"statementEnd\",\";\"]\n],[\n   \"start\"\n],[\n   \"statement\",\n  [\"keyword.statementBegin\",\"CREATE\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"TABLE\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"cities\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"]\n],[\n   \"statement\",\n  [\"text\",\"\\t\"],\n  [\"keyword\",\"name\"],\n  [\"text\",\"\\t\\t\"],\n  [\"keyword\",\"varchar\"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"80\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\",\"]\n],[\n   \"statement\",\n  [\"text\",\"\\t\"],\n  [\"keyword\",\"location\"],\n  [\"text\",\"\\t\"],\n  [\"keyword\",\"point\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\")\"],\n  [\"statementEnd\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\"\n],[\n   \"statement\",\n  [\"keyword.statementBegin\",\"INSERT\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"INTO\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"weather\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"VALUES\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"'San Francisco'\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"46\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"50\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"0.25\"],\n  [\"text\",\", \"],\n  [\"string\",\"'1994-11-27'\"],\n  [\"paren.rparen\",\")\"],\n  [\"statementEnd\",\";\"]\n],[\n   \"start\"\n],[\n   \"statement\",\n  [\"keyword.statementBegin\",\"INSERT\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"INTO\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"cities\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"VALUES\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"'San Francisco'\"],\n  [\"text\",\", \"],\n  [\"string\",\"'(-194.0, 53.0)'\"],\n  [\"paren.rparen\",\")\"],\n  [\"statementEnd\",\";\"]\n],[\n   \"start\"\n],[\n   \"statement\",\n  [\"keyword.statementBegin\",\"INSERT\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"INTO\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"weather\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"city\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"temp_lo\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"temp_hi\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"prcp\"],\n  [\"text\",\", \"],\n  [\"variable.language\",\"\\\"date\\\"\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"VALUES\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"'San Francisco'\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"43\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"57\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"0.0\"],\n  [\"text\",\", \"],\n  [\"string\",\"'1994-11-29'\"],\n  [\"paren.rparen\",\")\"],\n  [\"statementEnd\",\";\"]\n],[\n   \"start\"\n],[\n   \"statement\",\n  [\"keyword.statementBegin\",\"INSERT\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"INTO\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"weather\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"keyword\",\"date\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"city\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"temp_hi\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"temp_lo\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"VALUES\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"'1994-11-29'\"],\n  [\"text\",\", \"],\n  [\"string\",\"'Hayward'\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"54\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"37\"],\n  [\"paren.rparen\",\")\"],\n  [\"statementEnd\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword.statementBegin\",\"SELECT\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"city\"],\n  [\"text\",\", \"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"temp_hi\"],\n  [\"keyword.operator\",\"+\"],\n  [\"identifier\",\"temp_lo\"],\n  [\"paren.rparen\",\")\"],\n  [\"keyword.operator\",\"/\"],\n  [\"constant.numeric\",\"2\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"AS\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"temp_avg\"],\n  [\"text\",\", \"],\n  [\"variable.language\",\"\\\"date\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"FROM\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"weather\"],\n  [\"statementEnd\",\";\"]\n],[\n   \"start\"\n],[\n   \"statement\",\n  [\"keyword.statementBegin\",\"SELECT\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"city\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"temp_lo\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"temp_hi\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"prcp\"],\n  [\"text\",\", \"],\n  [\"variable.language\",\"\\\"date\\\"\"],\n  [\"text\",\", \"],\n  [\"keyword\",\"location\"]\n],[\n   \"statement\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"FROM\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"weather\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"cities\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"WHERE\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"city\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"name\"],\n  [\"statementEnd\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\"\n],[\n   \"start\"\n],[\n   \"doc-start\",\n  [\"comment.doc\",\"/**\"]\n],[\n   \"doc-start\",\n  [\"comment.doc\",\"* Dollar quotes starting at the end of the line are colored as SQL unless\"]\n],[\n   \"doc-start\",\n  [\"comment.doc\",\"* a special language tag is used. Dollar quote syntax coloring is implemented\"]\n],[\n   \"doc-start\",\n  [\"comment.doc\",\"* for Perl, Python, JavaScript, and Json.\"]\n],[\n   \"start\",\n  [\"comment.doc\",\"*/\"]\n],[\n   \"statement\",\n  [\"keyword.statementBegin\",\"create\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"or\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"replace\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"function\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"blob_content_chunked\"],\n  [\"paren.lparen\",\"(\"]\n],[\n   \"statement\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"in\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"p_data\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"bytea\"],\n  [\"text\",\", \"]\n],[\n   \"statement\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"in\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"p_chunk\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"integer\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"dollarSql\",\n  [\"keyword\",\"returns\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"setof\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"bytea\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"as\"],\n  [\"text\",\" \"],\n  [\"string\",\"$$\"]\n],[\n   \"dollarSql\",\n  [\"comment\",\"-- Still SQL comments\"]\n],[\n   \"dollarSql\",\n  [\"keyword\",\"declare\"]\n],[\n   \"dollarSql\",\n  [\"text\",\"\\t\"],\n  [\"identifier\",\"v_size\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"integer\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"octet_length\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"p_data\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\";\"]\n],[\n   \"dollarSql\",\n  [\"keyword\",\"begin\"]\n],[\n   \"dollarSql\",\n  [\"text\",\"\\t\"],\n  [\"keyword\",\"for\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"i\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"in\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\"..\"],\n  [\"identifier\",\"v_size\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"by\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"p_chunk\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"loop\"]\n],[\n   \"dollarSql\",\n  [\"text\",\"\\t\\t\"],\n  [\"identifier\",\"return\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"next\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"substring\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"p_data\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"from\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"i\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"for\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"p_chunk\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\";\"]\n],[\n   \"dollarSql\",\n  [\"text\",\"\\t\"],\n  [\"keyword\",\"end\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"loop\"],\n  [\"text\",\";\"]\n],[\n   \"dollarSql\",\n  [\"keyword\",\"end\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"$$\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"language\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"plpgsql\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"stable\"],\n  [\"statementEnd\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"comment\",\"-- pl/perl\"]\n],[\n   \"perl-start\",\n  [\"keyword.statementBegin\",\"CREATE\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"FUNCTION\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"perl_max\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"keyword\",\"integer\"],\n  [\"text\",\", \"],\n  [\"keyword\",\"integer\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"RETURNS\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"integer\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"AS\"],\n  [\"text\",\" \"],\n  [\"string\",\"$perl$\"]\n],[\n   \"perl-start\",\n  [\"text\",\"    \"],\n  [\"comment\",\"# perl comment...\"]\n],[\n   \"perl-start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"my\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"(\"],\n  [\"identifier\",\"$x\"],\n  [\"keyword.operator\",\",\"],\n  [\"identifier\",\"$y\"],\n  [\"rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" @\"],\n  [\"identifier\",\"_\"],\n  [\"text\",\";\"]\n],[\n   \"perl-start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"(\"],\n  [\"keyword.operator\",\"!\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"defined\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"$x\"],\n  [\"rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"{\"]\n],[\n   \"perl-start\",\n  [\"text\",\"        \"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"(\"],\n  [\"keyword.operator\",\"!\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"defined\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"$y\"],\n  [\"rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"{\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"return\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"undef\"],\n  [\"text\",\"; \"],\n  [\"rparen\",\"}\"]\n],[\n   \"perl-start\",\n  [\"text\",\"        \"],\n  [\"support.function\",\"return\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"$y\"],\n  [\"text\",\";\"]\n],[\n   \"perl-start\",\n  [\"text\",\"    \"],\n  [\"rparen\",\"}\"]\n],[\n   \"perl-start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"(\"],\n  [\"keyword.operator\",\"!\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"defined\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"$y\"],\n  [\"rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"{\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"return\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"$x\"],\n  [\"text\",\"; \"],\n  [\"rparen\",\"}\"]\n],[\n   \"perl-start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"(\"],\n  [\"identifier\",\"$x\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\">\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"$y\"],\n  [\"rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"{\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"return\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"$x\"],\n  [\"text\",\"; \"],\n  [\"rparen\",\"}\"]\n],[\n   \"perl-start\",\n  [\"text\",\"    \"],\n  [\"support.function\",\"return\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"$y\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"$perl$\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"LANGUAGE\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"plperl\"],\n  [\"statementEnd\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"comment\",\"-- pl/python\"]\n],[\n   \"python-start\",\n  [\"keyword.statementBegin\",\"CREATE\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"FUNCTION\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"usesavedplan\"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"RETURNS\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"trigger\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"AS\"],\n  [\"text\",\" \"],\n  [\"string\",\"$python$\"]\n],[\n   \"python-start\",\n  [\"text\",\"    \"],\n  [\"comment\",\"# python comment...\"]\n],[\n   \"python-start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"SD\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"has_key\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\"plan\\\"\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\":\"]\n],[\n   \"python-start\",\n  [\"text\",\"        \"],\n  [\"identifier\",\"plan\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"SD\"],\n  [\"paren.lparen\",\"[\"],\n  [\"string\",\"\\\"plan\\\"\"],\n  [\"paren.rparen\",\"]\"]\n],[\n   \"python-start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"else\"],\n  [\"text\",\":\"]\n],[\n   \"python-start\",\n  [\"text\",\"        \"],\n  [\"identifier\",\"plan\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"plpy\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"prepare\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\"SELECT 1\\\"\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"python-start\",\n  [\"text\",\"        \"],\n  [\"identifier\",\"SD\"],\n  [\"paren.lparen\",\"[\"],\n  [\"string\",\"\\\"plan\\\"\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"plan\"]\n],[\n   \"start\",\n  [\"string\",\"$python$\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"LANGUAGE\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"plpythonu\"],\n  [\"statementEnd\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"comment\",\"-- pl/v8 (javascript)\"]\n],[\n   \"javascript-start\",\n  [\"keyword.statementBegin\",\"CREATE\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"FUNCTION\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"plv8_test\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"keys\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"text\"],\n  [\"text\",\"[], \"],\n  [\"identifier\",\"vals\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"text\"],\n  [\"text\",\"[]\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"RETURNS\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"text\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"AS\"],\n  [\"text\",\" \"],\n  [\"string\",\"$javascript$\"]\n],[\n   \"javascript-start\",\n  [\"storage.type\",\"var\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"o\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"],\n  [\"paren.rparen\",\"}\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"javascript-start\",\n  [\"keyword\",\"for\"],\n  [\"paren.lparen\",\"(\"],\n  [\"storage.type\",\"var\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"i\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"0\"],\n  [\"punctuation.operator\",\";\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"i\"],\n  [\"keyword.operator\",\"<\"],\n  [\"identifier\",\"keys\"],\n  [\"punctuation.operator\",\".\"],\n  [\"support.constant\",\"length\"],\n  [\"punctuation.operator\",\";\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"i\"],\n  [\"keyword.operator\",\"++\"],\n  [\"paren.rparen\",\")\"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"javascript-start\",\n  [\"text\",\" \"],\n  [\"identifier\",\"o\"],\n  [\"paren.lparen\",\"[\"],\n  [\"identifier\",\"keys\"],\n  [\"paren.lparen\",\"[\"],\n  [\"identifier\",\"i\"],\n  [\"paren.rparen\",\"]]\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"vals\"],\n  [\"paren.lparen\",\"[\"],\n  [\"identifier\",\"i\"],\n  [\"paren.rparen\",\"]\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"javascript-no_regex\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"javascript-start\",\n  [\"keyword\",\"return\"],\n  [\"text\",\" \"],\n  [\"variable.language\",\"JSON\"],\n  [\"punctuation.operator\",\".\"],\n  [\"identifier\",\"stringify\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"o\"],\n  [\"paren.rparen\",\")\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"string\",\"$javascript$\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"LANGUAGE\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"plv8\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"IMMUTABLE\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"STRICT\"],\n  [\"statementEnd\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"comment\",\"-- json\"]\n],[\n   \"json-start\",\n  [\"keyword.statementBegin\",\"select\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"*\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"from\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"json_object_keys\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"$json$\"]\n],[\n   \"json-start\",\n  [\"paren.lparen\",\"{\"]\n],[\n   \"json-start\",\n  [\"text\",\"  \"],\n  [\"variable\",\"\\\"f1\\\"\"],\n  [\"text\",\": \"],\n  [\"constant.numeric\",\"5\"],\n  [\"text\",\",\"]\n],[\n   \"json-start\",\n  [\"text\",\"  \"],\n  [\"variable\",\"\\\"f2\\\"\"],\n  [\"text\",\": \"],\n  [\"string\",\"\\\"test\\\"\"],\n  [\"text\",\",\"]\n],[\n   \"json-start\",\n  [\"text\",\"  \"],\n  [\"variable\",\"\\\"f3\\\"\"],\n  [\"text\",\": \"],\n  [\"paren.lparen\",\"{\"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"json-start\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"string\",\"$json$\"],\n  [\"paren.rparen\",\")\"],\n  [\"statementEnd\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"comment\",\"-- psql commands\"]\n],[\n   \"start\",\n  [\"support.buildin\",\"\\\\df cash*\"]\n],[\n   \"start\"\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"comment\",\"-- Some string samples.\"]\n],[\n   \"start\",\n  [\"keyword.statementBegin\",\"select\"],\n  [\"text\",\" \"],\n  [\"string\",\"'don''t do it now;'\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"||\"],\n  [\"text\",\" \"],\n  [\"string\",\"'maybe later'\"],\n  [\"statementEnd\",\";\"]\n],[\n   \"start\",\n  [\"keyword.statementBegin\",\"select\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"E\"],\n  [\"string\",\"'dont\\\\'t do it'\"],\n  [\"statementEnd\",\";\"]\n],[\n   \"start\",\n  [\"keyword.statementBegin\",\"select\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"length\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"'some other''s stuff'\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"||\"],\n  [\"text\",\" \"],\n  [\"string\",\"$$cat in hat's stuff $$\"],\n  [\"paren.rparen\",\")\"],\n  [\"statementEnd\",\";\"]\n],[\n   \"start\"\n],[\n   \"dollarStatementString\",\n  [\"keyword.statementBegin\",\"select\"],\n  [\"text\",\" \"],\n  [\"string\",\"$$ strings\"]\n],[\n   \"dollarStatementString\",\n  [\"string\",\"over multiple \"]\n],[\n   \"dollarStatementString\",\n  [\"string\",\"lines - use dollar quotes\"]\n],[\n   \"start\",\n  [\"string\",\"$$\"],\n  [\"statementEnd\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword.statementBegin\",\"END\"],\n  [\"statementEnd\",\";\"]\n],[\n   \"start\"\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_php.json",
    "content": "[[\n   \"php-start\",\n  [\"support.php_tag\",\"<?php\"]\n],[\n   \"php-start\"\n],[\n   \"php-start\",\n  [\"keyword\",\"function\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"nfact\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"$n\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"php-start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"$n\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"==\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"php-start\",\n  [\"text\",\"        \"],\n  [\"support.function\",\"return\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\";\"]\n],[\n   \"php-start\",\n  [\"text\",\"    \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"php-start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"else\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"php-start\",\n  [\"text\",\"        \"],\n  [\"support.function\",\"return\"],\n  [\"text\",\" \"],\n  [\"variable\",\"$n\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"*\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"nfact\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"$n\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"-\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\";\"]\n],[\n   \"php-start\",\n  [\"text\",\"    \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"php-start\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"php-start\"\n],[\n   \"php-start\",\n  [\"support.function\",\"echo\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"\"],\n  [\"constant.language.escape\",\"\\\\n\\\\n\"],\n  [\"string\",\"Please enter a whole number ... \\\"\"],\n  [\"text\",\";\"]\n],[\n   \"php-start\",\n  [\"variable\",\"$num\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"trim\"],\n  [\"paren.lparen\",\"(\"],\n  [\"support.function\",\"fgets\"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.language\",\"STDIN\"],\n  [\"paren.rparen\",\"))\"],\n  [\"text\",\";\"]\n],[\n   \"php-start\"\n],[\n   \"php-start\",\n  [\"comment\",\"// ===== PROCESS - Determing the factorial of the input number =====\"]\n],[\n   \"php-start\",\n  [\"variable\",\"$output\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"\"],\n  [\"constant.language.escape\",\"\\\\n\\\\n\"],\n  [\"string\",\"Factorial \\\"\"],\n  [\"text\",\" . \"],\n  [\"variable\",\"$num\"],\n  [\"text\",\" . \"],\n  [\"string\",\"\\\" = \\\"\"],\n  [\"text\",\" . \"],\n  [\"identifier\",\"nfact\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"$num\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" . \"],\n  [\"string\",\"\\\"\"],\n  [\"constant.language.escape\",\"\\\\n\\\\n\"],\n  [\"string\",\"\\\"\"],\n  [\"text\",\";\"]\n],[\n   \"php-start\",\n  [\"support.function\",\"echo\"],\n  [\"text\",\" \"],\n  [\"variable\",\"$output\"],\n  [\"text\",\";\"]\n],[\n   \"php-start\"\n],[\n   [\"php-start\",\"js-start\"],\n  [\"support.php_tag\",\"?>\"],\n  [\"text.xml\",\" \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.script.tag-name.xml\",\"script\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text\",\"  \"],\n  [\"support.php_tag\",\"<?php\"]\n],[\n   [\"#tmp\",\"php-qstring\",\"php-start\",\"js-start\"],\n  [\"support.function\",\"echo\"],\n  [\"text\",\" \"],\n  [\"string\",\"'\"]\n],[\n   [\"php-start\",\"js-start\"],\n  [\"string\",\"'\"],\n  [\"text\",\";\"]\n],[\n   \"js-start\",\n  [\"support.php_tag\",\"?>\"]\n],[\n   \"js-comment1\",\n  [\"comment\",\"/*this is js \"],\n  [\"support.php_tag\",\"<?php\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"echo\"],\n  [\"text\",\" \"],\n  [\"string\",\"':)'\"],\n  [\"text\",\"; \"],\n  [\"support.php_tag\",\"?>\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.script.tag-name.xml\",\"script\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\" not \"],\n  [\"constant.language.escape.reference.xml\",\"&js;\"]\n],[\n   \"start\"\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_powershell.json",
    "content": "[[\n   \"start\",\n  [\"comment\",\"# This is a simple comment\"]\n],[\n   \"start\",\n  [\"keyword\",\"function\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Hello\"],\n  [\"lparen\",\"(\"],\n  [\"variable.instance\",\"$name\"],\n  [\"rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"identifier\",\"Write-host\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"Hello $name\\\"\"]\n],[\n   \"start\",\n  [\"rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"function\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"add\"],\n  [\"lparen\",\"(\"],\n  [\"variable.instance\",\"$left\"],\n  [\"text\",\", \"],\n  [\"variable.instance\",\"$right\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"4\"],\n  [\"rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"(\"],\n  [\"variable.instance\",\"$right\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"-ne\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"4\"],\n  [\"rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"keyword\",\"return\"],\n  [\"text\",\" \"],\n  [\"variable.instance\",\"$left\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"rparen\",\"}\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"elseif\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"(\"],\n  [\"variable.instance\",\"$left\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"-eq\"],\n  [\"text\",\" \"],\n  [\"constant.language\",\"$null\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"-and\"],\n  [\"text\",\" \"],\n  [\"variable.instance\",\"$right\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"-eq\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"2\"],\n  [\"rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"keyword\",\"return\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"3\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"rparen\",\"}\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"else\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"keyword\",\"return\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"2\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"rparen\",\"}\"]\n],[\n   \"start\",\n  [\"rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"variable.instance\",\"$number\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"2\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"variable.instance\",\"$number\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"3\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"support.function\",\"Write-Host\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Hello\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"-\"],\n  [\"identifier\",\"name\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"World\\\"\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"variable.instance\",\"$an_array\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" @\"],\n  [\"lparen\",\"(\"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"2\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"3\"],\n  [\"rparen\",\")\"]\n],[\n   \"start\",\n  [\"variable.instance\",\"$a_hash\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" @\"],\n  [\"lparen\",\"{\"],\n  [\"string\",\"\\\"something\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"something else\\\"\"],\n  [\"rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword.operator\",\"&\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"notepad\"],\n  [\"text\",\" .\\\\\"],\n  [\"identifier\",\"readme\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"md\"]\n],[\n   \"start\"\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_praat.json",
    "content": "[[\n   \"form\",\n  [\"keyword\",\"form\"],\n  [\"text\",\" \"],\n  [\"entity.name.section\",\"Highlighter test\"]\n],[\n   \"form\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"sentence \"],\n  [\"text\",\"My_sentence \"],\n  [\"string\",\"This should all be a string\"]\n],[\n   \"form\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"text \"],\n  [\"text\",\"My_text \"],\n  [\"string\",\"This should also all be a string\"]\n],[\n   \"form\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"word \"],\n  [\"text\",\"My_word \"],\n  [\"string\",\"Only\"],\n  [\"invalid.illegal\",\" the first word is a string, the rest is invalid\"]\n],[\n   \"form\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"boolean \"],\n  [\"text\",\"Binary \"],\n  [\"constant.language\",\"1\"]\n],[\n   \"form\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"boolean \"],\n  [\"text\",\"Text \"],\n  [\"constant.language\",\"no\"]\n],[\n   \"form\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"boolean \"],\n  [\"text\",\"Quoted \"],\n  [\"constant.language\",\"\\\"yes\\\"\"]\n],[\n   \"form\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"comment \"],\n  [\"string\",\"This should be a string\"]\n],[\n   \"form\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"real \"],\n  [\"text\",\"left_Range \"],\n  [\"constant.numeric\",\"-123.6\"]\n],[\n   \"form\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"positive \"],\n  [\"text\",\"right_Range_max \"],\n  [\"constant.numeric\",\"3.3\"]\n],[\n   \"form\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"integer \"],\n  [\"text\",\"Int \"],\n  [\"constant.numeric\",\"4\"]\n],[\n   \"form\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"natural \"],\n  [\"text\",\"Nat \"],\n  [\"constant.numeric\",\"4\"]\n],[\n   \"start\",\n  [\"keyword\",\"endform\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"comment\",\"# External scripts\"]\n],[\n   \"start\",\n  [\"keyword\",\"include\"],\n  [\"text\",\" \"],\n  [\"string\",\"/path/to/file\"]\n],[\n   \"start\",\n  [\"support.function\",\"runScript\"],\n  [\"text\",\":\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"/path/to/file\\\"\"]\n],[\n   \"start\",\n  [\"keyword\",\"execute\"],\n  [\"text\",\" \"],\n  [\"string\",\"/path/to/file\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"stopwatch\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"comment\",\"# old-style procedure call\"]\n],[\n   \"start\",\n  [\"keyword\",\"call\"],\n  [\"text\",\" \"],\n  [\"entity.name.function\",\"oldStyle\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"quoted\\\"\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"2\"],\n  [\"text\",\" unquoted string\"]\n],[\n   \"start\",\n  [\"keyword\",\"assert\"],\n  [\"text\",\" oldStyle.local\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"comment\",\"# New-style procedure call with parens\"]\n],[\n   \"start\",\n  [\"entity.name.function\",\"@newStyle\"],\n  [\"text\",\"(\"],\n  [\"string\",\"\\\"quoted\\\"\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"2\"],\n  [\"text\",\", \"],\n  [\"string\",\"\\\"quoted string\\\"\"],\n  [\"text\",\")\"]\n],[\n   \"start\",\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"variable.language\",\"praatVersion\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\">=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"5364\"],\n  [\"text\",\" \"]\n],[\n   \"start\",\n  [\"comment\",\"  # New-style procedure call with colon\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"entity.name.function\",\"@newStyle\"],\n  [\"text\",\":\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"quoted\\\"\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"2\"],\n  [\"text\",\", \"],\n  [\"string\",\"\\\"quoted string\\\"\"]\n],[\n   \"start\",\n  [\"keyword\",\"endif\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"comment\",\"# if-block with built-in variables\"]\n],[\n   \"start\",\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"variable.language\",\"windows\"]\n],[\n   \"start\",\n  [\"comment\",\"  # We are on Windows\"]\n],[\n   \"start\",\n  [\"keyword\",\"elsif\"],\n  [\"text\",\" \"],\n  [\"variable.language\",\"unix\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"or\"],\n  [\"text\",\" \"],\n  [\"text\",\"!\"],\n  [\"variable.language\",\"macintosh\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"support.function\",\"exitScript\"],\n  [\"text\",\":\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"We are on Linux\\\"\"]\n],[\n   \"start\",\n  [\"keyword\",\"else\"],\n  [\"text\",\" \"],\n  [\"variable.language\",\"macintosh\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"==\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"exit\"],\n  [\"text\",\" \"],\n  [\"string\",\"We are on Mac\"]\n],[\n   \"start\",\n  [\"keyword\",\"endif\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"comment\",\"# inline if with inline comment\"]\n],[\n   \"start\",\n  [\"text\",\"var\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"variable.language\",\"macintosh\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"then\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"else\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"fi\"],\n  [\"text\",\" \"],\n  [\"comment\",\"; This is an inline comment\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"comment\",\"# for-loop with explicit from using local variable\"]\n],[\n   \"start\",\n  [\"comment\",\"# and paren-style function calls and variable interpolation\"]\n],[\n   \"start\",\n  [\"text\",\"n\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"numberOfSelected\"],\n  [\"text\",\"(\"],\n  [\"string\",\"\\\"Sound\\\"\"],\n  [\"text\",\")\"]\n],[\n   \"start\",\n  [\"keyword\",\"for\"],\n  [\"text\",\" i \"],\n  [\"keyword\",\"from\"],\n  [\"text\",\" newStyle.local \"],\n  [\"keyword\",\"to\"],\n  [\"text\",\" n\"]\n],[\n   \"start\",\n  [\"text\",\"  sound\"],\n  [\"string.interpolated\",\"'i'\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"selected\"],\n  [\"text\",\"(\"],\n  [\"string\",\"\\\"Sound\\\"\"],\n  [\"text\",\", i)\"]\n],[\n   \"start\",\n  [\"text\",\"  sound[i]\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"text\",\"sound\"],\n  [\"string.interpolated\",\"'i'\"]\n],[\n   \"start\",\n  [\"keyword\",\"endfor\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"for\"],\n  [\"text\",\" i \"],\n  [\"keyword\",\"from\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"to\"],\n  [\"text\",\" n\"]\n],[\n   \"start\",\n  [\"comment\",\"  # Different styles of object selection\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"select\"],\n  [\"text\",\" sound\"],\n  [\"string.interpolated\",\"'i'\"]\n],[\n   \"start\",\n  [\"text\",\"  sound\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"selected\"],\n  [\"text\",\"(\"],\n  [\"text\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"  sound$\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"selected$\"],\n  [\"text\",\"(\"],\n  [\"string\",\"\\\"Sound\\\"\"],\n  [\"text\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"select\"],\n  [\"text\",\" \"],\n  [\"entity.name.type\",\"Sound\"],\n  [\"text\",\" \"],\n  [\"string.interpolated\",\"'sound$'\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"support.function\",\"selectObject\"],\n  [\"text\",\"(\"],\n  [\"text\",\"sound[i])\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"support.function\",\"selectObject\"],\n  [\"text\",\":\"],\n  [\"text\",\" sound\"]\n],[\n   \"start\",\n  [\"text\",\"  \"]\n],[\n   \"start\",\n  [\"comment\",\"  # Pause commands\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"support.function\",\"beginPause\"],\n  [\"text\",\"(\"],\n  [\"string\",\"\\\"Viewing \\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"text\",\"sound$)\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" i\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\">\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"]\n],[\n   \"start\",\n  [\"text\",\"    button\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"endPause\"],\n  [\"text\",\"(\"],\n  [\"string\",\"\\\"Stop\\\"\"],\n  [\"text\",\", \"],\n  [\"string\",\"\\\"Previous\\\"\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"      ...\"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" i\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"text\",\"total_sounds \"],\n  [\"keyword\",\"then\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"Finish\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"else\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"Next\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"fi\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"      ...\"],\n  [\"constant.numeric\",\"3\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"else\"]\n],[\n   \"start\",\n  [\"text\",\"    button\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"endPause\"],\n  [\"text\",\"(\"],\n  [\"string\",\"\\\"Stop\\\"\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"      ...\"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" i\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"text\",\"total_sounds \"],\n  [\"keyword\",\"then\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"Finish\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"else\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"Next\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"fi\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"      ...\"],\n  [\"constant.numeric\",\"2\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\")  \"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"endif\"]\n],[\n   \"start\",\n  [\"text\",\"  editor_name$\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" total_textgrids \"],\n  [\"keyword\",\"then\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"TextGrid \\\"\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"else\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"Sound \\\"\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"fi\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"text\",\"name$\"]\n],[\n   \"start\",\n  [\"text\",\"  nocheck editor \"],\n  [\"string.interpolated\",\"'editor_name$'\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"nocheck\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"Close\"]\n],[\n   \"start\",\n  [\"text\",\"  nocheck endeditor\"]\n],[\n   \"start\",\n  [\"text\",\"  \"]\n],[\n   \"start\",\n  [\"comment\",\"  # New-style standalone command call\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"Rename:\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"SomeName\\\"\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"comment\",\"  # Command call with assignment\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"text\",\"duration \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"Get total duration\"]\n],[\n   \"start\",\n  [\"text\",\"  \"]\n],[\n   \"start\",\n  [\"comment\",\"  # Multi-line command with modifier\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"text\",\"pitch \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"noprogress\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"To Pitch (ac):\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"75\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"15\"],\n  [\"text\",\", \"],\n  [\"string\",\"\\\"no\\\"\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"    ...\"],\n  [\"constant.numeric\",\"0.03\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"0.45\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"0.01\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"0.35\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"0.14\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"600\"]\n],[\n   \"start\",\n  [\"text\",\"    \"]\n],[\n   \"start\",\n  [\"comment\",\"  # do-style command with assignment\"]\n],[\n   \"start\",\n  [\"text\",\"  minimum\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"do\"],\n  [\"text\",\"(\"],\n  [\"string\",\"\\\"Get minimum...\\\"\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\", \"],\n  [\"string\",\"\\\"Hertz\\\"\"],\n  [\"text\",\", \"],\n  [\"string\",\"\\\"Parabolic\\\"\"],\n  [\"text\",\")\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"comment\",\"  # New-style multi-line command call with broken strings\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"text\",\"table \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"Create Table with column names:\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"table\\\"\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\",\"]\n],[\n   \"brokenstring\",\n  [\"text\",\"    ...\"],\n  [\"string\",\"\\\"file subject speaker\"]\n],[\n   \"start\",\n  [\"text\",\"    ...\"],\n  [\"string\",\"f0 f1 f2 f3 \"],\n  [\"string\",\"\\\"\"],\n  [\"text\",\" +\"]\n],[\n   \"start\",\n  [\"text\",\"    ...\"],\n  [\"string\",\"\\\"duration response\\\"\"]\n],[\n   \"start\",\n  [\"text\",\"  \"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"support.function\",\"removeObject\"],\n  [\"text\",\":\"],\n  [\"text\",\" pitch, table\"]\n],[\n   \"start\",\n  [\"text\",\"    \"]\n],[\n   \"start\",\n  [\"comment\",\"  # Picture window commands\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"support.function\",\"selectObject\"],\n  [\"text\",\":\"],\n  [\"text\",\" sound\"]\n],[\n   \"start\",\n  [\"comment\",\"  # do-style command\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"support.function\",\"do\"],\n  [\"text\",\"(\"],\n  [\"string\",\"\\\"Select inner viewport...\\\"\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"6\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"0.5\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"1.5\"],\n  [\"text\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"Black\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"Draw...\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"no\\\"\"],\n  [\"text\",\" Curve\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"Draw inner box\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"Text bottom:\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"yes\\\"\"],\n  [\"text\",\", sound$\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"Erase all\"]\n],[\n   \"start\",\n  [\"text\",\"  \"]\n],[\n   \"start\",\n  [\"comment\",\"  # Demo window commands\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"demo\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"Erase all\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"demo\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"Select inner viewport...\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"100\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"100\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"demo\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"Axes...\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"100\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"100\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"demo\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"Paint rectangle...\"],\n  [\"text\",\" white \"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"100\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"100\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"demo\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"Text...\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"50\"],\n  [\"text\",\" centre \"],\n  [\"constant.numeric\",\"50\"],\n  [\"text\",\" half Click to finish\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"support.function\",\"demoWaitForInput\"],\n  [\"text\",\" (\"],\n  [\"text\",\" )\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"demo\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"Erase all\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"demo\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"Text:\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"50\"],\n  [\"text\",\", \"],\n  [\"string\",\"\\\"centre\\\"\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"50\"],\n  [\"text\",\", \"],\n  [\"string\",\"\\\"half\\\"\"],\n  [\"text\",\", \"],\n  [\"string\",\"\\\"Finished\\\"\"]\n],[\n   \"start\",\n  [\"keyword\",\"endfor\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"comment\",\"# An old-style sendpraat block\"]\n],[\n   \"start\",\n  [\"keyword\",\"sendpraat\"],\n  [\"text\",\" \"],\n  [\"string\",\"Praat\"]\n],[\n   \"start\",\n  [\"text\",\"  ...\"],\n  [\"string.interpolated\",\"'newline$'\"],\n  [\"text\",\" Create \"],\n  [\"entity.name.type\",\"Sound\"],\n  [\"text\",\" as pure tone... \"],\n  [\"string\",\"\\\"tone\\\"\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0.4\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"44100\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"440\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0.2\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0.01\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0.01\"]\n],[\n   \"start\",\n  [\"text\",\"  ...\"],\n  [\"string.interpolated\",\"'newline$'\"],\n  [\"text\",\" Play\"]\n],[\n   \"start\",\n  [\"text\",\"  ...\"],\n  [\"string.interpolated\",\"'newline$'\"],\n  [\"text\",\" Remove\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"comment\",\"# A new-style sendpraat block\"]\n],[\n   \"start\",\n  [\"support.function\",\"beginSendPraat\"],\n  [\"text\",\":\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"Praat\\\"\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"Create Sound as pure tone:\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"tone\\\"\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"0.4\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"44100\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"440\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"0.2\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"0.01\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"0.01\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"text\",\"duration \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"Get total duration\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"Remove\"]\n],[\n   \"start\",\n  [\"support.function\",\"endSendPraat\"],\n  [\"text\",\":\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"duration\\\"\"]\n],[\n   \"start\",\n  [\"support.function\",\"appendInfoLine\"],\n  [\"text\",\":\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"The generated sound lasted for \\\"\"],\n  [\"text\",\", duration, \"],\n  [\"string\",\"\\\"seconds\\\"\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"time \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"stopwatch\"]\n],[\n   \"start\",\n  [\"keyword\",\"clearinfo\"]\n],[\n   \"start\",\n  [\"keyword\",\"echo\"],\n  [\"text\",\" \"],\n  [\"string\",\"This script took \"]\n],[\n   \"start\",\n  [\"keyword\",\"print\"],\n  [\"text\",\" \"],\n  [\"string\",\"'time' seconds to \"]\n],[\n   \"start\",\n  [\"keyword\",\"printline\"],\n  [\"text\",\" \"],\n  [\"string\",\"execute.\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"comment\",\"# Old-style procedure declaration\"]\n],[\n   \"start\",\n  [\"keyword\",\"procedure\"],\n  [\"text\",\" \"],\n  [\"entity.name.function\",\"oldStyle\"],\n  [\"text\",\" .str1$ .num .str2$\"]\n],[\n   \"start\",\n  [\"text\",\"  .local\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"]\n],[\n   \"start\",\n  [\"keyword\",\"endproc\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"comment\",\"# New-style procedure declaration\"]\n],[\n   \"start\",\n  [\"keyword\",\"procedure\"],\n  [\"text\",\" \"],\n  [\"entity.name.function\",\"newStyle\"],\n  [\"text\",\" (.str1$, .num, .str2$)\"]\n],[\n   \"start\",\n  [\"text\",\"  .local\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"]\n],[\n   \"start\",\n  [\"keyword\",\"endproc\"]\n],[\n   \"start\"\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_prolog.json",
    "content": "[[\n   \"start\",\n  [\"entity.name.function.fact.prolog\",\"partition\"],\n  [\"punctuation.begin.fact.parameters.prolog\",\"(\"],\n  [\"punctuation.begin.list.prolog\",\"[\"],\n  [\"punctuation.end.list.prolog\",\"]\"],\n  [\"punctuation.separator.parameters.prolog\",\",\"],\n  [\"meta.fact.prolog\",\" \"],\n  [\"variable.language.anonymous.prolog\",\"_\"],\n  [\"punctuation.separator.parameters.prolog\",\",\"],\n  [\"meta.fact.prolog\",\" \"],\n  [\"punctuation.begin.list.prolog\",\"[\"],\n  [\"punctuation.end.list.prolog\",\"]\"],\n  [\"punctuation.separator.parameters.prolog\",\",\"],\n  [\"meta.fact.prolog\",\" \"],\n  [\"punctuation.begin.list.prolog\",\"[\"],\n  [\"punctuation.end.list.prolog\",\"]\"],\n  [\"punctuation.end.fact.parameters.prolog\",\")\"],\n  [\"punctuation.end.fact.prolog\",\".\"]\n],[\n   [\"keyword.operator.definition.prolog\",\"meta.rule.prolog\"],\n  [\"entity.name.function.rule.prolog\",\"partition\"],\n  [\"punctuation.rule.parameters.begin.prolog\",\"(\"],\n  [\"punctuation.begin.list.prolog\",\"[\"],\n  [\"variable.other.prolog\",\"X\"],\n  [\"punctuation.concat.list.prolog\",\"|\"],\n  [\"variable.other.prolog\",\"Xs\"],\n  [\"punctuation.end.list.prolog\",\"]\"],\n  [\"punctuation.separator.parameters.prolog\",\",\"],\n  [\"meta.rule.parameters.prolog\",\" \"],\n  [\"variable.parameter.prolog\",\"Pivot\"],\n  [\"punctuation.separator.parameters.prolog\",\",\"],\n  [\"meta.rule.parameters.prolog\",\" \"],\n  [\"variable.parameter.prolog\",\"Smalls\"],\n  [\"punctuation.separator.parameters.prolog\",\",\"],\n  [\"meta.rule.parameters.prolog\",\" \"],\n  [\"variable.parameter.prolog\",\"Bigs\"],\n  [\"punctuation.rule.parameters.end.prolog\",\")\"],\n  [\"meta.rule.signature.prolog\",\" \"],\n  [\"keyword.operator.definition.prolog\",\":-\"]\n],[\n   [\"meta.expression.prolog\",\"keyword.operator.definition.prolog\",\"keyword.operator.definition.prolog\",\"meta.rule.prolog\"],\n  [\"meta.rule.definition.prolog\",\"    \"],\n  [\"meta.expression.prolog\",\"(   \"],\n  [\"variable.other.prolog\",\"X\"],\n  [\"meta.expression.prolog\",\" @\"],\n  [\"keyword.operator.prolog\",\"<\"],\n  [\"meta.expression.prolog\",\" \"],\n  [\"variable.other.prolog\",\"Pivot\"],\n  [\"meta.expression.prolog\",\" \"],\n  [\"keyword.operator.prolog\",\"->\"]\n],[\n   [\"meta.expression.prolog\",\"keyword.operator.definition.prolog\",\"keyword.operator.definition.prolog\",\"meta.rule.prolog\"],\n  [\"meta.expression.prolog\",\"        \"],\n  [\"variable.other.prolog\",\"Smalls\"],\n  [\"meta.expression.prolog\",\" \"],\n  [\"keyword.operator.prolog\",\"=\"],\n  [\"meta.expression.prolog\",\" \"],\n  [\"punctuation.begin.list.prolog\",\"[\"],\n  [\"variable.other.prolog\",\"X\"],\n  [\"punctuation.concat.list.prolog\",\"|\"],\n  [\"variable.other.prolog\",\"Rest\"],\n  [\"punctuation.end.list.prolog\",\"]\"],\n  [\"punctuation.control.and.prolog\",\",\"]\n],[\n   [\"meta.expression.prolog\",\"keyword.operator.definition.prolog\",\"keyword.operator.definition.prolog\",\"meta.rule.prolog\"],\n  [\"meta.expression.prolog\",\"        \"],\n  [\"constant.other.atom.prolog\",\"partition\"],\n  [\"punctuation.begin.statement.parameters.prolog\",\"(\"],\n  [\"variable.other.prolog\",\"Xs\"],\n  [\"punctuation.separator.statement.prolog\",\",\"],\n  [\"meta.statement.parameters.prolog\",\" \"],\n  [\"variable.other.prolog\",\"Pivot\"],\n  [\"punctuation.separator.statement.prolog\",\",\"],\n  [\"meta.statement.parameters.prolog\",\" \"],\n  [\"variable.other.prolog\",\"Rest\"],\n  [\"punctuation.separator.statement.prolog\",\",\"],\n  [\"meta.statement.parameters.prolog\",\" \"],\n  [\"variable.other.prolog\",\"Bigs\"],\n  [\"punctuation.end.statement.parameters.prolog\",\")\"]\n],[\n   [\"meta.expression.prolog\",\"keyword.operator.definition.prolog\",\"keyword.operator.definition.prolog\",\"meta.rule.prolog\"],\n  [\"meta.expression.prolog\",\"    \"],\n  [\"punctuation.control.or.prolog\",\";\"],\n  [\"meta.expression.prolog\",\"   \"],\n  [\"variable.other.prolog\",\"Bigs\"],\n  [\"meta.expression.prolog\",\" \"],\n  [\"keyword.operator.prolog\",\"=\"],\n  [\"meta.expression.prolog\",\" \"],\n  [\"punctuation.begin.list.prolog\",\"[\"],\n  [\"variable.other.prolog\",\"X\"],\n  [\"punctuation.concat.list.prolog\",\"|\"],\n  [\"variable.other.prolog\",\"Rest\"],\n  [\"punctuation.end.list.prolog\",\"]\"],\n  [\"punctuation.control.and.prolog\",\",\"]\n],[\n   [\"meta.expression.prolog\",\"keyword.operator.definition.prolog\",\"keyword.operator.definition.prolog\",\"meta.rule.prolog\"],\n  [\"meta.expression.prolog\",\"        \"],\n  [\"constant.other.atom.prolog\",\"partition\"],\n  [\"punctuation.begin.statement.parameters.prolog\",\"(\"],\n  [\"variable.other.prolog\",\"Xs\"],\n  [\"punctuation.separator.statement.prolog\",\",\"],\n  [\"meta.statement.parameters.prolog\",\" \"],\n  [\"variable.other.prolog\",\"Pivot\"],\n  [\"punctuation.separator.statement.prolog\",\",\"],\n  [\"meta.statement.parameters.prolog\",\" \"],\n  [\"variable.other.prolog\",\"Smalls\"],\n  [\"punctuation.separator.statement.prolog\",\",\"],\n  [\"meta.statement.parameters.prolog\",\" \"],\n  [\"variable.other.prolog\",\"Rest\"],\n  [\"punctuation.end.statement.parameters.prolog\",\")\"]\n],[\n   \"start\",\n  [\"meta.expression.prolog\",\"    )\"],\n  [\"punctuation.rule.end.prolog\",\".\"]\n],[\n   \"start\",\n  [\"text\",\" \"]\n],[\n   \"start\",\n  [\"entity.name.function.fact.prolog\",\"quicksort\"],\n  [\"punctuation.begin.fact.parameters.prolog\",\"(\"],\n  [\"punctuation.begin.list.prolog\",\"[\"],\n  [\"punctuation.end.list.prolog\",\"]\"],\n  [\"punctuation.end.fact.parameters.prolog\",\")\"],\n  [\"text\",\"     --> [].\"]\n],[\n   \"start\",\n  [\"entity.name.function.fact.prolog\",\"quicksort\"],\n  [\"punctuation.begin.fact.parameters.prolog\",\"(\"],\n  [\"punctuation.begin.list.prolog\",\"[\"],\n  [\"variable.other.prolog\",\"X\"],\n  [\"punctuation.concat.list.prolog\",\"|\"],\n  [\"variable.other.prolog\",\"Xs\"],\n  [\"punctuation.end.list.prolog\",\"]\"],\n  [\"punctuation.end.fact.parameters.prolog\",\")\"],\n  [\"text\",\" -->\"]\n],[\n   \"start\",\n  [\"text\",\"    { \"],\n  [\"entity.name.function.fact.prolog\",\"partition\"],\n  [\"punctuation.begin.fact.parameters.prolog\",\"(\"],\n  [\"variable.parameter.prolog\",\"Xs\"],\n  [\"punctuation.separator.parameters.prolog\",\",\"],\n  [\"meta.fact.prolog\",\" \"],\n  [\"variable.parameter.prolog\",\"X\"],\n  [\"punctuation.separator.parameters.prolog\",\",\"],\n  [\"meta.fact.prolog\",\" \"],\n  [\"variable.parameter.prolog\",\"Smaller\"],\n  [\"punctuation.separator.parameters.prolog\",\",\"],\n  [\"meta.fact.prolog\",\" \"],\n  [\"variable.parameter.prolog\",\"Bigger\"],\n  [\"punctuation.end.fact.parameters.prolog\",\")\"],\n  [\"text\",\" },\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"entity.name.function.fact.prolog\",\"quicksort\"],\n  [\"punctuation.begin.fact.parameters.prolog\",\"(\"],\n  [\"variable.parameter.prolog\",\"Smaller\"],\n  [\"punctuation.end.fact.parameters.prolog\",\")\"],\n  [\"text\",\", [X], \"],\n  [\"entity.name.function.fact.prolog\",\"quicksort\"],\n  [\"punctuation.begin.fact.parameters.prolog\",\"(\"],\n  [\"variable.parameter.prolog\",\"Bigger\"],\n  [\"punctuation.end.fact.parameters.prolog\",\")\"],\n  [\"punctuation.end.fact.prolog\",\".\"]\n],[\n   \"start\"\n],[\n   [\"keyword.operator.definition.prolog\",\"meta.rule.prolog\"],\n  [\"entity.name.function.rule.prolog\",\"perfect\"],\n  [\"punctuation.rule.parameters.begin.prolog\",\"(\"],\n  [\"variable.parameter.prolog\",\"N\"],\n  [\"punctuation.rule.parameters.end.prolog\",\")\"],\n  [\"meta.rule.signature.prolog\",\" \"],\n  [\"keyword.operator.definition.prolog\",\":-\"]\n],[\n   [\"keyword.operator.definition.prolog\",\"meta.rule.prolog\"],\n  [\"meta.rule.definition.prolog\",\"    \"],\n  [\"constant.other.atom.prolog\",\"between\"],\n  [\"punctuation.begin.statement.parameters.prolog\",\"(\"],\n  [\"constant.numeric.prolog\",\"1\"],\n  [\"punctuation.separator.statement.prolog\",\",\"],\n  [\"meta.statement.parameters.prolog\",\" \"],\n  [\"constant.other.atom.prolog\",\"inf\"],\n  [\"punctuation.separator.statement.prolog\",\",\"],\n  [\"meta.statement.parameters.prolog\",\" \"],\n  [\"variable.other.prolog\",\"N\"],\n  [\"punctuation.end.statement.parameters.prolog\",\")\"],\n  [\"punctuation.control.and.prolog\",\",\"],\n  [\"meta.rule.definition.prolog\",\" \"],\n  [\"variable.other.prolog\",\"U\"],\n  [\"meta.rule.definition.prolog\",\" \"],\n  [\"keyword.operator.prolog\",\"is\"],\n  [\"meta.rule.definition.prolog\",\" \"],\n  [\"variable.other.prolog\",\"N\"],\n  [\"meta.rule.definition.prolog\",\" // \"],\n  [\"constant.numeric.prolog\",\"2\"],\n  [\"punctuation.control.and.prolog\",\",\"]\n],[\n   [\"keyword.operator.definition.prolog\",\"meta.rule.prolog\"],\n  [\"meta.rule.definition.prolog\",\"    \"],\n  [\"constant.other.atom.prolog\",\"findall\"],\n  [\"punctuation.begin.statement.parameters.prolog\",\"(\"],\n  [\"variable.other.prolog\",\"D\"],\n  [\"punctuation.separator.statement.prolog\",\",\"],\n  [\"meta.statement.parameters.prolog\",\" (\"],\n  [\"constant.other.atom.prolog\",\"between\"],\n  [\"punctuation.begin.statement.parameters.prolog\",\"(\"],\n  [\"constant.numeric.prolog\",\"1\"],\n  [\"punctuation.separator.statement.prolog\",\",\"],\n  [\"variable.other.prolog\",\"U\"],\n  [\"punctuation.separator.statement.prolog\",\",\"],\n  [\"variable.other.prolog\",\"D\"],\n  [\"punctuation.end.statement.parameters.prolog\",\")\"],\n  [\"punctuation.separator.statement.prolog\",\",\"],\n  [\"meta.statement.parameters.prolog\",\" \"],\n  [\"variable.other.prolog\",\"N\"],\n  [\"meta.statement.parameters.prolog\",\" \"],\n  [\"constant.other.atom.prolog\",\"mod\"],\n  [\"meta.statement.parameters.prolog\",\" \"],\n  [\"variable.other.prolog\",\"D\"],\n  [\"meta.statement.parameters.prolog\",\" \"],\n  [\"keyword.operator.prolog\",\"=:=\"],\n  [\"meta.statement.parameters.prolog\",\" \"],\n  [\"constant.numeric.prolog\",\"0\"],\n  [\"punctuation.end.statement.parameters.prolog\",\")\"],\n  [\"punctuation.control.and.prolog\",\",\"],\n  [\"meta.rule.definition.prolog\",\" \"],\n  [\"variable.other.prolog\",\"Ds\"],\n  [\"meta.rule.definition.prolog\",\")\"],\n  [\"punctuation.control.and.prolog\",\",\"]\n],[\n   \"start\",\n  [\"meta.rule.definition.prolog\",\"    \"],\n  [\"constant.other.atom.prolog\",\"sumlist\"],\n  [\"punctuation.begin.statement.parameters.prolog\",\"(\"],\n  [\"variable.other.prolog\",\"Ds\"],\n  [\"punctuation.separator.statement.prolog\",\",\"],\n  [\"meta.statement.parameters.prolog\",\" \"],\n  [\"variable.other.prolog\",\"N\"],\n  [\"punctuation.end.statement.parameters.prolog\",\")\"],\n  [\"punctuation.rule.end.prolog\",\".\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_properties.json",
    "content": "[[\n   \"start\",\n  [\"comment\",\"# You are reading the \\\".properties\\\" entry.\"]\n],[\n   \"start\",\n  [\"comment\",\"! The exclamation mark can also mark text as comments.\"]\n],[\n   \"start\",\n  [\"comment\",\"# The key and element characters #, !, =, and : are written with a preceding backslash to ensure that they are properly loaded.\"]\n],[\n   \"start\",\n  [\"variable\",\"website \"],\n  [\"keyword\",\"=\"],\n  [\"string\",\" http\"],\n  [\"constant.language.escape\",\"\\\\\"],\n  [\"string\",\"://en.wikipedia.org/\"]\n],[\n   \"start\",\n  [\"variable\",\"language \"],\n  [\"keyword\",\"=\"],\n  [\"string\",\" English\"]\n],[\n   \"start\",\n  [\"comment\",\"# The backslash below tells the application to continue reading\"]\n],[\n   \"start\",\n  [\"comment\",\"# the value onto the next line.\"]\n],[\n   \"value\",\n  [\"variable\",\"message \"],\n  [\"keyword\",\"=\"],\n  [\"string\",\" Welcome to \\\\\"]\n],[\n   \"start\",\n  [\"string\",\"          Wikipedia!\"]\n],[\n   \"start\",\n  [\"comment\",\"# Add spaces to the key\"]\n],[\n   \"start\",\n  [\"variable\",\"key\"],\n  [\"constant.language.escape\",\"\\\\\"],\n  [\"variable\",\" with\"],\n  [\"constant.language.escape\",\"\\\\\"],\n  [\"variable\",\" spaces \"],\n  [\"keyword\",\"=\"],\n  [\"string\",\" This is the value that could be looked up with the key \\\"key with spaces\\\".\"]\n],[\n   \"start\",\n  [\"comment\",\"# Unicode\"]\n],[\n   \"start\",\n  [\"variable\",\"tab \"],\n  [\"keyword\",\":\"],\n  [\"string\",\" \"],\n  [\"constant.language.escape\",\"\\\\u0009\"]\n],[\n   \"start\",\n  [\"variable\",\"empty-key\"],\n  [\"keyword\",\"=\"]\n],[\n   \"start\",\n  [\"variable\",\"last.line\"],\n  [\"keyword\",\"=\"],\n  [\"string\",\"value\"]\n],[\n   \"start\"\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_protobuf.json",
    "content": "[[\n   \"start\",\n  [\"keyword.declaration.protobuf\",\"message\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Point\"],\n  [\"text\",\" {\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword.declaration.protobuf\",\"required\"],\n  [\"text\",\" \"],\n  [\"support.type\",\"int32\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"x\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.assignment.protobuf\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword.declaration.protobuf\",\"required\"],\n  [\"text\",\" \"],\n  [\"support.type\",\"int32\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"y\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.assignment.protobuf\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"2\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword.declaration.protobuf\",\"optional\"],\n  [\"text\",\" \"],\n  [\"support.type\",\"string\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"label\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.assignment.protobuf\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"3\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword.declaration.protobuf\",\"message\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Line\"],\n  [\"text\",\" {\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword.declaration.protobuf\",\"required\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Point\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"start\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.assignment.protobuf\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword.declaration.protobuf\",\"required\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Point\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"end\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.assignment.protobuf\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"2\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword.declaration.protobuf\",\"optional\"],\n  [\"text\",\" \"],\n  [\"support.type\",\"string\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"label\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.assignment.protobuf\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"3\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword.declaration.protobuf\",\"message\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Polyline\"],\n  [\"text\",\" {\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword.declaration.protobuf\",\"repeated\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Point\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"point\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.assignment.protobuf\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword.declaration.protobuf\",\"optional\"],\n  [\"text\",\" \"],\n  [\"support.type\",\"string\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"label\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.assignment.protobuf\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"2\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"}\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_python.json",
    "content": "[[\n   \"start\",\n  [\"comment\",\"#!/usr/local/bin/python\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"import\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"string\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"sys\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"comment\",\"# If no arguments were given, print a helpful message\"]\n],[\n   \"start\",\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"len\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"sys\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"argv\"],\n  [\"paren.rparen\",\")\"],\n  [\"keyword.operator\",\"==\"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\":\"]\n],[\n   \"qstring3\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"print\"],\n  [\"text\",\" \"],\n  [\"string\",\"'''Usage:\"]\n],[\n   \"start\",\n  [\"string\",\"celsius temp1 temp2 ...'''\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"sys\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"exit\"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"0\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"comment\",\"# Loop over the arguments\"]\n],[\n   \"start\",\n  [\"keyword\",\"for\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"i\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"in\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"sys\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"argv\"],\n  [\"paren.lparen\",\"[\"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\":\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\":\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"try\"],\n  [\"text\",\":\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"identifier\",\"fahrenheit\"],\n  [\"keyword.operator\",\"=\"],\n  [\"support.function\",\"float\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"string\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"atoi\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"i\"],\n  [\"paren.rparen\",\"))\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"except\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"string\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"atoi_error\"],\n  [\"text\",\":\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"keyword\",\"print\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"repr\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"i\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\", \"],\n  [\"string\",\"\\\"not a numeric value\\\"\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"else\"],\n  [\"text\",\":\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"identifier\",\"celsius\"],\n  [\"keyword.operator\",\"=\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"fahrenheit\"],\n  [\"keyword.operator\",\"-\"],\n  [\"constant.numeric\",\"32\"],\n  [\"paren.rparen\",\")\"],\n  [\"keyword.operator\",\"*\"],\n  [\"constant.numeric\",\"5.0\"],\n  [\"keyword.operator\",\"/\"],\n  [\"constant.numeric\",\"9.0\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"keyword\",\"print\"],\n  [\"text\",\" \"],\n  [\"string\",\"'%i\"],\n  [\"constant.language.escape\",\"\\\\260\"],\n  [\"string\",\"F = %i\"],\n  [\"constant.language.escape\",\"\\\\260\"],\n  [\"string\",\"C'\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"%\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"support.function\",\"int\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"fahrenheit\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\", \"],\n  [\"support.function\",\"int\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"celsius\"],\n  [\"keyword.operator\",\"+\"],\n  [\"constant.numeric\",\".5\"],\n  [\"paren.rparen\",\"))\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_r.json",
    "content": "[[\n   \"start\",\n  [\"identifier\",\"Call\"],\n  [\"keyword.operator\",\":\"]\n],[\n   \"start\",\n  [\"identifier\",\"lm\"],\n  [\"paren.keyword.operator\",\"(\"],\n  [\"identifier\",\"formula\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"y\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"~\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"x\"],\n  [\"paren.keyword.operator\",\")\"]\n],[\n   \"start\",\n  [\"text\",\" \"]\n],[\n   \"start\",\n  [\"identifier\",\"Residuals\"],\n  [\"keyword.operator\",\":\"]\n],[\n   \"start\",\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\"       \"],\n  [\"constant.numeric\",\"2\"],\n  [\"text\",\"       \"],\n  [\"constant.numeric\",\"3\"],\n  [\"text\",\"       \"],\n  [\"constant.numeric\",\"4\"],\n  [\"text\",\"       \"],\n  [\"constant.numeric\",\"5\"],\n  [\"text\",\"       \"],\n  [\"constant.numeric\",\"6\"]\n],[\n   \"start\",\n  [\"constant.numeric\",\"3.3333\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"-\"],\n  [\"constant.numeric\",\"0.6667\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"-\"],\n  [\"constant.numeric\",\"2.6667\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"-\"],\n  [\"constant.numeric\",\"2.6667\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"-\"],\n  [\"constant.numeric\",\"0.6667\"],\n  [\"text\",\"  \"],\n  [\"constant.numeric\",\"3.3333\"]\n],[\n   \"start\",\n  [\"text\",\" \"]\n],[\n   \"start\",\n  [\"identifier\",\"Coefficients\"],\n  [\"keyword.operator\",\":\"]\n],[\n   \"start\",\n  [\"text\",\"            \"],\n  [\"identifier\",\"Estimate\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Std\"],\n  [\"text\",\". \"],\n  [\"identifier\",\"Error\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"t\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"value\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Pr\"],\n  [\"paren.keyword.operator\",\"(\"],\n  [\"keyword.operator\",\">|\"],\n  [\"identifier\",\"t\"],\n  [\"keyword.operator\",\"|\"],\n  [\"paren.keyword.operator\",\")\"]\n],[\n   \"start\",\n  [\"paren.keyword.operator\",\"(\"],\n  [\"identifier\",\"Intercept\"],\n  [\"paren.keyword.operator\",\")\"],\n  [\"text\",\"  \"],\n  [\"keyword.operator\",\"-\"],\n  [\"constant.numeric\",\"9.3333\"],\n  [\"text\",\"     \"],\n  [\"constant.numeric\",\"2.8441\"],\n  [\"text\",\"  \"],\n  [\"keyword.operator\",\"-\"],\n  [\"constant.numeric\",\"3.282\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0.030453\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"*\"]\n],[\n   \"start\",\n  [\"identifier\",\"x\"],\n  [\"text\",\"             \"],\n  [\"constant.numeric\",\"7.0000\"],\n  [\"text\",\"     \"],\n  [\"constant.numeric\",\"0.7303\"],\n  [\"text\",\"   \"],\n  [\"constant.numeric\",\"9.585\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0.000662\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"***\"]\n],[\n   \"start\",\n  [\"keyword.operator\",\"---\"]\n],[\n   \"start\",\n  [\"identifier\",\"Signif\"],\n  [\"text\",\". \"],\n  [\"identifier\",\"codes\"],\n  [\"keyword.operator\",\":\"],\n  [\"text\",\"  \"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\" ‘\"],\n  [\"keyword.operator\",\"***\"],\n  [\"text\",\"’ \"],\n  [\"constant.numeric\",\"0.001\"],\n  [\"text\",\" ‘\"],\n  [\"keyword.operator\",\"**\"],\n  [\"text\",\"’ \"],\n  [\"constant.numeric\",\"0.01\"],\n  [\"text\",\" ‘\"],\n  [\"keyword.operator\",\"*\"],\n  [\"text\",\"’ \"],\n  [\"constant.numeric\",\"0.05\"],\n  [\"text\",\" ‘.’ \"],\n  [\"constant.numeric\",\"0.1\"],\n  [\"text\",\" ‘ ’ \"],\n  [\"constant.numeric\",\"1\"]\n],[\n   \"start\",\n  [\"text\",\" \"]\n],[\n   \"start\",\n  [\"identifier\",\"Residual\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"standard\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"error\"],\n  [\"keyword.operator\",\":\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"3.055\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"on\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"4\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"degrees\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"of\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"freedom\"]\n],[\n   \"start\",\n  [\"identifier\",\"Multiple\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"R\"],\n  [\"keyword.operator\",\"-\"],\n  [\"identifier\",\"squared\"],\n  [\"keyword.operator\",\":\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0.9583\"],\n  [\"text\",\",     \"],\n  [\"identifier\",\"Adjusted\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"R\"],\n  [\"keyword.operator\",\"-\"],\n  [\"identifier\",\"squared\"],\n  [\"keyword.operator\",\":\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0.9478\"]\n],[\n   \"start\",\n  [\"constant.language.boolean\",\"F\"],\n  [\"keyword.operator\",\"-\"],\n  [\"identifier\",\"statistic\"],\n  [\"keyword.operator\",\":\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"91.88\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"on\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"and\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"4\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"DF\"],\n  [\"text\",\",  \"],\n  [\"identifier\",\"p\"],\n  [\"keyword.operator\",\"-\"],\n  [\"identifier\",\"value\"],\n  [\"keyword.operator\",\":\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0.000662\"]\n],[\n   \"start\",\n  [\"text\",\" \"]\n],[\n   \"start\",\n  [\"keyword.operator\",\">\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"par\"],\n  [\"paren.keyword.operator\",\"(\"],\n  [\"identifier\",\"mfrow\"],\n  [\"keyword.operator\",\"=\"],\n  [\"identifier\",\"c\"],\n  [\"paren.keyword.operator\",\"(\"],\n  [\"constant.numeric\",\"2\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"2\"],\n  [\"paren.keyword.operator\",\"))\"],\n  [\"text\",\"     \"],\n  [\"comment\",\"# Request 2x2 plot layout\"]\n],[\n   \"start\",\n  [\"keyword.operator\",\">\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"plot\"],\n  [\"paren.keyword.operator\",\"(\"],\n  [\"identifier\",\"lm_1\"],\n  [\"paren.keyword.operator\",\")\"],\n  [\"text\",\"             \"],\n  [\"comment\",\"# Diagnostic plot of regression model\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_razor.json",
    "content": "[[\n   [\"razor-block-start\",\"@{\"],\n  [\"punctuation.block.razor\",\"@{\"]\n],[\n   [\"razor-block-start\",\"@{\"],\n  [\"text\",\"\\t\"],\n  [\"identifier\",\"Layout\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"string.start\",\"\\\"\"],\n  [\"string\",\"~/layout\"],\n  [\"string.end\",\"\\\"\"]\n],[\n   \"start\",\n  [\"punctuation.block.razor\",\"}\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_rdoc.json",
    "content": "[[\n   \"start\",\n  [\"keyword\",\"\\\\name\"],\n  [\"paren.keyword.operator\",\"{\"],\n  [\"nospell.text\",\"picker\"],\n  [\"paren.keyword.operator\",\"}\"]\n],[\n   \"start\",\n  [\"keyword\",\"\\\\alias\"],\n  [\"paren.keyword.operator\",\"{\"],\n  [\"nospell.text\",\"picker\"],\n  [\"paren.keyword.operator\",\"}\"]\n],[\n   \"start\",\n  [\"keyword\",\"\\\\title\"],\n  [\"paren.keyword.operator\",\"{\"],\n  [\"text\",\"Create a picker control\"],\n  [\"paren.keyword.operator\",\"}\"]\n],[\n   \"start\",\n  [\"keyword\",\"\\\\description\"],\n  [\"paren.keyword.operator\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"  Create a picker control to enable manipulation of plot variables based on a set of fixed choices.\"]\n],[\n   \"start\",\n  [\"paren.keyword.operator\",\"}\"]\n],[\n   \"start\"\n],[\n   \"nospell\",\n  [\"keyword\",\"\\\\usage\"],\n  [\"paren.keyword.operator\",\"{\"]\n],[\n   \"nospell\",\n  [\"nospell.text\",\"picker\"],\n  [\"paren.keyword.operator\",\"(\"],\n  [\"text\",\"...,\"],\n  [\"nospell.text\",\" initial \"],\n  [\"text\",\"=\"],\n  [\"nospell.text\",\" NULL\"],\n  [\"text\",\",\"],\n  [\"nospell.text\",\" label \"],\n  [\"text\",\"=\"],\n  [\"nospell.text\",\" NULL\"],\n  [\"paren.keyword.operator\",\")\"]\n],[\n   \"start\",\n  [\"paren.keyword.operator\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"\\\\arguments\"],\n  [\"paren.keyword.operator\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"\\\\item\"],\n  [\"paren.keyword.operator\",\"{\"],\n  [\"keyword\",\"\\\\dots\"],\n  [\"paren.keyword.operator\",\"}{\"]\n],[\n   \"start\",\n  [\"text\",\"    Arguments containing objects to be presented as choices for the picker \"],\n  [\"paren.keyword.operator\",\"(\"],\n  [\"text\",\"or a list containing the choices\"],\n  [\"paren.keyword.operator\",\")\"],\n  [\"text\",\". If an element is named then the name is used to display it within the picker. If an element is not named then it is displayed within the picker using \"],\n  [\"keyword\",\"\\\\code\"],\n  [\"paren.keyword.operator\",\"{\"],\n  [\"keyword\",\"\\\\link\"],\n  [\"paren.keyword.operator\",\"{\"],\n  [\"nospell.text\",\"as\"],\n  [\"text\",\".\"],\n  [\"nospell.text\",\"character\"],\n  [\"paren.keyword.operator\",\"}}\"],\n  [\"text\",\". \"]\n],[\n   \"start\",\n  [\"paren.keyword.operator\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"\\\\item\"],\n  [\"paren.keyword.operator\",\"{\"],\n  [\"nospell.text\",\"initial\"],\n  [\"paren.keyword.operator\",\"}{\"]\n],[\n   \"start\",\n  [\"text\",\"    Initial value for picker. Value must be present in the list of choices specified. If not specified defaults to the first choice.\"]\n],[\n   \"start\",\n  [\"paren.keyword.operator\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"\\\\item\"],\n  [\"paren.keyword.operator\",\"{\"],\n  [\"nospell.text\",\"label\"],\n  [\"paren.keyword.operator\",\"}{\"]\n],[\n   \"start\",\n  [\"text\",\"    Display label for picker. Defaults to the variable name if not specified.\"]\n],[\n   \"start\",\n  [\"paren.keyword.operator\",\"}\"]\n],[\n   \"start\",\n  [\"paren.keyword.operator\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"\\\\value\"],\n  [\"paren.keyword.operator\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"  An object of class \\\"manipulator.picker\\\" which can be passed to the \"],\n  [\"keyword\",\"\\\\code\"],\n  [\"paren.keyword.operator\",\"{\"],\n  [\"keyword\",\"\\\\link\"],\n  [\"paren.keyword.operator\",\"{\"],\n  [\"nospell.text\",\"manipulate\"],\n  [\"paren.keyword.operator\",\"}}\"],\n  [\"text\",\" function.\"]\n],[\n   \"start\",\n  [\"paren.keyword.operator\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"\\\\seealso\"],\n  [\"paren.keyword.operator\",\"{\"]\n],[\n   \"start\",\n  [\"keyword\",\"\\\\code\"],\n  [\"paren.keyword.operator\",\"{\"],\n  [\"keyword\",\"\\\\link\"],\n  [\"paren.keyword.operator\",\"{\"],\n  [\"nospell.text\",\"manipulate\"],\n  [\"paren.keyword.operator\",\"}}\"],\n  [\"text\",\", \"],\n  [\"keyword\",\"\\\\code\"],\n  [\"paren.keyword.operator\",\"{\"],\n  [\"keyword\",\"\\\\link\"],\n  [\"paren.keyword.operator\",\"{\"],\n  [\"nospell.text\",\"slider\"],\n  [\"paren.keyword.operator\",\"}}\"],\n  [\"text\",\", \"],\n  [\"keyword\",\"\\\\code\"],\n  [\"paren.keyword.operator\",\"{\"],\n  [\"keyword\",\"\\\\link\"],\n  [\"paren.keyword.operator\",\"{\"],\n  [\"nospell.text\",\"checkbox\"],\n  [\"paren.keyword.operator\",\"}}\"],\n  [\"text\",\", \"],\n  [\"keyword\",\"\\\\code\"],\n  [\"paren.keyword.operator\",\"{\"],\n  [\"keyword\",\"\\\\link\"],\n  [\"paren.keyword.operator\",\"{\"],\n  [\"nospell.text\",\"button\"],\n  [\"paren.keyword.operator\",\"}}\"]\n],[\n   \"start\",\n  [\"paren.keyword.operator\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\"\n],[\n   \"nospell\",\n  [\"keyword\",\"\\\\examples\"],\n  [\"paren.keyword.operator\",\"{\"]\n],[\n   \"nospell\",\n  [\"keyword\",\"\\\\dontrun\"],\n  [\"paren.keyword.operator\",\"{\"]\n],[\n   \"nospell\"\n],[\n   \"nospell\",\n  [\"text\",\"##\"],\n  [\"nospell.text\",\" Filtering data with a picker\"]\n],[\n   \"nospell\",\n  [\"nospell.text\",\"manipulate\"],\n  [\"paren.keyword.operator\",\"(\"]\n],[\n   \"nospell\",\n  [\"nospell.text\",\"  barplot\"],\n  [\"paren.keyword.operator\",\"(\"],\n  [\"nospell.text\",\"as\"],\n  [\"text\",\".\"],\n  [\"nospell.text\",\"matrix\"],\n  [\"paren.keyword.operator\",\"(\"],\n  [\"nospell.text\",\"longley\"],\n  [\"paren.keyword.operator\",\"[\"],\n  [\"text\",\",\"],\n  [\"nospell.text\",\"factor\"],\n  [\"paren.keyword.operator\",\"])\"],\n  [\"text\",\",\"],\n  [\"nospell.text\",\" \"]\n],[\n   \"nospell\",\n  [\"nospell.text\",\"          beside \"],\n  [\"text\",\"=\"],\n  [\"nospell.text\",\" TRUE\"],\n  [\"text\",\",\"],\n  [\"nospell.text\",\" main \"],\n  [\"text\",\"=\"],\n  [\"nospell.text\",\" factor\"],\n  [\"paren.keyword.operator\",\")\"],\n  [\"text\",\",\"]\n],[\n   \"nospell\",\n  [\"nospell.text\",\"  factor \"],\n  [\"text\",\"=\"],\n  [\"nospell.text\",\" picker\"],\n  [\"paren.keyword.operator\",\"(\"],\n  [\"text\",\"\\\"\"],\n  [\"nospell.text\",\"GNP\"],\n  [\"text\",\"\\\",\"],\n  [\"nospell.text\",\" \"],\n  [\"text\",\"\\\"\"],\n  [\"nospell.text\",\"Unemployed\"],\n  [\"text\",\"\\\",\"],\n  [\"nospell.text\",\" \"],\n  [\"text\",\"\\\"\"],\n  [\"nospell.text\",\"Employed\"],\n  [\"text\",\"\\\"\"],\n  [\"paren.keyword.operator\",\"))\"]\n],[\n   \"nospell\"\n],[\n   \"nospell\",\n  [\"text\",\"##\"],\n  [\"nospell.text\",\" Create a picker with labels\"]\n],[\n   \"nospell\",\n  [\"nospell.text\",\"manipulate\"],\n  [\"paren.keyword.operator\",\"(\"]\n],[\n   \"nospell\",\n  [\"nospell.text\",\"  plot\"],\n  [\"paren.keyword.operator\",\"(\"],\n  [\"nospell.text\",\"pressure\"],\n  [\"text\",\",\"],\n  [\"nospell.text\",\" type \"],\n  [\"text\",\"=\"],\n  [\"nospell.text\",\" type\"],\n  [\"paren.keyword.operator\",\")\"],\n  [\"text\",\",\"],\n  [\"nospell.text\",\" \"]\n],[\n   \"nospell\",\n  [\"nospell.text\",\"  type \"],\n  [\"text\",\"=\"],\n  [\"nospell.text\",\" picker\"],\n  [\"paren.keyword.operator\",\"(\"],\n  [\"text\",\"\\\"\"],\n  [\"nospell.text\",\"points\"],\n  [\"text\",\"\\\"\"],\n  [\"nospell.text\",\" \"],\n  [\"text\",\"=\"],\n  [\"nospell.text\",\" \"],\n  [\"text\",\"\\\"\"],\n  [\"nospell.text\",\"p\"],\n  [\"text\",\"\\\",\"],\n  [\"nospell.text\",\" \"],\n  [\"text\",\"\\\"\"],\n  [\"nospell.text\",\"line\"],\n  [\"text\",\"\\\"\"],\n  [\"nospell.text\",\" \"],\n  [\"text\",\"=\"],\n  [\"nospell.text\",\" \"],\n  [\"text\",\"\\\"\"],\n  [\"nospell.text\",\"l\"],\n  [\"text\",\"\\\",\"],\n  [\"nospell.text\",\" \"],\n  [\"text\",\"\\\"\"],\n  [\"nospell.text\",\"step\"],\n  [\"text\",\"\\\"\"],\n  [\"nospell.text\",\" \"],\n  [\"text\",\"=\"],\n  [\"nospell.text\",\" \"],\n  [\"text\",\"\\\"\"],\n  [\"nospell.text\",\"s\"],\n  [\"text\",\"\\\"\"],\n  [\"paren.keyword.operator\",\"))\"]\n],[\n   \"nospell\",\n  [\"nospell.text\",\"  \"]\n],[\n   \"nospell\",\n  [\"text\",\"##\"],\n  [\"nospell.text\",\" Picker with groups\"]\n],[\n   \"nospell\",\n  [\"nospell.text\",\"manipulate\"],\n  [\"paren.keyword.operator\",\"(\"]\n],[\n   \"nospell\",\n  [\"nospell.text\",\"  barplot\"],\n  [\"paren.keyword.operator\",\"(\"],\n  [\"nospell.text\",\"as\"],\n  [\"text\",\".\"],\n  [\"nospell.text\",\"matrix\"],\n  [\"paren.keyword.operator\",\"(\"],\n  [\"nospell.text\",\"mtcars\"],\n  [\"paren.keyword.operator\",\"[\"],\n  [\"nospell.text\",\"group\"],\n  [\"text\",\",\\\"\"],\n  [\"nospell.text\",\"mpg\"],\n  [\"text\",\"\\\"\"],\n  [\"paren.keyword.operator\",\"])\"],\n  [\"text\",\",\"],\n  [\"nospell.text\",\" beside\"],\n  [\"text\",\"=\"],\n  [\"nospell.text\",\"TRUE\"],\n  [\"paren.keyword.operator\",\")\"],\n  [\"text\",\",\"]\n],[\n   \"nospell\",\n  [\"nospell.text\",\"  group \"],\n  [\"text\",\"=\"],\n  [\"nospell.text\",\" picker\"],\n  [\"paren.keyword.operator\",\"(\"],\n  [\"text\",\"\\\"\"],\n  [\"nospell.text\",\"Group 1\"],\n  [\"text\",\"\\\"\"],\n  [\"nospell.text\",\" \"],\n  [\"text\",\"=\"],\n  [\"nospell.text\",\" 1\"],\n  [\"text\",\":\"],\n  [\"nospell.text\",\"11\"],\n  [\"text\",\",\"],\n  [\"nospell.text\",\" \"]\n],[\n   \"nospell\",\n  [\"nospell.text\",\"                 \"],\n  [\"text\",\"\\\"\"],\n  [\"nospell.text\",\"Group 2\"],\n  [\"text\",\"\\\"\"],\n  [\"nospell.text\",\" \"],\n  [\"text\",\"=\"],\n  [\"nospell.text\",\" 12\"],\n  [\"text\",\":\"],\n  [\"nospell.text\",\"22\"],\n  [\"text\",\",\"],\n  [\"nospell.text\",\" \"]\n],[\n   \"nospell\",\n  [\"nospell.text\",\"                 \"],\n  [\"text\",\"\\\"\"],\n  [\"nospell.text\",\"Group 3\"],\n  [\"text\",\"\\\"\"],\n  [\"nospell.text\",\" \"],\n  [\"text\",\"=\"],\n  [\"nospell.text\",\" 23\"],\n  [\"text\",\":\"],\n  [\"nospell.text\",\"32\"],\n  [\"paren.keyword.operator\",\"))\"]\n],[\n   \"nospell\"\n],[\n   \"nospell\",\n  [\"text\",\"##\"],\n  [\"nospell.text\",\" Histogram w\"],\n  [\"text\",\"/\"],\n  [\"nospell.text\",\" picker to select type\"]\n],[\n   \"nospell\",\n  [\"nospell.text\",\"require\"],\n  [\"paren.keyword.operator\",\"(\"],\n  [\"nospell.text\",\"lattice\"],\n  [\"paren.keyword.operator\",\")\"]\n],[\n   \"nospell\",\n  [\"nospell.text\",\"require\"],\n  [\"paren.keyword.operator\",\"(\"],\n  [\"nospell.text\",\"stats\"],\n  [\"paren.keyword.operator\",\")\"]\n],[\n   \"nospell\",\n  [\"nospell.text\",\"manipulate\"],\n  [\"paren.keyword.operator\",\"(\"]\n],[\n   \"nospell\",\n  [\"nospell.text\",\"  histogram\"],\n  [\"paren.keyword.operator\",\"(\"],\n  [\"text\",\"~\"],\n  [\"nospell.text\",\" height \"],\n  [\"text\",\"|\"],\n  [\"nospell.text\",\" voice\"],\n  [\"text\",\".\"],\n  [\"nospell.text\",\"part\"],\n  [\"text\",\",\"],\n  [\"nospell.text\",\" \"]\n],[\n   \"nospell\",\n  [\"nospell.text\",\"            data \"],\n  [\"text\",\"=\"],\n  [\"nospell.text\",\" singer\"],\n  [\"text\",\",\"],\n  [\"nospell.text\",\" type \"],\n  [\"text\",\"=\"],\n  [\"nospell.text\",\" type\"],\n  [\"paren.keyword.operator\",\")\"],\n  [\"text\",\",\"]\n],[\n   \"nospell\",\n  [\"nospell.text\",\"  type \"],\n  [\"text\",\"=\"],\n  [\"nospell.text\",\" picker\"],\n  [\"paren.keyword.operator\",\"(\"],\n  [\"text\",\"\\\"\"],\n  [\"nospell.text\",\"percent\"],\n  [\"text\",\"\\\",\"],\n  [\"nospell.text\",\" \"],\n  [\"text\",\"\\\"\"],\n  [\"nospell.text\",\"count\"],\n  [\"text\",\"\\\",\"],\n  [\"nospell.text\",\" \"],\n  [\"text\",\"\\\"\"],\n  [\"nospell.text\",\"density\"],\n  [\"text\",\"\\\"\"],\n  [\"paren.keyword.operator\",\"))\"]\n],[\n   \"nospell\"\n],[\n   \"start\",\n  [\"paren.keyword.operator\",\"}\"]\n],[\n   \"start\",\n  [\"paren.keyword.operator\",\"}\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_rhtml.json",
    "content": "[[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"html\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"head\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"title\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\"Title\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"title\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"head\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"body\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"p\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\"This is an R HTML document. When you click the \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"b\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\"Knit HTML\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"b\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\" button a web page will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"p\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\"\n],[\n   \"r-start\",\n  [\"support.function.codebegin\",\"<!--begin.rcode\"]\n],[\n   \"r-start\",\n  [\"identifier\",\"summary\"],\n  [\"paren.keyword.operator\",\"(\"],\n  [\"identifier\",\"cars\"],\n  [\"paren.keyword.operator\",\")\"]\n],[\n   \"start\",\n  [\"support.function.codeend\",\"end.rcode-->\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"p\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\"You can also embed plots, for example:\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"p\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\"\n],[\n   \"r-start\",\n  [\"support.function.codebegin\",\"<!--begin.rcode fig.width=7, fig.height=6\"]\n],[\n   \"r-start\",\n  [\"identifier\",\"plot\"],\n  [\"paren.keyword.operator\",\"(\"],\n  [\"identifier\",\"cars\"],\n  [\"paren.keyword.operator\",\")\"]\n],[\n   \"start\",\n  [\"support.function.codeend\",\"end.rcode-->\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"body\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"html\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\"\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_ruby.json",
    "content": "[[\n   \"start\",\n  [\"text\",\" \"],\n  [\"comment\",\"#test: symbol tokenizer\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"paren.lparen\",\"[\"],\n  [\"constant.other.symbol.ruby\",\":@thing\"],\n  [\"text\",\", \"],\n  [\"constant.other.symbol.ruby\",\":$thing\"],\n  [\"text\",\", \"],\n  [\"constant.other.symbol.ruby\",\":_thing\"],\n  [\"text\",\", \"],\n  [\"constant.other.symbol.ruby\",\":thing\"],\n  [\"text\",\", \"],\n  [\"constant.other.symbol.ruby\",\":Thing\"],\n  [\"text\",\", \"],\n  [\"constant.other.symbol.ruby\",\":thing1\"],\n  [\"text\",\", \"],\n  [\"constant.other.symbol.ruby\",\":thing_a\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"              \"],\n  [\"constant.other.symbol.ruby\",\":THING\"],\n  [\"text\",\", \"],\n  [\"constant.other.symbol.ruby\",\":thing!\"],\n  [\"text\",\", \"],\n  [\"constant.other.symbol.ruby\",\":thing=\"],\n  [\"text\",\", \"],\n  [\"constant.other.symbol.ruby\",\":thing?\"],\n  [\"text\",\", \"],\n  [\"constant.other.symbol.ruby\",\":t?\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"              :, :@, :\"],\n  [\"keyword.operator\",\"$\"],\n  [\"text\",\", :\"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\", :1\"],\n  [\"identifier\",\"thing\"],\n  [\"text\",\", \"],\n  [\"constant.other.symbol.ruby\",\":th?\"],\n  [\"identifier\",\"ing\"],\n  [\"text\",\", \"],\n  [\"constant.other.symbol.ruby\",\":thi=\"],\n  [\"identifier\",\"ng\"],\n  [\"text\",\", :1\"],\n  [\"identifier\",\"thing\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"            \"],\n  [\"constant.other.symbol.ruby\",\":th!\"],\n  [\"identifier\",\"ing\"],\n  [\"text\",\", \"],\n  [\"constant.other.symbol.ruby\",\":thing\"],\n  [\"comment\",\"#\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"paren.rparen\",\"]\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\" \"],\n  [\"comment\",\"#test: namespaces aren't symbols\\\" : function() {\"]\n],[\n   \"start\",\n  [\"text\",\"   \"],\n  [\"support.class\",\"Namespaced\"],\n  [\"text\",\"::\"],\n  [\"support.class\",\"Class\"]\n],[\n   \"start\",\n  [\"text\",\" \"],\n  [\"comment\",\"#test: hex tokenizer \"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"constant.numeric\",\"0x9a\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"0XA1\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"0x9_a\"],\n  [\"text\",\", 0\"],\n  [\"identifier\",\"x\"],\n  [\"text\",\", 0\"],\n  [\"identifier\",\"x_9a\"],\n  [\"text\",\", 0\"],\n  [\"identifier\",\"x9a_\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\" \"],\n  [\"comment\",\"#test: float tokenizer\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"paren.lparen\",\"[\"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"+1\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"-1\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"12_345\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"0.000_1\"],\n  [\"text\",\",\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"_\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"3_1\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"1_2\"],\n  [\"text\",\", 1\"],\n  [\"identifier\",\"_\"],\n  [\"text\",\".\"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"_1\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\" \"]\n],[\n   \"start\",\n  [\"paren.lparen\",\"{\"],\n  [\"constant.other.symbol.ruby\",\":id\"],\n  [\"text\",\" \"],\n  [\"punctuation.separator.key-value\",\"=>\"],\n  [\"text\",\" \"],\n  [\"string.character\",\"?\\\"\"],\n  [\"text\",\", \"],\n  [\"constant.other.symbol.ruby\",\":key\"],\n  [\"text\",\" \"],\n  [\"punctuation.separator.key-value\",\"=>\"],\n  [\"text\",\" \"],\n  [\"string.start\",\"\\\"\"],\n  [\"string\",\"value\"],\n  [\"string.end\",\"\\\"\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"anotherKey\"],\n  [\"text\",\": \"],\n  [\"paren.lparen\",\"[\"],\n  [\"identifier\",\"x\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"y\"],\n  [\"text\",\"?\"],\n  [\"paren.rparen\",\"]}\"]\n],[\n   \"start\"\n],[\n   \"comment\",\n  [\"comment\",\"=begin\"]\n],[\n   \"start\",\n  [\"comment\",\"=end\"]\n],[\n   \"start\"\n],[\n   \"comment\",\n  [\"comment\",\"=begin x\"]\n],[\n   \"comment\",\n  [\"comment\",\"=end-\"]\n],[\n   \"start\",\n  [\"comment\",\"=end   x\"]\n],[\n   \"start\"\n],[\n   [\"heredoc\",\"FOO\",\"heredoc\",\"BAR\",\"indentedHeredoc\",\"BAZ\",\"indentedHeredoc\",\"EXEC\"],\n  [\"text\",\"    \"],\n  [\"identifier\",\"herDocs\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"constant\",\"<<\"],\n  [\"string\",\"'\"],\n  [\"support.class\",\"FOO\"],\n  [\"string\",\"'\"],\n  [\"text\",\", \"],\n  [\"constant\",\"<<\"],\n  [\"string\",\"\"],\n  [\"support.class\",\"BAR\"],\n  [\"string\",\"\"],\n  [\"text\",\", \"],\n  [\"constant\",\"<<-\"],\n  [\"string\",\"\"],\n  [\"support.class\",\"BAZ\"],\n  [\"string\",\"\"],\n  [\"text\",\", \"],\n  [\"constant\",\"<<-\"],\n  [\"string\",\"`\"],\n  [\"support.class\",\"EXEC\"],\n  [\"string\",\"`\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"comment\",\"#comment\"]\n],[\n   [\"heredoc\",\"FOO\",\"heredoc\",\"BAR\",\"indentedHeredoc\",\"BAZ\",\"indentedHeredoc\",\"EXEC\"],\n  [\"string\",\"  FOO #{literal}\"]\n],[\n   [\"heredoc\",\"BAR\",\"indentedHeredoc\",\"BAZ\",\"indentedHeredoc\",\"EXEC\"],\n  [\"support.class\",\"FOO\"]\n],[\n   [\"heredoc\",\"BAR\",\"indentedHeredoc\",\"BAZ\",\"indentedHeredoc\",\"EXEC\"],\n  [\"string\",\"  BAR #{fact(10)}\"]\n],[\n   [\"indentedHeredoc\",\"BAZ\",\"indentedHeredoc\",\"EXEC\"],\n  [\"support.class\",\"BAR\"]\n],[\n   [\"indentedHeredoc\",\"BAZ\",\"indentedHeredoc\",\"EXEC\"],\n  [\"string\",\"  BAZ indented\"]\n],[\n   [\"indentedHeredoc\",\"EXEC\"],\n  [\"string\",\"    \"],\n  [\"support.class\",\"BAZ\"]\n],[\n   [\"indentedHeredoc\",\"EXEC\"],\n  [\"string\",\"        echo hi\"]\n],[\n   \"start\",\n  [\"string\",\"    \"],\n  [\"support.class\",\"EXEC\"]\n],[\n   \"start\",\n  [\"support.function\",\"puts\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"herDocs\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_rust.json",
    "content": "[[\n   \"start\",\n  [\"keyword.source.rust\",\"use\"],\n  [\"text\",\" \"],\n  [\"support.constant\",\"core::rand::\"],\n  [\"text\",\"RngUtil\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword.source.rust\",\"fn\"],\n  [\"text\",\" \"],\n  [\"entity.name.function.source.rust\",\"main\"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword.source.rust\",\"for\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"string.quoted.double.source.rust\",\"\\\"Alice\\\"\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"string.quoted.double.source.rust\",\"\\\"Bob\\\"\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"string.quoted.double.source.rust\",\"\\\"Carol\\\"\"],\n  [\"paren.rparen\",\"]\"],\n  [\"punctuation.operator\",\".\"],\n  [\"text\",\"each \"],\n  [\"keyword.operator\",\"|&\"],\n  [\"text\",\"name\"],\n  [\"keyword.operator\",\"|\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"keyword.source.rust\",\"do\"],\n  [\"text\",\" spawn \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"            \"],\n  [\"keyword.source.rust\",\"let\"],\n  [\"text\",\" v \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"support.constant\",\"rand::\"],\n  [\"text\",\"Rng\"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\")\"],\n  [\"punctuation.operator\",\".\"],\n  [\"text\",\"shuffle\"],\n  [\"paren.lparen\",\"([\"],\n  [\"constant.numeric.source.rust\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.source.rust\",\"2\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.source.rust\",\"3\"],\n  [\"paren.rparen\",\"])\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"            \"],\n  [\"keyword.source.rust\",\"for\"],\n  [\"text\",\" v\"],\n  [\"punctuation.operator\",\".\"],\n  [\"text\",\"each \"],\n  [\"keyword.operator\",\"|&\"],\n  [\"text\",\"num\"],\n  [\"keyword.operator\",\"|\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"                print\"],\n  [\"paren.lparen\",\"(\"],\n  [\"text\",\"fmt\"],\n  [\"keyword.operator\",\"!\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string.quoted.double.source.rust\",\"\\\"%s says: '%d'\"],\n  [\"constant.character.escape.source.rust\",\"\\\\n\\\\\\\\\"],\n  [\"string.quoted.double.source.rust\",\"\\\"\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" name\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" num \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.source.rust\",\"1\"],\n  [\"paren.rparen\",\"))\"]\n],[\n   \"start\",\n  [\"text\",\"            \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword.source.rust\",\"let\"],\n  [\"text\",\" _ \"],\n  [\"punctuation.operator\",\":\"],\n  [\"storage.type.source.rust\",\"i128\"],\n  [\"keyword.operator\",\"=-\"],\n  [\"constant.numeric.source.rust\",\"42i128\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"keyword.source.rust\",\"let\"],\n  [\"text\",\" _ \"],\n  [\"punctuation.operator\",\":\"],\n  [\"storage.type.source.rust\",\"u128\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric.source.rust\",\"42u128\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   [\"comment\",\"comment\"],\n  [\"comment.start.block.source.rust\",\"/*\"],\n  [\"comment.block.source.rust\",\" nested \"],\n  [\"comment.start.block.source.rust\",\"/*\"],\n  [\"comment.block.source.rust\",\" \"]\n],[\n   \"start\",\n  [\"comment.block.source.rust\",\"    comments \"],\n  [\"comment.end.block.source.rust\",\"*/\"],\n  [\"comment.block.source.rust\",\" \"],\n  [\"comment.end.block.source.rust\",\"*/\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword.source.rust\",\"fn\"],\n  [\"text\",\" \"],\n  [\"entity.name.function.source.rust\",\"map\"],\n  [\"keyword.operator\",\"<\"],\n  [\"text\",\"T\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" U\"],\n  [\"keyword.operator\",\">\"],\n  [\"paren.lparen\",\"(\"],\n  [\"text\",\"vector\"],\n  [\"punctuation.operator\",\":\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"&\"],\n  [\"paren.lparen\",\"[\"],\n  [\"text\",\"T\"],\n  [\"paren.rparen\",\"]\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" function\"],\n  [\"punctuation.operator\",\":\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"&\"],\n  [\"text\",\"fn\"],\n  [\"paren.lparen\",\"(\"],\n  [\"text\",\"v\"],\n  [\"punctuation.operator\",\":\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"&\"],\n  [\"text\",\"T\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" U\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" ~\"],\n  [\"paren.lparen\",\"[\"],\n  [\"text\",\"U\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword.source.rust\",\"let\"],\n  [\"text\",\" \"],\n  [\"keyword.source.rust\",\"mut\"],\n  [\"text\",\" accumulator \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" ~\"],\n  [\"paren.lparen\",\"[\"],\n  [\"paren.rparen\",\"]\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword.source.rust\",\"for\"],\n  [\"text\",\" \"],\n  [\"support.constant\",\"vec::\"],\n  [\"text\",\"each\"],\n  [\"paren.lparen\",\"(\"],\n  [\"text\",\"vector\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"|\"],\n  [\"text\",\"element\"],\n  [\"keyword.operator\",\"|\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"        accumulator\"],\n  [\"punctuation.operator\",\".\"],\n  [\"text\",\"push\"],\n  [\"paren.lparen\",\"(\"],\n  [\"text\",\"function\"],\n  [\"paren.lparen\",\"(\"],\n  [\"text\",\"element\"],\n  [\"paren.rparen\",\"))\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword.source.rust\",\"return\"],\n  [\"text\",\" accumulator\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"comment.line.double-dash.source.rust\",\"// numbers\"]\n],[\n   \"start\",\n  [\"constant.numeric.source.rust\",\"14E-111_f64\"],\n  [\"punctuation.operator\",\";\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.source.rust\",\"45isize\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.source.rust\",\"0x1i32\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.source.rust\",\"0o777u32\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.source.rust\",\"0b01\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.source.rust\",\"14f32\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.source.rust\",\"1_2.78f32\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.source.rust\",\"1_2.3E+7f32\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"comment.line.double-dash.source.rust\",\"// not numbers\"]\n],[\n   \"start\",\n  [\"constant.numeric.source.rust\",\"14\"],\n  [\"punctuation.operator\",\".\"],\n  [\"text\",\"_E\"],\n  [\"keyword.operator\",\"-\"],\n  [\"constant.numeric.source.rust\",\"111_f64\"],\n  [\"punctuation.operator\",\";\"],\n  [\"text\",\"0xi32\"],\n  [\"punctuation.operator\",\";\"],\n  [\"text\",\"0b777u\"]\n],[\n   \"start\",\n  [\"text\",\"foo1\"],\n  [\"punctuation.operator\",\";\"],\n  [\"text\",\"foo1u32\"],\n  [\"punctuation.operator\",\";\"],\n  [\"text\",\"foo1f32\"],\n  [\"punctuation.operator\",\";\"],\n  [\"text\",\"foo0xF\"],\n  [\"punctuation.operator\",\";\"],\n  [\"text\",\"foo1\"],\n  [\"punctuation.operator\",\".\"],\n  [\"constant.numeric.source.rust\",\"0\"]\n]]\n"
  },
  {
    "path": "lib/ace/mode/_test/tokens_sass.json",
    "content": "[[\n   \"start\",\n  [\"comment\",\"// sass ace mode;\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"@import\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"url(\"],\n  [\"string\",\"http://fonts.googleapis.com/css?family=Ace:700\"],\n  [\"support.function\",\")\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"variable.language\",\"html\"],\n  [\"text\",\", \"],\n  [\"variable.language\",\"body\"]\n],[\n   \"start\",\n  [\"support.type\",\"  :background-color \"],\n  [\"constant.numeric\",\"#ace\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"support.type\",\"text-align\"],\n  [\"text\",\": \"],\n  [\"constant.language\",\"center\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"support.type\",\"height\"],\n  [\"text\",\": \"],\n  [\"constant.numeric\",\"100%\"]\n],[\n   [\"comment\",-1,2,\"start\"],\n  [\"comment\",\"  /*;*********;\"]\n],[\n   [\"comment\",3,2,\"start\"],\n  [\"comment\",\"    ;comment  ;\"]\n],[\n   [\"comment\",3,2,\"start\"],\n  [\"comment\",\"    ;*********;\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"variable.language\",\".toggle\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"variable\",\"$size\"],\n  [\"text\",\": \"],\n  [\"constant.numeric\",\"14px\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"support.type\",\"  :background \"],\n  [\"support.function\",\"url(\"],\n  [\"string\",\"http://subtlepatterns.com/patterns/dark_stripes.png\"],\n  [\"support.function\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"support.type\",\"border-radius\"],\n  [\"text\",\": \"],\n  [\"constant.numeric\",\"8px\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"support.type\",\"height\"],\n  [\"text\",\": \"],\n  [\"variable\",\"$size\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"  &\"],\n  [\"variable.language\",\":before\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"variable\",\"$radius\"],\n  [\"text\",\": \"],\n  [\"variable\",\"$size\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"*\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0.845\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"variable\",\"$glow\"],\n  [\"text\",\": \"],\n  [\"variable\",\"$size\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"*\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0.125\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"support.type\",\"box-shadow\"],\n  [\"text\",\": \"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\" \"],\n  [\"variable\",\"$glow\"],\n  [\"text\",\" \"],\n  [\"variable\",\"$glow\"],\n  [\"text\",\" / \"],\n  [\"constant.numeric\",\"2\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"#fff\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"support.type\",\"border-radius\"],\n  [\"text\",\": \"],\n  [\"variable\",\"$radius\"]\n],[\n   \"start\",\n  [\"text\",\"    \"]\n],[\n   \"start\",\n  [\"text\",\"    &\"],\n  [\"variable.language\",\":active\"]\n],[\n   \"start\",\n  [\"text\",\"      ~ \"],\n  [\"variable.language\",\".button\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"support.type\",\"box-shadow\"],\n  [\"text\",\": \"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"15px\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"25px\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"-4px\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"rgba\"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\",\"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\",\"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\",\"],\n  [\"constant.numeric\",\"0.4\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\"      \"]\n],[\n   \"start\",\n  [\"text\",\"      ~ \"],\n  [\"variable.language\",\".label\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"support.type\",\"font-size\"],\n  [\"text\",\": \"],\n  [\"constant.numeric\",\"40px\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"support.type\",\"color\"],\n  [\"text\",\": \"],\n  [\"support.function\",\"rgba\"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\",\"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\",\"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\",\"],\n  [\"constant.numeric\",\"0.45\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"    &\"],\n  [\"variable.language\",\":checked\"],\n  [\"text\",\"      \"]\n],[\n   \"start\",\n  [\"text\",\"      ~ \"],\n  [\"variable.language\",\".button\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"support.type\",\"box-shadow\"],\n  [\"text\",\": \"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"15px\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"25px\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"-4px\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"#ace\"]\n],[\n   \"start\",\n  [\"text\",\"      ~ \"],\n  [\"variable.language\",\".label\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"support.type\",\"font-size\"],\n  [\"text\",\": \"],\n  [\"constant.numeric\",\"40px\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"support.type\",\"color\"],\n  [\"text\",\": \"],\n  [\"constant.numeric\",\"#c9c9c9\"]\n],[\n   \"start\"\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_scad.json",
    "content": "[[\n   \"start\",\n  [\"comment\",\"// ace can highlight scad!\"]\n],[\n   \"start\",\n  [\"keyword\",\"module\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Element\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"xpos\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"ypos\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"zpos\"],\n  [\"paren.rparen\",\")\"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"identifier\",\"translate\"],\n  [\"paren.lparen\",\"([\"],\n  [\"identifier\",\"xpos\"],\n  [\"text\",\",\"],\n  [\"identifier\",\"ypos\"],\n  [\"text\",\",\"],\n  [\"identifier\",\"zpos\"],\n  [\"paren.rparen\",\"])\"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\"],\n  [\"identifier\",\"union\"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\")\"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\\t\"],\n  [\"identifier\",\"cube\"],\n  [\"paren.lparen\",\"([\"],\n  [\"constant.numeric\",\"10\"],\n  [\"text\",\",\"],\n  [\"constant.numeric\",\"10\"],\n  [\"text\",\",\"],\n  [\"constant.numeric\",\"4\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\",\"],\n  [\"identifier\",\"true\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\\t\"],\n  [\"identifier\",\"cylinder\"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"10\"],\n  [\"text\",\",\"],\n  [\"constant.numeric\",\"15\"],\n  [\"text\",\",\"],\n  [\"constant.numeric\",\"5\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\\t\"],\n  [\"identifier\",\"translate\"],\n  [\"paren.lparen\",\"([\"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\",\"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\",\"],\n  [\"constant.numeric\",\"10\"],\n  [\"paren.rparen\",\"])\"],\n  [\"identifier\",\"sphere\"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"5\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"identifier\",\"union\"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\")\"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"keyword\",\"for\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"i\"],\n  [\"keyword.operator\",\"=\"],\n  [\"paren.lparen\",\"[\"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\":\"],\n  [\"constant.numeric\",\"30\"],\n  [\"paren.rparen\",\"])\"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t# \"],\n  [\"identifier\",\"Element\"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\",\"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\",\"],\n  [\"constant.numeric\",\"0\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\"],\n  [\"identifier\",\"Element\"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"15\"],\n  [\"keyword.operator\",\"*\"],\n  [\"identifier\",\"i\"],\n  [\"text\",\",\"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\",\"],\n  [\"constant.numeric\",\"0\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"for\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"i\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"constant.numeric\",\"3\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"5\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"7\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"11\"],\n  [\"paren.rparen\",\"])\"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"identifier\",\"rotate\"],\n  [\"paren.lparen\",\"([\"],\n  [\"identifier\",\"i\"],\n  [\"keyword.operator\",\"*\"],\n  [\"constant.numeric\",\"10\"],\n  [\"text\",\",\"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\",\"],\n  [\"constant.numeric\",\"0\"],\n  [\"paren.rparen\",\"])\"],\n  [\"identifier\",\"scale\"],\n  [\"paren.lparen\",\"([\"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\",\"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\",\"],\n  [\"identifier\",\"i\"],\n  [\"paren.rparen\",\"])\"],\n  [\"identifier\",\"cube\"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"10\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_scala.json",
    "content": "[[\n   \"start\",\n  [\"comment\",\"// http://www.scala-lang.org/node/54\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"package\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"examples\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"actors\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"import\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"scala\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"actors\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"Actor\"]\n],[\n   \"start\",\n  [\"keyword\",\"import\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"scala\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"actors\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"Actor\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"_\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"abstract\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"class\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"PingMessage\"]\n],[\n   \"start\",\n  [\"keyword\",\"case\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"object\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Start\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"extends\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"PingMessage\"]\n],[\n   \"start\",\n  [\"keyword\",\"case\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"object\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"SendPing\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"extends\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"PingMessage\"]\n],[\n   \"start\",\n  [\"keyword\",\"case\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"object\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Pong\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"extends\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"PingMessage\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"abstract\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"class\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"PongMessage\"]\n],[\n   \"start\",\n  [\"keyword\",\"case\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"object\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Ping\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"extends\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"PongMessage\"]\n],[\n   \"start\",\n  [\"keyword\",\"case\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"object\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Stop\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"extends\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"PongMessage\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"object\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"pingpong\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"extends\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"Application\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"val\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"pong\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"new\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Pong\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"val\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"ping\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"new\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Ping\"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"100000\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"pong\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"identifier\",\"ping\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"start\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"identifier\",\"pong\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"start\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"identifier\",\"ping\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"!\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Start\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"class\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Ping\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"count\"],\n  [\"text\",\": \"],\n  [\"support.function\",\"Int\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"pong\"],\n  [\"text\",\": \"],\n  [\"identifier\",\"Actor\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"extends\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Actor\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"def\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"act\"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"println\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\"Ping: Initializing with count \\\"\"],\n  [\"keyword.operator\",\"+\"],\n  [\"identifier\",\"count\"],\n  [\"keyword.operator\",\"+\"],\n  [\"string\",\"\\\": \\\"\"],\n  [\"keyword.operator\",\"+\"],\n  [\"identifier\",\"pong\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"var\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"pingsLeft\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"count\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"loop\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"identifier\",\"react\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"keyword\",\"case\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Start\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=>\"]\n],[\n   \"start\",\n  [\"text\",\"          \"],\n  [\"keyword\",\"println\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\"Ping: starting.\\\"\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"          \"],\n  [\"identifier\",\"pong\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"!\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Ping\"]\n],[\n   \"start\",\n  [\"text\",\"          \"],\n  [\"identifier\",\"pingsLeft\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"pingsLeft\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"-\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"keyword\",\"case\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"SendPing\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=>\"]\n],[\n   \"start\",\n  [\"text\",\"          \"],\n  [\"identifier\",\"pong\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"!\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Ping\"]\n],[\n   \"start\",\n  [\"text\",\"          \"],\n  [\"identifier\",\"pingsLeft\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"pingsLeft\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"-\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"keyword\",\"case\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Pong\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=>\"]\n],[\n   \"start\",\n  [\"text\",\"          \"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"pingsLeft\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"%\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1000\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"==\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"            \"],\n  [\"keyword\",\"println\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\"Ping: pong from: \\\"\"],\n  [\"keyword.operator\",\"+\"],\n  [\"identifier\",\"sender\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"          \"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"pingsLeft\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\">\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"            \"],\n  [\"identifier\",\"self\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"!\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"SendPing\"]\n],[\n   \"start\",\n  [\"text\",\"          \"],\n  [\"keyword\",\"else\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"            \"],\n  [\"keyword\",\"println\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\"Ping: Stop.\\\"\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"            \"],\n  [\"identifier\",\"pong\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"!\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Stop\"]\n],[\n   \"start\",\n  [\"text\",\"            \"],\n  [\"identifier\",\"exit\"],\n  [\"paren.lparen\",\"(\"],\n  [\"symbol.constant\",\"'stop\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"          \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"class\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Pong\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"extends\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Actor\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"def\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"act\"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"var\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"pongCount\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"loop\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"identifier\",\"react\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"keyword\",\"case\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Ping\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=>\"]\n],[\n   \"start\",\n  [\"text\",\"          \"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"pongCount\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"%\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1000\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"==\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"            \"],\n  [\"keyword\",\"println\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\"Pong: ping \\\"\"],\n  [\"keyword.operator\",\"+\"],\n  [\"identifier\",\"pongCount\"],\n  [\"keyword.operator\",\"+\"],\n  [\"string\",\"\\\" from \\\"\"],\n  [\"keyword.operator\",\"+\"],\n  [\"identifier\",\"sender\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"          \"],\n  [\"identifier\",\"sender\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"!\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Pong\"]\n],[\n   \"start\",\n  [\"text\",\"          \"],\n  [\"identifier\",\"pongCount\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"pongCount\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"keyword\",\"case\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Stop\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=>\"]\n],[\n   \"start\",\n  [\"text\",\"          \"],\n  [\"keyword\",\"println\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\"Pong: Stop.\\\"\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"          \"],\n  [\"identifier\",\"exit\"],\n  [\"paren.lparen\",\"(\"],\n  [\"symbol.constant\",\"'stop\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_scheme.json",
    "content": "[[\n   \"start\",\n  [\"text\",\"(\"],\n  [\"storage.type.function-type.scheme\",\"define\"],\n  [\"text\",\" \"],\n  [\"text\",\"(\"],\n  [\"identifier\",\"prompt-for-cd\"],\n  [\"text\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"   \"],\n  [\"string\",\"\\\"Prompts\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"for\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"CD\"],\n  [\"text\",\"\\\"\"]\n],[\n   \"start\",\n  [\"text\",\"   (\"],\n  [\"identifier\",\"prompt-read\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"Title\\\"\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1.53\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"2\"],\n  [\"text\",\"/\"],\n  [\"constant.numeric\",\"4\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1.7\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1.7e0\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"2.9E-4\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"+42\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"-7\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"#b001\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"#b001\"],\n  [\"text\",\"/\"],\n  [\"constant.numeric\",\"100\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"#o777\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"#O777\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"#xabc55\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"#c\"],\n  [\"text\",\"(\"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"-5.6\"],\n  [\"text\",\"))\"]\n],[\n   \"start\",\n  [\"text\",\"   (\"],\n  [\"identifier\",\"prompt-read\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"Artist\\\"\"],\n  [\"text\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"   (\"],\n  [\"keyword.operator\",\"or\"],\n  [\"text\",\" (\"],\n  [\"identifier\",\"parse-integer\"],\n  [\"text\",\" (\"],\n  [\"identifier\",\"prompt-read\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"Rating\\\"\"],\n  [\"text\",\") \"],\n  [\"punctuation.definition.constant.character.scheme\",\"#:junk-allowed\"],\n  [\"text\",\" \"],\n  [\"constant.language\",\"#t\"],\n  [\"text\",\") \"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"  (\"],\n  [\"keyword.control\",\"if\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"x\"],\n  [\"text\",\" (\"],\n  [\"support.function\",\"format\"],\n  [\"text\",\" \"],\n  [\"constant.language\",\"#t\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"yes\\\"\"],\n  [\"text\",\") (\"],\n  [\"support.function\",\"format\"],\n  [\"text\",\" \"],\n  [\"constant.language\",\"#f\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"no\\\"\"],\n  [\"text\",\") \"],\n  [\"comment\",\";and here comment\"]\n],[\n   \"start\",\n  [\"text\",\"  ) \"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"comment\",\";; second line comment\"]\n],[\n   \"start\",\n  [\"text\",\"  '(+ \"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"2\"],\n  [\"text\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"  (\"],\n  [\"identifier\",\"position-if-not\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"char-set\"],\n  [\"text\",\":\"],\n  [\"identifier\",\"whitespace\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"line\"],\n  [\"text\",\" \"],\n  [\"punctuation.definition.constant.character.scheme\",\"#:start\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"beg\"],\n  [\"text\",\"))\"]\n],[\n   \"start\",\n  [\"text\",\"  (\"],\n  [\"support.function\",\"quote\"],\n  [\"text\",\" (\"],\n  [\"identifier\",\"privet\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"2\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"3\"],\n  [\"text\",\"))\"]\n],[\n   \"start\",\n  [\"text\",\"  '(\"],\n  [\"identifier\",\"hello\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"world\"],\n  [\"text\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"  (* \"],\n  [\"constant.numeric\",\"5\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"7\"],\n  [\"text\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"  (\"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"2\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"34\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"5\"],\n  [\"text\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"  (\"],\n  [\"punctuation.definition.constant.character.scheme\",\"#:use\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"aaaa\\\"\"],\n  [\"text\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"  (\"],\n  [\"keyword.control\",\"let\"],\n  [\"text\",\" ((\"],\n  [\"identifier\",\"x\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"10\"],\n  [\"text\",\") (\"],\n  [\"identifier\",\"y\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"20\"],\n  [\"text\",\"))\"]\n],[\n   \"start\",\n  [\"text\",\"    (\"],\n  [\"identifier\",\"display\"],\n  [\"text\",\" (+ \"],\n  [\"identifier\",\"x\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"y\"],\n  [\"text\",\"))\"]\n],[\n   \"start\",\n  [\"text\",\"  ) \"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"string\",\"\\\"asdad\"],\n  [\"constant.character.escape.scheme\",\"\\\\0\"],\n  [\"string\",\"eqweqe\\\"\"]\n],[\n   \"start\"\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_scss.json",
    "content": "[[\n   \"start\",\n  [\"comment\",\"/* style.scss */\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"variable.language\",\"#navbar\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"variable\",\"$navbar-width\"],\n  [\"text\",\": \"],\n  [\"constant.numeric\",\"800px\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"variable\",\"$items\"],\n  [\"text\",\": \"],\n  [\"constant.numeric\",\"5\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"variable\",\"$navbar-color\"],\n  [\"text\",\": \"],\n  [\"constant.numeric\",\"#ce4dd6\"],\n  [\"text\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"support.type\",\"width\"],\n  [\"text\",\": \"],\n  [\"variable\",\"$navbar-width\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"support.type\",\"border-bottom\"],\n  [\"text\",\": \"],\n  [\"constant.numeric\",\"2px\"],\n  [\"text\",\" \"],\n  [\"constant.language\",\"solid\"],\n  [\"text\",\" \"],\n  [\"variable\",\"$navbar-color\"],\n  [\"text\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"variable.language\",\"li\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"support.type\",\"float\"],\n  [\"text\",\": \"],\n  [\"support.type\",\"left\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"support.type\",\"width\"],\n  [\"text\",\": \"],\n  [\"variable\",\"$navbar-width\"],\n  [\"text\",\"/\"],\n  [\"variable\",\"$items\"],\n  [\"text\",\" \"],\n  [\"constant\",\"-\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"10px\"],\n  [\"text\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"support.type\",\"background-color\"],\n  [\"text\",\": \"],\n  [\"support.function\",\"lighten\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"$navbar-color\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"20%\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"        &\"],\n  [\"variable.language\",\":hover\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"            \"],\n  [\"support.type\",\"background-color\"],\n  [\"text\",\": \"],\n  [\"support.function\",\"lighten\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable\",\"$navbar-color\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"10%\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_sh.json",
    "content": "[[\n   \"start\",\n  [\"comment\",\"#!/bin/sh\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"comment\",\"# Script to open a browser to current branch\"]\n],[\n   \"start\",\n  [\"comment\",\"# Repo formats:\"]\n],[\n   \"start\",\n  [\"comment\",\"# ssh   git@github.com:richo/gh_pr.git\"]\n],[\n   \"start\",\n  [\"comment\",\"# http  https://richoH@github.com/richo/gh_pr.git\"]\n],[\n   \"start\",\n  [\"comment\",\"# git   git://github.com/richo/gh_pr.git\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"variable\",\"username\"],\n  [\"keyword.operator\",\"=`\"],\n  [\"identifier\",\"git\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"config\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"--\"],\n  [\"identifier\",\"get\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"github\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"user\"],\n  [\"keyword.operator\",\"`\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"support.function\",\"get_repo()\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"git\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"remote\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"-\"],\n  [\"identifier\",\"v\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"|\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"grep\"],\n  [\"text\",\" \"],\n  [\"variable\",\"$\"],\n  [\"paren.lparen\",\"{\"],\n  [\"variable\",\"@\"],\n  [\"keyword.operator\",\":-\"],\n  [\"variable\",\"$username\"],\n  [\"paren.rparen\",\"}\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"|\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"while\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"read\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"remote\"],\n  [\"punctuation.operator\",\";\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"do\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"variable\",\"repo\"],\n  [\"keyword.operator\",\"=`\"],\n  [\"support.function.builtin\",\"echo\"],\n  [\"text\",\" \"],\n  [\"variable\",\"$remote\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"|\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"grep\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"-\"],\n  [\"identifier\",\"E\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"-\"],\n  [\"identifier\",\"o\"],\n  [\"text\",\" \"],\n  [\"string.start\",\"\\\"\"],\n  [\"string\",\"git@github.com:[^ ]*\"],\n  [\"string.end\",\"\\\"\"],\n  [\"keyword.operator\",\"`\"],\n  [\"punctuation.operator\",\";\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"then\"]\n],[\n   \"start\",\n  [\"text\",\"          \"],\n  [\"support.function.builtin\",\"echo\"],\n  [\"text\",\" \"],\n  [\"variable\",\"$repo\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"|\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"sed\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"-\"],\n  [\"identifier\",\"e\"],\n  [\"text\",\" \"],\n  [\"string.start\",\"\\\"\"],\n  [\"string\",\"s/^git@github\\\\.com://\"],\n  [\"string.end\",\"\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"-\"],\n  [\"identifier\",\"e\"],\n  [\"text\",\" \"],\n  [\"string.start\",\"\\\"\"],\n  [\"string\",\"s/\\\\.git$//\"],\n  [\"string.end\",\"\\\"\"]\n],[\n   \"start\",\n  [\"text\",\"          \"],\n  [\"support.function.builtin\",\"exit\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"keyword\",\"fi\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"variable\",\"repo\"],\n  [\"keyword.operator\",\"=`\"],\n  [\"support.function.builtin\",\"echo\"],\n  [\"text\",\" \"],\n  [\"variable\",\"$remote\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"|\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"grep\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"-\"],\n  [\"identifier\",\"E\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"-\"],\n  [\"identifier\",\"o\"],\n  [\"text\",\" \"],\n  [\"string.start\",\"\\\"\"],\n  [\"string\",\"https?://([^@]*@)?github.com/[^ ]*\\\\.git\"],\n  [\"string.end\",\"\\\"\"],\n  [\"keyword.operator\",\"`\"],\n  [\"punctuation.operator\",\";\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"then\"]\n],[\n   \"start\",\n  [\"text\",\"          \"],\n  [\"support.function.builtin\",\"echo\"],\n  [\"text\",\" \"],\n  [\"variable\",\"$repo\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"|\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"sed\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"-\"],\n  [\"identifier\",\"e\"],\n  [\"text\",\" \"],\n  [\"string.start\",\"\\\"\"],\n  [\"string\",\"s|^https?://||\"],\n  [\"string.end\",\"\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"-\"],\n  [\"identifier\",\"e\"],\n  [\"text\",\" \"],\n  [\"string.start\",\"\\\"\"],\n  [\"string\",\"s/^.*github\\\\.com\\\\///\"],\n  [\"string.end\",\"\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"-\"],\n  [\"identifier\",\"e\"],\n  [\"text\",\" \"],\n  [\"string.start\",\"\\\"\"],\n  [\"string\",\"s/\\\\.git$//\"],\n  [\"string.end\",\"\\\"\"]\n],[\n   \"start\",\n  [\"text\",\"          \"],\n  [\"support.function.builtin\",\"exit\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"keyword\",\"fi\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"variable\",\"repo\"],\n  [\"keyword.operator\",\"=`\"],\n  [\"support.function.builtin\",\"echo\"],\n  [\"text\",\" \"],\n  [\"variable\",\"$remote\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"|\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"grep\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"-\"],\n  [\"identifier\",\"E\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"-\"],\n  [\"identifier\",\"o\"],\n  [\"text\",\" \"],\n  [\"string.start\",\"\\\"\"],\n  [\"string\",\"git://github.com/[^ ]*\\\\.git\"],\n  [\"string.end\",\"\\\"\"],\n  [\"keyword.operator\",\"`\"],\n  [\"punctuation.operator\",\";\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"then\"]\n],[\n   \"start\",\n  [\"text\",\"          \"],\n  [\"support.function.builtin\",\"echo\"],\n  [\"text\",\" \"],\n  [\"variable\",\"$repo\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"|\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"sed\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"-\"],\n  [\"identifier\",\"e\"],\n  [\"text\",\" \"],\n  [\"string.start\",\"\\\"\"],\n  [\"string\",\"s|^git://github.com/||\"],\n  [\"string.end\",\"\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"-\"],\n  [\"identifier\",\"e\"],\n  [\"text\",\" \"],\n  [\"string.start\",\"\\\"\"],\n  [\"string\",\"s/\\\\.git$//\"],\n  [\"string.end\",\"\\\"\"]\n],[\n   \"start\",\n  [\"text\",\"          \"],\n  [\"support.function.builtin\",\"exit\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"keyword\",\"fi\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"done\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"text\",\" \"],\n  [\"variable.language\",\"$?\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"-\"],\n  [\"identifier\",\"eq\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\" \"],\n  [\"paren.rparen\",\"]\"],\n  [\"punctuation.operator\",\";\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"then\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"support.function.builtin\",\"echo\"],\n  [\"text\",\" \"],\n  [\"string.start\",\"\\\"\"],\n  [\"string\",\"Couldn't find a valid remote\"],\n  [\"string.end\",\"\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\">\"],\n  [\"support.function\",\"&2\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"support.function.builtin\",\"exit\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"fi\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"support.function.builtin\",\"echo\"],\n  [\"text\",\" \"],\n  [\"variable\",\"$\"],\n  [\"paren.lparen\",\"{\"],\n  [\"keyword.operator\",\"#\"],\n  [\"variable\",\"x\"],\n  [\"paren.lparen\",\"[\"],\n  [\"text\",\"@\"],\n  [\"paren.rparen\",\"]}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"variable\",\"repo\"],\n  [\"keyword.operator\",\"=`\"],\n  [\"identifier\",\"get_repo\"],\n  [\"text\",\" \"],\n  [\"variable\",\"$@\"],\n  [\"keyword.operator\",\"`\"],\n  [\"punctuation.operator\",\";\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"then\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"variable\",\"branch\"],\n  [\"keyword.operator\",\"=`\"],\n  [\"identifier\",\"git\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"symbolic\"],\n  [\"keyword.operator\",\"-\"],\n  [\"identifier\",\"ref\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"HEAD\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"2\"],\n  [\"keyword.operator\",\">/\"],\n  [\"identifier\",\"dev\"],\n  [\"keyword.operator\",\"/\"],\n  [\"identifier\",\"null\"],\n  [\"keyword.operator\",\"`\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"support.function.builtin\",\"echo\"],\n  [\"text\",\" \"],\n  [\"string.start\",\"\\\"\"],\n  [\"string\",\"http://github.com/\"],\n  [\"variable\",\"$repo\"],\n  [\"string\",\"/pull/new/\"],\n  [\"variable\",\"$\"],\n  [\"paren.lparen\",\"{\"],\n  [\"variable\",\"branch\"],\n  [\"keyword.operator\",\"##\"],\n  [\"identifier\",\"refs\"],\n  [\"keyword.operator\",\"/\"],\n  [\"identifier\",\"heads\"],\n  [\"keyword.operator\",\"/\"],\n  [\"paren.rparen\",\"}\"],\n  [\"string.end\",\"\\\"\"]\n],[\n   \"start\",\n  [\"keyword\",\"else\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"support.function.builtin\",\"exit\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"]\n],[\n   \"start\",\n  [\"keyword\",\"fi\"]\n],[\n   \"start\"\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_sjs.json",
    "content": "[[\n   \"start\",\n  [\"storage.type\",\"var\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"each\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"map\"],\n  [\"text\",\" \"],\n  [\"paren.rparen\",\"}\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"require\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"'sjs:sequence'\"],\n  [\"paren.rparen\",\")\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"storage.type\",\"var\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"get\"],\n  [\"text\",\" \"],\n  [\"paren.rparen\",\"}\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"require\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"'sjs:http'\"],\n  [\"paren.rparen\",\")\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"storage.type\",\"function\"],\n  [\"text\",\" \"],\n  [\"entity.name.function\",\"foo\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable.parameter\",\"items\"],\n  [\"punctuation.operator\",\", \"],\n  [\"variable.parameter\",\"nada\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   [\"no_regex\"],\n  [\"text\",\"    \"],\n  [\"storage.type\",\"var\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"component\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"name\"],\n  [\"punctuation.operator\",\":\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"Ace\\\"\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"role\"],\n  [\"punctuation.operator\",\":\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"Editor\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.rparen\",\"}\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   [\"qqstring\",\"no_regex\"],\n  [\"text\",\"    \"],\n  [\"storage.type\",\"console\"],\n  [\"punctuation.operator\",\".\"],\n  [\"support.function.firebug\",\"log\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\"\"]\n],[\n   [\"qqstring\",\"no_regex\"],\n  [\"string\",\"        Welcome, \"],\n  [\"paren.lparen\",\"#{\"],\n  [\"identifier\",\"component\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"name\"],\n  [\"paren.rparen\",\"}\"]\n],[\n   [\"no_regex\"],\n  [\"string\",\"    \\\"\"],\n  [\"punctuation.operator\",\".\"],\n  [\"identifier\",\"trim\"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\"))\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   [\"no_regex\"]\n],[\n   [\"no_regex\"],\n  [\"text\",\"    \"],\n  [\"identifier\",\"logging\"],\n  [\"punctuation.operator\",\".\"],\n  [\"identifier\",\"debug\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"`Component added: \"],\n  [\"paren.lparen\",\"$\"],\n  [\"identifier\",\"String\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"component\"],\n  [\"paren.rparen\",\")\"],\n  [\"string\",\" (\"],\n  [\"paren.lparen\",\"${\"],\n  [\"identifier\",\"component\"],\n  [\"paren.rparen\",\"}\"],\n  [\"string\",\")`\"],\n  [\"paren.rparen\",\")\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   [\"no_regex\"]\n],[\n   [\"bstring\",\"no_regex\"],\n  [\"text\",\"    \"],\n  [\"storage.type\",\"console\"],\n  [\"punctuation.operator\",\".\"],\n  [\"support.function.firebug\",\"log\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"`\"]\n],[\n   [\"string_interp\",\"string_interp\",\"bstring\",\"no_regex\"],\n  [\"string\",\"        Welcome, {\"],\n  [\"paren.lparen\",\"${\"],\n  [\"storage.type\",\"function\"],\n  [\"text\",\"() \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   [\"string_interp\",\"string_interp\",\"bstring\",\"no_regex\"],\n  [\"text\",\"            \"],\n  [\"keyword\",\"return\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"x\"],\n  [\"text\",\": \"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"y\"],\n  [\"text\",\": \"],\n  [\"string\",\"\\\"why?}\\\"\"],\n  [\"paren.rparen\",\"}\"],\n  [\"text\",\";\"]\n],[\n   [\"bstring\",\"no_regex\"],\n  [\"text\",\"        \"],\n  [\"paren.rparen\",\"}\"],\n  [\"text\",\"()\"],\n  [\"paren.rparen\",\"}\"]\n],[\n   [\"no_regex\"],\n  [\"string\",\"    `\"],\n  [\"punctuation.operator\",\".\"],\n  [\"identifier\",\"trim\"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\"))\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   [\"no_regex\"]\n],[\n   [\"no_regex\"],\n  [\"text\",\"    \"],\n  [\"keyword\",\"waitfor\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   [\"no_regex\"],\n  [\"text\",\"        \"],\n  [\"identifier\",\"items\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"..\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"each\"],\n  [\"punctuation.operator\",\".\"],\n  [\"identifier\",\"par\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"],\n  [\"text\",\" \"],\n  [\"paren.rparen\",\"|\"],\n  [\"variable.parameter\",\"item\"],\n  [\"paren.rparen\",\"|\"]\n],[\n   [\"no_regex\"],\n  [\"text\",\"            \"],\n  [\"keyword\",\"get\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"item\"],\n  [\"paren.rparen\",\")\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   [\"no_regex\"],\n  [\"text\",\"        \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   [\"no_regex\"],\n  [\"text\",\"    \"],\n  [\"paren.rparen\",\"}\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"and\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   [\"no_regex\"],\n  [\"text\",\"        \"],\n  [\"storage.type\",\"var\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"lengths\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"items\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"..\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"map\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"i\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"->\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"i\"],\n  [\"punctuation.operator\",\".\"],\n  [\"support.constant\",\"length\"],\n  [\"paren.rparen\",\")\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   [\"no_regex\"],\n  [\"text\",\"    \"],\n  [\"paren.rparen\",\"}\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"or\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   [\"no_regex\"],\n  [\"text\",\"        \"],\n  [\"variable.language\",\"hold\"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"1500\"],\n  [\"paren.rparen\",\")\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   [\"no_regex\"],\n  [\"text\",\"        \"],\n  [\"keyword\",\"throw\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"new\"],\n  [\"text\",\" \"],\n  [\"variable.language\",\"Error\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\"timed out\\\"\"],\n  [\"paren.rparen\",\")\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   [\"no_regex\"],\n  [\"text\",\"    \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   [\"no_regex\"],\n  [\"paren.rparen\",\"}\"],\n  [\"text\",\"\\t\"],\n  [\"comment\",\"// Real Tab.\"]\n],[\n   [\"no_regex\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_smarty.json",
    "content": "[[\n   \"start\",\n  [\"punctuation.section.embedded.begin.smarty\",\"{\"],\n  [\"keyword.control.smarty\",\"foreach\"],\n  [\"source.smarty\",\" \"],\n  [\"punctuation.definition.variable.smarty\",\"$\"],\n  [\"variable.other.smarty\",\"foo\"],\n  [\"source.smarty\",\" as \"],\n  [\"punctuation.definition.variable.smarty\",\"$\"],\n  [\"variable.other.smarty\",\"bar\"],\n  [\"punctuation.section.embedded.end.smarty\",\"}\"]\n],[\n   \"start\",\n  [\"text.xml\",\"  \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.anchor.tag-name.xml\",\"a\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"href\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"\"],\n  [\"punctuation.section.embedded.begin.smarty\",\"{\"],\n  [\"punctuation.definition.variable.smarty\",\"$\"],\n  [\"variable.other.smarty\",\"bar\"],\n  [\"source.smarty\",\".zig\"],\n  [\"punctuation.section.embedded.end.smarty\",\"}\"],\n  [\"string.attribute-value.xml\",\"\\\"\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"punctuation.section.embedded.begin.smarty\",\"{\"],\n  [\"punctuation.definition.variable.smarty\",\"$\"],\n  [\"variable.other.smarty\",\"bar\"],\n  [\"source.smarty\",\".zag\"],\n  [\"punctuation.section.embedded.end.smarty\",\"}\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.anchor.tag-name.xml\",\"a\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"  \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.anchor.tag-name.xml\",\"a\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"href\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"\"],\n  [\"punctuation.section.embedded.begin.smarty\",\"{\"],\n  [\"punctuation.definition.variable.smarty\",\"$\"],\n  [\"variable.other.smarty\",\"bar\"],\n  [\"source.smarty\",\".zig2\"],\n  [\"punctuation.section.embedded.end.smarty\",\"}\"],\n  [\"string.attribute-value.xml\",\"\\\"\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"punctuation.section.embedded.begin.smarty\",\"{\"],\n  [\"punctuation.definition.variable.smarty\",\"$\"],\n  [\"variable.other.smarty\",\"bar\"],\n  [\"source.smarty\",\".zag2\"],\n  [\"punctuation.section.embedded.end.smarty\",\"}\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.anchor.tag-name.xml\",\"a\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"  \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.anchor.tag-name.xml\",\"a\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"href\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"\"],\n  [\"punctuation.section.embedded.begin.smarty\",\"{\"],\n  [\"punctuation.definition.variable.smarty\",\"$\"],\n  [\"variable.other.smarty\",\"bar\"],\n  [\"source.smarty\",\".zig3\"],\n  [\"punctuation.section.embedded.end.smarty\",\"}\"],\n  [\"string.attribute-value.xml\",\"\\\"\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"punctuation.section.embedded.begin.smarty\",\"{\"],\n  [\"punctuation.definition.variable.smarty\",\"$\"],\n  [\"variable.other.smarty\",\"bar\"],\n  [\"source.smarty\",\".zag3\"],\n  [\"punctuation.section.embedded.end.smarty\",\"}\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.anchor.tag-name.xml\",\"a\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"punctuation.section.embedded.begin.smarty\",\"{\"],\n  [\"keyword.control.smarty\",\"foreachelse\"],\n  [\"punctuation.section.embedded.end.smarty\",\"}\"]\n],[\n   \"start\",\n  [\"text.xml\",\"  There were no rows found.\"]\n],[\n   \"start\",\n  [\"punctuation.section.embedded.begin.smarty\",\"{\"],\n  [\"source.smarty\",\"/\"],\n  [\"keyword.control.smarty\",\"foreach\"],\n  [\"punctuation.section.embedded.end.smarty\",\"}\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_snippets.json",
    "content": "[[\n   \"start\",\n  [\"comment\",\"# Function\"]\n],[\n   \"start\",\n  [\"constant.language.escape\",\"snippet\"],\n  [\"text\",\" fun\"]\n],[\n   \"sn-start\",\n  [\"text\",\"\\tfunction \"],\n  [\"markup.list\",\"${\"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\"?:function_name\"],\n  [\"markup.list\",\"}\"],\n  [\"text\",\"(\"],\n  [\"markup.list\",\"${\"],\n  [\"constant.numeric\",\"2\"],\n  [\"punctuation.operator\",\":\"],\n  [\"text\",\"argument\"],\n  [\"markup.list\",\"}\"],\n  [\"text\",\") {\"]\n],[\n   \"sn-start\",\n  [\"text\",\"\\t\\t\"],\n  [\"markup.list\",\"${\"],\n  [\"constant.numeric\",\"3\"],\n  [\"punctuation.operator\",\":\"],\n  [\"text\",\"// body...\"],\n  [\"markup.list\",\"}\"]\n],[\n   \"sn-start\",\n  [\"text\",\"\\t}\"]\n],[\n   \"start\",\n  [\"comment\",\"# Anonymous Function\"]\n],[\n   \"start\",\n  [\"constant.language.escape\",\"regex \"],\n  [\"keyword\",\"/\"],\n  [\"text\",\"((=)\\\\s*|(:)\\\\s*|(\\\\()|\\\\b)\"],\n  [\"keyword\",\"/\"],\n  [\"text\",\"f\"],\n  [\"keyword\",\"/\"],\n  [\"text\",\"(\\\\))?\"],\n  [\"keyword\",\"/\"]\n],[\n   \"start\",\n  [\"constant.language.escape\",\"name\"],\n  [\"text\",\" f\"]\n],[\n   \"sn-start\",\n  [\"text\",\"\\tfunction\"],\n  [\"markup.list\",\"${\"],\n  [\"variable\",\"M1\"],\n  [\"text\",\"?: \"],\n  [\"markup.list\",\"${\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\":\"],\n  [\"text\",\"functionName\"],\n  [\"markup.list\",\"}}\"],\n  [\"text\",\"(\"],\n  [\"variable\",\"$2\"],\n  [\"text\",\") {\"]\n],[\n   \"sn-start\",\n  [\"text\",\"\\t\\t\"],\n  [\"markup.list\",\"${\"],\n  [\"constant.numeric\",\"0\"],\n  [\"punctuation.operator\",\":\"],\n  [\"keyword\",\"$TM_SELECTED_TEXT\"],\n  [\"markup.list\",\"}\"]\n],[\n   \"sn-start\",\n  [\"text\",\"\\t}\"],\n  [\"markup.list\",\"${\"],\n  [\"variable\",\"M2\"],\n  [\"text\",\"?;\"],\n  [\"markup.list\",\"}${\"],\n  [\"variable\",\"M3\"],\n  [\"text\",\"?,\"],\n  [\"markup.list\",\"}${\"],\n  [\"variable\",\"M4\"],\n  [\"text\",\"?)\"],\n  [\"markup.list\",\"}\"]\n],[\n   \"start\",\n  [\"comment\",\"# Immediate function\"]\n],[\n   \"start\",\n  [\"constant.language.escape\",\"trigger\"],\n  [\"text\",\" \\\\(?f\\\\(\"]\n],[\n   \"start\",\n  [\"constant.language.escape\",\"endTrigger\"],\n  [\"text\",\" \\\\)?\"]\n],[\n   \"start\",\n  [\"constant.language.escape\",\"snippet\"],\n  [\"text\",\" f(\"]\n],[\n   \"sn-start\",\n  [\"text\",\"\\t(function(\"],\n  [\"markup.list\",\"${\"],\n  [\"constant.numeric\",\"1\"],\n  [\"markup.list\",\"}\"],\n  [\"text\",\") {\"]\n],[\n   \"sn-start\",\n  [\"text\",\"\\t\\t\"],\n  [\"markup.list\",\"${\"],\n  [\"constant.numeric\",\"0\"],\n  [\"punctuation.operator\",\":\"],\n  [\"markup.list\",\"${\"],\n  [\"keyword\",\"TM_SELECTED_TEXT\"],\n  [\"punctuation.operator\",\":\"],\n  [\"text\",\"/* code */\"],\n  [\"markup.list\",\"}}\"]\n],[\n   \"sn-start\",\n  [\"text\",\"\\t}(\"],\n  [\"markup.list\",\"${\"],\n  [\"constant.numeric\",\"1\"],\n  [\"markup.list\",\"}\"],\n  [\"text\",\"));\"]\n],[\n   \"start\",\n  [\"comment\",\"# if\"]\n],[\n   \"start\",\n  [\"constant.language.escape\",\"snippet\"],\n  [\"text\",\" if\"]\n],[\n   \"sn-start\",\n  [\"text\",\"\\tif (\"],\n  [\"markup.list\",\"${\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\":\"],\n  [\"text\",\"true\"],\n  [\"markup.list\",\"}\"],\n  [\"text\",\") {\"]\n],[\n   \"sn-start\",\n  [\"text\",\"\\t\\t\"],\n  [\"markup.list\",\"${\"],\n  [\"constant.numeric\",\"0\"],\n  [\"markup.list\",\"}\"]\n],[\n   \"sn-start\",\n  [\"text\",\"\\t}\"]\n],[\n   \"sn-start\",\n  [\"text\",\"\\t\"]\n],[\n   \"sn-start\",\n  [\"text\",\"\\t\"]\n],[\n   \"sn-start\",\n  [\"text\",\"\\t\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_soy_template.json",
    "content": "[[\n   \"punctuation.definition.comment.begin.soy1\",\n  [\"punctuation.definition.comment.begin.soy\",\"/**\"]\n],[\n   \"punctuation.definition.comment.begin.soy1\",\n  [\"comment.block.documentation.soy\",\" * Greets a person using \\\"Hello\\\" by default.\"]\n],[\n   \"punctuation.definition.comment.begin.soy1\",\n  [\"comment.block.documentation.soy\",\" * \"],\n  [\"support.type.soy\",\"@param\"],\n  [\"text\",\" \"],\n  [\"variable.parameter.soy\",\"name\"],\n  [\"comment.block.documentation.soy\",\" The name of the person.\"]\n],[\n   \"punctuation.definition.comment.begin.soy1\",\n  [\"comment.block.documentation.soy\",\" * \"],\n  [\"support.type.soy\",\"@param?\"],\n  [\"text\",\" \"],\n  [\"variable.parameter.soy\",\"greetingWord\"],\n  [\"comment.block.documentation.soy\",\" Optional greeting word to use instead of \\\"Hello\\\".\"]\n],[\n   \"start\",\n  [\"comment.block.documentation.soy\",\" \"],\n  [\"punctuation.definition.comment.end.soy\",\"*/\"]\n],[\n   \"start\",\n  [\"punctuation.definition.tag.begin.soy\",\"{\"],\n  [\"entity.name.tag.soy\",\"template\"],\n  [\"text\",\" \"],\n  [\"entity.name.function.soy\",\".helloName\"],\n  [\"meta.tag.template.soy\",\" #eee\"],\n  [\"punctuation.definition.tag.end.soy\",\"}\"]\n],[\n   \"start\",\n  [\"text.xml\",\"  \"],\n  [\"punctuation.definition.tag.begin.soy\",\"{\"],\n  [\"entity.name.tag.soy\",\"if\"],\n  [\"meta.tag.if.soy\",\" \"],\n  [\"keyword.operator.soy\",\"not\"],\n  [\"meta.tag.if.soy\",\" \"],\n  [\"variable.other.soy\",\"$greetingWord\"],\n  [\"punctuation.definition.tag.end.soy\",\"}\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    Hello \"],\n  [\"punctuation.definition.tag.begin.soy\",\"{\"],\n  [\"variable.other.soy\",\"$name\"],\n  [\"punctuation.definition.tag.end.soy\",\"}\"],\n  [\"text.xml\",\"!\"]\n],[\n   \"start\",\n  [\"text.xml\",\"  \"],\n  [\"punctuation.definition.tag.begin.soy\",\"{\"],\n  [\"text\",\"else\"],\n  [\"punctuation.definition.tag.end.soy\",\"}\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"punctuation.definition.tag.begin.soy\",\"{\"],\n  [\"variable.other.soy\",\"$greetingWord\"],\n  [\"punctuation.definition.tag.end.soy\",\"}\"],\n  [\"text.xml\",\" \"],\n  [\"punctuation.definition.tag.begin.soy\",\"{\"],\n  [\"variable.other.soy\",\"$name\"],\n  [\"punctuation.definition.tag.end.soy\",\"}\"],\n  [\"text.xml\",\"!\"]\n],[\n   \"start\",\n  [\"text.xml\",\"  \"],\n  [\"punctuation.definition.tag.begin.soy\",\"{/\"],\n  [\"entity.name.tag.soy\",\"if\"],\n  [\"punctuation.definition.tag.end.soy\",\"}\"]\n],[\n   \"start\",\n  [\"punctuation.definition.tag.begin.soy\",\"{/\"],\n  [\"meta.tag.template.soy\",\"template\"],\n  [\"punctuation.definition.tag.end.soy\",\"}\"]\n],[\n   \"start\"\n],[\n   \"punctuation.definition.comment.begin.soy1\",\n  [\"punctuation.definition.comment.begin.soy\",\"/**\"]\n],[\n   \"punctuation.definition.comment.begin.soy1\",\n  [\"comment.block.documentation.soy\",\" * Greets a person and optionally a list of other people.\"]\n],[\n   \"punctuation.definition.comment.begin.soy1\",\n  [\"comment.block.documentation.soy\",\" * \"],\n  [\"support.type.soy\",\"@param\"],\n  [\"text\",\" \"],\n  [\"variable.parameter.soy\",\"name\"],\n  [\"comment.block.documentation.soy\",\" The name of the person.\"]\n],[\n   \"punctuation.definition.comment.begin.soy1\",\n  [\"comment.block.documentation.soy\",\" * \"],\n  [\"support.type.soy\",\"@param\"],\n  [\"text\",\" \"],\n  [\"variable.parameter.soy\",\"additionalNames\"],\n  [\"comment.block.documentation.soy\",\" The additional names to greet. May be an empty list.\"]\n],[\n   \"start\",\n  [\"comment.block.documentation.soy\",\" \"],\n  [\"punctuation.definition.comment.end.soy\",\"*/\"]\n],[\n   \"start\",\n  [\"punctuation.definition.tag.begin.soy\",\"{\"],\n  [\"entity.name.tag.soy\",\"template\"],\n  [\"text\",\" \"],\n  [\"entity.name.function.soy\",\".helloNames\"],\n  [\"punctuation.definition.tag.end.soy\",\"}\"]\n],[\n   \"start\",\n  [\"text.xml\",\"  \"],\n  [\"comment.line.double-slash.soy\",\"//\"],\n  [\"comment.line.double-slash.soy\",\" Greet the person.\"]\n],[\n   \"start\",\n  [\"text.xml\",\"  \"],\n  [\"punctuation.definition.tag.begin.soy\",\"{\"],\n  [\"entity.name.tag.soy\",\"call\"],\n  [\"variable.parameter.soy\",\" .helloName\"],\n  [\"meta.tag.call.soy\",\" \"],\n  [\"entity.other.attribute-name.soy\",\"data\"],\n  [\"keyword.operator.soy\",\"=\"],\n  [\"string.quoted.double\",\"\\\"all\\\"\"],\n  [\"meta.tag.call.soy\",\" /\"],\n  [\"punctuation.definition.tag.end.soy\",\"}\"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"br\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"  \"],\n  [\"comment.line.double-slash.soy\",\"//\"],\n  [\"comment.line.double-slash.soy\",\" Greet the additional people.\"]\n],[\n   \"start\",\n  [\"text.xml\",\"  \"],\n  [\"punctuation.definition.tag.begin.soy\",\"{\"],\n  [\"entity.name.tag.soy\",\"foreach\"],\n  [\"meta.tag.foreach.soy\",\" \"],\n  [\"variable.other.soy\",\"$additionalName\"],\n  [\"meta.tag.foreach.soy\",\" \"],\n  [\"keyword.operator.soy\",\"in\"],\n  [\"meta.tag.foreach.soy\",\" \"],\n  [\"variable.other.soy\",\"$additionalNames\"],\n  [\"punctuation.definition.tag.end.soy\",\"}\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"punctuation.definition.tag.begin.soy\",\"{\"],\n  [\"entity.name.tag.soy\",\"call\"],\n  [\"variable.parameter.soy\",\" .helloName\"],\n  [\"punctuation.definition.tag.end.soy\",\"}\"]\n],[\n   \"start\",\n  [\"text.xml\",\"      \"],\n  [\"punctuation.definition.tag.begin.soy\",\"{\"],\n  [\"entity.name.tag.soy\",\"param\"],\n  [\"meta.tag.param.soy\",\" \"],\n  [\"entity.other.attribute-name.soy\",\"name\"],\n  [\"keyword.operator.soy\",\":\"],\n  [\"meta.tag.param.soy\",\" \"],\n  [\"variable.other.soy\",\"$additionalName\"],\n  [\"meta.tag.param.soy\",\" /\"],\n  [\"punctuation.definition.tag.end.soy\",\"}\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"punctuation.definition.tag.begin.soy\",\"{/\"],\n  [\"meta.tag.call.soy\",\"call\"],\n  [\"punctuation.definition.tag.end.soy\",\"}\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"punctuation.definition.tag.begin.soy\",\"{\"],\n  [\"entity.name.tag.soy\",\"if\"],\n  [\"meta.tag.if.soy\",\" \"],\n  [\"keyword.operator.soy\",\"not\"],\n  [\"meta.tag.if.soy\",\" \"],\n  [\"support.function.soy\",\"isLast\"],\n  [\"meta.tag.if.soy\",\"(\"],\n  [\"variable.other.soy\",\"$additionalName\"],\n  [\"meta.tag.if.soy\",\")\"],\n  [\"punctuation.definition.tag.end.soy\",\"}\"]\n],[\n   \"start\",\n  [\"text.xml\",\"      \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"br\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\"  \"],\n  [\"comment.line.double-slash.soy\",\"//\"],\n  [\"comment.line.double-slash.soy\",\" break after every line except the last\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"punctuation.definition.tag.begin.soy\",\"{/\"],\n  [\"entity.name.tag.soy\",\"if\"],\n  [\"punctuation.definition.tag.end.soy\",\"}\"]\n],[\n   \"start\",\n  [\"text.xml\",\"  \"],\n  [\"punctuation.definition.tag.begin.soy\",\"{\"],\n  [\"text\",\"ifempty\"],\n  [\"punctuation.definition.tag.end.soy\",\"}\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    No additional people to greet.\"]\n],[\n   \"start\",\n  [\"text.xml\",\"  \"],\n  [\"punctuation.definition.tag.begin.soy\",\"{/\"],\n  [\"entity.name.tag.soy\",\"foreach\"],\n  [\"punctuation.definition.tag.end.soy\",\"}\"]\n],[\n   \"start\",\n  [\"punctuation.definition.tag.begin.soy\",\"{/\"],\n  [\"meta.tag.template.soy\",\"template\"],\n  [\"punctuation.definition.tag.end.soy\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"punctuation.definition.tag.begin.soy\",\"{/\"],\n  [\"entity.name.tag.soy\",\"foreach\"],\n  [\"punctuation.definition.tag.end.soy\",\"}\"]\n],[\n   \"start\",\n  [\"punctuation.definition.tag.begin.soy\",\"{\"],\n  [\"entity.name.tag.soy\",\"if\"],\n  [\"meta.tag.if.soy\",\" \"],\n  [\"support.function.soy\",\"length\"],\n  [\"meta.tag.if.soy\",\"(\"],\n  [\"variable.other.soy\",\"$items\"],\n  [\"meta.tag.if.soy\",\") > 5\"],\n  [\"punctuation.definition.tag.end.soy\",\"}\"]\n],[\n   \"start\",\n  [\"punctuation.definition.tag.begin.soy\",\"{\"],\n  [\"entity.name.tag.soy\",\"msg\"],\n  [\"meta.tag.msg.soy\",\" \"],\n  [\"entity.other.attribute-name.soy\",\"desc\"],\n  [\"keyword.operator.soy\",\"=\"],\n  [\"string.quoted.double\",\"\\\"Says hello to the user.\\\"\"],\n  [\"punctuation.definition.tag.end.soy\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"punctuation.definition.tag.begin.soy\",\"{\"],\n  [\"entity.name.tag.soy\",\"namespace\"],\n  [\"text\",\" \"],\n  [\"variable.parameter.soy\",\"ns\"],\n  [\"text\",\" autoescape=\\\"contextual\\\"\"],\n  [\"punctuation.definition.tag.end.soy\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"punctuation.definition.comment.begin.soy\",\"/**\"],\n  [\"comment.block.documentation.soy\",\" Example. \"],\n  [\"punctuation.definition.comment.end.soy\",\"*/\"]\n],[\n   \"start\",\n  [\"punctuation.definition.tag.begin.soy\",\"{\"],\n  [\"entity.name.tag.soy\",\"template\"],\n  [\"text\",\" \"],\n  [\"entity.name.function.soy\",\".example\"],\n  [\"punctuation.definition.tag.end.soy\",\"}\"]\n],[\n   \"start\",\n  [\"text.xml\",\"  foo is \"],\n  [\"punctuation.definition.tag.begin.soy\",\"{\"],\n  [\"variable.other.soy\",\"$ij.foo\"],\n  [\"punctuation.definition.tag.end.soy\",\"}\"]\n],[\n   \"start\",\n  [\"punctuation.definition.tag.begin.soy\",\"{/\"],\n  [\"meta.tag.template.soy\",\"template\"],\n  [\"punctuation.definition.tag.end.soy\",\"}\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_space.json",
    "content": "[[\n   \"start\",\n  [\"variable\",\"query\"]\n],[\n   \"start\",\n  [\"empty_line\",\" \"],\n  [\"variable\",\"count\"],\n  [\"keyword.operator\",\" \"],\n  [\"string\",\"10\"]\n],[\n   \"start\",\n  [\"empty_line\",\" \"],\n  [\"variable\",\"created\"],\n  [\"keyword.operator\",\" \"],\n  [\"string\",\"2011-06-21T08:10:46Z\"]\n],[\n   \"start\",\n  [\"empty_line\",\" \"],\n  [\"variable\",\"lang\"],\n  [\"keyword.operator\",\" \"],\n  [\"string\",\"en-US\"]\n],[\n   \"start\",\n  [\"empty_line\",\" \"],\n  [\"variable\",\"results\"]\n],[\n   \"start\",\n  [\"empty_line\",\"  \"],\n  [\"variable\",\"photo\"]\n],[\n   \"start\",\n  [\"empty_line\",\"   \"],\n  [\"variable\",\"0\"]\n],[\n   \"start\",\n  [\"empty_line\",\"    \"],\n  [\"variable\",\"farm\"],\n  [\"keyword.operator\",\" \"],\n  [\"string\",\"6\"]\n],[\n   \"start\",\n  [\"empty_line\",\"    \"],\n  [\"variable\",\"id\"],\n  [\"keyword.operator\",\" \"],\n  [\"string\",\"5855620975\"]\n],[\n   \"start\",\n  [\"empty_line\",\"    \"],\n  [\"variable\",\"isfamily\"],\n  [\"keyword.operator\",\" \"],\n  [\"string\",\"0\"]\n],[\n   \"start\",\n  [\"empty_line\",\"    \"],\n  [\"variable\",\"isfriend\"],\n  [\"keyword.operator\",\" \"],\n  [\"string\",\"0\"]\n],[\n   \"start\",\n  [\"empty_line\",\"    \"],\n  [\"variable\",\"ispublic\"],\n  [\"keyword.operator\",\" \"],\n  [\"string\",\"1\"]\n],[\n   \"start\",\n  [\"empty_line\",\"    \"],\n  [\"variable\",\"owner\"],\n  [\"keyword.operator\",\" \"],\n  [\"string\",\"32021554@N04\"]\n],[\n   \"start\",\n  [\"empty_line\",\"    \"],\n  [\"variable\",\"secret\"],\n  [\"keyword.operator\",\" \"],\n  [\"string\",\"f1f5e8515d\"]\n],[\n   \"start\",\n  [\"empty_line\",\"    \"],\n  [\"variable\",\"server\"],\n  [\"keyword.operator\",\" \"],\n  [\"string\",\"5110\"]\n],[\n   \"start\",\n  [\"empty_line\",\"    \"],\n  [\"variable\",\"title\"],\n  [\"keyword.operator\",\" \"],\n  [\"string\",\"7087 bandit cat\"]\n],[\n   \"start\",\n  [\"empty_line\",\"   \"],\n  [\"variable\",\"1\"]\n],[\n   \"start\",\n  [\"empty_line\",\"    \"],\n  [\"variable\",\"farm\"],\n  [\"keyword.operator\",\" \"],\n  [\"string\",\"4\"]\n],[\n   \"start\",\n  [\"empty_line\",\"    \"],\n  [\"variable\",\"id\"],\n  [\"keyword.operator\",\" \"],\n  [\"string\",\"5856170534\"]\n],[\n   \"start\",\n  [\"empty_line\",\"    \"],\n  [\"variable\",\"isfamily\"],\n  [\"keyword.operator\",\" \"],\n  [\"string\",\"0\"]\n],[\n   \"start\",\n  [\"empty_line\",\"    \"],\n  [\"variable\",\"isfriend\"],\n  [\"keyword.operator\",\" \"],\n  [\"string\",\"0\"]\n],[\n   \"start\",\n  [\"empty_line\",\"    \"],\n  [\"variable\",\"ispublic\"],\n  [\"keyword.operator\",\" \"],\n  [\"string\",\"1\"]\n],[\n   \"start\",\n  [\"empty_line\",\"    \"],\n  [\"variable\",\"owner\"],\n  [\"keyword.operator\",\" \"],\n  [\"string\",\"32021554@N04\"]\n],[\n   \"start\",\n  [\"empty_line\",\"    \"],\n  [\"variable\",\"secret\"],\n  [\"keyword.operator\",\" \"],\n  [\"string\",\"ff1efb2a6f\"]\n],[\n   \"start\",\n  [\"empty_line\",\"    \"],\n  [\"variable\",\"server\"],\n  [\"keyword.operator\",\" \"],\n  [\"string\",\"3217\"]\n],[\n   \"start\",\n  [\"empty_line\",\"    \"],\n  [\"variable\",\"title\"],\n  [\"keyword.operator\",\" \"],\n  [\"string\",\"6975 rusty cat\"]\n],[\n   \"start\",\n  [\"empty_line\",\"   \"],\n  [\"variable\",\"2\"]\n],[\n   \"start\",\n  [\"empty_line\",\"    \"],\n  [\"variable\",\"farm\"],\n  [\"keyword.operator\",\" \"],\n  [\"string\",\"6\"]\n],[\n   \"start\",\n  [\"empty_line\",\"    \"],\n  [\"variable\",\"id\"],\n  [\"keyword.operator\",\" \"],\n  [\"string\",\"5856172972\"]\n],[\n   \"start\",\n  [\"empty_line\",\"    \"],\n  [\"variable\",\"isfamily\"],\n  [\"keyword.operator\",\" \"],\n  [\"string\",\"0\"]\n],[\n   \"start\",\n  [\"empty_line\",\"    \"],\n  [\"variable\",\"isfriend\"],\n  [\"keyword.operator\",\" \"],\n  [\"string\",\"0\"]\n],[\n   \"start\",\n  [\"empty_line\",\"    \"],\n  [\"variable\",\"ispublic\"],\n  [\"keyword.operator\",\" \"],\n  [\"string\",\"1\"]\n],[\n   \"start\",\n  [\"empty_line\",\"    \"],\n  [\"variable\",\"owner\"],\n  [\"keyword.operator\",\" \"],\n  [\"string\",\"51249875@N03\"]\n],[\n   \"start\",\n  [\"empty_line\",\"    \"],\n  [\"variable\",\"secret\"],\n  [\"keyword.operator\",\" \"],\n  [\"string\",\"6c6887347c\"]\n],[\n   \"start\",\n  [\"empty_line\",\"    \"],\n  [\"variable\",\"server\"],\n  [\"keyword.operator\",\" \"],\n  [\"string\",\"5192\"]\n],[\n   \"start\",\n  [\"empty_line\",\"    \"],\n  [\"variable\",\"title\"],\n  [\"keyword.operator\",\" \"],\n  [\"string\",\"watermarked-cats\"]\n],[\n   \"start\",\n  [\"empty_line\",\"   \"],\n  [\"variable\",\"3\"]\n],[\n   \"start\",\n  [\"empty_line\",\"    \"],\n  [\"variable\",\"farm\"],\n  [\"keyword.operator\",\" \"],\n  [\"string\",\"6\"]\n],[\n   \"start\",\n  [\"empty_line\",\"    \"],\n  [\"variable\",\"id\"],\n  [\"keyword.operator\",\" \"],\n  [\"string\",\"5856168328\"]\n],[\n   \"start\",\n  [\"empty_line\",\"    \"],\n  [\"variable\",\"isfamily\"],\n  [\"keyword.operator\",\" \"],\n  [\"string\",\"0\"]\n],[\n   \"start\",\n  [\"empty_line\",\"    \"],\n  [\"variable\",\"isfriend\"],\n  [\"keyword.operator\",\" \"],\n  [\"string\",\"0\"]\n],[\n   \"start\",\n  [\"empty_line\",\"    \"],\n  [\"variable\",\"ispublic\"],\n  [\"keyword.operator\",\" \"],\n  [\"string\",\"1\"]\n],[\n   \"start\",\n  [\"empty_line\",\"    \"],\n  [\"variable\",\"owner\"],\n  [\"keyword.operator\",\" \"],\n  [\"string\",\"32021554@N04\"]\n],[\n   \"start\",\n  [\"empty_line\",\"    \"],\n  [\"variable\",\"secret\"],\n  [\"keyword.operator\",\" \"],\n  [\"string\",\"0c1cfdf64c\"]\n],[\n   \"start\",\n  [\"empty_line\",\"    \"],\n  [\"variable\",\"server\"],\n  [\"keyword.operator\",\" \"],\n  [\"string\",\"5078\"]\n],[\n   \"start\",\n  [\"empty_line\",\"    \"],\n  [\"variable\",\"title\"],\n  [\"keyword.operator\",\" \"],\n  [\"string\",\"7020 mandy cat\"]\n],[\n   \"start\",\n  [\"empty_line\",\"   \"],\n  [\"variable\",\"4\"]\n],[\n   \"start\",\n  [\"empty_line\",\"    \"],\n  [\"variable\",\"farm\"],\n  [\"keyword.operator\",\" \"],\n  [\"string\",\"3\"]\n],[\n   \"start\",\n  [\"empty_line\",\"    \"],\n  [\"variable\",\"id\"],\n  [\"keyword.operator\",\" \"],\n  [\"string\",\"5856171774\"]\n],[\n   \"start\",\n  [\"empty_line\",\"    \"],\n  [\"variable\",\"isfamily\"],\n  [\"keyword.operator\",\" \"],\n  [\"string\",\"0\"]\n],[\n   \"start\",\n  [\"empty_line\",\"    \"],\n  [\"variable\",\"isfriend\"],\n  [\"keyword.operator\",\" \"],\n  [\"string\",\"0\"]\n],[\n   \"start\",\n  [\"empty_line\",\"    \"],\n  [\"variable\",\"ispublic\"],\n  [\"keyword.operator\",\" \"],\n  [\"string\",\"1\"]\n],[\n   \"start\",\n  [\"empty_line\",\"    \"],\n  [\"variable\",\"owner\"],\n  [\"keyword.operator\",\" \"],\n  [\"string\",\"32021554@N04\"]\n],[\n   \"start\",\n  [\"empty_line\",\"    \"],\n  [\"variable\",\"secret\"],\n  [\"keyword.operator\",\" \"],\n  [\"string\",\"7f5a3180ab\"]\n],[\n   \"start\",\n  [\"empty_line\",\"    \"],\n  [\"variable\",\"server\"],\n  [\"keyword.operator\",\" \"],\n  [\"string\",\"2696\"]\n],[\n   \"start\",\n  [\"empty_line\",\"    \"],\n  [\"variable\",\"title\"],\n  [\"keyword.operator\",\" \"],\n  [\"string\",\"7448 bobby cat\"]\n],[\n   \"key\"\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_sql.json",
    "content": "[[\n   \"start\",\n  [\"keyword\",\"SELECT\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"city\"],\n  [\"text\",\", \"],\n  [\"support.function\",\"COUNT\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"id\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"AS\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"users_count\"]\n],[\n   \"start\",\n  [\"keyword\",\"FROM\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"users\"]\n],[\n   \"start\",\n  [\"keyword\",\"WHERE\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"group_name\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"string\",\"'salesman'\"]\n],[\n   \"start\",\n  [\"keyword\",\"AND\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"created\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\">\"],\n  [\"text\",\" \"],\n  [\"string\",\"'2011-05-21'\"]\n],[\n   \"start\",\n  [\"keyword\",\"GROUP\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"BY\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"]\n],[\n   \"start\",\n  [\"keyword\",\"ORDER\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"BY\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"2\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"DESC\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_sqlserver.json",
    "content": "[[\n   \"start\",\n  [\"comment\",\"-- =============================================\"]\n],[\n   \"start\",\n  [\"comment\",\"-- Author:\\t\\tMorgan Yarbrough\"]\n],[\n   \"start\",\n  [\"comment\",\"-- Create date: 4/27/2015\"]\n],[\n   \"start\",\n  [\"comment\",\"-- Description:\\tTest procedure that shows off language features.\"]\n],[\n   \"start\",\n  [\"comment\",\"-- \\t\\t\\t\\tIncludes non-standard folding with region comments using either\"]\n],[\n   \"start\",\n  [\"comment\",\"-- \\t\\t\\t\\tline comments or block comments (both are demonstrated below).\"]\n],[\n   \"start\",\n  [\"comment\",\"--\\t\\t\\t\\tThis mode imitates SSMS and it designed to be used with SQL Server theme.\"]\n],[\n   \"start\",\n  [\"comment\",\"-- =============================================\"]\n],[\n   \"start\",\n  [\"keyword\",\"CREATE\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"PROCEDURE\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"dbo\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"TestProcedure\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"]\n],[\n   \"start\",\n  [\"comment\",\"--#region parameters\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"identifier\",\"@vint\"],\n  [\"text\",\" \"],\n  [\"storage.type\",\"INT\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"punctuation\",\",\"],\n  [\"identifier\",\"@vdate\"],\n  [\"text\",\" \"],\n  [\"storage.type\",\"DATE\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.language\",\"NULL\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"punctuation\",\",\"],\n  [\"identifier\",\"@vdatetime\"],\n  [\"text\",\" \"],\n  [\"storage.type\",\"DATETIME\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"DATEADD\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"dd\"],\n  [\"punctuation\",\",\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation\",\",\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"GETDATE\"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\"))\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"punctuation\",\",\"],\n  [\"identifier\",\"@vvarchar\"],\n  [\"text\",\" \"],\n  [\"storage.type\",\"VARCHAR\"],\n  [\"paren.lparen\",\"(\"],\n  [\"support.function\",\"MAX\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"string.start\",\"'\"],\n  [\"string.end\",\"'\"]\n],[\n   \"start\",\n  [\"comment\",\"--#endregion\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"AS\"]\n],[\n   \"start\",\n  [\"keyword\",\"BEGIN\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"comment.start\",\"/*\"],\n  [\"comment\",\"#region set statements \"],\n  [\"comment.end\",\"*/\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"set.statement\",\"SET NOCOUNT\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"ON\"],\n  [\"punctuation\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"set.statement\",\"SET XACT_ABORT\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"ON\"],\n  [\"punctuation\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"set.statement\",\"SET QUOTED_IDENTIFIER\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"ON\"],\n  [\"punctuation\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"comment.start\",\"/*\"],\n  [\"comment\",\"#endregion\"],\n  [\"comment.end\",\"*/\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"]\n],[\n   \"doc-start\",\n  [\"text\",\"\\t\"],\n  [\"comment.doc\",\"/**\"]\n],[\n   \"doc-start\",\n  [\"comment.doc\",\"\\t * These comments will produce a fold widget\"]\n],[\n   \"start\",\n  [\"comment.doc\",\"\\t */\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"comment\",\"-- folding demonstration\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"keyword\",\"SET\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"@vint\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"CASE\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\\t\\t\\t\"],\n  [\"keyword\",\"WHEN\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"@vdate\"],\n  [\"text\",\" \"],\n  [\"constant.language\",\"IS\"],\n  [\"text\",\" \"],\n  [\"constant.language\",\"NULL\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\\t\\t\\t\\t\"],\n  [\"keyword\",\"THEN\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\\t\\t\\t\"],\n  [\"keyword\",\"ELSE\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"2\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\\t\\t\"],\n  [\"keyword\",\"END\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"comment\",\"-- another folding demonstration\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"keyword\",\"IF\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"@vint\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\" \"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"keyword\",\"BEGIN\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\"],\n  [\"keyword\",\"SET\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"@vvarchar\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"string.start\",\"'\"],\n  [\"string\",\"one\"],\n  [\"string.end\",\"'\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\"],\n  [\"keyword\",\"SET\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"@vint\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"DATEDIFF\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"dd\"],\n  [\"punctuation\",\",\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"@vdate\"],\n  [\"punctuation\",\",\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"@vdatetime\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"keyword\",\"END\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"comment\",\"-- this mode handles strings properly\"]\n],[\n   \"string.start\",\n  [\"text\",\"\\t\"],\n  [\"keyword\",\"DECLARE\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"@sql\"],\n  [\"text\",\" \"],\n  [\"storage.type\",\"NVARCHAR\"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"4000\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"N\"],\n  [\"string.start\",\"'\"],\n  [\"string\",\"SELECT TOP(1) OrderID \"]\n],[\n   \"string.start\",\n  [\"string\",\"\\t\\t\\t\\t\\t\\t\\t\\t\\tFROM Orders\"]\n],[\n   \"start\",\n  [\"string\",\"\\t\\t\\t\\t\\t\\t\\t\\t\\tWHERE @OrderDate > GETDATE()\"],\n  [\"string.end\",\"'\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\\t\\t\\t\\t\\t\\t\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"comment\",\"-- this mode is aware of built in stored procedures \"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"keyword\",\"EXECUTE\"],\n  [\"text\",\" \"],\n  [\"support.storedprocedure\",\"sp_executesql\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"@sql\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"comment\",\"-- demonstrating some syntax highlighting\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"keyword\",\"SELECT\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Orders\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"OrderID\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\"],\n  [\"punctuation\",\",\"],\n  [\"identifier\",\"Customers\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"CompanyName\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\"],\n  [\"punctuation\",\",\"],\n  [\"support.function\",\"DATEFROMPARTS\"],\n  [\"paren.lparen\",\"(\"],\n  [\"support.function\",\"YEAR\"],\n  [\"paren.lparen\",\"(\"],\n  [\"support.function\",\"GETDATE\"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\"))\"],\n  [\"punctuation\",\",\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation\",\",\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"AS\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"FirstDayOfYear\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"keyword\",\"FROM\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Orders\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"constant.language\",\"INNER\"],\n  [\"text\",\" \"],\n  [\"constant.language\",\"JOIN\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Customers\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\"],\n  [\"keyword\",\"ON\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Orders\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"CustomerID\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Customers\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"CustomerID\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"keyword\",\"WHERE\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"CompanyName\"],\n  [\"text\",\" \"],\n  [\"constant.language\",\"NOT\"],\n  [\"text\",\" \"],\n  [\"constant.language\",\"LIKE\"],\n  [\"text\",\" \"],\n  [\"string.start\",\"'\"],\n  [\"string\",\"%something\"],\n  [\"string.end\",\"'\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\"],\n  [\"constant.language\",\"OR\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"CompanyName\"],\n  [\"text\",\" \"],\n  [\"constant.language\",\"IS\"],\n  [\"text\",\" \"],\n  [\"constant.language\",\"NULL\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\"],\n  [\"constant.language\",\"OR\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"CompanyName\"],\n  [\"text\",\" \"],\n  [\"constant.language\",\"IN\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"string.start\",\"'\"],\n  [\"string\",\"bla\"],\n  [\"string.end\",\"'\"],\n  [\"punctuation\",\",\"],\n  [\"text\",\" \"],\n  [\"string.start\",\"'\"],\n  [\"string\",\"nothing\"],\n  [\"string.end\",\"'\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"comment\",\"-- this mode includes snippets\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"comment\",\"-- place your cusor at the end of the line below and trigger auto complete (Ctrl+Space)\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"identifier\",\"createpr\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"comment\",\"-- SQL Server allows using keywords as object names (not recommended) as long as they are wrapped in brackets\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"keyword\",\"DATABASE\"],\n  [\"text\",\" \"],\n  [\"comment\",\"-- keyword\"]\n],[\n   \"start\",\n  [\"text\",\"\\t[DATABASE] \"],\n  [\"comment\",\"-- not a keyword\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"]\n],[\n   \"start\",\n  [\"keyword\",\"END\"]\n],[\n   \"start\"\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_stylus.json",
    "content": "[[\n   \"start\",\n  [\"comment\",\"// I'm a comment!\"]\n],[\n   \"start\"\n],[\n   \"comment\",\n  [\"comment\",\"/*\"]\n],[\n   \"comment\",\n  [\"comment\",\" * Adds the given numbers together.\"]\n],[\n   \"start\",\n  [\"comment\",\" */\"]\n],[\n   \"start\"\n],[\n   \"start\"\n],[\n   \"comment\",\n  [\"comment\",\"/*!\"]\n],[\n   \"comment\",\n  [\"comment\",\" * Adds the given numbers together.\"]\n],[\n   \"start\",\n  [\"comment\",\" */\"]\n],[\n   \"start\"\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"entity.name.function.stylus\",\"asdasdasdad\"],\n  [\"text\",\"(\"],\n  [\"text\",\"df, ad\"],\n  [\"keyword.operator.stylus\",\"=\"],\n  [\"constant.numeric\",\"23\"],\n  [\"text\",\")\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"entity.name.function.stylus\",\"add\"],\n  [\"text\",\"(\"],\n  [\"entity.name.tag.stylus\",\"a\"],\n  [\"text\",\", \"],\n  [\"entity.name.tag.stylus\",\"b\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.stylus\",\"=\"],\n  [\"text\",\" \"],\n  [\"entity.name.tag.stylus\",\"a\"],\n  [\"text\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"   \"],\n  [\"entity.name.tag.stylus\",\"a\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.stylus\",\"+\"],\n  [\"text\",\" \"],\n  [\"entity.name.tag.stylus\",\"b\"]\n],[\n   \"start\",\n  [\"entity.name.function.stylus\",\"green\"],\n  [\"text\",\"(\"],\n  [\"constant.numeric\",\"#0c0\"],\n  [\"text\",\")\"]\n],[\n   \"start\",\n  [\"text\",\" add(\"],\n  [\"constant.numeric\",\"10\"],\n  [\"text\",\", \"],\n  [\"constant.numeric\",\"5\"],\n  [\"text\",\")\"]\n],[\n   \"start\",\n  [\"text\",\" \"],\n  [\"comment\",\"// => 15\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\" add(\"],\n  [\"constant.numeric\",\"10\"],\n  [\"text\",\")\"]\n],[\n   \"start\",\n  [\"text\",\" add(\"],\n  [\"entity.name.tag.stylus\",\"a\"],\n  [\"text\",\", \"],\n  [\"entity.name.tag.stylus\",\"b\"],\n  [\"text\",\")\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"entity.language.stylus\",\"    &\"],\n  [\"text\",\"asdasd\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"    (\"],\n  [\"variable.language.stylus\",\"arguments\"],\n  [\"text\",\")\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword.stylus\",\"@sdfsdf\"]\n],[\n   \"start\",\n  [\"entity.other.attribute-name.class.stylus\",\".signatures\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"support.type\",\"background-color\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"#e0e8e0\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"support.type\",\"border\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"],\n  [\"keyword\",\"px\"],\n  [\"text\",\" \"],\n  [\"support.constant\",\"solid\"],\n  [\"text\",\" grayLighter\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"support.type\",\"box-shadow\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"3\"],\n  [\"keyword\",\"px\"],\n  [\"text\",\" grayLightest\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"support.type\",\"border-radius\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"3\"],\n  [\"keyword\",\"px\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"support.type\",\"padding\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"3\"],\n  [\"keyword\",\"px\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"5\"],\n  [\"keyword\",\"px\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"string\",\"\\\"adsads\\\"\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"support.type\",\"margin-left\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"support.type\",\"list-style\"],\n  [\"text\",\" \"],\n  [\"support.constant\",\"none\"]\n],[\n   \"start\",\n  [\"entity.other.attribute-name.class.stylus\",\".signature\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"support.type\",\"list-style\"],\n  [\"text\",\" \"],\n  [\"support.constant\",\"none\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"support.type\",\"display\"],\n  [\"text\",\": \"],\n  [\"support.constant\",\"inline\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"support.type\",\"margin-left\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword.operator.stylus\",\">\"],\n  [\"text\",\" \"],\n  [\"entity.name.tag.stylus\",\"li\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"support.type\",\"display\"],\n  [\"text\",\" \"],\n  [\"support.constant\",\"inline\"]\n],[\n   \"start\",\n  [\"keyword.operator.stylus\",\"is\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.stylus\",\"not\"]\n],[\n   \"start\",\n  [\"entity.other.attribute-name.class.stylus\",\".signature-values\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"support.type\",\"list-style\"],\n  [\"text\",\" \"],\n  [\"support.constant\",\"none\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"support.type\",\"display\"],\n  [\"text\",\" \"],\n  [\"support.constant\",\"inline\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"support.type\",\"margin-left\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"]\n],[\n   \"start\",\n  [\"entity.language.stylus\",\"  &\"],\n  [\"punctuation\",\":\"],\n  [\"entity.other.attribute-name.pseudo-element.css\",\"before\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"support.type\",\"content\"],\n  [\"text\",\" \"],\n  [\"string\",\"'→'\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"support.type\",\"margin\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"5\"],\n  [\"keyword\",\"px\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword.operator.stylus\",\">\"],\n  [\"text\",\" \"],\n  [\"entity.name.tag.stylus\",\"li\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword.control.stylus\",\"!important\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword.control.stylus\",\"unless\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_svg.json",
    "content": "[[\n   \"meta.tag.punctuation.tag-open.xml1\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"svg\"]\n],[\n   \"meta.tag.punctuation.tag-open.xml1\",\n  [\"text.tag-whitespace.xml\",\"  \"],\n  [\"entity.other.attribute-name.xml\",\"width\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"800\\\"\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"height\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"600\\\"\"]\n],[\n   \"meta.tag.punctuation.tag-open.xml1\",\n  [\"text.tag-whitespace.xml\",\"  \"],\n  [\"entity.other.attribute-name.xml\",\"xmlns\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"http://www.w3.org/2000/svg\\\"\"]\n],[\n   \"start\",\n  [\"text.tag-whitespace.xml\",\"  \"],\n  [\"entity.other.attribute-name.xml\",\"onload\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"StartAnimation(evt)\\\"\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text.xml\",\"  \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"title\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\"Test Tube Progress Bar\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"title\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"  \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"desc\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\"Created for the Web Directions SVG competition\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"desc\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\"\n],[\n   \"js-no_regex\",\n  [\"text.xml\",\"  \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.script.tag-name.xml\",\"script\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"type\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"text/ecmascript\\\"\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"string.cdata.xml\",\"<![CDATA[\"]\n],[\n   \"js-start\",\n  [\"text\",\"    \"],\n  [\"storage.type\",\"var\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"timevalue\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"js-start\",\n  [\"text\",\"    \"],\n  [\"storage.type\",\"var\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"timer_increment\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"js-start\",\n  [\"text\",\"    \"],\n  [\"storage.type\",\"var\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"max_time\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"100\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"js-start\",\n  [\"text\",\"    \"],\n  [\"storage.type\",\"var\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"hickory\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"js-start\",\n  [\"text\",\"    \"],\n  [\"storage.type\",\"var\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"dickory\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"js-start\",\n  [\"text\",\"    \"],\n  [\"storage.type\",\"var\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"dock\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"js-start\",\n  [\"text\",\"    \"],\n  [\"storage.type\",\"var\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"i\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"js-start\"\n],[\n   \"js-start\",\n  [\"text\",\"    \"],\n  [\"storage.type\",\"function\"],\n  [\"text\",\" \"],\n  [\"entity.name.function\",\"StartAnimation\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable.parameter\",\"evt\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"js-start\",\n  [\"text\",\"        \"],\n  [\"identifier\",\"hickory\"],\n  [\"text\",\"  \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"evt\"],\n  [\"punctuation.operator\",\".\"],\n  [\"identifier\",\"target\"],\n  [\"punctuation.operator\",\".\"],\n  [\"identifier\",\"ownerDocument\"],\n  [\"punctuation.operator\",\".\"],\n  [\"support.function.dom\",\"getElementById\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\"hickory\\\"\"],\n  [\"paren.rparen\",\")\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"js-start\",\n  [\"text\",\"        \"],\n  [\"identifier\",\"dickory\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"evt\"],\n  [\"punctuation.operator\",\".\"],\n  [\"identifier\",\"target\"],\n  [\"punctuation.operator\",\".\"],\n  [\"identifier\",\"ownerDocument\"],\n  [\"punctuation.operator\",\".\"],\n  [\"support.function.dom\",\"getElementById\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\"dickory\\\"\"],\n  [\"paren.rparen\",\")\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"js-start\",\n  [\"text\",\"        \"],\n  [\"identifier\",\"dock\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"evt\"],\n  [\"punctuation.operator\",\".\"],\n  [\"identifier\",\"target\"],\n  [\"punctuation.operator\",\".\"],\n  [\"identifier\",\"ownerDocument\"],\n  [\"punctuation.operator\",\".\"],\n  [\"support.function.dom\",\"getElementById\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\"dock\\\"\"],\n  [\"paren.rparen\",\")\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"js-start\"\n],[\n   \"js-start\",\n  [\"text\",\"        \"],\n  [\"identifier\",\"ShowAndGrowElement\"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\")\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"js-no_regex\",\n  [\"text\",\"    \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"js-start\",\n  [\"text\",\"    \"],\n  [\"storage.type\",\"function\"],\n  [\"text\",\" \"],\n  [\"entity.name.function\",\"ShowAndGrowElement\"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"js-start\",\n  [\"text\",\"        \"],\n  [\"identifier\",\"timevalue\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"timevalue\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"timer_increment\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"js-no_regex\",\n  [\"text\",\"        \"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"timevalue\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\">\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"max_time\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"js-start\",\n  [\"text\",\"            \"],\n  [\"keyword\",\"return\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"js-start\",\n  [\"text\",\"        \"],\n  [\"comment\",\"// Scale the text string gradually until it is 20 times larger\"]\n],[\n   \"js-start\",\n  [\"text\",\"        \"],\n  [\"identifier\",\"scalefactor\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"timevalue\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"*\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"650\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"/\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"max_time\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"js-start\"\n],[\n   \"js-start\",\n  [\"text\",\"        \"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"timevalue\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"<\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"30\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"js-start\",\n  [\"text\",\"            \"],\n  [\"identifier\",\"hickory\"],\n  [\"punctuation.operator\",\".\"],\n  [\"support.function.dom\",\"setAttribute\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\"display\\\"\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"\\\"\"],\n  [\"paren.rparen\",\")\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"js-start\",\n  [\"text\",\"            \"],\n  [\"identifier\",\"hickory\"],\n  [\"punctuation.operator\",\".\"],\n  [\"support.function.dom\",\"setAttribute\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\"transform\\\"\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"translate(\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"600\"],\n  [\"keyword.operator\",\"+\"],\n  [\"identifier\",\"scalefactor\"],\n  [\"keyword.operator\",\"*\"],\n  [\"constant.numeric\",\"3\"],\n  [\"keyword.operator\",\"*-\"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\" \"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\", -144 )\\\"\"],\n  [\"paren.rparen\",\")\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"js-no_regex\",\n  [\"text\",\"        \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"js-no_regex\"\n],[\n   \"js-start\",\n  [\"text\",\"        \"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"timevalue\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\">\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"30\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"&&\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"timevalue\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"<\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"66\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"js-start\",\n  [\"text\",\"            \"],\n  [\"identifier\",\"dickory\"],\n  [\"punctuation.operator\",\".\"],\n  [\"support.function.dom\",\"setAttribute\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\"display\\\"\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"\\\"\"],\n  [\"paren.rparen\",\")\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"js-start\",\n  [\"text\",\"            \"],\n  [\"identifier\",\"dickory\"],\n  [\"punctuation.operator\",\".\"],\n  [\"support.function.dom\",\"setAttribute\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\"transform\\\"\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"translate(\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"keyword.operator\",\"-\"],\n  [\"constant.numeric\",\"795\"],\n  [\"keyword.operator\",\"+\"],\n  [\"identifier\",\"scalefactor\"],\n  [\"keyword.operator\",\"*\"],\n  [\"constant.numeric\",\"2\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\", 0 )\\\"\"],\n  [\"paren.rparen\",\")\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"js-no_regex\",\n  [\"text\",\"        \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"js-start\",\n  [\"text\",\"        \"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"timevalue\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\">\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"66\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"js-start\",\n  [\"text\",\"            \"],\n  [\"identifier\",\"dock\"],\n  [\"punctuation.operator\",\".\"],\n  [\"support.function.dom\",\"setAttribute\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\"display\\\"\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"\\\"\"],\n  [\"paren.rparen\",\")\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"js-start\",\n  [\"text\",\"            \"],\n  [\"identifier\",\"dock\"],\n  [\"punctuation.operator\",\".\"],\n  [\"support.function.dom\",\"setAttribute\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\"transform\\\"\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"translate(\\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"1450\"],\n  [\"keyword.operator\",\"+\"],\n  [\"identifier\",\"scalefactor\"],\n  [\"keyword.operator\",\"*\"],\n  [\"constant.numeric\",\"2\"],\n  [\"keyword.operator\",\"*-\"],\n  [\"constant.numeric\",\"1\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\", 144 )\\\"\"],\n  [\"paren.rparen\",\")\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"js-no_regex\",\n  [\"text\",\"        \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"js-no_regex\"\n],[\n   \"js-no_regex\",\n  [\"text\",\"        \"],\n  [\"comment\",\"// Call ShowAndGrowElement again <timer_increment> milliseconds later.\"]\n],[\n   \"js-no_regex\",\n  [\"text\",\"        \"],\n  [\"identifier\",\"setTimeout\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\"ShowAndGrowElement()\\\"\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"timer_increment\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"js-no_regex\",\n  [\"text\",\"    \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"js-no_regex\",\n  [\"text\",\"    \"],\n  [\"variable.language\",\"window\"],\n  [\"punctuation.operator\",\".\"],\n  [\"identifier\",\"ShowAndGrowElement\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"ShowAndGrowElement\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"string.cdata.xml\",\"]]>\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.script.tag-name.xml\",\"script\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\"\n],[\n   \"meta.tag.punctuation.tag-open.xml1\",\n  [\"text.xml\",\"  \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"rect\"]\n],[\n   \"meta.tag.punctuation.tag-open.xml1\",\n  [\"text.tag-whitespace.xml\",\"    \"],\n  [\"entity.other.attribute-name.xml\",\"fill\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"#2e3436\\\"\"]\n],[\n   \"meta.tag.punctuation.tag-open.xml1\",\n  [\"text.tag-whitespace.xml\",\"    \"],\n  [\"entity.other.attribute-name.xml\",\"fill-rule\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"nonzero\\\"\"]\n],[\n   \"meta.tag.punctuation.tag-open.xml1\",\n  [\"text.tag-whitespace.xml\",\"    \"],\n  [\"entity.other.attribute-name.xml\",\"stroke-width\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"3\\\"\"]\n],[\n   \"meta.tag.punctuation.tag-open.xml1\",\n  [\"text.tag-whitespace.xml\",\"    \"],\n  [\"entity.other.attribute-name.xml\",\"y\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"0\\\"\"]\n],[\n   \"meta.tag.punctuation.tag-open.xml1\",\n  [\"text.tag-whitespace.xml\",\"    \"],\n  [\"entity.other.attribute-name.xml\",\"x\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"0\\\"\"]\n],[\n   \"meta.tag.punctuation.tag-open.xml1\",\n  [\"text.tag-whitespace.xml\",\"    \"],\n  [\"entity.other.attribute-name.xml\",\"height\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"600\\\"\"]\n],[\n   \"meta.tag.punctuation.tag-open.xml1\",\n  [\"text.tag-whitespace.xml\",\"    \"],\n  [\"entity.other.attribute-name.xml\",\"width\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"800\\\"\"]\n],[\n   \"start\",\n  [\"text.tag-whitespace.xml\",\"    \"],\n  [\"entity.other.attribute-name.xml\",\"id\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"rect3590\\\"\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\"/>\"]\n],[\n   \"start\"\n],[\n   \"meta.tag.punctuation.tag-open.xml1\",\n  [\"text.xml\",\"    \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"text\"]\n],[\n   \"meta.tag.punctuation.tag-open.xml1\",\n  [\"text.tag-whitespace.xml\",\"       \"],\n  [\"entity.other.attribute-name.xml\",\"style\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"font-size:144px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans Bold\\\"\"]\n],[\n   \"meta.tag.punctuation.tag-open.xml1\",\n  [\"text.tag-whitespace.xml\",\"       \"],\n  [\"entity.other.attribute-name.xml\",\"x\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"50\\\"\"]\n],[\n   \"meta.tag.punctuation.tag-open.xml1\",\n  [\"text.tag-whitespace.xml\",\"       \"],\n  [\"entity.other.attribute-name.xml\",\"y\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"350\\\"\"]\n],[\n   \"meta.tag.punctuation.tag-open.xml1\",\n  [\"text.tag-whitespace.xml\",\"       \"],\n  [\"entity.other.attribute-name.xml\",\"id\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"hickory\\\"\"]\n],[\n   \"start\",\n  [\"text.tag-whitespace.xml\",\"       \"],\n  [\"entity.other.attribute-name.xml\",\"display\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"none\\\"\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"        Hickory,\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"text\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"meta.tag.punctuation.tag-open.xml1\",\n  [\"text.xml\",\"    \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"text\"]\n],[\n   \"meta.tag.punctuation.tag-open.xml1\",\n  [\"text.tag-whitespace.xml\",\"       \"],\n  [\"entity.other.attribute-name.xml\",\"style\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"font-size:144px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans Bold\\\"\"]\n],[\n   \"meta.tag.punctuation.tag-open.xml1\",\n  [\"text.tag-whitespace.xml\",\"       \"],\n  [\"entity.other.attribute-name.xml\",\"x\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"50\\\"\"]\n],[\n   \"meta.tag.punctuation.tag-open.xml1\",\n  [\"text.tag-whitespace.xml\",\"       \"],\n  [\"entity.other.attribute-name.xml\",\"y\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"350\\\"\"]\n],[\n   \"meta.tag.punctuation.tag-open.xml1\",\n  [\"text.tag-whitespace.xml\",\"       \"],\n  [\"entity.other.attribute-name.xml\",\"id\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"dickory\\\"\"]\n],[\n   \"start\",\n  [\"text.tag-whitespace.xml\",\"       \"],\n  [\"entity.other.attribute-name.xml\",\"display\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"none\\\"\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"        dickory,\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"text\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"meta.tag.punctuation.tag-open.xml1\",\n  [\"text.xml\",\"    \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"text\"]\n],[\n   \"meta.tag.punctuation.tag-open.xml1\",\n  [\"text.tag-whitespace.xml\",\"       \"],\n  [\"entity.other.attribute-name.xml\",\"style\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"font-size:144px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans Bold\\\"\"]\n],[\n   \"meta.tag.punctuation.tag-open.xml1\",\n  [\"text.tag-whitespace.xml\",\"       \"],\n  [\"entity.other.attribute-name.xml\",\"x\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"50\\\"\"]\n],[\n   \"meta.tag.punctuation.tag-open.xml1\",\n  [\"text.tag-whitespace.xml\",\"       \"],\n  [\"entity.other.attribute-name.xml\",\"y\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"350\\\"\"]\n],[\n   \"meta.tag.punctuation.tag-open.xml1\",\n  [\"text.tag-whitespace.xml\",\"       \"],\n  [\"entity.other.attribute-name.xml\",\"id\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"dock\\\"\"]\n],[\n   \"start\",\n  [\"text.tag-whitespace.xml\",\"       \"],\n  [\"entity.other.attribute-name.xml\",\"display\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"none\\\"\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"        dock!\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"text\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"svg\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n]]\n"
  },
  {
    "path": "lib/ace/mode/_test/tokens_swift.json",
    "content": "[[\n   \"start\",\n  [\"keyword\",\"import\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"UIKit\"]\n],[\n   \"start\",\n  [\"text\",\" \"]\n],[\n   \"start\",\n  [\"keyword\",\"class\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"DetailsViewController\"],\n  [\"punctuation.operator\",\":\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"UIViewController\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"var\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"album\"],\n  [\"punctuation.operator\",\":\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Album\"],\n  [\"punctuation.operator\",\"?\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"variable.parameter\",\"@IBOutlet\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"weak\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"var\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"albumCover\"],\n  [\"punctuation.operator\",\":\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"UIImageView\"],\n  [\"keyword.operator\",\"!\"]\n],[\n   \"start\",\n  [\"text\",\"     \"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"required\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"init\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"coder\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"aDecoder\"],\n  [\"punctuation.operator\",\":\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"NSCoder\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"constant.language\",\"super\"],\n  [\"punctuation.operator\",\".\"],\n  [\"keyword\",\"init\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"coder\"],\n  [\"punctuation.operator\",\":\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"aDecoder\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"     \"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"override\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"func\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"viewDidLoad\"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"constant.language\",\"super\"],\n  [\"punctuation.operator\",\".\"],\n  [\"identifier\",\"viewDidLoad\"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"identifier\",\"mLabel\"],\n  [\"punctuation.operator\",\".\"],\n  [\"identifier\",\"text\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"self\"],\n  [\"punctuation.operator\",\".\"],\n  [\"identifier\",\"album\"],\n  [\"punctuation.operator\",\"?.\"],\n  [\"identifier\",\"title\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"&&\"],\n  [\"text\",\" \"],\n  [\"string.start\",\"\\\"\"],\n  [\"string\",\"Juhu \"],\n  [\"paren.quasi.start\",\"\\\\(\"],\n  [\"text\",\" \"],\n  [\"string.start\",\"\\\"\"],\n  [\"string\",\"kinners\"],\n  [\"string.end\",\"\\\"\"],\n  [\"text\",\" \"],\n  [\"paren.quasi.end\",\")\"],\n  [\"string\",\"! \"],\n  [\"string.end\",\"\\\"\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"identifier\",\"albumCover\"],\n  [\"punctuation.operator\",\".\"],\n  [\"identifier\",\"image\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"UIImage\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"data\"],\n  [\"punctuation.operator\",\":\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"NSData\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"contentsOfURL\"],\n  [\"punctuation.operator\",\":\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"NSURL\"],\n  [\"paren.lparen\",\"(\"],\n  [\"storage.type\",\"string\"],\n  [\"punctuation.operator\",\":\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"self\"],\n  [\"punctuation.operator\",\".\"],\n  [\"identifier\",\"album\"],\n  [\"keyword.operator\",\"!\"],\n  [\"punctuation.operator\",\".\"],\n  [\"identifier\",\"largeImageURL\"],\n  [\"paren.rparen\",\")\"],\n  [\"keyword.operator\",\"!\"],\n  [\"paren.rparen\",\")\"],\n  [\"keyword.operator\",\"!\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"paren.rparen\",\"}\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_tcl.json",
    "content": "[[\n   \"commandItem\"\n],[\n   \"commandItem\",\n  [\"keyword\",\"proc\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"dijkstra\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"],\n  [\"keyword\",\"graph\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"origin\"],\n  [\"paren.rparen\",\"}\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"comment\",\"# Initialize\"]\n],[\n   \"commandItem\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"dict\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"for\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"],\n  [\"keyword\",\"vertex\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"distmap\"],\n  [\"paren.rparen\",\"}\"],\n  [\"text\",\" \"],\n  [\"variable.instance\",\"$graph\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"keyword\",\"dict\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"set\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"dist\"],\n  [\"text\",\" \"],\n  [\"variable.instance\",\"$vertex\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Inf\"]\n],[\n   \"commandItem\",\n  [\"text\",\"\\t\"],\n  [\"keyword\",\"dict\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"set\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"path\"],\n  [\"text\",\" \"],\n  [\"variable.instance\",\"$vertex\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"commandItem\",\n  [\"text\",\"    \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"dict\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"set\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"dist\"],\n  [\"text\",\" \"],\n  [\"variable.instance\",\"$origin\"],\n  [\"text\",\" 0\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"dict\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"set\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"path\"],\n  [\"text\",\" \"],\n  [\"variable.instance\",\"$origin\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"keyword\",\"list\"],\n  [\"text\",\" \"],\n  [\"variable.instance\",\"$origin\"],\n  [\"paren.rparen\",\"]\"]\n],[\n   \"commandItem\",\n  [\"text\",\" \"]\n],[\n   \"commandItem\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"while\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"],\n  [\"text\",\"[\"],\n  [\"keyword\",\"dict\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"size\"],\n  [\"text\",\" \"],\n  [\"variable.instance\",\"$graph\"],\n  [\"paren.rparen\",\"]}\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"comment\",\"# Find unhandled node with least weight\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"keyword\",\"set\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"d\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Inf\"]\n],[\n   \"commandItem\",\n  [\"text\",\"\\t\"],\n  [\"keyword\",\"dict\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"for\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"],\n  [\"keyword\",\"uu\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"-\"],\n  [\"paren.rparen\",\"}\"],\n  [\"text\",\" \"],\n  [\"variable.instance\",\"$graph\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"commandItem\",\n  [\"text\",\"\\t    \"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"],\n  [\"variable.instance\",\"$d\"],\n  [\"text\",\" \"],\n  [\"support.function\",\">\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"keyword\",\"set\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"dd\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"keyword\",\"dict\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"get\"],\n  [\"text\",\" \"],\n  [\"variable.instance\",\"$dist\"],\n  [\"text\",\" \"],\n  [\"variable.instance\",\"$uu\"],\n  [\"paren.rparen\",\"]]}\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\"],\n  [\"keyword\",\"set\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"u\"],\n  [\"text\",\" \"],\n  [\"variable.instance\",\"$uu\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\"],\n  [\"keyword\",\"set\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"d\"],\n  [\"text\",\" \"],\n  [\"variable.instance\",\"$dd\"]\n],[\n   \"commandItem\",\n  [\"text\",\"\\t    \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"commandItem\",\n  [\"text\",\"\\t\"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"commandItem\",\n  [\"text\",\" \"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"comment\",\"# No such node; graph must be disconnected\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"],\n  [\"variable.instance\",\"$d\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"==\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Inf\"],\n  [\"paren.rparen\",\"}\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"break\"]\n],[\n   \"commandItem\",\n  [\"text\",\" \"]\n],[\n   \"commentfollow\",\n  [\"text\",\"\\t\"],\n  [\"comment\",\"# Update the weights for nodes\\\\\"]\n],[\n   \"start\",\n  [\"comment\",\"\\t lead to by the node we've picked\"]\n],[\n   \"commandItem\",\n  [\"text\",\"\\t\"],\n  [\"keyword\",\"dict\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"for\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"],\n  [\"keyword\",\"v\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"dd\"],\n  [\"paren.rparen\",\"}\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"keyword\",\"dict\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"get\"],\n  [\"text\",\" \"],\n  [\"variable.instance\",\"$graph\"],\n  [\"text\",\" \"],\n  [\"variable.instance\",\"$u\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"commandItem\",\n  [\"text\",\"\\t    \"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"],\n  [\"text\",\"[\"],\n  [\"keyword\",\"dict\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"exists\"],\n  [\"text\",\" \"],\n  [\"variable.instance\",\"$graph\"],\n  [\"text\",\" \"],\n  [\"variable.instance\",\"$v\"],\n  [\"paren.rparen\",\"]}\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\"],\n  [\"keyword\",\"set\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"alt\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"keyword\",\"expr\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"],\n  [\"variable.instance\",\"$d\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"+\"],\n  [\"text\",\" \"],\n  [\"variable.instance\",\"$dd\"],\n  [\"paren.rparen\",\"}]\"]\n],[\n   \"commandItem\",\n  [\"text\",\"\\t\\t\"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"],\n  [\"variable.instance\",\"$alt\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"<\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"keyword\",\"dict\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"get\"],\n  [\"text\",\" \"],\n  [\"variable.instance\",\"$dist\"],\n  [\"text\",\" \"],\n  [\"variable.instance\",\"$v\"],\n  [\"paren.rparen\",\"]}\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t    \"],\n  [\"keyword\",\"dict\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"set\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"dist\"],\n  [\"text\",\" \"],\n  [\"variable.instance\",\"$v\"],\n  [\"text\",\" \"],\n  [\"variable.instance\",\"$alt\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t    \"],\n  [\"keyword\",\"dict\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"set\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"path\"],\n  [\"text\",\" \"],\n  [\"variable.instance\",\"$v\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"keyword\",\"list\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"{*}\"],\n  [\"paren.lparen\",\"[\"],\n  [\"keyword\",\"dict\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"get\"],\n  [\"text\",\" \"],\n  [\"variable.instance\",\"$path\"],\n  [\"text\",\" \"],\n  [\"variable.instance\",\"$u\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"variable.instance\",\"$v\"],\n  [\"paren.rparen\",\"]\"]\n],[\n   \"commandItem\",\n  [\"text\",\"\\t\\t\"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"commandItem\",\n  [\"text\",\"\\t    \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"commandItem\",\n  [\"text\",\"\\t\"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"commandItem\",\n  [\"text\",\" \"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"comment\",\"# Remove chosen node from graph still to be handled\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"keyword\",\"dict\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"unset\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"graph\"],\n  [\"text\",\" \"],\n  [\"variable.instance\",\"$u\"]\n],[\n   \"commandItem\",\n  [\"text\",\"    \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"return\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"keyword\",\"list\"],\n  [\"text\",\" \"],\n  [\"variable.instance\",\"$dist\"],\n  [\"text\",\" \"],\n  [\"variable.instance\",\"$path\"],\n  [\"paren.rparen\",\"]\"]\n],[\n   \"commandItem\",\n  [\"paren.rparen\",\"}\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_tex.json",
    "content": "[[\n   \"start\",\n  [\"text\",\"The quadratic formula is $$-b \"],\n  [\"keyword\",\"\\\\pm\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"\\\\sqrt\"],\n  [\"paren.keyword.operator\",\"{\"],\n  [\"text\",\"b^2 - 4ac\"],\n  [\"paren.keyword.operator\",\"}\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"\\\\over\"],\n  [\"text\",\" 2a$$\"]\n],[\n   \"start\",\n  [\"keyword\",\"\\\\bye\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"\\\\makeatletter\"]\n],[\n   \"start\",\n  [\"text\",\" \"],\n  [\"keyword\",\"\\\\newcommand\"],\n  [\"paren.keyword.operator\",\"{\"],\n  [\"keyword\",\"\\\\be\"],\n  [\"paren.keyword.operator\",\"}{\"],\n  [\"comment\",\"%\"]\n],[\n   \"start\",\n  [\"text\",\" \"],\n  [\"keyword\",\"\\\\begingroup\"]\n],[\n   \"start\",\n  [\"text\",\" \"],\n  [\"comment\",\"% \\\\setlength{\\\\arraycolsep}{2pt}\"]\n],[\n   \"start\",\n  [\"text\",\" \"],\n  [\"keyword\",\"\\\\eqnarray\"],\n  [\"comment\",\"%\"]\n],[\n   \"start\",\n  [\"text\",\" \"],\n  [\"keyword\",\"\\\\@\"],\n  [\"text\",\"ifstar\"],\n  [\"paren.keyword.operator\",\"{\"],\n  [\"keyword\",\"\\\\nonumber\"],\n  [\"paren.keyword.operator\",\"}{}\"],\n  [\"comment\",\"%\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"paren.keyword.operator\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"\\\\newcommand\"],\n  [\"paren.keyword.operator\",\"{\"],\n  [\"keyword\",\"\\\\ee\"],\n  [\"paren.keyword.operator\",\"}{\"],\n  [\"keyword\",\"\\\\endeqnarray\\\\endgroup\"],\n  [\"paren.keyword.operator\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"\\\\makeatother\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\" \"],\n  [\"keyword\",\"\\\\begin\"],\n  [\"paren.keyword.operator\",\"{\"],\n  [\"nospell.text\",\"equation\"],\n  [\"paren.keyword.operator\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\" x=\"],\n  [\"keyword\",\"\\\\left\"],\n  [\"text\", \"\\\\{ \"],\n  [\"keyword\",\"\\\\begin\"],\n  [\"paren.keyword.operator\",\"{\"],\n  [\"nospell.text\",\"array\"],\n  [\"paren.keyword.operator\",\"}{\"],\n  [\"text\",\"cl\"],\n  [\"paren.keyword.operator\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\" 0 & \"],\n  [\"keyword\",\"\\\\textrm\"],\n  [\"paren.keyword.operator\",\"{\"],\n  [\"text\",\"if \"],\n  [\"paren.keyword.operator\",\"}\"],\n  [\"text\",\"A=\"],\n  [\"keyword\",\"\\\\ldots\\\\\\\\\"]\n],[\n   \"start\",\n  [\"text\",\" 1 & \"],\n  [\"keyword\",\"\\\\textrm\"],\n  [\"paren.keyword.operator\",\"{\"],\n  [\"text\",\"if \"],\n  [\"paren.keyword.operator\",\"}\"],\n  [\"text\",\"B=\"],\n  [\"keyword\",\"\\\\ldots\\\\\\\\\"]\n],[\n   \"start\",\n  [\"text\",\" x & \"],\n  [\"keyword\",\"\\\\textrm\"],\n  [\"paren.keyword.operator\",\"{\"],\n  [\"text\",\"this runs with as much text as you like, but without an raggeright text\"]\n],[\n   \"start\",\n  [\"text\",\".\"],\n  [\"paren.keyword.operator\",\"}\"],\n  [\"keyword\",\"\\\\end\"],\n  [\"paren.keyword.operator\",\"{\"],\n  [\"nospell.text\",\"array\"],\n  [\"paren.keyword.operator\",\"}\"],\n  [\"keyword\",\"\\\\right\"],\n  [\"text\",\".\"]\n],[\n   \"start\",\n  [\"text\",\" \"],\n  [\"keyword\",\"\\\\end\"],\n  [\"paren.keyword.operator\",\"{\"],\n  [\"nospell.text\",\"equation\"],\n  [\"paren.keyword.operator\",\"}\"]\n]]\n"
  },
  {
    "path": "lib/ace/mode/_test/tokens_text.json",
    "content": "[[\n   \"start\",\n  [\"text\",\"Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis.\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, At accusam aliquyam diam diam dolore dolores duo eirmod eos erat, et nonumy sed tempor et et invidunt justo labore Stet clita ea et gubergren, kasd magna no rebum. sanctus sea sed takimata ut vero voluptua. est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_textile.json",
    "content": "[[\n   \"start\",\n  [\"markup.heading.1\",\"h1\"],\n  [\"keyword\",\". \"],\n  [\"text\",\"Textile document\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"markup.heading.2\",\"h2\"],\n  [\"keyword\",\". \"],\n  [\"text\",\"Heading Two\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"markup.heading.3\",\"h3\"],\n  [\"keyword\",\". \"],\n  [\"text\",\"A two-line\"]\n],[\n   \"start\",\n  [\"text\",\"    header\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"markup.heading.2\",\"h2\"],\n  [\"keyword\",\". \"],\n  [\"text\",\"Another two-line\"]\n],[\n   \"start\",\n  [\"text\",\"header\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"Paragraph:\"]\n],[\n   \"start\",\n  [\"text\",\"one, two,\"]\n],[\n   \"start\",\n  [\"text\",\"thee lines!\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"markup.heading\",\"p\"],\n  [\"keyword\",\"(\"],\n  [\"string\",\"classone\"],\n  [\"text\",\" \"],\n  [\"string\",\"two\"],\n  [\"text\",\" \"],\n  [\"string\",\"three\"],\n  [\"keyword\",\"). \"],\n  [\"text\",\"This is a paragraph with classes\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"markup.heading\",\"p\"],\n  [\"keyword\",\"(#\"],\n  [\"string\",\"id\"],\n  [\"keyword\",\"). \"],\n  [\"text\",\"(one with an id)\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"markup.heading\",\"p\"],\n  [\"keyword\",\"(\"],\n  [\"string\",\"one\"],\n  [\"text\",\" \"],\n  [\"string\",\"two\"],\n  [\"text\",\" \"],\n  [\"string\",\"three\"],\n  [\"keyword\",\"#\"],\n  [\"string\",\"my_id\"],\n  [\"keyword\",\"). \"],\n  [\"text\",\"..classes + id\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"*\"],\n  [\"text\",\" Unordered list\"]\n],[\n   \"start\",\n  [\"keyword\",\"**\"],\n  [\"text\",\" sublist\"]\n],[\n   \"start\",\n  [\"keyword\",\"*\"],\n  [\"text\",\" back again!\"]\n],[\n   \"start\",\n  [\"keyword\",\"**\"],\n  [\"text\",\" sublist again..\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"#\"],\n  [\"text\",\" ordered\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"bg. Blockquote!\"]\n],[\n   \"start\",\n  [\"text\",\"    This is a two-list blockquote..!\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_toml.json",
    "content": "[[\n   \"start\",\n  [\"comment.toml\",\"# This is a TOML document. Boom.\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"identifier\",\"title\"],\n  [\"text\",\" = \"],\n  [\"string\",\"\\\"TOML Example\\\"\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"variable.keygroup.toml\",\"[owner]\"]\n],[\n   \"start\",\n  [\"identifier\",\"name\"],\n  [\"text\",\" = \"],\n  [\"string\",\"\\\"Tom Preston-Werner\\\"\"]\n],[\n   \"start\",\n  [\"identifier\",\"organization\"],\n  [\"text\",\" = \"],\n  [\"string\",\"\\\"GitHub\\\"\"]\n],[\n   \"start\",\n  [\"identifier\",\"bio\"],\n  [\"text\",\" = \"],\n  [\"string\",\"\\\"GitHub Cofounder & CEO\"],\n  [\"constant.language.escape\",\"\\\\n\"],\n  [\"string\",\"Likes tater tots and beer.\\\"\"]\n],[\n   \"start\",\n  [\"identifier\",\"dob\"],\n  [\"text\",\" = \"],\n  [\"support.date.toml\",\"1979-05-27T07:32:00Z\"],\n  [\"text\",\" \"],\n  [\"comment.toml\",\"# First class dates? Why not?\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"variable.keygroup.toml\",\"[database]\"]\n],[\n   \"start\",\n  [\"identifier\",\"server\"],\n  [\"text\",\" = \"],\n  [\"string\",\"\\\"192.168.1.1\\\"\"]\n],[\n   \"start\",\n  [\"identifier\",\"ports\"],\n  [\"text\",\" = [ \"],\n  [\"constant.numeric.toml\",\"8001\"],\n  [\"text\",\", \"],\n  [\"constant.numeric.toml\",\"8001\"],\n  [\"text\",\", \"],\n  [\"constant.numeric.toml\",\"8002\"],\n  [\"text\",\" ]\"]\n],[\n   \"start\",\n  [\"identifier\",\"connection_max\"],\n  [\"text\",\" = \"],\n  [\"constant.numeric.toml\",\"5000\"]\n],[\n   \"start\",\n  [\"identifier\",\"enabled\"],\n  [\"text\",\" = \"],\n  [\"constant.language.boolean\",\"true\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"variable.keygroup.toml\",\"[servers]\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"comment.toml\",\"# You can indent as you please. Tabs or spaces. TOML don't care.\"]\n],[\n   \"start\",\n  [\"variable.keygroup.toml\",\"  [servers.alpha]\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"identifier\",\"ip\"],\n  [\"text\",\" = \"],\n  [\"string\",\"\\\"10.0.0.1\\\"\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"identifier\",\"dc\"],\n  [\"text\",\" = \"],\n  [\"string\",\"\\\"eqdc10\\\"\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"variable.keygroup.toml\",\"  [servers.beta]\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"identifier\",\"ip\"],\n  [\"text\",\" = \"],\n  [\"string\",\"\\\"10.0.0.2\\\"\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"identifier\",\"dc\"],\n  [\"text\",\" = \"],\n  [\"string\",\"\\\"eqdc10\\\"\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"variable.keygroup.toml\",\"[clients]\"]\n],[\n   \"start\",\n  [\"identifier\",\"data\"],\n  [\"text\",\" = [ [\"],\n  [\"string\",\"\\\"gamma\\\"\"],\n  [\"text\",\", \"],\n  [\"string\",\"\\\"delta\\\"\"],\n  [\"text\",\"], [\"],\n  [\"constant.numeric.toml\",\"1\"],\n  [\"text\",\", \"],\n  [\"constant.numeric.toml\",\"2\"],\n  [\"text\",\"] ] \"],\n  [\"comment.toml\",\"# just an update to make sure parsers support it\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_tsx.json",
    "content": "[[\n   [\"jsx\",1],\n  [\"storage.type\",\"var\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"mode\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"div\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"string\",\" \"]\n],[\n   [\"jsx\",1],\n  [\"string\",\"    Typescript + \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"b\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"string\",\" JSX \"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"b\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"string\",\" \"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"div\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"punctuation.operator\",\";\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_twig.json",
    "content": "[[\n   \"start\",\n  [\"xml-pe.doctype.xml\",\"<!\"],\n  [\"xml-pe.doctype.xml\",\"DOCTYPE\"],\n  [\"text.whitespace.xml\",\" \"],\n  [\"xml-pe.xml\",\"html\"],\n  [\"xml-pe.doctype.xml\",\">\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"html\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"head\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"        \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"title\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\"My Webpage\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"title\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"head\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"body\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"        \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"ul\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"id\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"navigation\\\"\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"        \"],\n  [\"meta.tag.twig\",\"{%\"],\n  [\"text\",\" \"],\n  [\"keyword.control.twig\",\"for\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"item\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.twig\",\"in\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"navigation\"],\n  [\"text\",\" \"],\n  [\"meta.tag.twig\",\"%}\"]\n],[\n   \"start\",\n  [\"text.xml\",\"            \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"li\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.anchor.tag-name.xml\",\"a\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"href\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"\"],\n  [\"variable.other.readwrite.local.twig\",\"{{\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"item\"],\n  [\"punctuation.operator\",\".\"],\n  [\"identifier\",\"href\"],\n  [\"keyword.operator.other\",\"|\"],\n  [\"support.function.twig\",\"escape\"],\n  [\"text\",\" \"],\n  [\"variable.other.readwrite.local.twig\",\"}}\"],\n  [\"string.attribute-value.xml\",\"\\\"\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"variable.other.readwrite.local.twig\",\"{{\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"item\"],\n  [\"punctuation.operator\",\".\"],\n  [\"identifier\",\"caption\"],\n  [\"text\",\" \"],\n  [\"variable.other.readwrite.local.twig\",\"}}\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.anchor.tag-name.xml\",\"a\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"li\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"        \"],\n  [\"meta.tag.twig\",\"{%\"],\n  [\"text\",\" \"],\n  [\"keyword.control.twig\",\"endfor\"],\n  [\"text\",\" \"],\n  [\"meta.tag.twig\",\"%}\"]\n],[\n   \"start\",\n  [\"text.xml\",\"        \"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"ul\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text.xml\",\"        \"],\n  [\"meta.tag.twig\",\"{%\"],\n  [\"text\",\" \"],\n  [\"keyword.control.twig\",\"if\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.twig\",\"not\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.twig\",\"in\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"2\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"3\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"meta.tag.twig\",\"%}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text.xml\",\"        \"],\n  [\"comment.block.twig\",\"{# is equivalent to #}\"]\n],[\n   \"start\",\n  [\"text.xml\",\"        \"],\n  [\"meta.tag.twig\",\"{%\"],\n  [\"text\",\" \"],\n  [\"keyword.control.twig\",\"if\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.twig\",\"not\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.twig\",\"in\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"[\"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"2\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"3\"],\n  [\"paren.rparen\",\"])\"],\n  [\"text\",\" \"],\n  [\"meta.tag.twig\",\"%}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text.xml\",\"        \"],\n  [\"meta.tag.twig\",\"{%\"],\n  [\"text\",\" \"],\n  [\"keyword.control.twig\",\"autoescape\"],\n  [\"text\",\" \"],\n  [\"constant.language.boolean\",\"true\"],\n  [\"text\",\" \"],\n  [\"meta.tag.twig\",\"%}\"]\n],[\n   \"start\",\n  [\"text.xml\",\"            \"],\n  [\"variable.other.readwrite.local.twig\",\"{{\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"var\"],\n  [\"text\",\" \"],\n  [\"variable.other.readwrite.local.twig\",\"}}\"]\n],[\n   \"start\",\n  [\"text.xml\",\"            \"],\n  [\"variable.other.readwrite.local.twig\",\"{{\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"var\"],\n  [\"keyword.operator.other\",\"|\"],\n  [\"support.function.twig\",\"raw\"],\n  [\"text\",\" \"],\n  [\"variable.other.readwrite.local.twig\",\"}}\"],\n  [\"text.xml\",\"     \"],\n  [\"comment.block.twig\",\"{# var won't be escaped #}\"]\n],[\n   \"start\",\n  [\"text.xml\",\"            \"],\n  [\"variable.other.readwrite.local.twig\",\"{{\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"var\"],\n  [\"keyword.operator.other\",\"|\"],\n  [\"support.function.twig\",\"escape\"],\n  [\"text\",\" \"],\n  [\"variable.other.readwrite.local.twig\",\"}}\"],\n  [\"text.xml\",\"  \"],\n  [\"comment.block.twig\",\"{# var won't be doubled-escaped #}\"]\n],[\n   \"start\",\n  [\"text.xml\",\"        \"],\n  [\"meta.tag.twig\",\"{%\"],\n  [\"text\",\" \"],\n  [\"keyword.control.twig\",\"endautoescape\"],\n  [\"text\",\" \"],\n  [\"meta.tag.twig\",\"%}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text.xml\",\"        \"],\n  [\"variable.other.readwrite.local.twig\",\"{{\"],\n  [\"text\",\" \"],\n  [\"keyword.control.twig\",\"include\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"'twig.html'\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"sandboxed\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.assignment\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.language.boolean\",\"true\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"variable.other.readwrite.local.twig\",\"}}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text.xml\",\"        \"],\n  [\"variable.other.readwrite.local.twig\",\"{{\"],\n  [\"string\",\"\\\"string \"],\n  [\"constant.language.escape\",\"#{with}\"],\n  [\"string\",\" \"],\n  [\"constant.language.escape\",\"\\\\\\\"\"],\n  [\"string\",\" escapes\\\"\"],\n  [\"text\",\" \"],\n  [\"string\",\"'another#one'\"],\n  [\"text\",\" \"],\n  [\"variable.other.readwrite.local.twig\",\"}}\"]\n],[\n   \"start\",\n  [\"text.xml\",\"        \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"h1\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\"My Webpage\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"h1\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"        \"],\n  [\"variable.other.readwrite.local.twig\",\"{{\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"a_variable\"],\n  [\"text\",\" \"],\n  [\"variable.other.readwrite.local.twig\",\"}}\"]\n],[\n   \"start\",\n  [\"text.xml\",\"    \"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"body\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"html\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_typescript.json",
    "content": "[[\n   \"start\",\n  [\"keyword.operator.ts\",\"class\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Greeter\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"variable.parameter.function.ts\",\"greeting\"],\n  [\"text\",\": \"],\n  [\"variable.parameter.function.ts\",\"string\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"keyword.operator.ts\",\"constructor\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable.parameter.function.ts\",\"message\"],\n  [\"text\",\": \"],\n  [\"variable.parameter.function.ts\",\"string\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\"],\n  [\"storage.type.variable.ts\",\"this.\"],\n  [\"identifier\",\"greeting\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"message\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"no_regex\",\n  [\"text\",\"\\t\"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"identifier\",\"greet\"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\"],\n  [\"keyword\",\"return\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"Hello, \\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"storage.type.variable.ts\",\"this.\"],\n  [\"identifier\",\"greeting\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"no_regex\",\n  [\"text\",\"\\t\"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"no_regex\",\n  [\"paren.rparen\",\"}\"],\n  [\"text\",\"   \"]\n],[\n   \"no_regex\"\n],[\n   \"start\",\n  [\"storage.type\",\"var\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"greeter\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"new\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Greeter\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\"world\\\"\"],\n  [\"paren.rparen\",\")\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\"\n],[\n   \"no_regex\",\n  [\"storage.type\",\"var\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"button\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"variable.language\",\"document\"],\n  [\"punctuation.operator\",\".\"],\n  [\"support.function.dom\",\"createElement\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"'button'\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"identifier\",\"button\"],\n  [\"punctuation.operator\",\".\"],\n  [\"identifier\",\"innerText\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"<\"],\n  [\"storage.type.variable.ts\",\"string\"],\n  [\"keyword.operator\",\">\"],\n  [\"string\",\"\\\"Say Hello\\\"\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"storage.type\",\"button\"],\n  [\"punctuation.operator\",\".\"],\n  [\"entity.name.function\",\"onclick\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"storage.type\",\"function\"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"no_regex\",\n  [\"text\",\"\\t\"],\n  [\"support.function\",\"alert\"],\n  [\"paren.lparen\",\"(\"],\n  [\"entity.name.function.ts\",\"greeter.greet\"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\")\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"no_regex\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"no_regex\"\n],[\n   \"no_regex\",\n  [\"variable.language\",\"document\"],\n  [\"punctuation.operator\",\".\"],\n  [\"identifier\",\"body\"],\n  [\"punctuation.operator\",\".\"],\n  [\"support.function.dom\",\"appendChild\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"button\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"no_regex\"\n],[\n   \"start\",\n  [\"keyword\",\"class\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Snake\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"extends\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Animal\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"   \"],\n  [\"entity.name.function.ts\",\"move\"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"       \"],\n  [\"support.function\",\"alert\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\"Slithering...\\\"\"],\n  [\"paren.rparen\",\")\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"       \"],\n  [\"storage.type.variable.ts\",\"super\"],\n  [\"text\",\"(\"],\n  [\"keyword.other.ts\",\"5\"],\n  [\"text\",\")\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"no_regex\",\n  [\"text\",\"   \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"no_regex\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"no_regex\"\n],[\n   \"start\",\n  [\"keyword\",\"class\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Horse\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"extends\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Animal\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"   \"],\n  [\"entity.name.function.ts\",\"move\"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"       \"],\n  [\"support.function\",\"alert\"],\n  [\"paren.lparen\",\"(\"],\n  [\"string\",\"\\\"Galloping...\\\"\"],\n  [\"paren.rparen\",\")\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"       \"],\n  [\"keyword.operator.ts\",\"super\"],\n  [\"punctuation.operator\",\".\"],\n  [\"identifier\",\"move\"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"45\"],\n  [\"paren.rparen\",\")\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"no_regex\",\n  [\"text\",\"   \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"no_regex\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"no_regex\"\n],[\n   \"start\",\n  [\"identifier\",\"module\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Sayings\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword.operator.ts\",\"export\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.ts\",\"class\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Greeter\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"variable.parameter.function.ts\",\"greeting\"],\n  [\"text\",\": \"],\n  [\"variable.parameter.function.ts\",\"string\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"keyword.operator.ts\",\"constructor\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable.parameter.function.ts\",\"message\"],\n  [\"text\",\": \"],\n  [\"variable.parameter.function.ts\",\"string\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"            \"],\n  [\"storage.type.variable.ts\",\"this.\"],\n  [\"identifier\",\"greeting\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"message\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"no_regex\",\n  [\"text\",\"        \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"identifier\",\"greet\"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"            \"],\n  [\"keyword\",\"return\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"Hello, \\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"storage.type.variable.ts\",\"this.\"],\n  [\"identifier\",\"greeting\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"no_regex\",\n  [\"text\",\"        \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"no_regex\",\n  [\"text\",\"    \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"no_regex\",\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"identifier\",\"module\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Mankala\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"   \"],\n  [\"keyword.operator.ts\",\"export\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.ts\",\"class\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Features\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"       \"],\n  [\"keyword.operator.ts\",\"public\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"turnContinues\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.language.boolean\",\"false\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"       \"],\n  [\"keyword.operator.ts\",\"public\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"seedStoredCount\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"       \"],\n  [\"keyword.operator.ts\",\"public\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"capturedCount\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"       \"],\n  [\"keyword.operator.ts\",\"public\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"spaceCaptured\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"NoSpace\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"       \"],\n  [\"keyword.operator.ts\",\"public\"],\n  [\"text\",\" \"],\n  [\"entity.name.function.ts\",\"clear\"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"           \"],\n  [\"storage.type.variable.ts\",\"this.\"],\n  [\"identifier\",\"turnContinues\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.language.boolean\",\"false\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"           \"],\n  [\"storage.type.variable.ts\",\"this.\"],\n  [\"identifier\",\"seedStoredCount\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"           \"],\n  [\"storage.type.variable.ts\",\"this.\"],\n  [\"identifier\",\"capturedCount\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"           \"],\n  [\"storage.type.variable.ts\",\"this.\"],\n  [\"identifier\",\"spaceCaptured\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"NoSpace\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"no_regex\",\n  [\"text\",\"       \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"no_regex\"\n],[\n   \"start\",\n  [\"text\",\"       \"],\n  [\"keyword\",\"public\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"toString\"],\n  [\"paren.lparen\",\"(\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"           \"],\n  [\"storage.type\",\"var\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"stringBuilder\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"\\\"\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"           \"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"storage.type.variable.ts\",\"this.\"],\n  [\"identifier\",\"turnContinues\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"               \"],\n  [\"identifier\",\"stringBuilder\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+=\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\" turn continues,\\\"\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"no_regex\",\n  [\"text\",\"           \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"           \"],\n  [\"identifier\",\"stringBuilder\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+=\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\" stores \\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"storage.type.variable.ts\",\"this.\"],\n  [\"identifier\",\"seedStoredCount\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"           \"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"storage.type.variable.ts\",\"this.\"],\n  [\"identifier\",\"capturedCount\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\">\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"               \"],\n  [\"identifier\",\"stringBuilder\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+=\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\" captures \\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"storage.type.variable.ts\",\"this.\"],\n  [\"identifier\",\"capturedCount\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\" from space \\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"storage.type.variable.ts\",\"this.\"],\n  [\"identifier\",\"spaceCaptured\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"no_regex\",\n  [\"text\",\"           \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"           \"],\n  [\"keyword\",\"return\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"stringBuilder\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"no_regex\",\n  [\"text\",\"       \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"no_regex\",\n  [\"text\",\"   \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"no_regex\",\n  [\"paren.rparen\",\"}\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_vala.json",
    "content": "[[\n   \"start\",\n  [\"meta.using.vala\",\"﻿\"],\n  [\"keyword.other.using.vala\",\"using\"],\n  [\"meta.using.vala\",\" \"],\n  [\"storage.modifier.using.vala\",\"Gtk\"],\n  [\"punctuation.terminator.vala\",\";\"]\n],[\n   \"start\",\n  [\"text\",\" \"]\n],[\n   \"text0\",\n  [\"storage.type.primitive.array.vala\",\"int\"],\n  [\"text\",\" main (\"],\n  [\"storage.type.primitive.array.vala\",\"string\"],\n  [\"text\",\"[] args) {\"]\n],[\n   \"text0\",\n  [\"text\",\"    \"],\n  [\"storage.type.vala\",\"Gtk\"],\n  [\"keyword.operator.dereference.vala\",\".\"],\n  [\"text\",\"init (\"],\n  [\"storage.modifier.vala\",\"ref\"],\n  [\"text\",\" args)\"],\n  [\"punctuation.terminator.vala\",\";\"]\n],[\n   \"text0\",\n  [\"text\",\"    \"],\n  [\"storage.type.primitive.vala\",\"var\"],\n  [\"text\",\" foo \"],\n  [\"keyword.operator.assignment.vala\",\"=\"],\n  [\"text\",\" \"],\n  [\"keyword.control.new.vala\",\"new\"],\n  [\"text\",\" \"],\n  [\"storage.type.generic.vala\",\"MyFoo<string[](), MyBar<string, int>>\"],\n  [\"text\",\"()\"],\n  [\"punctuation.terminator.vala\",\";\"]\n],[\n   \"text0\"\n],[\n   \"text0\",\n  [\"text\",\"    \"],\n  [\"storage.type.primitive.vala\",\"var\"],\n  [\"text\",\" window \"],\n  [\"keyword.operator.assignment.vala\",\"=\"],\n  [\"text\",\" \"],\n  [\"keyword.control.new.vala\",\"new\"],\n  [\"text\",\" \"],\n  [\"storage.type.vala\",\"Window\"],\n  [\"text\",\"()\"],\n  [\"punctuation.terminator.vala\",\";\"]\n],[\n   \"text0\",\n  [\"text\",\"    window\"],\n  [\"keyword.operator.dereference.vala\",\".\"],\n  [\"text\",\"title \"],\n  [\"keyword.operator.assignment.vala\",\"=\"],\n  [\"text\",\" \"],\n  [\"punctuation.definition.string.begin.vala\",\"\\\"\"],\n  [\"string.quoted.double.vala\",\"Hello, World!\"],\n  [\"punctuation.definition.string.end.vala\",\"\\\"\"],\n  [\"punctuation.terminator.vala\",\";\"]\n],[\n   \"text0\",\n  [\"text\",\"    window\"],\n  [\"keyword.operator.dereference.vala\",\".\"],\n  [\"text\",\"border_width \"],\n  [\"keyword.operator.assignment.vala\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.vala\",\"10\"],\n  [\"punctuation.terminator.vala\",\";\"]\n],[\n   \"text0\",\n  [\"text\",\"    window\"],\n  [\"keyword.operator.dereference.vala\",\".\"],\n  [\"text\",\"window_position \"],\n  [\"keyword.operator.assignment.vala\",\"=\"],\n  [\"text\",\" \"],\n  [\"storage.type.vala\",\"WindowPosition\"],\n  [\"keyword.operator.dereference.vala\",\".\"],\n  [\"constant.other.vala\",\"CENTER\"],\n  [\"punctuation.terminator.vala\",\";\"]\n],[\n   \"text0\",\n  [\"text\",\"    window\"],\n  [\"keyword.operator.dereference.vala\",\".\"],\n  [\"text\",\"set_default_size(\"],\n  [\"constant.numeric.vala\",\"350\"],\n  [\"text\",\", \"],\n  [\"constant.numeric.vala\",\"70\"],\n  [\"text\",\")\"],\n  [\"punctuation.terminator.vala\",\";\"]\n],[\n   \"text0\",\n  [\"text\",\"    window\"],\n  [\"keyword.operator.dereference.vala\",\".\"],\n  [\"text\",\"destroy\"],\n  [\"keyword.operator.dereference.vala\",\".\"],\n  [\"text\",\"connect(\"],\n  [\"storage.type.vala\",\"Gtk\"],\n  [\"keyword.operator.dereference.vala\",\".\"],\n  [\"text\",\"main_quit)\"],\n  [\"punctuation.terminator.vala\",\";\"]\n],[\n   \"text0\",\n  [\"text\",\" \"]\n],[\n   \"text0\",\n  [\"text\",\"    \"],\n  [\"storage.type.primitive.vala\",\"var\"],\n  [\"text\",\" label \"],\n  [\"keyword.operator.assignment.vala\",\"=\"],\n  [\"text\",\" \"],\n  [\"keyword.control.new.vala\",\"new\"],\n  [\"text\",\" \"],\n  [\"storage.type.vala\",\"Label\"],\n  [\"text\",\"(\"],\n  [\"punctuation.definition.string.begin.vala\",\"\\\"\"],\n  [\"string.quoted.double.vala\",\"Hello, World!\"],\n  [\"punctuation.definition.string.end.vala\",\"\\\"\"],\n  [\"text\",\")\"],\n  [\"punctuation.terminator.vala\",\";\"]\n],[\n   \"text0\",\n  [\"text\",\" \"]\n],[\n   \"text0\",\n  [\"text\",\"    window\"],\n  [\"keyword.operator.dereference.vala\",\".\"],\n  [\"text\",\"add(label)\"],\n  [\"punctuation.terminator.vala\",\";\"]\n],[\n   \"text0\",\n  [\"text\",\"    window\"],\n  [\"keyword.operator.dereference.vala\",\".\"],\n  [\"text\",\"show_all()\"],\n  [\"punctuation.terminator.vala\",\";\"]\n],[\n   \"text0\",\n  [\"text\",\" \"]\n],[\n   \"text0\",\n  [\"text\",\"    \"],\n  [\"storage.type.vala\",\"Gtk\"],\n  [\"keyword.operator.dereference.vala\",\".\"],\n  [\"text\",\"main()\"],\n  [\"punctuation.terminator.vala\",\";\"]\n],[\n   \"text0\",\n  [\"text\",\"    \"],\n  [\"keyword.control.vala\",\"return\"],\n  [\"text\",\" \"],\n  [\"constant.numeric.vala\",\"0\"],\n  [\"punctuation.terminator.vala\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"}\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_vbscript.json",
    "content": "[[\n   \"start\",\n  [\"identifier\",\"myfilename\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.asp\",\"=\"],\n  [\"text\",\" \"],\n  [\"punctuation.definition.string.begin.asp\",\"\\\"\"],\n  [\"string.quoted.double.asp\",\"C:\\\\Wikipedia - VBScript - Example - Hello World.txt\\\"\"]\n],[\n   \"start\",\n  [\"identifier\",\"MakeHelloWorldFile\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"myfilename\"]\n],[\n   \"state_4\",\n  [\"meta.leading-space\",\" \"]\n],[\n   \"start\",\n  [\"storage.type.function.asp\",\"Sub\"],\n  [\"text\",\" \"],\n  [\"entity.name.function.asp\",\"MakeHelloWorldFile\"],\n  [\"text\",\" \"],\n  [\"punctuation.definition.parameters.asp\",\"(\"],\n  [\"variable.parameter.function.asp\",\"FileName\"],\n  [\"punctuation.definition.parameters.asp\",\")\"]\n],[\n   \"start\",\n  [\"punctuation.definition.comment.asp\",\"'\"],\n  [\"comment.line.apostrophe.asp\",\"Create a new file in C: drive or overwrite existing file\"]\n],[\n   \"start\",\n  [\"meta.odd-tab.spaces\",\"  \"],\n  [\"meta.leading-space\",\" \"],\n  [\"storage.type.asp\",\"Set\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"FSO\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.asp\",\"=\"],\n  [\"text\",\" \"],\n  [\"support.function.vb.asp\",\"CreateObject\"],\n  [\"text\",\"(\"],\n  [\"punctuation.definition.string.begin.asp\",\"\\\"\"],\n  [\"string.quoted.double.asp\",\"Scripting.FileSystemObject\\\"\"],\n  [\"text\",\")\"]\n],[\n   \"start\",\n  [\"meta.odd-tab.spaces\",\"  \"],\n  [\"meta.leading-space\",\" \"],\n  [\"keyword.control.asp\",\"If\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"FSO\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"FileExists\"],\n  [\"text\",\"(\"],\n  [\"identifier\",\"FileName\"],\n  [\"text\",\") \"],\n  [\"keyword.control.asp\",\"Then\"],\n  [\"text\",\" \"]\n],[\n   \"start\",\n  [\"meta.odd-tab.spaces\",\"  \"],\n  [\"meta.even-tab.spaces\",\"  \"],\n  [\"meta.odd-tab.spaces\",\"  \"],\n  [\"identifier\",\"Answer\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.asp\",\"=\"],\n  [\"text\",\" \"],\n  [\"support.function.vb.asp\",\"MsgBox\"],\n  [\"text\",\" (\"],\n  [\"punctuation.definition.string.begin.asp\",\"\\\"\"],\n  [\"string.quoted.double.asp\",\"File \\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.asp\",\"&\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"FileName\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.asp\",\"&\"],\n  [\"text\",\" \"],\n  [\"punctuation.definition.string.begin.asp\",\"\\\"\"],\n  [\"string.quoted.double.asp\",\" exists ... OK to overwrite?\\\"\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"vbOKCancel\"],\n  [\"text\",\")\"]\n],[\n   \"start\",\n  [\"meta.odd-tab.spaces\",\"  \"],\n  [\"meta.even-tab.spaces\",\"  \"],\n  [\"meta.odd-tab.spaces\",\"  \"],\n  [\"punctuation.definition.comment.asp\",\"'\"],\n  [\"comment.line.apostrophe.asp\",\"If button selected is not OK, then quit now\"]\n],[\n   \"start\",\n  [\"meta.odd-tab.spaces\",\"  \"],\n  [\"meta.even-tab.spaces\",\"  \"],\n  [\"meta.odd-tab.spaces\",\"  \"],\n  [\"punctuation.definition.comment.asp\",\"'\"],\n  [\"comment.line.apostrophe.asp\",\"vbOK is a language constant\"]\n],[\n   \"start\",\n  [\"meta.odd-tab.spaces\",\"  \"],\n  [\"meta.even-tab.spaces\",\"  \"],\n  [\"meta.odd-tab.spaces\",\"  \"],\n  [\"keyword.control.asp\",\"If\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Answer\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.asp\",\"<>\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"vbOK\"],\n  [\"text\",\" \"],\n  [\"keyword.control.asp\",\"Then\"],\n  [\"text\",\" \"],\n  [\"keyword.control.asp\",\"Exit\"],\n  [\"text\",\" \"],\n  [\"keyword.control.asp\",\"Sub\"]\n],[\n   \"start\",\n  [\"meta.odd-tab.spaces\",\"  \"],\n  [\"meta.leading-space\",\" \"],\n  [\"keyword.control.asp\",\"Else\"]\n],[\n   \"start\",\n  [\"meta.odd-tab.spaces\",\"  \"],\n  [\"meta.even-tab.spaces\",\"  \"],\n  [\"meta.odd-tab.spaces\",\"  \"],\n  [\"punctuation.definition.comment.asp\",\"'\"],\n  [\"comment.line.apostrophe.asp\",\"Confirm OK to create\"]\n],[\n   \"start\",\n  [\"meta.odd-tab.spaces\",\"  \"],\n  [\"meta.even-tab.spaces\",\"  \"],\n  [\"meta.odd-tab.spaces\",\"  \"],\n  [\"identifier\",\"Answer\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.asp\",\"=\"],\n  [\"text\",\" \"],\n  [\"support.function.vb.asp\",\"MsgBox\"],\n  [\"text\",\" (\"],\n  [\"punctuation.definition.string.begin.asp\",\"\\\"\"],\n  [\"string.quoted.double.asp\",\"File \\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.asp\",\"&\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"FileName\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.asp\",\"&\"],\n  [\"text\",\" \"],\n  [\"punctuation.definition.string.begin.asp\",\"\\\"\"],\n  [\"string.quoted.double.asp\",\" ... OK to create?\\\"\"],\n  [\"text\",\", \"],\n  [\"identifier\",\"vbOKCancel\"],\n  [\"text\",\")\"]\n],[\n   \"start\",\n  [\"meta.odd-tab.spaces\",\"  \"],\n  [\"meta.even-tab.spaces\",\"  \"],\n  [\"meta.odd-tab.spaces\",\"  \"],\n  [\"keyword.control.asp\",\"If\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Answer\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.asp\",\"<>\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"vbOK\"],\n  [\"text\",\" \"],\n  [\"keyword.control.asp\",\"Then\"],\n  [\"text\",\" \"],\n  [\"keyword.control.asp\",\"Exit\"],\n  [\"text\",\" \"],\n  [\"keyword.control.asp\",\"Sub\"]\n],[\n   \"start\",\n  [\"meta.odd-tab.spaces\",\"  \"],\n  [\"meta.leading-space\",\" \"],\n  [\"keyword.control.asp\",\"End\"],\n  [\"text\",\" \"],\n  [\"keyword.control.asp\",\"If\"]\n],[\n   \"start\",\n  [\"meta.odd-tab.spaces\",\"  \"],\n  [\"meta.leading-space\",\" \"],\n  [\"punctuation.definition.comment.asp\",\"'\"],\n  [\"comment.line.apostrophe.asp\",\"Create new file (or replace an existing file)\"]\n],[\n   \"start\",\n  [\"meta.odd-tab.spaces\",\"  \"],\n  [\"meta.leading-space\",\" \"],\n  [\"storage.type.asp\",\"Set\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"FileObject\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.asp\",\"=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"FSO\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"CreateTextFile\"],\n  [\"text\",\" (\"],\n  [\"identifier\",\"FileName\"],\n  [\"text\",\")\"]\n],[\n   \"start\",\n  [\"meta.odd-tab.spaces\",\"  \"],\n  [\"meta.leading-space\",\" \"],\n  [\"identifier\",\"FileObject\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"WriteLine\"],\n  [\"text\",\" \"],\n  [\"punctuation.definition.string.begin.asp\",\"\\\"\"],\n  [\"string.quoted.double.asp\",\"Time ... \\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.asp\",\"&\"],\n  [\"text\",\" \"],\n  [\"support.function.vb.asp\",\"Now\"],\n  [\"text\",\"()\"]\n],[\n   \"start\",\n  [\"meta.odd-tab.spaces\",\"  \"],\n  [\"meta.leading-space\",\" \"],\n  [\"identifier\",\"FileObject\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"WriteLine\"],\n  [\"text\",\" \"],\n  [\"punctuation.definition.string.begin.asp\",\"\\\"\"],\n  [\"string.quoted.double.asp\",\"Hello World\\\"\"]\n],[\n   \"start\",\n  [\"meta.odd-tab.spaces\",\"  \"],\n  [\"meta.leading-space\",\" \"],\n  [\"identifier\",\"FileObject\"],\n  [\"text\",\".\"],\n  [\"identifier\",\"Close\"],\n  [\"text\",\"()\"]\n],[\n   \"start\",\n  [\"meta.odd-tab.spaces\",\"  \"],\n  [\"meta.leading-space\",\" \"],\n  [\"support.function.vb.asp\",\"MsgBox\"],\n  [\"text\",\" \"],\n  [\"punctuation.definition.string.begin.asp\",\"\\\"\"],\n  [\"string.quoted.double.asp\",\"File \\\"\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.asp\",\"&\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"FileName\"],\n  [\"text\",\" \"],\n  [\"keyword.operator.asp\",\"&\"],\n  [\"text\",\" \"],\n  [\"punctuation.definition.string.begin.asp\",\"\\\"\"],\n  [\"string.quoted.double.asp\",\" ... updated.\\\"\"]\n],[\n   \"start\",\n  [\"keyword.control.asp\",\"End\"],\n  [\"text\",\" \"],\n  [\"keyword.control.asp\",\"Sub\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_velocity.json",
    "content": "[[\n   \"vm_comment\",\n  [\"comment.block\",\"#*\"]\n],[\n   \"vm_comment\",\n  [\"comment\",\"  This is a sample comment block that\"]\n],[\n   \"vm_comment\",\n  [\"comment\",\"  spans multiple lines.\"]\n],[\n   \"start\",\n  [\"comment\",\"*#\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"#macro\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"(\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"outputItem\"],\n  [\"text\",\" \"],\n  [\"variable\",\"$item\"],\n  [\"text\",\" \"],\n  [\"rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"li\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"variable\",\"${\"],\n  [\"identifier\",\"item\"],\n  [\"variable\",\"}\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"li\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"keyword\",\"#end\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"comment\",\"## Define the items to iterate\"]\n],[\n   \"start\",\n  [\"keyword\",\"#set\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"(\"],\n  [\"text\",\" \"],\n  [\"variable\",\"$items\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"[\"],\n  [\"constant.numeric\",\"1\"],\n  [\"text.xml\",\",\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"2\"],\n  [\"text.xml\",\",\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"3\"],\n  [\"text.xml\",\",\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"4\"],\n  [\"rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"rparen\",\")\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"ul\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"comment\",\"## Iterate over the items and output the evens.\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"#foreach\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"(\"],\n  [\"text\",\" \"],\n  [\"variable\",\"$item\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"in\"],\n  [\"text\",\" \"],\n  [\"variable\",\"$items\"],\n  [\"text\",\" \"],\n  [\"rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"#if\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"(\"],\n  [\"text\",\" \"],\n  [\"support.function\",\"$_MathTool\"],\n  [\"text.xml\",\".\"],\n  [\"identifier\",\"mod\"],\n  [\"lparen\",\"(\"],\n  [\"variable\",\"$item\"],\n  [\"text.xml\",\",\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"2\"],\n  [\"rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"==\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"text\",\" \"],\n  [\"rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"      \"],\n  [\"identifier\",\"#outputItem\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"(\"],\n  [\"variable\",\"$item\"],\n  [\"rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"#end\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"#end\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"ul\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\"\n],[\n   \"js-start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.script.tag-name.xml\",\"script\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"js-comment1\",\n  [\"text\",\"  \"],\n  [\"comment\",\"/*\"]\n],[\n   \"js-comment1\",\n  [\"comment\",\"    A sample function to decomstrate\"]\n],[\n   \"js-comment1\",\n  [\"comment\",\"    JavaScript highlighting and folding.\"]\n],[\n   \"js-start\",\n  [\"comment\",\"  */\"]\n],[\n   \"js-start\",\n  [\"text\",\"  \"],\n  [\"storage.type\",\"function\"],\n  [\"text\",\" \"],\n  [\"entity.name.function\",\"foo\"],\n  [\"paren.lparen\",\"(\"],\n  [\"variable.parameter\",\"items\"],\n  [\"punctuation.operator\",\", \"],\n  [\"variable.parameter\",\"nada\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"js-start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"for\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"storage.type\",\"var\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"i\"],\n  [\"keyword.operator\",\"=\"],\n  [\"constant.numeric\",\"0\"],\n  [\"punctuation.operator\",\";\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"i\"],\n  [\"keyword.operator\",\"<\"],\n  [\"identifier\",\"items\"],\n  [\"punctuation.operator\",\".\"],\n  [\"support.constant\",\"length\"],\n  [\"punctuation.operator\",\";\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"i\"],\n  [\"keyword.operator\",\"++\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"js-start\",\n  [\"text\",\"      \"],\n  [\"support.function\",\"alert\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"items\"],\n  [\"paren.lparen\",\"[\"],\n  [\"identifier\",\"i\"],\n  [\"paren.rparen\",\"]\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"juhu\"],\n  [\"constant.language.escape\",\"\\\\n\"],\n  [\"string\",\"\\\"\"],\n  [\"paren.rparen\",\")\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"js-no_regex\",\n  [\"text\",\"    \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"js-no_regex\",\n  [\"text\",\"  \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.script.tag-name.xml\",\"script\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\"\n],[\n   \"css-start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.style.tag-name.xml\",\"style\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   [\"css-comment\",\"css-start\"],\n  [\"text\",\"  \"],\n  [\"comment\",\"/*\"]\n],[\n   [\"css-comment\",\"css-start\"],\n  [\"comment\",\"    A sample style to decomstrate\"]\n],[\n   [\"css-comment\",\"css-start\"],\n  [\"comment\",\"    CSS highlighting and folding.\"]\n],[\n   \"css-start\",\n  [\"comment\",\"  */\"]\n],[\n   \"css-ruleset\",\n  [\"text\",\"  \"],\n  [\"variable\",\".class\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"{\"]\n],[\n   \"css-ruleset\",\n  [\"text\",\"    \"],\n  [\"support.type\",\"font-family\"],\n  [\"text\",\": Monaco, \"],\n  [\"string.start\",\"\\\"\"],\n  [\"string\",\"Courier New\"],\n  [\"string.end\",\"\\\"\"],\n  [\"text\",\", \"],\n  [\"support.constant.fonts\",\"monospace\"],\n  [\"text\",\";\"]\n],[\n   \"css-ruleset\",\n  [\"text\",\"    \"],\n  [\"support.type\",\"font-size\"],\n  [\"text\",\": \"],\n  [\"constant.numeric\",\"12\"],\n  [\"keyword\",\"px\"],\n  [\"text\",\";\"]\n],[\n   \"css-ruleset\",\n  [\"text\",\"    \"],\n  [\"support.type\",\"cursor\"],\n  [\"text\",\": \"],\n  [\"support.constant\",\"text\"],\n  [\"text\",\";\"]\n],[\n   \"css-start\",\n  [\"text\",\"  \"],\n  [\"paren.rparen\",\"}\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.style.tag-name.xml\",\"style\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_verilog.json",
    "content": "[[\n   \"start\",\n  [\"keyword\",\"always\"],\n  [\"text\",\" @\"],\n  [\"paren.lparen\",\"(\"],\n  [\"keyword\",\"negedge\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"reset\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"or\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"posedge\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"clk\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"begin\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"if\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"reset\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"==\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"begin\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"d_out\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"<=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"16\"],\n  [\"text\",\"'\"],\n  [\"identifier\",\"h0000\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"d_out_mem\"],\n  [\"text\",\"[\"],\n  [\"identifier\",\"resetcount\"],\n  [\"text\",\"] \"],\n  [\"keyword.operator\",\"<=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"d_out\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"laststoredvalue\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"<=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"d_out\"],\n  [\"text\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"end\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"else\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"begin\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"d_out\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"<=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"d_out\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"],\n  [\"text\",\"'\"],\n  [\"identifier\",\"b1\"],\n  [\"text\",\"; \"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"keyword\",\"end\"]\n],[\n   \"start\",\n  [\"keyword\",\"end\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"always\"],\n  [\"text\",\" @\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"bufreadaddr\"],\n  [\"paren.rparen\",\")\"]\n],[\n   \"start\",\n  [\"text\",\"  \"],\n  [\"identifier\",\"bufreadval\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"d_out_mem\"],\n  [\"text\",\"[\"],\n  [\"identifier\",\"bufreadaddr\"],\n  [\"text\",\"];\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_vhdl.json",
    "content": "[[\n   \"start\",\n  [\"keyword\",\"library\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"IEEE\"]\n],[\n   \"start\",\n  [\"identifier\",\"user\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"IEEE\"],\n  [\"punctuation.operator\",\".\"],\n  [\"identifier\",\"std_logic_1164\"],\n  [\"punctuation.operator\",\".\"],\n  [\"keyword\",\"all\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"keyword\",\"use\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"IEEE\"],\n  [\"punctuation.operator\",\".\"],\n  [\"identifier\",\"numeric_std\"],\n  [\"punctuation.operator\",\".\"],\n  [\"keyword\",\"all\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"entity\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"COUNT16\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"is\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"port\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"identifier\",\"cOut\"],\n  [\"text\",\"    \"],\n  [\"punctuation.operator\",\":\"],\n  [\"keyword\",\"out\"],\n  [\"text\",\"    \"],\n  [\"storage.type\",\"std_logic_vector\"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"15\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"downto\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"paren.rparen\",\")\"],\n  [\"punctuation.operator\",\";\"],\n  [\"text\",\"  \"],\n  [\"comment\",\"-- counter output\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"identifier\",\"clkEn\"],\n  [\"text\",\"   \"],\n  [\"punctuation.operator\",\":\"],\n  [\"keyword\",\"in\"],\n  [\"text\",\"     \"],\n  [\"storage.type\",\"std_logic\"],\n  [\"punctuation.operator\",\";\"],\n  [\"text\",\"                      \"],\n  [\"comment\",\"-- count enable\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"identifier\",\"clk\"],\n  [\"text\",\"     \"],\n  [\"punctuation.operator\",\":\"],\n  [\"keyword\",\"in\"],\n  [\"text\",\"     \"],\n  [\"storage.type\",\"std_logic\"],\n  [\"punctuation.operator\",\";\"],\n  [\"text\",\"                      \"],\n  [\"comment\",\"-- clock input\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"identifier\",\"rst\"],\n  [\"text\",\"     \"],\n  [\"punctuation.operator\",\":\"],\n  [\"keyword\",\"in\"],\n  [\"text\",\"     \"],\n  [\"storage.type\",\"std_logic\"],\n  [\"text\",\"                       \"],\n  [\"comment\",\"-- reset input\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"paren.rparen\",\")\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"        \"]\n],[\n   \"start\",\n  [\"keyword\",\"end\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"entity\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"architecture\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"count_rtl\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"of\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"COUNT16\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"is\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"storage.type\",\"signal\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"count\"],\n  [\"text\",\" \"],\n  [\"punctuation.operator\",\":\"],\n  [\"storage.type\",\"std_logic_vector\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"constant.numeric\",\"15\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"downto\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"],\n  [\"paren.rparen\",\")\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"    \"]\n],[\n   \"start\",\n  [\"keyword\",\"begin\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"process\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"clk\"],\n  [\"punctuation.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"rst\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"begin\"]\n],[\n   \"start\",\n  [\"text\",\"        \"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"keyword\",\"if\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"rst\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"string\",\"'1'\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"then\"]\n],[\n   \"start\",\n  [\"text\",\"            \"],\n  [\"identifier\",\"count\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"<=\"],\n  [\"text\",\" \"],\n  [\"paren.lparen\",\"(\"],\n  [\"keyword\",\"others\"],\n  [\"keyword.operator\",\"=>\"],\n  [\"string\",\"'0'\"],\n  [\"paren.rparen\",\")\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"keyword\",\"elsif\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"rising_edge\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"clk\"],\n  [\"paren.rparen\",\"))\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"then\"]\n],[\n   \"start\",\n  [\"text\",\"            \"],\n  [\"keyword\",\"if\"],\n  [\"paren.lparen\",\"(\"],\n  [\"identifier\",\"clkEn\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"string\",\"'1'\"],\n  [\"paren.rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"then\"]\n],[\n   \"start\",\n  [\"text\",\"                \"],\n  [\"identifier\",\"count\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"<=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"count\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"+\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"1\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"            \"],\n  [\"keyword\",\"end\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"if\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"        \"],\n  [\"keyword\",\"end\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"if\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"        \"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"keyword\",\"end\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"process\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"    \"],\n  [\"identifier\",\"cOut\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"<=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"count\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"end\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"architecture\"],\n  [\"punctuation.operator\",\";\"]\n],[\n   \"start\",\n  [\"text\",\"    \"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_wollok.json",
    "content": "[[\n   \"start\",\n  [\"keyword\",\"class\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Actividad\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"keyword\",\"method\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"calcularMejora\"],\n  [\"lparen\",\"(\"],\n  [\"rparen\",\")\"]\n],[\n   \"start\",\n  [\"rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"class\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"EstudiarMateria\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"inherits\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Actividad\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"keyword\",\"var\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"materia\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"keyword\",\"var\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"puntos\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"keyword\",\"new\"],\n  [\"lparen\",\"(\"],\n  [\"identifier\",\"m\"],\n  [\"keyword.operator\",\",\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"p\"],\n  [\"rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\"],\n  [\"identifier\",\"materia\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"m\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\"],\n  [\"identifier\",\"puntos\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"p\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"keyword\",\"override\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"method\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"calcularMejora\"],\n  [\"lparen\",\"(\"],\n  [\"rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"puntos\"]\n],[\n   \"start\",\n  [\"rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"class\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"EjercitarEnSimulador\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"inherits\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"Actividad\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"keyword\",\"var\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"horas\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"0\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"keyword\",\"new\"],\n  [\"lparen\",\"(\"],\n  [\"identifier\",\"h\"],\n  [\"rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"{\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"horas\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"h\"],\n  [\"text\",\" \"],\n  [\"rparen\",\"}\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"keyword\",\"override\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"method\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"calcularMejora\"],\n  [\"lparen\",\"(\"],\n  [\"rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"10\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"*\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"horas\"]\n],[\n   \"start\",\n  [\"rparen\",\"}\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"keyword\",\"object\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"pepita\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"keyword\",\"var\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"energia\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"=\"],\n  [\"text\",\" \"],\n  [\"constant.numeric\",\"100\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"keyword\",\"method\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"volar\"],\n  [\"lparen\",\"(\"],\n  [\"identifier\",\"m\"],\n  [\"rparen\",\")\"],\n  [\"text\",\" \"],\n  [\"lparen\",\"{\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\\t\"],\n  [\"identifier\",\"energia\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\"-=\"],\n  [\"text\",\" \"],\n  [\"identifier\",\"m\"]\n],[\n   \"start\",\n  [\"text\",\"\\t\"],\n  [\"rparen\",\"}\"]\n],[\n   \"start\",\n  [\"rparen\",\"}\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_xml.json",
    "content": "[[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"Juhu\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"text.xml\",\"//Juhu Kinners\"],\n  [\"meta.tag.punctuation.end-tag-open.xml\",\"</\"],\n  [\"meta.tag.tag-name.xml\",\"Kinners\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"test: two tags in the same lines should be in separate tokens\\\"\"]\n],[\n   \"start\",\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"Juhu\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"Kinners\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\">\"]\n],[\n   \"start\",\n  [\"text.xml\",\"test: multiline attributes\\\"\"]\n],[\n   [\"string.attribute-value.xml0\",\"meta.tag.punctuation.tag-open.xml\"],\n  [\"meta.tag.punctuation.tag-open.xml\",\"<\"],\n  [\"meta.tag.tag-name.xml\",\"copy\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"set\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"{\"]\n],[\n   [\"string.attribute-value.xml0\",\"meta.tag.punctuation.tag-open.xml\"],\n  [\"string.attribute-value.xml\",\"}\\\"\"],\n  [\"text.tag-whitespace.xml\",\" \"],\n  [\"entity.other.attribute-name.xml\",\"undo\"],\n  [\"keyword.operator.attribute-equals.xml\",\"=\"],\n  [\"string.attribute-value.xml\",\"\\\"{\"]\n],[\n   \"start\",\n  [\"string.attribute-value.xml\",\"}\\\"\"],\n  [\"meta.tag.punctuation.tag-close.xml\",\"/>\"]\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_xquery.json",
    "content": "[[\n   \"[\\\"start\\\"]\",\n  [\"keyword\",\"xquery\"],\n  [\"text\",\" \"],\n  [\"keyword\",\"version\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"\"],\n  [\"string\",\"1.0\"],\n  [\"string\",\"\\\"\"],\n  [\"text\",\";\"]\n],[\n   \"[\\\"start\\\"]\"\n],[\n   \"[\\\"start\\\"]\",\n  [\"keyword\",\"let\"],\n  [\"text\",\" \"],\n  [\"variable\",\"$message\"],\n  [\"text\",\" \"],\n  [\"keyword.operator\",\":=\"],\n  [\"text\",\" \"],\n  [\"string\",\"\\\"\"],\n  [\"string\",\"Hello World!\"],\n  [\"string\",\"\\\"\"]\n],[\n   \"[\\\"start\\\",\\\"StartTag\\\",\\\"TagContent\\\"]\",\n  [\"keyword\",\"return\"],\n  [\"text\",\" \"],\n  [\"meta.tag\",\"<results\"],\n  [\"meta.tag\",\">\"]\n],[\n   \"[\\\"start\\\",\\\"StartTag\\\",\\\"TagContent\\\"]\",\n  [\"text\",\"  \"],\n  [\"meta.tag\",\"<message\"],\n  [\"meta.tag\",\">\"],\n  [\"text\",\"{\"],\n  [\"variable\",\"$message\"],\n  [\"text\",\"}\"],\n  [\"meta.tag\",\"</message>\"]\n],[\n   \"[\\\"start\\\"]\",\n  [\"meta.tag\",\"</results>\"]\n],[\n   \"[\\\"start\\\"]\"\n]]"
  },
  {
    "path": "lib/ace/mode/_test/tokens_yaml.json",
    "content": "[[\n   \"start\",\n  [\"comment\",\"# This sample document was taken from wikipedia:\"]\n],[\n   \"start\",\n  [\"comment\",\"# http://en.wikipedia.org/wiki/YAML#Sample_document\"]\n],[\n   \"start\",\n  [\"list.markup\",\"---\"]\n],[\n   \"start\",\n  [\"meta.tag\",\"receipt\"],\n  [\"keyword\",\":\"],\n  [\"text\",\"     Oz-Ware Purchase Invoice\"]\n],[\n   \"start\",\n  [\"meta.tag\",\"date\"],\n  [\"keyword\",\":\"],\n  [\"text\",\"        2007-08-06\"]\n],[\n   \"start\",\n  [\"meta.tag\",\"customer\"],\n  [\"keyword\",\":\"]\n],[\n   \"start\",\n  [\"meta.tag\",\"    given\"],\n  [\"keyword\",\":\"],\n  [\"text\",\"   Dorothy\"]\n],[\n   \"start\",\n  [\"meta.tag\",\"    family\"],\n  [\"keyword\",\":\"],\n  [\"text\",\"  Gale\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"meta.tag\",\"items\"],\n  [\"keyword\",\":\"]\n],[\n   \"start\",\n  [\"list.markup\",\"    - \"],\n  [\"meta.tag\",\"part_no\"],\n  [\"keyword\",\":\"],\n  [\"text\",\"   \"],\n  [\"string\",\"'A4786'\"]\n],[\n   \"start\",\n  [\"meta.tag\",\"      descrip\"],\n  [\"keyword\",\":\"],\n  [\"text\",\"   Water Bucket \"],\n  [\"paren.lparen\",\"(\"],\n  [\"text\",\"Filled)\"]\n],[\n   \"start\",\n  [\"meta.tag\",\"      price\"],\n  [\"keyword\",\":\"],\n  [\"text\",\"     \"],\n  [\"constant.numeric\",\"1.47\"]\n],[\n   \"start\",\n  [\"meta.tag\",\"      quantity\"],\n  [\"keyword\",\":\"],\n  [\"text\",\"  \"],\n  [\"constant.numeric\",\"4\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"list.markup\",\"    - \"],\n  [\"meta.tag\",\"part_no\"],\n  [\"keyword\",\":\"],\n  [\"text\",\"   \"],\n  [\"string\",\"'E1628'\"]\n],[\n   \"start\",\n  [\"meta.tag\",\"      descrip\"],\n  [\"keyword\",\":\"],\n  [\"text\",\"   High Heeled \"],\n  [\"string\",\"\\\"Ruby\\\"\"],\n  [\"text\",\" Slippers\"]\n],[\n   \"start\",\n  [\"meta.tag\",\"      size\"],\n  [\"keyword\",\":\"],\n  [\"text\",\"      \"],\n  [\"constant.numeric\",\"8\"]\n],[\n   \"start\",\n  [\"meta.tag\",\"      price\"],\n  [\"keyword\",\":\"],\n  [\"text\",\"     \"],\n  [\"constant.numeric\",\"100.27\"]\n],[\n   \"start\",\n  [\"meta.tag\",\"      quantity\"],\n  [\"keyword\",\":\"],\n  [\"text\",\"  \"],\n  [\"constant.numeric\",\"1\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"meta.tag\",\"bill-to\"],\n  [\"keyword\",\":\"],\n  [\"text\",\"  \"],\n  [\"constant.language\",\"&id001\"]\n],[\n   [\"mlString\",4],\n  [\"meta.tag\",\"    street\"],\n  [\"keyword\",\":\"],\n  [\"text\",\" \"],\n  [\"string\",\"|\"]\n],[\n   [\"mlString\",4],\n  [\"indent\",\"            \"],\n  [\"string\",\"123 Tornado Alley\"]\n],[\n   [\"mlString\",4],\n  [\"indent\",\"            \"],\n  [\"string\",\"Suite 16\"]\n],[\n   \"start\",\n  [\"indent\",\"    \"],\n  [\"meta.tag\",\"city\"],\n  [\"keyword\",\":\"],\n  [\"text\",\"   East Centerville\"]\n],[\n   \"start\",\n  [\"meta.tag\",\"    state\"],\n  [\"keyword\",\":\"],\n  [\"text\",\"  KS\"]\n],[\n   \"start\"\n],[\n   \"start\",\n  [\"meta.tag\",\"ship-to\"],\n  [\"keyword\",\":\"],\n  [\"text\",\"  \"],\n  [\"constant.language\",\"*id001\"]\n],[\n   \"start\"\n],[\n   [\"mlString\",0],\n  [\"meta.tag\",\"specialDelivery\"],\n  [\"keyword\",\":\"],\n  [\"text\",\"  \"],\n  [\"string\",\">\"]\n],[\n   [\"mlString\",0],\n  [\"indent\",\"    \"],\n  [\"string\",\"Follow the Yellow Brick\"]\n],[\n   [\"mlString\",0],\n  [\"indent\",\"    \"],\n  [\"string\",\"Road to the Emerald City.\"]\n],[\n   [\"mlString\",0],\n  [\"indent\",\"    \"],\n  [\"string\",\"Pay no attention to the\"]\n],[\n   [\"mlString\",0],\n  [\"indent\",\"    \"],\n  [\"string\",\"man behind the curtain.\"]\n],[\n   [\"mlString\",0]\n]]"
  },
  {
    "path": "lib/ace/mode/abap.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar Rules = require(\"./abap_highlight_rules\").AbapHighlightRules;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\nvar Range = require(\"../range\").Range;\nvar TextMode = require(\"./text\").Mode;\nvar oop = require(\"../lib/oop\");\n\nfunction Mode() {\n    this.HighlightRules = Rules;\n    this.foldingRules = new FoldMode();\n}\n\noop.inherits(Mode, TextMode);\n\n(function() {\n    \n    this.lineCommentStart = '\"';\n    \n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        return indent;\n    };    \n    \n    this.$id = \"ace/mode/abap\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n"
  },
  {
    "path": "lib/ace/mode/abap_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*\n * based on\n * \" Vim ABAP syntax file\n * \"    Language: SAP - ABAP/R4\n * \"    Revision: 2.1\n * \"  Maintainer: Marius Piedallu van Wyk <lailoken@gmail.com>\n * \" Last Change: 2012 Oct 23\n */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar AbapHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"this\",\n        \"keyword\": \n            \"ADD ALIAS ALIASES ASCENDING ASSERT ASSIGN ASSIGNING AT BACK\" +\n            \" CALL CASE CATCH CHECK CLASS CLEAR CLOSE CNT COLLECT COMMIT COMMUNICATION COMPUTE CONCATENATE CONDENSE CONSTANTS CONTINUE CONTROLS CONVERT CREATE CURRENCY\" +\n            \" DATA DEFINE DEFINITION DEFERRED DELETE DESCENDING DESCRIBE DETAIL DIVIDE DO\" +\n            \" ELSE ELSEIF ENDAT ENDCASE ENDCLASS ENDDO ENDEXEC ENDFORM ENDFUNCTION ENDIF ENDIFEND ENDINTERFACE ENDLOOP ENDMETHOD ENDMODULE ENDON ENDPROVIDE ENDSELECT ENDTRY ENDWHILE EVENT EVENTS EXEC EXIT EXPORT EXPORTING EXTRACT\" +\n            \" FETCH FIELDS FORM FORMAT FREE FROM FUNCTION\" +\n            \" GENERATE GET\" +\n            \" HIDE\" +\n            \" IF IMPORT IMPORTING INDEX INFOTYPES INITIALIZATION INTERFACE INTERFACES INPUT INSERT IMPLEMENTATION\" +\n            \" LEAVE LIKE LINE LOAD LOCAL LOOP\" +\n            \" MESSAGE METHOD METHODS MODIFY MODULE MOVE MULTIPLY\" +\n            \" ON OVERLAY OPTIONAL OTHERS\" +\n            \" PACK PARAMETERS PERFORM POSITION PROGRAM PROVIDE PUT\" +\n            \" RAISE RANGES READ RECEIVE RECEIVING REDEFINITION REFERENCE REFRESH REJECT REPLACE REPORT RESERVE RESTORE RETURN RETURNING ROLLBACK\" +\n            \" SCAN SCROLL SEARCH SELECT SET SHIFT SKIP SORT SORTED SPLIT STANDARD STATICS STEP STOP SUBMIT SUBTRACT SUM SUMMARY SUPPRESS\" +\n            \" TABLES TIMES TRANSFER TRANSLATE TRY TYPE TYPES\" +\n            \" UNASSIGN ULINE UNPACK UPDATE\" +\n            \" WHEN WHILE WINDOW WRITE\" +\n            \" OCCURS STRUCTURE OBJECT PROPERTY\" +\n            \" CASTING APPEND RAISING VALUE COLOR\" +\n            \" CHANGING EXCEPTION EXCEPTIONS DEFAULT CHECKBOX COMMENT\" +\n            \" ID NUMBER FOR TITLE OUTPUT\" +\n            \" WITH EXIT USING\" +\n            \" INTO WHERE GROUP BY HAVING ORDER BY SINGLE\" +\n            \" APPENDING CORRESPONDING FIELDS OF TABLE\" +\n            \" LEFT RIGHT OUTER INNER JOIN AS CLIENT SPECIFIED BYPASSING BUFFER UP TO ROWS CONNECTING\" +\n            \" EQ NE LT LE GT GE NOT AND OR XOR IN LIKE BETWEEN\",\n        \"constant.language\": \n            \"TRUE FALSE NULL SPACE\",\n        \"support.type\": \n            \"c n i p f d t x string xstring decfloat16 decfloat34\",\n        \"keyword.operator\":\n            \"abs sign ceil floor trunc frac acos asin atan cos sin tan\" +\n            \" abapOperator cosh sinh tanh exp log log10 sqrt\" +\n            \" strlen xstrlen charlen numofchar dbmaxlen lines\" \n    }, \"text\", true, \" \");\n\n    var compoundKeywords = \"WITH\\\\W+(?:HEADER\\\\W+LINE|FRAME|KEY)|NO\\\\W+STANDARD\\\\W+PAGE\\\\W+HEADING|\"+\n        \"EXIT\\\\W+FROM\\\\W+STEP\\\\W+LOOP|BEGIN\\\\W+OF\\\\W+(?:BLOCK|LINE)|BEGIN\\\\W+OF|\"+\n        \"END\\\\W+OF\\\\W+(?:BLOCK|LINE)|END\\\\W+OF|NO\\\\W+INTERVALS|\"+\n        \"RESPECTING\\\\W+BLANKS|SEPARATED\\\\W+BY|USING\\\\W+(?:EDIT\\\\W+MASK)|\"+\n        \"WHERE\\\\W+(?:LINE)|RADIOBUTTON\\\\W+GROUP|REF\\\\W+TO|\"+\n        \"(?:PUBLIC|PRIVATE|PROTECTED)(?:\\\\W+SECTION)?|DELETING\\\\W+(?:TRAILING|LEADING)\"+\n        \"(?:ALL\\\\W+OCCURRENCES)|(?:FIRST|LAST)\\\\W+OCCURRENCE|INHERITING\\\\W+FROM|\"+\n        \"LINE-COUNT|ADD-CORRESPONDING|AUTHORITY-CHECK|BREAK-POINT|CLASS-DATA|CLASS-METHODS|\"+\n        \"CLASS-METHOD|DIVIDE-CORRESPONDING|EDITOR-CALL|END-OF-DEFINITION|END-OF-PAGE|END-OF-SELECTION|\"+\n        \"FIELD-GROUPS|FIELD-SYMBOLS|FUNCTION-POOL|MOVE-CORRESPONDING|MULTIPLY-CORRESPONDING|NEW-LINE|\"+\n        \"NEW-PAGE|NEW-SECTION|PRINT-CONTROL|RP-PROVIDE-FROM-LAST|SELECT-OPTIONS|SELECTION-SCREEN|\"+\n        \"START-OF-SELECTION|SUBTRACT-CORRESPONDING|SYNTAX-CHECK|SYNTAX-TRACE|TOP-OF-PAGE|TYPE-POOL|\"+\n        \"TYPE-POOLS|LINE-SIZE|LINE-COUNT|MESSAGE-ID|DISPLAY-MODE|READ(?:-ONLY)?|\"+\n        \"IS\\\\W+(?:NOT\\\\W+)?(?:ASSIGNED|BOUND|INITIAL|SUPPLIED)\";\n     \n    this.$rules = {\n        \"start\" : [\n            {token : \"string\", regex : \"`\", next  : \"string\"},\n            {token : \"string\", regex : \"'\", next  : \"qstring\"},\n            {token : \"doc.comment\", regex : /^\\*.+/},\n            {token : \"comment\",  regex : /\".+$/},\n            {token : \"invalid\", regex: \"\\\\.{2,}\"},\n            {token : \"keyword.operator\", regex: /\\W[\\-+%=<>*]\\W|\\*\\*|[~:,\\.&$]|->*?|=>/},\n            {token : \"paren.lparen\", regex : \"[\\\\[({]\"},\n            {token : \"paren.rparen\", regex : \"[\\\\])}]\"},\n            {token : \"constant.numeric\", regex: \"[+-]?\\\\d+\\\\b\"},\n            {token : \"variable.parameter\", regex : /sy|pa?\\d\\d\\d\\d\\|t\\d\\d\\d\\.|innnn/}, \n            {token : \"keyword\", regex : compoundKeywords}, \n            {token : \"variable.parameter\", regex : /\\w+-\\w+(?:-\\w+)*/}, \n            {token : keywordMapper, regex : \"\\\\b\\\\w+\\\\b\"},\n            {caseInsensitive: true}\n        ],\n        \"qstring\" : [\n            {token : \"constant.language.escape\",   regex : \"''\"},\n            {token : \"string\", regex : \"'\",     next  : \"start\"},\n            {defaultToken : \"string\"}\n        ],\n        \"string\" : [\n            {token : \"constant.language.escape\",   regex : \"``\"},\n            {token : \"string\", regex : \"`\",     next  : \"start\"},\n            {defaultToken : \"string\"}\n        ]\n    };\n};\noop.inherits(AbapHighlightRules, TextHighlightRules);\n\nexports.AbapHighlightRules = AbapHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/abc.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*\n THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n */\n\ndefine(function (require, exports, module) {\n    \"use strict\";\n\n    var oop = require(\"../lib/oop\");\n    var TextMode = require(\"./text\").Mode;\n    var ABCHighlightRules = require(\"./abc_highlight_rules\").ABCHighlightRules;\n    var FoldMode = require(\"./folding/cstyle\").FoldMode;\n\n    var Mode = function () {\n        this.HighlightRules = ABCHighlightRules;\n        this.foldingRules = new FoldMode();\n        this.$behaviour = this.$defaultBehaviour;\n    };\n    oop.inherits(Mode, TextMode);\n\n    (function () {\n        // this.lineCommentStart = \"\"%.*\"\";\n        // this.blockComment = {start: \"\"/*\"\", end: \"\"*/\"\"};\n        // Extra logic goes here.\n        this.$id = \"ace/mode/abc\";\n    }).call(Mode.prototype);\n\n    exports.Mode = Mode;\n});"
  },
  {
    "path": "lib/ace/mode/abc_highlight_rules.js",
    "content": "/* This file was partially autogenerated from https://github.com/jimhawkridge/SublimeABC\n\n Modifications\n\n -  more classes to express the abc semantic\n -  added syntax highlighting for Zupfnoter conventions (https://github.com/bwl21/zupfnoter)\n -  separate note pitch and note duration - even if it looks the same\n\n ***********************************************************************************************/\n\n\ndefine(function (require, exports, module) {\n    \"use strict\";\n\n    var oop = require(\"../lib/oop\");\n    var TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\n    var ABCHighlightRules = function () {\n        // regexp must not have capturing parentheses. Use (?:) instead.\n        // regexps are ordered -> the first match is used\n\n        this.$rules = {\n            start: [\n                {\n                    token: ['zupfnoter.information.comment.line.percentage', 'information.keyword', 'in formation.keyword.embedded'],\n                    regex: '(%%%%)(hn\\\\.[a-z]*)(.*)',\n                    comment: 'Instruction Comment'\n                },\n                {\n                    token: ['information.comment.line.percentage', 'information.keyword.embedded'],\n                    regex: '(%%)(.*)',\n                    comment: 'Instruction Comment'\n                },\n\n                {\n                    token: 'comment.line.percentage',\n                    regex: '%.*',\n                    comment: 'Comments'\n                },\n\n                {\n                    token: 'barline.keyword.operator',\n                    regex: '[\\\\[:]*[|:][|\\\\]:]*(?:\\\\[?[0-9]+)?|\\\\[[0-9]+',\n                    comment: 'Bar lines'\n                },\n                {\n                    token: ['information.keyword.embedded', 'information.argument.string.unquoted'],\n                    regex: '(\\\\[[A-Za-z]:)([^\\\\]]*\\\\])',\n                    comment: 'embedded Header lines'\n                },\n                {\n                    token: ['information.keyword', 'information.argument.string.unquoted'],\n                    regex: '^([A-Za-z]:)([^%\\\\\\\\]*)',\n                    comment: 'Header lines'\n                },\n                {\n                    token: ['text', 'entity.name.function', 'string.unquoted', 'text'],\n                    regex: '(\\\\[)([A-Z]:)(.*?)(\\\\])',\n                    comment: 'Inline fields'\n                },\n                {\n                    token: ['accent.constant.language', 'pitch.constant.numeric', 'duration.constant.numeric'],\n                    regex: '([\\\\^=_]*)([A-Ga-gz][,\\']*)([0-9]*/*[><0-9]*)',\n                    comment: 'Notes'\n                },\n                {\n                    token: 'zupfnoter.jumptarget.string.quoted',\n                    regex: '[\\\\\"!]\\\\^\\\\:.*?[\\\\\"!]',\n                    comment: 'Zupfnoter jumptarget'\n                }, {\n                    token: 'zupfnoter.goto.string.quoted',\n                    regex: '[\\\\\"!]\\\\^\\\\@.*?[\\\\\"!]',\n                    comment: 'Zupfnoter goto'\n                },\n                {\n                    token: 'zupfnoter.annotation.string.quoted',\n                    regex: '[\\\\\"!]\\\\^\\\\!.*?[\\\\\"!]',\n                    comment: 'Zupfnoter annoation'\n                },\n                {\n                    token: 'zupfnoter.annotationref.string.quoted',\n                    regex: '[\\\\\"!]\\\\^\\\\#.*?[\\\\\"!]',\n                    comment: 'Zupfnoter annotation reference'\n                },\n                {\n                    token: 'chordname.string.quoted',\n                    regex: '[\\\\\"!]\\\\^.*?[\\\\\"!]',\n                    comment: 'abc chord'\n                },\n                {\n                    token: 'string.quoted',\n                    regex: '[\\\\\"!].*?[\\\\\"!]',\n                    comment: 'abc annotation'\n                }\n\n            ]\n        };\n\n        //  this.embedRules(JsonHighlightRules, \"json-\")\n\n        this.normalizeRules();\n    };\n\n    ABCHighlightRules.metaData = {\n        fileTypes: ['abc'],\n        name: 'ABC',\n        scopeName: 'text.abcnotation'\n    };\n\n\n    oop.inherits(ABCHighlightRules, TextHighlightRules);\n\n    exports.ABCHighlightRules = ABCHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/actionscript.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ActionScriptHighlightRules = require(\"./actionscript_highlight_rules\").ActionScriptHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = ActionScriptHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$id = \"ace/mode/actionscript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});"
  },
  {
    "path": "lib/ace/mode/actionscript_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/* This file was autogenerated from tm bundles\\actionscript.tmbundle\\Syntaxes\\ActionScript.plist (uuid: ) */\n/****************************************************************************************\n * IT MIGHT NOT BE PERFECT ...But it's a good start from an existing *.tmlanguage file. *\n * fileTypes                                                                            *\n ****************************************************************************************/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar ActionScriptHighlightRules = function() {\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = { start: \n       [ { token: 'support.class.actionscript.2',\n           regex: '\\\\b(?:R(?:ecordset|DBMSResolver|adioButton(?:Group)?)|X(?:ML(?:Socket|Node|Connector)?|UpdateResolverDataHolder)|M(?:M(?:Save|Execute)|icrophoneMicrophone|o(?:use|vieClip(?:Loader)?)|e(?:nu(?:Bar)?|dia(?:Controller|Display|Playback))|ath)|B(?:yName|inding|utton)|S(?:haredObject|ystem|crollPane|t(?:yleSheet|age|ream)|ound|e(?:ndEvent|rviceObject)|OAPCall|lide)|N(?:umericStepper|et(?:stream|S(?:tream|ervices)|Connection|Debug(?:Config)?))|C(?:heckBox|o(?:ntextMenu(?:Item)?|okie|lor|m(?:ponentMixins|boBox))|ustomActions|lient|amera)|T(?:ypedValue|ext(?:Snapshot|Input|F(?:ield|ormat)|Area)|ree|AB)|Object|D(?:ownload|elta(?:Item|Packet)?|at(?:e(?:Chooser|Field)?|a(?:G(?:lue|rid)|Set|Type)))|U(?:RL|TC|IScrollBar)|P(?:opUpManager|endingCall|r(?:intJob|o(?:duct|gressBar)))|E(?:ndPoint|rror)|Video|Key|F(?:RadioButton|GridColumn|MessageBox|BarChart|S(?:croll(?:Bar|Pane)|tyleFormat|plitView)|orm|C(?:heckbox|omboBox|alendar)|unction|T(?:icker|ooltip(?:Lite)?|ree(?:Node)?)|IconButton|D(?:ataGrid|raggablePane)|P(?:ieChart|ushButton|ro(?:gressBar|mptBox))|L(?:i(?:stBox|neChart)|oadingBox)|AdvancedMessageBox)|W(?:indow|SDLURL|ebService(?:Connector)?)|L(?:ist|o(?:calConnection|ad(?:er|Vars)|g)|a(?:unch|bel))|A(?:sBroadcaster|cc(?:ordion|essibility)|S(?:Set(?:Native|PropFlags)|N(?:ew|ative)|C(?:onstructor|lamp(?:2)?)|InstanceOf)|pplication|lert|rray))\\\\b' },\n         { token: 'support.function.actionscript.2',\n           regex: '\\\\b(?:s(?:h(?:ift|ow(?:GridLines|Menu|Border|Settings|Headers|ColumnHeaders|Today|Preferences)?|ad(?:ow|ePane))|c(?:hema|ale(?:X|Mode|Y|Content)|r(?:oll(?:Track|Drag)?|een(?:Resolution|Color|DPI)))|t(?:yleSheet|op(?:Drag|A(?:nimation|llSounds|gent))?|epSize|a(?:tus|rt(?:Drag|A(?:nimation|gent))?))|i(?:n|ze|lence(?:TimeOut|Level))|o(?:ngname|urce|rt(?:Items(?:By)?|On(?:HeaderRelease)?|able(?:Columns)?)?)|u(?:ppressInvalidCalls|bstr(?:ing)?)|p(?:li(?:ce|t)|aceCol(?:umnsEqually|lumnsEqually))|e(?:nd(?:DefaultPushButtonEvent|AndLoad)?|curity|t(?:R(?:GB|o(?:otNode|w(?:Height|Count))|esizable(?:Columns)?|a(?:nge|te))|G(?:ain|roupName)|X(?:AxisTitle)?|M(?:i(?:n(?:imum|utes)|lliseconds)|o(?:nth(?:Names)?|tionLevel|de)|ultilineMode|e(?:ssage|nu(?:ItemEnabled(?:At)?|EnabledAt)|dia)|a(?:sk|ximum))|B(?:u(?:tton(?:s|Width)|fferTime)|a(?:seTabIndex|ndwidthLimit|ckground))|S(?:howAsDisabled|croll(?:ing|Speed|Content|Target|P(?:osition|roperties)|barState|Location)|t(?:yle(?:Property)?|opOnFocus|at(?:us|e))|i(?:ze|lenceLevel)|ort(?:able(?:Columns)?|Function)|p(?:litterBarPosition|acing)|e(?:conds|lect(?:Multiple|ion(?:Required|Type)?|Style|Color|ed(?:Node(?:s)?|Cell|I(?:nd(?:ices|ex)|tem(?:s)?))?|able))|kin|m(?:oothness|allScroll))|H(?:ighlight(?:s|Color)|Scroll|o(?:urs|rizontal)|eader(?:Symbol|Height|Text|Property|Format|Width|Location)?|as(?:Shader|CloseBox))|Y(?:ear|AxisTitle)?|N(?:ode(?:Properties|ExpansionHandler)|ewTextFormat)|C(?:h(?:ildNodes|a(?:ngeHandler|rt(?:Title|EventHandler)))|o(?:ntent(?:Size)?|okie|lumns)|ell(?:Symbol|Data)|l(?:i(?:ckHandler|pboard)|oseHandler)|redentials)|T(?:ype(?:dVaule)?|i(?:tle(?:barHeight)?|p(?:Target|Offset)?|me(?:out(?:Handler)?)?)|oggle|extFormat|ransform)|I(?:s(?:Branch|Open)|n(?:terval|putProperty)|con(?:SymbolName)?|te(?:rator|m(?:ByKey|Symbol)))|Orientation|D(?:i(?:splay(?:Range|Graphics|Mode|Clip|Text|edMonth)|rection)|uration|e(?:pth(?:Below|To|Above)|fault(?:GatewayURL|Mappings|NodeIconSymbolName)|l(?:iveryMode|ay)|bug(?:ID)?)|a(?:yOfWeekNames|t(?:e(?:Filter)?|a(?:Mapping(?:s)?|Item(?:Text|Property|Format)|Provider|All(?:Height|Property|Format|Width))?))|ra(?:wConnectors|gContent))|U(?:se(?:Shadow|HandCursor|EchoSuppression|rInput|Fade)|TC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear))|P(?:osition|ercentComplete|an(?:e(?:M(?:inimumSize|aximumSize)|Size|Title))?|ro(?:pert(?:y(?:Data)?|iesAt)|gress))|E(?:nabled|dit(?:Handler|able)|xpand(?:NodeTrigger|erSymbolName))|V(?:Scroll|olume|alue(?:Source)?)|KeyFrameInterval|Quality|F(?:i(?:eld|rst(?:DayOfWeek|VisibleNode))|ocus|ullYear|ps|ade(?:InLength|OutLength)|rame(?:Color|Width))|Width|L(?:ine(?:Color|Weight)|o(?:opback|adTarget)|a(?:rgeScroll|bel(?:Source|Placement)?))|A(?:s(?:Boolean|String|Number)|n(?:yTypedValue|imation)|ctiv(?:e(?:State(?:Handler)?|Handler)|ateHandler)|utoH(?:ideScrollBar|eight)))?|paratorBefore|ek|lect(?:ion(?:Disabled|Unfocused)?|ed(?:Node(?:s)?|Child|I(?:nd(?:ices|ex)|tem(?:s)?)|Dat(?:e|a))?|able(?:Ranges)?)|rver(?:String)?)|kip|qrt|wapDepths|lice|aveToSharedObj|moothing)|h(?:scroll(?:Policy)?|tml(?:Text)?|i(?:t(?:Test(?:TextNearPos)?|Area)|de(?:BuiltInItems|Child)?|ghlight(?:2D|3D)?)|orizontal|e(?:ight|ader(?:Re(?:nderer|lease)|Height|Text))|P(?:osition|ageScrollSize)|a(?:s(?:childNodes|MP3|S(?:creen(?:Broadcast|Playback)|treaming(?:Video|Audio)|ort)|Next|OwnProperty|Pr(?:inting|evious)|EmbeddedVideo|VideoEncoder|A(?:ccesibility|udio(?:Encoder)?))|ndlerName)|LineScrollSize)|ye(?:sLabel|ar)|n(?:o(?:t|de(?:Name|Close|Type|Open|Value)|Label)|u(?:llValue|mChild(?:S(?:creens|lides)|ren|Forms))|e(?:w(?:Item|line|Value|LocationDialog)|xt(?:S(?:cene|ibling|lide)|TabIndex|Value|Frame)?)?|ame(?:s)?)|c(?:h(?:ildNodes|eck|a(?:nge(?:sPending)?|r(?:CodeAt|At))|r)|o(?:s|n(?:st(?:ant|ructor)|nect|c(?:urrency|at)|t(?:ent(?:Type|Path)?|ains|rol(?:Placement|lerPolicy))|denseWhite|version)|py|l(?:or|umn(?:Stretch|Name(?:s)?|Count))|m(?:p(?:onent|lete)|ment))|u(?:stomItems|ePoint(?:s)?|r(?:veTo|Value|rent(?:Slide|ChildSlide|Item|F(?:ocused(?:S(?:creen|lide)|Form)|ps))))|e(?:il|ll(?:Renderer|Press|Edit|Focus(?:In|Out)))|l(?:i(?:ck|ents)|o(?:se(?:Button|Pane)?|ne(?:Node)?)|ear(?:S(?:haredObjects|treams)|Timeout|Interval)?)|a(?:ncelLabel|tch|p(?:tion|abilities)|l(?:cFields|l(?:e(?:e|r))?))|reate(?:GatewayConnection|Menu|Se(?:rver|gment)|C(?:hild(?:AtDepth)?|l(?:ient|ass(?:ChildAtDepth|Object(?:AtDepth)?))|all)|Text(?:Node|Field)|Item|Object(?:AtDepth)?|PopUp|E(?:lement|mptyMovieClip)))|t(?:h(?:is|row)|ype(?:of|Name)?|i(?:tle(?:StyleDeclaration)?|me(?:out)?)|o(?:talTime|String|olTipText|p|UpperCase|ggle(?:HighQuality)?|Lo(?:caleString|werCase))|e(?:st|llTarget|xt(?:RightMargin|Bold|S(?:ize|elected)|Height|Color|I(?:ndent|talic)|Disabled|Underline|F(?:ield|ont)|Width|LeftMargin|Align)?)|a(?:n|rget(?:Path)?|b(?:Stops|Children|Index|Enabled|leName))|r(?:y|igger|ac(?:e|k(?:AsMenu)?)))|i(?:s(?:Running|Branch|NaN|Con(?:soleOpen|nected)|Toggled|Installed|Open|D(?:own|ebugger)|P(?:urchased|ro(?:totypeOf|pertyEnumerable))|Empty|F(?:inite|ullyPopulated)|Local|Active)|n(?:s(?:tall|ertBefore)|cludeDeltaPacketInfo|t|it(?:ialize|Component|Pod|A(?:pplication|gent))?|de(?:nt|terminate|x(?:InParent(?:Slide|Form)?|Of)?)|put|validate|finity|LocalInternetCache)?|con(?:F(?:ield|unction))?|t(?:e(?:ratorScrolled|m(?:s|RollO(?:ut|ver)|ClassName))|alic)|d3|p|fFrameLoaded|gnore(?:Case|White))|o(?:s|n(?:R(?:ollO(?:ut|ver)|e(?:s(?:ize|ult)|l(?:ease(?:Outside)?|aseOutside)))|XML|Mouse(?:Move|Down|Up|Wheel)|S(?:ync|croller|tatus|oundComplete|e(?:tFocus|lect(?:edItem)?))|N(?:oticeEvent|etworkChange)|C(?:hanged|onnect|l(?:ipEvent|ose))|ID3|D(?:isconnect|eactivate|ata|ragO(?:ut|ver))|Un(?:install|load)|P(?:aymentResult|ress)|EnterFrame|K(?:illFocus|ey(?:Down|Up))|Fault|Lo(?:ad|g)|A(?:ctiv(?:ity|ate)|ppSt(?:op|art)))?|pe(?:n|ration)|verLayChildren|kLabel|ldValue|r(?:d)?)|d(?:i(?:s(?:connect|play(?:Normal|ed(?:Month|Year)|Full)|able(?:Shader|d(?:Ranges|Days)|CloseBox|Events))|rection)|o(?:cTypeDecl|tall|Decoding|main|LazyDecoding)|u(?:plicateMovieClip|ration)|e(?:stroy(?:ChildAt|Object)|code|fault(?:PushButton(?:Enabled)?|KeydownHandler)?|l(?:ta(?:Packet(?:Changed)?)?|ete(?:PopUp|All)?)|blocking)|a(?:shBoardSave|yNames|ta(?:Provider)?|rkshadow)|r(?:opdown(?:Width)?|a(?:w|gO(?:ut|ver))))|u(?:se(?:Sort|HandCursor|Codepage|EchoSuppression)|n(?:shift|install|derline|escape|format|watch|lo(?:ck|ad(?:Movie(?:Num)?)?))|pdate(?:Results|Mode|I(?:nputProperties|tem(?:ByIndex)?)|P(?:acket|roperties)|View|AfterEvent)|rl)|join|p(?:ixelAspectRatio|o(?:sition|p|w)|u(?:sh|rge|blish)|ercen(?:tComplete|Loaded)|lay(?:head(?:Change|Time)|ing|Hidden|erType)?|a(?:ssword|use|r(?:se(?:XML|CSS|Int|Float)|ent(?:Node|Is(?:S(?:creen|lide)|Form))|ams))|r(?:int(?:Num|AsBitmap(?:Num)?)?|o(?:to(?:type)?|pert(?:y|ies)|gress)|e(?:ss|v(?:ious(?:S(?:ibling|lide)|Value)?|Scene|Frame)|ferred(?:Height|Width))))|e(?:scape|n(?:code(?:r)?|ter(?:Frame)?|dFill|able(?:Shader|d|CloseBox|Events))|dit(?:able|Field|LocationDialog)|v(?:ent|al(?:uate)?)|q|x(?:tended|p|ec(?:ute)?|actSettings)|m(?:phasized(?:StyleDeclaration)?|bedFonts))|v(?:i(?:sible|ewPod)|ScrollPolicy|o(?:id|lume)|ersion|P(?:osition|ageScrollSize)|a(?:l(?:idat(?:ionError|e(?:Property|ActivationKey)?)|ue(?:Of)?)|riable)|LineScrollSize)|k(?:ind|ey(?:Down|Up|Press|FrameInterval))|q(?:sort|uality)|f(?:scommand|i(?:n(?:d(?:Text|First|Last)?|ally)|eldInfo|lter(?:ed|Func)?|rst(?:Slide|Child|DayOfWeek|VisibleNode)?)|o(?:nt|cus(?:In|edCell|Out|Enabled)|r(?:egroundDisabled|mat(?:ter)?))|unctionName|ps|l(?:oor|ush)|ace|romCharCode)|w(?:i(?:th|dth)|ordWrap|atch|riteAccess)|l(?:t|i(?:st(?:Owner)?|ne(?:Style|To))|o(?:c(?:k|a(?:t(?:ion|eByld)|l(?:ToGlobal|FileReadDisable)))|opback|ad(?:Movie(?:Num)?|S(?:crollContent|ound)|ed|Variables(?:Num)?|Application)?|g(?:Changes)?)|e(?:ngth|ft(?:Margin)?|ading)?|a(?:st(?:Slide|Child|Index(?:Of)?)?|nguage|b(?:el(?:Placement|F(?:ield|unction))?|leField)))|a(?:s(?:scociate(?:Controller|Display)|in|pectRatio|function)|nd|c(?:ceptConnection|tiv(?:ityLevel|ePlayControl)|os)|t(?:t(?:ach(?:Movie|Sound|Video|Audio)|ributes)|an(?:2)?)|dd(?:header|RequestHeader|Menu(?:Item(?:At)?|At)?|Sort|Header|No(?:tice|de(?:At)?)|C(?:olumn(?:At)?|uePoint)|T(?:oLocalInternetCache|reeNode(?:At)?)|I(?:con|tem(?:s(?:At)?|At)?)|DeltaItem|P(?:od|age|roperty)|EventListener|View|FieldInfo|Listener|Animation)?|uto(?:Size|Play|KeyNav|Load)|pp(?:endChild|ly(?:Changes|Updates)?)|vHardwareDisable|fterLoaded|l(?:ternateRowColors|ign|l(?:ow(?:InsecureDomain|Domain)|Transitions(?:InDone|OutDone))|bum)|r(?:tist|row|g(?:uments|List))|gent|bs)|r(?:ight(?:Margin)?|o(?:ot(?:S(?:creen|lide)|Form)|und|w(?:Height|Count)|llO(?:ut|ver))|e(?:s(?:yncDepth|t(?:orePane|artAnimation|rict)|iz(?:e|able(?:Columns)?)|olveDelta|ult(?:s)?|ponse)|c(?:o(?:ncile(?:Results|Updates)|rd)|eive(?:Video|Audio))|draw|jectConnection|place(?:Sel|ItemAt|AllItems)?|ve(?:al(?:Child)?|rse)|quest(?:SizeChange|Payment)?|f(?:errer|resh(?:ScrollContent|Destinations|Pane|FromSources)?)|lease(?:Outside)?|ad(?:Only|Access)|gister(?:SkinElement|C(?:olor(?:Style|Name)|lass)|InheritingStyle|Proxy)|move(?:Range|M(?:ovieClip|enu(?:Item(?:At)?|At))|Background|Sort|No(?:tice|de(?:sAt|At)?)|C(?:olum(?:nAt|At)|uePoints)|T(?:extField|reeNode(?:At)?)|Item(?:At)?|Pod|EventListener|FromLocalInternetCache|Listener|All(?:C(?:olumns|uePoints)|Items)?))|a(?:ndom|te|dioDot))|g(?:t|oto(?:Slide|NextSlide|PreviousSlide|FirstSlide|LastSlide|And(?:Stop|Play))|e(?:nre|t(?:R(?:GB|o(?:otNode|wCount)|e(?:sizable|mote))|X(?:AxisTitle)?|M(?:i(?:n(?:imum(?:Size)?|utes)|lliseconds)|onth(?:Names)?|ultilineMode|e(?:ssage|nu(?:ItemAt|EnabledAt|At))|aximum(?:Size)?)|B(?:ytes(?:Total|Loaded)|ounds|utton(?:s|Width)|eginIndex|a(?:ndwidthLimit|ckground))|S(?:howAsDisabled|croll(?:ing|Speed|Content|Position|barState|Location)|t(?:yle(?:Names)?|opOnFocus|ate)|ize|o(?:urce|rtState)|p(?:litterBarPosition|acing)|e(?:conds|lect(?:Multiple|ion(?:Required|Type)|Style|ed(?:Node(?:s)?|Cell|Text|I(?:nd(?:ices|ex)|tem(?:s)?))?)|rvice)|moothness|WFVersion)|H(?:ighlight(?:s|Color)|ours|e(?:ight|ader(?:Height|Text|Property|Format|Width|Location)?)|as(?:Shader|CloseBox))|Y(?:ear|AxisTitle)?|N(?:o(?:tices|de(?:DisplayedAt|At))|um(?:Children|berAvailable)|e(?:wTextFormat|xtHighestDepth))|C(?:h(?:ild(?:S(?:creen|lide)|Nodes|Form|At)|artTitle)|o(?:n(?:tent|figInfo)|okie|de|unt|lumn(?:Names|Count|Index|At))|uePoint|ellIndex|loseHandler|a(?:ll|retIndex))|T(?:ypedValue|i(?:tle(?:barHeight)?|p(?:Target|Offset)?|me(?:stamp|zoneOffset|out(?:State|Handler)|r)?)|oggle|ext(?:Extent|Format)?|r(?:ee(?:NodeAt|Length)|ans(?:form|actionId)))|I(?:s(?:Branch|Open)|n(?:stanceAtDepth|d(?:icesByKey|exByKey))|con(?:SymbolName)?|te(?:rator|m(?:sByKey|By(?:Name|Key)|id|ID|At))|d)|O(?:utput(?:Parameter(?:s|ByName)?|Value(?:s)?)|peration|ri(?:entation|ginalCellData))|D(?:i(?:s(?:play(?:Range|Mode|Clip|Index|edMonth)|kUsage)|rection)|uration|e(?:pth|faultNodeIconSymbolName|l(?:taPacket|ay)|bug(?:Config|ID)?)|a(?:y(?:OfWeekNames)?|t(?:e|a(?:Mapping(?:s)?|Item(?:Text|Property|Format)|Label|All(?:Height|Property|Format|Width))?))|rawConnectors)|U(?:se(?:Shadow|HandCursor|rInput|Fade)|RL|TC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear))|P(?:o(?:sition|ds)|ercentComplete|a(?:n(?:e(?:M(?:inimums|aximums)|Height|Title|Width))?|rentNode)|r(?:operty(?:Name|Data)?|efer(?:ences|red(?:Height|Width))))|E(?:n(?:dIndex|abled)|ditingData|x(?:panderSymbolName|andNodeTrigger))|V(?:iewed(?:Pods|Applications)|olume|ersion|alue(?:Source)?)|F(?:i(?:eld|rst(?:DayOfWeek|VisibleNode))|o(?:ntList|cus)|ullYear|ade(?:InLength|OutLength)|rame(?:Color|Width))|Width|L(?:ine(?:Color|Weight)|o(?:cal|adTarget)|ength|a(?:stTabIndex|bel(?:Source)?))|A(?:s(?:cii|Boolean|String|Number)|n(?:yTypedValue|imation)|ctiv(?:eState(?:Handler)?|ateHandler)|utoH(?:ideScrollBar|eight)|llItems|gent))?)?|lobal(?:StyleFormat|ToLocal)?|ain|roupName)|x(?:updatePackety|mlDecl)?|m(?:y(?:MethodName|Call)|in(?:imum)?|o(?:nthNames|tion(?:TimeOut|Level)|de(?:lChanged)?|use(?:Move|O(?:ut|ver)|Down(?:Somewhere|Outside)?|Up(?:Somewhere)?|WheelEnabled)|ve(?:To)?)|u(?:ted|lti(?:pleS(?:imultaneousAllowed|elections)|line))|e(?:ssage|nu(?:Show|Hide)?|th(?:od)?|diaType)|a(?:nufacturer|tch|x(?:scroll|hscroll|imum|HPosition|Chars|VPosition)?)|b(?:substring|chr|ord|length))|b(?:ytes(?:Total|Loaded)|indFormat(?:Strings|Function)|o(?:ttom(?:Scroll)?|ld|rder(?:Color)?)|u(?:tton(?:Height|Width)|iltInItems|ffer(?:Time|Length)|llet)|e(?:foreApplyUpdates|gin(?:GradientFill|Fill))|lockIndent|a(?:ndwidth|ckground(?:Style|Color|Disabled)?)|roadcastMessage)|onHTTPStatus)\\\\b' },\n         { token: 'support.constant.actionscript.2',\n           regex: '\\\\b(?:__proto__|__resolve|_accProps|_alpha|_changed|_currentframe|_droptarget|_flash|_focusrect|_framesloaded|_global|_height|_highquality|_level|_listeners|_lockroot|_name|_parent|_quality|_root|_rotation|_soundbuftime|_target|_totalframes|_url|_visible|_width|_x|_xmouse|_xscale|_y|_ymouse|_yscale)\\\\b' },\n         { token: 'keyword.control.actionscript.2',\n           regex: '\\\\b(?:dynamic|extends|import|implements|interface|public|private|new|static|super|var|for|in|break|continue|while|do|return|if|else|case|switch)\\\\b' },\n         { token: 'storage.type.actionscript.2',\n           regex: '\\\\b(?:Boolean|Number|String|Void)\\\\b' },\n         { token: 'constant.language.actionscript.2',\n           regex: '\\\\b(?:null|undefined|true|false)\\\\b' },\n         { token: 'constant.numeric.actionscript.2',\n           regex: '\\\\b(?:0(?:x|X)[0-9a-fA-F]*|(?:[0-9]+\\\\.?[0-9]*|\\\\.[0-9]+)(?:(?:e|E)(?:\\\\+|-)?[0-9]+)?)(?:L|l|UL|ul|u|U|F|f)?\\\\b' },\n         { token: 'punctuation.definition.string.begin.actionscript.2',\n           regex: '\"',\n           push: \n            [ { token: 'punctuation.definition.string.end.actionscript.2',\n                regex: '\"',\n                next: 'pop' },\n              { token: 'constant.character.escape.actionscript.2',\n                regex: '\\\\\\\\.' },\n              { defaultToken: 'string.quoted.double.actionscript.2' } ] },\n         { token: 'punctuation.definition.string.begin.actionscript.2',\n           regex: '\\'',\n           push: \n            [ { token: 'punctuation.definition.string.end.actionscript.2',\n                regex: '\\'',\n                next: 'pop' },\n              { token: 'constant.character.escape.actionscript.2',\n                regex: '\\\\\\\\.' },\n              { defaultToken: 'string.quoted.single.actionscript.2' } ] },\n         { token: 'support.constant.actionscript.2',\n           regex: '\\\\b(?:BACKSPACE|CAPSLOCK|CONTROL|DELETEKEY|DOWN|END|ENTER|HOME|INSERT|LEFT|LN10|LN2|LOG10E|LOG2E|MAX_VALUE|MIN_VALUE|NEGATIVE_INFINITY|NaN|PGDN|PGUP|PI|POSITIVE_INFINITY|RIGHT|SPACE|SQRT1_2|SQRT2|UP)\\\\b' },\n         { token: 'punctuation.definition.comment.actionscript.2',\n           regex: '/\\\\*',\n           push: \n            [ { token: 'punctuation.definition.comment.actionscript.2',\n                regex: '\\\\*/',\n                next: 'pop' },\n              { defaultToken: 'comment.block.actionscript.2' } ] },\n         { token: 'punctuation.definition.comment.actionscript.2',\n           regex: '//.*$',\n           push_: \n            [ { token: 'comment.line.double-slash.actionscript.2',\n                regex: '$',\n                next: 'pop' },\n              { defaultToken: 'comment.line.double-slash.actionscript.2' } ] },\n         { token: 'keyword.operator.actionscript.2',\n           regex: '\\\\binstanceof\\\\b' },\n         { token: 'keyword.operator.symbolic.actionscript.2',\n           regex: '[-!%&*+=/?:]' },\n         { token: \n            [ 'meta.preprocessor.actionscript.2',\n              'punctuation.definition.preprocessor.actionscript.2',\n              'meta.preprocessor.actionscript.2' ],\n           regex: '^([ \\\\t]*)(#)([a-zA-Z]+)' },\n         { token: \n            [ 'storage.type.function.actionscript.2',\n              'meta.function.actionscript.2',\n              'entity.name.function.actionscript.2',\n              'meta.function.actionscript.2',\n              'punctuation.definition.parameters.begin.actionscript.2' ],\n           regex: '\\\\b(function)(\\\\s+)([a-zA-Z_]\\\\w*)(\\\\s*)(\\\\()',\n           push: \n            [ { token: 'punctuation.definition.parameters.end.actionscript.2',\n                regex: '\\\\)',\n                next: 'pop' },\n              { token: 'variable.parameter.function.actionscript.2',\n                regex: '[^,)$]+' },\n              { defaultToken: 'meta.function.actionscript.2' } ] },\n         { token: \n            [ 'storage.type.class.actionscript.2',\n              'meta.class.actionscript.2',\n              'entity.name.type.class.actionscript.2',\n              'meta.class.actionscript.2',\n              'storage.modifier.extends.actionscript.2',\n              'meta.class.actionscript.2',\n              'entity.other.inherited-class.actionscript.2' ],\n           regex: '\\\\b(class)(\\\\s+)([a-zA-Z_](?:\\\\w|\\\\.)*)(?:(\\\\s+)(extends)(\\\\s+)([a-zA-Z_](?:\\\\w|\\\\.)*))?' } ] };\n    \n    this.normalizeRules();\n};\n\nActionScriptHighlightRules.metaData = { fileTypes: [ 'as' ],\n      keyEquivalent: '^~A',\n      name: 'ActionScript',\n      scopeName: 'source.actionscript.2' };\n\n\noop.inherits(ActionScriptHighlightRules, TextHighlightRules);\n\nexports.ActionScriptHighlightRules = ActionScriptHighlightRules;\n});"
  },
  {
    "path": "lib/ace/mode/ada.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar AdaHighlightRules = require(\"./ada_highlight_rules\").AdaHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = AdaHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"--\";\n\n    this.$id = \"ace/mode/ada\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\n"
  },
  {
    "path": "lib/ace/mode/ada_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar AdaHighlightRules = function() {\nvar keywords = \"abort|else|new|return|abs|elsif|not|reverse|abstract|end|null|accept|entry|select|\" +\n\"access|exception|of|separate|aliased|exit|or|some|all|others|subtype|and|for|out|synchronized|\" +\n\"array|function|overriding|at|tagged|generic|package|task|begin|goto|pragma|terminate|\" +\n\"body|private|then|if|procedure|type|case|in|protected|constant|interface|until|\" +\n\"|is|raise|use|declare|range|delay|limited|record|when|delta|loop|rem|while|digits|renames|with|do|mod|requeue|xor\";\n\n    var builtinConstants = (\n        \"true|false|null\"\n    );\n\n    var builtinFunctions = (\n        \"count|min|max|avg|sum|rank|now|coalesce|main\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": builtinFunctions,\n        \"keyword\": keywords,\n        \"constant.language\": builtinConstants\n    }, \"identifier\", true);\n\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment\",\n            regex : \"--.*$\"\n        }, {\n            token : \"string\",           // \" string\n            regex : '\".*?\"'\n        }, {\n            token : \"string\",           // ' string\n            regex : \"'.*?'\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|%|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[\\\\(]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\)]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+\"\n        } ]\n    };\n};\n\noop.inherits(AdaHighlightRules, TextHighlightRules);\n\nexports.AdaHighlightRules = AdaHighlightRules;\n});"
  },
  {
    "path": "lib/ace/mode/apache_conf.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n *\n * Contributor(s):\n *\n *\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ApacheConfHighlightRules = require(\"./apache_conf_highlight_rules\").ApacheConfHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = ApacheConfHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"#\";\n    this.$id = \"ace/mode/apache_conf\";\n    // Extra logic goes here.\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});"
  },
  {
    "path": "lib/ace/mode/apache_conf_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/* This file was autogenerated from https://raw.github.com/colinta/ApacheConf.tmLanguage/master/ApacheConf.tmLanguage (uuid: ) */\n/****************************************************************************************\n * IT MIGHT NOT BE PERFECT ...But it's a good start from an existing *.tmlanguage file. *\n * fileTypes                                                                            *\n ****************************************************************************************/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar ApacheConfHighlightRules = function() {\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = { start: \n       [ { token: \n            [ 'punctuation.definition.comment.apacheconf',\n              'comment.line.hash.ini',\n              'comment.line.hash.ini' ],\n           regex: '^((?:\\\\s)*)(#)(.*$)' },\n         { token: \n            [ 'punctuation.definition.tag.apacheconf',\n              'entity.tag.apacheconf',\n              'text',\n              'string.value.apacheconf',\n              'punctuation.definition.tag.apacheconf' ],\n           regex: '(<)(Proxy|ProxyMatch|IfVersion|Directory|DirectoryMatch|Files|FilesMatch|IfDefine|IfModule|Limit|LimitExcept|Location|LocationMatch|VirtualHost)(?:(\\\\s)(.+?))?(>)' },\n         { token: \n            [ 'punctuation.definition.tag.apacheconf',\n              'entity.tag.apacheconf',\n              'punctuation.definition.tag.apacheconf' ],\n           regex: '(</)(Proxy|ProxyMatch|IfVersion|Directory|DirectoryMatch|Files|FilesMatch|IfDefine|IfModule|Limit|LimitExcept|Location|LocationMatch|VirtualHost)(>)' },\n         { token: \n            [ 'keyword.alias.apacheconf', 'text',\n              'string.regexp.apacheconf', 'text',\n              'string.replacement.apacheconf', 'text' ],\n           regex: '(Rewrite(?:Rule|Cond))(\\\\s+)(.+?)(\\\\s+)(.+?)($|\\\\s)' },\n         { token: \n            [ 'keyword.alias.apacheconf', 'text',\n              'entity.status.apacheconf', 'text',\n              'string.regexp.apacheconf', 'text',\n              'string.path.apacheconf', 'text' ],\n           regex: '(RedirectMatch)(?:(\\\\s+)(\\\\d\\\\d\\\\d|permanent|temp|seeother|gone))?(\\\\s+)(.+?)(\\\\s+)(?:(.+?)($|\\\\s))?' },\n         { token: \n            [ 'keyword.alias.apacheconf', 'text', \n              'entity.status.apacheconf', 'text',\n              'string.path.apacheconf', 'text',\n              'string.path.apacheconf', 'text' ],\n           regex: '(Redirect)(?:(\\\\s+)(\\\\d\\\\d\\\\d|permanent|temp|seeother|gone))?(\\\\s+)(.+?)(\\\\s+)(?:(.+?)($|\\\\s))?' },\n         { token: \n            [ 'keyword.alias.apacheconf', 'text',\n              'string.regexp.apacheconf', 'text',\n              'string.path.apacheconf', 'text' ],\n           regex: '(ScriptAliasMatch|AliasMatch)(\\\\s+)(.+?)(\\\\s+)(?:(.+?)(\\\\s))?' },\n         { token: \n            [ 'keyword.alias.apacheconf', 'text',\n              'string.path.apacheconf', 'text',\n              'string.path.apacheconf', 'text' ],\n           regex: '(RedirectPermanent|RedirectTemp|ScriptAlias|Alias)(\\\\s+)(.+?)(\\\\s+)(?:(.+?)($|\\\\s))?' },\n         { token: 'keyword.core.apacheconf',\n           regex: '\\\\b(?:AcceptPathInfo|AccessFileName|AddDefaultCharset|AddOutputFilterByType|AllowEncodedSlashes|AllowOverride|AuthName|AuthType|CGIMapExtension|ContentDigest|DefaultType|DocumentRoot|EnableMMAP|EnableSendfile|ErrorDocument|ErrorLog|FileETag|ForceType|HostnameLookups|IdentityCheck|Include|KeepAlive|KeepAliveTimeout|LimitInternalRecursion|LimitRequestBody|LimitRequestFields|LimitRequestFieldSize|LimitRequestLine|LimitXMLRequestBody|LogLevel|MaxKeepAliveRequests|NameVirtualHost|Options|Require|RLimitCPU|RLimitMEM|RLimitNPROC|Satisfy|ScriptInterpreterSource|ServerAdmin|ServerAlias|ServerName|ServerPath|ServerRoot|ServerSignature|ServerTokens|SetHandler|SetInputFilter|SetOutputFilter|TimeOut|TraceEnable|UseCanonicalName)\\\\b' },\n         { token: 'keyword.mpm.apacheconf',\n           regex: '\\\\b(?:AcceptMutex|AssignUserID|BS2000Account|ChildPerUserID|CoreDumpDirectory|EnableExceptionHook|Group|Listen|ListenBacklog|LockFile|MaxClients|MaxMemFree|MaxRequestsPerChild|MaxRequestsPerThread|MaxSpareServers|MaxSpareThreads|MaxThreads|MaxThreadsPerChild|MinSpareServers|MinSpareThreads|NumServers|PidFile|ReceiveBufferSize|ScoreBoardFile|SendBufferSize|ServerLimit|StartServers|StartThreads|ThreadLimit|ThreadsPerChild|ThreadStackSize|User|Win32DisableAcceptEx)\\\\b' },\n         { token: 'keyword.access.apacheconf',\n           regex: '\\\\b(?:Allow|Deny|Order)\\\\b' },\n         { token: 'keyword.actions.apacheconf',\n           regex: '\\\\b(?:Action|Script)\\\\b' },\n         { token: 'keyword.alias.apacheconf',\n           regex: '\\\\b(?:Alias|AliasMatch|Redirect|RedirectMatch|RedirectPermanent|RedirectTemp|ScriptAlias|ScriptAliasMatch)\\\\b' },\n         { token: 'keyword.auth.apacheconf',\n           regex: '\\\\b(?:AuthAuthoritative|AuthGroupFile|AuthUserFile)\\\\b' },\n         { token: 'keyword.auth_anon.apacheconf',\n           regex: '\\\\b(?:Anonymous|Anonymous_Authoritative|Anonymous_LogEmail|Anonymous_MustGiveEmail|Anonymous_NoUserID|Anonymous_VerifyEmail)\\\\b' },\n         { token: 'keyword.auth_dbm.apacheconf',\n           regex: '\\\\b(?:AuthDBMAuthoritative|AuthDBMGroupFile|AuthDBMType|AuthDBMUserFile)\\\\b' },\n         { token: 'keyword.auth_digest.apacheconf',\n           regex: '\\\\b(?:AuthDigestAlgorithm|AuthDigestDomain|AuthDigestFile|AuthDigestGroupFile|AuthDigestNcCheck|AuthDigestNonceFormat|AuthDigestNonceLifetime|AuthDigestQop|AuthDigestShmemSize)\\\\b' },\n         { token: 'keyword.auth_ldap.apacheconf',\n           regex: '\\\\b(?:AuthLDAPAuthoritative|AuthLDAPBindDN|AuthLDAPBindPassword|AuthLDAPCharsetConfig|AuthLDAPCompareDNOnServer|AuthLDAPDereferenceAliases|AuthLDAPEnabled|AuthLDAPFrontPageHack|AuthLDAPGroupAttribute|AuthLDAPGroupAttributeIsDN|AuthLDAPRemoteUserIsDN|AuthLDAPUrl)\\\\b' },\n         { token: 'keyword.autoindex.apacheconf',\n           regex: '\\\\b(?:AddAlt|AddAltByEncoding|AddAltByType|AddDescription|AddIcon|AddIconByEncoding|AddIconByType|DefaultIcon|HeaderName|IndexIgnore|IndexOptions|IndexOrderDefault|ReadmeName)\\\\b' },\n         { token: 'keyword.cache.apacheconf',\n           regex: '\\\\b(?:CacheDefaultExpire|CacheDisable|CacheEnable|CacheForceCompletion|CacheIgnoreCacheControl|CacheIgnoreHeaders|CacheIgnoreNoLastMod|CacheLastModifiedFactor|CacheMaxExpire)\\\\b' },\n         { token: 'keyword.cern_meta.apacheconf',\n           regex: '\\\\b(?:MetaDir|MetaFiles|MetaSuffix)\\\\b' },\n         { token: 'keyword.cgi.apacheconf',\n           regex: '\\\\b(?:ScriptLog|ScriptLogBuffer|ScriptLogLength)\\\\b' },\n         { token: 'keyword.cgid.apacheconf',\n           regex: '\\\\b(?:ScriptLog|ScriptLogBuffer|ScriptLogLength|ScriptSock)\\\\b' },\n         { token: 'keyword.charset_lite.apacheconf',\n           regex: '\\\\b(?:CharsetDefault|CharsetOptions|CharsetSourceEnc)\\\\b' },\n         { token: 'keyword.dav.apacheconf',\n           regex: '\\\\b(?:Dav|DavDepthInfinity|DavMinTimeout|DavLockDB)\\\\b' },\n         { token: 'keyword.deflate.apacheconf',\n           regex: '\\\\b(?:DeflateBufferSize|DeflateCompressionLevel|DeflateFilterNote|DeflateMemLevel|DeflateWindowSize)\\\\b' },\n         { token: 'keyword.dir.apacheconf',\n           regex: '\\\\b(?:DirectoryIndex|DirectorySlash)\\\\b' },\n         { token: 'keyword.disk_cache.apacheconf',\n           regex: '\\\\b(?:CacheDirLength|CacheDirLevels|CacheExpiryCheck|CacheGcClean|CacheGcDaily|CacheGcInterval|CacheGcMemUsage|CacheGcUnused|CacheMaxFileSize|CacheMinFileSize|CacheRoot|CacheSize|CacheTimeMargin)\\\\b' },\n         { token: 'keyword.dumpio.apacheconf',\n           regex: '\\\\b(?:DumpIOInput|DumpIOOutput)\\\\b' },\n         { token: 'keyword.env.apacheconf',\n           regex: '\\\\b(?:PassEnv|SetEnv|UnsetEnv)\\\\b' },\n         { token: 'keyword.expires.apacheconf',\n           regex: '\\\\b(?:ExpiresActive|ExpiresByType|ExpiresDefault)\\\\b' },\n         { token: 'keyword.ext_filter.apacheconf',\n           regex: '\\\\b(?:ExtFilterDefine|ExtFilterOptions)\\\\b' },\n         { token: 'keyword.file_cache.apacheconf',\n           regex: '\\\\b(?:CacheFile|MMapFile)\\\\b' },\n         { token: 'keyword.headers.apacheconf',\n           regex: '\\\\b(?:Header|RequestHeader)\\\\b' },\n         { token: 'keyword.imap.apacheconf',\n           regex: '\\\\b(?:ImapBase|ImapDefault|ImapMenu)\\\\b' },\n         { token: 'keyword.include.apacheconf',\n           regex: '\\\\b(?:SSIEndTag|SSIErrorMsg|SSIStartTag|SSITimeFormat|SSIUndefinedEcho|XBitHack)\\\\b' },\n         { token: 'keyword.isapi.apacheconf',\n           regex: '\\\\b(?:ISAPIAppendLogToErrors|ISAPIAppendLogToQuery|ISAPICacheFile|ISAPIFakeAsync|ISAPILogNotSupported|ISAPIReadAheadBuffer)\\\\b' },\n         { token: 'keyword.ldap.apacheconf',\n           regex: '\\\\b(?:LDAPCacheEntries|LDAPCacheTTL|LDAPConnectionTimeout|LDAPOpCacheEntries|LDAPOpCacheTTL|LDAPSharedCacheFile|LDAPSharedCacheSize|LDAPTrustedCA|LDAPTrustedCAType)\\\\b' },\n         { token: 'keyword.log.apacheconf',\n           regex: '\\\\b(?:BufferedLogs|CookieLog|CustomLog|LogFormat|TransferLog|ForensicLog)\\\\b' },\n         { token: 'keyword.mem_cache.apacheconf',\n           regex: '\\\\b(?:MCacheMaxObjectCount|MCacheMaxObjectSize|MCacheMaxStreamingBuffer|MCacheMinObjectSize|MCacheRemovalAlgorithm|MCacheSize)\\\\b' },\n         { token: 'keyword.mime.apacheconf',\n           regex: '\\\\b(?:AddCharset|AddEncoding|AddHandler|AddInputFilter|AddLanguage|AddOutputFilter|AddType|DefaultLanguage|ModMimeUsePathInfo|MultiviewsMatch|RemoveCharset|RemoveEncoding|RemoveHandler|RemoveInputFilter|RemoveLanguage|RemoveOutputFilter|RemoveType|TypesConfig)\\\\b' },\n         { token: 'keyword.misc.apacheconf',\n           regex: '\\\\b(?:ProtocolEcho|Example|AddModuleInfo|MimeMagicFile|CheckSpelling|ExtendedStatus|SuexecUserGroup|UserDir)\\\\b' },\n         { token: 'keyword.negotiation.apacheconf',\n           regex: '\\\\b(?:CacheNegotiatedDocs|ForceLanguagePriority|LanguagePriority)\\\\b' },\n         { token: 'keyword.nw_ssl.apacheconf',\n           regex: '\\\\b(?:NWSSLTrustedCerts|NWSSLUpgradeable|SecureListen)\\\\b' },\n         { token: 'keyword.proxy.apacheconf',\n           regex: '\\\\b(?:AllowCONNECT|NoProxy|ProxyBadHeader|ProxyBlock|ProxyDomain|ProxyErrorOverride|ProxyFtpDirCharset|ProxyIOBufferSize|ProxyMaxForwards|ProxyPass|ProxyPassReverse|ProxyPreserveHost|ProxyReceiveBufferSize|ProxyRemote|ProxyRemoteMatch|ProxyRequests|ProxyTimeout|ProxyVia)\\\\b' },\n         { token: 'keyword.rewrite.apacheconf',\n           regex: '\\\\b(?:RewriteBase|RewriteCond|RewriteEngine|RewriteLock|RewriteLog|RewriteLogLevel|RewriteMap|RewriteOptions|RewriteRule)\\\\b' },\n         { token: 'keyword.setenvif.apacheconf',\n           regex: '\\\\b(?:BrowserMatch|BrowserMatchNoCase|SetEnvIf|SetEnvIfNoCase)\\\\b' },\n         { token: 'keyword.so.apacheconf',\n           regex: '\\\\b(?:LoadFile|LoadModule)\\\\b' },\n         { token: 'keyword.ssl.apacheconf',\n           regex: '\\\\b(?:SSLCACertificateFile|SSLCACertificatePath|SSLCARevocationFile|SSLCARevocationPath|SSLCertificateChainFile|SSLCertificateFile|SSLCertificateKeyFile|SSLCipherSuite|SSLEngine|SSLMutex|SSLOptions|SSLPassPhraseDialog|SSLProtocol|SSLProxyCACertificateFile|SSLProxyCACertificatePath|SSLProxyCARevocationFile|SSLProxyCARevocationPath|SSLProxyCipherSuite|SSLProxyEngine|SSLProxyMachineCertificateFile|SSLProxyMachineCertificatePath|SSLProxyProtocol|SSLProxyVerify|SSLProxyVerifyDepth|SSLRandomSeed|SSLRequire|SSLRequireSSL|SSLSessionCache|SSLSessionCacheTimeout|SSLUserName|SSLVerifyClient|SSLVerifyDepth)\\\\b' },\n         { token: 'keyword.usertrack.apacheconf',\n           regex: '\\\\b(?:CookieDomain|CookieExpires|CookieName|CookieStyle|CookieTracking)\\\\b' },\n         { token: 'keyword.vhost_alias.apacheconf',\n           regex: '\\\\b(?:VirtualDocumentRoot|VirtualDocumentRootIP|VirtualScriptAlias|VirtualScriptAliasIP)\\\\b' },\n         { token: \n            [ 'keyword.php.apacheconf',\n              'text',\n              'entity.property.apacheconf',\n              'text',\n              'string.value.apacheconf',\n              'text' ],\n           regex: '\\\\b(php_value|php_flag)\\\\b(?:(\\\\s+)(.+?)(?:(\\\\s+)(.+?))?)?(\\\\s)' },\n         { token: \n            [ 'punctuation.variable.apacheconf',\n              'variable.env.apacheconf',\n              'variable.misc.apacheconf',\n              'punctuation.variable.apacheconf' ],\n           regex: '(%\\\\{)(?:(HTTP_USER_AGENT|HTTP_REFERER|HTTP_COOKIE|HTTP_FORWARDED|HTTP_HOST|HTTP_PROXY_CONNECTION|HTTP_ACCEPT|REMOTE_ADDR|REMOTE_HOST|REMOTE_PORT|REMOTE_USER|REMOTE_IDENT|REQUEST_METHOD|SCRIPT_FILENAME|PATH_INFO|QUERY_STRING|AUTH_TYPE|DOCUMENT_ROOT|SERVER_ADMIN|SERVER_NAME|SERVER_ADDR|SERVER_PORT|SERVER_PROTOCOL|SERVER_SOFTWARE|TIME_YEAR|TIME_MON|TIME_DAY|TIME_HOUR|TIME_MIN|TIME_SEC|TIME_WDAY|TIME|API_VERSION|THE_REQUEST|REQUEST_URI|REQUEST_FILENAME|IS_SUBREQ|HTTPS)|(.*?))(\\\\})' },\n         { token: [ 'entity.mime-type.apacheconf', 'text' ],\n           regex: '\\\\b((?:text|image|application|video|audio)/.+?)(\\\\s)' },\n         { token: 'entity.helper.apacheconf',\n           regex: '\\\\b(?:from|unset|set|on|off)\\\\b',\n           caseInsensitive: true },\n         { token: 'constant.integer.apacheconf', regex: '\\\\b\\\\d+\\\\b' },\n         { token: \n            [ 'text',\n              'punctuation.definition.flag.apacheconf',\n              'string.flag.apacheconf',\n              'punctuation.definition.flag.apacheconf',\n              'text' ],\n           regex: '(\\\\s)(\\\\[)(.*?)(\\\\])(\\\\s)' } ] };\n    \n    this.normalizeRules();\n};\n\nApacheConfHighlightRules.metaData = { fileTypes: \n       [ 'conf',\n         'CONF',\n         'htaccess',\n         'HTACCESS',\n         'htgroups',\n         'HTGROUPS',\n         'htpasswd',\n         'HTPASSWD',\n         '.htaccess',\n         '.HTACCESS',\n         '.htgroups',\n         '.HTGROUPS',\n         '.htpasswd',\n         '.HTPASSWD' ],\n      name: 'Apache Conf',\n      scopeName: 'source.apacheconf' };\n\n\noop.inherits(ApacheConfHighlightRules, TextHighlightRules);\n\nexports.ApacheConfHighlightRules = ApacheConfHighlightRules;\n});"
  },
  {
    "path": "lib/ace/mode/applescript.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar AppleScriptHighlightRules = require(\"./applescript_highlight_rules\").AppleScriptHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = AppleScriptHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"--\";\n    this.blockComment = {start: \"(*\", end: \"*)\"};\n    this.$id = \"ace/mode/applescript\";\n    // Extra logic goes here.\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/applescript_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar AppleScriptHighlightRules = function() {\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n    var keywords = (\n        \"about|above|after|against|and|around|as|at|back|before|beginning|\" +\n        \"behind|below|beneath|beside|between|but|by|considering|\" +\n        \"contain|contains|continue|copy|div|does|eighth|else|end|equal|\" +\n        \"equals|error|every|exit|fifth|first|for|fourth|from|front|\" +\n        \"get|given|global|if|ignoring|in|into|is|it|its|last|local|me|\" +\n        \"middle|mod|my|ninth|not|of|on|onto|or|over|prop|property|put|ref|\" +\n        \"reference|repeat|returning|script|second|set|seventh|since|\" +\n        \"sixth|some|tell|tenth|that|the|then|third|through|thru|\" +\n        \"timeout|times|to|transaction|try|until|where|while|whose|with|without\"\n    );\n\n    var builtinConstants = (\n        \"AppleScript|false|linefeed|return|pi|quote|result|space|tab|true\"\n    );\n\n    var builtinFunctions = (\n        \"activate|beep|count|delay|launch|log|offset|read|round|run|say|\" +\n        \"summarize|write\"\n    );\n\n    var builtinTypes = (\n        \"alias|application|boolean|class|constant|date|file|integer|list|\" +\n        \"number|real|record|string|text|character|characters|contents|day|\" +\n        \"frontmost|id|item|length|month|name|paragraph|paragraphs|rest|\" +\n        \"reverse|running|time|version|weekday|word|words|year\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": builtinFunctions,\n        \"constant.language\": builtinConstants,\n        \"support.type\": builtinTypes,\n        \"keyword\": keywords\n    }, \"identifier\");\n\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: \"--.*$\"\n            },\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\(\\\\*\",\n                next : \"comment\"\n            },\n            {\n                token: \"string\",           // \" string\n                regex: '\".*?\"'\n            },\n            {\n                token: \"support.type\",\n                regex: '\\\\b(POSIX file|POSIX path|(date|time) string|quoted form)\\\\b'\n            },\n            {\n                token: \"support.function\",\n                regex: '\\\\b(clipboard info|the clipboard|info for|list (disks|folder)|' +\n          'mount volume|path to|(close|open for) access|(get|set) eof|' +\n          'current date|do shell script|get volume settings|random number|' +\n          'set volume|system attribute|system info|time to GMT|' +\n          '(load|run|store) script|scripting components|' +\n          'ASCII (character|number)|localized string|' +\n          'choose (application|color|file|file name|' +\n          'folder|from list|remote application|URL)|' +\n          'display (alert|dialog))\\\\b|^\\\\s*return\\\\b'\n            },\n            {\n                token: \"constant.language\",\n                regex: '\\\\b(text item delimiters|current application|missing value)\\\\b'\n            },\n            {\n                token: \"keyword\",\n                regex: '\\\\b(apart from|aside from|instead of|out of|greater than|' +\n          \"isn't|(doesn't|does not) (equal|come before|come after|contain)|\" +\n          '(greater|less) than( or equal)?|(starts?|ends|begins?) with|' +\n          'contained by|comes (before|after)|a (ref|reference))\\\\b'\n            },\n            {\n                token: keywordMapper,\n                regex: \"[a-zA-Z][a-zA-Z0-9_]*\\\\b\"\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment\", // closing comment\n                regex: \"\\\\*\\\\)\",\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ]\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(AppleScriptHighlightRules, TextHighlightRules);\n\nexports.AppleScriptHighlightRules = AppleScriptHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/asciidoc.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar AsciidocHighlightRules = require(\"./asciidoc_highlight_rules\").AsciidocHighlightRules;\nvar AsciidocFoldMode = require(\"./folding/asciidoc\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = AsciidocHighlightRules;\n    \n    this.foldingRules = new AsciidocFoldMode();    \n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.type = \"text\";\n    this.getNextLineIndent = function(state, line, tab) {\n        if (state == \"listblock\") {\n            var match = /^((?:.+)?)([-+*][ ]+)/.exec(line);\n            if (match) {\n                return new Array(match[1].length + 1).join(\" \") + match[2];\n            } else {\n                return \"\";\n            }\n        } else {\n            return this.$getIndent(line);\n        }\n    };\n    this.$id = \"ace/mode/asciidoc\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/asciidoc_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar AsciidocHighlightRules = function() {\n    var identifierRe = \"[a-zA-Z\\u00a1-\\uffff]+\\\\b\";\n\n    this.$rules = {\n        \"start\": [\n            {token: \"empty\",   regex: /$/},\n            {token: \"literal\", regex: /^\\.{4,}\\s*$/,  next: \"listingBlock\"},\n            {token: \"literal\", regex: /^-{4,}\\s*$/,   next: \"literalBlock\"},\n            {token: \"string\",  regex: /^\\+{4,}\\s*$/,  next: \"passthroughBlock\"},\n            {token: \"keyword\", regex: /^={4,}\\s*$/},\n            {token: \"text\",    regex: /^\\s*$/},\n            // immediately return to the start mode without matching anything\n            {token: \"empty\", regex: \"\", next: \"dissallowDelimitedBlock\"}\n        ],\n\n        \"dissallowDelimitedBlock\": [\n            {include: \"paragraphEnd\"},\n            {token: \"comment\", regex: '^//.+$'},\n            {token: \"keyword\", regex: \"^(?:NOTE|TIP|IMPORTANT|WARNING|CAUTION):\"},\n\n            {include: \"listStart\"},\n            {token: \"literal\", regex: /^\\s+.+$/, next: \"indentedBlock\"},\n            {token: \"empty\",   regex: \"\", next: \"text\"}\n        ],\n\n        \"paragraphEnd\": [\n            {token: \"doc.comment\", regex: /^\\/{4,}\\s*$/,    next: \"commentBlock\"},\n            {token: \"tableBlock\",  regex: /^\\s*[|!]=+\\s*$/, next: \"tableBlock\"},\n            // open block, ruller\n            {token: \"keyword\",     regex: /^(?:--|''')\\s*$/, next: \"start\"},\n            {token: \"option\",      regex: /^\\[.*\\]\\s*$/,     next: \"start\"},\n            {token: \"pageBreak\",   regex: /^>{3,}$/,         next: \"start\"},\n            {token: \"literal\",     regex: /^\\.{4,}\\s*$/,     next: \"listingBlock\"},\n            {token: \"titleUnderline\",    regex: /^(?:={2,}|-{2,}|~{2,}|\\^{2,}|\\+{2,})\\s*$/, next: \"start\"},\n            {token: \"singleLineTitle\",   regex: /^={1,5}\\s+\\S.*$/, next: \"start\"},\n\n            {token: \"otherBlock\",    regex: /^(?:\\*{2,}|_{2,})\\s*$/, next: \"start\"},\n            // .optional title\n            {token: \"optionalTitle\", regex: /^\\.[^.\\s].+$/,  next: \"start\"}\n        ],\n\n        \"listStart\": [\n            {token: \"keyword\",  regex: /^\\s*(?:\\d+\\.|[a-zA-Z]\\.|[ixvmIXVM]+\\)|\\*{1,5}|-|\\.{1,5})\\s/, next: \"listText\"},\n            {token: \"meta.tag\", regex: /^.+(?::{2,4}|;;)(?: |$)/, next: \"listText\"},\n            {token: \"support.function.list.callout\", regex: /^(?:<\\d+>|\\d+>|>) /, next: \"text\"},\n            // continuation\n            {token: \"keyword\",  regex: /^\\+\\s*$/, next: \"start\"}\n        ],\n\n        \"text\": [\n            {token: [\"link\", \"variable.language\"], regex: /((?:https?:\\/\\/|ftp:\\/\\/|file:\\/\\/|mailto:|callto:)[^\\s\\[]+)(\\[.*?\\])/},\n            {token: \"link\", regex: /(?:https?:\\/\\/|ftp:\\/\\/|file:\\/\\/|mailto:|callto:)[^\\s\\[]+/},\n            {token: \"link\", regex: /\\b[\\w\\.\\/\\-]+@[\\w\\.\\/\\-]+\\b/},\n            {include: \"macros\"},\n            {include: \"paragraphEnd\"},\n            {token: \"literal\", regex:/\\+{3,}/, next:\"smallPassthrough\"},\n            {token: \"escape\", regex: /\\((?:C|TM|R)\\)|\\.{3}|->|<-|=>|<=|&#(?:\\d+|x[a-fA-F\\d]+);|(?: |^)--(?=\\s+\\S)/},\n            {token: \"escape\", regex: /\\\\[_*'`+#]|\\\\{2}[_*'`+#]{2}/},\n            {token: \"keyword\", regex: /\\s\\+$/},\n            // any word\n            {token: \"text\", regex: identifierRe},\n            {token: [\"keyword\", \"string\", \"keyword\"],\n                regex: /(<<[\\w\\d\\-$]+,)(.*?)(>>|$)/},\n            {token: \"keyword\", regex: /<<[\\w\\d\\-$]+,?|>>/},\n            {token: \"constant.character\", regex: /\\({2,3}.*?\\){2,3}/},\n            // Anchor\n            {token: \"keyword\", regex: /\\[\\[.+?\\]\\]/},\n            // bibliography\n            {token: \"support\", regex: /^\\[{3}[\\w\\d =\\-]+\\]{3}/},\n\n            {include: \"quotes\"},\n            // text block end\n            {token: \"empty\", regex: /^\\s*$/, next: \"start\"}\n        ],\n\n        \"listText\": [\n            {include: \"listStart\"},\n            {include: \"text\"}\n        ],\n\n        \"indentedBlock\": [\n            {token: \"literal\", regex: /^[\\s\\w].+$/, next: \"indentedBlock\"},\n            {token: \"literal\", regex: \"\", next: \"start\"}\n        ],\n\n        \"listingBlock\": [\n            {token: \"literal\", regex: /^\\.{4,}\\s*$/, next: \"dissallowDelimitedBlock\"},\n            {token: \"constant.numeric\", regex: '<\\\\d+>'},\n            {token: \"literal\", regex: '[^<]+'},\n            {token: \"literal\", regex: '<'}\n        ],\n        \"literalBlock\": [\n            {token: \"literal\", regex: /^-{4,}\\s*$/, next: \"dissallowDelimitedBlock\"},\n            {token: \"constant.numeric\", regex: '<\\\\d+>'},\n            {token: \"literal\", regex: '[^<]+'},\n            {token: \"literal\", regex: '<'}\n        ],\n        \"passthroughBlock\": [\n            {token: \"literal\", regex: /^\\+{4,}\\s*$/, next: \"dissallowDelimitedBlock\"},\n            {token: \"literal\", regex: identifierRe + \"|\\\\d+\"},\n            {include: \"macros\"},\n            {token: \"literal\", regex: \".\"}\n        ],\n\n        \"smallPassthrough\": [\n            {token: \"literal\", regex: /[+]{3,}/, next: \"dissallowDelimitedBlock\"},\n            {token: \"literal\", regex: /^\\s*$/, next: \"dissallowDelimitedBlock\"},\n            {token: \"literal\", regex: identifierRe + \"|\\\\d+\"},\n            {include: \"macros\"}\n        ],\n\n        \"commentBlock\": [\n            {token: \"doc.comment\", regex: /^\\/{4,}\\s*$/, next: \"dissallowDelimitedBlock\"},\n            {token: \"doc.comment\", regex: '^.*$'}\n        ],\n        \"tableBlock\": [\n            {token: \"tableBlock\", regex: /^\\s*\\|={3,}\\s*$/, next: \"dissallowDelimitedBlock\"},\n            {token: \"tableBlock\", regex: /^\\s*!={3,}\\s*$/, next: \"innerTableBlock\"},\n            {token: \"tableBlock\", regex: /\\|/},\n            {include: \"text\", noEscape: true}\n        ],\n        \"innerTableBlock\": [\n            {token: \"tableBlock\", regex: /^\\s*!={3,}\\s*$/, next: \"tableBlock\"},\n            {token: \"tableBlock\", regex: /^\\s*|={3,}\\s*$/, next: \"dissallowDelimitedBlock\"},\n            {token: \"tableBlock\", regex: /!/}\n        ],\n        \"macros\": [\n            {token: \"macro\", regex: /{[\\w\\-$]+}/},\n            {token: [\"text\", \"string\", \"text\", \"constant.character\", \"text\"], regex: /({)([\\w\\-$]+)(:)?(.+)?(})/},\n            {token: [\"text\", \"markup.list.macro\", \"keyword\", \"string\"], regex: /(\\w+)(footnote(?:ref)?::?)([^\\s\\[]+)?(\\[.*?\\])?/},\n            {token: [\"markup.list.macro\", \"keyword\", \"string\"], regex: /([a-zA-Z\\-][\\w\\.\\/\\-]*::?)([^\\s\\[]+)(\\[.*?\\])?/},\n            {token: [\"markup.list.macro\", \"keyword\"], regex: /([a-zA-Z\\-][\\w\\.\\/\\-]+::?)(\\[.*?\\])/},\n            {token: \"keyword\",     regex: /^:.+?:(?= |$)/}\n        ],\n\n        \"quotes\": [\n            {token: \"string.italic\", regex: /__[^_\\s].*?__/},\n            {token: \"string.italic\", regex: quoteRule(\"_\")},\n            \n            {token: \"keyword.bold\", regex: /\\*\\*[^*\\s].*?\\*\\*/},\n            {token: \"keyword.bold\", regex: quoteRule(\"\\\\*\")},\n            \n            {token: \"literal\", regex: quoteRule(\"\\\\+\")},\n            {token: \"literal\", regex: /\\+\\+[^+\\s].*?\\+\\+/},\n            {token: \"literal\", regex: /\\$\\$.+?\\$\\$/},\n            {token: \"literal\", regex: quoteRule(\"`\")},\n\n            {token: \"keyword\", regex: quoteRule(\"^\")},\n            {token: \"keyword\", regex: quoteRule(\"~\")},\n            {token: \"keyword\", regex: /##?/},\n            {token: \"keyword\", regex: /(?:\\B|^)``|\\b''/}\n        ]\n\n    };\n\n    function quoteRule(ch) {\n        var prefix = /\\w/.test(ch) ? \"\\\\b\" : \"(?:\\\\B|^)\";\n        return prefix + ch + \"[^\" + ch + \"].*?\" + ch + \"(?![\\\\w*])\";\n    }\n\n    //addQuoteBlock(\"text\")\n\n    var tokenMap = {\n        macro: \"constant.character\",\n        tableBlock: \"doc.comment\",\n        titleUnderline: \"markup.heading\",\n        singleLineTitle: \"markup.heading\",\n        pageBreak: \"string\",\n        option: \"string.regexp\",\n        otherBlock: \"markup.list\",\n        literal: \"support.function\",\n        optionalTitle: \"constant.numeric\",\n        escape: \"constant.language.escape\",\n        link: \"markup.underline.list\"\n    };\n\n    for (var state in this.$rules) {\n        var stateRules = this.$rules[state];\n        for (var i = stateRules.length; i--; ) {\n            var rule = stateRules[i];\n            if (rule.include || typeof rule == \"string\") {\n                var args = [i, 1].concat(this.$rules[rule.include || rule]);\n                if (rule.noEscape) {\n                    args = args.filter(function(x) {\n                        return !x.next;\n                    });\n                }\n                stateRules.splice.apply(stateRules, args);\n            } else if (rule.token in tokenMap) {\n                rule.token = tokenMap[rule.token];\n            }\n        }\n    }\n};\noop.inherits(AsciidocHighlightRules, TextHighlightRules);\n\nexports.AsciidocHighlightRules = AsciidocHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/assembly_x86.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar AssemblyX86HighlightRules = require(\"./assembly_x86_highlight_rules\").AssemblyX86HighlightRules;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = AssemblyX86HighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \";\";\n    this.$id = \"ace/mode/assembly_x86\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});"
  },
  {
    "path": "lib/ace/mode/assembly_x86_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/* This file was autogenerated from Assembly x86.tmLanguage (uuid: ) */\n/****************************************************************************************\n * IT MIGHT NOT BE PERFECT ...But it's a good start from an existing *.tmlanguage file. *\n * fileTypes                                                                            *\n ****************************************************************************************/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar AssemblyX86HighlightRules = function() {\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = { start: \n       [ { token: 'keyword.control.assembly',\n           regex: '\\\\b(?:aaa|aad|aam|aas|adc|add|addpd|addps|addsd|addss|addsubpd|addsubps|aesdec|aesdeclast|aesenc|aesenclast|aesimc|aeskeygenassist|and|andpd|andps|andnpd|andnps|arpl|blendpd|blendps|blendvpd|blendvps|bound|bsf|bsr|bswap|bt|btc|btr|bts|cbw|cwde|cdqe|clc|cld|cflush|clts|cmc|cmov(?:n?e|ge?|ae?|le?|be?|n?o|n?z)|cmp|cmppd|cmpps|cmps|cnpsb|cmpsw|cmpsd|cmpsq|cmpss|cmpxchg|cmpxchg8b|cmpxchg16b|comisd|comiss|cpuid|crc32|cvtdq2pd|cvtdq2ps|cvtpd2dq|cvtpd2pi|cvtpd2ps|cvtpi2pd|cvtpi2ps|cvtps2dq|cvtps2pd|cvtps2pi|cvtsd2si|cvtsd2ss|cvts2sd|cvtsi2ss|cvtss2sd|cvtss2si|cvttpd2dq|cvtpd2pi|cvttps2dq|cvttps2pi|cvttps2dq|cvttps2pi|cvttsd2si|cvttss2si|cwd|cdq|cqo|daa|das|dec|div|divpd|divps|divsd|divss|dppd|dpps|emms|enter|extractps|f2xm1|fabs|fadd|faddp|fiadd|fbld|fbstp|fchs|fclex|fnclex|fcmov(?:n?e|ge?|ae?|le?|be?|n?o|n?z)|fcom|fcmop|fcompp|fcomi|fcomip|fucomi|fucomip|fcos|fdecstp|fdiv|fdivp|fidiv|fdivr|fdivrp|fidivr|ffree|ficom|ficomp|fild|fincstp|finit|fnint|fist|fistp|fisttp|fld|fld1|fldl2t|fldl2e|fldpi|fldlg2|fldln2|fldz|fldcw|fldenv|fmul|fmulp|fimul|fnop|fpatan|fprem|fprem1|fptan|frndint|frstor|fsave|fnsave|fscale|fsin|fsincos|fsqrt|fst|fstp|fstcw|fnstcw|fstenv|fnstenv|fsts|fnstsw|fsub|fsubp|fisub|fsubr|fsubrp|fisubr|ftst|fucom|fucomp|fucompp|fxam|fxch|fxrstor|fxsave|fxtract|fyl2x|fyl2xp1|haddpd|haddps|husbpd|hsubps|idiv|imul|in|inc|ins|insb|insw|insd|insertps|int|into|invd|invplg|invpcid|iret|iretd|iretq|lahf|lar|lddqu|ldmxcsr|lds|les|lfs|lgs|lss|lea|leave|lfence|lgdt|lidt|llgdt|lmsw|lock|lods|lodsb|lodsw|lodsd|lodsq|lsl|ltr|maskmovdqu|maskmovq|maxpd|maxps|maxsd|maxss|mfence|minpd|minps|minsd|minss|monitor|mov|movapd|movaps|movbe|movd|movq|movddup|movdqa|movdqu|movq2q|movhlps|movhpd|movhps|movlhps|movlpd|movlps|movmskpd|movmskps|movntdqa|movntdq|movnti|movntpd|movntps|movntq|movq|movq2dq|movs|movsb|movsw|movsd|movsq|movsd|movshdup|movsldup|movss|movsx|movsxd|movupd|movups|movzx|mpsadbw|mul|mulpd|mulps|mulsd|mulss|mwait|neg|not|or|orpd|orps|out|outs|outsb|outsw|outsd|pabsb|pabsw|pabsd|packsswb|packssdw|packusdw|packuswbpaddb|paddw|paddd|paddq|paddsb|paddsw|paddusb|paddusw|palignr|pand|pandn|pause|pavgb|pavgw|pblendvb|pblendw|pclmulqdq|pcmpeqb|pcmpeqw|pcmpeqd|pcmpeqq|pcmpestri|pcmpestrm|pcmptb|pcmptgw|pcmpgtd|pcmpgtq|pcmpistri|pcmpisrm|pextrb|pextrd|pextrq|pextrw|phaddw|phaddd|phaddsw|phinposuw|phsubw|phsubd|phsubsw|pinsrb|pinsrd|pinsrq|pinsrw|pmaddubsw|pmadddwd|pmaxsb|pmaxsd|pmaxsw|pmaxsw|pmaxub|pmaxud|pmaxuw|pminsb|pminsd|pminsw|pminub|pminud|pminuw|pmovmskb|pmovsx|pmovzx|pmuldq|pmulhrsw|pmulhuw|pmulhw|pmulld|pmullw|pmuludw|pop|popa|popad|popcnt|popf|popfd|popfq|por|prefetch|psadbw|pshufb|pshufd|pshufhw|pshuflw|pshufw|psignb|psignw|psignd|pslldq|psllw|pslld|psllq|psraw|psrad|psrldq|psrlw|psrld|psrlq|psubb|psubw|psubd|psubq|psubsb|psubsw|psubusb|psubusw|test|ptest|punpckhbw|punpckhwd|punpckhdq|punpckhddq|punpcklbw|punpcklwd|punpckldq|punpckldqd|push|pusha|pushad|pushf|pushfd|pxor|prcl|rcr|rol|ror|rcpps|rcpss|rdfsbase|rdgsbase|rdmsr|rdpmc|rdrand|rdtsc|rdtscp|rep|repe|repz|repne|repnz|roundpd|roundps|roundsd|roundss|rsm|rsqrps|rsqrtss|sahf|sal|sar|shl|shr|sbb|scas|scasb|scasw|scasd|set(?:n?e|ge?|ae?|le?|be?|n?o|n?z)|sfence|sgdt|shld|shrd|shufpd|shufps|sidt|sldt|smsw|sqrtpd|sqrtps|sqrtsd|sqrtss|stc|std|stmxcsr|stos|stosb|stosw|stosd|stosq|str|sub|subpd|subps|subsd|subss|swapgs|syscall|sysenter|sysexit|sysret|teset|ucomisd|ucomiss|ud2|unpckhpd|unpckhps|unpcklpd|unpcklps|vbroadcast|vcvtph2ps|vcvtp2sph|verr|verw|vextractf128|vinsertf128|vmaskmov|vpermilpd|vpermilps|vperm2f128|vtestpd|vtestps|vzeroall|vzeroupper|wait|fwait|wbinvd|wrfsbase|wrgsbase|wrmsr|xadd|xchg|xgetbv|xlat|xlatb|xor|xorpd|xorps|xrstor|xsave|xsaveopt|xsetbv|lzcnt|extrq|insertq|movntsd|movntss|vfmaddpd|vfmaddps|vfmaddsd|vfmaddss|vfmaddsubbpd|vfmaddsubps|vfmsubaddpd|vfmsubaddps|vfmsubpd|vfmsubps|vfmsubsd|vfnmaddpd|vfnmaddps|vfnmaddsd|vfnmaddss|vfnmsubpd|vfnmusbps|vfnmusbsd|vfnmusbss|cvt|xor|cli|sti|hlt|nop|lock|wait|enter|leave|ret|loop(?:n?e|n?z)?|call|j(?:mp|n?e|ge?|ae?|le?|be?|n?o|n?z))\\\\b',\n           caseInsensitive: true },\n         { token: 'variable.parameter.register.assembly',\n           regex: '\\\\b(?:CS|DS|ES|FS|GS|SS|RAX|EAX|RBX|EBX|RCX|ECX|RDX|EDX|RCX|RIP|EIP|IP|RSP|ESP|SP|RSI|ESI|SI|RDI|EDI|DI|RFLAGS|EFLAGS|FLAGS|R8-15|(?:Y|X)MM(?:[0-9]|10|11|12|13|14|15)|(?:A|B|C|D)(?:X|H|L)|CR(?:[0-4]|DR(?:[0-7]|TR6|TR7|EFER)))\\\\b',\n           caseInsensitive: true },\n         { token: 'constant.character.decimal.assembly',\n           regex: '\\\\b[0-9]+\\\\b' },\n         { token: 'constant.character.hexadecimal.assembly',\n           regex: '\\\\b0x[A-F0-9]+\\\\b',\n           caseInsensitive: true },\n         { token: 'constant.character.hexadecimal.assembly',\n           regex: '\\\\b[A-F0-9]+h\\\\b',\n           caseInsensitive: true },\n         { token: 'string.assembly', regex: /'([^\\\\']|\\\\.)*'/ },\n         { token: 'string.assembly', regex: /\"([^\\\\\"]|\\\\.)*\"/ },\n         { token: 'support.function.directive.assembly',\n           regex: '^\\\\[',\n           push: \n            [ { token: 'support.function.directive.assembly',\n                regex: '\\\\]$',\n                next: 'pop' },\n              { defaultToken: 'support.function.directive.assembly' } ] },\n         { token: \n            [ 'support.function.directive.assembly',\n              'support.function.directive.assembly',\n              'entity.name.function.assembly' ],\n           regex: '(^struc)( )([_a-zA-Z][_a-zA-Z0-9]*)' },\n         { token: 'support.function.directive.assembly',\n           regex: '^endstruc\\\\b' },\n        { token: \n            [ 'support.function.directive.assembly',\n              'entity.name.function.assembly',\n              'support.function.directive.assembly',\n              'constant.character.assembly' ],\n           regex: '^(%macro )([_a-zA-Z][_a-zA-Z0-9]*)( )([0-9]+)' },\n         { token: 'support.function.directive.assembly',\n           regex: '^%endmacro' },\n         { token: \n            [ 'text',\n              'support.function.directive.assembly',\n              'text',\n              'entity.name.function.assembly' ],\n           regex: '(\\\\s*)(%define|%xdefine|%idefine|%undef|%assign|%defstr|%strcat|%strlen|%substr|%00|%0|%rotate|%rep|%endrep|%include|\\\\$\\\\$|\\\\$|%unmacro|%if|%elif|%else|%endif|%(?:el)?ifdef|%(?:el)?ifmacro|%(?:el)?ifctx|%(?:el)?ifidn|%(?:el)?ifidni|%(?:el)?ifid|%(?:el)?ifnum|%(?:el)?ifstr|%(?:el)?iftoken|%(?:el)?ifempty|%(?:el)?ifenv|%pathsearch|%depend|%use|%push|%pop|%repl|%arg|%stacksize|%local|%error|%warning|%fatal|%line|%!|%comment|%endcomment|__NASM_VERSION_ID__|__NASM_VER__|__FILE__|__LINE__|__BITS__|__OUTPUT_FORMAT__|__DATE__|__TIME__|__DATE_NUM__|_TIME__NUM__|__UTC_DATE__|__UTC_TIME__|__UTC_DATE_NUM__|__UTC_TIME_NUM__|__POSIX_TIME__|__PASS__|ISTRUC|AT|IEND|BITS 16|BITS 32|BITS 64|USE16|USE32|__SECT__|ABSOLUTE|EXTERN|GLOBAL|COMMON|CPU|FLOAT)\\\\b( ?)((?:[_a-zA-Z][_a-zA-Z0-9]*)?)',\n           caseInsensitive: true },\n          { token: 'support.function.directive.assembly',\n           regex: '\\\\b(?:d[bwdqtoy]|res[bwdqto]|equ|times|align|alignb|sectalign|section|ptr|byte|word|dword|qword|incbin)\\\\b',\n           caseInsensitive: true },\n         { token: 'entity.name.function.assembly', regex: '^\\\\s*%%[\\\\w.]+?:$' },\n         { token: 'entity.name.function.assembly', regex: '^\\\\s*%\\\\$[\\\\w.]+?:$' },\n         { token: 'entity.name.function.assembly', regex: '^[\\\\w.]+?:' },\n         { token: 'entity.name.function.assembly', regex: '^[\\\\w.]+?\\\\b' },\n         { token: 'comment.assembly', regex: ';.*$' } ] \n    };\n    \n    this.normalizeRules();\n};\n\nAssemblyX86HighlightRules.metaData = { fileTypes: [ 'asm' ],\n      name: 'Assembly x86',\n      scopeName: 'source.assembly' };\n\n\noop.inherits(AssemblyX86HighlightRules, TextHighlightRules);\n\nexports.AssemblyX86HighlightRules = AssemblyX86HighlightRules;\n});"
  },
  {
    "path": "lib/ace/mode/autohotkey.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar AutoHotKeyHighlightRules = require(\"./autohotkey_highlight_rules\").AutoHotKeyHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = AutoHotKeyHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \";\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$id = \"ace/mode/autohotkey\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});"
  },
  {
    "path": "lib/ace/mode/autohotkey_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/* This file was autogenerated from C:\\Users\\LED\\Desktop\\AutoHotKey.tmLanguage (uuid: ) */\n/****************************************************************************************\n * IT MIGHT NOT BE PERFECT ...But it's a good start from an existing *.tmlanguage file. *\n * fileTypes                                                                            *\n ****************************************************************************************/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar AutoHotKeyHighlightRules = function() {\n    var autoItKeywords = 'And|ByRef|Case|Const|ContinueCase|ContinueLoop|Default|Dim|Do|Else|ElseIf|EndFunc|EndIf|EndSelect|EndSwitch|EndWith|Enum|Exit|ExitLoop|False|For|Func|Global|If|In|Local|Next|Not|Or|ReDim|Return|Select|Step|Switch|Then|To|True|Until|WEnd|While|With|' +       \n        'Abs|ACos|AdlibDisable|AdlibEnable|Asc|AscW|ASin|Assign|ATan|AutoItSetOption|AutoItWinGetTitle|AutoItWinSetTitle|Beep|Binary|BinaryLen|BinaryMid|BinaryToString|BitAND|BitNOT|BitOR|BitRotate|BitShift|BitXOR|BlockInput|Break|Call|CDTray|Ceiling|Chr|ChrW|ClipGet|ClipPut|ConsoleRead|ConsoleWrite|ConsoleWriteError|ControlClick|ControlCommand|ControlDisable|ControlEnable|ControlFocus|ControlGetFocus|ControlGetHandle|ControlGetPos|ControlGetText|ControlHide|ControlListView|ControlMove|ControlSend|ControlSetText|ControlShow|ControlTreeView|Cos|Dec|DirCopy|DirCreate|DirGetSize|DirMove|DirRemove|DllCall|DllCallbackFree|DllCallbackGetPtr|DllCallbackRegister|DllClose|DllOpen|DllStructCreate|DllStructGetData|DllStructGetPtr|DllStructGetSize|DllStructSetData|DriveGetDrive|DriveGetFileSystem|DriveGetLabel|DriveGetSerial|DriveGetType|DriveMapAdd|DriveMapDel|DriveMapGet|DriveSetLabel|DriveSpaceFree|DriveSpaceTotal|DriveStatus|EnvGet|EnvSet|EnvUpdate|Eval|Execute|Exp|FileChangeDir|FileClose|FileCopy|FileCreateNTFSLink|FileCreateShortcut|FileDelete|FileExists|FileFindFirstFile|FileFindNextFile|FileGetAttrib|FileGetLongName|FileGetShortcut|FileGetShortName|FileGetSize|FileGetTime|FileGetVersion|FileInstall|FileMove|FileOpen|FileOpenDialog|FileRead|FileReadLine|FileRecycle|FileRecycleEmpty|FileSaveDialog|FileSelectFolder|FileSetAttrib|FileSetTime|FileWrite|FileWriteLine|Floor|FtpSetProxy|GUICreate|GUICtrlCreateAvi|GUICtrlCreateButton|GUICtrlCreateCheckbox|GUICtrlCreateCombo|GUICtrlCreateContextMenu|GUICtrlCreateDate|GUICtrlCreateDummy|GUICtrlCreateEdit|GUICtrlCreateGraphic|GUICtrlCreateGroup|GUICtrlCreateIcon|GUICtrlCreateInput|GUICtrlCreateLabel|GUICtrlCreateList|GUICtrlCreateListView|GUICtrlCreateListViewItem|GUICtrlCreateMenu|GUICtrlCreateMenuItem|GUICtrlCreateMonthCal|GUICtrlCreateObj|GUICtrlCreatePic|GUICtrlCreateProgress|GUICtrlCreateRadio|GUICtrlCreateSlider|GUICtrlCreateTab|GUICtrlCreateTabItem|GUICtrlCreateTreeView|GUICtrlCreateTreeViewItem|GUICtrlCreateUpdown|GUICtrlDelete|GUICtrlGetHandle|GUICtrlGetState|GUICtrlRead|GUICtrlRecvMsg|GUICtrlRegisterListViewSort|GUICtrlSendMsg|GUICtrlSendToDummy|GUICtrlSetBkColor|GUICtrlSetColor|GUICtrlSetCursor|GUICtrlSetData|GUICtrlSetFont|GUICtrlSetDefColor|GUICtrlSetDefBkColor|GUICtrlSetGraphic|GUICtrlSetImage|GUICtrlSetLimit|GUICtrlSetOnEvent|GUICtrlSetPos|GUICtrlSetResizing|GUICtrlSetState|GUICtrlSetStyle|GUICtrlSetTip|GUIDelete|GUIGetCursorInfo|GUIGetMsg|GUIGetStyle|GUIRegisterMsg|GUISetAccelerators()|GUISetBkColor|GUISetCoord|GUISetCursor|GUISetFont|GUISetHelp|GUISetIcon|GUISetOnEvent|GUISetState|GUISetStyle|GUIStartGroup|GUISwitch|Hex|HotKeySet|HttpSetProxy|HWnd|InetGet|InetGetSize|IniDelete|IniRead|IniReadSection|IniReadSectionNames|IniRenameSection|IniWrite|IniWriteSection|InputBox|Int|IsAdmin|IsArray|IsBinary|IsBool|IsDeclared|IsDllStruct|IsFloat|IsHWnd|IsInt|IsKeyword|IsNumber|IsObj|IsPtr|IsString|Log|MemGetStats|Mod|MouseClick|MouseClickDrag|MouseDown|MouseGetCursor|MouseGetPos|MouseMove|MouseUp|MouseWheel|MsgBox|Number|ObjCreate|ObjEvent|ObjGet|ObjName|Opt|Ping|PixelChecksum|PixelGetColor|PixelSearch|PluginClose|PluginOpen|ProcessClose|ProcessExists|ProcessGetStats|ProcessList|ProcessSetPriority|ProcessWait|ProcessWaitClose|ProgressOff|ProgressOn|ProgressSet|Ptr|Random|RegDelete|RegEnumKey|RegEnumVal|RegRead|RegWrite|Round|Run|RunAs|RunAsWait|RunWait|Send|SendKeepActive|SetError|SetExtended|ShellExecute|ShellExecuteWait|Shutdown|Sin|Sleep|SoundPlay|SoundSetWaveVolume|SplashImageOn|SplashOff|SplashTextOn|Sqrt|SRandom|StatusbarGetText|StderrRead|StdinWrite|StdioClose|StdoutRead|String|StringAddCR|StringCompare|StringFormat|StringInStr|StringIsAlNum|StringIsAlpha|StringIsASCII|StringIsDigit|StringIsFloat|StringIsInt|StringIsLower|StringIsSpace|StringIsUpper|StringIsXDigit|StringLeft|StringLen|StringLower|StringMid|StringRegExp|StringRegExpReplace|StringReplace|StringRight|StringSplit|StringStripCR|StringStripWS|StringToBinary|StringTrimLeft|StringTrimRight|StringUpper|Tan|TCPAccept|TCPCloseSocket|TCPConnect|TCPListen|TCPNameToIP|TCPRecv|TCPSend|TCPShutdown|TCPStartup|TimerDiff|TimerInit|ToolTip|TrayCreateItem|TrayCreateMenu|TrayGetMsg|TrayItemDelete|TrayItemGetHandle|TrayItemGetState|TrayItemGetText|TrayItemSetOnEvent|TrayItemSetState|TrayItemSetText|TraySetClick|TraySetIcon|TraySetOnEvent|TraySetPauseIcon|TraySetState|TraySetToolTip|TrayTip|UBound|UDPBind|UDPCloseSocket|UDPOpen|UDPRecv|UDPSend|UDPShutdown|UDPStartup|VarGetType|WinActivate|WinActive|WinClose|WinExists|WinFlash|WinGetCaretPos|WinGetClassList|WinGetClientSize|WinGetHandle|WinGetPos|WinGetProcess|WinGetState|WinGetText|WinGetTitle|WinKill|WinList|WinMenuSelectItem|WinMinimizeAll|WinMinimizeAllUndo|WinMove|WinSetOnTop|WinSetState|WinSetTitle|WinSetTrans|WinWait|WinWaitActive|WinWaitClose|WinWaitNotActive|' +\n        'ArrayAdd|ArrayBinarySearch|ArrayConcatenate|ArrayDelete|ArrayDisplay|ArrayFindAll|ArrayInsert|ArrayMax|ArrayMaxIndex|ArrayMin|ArrayMinIndex|ArrayPop|ArrayPush|ArrayReverse|ArraySearch|ArraySort|ArraySwap|ArrayToClip|ArrayToString|ArrayTrim|ChooseColor|ChooseFont|ClipBoard_ChangeChain|ClipBoard_Close|ClipBoard_CountFormats|ClipBoard_Empty|ClipBoard_EnumFormats|ClipBoard_FormatStr|ClipBoard_GetData|ClipBoard_GetDataEx|ClipBoard_GetFormatName|ClipBoard_GetOpenWindow|ClipBoard_GetOwner|ClipBoard_GetPriorityFormat|ClipBoard_GetSequenceNumber|ClipBoard_GetViewer|ClipBoard_IsFormatAvailable|ClipBoard_Open|ClipBoard_RegisterFormat|ClipBoard_SetData|ClipBoard_SetDataEx|ClipBoard_SetViewer|ClipPutFile|ColorConvertHSLtoRGB|ColorConvertRGBtoHSL|ColorGetBlue|ColorGetGreen|ColorGetRed|Date_Time_CompareFileTime|Date_Time_DOSDateTimeToArray|Date_Time_DOSDateTimeToFileTime|Date_Time_DOSDateTimeToStr|Date_Time_DOSDateToArray|Date_Time_DOSDateToStr|Date_Time_DOSTimeToArray|Date_Time_DOSTimeToStr|Date_Time_EncodeFileTime|Date_Time_EncodeSystemTime|Date_Time_FileTimeToArray|Date_Time_FileTimeToDOSDateTime|Date_Time_FileTimeToLocalFileTime|Date_Time_FileTimeToStr|Date_Time_FileTimeToSystemTime|Date_Time_GetFileTime|Date_Time_GetLocalTime|Date_Time_GetSystemTime|Date_Time_GetSystemTimeAdjustment|Date_Time_GetSystemTimeAsFileTime|Date_Time_GetSystemTimes|Date_Time_GetTickCount|Date_Time_GetTimeZoneInformation|Date_Time_LocalFileTimeToFileTime|Date_Time_SetFileTime|Date_Time_SetLocalTime|Date_Time_SetSystemTime|Date_Time_SetSystemTimeAdjustment|Date_Time_SetTimeZoneInformation|Date_Time_SystemTimeToArray|Date_Time_SystemTimeToDateStr|Date_Time_SystemTimeToDateTimeStr|Date_Time_SystemTimeToFileTime|Date_Time_SystemTimeToTimeStr|Date_Time_SystemTimeToTzSpecificLocalTime|Date_Time_TzSpecificLocalTimeToSystemTime|DateAdd|DateDayOfWeek|DateDaysInMonth|DateDiff|DateIsLeapYear|DateIsValid|DateTimeFormat|DateTimeSplit|DateToDayOfWeek|DateToDayOfWeekISO|DateToDayValue|DateToMonth|DayValueToDate|DebugBugReportEnv|DebugOut|DebugSetup|Degree|EventLog__Backup|EventLog__Clear|EventLog__Close|EventLog__Count|EventLog__DeregisterSource|EventLog__Full|EventLog__Notify|EventLog__Oldest|EventLog__Open|EventLog__OpenBackup|EventLog__Read|EventLog__RegisterSource|EventLog__Report|FileCountLines|FileCreate|FileListToArray|FilePrint|FileReadToArray|FileWriteFromArray|FileWriteLog|FileWriteToLine|GDIPlus_ArrowCapCreate|GDIPlus_ArrowCapDispose|GDIPlus_ArrowCapGetFillState|GDIPlus_ArrowCapGetHeight|GDIPlus_ArrowCapGetMiddleInset|GDIPlus_ArrowCapGetWidth|GDIPlus_ArrowCapSetFillState|GDIPlus_ArrowCapSetHeight|GDIPlus_ArrowCapSetMiddleInset|GDIPlus_ArrowCapSetWidth|GDIPlus_BitmapCloneArea|GDIPlus_BitmapCreateFromFile|GDIPlus_BitmapCreateFromGraphics|GDIPlus_BitmapCreateFromHBITMAP|GDIPlus_BitmapCreateHBITMAPFromBitmap|GDIPlus_BitmapDispose|GDIPlus_BitmapLockBits|GDIPlus_BitmapUnlockBits|GDIPlus_BrushClone|GDIPlus_BrushCreateSolid|GDIPlus_BrushDispose|GDIPlus_BrushGetType|GDIPlus_CustomLineCapDispose|GDIPlus_Decoders|GDIPlus_DecodersGetCount|GDIPlus_DecodersGetSize|GDIPlus_Encoders|GDIPlus_EncodersGetCLSID|GDIPlus_EncodersGetCount|GDIPlus_EncodersGetParamList|GDIPlus_EncodersGetParamListSize|GDIPlus_EncodersGetSize|GDIPlus_FontCreate|GDIPlus_FontDispose|GDIPlus_FontFamilyCreate|GDIPlus_FontFamilyDispose|GDIPlus_GraphicsClear|GDIPlus_GraphicsCreateFromHDC|GDIPlus_GraphicsCreateFromHWND|GDIPlus_GraphicsDispose|GDIPlus_GraphicsDrawArc|GDIPlus_GraphicsDrawBezier|GDIPlus_GraphicsDrawClosedCurve|GDIPlus_GraphicsDrawCurve|GDIPlus_GraphicsDrawEllipse|GDIPlus_GraphicsDrawImage|GDIPlus_GraphicsDrawImageRect|GDIPlus_GraphicsDrawImageRectRect|GDIPlus_GraphicsDrawLine|GDIPlus_GraphicsDrawPie|GDIPlus_GraphicsDrawPolygon|GDIPlus_GraphicsDrawRect|GDIPlus_GraphicsDrawString|GDIPlus_GraphicsDrawStringEx|GDIPlus_GraphicsFillClosedCurve|GDIPlus_GraphicsFillEllipse|GDIPlus_GraphicsFillPie|GDIPlus_GraphicsFillRect|GDIPlus_GraphicsGetDC|GDIPlus_GraphicsGetSmoothingMode|GDIPlus_GraphicsMeasureString|GDIPlus_GraphicsReleaseDC|GDIPlus_GraphicsSetSmoothingMode|GDIPlus_GraphicsSetTransform|GDIPlus_ImageDispose|GDIPlus_ImageGetGraphicsContext|GDIPlus_ImageGetHeight|GDIPlus_ImageGetWidth|GDIPlus_ImageLoadFromFile|GDIPlus_ImageSaveToFile|GDIPlus_ImageSaveToFileEx|GDIPlus_MatrixCreate|GDIPlus_MatrixDispose|GDIPlus_MatrixRotate|GDIPlus_ParamAdd|GDIPlus_ParamInit|GDIPlus_PenCreate|GDIPlus_PenDispose|GDIPlus_PenGetAlignment|GDIPlus_PenGetColor|GDIPlus_PenGetCustomEndCap|GDIPlus_PenGetDashCap|GDIPlus_PenGetDashStyle|GDIPlus_PenGetEndCap|GDIPlus_PenGetWidth|GDIPlus_PenSetAlignment|GDIPlus_PenSetColor|GDIPlus_PenSetCustomEndCap|GDIPlus_PenSetDashCap|GDIPlus_PenSetDashStyle|GDIPlus_PenSetEndCap|GDIPlus_PenSetWidth|GDIPlus_RectFCreate|GDIPlus_Shutdown|GDIPlus_Startup|GDIPlus_StringFormatCreate|GDIPlus_StringFormatDispose|GetIP|GUICtrlAVI_Close|GUICtrlAVI_Create|GUICtrlAVI_Destroy|GUICtrlAVI_Open|GUICtrlAVI_OpenEx|GUICtrlAVI_Play|GUICtrlAVI_Seek|GUICtrlAVI_Show|GUICtrlAVI_Stop|GUICtrlButton_Click|GUICtrlButton_Create|GUICtrlButton_Destroy|GUICtrlButton_Enable|GUICtrlButton_GetCheck|GUICtrlButton_GetFocus|GUICtrlButton_GetIdealSize|GUICtrlButton_GetImage|GUICtrlButton_GetImageList|GUICtrlButton_GetState|GUICtrlButton_GetText|GUICtrlButton_GetTextMargin|GUICtrlButton_SetCheck|GUICtrlButton_SetFocus|GUICtrlButton_SetImage|GUICtrlButton_SetImageList|GUICtrlButton_SetSize|GUICtrlButton_SetState|GUICtrlButton_SetStyle|GUICtrlButton_SetText|GUICtrlButton_SetTextMargin|GUICtrlButton_Show|GUICtrlComboBox_AddDir|GUICtrlComboBox_AddString|GUICtrlComboBox_AutoComplete|GUICtrlComboBox_BeginUpdate|GUICtrlComboBox_Create|GUICtrlComboBox_DeleteString|GUICtrlComboBox_Destroy|GUICtrlComboBox_EndUpdate|GUICtrlComboBox_FindString|GUICtrlComboBox_FindStringExact|GUICtrlComboBox_GetComboBoxInfo|GUICtrlComboBox_GetCount|GUICtrlComboBox_GetCurSel|GUICtrlComboBox_GetDroppedControlRect|GUICtrlComboBox_GetDroppedControlRectEx|GUICtrlComboBox_GetDroppedState|GUICtrlComboBox_GetDroppedWidth|GUICtrlComboBox_GetEditSel|GUICtrlComboBox_GetEditText|GUICtrlComboBox_GetExtendedUI|GUICtrlComboBox_GetHorizontalExtent|GUICtrlComboBox_GetItemHeight|GUICtrlComboBox_GetLBText|GUICtrlComboBox_GetLBTextLen|GUICtrlComboBox_GetList|GUICtrlComboBox_GetListArray|GUICtrlComboBox_GetLocale|GUICtrlComboBox_GetLocaleCountry|GUICtrlComboBox_GetLocaleLang|GUICtrlComboBox_GetLocalePrimLang|GUICtrlComboBox_GetLocaleSubLang|GUICtrlComboBox_GetMinVisible|GUICtrlComboBox_GetTopIndex|GUICtrlComboBox_InitStorage|GUICtrlComboBox_InsertString|GUICtrlComboBox_LimitText|GUICtrlComboBox_ReplaceEditSel|GUICtrlComboBox_ResetContent|GUICtrlComboBox_SelectString|GUICtrlComboBox_SetCurSel|GUICtrlComboBox_SetDroppedWidth|GUICtrlComboBox_SetEditSel|GUICtrlComboBox_SetEditText|GUICtrlComboBox_SetExtendedUI|GUICtrlComboBox_SetHorizontalExtent|GUICtrlComboBox_SetItemHeight|GUICtrlComboBox_SetMinVisible|GUICtrlComboBox_SetTopIndex|GUICtrlComboBox_ShowDropDown|GUICtrlComboBoxEx_AddDir|GUICtrlComboBoxEx_AddString|GUICtrlComboBoxEx_BeginUpdate|GUICtrlComboBoxEx_Create|GUICtrlComboBoxEx_CreateSolidBitMap|GUICtrlComboBoxEx_DeleteString|GUICtrlComboBoxEx_Destroy|GUICtrlComboBoxEx_EndUpdate|GUICtrlComboBoxEx_FindStringExact|GUICtrlComboBoxEx_GetComboBoxInfo|GUICtrlComboBoxEx_GetComboControl|GUICtrlComboBoxEx_GetCount|GUICtrlComboBoxEx_GetCurSel|GUICtrlComboBoxEx_GetDroppedControlRect|GUICtrlComboBoxEx_GetDroppedControlRectEx|GUICtrlComboBoxEx_GetDroppedState|GUICtrlComboBoxEx_GetDroppedWidth|GUICtrlComboBoxEx_GetEditControl|GUICtrlComboBoxEx_GetEditSel|GUICtrlComboBoxEx_GetEditText|GUICtrlComboBoxEx_GetExtendedStyle|GUICtrlComboBoxEx_GetExtendedUI|GUICtrlComboBoxEx_GetImageList|GUICtrlComboBoxEx_GetItem|GUICtrlComboBoxEx_GetItemEx|GUICtrlComboBoxEx_GetItemHeight|GUICtrlComboBoxEx_GetItemImage|GUICtrlComboBoxEx_GetItemIndent|GUICtrlComboBoxEx_GetItemOverlayImage|GUICtrlComboBoxEx_GetItemParam|GUICtrlComboBoxEx_GetItemSelectedImage|GUICtrlComboBoxEx_GetItemText|GUICtrlComboBoxEx_GetItemTextLen|GUICtrlComboBoxEx_GetList|GUICtrlComboBoxEx_GetListArray|GUICtrlComboBoxEx_GetLocale|GUICtrlComboBoxEx_GetLocaleCountry|GUICtrlComboBoxEx_GetLocaleLang|GUICtrlComboBoxEx_GetLocalePrimLang|GUICtrlComboBoxEx_GetLocaleSubLang|GUICtrlComboBoxEx_GetMinVisible|GUICtrlComboBoxEx_GetTopIndex|GUICtrlComboBoxEx_InitStorage|GUICtrlComboBoxEx_InsertString|GUICtrlComboBoxEx_LimitText|GUICtrlComboBoxEx_ReplaceEditSel|GUICtrlComboBoxEx_ResetContent|GUICtrlComboBoxEx_SetCurSel|GUICtrlComboBoxEx_SetDroppedWidth|GUICtrlComboBoxEx_SetEditSel|GUICtrlComboBoxEx_SetEditText|GUICtrlComboBoxEx_SetExtendedStyle|GUICtrlComboBoxEx_SetExtendedUI|GUICtrlComboBoxEx_SetImageList|GUICtrlComboBoxEx_SetItem|GUICtrlComboBoxEx_SetItemEx|GUICtrlComboBoxEx_SetItemHeight|GUICtrlComboBoxEx_SetItemImage|GUICtrlComboBoxEx_SetItemIndent|GUICtrlComboBoxEx_SetItemOverlayImage|GUICtrlComboBoxEx_SetItemParam|GUICtrlComboBoxEx_SetItemSelectedImage|GUICtrlComboBoxEx_SetMinVisible|GUICtrlComboBoxEx_SetTopIndex|GUICtrlComboBoxEx_ShowDropDown|GUICtrlDTP_Create|GUICtrlDTP_Destroy|GUICtrlDTP_GetMCColor|GUICtrlDTP_GetMCFont|GUICtrlDTP_GetMonthCal|GUICtrlDTP_GetRange|GUICtrlDTP_GetRangeEx|GUICtrlDTP_GetSystemTime|GUICtrlDTP_GetSystemTimeEx|GUICtrlDTP_SetFormat|GUICtrlDTP_SetMCColor|GUICtrlDTP_SetMCFont|GUICtrlDTP_SetRange|GUICtrlDTP_SetRangeEx|GUICtrlDTP_SetSystemTime|GUICtrlDTP_SetSystemTimeEx|GUICtrlEdit_AppendText|GUICtrlEdit_BeginUpdate|GUICtrlEdit_CanUndo|GUICtrlEdit_CharFromPos|GUICtrlEdit_Create|GUICtrlEdit_Destroy|GUICtrlEdit_EmptyUndoBuffer|GUICtrlEdit_EndUpdate|GUICtrlEdit_Find|GUICtrlEdit_FmtLines|GUICtrlEdit_GetFirstVisibleLine|GUICtrlEdit_GetLimitText|GUICtrlEdit_GetLine|GUICtrlEdit_GetLineCount|GUICtrlEdit_GetMargins|GUICtrlEdit_GetModify|GUICtrlEdit_GetPasswordChar|GUICtrlEdit_GetRECT|GUICtrlEdit_GetRECTEx|GUICtrlEdit_GetSel|GUICtrlEdit_GetText|GUICtrlEdit_GetTextLen|GUICtrlEdit_HideBalloonTip|GUICtrlEdit_InsertText|GUICtrlEdit_LineFromChar|GUICtrlEdit_LineIndex|GUICtrlEdit_LineLength|GUICtrlEdit_LineScroll|GUICtrlEdit_PosFromChar|GUICtrlEdit_ReplaceSel|GUICtrlEdit_Scroll|GUICtrlEdit_SetLimitText|GUICtrlEdit_SetMargins|GUICtrlEdit_SetModify|GUICtrlEdit_SetPasswordChar|GUICtrlEdit_SetReadOnly|GUICtrlEdit_SetRECT|GUICtrlEdit_SetRECTEx|GUICtrlEdit_SetRECTNP|GUICtrlEdit_SetRectNPEx|GUICtrlEdit_SetSel|GUICtrlEdit_SetTabStops|GUICtrlEdit_SetText|GUICtrlEdit_ShowBalloonTip|GUICtrlEdit_Undo|GUICtrlHeader_AddItem|GUICtrlHeader_ClearFilter|GUICtrlHeader_ClearFilterAll|GUICtrlHeader_Create|GUICtrlHeader_CreateDragImage|GUICtrlHeader_DeleteItem|GUICtrlHeader_Destroy|GUICtrlHeader_EditFilter|GUICtrlHeader_GetBitmapMargin|GUICtrlHeader_GetImageList|GUICtrlHeader_GetItem|GUICtrlHeader_GetItemAlign|GUICtrlHeader_GetItemBitmap|GUICtrlHeader_GetItemCount|GUICtrlHeader_GetItemDisplay|GUICtrlHeader_GetItemFlags|GUICtrlHeader_GetItemFormat|GUICtrlHeader_GetItemImage|GUICtrlHeader_GetItemOrder|GUICtrlHeader_GetItemParam|GUICtrlHeader_GetItemRect|GUICtrlHeader_GetItemRectEx|GUICtrlHeader_GetItemText|GUICtrlHeader_GetItemWidth|GUICtrlHeader_GetOrderArray|GUICtrlHeader_GetUnicodeFormat|GUICtrlHeader_HitTest|GUICtrlHeader_InsertItem|GUICtrlHeader_Layout|GUICtrlHeader_OrderToIndex|GUICtrlHeader_SetBitmapMargin|GUICtrlHeader_SetFilterChangeTimeout|GUICtrlHeader_SetHotDivider|GUICtrlHeader_SetImageList|GUICtrlHeader_SetItem|GUICtrlHeader_SetItemAlign|GUICtrlHeader_SetItemBitmap|GUICtrlHeader_SetItemDisplay|GUICtrlHeader_SetItemFlags|GUICtrlHeader_SetItemFormat|GUICtrlHeader_SetItemImage|GUICtrlHeader_SetItemOrder|GUICtrlHeader_SetItemParam|GUICtrlHeader_SetItemText|GUICtrlHeader_SetItemWidth|GUICtrlHeader_SetOrderArray|GUICtrlHeader_SetUnicodeFormat|GUICtrlIpAddress_ClearAddress|GUICtrlIpAddress_Create|GUICtrlIpAddress_Destroy|GUICtrlIpAddress_Get|GUICtrlIpAddress_GetArray|GUICtrlIpAddress_GetEx|GUICtrlIpAddress_IsBlank|GUICtrlIpAddress_Set|GUICtrlIpAddress_SetArray|GUICtrlIpAddress_SetEx|GUICtrlIpAddress_SetFocus|GUICtrlIpAddress_SetFont|GUICtrlIpAddress_SetRange|GUICtrlIpAddress_ShowHide|GUICtrlListBox_AddFile|GUICtrlListBox_AddString|GUICtrlListBox_BeginUpdate|GUICtrlListBox_Create|GUICtrlListBox_DeleteString|GUICtrlListBox_Destroy|GUICtrlListBox_Dir|GUICtrlListBox_EndUpdate|GUICtrlListBox_FindInText|GUICtrlListBox_FindString|GUICtrlListBox_GetAnchorIndex|GUICtrlListBox_GetCaretIndex|GUICtrlListBox_GetCount|GUICtrlListBox_GetCurSel|GUICtrlListBox_GetHorizontalExtent|GUICtrlListBox_GetItemData|GUICtrlListBox_GetItemHeight|GUICtrlListBox_GetItemRect|GUICtrlListBox_GetItemRectEx|GUICtrlListBox_GetListBoxInfo|GUICtrlListBox_GetLocale|GUICtrlListBox_GetLocaleCountry|GUICtrlListBox_GetLocaleLang|GUICtrlListBox_GetLocalePrimLang|GUICtrlListBox_GetLocaleSubLang|GUICtrlListBox_GetSel|GUICtrlListBox_GetSelCount|GUICtrlListBox_GetSelItems|GUICtrlListBox_GetSelItemsText|GUICtrlListBox_GetText|GUICtrlListBox_GetTextLen|GUICtrlListBox_GetTopIndex|GUICtrlListBox_InitStorage|GUICtrlListBox_InsertString|GUICtrlListBox_ItemFromPoint|GUICtrlListBox_ReplaceString|GUICtrlListBox_ResetContent|GUICtrlListBox_SelectString|GUICtrlListBox_SelItemRange|GUICtrlListBox_SelItemRangeEx|GUICtrlListBox_SetAnchorIndex|GUICtrlListBox_SetCaretIndex|GUICtrlListBox_SetColumnWidth|GUICtrlListBox_SetCurSel|GUICtrlListBox_SetHorizontalExtent|GUICtrlListBox_SetItemData|GUICtrlListBox_SetItemHeight|GUICtrlListBox_SetLocale|GUICtrlListBox_SetSel|GUICtrlListBox_SetTabStops|GUICtrlListBox_SetTopIndex|GUICtrlListBox_Sort|GUICtrlListBox_SwapString|GUICtrlListBox_UpdateHScroll|GUICtrlListView_AddArray|GUICtrlListView_AddColumn|GUICtrlListView_AddItem|GUICtrlListView_AddSubItem|GUICtrlListView_ApproximateViewHeight|GUICtrlListView_ApproximateViewRect|GUICtrlListView_ApproximateViewWidth|GUICtrlListView_Arrange|GUICtrlListView_BeginUpdate|GUICtrlListView_CancelEditLabel|GUICtrlListView_ClickItem|GUICtrlListView_CopyItems|GUICtrlListView_Create|GUICtrlListView_CreateDragImage|GUICtrlListView_CreateSolidBitMap|GUICtrlListView_DeleteAllItems|GUICtrlListView_DeleteColumn|GUICtrlListView_DeleteItem|GUICtrlListView_DeleteItemsSelected|GUICtrlListView_Destroy|GUICtrlListView_DrawDragImage|GUICtrlListView_EditLabel|GUICtrlListView_EnableGroupView|GUICtrlListView_EndUpdate|GUICtrlListView_EnsureVisible|GUICtrlListView_FindInText|GUICtrlListView_FindItem|GUICtrlListView_FindNearest|GUICtrlListView_FindParam|GUICtrlListView_FindText|GUICtrlListView_GetBkColor|GUICtrlListView_GetBkImage|GUICtrlListView_GetCallbackMask|GUICtrlListView_GetColumn|GUICtrlListView_GetColumnCount|GUICtrlListView_GetColumnOrder|GUICtrlListView_GetColumnOrderArray|GUICtrlListView_GetColumnWidth|GUICtrlListView_GetCounterPage|GUICtrlListView_GetEditControl|GUICtrlListView_GetExtendedListViewStyle|GUICtrlListView_GetGroupInfo|GUICtrlListView_GetGroupViewEnabled|GUICtrlListView_GetHeader|GUICtrlListView_GetHotCursor|GUICtrlListView_GetHotItem|GUICtrlListView_GetHoverTime|GUICtrlListView_GetImageList|GUICtrlListView_GetISearchString|GUICtrlListView_GetItem|GUICtrlListView_GetItemChecked|GUICtrlListView_GetItemCount|GUICtrlListView_GetItemCut|GUICtrlListView_GetItemDropHilited|GUICtrlListView_GetItemEx|GUICtrlListView_GetItemFocused|GUICtrlListView_GetItemGroupID|GUICtrlListView_GetItemImage|GUICtrlListView_GetItemIndent|GUICtrlListView_GetItemParam|GUICtrlListView_GetItemPosition|GUICtrlListView_GetItemPositionX|GUICtrlListView_GetItemPositionY|GUICtrlListView_GetItemRect|GUICtrlListView_GetItemRectEx|GUICtrlListView_GetItemSelected|GUICtrlListView_GetItemSpacing|GUICtrlListView_GetItemSpacingX|GUICtrlListView_GetItemSpacingY|GUICtrlListView_GetItemState|GUICtrlListView_GetItemStateImage|GUICtrlListView_GetItemText|GUICtrlListView_GetItemTextArray|GUICtrlListView_GetItemTextString|GUICtrlListView_GetNextItem|GUICtrlListView_GetNumberOfWorkAreas|GUICtrlListView_GetOrigin|GUICtrlListView_GetOriginX|GUICtrlListView_GetOriginY|GUICtrlListView_GetOutlineColor|GUICtrlListView_GetSelectedColumn|GUICtrlListView_GetSelectedCount|GUICtrlListView_GetSelectedIndices|GUICtrlListView_GetSelectionMark|GUICtrlListView_GetStringWidth|GUICtrlListView_GetSubItemRect|GUICtrlListView_GetTextBkColor|GUICtrlListView_GetTextColor|GUICtrlListView_GetToolTips|GUICtrlListView_GetTopIndex|GUICtrlListView_GetUnicodeFormat|GUICtrlListView_GetView|GUICtrlListView_GetViewDetails|GUICtrlListView_GetViewLarge|GUICtrlListView_GetViewList|GUICtrlListView_GetViewRect|GUICtrlListView_GetViewSmall|GUICtrlListView_GetViewTile|GUICtrlListView_HideColumn|GUICtrlListView_HitTest|GUICtrlListView_InsertColumn|GUICtrlListView_InsertGroup|GUICtrlListView_InsertItem|GUICtrlListView_JustifyColumn|GUICtrlListView_MapIDToIndex|GUICtrlListView_MapIndexToID|GUICtrlListView_RedrawItems|GUICtrlListView_RegisterSortCallBack|GUICtrlListView_RemoveAllGroups|GUICtrlListView_RemoveGroup|GUICtrlListView_Scroll|GUICtrlListView_SetBkColor|GUICtrlListView_SetBkImage|GUICtrlListView_SetCallBackMask|GUICtrlListView_SetColumn|GUICtrlListView_SetColumnOrder|GUICtrlListView_SetColumnOrderArray|GUICtrlListView_SetColumnWidth|GUICtrlListView_SetExtendedListViewStyle|GUICtrlListView_SetGroupInfo|GUICtrlListView_SetHotItem|GUICtrlListView_SetHoverTime|GUICtrlListView_SetIconSpacing|GUICtrlListView_SetImageList|GUICtrlListView_SetItem|GUICtrlListView_SetItemChecked|GUICtrlListView_SetItemCount|GUICtrlListView_SetItemCut|GUICtrlListView_SetItemDropHilited|GUICtrlListView_SetItemEx|GUICtrlListView_SetItemFocused|GUICtrlListView_SetItemGroupID|GUICtrlListView_SetItemImage|GUICtrlListView_SetItemIndent|GUICtrlListView_SetItemParam|GUICtrlListView_SetItemPosition|GUICtrlListView_SetItemPosition32|GUICtrlListView_SetItemSelected|GUICtrlListView_SetItemState|GUICtrlListView_SetItemStateImage|GUICtrlListView_SetItemText|GUICtrlListView_SetOutlineColor|GUICtrlListView_SetSelectedColumn|GUICtrlListView_SetSelectionMark|GUICtrlListView_SetTextBkColor|GUICtrlListView_SetTextColor|GUICtrlListView_SetToolTips|GUICtrlListView_SetUnicodeFormat|GUICtrlListView_SetView|GUICtrlListView_SetWorkAreas|GUICtrlListView_SimpleSort|GUICtrlListView_SortItems|GUICtrlListView_SubItemHitTest|GUICtrlListView_UnRegisterSortCallBack|GUICtrlMenu_AddMenuItem|GUICtrlMenu_AppendMenu|GUICtrlMenu_CheckMenuItem|GUICtrlMenu_CheckRadioItem|GUICtrlMenu_CreateMenu|GUICtrlMenu_CreatePopup|GUICtrlMenu_DeleteMenu|GUICtrlMenu_DestroyMenu|GUICtrlMenu_DrawMenuBar|GUICtrlMenu_EnableMenuItem|GUICtrlMenu_FindItem|GUICtrlMenu_FindParent|GUICtrlMenu_GetItemBmp|GUICtrlMenu_GetItemBmpChecked|GUICtrlMenu_GetItemBmpUnchecked|GUICtrlMenu_GetItemChecked|GUICtrlMenu_GetItemCount|GUICtrlMenu_GetItemData|GUICtrlMenu_GetItemDefault|GUICtrlMenu_GetItemDisabled|GUICtrlMenu_GetItemEnabled|GUICtrlMenu_GetItemGrayed|GUICtrlMenu_GetItemHighlighted|GUICtrlMenu_GetItemID|GUICtrlMenu_GetItemInfo|GUICtrlMenu_GetItemRect|GUICtrlMenu_GetItemRectEx|GUICtrlMenu_GetItemState|GUICtrlMenu_GetItemStateEx|GUICtrlMenu_GetItemSubMenu|GUICtrlMenu_GetItemText|GUICtrlMenu_GetItemType|GUICtrlMenu_GetMenu|GUICtrlMenu_GetMenuBackground|GUICtrlMenu_GetMenuBarInfo|GUICtrlMenu_GetMenuContextHelpID|GUICtrlMenu_GetMenuData|GUICtrlMenu_GetMenuDefaultItem|GUICtrlMenu_GetMenuHeight|GUICtrlMenu_GetMenuInfo|GUICtrlMenu_GetMenuStyle|GUICtrlMenu_GetSystemMenu|GUICtrlMenu_InsertMenuItem|GUICtrlMenu_InsertMenuItemEx|GUICtrlMenu_IsMenu|GUICtrlMenu_LoadMenu|GUICtrlMenu_MapAccelerator|GUICtrlMenu_MenuItemFromPoint|GUICtrlMenu_RemoveMenu|GUICtrlMenu_SetItemBitmaps|GUICtrlMenu_SetItemBmp|GUICtrlMenu_SetItemBmpChecked|GUICtrlMenu_SetItemBmpUnchecked|GUICtrlMenu_SetItemChecked|GUICtrlMenu_SetItemData|GUICtrlMenu_SetItemDefault|GUICtrlMenu_SetItemDisabled|GUICtrlMenu_SetItemEnabled|GUICtrlMenu_SetItemGrayed|GUICtrlMenu_SetItemHighlighted|GUICtrlMenu_SetItemID|GUICtrlMenu_SetItemInfo|GUICtrlMenu_SetItemState|GUICtrlMenu_SetItemSubMenu|GUICtrlMenu_SetItemText|GUICtrlMenu_SetItemType|GUICtrlMenu_SetMenu|GUICtrlMenu_SetMenuBackground|GUICtrlMenu_SetMenuContextHelpID|GUICtrlMenu_SetMenuData|GUICtrlMenu_SetMenuDefaultItem|GUICtrlMenu_SetMenuHeight|GUICtrlMenu_SetMenuInfo|GUICtrlMenu_SetMenuStyle|GUICtrlMenu_TrackPopupMenu|GUICtrlMonthCal_Create|GUICtrlMonthCal_Destroy|GUICtrlMonthCal_GetColor|GUICtrlMonthCal_GetColorArray|GUICtrlMonthCal_GetCurSel|GUICtrlMonthCal_GetCurSelStr|GUICtrlMonthCal_GetFirstDOW|GUICtrlMonthCal_GetFirstDOWStr|GUICtrlMonthCal_GetMaxSelCount|GUICtrlMonthCal_GetMaxTodayWidth|GUICtrlMonthCal_GetMinReqHeight|GUICtrlMonthCal_GetMinReqRect|GUICtrlMonthCal_GetMinReqRectArray|GUICtrlMonthCal_GetMinReqWidth|GUICtrlMonthCal_GetMonthDelta|GUICtrlMonthCal_GetMonthRange|GUICtrlMonthCal_GetMonthRangeMax|GUICtrlMonthCal_GetMonthRangeMaxStr|GUICtrlMonthCal_GetMonthRangeMin|GUICtrlMonthCal_GetMonthRangeMinStr|GUICtrlMonthCal_GetMonthRangeSpan|GUICtrlMonthCal_GetRange|GUICtrlMonthCal_GetRangeMax|GUICtrlMonthCal_GetRangeMaxStr|GUICtrlMonthCal_GetRangeMin|GUICtrlMonthCal_GetRangeMinStr|GUICtrlMonthCal_GetSelRange|GUICtrlMonthCal_GetSelRangeMax|GUICtrlMonthCal_GetSelRangeMaxStr|GUICtrlMonthCal_GetSelRangeMin|GUICtrlMonthCal_GetSelRangeMinStr|GUICtrlMonthCal_GetToday|GUICtrlMonthCal_GetTodayStr|GUICtrlMonthCal_GetUnicodeFormat|GUICtrlMonthCal_HitTest|GUICtrlMonthCal_SetColor|GUICtrlMonthCal_SetCurSel|GUICtrlMonthCal_SetDayState|GUICtrlMonthCal_SetFirstDOW|GUICtrlMonthCal_SetMaxSelCount|GUICtrlMonthCal_SetMonthDelta|GUICtrlMonthCal_SetRange|GUICtrlMonthCal_SetSelRange|GUICtrlMonthCal_SetToday|GUICtrlMonthCal_SetUnicodeFormat|GUICtrlRebar_AddBand|GUICtrlRebar_AddToolBarBand|GUICtrlRebar_BeginDrag|GUICtrlRebar_Create|GUICtrlRebar_DeleteBand|GUICtrlRebar_Destroy|GUICtrlRebar_DragMove|GUICtrlRebar_EndDrag|GUICtrlRebar_GetBandBackColor|GUICtrlRebar_GetBandBorders|GUICtrlRebar_GetBandBordersEx|GUICtrlRebar_GetBandChildHandle|GUICtrlRebar_GetBandChildSize|GUICtrlRebar_GetBandCount|GUICtrlRebar_GetBandForeColor|GUICtrlRebar_GetBandHeaderSize|GUICtrlRebar_GetBandID|GUICtrlRebar_GetBandIdealSize|GUICtrlRebar_GetBandLength|GUICtrlRebar_GetBandLParam|GUICtrlRebar_GetBandMargins|GUICtrlRebar_GetBandMarginsEx|GUICtrlRebar_GetBandRect|GUICtrlRebar_GetBandRectEx|GUICtrlRebar_GetBandStyle|GUICtrlRebar_GetBandStyleBreak|GUICtrlRebar_GetBandStyleChildEdge|GUICtrlRebar_GetBandStyleFixedBMP|GUICtrlRebar_GetBandStyleFixedSize|GUICtrlRebar_GetBandStyleGripperAlways|GUICtrlRebar_GetBandStyleHidden|GUICtrlRebar_GetBandStyleHideTitle|GUICtrlRebar_GetBandStyleNoGripper|GUICtrlRebar_GetBandStyleTopAlign|GUICtrlRebar_GetBandStyleUseChevron|GUICtrlRebar_GetBandStyleVariableHeight|GUICtrlRebar_GetBandText|GUICtrlRebar_GetBarHeight|GUICtrlRebar_GetBKColor|GUICtrlRebar_GetColorScheme|GUICtrlRebar_GetRowCount|GUICtrlRebar_GetRowHeight|GUICtrlRebar_GetTextColor|GUICtrlRebar_GetToolTips|GUICtrlRebar_GetUnicodeFormat|GUICtrlRebar_HitTest|GUICtrlRebar_IDToIndex|GUICtrlRebar_MaximizeBand|GUICtrlRebar_MinimizeBand|GUICtrlRebar_MoveBand|GUICtrlRebar_SetBandBackColor|GUICtrlRebar_SetBandForeColor|GUICtrlRebar_SetBandHeaderSize|GUICtrlRebar_SetBandID|GUICtrlRebar_SetBandIdealSize|GUICtrlRebar_SetBandLength|GUICtrlRebar_SetBandLParam|GUICtrlRebar_SetBandStyle|GUICtrlRebar_SetBandStyleBreak|GUICtrlRebar_SetBandStyleChildEdge|GUICtrlRebar_SetBandStyleFixedBMP|GUICtrlRebar_SetBandStyleFixedSize|GUICtrlRebar_SetBandStyleGripperAlways|GUICtrlRebar_SetBandStyleHidden|GUICtrlRebar_SetBandStyleHideTitle|GUICtrlRebar_SetBandStyleNoGripper|GUICtrlRebar_SetBandStyleTopAlign|GUICtrlRebar_SetBandStyleUseChevron|GUICtrlRebar_SetBandStyleVariableHeight|GUICtrlRebar_SetBandText|GUICtrlRebar_SetBKColor|GUICtrlRebar_SetColorScheme|GUICtrlRebar_SetTextColor|GUICtrlRebar_SetToolTips|GUICtrlRebar_SetUnicodeFormat|GUICtrlRebar_ShowBand|GUICtrlSlider_ClearSel|GUICtrlSlider_ClearTics|GUICtrlSlider_Create|GUICtrlSlider_Destroy|GUICtrlSlider_GetBuddy|GUICtrlSlider_GetChannelRect|GUICtrlSlider_GetLineSize|GUICtrlSlider_GetNumTics|GUICtrlSlider_GetPageSize|GUICtrlSlider_GetPos|GUICtrlSlider_GetPTics|GUICtrlSlider_GetRange|GUICtrlSlider_GetRangeMax|GUICtrlSlider_GetRangeMin|GUICtrlSlider_GetSel|GUICtrlSlider_GetSelEnd|GUICtrlSlider_GetSelStart|GUICtrlSlider_GetThumbLength|GUICtrlSlider_GetThumbRect|GUICtrlSlider_GetThumbRectEx|GUICtrlSlider_GetTic|GUICtrlSlider_GetTicPos|GUICtrlSlider_GetToolTips|GUICtrlSlider_GetUnicodeFormat|GUICtrlSlider_SetBuddy|GUICtrlSlider_SetLineSize|GUICtrlSlider_SetPageSize|GUICtrlSlider_SetPos|GUICtrlSlider_SetRange|GUICtrlSlider_SetRangeMax|GUICtrlSlider_SetRangeMin|GUICtrlSlider_SetSel|GUICtrlSlider_SetSelEnd|GUICtrlSlider_SetSelStart|GUICtrlSlider_SetThumbLength|GUICtrlSlider_SetTic|GUICtrlSlider_SetTicFreq|GUICtrlSlider_SetTipSide|GUICtrlSlider_SetToolTips|GUICtrlSlider_SetUnicodeFormat|GUICtrlStatusBar_Create|GUICtrlStatusBar_Destroy|GUICtrlStatusBar_EmbedControl|GUICtrlStatusBar_GetBorders|GUICtrlStatusBar_GetBordersHorz|GUICtrlStatusBar_GetBordersRect|GUICtrlStatusBar_GetBordersVert|GUICtrlStatusBar_GetCount|GUICtrlStatusBar_GetHeight|GUICtrlStatusBar_GetIcon|GUICtrlStatusBar_GetParts|GUICtrlStatusBar_GetRect|GUICtrlStatusBar_GetRectEx|GUICtrlStatusBar_GetText|GUICtrlStatusBar_GetTextFlags|GUICtrlStatusBar_GetTextLength|GUICtrlStatusBar_GetTextLengthEx|GUICtrlStatusBar_GetTipText|GUICtrlStatusBar_GetUnicodeFormat|GUICtrlStatusBar_GetWidth|GUICtrlStatusBar_IsSimple|GUICtrlStatusBar_Resize|GUICtrlStatusBar_SetBkColor|GUICtrlStatusBar_SetIcon|GUICtrlStatusBar_SetMinHeight|GUICtrlStatusBar_SetParts|GUICtrlStatusBar_SetSimple|GUICtrlStatusBar_SetText|GUICtrlStatusBar_SetTipText|GUICtrlStatusBar_SetUnicodeFormat|GUICtrlStatusBar_ShowHide|GUICtrlTab_Create|GUICtrlTab_DeleteAllItems|GUICtrlTab_DeleteItem|GUICtrlTab_DeselectAll|GUICtrlTab_Destroy|GUICtrlTab_FindTab|GUICtrlTab_GetCurFocus|GUICtrlTab_GetCurSel|GUICtrlTab_GetDisplayRect|GUICtrlTab_GetDisplayRectEx|GUICtrlTab_GetExtendedStyle|GUICtrlTab_GetImageList|GUICtrlTab_GetItem|GUICtrlTab_GetItemCount|GUICtrlTab_GetItemImage|GUICtrlTab_GetItemParam|GUICtrlTab_GetItemRect|GUICtrlTab_GetItemRectEx|GUICtrlTab_GetItemState|GUICtrlTab_GetItemText|GUICtrlTab_GetRowCount|GUICtrlTab_GetToolTips|GUICtrlTab_GetUnicodeFormat|GUICtrlTab_HighlightItem|GUICtrlTab_HitTest|GUICtrlTab_InsertItem|GUICtrlTab_RemoveImage|GUICtrlTab_SetCurFocus|GUICtrlTab_SetCurSel|GUICtrlTab_SetExtendedStyle|GUICtrlTab_SetImageList|GUICtrlTab_SetItem|GUICtrlTab_SetItemImage|GUICtrlTab_SetItemParam|GUICtrlTab_SetItemSize|GUICtrlTab_SetItemState|GUICtrlTab_SetItemText|GUICtrlTab_SetMinTabWidth|GUICtrlTab_SetPadding|GUICtrlTab_SetToolTips|GUICtrlTab_SetUnicodeFormat|GUICtrlToolbar_AddBitmap|GUICtrlToolbar_AddButton|GUICtrlToolbar_AddButtonSep|GUICtrlToolbar_AddString|GUICtrlToolbar_ButtonCount|GUICtrlToolbar_CheckButton|GUICtrlToolbar_ClickAccel|GUICtrlToolbar_ClickButton|GUICtrlToolbar_ClickIndex|GUICtrlToolbar_CommandToIndex|GUICtrlToolbar_Create|GUICtrlToolbar_Customize|GUICtrlToolbar_DeleteButton|GUICtrlToolbar_Destroy|GUICtrlToolbar_EnableButton|GUICtrlToolbar_FindToolbar|GUICtrlToolbar_GetAnchorHighlight|GUICtrlToolbar_GetBitmapFlags|GUICtrlToolbar_GetButtonBitmap|GUICtrlToolbar_GetButtonInfo|GUICtrlToolbar_GetButtonInfoEx|GUICtrlToolbar_GetButtonParam|GUICtrlToolbar_GetButtonRect|GUICtrlToolbar_GetButtonRectEx|GUICtrlToolbar_GetButtonSize|GUICtrlToolbar_GetButtonState|GUICtrlToolbar_GetButtonStyle|GUICtrlToolbar_GetButtonText|GUICtrlToolbar_GetColorScheme|GUICtrlToolbar_GetDisabledImageList|GUICtrlToolbar_GetExtendedStyle|GUICtrlToolbar_GetHotImageList|GUICtrlToolbar_GetHotItem|GUICtrlToolbar_GetImageList|GUICtrlToolbar_GetInsertMark|GUICtrlToolbar_GetInsertMarkColor|GUICtrlToolbar_GetMaxSize|GUICtrlToolbar_GetMetrics|GUICtrlToolbar_GetPadding|GUICtrlToolbar_GetRows|GUICtrlToolbar_GetString|GUICtrlToolbar_GetStyle|GUICtrlToolbar_GetStyleAltDrag|GUICtrlToolbar_GetStyleCustomErase|GUICtrlToolbar_GetStyleFlat|GUICtrlToolbar_GetStyleList|GUICtrlToolbar_GetStyleRegisterDrop|GUICtrlToolbar_GetStyleToolTips|GUICtrlToolbar_GetStyleTransparent|GUICtrlToolbar_GetStyleWrapable|GUICtrlToolbar_GetTextRows|GUICtrlToolbar_GetToolTips|GUICtrlToolbar_GetUnicodeFormat|GUICtrlToolbar_HideButton|GUICtrlToolbar_HighlightButton|GUICtrlToolbar_HitTest|GUICtrlToolbar_IndexToCommand|GUICtrlToolbar_InsertButton|GUICtrlToolbar_InsertMarkHitTest|GUICtrlToolbar_IsButtonChecked|GUICtrlToolbar_IsButtonEnabled|GUICtrlToolbar_IsButtonHidden|GUICtrlToolbar_IsButtonHighlighted|GUICtrlToolbar_IsButtonIndeterminate|GUICtrlToolbar_IsButtonPressed|GUICtrlToolbar_LoadBitmap|GUICtrlToolbar_LoadImages|GUICtrlToolbar_MapAccelerator|GUICtrlToolbar_MoveButton|GUICtrlToolbar_PressButton|GUICtrlToolbar_SetAnchorHighlight|GUICtrlToolbar_SetBitmapSize|GUICtrlToolbar_SetButtonBitMap|GUICtrlToolbar_SetButtonInfo|GUICtrlToolbar_SetButtonInfoEx|GUICtrlToolbar_SetButtonParam|GUICtrlToolbar_SetButtonSize|GUICtrlToolbar_SetButtonState|GUICtrlToolbar_SetButtonStyle|GUICtrlToolbar_SetButtonText|GUICtrlToolbar_SetButtonWidth|GUICtrlToolbar_SetCmdID|GUICtrlToolbar_SetColorScheme|GUICtrlToolbar_SetDisabledImageList|GUICtrlToolbar_SetDrawTextFlags|GUICtrlToolbar_SetExtendedStyle|GUICtrlToolbar_SetHotImageList|GUICtrlToolbar_SetHotItem|GUICtrlToolbar_SetImageList|GUICtrlToolbar_SetIndent|GUICtrlToolbar_SetIndeterminate|GUICtrlToolbar_SetInsertMark|GUICtrlToolbar_SetInsertMarkColor|GUICtrlToolbar_SetMaxTextRows|GUICtrlToolbar_SetMetrics|GUICtrlToolbar_SetPadding|GUICtrlToolbar_SetParent|GUICtrlToolbar_SetRows|GUICtrlToolbar_SetStyle|GUICtrlToolbar_SetStyleAltDrag|GUICtrlToolbar_SetStyleCustomErase|GUICtrlToolbar_SetStyleFlat|GUICtrlToolbar_SetStyleList|GUICtrlToolbar_SetStyleRegisterDrop|GUICtrlToolbar_SetStyleToolTips|GUICtrlToolbar_SetStyleTransparent|GUICtrlToolbar_SetStyleWrapable|GUICtrlToolbar_SetToolTips|GUICtrlToolbar_SetUnicodeFormat|GUICtrlToolbar_SetWindowTheme|GUICtrlTreeView_Add|GUICtrlTreeView_AddChild|GUICtrlTreeView_AddChildFirst|GUICtrlTreeView_AddFirst|GUICtrlTreeView_BeginUpdate|GUICtrlTreeView_ClickItem|GUICtrlTreeView_Create|GUICtrlTreeView_CreateDragImage|GUICtrlTreeView_CreateSolidBitMap|GUICtrlTreeView_Delete|GUICtrlTreeView_DeleteAll|GUICtrlTreeView_DeleteChildren|GUICtrlTreeView_Destroy|GUICtrlTreeView_DisplayRect|GUICtrlTreeView_DisplayRectEx|GUICtrlTreeView_EditText|GUICtrlTreeView_EndEdit|GUICtrlTreeView_EndUpdate|GUICtrlTreeView_EnsureVisible|GUICtrlTreeView_Expand|GUICtrlTreeView_ExpandedOnce|GUICtrlTreeView_FindItem|GUICtrlTreeView_FindItemEx|GUICtrlTreeView_GetBkColor|GUICtrlTreeView_GetBold|GUICtrlTreeView_GetChecked|GUICtrlTreeView_GetChildCount|GUICtrlTreeView_GetChildren|GUICtrlTreeView_GetCount|GUICtrlTreeView_GetCut|GUICtrlTreeView_GetDropTarget|GUICtrlTreeView_GetEditControl|GUICtrlTreeView_GetExpanded|GUICtrlTreeView_GetFirstChild|GUICtrlTreeView_GetFirstItem|GUICtrlTreeView_GetFirstVisible|GUICtrlTreeView_GetFocused|GUICtrlTreeView_GetHeight|GUICtrlTreeView_GetImageIndex|GUICtrlTreeView_GetImageListIconHandle|GUICtrlTreeView_GetIndent|GUICtrlTreeView_GetInsertMarkColor|GUICtrlTreeView_GetISearchString|GUICtrlTreeView_GetItemByIndex|GUICtrlTreeView_GetItemHandle|GUICtrlTreeView_GetItemParam|GUICtrlTreeView_GetLastChild|GUICtrlTreeView_GetLineColor|GUICtrlTreeView_GetNext|GUICtrlTreeView_GetNextChild|GUICtrlTreeView_GetNextSibling|GUICtrlTreeView_GetNextVisible|GUICtrlTreeView_GetNormalImageList|GUICtrlTreeView_GetParentHandle|GUICtrlTreeView_GetParentParam|GUICtrlTreeView_GetPrev|GUICtrlTreeView_GetPrevChild|GUICtrlTreeView_GetPrevSibling|GUICtrlTreeView_GetPrevVisible|GUICtrlTreeView_GetScrollTime|GUICtrlTreeView_GetSelected|GUICtrlTreeView_GetSelectedImageIndex|GUICtrlTreeView_GetSelection|GUICtrlTreeView_GetSiblingCount|GUICtrlTreeView_GetState|GUICtrlTreeView_GetStateImageIndex|GUICtrlTreeView_GetStateImageList|GUICtrlTreeView_GetText|GUICtrlTreeView_GetTextColor|GUICtrlTreeView_GetToolTips|GUICtrlTreeView_GetTree|GUICtrlTreeView_GetUnicodeFormat|GUICtrlTreeView_GetVisible|GUICtrlTreeView_GetVisibleCount|GUICtrlTreeView_HitTest|GUICtrlTreeView_HitTestEx|GUICtrlTreeView_HitTestItem|GUICtrlTreeView_Index|GUICtrlTreeView_InsertItem|GUICtrlTreeView_IsFirstItem|GUICtrlTreeView_IsParent|GUICtrlTreeView_Level|GUICtrlTreeView_SelectItem|GUICtrlTreeView_SelectItemByIndex|GUICtrlTreeView_SetBkColor|GUICtrlTreeView_SetBold|GUICtrlTreeView_SetChecked|GUICtrlTreeView_SetCheckedByIndex|GUICtrlTreeView_SetChildren|GUICtrlTreeView_SetCut|GUICtrlTreeView_SetDropTarget|GUICtrlTreeView_SetFocused|GUICtrlTreeView_SetHeight|GUICtrlTreeView_SetIcon|GUICtrlTreeView_SetImageIndex|GUICtrlTreeView_SetIndent|GUICtrlTreeView_SetInsertMark|GUICtrlTreeView_SetInsertMarkColor|GUICtrlTreeView_SetItemHeight|GUICtrlTreeView_SetItemParam|GUICtrlTreeView_SetLineColor|GUICtrlTreeView_SetNormalImageList|GUICtrlTreeView_SetScrollTime|GUICtrlTreeView_SetSelected|GUICtrlTreeView_SetSelectedImageIndex|GUICtrlTreeView_SetState|GUICtrlTreeView_SetStateImageIndex|GUICtrlTreeView_SetStateImageList|GUICtrlTreeView_SetText|GUICtrlTreeView_SetTextColor|GUICtrlTreeView_SetToolTips|GUICtrlTreeView_SetUnicodeFormat|GUICtrlTreeView_Sort|GUIImageList_Add|GUIImageList_AddBitmap|GUIImageList_AddIcon|GUIImageList_AddMasked|GUIImageList_BeginDrag|GUIImageList_Copy|GUIImageList_Create|GUIImageList_Destroy|GUIImageList_DestroyIcon|GUIImageList_DragEnter|GUIImageList_DragLeave|GUIImageList_DragMove|GUIImageList_Draw|GUIImageList_DrawEx|GUIImageList_Duplicate|GUIImageList_EndDrag|GUIImageList_GetBkColor|GUIImageList_GetIcon|GUIImageList_GetIconHeight|GUIImageList_GetIconSize|GUIImageList_GetIconSizeEx|GUIImageList_GetIconWidth|GUIImageList_GetImageCount|GUIImageList_GetImageInfoEx|GUIImageList_Remove|GUIImageList_ReplaceIcon|GUIImageList_SetBkColor|GUIImageList_SetIconSize|GUIImageList_SetImageCount|GUIImageList_Swap|GUIScrollBars_EnableScrollBar|GUIScrollBars_GetScrollBarInfoEx|GUIScrollBars_GetScrollBarRect|GUIScrollBars_GetScrollBarRGState|GUIScrollBars_GetScrollBarXYLineButton|GUIScrollBars_GetScrollBarXYThumbBottom|GUIScrollBars_GetScrollBarXYThumbTop|GUIScrollBars_GetScrollInfo|GUIScrollBars_GetScrollInfoEx|GUIScrollBars_GetScrollInfoMax|GUIScrollBars_GetScrollInfoMin|GUIScrollBars_GetScrollInfoPage|GUIScrollBars_GetScrollInfoPos|GUIScrollBars_GetScrollInfoTrackPos|GUIScrollBars_GetScrollPos|GUIScrollBars_GetScrollRange|GUIScrollBars_Init|GUIScrollBars_ScrollWindow|GUIScrollBars_SetScrollInfo|GUIScrollBars_SetScrollInfoMax|GUIScrollBars_SetScrollInfoMin|GUIScrollBars_SetScrollInfoPage|GUIScrollBars_SetScrollInfoPos|GUIScrollBars_SetScrollRange|GUIScrollBars_ShowScrollBar|GUIToolTip_Activate|GUIToolTip_AddTool|GUIToolTip_AdjustRect|GUIToolTip_BitsToTTF|GUIToolTip_Create|GUIToolTip_DelTool|GUIToolTip_Destroy|GUIToolTip_EnumTools|GUIToolTip_GetBubbleHeight|GUIToolTip_GetBubbleSize|GUIToolTip_GetBubbleWidth|GUIToolTip_GetCurrentTool|GUIToolTip_GetDelayTime|GUIToolTip_GetMargin|GUIToolTip_GetMarginEx|GUIToolTip_GetMaxTipWidth|GUIToolTip_GetText|GUIToolTip_GetTipBkColor|GUIToolTip_GetTipTextColor|GUIToolTip_GetTitleBitMap|GUIToolTip_GetTitleText|GUIToolTip_GetToolCount|GUIToolTip_GetToolInfo|GUIToolTip_HitTest|GUIToolTip_NewToolRect|GUIToolTip_Pop|GUIToolTip_PopUp|GUIToolTip_SetDelayTime|GUIToolTip_SetMargin|GUIToolTip_SetMaxTipWidth|GUIToolTip_SetTipBkColor|GUIToolTip_SetTipTextColor|GUIToolTip_SetTitle|GUIToolTip_SetToolInfo|GUIToolTip_SetWindowTheme|GUIToolTip_ToolExists|GUIToolTip_ToolToArray|GUIToolTip_TrackActivate|GUIToolTip_TrackPosition|GUIToolTip_TTFToBits|GUIToolTip_Update|GUIToolTip_UpdateTipText|HexToString|IE_Example|IE_Introduction|IE_VersionInfo|IEAction|IEAttach|IEBodyReadHTML|IEBodyReadText|IEBodyWriteHTML|IECreate|IECreateEmbedded|IEDocGetObj|IEDocInsertHTML|IEDocInsertText|IEDocReadHTML|IEDocWriteHTML|IEErrorHandlerDeRegister|IEErrorHandlerRegister|IEErrorNotify|IEFormElementCheckBoxSelect|IEFormElementGetCollection|IEFormElementGetObjByName|IEFormElementGetValue|IEFormElementOptionSelect|IEFormElementRadioSelect|IEFormElementSetValue|IEFormGetCollection|IEFormGetObjByName|IEFormImageClick|IEFormReset|IEFormSubmit|IEFrameGetCollection|IEFrameGetObjByName|IEGetObjById|IEGetObjByName|IEHeadInsertEventScript|IEImgClick|IEImgGetCollection|IEIsFrameSet|IELinkClickByIndex|IELinkClickByText|IELinkGetCollection|IELoadWait|IELoadWaitTimeout|IENavigate|IEPropertyGet|IEPropertySet|IEQuit|IETableGetCollection|IETableWriteToArray|IETagNameAllGetCollection|IETagNameGetCollection|Iif|INetExplorerCapable|INetGetSource|INetMail|INetSmtpMail|IsPressed|MathCheckDiv|Max|MemGlobalAlloc|MemGlobalFree|MemGlobalLock|MemGlobalSize|MemGlobalUnlock|MemMoveMemory|MemMsgBox|MemShowError|MemVirtualAlloc|MemVirtualAllocEx|MemVirtualFree|MemVirtualFreeEx|Min|MouseTrap|NamedPipes_CallNamedPipe|NamedPipes_ConnectNamedPipe|NamedPipes_CreateNamedPipe|NamedPipes_CreatePipe|NamedPipes_DisconnectNamedPipe|NamedPipes_GetNamedPipeHandleState|NamedPipes_GetNamedPipeInfo|NamedPipes_PeekNamedPipe|NamedPipes_SetNamedPipeHandleState|NamedPipes_TransactNamedPipe|NamedPipes_WaitNamedPipe|Net_Share_ConnectionEnum|Net_Share_FileClose|Net_Share_FileEnum|Net_Share_FileGetInfo|Net_Share_PermStr|Net_Share_ResourceStr|Net_Share_SessionDel|Net_Share_SessionEnum|Net_Share_SessionGetInfo|Net_Share_ShareAdd|Net_Share_ShareCheck|Net_Share_ShareDel|Net_Share_ShareEnum|Net_Share_ShareGetInfo|Net_Share_ShareSetInfo|Net_Share_StatisticsGetSvr|Net_Share_StatisticsGetWrk|Now|NowCalc|NowCalcDate|NowDate|NowTime|PathFull|PathMake|PathSplit|ProcessGetName|ProcessGetPriority|Radian|ReplaceStringInFile|RunDOS|ScreenCapture_Capture|ScreenCapture_CaptureWnd|ScreenCapture_SaveImage|ScreenCapture_SetBMPFormat|ScreenCapture_SetJPGQuality|ScreenCapture_SetTIFColorDepth|ScreenCapture_SetTIFCompression|Security__AdjustTokenPrivileges|Security__GetAccountSid|Security__GetLengthSid|Security__GetTokenInformation|Security__ImpersonateSelf|Security__IsValidSid|Security__LookupAccountName|Security__LookupAccountSid|Security__LookupPrivilegeValue|Security__OpenProcessToken|Security__OpenThreadToken|Security__OpenThreadTokenEx|Security__SetPrivilege|Security__SidToStringSid|Security__SidTypeStr|Security__StringSidToSid|SendMessage|SendMessageA|SetDate|SetTime|Singleton|SoundClose|SoundLength|SoundOpen|SoundPause|SoundPlay|SoundPos|SoundResume|SoundSeek|SoundStatus|SoundStop|SQLite_Changes|SQLite_Close|SQLite_Display2DResult|SQLite_Encode|SQLite_ErrCode|SQLite_ErrMsg|SQLite_Escape|SQLite_Exec|SQLite_FetchData|SQLite_FetchNames|SQLite_GetTable|SQLite_GetTable2d|SQLite_LastInsertRowID|SQLite_LibVersion|SQLite_Open|SQLite_Query|SQLite_QueryFinalize|SQLite_QueryReset|SQLite_QuerySingleRow|SQLite_SaveMode|SQLite_SetTimeout|SQLite_Shutdown|SQLite_SQLiteExe|SQLite_Startup|SQLite_TotalChanges|StringAddComma|StringBetween|StringEncrypt|StringInsert|StringProper|StringRepeat|StringReverse|StringSplit|StringToHex|TCPIpToName|TempFile|TicksToTime|Timer_Diff|Timer_GetTimerID|Timer_Init|Timer_KillAllTimers|Timer_KillTimer|Timer_SetTimer|TimeToTicks|VersionCompare|viClose|viExecCommand|viFindGpib|viGpibBusReset|viGTL|viOpen|viSetAttribute|viSetTimeout|WeekNumberISO|WinAPI_AttachConsole|WinAPI_AttachThreadInput|WinAPI_Beep|WinAPI_BitBlt|WinAPI_CallNextHookEx|WinAPI_Check|WinAPI_ClientToScreen|WinAPI_CloseHandle|WinAPI_CommDlgExtendedError|WinAPI_CopyIcon|WinAPI_CreateBitmap|WinAPI_CreateCompatibleBitmap|WinAPI_CreateCompatibleDC|WinAPI_CreateEvent|WinAPI_CreateFile|WinAPI_CreateFont|WinAPI_CreateFontIndirect|WinAPI_CreateProcess|WinAPI_CreateSolidBitmap|WinAPI_CreateSolidBrush|WinAPI_CreateWindowEx|WinAPI_DefWindowProc|WinAPI_DeleteDC|WinAPI_DeleteObject|WinAPI_DestroyIcon|WinAPI_DestroyWindow|WinAPI_DrawEdge|WinAPI_DrawFrameControl|WinAPI_DrawIcon|WinAPI_DrawIconEx|WinAPI_DrawText|WinAPI_EnableWindow|WinAPI_EnumDisplayDevices|WinAPI_EnumWindows|WinAPI_EnumWindowsPopup|WinAPI_EnumWindowsTop|WinAPI_ExpandEnvironmentStrings|WinAPI_ExtractIconEx|WinAPI_FatalAppExit|WinAPI_FillRect|WinAPI_FindExecutable|WinAPI_FindWindow|WinAPI_FlashWindow|WinAPI_FlashWindowEx|WinAPI_FloatToInt|WinAPI_FlushFileBuffers|WinAPI_FormatMessage|WinAPI_FrameRect|WinAPI_FreeLibrary|WinAPI_GetAncestor|WinAPI_GetAsyncKeyState|WinAPI_GetClassName|WinAPI_GetClientHeight|WinAPI_GetClientRect|WinAPI_GetClientWidth|WinAPI_GetCurrentProcess|WinAPI_GetCurrentProcessID|WinAPI_GetCurrentThread|WinAPI_GetCurrentThreadId|WinAPI_GetCursorInfo|WinAPI_GetDC|WinAPI_GetDesktopWindow|WinAPI_GetDeviceCaps|WinAPI_GetDIBits|WinAPI_GetDlgCtrlID|WinAPI_GetDlgItem|WinAPI_GetFileSizeEx|WinAPI_GetFocus|WinAPI_GetForegroundWindow|WinAPI_GetIconInfo|WinAPI_GetLastError|WinAPI_GetLastErrorMessage|WinAPI_GetModuleHandle|WinAPI_GetMousePos|WinAPI_GetMousePosX|WinAPI_GetMousePosY|WinAPI_GetObject|WinAPI_GetOpenFileName|WinAPI_GetOverlappedResult|WinAPI_GetParent|WinAPI_GetProcessAffinityMask|WinAPI_GetSaveFileName|WinAPI_GetStdHandle|WinAPI_GetStockObject|WinAPI_GetSysColor|WinAPI_GetSysColorBrush|WinAPI_GetSystemMetrics|WinAPI_GetTextExtentPoint32|WinAPI_GetWindow|WinAPI_GetWindowDC|WinAPI_GetWindowHeight|WinAPI_GetWindowLong|WinAPI_GetWindowRect|WinAPI_GetWindowText|WinAPI_GetWindowThreadProcessId|WinAPI_GetWindowWidth|WinAPI_GetXYFromPoint|WinAPI_GlobalMemStatus|WinAPI_GUIDFromString|WinAPI_GUIDFromStringEx|WinAPI_HiWord|WinAPI_InProcess|WinAPI_IntToFloat|WinAPI_InvalidateRect|WinAPI_IsClassName|WinAPI_IsWindow|WinAPI_IsWindowVisible|WinAPI_LoadBitmap|WinAPI_LoadImage|WinAPI_LoadLibrary|WinAPI_LoadLibraryEx|WinAPI_LoadShell32Icon|WinAPI_LoadString|WinAPI_LocalFree|WinAPI_LoWord|WinAPI_MakeDWord|WinAPI_MAKELANGID|WinAPI_MAKELCID|WinAPI_MakeLong|WinAPI_MessageBeep|WinAPI_Mouse_Event|WinAPI_MoveWindow|WinAPI_MsgBox|WinAPI_MulDiv|WinAPI_MultiByteToWideChar|WinAPI_MultiByteToWideCharEx|WinAPI_OpenProcess|WinAPI_PointFromRect|WinAPI_PostMessage|WinAPI_PrimaryLangId|WinAPI_PtInRect|WinAPI_ReadFile|WinAPI_ReadProcessMemory|WinAPI_RectIsEmpty|WinAPI_RedrawWindow|WinAPI_RegisterWindowMessage|WinAPI_ReleaseCapture|WinAPI_ReleaseDC|WinAPI_ScreenToClient|WinAPI_SelectObject|WinAPI_SetBkColor|WinAPI_SetCapture|WinAPI_SetCursor|WinAPI_SetDefaultPrinter|WinAPI_SetDIBits|WinAPI_SetEvent|WinAPI_SetFocus|WinAPI_SetFont|WinAPI_SetHandleInformation|WinAPI_SetLastError|WinAPI_SetParent|WinAPI_SetProcessAffinityMask|WinAPI_SetSysColors|WinAPI_SetTextColor|WinAPI_SetWindowLong|WinAPI_SetWindowPos|WinAPI_SetWindowsHookEx|WinAPI_SetWindowText|WinAPI_ShowCursor|WinAPI_ShowError|WinAPI_ShowMsg|WinAPI_ShowWindow|WinAPI_StringFromGUID|WinAPI_SubLangId|WinAPI_SystemParametersInfo|WinAPI_TwipsPerPixelX|WinAPI_TwipsPerPixelY|WinAPI_UnhookWindowsHookEx|WinAPI_UpdateLayeredWindow|WinAPI_UpdateWindow|WinAPI_ValidateClassName|WinAPI_WaitForInputIdle|WinAPI_WaitForMultipleObjects|WinAPI_WaitForSingleObject|WinAPI_WideCharToMultiByte|WinAPI_WindowFromPoint|WinAPI_WriteConsole|WinAPI_WriteFile|WinAPI_WriteProcessMemory|WinNet_AddConnection|WinNet_AddConnection2|WinNet_AddConnection3|WinNet_CancelConnection|WinNet_CancelConnection2|WinNet_CloseEnum|WinNet_ConnectionDialog|WinNet_ConnectionDialog1|WinNet_DisconnectDialog|WinNet_DisconnectDialog1|WinNet_EnumResource|WinNet_GetConnection|WinNet_GetConnectionPerformance|WinNet_GetLastError|WinNet_GetNetworkInformation|WinNet_GetProviderName|WinNet_GetResourceInformation|WinNet_GetResourceParent|WinNet_GetUniversalName|WinNet_GetUser|WinNet_OpenEnum|WinNet_RestoreConnection|WinNet_UseConnection|Word_VersionInfo|WordAttach|WordCreate|WordDocAdd|WordDocAddLink|WordDocAddPicture|WordDocClose|WordDocFindReplace|WordDocGetCollection|WordDocLinkGetCollection|WordDocOpen|WordDocPrint|WordDocPropertyGet|WordDocPropertySet|WordDocSave|WordDocSaveAs|WordErrorHandlerDeRegister|WordErrorHandlerRegister|WordErrorNotify|WordMacroRun|WordPropertyGet|WordPropertySet|WordQuit|' +\n        'ce|comments-end|comments-start|cs|include|include-once|NoTrayIcon|RequireAdmin|' +\n        'AutoIt3Wrapper_Au3Check_Parameters|AutoIt3Wrapper_Au3Check_Stop_OnWarning|AutoIt3Wrapper_Change2CUI|AutoIt3Wrapper_Compression|AutoIt3Wrapper_cvsWrapper_Parameters|AutoIt3Wrapper_Icon|AutoIt3Wrapper_Outfile|AutoIt3Wrapper_Outfile_Type|AutoIt3Wrapper_Plugin_Funcs|AutoIt3Wrapper_Res_Comment|AutoIt3Wrapper_Res_Description|AutoIt3Wrapper_Res_Field|AutoIt3Wrapper_Res_File_Add|AutoIt3Wrapper_Res_Fileversion|AutoIt3Wrapper_Res_FileVersion_AutoIncrement|AutoIt3Wrapper_Res_Icon_Add|AutoIt3Wrapper_Res_Language|AutoIt3Wrapper_Res_LegalCopyright|AutoIt3Wrapper_res_requestedExecutionLevel|AutoIt3Wrapper_Res_SaveSource|AutoIt3Wrapper_Run_After|AutoIt3Wrapper_Run_Au3check|AutoIt3Wrapper_Run_Before|AutoIt3Wrapper_Run_cvsWrapper|AutoIt3Wrapper_Run_Debug_Mode|AutoIt3Wrapper_Run_Obfuscator|AutoIt3Wrapper_Run_Tidy|AutoIt3Wrapper_Tidy_Stop_OnError|AutoIt3Wrapper_UseAnsi|AutoIt3Wrapper_UseUpx|AutoIt3Wrapper_UseX64|AutoIt3Wrapper_Version|EndRegion|forceref|Obfuscator_Ignore_Funcs|Obfuscator_Ignore_Variables|Obfuscator_Parameters|Region|Tidy_Parameters';\n    var atKeywords = 'AppDataCommonDir|AppDataDir|AutoItExe|AutoItPID|AutoItUnicode|AutoItVersion|AutoItX64|COM_EventObj|CommonFilesDir|Compiled|ComputerName|ComSpec|CR|CRLF|DesktopCommonDir|DesktopDepth|DesktopDir|DesktopHeight|DesktopRefresh|DesktopWidth|DocumentsCommonDir|error|exitCode|exitMethod|extended|FavoritesCommonDir|FavoritesDir|GUI_CtrlHandle|GUI_CtrlId|GUI_DragFile|GUI_DragId|GUI_DropId|GUI_WinHandle|HomeDrive|HomePath|HomeShare|HotKeyPressed|HOUR|InetGetActive|InetGetBytesRead|IPAddress1|IPAddress2|IPAddress3|IPAddress4|KBLayout|LF|LogonDNSDomain|LogonDomain|LogonServer|MDAY|MIN|MON|MyDocumentsDir|NumParams|OSBuild|OSLang|OSServicePack|OSTYPE|OSVersion|ProcessorArch|ProgramFilesDir|ProgramsCommonDir|ProgramsDir|ScriptDir|ScriptFullPath|ScriptLineNumber|ScriptName|SEC|StartMenuCommonDir|StartMenuDir|StartupCommonDir|StartupDir|SW_DISABLE|SW_ENABLE|SW_HIDE|SW_LOCK|SW_MAXIMIZE|SW_MINIMIZE|SW_RESTORE|SW_SHOW|SW_SHOWDEFAULT|SW_SHOWMAXIMIZED|SW_SHOWMINIMIZED|SW_SHOWMINNOACTIVE|SW_SHOWNA|SW_SHOWNOACTIVATE|SW_SHOWNORMAL|SW_UNLOCK|SystemDir|TAB|TempDir|TRAY_ID|TrayIconFlashing|TrayIconVisible|UserName|UserProfileDir|WDAY|WindowsDir|WorkingDir|YDAY|YEAR';\n    \n    this.$rules = { start: \n       [ { token: 'comment.line.ahk', regex: '(?:^| );.*$' },\n         { token: 'comment.block.ahk',\n           regex: '/\\\\*', push: \n            [ { token: 'comment.block.ahk', regex: '\\\\*/', next: 'pop' },\n              { defaultToken: 'comment.block.ahk' } ] },\n         { token: 'doc.comment.ahk',\n           regex: '#cs', push: \n            [ { token: 'doc.comment.ahk', regex: '#ce', next: 'pop' },\n              { defaultToken: 'doc.comment.ahk' } ] },\n         { token: 'keyword.command.ahk',\n           regex: '(?:\\\\b|^)(?:allowsamelinecomments|clipboardtimeout|commentflag|errorstdout|escapechar|hotkeyinterval|hotkeymodifiertimeout|hotstring|include|includeagain|installkeybdhook|installmousehook|keyhistory|ltrim|maxhotkeysperinterval|maxmem|maxthreads|maxthreadsbuffer|maxthreadsperhotkey|noenv|notrayicon|persistent|singleinstance|usehook|winactivateforce|autotrim|blockinput|click|clipwait|continue|control|controlclick|controlfocus|controlget|controlgetfocus|controlgetpos|controlgettext|controlmove|controlsend|controlsendraw|controlsettext|coordmode|critical|detecthiddentext|detecthiddenwindows|drive|driveget|drivespacefree|edit|endrepeat|envadd|envdiv|envget|envmult|envset|envsub|envupdate|exit|exitapp|fileappend|filecopy|filecopydir|filecreatedir|filecreateshortcut|filedelete|filegetattrib|filegetshortcut|filegetsize|filegettime|filegetversion|fileinstall|filemove|filemovedir|fileread|filereadline|filerecycle|filerecycleempty|fileremovedir|fileselectfile|fileselectfolder|filesetattrib|filesettime|formattime|getkeystate|gosub|goto|groupactivate|groupadd|groupclose|groupdeactivate|gui|guicontrol|guicontrolget|hideautoitwin|hotkey|ifequal|ifexist|ifgreater|ifgreaterorequal|ifinstring|ifless|iflessorequal|ifmsgbox|ifnotequal|ifnotexist|ifnotinstring|ifwinactive|ifwinexist|ifwinnotactive|ifwinnotexist|imagesearch|inidelete|iniread|iniwrite|input|inputbox|keyhistory|keywait|listhotkeys|listlines|listvars|menu|mouseclick|mouseclickdrag|mousegetpos|mousemove|msgbox|onexit|outputdebug|pause|pixelgetcolor|pixelsearch|postmessage|process|progress|random|regdelete|regread|regwrite|reload|repeat|run|runas|runwait|send|sendevent|sendinput|sendmode|sendplay|sendmessage|sendraw|setbatchlines|setcapslockstate|setcontroldelay|setdefaultmousespeed|setenv|setformat|setkeydelay|setmousedelay|setnumlockstate|setscrolllockstate|setstorecapslockmode|settimer|settitlematchmode|setwindelay|setworkingdir|shutdown|sleep|sort|soundbeep|soundget|soundgetwavevolume|soundplay|soundset|soundsetwavevolume|splashimage|splashtextoff|splashtexton|splitpath|statusbargettext|statusbarwait|stringcasesense|stringgetpos|stringleft|stringlen|stringlower|stringmid|stringreplace|stringright|stringsplit|stringtrimleft|stringtrimright|stringupper|suspend|sysget|thread|tooltip|transform|traytip|urldownloadtofile|while|winactivate|winactivatebottom|winclose|winget|wingetactivestats|wingetactivetitle|wingetclass|wingetpos|wingettext|wingettitle|winhide|winkill|winmaximize|winmenuselectitem|winminimize|winminimizeall|winminimizeallundo|winmove|winrestore|winset|winsettitle|winshow|winwait|winwaitactive|winwaitclose|winwaitnotactive)\\\\b',\n           caseInsensitive: true },\n         { token: 'keyword.control.ahk',\n           regex: '(?:\\\\b|^)(?:if|else|return|loop|break|for|while|global|local|byref)\\\\b',\n           caseInsensitive: true },\n         { token: 'support.function.ahk',\n           regex: '(?:\\\\b|^)(?:abs|acos|asc|asin|atan|ceil|chr|cos|dllcall|exp|fileexist|floor|getkeystate|il_add|il_create|il_destroy|instr|substr|isfunc|islabel|ln|log|lv_add|lv_delete|lv_deletecol|lv_getcount|lv_getnext|lv_gettext|lv_insert|lv_insertcol|lv_modify|lv_modifycol|lv_setimagelist|mod|onmessage|numget|numput|registercallback|regexmatch|regexreplace|round|sin|tan|sqrt|strlen|sb_seticon|sb_setparts|sb_settext|tv_add|tv_delete|tv_getchild|tv_getcount|tv_getnext|tv_get|tv_getparent|tv_getprev|tv_getselection|tv_gettext|tv_modify|varsetcapacity|winactive|winexist)\\\\b',\n           caseInsensitive: true },\n         { token: 'variable.predefined.ahk',\n           regex: '(?:\\\\b|^)(?:a_ahkpath|a_ahkversion|a_appdata|a_appdatacommon|a_autotrim|a_batchlines|a_caretx|a_carety|a_computername|a_controldelay|a_cursor|a_dd|a_ddd|a_dddd|a_defaultmousespeed|a_desktop|a_desktopcommon|a_detecthiddentext|a_detecthiddenwindows|a_endchar|a_eventinfo|a_exitreason|a_formatfloat|a_formatinteger|a_gui|a_guievent|a_guicontrol|a_guicontrolevent|a_guiheight|a_guiwidth|a_guix|a_guiy|a_hour|a_iconfile|a_iconhidden|a_iconnumber|a_icontip|a_index|a_ipaddress1|a_ipaddress2|a_ipaddress3|a_ipaddress4|a_isadmin|a_iscompiled|a_iscritical|a_ispaused|a_issuspended|a_keydelay|a_language|a_lasterror|a_linefile|a_linenumber|a_loopfield|a_loopfileattrib|a_loopfiledir|a_loopfileext|a_loopfilefullpath|a_loopfilelongpath|a_loopfilename|a_loopfileshortname|a_loopfileshortpath|a_loopfilesize|a_loopfilesizekb|a_loopfilesizemb|a_loopfiletimeaccessed|a_loopfiletimecreated|a_loopfiletimemodified|a_loopreadline|a_loopregkey|a_loopregname|a_loopregsubkey|a_loopregtimemodified|a_loopregtype|a_mday|a_min|a_mm|a_mmm|a_mmmm|a_mon|a_mousedelay|a_msec|a_mydocuments|a_now|a_nowutc|a_numbatchlines|a_ostype|a_osversion|a_priorhotkey|programfiles|a_programfiles|a_programs|a_programscommon|a_screenheight|a_screenwidth|a_scriptdir|a_scriptfullpath|a_scriptname|a_sec|a_space|a_startmenu|a_startmenucommon|a_startup|a_startupcommon|a_stringcasesense|a_tab|a_temp|a_thisfunc|a_thishotkey|a_thislabel|a_thismenu|a_thismenuitem|a_thismenuitempos|a_tickcount|a_timeidle|a_timeidlephysical|a_timesincepriorhotkey|a_timesincethishotkey|a_titlematchmode|a_titlematchmodespeed|a_username|a_wday|a_windelay|a_windir|a_workingdir|a_yday|a_year|a_yweek|a_yyyy|clipboard|clipboardall|comspec|errorlevel)\\\\b',\n           caseInsensitive: true },\n         { token: 'support.constant.ahk',\n           regex: '(?:\\\\b|^)(?:shift|lshift|rshift|alt|lalt|ralt|control|lcontrol|rcontrol|ctrl|lctrl|rctrl|lwin|rwin|appskey|altdown|altup|shiftdown|shiftup|ctrldown|ctrlup|lwindown|lwinup|rwindown|rwinup|lbutton|rbutton|mbutton|wheelup|wheelleft|wheelright|wheeldown|xbutton1|xbutton2|joy1|joy2|joy3|joy4|joy5|joy6|joy7|joy8|joy9|joy10|joy11|joy12|joy13|joy14|joy15|joy16|joy17|joy18|joy19|joy20|joy21|joy22|joy23|joy24|joy25|joy26|joy27|joy28|joy29|joy30|joy31|joy32|joyx|joyy|joyz|joyr|joyu|joyv|joypov|joyname|joybuttons|joyaxes|joyinfo|space|tab|enter|escape|esc|backspace|bs|delete|del|insert|ins|pgup|pgdn|home|end|up|down|left|right|printscreen|ctrlbreak|pause|scrolllock|capslock|numlock|numpad0|numpad1|numpad2|numpad3|numpad4|numpad5|numpad6|numpad7|numpad8|numpad9|numpadmult|numpadadd|numpadsub|numpaddiv|numpaddot|numpaddel|numpadins|numpadclear|numpadup|numpaddown|numpadleft|numpadright|numpadhome|numpadend|numpadpgup|numpadpgdn|numpadenter|f1|f2|f3|f4|f5|f6|f7|f8|f9|f10|f11|f12|f13|f14|f15|f16|f17|f18|f19|f20|f21|f22|f23|f24|browser_back|browser_forward|browser_refresh|browser_stop|browser_search|browser_favorites|browser_home|volume_mute|volume_down|volume_up|media_next|media_prev|media_stop|media_play_pause|launch_mail|launch_media|launch_app1|launch_app2)\\\\b',\n           caseInsensitive: true },\n         { token: 'variable.parameter',\n           regex: '(?:\\\\b|^)(?:pixel|mouse|screen|relative|rgb|ltrim|rtrim|join|low|belownormal|normal|abovenormal|high|realtime|ahk_id|ahk_pid|ahk_class|ahk_group|between|contains|in|is|integer|float|integerfast|floatfast|number|digit|xdigit|alpha|upper|lower|alnum|time|date|not|or|and|alwaysontop|topmost|top|bottom|transparent|transcolor|redraw|region|id|idlast|processname|minmax|controllist|count|list|capacity|statuscd|eject|lock|unlock|label|filesystem|label|setlabel|serial|type|status|static|seconds|minutes|hours|days|read|parse|logoff|close|error|single|tray|add|rename|check|uncheck|togglecheck|enable|disable|toggleenable|default|nodefault|standard|nostandard|color|delete|deleteall|icon|noicon|tip|click|show|mainwindow|nomainwindow|useerrorlevel|text|picture|pic|groupbox|button|checkbox|radio|dropdownlist|ddl|combobox|listbox|listview|datetime|monthcal|updown|slider|tab|tab2|statusbar|treeview|iconsmall|tile|report|sortdesc|nosort|nosorthdr|grid|hdr|autosize|range|xm|ym|ys|xs|xp|yp|font|resize|owner|submit|nohide|minimize|maximize|restore|noactivate|na|cancel|destroy|center|margin|maxsize|minsize|owndialogs|guiescape|guiclose|guisize|guicontextmenu|guidropfiles|tabstop|section|altsubmit|wrap|hscroll|vscroll|border|top|bottom|buttons|expand|first|imagelist|lines|wantctrla|wantf2|vis|visfirst|number|uppercase|lowercase|limit|password|multi|wantreturn|group|background|bold|italic|strike|underline|norm|backgroundtrans|theme|caption|delimiter|minimizebox|maximizebox|sysmenu|toolwindow|flash|style|exstyle|check3|checked|checkedgray|readonly|password|hidden|left|right|center|notab|section|move|focus|hide|choose|choosestring|text|pos|enabled|disabled|visible|lastfound|lastfoundexist|alttab|shiftalttab|alttabmenu|alttabandmenu|alttabmenudismiss|notimers|interrupt|priority|waitclose|blind|raw|unicode|deref|pow|bitnot|bitand|bitor|bitxor|bitshiftleft|bitshiftright|yes|no|ok|cancel|abort|retry|ignore|tryagain|on|off|all|hkey_local_machine|hkey_users|hkey_current_user|hkey_classes_root|hkey_current_config|hklm|hku|hkcu|hkcr|hkcc|reg_sz|reg_expand_sz|reg_multi_sz|reg_dword|reg_qword|reg_binary|reg_link|reg_resource_list|reg_full_resource_descriptor|reg_resource_requirements_list|reg_dword_big_endian)\\\\b',\n           caseInsensitive: true },\n         { keywordMap: {\"constant.language\": autoItKeywords}, regex: '\\\\w+\\\\b'},\n         { keywordMap: {\"variable.function\": atKeywords}, regex: '@\\\\w+\\\\b'},\n         { token : \"constant.numeric\", regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},\n         { token: 'keyword.operator.ahk',\n           regex: '=|==|<>|:=|<|>|\\\\*|\\\\/|\\\\+|:|\\\\?|\\\\-' },\n         { token: 'punctuation.ahk',\n           regex: '#|`|::|,|\\\\{|\\\\}|\\\\(|\\\\)|\\\\%' },\n         { token: \n            [ 'punctuation.quote.double',\n              'string.quoted.ahk',\n              'punctuation.quote.double' ],\n           regex: '(\")((?:[^\"]|\"\")*)(\")' },\n         { token: [ 'label.ahk', 'punctuation.definition.label.ahk' ],\n           regex: '^([^: ]+)(:)(?!:)' } ] };\n    \n    this.normalizeRules();\n};\n\nAutoHotKeyHighlightRules.metaData = { name: 'AutoHotKey',\n      scopeName: 'source.ahk',\n      fileTypes: [ 'ahk' ],\n      foldingStartMarker: '^\\\\s*/\\\\*|^(?![^{]*?;|[^{]*?/\\\\*(?!.*?\\\\*/.*?\\\\{)).*?\\\\{\\\\s*($|;|/\\\\*(?!.*?\\\\*/.*\\\\S))',\n      foldingStopMarker: '^\\\\s*\\\\*/|^\\\\s*\\\\}' };\n\n\noop.inherits(AutoHotKeyHighlightRules, TextHighlightRules);\n\nexports.AutoHotKeyHighlightRules = AutoHotKeyHighlightRules;\n});"
  },
  {
    "path": "lib/ace/mode/batchfile.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n *\n * Contributor(s):\n *\n *\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar BatchFileHighlightRules = require(\"./batchfile_highlight_rules\").BatchFileHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = BatchFileHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"::\";\n    this.blockComment = \"\";\n    this.$id = \"ace/mode/batchfile\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});"
  },
  {
    "path": "lib/ace/mode/batchfile_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/* This file was autogenerated from C:\\Users\\LED\\AppData\\Roaming\\Sublime Text 2\\Packages\\Batch File\\Batch File.tmLanguage (uuid: ) */\n/****************************************************************************************\n * IT MIGHT NOT BE PERFECT ...But it's a good start from an existing *.tmlanguage file. *\n * fileTypes                                                                            *\n ****************************************************************************************/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar BatchFileHighlightRules = function() {\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = { start: \n       [ { token: 'keyword.command.dosbatch',\n           regex: '\\\\b(?:append|assoc|at|attrib|break|cacls|cd|chcp|chdir|chkdsk|chkntfs|cls|cmd|color|comp|compact|convert|copy|date|del|dir|diskcomp|diskcopy|doskey|echo|endlocal|erase|fc|find|findstr|format|ftype|graftabl|help|keyb|label|md|mkdir|mode|more|move|path|pause|popd|print|prompt|pushd|rd|recover|ren|rename|replace|restore|rmdir|set|setlocal|shift|sort|start|subst|time|title|tree|type|ver|verify|vol|xcopy)\\\\b',\n           caseInsensitive: true },\n         { token: 'keyword.control.statement.dosbatch',\n           regex: '\\\\b(?:goto|call|exit)\\\\b',\n           caseInsensitive: true },\n         { token: 'keyword.control.conditional.if.dosbatch',\n           regex: '\\\\bif\\\\s+not\\\\s+(?:exist|defined|errorlevel|cmdextversion)\\\\b',\n           caseInsensitive: true },\n         { token: 'keyword.control.conditional.dosbatch',\n           regex: '\\\\b(?:if|else)\\\\b',\n           caseInsensitive: true },\n         { token: 'keyword.control.repeat.dosbatch',\n           regex: '\\\\bfor\\\\b',\n           caseInsensitive: true },\n         { token: 'keyword.operator.dosbatch',\n           regex: '\\\\b(?:EQU|NEQ|LSS|LEQ|GTR|GEQ)\\\\b' },\n         { token: ['doc.comment', 'comment'],\n           regex: '(?:^|\\\\b)(rem)($|\\\\s.*$)',\n           caseInsensitive: true },\n         { token: 'comment.line.colons.dosbatch',\n           regex: '::.*$' },\n         { include: 'variable' },\n         { token: 'punctuation.definition.string.begin.shell',\n           regex: '\"',\n           push: [ \n              { token: 'punctuation.definition.string.end.shell', regex: '\"', next: 'pop' },\n              { include: 'variable' },\n              { defaultToken: 'string.quoted.double.dosbatch' } ] },\n         { token: 'keyword.operator.pipe.dosbatch', regex: '[|]' },\n         { token: 'keyword.operator.redirect.shell',\n           regex: '&>|\\\\d*>&\\\\d*|\\\\d*(?:>>|>|<)|\\\\d*<&|\\\\d*<>' } ],\n        variable: [\n         { token: 'constant.numeric', regex: '%%\\\\w+|%[*\\\\d]|%\\\\w+%'},\n         { token: 'constant.numeric', regex: '%~\\\\d+'},\n         { token: ['markup.list', 'constant.other', 'markup.list'],\n            regex: '(%)(\\\\w+)(%?)' }]};\n    \n    this.normalizeRules();\n};\n\nBatchFileHighlightRules.metaData = { name: 'Batch File',\n      scopeName: 'source.dosbatch',\n      fileTypes: [ 'bat' ] };\n\n\noop.inherits(BatchFileHighlightRules, TextHighlightRules);\n\nexports.BatchFileHighlightRules = BatchFileHighlightRules;\n});"
  },
  {
    "path": "lib/ace/mode/behaviour/behaviour_test.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\nif (typeof process !== \"undefined\") {\n    require(\"amd-loader\");\n    require(\"../../test/mockdom\");\n}\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nrequire(\"../../multi_select\");\nvar assert = require(\"../../test/assertions\");\nvar Range = require(\"../../range\").Range;\nvar Editor = require(\"../../editor\").Editor;\nvar EditSession = require(\"../../edit_session\").EditSession;\nvar MockRenderer = require(\"../../test/mockrenderer\").MockRenderer;\nvar JavaScriptMode = require(\"../javascript\").Mode;\nvar RustMode = require(\"../rust\").Mode;\nvar XMLMode = require(\"../xml\").Mode;\nvar editor;\nvar exec = function(name, times, args) {\n    do {\n        editor.commands.exec(name, editor, args);\n    } while(times --> 1);\n};\nvar testRanges = function(str) {\n    assert.equal(editor.selection.getAllRanges() + \"\", str + \"\");\n};\n\nmodule.exports = {\n    \"test: cstyle\": function() {\n        function testValue(line) {\n            assert.equal(editor.getValue(), Array(4).join(line + \"\\n\"));\n        }\n        function testSelection(line, col, inc) {\n            editor.selection.rangeList.ranges.forEach(function(r) {\n                assert.range(r, line, col, line, col);\n                line += (inc || 1);\n            });\n        }\n        var doc = new EditSession([\n            \"\",\n            \"\",\n            \"\",\n            \"\"\n        ], new JavaScriptMode());\n        editor = new Editor(new MockRenderer(), doc);\n        editor.setOption(\"behavioursEnabled\", true);\n\n        editor.navigateFileStart();\n        exec(\"addCursorBelow\", 2);\n\n        exec(\"insertstring\", 1, \"if \");\n        \n        // pairing ( \n        exec(\"insertstring\", 1, \"(\");\n        testValue(\"if ()\");\n        testSelection(0, 4);\n        exec(\"insertstring\", 1, \")\");\n        testValue(\"if ()\");\n        testSelection(0, 5);\n        \n        // pairing [ \n        exec(\"gotoleft\", 1);\n        exec(\"insertstring\", 1, \"[\");\n        testValue(\"if ([])\");\n        testSelection(0, 5);\n        \n        exec(\"insertstring\", 1, \"]\");\n        testValue(\"if ([])\");\n        testSelection(0, 6);\n        \n        // test deletion\n        exec(\"gotoleft\", 1);\n        exec(\"backspace\", 1);\n        testValue(\"if ()\");\n        testSelection(0, 4);\n\n        exec(\"gotolineend\", 1);\n        exec(\"insertstring\", 1, \"{\");\n        testValue(\"if (){}\");\n        testSelection(0, 6);\n        \n        exec(\"insertstring\", 1, \"}\");\n        testValue(\"if (){}\");\n        testSelection(0, 7);\n        \n        exec(\"gotolinestart\", 1);\n        exec(\"insertstring\", 1, \"(\");\n        testValue(\"(if (){}\");\n        exec(\"backspace\", 1);\n        \n        editor.setValue(\"\");\n        exec(\"insertstring\", 1, \"{\");\n        assert.equal(editor.getValue(), \"{\");\n        exec(\"insertstring\", 1, \"\\n\");\n        assert.equal(editor.getValue(), \"{\\n    \\n}\");\n        \n        editor.setValue(\"\");\n        exec(\"insertstring\", 1, \"(\");\n        exec(\"insertstring\", 1, '\"');\n        exec(\"insertstring\", 1, '\"');\n        assert.equal(editor.getValue(), '(\"\")');\n        exec(\"backspace\", 1);\n        exec(\"insertstring\", 1, '\"');\n        assert.equal(editor.getValue(), '(\"\")');\n        \n        editor.setValue(\"('foo')\", 1);\n        exec(\"gotoleft\", 1);\n        exec(\"selectleft\", 1);\n        exec(\"selectMoreBefore\", 1);\n        exec(\"insertstring\", 1, \"'\");\n        assert.equal(editor.getValue(), \"('foo')\");\n        exec(\"selectleft\", 1);\n        exec(\"insertstring\", 1, '\"');\n        assert.equal(editor.getValue(), '(\"foo\")');\n        exec(\"selectleft\", 1);\n        exec(\"insertstring\", 1, '\"');\n        assert.equal(editor.getValue(), '(\"foo\")');\n        \n        editor.setValue(\"\", 1);\n        exec(\"selectleft\", 1);\n        exec(\"insertstring\", 1, '\"');\n        assert.equal(editor.getValue(), '\"\"');\n        exec(\"insertstring\", 1, '\\\\');\n        exec(\"insertstring\", 1, 'n');\n        exec(\"insertstring\", 1, '\"');\n        assert.equal(editor.getValue(), '\"\\\\n\"');\n        \n    },\n    \"test: xml\": function() {\n        editor = new Editor(new MockRenderer());\n        editor.setValue([\"<OuterTag>\",\n            \"    <SelfClosingTag />\"\n        ].join(\"\\n\"));\n        editor.session.setMode(new XMLMode);\n        exec(\"golinedown\", 1);\n        exec(\"gotolineend\", 1);\n        exec(\"insertstring\", 1, '\\n');\n        assert.equal(editor.session.getLine(2), \"    \");\n        exec(\"gotolineup\", 1);\n        exec(\"gotolineend\", 1);\n        exec(\"insertstring\", 1, '\\n');\n        assert.equal(editor.session.getLine(2), \"    \");\n        editor.session.setValue([\"<OuterTag\",\n            \"    <xyzrt\"\n        ].join(\"\\n\"));        \n        exec(\"golinedown\", 1);\n        exec(\"gotolineend\", 1);\n        exec(\"selectleft\", 3);\n        exec(\"insertstring\", 1, '>');\n        assert.equal(editor.session.getLine(1), \"    <xy></xy>\");\n    },\n    \"test: quotes\": function() {\n        editor = new Editor(new MockRenderer());\n        editor.session.setMode(new RustMode);\n        editor.setValue(\"\");\n        exec(\"insertstring\", 1, '\"');\n        exec(\"insertstring\", 1, 'a');\n        assert.equal(editor.getValue(), '\"a\"');\n        exec(\"backspace\", 2);\n        exec(\"insertstring\", 1, \"'\");\n        assert.equal(editor.getValue(), \"'\");\n        \n        editor.session.setMode(new JavaScriptMode);\n        editor.setValue(\"\");\n        exec(\"insertstring\", 1, '\"');\n        exec(\"insertstring\", 1, 'a');\n        assert.equal(editor.getValue(), '\"a\"');\n        exec(\"backspace\", 2);\n        exec(\"insertstring\", 1, \"'\");\n        assert.equal(editor.getValue(), \"''\");\n        exec(\"backspace\", 1);\n        exec(\"insertstring\", 1, '`');\n        exec(\"insertstring\", 1, 'b');\n        assert.equal(editor.getValue(), \"`b`\");\n    }\n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main) {\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n}\n"
  },
  {
    "path": "lib/ace/mode/behaviour/css.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    };\n                }\n                if (!line.substring(cursor.column).match(/^\\s*;/)) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';') {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                };\n            }\n        }\n    });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n"
  },
  {
    "path": "lib/ace/mode/behaviour/cstyle.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nvar SAFE_INSERT_IN_TOKENS =\n    [\"text\", \"paren.rparen\", \"punctuation.operator\"];\nvar SAFE_INSERT_BEFORE_TOKENS =\n    [\"text\", \"paren.rparen\", \"punctuation.operator\", \"comment\"];\n\nvar context;\nvar contextCache = {};\nvar defaultQuotes = {'\"' : '\"', \"'\" : \"'\"};\n\nvar initContext = function(editor) {\n    var id = -1;\n    if (editor.multiSelect) {\n        id = editor.selection.index;\n        if (contextCache.rangeCount != editor.multiSelect.rangeCount)\n            contextCache = {rangeCount: editor.multiSelect.rangeCount};\n    }\n    if (contextCache[id])\n        return context = contextCache[id];\n    context = contextCache[id] = {\n        autoInsertedBrackets: 0,\n        autoInsertedRow: -1,\n        autoInsertedLineEnd: \"\",\n        maybeInsertedBrackets: 0,\n        maybeInsertedRow: -1,\n        maybeInsertedLineStart: \"\",\n        maybeInsertedLineEnd: \"\"\n    };\n};\n\nvar getWrapped = function(selection, selected, opening, closing) {\n    var rowDiff = selection.end.row - selection.start.row;\n    return {\n        text: opening + selected + closing,\n        selection: [\n                0,\n                selection.start.column + 1,\n                rowDiff,\n                selection.end.column + (rowDiff ? 0 : 1)\n            ]\n    };\n};\n\nvar CstyleBehaviour = function(options) {\n    this.add(\"braces\", \"insertion\", function(state, action, editor, session, text) {\n        var cursor = editor.getCursorPosition();\n        var line = session.doc.getLine(cursor.row);\n        if (text == '{') {\n            initContext(editor);\n            var selection = editor.getSelectionRange();\n            var selected = session.doc.getTextRange(selection);\n            if (selected !== \"\" && selected !== \"{\" && editor.getWrapBehavioursEnabled()) {\n                return getWrapped(selection, selected, '{', '}');\n            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n                if (/[\\]\\}\\)]/.test(line[cursor.column]) || editor.inMultiSelectMode || options && options.braces) {\n                    CstyleBehaviour.recordAutoInsert(editor, session, \"}\");\n                    return {\n                        text: '{}',\n                        selection: [1, 1]\n                    };\n                } else {\n                    CstyleBehaviour.recordMaybeInsert(editor, session, \"{\");\n                    return {\n                        text: '{',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        } else if (text == '}') {\n            initContext(editor);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar == '}') {\n                var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});\n                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n                    CstyleBehaviour.popAutoInsertedClosing();\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        } else if (text == \"\\n\" || text == \"\\r\\n\") {\n            initContext(editor);\n            var closing = \"\";\n            if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {\n                closing = lang.stringRepeat(\"}\", context.maybeInsertedBrackets);\n                CstyleBehaviour.clearMaybeInsertedClosing();\n            }\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === '}') {\n                var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}');\n                if (!openBracePos)\n                     return null;\n                var next_indent = this.$getIndent(session.getLine(openBracePos.row));\n            } else if (closing) {\n                var next_indent = this.$getIndent(line);\n            } else {\n                CstyleBehaviour.clearMaybeInsertedClosing();\n                return;\n            }\n            var indent = next_indent + session.getTabString();\n\n            return {\n                text: '\\n' + indent + '\\n' + next_indent + closing,\n                selection: [1, indent.length, 1, indent.length]\n            };\n        } else {\n            CstyleBehaviour.clearMaybeInsertedClosing();\n        }\n    });\n\n    this.add(\"braces\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected == '{') {\n            initContext(editor);\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.end.column, range.end.column + 1);\n            if (rightChar == '}') {\n                range.end.column++;\n                return range;\n            } else {\n                context.maybeInsertedBrackets--;\n            }\n        }\n    });\n\n    this.add(\"parens\", \"insertion\", function(state, action, editor, session, text) {\n        if (text == '(') {\n            initContext(editor);\n            var selection = editor.getSelectionRange();\n            var selected = session.doc.getTextRange(selection);\n            if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n                return getWrapped(selection, selected, '(', ')');\n            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n                CstyleBehaviour.recordAutoInsert(editor, session, \")\");\n                return {\n                    text: '()',\n                    selection: [1, 1]\n                };\n            }\n        } else if (text == ')') {\n            initContext(editor);\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar == ')') {\n                var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});\n                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n                    CstyleBehaviour.popAutoInsertedClosing();\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"parens\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected == '(') {\n            initContext(editor);\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == ')') {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"brackets\", \"insertion\", function(state, action, editor, session, text) {\n        if (text == '[') {\n            initContext(editor);\n            var selection = editor.getSelectionRange();\n            var selected = session.doc.getTextRange(selection);\n            if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n                return getWrapped(selection, selected, '[', ']');\n            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n                CstyleBehaviour.recordAutoInsert(editor, session, \"]\");\n                return {\n                    text: '[]',\n                    selection: [1, 1]\n                };\n            }\n        } else if (text == ']') {\n            initContext(editor);\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar == ']') {\n                var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row});\n                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n                    CstyleBehaviour.popAutoInsertedClosing();\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"brackets\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected == '[') {\n            initContext(editor);\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == ']') {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"insertion\", function(state, action, editor, session, text) {\n        var quotes = session.$mode.$quotes || defaultQuotes;\n        if (text.length == 1 && quotes[text]) {\n            if (this.lineCommentStart && this.lineCommentStart.indexOf(text) != -1) \n                return;\n            initContext(editor);\n            var quote = text;\n            var selection = editor.getSelectionRange();\n            var selected = session.doc.getTextRange(selection);\n            if (selected !== \"\" && (selected.length != 1 || !quotes[selected]) && editor.getWrapBehavioursEnabled()) {\n                return getWrapped(selection, selected, quote, quote);\n            } else if (!selected) {\n                var cursor = editor.getCursorPosition();\n                var line = session.doc.getLine(cursor.row);\n                var leftChar = line.substring(cursor.column-1, cursor.column);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                \n                var token = session.getTokenAt(cursor.row, cursor.column);\n                var rightToken = session.getTokenAt(cursor.row, cursor.column + 1);\n                // We're escaped.\n                if (leftChar == \"\\\\\" && token && /escape/.test(token.type))\n                    return null;\n                \n                var stringBefore = token && /string|escape/.test(token.type);\n                var stringAfter = !rightToken || /string|escape/.test(rightToken.type);\n                \n                var pair;\n                if (rightChar == quote) {\n                    pair = stringBefore !== stringAfter;\n                    if (pair && /string\\.end/.test(rightToken.type))\n                        pair = false;\n                } else {\n                    if (stringBefore && !stringAfter)\n                        return null; // wrap string with different quote\n                    if (stringBefore && stringAfter)\n                        return null; // do not pair quotes inside strings\n                    var wordRe = session.$mode.tokenRe;\n                    wordRe.lastIndex = 0;\n                    var isWordBefore = wordRe.test(leftChar);\n                    wordRe.lastIndex = 0;\n                    var isWordAfter = wordRe.test(leftChar);\n                    if (isWordBefore || isWordAfter)\n                        return null; // before or after alphanumeric\n                    if (rightChar && !/[\\s;,.})\\]\\\\]/.test(rightChar))\n                        return null; // there is rightChar and it isn't closing\n                    pair = true;\n                }\n                return {\n                    text: pair ? quote + quote : \"\",\n                    selection: [1,1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            initContext(editor);\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n};\n\n    \nCstyleBehaviour.isSaneInsertion = function(editor, session) {\n    var cursor = editor.getCursorPosition();\n    var iterator = new TokenIterator(session, cursor.row, cursor.column);\n    \n    // Don't insert in the middle of a keyword/identifier/lexical\n    if (!this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS)) {\n        // Look ahead in case we're at the end of a token\n        var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);\n        if (!this.$matchTokenType(iterator2.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS))\n            return false;\n    }\n    \n    // Only insert in front of whitespace/comments\n    iterator.stepForward();\n    return iterator.getCurrentTokenRow() !== cursor.row ||\n        this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_BEFORE_TOKENS);\n};\n\nCstyleBehaviour.$matchTokenType = function(token, types) {\n    return types.indexOf(token.type || token) > -1;\n};\n\nCstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {\n    var cursor = editor.getCursorPosition();\n    var line = session.doc.getLine(cursor.row);\n    // Reset previous state if text or context changed too much\n    if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0]))\n        context.autoInsertedBrackets = 0;\n    context.autoInsertedRow = cursor.row;\n    context.autoInsertedLineEnd = bracket + line.substr(cursor.column);\n    context.autoInsertedBrackets++;\n};\n\nCstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) {\n    var cursor = editor.getCursorPosition();\n    var line = session.doc.getLine(cursor.row);\n    if (!this.isMaybeInsertedClosing(cursor, line))\n        context.maybeInsertedBrackets = 0;\n    context.maybeInsertedRow = cursor.row;\n    context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;\n    context.maybeInsertedLineEnd = line.substr(cursor.column);\n    context.maybeInsertedBrackets++;\n};\n\nCstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {\n    return context.autoInsertedBrackets > 0 &&\n        cursor.row === context.autoInsertedRow &&\n        bracket === context.autoInsertedLineEnd[0] &&\n        line.substr(cursor.column) === context.autoInsertedLineEnd;\n};\n\nCstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) {\n    return context.maybeInsertedBrackets > 0 &&\n        cursor.row === context.maybeInsertedRow &&\n        line.substr(cursor.column) === context.maybeInsertedLineEnd &&\n        line.substr(0, cursor.column) == context.maybeInsertedLineStart;\n};\n\nCstyleBehaviour.popAutoInsertedClosing = function() {\n    context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1);\n    context.autoInsertedBrackets--;\n};\n\nCstyleBehaviour.clearMaybeInsertedClosing = function() {\n    if (context) {\n        context.maybeInsertedBrackets = 0;\n        context.maybeInsertedRow = -1;\n    }\n};\n\n\n\noop.inherits(CstyleBehaviour, Behaviour);\n\nexports.CstyleBehaviour = CstyleBehaviour;\n});\n"
  },
  {
    "path": "lib/ace/mode/behaviour/html.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar XmlBehaviour = require(\"../behaviour/xml\").XmlBehaviour;\n\nvar HtmlBehaviour = function () {\n\n    XmlBehaviour.call(this);\n\n};\n\noop.inherits(HtmlBehaviour, XmlBehaviour);\n\nexports.HtmlBehaviour = HtmlBehaviour;\n});\n"
  },
  {
    "path": "lib/ace/mode/behaviour/xml.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                // Ignore input and move right one if we're typing over the closing quote.\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n\n            // exit if we're not in a tag\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n\n            // exit if we're inside of a quoted attribute value\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var firstChar = token.value.charAt(0);\n                if (firstChar == '\"' || firstChar == \"'\") {\n                    var lastChar = token.value.charAt(token.value.length - 1);\n                    var tokenEnd = iterator.getCurrentTokenColumn() + token.value.length;\n                    if (tokenEnd > position.column || tokenEnd == position.column && firstChar != lastChar)\n                        return;\n                }\n            }\n\n            // find tag name\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n\n            // exit if the tag is ending\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                //get tag name\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n\n                //don't indent after closing tag\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n"
  },
  {
    "path": "lib/ace/mode/behaviour/xquery.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\ndefine(function(require, exports, module) {\n\"use strict\";\n\n  var oop = require(\"../../lib/oop\");\n  var Behaviour = require('../behaviour').Behaviour;\n  var CstyleBehaviour = require('./cstyle').CstyleBehaviour;\n  var XmlBehaviour = require(\"../behaviour/xml\").XmlBehaviour;\n  var TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nfunction hasType(token, type) {\n    var hasType = true;\n    var typeList = token.type.split('.');\n    var needleList = type.split('.');\n    needleList.forEach(function(needle){\n        if (typeList.indexOf(needle) == -1) {\n            hasType = false;\n            return false;\n        }\n    });\n    return hasType;\n}\n \n  var XQueryBehaviour = function () {\n      \n      this.inherit(CstyleBehaviour, [\"braces\", \"parens\", \"string_dquotes\"]); // Get string behaviour\n      this.inherit(XmlBehaviour); // Get xml behaviour\n      \n      this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken();\n            var atCursor = false;\n            var state = JSON.parse(state).pop();\n            if ((token && token.value === '>') || state !== \"StartTag\") return;\n            if (!token || !hasType(token, 'meta.tag') && !(hasType(token, 'text') && token.value.match('/'))){\n                do {\n                    token = iterator.stepBackward();\n                } while (token && (hasType(token, 'string') || hasType(token, 'keyword.operator') || hasType(token, 'entity.attribute-name') || hasType(token, 'text')));\n            } else {\n                atCursor = true;\n            }\n            var previous = iterator.stepBackward();\n            if (!token || !hasType(token, 'meta.tag') || (previous !== null && previous.value.match('/'))) {\n                return;\n            }\n            var tag = token.value.substring(1);\n            if (atCursor){\n                var tag = tag.substring(0, position.column - token.start);\n            }\n\n            return {\n               text: '>' + '</' + tag + '>',\n               selection: [1, 1]\n            };\n        }\n    });\n\n  };\n  oop.inherits(XQueryBehaviour, Behaviour);\n\n  exports.XQueryBehaviour = XQueryBehaviour;\n});\n"
  },
  {
    "path": "lib/ace/mode/behaviour.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar Behaviour = function() {\n   this.$behaviours = {};\n};\n\n(function () {\n\n    this.add = function (name, action, callback) {\n        switch (undefined) {\n          case this.$behaviours:\n              this.$behaviours = {};\n          case this.$behaviours[name]:\n              this.$behaviours[name] = {};\n        }\n        this.$behaviours[name][action] = callback;\n    };\n    \n    this.addBehaviours = function (behaviours) {\n        for (var key in behaviours) {\n            for (var action in behaviours[key]) {\n                this.add(key, action, behaviours[key][action]);\n            }\n        }\n    };\n    \n    this.remove = function (name) {\n        if (this.$behaviours && this.$behaviours[name]) {\n            delete this.$behaviours[name];\n        }\n    };\n    \n    this.inherit = function (mode, filter) {\n        if (typeof mode === \"function\") {\n            var behaviours = new mode().getBehaviours(filter);\n        } else {\n            var behaviours = mode.getBehaviours(filter);\n        }\n        this.addBehaviours(behaviours);\n    };\n    \n    this.getBehaviours = function (filter) {\n        if (!filter) {\n            return this.$behaviours;\n        } else {\n            var ret = {};\n            for (var i = 0; i < filter.length; i++) {\n                if (this.$behaviours[filter[i]]) {\n                    ret[filter[i]] = this.$behaviours[filter[i]];\n                }\n            }\n            return ret;\n        }\n    };\n\n}).call(Behaviour.prototype);\n\nexports.Behaviour = Behaviour;\n});\n"
  },
  {
    "path": "lib/ace/mode/bro.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar BroHighlightRules = require(\"./bro_highlight_rules\").BroHighlightRules;\n// TODO: pick appropriate fold mode\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = BroHighlightRules;\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    // this.lineCommentStart = \"\"#\"\";\n    // this.blockComment = {start: \"\"/*\"\", end: \"\"*/\"\"};\n    // Extra logic goes here.\n    this.$id = \"ace/mode/bro\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});"
  },
  {
    "path": "lib/ace/mode/bro_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/* This file was autogenerated from Bro.tmLanguage (uuid: ) */\n/****************************************************************************************\n * IT MIGHT NOT BE PERFECT ...But it's a good start from an existing *.tmlanguage file. *\n * fileTypes                                                                            *\n ****************************************************************************************/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar BroHighlightRules = function() {\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = {\n        start: [{\n            token: \"punctuation.definition.comment.bro\",\n            regex: /#/,\n            push: [{\n                token: \"comment.line.number-sign.bro\",\n                regex: /$/,\n                next: \"pop\"\n            }, {\n                defaultToken: \"comment.line.number-sign.bro\"\n            }]\n        }, {\n            token: \"keyword.control.bro\",\n            regex: /\\b(?:break|case|continue|else|for|if|return|switch|next|when|timeout|schedule)\\b/\n        }, {\n            token: [\n                \"meta.function.bro\",\n                \"meta.function.bro\",\n                \"storage.type.bro\",\n                \"meta.function.bro\",\n                \"entity.name.function.bro\",\n                \"meta.function.bro\"\n            ],\n            regex: /^(\\s*)(?:function|hook|event)(\\s*)(.*)(\\s*\\()(.*)(\\).*$)/\n        }, {\n            token: \"storage.type.bro\",\n            regex: /\\b(?:bool|enum|double|int|count|port|addr|subnet|any|file|interval|time|string|table|vector|set|record|pattern|hook)\\b/\n        }, {\n            token: \"storage.modifier.bro\",\n            regex: /\\b(?:global|const|redef|local|&(?:optional|rotate_interval|rotate_size|add_func|del_func|expire_func|expire_create|expire_read|expire_write|persistent|synchronized|encrypt|mergeable|priority|group|type_column|log|error_handler))\\b/\n        }, {\n            token: \"keyword.operator.bro\",\n            regex: /\\s*(?:\\||&&|(?:>|<|!)=?|==)\\s*|\\b!?in\\b/\n        }, {\n            token: \"constant.language.bro\",\n            regex: /\\b(?:T|F)\\b/\n        }, {\n            token: \"constant.numeric.bro\",\n            regex: /\\b(?:0(?:x|X)[0-9a-fA-F]*|(?:[0-9]+\\.?[0-9]*|\\.[0-9]+)(?:(?:e|E)(?:\\+|-)?[0-9]+)?)(?:\\/(?:tcp|udp|icmp)|\\s*(?:u?sec|min|hr|day)s?)?\\b/\n        }, {\n            token: \"punctuation.definition.string.begin.bro\",\n            regex: /\"/,\n            push: [{\n                token: \"punctuation.definition.string.end.bro\",\n                regex: /\"/,\n                next: \"pop\"\n            }, {\n                include: \"#string_escaped_char\"\n            }, {\n                include: \"#string_placeholder\"\n            }, {\n                defaultToken: \"string.quoted.double.bro\"\n            }]\n        }, {\n            token: \"punctuation.definition.string.begin.bro\",\n            regex: /\\//,\n            push: [{\n                token: \"punctuation.definition.string.end.bro\",\n                regex: /\\//,\n                next: \"pop\"\n            }, {\n                include: \"#string_escaped_char\"\n            }, {\n                include: \"#string_placeholder\"\n            }, {\n                defaultToken: \"string.quoted.regex.bro\"\n            }]\n        }, {\n            token: [\n                \"meta.preprocessor.bro.load\",\n                \"keyword.other.special-method.bro\"\n            ],\n            regex: /^(\\s*)(\\@load(?:-sigs)?)\\b/,\n            push: [{\n                token: [],\n                regex: /(?=\\#)|$/,\n                next: \"pop\"\n            }, {\n                defaultToken: \"meta.preprocessor.bro.load\"\n            }]\n        }, {\n            token: [\n                \"meta.preprocessor.bro.if\",\n                \"keyword.other.special-method.bro\",\n                \"meta.preprocessor.bro.if\"\n            ],\n            regex: /^(\\s*)(\\@endif|\\@if(?:n?def)?)(.*$)/,\n            push: [{\n                token: [],\n                regex: /$/,\n                next: \"pop\"\n            }, {\n                defaultToken: \"meta.preprocessor.bro.if\"\n            }]\n        }],\n        \"#disabled\": [{\n            token: \"text\",\n            regex: /^\\s*\\@if(?:n?def)?\\b.*$/,\n            push: [{\n                token: \"text\",\n                regex: /^\\s*\\@endif\\b.*$/,\n                next: \"pop\"\n            }, {\n                include: \"#disabled\"\n            }, {\n                include: \"#pragma-mark\"\n            }],\n            comment: \"eat nested preprocessor ifdefs\"\n        }],\n        \"#preprocessor-rule-other\": [{\n            token: [\n                \"text\",\n                \"meta.preprocessor.bro\",\n                \"meta.preprocessor.bro\",\n                \"text\"\n            ],\n            regex: /^(\\s*)(@if)((?:n?def)?)\\b(.*?)(?:(?=)|$)/,\n            push: [{\n                token: [\"text\", \"meta.preprocessor.bro\", \"text\"],\n                regex: /^(\\s*)(@endif)\\b(.*$)/,\n                next: \"pop\"\n            }, {\n                include: \"$base\"\n            }]\n        }],\n        \"#string_escaped_char\": [{\n            token: \"constant.character.escape.bro\",\n            regex: /\\\\(?:\\\\|[abefnprtv'\"?]|[0-3]\\d{,2}|[4-7]\\d?|x[a-fA-F0-9]{,2})/\n        }, {\n            token: \"invalid.illegal.unknown-escape.bro\",\n            regex: /\\\\./\n        }],\n        \"#string_placeholder\": [{\n            token: \"constant.other.placeholder.bro\",\n            regex: /%(?:\\d+\\$)?[#0\\- +']*[,;:_]?(?:-?\\d+|\\*(?:-?\\d+\\$)?)?(?:\\.(?:-?\\d+|\\*(?:-?\\d+\\$)?)?)?(?:hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)?[diouxXDOUeEfFgGaACcSspn%]/\n        }, {\n            token: \"invalid.illegal.placeholder.bro\",\n            regex: /%/\n        }]\n    };\n    \n    this.normalizeRules();\n};\n\nBroHighlightRules.metaData = {\n    fileTypes: [\"bro\"],\n    foldingStartMarker: \"^(\\\\@if(n?def)?)\",\n    foldingStopMarker: \"^\\\\@endif\",\n    keyEquivalent: \"@B\",\n    name: \"Bro\",\n    scopeName: \"source.bro\"\n};\n\n\noop.inherits(BroHighlightRules, TextHighlightRules);\n\nexports.BroHighlightRules = BroHighlightRules;\n});"
  },
  {
    "path": "lib/ace/mode/c9search.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar C9SearchHighlightRules = require(\"./c9search_highlight_rules\").C9SearchHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar C9StyleFoldMode = require(\"./folding/c9search\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = C9SearchHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.foldingRules = new C9StyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    \n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/c9search\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n"
  },
  {
    "path": "lib/ace/mode/c9search_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nfunction safeCreateRegexp(source, flag) {\n    try {\n        return new RegExp(source, flag);\n    } catch(e) {}\n}\n\nvar C9SearchHighlightRules = function() {\n\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n    this.$rules = {\n        \"start\" : [\n            {\n                tokenNames : [\"c9searchresults.constant.numeric\", \"c9searchresults.text\", \"c9searchresults.text\", \"c9searchresults.keyword\"],\n                regex : /(^\\s+[0-9]+)(:)(\\d*\\s?)([^\\r\\n]+)/,\n                onMatch : function(val, state, stack) {\n                    var values = this.splitRegex.exec(val);\n                    var types = this.tokenNames;\n                    var tokens = [{\n                        type: types[0],\n                        value: values[1]\n                    }, {\n                        type: types[1],\n                        value: values[2]\n                    }];\n                    \n                    if (values[3]) {\n                        if (values[3] == \" \")\n                            tokens[1] = { type: types[1], value: values[2] + \" \" };\n                        else\n                            tokens.push({ type: types[1], value: values[3] });\n                    }\n                    var regex = stack[1];\n                    var str = values[4];\n                    \n                    var m;\n                    var last = 0;\n                    if (regex && regex.exec) {\n                        regex.lastIndex = 0;\n                        while (m = regex.exec(str)) {\n                            var skipped = str.substring(last, m.index);\n                            last = regex.lastIndex;\n                            if (skipped)\n                                tokens.push({type: types[2], value: skipped});\n                            if (m[0])\n                                tokens.push({type: types[3], value: m[0]});\n                            else if (!skipped)\n                                break;\n                        }\n                    }\n                    if (last < str.length)\n                        tokens.push({type: types[2], value: str.substr(last)});\n                    return tokens;\n                }\n            },\n            {\n                regex : \"^Searching for [^\\\\r\\\\n]*$\",\n                onMatch: function(val, state, stack) {\n                    var parts = val.split(\"\\x01\");\n                    if (parts.length < 3)\n                        return \"text\";\n\n                    var options, search;\n                    \n                    var i = 0;\n                    var tokens = [{\n                        value: parts[i++] + \"'\",\n                        type: \"text\"\n                    }, {\n                        value: search = parts[i++],\n                        type: \"text\" // \"c9searchresults.keyword\"\n                    }, {\n                        value: \"'\" + parts[i++],\n                        type: \"text\"\n                    }];\n                    \n                    // replaced\n                    if (parts[2] !== \" in\") {\n                        tokens.push({\n                            value: \"'\" + parts[i++] + \"'\",\n                            type: \"text\"\n                        }, {\n                            value: parts[i++],\n                            type: \"text\"\n                        });\n                    }\n                    // path\n                    tokens.push({\n                        value: \" \" + parts[i++] + \" \",\n                        type: \"text\"\n                    });\n                    // options\n                    if (parts[i+1]) {\n                        options = parts[i+1];\n                        tokens.push({\n                            value: \"(\" + parts[i+1] + \")\",\n                            type: \"text\"\n                        });\n                        i += 1;\n                    } else {\n                        i -= 1;\n                    }\n                    while (i++ < parts.length) {\n                        parts[i] && tokens.push({\n                            value: parts[i],\n                            type: \"text\"\n                        });\n                    }\n                    \n                    if (search) {\n                        if (!/regex/.test(options))\n                            search = lang.escapeRegExp(search);\n                        if (/whole/.test(options))\n                            search = \"\\\\b\" + search + \"\\\\b\";\n                    }\n                    \n                    var regex = search && safeCreateRegexp(\n                        \"(\" + search + \")\",\n                        / sensitive/.test(options) ? \"g\" : \"ig\"\n                    );\n                    if (regex) {\n                        stack[0] = state;\n                        stack[1] = regex;\n                    }\n                    \n                    return tokens;\n                }\n            },\n            {\n                regex : \"^(?=Found \\\\d+ matches)\",\n                token : \"text\",\n                next : \"numbers\"\n            },\n            {\n                token : \"string\", // single line\n                regex : \"^\\\\S:?[^:]+\",\n                next : \"numbers\"\n            }\n        ],\n        numbers:[{\n            regex : \"\\\\d+\",\n            token : \"constant.numeric\"\n        }, {\n            regex : \"$\",\n            token : \"text\",\n            next : \"start\"\n        }]\n    };\n    this.normalizeRules();\n};\n\noop.inherits(C9SearchHighlightRules, TextHighlightRules);\n\nexports.C9SearchHighlightRules = C9SearchHighlightRules;\n\n});"
  },
  {
    "path": "lib/ace/mode/c_cpp.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar c_cppHighlightRules = require(\"./c_cpp_highlight_rules\").c_cppHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = c_cppHighlightRules;\n\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/c_cpp\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/c_cpp_highlight_rules.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\n// used by objective-c\nvar cFunctions = exports.cFunctions = \"\\\\b(?:hypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len))))\\\\b\";\n\nvar c_cppHighlightRules = function() {\n\n    var keywordControls = (\n        \"break|case|continue|default|do|else|for|goto|if|_Pragma|\" +\n        \"return|switch|while|catch|operator|try|throw|using\"\n    );\n    \n    var storageType = (\n        \"asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|\" +\n        \"_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void|\" +\n        \"class|wchar_t|template|char16_t|char32_t\"\n    );\n\n    var storageModifiers = (\n        \"const|extern|register|restrict|static|volatile|inline|private|\" +\n        \"protected|public|friend|explicit|virtual|export|mutable|typename|\" +\n        \"constexpr|new|delete|alignas|alignof|decltype|noexcept|thread_local\"\n    );\n\n    var keywordOperators = (\n        \"and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq\" +\n        \"const_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace\"\n    );\n\n    var builtinConstants = (\n        \"NULL|true|false|TRUE|FALSE|nullptr\"\n    );\n\n    var keywordMapper = this.$keywords = this.createKeywordMapper({\n        \"keyword.control\" : keywordControls,\n        \"storage.type\" : storageType,\n        \"storage.modifier\" : storageModifiers,\n        \"keyword.operator\" : keywordOperators,\n        \"variable.language\": \"this\",\n        \"constant.language\": builtinConstants\n    }, \"identifier\");\n\n    var identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\";\n    var escapeRe = /\\\\(?:['\"?\\\\abfnrtv]|[0-7]{1,3}|x[a-fA-F\\d]{2}|u[a-fA-F\\d]{4}U[a-fA-F\\d]{8}|.)/.source;\n    var formatRe = \"%\"\n          + /(\\d+\\$)?/.source // field (argument #)\n          + /[#0\\- +']*/.source // flags\n          + /[,;:_]?/.source // separator character (AltiVec)\n          + /((-?\\d+)|\\*(-?\\d+\\$)?)?/.source // minimum field width\n          + /(\\.((-?\\d+)|\\*(-?\\d+\\$)?)?)?/.source // precision\n          + /(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)?/.source // length modifier\n          + /(\\[[^\"\\]]+\\]|[diouxXDOUeEfFgGaACcSspn%])/.source; // conversion type\n          \n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = { \n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"//$\",\n                next : \"start\"\n            }, {\n                token : \"comment\",\n                regex : \"//\",\n                next : \"singleLineComment\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // character\n                regex : \"'(?:\" + escapeRe + \"|.)?'\"\n            }, {\n                token : \"string.start\",\n                regex : '\"', \n                stateName: \"qqstring\",\n                next: [\n                    { token: \"string\", regex: /\\\\\\s*$/, next: \"qqstring\" },\n                    { token: \"constant.language.escape\", regex: escapeRe },\n                    { token: \"constant.language.escape\", regex: formatRe },\n                    { token: \"string.end\", regex: '\"|$', next: \"start\" },\n                    { defaultToken: \"string\"}\n                ]\n            }, {\n                token : \"string.start\",\n                regex : 'R\"\\\\(', \n                stateName: \"rawString\",\n                next: [\n                    { token: \"string.end\", regex: '\\\\)\"', next: \"start\" },\n                    { defaultToken: \"string\"}\n                ]\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"\n            }, {\n                token : \"keyword\", // pre-compiler directives\n                regex : \"#\\\\s*(?:include|import|pragma|line|define|undef)\\\\b\",\n                next  : \"directive\"\n            }, {\n                token : \"keyword\", // special case pre-compiler directive\n                regex : \"#\\\\s*(?:endif|if|ifdef|else|elif|ifndef)\\\\b\"\n            }, {\n                token : \"support.function.C99.c\",\n                regex : cFunctions\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|<<=|>>=|>>>=|<>|&&|\\|\\||\\?:|[*%\\/+\\-&\\^|~!<>=]=?/\n            }, {\n              token : \"punctuation.operator\",\n              regex : \"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ],\n        \"singleLineComment\" : [\n            {\n                token : \"comment\",\n                regex : /\\\\$/,\n                next : \"singleLineComment\"\n            }, {\n                token : \"comment\",\n                regex : /$/,\n                next : \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ],\n        \"directive\" : [\n            {\n                token : \"constant.other.multiline\",\n                regex : /\\\\/\n            },\n            {\n                token : \"constant.other.multiline\",\n                regex : /.*\\\\/\n            },\n            {\n                token : \"constant.other\",\n                regex : \"\\\\s*<.+?>\",\n                next : \"start\"\n            },\n            {\n                token : \"constant.other\", // single line\n                regex : '\\\\s*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]',\n                next : \"start\"\n            }, \n            {\n                token : \"constant.other\", // single line\n                regex : \"\\\\s*['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\",\n                next : \"start\"\n            },\n            // \"\\\" implies multiline, while \"/\" implies comment\n            {\n                token : \"constant.other\",\n                regex : /[^\\\\\\/]+/,\n                next : \"start\"\n            }\n        ]\n    };\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n    this.normalizeRules();\n};\n\noop.inherits(c_cppHighlightRules, TextHighlightRules);\n\nexports.c_cppHighlightRules = c_cppHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/cirru.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2014, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n \ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CirruHighlightRules = require(\"./cirru_highlight_rules\").CirruHighlightRules;\nvar CoffeeFoldMode = require(\"./folding/coffee\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CirruHighlightRules;\n    this.foldingRules = new CoffeeFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"--\";\n    this.$id = \"ace/mode/cirru\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/cirru_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2014, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n \ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\n// see http://cirru.org for more about this language\nvar CirruHighlightRules = function() {\n    this.$rules = {\n        start: [{\n            token: 'constant.numeric',\n            regex: /[\\d\\.]+/\n        }, {\n            token: 'comment.line.double-dash',\n            regex: /--/,\n            next: 'comment'\n        }, {\n            token: 'storage.modifier',\n            regex: /\\(/\n        }, {\n            token: 'storage.modifier',\n            regex: /,/,\n            next: 'line'\n        }, {\n            token: 'support.function',\n            regex: /[^\\(\\)\"\\s]+/,\n            next: 'line'\n        }, {\n            token: 'string.quoted.double',\n            regex: /\"/,\n            next: 'string'\n        }, {\n            token: 'storage.modifier',\n            regex: /\\)/\n        }],\n        comment: [{\n            token: 'comment.line.double-dash',\n            regex: / +[^\\n]+/,\n            next: 'start'\n        }],\n        string: [{\n            token: 'string.quoted.double',\n            regex: /\"/,\n            next: 'line'\n        }, {\n            token: 'constant.character.escape',\n            regex: /\\\\/,\n            next: 'escape'\n        }, {\n            token: 'string.quoted.double',\n            regex: /[^\\\\\"]+/\n        }],\n        escape: [{\n            token: 'constant.character.escape',\n            regex: /./,\n            next: 'string'\n        }],\n        line: [{\n            token: 'constant.numeric',\n            regex: /[\\d\\.]+/\n        }, {\n            token: 'markup.raw',\n            regex: /^\\s*/,\n            next: 'start'\n        }, {\n            token: 'storage.modifier',\n            regex: /\\$/,\n            next: 'start'\n        }, {\n            token: 'variable.parameter',\n            regex: /[^\\(\\)\"\\s]+/\n        }, {\n            token: 'storage.modifier',\n            regex: /\\(/,\n            next: 'start'\n        }, {\n            token: 'storage.modifier',\n            regex: /\\)/\n        }, {\n            token: 'markup.raw',\n            regex: /^ */,\n            next: 'start'\n        }, {\n            token: 'string.quoted.double',\n            regex: /\"/,\n            next: 'string'\n        }]\n    };\n\n};\n\noop.inherits(CirruHighlightRules, TextHighlightRules);\n\nexports.CirruHighlightRules = CirruHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/clojure.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ClojureHighlightRules = require(\"./clojure_highlight_rules\").ClojureHighlightRules;\nvar MatchingParensOutdent = require(\"./matching_parens_outdent\").MatchingParensOutdent;\n\nvar Mode = function() {\n    this.HighlightRules = ClojureHighlightRules;\n    this.$outdent = new MatchingParensOutdent();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \";\";\n    this.minorIndentFunctions = [\"defn\", \"defn-\", \"defmacro\", \"def\", \"deftest\", \"testing\"];\n\n    this.$toIndent = function(str) {\n        return str.split('').map(function(ch) {\n            if (/\\s/.exec(ch)) {\n                return ch;\n            } else {\n                return ' ';\n            }\n        }).join('');\n    };\n\n    this.$calculateIndent = function(line, tab) {\n        var baseIndent = this.$getIndent(line);\n        var delta = 0;\n        var isParen, ch;\n        // Walk back from end of line, find matching braces\n        for (var i = line.length - 1; i >= 0; i--) {\n            ch = line[i];\n            if (ch === '(') {\n                delta--;\n                isParen = true;\n            } else if (ch === '(' || ch === '[' || ch === '{') {\n                delta--;\n                isParen = false;\n            } else if (ch === ')' || ch === ']' || ch === '}') {\n                delta++;\n            }\n            if (delta < 0) {\n                break;\n            }\n        }\n        if (delta < 0 && isParen) {\n            // Were more brackets opened than closed and was a ( left open?\n            i += 1;\n            var iBefore = i;\n            var fn = '';\n            while (true) {\n                ch = line[i];\n                if (ch === ' ' || ch === '\\t') {\n                    if(this.minorIndentFunctions.indexOf(fn) !== -1) {\n                        return this.$toIndent(line.substring(0, iBefore - 1) + tab);\n                    } else {\n                        return this.$toIndent(line.substring(0, i + 1));\n                    }\n                } else if (ch === undefined) {\n                    return this.$toIndent(line.substring(0, iBefore - 1) + tab);\n                }\n                fn += line[i];\n                i++;\n            }\n        } else if(delta < 0 && !isParen) {\n            // Were more brackets openend than closed and was it not a (?\n            return this.$toIndent(line.substring(0, i+1));\n        } else if(delta > 0) {\n            // Mere more brackets closed than opened? Outdent.\n            baseIndent = baseIndent.substring(0, baseIndent.length - tab.length);\n            return baseIndent;\n        } else {\n            // Were they nicely matched? Just indent like line before.\n            return baseIndent;\n        }\n    };\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$calculateIndent(line, tab);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/clojure\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/clojure_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\n\n\nvar ClojureHighlightRules = function() {\n\n    var builtinFunctions = (\n        '* *1 *2 *3 *agent* *allow-unresolved-vars* *assert* *clojure-version* ' +\n        '*command-line-args* *compile-files* *compile-path* *e *err* *file* ' +\n        '*flush-on-newline* *in* *macro-meta* *math-context* *ns* *out* ' +\n        '*print-dup* *print-length* *print-level* *print-meta* *print-readably* ' +\n        '*read-eval* *source-path* *use-context-classloader* ' +\n        '*warn-on-reflection* + - -> ->> .. / < <= = ' +\n        '== > &gt; >= &gt;= accessor aclone ' +\n        'add-classpath add-watch agent agent-errors aget alength alias all-ns ' +\n        'alter alter-meta! alter-var-root amap ancestors and apply areduce ' +\n        'array-map aset aset-boolean aset-byte aset-char aset-double aset-float ' +\n        'aset-int aset-long aset-short assert assoc assoc! assoc-in associative? ' +\n        'atom await await-for await1 bases bean bigdec bigint binding bit-and ' +\n        'bit-and-not bit-clear bit-flip bit-not bit-or bit-set bit-shift-left ' +\n        'bit-shift-right bit-test bit-xor boolean boolean-array booleans ' +\n        'bound-fn bound-fn* butlast byte byte-array bytes cast char char-array ' +\n        'char-escape-string char-name-string char? chars chunk chunk-append ' +\n        'chunk-buffer chunk-cons chunk-first chunk-next chunk-rest chunked-seq? ' +\n        'class class? clear-agent-errors clojure-version coll? comment commute ' +\n        'comp comparator compare compare-and-set! compile complement concat cond ' +\n        'condp conj conj! cons constantly construct-proxy contains? count ' +\n        'counted? create-ns create-struct cycle dec decimal? declare definline ' +\n        'defmacro defmethod defmulti defn defn- defonce defstruct delay delay? ' +\n        'deliver deref derive descendants destructure disj disj! dissoc dissoc! ' +\n        'distinct distinct? doall doc dorun doseq dosync dotimes doto double ' +\n        'double-array doubles drop drop-last drop-while empty empty? ensure ' +\n        'enumeration-seq eval even? every? false? ffirst file-seq filter find ' +\n        'find-doc find-ns find-var first float float-array float? floats flush ' +\n        'fn fn? fnext for force format future future-call future-cancel ' +\n        'future-cancelled? future-done? future? gen-class gen-interface gensym ' +\n        'get get-in get-method get-proxy-class get-thread-bindings get-validator ' +\n        'hash hash-map hash-set identical? identity if-let if-not ifn? import ' +\n        'in-ns inc init-proxy instance? int int-array integer? interleave intern ' +\n        'interpose into into-array ints io! isa? iterate iterator-seq juxt key ' +\n        'keys keyword keyword? last lazy-cat lazy-seq let letfn line-seq list ' +\n        'list* list? load load-file load-reader load-string loaded-libs locking ' +\n        'long long-array longs loop macroexpand macroexpand-1 make-array ' +\n        'make-hierarchy map map? mapcat max max-key memfn memoize merge ' +\n        'merge-with meta method-sig methods min min-key mod name namespace neg? ' +\n        'newline next nfirst nil? nnext not not-any? not-empty not-every? not= ' +\n        'ns ns-aliases ns-imports ns-interns ns-map ns-name ns-publics ' +\n        'ns-refers ns-resolve ns-unalias ns-unmap nth nthnext num number? odd? ' +\n        'or parents partial partition pcalls peek persistent! pmap pop pop! ' +\n        'pop-thread-bindings pos? pr pr-str prefer-method prefers ' +\n        'primitives-classnames print print-ctor print-doc print-dup print-method ' +\n        'print-namespace-doc print-simple print-special-doc print-str printf ' +\n        'println println-str prn prn-str promise proxy proxy-call-with-super ' +\n        'proxy-mappings proxy-name proxy-super push-thread-bindings pvalues quot ' +\n        'rand rand-int range ratio? rational? rationalize re-find re-groups ' +\n        're-matcher re-matches re-pattern re-seq read read-line read-string ' +\n        'reduce ref ref-history-count ref-max-history ref-min-history ref-set ' +\n        'refer refer-clojure release-pending-sends rem remove remove-method ' +\n        'remove-ns remove-watch repeat repeatedly replace replicate require ' +\n        'reset! reset-meta! resolve rest resultset-seq reverse reversible? rseq ' +\n        'rsubseq second select-keys send send-off seq seq? seque sequence ' +\n        'sequential? set set-validator! set? short short-array shorts ' +\n        'shutdown-agents slurp some sort sort-by sorted-map sorted-map-by ' +\n        'sorted-set sorted-set-by sorted? special-form-anchor special-symbol? ' +\n        'split-at split-with str stream? string? struct struct-map subs subseq ' +\n        'subvec supers swap! symbol symbol? sync syntax-symbol-anchor take ' +\n        'take-last take-nth take-while test the-ns time to-array to-array-2d ' +\n        'trampoline transient tree-seq true? type unchecked-add unchecked-dec ' +\n        'unchecked-divide unchecked-inc unchecked-multiply unchecked-negate ' +\n        'unchecked-remainder unchecked-subtract underive unquote ' +\n        'unquote-splicing update-in update-proxy use val vals var-get var-set ' +\n        'var? vary-meta vec vector vector? when when-first when-let when-not ' +\n        'while with-bindings with-bindings* with-in-str with-loading-context ' +\n        'with-local-vars with-meta with-open with-out-str with-precision xml-seq ' +\n        'zero? zipmap'\n    );\n\n    var keywords = ('throw try var ' +\n        'def do fn if let loop monitor-enter monitor-exit new quote recur set!'\n    );\n\n    var buildinConstants = (\"true false nil\");\n\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants,\n        \"support.function\": builtinFunctions\n    }, \"identifier\", false, \" \");\n\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \";.*$\"\n            }, {\n                token : \"keyword\", //parens\n                regex : \"[\\\\(|\\\\)]\"\n            }, {\n                token : \"keyword\", //lists\n                regex : \"[\\\\'\\\\(]\"\n            }, {\n                token : \"keyword\", //vectors\n                regex : \"[\\\\[|\\\\]]\"\n            }, {\n                token : \"keyword\", //sets and maps\n                regex : \"[\\\\{|\\\\}|\\\\#\\\\{|\\\\#\\\\}]\"\n            }, {\n                    token : \"keyword\", // ampersands\n                    regex : '[\\\\&]'\n            }, {\n                    token : \"keyword\", // metadata\n                    regex : '[\\\\#\\\\^\\\\{]'\n            }, {\n                    token : \"keyword\", // anonymous fn syntactic sugar\n                    regex : '[\\\\%]'\n            }, {\n                    token : \"keyword\", // deref reader macro\n                    regex : '[@]'\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token : \"constant.language\",\n                regex : '[!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+||=|!=|<=|>=|<>|<|>|!|&&]'\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$\\\\-]*\\\\b\"\n            }, {\n                token : \"string\", // single line\n                regex : '\"',\n                next: \"string\"\n            }, {\n                token : \"constant\", // symbol\n                regex : /:[^()\\[\\]{}'\"\\^%`,;\\s]+/\n            }, {\n                token : \"string.regexp\", //Regular Expressions\n                regex : '/#\"(?:\\\\.|(?:\\\\\")|[^\"\"\\n])*\"/g'\n            }\n\n        ],\n        \"string\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : \"\\\\\\\\.|\\\\\\\\$\"\n            }, {\n                token : \"string\",\n                regex : '[^\"\\\\\\\\]+'\n            }, {\n                token : \"string\",\n                regex : '\"',\n                next : \"start\"\n            }\n        ]\n    };\n};\n\noop.inherits(ClojureHighlightRules, TextHighlightRules);\n\nexports.ClojureHighlightRules = ClojureHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/cobol.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CobolHighlightRules = require(\"./cobol_highlight_rules\").CobolHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = CobolHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"*\";\n\n    this.$id = \"ace/mode/cobol\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n"
  },
  {
    "path": "lib/ace/mode/cobol_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar CobolHighlightRules = function() {\nvar keywords = \"ACCEPT|MERGE|SUM|ADD||MESSAGE|TABLE|ADVANCING|MODE|TAPE|\" +\n\"AFTER|MULTIPLY|TEST|ALL|NEGATIVE|TEXT|ALPHABET|NEXT|THAN|\" +\n\"ALSO|NO|THEN|ALTERNATE|NOT|THROUGH|AND|NUMBER|THRU|ANY|OCCURS|\" +\n\"TIME|ARE|OF|TO|AREA|OFF|TOP||ASCENDING|OMITTED|TRUE|ASSIGN|ON|TYPE|AT|OPEN|\" +\n\"UNIT|AUTHOR|OR|UNTIL|BEFORE|OTHER|UP|BLANK|OUTPUT|USE|BLOCK|PAGE|USING|BOTTOM|\" +\n\"PERFORM|VALUE|BY|PIC|VALUES|CALL|PICTURE|WHEN|CANCEL|PLUS|WITH|CD|POINTER|WRITE|\" +\n\"CHARACTER|POSITION||ZERO|CLOSE|POSITIVE|ZEROS|COLUMN|PROCEDURE|ZEROES|COMMA|PROGRAM|\" +\n\"COMMON|PROGRAM-ID|COMMUNICATION|QUOTE|COMP|RANDOM|COMPUTE|READ|CONTAINS|RECEIVE|CONFIGURATION|\" +\n\"RECORD|CONTINUE|REDEFINES|CONTROL|REFERENCE|COPY|REMAINDER|COUNT|REPLACE|DATA|REPORT|DATE|RESERVE|\" +\n\"DAY|RESET|DELETE|RETURN|DESTINATION|REWIND|DISABLE|REWRITE|DISPLAY|RIGHT|DIVIDE|RUN|DOWN|SAME|\" +\n\"ELSE|SEARCH|ENABLE|SECTION|END|SELECT|ENVIRONMENT|SENTENCE|EQUAL|SET|ERROR|SIGN|EXIT|SEQUENTIAL|\" +\n\"EXTERNAL|SIZE|FLASE|SORT|FILE|SOURCE|LENGTH|SPACE|LESS|STANDARD|LIMIT|START|LINE|STOP|LOCK|STRING|LOW-VALUE|SUBTRACT\";\n\n    var builtinConstants = (\n        \"true|false|null\"\n    );\n\n    var builtinFunctions = (\n        \"count|min|max|avg|sum|rank|now|coalesce|main\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": builtinFunctions,\n        \"keyword\": keywords,\n        \"constant.language\": builtinConstants\n    }, \"identifier\", true);\n\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment\",\n            regex : \"\\\\*.*$\"\n        }, {\n            token : \"string\",           // \" string\n            regex : '\".*?\"'\n        }, {\n            token : \"string\",           // ' string\n            regex : \"'.*?'\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|%|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[\\\\(]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\)]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+\"\n        } ]\n    };\n};\n\noop.inherits(CobolHighlightRules, TextHighlightRules);\n\nexports.CobolHighlightRules = CobolHighlightRules;\n});"
  },
  {
    "path": "lib/ace/mode/coffee/coffee.js",
    "content": "define(function(require, exports, module) {\nfunction define(f) { module.exports = f() }; define.amd = {};\n/**\n * CoffeeScript Compiler v1.9.3\n * http://coffeescript.org\n *\n * Copyright 2011, Jeremy Ashkenas\n * Released under the MIT License\n */\n(function(root){var CoffeeScript=function(){function _dereq_(e){return _dereq_[e]}return _dereq_[\"./helpers\"]=function(){var e={},t={exports:e};return function(){var t,n,i,r,s,o;e.starts=function(e,t,n){return t===e.substr(n,t.length)},e.ends=function(e,t,n){var i;return i=t.length,t===e.substr(e.length-i-(n||0),i)},e.repeat=s=function(e,t){var n;for(n=\"\";t>0;)1&t&&(n+=e),t>>>=1,e+=e;return n},e.compact=function(e){var t,n,i,r;for(r=[],t=0,i=e.length;i>t;t++)n=e[t],n&&r.push(n);return r},e.count=function(e,t){var n,i;if(n=i=0,!t.length)return 1/0;for(;i=1+e.indexOf(t,i);)n++;return n},e.merge=function(e,t){return n(n({},e),t)},n=e.extend=function(e,t){var n,i;for(n in t)i=t[n],e[n]=i;return e},e.flatten=i=function(e){var t,n,r,s;for(n=[],r=0,s=e.length;s>r;r++)t=e[r],t instanceof Array?n=n.concat(i(t)):n.push(t);return n},e.del=function(e,t){var n;return n=e[t],delete e[t],n},e.some=null!=(r=Array.prototype.some)?r:function(e){var t,n,i;for(n=0,i=this.length;i>n;n++)if(t=this[n],e(t))return!0;return!1},e.invertLiterate=function(e){var t,n,i;return i=!0,n=function(){var n,r,s,o;for(s=e.split(\"\\n\"),o=[],n=0,r=s.length;r>n;n++)t=s[n],i&&/^([ ]{4}|[ ]{0,3}\\t)/.test(t)?o.push(t):(i=/^\\s*$/.test(t))?o.push(t):o.push(\"# \"+t);return o}(),n.join(\"\\n\")},t=function(e,t){return t?{first_line:e.first_line,first_column:e.first_column,last_line:t.last_line,last_column:t.last_column}:e},e.addLocationDataFn=function(e,n){return function(i){return\"object\"==typeof i&&i.updateLocationDataIfMissing&&i.updateLocationDataIfMissing(t(e,n)),i}},e.locationDataToString=function(e){var t;return\"2\"in e&&\"first_line\"in e[2]?t=e[2]:\"first_line\"in e&&(t=e),t?t.first_line+1+\":\"+(t.first_column+1)+\"-\"+(t.last_line+1+\":\"+(t.last_column+1)):\"No location data\"},e.baseFileName=function(e,t,n){var i,r;return null==t&&(t=!1),null==n&&(n=!1),r=n?/\\\\|\\//:/\\//,i=e.split(r),e=i[i.length-1],t&&e.indexOf(\".\")>=0?(i=e.split(\".\"),i.pop(),\"coffee\"===i[i.length-1]&&i.length>1&&i.pop(),i.join(\".\")):e},e.isCoffee=function(e){return/\\.((lit)?coffee|coffee\\.md)$/.test(e)},e.isLiterate=function(e){return/\\.(litcoffee|coffee\\.md)$/.test(e)},e.throwSyntaxError=function(e,t){var n;throw n=new SyntaxError(e),n.location=t,n.toString=o,n.stack=\"\"+n,n},e.updateSyntaxError=function(e,t,n){return e.toString===o&&(e.code||(e.code=t),e.filename||(e.filename=n),e.stack=\"\"+e),e},o=function(){var e,t,n,i,r,o,a,c,h,l,u,p,d,f,m;return this.code&&this.location?(u=this.location,a=u.first_line,o=u.first_column,h=u.last_line,c=u.last_column,null==h&&(h=a),null==c&&(c=o),r=this.filename||\"[stdin]\",e=this.code.split(\"\\n\")[a],m=o,i=a===h?c+1:e.length,l=e.slice(0,m).replace(/[^\\s]/g,\" \")+s(\"^\",i-m),\"undefined\"!=typeof process&&null!==process&&(n=(null!=(p=process.stdout)?p.isTTY:void 0)&&!(null!=(d=process.env)?d.NODE_DISABLE_COLORS:void 0)),(null!=(f=this.colorful)?f:n)&&(t=function(e){return\"\u001b[1;31m\"+e+\"\u001b[0m\"},e=e.slice(0,m)+t(e.slice(m,i))+e.slice(i),l=t(l)),r+\":\"+(a+1)+\":\"+(o+1)+\": error: \"+this.message+\"\\n\"+e+\"\\n\"+l):Error.prototype.toString.call(this)},e.nameWhitespaceCharacter=function(e){switch(e){case\" \":return\"space\";case\"\\n\":return\"newline\";case\"\\r\":return\"carriage return\";case\"\t\":return\"tab\";default:return e}}}.call(this),t.exports}(),_dereq_[\"./rewriter\"]=function(){var e={},t={exports:e};return function(){var t,n,i,r,s,o,a,c,h,l,u,p,d,f,m,g,v,y,b,k=[].indexOf||function(e){for(var t=0,n=this.length;n>t;t++)if(t in this&&this[t]===e)return t;return-1},w=[].slice;for(f=function(e,t,n){var i;return i=[e,t],i.generated=!0,n&&(i.origin=n),i},e.Rewriter=function(){function e(){}return e.prototype.rewrite=function(e){return this.tokens=e,this.removeLeadingNewlines(),this.closeOpenCalls(),this.closeOpenIndexes(),this.normalizeLines(),this.tagPostfixConditionals(),this.addImplicitBracesAndParens(),this.addLocationDataToGeneratedTokens(),this.tokens},e.prototype.scanTokens=function(e){var t,n,i;for(i=this.tokens,t=0;n=i[t];)t+=e.call(this,n,t,i);return!0},e.prototype.detectEnd=function(e,t,n){var i,o,a,c,h;for(h=this.tokens,i=0;c=h[e];){if(0===i&&t.call(this,c,e))return n.call(this,c,e);if(!c||0>i)return n.call(this,c,e-1);o=c[0],k.call(s,o)>=0?i+=1:(a=c[0],k.call(r,a)>=0&&(i-=1)),e+=1}return e-1},e.prototype.removeLeadingNewlines=function(){var e,t,n,i,r;for(i=this.tokens,e=t=0,n=i.length;n>t&&(r=i[e][0],\"TERMINATOR\"===r);e=++t);return e?this.tokens.splice(0,e):void 0},e.prototype.closeOpenCalls=function(){var e,t;return t=function(e,t){var n;return\")\"===(n=e[0])||\"CALL_END\"===n||\"OUTDENT\"===e[0]&&\")\"===this.tag(t-1)},e=function(e,t){return this.tokens[\"OUTDENT\"===e[0]?t-1:t][0]=\"CALL_END\"},this.scanTokens(function(n,i){return\"CALL_START\"===n[0]&&this.detectEnd(i+1,t,e),1})},e.prototype.closeOpenIndexes=function(){var e,t;return t=function(e){var t;return\"]\"===(t=e[0])||\"INDEX_END\"===t},e=function(e){return e[0]=\"INDEX_END\"},this.scanTokens(function(n,i){return\"INDEX_START\"===n[0]&&this.detectEnd(i+1,t,e),1})},e.prototype.indexOfTag=function(){var e,t,n,i,r,s,o;for(t=arguments[0],r=arguments.length>=2?w.call(arguments,1):[],e=0,n=i=0,s=r.length;s>=0?s>i:i>s;n=s>=0?++i:--i){for(;\"HERECOMMENT\"===this.tag(t+n+e);)e+=2;if(null!=r[n]&&(\"string\"==typeof r[n]&&(r[n]=[r[n]]),o=this.tag(t+n+e),0>k.call(r[n],o)))return-1}return t+n+e-1},e.prototype.looksObjectish=function(e){var t,n;return this.indexOfTag(e,\"@\",null,\":\")>-1||this.indexOfTag(e,null,\":\")>-1?!0:(n=this.indexOfTag(e,s),n>-1&&(t=null,this.detectEnd(n+1,function(e){var t;return t=e[0],k.call(r,t)>=0},function(e,n){return t=n}),\":\"===this.tag(t+1))?!0:!1)},e.prototype.findTagsBackwards=function(e,t){var n,i,o,a,c,h,l;for(n=[];e>=0&&(n.length||(a=this.tag(e),0>k.call(t,a)&&(c=this.tag(e),0>k.call(s,c)||this.tokens[e].generated)&&(h=this.tag(e),0>k.call(u,h))));)i=this.tag(e),k.call(r,i)>=0&&n.push(this.tag(e)),o=this.tag(e),k.call(s,o)>=0&&n.length&&n.pop(),e-=1;return l=this.tag(e),k.call(t,l)>=0},e.prototype.addImplicitBracesAndParens=function(){var e,t;return e=[],t=null,this.scanTokens(function(i,l,p){var d,m,g,v,y,b,w,T,C,E,F,N,L,x,S,D,R,A,I,_,O,$,j,M,B,V,P,U;if(U=i[0],F=(N=l>0?p[l-1]:[])[0],C=(p.length-1>l?p[l+1]:[])[0],j=function(){return e[e.length-1]},M=l,g=function(e){return l-M+e},v=function(){var e,t;return null!=(e=j())?null!=(t=e[2])?t.ours:void 0:void 0},y=function(){var e;return v()&&\"(\"===(null!=(e=j())?e[0]:void 0)},w=function(){var e;return v()&&\"{\"===(null!=(e=j())?e[0]:void 0)},b=function(){var e;return v&&\"CONTROL\"===(null!=(e=j())?e[0]:void 0)},B=function(t){var n;return n=null!=t?t:l,e.push([\"(\",n,{ours:!0}]),p.splice(n,0,f(\"CALL_START\",\"(\")),null==t?l+=1:void 0},d=function(){return e.pop(),p.splice(l,0,f(\"CALL_END\",\")\",[\"\",\"end of input\",i[2]])),l+=1},V=function(t,n){var r,s;return null==n&&(n=!0),r=null!=t?t:l,e.push([\"{\",r,{sameLine:!0,startsLine:n,ours:!0}]),s=new String(\"{\"),s.generated=!0,p.splice(r,0,f(\"{\",s,i)),null==t?l+=1:void 0},m=function(t){return t=null!=t?t:l,e.pop(),p.splice(t,0,f(\"}\",\"}\",i)),l+=1},y()&&(\"IF\"===U||\"TRY\"===U||\"FINALLY\"===U||\"CATCH\"===U||\"CLASS\"===U||\"SWITCH\"===U))return e.push([\"CONTROL\",l,{ours:!0}]),g(1);if(\"INDENT\"===U&&v()){if(\"=>\"!==F&&\"->\"!==F&&\"[\"!==F&&\"(\"!==F&&\",\"!==F&&\"{\"!==F&&\"TRY\"!==F&&\"ELSE\"!==F&&\"=\"!==F)for(;y();)d();return b()&&e.pop(),e.push([U,l]),g(1)}if(k.call(s,U)>=0)return e.push([U,l]),g(1);if(k.call(r,U)>=0){for(;v();)y()?d():w()?m():e.pop();t=e.pop()}if((k.call(c,U)>=0&&i.spaced||\"?\"===U&&l>0&&!p[l-1].spaced)&&(k.call(o,C)>=0||k.call(h,C)>=0&&!(null!=(L=p[l+1])?L.spaced:void 0)&&!(null!=(x=p[l+1])?x.newLine:void 0)))return\"?\"===U&&(U=i[0]=\"FUNC_EXIST\"),B(l+1),g(2);if(k.call(c,U)>=0&&this.indexOfTag(l+1,\"INDENT\")>-1&&this.looksObjectish(l+2)&&!this.findTagsBackwards(l,[\"CLASS\",\"EXTENDS\",\"IF\",\"CATCH\",\"SWITCH\",\"LEADING_WHEN\",\"FOR\",\"WHILE\",\"UNTIL\"]))return B(l+1),e.push([\"INDENT\",l+2]),g(3);if(\":\"===U){for(I=function(){var e;switch(!1){case e=this.tag(l-1),0>k.call(r,e):return t[1];case\"@\"!==this.tag(l-2):return l-2;default:return l-1}}.call(this);\"HERECOMMENT\"===this.tag(I-2);)I-=2;return this.insideForDeclaration=\"FOR\"===C,P=0===I||(S=this.tag(I-1),k.call(u,S)>=0)||p[I-1].newLine,j()&&(D=j(),$=D[0],O=D[1],(\"{\"===$||\"INDENT\"===$&&\"{\"===this.tag(O-1))&&(P||\",\"===this.tag(I-1)||\"{\"===this.tag(I-1)))?g(1):(V(I,!!P),g(2))}if(w()&&k.call(u,U)>=0&&(j()[2].sameLine=!1),T=\"OUTDENT\"===F||N.newLine,k.call(a,U)>=0||k.call(n,U)>=0&&T)for(;v();)if(R=j(),$=R[0],O=R[1],A=R[2],_=A.sameLine,P=A.startsLine,y()&&\",\"!==F)d();else if(w()&&!this.insideForDeclaration&&_&&\"TERMINATOR\"!==U&&\":\"!==F)m();else{if(!w()||\"TERMINATOR\"!==U||\",\"===F||P&&this.looksObjectish(l+1))break;if(\"HERECOMMENT\"===C)return g(1);m()}if(!(\",\"!==U||this.looksObjectish(l+1)||!w()||this.insideForDeclaration||\"TERMINATOR\"===C&&this.looksObjectish(l+2)))for(E=\"OUTDENT\"===C?1:0;w();)m(l+E);return g(1)})},e.prototype.addLocationDataToGeneratedTokens=function(){return this.scanTokens(function(e,t,n){var i,r,s,o,a,c;return e[2]?1:e.generated||e.explicit?(\"{\"===e[0]&&(s=null!=(a=n[t+1])?a[2]:void 0)?(r=s.first_line,i=s.first_column):(o=null!=(c=n[t-1])?c[2]:void 0)?(r=o.last_line,i=o.last_column):r=i=0,e[2]={first_line:r,first_column:i,last_line:r,last_column:i},1):1})},e.prototype.normalizeLines=function(){var e,t,r,s,o;return o=r=s=null,t=function(e,t){var r,s,a,c;return\";\"!==e[1]&&(r=e[0],k.call(p,r)>=0)&&!(\"TERMINATOR\"===e[0]&&(s=this.tag(t+1),k.call(i,s)>=0))&&!(\"ELSE\"===e[0]&&\"THEN\"!==o)&&!!(\"CATCH\"!==(a=e[0])&&\"FINALLY\"!==a||\"->\"!==o&&\"=>\"!==o)||(c=e[0],k.call(n,c)>=0&&this.tokens[t-1].newLine)},e=function(e,t){return this.tokens.splice(\",\"===this.tag(t-1)?t-1:t,0,s)},this.scanTokens(function(n,a,c){var h,l,u,p,f,m;if(m=n[0],\"TERMINATOR\"===m){if(\"ELSE\"===this.tag(a+1)&&\"OUTDENT\"!==this.tag(a-1))return c.splice.apply(c,[a,1].concat(w.call(this.indentation()))),1;if(u=this.tag(a+1),k.call(i,u)>=0)return c.splice(a,1),0}if(\"CATCH\"===m)for(h=l=1;2>=l;h=++l)if(\"OUTDENT\"===(p=this.tag(a+h))||\"TERMINATOR\"===p||\"FINALLY\"===p)return c.splice.apply(c,[a+h,0].concat(w.call(this.indentation()))),2+h;return k.call(d,m)>=0&&\"INDENT\"!==this.tag(a+1)&&(\"ELSE\"!==m||\"IF\"!==this.tag(a+1))?(o=m,f=this.indentation(c[a]),r=f[0],s=f[1],\"THEN\"===o&&(r.fromThen=!0),c.splice(a+1,0,r),this.detectEnd(a+2,t,e),\"THEN\"===m&&c.splice(a,1),1):1})},e.prototype.tagPostfixConditionals=function(){var e,t,n;return n=null,t=function(e,t){var n,i;return i=e[0],n=this.tokens[t-1][0],\"TERMINATOR\"===i||\"INDENT\"===i&&0>k.call(d,n)},e=function(e){return\"INDENT\"!==e[0]||e.generated&&!e.fromThen?n[0]=\"POST_\"+n[0]:void 0},this.scanTokens(function(i,r){return\"IF\"!==i[0]?1:(n=i,this.detectEnd(r+1,t,e),1)})},e.prototype.indentation=function(e){var t,n;return t=[\"INDENT\",2],n=[\"OUTDENT\",2],e?(t.generated=n.generated=!0,t.origin=n.origin=e):t.explicit=n.explicit=!0,[t,n]},e.prototype.generate=f,e.prototype.tag=function(e){var t;return null!=(t=this.tokens[e])?t[0]:void 0},e}(),t=[[\"(\",\")\"],[\"[\",\"]\"],[\"{\",\"}\"],[\"INDENT\",\"OUTDENT\"],[\"CALL_START\",\"CALL_END\"],[\"PARAM_START\",\"PARAM_END\"],[\"INDEX_START\",\"INDEX_END\"],[\"STRING_START\",\"STRING_END\"],[\"REGEX_START\",\"REGEX_END\"]],e.INVERSES=l={},s=[],r=[],m=0,v=t.length;v>m;m++)y=t[m],g=y[0],b=y[1],s.push(l[b]=g),r.push(l[g]=b);i=[\"CATCH\",\"THEN\",\"ELSE\",\"FINALLY\"].concat(r),c=[\"IDENTIFIER\",\"SUPER\",\")\",\"CALL_END\",\"]\",\"INDEX_END\",\"@\",\"THIS\"],o=[\"IDENTIFIER\",\"NUMBER\",\"STRING\",\"STRING_START\",\"JS\",\"REGEX\",\"REGEX_START\",\"NEW\",\"PARAM_START\",\"CLASS\",\"IF\",\"TRY\",\"SWITCH\",\"THIS\",\"BOOL\",\"NULL\",\"UNDEFINED\",\"UNARY\",\"YIELD\",\"UNARY_MATH\",\"SUPER\",\"THROW\",\"@\",\"->\",\"=>\",\"[\",\"(\",\"{\",\"--\",\"++\"],h=[\"+\",\"-\"],a=[\"POST_IF\",\"FOR\",\"WHILE\",\"UNTIL\",\"WHEN\",\"BY\",\"LOOP\",\"TERMINATOR\"],d=[\"ELSE\",\"->\",\"=>\",\"TRY\",\"FINALLY\",\"THEN\"],p=[\"TERMINATOR\",\"CATCH\",\"FINALLY\",\"ELSE\",\"OUTDENT\",\"LEADING_WHEN\"],u=[\"TERMINATOR\",\"INDENT\",\"OUTDENT\"],n=[\".\",\"?.\",\"::\",\"?::\"]}.call(this),t.exports}(),_dereq_[\"./lexer\"]=function(){var e={},t={exports:e};return function(){var t,n,i,r,s,o,a,c,h,l,u,p,d,f,m,g,v,y,b,k,w,T,C,E,F,N,L,x,S,D,R,A,I,_,O,$,j,M,B,V,P,U,G,H,q,X,W,Y,K,z,J,Q,Z,et,tt,nt,it,rt,st,ot,at,ct,ht,lt,ut=[].indexOf||function(e){for(var t=0,n=this.length;n>t;t++)if(t in this&&this[t]===e)return t;return-1};ot=_dereq_(\"./rewriter\"),P=ot.Rewriter,w=ot.INVERSES,at=_dereq_(\"./helpers\"),nt=at.count,ht=at.starts,tt=at.compact,ct=at.repeat,it=at.invertLiterate,st=at.locationDataToString,lt=at.throwSyntaxError,e.Lexer=S=function(){function e(){}return e.prototype.tokenize=function(e,t){var n,i,r,s;for(null==t&&(t={}),this.literate=t.literate,this.indent=0,this.baseIndent=0,this.indebt=0,this.outdebt=0,this.indents=[],this.ends=[],this.tokens=[],this.chunkLine=t.line||0,this.chunkColumn=t.column||0,e=this.clean(e),r=0;this.chunk=e.slice(r);)if(n=this.identifierToken()||this.commentToken()||this.whitespaceToken()||this.lineToken()||this.stringToken()||this.numberToken()||this.regexToken()||this.jsToken()||this.literalToken(),s=this.getLineAndColumnFromChunk(n),this.chunkLine=s[0],this.chunkColumn=s[1],r+=n,t.untilBalanced&&0===this.ends.length)return{tokens:this.tokens,index:r};return this.closeIndentation(),(i=this.ends.pop())&&this.error(\"missing \"+i.tag,i.origin[2]),t.rewrite===!1?this.tokens:(new P).rewrite(this.tokens)},e.prototype.clean=function(e){return e.charCodeAt(0)===t&&(e=e.slice(1)),e=e.replace(/\\r/g,\"\").replace(z,\"\"),et.test(e)&&(e=\"\\n\"+e,this.chunkLine--),this.literate&&(e=it(e)),e},e.prototype.identifierToken=function(){var e,t,n,i,r,c,h,l,u,p,d,f,m,g,y,b;return(l=v.exec(this.chunk))?(h=l[0],r=l[1],t=l[2],c=r.length,u=void 0,\"own\"===r&&\"FOR\"===this.tag()?(this.token(\"OWN\",r),r.length):\"from\"===r&&\"YIELD\"===this.tag()?(this.token(\"FROM\",r),r.length):(d=this.tokens,p=d[d.length-1],i=t||null!=p&&(\".\"===(f=p[0])||\"?.\"===f||\"::\"===f||\"?::\"===f||!p.spaced&&\"@\"===p[0]),y=\"IDENTIFIER\",!i&&(ut.call(E,r)>=0||ut.call(a,r)>=0)&&(y=r.toUpperCase(),\"WHEN\"===y&&(m=this.tag(),ut.call(N,m)>=0)?y=\"LEADING_WHEN\":\"FOR\"===y?this.seenFor=!0:\"UNLESS\"===y?y=\"IF\":ut.call(J,y)>=0?y=\"UNARY\":ut.call(B,y)>=0&&(\"INSTANCEOF\"!==y&&this.seenFor?(y=\"FOR\"+y,this.seenFor=!1):(y=\"RELATION\",\"!\"===this.value()&&(u=this.tokens.pop(),r=\"!\"+r)))),ut.call(C,r)>=0&&(i?(y=\"IDENTIFIER\",r=new String(r),r.reserved=!0):ut.call(V,r)>=0&&this.error(\"reserved word '\"+r+\"'\",{length:r.length})),i||(ut.call(s,r)>=0&&(e=r,r=o[r]),y=function(){switch(r){case\"!\":return\"UNARY\";case\"==\":case\"!=\":return\"COMPARE\";case\"&&\":case\"||\":return\"LOGIC\";case\"true\":case\"false\":return\"BOOL\";case\"break\":case\"continue\":return\"STATEMENT\";default:return y}}()),b=this.token(y,r,0,c),e&&(b.origin=[y,e,b[2]]),b.variable=!i,u&&(g=[u[2].first_line,u[2].first_column],b[2].first_line=g[0],b[2].first_column=g[1]),t&&(n=h.lastIndexOf(\":\"),this.token(\":\",\":\",n,t.length)),h.length)):0},e.prototype.numberToken=function(){var e,t,n,i,r;return(n=I.exec(this.chunk))?(i=n[0],t=i.length,/^0[BOX]/.test(i)?this.error(\"radix prefix in '\"+i+\"' must be lowercase\",{offset:1}):/E/.test(i)&&!/^0x/.test(i)?this.error(\"exponential notation in '\"+i+\"' must be indicated with a lowercase 'e'\",{offset:i.indexOf(\"E\")}):/^0\\d*[89]/.test(i)?this.error(\"decimal literal '\"+i+\"' must not be prefixed with '0'\",{length:t}):/^0\\d+/.test(i)&&this.error(\"octal literal '\"+i+\"' must be prefixed with '0o'\",{length:t}),(r=/^0o([0-7]+)/.exec(i))&&(i=\"0x\"+parseInt(r[1],8).toString(16)),(e=/^0b([01]+)/.exec(i))&&(i=\"0x\"+parseInt(e[1],2).toString(16)),this.token(\"NUMBER\",i,0,t),t):0},e.prototype.stringToken=function(){var e,t,n,i,r,s,o,a,c,h,l,u,m,g,v,y;if(l=(Y.exec(this.chunk)||[])[0],!l)return 0;if(g=function(){switch(l){case\"'\":return W;case'\"':return q;case\"'''\":return f;case'\"\"\"':return p}}(),s=3===l.length,u=this.matchWithInterpolations(g,l),y=u.tokens,r=u.index,e=y.length-1,n=l.charAt(0),s){for(a=null,i=function(){var e,t,n;for(n=[],o=e=0,t=y.length;t>e;o=++e)v=y[o],\"NEOSTRING\"===v[0]&&n.push(v[1]);return n}().join(\"#{}\");h=d.exec(i);)t=h[1],(null===a||(m=t.length)>0&&a.length>m)&&(a=t);a&&(c=RegExp(\"^\"+a,\"gm\")),this.mergeInterpolationTokens(y,{delimiter:n},function(t){return function(n,i){return n=t.formatString(n),0===i&&(n=n.replace(F,\"\")),i===e&&(n=n.replace(K,\"\")),c&&(n=n.replace(c,\"\")),n}}(this))}else this.mergeInterpolationTokens(y,{delimiter:n},function(t){return function(n,i){return n=t.formatString(n),n=n.replace(G,function(t,r){return 0===i&&0===r||i===e&&r+t.length===n.length?\"\":\" \"})}}(this));return r},e.prototype.commentToken=function(){var e,t,n;return(n=this.chunk.match(c))?(e=n[0],t=n[1],t&&((n=u.exec(e))&&this.error(\"block comments cannot contain \"+n[0],{offset:n.index,length:n[0].length}),t.indexOf(\"\\n\")>=0&&(t=t.replace(RegExp(\"\\\\n\"+ct(\" \",this.indent),\"g\"),\"\\n\")),this.token(\"HERECOMMENT\",t,0,e.length)),e.length):0},e.prototype.jsToken=function(){var e,t;return\"`\"===this.chunk.charAt(0)&&(e=T.exec(this.chunk))?(this.token(\"JS\",(t=e[0]).slice(1,-1),0,t.length),t.length):0},e.prototype.regexToken=function(){var e,t,n,r,s,o,a,c,h,l,u,p,d;switch(!1){case!(o=M.exec(this.chunk)):this.error(\"regular expressions cannot begin with \"+o[2],{offset:o.index+o[1].length});break;case!(o=this.matchWithInterpolations(m,\"///\")):d=o.tokens,s=o.index;break;case!(o=$.exec(this.chunk)):if(p=o[0],e=o[1],t=o[2],this.validateEscapes(e,{isRegex:!0,offsetInChunk:1}),s=p.length,h=this.tokens,c=h[h.length-1],c)if(c.spaced&&(l=c[0],ut.call(i,l)>=0)){if(!t||O.test(p))return 0}else if(u=c[0],ut.call(A,u)>=0)return 0;t||this.error(\"missing / (unclosed regex)\");break;default:return 0}switch(r=j.exec(this.chunk.slice(s))[0],n=s+r.length,a=this.makeToken(\"REGEX\",null,0,n),!1){case!!Z.test(r):this.error(\"invalid regular expression flags \"+r,{offset:s,length:r.length});break;case!(p||1===d.length):null==e&&(e=this.formatHeregex(d[0][1])),this.token(\"REGEX\",\"\"+this.makeDelimitedLiteral(e,{delimiter:\"/\"})+r,0,n,a);break;default:this.token(\"REGEX_START\",\"(\",0,0,a),this.token(\"IDENTIFIER\",\"RegExp\",0,0),this.token(\"CALL_START\",\"(\",0,0),this.mergeInterpolationTokens(d,{delimiter:'\"',\"double\":!0},this.formatHeregex),r&&(this.token(\",\",\",\",s,0),this.token(\"STRING\",'\"'+r+'\"',s,r.length)),this.token(\")\",\")\",n,0),this.token(\"REGEX_END\",\")\",n,0)}return n},e.prototype.lineToken=function(){var e,t,n,i,r;if(!(n=R.exec(this.chunk)))return 0;if(t=n[0],this.seenFor=!1,r=t.length-1-t.lastIndexOf(\"\\n\"),i=this.unfinished(),r-this.indebt===this.indent)return i?this.suppressNewlines():this.newlineToken(0),t.length;if(r>this.indent){if(i)return this.indebt=r-this.indent,this.suppressNewlines(),t.length;if(!this.tokens.length)return this.baseIndent=this.indent=r,t.length;e=r-this.indent+this.outdebt,this.token(\"INDENT\",e,t.length-r,r),this.indents.push(e),this.ends.push({tag:\"OUTDENT\"}),this.outdebt=this.indebt=0,this.indent=r}else this.baseIndent>r?this.error(\"missing indentation\",{offset:t.length}):(this.indebt=0,this.outdentToken(this.indent-r,i,t.length));return t.length},e.prototype.outdentToken=function(e,t,n){var i,r,s,o;for(i=this.indent-e;e>0;)s=this.indents[this.indents.length-1],s?s===this.outdebt?(e-=this.outdebt,this.outdebt=0):this.outdebt>s?(this.outdebt-=s,e-=s):(r=this.indents.pop()+this.outdebt,n&&(o=this.chunk[n],ut.call(y,o)>=0)&&(i-=r-e,e=r),this.outdebt=0,this.pair(\"OUTDENT\"),this.token(\"OUTDENT\",e,0,n),e-=r):e=0;for(r&&(this.outdebt-=e);\";\"===this.value();)this.tokens.pop();return\"TERMINATOR\"===this.tag()||t||this.token(\"TERMINATOR\",\"\\n\",n,0),this.indent=i,this},e.prototype.whitespaceToken=function(){var e,t,n,i;return(e=et.exec(this.chunk))||(t=\"\\n\"===this.chunk.charAt(0))?(i=this.tokens,n=i[i.length-1],n&&(n[e?\"spaced\":\"newLine\"]=!0),e?e[0].length:0):0},e.prototype.newlineToken=function(e){for(;\";\"===this.value();)this.tokens.pop();return\"TERMINATOR\"!==this.tag()&&this.token(\"TERMINATOR\",\"\\n\",e,0),this},e.prototype.suppressNewlines=function(){return\"\\\\\"===this.value()&&this.tokens.pop(),this},e.prototype.literalToken=function(){var e,t,n,s,o,a,c,u,p,d;if((e=_.exec(this.chunk))?(d=e[0],r.test(d)&&this.tagParameters()):d=this.chunk.charAt(0),u=d,n=this.tokens,t=n[n.length-1],\"=\"===d&&t&&(!t[1].reserved&&(s=t[1],ut.call(C,s)>=0)&&(t.origin&&(t=t.origin),this.error(\"reserved word '\"+t[1]+\"' can't be assigned\",t[2])),\"||\"===(o=t[1])||\"&&\"===o))return t[0]=\"COMPOUND_ASSIGN\",t[1]+=\"=\",d.length;if(\";\"===d)this.seenFor=!1,u=\"TERMINATOR\";else if(ut.call(D,d)>=0)u=\"MATH\";else if(ut.call(h,d)>=0)u=\"COMPARE\";else if(ut.call(l,d)>=0)u=\"COMPOUND_ASSIGN\";else if(ut.call(J,d)>=0)u=\"UNARY\";else if(ut.call(Q,d)>=0)u=\"UNARY_MATH\";else if(ut.call(U,d)>=0)u=\"SHIFT\";else if(ut.call(x,d)>=0||\"?\"===d&&(null!=t?t.spaced:void 0))u=\"LOGIC\";else if(t&&!t.spaced)if(\"(\"===d&&(a=t[0],ut.call(i,a)>=0))\"?\"===t[0]&&(t[0]=\"FUNC_EXIST\"),u=\"CALL_START\";else if(\"[\"===d&&(c=t[0],ut.call(b,c)>=0))switch(u=\"INDEX_START\",t[0]){case\"?\":t[0]=\"INDEX_SOAK\"}switch(p=this.makeToken(u,d),d){case\"(\":case\"{\":case\"[\":this.ends.push({tag:w[d],origin:p});break;case\")\":case\"}\":case\"]\":this.pair(d)}return this.tokens.push(p),d.length},e.prototype.tagParameters=function(){var e,t,n,i;if(\")\"!==this.tag())return this;for(t=[],i=this.tokens,e=i.length,i[--e][0]=\"PARAM_END\";n=i[--e];)switch(n[0]){case\")\":t.push(n);break;case\"(\":case\"CALL_START\":if(!t.length)return\"(\"===n[0]?(n[0]=\"PARAM_START\",this):this;t.pop()}return this},e.prototype.closeIndentation=function(){return this.outdentToken(this.indent)},e.prototype.matchWithInterpolations=function(t,n){var i,r,s,o,a,c,h,l,u,p,d,f,m,g,v;if(v=[],l=n.length,this.chunk.slice(0,l)!==n)return null;for(m=this.chunk.slice(l);;){if(g=t.exec(m)[0],this.validateEscapes(g,{isRegex:\"/\"===n.charAt(0),offsetInChunk:l}),v.push(this.makeToken(\"NEOSTRING\",g,l)),m=m.slice(g.length),l+=g.length,\"#{\"!==m.slice(0,2))break;p=this.getLineAndColumnFromChunk(l+1),c=p[0],r=p[1],d=(new e).tokenize(m.slice(1),{line:c,column:r,untilBalanced:!0}),h=d.tokens,o=d.index,o+=1,u=h[0],i=h[h.length-1],u[0]=u[1]=\"(\",i[0]=i[1]=\")\",i.origin=[\"\",\"end of interpolation\",i[2]],\"TERMINATOR\"===(null!=(f=h[1])?f[0]:void 0)&&h.splice(1,1),v.push([\"TOKENS\",h]),m=m.slice(o),l+=o}return m.slice(0,n.length)!==n&&this.error(\"missing \"+n,{length:n.length}),s=v[0],a=v[v.length-1],s[2].first_column-=n.length,a[2].last_column+=n.length,0===a[1].length&&(a[2].last_column-=1),{tokens:v,index:l+n.length}},e.prototype.mergeInterpolationTokens=function(e,t,n){var i,r,s,o,a,c,h,l,u,p,d,f,m,g,v,y;for(e.length>1&&(u=this.token(\"STRING_START\",\"(\",0,0)),s=this.tokens.length,o=a=0,h=e.length;h>a;o=++a){switch(g=e[o],m=g[0],y=g[1],m){case\"TOKENS\":if(2===y.length)continue;l=y[0],v=y;break;case\"NEOSTRING\":if(i=n(g[1],o),0===i.length){if(0!==o)continue;r=this.tokens.length}2===o&&null!=r&&this.tokens.splice(r,2),g[0]=\"STRING\",g[1]=this.makeDelimitedLiteral(i,t),l=g,v=[g]}this.tokens.length>s&&(p=this.token(\"+\",\"+\"),p[2]={first_line:l[2].first_line,first_column:l[2].first_column,last_line:l[2].first_line,last_column:l[2].first_column}),(d=this.tokens).push.apply(d,v)}return u?(c=e[e.length-1],u.origin=[\"STRING\",null,{first_line:u[2].first_line,first_column:u[2].first_column,last_line:c[2].last_line,last_column:c[2].last_column}],f=this.token(\"STRING_END\",\")\"),f[2]={first_line:c[2].last_line,first_column:c[2].last_column,last_line:c[2].last_line,last_column:c[2].last_column}):void 0},e.prototype.pair=function(e){var t,n,i,r,s;return i=this.ends,n=i[i.length-1],e!==(s=null!=n?n.tag:void 0)?(\"OUTDENT\"!==s&&this.error(\"unmatched \"+e),r=this.indents,t=r[r.length-1],this.outdentToken(t,!0),this.pair(e)):this.ends.pop()},e.prototype.getLineAndColumnFromChunk=function(e){var t,n,i,r,s;return 0===e?[this.chunkLine,this.chunkColumn]:(s=e>=this.chunk.length?this.chunk:this.chunk.slice(0,+(e-1)+1||9e9),i=nt(s,\"\\n\"),t=this.chunkColumn,i>0?(r=s.split(\"\\n\"),n=r[r.length-1],t=n.length):t+=s.length,[this.chunkLine+i,t])},e.prototype.makeToken=function(e,t,n,i){var r,s,o,a,c;return null==n&&(n=0),null==i&&(i=t.length),s={},o=this.getLineAndColumnFromChunk(n),s.first_line=o[0],s.first_column=o[1],r=Math.max(0,i-1),a=this.getLineAndColumnFromChunk(n+r),s.last_line=a[0],s.last_column=a[1],c=[e,t,s]},e.prototype.token=function(e,t,n,i,r){var s;return s=this.makeToken(e,t,n,i),r&&(s.origin=r),this.tokens.push(s),s},e.prototype.tag=function(){var e,t;return e=this.tokens,t=e[e.length-1],null!=t?t[0]:void 0},e.prototype.value=function(){var e,t;return e=this.tokens,t=e[e.length-1],null!=t?t[1]:void 0},e.prototype.unfinished=function(){var e;return L.test(this.chunk)||\"\\\\\"===(e=this.tag())||\".\"===e||\"?.\"===e||\"?::\"===e||\"UNARY\"===e||\"MATH\"===e||\"UNARY_MATH\"===e||\"+\"===e||\"-\"===e||\"YIELD\"===e||\"**\"===e||\"SHIFT\"===e||\"RELATION\"===e||\"COMPARE\"===e||\"LOGIC\"===e||\"THROW\"===e||\"EXTENDS\"===e},e.prototype.formatString=function(e){return e.replace(X,\"$1\")},e.prototype.formatHeregex=function(e){return e.replace(g,\"$1$2\")},e.prototype.validateEscapes=function(e,t){var n,i,r,s,o,a,c,h;return null==t&&(t={}),s=k.exec(e),!s||(s[0],n=s[1],a=s[2],i=s[3],h=s[4],t.isRegex&&a&&\"0\"!==a.charAt(0))?void 0:(o=a?\"octal escape sequences are not allowed\":\"invalid escape sequence\",r=\"\\\\\"+(a||i||h),this.error(o+\" \"+r,{offset:(null!=(c=t.offsetInChunk)?c:0)+s.index+n.length,length:r.length}))},e.prototype.makeDelimitedLiteral=function(e,t){var n;return null==t&&(t={}),\"\"===e&&\"/\"===t.delimiter&&(e=\"(?:)\"),n=RegExp(\"(\\\\\\\\\\\\\\\\)|(\\\\\\\\0(?=[1-7]))|\\\\\\\\?(\"+t.delimiter+\")|\\\\\\\\?(?:(\\\\n)|(\\\\r)|(\\\\u2028)|(\\\\u2029))|(\\\\\\\\.)\",\"g\"),e=e.replace(n,function(e,n,i,r,s,o,a,c,h){switch(!1){case!n:return t.double?n+n:n;case!i:return\"\\\\x00\";case!r:return\"\\\\\"+r;case!s:return\"\\\\n\";case!o:return\"\\\\r\";case!a:return\"\\\\u2028\";case!c:return\"\\\\u2029\";case!h:return t.double?\"\\\\\"+h:h}}),\"\"+t.delimiter+e+t.delimiter},e.prototype.error=function(e,t){var n,i,r,s,o,a;return null==t&&(t={}),r=\"first_line\"in t?t:(o=this.getLineAndColumnFromChunk(null!=(s=t.offset)?s:0),i=o[0],n=o[1],o,{first_line:i,first_column:n,last_column:n+(null!=(a=t.length)?a:1)-1}),lt(e,r)},e}(),E=[\"true\",\"false\",\"null\",\"this\",\"new\",\"delete\",\"typeof\",\"in\",\"instanceof\",\"return\",\"throw\",\"break\",\"continue\",\"debugger\",\"yield\",\"if\",\"else\",\"switch\",\"for\",\"while\",\"do\",\"try\",\"catch\",\"finally\",\"class\",\"extends\",\"super\"],a=[\"undefined\",\"then\",\"unless\",\"until\",\"loop\",\"of\",\"by\",\"when\"],o={and:\"&&\",or:\"||\",is:\"==\",isnt:\"!=\",not:\"!\",yes:\"true\",no:\"false\",on:\"true\",off:\"false\"},s=function(){var e;e=[];for(rt in o)e.push(rt);return e}(),a=a.concat(s),V=[\"case\",\"default\",\"function\",\"var\",\"void\",\"with\",\"const\",\"let\",\"enum\",\"export\",\"import\",\"native\",\"implements\",\"interface\",\"package\",\"private\",\"protected\",\"public\",\"static\"],H=[\"arguments\",\"eval\",\"yield*\"],C=E.concat(V).concat(H),e.RESERVED=V.concat(E).concat(a).concat(H),e.STRICT_PROSCRIBED=H,t=65279,v=/^(?!\\d)((?:(?!\\s)[$\\w\\x7f-\\uffff])+)([^\\n\\S]*:(?!:))?/,I=/^0b[01]+|^0o[0-7]+|^0x[\\da-f]+|^\\d*\\.?\\d+(?:e[+-]?\\d+)?/i,_=/^(?:[-=]>|[-+*\\/%<>&|^!?=]=|>>>=?|([-+:])\\1|([&|<>*\\/%])\\2=?|\\?(\\.|::)|\\.{2,3})/,et=/^[^\\n\\S]+/,c=/^###([^#][\\s\\S]*?)(?:###[^\\n\\S]*|###$)|^(?:\\s*#(?!##[^#]).*)+/,r=/^[-=]>/,R=/^(?:\\n[^\\n\\S]*)+/,T=/^`[^\\\\`]*(?:\\\\.[^\\\\`]*)*`/,Y=/^(?:'''|\"\"\"|'|\")/,W=/^(?:[^\\\\']|\\\\[\\s\\S])*/,q=/^(?:[^\\\\\"#]|\\\\[\\s\\S]|\\#(?!\\{))*/,f=/^(?:[^\\\\']|\\\\[\\s\\S]|'(?!''))*/,p=/^(?:[^\\\\\"#]|\\\\[\\s\\S]|\"(?!\"\")|\\#(?!\\{))*/,X=/((?:\\\\\\\\)+)|\\\\[^\\S\\n]*\\n\\s*/g,G=/\\s*\\n\\s*/g,d=/\\n+([^\\n\\S]*)(?=\\S)/g,$=/^\\/(?!\\/)((?:[^[\\/\\n\\\\]|\\\\[^\\n]|\\[(?:\\\\[^\\n]|[^\\]\\n\\\\])*\\])*)(\\/)?/,j=/^\\w*/,Z=/^(?!.*(.).*\\1)[imgy]*$/,m=/^(?:[^\\\\\\/#]|\\\\[\\s\\S]|\\/(?!\\/\\/)|\\#(?!\\{))*/,g=/((?:\\\\\\\\)+)|\\\\(\\s)|\\s+(?:#.*)?/g,M=/^(\\/|\\/{3}\\s*)(\\*)/,O=/^\\/=?\\s/,u=/\\*\\//,L=/^\\s*(?:,|\\??\\.(?![.\\d])|::)/,k=/((?:^|[^\\\\])(?:\\\\\\\\)*)\\\\(?:(0[0-7]|[1-7])|(x(?![\\da-fA-F]{2}).{0,2})|(u(?![\\da-fA-F]{4}).{0,4}))/,F=/^[^\\n\\S]*\\n/,K=/\\n[^\\n\\S]*$/,z=/\\s+$/,l=[\"-=\",\"+=\",\"/=\",\"*=\",\"%=\",\"||=\",\"&&=\",\"?=\",\"<<=\",\">>=\",\">>>=\",\"&=\",\"^=\",\"|=\",\"**=\",\"//=\",\"%%=\"],J=[\"NEW\",\"TYPEOF\",\"DELETE\",\"DO\"],Q=[\"!\",\"~\"],x=[\"&&\",\"||\",\"&\",\"|\",\"^\"],U=[\"<<\",\">>\",\">>>\"],h=[\"==\",\"!=\",\"<\",\">\",\"<=\",\">=\"],D=[\"*\",\"/\",\"%\",\"//\",\"%%\"],B=[\"IN\",\"OF\",\"INSTANCEOF\"],n=[\"TRUE\",\"FALSE\"],i=[\"IDENTIFIER\",\")\",\"]\",\"?\",\"@\",\"THIS\",\"SUPER\"],b=i.concat([\"NUMBER\",\"STRING\",\"STRING_END\",\"REGEX\",\"REGEX_END\",\"BOOL\",\"NULL\",\"UNDEFINED\",\"}\",\"::\"]),A=b.concat([\"++\",\"--\"]),N=[\"INDENT\",\"OUTDENT\",\"TERMINATOR\"],y=[\")\",\"}\",\"]\"]}.call(this),t.exports}(),_dereq_[\"./parser\"]=function(){var e={},t={exports:e},n=function(){function e(){this.yy={}}var t=function(e,t,n,i){for(n=n||{},i=e.length;i--;n[e[i]]=t);return n},n=[1,20],i=[1,75],r=[1,71],s=[1,76],o=[1,77],a=[1,73],c=[1,74],h=[1,50],l=[1,52],u=[1,53],p=[1,54],d=[1,55],f=[1,45],m=[1,46],g=[1,27],v=[1,60],y=[1,61],b=[1,70],k=[1,43],w=[1,26],T=[1,58],C=[1,59],E=[1,57],F=[1,38],N=[1,44],L=[1,56],x=[1,65],S=[1,66],D=[1,67],R=[1,68],A=[1,42],I=[1,64],_=[1,29],O=[1,30],$=[1,31],j=[1,32],M=[1,33],B=[1,34],V=[1,35],P=[1,78],U=[1,6,26,34,108],G=[1,88],H=[1,81],q=[1,80],X=[1,79],W=[1,82],Y=[1,83],K=[1,84],z=[1,85],J=[1,86],Q=[1,87],Z=[1,91],et=[1,6,25,26,34,55,60,63,79,84,92,97,99,108,110,111,112,116,117,132,135,136,141,142,143,144,145,146,147],tt=[1,97],nt=[1,98],it=[1,99],rt=[1,100],st=[1,102],ot=[1,103],at=[1,96],ct=[2,112],ht=[1,6,25,26,34,55,60,63,72,73,74,75,77,79,80,84,90,91,92,97,99,108,110,111,112,116,117,132,135,136,141,142,143,144,145,146,147],lt=[2,79],ut=[1,108],pt=[2,58],dt=[1,112],ft=[1,117],mt=[1,118],gt=[1,120],vt=[1,6,25,26,34,46,55,60,63,72,73,74,75,77,79,80,84,90,91,92,97,99,108,110,111,112,116,117,132,135,136,141,142,143,144,145,146,147],yt=[2,76],bt=[1,6,26,34,55,60,63,79,84,92,97,99,108,110,111,112,116,117,132,135,136,141,142,143,144,145,146,147],kt=[1,155],wt=[1,157],Tt=[1,152],Ct=[1,6,25,26,34,46,55,60,63,72,73,74,75,77,79,80,84,86,90,91,92,97,99,108,110,111,112,116,117,132,135,136,139,140,141,142,143,144,145,146,147,148],Et=[2,95],Ft=[1,6,25,26,34,49,55,60,63,72,73,74,75,77,79,80,84,90,91,92,97,99,108,110,111,112,116,117,132,135,136,141,142,143,144,145,146,147],Nt=[1,6,25,26,34,46,49,55,60,63,72,73,74,75,77,79,80,84,86,90,91,92,97,99,108,110,111,112,116,117,123,124,132,135,136,139,140,141,142,143,144,145,146,147,148],Lt=[1,206],xt=[1,205],St=[1,6,25,26,34,38,55,60,63,72,73,74,75,77,79,80,84,90,91,92,97,99,108,110,111,112,116,117,132,135,136,141,142,143,144,145,146,147],Dt=[2,56],Rt=[1,216],At=[6,25,26,55,60],It=[6,25,26,46,55,60,63],_t=[1,6,25,26,34,55,60,63,79,84,92,97,99,108,110,111,112,116,117,132,135,136,142,144,145,146,147],Ot=[1,6,25,26,34,55,60,63,79,84,92,97,99,108,110,111,112,116,117,132],$t=[72,73,74,75,77,80,90,91],jt=[1,235],Mt=[2,133],Bt=[1,6,25,26,34,46,55,60,63,72,73,74,75,77,79,80,84,90,91,92,97,99,108,110,111,112,116,117,123,124,132,135,136,141,142,143,144,145,146,147],Vt=[1,244],Pt=[6,25,26,60,92,97],Ut=[1,6,25,26,34,55,60,63,79,84,92,97,99,108,117,132],Gt=[1,6,25,26,34,55,60,63,79,84,92,97,99,108,111,117,132],Ht=[123,124],qt=[60,123,124],Xt=[1,255],Wt=[6,25,26,60,84],Yt=[6,25,26,49,60,84],Kt=[1,6,25,26,34,55,60,63,79,84,92,97,99,108,110,111,112,116,117,132,135,136,144,145,146,147],zt=[11,28,30,32,33,36,37,40,41,42,43,44,51,52,53,57,58,79,82,85,89,94,95,96,102,106,107,110,112,114,116,125,131,133,134,135,136,137,139,140],Jt=[2,122],Qt=[6,25,26],Zt=[2,57],en=[1,268],tn=[1,269],nn=[1,6,25,26,34,55,60,63,79,84,92,97,99,104,105,108,110,111,112,116,117,127,129,132,135,136,141,142,143,144,145,146,147],rn=[26,127,129],sn=[1,6,26,34,55,60,63,79,84,92,97,99,108,111,117,132],on=[2,71],an=[1,291],cn=[1,292],hn=[1,6,25,26,34,55,60,63,79,84,92,97,99,108,110,111,112,116,117,127,132,135,136,141,142,143,144,145,146,147],ln=[1,6,25,26,34,55,60,63,79,84,92,97,99,108,110,112,116,117,132],un=[1,303],pn=[1,304],dn=[6,25,26,60],fn=[1,6,25,26,34,55,60,63,79,84,92,97,99,104,108,110,111,112,116,117,132,135,136,141,142,143,144,145,146,147],mn=[25,60],gn={trace:function(){},yy:{},symbols_:{error:2,Root:3,Body:4,Line:5,TERMINATOR:6,Expression:7,Statement:8,Return:9,Comment:10,STATEMENT:11,Value:12,Invocation:13,Code:14,Operation:15,Assign:16,If:17,Try:18,While:19,For:20,Switch:21,Class:22,Throw:23,Block:24,INDENT:25,OUTDENT:26,Identifier:27,IDENTIFIER:28,AlphaNumeric:29,NUMBER:30,String:31,STRING:32,STRING_START:33,STRING_END:34,Regex:35,REGEX:36,REGEX_START:37,REGEX_END:38,Literal:39,JS:40,DEBUGGER:41,UNDEFINED:42,NULL:43,BOOL:44,Assignable:45,\"=\":46,AssignObj:47,ObjAssignable:48,\":\":49,ThisProperty:50,RETURN:51,HERECOMMENT:52,PARAM_START:53,ParamList:54,PARAM_END:55,FuncGlyph:56,\"->\":57,\"=>\":58,OptComma:59,\",\":60,Param:61,ParamVar:62,\"...\":63,Array:64,Object:65,Splat:66,SimpleAssignable:67,Accessor:68,Parenthetical:69,Range:70,This:71,\".\":72,\"?.\":73,\"::\":74,\"?::\":75,Index:76,INDEX_START:77,IndexValue:78,INDEX_END:79,INDEX_SOAK:80,Slice:81,\"{\":82,AssignList:83,\"}\":84,CLASS:85,EXTENDS:86,OptFuncExist:87,Arguments:88,SUPER:89,FUNC_EXIST:90,CALL_START:91,CALL_END:92,ArgList:93,THIS:94,\"@\":95,\"[\":96,\"]\":97,RangeDots:98,\"..\":99,Arg:100,SimpleArgs:101,TRY:102,Catch:103,FINALLY:104,CATCH:105,THROW:106,\"(\":107,\")\":108,WhileSource:109,WHILE:110,WHEN:111,UNTIL:112,Loop:113,LOOP:114,ForBody:115,FOR:116,BY:117,ForStart:118,ForSource:119,ForVariables:120,OWN:121,ForValue:122,FORIN:123,FOROF:124,SWITCH:125,Whens:126,ELSE:127,When:128,LEADING_WHEN:129,IfBlock:130,IF:131,POST_IF:132,UNARY:133,UNARY_MATH:134,\"-\":135,\"+\":136,YIELD:137,FROM:138,\"--\":139,\"++\":140,\"?\":141,MATH:142,\"**\":143,SHIFT:144,COMPARE:145,LOGIC:146,RELATION:147,COMPOUND_ASSIGN:148,$accept:0,$end:1},terminals_:{2:\"error\",6:\"TERMINATOR\",11:\"STATEMENT\",25:\"INDENT\",26:\"OUTDENT\",28:\"IDENTIFIER\",30:\"NUMBER\",32:\"STRING\",33:\"STRING_START\",34:\"STRING_END\",36:\"REGEX\",37:\"REGEX_START\",38:\"REGEX_END\",40:\"JS\",41:\"DEBUGGER\",42:\"UNDEFINED\",43:\"NULL\",44:\"BOOL\",46:\"=\",49:\":\",51:\"RETURN\",52:\"HERECOMMENT\",53:\"PARAM_START\",55:\"PARAM_END\",57:\"->\",58:\"=>\",60:\",\",63:\"...\",72:\".\",73:\"?.\",74:\"::\",75:\"?::\",77:\"INDEX_START\",79:\"INDEX_END\",80:\"INDEX_SOAK\",82:\"{\",84:\"}\",85:\"CLASS\",86:\"EXTENDS\",89:\"SUPER\",90:\"FUNC_EXIST\",91:\"CALL_START\",92:\"CALL_END\",94:\"THIS\",95:\"@\",96:\"[\",97:\"]\",99:\"..\",102:\"TRY\",104:\"FINALLY\",105:\"CATCH\",106:\"THROW\",107:\"(\",108:\")\",110:\"WHILE\",111:\"WHEN\",112:\"UNTIL\",114:\"LOOP\",116:\"FOR\",117:\"BY\",121:\"OWN\",123:\"FORIN\",124:\"FOROF\",125:\"SWITCH\",127:\"ELSE\",129:\"LEADING_WHEN\",131:\"IF\",132:\"POST_IF\",133:\"UNARY\",134:\"UNARY_MATH\",135:\"-\",136:\"+\",137:\"YIELD\",138:\"FROM\",139:\"--\",140:\"++\",141:\"?\",142:\"MATH\",143:\"**\",144:\"SHIFT\",145:\"COMPARE\",146:\"LOGIC\",147:\"RELATION\",148:\"COMPOUND_ASSIGN\"},productions_:[0,[3,0],[3,1],[4,1],[4,3],[4,2],[5,1],[5,1],[8,1],[8,1],[8,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[24,2],[24,3],[27,1],[29,1],[29,1],[31,1],[31,3],[35,1],[35,3],[39,1],[39,1],[39,1],[39,1],[39,1],[39,1],[39,1],[16,3],[16,4],[16,5],[47,1],[47,3],[47,5],[47,1],[48,1],[48,1],[48,1],[9,2],[9,1],[10,1],[14,5],[14,2],[56,1],[56,1],[59,0],[59,1],[54,0],[54,1],[54,3],[54,4],[54,6],[61,1],[61,2],[61,3],[61,1],[62,1],[62,1],[62,1],[62,1],[66,2],[67,1],[67,2],[67,2],[67,1],[45,1],[45,1],[45,1],[12,1],[12,1],[12,1],[12,1],[12,1],[68,2],[68,2],[68,2],[68,2],[68,1],[68,1],[76,3],[76,2],[78,1],[78,1],[65,4],[83,0],[83,1],[83,3],[83,4],[83,6],[22,1],[22,2],[22,3],[22,4],[22,2],[22,3],[22,4],[22,5],[13,3],[13,3],[13,1],[13,2],[87,0],[87,1],[88,2],[88,4],[71,1],[71,1],[50,2],[64,2],[64,4],[98,1],[98,1],[70,5],[81,3],[81,2],[81,2],[81,1],[93,1],[93,3],[93,4],[93,4],[93,6],[100,1],[100,1],[100,1],[101,1],[101,3],[18,2],[18,3],[18,4],[18,5],[103,3],[103,3],[103,2],[23,2],[69,3],[69,5],[109,2],[109,4],[109,2],[109,4],[19,2],[19,2],[19,2],[19,1],[113,2],[113,2],[20,2],[20,2],[20,2],[115,2],[115,4],[115,2],[118,2],[118,3],[122,1],[122,1],[122,1],[122,1],[120,1],[120,3],[119,2],[119,2],[119,4],[119,4],[119,4],[119,6],[119,6],[21,5],[21,7],[21,4],[21,6],[126,1],[126,2],[128,3],[128,4],[130,3],[130,5],[17,1],[17,3],[17,3],[17,3],[15,2],[15,2],[15,2],[15,2],[15,2],[15,2],[15,3],[15,2],[15,2],[15,2],[15,2],[15,2],[15,3],[15,3],[15,3],[15,3],[15,3],[15,3],[15,3],[15,3],[15,3],[15,5],[15,4],[15,3]],performAction:function(e,t,n,i,r,s,o){var a=s.length-1;\nswitch(r){case 1:return this.$=i.addLocationDataFn(o[a],o[a])(new i.Block);case 2:return this.$=s[a];case 3:this.$=i.addLocationDataFn(o[a],o[a])(i.Block.wrap([s[a]]));break;case 4:this.$=i.addLocationDataFn(o[a-2],o[a])(s[a-2].push(s[a]));break;case 5:this.$=s[a-1];break;case 6:case 7:case 8:case 9:case 11:case 12:case 13:case 14:case 15:case 16:case 17:case 18:case 19:case 20:case 21:case 22:case 27:case 32:case 34:case 45:case 46:case 47:case 48:case 56:case 57:case 67:case 68:case 69:case 70:case 75:case 76:case 79:case 83:case 89:case 133:case 134:case 136:case 166:case 167:case 183:case 189:this.$=s[a];break;case 10:case 25:case 26:case 28:case 30:case 33:case 35:this.$=i.addLocationDataFn(o[a],o[a])(new i.Literal(s[a]));break;case 23:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.Block);break;case 24:case 31:case 90:this.$=i.addLocationDataFn(o[a-2],o[a])(s[a-1]);break;case 29:case 146:this.$=i.addLocationDataFn(o[a-2],o[a])(new i.Parens(s[a-1]));break;case 36:this.$=i.addLocationDataFn(o[a],o[a])(new i.Undefined);break;case 37:this.$=i.addLocationDataFn(o[a],o[a])(new i.Null);break;case 38:this.$=i.addLocationDataFn(o[a],o[a])(new i.Bool(s[a]));break;case 39:this.$=i.addLocationDataFn(o[a-2],o[a])(new i.Assign(s[a-2],s[a]));break;case 40:this.$=i.addLocationDataFn(o[a-3],o[a])(new i.Assign(s[a-3],s[a]));break;case 41:this.$=i.addLocationDataFn(o[a-4],o[a])(new i.Assign(s[a-4],s[a-1]));break;case 42:case 72:case 77:case 78:case 80:case 81:case 82:case 168:case 169:this.$=i.addLocationDataFn(o[a],o[a])(new i.Value(s[a]));break;case 43:this.$=i.addLocationDataFn(o[a-2],o[a])(new i.Assign(i.addLocationDataFn(o[a-2])(new i.Value(s[a-2])),s[a],\"object\"));break;case 44:this.$=i.addLocationDataFn(o[a-4],o[a])(new i.Assign(i.addLocationDataFn(o[a-4])(new i.Value(s[a-4])),s[a-1],\"object\"));break;case 49:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.Return(s[a]));break;case 50:this.$=i.addLocationDataFn(o[a],o[a])(new i.Return);break;case 51:this.$=i.addLocationDataFn(o[a],o[a])(new i.Comment(s[a]));break;case 52:this.$=i.addLocationDataFn(o[a-4],o[a])(new i.Code(s[a-3],s[a],s[a-1]));break;case 53:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.Code([],s[a],s[a-1]));break;case 54:this.$=i.addLocationDataFn(o[a],o[a])(\"func\");break;case 55:this.$=i.addLocationDataFn(o[a],o[a])(\"boundfunc\");break;case 58:case 95:this.$=i.addLocationDataFn(o[a],o[a])([]);break;case 59:case 96:case 128:case 170:this.$=i.addLocationDataFn(o[a],o[a])([s[a]]);break;case 60:case 97:case 129:this.$=i.addLocationDataFn(o[a-2],o[a])(s[a-2].concat(s[a]));break;case 61:case 98:case 130:this.$=i.addLocationDataFn(o[a-3],o[a])(s[a-3].concat(s[a]));break;case 62:case 99:case 132:this.$=i.addLocationDataFn(o[a-5],o[a])(s[a-5].concat(s[a-2]));break;case 63:this.$=i.addLocationDataFn(o[a],o[a])(new i.Param(s[a]));break;case 64:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.Param(s[a-1],null,!0));break;case 65:this.$=i.addLocationDataFn(o[a-2],o[a])(new i.Param(s[a-2],s[a]));break;case 66:case 135:this.$=i.addLocationDataFn(o[a],o[a])(new i.Expansion);break;case 71:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.Splat(s[a-1]));break;case 73:this.$=i.addLocationDataFn(o[a-1],o[a])(s[a-1].add(s[a]));break;case 74:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.Value(s[a-1],[].concat(s[a])));break;case 84:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.Access(s[a]));break;case 85:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.Access(s[a],\"soak\"));break;case 86:this.$=i.addLocationDataFn(o[a-1],o[a])([i.addLocationDataFn(o[a-1])(new i.Access(new i.Literal(\"prototype\"))),i.addLocationDataFn(o[a])(new i.Access(s[a]))]);break;case 87:this.$=i.addLocationDataFn(o[a-1],o[a])([i.addLocationDataFn(o[a-1])(new i.Access(new i.Literal(\"prototype\"),\"soak\")),i.addLocationDataFn(o[a])(new i.Access(s[a]))]);break;case 88:this.$=i.addLocationDataFn(o[a],o[a])(new i.Access(new i.Literal(\"prototype\")));break;case 91:this.$=i.addLocationDataFn(o[a-1],o[a])(i.extend(s[a],{soak:!0}));break;case 92:this.$=i.addLocationDataFn(o[a],o[a])(new i.Index(s[a]));break;case 93:this.$=i.addLocationDataFn(o[a],o[a])(new i.Slice(s[a]));break;case 94:this.$=i.addLocationDataFn(o[a-3],o[a])(new i.Obj(s[a-2],s[a-3].generated));break;case 100:this.$=i.addLocationDataFn(o[a],o[a])(new i.Class);break;case 101:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.Class(null,null,s[a]));break;case 102:this.$=i.addLocationDataFn(o[a-2],o[a])(new i.Class(null,s[a]));break;case 103:this.$=i.addLocationDataFn(o[a-3],o[a])(new i.Class(null,s[a-1],s[a]));break;case 104:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.Class(s[a]));break;case 105:this.$=i.addLocationDataFn(o[a-2],o[a])(new i.Class(s[a-1],null,s[a]));break;case 106:this.$=i.addLocationDataFn(o[a-3],o[a])(new i.Class(s[a-2],s[a]));break;case 107:this.$=i.addLocationDataFn(o[a-4],o[a])(new i.Class(s[a-3],s[a-1],s[a]));break;case 108:case 109:this.$=i.addLocationDataFn(o[a-2],o[a])(new i.Call(s[a-2],s[a],s[a-1]));break;case 110:this.$=i.addLocationDataFn(o[a],o[a])(new i.Call(\"super\",[new i.Splat(new i.Literal(\"arguments\"))]));break;case 111:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.Call(\"super\",s[a]));break;case 112:this.$=i.addLocationDataFn(o[a],o[a])(!1);break;case 113:this.$=i.addLocationDataFn(o[a],o[a])(!0);break;case 114:this.$=i.addLocationDataFn(o[a-1],o[a])([]);break;case 115:case 131:this.$=i.addLocationDataFn(o[a-3],o[a])(s[a-2]);break;case 116:case 117:this.$=i.addLocationDataFn(o[a],o[a])(new i.Value(new i.Literal(\"this\")));break;case 118:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.Value(i.addLocationDataFn(o[a-1])(new i.Literal(\"this\")),[i.addLocationDataFn(o[a])(new i.Access(s[a]))],\"this\"));break;case 119:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.Arr([]));break;case 120:this.$=i.addLocationDataFn(o[a-3],o[a])(new i.Arr(s[a-2]));break;case 121:this.$=i.addLocationDataFn(o[a],o[a])(\"inclusive\");break;case 122:this.$=i.addLocationDataFn(o[a],o[a])(\"exclusive\");break;case 123:this.$=i.addLocationDataFn(o[a-4],o[a])(new i.Range(s[a-3],s[a-1],s[a-2]));break;case 124:this.$=i.addLocationDataFn(o[a-2],o[a])(new i.Range(s[a-2],s[a],s[a-1]));break;case 125:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.Range(s[a-1],null,s[a]));break;case 126:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.Range(null,s[a],s[a-1]));break;case 127:this.$=i.addLocationDataFn(o[a],o[a])(new i.Range(null,null,s[a]));break;case 137:this.$=i.addLocationDataFn(o[a-2],o[a])([].concat(s[a-2],s[a]));break;case 138:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.Try(s[a]));break;case 139:this.$=i.addLocationDataFn(o[a-2],o[a])(new i.Try(s[a-1],s[a][0],s[a][1]));break;case 140:this.$=i.addLocationDataFn(o[a-3],o[a])(new i.Try(s[a-2],null,null,s[a]));break;case 141:this.$=i.addLocationDataFn(o[a-4],o[a])(new i.Try(s[a-3],s[a-2][0],s[a-2][1],s[a]));break;case 142:this.$=i.addLocationDataFn(o[a-2],o[a])([s[a-1],s[a]]);break;case 143:this.$=i.addLocationDataFn(o[a-2],o[a])([i.addLocationDataFn(o[a-1])(new i.Value(s[a-1])),s[a]]);break;case 144:this.$=i.addLocationDataFn(o[a-1],o[a])([null,s[a]]);break;case 145:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.Throw(s[a]));break;case 147:this.$=i.addLocationDataFn(o[a-4],o[a])(new i.Parens(s[a-2]));break;case 148:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.While(s[a]));break;case 149:this.$=i.addLocationDataFn(o[a-3],o[a])(new i.While(s[a-2],{guard:s[a]}));break;case 150:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.While(s[a],{invert:!0}));break;case 151:this.$=i.addLocationDataFn(o[a-3],o[a])(new i.While(s[a-2],{invert:!0,guard:s[a]}));break;case 152:this.$=i.addLocationDataFn(o[a-1],o[a])(s[a-1].addBody(s[a]));break;case 153:case 154:this.$=i.addLocationDataFn(o[a-1],o[a])(s[a].addBody(i.addLocationDataFn(o[a-1])(i.Block.wrap([s[a-1]]))));break;case 155:this.$=i.addLocationDataFn(o[a],o[a])(s[a]);break;case 156:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.While(i.addLocationDataFn(o[a-1])(new i.Literal(\"true\"))).addBody(s[a]));break;case 157:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.While(i.addLocationDataFn(o[a-1])(new i.Literal(\"true\"))).addBody(i.addLocationDataFn(o[a])(i.Block.wrap([s[a]]))));break;case 158:case 159:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.For(s[a-1],s[a]));break;case 160:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.For(s[a],s[a-1]));break;case 161:this.$=i.addLocationDataFn(o[a-1],o[a])({source:i.addLocationDataFn(o[a])(new i.Value(s[a]))});break;case 162:this.$=i.addLocationDataFn(o[a-3],o[a])({source:i.addLocationDataFn(o[a-2])(new i.Value(s[a-2])),step:s[a]});break;case 163:this.$=i.addLocationDataFn(o[a-1],o[a])(function(){return s[a].own=s[a-1].own,s[a].name=s[a-1][0],s[a].index=s[a-1][1],s[a]}());break;case 164:this.$=i.addLocationDataFn(o[a-1],o[a])(s[a]);break;case 165:this.$=i.addLocationDataFn(o[a-2],o[a])(function(){return s[a].own=!0,s[a]}());break;case 171:this.$=i.addLocationDataFn(o[a-2],o[a])([s[a-2],s[a]]);break;case 172:this.$=i.addLocationDataFn(o[a-1],o[a])({source:s[a]});break;case 173:this.$=i.addLocationDataFn(o[a-1],o[a])({source:s[a],object:!0});break;case 174:this.$=i.addLocationDataFn(o[a-3],o[a])({source:s[a-2],guard:s[a]});break;case 175:this.$=i.addLocationDataFn(o[a-3],o[a])({source:s[a-2],guard:s[a],object:!0});break;case 176:this.$=i.addLocationDataFn(o[a-3],o[a])({source:s[a-2],step:s[a]});break;case 177:this.$=i.addLocationDataFn(o[a-5],o[a])({source:s[a-4],guard:s[a-2],step:s[a]});break;case 178:this.$=i.addLocationDataFn(o[a-5],o[a])({source:s[a-4],step:s[a-2],guard:s[a]});break;case 179:this.$=i.addLocationDataFn(o[a-4],o[a])(new i.Switch(s[a-3],s[a-1]));break;case 180:this.$=i.addLocationDataFn(o[a-6],o[a])(new i.Switch(s[a-5],s[a-3],s[a-1]));break;case 181:this.$=i.addLocationDataFn(o[a-3],o[a])(new i.Switch(null,s[a-1]));break;case 182:this.$=i.addLocationDataFn(o[a-5],o[a])(new i.Switch(null,s[a-3],s[a-1]));break;case 184:this.$=i.addLocationDataFn(o[a-1],o[a])(s[a-1].concat(s[a]));break;case 185:this.$=i.addLocationDataFn(o[a-2],o[a])([[s[a-1],s[a]]]);break;case 186:this.$=i.addLocationDataFn(o[a-3],o[a])([[s[a-2],s[a-1]]]);break;case 187:this.$=i.addLocationDataFn(o[a-2],o[a])(new i.If(s[a-1],s[a],{type:s[a-2]}));break;case 188:this.$=i.addLocationDataFn(o[a-4],o[a])(s[a-4].addElse(i.addLocationDataFn(o[a-2],o[a])(new i.If(s[a-1],s[a],{type:s[a-2]}))));break;case 190:this.$=i.addLocationDataFn(o[a-2],o[a])(s[a-2].addElse(s[a]));break;case 191:case 192:this.$=i.addLocationDataFn(o[a-2],o[a])(new i.If(s[a],i.addLocationDataFn(o[a-2])(i.Block.wrap([s[a-2]])),{type:s[a-1],statement:!0}));break;case 193:case 194:case 197:case 198:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.Op(s[a-1],s[a]));break;case 195:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.Op(\"-\",s[a]));break;case 196:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.Op(\"+\",s[a]));break;case 199:this.$=i.addLocationDataFn(o[a-2],o[a])(new i.Op(s[a-2].concat(s[a-1]),s[a]));break;case 200:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.Op(\"--\",s[a]));break;case 201:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.Op(\"++\",s[a]));break;case 202:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.Op(\"--\",s[a-1],null,!0));break;case 203:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.Op(\"++\",s[a-1],null,!0));break;case 204:this.$=i.addLocationDataFn(o[a-1],o[a])(new i.Existence(s[a-1]));break;case 205:this.$=i.addLocationDataFn(o[a-2],o[a])(new i.Op(\"+\",s[a-2],s[a]));break;case 206:this.$=i.addLocationDataFn(o[a-2],o[a])(new i.Op(\"-\",s[a-2],s[a]));break;case 207:case 208:case 209:case 210:case 211:this.$=i.addLocationDataFn(o[a-2],o[a])(new i.Op(s[a-1],s[a-2],s[a]));break;case 212:this.$=i.addLocationDataFn(o[a-2],o[a])(function(){return\"!\"===s[a-1].charAt(0)?new i.Op(s[a-1].slice(1),s[a-2],s[a]).invert():new i.Op(s[a-1],s[a-2],s[a])}());break;case 213:this.$=i.addLocationDataFn(o[a-2],o[a])(new i.Assign(s[a-2],s[a],s[a-1]));break;case 214:this.$=i.addLocationDataFn(o[a-4],o[a])(new i.Assign(s[a-4],s[a-1],s[a-3]));break;case 215:this.$=i.addLocationDataFn(o[a-3],o[a])(new i.Assign(s[a-3],s[a],s[a-2]));break;case 216:this.$=i.addLocationDataFn(o[a-2],o[a])(new i.Extends(s[a-2],s[a]))}},table:[{1:[2,1],3:1,4:2,5:3,7:4,8:5,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},{1:[3]},{1:[2,2],6:P},t(U,[2,3]),t(U,[2,6],{118:69,109:89,115:90,110:x,112:S,116:R,132:G,135:H,136:q,141:X,142:W,143:Y,144:K,145:z,146:J,147:Q}),t(U,[2,7],{118:69,109:92,115:93,110:x,112:S,116:R,132:Z}),t(et,[2,11],{87:94,68:95,76:101,72:tt,73:nt,74:it,75:rt,77:st,80:ot,90:at,91:ct}),t(et,[2,12],{76:101,87:104,68:105,72:tt,73:nt,74:it,75:rt,77:st,80:ot,90:at,91:ct}),t(et,[2,13]),t(et,[2,14]),t(et,[2,15]),t(et,[2,16]),t(et,[2,17]),t(et,[2,18]),t(et,[2,19]),t(et,[2,20]),t(et,[2,21]),t(et,[2,22]),t(et,[2,8]),t(et,[2,9]),t(et,[2,10]),t(ht,lt,{46:[1,106]}),t(ht,[2,80]),t(ht,[2,81]),t(ht,[2,82]),t(ht,[2,83]),t([1,6,25,26,34,38,55,60,63,72,73,74,75,77,79,80,84,90,92,97,99,108,110,111,112,116,117,132,135,136,141,142,143,144,145,146,147],[2,110],{88:107,91:ut}),t([6,25,55,60],pt,{54:109,61:110,62:111,27:113,50:114,64:115,65:116,28:i,63:dt,82:b,95:ft,96:mt}),{24:119,25:gt},{7:121,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},{7:123,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},{7:124,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},{7:125,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},{7:127,8:126,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,138:[1,128],139:B,140:V},{12:130,13:131,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:132,50:63,64:47,65:48,67:129,69:23,70:24,71:25,82:b,89:w,94:T,95:C,96:E,107:L},{12:130,13:131,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:132,50:63,64:47,65:48,67:133,69:23,70:24,71:25,82:b,89:w,94:T,95:C,96:E,107:L},t(vt,yt,{86:[1,137],139:[1,134],140:[1,135],148:[1,136]}),t(et,[2,189],{127:[1,138]}),{24:139,25:gt},{24:140,25:gt},t(et,[2,155]),{24:141,25:gt},{7:142,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:[1,143],27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},t(bt,[2,100],{39:22,69:23,70:24,71:25,64:47,65:48,29:49,35:51,27:62,50:63,31:72,12:130,13:131,45:132,24:144,67:146,25:gt,28:i,30:r,32:s,33:o,36:a,37:c,40:h,41:l,42:u,43:p,44:d,82:b,86:[1,145],89:w,94:T,95:C,96:E,107:L}),{7:147,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},t([1,6,25,26,34,55,60,63,79,84,92,97,99,108,110,111,112,116,117,132,141,142,143,144,145,146,147],[2,50],{12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,9:18,10:19,45:21,39:22,69:23,70:24,71:25,56:28,67:36,130:37,109:39,113:40,115:41,64:47,65:48,29:49,35:51,27:62,50:63,118:69,31:72,8:122,7:148,11:n,28:i,30:r,32:s,33:o,36:a,37:c,40:h,41:l,42:u,43:p,44:d,51:f,52:m,53:g,57:v,58:y,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,114:D,125:A,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V}),t(et,[2,51]),t(vt,[2,77]),t(vt,[2,78]),t(ht,[2,32]),t(ht,[2,33]),t(ht,[2,34]),t(ht,[2,35]),t(ht,[2,36]),t(ht,[2,37]),t(ht,[2,38]),{4:149,5:3,7:4,8:5,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:[1,150],27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},{7:151,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:kt,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,63:wt,64:47,65:48,66:156,67:36,69:23,70:24,71:25,82:b,85:k,89:w,93:153,94:T,95:C,96:E,97:Tt,100:154,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},t(ht,[2,116]),t(ht,[2,117],{27:158,28:i}),{25:[2,54]},{25:[2,55]},t(Ct,[2,72]),t(Ct,[2,75]),{7:159,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},{7:160,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},{7:161,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},{7:163,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:162,25:gt,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},{27:168,28:i,50:169,64:170,65:171,70:164,82:b,95:ft,96:E,120:165,121:[1,166],122:167},{119:172,123:[1,173],124:[1,174]},t([6,25,60,84],Et,{31:72,83:175,47:176,48:177,10:178,27:179,29:180,50:181,28:i,30:r,32:s,33:o,52:m,95:ft}),t(Ft,[2,26]),t(Ft,[2,27]),t(ht,[2,30]),{12:130,13:182,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:132,50:63,64:47,65:48,67:183,69:23,70:24,71:25,82:b,89:w,94:T,95:C,96:E,107:L},t(Nt,[2,25]),t(Ft,[2,28]),{4:184,5:3,7:4,8:5,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},t(U,[2,5],{7:4,8:5,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,9:18,10:19,45:21,39:22,69:23,70:24,71:25,56:28,67:36,130:37,109:39,113:40,115:41,64:47,65:48,29:49,35:51,27:62,50:63,118:69,31:72,5:185,11:n,28:i,30:r,32:s,33:o,36:a,37:c,40:h,41:l,42:u,43:p,44:d,51:f,52:m,53:g,57:v,58:y,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,110:x,112:S,114:D,116:R,125:A,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V}),t(et,[2,204]),{7:186,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},{7:187,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},{7:188,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},{7:189,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},{7:190,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},{7:191,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},{7:192,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},{7:193,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},{7:194,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},t(et,[2,154]),t(et,[2,159]),{7:195,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},t(et,[2,153]),t(et,[2,158]),{88:196,91:ut},t(Ct,[2,73]),{91:[2,113]},{27:197,28:i},{27:198,28:i},t(Ct,[2,88],{27:199,28:i}),{27:200,28:i},t(Ct,[2,89]),{7:202,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,63:Lt,64:47,65:48,67:36,69:23,70:24,71:25,78:201,81:203,82:b,85:k,89:w,94:T,95:C,96:E,98:204,99:xt,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},{76:207,77:st,80:ot},{88:208,91:ut},t(Ct,[2,74]),{6:[1,210],7:209,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:[1,211],27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},t(St,[2,111]),{7:214,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:kt,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,63:wt,64:47,65:48,66:156,67:36,69:23,70:24,71:25,82:b,85:k,89:w,92:[1,212],93:213,94:T,95:C,96:E,100:154,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},t([6,25],Dt,{59:217,55:[1,215],60:Rt}),t(At,[2,59]),t(At,[2,63],{46:[1,219],63:[1,218]}),t(At,[2,66]),t(It,[2,67]),t(It,[2,68]),t(It,[2,69]),t(It,[2,70]),{27:158,28:i},{7:214,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:kt,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,63:wt,64:47,65:48,66:156,67:36,69:23,70:24,71:25,82:b,85:k,89:w,93:153,94:T,95:C,96:E,97:Tt,100:154,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},t(et,[2,53]),{4:221,5:3,7:4,8:5,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,26:[1,220],27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},t([1,6,25,26,34,55,60,63,79,84,92,97,99,108,110,111,112,116,117,132,135,136,142,143,144,145,146,147],[2,193],{118:69,109:89,115:90,141:X}),{109:92,110:x,112:S,115:93,116:R,118:69,132:Z},t(_t,[2,194],{118:69,109:89,115:90,141:X,143:Y}),t(_t,[2,195],{118:69,109:89,115:90,141:X,143:Y}),t(_t,[2,196],{118:69,109:89,115:90,141:X,143:Y}),t(et,[2,197],{118:69,109:92,115:93}),t(Ot,[2,198],{118:69,109:89,115:90,135:H,136:q,141:X,142:W,143:Y,144:K,145:z,146:J,147:Q}),{7:222,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},t(et,[2,200],{72:yt,73:yt,74:yt,75:yt,77:yt,80:yt,90:yt,91:yt}),{68:95,72:tt,73:nt,74:it,75:rt,76:101,77:st,80:ot,87:94,90:at,91:ct},{68:105,72:tt,73:nt,74:it,75:rt,76:101,77:st,80:ot,87:104,90:at,91:ct},t($t,lt),t(et,[2,201],{72:yt,73:yt,74:yt,75:yt,77:yt,80:yt,90:yt,91:yt}),t(et,[2,202]),t(et,[2,203]),{6:[1,225],7:223,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:[1,224],27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},{7:226,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},{24:227,25:gt,131:[1,228]},t(et,[2,138],{103:229,104:[1,230],105:[1,231]}),t(et,[2,152]),t(et,[2,160]),{25:[1,232],109:89,110:x,112:S,115:90,116:R,118:69,132:G,135:H,136:q,141:X,142:W,143:Y,144:K,145:z,146:J,147:Q},{126:233,128:234,129:jt},t(et,[2,101]),{7:236,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},t(bt,[2,104],{24:237,25:gt,72:yt,73:yt,74:yt,75:yt,77:yt,80:yt,90:yt,91:yt,86:[1,238]}),t(Ot,[2,145],{118:69,109:89,115:90,135:H,136:q,141:X,142:W,143:Y,144:K,145:z,146:J,147:Q}),t(Ot,[2,49],{118:69,109:89,115:90,135:H,136:q,141:X,142:W,143:Y,144:K,145:z,146:J,147:Q}),{6:P,108:[1,239]},{4:240,5:3,7:4,8:5,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},t([6,25,60,97],Mt,{118:69,109:89,115:90,98:241,63:[1,242],99:xt,110:x,112:S,116:R,132:G,135:H,136:q,141:X,142:W,143:Y,144:K,145:z,146:J,147:Q}),t(Bt,[2,119]),t([6,25,97],Dt,{59:243,60:Vt}),t(Pt,[2,128]),{7:214,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:kt,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,63:wt,64:47,65:48,66:156,67:36,69:23,70:24,71:25,82:b,85:k,89:w,93:245,94:T,95:C,96:E,100:154,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},t(Pt,[2,134]),t(Pt,[2,135]),t(Nt,[2,118]),{24:246,25:gt,109:89,110:x,112:S,115:90,116:R,118:69,132:G,135:H,136:q,141:X,142:W,143:Y,144:K,145:z,146:J,147:Q},t(Ut,[2,148],{118:69,109:89,115:90,110:x,111:[1,247],112:S,116:R,135:H,136:q,141:X,142:W,143:Y,144:K,145:z,146:J,147:Q}),t(Ut,[2,150],{118:69,109:89,115:90,110:x,111:[1,248],112:S,116:R,135:H,136:q,141:X,142:W,143:Y,144:K,145:z,146:J,147:Q}),t(et,[2,156]),t(Gt,[2,157],{118:69,109:89,115:90,110:x,112:S,116:R,135:H,136:q,141:X,142:W,143:Y,144:K,145:z,146:J,147:Q}),t([1,6,25,26,34,55,60,63,79,84,92,97,99,108,110,111,112,116,132,135,136,141,142,143,144,145,146,147],[2,161],{117:[1,249]}),t(Ht,[2,164]),{27:168,28:i,50:169,64:170,65:171,82:b,95:ft,96:mt,120:250,122:167},t(Ht,[2,170],{60:[1,251]}),t(qt,[2,166]),t(qt,[2,167]),t(qt,[2,168]),t(qt,[2,169]),t(et,[2,163]),{7:252,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},{7:253,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},t([6,25,84],Dt,{59:254,60:Xt}),t(Wt,[2,96]),t(Wt,[2,42],{49:[1,256]}),t(Wt,[2,45]),t(Yt,[2,46]),t(Yt,[2,47]),t(Yt,[2,48]),{38:[1,257],68:105,72:tt,73:nt,74:it,75:rt,76:101,77:st,80:ot,87:104,90:at,91:ct},t($t,yt),{6:P,34:[1,258]},t(U,[2,4]),t(Kt,[2,205],{118:69,109:89,115:90,141:X,142:W,143:Y}),t(Kt,[2,206],{118:69,109:89,115:90,141:X,142:W,143:Y}),t(_t,[2,207],{118:69,109:89,115:90,141:X,143:Y}),t(_t,[2,208],{118:69,109:89,115:90,141:X,143:Y}),t([1,6,25,26,34,55,60,63,79,84,92,97,99,108,110,111,112,116,117,132,144,145,146,147],[2,209],{118:69,109:89,115:90,135:H,136:q,141:X,142:W,143:Y}),t([1,6,25,26,34,55,60,63,79,84,92,97,99,108,110,111,112,116,117,132,145,146],[2,210],{118:69,109:89,115:90,135:H,136:q,141:X,142:W,143:Y,144:K,147:Q}),t([1,6,25,26,34,55,60,63,79,84,92,97,99,108,110,111,112,116,117,132,146],[2,211],{118:69,109:89,115:90,135:H,136:q,141:X,142:W,143:Y,144:K,145:z,147:Q}),t([1,6,25,26,34,55,60,63,79,84,92,97,99,108,110,111,112,116,117,132,145,146,147],[2,212],{118:69,109:89,115:90,135:H,136:q,141:X,142:W,143:Y,144:K}),t(Gt,[2,192],{118:69,109:89,115:90,110:x,112:S,116:R,135:H,136:q,141:X,142:W,143:Y,144:K,145:z,146:J,147:Q}),t(Gt,[2,191],{118:69,109:89,115:90,110:x,112:S,116:R,135:H,136:q,141:X,142:W,143:Y,144:K,145:z,146:J,147:Q}),t(St,[2,108]),t(Ct,[2,84]),t(Ct,[2,85]),t(Ct,[2,86]),t(Ct,[2,87]),{79:[1,259]},{63:Lt,79:[2,92],98:260,99:xt,109:89,110:x,112:S,115:90,116:R,118:69,132:G,135:H,136:q,141:X,142:W,143:Y,144:K,145:z,146:J,147:Q},{79:[2,93]},{7:261,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,79:[2,127],82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},t(zt,[2,121]),t(zt,Jt),t(Ct,[2,91]),t(St,[2,109]),t(Ot,[2,39],{118:69,109:89,115:90,135:H,136:q,141:X,142:W,143:Y,144:K,145:z,146:J,147:Q}),{7:262,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},{7:263,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},t(St,[2,114]),t([6,25,92],Dt,{59:264,60:Vt}),t(Pt,Mt,{118:69,109:89,115:90,63:[1,265],110:x,112:S,116:R,132:G,135:H,136:q,141:X,142:W,143:Y,144:K,145:z,146:J,147:Q}),{56:266,57:v,58:y},t(Qt,Zt,{62:111,27:113,50:114,64:115,65:116,61:267,28:i,63:dt,82:b,95:ft,96:mt}),{6:en,25:tn},t(At,[2,64]),{7:270,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},t(nn,[2,23]),{6:P,26:[1,271]},t(Ot,[2,199],{118:69,109:89,115:90,135:H,136:q,141:X,142:W,143:Y,144:K,145:z,146:J,147:Q}),t(Ot,[2,213],{118:69,109:89,115:90,135:H,136:q,141:X,142:W,143:Y,144:K,145:z,146:J,147:Q}),{7:272,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},{7:273,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},t(Ot,[2,216],{118:69,109:89,115:90,135:H,136:q,141:X,142:W,143:Y,144:K,145:z,146:J,147:Q}),t(et,[2,190]),{7:274,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},t(et,[2,139],{104:[1,275]}),{24:276,25:gt},{24:279,25:gt,27:277,28:i,65:278,82:b},{126:280,128:234,129:jt},{26:[1,281],127:[1,282],128:283,129:jt},t(rn,[2,183]),{7:285,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,101:284,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},t(sn,[2,102],{118:69,109:89,115:90,24:286,25:gt,110:x,112:S,116:R,135:H,136:q,141:X,142:W,143:Y,144:K,145:z,146:J,147:Q}),t(et,[2,105]),{7:287,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},t(ht,[2,146]),{6:P,26:[1,288]},{7:289,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},t([11,28,30,32,33,36,37,40,41,42,43,44,51,52,53,57,58,82,85,89,94,95,96,102,106,107,110,112,114,116,125,131,133,134,135,136,137,139,140],Jt,{6:on,25:on,60:on,97:on}),{6:an,25:cn,97:[1,290]},t([6,25,26,92,97],Zt,{12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,9:18,10:19,45:21,39:22,69:23,70:24,71:25,56:28,67:36,130:37,109:39,113:40,115:41,64:47,65:48,29:49,35:51,27:62,50:63,118:69,31:72,8:122,66:156,7:214,100:293,11:n,28:i,30:r,32:s,33:o,36:a,37:c,40:h,41:l,42:u,43:p,44:d,51:f,52:m,53:g,57:v,58:y,63:wt,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,110:x,112:S,114:D,116:R,125:A,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V}),t(Qt,Dt,{59:294,60:Vt}),t(hn,[2,187]),{7:295,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},{7:296,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},{7:297,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},t(Ht,[2,165]),{27:168,28:i,50:169,64:170,65:171,82:b,95:ft,96:mt,122:298},t([1,6,25,26,34,55,60,63,79,84,92,97,99,108,110,112,116,132],[2,172],{118:69,109:89,115:90,111:[1,299],117:[1,300],135:H,136:q,141:X,142:W,143:Y,144:K,145:z,146:J,147:Q}),t(ln,[2,173],{118:69,109:89,115:90,111:[1,301],135:H,136:q,141:X,142:W,143:Y,144:K,145:z,146:J,147:Q}),{6:un,25:pn,84:[1,302]},t([6,25,26,84],Zt,{31:72,48:177,10:178,27:179,29:180,50:181,47:305,28:i,30:r,32:s,33:o,52:m,95:ft}),{7:306,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:[1,307],27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},t(ht,[2,31]),t(Ft,[2,29]),t(Ct,[2,90]),{7:308,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,79:[2,125],82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},{79:[2,126],109:89,110:x,112:S,115:90,116:R,118:69,132:G,135:H,136:q,141:X,142:W,143:Y,144:K,145:z,146:J,147:Q},t(Ot,[2,40],{118:69,109:89,115:90,135:H,136:q,141:X,142:W,143:Y,144:K,145:z,146:J,147:Q}),{26:[1,309],109:89,110:x,112:S,115:90,116:R,118:69,132:G,135:H,136:q,141:X,142:W,143:Y,144:K,145:z,146:J,147:Q},{6:an,25:cn,92:[1,310]},t(Pt,on),{24:311,25:gt},t(At,[2,60]),{27:113,28:i,50:114,61:312,62:111,63:dt,64:115,65:116,82:b,95:ft,96:mt},t(dn,pt,{61:110,62:111,27:113,50:114,64:115,65:116,54:313,28:i,63:dt,82:b,95:ft,96:mt}),t(At,[2,65],{118:69,109:89,115:90,110:x,112:S,116:R,132:G,135:H,136:q,141:X,142:W,143:Y,144:K,145:z,146:J,147:Q}),t(nn,[2,24]),{26:[1,314],109:89,110:x,112:S,115:90,116:R,118:69,132:G,135:H,136:q,141:X,142:W,143:Y,144:K,145:z,146:J,147:Q},t(Ot,[2,215],{118:69,109:89,115:90,135:H,136:q,141:X,142:W,143:Y,144:K,145:z,146:J,147:Q}),{24:315,25:gt,109:89,110:x,112:S,115:90,116:R,118:69,132:G,135:H,136:q,141:X,142:W,143:Y,144:K,145:z,146:J,147:Q},{24:316,25:gt},t(et,[2,140]),{24:317,25:gt},{24:318,25:gt},t(fn,[2,144]),{26:[1,319],127:[1,320],128:283,129:jt},t(et,[2,181]),{24:321,25:gt},t(rn,[2,184]),{24:322,25:gt,60:[1,323]},t(mn,[2,136],{118:69,109:89,115:90,110:x,112:S,116:R,132:G,135:H,136:q,141:X,142:W,143:Y,144:K,145:z,146:J,147:Q}),t(et,[2,103]),t(sn,[2,106],{118:69,109:89,115:90,24:324,25:gt,110:x,112:S,116:R,135:H,136:q,141:X,142:W,143:Y,144:K,145:z,146:J,147:Q}),{108:[1,325]},{97:[1,326],109:89,110:x,112:S,115:90,116:R,118:69,132:G,135:H,136:q,141:X,142:W,143:Y,144:K,145:z,146:J,147:Q},t(Bt,[2,120]),{7:214,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,63:wt,64:47,65:48,66:156,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,100:327,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},{7:214,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:kt,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,63:wt,64:47,65:48,66:156,67:36,69:23,70:24,71:25,82:b,85:k,89:w,93:328,94:T,95:C,96:E,100:154,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},t(Pt,[2,129]),{6:an,25:cn,26:[1,329]},t(Gt,[2,149],{118:69,109:89,115:90,110:x,112:S,116:R,135:H,136:q,141:X,142:W,143:Y,144:K,145:z,146:J,147:Q}),t(Gt,[2,151],{118:69,109:89,115:90,110:x,112:S,116:R,135:H,136:q,141:X,142:W,143:Y,144:K,145:z,146:J,147:Q}),t(Gt,[2,162],{118:69,109:89,115:90,110:x,112:S,116:R,135:H,136:q,141:X,142:W,143:Y,144:K,145:z,146:J,147:Q}),t(Ht,[2,171]),{7:330,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},{7:331,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},{7:332,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},t(Bt,[2,94]),{10:178,27:179,28:i,29:180,30:r,31:72,32:s,33:o,47:333,48:177,50:181,52:m,95:ft},t(dn,Et,{31:72,47:176,48:177,10:178,27:179,29:180,50:181,83:334,28:i,30:r,32:s,33:o,52:m,95:ft}),t(Wt,[2,97]),t(Wt,[2,43],{118:69,109:89,115:90,110:x,112:S,116:R,132:G,135:H,136:q,141:X,142:W,143:Y,144:K,145:z,146:J,147:Q}),{7:335,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},{79:[2,124],109:89,110:x,112:S,115:90,116:R,118:69,132:G,135:H,136:q,141:X,142:W,143:Y,144:K,145:z,146:J,147:Q},t(et,[2,41]),t(St,[2,115]),t(et,[2,52]),t(At,[2,61]),t(Qt,Dt,{59:336,60:Rt}),t(et,[2,214]),t(hn,[2,188]),t(et,[2,141]),t(fn,[2,142]),t(fn,[2,143]),t(et,[2,179]),{24:337,25:gt},{26:[1,338]},t(rn,[2,185],{6:[1,339]}),{7:340,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},t(et,[2,107]),t(ht,[2,147]),t(ht,[2,123]),t(Pt,[2,130]),t(Qt,Dt,{59:341,60:Vt}),t(Pt,[2,131]),t([1,6,25,26,34,55,60,63,79,84,92,97,99,108,110,111,112,116,132],[2,174],{118:69,109:89,115:90,117:[1,342],135:H,136:q,141:X,142:W,143:Y,144:K,145:z,146:J,147:Q}),t(ln,[2,176],{118:69,109:89,115:90,111:[1,343],135:H,136:q,141:X,142:W,143:Y,144:K,145:z,146:J,147:Q}),t(Ot,[2,175],{118:69,109:89,115:90,135:H,136:q,141:X,142:W,143:Y,144:K,145:z,146:J,147:Q}),t(Wt,[2,98]),t(Qt,Dt,{59:344,60:Xt}),{26:[1,345],109:89,110:x,112:S,115:90,116:R,118:69,132:G,135:H,136:q,141:X,142:W,143:Y,144:K,145:z,146:J,147:Q},{6:en,25:tn,26:[1,346]},{26:[1,347]},t(et,[2,182]),t(rn,[2,186]),t(mn,[2,137],{118:69,109:89,115:90,110:x,112:S,116:R,132:G,135:H,136:q,141:X,142:W,143:Y,144:K,145:z,146:J,147:Q}),{6:an,25:cn,26:[1,348]},{7:349,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},{7:350,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:i,29:49,30:r,31:72,32:s,33:o,35:51,36:a,37:c,39:22,40:h,41:l,42:u,43:p,44:d,45:21,50:63,51:f,52:m,53:g,56:28,57:v,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:k,89:w,94:T,95:C,96:E,102:F,106:N,107:L,109:39,110:x,112:S,113:40,114:D,115:41,116:R,118:69,125:A,130:37,131:I,133:_,134:O,135:$,136:j,137:M,139:B,140:V},{6:un,25:pn,26:[1,351]},t(Wt,[2,44]),t(At,[2,62]),t(et,[2,180]),t(Pt,[2,132]),t(Ot,[2,177],{118:69,109:89,115:90,135:H,136:q,141:X,142:W,143:Y,144:K,145:z,146:J,147:Q}),t(Ot,[2,178],{118:69,109:89,115:90,135:H,136:q,141:X,142:W,143:Y,144:K,145:z,146:J,147:Q}),t(Wt,[2,99])],defaultActions:{60:[2,54],61:[2,55],96:[2,113],203:[2,93]},parseError:function(e,t){if(!t.recoverable)throw Error(e);\nthis.trace(e)},parse:function(e){function t(){var e;return e=f.lex()||p,\"number\"!=typeof e&&(e=n.symbols_[e]||e),e}var n=this,i=[0],r=[null],s=[],o=this.table,a=\"\",c=0,h=0,l=0,u=2,p=1,d=s.slice.call(arguments,1),f=Object.create(this.lexer),m={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(m.yy[g]=this.yy[g]);f.setInput(e,m.yy),m.yy.lexer=f,m.yy.parser=this,f.yylloc===void 0&&(f.yylloc={});var v=f.yylloc;s.push(v);var y=f.options&&f.options.ranges;this.parseError=\"function\"==typeof m.yy.parseError?m.yy.parseError:Object.getPrototypeOf(this).parseError;for(var b,k,w,T,C,E,F,N,L,x={};;){if(w=i[i.length-1],this.defaultActions[w]?T=this.defaultActions[w]:((null===b||b===void 0)&&(b=t()),T=o[w]&&o[w][b]),T===void 0||!T.length||!T[0]){var S=\"\";L=[];for(E in o[w])this.terminals_[E]&&E>u&&L.push(\"'\"+this.terminals_[E]+\"'\");S=f.showPosition?\"Parse error on line \"+(c+1)+\":\\n\"+f.showPosition()+\"\\nExpecting \"+L.join(\", \")+\", got '\"+(this.terminals_[b]||b)+\"'\":\"Parse error on line \"+(c+1)+\": Unexpected \"+(b==p?\"end of input\":\"'\"+(this.terminals_[b]||b)+\"'\"),this.parseError(S,{text:f.match,token:this.terminals_[b]||b,line:f.yylineno,loc:v,expected:L})}if(T[0]instanceof Array&&T.length>1)throw Error(\"Parse Error: multiple actions possible at state: \"+w+\", token: \"+b);switch(T[0]){case 1:i.push(b),r.push(f.yytext),s.push(f.yylloc),i.push(T[1]),b=null,k?(b=k,k=null):(h=f.yyleng,a=f.yytext,c=f.yylineno,v=f.yylloc,l>0&&l--);break;case 2:if(F=this.productions_[T[1]][1],x.$=r[r.length-F],x._$={first_line:s[s.length-(F||1)].first_line,last_line:s[s.length-1].last_line,first_column:s[s.length-(F||1)].first_column,last_column:s[s.length-1].last_column},y&&(x._$.range=[s[s.length-(F||1)].range[0],s[s.length-1].range[1]]),C=this.performAction.apply(x,[a,h,c,m.yy,T[1],r,s].concat(d)),C!==void 0)return C;F&&(i=i.slice(0,2*-1*F),r=r.slice(0,-1*F),s=s.slice(0,-1*F)),i.push(this.productions_[T[1]][0]),r.push(x.$),s.push(x._$),N=o[i[i.length-2]][i[i.length-1]],i.push(N);break;case 3:return!0}}return!0}};return e.prototype=gn,gn.Parser=e,new e}();return _dereq_!==void 0&&e!==void 0&&(e.parser=n,e.Parser=n.Parser,e.parse=function(){return n.parse.apply(n,arguments)},e.main=function(t){t[1]||(console.log(\"Usage: \"+t[0]+\" FILE\"),process.exit(1));var n=_dereq_(\"fs\").readFileSync(_dereq_(\"path\").normalize(t[1]),\"utf8\");return e.parser.parse(n)},t!==void 0&&_dereq_.main===t&&e.main(process.argv.slice(1))),t.exports}(),_dereq_[\"./scope\"]=function(){var e={},t={exports:e};return function(){var t,n=[].indexOf||function(e){for(var t=0,n=this.length;n>t;t++)if(t in this&&this[t]===e)return t;return-1};e.Scope=t=function(){function e(e,t,n,i){var r,s;this.parent=e,this.expressions=t,this.method=n,this.referencedVars=i,this.variables=[{name:\"arguments\",type:\"arguments\"}],this.positions={},this.parent||(this.utilities={}),this.root=null!=(r=null!=(s=this.parent)?s.root:void 0)?r:this}return e.prototype.add=function(e,t,n){return this.shared&&!n?this.parent.add(e,t,n):Object.prototype.hasOwnProperty.call(this.positions,e)?this.variables[this.positions[e]].type=t:this.positions[e]=this.variables.push({name:e,type:t})-1},e.prototype.namedMethod=function(){var e;return(null!=(e=this.method)?e.name:void 0)||!this.parent?this.method:this.parent.namedMethod()},e.prototype.find=function(e){return this.check(e)?!0:(this.add(e,\"var\"),!1)},e.prototype.parameter=function(e){return this.shared&&this.parent.check(e,!0)?void 0:this.add(e,\"param\")},e.prototype.check=function(e){var t;return!!(this.type(e)||(null!=(t=this.parent)?t.check(e):void 0))},e.prototype.temporary=function(e,t,n){return null==n&&(n=!1),n?(t+parseInt(e,36)).toString(36).replace(/\\d/g,\"a\"):e+(t||\"\")},e.prototype.type=function(e){var t,n,i,r;for(i=this.variables,t=0,n=i.length;n>t;t++)if(r=i[t],r.name===e)return r.type;return null},e.prototype.freeVariable=function(e,t){var i,r,s;for(null==t&&(t={}),i=0;;){if(s=this.temporary(e,i,t.single),!(this.check(s)||n.call(this.root.referencedVars,s)>=0))break;i++}return(null!=(r=t.reserve)?r:!0)&&this.add(s,\"var\",!0),s},e.prototype.assign=function(e,t){return this.add(e,{value:t,assigned:!0},!0),this.hasAssignments=!0},e.prototype.hasDeclarations=function(){return!!this.declaredVariables().length},e.prototype.declaredVariables=function(){var e;return function(){var t,n,i,r;for(i=this.variables,r=[],t=0,n=i.length;n>t;t++)e=i[t],\"var\"===e.type&&r.push(e.name);return r}.call(this).sort()},e.prototype.assignedVariables=function(){var e,t,n,i,r;for(n=this.variables,i=[],e=0,t=n.length;t>e;e++)r=n[e],r.type.assigned&&i.push(r.name+\" = \"+r.type.value);return i},e}()}.call(this),t.exports}(),_dereq_[\"./nodes\"]=function(){var e={},t={exports:e};return function(){var t,n,i,r,s,o,a,c,h,l,u,p,d,f,m,g,v,y,b,k,w,T,C,E,F,N,L,x,S,D,R,A,I,_,O,$,j,M,B,V,P,U,G,H,q,X,W,Y,K,z,J,Q,Z,et,tt,nt,it,rt,st,ot,at,ct,ht,lt,ut,pt,dt,ft,mt,gt,vt,yt,bt,kt=function(e,t){function n(){this.constructor=e}for(var i in t)wt.call(t,i)&&(e[i]=t[i]);return n.prototype=t.prototype,e.prototype=new n,e.__super__=t.prototype,e},wt={}.hasOwnProperty,Tt=[].indexOf||function(e){for(var t=0,n=this.length;n>t;t++)if(t in this&&this[t]===e)return t;return-1},Ct=[].slice;Error.stackTraceLimit=1/0,P=_dereq_(\"./scope\").Scope,dt=_dereq_(\"./lexer\"),$=dt.RESERVED,V=dt.STRICT_PROSCRIBED,ft=_dereq_(\"./helpers\"),et=ft.compact,rt=ft.flatten,it=ft.extend,lt=ft.merge,tt=ft.del,gt=ft.starts,nt=ft.ends,mt=ft.some,Z=ft.addLocationDataFn,ht=ft.locationDataToString,vt=ft.throwSyntaxError,e.extend=it,e.addLocationDataFn=Z,Q=function(){return!0},D=function(){return!1},X=function(){return this},S=function(){return this.negated=!this.negated,this},e.CodeFragment=h=function(){function e(e,t){var n;this.code=\"\"+t,this.locationData=null!=e?e.locationData:void 0,this.type=(null!=e?null!=(n=e.constructor)?n.name:void 0:void 0)||\"unknown\"}return e.prototype.toString=function(){return\"\"+this.code+(this.locationData?\": \"+ht(this.locationData):\"\")},e}(),st=function(e){var t;return function(){var n,i,r;for(r=[],n=0,i=e.length;i>n;n++)t=e[n],r.push(t.code);return r}().join(\"\")},e.Base=r=function(){function e(){}return e.prototype.compile=function(e,t){return st(this.compileToFragments(e,t))},e.prototype.compileToFragments=function(e,t){var n;return e=it({},e),t&&(e.level=t),n=this.unfoldSoak(e)||this,n.tab=e.indent,e.level!==L&&n.isStatement(e)?n.compileClosure(e):n.compileNode(e)},e.prototype.compileClosure=function(e){var n,i,r,a,h,l,u;return(a=this.jumps())&&a.error(\"cannot use a pure statement in an expression\"),e.sharedScope=!0,r=new c([],s.wrap([this])),n=[],((i=this.contains(at))||this.contains(ct))&&(n=[new x(\"this\")],i?(h=\"apply\",n.push(new x(\"arguments\"))):h=\"call\",r=new z(r,[new t(new x(h))])),l=new o(r,n).compileNode(e),(r.isGenerator||(null!=(u=r.base)?u.isGenerator:void 0))&&(l.unshift(this.makeCode(\"(yield* \")),l.push(this.makeCode(\")\"))),l},e.prototype.cache=function(e,t,n){var r,s,o;return r=null!=n?n(this):this.isComplex(),r?(s=new x(e.scope.freeVariable(\"ref\")),o=new i(s,this),t?[o.compileToFragments(e,t),[this.makeCode(s.value)]]:[o,s]):(s=t?this.compileToFragments(e,t):this,[s,s])},e.prototype.cacheToCodeFragments=function(e){return[st(e[0]),st(e[1])]},e.prototype.makeReturn=function(e){var t;return t=this.unwrapAll(),e?new o(new x(e+\".push\"),[t]):new M(t)},e.prototype.contains=function(e){var t;return t=void 0,this.traverseChildren(!1,function(n){return e(n)?(t=n,!1):void 0}),t},e.prototype.lastNonComment=function(e){var t;for(t=e.length;t--;)if(!(e[t]instanceof l))return e[t];return null},e.prototype.toString=function(e,t){var n;return null==e&&(e=\"\"),null==t&&(t=this.constructor.name),n=\"\\n\"+e+t,this.soak&&(n+=\"?\"),this.eachChild(function(t){return n+=t.toString(e+q)}),n},e.prototype.eachChild=function(e){var t,n,i,r,s,o,a,c;if(!this.children)return this;for(a=this.children,i=0,s=a.length;s>i;i++)if(t=a[i],this[t])for(c=rt([this[t]]),r=0,o=c.length;o>r;r++)if(n=c[r],e(n)===!1)return this;return this},e.prototype.traverseChildren=function(e,t){return this.eachChild(function(n){var i;return i=t(n),i!==!1?n.traverseChildren(e,t):void 0})},e.prototype.invert=function(){return new I(\"!\",this)},e.prototype.unwrapAll=function(){var e;for(e=this;e!==(e=e.unwrap()););return e},e.prototype.children=[],e.prototype.isStatement=D,e.prototype.jumps=D,e.prototype.isComplex=Q,e.prototype.isChainable=D,e.prototype.isAssignable=D,e.prototype.unwrap=X,e.prototype.unfoldSoak=D,e.prototype.assigns=D,e.prototype.updateLocationDataIfMissing=function(e){return this.locationData?this:(this.locationData=e,this.eachChild(function(t){return t.updateLocationDataIfMissing(e)}))},e.prototype.error=function(e){return vt(e,this.locationData)},e.prototype.makeCode=function(e){return new h(this,e)},e.prototype.wrapInBraces=function(e){return[].concat(this.makeCode(\"(\"),e,this.makeCode(\")\"))},e.prototype.joinFragmentArrays=function(e,t){var n,i,r,s,o;for(n=[],r=s=0,o=e.length;o>s;r=++s)i=e[r],r&&n.push(this.makeCode(t)),n=n.concat(i);return n},e}(),e.Block=s=function(e){function t(e){this.expressions=et(rt(e||[]))}return kt(t,e),t.prototype.children=[\"expressions\"],t.prototype.push=function(e){return this.expressions.push(e),this},t.prototype.pop=function(){return this.expressions.pop()},t.prototype.unshift=function(e){return this.expressions.unshift(e),this},t.prototype.unwrap=function(){return 1===this.expressions.length?this.expressions[0]:this},t.prototype.isEmpty=function(){return!this.expressions.length},t.prototype.isStatement=function(e){var t,n,i,r;for(r=this.expressions,n=0,i=r.length;i>n;n++)if(t=r[n],t.isStatement(e))return!0;return!1},t.prototype.jumps=function(e){var t,n,i,r,s;for(s=this.expressions,n=0,r=s.length;r>n;n++)if(t=s[n],i=t.jumps(e))return i},t.prototype.makeReturn=function(e){var t,n;for(n=this.expressions.length;n--;)if(t=this.expressions[n],!(t instanceof l)){this.expressions[n]=t.makeReturn(e),t instanceof M&&!t.expression&&this.expressions.splice(n,1);break}return this},t.prototype.compileToFragments=function(e,n){return null==e&&(e={}),e.scope?t.__super__.compileToFragments.call(this,e,n):this.compileRoot(e)},t.prototype.compileNode=function(e){var n,i,r,s,o,a,c,h,l;for(this.tab=e.indent,l=e.level===L,i=[],h=this.expressions,s=o=0,a=h.length;a>o;s=++o)c=h[s],c=c.unwrapAll(),c=c.unfoldSoak(e)||c,c instanceof t?i.push(c.compileNode(e)):l?(c.front=!0,r=c.compileToFragments(e),c.isStatement(e)||(r.unshift(this.makeCode(\"\"+this.tab)),r.push(this.makeCode(\";\"))),i.push(r)):i.push(c.compileToFragments(e,E));return l?this.spaced?[].concat(this.joinFragmentArrays(i,\"\\n\\n\"),this.makeCode(\"\\n\")):this.joinFragmentArrays(i,\"\\n\"):(n=i.length?this.joinFragmentArrays(i,\", \"):[this.makeCode(\"void 0\")],i.length>1&&e.level>=E?this.wrapInBraces(n):n)},t.prototype.compileRoot=function(e){var t,n,i,r,s,o,a,c,h,u,p;for(e.indent=e.bare?\"\":q,e.level=L,this.spaced=!0,e.scope=new P(null,this,null,null!=(h=e.referencedVars)?h:[]),u=e.locals||[],r=0,s=u.length;s>r;r++)o=u[r],e.scope.parameter(o);return a=[],e.bare||(c=function(){var e,n,r,s;for(r=this.expressions,s=[],i=e=0,n=r.length;n>e&&(t=r[i],t.unwrap()instanceof l);i=++e)s.push(t);return s}.call(this),p=this.expressions.slice(c.length),this.expressions=c,c.length&&(a=this.compileNode(lt(e,{indent:\"\"})),a.push(this.makeCode(\"\\n\"))),this.expressions=p),n=this.compileWithDeclarations(e),e.bare?n:[].concat(a,this.makeCode(\"(function() {\\n\"),n,this.makeCode(\"\\n}).call(this);\\n\"))},t.prototype.compileWithDeclarations=function(e){var t,n,i,r,s,o,a,c,h,u,p,d,f,m;for(r=[],c=[],h=this.expressions,s=o=0,a=h.length;a>o&&(i=h[s],i=i.unwrap(),i instanceof l||i instanceof x);s=++o);return e=lt(e,{level:L}),s&&(d=this.expressions.splice(s,9e9),u=[this.spaced,!1],m=u[0],this.spaced=u[1],p=[this.compileNode(e),m],r=p[0],this.spaced=p[1],this.expressions=d),c=this.compileNode(e),f=e.scope,f.expressions===this&&(n=e.scope.hasDeclarations(),t=f.hasAssignments,n||t?(s&&r.push(this.makeCode(\"\\n\")),r.push(this.makeCode(this.tab+\"var \")),n&&r.push(this.makeCode(f.declaredVariables().join(\", \"))),t&&(n&&r.push(this.makeCode(\",\\n\"+(this.tab+q))),r.push(this.makeCode(f.assignedVariables().join(\",\\n\"+(this.tab+q))))),r.push(this.makeCode(\";\\n\"+(this.spaced?\"\\n\":\"\")))):r.length&&c.length&&r.push(this.makeCode(\"\\n\"))),r.concat(c)},t.wrap=function(e){return 1===e.length&&e[0]instanceof t?e[0]:new t(e)},t}(r),e.Literal=x=function(e){function t(e){this.value=e}return kt(t,e),t.prototype.makeReturn=function(){return this.isStatement()?this:t.__super__.makeReturn.apply(this,arguments)},t.prototype.isAssignable=function(){return g.test(this.value)},t.prototype.isStatement=function(){var e;return\"break\"===(e=this.value)||\"continue\"===e||\"debugger\"===e},t.prototype.isComplex=D,t.prototype.assigns=function(e){return e===this.value},t.prototype.jumps=function(e){return\"break\"!==this.value||(null!=e?e.loop:void 0)||(null!=e?e.block:void 0)?\"continue\"!==this.value||(null!=e?e.loop:void 0)?void 0:this:this},t.prototype.compileNode=function(e){var t,n,i;return n=\"this\"===this.value?(null!=(i=e.scope.method)?i.bound:void 0)?e.scope.method.context:this.value:this.value.reserved?'\"'+this.value+'\"':this.value,t=this.isStatement()?\"\"+this.tab+n+\";\":n,[this.makeCode(t)]},t.prototype.toString=function(){return' \"'+this.value+'\"'},t}(r),e.Undefined=function(e){function t(){return t.__super__.constructor.apply(this,arguments)}return kt(t,e),t.prototype.isAssignable=D,t.prototype.isComplex=D,t.prototype.compileNode=function(e){return[this.makeCode(e.level>=T?\"(void 0)\":\"void 0\")]},t}(r),e.Null=function(e){function t(){return t.__super__.constructor.apply(this,arguments)}return kt(t,e),t.prototype.isAssignable=D,t.prototype.isComplex=D,t.prototype.compileNode=function(){return[this.makeCode(\"null\")]},t}(r),e.Bool=function(e){function t(e){this.val=e}return kt(t,e),t.prototype.isAssignable=D,t.prototype.isComplex=D,t.prototype.compileNode=function(){return[this.makeCode(this.val)]},t}(r),e.Return=M=function(e){function t(e){this.expression=e}return kt(t,e),t.prototype.children=[\"expression\"],t.prototype.isStatement=Q,t.prototype.makeReturn=X,t.prototype.jumps=X,t.prototype.compileToFragments=function(e,n){var i,r;return i=null!=(r=this.expression)?r.makeReturn():void 0,!i||i instanceof t?t.__super__.compileToFragments.call(this,e,n):i.compileToFragments(e,n)},t.prototype.compileNode=function(e){var t,n,i;return t=[],n=null!=(i=this.expression)?\"function\"==typeof i.isYieldReturn?i.isYieldReturn():void 0:void 0,n||t.push(this.makeCode(this.tab+(\"return\"+(this.expression?\" \":\"\")))),this.expression&&(t=t.concat(this.expression.compileToFragments(e,N))),n||t.push(this.makeCode(\";\")),t},t}(r),e.Value=z=function(e){function t(e,n,i){return!n&&e instanceof t?e:(this.base=e,this.properties=n||[],i&&(this[i]=!0),this)}return kt(t,e),t.prototype.children=[\"base\",\"properties\"],t.prototype.add=function(e){return this.properties=this.properties.concat(e),this},t.prototype.hasProperties=function(){return!!this.properties.length},t.prototype.bareLiteral=function(e){return!this.properties.length&&this.base instanceof e},t.prototype.isArray=function(){return this.bareLiteral(n)},t.prototype.isRange=function(){return this.bareLiteral(j)},t.prototype.isComplex=function(){return this.hasProperties()||this.base.isComplex()},t.prototype.isAssignable=function(){return this.hasProperties()||this.base.isAssignable()},t.prototype.isSimpleNumber=function(){return this.bareLiteral(x)&&B.test(this.base.value)},t.prototype.isString=function(){return this.bareLiteral(x)&&y.test(this.base.value)},t.prototype.isRegex=function(){return this.bareLiteral(x)&&v.test(this.base.value)},t.prototype.isAtomic=function(){var e,t,n,i;for(i=this.properties.concat(this.base),e=0,t=i.length;t>e;e++)if(n=i[e],n.soak||n instanceof o)return!1;return!0},t.prototype.isNotCallable=function(){return this.isSimpleNumber()||this.isString()||this.isRegex()||this.isArray()||this.isRange()||this.isSplice()||this.isObject()},t.prototype.isStatement=function(e){return!this.properties.length&&this.base.isStatement(e)},t.prototype.assigns=function(e){return!this.properties.length&&this.base.assigns(e)},t.prototype.jumps=function(e){return!this.properties.length&&this.base.jumps(e)},t.prototype.isObject=function(e){return this.properties.length?!1:this.base instanceof A&&(!e||this.base.generated)},t.prototype.isSplice=function(){var e,t;return t=this.properties,e=t[t.length-1],e instanceof U},t.prototype.looksStatic=function(e){var t;return this.base.value===e&&1===this.properties.length&&\"prototype\"!==(null!=(t=this.properties[0].name)?t.value:void 0)},t.prototype.unwrap=function(){return this.properties.length?this:this.base},t.prototype.cacheReference=function(e){var n,r,s,o,a;return a=this.properties,s=a[a.length-1],2>this.properties.length&&!this.base.isComplex()&&!(null!=s?s.isComplex():void 0)?[this,this]:(n=new t(this.base,this.properties.slice(0,-1)),n.isComplex()&&(r=new x(e.scope.freeVariable(\"base\")),n=new t(new O(new i(r,n)))),s?(s.isComplex()&&(o=new x(e.scope.freeVariable(\"name\")),s=new w(new i(o,s.index)),o=new w(o)),[n.add(s),new t(r||n.base,[o||s])]):[n,r])},t.prototype.compileNode=function(e){var t,n,i,r,s;for(this.base.front=this.front,s=this.properties,t=this.base.compileToFragments(e,s.length?T:null),(this.base instanceof O||s.length)&&B.test(st(t))&&t.push(this.makeCode(\".\")),n=0,i=s.length;i>n;n++)r=s[n],t.push.apply(t,r.compileToFragments(e));return t},t.prototype.unfoldSoak=function(e){return null!=this.unfoldedSoak?this.unfoldedSoak:this.unfoldedSoak=function(n){return function(){var r,s,o,a,c,h,l,p,d,f;if(o=n.base.unfoldSoak(e))return(p=o.body.properties).push.apply(p,n.properties),o;for(d=n.properties,s=a=0,c=d.length;c>a;s=++a)if(h=d[s],h.soak)return h.soak=!1,r=new t(n.base,n.properties.slice(0,s)),f=new t(n.base,n.properties.slice(s)),r.isComplex()&&(l=new x(e.scope.freeVariable(\"ref\")),r=new O(new i(l,r)),f.base=l),new b(new u(r),f,{soak:!0});return!1}}(this)()},t}(r),e.Comment=l=function(e){function t(e){this.comment=e}return kt(t,e),t.prototype.isStatement=Q,t.prototype.makeReturn=X,t.prototype.compileNode=function(e,t){var n,i;return i=this.comment.replace(/^(\\s*)#(?=\\s)/gm,\"$1 *\"),n=\"/*\"+ut(i,this.tab)+(Tt.call(i,\"\\n\")>=0?\"\\n\"+this.tab:\"\")+\" */\",(t||e.level)===L&&(n=e.indent+n),[this.makeCode(\"\\n\"),this.makeCode(n)]},t}(r),e.Call=o=function(e){function n(e,t,n){this.args=null!=t?t:[],this.soak=n,this.isNew=!1,this.isSuper=\"super\"===e,this.variable=this.isSuper?null:e,e instanceof z&&e.isNotCallable()&&e.error(\"literal is not a function\")}return kt(n,e),n.prototype.children=[\"variable\",\"args\"],n.prototype.newInstance=function(){var e,t;return e=(null!=(t=this.variable)?t.base:void 0)||this.variable,e instanceof n&&!e.isNew?e.newInstance():this.isNew=!0,this},n.prototype.superReference=function(e){var n,r,s,o,a,c,h,l;return a=e.scope.namedMethod(),(null!=a?a.klass:void 0)?(o=a.klass,c=a.name,l=a.variable,o.isComplex()&&(s=new x(e.scope.parent.freeVariable(\"base\")),r=new z(new O(new i(s,o))),l.base=r,l.properties.splice(0,o.properties.length)),(c.isComplex()||c instanceof w&&c.index.isAssignable())&&(h=new x(e.scope.parent.freeVariable(\"name\")),c=new w(new i(h,c.index)),l.properties.pop(),l.properties.push(c)),n=[new t(new x(\"__super__\"))],a[\"static\"]&&n.push(new t(new x(\"constructor\"))),n.push(null!=h?new w(h):c),new z(null!=s?s:o,n).compile(e)):(null!=a?a.ctor:void 0)?a.name+\".__super__.constructor\":this.error(\"cannot call super outside of an instance method.\")},n.prototype.superThis=function(e){var t;return t=e.scope.method,t&&!t.klass&&t.context||\"this\"},n.prototype.unfoldSoak=function(e){var t,i,r,s,o,a,c,h,l;if(this.soak){if(this.variable){if(i=yt(e,this,\"variable\"))return i;c=new z(this.variable).cacheReference(e),s=c[0],l=c[1]}else s=new x(this.superReference(e)),l=new z(s);return l=new n(l,this.args),l.isNew=this.isNew,s=new x(\"typeof \"+s.compile(e)+' === \"function\"'),new b(s,new z(l),{soak:!0})}for(t=this,a=[];;)if(t.variable instanceof n)a.push(t),t=t.variable;else{if(!(t.variable instanceof z))break;if(a.push(t),!((t=t.variable.base)instanceof n))break}for(h=a.reverse(),r=0,o=h.length;o>r;r++)t=h[r],i&&(t.variable instanceof n?t.variable=i:t.variable.base=i),i=yt(e,t,\"variable\");return i},n.prototype.compileNode=function(e){var t,n,i,r,s,o,a,c,h,l;if(null!=(h=this.variable)&&(h.front=this.front),r=G.compileSplattedArray(e,this.args,!0),r.length)return this.compileSplat(e,r);for(i=[],l=this.args,n=o=0,a=l.length;a>o;n=++o)t=l[n],n&&i.push(this.makeCode(\", \")),i.push.apply(i,t.compileToFragments(e,E));return s=[],this.isSuper?(c=this.superReference(e)+(\".call(\"+this.superThis(e)),i.length&&(c+=\", \"),s.push(this.makeCode(c))):(this.isNew&&s.push(this.makeCode(\"new \")),s.push.apply(s,this.variable.compileToFragments(e,T)),s.push(this.makeCode(\"(\"))),s.push.apply(s,i),s.push(this.makeCode(\")\")),s},n.prototype.compileSplat=function(e,t){var n,i,r,s,o,a;return this.isSuper?[].concat(this.makeCode(this.superReference(e)+\".apply(\"+this.superThis(e)+\", \"),t,this.makeCode(\")\")):this.isNew?(s=this.tab+q,[].concat(this.makeCode(\"(function(func, args, ctor) {\\n\"+s+\"ctor.prototype = func.prototype;\\n\"+s+\"var child = new ctor, result = func.apply(child, args);\\n\"+s+\"return Object(result) === result ? result : child;\\n\"+this.tab+\"})(\"),this.variable.compileToFragments(e,E),this.makeCode(\", \"),t,this.makeCode(\", function(){})\"))):(n=[],i=new z(this.variable),(o=i.properties.pop())&&i.isComplex()?(a=e.scope.freeVariable(\"ref\"),n=n.concat(this.makeCode(\"(\"+a+\" = \"),i.compileToFragments(e,E),this.makeCode(\")\"),o.compileToFragments(e))):(r=i.compileToFragments(e,T),B.test(st(r))&&(r=this.wrapInBraces(r)),o?(a=st(r),r.push.apply(r,o.compileToFragments(e))):a=\"null\",n=n.concat(r)),n=n.concat(this.makeCode(\".apply(\"+a+\", \"),t,this.makeCode(\")\")))},n}(r),e.Extends=d=function(e){function t(e,t){this.child=e,this.parent=t}return kt(t,e),t.prototype.children=[\"child\",\"parent\"],t.prototype.compileToFragments=function(e){return new o(new z(new x(bt(\"extend\",e))),[this.child,this.parent]).compileToFragments(e)},t}(r),e.Access=t=function(e){function t(e,t){this.name=e,this.name.asKey=!0,this.soak=\"soak\"===t}return kt(t,e),t.prototype.children=[\"name\"],t.prototype.compileToFragments=function(e){var t;return t=this.name.compileToFragments(e),g.test(st(t))?t.unshift(this.makeCode(\".\")):(t.unshift(this.makeCode(\"[\")),t.push(this.makeCode(\"]\"))),t},t.prototype.isComplex=D,t}(r),e.Index=w=function(e){function t(e){this.index=e}return kt(t,e),t.prototype.children=[\"index\"],t.prototype.compileToFragments=function(e){return[].concat(this.makeCode(\"[\"),this.index.compileToFragments(e,N),this.makeCode(\"]\"))},t.prototype.isComplex=function(){return this.index.isComplex()},t}(r),e.Range=j=function(e){function t(e,t,n){this.from=e,this.to=t,this.exclusive=\"exclusive\"===n,this.equals=this.exclusive?\"\":\"=\"}return kt(t,e),t.prototype.children=[\"from\",\"to\"],t.prototype.compileVariables=function(e){var t,n,i,r,s,o;return e=lt(e,{top:!0}),t=tt(e,\"isComplex\"),n=this.cacheToCodeFragments(this.from.cache(e,E,t)),this.fromC=n[0],this.fromVar=n[1],i=this.cacheToCodeFragments(this.to.cache(e,E,t)),this.toC=i[0],this.toVar=i[1],(o=tt(e,\"step\"))&&(r=this.cacheToCodeFragments(o.cache(e,E,t)),this.step=r[0],this.stepVar=r[1]),s=[this.fromVar.match(R),this.toVar.match(R)],this.fromNum=s[0],this.toNum=s[1],this.stepVar?this.stepNum=this.stepVar.match(R):void 0},t.prototype.compileNode=function(e){var t,n,i,r,s,o,a,c,h,l,u,p,d,f;return this.fromVar||this.compileVariables(e),e.index?(a=this.fromNum&&this.toNum,s=tt(e,\"index\"),o=tt(e,\"name\"),h=o&&o!==s,f=s+\" = \"+this.fromC,this.toC!==this.toVar&&(f+=\", \"+this.toC),this.step!==this.stepVar&&(f+=\", \"+this.step),l=[s+\" <\"+this.equals,s+\" >\"+this.equals],c=l[0],r=l[1],n=this.stepNum?pt(this.stepNum[0])>0?c+\" \"+this.toVar:r+\" \"+this.toVar:a?(u=[pt(this.fromNum[0]),pt(this.toNum[0])],i=u[0],d=u[1],u,d>=i?c+\" \"+d:r+\" \"+d):(t=this.stepVar?this.stepVar+\" > 0\":this.fromVar+\" <= \"+this.toVar,t+\" ? \"+c+\" \"+this.toVar+\" : \"+r+\" \"+this.toVar),p=this.stepVar?s+\" += \"+this.stepVar:a?h?d>=i?\"++\"+s:\"--\"+s:d>=i?s+\"++\":s+\"--\":h?t+\" ? ++\"+s+\" : --\"+s:t+\" ? \"+s+\"++ : \"+s+\"--\",h&&(f=o+\" = \"+f),h&&(p=o+\" = \"+p),[this.makeCode(f+\"; \"+n+\"; \"+p)]):this.compileArray(e)},t.prototype.compileArray=function(e){var t,n,i,r,s,o,a,c,h,l,u,p,d;return this.fromNum&&this.toNum&&20>=Math.abs(this.fromNum-this.toNum)?(h=function(){p=[];for(var e=l=+this.fromNum,t=+this.toNum;t>=l?t>=e:e>=t;t>=l?e++:e--)p.push(e);return p}.apply(this),this.exclusive&&h.pop(),[this.makeCode(\"[\"+h.join(\", \")+\"]\")]):(o=this.tab+q,s=e.scope.freeVariable(\"i\",{single:!0}),u=e.scope.freeVariable(\"results\"),c=\"\\n\"+o+u+\" = [];\",this.fromNum&&this.toNum?(e.index=s,n=st(this.compileNode(e))):(d=s+\" = \"+this.fromC+(this.toC!==this.toVar?\", \"+this.toC:\"\"),i=this.fromVar+\" <= \"+this.toVar,n=\"var \"+d+\"; \"+i+\" ? \"+s+\" <\"+this.equals+\" \"+this.toVar+\" : \"+s+\" >\"+this.equals+\" \"+this.toVar+\"; \"+i+\" ? \"+s+\"++ : \"+s+\"--\"),a=\"{ \"+u+\".push(\"+s+\"); }\\n\"+o+\"return \"+u+\";\\n\"+e.indent,r=function(e){return null!=e?e.contains(at):void 0},(r(this.from)||r(this.to))&&(t=\", arguments\"),[this.makeCode(\"(function() {\"+c+\"\\n\"+o+\"for (\"+n+\")\"+a+\"}).apply(this\"+(null!=t?t:\"\")+\")\")])},t}(r),e.Slice=U=function(e){function t(e){this.range=e,t.__super__.constructor.call(this)}return kt(t,e),t.prototype.children=[\"range\"],t.prototype.compileNode=function(e){var t,n,i,r,s,o,a;return s=this.range,o=s.to,i=s.from,r=i&&i.compileToFragments(e,N)||[this.makeCode(\"0\")],o&&(t=o.compileToFragments(e,N),n=st(t),(this.range.exclusive||-1!==+n)&&(a=\", \"+(this.range.exclusive?n:B.test(n)?\"\"+(+n+1):(t=o.compileToFragments(e,T),\"+\"+st(t)+\" + 1 || 9e9\")))),[this.makeCode(\".slice(\"+st(r)+(a||\"\")+\")\")]},t}(r),e.Obj=A=function(e){function n(e,t){this.generated=null!=t?t:!1,this.objects=this.properties=e||[]}return kt(n,e),n.prototype.children=[\"properties\"],n.prototype.compileNode=function(e){var n,r,s,o,a,c,h,u,p,d,f,m,g,v,y,b,k,w,T,C,E;if(T=this.properties,this.generated)for(h=0,g=T.length;g>h;h++)b=T[h],b instanceof z&&b.error(\"cannot have an implicit value in an implicit object\");for(r=p=0,v=T.length;v>p&&(w=T[r],!((w.variable||w).base instanceof O));r=++p);for(s=T.length>r,a=e.indent+=q,m=this.lastNonComment(this.properties),n=[],s&&(k=e.scope.freeVariable(\"obj\"),n.push(this.makeCode(\"(\\n\"+a+k+\" = \"))),n.push(this.makeCode(\"{\"+(0===T.length||0===r?\"}\":\"\\n\"))),o=f=0,y=T.length;y>f;o=++f)w=T[o],o===r&&(0!==o&&n.push(this.makeCode(\"\\n\"+a+\"}\")),n.push(this.makeCode(\",\\n\"))),u=o===T.length-1||o===r-1?\"\":w===m||w instanceof l?\"\\n\":\",\\n\",c=w instanceof l?\"\":a,s&&r>o&&(c+=q),w instanceof i&&w.variable instanceof z&&w.variable.hasProperties()&&w.variable.error(\"invalid object key\"),w instanceof z&&w[\"this\"]&&(w=new i(w.properties[0].name,w,\"object\")),w instanceof l||(r>o?(w instanceof i||(w=new i(w,w,\"object\")),(w.variable.base||w.variable).asKey=!0):(w instanceof i?(d=w.variable,E=w.value):(C=w.base.cache(e),d=C[0],E=C[1]),w=new i(new z(new x(k),[new t(d)]),E))),c&&n.push(this.makeCode(c)),n.push.apply(n,w.compileToFragments(e,L)),u&&n.push(this.makeCode(u));return s?n.push(this.makeCode(\",\\n\"+a+k+\"\\n\"+this.tab+\")\")):0!==T.length&&n.push(this.makeCode(\"\\n\"+this.tab+\"}\")),this.front&&!s?this.wrapInBraces(n):n},n.prototype.assigns=function(e){var t,n,i,r;for(r=this.properties,t=0,n=r.length;n>t;t++)if(i=r[t],i.assigns(e))return!0;return!1},n}(r),e.Arr=n=function(e){function t(e){this.objects=e||[]}return kt(t,e),t.prototype.children=[\"objects\"],t.prototype.compileNode=function(e){var t,n,i,r,s,o,a;if(!this.objects.length)return[this.makeCode(\"[]\")];if(e.indent+=q,t=G.compileSplattedArray(e,this.objects),t.length)return t;for(t=[],n=function(){var t,n,i,r;for(i=this.objects,r=[],t=0,n=i.length;n>t;t++)a=i[t],r.push(a.compileToFragments(e,E));return r}.call(this),r=s=0,o=n.length;o>s;r=++s)i=n[r],r&&t.push(this.makeCode(\", \")),t.push.apply(t,i);return st(t).indexOf(\"\\n\")>=0?(t.unshift(this.makeCode(\"[\\n\"+e.indent)),t.push(this.makeCode(\"\\n\"+this.tab+\"]\"))):(t.unshift(this.makeCode(\"[\")),t.push(this.makeCode(\"]\"))),t},t.prototype.assigns=function(e){var t,n,i,r;for(r=this.objects,t=0,n=r.length;n>t;t++)if(i=r[t],i.assigns(e))return!0;return!1},t}(r),e.Class=a=function(e){function n(e,t,n){this.variable=e,this.parent=t,this.body=null!=n?n:new s,this.boundFuncs=[],this.body.classBody=!0}return kt(n,e),n.prototype.children=[\"variable\",\"parent\",\"body\"],n.prototype.determineName=function(){var e,n,i;return this.variable?(n=this.variable.properties,i=n[n.length-1],e=i?i instanceof t&&i.name.value:this.variable.base.value,Tt.call(V,e)>=0&&this.variable.error(\"class variable name may not be \"+e),e&&(e=g.test(e)&&e)):null},n.prototype.setContext=function(e){return this.body.traverseChildren(!1,function(t){return t.classBody?!1:t instanceof x&&\"this\"===t.value?t.value=e:t instanceof c&&t.bound?t.context=e:void 0})},n.prototype.addBoundFunctions=function(e){var n,i,r,s,o;for(o=this.boundFuncs,i=0,r=o.length;r>i;i++)n=o[i],s=new z(new x(\"this\"),[new t(n)]).compile(e),this.ctor.body.unshift(new x(s+\" = \"+bt(\"bind\",e)+\"(\"+s+\", this)\"))},n.prototype.addProperties=function(e,n,r){var s,o,a,h,l,u;return u=e.base.properties.slice(0),h=function(){var e;for(e=[];o=u.shift();)o instanceof i&&(a=o.variable.base,delete o.context,l=o.value,\"constructor\"===a.value?(this.ctor&&o.error(\"cannot define more than one constructor in a class\"),l.bound&&o.error(\"cannot define a constructor as a bound function\"),l instanceof c?o=this.ctor=l:(this.externalCtor=r.classScope.freeVariable(\"class\"),o=new i(new x(this.externalCtor),l))):o.variable[\"this\"]?l[\"static\"]=!0:(s=a.isComplex()?new w(a):new t(a),o.variable=new z(new x(n),[new t(new x(\"prototype\")),s]),l instanceof c&&l.bound&&(this.boundFuncs.push(a),l.bound=!1))),e.push(o);return e}.call(this),et(h)},n.prototype.walkBody=function(e,t){return this.traverseChildren(!1,function(r){return function(o){var a,c,h,l,u,p,d;if(a=!0,o instanceof n)return!1;if(o instanceof s){for(d=c=o.expressions,h=l=0,u=d.length;u>l;h=++l)p=d[h],p instanceof i&&p.variable.looksStatic(e)?p.value[\"static\"]=!0:p instanceof z&&p.isObject(!0)&&(a=!1,c[h]=r.addProperties(p,e,t));o.expressions=c=rt(c)}return a&&!(o instanceof n)}}(this))},n.prototype.hoistDirectivePrologue=function(){var e,t,n;for(t=0,e=this.body.expressions;(n=e[t])&&n instanceof l||n instanceof z&&n.isString();)++t;return this.directives=e.splice(0,t)},n.prototype.ensureConstructor=function(e){return this.ctor||(this.ctor=new c,this.externalCtor?this.ctor.body.push(new x(this.externalCtor+\".apply(this, arguments)\")):this.parent&&this.ctor.body.push(new x(e+\".__super__.constructor.apply(this, arguments)\")),this.ctor.body.makeReturn(),this.body.expressions.unshift(this.ctor)),this.ctor.ctor=this.ctor.name=e,this.ctor.klass=null,this.ctor.noReturn=!0},n.prototype.compileNode=function(e){var t,n,r,a,h,l,u,p,f;return(a=this.body.jumps())&&a.error(\"Class bodies cannot contain pure statements\"),(n=this.body.contains(at))&&n.error(\"Class bodies shouldn't reference arguments\"),u=this.determineName()||\"_Class\",u.reserved&&(u=\"_\"+u),l=new x(u),r=new c([],s.wrap([this.body])),t=[],e.classScope=r.makeScope(e.scope),this.hoistDirectivePrologue(),this.setContext(u),this.walkBody(u,e),this.ensureConstructor(u),this.addBoundFunctions(e),this.body.spaced=!0,this.body.expressions.push(l),this.parent&&(f=new x(e.classScope.freeVariable(\"superClass\",{reserve:!1})),this.body.expressions.unshift(new d(l,f)),r.params.push(new _(f)),t.push(this.parent)),(p=this.body.expressions).unshift.apply(p,this.directives),h=new O(new o(r,t)),this.variable&&(h=new i(this.variable,h)),h.compileToFragments(e)},n}(r),e.Assign=i=function(e){function n(e,t,n,i){var r,s,o;this.variable=e,this.value=t,this.context=n,this.param=i&&i.param,this.subpattern=i&&i.subpattern,o=s=this.variable.unwrapAll().value,r=Tt.call(V,o)>=0,r&&\"object\"!==this.context&&this.variable.error('variable name may not be \"'+s+'\"')}return kt(n,e),n.prototype.children=[\"variable\",\"value\"],n.prototype.isStatement=function(e){return(null!=e?e.level:void 0)===L&&null!=this.context&&Tt.call(this.context,\"?\")>=0\n},n.prototype.assigns=function(e){return this[\"object\"===this.context?\"value\":\"variable\"].assigns(e)},n.prototype.unfoldSoak=function(e){return yt(e,this,\"variable\")},n.prototype.compileNode=function(e){var t,n,i,r,s,o,a,h,l,u,p,d,f,m;if(i=this.variable instanceof z){if(this.variable.isArray()||this.variable.isObject())return this.compilePatternMatch(e);if(this.variable.isSplice())return this.compileSplice(e);if(\"||=\"===(h=this.context)||\"&&=\"===h||\"?=\"===h)return this.compileConditional(e);if(\"**=\"===(l=this.context)||\"//=\"===l||\"%%=\"===l)return this.compileSpecialMath(e)}return this.value instanceof c&&(this.value[\"static\"]?(this.value.klass=this.variable.base,this.value.name=this.variable.properties[0],this.value.variable=this.variable):(null!=(u=this.variable.properties)?u.length:void 0)>=2&&(p=this.variable.properties,o=p.length>=3?Ct.call(p,0,r=p.length-2):(r=0,[]),a=p[r++],s=p[r++],\"prototype\"===(null!=(d=a.name)?d.value:void 0)&&(this.value.klass=new z(this.variable.base,o),this.value.name=s,this.value.variable=this.variable))),this.context||(m=this.variable.unwrapAll(),m.isAssignable()||this.variable.error('\"'+this.variable.compile(e)+'\" cannot be assigned'),(\"function\"==typeof m.hasProperties?m.hasProperties():void 0)||(this.param?e.scope.add(m.value,\"var\"):e.scope.find(m.value))),f=this.value.compileToFragments(e,E),n=this.variable.compileToFragments(e,E),\"object\"===this.context?n.concat(this.makeCode(\": \"),f):(t=n.concat(this.makeCode(\" \"+(this.context||\"=\")+\" \"),f),E>=e.level?t:this.wrapInBraces(t))},n.prototype.compilePatternMatch=function(e){var i,r,s,o,a,c,h,l,u,d,f,m,v,y,b,k,T,C,N,S,D,R,A,I,_,j,M,B;if(I=e.level===L,j=this.value,y=this.variable.base.objects,!(b=y.length))return s=j.compileToFragments(e),e.level>=F?this.wrapInBraces(s):s;if(l=this.variable.isObject(),I&&1===b&&!((v=y[0])instanceof G))return v instanceof n?(T=v,C=T.variable,h=C.base,v=T.value):h=l?v[\"this\"]?v.properties[0].name:v:new x(0),i=g.test(h.unwrap().value||0),j=new z(j),j.properties.push(new(i?t:w)(h)),N=v.unwrap().value,Tt.call($,N)>=0&&v.error(\"assignment to a reserved word: \"+v.compile(e)),new n(v,j,null,{param:this.param}).compileToFragments(e,L);for(M=j.compileToFragments(e,E),B=st(M),r=[],o=!1,(!g.test(B)||this.variable.assigns(B))&&(r.push([this.makeCode((k=e.scope.freeVariable(\"ref\"))+\" = \")].concat(Ct.call(M))),M=[this.makeCode(k)],B=k),c=d=0,f=y.length;f>d;c=++d){if(v=y[c],h=c,l&&(v instanceof n?(S=v,D=S.variable,h=D.base,v=S.value):v.base instanceof O?(R=new z(v.unwrapAll()).cacheReference(e),v=R[0],h=R[1]):h=v[\"this\"]?v.properties[0].name:v),!o&&v instanceof G)m=v.name.unwrap().value,v=v.unwrap(),_=b+\" <= \"+B+\".length ? \"+bt(\"slice\",e)+\".call(\"+B+\", \"+c,(A=b-c-1)?(u=e.scope.freeVariable(\"i\",{single:!0}),_+=\", \"+u+\" = \"+B+\".length - \"+A+\") : (\"+u+\" = \"+c+\", [])\"):_+=\") : []\",_=new x(_),o=u+\"++\";else{if(!o&&v instanceof p){(A=b-c-1)&&(1===A?o=B+\".length - 1\":(u=e.scope.freeVariable(\"i\",{single:!0}),_=new x(u+\" = \"+B+\".length - \"+A),o=u+\"++\",r.push(_.compileToFragments(e,E))));continue}m=v.unwrap().value,(v instanceof G||v instanceof p)&&v.error(\"multiple splats/expansions are disallowed in an assignment\"),\"number\"==typeof h?(h=new x(o||h),i=!1):i=l&&g.test(h.unwrap().value||0),_=new z(new x(B),[new(i?t:w)(h)])}null!=m&&Tt.call($,m)>=0&&v.error(\"assignment to a reserved word: \"+v.compile(e)),r.push(new n(v,_,null,{param:this.param,subpattern:!0}).compileToFragments(e,E))}return I||this.subpattern||r.push(M),a=this.joinFragmentArrays(r,\", \"),E>e.level?a:this.wrapInBraces(a)},n.prototype.compileConditional=function(e){var t,i,r,s;return r=this.variable.cacheReference(e),i=r[0],s=r[1],!i.properties.length&&i.base instanceof x&&\"this\"!==i.base.value&&!e.scope.check(i.base.value)&&this.variable.error('the variable \"'+i.base.value+\"\\\" can't be assigned with \"+this.context+\" because it has not been declared before\"),Tt.call(this.context,\"?\")>=0?(e.isExistentialEquals=!0,new b(new u(i),s,{type:\"if\"}).addElse(new n(s,this.value,\"=\")).compileToFragments(e)):(t=new I(this.context.slice(0,-1),i,new n(s,this.value,\"=\")).compileToFragments(e),E>=e.level?t:this.wrapInBraces(t))},n.prototype.compileSpecialMath=function(e){var t,i,r;return i=this.variable.cacheReference(e),t=i[0],r=i[1],new n(t,new I(this.context.slice(0,-1),r,this.value)).compileToFragments(e)},n.prototype.compileSplice=function(e){var t,n,i,r,s,o,a,c,h,l,u,p;return a=this.variable.properties.pop().range,i=a.from,l=a.to,n=a.exclusive,o=this.variable.compile(e),i?(c=this.cacheToCodeFragments(i.cache(e,F)),r=c[0],s=c[1]):r=s=\"0\",l?i instanceof z&&i.isSimpleNumber()&&l instanceof z&&l.isSimpleNumber()?(l=l.compile(e)-s,n||(l+=1)):(l=l.compile(e,T)+\" - \"+s,n||(l+=\" + 1\")):l=\"9e9\",h=this.value.cache(e,E),u=h[0],p=h[1],t=[].concat(this.makeCode(\"[].splice.apply(\"+o+\", [\"+r+\", \"+l+\"].concat(\"),u,this.makeCode(\")), \"),p),e.level>L?this.wrapInBraces(t):t},n}(r),e.Code=c=function(e){function t(e,t,n){this.params=e||[],this.body=t||new s,this.bound=\"boundfunc\"===n,this.isGenerator=!!this.body.contains(function(e){var t;return e instanceof I&&(\"yield\"===(t=e.operator)||\"yield*\"===t)})}return kt(t,e),t.prototype.children=[\"params\",\"body\"],t.prototype.isStatement=function(){return!!this.ctor},t.prototype.jumps=D,t.prototype.makeScope=function(e){return new P(e,this.body,this)},t.prototype.compileNode=function(e){var r,a,c,h,l,u,d,f,m,g,v,y,k,w,C,E,F,N,L,S,D,R,A,O,$,j,M,B,V,P,U,G,H;if(this.bound&&(null!=(A=e.scope.method)?A.bound:void 0)&&(this.context=e.scope.method.context),this.bound&&!this.context)return this.context=\"_this\",H=new t([new _(new x(this.context))],new s([this])),a=new o(H,[new x(\"this\")]),a.updateLocationDataIfMissing(this.locationData),a.compileNode(e);for(e.scope=tt(e,\"classScope\")||this.makeScope(e.scope),e.scope.shared=tt(e,\"sharedScope\"),e.indent+=q,delete e.bare,delete e.isExistentialEquals,L=[],h=[],O=this.params,u=0,m=O.length;m>u;u++)N=O[u],N instanceof p||e.scope.parameter(N.asReference(e));for($=this.params,d=0,g=$.length;g>d;d++)if(N=$[d],N.splat||N instanceof p){for(j=this.params,f=0,v=j.length;v>f;f++)F=j[f],F instanceof p||!F.name.value||e.scope.add(F.name.value,\"var\",!0);V=new i(new z(new n(function(){var t,n,i,r;for(i=this.params,r=[],n=0,t=i.length;t>n;n++)F=i[n],r.push(F.asReference(e));return r}.call(this))),new z(new x(\"arguments\")));break}for(M=this.params,E=0,y=M.length;y>E;E++)N=M[E],N.isComplex()?(U=R=N.asReference(e),N.value&&(U=new I(\"?\",R,N.value)),h.push(new i(new z(N.name),U,\"=\",{param:!0}))):(R=N,N.value&&(C=new x(R.name.value+\" == null\"),U=new i(new z(N.name),N.value,\"=\"),h.push(new b(C,U)))),V||L.push(R);for(G=this.body.isEmpty(),V&&h.unshift(V),h.length&&(B=this.body.expressions).unshift.apply(B,h),l=S=0,k=L.length;k>S;l=++S)F=L[l],L[l]=F.compileToFragments(e),e.scope.parameter(st(L[l]));for(P=[],this.eachParamName(function(e,t){return Tt.call(P,e)>=0&&t.error(\"multiple parameters named \"+e),P.push(e)}),G||this.noReturn||this.body.makeReturn(),c=\"function\",this.isGenerator&&(c+=\"*\"),this.ctor&&(c+=\" \"+this.name),c+=\"(\",r=[this.makeCode(c)],l=D=0,w=L.length;w>D;l=++D)F=L[l],l&&r.push(this.makeCode(\", \")),r.push.apply(r,F);return r.push(this.makeCode(\") {\")),this.body.isEmpty()||(r=r.concat(this.makeCode(\"\\n\"),this.body.compileWithDeclarations(e),this.makeCode(\"\\n\"+this.tab))),r.push(this.makeCode(\"}\")),this.ctor?[this.makeCode(this.tab)].concat(Ct.call(r)):this.front||e.level>=T?this.wrapInBraces(r):r},t.prototype.eachParamName=function(e){var t,n,i,r,s;for(r=this.params,s=[],t=0,n=r.length;n>t;t++)i=r[t],s.push(i.eachName(e));return s},t.prototype.traverseChildren=function(e,n){return e?t.__super__.traverseChildren.call(this,e,n):void 0},t}(r),e.Param=_=function(e){function t(e,t,n){var i,r;this.name=e,this.value=t,this.splat=n,r=i=this.name.unwrapAll().value,Tt.call(V,r)>=0&&this.name.error('parameter name \"'+i+'\" is not allowed')}return kt(t,e),t.prototype.children=[\"name\",\"value\"],t.prototype.compileToFragments=function(e){return this.name.compileToFragments(e,E)},t.prototype.asReference=function(e){var t,n;return this.reference?this.reference:(n=this.name,n[\"this\"]?(t=n.properties[0].name.value,t.reserved&&(t=\"_\"+t),n=new x(e.scope.freeVariable(t))):n.isComplex()&&(n=new x(e.scope.freeVariable(\"arg\"))),n=new z(n),this.splat&&(n=new G(n)),n.updateLocationDataIfMissing(this.locationData),this.reference=n)},t.prototype.isComplex=function(){return this.name.isComplex()},t.prototype.eachName=function(e,t){var n,r,s,o,a,c;if(null==t&&(t=this.name),n=function(t){return e(\"@\"+t.properties[0].name.value,t)},t instanceof x)return e(t.value,t);if(t instanceof z)return n(t);for(c=t.objects,r=0,s=c.length;s>r;r++)a=c[r],a instanceof i?this.eachName(e,a.value.unwrap()):a instanceof G?(o=a.name.unwrap(),e(o.value,o)):a instanceof z?a.isArray()||a.isObject()?this.eachName(e,a.base):a[\"this\"]?n(a):e(a.base.value,a.base):a instanceof p||a.error(\"illegal parameter \"+a.compile())},t}(r),e.Splat=G=function(e){function t(e){this.name=e.compile?e:new x(e)}return kt(t,e),t.prototype.children=[\"name\"],t.prototype.isAssignable=Q,t.prototype.assigns=function(e){return this.name.assigns(e)},t.prototype.compileToFragments=function(e){return this.name.compileToFragments(e)},t.prototype.unwrap=function(){return this.name},t.compileSplattedArray=function(e,n,i){var r,s,o,a,c,h,l,u,p,d,f;for(l=-1;(f=n[++l])&&!(f instanceof t););if(l>=n.length)return[];if(1===n.length)return f=n[0],c=f.compileToFragments(e,E),i?c:[].concat(f.makeCode(bt(\"slice\",e)+\".call(\"),c,f.makeCode(\")\"));for(r=n.slice(l),h=u=0,d=r.length;d>u;h=++u)f=r[h],o=f.compileToFragments(e,E),r[h]=f instanceof t?[].concat(f.makeCode(bt(\"slice\",e)+\".call(\"),o,f.makeCode(\")\")):[].concat(f.makeCode(\"[\"),o,f.makeCode(\"]\"));return 0===l?(f=n[0],a=f.joinFragmentArrays(r.slice(1),\", \"),r[0].concat(f.makeCode(\".concat(\"),a,f.makeCode(\")\"))):(s=function(){var t,i,r,s;for(r=n.slice(0,l),s=[],t=0,i=r.length;i>t;t++)f=r[t],s.push(f.compileToFragments(e,E));return s}(),s=n[0].joinFragmentArrays(s,\", \"),a=n[l].joinFragmentArrays(r,\", \"),p=n[n.length-1],[].concat(n[0].makeCode(\"[\"),s,n[l].makeCode(\"].concat(\"),a,p.makeCode(\")\")))},t}(r),e.Expansion=p=function(e){function t(){return t.__super__.constructor.apply(this,arguments)}return kt(t,e),t.prototype.isComplex=D,t.prototype.compileNode=function(){return this.error(\"Expansion must be used inside a destructuring assignment or parameter list\")},t.prototype.asReference=function(){return this},t.prototype.eachName=function(){},t}(r),e.While=J=function(e){function t(e,t){this.condition=(null!=t?t.invert:void 0)?e.invert():e,this.guard=null!=t?t.guard:void 0}return kt(t,e),t.prototype.children=[\"condition\",\"guard\",\"body\"],t.prototype.isStatement=Q,t.prototype.makeReturn=function(e){return e?t.__super__.makeReturn.apply(this,arguments):(this.returns=!this.jumps({loop:!0}),this)},t.prototype.addBody=function(e){return this.body=e,this},t.prototype.jumps=function(){var e,t,n,i,r;if(e=this.body.expressions,!e.length)return!1;for(t=0,i=e.length;i>t;t++)if(r=e[t],n=r.jumps({loop:!0}))return n;return!1},t.prototype.compileNode=function(e){var t,n,i,r;return e.indent+=q,r=\"\",n=this.body,n.isEmpty()?n=this.makeCode(\"\"):(this.returns&&(n.makeReturn(i=e.scope.freeVariable(\"results\")),r=\"\"+this.tab+i+\" = [];\\n\"),this.guard&&(n.expressions.length>1?n.expressions.unshift(new b(new O(this.guard).invert(),new x(\"continue\"))):this.guard&&(n=s.wrap([new b(this.guard,n)]))),n=[].concat(this.makeCode(\"\\n\"),n.compileToFragments(e,L),this.makeCode(\"\\n\"+this.tab))),t=[].concat(this.makeCode(r+this.tab+\"while (\"),this.condition.compileToFragments(e,N),this.makeCode(\") {\"),n,this.makeCode(\"}\")),this.returns&&t.push(this.makeCode(\"\\n\"+this.tab+\"return \"+i+\";\")),t},t}(r),e.Op=I=function(e){function n(e,t,n,i){if(\"in\"===e)return new k(t,n);if(\"do\"===e)return this.generateDo(t);if(\"new\"===e){if(t instanceof o&&!t[\"do\"]&&!t.isNew)return t.newInstance();(t instanceof c&&t.bound||t[\"do\"])&&(t=new O(t))}return this.operator=r[e]||e,this.first=t,this.second=n,this.flip=!!i,this}var r,s;return kt(n,e),r={\"==\":\"===\",\"!=\":\"!==\",of:\"in\",yieldfrom:\"yield*\"},s={\"!==\":\"===\",\"===\":\"!==\"},n.prototype.children=[\"first\",\"second\"],n.prototype.isSimpleNumber=D,n.prototype.isYield=function(){var e;return\"yield\"===(e=this.operator)||\"yield*\"===e},n.prototype.isYieldReturn=function(){return this.isYield()&&this.first instanceof M},n.prototype.isUnary=function(){return!this.second},n.prototype.isComplex=function(){var e;return!(this.isUnary()&&(\"+\"===(e=this.operator)||\"-\"===e)&&this.first instanceof z&&this.first.isSimpleNumber())},n.prototype.isChainable=function(){var e;return\"<\"===(e=this.operator)||\">\"===e||\">=\"===e||\"<=\"===e||\"===\"===e||\"!==\"===e},n.prototype.invert=function(){var e,t,i,r,o;if(this.isChainable()&&this.first.isChainable()){for(e=!0,t=this;t&&t.operator;)e&&(e=t.operator in s),t=t.first;if(!e)return new O(this).invert();for(t=this;t&&t.operator;)t.invert=!t.invert,t.operator=s[t.operator],t=t.first;return this}return(r=s[this.operator])?(this.operator=r,this.first.unwrap()instanceof n&&this.first.invert(),this):this.second?new O(this).invert():\"!\"===this.operator&&(i=this.first.unwrap())instanceof n&&(\"!\"===(o=i.operator)||\"in\"===o||\"instanceof\"===o)?i:new n(\"!\",this)},n.prototype.unfoldSoak=function(e){var t;return(\"++\"===(t=this.operator)||\"--\"===t||\"delete\"===t)&&yt(e,this,\"first\")},n.prototype.generateDo=function(e){var t,n,r,s,a,h,l,u;for(h=[],n=e instanceof i&&(l=e.value.unwrap())instanceof c?l:e,u=n.params||[],r=0,s=u.length;s>r;r++)a=u[r],a.value?(h.push(a.value),delete a.value):h.push(a);return t=new o(e,h),t[\"do\"]=!0,t},n.prototype.compileNode=function(e){var t,n,i,r,s,o;if(n=this.isChainable()&&this.first.isChainable(),n||(this.first.front=this.front),\"delete\"===this.operator&&e.scope.check(this.first.unwrapAll().value)&&this.error(\"delete operand may not be argument or var\"),(\"--\"===(r=this.operator)||\"++\"===r)&&(s=this.first.unwrapAll().value,Tt.call(V,s)>=0)&&this.error('cannot increment/decrement \"'+this.first.unwrapAll().value+'\"'),this.isYield())return this.compileYield(e);if(this.isUnary())return this.compileUnary(e);if(n)return this.compileChain(e);switch(this.operator){case\"?\":return this.compileExistence(e);case\"**\":return this.compilePower(e);case\"//\":return this.compileFloorDivision(e);case\"%%\":return this.compileModulo(e);default:return i=this.first.compileToFragments(e,F),o=this.second.compileToFragments(e,F),t=[].concat(i,this.makeCode(\" \"+this.operator+\" \"),o),F>=e.level?t:this.wrapInBraces(t)}},n.prototype.compileChain=function(e){var t,n,i,r;return i=this.first.second.cache(e),this.first.second=i[0],r=i[1],n=this.first.compileToFragments(e,F),t=n.concat(this.makeCode(\" \"+(this.invert?\"&&\":\"||\")+\" \"),r.compileToFragments(e),this.makeCode(\" \"+this.operator+\" \"),this.second.compileToFragments(e,F)),this.wrapInBraces(t)},n.prototype.compileExistence=function(e){var t,n;return this.first.isComplex()?(n=new x(e.scope.freeVariable(\"ref\")),t=new O(new i(n,this.first))):(t=this.first,n=t),new b(new u(t),n,{type:\"if\"}).addElse(this.second).compileToFragments(e)},n.prototype.compileUnary=function(e){var t,i,r;return i=[],t=this.operator,i.push([this.makeCode(t)]),\"!\"===t&&this.first instanceof u?(this.first.negated=!this.first.negated,this.first.compileToFragments(e)):e.level>=T?new O(this).compileToFragments(e):(r=\"+\"===t||\"-\"===t,(\"new\"===t||\"typeof\"===t||\"delete\"===t||r&&this.first instanceof n&&this.first.operator===t)&&i.push([this.makeCode(\" \")]),(r&&this.first instanceof n||\"new\"===t&&this.first.isStatement(e))&&(this.first=new O(this.first)),i.push(this.first.compileToFragments(e,F)),this.flip&&i.reverse(),this.joinFragmentArrays(i,\"\"))},n.prototype.compileYield=function(e){var t,n;return n=[],t=this.operator,null==e.scope.parent&&this.error(\"yield statements must occur within a function generator.\"),Tt.call(Object.keys(this.first),\"expression\")>=0&&!(this.first instanceof W)?this.isYieldReturn()?n.push(this.first.compileToFragments(e,L)):null!=this.first.expression&&n.push(this.first.expression.compileToFragments(e,F)):(n.push([this.makeCode(\"(\"+t+\" \")]),n.push(this.first.compileToFragments(e,F)),n.push([this.makeCode(\")\")])),this.joinFragmentArrays(n,\"\")},n.prototype.compilePower=function(e){var n;return n=new z(new x(\"Math\"),[new t(new x(\"pow\"))]),new o(n,[this.first,this.second]).compileToFragments(e)},n.prototype.compileFloorDivision=function(e){var i,r;return r=new z(new x(\"Math\"),[new t(new x(\"floor\"))]),i=new n(\"/\",this.first,this.second),new o(r,[i]).compileToFragments(e)},n.prototype.compileModulo=function(e){var t;return t=new z(new x(bt(\"modulo\",e))),new o(t,[this.first,this.second]).compileToFragments(e)},n.prototype.toString=function(e){return n.__super__.toString.call(this,e,this.constructor.name+\" \"+this.operator)},n}(r),e.In=k=function(e){function t(e,t){this.object=e,this.array=t}return kt(t,e),t.prototype.children=[\"object\",\"array\"],t.prototype.invert=S,t.prototype.compileNode=function(e){var t,n,i,r,s;if(this.array instanceof z&&this.array.isArray()&&this.array.base.objects.length){for(s=this.array.base.objects,n=0,i=s.length;i>n;n++)if(r=s[n],r instanceof G){t=!0;break}if(!t)return this.compileOrTest(e)}return this.compileLoopTest(e)},t.prototype.compileOrTest=function(e){var t,n,i,r,s,o,a,c,h,l,u,p;for(c=this.object.cache(e,F),u=c[0],a=c[1],h=this.negated?[\" !== \",\" && \"]:[\" === \",\" || \"],t=h[0],n=h[1],p=[],l=this.array.base.objects,i=s=0,o=l.length;o>s;i=++s)r=l[i],i&&p.push(this.makeCode(n)),p=p.concat(i?a:u,this.makeCode(t),r.compileToFragments(e,T));return F>e.level?p:this.wrapInBraces(p)},t.prototype.compileLoopTest=function(e){var t,n,i,r;return i=this.object.cache(e,E),r=i[0],n=i[1],t=[].concat(this.makeCode(bt(\"indexOf\",e)+\".call(\"),this.array.compileToFragments(e,E),this.makeCode(\", \"),n,this.makeCode(\") \"+(this.negated?\"< 0\":\">= 0\"))),st(r)===st(n)?t:(t=r.concat(this.makeCode(\", \"),t),E>e.level?t:this.wrapInBraces(t))},t.prototype.toString=function(e){return t.__super__.toString.call(this,e,this.constructor.name+(this.negated?\"!\":\"\"))},t}(r),e.Try=Y=function(e){function t(e,t,n,i){this.attempt=e,this.errorVariable=t,this.recovery=n,this.ensure=i}return kt(t,e),t.prototype.children=[\"attempt\",\"recovery\",\"ensure\"],t.prototype.isStatement=Q,t.prototype.jumps=function(e){var t;return this.attempt.jumps(e)||(null!=(t=this.recovery)?t.jumps(e):void 0)},t.prototype.makeReturn=function(e){return this.attempt&&(this.attempt=this.attempt.makeReturn(e)),this.recovery&&(this.recovery=this.recovery.makeReturn(e)),this},t.prototype.compileNode=function(e){var t,n,r,s;return e.indent+=q,s=this.attempt.compileToFragments(e,L),t=this.recovery?(r=new x(\"_error\"),this.errorVariable?this.recovery.unshift(new i(this.errorVariable,r)):void 0,[].concat(this.makeCode(\" catch (\"),r.compileToFragments(e),this.makeCode(\") {\\n\"),this.recovery.compileToFragments(e,L),this.makeCode(\"\\n\"+this.tab+\"}\"))):this.ensure||this.recovery?[]:[this.makeCode(\" catch (_error) {}\")],n=this.ensure?[].concat(this.makeCode(\" finally {\\n\"),this.ensure.compileToFragments(e,L),this.makeCode(\"\\n\"+this.tab+\"}\")):[],[].concat(this.makeCode(this.tab+\"try {\\n\"),s,this.makeCode(\"\\n\"+this.tab+\"}\"),t,n)},t}(r),e.Throw=W=function(e){function t(e){this.expression=e}return kt(t,e),t.prototype.children=[\"expression\"],t.prototype.isStatement=Q,t.prototype.jumps=D,t.prototype.makeReturn=X,t.prototype.compileNode=function(e){return[].concat(this.makeCode(this.tab+\"throw \"),this.expression.compileToFragments(e),this.makeCode(\";\"))},t}(r),e.Existence=u=function(e){function t(e){this.expression=e}return kt(t,e),t.prototype.children=[\"expression\"],t.prototype.invert=S,t.prototype.compileNode=function(e){var t,n,i,r;return this.expression.front=this.front,i=this.expression.compile(e,F),g.test(i)&&!e.scope.check(i)?(r=this.negated?[\"===\",\"||\"]:[\"!==\",\"&&\"],t=r[0],n=r[1],i=\"typeof \"+i+\" \"+t+' \"undefined\" '+n+\" \"+i+\" \"+t+\" null\"):i=i+\" \"+(this.negated?\"==\":\"!=\")+\" null\",[this.makeCode(C>=e.level?i:\"(\"+i+\")\")]},t}(r),e.Parens=O=function(e){function t(e){this.body=e}return kt(t,e),t.prototype.children=[\"body\"],t.prototype.unwrap=function(){return this.body},t.prototype.isComplex=function(){return this.body.isComplex()},t.prototype.compileNode=function(e){var t,n,i;return n=this.body.unwrap(),n instanceof z&&n.isAtomic()?(n.front=this.front,n.compileToFragments(e)):(i=n.compileToFragments(e,N),t=F>e.level&&(n instanceof I||n instanceof o||n instanceof f&&n.returns),t?i:this.wrapInBraces(i))},t}(r),e.For=f=function(e){function t(e,t){var n;this.source=t.source,this.guard=t.guard,this.step=t.step,this.name=t.name,this.index=t.index,this.body=s.wrap([e]),this.own=!!t.own,this.object=!!t.object,this.object&&(n=[this.index,this.name],this.name=n[0],this.index=n[1]),this.index instanceof z&&this.index.error(\"index cannot be a pattern matching expression\"),this.range=this.source instanceof z&&this.source.base instanceof j&&!this.source.properties.length,this.pattern=this.name instanceof z,this.range&&this.index&&this.index.error(\"indexes do not apply to range loops\"),this.range&&this.pattern&&this.name.error(\"cannot pattern match over range loops\"),this.own&&!this.object&&this.name.error(\"cannot use own with for-in\"),this.returns=!1}return kt(t,e),t.prototype.children=[\"body\",\"source\",\"guard\",\"step\"],t.prototype.compileNode=function(e){var t,n,r,o,a,c,h,l,u,p,d,f,m,v,y,k,w,T,C,F,N,S,D,A,I,_,$,j,B,V,P,U,G,H;return t=s.wrap([this.body]),D=t.expressions,T=D[D.length-1],(null!=T?T.jumps():void 0)instanceof M&&(this.returns=!1),B=this.range?this.source.base:this.source,j=e.scope,this.pattern||(F=this.name&&this.name.compile(e,E)),v=this.index&&this.index.compile(e,E),F&&!this.pattern&&j.find(F),v&&j.find(v),this.returns&&($=j.freeVariable(\"results\")),y=this.object&&v||j.freeVariable(\"i\",{single:!0}),k=this.range&&F||v||y,w=k!==y?k+\" = \":\"\",this.step&&!this.range&&(A=this.cacheToCodeFragments(this.step.cache(e,E,ot)),V=A[0],U=A[1],P=U.match(R)),this.pattern&&(F=y),H=\"\",d=\"\",h=\"\",f=this.tab+q,this.range?p=B.compileToFragments(lt(e,{index:y,name:F,step:this.step,isComplex:ot})):(G=this.source.compile(e,E),!F&&!this.own||g.test(G)||(h+=\"\"+this.tab+(S=j.freeVariable(\"ref\"))+\" = \"+G+\";\\n\",G=S),F&&!this.pattern&&(N=F+\" = \"+G+\"[\"+k+\"]\"),this.object||(V!==U&&(h+=\"\"+this.tab+V+\";\\n\"),this.step&&P&&(u=0>pt(P[0]))||(C=j.freeVariable(\"len\")),a=\"\"+w+y+\" = 0, \"+C+\" = \"+G+\".length\",c=\"\"+w+y+\" = \"+G+\".length - 1\",r=y+\" < \"+C,o=y+\" >= 0\",this.step?(P?u&&(r=o,a=c):(r=U+\" > 0 ? \"+r+\" : \"+o,a=\"(\"+U+\" > 0 ? (\"+a+\") : \"+c+\")\"),m=y+\" += \"+U):m=\"\"+(k!==y?\"++\"+y:y+\"++\"),p=[this.makeCode(a+\"; \"+r+\"; \"+w+m)])),this.returns&&(I=\"\"+this.tab+$+\" = [];\\n\",_=\"\\n\"+this.tab+\"return \"+$+\";\",t.makeReturn($)),this.guard&&(t.expressions.length>1?t.expressions.unshift(new b(new O(this.guard).invert(),new x(\"continue\"))):this.guard&&(t=s.wrap([new b(this.guard,t)]))),this.pattern&&t.expressions.unshift(new i(this.name,new x(G+\"[\"+k+\"]\"))),l=[].concat(this.makeCode(h),this.pluckDirectCall(e,t)),N&&(H=\"\\n\"+f+N+\";\"),this.object&&(p=[this.makeCode(k+\" in \"+G)],this.own&&(d=\"\\n\"+f+\"if (!\"+bt(\"hasProp\",e)+\".call(\"+G+\", \"+k+\")) continue;\")),n=t.compileToFragments(lt(e,{indent:f}),L),n&&n.length>0&&(n=[].concat(this.makeCode(\"\\n\"),n,this.makeCode(\"\\n\"))),[].concat(l,this.makeCode(\"\"+(I||\"\")+this.tab+\"for (\"),p,this.makeCode(\") {\"+d+H),n,this.makeCode(this.tab+\"}\"+(_||\"\")))},t.prototype.pluckDirectCall=function(e,t){var n,r,s,a,h,l,u,p,d,f,m,g,v,y,b,k;for(r=[],d=t.expressions,h=l=0,u=d.length;u>l;h=++l)s=d[h],s=s.unwrapAll(),s instanceof o&&(k=null!=(f=s.variable)?f.unwrapAll():void 0,(k instanceof c||k instanceof z&&(null!=(m=k.base)?m.unwrapAll():void 0)instanceof c&&1===k.properties.length&&(\"call\"===(g=null!=(v=k.properties[0].name)?v.value:void 0)||\"apply\"===g))&&(a=(null!=(y=k.base)?y.unwrapAll():void 0)||k,p=new x(e.scope.freeVariable(\"fn\")),n=new z(p),k.base&&(b=[n,k],k.base=b[0],n=b[1]),t.expressions[h]=new o(n,s.args),r=r.concat(this.makeCode(this.tab),new i(p,a).compileToFragments(e,L),this.makeCode(\";\\n\"))));return r},t}(J),e.Switch=H=function(e){function t(e,t,n){this.subject=e,this.cases=t,this.otherwise=n}return kt(t,e),t.prototype.children=[\"subject\",\"cases\",\"otherwise\"],t.prototype.isStatement=Q,t.prototype.jumps=function(e){var t,n,i,r,s,o,a,c;for(null==e&&(e={block:!0}),o=this.cases,i=0,s=o.length;s>i;i++)if(a=o[i],n=a[0],t=a[1],r=t.jumps(e))return r;return null!=(c=this.otherwise)?c.jumps(e):void 0},t.prototype.makeReturn=function(e){var t,n,i,r,o;for(r=this.cases,t=0,n=r.length;n>t;t++)i=r[t],i[1].makeReturn(e);return e&&(this.otherwise||(this.otherwise=new s([new x(\"void 0\")]))),null!=(o=this.otherwise)&&o.makeReturn(e),this},t.prototype.compileNode=function(e){var t,n,i,r,s,o,a,c,h,l,u,p,d,f,m,g;for(c=e.indent+q,h=e.indent=c+q,o=[].concat(this.makeCode(this.tab+\"switch (\"),this.subject?this.subject.compileToFragments(e,N):this.makeCode(\"false\"),this.makeCode(\") {\\n\")),f=this.cases,a=l=0,p=f.length;p>l;a=++l){for(m=f[a],r=m[0],t=m[1],g=rt([r]),u=0,d=g.length;d>u;u++)i=g[u],this.subject||(i=i.invert()),o=o.concat(this.makeCode(c+\"case \"),i.compileToFragments(e,N),this.makeCode(\":\\n\"));if((n=t.compileToFragments(e,L)).length>0&&(o=o.concat(n,this.makeCode(\"\\n\"))),a===this.cases.length-1&&!this.otherwise)break;s=this.lastNonComment(t.expressions),s instanceof M||s instanceof x&&s.jumps()&&\"debugger\"!==s.value||o.push(i.makeCode(h+\"break;\\n\"))}return this.otherwise&&this.otherwise.expressions.length&&o.push.apply(o,[this.makeCode(c+\"default:\\n\")].concat(Ct.call(this.otherwise.compileToFragments(e,L)),[this.makeCode(\"\\n\")])),o.push(this.makeCode(this.tab+\"}\")),o},t}(r),e.If=b=function(e){function t(e,t,n){this.body=t,null==n&&(n={}),this.condition=\"unless\"===n.type?e.invert():e,this.elseBody=null,this.isChain=!1,this.soak=n.soak}return kt(t,e),t.prototype.children=[\"condition\",\"body\",\"elseBody\"],t.prototype.bodyNode=function(){var e;return null!=(e=this.body)?e.unwrap():void 0},t.prototype.elseBodyNode=function(){var e;return null!=(e=this.elseBody)?e.unwrap():void 0},t.prototype.addElse=function(e){return this.isChain?this.elseBodyNode().addElse(e):(this.isChain=e instanceof t,this.elseBody=this.ensureBlock(e),this.elseBody.updateLocationDataIfMissing(e.locationData)),this},t.prototype.isStatement=function(e){var t;return(null!=e?e.level:void 0)===L||this.bodyNode().isStatement(e)||(null!=(t=this.elseBodyNode())?t.isStatement(e):void 0)},t.prototype.jumps=function(e){var t;return this.body.jumps(e)||(null!=(t=this.elseBody)?t.jumps(e):void 0)},t.prototype.compileNode=function(e){return this.isStatement(e)?this.compileStatement(e):this.compileExpression(e)},t.prototype.makeReturn=function(e){return e&&(this.elseBody||(this.elseBody=new s([new x(\"void 0\")]))),this.body&&(this.body=new s([this.body.makeReturn(e)])),this.elseBody&&(this.elseBody=new s([this.elseBody.makeReturn(e)])),this},t.prototype.ensureBlock=function(e){return e instanceof s?e:new s([e])},t.prototype.compileStatement=function(e){var n,i,r,s,o,a,c;return r=tt(e,\"chainChild\"),(o=tt(e,\"isExistentialEquals\"))?new t(this.condition.invert(),this.elseBodyNode(),{type:\"if\"}).compileToFragments(e):(c=e.indent+q,s=this.condition.compileToFragments(e,N),i=this.ensureBlock(this.body).compileToFragments(lt(e,{indent:c})),a=[].concat(this.makeCode(\"if (\"),s,this.makeCode(\") {\\n\"),i,this.makeCode(\"\\n\"+this.tab+\"}\")),r||a.unshift(this.makeCode(this.tab)),this.elseBody?(n=a.concat(this.makeCode(\" else \")),this.isChain?(e.chainChild=!0,n=n.concat(this.elseBody.unwrap().compileToFragments(e,L))):n=n.concat(this.makeCode(\"{\\n\"),this.elseBody.compileToFragments(lt(e,{indent:c}),L),this.makeCode(\"\\n\"+this.tab+\"}\")),n):a)},t.prototype.compileExpression=function(e){var t,n,i,r;return i=this.condition.compileToFragments(e,C),n=this.bodyNode().compileToFragments(e,E),t=this.elseBodyNode()?this.elseBodyNode().compileToFragments(e,E):[this.makeCode(\"void 0\")],r=i.concat(this.makeCode(\" ? \"),n,this.makeCode(\" : \"),t),e.level>=C?this.wrapInBraces(r):r},t.prototype.unfoldSoak=function(){return this.soak&&this},t}(r),K={extend:function(e){return\"function(child, parent) { for (var key in parent) { if (\"+bt(\"hasProp\",e)+\".call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }\"},bind:function(){return\"function(fn, me){ return function(){ return fn.apply(me, arguments); }; }\"},indexOf:function(){return\"[].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }\"},modulo:function(){return\"function(a, b) { return (+a % (b = +b) + b) % b; }\"},hasProp:function(){return\"{}.hasOwnProperty\"},slice:function(){return\"[].slice\"}},L=1,N=2,E=3,C=4,F=5,T=6,q=\"  \",g=/^(?!\\d)[$\\w\\x7f-\\uffff]+$/,B=/^[+-]?\\d+$/,m=/^[+-]?0x[\\da-f]+/i,R=/^[+-]?(?:0x[\\da-f]+|\\d*\\.?\\d+(?:e[+-]?\\d+)?)$/i,y=/^['\"]/,v=/^\\//,bt=function(e,t){var n,i;return i=t.scope.root,e in i.utilities?i.utilities[e]:(n=i.freeVariable(e),i.assign(n,K[e](t)),i.utilities[e]=n)},ut=function(e,t){return e=e.replace(/\\n/g,\"$&\"+t),e.replace(/\\s+$/,\"\")},pt=function(e){return null==e?0:e.match(m)?parseInt(e,16):parseFloat(e)},at=function(e){return e instanceof x&&\"arguments\"===e.value&&!e.asKey},ct=function(e){return e instanceof x&&\"this\"===e.value&&!e.asKey||e instanceof c&&e.bound||e instanceof o&&e.isSuper},ot=function(e){return e.isComplex()||(\"function\"==typeof e.isAssignable?e.isAssignable():void 0)},yt=function(e,t,n){var i;if(i=t[n].unfoldSoak(e))return t[n]=i.body,i.body=new z(t),i}}.call(this),t.exports}(),_dereq_[\"./sourcemap\"]=function(){var e={},t={exports:e};return function(){var e,n;e=function(){function e(e){this.line=e,this.columns=[]}return e.prototype.add=function(e,t,n){var i,r;return r=t[0],i=t[1],null==n&&(n={}),this.columns[e]&&n.noReplace?void 0:this.columns[e]={line:this.line,column:e,sourceLine:r,sourceColumn:i}},e.prototype.sourceLocation=function(e){for(var t;!((t=this.columns[e])||0>=e);)e--;return t&&[t.sourceLine,t.sourceColumn]},e}(),n=function(){function t(){this.lines=[]}var n,i,r,s;return t.prototype.add=function(t,n,i){var r,s,o,a;return null==i&&(i={}),o=n[0],s=n[1],a=(r=this.lines)[o]||(r[o]=new e(o)),a.add(s,t,i)},t.prototype.sourceLocation=function(e){var t,n,i;for(n=e[0],t=e[1];!((i=this.lines[n])||0>=n);)n--;return i&&i.sourceLocation(t)},t.prototype.generate=function(e,t){var n,i,r,s,o,a,c,h,l,u,p,d,f,m,g,v;for(null==e&&(e={}),null==t&&(t=null),v=0,s=0,a=0,o=0,d=!1,n=\"\",f=this.lines,u=i=0,c=f.length;c>i;u=++i)if(l=f[u])for(m=l.columns,r=0,h=m.length;h>r;r++)if(p=m[r]){for(;p.line>v;)s=0,d=!1,n+=\";\",v++;d&&(n+=\",\",d=!1),n+=this.encodeVlq(p.column-s),s=p.column,n+=this.encodeVlq(0),n+=this.encodeVlq(p.sourceLine-a),a=p.sourceLine,n+=this.encodeVlq(p.sourceColumn-o),o=p.sourceColumn,d=!0}return g={version:3,file:e.generatedFile||\"\",sourceRoot:e.sourceRoot||\"\",sources:e.sourceFiles||[\"\"],names:[],mappings:n},e.inline&&(g.sourcesContent=[t]),JSON.stringify(g,null,2)},r=5,i=1<<r,s=i-1,t.prototype.encodeVlq=function(e){var t,n,o,a;for(t=\"\",o=0>e?1:0,a=(Math.abs(e)<<1)+o;a||!t;)n=a&s,a>>=r,a&&(n|=i),t+=this.encodeBase64(n);return t},n=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",t.prototype.encodeBase64=function(e){return n[e]||function(){throw Error(\"Cannot Base64 encode value: \"+e)}()},t}(),t.exports=n}.call(this),t.exports}(),_dereq_[\"./coffee-script\"]=function(){var e={},t={exports:e};return function(){var t,n,i,r,s,o,a,c,h,l,u,p,d,f,m,g,v,y,b={}.hasOwnProperty,k=[].indexOf||function(e){for(var t=0,n=this.length;n>t;t++)if(t in this&&this[t]===e)return t;return-1};if(a=_dereq_(\"fs\"),v=_dereq_(\"vm\"),f=_dereq_(\"path\"),t=_dereq_(\"./lexer\").Lexer,d=_dereq_(\"./parser\").parser,h=_dereq_(\"./helpers\"),n=_dereq_(\"./sourcemap\"),e.VERSION=\"1.9.3\",e.FILE_EXTENSIONS=[\".coffee\",\".litcoffee\",\".coffee.md\"],e.helpers=h,y=function(e){return function(t,n){var i;null==n&&(n={});try{return e.call(this,t,n)\n}catch(r){if(i=r,\"string\"!=typeof t)throw i;throw h.updateSyntaxError(i,t,n.filename)}}},e.compile=r=y(function(e,t){var i,r,s,o,a,c,l,u,f,m,g,v,y,b,k;for(v=h.merge,o=h.extend,t=o({},t),t.sourceMap&&(g=new n),k=p.tokenize(e,t),t.referencedVars=function(){var e,t,n;for(n=[],e=0,t=k.length;t>e;e++)b=k[e],b.variable&&n.push(b[1]);return n}(),c=d.parse(k).compileToFragments(t),s=0,t.header&&(s+=1),t.shiftLine&&(s+=1),r=0,f=\"\",u=0,m=c.length;m>u;u++)a=c[u],t.sourceMap&&(a.locationData&&!/^[;\\s]*$/.test(a.code)&&g.add([a.locationData.first_line,a.locationData.first_column],[s,r],{noReplace:!0}),y=h.count(a.code,\"\\n\"),s+=y,y?r=a.code.length-(a.code.lastIndexOf(\"\\n\")+1):r+=a.code.length),f+=a.code;return t.header&&(l=\"Generated by CoffeeScript \"+this.VERSION,f=\"// \"+l+\"\\n\"+f),t.sourceMap?(i={js:f},i.sourceMap=g,i.v3SourceMap=g.generate(t,e),i):f}),e.tokens=y(function(e,t){return p.tokenize(e,t)}),e.nodes=y(function(e,t){return\"string\"==typeof e?d.parse(p.tokenize(e,t)):d.parse(e)}),e.run=function(e,t){var n,i,s,o;return null==t&&(t={}),s=_dereq_.main,s.filename=process.argv[1]=t.filename?a.realpathSync(t.filename):\".\",s.moduleCache&&(s.moduleCache={}),i=t.filename?f.dirname(a.realpathSync(t.filename)):a.realpathSync(\".\"),s.paths=_dereq_(\"module\")._nodeModulePaths(i),(!h.isCoffee(s.filename)||_dereq_.extensions)&&(n=r(e,t),e=null!=(o=n.js)?o:n),s._compile(e,s.filename)},e.eval=function(e,t){var n,i,s,o,a,c,h,l,u,p,d,m,g,y,k,w,T;if(null==t&&(t={}),e=e.trim()){if(o=null!=(m=v.Script.createContext)?m:v.createContext,c=null!=(g=v.isContext)?g:function(){return t.sandbox instanceof o().constructor},o){if(null!=t.sandbox){if(c(t.sandbox))w=t.sandbox;else{w=o(),y=t.sandbox;for(l in y)b.call(y,l)&&(T=y[l],w[l]=T)}w.global=w.root=w.GLOBAL=w}else w=global;if(w.__filename=t.filename||\"eval\",w.__dirname=f.dirname(w.__filename),w===global&&!w.module&&!w.require){for(n=_dereq_(\"module\"),w.module=i=new n(t.modulename||\"eval\"),w.require=s=function(e){return n._load(e,i,!0)},i.filename=w.__filename,k=Object.getOwnPropertyNames(_dereq_),a=0,u=k.length;u>a;a++)d=k[a],\"paths\"!==d&&(s[d]=_dereq_[d]);s.paths=i.paths=n._nodeModulePaths(process.cwd()),s.resolve=function(e){return n._resolveFilename(e,i)}}}p={};for(l in t)b.call(t,l)&&(T=t[l],p[l]=T);return p.bare=!0,h=r(e,p),w===global?v.runInThisContext(h):v.runInContext(h,w)}},e.register=function(){return _dereq_(\"./register\")},_dereq_.extensions)for(m=this.FILE_EXTENSIONS,l=0,u=m.length;u>l;l++)s=m[l],null==(i=_dereq_.extensions)[s]&&(i[s]=function(){throw Error(\"Use CoffeeScript.register() or require the coffee-script/register module to require \"+s+\" files.\")});e._compileFile=function(e,t){var n,i,s,o;null==t&&(t=!1),s=a.readFileSync(e,\"utf8\"),o=65279===s.charCodeAt(0)?s.substring(1):s;try{n=r(o,{filename:e,sourceMap:t,literate:h.isLiterate(e)})}catch(c){throw i=c,h.updateSyntaxError(i,o,e)}return n},p=new t,d.lexer={lex:function(){var e,t;return t=d.tokens[this.pos++],t?(e=t[0],this.yytext=t[1],this.yylloc=t[2],d.errorToken=t.origin||t,this.yylineno=this.yylloc.first_line):e=\"\",e},setInput:function(e){return d.tokens=e,this.pos=0},upcomingInput:function(){return\"\"}},d.yy=_dereq_(\"./nodes\"),d.yy.parseError=function(e,t){var n,i,r,s,o,a;return o=t.token,s=d.errorToken,a=d.tokens,i=s[0],r=s[1],n=s[2],r=function(){switch(!1){case s!==a[a.length-1]:return\"end of input\";case\"INDENT\"!==i&&\"OUTDENT\"!==i:return\"indentation\";case\"IDENTIFIER\"!==i&&\"NUMBER\"!==i&&\"STRING\"!==i&&\"STRING_START\"!==i&&\"REGEX\"!==i&&\"REGEX_START\"!==i:return i.replace(/_START$/,\"\").toLowerCase();default:return h.nameWhitespaceCharacter(r)}}(),h.throwSyntaxError(\"unexpected \"+r,n)},o=function(e,t){var n,i,r,s,o,a,c,h,l,u,p,d;return s=void 0,r=\"\",e.isNative()?r=\"native\":(e.isEval()?(s=e.getScriptNameOrSourceURL(),s||(r=e.getEvalOrigin()+\", \")):s=e.getFileName(),s||(s=\"<anonymous>\"),h=e.getLineNumber(),i=e.getColumnNumber(),u=t(s,h,i),r=u?s+\":\"+u[0]+\":\"+u[1]:s+\":\"+h+\":\"+i),o=e.getFunctionName(),a=e.isConstructor(),c=!(e.isToplevel()||a),c?(l=e.getMethodName(),d=e.getTypeName(),o?(p=n=\"\",d&&o.indexOf(d)&&(p=d+\".\"),l&&o.indexOf(\".\"+l)!==o.length-l.length-1&&(n=\" [as \"+l+\"]\"),\"\"+p+o+n+\" (\"+r+\")\"):d+\".\"+(l||\"<anonymous>\")+\" (\"+r+\")\"):a?\"new \"+(o||\"<anonymous>\")+\" (\"+r+\")\":o?o+\" (\"+r+\")\":r},g={},c=function(t){var n,i;if(g[t])return g[t];if(i=null!=f?f.extname(t):void 0,!(0>k.call(e.FILE_EXTENSIONS,i)))return n=e._compileFile(t,!0),g[t]=n.sourceMap},Error.prepareStackTrace=function(t,n){var i,r,s;return s=function(e,t,n){var i,r;return r=c(e),r&&(i=r.sourceLocation([t-1,n-1])),i?[i[0]+1,i[1]+1]:null},r=function(){var t,r,a;for(a=[],t=0,r=n.length;r>t&&(i=n[t],i.getFunction()!==e.run);t++)a.push(\"  at \"+o(i,s));return a}(),\"\"+t+\"\\n\"+r.join(\"\\n\")+\"\\n\"}}.call(this),t.exports}(),_dereq_[\"./browser\"]=function(){var exports={},module={exports:exports};return function(){var CoffeeScript,compile,runScripts,indexOf=[].indexOf||function(e){for(var t=0,n=this.length;n>t;t++)if(t in this&&this[t]===e)return t;return-1};CoffeeScript=_dereq_(\"./coffee-script\"),CoffeeScript.require=_dereq_,compile=CoffeeScript.compile,CoffeeScript.eval=function(code,options){return null==options&&(options={}),null==options.bare&&(options.bare=!0),eval(compile(code,options))},CoffeeScript.run=function(e,t){return null==t&&(t={}),t.bare=!0,t.shiftLine=!0,Function(compile(e,t))()},\"undefined\"!=typeof window&&null!==window&&(\"undefined\"!=typeof btoa&&null!==btoa&&\"undefined\"!=typeof JSON&&null!==JSON&&\"undefined\"!=typeof unescape&&null!==unescape&&\"undefined\"!=typeof encodeURIComponent&&null!==encodeURIComponent&&(compile=function(e,t){var n,i,r;return null==t&&(t={}),t.sourceMap=!0,t.inline=!0,i=CoffeeScript.compile(e,t),n=i.js,r=i.v3SourceMap,n+\"\\n//# sourceMappingURL=data:application/json;base64,\"+btoa(unescape(encodeURIComponent(r)))+\"\\n//# sourceURL=coffeescript\"}),CoffeeScript.load=function(e,t,n,i){var r;return null==n&&(n={}),null==i&&(i=!1),n.sourceFiles=[e],r=window.ActiveXObject?new window.ActiveXObject(\"Microsoft.XMLHTTP\"):new window.XMLHttpRequest,r.open(\"GET\",e,!0),\"overrideMimeType\"in r&&r.overrideMimeType(\"text/plain\"),r.onreadystatechange=function(){var s,o;if(4===r.readyState){if(0!==(o=r.status)&&200!==o)throw Error(\"Could not load \"+e);if(s=[r.responseText,n],i||CoffeeScript.run.apply(CoffeeScript,s),t)return t(s)}},r.send(null)},runScripts=function(){var e,t,n,i,r,s,o,a,c,h,l;for(l=window.document.getElementsByTagName(\"script\"),t=[\"text/coffeescript\",\"text/literate-coffeescript\"],e=function(){var e,n,i,r;for(r=[],e=0,n=l.length;n>e;e++)c=l[e],i=c.type,indexOf.call(t,i)>=0&&r.push(c);return r}(),s=0,n=function(){var t;return t=e[s],t instanceof Array?(CoffeeScript.run.apply(CoffeeScript,t),s++,n()):void 0},i=function(i,r){var s,o;return s={literate:i.type===t[1]},o=i.src||i.getAttribute(\"data-src\"),o?CoffeeScript.load(o,function(t){return e[r]=t,n()},s,!0):(s.sourceFiles=[\"embedded\"],e[r]=[i.innerHTML,s])},r=o=0,a=e.length;a>o;r=++o)h=e[r],i(h,r);return n()},window.addEventListener?window.addEventListener(\"DOMContentLoaded\",runScripts,!1):window.attachEvent(\"onload\",runScripts))}.call(this),module.exports}(),_dereq_[\"./coffee-script\"]}();\"function\"==typeof define&&define.amd?define(function(){return CoffeeScript}):root.CoffeeScript=CoffeeScript})(this);\n});"
  },
  {
    "path": "lib/ace/mode/coffee/parser_test.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\nif (typeof process !== \"undefined\") {\n    require(\"amd-loader\");\n}\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar assert = require(\"../../test/assertions\");\nvar coffee = require(\"./coffee\");\n\nfunction assertLocation(e, sl, sc, el, ec) {\n    var l = e.location;\n    assert.equal(\n        l.first_line + \":\" + l.first_column + \"->\"  + l.last_line + \":\" + l.last_column,\n        sl + \":\" + sc + \"->\"  + el + \":\" + ec\n    );\n}\n\nfunction parse(str) {\n    try {\n        coffee.compile(str);\n    } catch (e) {\n        return e;\n    }\n}\n\nmodule.exports = {\n    \"test parse valid coffee script\": function() {\n        coffee.compile(\"square = (x) -> x * x\");\n    },\n    \n    \"test parse invalid coffee script\": function() {\n        var e = parse(\"a = 12 f\");\n        assert.equal(e.message, \"unexpected identifier\");\n        assertLocation(e, 0, 7, 0, 7);\n    },\n    \n    \"test parse missing bracket\": function() {\n        var e = parse(\"a = 12 f {\\n\\n\");\n        assert.equal(e.message, \"missing }\");\n        assertLocation(e, 0, 9, 0, 9);\n    },\n    \"test unexpected indent\": function() {\n        var e = parse(\"a\\n  a\\n\");\n        assert.equal(e.message, \"unexpected indentation\");\n        assertLocation(e, 1, 0, 1, 1);\n    },\n    \"test invalid destructuring\": function() {\n        var e = parse(\"\\n{b: 5} = {}\");\n        assert.equal(e.message, '\"5\" cannot be assigned');\n        assertLocation(e, 1, 4, 1, 4);\n    }\n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main) {\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n}\n"
  },
  {
    "path": "lib/ace/mode/coffee.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar Rules = require(\"./coffee_highlight_rules\").CoffeeHighlightRules;\nvar Outdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\nvar Range = require(\"../range\").Range;\nvar TextMode = require(\"./text\").Mode;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar oop = require(\"../lib/oop\");\n\nfunction Mode() {\n    this.HighlightRules = Rules;\n    this.$outdent = new Outdent();\n    this.foldingRules = new FoldMode();\n}\n\noop.inherits(Mode, TextMode);\n\n(function() {\n    \n    /*:\n      [({[=:]        # Opening parentheses or brackets\n     |[-=]>          # OR single or double arrow\n     |\\b(?:          # OR one of these words:\n       else          #    else\n      |try           # OR try\n      |(?:swi|ca)tch # OR catch, optionally followed by:\n        (?:\\s*[$A-Za-z_\\x7f-\\uffff][$\\w\\x7f-\\uffff]*)?  # a variable\n      |finally       # OR finally\n     ))\\s*$          # all as the last thing on a line (allowing trailing space)\n    |                # ---- OR ---- :\n    ^\\s*             # a line starting with optional space\n    (else\\b\\s*)?     # followed by an optional \"else\"\n    (?:              # followed by one of the following:\n       if            #    if\n      |for           # OR for\n      |while         # OR while\n      |loop          # OR loop\n    )\\b              #    (as a word)\n    (?!.*\\bthen\\b)   # ... but NOT followed by \"then\" on the line\n    */\n    var indenter = /(?:[({[=:]|[-=]>|\\b(?:else|try|(?:swi|ca)tch(?:\\s+[$A-Za-z_\\x7f-\\uffff][$\\w\\x7f-\\uffff]*)?|finally))\\s*$|^\\s*(else\\b\\s*)?(?:if|for|while|loop)\\b(?!.*\\bthen\\b)/;\n    \n    this.lineCommentStart = \"#\";\n    this.blockComment = {start: \"###\", end: \"###\"};\n    \n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n    \n        if (!(tokens.length && tokens[tokens.length - 1].type === 'comment') &&\n            state === 'start' && indenter.test(line))\n            indent += tab;\n        return indent;\n    };\n    \n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    \n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    \n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/coffee_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        \n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n        \n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n        \n        return worker;\n    };\n\n    this.$id = \"ace/mode/coffee\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n"
  },
  {
    "path": "lib/ace/mode/coffee_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\n    var oop = require(\"../lib/oop\");\n    var TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\n    oop.inherits(CoffeeHighlightRules, TextHighlightRules);\n\n    function CoffeeHighlightRules() {\n        var identifier = \"[$A-Za-z_\\\\x7f-\\\\uffff][$\\\\w\\\\x7f-\\\\uffff]*\";\n\n        var keywords = (\n            \"this|throw|then|try|typeof|super|switch|return|break|by|continue|\" +\n            \"catch|class|in|instanceof|is|isnt|if|else|extends|for|own|\" +\n            \"finally|function|while|when|new|no|not|delete|debugger|do|loop|of|off|\" +\n            \"or|on|unless|until|and|yes\"\n        );\n\n        var langConstant = (\n            \"true|false|null|undefined|NaN|Infinity\"\n        );\n\n        var illegal = (\n            \"case|const|default|function|var|void|with|enum|export|implements|\" +\n            \"interface|let|package|private|protected|public|static|yield\"\n        );\n\n        var supportClass = (\n            \"Array|Boolean|Date|Function|Number|Object|RegExp|ReferenceError|String|\" +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" +\n            \"SyntaxError|TypeError|URIError|\"  +\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray\"\n        );\n\n        var supportFunction = (\n            \"Math|JSON|isNaN|isFinite|parseInt|parseFloat|encodeURI|\" +\n            \"encodeURIComponent|decodeURI|decodeURIComponent|String|\"\n        );\n\n        var variableLanguage = (\n            \"window|arguments|prototype|document\"\n        );\n\n        var keywordMapper = this.createKeywordMapper({\n            \"keyword\": keywords,\n            \"constant.language\": langConstant,\n            \"invalid.illegal\": illegal,\n            \"language.support.class\": supportClass,\n            \"language.support.function\": supportFunction,\n            \"variable.language\": variableLanguage\n        }, \"identifier\");\n\n        var functionRule = {\n            token: [\"paren.lparen\", \"variable.parameter\", \"paren.rparen\", \"text\", \"storage.type\"],\n            regex: /(?:(\\()((?:\"[^\")]*?\"|'[^')]*?'|\\/[^\\/)]*?\\/|[^()\"'\\/])*?)(\\))(\\s*))?([\\-=]>)/.source\n        };\n\n        var stringEscape = /\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)/;\n\n        this.$rules = {\n            start : [\n                {\n                    token : \"constant.numeric\",\n                    regex : \"(?:0x[\\\\da-fA-F]+|(?:\\\\d+(?:\\\\.\\\\d+)?|\\\\.\\\\d+)(?:[eE][+-]?\\\\d+)?)\"\n                }, {\n                    stateName: \"qdoc\",\n                    token : \"string\", regex : \"'''\", next : [\n                        {token : \"string\", regex : \"'''\", next : \"start\"},\n                        {token : \"constant.language.escape\", regex : stringEscape},\n                        {defaultToken: \"string\"}\n                    ]\n                }, {\n                    stateName: \"qqdoc\",\n                    token : \"string\",\n                    regex : '\"\"\"',\n                    next : [\n                        {token : \"string\", regex : '\"\"\"', next : \"start\"},\n                        {token : \"paren.string\", regex : '#{', push : \"start\"},\n                        {token : \"constant.language.escape\", regex : stringEscape},\n                        {defaultToken: \"string\"}\n                    ]\n                }, {\n                    stateName: \"qstring\",\n                    token : \"string\", regex : \"'\", next : [\n                        {token : \"string\", regex : \"'\", next : \"start\"},\n                        {token : \"constant.language.escape\", regex : stringEscape},\n                        {defaultToken: \"string\"}\n                    ]\n                }, {\n                    stateName: \"qqstring\",\n                    token : \"string.start\", regex : '\"', next : [\n                        {token : \"string.end\", regex : '\"', next : \"start\"},\n                        {token : \"paren.string\", regex : '#{', push : \"start\"},\n                        {token : \"constant.language.escape\", regex : stringEscape},\n                        {defaultToken: \"string\"}\n                    ]\n                }, {\n                    stateName: \"js\",\n                    token : \"string\", regex : \"`\", next : [\n                        {token : \"string\", regex : \"`\", next : \"start\"},\n                        {token : \"constant.language.escape\", regex : stringEscape},\n                        {defaultToken: \"string\"}\n                    ]\n                }, {\n                    regex: \"[{}]\", onMatch: function(val, state, stack) {\n                        this.next = \"\";\n                        if (val == \"{\" && stack.length) {\n                            stack.unshift(\"start\", state);\n                            return \"paren\";\n                        }\n                        if (val == \"}\" && stack.length) {\n                            stack.shift();\n                            this.next = stack.shift() || \"\";\n                            if (this.next.indexOf(\"string\") != -1)\n                                return \"paren.string\";\n                        }\n                        return \"paren\";\n                    }\n                }, {\n                    token : \"string.regex\",\n                    regex : \"///\",\n                    next : \"heregex\"\n                }, {\n                    token : \"string.regex\",\n                    regex : /(?:\\/(?![\\s=])[^[\\/\\n\\\\]*(?:(?:\\\\[\\s\\S]|\\[[^\\]\\n\\\\]*(?:\\\\[\\s\\S][^\\]\\n\\\\]*)*])[^[\\/\\n\\\\]*)*\\/)(?:[imgy]{0,4})(?!\\w)/\n                }, {\n                    token : \"comment\",\n                    regex : \"###(?!#)\",\n                    next : \"comment\"\n                }, {\n                    token : \"comment\",\n                    regex : \"#.*\"\n                }, {\n                    token : [\"punctuation.operator\", \"text\", \"identifier\"],\n                    regex : \"(\\\\.)(\\\\s*)(\" + illegal + \")\"\n                }, {\n                    token : \"punctuation.operator\",\n                    regex : \"\\\\.{1,3}\"\n                }, {\n                    //class A extends B\n                    token : [\"keyword\", \"text\", \"language.support.class\",\n                     \"text\", \"keyword\", \"text\", \"language.support.class\"],\n                    regex : \"(class)(\\\\s+)(\" + identifier + \")(?:(\\\\s+)(extends)(\\\\s+)(\" + identifier + \"))?\"\n                }, {\n                    //play = (...) ->\n                    token : [\"entity.name.function\", \"text\", \"keyword.operator\", \"text\"].concat(functionRule.token),\n                    regex : \"(\" + identifier + \")(\\\\s*)([=:])(\\\\s*)\" + functionRule.regex\n                }, \n                functionRule, \n                {\n                    token : \"variable\",\n                    regex : \"@(?:\" + identifier + \")?\"\n                }, {\n                    token: keywordMapper,\n                    regex : identifier\n                }, {\n                    token : \"punctuation.operator\",\n                    regex : \"\\\\,|\\\\.\"\n                }, {\n                    token : \"storage.type\",\n                    regex : \"[\\\\-=]>\"\n                }, {\n                    token : \"keyword.operator\",\n                    regex : \"(?:[-+*/%<>&|^!?=]=|>>>=?|\\\\-\\\\-|\\\\+\\\\+|::|&&=|\\\\|\\\\|=|<<=|>>=|\\\\?\\\\.|\\\\.{2,3}|[!*+-=><])\"\n                }, {\n                    token : \"paren.lparen\",\n                    regex : \"[({[]\"\n                }, {\n                    token : \"paren.rparen\",\n                    regex : \"[\\\\]})]\"\n                }, {\n                    token : \"text\",\n                    regex : \"\\\\s+\"\n                }],\n\n\n            heregex : [{\n                token : \"string.regex\",\n                regex : '.*?///[imgy]{0,4}',\n                next : \"start\"\n            }, {\n                token : \"comment.regex\",\n                regex : \"\\\\s+(?:#.*)?\"\n            }, {\n                token : \"string.regex\",\n                regex : \"\\\\S+\"\n            }],\n\n            comment : [{\n                token : \"comment\",\n                regex : '###',\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        };\n        this.normalizeRules();\n    }\n\n    exports.CoffeeHighlightRules = CoffeeHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/coffee_worker.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar Mirror = require(\"../worker/mirror\").Mirror;\nvar coffee = require(\"../mode/coffee/coffee\");\n\nwindow.addEventListener = function() {};\n\n\nvar Worker = exports.Worker = function(sender) {\n    Mirror.call(this, sender);\n    this.setTimeout(250);\n};\n\noop.inherits(Worker, Mirror);\n\n(function() {\n\n    this.onUpdate = function() {\n        var value = this.doc.getValue();\n        var errors = [];\n        try {\n            coffee.compile(value);\n        } catch(e) {\n            var loc = e.location;\n            if (loc) {\n                errors.push({\n                    row: loc.first_line,\n                    column: loc.first_column,\n                    endRow: loc.last_line,\n                    endColumn: loc.last_column,\n                    text: e.message,\n                    type: \"error\"\n                });\n            }\n        }\n        this.sender.emit(\"annotate\", errors);\n    };\n\n}).call(Worker.prototype);\n\n});\n"
  },
  {
    "path": "lib/ace/mode/coldfusion.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar HtmlMode = require(\"./html\").Mode;\nvar ColdfusionHighlightRules = require(\"./coldfusion_highlight_rules\").ColdfusionHighlightRules;\n\nvar voidElements = \"cfabort|cfapplication|cfargument|cfassociate|cfbreak|cfcache|cfcollection|cfcookie|cfdbinfo|cfdirectory|cfdump|cfelse|cfelseif|cferror|cfexchangecalendar|cfexchangeconnection|cfexchangecontact|cfexchangefilter|cfexchangetask|cfexit|cffeed|cffile|cfflush|cfftp|cfheader|cfhtmlhead|cfhttpparam|cfimage|cfimport|cfinclude|cfindex|cfinsert|cfinvokeargument|cflocation|cflog|cfmailparam|cfNTauthenticate|cfobject|cfobjectcache|cfparam|cfpdfformparam|cfprint|cfprocparam|cfprocresult|cfproperty|cfqueryparam|cfregistry|cfreportparam|cfrethrow|cfreturn|cfschedule|cfsearch|cfset|cfsetting|cfthrow|cfzipparam)\".split(\"|\");\n\nvar Mode = function() {\n    HtmlMode.call(this);\n    \n    this.HighlightRules = ColdfusionHighlightRules;\n};\noop.inherits(Mode, HtmlMode);\n\n(function() {\n\n    // mix with html void elements\n    this.voidElements = oop.mixin(lang.arrayToMap(voidElements), this.voidElements);\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.$id = \"ace/mode/coldfusion\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/coldfusion_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\n\nvar ColdfusionHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n    this.$rules.tag[2].token = function (start, tag) {\n        var group = tag.slice(0,2) == \"cf\" ? \"keyword\" : \"meta.tag\";\n        return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n            group + \".tag-name.xml\"];\n    };\n\n    var jsAndCss = Object.keys(this.$rules).filter(function(x) {\n        return /^(js|css)-/.test(x);\n    });\n    this.embedRules({\n        cfmlComment: [\n            { regex: \"<!---\", token: \"comment.start\", push: \"cfmlComment\"}, \n            { regex: \"--->\", token: \"comment.end\", next: \"pop\"},\n            { defaultToken: \"comment\"}\n        ]\n    }, \"\", [\n        { regex: \"<!---\", token: \"comment.start\", push: \"cfmlComment\"}\n    ], [\n        \"comment\", \"start\", \"tag_whitespace\", \"cdata\"\n    ].concat(jsAndCss));\n    \n    \n    this.$rules.cfTag = [\n        {include : \"attributes\"},\n        {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"pop\"}\n    ];\n    var cfTag = {\n        token : function(start, tag) {\n            return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                \"keyword.tag-name.xml\"];\n        },\n        regex : \"(</?)(cf[-_a-zA-Z0-9:.]+)\",\n        push: \"cfTag\"\n    };\n    jsAndCss.forEach(function(s) {\n        this.$rules[s].unshift(cfTag);\n    }, this);\n    \n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"cfjs-\", \"cfscript\");\n\n    this.normalizeRules();\n};\n\noop.inherits(ColdfusionHighlightRules, HtmlHighlightRules);\n\nexports.ColdfusionHighlightRules = ColdfusionHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/coldfusion_test.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\nif (typeof process !== \"undefined\") {\n    require(\"amd-loader\");\n}\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar EditSession = require(\"../edit_session\").EditSession;\nvar Range = require(\"../range\").Range;\nvar ColdfusionMode = require(\"./coldfusion\").Mode;\nvar assert = require(\"../test/assertions\");\n\nmodule.exports = {\n    setUp : function() {    \n        this.mode = new ColdfusionMode();\n    },\n\n    \"test: toggle comment lines\" : function() {\n        var session = new EditSession([\"  abc\", \"  cde\", \"fg\"]);\n\n        var range = new Range(0, 3, 1, 1);\n        var comment = this.mode.toggleCommentLines(\"start\", session, 0, 1);\n        assert.equal([\"  <!--abc-->\", \"  <!--cde-->\", \"fg\"].join(\"\\n\"), session.toString());\n    },\n\n    \"test: next line indent should be the same as the current line indent\" : function() {\n        assert.equal(\"     \", this.mode.getNextLineIndent(\"start\", \"     abc\"));\n        assert.equal(\"\", this.mode.getNextLineIndent(\"start\", \"abc\"));\n        assert.equal(\"\\t\", this.mode.getNextLineIndent(\"start\", \"\\tabc\"));\n    }\n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main) {\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n}\n"
  },
  {
    "path": "lib/ace/mode/csharp.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CSharpHighlightRules = require(\"./csharp_highlight_rules\").CSharpHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/csharp\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CSharpHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    \n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    \n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n  \n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n  \n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n    \n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n  \n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n  \n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n\n    this.createWorker = function(session) {\n        return null;\n    };\n\n    this.$id = \"ace/mode/csharp\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/csharp_highlight_rules.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar CSharpHighlightRules = function() {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"this\",\n        \"keyword\": \"abstract|event|new|struct|as|explicit|null|switch|base|extern|object|this|bool|false|operator|throw|break|finally|out|true|byte|fixed|override|try|case|float|params|typeof|catch|for|private|uint|char|foreach|protected|ulong|checked|goto|public|unchecked|class|if|readonly|unsafe|const|implicit|ref|ushort|continue|in|return|using|decimal|int|sbyte|virtual|default|interface|sealed|volatile|delegate|internal|partial|short|void|do|is|sizeof|while|double|lock|stackalloc|else|long|static|enum|namespace|string|var|dynamic\",\n        \"constant.language\": \"null|true|false\"\n    }, \"identifier\");\n\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // character\n                regex : /'(?:.|\\\\(:?u[\\da-fA-F]+|x[\\da-fA-F]+|[tbrf'\"n]))?'/\n            }, {\n                token : \"string\", start : '\"', end : '\"|$', next: [\n                    {token: \"constant.language.escape\", regex: /\\\\(:?u[\\da-fA-F]+|x[\\da-fA-F]+|[tbrf'\"n])/},\n                    {token: \"invalid\", regex: /\\\\./}\n                ]\n            }, {\n                token : \"string\", start : '@\"', end : '\"', next:[\n                    {token: \"constant.language.escape\", regex: '\"\"'}\n                ]\n            }, {\n                token : \"string\", start : /\\$\"/, end : '\"|$', next: [\n                    {token: \"constant.language.escape\", regex: /\\\\(:?$)|{{/},\n                    {token: \"constant.language.escape\", regex: /\\\\(:?u[\\da-fA-F]+|x[\\da-fA-F]+|[tbrf'\"n])/},\n                    {token: \"invalid\", regex: /\\\\./}\n                ]\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false)\\\\b\"\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token : \"keyword\",\n                regex : \"^\\\\s*#(if|else|elif|endif|define|undef|warning|error|line|region|endregion|pragma)\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : \"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ]\n    };\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n    this.normalizeRules();\n};\n\noop.inherits(CSharpHighlightRules, TextHighlightRules);\n\nexports.CSharpHighlightRules = CSharpHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/csound_document.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CsoundDocumentHighlightRules = require(\"./csound_document_highlight_rules\").CsoundDocumentHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = CsoundDocumentHighlightRules;\n};\noop.inherits(Mode, TextMode);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/csound_document_highlight_rules.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\n\nvar CsoundOrchestraHighlightRules = require(\"./csound_orchestra_highlight_rules\").CsoundOrchestraHighlightRules;\nvar CsoundScoreHighlightRules = require(\"./csound_score_highlight_rules\").CsoundScoreHighlightRules;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar CsoundDocumentHighlightRules = function() {\n\n    this.$rules = {\n        \"start\": [\n            {\n                token : [\"meta.tag.punctuation.tag-open.csound-document\", \"entity.name.tag.begin.csound-document\", \"meta.tag.punctuation.tag-close.csound-document\"],\n                regex : /(<)(CsoundSynthesi[sz]er)(>)/,\n                next  : \"synthesizer\"\n            },\n            {defaultToken : \"text.csound-document\"}\n        ],\n\n        \"synthesizer\": [\n            {\n                token : [\"meta.tag.punctuation.end-tag-open.csound-document\", \"entity.name.tag.begin.csound-document\", \"meta.tag.punctuation.tag-close.csound-document\"],\n                regex : \"(</)(CsoundSynthesi[sz]er)(>)\",\n                next  : \"start\"\n            }, {\n                token : [\"meta.tag.punctuation.tag-open.csound-document\", \"entity.name.tag.begin.csound-document\", \"meta.tag.punctuation.tag-close.csound-document\"],\n                regex : \"(<)(CsInstruments)(>)\",\n                next  : \"csound-start\"\n            }, {\n                token : [\"meta.tag.punctuation.tag-open.csound-document\", \"entity.name.tag.begin.csound-document\", \"meta.tag.punctuation.tag-close.csound-document\"],\n                regex : \"(<)(CsScore)(>)\",\n                next  : \"csound-score-start\"\n            }, {\n                token : [\"meta.tag.punctuation.tag-open.csound-document\", \"entity.name.tag.begin.csound-document\", \"meta.tag.punctuation.tag-close.csound-document\"],\n                regex : \"(<)([Hh][Tt][Mm][Ll])(>)\",\n                next  : \"html-start\"\n            }\n        ]\n    };\n\n    this.embedRules(CsoundOrchestraHighlightRules, \"csound-\", [{\n        token : [\"meta.tag.punctuation.end-tag-open.csound-document\", \"entity.name.tag.begin.csound-document\", \"meta.tag.punctuation.tag-close.csound-document\"],\n        regex : \"(</)(CsInstruments)(>)\",\n        next  : \"synthesizer\"\n    }]);\n    this.embedRules(CsoundScoreHighlightRules, \"csound-score-\", [{\n        token : [\"meta.tag.punctuation.end-tag-open.csound-document\", \"entity.name.tag.begin.csound-document\", \"meta.tag.punctuation.tag-close.csound-document\"],\n        regex : \"(</)(CsScore)(>)\",\n        next  : \"synthesizer\"\n    }]);\n    this.embedRules(HtmlHighlightRules, \"html-\", [{\n        token : [\"meta.tag.punctuation.end-tag-open.csound-document\", \"entity.name.tag.begin.csound-document\", \"meta.tag.punctuation.tag-close.csound-document\"],\n        regex : \"(</)([Hh][Tt][Mm][Ll])(>)\",\n        next  : \"synthesizer\"\n    }]);\n\n    this.normalizeRules();\n};\n\noop.inherits(CsoundDocumentHighlightRules, TextHighlightRules);\n\nexports.CsoundDocumentHighlightRules = CsoundDocumentHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/csound_orchestra.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CsoundOrchestraHighlightRules = require(\"./csound_orchestra_highlight_rules\").CsoundOrchestraHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = CsoundOrchestraHighlightRules;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \";\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/csound_orchestra_highlight_rules.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nvar lang = require(\"../lib/lang\");\nvar oop = require(\"../lib/oop\");\n\nvar CsoundPreprocessorHighlightRules = require(\"./csound_preprocessor_highlight_rules\").CsoundPreprocessorHighlightRules;\nvar CsoundScoreHighlightRules = require(\"./csound_score_highlight_rules\").CsoundScoreHighlightRules;\nvar LuaHighlightRules = require(\"./lua_highlight_rules\").LuaHighlightRules;\nvar PythonHighlightRules = require(\"./python_highlight_rules\").PythonHighlightRules;\n\nvar CsoundOrchestraHighlightRules = function() {\n\n    CsoundPreprocessorHighlightRules.call(this);\n\n    // To update the opcodes and deprecatedOpcodes arrays, run\n    /*\n      curl --remote-name https://bitbucket.org/nwhetsell/pygments-main/raw/tip/pygments/lexers/_csound_builtins.py\n      python -c \"import json; from _csound_builtins import OPCODES, DEPRECATED_OPCODES; print 'var opcodes = {};'.format(json.dumps(sorted(list(OPCODES)), indent=4)); print 'var deprecatedOpcodes = {};'.format(json.dumps(sorted(list(DEPRECATED_OPCODES)), indent=4))\"\n    */\n    // and then paste the output.\n    var opcodes = [\n        \"ATSadd\",\n        \"ATSaddnz\",\n        \"ATSbufread\",\n        \"ATScross\",\n        \"ATSinfo\",\n        \"ATSinterpread\",\n        \"ATSpartialtap\",\n        \"ATSread\",\n        \"ATSreadnz\",\n        \"ATSsinnoi\",\n        \"FLbox\",\n        \"FLbutBank\",\n        \"FLbutton\",\n        \"FLcloseButton\",\n        \"FLcolor\",\n        \"FLcolor2\",\n        \"FLcount\",\n        \"FLexecButton\",\n        \"FLgetsnap\",\n        \"FLgroup\",\n        \"FLgroupEnd\",\n        \"FLgroup_end\",\n        \"FLhide\",\n        \"FLhvsBox\",\n        \"FLhvsBoxSetValue\",\n        \"FLjoy\",\n        \"FLkeyIn\",\n        \"FLknob\",\n        \"FLlabel\",\n        \"FLloadsnap\",\n        \"FLmouse\",\n        \"FLpack\",\n        \"FLpackEnd\",\n        \"FLpack_end\",\n        \"FLpanel\",\n        \"FLpanelEnd\",\n        \"FLpanel_end\",\n        \"FLprintk\",\n        \"FLprintk2\",\n        \"FLroller\",\n        \"FLrun\",\n        \"FLsavesnap\",\n        \"FLscroll\",\n        \"FLscrollEnd\",\n        \"FLscroll_end\",\n        \"FLsetAlign\",\n        \"FLsetBox\",\n        \"FLsetColor\",\n        \"FLsetColor2\",\n        \"FLsetFont\",\n        \"FLsetPosition\",\n        \"FLsetSize\",\n        \"FLsetSnapGroup\",\n        \"FLsetText\",\n        \"FLsetTextColor\",\n        \"FLsetTextSize\",\n        \"FLsetTextType\",\n        \"FLsetVal\",\n        \"FLsetVal_i\",\n        \"FLsetVali\",\n        \"FLsetsnap\",\n        \"FLshow\",\n        \"FLslidBnk\",\n        \"FLslidBnk2\",\n        \"FLslidBnk2Set\",\n        \"FLslidBnk2Setk\",\n        \"FLslidBnkGetHandle\",\n        \"FLslidBnkSet\",\n        \"FLslidBnkSetk\",\n        \"FLslider\",\n        \"FLtabs\",\n        \"FLtabsEnd\",\n        \"FLtabs_end\",\n        \"FLtext\",\n        \"FLupdate\",\n        \"FLvalue\",\n        \"FLvkeybd\",\n        \"FLvslidBnk\",\n        \"FLvslidBnk2\",\n        \"FLxyin\",\n        \"JackoAudioIn\",\n        \"JackoAudioInConnect\",\n        \"JackoAudioOut\",\n        \"JackoAudioOutConnect\",\n        \"JackoFreewheel\",\n        \"JackoInfo\",\n        \"JackoInit\",\n        \"JackoMidiInConnect\",\n        \"JackoMidiOut\",\n        \"JackoMidiOutConnect\",\n        \"JackoNoteOut\",\n        \"JackoOn\",\n        \"JackoTransport\",\n        \"K35_hpf\",\n        \"K35_lpf\",\n        \"MixerClear\",\n        \"MixerGetLevel\",\n        \"MixerReceive\",\n        \"MixerSend\",\n        \"MixerSetLevel\",\n        \"MixerSetLevel_i\",\n        \"OSCinit\",\n        \"OSCinitM\",\n        \"OSClisten\",\n        \"OSCraw\",\n        \"OSCsend\",\n        \"OSCsendA\",\n        \"OSCsend_lo\",\n        \"S\",\n        \"STKBandedWG\",\n        \"STKBeeThree\",\n        \"STKBlowBotl\",\n        \"STKBlowHole\",\n        \"STKBowed\",\n        \"STKBrass\",\n        \"STKClarinet\",\n        \"STKDrummer\",\n        \"STKFMVoices\",\n        \"STKFlute\",\n        \"STKHevyMetl\",\n        \"STKMandolin\",\n        \"STKModalBar\",\n        \"STKMoog\",\n        \"STKPercFlut\",\n        \"STKPlucked\",\n        \"STKResonate\",\n        \"STKRhodey\",\n        \"STKSaxofony\",\n        \"STKShakers\",\n        \"STKSimple\",\n        \"STKSitar\",\n        \"STKStifKarp\",\n        \"STKTubeBell\",\n        \"STKVoicForm\",\n        \"STKWhistle\",\n        \"STKWurley\",\n        \"a\",\n        \"abs\",\n        \"active\",\n        \"adsr\",\n        \"adsyn\",\n        \"adsynt\",\n        \"adsynt2\",\n        \"aftouch\",\n        \"alpass\",\n        \"alwayson\",\n        \"ampdb\",\n        \"ampdbfs\",\n        \"ampmidi\",\n        \"ampmidid\",\n        \"areson\",\n        \"aresonk\",\n        \"atone\",\n        \"atonek\",\n        \"atonex\",\n        \"babo\",\n        \"balance\",\n        \"bamboo\",\n        \"barmodel\",\n        \"bbcutm\",\n        \"bbcuts\",\n        \"betarand\",\n        \"bexprnd\",\n        \"bformdec1\",\n        \"bformenc1\",\n        \"binit\",\n        \"biquad\",\n        \"biquada\",\n        \"birnd\",\n        \"bpf\",\n        \"bqrez\",\n        \"buchla\",\n        \"butbp\",\n        \"butbr\",\n        \"buthp\",\n        \"butlp\",\n        \"butterbp\",\n        \"butterbr\",\n        \"butterhp\",\n        \"butterlp\",\n        \"button\",\n        \"buzz\",\n        \"c2r\",\n        \"cabasa\",\n        \"cauchy\",\n        \"cauchyi\",\n        \"cbrt\",\n        \"ceil\",\n        \"cell\",\n        \"cent\",\n        \"centroid\",\n        \"ceps\",\n        \"cepsinv\",\n        \"chanctrl\",\n        \"changed\",\n        \"changed2\",\n        \"chani\",\n        \"chano\",\n        \"chebyshevpoly\",\n        \"checkbox\",\n        \"chn_S\",\n        \"chn_a\",\n        \"chn_k\",\n        \"chnclear\",\n        \"chnexport\",\n        \"chnget\",\n        \"chnmix\",\n        \"chnparams\",\n        \"chnset\",\n        \"chuap\",\n        \"clear\",\n        \"clfilt\",\n        \"clip\",\n        \"clockoff\",\n        \"clockon\",\n        \"cmp\",\n        \"cmplxprod\",\n        \"comb\",\n        \"combinv\",\n        \"compilecsd\",\n        \"compileorc\",\n        \"compilestr\",\n        \"compress\",\n        \"compress2\",\n        \"connect\",\n        \"control\",\n        \"convle\",\n        \"convolve\",\n        \"copya2ftab\",\n        \"copyf2array\",\n        \"cos\",\n        \"cosh\",\n        \"cosinv\",\n        \"cosseg\",\n        \"cossegb\",\n        \"cossegr\",\n        \"cps2pch\",\n        \"cpsmidi\",\n        \"cpsmidib\",\n        \"cpsmidinn\",\n        \"cpsoct\",\n        \"cpspch\",\n        \"cpstmid\",\n        \"cpstun\",\n        \"cpstuni\",\n        \"cpsxpch\",\n        \"cpumeter\",\n        \"cpuprc\",\n        \"cross2\",\n        \"crossfm\",\n        \"crossfmi\",\n        \"crossfmpm\",\n        \"crossfmpmi\",\n        \"crosspm\",\n        \"crosspmi\",\n        \"crunch\",\n        \"ctlchn\",\n        \"ctrl14\",\n        \"ctrl21\",\n        \"ctrl7\",\n        \"ctrlinit\",\n        \"cuserrnd\",\n        \"dam\",\n        \"date\",\n        \"dates\",\n        \"db\",\n        \"dbamp\",\n        \"dbfsamp\",\n        \"dcblock\",\n        \"dcblock2\",\n        \"dconv\",\n        \"dct\",\n        \"dctinv\",\n        \"delay\",\n        \"delay1\",\n        \"delayk\",\n        \"delayr\",\n        \"delayw\",\n        \"deltap\",\n        \"deltap3\",\n        \"deltapi\",\n        \"deltapn\",\n        \"deltapx\",\n        \"deltapxw\",\n        \"denorm\",\n        \"diff\",\n        \"diode_ladder\",\n        \"directory\",\n        \"diskgrain\",\n        \"diskin\",\n        \"diskin2\",\n        \"dispfft\",\n        \"display\",\n        \"distort\",\n        \"distort1\",\n        \"divz\",\n        \"doppler\",\n        \"dot\",\n        \"downsamp\",\n        \"dripwater\",\n        \"dssiactivate\",\n        \"dssiaudio\",\n        \"dssictls\",\n        \"dssiinit\",\n        \"dssilist\",\n        \"dumpk\",\n        \"dumpk2\",\n        \"dumpk3\",\n        \"dumpk4\",\n        \"duserrnd\",\n        \"dust\",\n        \"dust2\",\n        \"envlpx\",\n        \"envlpxr\",\n        \"ephasor\",\n        \"eqfil\",\n        \"evalstr\",\n        \"event\",\n        \"event_i\",\n        \"exciter\",\n        \"exitnow\",\n        \"exp\",\n        \"expcurve\",\n        \"expon\",\n        \"exprand\",\n        \"exprandi\",\n        \"expseg\",\n        \"expsega\",\n        \"expsegb\",\n        \"expsegba\",\n        \"expsegr\",\n        \"fareylen\",\n        \"fareyleni\",\n        \"faustaudio\",\n        \"faustcompile\",\n        \"faustctl\",\n        \"faustgen\",\n        \"fft\",\n        \"fftinv\",\n        \"ficlose\",\n        \"filebit\",\n        \"filelen\",\n        \"filenchnls\",\n        \"filepeak\",\n        \"filescal\",\n        \"filesr\",\n        \"filevalid\",\n        \"fillarray\",\n        \"filter2\",\n        \"fin\",\n        \"fini\",\n        \"fink\",\n        \"fiopen\",\n        \"flanger\",\n        \"flashtxt\",\n        \"flooper\",\n        \"flooper2\",\n        \"floor\",\n        \"fluidAllOut\",\n        \"fluidCCi\",\n        \"fluidCCk\",\n        \"fluidControl\",\n        \"fluidEngine\",\n        \"fluidLoad\",\n        \"fluidNote\",\n        \"fluidOut\",\n        \"fluidProgramSelect\",\n        \"fluidSetInterpMethod\",\n        \"fmanal\",\n        \"fmax\",\n        \"fmb3\",\n        \"fmbell\",\n        \"fmin\",\n        \"fmmetal\",\n        \"fmod\",\n        \"fmpercfl\",\n        \"fmrhode\",\n        \"fmvoice\",\n        \"fmwurlie\",\n        \"fof\",\n        \"fof2\",\n        \"fofilter\",\n        \"fog\",\n        \"fold\",\n        \"follow\",\n        \"follow2\",\n        \"foscil\",\n        \"foscili\",\n        \"fout\",\n        \"fouti\",\n        \"foutir\",\n        \"foutk\",\n        \"fprintks\",\n        \"fprints\",\n        \"frac\",\n        \"fractalnoise\",\n        \"framebuffer\",\n        \"freeverb\",\n        \"ftchnls\",\n        \"ftconv\",\n        \"ftcps\",\n        \"ftfree\",\n        \"ftgen\",\n        \"ftgenonce\",\n        \"ftgentmp\",\n        \"ftlen\",\n        \"ftload\",\n        \"ftloadk\",\n        \"ftlptim\",\n        \"ftmorf\",\n        \"ftom\",\n        \"ftresize\",\n        \"ftresizei\",\n        \"ftsamplebank\",\n        \"ftsave\",\n        \"ftsavek\",\n        \"ftsr\",\n        \"gain\",\n        \"gainslider\",\n        \"gauss\",\n        \"gaussi\",\n        \"gausstrig\",\n        \"gbuzz\",\n        \"genarray\",\n        \"genarray_i\",\n        \"gendy\",\n        \"gendyc\",\n        \"gendyx\",\n        \"getcfg\",\n        \"getcol\",\n        \"getftargs\",\n        \"getrow\",\n        \"getseed\",\n        \"gogobel\",\n        \"grain\",\n        \"grain2\",\n        \"grain3\",\n        \"granule\",\n        \"guiro\",\n        \"harmon\",\n        \"harmon2\",\n        \"harmon3\",\n        \"harmon4\",\n        \"hdf5read\",\n        \"hdf5write\",\n        \"hilbert\",\n        \"hilbert2\",\n        \"hrtfearly\",\n        \"hrtfmove\",\n        \"hrtfmove2\",\n        \"hrtfreverb\",\n        \"hrtfstat\",\n        \"hsboscil\",\n        \"hvs1\",\n        \"hvs2\",\n        \"hvs3\",\n        \"hypot\",\n        \"i\",\n        \"ihold\",\n        \"imagecreate\",\n        \"imagefree\",\n        \"imagegetpixel\",\n        \"imageload\",\n        \"imagesave\",\n        \"imagesetpixel\",\n        \"imagesize\",\n        \"in\",\n        \"in32\",\n        \"inch\",\n        \"inh\",\n        \"init\",\n        \"initc14\",\n        \"initc21\",\n        \"initc7\",\n        \"inleta\",\n        \"inletf\",\n        \"inletk\",\n        \"inletkid\",\n        \"inletv\",\n        \"ino\",\n        \"inq\",\n        \"inrg\",\n        \"ins\",\n        \"insglobal\",\n        \"insremot\",\n        \"int\",\n        \"integ\",\n        \"interp\",\n        \"invalue\",\n        \"inx\",\n        \"inz\",\n        \"jacktransport\",\n        \"jitter\",\n        \"jitter2\",\n        \"joystick\",\n        \"jspline\",\n        \"k\",\n        \"la_i_add_mc\",\n        \"la_i_add_mr\",\n        \"la_i_add_vc\",\n        \"la_i_add_vr\",\n        \"la_i_assign_mc\",\n        \"la_i_assign_mr\",\n        \"la_i_assign_t\",\n        \"la_i_assign_vc\",\n        \"la_i_assign_vr\",\n        \"la_i_conjugate_mc\",\n        \"la_i_conjugate_mr\",\n        \"la_i_conjugate_vc\",\n        \"la_i_conjugate_vr\",\n        \"la_i_distance_vc\",\n        \"la_i_distance_vr\",\n        \"la_i_divide_mc\",\n        \"la_i_divide_mr\",\n        \"la_i_divide_vc\",\n        \"la_i_divide_vr\",\n        \"la_i_dot_mc\",\n        \"la_i_dot_mc_vc\",\n        \"la_i_dot_mr\",\n        \"la_i_dot_mr_vr\",\n        \"la_i_dot_vc\",\n        \"la_i_dot_vr\",\n        \"la_i_get_mc\",\n        \"la_i_get_mr\",\n        \"la_i_get_vc\",\n        \"la_i_get_vr\",\n        \"la_i_invert_mc\",\n        \"la_i_invert_mr\",\n        \"la_i_lower_solve_mc\",\n        \"la_i_lower_solve_mr\",\n        \"la_i_lu_det_mc\",\n        \"la_i_lu_det_mr\",\n        \"la_i_lu_factor_mc\",\n        \"la_i_lu_factor_mr\",\n        \"la_i_lu_solve_mc\",\n        \"la_i_lu_solve_mr\",\n        \"la_i_mc_create\",\n        \"la_i_mc_set\",\n        \"la_i_mr_create\",\n        \"la_i_mr_set\",\n        \"la_i_multiply_mc\",\n        \"la_i_multiply_mr\",\n        \"la_i_multiply_vc\",\n        \"la_i_multiply_vr\",\n        \"la_i_norm1_mc\",\n        \"la_i_norm1_mr\",\n        \"la_i_norm1_vc\",\n        \"la_i_norm1_vr\",\n        \"la_i_norm_euclid_mc\",\n        \"la_i_norm_euclid_mr\",\n        \"la_i_norm_euclid_vc\",\n        \"la_i_norm_euclid_vr\",\n        \"la_i_norm_inf_mc\",\n        \"la_i_norm_inf_mr\",\n        \"la_i_norm_inf_vc\",\n        \"la_i_norm_inf_vr\",\n        \"la_i_norm_max_mc\",\n        \"la_i_norm_max_mr\",\n        \"la_i_print_mc\",\n        \"la_i_print_mr\",\n        \"la_i_print_vc\",\n        \"la_i_print_vr\",\n        \"la_i_qr_eigen_mc\",\n        \"la_i_qr_eigen_mr\",\n        \"la_i_qr_factor_mc\",\n        \"la_i_qr_factor_mr\",\n        \"la_i_qr_sym_eigen_mc\",\n        \"la_i_qr_sym_eigen_mr\",\n        \"la_i_random_mc\",\n        \"la_i_random_mr\",\n        \"la_i_random_vc\",\n        \"la_i_random_vr\",\n        \"la_i_size_mc\",\n        \"la_i_size_mr\",\n        \"la_i_size_vc\",\n        \"la_i_size_vr\",\n        \"la_i_subtract_mc\",\n        \"la_i_subtract_mr\",\n        \"la_i_subtract_vc\",\n        \"la_i_subtract_vr\",\n        \"la_i_t_assign\",\n        \"la_i_trace_mc\",\n        \"la_i_trace_mr\",\n        \"la_i_transpose_mc\",\n        \"la_i_transpose_mr\",\n        \"la_i_upper_solve_mc\",\n        \"la_i_upper_solve_mr\",\n        \"la_i_vc_create\",\n        \"la_i_vc_set\",\n        \"la_i_vr_create\",\n        \"la_i_vr_set\",\n        \"la_k_a_assign\",\n        \"la_k_add_mc\",\n        \"la_k_add_mr\",\n        \"la_k_add_vc\",\n        \"la_k_add_vr\",\n        \"la_k_assign_a\",\n        \"la_k_assign_f\",\n        \"la_k_assign_mc\",\n        \"la_k_assign_mr\",\n        \"la_k_assign_t\",\n        \"la_k_assign_vc\",\n        \"la_k_assign_vr\",\n        \"la_k_conjugate_mc\",\n        \"la_k_conjugate_mr\",\n        \"la_k_conjugate_vc\",\n        \"la_k_conjugate_vr\",\n        \"la_k_current_f\",\n        \"la_k_current_vr\",\n        \"la_k_distance_vc\",\n        \"la_k_distance_vr\",\n        \"la_k_divide_mc\",\n        \"la_k_divide_mr\",\n        \"la_k_divide_vc\",\n        \"la_k_divide_vr\",\n        \"la_k_dot_mc\",\n        \"la_k_dot_mc_vc\",\n        \"la_k_dot_mr\",\n        \"la_k_dot_mr_vr\",\n        \"la_k_dot_vc\",\n        \"la_k_dot_vr\",\n        \"la_k_f_assign\",\n        \"la_k_get_mc\",\n        \"la_k_get_mr\",\n        \"la_k_get_vc\",\n        \"la_k_get_vr\",\n        \"la_k_invert_mc\",\n        \"la_k_invert_mr\",\n        \"la_k_lower_solve_mc\",\n        \"la_k_lower_solve_mr\",\n        \"la_k_lu_det_mc\",\n        \"la_k_lu_det_mr\",\n        \"la_k_lu_factor_mc\",\n        \"la_k_lu_factor_mr\",\n        \"la_k_lu_solve_mc\",\n        \"la_k_lu_solve_mr\",\n        \"la_k_mc_set\",\n        \"la_k_mr_set\",\n        \"la_k_multiply_mc\",\n        \"la_k_multiply_mr\",\n        \"la_k_multiply_vc\",\n        \"la_k_multiply_vr\",\n        \"la_k_norm1_mc\",\n        \"la_k_norm1_mr\",\n        \"la_k_norm1_vc\",\n        \"la_k_norm1_vr\",\n        \"la_k_norm_euclid_mc\",\n        \"la_k_norm_euclid_mr\",\n        \"la_k_norm_euclid_vc\",\n        \"la_k_norm_euclid_vr\",\n        \"la_k_norm_inf_mc\",\n        \"la_k_norm_inf_mr\",\n        \"la_k_norm_inf_vc\",\n        \"la_k_norm_inf_vr\",\n        \"la_k_norm_max_mc\",\n        \"la_k_norm_max_mr\",\n        \"la_k_qr_eigen_mc\",\n        \"la_k_qr_eigen_mr\",\n        \"la_k_qr_factor_mc\",\n        \"la_k_qr_factor_mr\",\n        \"la_k_qr_sym_eigen_mc\",\n        \"la_k_qr_sym_eigen_mr\",\n        \"la_k_random_mc\",\n        \"la_k_random_mr\",\n        \"la_k_random_vc\",\n        \"la_k_random_vr\",\n        \"la_k_subtract_mc\",\n        \"la_k_subtract_mr\",\n        \"la_k_subtract_vc\",\n        \"la_k_subtract_vr\",\n        \"la_k_t_assign\",\n        \"la_k_trace_mc\",\n        \"la_k_trace_mr\",\n        \"la_k_upper_solve_mc\",\n        \"la_k_upper_solve_mr\",\n        \"la_k_vc_set\",\n        \"la_k_vr_set\",\n        \"lenarray\",\n        \"lfo\",\n        \"limit\",\n        \"limit1\",\n        \"line\",\n        \"linen\",\n        \"linenr\",\n        \"lineto\",\n        \"link_beat_force\",\n        \"link_beat_get\",\n        \"link_beat_request\",\n        \"link_create\",\n        \"link_enable\",\n        \"link_is_enabled\",\n        \"link_metro\",\n        \"link_peers\",\n        \"link_tempo_get\",\n        \"link_tempo_set\",\n        \"linlin\",\n        \"linrand\",\n        \"linseg\",\n        \"linsegb\",\n        \"linsegr\",\n        \"liveconv\",\n        \"locsend\",\n        \"locsig\",\n        \"log\",\n        \"log10\",\n        \"log2\",\n        \"logbtwo\",\n        \"logcurve\",\n        \"loopseg\",\n        \"loopsegp\",\n        \"looptseg\",\n        \"loopxseg\",\n        \"lorenz\",\n        \"loscil\",\n        \"loscil3\",\n        \"loscilx\",\n        \"lowpass2\",\n        \"lowres\",\n        \"lowresx\",\n        \"lpf18\",\n        \"lpform\",\n        \"lpfreson\",\n        \"lphasor\",\n        \"lpinterp\",\n        \"lposcil\",\n        \"lposcil3\",\n        \"lposcila\",\n        \"lposcilsa\",\n        \"lposcilsa2\",\n        \"lpread\",\n        \"lpreson\",\n        \"lpshold\",\n        \"lpsholdp\",\n        \"lpslot\",\n        \"lua_exec\",\n        \"lua_iaopcall\",\n        \"lua_iaopcall_off\",\n        \"lua_ikopcall\",\n        \"lua_ikopcall_off\",\n        \"lua_iopcall\",\n        \"lua_iopcall_off\",\n        \"lua_opdef\",\n        \"mac\",\n        \"maca\",\n        \"madsr\",\n        \"mags\",\n        \"mandel\",\n        \"mandol\",\n        \"maparray\",\n        \"maparray_i\",\n        \"marimba\",\n        \"massign\",\n        \"max\",\n        \"max_k\",\n        \"maxabs\",\n        \"maxabsaccum\",\n        \"maxaccum\",\n        \"maxalloc\",\n        \"maxarray\",\n        \"mclock\",\n        \"mdelay\",\n        \"median\",\n        \"mediank\",\n        \"metro\",\n        \"mfb\",\n        \"midglobal\",\n        \"midiarp\",\n        \"midic14\",\n        \"midic21\",\n        \"midic7\",\n        \"midichannelaftertouch\",\n        \"midichn\",\n        \"midicontrolchange\",\n        \"midictrl\",\n        \"mididefault\",\n        \"midifilestatus\",\n        \"midiin\",\n        \"midinoteoff\",\n        \"midinoteoncps\",\n        \"midinoteonkey\",\n        \"midinoteonoct\",\n        \"midinoteonpch\",\n        \"midion\",\n        \"midion2\",\n        \"midiout\",\n        \"midipgm\",\n        \"midipitchbend\",\n        \"midipolyaftertouch\",\n        \"midiprogramchange\",\n        \"miditempo\",\n        \"midremot\",\n        \"min\",\n        \"minabs\",\n        \"minabsaccum\",\n        \"minaccum\",\n        \"minarray\",\n        \"mincer\",\n        \"mirror\",\n        \"mode\",\n        \"modmatrix\",\n        \"monitor\",\n        \"moog\",\n        \"moogladder\",\n        \"moogladder2\",\n        \"moogvcf\",\n        \"moogvcf2\",\n        \"moscil\",\n        \"mp3bitrate\",\n        \"mp3in\",\n        \"mp3len\",\n        \"mp3nchnls\",\n        \"mp3scal\",\n        \"mp3scal_check\",\n        \"mp3scal_load\",\n        \"mp3scal_load2\",\n        \"mp3scal_play\",\n        \"mp3scal_play2\",\n        \"mp3sr\",\n        \"mpulse\",\n        \"mrtmsg\",\n        \"mtof\",\n        \"mton\",\n        \"multitap\",\n        \"mute\",\n        \"mvchpf\",\n        \"mvclpf1\",\n        \"mvclpf2\",\n        \"mvclpf3\",\n        \"mvclpf4\",\n        \"mxadsr\",\n        \"nchnls_hw\",\n        \"nestedap\",\n        \"nlalp\",\n        \"nlfilt\",\n        \"nlfilt2\",\n        \"noise\",\n        \"noteoff\",\n        \"noteon\",\n        \"noteondur\",\n        \"noteondur2\",\n        \"notnum\",\n        \"nreverb\",\n        \"nrpn\",\n        \"nsamp\",\n        \"nstance\",\n        \"nstrnum\",\n        \"ntom\",\n        \"ntrpol\",\n        \"nxtpow2\",\n        \"octave\",\n        \"octcps\",\n        \"octmidi\",\n        \"octmidib\",\n        \"octmidinn\",\n        \"octpch\",\n        \"olabuffer\",\n        \"oscbnk\",\n        \"oscil\",\n        \"oscil1\",\n        \"oscil1i\",\n        \"oscil3\",\n        \"oscili\",\n        \"oscilikt\",\n        \"osciliktp\",\n        \"oscilikts\",\n        \"osciln\",\n        \"oscils\",\n        \"oscilx\",\n        \"out\",\n        \"out32\",\n        \"outc\",\n        \"outch\",\n        \"outh\",\n        \"outiat\",\n        \"outic\",\n        \"outic14\",\n        \"outipat\",\n        \"outipb\",\n        \"outipc\",\n        \"outkat\",\n        \"outkc\",\n        \"outkc14\",\n        \"outkpat\",\n        \"outkpb\",\n        \"outkpc\",\n        \"outleta\",\n        \"outletf\",\n        \"outletk\",\n        \"outletkid\",\n        \"outletv\",\n        \"outo\",\n        \"outq\",\n        \"outq1\",\n        \"outq2\",\n        \"outq3\",\n        \"outq4\",\n        \"outrg\",\n        \"outs\",\n        \"outs1\",\n        \"outs2\",\n        \"outvalue\",\n        \"outx\",\n        \"outz\",\n        \"p\",\n        \"p5gconnect\",\n        \"p5gdata\",\n        \"pan\",\n        \"pan2\",\n        \"pareq\",\n        \"part2txt\",\n        \"partials\",\n        \"partikkel\",\n        \"partikkelget\",\n        \"partikkelset\",\n        \"partikkelsync\",\n        \"passign\",\n        \"paulstretch\",\n        \"pcauchy\",\n        \"pchbend\",\n        \"pchmidi\",\n        \"pchmidib\",\n        \"pchmidinn\",\n        \"pchoct\",\n        \"pchtom\",\n        \"pconvolve\",\n        \"pcount\",\n        \"pdclip\",\n        \"pdhalf\",\n        \"pdhalfy\",\n        \"peak\",\n        \"pgmassign\",\n        \"pgmchn\",\n        \"phaser1\",\n        \"phaser2\",\n        \"phasor\",\n        \"phasorbnk\",\n        \"phs\",\n        \"pindex\",\n        \"pinker\",\n        \"pinkish\",\n        \"pitch\",\n        \"pitchac\",\n        \"pitchamdf\",\n        \"planet\",\n        \"platerev\",\n        \"plltrack\",\n        \"pluck\",\n        \"poisson\",\n        \"pol2rect\",\n        \"polyaft\",\n        \"polynomial\",\n        \"port\",\n        \"portk\",\n        \"poscil\",\n        \"poscil3\",\n        \"pow\",\n        \"powershape\",\n        \"powoftwo\",\n        \"pows\",\n        \"prealloc\",\n        \"prepiano\",\n        \"print\",\n        \"print_type\",\n        \"printf\",\n        \"printf_i\",\n        \"printk\",\n        \"printk2\",\n        \"printks\",\n        \"printks2\",\n        \"prints\",\n        \"product\",\n        \"pset\",\n        \"ptable\",\n        \"ptable3\",\n        \"ptablei\",\n        \"ptableiw\",\n        \"ptablew\",\n        \"ptrack\",\n        \"puts\",\n        \"pvadd\",\n        \"pvbufread\",\n        \"pvcross\",\n        \"pvinterp\",\n        \"pvoc\",\n        \"pvread\",\n        \"pvs2array\",\n        \"pvs2tab\",\n        \"pvsadsyn\",\n        \"pvsanal\",\n        \"pvsarp\",\n        \"pvsbandp\",\n        \"pvsbandr\",\n        \"pvsbin\",\n        \"pvsblur\",\n        \"pvsbuffer\",\n        \"pvsbufread\",\n        \"pvsbufread2\",\n        \"pvscale\",\n        \"pvscent\",\n        \"pvsceps\",\n        \"pvscross\",\n        \"pvsdemix\",\n        \"pvsdiskin\",\n        \"pvsdisp\",\n        \"pvsenvftw\",\n        \"pvsfilter\",\n        \"pvsfread\",\n        \"pvsfreeze\",\n        \"pvsfromarray\",\n        \"pvsftr\",\n        \"pvsftw\",\n        \"pvsfwrite\",\n        \"pvsgain\",\n        \"pvsgendy\",\n        \"pvshift\",\n        \"pvsifd\",\n        \"pvsin\",\n        \"pvsinfo\",\n        \"pvsinit\",\n        \"pvslock\",\n        \"pvsmaska\",\n        \"pvsmix\",\n        \"pvsmooth\",\n        \"pvsmorph\",\n        \"pvsosc\",\n        \"pvsout\",\n        \"pvspitch\",\n        \"pvstanal\",\n        \"pvstencil\",\n        \"pvstrace\",\n        \"pvsvoc\",\n        \"pvswarp\",\n        \"pvsynth\",\n        \"pwd\",\n        \"pyassign\",\n        \"pyassigni\",\n        \"pyassignt\",\n        \"pycall\",\n        \"pycall1\",\n        \"pycall1i\",\n        \"pycall1t\",\n        \"pycall2\",\n        \"pycall2i\",\n        \"pycall2t\",\n        \"pycall3\",\n        \"pycall3i\",\n        \"pycall3t\",\n        \"pycall4\",\n        \"pycall4i\",\n        \"pycall4t\",\n        \"pycall5\",\n        \"pycall5i\",\n        \"pycall5t\",\n        \"pycall6\",\n        \"pycall6i\",\n        \"pycall6t\",\n        \"pycall7\",\n        \"pycall7i\",\n        \"pycall7t\",\n        \"pycall8\",\n        \"pycall8i\",\n        \"pycall8t\",\n        \"pycalli\",\n        \"pycalln\",\n        \"pycallni\",\n        \"pycallt\",\n        \"pyeval\",\n        \"pyevali\",\n        \"pyevalt\",\n        \"pyexec\",\n        \"pyexeci\",\n        \"pyexect\",\n        \"pyinit\",\n        \"pylassign\",\n        \"pylassigni\",\n        \"pylassignt\",\n        \"pylcall\",\n        \"pylcall1\",\n        \"pylcall1i\",\n        \"pylcall1t\",\n        \"pylcall2\",\n        \"pylcall2i\",\n        \"pylcall2t\",\n        \"pylcall3\",\n        \"pylcall3i\",\n        \"pylcall3t\",\n        \"pylcall4\",\n        \"pylcall4i\",\n        \"pylcall4t\",\n        \"pylcall5\",\n        \"pylcall5i\",\n        \"pylcall5t\",\n        \"pylcall6\",\n        \"pylcall6i\",\n        \"pylcall6t\",\n        \"pylcall7\",\n        \"pylcall7i\",\n        \"pylcall7t\",\n        \"pylcall8\",\n        \"pylcall8i\",\n        \"pylcall8t\",\n        \"pylcalli\",\n        \"pylcalln\",\n        \"pylcallni\",\n        \"pylcallt\",\n        \"pyleval\",\n        \"pylevali\",\n        \"pylevalt\",\n        \"pylexec\",\n        \"pylexeci\",\n        \"pylexect\",\n        \"pylrun\",\n        \"pylruni\",\n        \"pylrunt\",\n        \"pyrun\",\n        \"pyruni\",\n        \"pyrunt\",\n        \"qinf\",\n        \"qnan\",\n        \"r2c\",\n        \"rand\",\n        \"randh\",\n        \"randi\",\n        \"random\",\n        \"randomh\",\n        \"randomi\",\n        \"rbjeq\",\n        \"readclock\",\n        \"readf\",\n        \"readfi\",\n        \"readk\",\n        \"readk2\",\n        \"readk3\",\n        \"readk4\",\n        \"readks\",\n        \"readscore\",\n        \"readscratch\",\n        \"rect2pol\",\n        \"release\",\n        \"remoteport\",\n        \"remove\",\n        \"repluck\",\n        \"reson\",\n        \"resonk\",\n        \"resonr\",\n        \"resonx\",\n        \"resonxk\",\n        \"resony\",\n        \"resonz\",\n        \"resyn\",\n        \"reverb\",\n        \"reverb2\",\n        \"reverbsc\",\n        \"rewindscore\",\n        \"rezzy\",\n        \"rfft\",\n        \"rifft\",\n        \"rms\",\n        \"rnd\",\n        \"rnd31\",\n        \"round\",\n        \"rspline\",\n        \"rtclock\",\n        \"s16b14\",\n        \"s32b14\",\n        \"samphold\",\n        \"sandpaper\",\n        \"sc_lag\",\n        \"sc_lagud\",\n        \"sc_phasor\",\n        \"sc_trig\",\n        \"scale\",\n        \"scalearray\",\n        \"scanhammer\",\n        \"scans\",\n        \"scantable\",\n        \"scanu\",\n        \"schedkwhen\",\n        \"schedkwhennamed\",\n        \"schedule\",\n        \"schedwhen\",\n        \"scoreline\",\n        \"scoreline_i\",\n        \"seed\",\n        \"sekere\",\n        \"select\",\n        \"semitone\",\n        \"sense\",\n        \"sensekey\",\n        \"seqtime\",\n        \"seqtime2\",\n        \"serialBegin\",\n        \"serialEnd\",\n        \"serialFlush\",\n        \"serialPrint\",\n        \"serialRead\",\n        \"serialWrite\",\n        \"serialWrite_i\",\n        \"setcol\",\n        \"setctrl\",\n        \"setksmps\",\n        \"setrow\",\n        \"setscorepos\",\n        \"sfilist\",\n        \"sfinstr\",\n        \"sfinstr3\",\n        \"sfinstr3m\",\n        \"sfinstrm\",\n        \"sfload\",\n        \"sflooper\",\n        \"sfpassign\",\n        \"sfplay\",\n        \"sfplay3\",\n        \"sfplay3m\",\n        \"sfplaym\",\n        \"sfplist\",\n        \"sfpreset\",\n        \"shaker\",\n        \"shiftin\",\n        \"shiftout\",\n        \"signalflowgraph\",\n        \"signum\",\n        \"sin\",\n        \"sinh\",\n        \"sininv\",\n        \"sinsyn\",\n        \"sleighbells\",\n        \"slicearray\",\n        \"slider16\",\n        \"slider16f\",\n        \"slider16table\",\n        \"slider16tablef\",\n        \"slider32\",\n        \"slider32f\",\n        \"slider32table\",\n        \"slider32tablef\",\n        \"slider64\",\n        \"slider64f\",\n        \"slider64table\",\n        \"slider64tablef\",\n        \"slider8\",\n        \"slider8f\",\n        \"slider8table\",\n        \"slider8tablef\",\n        \"sliderKawai\",\n        \"sndloop\",\n        \"sndwarp\",\n        \"sndwarpst\",\n        \"sockrecv\",\n        \"sockrecvs\",\n        \"socksend\",\n        \"socksend_k\",\n        \"socksends\",\n        \"sorta\",\n        \"sortd\",\n        \"soundin\",\n        \"space\",\n        \"spat3d\",\n        \"spat3di\",\n        \"spat3dt\",\n        \"spdist\",\n        \"splitrig\",\n        \"sprintf\",\n        \"sprintfk\",\n        \"spsend\",\n        \"sqrt\",\n        \"statevar\",\n        \"stix\",\n        \"strcat\",\n        \"strcatk\",\n        \"strchar\",\n        \"strchark\",\n        \"strcmp\",\n        \"strcmpk\",\n        \"strcpy\",\n        \"strcpyk\",\n        \"strecv\",\n        \"streson\",\n        \"strfromurl\",\n        \"strget\",\n        \"strindex\",\n        \"strindexk\",\n        \"strlen\",\n        \"strlenk\",\n        \"strlower\",\n        \"strlowerk\",\n        \"strrindex\",\n        \"strrindexk\",\n        \"strset\",\n        \"strsub\",\n        \"strsubk\",\n        \"strtod\",\n        \"strtodk\",\n        \"strtol\",\n        \"strtolk\",\n        \"strupper\",\n        \"strupperk\",\n        \"stsend\",\n        \"subinstr\",\n        \"subinstrinit\",\n        \"sum\",\n        \"sumarray\",\n        \"svfilter\",\n        \"syncgrain\",\n        \"syncloop\",\n        \"syncphasor\",\n        \"system\",\n        \"system_i\",\n        \"tab\",\n        \"tab2pvs\",\n        \"tab_i\",\n        \"tabifd\",\n        \"table\",\n        \"table3\",\n        \"table3kt\",\n        \"tablecopy\",\n        \"tablefilter\",\n        \"tablefilteri\",\n        \"tablegpw\",\n        \"tablei\",\n        \"tableicopy\",\n        \"tableigpw\",\n        \"tableikt\",\n        \"tableimix\",\n        \"tableiw\",\n        \"tablekt\",\n        \"tablemix\",\n        \"tableng\",\n        \"tablera\",\n        \"tableseg\",\n        \"tableshuffle\",\n        \"tableshufflei\",\n        \"tablew\",\n        \"tablewa\",\n        \"tablewkt\",\n        \"tablexkt\",\n        \"tablexseg\",\n        \"tabmorph\",\n        \"tabmorpha\",\n        \"tabmorphak\",\n        \"tabmorphi\",\n        \"tabplay\",\n        \"tabrec\",\n        \"tabsum\",\n        \"tabw\",\n        \"tabw_i\",\n        \"tambourine\",\n        \"tan\",\n        \"tanh\",\n        \"taninv\",\n        \"taninv2\",\n        \"tb0\",\n        \"tb0_init\",\n        \"tb1\",\n        \"tb10\",\n        \"tb10_init\",\n        \"tb11\",\n        \"tb11_init\",\n        \"tb12\",\n        \"tb12_init\",\n        \"tb13\",\n        \"tb13_init\",\n        \"tb14\",\n        \"tb14_init\",\n        \"tb15\",\n        \"tb15_init\",\n        \"tb1_init\",\n        \"tb2\",\n        \"tb2_init\",\n        \"tb3\",\n        \"tb3_init\",\n        \"tb4\",\n        \"tb4_init\",\n        \"tb5\",\n        \"tb5_init\",\n        \"tb6\",\n        \"tb6_init\",\n        \"tb7\",\n        \"tb7_init\",\n        \"tb8\",\n        \"tb8_init\",\n        \"tb9\",\n        \"tb9_init\",\n        \"tbvcf\",\n        \"tempest\",\n        \"tempo\",\n        \"temposcal\",\n        \"tempoval\",\n        \"timedseq\",\n        \"timeinstk\",\n        \"timeinsts\",\n        \"timek\",\n        \"times\",\n        \"tival\",\n        \"tlineto\",\n        \"tone\",\n        \"tonek\",\n        \"tonex\",\n        \"tradsyn\",\n        \"trandom\",\n        \"transeg\",\n        \"transegb\",\n        \"transegr\",\n        \"trcross\",\n        \"trfilter\",\n        \"trhighest\",\n        \"trigger\",\n        \"trigseq\",\n        \"trirand\",\n        \"trlowest\",\n        \"trmix\",\n        \"trscale\",\n        \"trshift\",\n        \"trsplit\",\n        \"turnoff\",\n        \"turnoff2\",\n        \"turnon\",\n        \"tvconv\",\n        \"unirand\",\n        \"unwrap\",\n        \"upsamp\",\n        \"urandom\",\n        \"urd\",\n        \"vactrol\",\n        \"vadd\",\n        \"vadd_i\",\n        \"vaddv\",\n        \"vaddv_i\",\n        \"vaget\",\n        \"valpass\",\n        \"vaset\",\n        \"vbap\",\n        \"vbapg\",\n        \"vbapgmove\",\n        \"vbaplsinit\",\n        \"vbapmove\",\n        \"vbapz\",\n        \"vbapzmove\",\n        \"vcella\",\n        \"vco\",\n        \"vco2\",\n        \"vco2ft\",\n        \"vco2ift\",\n        \"vco2init\",\n        \"vcomb\",\n        \"vcopy\",\n        \"vcopy_i\",\n        \"vdel_k\",\n        \"vdelay\",\n        \"vdelay3\",\n        \"vdelayk\",\n        \"vdelayx\",\n        \"vdelayxq\",\n        \"vdelayxs\",\n        \"vdelayxw\",\n        \"vdelayxwq\",\n        \"vdelayxws\",\n        \"vdivv\",\n        \"vdivv_i\",\n        \"vecdelay\",\n        \"veloc\",\n        \"vexp\",\n        \"vexp_i\",\n        \"vexpseg\",\n        \"vexpv\",\n        \"vexpv_i\",\n        \"vibes\",\n        \"vibr\",\n        \"vibrato\",\n        \"vincr\",\n        \"vlimit\",\n        \"vlinseg\",\n        \"vlowres\",\n        \"vmap\",\n        \"vmirror\",\n        \"vmult\",\n        \"vmult_i\",\n        \"vmultv\",\n        \"vmultv_i\",\n        \"voice\",\n        \"vosim\",\n        \"vphaseseg\",\n        \"vport\",\n        \"vpow\",\n        \"vpow_i\",\n        \"vpowv\",\n        \"vpowv_i\",\n        \"vpvoc\",\n        \"vrandh\",\n        \"vrandi\",\n        \"vsubv\",\n        \"vsubv_i\",\n        \"vtaba\",\n        \"vtabi\",\n        \"vtabk\",\n        \"vtable1k\",\n        \"vtablea\",\n        \"vtablei\",\n        \"vtablek\",\n        \"vtablewa\",\n        \"vtablewi\",\n        \"vtablewk\",\n        \"vtabwa\",\n        \"vtabwi\",\n        \"vtabwk\",\n        \"vwrap\",\n        \"waveset\",\n        \"websocket\",\n        \"weibull\",\n        \"wgbow\",\n        \"wgbowedbar\",\n        \"wgbrass\",\n        \"wgclar\",\n        \"wgflute\",\n        \"wgpluck\",\n        \"wgpluck2\",\n        \"wguide1\",\n        \"wguide2\",\n        \"wiiconnect\",\n        \"wiidata\",\n        \"wiirange\",\n        \"wiisend\",\n        \"window\",\n        \"wrap\",\n        \"writescratch\",\n        \"wterrain\",\n        \"xadsr\",\n        \"xin\",\n        \"xout\",\n        \"xscanmap\",\n        \"xscans\",\n        \"xscansmap\",\n        \"xscanu\",\n        \"xtratim\",\n        \"xyscale\",\n        \"zacl\",\n        \"zakinit\",\n        \"zamod\",\n        \"zar\",\n        \"zarg\",\n        \"zaw\",\n        \"zawm\",\n        \"zdf_1pole\",\n        \"zdf_1pole_mode\",\n        \"zdf_2pole\",\n        \"zdf_2pole_mode\",\n        \"zdf_ladder\",\n        \"zfilter2\",\n        \"zir\",\n        \"ziw\",\n        \"ziwm\",\n        \"zkcl\",\n        \"zkmod\",\n        \"zkr\",\n        \"zkw\",\n        \"zkwm\"\n    ];\n    var deprecatedOpcodes = [\n        \"array\",\n        \"bformdec\",\n        \"bformenc\",\n        \"copy2ftab\",\n        \"copy2ttab\",\n        \"hrtfer\",\n        \"ktableseg\",\n        \"lentab\",\n        \"maxtab\",\n        \"mintab\",\n        \"pop\",\n        \"pop_f\",\n        \"push\",\n        \"push_f\",\n        \"scalet\",\n        \"sndload\",\n        \"soundout\",\n        \"soundouts\",\n        \"specaddm\",\n        \"specdiff\",\n        \"specdisp\",\n        \"specfilt\",\n        \"spechist\",\n        \"specptrk\",\n        \"specscal\",\n        \"specsum\",\n        \"spectrum\",\n        \"stack\",\n        \"sumtab\",\n        \"tabgen\",\n        \"tabmap\",\n        \"tabmap_i\",\n        \"tabslice\",\n        \"vbap16\",\n        \"vbap4\",\n        \"vbap4move\",\n        \"vbap8\",\n        \"vbap8move\",\n        \"xyin\"\n    ];\n\n    opcodes = lang.arrayToMap(opcodes);\n    deprecatedOpcodes = lang.arrayToMap(deprecatedOpcodes);\n\n    this.lineContinuations = [\n        {\n            token : \"constant.character.escape.line-continuation.csound\",\n            regex : /\\\\$/\n        }, this.pushRule({\n            token : \"constant.character.escape.line-continuation.csound\",\n            regex : /\\\\/,\n            next  : \"line continuation\"\n        })\n    ];\n\n    this.comments.push(this.lineContinuations);\n\n    this.quotedStringContents.push(\n        this.lineContinuations,\n        {\n            token : \"invalid.illegal\",\n            regex : /[^\"\\\\]*$/\n        }\n    );\n\n    var start = this.$rules.start;\n    start.splice(1, 0, {\n        token : [\"text.csound\", \"entity.name.label.csound\", \"entity.punctuation.label.csound\", \"text.csound\"],\n        regex : /^([ \\t]*)(\\w+)(:)([ \\t]+|$)/\n    });\n    start.push(\n        this.pushRule({\n            token : \"keyword.function.csound\",\n            regex : /\\binstr\\b/,\n            next  : \"instrument numbers and identifiers\"\n        }), this.pushRule({\n            token : \"keyword.function.csound\",\n            regex : /\\bopcode\\b/,\n            next  : \"after opcode keyword\"\n        }), {\n            token : \"keyword.other.csound\",\n            regex : /\\bend(?:in|op)\\b/\n        },\n\n        {\n            token : \"variable.language.csound\",\n            regex : /\\b(?:0dbfs|A4|k(?:r|smps)|nchnls(?:_i)?|sr)\\b/\n        },\n\n        this.numbers,\n\n        {\n            token : \"keyword.operator.csound\",\n            regex : \"\\\\+=|-=|\\\\*=|/=|<<|>>|<=|>=|==|!=|&&|\\\\|\\\\||[~¬]|[=!+\\\\-*/^%&|<>#?:]\"\n        },\n\n        this.pushRule({\n            token : \"punctuation.definition.string.begin.csound\",\n            regex : /\"/,\n            next  : \"quoted string\"\n        }), this.pushRule({\n            token : \"punctuation.definition.string.begin.csound\",\n            regex : /{{/,\n            next  : \"braced string\"\n        }),\n\n        {\n            token : \"keyword.control.csound\",\n            regex : /\\b(?:do|else(?:if)?|end(?:if|until)|fi|i(?:f|then)|kthen|od|r(?:ir)?eturn|then|until|while)\\b/\n        },\n\n        this.pushRule({\n            token : \"keyword.control.csound\",\n            regex : /\\b[ik]?goto\\b/,\n            next  : \"goto before label\"\n        }), this.pushRule({\n            token : \"keyword.control.csound\",\n            regex : /\\b(?:r(?:einit|igoto)|tigoto)\\b/,\n            next  : \"goto before label\"\n        }), this.pushRule({\n            token : \"keyword.control.csound\",\n            regex : /\\bc(?:g|in?|k|nk?)goto\\b/,\n            next  : [\"goto before label\", \"goto before argument\"]\n        }), this.pushRule({\n            token : \"keyword.control.csound\",\n            regex : /\\btimout\\b/,\n            next  : [\"goto before label\", \"goto before argument\", \"goto before argument\"]\n        }), this.pushRule({\n            token : \"keyword.control.csound\",\n            regex : /\\bloop_[gl][et]\\b/,\n            next  : [\"goto before label\", \"goto before argument\", \"goto before argument\", \"goto before argument\"]\n        }),\n\n        this.pushRule({\n            token : \"support.function.csound\",\n            regex : /\\b(?:readscore|scoreline(?:_i)?)\\b/,\n            next  : \"Csound score opcode\"\n        }), this.pushRule({\n            token : \"support.function.csound\",\n            regex : /\\bpyl?run[it]?\\b(?!$)/,\n            next  : \"Python opcode\"\n        }), this.pushRule({\n            token : \"support.function.csound\",\n            regex : /\\blua_(?:exec|opdef)\\b(?!$)/,\n            next  : \"Lua opcode\"\n        }),\n\n        {\n            token : \"support.variable.csound\",\n            regex : /\\bp\\d+\\b/\n        }, {\n            regex : /\\b([A-Z_a-z]\\w*)(?:(:)([A-Za-z]))?\\b/, onMatch: function(value, currentState, stack, line) {\n                var tokens = value.split(this.splitRegex);\n                var name = tokens[1];\n                var type;\n                if (opcodes.hasOwnProperty(name))\n                    type = \"support.function.csound\";\n                else if (deprecatedOpcodes.hasOwnProperty(name))\n                    type = \"invalid.deprecated.csound\";\n                if (type) {\n                    if (tokens[2]) {\n                        return [\n                            {type: type, value: name},\n                            {type: \"punctuation.type-annotation.csound\", value: tokens[2]},\n                            {type: \"type-annotation.storage.type.csound\", value: tokens[3]}\n                        ];\n                    }\n                    return type;\n                }\n                return \"text.csound\";\n            }\n        }\n    );\n\n    this.$rules[\"macro parameter value list\"].splice(2, 0, {\n        token : \"punctuation.definition.string.begin.csound\",\n        regex : /{{/,\n        next  : \"macro parameter value braced string\"\n    });\n\n    this.addRules({\n        \"macro parameter value braced string\": [\n            {\n                token : \"constant.character.escape.csound\",\n                regex : /\\\\[#'()]/\n            }, {\n                token : \"invalid.illegal.csound.csound\",\n                regex : /[#'()]/\n            }, {\n                token : \"punctuation.definition.string.end.csound\",\n                regex : /}}/,\n                next  : \"macro parameter value list\"\n            }, {\n                defaultToken: \"string.braced.csound\"\n            }\n        ],\n\n        \"instrument numbers and identifiers\": [\n            this.comments,\n            {\n                token : \"entity.name.function.csound\",\n                regex : /\\d+|[A-Z_a-z]\\w*/\n            }, this.popRule({\n                token : \"empty\",\n                regex : /$/\n            })\n        ],\n\n        \"after opcode keyword\": [\n            this.comments,\n            this.popRule({\n                token : \"empty\",\n                regex : /$/\n            }), this.popRule({\n                token : \"entity.name.function.opcode.csound\",\n                regex : /[A-Z_a-z]\\w*/,\n                next  : \"opcode type signatures\"\n            })\n        ],\n        \"opcode type signatures\": [\n            this.comments,\n            this.popRule({\n                token : \"empty\",\n                regex : /$/\n            }), {\n                token : \"storage.type.csound\",\n                // https://github.com/csound/csound/search?q=XIDENT+path%3AEngine+filename%3Acsound_orc.lex\n                regex : /\\b(?:0|[afijkKoOpPStV\\[\\]]+)/\n            }\n        ],\n\n        \"quoted string\": [\n            this.popRule({\n                token : \"punctuation.definition.string.end.csound\",\n                regex : /\"/\n            }),\n            this.quotedStringContents,\n            {\n                defaultToken: \"string.quoted.csound\"\n            }\n        ],\n        \"braced string\": [\n            this.popRule({\n                token : \"punctuation.definition.string.end.csound\",\n                regex : /}}/\n            }),\n            this.bracedStringContents,\n            {\n                defaultToken: \"string.braced.csound\"\n            }\n        ],\n\n        \"goto before argument\": [\n            this.popRule({\n                token : \"text.csound\",\n                regex : /,/\n            }),\n            start\n        ],\n        \"goto before label\": [\n            {\n                token : \"text.csound\",\n                regex : /\\s+/\n            },\n            this.comments,\n            this.popRule({\n                token : \"entity.name.label.csound\",\n                regex : /\\w+/\n            }), this.popRule({\n                token : \"empty\",\n                regex : /(?!\\w)/\n            })\n        ],\n\n        \"Csound score opcode\": [\n            this.comments,\n            {\n                token : \"punctuation.definition.string.begin.csound\",\n                regex : /{{/,\n                next  : \"csound-score-start\"\n            }, this.popRule({\n                token : \"empty\",\n                regex : /$/\n            })\n        ],\n\n        \"Python opcode\": [\n            this.comments,\n            {\n                token : \"punctuation.definition.string.begin.csound\",\n                regex : /{{/,\n                next  : \"python-start\"\n            }, this.popRule({\n                token : \"empty\",\n                regex : /$/\n            })\n        ],\n\n        \"Lua opcode\": [\n            this.comments,\n            {\n                token : \"punctuation.definition.string.begin.csound\",\n                regex : /{{/,\n                next  : \"lua-start\"\n            }, this.popRule({\n                token : \"empty\",\n                regex : /$/\n            })\n        ],\n\n        \"line continuation\": [\n            this.popRule({\n                token : \"empty\",\n                regex : /$/\n            }),\n            this.semicolonComments,\n            {\n                token : \"invalid.illegal.csound\",\n                regex : /\\S.*/\n            }\n        ]\n    });\n\n    var rules = [\n        this.popRule({\n            token : \"punctuation.definition.string.end.csound\",\n            regex : /}}/\n        })\n    ];\n    this.embedRules(CsoundScoreHighlightRules, \"csound-score-\", rules);\n    this.embedRules(PythonHighlightRules, \"python-\", rules);\n    this.embedRules(LuaHighlightRules, \"lua-\", rules);\n\n    this.normalizeRules();\n};\n\noop.inherits(CsoundOrchestraHighlightRules, CsoundPreprocessorHighlightRules);\n\nexports.CsoundOrchestraHighlightRules = CsoundOrchestraHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/csound_preprocessor_highlight_rules.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\n\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar CsoundPreprocessorHighlightRules = function() {\n\n    this.semicolonComments = {\n        token : \"comment.line.semicolon.csound\",\n        regex : \";.*$\"\n    };\n\n    this.comments = [\n        {\n            token : \"punctuation.definition.comment.begin.csound\",\n            regex : \"/\\\\*\",\n            push  : [\n                {\n                    token : \"punctuation.definition.comment.end.csound\",\n                    regex : \"\\\\*/\",\n                    next  : \"pop\"\n                }, {\n                    defaultToken: \"comment.block.csound\"\n                }\n            ]\n        }, {\n            token : \"comment.line.double-slash.csound\",\n            regex : \"//.*$\"\n        },\n        this.semicolonComments\n    ];\n\n    this.macroUses = [\n        {\n            token : [\"entity.name.function.preprocessor.csound\", \"punctuation.definition.macro-parameter-value-list.begin.csound\"],\n            regex : /(\\$[A-Z_a-z]\\w*\\.?)(\\()/,\n            next  : \"macro parameter value list\"\n        }, {\n            token : \"entity.name.function.preprocessor.csound\",\n            regex : /\\$[A-Z_a-z]\\w*(?:\\.|\\b)/\n        }\n    ];\n\n    this.numbers = [\n        {\n            token : \"constant.numeric.float.csound\",\n            regex : /(?:\\d+[Ee][+-]?\\d+)|(?:\\d+\\.\\d*|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?/\n        }, {\n            token : [\"storage.type.number.csound\", \"constant.numeric.integer.hexadecimal.csound\"],\n            regex : /(0[Xx])([0-9A-Fa-f]+)/\n        }, {\n            token : \"constant.numeric.integer.decimal.csound\",\n            regex : /\\d+/\n        }\n    ];\n\n    this.bracedStringContents = [\n        {\n            token : \"constant.character.escape.csound\",\n            // https://github.com/csound/csound/search?q=unquote_string+path%3AEngine+filename%3Acsound_orc_compile.c\n            regex : /\\\\(?:[\\\\abnrt\"]|[0-7]{1,3})/\n        },\n        // Format specifiers are included in quoted and braced strings. This\n        // means that format specifiers are highlighted in all strings, even\n        // though only\n        //   fprintks        https://csound.github.io/docs/manual/fprintks.html\n        //   fprints         https://csound.github.io/docs/manual/fprints.html\n        //   printf/printf_i https://csound.github.io/docs/manual/printf.html\n        //   printks         https://csound.github.io/docs/manual/printks.html\n        //   prints          https://csound.github.io/docs/manual/prints.html\n        //   sprintf         https://csound.github.io/docs/manual/sprintf.html\n        //   sprintfk        https://csound.github.io/docs/manual/sprintfk.html\n        // work with strings that contain format specifiers. In addition, these\n        // opcodes’ handling of format specifiers is inconsistent:\n        //   - fprintks, fprints, printks, and prints do accept %a and %A\n        //     specifiers, but can’t accept %s specifiers.\n        //   - printf, printf_i, sprintf, and sprintfk don’t accept %a and %A\n        //     specifiers, but do accept %s specifiers.\n        // See https://github.com/csound/csound/issues/747 for more information.\n        {\n            token : \"constant.character.placeholder.csound\",\n            regex : /%[#0\\- +]*\\d*(?:\\.\\d+)?[diuoxXfFeEgGaAcs]/\n        }, {\n            token : \"constant.character.escape.csound\",\n            regex : /%%/\n        }\n    ];\n\n    this.quotedStringContents = [\n        this.macroUses,\n        this.bracedStringContents\n    ];\n\n    var start = [\n        this.comments,\n\n        {\n            token : \"keyword.preprocessor.csound\",\n            regex : /#(?:e(?:nd(?:if)?|lse)\\b|##)|@@?[ \\t]*\\d+/\n        }, {\n            token : \"keyword.preprocessor.csound\",\n            regex : /#include/,\n            push  : [\n                this.comments,\n                {\n                    token : \"string.csound\",\n                    regex : /([^ \\t])(?:.*?\\1)/,\n                    next  : \"pop\"\n                }\n            ]\n        }, {\n            token : \"keyword.preprocessor.csound\",\n            regex : /#[ \\t]*define/,\n            next  : \"define directive\"\n        }, {\n            token : \"keyword.preprocessor.csound\",\n            regex : /#(?:ifn?def|undef)\\b/,\n            next  : \"macro directive\"\n        },\n\n        this.macroUses\n    ];\n\n    this.$rules = {\n        \"start\": start,\n\n        \"define directive\": [\n            this.comments,\n            {\n                token : \"entity.name.function.preprocessor.csound\",\n                regex : /[A-Z_a-z]\\w*/\n            }, {\n                token : \"punctuation.definition.macro-parameter-name-list.begin.csound\",\n                regex : /\\(/,\n                next  : \"macro parameter name list\"\n            }, {\n                token : \"punctuation.definition.macro.begin.csound\",\n                regex : /#/,\n                next  : \"macro body\"\n            }\n        ],\n        \"macro parameter name list\": [\n            {\n                token : \"variable.parameter.preprocessor.csound\",\n                regex : /[A-Z_a-z]\\w*/\n            }, {\n                token : \"punctuation.definition.macro-parameter-name-list.end.csound\",\n                regex : /\\)/,\n                next  : \"define directive\"\n            }\n        ],\n        \"macro body\": [\n            {\n                token : \"constant.character.escape.csound\",\n                regex : /\\\\#/\n            }, {\n                token : \"punctuation.definition.macro.end.csound\",\n                regex : /#/,\n                next  : \"start\"\n            },\n            start\n        ],\n\n        \"macro directive\": [\n            this.comments,\n            {\n                token : \"entity.name.function.preprocessor.csound\",\n                regex : /[A-Z_a-z]\\w*/,\n                next  : \"start\"\n            }\n        ],\n\n        \"macro parameter value list\": [\n            {\n                token : \"punctuation.definition.macro-parameter-value-list.end.csound\",\n                regex : /\\)/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.definition.string.begin.csound\",\n                regex : /\"/,\n                next  : \"macro parameter value quoted string\"\n            }, this.pushRule({\n                token : \"punctuation.macro-parameter-value-parenthetical.begin.csound\",\n                regex : /\\(/,\n                next  : \"macro parameter value parenthetical\"\n            }), {\n                token : \"punctuation.macro-parameter-value-separator.csound\",\n                regex : \"[#']\"\n            }\n        ],\n        \"macro parameter value quoted string\": [\n            {\n                token : \"constant.character.escape.csound\",\n                regex : /\\\\[#'()]/\n            }, {\n                token : \"invalid.illegal.csound\",\n                regex : /[#'()]/\n            }, {\n                token : \"punctuation.definition.string.end.csound\",\n                regex : /\"/,\n                next  : \"macro parameter value list\"\n            },\n            this.quotedStringContents,\n            {\n                defaultToken: \"string.quoted.csound\"\n            }\n        ],\n        \"macro parameter value parenthetical\": [\n            {\n                token : \"constant.character.escape.csound\",\n                regex : /\\\\\\)/\n            }, this.popRule({\n                token : \"punctuation.macro-parameter-value-parenthetical.end.csound\",\n                regex : /\\)/\n            }), this.pushRule({\n                token : \"punctuation.macro-parameter-value-parenthetical.begin.csound\",\n                regex : /\\(/,\n                next  : \"macro parameter value parenthetical\"\n            }),\n            start\n        ]\n    };\n};\n\noop.inherits(CsoundPreprocessorHighlightRules, TextHighlightRules);\n\n(function() {\n\n    this.pushRule = function(params) {\n        return {\n            regex : params.regex, onMatch: function(value, currentState, stack, line) {\n                if (stack.length === 0)\n                    stack.push(currentState);\n                if (Array.isArray(params.next)) {\n                    for (var i = 0; i < params.next.length; i++) {\n                        stack.push(params.next[i]);\n                    }\n                } else {\n                    stack.push(params.next);\n                }\n                this.next = stack[stack.length - 1];\n                return params.token;\n            },\n\n            // TODO\n            get next() { return Array.isArray(params.next) ? params.next[params.next.length - 1] : params.next; },\n            set next(next) {\n                if (Array.isArray(params.next)) {\n                    var oldNext = params.next[params.next.length - 1];\n                    var oldNextIndex = oldNext.length - 1;\n                    var newNextIndex = next.length - 1;\n                    if (newNextIndex > oldNextIndex) {\n                        while (oldNextIndex >= 0 && newNextIndex >= 0) {\n                            if (oldNext.charAt(oldNextIndex) !== next.charAt(newNextIndex)) {\n                                var prefix = next.substr(0, newNextIndex);\n                                for (var i = 0; i < params.next.length; i++) {\n                                    params.next[i] = prefix + params.next[i];\n                                }\n                                break;\n                            }\n                            oldNextIndex--;\n                            newNextIndex--;\n                        }\n                    }\n                } else {\n                    params.next = next;\n                }\n            },\n\n            // TODO: normalizeRules\n            get token() { return params.token; }\n        };\n    };\n\n    this.popRule = function(params) {\n        return {\n            regex : params.regex, onMatch: function(value, currentState, stack, line) {\n                stack.pop();\n                if (params.next) {\n                    stack.push(params.next);\n                    this.next = stack[stack.length - 1];\n                } else {\n                    this.next = stack.length > 1 ? stack[stack.length - 1] : stack.pop();\n                }\n                return params.token;\n            }\n        };\n    };\n\n}).call(CsoundPreprocessorHighlightRules.prototype);\n\nexports.CsoundPreprocessorHighlightRules = CsoundPreprocessorHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/csound_score.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CsoundScoreHighlightRules = require(\"./csound_score_highlight_rules\").CsoundScoreHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = CsoundScoreHighlightRules;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \";\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/csound_score_highlight_rules.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\n\nvar CsoundPreprocessorHighlightRules = require(\"./csound_preprocessor_highlight_rules\").CsoundPreprocessorHighlightRules;\n\nvar CsoundScoreHighlightRules = function() {\n\n    CsoundPreprocessorHighlightRules.call(this);\n\n    this.quotedStringContents.push({\n        token : \"invalid.illegal.csound-score\",\n        regex : /[^\"]*$/\n    });\n\n    var start = this.$rules.start;\n    start.push(\n        {\n            token : \"keyword.control.csound-score\",\n            regex : /[abCdefiqstvxy]/\n        }, {\n            // w statements are generated internally and should not be used; see\n            // https://github.com/csound/csound/issues/750.\n            token : \"invalid.illegal.csound-score\",\n            regex : /w/\n        }, {\n            // z is not a statement, but rather a constant equal to\n            // 800,000,000,000. 800 billion seconds is about 25,367.8 years. See\n            // also https://csound.github.io/docs/manual/ScoreTop.html and\n            // https://github.com/csound/csound/search?q=stof+path%3AEngine+filename%3Asread.c.\n            token : \"constant.numeric.language.csound-score\",\n            regex : /z/\n        }, {\n            token : [\"keyword.control.csound-score\", \"constant.numeric.integer.decimal.csound-score\"],\n            regex : /([nNpP][pP])(\\d+)/\n        }, {\n            token : \"keyword.other.csound-score\",\n            regex : /[mn]/,\n            push  : [\n                {\n                    token : \"empty\",\n                    regex : /$/,\n                    next  : \"pop\"\n                },\n                this.comments,\n                {\n                    token : \"entity.name.label.csound-score\",\n                    regex : /[A-Z_a-z]\\w*/\n                }\n            ]\n        }, {\n            token : \"keyword.preprocessor.csound-score\",\n            regex : /r\\b/,\n            next  : \"repeat section\"\n        },\n\n        this.numbers,\n\n        {\n            token : \"keyword.operator.csound-score\",\n            regex : \"[!+\\\\-*/^%&|<>#~.]\"\n        },\n\n        this.pushRule({\n            token : \"punctuation.definition.string.begin.csound-score\",\n            regex : /\"/,\n            next  : \"quoted string\"\n        }),\n\n        this.pushRule({\n            token : \"punctuation.braced-loop.begin.csound-score\",\n            regex : /{/,\n            next  : \"loop after left brace\"\n        })\n    );\n\n    this.addRules({\n        \"repeat section\": [\n            {\n                token : \"empty\",\n                regex : /$/,\n                next  : \"start\"\n            },\n            this.comments,\n            {\n                token : \"constant.numeric.integer.decimal.csound-score\",\n                regex : /\\d+/,\n                next  : \"repeat section before label\"\n            }\n        ],\n        \"repeat section before label\": [\n            {\n                token : \"empty\",\n                regex : /$/,\n                next  : \"start\"\n            },\n            this.comments,\n            {\n                token : \"entity.name.label.csound-score\",\n                regex : /[A-Z_a-z]\\w*/,\n                next  : \"start\"\n            }\n        ],\n\n        \"quoted string\": [\n            this.popRule({\n                token : \"punctuation.definition.string.end.csound-score\",\n                regex : /\"/\n            }),\n            this.quotedStringContents,\n            {\n                defaultToken: \"string.quoted.csound-score\"\n            }\n        ],\n\n        \"loop after left brace\": [\n            this.popRule({\n                token : \"constant.numeric.integer.decimal.csound-score\",\n                regex : /\\d+/,\n                next  : \"loop after repeat count\"\n            }),\n            this.comments,\n            {\n                token : \"invalid.illegal.csound\",\n                regex : /\\S.*/\n            }\n        ],\n        \"loop after repeat count\": [\n            this.popRule({\n                token : \"entity.name.function.preprocessor.csound-score\",\n                regex : /[A-Z_a-z]\\w*\\b/,\n                next  : \"loop after macro name\"\n            }),\n            this.comments,\n            {\n                token : \"invalid.illegal.csound\",\n                regex : /\\S.*/\n            }\n        ],\n        \"loop after macro name\": [\n            start,\n            this.popRule({\n                token : \"punctuation.braced-loop.end.csound-score\",\n                regex : /}/\n            })\n        ]\n    });\n\n    this.normalizeRules();\n};\n\noop.inherits(CsoundScoreHighlightRules, CsoundPreprocessorHighlightRules);\n\nexports.CsoundScoreHighlightRules = CsoundScoreHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/css/csslint.js",
    "content": "define(function(require, exports, module) {\n/*!\nCSSLint\nCopyright (c) 2014 Nicole Sullivan and Nicholas C. Zakas. All rights reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the 'Software'), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n*/\n/* Build: v0.10.0 22-July-2014 01:17:52 */\n/*!\nParser-Lib\nCopyright (c) 2009-2011 Nicholas C. Zakas. All rights reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n*/\n/* Version v0.2.5, Build time: 7-May-2014 03:37:38 */\nvar parserlib = {};\n(function(){\n\n/**\n * A generic base to inherit from for any object\n * that needs event handling.\n * @class EventTarget\n * @constructor\n */\nfunction EventTarget(){\n\n    /**\n     * The array of listeners for various events.\n     * @type Object\n     * @property _listeners\n     * @private\n     */\n    this._listeners = {};\n}\n\nEventTarget.prototype = {\n\n    //restore constructor\n    constructor: EventTarget,\n\n    /**\n     * Adds a listener for a given event type.\n     * @param {String} type The type of event to add a listener for.\n     * @param {Function} listener The function to call when the event occurs.\n     * @return {void}\n     * @method addListener\n     */\n    addListener: function(type, listener){\n        if (!this._listeners[type]){\n            this._listeners[type] = [];\n        }\n\n        this._listeners[type].push(listener);\n    },\n\n    /**\n     * Fires an event based on the passed-in object.\n     * @param {Object|String} event An object with at least a 'type' attribute\n     *      or a string indicating the event name.\n     * @return {void}\n     * @method fire\n     */\n    fire: function(event){\n        if (typeof event == \"string\"){\n            event = { type: event };\n        }\n        if (typeof event.target != \"undefined\"){\n            event.target = this;\n        }\n\n        if (typeof event.type == \"undefined\"){\n            throw new Error(\"Event object missing 'type' property.\");\n        }\n\n        if (this._listeners[event.type]){\n\n            //create a copy of the array and use that so listeners can't chane\n            var listeners = this._listeners[event.type].concat();\n            for (var i=0, len=listeners.length; i < len; i++){\n                listeners[i].call(this, event);\n            }\n        }\n    },\n\n    /**\n     * Removes a listener for a given event type.\n     * @param {String} type The type of event to remove a listener from.\n     * @param {Function} listener The function to remove from the event.\n     * @return {void}\n     * @method removeListener\n     */\n    removeListener: function(type, listener){\n        if (this._listeners[type]){\n            var listeners = this._listeners[type];\n            for (var i=0, len=listeners.length; i < len; i++){\n                if (listeners[i] === listener){\n                    listeners.splice(i, 1);\n                    break;\n                }\n            }\n\n\n        }\n    }\n};\n/**\n * Convenient way to read through strings.\n * @namespace parserlib.util\n * @class StringReader\n * @constructor\n * @param {String} text The text to read.\n */\nfunction StringReader(text){\n\n    /**\n     * The input text with line endings normalized.\n     * @property _input\n     * @type String\n     * @private\n     */\n    this._input = text.replace(/\\n\\r?/g, \"\\n\");\n\n\n    /**\n     * The row for the character to be read next.\n     * @property _line\n     * @type int\n     * @private\n     */\n    this._line = 1;\n\n\n    /**\n     * The column for the character to be read next.\n     * @property _col\n     * @type int\n     * @private\n     */\n    this._col = 1;\n\n    /**\n     * The index of the character in the input to be read next.\n     * @property _cursor\n     * @type int\n     * @private\n     */\n    this._cursor = 0;\n}\n\nStringReader.prototype = {\n\n    //restore constructor\n    constructor: StringReader,\n\n    //-------------------------------------------------------------------------\n    // Position info\n    //-------------------------------------------------------------------------\n\n    /**\n     * Returns the column of the character to be read next.\n     * @return {int} The column of the character to be read next.\n     * @method getCol\n     */\n    getCol: function(){\n        return this._col;\n    },\n\n    /**\n     * Returns the row of the character to be read next.\n     * @return {int} The row of the character to be read next.\n     * @method getLine\n     */\n    getLine: function(){\n        return this._line ;\n    },\n\n    /**\n     * Determines if you're at the end of the input.\n     * @return {Boolean} True if there's no more input, false otherwise.\n     * @method eof\n     */\n    eof: function(){\n        return (this._cursor == this._input.length);\n    },\n\n    //-------------------------------------------------------------------------\n    // Basic reading\n    //-------------------------------------------------------------------------\n\n    /**\n     * Reads the next character without advancing the cursor.\n     * @param {int} count How many characters to look ahead (default is 1).\n     * @return {String} The next character or null if there is no next character.\n     * @method peek\n     */\n    peek: function(count){\n        var c = null;\n        count = (typeof count == \"undefined\" ? 1 : count);\n\n        //if we're not at the end of the input...\n        if (this._cursor < this._input.length){\n\n            //get character and increment cursor and column\n            c = this._input.charAt(this._cursor + count - 1);\n        }\n\n        return c;\n    },\n\n    /**\n     * Reads the next character from the input and adjusts the row and column\n     * accordingly.\n     * @return {String} The next character or null if there is no next character.\n     * @method read\n     */\n    read: function(){\n        var c = null;\n\n        //if we're not at the end of the input...\n        if (this._cursor < this._input.length){\n\n            //if the last character was a newline, increment row count\n            //and reset column count\n            if (this._input.charAt(this._cursor) == \"\\n\"){\n                this._line++;\n                this._col=1;\n            } else {\n                this._col++;\n            }\n\n            //get character and increment cursor and column\n            c = this._input.charAt(this._cursor++);\n        }\n\n        return c;\n    },\n\n    //-------------------------------------------------------------------------\n    // Misc\n    //-------------------------------------------------------------------------\n\n    /**\n     * Saves the current location so it can be returned to later.\n     * @method mark\n     * @return {void}\n     */\n    mark: function(){\n        this._bookmark = {\n            cursor: this._cursor,\n            line:   this._line,\n            col:    this._col\n        };\n    },\n\n    reset: function(){\n        if (this._bookmark){\n            this._cursor = this._bookmark.cursor;\n            this._line = this._bookmark.line;\n            this._col = this._bookmark.col;\n            delete this._bookmark;\n        }\n    },\n\n    //-------------------------------------------------------------------------\n    // Advanced reading\n    //-------------------------------------------------------------------------\n\n    /**\n     * Reads up to and including the given string. Throws an error if that\n     * string is not found.\n     * @param {String} pattern The string to read.\n     * @return {String} The string when it is found.\n     * @throws Error when the string pattern is not found.\n     * @method readTo\n     */\n    readTo: function(pattern){\n\n        var buffer = \"\",\n            c;\n\n        /*\n         * First, buffer must be the same length as the pattern.\n         * Then, buffer must end with the pattern or else reach the\n         * end of the input.\n         */\n        while (buffer.length < pattern.length || buffer.lastIndexOf(pattern) != buffer.length - pattern.length){\n            c = this.read();\n            if (c){\n                buffer += c;\n            } else {\n                throw new Error(\"Expected \\\"\" + pattern + \"\\\" at line \" + this._line  + \", col \" + this._col + \".\");\n            }\n        }\n\n        return buffer;\n\n    },\n\n    /**\n     * Reads characters while each character causes the given\n     * filter function to return true. The function is passed\n     * in each character and either returns true to continue\n     * reading or false to stop.\n     * @param {Function} filter The function to read on each character.\n     * @return {String} The string made up of all characters that passed the\n     *      filter check.\n     * @method readWhile\n     */\n    readWhile: function(filter){\n\n        var buffer = \"\",\n            c = this.read();\n\n        while(c !== null && filter(c)){\n            buffer += c;\n            c = this.read();\n        }\n\n        return buffer;\n\n    },\n\n    /**\n     * Reads characters that match either text or a regular expression and\n     * returns those characters. If a match is found, the row and column\n     * are adjusted; if no match is found, the reader's state is unchanged.\n     * reading or false to stop.\n     * @param {String|RegExp} matcher If a string, then the literal string\n     *      value is searched for. If a regular expression, then any string\n     *      matching the pattern is search for.\n     * @return {String} The string made up of all characters that matched or\n     *      null if there was no match.\n     * @method readMatch\n     */\n    readMatch: function(matcher){\n\n        var source = this._input.substring(this._cursor),\n            value = null;\n\n        //if it's a string, just do a straight match\n        if (typeof matcher == \"string\"){\n            if (source.indexOf(matcher) === 0){\n                value = this.readCount(matcher.length);\n            }\n        } else if (matcher instanceof RegExp){\n            if (matcher.test(source)){\n                value = this.readCount(RegExp.lastMatch.length);\n            }\n        }\n\n        return value;\n    },\n\n\n    /**\n     * Reads a given number of characters. If the end of the input is reached,\n     * it reads only the remaining characters and does not throw an error.\n     * @param {int} count The number of characters to read.\n     * @return {String} The string made up the read characters.\n     * @method readCount\n     */\n    readCount: function(count){\n        var buffer = \"\";\n\n        while(count--){\n            buffer += this.read();\n        }\n\n        return buffer;\n    }\n\n};\n/**\n * Type to use when a syntax error occurs.\n * @class SyntaxError\n * @namespace parserlib.util\n * @constructor\n * @param {String} message The error message.\n * @param {int} line The line at which the error occurred.\n * @param {int} col The column at which the error occurred.\n */\nfunction SyntaxError(message, line, col){\n\n    /**\n     * The column at which the error occurred.\n     * @type int\n     * @property col\n     */\n    this.col = col;\n\n    /**\n     * The line at which the error occurred.\n     * @type int\n     * @property line\n     */\n    this.line = line;\n\n    /**\n     * The text representation of the unit.\n     * @type String\n     * @property text\n     */\n    this.message = message;\n\n}\n\n//inherit from Error\nSyntaxError.prototype = new Error();\n/**\n * Base type to represent a single syntactic unit.\n * @class SyntaxUnit\n * @namespace parserlib.util\n * @constructor\n * @param {String} text The text of the unit.\n * @param {int} line The line of text on which the unit resides.\n * @param {int} col The column of text on which the unit resides.\n */\nfunction SyntaxUnit(text, line, col, type){\n\n\n    /**\n     * The column of text on which the unit resides.\n     * @type int\n     * @property col\n     */\n    this.col = col;\n\n    /**\n     * The line of text on which the unit resides.\n     * @type int\n     * @property line\n     */\n    this.line = line;\n\n    /**\n     * The text representation of the unit.\n     * @type String\n     * @property text\n     */\n    this.text = text;\n\n    /**\n     * The type of syntax unit.\n     * @type int\n     * @property type\n     */\n    this.type = type;\n}\n\n/**\n * Create a new syntax unit based solely on the given token.\n * Convenience method for creating a new syntax unit when\n * it represents a single token instead of multiple.\n * @param {Object} token The token object to represent.\n * @return {parserlib.util.SyntaxUnit} The object representing the token.\n * @static\n * @method fromToken\n */\nSyntaxUnit.fromToken = function(token){\n    return new SyntaxUnit(token.value, token.startLine, token.startCol);\n};\n\nSyntaxUnit.prototype = {\n\n    //restore constructor\n    constructor: SyntaxUnit,\n\n    /**\n     * Returns the text representation of the unit.\n     * @return {String} The text representation of the unit.\n     * @method valueOf\n     */\n    valueOf: function(){\n        return this.text;\n    },\n\n    /**\n     * Returns the text representation of the unit.\n     * @return {String} The text representation of the unit.\n     * @method toString\n     */\n    toString: function(){\n        return this.text;\n    }\n\n};\n/*global StringReader, SyntaxError*/\n\n/**\n * Generic TokenStream providing base functionality.\n * @class TokenStreamBase\n * @namespace parserlib.util\n * @constructor\n * @param {String|StringReader} input The text to tokenize or a reader from\n *      which to read the input.\n */\nfunction TokenStreamBase(input, tokenData){\n\n    /**\n     * The string reader for easy access to the text.\n     * @type StringReader\n     * @property _reader\n     * @private\n     */\n    this._reader = input ? new StringReader(input.toString()) : null;\n\n    /**\n     * Token object for the last consumed token.\n     * @type Token\n     * @property _token\n     * @private\n     */\n    this._token = null;\n\n    /**\n     * The array of token information.\n     * @type Array\n     * @property _tokenData\n     * @private\n     */\n    this._tokenData = tokenData;\n\n    /**\n     * Lookahead token buffer.\n     * @type Array\n     * @property _lt\n     * @private\n     */\n    this._lt = [];\n\n    /**\n     * Lookahead token buffer index.\n     * @type int\n     * @property _ltIndex\n     * @private\n     */\n    this._ltIndex = 0;\n\n    this._ltIndexCache = [];\n}\n\n/**\n * Accepts an array of token information and outputs\n * an array of token data containing key-value mappings\n * and matching functions that the TokenStream needs.\n * @param {Array} tokens An array of token descriptors.\n * @return {Array} An array of processed token data.\n * @method createTokenData\n * @static\n */\nTokenStreamBase.createTokenData = function(tokens){\n\n    var nameMap     = [],\n        typeMap     = {},\n        tokenData     = tokens.concat([]),\n        i            = 0,\n        len            = tokenData.length+1;\n\n    tokenData.UNKNOWN = -1;\n    tokenData.unshift({name:\"EOF\"});\n\n    for (; i < len; i++){\n        nameMap.push(tokenData[i].name);\n        tokenData[tokenData[i].name] = i;\n        if (tokenData[i].text){\n            typeMap[tokenData[i].text] = i;\n        }\n    }\n\n    tokenData.name = function(tt){\n        return nameMap[tt];\n    };\n\n    tokenData.type = function(c){\n        return typeMap[c];\n    };\n\n    return tokenData;\n};\n\nTokenStreamBase.prototype = {\n\n    //restore constructor\n    constructor: TokenStreamBase,\n\n    //-------------------------------------------------------------------------\n    // Matching methods\n    //-------------------------------------------------------------------------\n\n    /**\n     * Determines if the next token matches the given token type.\n     * If so, that token is consumed; if not, the token is placed\n     * back onto the token stream. You can pass in any number of\n     * token types and this will return true if any of the token\n     * types is found.\n     * @param {int|int[]} tokenTypes Either a single token type or an array of\n     *      token types that the next token might be. If an array is passed,\n     *      it's assumed that the token can be any of these.\n     * @param {variant} channel (Optional) The channel to read from. If not\n     *      provided, reads from the default (unnamed) channel.\n     * @return {Boolean} True if the token type matches, false if not.\n     * @method match\n     */\n    match: function(tokenTypes, channel){\n\n        //always convert to an array, makes things easier\n        if (!(tokenTypes instanceof Array)){\n            tokenTypes = [tokenTypes];\n        }\n\n        var tt  = this.get(channel),\n            i   = 0,\n            len = tokenTypes.length;\n\n        while(i < len){\n            if (tt == tokenTypes[i++]){\n                return true;\n            }\n        }\n\n        //no match found, put the token back\n        this.unget();\n        return false;\n    },\n\n    /**\n     * Determines if the next token matches the given token type.\n     * If so, that token is consumed; if not, an error is thrown.\n     * @param {int|int[]} tokenTypes Either a single token type or an array of\n     *      token types that the next token should be. If an array is passed,\n     *      it's assumed that the token must be one of these.\n     * @param {variant} channel (Optional) The channel to read from. If not\n     *      provided, reads from the default (unnamed) channel.\n     * @return {void}\n     * @method mustMatch\n     */\n    mustMatch: function(tokenTypes, channel){\n\n        var token;\n\n        //always convert to an array, makes things easier\n        if (!(tokenTypes instanceof Array)){\n            tokenTypes = [tokenTypes];\n        }\n\n        if (!this.match.apply(this, arguments)){\n            token = this.LT(1);\n            throw new SyntaxError(\"Expected \" + this._tokenData[tokenTypes[0]].name +\n                \" at line \" + token.startLine + \", col \" + token.startCol + \".\", token.startLine, token.startCol);\n        }\n    },\n\n    //-------------------------------------------------------------------------\n    // Consuming methods\n    //-------------------------------------------------------------------------\n\n    /**\n     * Keeps reading from the token stream until either one of the specified\n     * token types is found or until the end of the input is reached.\n     * @param {int|int[]} tokenTypes Either a single token type or an array of\n     *      token types that the next token should be. If an array is passed,\n     *      it's assumed that the token must be one of these.\n     * @param {variant} channel (Optional) The channel to read from. If not\n     *      provided, reads from the default (unnamed) channel.\n     * @return {void}\n     * @method advance\n     */\n    advance: function(tokenTypes, channel){\n\n        while(this.LA(0) !== 0 && !this.match(tokenTypes, channel)){\n            this.get();\n        }\n\n        return this.LA(0);\n    },\n\n    /**\n     * Consumes the next token from the token stream.\n     * @return {int} The token type of the token that was just consumed.\n     * @method get\n     */\n    get: function(channel){\n\n        var tokenInfo   = this._tokenData,\n            reader      = this._reader,\n            value,\n            i           =0,\n            len         = tokenInfo.length,\n            found       = false,\n            token,\n            info;\n\n        //check the lookahead buffer first\n        if (this._lt.length && this._ltIndex >= 0 && this._ltIndex < this._lt.length){\n\n            i++;\n            this._token = this._lt[this._ltIndex++];\n            info = tokenInfo[this._token.type];\n\n            //obey channels logic\n            while((info.channel !== undefined && channel !== info.channel) &&\n                    this._ltIndex < this._lt.length){\n                this._token = this._lt[this._ltIndex++];\n                info = tokenInfo[this._token.type];\n                i++;\n            }\n\n            //here be dragons\n            if ((info.channel === undefined || channel === info.channel) &&\n                    this._ltIndex <= this._lt.length){\n                this._ltIndexCache.push(i);\n                return this._token.type;\n            }\n        }\n\n        //call token retriever method\n        token = this._getToken();\n\n        //if it should be hidden, don't save a token\n        if (token.type > -1 && !tokenInfo[token.type].hide){\n\n            //apply token channel\n            token.channel = tokenInfo[token.type].channel;\n\n            //save for later\n            this._token = token;\n            this._lt.push(token);\n\n            //save space that will be moved (must be done before array is truncated)\n            this._ltIndexCache.push(this._lt.length - this._ltIndex + i);\n\n            //keep the buffer under 5 items\n            if (this._lt.length > 5){\n                this._lt.shift();\n            }\n\n            //also keep the shift buffer under 5 items\n            if (this._ltIndexCache.length > 5){\n                this._ltIndexCache.shift();\n            }\n\n            //update lookahead index\n            this._ltIndex = this._lt.length;\n        }\n\n        /*\n         * Skip to the next token if:\n         * 1. The token type is marked as hidden.\n         * 2. The token type has a channel specified and it isn't the current channel.\n         */\n        info = tokenInfo[token.type];\n        if (info &&\n                (info.hide ||\n                (info.channel !== undefined && channel !== info.channel))){\n            return this.get(channel);\n        } else {\n            //return just the type\n            return token.type;\n        }\n    },\n\n    /**\n     * Looks ahead a certain number of tokens and returns the token type at\n     * that position. This will throw an error if you lookahead past the\n     * end of input, past the size of the lookahead buffer, or back past\n     * the first token in the lookahead buffer.\n     * @param {int} The index of the token type to retrieve. 0 for the\n     *      current token, 1 for the next, -1 for the previous, etc.\n     * @return {int} The token type of the token in the given position.\n     * @method LA\n     */\n    LA: function(index){\n        var total = index,\n            tt;\n        if (index > 0){\n            //TODO: Store 5 somewhere\n            if (index > 5){\n                throw new Error(\"Too much lookahead.\");\n            }\n\n            //get all those tokens\n            while(total){\n                tt = this.get();\n                total--;\n            }\n\n            //unget all those tokens\n            while(total < index){\n                this.unget();\n                total++;\n            }\n        } else if (index < 0){\n\n            if(this._lt[this._ltIndex+index]){\n                tt = this._lt[this._ltIndex+index].type;\n            } else {\n                throw new Error(\"Too much lookbehind.\");\n            }\n\n        } else {\n            tt = this._token.type;\n        }\n\n        return tt;\n\n    },\n\n    /**\n     * Looks ahead a certain number of tokens and returns the token at\n     * that position. This will throw an error if you lookahead past the\n     * end of input, past the size of the lookahead buffer, or back past\n     * the first token in the lookahead buffer.\n     * @param {int} The index of the token type to retrieve. 0 for the\n     *      current token, 1 for the next, -1 for the previous, etc.\n     * @return {Object} The token of the token in the given position.\n     * @method LA\n     */\n    LT: function(index){\n\n        //lookahead first to prime the token buffer\n        this.LA(index);\n\n        //now find the token, subtract one because _ltIndex is already at the next index\n        return this._lt[this._ltIndex+index-1];\n    },\n\n    /**\n     * Returns the token type for the next token in the stream without\n     * consuming it.\n     * @return {int} The token type of the next token in the stream.\n     * @method peek\n     */\n    peek: function(){\n        return this.LA(1);\n    },\n\n    /**\n     * Returns the actual token object for the last consumed token.\n     * @return {Token} The token object for the last consumed token.\n     * @method token\n     */\n    token: function(){\n        return this._token;\n    },\n\n    /**\n     * Returns the name of the token for the given token type.\n     * @param {int} tokenType The type of token to get the name of.\n     * @return {String} The name of the token or \"UNKNOWN_TOKEN\" for any\n     *      invalid token type.\n     * @method tokenName\n     */\n    tokenName: function(tokenType){\n        if (tokenType < 0 || tokenType > this._tokenData.length){\n            return \"UNKNOWN_TOKEN\";\n        } else {\n            return this._tokenData[tokenType].name;\n        }\n    },\n\n    /**\n     * Returns the token type value for the given token name.\n     * @param {String} tokenName The name of the token whose value should be returned.\n     * @return {int} The token type value for the given token name or -1\n     *      for an unknown token.\n     * @method tokenName\n     */\n    tokenType: function(tokenName){\n        return this._tokenData[tokenName] || -1;\n    },\n\n    /**\n     * Returns the last consumed token to the token stream.\n     * @method unget\n     */\n    unget: function(){\n        //if (this._ltIndex > -1){\n        if (this._ltIndexCache.length){\n            this._ltIndex -= this._ltIndexCache.pop();//--;\n            this._token = this._lt[this._ltIndex - 1];\n        } else {\n            throw new Error(\"Too much lookahead.\");\n        }\n    }\n\n};\n\n\nparserlib.util = {\nStringReader: StringReader,\nSyntaxError : SyntaxError,\nSyntaxUnit  : SyntaxUnit,\nEventTarget : EventTarget,\nTokenStreamBase : TokenStreamBase\n};\n})();\n/*\nParser-Lib\nCopyright (c) 2009-2011 Nicholas C. Zakas. All rights reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n*/\n/* Version v0.2.5, Build time: 7-May-2014 03:37:38 */\n(function(){\nvar EventTarget = parserlib.util.EventTarget,\nTokenStreamBase = parserlib.util.TokenStreamBase,\nStringReader = parserlib.util.StringReader,\nSyntaxError = parserlib.util.SyntaxError,\nSyntaxUnit  = parserlib.util.SyntaxUnit;\n\nvar Colors = {\n    aliceblue       :\"#f0f8ff\",\n    antiquewhite    :\"#faebd7\",\n    aqua            :\"#00ffff\",\n    aquamarine      :\"#7fffd4\",\n    azure           :\"#f0ffff\",\n    beige           :\"#f5f5dc\",\n    bisque          :\"#ffe4c4\",\n    black           :\"#000000\",\n    blanchedalmond  :\"#ffebcd\",\n    blue            :\"#0000ff\",\n    blueviolet      :\"#8a2be2\",\n    brown           :\"#a52a2a\",\n    burlywood       :\"#deb887\",\n    cadetblue       :\"#5f9ea0\",\n    chartreuse      :\"#7fff00\",\n    chocolate       :\"#d2691e\",\n    coral           :\"#ff7f50\",\n    cornflowerblue  :\"#6495ed\",\n    cornsilk        :\"#fff8dc\",\n    crimson         :\"#dc143c\",\n    cyan            :\"#00ffff\",\n    darkblue        :\"#00008b\",\n    darkcyan        :\"#008b8b\",\n    darkgoldenrod   :\"#b8860b\",\n    darkgray        :\"#a9a9a9\",\n    darkgrey        :\"#a9a9a9\",\n    darkgreen       :\"#006400\",\n    darkkhaki       :\"#bdb76b\",\n    darkmagenta     :\"#8b008b\",\n    darkolivegreen  :\"#556b2f\",\n    darkorange      :\"#ff8c00\",\n    darkorchid      :\"#9932cc\",\n    darkred         :\"#8b0000\",\n    darksalmon      :\"#e9967a\",\n    darkseagreen    :\"#8fbc8f\",\n    darkslateblue   :\"#483d8b\",\n    darkslategray   :\"#2f4f4f\",\n    darkslategrey   :\"#2f4f4f\",\n    darkturquoise   :\"#00ced1\",\n    darkviolet      :\"#9400d3\",\n    deeppink        :\"#ff1493\",\n    deepskyblue     :\"#00bfff\",\n    dimgray         :\"#696969\",\n    dimgrey         :\"#696969\",\n    dodgerblue      :\"#1e90ff\",\n    firebrick       :\"#b22222\",\n    floralwhite     :\"#fffaf0\",\n    forestgreen     :\"#228b22\",\n    fuchsia         :\"#ff00ff\",\n    gainsboro       :\"#dcdcdc\",\n    ghostwhite      :\"#f8f8ff\",\n    gold            :\"#ffd700\",\n    goldenrod       :\"#daa520\",\n    gray            :\"#808080\",\n    grey            :\"#808080\",\n    green           :\"#008000\",\n    greenyellow     :\"#adff2f\",\n    honeydew        :\"#f0fff0\",\n    hotpink         :\"#ff69b4\",\n    indianred       :\"#cd5c5c\",\n    indigo          :\"#4b0082\",\n    ivory           :\"#fffff0\",\n    khaki           :\"#f0e68c\",\n    lavender        :\"#e6e6fa\",\n    lavenderblush   :\"#fff0f5\",\n    lawngreen       :\"#7cfc00\",\n    lemonchiffon    :\"#fffacd\",\n    lightblue       :\"#add8e6\",\n    lightcoral      :\"#f08080\",\n    lightcyan       :\"#e0ffff\",\n    lightgoldenrodyellow  :\"#fafad2\",\n    lightgray       :\"#d3d3d3\",\n    lightgrey       :\"#d3d3d3\",\n    lightgreen      :\"#90ee90\",\n    lightpink       :\"#ffb6c1\",\n    lightsalmon     :\"#ffa07a\",\n    lightseagreen   :\"#20b2aa\",\n    lightskyblue    :\"#87cefa\",\n    lightslategray  :\"#778899\",\n    lightslategrey  :\"#778899\",\n    lightsteelblue  :\"#b0c4de\",\n    lightyellow     :\"#ffffe0\",\n    lime            :\"#00ff00\",\n    limegreen       :\"#32cd32\",\n    linen           :\"#faf0e6\",\n    magenta         :\"#ff00ff\",\n    maroon          :\"#800000\",\n    mediumaquamarine:\"#66cdaa\",\n    mediumblue      :\"#0000cd\",\n    mediumorchid    :\"#ba55d3\",\n    mediumpurple    :\"#9370d8\",\n    mediumseagreen  :\"#3cb371\",\n    mediumslateblue :\"#7b68ee\",\n    mediumspringgreen   :\"#00fa9a\",\n    mediumturquoise :\"#48d1cc\",\n    mediumvioletred :\"#c71585\",\n    midnightblue    :\"#191970\",\n    mintcream       :\"#f5fffa\",\n    mistyrose       :\"#ffe4e1\",\n    moccasin        :\"#ffe4b5\",\n    navajowhite     :\"#ffdead\",\n    navy            :\"#000080\",\n    oldlace         :\"#fdf5e6\",\n    olive           :\"#808000\",\n    olivedrab       :\"#6b8e23\",\n    orange          :\"#ffa500\",\n    orangered       :\"#ff4500\",\n    orchid          :\"#da70d6\",\n    palegoldenrod   :\"#eee8aa\",\n    palegreen       :\"#98fb98\",\n    paleturquoise   :\"#afeeee\",\n    palevioletred   :\"#d87093\",\n    papayawhip      :\"#ffefd5\",\n    peachpuff       :\"#ffdab9\",\n    peru            :\"#cd853f\",\n    pink            :\"#ffc0cb\",\n    plum            :\"#dda0dd\",\n    powderblue      :\"#b0e0e6\",\n    purple          :\"#800080\",\n    red             :\"#ff0000\",\n    rosybrown       :\"#bc8f8f\",\n    royalblue       :\"#4169e1\",\n    saddlebrown     :\"#8b4513\",\n    salmon          :\"#fa8072\",\n    sandybrown      :\"#f4a460\",\n    seagreen        :\"#2e8b57\",\n    seashell        :\"#fff5ee\",\n    sienna          :\"#a0522d\",\n    silver          :\"#c0c0c0\",\n    skyblue         :\"#87ceeb\",\n    slateblue       :\"#6a5acd\",\n    slategray       :\"#708090\",\n    slategrey       :\"#708090\",\n    snow            :\"#fffafa\",\n    springgreen     :\"#00ff7f\",\n    steelblue       :\"#4682b4\",\n    tan             :\"#d2b48c\",\n    teal            :\"#008080\",\n    thistle         :\"#d8bfd8\",\n    tomato          :\"#ff6347\",\n    turquoise       :\"#40e0d0\",\n    violet          :\"#ee82ee\",\n    wheat           :\"#f5deb3\",\n    white           :\"#ffffff\",\n    whitesmoke      :\"#f5f5f5\",\n    yellow          :\"#ffff00\",\n    yellowgreen     :\"#9acd32\",\n    //CSS2 system colors http://www.w3.org/TR/css3-color/#css2-system\n    activeBorder        :\"Active window border.\",\n    activecaption       :\"Active window caption.\",\n    appworkspace        :\"Background color of multiple document interface.\",\n    background          :\"Desktop background.\",\n    buttonface          :\"The face background color for 3-D elements that appear 3-D due to one layer of surrounding border.\",\n    buttonhighlight     :\"The color of the border facing the light source for 3-D elements that appear 3-D due to one layer of surrounding border.\",\n    buttonshadow        :\"The color of the border away from the light source for 3-D elements that appear 3-D due to one layer of surrounding border.\",\n    buttontext          :\"Text on push buttons.\",\n    captiontext         :\"Text in caption, size box, and scrollbar arrow box.\",\n    graytext            :\"Grayed (disabled) text. This color is set to #000 if the current display driver does not support a solid gray color.\",\n    greytext            :\"Greyed (disabled) text. This color is set to #000 if the current display driver does not support a solid grey color.\",\n    highlight           :\"Item(s) selected in a control.\",\n    highlighttext       :\"Text of item(s) selected in a control.\",\n    inactiveborder      :\"Inactive window border.\",\n    inactivecaption     :\"Inactive window caption.\",\n    inactivecaptiontext :\"Color of text in an inactive caption.\",\n    infobackground      :\"Background color for tooltip controls.\",\n    infotext            :\"Text color for tooltip controls.\",\n    menu                :\"Menu background.\",\n    menutext            :\"Text in menus.\",\n    scrollbar           :\"Scroll bar gray area.\",\n    threeddarkshadow    :\"The color of the darker (generally outer) of the two borders away from the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.\",\n    threedface          :\"The face background color for 3-D elements that appear 3-D due to two concentric layers of surrounding border.\",\n    threedhighlight     :\"The color of the lighter (generally outer) of the two borders facing the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.\",\n    threedlightshadow   :\"The color of the darker (generally inner) of the two borders facing the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.\",\n    threedshadow        :\"The color of the lighter (generally inner) of the two borders away from the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.\",\n    window              :\"Window background.\",\n    windowframe         :\"Window frame.\",\n    windowtext          :\"Text in windows.\"\n};\n/*global SyntaxUnit, Parser*/\n/**\n * Represents a selector combinator (whitespace, +, >).\n * @namespace parserlib.css\n * @class Combinator\n * @extends parserlib.util.SyntaxUnit\n * @constructor\n * @param {String} text The text representation of the unit.\n * @param {int} line The line of text on which the unit resides.\n * @param {int} col The column of text on which the unit resides.\n */\nfunction Combinator(text, line, col){\n\n    SyntaxUnit.call(this, text, line, col, Parser.COMBINATOR_TYPE);\n\n    /**\n     * The type of modifier.\n     * @type String\n     * @property type\n     */\n    this.type = \"unknown\";\n\n    //pretty simple\n    if (/^\\s+$/.test(text)){\n        this.type = \"descendant\";\n    } else if (text == \">\"){\n        this.type = \"child\";\n    } else if (text == \"+\"){\n        this.type = \"adjacent-sibling\";\n    } else if (text == \"~\"){\n        this.type = \"sibling\";\n    }\n\n}\n\nCombinator.prototype = new SyntaxUnit();\nCombinator.prototype.constructor = Combinator;\n\n/*global SyntaxUnit, Parser*/\n/**\n * Represents a media feature, such as max-width:500.\n * @namespace parserlib.css\n * @class MediaFeature\n * @extends parserlib.util.SyntaxUnit\n * @constructor\n * @param {SyntaxUnit} name The name of the feature.\n * @param {SyntaxUnit} value The value of the feature or null if none.\n */\nfunction MediaFeature(name, value){\n\n    SyntaxUnit.call(this, \"(\" + name + (value !== null ? \":\" + value : \"\") + \")\", name.startLine, name.startCol, Parser.MEDIA_FEATURE_TYPE);\n\n    /**\n     * The name of the media feature\n     * @type String\n     * @property name\n     */\n    this.name = name;\n\n    /**\n     * The value for the feature or null if there is none.\n     * @type SyntaxUnit\n     * @property value\n     */\n    this.value = value;\n}\n\nMediaFeature.prototype = new SyntaxUnit();\nMediaFeature.prototype.constructor = MediaFeature;\n\n/*global SyntaxUnit, Parser*/\n/**\n * Represents an individual media query.\n * @namespace parserlib.css\n * @class MediaQuery\n * @extends parserlib.util.SyntaxUnit\n * @constructor\n * @param {String} modifier The modifier \"not\" or \"only\" (or null).\n * @param {String} mediaType The type of media (i.e., \"print\").\n * @param {Array} parts Array of selectors parts making up this selector.\n * @param {int} line The line of text on which the unit resides.\n * @param {int} col The column of text on which the unit resides.\n */\nfunction MediaQuery(modifier, mediaType, features, line, col){\n\n    SyntaxUnit.call(this, (modifier ? modifier + \" \": \"\") + (mediaType ? mediaType : \"\") + (mediaType && features.length > 0 ? \" and \" : \"\") + features.join(\" and \"), line, col, Parser.MEDIA_QUERY_TYPE);\n\n    /**\n     * The media modifier (\"not\" or \"only\")\n     * @type String\n     * @property modifier\n     */\n    this.modifier = modifier;\n\n    /**\n     * The mediaType (i.e., \"print\")\n     * @type String\n     * @property mediaType\n     */\n    this.mediaType = mediaType;\n\n    /**\n     * The parts that make up the selector.\n     * @type Array\n     * @property features\n     */\n    this.features = features;\n\n}\n\nMediaQuery.prototype = new SyntaxUnit();\nMediaQuery.prototype.constructor = MediaQuery;\n\n/*global Tokens, TokenStream, SyntaxError, Properties, Validation, ValidationError, SyntaxUnit,\n    PropertyValue, PropertyValuePart, SelectorPart, SelectorSubPart, Selector,\n    PropertyName, Combinator, MediaFeature, MediaQuery, EventTarget */\n\n/**\n * A CSS3 parser.\n * @namespace parserlib.css\n * @class Parser\n * @constructor\n * @param {Object} options (Optional) Various options for the parser:\n *      starHack (true|false) to allow IE6 star hack as valid,\n *      underscoreHack (true|false) to interpret leading underscores\n *      as IE6-7 targeting for known properties, ieFilters (true|false)\n *      to indicate that IE < 8 filters should be accepted and not throw\n *      syntax errors.\n */\nfunction Parser(options){\n\n    //inherit event functionality\n    EventTarget.call(this);\n\n\n    this.options = options || {};\n\n    this._tokenStream = null;\n}\n\n//Static constants\nParser.DEFAULT_TYPE = 0;\nParser.COMBINATOR_TYPE = 1;\nParser.MEDIA_FEATURE_TYPE = 2;\nParser.MEDIA_QUERY_TYPE = 3;\nParser.PROPERTY_NAME_TYPE = 4;\nParser.PROPERTY_VALUE_TYPE = 5;\nParser.PROPERTY_VALUE_PART_TYPE = 6;\nParser.SELECTOR_TYPE = 7;\nParser.SELECTOR_PART_TYPE = 8;\nParser.SELECTOR_SUB_PART_TYPE = 9;\n\nParser.prototype = function(){\n\n    var proto = new EventTarget(),  //new prototype\n        prop,\n        additions =  {\n\n            //restore constructor\n            constructor: Parser,\n\n            //instance constants - yuck\n            DEFAULT_TYPE : 0,\n            COMBINATOR_TYPE : 1,\n            MEDIA_FEATURE_TYPE : 2,\n            MEDIA_QUERY_TYPE : 3,\n            PROPERTY_NAME_TYPE : 4,\n            PROPERTY_VALUE_TYPE : 5,\n            PROPERTY_VALUE_PART_TYPE : 6,\n            SELECTOR_TYPE : 7,\n            SELECTOR_PART_TYPE : 8,\n            SELECTOR_SUB_PART_TYPE : 9,\n\n            //-----------------------------------------------------------------\n            // Grammar\n            //-----------------------------------------------------------------\n\n            _stylesheet: function(){\n\n                /*\n                 * stylesheet\n                 *  : [ CHARSET_SYM S* STRING S* ';' ]?\n                 *    [S|CDO|CDC]* [ import [S|CDO|CDC]* ]*\n                 *    [ namespace [S|CDO|CDC]* ]*\n                 *    [ [ ruleset | media | page | font_face | keyframes ] [S|CDO|CDC]* ]*\n                 *  ;\n                 */\n\n                var tokenStream = this._tokenStream,\n                    charset     = null,\n                    count,\n                    token,\n                    tt;\n\n                this.fire(\"startstylesheet\");\n\n                //try to read character set\n                this._charset();\n\n                this._skipCruft();\n\n                //try to read imports - may be more than one\n                while (tokenStream.peek() == Tokens.IMPORT_SYM){\n                    this._import();\n                    this._skipCruft();\n                }\n\n                //try to read namespaces - may be more than one\n                while (tokenStream.peek() == Tokens.NAMESPACE_SYM){\n                    this._namespace();\n                    this._skipCruft();\n                }\n\n                //get the next token\n                tt = tokenStream.peek();\n\n                //try to read the rest\n                while(tt > Tokens.EOF){\n\n                    try {\n\n                        switch(tt){\n                            case Tokens.MEDIA_SYM:\n                                this._media();\n                                this._skipCruft();\n                                break;\n                            case Tokens.PAGE_SYM:\n                                this._page();\n                                this._skipCruft();\n                                break;\n                            case Tokens.FONT_FACE_SYM:\n                                this._font_face();\n                                this._skipCruft();\n                                break;\n                            case Tokens.KEYFRAMES_SYM:\n                                this._keyframes();\n                                this._skipCruft();\n                                break;\n                            case Tokens.VIEWPORT_SYM:\n                                this._viewport();\n                                this._skipCruft();\n                                break;\n                            case Tokens.UNKNOWN_SYM:  //unknown @ rule\n                                tokenStream.get();\n                                if (!this.options.strict){\n\n                                    //fire error event\n                                    this.fire({\n                                        type:       \"error\",\n                                        error:      null,\n                                        message:    \"Unknown @ rule: \" + tokenStream.LT(0).value + \".\",\n                                        line:       tokenStream.LT(0).startLine,\n                                        col:        tokenStream.LT(0).startCol\n                                    });\n\n                                    //skip braces\n                                    count=0;\n                                    while (tokenStream.advance([Tokens.LBRACE, Tokens.RBRACE]) == Tokens.LBRACE){\n                                        count++;    //keep track of nesting depth\n                                    }\n\n                                    while(count){\n                                        tokenStream.advance([Tokens.RBRACE]);\n                                        count--;\n                                    }\n\n                                } else {\n                                    //not a syntax error, rethrow it\n                                    throw new SyntaxError(\"Unknown @ rule.\", tokenStream.LT(0).startLine, tokenStream.LT(0).startCol);\n                                }\n                                break;\n                            case Tokens.S:\n                                this._readWhitespace();\n                                break;\n                            default:\n                                if(!this._ruleset()){\n\n                                    //error handling for known issues\n                                    switch(tt){\n                                        case Tokens.CHARSET_SYM:\n                                            token = tokenStream.LT(1);\n                                            this._charset(false);\n                                            throw new SyntaxError(\"@charset not allowed here.\", token.startLine, token.startCol);\n                                        case Tokens.IMPORT_SYM:\n                                            token = tokenStream.LT(1);\n                                            this._import(false);\n                                            throw new SyntaxError(\"@import not allowed here.\", token.startLine, token.startCol);\n                                        case Tokens.NAMESPACE_SYM:\n                                            token = tokenStream.LT(1);\n                                            this._namespace(false);\n                                            throw new SyntaxError(\"@namespace not allowed here.\", token.startLine, token.startCol);\n                                        default:\n                                            tokenStream.get();  //get the last token\n                                            this._unexpectedToken(tokenStream.token());\n                                    }\n\n                                }\n                        }\n                    } catch(ex) {\n                        if (ex instanceof SyntaxError && !this.options.strict){\n                            this.fire({\n                                type:       \"error\",\n                                error:      ex,\n                                message:    ex.message,\n                                line:       ex.line,\n                                col:        ex.col\n                            });\n                        } else {\n                            throw ex;\n                        }\n                    }\n\n                    tt = tokenStream.peek();\n                }\n\n                if (tt != Tokens.EOF){\n                    this._unexpectedToken(tokenStream.token());\n                }\n\n                this.fire(\"endstylesheet\");\n            },\n\n            _charset: function(emit){\n                var tokenStream = this._tokenStream,\n                    charset,\n                    token,\n                    line,\n                    col;\n\n                if (tokenStream.match(Tokens.CHARSET_SYM)){\n                    line = tokenStream.token().startLine;\n                    col = tokenStream.token().startCol;\n\n                    this._readWhitespace();\n                    tokenStream.mustMatch(Tokens.STRING);\n\n                    token = tokenStream.token();\n                    charset = token.value;\n\n                    this._readWhitespace();\n                    tokenStream.mustMatch(Tokens.SEMICOLON);\n\n                    if (emit !== false){\n                        this.fire({\n                            type:   \"charset\",\n                            charset:charset,\n                            line:   line,\n                            col:    col\n                        });\n                    }\n                }\n            },\n\n            _import: function(emit){\n                /*\n                 * import\n                 *   : IMPORT_SYM S*\n                 *    [STRING|URI] S* media_query_list? ';' S*\n                 */\n\n                var tokenStream = this._tokenStream,\n                    tt,\n                    uri,\n                    importToken,\n                    mediaList   = [];\n\n                //read import symbol\n                tokenStream.mustMatch(Tokens.IMPORT_SYM);\n                importToken = tokenStream.token();\n                this._readWhitespace();\n\n                tokenStream.mustMatch([Tokens.STRING, Tokens.URI]);\n\n                //grab the URI value\n                uri = tokenStream.token().value.replace(/^(?:url\\()?[\"']?([^\"']+?)[\"']?\\)?$/, \"$1\");\n\n                this._readWhitespace();\n\n                mediaList = this._media_query_list();\n\n                //must end with a semicolon\n                tokenStream.mustMatch(Tokens.SEMICOLON);\n                this._readWhitespace();\n\n                if (emit !== false){\n                    this.fire({\n                        type:   \"import\",\n                        uri:    uri,\n                        media:  mediaList,\n                        line:   importToken.startLine,\n                        col:    importToken.startCol\n                    });\n                }\n\n            },\n\n            _namespace: function(emit){\n                /*\n                 * namespace\n                 *   : NAMESPACE_SYM S* [namespace_prefix S*]? [STRING|URI] S* ';' S*\n                 */\n\n                var tokenStream = this._tokenStream,\n                    line,\n                    col,\n                    prefix,\n                    uri;\n\n                //read import symbol\n                tokenStream.mustMatch(Tokens.NAMESPACE_SYM);\n                line = tokenStream.token().startLine;\n                col = tokenStream.token().startCol;\n                this._readWhitespace();\n\n                //it's a namespace prefix - no _namespace_prefix() method because it's just an IDENT\n                if (tokenStream.match(Tokens.IDENT)){\n                    prefix = tokenStream.token().value;\n                    this._readWhitespace();\n                }\n\n                tokenStream.mustMatch([Tokens.STRING, Tokens.URI]);\n                /*if (!tokenStream.match(Tokens.STRING)){\n                    tokenStream.mustMatch(Tokens.URI);\n                }*/\n\n                //grab the URI value\n                uri = tokenStream.token().value.replace(/(?:url\\()?[\"']([^\"']+)[\"']\\)?/, \"$1\");\n\n                this._readWhitespace();\n\n                //must end with a semicolon\n                tokenStream.mustMatch(Tokens.SEMICOLON);\n                this._readWhitespace();\n\n                if (emit !== false){\n                    this.fire({\n                        type:   \"namespace\",\n                        prefix: prefix,\n                        uri:    uri,\n                        line:   line,\n                        col:    col\n                    });\n                }\n\n            },\n\n            _media: function(){\n                /*\n                 * media\n                 *   : MEDIA_SYM S* media_query_list S* '{' S* ruleset* '}' S*\n                 *   ;\n                 */\n                var tokenStream     = this._tokenStream,\n                    line,\n                    col,\n                    mediaList;//       = [];\n\n                //look for @media\n                tokenStream.mustMatch(Tokens.MEDIA_SYM);\n                line = tokenStream.token().startLine;\n                col = tokenStream.token().startCol;\n\n                this._readWhitespace();\n\n                mediaList = this._media_query_list();\n\n                tokenStream.mustMatch(Tokens.LBRACE);\n                this._readWhitespace();\n\n                this.fire({\n                    type:   \"startmedia\",\n                    media:  mediaList,\n                    line:   line,\n                    col:    col\n                });\n\n                while(true) {\n                    if (tokenStream.peek() == Tokens.PAGE_SYM){\n                        this._page();\n                    } else if (tokenStream.peek() == Tokens.FONT_FACE_SYM){\n                        this._font_face();\n                    } else if (tokenStream.peek() == Tokens.VIEWPORT_SYM){\n                        this._viewport();\n                    } else if (!this._ruleset()){\n                        break;\n                    }\n                }\n\n                tokenStream.mustMatch(Tokens.RBRACE);\n                this._readWhitespace();\n\n                this.fire({\n                    type:   \"endmedia\",\n                    media:  mediaList,\n                    line:   line,\n                    col:    col\n                });\n            },\n\n\n            //CSS3 Media Queries\n            _media_query_list: function(){\n                /*\n                 * media_query_list\n                 *   : S* [media_query [ ',' S* media_query ]* ]?\n                 *   ;\n                 */\n                var tokenStream = this._tokenStream,\n                    mediaList   = [];\n\n\n                this._readWhitespace();\n\n                if (tokenStream.peek() == Tokens.IDENT || tokenStream.peek() == Tokens.LPAREN){\n                    mediaList.push(this._media_query());\n                }\n\n                while(tokenStream.match(Tokens.COMMA)){\n                    this._readWhitespace();\n                    mediaList.push(this._media_query());\n                }\n\n                return mediaList;\n            },\n\n            /*\n             * Note: \"expression\" in the grammar maps to the _media_expression\n             * method.\n\n             */\n            _media_query: function(){\n                /*\n                 * media_query\n                 *   : [ONLY | NOT]? S* media_type S* [ AND S* expression ]*\n                 *   | expression [ AND S* expression ]*\n                 *   ;\n                 */\n                var tokenStream = this._tokenStream,\n                    type        = null,\n                    ident       = null,\n                    token       = null,\n                    expressions = [];\n\n                if (tokenStream.match(Tokens.IDENT)){\n                    ident = tokenStream.token().value.toLowerCase();\n\n                    //since there's no custom tokens for these, need to manually check\n                    if (ident != \"only\" && ident != \"not\"){\n                        tokenStream.unget();\n                        ident = null;\n                    } else {\n                        token = tokenStream.token();\n                    }\n                }\n\n                this._readWhitespace();\n\n                if (tokenStream.peek() == Tokens.IDENT){\n                    type = this._media_type();\n                    if (token === null){\n                        token = tokenStream.token();\n                    }\n                } else if (tokenStream.peek() == Tokens.LPAREN){\n                    if (token === null){\n                        token = tokenStream.LT(1);\n                    }\n                    expressions.push(this._media_expression());\n                }\n\n                if (type === null && expressions.length === 0){\n                    return null;\n                } else {\n                    this._readWhitespace();\n                    while (tokenStream.match(Tokens.IDENT)){\n                        if (tokenStream.token().value.toLowerCase() != \"and\"){\n                            this._unexpectedToken(tokenStream.token());\n                        }\n\n                        this._readWhitespace();\n                        expressions.push(this._media_expression());\n                    }\n                }\n\n                return new MediaQuery(ident, type, expressions, token.startLine, token.startCol);\n            },\n\n            //CSS3 Media Queries\n            _media_type: function(){\n                /*\n                 * media_type\n                 *   : IDENT\n                 *   ;\n                 */\n                return this._media_feature();\n            },\n\n            /**\n             * Note: in CSS3 Media Queries, this is called \"expression\".\n             * Renamed here to avoid conflict with CSS3 Selectors\n             * definition of \"expression\". Also note that \"expr\" in the\n             * grammar now maps to \"expression\" from CSS3 selectors.\n             * @method _media_expression\n             * @private\n             */\n            _media_expression: function(){\n                /*\n                 * expression\n                 *  : '(' S* media_feature S* [ ':' S* expr ]? ')' S*\n                 *  ;\n                 */\n                var tokenStream = this._tokenStream,\n                    feature     = null,\n                    token,\n                    expression  = null;\n\n                tokenStream.mustMatch(Tokens.LPAREN);\n                this._readWhitespace();\n\n                feature = this._media_feature();\n                this._readWhitespace();\n\n                if (tokenStream.match(Tokens.COLON)){\n                    this._readWhitespace();\n                    token = tokenStream.LT(1);\n                    expression = this._expression();\n                }\n\n                tokenStream.mustMatch(Tokens.RPAREN);\n                this._readWhitespace();\n\n                return new MediaFeature(feature, (expression ? new SyntaxUnit(expression, token.startLine, token.startCol) : null));\n            },\n\n            //CSS3 Media Queries\n            _media_feature: function(){\n                /*\n                 * media_feature\n                 *   : IDENT\n                 *   ;\n                 */\n                var tokenStream = this._tokenStream;\n\n                tokenStream.mustMatch(Tokens.IDENT);\n\n                return SyntaxUnit.fromToken(tokenStream.token());\n            },\n\n            //CSS3 Paged Media\n            _page: function(){\n                /*\n                 * page:\n                 *    PAGE_SYM S* IDENT? pseudo_page? S*\n                 *    '{' S* [ declaration | margin ]? [ ';' S* [ declaration | margin ]? ]* '}' S*\n                 *    ;\n                 */\n                var tokenStream = this._tokenStream,\n                    line,\n                    col,\n                    identifier  = null,\n                    pseudoPage  = null;\n\n                //look for @page\n                tokenStream.mustMatch(Tokens.PAGE_SYM);\n                line = tokenStream.token().startLine;\n                col = tokenStream.token().startCol;\n\n                this._readWhitespace();\n\n                if (tokenStream.match(Tokens.IDENT)){\n                    identifier = tokenStream.token().value;\n\n                    //The value 'auto' may not be used as a page name and MUST be treated as a syntax error.\n                    if (identifier.toLowerCase() === \"auto\"){\n                        this._unexpectedToken(tokenStream.token());\n                    }\n                }\n\n                //see if there's a colon upcoming\n                if (tokenStream.peek() == Tokens.COLON){\n                    pseudoPage = this._pseudo_page();\n                }\n\n                this._readWhitespace();\n\n                this.fire({\n                    type:   \"startpage\",\n                    id:     identifier,\n                    pseudo: pseudoPage,\n                    line:   line,\n                    col:    col\n                });\n\n                this._readDeclarations(true, true);\n\n                this.fire({\n                    type:   \"endpage\",\n                    id:     identifier,\n                    pseudo: pseudoPage,\n                    line:   line,\n                    col:    col\n                });\n\n            },\n\n            //CSS3 Paged Media\n            _margin: function(){\n                /*\n                 * margin :\n                 *    margin_sym S* '{' declaration [ ';' S* declaration? ]* '}' S*\n                 *    ;\n                 */\n                var tokenStream = this._tokenStream,\n                    line,\n                    col,\n                    marginSym   = this._margin_sym();\n\n                if (marginSym){\n                    line = tokenStream.token().startLine;\n                    col = tokenStream.token().startCol;\n\n                    this.fire({\n                        type: \"startpagemargin\",\n                        margin: marginSym,\n                        line:   line,\n                        col:    col\n                    });\n\n                    this._readDeclarations(true);\n\n                    this.fire({\n                        type: \"endpagemargin\",\n                        margin: marginSym,\n                        line:   line,\n                        col:    col\n                    });\n                    return true;\n                } else {\n                    return false;\n                }\n            },\n\n            //CSS3 Paged Media\n            _margin_sym: function(){\n\n                /*\n                 * margin_sym :\n                 *    TOPLEFTCORNER_SYM |\n                 *    TOPLEFT_SYM |\n                 *    TOPCENTER_SYM |\n                 *    TOPRIGHT_SYM |\n                 *    TOPRIGHTCORNER_SYM |\n                 *    BOTTOMLEFTCORNER_SYM |\n                 *    BOTTOMLEFT_SYM |\n                 *    BOTTOMCENTER_SYM |\n                 *    BOTTOMRIGHT_SYM |\n                 *    BOTTOMRIGHTCORNER_SYM |\n                 *    LEFTTOP_SYM |\n                 *    LEFTMIDDLE_SYM |\n                 *    LEFTBOTTOM_SYM |\n                 *    RIGHTTOP_SYM |\n                 *    RIGHTMIDDLE_SYM |\n                 *    RIGHTBOTTOM_SYM\n                 *    ;\n                 */\n\n                var tokenStream = this._tokenStream;\n\n                if(tokenStream.match([Tokens.TOPLEFTCORNER_SYM, Tokens.TOPLEFT_SYM,\n                        Tokens.TOPCENTER_SYM, Tokens.TOPRIGHT_SYM, Tokens.TOPRIGHTCORNER_SYM,\n                        Tokens.BOTTOMLEFTCORNER_SYM, Tokens.BOTTOMLEFT_SYM,\n                        Tokens.BOTTOMCENTER_SYM, Tokens.BOTTOMRIGHT_SYM,\n                        Tokens.BOTTOMRIGHTCORNER_SYM, Tokens.LEFTTOP_SYM,\n                        Tokens.LEFTMIDDLE_SYM, Tokens.LEFTBOTTOM_SYM, Tokens.RIGHTTOP_SYM,\n                        Tokens.RIGHTMIDDLE_SYM, Tokens.RIGHTBOTTOM_SYM]))\n                {\n                    return SyntaxUnit.fromToken(tokenStream.token());\n                } else {\n                    return null;\n                }\n\n            },\n\n            _pseudo_page: function(){\n                /*\n                 * pseudo_page\n                 *   : ':' IDENT\n                 *   ;\n                 */\n\n                var tokenStream = this._tokenStream;\n\n                tokenStream.mustMatch(Tokens.COLON);\n                tokenStream.mustMatch(Tokens.IDENT);\n\n                //TODO: CSS3 Paged Media says only \"left\", \"center\", and \"right\" are allowed\n\n                return tokenStream.token().value;\n            },\n\n            _font_face: function(){\n                /*\n                 * font_face\n                 *   : FONT_FACE_SYM S*\n                 *     '{' S* declaration [ ';' S* declaration ]* '}' S*\n                 *   ;\n                 */\n                var tokenStream = this._tokenStream,\n                    line,\n                    col;\n\n                //look for @page\n                tokenStream.mustMatch(Tokens.FONT_FACE_SYM);\n                line = tokenStream.token().startLine;\n                col = tokenStream.token().startCol;\n\n                this._readWhitespace();\n\n                this.fire({\n                    type:   \"startfontface\",\n                    line:   line,\n                    col:    col\n                });\n\n                this._readDeclarations(true);\n\n                this.fire({\n                    type:   \"endfontface\",\n                    line:   line,\n                    col:    col\n                });\n            },\n\n            _viewport: function(){\n                /*\n                 * viewport\n                 *   : VIEWPORT_SYM S*\n                 *     '{' S* declaration? [ ';' S* declaration? ]* '}' S*\n                 *   ;\n                 */\n                 var tokenStream = this._tokenStream,\n                    line,\n                    col;\n\n                    tokenStream.mustMatch(Tokens.VIEWPORT_SYM);\n                    line = tokenStream.token().startLine;\n                    col = tokenStream.token().startCol;\n\n                    this._readWhitespace();\n\n                    this.fire({\n                        type:   \"startviewport\",\n                        line:   line,\n                        col:    col\n                    });\n\n                    this._readDeclarations(true);\n\n                    this.fire({\n                        type:   \"endviewport\",\n                        line:   line,\n                        col:    col\n                    });\n\n            },\n\n            _operator: function(inFunction){\n\n                /*\n                 * operator (outside function)\n                 *  : '/' S* | ',' S* | /( empty )/\n                 * operator (inside function)\n                 *  : '/' S* | '+' S* | '*' S* | '-' S* /( empty )/\n                 *  ;\n                 */\n\n                var tokenStream = this._tokenStream,\n                    token       = null;\n\n                if (tokenStream.match([Tokens.SLASH, Tokens.COMMA]) ||\n                    (inFunction && tokenStream.match([Tokens.PLUS, Tokens.STAR, Tokens.MINUS]))){\n                    token =  tokenStream.token();\n                    this._readWhitespace();\n                }\n                return token ? PropertyValuePart.fromToken(token) : null;\n\n            },\n\n            _combinator: function(){\n\n                /*\n                 * combinator\n                 *  : PLUS S* | GREATER S* | TILDE S* | S+\n                 *  ;\n                 */\n\n                var tokenStream = this._tokenStream,\n                    value       = null,\n                    token;\n\n                if(tokenStream.match([Tokens.PLUS, Tokens.GREATER, Tokens.TILDE])){\n                    token = tokenStream.token();\n                    value = new Combinator(token.value, token.startLine, token.startCol);\n                    this._readWhitespace();\n                }\n\n                return value;\n            },\n\n            _unary_operator: function(){\n\n                /*\n                 * unary_operator\n                 *  : '-' | '+'\n                 *  ;\n                 */\n\n                var tokenStream = this._tokenStream;\n\n                if (tokenStream.match([Tokens.MINUS, Tokens.PLUS])){\n                    return tokenStream.token().value;\n                } else {\n                    return null;\n                }\n            },\n\n            _property: function(){\n\n                /*\n                 * property\n                 *   : IDENT S*\n                 *   ;\n                 */\n\n                var tokenStream = this._tokenStream,\n                    value       = null,\n                    hack        = null,\n                    tokenValue,\n                    token,\n                    line,\n                    col;\n\n                //check for star hack - throws error if not allowed\n                if (tokenStream.peek() == Tokens.STAR && this.options.starHack){\n                    tokenStream.get();\n                    token = tokenStream.token();\n                    hack = token.value;\n                    line = token.startLine;\n                    col = token.startCol;\n                }\n\n                if(tokenStream.match(Tokens.IDENT)){\n                    token = tokenStream.token();\n                    tokenValue = token.value;\n\n                    //check for underscore hack - no error if not allowed because it's valid CSS syntax\n                    if (tokenValue.charAt(0) == \"_\" && this.options.underscoreHack){\n                        hack = \"_\";\n                        tokenValue = tokenValue.substring(1);\n                    }\n\n                    value = new PropertyName(tokenValue, hack, (line||token.startLine), (col||token.startCol));\n                    this._readWhitespace();\n                }\n\n                return value;\n            },\n\n            //Augmented with CSS3 Selectors\n            _ruleset: function(){\n                /*\n                 * ruleset\n                 *   : selectors_group\n                 *     '{' S* declaration? [ ';' S* declaration? ]* '}' S*\n                 *   ;\n                 */\n\n                var tokenStream = this._tokenStream,\n                    tt,\n                    selectors;\n\n\n                /*\n                 * Error Recovery: If even a single selector fails to parse,\n                 * then the entire ruleset should be thrown away.\n                 */\n                try {\n                    selectors = this._selectors_group();\n                } catch (ex){\n                    if (ex instanceof SyntaxError && !this.options.strict){\n\n                        //fire error event\n                        this.fire({\n                            type:       \"error\",\n                            error:      ex,\n                            message:    ex.message,\n                            line:       ex.line,\n                            col:        ex.col\n                        });\n\n                        //skip over everything until closing brace\n                        tt = tokenStream.advance([Tokens.RBRACE]);\n                        if (tt == Tokens.RBRACE){\n                            //if there's a right brace, the rule is finished so don't do anything\n                        } else {\n                            //otherwise, rethrow the error because it wasn't handled properly\n                            throw ex;\n                        }\n\n                    } else {\n                        //not a syntax error, rethrow it\n                        throw ex;\n                    }\n\n                    //trigger parser to continue\n                    return true;\n                }\n\n                //if it got here, all selectors parsed\n                if (selectors){\n\n                    this.fire({\n                        type:       \"startrule\",\n                        selectors:  selectors,\n                        line:       selectors[0].line,\n                        col:        selectors[0].col\n                    });\n\n                    this._readDeclarations(true);\n\n                    this.fire({\n                        type:       \"endrule\",\n                        selectors:  selectors,\n                        line:       selectors[0].line,\n                        col:        selectors[0].col\n                    });\n\n                }\n\n                return selectors;\n\n            },\n\n            //CSS3 Selectors\n            _selectors_group: function(){\n\n                /*\n                 * selectors_group\n                 *   : selector [ COMMA S* selector ]*\n                 *   ;\n                 */\n                var tokenStream = this._tokenStream,\n                    selectors   = [],\n                    selector;\n\n                selector = this._selector();\n                if (selector !== null){\n\n                    selectors.push(selector);\n                    while(tokenStream.match(Tokens.COMMA)){\n                        this._readWhitespace();\n                        selector = this._selector();\n                        if (selector !== null){\n                            selectors.push(selector);\n                        } else {\n                            this._unexpectedToken(tokenStream.LT(1));\n                        }\n                    }\n                }\n\n                return selectors.length ? selectors : null;\n            },\n\n            //CSS3 Selectors\n            _selector: function(){\n                /*\n                 * selector\n                 *   : simple_selector_sequence [ combinator simple_selector_sequence ]*\n                 *   ;\n                 */\n\n                var tokenStream = this._tokenStream,\n                    selector    = [],\n                    nextSelector = null,\n                    combinator  = null,\n                    ws          = null;\n\n                //if there's no simple selector, then there's no selector\n                nextSelector = this._simple_selector_sequence();\n                if (nextSelector === null){\n                    return null;\n                }\n\n                selector.push(nextSelector);\n\n                do {\n\n                    //look for a combinator\n                    combinator = this._combinator();\n\n                    if (combinator !== null){\n                        selector.push(combinator);\n                        nextSelector = this._simple_selector_sequence();\n\n                        //there must be a next selector\n                        if (nextSelector === null){\n                            this._unexpectedToken(tokenStream.LT(1));\n                        } else {\n\n                            //nextSelector is an instance of SelectorPart\n                            selector.push(nextSelector);\n                        }\n                    } else {\n\n                        //if there's not whitespace, we're done\n                        if (this._readWhitespace()){\n\n                            //add whitespace separator\n                            ws = new Combinator(tokenStream.token().value, tokenStream.token().startLine, tokenStream.token().startCol);\n\n                            //combinator is not required\n                            combinator = this._combinator();\n\n                            //selector is required if there's a combinator\n                            nextSelector = this._simple_selector_sequence();\n                            if (nextSelector === null){\n                                if (combinator !== null){\n                                    this._unexpectedToken(tokenStream.LT(1));\n                                }\n                            } else {\n\n                                if (combinator !== null){\n                                    selector.push(combinator);\n                                } else {\n                                    selector.push(ws);\n                                }\n\n                                selector.push(nextSelector);\n                            }\n                        } else {\n                            break;\n                        }\n\n                    }\n                } while(true);\n\n                return new Selector(selector, selector[0].line, selector[0].col);\n            },\n\n            //CSS3 Selectors\n            _simple_selector_sequence: function(){\n                /*\n                 * simple_selector_sequence\n                 *   : [ type_selector | universal ]\n                 *     [ HASH | class | attrib | pseudo | negation ]*\n                 *   | [ HASH | class | attrib | pseudo | negation ]+\n                 *   ;\n                 */\n\n                var tokenStream = this._tokenStream,\n\n                    //parts of a simple selector\n                    elementName = null,\n                    modifiers   = [],\n\n                    //complete selector text\n                    selectorText= \"\",\n\n                    //the different parts after the element name to search for\n                    components  = [\n                        //HASH\n                        function(){\n                            return tokenStream.match(Tokens.HASH) ?\n                                    new SelectorSubPart(tokenStream.token().value, \"id\", tokenStream.token().startLine, tokenStream.token().startCol) :\n                                    null;\n                        },\n                        this._class,\n                        this._attrib,\n                        this._pseudo,\n                        this._negation\n                    ],\n                    i           = 0,\n                    len         = components.length,\n                    component   = null,\n                    found       = false,\n                    line,\n                    col;\n\n\n                //get starting line and column for the selector\n                line = tokenStream.LT(1).startLine;\n                col = tokenStream.LT(1).startCol;\n\n                elementName = this._type_selector();\n                if (!elementName){\n                    elementName = this._universal();\n                }\n\n                if (elementName !== null){\n                    selectorText += elementName;\n                }\n\n                while(true){\n\n                    //whitespace means we're done\n                    if (tokenStream.peek() === Tokens.S){\n                        break;\n                    }\n\n                    //check for each component\n                    while(i < len && component === null){\n                        component = components[i++].call(this);\n                    }\n\n                    if (component === null){\n\n                        //we don't have a selector\n                        if (selectorText === \"\"){\n                            return null;\n                        } else {\n                            break;\n                        }\n                    } else {\n                        i = 0;\n                        modifiers.push(component);\n                        selectorText += component.toString();\n                        component = null;\n                    }\n                }\n\n\n                return selectorText !== \"\" ?\n                        new SelectorPart(elementName, modifiers, selectorText, line, col) :\n                        null;\n            },\n\n            //CSS3 Selectors\n            _type_selector: function(){\n                /*\n                 * type_selector\n                 *   : [ namespace_prefix ]? element_name\n                 *   ;\n                 */\n\n                var tokenStream = this._tokenStream,\n                    ns          = this._namespace_prefix(),\n                    elementName = this._element_name();\n\n                if (!elementName){\n                    /*\n                     * Need to back out the namespace that was read due to both\n                     * type_selector and universal reading namespace_prefix\n                     * first. Kind of hacky, but only way I can figure out\n                     * right now how to not change the grammar.\n                     */\n                    if (ns){\n                        tokenStream.unget();\n                        if (ns.length > 1){\n                            tokenStream.unget();\n                        }\n                    }\n\n                    return null;\n                } else {\n                    if (ns){\n                        elementName.text = ns + elementName.text;\n                        elementName.col -= ns.length;\n                    }\n                    return elementName;\n                }\n            },\n\n            //CSS3 Selectors\n            _class: function(){\n                /*\n                 * class\n                 *   : '.' IDENT\n                 *   ;\n                 */\n\n                var tokenStream = this._tokenStream,\n                    token;\n\n                if (tokenStream.match(Tokens.DOT)){\n                    tokenStream.mustMatch(Tokens.IDENT);\n                    token = tokenStream.token();\n                    return new SelectorSubPart(\".\" + token.value, \"class\", token.startLine, token.startCol - 1);\n                } else {\n                    return null;\n                }\n\n            },\n\n            //CSS3 Selectors\n            _element_name: function(){\n                /*\n                 * element_name\n                 *   : IDENT\n                 *   ;\n                 */\n\n                var tokenStream = this._tokenStream,\n                    token;\n\n                if (tokenStream.match(Tokens.IDENT)){\n                    token = tokenStream.token();\n                    return new SelectorSubPart(token.value, \"elementName\", token.startLine, token.startCol);\n\n                } else {\n                    return null;\n                }\n            },\n\n            //CSS3 Selectors\n            _namespace_prefix: function(){\n                /*\n                 * namespace_prefix\n                 *   : [ IDENT | '*' ]? '|'\n                 *   ;\n                 */\n                var tokenStream = this._tokenStream,\n                    value       = \"\";\n\n                //verify that this is a namespace prefix\n                if (tokenStream.LA(1) === Tokens.PIPE || tokenStream.LA(2) === Tokens.PIPE){\n\n                    if(tokenStream.match([Tokens.IDENT, Tokens.STAR])){\n                        value += tokenStream.token().value;\n                    }\n\n                    tokenStream.mustMatch(Tokens.PIPE);\n                    value += \"|\";\n\n                }\n\n                return value.length ? value : null;\n            },\n\n            //CSS3 Selectors\n            _universal: function(){\n                /*\n                 * universal\n                 *   : [ namespace_prefix ]? '*'\n                 *   ;\n                 */\n                var tokenStream = this._tokenStream,\n                    value       = \"\",\n                    ns;\n\n                ns = this._namespace_prefix();\n                if(ns){\n                    value += ns;\n                }\n\n                if(tokenStream.match(Tokens.STAR)){\n                    value += \"*\";\n                }\n\n                return value.length ? value : null;\n\n           },\n\n            //CSS3 Selectors\n            _attrib: function(){\n                /*\n                 * attrib\n                 *   : '[' S* [ namespace_prefix ]? IDENT S*\n                 *         [ [ PREFIXMATCH |\n                 *             SUFFIXMATCH |\n                 *             SUBSTRINGMATCH |\n                 *             '=' |\n                 *             INCLUDES |\n                 *             DASHMATCH ] S* [ IDENT | STRING ] S*\n                 *         ]? ']'\n                 *   ;\n                 */\n\n                var tokenStream = this._tokenStream,\n                    value       = null,\n                    ns,\n                    token;\n\n                if (tokenStream.match(Tokens.LBRACKET)){\n                    token = tokenStream.token();\n                    value = token.value;\n                    value += this._readWhitespace();\n\n                    ns = this._namespace_prefix();\n\n                    if (ns){\n                        value += ns;\n                    }\n\n                    tokenStream.mustMatch(Tokens.IDENT);\n                    value += tokenStream.token().value;\n                    value += this._readWhitespace();\n\n                    if(tokenStream.match([Tokens.PREFIXMATCH, Tokens.SUFFIXMATCH, Tokens.SUBSTRINGMATCH,\n                            Tokens.EQUALS, Tokens.INCLUDES, Tokens.DASHMATCH])){\n\n                        value += tokenStream.token().value;\n                        value += this._readWhitespace();\n\n                        tokenStream.mustMatch([Tokens.IDENT, Tokens.STRING]);\n                        value += tokenStream.token().value;\n                        value += this._readWhitespace();\n                    }\n\n                    tokenStream.mustMatch(Tokens.RBRACKET);\n\n                    return new SelectorSubPart(value + \"]\", \"attribute\", token.startLine, token.startCol);\n                } else {\n                    return null;\n                }\n            },\n\n            //CSS3 Selectors\n            _pseudo: function(){\n\n                /*\n                 * pseudo\n                 *   : ':' ':'? [ IDENT | functional_pseudo ]\n                 *   ;\n                 */\n\n                var tokenStream = this._tokenStream,\n                    pseudo      = null,\n                    colons      = \":\",\n                    line,\n                    col;\n\n                if (tokenStream.match(Tokens.COLON)){\n\n                    if (tokenStream.match(Tokens.COLON)){\n                        colons += \":\";\n                    }\n\n                    if (tokenStream.match(Tokens.IDENT)){\n                        pseudo = tokenStream.token().value;\n                        line = tokenStream.token().startLine;\n                        col = tokenStream.token().startCol - colons.length;\n                    } else if (tokenStream.peek() == Tokens.FUNCTION){\n                        line = tokenStream.LT(1).startLine;\n                        col = tokenStream.LT(1).startCol - colons.length;\n                        pseudo = this._functional_pseudo();\n                    }\n\n                    if (pseudo){\n                        pseudo = new SelectorSubPart(colons + pseudo, \"pseudo\", line, col);\n                    }\n                }\n\n                return pseudo;\n            },\n\n            //CSS3 Selectors\n            _functional_pseudo: function(){\n                /*\n                 * functional_pseudo\n                 *   : FUNCTION S* expression ')'\n                 *   ;\n                */\n\n                var tokenStream = this._tokenStream,\n                    value = null;\n\n                if(tokenStream.match(Tokens.FUNCTION)){\n                    value = tokenStream.token().value;\n                    value += this._readWhitespace();\n                    value += this._expression();\n                    tokenStream.mustMatch(Tokens.RPAREN);\n                    value += \")\";\n                }\n\n                return value;\n            },\n\n            //CSS3 Selectors\n            _expression: function(){\n                /*\n                 * expression\n                 *   : [ [ PLUS | '-' | DIMENSION | NUMBER | STRING | IDENT ] S* ]+\n                 *   ;\n                 */\n\n                var tokenStream = this._tokenStream,\n                    value       = \"\";\n\n                while(tokenStream.match([Tokens.PLUS, Tokens.MINUS, Tokens.DIMENSION,\n                        Tokens.NUMBER, Tokens.STRING, Tokens.IDENT, Tokens.LENGTH,\n                        Tokens.FREQ, Tokens.ANGLE, Tokens.TIME,\n                        Tokens.RESOLUTION, Tokens.SLASH])){\n\n                    value += tokenStream.token().value;\n                    value += this._readWhitespace();\n                }\n\n                return value.length ? value : null;\n\n            },\n\n            //CSS3 Selectors\n            _negation: function(){\n                /*\n                 * negation\n                 *   : NOT S* negation_arg S* ')'\n                 *   ;\n                 */\n\n                var tokenStream = this._tokenStream,\n                    line,\n                    col,\n                    value       = \"\",\n                    arg,\n                    subpart     = null;\n\n                if (tokenStream.match(Tokens.NOT)){\n                    value = tokenStream.token().value;\n                    line = tokenStream.token().startLine;\n                    col = tokenStream.token().startCol;\n                    value += this._readWhitespace();\n                    arg = this._negation_arg();\n                    value += arg;\n                    value += this._readWhitespace();\n                    tokenStream.match(Tokens.RPAREN);\n                    value += tokenStream.token().value;\n\n                    subpart = new SelectorSubPart(value, \"not\", line, col);\n                    subpart.args.push(arg);\n                }\n\n                return subpart;\n            },\n\n            //CSS3 Selectors\n            _negation_arg: function(){\n                /*\n                 * negation_arg\n                 *   : type_selector | universal | HASH | class | attrib | pseudo\n                 *   ;\n                 */\n\n                var tokenStream = this._tokenStream,\n                    args        = [\n                        this._type_selector,\n                        this._universal,\n                        function(){\n                            return tokenStream.match(Tokens.HASH) ?\n                                    new SelectorSubPart(tokenStream.token().value, \"id\", tokenStream.token().startLine, tokenStream.token().startCol) :\n                                    null;\n                        },\n                        this._class,\n                        this._attrib,\n                        this._pseudo\n                    ],\n                    arg         = null,\n                    i           = 0,\n                    len         = args.length,\n                    elementName,\n                    line,\n                    col,\n                    part;\n\n                line = tokenStream.LT(1).startLine;\n                col = tokenStream.LT(1).startCol;\n\n                while(i < len && arg === null){\n\n                    arg = args[i].call(this);\n                    i++;\n                }\n\n                //must be a negation arg\n                if (arg === null){\n                    this._unexpectedToken(tokenStream.LT(1));\n                }\n\n                //it's an element name\n                if (arg.type == \"elementName\"){\n                    part = new SelectorPart(arg, [], arg.toString(), line, col);\n                } else {\n                    part = new SelectorPart(null, [arg], arg.toString(), line, col);\n                }\n\n                return part;\n            },\n\n            _declaration: function(){\n\n                /*\n                 * declaration\n                 *   : property ':' S* expr prio?\n                 *   | /( empty )/\n                 *   ;\n                 */\n\n                var tokenStream = this._tokenStream,\n                    property    = null,\n                    expr        = null,\n                    prio        = null,\n                    error       = null,\n                    invalid     = null,\n                    propertyName= \"\";\n\n                property = this._property();\n                if (property !== null){\n\n                    tokenStream.mustMatch(Tokens.COLON);\n                    this._readWhitespace();\n\n                    expr = this._expr();\n\n                    //if there's no parts for the value, it's an error\n                    if (!expr || expr.length === 0){\n                        this._unexpectedToken(tokenStream.LT(1));\n                    }\n\n                    prio = this._prio();\n\n                    /*\n                     * If hacks should be allowed, then only check the root\n                     * property. If hacks should not be allowed, treat\n                     * _property or *property as invalid properties.\n                     */\n                    propertyName = property.toString();\n                    if (this.options.starHack && property.hack == \"*\" ||\n                            this.options.underscoreHack && property.hack == \"_\") {\n\n                        propertyName = property.text;\n                    }\n\n                    try {\n                        this._validateProperty(propertyName, expr);\n                    } catch (ex) {\n                        invalid = ex;\n                    }\n\n                    this.fire({\n                        type:       \"property\",\n                        property:   property,\n                        value:      expr,\n                        important:  prio,\n                        line:       property.line,\n                        col:        property.col,\n                        invalid:    invalid\n                    });\n\n                    return true;\n                } else {\n                    return false;\n                }\n            },\n\n            _prio: function(){\n                /*\n                 * prio\n                 *   : IMPORTANT_SYM S*\n                 *   ;\n                 */\n\n                var tokenStream = this._tokenStream,\n                    result      = tokenStream.match(Tokens.IMPORTANT_SYM);\n\n                this._readWhitespace();\n                return result;\n            },\n\n            _expr: function(inFunction){\n                /*\n                 * expr\n                 *   : term [ operator term ]*\n                 *   ;\n                 */\n\n                var tokenStream = this._tokenStream,\n                    values      = [],\n                    //valueParts    = [],\n                    value       = null,\n                    operator    = null;\n\n                value = this._term(inFunction);\n                if (value !== null){\n\n                    values.push(value);\n\n                    do {\n                        operator = this._operator(inFunction);\n\n                        //if there's an operator, keep building up the value parts\n                        if (operator){\n                            values.push(operator);\n                        } /*else {\n                            //if there's not an operator, you have a full value\n                            values.push(new PropertyValue(valueParts, valueParts[0].line, valueParts[0].col));\n                            valueParts = [];\n                        }*/\n\n                        value = this._term(inFunction);\n\n                        if (value === null){\n                            break;\n                        } else {\n                            values.push(value);\n                        }\n                    } while(true);\n                }\n\n                //cleanup\n                /*if (valueParts.length){\n                    values.push(new PropertyValue(valueParts, valueParts[0].line, valueParts[0].col));\n                }*/\n\n                return values.length > 0 ? new PropertyValue(values, values[0].line, values[0].col) : null;\n            },\n\n            _term: function(inFunction){\n\n                /*\n                 * term\n                 *   : unary_operator?\n                 *     [ NUMBER S* | PERCENTAGE S* | LENGTH S* | ANGLE S* |\n                 *       TIME S* | FREQ S* | function | ie_function ]\n                 *   | STRING S* | IDENT S* | URI S* | UNICODERANGE S* | hexcolor\n                 *   ;\n                 */\n\n                var tokenStream = this._tokenStream,\n                    unary       = null,\n                    value       = null,\n                    endChar     = null,\n                    token,\n                    line,\n                    col;\n\n                //returns the operator or null\n                unary = this._unary_operator();\n                if (unary !== null){\n                    line = tokenStream.token().startLine;\n                    col = tokenStream.token().startCol;\n                }\n\n                //exception for IE filters\n                if (tokenStream.peek() == Tokens.IE_FUNCTION && this.options.ieFilters){\n\n                    value = this._ie_function();\n                    if (unary === null){\n                        line = tokenStream.token().startLine;\n                        col = tokenStream.token().startCol;\n                    }\n\n                //see if it's a simple block\n                } else if (inFunction && tokenStream.match([Tokens.LPAREN, Tokens.LBRACE, Tokens.LBRACKET])){\n\n                    token = tokenStream.token();\n                    endChar = token.endChar;\n                    value = token.value + this._expr(inFunction).text;\n                    if (unary === null){\n                        line = tokenStream.token().startLine;\n                        col = tokenStream.token().startCol;\n                    }\n                    tokenStream.mustMatch(Tokens.type(endChar));\n                    value += endChar;\n                    this._readWhitespace();\n\n                //see if there's a simple match\n                } else if (tokenStream.match([Tokens.NUMBER, Tokens.PERCENTAGE, Tokens.LENGTH,\n                        Tokens.ANGLE, Tokens.TIME,\n                        Tokens.FREQ, Tokens.STRING, Tokens.IDENT, Tokens.URI, Tokens.UNICODE_RANGE])){\n\n                    value = tokenStream.token().value;\n                    if (unary === null){\n                        line = tokenStream.token().startLine;\n                        col = tokenStream.token().startCol;\n                    }\n                    this._readWhitespace();\n                } else {\n\n                    //see if it's a color\n                    token = this._hexcolor();\n                    if (token === null){\n\n                        //if there's no unary, get the start of the next token for line/col info\n                        if (unary === null){\n                            line = tokenStream.LT(1).startLine;\n                            col = tokenStream.LT(1).startCol;\n                        }\n\n                        //has to be a function\n                        if (value === null){\n\n                            /*\n                             * This checks for alpha(opacity=0) style of IE\n                             * functions. IE_FUNCTION only presents progid: style.\n                             */\n                            if (tokenStream.LA(3) == Tokens.EQUALS && this.options.ieFilters){\n                                value = this._ie_function();\n                            } else {\n                                value = this._function();\n                            }\n                        }\n\n                        /*if (value === null){\n                            return null;\n                            //throw new Error(\"Expected identifier at line \" + tokenStream.token().startLine + \", character \" +  tokenStream.token().startCol + \".\");\n                        }*/\n\n                    } else {\n                        value = token.value;\n                        if (unary === null){\n                            line = token.startLine;\n                            col = token.startCol;\n                        }\n                    }\n\n                }\n\n                return value !== null ?\n                        new PropertyValuePart(unary !== null ? unary + value : value, line, col) :\n                        null;\n\n            },\n\n            _function: function(){\n\n                /*\n                 * function\n                 *   : FUNCTION S* expr ')' S*\n                 *   ;\n                 */\n\n                var tokenStream = this._tokenStream,\n                    functionText = null,\n                    expr        = null,\n                    lt;\n\n                if (tokenStream.match(Tokens.FUNCTION)){\n                    functionText = tokenStream.token().value;\n                    this._readWhitespace();\n                    expr = this._expr(true);\n                    functionText += expr;\n\n                    //START: Horrible hack in case it's an IE filter\n                    if (this.options.ieFilters && tokenStream.peek() == Tokens.EQUALS){\n                        do {\n\n                            if (this._readWhitespace()){\n                                functionText += tokenStream.token().value;\n                            }\n\n                            //might be second time in the loop\n                            if (tokenStream.LA(0) == Tokens.COMMA){\n                                functionText += tokenStream.token().value;\n                            }\n\n                            tokenStream.match(Tokens.IDENT);\n                            functionText += tokenStream.token().value;\n\n                            tokenStream.match(Tokens.EQUALS);\n                            functionText += tokenStream.token().value;\n\n                            //functionText += this._term();\n                            lt = tokenStream.peek();\n                            while(lt != Tokens.COMMA && lt != Tokens.S && lt != Tokens.RPAREN){\n                                tokenStream.get();\n                                functionText += tokenStream.token().value;\n                                lt = tokenStream.peek();\n                            }\n                        } while(tokenStream.match([Tokens.COMMA, Tokens.S]));\n                    }\n\n                    //END: Horrible Hack\n\n                    tokenStream.match(Tokens.RPAREN);\n                    functionText += \")\";\n                    this._readWhitespace();\n                }\n\n                return functionText;\n            },\n\n            _ie_function: function(){\n\n                /* (My own extension)\n                 * ie_function\n                 *   : IE_FUNCTION S* IDENT '=' term [S* ','? IDENT '=' term]+ ')' S*\n                 *   ;\n                 */\n\n                var tokenStream = this._tokenStream,\n                    functionText = null,\n                    expr        = null,\n                    lt;\n\n                //IE function can begin like a regular function, too\n                if (tokenStream.match([Tokens.IE_FUNCTION, Tokens.FUNCTION])){\n                    functionText = tokenStream.token().value;\n\n                    do {\n\n                        if (this._readWhitespace()){\n                            functionText += tokenStream.token().value;\n                        }\n\n                        //might be second time in the loop\n                        if (tokenStream.LA(0) == Tokens.COMMA){\n                            functionText += tokenStream.token().value;\n                        }\n\n                        tokenStream.match(Tokens.IDENT);\n                        functionText += tokenStream.token().value;\n\n                        tokenStream.match(Tokens.EQUALS);\n                        functionText += tokenStream.token().value;\n\n                        //functionText += this._term();\n                        lt = tokenStream.peek();\n                        while(lt != Tokens.COMMA && lt != Tokens.S && lt != Tokens.RPAREN){\n                            tokenStream.get();\n                            functionText += tokenStream.token().value;\n                            lt = tokenStream.peek();\n                        }\n                    } while(tokenStream.match([Tokens.COMMA, Tokens.S]));\n\n                    tokenStream.match(Tokens.RPAREN);\n                    functionText += \")\";\n                    this._readWhitespace();\n                }\n\n                return functionText;\n            },\n\n            _hexcolor: function(){\n                /*\n                 * There is a constraint on the color that it must\n                 * have either 3 or 6 hex-digits (i.e., [0-9a-fA-F])\n                 * after the \"#\"; e.g., \"#000\" is OK, but \"#abcd\" is not.\n                 *\n                 * hexcolor\n                 *   : HASH S*\n                 *   ;\n                 */\n\n                var tokenStream = this._tokenStream,\n                    token = null,\n                    color;\n\n                if(tokenStream.match(Tokens.HASH)){\n\n                    //need to do some validation here\n\n                    token = tokenStream.token();\n                    color = token.value;\n                    if (!/#[a-f0-9]{3,6}/i.test(color)){\n                        throw new SyntaxError(\"Expected a hex color but found '\" + color + \"' at line \" + token.startLine + \", col \" + token.startCol + \".\", token.startLine, token.startCol);\n                    }\n                    this._readWhitespace();\n                }\n\n                return token;\n            },\n\n            //-----------------------------------------------------------------\n            // Animations methods\n            //-----------------------------------------------------------------\n\n            _keyframes: function(){\n\n                /*\n                 * keyframes:\n                 *   : KEYFRAMES_SYM S* keyframe_name S* '{' S* keyframe_rule* '}' {\n                 *   ;\n                 */\n                var tokenStream = this._tokenStream,\n                    token,\n                    tt,\n                    name,\n                    prefix = \"\";\n\n                tokenStream.mustMatch(Tokens.KEYFRAMES_SYM);\n                token = tokenStream.token();\n                if (/^@\\-([^\\-]+)\\-/.test(token.value)) {\n                    prefix = RegExp.$1;\n                }\n\n                this._readWhitespace();\n                name = this._keyframe_name();\n\n                this._readWhitespace();\n                tokenStream.mustMatch(Tokens.LBRACE);\n\n                this.fire({\n                    type:   \"startkeyframes\",\n                    name:   name,\n                    prefix: prefix,\n                    line:   token.startLine,\n                    col:    token.startCol\n                });\n\n                this._readWhitespace();\n                tt = tokenStream.peek();\n\n                //check for key\n                while(tt == Tokens.IDENT || tt == Tokens.PERCENTAGE) {\n                    this._keyframe_rule();\n                    this._readWhitespace();\n                    tt = tokenStream.peek();\n                }\n\n                this.fire({\n                    type:   \"endkeyframes\",\n                    name:   name,\n                    prefix: prefix,\n                    line:   token.startLine,\n                    col:    token.startCol\n                });\n\n                this._readWhitespace();\n                tokenStream.mustMatch(Tokens.RBRACE);\n\n            },\n\n            _keyframe_name: function(){\n\n                /*\n                 * keyframe_name:\n                 *   : IDENT\n                 *   | STRING\n                 *   ;\n                 */\n                var tokenStream = this._tokenStream,\n                    token;\n\n                tokenStream.mustMatch([Tokens.IDENT, Tokens.STRING]);\n                return SyntaxUnit.fromToken(tokenStream.token());\n            },\n\n            _keyframe_rule: function(){\n\n                /*\n                 * keyframe_rule:\n                 *   : key_list S*\n                 *     '{' S* declaration [ ';' S* declaration ]* '}' S*\n                 *   ;\n                 */\n                var tokenStream = this._tokenStream,\n                    token,\n                    keyList = this._key_list();\n\n                this.fire({\n                    type:   \"startkeyframerule\",\n                    keys:   keyList,\n                    line:   keyList[0].line,\n                    col:    keyList[0].col\n                });\n\n                this._readDeclarations(true);\n\n                this.fire({\n                    type:   \"endkeyframerule\",\n                    keys:   keyList,\n                    line:   keyList[0].line,\n                    col:    keyList[0].col\n                });\n\n            },\n\n            _key_list: function(){\n\n                /*\n                 * key_list:\n                 *   : key [ S* ',' S* key]*\n                 *   ;\n                 */\n                var tokenStream = this._tokenStream,\n                    token,\n                    key,\n                    keyList = [];\n\n                //must be least one key\n                keyList.push(this._key());\n\n                this._readWhitespace();\n\n                while(tokenStream.match(Tokens.COMMA)){\n                    this._readWhitespace();\n                    keyList.push(this._key());\n                    this._readWhitespace();\n                }\n\n                return keyList;\n            },\n\n            _key: function(){\n                /*\n                 * There is a restriction that IDENT can be only \"from\" or \"to\".\n                 *\n                 * key\n                 *   : PERCENTAGE\n                 *   | IDENT\n                 *   ;\n                 */\n\n                var tokenStream = this._tokenStream,\n                    token;\n\n                if (tokenStream.match(Tokens.PERCENTAGE)){\n                    return SyntaxUnit.fromToken(tokenStream.token());\n                } else if (tokenStream.match(Tokens.IDENT)){\n                    token = tokenStream.token();\n\n                    if (/from|to/i.test(token.value)){\n                        return SyntaxUnit.fromToken(token);\n                    }\n\n                    tokenStream.unget();\n                }\n\n                //if it gets here, there wasn't a valid token, so time to explode\n                this._unexpectedToken(tokenStream.LT(1));\n            },\n\n            //-----------------------------------------------------------------\n            // Helper methods\n            //-----------------------------------------------------------------\n\n            /**\n             * Not part of CSS grammar, but useful for skipping over\n             * combination of white space and HTML-style comments.\n             * @return {void}\n             * @method _skipCruft\n             * @private\n             */\n            _skipCruft: function(){\n                while(this._tokenStream.match([Tokens.S, Tokens.CDO, Tokens.CDC])){\n                    //noop\n                }\n            },\n\n            /**\n             * Not part of CSS grammar, but this pattern occurs frequently\n             * in the official CSS grammar. Split out here to eliminate\n             * duplicate code.\n             * @param {Boolean} checkStart Indicates if the rule should check\n             *      for the left brace at the beginning.\n             * @param {Boolean} readMargins Indicates if the rule should check\n             *      for margin patterns.\n             * @return {void}\n             * @method _readDeclarations\n             * @private\n             */\n            _readDeclarations: function(checkStart, readMargins){\n                /*\n                 * Reads the pattern\n                 * S* '{' S* declaration [ ';' S* declaration ]* '}' S*\n                 * or\n                 * S* '{' S* [ declaration | margin ]? [ ';' S* [ declaration | margin ]? ]* '}' S*\n                 * Note that this is how it is described in CSS3 Paged Media, but is actually incorrect.\n                 * A semicolon is only necessary following a declaration is there's another declaration\n                 * or margin afterwards.\n                 */\n                var tokenStream = this._tokenStream,\n                    tt;\n\n\n                this._readWhitespace();\n\n                if (checkStart){\n                    tokenStream.mustMatch(Tokens.LBRACE);\n                }\n\n                this._readWhitespace();\n\n                try {\n\n                    while(true){\n\n                        if (tokenStream.match(Tokens.SEMICOLON) || (readMargins && this._margin())){\n                            //noop\n                        } else if (this._declaration()){\n                            if (!tokenStream.match(Tokens.SEMICOLON)){\n                                break;\n                            }\n                        } else {\n                            break;\n                        }\n\n                        //if ((!this._margin() && !this._declaration()) || !tokenStream.match(Tokens.SEMICOLON)){\n                        //    break;\n                        //}\n                        this._readWhitespace();\n                    }\n\n                    tokenStream.mustMatch(Tokens.RBRACE);\n                    this._readWhitespace();\n\n                } catch (ex) {\n                    if (ex instanceof SyntaxError && !this.options.strict){\n\n                        //fire error event\n                        this.fire({\n                            type:       \"error\",\n                            error:      ex,\n                            message:    ex.message,\n                            line:       ex.line,\n                            col:        ex.col\n                        });\n\n                        //see if there's another declaration\n                        tt = tokenStream.advance([Tokens.SEMICOLON, Tokens.RBRACE]);\n                        if (tt == Tokens.SEMICOLON){\n                            //if there's a semicolon, then there might be another declaration\n                            this._readDeclarations(false, readMargins);\n                        } else if (tt != Tokens.RBRACE){\n                            //if there's a right brace, the rule is finished so don't do anything\n                            //otherwise, rethrow the error because it wasn't handled properly\n                            throw ex;\n                        }\n\n                    } else {\n                        //not a syntax error, rethrow it\n                        throw ex;\n                    }\n                }\n\n            },\n\n            /**\n             * In some cases, you can end up with two white space tokens in a\n             * row. Instead of making a change in every function that looks for\n             * white space, this function is used to match as much white space\n             * as necessary.\n             * @method _readWhitespace\n             * @return {String} The white space if found, empty string if not.\n             * @private\n             */\n            _readWhitespace: function(){\n\n                var tokenStream = this._tokenStream,\n                    ws = \"\";\n\n                while(tokenStream.match(Tokens.S)){\n                    ws += tokenStream.token().value;\n                }\n\n                return ws;\n            },\n\n\n            /**\n             * Throws an error when an unexpected token is found.\n             * @param {Object} token The token that was found.\n             * @method _unexpectedToken\n             * @return {void}\n             * @private\n             */\n            _unexpectedToken: function(token){\n                throw new SyntaxError(\"Unexpected token '\" + token.value + \"' at line \" + token.startLine + \", col \" + token.startCol + \".\", token.startLine, token.startCol);\n            },\n\n            /**\n             * Helper method used for parsing subparts of a style sheet.\n             * @return {void}\n             * @method _verifyEnd\n             * @private\n             */\n            _verifyEnd: function(){\n                if (this._tokenStream.LA(1) != Tokens.EOF){\n                    this._unexpectedToken(this._tokenStream.LT(1));\n                }\n            },\n\n            //-----------------------------------------------------------------\n            // Validation methods\n            //-----------------------------------------------------------------\n            _validateProperty: function(property, value){\n                Validation.validate(property, value);\n            },\n\n            //-----------------------------------------------------------------\n            // Parsing methods\n            //-----------------------------------------------------------------\n\n            parse: function(input){\n                this._tokenStream = new TokenStream(input, Tokens);\n                this._stylesheet();\n            },\n\n            parseStyleSheet: function(input){\n                //just passthrough\n                return this.parse(input);\n            },\n\n            parseMediaQuery: function(input){\n                this._tokenStream = new TokenStream(input, Tokens);\n                var result = this._media_query();\n\n                //if there's anything more, then it's an invalid selector\n                this._verifyEnd();\n\n                //otherwise return result\n                return result;\n            },\n\n            /**\n             * Parses a property value (everything after the semicolon).\n             * @return {parserlib.css.PropertyValue} The property value.\n             * @throws parserlib.util.SyntaxError If an unexpected token is found.\n             * @method parserPropertyValue\n             */\n            parsePropertyValue: function(input){\n\n                this._tokenStream = new TokenStream(input, Tokens);\n                this._readWhitespace();\n\n                var result = this._expr();\n\n                //okay to have a trailing white space\n                this._readWhitespace();\n\n                //if there's anything more, then it's an invalid selector\n                this._verifyEnd();\n\n                //otherwise return result\n                return result;\n            },\n\n            /**\n             * Parses a complete CSS rule, including selectors and\n             * properties.\n             * @param {String} input The text to parser.\n             * @return {Boolean} True if the parse completed successfully, false if not.\n             * @method parseRule\n             */\n            parseRule: function(input){\n                this._tokenStream = new TokenStream(input, Tokens);\n\n                //skip any leading white space\n                this._readWhitespace();\n\n                var result = this._ruleset();\n\n                //skip any trailing white space\n                this._readWhitespace();\n\n                //if there's anything more, then it's an invalid selector\n                this._verifyEnd();\n\n                //otherwise return result\n                return result;\n            },\n\n            /**\n             * Parses a single CSS selector (no comma)\n             * @param {String} input The text to parse as a CSS selector.\n             * @return {Selector} An object representing the selector.\n             * @throws parserlib.util.SyntaxError If an unexpected token is found.\n             * @method parseSelector\n             */\n            parseSelector: function(input){\n\n                this._tokenStream = new TokenStream(input, Tokens);\n\n                //skip any leading white space\n                this._readWhitespace();\n\n                var result = this._selector();\n\n                //skip any trailing white space\n                this._readWhitespace();\n\n                //if there's anything more, then it's an invalid selector\n                this._verifyEnd();\n\n                //otherwise return result\n                return result;\n            },\n\n            /**\n             * Parses an HTML style attribute: a set of CSS declarations\n             * separated by semicolons.\n             * @param {String} input The text to parse as a style attribute\n             * @return {void}\n             * @method parseStyleAttribute\n             */\n            parseStyleAttribute: function(input){\n                input += \"}\"; // for error recovery in _readDeclarations()\n                this._tokenStream = new TokenStream(input, Tokens);\n                this._readDeclarations();\n            }\n        };\n\n    //copy over onto prototype\n    for (prop in additions){\n        if (additions.hasOwnProperty(prop)){\n            proto[prop] = additions[prop];\n        }\n    }\n\n    return proto;\n}();\n\n\n/*\nnth\n  : S* [ ['-'|'+']? INTEGER? {N} [ S* ['-'|'+'] S* INTEGER ]? |\n         ['-'|'+']? INTEGER | {O}{D}{D} | {E}{V}{E}{N} ] S*\n  ;\n*/\n/*global Validation, ValidationTypes, ValidationError*/\nvar Properties = {\n\n    //A\n    \"align-items\"                   : \"flex-start | flex-end | center | baseline | stretch\",\n    \"align-content\"                 : \"flex-start | flex-end | center | space-between | space-around | stretch\",\n    \"align-self\"                    : \"auto | flex-start | flex-end | center | baseline | stretch\",\n    \"-webkit-align-items\"           : \"flex-start | flex-end | center | baseline | stretch\",\n    \"-webkit-align-content\"         : \"flex-start | flex-end | center | space-between | space-around | stretch\",\n    \"-webkit-align-self\"            : \"auto | flex-start | flex-end | center | baseline | stretch\",\n    \"alignment-adjust\"              : \"auto | baseline | before-edge | text-before-edge | middle | central | after-edge | text-after-edge | ideographic | alphabetic | hanging | mathematical | <percentage> | <length>\",\n    \"alignment-baseline\"            : \"baseline | use-script | before-edge | text-before-edge | after-edge | text-after-edge | central | middle | ideographic | alphabetic | hanging | mathematical\",\n    \"animation\"                     : 1,\n    \"animation-delay\"               : { multi: \"<time>\", comma: true },\n    \"animation-direction\"           : { multi: \"normal | reverse | alternate | alternate-reverse\", comma: true },\n    \"animation-duration\"            : { multi: \"<time>\", comma: true },\n    \"animation-fill-mode\"           : { multi: \"none | forwards | backwards | both\", comma: true },\n    \"animation-iteration-count\"     : { multi: \"<number> | infinite\", comma: true },\n    \"animation-name\"                : { multi: \"none | <ident>\", comma: true },\n    \"animation-play-state\"          : { multi: \"running | paused\", comma: true },\n    \"animation-timing-function\"     : 1,\n\n    //vendor prefixed\n    \"-moz-animation-delay\"               : { multi: \"<time>\", comma: true },\n    \"-moz-animation-direction\"           : { multi: \"normal | reverse | alternate | alternate-reverse\", comma: true },\n    \"-moz-animation-duration\"            : { multi: \"<time>\", comma: true },\n    \"-moz-animation-iteration-count\"     : { multi: \"<number> | infinite\", comma: true },\n    \"-moz-animation-name\"                : { multi: \"none | <ident>\", comma: true },\n    \"-moz-animation-play-state\"          : { multi: \"running | paused\", comma: true },\n\n    \"-ms-animation-delay\"               : { multi: \"<time>\", comma: true },\n    \"-ms-animation-direction\"           : { multi: \"normal | reverse | alternate | alternate-reverse\", comma: true },\n    \"-ms-animation-duration\"            : { multi: \"<time>\", comma: true },\n    \"-ms-animation-iteration-count\"     : { multi: \"<number> | infinite\", comma: true },\n    \"-ms-animation-name\"                : { multi: \"none | <ident>\", comma: true },\n    \"-ms-animation-play-state\"          : { multi: \"running | paused\", comma: true },\n\n    \"-webkit-animation-delay\"               : { multi: \"<time>\", comma: true },\n    \"-webkit-animation-direction\"           : { multi: \"normal | reverse | alternate | alternate-reverse\", comma: true },\n    \"-webkit-animation-duration\"            : { multi: \"<time>\", comma: true },\n    \"-webkit-animation-fill-mode\"           : { multi: \"none | forwards | backwards | both\", comma: true },\n    \"-webkit-animation-iteration-count\"     : { multi: \"<number> | infinite\", comma: true },\n    \"-webkit-animation-name\"                : { multi: \"none | <ident>\", comma: true },\n    \"-webkit-animation-play-state\"          : { multi: \"running | paused\", comma: true },\n\n    \"-o-animation-delay\"               : { multi: \"<time>\", comma: true },\n    \"-o-animation-direction\"           : { multi: \"normal | reverse | alternate | alternate-reverse\", comma: true },\n    \"-o-animation-duration\"            : { multi: \"<time>\", comma: true },\n    \"-o-animation-iteration-count\"     : { multi: \"<number> | infinite\", comma: true },\n    \"-o-animation-name\"                : { multi: \"none | <ident>\", comma: true },\n    \"-o-animation-play-state\"          : { multi: \"running | paused\", comma: true },\n\n    \"appearance\"                    : \"icon | window | desktop | workspace | document | tooltip | dialog | button | push-button | hyperlink | radio-button | checkbox | menu-item | tab | menu | menubar | pull-down-menu | pop-up-menu | list-menu | radio-group | checkbox-group | outline-tree | range | field | combo-box | signature | password | normal | none | inherit\",\n    \"azimuth\"                       : function (expression) {\n        var simple      = \"<angle> | leftwards | rightwards | inherit\",\n            direction   = \"left-side | far-left | left | center-left | center | center-right | right | far-right | right-side\",\n            behind      = false,\n            valid       = false,\n            part;\n\n        if (!ValidationTypes.isAny(expression, simple)) {\n            if (ValidationTypes.isAny(expression, \"behind\")) {\n                behind = true;\n                valid = true;\n            }\n\n            if (ValidationTypes.isAny(expression, direction)) {\n                valid = true;\n                if (!behind) {\n                    ValidationTypes.isAny(expression, \"behind\");\n                }\n            }\n        }\n\n        if (expression.hasNext()) {\n            part = expression.next();\n            if (valid) {\n                throw new ValidationError(\"Expected end of value but found '\" + part + \"'.\", part.line, part.col);\n            } else {\n                throw new ValidationError(\"Expected (<'azimuth'>) but found '\" + part + \"'.\", part.line, part.col);\n            }\n        }\n    },\n\n    //B\n    \"backface-visibility\"           : \"visible | hidden\",\n    \"background\"                    : 1,\n    \"background-attachment\"         : { multi: \"<attachment>\", comma: true },\n    \"background-clip\"               : { multi: \"<box>\", comma: true },\n    \"background-color\"              : \"<color> | inherit\",\n    \"background-image\"              : { multi: \"<bg-image>\", comma: true },\n    \"background-origin\"             : { multi: \"<box>\", comma: true },\n    \"background-position\"           : { multi: \"<bg-position>\", comma: true },\n    \"background-repeat\"             : { multi: \"<repeat-style>\" },\n    \"background-size\"               : { multi: \"<bg-size>\", comma: true },\n    \"baseline-shift\"                : \"baseline | sub | super | <percentage> | <length>\",\n    \"behavior\"                      : 1,\n    \"binding\"                       : 1,\n    \"bleed\"                         : \"<length>\",\n    \"bookmark-label\"                : \"<content> | <attr> | <string>\",\n    \"bookmark-level\"                : \"none | <integer>\",\n    \"bookmark-state\"                : \"open | closed\",\n    \"bookmark-target\"               : \"none | <uri> | <attr>\",\n    \"border\"                        : \"<border-width> || <border-style> || <color>\",\n    \"border-bottom\"                 : \"<border-width> || <border-style> || <color>\",\n    \"border-bottom-color\"           : \"<color> | inherit\",\n    \"border-bottom-left-radius\"     :  \"<x-one-radius>\",\n    \"border-bottom-right-radius\"    :  \"<x-one-radius>\",\n    \"border-bottom-style\"           : \"<border-style>\",\n    \"border-bottom-width\"           : \"<border-width>\",\n    \"border-collapse\"               : \"collapse | separate | inherit\",\n    \"border-color\"                  : { multi: \"<color> | inherit\", max: 4 },\n    \"border-image\"                  : 1,\n    \"border-image-outset\"           : { multi: \"<length> | <number>\", max: 4 },\n    \"border-image-repeat\"           : { multi: \"stretch | repeat | round\", max: 2 },\n    \"border-image-slice\"            : function(expression) {\n\n        var valid   = false,\n            numeric = \"<number> | <percentage>\",\n            fill    = false,\n            count   = 0,\n            max     = 4,\n            part;\n\n        if (ValidationTypes.isAny(expression, \"fill\")) {\n            fill = true;\n            valid = true;\n        }\n\n        while (expression.hasNext() && count < max) {\n            valid = ValidationTypes.isAny(expression, numeric);\n            if (!valid) {\n                break;\n            }\n            count++;\n        }\n\n\n        if (!fill) {\n            ValidationTypes.isAny(expression, \"fill\");\n        } else {\n            valid = true;\n        }\n\n        if (expression.hasNext()) {\n            part = expression.next();\n            if (valid) {\n                throw new ValidationError(\"Expected end of value but found '\" + part + \"'.\", part.line, part.col);\n            } else {\n                throw new ValidationError(\"Expected ([<number> | <percentage>]{1,4} && fill?) but found '\" + part + \"'.\", part.line, part.col);\n            }\n        }\n    },\n    \"border-image-source\"           : \"<image> | none\",\n    \"border-image-width\"            : { multi: \"<length> | <percentage> | <number> | auto\", max: 4 },\n    \"border-left\"                   : \"<border-width> || <border-style> || <color>\",\n    \"border-left-color\"             : \"<color> | inherit\",\n    \"border-left-style\"             : \"<border-style>\",\n    \"border-left-width\"             : \"<border-width>\",\n    \"border-radius\"                 : function(expression) {\n\n        var valid   = false,\n            simple = \"<length> | <percentage> | inherit\",\n            slash   = false,\n            fill    = false,\n            count   = 0,\n            max     = 8,\n            part;\n\n        while (expression.hasNext() && count < max) {\n            valid = ValidationTypes.isAny(expression, simple);\n            if (!valid) {\n\n                if (expression.peek() == \"/\" && count > 0 && !slash) {\n                    slash = true;\n                    max = count + 5;\n                    expression.next();\n                } else {\n                    break;\n                }\n            }\n            count++;\n        }\n\n        if (expression.hasNext()) {\n            part = expression.next();\n            if (valid) {\n                throw new ValidationError(\"Expected end of value but found '\" + part + \"'.\", part.line, part.col);\n            } else {\n                throw new ValidationError(\"Expected (<'border-radius'>) but found '\" + part + \"'.\", part.line, part.col);\n            }\n        }\n    },\n    \"border-right\"                  : \"<border-width> || <border-style> || <color>\",\n    \"border-right-color\"            : \"<color> | inherit\",\n    \"border-right-style\"            : \"<border-style>\",\n    \"border-right-width\"            : \"<border-width>\",\n    \"border-spacing\"                : { multi: \"<length> | inherit\", max: 2 },\n    \"border-style\"                  : { multi: \"<border-style>\", max: 4 },\n    \"border-top\"                    : \"<border-width> || <border-style> || <color>\",\n    \"border-top-color\"              : \"<color> | inherit\",\n    \"border-top-left-radius\"        : \"<x-one-radius>\",\n    \"border-top-right-radius\"       : \"<x-one-radius>\",\n    \"border-top-style\"              : \"<border-style>\",\n    \"border-top-width\"              : \"<border-width>\",\n    \"border-width\"                  : { multi: \"<border-width>\", max: 4 },\n    \"bottom\"                        : \"<margin-width> | inherit\",\n    \"-moz-box-align\"                : \"start | end | center | baseline | stretch\",\n    \"-moz-box-decoration-break\"     : \"slice |clone\",\n    \"-moz-box-direction\"            : \"normal | reverse | inherit\",\n    \"-moz-box-flex\"                 : \"<number>\",\n    \"-moz-box-flex-group\"           : \"<integer>\",\n    \"-moz-box-lines\"                : \"single | multiple\",\n    \"-moz-box-ordinal-group\"        : \"<integer>\",\n    \"-moz-box-orient\"               : \"horizontal | vertical | inline-axis | block-axis | inherit\",\n    \"-moz-box-pack\"                 : \"start | end | center | justify\",\n    \"-webkit-box-align\"             : \"start | end | center | baseline | stretch\",\n    \"-webkit-box-decoration-break\"  : \"slice |clone\",\n    \"-webkit-box-direction\"         : \"normal | reverse | inherit\",\n    \"-webkit-box-flex\"              : \"<number>\",\n    \"-webkit-box-flex-group\"        : \"<integer>\",\n    \"-webkit-box-lines\"             : \"single | multiple\",\n    \"-webkit-box-ordinal-group\"     : \"<integer>\",\n    \"-webkit-box-orient\"            : \"horizontal | vertical | inline-axis | block-axis | inherit\",\n    \"-webkit-box-pack\"              : \"start | end | center | justify\",\n    \"box-shadow\"                    : function (expression) {\n        var result      = false,\n            part;\n\n        if (!ValidationTypes.isAny(expression, \"none\")) {\n            Validation.multiProperty(\"<shadow>\", expression, true, Infinity);\n        } else {\n            if (expression.hasNext()) {\n                part = expression.next();\n                throw new ValidationError(\"Expected end of value but found '\" + part + \"'.\", part.line, part.col);\n            }\n        }\n    },\n    \"box-sizing\"                    : \"content-box | border-box | inherit\",\n    \"break-after\"                   : \"auto | always | avoid | left | right | page | column | avoid-page | avoid-column\",\n    \"break-before\"                  : \"auto | always | avoid | left | right | page | column | avoid-page | avoid-column\",\n    \"break-inside\"                  : \"auto | avoid | avoid-page | avoid-column\",\n\n    //C\n    \"caption-side\"                  : \"top | bottom | inherit\",\n    \"clear\"                         : \"none | right | left | both | inherit\",\n    \"clip\"                          : 1,\n    \"color\"                         : \"<color> | inherit\",\n    \"color-profile\"                 : 1,\n    \"column-count\"                  : \"<integer> | auto\",                      //http://www.w3.org/TR/css3-multicol/\n    \"column-fill\"                   : \"auto | balance\",\n    \"column-gap\"                    : \"<length> | normal\",\n    \"column-rule\"                   : \"<border-width> || <border-style> || <color>\",\n    \"column-rule-color\"             : \"<color>\",\n    \"column-rule-style\"             : \"<border-style>\",\n    \"column-rule-width\"             : \"<border-width>\",\n    \"column-span\"                   : \"none | all\",\n    \"column-width\"                  : \"<length> | auto\",\n    \"columns\"                       : 1,\n    \"content\"                       : 1,\n    \"counter-increment\"             : 1,\n    \"counter-reset\"                 : 1,\n    \"crop\"                          : \"<shape> | auto\",\n    \"cue\"                           : \"cue-after | cue-before | inherit\",\n    \"cue-after\"                     : 1,\n    \"cue-before\"                    : 1,\n    \"cursor\"                        : 1,\n\n    //D\n    \"direction\"                     : \"ltr | rtl | inherit\",\n    \"display\"                       : \"inline | block | list-item | inline-block | table | inline-table | table-row-group | table-header-group | table-footer-group | table-row | table-column-group | table-column | table-cell | table-caption | grid | inline-grid | none | inherit | -moz-box | -moz-inline-block | -moz-inline-box | -moz-inline-grid | -moz-inline-stack | -moz-inline-table | -moz-grid | -moz-grid-group | -moz-grid-line | -moz-groupbox | -moz-deck | -moz-popup | -moz-stack | -moz-marker | -webkit-box | -webkit-inline-box | -ms-flexbox | -ms-inline-flexbox | flex | -webkit-flex | inline-flex | -webkit-inline-flex\",\n    \"dominant-baseline\"             : 1,\n    \"drop-initial-after-adjust\"     : \"central | middle | after-edge | text-after-edge | ideographic | alphabetic | mathematical | <percentage> | <length>\",\n    \"drop-initial-after-align\"      : \"baseline | use-script | before-edge | text-before-edge | after-edge | text-after-edge | central | middle | ideographic | alphabetic | hanging | mathematical\",\n    \"drop-initial-before-adjust\"    : \"before-edge | text-before-edge | central | middle | hanging | mathematical | <percentage> | <length>\",\n    \"drop-initial-before-align\"     : \"caps-height | baseline | use-script | before-edge | text-before-edge | after-edge | text-after-edge | central | middle | ideographic | alphabetic | hanging | mathematical\",\n    \"drop-initial-size\"             : \"auto | line | <length> | <percentage>\",\n    \"drop-initial-value\"            : \"initial | <integer>\",\n\n    //E\n    \"elevation\"                     : \"<angle> | below | level | above | higher | lower | inherit\",\n    \"empty-cells\"                   : \"show | hide | inherit\",\n\n    //F\n    \"filter\"                        : 1,\n    \"fit\"                           : \"fill | hidden | meet | slice\",\n    \"fit-position\"                  : 1,\n    \"flex\"                          : \"<flex>\",\n    \"flex-basis\"                    : \"<width>\",\n    \"flex-direction\"                : \"row | row-reverse | column | column-reverse\",\n    \"flex-flow\"                     : \"<flex-direction> || <flex-wrap>\",\n    \"flex-grow\"                     : \"<number>\",\n    \"flex-shrink\"                   : \"<number>\",\n    \"flex-wrap\"                     : \"nowrap | wrap | wrap-reverse\",\n    \"-webkit-flex\"                  : \"<flex>\",\n    \"-webkit-flex-basis\"            : \"<width>\",\n    \"-webkit-flex-direction\"        : \"row | row-reverse | column | column-reverse\",\n    \"-webkit-flex-flow\"             : \"<flex-direction> || <flex-wrap>\",\n    \"-webkit-flex-grow\"             : \"<number>\",\n    \"-webkit-flex-shrink\"           : \"<number>\",\n    \"-webkit-flex-wrap\"             : \"nowrap | wrap | wrap-reverse\",\n    \"-ms-flex\"                      : \"<flex>\",\n    \"-ms-flex-align\"                : \"start | end | center | stretch | baseline\",\n    \"-ms-flex-direction\"            : \"row | row-reverse | column | column-reverse | inherit\",\n    \"-ms-flex-order\"                : \"<number>\",\n    \"-ms-flex-pack\"                 : \"start | end | center | justify\",\n    \"-ms-flex-wrap\"                 : \"nowrap | wrap | wrap-reverse\",\n    \"float\"                         : \"left | right | none | inherit\",\n    \"float-offset\"                  : 1,\n    \"font\"                          : 1,\n    \"font-family\"                   : 1,\n    \"font-size\"                     : \"<absolute-size> | <relative-size> | <length> | <percentage> | inherit\",\n    \"font-size-adjust\"              : \"<number> | none | inherit\",\n    \"font-stretch\"                  : \"normal | ultra-condensed | extra-condensed | condensed | semi-condensed | semi-expanded | expanded | extra-expanded | ultra-expanded | inherit\",\n    \"font-style\"                    : \"normal | italic | oblique | inherit\",\n    \"font-variant\"                  : \"normal | small-caps | inherit\",\n    \"font-weight\"                   : \"normal | bold | bolder | lighter | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | inherit\",\n\n    //G\n    \"grid-cell-stacking\"            : \"columns | rows | layer\",\n    \"grid-column\"                   : 1,\n    \"grid-columns\"                  : 1,\n    \"grid-column-align\"             : \"start | end | center | stretch\",\n    \"grid-column-sizing\"            : 1,\n    \"grid-column-span\"              : \"<integer>\",\n    \"grid-flow\"                     : \"none | rows | columns\",\n    \"grid-layer\"                    : \"<integer>\",\n    \"grid-row\"                      : 1,\n    \"grid-rows\"                     : 1,\n    \"grid-row-align\"                : \"start | end | center | stretch\",\n    \"grid-row-span\"                 : \"<integer>\",\n    \"grid-row-sizing\"               : 1,\n\n    //H\n    \"hanging-punctuation\"           : 1,\n    \"height\"                        : \"<margin-width> | <content-sizing> | inherit\",\n    \"hyphenate-after\"               : \"<integer> | auto\",\n    \"hyphenate-before\"              : \"<integer> | auto\",\n    \"hyphenate-character\"           : \"<string> | auto\",\n    \"hyphenate-lines\"               : \"no-limit | <integer>\",\n    \"hyphenate-resource\"            : 1,\n    \"hyphens\"                       : \"none | manual | auto\",\n\n    //I\n    \"icon\"                          : 1,\n    \"image-orientation\"             : \"angle | auto\",\n    \"image-rendering\"               : 1,\n    \"image-resolution\"              : 1,\n    \"inline-box-align\"              : \"initial | last | <integer>\",\n\n    //J\n    \"justify-content\"               : \"flex-start | flex-end | center | space-between | space-around\",\n    \"-webkit-justify-content\"       : \"flex-start | flex-end | center | space-between | space-around\",\n\n    //L\n    \"left\"                          : \"<margin-width> | inherit\",\n    \"letter-spacing\"                : \"<length> | normal | inherit\",\n    \"line-height\"                   : \"<number> | <length> | <percentage> | normal | inherit\",\n    \"line-break\"                    : \"auto | loose | normal | strict\",\n    \"line-stacking\"                 : 1,\n    \"line-stacking-ruby\"            : \"exclude-ruby | include-ruby\",\n    \"line-stacking-shift\"           : \"consider-shifts | disregard-shifts\",\n    \"line-stacking-strategy\"        : \"inline-line-height | block-line-height | max-height | grid-height\",\n    \"list-style\"                    : 1,\n    \"list-style-image\"              : \"<uri> | none | inherit\",\n    \"list-style-position\"           : \"inside | outside | inherit\",\n    \"list-style-type\"               : \"disc | circle | square | decimal | decimal-leading-zero | lower-roman | upper-roman | lower-greek | lower-latin | upper-latin | armenian | georgian | lower-alpha | upper-alpha | none | inherit\",\n\n    //M\n    \"margin\"                        : { multi: \"<margin-width> | inherit\", max: 4 },\n    \"margin-bottom\"                 : \"<margin-width> | inherit\",\n    \"margin-left\"                   : \"<margin-width> | inherit\",\n    \"margin-right\"                  : \"<margin-width> | inherit\",\n    \"margin-top\"                    : \"<margin-width> | inherit\",\n    \"mark\"                          : 1,\n    \"mark-after\"                    : 1,\n    \"mark-before\"                   : 1,\n    \"marks\"                         : 1,\n    \"marquee-direction\"             : 1,\n    \"marquee-play-count\"            : 1,\n    \"marquee-speed\"                 : 1,\n    \"marquee-style\"                 : 1,\n    \"max-height\"                    : \"<length> | <percentage> | <content-sizing> | none | inherit\",\n    \"max-width\"                     : \"<length> | <percentage> | <content-sizing> | none | inherit\",\n    \"min-height\"                    : \"<length> | <percentage> | <content-sizing> | contain-floats | -moz-contain-floats | -webkit-contain-floats | inherit\",\n    \"min-width\"                     : \"<length> | <percentage> | <content-sizing> | contain-floats | -moz-contain-floats | -webkit-contain-floats | inherit\",\n    \"move-to\"                       : 1,\n\n    //N\n    \"nav-down\"                      : 1,\n    \"nav-index\"                     : 1,\n    \"nav-left\"                      : 1,\n    \"nav-right\"                     : 1,\n    \"nav-up\"                        : 1,\n\n    //O\n    \"opacity\"                       : \"<number> | inherit\",\n    \"order\"                         : \"<integer>\",\n    \"-webkit-order\"                 : \"<integer>\",\n    \"orphans\"                       : \"<integer> | inherit\",\n    \"outline\"                       : 1,\n    \"outline-color\"                 : \"<color> | invert | inherit\",\n    \"outline-offset\"                : 1,\n    \"outline-style\"                 : \"<border-style> | inherit\",\n    \"outline-width\"                 : \"<border-width> | inherit\",\n    \"overflow\"                      : \"visible | hidden | scroll | auto | inherit\",\n    \"overflow-style\"                : 1,\n    \"overflow-wrap\"                 : \"normal | break-word\",\n    \"overflow-x\"                    : 1,\n    \"overflow-y\"                    : 1,\n\n    //P\n    \"padding\"                       : { multi: \"<padding-width> | inherit\", max: 4 },\n    \"padding-bottom\"                : \"<padding-width> | inherit\",\n    \"padding-left\"                  : \"<padding-width> | inherit\",\n    \"padding-right\"                 : \"<padding-width> | inherit\",\n    \"padding-top\"                   : \"<padding-width> | inherit\",\n    \"page\"                          : 1,\n    \"page-break-after\"              : \"auto | always | avoid | left | right | inherit\",\n    \"page-break-before\"             : \"auto | always | avoid | left | right | inherit\",\n    \"page-break-inside\"             : \"auto | avoid | inherit\",\n    \"page-policy\"                   : 1,\n    \"pause\"                         : 1,\n    \"pause-after\"                   : 1,\n    \"pause-before\"                  : 1,\n    \"perspective\"                   : 1,\n    \"perspective-origin\"            : 1,\n    \"phonemes\"                      : 1,\n    \"pitch\"                         : 1,\n    \"pitch-range\"                   : 1,\n    \"play-during\"                   : 1,\n    \"pointer-events\"                : \"auto | none | visiblePainted | visibleFill | visibleStroke | visible | painted | fill | stroke | all | inherit\",\n    \"position\"                      : \"static | relative | absolute | fixed | inherit\",\n    \"presentation-level\"            : 1,\n    \"punctuation-trim\"              : 1,\n\n    //Q\n    \"quotes\"                        : 1,\n\n    //R\n    \"rendering-intent\"              : 1,\n    \"resize\"                        : 1,\n    \"rest\"                          : 1,\n    \"rest-after\"                    : 1,\n    \"rest-before\"                   : 1,\n    \"richness\"                      : 1,\n    \"right\"                         : \"<margin-width> | inherit\",\n    \"rotation\"                      : 1,\n    \"rotation-point\"                : 1,\n    \"ruby-align\"                    : 1,\n    \"ruby-overhang\"                 : 1,\n    \"ruby-position\"                 : 1,\n    \"ruby-span\"                     : 1,\n\n    //S\n    \"size\"                          : 1,\n    \"speak\"                         : \"normal | none | spell-out | inherit\",\n    \"speak-header\"                  : \"once | always | inherit\",\n    \"speak-numeral\"                 : \"digits | continuous | inherit\",\n    \"speak-punctuation\"             : \"code | none | inherit\",\n    \"speech-rate\"                   : 1,\n    \"src\"                           : 1,\n    \"stress\"                        : 1,\n    \"string-set\"                    : 1,\n\n    \"table-layout\"                  : \"auto | fixed | inherit\",\n    \"tab-size\"                      : \"<integer> | <length>\",\n    \"target\"                        : 1,\n    \"target-name\"                   : 1,\n    \"target-new\"                    : 1,\n    \"target-position\"               : 1,\n    \"text-align\"                    : \"left | right | center | justify | inherit\" ,\n    \"text-align-last\"               : 1,\n    \"text-decoration\"               : 1,\n    \"text-emphasis\"                 : 1,\n    \"text-height\"                   : 1,\n    \"text-indent\"                   : \"<length> | <percentage> | inherit\",\n    \"text-justify\"                  : \"auto | none | inter-word | inter-ideograph | inter-cluster | distribute | kashida\",\n    \"text-outline\"                  : 1,\n    \"text-overflow\"                 : 1,\n    \"text-rendering\"                : \"auto | optimizeSpeed | optimizeLegibility | geometricPrecision | inherit\",\n    \"text-shadow\"                   : 1,\n    \"text-transform\"                : \"capitalize | uppercase | lowercase | none | inherit\",\n    \"text-wrap\"                     : \"normal | none | avoid\",\n    \"top\"                           : \"<margin-width> | inherit\",\n    \"-ms-touch-action\"              : \"auto | none | pan-x | pan-y\",\n    \"touch-action\"                  : \"auto | none | pan-x | pan-y\",\n    \"transform\"                     : 1,\n    \"transform-origin\"              : 1,\n    \"transform-style\"               : 1,\n    \"transition\"                    : 1,\n    \"transition-delay\"              : 1,\n    \"transition-duration\"           : 1,\n    \"transition-property\"           : 1,\n    \"transition-timing-function\"    : 1,\n\n    //U\n    \"unicode-bidi\"                  : \"normal | embed | isolate | bidi-override | isolate-override | plaintext | inherit\",\n    \"user-modify\"                   : \"read-only | read-write | write-only | inherit\",\n    \"user-select\"                   : \"none | text | toggle | element | elements | all | inherit\",\n\n    //V\n    \"vertical-align\"                : \"auto | use-script | baseline | sub | super | top | text-top | central | middle | bottom | text-bottom | <percentage> | <length>\",\n    \"visibility\"                    : \"visible | hidden | collapse | inherit\",\n    \"voice-balance\"                 : 1,\n    \"voice-duration\"                : 1,\n    \"voice-family\"                  : 1,\n    \"voice-pitch\"                   : 1,\n    \"voice-pitch-range\"             : 1,\n    \"voice-rate\"                    : 1,\n    \"voice-stress\"                  : 1,\n    \"voice-volume\"                  : 1,\n    \"volume\"                        : 1,\n\n    //W\n    \"white-space\"                   : \"normal | pre | nowrap | pre-wrap | pre-line | inherit | -pre-wrap | -o-pre-wrap | -moz-pre-wrap | -hp-pre-wrap\", //http://perishablepress.com/wrapping-content/\n    \"white-space-collapse\"          : 1,\n    \"widows\"                        : \"<integer> | inherit\",\n    \"width\"                         : \"<length> | <percentage> | <content-sizing> | auto | inherit\",\n    \"word-break\"                    : \"normal | keep-all | break-all\",\n    \"word-spacing\"                  : \"<length> | normal | inherit\",\n    \"word-wrap\"                     : \"normal | break-word\",\n    \"writing-mode\"                  : \"horizontal-tb | vertical-rl | vertical-lr | lr-tb | rl-tb | tb-rl | bt-rl | tb-lr | bt-lr | lr-bt | rl-bt | lr | rl | tb | inherit\",\n\n    //Z\n    \"z-index\"                       : \"<integer> | auto | inherit\",\n    \"zoom\"                          : \"<number> | <percentage> | normal\"\n};\n/*global SyntaxUnit, Parser*/\n/**\n * Represents a selector combinator (whitespace, +, >).\n * @namespace parserlib.css\n * @class PropertyName\n * @extends parserlib.util.SyntaxUnit\n * @constructor\n * @param {String} text The text representation of the unit.\n * @param {String} hack The type of IE hack applied (\"*\", \"_\", or null).\n * @param {int} line The line of text on which the unit resides.\n * @param {int} col The column of text on which the unit resides.\n */\nfunction PropertyName(text, hack, line, col){\n\n    SyntaxUnit.call(this, text, line, col, Parser.PROPERTY_NAME_TYPE);\n\n    /**\n     * The type of IE hack applied (\"*\", \"_\", or null).\n     * @type String\n     * @property hack\n     */\n    this.hack = hack;\n\n}\n\nPropertyName.prototype = new SyntaxUnit();\nPropertyName.prototype.constructor = PropertyName;\nPropertyName.prototype.toString = function(){\n    return (this.hack ? this.hack : \"\") + this.text;\n};\n/*global SyntaxUnit, Parser*/\n/**\n * Represents a single part of a CSS property value, meaning that it represents\n * just everything single part between \":\" and \";\". If there are multiple values\n * separated by commas, this type represents just one of the values.\n * @param {String[]} parts An array of value parts making up this value.\n * @param {int} line The line of text on which the unit resides.\n * @param {int} col The column of text on which the unit resides.\n * @namespace parserlib.css\n * @class PropertyValue\n * @extends parserlib.util.SyntaxUnit\n * @constructor\n */\nfunction PropertyValue(parts, line, col){\n\n    SyntaxUnit.call(this, parts.join(\" \"), line, col, Parser.PROPERTY_VALUE_TYPE);\n\n    /**\n     * The parts that make up the selector.\n     * @type Array\n     * @property parts\n     */\n    this.parts = parts;\n\n}\n\nPropertyValue.prototype = new SyntaxUnit();\nPropertyValue.prototype.constructor = PropertyValue;\n\n/*global SyntaxUnit, Parser*/\n/**\n * A utility class that allows for easy iteration over the various parts of a\n * property value.\n * @param {parserlib.css.PropertyValue} value The property value to iterate over.\n * @namespace parserlib.css\n * @class PropertyValueIterator\n * @constructor\n */\nfunction PropertyValueIterator(value){\n\n    /**\n     * Iterator value\n     * @type int\n     * @property _i\n     * @private\n     */\n    this._i = 0;\n\n    /**\n     * The parts that make up the value.\n     * @type Array\n     * @property _parts\n     * @private\n     */\n    this._parts = value.parts;\n\n    /**\n     * Keeps track of bookmarks along the way.\n     * @type Array\n     * @property _marks\n     * @private\n     */\n    this._marks = [];\n\n    /**\n     * Holds the original property value.\n     * @type parserlib.css.PropertyValue\n     * @property value\n     */\n    this.value = value;\n\n}\n\n/**\n * Returns the total number of parts in the value.\n * @return {int} The total number of parts in the value.\n * @method count\n */\nPropertyValueIterator.prototype.count = function(){\n    return this._parts.length;\n};\n\n/**\n * Indicates if the iterator is positioned at the first item.\n * @return {Boolean} True if positioned at first item, false if not.\n * @method isFirst\n */\nPropertyValueIterator.prototype.isFirst = function(){\n    return this._i === 0;\n};\n\n/**\n * Indicates if there are more parts of the property value.\n * @return {Boolean} True if there are more parts, false if not.\n * @method hasNext\n */\nPropertyValueIterator.prototype.hasNext = function(){\n    return (this._i < this._parts.length);\n};\n\n/**\n * Marks the current spot in the iteration so it can be restored to\n * later on.\n * @return {void}\n * @method mark\n */\nPropertyValueIterator.prototype.mark = function(){\n    this._marks.push(this._i);\n};\n\n/**\n * Returns the next part of the property value or null if there is no next\n * part. Does not move the internal counter forward.\n * @return {parserlib.css.PropertyValuePart} The next part of the property value or null if there is no next\n * part.\n * @method peek\n */\nPropertyValueIterator.prototype.peek = function(count){\n    return this.hasNext() ? this._parts[this._i + (count || 0)] : null;\n};\n\n/**\n * Returns the next part of the property value or null if there is no next\n * part.\n * @return {parserlib.css.PropertyValuePart} The next part of the property value or null if there is no next\n * part.\n * @method next\n */\nPropertyValueIterator.prototype.next = function(){\n    return this.hasNext() ? this._parts[this._i++] : null;\n};\n\n/**\n * Returns the previous part of the property value or null if there is no\n * previous part.\n * @return {parserlib.css.PropertyValuePart} The previous part of the\n * property value or null if there is no next part.\n * @method previous\n */\nPropertyValueIterator.prototype.previous = function(){\n    return this._i > 0 ? this._parts[--this._i] : null;\n};\n\n/**\n * Restores the last saved bookmark.\n * @return {void}\n * @method restore\n */\nPropertyValueIterator.prototype.restore = function(){\n    if (this._marks.length){\n        this._i = this._marks.pop();\n    }\n};\n\n/*global SyntaxUnit, Parser, Colors*/\n/**\n * Represents a single part of a CSS property value, meaning that it represents\n * just one part of the data between \":\" and \";\".\n * @param {String} text The text representation of the unit.\n * @param {int} line The line of text on which the unit resides.\n * @param {int} col The column of text on which the unit resides.\n * @namespace parserlib.css\n * @class PropertyValuePart\n * @extends parserlib.util.SyntaxUnit\n * @constructor\n */\nfunction PropertyValuePart(text, line, col){\n\n    SyntaxUnit.call(this, text, line, col, Parser.PROPERTY_VALUE_PART_TYPE);\n\n    /**\n     * Indicates the type of value unit.\n     * @type String\n     * @property type\n     */\n    this.type = \"unknown\";\n\n    //figure out what type of data it is\n\n    var temp;\n\n    //it is a measurement?\n    if (/^([+\\-]?[\\d\\.]+)([a-z]+)$/i.test(text)){  //dimension\n        this.type = \"dimension\";\n        this.value = +RegExp.$1;\n        this.units = RegExp.$2;\n\n        //try to narrow down\n        switch(this.units.toLowerCase()){\n\n            case \"em\":\n            case \"rem\":\n            case \"ex\":\n            case \"px\":\n            case \"cm\":\n            case \"mm\":\n            case \"in\":\n            case \"pt\":\n            case \"pc\":\n            case \"ch\":\n            case \"vh\":\n            case \"vw\":\n            case \"vmax\":\n            case \"vmin\":\n                this.type = \"length\";\n                break;\n\n            case \"deg\":\n            case \"rad\":\n            case \"grad\":\n                this.type = \"angle\";\n                break;\n\n            case \"ms\":\n            case \"s\":\n                this.type = \"time\";\n                break;\n\n            case \"hz\":\n            case \"khz\":\n                this.type = \"frequency\";\n                break;\n\n            case \"dpi\":\n            case \"dpcm\":\n                this.type = \"resolution\";\n                break;\n\n            //default\n\n        }\n\n    } else if (/^([+\\-]?[\\d\\.]+)%$/i.test(text)){  //percentage\n        this.type = \"percentage\";\n        this.value = +RegExp.$1;\n    } else if (/^([+\\-]?\\d+)$/i.test(text)){  //integer\n        this.type = \"integer\";\n        this.value = +RegExp.$1;\n    } else if (/^([+\\-]?[\\d\\.]+)$/i.test(text)){  //number\n        this.type = \"number\";\n        this.value = +RegExp.$1;\n\n    } else if (/^#([a-f0-9]{3,6})/i.test(text)){  //hexcolor\n        this.type = \"color\";\n        temp = RegExp.$1;\n        if (temp.length == 3){\n            this.red    = parseInt(temp.charAt(0)+temp.charAt(0),16);\n            this.green  = parseInt(temp.charAt(1)+temp.charAt(1),16);\n            this.blue   = parseInt(temp.charAt(2)+temp.charAt(2),16);\n        } else {\n            this.red    = parseInt(temp.substring(0,2),16);\n            this.green  = parseInt(temp.substring(2,4),16);\n            this.blue   = parseInt(temp.substring(4,6),16);\n        }\n    } else if (/^rgb\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)/i.test(text)){ //rgb() color with absolute numbers\n        this.type   = \"color\";\n        this.red    = +RegExp.$1;\n        this.green  = +RegExp.$2;\n        this.blue   = +RegExp.$3;\n    } else if (/^rgb\\(\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*\\)/i.test(text)){ //rgb() color with percentages\n        this.type   = \"color\";\n        this.red    = +RegExp.$1 * 255 / 100;\n        this.green  = +RegExp.$2 * 255 / 100;\n        this.blue   = +RegExp.$3 * 255 / 100;\n    } else if (/^rgba\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*([\\d\\.]+)\\s*\\)/i.test(text)){ //rgba() color with absolute numbers\n        this.type   = \"color\";\n        this.red    = +RegExp.$1;\n        this.green  = +RegExp.$2;\n        this.blue   = +RegExp.$3;\n        this.alpha  = +RegExp.$4;\n    } else if (/^rgba\\(\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*,\\s*([\\d\\.]+)\\s*\\)/i.test(text)){ //rgba() color with percentages\n        this.type   = \"color\";\n        this.red    = +RegExp.$1 * 255 / 100;\n        this.green  = +RegExp.$2 * 255 / 100;\n        this.blue   = +RegExp.$3 * 255 / 100;\n        this.alpha  = +RegExp.$4;\n    } else if (/^hsl\\(\\s*(\\d+)\\s*,\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*\\)/i.test(text)){ //hsl()\n        this.type   = \"color\";\n        this.hue    = +RegExp.$1;\n        this.saturation = +RegExp.$2 / 100;\n        this.lightness  = +RegExp.$3 / 100;\n    } else if (/^hsla\\(\\s*(\\d+)\\s*,\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*,\\s*([\\d\\.]+)\\s*\\)/i.test(text)){ //hsla() color with percentages\n        this.type   = \"color\";\n        this.hue    = +RegExp.$1;\n        this.saturation = +RegExp.$2 / 100;\n        this.lightness  = +RegExp.$3 / 100;\n        this.alpha  = +RegExp.$4;\n    } else if (/^url\\([\"']?([^\\)\"']+)[\"']?\\)/i.test(text)){ //URI\n        this.type   = \"uri\";\n        this.uri    = RegExp.$1;\n    } else if (/^([^\\(]+)\\(/i.test(text)){\n        this.type   = \"function\";\n        this.name   = RegExp.$1;\n        this.value  = text;\n    } else if (/^[\"'][^\"']*[\"']/.test(text)){    //string\n        this.type   = \"string\";\n        this.value  = eval(text);\n    } else if (Colors[text.toLowerCase()]){  //named color\n        this.type   = \"color\";\n        temp        = Colors[text.toLowerCase()].substring(1);\n        this.red    = parseInt(temp.substring(0,2),16);\n        this.green  = parseInt(temp.substring(2,4),16);\n        this.blue   = parseInt(temp.substring(4,6),16);\n    } else if (/^[\\,\\/]$/.test(text)){\n        this.type   = \"operator\";\n        this.value  = text;\n    } else if (/^[a-z\\-_\\u0080-\\uFFFF][a-z0-9\\-_\\u0080-\\uFFFF]*$/i.test(text)){\n        this.type   = \"identifier\";\n        this.value  = text;\n    }\n\n}\n\nPropertyValuePart.prototype = new SyntaxUnit();\nPropertyValuePart.prototype.constructor = PropertyValuePart;\n\n/**\n * Create a new syntax unit based solely on the given token.\n * Convenience method for creating a new syntax unit when\n * it represents a single token instead of multiple.\n * @param {Object} token The token object to represent.\n * @return {parserlib.css.PropertyValuePart} The object representing the token.\n * @static\n * @method fromToken\n */\nPropertyValuePart.fromToken = function(token){\n    return new PropertyValuePart(token.value, token.startLine, token.startCol);\n};\nvar Pseudos = {\n    \":first-letter\": 1,\n    \":first-line\":   1,\n    \":before\":       1,\n    \":after\":        1\n};\n\nPseudos.ELEMENT = 1;\nPseudos.CLASS = 2;\n\nPseudos.isElement = function(pseudo){\n    return pseudo.indexOf(\"::\") === 0 || Pseudos[pseudo.toLowerCase()] == Pseudos.ELEMENT;\n};\n/*global SyntaxUnit, Parser, Specificity*/\n/**\n * Represents an entire single selector, including all parts but not\n * including multiple selectors (those separated by commas).\n * @namespace parserlib.css\n * @class Selector\n * @extends parserlib.util.SyntaxUnit\n * @constructor\n * @param {Array} parts Array of selectors parts making up this selector.\n * @param {int} line The line of text on which the unit resides.\n * @param {int} col The column of text on which the unit resides.\n */\nfunction Selector(parts, line, col){\n\n    SyntaxUnit.call(this, parts.join(\" \"), line, col, Parser.SELECTOR_TYPE);\n\n    /**\n     * The parts that make up the selector.\n     * @type Array\n     * @property parts\n     */\n    this.parts = parts;\n\n    /**\n     * The specificity of the selector.\n     * @type parserlib.css.Specificity\n     * @property specificity\n     */\n    this.specificity = Specificity.calculate(this);\n\n}\n\nSelector.prototype = new SyntaxUnit();\nSelector.prototype.constructor = Selector;\n\n/*global SyntaxUnit, Parser*/\n/**\n * Represents a single part of a selector string, meaning a single set of\n * element name and modifiers. This does not include combinators such as\n * spaces, +, >, etc.\n * @namespace parserlib.css\n * @class SelectorPart\n * @extends parserlib.util.SyntaxUnit\n * @constructor\n * @param {String} elementName The element name in the selector or null\n *      if there is no element name.\n * @param {Array} modifiers Array of individual modifiers for the element.\n *      May be empty if there are none.\n * @param {String} text The text representation of the unit.\n * @param {int} line The line of text on which the unit resides.\n * @param {int} col The column of text on which the unit resides.\n */\nfunction SelectorPart(elementName, modifiers, text, line, col){\n\n    SyntaxUnit.call(this, text, line, col, Parser.SELECTOR_PART_TYPE);\n\n    /**\n     * The tag name of the element to which this part\n     * of the selector affects.\n     * @type String\n     * @property elementName\n     */\n    this.elementName = elementName;\n\n    /**\n     * The parts that come after the element name, such as class names, IDs,\n     * pseudo classes/elements, etc.\n     * @type Array\n     * @property modifiers\n     */\n    this.modifiers = modifiers;\n\n}\n\nSelectorPart.prototype = new SyntaxUnit();\nSelectorPart.prototype.constructor = SelectorPart;\n\n/*global SyntaxUnit, Parser*/\n/**\n * Represents a selector modifier string, meaning a class name, element name,\n * element ID, pseudo rule, etc.\n * @namespace parserlib.css\n * @class SelectorSubPart\n * @extends parserlib.util.SyntaxUnit\n * @constructor\n * @param {String} text The text representation of the unit.\n * @param {String} type The type of selector modifier.\n * @param {int} line The line of text on which the unit resides.\n * @param {int} col The column of text on which the unit resides.\n */\nfunction SelectorSubPart(text, type, line, col){\n\n    SyntaxUnit.call(this, text, line, col, Parser.SELECTOR_SUB_PART_TYPE);\n\n    /**\n     * The type of modifier.\n     * @type String\n     * @property type\n     */\n    this.type = type;\n\n    /**\n     * Some subparts have arguments, this represents them.\n     * @type Array\n     * @property args\n     */\n    this.args = [];\n\n}\n\nSelectorSubPart.prototype = new SyntaxUnit();\nSelectorSubPart.prototype.constructor = SelectorSubPart;\n\n/*global Pseudos, SelectorPart*/\n/**\n * Represents a selector's specificity.\n * @namespace parserlib.css\n * @class Specificity\n * @constructor\n * @param {int} a Should be 1 for inline styles, zero for stylesheet styles\n * @param {int} b Number of ID selectors\n * @param {int} c Number of classes and pseudo classes\n * @param {int} d Number of element names and pseudo elements\n */\nfunction Specificity(a, b, c, d){\n    this.a = a;\n    this.b = b;\n    this.c = c;\n    this.d = d;\n}\n\nSpecificity.prototype = {\n    constructor: Specificity,\n\n    /**\n     * Compare this specificity to another.\n     * @param {Specificity} other The other specificity to compare to.\n     * @return {int} -1 if the other specificity is larger, 1 if smaller, 0 if equal.\n     * @method compare\n     */\n    compare: function(other){\n        var comps = [\"a\", \"b\", \"c\", \"d\"],\n            i, len;\n\n        for (i=0, len=comps.length; i < len; i++){\n            if (this[comps[i]] < other[comps[i]]){\n                return -1;\n            } else if (this[comps[i]] > other[comps[i]]){\n                return 1;\n            }\n        }\n\n        return 0;\n    },\n\n    /**\n     * Creates a numeric value for the specificity.\n     * @return {int} The numeric value for the specificity.\n     * @method valueOf\n     */\n    valueOf: function(){\n        return (this.a * 1000) + (this.b * 100) + (this.c * 10) + this.d;\n    },\n\n    /**\n     * Returns a string representation for specificity.\n     * @return {String} The string representation of specificity.\n     * @method toString\n     */\n    toString: function(){\n        return this.a + \",\" + this.b + \",\" + this.c + \",\" + this.d;\n    }\n\n};\n\n/**\n * Calculates the specificity of the given selector.\n * @param {parserlib.css.Selector} The selector to calculate specificity for.\n * @return {parserlib.css.Specificity} The specificity of the selector.\n * @static\n * @method calculate\n */\nSpecificity.calculate = function(selector){\n\n    var i, len,\n        part,\n        b=0, c=0, d=0;\n\n    function updateValues(part){\n\n        var i, j, len, num,\n            elementName = part.elementName ? part.elementName.text : \"\",\n            modifier;\n\n        if (elementName && elementName.charAt(elementName.length-1) != \"*\") {\n            d++;\n        }\n\n        for (i=0, len=part.modifiers.length; i < len; i++){\n            modifier = part.modifiers[i];\n            switch(modifier.type){\n                case \"class\":\n                case \"attribute\":\n                    c++;\n                    break;\n\n                case \"id\":\n                    b++;\n                    break;\n\n                case \"pseudo\":\n                    if (Pseudos.isElement(modifier.text)){\n                        d++;\n                    } else {\n                        c++;\n                    }\n                    break;\n\n                case \"not\":\n                    for (j=0, num=modifier.args.length; j < num; j++){\n                        updateValues(modifier.args[j]);\n                    }\n            }\n         }\n    }\n\n    for (i=0, len=selector.parts.length; i < len; i++){\n        part = selector.parts[i];\n\n        if (part instanceof SelectorPart){\n            updateValues(part);\n        }\n    }\n\n    return new Specificity(0, b, c, d);\n};\n/*global Tokens, TokenStreamBase*/\n\nvar h = /^[0-9a-fA-F]$/,\n    nonascii = /^[\\u0080-\\uFFFF]$/,\n    nl = /\\n|\\r\\n|\\r|\\f/;\n\n//-----------------------------------------------------------------------------\n// Helper functions\n//-----------------------------------------------------------------------------\n\n\nfunction isHexDigit(c){\n    return c !== null && h.test(c);\n}\n\nfunction isDigit(c){\n    return c !== null && /\\d/.test(c);\n}\n\nfunction isWhitespace(c){\n    return c !== null && /\\s/.test(c);\n}\n\nfunction isNewLine(c){\n    return c !== null && nl.test(c);\n}\n\nfunction isNameStart(c){\n    return c !== null && (/[a-z_\\u0080-\\uFFFF\\\\]/i.test(c));\n}\n\nfunction isNameChar(c){\n    return c !== null && (isNameStart(c) || /[0-9\\-\\\\]/.test(c));\n}\n\nfunction isIdentStart(c){\n    return c !== null && (isNameStart(c) || /\\-\\\\/.test(c));\n}\n\nfunction mix(receiver, supplier){\n    for (var prop in supplier){\n        if (supplier.hasOwnProperty(prop)){\n            receiver[prop] = supplier[prop];\n        }\n    }\n    return receiver;\n}\n\n//-----------------------------------------------------------------------------\n// CSS Token Stream\n//-----------------------------------------------------------------------------\n\n\n/**\n * A token stream that produces CSS tokens.\n * @param {String|Reader} input The source of text to tokenize.\n * @constructor\n * @class TokenStream\n * @namespace parserlib.css\n */\nfunction TokenStream(input){\n    TokenStreamBase.call(this, input, Tokens);\n}\n\nTokenStream.prototype = mix(new TokenStreamBase(), {\n\n    /**\n     * Overrides the TokenStreamBase method of the same name\n     * to produce CSS tokens.\n     * @param {variant} channel The name of the channel to use\n     *      for the next token.\n     * @return {Object} A token object representing the next token.\n     * @method _getToken\n     * @private\n     */\n    _getToken: function(channel){\n\n        var c,\n            reader = this._reader,\n            token   = null,\n            startLine   = reader.getLine(),\n            startCol    = reader.getCol();\n\n        c = reader.read();\n\n\n        while(c){\n            switch(c){\n\n                /*\n                 * Potential tokens:\n                 * - COMMENT\n                 * - SLASH\n                 * - CHAR\n                 */\n                case \"/\":\n\n                    if(reader.peek() == \"*\"){\n                        token = this.commentToken(c, startLine, startCol);\n                    } else {\n                        token = this.charToken(c, startLine, startCol);\n                    }\n                    break;\n\n                /*\n                 * Potential tokens:\n                 * - DASHMATCH\n                 * - INCLUDES\n                 * - PREFIXMATCH\n                 * - SUFFIXMATCH\n                 * - SUBSTRINGMATCH\n                 * - CHAR\n                 */\n                case \"|\":\n                case \"~\":\n                case \"^\":\n                case \"$\":\n                case \"*\":\n                    if(reader.peek() == \"=\"){\n                        token = this.comparisonToken(c, startLine, startCol);\n                    } else {\n                        token = this.charToken(c, startLine, startCol);\n                    }\n                    break;\n\n                /*\n                 * Potential tokens:\n                 * - STRING\n                 * - INVALID\n                 */\n                case \"\\\"\":\n                case \"'\":\n                    token = this.stringToken(c, startLine, startCol);\n                    break;\n\n                /*\n                 * Potential tokens:\n                 * - HASH\n                 * - CHAR\n                 */\n                case \"#\":\n                    if (isNameChar(reader.peek())){\n                        token = this.hashToken(c, startLine, startCol);\n                    } else {\n                        token = this.charToken(c, startLine, startCol);\n                    }\n                    break;\n\n                /*\n                 * Potential tokens:\n                 * - DOT\n                 * - NUMBER\n                 * - DIMENSION\n                 * - PERCENTAGE\n                 */\n                case \".\":\n                    if (isDigit(reader.peek())){\n                        token = this.numberToken(c, startLine, startCol);\n                    } else {\n                        token = this.charToken(c, startLine, startCol);\n                    }\n                    break;\n\n                /*\n                 * Potential tokens:\n                 * - CDC\n                 * - MINUS\n                 * - NUMBER\n                 * - DIMENSION\n                 * - PERCENTAGE\n                 */\n                case \"-\":\n                    if (reader.peek() == \"-\"){  //could be closing HTML-style comment\n                        token = this.htmlCommentEndToken(c, startLine, startCol);\n                    } else if (isNameStart(reader.peek())){\n                        token = this.identOrFunctionToken(c, startLine, startCol);\n                    } else {\n                        token = this.charToken(c, startLine, startCol);\n                    }\n                    break;\n\n                /*\n                 * Potential tokens:\n                 * - IMPORTANT_SYM\n                 * - CHAR\n                 */\n                case \"!\":\n                    token = this.importantToken(c, startLine, startCol);\n                    break;\n\n                /*\n                 * Any at-keyword or CHAR\n                 */\n                case \"@\":\n                    token = this.atRuleToken(c, startLine, startCol);\n                    break;\n\n                /*\n                 * Potential tokens:\n                 * - NOT\n                 * - CHAR\n                 */\n                case \":\":\n                    token = this.notToken(c, startLine, startCol);\n                    break;\n\n                /*\n                 * Potential tokens:\n                 * - CDO\n                 * - CHAR\n                 */\n                case \"<\":\n                    token = this.htmlCommentStartToken(c, startLine, startCol);\n                    break;\n\n                /*\n                 * Potential tokens:\n                 * - UNICODE_RANGE\n                 * - URL\n                 * - CHAR\n                 */\n                case \"U\":\n                case \"u\":\n                    if (reader.peek() == \"+\"){\n                        token = this.unicodeRangeToken(c, startLine, startCol);\n                        break;\n                    }\n                    /* falls through */\n                default:\n\n                    /*\n                     * Potential tokens:\n                     * - NUMBER\n                     * - DIMENSION\n                     * - LENGTH\n                     * - FREQ\n                     * - TIME\n                     * - EMS\n                     * - EXS\n                     * - ANGLE\n                     */\n                    if (isDigit(c)){\n                        token = this.numberToken(c, startLine, startCol);\n                    } else\n\n                    /*\n                     * Potential tokens:\n                     * - S\n                     */\n                    if (isWhitespace(c)){\n                        token = this.whitespaceToken(c, startLine, startCol);\n                    } else\n\n                    /*\n                     * Potential tokens:\n                     * - IDENT\n                     */\n                    if (isIdentStart(c)){\n                        token = this.identOrFunctionToken(c, startLine, startCol);\n                    } else\n\n                    /*\n                     * Potential tokens:\n                     * - CHAR\n                     * - PLUS\n                     */\n                    {\n                        token = this.charToken(c, startLine, startCol);\n                    }\n\n\n\n\n\n\n            }\n\n            //make sure this token is wanted\n            //TODO: check channel\n            break;\n        }\n\n        if (!token && c === null){\n            token = this.createToken(Tokens.EOF,null,startLine,startCol);\n        }\n\n        return token;\n    },\n\n    //-------------------------------------------------------------------------\n    // Methods to create tokens\n    //-------------------------------------------------------------------------\n\n    /**\n     * Produces a token based on available data and the current\n     * reader position information. This method is called by other\n     * private methods to create tokens and is never called directly.\n     * @param {int} tt The token type.\n     * @param {String} value The text value of the token.\n     * @param {int} startLine The beginning line for the character.\n     * @param {int} startCol The beginning column for the character.\n     * @param {Object} options (Optional) Specifies a channel property\n     *      to indicate that a different channel should be scanned\n     *      and/or a hide property indicating that the token should\n     *      be hidden.\n     * @return {Object} A token object.\n     * @method createToken\n     */\n    createToken: function(tt, value, startLine, startCol, options){\n        var reader = this._reader;\n        options = options || {};\n\n        return {\n            value:      value,\n            type:       tt,\n            channel:    options.channel,\n            endChar:    options.endChar,\n            hide:       options.hide || false,\n            startLine:  startLine,\n            startCol:   startCol,\n            endLine:    reader.getLine(),\n            endCol:     reader.getCol()\n        };\n    },\n\n    //-------------------------------------------------------------------------\n    // Methods to create specific tokens\n    //-------------------------------------------------------------------------\n\n    /**\n     * Produces a token for any at-rule. If the at-rule is unknown, then\n     * the token is for a single \"@\" character.\n     * @param {String} first The first character for the token.\n     * @param {int} startLine The beginning line for the character.\n     * @param {int} startCol The beginning column for the character.\n     * @return {Object} A token object.\n     * @method atRuleToken\n     */\n    atRuleToken: function(first, startLine, startCol){\n        var rule    = first,\n            reader  = this._reader,\n            tt      = Tokens.CHAR,\n            valid   = false,\n            ident,\n            c;\n\n        /*\n         * First, mark where we are. There are only four @ rules,\n         * so anything else is really just an invalid token.\n         * Basically, if this doesn't match one of the known @\n         * rules, just return '@' as an unknown token and allow\n         * parsing to continue after that point.\n         */\n        reader.mark();\n\n        //try to find the at-keyword\n        ident = this.readName();\n        rule = first + ident;\n        tt = Tokens.type(rule.toLowerCase());\n\n        //if it's not valid, use the first character only and reset the reader\n        if (tt == Tokens.CHAR || tt == Tokens.UNKNOWN){\n            if (rule.length > 1){\n                tt = Tokens.UNKNOWN_SYM;\n            } else {\n                tt = Tokens.CHAR;\n                rule = first;\n                reader.reset();\n            }\n        }\n\n        return this.createToken(tt, rule, startLine, startCol);\n    },\n\n    /**\n     * Produces a character token based on the given character\n     * and location in the stream. If there's a special (non-standard)\n     * token name, this is used; otherwise CHAR is used.\n     * @param {String} c The character for the token.\n     * @param {int} startLine The beginning line for the character.\n     * @param {int} startCol The beginning column for the character.\n     * @return {Object} A token object.\n     * @method charToken\n     */\n    charToken: function(c, startLine, startCol){\n        var tt = Tokens.type(c);\n        var opts = {};\n\n        if (tt == -1){\n            tt = Tokens.CHAR;\n        } else {\n            opts.endChar = Tokens[tt].endChar;\n        }\n\n        return this.createToken(tt, c, startLine, startCol, opts);\n    },\n\n    /**\n     * Produces a character token based on the given character\n     * and location in the stream. If there's a special (non-standard)\n     * token name, this is used; otherwise CHAR is used.\n     * @param {String} first The first character for the token.\n     * @param {int} startLine The beginning line for the character.\n     * @param {int} startCol The beginning column for the character.\n     * @return {Object} A token object.\n     * @method commentToken\n     */\n    commentToken: function(first, startLine, startCol){\n        var reader  = this._reader,\n            comment = this.readComment(first);\n\n        return this.createToken(Tokens.COMMENT, comment, startLine, startCol);\n    },\n\n    /**\n     * Produces a comparison token based on the given character\n     * and location in the stream. The next character must be\n     * read and is already known to be an equals sign.\n     * @param {String} c The character for the token.\n     * @param {int} startLine The beginning line for the character.\n     * @param {int} startCol The beginning column for the character.\n     * @return {Object} A token object.\n     * @method comparisonToken\n     */\n    comparisonToken: function(c, startLine, startCol){\n        var reader  = this._reader,\n            comparison  = c + reader.read(),\n            tt      = Tokens.type(comparison) || Tokens.CHAR;\n\n        return this.createToken(tt, comparison, startLine, startCol);\n    },\n\n    /**\n     * Produces a hash token based on the specified information. The\n     * first character provided is the pound sign (#) and then this\n     * method reads a name afterward.\n     * @param {String} first The first character (#) in the hash name.\n     * @param {int} startLine The beginning line for the character.\n     * @param {int} startCol The beginning column for the character.\n     * @return {Object} A token object.\n     * @method hashToken\n     */\n    hashToken: function(first, startLine, startCol){\n        var reader  = this._reader,\n            name    = this.readName(first);\n\n        return this.createToken(Tokens.HASH, name, startLine, startCol);\n    },\n\n    /**\n     * Produces a CDO or CHAR token based on the specified information. The\n     * first character is provided and the rest is read by the function to determine\n     * the correct token to create.\n     * @param {String} first The first character in the token.\n     * @param {int} startLine The beginning line for the character.\n     * @param {int} startCol The beginning column for the character.\n     * @return {Object} A token object.\n     * @method htmlCommentStartToken\n     */\n    htmlCommentStartToken: function(first, startLine, startCol){\n        var reader      = this._reader,\n            text        = first;\n\n        reader.mark();\n        text += reader.readCount(3);\n\n        if (text == \"<!--\"){\n            return this.createToken(Tokens.CDO, text, startLine, startCol);\n        } else {\n            reader.reset();\n            return this.charToken(first, startLine, startCol);\n        }\n    },\n\n    /**\n     * Produces a CDC or CHAR token based on the specified information. The\n     * first character is provided and the rest is read by the function to determine\n     * the correct token to create.\n     * @param {String} first The first character in the token.\n     * @param {int} startLine The beginning line for the character.\n     * @param {int} startCol The beginning column for the character.\n     * @return {Object} A token object.\n     * @method htmlCommentEndToken\n     */\n    htmlCommentEndToken: function(first, startLine, startCol){\n        var reader      = this._reader,\n            text        = first;\n\n        reader.mark();\n        text += reader.readCount(2);\n\n        if (text == \"-->\"){\n            return this.createToken(Tokens.CDC, text, startLine, startCol);\n        } else {\n            reader.reset();\n            return this.charToken(first, startLine, startCol);\n        }\n    },\n\n    /**\n     * Produces an IDENT or FUNCTION token based on the specified information. The\n     * first character is provided and the rest is read by the function to determine\n     * the correct token to create.\n     * @param {String} first The first character in the identifier.\n     * @param {int} startLine The beginning line for the character.\n     * @param {int} startCol The beginning column for the character.\n     * @return {Object} A token object.\n     * @method identOrFunctionToken\n     */\n    identOrFunctionToken: function(first, startLine, startCol){\n        var reader  = this._reader,\n            ident   = this.readName(first),\n            tt      = Tokens.IDENT;\n\n        //if there's a left paren immediately after, it's a URI or function\n        if (reader.peek() == \"(\"){\n            ident += reader.read();\n            if (ident.toLowerCase() == \"url(\"){\n                tt = Tokens.URI;\n                ident = this.readURI(ident);\n\n                //didn't find a valid URL or there's no closing paren\n                if (ident.toLowerCase() == \"url(\"){\n                    tt = Tokens.FUNCTION;\n                }\n            } else {\n                tt = Tokens.FUNCTION;\n            }\n        } else if (reader.peek() == \":\"){  //might be an IE function\n\n            //IE-specific functions always being with progid:\n            if (ident.toLowerCase() == \"progid\"){\n                ident += reader.readTo(\"(\");\n                tt = Tokens.IE_FUNCTION;\n            }\n        }\n\n        return this.createToken(tt, ident, startLine, startCol);\n    },\n\n    /**\n     * Produces an IMPORTANT_SYM or CHAR token based on the specified information. The\n     * first character is provided and the rest is read by the function to determine\n     * the correct token to create.\n     * @param {String} first The first character in the token.\n     * @param {int} startLine The beginning line for the character.\n     * @param {int} startCol The beginning column for the character.\n     * @return {Object} A token object.\n     * @method importantToken\n     */\n    importantToken: function(first, startLine, startCol){\n        var reader      = this._reader,\n            important   = first,\n            tt          = Tokens.CHAR,\n            temp,\n            c;\n\n        reader.mark();\n        c = reader.read();\n\n        while(c){\n\n            //there can be a comment in here\n            if (c == \"/\"){\n\n                //if the next character isn't a star, then this isn't a valid !important token\n                if (reader.peek() != \"*\"){\n                    break;\n                } else {\n                    temp = this.readComment(c);\n                    if (temp === \"\"){    //broken!\n                        break;\n                    }\n                }\n            } else if (isWhitespace(c)){\n                important += c + this.readWhitespace();\n            } else if (/i/i.test(c)){\n                temp = reader.readCount(8);\n                if (/mportant/i.test(temp)){\n                    important += c + temp;\n                    tt = Tokens.IMPORTANT_SYM;\n\n                }\n                break;  //we're done\n            } else {\n                break;\n            }\n\n            c = reader.read();\n        }\n\n        if (tt == Tokens.CHAR){\n            reader.reset();\n            return this.charToken(first, startLine, startCol);\n        } else {\n            return this.createToken(tt, important, startLine, startCol);\n        }\n\n\n    },\n\n    /**\n     * Produces a NOT or CHAR token based on the specified information. The\n     * first character is provided and the rest is read by the function to determine\n     * the correct token to create.\n     * @param {String} first The first character in the token.\n     * @param {int} startLine The beginning line for the character.\n     * @param {int} startCol The beginning column for the character.\n     * @return {Object} A token object.\n     * @method notToken\n     */\n    notToken: function(first, startLine, startCol){\n        var reader      = this._reader,\n            text        = first;\n\n        reader.mark();\n        text += reader.readCount(4);\n\n        if (text.toLowerCase() == \":not(\"){\n            return this.createToken(Tokens.NOT, text, startLine, startCol);\n        } else {\n            reader.reset();\n            return this.charToken(first, startLine, startCol);\n        }\n    },\n\n    /**\n     * Produces a number token based on the given character\n     * and location in the stream. This may return a token of\n     * NUMBER, EMS, EXS, LENGTH, ANGLE, TIME, FREQ, DIMENSION,\n     * or PERCENTAGE.\n     * @param {String} first The first character for the token.\n     * @param {int} startLine The beginning line for the character.\n     * @param {int} startCol The beginning column for the character.\n     * @return {Object} A token object.\n     * @method numberToken\n     */\n    numberToken: function(first, startLine, startCol){\n        var reader  = this._reader,\n            value   = this.readNumber(first),\n            ident,\n            tt      = Tokens.NUMBER,\n            c       = reader.peek();\n\n        if (isIdentStart(c)){\n            ident = this.readName(reader.read());\n            value += ident;\n\n            if (/^em$|^ex$|^px$|^gd$|^rem$|^vw$|^vh$|^vmax$|^vmin$|^ch$|^cm$|^mm$|^in$|^pt$|^pc$/i.test(ident)){\n                tt = Tokens.LENGTH;\n            } else if (/^deg|^rad$|^grad$/i.test(ident)){\n                tt = Tokens.ANGLE;\n            } else if (/^ms$|^s$/i.test(ident)){\n                tt = Tokens.TIME;\n            } else if (/^hz$|^khz$/i.test(ident)){\n                tt = Tokens.FREQ;\n            } else if (/^dpi$|^dpcm$/i.test(ident)){\n                tt = Tokens.RESOLUTION;\n            } else {\n                tt = Tokens.DIMENSION;\n            }\n\n        } else if (c == \"%\"){\n            value += reader.read();\n            tt = Tokens.PERCENTAGE;\n        }\n\n        return this.createToken(tt, value, startLine, startCol);\n    },\n\n    /**\n     * Produces a string token based on the given character\n     * and location in the stream. Since strings may be indicated\n     * by single or double quotes, a failure to match starting\n     * and ending quotes results in an INVALID token being generated.\n     * The first character in the string is passed in and then\n     * the rest are read up to and including the final quotation mark.\n     * @param {String} first The first character in the string.\n     * @param {int} startLine The beginning line for the character.\n     * @param {int} startCol The beginning column for the character.\n     * @return {Object} A token object.\n     * @method stringToken\n     */\n    stringToken: function(first, startLine, startCol){\n        var delim   = first,\n            string  = first,\n            reader  = this._reader,\n            prev    = first,\n            tt      = Tokens.STRING,\n            c       = reader.read();\n\n        while(c){\n            string += c;\n\n            //if the delimiter is found with an escapement, we're done.\n            if (c == delim && prev != \"\\\\\"){\n                break;\n            }\n\n            //if there's a newline without an escapement, it's an invalid string\n            if (isNewLine(reader.peek()) && c != \"\\\\\"){\n                tt = Tokens.INVALID;\n                break;\n            }\n\n            //save previous and get next\n            prev = c;\n            c = reader.read();\n        }\n\n        //if c is null, that means we're out of input and the string was never closed\n        if (c === null){\n            tt = Tokens.INVALID;\n        }\n\n        return this.createToken(tt, string, startLine, startCol);\n    },\n\n    unicodeRangeToken: function(first, startLine, startCol){\n        var reader  = this._reader,\n            value   = first,\n            temp,\n            tt      = Tokens.CHAR;\n\n        //then it should be a unicode range\n        if (reader.peek() == \"+\"){\n            reader.mark();\n            value += reader.read();\n            value += this.readUnicodeRangePart(true);\n\n            //ensure there's an actual unicode range here\n            if (value.length == 2){\n                reader.reset();\n            } else {\n\n                tt = Tokens.UNICODE_RANGE;\n\n                //if there's a ? in the first part, there can't be a second part\n                if (value.indexOf(\"?\") == -1){\n\n                    if (reader.peek() == \"-\"){\n                        reader.mark();\n                        temp = reader.read();\n                        temp += this.readUnicodeRangePart(false);\n\n                        //if there's not another value, back up and just take the first\n                        if (temp.length == 1){\n                            reader.reset();\n                        } else {\n                            value += temp;\n                        }\n                    }\n\n                }\n            }\n        }\n\n        return this.createToken(tt, value, startLine, startCol);\n    },\n\n    /**\n     * Produces a S token based on the specified information. Since whitespace\n     * may have multiple characters, this consumes all whitespace characters\n     * into a single token.\n     * @param {String} first The first character in the token.\n     * @param {int} startLine The beginning line for the character.\n     * @param {int} startCol The beginning column for the character.\n     * @return {Object} A token object.\n     * @method whitespaceToken\n     */\n    whitespaceToken: function(first, startLine, startCol){\n        var reader  = this._reader,\n            value   = first + this.readWhitespace();\n        return this.createToken(Tokens.S, value, startLine, startCol);\n    },\n\n\n\n\n    //-------------------------------------------------------------------------\n    // Methods to read values from the string stream\n    //-------------------------------------------------------------------------\n\n    readUnicodeRangePart: function(allowQuestionMark){\n        var reader  = this._reader,\n            part = \"\",\n            c       = reader.peek();\n\n        //first read hex digits\n        while(isHexDigit(c) && part.length < 6){\n            reader.read();\n            part += c;\n            c = reader.peek();\n        }\n\n        //then read question marks if allowed\n        if (allowQuestionMark){\n            while(c == \"?\" && part.length < 6){\n                reader.read();\n                part += c;\n                c = reader.peek();\n            }\n        }\n\n        //there can't be any other characters after this point\n\n        return part;\n    },\n\n    readWhitespace: function(){\n        var reader  = this._reader,\n            whitespace = \"\",\n            c       = reader.peek();\n\n        while(isWhitespace(c)){\n            reader.read();\n            whitespace += c;\n            c = reader.peek();\n        }\n\n        return whitespace;\n    },\n    readNumber: function(first){\n        var reader  = this._reader,\n            number  = first,\n            hasDot  = (first == \".\"),\n            c       = reader.peek();\n\n\n        while(c){\n            if (isDigit(c)){\n                number += reader.read();\n            } else if (c == \".\"){\n                if (hasDot){\n                    break;\n                } else {\n                    hasDot = true;\n                    number += reader.read();\n                }\n            } else {\n                break;\n            }\n\n            c = reader.peek();\n        }\n\n        return number;\n    },\n    readString: function(){\n        var reader  = this._reader,\n            delim   = reader.read(),\n            string  = delim,\n            prev    = delim,\n            c       = reader.peek();\n\n        while(c){\n            c = reader.read();\n            string += c;\n\n            //if the delimiter is found with an escapement, we're done.\n            if (c == delim && prev != \"\\\\\"){\n                break;\n            }\n\n            //if there's a newline without an escapement, it's an invalid string\n            if (isNewLine(reader.peek()) && c != \"\\\\\"){\n                string = \"\";\n                break;\n            }\n\n            //save previous and get next\n            prev = c;\n            c = reader.peek();\n        }\n\n        //if c is null, that means we're out of input and the string was never closed\n        if (c === null){\n            string = \"\";\n        }\n\n        return string;\n    },\n    readURI: function(first){\n        var reader  = this._reader,\n            uri     = first,\n            inner   = \"\",\n            c       = reader.peek();\n\n        reader.mark();\n\n        //skip whitespace before\n        while(c && isWhitespace(c)){\n            reader.read();\n            c = reader.peek();\n        }\n\n        //it's a string\n        if (c == \"'\" || c == \"\\\"\"){\n            inner = this.readString();\n        } else {\n            inner = this.readURL();\n        }\n\n        c = reader.peek();\n\n        //skip whitespace after\n        while(c && isWhitespace(c)){\n            reader.read();\n            c = reader.peek();\n        }\n\n        //if there was no inner value or the next character isn't closing paren, it's not a URI\n        if (inner === \"\" || c != \")\"){\n            uri = first;\n            reader.reset();\n        } else {\n            uri += inner + reader.read();\n        }\n\n        return uri;\n    },\n    readURL: function(){\n        var reader  = this._reader,\n            url     = \"\",\n            c       = reader.peek();\n\n        //TODO: Check for escape and nonascii\n        while (/^[!#$%&\\\\*-~]$/.test(c)){\n            url += reader.read();\n            c = reader.peek();\n        }\n\n        return url;\n\n    },\n    readName: function(first){\n        var reader  = this._reader,\n            ident   = first || \"\",\n            c       = reader.peek();\n\n        while(true){\n            if (c == \"\\\\\"){\n                ident += this.readEscape(reader.read());\n                c = reader.peek();\n            } else if(c && isNameChar(c)){\n                ident += reader.read();\n                c = reader.peek();\n            } else {\n                break;\n            }\n        }\n\n        return ident;\n    },\n\n    readEscape: function(first){\n        var reader  = this._reader,\n            cssEscape = first || \"\",\n            i       = 0,\n            c       = reader.peek();\n\n        if (isHexDigit(c)){\n            do {\n                cssEscape += reader.read();\n                c = reader.peek();\n            } while(c && isHexDigit(c) && ++i < 6);\n        }\n\n        if (cssEscape.length == 3 && /\\s/.test(c) ||\n            cssEscape.length == 7 || cssEscape.length == 1){\n                reader.read();\n        } else {\n            c = \"\";\n        }\n\n        return cssEscape + c;\n    },\n\n    readComment: function(first){\n        var reader  = this._reader,\n            comment = first || \"\",\n            c       = reader.read();\n\n        if (c == \"*\"){\n            while(c){\n                comment += c;\n\n                //look for end of comment\n                if (comment.length > 2 && c == \"*\" && reader.peek() == \"/\"){\n                    comment += reader.read();\n                    break;\n                }\n\n                c = reader.read();\n            }\n\n            return comment;\n        } else {\n            return \"\";\n        }\n\n    }\n});\n\nvar Tokens  = [\n\n    /*\n     * The following token names are defined in CSS3 Grammar: http://www.w3.org/TR/css3-syntax/#lexical\n     */\n\n    //HTML-style comments\n    { name: \"CDO\"},\n    { name: \"CDC\"},\n\n    //ignorables\n    { name: \"S\", whitespace: true/*, channel: \"ws\"*/},\n    { name: \"COMMENT\", comment: true, hide: true, channel: \"comment\" },\n\n    //attribute equality\n    { name: \"INCLUDES\", text: \"~=\"},\n    { name: \"DASHMATCH\", text: \"|=\"},\n    { name: \"PREFIXMATCH\", text: \"^=\"},\n    { name: \"SUFFIXMATCH\", text: \"$=\"},\n    { name: \"SUBSTRINGMATCH\", text: \"*=\"},\n\n    //identifier types\n    { name: \"STRING\"},\n    { name: \"IDENT\"},\n    { name: \"HASH\"},\n\n    //at-keywords\n    { name: \"IMPORT_SYM\", text: \"@import\"},\n    { name: \"PAGE_SYM\", text: \"@page\"},\n    { name: \"MEDIA_SYM\", text: \"@media\"},\n    { name: \"FONT_FACE_SYM\", text: \"@font-face\"},\n    { name: \"CHARSET_SYM\", text: \"@charset\"},\n    { name: \"NAMESPACE_SYM\", text: \"@namespace\"},\n    { name: \"VIEWPORT_SYM\", text: [\"@viewport\", \"@-ms-viewport\"]},\n    { name: \"UNKNOWN_SYM\" },\n    //{ name: \"ATKEYWORD\"},\n\n    //CSS3 animations\n    { name: \"KEYFRAMES_SYM\", text: [ \"@keyframes\", \"@-webkit-keyframes\", \"@-moz-keyframes\", \"@-o-keyframes\" ] },\n\n    //important symbol\n    { name: \"IMPORTANT_SYM\"},\n\n    //measurements\n    { name: \"LENGTH\"},\n    { name: \"ANGLE\"},\n    { name: \"TIME\"},\n    { name: \"FREQ\"},\n    { name: \"DIMENSION\"},\n    { name: \"PERCENTAGE\"},\n    { name: \"NUMBER\"},\n\n    //functions\n    { name: \"URI\"},\n    { name: \"FUNCTION\"},\n\n    //Unicode ranges\n    { name: \"UNICODE_RANGE\"},\n\n    /*\n     * The following token names are defined in CSS3 Selectors: http://www.w3.org/TR/css3-selectors/#selector-syntax\n     */\n\n    //invalid string\n    { name: \"INVALID\"},\n\n    //combinators\n    { name: \"PLUS\", text: \"+\" },\n    { name: \"GREATER\", text: \">\"},\n    { name: \"COMMA\", text: \",\"},\n    { name: \"TILDE\", text: \"~\"},\n\n    //modifier\n    { name: \"NOT\"},\n\n    /*\n     * Defined in CSS3 Paged Media\n     */\n    { name: \"TOPLEFTCORNER_SYM\", text: \"@top-left-corner\"},\n    { name: \"TOPLEFT_SYM\", text: \"@top-left\"},\n    { name: \"TOPCENTER_SYM\", text: \"@top-center\"},\n    { name: \"TOPRIGHT_SYM\", text: \"@top-right\"},\n    { name: \"TOPRIGHTCORNER_SYM\", text: \"@top-right-corner\"},\n    { name: \"BOTTOMLEFTCORNER_SYM\", text: \"@bottom-left-corner\"},\n    { name: \"BOTTOMLEFT_SYM\", text: \"@bottom-left\"},\n    { name: \"BOTTOMCENTER_SYM\", text: \"@bottom-center\"},\n    { name: \"BOTTOMRIGHT_SYM\", text: \"@bottom-right\"},\n    { name: \"BOTTOMRIGHTCORNER_SYM\", text: \"@bottom-right-corner\"},\n    { name: \"LEFTTOP_SYM\", text: \"@left-top\"},\n    { name: \"LEFTMIDDLE_SYM\", text: \"@left-middle\"},\n    { name: \"LEFTBOTTOM_SYM\", text: \"@left-bottom\"},\n    { name: \"RIGHTTOP_SYM\", text: \"@right-top\"},\n    { name: \"RIGHTMIDDLE_SYM\", text: \"@right-middle\"},\n    { name: \"RIGHTBOTTOM_SYM\", text: \"@right-bottom\"},\n\n    /*\n     * The following token names are defined in CSS3 Media Queries: http://www.w3.org/TR/css3-mediaqueries/#syntax\n     */\n    /*{ name: \"MEDIA_ONLY\", state: \"media\"},\n    { name: \"MEDIA_NOT\", state: \"media\"},\n    { name: \"MEDIA_AND\", state: \"media\"},*/\n    { name: \"RESOLUTION\", state: \"media\"},\n\n    /*\n     * The following token names are not defined in any CSS specification but are used by the lexer.\n     */\n\n    //not a real token, but useful for stupid IE filters\n    { name: \"IE_FUNCTION\" },\n\n    //part of CSS3 grammar but not the Flex code\n    { name: \"CHAR\" },\n\n    //TODO: Needed?\n    //Not defined as tokens, but might as well be\n    {\n        name: \"PIPE\",\n        text: \"|\"\n    },\n    {\n        name: \"SLASH\",\n        text: \"/\"\n    },\n    {\n        name: \"MINUS\",\n        text: \"-\"\n    },\n    {\n        name: \"STAR\",\n        text: \"*\"\n    },\n\n    {\n        name: \"LBRACE\",\n        endChar: \"}\",\n        text: \"{\"\n    },\n    {\n        name: \"RBRACE\",\n        text: \"}\"\n    },\n    {\n        name: \"LBRACKET\",\n        endChar: \"]\",\n        text: \"[\"\n    },\n    {\n        name: \"RBRACKET\",\n        text: \"]\"\n    },\n    {\n        name: \"EQUALS\",\n        text: \"=\"\n    },\n    {\n        name: \"COLON\",\n        text: \":\"\n    },\n    {\n        name: \"SEMICOLON\",\n        text: \";\"\n    },\n\n    {\n        name: \"LPAREN\",\n        endChar: \")\",\n        text: \"(\"\n    },\n    {\n        name: \"RPAREN\",\n        text: \")\"\n    },\n    {\n        name: \"DOT\",\n        text: \".\"\n    }\n];\n\n(function(){\n\n    var nameMap = [],\n        typeMap = {};\n\n    Tokens.UNKNOWN = -1;\n    Tokens.unshift({name:\"EOF\"});\n    for (var i=0, len = Tokens.length; i < len; i++){\n        nameMap.push(Tokens[i].name);\n        Tokens[Tokens[i].name] = i;\n        if (Tokens[i].text){\n            if (Tokens[i].text instanceof Array){\n                for (var j=0; j < Tokens[i].text.length; j++){\n                    typeMap[Tokens[i].text[j]] = i;\n                }\n            } else {\n                typeMap[Tokens[i].text] = i;\n            }\n        }\n    }\n\n    Tokens.name = function(tt){\n        return nameMap[tt];\n    };\n\n    Tokens.type = function(c){\n        return typeMap[c] || -1;\n    };\n\n})();\n\n\n\n//This file will likely change a lot! Very experimental!\n/*global Properties, ValidationTypes, ValidationError, PropertyValueIterator */\nvar Validation = {\n\n    validate: function(property, value){\n\n        //normalize name\n        var name        = property.toString().toLowerCase(),\n            parts       = value.parts,\n            expression  = new PropertyValueIterator(value),\n            spec        = Properties[name],\n            part,\n            valid,\n            j, count,\n            msg,\n            types,\n            last,\n            literals,\n            max, multi, group;\n\n        if (!spec) {\n            if (name.indexOf(\"-\") !== 0){    //vendor prefixed are ok\n                throw new ValidationError(\"Unknown property '\" + property + \"'.\", property.line, property.col);\n            }\n        } else if (typeof spec != \"number\"){\n\n            //initialization\n            if (typeof spec == \"string\"){\n                if (spec.indexOf(\"||\") > -1) {\n                    this.groupProperty(spec, expression);\n                } else {\n                    this.singleProperty(spec, expression, 1);\n                }\n\n            } else if (spec.multi) {\n                this.multiProperty(spec.multi, expression, spec.comma, spec.max || Infinity);\n            } else if (typeof spec == \"function\") {\n                spec(expression);\n            }\n\n        }\n\n    },\n\n    singleProperty: function(types, expression, max, partial) {\n\n        var result      = false,\n            value       = expression.value,\n            count       = 0,\n            part;\n\n        while (expression.hasNext() && count < max) {\n            result = ValidationTypes.isAny(expression, types);\n            if (!result) {\n                break;\n            }\n            count++;\n        }\n\n        if (!result) {\n            if (expression.hasNext() && !expression.isFirst()) {\n                part = expression.peek();\n                throw new ValidationError(\"Expected end of value but found '\" + part + \"'.\", part.line, part.col);\n            } else {\n                 throw new ValidationError(\"Expected (\" + types + \") but found '\" + value + \"'.\", value.line, value.col);\n            }\n        } else if (expression.hasNext()) {\n            part = expression.next();\n            throw new ValidationError(\"Expected end of value but found '\" + part + \"'.\", part.line, part.col);\n        }\n\n    },\n\n    multiProperty: function (types, expression, comma, max) {\n\n        var result      = false,\n            value       = expression.value,\n            count       = 0,\n            sep         = false,\n            part;\n\n        while(expression.hasNext() && !result && count < max) {\n            if (ValidationTypes.isAny(expression, types)) {\n                count++;\n                if (!expression.hasNext()) {\n                    result = true;\n\n                } else if (comma) {\n                    if (expression.peek() == \",\") {\n                        part = expression.next();\n                    } else {\n                        break;\n                    }\n                }\n            } else {\n                break;\n\n            }\n        }\n\n        if (!result) {\n            if (expression.hasNext() && !expression.isFirst()) {\n                part = expression.peek();\n                throw new ValidationError(\"Expected end of value but found '\" + part + \"'.\", part.line, part.col);\n            } else {\n                part = expression.previous();\n                if (comma && part == \",\") {\n                    throw new ValidationError(\"Expected end of value but found '\" + part + \"'.\", part.line, part.col);\n                } else {\n                    throw new ValidationError(\"Expected (\" + types + \") but found '\" + value + \"'.\", value.line, value.col);\n                }\n            }\n\n        } else if (expression.hasNext()) {\n            part = expression.next();\n            throw new ValidationError(\"Expected end of value but found '\" + part + \"'.\", part.line, part.col);\n        }\n\n    },\n\n    groupProperty: function (types, expression, comma) {\n\n        var result      = false,\n            value       = expression.value,\n            typeCount   = types.split(\"||\").length,\n            groups      = { count: 0 },\n            partial     = false,\n            name,\n            part;\n\n        while(expression.hasNext() && !result) {\n            name = ValidationTypes.isAnyOfGroup(expression, types);\n            if (name) {\n\n                //no dupes\n                if (groups[name]) {\n                    break;\n                } else {\n                    groups[name] = 1;\n                    groups.count++;\n                    partial = true;\n\n                    if (groups.count == typeCount || !expression.hasNext()) {\n                        result = true;\n                    }\n                }\n            } else {\n                break;\n            }\n        }\n\n        if (!result) {\n            if (partial && expression.hasNext()) {\n                    part = expression.peek();\n                    throw new ValidationError(\"Expected end of value but found '\" + part + \"'.\", part.line, part.col);\n            } else {\n                throw new ValidationError(\"Expected (\" + types + \") but found '\" + value + \"'.\", value.line, value.col);\n            }\n        } else if (expression.hasNext()) {\n            part = expression.next();\n            throw new ValidationError(\"Expected end of value but found '\" + part + \"'.\", part.line, part.col);\n        }\n    }\n\n\n\n};\n/**\n * Type to use when a validation error occurs.\n * @class ValidationError\n * @namespace parserlib.util\n * @constructor\n * @param {String} message The error message.\n * @param {int} line The line at which the error occurred.\n * @param {int} col The column at which the error occurred.\n */\nfunction ValidationError(message, line, col){\n\n    /**\n     * The column at which the error occurred.\n     * @type int\n     * @property col\n     */\n    this.col = col;\n\n    /**\n     * The line at which the error occurred.\n     * @type int\n     * @property line\n     */\n    this.line = line;\n\n    /**\n     * The text representation of the unit.\n     * @type String\n     * @property text\n     */\n    this.message = message;\n\n}\n\n//inherit from Error\nValidationError.prototype = new Error();\n//This file will likely change a lot! Very experimental!\n/*global Properties, Validation, ValidationError, PropertyValueIterator, console*/\nvar ValidationTypes = {\n\n    isLiteral: function (part, literals) {\n        var text = part.text.toString().toLowerCase(),\n            args = literals.split(\" | \"),\n            i, len, found = false;\n\n        for (i=0,len=args.length; i < len && !found; i++){\n            if (text == args[i].toLowerCase()){\n                found = true;\n            }\n        }\n\n        return found;\n    },\n\n    isSimple: function(type) {\n        return !!this.simple[type];\n    },\n\n    isComplex: function(type) {\n        return !!this.complex[type];\n    },\n\n    /**\n     * Determines if the next part(s) of the given expression\n     * are any of the given types.\n     */\n    isAny: function (expression, types) {\n        var args = types.split(\" | \"),\n            i, len, found = false;\n\n        for (i=0,len=args.length; i < len && !found && expression.hasNext(); i++){\n            found = this.isType(expression, args[i]);\n        }\n\n        return found;\n    },\n\n    /**\n     * Determines if the next part(s) of the given expression\n     * are one of a group.\n     */\n    isAnyOfGroup: function(expression, types) {\n        var args = types.split(\" || \"),\n            i, len, found = false;\n\n        for (i=0,len=args.length; i < len && !found; i++){\n            found = this.isType(expression, args[i]);\n        }\n\n        return found ? args[i-1] : false;\n    },\n\n    /**\n     * Determines if the next part(s) of the given expression\n     * are of a given type.\n     */\n    isType: function (expression, type) {\n        var part = expression.peek(),\n            result = false;\n\n        if (type.charAt(0) != \"<\") {\n            result = this.isLiteral(part, type);\n            if (result) {\n                expression.next();\n            }\n        } else if (this.simple[type]) {\n            result = this.simple[type](part);\n            if (result) {\n                expression.next();\n            }\n        } else {\n            result = this.complex[type](expression);\n        }\n\n        return result;\n    },\n\n\n\n    simple: {\n\n        \"<absolute-size>\": function(part){\n            return ValidationTypes.isLiteral(part, \"xx-small | x-small | small | medium | large | x-large | xx-large\");\n        },\n\n        \"<attachment>\": function(part){\n            return ValidationTypes.isLiteral(part, \"scroll | fixed | local\");\n        },\n\n        \"<attr>\": function(part){\n            return part.type == \"function\" && part.name == \"attr\";\n        },\n\n        \"<bg-image>\": function(part){\n            return this[\"<image>\"](part) || this[\"<gradient>\"](part) ||  part == \"none\";\n        },\n\n        \"<gradient>\": function(part) {\n            return part.type == \"function\" && /^(?:\\-(?:ms|moz|o|webkit)\\-)?(?:repeating\\-)?(?:radial\\-|linear\\-)?gradient/i.test(part);\n        },\n\n        \"<box>\": function(part){\n            return ValidationTypes.isLiteral(part, \"padding-box | border-box | content-box\");\n        },\n\n        \"<content>\": function(part){\n            return part.type == \"function\" && part.name == \"content\";\n        },\n\n        \"<relative-size>\": function(part){\n            return ValidationTypes.isLiteral(part, \"smaller | larger\");\n        },\n\n        //any identifier\n        \"<ident>\": function(part){\n            return part.type == \"identifier\";\n        },\n\n        \"<length>\": function(part){\n            if (part.type == \"function\" && /^(?:\\-(?:ms|moz|o|webkit)\\-)?calc/i.test(part)){\n                return true;\n            }else{\n                return part.type == \"length\" || part.type == \"number\" || part.type == \"integer\" || part == \"0\";\n            }\n        },\n\n        \"<color>\": function(part){\n            return part.type == \"color\" || part == \"transparent\";\n        },\n\n        \"<number>\": function(part){\n            return part.type == \"number\" || this[\"<integer>\"](part);\n        },\n\n        \"<integer>\": function(part){\n            return part.type == \"integer\";\n        },\n\n        \"<line>\": function(part){\n            return part.type == \"integer\";\n        },\n\n        \"<angle>\": function(part){\n            return part.type == \"angle\";\n        },\n\n        \"<uri>\": function(part){\n            return part.type == \"uri\";\n        },\n\n        \"<image>\": function(part){\n            return this[\"<uri>\"](part);\n        },\n\n        \"<percentage>\": function(part){\n            return part.type == \"percentage\" || part == \"0\";\n        },\n\n        \"<border-width>\": function(part){\n            return this[\"<length>\"](part) || ValidationTypes.isLiteral(part, \"thin | medium | thick\");\n        },\n\n        \"<border-style>\": function(part){\n            return ValidationTypes.isLiteral(part, \"none | hidden | dotted | dashed | solid | double | groove | ridge | inset | outset\");\n        },\n\n        \"<content-sizing>\": function(part){ // http://www.w3.org/TR/css3-sizing/#width-height-keywords\n            return ValidationTypes.isLiteral(part, \"fill-available | -moz-available | -webkit-fill-available | max-content | -moz-max-content | -webkit-max-content | min-content | -moz-min-content | -webkit-min-content | fit-content | -moz-fit-content | -webkit-fit-content\");\n        },\n\n        \"<margin-width>\": function(part){\n            return this[\"<length>\"](part) || this[\"<percentage>\"](part) || ValidationTypes.isLiteral(part, \"auto\");\n        },\n\n        \"<padding-width>\": function(part){\n            return this[\"<length>\"](part) || this[\"<percentage>\"](part);\n        },\n\n        \"<shape>\": function(part){\n            return part.type == \"function\" && (part.name == \"rect\" || part.name == \"inset-rect\");\n        },\n\n        \"<time>\": function(part) {\n            return part.type == \"time\";\n        },\n\n        \"<flex-grow>\": function(part){\n            return this[\"<number>\"](part);\n        },\n\n        \"<flex-shrink>\": function(part){\n            return this[\"<number>\"](part);\n        },\n\n        \"<width>\": function(part){\n            return this[\"<margin-width>\"](part);\n        },\n\n        \"<flex-basis>\": function(part){\n            return this[\"<width>\"](part);\n        },\n\n        \"<flex-direction>\": function(part){\n            return ValidationTypes.isLiteral(part, \"row | row-reverse | column | column-reverse\");\n        },\n\n        \"<flex-wrap>\": function(part){\n            return ValidationTypes.isLiteral(part, \"nowrap | wrap | wrap-reverse\");\n        }\n    },\n\n    complex: {\n\n        \"<bg-position>\": function(expression){\n            var types   = this,\n                result  = false,\n                numeric = \"<percentage> | <length>\",\n                xDir    = \"left | right\",\n                yDir    = \"top | bottom\",\n                count = 0,\n                hasNext = function() {\n                    return expression.hasNext() && expression.peek() != \",\";\n                };\n\n            while (expression.peek(count) && expression.peek(count) != \",\") {\n                count++;\n            }\n\n/*\n<position> = [\n  [ left | center | right | top | bottom | <percentage> | <length> ]\n|\n  [ left | center | right | <percentage> | <length> ]\n  [ top | center | bottom | <percentage> | <length> ]\n|\n  [ center | [ left | right ] [ <percentage> | <length> ]? ] &&\n  [ center | [ top | bottom ] [ <percentage> | <length> ]? ]\n]\n*/\n\n            if (count < 3) {\n                if (ValidationTypes.isAny(expression, xDir + \" | center | \" + numeric)) {\n                        result = true;\n                        ValidationTypes.isAny(expression, yDir + \" | center | \" + numeric);\n                } else if (ValidationTypes.isAny(expression, yDir)) {\n                        result = true;\n                        ValidationTypes.isAny(expression, xDir + \" | center\");\n                }\n            } else {\n                if (ValidationTypes.isAny(expression, xDir)) {\n                    if (ValidationTypes.isAny(expression, yDir)) {\n                        result = true;\n                        ValidationTypes.isAny(expression, numeric);\n                    } else if (ValidationTypes.isAny(expression, numeric)) {\n                        if (ValidationTypes.isAny(expression, yDir)) {\n                            result = true;\n                            ValidationTypes.isAny(expression, numeric);\n                        } else if (ValidationTypes.isAny(expression, \"center\")) {\n                            result = true;\n                        }\n                    }\n                } else if (ValidationTypes.isAny(expression, yDir)) {\n                    if (ValidationTypes.isAny(expression, xDir)) {\n                        result = true;\n                        ValidationTypes.isAny(expression, numeric);\n                    } else if (ValidationTypes.isAny(expression, numeric)) {\n                        if (ValidationTypes.isAny(expression, xDir)) {\n                                result = true;\n                                ValidationTypes.isAny(expression, numeric);\n                        } else if (ValidationTypes.isAny(expression, \"center\")) {\n                            result = true;\n                        }\n                    }\n                } else if (ValidationTypes.isAny(expression, \"center\")) {\n                    if (ValidationTypes.isAny(expression, xDir + \" | \" + yDir)) {\n                        result = true;\n                        ValidationTypes.isAny(expression, numeric);\n                    }\n                }\n            }\n\n            return result;\n        },\n\n        \"<bg-size>\": function(expression){\n            //<bg-size> = [ <length> | <percentage> | auto ]{1,2} | cover | contain\n            var types   = this,\n                result  = false,\n                numeric = \"<percentage> | <length> | auto\",\n                part,\n                i, len;\n\n            if (ValidationTypes.isAny(expression, \"cover | contain\")) {\n                result = true;\n            } else if (ValidationTypes.isAny(expression, numeric)) {\n                result = true;\n                ValidationTypes.isAny(expression, numeric);\n            }\n\n            return result;\n        },\n\n        \"<repeat-style>\": function(expression){\n            //repeat-x | repeat-y | [repeat | space | round | no-repeat]{1,2}\n            var result  = false,\n                values  = \"repeat | space | round | no-repeat\",\n                part;\n\n            if (expression.hasNext()){\n                part = expression.next();\n\n                if (ValidationTypes.isLiteral(part, \"repeat-x | repeat-y\")) {\n                    result = true;\n                } else if (ValidationTypes.isLiteral(part, values)) {\n                    result = true;\n\n                    if (expression.hasNext() && ValidationTypes.isLiteral(expression.peek(), values)) {\n                        expression.next();\n                    }\n                }\n            }\n\n            return result;\n\n        },\n\n        \"<shadow>\": function(expression) {\n            //inset? && [ <length>{2,4} && <color>? ]\n            var result  = false,\n                count   = 0,\n                inset   = false,\n                color   = false,\n                part;\n\n            if (expression.hasNext()) {\n\n                if (ValidationTypes.isAny(expression, \"inset\")){\n                    inset = true;\n                }\n\n                if (ValidationTypes.isAny(expression, \"<color>\")) {\n                    color = true;\n                }\n\n                while (ValidationTypes.isAny(expression, \"<length>\") && count < 4) {\n                    count++;\n                }\n\n\n                if (expression.hasNext()) {\n                    if (!color) {\n                        ValidationTypes.isAny(expression, \"<color>\");\n                    }\n\n                    if (!inset) {\n                        ValidationTypes.isAny(expression, \"inset\");\n                    }\n\n                }\n\n                result = (count >= 2 && count <= 4);\n\n            }\n\n            return result;\n        },\n\n        \"<x-one-radius>\": function(expression) {\n            //[ <length> | <percentage> ] [ <length> | <percentage> ]?\n            var result  = false,\n                simple = \"<length> | <percentage> | inherit\";\n\n            if (ValidationTypes.isAny(expression, simple)){\n                result = true;\n                ValidationTypes.isAny(expression, simple);\n            }\n\n            return result;\n        },\n\n        \"<flex>\": function(expression) {\n            // http://www.w3.org/TR/2014/WD-css-flexbox-1-20140325/#flex-property\n            // none | [ <flex-grow> <flex-shrink>? || <flex-basis> ]\n            // Valid syntaxes, according to https://developer.mozilla.org/en-US/docs/Web/CSS/flex#Syntax\n            // * none\n            // * <flex-grow>\n            // * <flex-basis>\n            // * <flex-grow> <flex-basis>\n            // * <flex-grow> <flex-shrink>\n            // * <flex-grow> <flex-shrink> <flex-basis>\n            // * inherit\n            var part,\n                result = false;\n            if (ValidationTypes.isAny(expression, \"none | inherit\")) {\n                result = true;\n            } else {\n                if (ValidationTypes.isType(expression, \"<flex-grow>\")) {\n                    if (expression.peek()) {\n                        if (ValidationTypes.isType(expression, \"<flex-shrink>\")) {\n                            if (expression.peek()) {\n                                result = ValidationTypes.isType(expression, \"<flex-basis>\");\n                            } else {\n                                result = true;\n                            }\n                        } else if (ValidationTypes.isType(expression, \"<flex-basis>\")) {\n                            result = expression.peek() === null;\n                        }\n                    } else {\n                        result = true;\n                    }\n                } else if (ValidationTypes.isType(expression, \"<flex-basis>\")) {\n                    result = true;\n                }\n            }\n\n            if (!result) {\n                // Generate a more verbose error than \"Expected <flex>...\"\n                part = expression.peek();\n                throw new ValidationError(\"Expected (none | [ <flex-grow> <flex-shrink>? || <flex-basis> ]) but found '\" + expression.value.text + \"'.\", part.line, part.col);\n            }\n\n            return result;\n        }\n    }\n};\n\nparserlib.css = {\nColors              :Colors,\nCombinator          :Combinator,\nParser              :Parser,\nPropertyName        :PropertyName,\nPropertyValue       :PropertyValue,\nPropertyValuePart   :PropertyValuePart,\nMediaFeature        :MediaFeature,\nMediaQuery          :MediaQuery,\nSelector            :Selector,\nSelectorPart        :SelectorPart,\nSelectorSubPart     :SelectorSubPart,\nSpecificity         :Specificity,\nTokenStream         :TokenStream,\nTokens              :Tokens,\nValidationError     :ValidationError\n};\n})();\n\n(function(){\nfor(var prop in parserlib){\nexports[prop] = parserlib[prop];\n}\n})();\n\n\nfunction objectToString(o) {\n  return Object.prototype.toString.call(o);\n}\n\n// shim for Node's 'util' package\n// DO NOT REMOVE THIS! It is required for compatibility with EnderJS (http://enderjs.com/).\nvar util = {\n  isArray: function (ar) {\n    return Array.isArray(ar) || (typeof ar === 'object' && objectToString(ar) === '[object Array]');\n  },\n  isDate: function (d) {\n    return typeof d === 'object' && objectToString(d) === '[object Date]';\n  },\n  isRegExp: function (re) {\n    return typeof re === 'object' && objectToString(re) === '[object RegExp]';\n  },\n  getRegExpFlags: function (re) {\n    var flags = '';\n    re.global && (flags += 'g');\n    re.ignoreCase && (flags += 'i');\n    re.multiline && (flags += 'm');\n    return flags;\n  }\n};\n\n\nif (typeof module === 'object')\n  module.exports = clone;\n\n/**\n * Clones (copies) an Object using deep copying.\n *\n * This function supports circular references by default, but if you are certain\n * there are no circular references in your object, you can save some CPU time\n * by calling clone(obj, false).\n *\n * Caution: if `circular` is false and `parent` contains circular references,\n * your program may enter an infinite loop and crash.\n *\n * @param `parent` - the object to be cloned\n * @param `circular` - set to true if the object to be cloned may contain\n *    circular references. (optional - true by default)\n * @param `depth` - set to a number if the object is only to be cloned to\n *    a particular depth. (optional - defaults to Infinity)\n * @param `prototype` - sets the prototype to be used when cloning an object.\n *    (optional - defaults to parent prototype).\n*/\n\nfunction clone(parent, circular, depth, prototype) {\n  // maintain two arrays for circular references, where corresponding parents\n  // and children have the same index\n  var allParents = [];\n  var allChildren = [];\n\n  var useBuffer = typeof Buffer != 'undefined';\n\n  if (typeof circular == 'undefined')\n    circular = true;\n\n  if (typeof depth == 'undefined')\n    depth = Infinity;\n\n  // recurse this function so we don't reset allParents and allChildren\n  function _clone(parent, depth) {\n    // cloning null always returns null\n    if (parent === null)\n      return null;\n\n    if (depth == 0)\n      return parent;\n\n    var child;\n    if (typeof parent != 'object') {\n      return parent;\n    }\n\n    if (util.isArray(parent)) {\n      child = [];\n    } else if (util.isRegExp(parent)) {\n      child = new RegExp(parent.source, util.getRegExpFlags(parent));\n      if (parent.lastIndex) child.lastIndex = parent.lastIndex;\n    } else if (util.isDate(parent)) {\n      child = new Date(parent.getTime());\n    } else if (useBuffer && Buffer.isBuffer(parent)) {\n      child = new Buffer(parent.length);\n      parent.copy(child);\n      return child;\n    } else {\n      if (typeof prototype == 'undefined') child = Object.create(Object.getPrototypeOf(parent));\n      else child = Object.create(prototype);\n    }\n\n    if (circular) {\n      var index = allParents.indexOf(parent);\n\n      if (index != -1) {\n        return allChildren[index];\n      }\n      allParents.push(parent);\n      allChildren.push(child);\n    }\n\n    for (var i in parent) {\n      child[i] = _clone(parent[i], depth - 1);\n    }\n\n    return child;\n  }\n\n  return _clone(parent, depth);\n}\n\n/**\n * Simple flat clone using prototype, accepts only objects, usefull for property\n * override on FLAT configuration object (no nested props).\n *\n * USE WITH CAUTION! This may not behave as you wish if you do not know how this\n * works.\n */\nclone.clonePrototype = function(parent) {\n  if (parent === null)\n    return null;\n\n  var c = function () {};\n  c.prototype = parent;\n  return new c();\n};\n\n/**\n * Main CSSLint object.\n * @class CSSLint\n * @static\n * @extends parserlib.util.EventTarget\n */\n\n/* global parserlib, clone, Reporter */\n/* exported CSSLint */\n\nvar CSSLint = (function(){\n\n    var rules           = [],\n        formatters      = [],\n        embeddedRuleset = /\\/\\*csslint([^\\*]*)\\*\\//,\n        api             = new parserlib.util.EventTarget();\n\n    api.version = \"@VERSION@\";\n\n    //-------------------------------------------------------------------------\n    // Rule Management\n    //-------------------------------------------------------------------------\n\n    /**\n     * Adds a new rule to the engine.\n     * @param {Object} rule The rule to add.\n     * @method addRule\n     */\n    api.addRule = function(rule){\n        rules.push(rule);\n        rules[rule.id] = rule;\n    };\n\n    /**\n     * Clears all rule from the engine.\n     * @method clearRules\n     */\n    api.clearRules = function(){\n        rules = [];\n    };\n\n    /**\n     * Returns the rule objects.\n     * @return An array of rule objects.\n     * @method getRules\n     */\n    api.getRules = function(){\n        return [].concat(rules).sort(function(a,b){\n            return a.id > b.id ? 1 : 0;\n        });\n    };\n\n    /**\n     * Returns a ruleset configuration object with all current rules.\n     * @return A ruleset object.\n     * @method getRuleset\n     */\n    api.getRuleset = function() {\n        var ruleset = {},\n            i = 0,\n            len = rules.length;\n\n        while (i < len){\n            ruleset[rules[i++].id] = 1;    //by default, everything is a warning\n        }\n\n        return ruleset;\n    };\n\n    /**\n     * Returns a ruleset object based on embedded rules.\n     * @param {String} text A string of css containing embedded rules.\n     * @param {Object} ruleset A ruleset object to modify.\n     * @return {Object} A ruleset object.\n     * @method getEmbeddedRuleset\n     */\n    function applyEmbeddedRuleset(text, ruleset){\n        var valueMap,\n            embedded = text && text.match(embeddedRuleset),\n            rules = embedded && embedded[1];\n\n        if (rules) {\n            valueMap = {\n                \"true\": 2,  // true is error\n                \"\": 1,      // blank is warning\n                \"false\": 0, // false is ignore\n\n                \"2\": 2,     // explicit error\n                \"1\": 1,     // explicit warning\n                \"0\": 0      // explicit ignore\n            };\n\n            rules.toLowerCase().split(\",\").forEach(function(rule){\n                var pair = rule.split(\":\"),\n                    property = pair[0] || \"\",\n                    value = pair[1] || \"\";\n\n                ruleset[property.trim()] = valueMap[value.trim()];\n            });\n        }\n\n        return ruleset;\n    }\n\n    //-------------------------------------------------------------------------\n    // Formatters\n    //-------------------------------------------------------------------------\n\n    /**\n     * Adds a new formatter to the engine.\n     * @param {Object} formatter The formatter to add.\n     * @method addFormatter\n     */\n    api.addFormatter = function(formatter) {\n        // formatters.push(formatter);\n        formatters[formatter.id] = formatter;\n    };\n\n    /**\n     * Retrieves a formatter for use.\n     * @param {String} formatId The name of the format to retrieve.\n     * @return {Object} The formatter or undefined.\n     * @method getFormatter\n     */\n    api.getFormatter = function(formatId){\n        return formatters[formatId];\n    };\n\n    /**\n     * Formats the results in a particular format for a single file.\n     * @param {Object} result The results returned from CSSLint.verify().\n     * @param {String} filename The filename for which the results apply.\n     * @param {String} formatId The name of the formatter to use.\n     * @param {Object} options (Optional) for special output handling.\n     * @return {String} A formatted string for the results.\n     * @method format\n     */\n    api.format = function(results, filename, formatId, options) {\n        var formatter = this.getFormatter(formatId),\n            result = null;\n\n        if (formatter){\n            result = formatter.startFormat();\n            result += formatter.formatResults(results, filename, options || {});\n            result += formatter.endFormat();\n        }\n\n        return result;\n    };\n\n    /**\n     * Indicates if the given format is supported.\n     * @param {String} formatId The ID of the format to check.\n     * @return {Boolean} True if the format exists, false if not.\n     * @method hasFormat\n     */\n    api.hasFormat = function(formatId){\n        return formatters.hasOwnProperty(formatId);\n    };\n\n    //-------------------------------------------------------------------------\n    // Verification\n    //-------------------------------------------------------------------------\n\n    /**\n     * Starts the verification process for the given CSS text.\n     * @param {String} text The CSS text to verify.\n     * @param {Object} ruleset (Optional) List of rules to apply. If null, then\n     *      all rules are used. If a rule has a value of 1 then it's a warning,\n     *      a value of 2 means it's an error.\n     * @return {Object} Results of the verification.\n     * @method verify\n     */\n    api.verify = function(text, ruleset){\n\n        var i = 0,\n            reporter,\n            lines,\n            report,\n            parser = new parserlib.css.Parser({ starHack: true, ieFilters: true,\n                                                underscoreHack: true, strict: false });\n\n        // normalize line endings\n        lines = text.replace(/\\n\\r?/g, \"$split$\").split(\"$split$\");\n\n        if (!ruleset){\n            ruleset = this.getRuleset();\n        }\n\n        if (embeddedRuleset.test(text)){\n            //defensively copy so that caller's version does not get modified\n            ruleset = clone(ruleset);\n            ruleset = applyEmbeddedRuleset(text, ruleset);\n        }\n\n        reporter = new Reporter(lines, ruleset);\n\n        ruleset.errors = 2;       //always report parsing errors as errors\n        for (i in ruleset){\n            if(ruleset.hasOwnProperty(i) && ruleset[i]){\n                if (rules[i]){\n                    rules[i].init(parser, reporter);\n                }\n            }\n        }\n\n\n        //capture most horrible error type\n        try {\n            parser.parse(text);\n        } catch (ex) {\n            reporter.error(\"Fatal error, cannot continue: \" + ex.message, ex.line, ex.col, {});\n        }\n\n        report = {\n            messages    : reporter.messages,\n            stats       : reporter.stats,\n            ruleset     : reporter.ruleset\n        };\n\n        //sort by line numbers, rollups at the bottom\n        report.messages.sort(function (a, b){\n            if (a.rollup && !b.rollup){\n                return 1;\n            } else if (!a.rollup && b.rollup){\n                return -1;\n            } else {\n                return a.line - b.line;\n            }\n        });\n\n        return report;\n    };\n\n    //-------------------------------------------------------------------------\n    // Publish the API\n    //-------------------------------------------------------------------------\n\n    return api;\n\n})();\n\n/**\n * An instance of Report is used to report results of the\n * verification back to the main API.\n * @class Reporter\n * @constructor\n * @param {String[]} lines The text lines of the source.\n * @param {Object} ruleset The set of rules to work with, including if\n *      they are errors or warnings.\n */\nfunction Reporter(lines, ruleset){\n\n    /**\n     * List of messages being reported.\n     * @property messages\n     * @type String[]\n     */\n    this.messages = [];\n\n    /**\n     * List of statistics being reported.\n     * @property stats\n     * @type String[]\n     */\n    this.stats = [];\n\n    /**\n     * Lines of code being reported on. Used to provide contextual information\n     * for messages.\n     * @property lines\n     * @type String[]\n     */\n    this.lines = lines;\n\n    /**\n     * Information about the rules. Used to determine whether an issue is an\n     * error or warning.\n     * @property ruleset\n     * @type Object\n     */\n    this.ruleset = ruleset;\n}\n\nReporter.prototype = {\n\n    //restore constructor\n    constructor: Reporter,\n\n    /**\n     * Report an error.\n     * @param {String} message The message to store.\n     * @param {int} line The line number.\n     * @param {int} col The column number.\n     * @param {Object} rule The rule this message relates to.\n     * @method error\n     */\n    error: function(message, line, col, rule){\n        this.messages.push({\n            type    : \"error\",\n            line    : line,\n            col     : col,\n            message : message,\n            evidence: this.lines[line-1],\n            rule    : rule || {}\n        });\n    },\n\n    /**\n     * Report an warning.\n     * @param {String} message The message to store.\n     * @param {int} line The line number.\n     * @param {int} col The column number.\n     * @param {Object} rule The rule this message relates to.\n     * @method warn\n     * @deprecated Use report instead.\n     */\n    warn: function(message, line, col, rule){\n        this.report(message, line, col, rule);\n    },\n\n    /**\n     * Report an issue.\n     * @param {String} message The message to store.\n     * @param {int} line The line number.\n     * @param {int} col The column number.\n     * @param {Object} rule The rule this message relates to.\n     * @method report\n     */\n    report: function(message, line, col, rule){\n        this.messages.push({\n            type    : this.ruleset[rule.id] === 2 ? \"error\" : \"warning\",\n            line    : line,\n            col     : col,\n            message : message,\n            evidence: this.lines[line-1],\n            rule    : rule\n        });\n    },\n\n    /**\n     * Report some informational text.\n     * @param {String} message The message to store.\n     * @param {int} line The line number.\n     * @param {int} col The column number.\n     * @param {Object} rule The rule this message relates to.\n     * @method info\n     */\n    info: function(message, line, col, rule){\n        this.messages.push({\n            type    : \"info\",\n            line    : line,\n            col     : col,\n            message : message,\n            evidence: this.lines[line-1],\n            rule    : rule\n        });\n    },\n\n    /**\n     * Report some rollup error information.\n     * @param {String} message The message to store.\n     * @param {Object} rule The rule this message relates to.\n     * @method rollupError\n     */\n    rollupError: function(message, rule){\n        this.messages.push({\n            type    : \"error\",\n            rollup  : true,\n            message : message,\n            rule    : rule\n        });\n    },\n\n    /**\n     * Report some rollup warning information.\n     * @param {String} message The message to store.\n     * @param {Object} rule The rule this message relates to.\n     * @method rollupWarn\n     */\n    rollupWarn: function(message, rule){\n        this.messages.push({\n            type    : \"warning\",\n            rollup  : true,\n            message : message,\n            rule    : rule\n        });\n    },\n\n    /**\n     * Report a statistic.\n     * @param {String} name The name of the stat to store.\n     * @param {Variant} value The value of the stat.\n     * @method stat\n     */\n    stat: function(name, value){\n        this.stats[name] = value;\n    }\n};\n\n//expose for testing purposes\nCSSLint._Reporter = Reporter;\n\n/*\n * Utility functions that make life easier.\n */\nCSSLint.Util = {\n    /*\n     * Adds all properties from supplier onto receiver,\n     * overwriting if the same name already exists on\n     * reciever.\n     * @param {Object} The object to receive the properties.\n     * @param {Object} The object to provide the properties.\n     * @return {Object} The receiver\n     */\n    mix: function(receiver, supplier){\n        var prop;\n\n        for (prop in supplier){\n            if (supplier.hasOwnProperty(prop)){\n                receiver[prop] = supplier[prop];\n            }\n        }\n\n        return prop;\n    },\n\n    /*\n     * Polyfill for array indexOf() method.\n     * @param {Array} values The array to search.\n     * @param {Variant} value The value to search for.\n     * @return {int} The index of the value if found, -1 if not.\n     */\n    indexOf: function(values, value){\n        if (values.indexOf){\n            return values.indexOf(value);\n        } else {\n            for (var i=0, len=values.length; i < len; i++){\n                if (values[i] === value){\n                    return i;\n                }\n            }\n            return -1;\n        }\n    },\n\n    /*\n     * Polyfill for array forEach() method.\n     * @param {Array} values The array to operate on.\n     * @param {Function} func The function to call on each item.\n     * @return {void}\n     */\n    forEach: function(values, func) {\n        if (values.forEach){\n            return values.forEach(func);\n        } else {\n            for (var i=0, len=values.length; i < len; i++){\n                func(values[i], i, values);\n            }\n        }\n    }\n};\n\n/*\n * Rule: Don't use adjoining classes (.foo.bar).\n */\n\nCSSLint.addRule({\n\n    //rule information\n    id: \"adjoining-classes\",\n    name: \"Disallow adjoining classes\",\n    desc: \"Don't use adjoining classes.\",\n    browsers: \"IE6\",\n\n    //initialization\n    init: function(parser, reporter){\n        var rule = this;\n        parser.addListener(\"startrule\", function(event){\n            var selectors = event.selectors,\n                selector,\n                part,\n                modifier,\n                classCount,\n                i, j, k;\n\n            for (i=0; i < selectors.length; i++){\n                selector = selectors[i];\n                for (j=0; j < selector.parts.length; j++){\n                    part = selector.parts[j];\n                    if (part.type === parser.SELECTOR_PART_TYPE){\n                        classCount = 0;\n                        for (k=0; k < part.modifiers.length; k++){\n                            modifier = part.modifiers[k];\n                            if (modifier.type === \"class\"){\n                                classCount++;\n                            }\n                            if (classCount > 1){\n                                reporter.report(\"Don't use adjoining classes.\", part.line, part.col, rule);\n                            }\n                        }\n                    }\n                }\n            }\n        });\n    }\n\n});\n\n/*\n * Rule: Don't use width or height when using padding or border.\n */\nCSSLint.addRule({\n\n    //rule information\n    id: \"box-model\",\n    name: \"Beware of broken box size\",\n    desc: \"Don't use width or height when using padding or border.\",\n    browsers: \"All\",\n\n    //initialization\n    init: function(parser, reporter){\n        var rule = this,\n            widthProperties = {\n                border: 1,\n                \"border-left\": 1,\n                \"border-right\": 1,\n                padding: 1,\n                \"padding-left\": 1,\n                \"padding-right\": 1\n            },\n            heightProperties = {\n                border: 1,\n                \"border-bottom\": 1,\n                \"border-top\": 1,\n                padding: 1,\n                \"padding-bottom\": 1,\n                \"padding-top\": 1\n            },\n            properties,\n            boxSizing = false;\n\n        function startRule(){\n            properties = {};\n            boxSizing = false;\n        }\n\n        function endRule(){\n            var prop, value;\n\n            if (!boxSizing) {\n                if (properties.height){\n                    for (prop in heightProperties){\n                        if (heightProperties.hasOwnProperty(prop) && properties[prop]){\n                            value = properties[prop].value;\n                            //special case for padding\n                            if (!(prop === \"padding\" && value.parts.length === 2 && value.parts[0].value === 0)){\n                                reporter.report(\"Using height with \" + prop + \" can sometimes make elements larger than you expect.\", properties[prop].line, properties[prop].col, rule);\n                            }\n                        }\n                    }\n                }\n\n                if (properties.width){\n                    for (prop in widthProperties){\n                        if (widthProperties.hasOwnProperty(prop) && properties[prop]){\n                            value = properties[prop].value;\n\n                            if (!(prop === \"padding\" && value.parts.length === 2 && value.parts[1].value === 0)){\n                                reporter.report(\"Using width with \" + prop + \" can sometimes make elements larger than you expect.\", properties[prop].line, properties[prop].col, rule);\n                            }\n                        }\n                    }\n                }\n            }\n        }\n\n        parser.addListener(\"startrule\", startRule);\n        parser.addListener(\"startfontface\", startRule);\n        parser.addListener(\"startpage\", startRule);\n        parser.addListener(\"startpagemargin\", startRule);\n        parser.addListener(\"startkeyframerule\", startRule);\n\n        parser.addListener(\"property\", function(event){\n            var name = event.property.text.toLowerCase();\n\n            if (heightProperties[name] || widthProperties[name]){\n                if (!/^0\\S*$/.test(event.value) && !(name === \"border\" && event.value.toString() === \"none\")){\n                    properties[name] = { line: event.property.line, col: event.property.col, value: event.value };\n                }\n            } else {\n                if (/^(width|height)/i.test(name) && /^(length|percentage)/.test(event.value.parts[0].type)){\n                    properties[name] = 1;\n                } else if (name === \"box-sizing\") {\n                    boxSizing = true;\n                }\n            }\n\n        });\n\n        parser.addListener(\"endrule\", endRule);\n        parser.addListener(\"endfontface\", endRule);\n        parser.addListener(\"endpage\", endRule);\n        parser.addListener(\"endpagemargin\", endRule);\n        parser.addListener(\"endkeyframerule\", endRule);\n    }\n\n});\n\n/*\n * Rule: box-sizing doesn't work in IE6 and IE7.\n */\n\nCSSLint.addRule({\n\n    //rule information\n    id: \"box-sizing\",\n    name: \"Disallow use of box-sizing\",\n    desc: \"The box-sizing properties isn't supported in IE6 and IE7.\",\n    browsers: \"IE6, IE7\",\n    tags: [\"Compatibility\"],\n\n    //initialization\n    init: function(parser, reporter){\n        var rule = this;\n\n        parser.addListener(\"property\", function(event){\n            var name = event.property.text.toLowerCase();\n\n            if (name === \"box-sizing\"){\n                reporter.report(\"The box-sizing property isn't supported in IE6 and IE7.\", event.line, event.col, rule);\n            }\n        });\n    }\n\n});\n\n/*\n * Rule: Use the bulletproof @font-face syntax to avoid 404's in old IE\n * (http://www.fontspring.com/blog/the-new-bulletproof-font-face-syntax)\n */\n\nCSSLint.addRule({\n\n    //rule information\n    id: \"bulletproof-font-face\",\n    name: \"Use the bulletproof @font-face syntax\",\n    desc: \"Use the bulletproof @font-face syntax to avoid 404's in old IE (http://www.fontspring.com/blog/the-new-bulletproof-font-face-syntax).\",\n    browsers: \"All\",\n\n    //initialization\n    init: function(parser, reporter){\n        var rule = this,\n            fontFaceRule = false,\n            firstSrc     = true,\n            ruleFailed    = false,\n            line, col;\n\n        // Mark the start of a @font-face declaration so we only test properties inside it\n        parser.addListener(\"startfontface\", function(){\n            fontFaceRule = true;\n        });\n\n        parser.addListener(\"property\", function(event){\n            // If we aren't inside an @font-face declaration then just return\n            if (!fontFaceRule) {\n                return;\n            }\n\n            var propertyName = event.property.toString().toLowerCase(),\n                value        = event.value.toString();\n\n            // Set the line and col numbers for use in the endfontface listener\n            line = event.line;\n            col  = event.col;\n\n            // This is the property that we care about, we can ignore the rest\n            if (propertyName === \"src\") {\n                var regex = /^\\s?url\\(['\"].+\\.eot\\?.*['\"]\\)\\s*format\\(['\"]embedded-opentype['\"]\\).*$/i;\n\n                // We need to handle the advanced syntax with two src properties\n                if (!value.match(regex) && firstSrc) {\n                    ruleFailed = true;\n                    firstSrc = false;\n                } else if (value.match(regex) && !firstSrc) {\n                    ruleFailed = false;\n                }\n            }\n\n\n        });\n\n        // Back to normal rules that we don't need to test\n        parser.addListener(\"endfontface\", function(){\n            fontFaceRule = false;\n\n            if (ruleFailed) {\n                reporter.report(\"@font-face declaration doesn't follow the fontspring bulletproof syntax.\", line, col, rule);\n            }\n        });\n    }\n});\n\n/*\n * Rule: Include all compatible vendor prefixes to reach a wider\n * range of users.\n */\n\nCSSLint.addRule({\n\n    //rule information\n    id: \"compatible-vendor-prefixes\",\n    name: \"Require compatible vendor prefixes\",\n    desc: \"Include all compatible vendor prefixes to reach a wider range of users.\",\n    browsers: \"All\",\n\n    //initialization\n    init: function (parser, reporter) {\n        var rule = this,\n            compatiblePrefixes,\n            properties,\n            prop,\n            variations,\n            prefixed,\n            i,\n            len,\n            inKeyFrame = false,\n            arrayPush = Array.prototype.push,\n            applyTo = [];\n\n        // See http://peter.sh/experiments/vendor-prefixed-css-property-overview/ for details\n        compatiblePrefixes = {\n            \"animation\"                  : \"webkit moz\",\n            \"animation-delay\"            : \"webkit moz\",\n            \"animation-direction\"        : \"webkit moz\",\n            \"animation-duration\"         : \"webkit moz\",\n            \"animation-fill-mode\"        : \"webkit moz\",\n            \"animation-iteration-count\"  : \"webkit moz\",\n            \"animation-name\"             : \"webkit moz\",\n            \"animation-play-state\"       : \"webkit moz\",\n            \"animation-timing-function\"  : \"webkit moz\",\n            \"appearance\"                 : \"webkit moz\",\n            \"border-end\"                 : \"webkit moz\",\n            \"border-end-color\"           : \"webkit moz\",\n            \"border-end-style\"           : \"webkit moz\",\n            \"border-end-width\"           : \"webkit moz\",\n            \"border-image\"               : \"webkit moz o\",\n            \"border-radius\"              : \"webkit\",\n            \"border-start\"               : \"webkit moz\",\n            \"border-start-color\"         : \"webkit moz\",\n            \"border-start-style\"         : \"webkit moz\",\n            \"border-start-width\"         : \"webkit moz\",\n            \"box-align\"                  : \"webkit moz ms\",\n            \"box-direction\"              : \"webkit moz ms\",\n            \"box-flex\"                   : \"webkit moz ms\",\n            \"box-lines\"                  : \"webkit ms\",\n            \"box-ordinal-group\"          : \"webkit moz ms\",\n            \"box-orient\"                 : \"webkit moz ms\",\n            \"box-pack\"                   : \"webkit moz ms\",\n            \"box-sizing\"                 : \"webkit moz\",\n            \"box-shadow\"                 : \"webkit moz\",\n            \"column-count\"               : \"webkit moz ms\",\n            \"column-gap\"                 : \"webkit moz ms\",\n            \"column-rule\"                : \"webkit moz ms\",\n            \"column-rule-color\"          : \"webkit moz ms\",\n            \"column-rule-style\"          : \"webkit moz ms\",\n            \"column-rule-width\"          : \"webkit moz ms\",\n            \"column-width\"               : \"webkit moz ms\",\n            \"hyphens\"                    : \"epub moz\",\n            \"line-break\"                 : \"webkit ms\",\n            \"margin-end\"                 : \"webkit moz\",\n            \"margin-start\"               : \"webkit moz\",\n            \"marquee-speed\"              : \"webkit wap\",\n            \"marquee-style\"              : \"webkit wap\",\n            \"padding-end\"                : \"webkit moz\",\n            \"padding-start\"              : \"webkit moz\",\n            \"tab-size\"                   : \"moz o\",\n            \"text-size-adjust\"           : \"webkit ms\",\n            \"transform\"                  : \"webkit moz ms o\",\n            \"transform-origin\"           : \"webkit moz ms o\",\n            \"transition\"                 : \"webkit moz o\",\n            \"transition-delay\"           : \"webkit moz o\",\n            \"transition-duration\"        : \"webkit moz o\",\n            \"transition-property\"        : \"webkit moz o\",\n            \"transition-timing-function\" : \"webkit moz o\",\n            \"user-modify\"                : \"webkit moz\",\n            \"user-select\"                : \"webkit moz ms\",\n            \"word-break\"                 : \"epub ms\",\n            \"writing-mode\"               : \"epub ms\"\n        };\n\n\n        for (prop in compatiblePrefixes) {\n            if (compatiblePrefixes.hasOwnProperty(prop)) {\n                variations = [];\n                prefixed = compatiblePrefixes[prop].split(\" \");\n                for (i = 0, len = prefixed.length; i < len; i++) {\n                    variations.push(\"-\" + prefixed[i] + \"-\" + prop);\n                }\n                compatiblePrefixes[prop] = variations;\n                arrayPush.apply(applyTo, variations);\n            }\n        }\n\n        parser.addListener(\"startrule\", function () {\n            properties = [];\n        });\n\n        parser.addListener(\"startkeyframes\", function (event) {\n            inKeyFrame = event.prefix || true;\n        });\n\n        parser.addListener(\"endkeyframes\", function () {\n            inKeyFrame = false;\n        });\n\n        parser.addListener(\"property\", function (event) {\n            var name = event.property;\n            if (CSSLint.Util.indexOf(applyTo, name.text) > -1) {\n\n                // e.g., -moz-transform is okay to be alone in @-moz-keyframes\n                if (!inKeyFrame || typeof inKeyFrame !== \"string\" ||\n                        name.text.indexOf(\"-\" + inKeyFrame + \"-\") !== 0) {\n                    properties.push(name);\n                }\n            }\n        });\n\n        parser.addListener(\"endrule\", function () {\n            if (!properties.length) {\n                return;\n            }\n\n            var propertyGroups = {},\n                i,\n                len,\n                name,\n                prop,\n                variations,\n                value,\n                full,\n                actual,\n                item,\n                propertiesSpecified;\n\n            for (i = 0, len = properties.length; i < len; i++) {\n                name = properties[i];\n\n                for (prop in compatiblePrefixes) {\n                    if (compatiblePrefixes.hasOwnProperty(prop)) {\n                        variations = compatiblePrefixes[prop];\n                        if (CSSLint.Util.indexOf(variations, name.text) > -1) {\n                            if (!propertyGroups[prop]) {\n                                propertyGroups[prop] = {\n                                    full : variations.slice(0),\n                                    actual : [],\n                                    actualNodes: []\n                                };\n                            }\n                            if (CSSLint.Util.indexOf(propertyGroups[prop].actual, name.text) === -1) {\n                                propertyGroups[prop].actual.push(name.text);\n                                propertyGroups[prop].actualNodes.push(name);\n                            }\n                        }\n                    }\n                }\n            }\n\n            for (prop in propertyGroups) {\n                if (propertyGroups.hasOwnProperty(prop)) {\n                    value = propertyGroups[prop];\n                    full = value.full;\n                    actual = value.actual;\n\n                    if (full.length > actual.length) {\n                        for (i = 0, len = full.length; i < len; i++) {\n                            item = full[i];\n                            if (CSSLint.Util.indexOf(actual, item) === -1) {\n                                propertiesSpecified = (actual.length === 1) ? actual[0] : (actual.length === 2) ? actual.join(\" and \") : actual.join(\", \");\n                                reporter.report(\"The property \" + item + \" is compatible with \" + propertiesSpecified + \" and should be included as well.\", value.actualNodes[0].line, value.actualNodes[0].col, rule);\n                            }\n                        }\n\n                    }\n                }\n            }\n        });\n    }\n});\n\n/*\n * Rule: Certain properties don't play well with certain display values.\n * - float should not be used with inline-block\n * - height, width, margin-top, margin-bottom, float should not be used with inline\n * - vertical-align should not be used with block\n * - margin, float should not be used with table-*\n */\n\nCSSLint.addRule({\n\n    //rule information\n    id: \"display-property-grouping\",\n    name: \"Require properties appropriate for display\",\n    desc: \"Certain properties shouldn't be used with certain display property values.\",\n    browsers: \"All\",\n\n    //initialization\n    init: function(parser, reporter){\n        var rule = this;\n\n        var propertiesToCheck = {\n                display: 1,\n                \"float\": \"none\",\n                height: 1,\n                width: 1,\n                margin: 1,\n                \"margin-left\": 1,\n                \"margin-right\": 1,\n                \"margin-bottom\": 1,\n                \"margin-top\": 1,\n                padding: 1,\n                \"padding-left\": 1,\n                \"padding-right\": 1,\n                \"padding-bottom\": 1,\n                \"padding-top\": 1,\n                \"vertical-align\": 1\n            },\n            properties;\n\n        function reportProperty(name, display, msg){\n            if (properties[name]){\n                if (typeof propertiesToCheck[name] !== \"string\" || properties[name].value.toLowerCase() !== propertiesToCheck[name]){\n                    reporter.report(msg || name + \" can't be used with display: \" + display + \".\", properties[name].line, properties[name].col, rule);\n                }\n            }\n        }\n\n        function startRule(){\n            properties = {};\n        }\n\n        function endRule(){\n\n            var display = properties.display ? properties.display.value : null;\n            if (display){\n                switch(display){\n\n                    case \"inline\":\n                        //height, width, margin-top, margin-bottom, float should not be used with inline\n                        reportProperty(\"height\", display);\n                        reportProperty(\"width\", display);\n                        reportProperty(\"margin\", display);\n                        reportProperty(\"margin-top\", display);\n                        reportProperty(\"margin-bottom\", display);\n                        reportProperty(\"float\", display, \"display:inline has no effect on floated elements (but may be used to fix the IE6 double-margin bug).\");\n                        break;\n\n                    case \"block\":\n                        //vertical-align should not be used with block\n                        reportProperty(\"vertical-align\", display);\n                        break;\n\n                    case \"inline-block\":\n                        //float should not be used with inline-block\n                        reportProperty(\"float\", display);\n                        break;\n\n                    default:\n                        //margin, float should not be used with table\n                        if (display.indexOf(\"table-\") === 0){\n                            reportProperty(\"margin\", display);\n                            reportProperty(\"margin-left\", display);\n                            reportProperty(\"margin-right\", display);\n                            reportProperty(\"margin-top\", display);\n                            reportProperty(\"margin-bottom\", display);\n                            reportProperty(\"float\", display);\n                        }\n\n                        //otherwise do nothing\n                }\n            }\n\n        }\n\n        parser.addListener(\"startrule\", startRule);\n        parser.addListener(\"startfontface\", startRule);\n        parser.addListener(\"startkeyframerule\", startRule);\n        parser.addListener(\"startpagemargin\", startRule);\n        parser.addListener(\"startpage\", startRule);\n\n        parser.addListener(\"property\", function(event){\n            var name = event.property.text.toLowerCase();\n\n            if (propertiesToCheck[name]){\n                properties[name] = { value: event.value.text, line: event.property.line, col: event.property.col };\n            }\n        });\n\n        parser.addListener(\"endrule\", endRule);\n        parser.addListener(\"endfontface\", endRule);\n        parser.addListener(\"endkeyframerule\", endRule);\n        parser.addListener(\"endpagemargin\", endRule);\n        parser.addListener(\"endpage\", endRule);\n\n    }\n\n});\n\n/*\n * Rule: Disallow duplicate background-images (using url).\n */\n\nCSSLint.addRule({\n\n    //rule information\n    id: \"duplicate-background-images\",\n    name: \"Disallow duplicate background images\",\n    desc: \"Every background-image should be unique. Use a common class for e.g. sprites.\",\n    browsers: \"All\",\n\n    //initialization\n    init: function(parser, reporter){\n        var rule = this,\n            stack = {};\n\n        parser.addListener(\"property\", function(event){\n            var name = event.property.text,\n                value = event.value,\n                i, len;\n\n            if (name.match(/background/i)) {\n                for (i=0, len=value.parts.length; i < len; i++) {\n                    if (value.parts[i].type === \"uri\") {\n                        if (typeof stack[value.parts[i].uri] === \"undefined\") {\n                            stack[value.parts[i].uri] = event;\n                        }\n                        else {\n                            reporter.report(\"Background image '\" + value.parts[i].uri + \"' was used multiple times, first declared at line \" + stack[value.parts[i].uri].line + \", col \" + stack[value.parts[i].uri].col + \".\", event.line, event.col, rule);\n                        }\n                    }\n                }\n            }\n        });\n    }\n});\n\n/*\n * Rule: Duplicate properties must appear one after the other. If an already-defined\n * property appears somewhere else in the rule, then it's likely an error.\n */\n\nCSSLint.addRule({\n\n    //rule information\n    id: \"duplicate-properties\",\n    name: \"Disallow duplicate properties\",\n    desc: \"Duplicate properties must appear one after the other.\",\n    browsers: \"All\",\n\n    //initialization\n    init: function(parser, reporter){\n        var rule = this,\n            properties,\n            lastProperty;\n\n        function startRule(){\n            properties = {};\n        }\n\n        parser.addListener(\"startrule\", startRule);\n        parser.addListener(\"startfontface\", startRule);\n        parser.addListener(\"startpage\", startRule);\n        parser.addListener(\"startpagemargin\", startRule);\n        parser.addListener(\"startkeyframerule\", startRule);\n\n        parser.addListener(\"property\", function(event){\n            var property = event.property,\n                name = property.text.toLowerCase();\n\n            if (properties[name] && (lastProperty !== name || properties[name] === event.value.text)){\n                reporter.report(\"Duplicate property '\" + event.property + \"' found.\", event.line, event.col, rule);\n            }\n\n            properties[name] = event.value.text;\n            lastProperty = name;\n\n        });\n\n\n    }\n\n});\n\n/*\n * Rule: Style rules without any properties defined should be removed.\n */\n\nCSSLint.addRule({\n\n    //rule information\n    id: \"empty-rules\",\n    name: \"Disallow empty rules\",\n    desc: \"Rules without any properties specified should be removed.\",\n    browsers: \"All\",\n\n    //initialization\n    init: function(parser, reporter){\n        var rule = this,\n            count = 0;\n\n        parser.addListener(\"startrule\", function(){\n            count=0;\n        });\n\n        parser.addListener(\"property\", function(){\n            count++;\n        });\n\n        parser.addListener(\"endrule\", function(event){\n            var selectors = event.selectors;\n            if (count === 0){\n                reporter.report(\"Rule is empty.\", selectors[0].line, selectors[0].col, rule);\n            }\n        });\n    }\n\n});\n\n/*\n * Rule: There should be no syntax errors. (Duh.)\n */\n\nCSSLint.addRule({\n\n    //rule information\n    id: \"errors\",\n    name: \"Parsing Errors\",\n    desc: \"This rule looks for recoverable syntax errors.\",\n    browsers: \"All\",\n\n    //initialization\n    init: function(parser, reporter){\n        var rule = this;\n\n        parser.addListener(\"error\", function(event){\n            reporter.error(event.message, event.line, event.col, rule);\n        });\n\n    }\n\n});\n\nCSSLint.addRule({\n\n    //rule information\n    id: \"fallback-colors\",\n    name: \"Require fallback colors\",\n    desc: \"For older browsers that don't support RGBA, HSL, or HSLA, provide a fallback color.\",\n    browsers: \"IE6,IE7,IE8\",\n\n    //initialization\n    init: function(parser, reporter){\n        var rule = this,\n            lastProperty,\n            propertiesToCheck = {\n                color: 1,\n                background: 1,\n                \"border-color\": 1,\n                \"border-top-color\": 1,\n                \"border-right-color\": 1,\n                \"border-bottom-color\": 1,\n                \"border-left-color\": 1,\n                border: 1,\n                \"border-top\": 1,\n                \"border-right\": 1,\n                \"border-bottom\": 1,\n                \"border-left\": 1,\n                \"background-color\": 1\n            },\n            properties;\n\n        function startRule(){\n            properties = {};\n            lastProperty = null;\n        }\n\n        parser.addListener(\"startrule\", startRule);\n        parser.addListener(\"startfontface\", startRule);\n        parser.addListener(\"startpage\", startRule);\n        parser.addListener(\"startpagemargin\", startRule);\n        parser.addListener(\"startkeyframerule\", startRule);\n\n        parser.addListener(\"property\", function(event){\n            var property = event.property,\n                name = property.text.toLowerCase(),\n                parts = event.value.parts,\n                i = 0,\n                colorType = \"\",\n                len = parts.length;\n\n            if(propertiesToCheck[name]){\n                while(i < len){\n                    if (parts[i].type === \"color\"){\n                        if (\"alpha\" in parts[i] || \"hue\" in parts[i]){\n\n                            if (/([^\\)]+)\\(/.test(parts[i])){\n                                colorType = RegExp.$1.toUpperCase();\n                            }\n\n                            if (!lastProperty || (lastProperty.property.text.toLowerCase() !== name || lastProperty.colorType !== \"compat\")){\n                                reporter.report(\"Fallback \" + name + \" (hex or RGB) should precede \" + colorType + \" \" + name + \".\", event.line, event.col, rule);\n                            }\n                        } else {\n                            event.colorType = \"compat\";\n                        }\n                    }\n\n                    i++;\n                }\n            }\n\n            lastProperty = event;\n        });\n\n    }\n\n});\n\n/*\n * Rule: You shouldn't use more than 10 floats. If you do, there's probably\n * room for some abstraction.\n */\n\nCSSLint.addRule({\n\n    //rule information\n    id: \"floats\",\n    name: \"Disallow too many floats\",\n    desc: \"This rule tests if the float property is used too many times\",\n    browsers: \"All\",\n\n    //initialization\n    init: function(parser, reporter){\n        var rule = this;\n        var count = 0;\n\n        //count how many times \"float\" is used\n        parser.addListener(\"property\", function(event){\n            if (event.property.text.toLowerCase() === \"float\" &&\n                    event.value.text.toLowerCase() !== \"none\"){\n                count++;\n            }\n        });\n\n        //report the results\n        parser.addListener(\"endstylesheet\", function(){\n            reporter.stat(\"floats\", count);\n            if (count >= 10){\n                reporter.rollupWarn(\"Too many floats (\" + count + \"), you're probably using them for layout. Consider using a grid system instead.\", rule);\n            }\n        });\n    }\n\n});\n\n/*\n * Rule: Avoid too many @font-face declarations in the same stylesheet.\n */\n\nCSSLint.addRule({\n\n    //rule information\n    id: \"font-faces\",\n    name: \"Don't use too many web fonts\",\n    desc: \"Too many different web fonts in the same stylesheet.\",\n    browsers: \"All\",\n\n    //initialization\n    init: function(parser, reporter){\n        var rule = this,\n            count = 0;\n\n\n        parser.addListener(\"startfontface\", function(){\n            count++;\n        });\n\n        parser.addListener(\"endstylesheet\", function(){\n            if (count > 5){\n                reporter.rollupWarn(\"Too many @font-face declarations (\" + count + \").\", rule);\n            }\n        });\n    }\n\n});\n\n/*\n * Rule: You shouldn't need more than 9 font-size declarations.\n */\n\nCSSLint.addRule({\n\n    //rule information\n    id: \"font-sizes\",\n    name: \"Disallow too many font sizes\",\n    desc: \"Checks the number of font-size declarations.\",\n    browsers: \"All\",\n\n    //initialization\n    init: function(parser, reporter){\n        var rule = this,\n            count = 0;\n\n        //check for use of \"font-size\"\n        parser.addListener(\"property\", function(event){\n            if (event.property.toString() === \"font-size\"){\n                count++;\n            }\n        });\n\n        //report the results\n        parser.addListener(\"endstylesheet\", function(){\n            reporter.stat(\"font-sizes\", count);\n            if (count >= 10){\n                reporter.rollupWarn(\"Too many font-size declarations (\" + count + \"), abstraction needed.\", rule);\n            }\n        });\n    }\n\n});\n\n/*\n * Rule: When using a vendor-prefixed gradient, make sure to use them all.\n */\n\nCSSLint.addRule({\n\n    //rule information\n    id: \"gradients\",\n    name: \"Require all gradient definitions\",\n    desc: \"When using a vendor-prefixed gradient, make sure to use them all.\",\n    browsers: \"All\",\n\n    //initialization\n    init: function(parser, reporter){\n        var rule = this,\n            gradients;\n\n        parser.addListener(\"startrule\", function(){\n            gradients = {\n                moz: 0,\n                webkit: 0,\n                oldWebkit: 0,\n                o: 0\n            };\n        });\n\n        parser.addListener(\"property\", function(event){\n\n            if (/\\-(moz|o|webkit)(?:\\-(?:linear|radial))\\-gradient/i.test(event.value)){\n                gradients[RegExp.$1] = 1;\n            } else if (/\\-webkit\\-gradient/i.test(event.value)){\n                gradients.oldWebkit = 1;\n            }\n\n        });\n\n        parser.addListener(\"endrule\", function(event){\n            var missing = [];\n\n            if (!gradients.moz){\n                missing.push(\"Firefox 3.6+\");\n            }\n\n            if (!gradients.webkit){\n                missing.push(\"Webkit (Safari 5+, Chrome)\");\n            }\n\n            if (!gradients.oldWebkit){\n                missing.push(\"Old Webkit (Safari 4+, Chrome)\");\n            }\n\n            if (!gradients.o){\n                missing.push(\"Opera 11.1+\");\n            }\n\n            if (missing.length && missing.length < 4){\n                reporter.report(\"Missing vendor-prefixed CSS gradients for \" + missing.join(\", \") + \".\", event.selectors[0].line, event.selectors[0].col, rule);\n            }\n\n        });\n\n    }\n\n});\n\n/*\n * Rule: Don't use IDs for selectors.\n */\n\nCSSLint.addRule({\n\n    //rule information\n    id: \"ids\",\n    name: \"Disallow IDs in selectors\",\n    desc: \"Selectors should not contain IDs.\",\n    browsers: \"All\",\n\n    //initialization\n    init: function(parser, reporter){\n        var rule = this;\n        parser.addListener(\"startrule\", function(event){\n            var selectors = event.selectors,\n                selector,\n                part,\n                modifier,\n                idCount,\n                i, j, k;\n\n            for (i=0; i < selectors.length; i++){\n                selector = selectors[i];\n                idCount = 0;\n\n                for (j=0; j < selector.parts.length; j++){\n                    part = selector.parts[j];\n                    if (part.type === parser.SELECTOR_PART_TYPE){\n                        for (k=0; k < part.modifiers.length; k++){\n                            modifier = part.modifiers[k];\n                            if (modifier.type === \"id\"){\n                                idCount++;\n                            }\n                        }\n                    }\n                }\n\n                if (idCount === 1){\n                    reporter.report(\"Don't use IDs in selectors.\", selector.line, selector.col, rule);\n                } else if (idCount > 1){\n                    reporter.report(idCount + \" IDs in the selector, really?\", selector.line, selector.col, rule);\n                }\n            }\n\n        });\n    }\n\n});\n\n/*\n * Rule: Don't use @import, use <link> instead.\n */\n\nCSSLint.addRule({\n\n    //rule information\n    id: \"import\",\n    name: \"Disallow @import\",\n    desc: \"Don't use @import, use <link> instead.\",\n    browsers: \"All\",\n\n    //initialization\n    init: function(parser, reporter){\n        var rule = this;\n\n        parser.addListener(\"import\", function(event){\n            reporter.report(\"@import prevents parallel downloads, use <link> instead.\", event.line, event.col, rule);\n        });\n\n    }\n\n});\n\n/*\n * Rule: Make sure !important is not overused, this could lead to specificity\n * war. Display a warning on !important declarations, an error if it's\n * used more at least 10 times.\n */\n\nCSSLint.addRule({\n\n    //rule information\n    id: \"important\",\n    name: \"Disallow !important\",\n    desc: \"Be careful when using !important declaration\",\n    browsers: \"All\",\n\n    //initialization\n    init: function(parser, reporter){\n        var rule = this,\n            count = 0;\n\n        //warn that important is used and increment the declaration counter\n        parser.addListener(\"property\", function(event){\n            if (event.important === true){\n                count++;\n                reporter.report(\"Use of !important\", event.line, event.col, rule);\n            }\n        });\n\n        //if there are more than 10, show an error\n        parser.addListener(\"endstylesheet\", function(){\n            reporter.stat(\"important\", count);\n            if (count >= 10){\n                reporter.rollupWarn(\"Too many !important declarations (\" + count + \"), try to use less than 10 to avoid specificity issues.\", rule);\n            }\n        });\n    }\n\n});\n\n/*\n * Rule: Properties should be known (listed in CSS3 specification) or\n * be a vendor-prefixed property.\n */\n\nCSSLint.addRule({\n\n    //rule information\n    id: \"known-properties\",\n    name: \"Require use of known properties\",\n    desc: \"Properties should be known (listed in CSS3 specification) or be a vendor-prefixed property.\",\n    browsers: \"All\",\n\n    //initialization\n    init: function(parser, reporter){\n        var rule = this;\n\n        parser.addListener(\"property\", function(event){\n\n            // the check is handled entirely by the parser-lib (https://github.com/nzakas/parser-lib)\n            if (event.invalid) {\n                reporter.report(event.invalid.message, event.line, event.col, rule);\n            }\n\n        });\n    }\n\n});\n\n/*\n * Rule: All properties should be in alphabetical order..\n */\n/*global CSSLint*/\nCSSLint.addRule({\n\n    //rule information\n    id: \"order-alphabetical\",\n    name: \"Alphabetical order\",\n    desc: \"Assure properties are in alphabetical order\",\n    browsers: \"All\",\n\n    //initialization\n    init: function(parser, reporter){\n        var rule = this,\n            properties;\n\n        var startRule = function () {\n            properties = [];\n        };\n\n        parser.addListener(\"startrule\", startRule);\n        parser.addListener(\"startfontface\", startRule);\n        parser.addListener(\"startpage\", startRule);\n        parser.addListener(\"startpagemargin\", startRule);\n        parser.addListener(\"startkeyframerule\", startRule);\n\n        parser.addListener(\"property\", function(event){\n            var name = event.property.text,\n                lowerCasePrefixLessName = name.toLowerCase().replace(/^-.*?-/, \"\");\n\n            properties.push(lowerCasePrefixLessName);\n        });\n\n        parser.addListener(\"endrule\", function(event){\n            var currentProperties = properties.join(\",\"),\n                expectedProperties = properties.sort().join(\",\");\n\n            if (currentProperties !== expectedProperties){\n                reporter.report(\"Rule doesn't have all its properties in alphabetical ordered.\", event.line, event.col, rule);\n            }\n        });\n    }\n\n});\n\n/*\n * Rule: outline: none or outline: 0 should only be used in a :focus rule\n *       and only if there are other properties in the same rule.\n */\n\nCSSLint.addRule({\n\n    //rule information\n    id: \"outline-none\",\n    name: \"Disallow outline: none\",\n    desc: \"Use of outline: none or outline: 0 should be limited to :focus rules.\",\n    browsers: \"All\",\n    tags: [\"Accessibility\"],\n\n    //initialization\n    init: function(parser, reporter){\n        var rule = this,\n            lastRule;\n\n        function startRule(event){\n            if (event.selectors){\n                lastRule = {\n                    line: event.line,\n                    col: event.col,\n                    selectors: event.selectors,\n                    propCount: 0,\n                    outline: false\n                };\n            } else {\n                lastRule = null;\n            }\n        }\n\n        function endRule(){\n            if (lastRule){\n                if (lastRule.outline){\n                    if (lastRule.selectors.toString().toLowerCase().indexOf(\":focus\") === -1){\n                        reporter.report(\"Outlines should only be modified using :focus.\", lastRule.line, lastRule.col, rule);\n                    } else if (lastRule.propCount === 1) {\n                        reporter.report(\"Outlines shouldn't be hidden unless other visual changes are made.\", lastRule.line, lastRule.col, rule);\n                    }\n                }\n            }\n        }\n\n        parser.addListener(\"startrule\", startRule);\n        parser.addListener(\"startfontface\", startRule);\n        parser.addListener(\"startpage\", startRule);\n        parser.addListener(\"startpagemargin\", startRule);\n        parser.addListener(\"startkeyframerule\", startRule);\n\n        parser.addListener(\"property\", function(event){\n            var name = event.property.text.toLowerCase(),\n                value = event.value;\n\n            if (lastRule){\n                lastRule.propCount++;\n                if (name === \"outline\" && (value.toString() === \"none\" || value.toString() === \"0\")){\n                    lastRule.outline = true;\n                }\n            }\n\n        });\n\n        parser.addListener(\"endrule\", endRule);\n        parser.addListener(\"endfontface\", endRule);\n        parser.addListener(\"endpage\", endRule);\n        parser.addListener(\"endpagemargin\", endRule);\n        parser.addListener(\"endkeyframerule\", endRule);\n\n    }\n\n});\n\n/*\n * Rule: Don't use classes or IDs with elements (a.foo or a#foo).\n */\n\nCSSLint.addRule({\n\n    //rule information\n    id: \"overqualified-elements\",\n    name: \"Disallow overqualified elements\",\n    desc: \"Don't use classes or IDs with elements (a.foo or a#foo).\",\n    browsers: \"All\",\n\n    //initialization\n    init: function(parser, reporter){\n        var rule = this,\n            classes = {};\n\n        parser.addListener(\"startrule\", function(event){\n            var selectors = event.selectors,\n                selector,\n                part,\n                modifier,\n                i, j, k;\n\n            for (i=0; i < selectors.length; i++){\n                selector = selectors[i];\n\n                for (j=0; j < selector.parts.length; j++){\n                    part = selector.parts[j];\n                    if (part.type === parser.SELECTOR_PART_TYPE){\n                        for (k=0; k < part.modifiers.length; k++){\n                            modifier = part.modifiers[k];\n                            if (part.elementName && modifier.type === \"id\"){\n                                reporter.report(\"Element (\" + part + \") is overqualified, just use \" + modifier + \" without element name.\", part.line, part.col, rule);\n                            } else if (modifier.type === \"class\"){\n\n                                if (!classes[modifier]){\n                                    classes[modifier] = [];\n                                }\n                                classes[modifier].push({ modifier: modifier, part: part });\n                            }\n                        }\n                    }\n                }\n            }\n        });\n\n        parser.addListener(\"endstylesheet\", function(){\n\n            var prop;\n            for (prop in classes){\n                if (classes.hasOwnProperty(prop)){\n\n                    //one use means that this is overqualified\n                    if (classes[prop].length === 1 && classes[prop][0].part.elementName){\n                        reporter.report(\"Element (\" + classes[prop][0].part + \") is overqualified, just use \" + classes[prop][0].modifier + \" without element name.\", classes[prop][0].part.line, classes[prop][0].part.col, rule);\n                    }\n                }\n            }\n        });\n    }\n\n});\n\n/*\n * Rule: Headings (h1-h6) should not be qualified (namespaced).\n */\n\nCSSLint.addRule({\n\n    //rule information\n    id: \"qualified-headings\",\n    name: \"Disallow qualified headings\",\n    desc: \"Headings should not be qualified (namespaced).\",\n    browsers: \"All\",\n\n    //initialization\n    init: function(parser, reporter){\n        var rule = this;\n\n        parser.addListener(\"startrule\", function(event){\n            var selectors = event.selectors,\n                selector,\n                part,\n                i, j;\n\n            for (i=0; i < selectors.length; i++){\n                selector = selectors[i];\n\n                for (j=0; j < selector.parts.length; j++){\n                    part = selector.parts[j];\n                    if (part.type === parser.SELECTOR_PART_TYPE){\n                        if (part.elementName && /h[1-6]/.test(part.elementName.toString()) && j > 0){\n                            reporter.report(\"Heading (\" + part.elementName + \") should not be qualified.\", part.line, part.col, rule);\n                        }\n                    }\n                }\n            }\n        });\n    }\n\n});\n\n/*\n * Rule: Selectors that look like regular expressions are slow and should be avoided.\n */\n\nCSSLint.addRule({\n\n    //rule information\n    id: \"regex-selectors\",\n    name: \"Disallow selectors that look like regexs\",\n    desc: \"Selectors that look like regular expressions are slow and should be avoided.\",\n    browsers: \"All\",\n\n    //initialization\n    init: function(parser, reporter){\n        var rule = this;\n\n        parser.addListener(\"startrule\", function(event){\n            var selectors = event.selectors,\n                selector,\n                part,\n                modifier,\n                i, j, k;\n\n            for (i=0; i < selectors.length; i++){\n                selector = selectors[i];\n                for (j=0; j < selector.parts.length; j++){\n                    part = selector.parts[j];\n                    if (part.type === parser.SELECTOR_PART_TYPE){\n                        for (k=0; k < part.modifiers.length; k++){\n                            modifier = part.modifiers[k];\n                            if (modifier.type === \"attribute\"){\n                                if (/([\\~\\|\\^\\$\\*]=)/.test(modifier)){\n                                    reporter.report(\"Attribute selectors with \" + RegExp.$1 + \" are slow!\", modifier.line, modifier.col, rule);\n                                }\n                            }\n\n                        }\n                    }\n                }\n            }\n        });\n    }\n\n});\n\n/*\n * Rule: Total number of rules should not exceed x.\n */\n\nCSSLint.addRule({\n\n    //rule information\n    id: \"rules-count\",\n    name: \"Rules Count\",\n    desc: \"Track how many rules there are.\",\n    browsers: \"All\",\n\n    //initialization\n    init: function(parser, reporter){\n        var count = 0;\n\n        //count each rule\n        parser.addListener(\"startrule\", function(){\n            count++;\n        });\n\n        parser.addListener(\"endstylesheet\", function(){\n            reporter.stat(\"rule-count\", count);\n        });\n    }\n\n});\n\n/*\n * Rule: Warn people with approaching the IE 4095 limit\n */\n\nCSSLint.addRule({\n\n    //rule information\n    id: \"selector-max-approaching\",\n    name: \"Warn when approaching the 4095 selector limit for IE\",\n    desc: \"Will warn when selector count is >= 3800 selectors.\",\n    browsers: \"IE\",\n\n    //initialization\n    init: function(parser, reporter) {\n        var rule = this, count = 0;\n\n        parser.addListener(\"startrule\", function(event) {\n            count += event.selectors.length;\n        });\n\n        parser.addListener(\"endstylesheet\", function() {\n            if (count >= 3800) {\n                reporter.report(\"You have \" + count + \" selectors. Internet Explorer supports a maximum of 4095 selectors per stylesheet. Consider refactoring.\",0,0,rule);\n            }\n        });\n    }\n\n});\n\n/*\n * Rule: Warn people past the IE 4095 limit\n */\n\nCSSLint.addRule({\n\n    //rule information\n    id: \"selector-max\",\n    name: \"Error when past the 4095 selector limit for IE\",\n    desc: \"Will error when selector count is > 4095.\",\n    browsers: \"IE\",\n\n    //initialization\n    init: function(parser, reporter){\n        var rule = this, count = 0;\n\n        parser.addListener(\"startrule\", function(event) {\n            count += event.selectors.length;\n        });\n\n        parser.addListener(\"endstylesheet\", function() {\n            if (count > 4095) {\n                reporter.report(\"You have \" + count + \" selectors. Internet Explorer supports a maximum of 4095 selectors per stylesheet. Consider refactoring.\",0,0,rule);\n            }\n        });\n    }\n\n});\n\n/*\n * Rule: Avoid new-line characters in selectors.\n */\n\nCSSLint.addRule({\n\n    //rule information\n    id: \"selector-newline\",\n    name: \"Disallow new-line characters in selectors\",\n    desc: \"New-line characters in selectors are usually a forgotten comma and not a descendant combinator.\",\n    browsers: \"All\",\n\n    //initialization\n    init: function(parser, reporter) {\n        var rule = this;\n\n        function startRule(event) {\n            var i, len, selector, p, n, pLen, part, part2, type, currentLine, nextLine,\n                selectors = event.selectors;\n\n            for (i = 0, len = selectors.length; i < len; i++) {\n                selector = selectors[i];\n                for (p = 0, pLen = selector.parts.length; p < pLen; p++) {\n                    for (n = p + 1; n < pLen; n++) {\n                        part = selector.parts[p];\n                        part2 = selector.parts[n];\n                        type = part.type;\n                        currentLine = part.line;\n                        nextLine = part2.line;\n\n                        if (type === \"descendant\" && nextLine > currentLine) {\n                            reporter.report(\"newline character found in selector (forgot a comma?)\", currentLine, selectors[i].parts[0].col, rule);\n                        }\n                    }\n                }\n\n            }\n        }\n\n        parser.addListener(\"startrule\", startRule);\n\n    }\n});\n\n/*\n * Rule: Use shorthand properties where possible.\n *\n */\n\nCSSLint.addRule({\n\n    //rule information\n    id: \"shorthand\",\n    name: \"Require shorthand properties\",\n    desc: \"Use shorthand properties where possible.\",\n    browsers: \"All\",\n\n    //initialization\n    init: function(parser, reporter){\n        var rule = this,\n            prop, i, len,\n            propertiesToCheck = {},\n            properties,\n            mapping = {\n                \"margin\": [\n                    \"margin-top\",\n                    \"margin-bottom\",\n                    \"margin-left\",\n                    \"margin-right\"\n                ],\n                \"padding\": [\n                    \"padding-top\",\n                    \"padding-bottom\",\n                    \"padding-left\",\n                    \"padding-right\"\n                ]\n            };\n\n        //initialize propertiesToCheck\n        for (prop in mapping){\n            if (mapping.hasOwnProperty(prop)){\n                for (i=0, len=mapping[prop].length; i < len; i++){\n                    propertiesToCheck[mapping[prop][i]] = prop;\n                }\n            }\n        }\n\n        function startRule(){\n            properties = {};\n        }\n\n        //event handler for end of rules\n        function endRule(event){\n\n            var prop, i, len, total;\n\n            //check which properties this rule has\n            for (prop in mapping){\n                if (mapping.hasOwnProperty(prop)){\n                    total=0;\n\n                    for (i=0, len=mapping[prop].length; i < len; i++){\n                        total += properties[mapping[prop][i]] ? 1 : 0;\n                    }\n\n                    if (total === mapping[prop].length){\n                        reporter.report(\"The properties \" + mapping[prop].join(\", \") + \" can be replaced by \" + prop + \".\", event.line, event.col, rule);\n                    }\n                }\n            }\n        }\n\n        parser.addListener(\"startrule\", startRule);\n        parser.addListener(\"startfontface\", startRule);\n\n        //check for use of \"font-size\"\n        parser.addListener(\"property\", function(event){\n            var name = event.property.toString().toLowerCase();\n\n            if (propertiesToCheck[name]){\n                properties[name] = 1;\n            }\n        });\n\n        parser.addListener(\"endrule\", endRule);\n        parser.addListener(\"endfontface\", endRule);\n\n    }\n\n});\n\n/*\n * Rule: Don't use properties with a star prefix.\n *\n */\n\nCSSLint.addRule({\n\n    //rule information\n    id: \"star-property-hack\",\n    name: \"Disallow properties with a star prefix\",\n    desc: \"Checks for the star property hack (targets IE6/7)\",\n    browsers: \"All\",\n\n    //initialization\n    init: function(parser, reporter){\n        var rule = this;\n\n        //check if property name starts with \"*\"\n        parser.addListener(\"property\", function(event){\n            var property = event.property;\n\n            if (property.hack === \"*\") {\n                reporter.report(\"Property with star prefix found.\", event.property.line, event.property.col, rule);\n            }\n        });\n    }\n});\n\n/*\n * Rule: Don't use text-indent for image replacement if you need to support rtl.\n *\n */\n\nCSSLint.addRule({\n\n    //rule information\n    id: \"text-indent\",\n    name: \"Disallow negative text-indent\",\n    desc: \"Checks for text indent less than -99px\",\n    browsers: \"All\",\n\n    //initialization\n    init: function(parser, reporter){\n        var rule = this,\n            textIndent,\n            direction;\n\n\n        function startRule(){\n            textIndent = false;\n            direction = \"inherit\";\n        }\n\n        //event handler for end of rules\n        function endRule(){\n            if (textIndent && direction !== \"ltr\"){\n                reporter.report(\"Negative text-indent doesn't work well with RTL. If you use text-indent for image replacement explicitly set direction for that item to ltr.\", textIndent.line, textIndent.col, rule);\n            }\n        }\n\n        parser.addListener(\"startrule\", startRule);\n        parser.addListener(\"startfontface\", startRule);\n\n        //check for use of \"font-size\"\n        parser.addListener(\"property\", function(event){\n            var name = event.property.toString().toLowerCase(),\n                value = event.value;\n\n            if (name === \"text-indent\" && value.parts[0].value < -99){\n                textIndent = event.property;\n            } else if (name === \"direction\" && value.toString() === \"ltr\"){\n                direction = \"ltr\";\n            }\n        });\n\n        parser.addListener(\"endrule\", endRule);\n        parser.addListener(\"endfontface\", endRule);\n\n    }\n\n});\n\n/*\n * Rule: Don't use properties with a underscore prefix.\n *\n */\n\nCSSLint.addRule({\n\n    //rule information\n    id: \"underscore-property-hack\",\n    name: \"Disallow properties with an underscore prefix\",\n    desc: \"Checks for the underscore property hack (targets IE6)\",\n    browsers: \"All\",\n\n    //initialization\n    init: function(parser, reporter){\n        var rule = this;\n\n        //check if property name starts with \"_\"\n        parser.addListener(\"property\", function(event){\n            var property = event.property;\n\n            if (property.hack === \"_\") {\n                reporter.report(\"Property with underscore prefix found.\", event.property.line, event.property.col, rule);\n            }\n        });\n    }\n});\n\n/*\n * Rule: Headings (h1-h6) should be defined only once.\n */\n\nCSSLint.addRule({\n\n    //rule information\n    id: \"unique-headings\",\n    name: \"Headings should only be defined once\",\n    desc: \"Headings should be defined only once.\",\n    browsers: \"All\",\n\n    //initialization\n    init: function(parser, reporter){\n        var rule = this;\n\n        var headings = {\n                h1: 0,\n                h2: 0,\n                h3: 0,\n                h4: 0,\n                h5: 0,\n                h6: 0\n            };\n\n        parser.addListener(\"startrule\", function(event){\n            var selectors = event.selectors,\n                selector,\n                part,\n                pseudo,\n                i, j;\n\n            for (i=0; i < selectors.length; i++){\n                selector = selectors[i];\n                part = selector.parts[selector.parts.length-1];\n\n                if (part.elementName && /(h[1-6])/i.test(part.elementName.toString())){\n\n                    for (j=0; j < part.modifiers.length; j++){\n                        if (part.modifiers[j].type === \"pseudo\"){\n                            pseudo = true;\n                            break;\n                        }\n                    }\n\n                    if (!pseudo){\n                        headings[RegExp.$1]++;\n                        if (headings[RegExp.$1] > 1) {\n                            reporter.report(\"Heading (\" + part.elementName + \") has already been defined.\", part.line, part.col, rule);\n                        }\n                    }\n                }\n            }\n        });\n\n        parser.addListener(\"endstylesheet\", function(){\n            var prop,\n                messages = [];\n\n            for (prop in headings){\n                if (headings.hasOwnProperty(prop)){\n                    if (headings[prop] > 1){\n                        messages.push(headings[prop] + \" \" + prop + \"s\");\n                    }\n                }\n            }\n\n            if (messages.length){\n                reporter.rollupWarn(\"You have \" + messages.join(\", \") + \" defined in this stylesheet.\", rule);\n            }\n        });\n    }\n\n});\n\n/*\n * Rule: Don't use universal selector because it's slow.\n */\n\nCSSLint.addRule({\n\n    //rule information\n    id: \"universal-selector\",\n    name: \"Disallow universal selector\",\n    desc: \"The universal selector (*) is known to be slow.\",\n    browsers: \"All\",\n\n    //initialization\n    init: function(parser, reporter){\n        var rule = this;\n\n        parser.addListener(\"startrule\", function(event){\n            var selectors = event.selectors,\n                selector,\n                part,\n                i;\n\n            for (i=0; i < selectors.length; i++){\n                selector = selectors[i];\n\n                part = selector.parts[selector.parts.length-1];\n                if (part.elementName === \"*\"){\n                    reporter.report(rule.desc, part.line, part.col, rule);\n                }\n            }\n        });\n    }\n\n});\n\n/*\n * Rule: Don't use unqualified attribute selectors because they're just like universal selectors.\n */\n\nCSSLint.addRule({\n\n    //rule information\n    id: \"unqualified-attributes\",\n    name: \"Disallow unqualified attribute selectors\",\n    desc: \"Unqualified attribute selectors are known to be slow.\",\n    browsers: \"All\",\n\n    //initialization\n    init: function(parser, reporter){\n        var rule = this;\n\n        parser.addListener(\"startrule\", function(event){\n\n            var selectors = event.selectors,\n                selector,\n                part,\n                modifier,\n                i, k;\n\n            for (i=0; i < selectors.length; i++){\n                selector = selectors[i];\n\n                part = selector.parts[selector.parts.length-1];\n                if (part.type === parser.SELECTOR_PART_TYPE){\n                    for (k=0; k < part.modifiers.length; k++){\n                        modifier = part.modifiers[k];\n                        if (modifier.type === \"attribute\" && (!part.elementName || part.elementName === \"*\")){\n                            reporter.report(rule.desc, part.line, part.col, rule);\n                        }\n                    }\n                }\n\n            }\n        });\n    }\n\n});\n\n/*\n * Rule: When using a vendor-prefixed property, make sure to\n * include the standard one.\n */\n\nCSSLint.addRule({\n\n    //rule information\n    id: \"vendor-prefix\",\n    name: \"Require standard property with vendor prefix\",\n    desc: \"When using a vendor-prefixed property, make sure to include the standard one.\",\n    browsers: \"All\",\n\n    //initialization\n    init: function(parser, reporter){\n        var rule = this,\n            properties,\n            num,\n            propertiesToCheck = {\n                \"-webkit-border-radius\": \"border-radius\",\n                \"-webkit-border-top-left-radius\": \"border-top-left-radius\",\n                \"-webkit-border-top-right-radius\": \"border-top-right-radius\",\n                \"-webkit-border-bottom-left-radius\": \"border-bottom-left-radius\",\n                \"-webkit-border-bottom-right-radius\": \"border-bottom-right-radius\",\n\n                \"-o-border-radius\": \"border-radius\",\n                \"-o-border-top-left-radius\": \"border-top-left-radius\",\n                \"-o-border-top-right-radius\": \"border-top-right-radius\",\n                \"-o-border-bottom-left-radius\": \"border-bottom-left-radius\",\n                \"-o-border-bottom-right-radius\": \"border-bottom-right-radius\",\n\n                \"-moz-border-radius\": \"border-radius\",\n                \"-moz-border-radius-topleft\": \"border-top-left-radius\",\n                \"-moz-border-radius-topright\": \"border-top-right-radius\",\n                \"-moz-border-radius-bottomleft\": \"border-bottom-left-radius\",\n                \"-moz-border-radius-bottomright\": \"border-bottom-right-radius\",\n\n                \"-moz-column-count\": \"column-count\",\n                \"-webkit-column-count\": \"column-count\",\n\n                \"-moz-column-gap\": \"column-gap\",\n                \"-webkit-column-gap\": \"column-gap\",\n\n                \"-moz-column-rule\": \"column-rule\",\n                \"-webkit-column-rule\": \"column-rule\",\n\n                \"-moz-column-rule-style\": \"column-rule-style\",\n                \"-webkit-column-rule-style\": \"column-rule-style\",\n\n                \"-moz-column-rule-color\": \"column-rule-color\",\n                \"-webkit-column-rule-color\": \"column-rule-color\",\n\n                \"-moz-column-rule-width\": \"column-rule-width\",\n                \"-webkit-column-rule-width\": \"column-rule-width\",\n\n                \"-moz-column-width\": \"column-width\",\n                \"-webkit-column-width\": \"column-width\",\n\n                \"-webkit-column-span\": \"column-span\",\n                \"-webkit-columns\": \"columns\",\n\n                \"-moz-box-shadow\": \"box-shadow\",\n                \"-webkit-box-shadow\": \"box-shadow\",\n\n                \"-moz-transform\" : \"transform\",\n                \"-webkit-transform\" : \"transform\",\n                \"-o-transform\" : \"transform\",\n                \"-ms-transform\" : \"transform\",\n\n                \"-moz-transform-origin\" : \"transform-origin\",\n                \"-webkit-transform-origin\" : \"transform-origin\",\n                \"-o-transform-origin\" : \"transform-origin\",\n                \"-ms-transform-origin\" : \"transform-origin\",\n\n                \"-moz-box-sizing\" : \"box-sizing\",\n                \"-webkit-box-sizing\" : \"box-sizing\"\n            };\n\n        //event handler for beginning of rules\n        function startRule(){\n            properties = {};\n            num = 1;\n        }\n\n        //event handler for end of rules\n        function endRule(){\n            var prop,\n                i,\n                len,\n                needed,\n                actual,\n                needsStandard = [];\n\n            for (prop in properties){\n                if (propertiesToCheck[prop]){\n                    needsStandard.push({ actual: prop, needed: propertiesToCheck[prop]});\n                }\n            }\n\n            for (i=0, len=needsStandard.length; i < len; i++){\n                needed = needsStandard[i].needed;\n                actual = needsStandard[i].actual;\n\n                if (!properties[needed]){\n                    reporter.report(\"Missing standard property '\" + needed + \"' to go along with '\" + actual + \"'.\", properties[actual][0].name.line, properties[actual][0].name.col, rule);\n                } else {\n                    //make sure standard property is last\n                    if (properties[needed][0].pos < properties[actual][0].pos){\n                        reporter.report(\"Standard property '\" + needed + \"' should come after vendor-prefixed property '\" + actual + \"'.\", properties[actual][0].name.line, properties[actual][0].name.col, rule);\n                    }\n                }\n            }\n\n        }\n\n        parser.addListener(\"startrule\", startRule);\n        parser.addListener(\"startfontface\", startRule);\n        parser.addListener(\"startpage\", startRule);\n        parser.addListener(\"startpagemargin\", startRule);\n        parser.addListener(\"startkeyframerule\", startRule);\n\n        parser.addListener(\"property\", function(event){\n            var name = event.property.text.toLowerCase();\n\n            if (!properties[name]){\n                properties[name] = [];\n            }\n\n            properties[name].push({ name: event.property, value : event.value, pos:num++ });\n        });\n\n        parser.addListener(\"endrule\", endRule);\n        parser.addListener(\"endfontface\", endRule);\n        parser.addListener(\"endpage\", endRule);\n        parser.addListener(\"endpagemargin\", endRule);\n        parser.addListener(\"endkeyframerule\", endRule);\n    }\n\n});\n\n/*\n * Rule: You don't need to specify units when a value is 0.\n */\n\nCSSLint.addRule({\n\n    //rule information\n    id: \"zero-units\",\n    name: \"Disallow units for 0 values\",\n    desc: \"You don't need to specify units when a value is 0.\",\n    browsers: \"All\",\n\n    //initialization\n    init: function(parser, reporter){\n        var rule = this;\n\n        //count how many times \"float\" is used\n        parser.addListener(\"property\", function(event){\n            var parts = event.value.parts,\n                i = 0,\n                len = parts.length;\n\n            while(i < len){\n                if ((parts[i].units || parts[i].type === \"percentage\") && parts[i].value === 0 && parts[i].type !== \"time\"){\n                    reporter.report(\"Values of 0 shouldn't have units specified.\", parts[i].line, parts[i].col, rule);\n                }\n                i++;\n            }\n\n        });\n\n    }\n\n});\n\n(function() {\n\n    /**\n     * Replace special characters before write to output.\n     *\n     * Rules:\n     *  - single quotes is the escape sequence for double-quotes\n     *  - &amp; is the escape sequence for &\n     *  - &lt; is the escape sequence for <\n     *  - &gt; is the escape sequence for >\n     *\n     * @param {String} message to escape\n     * @return escaped message as {String}\n     */\n    var xmlEscape = function(str) {\n        if (!str || str.constructor !== String) {\n            return \"\";\n        }\n\n        return str.replace(/[\\\"&><]/g, function(match) {\n            switch (match) {\n                case \"\\\"\":\n                    return \"&quot;\";\n                case \"&\":\n                    return \"&amp;\";\n                case \"<\":\n                    return \"&lt;\";\n                case \">\":\n                    return \"&gt;\";\n            }\n        });\n    };\n\n    CSSLint.addFormatter({\n        //format information\n        id: \"checkstyle-xml\",\n        name: \"Checkstyle XML format\",\n\n        /**\n         * Return opening root XML tag.\n         * @return {String} to prepend before all results\n         */\n        startFormat: function(){\n            return \"<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"?><checkstyle>\";\n        },\n\n        /**\n         * Return closing root XML tag.\n         * @return {String} to append after all results\n         */\n        endFormat: function(){\n            return \"</checkstyle>\";\n        },\n\n        /**\n         * Returns message when there is a file read error.\n         * @param {String} filename The name of the file that caused the error.\n         * @param {String} message The error message\n         * @return {String} The error message.\n         */\n        readError: function(filename, message) {\n            return \"<file name=\\\"\" + xmlEscape(filename) + \"\\\"><error line=\\\"0\\\" column=\\\"0\\\" severty=\\\"error\\\" message=\\\"\" + xmlEscape(message) + \"\\\"></error></file>\";\n        },\n\n        /**\n         * Given CSS Lint results for a file, return output for this format.\n         * @param results {Object} with error and warning messages\n         * @param filename {String} relative file path\n         * @param options {Object} (UNUSED for now) specifies special handling of output\n         * @return {String} output for results\n         */\n        formatResults: function(results, filename/*, options*/) {\n            var messages = results.messages,\n                output = [];\n\n            /**\n             * Generate a source string for a rule.\n             * Checkstyle source strings usually resemble Java class names e.g\n             * net.csslint.SomeRuleName\n             * @param {Object} rule\n             * @return rule source as {String}\n             */\n            var generateSource = function(rule) {\n                if (!rule || !(\"name\" in rule)) {\n                    return \"\";\n                }\n                return \"net.csslint.\" + rule.name.replace(/\\s/g,\"\");\n            };\n\n\n\n            if (messages.length > 0) {\n                output.push(\"<file name=\\\"\"+filename+\"\\\">\");\n                CSSLint.Util.forEach(messages, function (message) {\n                    //ignore rollups for now\n                    if (!message.rollup) {\n                        output.push(\"<error line=\\\"\" + message.line + \"\\\" column=\\\"\" + message.col + \"\\\" severity=\\\"\" + message.type + \"\\\"\" +\n                          \" message=\\\"\" + xmlEscape(message.message) + \"\\\" source=\\\"\" + generateSource(message.rule) +\"\\\"/>\");\n                    }\n                });\n                output.push(\"</file>\");\n            }\n\n            return output.join(\"\");\n        }\n    });\n\n}());\n\nCSSLint.addFormatter({\n    //format information\n    id: \"compact\",\n    name: \"Compact, 'porcelain' format\",\n\n    /**\n     * Return content to be printed before all file results.\n     * @return {String} to prepend before all results\n     */\n    startFormat: function() {\n        return \"\";\n    },\n\n    /**\n     * Return content to be printed after all file results.\n     * @return {String} to append after all results\n     */\n    endFormat: function() {\n        return \"\";\n    },\n\n    /**\n     * Given CSS Lint results for a file, return output for this format.\n     * @param results {Object} with error and warning messages\n     * @param filename {String} relative file path\n     * @param options {Object} (Optional) specifies special handling of output\n     * @return {String} output for results\n     */\n    formatResults: function(results, filename, options) {\n        var messages = results.messages,\n            output = \"\";\n        options = options || {};\n\n        /**\n         * Capitalize and return given string.\n         * @param str {String} to capitalize\n         * @return {String} capitalized\n         */\n        var capitalize = function(str) {\n            return str.charAt(0).toUpperCase() + str.slice(1);\n        };\n\n        if (messages.length === 0) {\n              return options.quiet ? \"\" : filename + \": Lint Free!\";\n        }\n\n        CSSLint.Util.forEach(messages, function(message) {\n            if (message.rollup) {\n                output += filename + \": \" + capitalize(message.type) + \" - \" + message.message + \"\\n\";\n            } else {\n                output += filename + \": \" + \"line \" + message.line +\n                    \", col \" + message.col + \", \" + capitalize(message.type) + \" - \" + message.message + \" (\" + message.rule.id + \")\\n\";\n            }\n        });\n\n        return output;\n    }\n});\n\nCSSLint.addFormatter({\n    //format information\n    id: \"csslint-xml\",\n    name: \"CSSLint XML format\",\n\n    /**\n     * Return opening root XML tag.\n     * @return {String} to prepend before all results\n     */\n    startFormat: function(){\n        return \"<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"?><csslint>\";\n    },\n\n    /**\n     * Return closing root XML tag.\n     * @return {String} to append after all results\n     */\n    endFormat: function(){\n        return \"</csslint>\";\n    },\n\n    /**\n     * Given CSS Lint results for a file, return output for this format.\n     * @param results {Object} with error and warning messages\n     * @param filename {String} relative file path\n     * @param options {Object} (UNUSED for now) specifies special handling of output\n     * @return {String} output for results\n     */\n    formatResults: function(results, filename/*, options*/) {\n        var messages = results.messages,\n            output = [];\n\n        /**\n         * Replace special characters before write to output.\n         *\n         * Rules:\n         *  - single quotes is the escape sequence for double-quotes\n         *  - &amp; is the escape sequence for &\n         *  - &lt; is the escape sequence for <\n         *  - &gt; is the escape sequence for >\n         *\n         * @param {String} message to escape\n         * @return escaped message as {String}\n         */\n        var escapeSpecialCharacters = function(str) {\n            if (!str || str.constructor !== String) {\n                return \"\";\n            }\n            return str.replace(/\\\"/g, \"'\").replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n        };\n\n        if (messages.length > 0) {\n            output.push(\"<file name=\\\"\"+filename+\"\\\">\");\n            CSSLint.Util.forEach(messages, function (message) {\n                if (message.rollup) {\n                    output.push(\"<issue severity=\\\"\" + message.type + \"\\\" reason=\\\"\" + escapeSpecialCharacters(message.message) + \"\\\" evidence=\\\"\" + escapeSpecialCharacters(message.evidence) + \"\\\"/>\");\n                } else {\n                    output.push(\"<issue line=\\\"\" + message.line + \"\\\" char=\\\"\" + message.col + \"\\\" severity=\\\"\" + message.type + \"\\\"\" +\n                        \" reason=\\\"\" + escapeSpecialCharacters(message.message) + \"\\\" evidence=\\\"\" + escapeSpecialCharacters(message.evidence) + \"\\\"/>\");\n                }\n            });\n            output.push(\"</file>\");\n        }\n\n        return output.join(\"\");\n    }\n});\n\nCSSLint.addFormatter({\n    //format information\n    id: \"junit-xml\",\n    name: \"JUNIT XML format\",\n\n    /**\n     * Return opening root XML tag.\n     * @return {String} to prepend before all results\n     */\n    startFormat: function(){\n        return \"<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"?><testsuites>\";\n    },\n\n    /**\n     * Return closing root XML tag.\n     * @return {String} to append after all results\n     */\n    endFormat: function() {\n        return \"</testsuites>\";\n    },\n\n    /**\n     * Given CSS Lint results for a file, return output for this format.\n     * @param results {Object} with error and warning messages\n     * @param filename {String} relative file path\n     * @param options {Object} (UNUSED for now) specifies special handling of output\n     * @return {String} output for results\n     */\n    formatResults: function(results, filename/*, options*/) {\n\n        var messages = results.messages,\n            output = [],\n            tests = {\n                \"error\": 0,\n                \"failure\": 0\n            };\n\n        /**\n         * Generate a source string for a rule.\n         * JUNIT source strings usually resemble Java class names e.g\n         * net.csslint.SomeRuleName\n         * @param {Object} rule\n         * @return rule source as {String}\n         */\n        var generateSource = function(rule) {\n            if (!rule || !(\"name\" in rule)) {\n                return \"\";\n            }\n            return \"net.csslint.\" + rule.name.replace(/\\s/g,\"\");\n        };\n\n        /**\n         * Replace special characters before write to output.\n         *\n         * Rules:\n         *  - single quotes is the escape sequence for double-quotes\n         *  - &lt; is the escape sequence for <\n         *  - &gt; is the escape sequence for >\n         *\n         * @param {String} message to escape\n         * @return escaped message as {String}\n         */\n        var escapeSpecialCharacters = function(str) {\n\n            if (!str || str.constructor !== String) {\n                return \"\";\n            }\n\n            return str.replace(/\\\"/g, \"'\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n\n        };\n\n        if (messages.length > 0) {\n\n            messages.forEach(function (message) {\n\n                // since junit has no warning class\n                // all issues as errors\n                var type = message.type === \"warning\" ? \"error\" : message.type;\n\n                //ignore rollups for now\n                if (!message.rollup) {\n\n                    // build the test case seperately, once joined\n                    // we'll add it to a custom array filtered by type\n                    output.push(\"<testcase time=\\\"0\\\" name=\\\"\" + generateSource(message.rule) + \"\\\">\");\n                    output.push(\"<\" + type + \" message=\\\"\" + escapeSpecialCharacters(message.message) + \"\\\"><![CDATA[\" + message.line + \":\" + message.col + \":\" + escapeSpecialCharacters(message.evidence)  + \"]]></\" + type + \">\");\n                    output.push(\"</testcase>\");\n\n                    tests[type] += 1;\n\n                }\n\n            });\n\n            output.unshift(\"<testsuite time=\\\"0\\\" tests=\\\"\" + messages.length + \"\\\" skipped=\\\"0\\\" errors=\\\"\" + tests.error + \"\\\" failures=\\\"\" + tests.failure + \"\\\" package=\\\"net.csslint\\\" name=\\\"\" + filename + \"\\\">\");\n            output.push(\"</testsuite>\");\n\n        }\n\n        return output.join(\"\");\n\n    }\n});\n\nCSSLint.addFormatter({\n    //format information\n    id: \"lint-xml\",\n    name: \"Lint XML format\",\n\n    /**\n     * Return opening root XML tag.\n     * @return {String} to prepend before all results\n     */\n    startFormat: function(){\n        return \"<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"?><lint>\";\n    },\n\n    /**\n     * Return closing root XML tag.\n     * @return {String} to append after all results\n     */\n    endFormat: function(){\n        return \"</lint>\";\n    },\n\n    /**\n     * Given CSS Lint results for a file, return output for this format.\n     * @param results {Object} with error and warning messages\n     * @param filename {String} relative file path\n     * @param options {Object} (UNUSED for now) specifies special handling of output\n     * @return {String} output for results\n     */\n    formatResults: function(results, filename/*, options*/) {\n        var messages = results.messages,\n            output = [];\n\n        /**\n         * Replace special characters before write to output.\n         *\n         * Rules:\n         *  - single quotes is the escape sequence for double-quotes\n         *  - &amp; is the escape sequence for &\n         *  - &lt; is the escape sequence for <\n         *  - &gt; is the escape sequence for >\n         *\n         * @param {String} message to escape\n         * @return escaped message as {String}\n         */\n        var escapeSpecialCharacters = function(str) {\n            if (!str || str.constructor !== String) {\n                return \"\";\n            }\n            return str.replace(/\\\"/g, \"'\").replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n        };\n\n        if (messages.length > 0) {\n\n            output.push(\"<file name=\\\"\"+filename+\"\\\">\");\n            CSSLint.Util.forEach(messages, function (message) {\n                if (message.rollup) {\n                    output.push(\"<issue severity=\\\"\" + message.type + \"\\\" reason=\\\"\" + escapeSpecialCharacters(message.message) + \"\\\" evidence=\\\"\" + escapeSpecialCharacters(message.evidence) + \"\\\"/>\");\n                } else {\n                    output.push(\"<issue line=\\\"\" + message.line + \"\\\" char=\\\"\" + message.col + \"\\\" severity=\\\"\" + message.type + \"\\\"\" +\n                        \" reason=\\\"\" + escapeSpecialCharacters(message.message) + \"\\\" evidence=\\\"\" + escapeSpecialCharacters(message.evidence) + \"\\\"/>\");\n                }\n            });\n            output.push(\"</file>\");\n        }\n\n        return output.join(\"\");\n    }\n});\n\nCSSLint.addFormatter({\n    //format information\n    id: \"text\",\n    name: \"Plain Text\",\n\n    /**\n     * Return content to be printed before all file results.\n     * @return {String} to prepend before all results\n     */\n    startFormat: function() {\n        return \"\";\n    },\n\n    /**\n     * Return content to be printed after all file results.\n     * @return {String} to append after all results\n     */\n    endFormat: function() {\n        return \"\";\n    },\n\n    /**\n     * Given CSS Lint results for a file, return output for this format.\n     * @param results {Object} with error and warning messages\n     * @param filename {String} relative file path\n     * @param options {Object} (Optional) specifies special handling of output\n     * @return {String} output for results\n     */\n    formatResults: function(results, filename, options) {\n        var messages = results.messages,\n            output = \"\";\n        options = options || {};\n\n        if (messages.length === 0) {\n            return options.quiet ? \"\" : \"\\n\\ncsslint: No errors in \" + filename + \".\";\n        }\n\n        output = \"\\n\\ncsslint: There \";\n        if (messages.length === 1) {\n            output += \"is 1 problem\";\n        } else {\n            output += \"are \" + messages.length  +  \" problems\";\n        }\n        output += \" in \" + filename + \".\";\n\n        var pos = filename.lastIndexOf(\"/\"),\n            shortFilename = filename;\n\n        if (pos === -1){\n            pos = filename.lastIndexOf(\"\\\\\");\n        }\n        if (pos > -1){\n            shortFilename = filename.substring(pos+1);\n        }\n\n        CSSLint.Util.forEach(messages, function (message, i) {\n            output = output + \"\\n\\n\" + shortFilename;\n            if (message.rollup) {\n                output += \"\\n\" + (i+1) + \": \" + message.type;\n                output += \"\\n\" + message.message;\n            } else {\n                output += \"\\n\" + (i+1) + \": \" + message.type + \" at line \" + message.line + \", col \" + message.col;\n                output += \"\\n\" + message.message;\n                output += \"\\n\" + message.evidence;\n            }\n        });\n\n        return output;\n    }\n});\n\nmodule.exports.CSSLint = CSSLint;\n\n});\n"
  },
  {
    "path": "lib/ace/mode/css.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.foldingRules = \"cStyle\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        // ignore braces in comments\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/css\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n"
  },
  {
    "path": "lib/ace/mode/css_completions.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n\n    // opacity\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n\n    // border radius\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n\n    // dropshadows\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n\n    // transformations\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        //fill in missing properties\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (state==='ruleset'){\n            //css attribute value\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0;',\n                meta: \"property\",\n                score: Number.MAX_VALUE\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: Number.MAX_VALUE\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n"
  },
  {
    "path": "lib/ace/mode/css_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\n\n/* Exports are for Stylus and Less highlighters */\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|min-height|min-width|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = {\n        \"start\" : [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"ruleset\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }, {\n            token: \"string\",\n            regex: \"@\",\n            next:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"keyword\",\n            regex: \"%\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n        \n        \"media\": [{\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            next:  \"start\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"\\\\}\",\n            next:  \"start\"\n        }, {\n            token: \"string\",\n            regex: \";\",\n            next:  \"start\"\n        }, {\n            token: \"keyword\",\n            regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n        }],\n\n        \"comments\" : [{\n            token: \"comment\", // multi line comment\n            regex: \"\\\\/\\\\*\",\n            push: [{\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"pop\"\n            }, {\n                defaultToken : \"comment\"\n            }]\n        }],\n\n        \"ruleset\" : [{\n            regex : \"-(webkit|ms|moz|o)-\",\n            token : \"text\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next : \"start\"\n        }, {\n            include : [\"strings\", \"url\", \"comments\"]\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            include: \"url\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }],\n        \n        url: [{\n            token : \"support.function\",\n            regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n            push: [{\n                token : \"support.function\",\n                regex : \"\\\\)\",\n                next : \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        \n        strings: [{\n            token : \"string.start\",\n            regex : \"'\",\n            push : [{\n                token : \"string.end\",\n                regex : \"'|$\",\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"string.end\",\n                regex : '\"|$',\n                next: \"pop\"\n            }, {\n                include : \"escapes\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\\\$/,\n                consumeLineEnd: true\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        escapes: [{\n            token : \"constant.language.escape\",\n            regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n        }]\n        \n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n"
  },
  {
    "path": "lib/ace/mode/css_test.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\nif (typeof process !== \"undefined\") {\n    require(\"amd-loader\");\n}\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar EditSession = require(\"../edit_session\").EditSession;\nvar CssMode = require(\"./css\").Mode;\nvar assert = require(\"../test/assertions\");\n\nmodule.exports = {\n    \n    name: \"CSS\",\n    \n    setUp : function() {\n        this.mode = new CssMode();\n    },\n\n    \"test: toggle comment lines\" : function() {\n        var session = new EditSession([\"  abc\", \"cde\", \"fg\"].join(\"\\n\"));\n\n        var comment = this.mode.toggleCommentLines(\"start\", session, 0, 1);\n        assert.equal([\"/*  abc*/\", \"/*cde*/\", \"fg\"].join(\"\\n\"), session.toString());\n    },\n\n\n    \"test: lines should keep indentation\" : function() {\n        assert.equal(\"   \", this.mode.getNextLineIndent(\"start\", \"   abc\", \"  \"));\n        assert.equal(\"\\t\", this.mode.getNextLineIndent(\"start\", \"\\tabc\", \"  \"));\n    },\n\n    \"test: new line after { should increase indent\" : function() {\n        assert.equal(\"     \", this.mode.getNextLineIndent(\"start\", \"   abc{\", \"  \"));\n        assert.equal(\"\\t  \", this.mode.getNextLineIndent(\"start\", \"\\tabc  { \", \"  \"));\n    },\n\n    \"test: no indent increase after { in a comment\" : function() {\n        assert.equal(\"   \", this.mode.getNextLineIndent(\"start\", \"   /*{\", \"  \"));\n        assert.equal(\"   \", this.mode.getNextLineIndent(\"start\", \"   /*{  \", \"  \"));\n    }\n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main) {\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n}\n"
  },
  {
    "path": "lib/ace/mode/css_worker.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar Mirror = require(\"../worker/mirror\").Mirror;\nvar CSSLint = require(\"./css/csslint\").CSSLint;\n\nvar Worker = exports.Worker = function(sender) {\n    Mirror.call(this, sender);\n    this.setTimeout(400);\n    this.ruleset = null;\n    this.setDisabledRules(\"ids|order-alphabetical\");\n    this.setInfoRules(\n      \"adjoining-classes|qualified-headings|zero-units|gradients|\" +\n      \"import|outline-none|vendor-prefix\"\n    );\n};\n\noop.inherits(Worker, Mirror);\n\n(function() {\n    this.setInfoRules = function(ruleNames) {\n        if (typeof ruleNames == \"string\")\n            ruleNames = ruleNames.split(\"|\");\n        this.infoRules = lang.arrayToMap(ruleNames);\n        this.doc.getValue() && this.deferredUpdate.schedule(100);\n    };\n\n    this.setDisabledRules = function(ruleNames) {\n        if (!ruleNames) {\n            this.ruleset = null;\n        } else {\n            if (typeof ruleNames == \"string\")\n                ruleNames = ruleNames.split(\"|\");\n            var all = {};\n\n            CSSLint.getRules().forEach(function(x){\n                all[x.id] = true;\n            });\n            ruleNames.forEach(function(x) {\n                delete all[x];\n            });\n            \n            this.ruleset = all;\n        }\n        this.doc.getValue() && this.deferredUpdate.schedule(100);\n    };\n\n    this.onUpdate = function() {\n        var value = this.doc.getValue();\n        if (!value)\n            return this.sender.emit(\"annotate\", []);\n        var infoRules = this.infoRules;\n\n        var result = CSSLint.verify(value, this.ruleset);\n        this.sender.emit(\"annotate\", result.messages.map(function(msg) {\n            return {\n                row: msg.line - 1,\n                column: msg.col - 1,\n                text: msg.message,\n                type: infoRules[msg.rule.id] ? \"info\" : msg.type,\n                rule: msg.rule.name\n            };\n        }));\n    };\n\n}).call(Worker.prototype);\n\n});\n"
  },
  {
    "path": "lib/ace/mode/css_worker_test.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\nif (typeof process !== \"undefined\") {\n    require(\"amd-loader\");\n}\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar assert = require(\"../test/assertions\");\nvar Worker = require(\"./css_worker\").Worker;\n\n\nmodule.exports = {\n    setUp : function() {\n        this.sender = {\n            on: function() {},\n            callback: function(data, id) {\n                this.data = data;\n            },\n            events: [],\n            emit: function(type, e) {\n                this.events.push([type, e]);\n            }\n        };\n    },\n    \n    \"test check for syntax error\": function() {\n        var worker = new Worker(this.sender);\n        worker.setValue(\"Juhu Kinners\");\n        worker.deferredUpdate.call();\n        assert.equal(this.sender.events[0][1][0].type, \"error\");\n    }\n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main) {\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n}\n"
  },
  {
    "path": "lib/ace/mode/curly.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n *\n * Contributor(s):\n *\n * Libo Cannici <libo AT zendesk DOT com>\n *\n *\n *\n * ***** END LICENSE BLOCK ***** */\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\n// defines the parent mode\nvar HtmlMode = require(\"./html\").Mode;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\n\n// defines the language specific highlighters and folding rules\nvar CurlyHighlightRules = require(\"./curly_highlight_rules\").CurlyHighlightRules;\n\nvar Mode = function() {\n    HtmlMode.call(this);\n    this.HighlightRules = CurlyHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.foldingRules = new HtmlFoldMode();\n};\noop.inherits(Mode, HtmlMode);\n\n(function() {\n    this.$id = \"ace/mode/curly\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/curly_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n *\n * Contributor(s):\n *\n * Libo Cannici <libo AT zendesk DOT com>\n *\n *\n *\n * ***** END LICENSE BLOCK ***** */\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\n\n\nvar CurlyHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n\n    this.$rules[\"start\"].unshift({\n        token: \"variable\",\n        regex: \"{{\",\n        push: \"curly-start\"\n    });\n\n    this.$rules[\"curly-start\"] = [{\n        token: \"variable\",\n        regex: \"}}\",\n        next: \"pop\"\n    }];\n\n    this.normalizeRules();\n};\n\noop.inherits(CurlyHighlightRules, HtmlHighlightRules);\n\nexports.CurlyHighlightRules = CurlyHighlightRules;\n\n});\n"
  },
  {
    "path": "lib/ace/mode/d.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar DHighlightRules = require(\"./d_highlight_rules\").DHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = DHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$id = \"ace/mode/d\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});"
  },
  {
    "path": "lib/ace/mode/d_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DHighlightRules = function() {\n\n    var keywords = (\n        \"this|super|import|module|body|mixin|__traits|invariant|alias|asm|delete|\"+\n        \"typeof|typeid|sizeof|cast|new|in|is|typedef|__vector|__parameters\"\n    );\n\n    var keywordControls = (\n        \"break|case|continue|default|do|else|for|foreach|foreach_reverse|goto|if|\" +\n        \"return|switch|while|catch|try|throw|finally|version|assert|unittest|with\"\n    );\n    \n    var types = (\n        \"auto|bool|char|dchar|wchar|byte|ubyte|float|double|real|\" +\n        \"cfloat|creal|cdouble|cent|ifloat|ireal|idouble|\" +\n        \"int|long|short|void|uint|ulong|ushort|ucent|\" +\n        \"function|delegate|string|wstring|dstring|size_t|ptrdiff_t|hash_t|Object\"\n    );\n\n    var modifiers = (\n        \"abstract|align|debug|deprecated|export|extern|const|final|in|inout|out|\" +\n        \"ref|immutable|lazy|nothrow|override|package|pragma|private|protected|\" +\n        \"public|pure|scope|shared|__gshared|synchronized|static|volatile\"\n    );\n    \n    var storages = (\n        \"class|struct|union|template|interface|enum|macro\"\n    );\n    \n    var stringEscapesSeq =  {\n        token: \"constant.language.escape\",\n        regex: \"\\\\\\\\(?:(?:x[0-9A-F]{2})|(?:[0-7]{1,3})|(?:['\\\"\\\\?0abfnrtv\\\\\\\\])|\" +\n            \"(?:u[0-9a-fA-F]{4})|(?:U[0-9a-fA-F]{8}))\"\n    };\n\n    var builtinConstants = (\n        \"null|true|false|\"+\n        \"__DATE__|__EOF__|__TIME__|__TIMESTAMP__|__VENDOR__|__VERSION__|\"+\n        \"__FILE__|__MODULE__|__LINE__|__FUNCTION__|__PRETTY_FUNCTION__\"\n    );\n    \n    var operators = (\n        \"/|/\\\\=|&|&\\\\=|&&|\\\\|\\\\|\\\\=|\\\\|\\\\||\\\\-|\\\\-\\\\=|\\\\-\\\\-|\\\\+|\" +\n        \"\\\\+\\\\=|\\\\+\\\\+|\\\\<|\\\\<\\\\=|\\\\<\\\\<|\\\\<\\\\<\\\\=|\\\\<\\\\>|\\\\<\\\\>\\\\=|\\\\>|\\\\>\\\\=|\\\\>\\\\>\\\\=|\" +\n        \"\\\\>\\\\>\\\\>\\\\=|\\\\>\\\\>|\\\\>\\\\>\\\\>|\\\\!|\\\\!\\\\=|\\\\!\\\\<\\\\>|\\\\!\\\\<\\\\>\\\\=|\\\\!\\\\<|\\\\!\\\\<\\\\=|\" +\n        \"\\\\!\\\\>|\\\\!\\\\>\\\\=|\\\\?|\\\\$|\\\\=|\\\\=\\\\=|\\\\*|\\\\*\\\\=|%|%\\\\=|\" +\n        \"\\\\^|\\\\^\\\\=|\\\\^\\\\^|\\\\^\\\\^\\\\=|~|~\\\\=|\\\\=\\\\>|#\"\n    );\n\n    var keywordMapper = this.$keywords = this.createKeywordMapper({\n        \"keyword.modifier\" : modifiers,\n        \"keyword.control\" :  keywordControls,\n        \"keyword.type\" :     types,\n        \"keyword\":           keywords,\n        \"keyword.storage\":   storages,\n        \"punctation\": \"\\\\.|\\\\,|;|\\\\.\\\\.|\\\\.\\\\.\\\\.\",\n        \"keyword.operator\" : operators,\n        \"constant.language\": builtinConstants\n    }, \"identifier\");\n    \n    var identifierRe = \"[a-zA-Z_\\u00a1-\\uffff][a-zA-Z\\\\d_\\u00a1-\\uffff]*\\\\b\";\n\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = {\n        \"start\" : [\n            {     //-------------------------------------------------------- COMMENTS\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"star-comment\"\n            }, {\n                token: \"comment.shebang\",\n                regex: \"^\\\\s*#!.*\"\n            }, {\n                token : \"comment\",\n                regex : \"\\\\/\\\\+\",\n                next: \"plus-comment\"\n            }, {  //-------------------------------------------------------- STRINGS\n                onMatch: function(value, currentState, state) {\n                    state.unshift(this.next, value.substr(2));\n                    return \"string\";\n                },\n                regex: 'q\"(?:[\\\\[\\\\(\\\\{\\\\<]+)',\n                next: 'operator-heredoc-string'\n            }, {\n                onMatch: function(value, currentState, state) {\n                    state.unshift(this.next, value.substr(2));\n                    return \"string\";\n                },\n                regex: 'q\"(?:[a-zA-Z_]+)$',\n                next: 'identifier-heredoc-string'\n            }, {\n                token : \"string\", // multi line string start\n                regex : '[xr]?\"',\n                next : \"quote-string\"\n            }, {\n                token : \"string\", // multi line string start\n                regex : '[xr]?`',\n                next : \"backtick-string\"\n            }, {\n                token : \"string\", // single line\n                regex : \"[xr]?['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?['][cdw]?\"\n            }, {  //-------------------------------------------------------- RULES\n                token: [\"keyword\", \"text\", \"paren.lparen\"],\n                regex: /(asm)(\\s*)({)/,\n                next: \"d-asm\"\n            }, {\n                token: [\"keyword\", \"text\", \"paren.lparen\", \"constant.language\"],\n                regex: \"(__traits)(\\\\s*)(\\\\()(\"+identifierRe+\")\"\n            }, { // import|module abc\n                token: [\"keyword\", \"text\", \"variable.module\"],\n                regex: \"(import|module)(\\\\s+)((?:\"+identifierRe+\"\\\\.?)*)\"\n            }, { // storage Name\n                token: [\"keyword.storage\", \"text\", \"entity.name.type\"],\n                regex: \"(\"+storages+\")(\\\\s*)(\"+identifierRe+\")\"\n            }, { // alias|typedef foo bar;\n                token: [\"keyword\", \"text\", \"variable.storage\", \"text\"],\n                regex: \"(alias|typedef)(\\\\s*)(\"+identifierRe+\")(\\\\s*)\"\n            }, {  //-------------------------------------------------------- OTHERS\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F_]+(l|ul|u|f|F|L|U|UL)?\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d[\\\\d_]*(?:(?:\\\\.[\\\\d_]*)?(?:[eE][+-]?[\\\\d_]+)?)?(l|ul|u|f|F|L|U|UL)?\\\\b\"\n            }, {\n                token: \"entity.other.attribute-name\",\n                regex: \"@\"+identifierRe\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_][a-zA-Z0-9_]*\\\\b\"\n            }, {\n                token : \"keyword.operator\",\n                regex : operators\n            }, {\n                token : \"punctuation.operator\",\n                regex : \"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.|\\\\:\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"star-comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken: 'comment'\n            }\n        ],\n        \"plus-comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\+\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken: 'comment'\n            }\n        ],\n        \n        \"quote-string\" : [\n           stringEscapesSeq,\n           {\n                token : \"string\",\n                regex : '\"[cdw]?',\n                next : \"start\"\n            }, {\n                defaultToken: 'string'\n            }\n        ],\n        \n        \"backtick-string\" : [\n           stringEscapesSeq,\n           {\n                token : \"string\",\n                regex : '`[cdw]?',\n                next : \"start\"\n            }, {\n                defaultToken: 'string'\n            }\n        ],\n        \n        \"operator-heredoc-string\": [\n            {\n                onMatch: function(value, currentState, state) {\n                    value = value.substring(value.length-2, value.length-1);\n                    var map = {'>':'<',']':'[',')':'(','}':'{'};\n                    if(Object.keys(map).indexOf(value) != -1)\n                        value = map[value];\n                    if(value != state[1]) return \"string\";\n                    state.shift();\n                    state.shift();\n                    \n                    return \"string\";\n                },\n                regex: '(?:[\\\\]\\\\)}>]+)\"',\n                next: 'start'\n            }, {\n                token: 'string',\n                regex: '[^\\\\]\\\\)}>]+'\n            }\n        ],\n        \n        \"identifier-heredoc-string\": [\n            {\n                onMatch: function(value, currentState, state) {\n                    value = value.substring(0, value.length-1);\n                    if(value != state[1]) return \"string\";\n                    state.shift();\n                    state.shift();\n                    \n                    return \"string\";\n                },\n                regex: '^(?:[A-Za-z_][a-zA-Z0-9]+)\"',\n                next: 'start'\n            }, {\n                token: 'string',\n                regex: '[^\\\\]\\\\)}>]+'\n            }\n        ],\n        \n        \"d-asm\": [\n            {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                token: 'keyword.instruction',\n                regex: '[a-zA-Z]+',\n                next: 'd-asm-instruction' \n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }\n        ],\n        \n        // minimal asm support\n        'd-asm-instruction': [\n            {\n                token: 'constant.language',\n                regex: /AL|AH|AX|EAX|BL|BH|BX|EBX|CL|CH|CX|ECX|DL|DH|DX|EDX|BP|EBP|SP|ESP|DI|EDI|SI|ESI/i\n            }, {\n                token: 'identifier',\n                regex: '[a-zA-Z]+'\n            }, {\n                token: 'string',\n                regex: '\".*\"'\n            }, {\n                token: 'comment',\n                regex: '//.*$'\n            }, {\n                token: 'constant.numeric',\n                regex: '[0-9.xA-F]+'\n            }, {\n                token: 'punctuation.operator',\n                regex: '\\\\,'\n            }, {\n                token: 'punctuation.operator',\n                regex: ';',\n                next: 'd-asm'\n            }, {\n                token: 'text',\n                regex: '\\\\s+'\n            }\n        ]\n    };\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n};\n\nDHighlightRules.metaData = {\n      comment: 'D language',\n      fileTypes: [ 'd', 'di' ],\n      firstLineMatch: '^#!.*\\\\b[glr]?dmd\\\\b.',\n      foldingStartMarker: '(?x)/\\\\*\\\\*(?!\\\\*)|^(?![^{]*?//|[^{]*?/\\\\*(?!.*?\\\\*/.*?\\\\{)).*?\\\\{\\\\s*($|//|/\\\\*(?!.*?\\\\*/.*\\\\S))',\n      foldingStopMarker: '(?<!\\\\*)\\\\*\\\\*/|^\\\\s*\\\\}',\n      keyEquivalent: '^~D',\n      name: 'D',\n      scopeName: 'source.d'\n};\noop.inherits(DHighlightRules, TextHighlightRules);\n\nexports.DHighlightRules = DHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/dart.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n *\n * Contributor(s):\n * \n *\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar CMode = require(\"./c_cpp\").Mode;\nvar DartHighlightRules = require(\"./dart_highlight_rules\").DartHighlightRules;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    CMode.call(this);\n    this.HighlightRules = DartHighlightRules;\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, CMode);\n\n(function() { \n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$id = \"ace/mode/dart\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});"
  },
  {
    "path": "lib/ace/mode/dart_highlight_rules.js",
    "content": "/*\n  THIS FILE WAS AUTOGENERATED BY mode_highlight_rules.tmpl.js (UUID: 958518BC-799F-477A-99F9-5B28EBF230F6) */\n\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DartHighlightRules = function() {\n\n    var constantLanguage = \"true|false|null\";\n    var variableLanguage = \"this|super\";\n    var keywordControl = \"try|catch|finally|throw|rethrow|assert|break|case|continue|default|do|else|for|if|in|return|switch|while|new|deferred|async|await\";\n    var keywordDeclaration = \"abstract|class|extends|external|factory|implements|get|native|operator|set|typedef|with|enum\";\n    var storageModifier = \"static|final|const\";\n    var storageType = \"void|bool|num|int|double|dynamic|var|String\";\n\n    var keywordMapper = this.createKeywordMapper({\n        \"constant.language.dart\": constantLanguage,\n        \"variable.language.dart\": variableLanguage,\n        \"keyword.control.dart\": keywordControl,\n        \"keyword.declaration.dart\": keywordDeclaration,\n        \"storage.modifier.dart\": storageModifier,\n        \"storage.type.primitive.dart\": storageType\n    }, \"identifier\");\n\n    var stringfill = {\n        defaultToken : \"string\"\n    };\n\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = \n        {\n    \"start\": [\n        {\n            token : \"comment\",\n            regex : /\\/\\/.*$/\n        },\n        DocCommentHighlightRules.getStartRule(\"doc-start\"),\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next : \"comment\"\n        },\n        {\n            token: [\"meta.preprocessor.script.dart\"],\n            regex: \"^(#!.*)$\"\n        },\n        {\n            token: \"keyword.other.import.dart\",\n            regex: \"(?:\\\\b)(?:library|import|export|part|of|show|hide)(?:\\\\b)\"\n        },\n        {\n            token : [\"keyword.other.import.dart\", \"text\"],\n            regex : \"(?:\\\\b)(prefix)(\\\\s*:)\"\n        },\n        {\n            regex: \"\\\\bas\\\\b\",\n            token: \"keyword.cast.dart\"\n        },\n        {\n            regex: \"\\\\?|:\",\n            token: \"keyword.control.ternary.dart\"\n        },\n        {\n            regex: \"(?:\\\\b)(is\\\\!?)(?:\\\\b)\",\n            token: [\"keyword.operator.dart\"]\n        },\n        {\n            regex: \"(<<|>>>?|~|\\\\^|\\\\||&)\",\n            token: [\"keyword.operator.bitwise.dart\"]\n        },\n        {\n            regex: \"((?:&|\\\\^|\\\\||<<|>>>?)=)\",\n            token: [\"keyword.operator.assignment.bitwise.dart\"]\n        },\n        {\n            regex: \"(===?|!==?|<=?|>=?)\",\n            token: [\"keyword.operator.comparison.dart\"]\n        },\n        {\n            regex: \"((?:[+*/%-]|\\\\~)=)\",\n            token: [\"keyword.operator.assignment.arithmetic.dart\"]\n        },\n        {\n            regex: \"=\",\n            token: \"keyword.operator.assignment.dart\"\n        },\n        {\n            token : \"string\",\n            regex : \"'''\",\n            next : \"qdoc\"\n        }, \n        {\n            token : \"string\",\n            regex : '\"\"\"',\n            next : \"qqdoc\"\n        }, \n        {\n            token : \"string\",\n            regex : \"'\",\n            next : \"qstring\"\n        }, \n        {\n            token : \"string\",\n            regex : '\"',\n            next : \"qqstring\"\n        }, \n        {\n            regex: \"(\\\\-\\\\-|\\\\+\\\\+)\",\n            token: [\"keyword.operator.increment-decrement.dart\"]\n        },\n        {\n            regex: \"(\\\\-|\\\\+|\\\\*|\\\\/|\\\\~\\\\/|%)\",\n            token: [\"keyword.operator.arithmetic.dart\"]\n        },\n        {\n            regex: \"(!|&&|\\\\|\\\\|)\",\n            token: [\"keyword.operator.logical.dart\"]\n        },\n        {\n            token : \"constant.numeric\", // hex\n            regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n        }, \n        {\n            token : \"constant.numeric\", // float\n            regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n        }, \n        {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }\n    ],\n    \"comment\" : [\n        {\n            token : \"comment\", // closing comment\n            regex : \"\\\\*\\\\/\",\n            next : \"start\"\n        }, {\n            defaultToken : \"comment\"\n        }\n    ],\n    \"qdoc\" : [\n        {\n            token : \"string\",\n            regex : \".*?'''\",\n            next : \"start\"\n        }, stringfill],\n\n    \"qqdoc\" : [\n        {\n            token : \"string\",\n            regex : '.*?\"\"\"',\n            next : \"start\"\n        }, stringfill],\n\n    \"qstring\" : [\n        {\n            token : \"string\",\n            regex : \"[^\\\\\\\\']*(?:\\\\\\\\.[^\\\\\\\\']*)*'\",\n            next : \"start\"\n        }, stringfill],\n\n    \"qqstring\" : [\n        {\n            token : \"string\",\n            regex : '[^\\\\\\\\\"]*(?:\\\\\\\\.[^\\\\\\\\\"]*)*\"',\n            next : \"start\"\n        }, stringfill]\n};\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n};\n\noop.inherits(DartHighlightRules, TextHighlightRules);\n\nexports.DartHighlightRules = DartHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/diff.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar HighlightRules = require(\"./diff_highlight_rules\").DiffHighlightRules;\nvar FoldMode = require(\"./folding/diff\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = HighlightRules;\n    this.foldingRules = new FoldMode([\"diff\", \"index\", \"\\\\+{3}\", \"@@|\\\\*{5}\"], \"i\");\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.$id = \"ace/mode/diff\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n"
  },
  {
    "path": "lib/ace/mode/diff_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DiffHighlightRules = function() {\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = {\n        \"start\" : [{\n                regex: \"^(?:\\\\*{15}|={67}|-{3}|\\\\+{3})$\",\n                token: \"punctuation.definition.separator.diff\",\n                \"name\": \"keyword\"\n            }, { //diff.range.unified\n                regex: \"^(@@)(\\\\s*.+?\\\\s*)(@@)(.*)$\",\n                token: [\n                    \"constant\",\n                    \"constant.numeric\",\n                    \"constant\",\n                    \"comment.doc.tag\"\n                ]\n            }, { //diff.range.normal\n                regex: \"^(\\\\d+)([,\\\\d]+)(a|d|c)(\\\\d+)([,\\\\d]+)(.*)$\",\n                token: [\n                    \"constant.numeric\",\n                    \"punctuation.definition.range.diff\",\n                    \"constant.function\",\n                    \"constant.numeric\",\n                    \"punctuation.definition.range.diff\",\n                    \"invalid\"\n                ],\n                \"name\": \"meta.\"\n            }, {\n                regex: \"^(\\\\-{3}|\\\\+{3}|\\\\*{3})( .+)$\",\n                token: [\n                    \"constant.numeric\",\n                    \"meta.tag\"\n                ]\n            }, { // added\n                regex: \"^([!+>])(.*?)(\\\\s*)$\",\n                token: [\n                    \"support.constant\",\n                    \"text\",\n                    \"invalid\"\n                ]\n            }, { // removed\n                regex: \"^([<\\\\-])(.*?)(\\\\s*)$\",\n                token: [\n                    \"support.function\",\n                    \"string\",\n                    \"invalid\"\n                ]\n            }, {\n                regex: \"^(diff)(\\\\s+--\\\\w+)?(.+?)( .+)?$\",\n                token: [\"variable\", \"variable\", \"keyword\", \"variable\"]\n            }, {\n                regex: \"^Index.+$\",\n                token: \"variable\"\n            }, {\n                regex: \"^\\\\s+$\",\n                token: \"text\"\n            }, {\n                regex: \"\\\\s*$\",\n                token: \"invalid\"\n            }, {\n                defaultToken: \"invisible\",\n                caseInsensitive: true\n            }\n        ]\n    };\n};\n\noop.inherits(DiffHighlightRules, TextHighlightRules);\n\nexports.DiffHighlightRules = DiffHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/django.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\nvar oop = require(\"../lib/oop\");\nvar HtmlMode = require(\"./html\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DjangoHighlightRules = function(){\n    this.$rules = {\n        'start': [{\n            token: \"string\",\n            regex: '\".*?\"'\n        }, {\n            token: \"string\",\n            regex: \"'.*?'\"\n        }, {\n            token: \"constant\",\n            regex: '[0-9]+'\n        }, {\n            token: \"variable\",\n            regex: \"[-_a-zA-Z0-9:]+\"\n        }],\n        'tag': [{\n            token: \"entity.name.function\",\n            regex: \"[a-zA-Z][_a-zA-Z0-9]*\",\n            next: \"start\"\n        }]\n    };\n};\n\noop.inherits(DjangoHighlightRules, TextHighlightRules);\n\nvar DjangoHtmlHighlightRules = function() {\n    this.$rules = new HtmlHighlightRules().getRules();\n\n    for (var i in this.$rules) {\n        this.$rules[i].unshift({\n            token: \"comment.line\",\n            regex: \"\\\\{#.*?#\\\\}\"\n        }, {\n            token: \"comment.block\",\n            regex: \"\\\\{\\\\%\\\\s*comment\\\\s*\\\\%\\\\}\",\n            merge: true,\n            next: \"django-comment\"\n        }, {\n            token: \"constant.language\",\n            regex: \"\\\\{\\\\{\",\n            next: \"django-start\"\n        }, {\n            token: \"constant.language\",\n            regex: \"\\\\{\\\\%\",\n            next: \"django-tag\"\n        });\n        this.embedRules(DjangoHighlightRules, \"django-\", [{\n                token: \"comment.block\",\n                regex: \"\\\\{\\\\%\\\\s*endcomment\\\\s*\\\\%\\\\}\",\n                merge: true,\n                next: \"start\"\n            }, {\n                token: \"constant.language\",\n                regex: \"\\\\%\\\\}\",\n                next: \"start\"\n            }, {\n                token: \"constant.language\",\n                regex: \"\\\\}\\\\}\",\n                next: \"start\"\n        }]);\n    }\n};\n\noop.inherits(DjangoHtmlHighlightRules, HtmlHighlightRules);\n\nvar Mode = function() {\n    HtmlMode.call(this);\n    this.HighlightRules = DjangoHtmlHighlightRules;\n};\noop.inherits(Mode, HtmlMode);\n\n(function() {\n    this.$id = \"ace/mode/django\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});"
  },
  {
    "path": "lib/ace/mode/doc_comment_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n"
  },
  {
    "path": "lib/ace/mode/dockerfile.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar ShMode = require(\"./sh\").Mode;\nvar DockerfileHighlightRules = require(\"./dockerfile_highlight_rules\").DockerfileHighlightRules;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    ShMode.call(this);\n    \n    this.HighlightRules = DockerfileHighlightRules;\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, ShMode);\n\n(function() {\n    this.$id = \"ace/mode/dockerfile\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/dockerfile_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar ShHighlightRules = require(\"./sh_highlight_rules\").ShHighlightRules;\n\nvar DockerfileHighlightRules = function() {\n    ShHighlightRules.call(this);\n\n    var startRules = this.$rules.start;\n    for (var i = 0; i < startRules.length; i++) {\n        if (startRules[i].token == \"variable.language\") {\n            startRules.splice(i, 0, {\n                token: \"constant.language\",\n                regex: \"(?:^(?:FROM|MAINTAINER|RUN|CMD|EXPOSE|ENV|ADD|ENTRYPOINT|VOLUME|USER|WORKDIR|ONBUILD|COPY|LABEL)\\\\b)\",\n                caseInsensitive: true\n            });\n            break;\n        }\n    }\n    \n};\n\noop.inherits(DockerfileHighlightRules, ShHighlightRules);\n\nexports.DockerfileHighlightRules = DockerfileHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/dot.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar DotHighlightRules = require(\"./dot_highlight_rules\").DotHighlightRules;\nvar DotFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = DotHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.foldingRules = new DotFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = [\"//\", \"#\"];\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/dot\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/dot_highlight_rules.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\n\nvar DotHighlightRules = function() {\n\n   var keywords = lang.arrayToMap(\n        (\"strict|node|edge|graph|digraph|subgraph\").split(\"|\")\n   );\n\n   var attributes = lang.arrayToMap(\n        (\"damping|k|url|area|arrowhead|arrowsize|arrowtail|aspect|bb|bgcolor|center|charset|clusterrank|color|colorscheme|comment|compound|concentrate|constraint|decorate|defaultdist|dim|dimen|dir|diredgeconstraints|distortion|dpi|edgeurl|edgehref|edgetarget|edgetooltip|epsilon|esep|fillcolor|fixedsize|fontcolor|fontname|fontnames|fontpath|fontsize|forcelabels|gradientangle|group|headurl|head_lp|headclip|headhref|headlabel|headport|headtarget|headtooltip|height|href|id|image|imagepath|imagescale|label|labelurl|label_scheme|labelangle|labeldistance|labelfloat|labelfontcolor|labelfontname|labelfontsize|labelhref|labeljust|labelloc|labeltarget|labeltooltip|landscape|layer|layerlistsep|layers|layerselect|layersep|layout|len|levels|levelsgap|lhead|lheight|lp|ltail|lwidth|margin|maxiter|mclimit|mindist|minlen|mode|model|mosek|nodesep|nojustify|normalize|nslimit|nslimit1|ordering|orientation|outputorder|overlap|overlap_scaling|pack|packmode|pad|page|pagedir|pencolor|penwidth|peripheries|pin|pos|quadtree|quantum|rank|rankdir|ranksep|ratio|rects|regular|remincross|repulsiveforce|resolution|root|rotate|rotation|samehead|sametail|samplepoints|scale|searchsize|sep|shape|shapefile|showboxes|sides|size|skew|smoothing|sortv|splines|start|style|stylesheet|tailurl|tail_lp|tailclip|tailhref|taillabel|tailport|tailtarget|tailtooltip|target|tooltip|truecolor|vertices|viewport|voro_margin|weight|width|xlabel|xlp|z\").split(\"|\")\n   );\n\n   this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : /\\/\\/.*$/\n            }, {\n                token : \"comment\",\n                regex : /#.*$/\n            }, {\n                token : \"comment\", // multi line comment\n                merge : true,\n                regex : /\\/\\*/,\n                next : \"comment\"\n            }, {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\",\n                regex : /[+\\-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)?\\b/\n            }, {\n                token : \"keyword.operator\",\n                regex : /\\+|=|\\->/\n            }, {\n                token : \"punctuation.operator\",\n                regex : /,|;/\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[{]/\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\]}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }, {\n                token: function(value) {\n                    if (keywords.hasOwnProperty(value.toLowerCase())) {\n                        return \"keyword\";\n                    }\n                    else if (attributes.hasOwnProperty(value.toLowerCase())) {\n                        return \"variable\";\n                    }\n                    else {\n                        return \"text\";\n                    }\n                },\n                regex: \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n           }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"string\",\n                regex : '[^\"\\\\\\\\]+',\n                merge : true\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                next  : \"qqstring\",\n                merge : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"start\",\n                merge : true\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"string\",\n                regex : \"[^'\\\\\\\\]+\",\n                merge : true\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                next  : \"qstring\",\n                merge : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"start\",\n                merge : true\n            }\n        ]\n   };\n};\n\noop.inherits(DotHighlightRules, TextHighlightRules);\n\nexports.DotHighlightRules = DotHighlightRules;\n\n});\n"
  },
  {
    "path": "lib/ace/mode/drools.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2014, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar DroolsHighlightRules = require(\"./drools_highlight_rules\").DroolsHighlightRules;\nvar DroolsFoldMode = require(\"./folding/drools\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = DroolsHighlightRules;\n    this.foldingRules = new DroolsFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    this.$id = \"ace/mode/drools\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\n"
  },
  {
    "path": "lib/ace/mode/drools_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar JavaHighlightRules = require(\"./java_highlight_rules\").JavaHighlightRules;\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\n\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\nvar packageIdentifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][\\\\.a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar DroolsHighlightRules = function() {\n\n    var keywords = (\"date|effective|expires|lock|on|active|no|loop|auto|focus\" +\n        \"|activation|group|agenda|ruleflow|duration|timer|calendars|refract|direct\" +\n        \"|dialect|salience|enabled|attributes|extends|template\" +\n        \"|function|contains|matches|eval|excludes|soundslike\" +\n        \"|memberof|not|in|or|and|exists|forall|over|from|entry|point|accumulate|acc|collect\" +\n        \"|action|reverse|result|end|init|instanceof|extends|super|boolean|char|byte|short\" +\n        \"|int|long|float|double|this|void|class|new|case|final|if|else|for|while|do\" +\n        \"|default|try|catch|finally|switch|synchronized|return|throw|break|continue|assert\" +\n        \"|modify|static|public|protected|private|abstract|native|transient|volatile\" +\n        \"|strictfp|throws|interface|enum|implements|type|window|trait|no-loop|str\"\n      );\n\n      var langClasses = (\n          \"AbstractMethodError|AssertionError|ClassCircularityError|\"+\n          \"ClassFormatError|Deprecated|EnumConstantNotPresentException|\"+\n          \"ExceptionInInitializerError|IllegalAccessError|\"+\n          \"IllegalThreadStateException|InstantiationError|InternalError|\"+\n          \"NegativeArraySizeException|NoSuchFieldError|Override|Process|\"+\n          \"ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|\"+\n          \"SuppressWarnings|TypeNotPresentException|UnknownError|\"+\n          \"UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|\"+\n          \"InstantiationException|IndexOutOfBoundsException|\"+\n          \"ArrayIndexOutOfBoundsException|CloneNotSupportedException|\"+\n          \"NoSuchFieldException|IllegalArgumentException|NumberFormatException|\"+\n          \"SecurityException|Void|InheritableThreadLocal|IllegalStateException|\"+\n          \"InterruptedException|NoSuchMethodException|IllegalAccessException|\"+\n          \"UnsupportedOperationException|Enum|StrictMath|Package|Compiler|\"+\n          \"Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|\"+\n          \"NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|\"+\n          \"NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|\"+\n          \"Character|Boolean|StackTraceElement|Appendable|StringBuffer|\"+\n          \"Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|\"+\n          \"StackOverflowError|OutOfMemoryError|VirtualMachineError|\"+\n          \"ArrayStoreException|ClassCastException|LinkageError|\"+\n          \"NoClassDefFoundError|ClassNotFoundException|RuntimeException|\"+\n          \"Exception|ThreadDeath|Error|Throwable|System|ClassLoader|\"+\n          \"Cloneable|Class|CharSequence|Comparable|String|Object\"\n      );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"this\",\n        \"keyword\": keywords,\n        \"constant.language\": \"null\",\n        \"support.class\" : langClasses,\n        \"support.function\" : \"retract|update|modify|insert\"\n    }, \"identifier\");\n\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    var stringRules = function() {\n      return [{\n        token : \"string\", // single line\n        regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n      }, {\n        token : \"string\", // single line\n        regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n      }];\n    };\n\n\n      var basicPreRules = function(blockCommentRules) {\n        return [{\n            token : \"comment\",\n            regex : \"\\\\/\\\\/.*$\"\n        },\n        DocCommentHighlightRules.getStartRule(\"doc-start\"),\n        {\n            token : \"comment\", // multi line comment\n            regex : \"\\\\/\\\\*\",\n            next : blockCommentRules\n        }, {\n            token : \"constant.numeric\", // hex\n            regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n        }, {\n            token : \"constant.language.boolean\",\n            regex : \"(?:true|false)\\\\b\"\n          }];\n      };\n\n      var blockCommentRules = function(returnRule) {\n        return [\n            {\n                token : \"comment.block\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : returnRule\n            }, {\n                defaultToken : \"comment.block\"\n            }\n        ];\n      };\n\n      var basicPostRules = function() {\n        return [{\n            token : keywordMapper,\n            // TODO: Unicode escape sequences\n            // TODO: Unicode identifiers\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n        }, {\n            token : \"lparen\",\n            regex : \"[[({]\"\n        }, {\n            token : \"rparen\",\n            regex : \"[\\\\])}]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+\"\n        }];\n      };\n\n\n    this.$rules = {\n        \"start\" : [].concat(basicPreRules(\"block.comment\"), [\n              {\n                token : \"entity.name.type\",\n                regex : \"@[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n              }, {\n                // package com.example\n                token : [\"keyword\",\"text\",\"entity.name.type\"],\n                regex : \"(package)(\\\\s+)(\" + packageIdentifierRe +\")\"\n              }, {\n                // import function com.Util.staticMethod\n                token : [\"keyword\",\"text\",\"keyword\",\"text\",\"entity.name.type\"],\n                regex : \"(import)(\\\\s+)(function)(\\\\s+)(\" + packageIdentifierRe +\")\"\n              }, {\n                // import function com.Util.staticMethod\n                token : [\"keyword\",\"text\",\"entity.name.type\"],\n                regex : \"(import)(\\\\s+)(\" + packageIdentifierRe +\")\"\n              }, {\n                // global com.example.Type identifier\n                token : [\"keyword\",\"text\",\"entity.name.type\",\"text\",\"variable\"],\n                regex : \"(global)(\\\\s+)(\" + packageIdentifierRe +\")(\\\\s+)(\" + identifierRe +\")\"\n              }, {\n                // declare trait DeclaredType\n                token : [\"keyword\",\"text\",\"keyword\",\"text\",\"entity.name.type\"],\n                regex : \"(declare)(\\\\s+)(trait)(\\\\s+)(\" + identifierRe +\")\"\n              }, {\n                // declare trait DeclaredType\n                token : [\"keyword\",\"text\",\"entity.name.type\"],\n                regex : \"(declare)(\\\\s+)(\" + identifierRe +\")\"\n              }, {\n                // declare trait DeclaredType\n                token : [\"keyword\",\"text\",\"entity.name.type\"],\n                regex : \"(extends)(\\\\s+)(\" + packageIdentifierRe +\")\"\n              }, {\n                // rule ...\n                token : [\"keyword\",\"text\"],\n                regex : \"(rule)(\\\\s+)\",\n                next :  \"asset.name\"\n              }],\n              stringRules(),\n              [{\n                // variable :\n                token : [\"variable.other\",\"text\",\"text\"],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)\"\n              }, {\n                // query ...\n                token : [\"keyword\",\"text\"],\n                regex : \"(query)(\\\\s+)\",\n                next :  \"asset.name\"\n              }, {\n                // when ...\n                token : [\"keyword\",\"text\"],\n                regex : \"(when)(\\\\s*)\"\n              }, {\n                // then <java/mvel code> end\n                token : [\"keyword\",\"text\"],\n                regex : \"(then)(\\\\s*)\",\n                next :  \"java-start\"\n              }, {\n                  token : \"paren.lparen\",\n                  regex : /[\\[({]/\n              }, {\n                  token : \"paren.rparen\",\n                  regex : /[\\])}]/\n              }], basicPostRules()),\n        \"block.comment\" : blockCommentRules(\"start\"),\n        \"asset.name\" : [\n            {\n                token : \"entity.name\",\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"entity.name\",\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"entity.name\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"start\"\n            }]\n    };\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n\n    this.embedRules(JavaHighlightRules, \"java-\", [\n      {\n       token : \"support.function\",\n       regex: \"\\\\b(insert|modify|retract|update)\\\\b\"\n     }, {\n       token : \"keyword\",\n       regex: \"\\\\bend\\\\b\",\n       next  : \"start\"\n    }]);\n\n};\n\noop.inherits(DroolsHighlightRules, TextHighlightRules);\n\nexports.DroolsHighlightRules = DroolsHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/eiffel.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2014, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar EiffelHighlightRules = require(\"./eiffel_highlight_rules\").EiffelHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = EiffelHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"--\";\n    this.$id = \"ace/mode/eiffel\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\n"
  },
  {
    "path": "lib/ace/mode/eiffel_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2014, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar EiffelHighlightRules = function() {\n    var keywords = \"across|agent|alias|all|attached|as|assign|attribute|check|\" +\n        \"class|convert|create|debug|deferred|detachable|do|else|elseif|end|\" +\n        \"ensure|expanded|export|external|feature|from|frozen|if|inherit|\" +\n        \"inspect|invariant|like|local|loop|not|note|obsolete|old|once|\" +\n        \"Precursor|redefine|rename|require|rescue|retry|select|separate|\" +\n        \"some|then|undefine|until|variant|when\";\n\n    var operatorKeywords = \"and|implies|or|xor\";\n\n    var languageConstants = \"Void\";\n\n    var booleanConstants = \"True|False\";\n\n    var languageVariables = \"Current|Result\";\n\n    var keywordMapper = this.createKeywordMapper({\n        \"constant.language\": languageConstants,\n        \"constant.language.boolean\": booleanConstants,\n        \"variable.language\": languageVariables,\n        \"keyword.operator\": operatorKeywords,\n        \"keyword\": keywords\n    }, \"identifier\", true);\n\n    var simpleString = /(?:[^\"%\\b\\f\\v]|%[A-DFHLNQR-V%'\"()<>]|%\\/(?:0[xX][\\da-fA-F](?:_*[\\da-fA-F])*|0[cC][0-7](?:_*[0-7])*|0[bB][01](?:_*[01])*|\\d(?:_*\\d)*)\\/)+?/;\n\n    this.$rules = {\n        \"start\": [{\n                token : \"string.quoted.other\", // Aligned-verbatim-strings (verbatim option not supported)\n                regex : /\"\\[/,\n                next: \"aligned_verbatim_string\"\n            }, {\n                token : \"string.quoted.other\", // Non-aligned-verbatim-strings (verbatim option not supported)\n                regex : /\"\\{/,\n                next: \"non-aligned_verbatim_string\"\n            }, {\n                token : \"string.quoted.double\",\n                regex : /\"(?:[^%\\b\\f\\n\\r\\v]|%[A-DFHLNQR-V%'\"()<>]|%\\/(?:0[xX][\\da-fA-F](?:_*[\\da-fA-F])*|0[cC][0-7](?:_*[0-7])*|0[bB][01](?:_*[01])*|\\d(?:_*\\d)*)\\/)*?\"/\n            }, {\n                token : \"comment.line.double-dash\",\n                regex : /--.*/\n            }, {\n                token : \"constant.character\",\n                regex : /'(?:[^%\\b\\f\\n\\r\\t\\v]|%[A-DFHLNQR-V%'\"()<>]|%\\/(?:0[xX][\\da-fA-F](?:_*[\\da-fA-F])*|0[cC][0-7](?:_*[0-7])*|0[bB][01](?:_*[01])*|\\d(?:_*\\d)*)\\/)'/\n            }, {\n                token : \"constant.numeric\", // hexa | octal | bin\n                regex : /\\b0(?:[xX][\\da-fA-F](?:_*[\\da-fA-F])*|[cC][0-7](?:_*[0-7])*|[bB][01](?:_*[01])*)\\b/\n            }, {\n                token : \"constant.numeric\",\n                regex : /(?:\\d(?:_*\\d)*)?\\.(?:(?:\\d(?:_*\\d)*)?[eE][+-]?)?\\d(?:_*\\d)*|\\d(?:_*\\d)*\\.?/\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]|<<|\\|\\(/\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]|>>|\\|\\)/\n            }, {\n                token : \"keyword.operator\", // punctuation\n                regex : /:=|->|\\.(?=\\w)|[;,:?]/\n            }, {\n                token : \"keyword.operator\",\n                regex : /\\\\\\\\|\\|\\.\\.\\||\\.\\.|\\/[~\\/]?|[><\\/]=?|[-+*^=~]/\n            }, {\n                token : function (v) {\n                    var result = keywordMapper(v);\n                    if (result === \"identifier\" && v === v.toUpperCase()) {\n                        result =  \"entity.name.type\";\n                    }\n                    return result;\n                },\n                regex : /[a-zA-Z][a-zA-Z\\d_]*\\b/\n            }, {\n                token : \"text\",\n                regex : /\\s+/\n            }\n        ],\n        \"aligned_verbatim_string\" : [{\n                token : \"string\",\n                regex : /]\"/,\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : simpleString\n            }\n        ],\n        \"non-aligned_verbatim_string\" : [{\n                token : \"string.quoted.other\",\n                regex : /}\"/,\n                next : \"start\"\n            }, {\n                token : \"string.quoted.other\",\n                regex : simpleString\n            }\n        ]};\n};\n\noop.inherits(EiffelHighlightRules, TextHighlightRules);\n\nexports.EiffelHighlightRules = EiffelHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/ejs.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\n\nvar EjsHighlightRules = function(start, end) {\n    HtmlHighlightRules.call(this);\n    \n    if (!start)\n        start = \"(?:<%|<\\\\?|{{)\";\n    if (!end)\n        end = \"(?:%>|\\\\?>|}})\";\n\n    for (var i in this.$rules) {\n        this.$rules[i].unshift({\n            token : \"markup.list.meta.tag\",\n            regex : start + \"(?![>}])[-=]?\",\n            push  : \"ejs-start\"\n        });\n    }\n    \n    this.embedRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"ejs-\", [{\n        token : \"markup.list.meta.tag\",\n        regex : \"-?\" + end,\n        next  : \"pop\"\n    }, {\n        token: \"comment\",\n        regex: \"//.*?\" + end,\n        next: \"pop\"\n    }]);\n    \n    this.normalizeRules();\n};\n\n\noop.inherits(EjsHighlightRules, HtmlHighlightRules);\n\nexports.EjsHighlightRules = EjsHighlightRules;\n\n\nvar oop = require(\"../lib/oop\");\nvar HtmlMode = require(\"./html\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar RubyMode = require(\"./ruby\").Mode;\n\nvar Mode = function() {\n    HtmlMode.call(this);\n    this.HighlightRules = EjsHighlightRules;    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode,\n        \"ejs-\": JavaScriptMode\n    });\n};\noop.inherits(Mode, HtmlMode);\n\n(function() {\n\n    this.$id = \"ace/mode/ejs\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});"
  },
  {
    "path": "lib/ace/mode/elixir.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ElixirHighlightRules = require(\"./elixir_highlight_rules\").ElixirHighlightRules;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = ElixirHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"#\";\n    // this.blockComment = {start: \"\"/*\"\", end: \"\"*/\"\"};\n    // Extra logic goes here.\n    this.$id = \"ace/mode/elixir\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});"
  },
  {
    "path": "lib/ace/mode/elixir_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/* This file was autogenerated from https://raw.githubusercontent.com/elixir-lang/elixir-tmbundle/master/Syntaxes/Elixir.tmLanguage (uuid: ) */\n/****************************************************************************************\n * IT MIGHT NOT BE PERFECT ...But it's a good start from an existing *.tmlanguage file. *\n * fileTypes                                                                            *\n ****************************************************************************************/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar ElixirHighlightRules = function() {\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = { start: \n       [ { token: \n            [ 'meta.module.elixir',\n              'keyword.control.module.elixir',\n              'meta.module.elixir',\n              'entity.name.type.module.elixir' ],\n           regex: '^(\\\\s*)(defmodule)(\\\\s+)((?:[A-Z]\\\\w*\\\\s*\\\\.\\\\s*)*[A-Z]\\\\w*)' },\n         { token: 'comment.documentation.heredoc',\n           regex: '@(?:module|type)?doc (?:~[a-z])?\"\"\"',\n           push: \n            [ { token: 'comment.documentation.heredoc',\n                regex: '\\\\s*\"\"\"',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'comment.documentation.heredoc' } ],\n           comment: '@doc with heredocs is treated as documentation' },\n         { token: 'comment.documentation.heredoc',\n           regex: '@(?:module|type)?doc ~[A-Z]\"\"\"',\n           push: \n            [ { token: 'comment.documentation.heredoc',\n                regex: '\\\\s*\"\"\"',\n                next: 'pop' },\n              { defaultToken: 'comment.documentation.heredoc' } ],\n           comment: '@doc with heredocs is treated as documentation' },\n         { token: 'comment.documentation.heredoc',\n           regex: '@(?:module|type)?doc (?:~[a-z])?\\'\\'\\'',\n           push: \n            [ { token: 'comment.documentation.heredoc',\n                regex: '\\\\s*\\'\\'\\'',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'comment.documentation.heredoc' } ],\n           comment: '@doc with heredocs is treated as documentation' },\n         { token: 'comment.documentation.heredoc',\n           regex: '@(?:module|type)?doc ~[A-Z]\\'\\'\\'',\n           push: \n            [ { token: 'comment.documentation.heredoc',\n                regex: '\\\\s*\\'\\'\\'',\n                next: 'pop' },\n              { defaultToken: 'comment.documentation.heredoc' } ],\n           comment: '@doc with heredocs is treated as documentation' },\n         { token: 'comment.documentation.false',\n           regex: '@(?:module|type)?doc false',\n           comment: '@doc false is treated as documentation' },\n         { token: 'comment.documentation.string',\n           regex: '@(?:module|type)?doc \"',\n           push: \n            [ { token: 'comment.documentation.string',\n                regex: '\"',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'comment.documentation.string' } ],\n           comment: '@doc with string is treated as documentation' },\n         { token: 'keyword.control.elixir',\n           regex: '\\\\b(?:do|end|case|bc|lc|for|if|cond|unless|try|receive|fn|defmodule|defp?|defprotocol|defimpl|defrecord|defstruct|defmacrop?|defdelegate|defcallback|defmacrocallback|defexception|defoverridable|exit|after|rescue|catch|else|raise|throw|import|require|alias|use|quote|unquote|super)\\\\b(?![?!])',\n           TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n           originalRegex: '(?<!\\\\.)\\\\b(do|end|case|bc|lc|for|if|cond|unless|try|receive|fn|defmodule|defp?|defprotocol|defimpl|defrecord|defstruct|defmacrop?|defdelegate|defcallback|defmacrocallback|defexception|defoverridable|exit|after|rescue|catch|else|raise|throw|import|require|alias|use|quote|unquote|super)\\\\b(?![?!])' },\n         { token: 'keyword.operator.elixir',\n           regex: '\\\\b(?:and|not|or|when|xor|in|inlist|inbits)\\\\b',\n           TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n           originalRegex: '(?<!\\\\.)\\\\b(and|not|or|when|xor|in|inlist|inbits)\\\\b',\n           comment: ' as above, just doesn\\'t need a \\'end\\' and does a logic operation' },\n         { token: 'constant.language.elixir',\n           regex: '\\\\b(?:nil|true|false)\\\\b(?![?!])' },\n         { token: 'variable.language.elixir',\n           regex: '\\\\b__(?:CALLER|ENV|MODULE|DIR)__\\\\b(?![?!])' },\n         { token: \n            [ 'punctuation.definition.variable.elixir',\n              'variable.other.readwrite.module.elixir' ],\n           regex: '(@)([a-zA-Z_]\\\\w*)' },\n         { token: \n            [ 'punctuation.definition.variable.elixir',\n              'variable.other.anonymous.elixir' ],\n           regex: '(&)(\\\\d*)' },\n         { token: 'variable.other.constant.elixir',\n           regex: '\\\\b[A-Z]\\\\w*\\\\b' },\n         { token: 'constant.numeric.elixir',\n           regex: '\\\\b(?:0x[\\\\da-fA-F](?:_?[\\\\da-fA-F])*|\\\\d(?:_?\\\\d)*(?:\\\\.(?![^[:space:][:digit:]])(?:_?\\\\d)*)?(?:[eE][-+]?\\\\d(?:_?\\\\d)*)?|0b[01]+|0o[0-7]+)\\\\b',\n           TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n           originalRegex: '\\\\b(0x\\\\h(?>_?\\\\h)*|\\\\d(?>_?\\\\d)*(\\\\.(?![^[:space:][:digit:]])(?>_?\\\\d)*)?([eE][-+]?\\\\d(?>_?\\\\d)*)?|0b[01]+|0o[0-7]+)\\\\b' },\n         { token: 'punctuation.definition.constant.elixir',\n           regex: ':\\'',\n           push: \n            [ { token: 'punctuation.definition.constant.elixir',\n                regex: '\\'',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'constant.other.symbol.single-quoted.elixir' } ] },\n         { token: 'punctuation.definition.constant.elixir',\n           regex: ':\"',\n           push: \n            [ { token: 'punctuation.definition.constant.elixir',\n                regex: '\"',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'constant.other.symbol.double-quoted.elixir' } ] },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '(?:\\'\\'\\')',\n           TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n           originalRegex: '(?>\\'\\'\\')',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '^\\\\s*\\'\\'\\'',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'support.function.variable.quoted.single.heredoc.elixir' } ],\n           comment: 'Single-quoted heredocs' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '\\'',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '\\'',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'support.function.variable.quoted.single.elixir' } ],\n           comment: 'single quoted string (allows for interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '(?:\"\"\")',\n           TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n           originalRegex: '(?>\"\"\")',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '^\\\\s*\"\"\"',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'string.quoted.double.heredoc.elixir' } ],\n           comment: 'Double-quoted heredocs' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '\"',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '\"',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'string.quoted.double.elixir' } ],\n           comment: 'double quoted string (allows for interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[a-z](?:\"\"\")',\n           TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n           originalRegex: '~[a-z](?>\"\"\")',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '^\\\\s*\"\"\"',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'string.quoted.double.heredoc.elixir' } ],\n           comment: 'Double-quoted heredocs sigils' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[a-z]\\\\{',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '\\\\}[a-z]*',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'string.interpolated.elixir' } ],\n           comment: 'sigil (allow for interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[a-z]\\\\[',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '\\\\][a-z]*',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'string.interpolated.elixir' } ],\n           comment: 'sigil (allow for interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[a-z]\\\\<',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '\\\\>[a-z]*',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'string.interpolated.elixir' } ],\n           comment: 'sigil (allow for interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[a-z]\\\\(',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '\\\\)[a-z]*',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { defaultToken: 'string.interpolated.elixir' } ],\n           comment: 'sigil (allow for interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[a-z][^\\\\w]',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '[^\\\\w][a-z]*',\n                next: 'pop' },\n              { include: '#interpolated_elixir' },\n              { include: '#escaped_char' },\n              { include: '#escaped_char' },\n              { defaultToken: 'string.interpolated.elixir' } ],\n           comment: 'sigil (allow for interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[A-Z](?:\"\"\")',\n           TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n           originalRegex: '~[A-Z](?>\"\"\")',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '^\\\\s*\"\"\"',\n                next: 'pop' },\n              { defaultToken: 'string.quoted.other.literal.upper.elixir' } ],\n           comment: 'Double-quoted heredocs sigils' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[A-Z]\\\\{',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '\\\\}[a-z]*',\n                next: 'pop' },\n              { defaultToken: 'string.quoted.other.literal.upper.elixir' } ],\n           comment: 'sigil (without interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[A-Z]\\\\[',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '\\\\][a-z]*',\n                next: 'pop' },\n              { defaultToken: 'string.quoted.other.literal.upper.elixir' } ],\n           comment: 'sigil (without interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[A-Z]\\\\<',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '\\\\>[a-z]*',\n                next: 'pop' },\n              { defaultToken: 'string.quoted.other.literal.upper.elixir' } ],\n           comment: 'sigil (without interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[A-Z]\\\\(',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '\\\\)[a-z]*',\n                next: 'pop' },\n              { defaultToken: 'string.quoted.other.literal.upper.elixir' } ],\n           comment: 'sigil (without interpolation)' },\n         { token: 'punctuation.definition.string.begin.elixir',\n           regex: '~[A-Z][^\\\\w]',\n           push: \n            [ { token: 'punctuation.definition.string.end.elixir',\n                regex: '[^\\\\w][a-z]*',\n                next: 'pop' },\n              { defaultToken: 'string.quoted.other.literal.upper.elixir' } ],\n           comment: 'sigil (without interpolation)' },\n         { token: ['punctuation.definition.constant.elixir', 'constant.other.symbol.elixir'],\n           regex: '(:)([a-zA-Z_][\\\\w@]*(?:[?!]|=(?![>=]))?|\\\\<\\\\>|===?|!==?|<<>>|<<<|>>>|~~~|::|<\\\\-|\\\\|>|=>|~|~=|=|/|\\\\\\\\\\\\\\\\|\\\\*\\\\*?|\\\\.\\\\.?\\\\.?|>=?|<=?|&&?&?|\\\\+\\\\+?|\\\\-\\\\-?|\\\\|\\\\|?\\\\|?|\\\\!|@|\\\\%?\\\\{\\\\}|%|\\\\[\\\\]|\\\\^(?:\\\\^\\\\^)?)',\n           TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n           originalRegex: '(?<!:)(:)(?>[a-zA-Z_][\\\\w@]*(?>[?!]|=(?![>=]))?|\\\\<\\\\>|===?|!==?|<<>>|<<<|>>>|~~~|::|<\\\\-|\\\\|>|=>|~|~=|=|/|\\\\\\\\\\\\\\\\|\\\\*\\\\*?|\\\\.\\\\.?\\\\.?|>=?|<=?|&&?&?|\\\\+\\\\+?|\\\\-\\\\-?|\\\\|\\\\|?\\\\|?|\\\\!|@|\\\\%?\\\\{\\\\}|%|\\\\[\\\\]|\\\\^(\\\\^\\\\^)?)',\n           comment: 'symbols' },\n         { token: 'punctuation.definition.constant.elixir',\n           regex: '(?:[a-zA-Z_][\\\\w@]*(?:[?!])?):(?!:)',\n           TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n           originalRegex: '(?>[a-zA-Z_][\\\\w@]*(?>[?!])?)(:)(?!:)',\n           comment: 'symbols' },\n         { token: \n            [ 'punctuation.definition.comment.elixir',\n              'comment.line.number-sign.elixir' ],\n           regex: '(#)(.*)' },\n         { token: 'constant.numeric.elixir',\n           regex: '\\\\?(?:\\\\\\\\(?:x[\\\\da-fA-F]{1,2}(?![\\\\da-fA-F])\\\\b|[^xMC])|[^\\\\s\\\\\\\\])',\n           TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n           originalRegex: '(?<!\\\\w)\\\\?(\\\\\\\\(x\\\\h{1,2}(?!\\\\h)\\\\b|[^xMC])|[^\\\\s\\\\\\\\])',\n           comment: '\\n\\t\\t\\tmatches questionmark-letters.\\n\\n\\t\\t\\texamples (1st alternation = hex):\\n\\t\\t\\t?\\\\x1     ?\\\\x61\\n\\n\\t\\t\\texamples (2rd alternation = escaped):\\n\\t\\t\\t?\\\\n      ?\\\\b\\n\\n\\t\\t\\texamples (3rd alternation = normal):\\n\\t\\t\\t?a       ?A       ?0 \\n\\t\\t\\t?*       ?\"       ?( \\n\\t\\t\\t?.       ?#\\n\\t\\t\\t\\n\\t\\t\\tthe negative lookbehind prevents against matching\\n\\t\\t\\tp(42.tainted?)\\n\\t\\t\\t' },\n        /* { token: 'punctuation.separator.variable.elixir',\n           regex: '(?<=\\\\{|do|\\\\{\\\\s|do\\\\s)\\\\|',\n           TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n           originalRegex: '(?<=\\\\{|do|\\\\{\\\\s|do\\\\s)(\\\\|)',\n           push: \n            [ { token: 'punctuation.separator.variable.elixir',\n                regex: '\\\\|',\n                next: 'pop' },\n              { token: 'variable.other.block.elixir',\n                regex: '[_a-zA-Z][_a-zA-Z0-9]*' },\n              { token: 'punctuation.separator.variable.elixir', regex: ',' } ] },*/\n         { token: 'keyword.operator.assignment.augmented.elixir',\n           regex: '\\\\+=|\\\\-=|\\\\|\\\\|=|~=|&&=' },\n         { token: 'keyword.operator.comparison.elixir',\n           regex: '===?|!==?|<=?|>=?' },\n         { token: 'keyword.operator.bitwise.elixir',\n           regex: '\\\\|{3}|&{3}|\\\\^{3}|<{3}|>{3}|~{3}' },\n         { token: 'keyword.operator.logical.elixir',\n           regex: '!+|\\\\bnot\\\\b|&&|\\\\band\\\\b|\\\\|\\\\||\\\\bor\\\\b|\\\\bxor\\\\b',\n           originalRegex: '(?<=[ \\\\t])!+|\\\\bnot\\\\b|&&|\\\\band\\\\b|\\\\|\\\\||\\\\bor\\\\b|\\\\bxor\\\\b' },\n         { token: 'keyword.operator.arithmetic.elixir',\n           regex: '\\\\*|\\\\+|\\\\-|/' },\n         { token: 'keyword.operator.other.elixir',\n           regex: '\\\\||\\\\+\\\\+|\\\\-\\\\-|\\\\*\\\\*|\\\\\\\\\\\\\\\\|\\\\<\\\\-|\\\\<\\\\>|\\\\<\\\\<|\\\\>\\\\>|\\\\:\\\\:|\\\\.\\\\.|\\\\|>|~|=>' },\n         { token: 'keyword.operator.assignment.elixir', regex: '=' },\n         { token: 'punctuation.separator.other.elixir', regex: ':' },\n         { token: 'punctuation.separator.statement.elixir',\n           regex: '\\\\;' },\n         { token: 'punctuation.separator.object.elixir', regex: ',' },\n         { token: 'punctuation.separator.method.elixir', regex: '\\\\.' },\n         { token: 'punctuation.section.scope.elixir', regex: '\\\\{|\\\\}' },\n         { token: 'punctuation.section.array.elixir', regex: '\\\\[|\\\\]' },\n         { token: 'punctuation.section.function.elixir',\n           regex: '\\\\(|\\\\)' } ],\n      '#escaped_char': \n       [ { token: 'constant.character.escape.elixir',\n           regex: '\\\\\\\\(?:x[\\\\da-fA-F]{1,2}|.)' } ],\n      '#interpolated_elixir': \n       [ { token: \n            [ 'source.elixir.embedded.source',\n              'source.elixir.embedded.source.empty' ],\n           regex: '(#\\\\{)(\\\\})' },\n         { todo: \n            { token: 'punctuation.section.embedded.elixir',\n              regex: '#\\\\{',\n              push: \n               [ { token: 'punctuation.section.embedded.elixir',\n                   regex: '\\\\}',\n                   next: 'pop' },\n                 { include: '#nest_curly_and_self' },\n                 { include: '$self' },\n                 { defaultToken: 'source.elixir.embedded.source' } ] } } ],\n      '#nest_curly_and_self': \n       [ { token: 'punctuation.section.scope.elixir',\n           regex: '\\\\{',\n           push: \n            [ { token: 'punctuation.section.scope.elixir',\n                regex: '\\\\}',\n                next: 'pop' },\n              { include: '#nest_curly_and_self' } ] },\n         { include: '$self' } ],\n      '#regex_sub': \n       [ { include: '#interpolated_elixir' },\n         { include: '#escaped_char' },\n         { token: \n            [ 'punctuation.definition.arbitrary-repitition.elixir',\n              'string.regexp.arbitrary-repitition.elixir',\n              'string.regexp.arbitrary-repitition.elixir',\n              'punctuation.definition.arbitrary-repitition.elixir' ],\n           regex: '(\\\\{)(\\\\d+)((?:,\\\\d+)?)(\\\\})' },\n         { token: 'punctuation.definition.character-class.elixir',\n           regex: '\\\\[(?:\\\\^?\\\\])?',\n           push: \n            [ { token: 'punctuation.definition.character-class.elixir',\n                regex: '\\\\]',\n                next: 'pop' },\n              { include: '#escaped_char' },\n              { defaultToken: 'string.regexp.character-class.elixir' } ] },\n         { token: 'punctuation.definition.group.elixir',\n           regex: '\\\\(',\n           push: \n            [ { token: 'punctuation.definition.group.elixir',\n                regex: '\\\\)',\n                next: 'pop' },\n              { include: '#regex_sub' },\n              { defaultToken: 'string.regexp.group.elixir' } ] },\n         { token: \n            [ 'punctuation.definition.comment.elixir',\n              'comment.line.number-sign.elixir' ],\n           regex: '(?:^|\\\\s)(#)(\\\\s[[a-zA-Z0-9,. \\\\t?!-][^\\\\x00-\\\\x7F]]*$)',\n           originalRegex: '(?<=^|\\\\s)(#)\\\\s[[a-zA-Z0-9,. \\\\t?!-][^\\\\x{00}-\\\\x{7F}]]*$',\n           comment: 'We are restrictive in what we allow to go after the comment character to avoid false positives, since the availability of comments depend on regexp flags.' } ] };\n    \n    this.normalizeRules();\n};\n\nElixirHighlightRules.metaData = { comment: 'Textmate bundle for Elixir Programming Language.',\n      fileTypes: [ 'ex', 'exs' ],\n      firstLineMatch: '^#!/.*\\\\belixir',\n      foldingStartMarker: '(after|else|catch|rescue|\\\\-\\\\>|\\\\{|\\\\[|do)\\\\s*$',\n      foldingStopMarker: '^\\\\s*((\\\\}|\\\\]|after|else|catch|rescue)\\\\s*$|end\\\\b)',\n      keyEquivalent: '^~E',\n      name: 'Elixir',\n      scopeName: 'source.elixir' };\n\n\noop.inherits(ElixirHighlightRules, TextHighlightRules);\n\nexports.ElixirHighlightRules = ElixirHighlightRules;\n});"
  },
  {
    "path": "lib/ace/mode/elm.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar HighlightRules = require(\"./elm_highlight_rules\").ElmHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = HighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"--\";\n    this.blockComment = {start: \"{-\", end: \"-}\", nestable: true};\n    // Extra logic goes here.\n    this.$id = \"ace/mode/elm\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});"
  },
  {
    "path": "lib/ace/mode/elm_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n// TODO check with https://github.com/deadfoxygrandpa/Elm.tmLanguage\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar ElmHighlightRules = function() {\n    var keywordMapper = this.createKeywordMapper({\n       \"keyword\": \"as|case|class|data|default|deriving|do|else|export|foreign|\" +\n            \"hiding|jsevent|if|import|in|infix|infixl|infixr|instance|let|\" +\n            \"module|newtype|of|open|then|type|where|_|port|\\u03BB\"\n    }, \"identifier\");\n    \n    var escapeRe = /\\\\(\\d+|['\"\\\\&trnbvf])/;\n    \n    var smallRe = /[a-z_]/.source;\n    var largeRe = /[A-Z]/.source;\n    var idRe = /[a-z_A-Z0-9']/.source;\n\n    this.$rules = {\n        start: [{\n            token: \"string.start\",\n            regex: '\"',\n            next: \"string\"\n        }, {\n            token: \"string.character\",\n            regex: \"'(?:\" + escapeRe.source + \"|.)'?\"\n        }, {\n            regex: /0(?:[xX][0-9A-Fa-f]+|[oO][0-7]+)|\\d+(\\.\\d+)?([eE][-+]?\\d*)?/,\n            token: \"constant.numeric\"\n        }, {\n            token: \"comment\",\n            regex: \"--.*\"\n        }, {\n            token : \"keyword\",\n            regex : /\\.\\.|\\||:|=|\\\\|\"|->|<-|\\u2192/\n        }, {\n            token : \"keyword.operator\",\n            regex : /[-!#$%&*+.\\/<=>?@\\\\^|~:\\u03BB\\u2192]+/\n        }, {\n            token : \"operator.punctuation\",\n            regex : /[,;`]/\n        }, {\n            regex : largeRe + idRe + \"+\\\\.?\",\n            token : function(value) {\n                if (value[value.length - 1] == \".\")\n                    return \"entity.name.function\"; \n                return \"constant.language\"; \n            }\n        }, {\n            regex : \"^\" + smallRe  + idRe + \"+\",\n            token : function(value) {\n                return \"constant.language\"; \n            }\n        }, {\n            token : keywordMapper,\n            regex : \"[\\\\w\\\\xff-\\\\u218e\\\\u2455-\\\\uffff]+\\\\b\"\n        }, {\n            regex: \"{-#?\",\n            token: \"comment.start\",\n            onMatch: function(value, currentState, stack) {\n                this.next = value.length == 2 ? \"blockComment\" : \"docComment\";\n                return this.token;\n            }\n        }, {\n            token: \"variable.language\",\n            regex: /\\[markdown\\|/,\n            next: \"markdown\"\n        }, {\n            token: \"paren.lparen\",\n            regex: /[\\[({]/ \n        }, {\n            token: \"paren.rparen\",\n            regex: /[\\])}]/\n        } ],\n        markdown: [{\n            regex: /\\|\\]/,\n            next: \"start\"\n        }, {\n            defaultToken : \"string\"\n        }],\n        blockComment: [{\n            regex: \"{-\",\n            token: \"comment.start\",\n            push: \"blockComment\"\n        }, {\n            regex: \"-}\",\n            token: \"comment.end\",\n            next: \"pop\"\n        }, {\n            defaultToken: \"comment\"\n        }],\n        docComment: [{\n            regex: \"{-\",\n            token: \"comment.start\",\n            push: \"docComment\"\n        }, {\n            regex: \"-}\",\n            token: \"comment.end\",\n            next: \"pop\" \n        }, {\n            defaultToken: \"doc.comment\"\n        }],\n        string: [{\n            token: \"constant.language.escape\",\n            regex: escapeRe\n        }, {\n            token: \"text\",\n            regex: /\\\\(\\s|$)/,\n            next: \"stringGap\"\n        }, {\n            token: \"string.end\",\n            regex: '\"',\n            next: \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        stringGap: [{\n            token: \"text\",\n            regex: /\\\\/,\n            next: \"string\"\n        }, {\n            token: \"error\",\n            regex: \"\",\n            next: \"start\"\n        }]\n    };\n    \n    this.normalizeRules();\n};\n\noop.inherits(ElmHighlightRules, TextHighlightRules);\n\nexports.ElmHighlightRules = ElmHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/erlang.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ErlangHighlightRules = require(\"./erlang_highlight_rules\").ErlangHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = ErlangHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"%\";\n    this.blockComment = null;\n    this.$id = \"ace/mode/erlang\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});"
  },
  {
    "path": "lib/ace/mode/erlang_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/* This file was autogenerated from tm bundles\\erlang.tmbundle\\Syntaxes\\Erlang.plist (uuid: ) */\n/****************************************************************************************\n * IT MIGHT NOT BE PERFECT ...But it's a good start from an existing *.tmlanguage file. *\n * fileTypes                                                                            *\n ****************************************************************************************/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar ErlangHighlightRules = function() {\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = { start: \n       [ { include: '#module-directive' },\n         { include: '#import-export-directive' },\n         { include: '#behaviour-directive' },\n         { include: '#record-directive' },\n         { include: '#define-directive' },\n         { include: '#macro-directive' },\n         { include: '#directive' },\n         { include: '#function' },\n         { include: '#everything-else' } ],\n      '#atom': \n       [ { token: 'punctuation.definition.symbol.begin.erlang',\n           regex: '\\'',\n           push: \n            [ { token: 'punctuation.definition.symbol.end.erlang',\n                regex: '\\'',\n                next: 'pop' },\n              { token: \n                 [ 'punctuation.definition.escape.erlang',\n                   'constant.other.symbol.escape.erlang',\n                   'punctuation.definition.escape.erlang',\n                   'constant.other.symbol.escape.erlang',\n                   'constant.other.symbol.escape.erlang' ],\n                regex: '(\\\\\\\\)(?:([bdefnrstv\\\\\\\\\\'\"])|(\\\\^)([@-_])|([0-7]{1,3}))' },\n              { token: 'invalid.illegal.atom.erlang', regex: '\\\\\\\\\\\\^?.?' },\n              { defaultToken: 'constant.other.symbol.quoted.single.erlang' } ] },\n         { token: 'constant.other.symbol.unquoted.erlang',\n           regex: '[a-z][a-zA-Z\\\\d@_]*' } ],\n      '#behaviour-directive': \n       [ { token: \n            [ 'meta.directive.behaviour.erlang',\n              'punctuation.section.directive.begin.erlang',\n              'meta.directive.behaviour.erlang',\n              'keyword.control.directive.behaviour.erlang',\n              'meta.directive.behaviour.erlang',\n              'punctuation.definition.parameters.begin.erlang',\n              'meta.directive.behaviour.erlang',\n              'entity.name.type.class.behaviour.definition.erlang',\n              'meta.directive.behaviour.erlang',\n              'punctuation.definition.parameters.end.erlang',\n              'meta.directive.behaviour.erlang',\n              'punctuation.section.directive.end.erlang' ],\n           regex: '^(\\\\s*)(-)(\\\\s*)(behaviour)(\\\\s*)(\\\\()(\\\\s*)([a-z][a-zA-Z\\\\d@_]*)(\\\\s*)(\\\\))(\\\\s*)(\\\\.)' } ],\n      '#binary': \n       [ { token: 'punctuation.definition.binary.begin.erlang',\n           regex: '<<',\n           push: \n            [ { token: 'punctuation.definition.binary.end.erlang',\n                regex: '>>',\n                next: 'pop' },\n              { token: \n                 [ 'punctuation.separator.binary.erlang',\n                   'punctuation.separator.value-size.erlang' ],\n                regex: '(,)|(:)' },\n              { include: '#internal-type-specifiers' },\n              { include: '#everything-else' },\n              { defaultToken: 'meta.structure.binary.erlang' } ] } ],\n      '#character': \n       [ { token: \n            [ 'punctuation.definition.character.erlang',\n              'punctuation.definition.escape.erlang',\n              'constant.character.escape.erlang',\n              'punctuation.definition.escape.erlang',\n              'constant.character.escape.erlang',\n              'constant.character.escape.erlang' ],\n           regex: '(\\\\$)(\\\\\\\\)(?:([bdefnrstv\\\\\\\\\\'\"])|(\\\\^)([@-_])|([0-7]{1,3}))' },\n         { token: 'invalid.illegal.character.erlang',\n           regex: '\\\\$\\\\\\\\\\\\^?.?' },\n         { token: \n            [ 'punctuation.definition.character.erlang',\n              'constant.character.erlang' ],\n           regex: '(\\\\$)(\\\\S)' },\n         { token: 'invalid.illegal.character.erlang', regex: '\\\\$.?' } ],\n      '#comment': \n       [ { token: 'punctuation.definition.comment.erlang',\n           regex: '%.*$',\n           push_: \n            [ { token: 'comment.line.percentage.erlang',\n                regex: '$',\n                next: 'pop' },\n              { defaultToken: 'comment.line.percentage.erlang' } ] } ],\n      '#define-directive': \n       [ { token: \n            [ 'meta.directive.define.erlang',\n              'punctuation.section.directive.begin.erlang',\n              'meta.directive.define.erlang',\n              'keyword.control.directive.define.erlang',\n              'meta.directive.define.erlang',\n              'punctuation.definition.parameters.begin.erlang',\n              'meta.directive.define.erlang',\n              'entity.name.function.macro.definition.erlang',\n              'meta.directive.define.erlang',\n              'punctuation.separator.parameters.erlang' ],\n           regex: '^(\\\\s*)(-)(\\\\s*)(define)(\\\\s*)(\\\\()(\\\\s*)([a-zA-Z\\\\d@_]+)(\\\\s*)(,)',\n           push: \n            [ { token: \n                 [ 'punctuation.definition.parameters.end.erlang',\n                   'meta.directive.define.erlang',\n                   'punctuation.section.directive.end.erlang' ],\n                regex: '(\\\\))(\\\\s*)(\\\\.)',\n                next: 'pop' },\n              { include: '#everything-else' },\n              { defaultToken: 'meta.directive.define.erlang' } ] },\n         { token: 'meta.directive.define.erlang',\n           regex: '(?=^\\\\s*-\\\\s*define\\\\s*\\\\(\\\\s*[a-zA-Z\\\\d@_]+\\\\s*\\\\()',\n           push: \n            [ { token: \n                 [ 'punctuation.definition.parameters.end.erlang',\n                   'meta.directive.define.erlang',\n                   'punctuation.section.directive.end.erlang' ],\n                regex: '(\\\\))(\\\\s*)(\\\\.)',\n                next: 'pop' },\n              { token: \n                 [ 'text',\n                   'punctuation.section.directive.begin.erlang',\n                   'text',\n                   'keyword.control.directive.define.erlang',\n                   'text',\n                   'punctuation.definition.parameters.begin.erlang',\n                   'text',\n                   'entity.name.function.macro.definition.erlang',\n                   'text',\n                   'punctuation.definition.parameters.begin.erlang' ],\n                regex: '^(\\\\s*)(-)(\\\\s*)(define)(\\\\s*)(\\\\()(\\\\s*)([a-zA-Z\\\\d@_]+)(\\\\s*)(\\\\()',\n                push: \n                 [ { token: \n                      [ 'punctuation.definition.parameters.end.erlang',\n                        'text',\n                        'punctuation.separator.parameters.erlang' ],\n                     regex: '(\\\\))(\\\\s*)(,)',\n                     next: 'pop' },\n                   { token: 'punctuation.separator.parameters.erlang', regex: ',' },\n                   { include: '#everything-else' } ] },\n              { token: 'punctuation.separator.define.erlang',\n                regex: '\\\\|\\\\||\\\\||:|;|,|\\\\.|->' },\n              { include: '#everything-else' },\n              { defaultToken: 'meta.directive.define.erlang' } ] } ],\n      '#directive': \n       [ { token: \n            [ 'meta.directive.erlang',\n              'punctuation.section.directive.begin.erlang',\n              'meta.directive.erlang',\n              'keyword.control.directive.erlang',\n              'meta.directive.erlang',\n              'punctuation.definition.parameters.begin.erlang' ],\n           regex: '^(\\\\s*)(-)(\\\\s*)([a-z][a-zA-Z\\\\d@_]*)(\\\\s*)(\\\\(?)',\n           push: \n            [ { token: \n                 [ 'punctuation.definition.parameters.end.erlang',\n                   'meta.directive.erlang',\n                   'punctuation.section.directive.end.erlang' ],\n                regex: '(\\\\)?)(\\\\s*)(\\\\.)',\n                next: 'pop' },\n              { include: '#everything-else' },\n              { defaultToken: 'meta.directive.erlang' } ] },\n         { token: \n            [ 'meta.directive.erlang',\n              'punctuation.section.directive.begin.erlang',\n              'meta.directive.erlang',\n              'keyword.control.directive.erlang',\n              'meta.directive.erlang',\n              'punctuation.section.directive.end.erlang' ],\n           regex: '^(\\\\s*)(-)(\\\\s*)([a-z][a-zA-Z\\\\d@_]*)(\\\\s*)(\\\\.)' } ],\n      '#everything-else': \n       [ { include: '#comment' },\n         { include: '#record-usage' },\n         { include: '#macro-usage' },\n         { include: '#expression' },\n         { include: '#keyword' },\n         { include: '#textual-operator' },\n         { include: '#function-call' },\n         { include: '#tuple' },\n         { include: '#list' },\n         { include: '#binary' },\n         { include: '#parenthesized-expression' },\n         { include: '#character' },\n         { include: '#number' },\n         { include: '#atom' },\n         { include: '#string' },\n         { include: '#symbolic-operator' },\n         { include: '#variable' } ],\n      '#expression': \n       [ { token: 'keyword.control.if.erlang',\n           regex: '\\\\bif\\\\b',\n           push: \n            [ { token: 'keyword.control.end.erlang',\n                regex: '\\\\bend\\\\b',\n                next: 'pop' },\n              { include: '#internal-expression-punctuation' },\n              { include: '#everything-else' },\n              { defaultToken: 'meta.expression.if.erlang' } ] },\n         { token: 'keyword.control.case.erlang',\n           regex: '\\\\bcase\\\\b',\n           push: \n            [ { token: 'keyword.control.end.erlang',\n                regex: '\\\\bend\\\\b',\n                next: 'pop' },\n              { include: '#internal-expression-punctuation' },\n              { include: '#everything-else' },\n              { defaultToken: 'meta.expression.case.erlang' } ] },\n         { token: 'keyword.control.receive.erlang',\n           regex: '\\\\breceive\\\\b',\n           push: \n            [ { token: 'keyword.control.end.erlang',\n                regex: '\\\\bend\\\\b',\n                next: 'pop' },\n              { include: '#internal-expression-punctuation' },\n              { include: '#everything-else' },\n              { defaultToken: 'meta.expression.receive.erlang' } ] },\n         { token: \n            [ 'keyword.control.fun.erlang',\n              'text',\n              'entity.name.type.class.module.erlang',\n              'text',\n              'punctuation.separator.module-function.erlang',\n              'text',\n              'entity.name.function.erlang',\n              'text',\n              'punctuation.separator.function-arity.erlang' ],\n           regex: '\\\\b(fun)(\\\\s*)(?:([a-z][a-zA-Z\\\\d@_]*)(\\\\s*)(:)(\\\\s*))?([a-z][a-zA-Z\\\\d@_]*)(\\\\s*)(/)' },\n         { token: 'keyword.control.fun.erlang',\n           regex: '\\\\bfun\\\\b',\n           push: \n            [ { token: 'keyword.control.end.erlang',\n                regex: '\\\\bend\\\\b',\n                next: 'pop' },\n              { token: 'text',\n                regex: '(?=\\\\()',\n                push: \n                 [ { token: 'punctuation.separator.clauses.erlang',\n                     regex: ';|(?=\\\\bend\\\\b)',\n                     next: 'pop' },\n                   { include: '#internal-function-parts' } ] },\n              { include: '#everything-else' },\n              { defaultToken: 'meta.expression.fun.erlang' } ] },\n         { token: 'keyword.control.try.erlang',\n           regex: '\\\\btry\\\\b',\n           push: \n            [ { token: 'keyword.control.end.erlang',\n                regex: '\\\\bend\\\\b',\n                next: 'pop' },\n              { include: '#internal-expression-punctuation' },\n              { include: '#everything-else' },\n              { defaultToken: 'meta.expression.try.erlang' } ] },\n         { token: 'keyword.control.begin.erlang',\n           regex: '\\\\bbegin\\\\b',\n           push: \n            [ { token: 'keyword.control.end.erlang',\n                regex: '\\\\bend\\\\b',\n                next: 'pop' },\n              { include: '#internal-expression-punctuation' },\n              { include: '#everything-else' },\n              { defaultToken: 'meta.expression.begin.erlang' } ] },\n         { token: 'keyword.control.query.erlang',\n           regex: '\\\\bquery\\\\b',\n           push: \n            [ { token: 'keyword.control.end.erlang',\n                regex: '\\\\bend\\\\b',\n                next: 'pop' },\n              { include: '#everything-else' },\n              { defaultToken: 'meta.expression.query.erlang' } ] } ],\n      '#function': \n       [ { token: \n            [ 'meta.function.erlang',\n              'entity.name.function.definition.erlang',\n              'meta.function.erlang' ],\n           regex: '^(\\\\s*)([a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')(\\\\s*)(?=\\\\()',\n           push: \n            [ { token: 'punctuation.terminator.function.erlang',\n                regex: '\\\\.',\n                next: 'pop' },\n              { token: [ 'text', 'entity.name.function.erlang', 'text' ],\n                regex: '^(\\\\s*)([a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')(\\\\s*)(?=\\\\()' },\n              { token: 'text',\n                regex: '(?=\\\\()',\n                push: \n                 [ { token: 'punctuation.separator.clauses.erlang',\n                     regex: ';|(?=\\\\.)',\n                     next: 'pop' },\n                   { include: '#parenthesized-expression' },\n                   { include: '#internal-function-parts' } ] },\n              { include: '#everything-else' },\n              { defaultToken: 'meta.function.erlang' } ] } ],\n      '#function-call': \n       [ { token: 'meta.function-call.erlang',\n           regex: '(?=(?:[a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')\\\\s*(?:\\\\(|:\\\\s*(?:[a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')\\\\s*\\\\())',\n           push: \n            [ { token: 'punctuation.definition.parameters.end.erlang',\n                regex: '\\\\)',\n                next: 'pop' },\n              { token: \n                 [ 'entity.name.type.class.module.erlang',\n                   'text',\n                   'punctuation.separator.module-function.erlang',\n                   'text',\n                   'entity.name.function.guard.erlang',\n                   'text',\n                   'punctuation.definition.parameters.begin.erlang' ],\n                regex: '(?:(erlang)(\\\\s*)(:)(\\\\s*))?(is_atom|is_binary|is_constant|is_float|is_function|is_integer|is_list|is_number|is_pid|is_port|is_reference|is_tuple|is_record|abs|element|hd|length|node|round|self|size|tl|trunc)(\\\\s*)(\\\\()',\n                push: \n                 [ { token: 'text', regex: '(?=\\\\))', next: 'pop' },\n                   { token: 'punctuation.separator.parameters.erlang', regex: ',' },\n                   { include: '#everything-else' } ] },\n              { token: \n                 [ 'entity.name.type.class.module.erlang',\n                   'text',\n                   'punctuation.separator.module-function.erlang',\n                   'text',\n                   'entity.name.function.erlang',\n                   'text',\n                   'punctuation.definition.parameters.begin.erlang' ],\n                regex: '(?:([a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')(\\\\s*)(:)(\\\\s*))?([a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')(\\\\s*)(\\\\()',\n                push: \n                 [ { token: 'text', regex: '(?=\\\\))', next: 'pop' },\n                   { token: 'punctuation.separator.parameters.erlang', regex: ',' },\n                   { include: '#everything-else' } ] },\n              { defaultToken: 'meta.function-call.erlang' } ] } ],\n      '#import-export-directive': \n       [ { token: \n            [ 'meta.directive.import.erlang',\n              'punctuation.section.directive.begin.erlang',\n              'meta.directive.import.erlang',\n              'keyword.control.directive.import.erlang',\n              'meta.directive.import.erlang',\n              'punctuation.definition.parameters.begin.erlang',\n              'meta.directive.import.erlang',\n              'entity.name.type.class.module.erlang',\n              'meta.directive.import.erlang',\n              'punctuation.separator.parameters.erlang' ],\n           regex: '^(\\\\s*)(-)(\\\\s*)(import)(\\\\s*)(\\\\()(\\\\s*)([a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')(\\\\s*)(,)',\n           push: \n            [ { token: \n                 [ 'punctuation.definition.parameters.end.erlang',\n                   'meta.directive.import.erlang',\n                   'punctuation.section.directive.end.erlang' ],\n                regex: '(\\\\))(\\\\s*)(\\\\.)',\n                next: 'pop' },\n              { include: '#internal-function-list' },\n              { defaultToken: 'meta.directive.import.erlang' } ] },\n         { token: \n            [ 'meta.directive.export.erlang',\n              'punctuation.section.directive.begin.erlang',\n              'meta.directive.export.erlang',\n              'keyword.control.directive.export.erlang',\n              'meta.directive.export.erlang',\n              'punctuation.definition.parameters.begin.erlang' ],\n           regex: '^(\\\\s*)(-)(\\\\s*)(export)(\\\\s*)(\\\\()',\n           push: \n            [ { token: \n                 [ 'punctuation.definition.parameters.end.erlang',\n                   'meta.directive.export.erlang',\n                   'punctuation.section.directive.end.erlang' ],\n                regex: '(\\\\))(\\\\s*)(\\\\.)',\n                next: 'pop' },\n              { include: '#internal-function-list' },\n              { defaultToken: 'meta.directive.export.erlang' } ] } ],\n      '#internal-expression-punctuation': \n       [ { token: \n            [ 'punctuation.separator.clause-head-body.erlang',\n              'punctuation.separator.clauses.erlang',\n              'punctuation.separator.expressions.erlang' ],\n           regex: '(->)|(;)|(,)' } ],\n      '#internal-function-list': \n       [ { token: 'punctuation.definition.list.begin.erlang',\n           regex: '\\\\[',\n           push: \n            [ { token: 'punctuation.definition.list.end.erlang',\n                regex: '\\\\]',\n                next: 'pop' },\n              { token: \n                 [ 'entity.name.function.erlang',\n                   'text',\n                   'punctuation.separator.function-arity.erlang' ],\n                regex: '([a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')(\\\\s*)(/)',\n                push: \n                 [ { token: 'punctuation.separator.list.erlang',\n                     regex: ',|(?=\\\\])',\n                     next: 'pop' },\n                   { include: '#everything-else' } ] },\n              { include: '#everything-else' },\n              { defaultToken: 'meta.structure.list.function.erlang' } ] } ],\n      '#internal-function-parts': \n       [ { token: 'text',\n           regex: '(?=\\\\()',\n           push: \n            [ { token: 'punctuation.separator.clause-head-body.erlang',\n                regex: '->',\n                next: 'pop' },\n              { token: 'punctuation.definition.parameters.begin.erlang',\n                regex: '\\\\(',\n                push: \n                 [ { token: 'punctuation.definition.parameters.end.erlang',\n                     regex: '\\\\)',\n                     next: 'pop' },\n                   { token: 'punctuation.separator.parameters.erlang', regex: ',' },\n                   { include: '#everything-else' } ] },\n              { token: 'punctuation.separator.guards.erlang', regex: ',|;' },\n              { include: '#everything-else' } ] },\n         { token: 'punctuation.separator.expressions.erlang',\n           regex: ',' },\n         { include: '#everything-else' } ],\n      '#internal-record-body': \n       [ { token: 'punctuation.definition.class.record.begin.erlang',\n           regex: '\\\\{',\n           push: \n            [ { token: 'meta.structure.record.erlang',\n                regex: '(?=\\\\})',\n                next: 'pop' },\n              { token: \n                 [ 'variable.other.field.erlang',\n                   'variable.language.omitted.field.erlang',\n                   'text',\n                   'keyword.operator.assignment.erlang' ],\n                regex: '(?:([a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')|(_))(\\\\s*)(=|::)',\n                push: \n                 [ { token: 'punctuation.separator.class.record.erlang',\n                     regex: ',|(?=\\\\})',\n                     next: 'pop' },\n                   { include: '#everything-else' } ] },\n              { token: \n                 [ 'variable.other.field.erlang',\n                   'text',\n                   'punctuation.separator.class.record.erlang' ],\n                regex: '([a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')(\\\\s*)((?:,)?)' },\n              { include: '#everything-else' },\n              { defaultToken: 'meta.structure.record.erlang' } ] } ],\n      '#internal-type-specifiers': \n       [ { token: 'punctuation.separator.value-type.erlang',\n           regex: '/',\n           push: \n            [ { token: 'text', regex: '(?=,|:|>>)', next: 'pop' },\n              { token: \n                 [ 'storage.type.erlang',\n                   'storage.modifier.signedness.erlang',\n                   'storage.modifier.endianness.erlang',\n                   'storage.modifier.unit.erlang',\n                   'punctuation.separator.type-specifiers.erlang' ],\n                regex: '(integer|float|binary|bytes|bitstring|bits)|(signed|unsigned)|(big|little|native)|(unit)|(-)' } ] } ],\n      '#keyword': \n       [ { token: 'keyword.control.erlang',\n           regex: '\\\\b(?:after|begin|case|catch|cond|end|fun|if|let|of|query|try|receive|when)\\\\b' } ],\n      '#list': \n       [ { token: 'punctuation.definition.list.begin.erlang',\n           regex: '\\\\[',\n           push: \n            [ { token: 'punctuation.definition.list.end.erlang',\n                regex: '\\\\]',\n                next: 'pop' },\n              { token: 'punctuation.separator.list.erlang',\n                regex: '\\\\||\\\\|\\\\||,' },\n              { include: '#everything-else' },\n              { defaultToken: 'meta.structure.list.erlang' } ] } ],\n      '#macro-directive': \n       [ { token: \n            [ 'meta.directive.ifdef.erlang',\n              'punctuation.section.directive.begin.erlang',\n              'meta.directive.ifdef.erlang',\n              'keyword.control.directive.ifdef.erlang',\n              'meta.directive.ifdef.erlang',\n              'punctuation.definition.parameters.begin.erlang',\n              'meta.directive.ifdef.erlang',\n              'entity.name.function.macro.erlang',\n              'meta.directive.ifdef.erlang',\n              'punctuation.definition.parameters.end.erlang',\n              'meta.directive.ifdef.erlang',\n              'punctuation.section.directive.end.erlang' ],\n           regex: '^(\\\\s*)(-)(\\\\s*)(ifdef)(\\\\s*)(\\\\()(\\\\s*)([a-zA-Z\\\\d@_]+)(\\\\s*)(\\\\))(\\\\s*)(\\\\.)' },\n         { token: \n            [ 'meta.directive.ifndef.erlang',\n              'punctuation.section.directive.begin.erlang',\n              'meta.directive.ifndef.erlang',\n              'keyword.control.directive.ifndef.erlang',\n              'meta.directive.ifndef.erlang',\n              'punctuation.definition.parameters.begin.erlang',\n              'meta.directive.ifndef.erlang',\n              'entity.name.function.macro.erlang',\n              'meta.directive.ifndef.erlang',\n              'punctuation.definition.parameters.end.erlang',\n              'meta.directive.ifndef.erlang',\n              'punctuation.section.directive.end.erlang' ],\n           regex: '^(\\\\s*)(-)(\\\\s*)(ifndef)(\\\\s*)(\\\\()(\\\\s*)([a-zA-Z\\\\d@_]+)(\\\\s*)(\\\\))(\\\\s*)(\\\\.)' },\n         { token: \n            [ 'meta.directive.undef.erlang',\n              'punctuation.section.directive.begin.erlang',\n              'meta.directive.undef.erlang',\n              'keyword.control.directive.undef.erlang',\n              'meta.directive.undef.erlang',\n              'punctuation.definition.parameters.begin.erlang',\n              'meta.directive.undef.erlang',\n              'entity.name.function.macro.erlang',\n              'meta.directive.undef.erlang',\n              'punctuation.definition.parameters.end.erlang',\n              'meta.directive.undef.erlang',\n              'punctuation.section.directive.end.erlang' ],\n           regex: '^(\\\\s*)(-)(\\\\s*)(undef)(\\\\s*)(\\\\()(\\\\s*)([a-zA-Z\\\\d@_]+)(\\\\s*)(\\\\))(\\\\s*)(\\\\.)' } ],\n      '#macro-usage': \n       [ { token: \n            [ 'keyword.operator.macro.erlang',\n              'meta.macro-usage.erlang',\n              'entity.name.function.macro.erlang' ],\n           regex: '(\\\\?\\\\??)(\\\\s*)([a-zA-Z\\\\d@_]+)' } ],\n      '#module-directive': \n       [ { token: \n            [ 'meta.directive.module.erlang',\n              'punctuation.section.directive.begin.erlang',\n              'meta.directive.module.erlang',\n              'keyword.control.directive.module.erlang',\n              'meta.directive.module.erlang',\n              'punctuation.definition.parameters.begin.erlang',\n              'meta.directive.module.erlang',\n              'entity.name.type.class.module.definition.erlang',\n              'meta.directive.module.erlang',\n              'punctuation.definition.parameters.end.erlang',\n              'meta.directive.module.erlang',\n              'punctuation.section.directive.end.erlang' ],\n           regex: '^(\\\\s*)(-)(\\\\s*)(module)(\\\\s*)(\\\\()(\\\\s*)([a-z][a-zA-Z\\\\d@_]*)(\\\\s*)(\\\\))(\\\\s*)(\\\\.)' } ],\n      '#number': \n       [ { token: 'text',\n           regex: '(?=\\\\d)',\n           push: \n            [ { token: 'text', regex: '(?!\\\\d)', next: 'pop' },\n              { token: \n                 [ 'constant.numeric.float.erlang',\n                   'punctuation.separator.integer-float.erlang',\n                   'constant.numeric.float.erlang',\n                   'punctuation.separator.float-exponent.erlang' ],\n                regex: '(\\\\d+)(\\\\.)(\\\\d+)((?:[eE][\\\\+\\\\-]?\\\\d+)?)' },\n              { token: \n                 [ 'constant.numeric.integer.binary.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.binary.erlang' ],\n                regex: '(2)(#)([0-1]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-3.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-3.erlang' ],\n                regex: '(3)(#)([0-2]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-4.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-4.erlang' ],\n                regex: '(4)(#)([0-3]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-5.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-5.erlang' ],\n                regex: '(5)(#)([0-4]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-6.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-6.erlang' ],\n                regex: '(6)(#)([0-5]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-7.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-7.erlang' ],\n                regex: '(7)(#)([0-6]+)' },\n              { token: \n                 [ 'constant.numeric.integer.octal.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.octal.erlang' ],\n                regex: '(8)(#)([0-7]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-9.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-9.erlang' ],\n                regex: '(9)(#)([0-8]+)' },\n              { token: \n                 [ 'constant.numeric.integer.decimal.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.decimal.erlang' ],\n                regex: '(10)(#)(\\\\d+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-11.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-11.erlang' ],\n                regex: '(11)(#)([\\\\daA]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-12.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-12.erlang' ],\n                regex: '(12)(#)([\\\\da-bA-B]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-13.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-13.erlang' ],\n                regex: '(13)(#)([\\\\da-cA-C]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-14.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-14.erlang' ],\n                regex: '(14)(#)([\\\\da-dA-D]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-15.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-15.erlang' ],\n                regex: '(15)(#)([\\\\da-eA-E]+)' },\n              { token: \n                 [ 'constant.numeric.integer.hexadecimal.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.hexadecimal.erlang' ],\n                regex: '(16)(#)([\\\\da-fA-F]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-17.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-17.erlang' ],\n                regex: '(17)(#)([\\\\da-gA-G]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-18.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-18.erlang' ],\n                regex: '(18)(#)([\\\\da-hA-H]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-19.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-19.erlang' ],\n                regex: '(19)(#)([\\\\da-iA-I]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-20.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-20.erlang' ],\n                regex: '(20)(#)([\\\\da-jA-J]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-21.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-21.erlang' ],\n                regex: '(21)(#)([\\\\da-kA-K]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-22.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-22.erlang' ],\n                regex: '(22)(#)([\\\\da-lA-L]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-23.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-23.erlang' ],\n                regex: '(23)(#)([\\\\da-mA-M]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-24.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-24.erlang' ],\n                regex: '(24)(#)([\\\\da-nA-N]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-25.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-25.erlang' ],\n                regex: '(25)(#)([\\\\da-oA-O]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-26.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-26.erlang' ],\n                regex: '(26)(#)([\\\\da-pA-P]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-27.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-27.erlang' ],\n                regex: '(27)(#)([\\\\da-qA-Q]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-28.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-28.erlang' ],\n                regex: '(28)(#)([\\\\da-rA-R]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-29.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-29.erlang' ],\n                regex: '(29)(#)([\\\\da-sA-S]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-30.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-30.erlang' ],\n                regex: '(30)(#)([\\\\da-tA-T]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-31.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-31.erlang' ],\n                regex: '(31)(#)([\\\\da-uA-U]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-32.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-32.erlang' ],\n                regex: '(32)(#)([\\\\da-vA-V]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-33.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-33.erlang' ],\n                regex: '(33)(#)([\\\\da-wA-W]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-34.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-34.erlang' ],\n                regex: '(34)(#)([\\\\da-xA-X]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-35.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-35.erlang' ],\n                regex: '(35)(#)([\\\\da-yA-Y]+)' },\n              { token: \n                 [ 'constant.numeric.integer.base-36.erlang',\n                   'punctuation.separator.base-integer.erlang',\n                   'constant.numeric.integer.base-36.erlang' ],\n                regex: '(36)(#)([\\\\da-zA-Z]+)' },\n              { token: 'invalid.illegal.integer.erlang',\n                regex: '\\\\d+#[\\\\da-zA-Z]+' },\n              { token: 'constant.numeric.integer.decimal.erlang',\n                regex: '\\\\d+' } ] } ],\n      '#parenthesized-expression': \n       [ { token: 'punctuation.section.expression.begin.erlang',\n           regex: '\\\\(',\n           push: \n            [ { token: 'punctuation.section.expression.end.erlang',\n                regex: '\\\\)',\n                next: 'pop' },\n              { include: '#everything-else' },\n              { defaultToken: 'meta.expression.parenthesized' } ] } ],\n      '#record-directive': \n       [ { token: \n            [ 'meta.directive.record.erlang',\n              'punctuation.section.directive.begin.erlang',\n              'meta.directive.record.erlang',\n              'keyword.control.directive.import.erlang',\n              'meta.directive.record.erlang',\n              'punctuation.definition.parameters.begin.erlang',\n              'meta.directive.record.erlang',\n              'entity.name.type.class.record.definition.erlang',\n              'meta.directive.record.erlang',\n              'punctuation.separator.parameters.erlang' ],\n           regex: '^(\\\\s*)(-)(\\\\s*)(record)(\\\\s*)(\\\\()(\\\\s*)([a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')(\\\\s*)(,)',\n           push: \n            [ { token: \n                 [ 'punctuation.definition.class.record.end.erlang',\n                   'meta.directive.record.erlang',\n                   'punctuation.definition.parameters.end.erlang',\n                   'meta.directive.record.erlang',\n                   'punctuation.section.directive.end.erlang' ],\n                regex: '(\\\\})(\\\\s*)(\\\\))(\\\\s*)(\\\\.)',\n                next: 'pop' },\n              { include: '#internal-record-body' },\n              { defaultToken: 'meta.directive.record.erlang' } ] } ],\n      '#record-usage': \n       [ { token: \n            [ 'keyword.operator.record.erlang',\n              'meta.record-usage.erlang',\n              'entity.name.type.class.record.erlang',\n              'meta.record-usage.erlang',\n              'punctuation.separator.record-field.erlang',\n              'meta.record-usage.erlang',\n              'variable.other.field.erlang' ],\n           regex: '(#)(\\\\s*)([a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')(\\\\s*)(\\\\.)(\\\\s*)([a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')' },\n         { token: \n            [ 'keyword.operator.record.erlang',\n              'meta.record-usage.erlang',\n              'entity.name.type.class.record.erlang' ],\n           regex: '(#)(\\\\s*)([a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')',\n           push: \n            [ { token: 'punctuation.definition.class.record.end.erlang',\n                regex: '\\\\}',\n                next: 'pop' },\n              { include: '#internal-record-body' },\n              { defaultToken: 'meta.record-usage.erlang' } ] } ],\n      '#string': \n       [ { token: 'punctuation.definition.string.begin.erlang',\n           regex: '\"',\n           push: \n            [ { token: 'punctuation.definition.string.end.erlang',\n                regex: '\"',\n                next: 'pop' },\n              { token: \n                 [ 'punctuation.definition.escape.erlang',\n                   'constant.character.escape.erlang',\n                   'punctuation.definition.escape.erlang',\n                   'constant.character.escape.erlang',\n                   'constant.character.escape.erlang' ],\n                regex: '(\\\\\\\\)(?:([bdefnrstv\\\\\\\\\\'\"])|(\\\\^)([@-_])|([0-7]{1,3}))' },\n              { token: 'invalid.illegal.string.erlang', regex: '\\\\\\\\\\\\^?.?' },\n              { token: \n                 [ 'punctuation.definition.placeholder.erlang',\n                   'punctuation.separator.placeholder-parts.erlang',\n                   'constant.other.placeholder.erlang',\n                   'punctuation.separator.placeholder-parts.erlang',\n                   'punctuation.separator.placeholder-parts.erlang',\n                   'constant.other.placeholder.erlang',\n                   'punctuation.separator.placeholder-parts.erlang',\n                   'punctuation.separator.placeholder-parts.erlang',\n                   'punctuation.separator.placeholder-parts.erlang',\n                   'constant.other.placeholder.erlang',\n                   'constant.other.placeholder.erlang' ],\n                regex: '(~)(?:((?:\\\\-)?)(\\\\d+)|(\\\\*))?(?:(\\\\.)(?:(\\\\d+)|(\\\\*)))?(?:(\\\\.)(?:(\\\\*)|(.)))?([~cfegswpWPBX#bx\\\\+ni])' },\n              { token: \n                 [ 'punctuation.definition.placeholder.erlang',\n                   'punctuation.separator.placeholder-parts.erlang',\n                   'constant.other.placeholder.erlang',\n                   'constant.other.placeholder.erlang' ],\n                regex: '(~)((?:\\\\*)?)((?:\\\\d+)?)([~du\\\\-#fsacl])' },\n              { token: 'invalid.illegal.string.erlang', regex: '~.?' },\n              { defaultToken: 'string.quoted.double.erlang' } ] } ],\n      '#symbolic-operator': \n       [ { token: 'keyword.operator.symbolic.erlang',\n           regex: '\\\\+\\\\+|\\\\+|--|-|\\\\*|/=|/|=/=|=:=|==|=<|=|<-|<|>=|>|!|::' } ],\n      '#textual-operator': \n       [ { token: 'keyword.operator.textual.erlang',\n           regex: '\\\\b(?:andalso|band|and|bxor|xor|bor|orelse|or|bnot|not|bsl|bsr|div|rem)\\\\b' } ],\n      '#tuple': \n       [ { token: 'punctuation.definition.tuple.begin.erlang',\n           regex: '\\\\{',\n           push: \n            [ { token: 'punctuation.definition.tuple.end.erlang',\n                regex: '\\\\}',\n                next: 'pop' },\n              { token: 'punctuation.separator.tuple.erlang', regex: ',' },\n              { include: '#everything-else' },\n              { defaultToken: 'meta.structure.tuple.erlang' } ] } ],\n      '#variable': \n       [ { token: [ 'variable.other.erlang', 'variable.language.omitted.erlang' ],\n           regex: '(_[a-zA-Z\\\\d@_]+|[A-Z][a-zA-Z\\\\d@_]*)|(_)' } ] };\n    \n    this.normalizeRules();\n};\n\nErlangHighlightRules.metaData = { comment: 'The recognition of function definitions and compiler directives (such as module, record and macro definitions) requires that each of the aforementioned constructs must be the first string inside a line (except for whitespace).  Also, the function/module/record/macro names must be given unquoted.  -- desp',\n      fileTypes: [ 'erl', 'hrl' ],\n      keyEquivalent: '^~E',\n      name: 'Erlang',\n      scopeName: 'source.erlang' };\n\n\noop.inherits(ErlangHighlightRules, TextHighlightRules);\n\nexports.ErlangHighlightRules = ErlangHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/folding/asciidoc.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    this.foldingStartMarker = /^(?:\\|={10,}|[\\.\\/=\\-~^+]{4,}\\s*$|={1,5} )/;\n    this.singleLineHeadingRe = /^={1,5}(?=\\s+\\S)/;\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (!this.foldingStartMarker.test(line))\n            return \"\";\n\n        if (line[0] == \"=\") {\n            if (this.singleLineHeadingRe.test(line))\n                return \"start\";\n            if (session.getLine(row - 1).length != session.getLine(row).length)\n                return \"\";\n            return \"start\";\n        }\n        if (session.bgTokenizer.getState(row) == \"dissallowDelimitedBlock\")\n            return \"end\";\n        return \"start\";\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n        if (!line.match(this.foldingStartMarker))\n            return;\n\n        var token;\n        function getTokenType(row) {\n            token = session.getTokens(row)[0];\n            return token && token.type;\n        }\n\n        var levels = [\"=\",\"-\",\"~\",\"^\",\"+\"];\n        var heading = \"markup.heading\";\n        var singleLineHeadingRe = this.singleLineHeadingRe;\n        function getLevel() {\n            var match = token.value.match(singleLineHeadingRe);\n            if (match)\n                return match[0].length;\n            var level = levels.indexOf(token.value[0]) + 1;\n            if (level == 1) {\n                if (session.getLine(row - 1).length != session.getLine(row).length)\n                    return Infinity;\n            }\n            return level;\n        }\n\n        if (getTokenType(row) == heading) {\n            var startHeadingLevel = getLevel();\n            while (++row < maxRow) {\n                if (getTokenType(row) != heading)\n                    continue;\n                var level = getLevel();\n                if (level <= startHeadingLevel)\n                    break;\n            }\n\n            var isSingleLineHeading = token && token.value.match(this.singleLineHeadingRe);\n            endRow = isSingleLineHeading ? row - 1 : row - 2;\n\n            if (endRow > startRow) {\n                while (endRow > startRow && (!getTokenType(endRow) || token.value[0] == \"[\"))\n                    endRow--;\n            }\n\n            if (endRow > startRow) {\n                var endColumn = session.getLine(endRow).length;\n                return new Range(startRow, startColumn, endRow, endColumn);\n            }\n        } else {\n            var state = session.bgTokenizer.getState(row);\n            if (state == \"dissallowDelimitedBlock\") {\n                while (row -- > 0) {\n                    if (session.bgTokenizer.getState(row).lastIndexOf(\"Block\") == -1)\n                        break;\n                }\n                endRow = row + 1;\n                if (endRow < startRow) {\n                    var endColumn = session.getLine(row).length;\n                    return new Range(endRow, 5, startRow, startColumn - 5);\n                }\n            } else {\n                while (++row < maxRow) {\n                    if (session.bgTokenizer.getState(row) == \"dissallowDelimitedBlock\")\n                        break;\n                }\n                endRow = row;\n                if (endRow > startRow) {\n                    var endColumn = session.getLine(row).length;\n                    return new Range(startRow, 5, endRow, endColumn - 5);\n                }\n            }\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n"
  },
  {
    "path": "lib/ace/mode/folding/c9search.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.foldingStartMarker = /^(\\S.*:|Searching for.*)$/;\n    this.foldingStopMarker = /^(\\s+|Found.*)$/;\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var lines = session.doc.getAllLines(row);\n        var line = lines[row];\n        var level1 = /^(Found.*|Searching for.*)$/;\n        var level2 = /^(\\S.*:|\\s*)$/;\n        var re = level1.test(line) ? level1 : level2;\n        \n        var startRow = row;\n        var endRow = row;\n\n        if (this.foldingStartMarker.test(line)) {\n            for (var i = row + 1, l = session.getLength(); i < l; i++) {\n                if (re.test(lines[i]))\n                    break;\n            }\n            endRow = i;\n        }\n        else if (this.foldingStopMarker.test(line)) {\n            for (var i = row - 1; i >= 0; i--) {\n                line = lines[i];\n                if (re.test(line))\n                    break;\n            }\n            startRow = i;\n        }\n        if (startRow != endRow) {\n            var col = line.length;\n            if (re === level1)\n                col = line.search(/\\(Found[^)]+\\)$|$/);\n            return new Range(startRow, col, endRow, 0);\n        }\n    };\n    \n}).call(FoldMode.prototype);\n\n});\n\n"
  },
  {
    "path": "lib/ace/mode/folding/coffee.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n\n            if (level == -1)\n                continue;\n\n            if (line[level] != \"#\")\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n\n    // must return \"\" if there's no fold, to enable caching\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n\n        // documentation comments\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        } else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n\n        if (prevIndent!= -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n\n}).call(FoldMode.prototype);\n\n});\n"
  },
  {
    "path": "lib/ace/mode/folding/coffee_test.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\nif (typeof process !== \"undefined\")\n    require(\"amd-loader\");\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar CoffeeMode = require(\"../coffee\").Mode;\nvar EditSession = require(\"../../edit_session\").EditSession;\nvar assert = require(\"../../test/assertions\");\nfunction testFoldWidgets(array) {\n    var session = array.filter(function(_, i){return i % 2 == 1;});\n    session = new EditSession(session);\n    var mode = new CoffeeMode();\n    session.setFoldStyle(\"markbeginend\");\n    session.setMode(mode);\n\n    var widgets = array.filter(function(_, i){return i % 2 == 0;});\n    widgets.forEach(function(w, i){\n        session.foldWidgets[i] = session.getFoldWidget(i);\n    });\n    widgets.forEach(function(w, i){\n        w = w.split(\",\");\n        var type = w[0] == \">\" ? \"start\" : w[0] == \"<\" ? \"end\" : \"\";\n        assert.equal(session.foldWidgets[i], type);\n        if (!type)\n            return;\n        var range = session.getFoldWidgetRange(i);\n        if (!w[1]) {\n            assert.equal(range, null);\n            return;\n        }\n        assert.equal(range.start.row, i);\n        assert.equal(range.end.row - range.start.row, parseInt(w[1]));\n        testColumn(w[2], range.start);\n        testColumn(w[3], range.end);\n    });\n\n    function testColumn(w, pos) {\n        if (!w)\n            return;\n        if (w == \"l\")\n            w = session.getLine(pos.row).length;\n        else\n            w = parseInt(w);\n        assert.equal(pos.column, w);\n    }\n}\nmodule.exports = {\n    \"test: coffee script indentation based folding\": function() {\n       testFoldWidgets([\n            '>,1,l,l',         ' ## indented comment',\n            '',                '  # ',\n            '',                '',\n            '>,1,l,l',         ' # plain comment',\n            '',                ' # ',\n            '>,2',             ' function (x)=>',\n            '',                '  ',\n            '',                '  x++',\n            '',                '  ',\n            '',                '  ',\n            '>,2',             ' bar = ',\n            '',                '   foo: 1',\n            '',                '   baz: lighter'\n        ]);\n    }\n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main)\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n"
  },
  {
    "path": "lib/ace/mode/folding/csharp.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar CFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, CFoldMode);\n\n(function() {\n    this.usingRe = /^\\s*using \\S/;\n\n    this.getFoldWidgetRangeBase = this.getFoldWidgetRange;\n    this.getFoldWidgetBase = this.getFoldWidget;\n    \n    this.getFoldWidget = function(session, foldStyle, row) {\n        var fw = this.getFoldWidgetBase(session, foldStyle, row);\n        if (!fw) {\n            var line = session.getLine(row);\n            if (/^\\s*#region\\b/.test(line)) \n                return \"start\";\n            var usingRe = this.usingRe;\n            if (usingRe.test(line)) {\n                var prev = session.getLine(row - 1);\n                var next = session.getLine(row + 1);\n                if (!usingRe.test(prev) && usingRe.test(next))\n                    return \"start\";\n            }\n        }\n        return fw;\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var range = this.getFoldWidgetRangeBase(session, foldStyle, row);\n        if (range)\n            return range;\n\n        var line = session.getLine(row);\n        if (this.usingRe.test(line))\n            return this.getUsingStatementBlock(session, line, row);\n            \n        if (/^\\s*#region\\b/.test(line))\n            return this.getRegionBlock(session, line, row);\n    };\n    \n    this.getUsingStatementBlock = function(session, line, row) {\n        var startColumn = line.match(this.usingRe)[0].length - 1;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            if (/^\\s*$/.test(line))\n                continue;\n            if (!this.usingRe.test(line))\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    \n    this.getRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*#(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n\n            if (!depth)\n                break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n"
  },
  {
    "path": "lib/ace/mode/folding/cstyle.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    \n    //prevent naming conflict with any modes that inherit from cstyle and override this (like csharp)\n    this._getFoldWidgetBase = this.getFoldWidget;\n    \n    /**\n     * Gets fold widget with some non-standard extras:\n     *\n     * @example lineCommentRegionStart\n     *      //#region [optional description]\n     *\n     * @example blockCommentRegionStart\n     *      /*#region [optional description] *[/]\n     *\n     * @example tripleStarFoldingSection\n     *      /*** this folds even though 1 line because it has 3 stars ***[/]\n     * \n     * @note the pound symbol for region tags is optional\n     */\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            // No widget for single line block comment unless region or triple star\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    \n    /**\n     * gets comment region block with end region assumed to be start of comment in any cstyle mode or SQL mode (--) which inherits from this.\n     * There may optionally be a pound symbol before the region/endregion statement\n     */\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n"
  },
  {
    "path": "lib/ace/mode/folding/cstyle_test.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\nif (typeof process !== \"undefined\")\n    require(\"amd-loader\");\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar JavaScriptMode = require(\"../javascript\").Mode;\nvar EditSession = require(\"../../edit_session\").EditSession;\nvar assert = require(\"../../test/assertions\");\n\nmodule.exports = {\n\n    \"test: fold comments\": function() {\n        var session = new EditSession([\n            '/*',\n            'stuff',\n            '*/'\n        ]);\n        \n        var mode = new JavaScriptMode();\n        session.setFoldStyle(\"markbeginend\");\n        session.setMode(mode);\n        \n        assert.equal(session.getFoldWidget(0), \"start\");\n        assert.equal(session.getFoldWidget(1), \"\");\n        assert.equal(session.getFoldWidget(2), \"end\");\n        \n        assert.range(session.getFoldWidgetRange(0), 0, 2, 2, 0);\n        assert.range(session.getFoldWidgetRange(2), 0, 2, 2, 0);\n    },\n    \n    \"test: fold doc style comments\": function() {\n        var session = new EditSession([\n            '/**',\n            ' * stuff',\n            ' * *** */'\n        ]);\n        \n        var mode = new JavaScriptMode();\n        session.setFoldStyle(\"markbeginend\");\n        session.setMode(mode);\n        \n        assert.equal(session.getFoldWidget(0), \"start\");\n        assert.equal(session.getFoldWidget(1), \"\");\n        assert.equal(session.getFoldWidget(2), \"end\");\n        \n        assert.range(session.getFoldWidgetRange(0), 0, 2, 2, 7);\n        assert.range(session.getFoldWidgetRange(2), 0, 2, 2, 7);\n    },\n    \n    \"test: fold sections\": function() {\n        var session = new EditSession([\n            '/* section0 */',\n            '{',\n            '    /* section1 */',\n            '    stuff',\n            '       ',\n            '    /* section2 */',\n            '       ',\n            '    stuff',\n            '       ',\n            '     }',\n            'foo'\n        ]);\n        \n        var mode = new JavaScriptMode();\n        session.setFoldStyle(\"markbegin\");\n        session.setMode(mode);\n        \n        assert.range(session.getFoldWidgetRange(0, true), 0, 14, 10, 3);\n        assert.range(session.getFoldWidgetRange(2, true), 2, 18, 3, 9);\n        assert.range(session.getFoldWidgetRange(5, true), 5, 18, 7, 9);\n    }\n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main)\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n"
  },
  {
    "path": "lib/ace/mode/folding/diff.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function(levels, flag) {\n\tthis.regExpList = levels;\n\tthis.flag = flag;\n\tthis.foldingStartMarker = RegExp(\"^(\" + levels.join(\"|\") + \")\", this.flag);\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var start = {row: row, column: line.length};\n\n        var regList = this.regExpList;\n        for (var i = 1; i <= regList.length; i++) {\n            var re = RegExp(\"^(\" + regList.slice(0, i).join(\"|\") + \")\", this.flag);\n            if (re.test(line))\n                break;\n        }\n\n        for (var l = session.getLength(); ++row < l; ) {\n            line = session.getLine(row);\n            if (re.test(line))\n                break;\n        }\n        if (row == start.row + 1)\n            return;\n        return  Range.fromPoints(start, {row: row - 1, column: line.length});\n    };\n\n}).call(FoldMode.prototype);\n\n});\n"
  },
  {
    "path": "lib/ace/mode/folding/drools.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    // regular expressions that identify starting and stopping points\n    this.foldingStartMarker = /\\b(rule|declare|query|when|then)\\b/; \n    this.foldingStopMarker = /\\bend\\b/;\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1]) {\n                var position = {row: row, column: line.length};\n                var iterator = new TokenIterator(session, position.row, position.column);\n                var seek = \"end\";\n                var token = iterator.getCurrentToken();\n                if (token.value == \"when\") {\n                    seek = \"then\";\n                }\n                while (token) {\n                    if (token.value == seek) { \n                        return Range.fromPoints(position ,{\n                            row: iterator.getCurrentTokenRow(),\n                            column: iterator.getCurrentTokenColumn()\n                        });\n                    }\n                    token = iterator.stepForward();\n                }\n            }\n\n        }\n        // test each line, and return a range of segments to collapse\n    };\n\n}).call(FoldMode.prototype);\n\n});"
  },
  {
    "path": "lib/ace/mode/folding/fold_mode.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\n\n(function() {\n\n    this.foldingStartMarker = null;\n    this.foldingStopMarker = null;\n\n    // must return \"\" if there's no fold, to enable caching\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.foldingStartMarker.test(line))\n            return \"start\";\n        if (foldStyle == \"markbeginend\"\n                && this.foldingStopMarker\n                && this.foldingStopMarker.test(line))\n            return \"end\";\n        return \"\";\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        return null;\n    };\n\n    this.indentationBlock = function(session, row, column) {\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1)\n            return;\n\n        var startColumn = column || line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            var level = session.getLine(row).search(re);\n\n            if (level == -1)\n                continue;\n\n            if (level <= startLevel)\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n\n    this.openingBracketBlock = function(session, bracket, row, column, typeRe) {\n        var start = {row: row, column: column + 1};\n        var end = session.$findClosingBracket(bracket, start, typeRe);\n        if (!end)\n            return;\n\n        var fw = session.foldWidgets[end.row];\n        if (fw == null)\n            fw = session.getFoldWidget(end.row);\n\n        if (fw == \"start\" && end.row > start.row) {\n            end.row --;\n            end.column = session.getLine(end.row).length;\n        }\n        return Range.fromPoints(start, end);\n    };\n\n    this.closingBracketBlock = function(session, bracket, row, column, typeRe) {\n        var end = {row: row, column: column};\n        var start = session.$findOpeningBracket(bracket, end);\n\n        if (!start)\n            return;\n\n        start.column++;\n        end.column--;\n\n        return  Range.fromPoints(start, end);\n    };\n}).call(FoldMode.prototype);\n\n});\n"
  },
  {
    "path": "lib/ace/mode/folding/haskell_cabal.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n/*\n* Folding mode for Cabal files (Haskell): allow folding each seaction, including\n* the initial general section.\n*/\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n  /**\n  is the row a heading?\n  */\n  this.isHeading = function (session,row) {\n      var heading = \"markup.heading\";\n      var token = session.getTokens(row)[0];\n      return row==0 || (token && token.type.lastIndexOf(heading, 0) === 0);\n  };\n\n  this.getFoldWidget = function(session, foldStyle, row) {\n      if (this.isHeading(session,row)){\n        return \"start\";\n      } else if (foldStyle === \"markbeginend\" && !(/^\\s*$/.test(session.getLine(row)))){\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n          if (!(/^\\s*$/.test(session.getLine(row)))){\n              break;\n          }\n        }\n        if (row==maxRow || this.isHeading(session,row)){\n          return \"end\";\n        }\n      }\n      return \"\";\n  };\n\n\n  this.getFoldWidgetRange = function(session, foldStyle, row) {\n      var line = session.getLine(row);\n      var startColumn = line.length;\n      var maxRow = session.getLength();\n      var startRow = row;\n      var endRow = row;\n      // go until next heading\n      if (this.isHeading(session,row)) {\n          while (++row < maxRow) {\n              if (this.isHeading(session,row)){\n                row--;\n                break;\n              }\n          }\n\n          endRow = row;\n          // remove empty lines at end\n          if (endRow > startRow) {\n              while (endRow > startRow && /^\\s*$/.test(session.getLine(endRow)))\n                  endRow--;\n          }\n\n          if (endRow > startRow) {\n              var endColumn = session.getLine(endRow).length;\n              return new Range(startRow, startColumn, endRow, endColumn);\n          }\n      // go back to heading\n      } else if (this.getFoldWidget(session, foldStyle, row)===\"end\"){\n        var endRow = row;\n        var endColumn = session.getLine(endRow).length;\n        while (--row>=0){\n          if (this.isHeading(session,row)){\n            break;\n          }\n        }\n        var line = session.getLine(row);\n        var startColumn = line.length;\n        return new Range(row, startColumn, endRow, endColumn);\n      }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n"
  },
  {
    "path": "lib/ace/mode/folding/html.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\n\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n"
  },
  {
    "path": "lib/ace/mode/folding/html_test.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\nif (typeof process !== \"undefined\")\n    require(\"amd-loader\");\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar HtmlMode = require(\"../html\").Mode;\nvar EditSession = require(\"../../edit_session\").EditSession;\nvar assert = require(\"../../test/assertions\");\n\nmodule.exports = {\n\n    \"test: fold mixed html and javascript\": function() {\n        var session = new EditSession([\n            '<script type=\"text/javascript\"> ',\n            'function() foo {',\n            '    var bar = 1;',\n            '}',\n            '</script>'\n        ]);\n        \n        var mode = new HtmlMode();\n        session.setMode(mode);\n        session.setFoldStyle(\"markbeginend\");\n        \n        assert.equal(session.getFoldWidget(0), \"start\");\n        assert.equal(session.getFoldWidget(1), \"start\");\n        assert.equal(session.getFoldWidget(2), \"\");\n        assert.equal(session.getFoldWidget(3), \"end\");\n        assert.equal(session.getFoldWidget(4), \"end\");\n        \n        assert.range(session.getFoldWidgetRange(0), 0, 31, 4, 0);\n        assert.range(session.getFoldWidgetRange(4), 0, 31, 4, 0);\n        \n        assert.range(session.getFoldWidgetRange(1), 1, 16, 3, 0);\n        assert.range(session.getFoldWidgetRange(3), 1, 16, 3, 0);\n    },\n    \n    \"test: fold mixed html and css\": function() {\n        var session = new EditSession([\n            '<style type=\"text/css\">',\n            '    .text-layer {',\n            '        font-family: Monaco, \"Courier New\", monospace;',\n            '    }',\n            '</style>'\n        ]);\n        \n        var mode = new HtmlMode();\n        session.setMode(mode);\n        session.setFoldStyle(\"markbeginend\");\n        \n        assert.equal(session.getFoldWidget(0), \"start\");\n        assert.equal(session.getFoldWidget(1), \"start\");\n        assert.equal(session.getFoldWidget(2), \"\");\n        assert.equal(session.getFoldWidget(3), \"end\");\n        assert.equal(session.getFoldWidget(4), \"end\");\n        \n        assert.range(session.getFoldWidgetRange(0), 0, 23, 4, 0);\n        assert.range(session.getFoldWidgetRange(4), 0, 23, 4, 0);\n        \n        assert.range(session.getFoldWidgetRange(1), 1, 17, 3, 4);\n        assert.range(session.getFoldWidgetRange(3), 1, 17, 3, 4);\n    },\n    \n    \"test: fold should skip self closing elements\": function() {\n        var session = new EditSession([\n            '<body>',\n            '<br />',\n            '</body>'\n        ]);\n        \n        var mode = new HtmlMode();\n        session.setMode(mode);\n        session.setFoldStyle(\"markbeginend\");\n        \n        assert.equal(session.getFoldWidget(0), \"start\");\n        assert.equal(session.getFoldWidget(1), \"\");\n        assert.equal(session.getFoldWidget(2), \"end\");\n        \n        assert.range(session.getFoldWidgetRange(0), 0, 6, 2, 0);\n        assert.range(session.getFoldWidgetRange(2), 0, 6, 2, 0);\n    },\n    \n    \"test: fold should skip void elements\": function() {\n        var session = new EditSession([\n            '<body>',\n            '<br>',\n            '</body>'\n        ]);\n        \n        var mode = new HtmlMode();\n        session.setMode(mode);\n        session.setFoldStyle(\"markbeginend\");\n        \n        assert.equal(session.getFoldWidget(0), \"start\");\n        assert.equal(session.getFoldWidget(1), \"\");\n        assert.equal(session.getFoldWidget(2), \"end\");\n        \n        assert.range(session.getFoldWidgetRange(0), 0, 6, 2, 0);\n        assert.range(session.getFoldWidgetRange(2), 0, 6, 2, 0);\n    },\n    \n    \"test: fold multiple unclosed elements\": function() {\n        var session = new EditSession([\n            '<div>',\n            '<p>',\n            'juhu',\n            '<p>',\n            'kinners',\n            '</div>'\n        ]);\n        \n        var mode = new HtmlMode();\n        session.setMode(mode);\n        session.setFoldStyle(\"markbeginend\");\n        \n        assert.equal(session.getFoldWidget(0), \"start\");\n        assert.equal(session.getFoldWidget(1), \"start\");\n        assert.equal(session.getFoldWidget(2), \"\");\n        assert.equal(session.getFoldWidget(3), \"start\");\n        assert.equal(session.getFoldWidget(4), \"\");\n        assert.equal(session.getFoldWidget(5), \"end\");\n        \n        assert.range(session.getFoldWidgetRange(0), 0, 5, 5, 0);\n        assert.range(session.getFoldWidgetRange(5), 0, 5, 5, 0);\n    },\n    \n    \"test: fold multiple nested optional elements\": function() {\n        var session = new EditSession([\n            '<p>',\n            '<li>',\n            '<p>juhu',\n            '<p>',\n            'kinners',\n            '</li>'\n        ]);\n        \n        var mode = new HtmlMode();\n        session.setMode(mode);\n        session.setFoldStyle(\"markbeginend\");\n        \n        assert.equal(session.getFoldWidget(0), \"start\");\n        assert.equal(session.getFoldWidget(1), \"start\");\n        assert.equal(session.getFoldWidget(2), \"start\");\n        assert.equal(session.getFoldWidget(3), \"start\");\n        assert.equal(session.getFoldWidget(4), \"\");\n        assert.equal(session.getFoldWidget(5), \"end\");\n        \n        assert.range(session.getFoldWidgetRange(1), 1, 4, 5, 0);\n    }\n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main)\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n"
  },
  {
    "path": "lib/ace/mode/folding/ini.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function() {\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.foldingStartMarker = /^\\s*\\[([^\\])]*)]\\s*(?:$|[;#])/;\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var re = this.foldingStartMarker;\n        var line = session.getLine(row);\n        \n        var m = line.match(re);\n        \n        if (!m) return;\n        \n        var startName = m[1] + \".\";\n        \n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            if (/^\\s*$/.test(line))\n                continue;\n            m = line.match(re);\n            if (m && m[1].lastIndexOf(startName, 0) !== 0)\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n"
  },
  {
    "path": "lib/ace/mode/folding/latex.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar keywordLevels = {\n    \"\\\\subparagraph\": 1,\n    \"\\\\paragraph\": 2,\n    \"\\\\subsubsubsection\": 3,\n    \"\\\\subsubsection\": 4,\n    \"\\\\subsection\": 5,\n    \"\\\\section\": 6,\n    \"\\\\chapter\": 7,\n    \"\\\\part\": 8,\n    \"\\\\begin\": 9,\n    \"\\\\end\": 10\n};\n\nvar FoldMode = exports.FoldMode = function() {};\n\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.foldingStartMarker = /^\\s*\\\\(begin)|\\s*\\\\(part|chapter|(?:sub)*(?:section|paragraph))\\b|{\\s*$/;\n    this.foldingStopMarker = /^\\s*\\\\(end)\\b|^\\s*}/;\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var line = session.doc.getLine(row);\n        var match = this.foldingStartMarker.exec(line);\n        if (match) {\n            if (match[1])\n                return this.latexBlock(session, row, match[0].length - 1);\n            if (match[2])\n                return this.latexSection(session, row, match[0].length - 1);\n\n            return this.openingBracketBlock(session, \"{\", row, match.index);\n        }\n\n        var match = this.foldingStopMarker.exec(line);\n        if (match) {\n            if (match[1])\n                return this.latexBlock(session, row, match[0].length - 1);\n\n            return this.closingBracketBlock(session, \"}\", row, match.index + match[0].length);\n        }\n    };\n\n    this.latexBlock = function(session, row, column, returnRange) {\n        var keywords = {\n            \"\\\\begin\": 1,\n            \"\\\\end\": -1\n        };\n\n        var stream = new TokenIterator(session, row, column);\n        var token = stream.getCurrentToken();\n        if (!token || !(token.type == \"storage.type\" || token.type == \"constant.character.escape\"))\n            return;\n\n        var val = token.value;\n        var dir = keywords[val];\n\n        var getType = function() {\n            var token = stream.stepForward();\n            var type = token.type == \"lparen\" ?stream.stepForward().value : \"\";\n            if (dir === -1) {\n                stream.stepBackward();\n                if (type)\n                    stream.stepBackward();\n            }\n            return type;\n        };\n        var stack = [getType()];\n        var startColumn = dir === -1 ? stream.getCurrentTokenColumn() : session.getLine(row).length;\n        var startRow = row;\n\n        stream.step = dir === -1 ? stream.stepBackward : stream.stepForward;\n        while(token = stream.step()) {\n            if (!token || !(token.type == \"storage.type\" || token.type == \"constant.character.escape\"))\n                continue;\n            var level = keywords[token.value];\n            if (!level)\n                continue;\n            var type = getType();\n            if (level === dir)\n                stack.unshift(type);\n            else if (stack.shift() !== type || !stack.length)\n                break;\n        }\n\n        if (stack.length)\n            return;\n        \n        if (dir == 1) {\n            stream.stepBackward();\n            stream.stepBackward();\n        }\n        \n        if (returnRange)\n            return stream.getCurrentTokenRange();\n\n        var row = stream.getCurrentTokenRow();\n        if (dir === -1)\n            return new Range(row, session.getLine(row).length, startRow, startColumn);\n        else\n            return new Range(startRow, startColumn, row, stream.getCurrentTokenColumn());\n    };\n\n    this.latexSection = function(session, row, column) {\n        var stream = new TokenIterator(session, row, column);\n        var token = stream.getCurrentToken();\n        if (!token || token.type != \"storage.type\")\n            return;\n\n        var startLevel = keywordLevels[token.value] || 0;\n        var stackDepth = 0;\n        var endRow = row;\n\n        while(token = stream.stepForward()) {\n            if (token.type !== \"storage.type\")\n                continue;\n            var level = keywordLevels[token.value] || 0;\n\n            if (level >= 9) {\n                if (!stackDepth)\n                    endRow = stream.getCurrentTokenRow() - 1;\n                stackDepth += level == 9 ? 1 : - 1;\n                if (stackDepth < 0)\n                    break;\n            } else if (level >= startLevel)\n                break;\n        }\n\n        if (!stackDepth)\n            endRow = stream.getCurrentTokenRow() - 1;\n\n        while (endRow > row && !/\\S/.test(session.getLine(endRow)))\n            endRow--;\n\n        return new Range(\n            row, session.getLine(row).length,\n            endRow, session.getLine(endRow).length\n        );\n    };\n\n}).call(FoldMode.prototype);\n\n});\n"
  },
  {
    "path": "lib/ace/mode/folding/lua.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\n\nvar FoldMode = exports.FoldMode = function() {};\n\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.foldingStartMarker = /\\b(function|then|do|repeat)\\b|{\\s*$|(\\[=*\\[)/;\n    this.foldingStopMarker = /\\bend\\b|^\\s*}|\\]=*\\]/;\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var isStart = this.foldingStartMarker.test(line);\n        var isEnd = this.foldingStopMarker.test(line);\n\n        if (isStart && !isEnd) {\n            var match = line.match(this.foldingStartMarker);\n            if (match[1] == \"then\" && /\\belseif\\b/.test(line))\n                return;\n            if (match[1]) {\n                if (session.getTokenAt(row, match.index + 1).type === \"keyword\")\n                    return \"start\";\n            } else if (match[2]) {\n                var type = session.bgTokenizer.getState(row) || \"\";\n                if (type[0] == \"bracketedComment\" || type[0] == \"bracketedString\")\n                    return \"start\";\n            } else {\n                return \"start\";\n            }\n        }\n        if (foldStyle != \"markbeginend\" || !isEnd || isStart && isEnd)\n            return \"\";\n\n        var match = line.match(this.foldingStopMarker);\n        if (match[0] === \"end\") {\n            if (session.getTokenAt(row, match.index + 1).type === \"keyword\")\n                return \"end\";\n        } else if (match[0][0] === \"]\") {\n            var type = session.bgTokenizer.getState(row - 1) || \"\";\n            if (type[0] == \"bracketedComment\" || type[0] == \"bracketedString\")\n                return \"end\";\n        } else\n            return \"end\";\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var line = session.doc.getLine(row);\n        var match = this.foldingStartMarker.exec(line);\n        if (match) {\n            if (match[1])\n                return this.luaBlock(session, row, match.index + 1);\n\n            if (match[2])\n                return session.getCommentFoldRange(row, match.index + 1);\n\n            return this.openingBracketBlock(session, \"{\", row, match.index);\n        }\n\n        var match = this.foldingStopMarker.exec(line);\n        if (match) {\n            if (match[0] === \"end\") {\n                if (session.getTokenAt(row, match.index + 1).type === \"keyword\")\n                    return this.luaBlock(session, row, match.index + 1);\n            }\n\n            if (match[0][0] === \"]\")\n                return session.getCommentFoldRange(row, match.index + 1);\n\n            return this.closingBracketBlock(session, \"}\", row, match.index + match[0].length);\n        }\n    };\n\n    this.luaBlock = function(session, row, column) {\n        var stream = new TokenIterator(session, row, column);\n        var indentKeywords = {\n            \"function\": 1,\n            \"do\": 1,\n            \"then\": 1,\n            \"elseif\": -1,\n            \"end\": -1,\n            \"repeat\": 1,\n            \"until\": -1\n        };\n\n        var token = stream.getCurrentToken();\n        if (!token || token.type != \"keyword\")\n            return;\n\n        var val = token.value;\n        var stack = [val];\n        var dir = indentKeywords[val];\n\n        if (!dir)\n            return;\n\n        var startColumn = dir === -1 ? stream.getCurrentTokenColumn() : session.getLine(row).length;\n        var startRow = row;\n\n        stream.step = dir === -1 ? stream.stepBackward : stream.stepForward;\n        while(token = stream.step()) {\n            if (token.type !== \"keyword\")\n                continue;\n            var level = dir * indentKeywords[token.value];\n\n            if (level > 0) {\n                stack.unshift(token.value);\n            } else if (level <= 0) {\n                stack.shift();\n                if (!stack.length && token.value != \"elseif\")\n                    break;\n                if (level === 0)\n                    stack.unshift(token.value);\n            }\n        }\n\n        var row = stream.getCurrentTokenRow();\n        if (dir === -1)\n            return new Range(row, session.getLine(row).length, startRow, startColumn);\n        else\n            return new Range(startRow, startColumn, row, stream.getCurrentTokenColumn());\n    };\n\n}).call(FoldMode.prototype);\n\n});\n"
  },
  {
    "path": "lib/ace/mode/folding/markdown.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    this.foldingStartMarker = /^(?:[=-]+\\s*$|#{1,6} |`{3})/;\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (!this.foldingStartMarker.test(line))\n            return \"\";\n\n        if (line[0] == \"`\") {\n            if (session.bgTokenizer.getState(row) == \"start\")\n                return \"end\";\n            return \"start\";\n        }\n\n        return \"start\";\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n        if (!line.match(this.foldingStartMarker))\n            return;\n\n        if (line[0] == \"`\") {\n            if (session.bgTokenizer.getState(row) !== \"start\") {\n                while (++row < maxRow) {\n                    line = session.getLine(row);\n                    if (line[0] == \"`\" & line.substring(0, 3) == \"```\")\n                        break;\n                }\n                return new Range(startRow, startColumn, row, 0);\n            } else {\n                while (row -- > 0) {\n                    line = session.getLine(row);\n                    if (line[0] == \"`\" & line.substring(0, 3) == \"```\")\n                        break;\n                }\n                return new Range(row, line.length, startRow, 0);\n            }\n        }\n\n        var token;\n        function isHeading(row) {\n            token = session.getTokens(row)[0];\n            return token && token.type.lastIndexOf(heading, 0) === 0;\n        }\n\n        var heading = \"markup.heading\";\n        function getLevel() {\n            var ch = token.value[0];\n            if (ch == \"=\") return 6;\n            if (ch == \"-\") return 5;\n            return 7 - token.value.search(/[^#]/);\n        }\n\n        if (isHeading(row)) {\n            var startHeadingLevel = getLevel();\n            while (++row < maxRow) {\n                if (!isHeading(row))\n                    continue;\n                var level = getLevel();\n                if (level >= startHeadingLevel)\n                    break;\n            }\n\n            endRow = row - (!token || [\"=\", \"-\"].indexOf(token.value[0]) == -1 ? 1 : 2);\n\n            if (endRow > startRow) {\n                while (endRow > startRow && /^\\s*$/.test(session.getLine(endRow)))\n                    endRow--;\n            }\n\n            if (endRow > startRow) {\n                var endColumn = session.getLine(endRow).length;\n                return new Range(startRow, startColumn, endRow, endColumn);\n            }\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n"
  },
  {
    "path": "lib/ace/mode/folding/mixed.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n\n    this.$getMode = function(state) {\n        if (typeof state != \"string\") \n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    \n    this.$tryMode = function(state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        return (\n            this.$tryMode(session.getState(row-1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row)\n        );\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row-1));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        \n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n\n}).call(FoldMode.prototype);\n\n});\n"
  },
  {
    "path": "lib/ace/mode/folding/pythonic.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(markers) {\n    this.foldingStartMarker = new RegExp(\"([\\\\[{])(?:\\\\s*)$|(\" + markers + \")(?:\\\\s*)(?:#.*)?$\");\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, match.index);\n            if (match[2])\n                return this.indentationBlock(session, row, match.index + match[2].length);\n            return this.indentationBlock(session, row);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n"
  },
  {
    "path": "lib/ace/mode/folding/pythonic_test.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\nif (typeof process !== \"undefined\")\n    require(\"amd-loader\");\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar PythonMode = require(\"../python\").Mode;\nvar EditSession = require(\"../../edit_session\").EditSession;\nvar assert = require(\"../../test/assertions\");\n\nmodule.exports = {\n\n    \"test: bracket folding\": function() {\n        var session = new EditSession([\n            '[ ',\n            'stuff',\n            ']',\n            '[ ',\n            '{ ',\n            '[  #-'\n        ]);\n\n        var mode = new PythonMode();\n        session.setFoldStyle(\"markbeginend\");\n        session.setMode(mode);\n\n        assert.equal(session.getFoldWidget(0), \"start\");\n        assert.equal(session.getFoldWidget(1), \"\");\n        assert.equal(session.getFoldWidget(2), \"\");\n        assert.equal(session.getFoldWidget(3), \"start\");\n        assert.equal(session.getFoldWidget(4), \"start\");\n        assert.equal(session.getFoldWidget(5), \"\");\n\n        assert.range(session.getFoldWidgetRange(0), 0, 1, 2, 0);\n        assert.equal(session.getFoldWidgetRange(3), null);\n        assert.equal(session.getFoldWidgetRange(5), null);\n    },\n\n    \"test: indentation folding\": function() {\n        var session = new EditSession([\n            'def a: #',\n            '',\n            ' b:',\n            '  c',\n            ' ',\n            '  c',\n            '',\n            ' ',\n            ''\n        ]);\n\n        var mode = new PythonMode();\n        session.setFoldStyle(\"markbeginend\");\n        session.setMode(mode);\n\n        assert.equal(session.getFoldWidget(0), \"start\");\n        assert.equal(session.getFoldWidget(1), \"\");\n        assert.equal(session.getFoldWidget(2), \"start\");\n\n        assert.range(session.getFoldWidgetRange(0), 0, 6, 5, 3);\n        assert.range(session.getFoldWidgetRange(2), 2, 3, 5, 3);\n    }\n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main)\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n"
  },
  {
    "path": "lib/ace/mode/folding/sqlserver.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function() {};\n\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    /** \n     * Inheriting cstyle folding because it handles the region comment folding \n     * and special block comment folding appropriately.\n     * \n     * Cstyle's getCommentRegionBlock() contains the sql comment characters '--' for end region block.\n     */\n    \n    this.foldingStartMarker = /(\\bCASE\\b|\\bBEGIN\\b)|^\\s*(\\/\\*)/i;\n    // this.foldingStopMarker = /(\\bEND\\b)|^[\\s\\*]*(\\*\\/)/i;\n    this.startRegionRe = /^\\s*(\\/\\*|--)#?region\\b/;\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n    \n        if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row);\n    \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1]) return this.getBeginEndBlock(session, row, i, match[1]);\n    \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\") range = null;\n            }\n    \n            return range;\n        }\n    \n        if (foldStyle === \"markbegin\") return;\n        //TODO: add support for end folding markers\n        return;\n    };\n    \n    /**\n     * @returns {range} folding block for sequence that starts with 'CASE' or 'BEGIN' and ends with 'END'\n     * @param {string} matchSequence - the sequence of charaters that started the fold widget, which should remain visible when the fold widget is folded\n     */\n    this.getBeginEndBlock = function(session, row, column, matchSequence) {\n        var start = {\n            row: row,\n            column: column + matchSequence.length\n        };\n        var maxRow = session.getLength();\n        var line;\n    \n        var depth = 1;\n        var re = /(\\bCASE\\b|\\bBEGIN\\b)|(\\bEND\\b)/i;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth++;\n            else depth--;\n    \n            if (!depth) break;\n        }\n        var endRow = row;\n        if (endRow > start.row) {\n            return new Range(start.row, start.column, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n"
  },
  {
    "path": "lib/ace/mode/folding/velocity.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"##\")\n            return;\n\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n\n            if (level == -1)\n                continue;\n\n            if (line[level] != \"##\")\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n\n    // must return \"\" if there's no fold, to enable caching\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n\n        // documentation comments\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"##\" && next[indent] == \"##\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        } else if (prevIndent == indent && line[indent] == \"##\" && prev[indent] == \"##\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n\n        if (prevIndent!= -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n\n}).call(FoldMode.prototype);\n\n});\n"
  },
  {
    "path": "lib/ace/mode/folding/xml.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar lang = require(\"../../lib/lang\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n    \n};\noop.inherits(FoldMode, BaseFoldMode);\n\nvar Tag = function() {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = {row: 0, column: 0};\n    this.end = {row: 0, column: 0};\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\n(function() {\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n\n        return \"start\";\n    };\n    \n    this.getCommentFoldWidget = function(session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n\n    /*\n     * returns a first tag (or a fragment) in a line\n     */\n    this._getFirstTagInLine = function(session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n\n        return null;\n    };\n\n    this._findEndTagInLine = function(session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n\n    /*\n     * reads a full tag and places the iterator after the tag\n     */\n    this._readTagForward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n                iterator.stepForward();\n                return tag;\n            }\n        } while(token = iterator.stepForward());\n\n        return null;\n    };\n    \n    this._readTagBackward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n                iterator.stepBackward();\n                return tag;\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n            }\n        } while(token = iterator.stepBackward());\n\n        return null;\n    };\n    \n    this._pop = function(stack, tag) {\n        while (stack.length) {\n            \n            var top = stack[stack.length-1];\n            if (!tag || top.tagName == tag.tagName) {\n                return stack.pop();\n            }\n            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n                stack.pop();\n                continue;\n            } else {\n                return null;\n            }\n        }\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        \n        if (!firstTag) {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n        \n        var isBackward = firstTag.closing || firstTag.selfClosing;\n        var stack = [];\n        var tag;\n        \n        if (!isBackward) {\n            var iterator = new TokenIterator(session, row, firstTag.start.column);\n            var start = {\n                row: row,\n                column: firstTag.start.column + firstTag.tagName.length + 2\n            };\n            if (firstTag.start.row == firstTag.end.row)\n                start.column = firstTag.end.column;\n            while (tag = this._readTagForward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0)\n                        return Range.fromPoints(start, tag.start);\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        else {\n            var iterator = new TokenIterator(session, row, firstTag.end.column);\n            var end = {\n                row: row,\n                column: firstTag.start.column\n            };\n            \n            while (tag = this._readTagBackward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (!tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0) {\n                        tag.start.column += tag.tagName.length + 2;\n                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n                            tag.start.column = tag.end.column;\n                        return Range.fromPoints(tag.start, end);\n                    }\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        \n    };\n\n}).call(FoldMode.prototype);\n\n});\n"
  },
  {
    "path": "lib/ace/mode/folding/xml_test.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\nif (typeof process !== \"undefined\")\n    require(\"amd-loader\");\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar XmlMode = require(\"../xml\").Mode;\nvar EditSession = require(\"../../edit_session\").EditSession;\nvar assert = require(\"../../test/assertions\");\n\nmodule.exports = {\n\n    \"test: fold multi line self closing element\": function() {\n        var session = new EditSession([\n            '<person',\n            '  firstname=\"fabian\"',\n            '  lastname=\"jakobs\"/>'\n        ]);\n        \n        var mode = new XmlMode();\n        session.setFoldStyle(\"markbeginend\");\n        session.setMode(mode);\n        \n        assert.equal(session.getFoldWidget(0), \"start\");\n        assert.equal(session.getFoldWidget(1), \"\");\n        assert.equal(session.getFoldWidget(2), \"end\");\n        \n        assert.range(session.getFoldWidgetRange(0), 0, 8, 2, 19);\n        assert.range(session.getFoldWidgetRange(2), 0, 8, 2, 19);\n    },\n    \n    \"test: fold should skip self closing elements\": function() {\n        var session = new EditSession([\n            '<person>',\n            '  <attrib value=\"fabian\"/>',\n            '</person>'\n        ]);\n        \n        var mode = new XmlMode();\n        session.setFoldStyle(\"markbeginend\");\n        session.setMode(mode);\n        \n        assert.equal(session.getFoldWidget(0), \"start\");\n        assert.equal(session.getFoldWidget(1), \"\");\n        assert.equal(session.getFoldWidget(2), \"end\");\n        \n        assert.range(session.getFoldWidgetRange(0), 0, 8, 2, 0);\n        assert.range(session.getFoldWidgetRange(2), 0, 8, 2, 0);\n    },\n    \n    \"test: fold should skip multi line self closing elements\": function() {\n        var session = new EditSession([\n            '<person>',\n            '  <attib',\n            '     key=\"name\"',\n            '     value=\"fabian\"/>',\n            '</person>'\n        ]);\n        \n        var mode = new XmlMode();\n        session.setMode(mode);\n        session.setFoldStyle(\"markbeginend\");\n        \n        assert.equal(session.getFoldWidget(0), \"start\");\n        assert.equal(session.getFoldWidget(1), \"start\");\n        assert.equal(session.getFoldWidget(2), \"\");\n        assert.equal(session.getFoldWidget(3), \"end\");\n        assert.equal(session.getFoldWidget(4), \"end\");\n        \n        assert.range(session.getFoldWidgetRange(0), 0, 8, 4, 0);\n        assert.range(session.getFoldWidgetRange(1), 1, 9, 3, 19);\n        assert.range(session.getFoldWidgetRange(3), 1, 9, 3, 19);\n        assert.range(session.getFoldWidgetRange(4), 0, 8, 4, 0);\n    }\n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main)\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n"
  },
  {
    "path": "lib/ace/mode/forth.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ForthHighlightRules = require(\"./forth_highlight_rules\").ForthHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = ForthHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"--\";\n    this.blockComment = null;\n    this.$id = \"ace/mode/forth\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});"
  },
  {
    "path": "lib/ace/mode/forth_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/* This file was autogenerated from https://raw.github.com/vze26m98/Forth.tmbundle/master/Syntaxes/Forth.tmLanguage (uuid: ) */\n/****************************************************************************************\n * IT MIGHT NOT BE PERFECT ...But it's a good start from an existing *.tmlanguage file. *\n * fileTypes                                                                            *\n ****************************************************************************************/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar ForthHighlightRules = function() {\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = { start: [ { include: '#forth' } ],\n      '#comment':\n       [ { token: 'comment.line.double-dash.forth',\n           regex: '(?:^|\\\\s)--\\\\s.*$',\n           comment: 'line comments for iForth' },\n         { token: 'comment.line.backslash.forth',\n           regex: '(?:^|\\\\s)\\\\\\\\[\\\\s\\\\S]*$',\n           comment: 'ANSI line comment' },\n         { token: 'comment.line.backslash-g.forth',\n           regex: '(?:^|\\\\s)\\\\\\\\[Gg] .*$',\n           comment: 'gForth line comment' },\n         { token: 'comment.block.forth',\n           regex: '(?:^|\\\\s)\\\\(\\\\*(?=\\\\s|$)',\n           push:\n            [ { token: 'comment.block.forth',\n                regex: '(?:^|\\\\s)\\\\*\\\\)(?=\\\\s|$)',\n                next: 'pop' },\n              { defaultToken: 'comment.block.forth' } ],\n           comment: 'multiline comments for iForth' },\n         { token: 'comment.block.documentation.forth',\n           regex: '\\\\bDOC\\\\b',\n           caseInsensitive: true,\n           push:\n            [ { token: 'comment.block.documentation.forth',\n                regex: '\\\\bENDDOC\\\\b',\n                caseInsensitive: true,\n                next: 'pop' },\n              { defaultToken: 'comment.block.documentation.forth' } ],\n           comment: 'documentation comments for iForth' },\n         { token: 'comment.line.parentheses.forth',\n           regex: '(?:^|\\\\s)\\\\.?\\\\( [^)]*\\\\)',\n           comment: 'ANSI line comment' } ],\n      '#constant':\n       [ { token: 'constant.language.forth',\n           regex: '(?:^|\\\\s)(?:TRUE|FALSE|BL|PI|CELL|C/L|R/O|W/O|R/W)(?=\\\\s|$)',\n           caseInsensitive: true},\n         { token: 'constant.numeric.forth',\n           regex: '(?:^|\\\\s)[$#%]?[-+]?[0-9]+(?:\\\\.[0-9]*e-?[0-9]+|\\\\.?[0-9a-fA-F]*)(?=\\\\s|$)'},\n         { token: 'constant.character.forth',\n           regex: '(?:^|\\\\s)(?:[&^]\\\\S|(?:\"|\\')\\\\S(?:\"|\\'))(?=\\\\s|$)'}],\n      '#forth':\n       [ { include: '#constant' },\n         { include: '#comment' },\n         { include: '#string' },\n         { include: '#word' },\n         { include: '#variable' },\n         { include: '#storage' },\n         { include: '#word-def' } ],\n      '#storage':\n       [ { token: 'storage.type.forth',\n           regex: '(?:^|\\\\s)(?:2CONSTANT|2VARIABLE|ALIAS|CONSTANT|CREATE-INTERPRET/COMPILE[:]?|CREATE|DEFER|FCONSTANT|FIELD|FVARIABLE|USER|VALUE|VARIABLE|VOCABULARY)(?=\\\\s|$)',\n           caseInsensitive: true}],\n      '#string':\n       [ { token: 'string.quoted.double.forth',\n           regex: '(ABORT\" |BREAK\" |\\\\.\" |C\" |0\"|S\\\\\\\\?\" )([^\"]+\")',\n           caseInsensitive: true},\n         { token: 'string.unquoted.forth',\n           regex: '(?:INCLUDE|NEEDS|REQUIRE|USE)[ ]\\\\S+(?=\\\\s|$)',\n           caseInsensitive: true}],\n      '#variable':\n       [ { token: 'variable.language.forth',\n           regex: '\\\\b(?:I|J)\\\\b',\n           caseInsensitive: true } ],\n      '#word':\n       [ { token: 'keyword.control.immediate.forth',\n           regex: '(?:^|\\\\s)\\\\[(?:\\\\?DO|\\\\+LOOP|AGAIN|BEGIN|DEFINED|DO|ELSE|ENDIF|FOR|IF|IFDEF|IFUNDEF|LOOP|NEXT|REPEAT|THEN|UNTIL|WHILE)\\\\](?=\\\\s|$)',\n           caseInsensitive: true},\n         { token: 'keyword.other.immediate.forth',\n           regex: '(?:^|\\\\s)(?:COMPILE-ONLY|IMMEDIATE|IS|RESTRICT|TO|WHAT\\'S|])(?=\\\\s|$)',\n           caseInsensitive: true},\n         { token: 'keyword.control.compile-only.forth',\n           regex: '(?:^|\\\\s)(?:-DO|\\\\-LOOP|\\\\?DO|\\\\?LEAVE|\\\\+DO|\\\\+LOOP|ABORT\\\\\"|AGAIN|AHEAD|BEGIN|CASE|DO|ELSE|ENDCASE|ENDIF|ENDOF|ENDTRY\\\\-IFERROR|ENDTRY|FOR|IF|IFERROR|LEAVE|LOOP|NEXT|RECOVER|REPEAT|RESTORE|THEN|TRY|U\\\\-DO|U\\\\+DO|UNTIL|WHILE)(?=\\\\s|$)',\n           caseInsensitive: true},\n         { token: 'keyword.other.compile-only.forth',\n           regex: '(?:^|\\\\s)(?:\\\\?DUP-0=-IF|\\\\?DUP-IF|\\\\)|\\\\[|\\\\[\\'\\\\]|\\\\[CHAR\\\\]|\\\\[COMPILE\\\\]|\\\\[IS\\\\]|\\\\[TO\\\\]|<COMPILATION|<INTERPRETATION|ASSERT\\\\(|ASSERT0\\\\(|ASSERT1\\\\(|ASSERT2\\\\(|ASSERT3\\\\(|COMPILATION>|DEFERS|DOES>|INTERPRETATION>|OF|POSTPONE)(?=\\\\s|$)',\n           caseInsensitive: true},\n         { token: 'keyword.other.non-immediate.forth',\n           regex: '(?:^|\\\\s)(?:\\'|<IS>|<TO>|CHAR|END-STRUCT|INCLUDE[D]?|LOAD|NEEDS|REQUIRE[D]?|REVISION|SEE|STRUCT|THRU|USE)(?=\\\\s|$)',\n           caseInsensitive: true},\n         { token: 'keyword.other.warning.forth',\n           regex: '(?:^|\\\\s)(?:~~|BREAK:|BREAK\"|DBG)(?=\\\\s|$)',\n           caseInsensitive: true}],\n      '#word-def':\n       [ { token:\n            [ 'keyword.other.compile-only.forth',\n              'keyword.other.compile-only.forth',\n              'meta.block.forth',\n              'entity.name.function.forth' ],\n           regex: '(:NONAME)|(^:|\\\\s:)(\\\\s)(\\\\S+)(?=\\\\s|$)',\n           caseInsensitive: true,\n           push:\n            [ { token: 'keyword.other.compile-only.forth',\n                regex: ';(?:CODE)?',\n                caseInsensitive: true,\n                next: 'pop' },\n              { include: '#constant' },\n              { include: '#comment' },\n              { include: '#string' },\n              { include: '#word' },\n              { include: '#variable' },\n              { include: '#storage' },\n              { defaultToken: 'meta.block.forth' } ] } ] };\n    \n    this.normalizeRules();\n};\n\nForthHighlightRules.metaData = { fileTypes: [ 'frt', 'fs', 'ldr', 'fth', '4th' ],\n      foldingStartMarker: '/\\\\*\\\\*|\\\\{\\\\s*$',\n      foldingStopMarker: '\\\\*\\\\*/|^\\\\s*\\\\}',\n      keyEquivalent: '^~F',\n      name: 'Forth',\n      scopeName: 'source.forth' };\n\n\noop.inherits(ForthHighlightRules, TextHighlightRules);\n\nexports.ForthHighlightRules = ForthHighlightRules;\n});"
  },
  {
    "path": "lib/ace/mode/fortran.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/* Derived from Python rules */\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar FortranHighlightRules = require(\"./fortran_highlight_rules\").FortranHighlightRules;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Range = require(\"../range\").Range;\n\nvar Mode = function() {\n    this.HighlightRules = FortranHighlightRules;\n    this.foldingRules = new CStyleFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"!\";\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[:]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    var outdents = {\n        \"return\": 1,\n        \"break\": 1,\n        \"continue\": 1,\n        \"RETURN\": 1,\n        \"BREAK\": 1,\n        \"CONTINUE\": 1\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        if (input !== \"\\r\\n\" && input !== \"\\r\" && input !== \"\\n\")\n            return false;\n\n        var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens;\n\n        if (!tokens)\n            return false;\n        do {\n            var last = tokens.pop();\n        } while (last && (last.type == \"comment\" || (last.type == \"text\" && last.value.match(/^\\s+$/))));\n\n        if (!last)\n            return false;\n\n        return (last.type == \"keyword\" && outdents[last.value]);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n\n        row += 1;\n        var indent = this.$getIndent(doc.getLine(row));\n        var tab = doc.getTabString();\n        if (indent.slice(-tab.length) == tab)\n            doc.remove(new Range(row, indent.length-tab.length, row, indent.length));\n    };\n\n    this.$id = \"ace/mode/fortran\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\n"
  },
  {
    "path": "lib/ace/mode/fortran_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/* Derived from Python highlighing rules */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar FortranHighlightRules = function() {\n\n    var keywords = (\n        \"call|case|contains|continue|cycle|do|else|elseif|end|enddo|endif|function|\"+ \n        \"if|implicit|in|include|inout|intent|module|none|only|out|print|program|return|\"+ \n        \"select|status|stop|subroutine|\" +\n        \"return|then|use|while|write|\"+\n        \"CALL|CASE|CONTAINS|CONTINUE|CYCLE|DO|ELSE|ELSEIF|END|ENDDO|ENDIF|FUNCTION|\"+\n        \"IF|IMPLICIT|IN|INCLUDE|INOUT|INTENT|MODULE|NONE|ONLY|OUT|PRINT|PROGRAM|RETURN|\"+\n        \"SELECT|STATUS|STOP|SUBROUTINE|\" +\n        \"RETURN|THEN|USE|WHILE|WRITE\"\n    );\n\n    var keywordOperators = (\n        \"and|or|not|eq|ne|gt|ge|lt|le|\" +\n        \"AND|OR|NOT|EQ|NE|GT|GE|LT|LE\" \n    );\n\n    var builtinConstants = (\n        \"true|false|TRUE|FALSE\"\n    );\n\n    var builtinFunctions = (\n        \"abs|achar|acos|acosh|adjustl|adjustr|aimag|aint|all|allocate|\"+\n        \"anint|any|asin|asinh|associated|atan|atan2|atanh|\"+\n        \"bessel_j0|bessel_j1|bessel_jn|bessel_y0|bessel_y1|bessel_yn|\"+\n        \"bge|bgt|bit_size|ble|blt|btest|ceiling|char|cmplx|conjg|cos|cosh|\"+\n        \"count|cpu_time|cshift|date_and_time|dble|deallocate|digits|dim|dot_product|dprod|\"+\n        \"dshiftl|dshiftr|dsqrt|eoshift|epsilon|erf|erfc|erfc_scaled|exp|float|floor|\"+\n        \"format|fraction|gamma|input|len|lge|lgt|lle|llt|log|log10|maskl|maskr|matmul|max|maxloc|maxval|\"+\n        \"merge|min|minloc|minval|mod|modulo|nint|not|norm2|null|nullify|pack|parity|popcnt|poppar|\"+\n        \"precision|present|product|radix|random_number|random_seed|range|repeat|reshape|round|\"+\n        \"rrspacing|same_type_as|scale|scan|selected_char_kind|selected_int_kind|selected_real_kind|\"+\n        \"set_exponent|shape|shifta|shiftl|shiftr|sign|sin|sinh|size|sngl|spacing|spread|\"+\n        \"sqrt|sum|system_clock|tan|tanh|tiny|trailz|transfer|transpose|trim|ubound|unpack|verify|\" +\n        \"ABS|ACHAR|ACOS|ACOSH|ADJUSTL|ADJUSTR|AIMAG|AINT|ALL|ALLOCATE|\"+\n        \"ANINT|ANY|ASIN|ASINH|ASSOCIATED|ATAN|ATAN2|ATANH|\"+\n        \"BESSEL_J0|BESSEL_J1|BESSEL_JN|BESSEL_Y0|BESSEL_Y1|BESSEL_YN|\"+\n        \"BGE|BGT|BIT_SIZE|BLE|BLT|BTEST|CEILING|CHAR|CMPLX|CONJG|COS|COSH|\"+\n        \"COUNT|CPU_TIME|CSHIFT|DATE_AND_TIME|DBLE|DEALLOCATE|DIGITS|DIM|DOT_PRODUCT|DPROD|\"+\n        \"DSHIFTL|DSHIFTR|DSQRT|EOSHIFT|EPSILON|ERF|ERFC|ERFC_SCALED|EXP|FLOAT|FLOOR|\"+\n        \"FORMAT|FRACTION|GAMMA|INPUT|LEN|LGE|LGT|LLE|LLT|LOG|LOG10|MASKL|MASKR|MATMUL|MAX|MAXLOC|MAXVAL|\"+\n        \"MERGE|MIN|MINLOC|MINVAL|MOD|MODULO|NINT|NOT|NORM2|NULL|NULLIFY|PACK|PARITY|POPCNT|POPPAR|\"+\n        \"PRECISION|PRESENT|PRODUCT|RADIX|RANDOM_NUMBER|RANDOM_SEED|RANGE|REPEAT|RESHAPE|ROUND|\"+\n        \"RRSPACING|SAME_TYPE_AS|SCALE|SCAN|SELECTED_CHAR_KIND|SELECTED_INT_KIND|SELECTED_REAL_KIND|\"+\n        \"SET_EXPONENT|SHAPE|SHIFTA|SHIFTL|SHIFTR|SIGN|SIN|SINH|SIZE|SNGL|SPACING|SPREAD|\"+\n        \"SQRT|SUM|SYSTEM_CLOCK|TAN|TANH|TINY|TRAILZ|TRANSFER|TRANSPOSE|TRIM|UBOUND|UNPACK|VERIFY\"\n    );\n\n    var storageType = (\n        \"logical|character|integer|real|type|\" +\n        \"LOGICAL|CHARACTER|INTEGER|REAL|TYPE\"    \n    );\n\n    var storageModifiers = ( \n        \"allocatable|dimension|intent|parameter|pointer|target|private|public|\" +\n        \"ALLOCATABLE|DIMENSION|INTENT|PARAMETER|POINTER|TARGET|PRIVATE|PUBLIC\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"invalid.deprecated\": \"debugger\",\n        \"support.function\": builtinFunctions,\n        \"constant.language\": builtinConstants,\n        \"keyword\": keywords,\n        \"keyword.operator\": keywordOperators,\n        \"storage.type\": storageType,\n        \"storage.modifier\" : storageModifiers\n    }, \"identifier\");\n\n    var strPre = \"(?:r|u|ur|R|U|UR|Ur|uR)?\";\n\n    var decimalInteger = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n    var octInteger = \"(?:0[oO]?[0-7]+)\";\n    var hexInteger = \"(?:0[xX][\\\\dA-Fa-f]+)\";\n    var binInteger = \"(?:0[bB][01]+)\";\n    var integer = \"(?:\" + decimalInteger + \"|\" + octInteger + \"|\" + hexInteger + \"|\" + binInteger + \")\";\n\n    var exponent = \"(?:[eE][+-]?\\\\d+)\";\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var exponentFloat = \"(?:(?:\" + pointFloat + \"|\" +  intPart + \")\" + exponent + \")\";\n    var floatNumber = \"(?:\" + exponentFloat + \"|\" + pointFloat + \")\";\n\n    var stringEscape =  \"\\\\\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\\\\\abfnrtv'\\\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})\";\n\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment\",\n            regex : \"!.*$\"\n        }, {\n            token : \"string\",           // multi line \"\"\" string start\n            regex : strPre + '\"{3}',\n            next : \"qqstring3\"\n        }, {\n            token : \"string\",           // \" string\n            regex : strPre + '\"(?=.)',\n            next : \"qqstring\"\n        }, {\n            token : \"string\",           // multi line ''' string start\n            regex : strPre + \"'{3}\",\n            next : \"qstring3\"\n        }, {\n            token : \"string\",           // ' string\n            regex : strPre + \"'(?=.)\",\n            next : \"qstring\"\n        }, {\n            token : \"constant.numeric\", // imaginary\n            regex : \"(?:\" + floatNumber + \"|\\\\d+)[jJ]\\\\b\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : floatNumber\n        }, {\n            token : \"constant.numeric\", // long integer\n            regex : integer + \"[lL]\\\\b\"\n        }, {\n            token : \"constant.numeric\", // integer\n            regex : integer + \"\\\\b\"\n        }, {\n            token : \"keyword\", // pre-compiler directives\n            regex : \"#\\\\s*(?:include|import|define|undef|INCLUDE|IMPORT|DEFINE|UNDEF)\\\\b\"\n        }, {\n            token : \"keyword\", // special case pre-compiler directive\n            regex : \"#\\\\s*(?:endif|ifdef|else|elseif|ifndef|ENDIF|IFDEF|ELSE|ELSEIF|IFNDEF)\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|%|<<|>>|&|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|=\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[\\\\[\\\\(\\\\{]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\]\\\\)\\\\}]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+\"\n        } ],\n        \"qqstring3\" : [ {\n            token : \"constant.language.escape\",\n            regex : stringEscape\n        }, {\n            token : \"string\", // multi line \"\"\" string end\n            regex : '\"{3}',\n            next : \"start\"\n        }, {\n            defaultToken : \"string\"\n        } ],\n        \"qstring3\" : [ {\n            token : \"constant.language.escape\",\n            regex : stringEscape\n        }, {\n            token : \"string\", // multi line \"\"\" string end\n            regex : '\"{3}',\n            next : \"start\"\n        }, {\n            defaultToken : \"string\"\n        } ],\n        \"qqstring\" : [{\n            token : \"constant.language.escape\",\n            regex : stringEscape\n        }, {\n            token : \"string\",\n            regex : \"\\\\\\\\$\",\n            next  : \"qqstring\"\n        }, {\n            token : \"string\",\n            regex : '\"|$',\n            next  : \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"qstring\" : [{\n            token : \"constant.language.escape\",\n            regex : stringEscape\n        }, {\n            token : \"string\",\n            regex : \"\\\\\\\\$\",\n            next  : \"qstring\"\n        }, {\n            token : \"string\",\n            regex : \"'|$\",\n            next  : \"start\"\n        }, {\n            defaultToken: \"string\"\n        }]\n    };\n};\n\noop.inherits(FortranHighlightRules, TextHighlightRules);\n\nexports.FortranHighlightRules = FortranHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/ftl.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar FtlHighlightRules = require(\"./ftl_highlight_rules\").FtlHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = FtlHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.$id = \"ace/mode/ftl\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/ftl_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar FtlLangHighlightRules = function () {\n\n    var stringBuiltIns = \"\\\\?|substring|cap_first|uncap_first|capitalize|chop_linebreak|date|time|datetime|\"\n        + \"ends_with|html|groups|index_of|j_string|js_string|json_string|last_index_of|length|lower_case|\"\n        + \"left_pad|right_pad|contains|matches|number|replace|rtf|url|split|starts_with|string|trim|\"\n        + \"upper_case|word_list|xhtml|xml\";\n    var numberBuiltIns = \"c|round|floor|ceiling\";\n    var dateBuiltIns = \"iso_[a-z_]+\";\n    var seqBuiltIns = \"first|last|seq_contains|seq_index_of|seq_last_index_of|reverse|size|sort|sort_by|chunk\";\n    var hashBuiltIns = \"keys|values\";\n    var xmlBuiltIns = \"children|parent|root|ancestors|node_name|node_type|node_namespace\";\n    var expertBuiltIns = \"byte|double|float|int|long|short|number_to_date|number_to_time|number_to_datetime|\"\n        + \"eval|has_content|interpret|is_[a-z_]+|namespacenew\";\n    var allBuiltIns = stringBuiltIns + numberBuiltIns + dateBuiltIns + seqBuiltIns + hashBuiltIns\n        + xmlBuiltIns + expertBuiltIns;\n\n    var deprecatedBuiltIns = \"default|exists|if_exists|web_safe\";\n\n    var variables = \"data_model|error|globals|lang|locale|locals|main|namespace|node|current_node|\"\n        + \"now|output_encoding|template_name|url_escaping_charset|vars|version\";\n\n    var operators = \"gt|gte|lt|lte|as|in|using\";\n\n    var reserved = \"true|false\";\n\n    var attributes = \"encoding|parse|locale|number_format|date_format|time_format|datetime_format|time_zone|\"\n        + \"url_escaping_charset|classic_compatible|strip_whitespace|strip_text|strict_syntax|ns_prefixes|\"\n        + \"attributes\";\n\n    this.$rules = {\n        \"start\" : [{\n            token : \"constant.character.entity\",\n            regex : /&[^;]+;/\n        }, {\n            token : \"support.function\",\n            regex : \"\\\\?(\"+allBuiltIns+\")\"\n        },  {\n            token : \"support.function.deprecated\",\n            regex : \"\\\\?(\"+deprecatedBuiltIns+\")\"\n        }, {\n            token : \"language.variable\",\n            regex : \"\\\\.(?:\"+variables+\")\"\n        }, {\n            token : \"constant.language\",\n            regex : \"\\\\b(\"+reserved+\")\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"\\\\b(?:\"+operators+\")\\\\b\"\n        }, {\n            token : \"entity.other.attribute-name\",\n            regex : attributes\n        }, {\n            token : \"string\", //\n            regex : /['\"]/,\n            next : \"qstring\"\n        }, {\n            // Deal with variable names that contains number\n            // e.g. <#if var42 == 42 >\n            token : function(value) {\n                if (value.match(\"^[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?$\")) {\n                    return \"constant.numeric\";\n                } else {\n                    return \"variable\";\n                }\n            },\n            regex : /[\\w.+\\-]+/\n        }, {\n            token : \"keyword.operator\",\n            regex : \"!|\\\\.|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[[({]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\])}]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+\"\n        }],\n\n        \"qstring\" : [{\n            token : \"constant.character.escape\",\n            regex : '\\\\\\\\[nrtvef\\\\\\\\\"$]'\n        }, {\n            token : \"string\",\n            regex : /['\"]/,\n            next : \"start\"\n        }, {\n            defaultToken : \"string\"\n        }]\n    };\n};\n\noop.inherits(FtlLangHighlightRules, TextHighlightRules);\n\nvar FtlHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n\n    var directives = \"assign|attempt|break|case|compress|default|elseif|else|escape|fallback|function|flush|\"\n        + \"ftl|global|if|import|include|list|local|lt|macro|nested|noescape|noparse|nt|recover|recurse|return|rt|\"\n        + \"setting|stop|switch|t|visit\";\n\n    var startRules = [\n        {\n            token : \"comment\",\n            regex : \"<#--\",\n            next : \"ftl-dcomment\"\n        }, {\n            token : \"string.interpolated\",\n            regex : \"\\\\${\",\n            push  : \"ftl-start\"\n        }, {\n            token : \"keyword.function\",\n            regex :  \"</?#(\"+directives+\")\",\n            push : \"ftl-start\"\n        }, {\n            token : \"keyword.other\",\n            regex : \"</?@[a-zA-Z\\\\.]+\",\n            push : \"ftl-start\"\n        }\n    ];\n\n    var endRules = [\n        {\n           token : \"keyword\",\n            regex : \"/?>\",\n            next  : \"pop\"\n        }, {\n            token : \"string.interpolated\",\n            regex : \"}\",\n            next  : \"pop\"\n        }\n    ];\n\n    for (var key in this.$rules)\n        this.$rules[key].unshift.apply(this.$rules[key], startRules);\n\n    this.embedRules(FtlLangHighlightRules, \"ftl-\", endRules, [\"start\"]);\n\n    this.addRules({\n        \"ftl-dcomment\" : [{\n            token : \"comment\",\n            regex : \"-->\",\n            next : \"pop\"\n        }, {\n            defaultToken : \"comment\"\n        }]\n    });\n\n    this.normalizeRules();\n};\n\noop.inherits(FtlHighlightRules, HtmlHighlightRules);\n\nexports.FtlHighlightRules = FtlHighlightRules;\n});\n\n"
  },
  {
    "path": "lib/ace/mode/gcode.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n    \"use strict\";\n\n    var oop = require(\"../lib/oop\");\n    var TextMode = require(\"./text\").Mode;\n    var GcodeHighlightRules = require(\"./gcode_highlight_rules\").GcodeHighlightRules;\n    var Range = require(\"../range\").Range;\n\n    var Mode = function() {\n        this.HighlightRules = GcodeHighlightRules;\n        this.$behaviour = this.$defaultBehaviour;\n    };\n    oop.inherits(Mode, TextMode);\n\n    (function() {\n        this.$id = \"ace/mode/gcode\";\n    }).call(Mode.prototype);\n\n    exports.Mode = Mode;\n\n});\n\n"
  },
  {
    "path": "lib/ace/mode/gcode_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n    \"use strict\";\n\n    var oop = require(\"../lib/oop\");\n    var TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\n    var GcodeHighlightRules = function() {\n\n        var keywords = (\n            \"IF|DO|WHILE|ENDWHILE|CALL|ENDIF|SUB|ENDSUB|GOTO|REPEAT|ENDREPEAT|CALL\"\n            );\n\n        var builtinConstants = (\n            \"PI\"\n            );\n\n        var builtinFunctions = (\n            \"ATAN|ABS|ACOS|ASIN|SIN|COS|EXP|FIX|FUP|ROUND|LN|TAN\"\n            );\n        var keywordMapper = this.createKeywordMapper({\n            \"support.function\": builtinFunctions,\n            \"keyword\": keywords,\n            \"constant.language\": builtinConstants\n        }, \"identifier\", true);\n\n        this.$rules = {\n            \"start\" : [ {\n                token : \"comment\",\n                regex : \"\\\\(.*\\\\)\"\n            }, {\n                token : \"comment\",           // block number\n                regex : \"([N])([0-9]+)\"\n            }, {\n                token : \"string\",           // \" string\n                regex : \"([G])([0-9]+\\\\.?[0-9]?)\"\n            }, {\n                token : \"string\",           // ' string\n                regex : \"([M])([0-9]+\\\\.?[0-9]?)\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"([-+]?([0-9]*\\\\.?[0-9]+\\\\.?))|(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)\"\n            }, {\n                token : keywordMapper,\n                regex : \"[A-Z]\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"EQ|LT|GT|NE|GE|LE|OR|XOR\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[\\\\[]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\]]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            } ]\n        };\n    };\n\n    oop.inherits(GcodeHighlightRules, TextHighlightRules);\n\n    exports.GcodeHighlightRules = GcodeHighlightRules;\n});"
  },
  {
    "path": "lib/ace/mode/gherkin.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2014, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar GherkinHighlightRules = require(\"./gherkin_highlight_rules\").GherkinHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = GherkinHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"#\";\n    this.$id = \"ace/mode/gherkin\";\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var space2 = \"  \";\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        \n        console.log(state);\n        \n        if(line.match(\"[ ]*\\\\|\")) {\n            indent += \"| \";\n        }\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n        \n\n        if (state == \"start\") {\n            if (line.match(\"Scenario:|Feature:|Scenario Outline:|Background:\")) {\n                indent += space2;\n            } else if(line.match(\"(Given|Then).+(:)$|Examples:\")) {\n                indent += space2;\n            } else if(line.match(\"\\\\*.+\")) {\n                indent += \"* \";\n            } \n        }\n        \n\n        return indent;\n    };\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});"
  },
  {
    "path": "lib/ace/mode/gherkin_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2014, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar stringEscape =  \"\\\\\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\\\\\abfnrtv'\\\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})\";\n\nvar GherkinHighlightRules = function() {\n    var languages = [{\n        name: \"en\",\n        labels: \"Feature|Background|Scenario(?: Outline)?|Examples\",\n        keywords: \"Given|When|Then|And|But\"\n    }\n    /* TODO find a way to enable this when first line in the file is # language: pl\n    , {\n        name: \"pl\",\n        labels: \"Właściwość|Funkcja|Aspekt|Potrzeba biznesowa|Założenia|Scenariusz|Szablon scenariusza|Przykłady\",\n        keywords: \"Mając|Zakładając(?:, że)?|Jeżeli|Jeśli|Gdy|Kiedy|Wtedy|Oraz|I|Ale\"\n    }\n    */];\n    \n    var labels = languages.map(function(l) {\n        return l.labels;\n    }).join(\"|\");\n    var keywords = languages.map(function(l) {\n        return l.keywords;\n    }).join(\"|\");\n    \n    // need to include constant ints\n    this.$rules = {\n        start : [{\n            token: \"constant.numeric\",\n            regex: \"(?:(?:[1-9]\\\\d*)|(?:0))\"\n        }, {\n            token : \"comment\",\n            regex : \"#.*$\"\n        }, {\n            token : \"keyword\",\n            regex : \"(?:\" + labels + \"):|(?:\" + keywords + \")\\\\b\"\n        }, {\n            token : \"keyword\",\n            regex : \"\\\\*\"\n        }, {\n            token : \"string\",           // multi line \"\"\" string start\n            regex : '\"{3}',\n            next : \"qqstring3\"\n        }, {\n            token : \"string\",           // \" string\n            regex : '\"',\n            next : \"qqstring\"\n        }, {\n            token : \"text\",\n            regex : \"^\\\\s*(?=@[\\\\w])\",\n            next : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : \"variable.parameter\",\n                regex : \"@[\\\\w]+\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"start\"\n            }]\n        }, {\n            token : \"comment\",\n            regex : \"<[^>]+>\"\n        }, {\n            token : \"comment\",\n            regex : \"\\\\|(?=.)\",\n            next : \"table-item\"\n        }, {\n            token : \"comment\",\n            regex : \"\\\\|$\",\n            next : \"start\"\n        }],\n        \"qqstring3\" : [ {\n            token : \"constant.language.escape\",\n            regex : stringEscape\n        }, {\n            token : \"string\", // multi line \"\"\" string end\n            regex : '\"{3}',\n            next : \"start\"\n        }, {\n            defaultToken : \"string\"\n        }],\n        \"qqstring\" : [{\n            token : \"constant.language.escape\",\n            regex : stringEscape\n        }, {\n            token : \"string\",\n            regex : \"\\\\\\\\$\",\n            next  : \"qqstring\"\n        }, {\n            token : \"string\",\n            regex : '\"|$',\n            next  : \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"table-item\" : [{\n            token : \"comment\",\n            regex : /$/,\n            next : \"start\"\n        }, {\n            token : \"comment\",\n            regex : /\\|/\n        }, {\n            token : \"string\",\n            regex : /\\\\./\n        }, {\n            defaultToken : \"string\"\n        }]\n    };\n    this.normalizeRules();\n};\n\noop.inherits(GherkinHighlightRules, TextHighlightRules);\n\nexports.GherkinHighlightRules = GherkinHighlightRules;\n});"
  },
  {
    "path": "lib/ace/mode/gitignore.js",
    "content": "\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar GitignoreHighlightRules = require(\"./gitignore_highlight_rules\").GitignoreHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = GitignoreHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"#\";\n    this.$id = \"ace/mode/gitignore\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/gitignore_highlight_rules.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar GitignoreHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : /^\\s*#.*$/\n            }, {\n                token : \"keyword\", // negated patterns\n                regex : /^\\s*!.*$/\n            }\n        ]\n    };\n    \n    this.normalizeRules();\n};\n\nGitignoreHighlightRules.metaData = {\n    fileTypes: ['gitignore'],\n    name: 'Gitignore'\n};\n\noop.inherits(GitignoreHighlightRules, TextHighlightRules);\n\nexports.GitignoreHighlightRules = GitignoreHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/glsl.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar CMode = require(\"./c_cpp\").Mode;\nvar glslHighlightRules = require(\"./glsl_highlight_rules\").glslHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = glslHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, CMode);\n\n(function() {\n    this.$id = \"ace/mode/glsl\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/glsl_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar c_cppHighlightRules = require(\"./c_cpp_highlight_rules\").c_cppHighlightRules;\n\nvar glslHighlightRules = function() {\n\n    var keywords = (\n        \"attribute|const|uniform|varying|break|continue|do|for|while|\" +\n        \"if|else|in|out|inout|float|int|void|bool|true|false|\" +\n        \"lowp|mediump|highp|precision|invariant|discard|return|mat2|mat3|\" +\n        \"mat4|vec2|vec3|vec4|ivec2|ivec3|ivec4|bvec2|bvec3|bvec4|sampler2D|\" +\n        \"samplerCube|struct\"\n    );\n\n    var buildinConstants = (\n        \"radians|degrees|sin|cos|tan|asin|acos|atan|pow|\" +\n        \"exp|log|exp2|log2|sqrt|inversesqrt|abs|sign|floor|ceil|fract|mod|\" +\n        \"min|max|clamp|mix|step|smoothstep|length|distance|dot|cross|\" +\n        \"normalize|faceforward|reflect|refract|matrixCompMult|lessThan|\" +\n        \"lessThanEqual|greaterThan|greaterThanEqual|equal|notEqual|any|all|\" +\n        \"not|dFdx|dFdy|fwidth|texture2D|texture2DProj|texture2DLod|\" +\n        \"texture2DProjLod|textureCube|textureCubeLod|\" +\n        \"gl_MaxVertexAttribs|gl_MaxVertexUniformVectors|gl_MaxVaryingVectors|\" +\n        \"gl_MaxVertexTextureImageUnits|gl_MaxCombinedTextureImageUnits|\" +\n        \"gl_MaxTextureImageUnits|gl_MaxFragmentUniformVectors|gl_MaxDrawBuffers|\" +\n        \"gl_DepthRangeParameters|gl_DepthRange|\" +\n        // The following two are only for MIME x-shader/x-vertex.\n        \"gl_Position|gl_PointSize|\" +\n        // The following five are only for MIME x-shader/x-fragment.\n        \"gl_FragCoord|gl_FrontFacing|gl_PointCoord|gl_FragColor|gl_FragData\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"this\",\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants\n    }, \"identifier\");\n\n    this.$rules = new c_cppHighlightRules().$rules;\n    this.$rules.start.forEach(function(rule) {\n        if (typeof rule.token == \"function\")\n            rule.token = keywordMapper;\n    });\n};\n\noop.inherits(glslHighlightRules, c_cppHighlightRules);\n\nexports.glslHighlightRules = glslHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/gobstones.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar GobstonesHighlightRules = require(\"./gobstones_highlight_rules\").GobstonesHighlightRules;\n\nvar Mode = function() {\n    JavaScriptMode.call(this);\n    this.HighlightRules = GobstonesHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, JavaScriptMode);\n\n(function() {\n    \n    this.createWorker = function(session) {\n        return null;\n    };\n\n    this.$id = \"ace/mode/gobstones\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\n"
  },
  {
    "path": "lib/ace/mode/gobstones_highlight_rules.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar GobstonesHighlightRules = function() {\n\n    var keywords = (\n    \"program|procedure|function|interactive|if|then|else|switch|repeat|while|foreach|in|not|div|mod|Skip|return\"\n    );\n\n    var buildinConstants = (\n        \"False|True\"\n    );\n\n\n    var langClasses = (\n        \"Poner|Sacar|Mover|IrAlBorde|VaciarTablero|\" +\n        \"nroBolitas|hayBolitas|puedeMover|siguiente|previo|opuesto|minBool|maxBool|\" +\n        \"minDir|maxDir|minColor|maxColor\"\n    );\n\n    var supportType = (\n        \"Verde|Rojo|Azul|Negro|Norte|Sur|Este|Oeste\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants,\n        \"support.function\": langClasses,\n        \"support.type\": supportType\n    }, \"identifier\");\n\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            {\n                token : \"comment\",\n                regex : \"\\\\-\\\\-.*$\"\n            },\n            {\n                token : \"comment\",\n                regex : \"#.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : /0(?:[xX][0-9a-fA-F][0-9a-fA-F_]*|[bB][01][01_]*)[LlSsDdFfYy]?\\b/\n            }, {\n                token : \"constant.numeric\", // float\n                regex : /[+-]?\\d[\\d_]*(?:(?:\\.[\\d_]*)?(?:[eE][+-]?[\\d_]+)?)?[LlSsDdFfYy]?\\b/\n            }, {\n                token : \"constant.language.boolean\",\n                regex : \"(?:True|False)\\\\b\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \":=|\\\\.\\\\.|,|;|\\\\|\\\\||\\\\/\\\\/|\\\\+|\\\\-|\\\\^|\\\\*|>|<|>=|=>|==|&&\"\n            }, {\n                token : keywordMapper,\n                // TODO: Unicode escape sequences\n                // TODO: Unicode identifiers\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token : \"lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ]\n    };\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n};\n\noop.inherits(GobstonesHighlightRules, TextHighlightRules);\n\nexports.GobstonesHighlightRules = GobstonesHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/golang.js",
    "content": "define(function(require, exports, module) {\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar GolangHighlightRules = require(\"./golang_highlight_rules\").GolangHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = GolangHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.foldingRules = new CStyleFoldMode();\n    this.$behaviour = new CstyleBehaviour();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    \n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n        \n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };//end getNextLineIndent\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/golang\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/golang_highlight_rules.js",
    "content": "define(function(require, exports, module) {\n    var oop = require(\"../lib/oop\");\n    var DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\n    var TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\n    var GolangHighlightRules = function() {\n        var keywords = (\n            \"else|break|case|return|goto|if|const|select|\" +\n            \"continue|struct|default|switch|for|range|\" +\n            \"func|import|package|chan|defer|fallthrough|go|interface|map|range|\" +\n            \"select|type|var\"\n        );\n        var builtinTypes = (\n            \"string|uint8|uint16|uint32|uint64|int8|int16|int32|int64|float32|\" +\n            \"float64|complex64|complex128|byte|rune|uint|int|uintptr|bool|error\"\n        );\n        var builtinFunctions = (\n            \"new|close|cap|copy|panic|panicln|print|println|len|make|delete|real|recover|imag|append\"\n        );\n        var builtinConstants = (\"nil|true|false|iota\");\n\n        var keywordMapper = this.createKeywordMapper({\n            \"keyword\": keywords,\n            \"constant.language\": builtinConstants,\n            \"support.function\": builtinFunctions,\n            \"support.type\": builtinTypes\n        }, \"\");\n        \n        var stringEscapeRe = \"\\\\\\\\(?:[0-7]{3}|x\\\\h{2}|u{4}|U\\\\h{6}|[abfnrtv'\\\"\\\\\\\\])\".replace(/\\\\h/g, \"[a-fA-F\\\\d]\");\n\n        this.$rules = {\n            \"start\" : [\n                {\n                    token : \"comment\",\n                    regex : \"\\\\/\\\\/.*$\"\n                },\n                DocCommentHighlightRules.getStartRule(\"doc-start\"),\n                {\n                    token : \"comment.start\", // multi line comment\n                    regex : \"\\\\/\\\\*\",\n                    next : \"comment\"\n                }, {\n                    token : \"string\", // single line\n                    regex : /\"(?:[^\"\\\\]|\\\\.)*?\"/\n                }, {\n                    token : \"string\", // raw\n                    regex : '`',\n                    next : \"bqstring\"\n                }, {\n                    token : \"constant.numeric\", // rune\n                    regex : \"'(?:[^\\\\'\\uD800-\\uDBFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|\" + stringEscapeRe.replace('\"', '')  + \")'\"\n                }, {\n                    token : \"constant.numeric\", // hex\n                    regex : \"0[xX][0-9a-fA-F]+\\\\b\" \n                }, {\n                    token : \"constant.numeric\", // float\n                    regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n                }, {\n                    token : [\"keyword\", \"text\", \"entity.name.function\"],\n                    regex : \"(func)(\\\\s+)([a-zA-Z_$][a-zA-Z0-9_$]*)\\\\b\"\n                }, {\n                    token : function(val) {\n                        if (val[val.length - 1] == \"(\") {\n                            return [{\n                                type: keywordMapper(val.slice(0, -1)) || \"support.function\",\n                                value: val.slice(0, -1)\n                            }, {\n                                type: \"paren.lparen\",\n                                value: val.slice(-1)\n                            }];\n                        }\n                        \n                        return keywordMapper(val) || \"identifier\";\n                    },\n                    regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\\\\(?\"\n                }, {\n                    token : \"keyword.operator\",\n                    regex : \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=\"\n                }, {\n                    token : \"punctuation.operator\",\n                    regex : \"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"\n                }, {\n                    token : \"paren.lparen\",\n                    regex : \"[[({]\"\n                }, {\n                    token : \"paren.rparen\",\n                    regex : \"[\\\\])}]\"\n                }, {\n                    token : \"text\",\n                    regex : \"\\\\s+\"\n                }\n            ],\n            \"comment\" : [\n                {\n                    token : \"comment.end\",\n                    regex : \"\\\\*\\\\/\",\n                    next : \"start\"\n                }, {\n                    defaultToken : \"comment\"\n                }\n            ],\n            \"bqstring\" : [\n                {\n                    token : \"string\",\n                    regex : '`',\n                    next : \"start\"\n                }, {\n                    defaultToken : \"string\"\n                }\n            ]\n        };\n\n        this.embedRules(DocCommentHighlightRules, \"doc-\",\n            [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n    };\n    oop.inherits(GolangHighlightRules, TextHighlightRules);\n\n    exports.GolangHighlightRules = GolangHighlightRules;\n});"
  },
  {
    "path": "lib/ace/mode/graphqlschema.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar GraphQLSchemaHighlightRules = require(\"./graphqlschema_highlight_rules\").GraphQLSchemaHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = GraphQLSchemaHighlightRules;\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"#\";\n    this.$id = \"ace/mode/graphqlschema\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/graphqlschema_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar GraphQLSchemaHighlightRules = function() {\n\n    var keywords = (\n      \"type|interface|union|enum|schema|input|implements|extends|scalar\"\n    );\n\n    var dataTypes = (\n      \"Int|Float|String|ID|Boolean\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"storage.type\": dataTypes\n    }, \"identifier\");\n\n    this.$rules = {\n      \"start\" : [ {\n        token : \"comment\",\n        regex : \"#.*$\"\n      }, {\n        token : \"paren.lparen\",\n        regex : /[\\[({]/,\n        next  : \"start\"\n      }, {\n        token : \"paren.rparen\",\n        regex : /[\\])}]/\n      }, {\n        token : keywordMapper,\n        regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n      } ]\n    };\n    this.normalizeRules();\n};\n\noop.inherits(GraphQLSchemaHighlightRules, TextHighlightRules);\n\nexports.GraphQLSchemaHighlightRules = GraphQLSchemaHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/groovy.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar GroovyHighlightRules = require(\"./groovy_highlight_rules\").GroovyHighlightRules;\n\nvar Mode = function() {\n    JavaScriptMode.call(this);\n    this.HighlightRules = GroovyHighlightRules;\n};\noop.inherits(Mode, JavaScriptMode);\n\n(function() {\n\n    this.createWorker = function(session) {\n        return null;\n    };\n\n    this.$id = \"ace/mode/groovy\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/groovy_highlight_rules.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar GroovyHighlightRules = function() {\n\n    var keywords = (\n        \"assert|with|abstract|continue|for|new|switch|\" +\n        \"assert|default|goto|package|synchronized|\" +\n        \"boolean|do|if|private|this|\" +\n        \"break|double|implements|protected|throw|\" +\n        \"byte|else|import|public|throws|\" +\n        \"case|enum|instanceof|return|transient|\" +\n        \"catch|extends|int|short|try|\" +\n        \"char|final|interface|static|void|\" +\n        \"class|finally|long|strictfp|volatile|\" +\n        \"def|float|native|super|while\"\n    );\n\n    var buildinConstants = (\n        \"null|Infinity|NaN|undefined\"\n    );\n\n    var langClasses = (\n        \"AbstractMethodError|AssertionError|ClassCircularityError|\"+\n        \"ClassFormatError|Deprecated|EnumConstantNotPresentException|\"+\n        \"ExceptionInInitializerError|IllegalAccessError|\"+\n        \"IllegalThreadStateException|InstantiationError|InternalError|\"+\n        \"NegativeArraySizeException|NoSuchFieldError|Override|Process|\"+\n        \"ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|\"+\n        \"SuppressWarnings|TypeNotPresentException|UnknownError|\"+\n        \"UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|\"+\n        \"InstantiationException|IndexOutOfBoundsException|\"+\n        \"ArrayIndexOutOfBoundsException|CloneNotSupportedException|\"+\n        \"NoSuchFieldException|IllegalArgumentException|NumberFormatException|\"+\n        \"SecurityException|Void|InheritableThreadLocal|IllegalStateException|\"+\n        \"InterruptedException|NoSuchMethodException|IllegalAccessException|\"+\n        \"UnsupportedOperationException|Enum|StrictMath|Package|Compiler|\"+\n        \"Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|\"+\n        \"NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|\"+\n        \"NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|\"+\n        \"Character|Boolean|StackTraceElement|Appendable|StringBuffer|\"+\n        \"Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|\"+\n        \"StackOverflowError|OutOfMemoryError|VirtualMachineError|\"+\n        \"ArrayStoreException|ClassCastException|LinkageError|\"+\n        \"NoClassDefFoundError|ClassNotFoundException|RuntimeException|\"+\n        \"Exception|ThreadDeath|Error|Throwable|System|ClassLoader|\"+\n        \"Cloneable|Class|CharSequence|Comparable|String|Object\"\n    );\n\n    // TODO var importClasses = \"\";\n\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"this\",\n        \"keyword\": keywords,\n        \"support.function\": langClasses,\n        \"constant.language\": buildinConstants\n    }, \"identifier\");\n\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string.regexp\",\n                regex : \"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"\n            }, {\n                token : \"string\",\n                regex : '\"\"\"',\n                next  : \"qqstring\"\n            }, {\n                token : \"string\",\n                regex : \"'''\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false)\\\\b\"\n            }, {\n                token : keywordMapper,\n                // TODO: Unicode escape sequences\n                // TODO: Unicode identifiers\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"\\\\?:|\\\\?\\\\.|\\\\*\\\\.|<=>|=~|==~|\\\\.@|\\\\*\\\\.@|\\\\.&|as|in|is|!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token : \"lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : /\\\\(?:u[0-9A-Fa-f]{4}|.|$)/\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\$[\\w\\d]+/\n            }, {\n                token : \"constant.language.escape\",\n                regex : /\\$\\{[^\"\\}]+\\}?/\n            }, {\n                token : \"string\",\n                regex : '\"{3,5}',\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : '.+?'\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : /\\\\(?:u[0-9A-Fa-f]{4}|.|$)/\n            }, {\n                token : \"string\",\n                regex : \"'{3,5}\",\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : \".+?\"\n            }\n        ]\n    };\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n};\n\noop.inherits(GroovyHighlightRules, TextHighlightRules);\n\nexports.GroovyHighlightRules = GroovyHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/haml.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n *\n * Contributor(s):\n * \n * Garen J. Torikian < gjtorikian AT gmail DOT com >\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar HamlHighlightRules = require(\"./haml_highlight_rules\").HamlHighlightRules;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = HamlHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    \n    this.$id = \"ace/mode/haml\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});"
  },
  {
    "path": "lib/ace/mode/haml_highlight_rules.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar RubyExports = require(\"./ruby_highlight_rules\");\nvar RubyHighlightRules = RubyExports.RubyHighlightRules;\n\nvar HamlHighlightRules = function() {\n\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n    HtmlHighlightRules.call(this);\n\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment.block\", // multiline HTML comment\n                regex: /^\\/$/,\n                next: \"comment\"\n            },\n            {\n                token: \"comment.block\", // multiline HAML comment\n                regex: /^\\-#$/,\n                next: \"comment\"\n            },\n            {\n                token: \"comment.line\", // HTML comment\n                regex: /\\/\\s*.*/\n            },\n            {\n                token: \"comment.line\", // HAML comment\n                regex: /-#\\s*.*/\n            },\n            {\n                token: \"keyword.other.doctype\",\n                regex: \"^!!!\\\\s*(?:[a-zA-Z0-9-_]+)?\"\n            },\n            RubyExports.qString,\n            RubyExports.qqString,\n            RubyExports.tString,\n            {\n                token: \"meta.tag.haml\",\n                regex: /(%[\\w:\\-]+)/\n            },\n            {\n                token: \"keyword.attribute-name.class.haml\",\n                regex: /\\.[\\w-]+/\n            },\n            {\n                token: \"keyword.attribute-name.id.haml\",\n                regex: /#[\\w-]+/,\n                next: \"element_class\"\n            },\n            RubyExports.constantNumericHex,\n            RubyExports.constantNumericFloat,\n            RubyExports.constantOtherSymbol,\n            {\n                token: \"text\",\n                regex: /=|-|~/,\n                next: \"embedded_ruby\"\n            }\n        ],\n        \"element_class\": [\n            {\n                token: \"keyword.attribute-name.class.haml\",\n                regex: /\\.[\\w-]+/\n            },\n            {\n                token: \"punctuation.section\",\n                regex: /\\{/,\n                next: \"element_attributes\"\n            },\n            RubyExports.constantOtherSymbol,\n            {\n                token: \"empty\",\n                regex: \"$|(?!\\\\.|#|\\\\{|\\\\[|=|-|~|\\\\/])\",\n                next: \"start\"\n            }\n        ],\n        \"element_attributes\": [\n            RubyExports.constantOtherSymbol,\n            RubyExports.qString,\n            RubyExports.qqString,\n            RubyExports.tString,\n            RubyExports.constantNumericHex,\n            RubyExports.constantNumericFloat,\n            {\n                token: \"punctuation.section\",\n                regex: /$|\\}/,\n                next: \"start\"\n            }\n        ],\n        \"embedded_ruby\": [\n            RubyExports.constantNumericHex,\n            RubyExports.constantNumericFloat,\n            RubyExports.instanceVariable,\n            RubyExports.qString,\n            RubyExports.qqString,\n            RubyExports.tString,\n            {\n                token : \"support.class\", // class name\n                regex : \"[A-Z][a-zA-Z_\\\\d]+\"\n            },\n            {\n                token : new RubyHighlightRules().getKeywords(),\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            },\n            {\n                token : [\"keyword\", \"text\", \"text\"],\n                regex : \"(?:do|\\\\{)(?: \\\\|[^|]+\\\\|)?$\",\n                next  : \"start\"\n            },\n            {\n                token : [\"text\"],\n                regex : \"^$\",\n                next  : \"start\"\n            },\n            {\n                token : [\"text\"],\n                regex : \"^(?!.*\\\\|\\\\s*$)\",\n                next  : \"start\"\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment.block\",\n                regex: /^$/,\n                next: \"start\"\n            },\n            {\n                token: \"comment.block\", // comment spanning the whole line\n                regex: /\\s+.*/\n            }\n        ]\n\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(HamlHighlightRules, HtmlHighlightRules);\n\nexports.HamlHighlightRules = HamlHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/handlebars.js",
    "content": "/* global define */\n\ndefine(function(require, exports, module) {\n  \"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlMode = require(\"./html\").Mode;\nvar HandlebarsHighlightRules = require(\"./handlebars_highlight_rules\").HandlebarsHighlightRules;\nvar HtmlBehaviour = require(\"./behaviour/html\").HtmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\n\nvar Mode = function() {\n    HtmlMode.call(this);\n    this.HighlightRules = HandlebarsHighlightRules;\n    this.$behaviour = new HtmlBehaviour();\n};\n\noop.inherits(Mode, HtmlMode);\n\n(function() {\n    this.blockComment = {start: \"{{!--\", end: \"--}}\"};\n    this.$id = \"ace/mode/handlebars\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/handlebars_highlight_rules.js",
    "content": "/* global define */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\n\nfunction pop2(currentState, stack) {\n    stack.splice(0, 3);\n    return stack.shift() || \"start\";\n}\nvar HandlebarsHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n    var hbs = {\n        regex : \"(?={{)\",\n        push : \"handlebars\"\n    };\n    for (var key in this.$rules) {\n        this.$rules[key].unshift(hbs);\n    }\n    this.$rules.handlebars = [{\n        token : \"comment.start\",\n        regex : \"{{!--\",\n        push : [{\n            token : \"comment.end\",\n            regex : \"--}}\",\n            next : pop2\n        }, {\n            defaultToken : \"comment\"\n        }]\n    }, {\n        token : \"comment.start\",\n        regex : \"{{!\",\n        push : [{\n            token : \"comment.end\",\n            regex : \"}}\",\n            next : pop2\n        }, {\n            defaultToken : \"comment\"\n        }]\n    }, {\n        token : \"support.function\", // unescaped variable\n        regex : \"{{{\",\n        push : [{\n            token : \"support.function\",\n            regex : \"}}}\",\n            next : pop2\n        }, {\n            token : \"variable.parameter\",\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\"\n        }]\n    }, {\n        token : \"storage.type.start\", // begin section\n        regex : \"{{[#\\\\^/&]?\",\n        push : [{\n            token : \"storage.type.end\",\n            regex : \"}}\",\n            next : pop2\n        }, {\n            token : \"variable.parameter\",\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\"\n        }]\n    }];\n\n    this.normalizeRules();\n};\n\noop.inherits(HandlebarsHighlightRules, HtmlHighlightRules);\n\nexports.HandlebarsHighlightRules = HandlebarsHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/haskell.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n *\n * Contributor(s):\n *\n *\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar HaskellHighlightRules = require(\"./haskell_highlight_rules\").HaskellHighlightRules;\n// TODO: pick appropriate fold mode\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = HaskellHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"--\";\n    this.blockComment = null;\n    this.$id = \"ace/mode/haskell\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});"
  },
  {
    "path": "lib/ace/mode/haskell_cabal.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n *\n * Contributor(s):\n *\n *\n *\n * ***** END LICENSE BLOCK ***** */\n/**\n* Haskell Cabal files mode (https://www.haskell.org/cabal/users-guide/developing-packages.html)\n**/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CabalHighlightRules = require(\"./haskell_cabal_highlight_rules\").CabalHighlightRules;\nvar FoldMode = require(\"./folding/haskell_cabal\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CabalHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"--\";\n    this.blockComment = null;\n    this.$id = \"ace/mode/haskell_cabal\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/haskell_cabal_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n /**\n * Haskell Cabal files highlighter (https://www.haskell.org/cabal/users-guide/developing-packages.html)\n **/\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar CabalHighlightRules = function() {\n\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"^\\\\s*--.*$\"\n            }, {\n                token: [\"keyword\"],\n                regex: /^(\\s*\\w.*?)(:(?:\\s+|$))/\n            }, {\n                token : \"constant.numeric\", // float\n                regex : /[\\d_]+(?:(?:[\\.\\d_]*)?)/\n            }, {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false|TRUE|FALSE|True|False|yes|no)\\\\b\"\n            }, {\n                token : \"markup.heading\",\n                regex : /^(\\w.*)$/\n            }\n        ]};\n\n};\n\noop.inherits(CabalHighlightRules, TextHighlightRules);\n\nexports.CabalHighlightRules = CabalHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/haskell_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/* This file was autogenerated from tm bundles\\haskell.tmbundle\\Syntaxes\\Haskell.plist (uuid: ) */\n/****************************************************************************************\n * IT MIGHT NOT BE PERFECT ...But it's a good start from an existing *.tmlanguage file. *\n * fileTypes                                                                            *\n ****************************************************************************************/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar HaskellHighlightRules = function() {\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = { start:\n       [ { token:\n            [ 'punctuation.definition.entity.haskell',\n              'keyword.operator.function.infix.haskell',\n              'punctuation.definition.entity.haskell' ],\n           regex: '(`)([a-zA-Z_\\']*?)(`)',\n           comment: 'In case this regex seems unusual for an infix operator, note that Haskell allows any ordinary function application (elem 4 [1..10]) to be rewritten as an infix expression (4 `elem` [1..10]).' },\n         { token: 'constant.language.unit.haskell', regex: '\\\\(\\\\)' },\n         { token: 'constant.language.empty-list.haskell',\n           regex: '\\\\[\\\\]' },\n         { token: 'keyword.other.haskell',\n           regex: '\\\\b(module|signature)\\\\b',\n           push:\n            [ { token: 'keyword.other.haskell', regex: '\\\\bwhere\\\\b', next: 'pop' },\n              { include: '#module_name' },\n              { include: '#module_exports' },\n              { token: 'invalid', regex: '[a-z]+' },\n              { defaultToken: 'meta.declaration.module.haskell' } ] },\n         { token: 'keyword.other.haskell',\n           regex: '\\\\bclass\\\\b',\n           push:\n            [ { token: 'keyword.other.haskell',\n                regex: '\\\\bwhere\\\\b',\n                next: 'pop' },\n              { token: 'support.class.prelude.haskell',\n                regex: '\\\\b(?:Monad|Functor|Eq|Ord|Read|Show|Num|(?:Frac|Ra)tional|Enum|Bounded|Real(?:Frac|Float)?|Integral|Floating)\\\\b' },\n              { token: 'entity.other.inherited-class.haskell',\n                regex: '[A-Z][A-Za-z_\\']*' },\n              { token: 'variable.other.generic-type.haskell',\n                regex: '\\\\b[a-z][a-zA-Z0-9_\\']*\\\\b' },\n              { defaultToken: 'meta.declaration.class.haskell' } ] },\n         { token: 'keyword.other.haskell',\n           regex: '\\\\binstance\\\\b',\n           push:\n            [ { token: 'keyword.other.haskell',\n                regex: '\\\\bwhere\\\\b|$',\n                next: 'pop' },\n              { include: '#type_signature' },\n              { defaultToken: 'meta.declaration.instance.haskell' } ] },\n         { token: 'keyword.other.haskell',\n           regex: 'import',\n           push:\n            [ { token: 'meta.import.haskell', regex: '$|;|^', next: 'pop' },\n              { token: 'keyword.other.haskell', regex: 'qualified|as|hiding' },\n              { include: '#module_name' },\n              { include: '#module_exports' },\n              { defaultToken: 'meta.import.haskell' } ] },\n         { token: [ 'keyword.other.haskell', 'meta.deriving.haskell' ],\n           regex: '(deriving)(\\\\s*\\\\()',\n           push:\n            [ { token: 'meta.deriving.haskell', regex: '\\\\)', next: 'pop' },\n              { token: 'entity.other.inherited-class.haskell',\n                regex: '\\\\b[A-Z][a-zA-Z_\\']*' },\n              { defaultToken: 'meta.deriving.haskell' } ] },\n         { token: 'keyword.other.haskell',\n           regex: '\\\\b(?:deriving|where|data|type|case|of|let|in|newtype|default)\\\\b' },\n         { token: 'keyword.operator.haskell', regex: '\\\\binfix[lr]?\\\\b' },\n         { token: 'keyword.control.haskell',\n           regex: '\\\\b(?:do|if|then|else)\\\\b' },\n         { token: 'constant.numeric.float.haskell',\n           regex: '\\\\b(?:[0-9]+\\\\.[0-9]+(?:[eE][+-]?[0-9]+)?|[0-9]+[eE][+-]?[0-9]+)\\\\b',\n           comment: 'Floats are always decimal' },\n         { token: 'constant.numeric.haskell',\n           regex: '\\\\b(?:[0-9]+|0(?:[xX][0-9a-fA-F]+|[oO][0-7]+))\\\\b' },\n         { token:\n            [ 'meta.preprocessor.c',\n              'punctuation.definition.preprocessor.c',\n              'meta.preprocessor.c' ],\n           regex: '^(\\\\s*)(#)(\\\\s*\\\\w+)',\n           comment: 'In addition to Haskell\\'s \"native\" syntax, GHC permits the C preprocessor to be run on a source file.' },\n         { include: '#pragma' },\n         { token: 'punctuation.definition.string.begin.haskell',\n           regex: '\"',\n           push:\n            [ { token: 'punctuation.definition.string.end.haskell',\n                regex: '\"',\n                next: 'pop' },\n              { token: 'constant.character.escape.haskell',\n                regex: '\\\\\\\\(?:NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE|DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS|US|SP|DEL|[abfnrtv\\\\\\\\\\\\\"\\'\\\\&])' },\n              { token: 'constant.character.escape.octal.haskell',\n                regex: '\\\\\\\\o[0-7]+|\\\\\\\\x[0-9A-Fa-f]+|\\\\\\\\[0-9]+' },\n              { token: 'constant.character.escape.control.haskell',\n                regex: '\\\\^[A-Z@\\\\[\\\\]\\\\\\\\\\\\^_]' },\n              { defaultToken: 'string.quoted.double.haskell' } ] },\n         { token:\n            [ 'punctuation.definition.string.begin.haskell',\n              'string.quoted.single.haskell',\n              'constant.character.escape.haskell',\n              'constant.character.escape.octal.haskell',\n              'constant.character.escape.hexadecimal.haskell',\n              'constant.character.escape.control.haskell',\n              'punctuation.definition.string.end.haskell' ],\n           regex: '(\\')(?:([\\\\ -\\\\[\\\\]-~])|(\\\\\\\\(?:NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE|DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS|US|SP|DEL|[abfnrtv\\\\\\\\\\\\\"\\'\\\\&]))|(\\\\\\\\o[0-7]+)|(\\\\\\\\x[0-9A-Fa-f]+)|(\\\\^[A-Z@\\\\[\\\\]\\\\\\\\\\\\^_]))(\\')' },\n         { token:\n            [ 'meta.function.type-declaration.haskell',\n              'entity.name.function.haskell',\n              'meta.function.type-declaration.haskell',\n              'keyword.other.double-colon.haskell' ],\n           regex: '^(\\\\s*)([a-z_][a-zA-Z0-9_\\']*|\\\\([|!%$+\\\\-.,=</>]+\\\\))(\\\\s*)(::)',\n           push:\n            [ { token: 'meta.function.type-declaration.haskell',\n                regex: '$',\n                next: 'pop' },\n              { include: '#type_signature' },\n              { defaultToken: 'meta.function.type-declaration.haskell' } ] },\n         { token: 'support.constant.haskell',\n           regex: '\\\\b(?:Just|Nothing|Left|Right|True|False|LT|EQ|GT|\\\\(\\\\)|\\\\[\\\\])\\\\b' },\n         { token: 'constant.other.haskell', regex: '\\\\b[A-Z]\\\\w*\\\\b' },\n         { include: '#comments' },\n         { token: 'support.function.prelude.haskell',\n           regex: '\\\\b(?:abs|acos|acosh|all|and|any|appendFile|applyM|asTypeOf|asin|asinh|atan|atan2|atanh|break|catch|ceiling|compare|concat|concatMap|const|cos|cosh|curry|cycle|decodeFloat|div|divMod|drop|dropWhile|elem|encodeFloat|enumFrom|enumFromThen|enumFromThenTo|enumFromTo|error|even|exp|exponent|fail|filter|flip|floatDigits|floatRadix|floatRange|floor|fmap|foldl|foldl1|foldr|foldr1|fromEnum|fromInteger|fromIntegral|fromRational|fst|gcd|getChar|getContents|getLine|head|id|init|interact|ioError|isDenormalized|isIEEE|isInfinite|isNaN|isNegativeZero|iterate|last|lcm|length|lex|lines|log|logBase|lookup|map|mapM|mapM_|max|maxBound|maximum|maybe|min|minBound|minimum|mod|negate|not|notElem|null|odd|or|otherwise|pi|pred|print|product|properFraction|putChar|putStr|putStrLn|quot|quotRem|read|readFile|readIO|readList|readLn|readParen|reads|readsPrec|realToFrac|recip|rem|repeat|replicate|return|reverse|round|scaleFloat|scanl|scanl1|scanr|scanr1|seq|sequence|sequence_|show|showChar|showList|showParen|showString|shows|showsPrec|significand|signum|sin|sinh|snd|span|splitAt|sqrt|subtract|succ|sum|tail|take|takeWhile|tan|tanh|toEnum|toInteger|toRational|truncate|uncurry|undefined|unlines|until|unwords|unzip|unzip3|userError|words|writeFile|zip|zip3|zipWith|zipWith3)\\\\b' },\n         { include: '#infix_op' },\n         { token: 'keyword.operator.haskell',\n           regex: '[|!%$?~+:\\\\-.=</>\\\\\\\\]+',\n           comment: 'In case this regex seems overly general, note that Haskell permits the definition of new operators which can be nearly any string of punctuation characters, such as $%^&*.' },\n         { token: 'punctuation.separator.comma.haskell', regex: ',' } ],\n      '#block_comment':\n       [ { token: 'punctuation.definition.comment.haskell',\n           regex: '\\\\{-(?!#)',\n           push:\n            [ { include: '#block_comment' },\n              { token: 'punctuation.definition.comment.haskell',\n                regex: '-\\\\}',\n                next: 'pop' },\n              { defaultToken: 'comment.block.haskell' } ] } ],\n      '#comments':\n       [ { token: 'punctuation.definition.comment.haskell',\n           regex: '--.*',\n           push_:\n            [ { token: 'comment.line.double-dash.haskell',\n                regex: '$',\n                next: 'pop' },\n              { defaultToken: 'comment.line.double-dash.haskell' } ] },\n         { include: '#block_comment' } ],\n      '#infix_op':\n       [ { token: 'entity.name.function.infix.haskell',\n           regex: '\\\\([|!%$+:\\\\-.=</>]+\\\\)|\\\\(,+\\\\)' } ],\n      '#module_exports':\n       [ { token: 'meta.declaration.exports.haskell',\n           regex: '\\\\(',\n           push:\n            [ { token: 'meta.declaration.exports.haskell.end',\n                regex: '\\\\)',\n                next: 'pop' },\n              { token: 'entity.name.function.haskell',\n                regex: '\\\\b[a-z][a-zA-Z_\\']*' },\n              { token: 'storage.type.haskell', regex: '\\\\b[A-Z][A-Za-z_\\']*' },\n              { token: 'punctuation.separator.comma.haskell', regex: ',' },\n              { include: '#infix_op' },\n              { token: 'meta.other.unknown.haskell',\n                regex: '\\\\(.*?\\\\)',\n                comment: 'So named because I don\\'t know what to call this.' },\n              { defaultToken: 'meta.declaration.exports.haskell.end' } ] } ],\n      '#module_name':\n       [ { token: 'support.other.module.haskell',\n           regex: '[A-Z][A-Za-z._\\']*' } ],\n      '#pragma':\n       [ { token: 'meta.preprocessor.haskell',\n           regex: '\\\\{-#',\n           push:\n            [ { token: 'meta.preprocessor.haskell',\n                regex: '#-\\\\}',\n                next: 'pop' },\n              { token: 'keyword.other.preprocessor.haskell',\n                regex: '\\\\b(?:LANGUAGE|UNPACK|INLINE)\\\\b' },\n              { defaultToken: 'meta.preprocessor.haskell' } ] } ],\n      '#type_signature':\n       [ { token:\n            [ 'meta.class-constraint.haskell',\n              'entity.other.inherited-class.haskell',\n              'meta.class-constraint.haskell',\n              'variable.other.generic-type.haskell',\n              'meta.class-constraint.haskell',\n              'keyword.other.big-arrow.haskell' ],\n           regex: '(\\\\(\\\\s*)([A-Z][A-Za-z]*)(\\\\s+)([a-z][A-Za-z_\\']*)(\\\\)\\\\s*)(=>)' },\n         { include: '#pragma' },\n         { token: 'keyword.other.arrow.haskell', regex: '->' },\n         { token: 'keyword.other.big-arrow.haskell', regex: '=>' },\n         { token: 'support.type.prelude.haskell',\n           regex: '\\\\b(?:Int(?:eger)?|Maybe|Either|Bool|Float|Double|Char|String|Ordering|ShowS|ReadS|FilePath|IO(?:Error)?)\\\\b' },\n         { token: 'variable.other.generic-type.haskell',\n           regex: '\\\\b[a-z][a-zA-Z0-9_\\']*\\\\b' },\n         { token: 'storage.type.haskell',\n           regex: '\\\\b[A-Z][a-zA-Z0-9_\\']*\\\\b' },\n         { token: 'support.constant.unit.haskell', regex: '\\\\(\\\\)' },\n         { include: '#comments' } ] };\n\n    this.normalizeRules();\n};\n\nHaskellHighlightRules.metaData = { fileTypes: [ 'hs' ],\n      keyEquivalent: '^~H',\n      name: 'Haskell',\n      scopeName: 'source.haskell' };\n\n\noop.inherits(HaskellHighlightRules, TextHighlightRules);\n\nexports.HaskellHighlightRules = HaskellHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/haxe.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar HaxeHighlightRules = require(\"./haxe_highlight_rules\").HaxeHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = HaxeHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    \n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/haxe\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/haxe_highlight_rules.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\n\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar HaxeHighlightRules = function() {\n\n    var keywords = (\n        \"break|case|cast|catch|class|continue|default|else|enum|extends|for|function|if|implements|import|in|inline|interface|new|override|package|private|public|return|static|super|switch|this|throw|trace|try|typedef|untyped|var|while|Array|Void|Bool|Int|UInt|Float|Dynamic|String|List|Hash|IntHash|Error|Unknown|Type|Std\"\n    );\n\n    var buildinConstants = (\n        \"null|true|false\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"this\",\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants\n    }, \"identifier\");\n\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string.regexp\",\n                regex : \"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false)\\\\b\"\n            }, {\n                token : keywordMapper,\n                // TODO: Unicode escape sequences\n                // TODO: Unicode identifiers\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : \"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({<]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}>]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ]\n    };\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n};\n\noop.inherits(HaxeHighlightRules, TextHighlightRules);\n\nexports.HaxeHighlightRules = HaxeHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/hjson.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar HjsonHighlightRules = require(\"./hjson_highlight_rules\").HjsonHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = HjsonHighlightRules;\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$id = \"ace/mode/hjson\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});"
  },
  {
    "path": "lib/ace/mode/hjson_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/* This file was autogenerated from Hjson.tmLanguage (uuid: ) */\n/****************************************************************************************\n * IT MIGHT NOT BE PERFECT ...But it's a good start from an existing *.tmlanguage file. *\n * fileTypes                                                                            *\n ****************************************************************************************/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar HjsonHighlightRules = function() {\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = {\n        start: [{\n            include: \"#comments\"\n        }, {\n            include: \"#rootObject\"\n        }, {\n            include: \"#value\"\n        }],\n        \"#array\": [{\n            token: \"paren.lparen\",\n            regex: /\\[/,\n            push: [{\n                token: \"paren.rparen\",\n                regex: /\\]/,\n                next: \"pop\"\n            }, {\n                include: \"#value\"\n            }, {\n                include: \"#comments\"\n            }, {\n                token: \"text\",\n                regex: /,|$/\n            }, {\n                token: \"invalid.illegal\",\n                regex: /[^\\s\\]]/\n            }, {\n                defaultToken: \"array\"\n            }]\n        }],\n        \"#comments\": [{\n            token: [\n                \"comment.punctuation\",\n                \"comment.line\"\n            ],\n            regex: /(#)(.*$)/\n        }, {\n            token: \"comment.punctuation\",\n            regex: /\\/\\*/,\n            push: [{\n                token: \"comment.punctuation\",\n                regex: /\\*\\//,\n                next: \"pop\"\n            }, {\n                defaultToken: \"comment.block\"\n            }]\n        }, {\n            token: [\n                \"comment.punctuation\",\n                \"comment.line\"\n            ],\n            regex: /(\\/\\/)(.*$)/\n        }],\n        \"#constant\": [{\n            token: \"constant\",\n            regex: /\\b(?:true|false|null)\\b/\n        }],\n        \"#keyname\": [{\n            token: \"keyword\",\n            regex: /(?:[^,\\{\\[\\}\\]\\s]+|\"(?:[^\"\\\\]|\\\\.)*\")\\s*(?=:)/\n        }],\n        \"#mstring\": [{\n            token: \"string\",\n            regex: /'''/,\n            push: [{\n                token: \"string\",\n                regex: /'''/,\n                next: \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        \"#number\": [{\n            token: \"constant.numeric\",\n            regex: /-?(?:0|[1-9]\\d*)(?:(?:\\.\\d+)?(?:[eE][+-]?\\d+)?)?/,\n            comment: \"handles integer and decimal numbers\"\n        }],\n        \"#object\": [{\n            token: \"paren.lparen\",\n            regex: /\\{/,\n            push: [{\n                token: \"paren.rparen\",\n                regex: /\\}/,\n                next: \"pop\"\n            }, {\n                include: \"#keyname\"\n            }, {\n                include: \"#value\"\n            }, {\n                token: \"text\",\n                regex: /:/\n            }, {\n                token: \"text\",\n                regex: /,/\n            }, {\n                defaultToken: \"paren\"\n            }]\n        }],\n        \"#rootObject\": [{\n            token: \"paren\",\n            regex: /(?=\\s*(?:[^,\\{\\[\\}\\]\\s]+|\"(?:[^\"\\\\]|\\\\.)*\")\\s*:)/,\n            push: [{\n                token: \"paren.rparen\",\n                regex: /---none---/,\n                next: \"pop\"\n            }, {\n                include: \"#keyname\"\n            }, {\n                include: \"#value\"\n            }, {\n                token: \"text\",\n                regex: /:/\n            }, {\n                token: \"text\",\n                regex: /,/\n            }, {\n                defaultToken: \"paren\"\n            }]\n        }],\n        \"#string\": [{\n            token: \"string\",\n            regex: /\"/,\n            push: [{\n                token: \"string\",\n                regex: /\"/,\n                next: \"pop\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/\n            }, {\n                token: \"invalid.illegal\",\n                regex: /\\\\./\n            }, {\n                defaultToken: \"string\"\n            }]\n        }],\n        \"#ustring\": [{\n            token: \"string\",\n            regex: /\\b[^:,0-9\\-\\{\\[\\}\\]\\s].*$/\n        }],\n        \"#value\": [{\n            include: \"#constant\"\n        }, {\n            include: \"#number\"\n        }, {\n            include: \"#string\"\n        }, {\n            include: \"#array\"\n        }, {\n            include: \"#object\"\n        }, {\n            include: \"#comments\"\n        }, {\n            include: \"#mstring\"\n        }, {\n            include: \"#ustring\"\n        }]\n    };\n\n    this.normalizeRules();\n};\n\nHjsonHighlightRules.metaData = {\n    fileTypes: [\"hjson\"],\n    foldingStartMarker: \"(?x:     # turn on extended mode\\n              ^    # a line beginning with\\n              \\\\s*    # some optional space\\n              [{\\\\[]  # the start of an object or array\\n              (?!    # but not followed by\\n              .*   # whatever\\n              [}\\\\]]  # and the close of an object or array\\n              ,?   # an optional comma\\n              \\\\s*  # some optional space\\n              $    # at the end of the line\\n              )\\n              |    # ...or...\\n              [{\\\\[]  # the start of an object or array\\n              \\\\s*    # some optional space\\n              $    # at the end of the line\\n            )\",\n    foldingStopMarker: \"(?x:   # turn on extended mode\\n             ^    # a line beginning with\\n             \\\\s*  # some optional space\\n             [}\\\\]]  # and the close of an object or array\\n             )\",\n    keyEquivalent: \"^~J\",\n    name: \"Hjson\",\n    scopeName: \"source.hjson\"\n};\n\n\noop.inherits(HjsonHighlightRules, TextHighlightRules);\n\nexports.HjsonHighlightRules = HjsonHighlightRules;\n});"
  },
  {
    "path": "lib/ace/mode/html/saxparser.js",
    "content": "define(function(require, exports, module) {\nmodule.exports = (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error(\"Cannot find module '\"+o+\"'\")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({\n1:[function(_dereq_,module,exports){\nfunction isScopeMarker(node) {\r\n\tif (node.namespaceURI === \"http://www.w3.org/1999/xhtml\") {\r\n\t\treturn node.localName === \"applet\"\r\n\t\t\t|| node.localName === \"caption\"\r\n\t\t\t|| node.localName === \"marquee\"\r\n\t\t\t|| node.localName === \"object\"\r\n\t\t\t|| node.localName === \"table\"\r\n\t\t\t|| node.localName === \"td\"\r\n\t\t\t|| node.localName === \"th\";\r\n\t}\r\n\tif (node.namespaceURI === \"http://www.w3.org/1998/Math/MathML\") {\r\n\t\treturn node.localName === \"mi\"\r\n\t\t\t|| node.localName === \"mo\"\r\n\t\t\t|| node.localName === \"mn\"\r\n\t\t\t|| node.localName === \"ms\"\r\n\t\t\t|| node.localName === \"mtext\"\r\n\t\t\t|| node.localName === \"annotation-xml\";\r\n\t}\r\n\tif (node.namespaceURI === \"http://www.w3.org/2000/svg\") {\r\n\t\treturn node.localName === \"foreignObject\"\r\n\t\t\t|| node.localName === \"desc\"\r\n\t\t\t|| node.localName === \"title\";\r\n\t}\r\n}\r\n\r\nfunction isListItemScopeMarker(node) {\r\n\treturn isScopeMarker(node)\r\n\t\t|| (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'ol')\r\n\t\t|| (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'ul');\r\n}\r\n\r\nfunction isTableScopeMarker(node) {\r\n\treturn (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'table')\r\n\t\t|| (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'html');\r\n}\r\n\r\nfunction isTableBodyScopeMarker(node) {\r\n\treturn (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'tbody')\r\n\t\t|| (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'tfoot')\r\n\t\t|| (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'thead')\r\n\t\t|| (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'html');\r\n}\r\n\r\nfunction isTableRowScopeMarker(node) {\r\n\treturn (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'tr')\r\n\t\t|| (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'html');\r\n}\r\n\r\nfunction isButtonScopeMarker(node) {\r\n\treturn isScopeMarker(node)\r\n\t\t|| (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'button');\r\n}\r\n\r\nfunction isSelectScopeMarker(node) {\r\n\treturn !(node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'optgroup')\r\n\t\t&& !(node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'option');\r\n}\r\n\r\n/**\r\n * Represents a stack of open elements\r\n * @constructor\r\n */\r\nfunction ElementStack() {\r\n\tthis.elements = [];\r\n\tthis.rootNode = null;\r\n\tthis.headElement = null;\r\n\tthis.bodyElement = null;\r\n}\r\n\r\n/**\r\n *\r\n * @param {String} localName\r\n * @param {Function} isMarker\r\n * @return {Boolean}\r\n * @private\r\n */\r\nElementStack.prototype._inScope = function(localName, isMarker) {\r\n\tfor (var i = this.elements.length - 1; i >= 0; i--) {\r\n\t\tvar node = this.elements[i];\r\n\t\tif (node.localName === localName)\r\n\t\t\treturn true;\r\n\t\tif (isMarker(node))\r\n\t\t\treturn false;\r\n\t}\r\n};\r\n\r\n/**\r\n * Pushes the item on the stack top\r\n * @param {StackItem} item\r\n */\r\nElementStack.prototype.push = function(item) {\r\n\tthis.elements.push(item);\r\n};\r\n\r\n/**\r\n * Pushes the item on the stack top\r\n * @param {StackItem} item HTML element stack item\r\n */\r\nElementStack.prototype.pushHtmlElement = function(item) {\r\n\tthis.rootNode = item.node;\r\n\tthis.push(item);\r\n};\r\n\r\n/**\r\n * Pushes the item on the stack top\r\n * @param {StackItem} item HEAD element stack item\r\n */\r\nElementStack.prototype.pushHeadElement = function(item) {\r\n\tthis.headElement = item.node;\r\n\tthis.push(item);\r\n};\r\n\r\n/**\r\n * Pushes the item on the stack top\r\n * @param {StackItem} item BODY element stack item\r\n */\r\nElementStack.prototype.pushBodyElement = function(item) {\r\n\tthis.bodyElement = item.node;\r\n\tthis.push(item);\r\n};\r\n\r\n/**\r\n * Pops the topmost item\r\n * @return {StackItem}\r\n */\r\nElementStack.prototype.pop = function() {\r\n\treturn this.elements.pop();\r\n};\r\n\r\n/**\r\n * Removes the item from the element stack\r\n * @param {StackItem} item The item to remove\r\n */\r\nElementStack.prototype.remove = function(item) {\r\n\tthis.elements.splice(this.elements.indexOf(item), 1);\r\n};\r\n\r\n/**\r\n * Pops until an element with a given localName is popped\r\n * @param {String} localName\r\n */\r\nElementStack.prototype.popUntilPopped = function(localName) {\r\n\tvar element;\r\n\tdo {\r\n\t\telement = this.pop();\r\n\t} while (element.localName != localName);\r\n};\r\n\r\nElementStack.prototype.popUntilTableScopeMarker = function() {\r\n\twhile (!isTableScopeMarker(this.top))\r\n\t\tthis.pop();\r\n};\r\n\r\nElementStack.prototype.popUntilTableBodyScopeMarker = function() {\r\n\twhile (!isTableBodyScopeMarker(this.top))\r\n\t\tthis.pop();\r\n};\r\n\r\nElementStack.prototype.popUntilTableRowScopeMarker = function() {\r\n\twhile (!isTableRowScopeMarker(this.top))\r\n\t\tthis.pop();\r\n};\r\n\r\n/**\r\n *\r\n * @param {Number} index\r\n * @return {StackItem}\r\n */\r\nElementStack.prototype.item = function(index) {\r\n\treturn this.elements[index];\r\n};\r\n\r\n/**\r\n *\r\n * @param {StackItem} element\r\n * @return {Boolean}\r\n */\r\nElementStack.prototype.contains = function(element) {\r\n\treturn this.elements.indexOf(element) !== -1;\r\n};\r\n\r\n/**\r\n *\r\n * @param {String} localName\r\n * @return {Boolean}\r\n */\r\nElementStack.prototype.inScope = function(localName) {\r\n\treturn this._inScope(localName, isScopeMarker);\r\n};\r\n\r\n/**\r\n *\r\n * @param {String} localName\r\n * @return {Boolean}\r\n */\r\nElementStack.prototype.inListItemScope = function(localName) {\r\n\treturn this._inScope(localName, isListItemScopeMarker);\r\n};\r\n\r\n/**\r\n *\r\n * @param {String} localName\r\n * @return {Boolean}\r\n */\r\nElementStack.prototype.inTableScope = function(localName) {\r\n\treturn this._inScope(localName, isTableScopeMarker);\r\n};\r\n\r\n/**\r\n *\r\n * @param {String} localName\r\n * @return {Boolean}\r\n */\r\nElementStack.prototype.inButtonScope = function(localName) {\r\n\treturn this._inScope(localName, isButtonScopeMarker);\r\n};\r\n\r\n/**\r\n *\r\n * @param {String} localName\r\n * @return {Boolean}\r\n */\r\nElementStack.prototype.inSelectScope = function(localName) {\r\n\treturn this._inScope(localName, isSelectScopeMarker);\r\n};\r\n\r\n/**\r\n *\r\n * @return {Boolean}\r\n */\r\nElementStack.prototype.hasNumberedHeaderElementInScope = function() {\r\n\tfor (var i = this.elements.length - 1; i >= 0; i--) {\r\n\t\tvar node = this.elements[i];\r\n\t\tif (node.isNumberedHeader())\r\n\t\t\treturn true;\r\n\t\tif (isScopeMarker(node))\r\n\t\t\treturn false;\r\n\t}\r\n};\r\n\r\n/**\r\n *\r\n * @param {Object} element\r\n * @return {StackItem}\r\n */\r\nElementStack.prototype.furthestBlockForFormattingElement = function(element) {\r\n\tvar furthestBlock = null;\r\n\tfor (var i = this.elements.length - 1; i >= 0; i--) {\r\n\t\tvar node = this.elements[i];\r\n\t\tif (node.node === element)\r\n\t\t\tbreak;\r\n\t\tif (node.isSpecial())\r\n\t\t\tfurthestBlock = node;\r\n\t}\r\n    return furthestBlock;\r\n};\r\n\r\n/**\r\n *\r\n * @param {String} localName\r\n * @return {Number}\r\n */\r\nElementStack.prototype.findIndex = function(localName) {\r\n\tfor (var i = this.elements.length - 1; i >= 0; i--) {\r\n\t\tif (this.elements[i].localName == localName)\r\n\t\t\treturn i;\r\n\t}\r\n    return -1;\r\n};\r\n\r\nElementStack.prototype.remove_openElements_until = function(callback) {\r\n\tvar finished = false;\r\n\tvar element;\r\n\twhile (!finished) {\r\n\t\telement = this.elements.pop();\r\n\t\tfinished = callback(element);\r\n\t}\r\n\treturn element;\r\n};\r\n\r\nObject.defineProperty(ElementStack.prototype, 'top', {\r\n\tget: function() {\r\n\t\treturn this.elements[this.elements.length - 1];\r\n\t}\r\n});\r\n\r\nObject.defineProperty(ElementStack.prototype, 'length', {\r\n\tget: function() {\r\n\t\treturn this.elements.length;\r\n\t}\r\n});\r\n\r\nexports.ElementStack = ElementStack;\r\n\n},\n{}],\n2:[function(_dereq_,module,exports){\nvar entities  = _dereq_('html5-entities');\r\nvar InputStream = _dereq_('./InputStream').InputStream;\r\n\r\nvar namedEntityPrefixes = {};\r\nObject.keys(entities).forEach(function (entityKey) {\r\n\tfor (var i = 0; i < entityKey.length; i++) {\r\n\t\tnamedEntityPrefixes[entityKey.substring(0, i + 1)] = true;\r\n\t}\r\n});\r\n\r\nfunction isAlphaNumeric(c) {\r\n\treturn (c >= '0' && c <= '9') || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');\r\n}\r\n\r\nfunction isHexDigit(c) {\r\n\treturn (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F');\r\n}\r\n\r\nfunction isDecimalDigit(c) {\r\n\treturn (c >= '0' && c <= '9');\r\n}\r\n\r\nvar EntityParser = {};\r\n\r\nEntityParser.consumeEntity = function(buffer, tokenizer, additionalAllowedCharacter) {\r\n\tvar decodedCharacter = '';\r\n\tvar consumedCharacters = '';\r\n\tvar ch = buffer.char();\r\n\tif (ch === InputStream.EOF)\r\n\t\treturn false;\r\n\tconsumedCharacters += ch;\r\n\tif (ch == '\\t' || ch == '\\n' || ch == '\\v' || ch == ' ' || ch == '<' || ch == '&') {\r\n\t\tbuffer.unget(consumedCharacters);\r\n\t\treturn false;\r\n\t}\r\n\tif (additionalAllowedCharacter === ch) {\r\n\t\tbuffer.unget(consumedCharacters);\r\n\t\treturn false;\r\n\t}\r\n\tif (ch == '#') {\r\n\t\tch = buffer.shift(1);\r\n\t\tif (ch === InputStream.EOF) {\r\n\t\t\ttokenizer._parseError(\"expected-numeric-entity-but-got-eof\");\r\n\t\t\tbuffer.unget(consumedCharacters);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tconsumedCharacters += ch;\r\n\t\tvar radix = 10;\r\n\t\tvar isDigit = isDecimalDigit;\r\n\t\tif (ch == 'x' || ch == 'X') {\r\n\t\t\tradix = 16;\r\n\t\t\tisDigit = isHexDigit;\r\n\t\t\tch = buffer.shift(1);\r\n\t\t\tif (ch === InputStream.EOF) {\r\n\t\t\t\ttokenizer._parseError(\"expected-numeric-entity-but-got-eof\");\r\n\t\t\t\tbuffer.unget(consumedCharacters);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\tconsumedCharacters += ch;\r\n\t\t}\r\n\t\tif (isDigit(ch)) {\r\n\t\t\tvar code = '';\r\n\t\t\twhile (ch !== InputStream.EOF && isDigit(ch)) {\r\n\t\t\t\tcode += ch;\r\n\t\t\t\tch = buffer.char();\r\n\t\t\t}\r\n\t\t\tcode = parseInt(code, radix);\r\n\t\t\tvar replacement = this.replaceEntityNumbers(code);\r\n\t\t\tif (replacement) {\r\n\t\t\t\ttokenizer._parseError(\"invalid-numeric-entity-replaced\");\r\n\t\t\t\tcode = replacement;\r\n\t\t\t}\r\n\t\t\tif (code > 0xFFFF && code <= 0x10FFFF) {\r\n\t\t        // we substract 0x10000 from cp to get a 20-bits number\r\n\t\t        // in the range 0..0xFFFF\r\n\t\t        code -= 0x10000;\r\n\t\t        // we add 0xD800 to the number formed by the first 10 bits\r\n\t\t        // to give the first byte\r\n\t\t        var first = ((0xffc00 & code) >> 10) + 0xD800;\r\n\t\t        // we add 0xDC00 to the number formed by the low 10 bits\r\n\t\t        // to give the second byte\r\n\t\t        var second = (0x3ff & code) + 0xDC00;\r\n\t\t\t\tdecodedCharacter = String.fromCharCode(first, second);\r\n\t\t\t} else\r\n\t\t\t\tdecodedCharacter = String.fromCharCode(code);\r\n\t\t\tif (ch !== ';') {\r\n\t\t\t\ttokenizer._parseError(\"numeric-entity-without-semicolon\");\r\n\t\t\t\tbuffer.unget(ch);\r\n\t\t\t}\r\n\t\t\treturn decodedCharacter;\r\n\t\t}\r\n\t\tbuffer.unget(consumedCharacters);\r\n\t\ttokenizer._parseError(\"expected-numeric-entity\");\r\n\t\treturn false;\r\n\t}\r\n\tif ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) {\r\n\t\tvar mostRecentMatch = '';\r\n\t\twhile (namedEntityPrefixes[consumedCharacters]) {\r\n\t\t\tif (entities[consumedCharacters]) {\r\n\t\t\t\tmostRecentMatch = consumedCharacters;\r\n\t\t\t}\r\n\t\t\tif (ch == ';')\r\n\t\t\t\tbreak;\r\n\t\t\tch = buffer.char();\r\n\t\t\tif (ch === InputStream.EOF)\r\n\t\t\t\tbreak;\r\n\t\t\tconsumedCharacters += ch;\r\n\t\t}\r\n\t\tif (!mostRecentMatch) {\r\n\t\t\ttokenizer._parseError(\"expected-named-entity\");\r\n\t\t\tbuffer.unget(consumedCharacters);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tdecodedCharacter = entities[mostRecentMatch];\r\n\t\tif (ch === ';' || !additionalAllowedCharacter || !(isAlphaNumeric(ch) || ch === '=')) {\r\n\t\t\tif (consumedCharacters.length > mostRecentMatch.length) {\r\n\t\t\t\tbuffer.unget(consumedCharacters.substring(mostRecentMatch.length));\r\n\t\t\t}\r\n\t\t\tif (ch !== ';') {\r\n\t\t\t\ttokenizer._parseError(\"named-entity-without-semicolon\");\r\n\t\t\t}\r\n\t\t\treturn decodedCharacter;\r\n\t\t}\r\n\t\tbuffer.unget(consumedCharacters);\r\n\t\treturn false;\r\n\t}\r\n};\r\n\r\nEntityParser.replaceEntityNumbers = function(c) {\r\n\tswitch(c) {\r\n\t\tcase 0x00: return 0xFFFD; // REPLACEMENT CHARACTER\r\n\t\tcase 0x13: return 0x0010; // Carriage return\r\n\t\tcase 0x80: return 0x20AC; // EURO SIGN\r\n\t\tcase 0x81: return 0x0081; // <control>\r\n\t\tcase 0x82: return 0x201A; // SINGLE LOW-9 QUOTATION MARK\r\n\t\tcase 0x83: return 0x0192; // LATIN SMALL LETTER F WITH HOOK\r\n\t\tcase 0x84: return 0x201E; // DOUBLE LOW-9 QUOTATION MARK\r\n\t\tcase 0x85: return 0x2026; // HORIZONTAL ELLIPSIS\r\n\t\tcase 0x86: return 0x2020; // DAGGER\r\n\t\tcase 0x87: return 0x2021; // DOUBLE DAGGER\r\n\t\tcase 0x88: return 0x02C6; // MODIFIER LETTER CIRCUMFLEX ACCENT\r\n\t\tcase 0x89: return 0x2030; // PER MILLE SIGN\r\n\t\tcase 0x8A: return 0x0160; // LATIN CAPITAL LETTER S WITH CARON\r\n\t\tcase 0x8B: return 0x2039; // SINGLE LEFT-POINTING ANGLE QUOTATION MARK\r\n\t\tcase 0x8C: return 0x0152; // LATIN CAPITAL LIGATURE OE\r\n\t\tcase 0x8D: return 0x008D; // <control>\r\n\t\tcase 0x8E: return 0x017D; // LATIN CAPITAL LETTER Z WITH CARON\r\n\t\tcase 0x8F: return 0x008F; // <control>\r\n\t\tcase 0x90: return 0x0090; // <control>\r\n\t\tcase 0x91: return 0x2018; // LEFT SINGLE QUOTATION MARK\r\n\t\tcase 0x92: return 0x2019; // RIGHT SINGLE QUOTATION MARK\r\n\t\tcase 0x93: return 0x201C; // LEFT DOUBLE QUOTATION MARK\r\n\t\tcase 0x94: return 0x201D; // RIGHT DOUBLE QUOTATION MARK\r\n\t\tcase 0x95: return 0x2022; // BULLET\r\n\t\tcase 0x96: return 0x2013; // EN DASH\r\n\t\tcase 0x97: return 0x2014; // EM DASH\r\n\t\tcase 0x98: return 0x02DC; // SMALL TILDE\r\n\t\tcase 0x99: return 0x2122; // TRADE MARK SIGN\r\n\t\tcase 0x9A: return 0x0161; // LATIN SMALL LETTER S WITH CARON\r\n\t\tcase 0x9B: return 0x203A; // SINGLE RIGHT-POINTING ANGLE QUOTATION MARK\r\n\t\tcase 0x9C: return 0x0153; // LATIN SMALL LIGATURE OE\r\n\t\tcase 0x9D: return 0x009D; // <control>\r\n\t\tcase 0x9E: return 0x017E; // LATIN SMALL LETTER Z WITH CARON\r\n\t\tcase 0x9F: return 0x0178; // LATIN CAPITAL LETTER Y WITH DIAERESIS\r\n\t\tdefault:\r\n\t\t\tif ((c >= 0xD800 && c <= 0xDFFF) || c > 0x10FFFF) {\r\n\t\t\t\treturn 0xFFFD;\r\n\t\t\t} else if ((c >= 0x0001 && c <= 0x0008) || (c >= 0x000E && c <= 0x001F) ||\r\n\t\t\t\t(c >= 0x007F && c <= 0x009F) || (c >= 0xFDD0 && c <= 0xFDEF) ||\r\n\t\t\t\tc == 0x000B || c == 0xFFFE || c == 0x1FFFE || c == 0x2FFFFE ||\r\n\t\t\t\tc == 0x2FFFF || c == 0x3FFFE || c == 0x3FFFF || c == 0x4FFFE ||\r\n\t\t\t\tc == 0x4FFFF || c == 0x5FFFE || c == 0x5FFFF || c == 0x6FFFE ||\r\n\t\t\t\tc == 0x6FFFF || c == 0x7FFFE || c == 0x7FFFF || c == 0x8FFFE ||\r\n\t\t\t\tc == 0x8FFFF || c == 0x9FFFE || c == 0x9FFFF || c == 0xAFFFE ||\r\n\t\t\t\tc == 0xAFFFF || c == 0xBFFFE || c == 0xBFFFF || c == 0xCFFFE ||\r\n\t\t\t\tc == 0xCFFFF || c == 0xDFFFE || c == 0xDFFFF || c == 0xEFFFE ||\r\n\t\t\t\tc == 0xEFFFF || c == 0xFFFFE || c == 0xFFFFF || c == 0x10FFFE ||\r\n\t\t\t\tc == 0x10FFFF) {\r\n\t\t\t\treturn c;\r\n\t\t\t}\r\n\t}\r\n};\r\n\r\nexports.EntityParser = EntityParser;\r\n\n},\n{\"./InputStream\":3,\"html5-entities\":12}],\n3:[function(_dereq_,module,exports){\n// FIXME convert CR to LF http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#input-stream\nfunction InputStream() {\n\tthis.data = '';\n\tthis.start = 0;\n\tthis.committed = 0;\n\tthis.eof = false;\n\tthis.lastLocation = {line: 0, column: 0};\n}\n\nInputStream.EOF = -1;\n\nInputStream.DRAIN = -2;\n\nInputStream.prototype = {\n\tslice: function() {\n\t\tif(this.start >= this.data.length) {\n\t\t\tif(!this.eof) throw InputStream.DRAIN;\n\t\t\treturn InputStream.EOF;\n\t\t}\n\t\treturn this.data.slice(this.start, this.data.length);\n\t},\n\tchar: function() {\n\t\tif(!this.eof && this.start >= this.data.length - 1) throw InputStream.DRAIN;\n\t\tif(this.start >= this.data.length) {\n\t\t\treturn InputStream.EOF;\n\t\t}\n\t\tvar ch = this.data[this.start++];\n\t\tif (ch === '\\r')\n\t\t\tch = '\\n';\n\t\treturn ch;\n\t},\n\tadvance: function(amount) {\n\t\tthis.start += amount;\n\t\tif(this.start >= this.data.length) {\n\t\t\tif(!this.eof) throw InputStream.DRAIN;\n\t\t\treturn InputStream.EOF;\n\t\t} else {\n\t\t\tif(this.committed > this.data.length / 2) {\n\t\t\t\t// Sliiiide\n\t\t\t\tthis.lastLocation = this.location();\n\t\t\t\tthis.data = this.data.slice(this.committed);\n\t\t\t\tthis.start = this.start - this.committed;\n\t\t\t\tthis.committed = 0;\n\t\t\t}\n\t\t}\n\t},\n\tmatchWhile: function(re) {\n\t\tif(this.eof && this.start >= this.data.length ) return '';\n\t\tvar r = new RegExp(\"^\"+re+\"+\");\n\t\tvar m = r.exec(this.slice());\n\t\tif(m) {\n\t\t\tif(!this.eof && m[0].length == this.data.length - this.start) throw InputStream.DRAIN;\n\t\t\tthis.advance(m[0].length);\n\t\t\treturn m[0];\n\t\t} else {\n\t\t\treturn '';\n\t\t}\n\t},\n\tmatchUntil: function(re) {\n\t\tvar m, s;\n\t\ts = this.slice();\n\t\tif(s === InputStream.EOF) {\n\t\t\treturn '';\n\t\t} else if(m = new RegExp(re + (this.eof ? \"|$\" : \"\")).exec(s)) {\n\t\t\tvar t = this.data.slice(this.start, this.start + m.index);\n\t\t\tthis.advance(m.index);\n\t\t\treturn t.replace(/\\r/g, '\\n').replace(/\\n{2,}/g, '\\n');\n\t\t} else {\n\t\t\tthrow InputStream.DRAIN;\n\t\t}\n\t},\n\tappend: function(data) {\n\t\tthis.data += data;\n\t},\n\tshift: function(n) {\n\t\tif(!this.eof && this.start + n >= this.data.length) throw InputStream.DRAIN;\n\t\tif(this.eof && this.start >= this.data.length) return InputStream.EOF;\n\t\tvar d = this.data.slice(this.start, this.start + n).toString();\n\t\tthis.advance(Math.min(n, this.data.length - this.start));\n\t\treturn d;\n\t},\n\tpeek: function(n) {\n\t\tif(!this.eof && this.start + n >= this.data.length) throw InputStream.DRAIN;\n\t\tif(this.eof && this.start >= this.data.length) return InputStream.EOF;\n\t\treturn this.data.slice(this.start, Math.min(this.start + n, this.data.length)).toString();\n\t},\n\tlength: function() {\n\t\treturn this.data.length - this.start - 1;\n\t},\n\tunget: function(d) {\n\t\tif(d === InputStream.EOF) return;\n\t\tthis.start -= (d.length);\n\t},\n\tundo: function() {\n\t\tthis.start = this.committed;\n\t},\n\tcommit: function() {\n\t\tthis.committed = this.start;\n\t},\n\tlocation: function() {\n\t\tvar lastLine = this.lastLocation.line;\n\t\tvar lastColumn = this.lastLocation.column;\n\t\tvar read = this.data.slice(0, this.committed);\n\t\tvar newlines = read.match(/\\n/g);\n\t\tvar line = newlines ? lastLine + newlines.length : lastLine;\n\t\tvar column = newlines ? read.length - read.lastIndexOf('\\n') - 1 : lastColumn + read.length;\n\t\treturn {line: line, column: column};\n\t}\n};\n\nexports.InputStream = InputStream;\n\n},\n{}],\n4:[function(_dereq_,module,exports){\nvar SpecialElements = {\r\n\t\"http://www.w3.org/1999/xhtml\": [\r\n\t\t'address',\r\n\t\t'applet',\r\n\t\t'area',\r\n\t\t'article',\r\n\t\t'aside',\r\n\t\t'base',\r\n\t\t'basefont',\r\n\t\t'bgsound',\r\n\t\t'blockquote',\r\n\t\t'body',\r\n\t\t'br',\r\n\t\t'button',\r\n\t\t'caption',\r\n\t\t'center',\r\n\t\t'col',\r\n\t\t'colgroup',\r\n\t\t'dd',\r\n\t\t'details',\r\n\t\t'dir',\r\n\t\t'div',\r\n\t\t'dl',\r\n\t\t'dt',\r\n\t\t'embed',\r\n\t\t'fieldset',\r\n\t\t'figcaption',\r\n\t\t'figure',\r\n\t\t'footer',\r\n\t\t'form',\r\n\t\t'frame',\r\n\t\t'frameset',\r\n\t\t'h1',\r\n\t\t'h2',\r\n\t\t'h3',\r\n\t\t'h4',\r\n\t\t'h5',\r\n\t\t'h6',\r\n\t\t'head',\r\n\t\t'header',\r\n\t\t'hgroup',\r\n\t\t'hr',\r\n\t\t'html',\r\n\t\t'iframe',\r\n\t\t'img',\r\n\t\t'input',\r\n\t\t'isindex',\r\n\t\t'li',\r\n\t\t'link',\r\n\t\t'listing',\r\n\t\t'main',\r\n\t\t'marquee',\r\n\t\t'menu',\r\n\t\t'menuitem',\r\n\t\t'meta',\r\n\t\t'nav',\r\n\t\t'noembed',\r\n\t\t'noframes',\r\n\t\t'noscript',\r\n\t\t'object',\r\n\t\t'ol',\r\n\t\t'p',\r\n\t\t'param',\r\n\t\t'plaintext',\r\n\t\t'pre',\r\n\t\t'script',\r\n\t\t'section',\r\n\t\t'select',\r\n\t\t'source',\r\n\t\t'style',\r\n\t\t'summary',\r\n\t\t'table',\r\n\t\t'tbody',\r\n\t\t'td',\r\n\t\t'textarea',\r\n\t\t'tfoot',\r\n\t\t'th',\r\n\t\t'thead',\r\n\t\t'title',\r\n\t\t'tr',\r\n\t\t'track',\r\n\t\t'ul',\r\n\t\t'wbr',\r\n\t\t'xmp'\r\n\t],\r\n\t\"http://www.w3.org/1998/Math/MathML\": [\r\n\t\t'mi',\r\n\t\t'mo',\r\n\t\t'mn',\r\n\t\t'ms',\r\n\t\t'mtext',\r\n\t\t'annotation-xml'\r\n\t],\r\n\t\"http://www.w3.org/2000/svg\": [\r\n\t\t'foreignObject',\r\n\t\t'desc',\r\n\t\t'title'\r\n\t]\r\n};\r\n\r\n\r\nfunction StackItem(namespaceURI, localName, attributes, node) {\r\n\tthis.localName = localName;\r\n\tthis.namespaceURI = namespaceURI;\r\n\tthis.attributes = attributes;\r\n\tthis.node = node;\r\n}\r\n\r\n// http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#special\r\nStackItem.prototype.isSpecial = function() {\r\n\treturn this.namespaceURI in SpecialElements &&\r\n\t\tSpecialElements[this.namespaceURI].indexOf(this.localName) > -1;\r\n};\r\n\r\nStackItem.prototype.isFosterParenting = function() {\r\n\tif (this.namespaceURI === \"http://www.w3.org/1999/xhtml\") {\r\n\t\treturn this.localName === 'table' ||\r\n\t\t\tthis.localName === 'tbody' ||\r\n\t\t\tthis.localName === 'tfoot' ||\r\n\t\t\tthis.localName === 'thead' ||\r\n\t\t\tthis.localName === 'tr';\r\n\t}\r\n\treturn false;\r\n};\r\n\r\nStackItem.prototype.isNumberedHeader = function() {\r\n\tif (this.namespaceURI === \"http://www.w3.org/1999/xhtml\") {\r\n\t\treturn this.localName === 'h1' ||\r\n\t\t\tthis.localName === 'h2' ||\r\n\t\t\tthis.localName === 'h3' ||\r\n\t\t\tthis.localName === 'h4' ||\r\n\t\t\tthis.localName === 'h5' ||\r\n\t\t\tthis.localName === 'h6';\r\n\t}\r\n\treturn false;\r\n};\r\n\r\nStackItem.prototype.isForeign = function() {\r\n\treturn this.namespaceURI != \"http://www.w3.org/1999/xhtml\";\r\n};\r\n\r\nfunction getAttribute(item, name) {\r\n\tfor (var i = 0; i < item.attributes.length; i++) {\r\n\t\tif (item.attributes[i].nodeName == name)\r\n\t\t\treturn item.attributes[i].nodeValue;\r\n\t}\r\n\treturn null;\r\n}\r\n\r\nStackItem.prototype.isHtmlIntegrationPoint = function() {\r\n\tif (this.namespaceURI === \"http://www.w3.org/1998/Math/MathML\") {\r\n\t\tif (this.localName !== \"annotation-xml\")\r\n\t\t\treturn false;\r\n\t\tvar encoding = getAttribute(this, 'encoding');\r\n\t\tif (!encoding)\r\n\t\t\treturn false;\r\n\t\tencoding = encoding.toLowerCase();\r\n\t\treturn encoding === \"text/html\" || encoding === \"application/xhtml+xml\";\r\n\t}\r\n\tif (this.namespaceURI === \"http://www.w3.org/2000/svg\") {\r\n\t\treturn this.localName === \"foreignObject\"\r\n\t\t\t|| this.localName === \"desc\"\r\n\t\t\t|| this.localName === \"title\";\r\n\t}\r\n\treturn false;\r\n};\r\n\r\nStackItem.prototype.isMathMLTextIntegrationPoint = function() {\r\n\tif (this.namespaceURI === \"http://www.w3.org/1998/Math/MathML\") {\r\n\t\treturn this.localName === \"mi\"\r\n\t\t\t|| this.localName === \"mo\"\r\n\t\t\t|| this.localName === \"mn\"\r\n\t\t\t|| this.localName === \"ms\"\r\n\t\t\t|| this.localName === \"mtext\";\r\n\t}\r\n\treturn false;\r\n};\r\n\r\nexports.StackItem = StackItem;\r\n\n},\n{}],\n5:[function(_dereq_,module,exports){\nvar InputStream = _dereq_('./InputStream').InputStream;\nvar EntityParser = _dereq_('./EntityParser').EntityParser;\n\nfunction isWhitespace(c){\n\treturn c === \" \" || c === \"\\n\" || c === \"\\t\" || c === \"\\r\" || c === \"\\f\";\n}\n\nfunction isAlpha(c) {\n\treturn (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z');\n}\n\n/**\n *\n * @param {Object} tokenHandler\n * @constructor\n */\nfunction Tokenizer(tokenHandler) {\n\tthis._tokenHandler = tokenHandler;\n\tthis._state = Tokenizer.DATA;\n\tthis._inputStream = new InputStream();\n\tthis._currentToken = null;\n\tthis._temporaryBuffer = '';\n\tthis._additionalAllowedCharacter = '';\n}\n\nTokenizer.prototype._parseError = function(code, args) {\n\tthis._tokenHandler.parseError(code, args);\n};\n\nTokenizer.prototype._emitToken = function(token) {\n\tif (token.type === 'StartTag') {\n\t\tfor (var i = 1; i < token.data.length; i++) {\n\t\t\tif (!token.data[i].nodeName)\n\t\t\t\ttoken.data.splice(i--, 1);\n\t\t}\n\t} else if (token.type === 'EndTag') {\n\t\tif (token.selfClosing) {\n\t\t\tthis._parseError('self-closing-flag-on-end-tag');\n\t\t}\n\t\tif (token.data.length !== 0) {\n\t\t\tthis._parseError('attributes-in-end-tag');\n\t\t}\n\t}\n\tthis._tokenHandler.processToken(token);\n\tif (token.type === 'StartTag' && token.selfClosing && !this._tokenHandler.isSelfClosingFlagAcknowledged()) {\n\t\tthis._parseError('non-void-element-with-trailing-solidus', {name: token.name});\n\t}\n};\n\nTokenizer.prototype._emitCurrentToken = function() {\n\tthis._state = Tokenizer.DATA;\n\tthis._emitToken(this._currentToken);\n};\n\nTokenizer.prototype._currentAttribute = function() {\n\treturn this._currentToken.data[this._currentToken.data.length - 1];\n};\n\nTokenizer.prototype.setState = function(state) {\n\tthis._state = state;\n};\n\nTokenizer.prototype.tokenize = function(source) {\n\t// FIXME proper tokenizer states\n\tTokenizer.DATA = data_state;\n\tTokenizer.RCDATA = rcdata_state;\n\tTokenizer.RAWTEXT = rawtext_state;\n\tTokenizer.SCRIPT_DATA = script_data_state;\n\tTokenizer.PLAINTEXT = plaintext_state;\n\n\n\tthis._state = Tokenizer.DATA;\n\n\tthis._inputStream.append(source);\n\n\tthis._tokenHandler.startTokenization(this);\n\n\tthis._inputStream.eof = true;\n\n\tvar tokenizer = this;\n\n\twhile (this._state.call(this, this._inputStream));\n\n\n\tfunction data_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._emitToken({type: 'EOF', data: null});\n\t\t\treturn false;\n\t\t} else if (data === '&') {\n\t\t\ttokenizer.setState(character_reference_in_data_state);\n\t\t} else if (data === '<') {\n\t\t\ttokenizer.setState(tag_open_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\tvar chars = buffer.matchUntil(\"&|<|\\u0000\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data + chars});\n\t\t\tbuffer.commit();\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction character_reference_in_data_state(buffer) {\n\t\tvar character = EntityParser.consumeEntity(buffer, tokenizer);\n\t\ttokenizer.setState(data_state);\n\t\ttokenizer._emitToken({type: 'Characters', data: character || '&'});\n\t\treturn true;\n\t}\n\n\tfunction rcdata_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._emitToken({type: 'EOF', data: null});\n\t\t\treturn false;\n\t\t} else if (data === '&') {\n\t\t\ttokenizer.setState(character_reference_in_rcdata_state);\n\t\t} else if (data === '<') {\n\t\t\ttokenizer.setState(rcdata_less_than_sign_state);\n\t\t} else if (data === \"\\u0000\") {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '\\uFFFD'});\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\tvar chars = buffer.matchUntil(\"&|<|\\u0000\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data + chars});\n\t\t\tbuffer.commit();\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction character_reference_in_rcdata_state(buffer) {\n\t\tvar character = EntityParser.consumeEntity(buffer, tokenizer);\n\t\ttokenizer.setState(rcdata_state);\n\t\ttokenizer._emitToken({type: 'Characters', data: character || '&'});\n\t\treturn true;\n\t}\n\n\tfunction rawtext_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._emitToken({type: 'EOF', data: null});\n\t\t\treturn false;\n\t\t} else if (data === '<') {\n\t\t\ttokenizer.setState(rawtext_less_than_sign_state);\n\t\t} else if (data === \"\\u0000\") {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '\\uFFFD'});\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\tvar chars = buffer.matchUntil(\"<|\\u0000\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data + chars});\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction plaintext_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._emitToken({type: 'EOF', data: null});\n\t\t\treturn false;\n\t\t} else if (data === \"\\u0000\") {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '\\uFFFD'});\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\tvar chars = buffer.matchUntil(\"\\u0000\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data + chars});\n\t\t}\n\t\treturn true;\n\t}\n\n\n\tfunction script_data_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._emitToken({type: 'EOF', data: null});\n\t\t\treturn false;\n\t\t} else if (data === '<') {\n\t\t\ttokenizer.setState(script_data_less_than_sign_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '\\uFFFD'});\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\tvar chars = buffer.matchUntil(\"<|\\u0000\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data + chars});\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction rcdata_less_than_sign_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === \"/\") {\n\t\t\tthis._temporaryBuffer = '';\n\t\t\ttokenizer.setState(rcdata_end_tag_open_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '<'});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(rcdata_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction rcdata_end_tag_open_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (isAlpha(data)) {\n\t\t\tthis._temporaryBuffer += data;\n\t\t\ttokenizer.setState(rcdata_end_tag_name_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '</'});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(rcdata_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction rcdata_end_tag_name_state(buffer) {\n\t\tvar appropriate = tokenizer._currentToken && (tokenizer._currentToken.name === this._temporaryBuffer.toLowerCase());\n\t\tvar data = buffer.char();\n\t\tif (isWhitespace(data) && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: this._temporaryBuffer, data: [], selfClosing: false};\n\t\t\ttokenizer.setState(before_attribute_name_state);\n\t\t} else if (data === '/' && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: this._temporaryBuffer, data: [], selfClosing: false};\n\t\t\ttokenizer.setState(self_closing_tag_state);\n\t\t} else if (data === '>' && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: this._temporaryBuffer, data: [], selfClosing: false};\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isAlpha(data)) {\n\t\t\tthis._temporaryBuffer += data;\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '</' + this._temporaryBuffer});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(rcdata_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction rawtext_less_than_sign_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === \"/\") {\n\t\t\tthis._temporaryBuffer = '';\n\t\t\ttokenizer.setState(rawtext_end_tag_open_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '<'});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(rawtext_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction rawtext_end_tag_open_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (isAlpha(data)) {\n\t\t\tthis._temporaryBuffer += data;\n\t\t\ttokenizer.setState(rawtext_end_tag_name_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '</'});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(rawtext_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction rawtext_end_tag_name_state(buffer) {\n\t\tvar appropriate = tokenizer._currentToken && (tokenizer._currentToken.name === this._temporaryBuffer.toLowerCase());\n\t\tvar data = buffer.char();\n\t\tif (isWhitespace(data) && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: this._temporaryBuffer, data: [], selfClosing: false};\n\t\t\ttokenizer.setState(before_attribute_name_state);\n\t\t} else if (data === '/' && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: this._temporaryBuffer, data: [], selfClosing: false};\n\t\t\ttokenizer.setState(self_closing_tag_state);\n\t\t} else if (data === '>' && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: this._temporaryBuffer, data: [], selfClosing: false};\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isAlpha(data)) {\n\t\t\tthis._temporaryBuffer += data;\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '</' + this._temporaryBuffer});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(rawtext_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_less_than_sign_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === \"/\") {\n\t\t\tthis._temporaryBuffer = '';\n\t\t\ttokenizer.setState(script_data_end_tag_open_state);\n\t\t} else if (data === '!') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '<!'});\n\t\t\ttokenizer.setState(script_data_escape_start_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '<'});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_end_tag_open_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (isAlpha(data)) {\n\t\t\tthis._temporaryBuffer += data;\n\t\t\ttokenizer.setState(script_data_end_tag_name_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '</'});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_end_tag_name_state(buffer) {\n\t\tvar appropriate = tokenizer._currentToken && (tokenizer._currentToken.name === this._temporaryBuffer.toLowerCase());\n\t\tvar data = buffer.char();\n\t\tif (isWhitespace(data) && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: 'script', data: [], selfClosing: false};\n\t\t\ttokenizer.setState(before_attribute_name_state);\n\t\t} else if (data === '/' && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: 'script', data: [], selfClosing: false};\n\t\t\ttokenizer.setState(self_closing_tag_state);\n\t\t} else if (data === '>' && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: 'script', data: [], selfClosing: false};\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (isAlpha(data)) {\n\t\t\tthis._temporaryBuffer += data;\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '</' + this._temporaryBuffer});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_escape_start_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === '-') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '-'});\n\t\t\ttokenizer.setState(script_data_escape_start_dash_state);\n\t\t} else {\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_escape_start_dash_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === '-') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '-'});\n\t\t\ttokenizer.setState(script_data_escaped_dash_dash_state);\n\t\t} else {\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_escaped_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '-'});\n\t\t\ttokenizer.setState(script_data_escaped_dash_state);\n\t\t} else if (data === '<') {\n\t\t\ttokenizer.setState(script_data_escaped_less_then_sign_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '\\uFFFD'});\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\tvar chars = buffer.matchUntil('<|-|\\u0000');\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data + chars});\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_escaped_dash_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '-'});\n\t\t\ttokenizer.setState(script_data_escaped_dash_dash_state);\n\t\t} else if (data === '<') {\n\t\t\ttokenizer.setState(script_data_escaped_less_then_sign_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '\\uFFFD'});\n\t\t\ttokenizer.setState(script_data_escaped_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t\ttokenizer.setState(script_data_escaped_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_escaped_dash_dash_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError('eof-in-script');\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '<') {\n\t\t\ttokenizer.setState(script_data_escaped_less_then_sign_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '>'});\n\t\t\ttokenizer.setState(script_data_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '\\uFFFD'});\n\t\t\ttokenizer.setState(script_data_escaped_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t\ttokenizer.setState(script_data_escaped_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_escaped_less_then_sign_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === '/') {\n\t\t\tthis._temporaryBuffer = '';\n\t\t\ttokenizer.setState(script_data_escaped_end_tag_open_state);\n\t\t} else if (isAlpha(data)) {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '<' + data});\n\t\t\tthis._temporaryBuffer = data;\n\t\t\ttokenizer.setState(script_data_double_escape_start_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '<'});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_escaped_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_escaped_end_tag_open_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (isAlpha(data)) {\n\t\t\tthis._temporaryBuffer = data;\n\t\t\ttokenizer.setState(script_data_escaped_end_tag_name_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '</'});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_escaped_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_escaped_end_tag_name_state(buffer) {\n\t\tvar appropriate = tokenizer._currentToken && (tokenizer._currentToken.name === this._temporaryBuffer.toLowerCase());\n\t\tvar data = buffer.char();\n\t\tif (isWhitespace(data) && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: 'script', data: [], selfClosing: false};\n\t\t\ttokenizer.setState(before_attribute_name_state);\n\t\t} else if (data === '/' && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: 'script', data: [], selfClosing: false};\n\t\t\ttokenizer.setState(self_closing_tag_state);\n\t\t} else if (data === '>' &&  appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: 'script', data: [], selfClosing: false};\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (isAlpha(data)) {\n\t\t\tthis._temporaryBuffer += data;\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '</' + this._temporaryBuffer});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_escaped_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_double_escape_start_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (isWhitespace(data) || data === '/' || data === '>') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t\tif (this._temporaryBuffer.toLowerCase() === 'script')\n\t\t\t\ttokenizer.setState(script_data_double_escaped_state);\n\t\t\telse\n\t\t\t\ttokenizer.setState(script_data_escaped_state);\n\t\t} else if (isAlpha(data)) {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t\tthis._temporaryBuffer += data;\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_escaped_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_double_escaped_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError('eof-in-script');\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '-'});\n\t\t\ttokenizer.setState(script_data_double_escaped_dash_state);\n\t\t} else if (data === '<') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '<'});\n\t\t\ttokenizer.setState(script_data_double_escaped_less_than_sign_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError('invalid-codepoint');\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '\\uFFFD'});\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t\tbuffer.commit();\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_double_escaped_dash_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError('eof-in-script');\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '-'});\n\t\t\ttokenizer.setState(script_data_double_escaped_dash_dash_state);\n\t\t} else if (data === '<') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '<'});\n\t\t\ttokenizer.setState(script_data_double_escaped_less_than_sign_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError('invalid-codepoint');\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '\\uFFFD'});\n\t\t\ttokenizer.setState(script_data_double_escaped_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t\ttokenizer.setState(script_data_double_escaped_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_double_escaped_dash_dash_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError('eof-in-script');\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '-'});\n\t\t\tbuffer.commit();\n\t\t} else if (data === '<') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '<'});\n\t\t\ttokenizer.setState(script_data_double_escaped_less_than_sign_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '>'});\n\t\t\ttokenizer.setState(script_data_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError('invalid-codepoint');\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '\\uFFFD'});\n\t\t\ttokenizer.setState(script_data_double_escaped_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t\ttokenizer.setState(script_data_double_escaped_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_double_escaped_less_than_sign_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === '/') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '/'});\n\t\t\tthis._temporaryBuffer = '';\n\t\t\ttokenizer.setState(script_data_double_escape_end_state);\n\t\t} else {\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_double_escaped_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_double_escape_end_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (isWhitespace(data) || data === '/' || data === '>') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t\tif (this._temporaryBuffer.toLowerCase() === 'script')\n\t\t\t\ttokenizer.setState(script_data_escaped_state);\n\t\t\telse\n\t\t\t\ttokenizer.setState(script_data_double_escaped_state);\n\t\t} else if (isAlpha(data)) {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t\tthis._temporaryBuffer += data;\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_double_escaped_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction tag_open_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"bare-less-than-sign-at-eof\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '<'});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isAlpha(data)) {\n\t\t\ttokenizer._currentToken = {type: 'StartTag', name: data.toLowerCase(), data: []};\n\t\t\ttokenizer.setState(tag_name_state);\n\t\t} else if (data === '!') {\n\t\t\ttokenizer.setState(markup_declaration_open_state);\n\t\t} else if (data === '/') {\n\t\t\ttokenizer.setState(close_tag_open_state);\n\t\t} else if (data === '>') {\n\t\t\t// XXX In theory it could be something besides a tag name. But\n\t\t\t// do we really care?\n\t\t\ttokenizer._parseError(\"expected-tag-name-but-got-right-bracket\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: \"<>\"});\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '?') {\n\t\t\t// XXX In theory it could be something besides a tag name. But\n\t\t\t// do we really care?\n\t\t\ttokenizer._parseError(\"expected-tag-name-but-got-question-mark\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(bogus_comment_state);\n\t\t} else {\n\t\t\t// XXX\n\t\t\ttokenizer._parseError(\"expected-tag-name\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: \"<\"});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction close_tag_open_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"expected-closing-tag-but-got-eof\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '</'});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isAlpha(data)) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: data.toLowerCase(), data: []};\n\t\t\ttokenizer.setState(tag_name_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"expected-closing-tag-but-got-right-bracket\");\n\t\t\ttokenizer.setState(data_state);\n\t\t} else {\n\t\t\ttokenizer._parseError(\"expected-closing-tag-but-got-char\", {data: data}); // param 1 is datavars:\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(bogus_comment_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction tag_name_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError('eof-in-tag-name');\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t\ttokenizer.setState(before_attribute_name_state);\n\t\t} else if (isAlpha(data)) {\n\t\t\ttokenizer._currentToken.name += data.toLowerCase();\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (data === '/') {\n\t\t\ttokenizer.setState(self_closing_tag_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentToken.name += \"\\uFFFD\";\n\t\t} else {\n\t\t\ttokenizer._currentToken.name += data;\n\t\t}\n\t\tbuffer.commit();\n\n\t\treturn true;\n\t}\n\n\tfunction before_attribute_name_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"expected-attribute-name-but-got-eof\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t\treturn true;\n\t\t} else if (isAlpha(data)) {\n\t\t\ttokenizer._currentToken.data.push({nodeName: data.toLowerCase(), nodeValue: \"\"});\n\t\t\ttokenizer.setState(attribute_name_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (data === '/') {\n\t\t\ttokenizer.setState(self_closing_tag_state);\n\t\t} else if (data === \"'\" || data === '\"' || data === '=' || data === '<') {\n\t\t\ttokenizer._parseError(\"invalid-character-in-attribute-name\");\n\t\t\ttokenizer._currentToken.data.push({nodeName: data, nodeValue: \"\"});\n\t\t\ttokenizer.setState(attribute_name_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentToken.data.push({nodeName: \"\\uFFFD\", nodeValue: \"\"});\n\t\t} else {\n\t\t\ttokenizer._currentToken.data.push({nodeName: data, nodeValue: \"\"});\n\t\t\ttokenizer.setState(attribute_name_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction attribute_name_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tvar leavingThisState = true;\n\t\tvar shouldEmit = false;\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-attribute-name\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t\tshouldEmit = true;\n\t\t} else if (data === '=') {\n\t\t\ttokenizer.setState(before_attribute_value_state);\n\t\t} else if (isAlpha(data)) {\n\t\t\ttokenizer._currentAttribute().nodeName += data.toLowerCase();\n\t\t\tleavingThisState = false;\n\t\t} else if (data === '>') {\n\t\t\t// XXX If we emit here the attributes are converted to a dict\n\t\t\t// without being checked and when the code below runs we error\n\t\t\t// because data is a dict not a list\n\t\t\tshouldEmit = true;\n\t\t} else if (isWhitespace(data)) {\n\t\t\ttokenizer.setState(after_attribute_name_state);\n\t\t} else if (data === '/') {\n\t\t\ttokenizer.setState(self_closing_tag_state);\n\t\t} else if (data === \"'\" || data === '\"') {\n\t\t\ttokenizer._parseError(\"invalid-character-in-attribute-name\");\n\t\t\ttokenizer._currentAttribute().nodeName += data;\n\t\t\tleavingThisState = false;\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentAttribute().nodeName += \"\\uFFFD\";\n\t\t} else {\n\t\t\ttokenizer._currentAttribute().nodeName += data;\n\t\t\tleavingThisState = false;\n\t\t}\n\n\t\tif (leavingThisState) {\n\t\t\t// Attributes are not dropped at this stage. That happens when the\n\t\t\t// start tag token is emitted so values can still be safely appended\n\t\t\t// to attributes, but we do want to report the parse error in time.\n\t\t\tvar attributes = tokenizer._currentToken.data;\n\t\t\tvar currentAttribute = attributes[attributes.length - 1];\n\t\t\tfor (var i = attributes.length - 2; i >= 0; i--) {\n\t\t\t\tif (currentAttribute.nodeName === attributes[i].nodeName) {\n\t\t\t\t\ttokenizer._parseError(\"duplicate-attribute\", {name: currentAttribute.nodeName});\n\t\t\t\t\tcurrentAttribute.nodeName = null;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (shouldEmit)\n\t\t\t\ttokenizer._emitCurrentToken();\n\t\t} else {\n\t\t\tbuffer.commit();\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction after_attribute_name_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"expected-end-of-tag-but-got-eof\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t\treturn true;\n\t\t} else if (data === '=') {\n\t\t\ttokenizer.setState(before_attribute_value_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (isAlpha(data)) {\n\t\t\ttokenizer._currentToken.data.push({nodeName: data, nodeValue: \"\"});\n\t\t\ttokenizer.setState(attribute_name_state);\n\t\t} else if (data === '/') {\n\t\t\ttokenizer.setState(self_closing_tag_state);\n\t\t} else if (data === \"'\" || data === '\"' || data === '<') {\n\t\t\ttokenizer._parseError(\"invalid-character-after-attribute-name\");\n\t\t\ttokenizer._currentToken.data.push({nodeName: data, nodeValue: \"\"});\n\t\t\ttokenizer.setState(attribute_name_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentToken.data.push({nodeName: \"\\uFFFD\", nodeValue: \"\"});\n\t\t} else {\n\t\t\ttokenizer._currentToken.data.push({nodeName: data, nodeValue: \"\"});\n\t\t\ttokenizer.setState(attribute_name_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction before_attribute_value_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"expected-attribute-value-but-got-eof\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t\treturn true;\n\t\t} else if (data === '\"') {\n\t\t\ttokenizer.setState(attribute_value_double_quoted_state);\n\t\t} else if (data === '&') {\n\t\t\ttokenizer.setState(attribute_value_unquoted_state);\n\t\t\tbuffer.unget(data);\n\t\t} else if (data === \"'\") {\n\t\t\ttokenizer.setState(attribute_value_single_quoted_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"expected-attribute-value-but-got-right-bracket\");\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (data === '=' || data === '<' || data === '`') {\n\t\t\ttokenizer._parseError(\"unexpected-character-in-unquoted-attribute-value\");\n\t\t\ttokenizer._currentAttribute().nodeValue += data;\n\t\t\ttokenizer.setState(attribute_value_unquoted_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentAttribute().nodeValue += \"\\uFFFD\";\n\t\t} else {\n\t\t\ttokenizer._currentAttribute().nodeValue += data;\n\t\t\ttokenizer.setState(attribute_value_unquoted_state);\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tfunction attribute_value_double_quoted_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-attribute-value-double-quote\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '\"') {\n\t\t\ttokenizer.setState(after_attribute_value_state);\n\t\t} else if (data === '&') {\n\t\t\tthis._additionalAllowedCharacter = '\"';\n\t\t\ttokenizer.setState(character_reference_in_attribute_value_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentAttribute().nodeValue += \"\\uFFFD\";\n\t\t} else {\n\t\t\tvar s = buffer.matchUntil('[\\0\"&]');\n\t\t\tdata = data + s;\n\t\t\ttokenizer._currentAttribute().nodeValue += data;\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction attribute_value_single_quoted_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-attribute-value-single-quote\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === \"'\") {\n\t\t\ttokenizer.setState(after_attribute_value_state);\n\t\t} else if (data === '&') {\n\t\t\tthis._additionalAllowedCharacter = \"'\";\n\t\t\ttokenizer.setState(character_reference_in_attribute_value_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentAttribute().nodeValue += \"\\uFFFD\";\n\t\t} else {\n\t\t\ttokenizer._currentAttribute().nodeValue += data + buffer.matchUntil(\"\\u0000|['&]\");\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction attribute_value_unquoted_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-after-attribute-value\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t\ttokenizer.setState(before_attribute_name_state);\n\t\t} else if (data === '&') {\n\t\t\tthis._additionalAllowedCharacter = \">\";\n\t\t\ttokenizer.setState(character_reference_in_attribute_value_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (data === '\"' || data === \"'\" || data === '=' || data === '`' || data === '<') {\n\t\t\ttokenizer._parseError(\"unexpected-character-in-unquoted-attribute-value\");\n\t\t\ttokenizer._currentAttribute().nodeValue += data;\n\t\t\tbuffer.commit();\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentAttribute().nodeValue += \"\\uFFFD\";\n\t\t} else {\n\t\t\tvar o = buffer.matchUntil(\"\\u0000|[\"+ \"\\t\\n\\v\\f\\x20\\r\" + \"&<>\\\"'=`\" +\"]\");\n\t\t\tif (o === InputStream.EOF) {\n\t\t\t\ttokenizer._parseError(\"eof-in-attribute-value-no-quotes\");\n\t\t\t\ttokenizer._emitCurrentToken();\n\t\t\t}\n\t\t\t// Commit here since this state is re-enterable and its outcome won't change with more data.\n\t\t\tbuffer.commit();\n\t\t\ttokenizer._currentAttribute().nodeValue += data + o;\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction character_reference_in_attribute_value_state(buffer) {\n\t\tvar character = EntityParser.consumeEntity(buffer, tokenizer, this._additionalAllowedCharacter);\n\t\tthis._currentAttribute().nodeValue += character || '&';\n\t\t// We're supposed to switch back to the attribute value state that\n\t\t// we were in when we were switched into this state. Rather than\n\t\t// keeping track of this explictly, we observe that the previous\n\t\t// state can be determined by additionalAllowedCharacter.\n\t\tif (this._additionalAllowedCharacter === '\"')\n\t\t\ttokenizer.setState(attribute_value_double_quoted_state);\n\t\telse if (this._additionalAllowedCharacter === '\\'')\n\t\t\ttokenizer.setState(attribute_value_single_quoted_state);\n\t\telse if (this._additionalAllowedCharacter === '>')\n\t\t\ttokenizer.setState(attribute_value_unquoted_state);\n\t\treturn true;\n\t}\n\n\tfunction after_attribute_value_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-after-attribute-value\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t\ttokenizer.setState(before_attribute_name_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (data === '/') {\n\t\t\ttokenizer.setState(self_closing_tag_state);\n\t\t} else {\n\t\t\ttokenizer._parseError(\"unexpected-character-after-attribute-value\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(before_attribute_name_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction self_closing_tag_state(buffer) {\n\t\tvar c = buffer.char();\n\t\tif (c === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"unexpected-eof-after-solidus-in-tag\");\n\t\t\tbuffer.unget(c);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (c === '>') {\n\t\t\ttokenizer._currentToken.selfClosing = true;\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else {\n\t\t\ttokenizer._parseError(\"unexpected-character-after-solidus-in-tag\");\n\t\t\tbuffer.unget(c);\n\t\t\ttokenizer.setState(before_attribute_name_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction bogus_comment_state(buffer) {\n\t\tvar data = buffer.matchUntil('>');\n\t\tdata = data.replace(/\\u0000/g, \"\\uFFFD\");\n\t\tbuffer.char();\n\t\ttokenizer._emitToken({type: 'Comment', data: data});\n\t\ttokenizer.setState(data_state);\n\t\treturn true;\n\t}\n\n\tfunction markup_declaration_open_state(buffer) {\n\t\tvar chars = buffer.shift(2);\n\t\tif (chars === '--') {\n\t\t\ttokenizer._currentToken = {type: 'Comment', data: ''};\n\t\t\ttokenizer.setState(comment_start_state);\n\t\t} else {\n\t\t\tvar newchars = buffer.shift(5);\n\t\t\tif (newchars === InputStream.EOF || chars === InputStream.EOF) {\n\t\t\t\ttokenizer._parseError(\"expected-dashes-or-doctype\");\n\t\t\t\ttokenizer.setState(bogus_comment_state);\n\t\t\t\tbuffer.unget(chars);\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tchars += newchars;\n\t\t\tif (chars.toUpperCase() === 'DOCTYPE') {\n\t\t\t\ttokenizer._currentToken = {type: 'Doctype', name: '', publicId: null, systemId: null, forceQuirks: false};\n\t\t\t\ttokenizer.setState(doctype_state);\n\t\t\t} else if (tokenizer._tokenHandler.isCdataSectionAllowed() && chars === '[CDATA[') {\n\t\t\t\ttokenizer.setState(cdata_section_state);\n\t\t\t} else {\n\t\t\t\ttokenizer._parseError(\"expected-dashes-or-doctype\");\n\t\t\t\tbuffer.unget(chars);\n\t\t\t\ttokenizer.setState(bogus_comment_state);\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction cdata_section_state(buffer) {\n\t\tvar data = buffer.matchUntil(']]>');\n\t\t// skip ]]>\n\t\tbuffer.shift(3);\n\t\tif (data) {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t}\n\t\ttokenizer.setState(data_state);\n\t\treturn true;\n\t}\n\n\tfunction comment_start_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-comment\");\n\t\t\ttokenizer._emitToken(tokenizer._currentToken);\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer.setState(comment_start_dash_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"incorrect-comment\");\n\t\t\ttokenizer._emitToken(tokenizer._currentToken);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentToken.data += \"\\uFFFD\";\n\t\t} else {\n\t\t\ttokenizer._currentToken.data += data;\n\t\t\ttokenizer.setState(comment_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction comment_start_dash_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-comment\");\n\t\t\ttokenizer._emitToken(tokenizer._currentToken);\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer.setState(comment_end_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"incorrect-comment\");\n\t\t\ttokenizer._emitToken(tokenizer._currentToken);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentToken.data += \"\\uFFFD\";\n\t\t} else {\n\t\t\ttokenizer._currentToken.data += '-' + data;\n\t\t\ttokenizer.setState(comment_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction comment_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-comment\");\n\t\t\ttokenizer._emitToken(tokenizer._currentToken);\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer.setState(comment_end_dash_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentToken.data += \"\\uFFFD\";\n\t\t} else {\n\t\t\ttokenizer._currentToken.data += data;\n\t\t\tbuffer.commit();\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction comment_end_dash_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-comment-end-dash\");\n\t\t\ttokenizer._emitToken(tokenizer._currentToken);\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer.setState(comment_end_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentToken.data += \"-\\uFFFD\";\n\t\t\ttokenizer.setState(comment_state);\n\t\t} else {\n\t\t\ttokenizer._currentToken.data += '-' + data + buffer.matchUntil('\\u0000|-');\n\t\t\t// Consume the next character which is either a \"-\" or an :EOF as\n\t\t\t// well so if there's a \"-\" directly after the \"-\" we go nicely to\n\t\t\t// the \"comment end state\" without emitting a tokenizer._parseError there.\n\t\t\tbuffer.char();\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction comment_end_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-comment-double-dash\");\n\t\t\ttokenizer._emitToken(tokenizer._currentToken);\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitToken(tokenizer._currentToken);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '!') {\n\t\t\ttokenizer._parseError(\"unexpected-bang-after-double-dash-in-comment\");\n\t\t\ttokenizer.setState(comment_end_bang_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer._parseError(\"unexpected-dash-after-double-dash-in-comment\");\n\t\t\ttokenizer._currentToken.data += data;\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentToken.data += \"--\\uFFFD\";\n\t\t\ttokenizer.setState(comment_state);\n\t\t} else {\n\t\t\t// XXX\n\t\t\ttokenizer._parseError(\"unexpected-char-in-comment\");\n\t\t\ttokenizer._currentToken.data += '--' + data;\n\t\t\ttokenizer.setState(comment_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction comment_end_bang_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-comment-end-bang-state\");\n\t\t\ttokenizer._emitToken(tokenizer._currentToken);\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitToken(tokenizer._currentToken);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer._currentToken.data += '--!';\n\t\t\ttokenizer.setState(comment_end_dash_state);\n\t\t} else {\n\t\t\ttokenizer._currentToken.data += '--!' + data;\n\t\t\ttokenizer.setState(comment_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction doctype_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"expected-doctype-name-but-got-eof\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (isWhitespace(data)) {\n\t\t\ttokenizer.setState(before_doctype_name_state);\n\t\t} else {\n\t\t\ttokenizer._parseError(\"need-space-after-doctype\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(before_doctype_name_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction before_doctype_name_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"expected-doctype-name-but-got-eof\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (isWhitespace(data)) {\n\t\t\t// pass\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"expected-doctype-name-but-got-right-bracket\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else {\n\t\t\tif (isAlpha(data))\n\t\t\t\tdata = data.toLowerCase();\n\t\t\ttokenizer._currentToken.name = data;\n\t\t\ttokenizer.setState(doctype_name_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction doctype_name_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer._parseError(\"eof-in-doctype-name\");\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (isWhitespace(data)) {\n\t\t\ttokenizer.setState(after_doctype_name_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else {\n\t\t\tif (isAlpha(data))\n\t\t\t\tdata = data.toLowerCase();\n\t\t\ttokenizer._currentToken.name += data;\n\t\t\tbuffer.commit();\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction after_doctype_name_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (isWhitespace(data)) {\n\t\t\t// pass\n\t\t} else if (data === '>') {\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else {\n\t\t\tif (['p', 'P'].indexOf(data) > -1) {\n\t\t\t\tvar expected = [['u', 'U'], ['b', 'B'], ['l', 'L'], ['i', 'I'], ['c', 'C']];\n\t\t\t\tvar matched = expected.every(function(expected){\n\t\t\t\t\tdata = buffer.char();\n\t\t\t\t\treturn expected.indexOf(data) > -1;\n\t\t\t\t});\n\t\t\t\tif (matched) {\n\t\t\t\t\ttokenizer.setState(after_doctype_public_keyword_state);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t} else if (['s', 'S'].indexOf(data) > -1) {\n\t\t\t\tvar expected = [['y', 'Y'], ['s', 'S'], ['t', 'T'], ['e', 'E'], ['m', 'M']];\n\t\t\t\tvar matched = expected.every(function(expected){\n\t\t\t\t\tdata = buffer.char();\n\t\t\t\t\treturn expected.indexOf(data) > -1;\n\t\t\t\t});\n\t\t\t\tif (matched) {\n\t\t\t\t\ttokenizer.setState(after_doctype_system_keyword_state);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// All the characters read before the current 'data' will be\n\t\t\t// [a-zA-Z], so they're garbage in the bogus doctype and can be\n\t\t\t// discarded; only the latest character might be '>' or EOF\n\t\t\t// and needs to be ungetted\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\n\t\t\tif (data === InputStream.EOF) {\n\t\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\t\tbuffer.unget(data);\n\t\t\t\ttokenizer.setState(data_state);\n\t\t\t\ttokenizer._emitCurrentToken();\n\t\t\t} else {\n\t\t\t\ttokenizer._parseError(\"expected-space-or-right-bracket-in-doctype\", {data: data});\n\t\t\t\ttokenizer.setState(bogus_doctype_state);\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction after_doctype_public_keyword_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (isWhitespace(data)) {\n\t\t\ttokenizer.setState(before_doctype_public_identifier_state);\n\t\t} else if (data === \"'\" || data === '\"') {\n\t\t\ttokenizer._parseError(\"unexpected-char-in-doctype\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(before_doctype_public_identifier_state);\n\t\t} else {\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(before_doctype_public_identifier_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction before_doctype_public_identifier_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (isWhitespace(data)) {\n\t\t\t// pass\n\t\t} else if (data === '\"') {\n\t\t\ttokenizer._currentToken.publicId = '';\n\t\t\ttokenizer.setState(doctype_public_identifier_double_quoted_state);\n\t\t} else if (data === \"'\") {\n\t\t\ttokenizer._currentToken.publicId = '';\n\t\t\ttokenizer.setState(doctype_public_identifier_single_quoted_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"unexpected-end-of-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else {\n\t\t\ttokenizer._parseError(\"unexpected-char-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer.setState(bogus_doctype_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction doctype_public_identifier_double_quoted_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (data === '\"') {\n\t\t\ttokenizer.setState(after_doctype_public_identifier_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"unexpected-end-of-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else {\n\t\t\ttokenizer._currentToken.publicId += data;\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction doctype_public_identifier_single_quoted_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (data === \"'\") {\n\t\t\ttokenizer.setState(after_doctype_public_identifier_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"unexpected-end-of-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else {\n\t\t\ttokenizer._currentToken.publicId += data;\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction after_doctype_public_identifier_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t\ttokenizer.setState(between_doctype_public_and_system_identifiers_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (data === '\"') {\n\t\t\ttokenizer._parseError(\"unexpected-char-in-doctype\");\n\t\t\ttokenizer._currentToken.systemId = '';\n\t\t\ttokenizer.setState(doctype_system_identifier_double_quoted_state);\n\t\t} else if (data === \"'\") {\n\t\t\ttokenizer._parseError(\"unexpected-char-in-doctype\");\n\t\t\ttokenizer._currentToken.systemId = '';\n\t\t\ttokenizer.setState(doctype_system_identifier_single_quoted_state);\n\t\t} else {\n\t\t\ttokenizer._parseError(\"unexpected-char-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer.setState(bogus_doctype_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction between_doctype_public_and_system_identifiers_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t\t// pass\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '\"') {\n\t\t\ttokenizer._currentToken.systemId = '';\n\t\t\ttokenizer.setState(doctype_system_identifier_double_quoted_state);\n\t\t} else if (data === \"'\") {\n\t\t\ttokenizer._currentToken.systemId = '';\n\t\t\ttokenizer.setState(doctype_system_identifier_single_quoted_state);\n\t\t} else {\n\t\t\ttokenizer._parseError(\"unexpected-char-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer.setState(bogus_doctype_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction after_doctype_system_keyword_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t\ttokenizer.setState(before_doctype_system_identifier_state);\n\t\t} else if (data === \"'\" || data === '\"') {\n\t\t\ttokenizer._parseError(\"unexpected-char-in-doctype\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(before_doctype_system_identifier_state);\n\t\t} else {\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(before_doctype_system_identifier_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction before_doctype_system_identifier_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t\t// pass\n\t\t} else if (data === '\"') {\n\t\t\ttokenizer._currentToken.systemId = '';\n\t\t\ttokenizer.setState(doctype_system_identifier_double_quoted_state);\n\t\t} else if (data === \"'\") {\n\t\t\ttokenizer._currentToken.systemId = '';\n\t\t\ttokenizer.setState(doctype_system_identifier_single_quoted_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"unexpected-end-of-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\ttokenizer.setState(data_state);\n\t\t} else {\n\t\t\ttokenizer._parseError(\"unexpected-char-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer.setState(bogus_doctype_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction doctype_system_identifier_double_quoted_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '\"') {\n\t\t\ttokenizer.setState(after_doctype_system_identifier_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"unexpected-end-of-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\ttokenizer.setState(data_state);\n\t\t} else {\n\t\t\ttokenizer._currentToken.systemId += data;\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction doctype_system_identifier_single_quoted_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === \"'\") {\n\t\t\ttokenizer.setState(after_doctype_system_identifier_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"unexpected-end-of-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\ttokenizer.setState(data_state);\n\t\t} else {\n\t\t\ttokenizer._currentToken.systemId += data;\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction after_doctype_system_identifier_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t\t// pass\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\ttokenizer.setState(data_state);\n\t\t} else {\n\t\t\ttokenizer._parseError(\"unexpected-char-in-doctype\");\n\t\t\ttokenizer.setState(bogus_doctype_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction bogus_doctype_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\ttokenizer.setState(data_state);\n\t\t}\n\t\treturn true;\n\t}\n};\n\nObject.defineProperty(Tokenizer.prototype, 'lineNumber', {\n\tget: function() {\n\t\treturn this._inputStream.location().line;\n\t}\n});\n\nObject.defineProperty(Tokenizer.prototype, 'columnNumber', {\n\tget: function() {\n\t\treturn this._inputStream.location().column;\n\t}\n});\n\nexports.Tokenizer = Tokenizer;\n\n},\n{\"./EntityParser\":2,\"./InputStream\":3}],\n6:[function(_dereq_,module,exports){\nvar assert = _dereq_('assert');\r\n\r\nvar messages = _dereq_('./messages.json');\r\nvar constants = _dereq_('./constants');\r\n\r\nvar EventEmitter = _dereq_('events').EventEmitter;\r\n\r\nvar Tokenizer = _dereq_('./Tokenizer').Tokenizer;\r\nvar ElementStack = _dereq_('./ElementStack').ElementStack;\r\nvar StackItem = _dereq_('./StackItem').StackItem;\r\n\r\nvar Marker = {};\r\n\r\nfunction isWhitespace(ch) {\r\n\treturn ch === \" \" || ch === \"\\n\" || ch === \"\\t\" || ch === \"\\r\" || ch === \"\\f\";\r\n}\r\n\r\nfunction isWhitespaceOrReplacementCharacter(ch) {\r\n\treturn isWhitespace(ch) || ch === '\\uFFFD';\r\n}\r\n\r\nfunction isAllWhitespace(characters) {\r\n\tfor (var i = 0; i < characters.length; i++) {\r\n\t\tvar ch = characters[i];\r\n\t\tif (!isWhitespace(ch))\r\n\t\t\treturn false;\r\n\t}\r\n\treturn true;\r\n}\r\n\r\nfunction isAllWhitespaceOrReplacementCharacters(characters) {\r\n\tfor (var i = 0; i < characters.length; i++) {\r\n\t\tvar ch = characters[i];\r\n\t\tif (!isWhitespaceOrReplacementCharacter(ch))\r\n\t\t\treturn false;\r\n\t}\r\n\treturn true;\r\n}\r\n\r\nfunction getAttribute(node, name) {\r\n\tfor (var i = 0; i < node.attributes.length; i++) {\r\n\t\tvar attribute = node.attributes[i];\r\n\t\tif (attribute.nodeName === name) {\r\n\t\t\treturn attribute;\r\n\t\t}\r\n\t}\r\n\treturn null;\r\n}\r\n\r\nfunction CharacterBuffer(characters) {\r\n\tthis.characters = characters;\r\n\tthis.current = 0;\r\n\tthis.end = this.characters.length;\r\n}\r\n\r\nCharacterBuffer.prototype.skipAtMostOneLeadingNewline = function() {\r\n\tif (this.characters[this.current] === '\\n')\r\n\t\tthis.current++;\r\n};\r\n\r\nCharacterBuffer.prototype.skipLeadingWhitespace = function() {\r\n\twhile (isWhitespace(this.characters[this.current])) {\r\n\t\tif (++this.current == this.end)\r\n\t\t\treturn;\r\n\t}\r\n};\r\n\r\nCharacterBuffer.prototype.skipLeadingNonWhitespace = function() {\r\n\twhile (!isWhitespace(this.characters[this.current])) {\r\n\t\tif (++this.current == this.end)\r\n\t\t\treturn;\r\n\t}\r\n};\r\n\r\nCharacterBuffer.prototype.takeRemaining = function() {\r\n\treturn this.characters.substring(this.current);\r\n};\r\n\r\nCharacterBuffer.prototype.takeLeadingWhitespace = function() {\r\n\tvar start = this.current;\r\n\tthis.skipLeadingWhitespace();\r\n\tif (start === this.current)\r\n\t\treturn \"\";\r\n\treturn this.characters.substring(start, this.current - start);\r\n};\r\n\r\nObject.defineProperty(CharacterBuffer.prototype, 'length', {\r\n\tget: function(){\r\n\t\treturn this.end - this.current;\r\n\t}\r\n});\r\n\r\n/**\r\n *\r\n * @constructor\r\n */\r\nfunction TreeBuilder() {\r\n\tthis.tokenizer = null;\r\n\tthis.errorHandler = null;\r\n\tthis.scriptingEnabled = false;\r\n\tthis.document = null;\r\n\tthis.head = null;\r\n\tthis.form = null;\r\n\tthis.openElements = new ElementStack();\r\n\tthis.activeFormattingElements = [];\r\n\tthis.insertionMode = null;\r\n\tthis.insertionModeName = \"\";\r\n\tthis.originalInsertionMode = \"\";\r\n\tthis.inQuirksMode = false; // TODO quirks mode\r\n\tthis.compatMode = \"no quirks\";\r\n\tthis.framesetOk = true;\r\n\tthis.redirectAttachToFosterParent = false;\r\n\tthis.selfClosingFlagAcknowledged = false;\r\n\tthis.context = \"\";\r\n\tthis.pendingTableCharacters = [];\r\n\tthis.shouldSkipLeadingNewline = false;\r\n\r\n\tvar tree = this;\r\n\tvar modes = this.insertionModes = {};\r\n\tmodes.base = {\r\n\t\tend_tag_handlers: {\"-default\": 'endTagOther'},\r\n\t\tstart_tag_handlers: {\"-default\": 'startTagOther'},\r\n\t\tprocessEOF: function() {\r\n\t\t\ttree.generateImpliedEndTags();\r\n\t\t\tif (tree.openElements.length > 2) {\r\n\t\t\t\ttree.parseError('expected-closing-tag-but-got-eof');\r\n\t\t\t} else if (tree.openElements.length == 2 &&\r\n\t\t\t\ttree.openElements.item(1).localName != 'body') {\r\n\t\t\t\t// This happens for framesets or something?\r\n\t\t\t\ttree.parseError('expected-closing-tag-but-got-eof');\r\n\t\t\t} else if (tree.context && tree.openElements.length > 1) {\r\n\t\t\t\t// XXX This is not what the specification says. Not sure what to do here.\r\n\t\t\t\t//tree.parseError('eof-in-innerhtml');\r\n\t\t\t}\r\n\t\t},\r\n\t\tprocessComment: function(data) {\r\n\t\t\t// For most phases the following is forceQuirks. Where it's not it will be\r\n\t\t\t// overridden.\r\n\t\t\ttree.insertComment(data, tree.currentStackItem().node);\r\n\t\t},\r\n\t\tprocessDoctype: function(name, publicId, systemId, forceQuirks) {\r\n\t\t\ttree.parseError('unexpected-doctype');\r\n\t\t},\r\n\t\tprocessStartTag: function(name, attributes, selfClosing) {\r\n\t\t\tif (this[this.start_tag_handlers[name]]) {\r\n\t\t\t\tthis[this.start_tag_handlers[name]](name, attributes, selfClosing);\r\n\t\t\t} else if (this[this.start_tag_handlers[\"-default\"]]) {\r\n\t\t\t\tthis[this.start_tag_handlers[\"-default\"]](name, attributes, selfClosing);\r\n\t\t\t} else {\r\n\t\t\t\tthrow(new Error(\"No handler found for \"+name));\r\n\t\t\t}\r\n\t\t},\r\n\t\tprocessEndTag: function(name) {\r\n\t\t\tif (this[this.end_tag_handlers[name]]) {\r\n\t\t\t\tthis[this.end_tag_handlers[name]](name);\r\n\t\t\t} else if (this[this.end_tag_handlers[\"-default\"]]) {\r\n\t\t\t\tthis[this.end_tag_handlers[\"-default\"]](name);\r\n\t\t\t} else {\r\n\t\t\t\tthrow(new Error(\"No handler found for \"+name));\r\n\t\t\t}\r\n\t\t},\r\n\t\tstartTagHtml: function(name, attributes) {\r\n\t\t\tmodes.inBody.startTagHtml(name, attributes);\r\n\t\t}\r\n\t};\r\n\r\n\tmodes.initial = Object.create(modes.base);\r\n\r\n\tmodes.initial.processEOF = function() {\r\n\t\ttree.parseError(\"expected-doctype-but-got-eof\");\r\n\t\tthis.anythingElse();\r\n\t\ttree.insertionMode.processEOF();\r\n\t};\r\n\r\n\tmodes.initial.processComment = function(data) {\r\n\t\ttree.insertComment(data, tree.document);\r\n\t};\r\n\r\n\tmodes.initial.processDoctype = function(name, publicId, systemId, forceQuirks) {\r\n\t\ttree.insertDoctype(name || '', publicId || '', systemId || '');\r\n\r\n\t\tif (forceQuirks || name != 'html' || (publicId != null && ([\r\n\t\t\t\t\t\"+//silmaril//dtd html pro v0r11 19970101//\",\r\n\t\t\t\t\t\"-//advasoft ltd//dtd html 3.0 aswedit + extensions//\",\r\n\t\t\t\t\t\"-//as//dtd html 3.0 aswedit + extensions//\",\r\n\t\t\t\t\t\"-//ietf//dtd html 2.0 level 1//\",\r\n\t\t\t\t\t\"-//ietf//dtd html 2.0 level 2//\",\r\n\t\t\t\t\t\"-//ietf//dtd html 2.0 strict level 1//\",\r\n\t\t\t\t\t\"-//ietf//dtd html 2.0 strict level 2//\",\r\n\t\t\t\t\t\"-//ietf//dtd html 2.0 strict//\",\r\n\t\t\t\t\t\"-//ietf//dtd html 2.0//\",\r\n\t\t\t\t\t\"-//ietf//dtd html 2.1e//\",\r\n\t\t\t\t\t\"-//ietf//dtd html 3.0//\",\r\n\t\t\t\t\t\"-//ietf//dtd html 3.0//\",\r\n\t\t\t\t\t\"-//ietf//dtd html 3.2 final//\",\r\n\t\t\t\t\t\"-//ietf//dtd html 3.2//\",\r\n\t\t\t\t\t\"-//ietf//dtd html 3//\",\r\n\t\t\t\t\t\"-//ietf//dtd html level 0//\",\r\n\t\t\t\t\t\"-//ietf//dtd html level 0//\",\r\n\t\t\t\t\t\"-//ietf//dtd html level 1//\",\r\n\t\t\t\t\t\"-//ietf//dtd html level 1//\",\r\n\t\t\t\t\t\"-//ietf//dtd html level 2//\",\r\n\t\t\t\t\t\"-//ietf//dtd html level 2//\",\r\n\t\t\t\t\t\"-//ietf//dtd html level 3//\",\r\n\t\t\t\t\t\"-//ietf//dtd html level 3//\",\r\n\t\t\t\t\t\"-//ietf//dtd html strict level 0//\",\r\n\t\t\t\t\t\"-//ietf//dtd html strict level 0//\",\r\n\t\t\t\t\t\"-//ietf//dtd html strict level 1//\",\r\n\t\t\t\t\t\"-//ietf//dtd html strict level 1//\",\r\n\t\t\t\t\t\"-//ietf//dtd html strict level 2//\",\r\n\t\t\t\t\t\"-//ietf//dtd html strict level 2//\",\r\n\t\t\t\t\t\"-//ietf//dtd html strict level 3//\",\r\n\t\t\t\t\t\"-//ietf//dtd html strict level 3//\",\r\n\t\t\t\t\t\"-//ietf//dtd html strict//\",\r\n\t\t\t\t\t\"-//ietf//dtd html strict//\",\r\n\t\t\t\t\t\"-//ietf//dtd html strict//\",\r\n\t\t\t\t\t\"-//ietf//dtd html//\",\r\n\t\t\t\t\t\"-//ietf//dtd html//\",\r\n\t\t\t\t\t\"-//ietf//dtd html//\",\r\n\t\t\t\t\t\"-//metrius//dtd metrius presentational//\",\r\n\t\t\t\t\t\"-//microsoft//dtd internet explorer 2.0 html strict//\",\r\n\t\t\t\t\t\"-//microsoft//dtd internet explorer 2.0 html//\",\r\n\t\t\t\t\t\"-//microsoft//dtd internet explorer 2.0 tables//\",\r\n\t\t\t\t\t\"-//microsoft//dtd internet explorer 3.0 html strict//\",\r\n\t\t\t\t\t\"-//microsoft//dtd internet explorer 3.0 html//\",\r\n\t\t\t\t\t\"-//microsoft//dtd internet explorer 3.0 tables//\",\r\n\t\t\t\t\t\"-//netscape comm. corp.//dtd html//\",\r\n\t\t\t\t\t\"-//netscape comm. corp.//dtd strict html//\",\r\n\t\t\t\t\t\"-//o'reilly and associates//dtd html 2.0//\",\r\n\t\t\t\t\t\"-//o'reilly and associates//dtd html extended 1.0//\",\r\n\t\t\t\t\t\"-//spyglass//dtd html 2.0 extended//\",\r\n\t\t\t\t\t\"-//sq//dtd html 2.0 hotmetal + extensions//\",\r\n\t\t\t\t\t\"-//sun microsystems corp.//dtd hotjava html//\",\r\n\t\t\t\t\t\"-//sun microsystems corp.//dtd hotjava strict html//\",\r\n\t\t\t\t\t\"-//w3c//dtd html 3 1995-03-24//\",\r\n\t\t\t\t\t\"-//w3c//dtd html 3.2 draft//\",\r\n\t\t\t\t\t\"-//w3c//dtd html 3.2 final//\",\r\n\t\t\t\t\t\"-//w3c//dtd html 3.2//\",\r\n\t\t\t\t\t\"-//w3c//dtd html 3.2s draft//\",\r\n\t\t\t\t\t\"-//w3c//dtd html 4.0 frameset//\",\r\n\t\t\t\t\t\"-//w3c//dtd html 4.0 transitional//\",\r\n\t\t\t\t\t\"-//w3c//dtd html experimental 19960712//\",\r\n\t\t\t\t\t\"-//w3c//dtd html experimental 970421//\",\r\n\t\t\t\t\t\"-//w3c//dtd w3 html//\",\r\n\t\t\t\t\t\"-//w3o//dtd w3 html 3.0//\",\r\n\t\t\t\t\t\"-//webtechs//dtd mozilla html 2.0//\",\r\n\t\t\t\t\t\"-//webtechs//dtd mozilla html//\",\r\n\t\t\t\t\t\"html\"\r\n\t\t\t\t].some(publicIdStartsWith)\r\n\t\t\t\t|| [\r\n\t\t\t\t\t\"-//w3o//dtd w3 html strict 3.0//en//\",\r\n\t\t\t\t\t\"-/w3c/dtd html 4.0 transitional/en\",\r\n\t\t\t\t\t\"html\"\r\n\t\t\t\t].indexOf(publicId.toLowerCase()) > -1\r\n\t\t\t\t|| (systemId == null && [\r\n\t\t\t\t\t\"-//w3c//dtd html 4.01 transitional//\",\r\n\t\t\t\t\t\"-//w3c//dtd html 4.01 frameset//\"\r\n\t\t\t\t].some(publicIdStartsWith)))\r\n\t\t\t)\r\n\t\t\t|| (systemId != null && (systemId.toLowerCase() == \"http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd\"))\r\n\t\t) {\r\n\t\t\ttree.compatMode = \"quirks\";\r\n\t\t\ttree.parseError(\"quirky-doctype\");\r\n\t\t} else if (publicId != null && ([\r\n\t\t\t\t\"-//w3c//dtd xhtml 1.0 transitional//\",\r\n\t\t\t\t\"-//w3c//dtd xhtml 1.0 frameset//\"\r\n\t\t\t].some(publicIdStartsWith)\r\n\t\t\t|| (systemId != null && [\r\n\t\t\t\t\"-//w3c//dtd html 4.01 transitional//\",\r\n\t\t\t\t\"-//w3c//dtd html 4.01 frameset//\"\r\n\t\t\t].indexOf(publicId.toLowerCase()) > -1))\r\n\t\t) {\r\n\t\t\ttree.compatMode = \"limited quirks\";\r\n\t\t\ttree.parseError(\"almost-standards-doctype\");\r\n\t\t} else {\r\n\t\t\tif ((publicId == \"-//W3C//DTD HTML 4.0//EN\" && (systemId == null || systemId == \"http://www.w3.org/TR/REC-html40/strict.dtd\"))\r\n\t\t\t\t|| (publicId == \"-//W3C//DTD HTML 4.01//EN\" && (systemId == null || systemId == \"http://www.w3.org/TR/html4/strict.dtd\"))\r\n\t\t\t\t|| (publicId == \"-//W3C//DTD XHTML 1.0 Strict//EN\" && (systemId == \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\"))\r\n\t\t\t\t|| (publicId == \"-//W3C//DTD XHTML 1.1//EN\" && (systemId == \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\"))\r\n\t\t\t) {\r\n\t\t\t\t// warning\r\n\t\t\t\t//tree.warn(\"obsolete-doctype\");\r\n\t\t\t} else if (!((systemId == null || systemId == \"about:legacy-compat\") && publicId == null)) {\r\n\t\t\t\ttree.parseError(\"unknown-doctype\");\r\n\t\t\t}\r\n\t\t}\r\n\t\ttree.setInsertionMode('beforeHTML');\r\n\t\tfunction publicIdStartsWith(string) {\r\n\t\t\treturn publicId.toLowerCase().indexOf(string) === 0;\r\n\t\t}\r\n\t};\r\n\r\n\tmodes.initial.processCharacters = function(buffer) {\r\n\t\tbuffer.skipLeadingWhitespace();\r\n\t\tif (!buffer.length)\r\n\t\t\treturn;\r\n\t\ttree.parseError('expected-doctype-but-got-chars');\r\n\t\tthis.anythingElse();\r\n\t\ttree.insertionMode.processCharacters(buffer);\r\n\t};\r\n\r\n\tmodes.initial.processStartTag = function(name, attributes, selfClosing) {\r\n\t\ttree.parseError('expected-doctype-but-got-start-tag', {name: name});\r\n\t\tthis.anythingElse();\r\n\t\ttree.insertionMode.processStartTag(name, attributes, selfClosing);\r\n\t};\r\n\r\n\tmodes.initial.processEndTag = function(name) {\r\n\t\ttree.parseError('expected-doctype-but-got-end-tag', {name: name});\r\n\t\tthis.anythingElse();\r\n\t\ttree.insertionMode.processEndTag(name);\r\n\t};\r\n\r\n\tmodes.initial.anythingElse = function() {\r\n\t\ttree.compatMode = 'quirks';\r\n\t\ttree.setInsertionMode('beforeHTML');\r\n\t};\r\n\r\n\tmodes.beforeHTML = Object.create(modes.base);\r\n\r\n\tmodes.beforeHTML.start_tag_handlers = {\r\n\t\thtml: 'startTagHtml',\r\n\t\t'-default': 'startTagOther'\r\n\t};\r\n\r\n\tmodes.beforeHTML.processEOF = function() {\r\n\t\tthis.anythingElse();\r\n\t\ttree.insertionMode.processEOF();\r\n\t};\r\n\r\n\tmodes.beforeHTML.processComment = function(data) {\r\n\t\ttree.insertComment(data, tree.document);\r\n\t};\r\n\r\n\tmodes.beforeHTML.processCharacters = function(buffer) {\r\n\t\tbuffer.skipLeadingWhitespace();\r\n\t\tif (!buffer.length)\r\n\t\t\treturn;\r\n\t\tthis.anythingElse();\r\n\t\ttree.insertionMode.processCharacters(buffer);\r\n\t};\r\n\r\n\tmodes.beforeHTML.startTagHtml = function(name, attributes, selfClosing) {\r\n\t\ttree.insertHtmlElement(attributes);\r\n\t\ttree.setInsertionMode('beforeHead');\r\n\t};\r\n\r\n\tmodes.beforeHTML.startTagOther = function(name, attributes, selfClosing) {\r\n\t\tthis.anythingElse();\r\n\t\ttree.insertionMode.processStartTag(name, attributes, selfClosing);\r\n\t};\r\n\r\n\tmodes.beforeHTML.processEndTag = function(name) {\r\n\t\tthis.anythingElse();\r\n\t\ttree.insertionMode.processEndTag(name);\r\n\t};\r\n\r\n\tmodes.beforeHTML.anythingElse = function() {\r\n\t\ttree.insertHtmlElement();\r\n\t\ttree.setInsertionMode('beforeHead');\r\n\t};\r\n\r\n\tmodes.afterAfterBody = Object.create(modes.base);\r\n\r\n\tmodes.afterAfterBody.start_tag_handlers = {\r\n\t\thtml: 'startTagHtml',\r\n\t\t'-default': 'startTagOther'\r\n\t};\r\n\r\n\tmodes.afterAfterBody.processComment = function(data) {\r\n\t\ttree.insertComment(data, tree.document);\r\n\t};\r\n\r\n\tmodes.afterAfterBody.processDoctype = function(data) {\r\n\t\tmodes.inBody.processDoctype(data);\r\n\t};\r\n\r\n\tmodes.afterAfterBody.startTagHtml = function(data, attributes) {\r\n\t\tmodes.inBody.startTagHtml(data, attributes);\r\n\t};\r\n\r\n\tmodes.afterAfterBody.startTagOther = function(name, attributes, selfClosing) {\r\n\t\ttree.parseError('unexpected-start-tag', {name: name});\r\n\t\ttree.setInsertionMode('inBody');\r\n\t\ttree.insertionMode.processStartTag(name, attributes, selfClosing);\r\n\t};\r\n\r\n\tmodes.afterAfterBody.endTagOther = function(name) {\r\n\t\ttree.parseError('unexpected-end-tag', {name: name});\r\n\t\ttree.setInsertionMode('inBody');\r\n\t\ttree.insertionMode.processEndTag(name);\r\n\t};\r\n\r\n\tmodes.afterAfterBody.processCharacters = function(data) {\r\n\t\tif (!isAllWhitespace(data.characters)) {\r\n\t\t\ttree.parseError('unexpected-char-after-body');\r\n\t\t\ttree.setInsertionMode('inBody');\r\n\t\t\treturn tree.insertionMode.processCharacters(data);\r\n\t\t}\r\n\t\tmodes.inBody.processCharacters(data);\r\n\t};\r\n\r\n\tmodes.afterBody = Object.create(modes.base);\r\n\r\n\tmodes.afterBody.end_tag_handlers = {\r\n\t\thtml: 'endTagHtml',\r\n\t\t'-default': 'endTagOther'\r\n\t};\r\n\r\n\tmodes.afterBody.processComment = function(data) {\r\n\t\t// This is needed because data is to be appended to the html element here\r\n\t\t// and not to whatever is currently open.\r\n\t\ttree.insertComment(data, tree.openElements.rootNode);\r\n\t};\r\n\r\n\tmodes.afterBody.processCharacters = function(data) {\r\n\t\tif (!isAllWhitespace(data.characters)) {\r\n\t\t\ttree.parseError('unexpected-char-after-body');\r\n\t\t\ttree.setInsertionMode('inBody');\r\n\t\t\treturn tree.insertionMode.processCharacters(data);\r\n\t\t}\r\n\t\tmodes.inBody.processCharacters(data);\r\n\t};\r\n\r\n\tmodes.afterBody.processStartTag = function(name, attributes, selfClosing) {\r\n\t\ttree.parseError('unexpected-start-tag-after-body', {name: name});\r\n\t\ttree.setInsertionMode('inBody');\r\n\t\ttree.insertionMode.processStartTag(name, attributes, selfClosing);\r\n\t};\r\n\r\n\tmodes.afterBody.endTagHtml = function(name) {\r\n\t\tif (tree.context) {\r\n\t\t\ttree.parseError('end-html-in-innerhtml');\r\n\t\t} else {\r\n\t\t\t// XXX This may need to be done, not sure\r\n\t\t\t// Don't set last_phase to the current phase but to the inBody phase\r\n\t\t\t// instead. No need for extra parseErrors if there's something after\r\n\t\t\t// </html>.\r\n\t\t\t// Try <!doctype html>X</html>X for instance\r\n\t\t\ttree.setInsertionMode('afterAfterBody');\r\n\t\t}\r\n\t};\r\n\r\n\tmodes.afterBody.endTagOther = function(name) {\r\n\t\ttree.parseError('unexpected-end-tag-after-body', {name: name});\r\n\t\ttree.setInsertionMode('inBody');\r\n\t\ttree.insertionMode.processEndTag(name);\r\n\t};\r\n\r\n\tmodes.afterFrameset = Object.create(modes.base);\r\n\r\n\tmodes.afterFrameset.start_tag_handlers = {\r\n\t\thtml: 'startTagHtml',\r\n\t\tnoframes: 'startTagNoframes',\r\n\t\t'-default': 'startTagOther'\r\n\t};\r\n\r\n\tmodes.afterFrameset.end_tag_handlers = {\r\n\t\thtml: 'endTagHtml',\r\n\t\t'-default': 'endTagOther'\r\n\t};\r\n\r\n\tmodes.afterFrameset.processCharacters = function(buffer) {\r\n\t\tvar characters = buffer.takeRemaining();\r\n\t\tvar whitespace = \"\";\r\n\t\tfor (var i = 0; i < characters.length; i++) {\r\n\t\t\tvar ch = characters[i];\r\n\t\t\tif (isWhitespace(ch))\r\n\t\t\t\twhitespace += ch;\r\n\t\t}\r\n\t\tif (whitespace) {\r\n\t\t\ttree.insertText(whitespace);\r\n\t\t}\r\n\t\tif (whitespace.length < characters.length)\r\n\t\t\ttree.parseError('expected-eof-but-got-char');\r\n\t};\r\n\r\n\tmodes.afterFrameset.startTagNoframes = function(name, attributes) {\r\n\t\tmodes.inHead.processStartTag(name, attributes);\r\n\t};\r\n\r\n\tmodes.afterFrameset.startTagOther = function(name, attributes) {\r\n\t\ttree.parseError(\"unexpected-start-tag-after-frameset\", {name: name});\r\n\t};\r\n\r\n\tmodes.afterFrameset.endTagHtml = function(name) {\r\n\t\ttree.setInsertionMode('afterAfterFrameset');\r\n\t};\r\n\r\n\tmodes.afterFrameset.endTagOther = function(name) {\r\n\t\ttree.parseError(\"unexpected-end-tag-after-frameset\", {name: name});\r\n\t};\r\n\r\n\tmodes.beforeHead = Object.create(modes.base);\r\n\r\n\tmodes.beforeHead.start_tag_handlers = {\r\n\t\thtml: 'startTagHtml',\r\n\t\thead: 'startTagHead',\r\n\t\t'-default': 'startTagOther'\r\n\t};\r\n\r\n\tmodes.beforeHead.end_tag_handlers = {\r\n\t\thtml: 'endTagImplyHead',\r\n\t\thead: 'endTagImplyHead',\r\n\t\tbody: 'endTagImplyHead',\r\n\t\tbr: 'endTagImplyHead',\r\n\t\t'-default': 'endTagOther'\r\n\t};\r\n\r\n\tmodes.beforeHead.processEOF = function() {\r\n\t\tthis.startTagHead('head', []);\r\n\t\ttree.insertionMode.processEOF();\r\n\t};\r\n\r\n\tmodes.beforeHead.processCharacters = function(buffer) {\r\n\t\tbuffer.skipLeadingWhitespace();\r\n\t\tif (!buffer.length)\r\n\t\t\treturn;\r\n\t\tthis.startTagHead('head', []);\r\n\t\ttree.insertionMode.processCharacters(buffer);\r\n\t};\r\n\r\n\tmodes.beforeHead.startTagHead = function(name, attributes) {\r\n\t\ttree.insertHeadElement(attributes);\r\n\t\ttree.setInsertionMode('inHead');\r\n\t};\r\n\r\n\tmodes.beforeHead.startTagOther = function(name, attributes, selfClosing) {\r\n\t\tthis.startTagHead('head', []);\r\n\t\ttree.insertionMode.processStartTag(name, attributes, selfClosing);\r\n\t};\r\n\r\n\tmodes.beforeHead.endTagImplyHead = function(name) {\r\n\t\tthis.startTagHead('head', []);\r\n\t\ttree.insertionMode.processEndTag(name);\r\n\t};\r\n\r\n\tmodes.beforeHead.endTagOther = function(name) {\r\n\t\ttree.parseError('end-tag-after-implied-root', {name: name});\r\n\t};\r\n\r\n\tmodes.inHead = Object.create(modes.base);\r\n\r\n\tmodes.inHead.start_tag_handlers = {\r\n\t\thtml: 'startTagHtml',\r\n\t\thead: 'startTagHead',\r\n\t\ttitle: 'startTagTitle',\r\n\t\tscript: 'startTagScript',\r\n\t\tstyle: 'startTagNoFramesStyle',\r\n\t\tnoscript: 'startTagNoScript',\r\n\t\tnoframes: 'startTagNoFramesStyle',\r\n\t\tbase: 'startTagBaseBasefontBgsoundLink',\r\n\t\tbasefont: 'startTagBaseBasefontBgsoundLink',\r\n\t\tbgsound: 'startTagBaseBasefontBgsoundLink',\r\n\t\tlink: 'startTagBaseBasefontBgsoundLink',\r\n\t\tmeta: 'startTagMeta',\r\n\t\t\"-default\": 'startTagOther'\r\n\t};\r\n\r\n\tmodes.inHead.end_tag_handlers = {\r\n\t\thead: 'endTagHead',\r\n\t\thtml: 'endTagHtmlBodyBr',\r\n\t\tbody: 'endTagHtmlBodyBr',\r\n\t\tbr: 'endTagHtmlBodyBr',\r\n\t\t\"-default\": 'endTagOther'\r\n\t};\r\n\r\n\tmodes.inHead.processEOF = function() {\r\n\t\tvar name = tree.currentStackItem().localName;\r\n\t\tif (['title', 'style', 'script'].indexOf(name) != -1) {\r\n\t\t\ttree.parseError(\"expected-named-closing-tag-but-got-eof\", {name: name});\r\n\t\t\ttree.popElement();\r\n\t\t}\r\n\r\n\t\tthis.anythingElse();\r\n\r\n\t\ttree.insertionMode.processEOF();\r\n\t};\r\n\r\n\tmodes.inHead.processCharacters = function(buffer) {\r\n\t\tvar leadingWhitespace = buffer.takeLeadingWhitespace();\r\n\t\tif (leadingWhitespace)\r\n\t\t\ttree.insertText(leadingWhitespace);\r\n\t\tif (!buffer.length)\r\n\t\t\treturn;\r\n\t\tthis.anythingElse();\r\n\t\ttree.insertionMode.processCharacters(buffer);\r\n\t};\r\n\r\n\tmodes.inHead.startTagHtml = function(name, attributes) {\r\n\t\tmodes.inBody.processStartTag(name, attributes);\r\n\t};\r\n\r\n\tmodes.inHead.startTagHead = function(name, attributes) {\r\n\t\ttree.parseError('two-heads-are-not-better-than-one');\r\n\t};\r\n\r\n\tmodes.inHead.startTagTitle = function(name, attributes) {\r\n\t\ttree.processGenericRCDATAStartTag(name, attributes);\r\n\t};\r\n\r\n\tmodes.inHead.startTagNoScript = function(name, attributes) {\r\n\t\tif (tree.scriptingEnabled)\r\n\t\t\treturn tree.processGenericRawTextStartTag(name, attributes);\r\n\t\ttree.insertElement(name, attributes);\r\n\t\ttree.setInsertionMode('inHeadNoscript');\r\n\t};\r\n\r\n\tmodes.inHead.startTagNoFramesStyle = function(name, attributes) {\r\n\t\t// XXX Need to decide whether to implement the scripting disabled case\r\n\t\ttree.processGenericRawTextStartTag(name, attributes);\r\n\t};\r\n\r\n\tmodes.inHead.startTagScript = function(name, attributes) {\r\n\t\ttree.insertElement(name, attributes);\r\n\t\ttree.tokenizer.setState(Tokenizer.SCRIPT_DATA);\r\n\t\ttree.originalInsertionMode = tree.insertionModeName;\r\n\t\ttree.setInsertionMode('text');\r\n\t};\r\n\r\n\tmodes.inHead.startTagBaseBasefontBgsoundLink = function(name, attributes) {\r\n\t\ttree.insertSelfClosingElement(name, attributes);\r\n\t};\r\n\r\n\tmodes.inHead.startTagMeta = function(name, attributes) {\r\n\t\ttree.insertSelfClosingElement(name, attributes);\r\n\t\t// @todo process charset attributes\r\n\t};\r\n\r\n\tmodes.inHead.startTagOther = function(name, attributes, selfClosing) {\r\n\t\tthis.anythingElse();\r\n\t\ttree.insertionMode.processStartTag(name, attributes, selfClosing);\r\n\t};\r\n\r\n\tmodes.inHead.endTagHead = function(name) {\r\n\t\tif (tree.openElements.item(tree.openElements.length - 1).localName == 'head') {\r\n\t\t\ttree.openElements.pop();\r\n\t\t} else {\r\n\t\t\ttree.parseError('unexpected-end-tag', {name: 'head'});\r\n\t\t}\r\n\t\ttree.setInsertionMode('afterHead');\r\n\t};\r\n\r\n\tmodes.inHead.endTagHtmlBodyBr = function(name) {\r\n\t\tthis.anythingElse();\r\n\t\ttree.insertionMode.processEndTag(name);\r\n\t};\r\n\r\n\tmodes.inHead.endTagOther = function(name) {\r\n\t\ttree.parseError('unexpected-end-tag', {name: name});\r\n\t};\r\n\r\n\tmodes.inHead.anythingElse = function() {\r\n\t\tthis.endTagHead('head');\r\n\t};\r\n\r\n\tmodes.afterHead = Object.create(modes.base);\r\n\r\n\tmodes.afterHead.start_tag_handlers = {\r\n\t\thtml: 'startTagHtml',\r\n\t\thead: 'startTagHead',\r\n\t\tbody: 'startTagBody',\r\n\t\tframeset: 'startTagFrameset',\r\n\t\tbase: 'startTagFromHead',\r\n\t\tlink: 'startTagFromHead',\r\n\t\tmeta: 'startTagFromHead',\r\n\t\tscript: 'startTagFromHead',\r\n\t\t// XXX noframes: 'startTagFromHead' ?\r\n\t\tstyle: 'startTagFromHead',\r\n\t\ttitle: 'startTagFromHead',\r\n\t\t\"-default\": 'startTagOther'\r\n\t};\r\n\r\n\tmodes.afterHead.end_tag_handlers = {\r\n\t\tbody: 'endTagBodyHtmlBr',\r\n\t\thtml: 'endTagBodyHtmlBr',\r\n\t\tbr: 'endTagBodyHtmlBr',\r\n\t\t\"-default\": 'endTagOther'\r\n\t};\r\n\r\n\tmodes.afterHead.processEOF = function() {\r\n\t\tthis.anythingElse();\r\n\t\ttree.insertionMode.processEOF();\r\n\t};\r\n\r\n\tmodes.afterHead.processCharacters = function(buffer) {\r\n\t\tvar leadingWhitespace = buffer.takeLeadingWhitespace();\r\n\t\tif (leadingWhitespace)\r\n\t\t\ttree.insertText(leadingWhitespace);\r\n\t\tif (!buffer.length)\r\n\t\t\treturn;\r\n\t\tthis.anythingElse();\r\n\t\ttree.insertionMode.processCharacters(buffer);\r\n\t};\r\n\r\n\tmodes.afterHead.startTagHtml = function(name, attributes) {\r\n\t\tmodes.inBody.processStartTag(name, attributes);\r\n\t};\r\n\r\n\tmodes.afterHead.startTagBody = function(name, attributes) {\r\n\t\ttree.framesetOk = false;\r\n\t\ttree.insertBodyElement(attributes);\r\n\t\ttree.setInsertionMode('inBody');\r\n\t};\r\n\r\n\tmodes.afterHead.startTagFrameset = function(name, attributes) {\r\n\t\ttree.insertElement(name, attributes);\r\n\t\ttree.setInsertionMode('inFrameset');\r\n\t};\r\n\r\n\tmodes.afterHead.startTagFromHead = function(name, attributes, selfClosing) {\r\n\t\ttree.parseError(\"unexpected-start-tag-out-of-my-head\", {name: name});\r\n\t\t// FIXME head pointer\r\n\t\ttree.openElements.push(tree.head);\r\n\t\tmodes.inHead.processStartTag(name, attributes, selfClosing);\r\n\t\ttree.openElements.remove(tree.head);\r\n\t};\r\n\r\n\tmodes.afterHead.startTagHead = function(name, attributes, selfClosing) {\r\n\t\ttree.parseError('unexpected-start-tag', {name: name});\r\n\t};\r\n\r\n\tmodes.afterHead.startTagOther = function(name, attributes, selfClosing) {\r\n\t\tthis.anythingElse();\r\n\t\ttree.insertionMode.processStartTag(name, attributes, selfClosing);\r\n\t};\r\n\r\n\tmodes.afterHead.endTagBodyHtmlBr = function(name) {\r\n\t\tthis.anythingElse();\r\n\t\ttree.insertionMode.processEndTag(name);\r\n\t};\r\n\r\n\tmodes.afterHead.endTagOther = function(name) {\r\n\t\ttree.parseError('unexpected-end-tag', {name: name});\r\n\t};\r\n\r\n\tmodes.afterHead.anythingElse = function() {\r\n\t\ttree.insertBodyElement([]);\r\n\t\ttree.setInsertionMode('inBody');\r\n\t\ttree.framesetOk = true;\r\n\t}\r\n\r\n\tmodes.inBody = Object.create(modes.base);\r\n\r\n\tmodes.inBody.start_tag_handlers = {\r\n\t\thtml: 'startTagHtml',\r\n\t\thead: 'startTagMisplaced',\r\n\t\tbase: 'startTagProcessInHead',\r\n\t\tbasefont: 'startTagProcessInHead',\r\n\t\tbgsound: 'startTagProcessInHead',\r\n\t\tlink: 'startTagProcessInHead',\r\n\t\tmeta: 'startTagProcessInHead',\r\n\t\tnoframes: 'startTagProcessInHead',\r\n\t\tscript: 'startTagProcessInHead',\r\n\t\tstyle: 'startTagProcessInHead',\r\n\t\ttitle: 'startTagProcessInHead',\r\n\t\tbody: 'startTagBody',\r\n\t\tform: 'startTagForm',\r\n\t\tplaintext: 'startTagPlaintext',\r\n\t\ta: 'startTagA',\r\n\t\tbutton: 'startTagButton',\r\n\t\txmp: 'startTagXmp',\r\n\t\ttable: 'startTagTable',\r\n\t\thr: 'startTagHr',\r\n\t\timage: 'startTagImage',\r\n\t\tinput: 'startTagInput',\r\n\t\ttextarea: 'startTagTextarea',\r\n\t\tselect: 'startTagSelect',\r\n\t\tisindex: 'startTagIsindex',\r\n\t\tapplet:\t'startTagAppletMarqueeObject',\r\n\t\tmarquee:\t'startTagAppletMarqueeObject',\r\n\t\tobject:\t'startTagAppletMarqueeObject',\r\n\t\tli: 'startTagListItem',\r\n\t\tdd: 'startTagListItem',\r\n\t\tdt: 'startTagListItem',\r\n\t\taddress: 'startTagCloseP',\r\n\t\tarticle: 'startTagCloseP',\r\n\t\taside: 'startTagCloseP',\r\n\t\tblockquote: 'startTagCloseP',\r\n\t\tcenter: 'startTagCloseP',\r\n\t\tdetails: 'startTagCloseP',\r\n\t\tdir: 'startTagCloseP',\r\n\t\tdiv: 'startTagCloseP',\r\n\t\tdl: 'startTagCloseP',\r\n\t\tfieldset: 'startTagCloseP',\r\n\t\tfigcaption: 'startTagCloseP',\r\n\t\tfigure: 'startTagCloseP',\r\n\t\tfooter: 'startTagCloseP',\r\n\t\theader: 'startTagCloseP',\r\n\t\thgroup: 'startTagCloseP',\r\n\t\tmain: 'startTagCloseP',\r\n\t\tmenu: 'startTagCloseP',\r\n\t\tnav: 'startTagCloseP',\r\n\t\tol: 'startTagCloseP',\r\n\t\tp: 'startTagCloseP',\r\n\t\tsection: 'startTagCloseP',\r\n\t\tsummary: 'startTagCloseP',\r\n\t\tul: 'startTagCloseP',\r\n\t\tlisting: 'startTagPreListing',\r\n\t\tpre: 'startTagPreListing',\r\n\t\tb: 'startTagFormatting',\r\n\t\tbig: 'startTagFormatting',\r\n\t\tcode: 'startTagFormatting',\r\n\t\tem: 'startTagFormatting',\r\n\t\tfont: 'startTagFormatting',\r\n\t\ti: 'startTagFormatting',\r\n\t\ts: 'startTagFormatting',\r\n\t\tsmall: 'startTagFormatting',\r\n\t\tstrike: 'startTagFormatting',\r\n\t\tstrong: 'startTagFormatting',\r\n\t\ttt: 'startTagFormatting',\r\n\t\tu: 'startTagFormatting',\r\n\t\tnobr: 'startTagNobr',\r\n\t\tarea: 'startTagVoidFormatting',\r\n\t\tbr: 'startTagVoidFormatting',\r\n\t\tembed: 'startTagVoidFormatting',\r\n\t\timg: 'startTagVoidFormatting',\r\n\t\tkeygen: 'startTagVoidFormatting',\r\n\t\twbr: 'startTagVoidFormatting',\r\n\t\tparam: 'startTagParamSourceTrack',\r\n\t\tsource: 'startTagParamSourceTrack',\r\n\t\ttrack: 'startTagParamSourceTrack',\r\n\t\tiframe: 'startTagIFrame',\r\n\t\tnoembed: 'startTagRawText',\r\n\t\tnoscript: 'startTagRawText',\r\n\t\th1: 'startTagHeading',\r\n\t\th2: 'startTagHeading',\r\n\t\th3: 'startTagHeading',\r\n\t\th4: 'startTagHeading',\r\n\t\th5: 'startTagHeading',\r\n\t\th6: 'startTagHeading',\r\n\t\tcaption: 'startTagMisplaced',\r\n\t\tcol: 'startTagMisplaced',\r\n\t\tcolgroup: 'startTagMisplaced',\r\n\t\tframe: 'startTagMisplaced',\r\n\t\tframeset: 'startTagFrameset',\r\n\t\ttbody: 'startTagMisplaced',\r\n\t\ttd: 'startTagMisplaced',\r\n\t\ttfoot: 'startTagMisplaced',\r\n\t\tth: 'startTagMisplaced',\r\n\t\tthead: 'startTagMisplaced',\r\n\t\ttr: 'startTagMisplaced',\r\n\t\toption: 'startTagOptionOptgroup',\r\n\t\toptgroup: 'startTagOptionOptgroup',\r\n\t\tmath: 'startTagMath',\r\n\t\tsvg: 'startTagSVG',\r\n\t\trt: 'startTagRpRt',\r\n\t\trp: 'startTagRpRt',\r\n\t\t\"-default\": 'startTagOther'\r\n\t};\r\n\r\n\tmodes.inBody.end_tag_handlers = {\r\n\t\tp: 'endTagP',\r\n\t\tbody: 'endTagBody',\r\n\t\thtml: 'endTagHtml',\r\n\t\taddress: 'endTagBlock',\r\n\t\tarticle: 'endTagBlock',\r\n\t\taside: 'endTagBlock',\r\n\t\tblockquote: 'endTagBlock',\r\n\t\tbutton: 'endTagBlock',\r\n\t\tcenter: 'endTagBlock',\r\n\t\tdetails: 'endTagBlock',\r\n\t\tdir: 'endTagBlock',\r\n\t\tdiv: 'endTagBlock',\r\n\t\tdl: 'endTagBlock',\r\n\t\tfieldset: 'endTagBlock',\r\n\t\tfigcaption: 'endTagBlock',\r\n\t\tfigure: 'endTagBlock',\r\n\t\tfooter: 'endTagBlock',\r\n\t\theader: 'endTagBlock',\r\n\t\thgroup: 'endTagBlock',\r\n\t\tlisting: 'endTagBlock',\r\n\t\tmain: 'endTagBlock',\r\n\t\tmenu: 'endTagBlock',\r\n\t\tnav: 'endTagBlock',\r\n\t\tol: 'endTagBlock',\r\n\t\tpre: 'endTagBlock',\r\n\t\tsection: 'endTagBlock',\r\n\t\tsummary: 'endTagBlock',\r\n\t\tul: 'endTagBlock',\r\n\t\tform: 'endTagForm',\r\n\t\tapplet: 'endTagAppletMarqueeObject',\r\n\t\tmarquee: 'endTagAppletMarqueeObject',\r\n\t\tobject: 'endTagAppletMarqueeObject',\r\n\t\tdd: 'endTagListItem',\r\n\t\tdt: 'endTagListItem',\r\n\t\tli: 'endTagListItem',\r\n\t\th1: 'endTagHeading',\r\n\t\th2: 'endTagHeading',\r\n\t\th3: 'endTagHeading',\r\n\t\th4: 'endTagHeading',\r\n\t\th5: 'endTagHeading',\r\n\t\th6: 'endTagHeading',\r\n\t\ta: 'endTagFormatting',\r\n\t\tb: 'endTagFormatting',\r\n\t\tbig: 'endTagFormatting',\r\n\t\tcode: 'endTagFormatting',\r\n\t\tem: 'endTagFormatting',\r\n\t\tfont: 'endTagFormatting',\r\n\t\ti: 'endTagFormatting',\r\n\t\tnobr: 'endTagFormatting',\r\n\t\ts: 'endTagFormatting',\r\n\t\tsmall: 'endTagFormatting',\r\n\t\tstrike: 'endTagFormatting',\r\n\t\tstrong: 'endTagFormatting',\r\n\t\ttt: 'endTagFormatting',\r\n\t\tu: 'endTagFormatting',\r\n\t\tbr: 'endTagBr',\r\n\t\t\"-default\": 'endTagOther'\r\n\t};\r\n\r\n\tmodes.inBody.processCharacters = function(buffer) {\r\n\t\tif (tree.shouldSkipLeadingNewline) {\r\n\t\t\ttree.shouldSkipLeadingNewline = false;\r\n\t\t\tbuffer.skipAtMostOneLeadingNewline();\r\n\t\t}\r\n\t\ttree.reconstructActiveFormattingElements();\r\n\t\tvar characters = buffer.takeRemaining();\r\n\t\tcharacters = characters.replace(/\\u0000/g, function(match, index){\r\n\t\t\t// @todo position\r\n\t\t\ttree.parseError(\"invalid-codepoint\");\r\n\t\t\treturn '';\r\n\t\t});\r\n\t\tif (!characters)\r\n\t\t\treturn;\r\n\t\ttree.insertText(characters);\r\n\t\tif (tree.framesetOk && !isAllWhitespaceOrReplacementCharacters(characters))\r\n\t\t\ttree.framesetOk = false;\r\n\t};\r\n\r\n\tmodes.inBody.startTagHtml = function(name, attributes) {\r\n\t\ttree.parseError('non-html-root');\r\n\t\ttree.addAttributesToElement(tree.openElements.rootNode, attributes);\r\n\t};\r\n\r\n\tmodes.inBody.startTagProcessInHead = function(name, attributes) {\r\n\t\tmodes.inHead.processStartTag(name, attributes);\r\n\t};\r\n\r\n\tmodes.inBody.startTagBody = function(name, attributes) {\r\n\t\ttree.parseError('unexpected-start-tag', {name: 'body'});\r\n\t\tif (tree.openElements.length == 1 ||\r\n\t\t\ttree.openElements.item(1).localName != 'body') {\r\n\t\t\tassert.ok(tree.context);\r\n\t\t} else {\r\n\t\t\ttree.framesetOk = false;\r\n\t\t\ttree.addAttributesToElement(tree.openElements.bodyElement, attributes);\r\n\t\t}\r\n\t};\r\n\r\n\tmodes.inBody.startTagFrameset = function(name, attributes) {\r\n\t\ttree.parseError('unexpected-start-tag', {name: 'frameset'});\r\n\t\tif (tree.openElements.length == 1 ||\r\n\t\t\ttree.openElements.item(1).localName != 'body') {\r\n\t\t\tassert.ok(tree.context);\r\n\t\t} else if (tree.framesetOk) {\r\n\t\t\ttree.detachFromParent(tree.openElements.bodyElement);\r\n\t\t\twhile (tree.openElements.length > 1)\r\n\t\t\t\ttree.openElements.pop();\r\n\t\t\ttree.insertElement(name, attributes);\r\n\t\t\ttree.setInsertionMode('inFrameset');\r\n\t\t}\r\n\t};\r\n\r\n\tmodes.inBody.startTagCloseP = function(name, attributes) {\r\n\t\tif (tree.openElements.inButtonScope('p'))\r\n\t\t\tthis.endTagP('p');\r\n\t\ttree.insertElement(name, attributes);\r\n\t};\r\n\r\n\tmodes.inBody.startTagPreListing = function(name, attributes) {\r\n\t\tif (tree.openElements.inButtonScope('p'))\r\n\t\t\tthis.endTagP('p');\r\n\t\ttree.insertElement(name, attributes);\r\n\t\ttree.framesetOk = false;\r\n\t\ttree.shouldSkipLeadingNewline = true;\r\n\t};\r\n\r\n\tmodes.inBody.startTagForm = function(name, attributes) {\r\n\t\tif (tree.form) {\r\n\t\t\ttree.parseError('unexpected-start-tag', {name: name});\r\n\t\t} else {\r\n\t\t\tif (tree.openElements.inButtonScope('p'))\r\n\t\t\t\tthis.endTagP('p');\r\n\t\t\ttree.insertElement(name, attributes);\r\n\t\t\ttree.form = tree.currentStackItem();\r\n\t\t}\r\n\t};\r\n\r\n\tmodes.inBody.startTagRpRt = function(name, attributes) {\r\n\t\tif (tree.openElements.inScope('ruby')) {\r\n\t\t\ttree.generateImpliedEndTags();\r\n\t\t\tif (tree.currentStackItem().localName != 'ruby') {\r\n\t\t\t\ttree.parseError('unexpected-start-tag', {name: name});\r\n\t\t\t}\r\n\t\t}\r\n\t\ttree.insertElement(name, attributes);\r\n\t};\r\n\r\n\tmodes.inBody.startTagListItem = function(name, attributes) {\r\n\t\t/// @todo: Fix according to current spec. http://www.w3.org/TR/html5/tree-construction.html#parsing-main-inbody\r\n\t\tvar stopNames = {li: ['li'], dd: ['dd', 'dt'], dt: ['dd', 'dt']};\r\n\t\tvar stopName = stopNames[name];\r\n\r\n\t\tvar els = tree.openElements;\r\n\t\tfor (var i = els.length - 1; i >= 0; i--) {\r\n\t\t\tvar node = els.item(i);\r\n\t\t\tif (stopName.indexOf(node.localName) != -1) {\r\n\t\t\t\ttree.insertionMode.processEndTag(node.localName);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\t// todo isScoping()\r\n\t\t\tif (node.isSpecial() && node.localName !== 'p' && node.localName !== 'address' && node.localName !== 'div')\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t\tif (tree.openElements.inButtonScope('p'))\r\n\t\t\tthis.endTagP('p');\r\n\r\n\t\t// Always insert an <li> element\r\n\t\ttree.insertElement(name, attributes);\r\n\t\ttree.framesetOk = false;\r\n\t};\r\n\r\n\tmodes.inBody.startTagPlaintext = function(name, attributes) {\r\n\t\tif (tree.openElements.inButtonScope('p'))\r\n\t\t\tthis.endTagP('p');\r\n\t\ttree.insertElement(name, attributes);\r\n\t\ttree.tokenizer.setState(Tokenizer.PLAINTEXT);\r\n\t};\r\n\r\n\tmodes.inBody.startTagHeading = function(name, attributes) {\r\n\t\tif (tree.openElements.inButtonScope('p'))\r\n\t\t\tthis.endTagP('p');\r\n\t\tif (tree.currentStackItem().isNumberedHeader()) {\r\n\t\t\ttree.parseError('unexpected-start-tag', {name: name});\r\n\t\t\ttree.popElement();\r\n\t\t}\r\n\t\ttree.insertElement(name, attributes);\r\n\t};\r\n\r\n\tmodes.inBody.startTagA = function(name, attributes) {\r\n\t\tvar activeA = tree.elementInActiveFormattingElements('a');\r\n\t\tif (activeA) {\r\n\t\t\ttree.parseError(\"unexpected-start-tag-implies-end-tag\", {startName: \"a\", endName: \"a\"});\r\n\t\t\ttree.adoptionAgencyEndTag('a');\r\n\t\t\tif (tree.openElements.contains(activeA))\r\n\t\t\t\ttree.openElements.remove(activeA);\r\n\t\t\ttree.removeElementFromActiveFormattingElements(activeA);\r\n\t\t}\r\n\t\ttree.reconstructActiveFormattingElements();\r\n\t\ttree.insertFormattingElement(name, attributes);\r\n\t};\r\n\r\n\tmodes.inBody.startTagFormatting = function(name, attributes) {\r\n\t\ttree.reconstructActiveFormattingElements();\r\n\t\ttree.insertFormattingElement(name, attributes);\r\n\t};\r\n\r\n\tmodes.inBody.startTagNobr = function(name, attributes) {\r\n\t\ttree.reconstructActiveFormattingElements();\r\n\t\tif (tree.openElements.inScope('nobr')) {\r\n\t\t\ttree.parseError(\"unexpected-start-tag-implies-end-tag\", {startName: 'nobr', endName: 'nobr'});\r\n\t\t\tthis.processEndTag('nobr');\r\n\t\t\t\t// XXX Need tests that trigger the following\r\n\t\t\t\ttree.reconstructActiveFormattingElements();\r\n\t\t}\r\n\t\ttree.insertFormattingElement(name, attributes);\r\n\t};\r\n\r\n\tmodes.inBody.startTagButton = function(name, attributes) {\r\n\t\tif (tree.openElements.inScope('button')) {\r\n\t\t\ttree.parseError('unexpected-start-tag-implies-end-tag', {startName: 'button', endName: 'button'});\r\n\t\t\tthis.processEndTag('button');\r\n\t\t\ttree.insertionMode.processStartTag(name, attributes);\r\n\t\t} else {\r\n\t\t\ttree.framesetOk = false;\r\n\t\t\ttree.reconstructActiveFormattingElements();\r\n\t\t\ttree.insertElement(name, attributes);\r\n\t\t}\r\n\t};\r\n\r\n\tmodes.inBody.startTagAppletMarqueeObject = function(name, attributes) {\r\n\t\ttree.reconstructActiveFormattingElements();\r\n\t\ttree.insertElement(name, attributes);\r\n\t\ttree.activeFormattingElements.push(Marker);\r\n\t\ttree.framesetOk = false;\r\n\t};\r\n\r\n\tmodes.inBody.endTagAppletMarqueeObject = function(name) {\r\n\t\tif (!tree.openElements.inScope(name)) {\r\n\t\t\ttree.parseError(\"unexpected-end-tag\", {name: name});\r\n\t\t} else {\r\n\t\t\ttree.generateImpliedEndTags();\r\n\t\t\tif (tree.currentStackItem().localName != name) {\r\n\t\t\t\ttree.parseError('end-tag-too-early', {name: name});\r\n\t\t\t}\r\n\t\t\ttree.openElements.popUntilPopped(name);\r\n\t\t\ttree.clearActiveFormattingElements();\r\n\t\t}\r\n\t};\r\n\r\n\tmodes.inBody.startTagXmp = function(name, attributes) {\r\n\t\tif (tree.openElements.inButtonScope('p'))\r\n\t\t\tthis.processEndTag('p');\r\n\t\ttree.reconstructActiveFormattingElements();\r\n\t\ttree.processGenericRawTextStartTag(name, attributes);\r\n\t\ttree.framesetOk = false;\r\n\t};\r\n\r\n\tmodes.inBody.startTagTable = function(name, attributes) {\r\n\t\tif (tree.compatMode !== \"quirks\")\r\n\t\t\tif (tree.openElements.inButtonScope('p'))\r\n\t\t\t\tthis.processEndTag('p');\r\n\t\ttree.insertElement(name, attributes);\r\n\t\ttree.setInsertionMode('inTable');\r\n\t\ttree.framesetOk = false;\r\n\t};\r\n\r\n\tmodes.inBody.startTagVoidFormatting = function(name, attributes) {\r\n\t\ttree.reconstructActiveFormattingElements();\r\n\t\ttree.insertSelfClosingElement(name, attributes);\r\n\t\ttree.framesetOk = false;\r\n\t};\r\n\r\n\tmodes.inBody.startTagParamSourceTrack = function(name, attributes) {\r\n\t\ttree.insertSelfClosingElement(name, attributes);\r\n\t};\r\n\r\n\tmodes.inBody.startTagHr = function(name, attributes) {\r\n\t\tif (tree.openElements.inButtonScope('p'))\r\n\t\t\tthis.endTagP('p');\r\n\t\ttree.insertSelfClosingElement(name, attributes);\r\n\t\ttree.framesetOk = false;\r\n\t};\r\n\r\n\tmodes.inBody.startTagImage = function(name, attributes) {\r\n\t\t// No, really...\r\n\t\ttree.parseError('unexpected-start-tag-treated-as', {originalName: 'image', newName: 'img'});\r\n\t\tthis.processStartTag('img', attributes);\r\n\t};\r\n\r\n\tmodes.inBody.startTagInput = function(name, attributes) {\r\n\t\tvar currentFramesetOk = tree.framesetOk;\r\n\t\tthis.startTagVoidFormatting(name, attributes);\r\n\t\tfor (var key in attributes) {\r\n\t\t\t// input type=hidden doesn't change framesetOk\r\n\t\t\tif (attributes[key].nodeName == 'type') {\r\n\t\t\t\tif (attributes[key].nodeValue.toLowerCase() == 'hidden')\r\n\t\t\t\t\ttree.framesetOk = currentFramesetOk;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tmodes.inBody.startTagIsindex = function(name, attributes) {\r\n\t\ttree.parseError('deprecated-tag', {name: 'isindex'});\r\n\t\ttree.selfClosingFlagAcknowledged = true;\r\n\t\tif (tree.form)\r\n\t\t\treturn;\r\n\t\tvar formAttributes = [];\r\n\t\tvar inputAttributes = [];\r\n\t\tvar prompt = \"This is a searchable index. Enter search keywords: \";\r\n\t\tfor (var key in attributes) {\r\n\t\t\tswitch (attributes[key].nodeName) {\r\n\t\t\t\tcase 'action':\r\n\t\t\t\t\tformAttributes.push({nodeName: 'action',\r\n\t\t\t\t\t\tnodeValue: attributes[key].nodeValue});\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'prompt':\r\n\t\t\t\t\tprompt = attributes[key].nodeValue;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'name':\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tinputAttributes.push({nodeName: attributes[key].nodeName,\r\n\t\t\t\t\t\tnodeValue: attributes[key].nodeValue});\r\n\t\t\t}\r\n\t\t}\r\n\t\tinputAttributes.push({nodeName: 'name', nodeValue: 'isindex'});\r\n\t\tthis.processStartTag('form', formAttributes);\r\n\t\tthis.processStartTag('hr');\r\n\t\tthis.processStartTag('label');\r\n\t\tthis.processCharacters(new CharacterBuffer(prompt));\r\n\t\tthis.processStartTag('input', inputAttributes);\r\n\t\tthis.processEndTag('label');\r\n\t\tthis.processStartTag('hr');\r\n\t\tthis.processEndTag('form');\r\n\t};\r\n\r\n\tmodes.inBody.startTagTextarea = function(name, attributes) {\r\n\t\t// XXX Form element pointer checking here as well...\r\n\t\ttree.insertElement(name, attributes);\r\n\t\ttree.tokenizer.setState(Tokenizer.RCDATA);\r\n\t\ttree.originalInsertionMode = tree.insertionModeName;\r\n\t\ttree.shouldSkipLeadingNewline = true;\r\n\t\ttree.framesetOk = false;\r\n\t\ttree.setInsertionMode('text');\r\n\t};\r\n\r\n\tmodes.inBody.startTagIFrame = function(name, attributes) {\r\n\t\ttree.framesetOk = false;\r\n\t\tthis.startTagRawText(name, attributes);\r\n\t};\r\n\r\n\tmodes.inBody.startTagRawText = function(name, attributes) {\r\n\t\ttree.processGenericRawTextStartTag(name, attributes);\r\n\t};\r\n\r\n\tmodes.inBody.startTagSelect = function(name, attributes) {\r\n\t\ttree.reconstructActiveFormattingElements();\r\n\t\ttree.insertElement(name, attributes);\r\n\t\ttree.framesetOk = false;\r\n\t\tvar insertionModeName = tree.insertionModeName;\r\n\t\tif (insertionModeName == 'inTable' ||\r\n\t\t\tinsertionModeName == 'inCaption' ||\r\n\t\t\tinsertionModeName == 'inColumnGroup' ||\r\n\t\t\tinsertionModeName == 'inTableBody' ||\r\n\t\t\tinsertionModeName == 'inRow' ||\r\n\t\t\tinsertionModeName == 'inCell') {\r\n\t\t\ttree.setInsertionMode('inSelectInTable');\r\n\t\t} else {\r\n\t\t\ttree.setInsertionMode('inSelect');\r\n\t\t}\r\n\t};\r\n\r\n\tmodes.inBody.startTagMisplaced = function(name, attributes) {\r\n\t\ttree.parseError('unexpected-start-tag-ignored', {name: name});\r\n\t};\r\n\r\n\tmodes.inBody.endTagMisplaced = function(name) {\r\n\t\t// This handles elements with end tags in other insertion modes.\r\n\t\ttree.parseError(\"unexpected-end-tag\", {name: name});\r\n\t};\r\n\r\n\tmodes.inBody.endTagBr = function(name) {\r\n\t\ttree.parseError(\"unexpected-end-tag-treated-as\", {originalName: \"br\", newName: \"br element\"});\r\n\t\ttree.reconstructActiveFormattingElements();\r\n\t\ttree.insertElement(name, []);\r\n\t\ttree.popElement();\r\n\t};\r\n\r\n\tmodes.inBody.startTagOptionOptgroup = function(name, attributes) {\r\n\t\tif (tree.currentStackItem().localName == 'option')\r\n\t\t\ttree.popElement();\r\n\t\ttree.reconstructActiveFormattingElements();\r\n\t\ttree.insertElement(name, attributes);\r\n\t};\r\n\r\n\tmodes.inBody.startTagOther = function(name, attributes) {\r\n\t\ttree.reconstructActiveFormattingElements();\r\n\t\ttree.insertElement(name, attributes);\r\n\t};\r\n\r\n\tmodes.inBody.endTagOther = function(name) {\r\n\t\tvar node;\r\n\t\tfor (var i = tree.openElements.length - 1; i > 0; i--) {\r\n\t\t\tnode = tree.openElements.item(i);\r\n\t\t\tif (node.localName == name) {\r\n\t\t\t\ttree.generateImpliedEndTags(name);\r\n\t\t\t\tif (tree.currentStackItem().localName != name)\r\n\t\t\t\t\ttree.parseError('unexpected-end-tag', {name: name});\r\n\t\t\t\t// todo optimize\r\n\t\t\t\ttree.openElements.remove_openElements_until(function(x) {return x === node;});\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tif (node.isSpecial()) {\r\n\t\t\t\ttree.parseError('unexpected-end-tag', {name: name});\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tmodes.inBody.startTagMath = function(name, attributes, selfClosing) {\r\n\t\ttree.reconstructActiveFormattingElements();\r\n\t\tattributes = tree.adjustMathMLAttributes(attributes);\r\n\t\tattributes = tree.adjustForeignAttributes(attributes);\r\n\t\ttree.insertForeignElement(name, attributes, \"http://www.w3.org/1998/Math/MathML\", selfClosing);\r\n\t\t// Need to get the parse error right for the case where the token\r\n\t\t// has a namespace not equal to the xmlns attribute\r\n\t};\r\n\r\n\tmodes.inBody.startTagSVG = function(name, attributes, selfClosing) {\r\n\t\ttree.reconstructActiveFormattingElements();\r\n\t\tattributes = tree.adjustSVGAttributes(attributes);\r\n\t\tattributes = tree.adjustForeignAttributes(attributes);\r\n\t\ttree.insertForeignElement(name, attributes, \"http://www.w3.org/2000/svg\", selfClosing);\r\n\t\t// Need to get the parse error right for the case where the token\r\n\t\t// has a namespace not equal to the xmlns attribute\r\n\t};\r\n\r\n\tmodes.inBody.endTagP = function(name) {\r\n\t\tif (!tree.openElements.inButtonScope('p')) {\r\n\t\t\ttree.parseError('unexpected-end-tag', {name: 'p'});\r\n\t\t\tthis.startTagCloseP('p', []);\r\n\t\t\tthis.endTagP('p');\r\n\t\t} else {\r\n\t\t\ttree.generateImpliedEndTags('p');\r\n\t\t\tif (tree.currentStackItem().localName != 'p')\r\n\t\t\t\ttree.parseError('unexpected-implied-end-tag', {name: 'p'});\r\n\t\t\ttree.openElements.popUntilPopped(name);\r\n\t\t}\r\n\t};\r\n\r\n\tmodes.inBody.endTagBody = function(name) {\r\n\t\tif (!tree.openElements.inScope('body')) {\r\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t/// @todo Emit parse error on end tags other than the ones listed in http://www.w3.org/TR/html5/tree-construction.html#parsing-main-inbody\r\n\t\t// ['dd', 'dt', 'li', 'optgroup', 'option', 'p', 'rp', 'rt', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'body', 'html']\r\n\t\tif (tree.currentStackItem().localName != 'body') {\r\n\t\t\ttree.parseError('expected-one-end-tag-but-got-another', {\r\n\t\t\t\texpectedName: tree.currentStackItem().localName,\r\n\t\t\t\tgotName: name\r\n\t\t\t});\r\n\t\t}\r\n\t\ttree.setInsertionMode('afterBody');\r\n\t};\r\n\r\n\tmodes.inBody.endTagHtml = function(name) {\r\n\t\tif (!tree.openElements.inScope('body')) {\r\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t/// @todo Emit parse error on end tags other than the ones listed in http://www.w3.org/TR/html5/tree-construction.html#parsing-main-inbody\r\n\t\t// ['dd', 'dt', 'li', 'optgroup', 'option', 'p', 'rp', 'rt', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'body', 'html']\r\n\t\tif (tree.currentStackItem().localName != 'body') {\r\n\t\t\ttree.parseError('expected-one-end-tag-but-got-another', {\r\n\t\t\t\texpectedName: tree.currentStackItem().localName,\r\n\t\t\t\tgotName: name\r\n\t\t\t});\r\n\t\t}\r\n\t\ttree.setInsertionMode('afterBody');\r\n\t\ttree.insertionMode.processEndTag(name);\r\n\t};\r\n\r\n\tmodes.inBody.endTagBlock = function(name) {\r\n\t\tif (!tree.openElements.inScope(name)) {\r\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\r\n\t\t} else {\r\n\t\t\ttree.generateImpliedEndTags();\r\n\t\t\tif (tree.currentStackItem().localName != name) {\r\n\t\t\t\ttree.parseError('end-tag-too-early', {name: name});\r\n\t\t\t}\r\n\t\t\ttree.openElements.popUntilPopped(name);\r\n\t\t}\r\n\t};\r\n\r\n\tmodes.inBody.endTagForm = function(name)  {\r\n\t\tvar node = tree.form;\r\n\t\ttree.form = null;\r\n\t\tif (!node || !tree.openElements.inScope(name)) {\r\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\r\n\t\t} else {\r\n\t\t\ttree.generateImpliedEndTags();\r\n\t\t\tif (tree.currentStackItem() != node) {\r\n\t\t\t\ttree.parseError('end-tag-too-early-ignored', {name: 'form'});\r\n\t\t\t}\r\n\t\t\ttree.openElements.remove(node);\r\n\t\t}\r\n\t};\r\n\r\n\tmodes.inBody.endTagListItem = function(name) {\r\n\t\tif (!tree.openElements.inListItemScope(name)) {\r\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\r\n\t\t} else {\r\n\t\t\ttree.generateImpliedEndTags(name);\r\n\t\t\tif (tree.currentStackItem().localName != name)\r\n\t\t\t\ttree.parseError('end-tag-too-early', {name: name});\r\n\t\t\ttree.openElements.popUntilPopped(name);\r\n\t\t}\r\n\t};\r\n\r\n\tmodes.inBody.endTagHeading = function(name) {\r\n\t\tif (!tree.openElements.hasNumberedHeaderElementInScope()) {\r\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\r\n\t\t\treturn;\r\n\t\t}\r\n\t\ttree.generateImpliedEndTags();\r\n\t\tif (tree.currentStackItem().localName != name)\r\n\t\t\ttree.parseError('end-tag-too-early', {name: name});\r\n\r\n\t\ttree.openElements.remove_openElements_until(function(e) {\r\n\t\t\treturn e.isNumberedHeader();\r\n\t\t});\r\n\t};\r\n\r\n\tmodes.inBody.endTagFormatting = function(name, attributes) {\r\n\t\tif (!tree.adoptionAgencyEndTag(name))\r\n\t\t\tthis.endTagOther(name, attributes);\r\n\t};\r\n\r\n\tmodes.inCaption = Object.create(modes.base);\r\n\r\n\tmodes.inCaption.start_tag_handlers = {\r\n\t\thtml: 'startTagHtml',\r\n\t\tcaption: 'startTagTableElement',\r\n\t\tcol: 'startTagTableElement',\r\n\t\tcolgroup: 'startTagTableElement',\r\n\t\ttbody: 'startTagTableElement',\r\n\t\ttd: 'startTagTableElement',\r\n\t\ttfoot: 'startTagTableElement',\r\n\t\tthead: 'startTagTableElement',\r\n\t\ttr: 'startTagTableElement',\r\n\t\t'-default': 'startTagOther'\r\n\t};\r\n\r\n\tmodes.inCaption.end_tag_handlers = {\r\n\t\tcaption: 'endTagCaption',\r\n\t\ttable: 'endTagTable',\r\n\t\tbody: 'endTagIgnore',\r\n\t\tcol: 'endTagIgnore',\r\n\t\tcolgroup: 'endTagIgnore',\r\n\t\thtml: 'endTagIgnore',\r\n\t\ttbody: 'endTagIgnore',\r\n\t\ttd: 'endTagIgnore',\r\n\t\ttfood: 'endTagIgnore',\r\n\t\tthead: 'endTagIgnore',\r\n\t\ttr: 'endTagIgnore',\r\n\t\t'-default': 'endTagOther'\r\n\t};\r\n\r\n\tmodes.inCaption.processCharacters = function(data) {\r\n\t\tmodes.inBody.processCharacters(data);\r\n\t};\r\n\r\n\tmodes.inCaption.startTagTableElement = function(name, attributes) {\r\n\t\ttree.parseError('unexpected-end-tag', {name: name});\r\n\t\tvar ignoreEndTag = !tree.openElements.inTableScope('caption');\r\n\t\ttree.insertionMode.processEndTag('caption');\r\n\t\tif (!ignoreEndTag) tree.insertionMode.processStartTag(name, attributes);\r\n\t};\r\n\r\n\tmodes.inCaption.startTagOther = function(name, attributes, selfClosing) {\r\n\t\tmodes.inBody.processStartTag(name, attributes, selfClosing);\r\n\t};\r\n\r\n\tmodes.inCaption.endTagCaption = function(name) {\r\n\t\tif (!tree.openElements.inTableScope('caption')) {\r\n\t\t\t// context case\r\n\t\t\tassert.ok(tree.context);\r\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\r\n\t\t} else {\r\n\t\t\t// AT this code is quite similar to endTagTable in inTable\r\n\t\t\ttree.generateImpliedEndTags();\r\n\t\t\tif (tree.currentStackItem().localName != 'caption') {\r\n\t\t\t\t// @todo this is confusing for implied end tag\r\n\t\t\t\ttree.parseError('expected-one-end-tag-but-got-another', {\r\n\t\t\t\t\tgotName: \"caption\",\r\n\t\t\t\t\texpectedName: tree.currentStackItem().localName\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\ttree.openElements.popUntilPopped('caption');\r\n\t\t\ttree.clearActiveFormattingElements();\r\n\t\t\ttree.setInsertionMode('inTable');\r\n\t\t}\r\n\t};\r\n\r\n\tmodes.inCaption.endTagTable = function(name) {\r\n\t\ttree.parseError(\"unexpected-end-table-in-caption\");\r\n\t\tvar ignoreEndTag = !tree.openElements.inTableScope('caption');\r\n\t\ttree.insertionMode.processEndTag('caption');\r\n\t\tif (!ignoreEndTag) tree.insertionMode.processEndTag(name);\r\n\t};\r\n\r\n\tmodes.inCaption.endTagIgnore = function(name) {\r\n\t\ttree.parseError('unexpected-end-tag', {name: name});\r\n\t};\r\n\r\n\tmodes.inCaption.endTagOther = function(name) {\r\n\t\tmodes.inBody.processEndTag(name);\r\n\t};\r\n\r\n\tmodes.inCell = Object.create(modes.base);\r\n\r\n\tmodes.inCell.start_tag_handlers = {\r\n\t\thtml: 'startTagHtml',\r\n\t\tcaption: 'startTagTableOther',\r\n\t\tcol: 'startTagTableOther',\r\n\t\tcolgroup: 'startTagTableOther',\r\n\t\ttbody: 'startTagTableOther',\r\n\t\ttd: 'startTagTableOther',\r\n\t\ttfoot: 'startTagTableOther',\r\n\t\tth: 'startTagTableOther',\r\n\t\tthead: 'startTagTableOther',\r\n\t\ttr: 'startTagTableOther',\r\n\t\t'-default': 'startTagOther'\r\n\t};\r\n\r\n\tmodes.inCell.end_tag_handlers = {\r\n\t\ttd: 'endTagTableCell',\r\n\t\tth: 'endTagTableCell',\r\n\t\tbody: 'endTagIgnore',\r\n\t\tcaption: 'endTagIgnore',\r\n\t\tcol: 'endTagIgnore',\r\n\t\tcolgroup: 'endTagIgnore',\r\n\t\thtml: 'endTagIgnore',\r\n\t\ttable: 'endTagImply',\r\n\t\ttbody: 'endTagImply',\r\n\t\ttfoot: 'endTagImply',\r\n\t\tthead: 'endTagImply',\r\n\t\ttr: 'endTagImply',\r\n\t\t'-default': 'endTagOther'\r\n\t};\r\n\r\n\tmodes.inCell.processCharacters = function(data) {\r\n\t\tmodes.inBody.processCharacters(data);\r\n\t};\r\n\r\n\tmodes.inCell.startTagTableOther = function(name, attributes, selfClosing) {\r\n\t\tif (tree.openElements.inTableScope('td') || tree.openElements.inTableScope('th')) {\r\n\t\t\tthis.closeCell();\r\n\t\t\ttree.insertionMode.processStartTag(name, attributes, selfClosing);\r\n\t\t} else {\r\n\t\t\t// context case\r\n\t\t\ttree.parseError('unexpected-start-tag', {name: name});\r\n\t\t}\r\n\t};\r\n\r\n\tmodes.inCell.startTagOther = function(name, attributes, selfClosing) {\r\n\t\tmodes.inBody.processStartTag(name, attributes, selfClosing);\r\n\t};\r\n\r\n\tmodes.inCell.endTagTableCell = function(name) {\r\n\t\tif (tree.openElements.inTableScope(name)) {\r\n\t\t\ttree.generateImpliedEndTags(name);\r\n\t\t\tif (tree.currentStackItem().localName != name.toLowerCase()) {\r\n\t\t\t\ttree.parseError('unexpected-cell-end-tag', {name: name});\r\n\t\t\t\ttree.openElements.popUntilPopped(name);\r\n\t\t\t} else {\r\n\t\t\t\ttree.popElement();\r\n\t\t\t}\r\n\t\t\ttree.clearActiveFormattingElements();\r\n\t\t\ttree.setInsertionMode('inRow');\r\n\t\t} else {\r\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\r\n\t\t}\r\n\t};\r\n\r\n\tmodes.inCell.endTagIgnore = function(name) {\r\n\t\ttree.parseError('unexpected-end-tag', {name: name});\r\n\t};\r\n\r\n\tmodes.inCell.endTagImply = function(name) {\r\n\t\tif (tree.openElements.inTableScope(name)) {\r\n\t\t\tthis.closeCell();\r\n\t\t\ttree.insertionMode.processEndTag(name);\r\n\t\t} else {\r\n\t\t\t// sometimes context case\r\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\r\n\t\t}\r\n\t};\r\n\r\n\tmodes.inCell.endTagOther = function(name) {\r\n\t\tmodes.inBody.processEndTag(name);\r\n\t};\r\n\r\n\tmodes.inCell.closeCell = function() {\r\n\t\tif (tree.openElements.inTableScope('td')) {\r\n\t\t\tthis.endTagTableCell('td');\r\n\t\t} else if (tree.openElements.inTableScope('th')) {\r\n\t\t\tthis.endTagTableCell('th');\r\n\t\t}\r\n\t};\r\n\r\n\r\n\tmodes.inColumnGroup = Object.create(modes.base);\r\n\r\n\tmodes.inColumnGroup.start_tag_handlers = {\r\n\t\thtml: 'startTagHtml',\r\n\t\tcol: 'startTagCol',\r\n\t\t'-default': 'startTagOther'\r\n\t};\r\n\r\n\tmodes.inColumnGroup.end_tag_handlers = {\r\n\t\tcolgroup: 'endTagColgroup',\r\n\t\tcol: 'endTagCol',\r\n\t\t'-default': 'endTagOther'\r\n\t};\r\n\r\n\tmodes.inColumnGroup.ignoreEndTagColgroup = function() {\r\n\t\treturn tree.currentStackItem().localName == 'html';\r\n\t};\r\n\r\n\tmodes.inColumnGroup.processCharacters = function(buffer) {\r\n\t\tvar leadingWhitespace = buffer.takeLeadingWhitespace();\r\n\t\tif (leadingWhitespace)\r\n\t\t\ttree.insertText(leadingWhitespace);\r\n\t\tif (!buffer.length)\r\n\t\t\treturn;\r\n\t\tvar ignoreEndTag = this.ignoreEndTagColgroup();\r\n\t\tthis.endTagColgroup('colgroup');\r\n\t\tif (!ignoreEndTag) tree.insertionMode.processCharacters(buffer);\r\n\t};\r\n\r\n\tmodes.inColumnGroup.startTagCol = function(name, attributes) {\r\n\t\ttree.insertSelfClosingElement(name, attributes);\r\n\t};\r\n\r\n\tmodes.inColumnGroup.startTagOther = function(name, attributes, selfClosing) {\r\n\t\tvar ignoreEndTag = this.ignoreEndTagColgroup();\r\n\t\tthis.endTagColgroup('colgroup');\r\n\t\tif (!ignoreEndTag) tree.insertionMode.processStartTag(name, attributes, selfClosing);\r\n\t};\r\n\r\n\tmodes.inColumnGroup.endTagColgroup = function(name) {\r\n\t\tif (this.ignoreEndTagColgroup()) {\r\n\t\t\t// context case\r\n\t\t\tassert.ok(tree.context);\r\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\r\n\t\t} else {\r\n\t\t\ttree.popElement();\r\n\t\t\ttree.setInsertionMode('inTable');\r\n\t\t}\r\n\t};\r\n\r\n\tmodes.inColumnGroup.endTagCol = function(name) {\r\n\t\ttree.parseError(\"no-end-tag\", {name: 'col'});\r\n\t};\r\n\r\n\tmodes.inColumnGroup.endTagOther = function(name) {\r\n\t\tvar ignoreEndTag = this.ignoreEndTagColgroup();\r\n\t\tthis.endTagColgroup('colgroup');\r\n\t\tif (!ignoreEndTag) tree.insertionMode.processEndTag(name) ;\r\n\t};\r\n\r\n\tmodes.inForeignContent = Object.create(modes.base);\r\n\r\n\tmodes.inForeignContent.processStartTag = function(name, attributes, selfClosing) {\r\n\t\tif (['b', 'big', 'blockquote', 'body', 'br', 'center', 'code', 'dd', 'div', 'dl', 'dt', 'em', 'embed', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'hr', 'i', 'img', 'li', 'listing', 'menu', 'meta', 'nobr', 'ol', 'p', 'pre', 'ruby', 's', 'small', 'span', 'strong', 'strike', 'sub', 'sup', 'table', 'tt', 'u', 'ul', 'var'].indexOf(name) != -1\r\n\t\t\t\t|| (name == 'font' && attributes.some(function(attr){ return ['color', 'face', 'size'].indexOf(attr.nodeName) >= 0 }))) {\r\n\t\t\ttree.parseError('unexpected-html-element-in-foreign-content', {name: name});\r\n\t\t\twhile (tree.currentStackItem().isForeign()\r\n\t\t\t\t&& !tree.currentStackItem().isHtmlIntegrationPoint()\r\n\t\t\t\t&& !tree.currentStackItem().isMathMLTextIntegrationPoint()) {\r\n\t\t\t\ttree.openElements.pop();\r\n\t\t\t}\r\n\t\t\ttree.insertionMode.processStartTag(name, attributes, selfClosing);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (tree.currentStackItem().namespaceURI == \"http://www.w3.org/1998/Math/MathML\") {\r\n\t\t\tattributes = tree.adjustMathMLAttributes(attributes);\r\n\t\t}\r\n\t\tif (tree.currentStackItem().namespaceURI == \"http://www.w3.org/2000/svg\") {\r\n\t\t\tname = tree.adjustSVGTagNameCase(name);\r\n\t\t\tattributes = tree.adjustSVGAttributes(attributes);\r\n\t\t}\r\n\t\tattributes = tree.adjustForeignAttributes(attributes);\r\n\t\ttree.insertForeignElement(name, attributes, tree.currentStackItem().namespaceURI, selfClosing);\r\n\t};\r\n\r\n\tmodes.inForeignContent.processEndTag = function(name) {\r\n\t\tvar node = tree.currentStackItem();\r\n\t\tvar index = tree.openElements.length - 1;\r\n\t\tif (node.localName.toLowerCase() != name)\r\n\t\t\ttree.parseError(\"unexpected-end-tag\", {name: name});\r\n\r\n\t\twhile (true) {\r\n\t\t\tif (index === 0)\r\n\t\t\t\tbreak;\r\n\t\t\tif (node.localName.toLowerCase() == name) {\r\n\t\t\t\twhile (tree.openElements.pop() != node);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tindex -= 1;\r\n\t\t\tnode = tree.openElements.item(index);\r\n\t\t\tif (node.isForeign()) {\r\n\t\t\t\tcontinue;\r\n\t\t\t} else {\r\n\t\t\t\ttree.insertionMode.processEndTag(name);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tmodes.inForeignContent.processCharacters = function(buffer) {\r\n\t\tvar characters = buffer.takeRemaining();\r\n\t\tcharacters = characters.replace(/\\u0000/g, function(match, index){\r\n\t\t\t// @todo position\r\n\t\t\ttree.parseError('invalid-codepoint');\r\n\t\t\treturn '\\uFFFD';\r\n\t\t});\r\n\t\tif (tree.framesetOk && !isAllWhitespaceOrReplacementCharacters(characters))\r\n\t\t\ttree.framesetOk = false;\r\n\t\ttree.insertText(characters);\r\n\t};\r\n\r\n\tmodes.inHeadNoscript = Object.create(modes.base);\r\n\r\n\tmodes.inHeadNoscript.start_tag_handlers = {\r\n\t\thtml: 'startTagHtml',\r\n\t\tbasefont: 'startTagBasefontBgsoundLinkMetaNoframesStyle',\r\n\t\tbgsound: 'startTagBasefontBgsoundLinkMetaNoframesStyle',\r\n\t\tlink: 'startTagBasefontBgsoundLinkMetaNoframesStyle',\r\n\t\tmeta: 'startTagBasefontBgsoundLinkMetaNoframesStyle',\r\n\t\tnoframes: 'startTagBasefontBgsoundLinkMetaNoframesStyle',\r\n\t\tstyle: 'startTagBasefontBgsoundLinkMetaNoframesStyle',\r\n\t\thead: 'startTagHeadNoscript',\r\n\t\tnoscript: 'startTagHeadNoscript',\r\n\t\t\"-default\": 'startTagOther'\r\n\t};\r\n\r\n\tmodes.inHeadNoscript.end_tag_handlers = {\r\n\t\tnoscript: 'endTagNoscript',\r\n\t\tbr: 'endTagBr',\r\n\t\t'-default': 'endTagOther'\r\n\t};\r\n\r\n\tmodes.inHeadNoscript.processCharacters = function(buffer) {\r\n\t\tvar leadingWhitespace = buffer.takeLeadingWhitespace();\r\n\t\tif (leadingWhitespace)\r\n\t\t\ttree.insertText(leadingWhitespace);\r\n\t\tif (!buffer.length)\r\n\t\t\treturn;\r\n\t\t// FIXME error message\r\n\t\ttree.parseError(\"unexpected-char-in-frameset\");\r\n\t\tthis.anythingElse();\r\n\t\ttree.insertionMode.processCharacters(buffer);\r\n\t};\r\n\r\n\tmodes.inHeadNoscript.processComment = function(data) {\r\n\t\tmodes.inHead.processComment(data);\r\n\t};\r\n\r\n\tmodes.inHeadNoscript.startTagBasefontBgsoundLinkMetaNoframesStyle = function(name, attributes) {\r\n\t\tmodes.inHead.processStartTag(name, attributes);\r\n\t};\r\n\r\n\tmodes.inHeadNoscript.startTagHeadNoscript = function(name, attributes) {\r\n\t\t// FIXME error message\r\n\t\ttree.parseError(\"unexpected-start-tag-in-frameset\", {name: name});\r\n\t};\r\n\r\n\tmodes.inHeadNoscript.startTagOther = function(name, attributes) {\r\n\t\t// FIXME error message\r\n\t\ttree.parseError(\"unexpected-start-tag-in-frameset\", {name: name});\r\n\t\tthis.anythingElse();\r\n\t\ttree.insertionMode.processStartTag(name, attributes);\r\n\t};\r\n\r\n\tmodes.inHeadNoscript.endTagBr = function(name, attributes) {\r\n\t\t// FIXME error message\r\n\t\ttree.parseError(\"unexpected-end-tag-in-frameset\", {name: name});\r\n\t\tthis.anythingElse();\r\n\t\ttree.insertionMode.processEndTag(name, attributes);\r\n\t};\r\n\r\n\tmodes.inHeadNoscript.endTagNoscript = function(name, attributes) {\r\n\t\ttree.popElement();\r\n\t\ttree.setInsertionMode('inHead');\r\n\t};\r\n\r\n\tmodes.inHeadNoscript.endTagOther = function(name, attributes) {\r\n\t\t// FIXME error message\r\n\t\ttree.parseError(\"unexpected-end-tag-in-frameset\", {name: name});\r\n\t};\r\n\r\n\tmodes.inHeadNoscript.anythingElse = function() {\r\n\t\ttree.popElement();\r\n\t\ttree.setInsertionMode('inHead');\r\n\t};\r\n\r\n\r\n\tmodes.inFrameset = Object.create(modes.base);\r\n\r\n\tmodes.inFrameset.start_tag_handlers = {\r\n\t\thtml: 'startTagHtml',\r\n\t\tframeset: 'startTagFrameset',\r\n\t\tframe: 'startTagFrame',\r\n\t\tnoframes: 'startTagNoframes',\r\n\t\t\"-default\": 'startTagOther'\r\n\t};\r\n\r\n\tmodes.inFrameset.end_tag_handlers = {\r\n\t\tframeset: 'endTagFrameset',\r\n\t\tnoframes: 'endTagNoframes',\r\n\t\t'-default': 'endTagOther'\r\n\t};\r\n\r\n\tmodes.inFrameset.processCharacters = function(data) {\r\n\t\ttree.parseError(\"unexpected-char-in-frameset\");\r\n\t};\r\n\r\n\tmodes.inFrameset.startTagFrameset = function(name, attributes) {\r\n\t\ttree.insertElement(name, attributes);\r\n\t};\r\n\r\n\tmodes.inFrameset.startTagFrame = function(name, attributes) {\r\n\t\ttree.insertSelfClosingElement(name, attributes);\r\n\t};\r\n\r\n\tmodes.inFrameset.startTagNoframes = function(name, attributes) {\r\n\t\tmodes.inBody.processStartTag(name, attributes);\r\n\t};\r\n\r\n\tmodes.inFrameset.startTagOther = function(name, attributes) {\r\n\t\ttree.parseError(\"unexpected-start-tag-in-frameset\", {name: name});\r\n\t};\r\n\r\n\tmodes.inFrameset.endTagFrameset = function(name, attributes) {\r\n\t\tif (tree.currentStackItem().localName == 'html') {\r\n\t\t\t// context case\r\n\t\t\ttree.parseError(\"unexpected-frameset-in-frameset-innerhtml\");\r\n\t\t} else {\r\n\t\t\ttree.popElement();\r\n\t\t}\r\n\r\n\t\tif (!tree.context && tree.currentStackItem().localName != 'frameset') {\r\n\t\t\t// If we're not in context mode an the current node is not a \"frameset\" element (anymore) then switch\r\n\t\t\ttree.setInsertionMode('afterFrameset');\r\n\t\t}\r\n\t};\r\n\r\n\tmodes.inFrameset.endTagNoframes = function(name) {\r\n\t\tmodes.inBody.processEndTag(name);\r\n\t};\r\n\r\n\tmodes.inFrameset.endTagOther = function(name) {\r\n\t\ttree.parseError(\"unexpected-end-tag-in-frameset\", {name: name});\r\n\t};\r\n\r\n\tmodes.inTable = Object.create(modes.base);\r\n\r\n\tmodes.inTable.start_tag_handlers = {\r\n\t\thtml: 'startTagHtml',\r\n\t\tcaption: 'startTagCaption',\r\n\t\tcolgroup: 'startTagColgroup',\r\n\t\tcol: 'startTagCol',\r\n\t\ttable: 'startTagTable',\r\n\t\ttbody: 'startTagRowGroup',\r\n\t\ttfoot: 'startTagRowGroup',\r\n\t\tthead: 'startTagRowGroup',\r\n\t\ttd: 'startTagImplyTbody',\r\n\t\tth: 'startTagImplyTbody',\r\n\t\ttr: 'startTagImplyTbody',\r\n\t\tstyle: 'startTagStyleScript',\r\n\t\tscript: 'startTagStyleScript',\r\n\t\tinput: 'startTagInput',\r\n\t\tform: 'startTagForm',\r\n\t\t'-default': 'startTagOther'\r\n\t};\r\n\r\n\tmodes.inTable.end_tag_handlers = {\r\n\t\ttable: 'endTagTable',\r\n\t\tbody: 'endTagIgnore',\r\n\t\tcaption: 'endTagIgnore',\r\n\t\tcol: 'endTagIgnore',\r\n\t\tcolgroup: 'endTagIgnore',\r\n\t\thtml: 'endTagIgnore',\r\n\t\ttbody: 'endTagIgnore',\r\n\t\ttd: 'endTagIgnore',\r\n\t\ttfoot: 'endTagIgnore',\r\n\t\tth: 'endTagIgnore',\r\n\t\tthead: 'endTagIgnore',\r\n\t\ttr: 'endTagIgnore',\r\n\t\t'-default': 'endTagOther'\r\n\t};\r\n\r\n\tmodes.inTable.processCharacters =  function(data) {\r\n\t\tif (tree.currentStackItem().isFosterParenting()) {\r\n\t\t\tvar originalInsertionMode = tree.insertionModeName;\r\n\t\t\ttree.setInsertionMode('inTableText');\r\n\t\t\ttree.originalInsertionMode = originalInsertionMode;\r\n\t\t\ttree.insertionMode.processCharacters(data);\r\n\t\t} else {\r\n\t\t\ttree.redirectAttachToFosterParent = true;\r\n\t\t\tmodes.inBody.processCharacters(data);\r\n\t\t\ttree.redirectAttachToFosterParent = false;\r\n\t\t}\r\n\t};\r\n\r\n\tmodes.inTable.startTagCaption = function(name, attributes) {\r\n\t\ttree.openElements.popUntilTableScopeMarker();\r\n\t\ttree.activeFormattingElements.push(Marker);\r\n\t\ttree.insertElement(name, attributes);\r\n\t\ttree.setInsertionMode('inCaption');\r\n\t};\r\n\r\n\tmodes.inTable.startTagColgroup = function(name, attributes) {\r\n\t\ttree.openElements.popUntilTableScopeMarker();\r\n\t\ttree.insertElement(name, attributes);\r\n\t\ttree.setInsertionMode('inColumnGroup');\r\n\t};\r\n\r\n\tmodes.inTable.startTagCol = function(name, attributes) {\r\n\t\tthis.startTagColgroup('colgroup', []);\r\n\t\ttree.insertionMode.processStartTag(name, attributes);\r\n\t};\r\n\r\n\tmodes.inTable.startTagRowGroup = function(name, attributes) {\r\n\t\ttree.openElements.popUntilTableScopeMarker();\r\n\t\ttree.insertElement(name, attributes);\r\n\t\ttree.setInsertionMode('inTableBody');\r\n\t};\r\n\r\n\tmodes.inTable.startTagImplyTbody = function(name, attributes) {\r\n\t\tthis.startTagRowGroup('tbody', []);\r\n\t\ttree.insertionMode.processStartTag(name, attributes);\r\n\t};\r\n\r\n\tmodes.inTable.startTagTable = function(name, attributes) {\r\n\t\ttree.parseError(\"unexpected-start-tag-implies-end-tag\",\r\n\t\t\t\t{startName: \"table\", endName: \"table\"});\r\n\t\ttree.insertionMode.processEndTag('table');\r\n\t\tif (!tree.context) tree.insertionMode.processStartTag(name, attributes);\r\n\t};\r\n\r\n\tmodes.inTable.startTagStyleScript = function(name, attributes) {\r\n\t\tmodes.inHead.processStartTag(name, attributes);\r\n\t};\r\n\r\n\tmodes.inTable.startTagInput = function(name, attributes) {\r\n\t\tfor (var key in attributes) {\r\n\t\t\tif (attributes[key].nodeName.toLowerCase() == 'type') {\r\n\t\t\t\tif (attributes[key].nodeValue.toLowerCase() == 'hidden') {\r\n\t\t\t\t\ttree.parseError(\"unexpected-hidden-input-in-table\");\r\n\t\t\t\t\ttree.insertElement(name, attributes);\r\n\t\t\t\t\t// XXX associate with form\r\n\t\t\t\t\ttree.openElements.pop();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.startTagOther(name, attributes);\r\n\t};\r\n\r\n\tmodes.inTable.startTagForm = function(name, attributes) {\r\n\t\ttree.parseError(\"unexpected-form-in-table\");\r\n\t\tif (!tree.form) {\r\n\t\t\ttree.insertElement(name, attributes);\r\n\t\t\ttree.form = tree.currentStackItem();\r\n\t\t\ttree.openElements.pop();\r\n\t\t}\r\n\t};\r\n\r\n\tmodes.inTable.startTagOther = function(name, attributes, selfClosing) {\r\n\t\ttree.parseError(\"unexpected-start-tag-implies-table-voodoo\", {name: name});\r\n\t\ttree.redirectAttachToFosterParent = true;\r\n\t\tmodes.inBody.processStartTag(name, attributes, selfClosing);\r\n\t\ttree.redirectAttachToFosterParent = false;\r\n\t};\r\n\r\n\tmodes.inTable.endTagTable = function(name) {\r\n\t\tif (tree.openElements.inTableScope(name)) {\r\n\t\t\ttree.generateImpliedEndTags();\r\n\t\t\tif (tree.currentStackItem().localName != name) {\r\n\t\t\t\ttree.parseError(\"end-tag-too-early-named\", {gotName: 'table', expectedName: tree.currentStackItem().localName});\r\n\t\t\t}\r\n\r\n\t\t\ttree.openElements.popUntilPopped('table');\r\n\t\t\ttree.resetInsertionMode();\r\n\t\t} else {\r\n\t\t\tassert.ok(tree.context);\r\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\r\n\t\t}\r\n\t};\r\n\r\n\tmodes.inTable.endTagIgnore = function(name) {\r\n\t\ttree.parseError(\"unexpected-end-tag\", {name: name});\r\n\t};\r\n\r\n\tmodes.inTable.endTagOther = function(name) {\r\n\t\ttree.parseError(\"unexpected-end-tag-implies-table-voodoo\", {name: name});\r\n\t\t// Make all the special element rearranging voodoo kick in\r\n\t\ttree.redirectAttachToFosterParent = true;\r\n\t\t// Process the end tag in the \"in body\" mode\r\n\t\tmodes.inBody.processEndTag(name);\r\n\t\ttree.redirectAttachToFosterParent = false;\r\n\t};\r\n\r\n\tmodes.inTableText = Object.create(modes.base);\r\n\r\n\tmodes.inTableText.flushCharacters = function() {\r\n\t\tvar characters = tree.pendingTableCharacters.join('');\r\n\t\tif (!isAllWhitespace(characters)) {\r\n\t\t\ttree.redirectAttachToFosterParent = true;\r\n\t\t\ttree.reconstructActiveFormattingElements();\r\n\t\t\ttree.insertText(characters);\r\n\t\t\ttree.framesetOk = false;\r\n\t\t\ttree.redirectAttachToFosterParent = false;\r\n\t\t} else {\r\n\t\t\ttree.insertText(characters);\r\n\t\t}\r\n\t\ttree.pendingTableCharacters = [];\r\n\t};\r\n\r\n\tmodes.inTableText.processComment = function(data) {\r\n\t\tthis.flushCharacters();\r\n\t\ttree.setInsertionMode(tree.originalInsertionMode);\r\n\t\ttree.insertionMode.processComment(data);\r\n\t};\r\n\r\n\tmodes.inTableText.processEOF = function(data) {\r\n\t\tthis.flushCharacters();\r\n\t\ttree.setInsertionMode(tree.originalInsertionMode);\r\n\t\ttree.insertionMode.processEOF();\r\n\t};\r\n\r\n\tmodes.inTableText.processCharacters = function(buffer) {\r\n\t\tvar characters = buffer.takeRemaining();\r\n\t\tcharacters = characters.replace(/\\u0000/g, function(match, index){\r\n\t\t\t// @todo position\r\n\t\t\ttree.parseError(\"invalid-codepoint\");\r\n\t\t\treturn '';\r\n\t\t});\r\n\t\tif (!characters)\r\n\t\t\treturn;\r\n\t\ttree.pendingTableCharacters.push(characters);\r\n\t};\r\n\r\n\tmodes.inTableText.processStartTag = function(name, attributes, selfClosing) {\r\n\t\tthis.flushCharacters();\r\n\t\ttree.setInsertionMode(tree.originalInsertionMode);\r\n\t\ttree.insertionMode.processStartTag(name, attributes, selfClosing);\r\n\t};\r\n\r\n\tmodes.inTableText.processEndTag = function(name, attributes) {\r\n\t\tthis.flushCharacters();\r\n\t\ttree.setInsertionMode(tree.originalInsertionMode);\r\n\t\ttree.insertionMode.processEndTag(name, attributes);\r\n\t};\r\n\r\n\tmodes.inTableBody = Object.create(modes.base);\r\n\r\n\tmodes.inTableBody.start_tag_handlers = {\r\n\t\thtml: 'startTagHtml',\r\n\t\ttr: 'startTagTr',\r\n\t\ttd: 'startTagTableCell',\r\n\t\tth: 'startTagTableCell',\r\n\t\tcaption: 'startTagTableOther',\r\n\t\tcol: 'startTagTableOther',\r\n\t\tcolgroup: 'startTagTableOther',\r\n\t\ttbody: 'startTagTableOther',\r\n\t\ttfoot: 'startTagTableOther',\r\n\t\tthead: 'startTagTableOther',\r\n\t\t'-default': 'startTagOther'\r\n\t};\r\n\r\n\tmodes.inTableBody.end_tag_handlers = {\r\n\t\ttable: 'endTagTable',\r\n\t\ttbody: 'endTagTableRowGroup',\r\n\t\ttfoot: 'endTagTableRowGroup',\r\n\t\tthead: 'endTagTableRowGroup',\r\n\t\tbody: 'endTagIgnore',\r\n\t\tcaption: 'endTagIgnore',\r\n\t\tcol: 'endTagIgnore',\r\n\t\tcolgroup: 'endTagIgnore',\r\n\t\thtml: 'endTagIgnore',\r\n\t\ttd: 'endTagIgnore',\r\n\t\tth: 'endTagIgnore',\r\n\t\ttr: 'endTagIgnore',\r\n\t\t'-default': 'endTagOther'\r\n\t};\r\n\r\n\tmodes.inTableBody.processCharacters = function(data) {\r\n\t\tmodes.inTable.processCharacters(data);\r\n\t};\r\n\r\n\tmodes.inTableBody.startTagTr = function(name, attributes) {\r\n\t\ttree.openElements.popUntilTableBodyScopeMarker();\r\n\t\ttree.insertElement(name, attributes);\r\n\t\ttree.setInsertionMode('inRow');\r\n\t};\r\n\r\n\tmodes.inTableBody.startTagTableCell = function(name, attributes) {\r\n\t\ttree.parseError(\"unexpected-cell-in-table-body\", {name: name});\r\n\t\tthis.startTagTr('tr', []);\r\n\t\ttree.insertionMode.processStartTag(name, attributes);\r\n\t};\r\n\r\n\tmodes.inTableBody.startTagTableOther = function(name, attributes) {\r\n\t\t// XXX any ideas on how to share this with endTagTable\r\n\t\tif (tree.openElements.inTableScope('tbody') ||  tree.openElements.inTableScope('thead') || tree.openElements.inTableScope('tfoot')) {\r\n\t\t\ttree.openElements.popUntilTableBodyScopeMarker();\r\n\t\t\tthis.endTagTableRowGroup(tree.currentStackItem().localName);\r\n\t\t\ttree.insertionMode.processStartTag(name, attributes);\r\n\t\t} else {\r\n\t\t\t// context case\r\n\t\t\ttree.parseError('unexpected-start-tag', {name: name});\r\n\t\t}\r\n\t};\r\n\r\n\tmodes.inTableBody.startTagOther = function(name, attributes) {\r\n\t\tmodes.inTable.processStartTag(name, attributes);\r\n\t};\r\n\r\n\tmodes.inTableBody.endTagTableRowGroup = function(name) {\r\n\t\tif (tree.openElements.inTableScope(name)) {\r\n\t\t\ttree.openElements.popUntilTableBodyScopeMarker();\r\n\t\t\ttree.popElement();\r\n\t\t\ttree.setInsertionMode('inTable');\r\n\t\t} else {\r\n\t\t\ttree.parseError('unexpected-end-tag-in-table-body', {name: name});\r\n\t\t}\r\n\t};\r\n\r\n\tmodes.inTableBody.endTagTable = function(name) {\r\n\t\tif (tree.openElements.inTableScope('tbody') ||  tree.openElements.inTableScope('thead') || tree.openElements.inTableScope('tfoot')) {\r\n\t\t\ttree.openElements.popUntilTableBodyScopeMarker();\r\n\t\t\tthis.endTagTableRowGroup(tree.currentStackItem().localName);\r\n\t\t\ttree.insertionMode.processEndTag(name);\r\n\t\t} else {\r\n\t\t\t// context case\r\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\r\n\t\t}\r\n\t};\r\n\r\n\tmodes.inTableBody.endTagIgnore = function(name) {\r\n\t\ttree.parseError(\"unexpected-end-tag-in-table-body\", {name: name});\r\n\t};\r\n\r\n\tmodes.inTableBody.endTagOther = function(name) {\r\n\t\tmodes.inTable.processEndTag(name);\r\n\t};\r\n\r\n\tmodes.inSelect = Object.create(modes.base);\r\n\r\n\tmodes.inSelect.start_tag_handlers = {\r\n\t\thtml: 'startTagHtml',\r\n\t\toption: 'startTagOption',\r\n\t\toptgroup: 'startTagOptgroup',\r\n\t\tselect: 'startTagSelect',\r\n\t\tinput: 'startTagInput',\r\n\t\tkeygen: 'startTagInput',\r\n\t\ttextarea: 'startTagInput',\r\n\t\tscript: 'startTagScript',\r\n\t\t'-default': 'startTagOther'\r\n\t};\r\n\r\n\tmodes.inSelect.end_tag_handlers = {\r\n\t\toption: 'endTagOption',\r\n\t\toptgroup: 'endTagOptgroup',\r\n\t\tselect: 'endTagSelect',\r\n\t\tcaption: 'endTagTableElements',\r\n\t\ttable: 'endTagTableElements',\r\n\t\ttbody: 'endTagTableElements',\r\n\t\ttfoot: 'endTagTableElements',\r\n\t\tthead: 'endTagTableElements',\r\n\t\ttr: 'endTagTableElements',\r\n\t\ttd: 'endTagTableElements',\r\n\t\tth: 'endTagTableElements',\r\n\t\t'-default': 'endTagOther'\r\n\t};\r\n\r\n\tmodes.inSelect.processCharacters = function(buffer) {\r\n\t\tvar data = buffer.takeRemaining();\r\n\t\tdata = data.replace(/\\u0000/g, function(match, index){\r\n\t\t\t// @todo position\r\n\t\t\ttree.parseError(\"invalid-codepoint\");\r\n\t\t\treturn '';\r\n\t\t});\r\n\t\tif (!data)\r\n\t\t\treturn;\r\n\t\ttree.insertText(data);\r\n\t};\r\n\r\n\tmodes.inSelect.startTagOption = function(name, attributes) {\r\n\t\t// we need to imply </option> if <option> is the current node\r\n\t\tif (tree.currentStackItem().localName == 'option')\r\n\t\t\ttree.popElement();\r\n\t\ttree.insertElement(name, attributes);\r\n\t};\r\n\r\n\tmodes.inSelect.startTagOptgroup = function(name, attributes) {\r\n\t\tif (tree.currentStackItem().localName == 'option')\r\n\t\t\ttree.popElement();\r\n\t\tif (tree.currentStackItem().localName == 'optgroup')\r\n\t\t\ttree.popElement();\r\n\t\ttree.insertElement(name, attributes);\r\n\t};\r\n\r\n\tmodes.inSelect.endTagOption = function(name) {\r\n\t\tif (tree.currentStackItem().localName !== 'option') {\r\n\t\t\ttree.parseError('unexpected-end-tag-in-select', {name: name});\r\n\t\t\treturn;\r\n\t\t}\r\n\t\ttree.popElement();\r\n\t};\r\n\r\n\tmodes.inSelect.endTagOptgroup = function(name) {\r\n\t\t// </optgroup> implicitly closes <option>\r\n\t\tif (tree.currentStackItem().localName == 'option' && tree.openElements.item(tree.openElements.length - 2).localName == 'optgroup') {\r\n\t\t\ttree.popElement();\r\n\t\t}\r\n\r\n\t\t// it also closes </optgroup>\r\n\t\tif (tree.currentStackItem().localName == 'optgroup') {\r\n\t\t\ttree.popElement();\r\n\t\t} else {\r\n\t\t\t// But nothing else\r\n\t\t\ttree.parseError('unexpected-end-tag-in-select', {name: 'optgroup'});\r\n\t\t}\r\n\t};\r\n\r\n\tmodes.inSelect.startTagSelect = function(name) {\r\n\t\ttree.parseError(\"unexpected-select-in-select\");\r\n\t\tthis.endTagSelect('select');\r\n\t};\r\n\r\n\tmodes.inSelect.endTagSelect = function(name) {\r\n\t\tif (tree.openElements.inTableScope('select')) {\r\n\t\t\ttree.openElements.popUntilPopped('select');\r\n\t\t\ttree.resetInsertionMode();\r\n\t\t} else {\r\n\t\t\t// context case\r\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\r\n\t\t}\r\n\t};\r\n\r\n\tmodes.inSelect.startTagInput = function(name, attributes) {\r\n\t\ttree.parseError(\"unexpected-input-in-select\");\r\n\t\tif (tree.openElements.inSelectScope('select')) {\r\n\t\t\tthis.endTagSelect('select');\r\n\t\t\ttree.insertionMode.processStartTag(name, attributes);\r\n\t\t}\r\n\t};\r\n\r\n\tmodes.inSelect.startTagScript = function(name, attributes) {\r\n\t\tmodes.inHead.processStartTag(name, attributes);\r\n\t};\r\n\r\n\tmodes.inSelect.endTagTableElements = function(name) {\r\n\t\ttree.parseError('unexpected-end-tag-in-select', {name: name});\r\n\t\tif (tree.openElements.inTableScope(name)) {\r\n\t\t\tthis.endTagSelect('select');\r\n\t\t\ttree.insertionMode.processEndTag(name);\r\n\t\t}\r\n\t};\r\n\r\n\tmodes.inSelect.startTagOther = function(name, attributes) {\r\n\t\ttree.parseError(\"unexpected-start-tag-in-select\", {name: name});\r\n\t};\r\n\r\n\tmodes.inSelect.endTagOther = function(name) {\r\n\t\ttree.parseError('unexpected-end-tag-in-select', {name: name});\r\n\t};\r\n\r\n\tmodes.inSelectInTable = Object.create(modes.base);\r\n\r\n\tmodes.inSelectInTable.start_tag_handlers = {\r\n\t\tcaption: 'startTagTable',\r\n\t\ttable: 'startTagTable',\r\n\t\ttbody: 'startTagTable',\r\n\t\ttfoot: 'startTagTable',\r\n\t\tthead: 'startTagTable',\r\n\t\ttr: 'startTagTable',\r\n\t\ttd: 'startTagTable',\r\n\t\tth: 'startTagTable',\r\n\t\t'-default': 'startTagOther'\r\n\t};\r\n\r\n\tmodes.inSelectInTable.end_tag_handlers = {\r\n\t\tcaption: 'endTagTable',\r\n\t\ttable: 'endTagTable',\r\n\t\ttbody: 'endTagTable',\r\n\t\ttfoot: 'endTagTable',\r\n\t\tthead: 'endTagTable',\r\n\t\ttr: 'endTagTable',\r\n\t\ttd: 'endTagTable',\r\n\t\tth: 'endTagTable',\r\n\t\t'-default': 'endTagOther'\r\n\t};\r\n\r\n\tmodes.inSelectInTable.processCharacters = function(data) {\r\n\t\tmodes.inSelect.processCharacters(data);\r\n\t};\r\n\r\n\tmodes.inSelectInTable.startTagTable = function(name, attributes) {\r\n\t\ttree.parseError(\"unexpected-table-element-start-tag-in-select-in-table\", {name: name});\r\n\t\tthis.endTagOther(\"select\");\r\n\t\ttree.insertionMode.processStartTag(name, attributes);\r\n\t};\r\n\r\n\tmodes.inSelectInTable.startTagOther = function(name, attributes, selfClosing) {\r\n\t\tmodes.inSelect.processStartTag(name, attributes, selfClosing);\r\n\t};\r\n\r\n\tmodes.inSelectInTable.endTagTable = function(name) {\r\n\t\ttree.parseError(\"unexpected-table-element-end-tag-in-select-in-table\", {name: name});\r\n\t\tif (tree.openElements.inTableScope(name)) {\r\n\t\t\tthis.endTagOther(\"select\");\r\n\t\t\ttree.insertionMode.processEndTag(name);\r\n\t\t}\r\n\t};\r\n\r\n\tmodes.inSelectInTable.endTagOther = function(name) {\r\n\t\tmodes.inSelect.processEndTag(name);\r\n\t};\r\n\r\n\tmodes.inRow = Object.create(modes.base);\r\n\r\n\tmodes.inRow.start_tag_handlers = {\r\n\t\thtml: 'startTagHtml',\r\n\t\ttd: 'startTagTableCell',\r\n\t\tth: 'startTagTableCell',\r\n\t\tcaption: 'startTagTableOther',\r\n\t\tcol: 'startTagTableOther',\r\n\t\tcolgroup: 'startTagTableOther',\r\n\t\ttbody: 'startTagTableOther',\r\n\t\ttfoot: 'startTagTableOther',\r\n\t\tthead: 'startTagTableOther',\r\n\t\ttr: 'startTagTableOther',\r\n\t\t'-default': 'startTagOther'\r\n\t};\r\n\r\n\tmodes.inRow.end_tag_handlers = {\r\n\t\ttr: 'endTagTr',\r\n\t\ttable: 'endTagTable',\r\n\t\ttbody: 'endTagTableRowGroup',\r\n\t\ttfoot: 'endTagTableRowGroup',\r\n\t\tthead: 'endTagTableRowGroup',\r\n\t\tbody: 'endTagIgnore',\r\n\t\tcaption: 'endTagIgnore',\r\n\t\tcol: 'endTagIgnore',\r\n\t\tcolgroup: 'endTagIgnore',\r\n\t\thtml: 'endTagIgnore',\r\n\t\ttd: 'endTagIgnore',\r\n\t\tth: 'endTagIgnore',\r\n\t\t'-default': 'endTagOther'\r\n\t};\r\n\r\n\tmodes.inRow.processCharacters = function(data) {\r\n\t\tmodes.inTable.processCharacters(data);\r\n\t};\r\n\r\n\tmodes.inRow.startTagTableCell = function(name, attributes) {\r\n\t\ttree.openElements.popUntilTableRowScopeMarker();\r\n\t\ttree.insertElement(name, attributes);\r\n\t\ttree.setInsertionMode('inCell');\r\n\t\ttree.activeFormattingElements.push(Marker);\r\n\t};\r\n\r\n\tmodes.inRow.startTagTableOther = function(name, attributes) {\r\n\t\tvar ignoreEndTag = this.ignoreEndTagTr();\r\n\t\tthis.endTagTr('tr');\r\n\t\t// XXX how are we sure it's always ignored in the context case?\r\n\t\tif (!ignoreEndTag) tree.insertionMode.processStartTag(name, attributes);\r\n\t};\r\n\r\n\tmodes.inRow.startTagOther = function(name, attributes, selfClosing) {\r\n\t\tmodes.inTable.processStartTag(name, attributes, selfClosing);\r\n\t};\r\n\r\n\tmodes.inRow.endTagTr = function(name) {\r\n\t\tif (this.ignoreEndTagTr()) {\r\n\t\t\tassert.ok(tree.context);\r\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\r\n\t\t} else {\r\n\t\t\ttree.openElements.popUntilTableRowScopeMarker();\r\n\t\t\ttree.popElement();\r\n\t\t\ttree.setInsertionMode('inTableBody');\r\n\t\t}\r\n\t};\r\n\r\n\tmodes.inRow.endTagTable = function(name) {\r\n\t\tvar ignoreEndTag = this.ignoreEndTagTr();\r\n\t\tthis.endTagTr('tr');\r\n\t\t// Reprocess the current tag if the tr end tag was not ignored\r\n\t\t// XXX how are we sure it's always ignored in the context case?\r\n\t\tif (!ignoreEndTag) tree.insertionMode.processEndTag(name);\r\n\t};\r\n\r\n\tmodes.inRow.endTagTableRowGroup = function(name) {\r\n\t\tif (tree.openElements.inTableScope(name)) {\r\n\t\t\tthis.endTagTr('tr');\r\n\t\t\ttree.insertionMode.processEndTag(name);\r\n\t\t} else {\r\n\t\t\t// context case\r\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\r\n\t\t}\r\n\t};\r\n\r\n\tmodes.inRow.endTagIgnore = function(name) {\r\n\t\ttree.parseError(\"unexpected-end-tag-in-table-row\", {name: name});\r\n\t};\r\n\r\n\tmodes.inRow.endTagOther = function(name) {\r\n\t\tmodes.inTable.processEndTag(name);\r\n\t};\r\n\r\n\tmodes.inRow.ignoreEndTagTr = function() {\r\n\t\treturn !tree.openElements.inTableScope('tr');\r\n\t};\r\n\r\n\tmodes.afterAfterFrameset = Object.create(modes.base);\r\n\r\n\tmodes.afterAfterFrameset.start_tag_handlers = {\r\n\t\thtml: 'startTagHtml',\r\n\t\tnoframes: 'startTagNoFrames',\r\n\t\t'-default': 'startTagOther'\r\n\t};\r\n\r\n\tmodes.afterAfterFrameset.processEOF = function() {};\r\n\r\n\tmodes.afterAfterFrameset.processComment = function(data) {\r\n\t\ttree.insertComment(data, tree.document);\r\n\t};\r\n\r\n\tmodes.afterAfterFrameset.processCharacters = function(buffer) {\r\n\t\tvar characters = buffer.takeRemaining();\r\n\t\tvar whitespace = \"\";\r\n\t\tfor (var i = 0; i < characters.length; i++) {\r\n\t\t\tvar ch = characters[i];\r\n\t\t\tif (isWhitespace(ch))\r\n\t\t\t\twhitespace += ch;\r\n\t\t}\r\n\t\tif (whitespace) {\r\n\t\t\ttree.reconstructActiveFormattingElements();\r\n\t\t\ttree.insertText(whitespace);\r\n\t\t}\r\n\t\tif (whitespace.length < characters.length)\r\n\t\t\ttree.parseError('expected-eof-but-got-char');\r\n\t};\r\n\r\n\tmodes.afterAfterFrameset.startTagNoFrames = function(name, attributes) {\r\n\t\tmodes.inHead.processStartTag(name, attributes);\r\n\t};\r\n\r\n\tmodes.afterAfterFrameset.startTagOther = function(name, attributes, selfClosing) {\r\n\t\ttree.parseError('expected-eof-but-got-start-tag', {name: name});\r\n\t};\r\n\r\n\tmodes.afterAfterFrameset.processEndTag = function(name, attributes) {\r\n\t\ttree.parseError('expected-eof-but-got-end-tag', {name: name});\r\n\t};\r\n\r\n\tmodes.text = Object.create(modes.base);\r\n\r\n\tmodes.text.start_tag_handlers = {\r\n\t\t'-default': 'startTagOther'\r\n\t};\r\n\r\n\tmodes.text.end_tag_handlers = {\r\n\t\tscript: 'endTagScript',\r\n\t\t'-default': 'endTagOther'\r\n\t};\r\n\r\n\tmodes.text.processCharacters = function(buffer) {\r\n\t\tif (tree.shouldSkipLeadingNewline) {\r\n\t\t\ttree.shouldSkipLeadingNewline = false;\r\n\t\t\tbuffer.skipAtMostOneLeadingNewline();\r\n\t\t}\r\n\t\tvar data = buffer.takeRemaining();\r\n\t\tif (!data)\r\n\t\t\treturn;\r\n\t\ttree.insertText(data);\r\n\t};\r\n\r\n\tmodes.text.processEOF = function() {\r\n\t\ttree.parseError(\"expected-named-closing-tag-but-got-eof\",\r\n\t\t\t{name: tree.currentStackItem().localName});\r\n\t\ttree.openElements.pop();\r\n\t\ttree.setInsertionMode(tree.originalInsertionMode);\r\n\t\ttree.insertionMode.processEOF();\r\n\t};\r\n\r\n\tmodes.text.startTagOther = function(name) {\r\n\t\tthrow \"Tried to process start tag \" + name + \" in RCDATA/RAWTEXT mode\";\r\n\t};\r\n\r\n\tmodes.text.endTagScript = function(name) {\r\n\t\tvar node = tree.openElements.pop();\r\n\t\tassert.ok(node.localName == 'script');\r\n\t\ttree.setInsertionMode(tree.originalInsertionMode);\r\n\t};\r\n\r\n\tmodes.text.endTagOther = function(name) {\r\n\t\ttree.openElements.pop();\r\n\t\ttree.setInsertionMode(tree.originalInsertionMode);\r\n\t};\r\n}\r\n\r\nTreeBuilder.prototype.setInsertionMode = function(name) {\r\n\tthis.insertionMode = this.insertionModes[name];\r\n\tthis.insertionModeName = name;\r\n};\r\n\r\n/**\r\n * Adoption agency algorithm (http://www.whatwg.org/specs/web-apps/current-work/multipage/tree-construction.html#adoption-agency-algorithm)\r\n * @param {String} name A tag name subject for which the algorithm is being run\r\n * @return {Boolean} Returns false if the algorithm was aborted\r\n */\r\nTreeBuilder.prototype.adoptionAgencyEndTag = function(name) {\r\n\tvar outerIterationLimit = 8;\r\n\tvar innerIterationLimit = 3;\r\n\tvar formattingElement;\r\n\r\n\tfunction isActiveFormattingElement(el) {\r\n\t\treturn el === formattingElement;\r\n\t}\r\n\r\n\tvar outerLoopCounter = 0;\r\n\r\n\twhile (outerLoopCounter++ < outerIterationLimit) {\r\n\t\t// 4.\r\n\t\tformattingElement = this.elementInActiveFormattingElements(name);\r\n\r\n\t\tif (!formattingElement || (this.openElements.contains(formattingElement) && !this.openElements.inScope(formattingElement.localName))) {\r\n\t\t\tthis.parseError('adoption-agency-1.1', {name: name});\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tif (!this.openElements.contains(formattingElement)) {\r\n\t\t\tthis.parseError('adoption-agency-1.2', {name: name});\r\n\t\t\tthis.removeElementFromActiveFormattingElements(formattingElement);\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tif (!this.openElements.inScope(formattingElement.localName)) {\r\n\t\t\tthis.parseError('adoption-agency-4.4', {name: name});\r\n\t\t}\r\n\r\n\t\tif (formattingElement != this.currentStackItem()) {\r\n\t\t\tthis.parseError('adoption-agency-1.3', {name: name});\r\n\t\t}\r\n\r\n\t\t// Start of the adoption agency algorithm proper\r\n\t\t// todo ElementStack\r\n\t\tvar furthestBlock = this.openElements.furthestBlockForFormattingElement(formattingElement.node);\r\n\r\n\t\tif (!furthestBlock) {\r\n\t\t\tthis.openElements.remove_openElements_until(isActiveFormattingElement);\r\n\t\t\tthis.removeElementFromActiveFormattingElements(formattingElement);\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tvar afeIndex = this.openElements.elements.indexOf(formattingElement);\r\n\t\tvar commonAncestor = this.openElements.item(afeIndex - 1);\r\n\r\n\t\tvar bookmark = this.activeFormattingElements.indexOf(formattingElement);\r\n\r\n\t\tvar node = furthestBlock;\r\n\t\tvar lastNode = furthestBlock;\r\n\t\tvar index = this.openElements.elements.indexOf(node);\r\n\r\n\t\tvar innerLoopCounter = 0;\r\n\t\twhile (innerLoopCounter++ < innerIterationLimit) {\r\n\t\t\tindex -= 1;\r\n\t\t\tnode = this.openElements.item(index);\r\n\t\t\tif (this.activeFormattingElements.indexOf(node) < 0) {\r\n\t\t\t\tthis.openElements.elements.splice(index, 1);\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\tif (node == formattingElement)\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tif (lastNode == furthestBlock)\r\n\t\t\t\tbookmark = this.activeFormattingElements.indexOf(node) + 1;\r\n\r\n\t\t\tvar clone = this.createElement(node.namespaceURI, node.localName, node.attributes);\r\n\t\t\tvar newNode = new StackItem(node.namespaceURI, node.localName, node.attributes, clone);\r\n\r\n\t\t\tthis.activeFormattingElements[this.activeFormattingElements.indexOf(node)] = newNode;\r\n\t\t\tthis.openElements.elements[this.openElements.elements.indexOf(node)] = newNode;\r\n\r\n\t\t\tnode = newNode;\r\n\t\t\tthis.detachFromParent(lastNode.node);\r\n\t\t\tthis.attachNode(lastNode.node, node.node);\r\n\t\t\tlastNode = node;\r\n\t\t}\r\n\r\n\t\tthis.detachFromParent(lastNode.node);\r\n\t\tif (commonAncestor.isFosterParenting()) {\r\n\t\t\tthis.insertIntoFosterParent(lastNode.node);\r\n\t\t} else {\r\n\t\t\tthis.attachNode(lastNode.node, commonAncestor.node);\r\n\t\t}\r\n\r\n\t\tvar clone = this.createElement(\"http://www.w3.org/1999/xhtml\", formattingElement.localName, formattingElement.attributes);\r\n\t\tvar formattingClone = new StackItem(formattingElement.namespaceURI, formattingElement.localName, formattingElement.attributes, clone);\r\n\r\n\t\tthis.reparentChildren(furthestBlock.node, clone);\r\n\t\tthis.attachNode(clone, furthestBlock.node);\r\n\r\n\t\tthis.removeElementFromActiveFormattingElements(formattingElement);\r\n\t\tthis.activeFormattingElements.splice(Math.min(bookmark, this.activeFormattingElements.length), 0, formattingClone);\r\n\r\n\t\tthis.openElements.remove(formattingElement);\r\n\t\tthis.openElements.elements.splice(this.openElements.elements.indexOf(furthestBlock) + 1, 0, formattingClone);\r\n\t}\r\n\r\n\treturn true;\r\n};\r\n\r\nTreeBuilder.prototype.start = function() {\r\n\tthrow \"Not mplemented\";\r\n};\r\n\r\nTreeBuilder.prototype.startTokenization = function(tokenizer) {\r\n\tthis.tokenizer = tokenizer;\r\n\tthis.compatMode = \"no quirks\";\r\n\tthis.originalInsertionMode = \"initial\";\r\n\tthis.framesetOk = true;\r\n\tthis.openElements = new ElementStack();\r\n\tthis.activeFormattingElements = [];\r\n\tthis.start();\r\n\tif (this.context) {\r\n\t\tswitch(this.context) {\r\n\t\tcase 'title':\r\n\t\tcase 'textarea':\r\n\t\t\tthis.tokenizer.setState(Tokenizer.RCDATA);\r\n\t\t\tbreak;\r\n\t\tcase 'style':\r\n\t\tcase 'xmp':\r\n\t\tcase 'iframe':\r\n\t\tcase 'noembed':\r\n\t\tcase 'noframes':\r\n\t\t\tthis.tokenizer.setState(Tokenizer.RAWTEXT);\r\n\t\t\tbreak;\r\n\t\tcase 'script':\r\n\t\t\tthis.tokenizer.setState(Tokenizer.SCRIPT_DATA);\r\n\t\t\tbreak;\r\n\t\tcase 'noscript':\r\n\t\t\tif (this.scriptingEnabled)\r\n\t\t\t\tthis.tokenizer.setState(Tokenizer.RAWTEXT);\r\n\t\t\tbreak;\r\n\t\tcase 'plaintext':\r\n\t\t\tthis.tokenizer.setState(Tokenizer.PLAINTEXT);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tthis.insertHtmlElement();\r\n\t\tthis.resetInsertionMode();\r\n\t\t// todo form pointer\r\n\t} else {\r\n\t\tthis.setInsertionMode('initial');\r\n\t}\r\n};\r\n\r\nTreeBuilder.prototype.processToken = function(token) {\r\n\tthis.selfClosingFlagAcknowledged = false;\r\n\r\n\tvar currentNode = this.openElements.top || null;\r\n\tvar insertionMode;\r\n\tif (!currentNode || !currentNode.isForeign() ||\r\n\t\t(currentNode.isMathMLTextIntegrationPoint() &&\r\n\t\t\t((token.type == 'StartTag' &&\r\n\t\t\t\t\t!(token.name in {mglyph:0, malignmark:0})) ||\r\n\t\t\t\t(token.type === 'Characters'))\r\n\t\t) ||\r\n\t\t(currentNode.namespaceURI == \"http://www.w3.org/1998/Math/MathML\" &&\r\n\t\t\tcurrentNode.localName == 'annotation-xml' &&\r\n\t\t\ttoken.type == 'StartTag' && token.name == 'svg'\r\n\t\t) ||\r\n\t\t(currentNode.isHtmlIntegrationPoint() &&\r\n\t\t\ttoken.type in {StartTag:0, Characters:0}\r\n\t\t) ||\r\n\t\ttoken.type == 'EOF'\r\n\t) {\r\n\t\tinsertionMode = this.insertionMode;\r\n\t} else {\r\n\t\tinsertionMode = this.insertionModes.inForeignContent;\r\n\t}\r\n\tswitch(token.type) {\r\n\tcase 'Characters':\r\n\t\tvar buffer = new CharacterBuffer(token.data);\r\n\t\tinsertionMode.processCharacters(buffer);\r\n\t\tbreak;\r\n\tcase 'Comment':\r\n\t\tinsertionMode.processComment(token.data);\r\n\t\tbreak;\r\n\tcase 'StartTag':\r\n\t\tinsertionMode.processStartTag(token.name, token.data, token.selfClosing);\r\n\t\tbreak;\r\n\tcase 'EndTag':\r\n\t\tinsertionMode.processEndTag(token.name);\r\n\t\tbreak;\r\n\tcase 'Doctype':\r\n\t\tinsertionMode.processDoctype(token.name, token.publicId, token.systemId, token.forceQuirks);\r\n\t\tbreak;\r\n\tcase 'EOF':\r\n\t\tinsertionMode.processEOF();\r\n\t\tbreak;\r\n\t}\r\n};\r\n\r\n/**\r\n *\r\n * @return {Boolean}\r\n */\r\nTreeBuilder.prototype.isCdataSectionAllowed = function() {\r\n\treturn this.openElements.length > 0 && this.currentStackItem().isForeign();\r\n};\r\n\r\n/**\r\n *\r\n * @return {Boolean}\r\n */\r\nTreeBuilder.prototype.isSelfClosingFlagAcknowledged = function() {\r\n\treturn this.selfClosingFlagAcknowledged;\r\n};\r\n\r\nTreeBuilder.prototype.createElement = function(namespaceURI, localName, attributes) {\r\n\tthrow new Error(\"Not implemented\");\r\n};\r\n\r\nTreeBuilder.prototype.attachNode = function(child, parent) {\r\n\tthrow new Error(\"Not implemented\");\r\n};\r\n\r\nTreeBuilder.prototype.attachNodeToFosterParent = function(child, table, stackParent) {\r\n\tthrow new Error(\"Not implemented\");\r\n};\r\n\r\nTreeBuilder.prototype.detachFromParent = function(node) {\r\n\tthrow new Error(\"Not implemented\");\r\n};\r\n\r\nTreeBuilder.prototype.addAttributesToElement = function(element, attributes) {\r\n\tthrow new Error(\"Not implemented\");\r\n};\r\n\r\nTreeBuilder.prototype.insertHtmlElement = function(attributes) {\r\n\tvar root = this.createElement(\"http://www.w3.org/1999/xhtml\", 'html', attributes);\r\n\tthis.attachNode(root, this.document);\r\n\tthis.openElements.pushHtmlElement(new StackItem(\"http://www.w3.org/1999/xhtml\", 'html', attributes, root));\r\n\treturn root;\r\n};\r\n\r\nTreeBuilder.prototype.insertHeadElement = function(attributes) {\r\n\tvar element = this.createElement(\"http://www.w3.org/1999/xhtml\", \"head\", attributes);\r\n\tthis.head = new StackItem(\"http://www.w3.org/1999/xhtml\", \"head\", attributes, element);\r\n\tthis.attachNode(element, this.openElements.top.node);\r\n\tthis.openElements.pushHeadElement(this.head);\r\n\treturn element;\r\n};\r\n\r\nTreeBuilder.prototype.insertBodyElement = function(attributes) {\r\n\tvar element = this.createElement(\"http://www.w3.org/1999/xhtml\", \"body\", attributes);\r\n\tthis.attachNode(element, this.openElements.top.node);\r\n\tthis.openElements.pushBodyElement(new StackItem(\"http://www.w3.org/1999/xhtml\", \"body\", attributes, element));\r\n\treturn element;\r\n};\r\n\r\nTreeBuilder.prototype.insertIntoFosterParent = function(node) {\r\n\tvar tableIndex = this.openElements.findIndex('table');\r\n\tvar tableElement = this.openElements.item(tableIndex).node;\r\n\tif (tableIndex === 0)\r\n\t\treturn this.attachNode(node, tableElement);\r\n\tthis.attachNodeToFosterParent(node, tableElement, this.openElements.item(tableIndex - 1).node);\r\n};\r\n\r\nTreeBuilder.prototype.insertElement = function(name, attributes, namespaceURI, selfClosing) {\r\n\tif (!namespaceURI)\r\n\t\tnamespaceURI = \"http://www.w3.org/1999/xhtml\";\r\n\tvar element = this.createElement(namespaceURI, name, attributes);\r\n\tif (this.shouldFosterParent())\r\n\t\tthis.insertIntoFosterParent(element);\r\n\telse\r\n\t\tthis.attachNode(element, this.openElements.top.node);\r\n\tif (!selfClosing)\r\n\t\tthis.openElements.push(new StackItem(namespaceURI, name, attributes, element));\r\n};\r\n\r\nTreeBuilder.prototype.insertFormattingElement = function(name, attributes) {\r\n\tthis.insertElement(name, attributes, \"http://www.w3.org/1999/xhtml\");\r\n\tthis.appendElementToActiveFormattingElements(this.currentStackItem());\r\n};\r\n\r\nTreeBuilder.prototype.insertSelfClosingElement = function(name, attributes) {\r\n\tthis.selfClosingFlagAcknowledged = true;\r\n\tthis.insertElement(name, attributes, \"http://www.w3.org/1999/xhtml\", true);\r\n};\r\n\r\nTreeBuilder.prototype.insertForeignElement = function(name, attributes, namespaceURI, selfClosing) {\r\n\tif (selfClosing)\r\n\t\tthis.selfClosingFlagAcknowledged = true;\r\n\tthis.insertElement(name, attributes, namespaceURI, selfClosing);\r\n};\r\n\r\nTreeBuilder.prototype.insertComment = function(data, parent) {\r\n\tthrow new Error(\"Not implemented\");\r\n};\r\n\r\nTreeBuilder.prototype.insertDoctype = function(name, publicId, systemId) {\r\n\tthrow new Error(\"Not implemented\");\r\n};\r\n\r\nTreeBuilder.prototype.insertText = function(data) {\r\n\tthrow new Error(\"Not implemented\");\r\n};\r\n\r\n/**\r\n * Returns topmost open element\r\n * @return {StackItem}\r\n */\r\nTreeBuilder.prototype.currentStackItem = function() {\r\n\treturn this.openElements.top;\r\n};\r\n\r\n/**\r\n * Populates current open element\r\n * @return {StackItem}\r\n */\r\nTreeBuilder.prototype.popElement = function() {\r\n\treturn this.openElements.pop();\r\n};\r\n\r\n/**\r\n * Returns true if redirect is required and current open element causes foster parenting\r\n * @return {Boolean}\r\n */\r\nTreeBuilder.prototype.shouldFosterParent = function() {\r\n\treturn this.redirectAttachToFosterParent && this.currentStackItem().isFosterParenting();\r\n};\r\n\r\n/**\r\n * Implements http://www.whatwg.org/specs/web-apps/current-work/multipage/tree-construction.html#closing-elements-that-have-implied-end-tags\r\n * @param {String} [exclude] Ignore specific tag name\r\n */\r\nTreeBuilder.prototype.generateImpliedEndTags = function(exclude) {\r\n\t// FIXME get rid of the recursion\r\n\tvar name = this.openElements.top.localName;\r\n\tif (['dd', 'dt', 'li', 'option', 'optgroup', 'p', 'rp', 'rt'].indexOf(name) != -1 && name != exclude) {\r\n\t\tthis.popElement();\r\n\t\tthis.generateImpliedEndTags(exclude);\r\n\t}\r\n};\r\n\r\n/**\r\n * Performs http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#reconstruct-the-active-formatting-elements\r\n */\r\nTreeBuilder.prototype.reconstructActiveFormattingElements = function() {\r\n\t// Within this algorithm the order of steps decribed in the specification\r\n\t// is not quite the same as the order of steps in the code. It should still\r\n\t// do the same though.\r\n\r\n\t// Step 1: stop if there's nothing to do\r\n\tif (this.activeFormattingElements.length === 0)\r\n\t\treturn;\r\n\r\n\t// Step 2 and 3: start with the last element\r\n\tvar i = this.activeFormattingElements.length - 1;\r\n\tvar entry = this.activeFormattingElements[i];\r\n\tif (entry == Marker || this.openElements.contains(entry))\r\n\t\treturn;\r\n\r\n\twhile (entry != Marker && !this.openElements.contains(entry)) {\r\n\t\ti -= 1;\r\n\t\tentry = this.activeFormattingElements[i];\r\n\t\tif (!entry)\r\n\t\t\tbreak;\r\n\t}\r\n\r\n\twhile (true) {\r\n\t\ti += 1;\r\n\t\tentry = this.activeFormattingElements[i];\r\n\t\tthis.insertElement(entry.localName, entry.attributes);\r\n\t\tvar element = this.currentStackItem();\r\n\t\tthis.activeFormattingElements[i] = element;\r\n\t\tif (element == this.activeFormattingElements[this.activeFormattingElements.length -1])\r\n\t\t\tbreak;\r\n\t}\r\n\r\n};\r\n\r\n/**\r\n *\r\n * @param {StackItem} item\r\n */\r\nTreeBuilder.prototype.ensureNoahsArkCondition = function(item) {\r\n\tvar kNoahsArkCapacity = 3;\r\n\tif (this.activeFormattingElements.length < kNoahsArkCapacity)\r\n\t\treturn;\r\n\tvar candidates = [];\r\n\tvar newItemAttributeCount = item.attributes.length;\r\n\tfor (var i = this.activeFormattingElements.length - 1; i >= 0; i--) {\r\n\t\tvar candidate = this.activeFormattingElements[i];\r\n\t\tif (candidate === Marker)\r\n\t\t\tbreak;\r\n\t\tif (item.localName !== candidate.localName || item.namespaceURI !== candidate.namespaceURI)\r\n\t\t\tcontinue;\r\n\t\tif (candidate.attributes.length != newItemAttributeCount)\r\n\t\t\tcontinue;\r\n\t\tcandidates.push(candidate);\r\n\t}\r\n\tif (candidates.length < kNoahsArkCapacity)\r\n\t\treturn;\r\n\r\n\tvar remainingCandidates = [];\r\n\tvar attributes = item.attributes;\r\n\tfor (var i = 0; i < attributes.length; i++) {\r\n\t\tvar attribute = attributes[i];\r\n\r\n\t\tfor (var j = 0; j < candidates.length; j++) {\r\n\t\t\tvar candidate = candidates[j];\r\n\t\t\tvar candidateAttribute = getAttribute(candidate, attribute.nodeName);\r\n\t\t\tif (candidateAttribute && candidateAttribute.nodeValue === attribute.nodeValue)\r\n\t\t\t\tremainingCandidates.push(candidate);\r\n\t\t}\r\n\t\tif (remainingCandidates.length < kNoahsArkCapacity)\r\n\t\t\treturn;\r\n\t\tcandidates = remainingCandidates;\r\n\t\tremainingCandidates = [];\r\n\t}\r\n\t// Inductively, we shouldn't spin this loop very many times. It's possible,\r\n\t// however, that we wil spin the loop more than once because of how the\r\n\t// formatting element list gets permuted.\r\n\tfor (var i = kNoahsArkCapacity - 1; i < candidates.length; i++)\r\n\t\tthis.removeElementFromActiveFormattingElements(candidates[i]);\r\n};\r\n\r\n/**\r\n *\r\n * @param {StackItem} item\r\n */\r\nTreeBuilder.prototype.appendElementToActiveFormattingElements = function(item) {\r\n\tthis.ensureNoahsArkCondition(item);\r\n\tthis.activeFormattingElements.push(item);\r\n};\r\n\r\n/**\r\n *\r\n * @param {StackItem} item\r\n */\r\nTreeBuilder.prototype.removeElementFromActiveFormattingElements = function(item) {\r\n\tvar index = this.activeFormattingElements.indexOf(item);\r\n\tif (index >= 0)\r\n\t\tthis.activeFormattingElements.splice(index, 1);\r\n};\r\n\r\nTreeBuilder.prototype.elementInActiveFormattingElements = function(name) {\r\n\tvar els = this.activeFormattingElements;\r\n\tfor (var i = els.length - 1; i >= 0; i--) {\r\n\t\tif (els[i] == Marker) break;\r\n\t\tif (els[i].localName == name) return els[i];\r\n\t}\r\n\treturn false;\r\n};\r\n\r\nTreeBuilder.prototype.clearActiveFormattingElements = function() {\r\n    while (!(this.activeFormattingElements.length === 0 || this.activeFormattingElements.pop() == Marker));\r\n};\r\n\r\nTreeBuilder.prototype.reparentChildren = function(oldParent, newParent) {\r\n\tthrow new Error(\"Not implemented\");\r\n};\r\n\r\n/**\r\n *\r\n * @param {String} context A context element name for fragment parsing\r\n */\r\nTreeBuilder.prototype.setFragmentContext = function(context) {\r\n\t// Steps 4.2-4.6 of the HTML5 Fragment Case parsing algorithm:\r\n\t// http://www.whatwg.org/specs/web-apps/current-work/multipage/the-end.html#fragment-case\r\n\t// For efficiency, we skip step 4.2 (\"Let root be a new html element with no attributes\")\r\n\t// and instead use the DocumentFragment as a root node.\r\n\t//m_tree.openElements()->pushRootNode(HTMLStackItem::create(fragment, HTMLStackItem::ItemForDocumentFragmentNode));\r\n\tthis.context = context;\r\n};\r\n\r\n/**\r\n *\r\n * @param {String} code\r\n * @param {Object} [args]\r\n */\r\nTreeBuilder.prototype.parseError = function(code, args) {\r\n\t// FIXME: this.errors.push([this.tokenizer.position, code, data]);\r\n\tif (!this.errorHandler)\r\n\t\treturn;\r\n\tvar message = formatMessage(messages[code], args);\r\n\tthis.errorHandler.error(message, this.tokenizer._inputStream.location(), code);\r\n};\r\n\r\n/**\r\n * Resets the insertion mode (http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#reset-the-insertion-mode-appropriately)\r\n */\r\nTreeBuilder.prototype.resetInsertionMode = function() {\r\n\tvar last = false;\r\n\tvar node = null;\r\n\tfor (var i = this.openElements.length - 1; i >= 0; i--) {\r\n\t\tnode = this.openElements.item(i);\r\n\t\tif (i === 0) {\r\n\t\t\tassert.ok(this.context);\r\n\t\t\tlast = true;\r\n\t\t\tnode = new StackItem(\"http://www.w3.org/1999/xhtml\", this.context, [], null);\r\n\t\t}\r\n\r\n\t\tif (node.namespaceURI === \"http://www.w3.org/1999/xhtml\") {\r\n\t\t\t// TODO template tag\r\n\t\t\tif (node.localName === 'select')\r\n\t\t\t\t// FIXME handle inSelectInTable\r\n\t\t\t\treturn this.setInsertionMode('inSelect');\r\n\t\t\tif (node.localName === 'td' || node.localName === 'th')\r\n\t\t\t\treturn this.setInsertionMode('inCell');\r\n\t\t\tif (node.localName === 'tr')\r\n\t\t\t\treturn this.setInsertionMode('inRow');\r\n\t\t\tif (node.localName === 'tbody' || node.localName === 'thead' || node.localName === 'tfoot')\r\n\t\t\t\treturn this.setInsertionMode('inTableBody');\r\n\t\t\tif (node.localName === 'caption')\r\n\t\t\t\treturn this.setInsertionMode('inCaption');\r\n\t\t\tif (node.localName === 'colgroup')\r\n\t\t\t\treturn this.setInsertionMode('inColumnGroup');\r\n\t\t\tif (node.localName === 'table')\r\n\t\t\t\treturn this.setInsertionMode('inTable');\r\n\t\t\tif (node.localName === 'head' && !last)\r\n\t\t\t\treturn this.setInsertionMode('inHead');\r\n\t\t\tif (node.localName === 'body')\r\n\t\t\t\treturn this.setInsertionMode('inBody');\r\n\t\t\tif (node.localName === 'frameset')\r\n\t\t\t\treturn this.setInsertionMode('inFrameset');\r\n\t\t\tif (node.localName === 'html')\r\n\t\t\t\tif (!this.openElements.headElement)\r\n\t\t\t\t\treturn this.setInsertionMode('beforeHead');\r\n\t\t\t\telse\r\n\t\t\t\t\treturn this.setInsertionMode('afterHead');\r\n\t\t}\r\n\r\n\t\tif (last)\r\n\t\t\treturn this.setInsertionMode('inBody');\r\n\t}\r\n};\r\n\r\nTreeBuilder.prototype.processGenericRCDATAStartTag = function(name, attributes) {\r\n\tthis.insertElement(name, attributes);\r\n\tthis.tokenizer.setState(Tokenizer.RCDATA);\r\n\tthis.originalInsertionMode = this.insertionModeName;\r\n\tthis.setInsertionMode('text');\r\n};\r\n\r\nTreeBuilder.prototype.processGenericRawTextStartTag = function(name, attributes) {\r\n\tthis.insertElement(name, attributes);\r\n\tthis.tokenizer.setState(Tokenizer.RAWTEXT);\r\n\tthis.originalInsertionMode = this.insertionModeName;\r\n\tthis.setInsertionMode('text');\r\n};\r\n\r\nTreeBuilder.prototype.adjustMathMLAttributes = function(attributes) {\r\n\tattributes.forEach(function(a) {\r\n\t\ta.namespaceURI = \"http://www.w3.org/1998/Math/MathML\";\r\n\t\tif (constants.MATHMLAttributeMap[a.nodeName])\r\n\t\t\ta.nodeName = constants.MATHMLAttributeMap[a.nodeName];\r\n\t});\r\n\treturn attributes;\r\n};\r\n\r\nTreeBuilder.prototype.adjustSVGTagNameCase = function(name) {\r\n\treturn constants.SVGTagMap[name] || name;\r\n};\r\n\r\nTreeBuilder.prototype.adjustSVGAttributes = function(attributes) {\r\n\tattributes.forEach(function(a) {\r\n\t\ta.namespaceURI = \"http://www.w3.org/2000/svg\";\r\n\t\tif (constants.SVGAttributeMap[a.nodeName])\r\n\t\t\ta.nodeName = constants.SVGAttributeMap[a.nodeName];\r\n\t});\r\n\treturn attributes;\r\n};\r\n\r\nTreeBuilder.prototype.adjustForeignAttributes = function(attributes) {\r\n\tfor (var i = 0; i < attributes.length; i++) {\r\n\t\tvar attribute = attributes[i];\r\n\t\tvar adjusted = constants.ForeignAttributeMap[attribute.nodeName];\r\n\t\tif (adjusted) {\r\n\t\t\tattribute.nodeName = adjusted.localName;\r\n\t\t\tattribute.prefix = adjusted.prefix;\r\n\t\t\tattribute.namespaceURI = adjusted.namespaceURI;\r\n\t\t}\r\n\t}\r\n\treturn attributes;\r\n};\r\n\r\nfunction formatMessage(format, args) {\r\n\treturn format.replace(new RegExp('{[0-9a-z-]+}', 'gi'), function(match) {\r\n\t\treturn args[match.slice(1, -1)] || match;\r\n\t});\r\n}\r\n\r\nexports.TreeBuilder = TreeBuilder;\r\n\n},\n{\"./ElementStack\":1,\"./StackItem\":4,\"./Tokenizer\":5,\"./constants\":7,\"./messages.json\":8,\"assert\":13,\"events\":16}],\n7:[function(_dereq_,module,exports){\nexports.SVGTagMap = {\n\t\"altglyph\": \"altGlyph\",\n\t\"altglyphdef\": \"altGlyphDef\",\n\t\"altglyphitem\": \"altGlyphItem\",\n\t\"animatecolor\": \"animateColor\",\n\t\"animatemotion\": \"animateMotion\",\n\t\"animatetransform\": \"animateTransform\",\n\t\"clippath\": \"clipPath\",\n\t\"feblend\": \"feBlend\",\n\t\"fecolormatrix\": \"feColorMatrix\",\n\t\"fecomponenttransfer\": \"feComponentTransfer\",\n\t\"fecomposite\": \"feComposite\",\n\t\"feconvolvematrix\": \"feConvolveMatrix\",\n\t\"fediffuselighting\": \"feDiffuseLighting\",\n\t\"fedisplacementmap\": \"feDisplacementMap\",\n\t\"fedistantlight\": \"feDistantLight\",\n\t\"feflood\": \"feFlood\",\n\t\"fefunca\": \"feFuncA\",\n\t\"fefuncb\": \"feFuncB\",\n\t\"fefuncg\": \"feFuncG\",\n\t\"fefuncr\": \"feFuncR\",\n\t\"fegaussianblur\": \"feGaussianBlur\",\n\t\"feimage\": \"feImage\",\n\t\"femerge\": \"feMerge\",\n\t\"femergenode\": \"feMergeNode\",\n\t\"femorphology\": \"feMorphology\",\n\t\"feoffset\": \"feOffset\",\n\t\"fepointlight\": \"fePointLight\",\n\t\"fespecularlighting\": \"feSpecularLighting\",\n\t\"fespotlight\": \"feSpotLight\",\n\t\"fetile\": \"feTile\",\n\t\"feturbulence\": \"feTurbulence\",\n\t\"foreignobject\": \"foreignObject\",\n\t\"glyphref\": \"glyphRef\",\n\t\"lineargradient\": \"linearGradient\",\n\t\"radialgradient\": \"radialGradient\",\n\t\"textpath\": \"textPath\"\n};\n\nexports.MATHMLAttributeMap = {\n\tdefinitionurl: 'definitionURL'\n};\n\nexports.SVGAttributeMap = {\n\tattributename:\t'attributeName',\n\tattributetype:\t'attributeType',\n\tbasefrequency:\t'baseFrequency',\n\tbaseprofile:\t'baseProfile',\n\tcalcmode:\t'calcMode',\n\tclippathunits:\t'clipPathUnits',\n\tcontentscripttype:\t'contentScriptType',\n\tcontentstyletype:\t'contentStyleType',\n\tdiffuseconstant:\t'diffuseConstant',\n\tedgemode:\t'edgeMode',\n\texternalresourcesrequired:\t'externalResourcesRequired',\n\tfilterres:\t'filterRes',\n\tfilterunits:\t'filterUnits',\n\tglyphref:\t'glyphRef',\n\tgradienttransform:\t'gradientTransform',\n\tgradientunits:\t'gradientUnits',\n\tkernelmatrix:\t'kernelMatrix',\n\tkernelunitlength:\t'kernelUnitLength',\n\tkeypoints:\t'keyPoints',\n\tkeysplines:\t'keySplines',\n\tkeytimes:\t'keyTimes',\n\tlengthadjust:\t'lengthAdjust',\n\tlimitingconeangle:\t'limitingConeAngle',\n\tmarkerheight:\t'markerHeight',\n\tmarkerunits:\t'markerUnits',\n\tmarkerwidth:\t'markerWidth',\n\tmaskcontentunits:\t'maskContentUnits',\n\tmaskunits:\t'maskUnits',\n\tnumoctaves:\t'numOctaves',\n\tpathlength:\t'pathLength',\n\tpatterncontentunits:\t'patternContentUnits',\n\tpatterntransform:\t'patternTransform',\n\tpatternunits:\t'patternUnits',\n\tpointsatx:\t'pointsAtX',\n\tpointsaty:\t'pointsAtY',\n\tpointsatz:\t'pointsAtZ',\n\tpreservealpha:\t'preserveAlpha',\n\tpreserveaspectratio:\t'preserveAspectRatio',\n\tprimitiveunits:\t'primitiveUnits',\n\trefx:\t'refX',\n\trefy:\t'refY',\n\trepeatcount:\t'repeatCount',\n\trepeatdur:\t'repeatDur',\n\trequiredextensions:\t'requiredExtensions',\n\trequiredfeatures:\t'requiredFeatures',\n\tspecularconstant:\t'specularConstant',\n\tspecularexponent:\t'specularExponent',\n\tspreadmethod:\t'spreadMethod',\n\tstartoffset:\t'startOffset',\n\tstddeviation:\t'stdDeviation',\n\tstitchtiles:\t'stitchTiles',\n\tsurfacescale:\t'surfaceScale',\n\tsystemlanguage:\t'systemLanguage',\n\ttablevalues:\t'tableValues',\n\ttargetx:\t'targetX',\n\ttargety:\t'targetY',\n\ttextlength:\t'textLength',\n\tviewbox:\t'viewBox',\n\tviewtarget:\t'viewTarget',\n\txchannelselector:\t'xChannelSelector',\n\tychannelselector:\t'yChannelSelector',\n\tzoomandpan:\t'zoomAndPan'\n};\n\nexports.ForeignAttributeMap = {\n\t\"xlink:actuate\": {prefix: \"xlink\", localName: \"actuate\", namespaceURI: \"http://www.w3.org/1999/xlink\"},\n\t\"xlink:arcrole\": {prefix: \"xlink\", localName: \"arcrole\", namespaceURI: \"http://www.w3.org/1999/xlink\"},\n\t\"xlink:href\": {prefix: \"xlink\", localName: \"href\", namespaceURI: \"http://www.w3.org/1999/xlink\"},\n\t\"xlink:role\": {prefix: \"xlink\", localName: \"role\", namespaceURI: \"http://www.w3.org/1999/xlink\"},\n\t\"xlink:show\": {prefix: \"xlink\", localName: \"show\", namespaceURI: \"http://www.w3.org/1999/xlink\"},\n\t\"xlink:title\": {prefix: \"xlink\", localName: \"title\", namespaceURI: \"http://www.w3.org/1999/xlink\"},\n\t\"xlink:type\": {prefix: \"xlink\", localName: \"title\", namespaceURI: \"http://www.w3.org/1999/xlink\"},\n\t\"xml:base\": {prefix: \"xml\", localName: \"base\", namespaceURI: \"http://www.w3.org/XML/1998/namespace\"},\n\t\"xml:lang\": {prefix: \"xml\", localName: \"lang\", namespaceURI: \"http://www.w3.org/XML/1998/namespace\"},\n\t\"xml:space\": {prefix: \"xml\", localName: \"space\", namespaceURI: \"http://www.w3.org/XML/1998/namespace\"},\n\t\"xmlns\": {prefix: null, localName: \"xmlns\", namespaceURI: \"http://www.w3.org/2000/xmlns/\"},\n\t\"xmlns:xlink\": {prefix: \"xmlns\", localName: \"xlink\", namespaceURI: \"http://www.w3.org/2000/xmlns/\"},\n};\n},\n{}],\n8:[function(_dereq_,module,exports){\nmodule.exports={\r\n\t\"null-character\":\r\n\t\t\"Null character in input stream, replaced with U+FFFD.\",\r\n\t\"invalid-codepoint\":\r\n\t\t\"Invalid codepoint in stream\",\r\n\t\"incorrectly-placed-solidus\":\r\n\t\t\"Solidus (/) incorrectly placed in tag.\",\r\n\t\"incorrect-cr-newline-entity\":\r\n\t\t\"Incorrect CR newline entity, replaced with LF.\",\r\n\t\"illegal-windows-1252-entity\":\r\n\t\t\"Entity used with illegal number (windows-1252 reference).\",\r\n\t\"cant-convert-numeric-entity\":\r\n\t\t\"Numeric entity couldn't be converted to character (codepoint U+{charAsInt}).\",\r\n\t\"invalid-numeric-entity-replaced\":\r\n\t\t\"Numeric entity represents an illegal codepoint. Expanded to the C1 controls range.\",\r\n\t\"numeric-entity-without-semicolon\":\r\n\t\t\"Numeric entity didn't end with ';'.\",\r\n\t\"expected-numeric-entity-but-got-eof\":\r\n\t\t\"Numeric entity expected. Got end of file instead.\",\r\n\t\"expected-numeric-entity\":\r\n\t\t\"Numeric entity expected but none found.\",\r\n\t\"named-entity-without-semicolon\":\r\n\t\t\"Named entity didn't end with ';'.\",\r\n\t\"expected-named-entity\":\r\n\t\t\"Named entity expected. Got none.\",\r\n\t\"attributes-in-end-tag\":\r\n\t\t\"End tag contains unexpected attributes.\",\r\n\t\"self-closing-flag-on-end-tag\":\r\n\t\t\"End tag contains unexpected self-closing flag.\",\r\n\t\"bare-less-than-sign-at-eof\":\r\n\t\t\"End of file after <.\",\r\n\t\"expected-tag-name-but-got-right-bracket\":\r\n\t\t\"Expected tag name. Got '>' instead.\",\r\n\t\"expected-tag-name-but-got-question-mark\":\r\n\t\t\"Expected tag name. Got '?' instead. (HTML doesn't support processing instructions.)\",\r\n\t\"expected-tag-name\":\r\n\t\t\"Expected tag name. Got something else instead.\",\r\n\t\"expected-closing-tag-but-got-right-bracket\":\r\n\t\t\"Expected closing tag. Got '>' instead. Ignoring '</>'.\",\r\n\t\"expected-closing-tag-but-got-eof\":\r\n\t\t\"Expected closing tag. Unexpected end of file.\",\r\n\t\"expected-closing-tag-but-got-char\":\r\n\t\t\"Expected closing tag. Unexpected character '{data}' found.\",\r\n\t\"eof-in-tag-name\":\r\n\t\t\"Unexpected end of file in the tag name.\",\r\n\t\"expected-attribute-name-but-got-eof\":\r\n\t\t\"Unexpected end of file. Expected attribute name instead.\",\r\n\t\"eof-in-attribute-name\":\r\n\t\t\"Unexpected end of file in attribute name.\",\r\n\t\"invalid-character-in-attribute-name\":\r\n\t\t\"Invalid character in attribute name.\",\r\n\t\"duplicate-attribute\":\r\n\t\t\"Dropped duplicate attribute '{name}' on tag.\",\r\n\t\"expected-end-of-tag-but-got-eof\":\r\n\t\t\"Unexpected end of file. Expected = or end of tag.\",\r\n\t\"expected-attribute-value-but-got-eof\":\r\n\t\t\"Unexpected end of file. Expected attribute value.\",\r\n\t\"expected-attribute-value-but-got-right-bracket\":\r\n\t\t\"Expected attribute value. Got '>' instead.\",\r\n\t\"unexpected-character-in-unquoted-attribute-value\":\r\n\t\t\"Unexpected character in unquoted attribute\",\r\n\t\"invalid-character-after-attribute-name\":\r\n\t\t\"Unexpected character after attribute name.\",\r\n\t\"unexpected-character-after-attribute-value\":\r\n\t\t\"Unexpected character after attribute value.\",\r\n\t\"eof-in-attribute-value-double-quote\":\r\n\t\t\"Unexpected end of file in attribute value (\\\").\",\r\n\t\"eof-in-attribute-value-single-quote\":\r\n\t\t\"Unexpected end of file in attribute value (').\",\r\n\t\"eof-in-attribute-value-no-quotes\":\r\n\t\t\"Unexpected end of file in attribute value.\",\r\n\t\"eof-after-attribute-value\":\r\n\t\t\"Unexpected end of file after attribute value.\",\r\n\t\"unexpected-eof-after-solidus-in-tag\":\r\n\t\t\"Unexpected end of file in tag. Expected >.\",\r\n\t\"unexpected-character-after-solidus-in-tag\":\r\n\t\t\"Unexpected character after / in tag. Expected >.\",\r\n\t\"expected-dashes-or-doctype\":\r\n\t\t\"Expected '--' or 'DOCTYPE'. Not found.\",\r\n\t\"unexpected-bang-after-double-dash-in-comment\":\r\n\t\t\"Unexpected ! after -- in comment.\",\r\n\t\"incorrect-comment\":\r\n\t\t\"Incorrect comment.\",\r\n\t\"eof-in-comment\":\r\n\t\t\"Unexpected end of file in comment.\",\r\n\t\"eof-in-comment-end-dash\":\r\n\t\t\"Unexpected end of file in comment (-).\",\r\n\t\"unexpected-dash-after-double-dash-in-comment\":\r\n\t\t\"Unexpected '-' after '--' found in comment.\",\r\n\t\"eof-in-comment-double-dash\":\r\n\t\t\"Unexpected end of file in comment (--).\",\r\n\t\"eof-in-comment-end-bang-state\":\r\n\t\t\"Unexpected end of file in comment.\",\r\n\t\"unexpected-char-in-comment\":\r\n\t\t\"Unexpected character in comment found.\",\r\n\t\"need-space-after-doctype\":\r\n\t\t\"No space after literal string 'DOCTYPE'.\",\r\n\t\"expected-doctype-name-but-got-right-bracket\":\r\n\t\t\"Unexpected > character. Expected DOCTYPE name.\",\r\n\t\"expected-doctype-name-but-got-eof\":\r\n\t\t\"Unexpected end of file. Expected DOCTYPE name.\",\r\n\t\"eof-in-doctype-name\":\r\n\t\t\"Unexpected end of file in DOCTYPE name.\",\r\n\t\"eof-in-doctype\":\r\n\t\t\"Unexpected end of file in DOCTYPE.\",\r\n\t\"expected-space-or-right-bracket-in-doctype\":\r\n\t\t\"Expected space or '>'. Got '{data}'.\",\r\n\t\"unexpected-end-of-doctype\":\r\n\t\t\"Unexpected end of DOCTYPE.\",\r\n\t\"unexpected-char-in-doctype\":\r\n\t\t\"Unexpected character in DOCTYPE.\",\r\n\t\"eof-in-bogus-doctype\":\r\n\t\t\"Unexpected end of file in bogus doctype.\",\r\n\t\"eof-in-innerhtml\":\r\n\t\t\"Unexpected EOF in inner html mode.\",\r\n\t\"unexpected-doctype\":\r\n\t\t\"Unexpected DOCTYPE. Ignored.\",\r\n\t\"non-html-root\":\r\n\t\t\"html needs to be the first start tag.\",\r\n\t\"expected-doctype-but-got-eof\":\r\n\t\t\"Unexpected End of file. Expected DOCTYPE.\",\r\n\t\"unknown-doctype\":\r\n\t\t\"Erroneous DOCTYPE. Expected <!DOCTYPE html>.\",\r\n\t\"quirky-doctype\":\r\n\t\t\"Quirky doctype. Expected <!DOCTYPE html>.\",\r\n\t\"almost-standards-doctype\":\r\n\t\t\"Almost standards mode doctype. Expected <!DOCTYPE html>.\",\r\n\t\"obsolete-doctype\":\r\n\t\t\"Obsolete doctype. Expected <!DOCTYPE html>.\",\r\n\t\"expected-doctype-but-got-chars\":\r\n\t\t\"Non-space characters found without seeing a doctype first. Expected e.g. <!DOCTYPE html>.\",\r\n\t\"expected-doctype-but-got-start-tag\":\r\n\t\t\"Start tag seen without seeing a doctype first. Expected e.g. <!DOCTYPE html>.\",\r\n\t\"expected-doctype-but-got-end-tag\":\r\n\t\t\"End tag seen without seeing a doctype first. Expected e.g. <!DOCTYPE html>.\",\r\n\t\"end-tag-after-implied-root\":\r\n\t\t\"Unexpected end tag ({name}) after the (implied) root element.\",\r\n\t\"expected-named-closing-tag-but-got-eof\":\r\n\t\t\"Unexpected end of file. Expected end tag ({name}).\",\r\n\t\"two-heads-are-not-better-than-one\":\r\n\t\t\"Unexpected start tag head in existing head. Ignored.\",\r\n\t\"unexpected-end-tag\":\r\n\t\t\"Unexpected end tag ({name}). Ignored.\",\r\n\t\"unexpected-implied-end-tag\":\r\n\t\t\"End tag {name} implied, but there were open elements.\",\r\n\t\"unexpected-start-tag-out-of-my-head\":\r\n\t\t\"Unexpected start tag ({name}) that can be in head. Moved.\",\r\n\t\"unexpected-start-tag\":\r\n\t\t\"Unexpected start tag ({name}).\",\r\n\t\"missing-end-tag\":\r\n\t\t\"Missing end tag ({name}).\",\r\n\t\"missing-end-tags\":\r\n\t\t\"Missing end tags ({name}).\",\r\n\t\"unexpected-start-tag-implies-end-tag\":\r\n\t\t\"Unexpected start tag ({startName}) implies end tag ({endName}).\",\r\n\t\"unexpected-start-tag-treated-as\":\r\n\t\t\"Unexpected start tag ({originalName}). Treated as {newName}.\",\r\n\t\"deprecated-tag\":\r\n\t\t\"Unexpected start tag {name}. Don't use it!\",\r\n\t\"unexpected-start-tag-ignored\":\r\n\t\t\"Unexpected start tag {name}. Ignored.\",\r\n\t\"expected-one-end-tag-but-got-another\":\r\n\t\t\"Unexpected end tag ({gotName}). Missing end tag ({expectedName}).\",\r\n\t\"end-tag-too-early\":\r\n\t\t\"End tag ({name}) seen too early. Expected other end tag.\",\r\n\t\"end-tag-too-early-named\":\r\n\t\t\"Unexpected end tag ({gotName}). Expected end tag ({expectedName}.\",\r\n\t\"end-tag-too-early-ignored\":\r\n\t\t\"End tag ({name}) seen too early. Ignored.\",\r\n\t\"adoption-agency-1.1\":\r\n\t\t\"End tag ({name}) violates step 1, paragraph 1 of the adoption agency algorithm.\",\r\n\t\"adoption-agency-1.2\":\r\n\t\t\"End tag ({name}) violates step 1, paragraph 2 of the adoption agency algorithm.\",\r\n\t\"adoption-agency-1.3\":\r\n\t\t\"End tag ({name}) violates step 1, paragraph 3 of the adoption agency algorithm.\",\r\n\t\"adoption-agency-4.4\":\r\n\t\t\"End tag ({name}) violates step 4, paragraph 4 of the adoption agency algorithm.\",\r\n\t\"unexpected-end-tag-treated-as\":\r\n\t\t\"Unexpected end tag ({originalName}). Treated as {newName}.\",\r\n\t\"no-end-tag\":\r\n\t\t\"This element ({name}) has no end tag.\",\r\n\t\"unexpected-implied-end-tag-in-table\":\r\n\t\t\"Unexpected implied end tag ({name}) in the table phase.\",\r\n\t\"unexpected-implied-end-tag-in-table-body\":\r\n\t\t\"Unexpected implied end tag ({name}) in the table body phase.\",\r\n\t\"unexpected-char-implies-table-voodoo\":\r\n\t\t\"Unexpected non-space characters in table context caused voodoo mode.\",\r\n\t\"unexpected-hidden-input-in-table\":\r\n\t\t\"Unexpected input with type hidden in table context.\",\r\n\t\"unexpected-form-in-table\":\r\n\t\t\"Unexpected form in table context.\",\r\n\t\"unexpected-start-tag-implies-table-voodoo\":\r\n\t\t\"Unexpected start tag ({name}) in table context caused voodoo mode.\",\r\n\t\"unexpected-end-tag-implies-table-voodoo\":\r\n\t\t\"Unexpected end tag ({name}) in table context caused voodoo mode.\",\r\n\t\"unexpected-cell-in-table-body\":\r\n\t\t\"Unexpected table cell start tag ({name}) in the table body phase.\",\r\n\t\"unexpected-cell-end-tag\":\r\n\t\t\"Got table cell end tag ({name}) while required end tags are missing.\",\r\n\t\"unexpected-end-tag-in-table-body\":\r\n\t\t\"Unexpected end tag ({name}) in the table body phase. Ignored.\",\r\n\t\"unexpected-implied-end-tag-in-table-row\":\r\n\t\t\"Unexpected implied end tag ({name}) in the table row phase.\",\r\n\t\"unexpected-end-tag-in-table-row\":\r\n\t\t\"Unexpected end tag ({name}) in the table row phase. Ignored.\",\r\n\t\"unexpected-select-in-select\":\r\n\t\t\"Unexpected select start tag in the select phase treated as select end tag.\",\r\n\t\"unexpected-input-in-select\":\r\n\t\t\"Unexpected input start tag in the select phase.\",\r\n\t\"unexpected-start-tag-in-select\":\r\n\t\t\"Unexpected start tag token ({name}) in the select phase. Ignored.\",\r\n\t\"unexpected-end-tag-in-select\":\r\n\t\t\"Unexpected end tag ({name}) in the select phase. Ignored.\",\r\n\t\"unexpected-table-element-start-tag-in-select-in-table\":\r\n\t\t\"Unexpected table element start tag ({name}) in the select in table phase.\",\r\n\t\"unexpected-table-element-end-tag-in-select-in-table\":\r\n\t\t\"Unexpected table element end tag ({name}) in the select in table phase.\",\r\n\t\"unexpected-char-after-body\":\r\n\t\t\"Unexpected non-space characters in the after body phase.\",\r\n\t\"unexpected-start-tag-after-body\":\r\n\t\t\"Unexpected start tag token ({name}) in the after body phase.\",\r\n\t\"unexpected-end-tag-after-body\":\r\n\t\t\"Unexpected end tag token ({name}) in the after body phase.\",\r\n\t\"unexpected-char-in-frameset\":\r\n\t\t\"Unepxected characters in the frameset phase. Characters ignored.\",\r\n\t\"unexpected-start-tag-in-frameset\":\r\n\t\t\"Unexpected start tag token ({name}) in the frameset phase. Ignored.\",\r\n\t\"unexpected-frameset-in-frameset-innerhtml\":\r\n\t\t\"Unexpected end tag token (frameset in the frameset phase (innerHTML).\",\r\n\t\"unexpected-end-tag-in-frameset\":\r\n\t\t\"Unexpected end tag token ({name}) in the frameset phase. Ignored.\",\r\n\t\"unexpected-char-after-frameset\":\r\n\t\t\"Unexpected non-space characters in the after frameset phase. Ignored.\",\r\n\t\"unexpected-start-tag-after-frameset\":\r\n\t\t\"Unexpected start tag ({name}) in the after frameset phase. Ignored.\",\r\n\t\"unexpected-end-tag-after-frameset\":\r\n\t\t\"Unexpected end tag ({name}) in the after frameset phase. Ignored.\",\r\n\t\"expected-eof-but-got-char\":\r\n\t\t\"Unexpected non-space characters. Expected end of file.\",\r\n\t\"expected-eof-but-got-start-tag\":\r\n\t\t\"Unexpected start tag ({name}). Expected end of file.\",\r\n\t\"expected-eof-but-got-end-tag\":\r\n\t\t\"Unexpected end tag ({name}). Expected end of file.\",\r\n\t\"unexpected-end-table-in-caption\":\r\n\t\t\"Unexpected end table tag in caption. Generates implied end caption.\",\r\n\t\"end-html-in-innerhtml\": \r\n\t\t\"Unexpected html end tag in inner html mode.\",\r\n\t\"eof-in-table\":\r\n\t\t\"Unexpected end of file. Expected table content.\",\r\n\t\"eof-in-script\":\r\n\t\t\"Unexpected end of file. Expected script content.\",\r\n\t\"non-void-element-with-trailing-solidus\":\r\n\t\t\"Trailing solidus not allowed on element {name}.\",\r\n\t\"unexpected-html-element-in-foreign-content\":\r\n\t\t\"HTML start tag \\\"{name}\\\" in a foreign namespace context.\",\r\n\t\"unexpected-start-tag-in-table\":\r\n\t\t\"Unexpected {name}. Expected table content.\"\r\n}\n},\n{}],\n9:[function(_dereq_,module,exports){\nvar SAXTreeBuilder = _dereq_('./SAXTreeBuilder').SAXTreeBuilder;\nvar Tokenizer = _dereq_('../Tokenizer').Tokenizer;\nvar TreeParser = _dereq_('./TreeParser').TreeParser;\n\nfunction SAXParser() {\n\tthis.contentHandler = null;\n\tthis._errorHandler = null;\n\tthis._treeBuilder = new SAXTreeBuilder();\n\tthis._tokenizer = new Tokenizer(this._treeBuilder);\n\tthis._scriptingEnabled = false;\n}\n\nSAXParser.prototype.parse = function(source) {\n\tthis._tokenizer.tokenize(source);\n\tvar document = this._treeBuilder.document;\n\tif (document) {\n\t\tnew TreeParser(this.contentHandler).parse(document);\n\t}\n};\n\nSAXParser.prototype.parseFragment = function(source, context) {\n\tthis._treeBuilder.setFragmentContext(context);\n\tthis._tokenizer.tokenize(source);\n\tvar fragment = this._treeBuilder.getFragment();\n\tif (fragment) {\n\t\tnew TreeParser(this.contentHandler).parse(fragment);\n\t}\n};\n\nObject.defineProperty(SAXParser.prototype, 'scriptingEnabled', {\n\tget: function() {\n\t\treturn this._scriptingEnabled;\n\t},\n\tset: function(value) {\n\t\tthis._scriptingEnabled = value;\n\t\tthis._treeBuilder.scriptingEnabled = value;\n\t}\n});\n\nObject.defineProperty(SAXParser.prototype, 'errorHandler', {\n\tget: function() {\n\t\treturn this._errorHandler;\n\t},\n\tset: function(value) {\n\t\tthis._errorHandler = value;\n\t\tthis._treeBuilder.errorHandler = value;\n\t}\n});\n\nexports.SAXParser = SAXParser;\n\n},\n{\"../Tokenizer\":5,\"./SAXTreeBuilder\":10,\"./TreeParser\":11}],\n10:[function(_dereq_,module,exports){\nvar util = _dereq_('util');\r\nvar TreeBuilder = _dereq_('../TreeBuilder').TreeBuilder;\r\n\r\nfunction SAXTreeBuilder() {\r\n\tTreeBuilder.call(this);\r\n}\r\n\r\nutil.inherits(SAXTreeBuilder, TreeBuilder);\r\n\r\nSAXTreeBuilder.prototype.start = function(tokenizer) {\r\n\tthis.document = new Document(this.tokenizer);\r\n};\r\n\r\nSAXTreeBuilder.prototype.end = function() {\r\n\tthis.document.endLocator = this.tokenizer;\r\n};\r\n\r\nSAXTreeBuilder.prototype.insertDoctype = function(name, publicId, systemId) {\r\n\tvar doctype = new DTD(this.tokenizer, name, publicId, systemId);\r\n\tdoctype.endLocator = this.tokenizer;\r\n\tthis.document.appendChild(doctype);\r\n};\r\n\r\nSAXTreeBuilder.prototype.createElement = function(namespaceURI, localName, attributes) {\r\n\tvar element = new Element(this.tokenizer, namespaceURI, localName, localName, attributes || []);\r\n\treturn element;\r\n};\r\n\r\nSAXTreeBuilder.prototype.insertComment = function(data, parent) {\r\n\tif (!parent)\r\n\t\tparent = this.currentStackItem();\r\n\tvar comment = new Comment(this.tokenizer, data);\r\n\tparent.appendChild(comment);\r\n};\r\n\r\nSAXTreeBuilder.prototype.appendCharacters = function(parent, data) {\r\n\tvar text = new Characters(this.tokenizer, data);\r\n\tparent.appendChild(text);\r\n};\r\n\r\nSAXTreeBuilder.prototype.insertText = function(data) {\r\n\tif (this.redirectAttachToFosterParent && this.openElements.top.isFosterParenting()) {\r\n\t\tvar tableIndex = this.openElements.findIndex('table');\r\n\t\tvar tableItem = this.openElements.item(tableIndex);\r\n\t\tvar table = tableItem.node;\r\n\t\tif (tableIndex === 0) {\r\n\t\t\treturn this.appendCharacters(table, data);\r\n\t\t}\r\n\t\tvar text = new Characters(this.tokenizer, data);\r\n\t\tvar parent = table.parentNode;\r\n\t\tif (parent) {\r\n\t\t\tparent.insertBetween(text, table.previousSibling, table);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tvar stackParent = this.openElements.item(tableIndex - 1).node;\r\n\t\tstackParent.appendChild(text);\r\n\t\treturn;\r\n\t}\r\n\tthis.appendCharacters(this.currentStackItem().node, data);\r\n};\r\n\r\nSAXTreeBuilder.prototype.attachNode = function(node, parent) {\r\n\tparent.appendChild(node);\r\n};\r\n\r\nSAXTreeBuilder.prototype.attachNodeToFosterParent = function(child, table, stackParent) {\r\n\tvar parent = table.parentNode;\r\n\tif (parent)\r\n\t\tparent.insertBetween(child, table.previousSibling, table);\r\n\telse\r\n\t\tstackParent.appendChild(child);\r\n};\r\n\r\nSAXTreeBuilder.prototype.detachFromParent = function(element) {\r\n\telement.detach();\r\n};\r\n\r\nSAXTreeBuilder.prototype.reparentChildren = function(oldParent, newParent) {\r\n\tnewParent.appendChildren(oldParent.firstChild);\r\n};\r\n\r\nSAXTreeBuilder.prototype.getFragment = function() {\r\n\tvar fragment = new DocumentFragment();\r\n\tthis.reparentChildren(this.openElements.rootNode, fragment);\r\n\treturn fragment;\r\n};\r\n\r\nfunction getAttribute(node, name) {\r\n\tfor (var i = 0; i < node.attributes.length; i++) {\r\n\t\tvar attribute = node.attributes[i];\r\n\t\tif (attribute.nodeName === name)\r\n\t\t\treturn attribute.nodeValue;\r\n\t}\r\n}\r\n\r\nSAXTreeBuilder.prototype.addAttributesToElement = function(element, attributes) {\r\n\tfor (var i = 0; i < attributes.length; i++) {\r\n\t\tvar attribute = attributes[i];\r\n\t\tif (!getAttribute(element, attribute.nodeName))\r\n\t\t\telement.attributes.push(attribute);\r\n\t}\r\n};\r\n\r\nvar NodeType = {\r\n\t/**\r\n\t * A CDATA section.\r\n\t */\r\n\tCDATA: 1,\r\n\t/**\r\n\t * A run of characters.\r\n\t */\r\n\tCHARACTERS: 2,\r\n\t/**\r\n\t * A comment.\r\n\t */\r\n\tCOMMENT: 3,\r\n\t/**\r\n\t * A document.\r\n\t */\r\n\tDOCUMENT: 4,\r\n\t/**\r\n\t * A document fragment.\r\n\t */\r\n\tDOCUMENT_FRAGMENT: 5,\r\n\t/**\r\n\t * A DTD.\r\n\t */\r\n\tDTD: 6,\r\n\t/**\r\n\t * An element.\r\n\t */\r\n\tELEMENT: 7,\r\n\t/**\r\n\t * An entity.\r\n\t */\r\n\tENTITY: 8,\r\n\t/**\r\n\t * A run of ignorable whitespace.\r\n\t */\r\n\tIGNORABLE_WHITESPACE: 9,\r\n\t/**\r\n\t * A processing instruction.\r\n\t */\r\n\tPROCESSING_INSTRUCTION: 10,\r\n\t/**\r\n\t * A skipped entity.\r\n\t */\r\n\tSKIPPED_ENTITY: 11\r\n};\r\n/**\r\n * The common node superclass.\r\n * @version $Id$\r\n * @author hsivonen\r\n */\r\nfunction Node(locator) {\r\n\tif (!locator) {\r\n\t\tthis.columnNumber = -1;\r\n\t\tthis.lineNumber = -1;\r\n\t} else {\r\n\t\tthis.columnNumber = locator.columnNumber;\r\n\t\tthis.lineNumber = locator.lineNumber;\r\n\t}\r\n\tthis.parentNode = null;\r\n\tthis.nextSibling = null;\r\n\tthis.firstChild = null;\r\n}\r\n\r\n/**\r\n * Visit the node.\r\n * \r\n * @param treeParser the visitor\r\n * @throws SAXException if stuff goes wrong\r\n */\r\nNode.prototype.visit = function(treeParser) {\r\n\tthrow new Error(\"Not Implemented\");\r\n};\r\n\r\n/**\r\n * Revisit the node.\r\n * \r\n * @param treeParser the visitor\r\n * @throws SAXException if stuff goes wrong\r\n */\r\nNode.prototype.revisit = function(treeParser) {\r\n\treturn;\r\n};\r\n\r\n\r\n// Subclass-specific accessors that are hoisted here to \r\n// avoid casting.\r\n\r\n/**\r\n * Detach this node from its parent.\r\n */\r\nNode.prototype.detach = function() {\r\n\tif (this.parentNode !== null) {\r\n\t\tthis.parentNode.removeChild(this);\r\n\t\tthis.parentNode = null;\r\n\t}\r\n};\r\n\r\nObject.defineProperty(Node.prototype, 'previousSibling', {\r\n\tget: function() {\r\n\t\tvar prev = null;\r\n\t\tvar next = this.parentNode.firstChild;\r\n\t\tfor(;;) {\r\n\t\t\tif (this == next) {\r\n\t\t\t\treturn prev;\r\n\t\t\t}\r\n\t\t\tprev = next;\r\n\t\t\tnext = next.nextSibling;\r\n\t\t}\r\n\t}\r\n});\r\n\r\n\r\nfunction ParentNode(locator) {\r\n\tNode.call(this, locator);\r\n\tthis.lastChild = null;\r\n\tthis._endLocator = null;\r\n}\r\n\r\nParentNode.prototype = Object.create(Node.prototype);\r\n\r\n/**\r\n * Insert a new child before a pre-existing child and return the newly inserted child.\r\n * @param child the new child\r\n * @param sibling the existing child before which to insert (must be a child of this node) or <code>null</code> to append\r\n * @return <code>child</code>\r\n */\r\nParentNode.prototype.insertBefore = function(child, sibling) {\r\n\t//assert sibling == null || this == sibling.getParentNode();\r\n\tif (!sibling) {\r\n\t\treturn this.appendChild(child);\r\n\t}\r\n\tchild.detach();\r\n\tchild.parentNode = this;\r\n\tif (this.firstChild == sibling) {\r\n\t\tchild.nextSibling = sibling;\r\n\t\tthis.firstChild = child;\r\n\t} else {\r\n\t\tvar prev = this.firstChild;\r\n\t\tvar next = this.firstChild.nextSibling;\r\n\t\twhile (next != sibling) {\r\n\t\t\tprev = next;\r\n\t\t\tnext = next.nextSibling;\r\n\t\t}\r\n\t\tprev.nextSibling = child;\r\n\t\tchild.nextSibling = next;\r\n\t}\r\n\treturn child;\r\n};\r\n\r\nParentNode.prototype.insertBetween = function(child, prev, next) {\r\n\t// assert prev == null || this == prev.getParentNode();\r\n\t// assert next == null || this == next.getParentNode();\r\n\t// assert prev != null || next == firstChild;\r\n\t// assert next != null || prev == lastChild;\r\n\t// assert prev == null || next == null || prev.getNextSibling() == next;\r\n\tif (!next) {\r\n\t\treturn this.appendChild(child);\r\n\t}\r\n\tchild.detach();\r\n\tchild.parentNode = this;\r\n\tchild.nextSibling = next;\r\n\tif (!prev) {\r\n\t\tfirstChild = child;\r\n\t} else {\r\n\t\tprev.nextSibling = child;\r\n\t}\r\n\treturn child;\r\n};\r\n\r\n/**\r\n * Append a child to this node and return the child.\r\n * \r\n * @param child the child to append.\r\n * @return <code>child</code>\r\n */\r\nParentNode.prototype.appendChild = function(child) {\r\n\tchild.detach();\r\n\tchild.parentNode = this;\r\n\tif (!this.firstChild) {\r\n\t\tthis.firstChild = child;\r\n\t} else {\r\n\t\tthis.lastChild.nextSibling = child;\r\n\t}\r\n\tthis.lastChild = child;\r\n\treturn child;\r\n};\r\n\r\n/**\r\n * Append the children of another node to this node removing them from the other node .\r\n * @param parent the other node whose children to append to this one\r\n */\r\nParentNode.prototype.appendChildren = function(parent) {\r\n\tvar child = parent.firstChild;\r\n\tif (!child) {\r\n\t\treturn;\r\n\t}\r\n\tvar another = parent;\r\n\tif (!this.firstChild) {\r\n\t\tthis.firstChild = child;\r\n\t} else {\r\n\t\tthis.lastChild.nextSibling = child;\r\n\t}\r\n\tthis.lastChild = another.lastChild;\r\n\tdo {\r\n\t\tchild.parentNode = this;\r\n\t} while ((child = child.nextSibling));\r\n\tanother.firstChild = null;\r\n\tanother.lastChild = null;\r\n};\r\n\r\n/**\r\n * Remove a child from this node.\r\n * @param node the child to remove\r\n */\r\nParentNode.prototype.removeChild = function(node) {\r\n\t//assert this == node.getParentNode();\r\n\tif (this.firstChild == node) {\r\n\t\tthis.firstChild = node.nextSibling;\r\n\t\tif (this.lastChild == node) {\r\n\t\t\tthis.lastChild = null;\r\n\t\t}\r\n\t} else {\r\n\t\tvar prev = this.firstChild;\r\n\t\tvar next = this.firstChild.nextSibling;\r\n\t\twhile (next != node) {\r\n\t\t\tprev = next;\r\n\t\t\tnext = next.nextSibling;\r\n\t\t}\r\n\t\tprev.nextSibling = node.nextSibling;\r\n\t\tif (this.lastChild == node) {\r\n\t\t\tthis.lastChild = prev;\r\n\t\t}\r\n\t}\r\n\tnode.parentNode = null;\r\n\treturn node;\r\n};\r\n\r\nObject.defineProperty(ParentNode.prototype, 'endLocator', {\r\n\tget: function() {\r\n\t\treturn this._endLocator;\r\n\t},\r\n\tset: function(endLocator) {\r\n\t\tthis._endLocator = {\r\n\t\t\tlineNumber: endLocator.lineNumber,\r\n\t\t\tcolumnNumber: endLocator.columnNumber\r\n\t\t};\r\n\t}\r\n});\r\n\r\n/**\r\n * A document.\r\n * @version $Id$\r\n * @author hsivonen\r\n */\r\nfunction Document (locator) {\r\n\tParentNode.call(this, locator);\r\n\tthis.nodeType = NodeType.DOCUMENT;\r\n}\r\n\r\nDocument.prototype = Object.create(ParentNode.prototype);\r\n\r\n/**\r\n * \r\n * @see nu.validator.saxtree.Node#visit(nu.validator.saxtree.TreeParser)\r\n */\r\nDocument.prototype.visit = function(treeParser) {\r\n\ttreeParser.startDocument(this);\r\n};\r\n\r\n/**\r\n * @see nu.validator.saxtree.Node#revisit(nu.validator.saxtree.TreeParser)\r\n */\r\nDocument.prototype.revisit = function(treeParser) {\r\n\ttreeParser.endDocument(this.endLocator);\r\n};\r\n\r\n/**\r\n * A document fragment.\r\n * \r\n * @version $Id$\r\n * @author hsivonen\r\n */\r\n\r\n/**\r\n * The constructor.\r\n */\r\nfunction DocumentFragment() {\r\n\tParentNode.call(this, new Locator());\r\n\tthis.nodeType = NodeType.DOCUMENT_FRAGMENT;\r\n}\r\n\r\nDocumentFragment.prototype = Object.create(ParentNode.prototype);\r\n/**\r\n * \r\n * @see nu.validator.saxtree.Node#visit(nu.validator.saxtree.TreeParser)\r\n */\r\nDocumentFragment.prototype.visit = function(treeParser) {\r\n\t// nothing\r\n};\r\n\r\n/**\r\n * An element.\r\n * @version $Id$\r\n * @author hsivonen\r\n */\r\nfunction Element(locator, uri, localName, qName, atts, prefixMappings) {\r\n\tParentNode.call(this, locator);\r\n\tthis.uri = uri;\r\n\tthis.localName = localName;\r\n\tthis.qName = qName;\r\n\tthis.attributes = atts;\r\n\tthis.prefixMappings = prefixMappings;\r\n\tthis.nodeType = NodeType.ELEMENT;\r\n}\r\n\r\nElement.prototype = Object.create(ParentNode.prototype);\r\n\r\n/**\r\n * \r\n * @see nu.validator.saxtree.Node#visit(nu.validator.saxtree.TreeParser)\r\n */\r\nElement.prototype.visit = function(treeParser) {\r\n\tif (this.prefixMappings) {\r\n\t\tfor (var key in prefixMappings) {\r\n\t\t\tvar mapping = prefixMappings[key];\r\n\t\t\ttreeParser.startPrefixMapping(mapping.getPrefix(),\r\n\t\t\t\t\tmapping.getUri(), this);\r\n\t\t}\r\n\t}\r\n\ttreeParser.startElement(this.uri, this.localName, this.qName, this.attributes, this);\r\n};\r\n\r\n/**\r\n * @see nu.validator.saxtree.Node#revisit(nu.validator.saxtree.TreeParser)\r\n */\r\nElement.prototype.revisit = function(treeParser) {\r\n\ttreeParser.endElement(this.uri, this.localName, this.qName, this.endLocator);\r\n\tif (this.prefixMappings) {\r\n\t\tfor (var key in prefixMappings) {\r\n\t\t\tvar mapping = prefixMappings[key];\r\n\t\t\ttreeParser.endPrefixMapping(mapping.getPrefix(), this.endLocator);\r\n\t\t}\r\n\t}\r\n};\r\n\r\n/**\r\n * The constructor.\r\n * @param locator the locator\r\n * @param {String} data the buffer\r\n */\r\nfunction Characters(locator, data){\r\n\tNode.call(this, locator);\r\n\tthis.data = data;\r\n\tthis.nodeType = NodeType.CHARACTERS;\r\n}\r\n\r\nCharacters.prototype = Object.create(Node.prototype);\r\n\r\n/**\r\n * \r\n * @see nu.validator.saxtree.Node#visit(nu.validator.saxtree.TreeParser)\r\n */\r\nCharacters.prototype.visit = function (treeParser) {\r\n\ttreeParser.characters(this.data, 0, this.data.length, this);\r\n};\r\n\r\n/**\r\n * The constructor.\r\n * @param buf the buffer\r\n * @param start the offset\r\n * @param length the length\r\n */\r\nfunction IgnorableWhitespace(locator, data) {\r\n\tNode.call(this, locator);\r\n\tthis.data = data;\r\n\tthis.nodeType = NodeType.IGNORABLE_WHITESPACE;\r\n}\r\n\r\nIgnorableWhitespace.prototype = Object.create(Node.prototype);\r\n\r\n/**\r\n * \r\n * @see nu.validator.saxtree.Node#visit(nu.validator.saxtree.TreeParser)\r\n */\r\nIgnorableWhitespace.prototype.visit = function(treeParser) {\r\n\ttreeParser.ignorableWhitespace(this.data, 0, this.data.length, this);\r\n};\r\n\r\n/**\r\n * A comment.\r\n * \r\n * @version $Id$\r\n * @author hsivonen\r\n */\r\n\r\n/**\r\n * The constructor.\r\n * @param locator the locator\r\n * @param buf the buffer\r\n * @param start the offset\r\n * @param length the length\r\n */\r\nfunction Comment(locator, data) {\r\n\tNode.call(this, locator);\r\n\tthis.data = data;\r\n\tthis.nodeType = NodeType.COMMENT;\r\n}\r\n\r\nComment.prototype = Object.create(Node.prototype);\r\n\r\n/**\r\n * \r\n * @see nu.validator.saxtree.Node#visit(nu.validator.saxtree.TreeParser)\r\n */\r\nComment.prototype.visit = function(treeParser) {\r\n\ttreeParser.comment(this.data, 0, this.data.length, this);\r\n};\r\n\r\n/**\r\n * A CDATA section.\r\n * @version $Id$\r\n * @author hsivonen\r\n */\r\n/**\r\n * The constructor.\r\n * @param locator the locator\r\n */\r\nfunction CDATA(locator) {\r\n\tParentNode.call(this, locator);\r\n\tthis.nodeType = NodeType.CDATA;\r\n}\r\n\r\nCDATA.prototype = Object.create(ParentNode.prototype);\r\n\r\n/**\r\n * @see nu.validator.saxtree.Node#visit(nu.validator.saxtree.TreeParser)\r\n */\r\nCDATA.prototype.visit = function(treeParser) {\r\n\ttreeParser.startCDATA(this);\r\n};\r\n\r\n/**\r\n * \r\n * @throws SAXException if things go wrong\r\n * @see nu.validator.saxtree.Node#revisit(nu.validator.saxtree.TreeParser)\r\n */\r\nCDATA.prototype.revisit = function(treeParser) {\r\n\ttreeParser.endCDATA(this.endLocator);\r\n};\r\n\r\n/**\r\n * An entity.\r\n * @version $Id$\r\n * @author hsivonen\r\n */\r\n\r\n/**\r\n * The constructor.\r\n * @param locator the locator\r\n * @param name the name\r\n */\r\nfunction Entity(name) {\r\n\tParentNode.call(this);\r\n\tthis.name = name;\r\n\tthis.nodeType = NodeType.ENTITY;\r\n}\r\n\r\nEntity.prototype = Object.create(ParentNode.prototype);\r\n\r\n/**\r\n * \r\n * @see nu.validator.saxtree.Node#visit(nu.validator.saxtree.TreeParser)\r\n */\r\nEntity.prototype.visit = function(treeParser) {\r\n\ttreeParser.startEntity(this.name, this);\r\n};\r\n\r\n/**\r\n * @see nu.validator.saxtree.Node#revisit(nu.validator.saxtree.TreeParser)\r\n */\r\nEntity.prototype.revisit = function(treeParser) {\r\n\ttreeParser.endEntity(this.name);\r\n};\r\n\r\n/**\r\n * A skipped entity.\r\n * @version $Id$\r\n * @author hsivonen\r\n */\r\n\r\n/**\r\n * Constructor.\r\n * @param locator the locator\r\n * @param name the name\r\n */\r\n\r\nfunction SkippedEntity(name) {\r\n\tNode.call(this);\r\n\tthis.name = name;\r\n\tthis.nodeType = NodeType.SKIPPED_ENTITY;\r\n}\r\n\r\nSkippedEntity.prototype = Object.create(Node.prototype);\r\n\r\n/**\r\n * \r\n * @see nu.validator.saxtree.Node#visit(nu.validator.saxtree.TreeParser)\r\n */\r\nSkippedEntity.prototype.visit = function(treeParser) {\r\n\ttreeParser.skippedEntity(this.name, this);\r\n};\r\n\r\n/**\r\n * A processing instruction.\r\n * @version $Id$\r\n * @author hsivonen\r\n */\r\n\r\n/**\r\n * PI target.\r\n */\r\n//private final String target;\r\n\r\n/**\r\n * PI data.\r\n */\r\n//private final String data;\r\n\r\n/**\r\n * Constructor.\r\n * @param locator the locator\r\n * @param target PI target\r\n * @param data PI data\r\n */\r\nfunction ProcessingInstruction(target, data) {\r\n\tNode.call(this);\r\n\tthis.target = target;\r\n\tthis.data = data;\r\n}\r\n\r\nProcessingInstruction.prototype = Object.create(Node.prototype);\r\n\r\n/**\r\n * \r\n * @see nu.validator.saxtree.Node#visit(nu.validator.saxtree.TreeParser)\r\n */\r\nProcessingInstruction.prototype.visit = function(treeParser) {\r\n\ttreeParser.processingInstruction(this.target, this.data, this);\r\n};\r\n\r\n/**\r\n * \r\n * @see nu.validator.saxtree.Node#getNodeType()\r\n */\r\nProcessingInstruction.prototype.getNodeType = function() {\r\n\treturn NodeType.PROCESSING_INSTRUCTION;\r\n};\r\n\r\n/**\r\n * The constructor.\r\n * @param locator the locator\r\n * @param name the name\r\n * @param publicIdentifier the public id\r\n * @param systemIdentifier the system id\r\n */\r\nfunction DTD(name, publicIdentifier, systemIdentifier) {\r\n\tParentNode.call(this);\r\n\tthis.name = name;\r\n\tthis.publicIdentifier = publicIdentifier;\r\n\tthis.systemIdentifier = systemIdentifier;\r\n\tthis.nodeType = NodeType.DTD;\r\n}\r\n\r\nDTD.prototype = Object.create(ParentNode.prototype);\r\n\r\n/**\r\n * \r\n * @see nu.validator.saxtree.Node#visit(nu.validator.saxtree.TreeParser)\r\n */\r\nDTD.prototype.visit = function(treeParser) {\r\n\ttreeParser.startDTD(this.name, this.publicIdentifier, this.systemIdentifier, this);\r\n};\r\n\r\n/**\r\n * @see nu.validator.saxtree.Node#revisit(nu.validator.saxtree.TreeParser)\r\n */\r\nDTD.prototype.revisit = function(treeParser) {\r\n\ttreeParser.endDTD();\r\n};\r\n\r\nexports.SAXTreeBuilder = SAXTreeBuilder;\r\n\n},\n{\"../TreeBuilder\":6,\"util\":20}],\n11:[function(_dereq_,module,exports){\n/**\r\n * A tree visitor that replays a tree as SAX events.\r\n * @version $Id$\r\n * @author hsivonen\r\n */\r\n\r\n/**\r\n * The constructor.\r\n * \r\n * @param contentHandler\r\n *            must not be <code>null</code>\r\n * @param lexicalHandler\r\n *            may be <code>null</code>\r\n */\r\nfunction TreeParser(contentHandler, lexicalHandler){\r\n\r\n\t/**\r\n\t * The content handler.\r\n\t */\r\n\tthis.contentHandler;\r\n\r\n\t/**\r\n\t * The lexical handler.\r\n\t */\r\n\tthis.lexicalHandler;\r\n\r\n\t/**\r\n\t * The current locator.\r\n\t */\r\n\tthis.locatorDelegate;\r\n\r\n\tif (!contentHandler) {\r\n\t\tthrow new IllegalArgumentException(\"contentHandler was null.\");\r\n\t}\r\n\tthis.contentHandler = contentHandler;\r\n\tif (!lexicalHandler) {\r\n\t\tthis.lexicalHandler = new NullLexicalHandler();\r\n\t} else {\r\n\t\tthis.lexicalHandler = lexicalHandler;\r\n\t}\r\n}\r\n\r\n/**\r\n * Causes SAX events for the tree rooted at the argument to be emitted.\r\n * <code>startDocument()</code> and <code>endDocument()</code> are only\r\n * emitted for a <code>Document</code> node.\r\n * \r\n * @param node\r\n *            the root\r\n * @throws SAXException\r\n */\r\nTreeParser.prototype.parse = function(node) {\r\n\tthis.contentHandler.documentLocator = this;\r\n\tvar current = node;\r\n\tvar next;\r\n\tfor (;;) {\r\n\t\tcurrent.visit(this);\r\n\t\tif (next = current.firstChild) {\r\n\t\t\tcurrent = next;\r\n\t\t\tcontinue;\r\n\t\t}\r\n\t\tfor (;;) {\r\n\t\t\tcurrent.revisit(this);\r\n\t\t\tif (current == node) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (next = current.nextSibling) {\r\n\t\t\t\tcurrent = next;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tcurrent = current.parentNode;\r\n\t\t}\r\n\t}\r\n};\r\n\r\n/**\r\n * @see org.xml.sax.ContentHandler#characters(char[], int, int)\r\n */\r\nTreeParser.prototype.characters = function(ch, start, length, locator) {\r\n\tthis.locatorDelegate = locator;\r\n\tthis.contentHandler.characters(ch, start, length);\r\n};\r\n\r\n/**\r\n * @see org.xml.sax.ContentHandler#endDocument()\r\n */\r\nTreeParser.prototype.endDocument = function(locator) {\r\n\tthis.locatorDelegate = locator;\r\n\tthis.contentHandler.endDocument();\r\n};\r\n\r\n/**\r\n * @see org.xml.sax.ContentHandler#endElement(java.lang.String,\r\n *      java.lang.String, java.lang.String)\r\n */\r\nTreeParser.prototype.endElement = function(uri, localName, qName, locator) {\r\n\tthis.locatorDelegate = locator;\r\n\tthis.contentHandler.endElement(uri, localName, qName);\r\n};\r\n\r\n/**\r\n * @see org.xml.sax.ContentHandler#endPrefixMapping(java.lang.String)\r\n */\r\nTreeParser.prototype.endPrefixMapping = function(prefix, locator) {\r\n\tthis.locatorDelegate = locator;\r\n\tthis.contentHandler.endPrefixMapping(prefix);\r\n};\r\n\r\n/**\r\n * @see org.xml.sax.ContentHandler#ignorableWhitespace(char[], int, int)\r\n */\r\nTreeParser.prototype.ignorableWhitespace = function(ch, start, length, locator) {\r\n\tthis.locatorDelegate = locator;\r\n\tthis.contentHandler.ignorableWhitespace(ch, start, length);\r\n};\r\n\r\n/**\r\n * @see org.xml.sax.ContentHandler#processingInstruction(java.lang.String,\r\n *      java.lang.String)\r\n */\r\nTreeParser.prototype.processingInstruction = function(target, data, locator) {\r\n\tthis.locatorDelegate = locator;\r\n\tthis.contentHandler.processingInstruction(target, data);\r\n};\r\n\r\n/**\r\n * @see org.xml.sax.ContentHandler#skippedEntity(java.lang.String)\r\n */\r\nTreeParser.prototype.skippedEntity = function(name, locator) {\r\n\tthis.locatorDelegate = locator;\r\n\tthis.contentHandler.skippedEntity(name);\r\n};\r\n\r\n/**\r\n * @see org.xml.sax.ContentHandler#startDocument()\r\n */\r\nTreeParser.prototype.startDocument = function(locator) {\r\n\tthis.locatorDelegate = locator;\r\n\tthis.contentHandler.startDocument();\r\n};\r\n\r\n/**\r\n * @see org.xml.sax.ContentHandler#startElement(java.lang.String,\r\n *      java.lang.String, java.lang.String, org.xml.sax.Attributes)\r\n */\r\nTreeParser.prototype.startElement = function(uri, localName, qName, atts, locator) {\r\n\tthis.locatorDelegate = locator;\r\n\tthis.contentHandler.startElement(uri, localName, qName, atts);\r\n};\r\n\r\n/**\r\n * @see org.xml.sax.ContentHandler#startPrefixMapping(java.lang.String,\r\n *      java.lang.String)\r\n */\r\nTreeParser.prototype.startPrefixMapping = function(prefix, uri, locator) {\r\n\tthis.locatorDelegate = locator;\r\n\tthis.contentHandler.startPrefixMapping(prefix, uri);\r\n};\r\n\r\n/**\r\n * @see org.xml.sax.ext.LexicalHandler#comment(char[], int, int)\r\n */\r\nTreeParser.prototype.comment = function(ch, start, length, locator) {\r\n\tthis.locatorDelegate = locator;\r\n\tthis.lexicalHandler.comment(ch, start, length);\r\n};\r\n\r\n/**\r\n * @see org.xml.sax.ext.LexicalHandler#endCDATA()\r\n */\r\nTreeParser.prototype.endCDATA = function(locator) {\r\n\tthis.locatorDelegate = locator;\r\n\tthis.lexicalHandler.endCDATA();\r\n};\r\n\r\n/**\r\n * @see org.xml.sax.ext.LexicalHandler#endDTD()\r\n */\r\nTreeParser.prototype.endDTD = function(locator) {\r\n\tthis.locatorDelegate = locator;\r\n\tthis.lexicalHandler.endDTD();\r\n};\r\n\r\n/**\r\n * @see org.xml.sax.ext.LexicalHandler#endEntity(java.lang.String)\r\n */\r\nTreeParser.prototype.endEntity = function(name, locator) {\r\n\tthis.locatorDelegate = locator;\r\n\tthis.lexicalHandler.endEntity(name);\r\n};\r\n\r\n/**\r\n * @see org.xml.sax.ext.LexicalHandler#startCDATA()\r\n */\r\nTreeParser.prototype.startCDATA = function(locator) {\r\n\tthis.locatorDelegate = locator;\r\n\tthis.lexicalHandler.startCDATA();\r\n};\r\n\r\n/**\r\n * @see org.xml.sax.ext.LexicalHandler#startDTD(java.lang.String,\r\n *      java.lang.String, java.lang.String)\r\n */\r\nTreeParser.prototype.startDTD = function(name, publicId, systemId, locator) {\r\n\tthis.locatorDelegate = locator;\r\n\tthis.lexicalHandler.startDTD(name, publicId, systemId);\r\n};\r\n\r\n/**\r\n * @see org.xml.sax.ext.LexicalHandler#startEntity(java.lang.String)\r\n */\r\nTreeParser.prototype.startEntity = function(name, locator) {\r\n\tthis.locatorDelegate = locator;\r\n\tthis.lexicalHandler.startEntity(name);\r\n};\r\n\r\nObject.defineProperty(TreeParser.prototype, 'columnNumber', {\r\n\tget: function() {\r\n\t\tif (!this.locatorDelegate)\r\n\t\t\treturn -1;\r\n\t\telse\r\n\t\t\treturn this.locatorDelegate.columnNumber;\r\n\t}\r\n});\r\n\r\nObject.defineProperty(TreeParser.prototype, 'lineNumber', {\r\n\tget: function() {\r\n\t\tif (!this.locatorDelegate)\r\n\t\t\treturn -1;\r\n\t\telse\r\n\t\t\treturn this.locatorDelegate.lineNumber;\r\n\t}\r\n});\r\n\r\n/**\r\n * A lexical handler that does nothing.\r\n * @version $Id$\r\n * @author hsivonen\r\n */\r\n// implements LexicalHandler\r\nfunction NullLexicalHandler() {\r\n\r\n}\r\n\r\nNullLexicalHandler.prototype.comment = function() {};\r\nNullLexicalHandler.prototype.endCDATA = function() {};\r\nNullLexicalHandler.prototype.endDTD = function() {};\r\nNullLexicalHandler.prototype.endEntity = function() {};\r\nNullLexicalHandler.prototype.startCDATA = function() {};\r\nNullLexicalHandler.prototype.startDTD = function() {};\r\nNullLexicalHandler.prototype.startEntity = function() {};\r\n\r\nexports.TreeParser = TreeParser;\r\n\n},\n{}],\n12:[function(_dereq_,module,exports){\nmodule.exports = {\n\t\"Aacute;\": \"\\u00C1\",\n\t\"Aacute\": \"\\u00C1\",\n\t\"aacute;\": \"\\u00E1\",\n\t\"aacute\": \"\\u00E1\",\n\t\"Abreve;\": \"\\u0102\",\n\t\"abreve;\": \"\\u0103\",\n\t\"ac;\": \"\\u223E\",\n\t\"acd;\": \"\\u223F\",\n\t\"acE;\": \"\\u223E\\u0333\",\n\t\"Acirc;\": \"\\u00C2\",\n\t\"Acirc\": \"\\u00C2\",\n\t\"acirc;\": \"\\u00E2\",\n\t\"acirc\": \"\\u00E2\",\n\t\"acute;\": \"\\u00B4\",\n\t\"acute\": \"\\u00B4\",\n\t\"Acy;\": \"\\u0410\",\n\t\"acy;\": \"\\u0430\",\n\t\"AElig;\": \"\\u00C6\",\n\t\"AElig\": \"\\u00C6\",\n\t\"aelig;\": \"\\u00E6\",\n\t\"aelig\": \"\\u00E6\",\n\t\"af;\": \"\\u2061\",\n\t\"Afr;\": \"\\uD835\\uDD04\",\n\t\"afr;\": \"\\uD835\\uDD1E\",\n\t\"Agrave;\": \"\\u00C0\",\n\t\"Agrave\": \"\\u00C0\",\n\t\"agrave;\": \"\\u00E0\",\n\t\"agrave\": \"\\u00E0\",\n\t\"alefsym;\": \"\\u2135\",\n\t\"aleph;\": \"\\u2135\",\n\t\"Alpha;\": \"\\u0391\",\n\t\"alpha;\": \"\\u03B1\",\n\t\"Amacr;\": \"\\u0100\",\n\t\"amacr;\": \"\\u0101\",\n\t\"amalg;\": \"\\u2A3F\",\n\t\"amp;\": \"\\u0026\",\n\t\"amp\": \"\\u0026\",\n\t\"AMP;\": \"\\u0026\",\n\t\"AMP\": \"\\u0026\",\n\t\"andand;\": \"\\u2A55\",\n\t\"And;\": \"\\u2A53\",\n\t\"and;\": \"\\u2227\",\n\t\"andd;\": \"\\u2A5C\",\n\t\"andslope;\": \"\\u2A58\",\n\t\"andv;\": \"\\u2A5A\",\n\t\"ang;\": \"\\u2220\",\n\t\"ange;\": \"\\u29A4\",\n\t\"angle;\": \"\\u2220\",\n\t\"angmsdaa;\": \"\\u29A8\",\n\t\"angmsdab;\": \"\\u29A9\",\n\t\"angmsdac;\": \"\\u29AA\",\n\t\"angmsdad;\": \"\\u29AB\",\n\t\"angmsdae;\": \"\\u29AC\",\n\t\"angmsdaf;\": \"\\u29AD\",\n\t\"angmsdag;\": \"\\u29AE\",\n\t\"angmsdah;\": \"\\u29AF\",\n\t\"angmsd;\": \"\\u2221\",\n\t\"angrt;\": \"\\u221F\",\n\t\"angrtvb;\": \"\\u22BE\",\n\t\"angrtvbd;\": \"\\u299D\",\n\t\"angsph;\": \"\\u2222\",\n\t\"angst;\": \"\\u00C5\",\n\t\"angzarr;\": \"\\u237C\",\n\t\"Aogon;\": \"\\u0104\",\n\t\"aogon;\": \"\\u0105\",\n\t\"Aopf;\": \"\\uD835\\uDD38\",\n\t\"aopf;\": \"\\uD835\\uDD52\",\n\t\"apacir;\": \"\\u2A6F\",\n\t\"ap;\": \"\\u2248\",\n\t\"apE;\": \"\\u2A70\",\n\t\"ape;\": \"\\u224A\",\n\t\"apid;\": \"\\u224B\",\n\t\"apos;\": \"\\u0027\",\n\t\"ApplyFunction;\": \"\\u2061\",\n\t\"approx;\": \"\\u2248\",\n\t\"approxeq;\": \"\\u224A\",\n\t\"Aring;\": \"\\u00C5\",\n\t\"Aring\": \"\\u00C5\",\n\t\"aring;\": \"\\u00E5\",\n\t\"aring\": \"\\u00E5\",\n\t\"Ascr;\": \"\\uD835\\uDC9C\",\n\t\"ascr;\": \"\\uD835\\uDCB6\",\n\t\"Assign;\": \"\\u2254\",\n\t\"ast;\": \"\\u002A\",\n\t\"asymp;\": \"\\u2248\",\n\t\"asympeq;\": \"\\u224D\",\n\t\"Atilde;\": \"\\u00C3\",\n\t\"Atilde\": \"\\u00C3\",\n\t\"atilde;\": \"\\u00E3\",\n\t\"atilde\": \"\\u00E3\",\n\t\"Auml;\": \"\\u00C4\",\n\t\"Auml\": \"\\u00C4\",\n\t\"auml;\": \"\\u00E4\",\n\t\"auml\": \"\\u00E4\",\n\t\"awconint;\": \"\\u2233\",\n\t\"awint;\": \"\\u2A11\",\n\t\"backcong;\": \"\\u224C\",\n\t\"backepsilon;\": \"\\u03F6\",\n\t\"backprime;\": \"\\u2035\",\n\t\"backsim;\": \"\\u223D\",\n\t\"backsimeq;\": \"\\u22CD\",\n\t\"Backslash;\": \"\\u2216\",\n\t\"Barv;\": \"\\u2AE7\",\n\t\"barvee;\": \"\\u22BD\",\n\t\"barwed;\": \"\\u2305\",\n\t\"Barwed;\": \"\\u2306\",\n\t\"barwedge;\": \"\\u2305\",\n\t\"bbrk;\": \"\\u23B5\",\n\t\"bbrktbrk;\": \"\\u23B6\",\n\t\"bcong;\": \"\\u224C\",\n\t\"Bcy;\": \"\\u0411\",\n\t\"bcy;\": \"\\u0431\",\n\t\"bdquo;\": \"\\u201E\",\n\t\"becaus;\": \"\\u2235\",\n\t\"because;\": \"\\u2235\",\n\t\"Because;\": \"\\u2235\",\n\t\"bemptyv;\": \"\\u29B0\",\n\t\"bepsi;\": \"\\u03F6\",\n\t\"bernou;\": \"\\u212C\",\n\t\"Bernoullis;\": \"\\u212C\",\n\t\"Beta;\": \"\\u0392\",\n\t\"beta;\": \"\\u03B2\",\n\t\"beth;\": \"\\u2136\",\n\t\"between;\": \"\\u226C\",\n\t\"Bfr;\": \"\\uD835\\uDD05\",\n\t\"bfr;\": \"\\uD835\\uDD1F\",\n\t\"bigcap;\": \"\\u22C2\",\n\t\"bigcirc;\": \"\\u25EF\",\n\t\"bigcup;\": \"\\u22C3\",\n\t\"bigodot;\": \"\\u2A00\",\n\t\"bigoplus;\": \"\\u2A01\",\n\t\"bigotimes;\": \"\\u2A02\",\n\t\"bigsqcup;\": \"\\u2A06\",\n\t\"bigstar;\": \"\\u2605\",\n\t\"bigtriangledown;\": \"\\u25BD\",\n\t\"bigtriangleup;\": \"\\u25B3\",\n\t\"biguplus;\": \"\\u2A04\",\n\t\"bigvee;\": \"\\u22C1\",\n\t\"bigwedge;\": \"\\u22C0\",\n\t\"bkarow;\": \"\\u290D\",\n\t\"blacklozenge;\": \"\\u29EB\",\n\t\"blacksquare;\": \"\\u25AA\",\n\t\"blacktriangle;\": \"\\u25B4\",\n\t\"blacktriangledown;\": \"\\u25BE\",\n\t\"blacktriangleleft;\": \"\\u25C2\",\n\t\"blacktriangleright;\": \"\\u25B8\",\n\t\"blank;\": \"\\u2423\",\n\t\"blk12;\": \"\\u2592\",\n\t\"blk14;\": \"\\u2591\",\n\t\"blk34;\": \"\\u2593\",\n\t\"block;\": \"\\u2588\",\n\t\"bne;\": \"\\u003D\\u20E5\",\n\t\"bnequiv;\": \"\\u2261\\u20E5\",\n\t\"bNot;\": \"\\u2AED\",\n\t\"bnot;\": \"\\u2310\",\n\t\"Bopf;\": \"\\uD835\\uDD39\",\n\t\"bopf;\": \"\\uD835\\uDD53\",\n\t\"bot;\": \"\\u22A5\",\n\t\"bottom;\": \"\\u22A5\",\n\t\"bowtie;\": \"\\u22C8\",\n\t\"boxbox;\": \"\\u29C9\",\n\t\"boxdl;\": \"\\u2510\",\n\t\"boxdL;\": \"\\u2555\",\n\t\"boxDl;\": \"\\u2556\",\n\t\"boxDL;\": \"\\u2557\",\n\t\"boxdr;\": \"\\u250C\",\n\t\"boxdR;\": \"\\u2552\",\n\t\"boxDr;\": \"\\u2553\",\n\t\"boxDR;\": \"\\u2554\",\n\t\"boxh;\": \"\\u2500\",\n\t\"boxH;\": \"\\u2550\",\n\t\"boxhd;\": \"\\u252C\",\n\t\"boxHd;\": \"\\u2564\",\n\t\"boxhD;\": \"\\u2565\",\n\t\"boxHD;\": \"\\u2566\",\n\t\"boxhu;\": \"\\u2534\",\n\t\"boxHu;\": \"\\u2567\",\n\t\"boxhU;\": \"\\u2568\",\n\t\"boxHU;\": \"\\u2569\",\n\t\"boxminus;\": \"\\u229F\",\n\t\"boxplus;\": \"\\u229E\",\n\t\"boxtimes;\": \"\\u22A0\",\n\t\"boxul;\": \"\\u2518\",\n\t\"boxuL;\": \"\\u255B\",\n\t\"boxUl;\": \"\\u255C\",\n\t\"boxUL;\": \"\\u255D\",\n\t\"boxur;\": \"\\u2514\",\n\t\"boxuR;\": \"\\u2558\",\n\t\"boxUr;\": \"\\u2559\",\n\t\"boxUR;\": \"\\u255A\",\n\t\"boxv;\": \"\\u2502\",\n\t\"boxV;\": \"\\u2551\",\n\t\"boxvh;\": \"\\u253C\",\n\t\"boxvH;\": \"\\u256A\",\n\t\"boxVh;\": \"\\u256B\",\n\t\"boxVH;\": \"\\u256C\",\n\t\"boxvl;\": \"\\u2524\",\n\t\"boxvL;\": \"\\u2561\",\n\t\"boxVl;\": \"\\u2562\",\n\t\"boxVL;\": \"\\u2563\",\n\t\"boxvr;\": \"\\u251C\",\n\t\"boxvR;\": \"\\u255E\",\n\t\"boxVr;\": \"\\u255F\",\n\t\"boxVR;\": \"\\u2560\",\n\t\"bprime;\": \"\\u2035\",\n\t\"breve;\": \"\\u02D8\",\n\t\"Breve;\": \"\\u02D8\",\n\t\"brvbar;\": \"\\u00A6\",\n\t\"brvbar\": \"\\u00A6\",\n\t\"bscr;\": \"\\uD835\\uDCB7\",\n\t\"Bscr;\": \"\\u212C\",\n\t\"bsemi;\": \"\\u204F\",\n\t\"bsim;\": \"\\u223D\",\n\t\"bsime;\": \"\\u22CD\",\n\t\"bsolb;\": \"\\u29C5\",\n\t\"bsol;\": \"\\u005C\",\n\t\"bsolhsub;\": \"\\u27C8\",\n\t\"bull;\": \"\\u2022\",\n\t\"bullet;\": \"\\u2022\",\n\t\"bump;\": \"\\u224E\",\n\t\"bumpE;\": \"\\u2AAE\",\n\t\"bumpe;\": \"\\u224F\",\n\t\"Bumpeq;\": \"\\u224E\",\n\t\"bumpeq;\": \"\\u224F\",\n\t\"Cacute;\": \"\\u0106\",\n\t\"cacute;\": \"\\u0107\",\n\t\"capand;\": \"\\u2A44\",\n\t\"capbrcup;\": \"\\u2A49\",\n\t\"capcap;\": \"\\u2A4B\",\n\t\"cap;\": \"\\u2229\",\n\t\"Cap;\": \"\\u22D2\",\n\t\"capcup;\": \"\\u2A47\",\n\t\"capdot;\": \"\\u2A40\",\n\t\"CapitalDifferentialD;\": \"\\u2145\",\n\t\"caps;\": \"\\u2229\\uFE00\",\n\t\"caret;\": \"\\u2041\",\n\t\"caron;\": \"\\u02C7\",\n\t\"Cayleys;\": \"\\u212D\",\n\t\"ccaps;\": \"\\u2A4D\",\n\t\"Ccaron;\": \"\\u010C\",\n\t\"ccaron;\": \"\\u010D\",\n\t\"Ccedil;\": \"\\u00C7\",\n\t\"Ccedil\": \"\\u00C7\",\n\t\"ccedil;\": \"\\u00E7\",\n\t\"ccedil\": \"\\u00E7\",\n\t\"Ccirc;\": \"\\u0108\",\n\t\"ccirc;\": \"\\u0109\",\n\t\"Cconint;\": \"\\u2230\",\n\t\"ccups;\": \"\\u2A4C\",\n\t\"ccupssm;\": \"\\u2A50\",\n\t\"Cdot;\": \"\\u010A\",\n\t\"cdot;\": \"\\u010B\",\n\t\"cedil;\": \"\\u00B8\",\n\t\"cedil\": \"\\u00B8\",\n\t\"Cedilla;\": \"\\u00B8\",\n\t\"cemptyv;\": \"\\u29B2\",\n\t\"cent;\": \"\\u00A2\",\n\t\"cent\": \"\\u00A2\",\n\t\"centerdot;\": \"\\u00B7\",\n\t\"CenterDot;\": \"\\u00B7\",\n\t\"cfr;\": \"\\uD835\\uDD20\",\n\t\"Cfr;\": \"\\u212D\",\n\t\"CHcy;\": \"\\u0427\",\n\t\"chcy;\": \"\\u0447\",\n\t\"check;\": \"\\u2713\",\n\t\"checkmark;\": \"\\u2713\",\n\t\"Chi;\": \"\\u03A7\",\n\t\"chi;\": \"\\u03C7\",\n\t\"circ;\": \"\\u02C6\",\n\t\"circeq;\": \"\\u2257\",\n\t\"circlearrowleft;\": \"\\u21BA\",\n\t\"circlearrowright;\": \"\\u21BB\",\n\t\"circledast;\": \"\\u229B\",\n\t\"circledcirc;\": \"\\u229A\",\n\t\"circleddash;\": \"\\u229D\",\n\t\"CircleDot;\": \"\\u2299\",\n\t\"circledR;\": \"\\u00AE\",\n\t\"circledS;\": \"\\u24C8\",\n\t\"CircleMinus;\": \"\\u2296\",\n\t\"CirclePlus;\": \"\\u2295\",\n\t\"CircleTimes;\": \"\\u2297\",\n\t\"cir;\": \"\\u25CB\",\n\t\"cirE;\": \"\\u29C3\",\n\t\"cire;\": \"\\u2257\",\n\t\"cirfnint;\": \"\\u2A10\",\n\t\"cirmid;\": \"\\u2AEF\",\n\t\"cirscir;\": \"\\u29C2\",\n\t\"ClockwiseContourIntegral;\": \"\\u2232\",\n\t\"CloseCurlyDoubleQuote;\": \"\\u201D\",\n\t\"CloseCurlyQuote;\": \"\\u2019\",\n\t\"clubs;\": \"\\u2663\",\n\t\"clubsuit;\": \"\\u2663\",\n\t\"colon;\": \"\\u003A\",\n\t\"Colon;\": \"\\u2237\",\n\t\"Colone;\": \"\\u2A74\",\n\t\"colone;\": \"\\u2254\",\n\t\"coloneq;\": \"\\u2254\",\n\t\"comma;\": \"\\u002C\",\n\t\"commat;\": \"\\u0040\",\n\t\"comp;\": \"\\u2201\",\n\t\"compfn;\": \"\\u2218\",\n\t\"complement;\": \"\\u2201\",\n\t\"complexes;\": \"\\u2102\",\n\t\"cong;\": \"\\u2245\",\n\t\"congdot;\": \"\\u2A6D\",\n\t\"Congruent;\": \"\\u2261\",\n\t\"conint;\": \"\\u222E\",\n\t\"Conint;\": \"\\u222F\",\n\t\"ContourIntegral;\": \"\\u222E\",\n\t\"copf;\": \"\\uD835\\uDD54\",\n\t\"Copf;\": \"\\u2102\",\n\t\"coprod;\": \"\\u2210\",\n\t\"Coproduct;\": \"\\u2210\",\n\t\"copy;\": \"\\u00A9\",\n\t\"copy\": \"\\u00A9\",\n\t\"COPY;\": \"\\u00A9\",\n\t\"COPY\": \"\\u00A9\",\n\t\"copysr;\": \"\\u2117\",\n\t\"CounterClockwiseContourIntegral;\": \"\\u2233\",\n\t\"crarr;\": \"\\u21B5\",\n\t\"cross;\": \"\\u2717\",\n\t\"Cross;\": \"\\u2A2F\",\n\t\"Cscr;\": \"\\uD835\\uDC9E\",\n\t\"cscr;\": \"\\uD835\\uDCB8\",\n\t\"csub;\": \"\\u2ACF\",\n\t\"csube;\": \"\\u2AD1\",\n\t\"csup;\": \"\\u2AD0\",\n\t\"csupe;\": \"\\u2AD2\",\n\t\"ctdot;\": \"\\u22EF\",\n\t\"cudarrl;\": \"\\u2938\",\n\t\"cudarrr;\": \"\\u2935\",\n\t\"cuepr;\": \"\\u22DE\",\n\t\"cuesc;\": \"\\u22DF\",\n\t\"cularr;\": \"\\u21B6\",\n\t\"cularrp;\": \"\\u293D\",\n\t\"cupbrcap;\": \"\\u2A48\",\n\t\"cupcap;\": \"\\u2A46\",\n\t\"CupCap;\": \"\\u224D\",\n\t\"cup;\": \"\\u222A\",\n\t\"Cup;\": \"\\u22D3\",\n\t\"cupcup;\": \"\\u2A4A\",\n\t\"cupdot;\": \"\\u228D\",\n\t\"cupor;\": \"\\u2A45\",\n\t\"cups;\": \"\\u222A\\uFE00\",\n\t\"curarr;\": \"\\u21B7\",\n\t\"curarrm;\": \"\\u293C\",\n\t\"curlyeqprec;\": \"\\u22DE\",\n\t\"curlyeqsucc;\": \"\\u22DF\",\n\t\"curlyvee;\": \"\\u22CE\",\n\t\"curlywedge;\": \"\\u22CF\",\n\t\"curren;\": \"\\u00A4\",\n\t\"curren\": \"\\u00A4\",\n\t\"curvearrowleft;\": \"\\u21B6\",\n\t\"curvearrowright;\": \"\\u21B7\",\n\t\"cuvee;\": \"\\u22CE\",\n\t\"cuwed;\": \"\\u22CF\",\n\t\"cwconint;\": \"\\u2232\",\n\t\"cwint;\": \"\\u2231\",\n\t\"cylcty;\": \"\\u232D\",\n\t\"dagger;\": \"\\u2020\",\n\t\"Dagger;\": \"\\u2021\",\n\t\"daleth;\": \"\\u2138\",\n\t\"darr;\": \"\\u2193\",\n\t\"Darr;\": \"\\u21A1\",\n\t\"dArr;\": \"\\u21D3\",\n\t\"dash;\": \"\\u2010\",\n\t\"Dashv;\": \"\\u2AE4\",\n\t\"dashv;\": \"\\u22A3\",\n\t\"dbkarow;\": \"\\u290F\",\n\t\"dblac;\": \"\\u02DD\",\n\t\"Dcaron;\": \"\\u010E\",\n\t\"dcaron;\": \"\\u010F\",\n\t\"Dcy;\": \"\\u0414\",\n\t\"dcy;\": \"\\u0434\",\n\t\"ddagger;\": \"\\u2021\",\n\t\"ddarr;\": \"\\u21CA\",\n\t\"DD;\": \"\\u2145\",\n\t\"dd;\": \"\\u2146\",\n\t\"DDotrahd;\": \"\\u2911\",\n\t\"ddotseq;\": \"\\u2A77\",\n\t\"deg;\": \"\\u00B0\",\n\t\"deg\": \"\\u00B0\",\n\t\"Del;\": \"\\u2207\",\n\t\"Delta;\": \"\\u0394\",\n\t\"delta;\": \"\\u03B4\",\n\t\"demptyv;\": \"\\u29B1\",\n\t\"dfisht;\": \"\\u297F\",\n\t\"Dfr;\": \"\\uD835\\uDD07\",\n\t\"dfr;\": \"\\uD835\\uDD21\",\n\t\"dHar;\": \"\\u2965\",\n\t\"dharl;\": \"\\u21C3\",\n\t\"dharr;\": \"\\u21C2\",\n\t\"DiacriticalAcute;\": \"\\u00B4\",\n\t\"DiacriticalDot;\": \"\\u02D9\",\n\t\"DiacriticalDoubleAcute;\": \"\\u02DD\",\n\t\"DiacriticalGrave;\": \"\\u0060\",\n\t\"DiacriticalTilde;\": \"\\u02DC\",\n\t\"diam;\": \"\\u22C4\",\n\t\"diamond;\": \"\\u22C4\",\n\t\"Diamond;\": \"\\u22C4\",\n\t\"diamondsuit;\": \"\\u2666\",\n\t\"diams;\": \"\\u2666\",\n\t\"die;\": \"\\u00A8\",\n\t\"DifferentialD;\": \"\\u2146\",\n\t\"digamma;\": \"\\u03DD\",\n\t\"disin;\": \"\\u22F2\",\n\t\"div;\": \"\\u00F7\",\n\t\"divide;\": \"\\u00F7\",\n\t\"divide\": \"\\u00F7\",\n\t\"divideontimes;\": \"\\u22C7\",\n\t\"divonx;\": \"\\u22C7\",\n\t\"DJcy;\": \"\\u0402\",\n\t\"djcy;\": \"\\u0452\",\n\t\"dlcorn;\": \"\\u231E\",\n\t\"dlcrop;\": \"\\u230D\",\n\t\"dollar;\": \"\\u0024\",\n\t\"Dopf;\": \"\\uD835\\uDD3B\",\n\t\"dopf;\": \"\\uD835\\uDD55\",\n\t\"Dot;\": \"\\u00A8\",\n\t\"dot;\": \"\\u02D9\",\n\t\"DotDot;\": \"\\u20DC\",\n\t\"doteq;\": \"\\u2250\",\n\t\"doteqdot;\": \"\\u2251\",\n\t\"DotEqual;\": \"\\u2250\",\n\t\"dotminus;\": \"\\u2238\",\n\t\"dotplus;\": \"\\u2214\",\n\t\"dotsquare;\": \"\\u22A1\",\n\t\"doublebarwedge;\": \"\\u2306\",\n\t\"DoubleContourIntegral;\": \"\\u222F\",\n\t\"DoubleDot;\": \"\\u00A8\",\n\t\"DoubleDownArrow;\": \"\\u21D3\",\n\t\"DoubleLeftArrow;\": \"\\u21D0\",\n\t\"DoubleLeftRightArrow;\": \"\\u21D4\",\n\t\"DoubleLeftTee;\": \"\\u2AE4\",\n\t\"DoubleLongLeftArrow;\": \"\\u27F8\",\n\t\"DoubleLongLeftRightArrow;\": \"\\u27FA\",\n\t\"DoubleLongRightArrow;\": \"\\u27F9\",\n\t\"DoubleRightArrow;\": \"\\u21D2\",\n\t\"DoubleRightTee;\": \"\\u22A8\",\n\t\"DoubleUpArrow;\": \"\\u21D1\",\n\t\"DoubleUpDownArrow;\": \"\\u21D5\",\n\t\"DoubleVerticalBar;\": \"\\u2225\",\n\t\"DownArrowBar;\": \"\\u2913\",\n\t\"downarrow;\": \"\\u2193\",\n\t\"DownArrow;\": \"\\u2193\",\n\t\"Downarrow;\": \"\\u21D3\",\n\t\"DownArrowUpArrow;\": \"\\u21F5\",\n\t\"DownBreve;\": \"\\u0311\",\n\t\"downdownarrows;\": \"\\u21CA\",\n\t\"downharpoonleft;\": \"\\u21C3\",\n\t\"downharpoonright;\": \"\\u21C2\",\n\t\"DownLeftRightVector;\": \"\\u2950\",\n\t\"DownLeftTeeVector;\": \"\\u295E\",\n\t\"DownLeftVectorBar;\": \"\\u2956\",\n\t\"DownLeftVector;\": \"\\u21BD\",\n\t\"DownRightTeeVector;\": \"\\u295F\",\n\t\"DownRightVectorBar;\": \"\\u2957\",\n\t\"DownRightVector;\": \"\\u21C1\",\n\t\"DownTeeArrow;\": \"\\u21A7\",\n\t\"DownTee;\": \"\\u22A4\",\n\t\"drbkarow;\": \"\\u2910\",\n\t\"drcorn;\": \"\\u231F\",\n\t\"drcrop;\": \"\\u230C\",\n\t\"Dscr;\": \"\\uD835\\uDC9F\",\n\t\"dscr;\": \"\\uD835\\uDCB9\",\n\t\"DScy;\": \"\\u0405\",\n\t\"dscy;\": \"\\u0455\",\n\t\"dsol;\": \"\\u29F6\",\n\t\"Dstrok;\": \"\\u0110\",\n\t\"dstrok;\": \"\\u0111\",\n\t\"dtdot;\": \"\\u22F1\",\n\t\"dtri;\": \"\\u25BF\",\n\t\"dtrif;\": \"\\u25BE\",\n\t\"duarr;\": \"\\u21F5\",\n\t\"duhar;\": \"\\u296F\",\n\t\"dwangle;\": \"\\u29A6\",\n\t\"DZcy;\": \"\\u040F\",\n\t\"dzcy;\": \"\\u045F\",\n\t\"dzigrarr;\": \"\\u27FF\",\n\t\"Eacute;\": \"\\u00C9\",\n\t\"Eacute\": \"\\u00C9\",\n\t\"eacute;\": \"\\u00E9\",\n\t\"eacute\": \"\\u00E9\",\n\t\"easter;\": \"\\u2A6E\",\n\t\"Ecaron;\": \"\\u011A\",\n\t\"ecaron;\": \"\\u011B\",\n\t\"Ecirc;\": \"\\u00CA\",\n\t\"Ecirc\": \"\\u00CA\",\n\t\"ecirc;\": \"\\u00EA\",\n\t\"ecirc\": \"\\u00EA\",\n\t\"ecir;\": \"\\u2256\",\n\t\"ecolon;\": \"\\u2255\",\n\t\"Ecy;\": \"\\u042D\",\n\t\"ecy;\": \"\\u044D\",\n\t\"eDDot;\": \"\\u2A77\",\n\t\"Edot;\": \"\\u0116\",\n\t\"edot;\": \"\\u0117\",\n\t\"eDot;\": \"\\u2251\",\n\t\"ee;\": \"\\u2147\",\n\t\"efDot;\": \"\\u2252\",\n\t\"Efr;\": \"\\uD835\\uDD08\",\n\t\"efr;\": \"\\uD835\\uDD22\",\n\t\"eg;\": \"\\u2A9A\",\n\t\"Egrave;\": \"\\u00C8\",\n\t\"Egrave\": \"\\u00C8\",\n\t\"egrave;\": \"\\u00E8\",\n\t\"egrave\": \"\\u00E8\",\n\t\"egs;\": \"\\u2A96\",\n\t\"egsdot;\": \"\\u2A98\",\n\t\"el;\": \"\\u2A99\",\n\t\"Element;\": \"\\u2208\",\n\t\"elinters;\": \"\\u23E7\",\n\t\"ell;\": \"\\u2113\",\n\t\"els;\": \"\\u2A95\",\n\t\"elsdot;\": \"\\u2A97\",\n\t\"Emacr;\": \"\\u0112\",\n\t\"emacr;\": \"\\u0113\",\n\t\"empty;\": \"\\u2205\",\n\t\"emptyset;\": \"\\u2205\",\n\t\"EmptySmallSquare;\": \"\\u25FB\",\n\t\"emptyv;\": \"\\u2205\",\n\t\"EmptyVerySmallSquare;\": \"\\u25AB\",\n\t\"emsp13;\": \"\\u2004\",\n\t\"emsp14;\": \"\\u2005\",\n\t\"emsp;\": \"\\u2003\",\n\t\"ENG;\": \"\\u014A\",\n\t\"eng;\": \"\\u014B\",\n\t\"ensp;\": \"\\u2002\",\n\t\"Eogon;\": \"\\u0118\",\n\t\"eogon;\": \"\\u0119\",\n\t\"Eopf;\": \"\\uD835\\uDD3C\",\n\t\"eopf;\": \"\\uD835\\uDD56\",\n\t\"epar;\": \"\\u22D5\",\n\t\"eparsl;\": \"\\u29E3\",\n\t\"eplus;\": \"\\u2A71\",\n\t\"epsi;\": \"\\u03B5\",\n\t\"Epsilon;\": \"\\u0395\",\n\t\"epsilon;\": \"\\u03B5\",\n\t\"epsiv;\": \"\\u03F5\",\n\t\"eqcirc;\": \"\\u2256\",\n\t\"eqcolon;\": \"\\u2255\",\n\t\"eqsim;\": \"\\u2242\",\n\t\"eqslantgtr;\": \"\\u2A96\",\n\t\"eqslantless;\": \"\\u2A95\",\n\t\"Equal;\": \"\\u2A75\",\n\t\"equals;\": \"\\u003D\",\n\t\"EqualTilde;\": \"\\u2242\",\n\t\"equest;\": \"\\u225F\",\n\t\"Equilibrium;\": \"\\u21CC\",\n\t\"equiv;\": \"\\u2261\",\n\t\"equivDD;\": \"\\u2A78\",\n\t\"eqvparsl;\": \"\\u29E5\",\n\t\"erarr;\": \"\\u2971\",\n\t\"erDot;\": \"\\u2253\",\n\t\"escr;\": \"\\u212F\",\n\t\"Escr;\": \"\\u2130\",\n\t\"esdot;\": \"\\u2250\",\n\t\"Esim;\": \"\\u2A73\",\n\t\"esim;\": \"\\u2242\",\n\t\"Eta;\": \"\\u0397\",\n\t\"eta;\": \"\\u03B7\",\n\t\"ETH;\": \"\\u00D0\",\n\t\"ETH\": \"\\u00D0\",\n\t\"eth;\": \"\\u00F0\",\n\t\"eth\": \"\\u00F0\",\n\t\"Euml;\": \"\\u00CB\",\n\t\"Euml\": \"\\u00CB\",\n\t\"euml;\": \"\\u00EB\",\n\t\"euml\": \"\\u00EB\",\n\t\"euro;\": \"\\u20AC\",\n\t\"excl;\": \"\\u0021\",\n\t\"exist;\": \"\\u2203\",\n\t\"Exists;\": \"\\u2203\",\n\t\"expectation;\": \"\\u2130\",\n\t\"exponentiale;\": \"\\u2147\",\n\t\"ExponentialE;\": \"\\u2147\",\n\t\"fallingdotseq;\": \"\\u2252\",\n\t\"Fcy;\": \"\\u0424\",\n\t\"fcy;\": \"\\u0444\",\n\t\"female;\": \"\\u2640\",\n\t\"ffilig;\": \"\\uFB03\",\n\t\"fflig;\": \"\\uFB00\",\n\t\"ffllig;\": \"\\uFB04\",\n\t\"Ffr;\": \"\\uD835\\uDD09\",\n\t\"ffr;\": \"\\uD835\\uDD23\",\n\t\"filig;\": \"\\uFB01\",\n\t\"FilledSmallSquare;\": \"\\u25FC\",\n\t\"FilledVerySmallSquare;\": \"\\u25AA\",\n\t\"fjlig;\": \"\\u0066\\u006A\",\n\t\"flat;\": \"\\u266D\",\n\t\"fllig;\": \"\\uFB02\",\n\t\"fltns;\": \"\\u25B1\",\n\t\"fnof;\": \"\\u0192\",\n\t\"Fopf;\": \"\\uD835\\uDD3D\",\n\t\"fopf;\": \"\\uD835\\uDD57\",\n\t\"forall;\": \"\\u2200\",\n\t\"ForAll;\": \"\\u2200\",\n\t\"fork;\": \"\\u22D4\",\n\t\"forkv;\": \"\\u2AD9\",\n\t\"Fouriertrf;\": \"\\u2131\",\n\t\"fpartint;\": \"\\u2A0D\",\n\t\"frac12;\": \"\\u00BD\",\n\t\"frac12\": \"\\u00BD\",\n\t\"frac13;\": \"\\u2153\",\n\t\"frac14;\": \"\\u00BC\",\n\t\"frac14\": \"\\u00BC\",\n\t\"frac15;\": \"\\u2155\",\n\t\"frac16;\": \"\\u2159\",\n\t\"frac18;\": \"\\u215B\",\n\t\"frac23;\": \"\\u2154\",\n\t\"frac25;\": \"\\u2156\",\n\t\"frac34;\": \"\\u00BE\",\n\t\"frac34\": \"\\u00BE\",\n\t\"frac35;\": \"\\u2157\",\n\t\"frac38;\": \"\\u215C\",\n\t\"frac45;\": \"\\u2158\",\n\t\"frac56;\": \"\\u215A\",\n\t\"frac58;\": \"\\u215D\",\n\t\"frac78;\": \"\\u215E\",\n\t\"frasl;\": \"\\u2044\",\n\t\"frown;\": \"\\u2322\",\n\t\"fscr;\": \"\\uD835\\uDCBB\",\n\t\"Fscr;\": \"\\u2131\",\n\t\"gacute;\": \"\\u01F5\",\n\t\"Gamma;\": \"\\u0393\",\n\t\"gamma;\": \"\\u03B3\",\n\t\"Gammad;\": \"\\u03DC\",\n\t\"gammad;\": \"\\u03DD\",\n\t\"gap;\": \"\\u2A86\",\n\t\"Gbreve;\": \"\\u011E\",\n\t\"gbreve;\": \"\\u011F\",\n\t\"Gcedil;\": \"\\u0122\",\n\t\"Gcirc;\": \"\\u011C\",\n\t\"gcirc;\": \"\\u011D\",\n\t\"Gcy;\": \"\\u0413\",\n\t\"gcy;\": \"\\u0433\",\n\t\"Gdot;\": \"\\u0120\",\n\t\"gdot;\": \"\\u0121\",\n\t\"ge;\": \"\\u2265\",\n\t\"gE;\": \"\\u2267\",\n\t\"gEl;\": \"\\u2A8C\",\n\t\"gel;\": \"\\u22DB\",\n\t\"geq;\": \"\\u2265\",\n\t\"geqq;\": \"\\u2267\",\n\t\"geqslant;\": \"\\u2A7E\",\n\t\"gescc;\": \"\\u2AA9\",\n\t\"ges;\": \"\\u2A7E\",\n\t\"gesdot;\": \"\\u2A80\",\n\t\"gesdoto;\": \"\\u2A82\",\n\t\"gesdotol;\": \"\\u2A84\",\n\t\"gesl;\": \"\\u22DB\\uFE00\",\n\t\"gesles;\": \"\\u2A94\",\n\t\"Gfr;\": \"\\uD835\\uDD0A\",\n\t\"gfr;\": \"\\uD835\\uDD24\",\n\t\"gg;\": \"\\u226B\",\n\t\"Gg;\": \"\\u22D9\",\n\t\"ggg;\": \"\\u22D9\",\n\t\"gimel;\": \"\\u2137\",\n\t\"GJcy;\": \"\\u0403\",\n\t\"gjcy;\": \"\\u0453\",\n\t\"gla;\": \"\\u2AA5\",\n\t\"gl;\": \"\\u2277\",\n\t\"glE;\": \"\\u2A92\",\n\t\"glj;\": \"\\u2AA4\",\n\t\"gnap;\": \"\\u2A8A\",\n\t\"gnapprox;\": \"\\u2A8A\",\n\t\"gne;\": \"\\u2A88\",\n\t\"gnE;\": \"\\u2269\",\n\t\"gneq;\": \"\\u2A88\",\n\t\"gneqq;\": \"\\u2269\",\n\t\"gnsim;\": \"\\u22E7\",\n\t\"Gopf;\": \"\\uD835\\uDD3E\",\n\t\"gopf;\": \"\\uD835\\uDD58\",\n\t\"grave;\": \"\\u0060\",\n\t\"GreaterEqual;\": \"\\u2265\",\n\t\"GreaterEqualLess;\": \"\\u22DB\",\n\t\"GreaterFullEqual;\": \"\\u2267\",\n\t\"GreaterGreater;\": \"\\u2AA2\",\n\t\"GreaterLess;\": \"\\u2277\",\n\t\"GreaterSlantEqual;\": \"\\u2A7E\",\n\t\"GreaterTilde;\": \"\\u2273\",\n\t\"Gscr;\": \"\\uD835\\uDCA2\",\n\t\"gscr;\": \"\\u210A\",\n\t\"gsim;\": \"\\u2273\",\n\t\"gsime;\": \"\\u2A8E\",\n\t\"gsiml;\": \"\\u2A90\",\n\t\"gtcc;\": \"\\u2AA7\",\n\t\"gtcir;\": \"\\u2A7A\",\n\t\"gt;\": \"\\u003E\",\n\t\"gt\": \"\\u003E\",\n\t\"GT;\": \"\\u003E\",\n\t\"GT\": \"\\u003E\",\n\t\"Gt;\": \"\\u226B\",\n\t\"gtdot;\": \"\\u22D7\",\n\t\"gtlPar;\": \"\\u2995\",\n\t\"gtquest;\": \"\\u2A7C\",\n\t\"gtrapprox;\": \"\\u2A86\",\n\t\"gtrarr;\": \"\\u2978\",\n\t\"gtrdot;\": \"\\u22D7\",\n\t\"gtreqless;\": \"\\u22DB\",\n\t\"gtreqqless;\": \"\\u2A8C\",\n\t\"gtrless;\": \"\\u2277\",\n\t\"gtrsim;\": \"\\u2273\",\n\t\"gvertneqq;\": \"\\u2269\\uFE00\",\n\t\"gvnE;\": \"\\u2269\\uFE00\",\n\t\"Hacek;\": \"\\u02C7\",\n\t\"hairsp;\": \"\\u200A\",\n\t\"half;\": \"\\u00BD\",\n\t\"hamilt;\": \"\\u210B\",\n\t\"HARDcy;\": \"\\u042A\",\n\t\"hardcy;\": \"\\u044A\",\n\t\"harrcir;\": \"\\u2948\",\n\t\"harr;\": \"\\u2194\",\n\t\"hArr;\": \"\\u21D4\",\n\t\"harrw;\": \"\\u21AD\",\n\t\"Hat;\": \"\\u005E\",\n\t\"hbar;\": \"\\u210F\",\n\t\"Hcirc;\": \"\\u0124\",\n\t\"hcirc;\": \"\\u0125\",\n\t\"hearts;\": \"\\u2665\",\n\t\"heartsuit;\": \"\\u2665\",\n\t\"hellip;\": \"\\u2026\",\n\t\"hercon;\": \"\\u22B9\",\n\t\"hfr;\": \"\\uD835\\uDD25\",\n\t\"Hfr;\": \"\\u210C\",\n\t\"HilbertSpace;\": \"\\u210B\",\n\t\"hksearow;\": \"\\u2925\",\n\t\"hkswarow;\": \"\\u2926\",\n\t\"hoarr;\": \"\\u21FF\",\n\t\"homtht;\": \"\\u223B\",\n\t\"hookleftarrow;\": \"\\u21A9\",\n\t\"hookrightarrow;\": \"\\u21AA\",\n\t\"hopf;\": \"\\uD835\\uDD59\",\n\t\"Hopf;\": \"\\u210D\",\n\t\"horbar;\": \"\\u2015\",\n\t\"HorizontalLine;\": \"\\u2500\",\n\t\"hscr;\": \"\\uD835\\uDCBD\",\n\t\"Hscr;\": \"\\u210B\",\n\t\"hslash;\": \"\\u210F\",\n\t\"Hstrok;\": \"\\u0126\",\n\t\"hstrok;\": \"\\u0127\",\n\t\"HumpDownHump;\": \"\\u224E\",\n\t\"HumpEqual;\": \"\\u224F\",\n\t\"hybull;\": \"\\u2043\",\n\t\"hyphen;\": \"\\u2010\",\n\t\"Iacute;\": \"\\u00CD\",\n\t\"Iacute\": \"\\u00CD\",\n\t\"iacute;\": \"\\u00ED\",\n\t\"iacute\": \"\\u00ED\",\n\t\"ic;\": \"\\u2063\",\n\t\"Icirc;\": \"\\u00CE\",\n\t\"Icirc\": \"\\u00CE\",\n\t\"icirc;\": \"\\u00EE\",\n\t\"icirc\": \"\\u00EE\",\n\t\"Icy;\": \"\\u0418\",\n\t\"icy;\": \"\\u0438\",\n\t\"Idot;\": \"\\u0130\",\n\t\"IEcy;\": \"\\u0415\",\n\t\"iecy;\": \"\\u0435\",\n\t\"iexcl;\": \"\\u00A1\",\n\t\"iexcl\": \"\\u00A1\",\n\t\"iff;\": \"\\u21D4\",\n\t\"ifr;\": \"\\uD835\\uDD26\",\n\t\"Ifr;\": \"\\u2111\",\n\t\"Igrave;\": \"\\u00CC\",\n\t\"Igrave\": \"\\u00CC\",\n\t\"igrave;\": \"\\u00EC\",\n\t\"igrave\": \"\\u00EC\",\n\t\"ii;\": \"\\u2148\",\n\t\"iiiint;\": \"\\u2A0C\",\n\t\"iiint;\": \"\\u222D\",\n\t\"iinfin;\": \"\\u29DC\",\n\t\"iiota;\": \"\\u2129\",\n\t\"IJlig;\": \"\\u0132\",\n\t\"ijlig;\": \"\\u0133\",\n\t\"Imacr;\": \"\\u012A\",\n\t\"imacr;\": \"\\u012B\",\n\t\"image;\": \"\\u2111\",\n\t\"ImaginaryI;\": \"\\u2148\",\n\t\"imagline;\": \"\\u2110\",\n\t\"imagpart;\": \"\\u2111\",\n\t\"imath;\": \"\\u0131\",\n\t\"Im;\": \"\\u2111\",\n\t\"imof;\": \"\\u22B7\",\n\t\"imped;\": \"\\u01B5\",\n\t\"Implies;\": \"\\u21D2\",\n\t\"incare;\": \"\\u2105\",\n\t\"in;\": \"\\u2208\",\n\t\"infin;\": \"\\u221E\",\n\t\"infintie;\": \"\\u29DD\",\n\t\"inodot;\": \"\\u0131\",\n\t\"intcal;\": \"\\u22BA\",\n\t\"int;\": \"\\u222B\",\n\t\"Int;\": \"\\u222C\",\n\t\"integers;\": \"\\u2124\",\n\t\"Integral;\": \"\\u222B\",\n\t\"intercal;\": \"\\u22BA\",\n\t\"Intersection;\": \"\\u22C2\",\n\t\"intlarhk;\": \"\\u2A17\",\n\t\"intprod;\": \"\\u2A3C\",\n\t\"InvisibleComma;\": \"\\u2063\",\n\t\"InvisibleTimes;\": \"\\u2062\",\n\t\"IOcy;\": \"\\u0401\",\n\t\"iocy;\": \"\\u0451\",\n\t\"Iogon;\": \"\\u012E\",\n\t\"iogon;\": \"\\u012F\",\n\t\"Iopf;\": \"\\uD835\\uDD40\",\n\t\"iopf;\": \"\\uD835\\uDD5A\",\n\t\"Iota;\": \"\\u0399\",\n\t\"iota;\": \"\\u03B9\",\n\t\"iprod;\": \"\\u2A3C\",\n\t\"iquest;\": \"\\u00BF\",\n\t\"iquest\": \"\\u00BF\",\n\t\"iscr;\": \"\\uD835\\uDCBE\",\n\t\"Iscr;\": \"\\u2110\",\n\t\"isin;\": \"\\u2208\",\n\t\"isindot;\": \"\\u22F5\",\n\t\"isinE;\": \"\\u22F9\",\n\t\"isins;\": \"\\u22F4\",\n\t\"isinsv;\": \"\\u22F3\",\n\t\"isinv;\": \"\\u2208\",\n\t\"it;\": \"\\u2062\",\n\t\"Itilde;\": \"\\u0128\",\n\t\"itilde;\": \"\\u0129\",\n\t\"Iukcy;\": \"\\u0406\",\n\t\"iukcy;\": \"\\u0456\",\n\t\"Iuml;\": \"\\u00CF\",\n\t\"Iuml\": \"\\u00CF\",\n\t\"iuml;\": \"\\u00EF\",\n\t\"iuml\": \"\\u00EF\",\n\t\"Jcirc;\": \"\\u0134\",\n\t\"jcirc;\": \"\\u0135\",\n\t\"Jcy;\": \"\\u0419\",\n\t\"jcy;\": \"\\u0439\",\n\t\"Jfr;\": \"\\uD835\\uDD0D\",\n\t\"jfr;\": \"\\uD835\\uDD27\",\n\t\"jmath;\": \"\\u0237\",\n\t\"Jopf;\": \"\\uD835\\uDD41\",\n\t\"jopf;\": \"\\uD835\\uDD5B\",\n\t\"Jscr;\": \"\\uD835\\uDCA5\",\n\t\"jscr;\": \"\\uD835\\uDCBF\",\n\t\"Jsercy;\": \"\\u0408\",\n\t\"jsercy;\": \"\\u0458\",\n\t\"Jukcy;\": \"\\u0404\",\n\t\"jukcy;\": \"\\u0454\",\n\t\"Kappa;\": \"\\u039A\",\n\t\"kappa;\": \"\\u03BA\",\n\t\"kappav;\": \"\\u03F0\",\n\t\"Kcedil;\": \"\\u0136\",\n\t\"kcedil;\": \"\\u0137\",\n\t\"Kcy;\": \"\\u041A\",\n\t\"kcy;\": \"\\u043A\",\n\t\"Kfr;\": \"\\uD835\\uDD0E\",\n\t\"kfr;\": \"\\uD835\\uDD28\",\n\t\"kgreen;\": \"\\u0138\",\n\t\"KHcy;\": \"\\u0425\",\n\t\"khcy;\": \"\\u0445\",\n\t\"KJcy;\": \"\\u040C\",\n\t\"kjcy;\": \"\\u045C\",\n\t\"Kopf;\": \"\\uD835\\uDD42\",\n\t\"kopf;\": \"\\uD835\\uDD5C\",\n\t\"Kscr;\": \"\\uD835\\uDCA6\",\n\t\"kscr;\": \"\\uD835\\uDCC0\",\n\t\"lAarr;\": \"\\u21DA\",\n\t\"Lacute;\": \"\\u0139\",\n\t\"lacute;\": \"\\u013A\",\n\t\"laemptyv;\": \"\\u29B4\",\n\t\"lagran;\": \"\\u2112\",\n\t\"Lambda;\": \"\\u039B\",\n\t\"lambda;\": \"\\u03BB\",\n\t\"lang;\": \"\\u27E8\",\n\t\"Lang;\": \"\\u27EA\",\n\t\"langd;\": \"\\u2991\",\n\t\"langle;\": \"\\u27E8\",\n\t\"lap;\": \"\\u2A85\",\n\t\"Laplacetrf;\": \"\\u2112\",\n\t\"laquo;\": \"\\u00AB\",\n\t\"laquo\": \"\\u00AB\",\n\t\"larrb;\": \"\\u21E4\",\n\t\"larrbfs;\": \"\\u291F\",\n\t\"larr;\": \"\\u2190\",\n\t\"Larr;\": \"\\u219E\",\n\t\"lArr;\": \"\\u21D0\",\n\t\"larrfs;\": \"\\u291D\",\n\t\"larrhk;\": \"\\u21A9\",\n\t\"larrlp;\": \"\\u21AB\",\n\t\"larrpl;\": \"\\u2939\",\n\t\"larrsim;\": \"\\u2973\",\n\t\"larrtl;\": \"\\u21A2\",\n\t\"latail;\": \"\\u2919\",\n\t\"lAtail;\": \"\\u291B\",\n\t\"lat;\": \"\\u2AAB\",\n\t\"late;\": \"\\u2AAD\",\n\t\"lates;\": \"\\u2AAD\\uFE00\",\n\t\"lbarr;\": \"\\u290C\",\n\t\"lBarr;\": \"\\u290E\",\n\t\"lbbrk;\": \"\\u2772\",\n\t\"lbrace;\": \"\\u007B\",\n\t\"lbrack;\": \"\\u005B\",\n\t\"lbrke;\": \"\\u298B\",\n\t\"lbrksld;\": \"\\u298F\",\n\t\"lbrkslu;\": \"\\u298D\",\n\t\"Lcaron;\": \"\\u013D\",\n\t\"lcaron;\": \"\\u013E\",\n\t\"Lcedil;\": \"\\u013B\",\n\t\"lcedil;\": \"\\u013C\",\n\t\"lceil;\": \"\\u2308\",\n\t\"lcub;\": \"\\u007B\",\n\t\"Lcy;\": \"\\u041B\",\n\t\"lcy;\": \"\\u043B\",\n\t\"ldca;\": \"\\u2936\",\n\t\"ldquo;\": \"\\u201C\",\n\t\"ldquor;\": \"\\u201E\",\n\t\"ldrdhar;\": \"\\u2967\",\n\t\"ldrushar;\": \"\\u294B\",\n\t\"ldsh;\": \"\\u21B2\",\n\t\"le;\": \"\\u2264\",\n\t\"lE;\": \"\\u2266\",\n\t\"LeftAngleBracket;\": \"\\u27E8\",\n\t\"LeftArrowBar;\": \"\\u21E4\",\n\t\"leftarrow;\": \"\\u2190\",\n\t\"LeftArrow;\": \"\\u2190\",\n\t\"Leftarrow;\": \"\\u21D0\",\n\t\"LeftArrowRightArrow;\": \"\\u21C6\",\n\t\"leftarrowtail;\": \"\\u21A2\",\n\t\"LeftCeiling;\": \"\\u2308\",\n\t\"LeftDoubleBracket;\": \"\\u27E6\",\n\t\"LeftDownTeeVector;\": \"\\u2961\",\n\t\"LeftDownVectorBar;\": \"\\u2959\",\n\t\"LeftDownVector;\": \"\\u21C3\",\n\t\"LeftFloor;\": \"\\u230A\",\n\t\"leftharpoondown;\": \"\\u21BD\",\n\t\"leftharpoonup;\": \"\\u21BC\",\n\t\"leftleftarrows;\": \"\\u21C7\",\n\t\"leftrightarrow;\": \"\\u2194\",\n\t\"LeftRightArrow;\": \"\\u2194\",\n\t\"Leftrightarrow;\": \"\\u21D4\",\n\t\"leftrightarrows;\": \"\\u21C6\",\n\t\"leftrightharpoons;\": \"\\u21CB\",\n\t\"leftrightsquigarrow;\": \"\\u21AD\",\n\t\"LeftRightVector;\": \"\\u294E\",\n\t\"LeftTeeArrow;\": \"\\u21A4\",\n\t\"LeftTee;\": \"\\u22A3\",\n\t\"LeftTeeVector;\": \"\\u295A\",\n\t\"leftthreetimes;\": \"\\u22CB\",\n\t\"LeftTriangleBar;\": \"\\u29CF\",\n\t\"LeftTriangle;\": \"\\u22B2\",\n\t\"LeftTriangleEqual;\": \"\\u22B4\",\n\t\"LeftUpDownVector;\": \"\\u2951\",\n\t\"LeftUpTeeVector;\": \"\\u2960\",\n\t\"LeftUpVectorBar;\": \"\\u2958\",\n\t\"LeftUpVector;\": \"\\u21BF\",\n\t\"LeftVectorBar;\": \"\\u2952\",\n\t\"LeftVector;\": \"\\u21BC\",\n\t\"lEg;\": \"\\u2A8B\",\n\t\"leg;\": \"\\u22DA\",\n\t\"leq;\": \"\\u2264\",\n\t\"leqq;\": \"\\u2266\",\n\t\"leqslant;\": \"\\u2A7D\",\n\t\"lescc;\": \"\\u2AA8\",\n\t\"les;\": \"\\u2A7D\",\n\t\"lesdot;\": \"\\u2A7F\",\n\t\"lesdoto;\": \"\\u2A81\",\n\t\"lesdotor;\": \"\\u2A83\",\n\t\"lesg;\": \"\\u22DA\\uFE00\",\n\t\"lesges;\": \"\\u2A93\",\n\t\"lessapprox;\": \"\\u2A85\",\n\t\"lessdot;\": \"\\u22D6\",\n\t\"lesseqgtr;\": \"\\u22DA\",\n\t\"lesseqqgtr;\": \"\\u2A8B\",\n\t\"LessEqualGreater;\": \"\\u22DA\",\n\t\"LessFullEqual;\": \"\\u2266\",\n\t\"LessGreater;\": \"\\u2276\",\n\t\"lessgtr;\": \"\\u2276\",\n\t\"LessLess;\": \"\\u2AA1\",\n\t\"lesssim;\": \"\\u2272\",\n\t\"LessSlantEqual;\": \"\\u2A7D\",\n\t\"LessTilde;\": \"\\u2272\",\n\t\"lfisht;\": \"\\u297C\",\n\t\"lfloor;\": \"\\u230A\",\n\t\"Lfr;\": \"\\uD835\\uDD0F\",\n\t\"lfr;\": \"\\uD835\\uDD29\",\n\t\"lg;\": \"\\u2276\",\n\t\"lgE;\": \"\\u2A91\",\n\t\"lHar;\": \"\\u2962\",\n\t\"lhard;\": \"\\u21BD\",\n\t\"lharu;\": \"\\u21BC\",\n\t\"lharul;\": \"\\u296A\",\n\t\"lhblk;\": \"\\u2584\",\n\t\"LJcy;\": \"\\u0409\",\n\t\"ljcy;\": \"\\u0459\",\n\t\"llarr;\": \"\\u21C7\",\n\t\"ll;\": \"\\u226A\",\n\t\"Ll;\": \"\\u22D8\",\n\t\"llcorner;\": \"\\u231E\",\n\t\"Lleftarrow;\": \"\\u21DA\",\n\t\"llhard;\": \"\\u296B\",\n\t\"lltri;\": \"\\u25FA\",\n\t\"Lmidot;\": \"\\u013F\",\n\t\"lmidot;\": \"\\u0140\",\n\t\"lmoustache;\": \"\\u23B0\",\n\t\"lmoust;\": \"\\u23B0\",\n\t\"lnap;\": \"\\u2A89\",\n\t\"lnapprox;\": \"\\u2A89\",\n\t\"lne;\": \"\\u2A87\",\n\t\"lnE;\": \"\\u2268\",\n\t\"lneq;\": \"\\u2A87\",\n\t\"lneqq;\": \"\\u2268\",\n\t\"lnsim;\": \"\\u22E6\",\n\t\"loang;\": \"\\u27EC\",\n\t\"loarr;\": \"\\u21FD\",\n\t\"lobrk;\": \"\\u27E6\",\n\t\"longleftarrow;\": \"\\u27F5\",\n\t\"LongLeftArrow;\": \"\\u27F5\",\n\t\"Longleftarrow;\": \"\\u27F8\",\n\t\"longleftrightarrow;\": \"\\u27F7\",\n\t\"LongLeftRightArrow;\": \"\\u27F7\",\n\t\"Longleftrightarrow;\": \"\\u27FA\",\n\t\"longmapsto;\": \"\\u27FC\",\n\t\"longrightarrow;\": \"\\u27F6\",\n\t\"LongRightArrow;\": \"\\u27F6\",\n\t\"Longrightarrow;\": \"\\u27F9\",\n\t\"looparrowleft;\": \"\\u21AB\",\n\t\"looparrowright;\": \"\\u21AC\",\n\t\"lopar;\": \"\\u2985\",\n\t\"Lopf;\": \"\\uD835\\uDD43\",\n\t\"lopf;\": \"\\uD835\\uDD5D\",\n\t\"loplus;\": \"\\u2A2D\",\n\t\"lotimes;\": \"\\u2A34\",\n\t\"lowast;\": \"\\u2217\",\n\t\"lowbar;\": \"\\u005F\",\n\t\"LowerLeftArrow;\": \"\\u2199\",\n\t\"LowerRightArrow;\": \"\\u2198\",\n\t\"loz;\": \"\\u25CA\",\n\t\"lozenge;\": \"\\u25CA\",\n\t\"lozf;\": \"\\u29EB\",\n\t\"lpar;\": \"\\u0028\",\n\t\"lparlt;\": \"\\u2993\",\n\t\"lrarr;\": \"\\u21C6\",\n\t\"lrcorner;\": \"\\u231F\",\n\t\"lrhar;\": \"\\u21CB\",\n\t\"lrhard;\": \"\\u296D\",\n\t\"lrm;\": \"\\u200E\",\n\t\"lrtri;\": \"\\u22BF\",\n\t\"lsaquo;\": \"\\u2039\",\n\t\"lscr;\": \"\\uD835\\uDCC1\",\n\t\"Lscr;\": \"\\u2112\",\n\t\"lsh;\": \"\\u21B0\",\n\t\"Lsh;\": \"\\u21B0\",\n\t\"lsim;\": \"\\u2272\",\n\t\"lsime;\": \"\\u2A8D\",\n\t\"lsimg;\": \"\\u2A8F\",\n\t\"lsqb;\": \"\\u005B\",\n\t\"lsquo;\": \"\\u2018\",\n\t\"lsquor;\": \"\\u201A\",\n\t\"Lstrok;\": \"\\u0141\",\n\t\"lstrok;\": \"\\u0142\",\n\t\"ltcc;\": \"\\u2AA6\",\n\t\"ltcir;\": \"\\u2A79\",\n\t\"lt;\": \"\\u003C\",\n\t\"lt\": \"\\u003C\",\n\t\"LT;\": \"\\u003C\",\n\t\"LT\": \"\\u003C\",\n\t\"Lt;\": \"\\u226A\",\n\t\"ltdot;\": \"\\u22D6\",\n\t\"lthree;\": \"\\u22CB\",\n\t\"ltimes;\": \"\\u22C9\",\n\t\"ltlarr;\": \"\\u2976\",\n\t\"ltquest;\": \"\\u2A7B\",\n\t\"ltri;\": \"\\u25C3\",\n\t\"ltrie;\": \"\\u22B4\",\n\t\"ltrif;\": \"\\u25C2\",\n\t\"ltrPar;\": \"\\u2996\",\n\t\"lurdshar;\": \"\\u294A\",\n\t\"luruhar;\": \"\\u2966\",\n\t\"lvertneqq;\": \"\\u2268\\uFE00\",\n\t\"lvnE;\": \"\\u2268\\uFE00\",\n\t\"macr;\": \"\\u00AF\",\n\t\"macr\": \"\\u00AF\",\n\t\"male;\": \"\\u2642\",\n\t\"malt;\": \"\\u2720\",\n\t\"maltese;\": \"\\u2720\",\n\t\"Map;\": \"\\u2905\",\n\t\"map;\": \"\\u21A6\",\n\t\"mapsto;\": \"\\u21A6\",\n\t\"mapstodown;\": \"\\u21A7\",\n\t\"mapstoleft;\": \"\\u21A4\",\n\t\"mapstoup;\": \"\\u21A5\",\n\t\"marker;\": \"\\u25AE\",\n\t\"mcomma;\": \"\\u2A29\",\n\t\"Mcy;\": \"\\u041C\",\n\t\"mcy;\": \"\\u043C\",\n\t\"mdash;\": \"\\u2014\",\n\t\"mDDot;\": \"\\u223A\",\n\t\"measuredangle;\": \"\\u2221\",\n\t\"MediumSpace;\": \"\\u205F\",\n\t\"Mellintrf;\": \"\\u2133\",\n\t\"Mfr;\": \"\\uD835\\uDD10\",\n\t\"mfr;\": \"\\uD835\\uDD2A\",\n\t\"mho;\": \"\\u2127\",\n\t\"micro;\": \"\\u00B5\",\n\t\"micro\": \"\\u00B5\",\n\t\"midast;\": \"\\u002A\",\n\t\"midcir;\": \"\\u2AF0\",\n\t\"mid;\": \"\\u2223\",\n\t\"middot;\": \"\\u00B7\",\n\t\"middot\": \"\\u00B7\",\n\t\"minusb;\": \"\\u229F\",\n\t\"minus;\": \"\\u2212\",\n\t\"minusd;\": \"\\u2238\",\n\t\"minusdu;\": \"\\u2A2A\",\n\t\"MinusPlus;\": \"\\u2213\",\n\t\"mlcp;\": \"\\u2ADB\",\n\t\"mldr;\": \"\\u2026\",\n\t\"mnplus;\": \"\\u2213\",\n\t\"models;\": \"\\u22A7\",\n\t\"Mopf;\": \"\\uD835\\uDD44\",\n\t\"mopf;\": \"\\uD835\\uDD5E\",\n\t\"mp;\": \"\\u2213\",\n\t\"mscr;\": \"\\uD835\\uDCC2\",\n\t\"Mscr;\": \"\\u2133\",\n\t\"mstpos;\": \"\\u223E\",\n\t\"Mu;\": \"\\u039C\",\n\t\"mu;\": \"\\u03BC\",\n\t\"multimap;\": \"\\u22B8\",\n\t\"mumap;\": \"\\u22B8\",\n\t\"nabla;\": \"\\u2207\",\n\t\"Nacute;\": \"\\u0143\",\n\t\"nacute;\": \"\\u0144\",\n\t\"nang;\": \"\\u2220\\u20D2\",\n\t\"nap;\": \"\\u2249\",\n\t\"napE;\": \"\\u2A70\\u0338\",\n\t\"napid;\": \"\\u224B\\u0338\",\n\t\"napos;\": \"\\u0149\",\n\t\"napprox;\": \"\\u2249\",\n\t\"natural;\": \"\\u266E\",\n\t\"naturals;\": \"\\u2115\",\n\t\"natur;\": \"\\u266E\",\n\t\"nbsp;\": \"\\u00A0\",\n\t\"nbsp\": \"\\u00A0\",\n\t\"nbump;\": \"\\u224E\\u0338\",\n\t\"nbumpe;\": \"\\u224F\\u0338\",\n\t\"ncap;\": \"\\u2A43\",\n\t\"Ncaron;\": \"\\u0147\",\n\t\"ncaron;\": \"\\u0148\",\n\t\"Ncedil;\": \"\\u0145\",\n\t\"ncedil;\": \"\\u0146\",\n\t\"ncong;\": \"\\u2247\",\n\t\"ncongdot;\": \"\\u2A6D\\u0338\",\n\t\"ncup;\": \"\\u2A42\",\n\t\"Ncy;\": \"\\u041D\",\n\t\"ncy;\": \"\\u043D\",\n\t\"ndash;\": \"\\u2013\",\n\t\"nearhk;\": \"\\u2924\",\n\t\"nearr;\": \"\\u2197\",\n\t\"neArr;\": \"\\u21D7\",\n\t\"nearrow;\": \"\\u2197\",\n\t\"ne;\": \"\\u2260\",\n\t\"nedot;\": \"\\u2250\\u0338\",\n\t\"NegativeMediumSpace;\": \"\\u200B\",\n\t\"NegativeThickSpace;\": \"\\u200B\",\n\t\"NegativeThinSpace;\": \"\\u200B\",\n\t\"NegativeVeryThinSpace;\": \"\\u200B\",\n\t\"nequiv;\": \"\\u2262\",\n\t\"nesear;\": \"\\u2928\",\n\t\"nesim;\": \"\\u2242\\u0338\",\n\t\"NestedGreaterGreater;\": \"\\u226B\",\n\t\"NestedLessLess;\": \"\\u226A\",\n\t\"NewLine;\": \"\\u000A\",\n\t\"nexist;\": \"\\u2204\",\n\t\"nexists;\": \"\\u2204\",\n\t\"Nfr;\": \"\\uD835\\uDD11\",\n\t\"nfr;\": \"\\uD835\\uDD2B\",\n\t\"ngE;\": \"\\u2267\\u0338\",\n\t\"nge;\": \"\\u2271\",\n\t\"ngeq;\": \"\\u2271\",\n\t\"ngeqq;\": \"\\u2267\\u0338\",\n\t\"ngeqslant;\": \"\\u2A7E\\u0338\",\n\t\"nges;\": \"\\u2A7E\\u0338\",\n\t\"nGg;\": \"\\u22D9\\u0338\",\n\t\"ngsim;\": \"\\u2275\",\n\t\"nGt;\": \"\\u226B\\u20D2\",\n\t\"ngt;\": \"\\u226F\",\n\t\"ngtr;\": \"\\u226F\",\n\t\"nGtv;\": \"\\u226B\\u0338\",\n\t\"nharr;\": \"\\u21AE\",\n\t\"nhArr;\": \"\\u21CE\",\n\t\"nhpar;\": \"\\u2AF2\",\n\t\"ni;\": \"\\u220B\",\n\t\"nis;\": \"\\u22FC\",\n\t\"nisd;\": \"\\u22FA\",\n\t\"niv;\": \"\\u220B\",\n\t\"NJcy;\": \"\\u040A\",\n\t\"njcy;\": \"\\u045A\",\n\t\"nlarr;\": \"\\u219A\",\n\t\"nlArr;\": \"\\u21CD\",\n\t\"nldr;\": \"\\u2025\",\n\t\"nlE;\": \"\\u2266\\u0338\",\n\t\"nle;\": \"\\u2270\",\n\t\"nleftarrow;\": \"\\u219A\",\n\t\"nLeftarrow;\": \"\\u21CD\",\n\t\"nleftrightarrow;\": \"\\u21AE\",\n\t\"nLeftrightarrow;\": \"\\u21CE\",\n\t\"nleq;\": \"\\u2270\",\n\t\"nleqq;\": \"\\u2266\\u0338\",\n\t\"nleqslant;\": \"\\u2A7D\\u0338\",\n\t\"nles;\": \"\\u2A7D\\u0338\",\n\t\"nless;\": \"\\u226E\",\n\t\"nLl;\": \"\\u22D8\\u0338\",\n\t\"nlsim;\": \"\\u2274\",\n\t\"nLt;\": \"\\u226A\\u20D2\",\n\t\"nlt;\": \"\\u226E\",\n\t\"nltri;\": \"\\u22EA\",\n\t\"nltrie;\": \"\\u22EC\",\n\t\"nLtv;\": \"\\u226A\\u0338\",\n\t\"nmid;\": \"\\u2224\",\n\t\"NoBreak;\": \"\\u2060\",\n\t\"NonBreakingSpace;\": \"\\u00A0\",\n\t\"nopf;\": \"\\uD835\\uDD5F\",\n\t\"Nopf;\": \"\\u2115\",\n\t\"Not;\": \"\\u2AEC\",\n\t\"not;\": \"\\u00AC\",\n\t\"not\": \"\\u00AC\",\n\t\"NotCongruent;\": \"\\u2262\",\n\t\"NotCupCap;\": \"\\u226D\",\n\t\"NotDoubleVerticalBar;\": \"\\u2226\",\n\t\"NotElement;\": \"\\u2209\",\n\t\"NotEqual;\": \"\\u2260\",\n\t\"NotEqualTilde;\": \"\\u2242\\u0338\",\n\t\"NotExists;\": \"\\u2204\",\n\t\"NotGreater;\": \"\\u226F\",\n\t\"NotGreaterEqual;\": \"\\u2271\",\n\t\"NotGreaterFullEqual;\": \"\\u2267\\u0338\",\n\t\"NotGreaterGreater;\": \"\\u226B\\u0338\",\n\t\"NotGreaterLess;\": \"\\u2279\",\n\t\"NotGreaterSlantEqual;\": \"\\u2A7E\\u0338\",\n\t\"NotGreaterTilde;\": \"\\u2275\",\n\t\"NotHumpDownHump;\": \"\\u224E\\u0338\",\n\t\"NotHumpEqual;\": \"\\u224F\\u0338\",\n\t\"notin;\": \"\\u2209\",\n\t\"notindot;\": \"\\u22F5\\u0338\",\n\t\"notinE;\": \"\\u22F9\\u0338\",\n\t\"notinva;\": \"\\u2209\",\n\t\"notinvb;\": \"\\u22F7\",\n\t\"notinvc;\": \"\\u22F6\",\n\t\"NotLeftTriangleBar;\": \"\\u29CF\\u0338\",\n\t\"NotLeftTriangle;\": \"\\u22EA\",\n\t\"NotLeftTriangleEqual;\": \"\\u22EC\",\n\t\"NotLess;\": \"\\u226E\",\n\t\"NotLessEqual;\": \"\\u2270\",\n\t\"NotLessGreater;\": \"\\u2278\",\n\t\"NotLessLess;\": \"\\u226A\\u0338\",\n\t\"NotLessSlantEqual;\": \"\\u2A7D\\u0338\",\n\t\"NotLessTilde;\": \"\\u2274\",\n\t\"NotNestedGreaterGreater;\": \"\\u2AA2\\u0338\",\n\t\"NotNestedLessLess;\": \"\\u2AA1\\u0338\",\n\t\"notni;\": \"\\u220C\",\n\t\"notniva;\": \"\\u220C\",\n\t\"notnivb;\": \"\\u22FE\",\n\t\"notnivc;\": \"\\u22FD\",\n\t\"NotPrecedes;\": \"\\u2280\",\n\t\"NotPrecedesEqual;\": \"\\u2AAF\\u0338\",\n\t\"NotPrecedesSlantEqual;\": \"\\u22E0\",\n\t\"NotReverseElement;\": \"\\u220C\",\n\t\"NotRightTriangleBar;\": \"\\u29D0\\u0338\",\n\t\"NotRightTriangle;\": \"\\u22EB\",\n\t\"NotRightTriangleEqual;\": \"\\u22ED\",\n\t\"NotSquareSubset;\": \"\\u228F\\u0338\",\n\t\"NotSquareSubsetEqual;\": \"\\u22E2\",\n\t\"NotSquareSuperset;\": \"\\u2290\\u0338\",\n\t\"NotSquareSupersetEqual;\": \"\\u22E3\",\n\t\"NotSubset;\": \"\\u2282\\u20D2\",\n\t\"NotSubsetEqual;\": \"\\u2288\",\n\t\"NotSucceeds;\": \"\\u2281\",\n\t\"NotSucceedsEqual;\": \"\\u2AB0\\u0338\",\n\t\"NotSucceedsSlantEqual;\": \"\\u22E1\",\n\t\"NotSucceedsTilde;\": \"\\u227F\\u0338\",\n\t\"NotSuperset;\": \"\\u2283\\u20D2\",\n\t\"NotSupersetEqual;\": \"\\u2289\",\n\t\"NotTilde;\": \"\\u2241\",\n\t\"NotTildeEqual;\": \"\\u2244\",\n\t\"NotTildeFullEqual;\": \"\\u2247\",\n\t\"NotTildeTilde;\": \"\\u2249\",\n\t\"NotVerticalBar;\": \"\\u2224\",\n\t\"nparallel;\": \"\\u2226\",\n\t\"npar;\": \"\\u2226\",\n\t\"nparsl;\": \"\\u2AFD\\u20E5\",\n\t\"npart;\": \"\\u2202\\u0338\",\n\t\"npolint;\": \"\\u2A14\",\n\t\"npr;\": \"\\u2280\",\n\t\"nprcue;\": \"\\u22E0\",\n\t\"nprec;\": \"\\u2280\",\n\t\"npreceq;\": \"\\u2AAF\\u0338\",\n\t\"npre;\": \"\\u2AAF\\u0338\",\n\t\"nrarrc;\": \"\\u2933\\u0338\",\n\t\"nrarr;\": \"\\u219B\",\n\t\"nrArr;\": \"\\u21CF\",\n\t\"nrarrw;\": \"\\u219D\\u0338\",\n\t\"nrightarrow;\": \"\\u219B\",\n\t\"nRightarrow;\": \"\\u21CF\",\n\t\"nrtri;\": \"\\u22EB\",\n\t\"nrtrie;\": \"\\u22ED\",\n\t\"nsc;\": \"\\u2281\",\n\t\"nsccue;\": \"\\u22E1\",\n\t\"nsce;\": \"\\u2AB0\\u0338\",\n\t\"Nscr;\": \"\\uD835\\uDCA9\",\n\t\"nscr;\": \"\\uD835\\uDCC3\",\n\t\"nshortmid;\": \"\\u2224\",\n\t\"nshortparallel;\": \"\\u2226\",\n\t\"nsim;\": \"\\u2241\",\n\t\"nsime;\": \"\\u2244\",\n\t\"nsimeq;\": \"\\u2244\",\n\t\"nsmid;\": \"\\u2224\",\n\t\"nspar;\": \"\\u2226\",\n\t\"nsqsube;\": \"\\u22E2\",\n\t\"nsqsupe;\": \"\\u22E3\",\n\t\"nsub;\": \"\\u2284\",\n\t\"nsubE;\": \"\\u2AC5\\u0338\",\n\t\"nsube;\": \"\\u2288\",\n\t\"nsubset;\": \"\\u2282\\u20D2\",\n\t\"nsubseteq;\": \"\\u2288\",\n\t\"nsubseteqq;\": \"\\u2AC5\\u0338\",\n\t\"nsucc;\": \"\\u2281\",\n\t\"nsucceq;\": \"\\u2AB0\\u0338\",\n\t\"nsup;\": \"\\u2285\",\n\t\"nsupE;\": \"\\u2AC6\\u0338\",\n\t\"nsupe;\": \"\\u2289\",\n\t\"nsupset;\": \"\\u2283\\u20D2\",\n\t\"nsupseteq;\": \"\\u2289\",\n\t\"nsupseteqq;\": \"\\u2AC6\\u0338\",\n\t\"ntgl;\": \"\\u2279\",\n\t\"Ntilde;\": \"\\u00D1\",\n\t\"Ntilde\": \"\\u00D1\",\n\t\"ntilde;\": \"\\u00F1\",\n\t\"ntilde\": \"\\u00F1\",\n\t\"ntlg;\": \"\\u2278\",\n\t\"ntriangleleft;\": \"\\u22EA\",\n\t\"ntrianglelefteq;\": \"\\u22EC\",\n\t\"ntriangleright;\": \"\\u22EB\",\n\t\"ntrianglerighteq;\": \"\\u22ED\",\n\t\"Nu;\": \"\\u039D\",\n\t\"nu;\": \"\\u03BD\",\n\t\"num;\": \"\\u0023\",\n\t\"numero;\": \"\\u2116\",\n\t\"numsp;\": \"\\u2007\",\n\t\"nvap;\": \"\\u224D\\u20D2\",\n\t\"nvdash;\": \"\\u22AC\",\n\t\"nvDash;\": \"\\u22AD\",\n\t\"nVdash;\": \"\\u22AE\",\n\t\"nVDash;\": \"\\u22AF\",\n\t\"nvge;\": \"\\u2265\\u20D2\",\n\t\"nvgt;\": \"\\u003E\\u20D2\",\n\t\"nvHarr;\": \"\\u2904\",\n\t\"nvinfin;\": \"\\u29DE\",\n\t\"nvlArr;\": \"\\u2902\",\n\t\"nvle;\": \"\\u2264\\u20D2\",\n\t\"nvlt;\": \"\\u003C\\u20D2\",\n\t\"nvltrie;\": \"\\u22B4\\u20D2\",\n\t\"nvrArr;\": \"\\u2903\",\n\t\"nvrtrie;\": \"\\u22B5\\u20D2\",\n\t\"nvsim;\": \"\\u223C\\u20D2\",\n\t\"nwarhk;\": \"\\u2923\",\n\t\"nwarr;\": \"\\u2196\",\n\t\"nwArr;\": \"\\u21D6\",\n\t\"nwarrow;\": \"\\u2196\",\n\t\"nwnear;\": \"\\u2927\",\n\t\"Oacute;\": \"\\u00D3\",\n\t\"Oacute\": \"\\u00D3\",\n\t\"oacute;\": \"\\u00F3\",\n\t\"oacute\": \"\\u00F3\",\n\t\"oast;\": \"\\u229B\",\n\t\"Ocirc;\": \"\\u00D4\",\n\t\"Ocirc\": \"\\u00D4\",\n\t\"ocirc;\": \"\\u00F4\",\n\t\"ocirc\": \"\\u00F4\",\n\t\"ocir;\": \"\\u229A\",\n\t\"Ocy;\": \"\\u041E\",\n\t\"ocy;\": \"\\u043E\",\n\t\"odash;\": \"\\u229D\",\n\t\"Odblac;\": \"\\u0150\",\n\t\"odblac;\": \"\\u0151\",\n\t\"odiv;\": \"\\u2A38\",\n\t\"odot;\": \"\\u2299\",\n\t\"odsold;\": \"\\u29BC\",\n\t\"OElig;\": \"\\u0152\",\n\t\"oelig;\": \"\\u0153\",\n\t\"ofcir;\": \"\\u29BF\",\n\t\"Ofr;\": \"\\uD835\\uDD12\",\n\t\"ofr;\": \"\\uD835\\uDD2C\",\n\t\"ogon;\": \"\\u02DB\",\n\t\"Ograve;\": \"\\u00D2\",\n\t\"Ograve\": \"\\u00D2\",\n\t\"ograve;\": \"\\u00F2\",\n\t\"ograve\": \"\\u00F2\",\n\t\"ogt;\": \"\\u29C1\",\n\t\"ohbar;\": \"\\u29B5\",\n\t\"ohm;\": \"\\u03A9\",\n\t\"oint;\": \"\\u222E\",\n\t\"olarr;\": \"\\u21BA\",\n\t\"olcir;\": \"\\u29BE\",\n\t\"olcross;\": \"\\u29BB\",\n\t\"oline;\": \"\\u203E\",\n\t\"olt;\": \"\\u29C0\",\n\t\"Omacr;\": \"\\u014C\",\n\t\"omacr;\": \"\\u014D\",\n\t\"Omega;\": \"\\u03A9\",\n\t\"omega;\": \"\\u03C9\",\n\t\"Omicron;\": \"\\u039F\",\n\t\"omicron;\": \"\\u03BF\",\n\t\"omid;\": \"\\u29B6\",\n\t\"ominus;\": \"\\u2296\",\n\t\"Oopf;\": \"\\uD835\\uDD46\",\n\t\"oopf;\": \"\\uD835\\uDD60\",\n\t\"opar;\": \"\\u29B7\",\n\t\"OpenCurlyDoubleQuote;\": \"\\u201C\",\n\t\"OpenCurlyQuote;\": \"\\u2018\",\n\t\"operp;\": \"\\u29B9\",\n\t\"oplus;\": \"\\u2295\",\n\t\"orarr;\": \"\\u21BB\",\n\t\"Or;\": \"\\u2A54\",\n\t\"or;\": \"\\u2228\",\n\t\"ord;\": \"\\u2A5D\",\n\t\"order;\": \"\\u2134\",\n\t\"orderof;\": \"\\u2134\",\n\t\"ordf;\": \"\\u00AA\",\n\t\"ordf\": \"\\u00AA\",\n\t\"ordm;\": \"\\u00BA\",\n\t\"ordm\": \"\\u00BA\",\n\t\"origof;\": \"\\u22B6\",\n\t\"oror;\": \"\\u2A56\",\n\t\"orslope;\": \"\\u2A57\",\n\t\"orv;\": \"\\u2A5B\",\n\t\"oS;\": \"\\u24C8\",\n\t\"Oscr;\": \"\\uD835\\uDCAA\",\n\t\"oscr;\": \"\\u2134\",\n\t\"Oslash;\": \"\\u00D8\",\n\t\"Oslash\": \"\\u00D8\",\n\t\"oslash;\": \"\\u00F8\",\n\t\"oslash\": \"\\u00F8\",\n\t\"osol;\": \"\\u2298\",\n\t\"Otilde;\": \"\\u00D5\",\n\t\"Otilde\": \"\\u00D5\",\n\t\"otilde;\": \"\\u00F5\",\n\t\"otilde\": \"\\u00F5\",\n\t\"otimesas;\": \"\\u2A36\",\n\t\"Otimes;\": \"\\u2A37\",\n\t\"otimes;\": \"\\u2297\",\n\t\"Ouml;\": \"\\u00D6\",\n\t\"Ouml\": \"\\u00D6\",\n\t\"ouml;\": \"\\u00F6\",\n\t\"ouml\": \"\\u00F6\",\n\t\"ovbar;\": \"\\u233D\",\n\t\"OverBar;\": \"\\u203E\",\n\t\"OverBrace;\": \"\\u23DE\",\n\t\"OverBracket;\": \"\\u23B4\",\n\t\"OverParenthesis;\": \"\\u23DC\",\n\t\"para;\": \"\\u00B6\",\n\t\"para\": \"\\u00B6\",\n\t\"parallel;\": \"\\u2225\",\n\t\"par;\": \"\\u2225\",\n\t\"parsim;\": \"\\u2AF3\",\n\t\"parsl;\": \"\\u2AFD\",\n\t\"part;\": \"\\u2202\",\n\t\"PartialD;\": \"\\u2202\",\n\t\"Pcy;\": \"\\u041F\",\n\t\"pcy;\": \"\\u043F\",\n\t\"percnt;\": \"\\u0025\",\n\t\"period;\": \"\\u002E\",\n\t\"permil;\": \"\\u2030\",\n\t\"perp;\": \"\\u22A5\",\n\t\"pertenk;\": \"\\u2031\",\n\t\"Pfr;\": \"\\uD835\\uDD13\",\n\t\"pfr;\": \"\\uD835\\uDD2D\",\n\t\"Phi;\": \"\\u03A6\",\n\t\"phi;\": \"\\u03C6\",\n\t\"phiv;\": \"\\u03D5\",\n\t\"phmmat;\": \"\\u2133\",\n\t\"phone;\": \"\\u260E\",\n\t\"Pi;\": \"\\u03A0\",\n\t\"pi;\": \"\\u03C0\",\n\t\"pitchfork;\": \"\\u22D4\",\n\t\"piv;\": \"\\u03D6\",\n\t\"planck;\": \"\\u210F\",\n\t\"planckh;\": \"\\u210E\",\n\t\"plankv;\": \"\\u210F\",\n\t\"plusacir;\": \"\\u2A23\",\n\t\"plusb;\": \"\\u229E\",\n\t\"pluscir;\": \"\\u2A22\",\n\t\"plus;\": \"\\u002B\",\n\t\"plusdo;\": \"\\u2214\",\n\t\"plusdu;\": \"\\u2A25\",\n\t\"pluse;\": \"\\u2A72\",\n\t\"PlusMinus;\": \"\\u00B1\",\n\t\"plusmn;\": \"\\u00B1\",\n\t\"plusmn\": \"\\u00B1\",\n\t\"plussim;\": \"\\u2A26\",\n\t\"plustwo;\": \"\\u2A27\",\n\t\"pm;\": \"\\u00B1\",\n\t\"Poincareplane;\": \"\\u210C\",\n\t\"pointint;\": \"\\u2A15\",\n\t\"popf;\": \"\\uD835\\uDD61\",\n\t\"Popf;\": \"\\u2119\",\n\t\"pound;\": \"\\u00A3\",\n\t\"pound\": \"\\u00A3\",\n\t\"prap;\": \"\\u2AB7\",\n\t\"Pr;\": \"\\u2ABB\",\n\t\"pr;\": \"\\u227A\",\n\t\"prcue;\": \"\\u227C\",\n\t\"precapprox;\": \"\\u2AB7\",\n\t\"prec;\": \"\\u227A\",\n\t\"preccurlyeq;\": \"\\u227C\",\n\t\"Precedes;\": \"\\u227A\",\n\t\"PrecedesEqual;\": \"\\u2AAF\",\n\t\"PrecedesSlantEqual;\": \"\\u227C\",\n\t\"PrecedesTilde;\": \"\\u227E\",\n\t\"preceq;\": \"\\u2AAF\",\n\t\"precnapprox;\": \"\\u2AB9\",\n\t\"precneqq;\": \"\\u2AB5\",\n\t\"precnsim;\": \"\\u22E8\",\n\t\"pre;\": \"\\u2AAF\",\n\t\"prE;\": \"\\u2AB3\",\n\t\"precsim;\": \"\\u227E\",\n\t\"prime;\": \"\\u2032\",\n\t\"Prime;\": \"\\u2033\",\n\t\"primes;\": \"\\u2119\",\n\t\"prnap;\": \"\\u2AB9\",\n\t\"prnE;\": \"\\u2AB5\",\n\t\"prnsim;\": \"\\u22E8\",\n\t\"prod;\": \"\\u220F\",\n\t\"Product;\": \"\\u220F\",\n\t\"profalar;\": \"\\u232E\",\n\t\"profline;\": \"\\u2312\",\n\t\"profsurf;\": \"\\u2313\",\n\t\"prop;\": \"\\u221D\",\n\t\"Proportional;\": \"\\u221D\",\n\t\"Proportion;\": \"\\u2237\",\n\t\"propto;\": \"\\u221D\",\n\t\"prsim;\": \"\\u227E\",\n\t\"prurel;\": \"\\u22B0\",\n\t\"Pscr;\": \"\\uD835\\uDCAB\",\n\t\"pscr;\": \"\\uD835\\uDCC5\",\n\t\"Psi;\": \"\\u03A8\",\n\t\"psi;\": \"\\u03C8\",\n\t\"puncsp;\": \"\\u2008\",\n\t\"Qfr;\": \"\\uD835\\uDD14\",\n\t\"qfr;\": \"\\uD835\\uDD2E\",\n\t\"qint;\": \"\\u2A0C\",\n\t\"qopf;\": \"\\uD835\\uDD62\",\n\t\"Qopf;\": \"\\u211A\",\n\t\"qprime;\": \"\\u2057\",\n\t\"Qscr;\": \"\\uD835\\uDCAC\",\n\t\"qscr;\": \"\\uD835\\uDCC6\",\n\t\"quaternions;\": \"\\u210D\",\n\t\"quatint;\": \"\\u2A16\",\n\t\"quest;\": \"\\u003F\",\n\t\"questeq;\": \"\\u225F\",\n\t\"quot;\": \"\\u0022\",\n\t\"quot\": \"\\u0022\",\n\t\"QUOT;\": \"\\u0022\",\n\t\"QUOT\": \"\\u0022\",\n\t\"rAarr;\": \"\\u21DB\",\n\t\"race;\": \"\\u223D\\u0331\",\n\t\"Racute;\": \"\\u0154\",\n\t\"racute;\": \"\\u0155\",\n\t\"radic;\": \"\\u221A\",\n\t\"raemptyv;\": \"\\u29B3\",\n\t\"rang;\": \"\\u27E9\",\n\t\"Rang;\": \"\\u27EB\",\n\t\"rangd;\": \"\\u2992\",\n\t\"range;\": \"\\u29A5\",\n\t\"rangle;\": \"\\u27E9\",\n\t\"raquo;\": \"\\u00BB\",\n\t\"raquo\": \"\\u00BB\",\n\t\"rarrap;\": \"\\u2975\",\n\t\"rarrb;\": \"\\u21E5\",\n\t\"rarrbfs;\": \"\\u2920\",\n\t\"rarrc;\": \"\\u2933\",\n\t\"rarr;\": \"\\u2192\",\n\t\"Rarr;\": \"\\u21A0\",\n\t\"rArr;\": \"\\u21D2\",\n\t\"rarrfs;\": \"\\u291E\",\n\t\"rarrhk;\": \"\\u21AA\",\n\t\"rarrlp;\": \"\\u21AC\",\n\t\"rarrpl;\": \"\\u2945\",\n\t\"rarrsim;\": \"\\u2974\",\n\t\"Rarrtl;\": \"\\u2916\",\n\t\"rarrtl;\": \"\\u21A3\",\n\t\"rarrw;\": \"\\u219D\",\n\t\"ratail;\": \"\\u291A\",\n\t\"rAtail;\": \"\\u291C\",\n\t\"ratio;\": \"\\u2236\",\n\t\"rationals;\": \"\\u211A\",\n\t\"rbarr;\": \"\\u290D\",\n\t\"rBarr;\": \"\\u290F\",\n\t\"RBarr;\": \"\\u2910\",\n\t\"rbbrk;\": \"\\u2773\",\n\t\"rbrace;\": \"\\u007D\",\n\t\"rbrack;\": \"\\u005D\",\n\t\"rbrke;\": \"\\u298C\",\n\t\"rbrksld;\": \"\\u298E\",\n\t\"rbrkslu;\": \"\\u2990\",\n\t\"Rcaron;\": \"\\u0158\",\n\t\"rcaron;\": \"\\u0159\",\n\t\"Rcedil;\": \"\\u0156\",\n\t\"rcedil;\": \"\\u0157\",\n\t\"rceil;\": \"\\u2309\",\n\t\"rcub;\": \"\\u007D\",\n\t\"Rcy;\": \"\\u0420\",\n\t\"rcy;\": \"\\u0440\",\n\t\"rdca;\": \"\\u2937\",\n\t\"rdldhar;\": \"\\u2969\",\n\t\"rdquo;\": \"\\u201D\",\n\t\"rdquor;\": \"\\u201D\",\n\t\"rdsh;\": \"\\u21B3\",\n\t\"real;\": \"\\u211C\",\n\t\"realine;\": \"\\u211B\",\n\t\"realpart;\": \"\\u211C\",\n\t\"reals;\": \"\\u211D\",\n\t\"Re;\": \"\\u211C\",\n\t\"rect;\": \"\\u25AD\",\n\t\"reg;\": \"\\u00AE\",\n\t\"reg\": \"\\u00AE\",\n\t\"REG;\": \"\\u00AE\",\n\t\"REG\": \"\\u00AE\",\n\t\"ReverseElement;\": \"\\u220B\",\n\t\"ReverseEquilibrium;\": \"\\u21CB\",\n\t\"ReverseUpEquilibrium;\": \"\\u296F\",\n\t\"rfisht;\": \"\\u297D\",\n\t\"rfloor;\": \"\\u230B\",\n\t\"rfr;\": \"\\uD835\\uDD2F\",\n\t\"Rfr;\": \"\\u211C\",\n\t\"rHar;\": \"\\u2964\",\n\t\"rhard;\": \"\\u21C1\",\n\t\"rharu;\": \"\\u21C0\",\n\t\"rharul;\": \"\\u296C\",\n\t\"Rho;\": \"\\u03A1\",\n\t\"rho;\": \"\\u03C1\",\n\t\"rhov;\": \"\\u03F1\",\n\t\"RightAngleBracket;\": \"\\u27E9\",\n\t\"RightArrowBar;\": \"\\u21E5\",\n\t\"rightarrow;\": \"\\u2192\",\n\t\"RightArrow;\": \"\\u2192\",\n\t\"Rightarrow;\": \"\\u21D2\",\n\t\"RightArrowLeftArrow;\": \"\\u21C4\",\n\t\"rightarrowtail;\": \"\\u21A3\",\n\t\"RightCeiling;\": \"\\u2309\",\n\t\"RightDoubleBracket;\": \"\\u27E7\",\n\t\"RightDownTeeVector;\": \"\\u295D\",\n\t\"RightDownVectorBar;\": \"\\u2955\",\n\t\"RightDownVector;\": \"\\u21C2\",\n\t\"RightFloor;\": \"\\u230B\",\n\t\"rightharpoondown;\": \"\\u21C1\",\n\t\"rightharpoonup;\": \"\\u21C0\",\n\t\"rightleftarrows;\": \"\\u21C4\",\n\t\"rightleftharpoons;\": \"\\u21CC\",\n\t\"rightrightarrows;\": \"\\u21C9\",\n\t\"rightsquigarrow;\": \"\\u219D\",\n\t\"RightTeeArrow;\": \"\\u21A6\",\n\t\"RightTee;\": \"\\u22A2\",\n\t\"RightTeeVector;\": \"\\u295B\",\n\t\"rightthreetimes;\": \"\\u22CC\",\n\t\"RightTriangleBar;\": \"\\u29D0\",\n\t\"RightTriangle;\": \"\\u22B3\",\n\t\"RightTriangleEqual;\": \"\\u22B5\",\n\t\"RightUpDownVector;\": \"\\u294F\",\n\t\"RightUpTeeVector;\": \"\\u295C\",\n\t\"RightUpVectorBar;\": \"\\u2954\",\n\t\"RightUpVector;\": \"\\u21BE\",\n\t\"RightVectorBar;\": \"\\u2953\",\n\t\"RightVector;\": \"\\u21C0\",\n\t\"ring;\": \"\\u02DA\",\n\t\"risingdotseq;\": \"\\u2253\",\n\t\"rlarr;\": \"\\u21C4\",\n\t\"rlhar;\": \"\\u21CC\",\n\t\"rlm;\": \"\\u200F\",\n\t\"rmoustache;\": \"\\u23B1\",\n\t\"rmoust;\": \"\\u23B1\",\n\t\"rnmid;\": \"\\u2AEE\",\n\t\"roang;\": \"\\u27ED\",\n\t\"roarr;\": \"\\u21FE\",\n\t\"robrk;\": \"\\u27E7\",\n\t\"ropar;\": \"\\u2986\",\n\t\"ropf;\": \"\\uD835\\uDD63\",\n\t\"Ropf;\": \"\\u211D\",\n\t\"roplus;\": \"\\u2A2E\",\n\t\"rotimes;\": \"\\u2A35\",\n\t\"RoundImplies;\": \"\\u2970\",\n\t\"rpar;\": \"\\u0029\",\n\t\"rpargt;\": \"\\u2994\",\n\t\"rppolint;\": \"\\u2A12\",\n\t\"rrarr;\": \"\\u21C9\",\n\t\"Rrightarrow;\": \"\\u21DB\",\n\t\"rsaquo;\": \"\\u203A\",\n\t\"rscr;\": \"\\uD835\\uDCC7\",\n\t\"Rscr;\": \"\\u211B\",\n\t\"rsh;\": \"\\u21B1\",\n\t\"Rsh;\": \"\\u21B1\",\n\t\"rsqb;\": \"\\u005D\",\n\t\"rsquo;\": \"\\u2019\",\n\t\"rsquor;\": \"\\u2019\",\n\t\"rthree;\": \"\\u22CC\",\n\t\"rtimes;\": \"\\u22CA\",\n\t\"rtri;\": \"\\u25B9\",\n\t\"rtrie;\": \"\\u22B5\",\n\t\"rtrif;\": \"\\u25B8\",\n\t\"rtriltri;\": \"\\u29CE\",\n\t\"RuleDelayed;\": \"\\u29F4\",\n\t\"ruluhar;\": \"\\u2968\",\n\t\"rx;\": \"\\u211E\",\n\t\"Sacute;\": \"\\u015A\",\n\t\"sacute;\": \"\\u015B\",\n\t\"sbquo;\": \"\\u201A\",\n\t\"scap;\": \"\\u2AB8\",\n\t\"Scaron;\": \"\\u0160\",\n\t\"scaron;\": \"\\u0161\",\n\t\"Sc;\": \"\\u2ABC\",\n\t\"sc;\": \"\\u227B\",\n\t\"sccue;\": \"\\u227D\",\n\t\"sce;\": \"\\u2AB0\",\n\t\"scE;\": \"\\u2AB4\",\n\t\"Scedil;\": \"\\u015E\",\n\t\"scedil;\": \"\\u015F\",\n\t\"Scirc;\": \"\\u015C\",\n\t\"scirc;\": \"\\u015D\",\n\t\"scnap;\": \"\\u2ABA\",\n\t\"scnE;\": \"\\u2AB6\",\n\t\"scnsim;\": \"\\u22E9\",\n\t\"scpolint;\": \"\\u2A13\",\n\t\"scsim;\": \"\\u227F\",\n\t\"Scy;\": \"\\u0421\",\n\t\"scy;\": \"\\u0441\",\n\t\"sdotb;\": \"\\u22A1\",\n\t\"sdot;\": \"\\u22C5\",\n\t\"sdote;\": \"\\u2A66\",\n\t\"searhk;\": \"\\u2925\",\n\t\"searr;\": \"\\u2198\",\n\t\"seArr;\": \"\\u21D8\",\n\t\"searrow;\": \"\\u2198\",\n\t\"sect;\": \"\\u00A7\",\n\t\"sect\": \"\\u00A7\",\n\t\"semi;\": \"\\u003B\",\n\t\"seswar;\": \"\\u2929\",\n\t\"setminus;\": \"\\u2216\",\n\t\"setmn;\": \"\\u2216\",\n\t\"sext;\": \"\\u2736\",\n\t\"Sfr;\": \"\\uD835\\uDD16\",\n\t\"sfr;\": \"\\uD835\\uDD30\",\n\t\"sfrown;\": \"\\u2322\",\n\t\"sharp;\": \"\\u266F\",\n\t\"SHCHcy;\": \"\\u0429\",\n\t\"shchcy;\": \"\\u0449\",\n\t\"SHcy;\": \"\\u0428\",\n\t\"shcy;\": \"\\u0448\",\n\t\"ShortDownArrow;\": \"\\u2193\",\n\t\"ShortLeftArrow;\": \"\\u2190\",\n\t\"shortmid;\": \"\\u2223\",\n\t\"shortparallel;\": \"\\u2225\",\n\t\"ShortRightArrow;\": \"\\u2192\",\n\t\"ShortUpArrow;\": \"\\u2191\",\n\t\"shy;\": \"\\u00AD\",\n\t\"shy\": \"\\u00AD\",\n\t\"Sigma;\": \"\\u03A3\",\n\t\"sigma;\": \"\\u03C3\",\n\t\"sigmaf;\": \"\\u03C2\",\n\t\"sigmav;\": \"\\u03C2\",\n\t\"sim;\": \"\\u223C\",\n\t\"simdot;\": \"\\u2A6A\",\n\t\"sime;\": \"\\u2243\",\n\t\"simeq;\": \"\\u2243\",\n\t\"simg;\": \"\\u2A9E\",\n\t\"simgE;\": \"\\u2AA0\",\n\t\"siml;\": \"\\u2A9D\",\n\t\"simlE;\": \"\\u2A9F\",\n\t\"simne;\": \"\\u2246\",\n\t\"simplus;\": \"\\u2A24\",\n\t\"simrarr;\": \"\\u2972\",\n\t\"slarr;\": \"\\u2190\",\n\t\"SmallCircle;\": \"\\u2218\",\n\t\"smallsetminus;\": \"\\u2216\",\n\t\"smashp;\": \"\\u2A33\",\n\t\"smeparsl;\": \"\\u29E4\",\n\t\"smid;\": \"\\u2223\",\n\t\"smile;\": \"\\u2323\",\n\t\"smt;\": \"\\u2AAA\",\n\t\"smte;\": \"\\u2AAC\",\n\t\"smtes;\": \"\\u2AAC\\uFE00\",\n\t\"SOFTcy;\": \"\\u042C\",\n\t\"softcy;\": \"\\u044C\",\n\t\"solbar;\": \"\\u233F\",\n\t\"solb;\": \"\\u29C4\",\n\t\"sol;\": \"\\u002F\",\n\t\"Sopf;\": \"\\uD835\\uDD4A\",\n\t\"sopf;\": \"\\uD835\\uDD64\",\n\t\"spades;\": \"\\u2660\",\n\t\"spadesuit;\": \"\\u2660\",\n\t\"spar;\": \"\\u2225\",\n\t\"sqcap;\": \"\\u2293\",\n\t\"sqcaps;\": \"\\u2293\\uFE00\",\n\t\"sqcup;\": \"\\u2294\",\n\t\"sqcups;\": \"\\u2294\\uFE00\",\n\t\"Sqrt;\": \"\\u221A\",\n\t\"sqsub;\": \"\\u228F\",\n\t\"sqsube;\": \"\\u2291\",\n\t\"sqsubset;\": \"\\u228F\",\n\t\"sqsubseteq;\": \"\\u2291\",\n\t\"sqsup;\": \"\\u2290\",\n\t\"sqsupe;\": \"\\u2292\",\n\t\"sqsupset;\": \"\\u2290\",\n\t\"sqsupseteq;\": \"\\u2292\",\n\t\"square;\": \"\\u25A1\",\n\t\"Square;\": \"\\u25A1\",\n\t\"SquareIntersection;\": \"\\u2293\",\n\t\"SquareSubset;\": \"\\u228F\",\n\t\"SquareSubsetEqual;\": \"\\u2291\",\n\t\"SquareSuperset;\": \"\\u2290\",\n\t\"SquareSupersetEqual;\": \"\\u2292\",\n\t\"SquareUnion;\": \"\\u2294\",\n\t\"squarf;\": \"\\u25AA\",\n\t\"squ;\": \"\\u25A1\",\n\t\"squf;\": \"\\u25AA\",\n\t\"srarr;\": \"\\u2192\",\n\t\"Sscr;\": \"\\uD835\\uDCAE\",\n\t\"sscr;\": \"\\uD835\\uDCC8\",\n\t\"ssetmn;\": \"\\u2216\",\n\t\"ssmile;\": \"\\u2323\",\n\t\"sstarf;\": \"\\u22C6\",\n\t\"Star;\": \"\\u22C6\",\n\t\"star;\": \"\\u2606\",\n\t\"starf;\": \"\\u2605\",\n\t\"straightepsilon;\": \"\\u03F5\",\n\t\"straightphi;\": \"\\u03D5\",\n\t\"strns;\": \"\\u00AF\",\n\t\"sub;\": \"\\u2282\",\n\t\"Sub;\": \"\\u22D0\",\n\t\"subdot;\": \"\\u2ABD\",\n\t\"subE;\": \"\\u2AC5\",\n\t\"sube;\": \"\\u2286\",\n\t\"subedot;\": \"\\u2AC3\",\n\t\"submult;\": \"\\u2AC1\",\n\t\"subnE;\": \"\\u2ACB\",\n\t\"subne;\": \"\\u228A\",\n\t\"subplus;\": \"\\u2ABF\",\n\t\"subrarr;\": \"\\u2979\",\n\t\"subset;\": \"\\u2282\",\n\t\"Subset;\": \"\\u22D0\",\n\t\"subseteq;\": \"\\u2286\",\n\t\"subseteqq;\": \"\\u2AC5\",\n\t\"SubsetEqual;\": \"\\u2286\",\n\t\"subsetneq;\": \"\\u228A\",\n\t\"subsetneqq;\": \"\\u2ACB\",\n\t\"subsim;\": \"\\u2AC7\",\n\t\"subsub;\": \"\\u2AD5\",\n\t\"subsup;\": \"\\u2AD3\",\n\t\"succapprox;\": \"\\u2AB8\",\n\t\"succ;\": \"\\u227B\",\n\t\"succcurlyeq;\": \"\\u227D\",\n\t\"Succeeds;\": \"\\u227B\",\n\t\"SucceedsEqual;\": \"\\u2AB0\",\n\t\"SucceedsSlantEqual;\": \"\\u227D\",\n\t\"SucceedsTilde;\": \"\\u227F\",\n\t\"succeq;\": \"\\u2AB0\",\n\t\"succnapprox;\": \"\\u2ABA\",\n\t\"succneqq;\": \"\\u2AB6\",\n\t\"succnsim;\": \"\\u22E9\",\n\t\"succsim;\": \"\\u227F\",\n\t\"SuchThat;\": \"\\u220B\",\n\t\"sum;\": \"\\u2211\",\n\t\"Sum;\": \"\\u2211\",\n\t\"sung;\": \"\\u266A\",\n\t\"sup1;\": \"\\u00B9\",\n\t\"sup1\": \"\\u00B9\",\n\t\"sup2;\": \"\\u00B2\",\n\t\"sup2\": \"\\u00B2\",\n\t\"sup3;\": \"\\u00B3\",\n\t\"sup3\": \"\\u00B3\",\n\t\"sup;\": \"\\u2283\",\n\t\"Sup;\": \"\\u22D1\",\n\t\"supdot;\": \"\\u2ABE\",\n\t\"supdsub;\": \"\\u2AD8\",\n\t\"supE;\": \"\\u2AC6\",\n\t\"supe;\": \"\\u2287\",\n\t\"supedot;\": \"\\u2AC4\",\n\t\"Superset;\": \"\\u2283\",\n\t\"SupersetEqual;\": \"\\u2287\",\n\t\"suphsol;\": \"\\u27C9\",\n\t\"suphsub;\": \"\\u2AD7\",\n\t\"suplarr;\": \"\\u297B\",\n\t\"supmult;\": \"\\u2AC2\",\n\t\"supnE;\": \"\\u2ACC\",\n\t\"supne;\": \"\\u228B\",\n\t\"supplus;\": \"\\u2AC0\",\n\t\"supset;\": \"\\u2283\",\n\t\"Supset;\": \"\\u22D1\",\n\t\"supseteq;\": \"\\u2287\",\n\t\"supseteqq;\": \"\\u2AC6\",\n\t\"supsetneq;\": \"\\u228B\",\n\t\"supsetneqq;\": \"\\u2ACC\",\n\t\"supsim;\": \"\\u2AC8\",\n\t\"supsub;\": \"\\u2AD4\",\n\t\"supsup;\": \"\\u2AD6\",\n\t\"swarhk;\": \"\\u2926\",\n\t\"swarr;\": \"\\u2199\",\n\t\"swArr;\": \"\\u21D9\",\n\t\"swarrow;\": \"\\u2199\",\n\t\"swnwar;\": \"\\u292A\",\n\t\"szlig;\": \"\\u00DF\",\n\t\"szlig\": \"\\u00DF\",\n\t\"Tab;\": \"\\u0009\",\n\t\"target;\": \"\\u2316\",\n\t\"Tau;\": \"\\u03A4\",\n\t\"tau;\": \"\\u03C4\",\n\t\"tbrk;\": \"\\u23B4\",\n\t\"Tcaron;\": \"\\u0164\",\n\t\"tcaron;\": \"\\u0165\",\n\t\"Tcedil;\": \"\\u0162\",\n\t\"tcedil;\": \"\\u0163\",\n\t\"Tcy;\": \"\\u0422\",\n\t\"tcy;\": \"\\u0442\",\n\t\"tdot;\": \"\\u20DB\",\n\t\"telrec;\": \"\\u2315\",\n\t\"Tfr;\": \"\\uD835\\uDD17\",\n\t\"tfr;\": \"\\uD835\\uDD31\",\n\t\"there4;\": \"\\u2234\",\n\t\"therefore;\": \"\\u2234\",\n\t\"Therefore;\": \"\\u2234\",\n\t\"Theta;\": \"\\u0398\",\n\t\"theta;\": \"\\u03B8\",\n\t\"thetasym;\": \"\\u03D1\",\n\t\"thetav;\": \"\\u03D1\",\n\t\"thickapprox;\": \"\\u2248\",\n\t\"thicksim;\": \"\\u223C\",\n\t\"ThickSpace;\": \"\\u205F\\u200A\",\n\t\"ThinSpace;\": \"\\u2009\",\n\t\"thinsp;\": \"\\u2009\",\n\t\"thkap;\": \"\\u2248\",\n\t\"thksim;\": \"\\u223C\",\n\t\"THORN;\": \"\\u00DE\",\n\t\"THORN\": \"\\u00DE\",\n\t\"thorn;\": \"\\u00FE\",\n\t\"thorn\": \"\\u00FE\",\n\t\"tilde;\": \"\\u02DC\",\n\t\"Tilde;\": \"\\u223C\",\n\t\"TildeEqual;\": \"\\u2243\",\n\t\"TildeFullEqual;\": \"\\u2245\",\n\t\"TildeTilde;\": \"\\u2248\",\n\t\"timesbar;\": \"\\u2A31\",\n\t\"timesb;\": \"\\u22A0\",\n\t\"times;\": \"\\u00D7\",\n\t\"times\": \"\\u00D7\",\n\t\"timesd;\": \"\\u2A30\",\n\t\"tint;\": \"\\u222D\",\n\t\"toea;\": \"\\u2928\",\n\t\"topbot;\": \"\\u2336\",\n\t\"topcir;\": \"\\u2AF1\",\n\t\"top;\": \"\\u22A4\",\n\t\"Topf;\": \"\\uD835\\uDD4B\",\n\t\"topf;\": \"\\uD835\\uDD65\",\n\t\"topfork;\": \"\\u2ADA\",\n\t\"tosa;\": \"\\u2929\",\n\t\"tprime;\": \"\\u2034\",\n\t\"trade;\": \"\\u2122\",\n\t\"TRADE;\": \"\\u2122\",\n\t\"triangle;\": \"\\u25B5\",\n\t\"triangledown;\": \"\\u25BF\",\n\t\"triangleleft;\": \"\\u25C3\",\n\t\"trianglelefteq;\": \"\\u22B4\",\n\t\"triangleq;\": \"\\u225C\",\n\t\"triangleright;\": \"\\u25B9\",\n\t\"trianglerighteq;\": \"\\u22B5\",\n\t\"tridot;\": \"\\u25EC\",\n\t\"trie;\": \"\\u225C\",\n\t\"triminus;\": \"\\u2A3A\",\n\t\"TripleDot;\": \"\\u20DB\",\n\t\"triplus;\": \"\\u2A39\",\n\t\"trisb;\": \"\\u29CD\",\n\t\"tritime;\": \"\\u2A3B\",\n\t\"trpezium;\": \"\\u23E2\",\n\t\"Tscr;\": \"\\uD835\\uDCAF\",\n\t\"tscr;\": \"\\uD835\\uDCC9\",\n\t\"TScy;\": \"\\u0426\",\n\t\"tscy;\": \"\\u0446\",\n\t\"TSHcy;\": \"\\u040B\",\n\t\"tshcy;\": \"\\u045B\",\n\t\"Tstrok;\": \"\\u0166\",\n\t\"tstrok;\": \"\\u0167\",\n\t\"twixt;\": \"\\u226C\",\n\t\"twoheadleftarrow;\": \"\\u219E\",\n\t\"twoheadrightarrow;\": \"\\u21A0\",\n\t\"Uacute;\": \"\\u00DA\",\n\t\"Uacute\": \"\\u00DA\",\n\t\"uacute;\": \"\\u00FA\",\n\t\"uacute\": \"\\u00FA\",\n\t\"uarr;\": \"\\u2191\",\n\t\"Uarr;\": \"\\u219F\",\n\t\"uArr;\": \"\\u21D1\",\n\t\"Uarrocir;\": \"\\u2949\",\n\t\"Ubrcy;\": \"\\u040E\",\n\t\"ubrcy;\": \"\\u045E\",\n\t\"Ubreve;\": \"\\u016C\",\n\t\"ubreve;\": \"\\u016D\",\n\t\"Ucirc;\": \"\\u00DB\",\n\t\"Ucirc\": \"\\u00DB\",\n\t\"ucirc;\": \"\\u00FB\",\n\t\"ucirc\": \"\\u00FB\",\n\t\"Ucy;\": \"\\u0423\",\n\t\"ucy;\": \"\\u0443\",\n\t\"udarr;\": \"\\u21C5\",\n\t\"Udblac;\": \"\\u0170\",\n\t\"udblac;\": \"\\u0171\",\n\t\"udhar;\": \"\\u296E\",\n\t\"ufisht;\": \"\\u297E\",\n\t\"Ufr;\": \"\\uD835\\uDD18\",\n\t\"ufr;\": \"\\uD835\\uDD32\",\n\t\"Ugrave;\": \"\\u00D9\",\n\t\"Ugrave\": \"\\u00D9\",\n\t\"ugrave;\": \"\\u00F9\",\n\t\"ugrave\": \"\\u00F9\",\n\t\"uHar;\": \"\\u2963\",\n\t\"uharl;\": \"\\u21BF\",\n\t\"uharr;\": \"\\u21BE\",\n\t\"uhblk;\": \"\\u2580\",\n\t\"ulcorn;\": \"\\u231C\",\n\t\"ulcorner;\": \"\\u231C\",\n\t\"ulcrop;\": \"\\u230F\",\n\t\"ultri;\": \"\\u25F8\",\n\t\"Umacr;\": \"\\u016A\",\n\t\"umacr;\": \"\\u016B\",\n\t\"uml;\": \"\\u00A8\",\n\t\"uml\": \"\\u00A8\",\n\t\"UnderBar;\": \"\\u005F\",\n\t\"UnderBrace;\": \"\\u23DF\",\n\t\"UnderBracket;\": \"\\u23B5\",\n\t\"UnderParenthesis;\": \"\\u23DD\",\n\t\"Union;\": \"\\u22C3\",\n\t\"UnionPlus;\": \"\\u228E\",\n\t\"Uogon;\": \"\\u0172\",\n\t\"uogon;\": \"\\u0173\",\n\t\"Uopf;\": \"\\uD835\\uDD4C\",\n\t\"uopf;\": \"\\uD835\\uDD66\",\n\t\"UpArrowBar;\": \"\\u2912\",\n\t\"uparrow;\": \"\\u2191\",\n\t\"UpArrow;\": \"\\u2191\",\n\t\"Uparrow;\": \"\\u21D1\",\n\t\"UpArrowDownArrow;\": \"\\u21C5\",\n\t\"updownarrow;\": \"\\u2195\",\n\t\"UpDownArrow;\": \"\\u2195\",\n\t\"Updownarrow;\": \"\\u21D5\",\n\t\"UpEquilibrium;\": \"\\u296E\",\n\t\"upharpoonleft;\": \"\\u21BF\",\n\t\"upharpoonright;\": \"\\u21BE\",\n\t\"uplus;\": \"\\u228E\",\n\t\"UpperLeftArrow;\": \"\\u2196\",\n\t\"UpperRightArrow;\": \"\\u2197\",\n\t\"upsi;\": \"\\u03C5\",\n\t\"Upsi;\": \"\\u03D2\",\n\t\"upsih;\": \"\\u03D2\",\n\t\"Upsilon;\": \"\\u03A5\",\n\t\"upsilon;\": \"\\u03C5\",\n\t\"UpTeeArrow;\": \"\\u21A5\",\n\t\"UpTee;\": \"\\u22A5\",\n\t\"upuparrows;\": \"\\u21C8\",\n\t\"urcorn;\": \"\\u231D\",\n\t\"urcorner;\": \"\\u231D\",\n\t\"urcrop;\": \"\\u230E\",\n\t\"Uring;\": \"\\u016E\",\n\t\"uring;\": \"\\u016F\",\n\t\"urtri;\": \"\\u25F9\",\n\t\"Uscr;\": \"\\uD835\\uDCB0\",\n\t\"uscr;\": \"\\uD835\\uDCCA\",\n\t\"utdot;\": \"\\u22F0\",\n\t\"Utilde;\": \"\\u0168\",\n\t\"utilde;\": \"\\u0169\",\n\t\"utri;\": \"\\u25B5\",\n\t\"utrif;\": \"\\u25B4\",\n\t\"uuarr;\": \"\\u21C8\",\n\t\"Uuml;\": \"\\u00DC\",\n\t\"Uuml\": \"\\u00DC\",\n\t\"uuml;\": \"\\u00FC\",\n\t\"uuml\": \"\\u00FC\",\n\t\"uwangle;\": \"\\u29A7\",\n\t\"vangrt;\": \"\\u299C\",\n\t\"varepsilon;\": \"\\u03F5\",\n\t\"varkappa;\": \"\\u03F0\",\n\t\"varnothing;\": \"\\u2205\",\n\t\"varphi;\": \"\\u03D5\",\n\t\"varpi;\": \"\\u03D6\",\n\t\"varpropto;\": \"\\u221D\",\n\t\"varr;\": \"\\u2195\",\n\t\"vArr;\": \"\\u21D5\",\n\t\"varrho;\": \"\\u03F1\",\n\t\"varsigma;\": \"\\u03C2\",\n\t\"varsubsetneq;\": \"\\u228A\\uFE00\",\n\t\"varsubsetneqq;\": \"\\u2ACB\\uFE00\",\n\t\"varsupsetneq;\": \"\\u228B\\uFE00\",\n\t\"varsupsetneqq;\": \"\\u2ACC\\uFE00\",\n\t\"vartheta;\": \"\\u03D1\",\n\t\"vartriangleleft;\": \"\\u22B2\",\n\t\"vartriangleright;\": \"\\u22B3\",\n\t\"vBar;\": \"\\u2AE8\",\n\t\"Vbar;\": \"\\u2AEB\",\n\t\"vBarv;\": \"\\u2AE9\",\n\t\"Vcy;\": \"\\u0412\",\n\t\"vcy;\": \"\\u0432\",\n\t\"vdash;\": \"\\u22A2\",\n\t\"vDash;\": \"\\u22A8\",\n\t\"Vdash;\": \"\\u22A9\",\n\t\"VDash;\": \"\\u22AB\",\n\t\"Vdashl;\": \"\\u2AE6\",\n\t\"veebar;\": \"\\u22BB\",\n\t\"vee;\": \"\\u2228\",\n\t\"Vee;\": \"\\u22C1\",\n\t\"veeeq;\": \"\\u225A\",\n\t\"vellip;\": \"\\u22EE\",\n\t\"verbar;\": \"\\u007C\",\n\t\"Verbar;\": \"\\u2016\",\n\t\"vert;\": \"\\u007C\",\n\t\"Vert;\": \"\\u2016\",\n\t\"VerticalBar;\": \"\\u2223\",\n\t\"VerticalLine;\": \"\\u007C\",\n\t\"VerticalSeparator;\": \"\\u2758\",\n\t\"VerticalTilde;\": \"\\u2240\",\n\t\"VeryThinSpace;\": \"\\u200A\",\n\t\"Vfr;\": \"\\uD835\\uDD19\",\n\t\"vfr;\": \"\\uD835\\uDD33\",\n\t\"vltri;\": \"\\u22B2\",\n\t\"vnsub;\": \"\\u2282\\u20D2\",\n\t\"vnsup;\": \"\\u2283\\u20D2\",\n\t\"Vopf;\": \"\\uD835\\uDD4D\",\n\t\"vopf;\": \"\\uD835\\uDD67\",\n\t\"vprop;\": \"\\u221D\",\n\t\"vrtri;\": \"\\u22B3\",\n\t\"Vscr;\": \"\\uD835\\uDCB1\",\n\t\"vscr;\": \"\\uD835\\uDCCB\",\n\t\"vsubnE;\": \"\\u2ACB\\uFE00\",\n\t\"vsubne;\": \"\\u228A\\uFE00\",\n\t\"vsupnE;\": \"\\u2ACC\\uFE00\",\n\t\"vsupne;\": \"\\u228B\\uFE00\",\n\t\"Vvdash;\": \"\\u22AA\",\n\t\"vzigzag;\": \"\\u299A\",\n\t\"Wcirc;\": \"\\u0174\",\n\t\"wcirc;\": \"\\u0175\",\n\t\"wedbar;\": \"\\u2A5F\",\n\t\"wedge;\": \"\\u2227\",\n\t\"Wedge;\": \"\\u22C0\",\n\t\"wedgeq;\": \"\\u2259\",\n\t\"weierp;\": \"\\u2118\",\n\t\"Wfr;\": \"\\uD835\\uDD1A\",\n\t\"wfr;\": \"\\uD835\\uDD34\",\n\t\"Wopf;\": \"\\uD835\\uDD4E\",\n\t\"wopf;\": \"\\uD835\\uDD68\",\n\t\"wp;\": \"\\u2118\",\n\t\"wr;\": \"\\u2240\",\n\t\"wreath;\": \"\\u2240\",\n\t\"Wscr;\": \"\\uD835\\uDCB2\",\n\t\"wscr;\": \"\\uD835\\uDCCC\",\n\t\"xcap;\": \"\\u22C2\",\n\t\"xcirc;\": \"\\u25EF\",\n\t\"xcup;\": \"\\u22C3\",\n\t\"xdtri;\": \"\\u25BD\",\n\t\"Xfr;\": \"\\uD835\\uDD1B\",\n\t\"xfr;\": \"\\uD835\\uDD35\",\n\t\"xharr;\": \"\\u27F7\",\n\t\"xhArr;\": \"\\u27FA\",\n\t\"Xi;\": \"\\u039E\",\n\t\"xi;\": \"\\u03BE\",\n\t\"xlarr;\": \"\\u27F5\",\n\t\"xlArr;\": \"\\u27F8\",\n\t\"xmap;\": \"\\u27FC\",\n\t\"xnis;\": \"\\u22FB\",\n\t\"xodot;\": \"\\u2A00\",\n\t\"Xopf;\": \"\\uD835\\uDD4F\",\n\t\"xopf;\": \"\\uD835\\uDD69\",\n\t\"xoplus;\": \"\\u2A01\",\n\t\"xotime;\": \"\\u2A02\",\n\t\"xrarr;\": \"\\u27F6\",\n\t\"xrArr;\": \"\\u27F9\",\n\t\"Xscr;\": \"\\uD835\\uDCB3\",\n\t\"xscr;\": \"\\uD835\\uDCCD\",\n\t\"xsqcup;\": \"\\u2A06\",\n\t\"xuplus;\": \"\\u2A04\",\n\t\"xutri;\": \"\\u25B3\",\n\t\"xvee;\": \"\\u22C1\",\n\t\"xwedge;\": \"\\u22C0\",\n\t\"Yacute;\": \"\\u00DD\",\n\t\"Yacute\": \"\\u00DD\",\n\t\"yacute;\": \"\\u00FD\",\n\t\"yacute\": \"\\u00FD\",\n\t\"YAcy;\": \"\\u042F\",\n\t\"yacy;\": \"\\u044F\",\n\t\"Ycirc;\": \"\\u0176\",\n\t\"ycirc;\": \"\\u0177\",\n\t\"Ycy;\": \"\\u042B\",\n\t\"ycy;\": \"\\u044B\",\n\t\"yen;\": \"\\u00A5\",\n\t\"yen\": \"\\u00A5\",\n\t\"Yfr;\": \"\\uD835\\uDD1C\",\n\t\"yfr;\": \"\\uD835\\uDD36\",\n\t\"YIcy;\": \"\\u0407\",\n\t\"yicy;\": \"\\u0457\",\n\t\"Yopf;\": \"\\uD835\\uDD50\",\n\t\"yopf;\": \"\\uD835\\uDD6A\",\n\t\"Yscr;\": \"\\uD835\\uDCB4\",\n\t\"yscr;\": \"\\uD835\\uDCCE\",\n\t\"YUcy;\": \"\\u042E\",\n\t\"yucy;\": \"\\u044E\",\n\t\"yuml;\": \"\\u00FF\",\n\t\"yuml\": \"\\u00FF\",\n\t\"Yuml;\": \"\\u0178\",\n\t\"Zacute;\": \"\\u0179\",\n\t\"zacute;\": \"\\u017A\",\n\t\"Zcaron;\": \"\\u017D\",\n\t\"zcaron;\": \"\\u017E\",\n\t\"Zcy;\": \"\\u0417\",\n\t\"zcy;\": \"\\u0437\",\n\t\"Zdot;\": \"\\u017B\",\n\t\"zdot;\": \"\\u017C\",\n\t\"zeetrf;\": \"\\u2128\",\n\t\"ZeroWidthSpace;\": \"\\u200B\",\n\t\"Zeta;\": \"\\u0396\",\n\t\"zeta;\": \"\\u03B6\",\n\t\"zfr;\": \"\\uD835\\uDD37\",\n\t\"Zfr;\": \"\\u2128\",\n\t\"ZHcy;\": \"\\u0416\",\n\t\"zhcy;\": \"\\u0436\",\n\t\"zigrarr;\": \"\\u21DD\",\n\t\"zopf;\": \"\\uD835\\uDD6B\",\n\t\"Zopf;\": \"\\u2124\",\n\t\"Zscr;\": \"\\uD835\\uDCB5\",\n\t\"zscr;\": \"\\uD835\\uDCCF\",\n\t\"zwj;\": \"\\u200D\",\n\t\"zwnj;\": \"\\u200C\"\n};\n\n},\n{}],\n13:[function(_dereq_,module,exports){\n// http://wiki.commonjs.org/wiki/Unit_Testing/1.0\n//\n// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!\n//\n// Originally from narwhal.js (http://narwhaljs.org)\n// Copyright (c) 2009 Thomas Robinson <280north.com>\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the 'Software'), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// when used in node, this will actually load the util module we depend on\n// versus loading the builtin util module as happens otherwise\n// this is a bug in node module loading as far as I am concerned\nvar util = _dereq_('util/');\n\nvar pSlice = Array.prototype.slice;\nvar hasOwn = Object.prototype.hasOwnProperty;\n\n// 1. The assert module provides functions that throw\n// AssertionError's when particular conditions are not met. The\n// assert module must conform to the following interface.\n\nvar assert = module.exports = ok;\n\n// 2. The AssertionError is defined in assert.\n// new assert.AssertionError({ message: message,\n//                             actual: actual,\n//                             expected: expected })\n\nassert.AssertionError = function AssertionError(options) {\n  this.name = 'AssertionError';\n  this.actual = options.actual;\n  this.expected = options.expected;\n  this.operator = options.operator;\n  if (options.message) {\n    this.message = options.message;\n    this.generatedMessage = false;\n  } else {\n    this.message = getMessage(this);\n    this.generatedMessage = true;\n  }\n  var stackStartFunction = options.stackStartFunction || fail;\n\n  if (Error.captureStackTrace) {\n    Error.captureStackTrace(this, stackStartFunction);\n  }\n  else {\n    // non v8 browsers so we can have a stacktrace\n    var err = new Error();\n    if (err.stack) {\n      var out = err.stack;\n\n      // try to strip useless frames\n      var fn_name = stackStartFunction.name;\n      var idx = out.indexOf('\\n' + fn_name);\n      if (idx >= 0) {\n        // once we have located the function frame\n        // we need to strip out everything before it (and its line)\n        var next_line = out.indexOf('\\n', idx + 1);\n        out = out.substring(next_line + 1);\n      }\n\n      this.stack = out;\n    }\n  }\n};\n\n// assert.AssertionError instanceof Error\nutil.inherits(assert.AssertionError, Error);\n\nfunction replacer(key, value) {\n  if (util.isUndefined(value)) {\n    return '' + value;\n  }\n  if (util.isNumber(value) && (isNaN(value) || !isFinite(value))) {\n    return value.toString();\n  }\n  if (util.isFunction(value) || util.isRegExp(value)) {\n    return value.toString();\n  }\n  return value;\n}\n\nfunction truncate(s, n) {\n  if (util.isString(s)) {\n    return s.length < n ? s : s.slice(0, n);\n  } else {\n    return s;\n  }\n}\n\nfunction getMessage(self) {\n  return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +\n         self.operator + ' ' +\n         truncate(JSON.stringify(self.expected, replacer), 128);\n}\n\n// At present only the three keys mentioned above are used and\n// understood by the spec. Implementations or sub modules can pass\n// other keys to the AssertionError's constructor - they will be\n// ignored.\n\n// 3. All of the following functions must throw an AssertionError\n// when a corresponding condition is not met, with a message that\n// may be undefined if not provided.  All assertion methods provide\n// both the actual and expected values to the assertion error for\n// display purposes.\n\nfunction fail(actual, expected, message, operator, stackStartFunction) {\n  throw new assert.AssertionError({\n    message: message,\n    actual: actual,\n    expected: expected,\n    operator: operator,\n    stackStartFunction: stackStartFunction\n  });\n}\n\n// EXTENSION! allows for well behaved errors defined elsewhere.\nassert.fail = fail;\n\n// 4. Pure assertion tests whether a value is truthy, as determined\n// by !!guard.\n// assert.ok(guard, message_opt);\n// This statement is equivalent to assert.equal(true, !!guard,\n// message_opt);. To test strictly for the value true, use\n// assert.strictEqual(true, guard, message_opt);.\n\nfunction ok(value, message) {\n  if (!value) fail(value, true, message, '==', assert.ok);\n}\nassert.ok = ok;\n\n// 5. The equality assertion tests shallow, coercive equality with\n// ==.\n// assert.equal(actual, expected, message_opt);\n\nassert.equal = function equal(actual, expected, message) {\n  if (actual != expected) fail(actual, expected, message, '==', assert.equal);\n};\n\n// 6. The non-equality assertion tests for whether two objects are not equal\n// with != assert.notEqual(actual, expected, message_opt);\n\nassert.notEqual = function notEqual(actual, expected, message) {\n  if (actual == expected) {\n    fail(actual, expected, message, '!=', assert.notEqual);\n  }\n};\n\n// 7. The equivalence assertion tests a deep equality relation.\n// assert.deepEqual(actual, expected, message_opt);\n\nassert.deepEqual = function deepEqual(actual, expected, message) {\n  if (!_deepEqual(actual, expected)) {\n    fail(actual, expected, message, 'deepEqual', assert.deepEqual);\n  }\n};\n\nfunction _deepEqual(actual, expected) {\n  // 7.1. All identical values are equivalent, as determined by ===.\n  if (actual === expected) {\n    return true;\n\n  } else if (util.isBuffer(actual) && util.isBuffer(expected)) {\n    if (actual.length != expected.length) return false;\n\n    for (var i = 0; i < actual.length; i++) {\n      if (actual[i] !== expected[i]) return false;\n    }\n\n    return true;\n\n  // 7.2. If the expected value is a Date object, the actual value is\n  // equivalent if it is also a Date object that refers to the same time.\n  } else if (util.isDate(actual) && util.isDate(expected)) {\n    return actual.getTime() === expected.getTime();\n\n  // 7.3 If the expected value is a RegExp object, the actual value is\n  // equivalent if it is also a RegExp object with the same source and\n  // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).\n  } else if (util.isRegExp(actual) && util.isRegExp(expected)) {\n    return actual.source === expected.source &&\n           actual.global === expected.global &&\n           actual.multiline === expected.multiline &&\n           actual.lastIndex === expected.lastIndex &&\n           actual.ignoreCase === expected.ignoreCase;\n\n  // 7.4. Other pairs that do not both pass typeof value == 'object',\n  // equivalence is determined by ==.\n  } else if (!util.isObject(actual) && !util.isObject(expected)) {\n    return actual == expected;\n\n  // 7.5 For all other Object pairs, including Array objects, equivalence is\n  // determined by having the same number of owned properties (as verified\n  // with Object.prototype.hasOwnProperty.call), the same set of keys\n  // (although not necessarily the same order), equivalent values for every\n  // corresponding key, and an identical 'prototype' property. Note: this\n  // accounts for both named and indexed properties on Arrays.\n  } else {\n    return objEquiv(actual, expected);\n  }\n}\n\nfunction isArguments(object) {\n  return Object.prototype.toString.call(object) == '[object Arguments]';\n}\n\nfunction objEquiv(a, b) {\n  if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))\n    return false;\n  // an identical 'prototype' property.\n  if (a.prototype !== b.prototype) return false;\n  //~~~I've managed to break Object.keys through screwy arguments passing.\n  //   Converting to array solves the problem.\n  if (isArguments(a)) {\n    if (!isArguments(b)) {\n      return false;\n    }\n    a = pSlice.call(a);\n    b = pSlice.call(b);\n    return _deepEqual(a, b);\n  }\n  try {\n    var ka = objectKeys(a),\n        kb = objectKeys(b),\n        key, i;\n  } catch (e) {//happens when one is a string literal and the other isn't\n    return false;\n  }\n  // having the same number of owned properties (keys incorporates\n  // hasOwnProperty)\n  if (ka.length != kb.length)\n    return false;\n  //the same set of keys (although not necessarily the same order),\n  ka.sort();\n  kb.sort();\n  //~~~cheap key test\n  for (i = ka.length - 1; i >= 0; i--) {\n    if (ka[i] != kb[i])\n      return false;\n  }\n  //equivalent values for every corresponding key, and\n  //~~~possibly expensive deep test\n  for (i = ka.length - 1; i >= 0; i--) {\n    key = ka[i];\n    if (!_deepEqual(a[key], b[key])) return false;\n  }\n  return true;\n}\n\n// 8. The non-equivalence assertion tests for any deep inequality.\n// assert.notDeepEqual(actual, expected, message_opt);\n\nassert.notDeepEqual = function notDeepEqual(actual, expected, message) {\n  if (_deepEqual(actual, expected)) {\n    fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);\n  }\n};\n\n// 9. The strict equality assertion tests strict equality, as determined by ===.\n// assert.strictEqual(actual, expected, message_opt);\n\nassert.strictEqual = function strictEqual(actual, expected, message) {\n  if (actual !== expected) {\n    fail(actual, expected, message, '===', assert.strictEqual);\n  }\n};\n\n// 10. The strict non-equality assertion tests for strict inequality, as\n// determined by !==.  assert.notStrictEqual(actual, expected, message_opt);\n\nassert.notStrictEqual = function notStrictEqual(actual, expected, message) {\n  if (actual === expected) {\n    fail(actual, expected, message, '!==', assert.notStrictEqual);\n  }\n};\n\nfunction expectedException(actual, expected) {\n  if (!actual || !expected) {\n    return false;\n  }\n\n  if (Object.prototype.toString.call(expected) == '[object RegExp]') {\n    return expected.test(actual);\n  } else if (actual instanceof expected) {\n    return true;\n  } else if (expected.call({}, actual) === true) {\n    return true;\n  }\n\n  return false;\n}\n\nfunction _throws(shouldThrow, block, expected, message) {\n  var actual;\n\n  if (util.isString(expected)) {\n    message = expected;\n    expected = null;\n  }\n\n  try {\n    block();\n  } catch (e) {\n    actual = e;\n  }\n\n  message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +\n            (message ? ' ' + message : '.');\n\n  if (shouldThrow && !actual) {\n    fail(actual, expected, 'Missing expected exception' + message);\n  }\n\n  if (!shouldThrow && expectedException(actual, expected)) {\n    fail(actual, expected, 'Got unwanted exception' + message);\n  }\n\n  if ((shouldThrow && actual && expected &&\n      !expectedException(actual, expected)) || (!shouldThrow && actual)) {\n    throw actual;\n  }\n}\n\n// 11. Expected to throw an error:\n// assert.throws(block, Error_opt, message_opt);\n\nassert.throws = function(block, /*optional*/error, /*optional*/message) {\n  _throws.apply(this, [true].concat(pSlice.call(arguments)));\n};\n\n// EXTENSION! This is annoying to write outside this module.\nassert.doesNotThrow = function(block, /*optional*/message) {\n  _throws.apply(this, [false].concat(pSlice.call(arguments)));\n};\n\nassert.ifError = function(err) { if (err) {throw err;}};\n\nvar objectKeys = Object.keys || function (obj) {\n  var keys = [];\n  for (var key in obj) {\n    if (hasOwn.call(obj, key)) keys.push(key);\n  }\n  return keys;\n};\n\n},\n{\"util/\":15}],\n14:[function(_dereq_,module,exports){\nmodule.exports = function isBuffer(arg) {\n  return arg && typeof arg === 'object'\n    && typeof arg.copy === 'function'\n    && typeof arg.fill === 'function'\n    && typeof arg.readUInt8 === 'function';\n}\n},\n{}],\n15:[function(_dereq_,module,exports){\n(function (process,global){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n  if (!isString(f)) {\n    var objects = [];\n    for (var i = 0; i < arguments.length; i++) {\n      objects.push(inspect(arguments[i]));\n    }\n    return objects.join(' ');\n  }\n\n  var i = 1;\n  var args = arguments;\n  var len = args.length;\n  var str = String(f).replace(formatRegExp, function(x) {\n    if (x === '%%') return '%';\n    if (i >= len) return x;\n    switch (x) {\n      case '%s': return String(args[i++]);\n      case '%d': return Number(args[i++]);\n      case '%j':\n        try {\n          return JSON.stringify(args[i++]);\n        } catch (_) {\n          return '[Circular]';\n        }\n      default:\n        return x;\n    }\n  });\n  for (var x = args[i]; i < len; x = args[++i]) {\n    if (isNull(x) || !isObject(x)) {\n      str += ' ' + x;\n    } else {\n      str += ' ' + inspect(x);\n    }\n  }\n  return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n  // Allow for deprecating things in the process of starting up.\n  if (isUndefined(global.process)) {\n    return function() {\n      return exports.deprecate(fn, msg).apply(this, arguments);\n    };\n  }\n\n  if (process.noDeprecation === true) {\n    return fn;\n  }\n\n  var warned = false;\n  function deprecated() {\n    if (!warned) {\n      if (process.throwDeprecation) {\n        throw new Error(msg);\n      } else if (process.traceDeprecation) {\n        console.trace(msg);\n      } else {\n        console.error(msg);\n      }\n      warned = true;\n    }\n    return fn.apply(this, arguments);\n  }\n\n  return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n  if (isUndefined(debugEnviron))\n    debugEnviron = process.env.NODE_DEBUG || '';\n  set = set.toUpperCase();\n  if (!debugs[set]) {\n    if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n      var pid = process.pid;\n      debugs[set] = function() {\n        var msg = exports.format.apply(exports, arguments);\n        console.error('%s %d: %s', set, pid, msg);\n      };\n    } else {\n      debugs[set] = function() {};\n    }\n  }\n  return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n  // default options\n  var ctx = {\n    seen: [],\n    stylize: stylizeNoColor\n  };\n  // legacy...\n  if (arguments.length >= 3) ctx.depth = arguments[2];\n  if (arguments.length >= 4) ctx.colors = arguments[3];\n  if (isBoolean(opts)) {\n    // legacy...\n    ctx.showHidden = opts;\n  } else if (opts) {\n    // got an \"options\" object\n    exports._extend(ctx, opts);\n  }\n  // set default options\n  if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n  if (isUndefined(ctx.depth)) ctx.depth = 2;\n  if (isUndefined(ctx.colors)) ctx.colors = false;\n  if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n  if (ctx.colors) ctx.stylize = stylizeWithColor;\n  return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n  'bold' : [1, 22],\n  'italic' : [3, 23],\n  'underline' : [4, 24],\n  'inverse' : [7, 27],\n  'white' : [37, 39],\n  'grey' : [90, 39],\n  'black' : [30, 39],\n  'blue' : [34, 39],\n  'cyan' : [36, 39],\n  'green' : [32, 39],\n  'magenta' : [35, 39],\n  'red' : [31, 39],\n  'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n  'special': 'cyan',\n  'number': 'yellow',\n  'boolean': 'yellow',\n  'undefined': 'grey',\n  'null': 'bold',\n  'string': 'green',\n  'date': 'magenta',\n  // \"name\": intentionally not styling\n  'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n  var style = inspect.styles[styleType];\n\n  if (style) {\n    return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n           '\\u001b[' + inspect.colors[style][1] + 'm';\n  } else {\n    return str;\n  }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n  return str;\n}\n\n\nfunction arrayToHash(array) {\n  var hash = {};\n\n  array.forEach(function(val, idx) {\n    hash[val] = true;\n  });\n\n  return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n  // Provide a hook for user-specified inspect functions.\n  // Check that value is an object with an inspect function on it\n  if (ctx.customInspect &&\n      value &&\n      isFunction(value.inspect) &&\n      // Filter out the util module, it's inspect function is special\n      value.inspect !== exports.inspect &&\n      // Also filter out any prototype objects using the circular check.\n      !(value.constructor && value.constructor.prototype === value)) {\n    var ret = value.inspect(recurseTimes, ctx);\n    if (!isString(ret)) {\n      ret = formatValue(ctx, ret, recurseTimes);\n    }\n    return ret;\n  }\n\n  // Primitive types cannot have properties\n  var primitive = formatPrimitive(ctx, value);\n  if (primitive) {\n    return primitive;\n  }\n\n  // Look up the keys of the object.\n  var keys = Object.keys(value);\n  var visibleKeys = arrayToHash(keys);\n\n  if (ctx.showHidden) {\n    keys = Object.getOwnPropertyNames(value);\n  }\n\n  // IE doesn't make error fields non-enumerable\n  // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n  if (isError(value)\n      && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n    return formatError(value);\n  }\n\n  // Some type of object without properties can be shortcutted.\n  if (keys.length === 0) {\n    if (isFunction(value)) {\n      var name = value.name ? ': ' + value.name : '';\n      return ctx.stylize('[Function' + name + ']', 'special');\n    }\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    }\n    if (isDate(value)) {\n      return ctx.stylize(Date.prototype.toString.call(value), 'date');\n    }\n    if (isError(value)) {\n      return formatError(value);\n    }\n  }\n\n  var base = '', array = false, braces = ['{', '}'];\n\n  // Make Array say that they are Array\n  if (isArray(value)) {\n    array = true;\n    braces = ['[', ']'];\n  }\n\n  // Make functions say that they are functions\n  if (isFunction(value)) {\n    var n = value.name ? ': ' + value.name : '';\n    base = ' [Function' + n + ']';\n  }\n\n  // Make RegExps say that they are RegExps\n  if (isRegExp(value)) {\n    base = ' ' + RegExp.prototype.toString.call(value);\n  }\n\n  // Make dates with properties first say the date\n  if (isDate(value)) {\n    base = ' ' + Date.prototype.toUTCString.call(value);\n  }\n\n  // Make error with message first say the error\n  if (isError(value)) {\n    base = ' ' + formatError(value);\n  }\n\n  if (keys.length === 0 && (!array || value.length == 0)) {\n    return braces[0] + base + braces[1];\n  }\n\n  if (recurseTimes < 0) {\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    } else {\n      return ctx.stylize('[Object]', 'special');\n    }\n  }\n\n  ctx.seen.push(value);\n\n  var output;\n  if (array) {\n    output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n  } else {\n    output = keys.map(function(key) {\n      return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n    });\n  }\n\n  ctx.seen.pop();\n\n  return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n  if (isUndefined(value))\n    return ctx.stylize('undefined', 'undefined');\n  if (isString(value)) {\n    var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n                                             .replace(/'/g, \"\\\\'\")\n                                             .replace(/\\\\\"/g, '\"') + '\\'';\n    return ctx.stylize(simple, 'string');\n  }\n  if (isNumber(value))\n    return ctx.stylize('' + value, 'number');\n  if (isBoolean(value))\n    return ctx.stylize('' + value, 'boolean');\n  // For some reason typeof null is \"object\", so special case here.\n  if (isNull(value))\n    return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n  return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n  var output = [];\n  for (var i = 0, l = value.length; i < l; ++i) {\n    if (hasOwnProperty(value, String(i))) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          String(i), true));\n    } else {\n      output.push('');\n    }\n  }\n  keys.forEach(function(key) {\n    if (!key.match(/^\\d+$/)) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          key, true));\n    }\n  });\n  return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n  var name, str, desc;\n  desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n  if (desc.get) {\n    if (desc.set) {\n      str = ctx.stylize('[Getter/Setter]', 'special');\n    } else {\n      str = ctx.stylize('[Getter]', 'special');\n    }\n  } else {\n    if (desc.set) {\n      str = ctx.stylize('[Setter]', 'special');\n    }\n  }\n  if (!hasOwnProperty(visibleKeys, key)) {\n    name = '[' + key + ']';\n  }\n  if (!str) {\n    if (ctx.seen.indexOf(desc.value) < 0) {\n      if (isNull(recurseTimes)) {\n        str = formatValue(ctx, desc.value, null);\n      } else {\n        str = formatValue(ctx, desc.value, recurseTimes - 1);\n      }\n      if (str.indexOf('\\n') > -1) {\n        if (array) {\n          str = str.split('\\n').map(function(line) {\n            return '  ' + line;\n          }).join('\\n').substr(2);\n        } else {\n          str = '\\n' + str.split('\\n').map(function(line) {\n            return '   ' + line;\n          }).join('\\n');\n        }\n      }\n    } else {\n      str = ctx.stylize('[Circular]', 'special');\n    }\n  }\n  if (isUndefined(name)) {\n    if (array && key.match(/^\\d+$/)) {\n      return str;\n    }\n    name = JSON.stringify('' + key);\n    if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n      name = name.substr(1, name.length - 2);\n      name = ctx.stylize(name, 'name');\n    } else {\n      name = name.replace(/'/g, \"\\\\'\")\n                 .replace(/\\\\\"/g, '\"')\n                 .replace(/(^\"|\"$)/g, \"'\");\n      name = ctx.stylize(name, 'string');\n    }\n  }\n\n  return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n  var numLinesEst = 0;\n  var length = output.reduce(function(prev, cur) {\n    numLinesEst++;\n    if (cur.indexOf('\\n') >= 0) numLinesEst++;\n    return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n  }, 0);\n\n  if (length > 60) {\n    return braces[0] +\n           (base === '' ? '' : base + '\\n ') +\n           ' ' +\n           output.join(',\\n  ') +\n           ' ' +\n           braces[1];\n  }\n\n  return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nfunction isArray(ar) {\n  return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n  return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n  return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n  return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n  return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n  return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n  return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n  return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n  return isObject(e) &&\n      (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n  return arg === null ||\n         typeof arg === 'boolean' ||\n         typeof arg === 'number' ||\n         typeof arg === 'string' ||\n         typeof arg === 'symbol' ||  // ES6 symbol\n         typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = _dereq_('./support/isBuffer');\n\nfunction objectToString(o) {\n  return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n  return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n              'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n  var d = new Date();\n  var time = [pad(d.getHours()),\n              pad(d.getMinutes()),\n              pad(d.getSeconds())].join(':');\n  return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n  console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n *     prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = _dereq_('inherits');\n\nexports._extend = function(origin, add) {\n  // Don't do anything if add isn't an object\n  if (!add || !isObject(add)) return origin;\n\n  var keys = Object.keys(add);\n  var i = keys.length;\n  while (i--) {\n    origin[keys[i]] = add[keys[i]];\n  }\n  return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\n}).call(this,_dereq_(\"/usr/local/lib/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js\"),typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},\n{\"./support/isBuffer\":14,\"/usr/local/lib/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js\":18,\"inherits\":17}],\n16:[function(_dereq_,module,exports){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nfunction EventEmitter() {\n  this._events = this._events || {};\n  this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nEventEmitter.defaultMaxListeners = 10;\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function(n) {\n  if (!isNumber(n) || n < 0 || isNaN(n))\n    throw TypeError('n must be a positive number');\n  this._maxListeners = n;\n  return this;\n};\n\nEventEmitter.prototype.emit = function(type) {\n  var er, handler, len, args, i, listeners;\n\n  if (!this._events)\n    this._events = {};\n\n  // If there is no 'error' event listener then throw.\n  if (type === 'error') {\n    if (!this._events.error ||\n        (isObject(this._events.error) && !this._events.error.length)) {\n      er = arguments[1];\n      if (er instanceof Error) {\n        throw er; // Unhandled 'error' event\n      } else {\n        throw TypeError('Uncaught, unspecified \"error\" event.');\n      }\n      return false;\n    }\n  }\n\n  handler = this._events[type];\n\n  if (isUndefined(handler))\n    return false;\n\n  if (isFunction(handler)) {\n    switch (arguments.length) {\n      // fast cases\n      case 1:\n        handler.call(this);\n        break;\n      case 2:\n        handler.call(this, arguments[1]);\n        break;\n      case 3:\n        handler.call(this, arguments[1], arguments[2]);\n        break;\n      // slower\n      default:\n        len = arguments.length;\n        args = new Array(len - 1);\n        for (i = 1; i < len; i++)\n          args[i - 1] = arguments[i];\n        handler.apply(this, args);\n    }\n  } else if (isObject(handler)) {\n    len = arguments.length;\n    args = new Array(len - 1);\n    for (i = 1; i < len; i++)\n      args[i - 1] = arguments[i];\n\n    listeners = handler.slice();\n    len = listeners.length;\n    for (i = 0; i < len; i++)\n      listeners[i].apply(this, args);\n  }\n\n  return true;\n};\n\nEventEmitter.prototype.addListener = function(type, listener) {\n  var m;\n\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  if (!this._events)\n    this._events = {};\n\n  // To avoid recursion in the case that type === \"newListener\"! Before\n  // adding it to the listeners, first emit \"newListener\".\n  if (this._events.newListener)\n    this.emit('newListener', type,\n              isFunction(listener.listener) ?\n              listener.listener : listener);\n\n  if (!this._events[type])\n    // Optimize the case of one listener. Don't need the extra array object.\n    this._events[type] = listener;\n  else if (isObject(this._events[type]))\n    // If we've already got an array, just append.\n    this._events[type].push(listener);\n  else\n    // Adding the second element, need to change to array.\n    this._events[type] = [this._events[type], listener];\n\n  // Check for listener leak\n  if (isObject(this._events[type]) && !this._events[type].warned) {\n    var m;\n    if (!isUndefined(this._maxListeners)) {\n      m = this._maxListeners;\n    } else {\n      m = EventEmitter.defaultMaxListeners;\n    }\n\n    if (m && m > 0 && this._events[type].length > m) {\n      this._events[type].warned = true;\n      console.error('(node) warning: possible EventEmitter memory ' +\n                    'leak detected. %d listeners added. ' +\n                    'Use emitter.setMaxListeners() to increase limit.',\n                    this._events[type].length);\n      console.trace();\n    }\n  }\n\n  return this;\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.once = function(type, listener) {\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  var fired = false;\n\n  function g() {\n    this.removeListener(type, g);\n\n    if (!fired) {\n      fired = true;\n      listener.apply(this, arguments);\n    }\n  }\n\n  g.listener = listener;\n  this.on(type, g);\n\n  return this;\n};\n\n// emits a 'removeListener' event iff the listener was removed\nEventEmitter.prototype.removeListener = function(type, listener) {\n  var list, position, length, i;\n\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  if (!this._events || !this._events[type])\n    return this;\n\n  list = this._events[type];\n  length = list.length;\n  position = -1;\n\n  if (list === listener ||\n      (isFunction(list.listener) && list.listener === listener)) {\n    delete this._events[type];\n    if (this._events.removeListener)\n      this.emit('removeListener', type, listener);\n\n  } else if (isObject(list)) {\n    for (i = length; i-- > 0;) {\n      if (list[i] === listener ||\n          (list[i].listener && list[i].listener === listener)) {\n        position = i;\n        break;\n      }\n    }\n\n    if (position < 0)\n      return this;\n\n    if (list.length === 1) {\n      list.length = 0;\n      delete this._events[type];\n    } else {\n      list.splice(position, 1);\n    }\n\n    if (this._events.removeListener)\n      this.emit('removeListener', type, listener);\n  }\n\n  return this;\n};\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n  var key, listeners;\n\n  if (!this._events)\n    return this;\n\n  // not listening for removeListener, no need to emit\n  if (!this._events.removeListener) {\n    if (arguments.length === 0)\n      this._events = {};\n    else if (this._events[type])\n      delete this._events[type];\n    return this;\n  }\n\n  // emit removeListener for all listeners on all events\n  if (arguments.length === 0) {\n    for (key in this._events) {\n      if (key === 'removeListener') continue;\n      this.removeAllListeners(key);\n    }\n    this.removeAllListeners('removeListener');\n    this._events = {};\n    return this;\n  }\n\n  listeners = this._events[type];\n\n  if (isFunction(listeners)) {\n    this.removeListener(type, listeners);\n  } else {\n    // LIFO order\n    while (listeners.length)\n      this.removeListener(type, listeners[listeners.length - 1]);\n  }\n  delete this._events[type];\n\n  return this;\n};\n\nEventEmitter.prototype.listeners = function(type) {\n  var ret;\n  if (!this._events || !this._events[type])\n    ret = [];\n  else if (isFunction(this._events[type]))\n    ret = [this._events[type]];\n  else\n    ret = this._events[type].slice();\n  return ret;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n  var ret;\n  if (!emitter._events || !emitter._events[type])\n    ret = 0;\n  else if (isFunction(emitter._events[type]))\n    ret = 1;\n  else\n    ret = emitter._events[type].length;\n  return ret;\n};\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\n\n},\n{}],\n17:[function(_dereq_,module,exports){\nif (typeof Object.create === 'function') {\n  // implementation from standard node.js 'util' module\n  module.exports = function inherits(ctor, superCtor) {\n    ctor.super_ = superCtor\n    ctor.prototype = Object.create(superCtor.prototype, {\n      constructor: {\n        value: ctor,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }\n    });\n  };\n} else {\n  // old school shim for old browsers\n  module.exports = function inherits(ctor, superCtor) {\n    ctor.super_ = superCtor\n    var TempCtor = function () {}\n    TempCtor.prototype = superCtor.prototype\n    ctor.prototype = new TempCtor()\n    ctor.prototype.constructor = ctor\n  }\n}\n\n},\n{}],\n18:[function(_dereq_,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\n\nprocess.nextTick = (function () {\n    var canSetImmediate = typeof window !== 'undefined'\n    && window.setImmediate;\n    var canPost = typeof window !== 'undefined'\n    && window.postMessage && window.addEventListener\n    ;\n\n    if (canSetImmediate) {\n        return function (f) { return window.setImmediate(f) };\n    }\n\n    if (canPost) {\n        var queue = [];\n        window.addEventListener('message', function (ev) {\n            var source = ev.source;\n            if ((source === window || source === null) && ev.data === 'process-tick') {\n                ev.stopPropagation();\n                if (queue.length > 0) {\n                    var fn = queue.shift();\n                    fn();\n                }\n            }\n        }, true);\n\n        return function nextTick(fn) {\n            queue.push(fn);\n            window.postMessage('process-tick', '*');\n        };\n    }\n\n    return function nextTick(fn) {\n        setTimeout(fn, 0);\n    };\n})();\n\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n}\n\n// TODO(shtylman)\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\n\n},\n{}],\n19:[function(_dereq_,module,exports){\nmodule.exports=_dereq_(14)\n},\n{}],\n20:[function(_dereq_,module,exports){\nmodule.exports=_dereq_(15)\n},\n{\"./support/isBuffer\":19,\"/usr/local/lib/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js\":18,\"inherits\":17}]},{},[9])\n(9)\n\n});"
  },
  {
    "path": "lib/ace/mode/html.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\n\n// http://www.w3.org/TR/html5/syntax.html#void-elements\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\n\nvar Mode = function(options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    \n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.voidElements = lang.arrayToMap(voidElements);\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return false;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{context: this.fragmentContext}]);\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/html\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/html_completions.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\n\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\n\nvar globalAttributes = commonAttributes.concat(eventAttributes);\n\nvar attributeMap = {\n    \"html\": {\"manifest\": 1},\n    \"head\": {},\n    \"title\": {},\n    \"base\": {\"href\": 1, \"target\": 1},\n    \"link\": {\"href\": 1, \"hreflang\": 1, \"rel\": {\"stylesheet\": 1, \"icon\": 1}, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"type\": {\"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1}, \"sizes\": 1},\n    \"meta\": {\"http-equiv\": {\"content-type\": 1}, \"name\": {\"description\": 1, \"keywords\": 1}, \"content\": {\"text/html; charset=UTF-8\": 1}, \"charset\": 1},\n    \"style\": {\"type\": 1, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"scoped\": 1},\n    \"script\": {\"charset\": 1, \"type\": {\"text/javascript\": 1}, \"src\": 1, \"defer\": 1, \"async\": 1},\n    \"noscript\": {\"href\": 1},\n    \"body\": {\"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1},\n    \"section\": {},\n    \"nav\": {},\n    \"article\": {\"pubdate\": 1},\n    \"aside\": {},\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"header\": {},\n    \"footer\": {},\n    \"address\": {},\n    \"main\": {},\n    \"p\": {},\n    \"hr\": {},\n    \"pre\": {},\n    \"blockquote\": {\"cite\": 1},\n    \"ol\": {\"start\": 1, \"reversed\": 1},\n    \"ul\": {},\n    \"li\": {\"value\": 1},\n    \"dl\": {},\n    \"dt\": {},\n    \"dd\": {},\n    \"figure\": {},\n    \"figcaption\": {},\n    \"div\": {},\n    \"a\": {\"href\": 1, \"target\": {\"_blank\": 1, \"top\": 1}, \"ping\": 1, \"rel\": {\"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1}, \"media\": 1, \"hreflang\": 1, \"type\": 1},\n    \"em\": {},\n    \"strong\": {},\n    \"small\": {},\n    \"s\": {},\n    \"cite\": {},\n    \"q\": {\"cite\": 1},\n    \"dfn\": {},\n    \"abbr\": {},\n    \"data\": {},\n    \"time\": {\"datetime\": 1},\n    \"code\": {},\n    \"var\": {},\n    \"samp\": {},\n    \"kbd\": {},\n    \"sub\": {},\n    \"sup\": {},\n    \"i\": {},\n    \"b\": {},\n    \"u\": {},\n    \"mark\": {},\n    \"ruby\": {},\n    \"rt\": {},\n    \"rp\": {},\n    \"bdi\": {},\n    \"bdo\": {},\n    \"span\": {},\n    \"br\": {},\n    \"wbr\": {},\n    \"ins\": {\"cite\": 1, \"datetime\": 1},\n    \"del\": {\"cite\": 1, \"datetime\": 1},\n    \"img\": {\"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1},\n    \"iframe\": {\"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": {\"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1}, \"seamless\": {\"seamless\": 1}},\n    \"embed\": {\"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1},\n    \"object\": {\"param\": 1, \"data\": 1, \"type\": 1, \"height\" : 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1},\n    \"param\": {\"name\": 1, \"value\": 1},\n    \"video\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1}},\n    \"audio\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1 }},\n    \"source\": {\"src\": 1, \"type\": 1, \"media\": 1},\n    \"track\": {\"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1},\n    \"canvas\": {\"width\": 1, \"height\": 1},\n    \"map\": {\"name\": 1},\n    \"area\": {\"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1},\n    \"svg\": {},\n    \"math\": {},\n    \"table\": {\"summary\": 1},\n    \"caption\": {},\n    \"colgroup\": {\"span\": 1},\n    \"col\": {\"span\": 1},\n    \"tbody\": {},\n    \"thead\": {},\n    \"tfoot\": {},\n    \"tr\": {},\n    \"td\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1},\n    \"th\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1},\n    \"form\": {\"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": {\"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1}, \"method\": {\"get\": 1, \"post\": 1}, \"name\": 1, \"novalidate\": 1, \"target\": {\"_blank\": 1, \"top\": 1}},\n    \"fieldset\": {\"disabled\": 1, \"form\": 1, \"name\": 1},\n    \"legend\": {},\n    \"label\": {\"form\": 1, \"for\": 1},\n    \"input\": {\n        \"type\": {\"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1},\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": {\"on\": 1, \"off\": 1}, \"autofocus\": {\"autofocus\": 1}, \"checked\": {\"checked\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": {\"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1}, \"formmethod\": {\"get\": 1, \"post\": 1}, \"formnovalidate\": {\"formnovalidate\": 1}, \"formtarget\": {\"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1}, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1},\n    \"button\": {\"autofocus\": 1, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": {\"button\": 1, \"submit\": 1}},\n    \"select\": {\"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"size\": 1, \"readonly\":{\"readonly\": 1}},\n    \"datalist\": {},\n    \"optgroup\": {\"disabled\": 1, \"label\": 1},\n    \"option\": {\"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1},\n    \"textarea\": {\"autofocus\": {\"autofocus\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"rows\": 1, \"cols\": 1, \"wrap\": {\"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1}},\n    \"keygen\": {\"autofocus\": 1, \"challenge\": {\"challenge\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"keytype\": {\"rsa\": 1, \"dsa\": 1, \"ec\": 1}, \"name\": 1},\n    \"output\": {\"for\": 1, \"form\": 1, \"name\": 1},\n    \"progress\": {\"value\": 1, \"max\": 1},\n    \"meter\": {\"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1},\n    \"details\": {\"open\": 1},\n    \"summary\": {},\n    \"command\": {\"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1},\n    \"menu\": {\"type\": 1, \"label\": 1},\n    \"dialog\": {\"open\": 1}\n};\n\nvar elements = Object.keys(attributeMap);\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nvar HtmlCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n\n        // tag name\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n\n        // tag attribute\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n            \n        // tag attribute values\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n            \n        // HTML entities\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n\n    this.getTagCompletions = function(state, session, pos, prefix) {\n        return elements.map(function(element){\n            return {\n                value: element,\n                meta: \"tag\",\n                score: Number.MAX_VALUE\n            };\n        });\n    };\n\n    this.getAttributeCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function(attribute){\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: Number.MAX_VALUE\n            };\n        });\n    };\n\n    this.getAttributeValueCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        \n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: Number.MAX_VALUE\n            };\n        });\n    };\n\n    this.getHTMLEntityCompletions = function(state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: Number.MAX_VALUE\n            };\n        });\n    };\n\n}).call(HtmlCompletions.prototype);\n\nexports.HtmlCompletions = HtmlCompletions;\n});\n"
  },
  {
    "path": "lib/ace/mode/html_elixir.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlElixirHighlightRules = require(\"./html_elixir_highlight_rules\").HtmlElixirHighlightRules;\nvar HtmlMode = require(\"./html\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar ElixirMode = require(\"./elixir\").Mode;\n\nvar Mode = function() {\n    HtmlMode.call(this);   \n    this.HighlightRules = HtmlElixirHighlightRules;\n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode,\n        \"elixir-\": ElixirMode\n    });\n};\noop.inherits(Mode, HtmlMode);\n\n(function() {\n\n    this.$id = \"ace/mode/html_elixir\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/html_elixir_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n    \"use strict\";\n\n    var oop = require(\"../lib/oop\");\n    var HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\n    var ElixirHighlightRules = require(\"./elixir_highlight_rules\").ElixirHighlightRules;\n\n    var HtmlElixirHighlightRules = function() {\n        HtmlHighlightRules.call(this);\n\n        var startRules = [\n            {\n                regex: \"<%%|%%>\",\n                token: \"constant.language.escape\"\n            }, {\n                token : \"comment.start.eex\",\n                regex : \"<%#\",\n                push  : [{\n                    token : \"comment.end.eex\",\n                    regex: \"%>\",\n                    next: \"pop\",\n                    defaultToken:\"comment\"\n                }]\n            }, {\n                token : \"support.elixir_tag\",\n                regex : \"<%+(?!>)[-=]?\",\n                push  : \"elixir-start\"\n            }\n        ];\n\n        var endRules = [\n            {\n                token : \"support.elixir_tag\",\n                regex : \"%>\",\n                next  : \"pop\"\n            }, {\n                token: \"comment\",\n                regex: \"#(?:[^%]|%[^>])*\"\n            }\n        ];\n\n        for (var key in this.$rules)\n            this.$rules[key].unshift.apply(this.$rules[key], startRules);\n\n        this.embedRules(ElixirHighlightRules, \"elixir-\", endRules, [\"start\"]);\n\n        this.normalizeRules();\n    };\n\n\n    oop.inherits(HtmlElixirHighlightRules, HtmlHighlightRules);\n\n    exports.HtmlElixirHighlightRules = HtmlElixirHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/html_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/html_ruby.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlRubyHighlightRules = require(\"./html_ruby_highlight_rules\").HtmlRubyHighlightRules;\nvar HtmlMode = require(\"./html\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar RubyMode = require(\"./ruby\").Mode;\n\nvar Mode = function() {\n    HtmlMode.call(this);   \n    this.HighlightRules = HtmlRubyHighlightRules;    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode,\n        \"ruby-\": RubyMode\n    });\n};\noop.inherits(Mode, HtmlMode);\n\n(function() {\n\n    this.$id = \"ace/mode/html_ruby\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});"
  },
  {
    "path": "lib/ace/mode/html_ruby_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n    \"use strict\";\n\n    var oop = require(\"../lib/oop\");\n    var HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\n    var RubyHighlightRules = require(\"./ruby_highlight_rules\").RubyHighlightRules;\n\n    var HtmlRubyHighlightRules = function() {\n        HtmlHighlightRules.call(this);\n\n        var startRules = [\n            {\n                regex: \"<%%|%%>\",\n                token: \"constant.language.escape\"\n            }, {\n                token : \"comment.start.erb\",\n                regex : \"<%#\",\n                push  : [{\n                    token : \"comment.end.erb\",\n                    regex: \"%>\",\n                    next: \"pop\",\n                    defaultToken:\"comment\"\n                }]\n            }, {\n                token : \"support.ruby_tag\",\n                regex : \"<%+(?!>)[-=]?\",\n                push  : \"ruby-start\"\n            }\n        ];\n\n        var endRules = [\n            {\n                token : \"support.ruby_tag\",\n                regex : \"%>\",\n                next  : \"pop\"\n            }, {\n                token: \"comment\",\n                regex: \"#(?:[^%]|%[^>])*\"\n            }\n        ];\n\n        for (var key in this.$rules)\n            this.$rules[key].unshift.apply(this.$rules[key], startRules);\n\n        this.embedRules(RubyHighlightRules, \"ruby-\", endRules, [\"start\"]);\n\n        this.normalizeRules();\n    };\n\n\n    oop.inherits(HtmlRubyHighlightRules, HtmlHighlightRules);\n\n    exports.HtmlRubyHighlightRules = HtmlRubyHighlightRules;\n});"
  },
  {
    "path": "lib/ace/mode/html_test.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\nif (typeof process !== \"undefined\") {\n    require(\"amd-loader\");\n}\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar EditSession = require(\"../edit_session\").EditSession;\nvar Range = require(\"../range\").Range;\nvar HtmlMode = require(\"./html\").Mode;\nvar assert = require(\"../test/assertions\");\n\nmodule.exports = {\n    setUp : function() {    \n        this.mode = new HtmlMode();\n    },\n\n    \"test: toggle comment lines\" : function() {\n        var session = new EditSession([\"  abc\", \"\", \"fg\"]);\n\n        var range = new Range(0, 3, 1, 1);\n        var comment = this.mode.toggleCommentLines(\"start\", session, 0, 1);\n        assert.equal([\"  <!--abc-->\", \"\", \"fg\"].join(\"\\n\"), session.toString());\n    },\n\n    \"test: next line indent should be the same as the current line indent\" : function() {\n        assert.equal(\"     \", this.mode.getNextLineIndent(\"start\", \"     abc\"));\n        assert.equal(\"\", this.mode.getNextLineIndent(\"start\", \"abc\"));\n        assert.equal(\"\\t\", this.mode.getNextLineIndent(\"start\", \"\\tabc\"));\n    }\n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main) {\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n}\n"
  },
  {
    "path": "lib/ace/mode/html_worker.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar Mirror = require(\"../worker/mirror\").Mirror;\nvar SAXParser = require(\"./html/saxparser\").SAXParser;\n\nvar errorTypes = {\n    \"expected-doctype-but-got-start-tag\": \"info\",\n    \"expected-doctype-but-got-chars\": \"info\",\n    \"non-html-root\": \"info\"\n};\n\nvar Worker = exports.Worker = function(sender) {\n    Mirror.call(this, sender);\n    this.setTimeout(400);\n    this.context = null;\n};\n\noop.inherits(Worker, Mirror);\n\n(function() {\n\n    this.setOptions = function(options) {\n        this.context = options.context;\n    };\n\n    this.onUpdate = function() {\n        var value = this.doc.getValue();\n        if (!value)\n            return;\n        var parser = new SAXParser();\n        var errors = [];\n        var noop = function(){};\n        parser.contentHandler = {\n           startDocument: noop,\n           endDocument: noop,\n           startElement: noop,\n           endElement: noop,\n           characters: noop\n        };\n        parser.errorHandler = {\n            error: function(message, location, code) {\n                errors.push({\n                    row: location.line,\n                    column: location.column,\n                    text: message,\n                    type: errorTypes[code] || \"error\"\n                });\n            }\n        };\n        if (this.context)\n            parser.parseFragment(value, this.context);\n        else\n            parser.parse(value);\n        this.sender.emit(\"error\", errors);\n    };\n\n}).call(Worker.prototype);\n\n});\n"
  },
  {
    "path": "lib/ace/mode/ini.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar IniHighlightRules = require(\"./ini_highlight_rules\").IniHighlightRules;\n// TODO: pick appropriate fold mode\nvar FoldMode = require(\"./folding/ini\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = IniHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \";\";\n    this.blockComment = null;\n    this.$id = \"ace/mode/ini\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});"
  },
  {
    "path": "lib/ace/mode/ini_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/* This file was autogenerated from tool\\tm bundles\\ini.tmbundle\\Syntaxes\\Ini.plist (uuid: ) */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar escapeRe = \"\\\\\\\\(?:[\\\\\\\\0abtrn;#=:]|x[a-fA-F\\\\d]{4})\";\n\nvar IniHighlightRules = function() {\n    this.$rules = {\n        start: [{\n            token: 'punctuation.definition.comment.ini',\n            regex: '#.*',\n            push_: [{\n                token: 'comment.line.number-sign.ini',\n                regex: '$|^',\n                next: 'pop'\n            }, {\n                defaultToken: 'comment.line.number-sign.ini'\n            }]\n        }, {\n            token: 'punctuation.definition.comment.ini',\n            regex: ';.*',\n            push_: [{\n                token: 'comment.line.semicolon.ini',\n                regex: '$|^',\n                next: 'pop'\n            }, {\n                defaultToken: 'comment.line.semicolon.ini'\n            }]\n        }, {\n            token: ['keyword.other.definition.ini', 'text', 'punctuation.separator.key-value.ini'],\n            regex: '\\\\b([a-zA-Z0-9_.-]+)\\\\b(\\\\s*)(=)'\n        }, {\n            token: ['punctuation.definition.entity.ini', 'constant.section.group-title.ini', 'punctuation.definition.entity.ini'],\n            regex: '^(\\\\[)(.*?)(\\\\])'\n        }, {\n            token: 'punctuation.definition.string.begin.ini',\n            regex: \"'\",\n            push: [{\n                token: 'punctuation.definition.string.end.ini',\n                regex: \"'\",\n                next: 'pop'\n            }, {\n                token: \"constant.language.escape\",\n                regex: escapeRe\n            }, {\n                defaultToken: 'string.quoted.single.ini'\n            }]\n        }, {\n            token: 'punctuation.definition.string.begin.ini',\n            regex: '\"',\n            push: [{\n                token: \"constant.language.escape\",\n                regex: escapeRe\n            }, {\n                token: 'punctuation.definition.string.end.ini',\n                regex: '\"',\n                next: 'pop'\n            }, {\n                defaultToken: 'string.quoted.double.ini'\n            }]\n        }]\n    };\n\n    this.normalizeRules();\n};\n\nIniHighlightRules.metaData = {\n    fileTypes: ['ini', 'conf'],\n    keyEquivalent: '^~I',\n    name: 'Ini',\n    scopeName: 'source.ini'\n};\n\n\noop.inherits(IniHighlightRules, TextHighlightRules);\n\nexports.IniHighlightRules = IniHighlightRules;\n});"
  },
  {
    "path": "lib/ace/mode/io.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar IoHighlightRules = require(\"./io_highlight_rules\").IoHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = IoHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    // Extra logic goes here.\n    this.$id = \"ace/mode/io\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});"
  },
  {
    "path": "lib/ace/mode/io_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/* This file was autogenerated from tm bundles\\io.tmbundle/Syntaxes/io.plist (uuid: ) */\n/****************************************************************************************\n * IT MIGHT NOT BE PERFECT ...But it's a good start from an existing *.tmlanguage file. *\n * fileTypes                                                                            *\n ****************************************************************************************/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar IoHighlightRules = function() {\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = { start: \n       [ { token: [ 'text', 'meta.empty-parenthesis.io' ],\n           regex: '(\\\\()(\\\\))',\n           comment: 'we match this to overload return inside () --Allan; scoping rules for what gets the scope have changed, so we now group the ) instead of the ( -- Rob' },\n         { token: [ 'text', 'meta.comma-parenthesis.io' ],\n           regex: '(\\\\,)(\\\\))',\n           comment: 'We want to do the same for ,) -- Seckar; same as above -- Rob' },\n         { token: 'keyword.control.io',\n           regex: '\\\\b(?:if|ifTrue|ifFalse|ifTrueIfFalse|for|loop|reverseForeach|foreach|map|continue|break|while|do|return)\\\\b' },\n         { token: 'punctuation.definition.comment.io',\n           regex: '/\\\\*',\n           push: \n            [ { token: 'punctuation.definition.comment.io',\n                regex: '\\\\*/',\n                next: 'pop' },\n              { defaultToken: 'comment.block.io' } ] },\n         { token: 'punctuation.definition.comment.io',\n           regex: '//',\n           push: \n            [ { token: 'comment.line.double-slash.io',\n                regex: '$',\n                next: 'pop' },\n              { defaultToken: 'comment.line.double-slash.io' } ] },\n         { token: 'punctuation.definition.comment.io',\n           regex: '#',\n           push: \n            [ { token: 'comment.line.number-sign.io', regex: '$', next: 'pop' },\n              { defaultToken: 'comment.line.number-sign.io' } ] },\n         { token: 'variable.language.io',\n           regex: '\\\\b(?:self|sender|target|proto|protos|parent)\\\\b',\n           comment: 'I wonder if some of this isn\\'t variable.other.language? --Allan; scoping this as variable.language to match Objective-C\\'s handling of \\'self\\', which is inconsistent with C++\\'s handling of \\'this\\' but perhaps intentionally so -- Rob' },\n         { token: 'keyword.operator.io',\n           regex: '<=|>=|=|:=|\\\\*|\\\\||\\\\|\\\\||\\\\+|-|/|&|&&|>|<|\\\\?|@|@@|\\\\b(?:and|or)\\\\b' },\n         { token: 'constant.other.io', regex: '\\\\bGL[\\\\w_]+\\\\b' },\n         { token: 'support.class.io', regex: '\\\\b[A-Z](?:\\\\w+)?\\\\b' },\n         { token: 'support.function.io',\n           regex: '\\\\b(?:clone|call|init|method|list|vector|block|\\\\w+(?=\\\\s*\\\\())\\\\b' },\n         { token: 'support.function.open-gl.io',\n           regex: '\\\\bgl(?:u|ut)?[A-Z]\\\\w+\\\\b' },\n         { token: 'punctuation.definition.string.begin.io',\n           regex: '\"\"\"',\n           push: \n            [ { token: 'punctuation.definition.string.end.io',\n                regex: '\"\"\"',\n                next: 'pop' },\n              { token: 'constant.character.escape.io', regex: '\\\\\\\\.' },\n              { defaultToken: 'string.quoted.triple.io' } ] },\n         { token: 'punctuation.definition.string.begin.io',\n           regex: '\"',\n           push: \n            [ { token: 'punctuation.definition.string.end.io',\n                regex: '\"',\n                next: 'pop' },\n              { token: 'constant.character.escape.io', regex: '\\\\\\\\.' },\n              { defaultToken: 'string.quoted.double.io' } ] },\n         { token: 'constant.numeric.io',\n           regex: '\\\\b(?:0(?:x|X)[0-9a-fA-F]*|(?:[0-9]+\\\\.?[0-9]*|\\\\.[0-9]+)(?:(?:e|E)(?:\\\\+|-)?[0-9]+)?)(?:L|l|UL|ul|u|U|F|f)?\\\\b' },\n         { token: 'variable.other.global.io', regex: 'Lobby\\\\b' },\n         { token: 'constant.language.io',\n           regex: '\\\\b(?:TRUE|true|FALSE|false|NULL|null|Null|Nil|nil|YES|NO)\\\\b' } ] };\n    \n    this.normalizeRules();\n};\n\nIoHighlightRules.metaData = { fileTypes: [ 'io' ],\n      keyEquivalent: '^~I',\n      name: 'Io',\n      scopeName: 'source.io' };\n\n\noop.inherits(IoHighlightRules, TextHighlightRules);\n\nexports.IoHighlightRules = IoHighlightRules;\n});"
  },
  {
    "path": "lib/ace/mode/jack.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar HighlightRules = require(\"./jack_highlight_rules\").JackHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = HighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"--\";\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n\n    this.$id = \"ace/mode/jack\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/jack_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar JackHighlightRules = function() {\n\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"string\",\n                regex : '\"',\n                next  : \"string2\"\n            }, {\n                token : \"string\",\n                regex : \"'\",\n                next  : \"string1\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex: \"-?0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"(?:0|[-+]?[1-9][0-9]*)\\\\b\"\n            }, {\n                token : \"constant.binary\",\n                regex : \"<[0-9A-Fa-f][0-9A-Fa-f](\\\\s+[0-9A-Fa-f][0-9A-Fa-f])*>\"\n            }, {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false)\\\\b\"\n            }, {\n                token : \"constant.language.null\",\n                regex : \"null\\\\b\"\n            }, {\n                token : \"storage.type\",\n                regex: \"(?:Integer|Boolean|Null|String|Buffer|Tuple|List|Object|Function|Coroutine|Form)\\\\b\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:return|abort|vars|for|delete|in|is|escape|exec|split|and|if|elif|else|while)\\\\b\"\n            }, {\n                token : \"language.builtin\",\n                regex : \"(?:lines|source|parse|read-stream|interval|substr|parseint|write|print|range|rand|inspect|bind|i-values|i-pairs|i-map|i-filter|i-chunk|i-all\\\\?|i-any\\\\?|i-collect|i-zip|i-merge|i-each)\\\\b\"\n            }, {\n                token : \"comment\",\n                regex : \"--.*$\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"storage.form\",\n                regex : \"@[a-z]+\"\n            }, {\n                token : \"constant.other.symbol\",\n                regex : ':+[a-zA-Z_]([-]?[a-zA-Z0-9_])*[?!]?'\n            }, {\n                token : \"variable\",\n                regex : '[a-zA-Z_]([-]?[a-zA-Z0-9_])*[?!]?'\n            }, {\n                token : \"keyword.operator\",\n                regex : \"\\\\|\\\\||\\\\^\\\\^|&&|!=|==|<=|<|>=|>|\\\\+|-|\\\\*|\\\\/|\\\\^|\\\\%|\\\\#|\\\\!\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"string1\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : /\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|['\"\\\\\\/bfnrt])/\n            }, {\n                token : \"string\",\n                regex : \"[^'\\\\\\\\]+\"\n            }, {\n                token : \"string\",\n                regex : \"'\",\n                next  : \"start\"\n            }, {\n                token : \"string\",\n                regex : \"\",\n                next  : \"start\"\n            }\n        ],\n        \"string2\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : /\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|['\"\\\\\\/bfnrt])/\n            }, {\n                token : \"string\",\n                regex : '[^\"\\\\\\\\]+'\n            }, {\n                token : \"string\",\n                regex : '\"',\n                next  : \"start\"\n            }, {\n                token : \"string\",\n                regex : \"\",\n                next  : \"start\"\n            }\n        ]\n    };\n    \n};\n\noop.inherits(JackHighlightRules, TextHighlightRules);\n\nexports.JackHighlightRules = JackHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/jade.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n *\n * Contributor(s):\n * \n * Garen J. Torikian <gjtorikian @ gmail DOT com>\n *\n * ***** END LICENSE BLOCK ***** */\n \ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JadeHighlightRules = require(\"./jade_highlight_rules\").JadeHighlightRules;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JadeHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() { \n\tthis.lineCommentStart = \"//\";\n    this.$id = \"ace/mode/jade\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});"
  },
  {
    "path": "lib/ace/mode/jade_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n *\n * Contributor(s):\n * \n * Garen J. Torikian <gjtorikian @ gmail DOT com>\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*\n  THIS FILE WAS AUTOGENERATED BY mode_highlight_rules.tmpl.js (UUID: C5B73B98-5F2A-42E3-9F0E-028A74A9FE4B)\n*/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar MarkdownHighlightRules = require(\"./markdown_highlight_rules\").MarkdownHighlightRules;\nvar SassHighlightRules = require(\"./scss_highlight_rules\").ScssHighlightRules;\nvar LessHighlightRules = require(\"./less_highlight_rules\").LessHighlightRules;\nvar CoffeeHighlightRules = require(\"./coffee_highlight_rules\").CoffeeHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\n\nfunction mixin_embed(tag, prefix) {\n    return { \n        token : \"entity.name.function.jade\",\n        regex : \"^\\\\s*\\\\:\" + tag,\n        next  : prefix + \"start\"\n    };\n}\n\nvar JadeHighlightRules = function() {\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-6][0-7]?|\" + // oct\n        \"37[0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = \n        {\n    \"start\": [\n        {\n            token: \"keyword.control.import.include.jade\",\n            regex: \"\\\\s*\\\\binclude\\\\b\"\n        },\n        {\n            token: \"keyword.other.doctype.jade\",\n            regex: \"^!!!\\\\s*(?:[a-zA-Z0-9-_]+)?\"\n        },\n        {\n            onMatch: function(value, currentState, stack) {\n                stack.unshift(this.next, value.length - 2, currentState);\n                return \"comment\";\n            },\n            regex: /^\\s*\\/\\//,\n            next: \"comment_block\"\n        },\n        mixin_embed(\"markdown\", \"markdown-\"),\n        mixin_embed(\"sass\", \"sass-\"),\n        mixin_embed(\"less\", \"less-\"),\n        mixin_embed(\"coffee\", \"coffee-\"),\n        /*\n        {\n            token: {\n                \"2\": {\n                    \"name\": \"entity.name.function.jade\"\n                }\n            },\n            regex: \"^(\\\\s*)(\\\\:cdata)\",\n            next: \"state_9\"\n        },*/\n        // match stuff like: mixin dialog-title-desc(title, desc)\n        {\n            token: [ \"storage.type.function.jade\",\n                       \"entity.name.function.jade\",\n                       \"punctuation.definition.parameters.begin.jade\",\n                       \"variable.parameter.function.jade\",\n                       \"punctuation.definition.parameters.end.jade\"\n                    ],\n            regex: \"^(\\\\s*mixin)( [\\\\w\\\\-]+)(\\\\s*\\\\()(.*?)(\\\\))\"\n        },\n        // match stuff like: mixin dialog-title-desc\n        {\n            token: [ \"storage.type.function.jade\", \"entity.name.function.jade\"],\n            regex: \"^(\\\\s*mixin)( [\\\\w\\\\-]+)\"\n        },\n        {\n            token: \"source.js.embedded.jade\",\n            regex: \"^\\\\s*(?:-|=|!=)\",\n            next: \"js-start\"\n        },\n        /*{\n            token: \"entity.name.tag.script.jade\",\n            regex: \"^\\\\s*script\",\n            next: \"js_code_tag\"\n        },*/\n        {\n            token: \"string.interpolated.jade\",\n            regex: \"[#!]\\\\{[^\\\\}]+\\\\}\"\n        },\n        // Match any tag, id or class. skip AST filters\n        {\n            token: \"meta.tag.any.jade\",\n            regex: /^\\s*(?!\\w+:)(?:[\\w-]+|(?=\\.|#)])/,\n            next: \"tag_single\"\n        },\n        {\n            token: \"suport.type.attribute.id.jade\",\n            regex: \"#\\\\w+\"\n        },\n        {\n            token: \"suport.type.attribute.class.jade\",\n            regex: \"\\\\.\\\\w+\"\n        },\n        {\n            token: \"punctuation\",\n            regex: \"\\\\s*(?:\\\\()\",\n            next: \"tag_attributes\"\n        }\n    ],\n    \"comment_block\": [\n        {regex: /^\\s*(?:\\/\\/)?/, onMatch: function(value, currentState, stack) {\n            if (value.length <= stack[1]) {\n                if (value.slice(-1) == \"/\") {\n                    stack[1] = value.length - 2;\n                    this.next = \"\";\n                    return \"comment\";\n                }\n                stack.shift();\n                stack.shift();\n                this.next = stack.shift();\n                return \"text\";\n            } else {\n                this.next = \"\";\n                return \"comment\";\n            }\n        }, next: \"start\"},\n        {defaultToken: \"comment\"}\n    ],\n    /*\n    \n    \"state_9\": [\n        {\n            token: \"TODO\",\n            regex: \"^(?!\\\\1\\\\s+)\",\n            next: \"start\"\n        },\n        {\n            token: \"TODO\",\n            regex: \".+\",\n            next: \"state_9\"\n        }\n    ],*/\n    /*\"js_code\": [\n        {\n            token: \"keyword.control.js\",\n            regex: \"\\\\beach\\\\b\"\n        },\n        {\n            token: \"text\",\n            regex: \"$\",\n            next: \"start\"\n        }\n    ],*/\n    /*\"js_code_tag\": [\n        {\n            \"include\": \"source.js\"\n        },\n        {\n            token: \"TODO\",\n            regex: \"^((?=(\\\\1)([\\\\w#\\\\.]|$\\\\n?))|^$\\\\n?)\",\n            next: \"start\"\n        }\n    ],*/\n    \"tag_single\": [\n        {\n            token: \"entity.other.attribute-name.class.jade\",\n            regex: \"\\\\.[\\\\w-]+\"\n        },\n        {\n            token: \"entity.other.attribute-name.id.jade\",\n            regex: \"#[\\\\w-]+\"\n        },\n        {\n            token: [\"text\", \"punctuation\"],\n            regex: \"($)|((?!\\\\.|#|=|-))\",\n            next: \"start\"\n        }\n    ],\n    \"tag_attributes\": [ \n        {\n            token : \"string\",\n            regex : \"'(?=.)\",\n            next  : \"qstring\"\n        }, \n        {\n            token : \"string\",\n            regex : '\"(?=.)',\n            next  : \"qqstring\"\n        },\n        {\n            token: [\"entity.other.attribute-name.jade\", \"punctuation\"],\n            regex: \"([a-zA-Z:\\\\.-]+)(=)?\",\n            next: \"attribute_strings\"\n        },\n        {\n            token: \"punctuation\",\n            regex: \"\\\\)\",\n            next: \"start\"\n        }\n    ],\n    \"attribute_strings\": [\n        {\n            token : \"string\",\n            regex : \"'(?=.)\",\n            next  : \"qstring\"\n        }, \n        {\n            token : \"string\",\n            regex : '\"(?=.)',\n            next  : \"qqstring\"\n        },\n        {\n            token : \"string\",\n            regex : '(?=\\\\S)',\n            next  : \"tag_attributes\"\n        }\n    ],\n    \"qqstring\" : [\n        {\n            token : \"constant.language.escape\",\n            regex : escapedRe\n        }, {\n            token : \"string\",\n            regex : '[^\"\\\\\\\\]+'\n        }, {\n            token : \"string\",\n            regex : \"\\\\\\\\$\",\n            next  : \"qqstring\"\n        }, {\n            token : \"string\",\n            regex : '\"|$',\n            next  : \"tag_attributes\"\n        }\n    ],\n    \"qstring\" : [\n        {\n            token : \"constant.language.escape\",\n            regex : escapedRe\n        }, {\n            token : \"string\",\n            regex : \"[^'\\\\\\\\]+\"\n        }, {\n            token : \"string\",\n            regex : \"\\\\\\\\$\",\n            next  : \"qstring\"\n        }, {\n            token : \"string\",\n            regex : \"'|$\",\n            next  : \"tag_attributes\"\n        }\n    ]\n};\n\n    this.embedRules(JavaScriptHighlightRules, \"js-\", [{\n        token: \"text\",\n        regex: \".$\",\n        next: \"start\"\n    }]);\n/*\n    this.embedRules(MarkdownHighlightRules, \"markdown-\", [{\n       token : \"support.function\",\n       regex : \"^\\\\1\\\\s+\",\n       captures: \"1\",\n       next  : \"start\"\n    }]);\n\n    this.embedRules(SassHighlightRules, \"sass-\", [{\n       token : \"support.function\",\n       regex : \"^(?!\\\\1\\\\s+)\",\n       captures: \"1\",\n       next  : \"start\"\n    }]);\n\n    this.embedRules(LessHighlightRules, \"less-\", [{\n       token : \"support.function\",\n       regex : \"^(?!\\\\1\\\\s+)\",\n       captures: \"1\",\n       next  : \"start\"\n    }]);\n\n    this.embedRules(CoffeeHighlightRules, \"coffee-\", [{\n       token : \"support.function\",\n       regex : \"^(?!\\\\1\\\\s+)\",\n       captures: \"1\",\n       next  : \"start\"\n    }]);\n\n    this.embedRules(JavaScriptHighlightRules, \"js-\", [{\n       token : \"support.function\",\n       regex : \"$\",\n       captures: \"1\",\n       next  : \"start\"\n    }]); */\n};\n\noop.inherits(JadeHighlightRules, TextHighlightRules);\n\nexports.JadeHighlightRules = JadeHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/java.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar JavaHighlightRules = require(\"./java_highlight_rules\").JavaHighlightRules;\n\nvar Mode = function() {\n    JavaScriptMode.call(this);\n    this.HighlightRules = JavaHighlightRules;\n};\noop.inherits(Mode, JavaScriptMode);\n\n(function() {\n    \n    this.createWorker = function(session) {\n        return null;\n    };\n\n    this.$id = \"ace/mode/java\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/java_highlight_rules.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar JavaHighlightRules = function() {\n\n    // taken from http://download.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html\n    var keywords = (\n    \"abstract|continue|for|new|switch|\" +\n    \"assert|default|goto|package|synchronized|\" +\n    \"boolean|do|if|private|this|\" +\n    \"break|double|implements|protected|throw|\" +\n    \"byte|else|import|public|throws|\" +\n    \"case|enum|instanceof|return|transient|\" +\n    \"catch|extends|int|short|try|\" +\n    \"char|final|interface|static|void|\" +\n    \"class|finally|long|strictfp|volatile|\" +\n    \"const|float|native|super|while|\" +\n    \"var\"\n    );\n\n    var buildinConstants = (\"null|Infinity|NaN|undefined\");\n\n\n    var langClasses = (\n        \"AbstractMethodError|AssertionError|ClassCircularityError|\"+\n        \"ClassFormatError|Deprecated|EnumConstantNotPresentException|\"+\n        \"ExceptionInInitializerError|IllegalAccessError|\"+\n        \"IllegalThreadStateException|InstantiationError|InternalError|\"+\n        \"NegativeArraySizeException|NoSuchFieldError|Override|Process|\"+\n        \"ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|\"+\n        \"SuppressWarnings|TypeNotPresentException|UnknownError|\"+\n        \"UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|\"+\n        \"InstantiationException|IndexOutOfBoundsException|\"+\n        \"ArrayIndexOutOfBoundsException|CloneNotSupportedException|\"+\n        \"NoSuchFieldException|IllegalArgumentException|NumberFormatException|\"+\n        \"SecurityException|Void|InheritableThreadLocal|IllegalStateException|\"+\n        \"InterruptedException|NoSuchMethodException|IllegalAccessException|\"+\n        \"UnsupportedOperationException|Enum|StrictMath|Package|Compiler|\"+\n        \"Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|\"+\n        \"NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|\"+\n        \"NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|\"+\n        \"Character|Boolean|StackTraceElement|Appendable|StringBuffer|\"+\n        \"Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|\"+\n        \"StackOverflowError|OutOfMemoryError|VirtualMachineError|\"+\n        \"ArrayStoreException|ClassCastException|LinkageError|\"+\n        \"NoClassDefFoundError|ClassNotFoundException|RuntimeException|\"+\n        \"Exception|ThreadDeath|Error|Throwable|System|ClassLoader|\"+\n        \"Cloneable|Class|CharSequence|Comparable|String|Object\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"this\",\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants,\n        \"support.function\": langClasses\n    }, \"identifier\");\n\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : /0(?:[xX][0-9a-fA-F][0-9a-fA-F_]*|[bB][01][01_]*)[LlSsDdFfYy]?\\b/\n            }, {\n                token : \"constant.numeric\", // float\n                regex : /[+-]?\\d[\\d_]*(?:(?:\\.[\\d_]*)?(?:[eE][+-]?[\\d_]+)?)?[LlSsDdFfYy]?\\b/\n            }, {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false)\\\\b\"\n            }, {\n                token : keywordMapper,\n                // TODO: Unicode escape sequences\n                // TODO: Unicode identifiers\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token : \"lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ]\n    };\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n};\n\noop.inherits(JavaHighlightRules, TextHighlightRules);\n\nexports.JavaHighlightRules = JavaHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/javascript/jshint.js",
    "content": "define(function(require, exports, module) {\nmodule.exports = (function outer (modules, cache, entry) {\n    var previousRequire = typeof require == \"function\" && require;\n    function newRequire(name, jumped){\n        if(!cache[name]) {\n            if(!modules[name]) {\n                var currentRequire = typeof require == \"function\" && require;\n                if (!jumped && currentRequire) return currentRequire(name, true);\n                if (previousRequire) return previousRequire(name, true);\n                var err = new Error('Cannot find module \\'' + name + '\\'');\n                err.code = 'MODULE_NOT_FOUND';\n                throw err;\n            }\n            var m = cache[name] = {exports:{}};\n            modules[name][0].call(m.exports, function(x){\n                var id = modules[name][1][x];\n                return newRequire(id ? id : x);\n            },m,m.exports,outer,modules,cache,entry);\n        }\n        return cache[name].exports;\n    }\n    for(var i=0;i<entry.length;i++) newRequire(entry[i]);\n    return newRequire(entry[0]);\n})\n({\"/node_modules/browserify/node_modules/events/events.js\":[function(_dereq_,module,exports){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nfunction EventEmitter() {\n  this._events = this._events || {};\n  this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nEventEmitter.defaultMaxListeners = 10;\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function(n) {\n  if (!isNumber(n) || n < 0 || isNaN(n))\n    throw TypeError('n must be a positive number');\n  this._maxListeners = n;\n  return this;\n};\n\nEventEmitter.prototype.emit = function(type) {\n  var er, handler, len, args, i, listeners;\n\n  if (!this._events)\n    this._events = {};\n\n  // If there is no 'error' event listener then throw.\n  if (type === 'error') {\n    if (!this._events.error ||\n        (isObject(this._events.error) && !this._events.error.length)) {\n      er = arguments[1];\n      if (er instanceof Error) {\n        throw er; // Unhandled 'error' event\n      }\n      throw TypeError('Uncaught, unspecified \"error\" event.');\n    }\n  }\n\n  handler = this._events[type];\n\n  if (isUndefined(handler))\n    return false;\n\n  if (isFunction(handler)) {\n    switch (arguments.length) {\n      // fast cases\n      case 1:\n        handler.call(this);\n        break;\n      case 2:\n        handler.call(this, arguments[1]);\n        break;\n      case 3:\n        handler.call(this, arguments[1], arguments[2]);\n        break;\n      // slower\n      default:\n        len = arguments.length;\n        args = new Array(len - 1);\n        for (i = 1; i < len; i++)\n          args[i - 1] = arguments[i];\n        handler.apply(this, args);\n    }\n  } else if (isObject(handler)) {\n    len = arguments.length;\n    args = new Array(len - 1);\n    for (i = 1; i < len; i++)\n      args[i - 1] = arguments[i];\n\n    listeners = handler.slice();\n    len = listeners.length;\n    for (i = 0; i < len; i++)\n      listeners[i].apply(this, args);\n  }\n\n  return true;\n};\n\nEventEmitter.prototype.addListener = function(type, listener) {\n  var m;\n\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  if (!this._events)\n    this._events = {};\n\n  // To avoid recursion in the case that type === \"newListener\"! Before\n  // adding it to the listeners, first emit \"newListener\".\n  if (this._events.newListener)\n    this.emit('newListener', type,\n              isFunction(listener.listener) ?\n              listener.listener : listener);\n\n  if (!this._events[type])\n    // Optimize the case of one listener. Don't need the extra array object.\n    this._events[type] = listener;\n  else if (isObject(this._events[type]))\n    // If we've already got an array, just append.\n    this._events[type].push(listener);\n  else\n    // Adding the second element, need to change to array.\n    this._events[type] = [this._events[type], listener];\n\n  // Check for listener leak\n  if (isObject(this._events[type]) && !this._events[type].warned) {\n    var m;\n    if (!isUndefined(this._maxListeners)) {\n      m = this._maxListeners;\n    } else {\n      m = EventEmitter.defaultMaxListeners;\n    }\n\n    if (m && m > 0 && this._events[type].length > m) {\n      this._events[type].warned = true;\n      console.error('(node) warning: possible EventEmitter memory ' +\n                    'leak detected. %d listeners added. ' +\n                    'Use emitter.setMaxListeners() to increase limit.',\n                    this._events[type].length);\n      if (typeof console.trace === 'function') {\n        // not supported in IE 10\n        console.trace();\n      }\n    }\n  }\n\n  return this;\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.once = function(type, listener) {\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  var fired = false;\n\n  function g() {\n    this.removeListener(type, g);\n\n    if (!fired) {\n      fired = true;\n      listener.apply(this, arguments);\n    }\n  }\n\n  g.listener = listener;\n  this.on(type, g);\n\n  return this;\n};\n\n// emits a 'removeListener' event iff the listener was removed\nEventEmitter.prototype.removeListener = function(type, listener) {\n  var list, position, length, i;\n\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  if (!this._events || !this._events[type])\n    return this;\n\n  list = this._events[type];\n  length = list.length;\n  position = -1;\n\n  if (list === listener ||\n      (isFunction(list.listener) && list.listener === listener)) {\n    delete this._events[type];\n    if (this._events.removeListener)\n      this.emit('removeListener', type, listener);\n\n  } else if (isObject(list)) {\n    for (i = length; i-- > 0;) {\n      if (list[i] === listener ||\n          (list[i].listener && list[i].listener === listener)) {\n        position = i;\n        break;\n      }\n    }\n\n    if (position < 0)\n      return this;\n\n    if (list.length === 1) {\n      list.length = 0;\n      delete this._events[type];\n    } else {\n      list.splice(position, 1);\n    }\n\n    if (this._events.removeListener)\n      this.emit('removeListener', type, listener);\n  }\n\n  return this;\n};\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n  var key, listeners;\n\n  if (!this._events)\n    return this;\n\n  // not listening for removeListener, no need to emit\n  if (!this._events.removeListener) {\n    if (arguments.length === 0)\n      this._events = {};\n    else if (this._events[type])\n      delete this._events[type];\n    return this;\n  }\n\n  // emit removeListener for all listeners on all events\n  if (arguments.length === 0) {\n    for (key in this._events) {\n      if (key === 'removeListener') continue;\n      this.removeAllListeners(key);\n    }\n    this.removeAllListeners('removeListener');\n    this._events = {};\n    return this;\n  }\n\n  listeners = this._events[type];\n\n  if (isFunction(listeners)) {\n    this.removeListener(type, listeners);\n  } else {\n    // LIFO order\n    while (listeners.length)\n      this.removeListener(type, listeners[listeners.length - 1]);\n  }\n  delete this._events[type];\n\n  return this;\n};\n\nEventEmitter.prototype.listeners = function(type) {\n  var ret;\n  if (!this._events || !this._events[type])\n    ret = [];\n  else if (isFunction(this._events[type]))\n    ret = [this._events[type]];\n  else\n    ret = this._events[type].slice();\n  return ret;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n  var ret;\n  if (!emitter._events || !emitter._events[type])\n    ret = 0;\n  else if (isFunction(emitter._events[type]))\n    ret = 1;\n  else\n    ret = emitter._events[type].length;\n  return ret;\n};\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\n\n},{}],\"/node_modules/jshint/data/ascii-identifier-data.js\":[function(_dereq_,module,exports){\nvar identifierStartTable = [];\n\nfor (var i = 0; i < 128; i++) {\n  identifierStartTable[i] =\n    i === 36 ||           // $\n    i >= 65 && i <= 90 || // A-Z\n    i === 95 ||           // _\n    i >= 97 && i <= 122;  // a-z\n}\n\nvar identifierPartTable = [];\n\nfor (var i = 0; i < 128; i++) {\n  identifierPartTable[i] =\n    identifierStartTable[i] || // $, _, A-Z, a-z\n    i >= 48 && i <= 57;        // 0-9\n}\n\nmodule.exports = {\n  asciiIdentifierStartTable: identifierStartTable,\n  asciiIdentifierPartTable: identifierPartTable\n};\n\n},{}],\"/node_modules/jshint/lodash.js\":[function(_dereq_,module,exports){\n(function (global){\n;(function() {\n\n  var undefined;\n\n  var VERSION = '3.7.0';\n\n  var FUNC_ERROR_TEXT = 'Expected a function';\n\n  var argsTag = '[object Arguments]',\n      arrayTag = '[object Array]',\n      boolTag = '[object Boolean]',\n      dateTag = '[object Date]',\n      errorTag = '[object Error]',\n      funcTag = '[object Function]',\n      mapTag = '[object Map]',\n      numberTag = '[object Number]',\n      objectTag = '[object Object]',\n      regexpTag = '[object RegExp]',\n      setTag = '[object Set]',\n      stringTag = '[object String]',\n      weakMapTag = '[object WeakMap]';\n\n  var arrayBufferTag = '[object ArrayBuffer]',\n      float32Tag = '[object Float32Array]',\n      float64Tag = '[object Float64Array]',\n      int8Tag = '[object Int8Array]',\n      int16Tag = '[object Int16Array]',\n      int32Tag = '[object Int32Array]',\n      uint8Tag = '[object Uint8Array]',\n      uint8ClampedTag = '[object Uint8ClampedArray]',\n      uint16Tag = '[object Uint16Array]',\n      uint32Tag = '[object Uint32Array]';\n\n  var reIsDeepProp = /\\.|\\[(?:[^[\\]]+|([\"'])(?:(?!\\1)[^\\n\\\\]|\\\\.)*?)\\1\\]/,\n      reIsPlainProp = /^\\w*$/,\n      rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\n\\\\]|\\\\.)*?)\\2)\\]/g;\n\n  var reRegExpChars = /[.*+?^${}()|[\\]\\/\\\\]/g,\n      reHasRegExpChars = RegExp(reRegExpChars.source);\n\n  var reEscapeChar = /\\\\(\\\\)?/g;\n\n  var reFlags = /\\w*$/;\n\n  var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n  var typedArrayTags = {};\n  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n  typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n  typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n  typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n  typedArrayTags[uint32Tag] = true;\n  typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n  typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n  typedArrayTags[dateTag] = typedArrayTags[errorTag] =\n  typedArrayTags[funcTag] = typedArrayTags[mapTag] =\n  typedArrayTags[numberTag] = typedArrayTags[objectTag] =\n  typedArrayTags[regexpTag] = typedArrayTags[setTag] =\n  typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;\n\n  var cloneableTags = {};\n  cloneableTags[argsTag] = cloneableTags[arrayTag] =\n  cloneableTags[arrayBufferTag] = cloneableTags[boolTag] =\n  cloneableTags[dateTag] = cloneableTags[float32Tag] =\n  cloneableTags[float64Tag] = cloneableTags[int8Tag] =\n  cloneableTags[int16Tag] = cloneableTags[int32Tag] =\n  cloneableTags[numberTag] = cloneableTags[objectTag] =\n  cloneableTags[regexpTag] = cloneableTags[stringTag] =\n  cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n  cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n  cloneableTags[errorTag] = cloneableTags[funcTag] =\n  cloneableTags[mapTag] = cloneableTags[setTag] =\n  cloneableTags[weakMapTag] = false;\n\n  var objectTypes = {\n    'function': true,\n    'object': true\n  };\n\n  var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n\n  var freeModule = objectTypes[typeof module] && module && !module.nodeType && module;\n\n  var freeGlobal = freeExports && freeModule && typeof global == 'object' && global && global.Object && global;\n\n  var freeSelf = objectTypes[typeof self] && self && self.Object && self;\n\n  var freeWindow = objectTypes[typeof window] && window && window.Object && window;\n\n  var moduleExports = freeModule && freeModule.exports === freeExports && freeExports;\n\n  var root = freeGlobal || ((freeWindow !== (this && this.window)) && freeWindow) || freeSelf || this;\n\n  function baseFindIndex(array, predicate, fromRight) {\n    var length = array.length,\n        index = fromRight ? length : -1;\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (predicate(array[index], index, array)) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  function baseIndexOf(array, value, fromIndex) {\n    if (value !== value) {\n      return indexOfNaN(array, fromIndex);\n    }\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  function baseIsFunction(value) {\n    return typeof value == 'function' || false;\n  }\n\n  function baseToString(value) {\n    if (typeof value == 'string') {\n      return value;\n    }\n    return value == null ? '' : (value + '');\n  }\n\n  function indexOfNaN(array, fromIndex, fromRight) {\n    var length = array.length,\n        index = fromIndex + (fromRight ? 0 : -1);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      var other = array[index];\n      if (other !== other) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  function isObjectLike(value) {\n    return !!value && typeof value == 'object';\n  }\n\n  var arrayProto = Array.prototype,\n      objectProto = Object.prototype;\n\n  var fnToString = Function.prototype.toString;\n\n  var hasOwnProperty = objectProto.hasOwnProperty;\n\n  var objToString = objectProto.toString;\n\n  var reIsNative = RegExp('^' +\n    escapeRegExp(objToString)\n    .replace(/toString|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n  );\n\n  var ArrayBuffer = isNative(ArrayBuffer = root.ArrayBuffer) && ArrayBuffer,\n      bufferSlice = isNative(bufferSlice = ArrayBuffer && new ArrayBuffer(0).slice) && bufferSlice,\n      floor = Math.floor,\n      getOwnPropertySymbols = isNative(getOwnPropertySymbols = Object.getOwnPropertySymbols) && getOwnPropertySymbols,\n      getPrototypeOf = isNative(getPrototypeOf = Object.getPrototypeOf) && getPrototypeOf,\n      push = arrayProto.push,\n      preventExtensions = isNative(Object.preventExtensions = Object.preventExtensions) && preventExtensions,\n      propertyIsEnumerable = objectProto.propertyIsEnumerable,\n      Uint8Array = isNative(Uint8Array = root.Uint8Array) && Uint8Array;\n\n  var Float64Array = (function() {\n    try {\n      var func = isNative(func = root.Float64Array) && func,\n          result = new func(new ArrayBuffer(10), 0, 1) && func;\n    } catch(e) {}\n    return result;\n  }());\n\n  var nativeAssign = (function() {\n    var object = { '1': 0 },\n        func = preventExtensions && isNative(func = Object.assign) && func;\n\n    try { func(preventExtensions(object), 'xo'); } catch(e) {}\n    return !object[1] && func;\n  }());\n\n  var nativeIsArray = isNative(nativeIsArray = Array.isArray) && nativeIsArray,\n      nativeKeys = isNative(nativeKeys = Object.keys) && nativeKeys,\n      nativeMax = Math.max,\n      nativeMin = Math.min;\n\n  var NEGATIVE_INFINITY = Number.NEGATIVE_INFINITY;\n\n  var MAX_ARRAY_LENGTH = Math.pow(2, 32) - 1,\n      MAX_ARRAY_INDEX =  MAX_ARRAY_LENGTH - 1,\n      HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n  var FLOAT64_BYTES_PER_ELEMENT = Float64Array ? Float64Array.BYTES_PER_ELEMENT : 0;\n\n  var MAX_SAFE_INTEGER = Math.pow(2, 53) - 1;\n\n  function lodash() {\n  }\n\n  var support = lodash.support = {};\n\n  (function(x) {\n    var Ctor = function() { this.x = x; },\n        object = { '0': x, 'length': x },\n        props = [];\n\n    Ctor.prototype = { 'valueOf': x, 'y': x };\n    for (var key in new Ctor) { props.push(key); }\n\n    support.funcDecomp = /\\bthis\\b/.test(function() { return this; });\n\n    support.funcNames = typeof Function.name == 'string';\n\n    try {\n      support.nonEnumArgs = !propertyIsEnumerable.call(arguments, 1);\n    } catch(e) {\n      support.nonEnumArgs = true;\n    }\n  }(1, 0));\n\n  function arrayCopy(source, array) {\n    var index = -1,\n        length = source.length;\n\n    array || (array = Array(length));\n    while (++index < length) {\n      array[index] = source[index];\n    }\n    return array;\n  }\n\n  function arrayEach(array, iteratee) {\n    var index = -1,\n        length = array.length;\n\n    while (++index < length) {\n      if (iteratee(array[index], index, array) === false) {\n        break;\n      }\n    }\n    return array;\n  }\n\n  function arrayFilter(array, predicate) {\n    var index = -1,\n        length = array.length,\n        resIndex = -1,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n      if (predicate(value, index, array)) {\n        result[++resIndex] = value;\n      }\n    }\n    return result;\n  }\n\n  function arrayMap(array, iteratee) {\n    var index = -1,\n        length = array.length,\n        result = Array(length);\n\n    while (++index < length) {\n      result[index] = iteratee(array[index], index, array);\n    }\n    return result;\n  }\n\n  function arrayMax(array) {\n    var index = -1,\n        length = array.length,\n        result = NEGATIVE_INFINITY;\n\n    while (++index < length) {\n      var value = array[index];\n      if (value > result) {\n        result = value;\n      }\n    }\n    return result;\n  }\n\n  function arraySome(array, predicate) {\n    var index = -1,\n        length = array.length;\n\n    while (++index < length) {\n      if (predicate(array[index], index, array)) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  function assignWith(object, source, customizer) {\n    var props = keys(source);\n    push.apply(props, getSymbols(source));\n\n    var index = -1,\n        length = props.length;\n\n    while (++index < length) {\n      var key = props[index],\n          value = object[key],\n          result = customizer(value, source[key], key, object, source);\n\n      if ((result === result ? (result !== value) : (value === value)) ||\n          (value === undefined && !(key in object))) {\n        object[key] = result;\n      }\n    }\n    return object;\n  }\n\n  var baseAssign = nativeAssign || function(object, source) {\n    return source == null\n      ? object\n      : baseCopy(source, getSymbols(source), baseCopy(source, keys(source), object));\n  };\n\n  function baseCopy(source, props, object) {\n    object || (object = {});\n\n    var index = -1,\n        length = props.length;\n\n    while (++index < length) {\n      var key = props[index];\n      object[key] = source[key];\n    }\n    return object;\n  }\n\n  function baseCallback(func, thisArg, argCount) {\n    var type = typeof func;\n    if (type == 'function') {\n      return thisArg === undefined\n        ? func\n        : bindCallback(func, thisArg, argCount);\n    }\n    if (func == null) {\n      return identity;\n    }\n    if (type == 'object') {\n      return baseMatches(func);\n    }\n    return thisArg === undefined\n      ? property(func)\n      : baseMatchesProperty(func, thisArg);\n  }\n\n  function baseClone(value, isDeep, customizer, key, object, stackA, stackB) {\n    var result;\n    if (customizer) {\n      result = object ? customizer(value, key, object) : customizer(value);\n    }\n    if (result !== undefined) {\n      return result;\n    }\n    if (!isObject(value)) {\n      return value;\n    }\n    var isArr = isArray(value);\n    if (isArr) {\n      result = initCloneArray(value);\n      if (!isDeep) {\n        return arrayCopy(value, result);\n      }\n    } else {\n      var tag = objToString.call(value),\n          isFunc = tag == funcTag;\n\n      if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n        result = initCloneObject(isFunc ? {} : value);\n        if (!isDeep) {\n          return baseAssign(result, value);\n        }\n      } else {\n        return cloneableTags[tag]\n          ? initCloneByTag(value, tag, isDeep)\n          : (object ? value : {});\n      }\n    }\n    stackA || (stackA = []);\n    stackB || (stackB = []);\n\n    var length = stackA.length;\n    while (length--) {\n      if (stackA[length] == value) {\n        return stackB[length];\n      }\n    }\n    stackA.push(value);\n    stackB.push(result);\n\n    (isArr ? arrayEach : baseForOwn)(value, function(subValue, key) {\n      result[key] = baseClone(subValue, isDeep, customizer, key, value, stackA, stackB);\n    });\n    return result;\n  }\n\n  var baseEach = createBaseEach(baseForOwn);\n\n  function baseFilter(collection, predicate) {\n    var result = [];\n    baseEach(collection, function(value, index, collection) {\n      if (predicate(value, index, collection)) {\n        result.push(value);\n      }\n    });\n    return result;\n  }\n\n  var baseFor = createBaseFor();\n\n  function baseForIn(object, iteratee) {\n    return baseFor(object, iteratee, keysIn);\n  }\n\n  function baseForOwn(object, iteratee) {\n    return baseFor(object, iteratee, keys);\n  }\n\n  function baseGet(object, path, pathKey) {\n    if (object == null) {\n      return;\n    }\n    if (pathKey !== undefined && pathKey in toObject(object)) {\n      path = [pathKey];\n    }\n    var index = -1,\n        length = path.length;\n\n    while (object != null && ++index < length) {\n      var result = object = object[path[index]];\n    }\n    return result;\n  }\n\n  function baseIsEqual(value, other, customizer, isLoose, stackA, stackB) {\n    if (value === other) {\n      return value !== 0 || (1 / value == 1 / other);\n    }\n    var valType = typeof value,\n        othType = typeof other;\n\n    if ((valType != 'function' && valType != 'object' && othType != 'function' && othType != 'object') ||\n        value == null || other == null) {\n      return value !== value && other !== other;\n    }\n    return baseIsEqualDeep(value, other, baseIsEqual, customizer, isLoose, stackA, stackB);\n  }\n\n  function baseIsEqualDeep(object, other, equalFunc, customizer, isLoose, stackA, stackB) {\n    var objIsArr = isArray(object),\n        othIsArr = isArray(other),\n        objTag = arrayTag,\n        othTag = arrayTag;\n\n    if (!objIsArr) {\n      objTag = objToString.call(object);\n      if (objTag == argsTag) {\n        objTag = objectTag;\n      } else if (objTag != objectTag) {\n        objIsArr = isTypedArray(object);\n      }\n    }\n    if (!othIsArr) {\n      othTag = objToString.call(other);\n      if (othTag == argsTag) {\n        othTag = objectTag;\n      } else if (othTag != objectTag) {\n        othIsArr = isTypedArray(other);\n      }\n    }\n    var objIsObj = objTag == objectTag,\n        othIsObj = othTag == objectTag,\n        isSameTag = objTag == othTag;\n\n    if (isSameTag && !(objIsArr || objIsObj)) {\n      return equalByTag(object, other, objTag);\n    }\n    if (!isLoose) {\n      var valWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n          othWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n      if (valWrapped || othWrapped) {\n        return equalFunc(valWrapped ? object.value() : object, othWrapped ? other.value() : other, customizer, isLoose, stackA, stackB);\n      }\n    }\n    if (!isSameTag) {\n      return false;\n    }\n    stackA || (stackA = []);\n    stackB || (stackB = []);\n\n    var length = stackA.length;\n    while (length--) {\n      if (stackA[length] == object) {\n        return stackB[length] == other;\n      }\n    }\n    stackA.push(object);\n    stackB.push(other);\n\n    var result = (objIsArr ? equalArrays : equalObjects)(object, other, equalFunc, customizer, isLoose, stackA, stackB);\n\n    stackA.pop();\n    stackB.pop();\n\n    return result;\n  }\n\n  function baseIsMatch(object, props, values, strictCompareFlags, customizer) {\n    var index = -1,\n        length = props.length,\n        noCustomizer = !customizer;\n\n    while (++index < length) {\n      if ((noCustomizer && strictCompareFlags[index])\n            ? values[index] !== object[props[index]]\n            : !(props[index] in object)\n          ) {\n        return false;\n      }\n    }\n    index = -1;\n    while (++index < length) {\n      var key = props[index],\n          objValue = object[key],\n          srcValue = values[index];\n\n      if (noCustomizer && strictCompareFlags[index]) {\n        var result = objValue !== undefined || (key in object);\n      } else {\n        result = customizer ? customizer(objValue, srcValue, key) : undefined;\n        if (result === undefined) {\n          result = baseIsEqual(srcValue, objValue, customizer, true);\n        }\n      }\n      if (!result) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  function baseMatches(source) {\n    var props = keys(source),\n        length = props.length;\n\n    if (!length) {\n      return constant(true);\n    }\n    if (length == 1) {\n      var key = props[0],\n          value = source[key];\n\n      if (isStrictComparable(value)) {\n        return function(object) {\n          if (object == null) {\n            return false;\n          }\n          return object[key] === value && (value !== undefined || (key in toObject(object)));\n        };\n      }\n    }\n    var values = Array(length),\n        strictCompareFlags = Array(length);\n\n    while (length--) {\n      value = source[props[length]];\n      values[length] = value;\n      strictCompareFlags[length] = isStrictComparable(value);\n    }\n    return function(object) {\n      return object != null && baseIsMatch(toObject(object), props, values, strictCompareFlags);\n    };\n  }\n\n  function baseMatchesProperty(path, value) {\n    var isArr = isArray(path),\n        isCommon = isKey(path) && isStrictComparable(value),\n        pathKey = (path + '');\n\n    path = toPath(path);\n    return function(object) {\n      if (object == null) {\n        return false;\n      }\n      var key = pathKey;\n      object = toObject(object);\n      if ((isArr || !isCommon) && !(key in object)) {\n        object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));\n        if (object == null) {\n          return false;\n        }\n        key = last(path);\n        object = toObject(object);\n      }\n      return object[key] === value\n        ? (value !== undefined || (key in object))\n        : baseIsEqual(value, object[key], null, true);\n    };\n  }\n\n  function baseMerge(object, source, customizer, stackA, stackB) {\n    if (!isObject(object)) {\n      return object;\n    }\n    var isSrcArr = isLength(source.length) && (isArray(source) || isTypedArray(source));\n    if (!isSrcArr) {\n      var props = keys(source);\n      push.apply(props, getSymbols(source));\n    }\n    arrayEach(props || source, function(srcValue, key) {\n      if (props) {\n        key = srcValue;\n        srcValue = source[key];\n      }\n      if (isObjectLike(srcValue)) {\n        stackA || (stackA = []);\n        stackB || (stackB = []);\n        baseMergeDeep(object, source, key, baseMerge, customizer, stackA, stackB);\n      }\n      else {\n        var value = object[key],\n            result = customizer ? customizer(value, srcValue, key, object, source) : undefined,\n            isCommon = result === undefined;\n\n        if (isCommon) {\n          result = srcValue;\n        }\n        if ((isSrcArr || result !== undefined) &&\n            (isCommon || (result === result ? (result !== value) : (value === value)))) {\n          object[key] = result;\n        }\n      }\n    });\n    return object;\n  }\n\n  function baseMergeDeep(object, source, key, mergeFunc, customizer, stackA, stackB) {\n    var length = stackA.length,\n        srcValue = source[key];\n\n    while (length--) {\n      if (stackA[length] == srcValue) {\n        object[key] = stackB[length];\n        return;\n      }\n    }\n    var value = object[key],\n        result = customizer ? customizer(value, srcValue, key, object, source) : undefined,\n        isCommon = result === undefined;\n\n    if (isCommon) {\n      result = srcValue;\n      if (isLength(srcValue.length) && (isArray(srcValue) || isTypedArray(srcValue))) {\n        result = isArray(value)\n          ? value\n          : (getLength(value) ? arrayCopy(value) : []);\n      }\n      else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n        result = isArguments(value)\n          ? toPlainObject(value)\n          : (isPlainObject(value) ? value : {});\n      }\n      else {\n        isCommon = false;\n      }\n    }\n    stackA.push(srcValue);\n    stackB.push(result);\n\n    if (isCommon) {\n      object[key] = mergeFunc(result, srcValue, customizer, stackA, stackB);\n    } else if (result === result ? (result !== value) : (value === value)) {\n      object[key] = result;\n    }\n  }\n\n  function baseProperty(key) {\n    return function(object) {\n      return object == null ? undefined : object[key];\n    };\n  }\n\n  function basePropertyDeep(path) {\n    var pathKey = (path + '');\n    path = toPath(path);\n    return function(object) {\n      return baseGet(object, path, pathKey);\n    };\n  }\n\n  function baseSlice(array, start, end) {\n    var index = -1,\n        length = array.length;\n\n    start = start == null ? 0 : (+start || 0);\n    if (start < 0) {\n      start = -start > length ? 0 : (length + start);\n    }\n    end = (end === undefined || end > length) ? length : (+end || 0);\n    if (end < 0) {\n      end += length;\n    }\n    length = start > end ? 0 : ((end - start) >>> 0);\n    start >>>= 0;\n\n    var result = Array(length);\n    while (++index < length) {\n      result[index] = array[index + start];\n    }\n    return result;\n  }\n\n  function baseSome(collection, predicate) {\n    var result;\n\n    baseEach(collection, function(value, index, collection) {\n      result = predicate(value, index, collection);\n      return !result;\n    });\n    return !!result;\n  }\n\n  function baseValues(object, props) {\n    var index = -1,\n        length = props.length,\n        result = Array(length);\n\n    while (++index < length) {\n      result[index] = object[props[index]];\n    }\n    return result;\n  }\n\n  function binaryIndex(array, value, retHighest) {\n    var low = 0,\n        high = array ? array.length : low;\n\n    if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n      while (low < high) {\n        var mid = (low + high) >>> 1,\n            computed = array[mid];\n\n        if (retHighest ? (computed <= value) : (computed < value)) {\n          low = mid + 1;\n        } else {\n          high = mid;\n        }\n      }\n      return high;\n    }\n    return binaryIndexBy(array, value, identity, retHighest);\n  }\n\n  function binaryIndexBy(array, value, iteratee, retHighest) {\n    value = iteratee(value);\n\n    var low = 0,\n        high = array ? array.length : 0,\n        valIsNaN = value !== value,\n        valIsUndef = value === undefined;\n\n    while (low < high) {\n      var mid = floor((low + high) / 2),\n          computed = iteratee(array[mid]),\n          isReflexive = computed === computed;\n\n      if (valIsNaN) {\n        var setLow = isReflexive || retHighest;\n      } else if (valIsUndef) {\n        setLow = isReflexive && (retHighest || computed !== undefined);\n      } else {\n        setLow = retHighest ? (computed <= value) : (computed < value);\n      }\n      if (setLow) {\n        low = mid + 1;\n      } else {\n        high = mid;\n      }\n    }\n    return nativeMin(high, MAX_ARRAY_INDEX);\n  }\n\n  function bindCallback(func, thisArg, argCount) {\n    if (typeof func != 'function') {\n      return identity;\n    }\n    if (thisArg === undefined) {\n      return func;\n    }\n    switch (argCount) {\n      case 1: return function(value) {\n        return func.call(thisArg, value);\n      };\n      case 3: return function(value, index, collection) {\n        return func.call(thisArg, value, index, collection);\n      };\n      case 4: return function(accumulator, value, index, collection) {\n        return func.call(thisArg, accumulator, value, index, collection);\n      };\n      case 5: return function(value, other, key, object, source) {\n        return func.call(thisArg, value, other, key, object, source);\n      };\n    }\n    return function() {\n      return func.apply(thisArg, arguments);\n    };\n  }\n\n  function bufferClone(buffer) {\n    return bufferSlice.call(buffer, 0);\n  }\n  if (!bufferSlice) {\n    bufferClone = !(ArrayBuffer && Uint8Array) ? constant(null) : function(buffer) {\n      var byteLength = buffer.byteLength,\n          floatLength = Float64Array ? floor(byteLength / FLOAT64_BYTES_PER_ELEMENT) : 0,\n          offset = floatLength * FLOAT64_BYTES_PER_ELEMENT,\n          result = new ArrayBuffer(byteLength);\n\n      if (floatLength) {\n        var view = new Float64Array(result, 0, floatLength);\n        view.set(new Float64Array(buffer, 0, floatLength));\n      }\n      if (byteLength != offset) {\n        view = new Uint8Array(result, offset);\n        view.set(new Uint8Array(buffer, offset));\n      }\n      return result;\n    };\n  }\n\n  function createAssigner(assigner) {\n    return restParam(function(object, sources) {\n      var index = -1,\n          length = object == null ? 0 : sources.length,\n          customizer = length > 2 && sources[length - 2],\n          guard = length > 2 && sources[2],\n          thisArg = length > 1 && sources[length - 1];\n\n      if (typeof customizer == 'function') {\n        customizer = bindCallback(customizer, thisArg, 5);\n        length -= 2;\n      } else {\n        customizer = typeof thisArg == 'function' ? thisArg : null;\n        length -= (customizer ? 1 : 0);\n      }\n      if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n        customizer = length < 3 ? null : customizer;\n        length = 1;\n      }\n      while (++index < length) {\n        var source = sources[index];\n        if (source) {\n          assigner(object, source, customizer);\n        }\n      }\n      return object;\n    });\n  }\n\n  function createBaseEach(eachFunc, fromRight) {\n    return function(collection, iteratee) {\n      var length = collection ? getLength(collection) : 0;\n      if (!isLength(length)) {\n        return eachFunc(collection, iteratee);\n      }\n      var index = fromRight ? length : -1,\n          iterable = toObject(collection);\n\n      while ((fromRight ? index-- : ++index < length)) {\n        if (iteratee(iterable[index], index, iterable) === false) {\n          break;\n        }\n      }\n      return collection;\n    };\n  }\n\n  function createBaseFor(fromRight) {\n    return function(object, iteratee, keysFunc) {\n      var iterable = toObject(object),\n          props = keysFunc(object),\n          length = props.length,\n          index = fromRight ? length : -1;\n\n      while ((fromRight ? index-- : ++index < length)) {\n        var key = props[index];\n        if (iteratee(iterable[key], key, iterable) === false) {\n          break;\n        }\n      }\n      return object;\n    };\n  }\n\n  function createFindIndex(fromRight) {\n    return function(array, predicate, thisArg) {\n      if (!(array && array.length)) {\n        return -1;\n      }\n      predicate = getCallback(predicate, thisArg, 3);\n      return baseFindIndex(array, predicate, fromRight);\n    };\n  }\n\n  function createForEach(arrayFunc, eachFunc) {\n    return function(collection, iteratee, thisArg) {\n      return (typeof iteratee == 'function' && thisArg === undefined && isArray(collection))\n        ? arrayFunc(collection, iteratee)\n        : eachFunc(collection, bindCallback(iteratee, thisArg, 3));\n    };\n  }\n\n  function equalArrays(array, other, equalFunc, customizer, isLoose, stackA, stackB) {\n    var index = -1,\n        arrLength = array.length,\n        othLength = other.length,\n        result = true;\n\n    if (arrLength != othLength && !(isLoose && othLength > arrLength)) {\n      return false;\n    }\n    while (result && ++index < arrLength) {\n      var arrValue = array[index],\n          othValue = other[index];\n\n      result = undefined;\n      if (customizer) {\n        result = isLoose\n          ? customizer(othValue, arrValue, index)\n          : customizer(arrValue, othValue, index);\n      }\n      if (result === undefined) {\n        if (isLoose) {\n          var othIndex = othLength;\n          while (othIndex--) {\n            othValue = other[othIndex];\n            result = (arrValue && arrValue === othValue) || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB);\n            if (result) {\n              break;\n            }\n          }\n        } else {\n          result = (arrValue && arrValue === othValue) || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB);\n        }\n      }\n    }\n    return !!result;\n  }\n\n  function equalByTag(object, other, tag) {\n    switch (tag) {\n      case boolTag:\n      case dateTag:\n        return +object == +other;\n\n      case errorTag:\n        return object.name == other.name && object.message == other.message;\n\n      case numberTag:\n        return (object != +object)\n          ? other != +other\n          : (object == 0 ? ((1 / object) == (1 / other)) : object == +other);\n\n      case regexpTag:\n      case stringTag:\n        return object == (other + '');\n    }\n    return false;\n  }\n\n  function equalObjects(object, other, equalFunc, customizer, isLoose, stackA, stackB) {\n    var objProps = keys(object),\n        objLength = objProps.length,\n        othProps = keys(other),\n        othLength = othProps.length;\n\n    if (objLength != othLength && !isLoose) {\n      return false;\n    }\n    var skipCtor = isLoose,\n        index = -1;\n\n    while (++index < objLength) {\n      var key = objProps[index],\n          result = isLoose ? key in other : hasOwnProperty.call(other, key);\n\n      if (result) {\n        var objValue = object[key],\n            othValue = other[key];\n\n        result = undefined;\n        if (customizer) {\n          result = isLoose\n            ? customizer(othValue, objValue, key)\n            : customizer(objValue, othValue, key);\n        }\n        if (result === undefined) {\n          result = (objValue && objValue === othValue) || equalFunc(objValue, othValue, customizer, isLoose, stackA, stackB);\n        }\n      }\n      if (!result) {\n        return false;\n      }\n      skipCtor || (skipCtor = key == 'constructor');\n    }\n    if (!skipCtor) {\n      var objCtor = object.constructor,\n          othCtor = other.constructor;\n\n      if (objCtor != othCtor &&\n          ('constructor' in object && 'constructor' in other) &&\n          !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n            typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  function getCallback(func, thisArg, argCount) {\n    var result = lodash.callback || callback;\n    result = result === callback ? baseCallback : result;\n    return argCount ? result(func, thisArg, argCount) : result;\n  }\n\n  function getIndexOf(collection, target, fromIndex) {\n    var result = lodash.indexOf || indexOf;\n    result = result === indexOf ? baseIndexOf : result;\n    return collection ? result(collection, target, fromIndex) : result;\n  }\n\n  var getLength = baseProperty('length');\n\n  var getSymbols = !getOwnPropertySymbols ? constant([]) : function(object) {\n    return getOwnPropertySymbols(toObject(object));\n  };\n\n  function initCloneArray(array) {\n    var length = array.length,\n        result = new array.constructor(length);\n\n    if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n      result.index = array.index;\n      result.input = array.input;\n    }\n    return result;\n  }\n\n  function initCloneObject(object) {\n    var Ctor = object.constructor;\n    if (!(typeof Ctor == 'function' && Ctor instanceof Ctor)) {\n      Ctor = Object;\n    }\n    return new Ctor;\n  }\n\n  function initCloneByTag(object, tag, isDeep) {\n    var Ctor = object.constructor;\n    switch (tag) {\n      case arrayBufferTag:\n        return bufferClone(object);\n\n      case boolTag:\n      case dateTag:\n        return new Ctor(+object);\n\n      case float32Tag: case float64Tag:\n      case int8Tag: case int16Tag: case int32Tag:\n      case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n        var buffer = object.buffer;\n        return new Ctor(isDeep ? bufferClone(buffer) : buffer, object.byteOffset, object.length);\n\n      case numberTag:\n      case stringTag:\n        return new Ctor(object);\n\n      case regexpTag:\n        var result = new Ctor(object.source, reFlags.exec(object));\n        result.lastIndex = object.lastIndex;\n    }\n    return result;\n  }\n\n  function isIndex(value, length) {\n    value = +value;\n    length = length == null ? MAX_SAFE_INTEGER : length;\n    return value > -1 && value % 1 == 0 && value < length;\n  }\n\n  function isIterateeCall(value, index, object) {\n    if (!isObject(object)) {\n      return false;\n    }\n    var type = typeof index;\n    if (type == 'number') {\n      var length = getLength(object),\n          prereq = isLength(length) && isIndex(index, length);\n    } else {\n      prereq = type == 'string' && index in object;\n    }\n    if (prereq) {\n      var other = object[index];\n      return value === value ? (value === other) : (other !== other);\n    }\n    return false;\n  }\n\n  function isKey(value, object) {\n    var type = typeof value;\n    if ((type == 'string' && reIsPlainProp.test(value)) || type == 'number') {\n      return true;\n    }\n    if (isArray(value)) {\n      return false;\n    }\n    var result = !reIsDeepProp.test(value);\n    return result || (object != null && value in toObject(object));\n  }\n\n  function isLength(value) {\n    return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n  }\n\n  function isStrictComparable(value) {\n    return value === value && (value === 0 ? ((1 / value) > 0) : !isObject(value));\n  }\n\n  function shimIsPlainObject(value) {\n    var Ctor,\n        support = lodash.support;\n\n    if (!(isObjectLike(value) && objToString.call(value) == objectTag) ||\n        (!hasOwnProperty.call(value, 'constructor') &&\n          (Ctor = value.constructor, typeof Ctor == 'function' && !(Ctor instanceof Ctor)))) {\n      return false;\n    }\n    var result;\n    baseForIn(value, function(subValue, key) {\n      result = key;\n    });\n    return result === undefined || hasOwnProperty.call(value, result);\n  }\n\n  function shimKeys(object) {\n    var props = keysIn(object),\n        propsLength = props.length,\n        length = propsLength && object.length,\n        support = lodash.support;\n\n    var allowIndexes = length && isLength(length) &&\n      (isArray(object) || (support.nonEnumArgs && isArguments(object)));\n\n    var index = -1,\n        result = [];\n\n    while (++index < propsLength) {\n      var key = props[index];\n      if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {\n        result.push(key);\n      }\n    }\n    return result;\n  }\n\n  function toObject(value) {\n    return isObject(value) ? value : Object(value);\n  }\n\n  function toPath(value) {\n    if (isArray(value)) {\n      return value;\n    }\n    var result = [];\n    baseToString(value).replace(rePropName, function(match, number, quote, string) {\n      result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));\n    });\n    return result;\n  }\n\n  var findLastIndex = createFindIndex(true);\n\n  function indexOf(array, value, fromIndex) {\n    var length = array ? array.length : 0;\n    if (!length) {\n      return -1;\n    }\n    if (typeof fromIndex == 'number') {\n      fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : fromIndex;\n    } else if (fromIndex) {\n      var index = binaryIndex(array, value),\n          other = array[index];\n\n      if (value === value ? (value === other) : (other !== other)) {\n        return index;\n      }\n      return -1;\n    }\n    return baseIndexOf(array, value, fromIndex || 0);\n  }\n\n  function last(array) {\n    var length = array ? array.length : 0;\n    return length ? array[length - 1] : undefined;\n  }\n\n  function slice(array, start, end) {\n    var length = array ? array.length : 0;\n    if (!length) {\n      return [];\n    }\n    if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n      start = 0;\n      end = length;\n    }\n    return baseSlice(array, start, end);\n  }\n\n  function unzip(array) {\n    var index = -1,\n        length = (array && array.length && arrayMax(arrayMap(array, getLength))) >>> 0,\n        result = Array(length);\n\n    while (++index < length) {\n      result[index] = arrayMap(array, baseProperty(index));\n    }\n    return result;\n  }\n\n  var zip = restParam(unzip);\n\n  var forEach = createForEach(arrayEach, baseEach);\n\n  function includes(collection, target, fromIndex, guard) {\n    var length = collection ? getLength(collection) : 0;\n    if (!isLength(length)) {\n      collection = values(collection);\n      length = collection.length;\n    }\n    if (!length) {\n      return false;\n    }\n    if (typeof fromIndex != 'number' || (guard && isIterateeCall(target, fromIndex, guard))) {\n      fromIndex = 0;\n    } else {\n      fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : (fromIndex || 0);\n    }\n    return (typeof collection == 'string' || !isArray(collection) && isString(collection))\n      ? (fromIndex < length && collection.indexOf(target, fromIndex) > -1)\n      : (getIndexOf(collection, target, fromIndex) > -1);\n  }\n\n  function reject(collection, predicate, thisArg) {\n    var func = isArray(collection) ? arrayFilter : baseFilter;\n    predicate = getCallback(predicate, thisArg, 3);\n    return func(collection, function(value, index, collection) {\n      return !predicate(value, index, collection);\n    });\n  }\n\n  function some(collection, predicate, thisArg) {\n    var func = isArray(collection) ? arraySome : baseSome;\n    if (thisArg && isIterateeCall(collection, predicate, thisArg)) {\n      predicate = null;\n    }\n    if (typeof predicate != 'function' || thisArg !== undefined) {\n      predicate = getCallback(predicate, thisArg, 3);\n    }\n    return func(collection, predicate);\n  }\n\n  function restParam(func, start) {\n    if (typeof func != 'function') {\n      throw new TypeError(FUNC_ERROR_TEXT);\n    }\n    start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0);\n    return function() {\n      var args = arguments,\n          index = -1,\n          length = nativeMax(args.length - start, 0),\n          rest = Array(length);\n\n      while (++index < length) {\n        rest[index] = args[start + index];\n      }\n      switch (start) {\n        case 0: return func.call(this, rest);\n        case 1: return func.call(this, args[0], rest);\n        case 2: return func.call(this, args[0], args[1], rest);\n      }\n      var otherArgs = Array(start + 1);\n      index = -1;\n      while (++index < start) {\n        otherArgs[index] = args[index];\n      }\n      otherArgs[start] = rest;\n      return func.apply(this, otherArgs);\n    };\n  }\n\n  function clone(value, isDeep, customizer, thisArg) {\n    if (isDeep && typeof isDeep != 'boolean' && isIterateeCall(value, isDeep, customizer)) {\n      isDeep = false;\n    }\n    else if (typeof isDeep == 'function') {\n      thisArg = customizer;\n      customizer = isDeep;\n      isDeep = false;\n    }\n    customizer = typeof customizer == 'function' && bindCallback(customizer, thisArg, 1);\n    return baseClone(value, isDeep, customizer);\n  }\n\n  function isArguments(value) {\n    var length = isObjectLike(value) ? value.length : undefined;\n    return isLength(length) && objToString.call(value) == argsTag;\n  }\n\n  var isArray = nativeIsArray || function(value) {\n    return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;\n  };\n\n  function isEmpty(value) {\n    if (value == null) {\n      return true;\n    }\n    var length = getLength(value);\n    if (isLength(length) && (isArray(value) || isString(value) || isArguments(value) ||\n        (isObjectLike(value) && isFunction(value.splice)))) {\n      return !length;\n    }\n    return !keys(value).length;\n  }\n\n  var isFunction = !(baseIsFunction(/x/) || (Uint8Array && !baseIsFunction(Uint8Array))) ? baseIsFunction : function(value) {\n    return objToString.call(value) == funcTag;\n  };\n\n  function isObject(value) {\n    var type = typeof value;\n    return type == 'function' || (!!value && type == 'object');\n  }\n\n  function isNative(value) {\n    if (value == null) {\n      return false;\n    }\n    if (objToString.call(value) == funcTag) {\n      return reIsNative.test(fnToString.call(value));\n    }\n    return isObjectLike(value) && reIsHostCtor.test(value);\n  }\n\n  function isNumber(value) {\n    return typeof value == 'number' || (isObjectLike(value) && objToString.call(value) == numberTag);\n  }\n\n  var isPlainObject = !getPrototypeOf ? shimIsPlainObject : function(value) {\n    if (!(value && objToString.call(value) == objectTag)) {\n      return false;\n    }\n    var valueOf = value.valueOf,\n        objProto = isNative(valueOf) && (objProto = getPrototypeOf(valueOf)) && getPrototypeOf(objProto);\n\n    return objProto\n      ? (value == objProto || getPrototypeOf(value) == objProto)\n      : shimIsPlainObject(value);\n  };\n\n  function isString(value) {\n    return typeof value == 'string' || (isObjectLike(value) && objToString.call(value) == stringTag);\n  }\n\n  function isTypedArray(value) {\n    return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objToString.call(value)];\n  }\n\n  function toPlainObject(value) {\n    return baseCopy(value, keysIn(value));\n  }\n\n  var assign = createAssigner(function(object, source, customizer) {\n    return customizer\n      ? assignWith(object, source, customizer)\n      : baseAssign(object, source);\n  });\n\n  function has(object, path) {\n    if (object == null) {\n      return false;\n    }\n    var result = hasOwnProperty.call(object, path);\n    if (!result && !isKey(path)) {\n      path = toPath(path);\n      object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));\n      path = last(path);\n      result = object != null && hasOwnProperty.call(object, path);\n    }\n    return result;\n  }\n\n  var keys = !nativeKeys ? shimKeys : function(object) {\n    if (object) {\n      var Ctor = object.constructor,\n          length = object.length;\n    }\n    if ((typeof Ctor == 'function' && Ctor.prototype === object) ||\n        (typeof object != 'function' && isLength(length))) {\n      return shimKeys(object);\n    }\n    return isObject(object) ? nativeKeys(object) : [];\n  };\n\n  function keysIn(object) {\n    if (object == null) {\n      return [];\n    }\n    if (!isObject(object)) {\n      object = Object(object);\n    }\n    var length = object.length;\n    length = (length && isLength(length) &&\n      (isArray(object) || (support.nonEnumArgs && isArguments(object))) && length) || 0;\n\n    var Ctor = object.constructor,\n        index = -1,\n        isProto = typeof Ctor == 'function' && Ctor.prototype === object,\n        result = Array(length),\n        skipIndexes = length > 0;\n\n    while (++index < length) {\n      result[index] = (index + '');\n    }\n    for (var key in object) {\n      if (!(skipIndexes && isIndex(key, length)) &&\n          !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n        result.push(key);\n      }\n    }\n    return result;\n  }\n\n  var merge = createAssigner(baseMerge);\n\n  function values(object) {\n    return baseValues(object, keys(object));\n  }\n\n  function escapeRegExp(string) {\n    string = baseToString(string);\n    return (string && reHasRegExpChars.test(string))\n      ? string.replace(reRegExpChars, '\\\\$&')\n      : string;\n  }\n\n  function callback(func, thisArg, guard) {\n    if (guard && isIterateeCall(func, thisArg, guard)) {\n      thisArg = null;\n    }\n    return baseCallback(func, thisArg);\n  }\n\n  function constant(value) {\n    return function() {\n      return value;\n    };\n  }\n\n  function identity(value) {\n    return value;\n  }\n\n  function property(path) {\n    return isKey(path) ? baseProperty(path) : basePropertyDeep(path);\n  }\n\n  // Add functions that return wrapped values when chaining.\n  lodash.assign = assign;\n  lodash.callback = callback;\n  lodash.constant = constant;\n  lodash.forEach = forEach;\n  lodash.keys = keys;\n  lodash.keysIn = keysIn;\n  lodash.merge = merge;\n  lodash.property = property;\n  lodash.reject = reject;\n  lodash.restParam = restParam;\n  lodash.slice = slice;\n  lodash.toPlainObject = toPlainObject;\n  lodash.unzip = unzip;\n  lodash.values = values;\n  lodash.zip = zip;\n\n  lodash.each = forEach;\n  lodash.extend = assign;\n  lodash.iteratee = callback;\n\n  // Add functions that return unwrapped values when chaining.\n  lodash.clone = clone;\n  lodash.escapeRegExp = escapeRegExp;\n  lodash.findLastIndex = findLastIndex;\n  lodash.has = has;\n  lodash.identity = identity;\n  lodash.includes = includes;\n  lodash.indexOf = indexOf;\n  lodash.isArguments = isArguments;\n  lodash.isArray = isArray;\n  lodash.isEmpty = isEmpty;\n  lodash.isFunction = isFunction;\n  lodash.isNative = isNative;\n  lodash.isNumber = isNumber;\n  lodash.isObject = isObject;\n  lodash.isPlainObject = isPlainObject;\n  lodash.isString = isString;\n  lodash.isTypedArray = isTypedArray;\n  lodash.last = last;\n  lodash.some = some;\n\n  lodash.any = some;\n  lodash.contains = includes;\n  lodash.include = includes;\n\n  lodash.VERSION = VERSION;\n\n  // Some AMD build optimizers like r.js check for condition patterns like the following:\n  if (freeExports && freeModule) {\n    if (moduleExports) {\n      (freeModule.exports = lodash)._ = lodash;\n    }\n    else {\n      freeExports._ = lodash;\n    }\n  }\n  else {\n    root._ = lodash;\n  }\n}.call(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],\"/node_modules/jshint/src/jshint.js\":[function(_dereq_,module,exports){\n/*!\n * JSHint, by JSHint Community.\n *\n * This file (and this file only) is licensed under the same slightly modified\n * MIT license that JSLint is. It stops evil-doers everywhere:\n *\n *   Copyright (c) 2002 Douglas Crockford  (www.JSLint.com)\n *\n *   Permission is hereby granted, free of charge, to any person obtaining\n *   a copy of this software and associated documentation files (the \"Software\"),\n *   to deal in the Software without restriction, including without limitation\n *   the rights to use, copy, modify, merge, publish, distribute, sublicense,\n *   and/or sell copies of the Software, and to permit persons to whom\n *   the Software is furnished to do so, subject to the following conditions:\n *\n *   The above copyright notice and this permission notice shall be included\n *   in all copies or substantial portions of the Software.\n *\n *   The Software shall be used for Good, not Evil.\n *\n *   THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n *   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n *   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n *   AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n *   LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n *   FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n *   DEALINGS IN THE SOFTWARE.\n *\n */\n\n/*jshint quotmark:double */\n/*global console:true */\n/*exported console */\n\nvar _            = _dereq_(\"../lodash\");\nvar events       = _dereq_(\"events\");\nvar vars         = _dereq_(\"./vars.js\");\nvar messages     = _dereq_(\"./messages.js\");\nvar Lexer        = _dereq_(\"./lex.js\").Lexer;\nvar reg          = _dereq_(\"./reg.js\");\nvar state        = _dereq_(\"./state.js\").state;\nvar style        = _dereq_(\"./style.js\");\nvar options      = _dereq_(\"./options.js\");\nvar scopeManager = _dereq_(\"./scope-manager.js\");\n\n// We build the application inside a function so that we produce only a singleton\n// variable. That function will be invoked immediately, and its return value is\n// the JSHINT function itself.\n\nvar JSHINT = (function() {\n  \"use strict\";\n\n  var api, // Extension API\n\n    // These are operators that should not be used with the ! operator.\n    bang = {\n      \"<\"  : true,\n      \"<=\" : true,\n      \"==\" : true,\n      \"===\": true,\n      \"!==\": true,\n      \"!=\" : true,\n      \">\"  : true,\n      \">=\" : true,\n      \"+\"  : true,\n      \"-\"  : true,\n      \"*\"  : true,\n      \"/\"  : true,\n      \"%\"  : true\n    },\n\n    declared, // Globals that were declared using /*global ... */ syntax.\n\n    functionicity = [\n      \"closure\", \"exception\", \"global\", \"label\",\n      \"outer\", \"unused\", \"var\"\n    ],\n\n    functions, // All of the functions\n\n    inblock,\n    indent,\n    lookahead,\n    lex,\n    member,\n    membersOnly,\n    predefined,    // Global variables defined by option\n\n    stack,\n    urls,\n\n    extraModules = [],\n    emitter = new events.EventEmitter();\n\n  function checkOption(name, t) {\n    name = name.trim();\n\n    if (/^[+-]W\\d{3}$/g.test(name)) {\n      return true;\n    }\n\n    if (options.validNames.indexOf(name) === -1) {\n      if (t.type !== \"jslint\" && !_.has(options.removed, name)) {\n        error(\"E001\", t, name);\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  function isString(obj) {\n    return Object.prototype.toString.call(obj) === \"[object String]\";\n  }\n\n  function isIdentifier(tkn, value) {\n    if (!tkn)\n      return false;\n\n    if (!tkn.identifier || tkn.value !== value)\n      return false;\n\n    return true;\n  }\n\n  function isReserved(token) {\n    if (!token.reserved) {\n      return false;\n    }\n    var meta = token.meta;\n\n    if (meta && meta.isFutureReservedWord && state.inES5()) {\n      // ES3 FutureReservedWord in an ES5 environment.\n      if (!meta.es5) {\n        return false;\n      }\n\n      // Some ES5 FutureReservedWord identifiers are active only\n      // within a strict mode environment.\n      if (meta.strictOnly) {\n        if (!state.option.strict && !state.isStrict()) {\n          return false;\n        }\n      }\n\n      if (token.isProperty) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  function supplant(str, data) {\n    return str.replace(/\\{([^{}]*)\\}/g, function(a, b) {\n      var r = data[b];\n      return typeof r === \"string\" || typeof r === \"number\" ? r : a;\n    });\n  }\n\n  function combine(dest, src) {\n    Object.keys(src).forEach(function(name) {\n      if (_.has(JSHINT.blacklist, name)) return;\n      dest[name] = src[name];\n    });\n  }\n\n  function processenforceall() {\n    if (state.option.enforceall) {\n      for (var enforceopt in options.bool.enforcing) {\n        if (state.option[enforceopt] === undefined &&\n            !options.noenforceall[enforceopt]) {\n          state.option[enforceopt] = true;\n        }\n      }\n      for (var relaxopt in options.bool.relaxing) {\n        if (state.option[relaxopt] === undefined) {\n          state.option[relaxopt] = false;\n        }\n      }\n    }\n  }\n\n  function assume() {\n    processenforceall();\n\n    /**\n     * TODO: Remove in JSHint 3\n     */\n    if (!state.option.esversion && !state.option.moz) {\n      if (state.option.es3) {\n        state.option.esversion = 3;\n      } else if (state.option.esnext) {\n        state.option.esversion = 6;\n      } else {\n        state.option.esversion = 5;\n      }\n    }\n\n    if (state.inES5()) {\n      combine(predefined, vars.ecmaIdentifiers[5]);\n    }\n\n    if (state.inES6()) {\n      combine(predefined, vars.ecmaIdentifiers[6]);\n    }\n\n    if (state.option.module) {\n      if (state.option.strict === true) {\n        state.option.strict = \"global\";\n      }\n      /**\n       * TODO: Extend this restriction to *all* ES6-specific options.\n       */\n      if (!state.inES6()) {\n        warning(\"W134\", state.tokens.next, \"module\", 6);\n      }\n    }\n\n    if (state.option.couch) {\n      combine(predefined, vars.couch);\n    }\n\n    if (state.option.qunit) {\n      combine(predefined, vars.qunit);\n    }\n\n    if (state.option.rhino) {\n      combine(predefined, vars.rhino);\n    }\n\n    if (state.option.shelljs) {\n      combine(predefined, vars.shelljs);\n      combine(predefined, vars.node);\n    }\n    if (state.option.typed) {\n      combine(predefined, vars.typed);\n    }\n\n    if (state.option.phantom) {\n      combine(predefined, vars.phantom);\n      if (state.option.strict === true) {\n        state.option.strict = \"global\";\n      }\n    }\n\n    if (state.option.prototypejs) {\n      combine(predefined, vars.prototypejs);\n    }\n\n    if (state.option.node) {\n      combine(predefined, vars.node);\n      combine(predefined, vars.typed);\n      if (state.option.strict === true) {\n        state.option.strict = \"global\";\n      }\n    }\n\n    if (state.option.devel) {\n      combine(predefined, vars.devel);\n    }\n\n    if (state.option.dojo) {\n      combine(predefined, vars.dojo);\n    }\n\n    if (state.option.browser) {\n      combine(predefined, vars.browser);\n      combine(predefined, vars.typed);\n    }\n\n    if (state.option.browserify) {\n      combine(predefined, vars.browser);\n      combine(predefined, vars.typed);\n      combine(predefined, vars.browserify);\n      if (state.option.strict === true) {\n        state.option.strict = \"global\";\n      }\n    }\n\n    if (state.option.nonstandard) {\n      combine(predefined, vars.nonstandard);\n    }\n\n    if (state.option.jasmine) {\n      combine(predefined, vars.jasmine);\n    }\n\n    if (state.option.jquery) {\n      combine(predefined, vars.jquery);\n    }\n\n    if (state.option.mootools) {\n      combine(predefined, vars.mootools);\n    }\n\n    if (state.option.worker) {\n      combine(predefined, vars.worker);\n    }\n\n    if (state.option.wsh) {\n      combine(predefined, vars.wsh);\n    }\n\n    if (state.option.globalstrict && state.option.strict !== false) {\n      state.option.strict = \"global\";\n    }\n\n    if (state.option.yui) {\n      combine(predefined, vars.yui);\n    }\n\n    if (state.option.mocha) {\n      combine(predefined, vars.mocha);\n    }\n  }\n\n  // Produce an error warning.\n  function quit(code, line, chr) {\n    var percentage = Math.floor((line / state.lines.length) * 100);\n    var message = messages.errors[code].desc;\n\n    throw {\n      name: \"JSHintError\",\n      line: line,\n      character: chr,\n      message: message + \" (\" + percentage + \"% scanned).\",\n      raw: message,\n      code: code\n    };\n  }\n\n  function removeIgnoredMessages() {\n    var ignored = state.ignoredLines;\n\n    if (_.isEmpty(ignored)) return;\n    JSHINT.errors = _.reject(JSHINT.errors, function(err) { return ignored[err.line] });\n  }\n\n  function warning(code, t, a, b, c, d) {\n    var ch, l, w, msg;\n\n    if (/^W\\d{3}$/.test(code)) {\n      if (state.ignored[code])\n        return;\n\n      msg = messages.warnings[code];\n    } else if (/E\\d{3}/.test(code)) {\n      msg = messages.errors[code];\n    } else if (/I\\d{3}/.test(code)) {\n      msg = messages.info[code];\n    }\n\n    t = t || state.tokens.next || {};\n    if (t.id === \"(end)\") {  // `~\n      t = state.tokens.curr;\n    }\n\n    l = t.line || 0;\n    ch = t.from || 0;\n\n    w = {\n      id: \"(error)\",\n      raw: msg.desc,\n      code: msg.code,\n      evidence: state.lines[l - 1] || \"\",\n      line: l,\n      character: ch,\n      scope: JSHINT.scope,\n      a: a,\n      b: b,\n      c: c,\n      d: d\n    };\n\n    w.reason = supplant(msg.desc, w);\n    JSHINT.errors.push(w);\n\n    removeIgnoredMessages();\n\n    if (JSHINT.errors.length >= state.option.maxerr)\n      quit(\"E043\", l, ch);\n\n    return w;\n  }\n\n  function warningAt(m, l, ch, a, b, c, d) {\n    return warning(m, {\n      line: l,\n      from: ch\n    }, a, b, c, d);\n  }\n\n  function error(m, t, a, b, c, d) {\n    warning(m, t, a, b, c, d);\n  }\n\n  function errorAt(m, l, ch, a, b, c, d) {\n    return error(m, {\n      line: l,\n      from: ch\n    }, a, b, c, d);\n  }\n\n  // Tracking of \"internal\" scripts, like eval containing a static string\n  function addInternalSrc(elem, src) {\n    var i;\n    i = {\n      id: \"(internal)\",\n      elem: elem,\n      value: src\n    };\n    JSHINT.internals.push(i);\n    return i;\n  }\n\n  function doOption() {\n    var nt = state.tokens.next;\n    var body = nt.body.match(/(-\\s+)?[^\\s,:]+(?:\\s*:\\s*(-\\s+)?[^\\s,]+)?/g) || [];\n\n    var predef = {};\n    if (nt.type === \"globals\") {\n      body.forEach(function(g, idx) {\n        g = g.split(\":\");\n        var key = (g[0] || \"\").trim();\n        var val = (g[1] || \"\").trim();\n\n        if (key === \"-\" || !key.length) {\n          // Ignore trailing comma\n          if (idx > 0 && idx === body.length - 1) {\n            return;\n          }\n          error(\"E002\", nt);\n          return;\n        }\n\n        if (key.charAt(0) === \"-\") {\n          key = key.slice(1);\n          val = false;\n\n          JSHINT.blacklist[key] = key;\n          delete predefined[key];\n        } else {\n          predef[key] = (val === \"true\");\n        }\n      });\n\n      combine(predefined, predef);\n\n      for (var key in predef) {\n        if (_.has(predef, key)) {\n          declared[key] = nt;\n        }\n      }\n    }\n\n    if (nt.type === \"exported\") {\n      body.forEach(function(e, idx) {\n        if (!e.length) {\n          // Ignore trailing comma\n          if (idx > 0 && idx === body.length - 1) {\n            return;\n          }\n          error(\"E002\", nt);\n          return;\n        }\n\n        state.funct[\"(scope)\"].addExported(e);\n      });\n    }\n\n    if (nt.type === \"members\") {\n      membersOnly = membersOnly || {};\n\n      body.forEach(function(m) {\n        var ch1 = m.charAt(0);\n        var ch2 = m.charAt(m.length - 1);\n\n        if (ch1 === ch2 && (ch1 === \"\\\"\" || ch1 === \"'\")) {\n          m = m\n            .substr(1, m.length - 2)\n            .replace(\"\\\\\\\"\", \"\\\"\");\n        }\n\n        membersOnly[m] = false;\n      });\n    }\n\n    var numvals = [\n      \"maxstatements\",\n      \"maxparams\",\n      \"maxdepth\",\n      \"maxcomplexity\",\n      \"maxerr\",\n      \"maxlen\",\n      \"indent\"\n    ];\n\n    if (nt.type === \"jshint\" || nt.type === \"jslint\") {\n      body.forEach(function(g) {\n        g = g.split(\":\");\n        var key = (g[0] || \"\").trim();\n        var val = (g[1] || \"\").trim();\n\n        if (!checkOption(key, nt)) {\n          return;\n        }\n\n        if (numvals.indexOf(key) >= 0) {\n          // GH988 - numeric options can be disabled by setting them to `false`\n          if (val !== \"false\") {\n            val = +val;\n\n            if (typeof val !== \"number\" || !isFinite(val) || val <= 0 || Math.floor(val) !== val) {\n              error(\"E032\", nt, g[1].trim());\n              return;\n            }\n\n            state.option[key] = val;\n          } else {\n            state.option[key] = key === \"indent\" ? 4 : false;\n          }\n\n          return;\n        }\n\n        if (key === \"validthis\") {\n          // `validthis` is valid only within a function scope.\n\n          if (state.funct[\"(global)\"])\n            return void error(\"E009\");\n\n          if (val !== \"true\" && val !== \"false\")\n            return void error(\"E002\", nt);\n\n          state.option.validthis = (val === \"true\");\n          return;\n        }\n\n        if (key === \"quotmark\") {\n          switch (val) {\n          case \"true\":\n          case \"false\":\n            state.option.quotmark = (val === \"true\");\n            break;\n          case \"double\":\n          case \"single\":\n            state.option.quotmark = val;\n            break;\n          default:\n            error(\"E002\", nt);\n          }\n          return;\n        }\n\n        if (key === \"shadow\") {\n          switch (val) {\n          case \"true\":\n            state.option.shadow = true;\n            break;\n          case \"outer\":\n            state.option.shadow = \"outer\";\n            break;\n          case \"false\":\n          case \"inner\":\n            state.option.shadow = \"inner\";\n            break;\n          default:\n            error(\"E002\", nt);\n          }\n          return;\n        }\n\n        if (key === \"unused\") {\n          switch (val) {\n          case \"true\":\n            state.option.unused = true;\n            break;\n          case \"false\":\n            state.option.unused = false;\n            break;\n          case \"vars\":\n          case \"strict\":\n            state.option.unused = val;\n            break;\n          default:\n            error(\"E002\", nt);\n          }\n          return;\n        }\n\n        if (key === \"latedef\") {\n          switch (val) {\n          case \"true\":\n            state.option.latedef = true;\n            break;\n          case \"false\":\n            state.option.latedef = false;\n            break;\n          case \"nofunc\":\n            state.option.latedef = \"nofunc\";\n            break;\n          default:\n            error(\"E002\", nt);\n          }\n          return;\n        }\n\n        if (key === \"ignore\") {\n          switch (val) {\n          case \"line\":\n            state.ignoredLines[nt.line] = true;\n            removeIgnoredMessages();\n            break;\n          default:\n            error(\"E002\", nt);\n          }\n          return;\n        }\n\n        if (key === \"strict\") {\n          switch (val) {\n          case \"true\":\n            state.option.strict = true;\n            break;\n          case \"false\":\n            state.option.strict = false;\n            break;\n          case \"func\":\n          case \"global\":\n          case \"implied\":\n            state.option.strict = val;\n            break;\n          default:\n            error(\"E002\", nt);\n          }\n          return;\n        }\n\n        if (key === \"module\") {\n          /**\n           * TODO: Extend this restriction to *all* \"environmental\" options.\n           */\n          if (!hasParsedCode(state.funct)) {\n            error(\"E055\", state.tokens.next, \"module\");\n          }\n        }\n\n        /**\n         * TODO: Remove in JSHint 3\n         */\n        var esversions = {\n          es3   : 3,\n          es5   : 5,\n          esnext: 6\n        };\n        if (_.has(esversions, key)) {\n          switch (val) {\n          case \"true\":\n            state.option.moz = false;\n            state.option.esversion = esversions[key];\n            break;\n          case \"false\":\n            if (!state.option.moz) {\n              state.option.esversion = 5;\n            }\n            break;\n          default:\n            error(\"E002\", nt);\n          }\n          return;\n        }\n\n        if (key === \"esversion\") {\n          switch (val) {\n          case \"5\":\n            if (state.inES5(true)) {\n              warning(\"I003\");\n            }\n            /* falls through */\n          case \"3\":\n          case \"6\":\n            state.option.moz = false;\n            state.option.esversion = +val;\n            break;\n          case \"2015\":\n            state.option.moz = false;\n            state.option.esversion = 6;\n            break;\n          default:\n            error(\"E002\", nt);\n          }\n          if (!hasParsedCode(state.funct)) {\n            error(\"E055\", state.tokens.next, \"esversion\");\n          }\n          return;\n        }\n\n        var match = /^([+-])(W\\d{3})$/g.exec(key);\n        if (match) {\n          // ignore for -W..., unignore for +W...\n          state.ignored[match[2]] = (match[1] === \"-\");\n          return;\n        }\n\n        var tn;\n        if (val === \"true\" || val === \"false\") {\n          if (nt.type === \"jslint\") {\n            tn = options.renamed[key] || key;\n            state.option[tn] = (val === \"true\");\n\n            if (options.inverted[tn] !== undefined) {\n              state.option[tn] = !state.option[tn];\n            }\n          } else {\n            state.option[key] = (val === \"true\");\n          }\n\n          if (key === \"newcap\") {\n            state.option[\"(explicitNewcap)\"] = true;\n          }\n          return;\n        }\n\n        error(\"E002\", nt);\n      });\n\n      assume();\n    }\n  }\n\n  // We need a peek function. If it has an argument, it peeks that much farther\n  // ahead. It is used to distinguish\n  //     for ( var i in ...\n  // from\n  //     for ( var i = ...\n\n  function peek(p) {\n    var i = p || 0, j = lookahead.length, t;\n\n    if (i < j) {\n      return lookahead[i];\n    }\n\n    while (j <= i) {\n      t = lookahead[j];\n      if (!t) {\n        t = lookahead[j] = lex.token();\n      }\n      j += 1;\n    }\n\n    // Peeking past the end of the program should produce the \"(end)\" token.\n    if (!t && state.tokens.next.id === \"(end)\") {\n      return state.tokens.next;\n    }\n\n    return t;\n  }\n\n  function peekIgnoreEOL() {\n    var i = 0;\n    var t;\n    do {\n      t = peek(i++);\n    } while (t.id === \"(endline)\");\n    return t;\n  }\n\n  // Produce the next token. It looks for programming errors.\n\n  function advance(id, t) {\n\n    switch (state.tokens.curr.id) {\n    case \"(number)\":\n      if (state.tokens.next.id === \".\") {\n        warning(\"W005\", state.tokens.curr);\n      }\n      break;\n    case \"-\":\n      if (state.tokens.next.id === \"-\" || state.tokens.next.id === \"--\") {\n        warning(\"W006\");\n      }\n      break;\n    case \"+\":\n      if (state.tokens.next.id === \"+\" || state.tokens.next.id === \"++\") {\n        warning(\"W007\");\n      }\n      break;\n    }\n\n    if (id && state.tokens.next.id !== id) {\n      if (t) {\n        if (state.tokens.next.id === \"(end)\") {\n          error(\"E019\", t, t.id);\n        } else {\n          error(\"E020\", state.tokens.next, id, t.id, t.line, state.tokens.next.value);\n        }\n      } else if (state.tokens.next.type !== \"(identifier)\" || state.tokens.next.value !== id) {\n        warning(\"W116\", state.tokens.next, id, state.tokens.next.value);\n      }\n    }\n\n    state.tokens.prev = state.tokens.curr;\n    state.tokens.curr = state.tokens.next;\n    for (;;) {\n      state.tokens.next = lookahead.shift() || lex.token();\n\n      if (!state.tokens.next) { // No more tokens left, give up\n        quit(\"E041\", state.tokens.curr.line);\n      }\n\n      if (state.tokens.next.id === \"(end)\" || state.tokens.next.id === \"(error)\") {\n        return;\n      }\n\n      if (state.tokens.next.check) {\n        state.tokens.next.check();\n      }\n\n      if (state.tokens.next.isSpecial) {\n        if (state.tokens.next.type === \"falls through\") {\n          state.tokens.curr.caseFallsThrough = true;\n        } else {\n          doOption();\n        }\n      } else {\n        if (state.tokens.next.id !== \"(endline)\") {\n          break;\n        }\n      }\n    }\n  }\n\n  function isInfix(token) {\n    return token.infix || (!token.identifier && !token.template && !!token.led);\n  }\n\n  function isEndOfExpr() {\n    var curr = state.tokens.curr;\n    var next = state.tokens.next;\n    if (next.id === \";\" || next.id === \"}\" || next.id === \":\") {\n      return true;\n    }\n    if (isInfix(next) === isInfix(curr) || (curr.id === \"yield\" && state.inMoz())) {\n      return curr.line !== startLine(next);\n    }\n    return false;\n  }\n\n  function isBeginOfExpr(prev) {\n    return !prev.left && prev.arity !== \"unary\";\n  }\n\n  // This is the heart of JSHINT, the Pratt parser. In addition to parsing, it\n  // is looking for ad hoc lint patterns. We add .fud to Pratt's model, which is\n  // like .nud except that it is only used on the first token of a statement.\n  // Having .fud makes it much easier to define statement-oriented languages like\n  // JavaScript. I retained Pratt's nomenclature.\n\n  // .nud  Null denotation\n  // .fud  First null denotation\n  // .led  Left denotation\n  //  lbp  Left binding power\n  //  rbp  Right binding power\n\n  // They are elements of the parsing method called Top Down Operator Precedence.\n\n  function expression(rbp, initial) {\n    var left, isArray = false, isObject = false, isLetExpr = false;\n\n    state.nameStack.push();\n\n    // if current expression is a let expression\n    if (!initial && state.tokens.next.value === \"let\" && peek(0).value === \"(\") {\n      if (!state.inMoz()) {\n        warning(\"W118\", state.tokens.next, \"let expressions\");\n      }\n      isLetExpr = true;\n      // create a new block scope we use only for the current expression\n      state.funct[\"(scope)\"].stack();\n      advance(\"let\");\n      advance(\"(\");\n      state.tokens.prev.fud();\n      advance(\")\");\n    }\n\n    if (state.tokens.next.id === \"(end)\")\n      error(\"E006\", state.tokens.curr);\n\n    var isDangerous =\n      state.option.asi &&\n      state.tokens.prev.line !== startLine(state.tokens.curr) &&\n      _.contains([\"]\", \")\"], state.tokens.prev.id) &&\n      _.contains([\"[\", \"(\"], state.tokens.curr.id);\n\n    if (isDangerous)\n      warning(\"W014\", state.tokens.curr, state.tokens.curr.id);\n\n    advance();\n\n    if (initial) {\n      state.funct[\"(verb)\"] = state.tokens.curr.value;\n      state.tokens.curr.beginsStmt = true;\n    }\n\n    if (initial === true && state.tokens.curr.fud) {\n      left = state.tokens.curr.fud();\n    } else {\n      if (state.tokens.curr.nud) {\n        left = state.tokens.curr.nud();\n      } else {\n        error(\"E030\", state.tokens.curr, state.tokens.curr.id);\n      }\n\n      // TODO: use pratt mechanics rather than special casing template tokens\n      while ((rbp < state.tokens.next.lbp || state.tokens.next.type === \"(template)\") &&\n              !isEndOfExpr()) {\n        isArray = state.tokens.curr.value === \"Array\";\n        isObject = state.tokens.curr.value === \"Object\";\n\n        // #527, new Foo.Array(), Foo.Array(), new Foo.Object(), Foo.Object()\n        // Line breaks in IfStatement heads exist to satisfy the checkJSHint\n        // \"Line too long.\" error.\n        if (left && (left.value || (left.first && left.first.value))) {\n          // If the left.value is not \"new\", or the left.first.value is a \".\"\n          // then safely assume that this is not \"new Array()\" and possibly\n          // not \"new Object()\"...\n          if (left.value !== \"new\" ||\n            (left.first && left.first.value && left.first.value === \".\")) {\n            isArray = false;\n            // ...In the case of Object, if the left.value and state.tokens.curr.value\n            // are not equal, then safely assume that this not \"new Object()\"\n            if (left.value !== state.tokens.curr.value) {\n              isObject = false;\n            }\n          }\n        }\n\n        advance();\n\n        if (isArray && state.tokens.curr.id === \"(\" && state.tokens.next.id === \")\") {\n          warning(\"W009\", state.tokens.curr);\n        }\n\n        if (isObject && state.tokens.curr.id === \"(\" && state.tokens.next.id === \")\") {\n          warning(\"W010\", state.tokens.curr);\n        }\n\n        if (left && state.tokens.curr.led) {\n          left = state.tokens.curr.led(left);\n        } else {\n          error(\"E033\", state.tokens.curr, state.tokens.curr.id);\n        }\n      }\n    }\n    if (isLetExpr) {\n      state.funct[\"(scope)\"].unstack();\n    }\n\n    state.nameStack.pop();\n\n    return left;\n  }\n\n\n  // Functions for conformance of style.\n\n  function startLine(token) {\n    return token.startLine || token.line;\n  }\n\n  function nobreaknonadjacent(left, right) {\n    left = left || state.tokens.curr;\n    right = right || state.tokens.next;\n    if (!state.option.laxbreak && left.line !== startLine(right)) {\n      warning(\"W014\", right, right.value);\n    }\n  }\n\n  function nolinebreak(t) {\n    t = t || state.tokens.curr;\n    if (t.line !== startLine(state.tokens.next)) {\n      warning(\"E022\", t, t.value);\n    }\n  }\n\n  function nobreakcomma(left, right) {\n    if (left.line !== startLine(right)) {\n      if (!state.option.laxcomma) {\n        if (comma.first) {\n          warning(\"I001\");\n          comma.first = false;\n        }\n        warning(\"W014\", left, right.value);\n      }\n    }\n  }\n\n  function comma(opts) {\n    opts = opts || {};\n\n    if (!opts.peek) {\n      nobreakcomma(state.tokens.curr, state.tokens.next);\n      advance(\",\");\n    } else {\n      nobreakcomma(state.tokens.prev, state.tokens.curr);\n    }\n\n    if (state.tokens.next.identifier && !(opts.property && state.inES5())) {\n      // Keywords that cannot follow a comma operator.\n      switch (state.tokens.next.value) {\n      case \"break\":\n      case \"case\":\n      case \"catch\":\n      case \"continue\":\n      case \"default\":\n      case \"do\":\n      case \"else\":\n      case \"finally\":\n      case \"for\":\n      case \"if\":\n      case \"in\":\n      case \"instanceof\":\n      case \"return\":\n      case \"switch\":\n      case \"throw\":\n      case \"try\":\n      case \"var\":\n      case \"let\":\n      case \"while\":\n      case \"with\":\n        error(\"E024\", state.tokens.next, state.tokens.next.value);\n        return false;\n      }\n    }\n\n    if (state.tokens.next.type === \"(punctuator)\") {\n      switch (state.tokens.next.value) {\n      case \"}\":\n      case \"]\":\n      case \",\":\n        if (opts.allowTrailing) {\n          return true;\n        }\n\n        /* falls through */\n      case \")\":\n        error(\"E024\", state.tokens.next, state.tokens.next.value);\n        return false;\n      }\n    }\n    return true;\n  }\n\n  // Functional constructors for making the symbols that will be inherited by\n  // tokens.\n\n  function symbol(s, p) {\n    var x = state.syntax[s];\n    if (!x || typeof x !== \"object\") {\n      state.syntax[s] = x = {\n        id: s,\n        lbp: p,\n        value: s\n      };\n    }\n    return x;\n  }\n\n  function delim(s) {\n    var x = symbol(s, 0);\n    x.delim = true;\n    return x;\n  }\n\n  function stmt(s, f) {\n    var x = delim(s);\n    x.identifier = x.reserved = true;\n    x.fud = f;\n    return x;\n  }\n\n  function blockstmt(s, f) {\n    var x = stmt(s, f);\n    x.block = true;\n    return x;\n  }\n\n  function reserveName(x) {\n    var c = x.id.charAt(0);\n    if ((c >= \"a\" && c <= \"z\") || (c >= \"A\" && c <= \"Z\")) {\n      x.identifier = x.reserved = true;\n    }\n    return x;\n  }\n\n  function prefix(s, f) {\n    var x = symbol(s, 150);\n    reserveName(x);\n\n    x.nud = (typeof f === \"function\") ? f : function() {\n      this.arity = \"unary\";\n      this.right = expression(150);\n\n      if (this.id === \"++\" || this.id === \"--\") {\n        if (state.option.plusplus) {\n          warning(\"W016\", this, this.id);\n        } else if (this.right && (!this.right.identifier || isReserved(this.right)) &&\n            this.right.id !== \".\" && this.right.id !== \"[\") {\n          warning(\"W017\", this);\n        }\n\n        if (this.right && this.right.isMetaProperty) {\n          error(\"E031\", this);\n        // detect increment/decrement of a const\n        // in the case of a.b, right will be the \".\" punctuator\n        } else if (this.right && this.right.identifier) {\n          state.funct[\"(scope)\"].block.modify(this.right.value, this);\n        }\n      }\n\n      return this;\n    };\n\n    return x;\n  }\n\n  function type(s, f) {\n    var x = delim(s);\n    x.type = s;\n    x.nud = f;\n    return x;\n  }\n\n  function reserve(name, func) {\n    var x = type(name, func);\n    x.identifier = true;\n    x.reserved = true;\n    return x;\n  }\n\n  function FutureReservedWord(name, meta) {\n    var x = type(name, (meta && meta.nud) || function() {\n      return this;\n    });\n\n    meta = meta || {};\n    meta.isFutureReservedWord = true;\n\n    x.value = name;\n    x.identifier = true;\n    x.reserved = true;\n    x.meta = meta;\n\n    return x;\n  }\n\n  function reservevar(s, v) {\n    return reserve(s, function() {\n      if (typeof v === \"function\") {\n        v(this);\n      }\n      return this;\n    });\n  }\n\n  function infix(s, f, p, w) {\n    var x = symbol(s, p);\n    reserveName(x);\n    x.infix = true;\n    x.led = function(left) {\n      if (!w) {\n        nobreaknonadjacent(state.tokens.prev, state.tokens.curr);\n      }\n      if ((s === \"in\" || s === \"instanceof\") && left.id === \"!\") {\n        warning(\"W018\", left, \"!\");\n      }\n      if (typeof f === \"function\") {\n        return f(left, this);\n      } else {\n        this.left = left;\n        this.right = expression(p);\n        return this;\n      }\n    };\n    return x;\n  }\n\n  function application(s) {\n    var x = symbol(s, 42);\n\n    x.led = function(left) {\n      nobreaknonadjacent(state.tokens.prev, state.tokens.curr);\n\n      this.left = left;\n      this.right = doFunction({ type: \"arrow\", loneArg: left });\n      return this;\n    };\n    return x;\n  }\n\n  function relation(s, f) {\n    var x = symbol(s, 100);\n\n    x.led = function(left) {\n      nobreaknonadjacent(state.tokens.prev, state.tokens.curr);\n      this.left = left;\n      var right = this.right = expression(100);\n\n      if (isIdentifier(left, \"NaN\") || isIdentifier(right, \"NaN\")) {\n        warning(\"W019\", this);\n      } else if (f) {\n        f.apply(this, [left, right]);\n      }\n\n      if (!left || !right) {\n        quit(\"E041\", state.tokens.curr.line);\n      }\n\n      if (left.id === \"!\") {\n        warning(\"W018\", left, \"!\");\n      }\n\n      if (right.id === \"!\") {\n        warning(\"W018\", right, \"!\");\n      }\n\n      return this;\n    };\n    return x;\n  }\n\n  function isPoorRelation(node) {\n    return node &&\n        ((node.type === \"(number)\" && +node.value === 0) ||\n         (node.type === \"(string)\" && node.value === \"\") ||\n         (node.type === \"null\" && !state.option.eqnull) ||\n        node.type === \"true\" ||\n        node.type === \"false\" ||\n        node.type === \"undefined\");\n  }\n\n  var typeofValues = {};\n  typeofValues.legacy = [\n    // E4X extended the `typeof` operator to return \"xml\" for the XML and\n    // XMLList types it introduced.\n    // Ref: 11.3.2 The typeof Operator\n    // http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-357.pdf\n    \"xml\",\n    // IE<9 reports \"unknown\" when the `typeof` operator is applied to an\n    // object existing across a COM+ bridge. In lieu of official documentation\n    // (which does not exist), see:\n    // http://robertnyman.com/2005/12/21/what-is-typeof-unknown/\n    \"unknown\"\n  ];\n  typeofValues.es3 = [\n    \"undefined\", \"boolean\", \"number\", \"string\", \"function\", \"object\",\n  ];\n  typeofValues.es3 = typeofValues.es3.concat(typeofValues.legacy);\n  typeofValues.es6 = typeofValues.es3.concat(\"symbol\");\n\n  // Checks whether the 'typeof' operator is used with the correct\n  // value. For docs on 'typeof' see:\n  // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof\n  function isTypoTypeof(left, right, state) {\n    var values;\n\n    if (state.option.notypeof)\n      return false;\n\n    if (!left || !right)\n      return false;\n\n    values = state.inES6() ? typeofValues.es6 : typeofValues.es3;\n\n    if (right.type === \"(identifier)\" && right.value === \"typeof\" && left.type === \"(string)\")\n      return !_.contains(values, left.value);\n\n    return false;\n  }\n\n  function isGlobalEval(left, state) {\n    var isGlobal = false;\n\n    // permit methods to refer to an \"eval\" key in their own context\n    if (left.type === \"this\" && state.funct[\"(context)\"] === null) {\n      isGlobal = true;\n    }\n    // permit use of \"eval\" members of objects\n    else if (left.type === \"(identifier)\") {\n      if (state.option.node && left.value === \"global\") {\n        isGlobal = true;\n      }\n\n      else if (state.option.browser && (left.value === \"window\" || left.value === \"document\")) {\n        isGlobal = true;\n      }\n    }\n\n    return isGlobal;\n  }\n\n  function findNativePrototype(left) {\n    var natives = [\n      \"Array\", \"ArrayBuffer\", \"Boolean\", \"Collator\", \"DataView\", \"Date\",\n      \"DateTimeFormat\", \"Error\", \"EvalError\", \"Float32Array\", \"Float64Array\",\n      \"Function\", \"Infinity\", \"Intl\", \"Int16Array\", \"Int32Array\", \"Int8Array\",\n      \"Iterator\", \"Number\", \"NumberFormat\", \"Object\", \"RangeError\",\n      \"ReferenceError\", \"RegExp\", \"StopIteration\", \"String\", \"SyntaxError\",\n      \"TypeError\", \"Uint16Array\", \"Uint32Array\", \"Uint8Array\", \"Uint8ClampedArray\",\n      \"URIError\"\n    ];\n\n    function walkPrototype(obj) {\n      if (typeof obj !== \"object\") return;\n      return obj.right === \"prototype\" ? obj : walkPrototype(obj.left);\n    }\n\n    function walkNative(obj) {\n      while (!obj.identifier && typeof obj.left === \"object\")\n        obj = obj.left;\n\n      if (obj.identifier && natives.indexOf(obj.value) >= 0)\n        return obj.value;\n    }\n\n    var prototype = walkPrototype(left);\n    if (prototype) return walkNative(prototype);\n  }\n\n  /**\n   * Checks the left hand side of an assignment for issues, returns if ok\n   * @param {token} left - the left hand side of the assignment\n   * @param {token=} assignToken - the token for the assignment, used for reporting\n   * @param {object=} options - optional object\n   * @param {boolean} options.allowDestructuring - whether to allow destructuting binding\n   * @returns {boolean} Whether the left hand side is OK\n   */\n  function checkLeftSideAssign(left, assignToken, options) {\n\n    var allowDestructuring = options && options.allowDestructuring;\n\n    assignToken = assignToken || left;\n\n    if (state.option.freeze) {\n      var nativeObject = findNativePrototype(left);\n      if (nativeObject)\n        warning(\"W121\", left, nativeObject);\n    }\n\n    if (left.identifier && !left.isMetaProperty) {\n      // reassign also calls modify\n      // but we are specific in order to catch function re-assignment\n      // and globals re-assignment\n      state.funct[\"(scope)\"].block.reassign(left.value, left);\n    }\n\n    if (left.id === \".\") {\n      if (!left.left || left.left.value === \"arguments\" && !state.isStrict()) {\n        warning(\"E031\", assignToken);\n      }\n\n      state.nameStack.set(state.tokens.prev);\n      return true;\n    } else if (left.id === \"{\" || left.id === \"[\") {\n      if (allowDestructuring && state.tokens.curr.left.destructAssign) {\n        state.tokens.curr.left.destructAssign.forEach(function(t) {\n          if (t.id) {\n            state.funct[\"(scope)\"].block.modify(t.id, t.token);\n          }\n        });\n      } else {\n        if (left.id === \"{\" || !left.left) {\n          warning(\"E031\", assignToken);\n        } else if (left.left.value === \"arguments\" && !state.isStrict()) {\n          warning(\"E031\", assignToken);\n        }\n      }\n\n      if (left.id === \"[\") {\n        state.nameStack.set(left.right);\n      }\n\n      return true;\n    } else if (left.isMetaProperty) {\n      error(\"E031\", assignToken);\n      return true;\n    } else if (left.identifier && !isReserved(left)) {\n      if (state.funct[\"(scope)\"].labeltype(left.value) === \"exception\") {\n        warning(\"W022\", left);\n      }\n      state.nameStack.set(left);\n      return true;\n    }\n\n    if (left === state.syntax[\"function\"]) {\n      warning(\"W023\", state.tokens.curr);\n    }\n\n    return false;\n  }\n\n  function assignop(s, f, p) {\n    var x = infix(s, typeof f === \"function\" ? f : function(left, that) {\n      that.left = left;\n\n      if (left && checkLeftSideAssign(left, that, { allowDestructuring: true })) {\n        that.right = expression(10);\n        return that;\n      }\n\n      error(\"E031\", that);\n    }, p);\n\n    x.exps = true;\n    x.assign = true;\n    return x;\n  }\n\n\n  function bitwise(s, f, p) {\n    var x = symbol(s, p);\n    reserveName(x);\n    x.led = (typeof f === \"function\") ? f : function(left) {\n      if (state.option.bitwise) {\n        warning(\"W016\", this, this.id);\n      }\n      this.left = left;\n      this.right = expression(p);\n      return this;\n    };\n    return x;\n  }\n\n  function bitwiseassignop(s) {\n    return assignop(s, function(left, that) {\n      if (state.option.bitwise) {\n        warning(\"W016\", that, that.id);\n      }\n\n      if (left && checkLeftSideAssign(left, that)) {\n        that.right = expression(10);\n        return that;\n      }\n      error(\"E031\", that);\n    }, 20);\n  }\n\n  function suffix(s) {\n    var x = symbol(s, 150);\n\n    x.led = function(left) {\n      // this = suffix e.g. \"++\" punctuator\n      // left = symbol operated e.g. \"a\" identifier or \"a.b\" punctuator\n      if (state.option.plusplus) {\n        warning(\"W016\", this, this.id);\n      } else if ((!left.identifier || isReserved(left)) && left.id !== \".\" && left.id !== \"[\") {\n        warning(\"W017\", this);\n      }\n\n      if (left.isMetaProperty) {\n        error(\"E031\", this);\n      // detect increment/decrement of a const\n      // in the case of a.b, left will be the \".\" punctuator\n      } else if (left && left.identifier) {\n        state.funct[\"(scope)\"].block.modify(left.value, left);\n      }\n\n      this.left = left;\n      return this;\n    };\n    return x;\n  }\n\n  // fnparam means that this identifier is being defined as a function\n  // argument (see identifier())\n  // prop means that this identifier is that of an object property\n\n  function optionalidentifier(fnparam, prop, preserve) {\n    if (!state.tokens.next.identifier) {\n      return;\n    }\n\n    if (!preserve) {\n      advance();\n    }\n\n    var curr = state.tokens.curr;\n    var val  = state.tokens.curr.value;\n\n    if (!isReserved(curr)) {\n      return val;\n    }\n\n    if (prop) {\n      if (state.inES5()) {\n        return val;\n      }\n    }\n\n    if (fnparam && val === \"undefined\") {\n      return val;\n    }\n\n    warning(\"W024\", state.tokens.curr, state.tokens.curr.id);\n    return val;\n  }\n\n  // fnparam means that this identifier is being defined as a function\n  // argument\n  // prop means that this identifier is that of an object property\n  function identifier(fnparam, prop) {\n    var i = optionalidentifier(fnparam, prop, false);\n    if (i) {\n      return i;\n    }\n\n    // parameter destructuring with rest operator\n    if (state.tokens.next.value === \"...\") {\n      if (!state.inES6(true)) {\n        warning(\"W119\", state.tokens.next, \"spread/rest operator\", \"6\");\n      }\n      advance();\n\n      if (checkPunctuator(state.tokens.next, \"...\")) {\n        warning(\"E024\", state.tokens.next, \"...\");\n        while (checkPunctuator(state.tokens.next, \"...\")) {\n          advance();\n        }\n      }\n\n      if (!state.tokens.next.identifier) {\n        warning(\"E024\", state.tokens.curr, \"...\");\n        return;\n      }\n\n      return identifier(fnparam, prop);\n    } else {\n      error(\"E030\", state.tokens.next, state.tokens.next.value);\n\n      // The token should be consumed after a warning is issued so the parser\n      // can continue as though an identifier were found. The semicolon token\n      // should not be consumed in this way so that the parser interprets it as\n      // a statement delimeter;\n      if (state.tokens.next.id !== \";\") {\n        advance();\n      }\n    }\n  }\n\n\n  function reachable(controlToken) {\n    var i = 0, t;\n    if (state.tokens.next.id !== \";\" || controlToken.inBracelessBlock) {\n      return;\n    }\n    for (;;) {\n      do {\n        t = peek(i);\n        i += 1;\n      } while (t.id !== \"(end)\" && t.id === \"(comment)\");\n\n      if (t.reach) {\n        return;\n      }\n      if (t.id !== \"(endline)\") {\n        if (t.id === \"function\") {\n          if (state.option.latedef === true) {\n            warning(\"W026\", t);\n          }\n          break;\n        }\n\n        warning(\"W027\", t, t.value, controlToken.value);\n        break;\n      }\n    }\n  }\n\n  function parseFinalSemicolon() {\n    if (state.tokens.next.id !== \";\") {\n      // don't complain about unclosed templates / strings\n      if (state.tokens.next.isUnclosed) return advance();\n\n      var sameLine = startLine(state.tokens.next) === state.tokens.curr.line &&\n                     state.tokens.next.id !== \"(end)\";\n      var blockEnd = checkPunctuator(state.tokens.next, \"}\");\n\n      if (sameLine && !blockEnd) {\n        errorAt(\"E058\", state.tokens.curr.line, state.tokens.curr.character);\n      } else if (!state.option.asi) {\n        // If this is the last statement in a block that ends on\n        // the same line *and* option lastsemic is on, ignore the warning.\n        // Otherwise, complain about missing semicolon.\n        if ((blockEnd && !state.option.lastsemic) || !sameLine) {\n          warningAt(\"W033\", state.tokens.curr.line, state.tokens.curr.character);\n        }\n      }\n    } else {\n      advance(\";\");\n    }\n  }\n\n  function statement() {\n    var i = indent, r, t = state.tokens.next, hasOwnScope = false;\n\n    if (t.id === \";\") {\n      advance(\";\");\n      return;\n    }\n\n    // Is this a labelled statement?\n    var res = isReserved(t);\n\n    // We're being more tolerant here: if someone uses\n    // a FutureReservedWord as a label, we warn but proceed\n    // anyway.\n\n    if (res && t.meta && t.meta.isFutureReservedWord && peek().id === \":\") {\n      warning(\"W024\", t, t.id);\n      res = false;\n    }\n\n    if (t.identifier && !res && peek().id === \":\") {\n      advance();\n      advance(\":\");\n\n      hasOwnScope = true;\n      state.funct[\"(scope)\"].stack();\n      state.funct[\"(scope)\"].block.addBreakLabel(t.value, { token: state.tokens.curr });\n\n      if (!state.tokens.next.labelled && state.tokens.next.value !== \"{\") {\n        warning(\"W028\", state.tokens.next, t.value, state.tokens.next.value);\n      }\n\n      state.tokens.next.label = t.value;\n      t = state.tokens.next;\n    }\n\n    // Is it a lonely block?\n\n    if (t.id === \"{\") {\n      // Is it a switch case block?\n      //\n      //  switch (foo) {\n      //    case bar: { <= here.\n      //      ...\n      //    }\n      //  }\n      var iscase = (state.funct[\"(verb)\"] === \"case\" && state.tokens.curr.value === \":\");\n      block(true, true, false, false, iscase);\n      return;\n    }\n\n    // Parse the statement.\n\n    r = expression(0, true);\n\n    if (r && !(r.identifier && r.value === \"function\") &&\n        !(r.type === \"(punctuator)\" && r.left &&\n          r.left.identifier && r.left.value === \"function\")) {\n      if (!state.isStrict() &&\n          state.option.strict === \"global\") {\n        warning(\"E007\");\n      }\n    }\n\n    // Look for the final semicolon.\n\n    if (!t.block) {\n      if (!state.option.expr && (!r || !r.exps)) {\n        warning(\"W030\", state.tokens.curr);\n      } else if (state.option.nonew && r && r.left && r.id === \"(\" && r.left.id === \"new\") {\n        warning(\"W031\", t);\n      }\n      parseFinalSemicolon();\n    }\n\n\n    // Restore the indentation.\n\n    indent = i;\n    if (hasOwnScope) {\n      state.funct[\"(scope)\"].unstack();\n    }\n    return r;\n  }\n\n\n  function statements() {\n    var a = [], p;\n\n    while (!state.tokens.next.reach && state.tokens.next.id !== \"(end)\") {\n      if (state.tokens.next.id === \";\") {\n        p = peek();\n\n        if (!p || (p.id !== \"(\" && p.id !== \"[\")) {\n          warning(\"W032\");\n        }\n\n        advance(\";\");\n      } else {\n        a.push(statement());\n      }\n    }\n    return a;\n  }\n\n\n  /*\n   * read all directives\n   * recognizes a simple form of asi, but always\n   * warns, if it is used\n   */\n  function directives() {\n    var i, p, pn;\n\n    while (state.tokens.next.id === \"(string)\") {\n      p = peek(0);\n      if (p.id === \"(endline)\") {\n        i = 1;\n        do {\n          pn = peek(i++);\n        } while (pn.id === \"(endline)\");\n        if (pn.id === \";\") {\n          p = pn;\n        } else if (pn.value === \"[\" || pn.value === \".\") {\n          // string -> [ | . is a valid production\n          break;\n        } else if (!state.option.asi || pn.value === \"(\") {\n          // string -> ( is not a valid production\n          warning(\"W033\", state.tokens.next);\n        }\n      } else if (p.id === \".\" || p.id === \"[\") {\n        break;\n      } else if (p.id !== \";\") {\n        warning(\"W033\", p);\n      }\n\n      advance();\n      var directive = state.tokens.curr.value;\n      if (state.directive[directive] ||\n          (directive === \"use strict\" && state.option.strict === \"implied\")) {\n        warning(\"W034\", state.tokens.curr, directive);\n      }\n\n      // there's no directive negation, so always set to true\n      state.directive[directive] = true;\n\n      if (p.id === \";\") {\n        advance(\";\");\n      }\n    }\n\n    if (state.isStrict()) {\n      if (!state.option[\"(explicitNewcap)\"]) {\n        state.option.newcap = true;\n      }\n      state.option.undef = true;\n    }\n  }\n\n\n  /*\n   * Parses a single block. A block is a sequence of statements wrapped in\n   * braces.\n   *\n   * ordinary   - true for everything but function bodies and try blocks.\n   * stmt       - true if block can be a single statement (e.g. in if/for/while).\n   * isfunc     - true if block is a function body\n   * isfatarrow - true if its a body of a fat arrow function\n   * iscase      - true if block is a switch case block\n   */\n  function block(ordinary, stmt, isfunc, isfatarrow, iscase) {\n    var a,\n      b = inblock,\n      old_indent = indent,\n      m,\n      t,\n      line,\n      d;\n\n    inblock = ordinary;\n\n    t = state.tokens.next;\n\n    var metrics = state.funct[\"(metrics)\"];\n    metrics.nestedBlockDepth += 1;\n    metrics.verifyMaxNestedBlockDepthPerFunction();\n\n    if (state.tokens.next.id === \"{\") {\n      advance(\"{\");\n\n      // create a new block scope\n      state.funct[\"(scope)\"].stack();\n\n      line = state.tokens.curr.line;\n      if (state.tokens.next.id !== \"}\") {\n        indent += state.option.indent;\n        while (!ordinary && state.tokens.next.from > indent) {\n          indent += state.option.indent;\n        }\n\n        if (isfunc) {\n          m = {};\n          for (d in state.directive) {\n            if (_.has(state.directive, d)) {\n              m[d] = state.directive[d];\n            }\n          }\n          directives();\n\n          if (state.option.strict && state.funct[\"(context)\"][\"(global)\"]) {\n            if (!m[\"use strict\"] && !state.isStrict()) {\n              warning(\"E007\");\n            }\n          }\n        }\n\n        a = statements();\n\n        metrics.statementCount += a.length;\n\n        indent -= state.option.indent;\n      }\n\n      advance(\"}\", t);\n\n      if (isfunc) {\n        state.funct[\"(scope)\"].validateParams();\n        if (m) {\n          state.directive = m;\n        }\n      }\n\n      state.funct[\"(scope)\"].unstack();\n\n      indent = old_indent;\n    } else if (!ordinary) {\n      if (isfunc) {\n        state.funct[\"(scope)\"].stack();\n\n        m = {};\n        if (stmt && !isfatarrow && !state.inMoz()) {\n          error(\"W118\", state.tokens.curr, \"function closure expressions\");\n        }\n\n        if (!stmt) {\n          for (d in state.directive) {\n            if (_.has(state.directive, d)) {\n              m[d] = state.directive[d];\n            }\n          }\n        }\n        expression(10);\n\n        if (state.option.strict && state.funct[\"(context)\"][\"(global)\"]) {\n          if (!m[\"use strict\"] && !state.isStrict()) {\n            warning(\"E007\");\n          }\n        }\n\n        state.funct[\"(scope)\"].unstack();\n      } else {\n        error(\"E021\", state.tokens.next, \"{\", state.tokens.next.value);\n      }\n    } else {\n\n      // check to avoid let declaration not within a block\n      // though is fine inside for loop initializer section\n      state.funct[\"(noblockscopedvar)\"] = state.tokens.next.id !== \"for\";\n      state.funct[\"(scope)\"].stack();\n\n      if (!stmt || state.option.curly) {\n        warning(\"W116\", state.tokens.next, \"{\", state.tokens.next.value);\n      }\n\n      state.tokens.next.inBracelessBlock = true;\n      indent += state.option.indent;\n      // test indentation only if statement is in new line\n      a = [statement()];\n      indent -= state.option.indent;\n\n      state.funct[\"(scope)\"].unstack();\n      delete state.funct[\"(noblockscopedvar)\"];\n    }\n\n    // Don't clear and let it propagate out if it is \"break\", \"return\" or similar in switch case\n    switch (state.funct[\"(verb)\"]) {\n    case \"break\":\n    case \"continue\":\n    case \"return\":\n    case \"throw\":\n      if (iscase) {\n        break;\n      }\n\n      /* falls through */\n    default:\n      state.funct[\"(verb)\"] = null;\n    }\n\n    inblock = b;\n    if (ordinary && state.option.noempty && (!a || a.length === 0)) {\n      warning(\"W035\", state.tokens.prev);\n    }\n    metrics.nestedBlockDepth -= 1;\n    return a;\n  }\n\n\n  function countMember(m) {\n    if (membersOnly && typeof membersOnly[m] !== \"boolean\") {\n      warning(\"W036\", state.tokens.curr, m);\n    }\n    if (typeof member[m] === \"number\") {\n      member[m] += 1;\n    } else {\n      member[m] = 1;\n    }\n  }\n\n  // Build the syntax table by declaring the syntactic elements of the language.\n\n  type(\"(number)\", function() {\n    return this;\n  });\n\n  type(\"(string)\", function() {\n    return this;\n  });\n\n  state.syntax[\"(identifier)\"] = {\n    type: \"(identifier)\",\n    lbp: 0,\n    identifier: true,\n\n    nud: function() {\n      var v = this.value;\n\n      // If this identifier is the lone parameter to a shorthand \"fat arrow\"\n      // function definition, i.e.\n      //\n      //     x => x;\n      //\n      // ...it should not be considered as a variable in the current scope. It\n      // will be added to the scope of the new function when the next token is\n      // parsed, so it can be safely ignored for now.\n      if (state.tokens.next.id === \"=>\") {\n        return this;\n      }\n\n      if (!state.funct[\"(comparray)\"].check(v)) {\n        state.funct[\"(scope)\"].block.use(v, state.tokens.curr);\n      }\n      return this;\n    },\n\n    led: function() {\n      error(\"E033\", state.tokens.next, state.tokens.next.value);\n    }\n  };\n\n  var baseTemplateSyntax = {\n    lbp: 0,\n    identifier: false,\n    template: true,\n  };\n  state.syntax[\"(template)\"] = _.extend({\n    type: \"(template)\",\n    nud: doTemplateLiteral,\n    led: doTemplateLiteral,\n    noSubst: false\n  }, baseTemplateSyntax);\n\n  state.syntax[\"(template middle)\"] = _.extend({\n    type: \"(template middle)\",\n    middle: true,\n    noSubst: false\n  }, baseTemplateSyntax);\n\n  state.syntax[\"(template tail)\"] = _.extend({\n    type: \"(template tail)\",\n    tail: true,\n    noSubst: false\n  }, baseTemplateSyntax);\n\n  state.syntax[\"(no subst template)\"] = _.extend({\n    type: \"(template)\",\n    nud: doTemplateLiteral,\n    led: doTemplateLiteral,\n    noSubst: true,\n    tail: true // mark as tail, since it's always the last component\n  }, baseTemplateSyntax);\n\n  type(\"(regexp)\", function() {\n    return this;\n  });\n\n  // ECMAScript parser\n\n  delim(\"(endline)\");\n  delim(\"(begin)\");\n  delim(\"(end)\").reach = true;\n  delim(\"(error)\").reach = true;\n  delim(\"}\").reach = true;\n  delim(\")\");\n  delim(\"]\");\n  delim(\"\\\"\").reach = true;\n  delim(\"'\").reach = true;\n  delim(\";\");\n  delim(\":\").reach = true;\n  delim(\"#\");\n\n  reserve(\"else\");\n  reserve(\"case\").reach = true;\n  reserve(\"catch\");\n  reserve(\"default\").reach = true;\n  reserve(\"finally\");\n  reservevar(\"arguments\", function(x) {\n    if (state.isStrict() && state.funct[\"(global)\"]) {\n      warning(\"E008\", x);\n    }\n  });\n  reservevar(\"eval\");\n  reservevar(\"false\");\n  reservevar(\"Infinity\");\n  reservevar(\"null\");\n  reservevar(\"this\", function(x) {\n    if (state.isStrict() && !isMethod() &&\n        !state.option.validthis && ((state.funct[\"(statement)\"] &&\n        state.funct[\"(name)\"].charAt(0) > \"Z\") || state.funct[\"(global)\"])) {\n      warning(\"W040\", x);\n    }\n  });\n  reservevar(\"true\");\n  reservevar(\"undefined\");\n\n  assignop(\"=\", \"assign\", 20);\n  assignop(\"+=\", \"assignadd\", 20);\n  assignop(\"-=\", \"assignsub\", 20);\n  assignop(\"*=\", \"assignmult\", 20);\n  assignop(\"/=\", \"assigndiv\", 20).nud = function() {\n    error(\"E014\");\n  };\n  assignop(\"%=\", \"assignmod\", 20);\n\n  bitwiseassignop(\"&=\");\n  bitwiseassignop(\"|=\");\n  bitwiseassignop(\"^=\");\n  bitwiseassignop(\"<<=\");\n  bitwiseassignop(\">>=\");\n  bitwiseassignop(\">>>=\");\n  infix(\",\", function(left, that) {\n    var expr;\n    that.exprs = [left];\n\n    if (state.option.nocomma) {\n      warning(\"W127\");\n    }\n\n    if (!comma({ peek: true })) {\n      return that;\n    }\n    while (true) {\n      if (!(expr = expression(10))) {\n        break;\n      }\n      that.exprs.push(expr);\n      if (state.tokens.next.value !== \",\" || !comma()) {\n        break;\n      }\n    }\n    return that;\n  }, 10, true);\n\n  infix(\"?\", function(left, that) {\n    increaseComplexityCount();\n    that.left = left;\n    that.right = expression(10);\n    advance(\":\");\n    that[\"else\"] = expression(10);\n    return that;\n  }, 30);\n\n  var orPrecendence = 40;\n  infix(\"||\", function(left, that) {\n    increaseComplexityCount();\n    that.left = left;\n    that.right = expression(orPrecendence);\n    return that;\n  }, orPrecendence);\n  infix(\"&&\", \"and\", 50);\n  bitwise(\"|\", \"bitor\", 70);\n  bitwise(\"^\", \"bitxor\", 80);\n  bitwise(\"&\", \"bitand\", 90);\n  relation(\"==\", function(left, right) {\n    var eqnull = state.option.eqnull &&\n      ((left && left.value) === \"null\" || (right && right.value) === \"null\");\n\n    switch (true) {\n      case !eqnull && state.option.eqeqeq:\n        this.from = this.character;\n        warning(\"W116\", this, \"===\", \"==\");\n        break;\n      case isPoorRelation(left):\n        warning(\"W041\", this, \"===\", left.value);\n        break;\n      case isPoorRelation(right):\n        warning(\"W041\", this, \"===\", right.value);\n        break;\n      case isTypoTypeof(right, left, state):\n        warning(\"W122\", this, right.value);\n        break;\n      case isTypoTypeof(left, right, state):\n        warning(\"W122\", this, left.value);\n        break;\n    }\n\n    return this;\n  });\n  relation(\"===\", function(left, right) {\n    if (isTypoTypeof(right, left, state)) {\n      warning(\"W122\", this, right.value);\n    } else if (isTypoTypeof(left, right, state)) {\n      warning(\"W122\", this, left.value);\n    }\n    return this;\n  });\n  relation(\"!=\", function(left, right) {\n    var eqnull = state.option.eqnull &&\n        ((left && left.value) === \"null\" || (right && right.value) === \"null\");\n\n    if (!eqnull && state.option.eqeqeq) {\n      this.from = this.character;\n      warning(\"W116\", this, \"!==\", \"!=\");\n    } else if (isPoorRelation(left)) {\n      warning(\"W041\", this, \"!==\", left.value);\n    } else if (isPoorRelation(right)) {\n      warning(\"W041\", this, \"!==\", right.value);\n    } else if (isTypoTypeof(right, left, state)) {\n      warning(\"W122\", this, right.value);\n    } else if (isTypoTypeof(left, right, state)) {\n      warning(\"W122\", this, left.value);\n    }\n    return this;\n  });\n  relation(\"!==\", function(left, right) {\n    if (isTypoTypeof(right, left, state)) {\n      warning(\"W122\", this, right.value);\n    } else if (isTypoTypeof(left, right, state)) {\n      warning(\"W122\", this, left.value);\n    }\n    return this;\n  });\n  relation(\"<\");\n  relation(\">\");\n  relation(\"<=\");\n  relation(\">=\");\n  bitwise(\"<<\", \"shiftleft\", 120);\n  bitwise(\">>\", \"shiftright\", 120);\n  bitwise(\">>>\", \"shiftrightunsigned\", 120);\n  infix(\"in\", \"in\", 120);\n  infix(\"instanceof\", \"instanceof\", 120);\n  infix(\"+\", function(left, that) {\n    var right;\n    that.left = left;\n    that.right = right = expression(130);\n\n    if (left && right && left.id === \"(string)\" && right.id === \"(string)\") {\n      left.value += right.value;\n      left.character = right.character;\n      if (!state.option.scripturl && reg.javascriptURL.test(left.value)) {\n        warning(\"W050\", left);\n      }\n      return left;\n    }\n\n    return that;\n  }, 130);\n  prefix(\"+\", \"num\");\n  prefix(\"+++\", function() {\n    warning(\"W007\");\n    this.arity = \"unary\";\n    this.right = expression(150);\n    return this;\n  });\n  infix(\"+++\", function(left) {\n    warning(\"W007\");\n    this.left = left;\n    this.right = expression(130);\n    return this;\n  }, 130);\n  infix(\"-\", \"sub\", 130);\n  prefix(\"-\", \"neg\");\n  prefix(\"---\", function() {\n    warning(\"W006\");\n    this.arity = \"unary\";\n    this.right = expression(150);\n    return this;\n  });\n  infix(\"---\", function(left) {\n    warning(\"W006\");\n    this.left = left;\n    this.right = expression(130);\n    return this;\n  }, 130);\n  infix(\"*\", \"mult\", 140);\n  infix(\"/\", \"div\", 140);\n  infix(\"%\", \"mod\", 140);\n\n  suffix(\"++\");\n  prefix(\"++\", \"preinc\");\n  state.syntax[\"++\"].exps = true;\n\n  suffix(\"--\");\n  prefix(\"--\", \"predec\");\n  state.syntax[\"--\"].exps = true;\n  prefix(\"delete\", function() {\n    var p = expression(10);\n    if (!p) {\n      return this;\n    }\n\n    if (p.id !== \".\" && p.id !== \"[\") {\n      warning(\"W051\");\n    }\n    this.first = p;\n\n    // The `delete` operator accepts unresolvable references when not in strict\n    // mode, so the operand may be undefined.\n    if (p.identifier && !state.isStrict()) {\n      p.forgiveUndef = true;\n    }\n    return this;\n  }).exps = true;\n\n  prefix(\"~\", function() {\n    if (state.option.bitwise) {\n      warning(\"W016\", this, \"~\");\n    }\n    this.arity = \"unary\";\n    this.right = expression(150);\n    return this;\n  });\n\n  prefix(\"...\", function() {\n    if (!state.inES6(true)) {\n      warning(\"W119\", this, \"spread/rest operator\", \"6\");\n    }\n\n    // TODO: Allow all AssignmentExpression\n    // once parsing permits.\n    //\n    // How to handle eg. number, boolean when the built-in\n    // prototype of may have an @@iterator definition?\n    //\n    // Number.prototype[Symbol.iterator] = function * () {\n    //   yield this.valueOf();\n    // };\n    //\n    // var a = [ ...1 ];\n    // console.log(a); // [1];\n    //\n    // for (let n of [...10]) {\n    //    console.log(n);\n    // }\n    // // 10\n    //\n    //\n    // Boolean.prototype[Symbol.iterator] = function * () {\n    //   yield this.valueOf();\n    // };\n    //\n    // var a = [ ...true ];\n    // console.log(a); // [true];\n    //\n    // for (let n of [...false]) {\n    //    console.log(n);\n    // }\n    // // false\n    //\n    if (!state.tokens.next.identifier &&\n        state.tokens.next.type !== \"(string)\" &&\n          !checkPunctuators(state.tokens.next, [\"[\", \"(\"])) {\n\n      error(\"E030\", state.tokens.next, state.tokens.next.value);\n    }\n    expression(150);\n    return this;\n  });\n\n  prefix(\"!\", function() {\n    this.arity = \"unary\";\n    this.right = expression(150);\n\n    if (!this.right) { // '!' followed by nothing? Give up.\n      quit(\"E041\", this.line || 0);\n    }\n\n    if (bang[this.right.id] === true) {\n      warning(\"W018\", this, \"!\");\n    }\n    return this;\n  });\n\n  prefix(\"typeof\", (function() {\n    var p = expression(150);\n    this.first = this.right = p;\n\n    if (!p) { // 'typeof' followed by nothing? Give up.\n      quit(\"E041\", this.line || 0, this.character || 0);\n    }\n\n    // The `typeof` operator accepts unresolvable references, so the operand\n    // may be undefined.\n    if (p.identifier) {\n      p.forgiveUndef = true;\n    }\n    return this;\n  }));\n  prefix(\"new\", function() {\n    var mp = metaProperty(\"target\", function() {\n      if (!state.inES6(true)) {\n        warning(\"W119\", state.tokens.prev, \"new.target\", \"6\");\n      }\n      var inFunction, c = state.funct;\n      while (c) {\n        inFunction = !c[\"(global)\"];\n        if (!c[\"(arrow)\"]) { break; }\n        c = c[\"(context)\"];\n      }\n      if (!inFunction) {\n        warning(\"W136\", state.tokens.prev, \"new.target\");\n      }\n    });\n    if (mp) { return mp; }\n\n    var c = expression(155), i;\n    if (c && c.id !== \"function\") {\n      if (c.identifier) {\n        c[\"new\"] = true;\n        switch (c.value) {\n        case \"Number\":\n        case \"String\":\n        case \"Boolean\":\n        case \"Math\":\n        case \"JSON\":\n          warning(\"W053\", state.tokens.prev, c.value);\n          break;\n        case \"Symbol\":\n          if (state.inES6()) {\n            warning(\"W053\", state.tokens.prev, c.value);\n          }\n          break;\n        case \"Function\":\n          if (!state.option.evil) {\n            warning(\"W054\");\n          }\n          break;\n        case \"Date\":\n        case \"RegExp\":\n        case \"this\":\n          break;\n        default:\n          if (c.id !== \"function\") {\n            i = c.value.substr(0, 1);\n            if (state.option.newcap && (i < \"A\" || i > \"Z\") &&\n              !state.funct[\"(scope)\"].isPredefined(c.value)) {\n              warning(\"W055\", state.tokens.curr);\n            }\n          }\n        }\n      } else {\n        if (c.id !== \".\" && c.id !== \"[\" && c.id !== \"(\") {\n          warning(\"W056\", state.tokens.curr);\n        }\n      }\n    } else {\n      if (!state.option.supernew)\n        warning(\"W057\", this);\n    }\n    if (state.tokens.next.id !== \"(\" && !state.option.supernew) {\n      warning(\"W058\", state.tokens.curr, state.tokens.curr.value);\n    }\n    this.first = this.right = c;\n    return this;\n  });\n  state.syntax[\"new\"].exps = true;\n\n  prefix(\"void\").exps = true;\n\n  infix(\".\", function(left, that) {\n    var m = identifier(false, true);\n\n    if (typeof m === \"string\") {\n      countMember(m);\n    }\n\n    that.left = left;\n    that.right = m;\n\n    if (m && m === \"hasOwnProperty\" && state.tokens.next.value === \"=\") {\n      warning(\"W001\");\n    }\n\n    if (left && left.value === \"arguments\" && (m === \"callee\" || m === \"caller\")) {\n      if (state.option.noarg)\n        warning(\"W059\", left, m);\n      else if (state.isStrict())\n        error(\"E008\");\n    } else if (!state.option.evil && left && left.value === \"document\" &&\n        (m === \"write\" || m === \"writeln\")) {\n      warning(\"W060\", left);\n    }\n\n    if (!state.option.evil && (m === \"eval\" || m === \"execScript\")) {\n      if (isGlobalEval(left, state)) {\n        warning(\"W061\");\n      }\n    }\n\n    return that;\n  }, 160, true);\n\n  infix(\"(\", function(left, that) {\n    if (state.option.immed && left && !left.immed && left.id === \"function\") {\n      warning(\"W062\");\n    }\n\n    var n = 0;\n    var p = [];\n\n    if (left) {\n      if (left.type === \"(identifier)\") {\n        if (left.value.match(/^[A-Z]([A-Z0-9_$]*[a-z][A-Za-z0-9_$]*)?$/)) {\n          if (\"Array Number String Boolean Date Object Error Symbol\".indexOf(left.value) === -1) {\n            if (left.value === \"Math\") {\n              warning(\"W063\", left);\n            } else if (state.option.newcap) {\n              warning(\"W064\", left);\n            }\n          }\n        }\n      }\n    }\n\n    if (state.tokens.next.id !== \")\") {\n      for (;;) {\n        p[p.length] = expression(10);\n        n += 1;\n        if (state.tokens.next.id !== \",\") {\n          break;\n        }\n        comma();\n      }\n    }\n\n    advance(\")\");\n\n    if (typeof left === \"object\") {\n      if (!state.inES5() && left.value === \"parseInt\" && n === 1) {\n        warning(\"W065\", state.tokens.curr);\n      }\n      if (!state.option.evil) {\n        if (left.value === \"eval\" || left.value === \"Function\" ||\n            left.value === \"execScript\") {\n          warning(\"W061\", left);\n\n          if (p[0] && [0].id === \"(string)\") {\n            addInternalSrc(left, p[0].value);\n          }\n        } else if (p[0] && p[0].id === \"(string)\" &&\n             (left.value === \"setTimeout\" ||\n            left.value === \"setInterval\")) {\n          warning(\"W066\", left);\n          addInternalSrc(left, p[0].value);\n\n        // window.setTimeout/setInterval\n        } else if (p[0] && p[0].id === \"(string)\" &&\n             left.value === \".\" &&\n             left.left.value === \"window\" &&\n             (left.right === \"setTimeout\" ||\n            left.right === \"setInterval\")) {\n          warning(\"W066\", left);\n          addInternalSrc(left, p[0].value);\n        }\n      }\n      if (!left.identifier && left.id !== \".\" && left.id !== \"[\" && left.id !== \"=>\" &&\n          left.id !== \"(\" && left.id !== \"&&\" && left.id !== \"||\" && left.id !== \"?\" &&\n          !(state.inES6() && left[\"(name)\"])) {\n        warning(\"W067\", that);\n      }\n    }\n\n    that.left = left;\n    return that;\n  }, 155, true).exps = true;\n\n  prefix(\"(\", function() {\n    var pn = state.tokens.next, pn1, i = -1;\n    var ret, triggerFnExpr, first, last;\n    var parens = 1;\n    var opening = state.tokens.curr;\n    var preceeding = state.tokens.prev;\n    var isNecessary = !state.option.singleGroups;\n\n    do {\n      if (pn.value === \"(\") {\n        parens += 1;\n      } else if (pn.value === \")\") {\n        parens -= 1;\n      }\n\n      i += 1;\n      pn1 = pn;\n      pn = peek(i);\n    } while (!(parens === 0 && pn1.value === \")\") && pn.value !== \";\" && pn.type !== \"(end)\");\n\n    if (state.tokens.next.id === \"function\") {\n      triggerFnExpr = state.tokens.next.immed = true;\n    }\n\n    // If the balanced grouping operator is followed by a \"fat arrow\", the\n    // current token marks the beginning of a \"fat arrow\" function and parsing\n    // should proceed accordingly.\n    if (pn.value === \"=>\") {\n      return doFunction({ type: \"arrow\", parsedOpening: true });\n    }\n\n    var exprs = [];\n\n    if (state.tokens.next.id !== \")\") {\n      for (;;) {\n        exprs.push(expression(10));\n\n        if (state.tokens.next.id !== \",\") {\n          break;\n        }\n\n        if (state.option.nocomma) {\n          warning(\"W127\");\n        }\n\n        comma();\n      }\n    }\n\n    advance(\")\", this);\n    if (state.option.immed && exprs[0] && exprs[0].id === \"function\") {\n      if (state.tokens.next.id !== \"(\" &&\n        state.tokens.next.id !== \".\" && state.tokens.next.id !== \"[\") {\n        warning(\"W068\", this);\n      }\n    }\n\n    if (!exprs.length) {\n      return;\n    }\n    if (exprs.length > 1) {\n      ret = Object.create(state.syntax[\",\"]);\n      ret.exprs = exprs;\n\n      first = exprs[0];\n      last = exprs[exprs.length - 1];\n\n      if (!isNecessary) {\n        isNecessary = preceeding.assign || preceeding.delim;\n      }\n    } else {\n      ret = first = last = exprs[0];\n\n      if (!isNecessary) {\n        isNecessary =\n          // Used to distinguish from an ExpressionStatement which may not\n          // begin with the `{` and `function` tokens\n          (opening.beginsStmt && (ret.id === \"{\" || triggerFnExpr || isFunctor(ret))) ||\n          // Used to signal that a function expression is being supplied to\n          // some other operator.\n          (triggerFnExpr &&\n            // For parenthesis wrapping a function expression to be considered\n            // necessary, the grouping operator should be the left-hand-side of\n            // some other operator--either within the parenthesis or directly\n            // following them.\n            (!isEndOfExpr() || state.tokens.prev.id !== \"}\")) ||\n          // Used to demarcate an arrow function as the left-hand side of some\n          // operator.\n          (isFunctor(ret) && !isEndOfExpr()) ||\n          // Used as the return value of a single-statement arrow function\n          (ret.id === \"{\" && preceeding.id === \"=>\") ||\n          // Used to delineate an integer number literal from a dereferencing\n          // punctuator (otherwise interpreted as a decimal point)\n          (ret.type === \"(number)\" &&\n            checkPunctuator(pn, \".\") && /^\\d+$/.test(ret.value));\n      }\n    }\n\n    if (ret) {\n      // The operator may be necessary to override the default binding power of\n      // neighboring operators (whenever there is an operator in use within the\n      // first expression *or* the current group contains multiple expressions)\n      if (!isNecessary && (first.left || first.right || ret.exprs)) {\n        isNecessary =\n          (!isBeginOfExpr(preceeding) && first.lbp <= preceeding.lbp) ||\n          (!isEndOfExpr() && last.lbp < state.tokens.next.lbp);\n      }\n\n      if (!isNecessary) {\n        warning(\"W126\", opening);\n      }\n\n      ret.paren = true;\n    }\n\n    return ret;\n  });\n\n  application(\"=>\");\n\n  infix(\"[\", function(left, that) {\n    var e = expression(10), s;\n    if (e && e.type === \"(string)\") {\n      if (!state.option.evil && (e.value === \"eval\" || e.value === \"execScript\")) {\n        if (isGlobalEval(left, state)) {\n          warning(\"W061\");\n        }\n      }\n\n      countMember(e.value);\n      if (!state.option.sub && reg.identifier.test(e.value)) {\n        s = state.syntax[e.value];\n        if (!s || !isReserved(s)) {\n          warning(\"W069\", state.tokens.prev, e.value);\n        }\n      }\n    }\n    advance(\"]\", that);\n\n    if (e && e.value === \"hasOwnProperty\" && state.tokens.next.value === \"=\") {\n      warning(\"W001\");\n    }\n\n    that.left = left;\n    that.right = e;\n    return that;\n  }, 160, true);\n\n  function comprehensiveArrayExpression() {\n    var res = {};\n    res.exps = true;\n    state.funct[\"(comparray)\"].stack();\n\n    // Handle reversed for expressions, used in spidermonkey\n    var reversed = false;\n    if (state.tokens.next.value !== \"for\") {\n      reversed = true;\n      if (!state.inMoz()) {\n        warning(\"W116\", state.tokens.next, \"for\", state.tokens.next.value);\n      }\n      state.funct[\"(comparray)\"].setState(\"use\");\n      res.right = expression(10);\n    }\n\n    advance(\"for\");\n    if (state.tokens.next.value === \"each\") {\n      advance(\"each\");\n      if (!state.inMoz()) {\n        warning(\"W118\", state.tokens.curr, \"for each\");\n      }\n    }\n    advance(\"(\");\n    state.funct[\"(comparray)\"].setState(\"define\");\n    res.left = expression(130);\n    if (_.contains([\"in\", \"of\"], state.tokens.next.value)) {\n      advance();\n    } else {\n      error(\"E045\", state.tokens.curr);\n    }\n    state.funct[\"(comparray)\"].setState(\"generate\");\n    expression(10);\n\n    advance(\")\");\n    if (state.tokens.next.value === \"if\") {\n      advance(\"if\");\n      advance(\"(\");\n      state.funct[\"(comparray)\"].setState(\"filter\");\n      res.filter = expression(10);\n      advance(\")\");\n    }\n\n    if (!reversed) {\n      state.funct[\"(comparray)\"].setState(\"use\");\n      res.right = expression(10);\n    }\n\n    advance(\"]\");\n    state.funct[\"(comparray)\"].unstack();\n    return res;\n  }\n\n  prefix(\"[\", function() {\n    var blocktype = lookupBlockType();\n    if (blocktype.isCompArray) {\n      if (!state.option.esnext && !state.inMoz()) {\n        warning(\"W118\", state.tokens.curr, \"array comprehension\");\n      }\n      return comprehensiveArrayExpression();\n    } else if (blocktype.isDestAssign) {\n      this.destructAssign = destructuringPattern({ openingParsed: true, assignment: true });\n      return this;\n    }\n    var b = state.tokens.curr.line !== startLine(state.tokens.next);\n    this.first = [];\n    if (b) {\n      indent += state.option.indent;\n      if (state.tokens.next.from === indent + state.option.indent) {\n        indent += state.option.indent;\n      }\n    }\n    while (state.tokens.next.id !== \"(end)\") {\n      while (state.tokens.next.id === \",\") {\n        if (!state.option.elision) {\n          if (!state.inES5()) {\n            // Maintain compat with old options --- ES5 mode without\n            // elision=true will warn once per comma\n            warning(\"W070\");\n          } else {\n            warning(\"W128\");\n            do {\n              advance(\",\");\n            } while (state.tokens.next.id === \",\");\n            continue;\n          }\n        }\n        advance(\",\");\n      }\n\n      if (state.tokens.next.id === \"]\") {\n        break;\n      }\n\n      this.first.push(expression(10));\n      if (state.tokens.next.id === \",\") {\n        comma({ allowTrailing: true });\n        if (state.tokens.next.id === \"]\" && !state.inES5()) {\n          warning(\"W070\", state.tokens.curr);\n          break;\n        }\n      } else {\n        break;\n      }\n    }\n    if (b) {\n      indent -= state.option.indent;\n    }\n    advance(\"]\", this);\n    return this;\n  });\n\n\n  function isMethod() {\n    return state.funct[\"(statement)\"] && state.funct[\"(statement)\"].type === \"class\" ||\n           state.funct[\"(context)\"] && state.funct[\"(context)\"][\"(verb)\"] === \"class\";\n  }\n\n\n  function isPropertyName(token) {\n    return token.identifier || token.id === \"(string)\" || token.id === \"(number)\";\n  }\n\n\n  function propertyName(preserveOrToken) {\n    var id;\n    var preserve = true;\n    if (typeof preserveOrToken === \"object\") {\n      id = preserveOrToken;\n    } else {\n      preserve = preserveOrToken;\n      id = optionalidentifier(false, true, preserve);\n    }\n\n    if (!id) {\n      if (state.tokens.next.id === \"(string)\") {\n        id = state.tokens.next.value;\n        if (!preserve) {\n          advance();\n        }\n      } else if (state.tokens.next.id === \"(number)\") {\n        id = state.tokens.next.value.toString();\n        if (!preserve) {\n          advance();\n        }\n      }\n    } else if (typeof id === \"object\") {\n      if (id.id === \"(string)\" || id.id === \"(identifier)\") id = id.value;\n      else if (id.id === \"(number)\") id = id.value.toString();\n    }\n\n    if (id === \"hasOwnProperty\") {\n      warning(\"W001\");\n    }\n\n    return id;\n  }\n\n  /**\n   * @param {Object} [options]\n   * @param {token} [options.loneArg] The argument to the function in cases\n   *                                  where it was defined using the\n   *                                  single-argument shorthand.\n   * @param {bool} [options.parsedOpening] Whether the opening parenthesis has\n   *                                       already been parsed.\n   * @returns {{ arity: number, params: Array.<string>}}\n   */\n  function functionparams(options) {\n    var next;\n    var paramsIds = [];\n    var ident;\n    var tokens = [];\n    var t;\n    var pastDefault = false;\n    var pastRest = false;\n    var arity = 0;\n    var loneArg = options && options.loneArg;\n\n    if (loneArg && loneArg.identifier === true) {\n      state.funct[\"(scope)\"].addParam(loneArg.value, loneArg);\n      return { arity: 1, params: [ loneArg.value ] };\n    }\n\n    next = state.tokens.next;\n\n    if (!options || !options.parsedOpening) {\n      advance(\"(\");\n    }\n\n    if (state.tokens.next.id === \")\") {\n      advance(\")\");\n      return;\n    }\n\n    function addParam(addParamArgs) {\n      state.funct[\"(scope)\"].addParam.apply(state.funct[\"(scope)\"], addParamArgs);\n    }\n\n    for (;;) {\n      arity++;\n      // are added to the param scope\n      var currentParams = [];\n\n      if (_.contains([\"{\", \"[\"], state.tokens.next.id)) {\n        tokens = destructuringPattern();\n        for (t in tokens) {\n          t = tokens[t];\n          if (t.id) {\n            paramsIds.push(t.id);\n            currentParams.push([t.id, t.token]);\n          }\n        }\n      } else {\n        if (checkPunctuator(state.tokens.next, \"...\")) pastRest = true;\n        ident = identifier(true);\n        if (ident) {\n          paramsIds.push(ident);\n          currentParams.push([ident, state.tokens.curr]);\n        } else {\n          // Skip invalid parameter.\n          while (!checkPunctuators(state.tokens.next, [\",\", \")\"])) advance();\n        }\n      }\n\n      // It is valid to have a regular argument after a default argument\n      // since undefined can be used for missing parameters. Still warn as it is\n      // a possible code smell.\n      if (pastDefault) {\n        if (state.tokens.next.id !== \"=\") {\n          error(\"W138\", state.tokens.current);\n        }\n      }\n      if (state.tokens.next.id === \"=\") {\n        if (!state.inES6()) {\n          warning(\"W119\", state.tokens.next, \"default parameters\", \"6\");\n        }\n        advance(\"=\");\n        pastDefault = true;\n        expression(10);\n      }\n\n      // now we have evaluated the default expression, add the variable to the param scope\n      currentParams.forEach(addParam);\n\n      if (state.tokens.next.id === \",\") {\n        if (pastRest) {\n          warning(\"W131\", state.tokens.next);\n        }\n        comma();\n      } else {\n        advance(\")\", next);\n        return { arity: arity, params: paramsIds };\n      }\n    }\n  }\n\n  function functor(name, token, overwrites) {\n    var funct = {\n      \"(name)\"      : name,\n      \"(breakage)\"  : 0,\n      \"(loopage)\"   : 0,\n      \"(tokens)\"    : {},\n      \"(properties)\": {},\n\n      \"(catch)\"     : false,\n      \"(global)\"    : false,\n\n      \"(line)\"      : null,\n      \"(character)\" : null,\n      \"(metrics)\"   : null,\n      \"(statement)\" : null,\n      \"(context)\"   : null,\n      \"(scope)\"     : null,\n      \"(comparray)\" : null,\n      \"(generator)\" : null,\n      \"(arrow)\"     : null,\n      \"(params)\"    : null\n    };\n\n    if (token) {\n      _.extend(funct, {\n        \"(line)\"     : token.line,\n        \"(character)\": token.character,\n        \"(metrics)\"  : createMetrics(token)\n      });\n    }\n\n    _.extend(funct, overwrites);\n\n    if (funct[\"(context)\"]) {\n      funct[\"(scope)\"] = funct[\"(context)\"][\"(scope)\"];\n      funct[\"(comparray)\"]  = funct[\"(context)\"][\"(comparray)\"];\n    }\n\n    return funct;\n  }\n\n  function isFunctor(token) {\n    return \"(scope)\" in token;\n  }\n\n  /**\n   * Determine if the parser has begun parsing executable code.\n   *\n   * @param {Token} funct - The current \"functor\" token\n   *\n   * @returns {boolean}\n   */\n  function hasParsedCode(funct) {\n    return funct[\"(global)\"] && !funct[\"(verb)\"];\n  }\n\n  function doTemplateLiteral(left) {\n    // ASSERT: this.type === \"(template)\"\n    // jshint validthis: true\n    var ctx = this.context;\n    var noSubst = this.noSubst;\n    var depth = this.depth;\n\n    if (!noSubst) {\n      while (!end()) {\n        if (!state.tokens.next.template || state.tokens.next.depth > depth) {\n          expression(0); // should probably have different rbp?\n        } else {\n          // skip template start / middle\n          advance();\n        }\n      }\n    }\n\n    return {\n      id: \"(template)\",\n      type: \"(template)\",\n      tag: left\n    };\n\n    function end() {\n      if (state.tokens.curr.template && state.tokens.curr.tail &&\n          state.tokens.curr.context === ctx) return true;\n      var complete = (state.tokens.next.template && state.tokens.next.tail &&\n                      state.tokens.next.context === ctx);\n      if (complete) advance();\n      return complete || state.tokens.next.isUnclosed;\n    }\n  }\n\n  /**\n   * @param {Object} [options]\n   * @param {token} [options.name] The identifier belonging to the function (if\n   *                               any)\n   * @param {boolean} [options.statement] The statement that triggered creation\n   *                                      of the current function.\n   * @param {string} [options.type] If specified, either \"generator\" or \"arrow\"\n   * @param {token} [options.loneArg] The argument to the function in cases\n   *                                  where it was defined using the\n   *                                  single-argument shorthand\n   * @param {bool} [options.parsedOpening] Whether the opening parenthesis has\n   *                                       already been parsed\n   * @param {token} [options.classExprBinding] Define a function with this\n   *                                           identifier in the new function's\n   *                                           scope, mimicking the bahavior of\n   *                                           class expression names within\n   *                                           the body of member functions.\n   */\n  function doFunction(options) {\n    var f, token, name, statement, classExprBinding, isGenerator, isArrow, ignoreLoopFunc;\n    var oldOption = state.option;\n    var oldIgnored = state.ignored;\n\n    if (options) {\n      name = options.name;\n      statement = options.statement;\n      classExprBinding = options.classExprBinding;\n      isGenerator = options.type === \"generator\";\n      isArrow = options.type === \"arrow\";\n      ignoreLoopFunc = options.ignoreLoopFunc;\n    }\n\n    state.option = Object.create(state.option);\n    state.ignored = Object.create(state.ignored);\n\n    state.funct = functor(name || state.nameStack.infer(), state.tokens.next, {\n      \"(statement)\": statement,\n      \"(context)\":   state.funct,\n      \"(arrow)\":     isArrow,\n      \"(generator)\": isGenerator\n    });\n\n    f = state.funct;\n    token = state.tokens.curr;\n    token.funct = state.funct;\n\n    functions.push(state.funct);\n\n    // So that the function is available to itself and referencing itself is not\n    // seen as a closure, add the function name to a new scope, but do not\n    // test for unused (unused: false)\n    // it is a new block scope so that params can override it, it can be block scoped\n    // but declarations inside the function don't cause already declared error\n    state.funct[\"(scope)\"].stack(\"functionouter\");\n    var internallyAccessibleName = name || classExprBinding;\n    if (internallyAccessibleName) {\n      state.funct[\"(scope)\"].block.add(internallyAccessibleName,\n        classExprBinding ? \"class\" : \"function\", state.tokens.curr, false);\n    }\n\n    // create the param scope (params added in functionparams)\n    state.funct[\"(scope)\"].stack(\"functionparams\");\n\n    var paramsInfo = functionparams(options);\n\n    if (paramsInfo) {\n      state.funct[\"(params)\"] = paramsInfo.params;\n      state.funct[\"(metrics)\"].arity = paramsInfo.arity;\n      state.funct[\"(metrics)\"].verifyMaxParametersPerFunction();\n    } else {\n      state.funct[\"(metrics)\"].arity = 0;\n    }\n\n    if (isArrow) {\n      if (!state.inES6(true)) {\n        warning(\"W119\", state.tokens.curr, \"arrow function syntax (=>)\", \"6\");\n      }\n\n      if (!options.loneArg) {\n        advance(\"=>\");\n      }\n    }\n\n    block(false, true, true, isArrow);\n\n    if (!state.option.noyield && isGenerator &&\n        state.funct[\"(generator)\"] !== \"yielded\") {\n      warning(\"W124\", state.tokens.curr);\n    }\n\n    state.funct[\"(metrics)\"].verifyMaxStatementsPerFunction();\n    state.funct[\"(metrics)\"].verifyMaxComplexityPerFunction();\n    state.funct[\"(unusedOption)\"] = state.option.unused;\n    state.option = oldOption;\n    state.ignored = oldIgnored;\n    state.funct[\"(last)\"] = state.tokens.curr.line;\n    state.funct[\"(lastcharacter)\"] = state.tokens.curr.character;\n\n    // unstack the params scope\n    state.funct[\"(scope)\"].unstack(); // also does usage and label checks\n\n    // unstack the function outer stack\n    state.funct[\"(scope)\"].unstack();\n\n    state.funct = state.funct[\"(context)\"];\n\n    if (!ignoreLoopFunc && !state.option.loopfunc && state.funct[\"(loopage)\"]) {\n      // If the function we just parsed accesses any non-local variables\n      // trigger a warning. Otherwise, the function is safe even within\n      // a loop.\n      if (f[\"(isCapturing)\"]) {\n        warning(\"W083\", token);\n      }\n    }\n\n    return f;\n  }\n\n  function createMetrics(functionStartToken) {\n    return {\n      statementCount: 0,\n      nestedBlockDepth: -1,\n      ComplexityCount: 1,\n      arity: 0,\n\n      verifyMaxStatementsPerFunction: function() {\n        if (state.option.maxstatements &&\n          this.statementCount > state.option.maxstatements) {\n          warning(\"W071\", functionStartToken, this.statementCount);\n        }\n      },\n\n      verifyMaxParametersPerFunction: function() {\n        if (_.isNumber(state.option.maxparams) &&\n          this.arity > state.option.maxparams) {\n          warning(\"W072\", functionStartToken, this.arity);\n        }\n      },\n\n      verifyMaxNestedBlockDepthPerFunction: function() {\n        if (state.option.maxdepth &&\n          this.nestedBlockDepth > 0 &&\n          this.nestedBlockDepth === state.option.maxdepth + 1) {\n          warning(\"W073\", null, this.nestedBlockDepth);\n        }\n      },\n\n      verifyMaxComplexityPerFunction: function() {\n        var max = state.option.maxcomplexity;\n        var cc = this.ComplexityCount;\n        if (max && cc > max) {\n          warning(\"W074\", functionStartToken, cc);\n        }\n      }\n    };\n  }\n\n  function increaseComplexityCount() {\n    state.funct[\"(metrics)\"].ComplexityCount += 1;\n  }\n\n  // Parse assignments that were found instead of conditionals.\n  // For example: if (a = 1) { ... }\n\n  function checkCondAssignment(expr) {\n    var id, paren;\n    if (expr) {\n      id = expr.id;\n      paren = expr.paren;\n      if (id === \",\" && (expr = expr.exprs[expr.exprs.length - 1])) {\n        id = expr.id;\n        paren = paren || expr.paren;\n      }\n    }\n    switch (id) {\n    case \"=\":\n    case \"+=\":\n    case \"-=\":\n    case \"*=\":\n    case \"%=\":\n    case \"&=\":\n    case \"|=\":\n    case \"^=\":\n    case \"/=\":\n      if (!paren && !state.option.boss) {\n        warning(\"W084\");\n      }\n    }\n  }\n\n  /**\n   * @param {object} props Collection of property descriptors for a given\n   *                       object.\n   */\n  function checkProperties(props) {\n    // Check for lonely setters if in the ES5 mode.\n    if (state.inES5()) {\n      for (var name in props) {\n        if (props[name] && props[name].setterToken && !props[name].getterToken) {\n          warning(\"W078\", props[name].setterToken);\n        }\n      }\n    }\n  }\n\n  function metaProperty(name, c) {\n    if (checkPunctuator(state.tokens.next, \".\")) {\n      var left = state.tokens.curr.id;\n      advance(\".\");\n      var id = identifier();\n      state.tokens.curr.isMetaProperty = true;\n      if (name !== id) {\n        error(\"E057\", state.tokens.prev, left, id);\n      } else {\n        c();\n      }\n      return state.tokens.curr;\n    }\n  }\n\n  (function(x) {\n    x.nud = function() {\n      var b, f, i, p, t, isGeneratorMethod = false, nextVal;\n      var props = Object.create(null); // All properties, including accessors\n\n      b = state.tokens.curr.line !== startLine(state.tokens.next);\n      if (b) {\n        indent += state.option.indent;\n        if (state.tokens.next.from === indent + state.option.indent) {\n          indent += state.option.indent;\n        }\n      }\n\n      var blocktype = lookupBlockType();\n      if (blocktype.isDestAssign) {\n        this.destructAssign = destructuringPattern({ openingParsed: true, assignment: true });\n        return this;\n      }\n\n      for (;;) {\n        if (state.tokens.next.id === \"}\") {\n          break;\n        }\n\n        nextVal = state.tokens.next.value;\n        if (state.tokens.next.identifier &&\n            (peekIgnoreEOL().id === \",\" || peekIgnoreEOL().id === \"}\")) {\n          if (!state.inES6()) {\n            warning(\"W104\", state.tokens.next, \"object short notation\", \"6\");\n          }\n          i = propertyName(true);\n          saveProperty(props, i, state.tokens.next);\n\n          expression(10);\n\n        } else if (peek().id !== \":\" && (nextVal === \"get\" || nextVal === \"set\")) {\n          advance(nextVal);\n\n          if (!state.inES5()) {\n            error(\"E034\");\n          }\n\n          i = propertyName();\n\n          // ES6 allows for get() {...} and set() {...} method\n          // definition shorthand syntax, so we don't produce an error\n          // if linting ECMAScript 6 code.\n          if (!i && !state.inES6()) {\n            error(\"E035\");\n          }\n\n          // We don't want to save this getter unless it's an actual getter\n          // and not an ES6 concise method\n          if (i) {\n            saveAccessor(nextVal, props, i, state.tokens.curr);\n          }\n\n          t = state.tokens.next;\n          f = doFunction();\n          p = f[\"(params)\"];\n\n          // Don't warn about getter/setter pairs if this is an ES6 concise method\n          if (nextVal === \"get\" && i && p) {\n            warning(\"W076\", t, p[0], i);\n          } else if (nextVal === \"set\" && i && (!p || p.length !== 1)) {\n            warning(\"W077\", t, i);\n          }\n        } else {\n          if (state.tokens.next.value === \"*\" && state.tokens.next.type === \"(punctuator)\") {\n            if (!state.inES6()) {\n              warning(\"W104\", state.tokens.next, \"generator functions\", \"6\");\n            }\n            advance(\"*\");\n            isGeneratorMethod = true;\n          } else {\n            isGeneratorMethod = false;\n          }\n\n          if (state.tokens.next.id === \"[\") {\n            i = computedPropertyName();\n            state.nameStack.set(i);\n          } else {\n            state.nameStack.set(state.tokens.next);\n            i = propertyName();\n            saveProperty(props, i, state.tokens.next);\n\n            if (typeof i !== \"string\") {\n              break;\n            }\n          }\n\n          if (state.tokens.next.value === \"(\") {\n            if (!state.inES6()) {\n              warning(\"W104\", state.tokens.curr, \"concise methods\", \"6\");\n            }\n            doFunction({ type: isGeneratorMethod ? \"generator\" : null });\n          } else {\n            advance(\":\");\n            expression(10);\n          }\n        }\n\n        countMember(i);\n\n        if (state.tokens.next.id === \",\") {\n          comma({ allowTrailing: true, property: true });\n          if (state.tokens.next.id === \",\") {\n            warning(\"W070\", state.tokens.curr);\n          } else if (state.tokens.next.id === \"}\" && !state.inES5()) {\n            warning(\"W070\", state.tokens.curr);\n          }\n        } else {\n          break;\n        }\n      }\n      if (b) {\n        indent -= state.option.indent;\n      }\n      advance(\"}\", this);\n\n      checkProperties(props);\n\n      return this;\n    };\n    x.fud = function() {\n      error(\"E036\", state.tokens.curr);\n    };\n  }(delim(\"{\")));\n\n  function destructuringPattern(options) {\n    var isAssignment = options && options.assignment;\n\n    if (!state.inES6()) {\n      warning(\"W104\", state.tokens.curr,\n        isAssignment ? \"destructuring assignment\" : \"destructuring binding\", \"6\");\n    }\n\n    return destructuringPatternRecursive(options);\n  }\n\n  function destructuringPatternRecursive(options) {\n    var ids;\n    var identifiers = [];\n    var openingParsed = options && options.openingParsed;\n    var isAssignment = options && options.assignment;\n    var recursiveOptions = isAssignment ? { assignment: isAssignment } : null;\n    var firstToken = openingParsed ? state.tokens.curr : state.tokens.next;\n\n    var nextInnerDE = function() {\n      var ident;\n      if (checkPunctuators(state.tokens.next, [\"[\", \"{\"])) {\n        ids = destructuringPatternRecursive(recursiveOptions);\n        for (var id in ids) {\n          id = ids[id];\n          identifiers.push({ id: id.id, token: id.token });\n        }\n      } else if (checkPunctuator(state.tokens.next, \",\")) {\n        identifiers.push({ id: null, token: state.tokens.curr });\n      } else if (checkPunctuator(state.tokens.next, \"(\")) {\n        advance(\"(\");\n        nextInnerDE();\n        advance(\")\");\n      } else {\n        var is_rest = checkPunctuator(state.tokens.next, \"...\");\n\n        if (isAssignment) {\n          var identifierToken = is_rest ? peek(0) : state.tokens.next;\n          if (!identifierToken.identifier) {\n            warning(\"E030\", identifierToken, identifierToken.value);\n          }\n          var assignTarget = expression(155);\n          if (assignTarget) {\n            checkLeftSideAssign(assignTarget);\n\n            // if the target was a simple identifier, add it to the list to return\n            if (assignTarget.identifier) {\n              ident = assignTarget.value;\n            }\n          }\n        } else {\n          ident = identifier();\n        }\n        if (ident) {\n          identifiers.push({ id: ident, token: state.tokens.curr });\n        }\n        return is_rest;\n      }\n      return false;\n    };\n    var assignmentProperty = function() {\n      var id;\n      if (checkPunctuator(state.tokens.next, \"[\")) {\n        advance(\"[\");\n        expression(10);\n        advance(\"]\");\n        advance(\":\");\n        nextInnerDE();\n      } else if (state.tokens.next.id === \"(string)\" ||\n                 state.tokens.next.id === \"(number)\") {\n        advance();\n        advance(\":\");\n        nextInnerDE();\n      } else {\n        // this id will either be the property name or the property name and the assigning identifier\n        id = identifier();\n        if (checkPunctuator(state.tokens.next, \":\")) {\n          advance(\":\");\n          nextInnerDE();\n        } else if (id) {\n          // in this case we are assigning (not declaring), so check assignment\n          if (isAssignment) {\n            checkLeftSideAssign(state.tokens.curr);\n          }\n          identifiers.push({ id: id, token: state.tokens.curr });\n        }\n      }\n    };\n    if (checkPunctuator(firstToken, \"[\")) {\n      if (!openingParsed) {\n        advance(\"[\");\n      }\n      if (checkPunctuator(state.tokens.next, \"]\")) {\n        warning(\"W137\", state.tokens.curr);\n      }\n      var element_after_rest = false;\n      while (!checkPunctuator(state.tokens.next, \"]\")) {\n        if (nextInnerDE() && !element_after_rest &&\n            checkPunctuator(state.tokens.next, \",\")) {\n          warning(\"W130\", state.tokens.next);\n          element_after_rest = true;\n        }\n        if (checkPunctuator(state.tokens.next, \"=\")) {\n          if (checkPunctuator(state.tokens.prev, \"...\")) {\n            advance(\"]\");\n          } else {\n            advance(\"=\");\n          }\n          if (state.tokens.next.id === \"undefined\") {\n            warning(\"W080\", state.tokens.prev, state.tokens.prev.value);\n          }\n          expression(10);\n        }\n        if (!checkPunctuator(state.tokens.next, \"]\")) {\n          advance(\",\");\n        }\n      }\n      advance(\"]\");\n    } else if (checkPunctuator(firstToken, \"{\")) {\n\n      if (!openingParsed) {\n        advance(\"{\");\n      }\n      if (checkPunctuator(state.tokens.next, \"}\")) {\n        warning(\"W137\", state.tokens.curr);\n      }\n      while (!checkPunctuator(state.tokens.next, \"}\")) {\n        assignmentProperty();\n        if (checkPunctuator(state.tokens.next, \"=\")) {\n          advance(\"=\");\n          if (state.tokens.next.id === \"undefined\") {\n            warning(\"W080\", state.tokens.prev, state.tokens.prev.value);\n          }\n          expression(10);\n        }\n        if (!checkPunctuator(state.tokens.next, \"}\")) {\n          advance(\",\");\n          if (checkPunctuator(state.tokens.next, \"}\")) {\n            // Trailing comma\n            // ObjectBindingPattern: { BindingPropertyList , }\n            break;\n          }\n        }\n      }\n      advance(\"}\");\n    }\n    return identifiers;\n  }\n\n  function destructuringPatternMatch(tokens, value) {\n    var first = value.first;\n\n    if (!first)\n      return;\n\n    _.zip(tokens, Array.isArray(first) ? first : [ first ]).forEach(function(val) {\n      var token = val[0];\n      var value = val[1];\n\n      if (token && value)\n        token.first = value;\n      else if (token && token.first && !value)\n        warning(\"W080\", token.first, token.first.value);\n    });\n  }\n\n  function blockVariableStatement(type, statement, context) {\n    // used for both let and const statements\n\n    var prefix = context && context.prefix;\n    var inexport = context && context.inexport;\n    var isLet = type === \"let\";\n    var isConst = type === \"const\";\n    var tokens, lone, value, letblock;\n\n    if (!state.inES6()) {\n      warning(\"W104\", state.tokens.curr, type, \"6\");\n    }\n\n    if (isLet && state.tokens.next.value === \"(\") {\n      if (!state.inMoz()) {\n        warning(\"W118\", state.tokens.next, \"let block\");\n      }\n      advance(\"(\");\n      state.funct[\"(scope)\"].stack();\n      letblock = true;\n    } else if (state.funct[\"(noblockscopedvar)\"]) {\n      error(\"E048\", state.tokens.curr, isConst ? \"Const\" : \"Let\");\n    }\n\n    statement.first = [];\n    for (;;) {\n      var names = [];\n      if (_.contains([\"{\", \"[\"], state.tokens.next.value)) {\n        tokens = destructuringPattern();\n        lone = false;\n      } else {\n        tokens = [ { id: identifier(), token: state.tokens.curr } ];\n        lone = true;\n      }\n\n      if (!prefix && isConst && state.tokens.next.id !== \"=\") {\n        warning(\"E012\", state.tokens.curr, state.tokens.curr.value);\n      }\n\n      for (var t in tokens) {\n        if (tokens.hasOwnProperty(t)) {\n          t = tokens[t];\n          if (state.funct[\"(scope)\"].block.isGlobal()) {\n            if (predefined[t.id] === false) {\n              warning(\"W079\", t.token, t.id);\n            }\n          }\n          if (t.id && !state.funct[\"(noblockscopedvar)\"]) {\n            state.funct[\"(scope)\"].addlabel(t.id, {\n              type: type,\n              token: t.token });\n            names.push(t.token);\n\n            if (lone && inexport) {\n              state.funct[\"(scope)\"].setExported(t.token.value, t.token);\n            }\n          }\n        }\n      }\n\n      if (state.tokens.next.id === \"=\") {\n        advance(\"=\");\n        if (!prefix && state.tokens.next.id === \"undefined\") {\n          warning(\"W080\", state.tokens.prev, state.tokens.prev.value);\n        }\n        if (!prefix && peek(0).id === \"=\" && state.tokens.next.identifier) {\n          warning(\"W120\", state.tokens.next, state.tokens.next.value);\n        }\n        // don't accept `in` in expression if prefix is used for ForIn/Of loop.\n        value = expression(prefix ? 120 : 10);\n        if (lone) {\n          tokens[0].first = value;\n        } else {\n          destructuringPatternMatch(names, value);\n        }\n      }\n\n      statement.first = statement.first.concat(names);\n\n      if (state.tokens.next.id !== \",\") {\n        break;\n      }\n      comma();\n    }\n    if (letblock) {\n      advance(\")\");\n      block(true, true);\n      statement.block = true;\n      state.funct[\"(scope)\"].unstack();\n    }\n\n    return statement;\n  }\n\n  var conststatement = stmt(\"const\", function(context) {\n    return blockVariableStatement(\"const\", this, context);\n  });\n  conststatement.exps = true;\n\n  var letstatement = stmt(\"let\", function(context) {\n    return blockVariableStatement(\"let\", this, context);\n  });\n  letstatement.exps = true;\n\n  var varstatement = stmt(\"var\", function(context) {\n    var prefix = context && context.prefix;\n    var inexport = context && context.inexport;\n    var tokens, lone, value;\n\n    // If the `implied` option is set, bindings are set differently.\n    var implied = context && context.implied;\n    var report = !(context && context.ignore);\n\n    this.first = [];\n    for (;;) {\n      var names = [];\n      if (_.contains([\"{\", \"[\"], state.tokens.next.value)) {\n        tokens = destructuringPattern();\n        lone = false;\n      } else {\n        tokens = [ { id: identifier(), token: state.tokens.curr } ];\n        lone = true;\n      }\n\n      if (!(prefix && implied) && report && state.option.varstmt) {\n        warning(\"W132\", this);\n      }\n\n      this.first = this.first.concat(names);\n\n      for (var t in tokens) {\n        if (tokens.hasOwnProperty(t)) {\n          t = tokens[t];\n          if (!implied && state.funct[\"(global)\"]) {\n            if (predefined[t.id] === false) {\n              warning(\"W079\", t.token, t.id);\n            } else if (state.option.futurehostile === false) {\n              if ((!state.inES5() && vars.ecmaIdentifiers[5][t.id] === false) ||\n                (!state.inES6() && vars.ecmaIdentifiers[6][t.id] === false)) {\n                warning(\"W129\", t.token, t.id);\n              }\n            }\n          }\n          if (t.id) {\n            if (implied === \"for\") {\n\n              if (!state.funct[\"(scope)\"].has(t.id)) {\n                if (report) warning(\"W088\", t.token, t.id);\n              }\n              state.funct[\"(scope)\"].block.use(t.id, t.token);\n            } else {\n              state.funct[\"(scope)\"].addlabel(t.id, {\n                type: \"var\",\n                token: t.token });\n\n              if (lone && inexport) {\n                state.funct[\"(scope)\"].setExported(t.id, t.token);\n              }\n            }\n            names.push(t.token);\n          }\n        }\n      }\n\n      if (state.tokens.next.id === \"=\") {\n        state.nameStack.set(state.tokens.curr);\n\n        advance(\"=\");\n        if (!prefix && report && !state.funct[\"(loopage)\"] &&\n          state.tokens.next.id === \"undefined\") {\n          warning(\"W080\", state.tokens.prev, state.tokens.prev.value);\n        }\n        if (peek(0).id === \"=\" && state.tokens.next.identifier) {\n          if (!prefix && report &&\n              !state.funct[\"(params)\"] ||\n              state.funct[\"(params)\"].indexOf(state.tokens.next.value) === -1) {\n            warning(\"W120\", state.tokens.next, state.tokens.next.value);\n          }\n        }\n        // don't accept `in` in expression if prefix is used for ForIn/Of loop.\n        value = expression(prefix ? 120 : 10);\n        if (lone) {\n          tokens[0].first = value;\n        } else {\n          destructuringPatternMatch(names, value);\n        }\n      }\n\n      if (state.tokens.next.id !== \",\") {\n        break;\n      }\n      comma();\n    }\n\n    return this;\n  });\n  varstatement.exps = true;\n\n  blockstmt(\"class\", function() {\n    return classdef.call(this, true);\n  });\n\n  function classdef(isStatement) {\n\n    /*jshint validthis:true */\n    if (!state.inES6()) {\n      warning(\"W104\", state.tokens.curr, \"class\", \"6\");\n    }\n    if (isStatement) {\n      // BindingIdentifier\n      this.name = identifier();\n\n      state.funct[\"(scope)\"].addlabel(this.name, {\n        type: \"class\",\n        token: state.tokens.curr });\n    } else if (state.tokens.next.identifier && state.tokens.next.value !== \"extends\") {\n      // BindingIdentifier(opt)\n      this.name = identifier();\n      this.namedExpr = true;\n    } else {\n      this.name = state.nameStack.infer();\n    }\n    classtail(this);\n    return this;\n  }\n\n  function classtail(c) {\n    var wasInClassBody = state.inClassBody;\n    // ClassHeritage(opt)\n    if (state.tokens.next.value === \"extends\") {\n      advance(\"extends\");\n      c.heritage = expression(10);\n    }\n\n    state.inClassBody = true;\n    advance(\"{\");\n    // ClassBody(opt)\n    c.body = classbody(c);\n    advance(\"}\");\n    state.inClassBody = wasInClassBody;\n  }\n\n  function classbody(c) {\n    var name;\n    var isStatic;\n    var isGenerator;\n    var getset;\n    var props = Object.create(null);\n    var staticProps = Object.create(null);\n    var computed;\n    for (var i = 0; state.tokens.next.id !== \"}\"; ++i) {\n      name = state.tokens.next;\n      isStatic = false;\n      isGenerator = false;\n      getset = null;\n\n      // The ES6 grammar for ClassElement includes the `;` token, but it is\n      // defined only as a placeholder to facilitate future language\n      // extensions. In ES6 code, it serves no purpose.\n      if (name.id === \";\") {\n        warning(\"W032\");\n        advance(\";\");\n        continue;\n      }\n\n      if (name.id === \"*\") {\n        isGenerator = true;\n        advance(\"*\");\n        name = state.tokens.next;\n      }\n      if (name.id === \"[\") {\n        name = computedPropertyName();\n        computed = true;\n      } else if (isPropertyName(name)) {\n        // Non-Computed PropertyName\n        advance();\n        computed = false;\n        if (name.identifier && name.value === \"static\") {\n          if (checkPunctuator(state.tokens.next, \"*\")) {\n            isGenerator = true;\n            advance(\"*\");\n          }\n          if (isPropertyName(state.tokens.next) || state.tokens.next.id === \"[\") {\n            computed = state.tokens.next.id === \"[\";\n            isStatic = true;\n            name = state.tokens.next;\n            if (state.tokens.next.id === \"[\") {\n              name = computedPropertyName();\n            } else advance();\n          }\n        }\n\n        if (name.identifier && (name.value === \"get\" || name.value === \"set\")) {\n          if (isPropertyName(state.tokens.next) || state.tokens.next.id === \"[\") {\n            computed = state.tokens.next.id === \"[\";\n            getset = name;\n            name = state.tokens.next;\n            if (state.tokens.next.id === \"[\") {\n              name = computedPropertyName();\n            } else advance();\n          }\n        }\n      } else {\n        warning(\"W052\", state.tokens.next, state.tokens.next.value || state.tokens.next.type);\n        advance();\n        continue;\n      }\n\n      if (!checkPunctuator(state.tokens.next, \"(\")) {\n        // error --- class properties must be methods\n        error(\"E054\", state.tokens.next, state.tokens.next.value);\n        while (state.tokens.next.id !== \"}\" &&\n               !checkPunctuator(state.tokens.next, \"(\")) {\n          advance();\n        }\n        if (state.tokens.next.value !== \"(\") {\n          doFunction({ statement: c });\n        }\n      }\n\n      if (!computed) {\n        // We don't know how to determine if we have duplicate computed property names :(\n        if (getset) {\n          saveAccessor(\n            getset.value, isStatic ? staticProps : props, name.value, name, true, isStatic);\n        } else {\n          if (name.value === \"constructor\") {\n            state.nameStack.set(c);\n          } else {\n            state.nameStack.set(name);\n          }\n          saveProperty(isStatic ? staticProps : props, name.value, name, true, isStatic);\n        }\n      }\n\n      if (getset && name.value === \"constructor\") {\n        var propDesc = getset.value === \"get\" ? \"class getter method\" : \"class setter method\";\n        error(\"E049\", name, propDesc, \"constructor\");\n      } else if (name.value === \"prototype\") {\n        error(\"E049\", name, \"class method\", \"prototype\");\n      }\n\n      propertyName(name);\n\n      doFunction({\n        statement: c,\n        type: isGenerator ? \"generator\" : null,\n        classExprBinding: c.namedExpr ? c.name : null\n      });\n    }\n\n    checkProperties(props);\n  }\n\n  blockstmt(\"function\", function(context) {\n    var inexport = context && context.inexport;\n    var generator = false;\n    if (state.tokens.next.value === \"*\") {\n      advance(\"*\");\n      if (state.inES6({ strict: true })) {\n        generator = true;\n      } else {\n        warning(\"W119\", state.tokens.curr, \"function*\", \"6\");\n      }\n    }\n    if (inblock) {\n      warning(\"W082\", state.tokens.curr);\n    }\n    var i = optionalidentifier();\n\n    state.funct[\"(scope)\"].addlabel(i, {\n      type: \"function\",\n      token: state.tokens.curr });\n\n    if (i === undefined) {\n      warning(\"W025\");\n    } else if (inexport) {\n      state.funct[\"(scope)\"].setExported(i, state.tokens.prev);\n    }\n\n    doFunction({\n      name: i,\n      statement: this,\n      type: generator ? \"generator\" : null,\n      ignoreLoopFunc: inblock // a declaration may already have warned\n    });\n    if (state.tokens.next.id === \"(\" && state.tokens.next.line === state.tokens.curr.line) {\n      error(\"E039\");\n    }\n    return this;\n  });\n\n  prefix(\"function\", function() {\n    var generator = false;\n\n    if (state.tokens.next.value === \"*\") {\n      if (!state.inES6()) {\n        warning(\"W119\", state.tokens.curr, \"function*\", \"6\");\n      }\n      advance(\"*\");\n      generator = true;\n    }\n\n    var i = optionalidentifier();\n    doFunction({ name: i, type: generator ? \"generator\" : null });\n    return this;\n  });\n\n  blockstmt(\"if\", function() {\n    var t = state.tokens.next;\n    increaseComplexityCount();\n    state.condition = true;\n    advance(\"(\");\n    var expr = expression(0);\n    checkCondAssignment(expr);\n\n    // When the if is within a for-in loop, check if the condition\n    // starts with a negation operator\n    var forinifcheck = null;\n    if (state.option.forin && state.forinifcheckneeded) {\n      state.forinifcheckneeded = false; // We only need to analyze the first if inside the loop\n      forinifcheck = state.forinifchecks[state.forinifchecks.length - 1];\n      if (expr.type === \"(punctuator)\" && expr.value === \"!\") {\n        forinifcheck.type = \"(negative)\";\n      } else {\n        forinifcheck.type = \"(positive)\";\n      }\n    }\n\n    advance(\")\", t);\n    state.condition = false;\n    var s = block(true, true);\n\n    // When the if is within a for-in loop and the condition has a negative form,\n    // check if the body contains nothing but a continue statement\n    if (forinifcheck && forinifcheck.type === \"(negative)\") {\n      if (s && s[0] && s[0].type === \"(identifier)\" && s[0].value === \"continue\") {\n        forinifcheck.type = \"(negative-with-continue)\";\n      }\n    }\n\n    if (state.tokens.next.id === \"else\") {\n      advance(\"else\");\n      if (state.tokens.next.id === \"if\" || state.tokens.next.id === \"switch\") {\n        statement();\n      } else {\n        block(true, true);\n      }\n    }\n    return this;\n  });\n\n  blockstmt(\"try\", function() {\n    var b;\n\n    function doCatch() {\n      advance(\"catch\");\n      advance(\"(\");\n\n      state.funct[\"(scope)\"].stack(\"catchparams\");\n\n      if (checkPunctuators(state.tokens.next, [\"[\", \"{\"])) {\n        var tokens = destructuringPattern();\n        _.each(tokens, function(token) {\n          if (token.id) {\n            state.funct[\"(scope)\"].addParam(token.id, token, \"exception\");\n          }\n        });\n      } else if (state.tokens.next.type !== \"(identifier)\") {\n        warning(\"E030\", state.tokens.next, state.tokens.next.value);\n      } else {\n        // only advance if we have an identifier so we can continue parsing in the most common error - that no param is given.\n        state.funct[\"(scope)\"].addParam(identifier(), state.tokens.curr, \"exception\");\n      }\n\n      if (state.tokens.next.value === \"if\") {\n        if (!state.inMoz()) {\n          warning(\"W118\", state.tokens.curr, \"catch filter\");\n        }\n        advance(\"if\");\n        expression(0);\n      }\n\n      advance(\")\");\n\n      block(false);\n\n      state.funct[\"(scope)\"].unstack();\n    }\n\n    block(true);\n\n    while (state.tokens.next.id === \"catch\") {\n      increaseComplexityCount();\n      if (b && (!state.inMoz())) {\n        warning(\"W118\", state.tokens.next, \"multiple catch blocks\");\n      }\n      doCatch();\n      b = true;\n    }\n\n    if (state.tokens.next.id === \"finally\") {\n      advance(\"finally\");\n      block(true);\n      return;\n    }\n\n    if (!b) {\n      error(\"E021\", state.tokens.next, \"catch\", state.tokens.next.value);\n    }\n\n    return this;\n  });\n\n  blockstmt(\"while\", function() {\n    var t = state.tokens.next;\n    state.funct[\"(breakage)\"] += 1;\n    state.funct[\"(loopage)\"] += 1;\n    increaseComplexityCount();\n    advance(\"(\");\n    checkCondAssignment(expression(0));\n    advance(\")\", t);\n    block(true, true);\n    state.funct[\"(breakage)\"] -= 1;\n    state.funct[\"(loopage)\"] -= 1;\n    return this;\n  }).labelled = true;\n\n  blockstmt(\"with\", function() {\n    var t = state.tokens.next;\n    if (state.isStrict()) {\n      error(\"E010\", state.tokens.curr);\n    } else if (!state.option.withstmt) {\n      warning(\"W085\", state.tokens.curr);\n    }\n\n    advance(\"(\");\n    expression(0);\n    advance(\")\", t);\n    block(true, true);\n\n    return this;\n  });\n\n  blockstmt(\"switch\", function() {\n    var t = state.tokens.next;\n    var g = false;\n    var noindent = false;\n\n    state.funct[\"(breakage)\"] += 1;\n    advance(\"(\");\n    checkCondAssignment(expression(0));\n    advance(\")\", t);\n    t = state.tokens.next;\n    advance(\"{\");\n\n    if (state.tokens.next.from === indent)\n      noindent = true;\n\n    if (!noindent)\n      indent += state.option.indent;\n\n    this.cases = [];\n\n    for (;;) {\n      switch (state.tokens.next.id) {\n      case \"case\":\n        switch (state.funct[\"(verb)\"]) {\n        case \"yield\":\n        case \"break\":\n        case \"case\":\n        case \"continue\":\n        case \"return\":\n        case \"switch\":\n        case \"throw\":\n          break;\n        default:\n          // You can tell JSHint that you don't use break intentionally by\n          // adding a comment /* falls through */ on a line just before\n          // the next `case`.\n          if (!state.tokens.curr.caseFallsThrough) {\n            warning(\"W086\", state.tokens.curr, \"case\");\n          }\n        }\n\n        advance(\"case\");\n        this.cases.push(expression(0));\n        increaseComplexityCount();\n        g = true;\n        advance(\":\");\n        state.funct[\"(verb)\"] = \"case\";\n        break;\n      case \"default\":\n        switch (state.funct[\"(verb)\"]) {\n        case \"yield\":\n        case \"break\":\n        case \"continue\":\n        case \"return\":\n        case \"throw\":\n          break;\n        default:\n          // Do not display a warning if 'default' is the first statement or if\n          // there is a special /* falls through */ comment.\n          if (this.cases.length) {\n            if (!state.tokens.curr.caseFallsThrough) {\n              warning(\"W086\", state.tokens.curr, \"default\");\n            }\n          }\n        }\n\n        advance(\"default\");\n        g = true;\n        advance(\":\");\n        break;\n      case \"}\":\n        if (!noindent)\n          indent -= state.option.indent;\n\n        advance(\"}\", t);\n        state.funct[\"(breakage)\"] -= 1;\n        state.funct[\"(verb)\"] = undefined;\n        return;\n      case \"(end)\":\n        error(\"E023\", state.tokens.next, \"}\");\n        return;\n      default:\n        indent += state.option.indent;\n        if (g) {\n          switch (state.tokens.curr.id) {\n          case \",\":\n            error(\"E040\");\n            return;\n          case \":\":\n            g = false;\n            statements();\n            break;\n          default:\n            error(\"E025\", state.tokens.curr);\n            return;\n          }\n        } else {\n          if (state.tokens.curr.id === \":\") {\n            advance(\":\");\n            error(\"E024\", state.tokens.curr, \":\");\n            statements();\n          } else {\n            error(\"E021\", state.tokens.next, \"case\", state.tokens.next.value);\n            return;\n          }\n        }\n        indent -= state.option.indent;\n      }\n    }\n    return this;\n  }).labelled = true;\n\n  stmt(\"debugger\", function() {\n    if (!state.option.debug) {\n      warning(\"W087\", this);\n    }\n    return this;\n  }).exps = true;\n\n  (function() {\n    var x = stmt(\"do\", function() {\n      state.funct[\"(breakage)\"] += 1;\n      state.funct[\"(loopage)\"] += 1;\n      increaseComplexityCount();\n\n      this.first = block(true, true);\n      advance(\"while\");\n      var t = state.tokens.next;\n      advance(\"(\");\n      checkCondAssignment(expression(0));\n      advance(\")\", t);\n      state.funct[\"(breakage)\"] -= 1;\n      state.funct[\"(loopage)\"] -= 1;\n      return this;\n    });\n    x.labelled = true;\n    x.exps = true;\n  }());\n\n  blockstmt(\"for\", function() {\n    var s, t = state.tokens.next;\n    var letscope = false;\n    var foreachtok = null;\n\n    if (t.value === \"each\") {\n      foreachtok = t;\n      advance(\"each\");\n      if (!state.inMoz()) {\n        warning(\"W118\", state.tokens.curr, \"for each\");\n      }\n    }\n\n    increaseComplexityCount();\n    advance(\"(\");\n\n    // what kind of for(…) statement it is? for(…of…)? for(…in…)? for(…;…;…)?\n    var nextop; // contains the token of the \"in\" or \"of\" operator\n    var i = 0;\n    var inof = [\"in\", \"of\"];\n    var level = 0; // BindingPattern \"level\" --- level 0 === no BindingPattern\n    var comma; // First comma punctuator at level 0\n    var initializer; // First initializer at level 0\n\n    // If initial token is a BindingPattern, count it as such.\n    if (checkPunctuators(state.tokens.next, [\"{\", \"[\"])) ++level;\n    do {\n      nextop = peek(i);\n      ++i;\n      if (checkPunctuators(nextop, [\"{\", \"[\"])) ++level;\n      else if (checkPunctuators(nextop, [\"}\", \"]\"])) --level;\n      if (level < 0) break;\n      if (level === 0) {\n        if (!comma && checkPunctuator(nextop, \",\")) comma = nextop;\n        else if (!initializer && checkPunctuator(nextop, \"=\")) initializer = nextop;\n      }\n    } while (level > 0 || !_.contains(inof, nextop.value) && nextop.value !== \";\" &&\n    nextop.type !== \"(end)\"); // Is this a JSCS bug? This looks really weird.\n\n    // if we're in a for (… in|of …) statement\n    if (_.contains(inof, nextop.value)) {\n      if (!state.inES6() && nextop.value === \"of\") {\n        warning(\"W104\", nextop, \"for of\", \"6\");\n      }\n\n      var ok = !(initializer || comma);\n      if (initializer) {\n        error(\"W133\", comma, nextop.value, \"initializer is forbidden\");\n      }\n\n      if (comma) {\n        error(\"W133\", comma, nextop.value, \"more than one ForBinding\");\n      }\n\n      if (state.tokens.next.id === \"var\") {\n        advance(\"var\");\n        state.tokens.curr.fud({ prefix: true });\n      } else if (state.tokens.next.id === \"let\" || state.tokens.next.id === \"const\") {\n        advance(state.tokens.next.id);\n        // create a new block scope\n        letscope = true;\n        state.funct[\"(scope)\"].stack();\n        state.tokens.curr.fud({ prefix: true });\n      } else {\n        // Parse as a var statement, with implied bindings. Ignore errors if an error\n        // was already reported\n        Object.create(varstatement).fud({ prefix: true, implied: \"for\", ignore: !ok });\n      }\n      advance(nextop.value);\n      expression(20);\n      advance(\")\", t);\n\n      if (nextop.value === \"in\" && state.option.forin) {\n        state.forinifcheckneeded = true;\n\n        if (state.forinifchecks === undefined) {\n          state.forinifchecks = [];\n        }\n\n        // Push a new for-in-if check onto the stack. The type will be modified\n        // when the loop's body is parsed and a suitable if statement exists.\n        state.forinifchecks.push({\n          type: \"(none)\"\n        });\n      }\n\n      state.funct[\"(breakage)\"] += 1;\n      state.funct[\"(loopage)\"] += 1;\n\n      s = block(true, true);\n\n      if (nextop.value === \"in\" && state.option.forin) {\n        if (state.forinifchecks && state.forinifchecks.length > 0) {\n          var check = state.forinifchecks.pop();\n\n          if (// No if statement or not the first statement in loop body\n              s && s.length > 0 && (typeof s[0] !== \"object\" || s[0].value !== \"if\") ||\n              // Positive if statement is not the only one in loop body\n              check.type === \"(positive)\" && s.length > 1 ||\n              // Negative if statement but no continue\n              check.type === \"(negative)\") {\n            warning(\"W089\", this);\n          }\n        }\n\n        // Reset the flag in case no if statement was contained in the loop body\n        state.forinifcheckneeded = false;\n      }\n\n      state.funct[\"(breakage)\"] -= 1;\n      state.funct[\"(loopage)\"] -= 1;\n    } else {\n      if (foreachtok) {\n        error(\"E045\", foreachtok);\n      }\n      if (state.tokens.next.id !== \";\") {\n        if (state.tokens.next.id === \"var\") {\n          advance(\"var\");\n          state.tokens.curr.fud();\n        } else if (state.tokens.next.id === \"let\") {\n          advance(\"let\");\n          // create a new block scope\n          letscope = true;\n          state.funct[\"(scope)\"].stack();\n          state.tokens.curr.fud();\n        } else {\n          for (;;) {\n            expression(0, \"for\");\n            if (state.tokens.next.id !== \",\") {\n              break;\n            }\n            comma();\n          }\n        }\n      }\n      nolinebreak(state.tokens.curr);\n      advance(\";\");\n\n      // start loopage after the first ; as the next two expressions are executed\n      // on every loop\n      state.funct[\"(loopage)\"] += 1;\n      if (state.tokens.next.id !== \";\") {\n        checkCondAssignment(expression(0));\n      }\n      nolinebreak(state.tokens.curr);\n      advance(\";\");\n      if (state.tokens.next.id === \";\") {\n        error(\"E021\", state.tokens.next, \")\", \";\");\n      }\n      if (state.tokens.next.id !== \")\") {\n        for (;;) {\n          expression(0, \"for\");\n          if (state.tokens.next.id !== \",\") {\n            break;\n          }\n          comma();\n        }\n      }\n      advance(\")\", t);\n      state.funct[\"(breakage)\"] += 1;\n      block(true, true);\n      state.funct[\"(breakage)\"] -= 1;\n      state.funct[\"(loopage)\"] -= 1;\n\n    }\n    // unstack loop blockscope\n    if (letscope) {\n      state.funct[\"(scope)\"].unstack();\n    }\n    return this;\n  }).labelled = true;\n\n\n  stmt(\"break\", function() {\n    var v = state.tokens.next.value;\n\n    if (!state.option.asi)\n      nolinebreak(this);\n\n    if (state.tokens.next.id !== \";\" && !state.tokens.next.reach &&\n        state.tokens.curr.line === startLine(state.tokens.next)) {\n      if (!state.funct[\"(scope)\"].funct.hasBreakLabel(v)) {\n        warning(\"W090\", state.tokens.next, v);\n      }\n      this.first = state.tokens.next;\n      advance();\n    } else {\n      if (state.funct[\"(breakage)\"] === 0)\n        warning(\"W052\", state.tokens.next, this.value);\n    }\n\n    reachable(this);\n\n    return this;\n  }).exps = true;\n\n\n  stmt(\"continue\", function() {\n    var v = state.tokens.next.value;\n\n    if (state.funct[\"(breakage)\"] === 0)\n      warning(\"W052\", state.tokens.next, this.value);\n    if (!state.funct[\"(loopage)\"])\n      warning(\"W052\", state.tokens.next, this.value);\n\n    if (!state.option.asi)\n      nolinebreak(this);\n\n    if (state.tokens.next.id !== \";\" && !state.tokens.next.reach) {\n      if (state.tokens.curr.line === startLine(state.tokens.next)) {\n        if (!state.funct[\"(scope)\"].funct.hasBreakLabel(v)) {\n          warning(\"W090\", state.tokens.next, v);\n        }\n        this.first = state.tokens.next;\n        advance();\n      }\n    }\n\n    reachable(this);\n\n    return this;\n  }).exps = true;\n\n\n  stmt(\"return\", function() {\n    if (this.line === startLine(state.tokens.next)) {\n      if (state.tokens.next.id !== \";\" && !state.tokens.next.reach) {\n        this.first = expression(0);\n\n        if (this.first &&\n            this.first.type === \"(punctuator)\" && this.first.value === \"=\" &&\n            !this.first.paren && !state.option.boss) {\n          warningAt(\"W093\", this.first.line, this.first.character);\n        }\n      }\n    } else {\n      if (state.tokens.next.type === \"(punctuator)\" &&\n        [\"[\", \"{\", \"+\", \"-\"].indexOf(state.tokens.next.value) > -1) {\n        nolinebreak(this); // always warn (Line breaking error)\n      }\n    }\n\n    reachable(this);\n\n    return this;\n  }).exps = true;\n\n  (function(x) {\n    x.exps = true;\n    x.lbp = 25;\n  }(prefix(\"yield\", function() {\n    var prev = state.tokens.prev;\n    if (state.inES6(true) && !state.funct[\"(generator)\"]) {\n      // If it's a yield within a catch clause inside a generator then that's ok\n      if (!(\"(catch)\" === state.funct[\"(name)\"] && state.funct[\"(context)\"][\"(generator)\"])) {\n        error(\"E046\", state.tokens.curr, \"yield\");\n      }\n    } else if (!state.inES6()) {\n      warning(\"W104\", state.tokens.curr, \"yield\", \"6\");\n    }\n    state.funct[\"(generator)\"] = \"yielded\";\n    var delegatingYield = false;\n\n    if (state.tokens.next.value === \"*\") {\n      delegatingYield = true;\n      advance(\"*\");\n    }\n\n    if (this.line === startLine(state.tokens.next) || !state.inMoz()) {\n      if (delegatingYield ||\n          (state.tokens.next.id !== \";\" && !state.option.asi &&\n           !state.tokens.next.reach && state.tokens.next.nud)) {\n\n        nobreaknonadjacent(state.tokens.curr, state.tokens.next);\n        this.first = expression(10);\n\n        if (this.first.type === \"(punctuator)\" && this.first.value === \"=\" &&\n            !this.first.paren && !state.option.boss) {\n          warningAt(\"W093\", this.first.line, this.first.character);\n        }\n      }\n\n      if (state.inMoz() && state.tokens.next.id !== \")\" &&\n          (prev.lbp > 30 || (!prev.assign && !isEndOfExpr()) || prev.id === \"yield\")) {\n        error(\"E050\", this);\n      }\n    } else if (!state.option.asi) {\n      nolinebreak(this); // always warn (Line breaking error)\n    }\n    return this;\n  })));\n\n\n  stmt(\"throw\", function() {\n    nolinebreak(this);\n    this.first = expression(20);\n\n    reachable(this);\n\n    return this;\n  }).exps = true;\n\n  stmt(\"import\", function() {\n    if (!state.inES6()) {\n      warning(\"W119\", state.tokens.curr, \"import\", \"6\");\n    }\n\n    if (state.tokens.next.type === \"(string)\") {\n      // ModuleSpecifier :: StringLiteral\n      advance(\"(string)\");\n      return this;\n    }\n\n    if (state.tokens.next.identifier) {\n      // ImportClause :: ImportedDefaultBinding\n      this.name = identifier();\n      // Import bindings are immutable (see ES6 8.1.1.5.5)\n      state.funct[\"(scope)\"].addlabel(this.name, {\n        type: \"const\",\n        token: state.tokens.curr });\n\n      if (state.tokens.next.value === \",\") {\n        // ImportClause :: ImportedDefaultBinding , NameSpaceImport\n        // ImportClause :: ImportedDefaultBinding , NamedImports\n        advance(\",\");\n        // At this point, we intentionally fall through to continue matching\n        // either NameSpaceImport or NamedImports.\n        // Discussion:\n        // https://github.com/jshint/jshint/pull/2144#discussion_r23978406\n      } else {\n        advance(\"from\");\n        advance(\"(string)\");\n        return this;\n      }\n    }\n\n    if (state.tokens.next.id === \"*\") {\n      // ImportClause :: NameSpaceImport\n      advance(\"*\");\n      advance(\"as\");\n      if (state.tokens.next.identifier) {\n        this.name = identifier();\n        // Import bindings are immutable (see ES6 8.1.1.5.5)\n        state.funct[\"(scope)\"].addlabel(this.name, {\n          type: \"const\",\n          token: state.tokens.curr });\n      }\n    } else {\n      // ImportClause :: NamedImports\n      advance(\"{\");\n      for (;;) {\n        if (state.tokens.next.value === \"}\") {\n          advance(\"}\");\n          break;\n        }\n        var importName;\n        if (state.tokens.next.type === \"default\") {\n          importName = \"default\";\n          advance(\"default\");\n        } else {\n          importName = identifier();\n        }\n        if (state.tokens.next.value === \"as\") {\n          advance(\"as\");\n          importName = identifier();\n        }\n\n        // Import bindings are immutable (see ES6 8.1.1.5.5)\n        state.funct[\"(scope)\"].addlabel(importName, {\n          type: \"const\",\n          token: state.tokens.curr });\n\n        if (state.tokens.next.value === \",\") {\n          advance(\",\");\n        } else if (state.tokens.next.value === \"}\") {\n          advance(\"}\");\n          break;\n        } else {\n          error(\"E024\", state.tokens.next, state.tokens.next.value);\n          break;\n        }\n      }\n    }\n\n    // FromClause\n    advance(\"from\");\n    advance(\"(string)\");\n    return this;\n  }).exps = true;\n\n  stmt(\"export\", function() {\n    var ok = true;\n    var token;\n    var identifier;\n\n    if (!state.inES6()) {\n      warning(\"W119\", state.tokens.curr, \"export\", \"6\");\n      ok = false;\n    }\n\n    if (!state.funct[\"(scope)\"].block.isGlobal()) {\n      error(\"E053\", state.tokens.curr);\n      ok = false;\n    }\n\n    if (state.tokens.next.value === \"*\") {\n      // ExportDeclaration :: export * FromClause\n      advance(\"*\");\n      advance(\"from\");\n      advance(\"(string)\");\n      return this;\n    }\n\n    if (state.tokens.next.type === \"default\") {\n      // ExportDeclaration ::\n      //      export default [lookahead  { function, class }] AssignmentExpression[In] ;\n      //      export default HoistableDeclaration\n      //      export default ClassDeclaration\n      state.nameStack.set(state.tokens.next);\n      advance(\"default\");\n      var exportType = state.tokens.next.id;\n      if (exportType === \"function\" || exportType === \"class\") {\n        this.block = true;\n      }\n\n      token = peek();\n\n      expression(10);\n\n      identifier = token.value;\n\n      if (this.block) {\n        state.funct[\"(scope)\"].addlabel(identifier, {\n          type: exportType,\n          token: token });\n\n        state.funct[\"(scope)\"].setExported(identifier, token);\n      }\n\n      return this;\n    }\n\n    if (state.tokens.next.value === \"{\") {\n      // ExportDeclaration :: export ExportClause\n      advance(\"{\");\n      var exportedTokens = [];\n      for (;;) {\n        if (!state.tokens.next.identifier) {\n          error(\"E030\", state.tokens.next, state.tokens.next.value);\n        }\n        advance();\n\n        exportedTokens.push(state.tokens.curr);\n\n        if (state.tokens.next.value === \"as\") {\n          advance(\"as\");\n          if (!state.tokens.next.identifier) {\n            error(\"E030\", state.tokens.next, state.tokens.next.value);\n          }\n          advance();\n        }\n\n        if (state.tokens.next.value === \",\") {\n          advance(\",\");\n        } else if (state.tokens.next.value === \"}\") {\n          advance(\"}\");\n          break;\n        } else {\n          error(\"E024\", state.tokens.next, state.tokens.next.value);\n          break;\n        }\n      }\n      if (state.tokens.next.value === \"from\") {\n        // ExportDeclaration :: export ExportClause FromClause\n        advance(\"from\");\n        advance(\"(string)\");\n      } else if (ok) {\n        exportedTokens.forEach(function(token) {\n          state.funct[\"(scope)\"].setExported(token.value, token);\n        });\n      }\n      return this;\n    }\n\n    if (state.tokens.next.id === \"var\") {\n      // ExportDeclaration :: export VariableStatement\n      advance(\"var\");\n      state.tokens.curr.fud({ inexport:true });\n    } else if (state.tokens.next.id === \"let\") {\n      // ExportDeclaration :: export VariableStatement\n      advance(\"let\");\n      state.tokens.curr.fud({ inexport:true });\n    } else if (state.tokens.next.id === \"const\") {\n      // ExportDeclaration :: export VariableStatement\n      advance(\"const\");\n      state.tokens.curr.fud({ inexport:true });\n    } else if (state.tokens.next.id === \"function\") {\n      // ExportDeclaration :: export Declaration\n      this.block = true;\n      advance(\"function\");\n      state.syntax[\"function\"].fud({ inexport:true });\n    } else if (state.tokens.next.id === \"class\") {\n      // ExportDeclaration :: export Declaration\n      this.block = true;\n      advance(\"class\");\n      var classNameToken = state.tokens.next;\n      state.syntax[\"class\"].fud();\n      state.funct[\"(scope)\"].setExported(classNameToken.value, classNameToken);\n    } else {\n      error(\"E024\", state.tokens.next, state.tokens.next.value);\n    }\n\n    return this;\n  }).exps = true;\n\n  // Future Reserved Words\n\n  FutureReservedWord(\"abstract\");\n  FutureReservedWord(\"boolean\");\n  FutureReservedWord(\"byte\");\n  FutureReservedWord(\"char\");\n  FutureReservedWord(\"class\", { es5: true, nud: classdef });\n  FutureReservedWord(\"double\");\n  FutureReservedWord(\"enum\", { es5: true });\n  FutureReservedWord(\"export\", { es5: true });\n  FutureReservedWord(\"extends\", { es5: true });\n  FutureReservedWord(\"final\");\n  FutureReservedWord(\"float\");\n  FutureReservedWord(\"goto\");\n  FutureReservedWord(\"implements\", { es5: true, strictOnly: true });\n  FutureReservedWord(\"import\", { es5: true });\n  FutureReservedWord(\"int\");\n  FutureReservedWord(\"interface\", { es5: true, strictOnly: true });\n  FutureReservedWord(\"long\");\n  FutureReservedWord(\"native\");\n  FutureReservedWord(\"package\", { es5: true, strictOnly: true });\n  FutureReservedWord(\"private\", { es5: true, strictOnly: true });\n  FutureReservedWord(\"protected\", { es5: true, strictOnly: true });\n  FutureReservedWord(\"public\", { es5: true, strictOnly: true });\n  FutureReservedWord(\"short\");\n  FutureReservedWord(\"static\", { es5: true, strictOnly: true });\n  FutureReservedWord(\"super\", { es5: true });\n  FutureReservedWord(\"synchronized\");\n  FutureReservedWord(\"transient\");\n  FutureReservedWord(\"volatile\");\n\n  // this function is used to determine whether a squarebracket or a curlybracket\n  // expression is a comprehension array, destructuring assignment or a json value.\n\n  var lookupBlockType = function() {\n    var pn, pn1, prev;\n    var i = -1;\n    var bracketStack = 0;\n    var ret = {};\n    if (checkPunctuators(state.tokens.curr, [\"[\", \"{\"])) {\n      bracketStack += 1;\n    }\n    do {\n      prev = i === -1 ? state.tokens.curr : pn;\n      pn = i === -1 ? state.tokens.next : peek(i);\n      pn1 = peek(i + 1);\n      i = i + 1;\n      if (checkPunctuators(pn, [\"[\", \"{\"])) {\n        bracketStack += 1;\n      } else if (checkPunctuators(pn, [\"]\", \"}\"])) {\n        bracketStack -= 1;\n      }\n      if (bracketStack === 1 && pn.identifier && pn.value === \"for\" &&\n          !checkPunctuator(prev, \".\")) {\n        ret.isCompArray = true;\n        ret.notJson = true;\n        break;\n      }\n      if (bracketStack === 0 && checkPunctuators(pn, [\"}\", \"]\"])) {\n        if (pn1.value === \"=\") {\n          ret.isDestAssign = true;\n          ret.notJson = true;\n          break;\n        } else if (pn1.value === \".\") {\n          ret.notJson = true;\n          break;\n        }\n      }\n      if (checkPunctuator(pn, \";\")) {\n        ret.isBlock = true;\n        ret.notJson = true;\n      }\n    } while (bracketStack > 0 && pn.id !== \"(end)\");\n    return ret;\n  };\n\n  function saveProperty(props, name, tkn, isClass, isStatic) {\n    var msg = [\"key\", \"class method\", \"static class method\"];\n    msg = msg[(isClass || false) + (isStatic || false)];\n    if (tkn.identifier) {\n      name = tkn.value;\n    }\n\n    if (props[name] && name !== \"__proto__\") {\n      warning(\"W075\", state.tokens.next, msg, name);\n    } else {\n      props[name] = Object.create(null);\n    }\n\n    props[name].basic = true;\n    props[name].basictkn = tkn;\n  }\n\n  /**\n   * @param {string} accessorType - Either \"get\" or \"set\"\n   * @param {object} props - a collection of all properties of the object to\n   *                         which the current accessor is being assigned\n   * @param {object} tkn - the identifier token representing the accessor name\n   * @param {boolean} isClass - whether the accessor is part of an ES6 Class\n   *                            definition\n   * @param {boolean} isStatic - whether the accessor is a static method\n   */\n  function saveAccessor(accessorType, props, name, tkn, isClass, isStatic) {\n    var flagName = accessorType === \"get\" ? \"getterToken\" : \"setterToken\";\n    var msg = \"\";\n\n    if (isClass) {\n      if (isStatic) {\n        msg += \"static \";\n      }\n      msg += accessorType + \"ter method\";\n    } else {\n      msg = \"key\";\n    }\n\n    state.tokens.curr.accessorType = accessorType;\n    state.nameStack.set(tkn);\n\n    if (props[name]) {\n      if ((props[name].basic || props[name][flagName]) && name !== \"__proto__\") {\n        warning(\"W075\", state.tokens.next, msg, name);\n      }\n    } else {\n      props[name] = Object.create(null);\n    }\n\n    props[name][flagName] = tkn;\n  }\n\n  function computedPropertyName() {\n    advance(\"[\");\n    if (!state.inES6()) {\n      warning(\"W119\", state.tokens.curr, \"computed property names\", \"6\");\n    }\n    var value = expression(10);\n    advance(\"]\");\n    return value;\n  }\n\n  /**\n   * Test whether a given token is a punctuator matching one of the specified values\n   * @param {Token} token\n   * @param {Array.<string>} values\n   * @returns {boolean}\n   */\n  function checkPunctuators(token, values) {\n    if (token.type === \"(punctuator)\") {\n      return _.contains(values, token.value);\n    }\n    return false;\n  }\n\n  /**\n   * Test whether a given token is a punctuator matching the specified value\n   * @param {Token} token\n   * @param {string} value\n   * @returns {boolean}\n   */\n  function checkPunctuator(token, value) {\n    return token.type === \"(punctuator)\" && token.value === value;\n  }\n\n  // Check whether this function has been reached for a destructuring assign with undeclared values\n  function destructuringAssignOrJsonValue() {\n    // lookup for the assignment (ECMAScript 6 only)\n    // if it has semicolons, it is a block, so go parse it as a block\n    // or it's not a block, but there are assignments, check for undeclared variables\n\n    var block = lookupBlockType();\n    if (block.notJson) {\n      if (!state.inES6() && block.isDestAssign) {\n        warning(\"W104\", state.tokens.curr, \"destructuring assignment\", \"6\");\n      }\n      statements();\n    // otherwise parse json value\n    } else {\n      state.option.laxbreak = true;\n      state.jsonMode = true;\n      jsonValue();\n    }\n  }\n\n  // array comprehension parsing function\n  // parses and defines the three states of the list comprehension in order\n  // to avoid defining global variables, but keeping them to the list comprehension scope\n  // only. The order of the states are as follows:\n  //  * \"use\" which will be the returned iterative part of the list comprehension\n  //  * \"define\" which will define the variables local to the list comprehension\n  //  * \"filter\" which will help filter out values\n\n  var arrayComprehension = function() {\n    var CompArray = function() {\n      this.mode = \"use\";\n      this.variables = [];\n    };\n    var _carrays = [];\n    var _current;\n    function declare(v) {\n      var l = _current.variables.filter(function(elt) {\n        // if it has, change its undef state\n        if (elt.value === v) {\n          elt.undef = false;\n          return v;\n        }\n      }).length;\n      return l !== 0;\n    }\n    function use(v) {\n      var l = _current.variables.filter(function(elt) {\n        // and if it has been defined\n        if (elt.value === v && !elt.undef) {\n          if (elt.unused === true) {\n            elt.unused = false;\n          }\n          return v;\n        }\n      }).length;\n      // otherwise we warn about it\n      return (l === 0);\n    }\n    return { stack: function() {\n          _current = new CompArray();\n          _carrays.push(_current);\n        },\n        unstack: function() {\n          _current.variables.filter(function(v) {\n            if (v.unused)\n              warning(\"W098\", v.token, v.raw_text || v.value);\n            if (v.undef)\n              state.funct[\"(scope)\"].block.use(v.value, v.token);\n          });\n          _carrays.splice(-1, 1);\n          _current = _carrays[_carrays.length - 1];\n        },\n        setState: function(s) {\n          if (_.contains([\"use\", \"define\", \"generate\", \"filter\"], s))\n            _current.mode = s;\n        },\n        check: function(v) {\n          if (!_current) {\n            return;\n          }\n          // When we are in \"use\" state of the list comp, we enqueue that var\n          if (_current && _current.mode === \"use\") {\n            if (use(v)) {\n              _current.variables.push({\n                funct: state.funct,\n                token: state.tokens.curr,\n                value: v,\n                undef: true,\n                unused: false\n              });\n            }\n            return true;\n          // When we are in \"define\" state of the list comp,\n          } else if (_current && _current.mode === \"define\") {\n            // check if the variable has been used previously\n            if (!declare(v)) {\n              _current.variables.push({\n                funct: state.funct,\n                token: state.tokens.curr,\n                value: v,\n                undef: false,\n                unused: true\n              });\n            }\n            return true;\n          // When we are in the \"generate\" state of the list comp,\n          } else if (_current && _current.mode === \"generate\") {\n            state.funct[\"(scope)\"].block.use(v, state.tokens.curr);\n            return true;\n          // When we are in \"filter\" state,\n          } else if (_current && _current.mode === \"filter\") {\n            // we check whether current variable has been declared\n            if (use(v)) {\n              // if not we warn about it\n              state.funct[\"(scope)\"].block.use(v, state.tokens.curr);\n            }\n            return true;\n          }\n          return false;\n        }\n        };\n  };\n\n\n  // Parse JSON\n\n  function jsonValue() {\n    function jsonObject() {\n      var o = {}, t = state.tokens.next;\n      advance(\"{\");\n      if (state.tokens.next.id !== \"}\") {\n        for (;;) {\n          if (state.tokens.next.id === \"(end)\") {\n            error(\"E026\", state.tokens.next, t.line);\n          } else if (state.tokens.next.id === \"}\") {\n            warning(\"W094\", state.tokens.curr);\n            break;\n          } else if (state.tokens.next.id === \",\") {\n            error(\"E028\", state.tokens.next);\n          } else if (state.tokens.next.id !== \"(string)\") {\n            warning(\"W095\", state.tokens.next, state.tokens.next.value);\n          }\n          if (o[state.tokens.next.value] === true) {\n            warning(\"W075\", state.tokens.next, \"key\", state.tokens.next.value);\n          } else if ((state.tokens.next.value === \"__proto__\" &&\n            !state.option.proto) || (state.tokens.next.value === \"__iterator__\" &&\n            !state.option.iterator)) {\n            warning(\"W096\", state.tokens.next, state.tokens.next.value);\n          } else {\n            o[state.tokens.next.value] = true;\n          }\n          advance();\n          advance(\":\");\n          jsonValue();\n          if (state.tokens.next.id !== \",\") {\n            break;\n          }\n          advance(\",\");\n        }\n      }\n      advance(\"}\");\n    }\n\n    function jsonArray() {\n      var t = state.tokens.next;\n      advance(\"[\");\n      if (state.tokens.next.id !== \"]\") {\n        for (;;) {\n          if (state.tokens.next.id === \"(end)\") {\n            error(\"E027\", state.tokens.next, t.line);\n          } else if (state.tokens.next.id === \"]\") {\n            warning(\"W094\", state.tokens.curr);\n            break;\n          } else if (state.tokens.next.id === \",\") {\n            error(\"E028\", state.tokens.next);\n          }\n          jsonValue();\n          if (state.tokens.next.id !== \",\") {\n            break;\n          }\n          advance(\",\");\n        }\n      }\n      advance(\"]\");\n    }\n\n    switch (state.tokens.next.id) {\n    case \"{\":\n      jsonObject();\n      break;\n    case \"[\":\n      jsonArray();\n      break;\n    case \"true\":\n    case \"false\":\n    case \"null\":\n    case \"(number)\":\n    case \"(string)\":\n      advance();\n      break;\n    case \"-\":\n      advance(\"-\");\n      advance(\"(number)\");\n      break;\n    default:\n      error(\"E003\", state.tokens.next);\n    }\n  }\n\n  var escapeRegex = function(str) {\n    return str.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, \"\\\\$&\");\n  };\n\n  // The actual JSHINT function itself.\n  var itself = function(s, o, g) {\n    var i, k, x, reIgnoreStr, reIgnore;\n    var optionKeys;\n    var newOptionObj = {};\n    var newIgnoredObj = {};\n\n    o = _.clone(o);\n    state.reset();\n\n    if (o && o.scope) {\n      JSHINT.scope = o.scope;\n    } else {\n      JSHINT.errors = [];\n      JSHINT.undefs = [];\n      JSHINT.internals = [];\n      JSHINT.blacklist = {};\n      JSHINT.scope = \"(main)\";\n    }\n\n    predefined = Object.create(null);\n    combine(predefined, vars.ecmaIdentifiers[3]);\n    combine(predefined, vars.reservedVars);\n\n    combine(predefined, g || {});\n\n    declared = Object.create(null);\n    var exported = Object.create(null); // Variables that live outside the current file\n\n    function each(obj, cb) {\n      if (!obj)\n        return;\n\n      if (!Array.isArray(obj) && typeof obj === \"object\")\n        obj = Object.keys(obj);\n\n      obj.forEach(cb);\n    }\n\n    if (o) {\n      each(o.predef || null, function(item) {\n        var slice, prop;\n\n        if (item[0] === \"-\") {\n          slice = item.slice(1);\n          JSHINT.blacklist[slice] = slice;\n          // remove from predefined if there\n          delete predefined[slice];\n        } else {\n          prop = Object.getOwnPropertyDescriptor(o.predef, item);\n          predefined[item] = prop ? prop.value : false;\n        }\n      });\n\n      each(o.exported || null, function(item) {\n        exported[item] = true;\n      });\n\n      delete o.predef;\n      delete o.exported;\n\n      optionKeys = Object.keys(o);\n      for (x = 0; x < optionKeys.length; x++) {\n        if (/^-W\\d{3}$/g.test(optionKeys[x])) {\n          newIgnoredObj[optionKeys[x].slice(1)] = true;\n        } else {\n          var optionKey = optionKeys[x];\n          newOptionObj[optionKey] = o[optionKey];\n          if ((optionKey === \"esversion\" && o[optionKey] === 5) ||\n              (optionKey === \"es5\" && o[optionKey])) {\n            warning(\"I003\");\n          }\n\n          if (optionKeys[x] === \"newcap\" && o[optionKey] === false)\n            newOptionObj[\"(explicitNewcap)\"] = true;\n        }\n      }\n    }\n\n    state.option = newOptionObj;\n    state.ignored = newIgnoredObj;\n\n    state.option.indent = state.option.indent || 4;\n    state.option.maxerr = state.option.maxerr || 50;\n\n    indent = 1;\n\n    var scopeManagerInst = scopeManager(state, predefined, exported, declared);\n    scopeManagerInst.on(\"warning\", function(ev) {\n      warning.apply(null, [ ev.code, ev.token].concat(ev.data));\n    });\n\n    scopeManagerInst.on(\"error\", function(ev) {\n      error.apply(null, [ ev.code, ev.token ].concat(ev.data));\n    });\n\n    state.funct = functor(\"(global)\", null, {\n      \"(global)\"    : true,\n      \"(scope)\"     : scopeManagerInst,\n      \"(comparray)\" : arrayComprehension(),\n      \"(metrics)\"   : createMetrics(state.tokens.next)\n    });\n\n    functions = [state.funct];\n    urls = [];\n    stack = null;\n    member = {};\n    membersOnly = null;\n    inblock = false;\n    lookahead = [];\n\n    if (!isString(s) && !Array.isArray(s)) {\n      errorAt(\"E004\", 0);\n      return false;\n    }\n\n    api = {\n      get isJSON() {\n        return state.jsonMode;\n      },\n\n      getOption: function(name) {\n        return state.option[name] || null;\n      },\n\n      getCache: function(name) {\n        return state.cache[name];\n      },\n\n      setCache: function(name, value) {\n        state.cache[name] = value;\n      },\n\n      warn: function(code, data) {\n        warningAt.apply(null, [ code, data.line, data.char ].concat(data.data));\n      },\n\n      on: function(names, listener) {\n        names.split(\" \").forEach(function(name) {\n          emitter.on(name, listener);\n        }.bind(this));\n      }\n    };\n\n    emitter.removeAllListeners();\n    (extraModules || []).forEach(function(func) {\n      func(api);\n    });\n\n    state.tokens.prev = state.tokens.curr = state.tokens.next = state.syntax[\"(begin)\"];\n\n    if (o && o.ignoreDelimiters) {\n\n      if (!Array.isArray(o.ignoreDelimiters)) {\n        o.ignoreDelimiters = [o.ignoreDelimiters];\n      }\n\n      o.ignoreDelimiters.forEach(function(delimiterPair) {\n        if (!delimiterPair.start || !delimiterPair.end)\n            return;\n\n        reIgnoreStr = escapeRegex(delimiterPair.start) +\n                      \"[\\\\s\\\\S]*?\" +\n                      escapeRegex(delimiterPair.end);\n\n        reIgnore = new RegExp(reIgnoreStr, \"ig\");\n\n        s = s.replace(reIgnore, function(match) {\n          return match.replace(/./g, \" \");\n        });\n      });\n    }\n\n    lex = new Lexer(s);\n\n    lex.on(\"warning\", function(ev) {\n      warningAt.apply(null, [ ev.code, ev.line, ev.character].concat(ev.data));\n    });\n\n    lex.on(\"error\", function(ev) {\n      errorAt.apply(null, [ ev.code, ev.line, ev.character ].concat(ev.data));\n    });\n\n    lex.on(\"fatal\", function(ev) {\n      quit(\"E041\", ev.line, ev.from);\n    });\n\n    lex.on(\"Identifier\", function(ev) {\n      emitter.emit(\"Identifier\", ev);\n    });\n\n    lex.on(\"String\", function(ev) {\n      emitter.emit(\"String\", ev);\n    });\n\n    lex.on(\"Number\", function(ev) {\n      emitter.emit(\"Number\", ev);\n    });\n\n    lex.start();\n\n    // Check options\n    for (var name in o) {\n      if (_.has(o, name)) {\n        checkOption(name, state.tokens.curr);\n      }\n    }\n\n    assume();\n\n    // combine the passed globals after we've assumed all our options\n    combine(predefined, g || {});\n\n    //reset values\n    comma.first = true;\n\n    try {\n      advance();\n      switch (state.tokens.next.id) {\n      case \"{\":\n      case \"[\":\n        destructuringAssignOrJsonValue();\n        break;\n      default:\n        directives();\n\n        if (state.directive[\"use strict\"]) {\n          if (state.option.strict !== \"global\") {\n            warning(\"W097\", state.tokens.prev);\n          }\n        }\n\n        statements();\n      }\n\n      if (state.tokens.next.id !== \"(end)\") {\n        quit(\"E041\", state.tokens.curr.line);\n      }\n\n      state.funct[\"(scope)\"].unstack();\n\n    } catch (err) {\n      if (err && err.name === \"JSHintError\") {\n        var nt = state.tokens.next || {};\n        JSHINT.errors.push({\n          scope     : \"(main)\",\n          raw       : err.raw,\n          code      : err.code,\n          reason    : err.message,\n          line      : err.line || nt.line,\n          character : err.character || nt.from\n        }, null);\n      } else {\n        throw err;\n      }\n    }\n\n    // Loop over the listed \"internals\", and check them as well.\n\n    if (JSHINT.scope === \"(main)\") {\n      o = o || {};\n\n      for (i = 0; i < JSHINT.internals.length; i += 1) {\n        k = JSHINT.internals[i];\n        o.scope = k.elem;\n        itself(k.value, o, g);\n      }\n    }\n\n    return JSHINT.errors.length === 0;\n  };\n\n  // Modules.\n  itself.addModule = function(func) {\n    extraModules.push(func);\n  };\n\n  itself.addModule(style.register);\n\n  // Data summary.\n  itself.data = function() {\n    var data = {\n      functions: [],\n      options: state.option\n    };\n\n    var fu, f, i, j, n, globals;\n\n    if (itself.errors.length) {\n      data.errors = itself.errors;\n    }\n\n    if (state.jsonMode) {\n      data.json = true;\n    }\n\n    var impliedGlobals = state.funct[\"(scope)\"].getImpliedGlobals();\n    if (impliedGlobals.length > 0) {\n      data.implieds = impliedGlobals;\n    }\n\n    if (urls.length > 0) {\n      data.urls = urls;\n    }\n\n    globals = state.funct[\"(scope)\"].getUsedOrDefinedGlobals();\n    if (globals.length > 0) {\n      data.globals = globals;\n    }\n\n    for (i = 1; i < functions.length; i += 1) {\n      f = functions[i];\n      fu = {};\n\n      for (j = 0; j < functionicity.length; j += 1) {\n        fu[functionicity[j]] = [];\n      }\n\n      for (j = 0; j < functionicity.length; j += 1) {\n        if (fu[functionicity[j]].length === 0) {\n          delete fu[functionicity[j]];\n        }\n      }\n\n      fu.name = f[\"(name)\"];\n      fu.param = f[\"(params)\"];\n      fu.line = f[\"(line)\"];\n      fu.character = f[\"(character)\"];\n      fu.last = f[\"(last)\"];\n      fu.lastcharacter = f[\"(lastcharacter)\"];\n\n      fu.metrics = {\n        complexity: f[\"(metrics)\"].ComplexityCount,\n        parameters: f[\"(metrics)\"].arity,\n        statements: f[\"(metrics)\"].statementCount\n      };\n\n      data.functions.push(fu);\n    }\n\n    var unuseds = state.funct[\"(scope)\"].getUnuseds();\n    if (unuseds.length > 0) {\n      data.unused = unuseds;\n    }\n\n    for (n in member) {\n      if (typeof member[n] === \"number\") {\n        data.member = member;\n        break;\n      }\n    }\n\n    return data;\n  };\n\n  itself.jshint = itself;\n\n  return itself;\n}());\n\n// Make JSHINT a Node module, if possible.\nif (typeof exports === \"object\" && exports) {\n  exports.JSHINT = JSHINT;\n}\n\n},{\"../lodash\":\"/node_modules/jshint/lodash.js\",\"./lex.js\":\"/node_modules/jshint/src/lex.js\",\"./messages.js\":\"/node_modules/jshint/src/messages.js\",\"./options.js\":\"/node_modules/jshint/src/options.js\",\"./reg.js\":\"/node_modules/jshint/src/reg.js\",\"./scope-manager.js\":\"/node_modules/jshint/src/scope-manager.js\",\"./state.js\":\"/node_modules/jshint/src/state.js\",\"./style.js\":\"/node_modules/jshint/src/style.js\",\"./vars.js\":\"/node_modules/jshint/src/vars.js\",\"events\":\"/node_modules/browserify/node_modules/events/events.js\"}],\"/node_modules/jshint/src/lex.js\":[function(_dereq_,module,exports){\n/*\n * Lexical analysis and token construction.\n */\n\n\"use strict\";\n\nvar _      = _dereq_(\"../lodash\");\nvar events = _dereq_(\"events\");\nvar reg    = _dereq_(\"./reg.js\");\nvar state  = _dereq_(\"./state.js\").state;\n\nvar unicodeData = _dereq_(\"../data/ascii-identifier-data.js\");\nvar asciiIdentifierStartTable = unicodeData.asciiIdentifierStartTable;\nvar asciiIdentifierPartTable = unicodeData.asciiIdentifierPartTable;\n\n// Some of these token types are from JavaScript Parser API\n// while others are specific to JSHint parser.\n// JS Parser API: https://developer.mozilla.org/en-US/docs/SpiderMonkey/Parser_API\n\nvar Token = {\n  Identifier: 1,\n  Punctuator: 2,\n  NumericLiteral: 3,\n  StringLiteral: 4,\n  Comment: 5,\n  Keyword: 6,\n  NullLiteral: 7,\n  BooleanLiteral: 8,\n  RegExp: 9,\n  TemplateHead: 10,\n  TemplateMiddle: 11,\n  TemplateTail: 12,\n  NoSubstTemplate: 13\n};\n\nvar Context = {\n  Block: 1,\n  Template: 2\n};\n\n// Object that handles postponed lexing verifications that checks the parsed\n// environment state.\n\nfunction asyncTrigger() {\n  var _checks = [];\n\n  return {\n    push: function(fn) {\n      _checks.push(fn);\n    },\n\n    check: function() {\n      for (var check = 0; check < _checks.length; ++check) {\n        _checks[check]();\n      }\n\n      _checks.splice(0, _checks.length);\n    }\n  };\n}\n\n/*\n * Lexer for JSHint.\n *\n * This object does a char-by-char scan of the provided source code\n * and produces a sequence of tokens.\n *\n *   var lex = new Lexer(\"var i = 0;\");\n *   lex.start();\n *   lex.token(); // returns the next token\n *\n * You have to use the token() method to move the lexer forward\n * but you don't have to use its return value to get tokens. In addition\n * to token() method returning the next token, the Lexer object also\n * emits events.\n *\n *   lex.on(\"Identifier\", function(data) {\n *     if (data.name.indexOf(\"_\") >= 0) {\n *       // Produce a warning.\n *     }\n *   });\n *\n * Note that the token() method returns tokens in a JSLint-compatible\n * format while the event emitter uses a slightly modified version of\n * Mozilla's JavaScript Parser API. Eventually, we will move away from\n * JSLint format.\n */\nfunction Lexer(source) {\n  var lines = source;\n\n  if (typeof lines === \"string\") {\n    lines = lines\n      .replace(/\\r\\n/g, \"\\n\")\n      .replace(/\\r/g, \"\\n\")\n      .split(\"\\n\");\n  }\n\n  // If the first line is a shebang (#!), make it a blank and move on.\n  // Shebangs are used by Node scripts.\n\n  if (lines[0] && lines[0].substr(0, 2) === \"#!\") {\n    if (lines[0].indexOf(\"node\") !== -1) {\n      state.option.node = true;\n    }\n    lines[0] = \"\";\n  }\n\n  this.emitter = new events.EventEmitter();\n  this.source = source;\n  this.setLines(lines);\n  this.prereg = true;\n\n  this.line = 0;\n  this.char = 1;\n  this.from = 1;\n  this.input = \"\";\n  this.inComment = false;\n  this.context = [];\n  this.templateStarts = [];\n\n  for (var i = 0; i < state.option.indent; i += 1) {\n    state.tab += \" \";\n  }\n\n  // Blank out non-multi-line-commented lines when ignoring linter errors\n  this.ignoreLinterErrors = false;\n}\n\nLexer.prototype = {\n  _lines: [],\n\n  inContext: function(ctxType) {\n    return this.context.length > 0 && this.context[this.context.length - 1].type === ctxType;\n  },\n\n  pushContext: function(ctxType) {\n    this.context.push({ type: ctxType });\n  },\n\n  popContext: function() {\n    return this.context.pop();\n  },\n\n  isContext: function(context) {\n    return this.context.length > 0 && this.context[this.context.length - 1] === context;\n  },\n\n  currentContext: function() {\n    return this.context.length > 0 && this.context[this.context.length - 1];\n  },\n\n  getLines: function() {\n    this._lines = state.lines;\n    return this._lines;\n  },\n\n  setLines: function(val) {\n    this._lines = val;\n    state.lines = this._lines;\n  },\n\n  /*\n   * Return the next i character without actually moving the\n   * char pointer.\n   */\n  peek: function(i) {\n    return this.input.charAt(i || 0);\n  },\n\n  /*\n   * Move the char pointer forward i times.\n   */\n  skip: function(i) {\n    i = i || 1;\n    this.char += i;\n    this.input = this.input.slice(i);\n  },\n\n  /*\n   * Subscribe to a token event. The API for this method is similar\n   * Underscore.js i.e. you can subscribe to multiple events with\n   * one call:\n   *\n   *   lex.on(\"Identifier Number\", function(data) {\n   *     // ...\n   *   });\n   */\n  on: function(names, listener) {\n    names.split(\" \").forEach(function(name) {\n      this.emitter.on(name, listener);\n    }.bind(this));\n  },\n\n  /*\n   * Trigger a token event. All arguments will be passed to each\n   * listener.\n   */\n  trigger: function() {\n    this.emitter.emit.apply(this.emitter, Array.prototype.slice.call(arguments));\n  },\n\n  /*\n   * Postpone a token event. the checking condition is set as\n   * last parameter, and the trigger function is called in a\n   * stored callback. To be later called using the check() function\n   * by the parser. This avoids parser's peek() to give the lexer\n   * a false context.\n   */\n  triggerAsync: function(type, args, checks, fn) {\n    checks.push(function() {\n      if (fn()) {\n        this.trigger(type, args);\n      }\n    }.bind(this));\n  },\n\n  /*\n   * Extract a punctuator out of the next sequence of characters\n   * or return 'null' if its not possible.\n   *\n   * This method's implementation was heavily influenced by the\n   * scanPunctuator function in the Esprima parser's source code.\n   */\n  scanPunctuator: function() {\n    var ch1 = this.peek();\n    var ch2, ch3, ch4;\n\n    switch (ch1) {\n    // Most common single-character punctuators\n    case \".\":\n      if ((/^[0-9]$/).test(this.peek(1))) {\n        return null;\n      }\n      if (this.peek(1) === \".\" && this.peek(2) === \".\") {\n        return {\n          type: Token.Punctuator,\n          value: \"...\"\n        };\n      }\n      /* falls through */\n    case \"(\":\n    case \")\":\n    case \";\":\n    case \",\":\n    case \"[\":\n    case \"]\":\n    case \":\":\n    case \"~\":\n    case \"?\":\n      return {\n        type: Token.Punctuator,\n        value: ch1\n      };\n\n    // A block/object opener\n    case \"{\":\n      this.pushContext(Context.Block);\n      return {\n        type: Token.Punctuator,\n        value: ch1\n      };\n\n    // A block/object closer\n    case \"}\":\n      if (this.inContext(Context.Block)) {\n        this.popContext();\n      }\n      return {\n        type: Token.Punctuator,\n        value: ch1\n      };\n\n    // A pound sign (for Node shebangs)\n    case \"#\":\n      return {\n        type: Token.Punctuator,\n        value: ch1\n      };\n\n    // We're at the end of input\n    case \"\":\n      return null;\n    }\n\n    // Peek more characters\n\n    ch2 = this.peek(1);\n    ch3 = this.peek(2);\n    ch4 = this.peek(3);\n\n    // 4-character punctuator: >>>=\n\n    if (ch1 === \">\" && ch2 === \">\" && ch3 === \">\" && ch4 === \"=\") {\n      return {\n        type: Token.Punctuator,\n        value: \">>>=\"\n      };\n    }\n\n    // 3-character punctuators: === !== >>> <<= >>=\n\n    if (ch1 === \"=\" && ch2 === \"=\" && ch3 === \"=\") {\n      return {\n        type: Token.Punctuator,\n        value: \"===\"\n      };\n    }\n\n    if (ch1 === \"!\" && ch2 === \"=\" && ch3 === \"=\") {\n      return {\n        type: Token.Punctuator,\n        value: \"!==\"\n      };\n    }\n\n    if (ch1 === \">\" && ch2 === \">\" && ch3 === \">\") {\n      return {\n        type: Token.Punctuator,\n        value: \">>>\"\n      };\n    }\n\n    if (ch1 === \"<\" && ch2 === \"<\" && ch3 === \"=\") {\n      return {\n        type: Token.Punctuator,\n        value: \"<<=\"\n      };\n    }\n\n    if (ch1 === \">\" && ch2 === \">\" && ch3 === \"=\") {\n      return {\n        type: Token.Punctuator,\n        value: \">>=\"\n      };\n    }\n\n    // Fat arrow punctuator\n    if (ch1 === \"=\" && ch2 === \">\") {\n      return {\n        type: Token.Punctuator,\n        value: ch1 + ch2\n      };\n    }\n\n    // 2-character punctuators: <= >= == != ++ -- << >> && ||\n    // += -= *= %= &= |= ^= (but not /=, see below)\n    if (ch1 === ch2 && (\"+-<>&|\".indexOf(ch1) >= 0)) {\n      return {\n        type: Token.Punctuator,\n        value: ch1 + ch2\n      };\n    }\n\n    if (\"<>=!+-*%&|^\".indexOf(ch1) >= 0) {\n      if (ch2 === \"=\") {\n        return {\n          type: Token.Punctuator,\n          value: ch1 + ch2\n        };\n      }\n\n      return {\n        type: Token.Punctuator,\n        value: ch1\n      };\n    }\n\n    // Special case: /=.\n\n    if (ch1 === \"/\") {\n      if (ch2 === \"=\") {\n        return {\n          type: Token.Punctuator,\n          value: \"/=\"\n        };\n      }\n\n      return {\n        type: Token.Punctuator,\n        value: \"/\"\n      };\n    }\n\n    return null;\n  },\n\n  /*\n   * Extract a comment out of the next sequence of characters and/or\n   * lines or return 'null' if its not possible. Since comments can\n   * span across multiple lines this method has to move the char\n   * pointer.\n   *\n   * In addition to normal JavaScript comments (// and /*) this method\n   * also recognizes JSHint- and JSLint-specific comments such as\n   * /*jshint, /*jslint, /*globals and so on.\n   */\n  scanComments: function() {\n    var ch1 = this.peek();\n    var ch2 = this.peek(1);\n    var rest = this.input.substr(2);\n    var startLine = this.line;\n    var startChar = this.char;\n    var self = this;\n\n    // Create a comment token object and make sure it\n    // has all the data JSHint needs to work with special\n    // comments.\n\n    function commentToken(label, body, opt) {\n      var special = [\"jshint\", \"jslint\", \"members\", \"member\", \"globals\", \"global\", \"exported\"];\n      var isSpecial = false;\n      var value = label + body;\n      var commentType = \"plain\";\n      opt = opt || {};\n\n      if (opt.isMultiline) {\n        value += \"*/\";\n      }\n\n      body = body.replace(/\\n/g, \" \");\n\n      if (label === \"/*\" && reg.fallsThrough.test(body)) {\n        isSpecial = true;\n        commentType = \"falls through\";\n      }\n\n      special.forEach(function(str) {\n        if (isSpecial) {\n          return;\n        }\n\n        // Don't recognize any special comments other than jshint for single-line\n        // comments. This introduced many problems with legit comments.\n        if (label === \"//\" && str !== \"jshint\") {\n          return;\n        }\n\n        if (body.charAt(str.length) === \" \" && body.substr(0, str.length) === str) {\n          isSpecial = true;\n          label = label + str;\n          body = body.substr(str.length);\n        }\n\n        if (!isSpecial && body.charAt(0) === \" \" && body.charAt(str.length + 1) === \" \" &&\n          body.substr(1, str.length) === str) {\n          isSpecial = true;\n          label = label + \" \" + str;\n          body = body.substr(str.length + 1);\n        }\n\n        if (!isSpecial) {\n          return;\n        }\n\n        switch (str) {\n        case \"member\":\n          commentType = \"members\";\n          break;\n        case \"global\":\n          commentType = \"globals\";\n          break;\n        default:\n          var options = body.split(\":\").map(function(v) {\n            return v.replace(/^\\s+/, \"\").replace(/\\s+$/, \"\");\n          });\n\n          if (options.length === 2) {\n            switch (options[0]) {\n            case \"ignore\":\n              switch (options[1]) {\n              case \"start\":\n                self.ignoringLinterErrors = true;\n                isSpecial = false;\n                break;\n              case \"end\":\n                self.ignoringLinterErrors = false;\n                isSpecial = false;\n                break;\n              }\n            }\n          }\n\n          commentType = str;\n        }\n      });\n\n      return {\n        type: Token.Comment,\n        commentType: commentType,\n        value: value,\n        body: body,\n        isSpecial: isSpecial,\n        isMultiline: opt.isMultiline || false,\n        isMalformed: opt.isMalformed || false\n      };\n    }\n\n    // End of unbegun comment. Raise an error and skip that input.\n    if (ch1 === \"*\" && ch2 === \"/\") {\n      this.trigger(\"error\", {\n        code: \"E018\",\n        line: startLine,\n        character: startChar\n      });\n\n      this.skip(2);\n      return null;\n    }\n\n    // Comments must start either with // or /*\n    if (ch1 !== \"/\" || (ch2 !== \"*\" && ch2 !== \"/\")) {\n      return null;\n    }\n\n    // One-line comment\n    if (ch2 === \"/\") {\n      this.skip(this.input.length); // Skip to the EOL.\n      return commentToken(\"//\", rest);\n    }\n\n    var body = \"\";\n\n    /* Multi-line comment */\n    if (ch2 === \"*\") {\n      this.inComment = true;\n      this.skip(2);\n\n      while (this.peek() !== \"*\" || this.peek(1) !== \"/\") {\n        if (this.peek() === \"\") { // End of Line\n          body += \"\\n\";\n\n          // If we hit EOF and our comment is still unclosed,\n          // trigger an error and end the comment implicitly.\n          if (!this.nextLine()) {\n            this.trigger(\"error\", {\n              code: \"E017\",\n              line: startLine,\n              character: startChar\n            });\n\n            this.inComment = false;\n            return commentToken(\"/*\", body, {\n              isMultiline: true,\n              isMalformed: true\n            });\n          }\n        } else {\n          body += this.peek();\n          this.skip();\n        }\n      }\n\n      this.skip(2);\n      this.inComment = false;\n      return commentToken(\"/*\", body, { isMultiline: true });\n    }\n  },\n\n  /*\n   * Extract a keyword out of the next sequence of characters or\n   * return 'null' if its not possible.\n   */\n  scanKeyword: function() {\n    var result = /^[a-zA-Z_$][a-zA-Z0-9_$]*/.exec(this.input);\n    var keywords = [\n      \"if\", \"in\", \"do\", \"var\", \"for\", \"new\",\n      \"try\", \"let\", \"this\", \"else\", \"case\",\n      \"void\", \"with\", \"enum\", \"while\", \"break\",\n      \"catch\", \"throw\", \"const\", \"yield\", \"class\",\n      \"super\", \"return\", \"typeof\", \"delete\",\n      \"switch\", \"export\", \"import\", \"default\",\n      \"finally\", \"extends\", \"function\", \"continue\",\n      \"debugger\", \"instanceof\"\n    ];\n\n    if (result && keywords.indexOf(result[0]) >= 0) {\n      return {\n        type: Token.Keyword,\n        value: result[0]\n      };\n    }\n\n    return null;\n  },\n\n  /*\n   * Extract a JavaScript identifier out of the next sequence of\n   * characters or return 'null' if its not possible. In addition,\n   * to Identifier this method can also produce BooleanLiteral\n   * (true/false) and NullLiteral (null).\n   */\n  scanIdentifier: function() {\n    var id = \"\";\n    var index = 0;\n    var type, char;\n\n    function isNonAsciiIdentifierStart(code) {\n      return code > 256;\n    }\n\n    function isNonAsciiIdentifierPart(code) {\n      return code > 256;\n    }\n\n    function isHexDigit(str) {\n      return (/^[0-9a-fA-F]$/).test(str);\n    }\n\n    var readUnicodeEscapeSequence = function() {\n      /*jshint validthis:true */\n      index += 1;\n\n      if (this.peek(index) !== \"u\") {\n        return null;\n      }\n\n      var ch1 = this.peek(index + 1);\n      var ch2 = this.peek(index + 2);\n      var ch3 = this.peek(index + 3);\n      var ch4 = this.peek(index + 4);\n      var code;\n\n      if (isHexDigit(ch1) && isHexDigit(ch2) && isHexDigit(ch3) && isHexDigit(ch4)) {\n        code = parseInt(ch1 + ch2 + ch3 + ch4, 16);\n\n        if (asciiIdentifierPartTable[code] || isNonAsciiIdentifierPart(code)) {\n          index += 5;\n          return \"\\\\u\" + ch1 + ch2 + ch3 + ch4;\n        }\n\n        return null;\n      }\n\n      return null;\n    }.bind(this);\n\n    var getIdentifierStart = function() {\n      /*jshint validthis:true */\n      var chr = this.peek(index);\n      var code = chr.charCodeAt(0);\n\n      if (code === 92) {\n        return readUnicodeEscapeSequence();\n      }\n\n      if (code < 128) {\n        if (asciiIdentifierStartTable[code]) {\n          index += 1;\n          return chr;\n        }\n\n        return null;\n      }\n\n      if (isNonAsciiIdentifierStart(code)) {\n        index += 1;\n        return chr;\n      }\n\n      return null;\n    }.bind(this);\n\n    var getIdentifierPart = function() {\n      /*jshint validthis:true */\n      var chr = this.peek(index);\n      var code = chr.charCodeAt(0);\n\n      if (code === 92) {\n        return readUnicodeEscapeSequence();\n      }\n\n      if (code < 128) {\n        if (asciiIdentifierPartTable[code]) {\n          index += 1;\n          return chr;\n        }\n\n        return null;\n      }\n\n      if (isNonAsciiIdentifierPart(code)) {\n        index += 1;\n        return chr;\n      }\n\n      return null;\n    }.bind(this);\n\n    function removeEscapeSequences(id) {\n      return id.replace(/\\\\u([0-9a-fA-F]{4})/g, function(m0, codepoint) {\n        return String.fromCharCode(parseInt(codepoint, 16));\n      });\n    }\n\n    char = getIdentifierStart();\n    if (char === null) {\n      return null;\n    }\n\n    id = char;\n    for (;;) {\n      char = getIdentifierPart();\n\n      if (char === null) {\n        break;\n      }\n\n      id += char;\n    }\n\n    switch (id) {\n    case \"true\":\n    case \"false\":\n      type = Token.BooleanLiteral;\n      break;\n    case \"null\":\n      type = Token.NullLiteral;\n      break;\n    default:\n      type = Token.Identifier;\n    }\n\n    return {\n      type: type,\n      value: removeEscapeSequences(id),\n      text: id,\n      tokenLength: id.length\n    };\n  },\n\n  /*\n   * Extract a numeric literal out of the next sequence of\n   * characters or return 'null' if its not possible. This method\n   * supports all numeric literals described in section 7.8.3\n   * of the EcmaScript 5 specification.\n   *\n   * This method's implementation was heavily influenced by the\n   * scanNumericLiteral function in the Esprima parser's source code.\n   */\n  scanNumericLiteral: function() {\n    var index = 0;\n    var value = \"\";\n    var length = this.input.length;\n    var char = this.peek(index);\n    var bad;\n    var isAllowedDigit = isDecimalDigit;\n    var base = 10;\n    var isLegacy = false;\n\n    function isDecimalDigit(str) {\n      return (/^[0-9]$/).test(str);\n    }\n\n    function isOctalDigit(str) {\n      return (/^[0-7]$/).test(str);\n    }\n\n    function isBinaryDigit(str) {\n      return (/^[01]$/).test(str);\n    }\n\n    function isHexDigit(str) {\n      return (/^[0-9a-fA-F]$/).test(str);\n    }\n\n    function isIdentifierStart(ch) {\n      return (ch === \"$\") || (ch === \"_\") || (ch === \"\\\\\") ||\n        (ch >= \"a\" && ch <= \"z\") || (ch >= \"A\" && ch <= \"Z\");\n    }\n\n    // Numbers must start either with a decimal digit or a point.\n\n    if (char !== \".\" && !isDecimalDigit(char)) {\n      return null;\n    }\n\n    if (char !== \".\") {\n      value = this.peek(index);\n      index += 1;\n      char = this.peek(index);\n\n      if (value === \"0\") {\n        // Base-16 numbers.\n        if (char === \"x\" || char === \"X\") {\n          isAllowedDigit = isHexDigit;\n          base = 16;\n\n          index += 1;\n          value += char;\n        }\n\n        // Base-8 numbers.\n        if (char === \"o\" || char === \"O\") {\n          isAllowedDigit = isOctalDigit;\n          base = 8;\n\n          if (!state.inES6(true)) {\n            this.trigger(\"warning\", {\n              code: \"W119\",\n              line: this.line,\n              character: this.char,\n              data: [ \"Octal integer literal\", \"6\" ]\n            });\n          }\n\n          index += 1;\n          value += char;\n        }\n\n        // Base-2 numbers.\n        if (char === \"b\" || char === \"B\") {\n          isAllowedDigit = isBinaryDigit;\n          base = 2;\n\n          if (!state.inES6(true)) {\n            this.trigger(\"warning\", {\n              code: \"W119\",\n              line: this.line,\n              character: this.char,\n              data: [ \"Binary integer literal\", \"6\" ]\n            });\n          }\n\n          index += 1;\n          value += char;\n        }\n\n        // Legacy base-8 numbers.\n        if (isOctalDigit(char)) {\n          isAllowedDigit = isOctalDigit;\n          base = 8;\n          isLegacy = true;\n          bad = false;\n\n          index += 1;\n          value += char;\n        }\n\n        // Decimal numbers that start with '0' such as '09' are illegal\n        // but we still parse them and return as malformed.\n\n        if (!isOctalDigit(char) && isDecimalDigit(char)) {\n          index += 1;\n          value += char;\n        }\n      }\n\n      while (index < length) {\n        char = this.peek(index);\n\n        if (isLegacy && isDecimalDigit(char)) {\n          // Numbers like '019' (note the 9) are not valid octals\n          // but we still parse them and mark as malformed.\n          bad = true;\n        } else if (!isAllowedDigit(char)) {\n          break;\n        }\n        value += char;\n        index += 1;\n      }\n\n      if (isAllowedDigit !== isDecimalDigit) {\n        if (!isLegacy && value.length <= 2) { // 0x\n          return {\n            type: Token.NumericLiteral,\n            value: value,\n            isMalformed: true\n          };\n        }\n\n        if (index < length) {\n          char = this.peek(index);\n          if (isIdentifierStart(char)) {\n            return null;\n          }\n        }\n\n        return {\n          type: Token.NumericLiteral,\n          value: value,\n          base: base,\n          isLegacy: isLegacy,\n          isMalformed: false\n        };\n      }\n    }\n\n    // Decimal digits.\n\n    if (char === \".\") {\n      value += char;\n      index += 1;\n\n      while (index < length) {\n        char = this.peek(index);\n        if (!isDecimalDigit(char)) {\n          break;\n        }\n        value += char;\n        index += 1;\n      }\n    }\n\n    // Exponent part.\n\n    if (char === \"e\" || char === \"E\") {\n      value += char;\n      index += 1;\n      char = this.peek(index);\n\n      if (char === \"+\" || char === \"-\") {\n        value += this.peek(index);\n        index += 1;\n      }\n\n      char = this.peek(index);\n      if (isDecimalDigit(char)) {\n        value += char;\n        index += 1;\n\n        while (index < length) {\n          char = this.peek(index);\n          if (!isDecimalDigit(char)) {\n            break;\n          }\n          value += char;\n          index += 1;\n        }\n      } else {\n        return null;\n      }\n    }\n\n    if (index < length) {\n      char = this.peek(index);\n      if (isIdentifierStart(char)) {\n        return null;\n      }\n    }\n\n    return {\n      type: Token.NumericLiteral,\n      value: value,\n      base: base,\n      isMalformed: !isFinite(value)\n    };\n  },\n\n\n  // Assumes previously parsed character was \\ (=== '\\\\') and was not skipped.\n  scanEscapeSequence: function(checks) {\n    var allowNewLine = false;\n    var jump = 1;\n    this.skip();\n    var char = this.peek();\n\n    switch (char) {\n    case \"'\":\n      this.triggerAsync(\"warning\", {\n        code: \"W114\",\n        line: this.line,\n        character: this.char,\n        data: [ \"\\\\'\" ]\n      }, checks, function() {return state.jsonMode; });\n      break;\n    case \"b\":\n      char = \"\\\\b\";\n      break;\n    case \"f\":\n      char = \"\\\\f\";\n      break;\n    case \"n\":\n      char = \"\\\\n\";\n      break;\n    case \"r\":\n      char = \"\\\\r\";\n      break;\n    case \"t\":\n      char = \"\\\\t\";\n      break;\n    case \"0\":\n      char = \"\\\\0\";\n\n      // Octal literals fail in strict mode.\n      // Check if the number is between 00 and 07.\n      var n = parseInt(this.peek(1), 10);\n      this.triggerAsync(\"warning\", {\n        code: \"W115\",\n        line: this.line,\n        character: this.char\n      }, checks,\n      function() { return n >= 0 && n <= 7 && state.isStrict(); });\n      break;\n    case \"u\":\n      var hexCode = this.input.substr(1, 4);\n      var code = parseInt(hexCode, 16);\n      if (isNaN(code)) {\n        this.trigger(\"warning\", {\n          code: \"W052\",\n          line: this.line,\n          character: this.char,\n          data: [ \"u\" + hexCode ]\n        });\n      }\n      char = String.fromCharCode(code);\n      jump = 5;\n      break;\n    case \"v\":\n      this.triggerAsync(\"warning\", {\n        code: \"W114\",\n        line: this.line,\n        character: this.char,\n        data: [ \"\\\\v\" ]\n      }, checks, function() { return state.jsonMode; });\n\n      char = \"\\v\";\n      break;\n    case \"x\":\n      var  x = parseInt(this.input.substr(1, 2), 16);\n\n      this.triggerAsync(\"warning\", {\n        code: \"W114\",\n        line: this.line,\n        character: this.char,\n        data: [ \"\\\\x-\" ]\n      }, checks, function() { return state.jsonMode; });\n\n      char = String.fromCharCode(x);\n      jump = 3;\n      break;\n    case \"\\\\\":\n      char = \"\\\\\\\\\";\n      break;\n    case \"\\\"\":\n      char = \"\\\\\\\"\";\n      break;\n    case \"/\":\n      break;\n    case \"\":\n      allowNewLine = true;\n      char = \"\";\n      break;\n    }\n\n    return { char: char, jump: jump, allowNewLine: allowNewLine };\n  },\n\n  /*\n   * Extract a template literal out of the next sequence of characters\n   * and/or lines or return 'null' if its not possible. Since template\n   * literals can span across multiple lines, this method has to move\n   * the char pointer.\n   */\n  scanTemplateLiteral: function(checks) {\n    var tokenType;\n    var value = \"\";\n    var ch;\n    var startLine = this.line;\n    var startChar = this.char;\n    var depth = this.templateStarts.length;\n\n    if (!state.inES6(true)) {\n      // Only lex template strings in ESNext mode.\n      return null;\n    } else if (this.peek() === \"`\") {\n      // Template must start with a backtick.\n      tokenType = Token.TemplateHead;\n      this.templateStarts.push({ line: this.line, char: this.char });\n      depth = this.templateStarts.length;\n      this.skip(1);\n      this.pushContext(Context.Template);\n    } else if (this.inContext(Context.Template) && this.peek() === \"}\") {\n      // If we're in a template context, and we have a '}', lex a TemplateMiddle.\n      tokenType = Token.TemplateMiddle;\n    } else {\n      // Go lex something else.\n      return null;\n    }\n\n    while (this.peek() !== \"`\") {\n      while ((ch = this.peek()) === \"\") {\n        value += \"\\n\";\n        if (!this.nextLine()) {\n          // Unclosed template literal --- point to the starting \"`\"\n          var startPos = this.templateStarts.pop();\n          this.trigger(\"error\", {\n            code: \"E052\",\n            line: startPos.line,\n            character: startPos.char\n          });\n          return {\n            type: tokenType,\n            value: value,\n            startLine: startLine,\n            startChar: startChar,\n            isUnclosed: true,\n            depth: depth,\n            context: this.popContext()\n          };\n        }\n      }\n\n      if (ch === '$' && this.peek(1) === '{') {\n        value += '${';\n        this.skip(2);\n        return {\n          type: tokenType,\n          value: value,\n          startLine: startLine,\n          startChar: startChar,\n          isUnclosed: false,\n          depth: depth,\n          context: this.currentContext()\n        };\n      } else if (ch === '\\\\') {\n        var escape = this.scanEscapeSequence(checks);\n        value += escape.char;\n        this.skip(escape.jump);\n      } else if (ch !== '`') {\n        // Otherwise, append the value and continue.\n        value += ch;\n        this.skip(1);\n      }\n    }\n\n    // Final value is either NoSubstTemplate or TemplateTail\n    tokenType = tokenType === Token.TemplateHead ? Token.NoSubstTemplate : Token.TemplateTail;\n    this.skip(1);\n    this.templateStarts.pop();\n\n    return {\n      type: tokenType,\n      value: value,\n      startLine: startLine,\n      startChar: startChar,\n      isUnclosed: false,\n      depth: depth,\n      context: this.popContext()\n    };\n  },\n\n  /*\n   * Extract a string out of the next sequence of characters and/or\n   * lines or return 'null' if its not possible. Since strings can\n   * span across multiple lines this method has to move the char\n   * pointer.\n   *\n   * This method recognizes pseudo-multiline JavaScript strings:\n   *\n   *   var str = \"hello\\\n   *   world\";\n   */\n  scanStringLiteral: function(checks) {\n    /*jshint loopfunc:true */\n    var quote = this.peek();\n\n    // String must start with a quote.\n    if (quote !== \"\\\"\" && quote !== \"'\") {\n      return null;\n    }\n\n    // In JSON strings must always use double quotes.\n    this.triggerAsync(\"warning\", {\n      code: \"W108\",\n      line: this.line,\n      character: this.char // +1?\n    }, checks, function() { return state.jsonMode && quote !== \"\\\"\"; });\n\n    var value = \"\";\n    var startLine = this.line;\n    var startChar = this.char;\n    var allowNewLine = false;\n\n    this.skip();\n\n    while (this.peek() !== quote) {\n      if (this.peek() === \"\") { // End Of Line\n\n        // If an EOL is not preceded by a backslash, show a warning\n        // and proceed like it was a legit multi-line string where\n        // author simply forgot to escape the newline symbol.\n        //\n        // Another approach is to implicitly close a string on EOL\n        // but it generates too many false positives.\n\n        if (!allowNewLine) {\n          this.trigger(\"warning\", {\n            code: \"W112\",\n            line: this.line,\n            character: this.char\n          });\n        } else {\n          allowNewLine = false;\n\n          // Otherwise show a warning if multistr option was not set.\n          // For JSON, show warning no matter what.\n\n          this.triggerAsync(\"warning\", {\n            code: \"W043\",\n            line: this.line,\n            character: this.char\n          }, checks, function() { return !state.option.multistr; });\n\n          this.triggerAsync(\"warning\", {\n            code: \"W042\",\n            line: this.line,\n            character: this.char\n          }, checks, function() { return state.jsonMode && state.option.multistr; });\n        }\n\n        // If we get an EOF inside of an unclosed string, show an\n        // error and implicitly close it at the EOF point.\n\n        if (!this.nextLine()) {\n          this.trigger(\"error\", {\n            code: \"E029\",\n            line: startLine,\n            character: startChar\n          });\n\n          return {\n            type: Token.StringLiteral,\n            value: value,\n            startLine: startLine,\n            startChar: startChar,\n            isUnclosed: true,\n            quote: quote\n          };\n        }\n\n      } else { // Any character other than End Of Line\n\n        allowNewLine = false;\n        var char = this.peek();\n        var jump = 1; // A length of a jump, after we're done\n                      // parsing this character.\n\n        if (char < \" \") {\n          // Warn about a control character in a string.\n          this.trigger(\"warning\", {\n            code: \"W113\",\n            line: this.line,\n            character: this.char,\n            data: [ \"<non-printable>\" ]\n          });\n        }\n\n        // Special treatment for some escaped characters.\n        if (char === \"\\\\\") {\n          var parsed = this.scanEscapeSequence(checks);\n          char = parsed.char;\n          jump = parsed.jump;\n          allowNewLine = parsed.allowNewLine;\n        }\n\n        value += char;\n        this.skip(jump);\n      }\n    }\n\n    this.skip();\n    return {\n      type: Token.StringLiteral,\n      value: value,\n      startLine: startLine,\n      startChar: startChar,\n      isUnclosed: false,\n      quote: quote\n    };\n  },\n\n  /*\n   * Extract a regular expression out of the next sequence of\n   * characters and/or lines or return 'null' if its not possible.\n   *\n   * This method is platform dependent: it accepts almost any\n   * regular expression values but then tries to compile and run\n   * them using system's RegExp object. This means that there are\n   * rare edge cases where one JavaScript engine complains about\n   * your regular expression while others don't.\n   */\n  scanRegExp: function() {\n    var index = 0;\n    var length = this.input.length;\n    var char = this.peek();\n    var value = char;\n    var body = \"\";\n    var flags = [];\n    var malformed = false;\n    var isCharSet = false;\n    var terminated;\n\n    var scanUnexpectedChars = function() {\n      // Unexpected control character\n      if (char < \" \") {\n        malformed = true;\n        this.trigger(\"warning\", {\n          code: \"W048\",\n          line: this.line,\n          character: this.char\n        });\n      }\n\n      // Unexpected escaped character\n      if (char === \"<\") {\n        malformed = true;\n        this.trigger(\"warning\", {\n          code: \"W049\",\n          line: this.line,\n          character: this.char,\n          data: [ char ]\n        });\n      }\n    }.bind(this);\n\n    // Regular expressions must start with '/'\n    if (!this.prereg || char !== \"/\") {\n      return null;\n    }\n\n    index += 1;\n    terminated = false;\n\n    // Try to get everything in between slashes. A couple of\n    // cases aside (see scanUnexpectedChars) we don't really\n    // care whether the resulting expression is valid or not.\n    // We will check that later using the RegExp object.\n\n    while (index < length) {\n      char = this.peek(index);\n      value += char;\n      body += char;\n\n      if (isCharSet) {\n        if (char === \"]\") {\n          if (this.peek(index - 1) !== \"\\\\\" || this.peek(index - 2) === \"\\\\\") {\n            isCharSet = false;\n          }\n        }\n\n        if (char === \"\\\\\") {\n          index += 1;\n          char = this.peek(index);\n          body += char;\n          value += char;\n\n          scanUnexpectedChars();\n        }\n\n        index += 1;\n        continue;\n      }\n\n      if (char === \"\\\\\") {\n        index += 1;\n        char = this.peek(index);\n        body += char;\n        value += char;\n\n        scanUnexpectedChars();\n\n        if (char === \"/\") {\n          index += 1;\n          continue;\n        }\n\n        if (char === \"[\") {\n          index += 1;\n          continue;\n        }\n      }\n\n      if (char === \"[\") {\n        isCharSet = true;\n        index += 1;\n        continue;\n      }\n\n      if (char === \"/\") {\n        body = body.substr(0, body.length - 1);\n        terminated = true;\n        index += 1;\n        break;\n      }\n\n      index += 1;\n    }\n\n    // A regular expression that was never closed is an\n    // error from which we cannot recover.\n\n    if (!terminated) {\n      this.trigger(\"error\", {\n        code: \"E015\",\n        line: this.line,\n        character: this.from\n      });\n\n      return void this.trigger(\"fatal\", {\n        line: this.line,\n        from: this.from\n      });\n    }\n\n    // Parse flags (if any).\n\n    while (index < length) {\n      char = this.peek(index);\n      if (!/[gim]/.test(char)) {\n        break;\n      }\n      flags.push(char);\n      value += char;\n      index += 1;\n    }\n\n    // Check regular expression for correctness.\n\n    try {\n      new RegExp(body, flags.join(\"\"));\n    } catch (err) {\n      malformed = true;\n      this.trigger(\"error\", {\n        code: \"E016\",\n        line: this.line,\n        character: this.char,\n        data: [ err.message ] // Platform dependent!\n      });\n    }\n\n    return {\n      type: Token.RegExp,\n      value: value,\n      flags: flags,\n      isMalformed: malformed\n    };\n  },\n\n  /*\n   * Scan for any occurrence of non-breaking spaces. Non-breaking spaces\n   * can be mistakenly typed on OS X with option-space. Non UTF-8 web\n   * pages with non-breaking pages produce syntax errors.\n   */\n  scanNonBreakingSpaces: function() {\n    return state.option.nonbsp ?\n      this.input.search(/(\\u00A0)/) : -1;\n  },\n\n  /*\n   * Scan for characters that get silently deleted by one or more browsers.\n   */\n  scanUnsafeChars: function() {\n    return this.input.search(reg.unsafeChars);\n  },\n\n  /*\n   * Produce the next raw token or return 'null' if no tokens can be matched.\n   * This method skips over all space characters.\n   */\n  next: function(checks) {\n    this.from = this.char;\n\n    // Move to the next non-space character.\n    var start;\n    if (/\\s/.test(this.peek())) {\n      start = this.char;\n\n      while (/\\s/.test(this.peek())) {\n        this.from += 1;\n        this.skip();\n      }\n    }\n\n    // Methods that work with multi-line structures and move the\n    // character pointer.\n\n    var match = this.scanComments() ||\n      this.scanStringLiteral(checks) ||\n      this.scanTemplateLiteral(checks);\n\n    if (match) {\n      return match;\n    }\n\n    // Methods that don't move the character pointer.\n\n    match =\n      this.scanRegExp() ||\n      this.scanPunctuator() ||\n      this.scanKeyword() ||\n      this.scanIdentifier() ||\n      this.scanNumericLiteral();\n\n    if (match) {\n      this.skip(match.tokenLength || match.value.length);\n      return match;\n    }\n\n    // No token could be matched, give up.\n\n    return null;\n  },\n\n  /*\n   * Switch to the next line and reset all char pointers. Once\n   * switched, this method also checks for other minor warnings.\n   */\n  nextLine: function() {\n    var char;\n\n    if (this.line >= this.getLines().length) {\n      return false;\n    }\n\n    this.input = this.getLines()[this.line];\n    this.line += 1;\n    this.char = 1;\n    this.from = 1;\n\n    var inputTrimmed = this.input.trim();\n\n    var startsWith = function() {\n      return _.some(arguments, function(prefix) {\n        return inputTrimmed.indexOf(prefix) === 0;\n      });\n    };\n\n    var endsWith = function() {\n      return _.some(arguments, function(suffix) {\n        return inputTrimmed.indexOf(suffix, inputTrimmed.length - suffix.length) !== -1;\n      });\n    };\n\n    // If we are ignoring linter errors, replace the input with empty string\n    // if it doesn't already at least start or end a multi-line comment\n    if (this.ignoringLinterErrors === true) {\n      if (!startsWith(\"/*\", \"//\") && !(this.inComment && endsWith(\"*/\"))) {\n        this.input = \"\";\n      }\n    }\n\n    char = this.scanNonBreakingSpaces();\n    if (char >= 0) {\n      this.trigger(\"warning\", { code: \"W125\", line: this.line, character: char + 1 });\n    }\n\n    this.input = this.input.replace(/\\t/g, state.tab);\n    char = this.scanUnsafeChars();\n\n    if (char >= 0) {\n      this.trigger(\"warning\", { code: \"W100\", line: this.line, character: char });\n    }\n\n    // If there is a limit on line length, warn when lines get too\n    // long.\n\n    if (!this.ignoringLinterErrors && state.option.maxlen &&\n      state.option.maxlen < this.input.length) {\n      var inComment = this.inComment ||\n        startsWith.call(inputTrimmed, \"//\") ||\n        startsWith.call(inputTrimmed, \"/*\");\n\n      var shouldTriggerError = !inComment || !reg.maxlenException.test(inputTrimmed);\n\n      if (shouldTriggerError) {\n        this.trigger(\"warning\", { code: \"W101\", line: this.line, character: this.input.length });\n      }\n    }\n\n    return true;\n  },\n\n  /*\n   * This is simply a synonym for nextLine() method with a friendlier\n   * public name.\n   */\n  start: function() {\n    this.nextLine();\n  },\n\n  /*\n   * Produce the next token. This function is called by advance() to get\n   * the next token. It returns a token in a JSLint-compatible format.\n   */\n  token: function() {\n    /*jshint loopfunc:true */\n    var checks = asyncTrigger();\n    var token;\n\n\n    function isReserved(token, isProperty) {\n      if (!token.reserved) {\n        return false;\n      }\n      var meta = token.meta;\n\n      if (meta && meta.isFutureReservedWord && state.inES5()) {\n        // ES3 FutureReservedWord in an ES5 environment.\n        if (!meta.es5) {\n          return false;\n        }\n\n        // Some ES5 FutureReservedWord identifiers are active only\n        // within a strict mode environment.\n        if (meta.strictOnly) {\n          if (!state.option.strict && !state.isStrict()) {\n            return false;\n          }\n        }\n\n        if (isProperty) {\n          return false;\n        }\n      }\n\n      return true;\n    }\n\n    // Produce a token object.\n    var create = function(type, value, isProperty, token) {\n      /*jshint validthis:true */\n      var obj;\n\n      if (type !== \"(endline)\" && type !== \"(end)\") {\n        this.prereg = false;\n      }\n\n      if (type === \"(punctuator)\") {\n        switch (value) {\n        case \".\":\n        case \")\":\n        case \"~\":\n        case \"#\":\n        case \"]\":\n        case \"++\":\n        case \"--\":\n          this.prereg = false;\n          break;\n        default:\n          this.prereg = true;\n        }\n\n        obj = Object.create(state.syntax[value] || state.syntax[\"(error)\"]);\n      }\n\n      if (type === \"(identifier)\") {\n        if (value === \"return\" || value === \"case\" || value === \"typeof\") {\n          this.prereg = true;\n        }\n\n        if (_.has(state.syntax, value)) {\n          obj = Object.create(state.syntax[value] || state.syntax[\"(error)\"]);\n\n          // If this can't be a reserved keyword, reset the object.\n          if (!isReserved(obj, isProperty && type === \"(identifier)\")) {\n            obj = null;\n          }\n        }\n      }\n\n      if (!obj) {\n        obj = Object.create(state.syntax[type]);\n      }\n\n      obj.identifier = (type === \"(identifier)\");\n      obj.type = obj.type || type;\n      obj.value = value;\n      obj.line = this.line;\n      obj.character = this.char;\n      obj.from = this.from;\n      if (obj.identifier && token) obj.raw_text = token.text || token.value;\n      if (token && token.startLine && token.startLine !== this.line) {\n        obj.startLine = token.startLine;\n      }\n      if (token && token.context) {\n        // Context of current token\n        obj.context = token.context;\n      }\n      if (token && token.depth) {\n        // Nested template depth\n        obj.depth = token.depth;\n      }\n      if (token && token.isUnclosed) {\n        // Mark token as unclosed string / template literal\n        obj.isUnclosed = token.isUnclosed;\n      }\n\n      if (isProperty && obj.identifier) {\n        obj.isProperty = isProperty;\n      }\n\n      obj.check = checks.check;\n\n      return obj;\n    }.bind(this);\n\n    for (;;) {\n      if (!this.input.length) {\n        if (this.nextLine()) {\n          return create(\"(endline)\", \"\");\n        }\n\n        if (this.exhausted) {\n          return null;\n        }\n\n        this.exhausted = true;\n        return create(\"(end)\", \"\");\n      }\n\n      token = this.next(checks);\n\n      if (!token) {\n        if (this.input.length) {\n          // Unexpected character.\n          this.trigger(\"error\", {\n            code: \"E024\",\n            line: this.line,\n            character: this.char,\n            data: [ this.peek() ]\n          });\n\n          this.input = \"\";\n        }\n\n        continue;\n      }\n\n      switch (token.type) {\n      case Token.StringLiteral:\n        this.triggerAsync(\"String\", {\n          line: this.line,\n          char: this.char,\n          from: this.from,\n          startLine: token.startLine,\n          startChar: token.startChar,\n          value: token.value,\n          quote: token.quote\n        }, checks, function() { return true; });\n\n        return create(\"(string)\", token.value, null, token);\n\n      case Token.TemplateHead:\n        this.trigger(\"TemplateHead\", {\n          line: this.line,\n          char: this.char,\n          from: this.from,\n          startLine: token.startLine,\n          startChar: token.startChar,\n          value: token.value\n        });\n        return create(\"(template)\", token.value, null, token);\n\n      case Token.TemplateMiddle:\n        this.trigger(\"TemplateMiddle\", {\n          line: this.line,\n          char: this.char,\n          from: this.from,\n          startLine: token.startLine,\n          startChar: token.startChar,\n          value: token.value\n        });\n        return create(\"(template middle)\", token.value, null, token);\n\n      case Token.TemplateTail:\n        this.trigger(\"TemplateTail\", {\n          line: this.line,\n          char: this.char,\n          from: this.from,\n          startLine: token.startLine,\n          startChar: token.startChar,\n          value: token.value\n        });\n        return create(\"(template tail)\", token.value, null, token);\n\n      case Token.NoSubstTemplate:\n        this.trigger(\"NoSubstTemplate\", {\n          line: this.line,\n          char: this.char,\n          from: this.from,\n          startLine: token.startLine,\n          startChar: token.startChar,\n          value: token.value\n        });\n        return create(\"(no subst template)\", token.value, null, token);\n\n      case Token.Identifier:\n        this.triggerAsync(\"Identifier\", {\n          line: this.line,\n          char: this.char,\n          from: this.form,\n          name: token.value,\n          raw_name: token.text,\n          isProperty: state.tokens.curr.id === \".\"\n        }, checks, function() { return true; });\n\n        /* falls through */\n      case Token.Keyword:\n      case Token.NullLiteral:\n      case Token.BooleanLiteral:\n        return create(\"(identifier)\", token.value, state.tokens.curr.id === \".\", token);\n\n      case Token.NumericLiteral:\n        if (token.isMalformed) {\n          this.trigger(\"warning\", {\n            code: \"W045\",\n            line: this.line,\n            character: this.char,\n            data: [ token.value ]\n          });\n        }\n\n        this.triggerAsync(\"warning\", {\n          code: \"W114\",\n          line: this.line,\n          character: this.char,\n          data: [ \"0x-\" ]\n        }, checks, function() { return token.base === 16 && state.jsonMode; });\n\n        this.triggerAsync(\"warning\", {\n          code: \"W115\",\n          line: this.line,\n          character: this.char\n        }, checks, function() {\n          return state.isStrict() && token.base === 8 && token.isLegacy;\n        });\n\n        this.trigger(\"Number\", {\n          line: this.line,\n          char: this.char,\n          from: this.from,\n          value: token.value,\n          base: token.base,\n          isMalformed: token.malformed\n        });\n\n        return create(\"(number)\", token.value);\n\n      case Token.RegExp:\n        return create(\"(regexp)\", token.value);\n\n      case Token.Comment:\n        state.tokens.curr.comment = true;\n\n        if (token.isSpecial) {\n          return {\n            id: '(comment)',\n            value: token.value,\n            body: token.body,\n            type: token.commentType,\n            isSpecial: token.isSpecial,\n            line: this.line,\n            character: this.char,\n            from: this.from\n          };\n        }\n\n        break;\n\n      case \"\":\n        break;\n\n      default:\n        return create(\"(punctuator)\", token.value);\n      }\n    }\n  }\n};\n\nexports.Lexer = Lexer;\nexports.Context = Context;\n\n},{\"../data/ascii-identifier-data.js\":\"/node_modules/jshint/data/ascii-identifier-data.js\",\"../lodash\":\"/node_modules/jshint/lodash.js\",\"./reg.js\":\"/node_modules/jshint/src/reg.js\",\"./state.js\":\"/node_modules/jshint/src/state.js\",\"events\":\"/node_modules/browserify/node_modules/events/events.js\"}],\"/node_modules/jshint/src/messages.js\":[function(_dereq_,module,exports){\n\"use strict\";\n\nvar _ = _dereq_(\"../lodash\");\n\nvar errors = {\n  // JSHint options\n  E001: \"Bad option: '{a}'.\",\n  E002: \"Bad option value.\",\n\n  // JSHint input\n  E003: \"Expected a JSON value.\",\n  E004: \"Input is neither a string nor an array of strings.\",\n  E005: \"Input is empty.\",\n  E006: \"Unexpected early end of program.\",\n\n  // Strict mode\n  E007: \"Missing \\\"use strict\\\" statement.\",\n  E008: \"Strict violation.\",\n  E009: \"Option 'validthis' can't be used in a global scope.\",\n  E010: \"'with' is not allowed in strict mode.\",\n\n  // Constants\n  E011: \"'{a}' has already been declared.\",\n  E012: \"const '{a}' is initialized to 'undefined'.\",\n  E013: \"Attempting to override '{a}' which is a constant.\",\n\n  // Regular expressions\n  E014: \"A regular expression literal can be confused with '/='.\",\n  E015: \"Unclosed regular expression.\",\n  E016: \"Invalid regular expression.\",\n\n  // Tokens\n  E017: \"Unclosed comment.\",\n  E018: \"Unbegun comment.\",\n  E019: \"Unmatched '{a}'.\",\n  E020: \"Expected '{a}' to match '{b}' from line {c} and instead saw '{d}'.\",\n  E021: \"Expected '{a}' and instead saw '{b}'.\",\n  E022: \"Line breaking error '{a}'.\",\n  E023: \"Missing '{a}'.\",\n  E024: \"Unexpected '{a}'.\",\n  E025: \"Missing ':' on a case clause.\",\n  E026: \"Missing '}' to match '{' from line {a}.\",\n  E027: \"Missing ']' to match '[' from line {a}.\",\n  E028: \"Illegal comma.\",\n  E029: \"Unclosed string.\",\n\n  // Everything else\n  E030: \"Expected an identifier and instead saw '{a}'.\",\n  E031: \"Bad assignment.\", // FIXME: Rephrase\n  E032: \"Expected a small integer or 'false' and instead saw '{a}'.\",\n  E033: \"Expected an operator and instead saw '{a}'.\",\n  E034: \"get/set are ES5 features.\",\n  E035: \"Missing property name.\",\n  E036: \"Expected to see a statement and instead saw a block.\",\n  E037: null,\n  E038: null,\n  E039: \"Function declarations are not invocable. Wrap the whole function invocation in parens.\",\n  E040: \"Each value should have its own case label.\",\n  E041: \"Unrecoverable syntax error.\",\n  E042: \"Stopping.\",\n  E043: \"Too many errors.\",\n  E044: null,\n  E045: \"Invalid for each loop.\",\n  E046: \"A yield statement shall be within a generator function (with syntax: `function*`)\",\n  E047: null,\n  E048: \"{a} declaration not directly within block.\",\n  E049: \"A {a} cannot be named '{b}'.\",\n  E050: \"Mozilla requires the yield expression to be parenthesized here.\",\n  E051: null,\n  E052: \"Unclosed template literal.\",\n  E053: \"Export declaration must be in global scope.\",\n  E054: \"Class properties must be methods. Expected '(' but instead saw '{a}'.\",\n  E055: \"The '{a}' option cannot be set after any executable code.\",\n  E056: \"'{a}' was used before it was declared, which is illegal for '{b}' variables.\",\n  E057: \"Invalid meta property: '{a}.{b}'.\",\n  E058: \"Missing semicolon.\"\n};\n\nvar warnings = {\n  W001: \"'hasOwnProperty' is a really bad name.\",\n  W002: \"Value of '{a}' may be overwritten in IE 8 and earlier.\",\n  W003: \"'{a}' was used before it was defined.\",\n  W004: \"'{a}' is already defined.\",\n  W005: \"A dot following a number can be confused with a decimal point.\",\n  W006: \"Confusing minuses.\",\n  W007: \"Confusing plusses.\",\n  W008: \"A leading decimal point can be confused with a dot: '{a}'.\",\n  W009: \"The array literal notation [] is preferable.\",\n  W010: \"The object literal notation {} is preferable.\",\n  W011: null,\n  W012: null,\n  W013: null,\n  W014: \"Bad line breaking before '{a}'.\",\n  W015: null,\n  W016: \"Unexpected use of '{a}'.\",\n  W017: \"Bad operand.\",\n  W018: \"Confusing use of '{a}'.\",\n  W019: \"Use the isNaN function to compare with NaN.\",\n  W020: \"Read only.\",\n  W021: \"Reassignment of '{a}', which is is a {b}. \" +\n    \"Use 'var' or 'let' to declare bindings that may change.\",\n  W022: \"Do not assign to the exception parameter.\",\n  W023: \"Expected an identifier in an assignment and instead saw a function invocation.\",\n  W024: \"Expected an identifier and instead saw '{a}' (a reserved word).\",\n  W025: \"Missing name in function declaration.\",\n  W026: \"Inner functions should be listed at the top of the outer function.\",\n  W027: \"Unreachable '{a}' after '{b}'.\",\n  W028: \"Label '{a}' on {b} statement.\",\n  W030: \"Expected an assignment or function call and instead saw an expression.\",\n  W031: \"Do not use 'new' for side effects.\",\n  W032: \"Unnecessary semicolon.\",\n  W033: \"Missing semicolon.\",\n  W034: \"Unnecessary directive \\\"{a}\\\".\",\n  W035: \"Empty block.\",\n  W036: \"Unexpected /*member '{a}'.\",\n  W037: \"'{a}' is a statement label.\",\n  W038: \"'{a}' used out of scope.\",\n  W039: \"'{a}' is not allowed.\",\n  W040: \"Possible strict violation.\",\n  W041: \"Use '{a}' to compare with '{b}'.\",\n  W042: \"Avoid EOL escaping.\",\n  W043: \"Bad escaping of EOL. Use option multistr if needed.\",\n  W044: \"Bad or unnecessary escaping.\", /* TODO(caitp): remove W044 */\n  W045: \"Bad number '{a}'.\",\n  W046: \"Don't use extra leading zeros '{a}'.\",\n  W047: \"A trailing decimal point can be confused with a dot: '{a}'.\",\n  W048: \"Unexpected control character in regular expression.\",\n  W049: \"Unexpected escaped character '{a}' in regular expression.\",\n  W050: \"JavaScript URL.\",\n  W051: \"Variables should not be deleted.\",\n  W052: \"Unexpected '{a}'.\",\n  W053: \"Do not use {a} as a constructor.\",\n  W054: \"The Function constructor is a form of eval.\",\n  W055: \"A constructor name should start with an uppercase letter.\",\n  W056: \"Bad constructor.\",\n  W057: \"Weird construction. Is 'new' necessary?\",\n  W058: \"Missing '()' invoking a constructor.\",\n  W059: \"Avoid arguments.{a}.\",\n  W060: \"document.write can be a form of eval.\",\n  W061: \"eval can be harmful.\",\n  W062: \"Wrap an immediate function invocation in parens \" +\n    \"to assist the reader in understanding that the expression \" +\n    \"is the result of a function, and not the function itself.\",\n  W063: \"Math is not a function.\",\n  W064: \"Missing 'new' prefix when invoking a constructor.\",\n  W065: \"Missing radix parameter.\",\n  W066: \"Implied eval. Consider passing a function instead of a string.\",\n  W067: \"Bad invocation.\",\n  W068: \"Wrapping non-IIFE function literals in parens is unnecessary.\",\n  W069: \"['{a}'] is better written in dot notation.\",\n  W070: \"Extra comma. (it breaks older versions of IE)\",\n  W071: \"This function has too many statements. ({a})\",\n  W072: \"This function has too many parameters. ({a})\",\n  W073: \"Blocks are nested too deeply. ({a})\",\n  W074: \"This function's cyclomatic complexity is too high. ({a})\",\n  W075: \"Duplicate {a} '{b}'.\",\n  W076: \"Unexpected parameter '{a}' in get {b} function.\",\n  W077: \"Expected a single parameter in set {a} function.\",\n  W078: \"Setter is defined without getter.\",\n  W079: \"Redefinition of '{a}'.\",\n  W080: \"It's not necessary to initialize '{a}' to 'undefined'.\",\n  W081: null,\n  W082: \"Function declarations should not be placed in blocks. \" +\n    \"Use a function expression or move the statement to the top of \" +\n    \"the outer function.\",\n  W083: \"Don't make functions within a loop.\",\n  W084: \"Assignment in conditional expression\",\n  W085: \"Don't use 'with'.\",\n  W086: \"Expected a 'break' statement before '{a}'.\",\n  W087: \"Forgotten 'debugger' statement?\",\n  W088: \"Creating global 'for' variable. Should be 'for (var {a} ...'.\",\n  W089: \"The body of a for in should be wrapped in an if statement to filter \" +\n    \"unwanted properties from the prototype.\",\n  W090: \"'{a}' is not a statement label.\",\n  W091: null,\n  W093: \"Did you mean to return a conditional instead of an assignment?\",\n  W094: \"Unexpected comma.\",\n  W095: \"Expected a string and instead saw {a}.\",\n  W096: \"The '{a}' key may produce unexpected results.\",\n  W097: \"Use the function form of \\\"use strict\\\".\",\n  W098: \"'{a}' is defined but never used.\",\n  W099: null,\n  W100: \"This character may get silently deleted by one or more browsers.\",\n  W101: \"Line is too long.\",\n  W102: null,\n  W103: \"The '{a}' property is deprecated.\",\n  W104: \"'{a}' is available in ES{b} (use 'esversion: {b}') or Mozilla JS extensions (use moz).\",\n  W105: \"Unexpected {a} in '{b}'.\",\n  W106: \"Identifier '{a}' is not in camel case.\",\n  W107: \"Script URL.\",\n  W108: \"Strings must use doublequote.\",\n  W109: \"Strings must use singlequote.\",\n  W110: \"Mixed double and single quotes.\",\n  W112: \"Unclosed string.\",\n  W113: \"Control character in string: {a}.\",\n  W114: \"Avoid {a}.\",\n  W115: \"Octal literals are not allowed in strict mode.\",\n  W116: \"Expected '{a}' and instead saw '{b}'.\",\n  W117: \"'{a}' is not defined.\",\n  W118: \"'{a}' is only available in Mozilla JavaScript extensions (use moz option).\",\n  W119: \"'{a}' is only available in ES{b} (use 'esversion: {b}').\",\n  W120: \"You might be leaking a variable ({a}) here.\",\n  W121: \"Extending prototype of native object: '{a}'.\",\n  W122: \"Invalid typeof value '{a}'\",\n  W123: \"'{a}' is already defined in outer scope.\",\n  W124: \"A generator function shall contain a yield statement.\",\n  W125: \"This line contains non-breaking spaces: http://jshint.com/doc/options/#nonbsp\",\n  W126: \"Unnecessary grouping operator.\",\n  W127: \"Unexpected use of a comma operator.\",\n  W128: \"Empty array elements require elision=true.\",\n  W129: \"'{a}' is defined in a future version of JavaScript. Use a \" +\n    \"different variable name to avoid migration issues.\",\n  W130: \"Invalid element after rest element.\",\n  W131: \"Invalid parameter after rest parameter.\",\n  W132: \"`var` declarations are forbidden. Use `let` or `const` instead.\",\n  W133: \"Invalid for-{a} loop left-hand-side: {b}.\",\n  W134: \"The '{a}' option is only available when linting ECMAScript {b} code.\",\n  W135: \"{a} may not be supported by non-browser environments.\",\n  W136: \"'{a}' must be in function scope.\",\n  W137: \"Empty destructuring.\",\n  W138: \"Regular parameters should not come after default parameters.\"\n};\n\nvar info = {\n  I001: \"Comma warnings can be turned off with 'laxcomma'.\",\n  I002: null,\n  I003: \"ES5 option is now set per default\"\n};\n\nexports.errors = {};\nexports.warnings = {};\nexports.info = {};\n\n_.each(errors, function(desc, code) {\n  exports.errors[code] = { code: code, desc: desc };\n});\n\n_.each(warnings, function(desc, code) {\n  exports.warnings[code] = { code: code, desc: desc };\n});\n\n_.each(info, function(desc, code) {\n  exports.info[code] = { code: code, desc: desc };\n});\n\n},{\"../lodash\":\"/node_modules/jshint/lodash.js\"}],\"/node_modules/jshint/src/name-stack.js\":[function(_dereq_,module,exports){\n\"use strict\";\n\nfunction NameStack() {\n  this._stack = [];\n}\n\nObject.defineProperty(NameStack.prototype, \"length\", {\n  get: function() {\n    return this._stack.length;\n  }\n});\n\n/**\n * Create a new entry in the stack. Useful for tracking names across\n * expressions.\n */\nNameStack.prototype.push = function() {\n  this._stack.push(null);\n};\n\n/**\n * Discard the most recently-created name on the stack.\n */\nNameStack.prototype.pop = function() {\n  this._stack.pop();\n};\n\n/**\n * Update the most recent name on the top of the stack.\n *\n * @param {object} token The token to consider as the source for the most\n *                       recent name.\n */\nNameStack.prototype.set = function(token) {\n  this._stack[this.length - 1] = token;\n};\n\n/**\n * Generate a string representation of the most recent name.\n *\n * @returns {string}\n */\nNameStack.prototype.infer = function() {\n  var nameToken = this._stack[this.length - 1];\n  var prefix = \"\";\n  var type;\n\n  // During expected operation, the topmost entry on the stack will only\n  // reflect the current function's name when the function is declared without\n  // the `function` keyword (i.e. for in-line accessor methods). In other\n  // cases, the `function` expression itself will introduce an empty entry on\n  // the top of the stack, and this should be ignored.\n  if (!nameToken || nameToken.type === \"class\") {\n    nameToken = this._stack[this.length - 2];\n  }\n\n  if (!nameToken) {\n    return \"(empty)\";\n  }\n\n  type = nameToken.type;\n\n  if (type !== \"(string)\" && type !== \"(number)\" && type !== \"(identifier)\" && type !== \"default\") {\n    return \"(expression)\";\n  }\n\n  if (nameToken.accessorType) {\n    prefix = nameToken.accessorType + \" \";\n  }\n\n  return prefix + nameToken.value;\n};\n\nmodule.exports = NameStack;\n\n},{}],\"/node_modules/jshint/src/options.js\":[function(_dereq_,module,exports){\n\"use strict\";\n\n// These are the JSHint boolean options.\nexports.bool = {\n  enforcing: {\n\n    /**\n     * This option prohibits the use of bitwise operators such as `^` (XOR),\n     * `|` (OR) and others. Bitwise operators are very rare in JavaScript\n     * programs and quite often `&` is simply a mistyped `&&`.\n     */\n    bitwise     : true,\n\n    /**\n     *\n     * This options prohibits overwriting prototypes of native objects such as\n     * `Array`, `Date` and so on.\n     *\n     *     // jshint freeze:true\n     *     Array.prototype.count = function (value) { return 4; };\n     *     // -> Warning: Extending prototype of native object: 'Array'.\n     */\n    freeze      : true,\n\n    /**\n     * This option allows you to force all variable names to use either\n     * camelCase style or UPPER_CASE with underscores.\n     *\n     * @deprecated JSHint is limiting its scope to issues of code correctness.\n     *             If you would like to enforce rules relating to code style,\n     *             check out [the JSCS\n     *             project](https://github.com/jscs-dev/node-jscs).\n     */\n    camelcase   : true,\n\n    /**\n     * This option requires you to always put curly braces around blocks in\n     * loops and conditionals. JavaScript allows you to omit curly braces when\n     * the block consists of only one statement, for example:\n     *\n     *     while (day)\n     *       shuffle();\n     *\n     * However, in some circumstances, it can lead to bugs (you'd think that\n     * `sleep()` is a part of the loop while in reality it is not):\n     *\n     *     while (day)\n     *       shuffle();\n     *       sleep();\n     */\n    curly       : true,\n\n    /**\n     * This options prohibits the use of `==` and `!=` in favor of `===` and\n     * `!==`. The former try to coerce values before comparing them which can\n     * lead to some unexpected results. The latter don't do any coercion so\n     * they are generally safer. If you would like to learn more about type\n     * coercion in JavaScript, we recommend [Truth, Equality and\n     * JavaScript](http://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/)\n     * by Angus Croll.\n     */\n    eqeqeq      : true,\n\n    /**\n     * This option enables warnings about the use of identifiers which are\n     * defined in future versions of JavaScript. Although overwriting them has\n     * no effect in contexts where they are not implemented, this practice can\n     * cause issues when migrating codebases to newer versions of the language.\n     */\n    futurehostile: true,\n\n    /**\n     * This option suppresses warnings about invalid `typeof` operator values.\n     * This operator has only [a limited set of possible return\n     * values](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof).\n     * By default, JSHint warns when you compare its result with an invalid\n     * value which often can be a typo.\n     *\n     *     // 'fuction' instead of 'function'\n     *     if (typeof a == \"fuction\") { // Invalid typeof value 'fuction'\n     *       // ...\n     *     }\n     *\n     * Do not use this option unless you're absolutely sure you don't want\n     * these checks.\n     */\n    notypeof    : true,\n\n    /**\n     * This option tells JSHint that your code needs to adhere to ECMAScript 3\n     * specification. Use this option if you need your program to be executable\n     * in older browsers—such as Internet Explorer 6/7/8/9—and other legacy\n     * JavaScript environments.\n     *\n     * @deprecated Use `esversion: 3` instead.\n     */\n    es3         : true,\n\n    /**\n     * This option enables syntax first defined in [the ECMAScript 5.1\n     * specification](http://es5.github.io/). This includes allowing reserved\n     * keywords as object properties.\n     *\n     * @deprecated Use `esversion: 5` instead.\n     */\n    es5         : true,\n\n    /**\n     * This option requires all `for in` loops to filter object's items. The\n     * for in statement allows for looping through the names of all of the\n     * properties of an object including those inherited through the prototype\n     * chain. This behavior can lead to unexpected items in your object so it\n     * is generally safer to always filter inherited properties out as shown in\n     * the example:\n     *\n     *     for (key in obj) {\n     *       if (obj.hasOwnProperty(key)) {\n     *         // We are sure that obj[key] belongs to the object and was not inherited.\n     *       }\n     *     }\n     *\n     * For more in-depth understanding of `for in` loops in JavaScript, read\n     * [Exploring JavaScript for-in\n     * loops](http://javascriptweblog.wordpress.com/2011/01/04/exploring-javascript-for-in-loops/)\n     * by Angus Croll.\n     */\n    forin       : true,\n\n    /**\n     * This option suppresses warnings about declaring variables inside of\n     * control\n     * structures while accessing them later from the outside. Even though\n     * JavaScript has only two real scopes—global and function—such practice\n     * leads to confusion among people new to the language and hard-to-debug\n     * bugs. This is why, by default, JSHint warns about variables that are\n     * used outside of their intended scope.\n     *\n     *     function test() {\n     *       if (true) {\n     *         var x = 0;\n     *       }\n     *\n     *       x += 1; // Default: 'x' used out of scope.\n     *                 // No warning when funcscope:true\n     *     }\n     */\n    funcscope   : true,\n\n    /**\n     * This option prohibits the use of immediate function invocations without\n     * wrapping them in parentheses. Wrapping parentheses assists readers of\n     * your code in understanding that the expression is the result of a\n     * function, and not the function itself.\n     *\n     * @deprecated JSHint is limiting its scope to issues of code correctness.\n     *             If you would like to enforce rules relating to code style,\n     *             check out [the JSCS\n     *             project](https://github.com/jscs-dev/node-jscs).\n     */\n    immed       : true,\n\n    /**\n     * This option suppresses warnings about the `__iterator__` property. This\n     * property is not supported by all browsers so use it carefully.\n     */\n    iterator    : true,\n\n    /**\n     * This option requires you to capitalize names of constructor functions.\n     * Capitalizing functions that are intended to be used with `new` operator\n     * is just a convention that helps programmers to visually distinguish\n     * constructor functions from other types of functions to help spot\n     * mistakes when using `this`.\n     *\n     * Not doing so won't break your code in any browsers or environments but\n     * it will be a bit harder to figure out—by reading the code—if the\n     * function was supposed to be used with or without new. And this is\n     * important because when the function that was intended to be used with\n     * `new` is used without it, `this` will point to the global object instead\n     * of a new object.\n     *\n     * @deprecated JSHint is limiting its scope to issues of code correctness.\n     *             If you would like to enforce rules relating to code style,\n     *             check out [the JSCS\n     *             project](https://github.com/jscs-dev/node-jscs).\n     */\n    newcap      : true,\n\n    /**\n     * This option prohibits the use of `arguments.caller` and\n     * `arguments.callee`.  Both `.caller` and `.callee` make quite a few\n     * optimizations impossible so they were deprecated in future versions of\n     * JavaScript. In fact, ECMAScript 5 forbids the use of `arguments.callee`\n     * in strict mode.\n     */\n    noarg       : true,\n\n    /**\n     * This option prohibits the use of the comma operator. When misused, the\n     * comma operator can obscure the value of a statement and promote\n     * incorrect code.\n     */\n    nocomma     : true,\n\n    /**\n     * This option warns when you have an empty block in your code. JSLint was\n     * originally warning for all empty blocks and we simply made it optional.\n     * There were no studies reporting that empty blocks in JavaScript break\n     * your code in any way.\n     *\n     * @deprecated JSHint is limiting its scope to issues of code correctness.\n     *             If you would like to enforce rules relating to code style,\n     *             check out [the JSCS\n     *             project](https://github.com/jscs-dev/node-jscs).\n     */\n    noempty     : true,\n\n    /**\n     * This option warns about \"non-breaking whitespace\" characters. These\n     * characters can be entered with option-space on Mac computers and have a\n     * potential of breaking non-UTF8 web pages.\n     */\n    nonbsp      : true,\n\n    /**\n     * This option prohibits the use of constructor functions for side-effects.\n     * Some people like to call constructor functions without assigning its\n     * result to any variable:\n     *\n     *     new MyConstructor();\n     *\n     * There is no advantage in this approach over simply calling\n     * `MyConstructor` since the object that the operator `new` creates isn't\n     * used anywhere so you should generally avoid constructors like this one.\n     */\n    nonew       : true,\n\n    /**\n     * This option prohibits the use of explicitly undeclared variables. This\n     * option is very useful for spotting leaking and mistyped variables.\n     *\n     *     // jshint undef:true\n     *\n     *     function test() {\n     *       var myVar = 'Hello, World';\n     *       console.log(myvar); // Oops, typoed here. JSHint with undef will complain\n     *     }\n     *\n     * If your variable is defined in another file, you can use the `global`\n     * directive to tell JSHint about it.\n     */\n    undef       : true,\n\n    /**\n     * This option prohibits the use of the grouping operator when it is not\n     * strictly required. Such usage commonly reflects a misunderstanding of\n     * unary operators, for example:\n     *\n     *     // jshint singleGroups: true\n     *\n     *     delete(obj.attr); // Warning: Unnecessary grouping operator.\n     */\n    singleGroups: false,\n\n    /**\n     * When set to true, the use of VariableStatements are forbidden.\n     * For example:\n     *\n     *     // jshint varstmt: true\n     *\n     *     var a; // Warning: `var` declarations are forbidden. Use `let` or `const` instead.\n     */\n    varstmt: false,\n\n    /**\n     * This option is a short hand for the most strict JSHint configuration as\n     * available in JSHint version 2.6.3. It enables all enforcing options and\n     * disables all relaxing options that were defined in that release.\n     *\n     * @deprecated The option cannot be maintained without automatically opting\n     *             users in to new features. This can lead to unexpected\n     *             warnings/errors in when upgrading between minor versions of\n     *             JSHint.\n     */\n    enforceall : false\n  },\n  relaxing: {\n\n    /**\n     * This option suppresses warnings about missing semicolons. There is a lot\n     * of FUD about semicolon spread by quite a few people in the community.\n     * The common myths are that semicolons are required all the time (they are\n     * not) and that they are unreliable. JavaScript has rules about semicolons\n     * which are followed by *all* browsers so it is up to you to decide\n     * whether you should or should not use semicolons in your code.\n     *\n     * For more information about semicolons in JavaScript read [An Open Letter\n     * to JavaScript Leaders Regarding\n     * Semicolons](http://blog.izs.me/post/2353458699/an-open-letter-to-javascript-leaders-regarding)\n     * by Isaac Schlueter and [JavaScript Semicolon\n     * Insertion](http://inimino.org/~inimino/blog/javascript_semicolons).\n     */\n    asi         : true,\n\n    /**\n     * This option suppresses warnings about multi-line strings. Multi-line\n     * strings can be dangerous in JavaScript because all hell breaks loose if\n     * you accidentally put a whitespace in between the escape character (`\\`)\n     * and a new line.\n     *\n     * Note that even though this option allows correct multi-line strings, it\n     * still warns about multi-line strings without escape characters or with\n     * anything in between the escape character and a whitespace.\n     *\n     *     // jshint multistr:true\n     *\n     *     var text = \"Hello\\\n     *     World\"; // All good.\n     *\n     *     text = \"Hello\n     *     World\"; // Warning, no escape character.\n     *\n     *     text = \"Hello\\\n     *     World\"; // Warning, there is a space after \\\n     *\n     * @deprecated JSHint is limiting its scope to issues of code correctness.\n     *             If you would like to enforce rules relating to code style,\n     *             check out [the JSCS\n     *             project](https://github.com/jscs-dev/node-jscs).\n     */\n    multistr    : true,\n\n    /**\n     * This option suppresses warnings about the `debugger` statements in your\n     * code.\n     */\n    debug       : true,\n\n    /**\n     * This option suppresses warnings about the use of assignments in cases\n     * where comparisons are expected. More often than not, code like `if (a =\n     * 10) {}` is a typo. However, it can be useful in cases like this one:\n     *\n     *     for (var i = 0, person; person = people[i]; i++) {}\n     *\n     * You can silence this error on a per-use basis by surrounding the assignment\n     * with parenthesis, such as:\n     *\n     *     for (var i = 0, person; (person = people[i]); i++) {}\n     */\n    boss        : true,\n\n    /**\n     * This option suppresses warnings about the use of `eval`. The use of\n     * `eval` is discouraged because it can make your code vulnerable to\n     * various injection attacks and it makes it hard for JavaScript\n     * interpreter to do certain optimizations.\n    */\n    evil        : true,\n\n    /**\n     * This option suppresses warnings about the use of global strict mode.\n     * Global strict mode can break third-party widgets so it is not\n     * recommended.\n     *\n     * For more info about strict mode see the `strict` option.\n     *\n     * @deprecated Use `strict: \"global\"`.\n     */\n    globalstrict: true,\n\n    /**\n     * This option prohibits the use of unary increment and decrement\n     * operators.  Some people think that `++` and `--` reduces the quality of\n     * their coding styles and there are programming languages—such as\n     * Python—that go completely without these operators.\n     */\n    plusplus    : true,\n\n    /**\n     * This option suppresses warnings about the `__proto__` property.\n     */\n    proto       : true,\n\n    /**\n     * This option suppresses warnings about the use of script-targeted\n     * URLs—such as `javascript:...`.\n     */\n    scripturl   : true,\n\n    /**\n     * This option suppresses warnings about using `[]` notation when it can be\n     * expressed in dot notation: `person['name']` vs. `person.name`.\n     *\n     * @deprecated JSHint is limiting its scope to issues of code correctness.\n     *             If you would like to enforce rules relating to code style,\n     *             check out [the JSCS\n     *             project](https://github.com/jscs-dev/node-jscs).\n     */\n    sub         : true,\n\n    /**\n     * This option suppresses warnings about \"weird\" constructions like\n     * `new function () { ... }` and `new Object;`. Such constructions are\n     * sometimes used to produce singletons in JavaScript:\n     *\n     *     var singleton = new function() {\n     *       var privateVar;\n     *\n     *       this.publicMethod  = function () {}\n     *       this.publicMethod2 = function () {}\n     *     };\n     */\n    supernew    : true,\n\n    /**\n     * This option suppresses most of the warnings about possibly unsafe line\n     * breakings in your code. It doesn't suppress warnings about comma-first\n     * coding style. To suppress those you have to use `laxcomma` (see below).\n     *\n     * @deprecated JSHint is limiting its scope to issues of code correctness.\n     *             If you would like to enforce rules relating to code style,\n     *             check out [the JSCS\n     *             project](https://github.com/jscs-dev/node-jscs).\n     */\n    laxbreak    : true,\n\n    /**\n     * This option suppresses warnings about comma-first coding style:\n     *\n     *     var obj = {\n     *         name: 'Anton'\n     *       , handle: 'valueof'\n     *       , role: 'SW Engineer'\n     *     };\n     *\n     * @deprecated JSHint is limiting its scope to issues of code correctness.\n     *             If you would like to enforce rules relating to code style,\n     *             check out [the JSCS\n     *             project](https://github.com/jscs-dev/node-jscs).\n     */\n    laxcomma    : true,\n\n    /**\n     * This option suppresses warnings about possible strict violations when\n     * the code is running in strict mode and you use `this` in a\n     * non-constructor function. You should use this option—in a function scope\n     * only—when you are positive that your use of `this` is valid in the\n     * strict mode (for example, if you call your function using\n     * `Function.call`).\n     *\n     * **Note:** This option can be used only inside of a function scope.\n     * JSHint will fail with an error if you will try to set this option\n     * globally.\n     */\n    validthis   : true,\n\n    /**\n     * This option suppresses warnings about the use of the `with` statement.\n     * The semantics of the `with` statement can cause confusion among\n     * developers and accidental definition of global variables.\n     *\n     * More info:\n     *\n     * * [with Statement Considered\n     *   Harmful](http://yuiblog.com/blog/2006/04/11/with-statement-considered-harmful/)\n     */\n    withstmt    : true,\n\n    /**\n     * This options tells JSHint that your code uses Mozilla JavaScript\n     * extensions. Unless you develop specifically for the Firefox web browser\n     * you don't need this option.\n     *\n     * More info:\n     *\n     * * [New in JavaScript\n     *   1.7](https://developer.mozilla.org/en-US/docs/JavaScript/New_in_JavaScript/1.7)\n     */\n    moz         : true,\n\n    /**\n     * This option suppresses warnings about generator functions with no\n     * `yield` statement in them.\n     */\n    noyield     : true,\n\n    /**\n     * This option suppresses warnings about `== null` comparisons. Such\n     * comparisons are often useful when you want to check if a variable is\n     * `null` or `undefined`.\n     */\n    eqnull      : true,\n\n    /**\n     * This option suppresses warnings about missing semicolons, but only when\n     * the semicolon is omitted for the last statement in a one-line block:\n     *\n     *     var name = (function() { return 'Anton' }());\n     *\n     * This is a very niche use case that is useful only when you use automatic\n     * JavaScript code generators.\n     */\n    lastsemic   : true,\n\n    /**\n     * This option suppresses warnings about functions inside of loops.\n     * Defining functions inside of loops can lead to bugs such as this one:\n     *\n     *     var nums = [];\n     *\n     *     for (var i = 0; i < 10; i++) {\n     *       nums[i] = function (j) {\n     *         return i + j;\n     *       };\n     *     }\n     *\n     *     nums[0](2); // Prints 12 instead of 2\n     *\n     * To fix the code above you need to copy the value of `i`:\n     *\n     *     var nums = [];\n     *\n     *     for (var i = 0; i < 10; i++) {\n     *       (function (i) {\n     *         nums[i] = function (j) {\n     *             return i + j;\n     *         };\n     *       }(i));\n     *     }\n     */\n    loopfunc    : true,\n\n    /**\n     * This option suppresses warnings about the use of expressions where\n     * normally you would expect to see assignments or function calls. Most of\n     * the time, such code is a typo. However, it is not forbidden by the spec\n     * and that's why this warning is optional.\n     */\n    expr        : true,\n\n    /**\n     * This option tells JSHint that your code uses ECMAScript 6 specific\n     * syntax. Note that these features are not finalized yet and not all\n     * browsers implement them.\n     *\n     * More info:\n     *\n     * * [Specification for ECMAScript\n     *   6](http://www.ecma-international.org/ecma-262/6.0/index.html)\n     *\n     * @deprecated Use `esversion: 6` instead.\n     */\n    esnext      : true,\n\n    /**\n     * This option tells JSHint that your code uses ES3 array elision elements,\n     * or empty elements (for example, `[1, , , 4, , , 7]`).\n     */\n    elision     : true,\n  },\n\n  // Third party globals\n  environments: {\n\n    /**\n     * This option defines globals exposed by the\n     * [MooTools](http://mootools.net/) JavaScript framework.\n     */\n    mootools    : true,\n\n    /**\n     * This option defines globals exposed by\n     * [CouchDB](http://couchdb.apache.org/). CouchDB is a document-oriented\n     * database that can be queried and indexed in a MapReduce fashion using\n     * JavaScript.\n     */\n    couch       : true,\n\n    /**\n     * This option defines globals exposed by [the Jasmine unit testing\n     * framework](https://jasmine.github.io/).\n     */\n    jasmine     : true,\n\n    /**\n     * This option defines globals exposed by the [jQuery](http://jquery.com/)\n     * JavaScript library.\n     */\n    jquery      : true,\n\n    /**\n     * This option defines globals available when your code is running inside\n     * of the Node runtime environment. [Node.js](http://nodejs.org/) is a\n     * server-side JavaScript environment that uses an asynchronous\n     * event-driven model. This option also skips some warnings that make sense\n     * in the browser environments but don't make sense in Node such as\n     * file-level `use strict` pragmas and `console.log` statements.\n     */\n    node        : true,\n\n    /**\n     * This option defines globals exposed by [the QUnit unit testing\n     * framework](http://qunitjs.com/).\n     */\n    qunit       : true,\n\n    /**\n     * This option defines globals available when your code is running inside\n     * of the Rhino runtime environment. [Rhino](http://www.mozilla.org/rhino/)\n     * is an open-source implementation of JavaScript written entirely in Java.\n     */\n    rhino       : true,\n\n    /**\n     * This option defines globals exposed by [the ShellJS\n     * library](http://documentup.com/arturadib/shelljs).\n     */\n    shelljs     : true,\n\n    /**\n     * This option defines globals exposed by the\n     * [Prototype](http://www.prototypejs.org/) JavaScript framework.\n     */\n    prototypejs : true,\n\n    /**\n     * This option defines globals exposed by the [YUI](http://yuilibrary.com/)\n     * JavaScript framework.\n     */\n    yui         : true,\n\n    /**\n     * This option defines globals exposed by the \"BDD\" and \"TDD\" UIs of the\n     * [Mocha unit testing framework](http://mochajs.org/).\n     */\n    mocha       : true,\n\n    /**\n     * This option informs JSHint that the input code describes an ECMAScript 6\n     * module. All module code is interpreted as strict mode code.\n     */\n    module      : true,\n\n    /**\n     * This option defines globals available when your code is running as a\n     * script for the [Windows Script\n     * Host](http://en.wikipedia.org/wiki/Windows_Script_Host).\n     */\n    wsh         : true,\n\n    /**\n     * This option defines globals available when your code is running inside\n     * of a Web Worker. [Web\n     * Workers](https://developer.mozilla.org/en/Using_web_workers) provide a\n     * simple means for web content to run scripts in background threads.\n     */\n    worker      : true,\n\n    /**\n     * This option defines non-standard but widely adopted globals such as\n     * `escape` and `unescape`.\n     */\n    nonstandard : true,\n\n    /**\n     * This option defines globals exposed by modern browsers: all the way from\n     * good old `document` and `navigator` to the HTML5 `FileReader` and other\n     * new developments in the browser world.\n     *\n     * **Note:** This option doesn't expose variables like `alert` or\n     * `console`. See option `devel` for more information.\n     */\n    browser     : true,\n\n    /**\n     * This option defines globals available when using [the Browserify\n     * tool](http://browserify.org/) to build a project.\n     */\n    browserify  : true,\n\n    /**\n     * This option defines globals that are usually used for logging poor-man's\n     * debugging: `console`, `alert`, etc. It is usually a good idea to not\n     * ship them in production because, for example, `console.log` breaks in\n     * legacy versions of Internet Explorer.\n     */\n    devel       : true,\n\n    /**\n     * This option defines globals exposed by the [Dojo\n     * Toolkit](http://dojotoolkit.org/).\n     */\n    dojo        : true,\n\n    /**\n     * This option defines globals for typed array constructors.\n     *\n     * More info:\n     *\n     * * [JavaScript typed\n     *   arrays](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays)\n     */\n    typed       : true,\n\n    /**\n     * This option defines globals available when your core is running inside\n     * of the PhantomJS runtime environment. [PhantomJS](http://phantomjs.org/)\n     * is a headless WebKit scriptable with a JavaScript API. It has fast and\n     * native support for various web standards: DOM handling, CSS selector,\n     * JSON, Canvas, and SVG.\n     */\n    phantom     : true\n  },\n\n  // Obsolete options\n  obsolete: {\n    onecase     : true, // if one case switch statements should be allowed\n    regexp      : true, // if the . should not be allowed in regexp literals\n    regexdash   : true  // if unescaped first/last dash (-) inside brackets\n                        // should be tolerated\n  }\n};\n\n// These are the JSHint options that can take any value\n// (we use this object to detect invalid options)\nexports.val = {\n\n  /**\n   * This option lets you set the maximum length of a line.\n   *\n   * @deprecated JSHint is limiting its scope to issues of code correctness. If\n   *             you would like to enforce rules relating to code style, check\n   *             out [the JSCS project](https://github.com/jscs-dev/node-jscs).\n   */\n  maxlen       : false,\n\n  /**\n   * This option sets a specific tab width for your code.\n   *\n   * @deprecated JSHint is limiting its scope to issues of code correctness. If\n   *             you would like to enforce rules relating to code style, check\n   *             out [the JSCS project](https://github.com/jscs-dev/node-jscs).\n   */\n  indent       : false,\n\n  /**\n   * This options allows you to set the maximum amount of warnings JSHint will\n   * produce before giving up. Default is 50.\n   */\n  maxerr       : false,\n\n  /**\n   * This option allows you to control which variables JSHint considers to be\n   * implicitly defined in the environment. Configure it with an array of\n   * string values. Prefixing a variable name with a hyphen (-) character will\n   * remove that name from the collection of predefined variables.\n   *\n   * JSHint will consider variables declared in this way to be read-only.\n   *\n   * This option cannot be specified in-line; it may only be used via the\n   * JavaScript API or from an external configuration file.\n   */\n  predef       : false,\n\n  /**\n   * This option can be used to specify a white list of global variables that\n   * are not formally defined in the source code. This is most useful when\n   * combined with the `undef` option in order to suppress warnings for\n   * project-specific global variables.\n   *\n   * Setting an entry to `true` enables reading and writing to that variable.\n   * Setting it to `false` will trigger JSHint to consider that variable\n   * read-only.\n   *\n   * See also the \"environment\" options: a set of options to be used as short\n   * hand for enabling global variables defined in common JavaScript\n   * environments.\n   *\n   * To configure `globals` within an individual file, see [Inline\n   * Configuration](http://jshint.com/docs/#inline-configuration).\n   */\n  globals      : false,\n\n  /**\n   * This option enforces the consistency of quotation marks used throughout\n   * your code. It accepts three values: `true` if you don't want to enforce\n   * one particular style but want some consistency, `\"single\"` if you want to\n   * allow only single quotes and `\"double\"` if you want to allow only double\n   * quotes.\n   *\n   * @deprecated JSHint is limiting its scope to issues of code correctness. If\n   *             you would like to enforce rules relating to code style, check\n   *             out [the JSCS project](https://github.com/jscs-dev/node-jscs).\n   */\n  quotmark     : false,\n\n  scope        : false,\n\n  /**\n   * This option lets you set the max number of statements allowed per function:\n   *\n   *     // jshint maxstatements:4\n   *\n   *     function main() {\n   *       var i = 0;\n   *       var j = 0;\n   *\n   *       // Function declarations count as one statement. Their bodies\n   *       // don't get taken into account for the outer function.\n   *       function inner() {\n   *         var i2 = 1;\n   *         var j2 = 1;\n   *\n   *         return i2 + j2;\n   *       }\n   *\n   *       j = i + j;\n   *       return j; // JSHint: Too many statements per function. (5)\n   *     }\n   */\n  maxstatements: false,\n\n  /**\n   * This option lets you control how nested do you want your blocks to be:\n   *\n   *     // jshint maxdepth:2\n   *\n   *     function main(meaning) {\n   *       var day = true;\n   *\n   *       if (meaning === 42) {\n   *         while (day) {\n   *           shuffle();\n   *\n   *           if (tired) { // JSHint: Blocks are nested too deeply (3).\n   *               sleep();\n   *           }\n   *         }\n   *       }\n   *     }\n   */\n  maxdepth     : false,\n\n  /**\n   * This option lets you set the max number of formal parameters allowed per\n   * function:\n   *\n   *     // jshint maxparams:3\n   *\n   *     function login(request, onSuccess) {\n   *       // ...\n   *     }\n   *\n   *     // JSHint: Too many parameters per function (4).\n   *     function logout(request, isManual, whereAmI, onSuccess) {\n   *       // ...\n   *     }\n   */\n  maxparams    : false,\n\n  /**\n   * This option lets you control cyclomatic complexity throughout your code.\n   * Cyclomatic complexity measures the number of linearly independent paths\n   * through a program's source code. Read more about [cyclomatic complexity on\n   * Wikipedia](http://en.wikipedia.org/wiki/Cyclomatic_complexity).\n   */\n  maxcomplexity: false,\n\n  /**\n   * This option suppresses warnings about variable shadowing i.e. declaring a\n   * variable that had been already declared somewhere in the outer scope.\n   *\n   * - \"inner\"  - check for variables defined in the same scope only\n   * - \"outer\"  - check for variables defined in outer scopes as well\n   * - false    - same as inner\n   * - true     - allow variable shadowing\n   */\n  shadow       : false,\n\n  /**\n   * This option requires the code to run in ECMAScript 5's strict mode.\n   * [Strict mode](https://developer.mozilla.org/en/JavaScript/Strict_mode)\n   * is a way to opt in to a restricted variant of JavaScript. Strict mode\n   * eliminates some JavaScript pitfalls that didn't cause errors by changing\n   * them to produce errors.  It also fixes mistakes that made it difficult\n   * for the JavaScript engines to perform certain optimizations.\n   *\n   * - \"func\"    - there must be a `\"use strict\";` directive at function level\n   * - \"global\"  - there must be a `\"use strict\";` directive at global level\n   * - \"implied\" - lint the code as if there is the `\"use strict\";` directive\n   * - false     - disable warnings about strict mode\n   * - true      - same as `\"func\"`, but environment options have precedence over\n   *               this (e.g. `node`, `module`, `browserify` and `phantomjs` can\n   *               set `strict: global`)\n   */\n  strict      : true,\n\n  /**\n   * This option warns when you define and never use your variables. It is very\n   * useful for general code cleanup, especially when used in addition to\n   * `undef`.\n   *\n   *     // jshint unused:true\n   *\n   *     function test(a, b) {\n   *       var c, d = 2;\n   *\n   *       return a + d;\n   *     }\n   *\n   *     test(1, 2);\n   *\n   *     // Line 3: 'b' was defined but never used.\n   *     // Line 4: 'c' was defined but never used.\n   *\n   * In addition to that, this option will warn you about unused global\n   * variables declared via the `global` directive.\n   *\n   * This can be set to `vars` to only check for variables, not function\n   * parameters, or `strict` to check all variables and parameters.  The\n   * default (true) behavior is to allow unused parameters that are followed by\n   * a used parameter.\n   */\n  unused       : true,\n\n  /**\n   * This option prohibits the use of a variable before it was defined.\n   * JavaScript has function scope only and, in addition to that, all variables\n   * are always moved—or hoisted— to the top of the function. This behavior can\n   * lead to some very nasty bugs and that's why it is safer to always use\n   * variable only after they have been explicitly defined.\n   *\n   * Setting this option to \"nofunc\" will allow function declarations to be\n   * ignored.\n   *\n   * For more in-depth understanding of scoping and hoisting in JavaScript,\n   * read [JavaScript Scoping and\n   * Hoisting](http://www.adequatelygood.com/2010/2/JavaScript-Scoping-and-Hoisting)\n   * by Ben Cherry.\n   */\n  latedef      : false,\n\n  ignore       : false, // start/end ignoring lines of code, bypassing the lexer\n                        //   start    - start ignoring lines, including the current line\n                        //   end      - stop ignoring lines, starting on the next line\n                        //   line     - ignore warnings / errors for just a single line\n                        //              (this option does not bypass the lexer)\n\n  ignoreDelimiters: false, // array of start/end delimiters used to ignore\n                           // certain chunks from code\n\n  /**\n   * This option is used to specify the ECMAScript version to which the code\n   * must adhere. It can assume one of the following values:\n   *  - `3` - If you need your program to be executable\n   *    in older browsers—such as Internet Explorer 6/7/8/9—and other legacy\n   *    JavaScript environments\n   *  - `5` - To enable syntax first defined in [the ECMAScript 5.1\n   *    specification](http://www.ecma-international.org/ecma-262/5.1/index.html).\n   *    This includes allowing reserved keywords as object properties.\n   *  - `6` - To tell JSHint that your code uses [ECMAScript\n   *    6](http://www.ecma-international.org/ecma-262/6.0/index.html) specific\n   *    syntax. Note that not all browsers implement them.\n   */\n  esversion: 5\n};\n\n// These are JSHint boolean options which are shared with JSLint\n// where the definition in JSHint is opposite JSLint\nexports.inverted = {\n  bitwise : true,\n  forin   : true,\n  newcap  : true,\n  plusplus: true,\n  regexp  : true,\n  undef   : true,\n\n  // Inverted and renamed, use JSHint name here\n  eqeqeq  : true,\n  strict  : true\n};\n\nexports.validNames = Object.keys(exports.val)\n  .concat(Object.keys(exports.bool.relaxing))\n  .concat(Object.keys(exports.bool.enforcing))\n  .concat(Object.keys(exports.bool.obsolete))\n  .concat(Object.keys(exports.bool.environments));\n\n// These are JSHint boolean options which are shared with JSLint\n// where the name has been changed but the effect is unchanged\nexports.renamed = {\n  eqeq   : \"eqeqeq\",\n  windows: \"wsh\",\n  sloppy : \"strict\"\n};\n\nexports.removed = {\n  nomen: true,\n  onevar: true,\n  passfail: true,\n  white: true,\n  gcl: true,\n  smarttabs: true,\n  trailing: true\n};\n\n// Add options here which should not be automatically enforced by\n// `enforceall`.\nexports.noenforceall = {\n  varstmt: true,\n  strict: true\n};\n\n},{}],\"/node_modules/jshint/src/reg.js\":[function(_dereq_,module,exports){\n/*\n * Regular expressions. Some of these are stupidly long.\n */\n\n/*jshint maxlen:1000 */\n\n\"use strict\";\n\n// Unsafe comment or string (ax)\nexports.unsafeString =\n  /@cc|<\\/?|script|\\]\\s*\\]|<\\s*!|&lt/i;\n\n// Unsafe characters that are silently deleted by one or more browsers (cx)\nexports.unsafeChars =\n  /[\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/;\n\n// Characters in strings that need escaping (nx and nxg)\nexports.needEsc =\n  /[\\u0000-\\u001f&<\"\\/\\\\\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/;\n\nexports.needEscGlobal =\n  /[\\u0000-\\u001f&<\"\\/\\\\\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\n// Star slash (lx)\nexports.starSlash = /\\*\\//;\n\n// Identifier (ix)\nexports.identifier = /^([a-zA-Z_$][a-zA-Z0-9_$]*)$/;\n\n// JavaScript URL (jx)\nexports.javascriptURL = /^(?:javascript|jscript|ecmascript|vbscript|livescript)\\s*:/i;\n\n// Catches /* falls through */ comments (ft)\nexports.fallsThrough = /^\\s*falls?\\sthrough\\s*$/;\n\n// very conservative rule (eg: only one space between the start of the comment and the first character)\n// to relax the maxlen option\nexports.maxlenException = /^(?:(?:\\/\\/|\\/\\*|\\*) ?)?[^ ]+$/;\n\n},{}],\"/node_modules/jshint/src/scope-manager.js\":[function(_dereq_,module,exports){\n\"use strict\";\n\nvar _      = _dereq_(\"../lodash\");\nvar events = _dereq_(\"events\");\n\n// Used to denote membership in lookup tables (a primitive value such as `true`\n// would be silently rejected for the property name \"__proto__\" in some\n// environments)\nvar marker = {};\n\n/**\n * Creates a scope manager that handles variables and labels, storing usages\n * and resolving when variables are used and undefined\n */\nvar scopeManager = function(state, predefined, exported, declared) {\n\n  var _current;\n  var _scopeStack = [];\n\n  function _newScope(type) {\n    _current = {\n      \"(labels)\": Object.create(null),\n      \"(usages)\": Object.create(null),\n      \"(breakLabels)\": Object.create(null),\n      \"(parent)\": _current,\n      \"(type)\": type,\n      \"(params)\": (type === \"functionparams\" || type === \"catchparams\") ? [] : null\n    };\n    _scopeStack.push(_current);\n  }\n\n  _newScope(\"global\");\n  _current[\"(predefined)\"] = predefined;\n\n  var _currentFunctBody = _current; // this is the block after the params = function\n\n  var usedPredefinedAndGlobals = Object.create(null);\n  var impliedGlobals = Object.create(null);\n  var unuseds = [];\n  var emitter = new events.EventEmitter();\n\n  function warning(code, token) {\n    emitter.emit(\"warning\", {\n      code: code,\n      token: token,\n      data: _.slice(arguments, 2)\n    });\n  }\n\n  function error(code, token) {\n    emitter.emit(\"warning\", {\n      code: code,\n      token: token,\n      data: _.slice(arguments, 2)\n    });\n  }\n\n  function _setupUsages(labelName) {\n    if (!_current[\"(usages)\"][labelName]) {\n      _current[\"(usages)\"][labelName] = {\n        \"(modified)\": [],\n        \"(reassigned)\": [],\n        \"(tokens)\": []\n      };\n    }\n  }\n\n  var _getUnusedOption = function(unused_opt) {\n    if (unused_opt === undefined) {\n      unused_opt = state.option.unused;\n    }\n\n    if (unused_opt === true) {\n      unused_opt = \"last-param\";\n    }\n\n    return unused_opt;\n  };\n\n  var _warnUnused = function(name, tkn, type, unused_opt) {\n    var line = tkn.line;\n    var chr  = tkn.from;\n    var raw_name = tkn.raw_text || name;\n\n    unused_opt = _getUnusedOption(unused_opt);\n\n    var warnable_types = {\n      \"vars\": [\"var\"],\n      \"last-param\": [\"var\", \"param\"],\n      \"strict\": [\"var\", \"param\", \"last-param\"]\n    };\n\n    if (unused_opt) {\n      if (warnable_types[unused_opt] && warnable_types[unused_opt].indexOf(type) !== -1) {\n        warning(\"W098\", { line: line, from: chr }, raw_name);\n      }\n    }\n\n    // inconsistent - see gh-1894\n    if (unused_opt || type === \"var\") {\n      unuseds.push({\n        name: name,\n        line: line,\n        character: chr\n      });\n    }\n  };\n\n  /**\n   * Checks the current scope for unused identifiers\n   */\n  function _checkForUnused() {\n    // function params are handled specially\n    // assume that parameters are the only thing declared in the param scope\n    if (_current[\"(type)\"] === \"functionparams\") {\n      _checkParams();\n      return;\n    }\n    var curentLabels = _current[\"(labels)\"];\n    for (var labelName in curentLabels) {\n      if (curentLabels[labelName]) {\n        if (curentLabels[labelName][\"(type)\"] !== \"exception\" &&\n          curentLabels[labelName][\"(unused)\"]) {\n          _warnUnused(labelName, curentLabels[labelName][\"(token)\"], \"var\");\n        }\n      }\n    }\n  }\n\n  /**\n   * Checks the current scope for unused parameters\n   * Must be called in a function parameter scope\n   */\n  function _checkParams() {\n    var params = _current[\"(params)\"];\n\n    if (!params) {\n      return;\n    }\n\n    var param = params.pop();\n    var unused_opt;\n\n    while (param) {\n      var label = _current[\"(labels)\"][param];\n\n      unused_opt = _getUnusedOption(state.funct[\"(unusedOption)\"]);\n\n      // 'undefined' is a special case for (function(window, undefined) { ... })();\n      // patterns.\n      if (param === \"undefined\")\n        return;\n\n      if (label[\"(unused)\"]) {\n        _warnUnused(param, label[\"(token)\"], \"param\", state.funct[\"(unusedOption)\"]);\n      } else if (unused_opt === \"last-param\") {\n        return;\n      }\n\n      param = params.pop();\n    }\n  }\n\n  /**\n   * Finds the relevant label's scope, searching from nearest outwards\n   * @returns {Object} the scope the label was found in\n   */\n  function _getLabel(labelName) {\n    for (var i = _scopeStack.length - 1 ; i >= 0; --i) {\n      var scopeLabels = _scopeStack[i][\"(labels)\"];\n      if (scopeLabels[labelName]) {\n        return scopeLabels;\n      }\n    }\n  }\n\n  function usedSoFarInCurrentFunction(labelName) {\n    // used so far in this whole function and any sub functions\n    for (var i = _scopeStack.length - 1; i >= 0; i--) {\n      var current = _scopeStack[i];\n      if (current[\"(usages)\"][labelName]) {\n        return current[\"(usages)\"][labelName];\n      }\n      if (current === _currentFunctBody) {\n        break;\n      }\n    }\n    return false;\n  }\n\n  function _checkOuterShadow(labelName, token) {\n\n    // only check if shadow is outer\n    if (state.option.shadow !== \"outer\") {\n      return;\n    }\n\n    var isGlobal = _currentFunctBody[\"(type)\"] === \"global\",\n      isNewFunction = _current[\"(type)\"] === \"functionparams\";\n\n    var outsideCurrentFunction = !isGlobal;\n    for (var i = 0; i < _scopeStack.length; i++) {\n      var stackItem = _scopeStack[i];\n\n      if (!isNewFunction && _scopeStack[i + 1] === _currentFunctBody) {\n        outsideCurrentFunction = false;\n      }\n      if (outsideCurrentFunction && stackItem[\"(labels)\"][labelName]) {\n        warning(\"W123\", token, labelName);\n      }\n      if (stackItem[\"(breakLabels)\"][labelName]) {\n        warning(\"W123\", token, labelName);\n      }\n    }\n  }\n\n  function _latedefWarning(type, labelName, token) {\n    if (state.option.latedef) {\n      // if either latedef is strict and this is a function\n      //    or this is not a function\n      if ((state.option.latedef === true && type === \"function\") ||\n        type !== \"function\") {\n        warning(\"W003\", token, labelName);\n      }\n    }\n  }\n\n  var scopeManagerInst = {\n\n    on: function(names, listener) {\n      names.split(\" \").forEach(function(name) {\n        emitter.on(name, listener);\n      });\n    },\n\n    isPredefined: function(labelName) {\n      return !this.has(labelName) && _.has(_scopeStack[0][\"(predefined)\"], labelName);\n    },\n\n    /**\n     * Tell the manager we are entering a new block of code\n     * @param {string} [type] - The type of the block. Valid values are\n     *                          \"functionparams\", \"catchparams\" and\n     *                          \"functionouter\"\n     */\n    stack: function(type) {\n      var previousScope = _current;\n      _newScope(type);\n\n      if (!type && previousScope[\"(type)\"] === \"functionparams\") {\n\n        _current[\"(isFuncBody)\"] = true;\n        _current[\"(context)\"] = _currentFunctBody;\n        _currentFunctBody = _current;\n      }\n    },\n\n    unstack: function() {\n      // jshint proto: true\n      var subScope = _scopeStack.length > 1 ? _scopeStack[_scopeStack.length - 2] : null;\n      var isUnstackingFunctionBody = _current === _currentFunctBody,\n        isUnstackingFunctionParams = _current[\"(type)\"] === \"functionparams\",\n        isUnstackingFunctionOuter = _current[\"(type)\"] === \"functionouter\";\n\n      var i, j;\n      var currentUsages = _current[\"(usages)\"];\n      var currentLabels = _current[\"(labels)\"];\n      var usedLabelNameList = Object.keys(currentUsages);\n\n      if (currentUsages.__proto__ && usedLabelNameList.indexOf(\"__proto__\") === -1) {\n        usedLabelNameList.push(\"__proto__\");\n      }\n\n      for (i = 0; i < usedLabelNameList.length; i++) {\n        var usedLabelName = usedLabelNameList[i];\n\n        var usage = currentUsages[usedLabelName];\n        var usedLabel = currentLabels[usedLabelName];\n        if (usedLabel) {\n          var usedLabelType = usedLabel[\"(type)\"];\n\n          if (usedLabel[\"(useOutsideOfScope)\"] && !state.option.funcscope) {\n            var usedTokens = usage[\"(tokens)\"];\n            if (usedTokens) {\n              for (j = 0; j < usedTokens.length; j++) {\n                // Keep the consistency of https://github.com/jshint/jshint/issues/2409\n                if (usedLabel[\"(function)\"] === usedTokens[j][\"(function)\"]) {\n                  error(\"W038\", usedTokens[j], usedLabelName);\n                }\n              }\n            }\n          }\n\n          // mark the label used\n          _current[\"(labels)\"][usedLabelName][\"(unused)\"] = false;\n\n          // check for modifying a const\n          if (usedLabelType === \"const\" && usage[\"(modified)\"]) {\n            for (j = 0; j < usage[\"(modified)\"].length; j++) {\n              error(\"E013\", usage[\"(modified)\"][j], usedLabelName);\n            }\n          }\n\n          // check for re-assigning a function declaration\n          if ((usedLabelType === \"function\" || usedLabelType === \"class\") &&\n              usage[\"(reassigned)\"]) {\n            for (j = 0; j < usage[\"(reassigned)\"].length; j++) {\n              error(\"W021\", usage[\"(reassigned)\"][j], usedLabelName, usedLabelType);\n            }\n          }\n          continue;\n        }\n\n        if (isUnstackingFunctionOuter) {\n          state.funct[\"(isCapturing)\"] = true;\n        }\n\n        if (subScope) {\n          // not exiting the global scope, so copy the usage down in case its an out of scope usage\n          if (!subScope[\"(usages)\"][usedLabelName]) {\n            subScope[\"(usages)\"][usedLabelName] = usage;\n            if (isUnstackingFunctionBody) {\n              subScope[\"(usages)\"][usedLabelName][\"(onlyUsedSubFunction)\"] = true;\n            }\n          } else {\n            var subScopeUsage = subScope[\"(usages)\"][usedLabelName];\n            subScopeUsage[\"(modified)\"] = subScopeUsage[\"(modified)\"].concat(usage[\"(modified)\"]);\n            subScopeUsage[\"(tokens)\"] = subScopeUsage[\"(tokens)\"].concat(usage[\"(tokens)\"]);\n            subScopeUsage[\"(reassigned)\"] =\n              subScopeUsage[\"(reassigned)\"].concat(usage[\"(reassigned)\"]);\n            subScopeUsage[\"(onlyUsedSubFunction)\"] = false;\n          }\n        } else {\n          // this is exiting global scope, so we finalise everything here - we are at the end of the file\n          if (typeof _current[\"(predefined)\"][usedLabelName] === \"boolean\") {\n\n            // remove the declared token, so we know it is used\n            delete declared[usedLabelName];\n\n            // note it as used so it can be reported\n            usedPredefinedAndGlobals[usedLabelName] = marker;\n\n            // check for re-assigning a read-only (set to false) predefined\n            if (_current[\"(predefined)\"][usedLabelName] === false && usage[\"(reassigned)\"]) {\n              for (j = 0; j < usage[\"(reassigned)\"].length; j++) {\n                warning(\"W020\", usage[\"(reassigned)\"][j]);\n              }\n            }\n          }\n          else {\n            // label usage is not predefined and we have not found a declaration\n            // so report as undeclared\n            if (usage[\"(tokens)\"]) {\n              for (j = 0; j < usage[\"(tokens)\"].length; j++) {\n                var undefinedToken = usage[\"(tokens)\"][j];\n                // if its not a forgiven undefined (e.g. typof x)\n                if (!undefinedToken.forgiveUndef) {\n                  // if undef is on and undef was on when the token was defined\n                  if (state.option.undef && !undefinedToken.ignoreUndef) {\n                    warning(\"W117\", undefinedToken, usedLabelName);\n                  }\n                  if (impliedGlobals[usedLabelName]) {\n                    impliedGlobals[usedLabelName].line.push(undefinedToken.line);\n                  } else {\n                    impliedGlobals[usedLabelName] = {\n                      name: usedLabelName,\n                      line: [undefinedToken.line]\n                    };\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n\n      // if exiting the global scope, we can warn about declared globals that haven't been used yet\n      if (!subScope) {\n        Object.keys(declared)\n          .forEach(function(labelNotUsed) {\n            _warnUnused(labelNotUsed, declared[labelNotUsed], \"var\");\n          });\n      }\n\n      // if we have a sub scope we can copy too and we are still within the function boundary\n      if (subScope && !isUnstackingFunctionBody &&\n        !isUnstackingFunctionParams && !isUnstackingFunctionOuter) {\n        var labelNames = Object.keys(currentLabels);\n        for (i = 0; i < labelNames.length; i++) {\n\n          var defLabelName = labelNames[i];\n\n          // if its function scoped and\n          // not already defined (caught with shadow, shouldn't also trigger out of scope)\n          if (!currentLabels[defLabelName][\"(blockscoped)\"] &&\n            currentLabels[defLabelName][\"(type)\"] !== \"exception\" &&\n            !this.funct.has(defLabelName, { excludeCurrent: true })) {\n            subScope[\"(labels)\"][defLabelName] = currentLabels[defLabelName];\n            // we do not warn about out of scope usages in the global scope\n            if (_currentFunctBody[\"(type)\"] !== \"global\") {\n              subScope[\"(labels)\"][defLabelName][\"(useOutsideOfScope)\"] = true;\n            }\n            delete currentLabels[defLabelName];\n          }\n        }\n      }\n\n      _checkForUnused();\n\n      _scopeStack.pop();\n      if (isUnstackingFunctionBody) {\n        _currentFunctBody = _scopeStack[_.findLastIndex(_scopeStack, function(scope) {\n          // if function or if global (which is at the bottom so it will only return true if we call back)\n          return scope[\"(isFuncBody)\"] || scope[\"(type)\"] === \"global\";\n        })];\n      }\n\n      _current = subScope;\n    },\n\n    /**\n     * Add a param to the current scope\n     * @param {string} labelName\n     * @param {Token} token\n     * @param {string} [type=\"param\"] param type\n     */\n    addParam: function(labelName, token, type) {\n      type = type || \"param\";\n\n      if (type === \"exception\") {\n        // if defined in the current function\n        var previouslyDefinedLabelType = this.funct.labeltype(labelName);\n        if (previouslyDefinedLabelType && previouslyDefinedLabelType !== \"exception\") {\n          // and has not been used yet in the current function scope\n          if (!state.option.node) {\n            warning(\"W002\", state.tokens.next, labelName);\n          }\n        }\n      }\n\n      // The variable was declared in the current scope\n      if (_.has(_current[\"(labels)\"], labelName)) {\n        _current[\"(labels)\"][labelName].duplicated = true;\n\n      // The variable was declared in an outer scope\n      } else {\n        // if this scope has the variable defined, it's a re-definition error\n        _checkOuterShadow(labelName, token, type);\n\n        _current[\"(labels)\"][labelName] = {\n          \"(type)\" : type,\n          \"(token)\": token,\n          \"(unused)\": true };\n\n        _current[\"(params)\"].push(labelName);\n      }\n\n      if (_.has(_current[\"(usages)\"], labelName)) {\n        var usage = _current[\"(usages)\"][labelName];\n        // if its in a sub function it is not necessarily an error, just latedef\n        if (usage[\"(onlyUsedSubFunction)\"]) {\n          _latedefWarning(type, labelName, token);\n        } else {\n          // this is a clear illegal usage for block scoped variables\n          warning(\"E056\", token, labelName, type);\n        }\n      }\n    },\n\n    validateParams: function() {\n      // This method only concerns errors for function parameters\n      if (_currentFunctBody[\"(type)\"] === \"global\") {\n        return;\n      }\n\n      var isStrict = state.isStrict();\n      var currentFunctParamScope = _currentFunctBody[\"(parent)\"];\n\n      if (!currentFunctParamScope[\"(params)\"]) {\n        return;\n      }\n\n      currentFunctParamScope[\"(params)\"].forEach(function(labelName) {\n        var label = currentFunctParamScope[\"(labels)\"][labelName];\n\n        if (label && label.duplicated) {\n          if (isStrict) {\n            warning(\"E011\", label[\"(token)\"], labelName);\n          } else if (state.option.shadow !== true) {\n            warning(\"W004\", label[\"(token)\"], labelName);\n          }\n        }\n      });\n    },\n\n    getUsedOrDefinedGlobals: function() {\n      // jshint proto: true\n      var list = Object.keys(usedPredefinedAndGlobals);\n\n      // If `__proto__` is used as a global variable name, its entry in the\n      // lookup table may not be enumerated by `Object.keys` (depending on the\n      // environment).\n      if (usedPredefinedAndGlobals.__proto__ === marker &&\n        list.indexOf(\"__proto__\") === -1) {\n        list.push(\"__proto__\");\n      }\n\n      return list;\n    },\n\n    /**\n     * Gets an array of implied globals\n     * @returns {Array.<{ name: string, line: Array.<number>}>}\n     */\n    getImpliedGlobals: function() {\n      // jshint proto: true\n      var values = _.values(impliedGlobals);\n      var hasProto = false;\n\n      // If `__proto__` is an implied global variable, its entry in the lookup\n      // table may not be enumerated by `_.values` (depending on the\n      // environment).\n      if (impliedGlobals.__proto__) {\n        hasProto = values.some(function(value) {\n          return value.name === \"__proto__\";\n        });\n\n        if (!hasProto) {\n          values.push(impliedGlobals.__proto__);\n        }\n      }\n\n      return values;\n    },\n\n    /**\n     * Returns a list of unused variables\n     * @returns {Array}\n     */\n    getUnuseds: function() {\n      return unuseds;\n    },\n\n    has: function(labelName) {\n      return Boolean(_getLabel(labelName));\n    },\n\n    labeltype: function(labelName) {\n      // returns a labels type or null if not present\n      var scopeLabels = _getLabel(labelName);\n      if (scopeLabels) {\n        return scopeLabels[labelName][\"(type)\"];\n      }\n      return null;\n    },\n\n    /**\n     * for the exported options, indicating a variable is used outside the file\n     */\n    addExported: function(labelName) {\n      var globalLabels = _scopeStack[0][\"(labels)\"];\n      if (_.has(declared, labelName)) {\n        // remove the declared token, so we know it is used\n        delete declared[labelName];\n      } else if (_.has(globalLabels, labelName)) {\n        globalLabels[labelName][\"(unused)\"] = false;\n      } else {\n        for (var i = 1; i < _scopeStack.length; i++) {\n          var scope = _scopeStack[i];\n          // if `scope.(type)` is not defined, it is a block scope\n          if (!scope[\"(type)\"]) {\n            if (_.has(scope[\"(labels)\"], labelName) &&\n                !scope[\"(labels)\"][labelName][\"(blockscoped)\"]) {\n              scope[\"(labels)\"][labelName][\"(unused)\"] = false;\n              return;\n            }\n          } else {\n            break;\n          }\n        }\n        exported[labelName] = true;\n      }\n    },\n\n    /**\n     * Mark an indentifier as es6 module exported\n     */\n    setExported: function(labelName, token) {\n      this.block.use(labelName, token);\n    },\n\n    /**\n     * adds an indentifier to the relevant current scope and creates warnings/errors as necessary\n     * @param {string} labelName\n     * @param {Object} opts\n     * @param {String} opts.type - the type of the label e.g. \"param\", \"var\", \"let, \"const\", \"function\"\n     * @param {Token} opts.token - the token pointing at the declaration\n     */\n    addlabel: function(labelName, opts) {\n\n      var type  = opts.type;\n      var token = opts.token;\n      var isblockscoped = type === \"let\" || type === \"const\" || type === \"class\";\n      var isexported    = (isblockscoped ? _current : _currentFunctBody)[\"(type)\"] === \"global\" &&\n                          _.has(exported, labelName);\n\n      // outer shadow check (inner is only on non-block scoped)\n      _checkOuterShadow(labelName, token, type);\n\n      // if is block scoped (let or const)\n      if (isblockscoped) {\n\n        var declaredInCurrentScope = _current[\"(labels)\"][labelName];\n        // for block scoped variables, params are seen in the current scope as the root function\n        // scope, so check these too.\n        if (!declaredInCurrentScope && _current === _currentFunctBody &&\n          _current[\"(type)\"] !== \"global\") {\n          declaredInCurrentScope = !!_currentFunctBody[\"(parent)\"][\"(labels)\"][labelName];\n        }\n\n        // if its not already defined (which is an error, so ignore) and is used in TDZ\n        if (!declaredInCurrentScope && _current[\"(usages)\"][labelName]) {\n          var usage = _current[\"(usages)\"][labelName];\n          // if its in a sub function it is not necessarily an error, just latedef\n          if (usage[\"(onlyUsedSubFunction)\"]) {\n            _latedefWarning(type, labelName, token);\n          } else {\n            // this is a clear illegal usage for block scoped variables\n            warning(\"E056\", token, labelName, type);\n          }\n        }\n\n        // if this scope has the variable defined, its a re-definition error\n        if (declaredInCurrentScope) {\n          warning(\"E011\", token, labelName);\n        }\n        else if (state.option.shadow === \"outer\") {\n\n          // if shadow is outer, for block scope we want to detect any shadowing within this function\n          if (scopeManagerInst.funct.has(labelName)) {\n            warning(\"W004\", token, labelName);\n          }\n        }\n\n        scopeManagerInst.block.add(labelName, type, token, !isexported);\n\n      } else {\n\n        var declaredInCurrentFunctionScope = scopeManagerInst.funct.has(labelName);\n\n        // check for late definition, ignore if already declared\n        if (!declaredInCurrentFunctionScope && usedSoFarInCurrentFunction(labelName)) {\n          _latedefWarning(type, labelName, token);\n        }\n\n        // defining with a var or a function when a block scope variable of the same name\n        // is in scope is an error\n        if (scopeManagerInst.funct.has(labelName, { onlyBlockscoped: true })) {\n          warning(\"E011\", token, labelName);\n        } else if (state.option.shadow !== true) {\n          // now since we didn't get any block scope variables, test for var/function\n          // shadowing\n          if (declaredInCurrentFunctionScope && labelName !== \"__proto__\") {\n\n            // see https://github.com/jshint/jshint/issues/2400\n            if (_currentFunctBody[\"(type)\"] !== \"global\") {\n              warning(\"W004\", token, labelName);\n            }\n          }\n        }\n\n        scopeManagerInst.funct.add(labelName, type, token, !isexported);\n\n        if (_currentFunctBody[\"(type)\"] === \"global\") {\n          usedPredefinedAndGlobals[labelName] = marker;\n        }\n      }\n    },\n\n    funct: {\n      /**\n       * Returns the label type given certain options\n       * @param labelName\n       * @param {Object=} options\n       * @param {Boolean=} options.onlyBlockscoped - only include block scoped labels\n       * @param {Boolean=} options.excludeParams - exclude the param scope\n       * @param {Boolean=} options.excludeCurrent - exclude the current scope\n       * @returns {String}\n       */\n      labeltype: function(labelName, options) {\n        var onlyBlockscoped = options && options.onlyBlockscoped;\n        var excludeParams = options && options.excludeParams;\n        var currentScopeIndex = _scopeStack.length - (options && options.excludeCurrent ? 2 : 1);\n        for (var i = currentScopeIndex; i >= 0; i--) {\n          var current = _scopeStack[i];\n          if (current[\"(labels)\"][labelName] &&\n            (!onlyBlockscoped || current[\"(labels)\"][labelName][\"(blockscoped)\"])) {\n            return current[\"(labels)\"][labelName][\"(type)\"];\n          }\n          var scopeCheck = excludeParams ? _scopeStack[ i - 1 ] : current;\n          if (scopeCheck && scopeCheck[\"(type)\"] === \"functionparams\") {\n            return null;\n          }\n        }\n        return null;\n      },\n      /**\n       * Returns if a break label exists in the function scope\n       * @param {string} labelName\n       * @returns {boolean}\n       */\n      hasBreakLabel: function(labelName) {\n        for (var i = _scopeStack.length - 1; i >= 0; i--) {\n          var current = _scopeStack[i];\n\n          if (current[\"(breakLabels)\"][labelName]) {\n            return true;\n          }\n          if (current[\"(type)\"] === \"functionparams\") {\n            return false;\n          }\n        }\n        return false;\n      },\n      /**\n       * Returns if the label is in the current function scope\n       * See scopeManager.funct.labelType for options\n       */\n      has: function(labelName, options) {\n        return Boolean(this.labeltype(labelName, options));\n      },\n\n      /**\n       * Adds a new function scoped variable\n       * see block.add for block scoped\n       */\n      add: function(labelName, type, tok, unused) {\n        _current[\"(labels)\"][labelName] = {\n          \"(type)\" : type,\n          \"(token)\": tok,\n          \"(blockscoped)\": false,\n          \"(function)\": _currentFunctBody,\n          \"(unused)\": unused };\n      }\n    },\n\n    block: {\n\n      /**\n       * is the current block global?\n       * @returns Boolean\n       */\n      isGlobal: function() {\n        return _current[\"(type)\"] === \"global\";\n      },\n\n      use: function(labelName, token) {\n\n        // if resolves to current function params, then do not store usage just resolve\n        // this is because function(a) { var a; a = a; } will resolve to the param, not\n        // to the unset var\n        // first check the param is used\n        var paramScope = _currentFunctBody[\"(parent)\"];\n        if (paramScope && paramScope[\"(labels)\"][labelName] &&\n          paramScope[\"(labels)\"][labelName][\"(type)\"] === \"param\") {\n\n          // then check its not declared by a block scope variable\n          if (!scopeManagerInst.funct.has(labelName,\n                { excludeParams: true, onlyBlockscoped: true })) {\n            paramScope[\"(labels)\"][labelName][\"(unused)\"] = false;\n          }\n        }\n\n        if (token && (state.ignored.W117 || state.option.undef === false)) {\n          token.ignoreUndef = true;\n        }\n\n        _setupUsages(labelName);\n\n        if (token) {\n          token[\"(function)\"] = _currentFunctBody;\n          _current[\"(usages)\"][labelName][\"(tokens)\"].push(token);\n        }\n      },\n\n      reassign: function(labelName, token) {\n\n        this.modify(labelName, token);\n\n        _current[\"(usages)\"][labelName][\"(reassigned)\"].push(token);\n      },\n\n      modify: function(labelName, token) {\n\n        _setupUsages(labelName);\n\n        _current[\"(usages)\"][labelName][\"(modified)\"].push(token);\n      },\n\n      /**\n       * Adds a new variable\n       */\n      add: function(labelName, type, tok, unused) {\n        _current[\"(labels)\"][labelName] = {\n          \"(type)\" : type,\n          \"(token)\": tok,\n          \"(blockscoped)\": true,\n          \"(unused)\": unused };\n      },\n\n      addBreakLabel: function(labelName, opts) {\n        var token = opts.token;\n        if (scopeManagerInst.funct.hasBreakLabel(labelName)) {\n          warning(\"E011\", token, labelName);\n        }\n        else if (state.option.shadow === \"outer\") {\n          if (scopeManagerInst.funct.has(labelName)) {\n            warning(\"W004\", token, labelName);\n          } else {\n            _checkOuterShadow(labelName, token);\n          }\n        }\n        _current[\"(breakLabels)\"][labelName] = token;\n      }\n    }\n  };\n  return scopeManagerInst;\n};\n\nmodule.exports = scopeManager;\n\n},{\"../lodash\":\"/node_modules/jshint/lodash.js\",\"events\":\"/node_modules/browserify/node_modules/events/events.js\"}],\"/node_modules/jshint/src/state.js\":[function(_dereq_,module,exports){\n\"use strict\";\nvar NameStack = _dereq_(\"./name-stack.js\");\n\nvar state = {\n  syntax: {},\n\n  /**\n   * Determine if the code currently being linted is strict mode code.\n   *\n   * @returns {boolean}\n   */\n  isStrict: function() {\n    return this.directive[\"use strict\"] || this.inClassBody ||\n      this.option.module || this.option.strict === \"implied\";\n  },\n\n  // Assumption: chronologically ES3 < ES5 < ES6 < Moz\n\n  inMoz: function() {\n    return this.option.moz;\n  },\n\n  /**\n   * @param {boolean} strict - When `true`, only consider ES6 when in\n   *                           \"esversion: 6\" code and *not* in \"moz\".\n   */\n  inES6: function() {\n    return this.option.moz || this.option.esversion >= 6;\n  },\n\n  /**\n   * @param {boolean} strict - When `true`, return `true` only when\n   *                           esversion is exactly 5\n   */\n  inES5: function(strict) {\n    if (strict) {\n      return (!this.option.esversion || this.option.esversion === 5) && !this.option.moz;\n    }\n    return !this.option.esversion || this.option.esversion >= 5 || this.option.moz;\n  },\n\n\n  reset: function() {\n    this.tokens = {\n      prev: null,\n      next: null,\n      curr: null\n    };\n\n    this.option = {};\n    this.funct = null;\n    this.ignored = {};\n    this.directive = {};\n    this.jsonMode = false;\n    this.jsonWarnings = [];\n    this.lines = [];\n    this.tab = \"\";\n    this.cache = {}; // Node.JS doesn't have Map. Sniff.\n    this.ignoredLines = {};\n    this.forinifcheckneeded = false;\n    this.nameStack = new NameStack();\n    this.inClassBody = false;\n  }\n};\n\nexports.state = state;\n\n},{\"./name-stack.js\":\"/node_modules/jshint/src/name-stack.js\"}],\"/node_modules/jshint/src/style.js\":[function(_dereq_,module,exports){\n\"use strict\";\n\nexports.register = function(linter) {\n  // Check for properties named __proto__. This special property was\n  // deprecated and then re-introduced for ES6.\n\n  linter.on(\"Identifier\", function style_scanProto(data) {\n    if (linter.getOption(\"proto\")) {\n      return;\n    }\n\n    if (data.name === \"__proto__\") {\n      linter.warn(\"W103\", {\n        line: data.line,\n        char: data.char,\n        data: [ data.name, \"6\" ]\n      });\n    }\n  });\n\n  // Check for properties named __iterator__. This is a special property\n  // available only in browsers with JavaScript 1.7 implementation, but\n  // it is deprecated for ES6\n\n  linter.on(\"Identifier\", function style_scanIterator(data) {\n    if (linter.getOption(\"iterator\")) {\n      return;\n    }\n\n    if (data.name === \"__iterator__\") {\n      linter.warn(\"W103\", {\n        line: data.line,\n        char: data.char,\n        data: [ data.name ]\n      });\n    }\n  });\n\n  // Check that all identifiers are using camelCase notation.\n  // Exceptions: names like MY_VAR and _myVar.\n\n  linter.on(\"Identifier\", function style_scanCamelCase(data) {\n    if (!linter.getOption(\"camelcase\")) {\n      return;\n    }\n\n    if (data.name.replace(/^_+|_+$/g, \"\").indexOf(\"_\") > -1 && !data.name.match(/^[A-Z0-9_]*$/)) {\n      linter.warn(\"W106\", {\n        line: data.line,\n        char: data.from,\n        data: [ data.name ]\n      });\n    }\n  });\n\n  // Enforce consistency in style of quoting.\n\n  linter.on(\"String\", function style_scanQuotes(data) {\n    var quotmark = linter.getOption(\"quotmark\");\n    var code;\n\n    if (!quotmark) {\n      return;\n    }\n\n    // If quotmark is set to 'single' warn about all double-quotes.\n\n    if (quotmark === \"single\" && data.quote !== \"'\") {\n      code = \"W109\";\n    }\n\n    // If quotmark is set to 'double' warn about all single-quotes.\n\n    if (quotmark === \"double\" && data.quote !== \"\\\"\") {\n      code = \"W108\";\n    }\n\n    // If quotmark is set to true, remember the first quotation style\n    // and then warn about all others.\n\n    if (quotmark === true) {\n      if (!linter.getCache(\"quotmark\")) {\n        linter.setCache(\"quotmark\", data.quote);\n      }\n\n      if (linter.getCache(\"quotmark\") !== data.quote) {\n        code = \"W110\";\n      }\n    }\n\n    if (code) {\n      linter.warn(code, {\n        line: data.line,\n        char: data.char,\n      });\n    }\n  });\n\n  linter.on(\"Number\", function style_scanNumbers(data) {\n    if (data.value.charAt(0) === \".\") {\n      // Warn about a leading decimal point.\n      linter.warn(\"W008\", {\n        line: data.line,\n        char: data.char,\n        data: [ data.value ]\n      });\n    }\n\n    if (data.value.substr(data.value.length - 1) === \".\") {\n      // Warn about a trailing decimal point.\n      linter.warn(\"W047\", {\n        line: data.line,\n        char: data.char,\n        data: [ data.value ]\n      });\n    }\n\n    if (/^00+/.test(data.value)) {\n      // Multiple leading zeroes.\n      linter.warn(\"W046\", {\n        line: data.line,\n        char: data.char,\n        data: [ data.value ]\n      });\n    }\n  });\n\n  // Warn about script URLs.\n\n  linter.on(\"String\", function style_scanJavaScriptURLs(data) {\n    var re = /^(?:javascript|jscript|ecmascript|vbscript|livescript)\\s*:/i;\n\n    if (linter.getOption(\"scripturl\")) {\n      return;\n    }\n\n    if (re.test(data.value)) {\n      linter.warn(\"W107\", {\n        line: data.line,\n        char: data.char\n      });\n    }\n  });\n};\n\n},{}],\"/node_modules/jshint/src/vars.js\":[function(_dereq_,module,exports){\n// jshint -W001\n\n\"use strict\";\n\n// Identifiers provided by the ECMAScript standard.\n\nexports.reservedVars = {\n  arguments : false,\n  NaN       : false\n};\n\nexports.ecmaIdentifiers = {\n  3: {\n    Array              : false,\n    Boolean            : false,\n    Date               : false,\n    decodeURI          : false,\n    decodeURIComponent : false,\n    encodeURI          : false,\n    encodeURIComponent : false,\n    Error              : false,\n    \"eval\"             : false,\n    EvalError          : false,\n    Function           : false,\n    hasOwnProperty     : false,\n    isFinite           : false,\n    isNaN              : false,\n    Math               : false,\n    Number             : false,\n    Object             : false,\n    parseInt           : false,\n    parseFloat         : false,\n    RangeError         : false,\n    ReferenceError     : false,\n    RegExp             : false,\n    String             : false,\n    SyntaxError        : false,\n    TypeError          : false,\n    URIError           : false\n  },\n  5: {\n    JSON               : false\n  },\n  6: {\n    Map                : false,\n    Promise            : false,\n    Proxy              : false,\n    Reflect            : false,\n    Set                : false,\n    Symbol             : false,\n    WeakMap            : false,\n    WeakSet            : false\n  }\n};\n\n// Global variables commonly provided by a web browser environment.\n\nexports.browser = {\n  Audio                : false,\n  Blob                 : false,\n  addEventListener     : false,\n  applicationCache     : false,\n  atob                 : false,\n  blur                 : false,\n  btoa                 : false,\n  cancelAnimationFrame : false,\n  CanvasGradient       : false,\n  CanvasPattern        : false,\n  CanvasRenderingContext2D: false,\n  CSS                  : false,\n  clearInterval        : false,\n  clearTimeout         : false,\n  close                : false,\n  closed               : false,\n  Comment              : false,\n  CustomEvent          : false,\n  DOMParser            : false,\n  defaultStatus        : false,\n  Document             : false,\n  document             : false,\n  DocumentFragment     : false,\n  Element              : false,\n  ElementTimeControl   : false,\n  Event                : false,\n  event                : false,\n  fetch                : false,\n  FileReader           : false,\n  FormData             : false,\n  focus                : false,\n  frames               : false,\n  getComputedStyle     : false,\n  HTMLElement          : false,\n  HTMLAnchorElement    : false,\n  HTMLBaseElement      : false,\n  HTMLBlockquoteElement: false,\n  HTMLBodyElement      : false,\n  HTMLBRElement        : false,\n  HTMLButtonElement    : false,\n  HTMLCanvasElement    : false,\n  HTMLCollection       : false,\n  HTMLDirectoryElement : false,\n  HTMLDivElement       : false,\n  HTMLDListElement     : false,\n  HTMLFieldSetElement  : false,\n  HTMLFontElement      : false,\n  HTMLFormElement      : false,\n  HTMLFrameElement     : false,\n  HTMLFrameSetElement  : false,\n  HTMLHeadElement      : false,\n  HTMLHeadingElement   : false,\n  HTMLHRElement        : false,\n  HTMLHtmlElement      : false,\n  HTMLIFrameElement    : false,\n  HTMLImageElement     : false,\n  HTMLInputElement     : false,\n  HTMLIsIndexElement   : false,\n  HTMLLabelElement     : false,\n  HTMLLayerElement     : false,\n  HTMLLegendElement    : false,\n  HTMLLIElement        : false,\n  HTMLLinkElement      : false,\n  HTMLMapElement       : false,\n  HTMLMenuElement      : false,\n  HTMLMetaElement      : false,\n  HTMLModElement       : false,\n  HTMLObjectElement    : false,\n  HTMLOListElement     : false,\n  HTMLOptGroupElement  : false,\n  HTMLOptionElement    : false,\n  HTMLParagraphElement : false,\n  HTMLParamElement     : false,\n  HTMLPreElement       : false,\n  HTMLQuoteElement     : false,\n  HTMLScriptElement    : false,\n  HTMLSelectElement    : false,\n  HTMLStyleElement     : false,\n  HTMLTableCaptionElement: false,\n  HTMLTableCellElement : false,\n  HTMLTableColElement  : false,\n  HTMLTableElement     : false,\n  HTMLTableRowElement  : false,\n  HTMLTableSectionElement: false,\n  HTMLTemplateElement  : false,\n  HTMLTextAreaElement  : false,\n  HTMLTitleElement     : false,\n  HTMLUListElement     : false,\n  HTMLVideoElement     : false,\n  history              : false,\n  Image                : false,\n  Intl                 : false,\n  length               : false,\n  localStorage         : false,\n  location             : false,\n  matchMedia           : false,\n  MessageChannel       : false,\n  MessageEvent         : false,\n  MessagePort          : false,\n  MouseEvent           : false,\n  moveBy               : false,\n  moveTo               : false,\n  MutationObserver     : false,\n  name                 : false,\n  Node                 : false,\n  NodeFilter           : false,\n  NodeList             : false,\n  Notification         : false,\n  navigator            : false,\n  onbeforeunload       : true,\n  onblur               : true,\n  onerror              : true,\n  onfocus              : true,\n  onload               : true,\n  onresize             : true,\n  onunload             : true,\n  open                 : false,\n  openDatabase         : false,\n  opener               : false,\n  Option               : false,\n  parent               : false,\n  performance          : false,\n  print                : false,\n  Range                : false,\n  requestAnimationFrame : false,\n  removeEventListener  : false,\n  resizeBy             : false,\n  resizeTo             : false,\n  screen               : false,\n  scroll               : false,\n  scrollBy             : false,\n  scrollTo             : false,\n  sessionStorage       : false,\n  setInterval          : false,\n  setTimeout           : false,\n  SharedWorker         : false,\n  status               : false,\n  SVGAElement          : false,\n  SVGAltGlyphDefElement: false,\n  SVGAltGlyphElement   : false,\n  SVGAltGlyphItemElement: false,\n  SVGAngle             : false,\n  SVGAnimateColorElement: false,\n  SVGAnimateElement    : false,\n  SVGAnimateMotionElement: false,\n  SVGAnimateTransformElement: false,\n  SVGAnimatedAngle     : false,\n  SVGAnimatedBoolean   : false,\n  SVGAnimatedEnumeration: false,\n  SVGAnimatedInteger   : false,\n  SVGAnimatedLength    : false,\n  SVGAnimatedLengthList: false,\n  SVGAnimatedNumber    : false,\n  SVGAnimatedNumberList: false,\n  SVGAnimatedPathData  : false,\n  SVGAnimatedPoints    : false,\n  SVGAnimatedPreserveAspectRatio: false,\n  SVGAnimatedRect      : false,\n  SVGAnimatedString    : false,\n  SVGAnimatedTransformList: false,\n  SVGAnimationElement  : false,\n  SVGCSSRule           : false,\n  SVGCircleElement     : false,\n  SVGClipPathElement   : false,\n  SVGColor             : false,\n  SVGColorProfileElement: false,\n  SVGColorProfileRule  : false,\n  SVGComponentTransferFunctionElement: false,\n  SVGCursorElement     : false,\n  SVGDefsElement       : false,\n  SVGDescElement       : false,\n  SVGDocument          : false,\n  SVGElement           : false,\n  SVGElementInstance   : false,\n  SVGElementInstanceList: false,\n  SVGEllipseElement    : false,\n  SVGExternalResourcesRequired: false,\n  SVGFEBlendElement    : false,\n  SVGFEColorMatrixElement: false,\n  SVGFEComponentTransferElement: false,\n  SVGFECompositeElement: false,\n  SVGFEConvolveMatrixElement: false,\n  SVGFEDiffuseLightingElement: false,\n  SVGFEDisplacementMapElement: false,\n  SVGFEDistantLightElement: false,\n  SVGFEFloodElement    : false,\n  SVGFEFuncAElement    : false,\n  SVGFEFuncBElement    : false,\n  SVGFEFuncGElement    : false,\n  SVGFEFuncRElement    : false,\n  SVGFEGaussianBlurElement: false,\n  SVGFEImageElement    : false,\n  SVGFEMergeElement    : false,\n  SVGFEMergeNodeElement: false,\n  SVGFEMorphologyElement: false,\n  SVGFEOffsetElement   : false,\n  SVGFEPointLightElement: false,\n  SVGFESpecularLightingElement: false,\n  SVGFESpotLightElement: false,\n  SVGFETileElement     : false,\n  SVGFETurbulenceElement: false,\n  SVGFilterElement     : false,\n  SVGFilterPrimitiveStandardAttributes: false,\n  SVGFitToViewBox      : false,\n  SVGFontElement       : false,\n  SVGFontFaceElement   : false,\n  SVGFontFaceFormatElement: false,\n  SVGFontFaceNameElement: false,\n  SVGFontFaceSrcElement: false,\n  SVGFontFaceUriElement: false,\n  SVGForeignObjectElement: false,\n  SVGGElement          : false,\n  SVGGlyphElement      : false,\n  SVGGlyphRefElement   : false,\n  SVGGradientElement   : false,\n  SVGHKernElement      : false,\n  SVGICCColor          : false,\n  SVGImageElement      : false,\n  SVGLangSpace         : false,\n  SVGLength            : false,\n  SVGLengthList        : false,\n  SVGLineElement       : false,\n  SVGLinearGradientElement: false,\n  SVGLocatable         : false,\n  SVGMPathElement      : false,\n  SVGMarkerElement     : false,\n  SVGMaskElement       : false,\n  SVGMatrix            : false,\n  SVGMetadataElement   : false,\n  SVGMissingGlyphElement: false,\n  SVGNumber            : false,\n  SVGNumberList        : false,\n  SVGPaint             : false,\n  SVGPathElement       : false,\n  SVGPathSeg           : false,\n  SVGPathSegArcAbs     : false,\n  SVGPathSegArcRel     : false,\n  SVGPathSegClosePath  : false,\n  SVGPathSegCurvetoCubicAbs: false,\n  SVGPathSegCurvetoCubicRel: false,\n  SVGPathSegCurvetoCubicSmoothAbs: false,\n  SVGPathSegCurvetoCubicSmoothRel: false,\n  SVGPathSegCurvetoQuadraticAbs: false,\n  SVGPathSegCurvetoQuadraticRel: false,\n  SVGPathSegCurvetoQuadraticSmoothAbs: false,\n  SVGPathSegCurvetoQuadraticSmoothRel: false,\n  SVGPathSegLinetoAbs  : false,\n  SVGPathSegLinetoHorizontalAbs: false,\n  SVGPathSegLinetoHorizontalRel: false,\n  SVGPathSegLinetoRel  : false,\n  SVGPathSegLinetoVerticalAbs: false,\n  SVGPathSegLinetoVerticalRel: false,\n  SVGPathSegList       : false,\n  SVGPathSegMovetoAbs  : false,\n  SVGPathSegMovetoRel  : false,\n  SVGPatternElement    : false,\n  SVGPoint             : false,\n  SVGPointList         : false,\n  SVGPolygonElement    : false,\n  SVGPolylineElement   : false,\n  SVGPreserveAspectRatio: false,\n  SVGRadialGradientElement: false,\n  SVGRect              : false,\n  SVGRectElement       : false,\n  SVGRenderingIntent   : false,\n  SVGSVGElement        : false,\n  SVGScriptElement     : false,\n  SVGSetElement        : false,\n  SVGStopElement       : false,\n  SVGStringList        : false,\n  SVGStylable          : false,\n  SVGStyleElement      : false,\n  SVGSwitchElement     : false,\n  SVGSymbolElement     : false,\n  SVGTRefElement       : false,\n  SVGTSpanElement      : false,\n  SVGTests             : false,\n  SVGTextContentElement: false,\n  SVGTextElement       : false,\n  SVGTextPathElement   : false,\n  SVGTextPositioningElement: false,\n  SVGTitleElement      : false,\n  SVGTransform         : false,\n  SVGTransformList     : false,\n  SVGTransformable     : false,\n  SVGURIReference      : false,\n  SVGUnitTypes         : false,\n  SVGUseElement        : false,\n  SVGVKernElement      : false,\n  SVGViewElement       : false,\n  SVGViewSpec          : false,\n  SVGZoomAndPan        : false,\n  Text                 : false,\n  TextDecoder          : false,\n  TextEncoder          : false,\n  TimeEvent            : false,\n  top                  : false,\n  URL                  : false,\n  WebGLActiveInfo      : false,\n  WebGLBuffer          : false,\n  WebGLContextEvent    : false,\n  WebGLFramebuffer     : false,\n  WebGLProgram         : false,\n  WebGLRenderbuffer    : false,\n  WebGLRenderingContext: false,\n  WebGLShader          : false,\n  WebGLShaderPrecisionFormat: false,\n  WebGLTexture         : false,\n  WebGLUniformLocation : false,\n  WebSocket            : false,\n  window               : false,\n  Window               : false,\n  Worker               : false,\n  XDomainRequest       : false,\n  XMLHttpRequest       : false,\n  XMLSerializer        : false,\n  XPathEvaluator       : false,\n  XPathException       : false,\n  XPathExpression      : false,\n  XPathNamespace       : false,\n  XPathNSResolver      : false,\n  XPathResult          : false\n};\n\nexports.devel = {\n  alert  : false,\n  confirm: false,\n  console: false,\n  Debug  : false,\n  opera  : false,\n  prompt : false\n};\n\nexports.worker = {\n  importScripts  : true,\n  postMessage    : true,\n  self           : true,\n  FileReaderSync : true\n};\n\n// Widely adopted global names that are not part of ECMAScript standard\nexports.nonstandard = {\n  escape  : false,\n  unescape: false\n};\n\n// Globals provided by popular JavaScript environments.\n\nexports.couch = {\n  \"require\" : false,\n  respond   : false,\n  getRow    : false,\n  emit      : false,\n  send      : false,\n  start     : false,\n  sum       : false,\n  log       : false,\n  exports   : false,\n  module    : false,\n  provides  : false\n};\n\nexports.node = {\n  __filename    : false,\n  __dirname     : false,\n  GLOBAL        : false,\n  global        : false,\n  module        : false,\n  require       : false,\n\n  // These globals are writeable because Node allows the following\n  // usage pattern: var Buffer = require(\"buffer\").Buffer;\n\n  Buffer        : true,\n  console       : true,\n  exports       : true,\n  process       : true,\n  setTimeout    : true,\n  clearTimeout  : true,\n  setInterval   : true,\n  clearInterval : true,\n  setImmediate  : true, // v0.9.1+\n  clearImmediate: true  // v0.9.1+\n};\n\nexports.browserify = {\n  __filename    : false,\n  __dirname     : false,\n  global        : false,\n  module        : false,\n  require       : false,\n  Buffer        : true,\n  exports       : true,\n  process       : true\n};\n\nexports.phantom = {\n  phantom      : true,\n  require      : true,\n  WebPage      : true,\n  console      : true, // in examples, but undocumented\n  exports      : true  // v1.7+\n};\n\nexports.qunit = {\n  asyncTest      : false,\n  deepEqual      : false,\n  equal          : false,\n  expect         : false,\n  module         : false,\n  notDeepEqual   : false,\n  notEqual       : false,\n  notPropEqual   : false,\n  notStrictEqual : false,\n  ok             : false,\n  propEqual      : false,\n  QUnit          : false,\n  raises         : false,\n  start          : false,\n  stop           : false,\n  strictEqual    : false,\n  test           : false,\n  \"throws\"       : false\n};\n\nexports.rhino = {\n  defineClass  : false,\n  deserialize  : false,\n  gc           : false,\n  help         : false,\n  importClass  : false,\n  importPackage: false,\n  \"java\"       : false,\n  load         : false,\n  loadClass    : false,\n  Packages     : false,\n  print        : false,\n  quit         : false,\n  readFile     : false,\n  readUrl      : false,\n  runCommand   : false,\n  seal         : false,\n  serialize    : false,\n  spawn        : false,\n  sync         : false,\n  toint32      : false,\n  version      : false\n};\n\nexports.shelljs = {\n  target       : false,\n  echo         : false,\n  exit         : false,\n  cd           : false,\n  pwd          : false,\n  ls           : false,\n  find         : false,\n  cp           : false,\n  rm           : false,\n  mv           : false,\n  mkdir        : false,\n  test         : false,\n  cat          : false,\n  sed          : false,\n  grep         : false,\n  which        : false,\n  dirs         : false,\n  pushd        : false,\n  popd         : false,\n  env          : false,\n  exec         : false,\n  chmod        : false,\n  config       : false,\n  error        : false,\n  tempdir      : false\n};\n\nexports.typed = {\n  ArrayBuffer         : false,\n  ArrayBufferView     : false,\n  DataView            : false,\n  Float32Array        : false,\n  Float64Array        : false,\n  Int16Array          : false,\n  Int32Array          : false,\n  Int8Array           : false,\n  Uint16Array         : false,\n  Uint32Array         : false,\n  Uint8Array          : false,\n  Uint8ClampedArray   : false\n};\n\nexports.wsh = {\n  ActiveXObject            : true,\n  Enumerator               : true,\n  GetObject                : true,\n  ScriptEngine             : true,\n  ScriptEngineBuildVersion : true,\n  ScriptEngineMajorVersion : true,\n  ScriptEngineMinorVersion : true,\n  VBArray                  : true,\n  WSH                      : true,\n  WScript                  : true,\n  XDomainRequest           : true\n};\n\n// Globals provided by popular JavaScript libraries.\n\nexports.dojo = {\n  dojo     : false,\n  dijit    : false,\n  dojox    : false,\n  define   : false,\n  \"require\": false\n};\n\nexports.jquery = {\n  \"$\"    : false,\n  jQuery : false\n};\n\nexports.mootools = {\n  \"$\"           : false,\n  \"$$\"          : false,\n  Asset         : false,\n  Browser       : false,\n  Chain         : false,\n  Class         : false,\n  Color         : false,\n  Cookie        : false,\n  Core          : false,\n  Document      : false,\n  DomReady      : false,\n  DOMEvent      : false,\n  DOMReady      : false,\n  Drag          : false,\n  Element       : false,\n  Elements      : false,\n  Event         : false,\n  Events        : false,\n  Fx            : false,\n  Group         : false,\n  Hash          : false,\n  HtmlTable     : false,\n  IFrame        : false,\n  IframeShim    : false,\n  InputValidator: false,\n  instanceOf    : false,\n  Keyboard      : false,\n  Locale        : false,\n  Mask          : false,\n  MooTools      : false,\n  Native        : false,\n  Options       : false,\n  OverText      : false,\n  Request       : false,\n  Scroller      : false,\n  Slick         : false,\n  Slider        : false,\n  Sortables     : false,\n  Spinner       : false,\n  Swiff         : false,\n  Tips          : false,\n  Type          : false,\n  typeOf        : false,\n  URI           : false,\n  Window        : false\n};\n\nexports.prototypejs = {\n  \"$\"               : false,\n  \"$$\"              : false,\n  \"$A\"              : false,\n  \"$F\"              : false,\n  \"$H\"              : false,\n  \"$R\"              : false,\n  \"$break\"          : false,\n  \"$continue\"       : false,\n  \"$w\"              : false,\n  Abstract          : false,\n  Ajax              : false,\n  Class             : false,\n  Enumerable        : false,\n  Element           : false,\n  Event             : false,\n  Field             : false,\n  Form              : false,\n  Hash              : false,\n  Insertion         : false,\n  ObjectRange       : false,\n  PeriodicalExecuter: false,\n  Position          : false,\n  Prototype         : false,\n  Selector          : false,\n  Template          : false,\n  Toggle            : false,\n  Try               : false,\n  Autocompleter     : false,\n  Builder           : false,\n  Control           : false,\n  Draggable         : false,\n  Draggables        : false,\n  Droppables        : false,\n  Effect            : false,\n  Sortable          : false,\n  SortableObserver  : false,\n  Sound             : false,\n  Scriptaculous     : false\n};\n\nexports.yui = {\n  YUI       : false,\n  Y         : false,\n  YUI_config: false\n};\n\nexports.mocha = {\n  // Global (for config etc.)\n  mocha       : false,\n  // BDD\n  describe    : false,\n  xdescribe   : false,\n  it          : false,\n  xit         : false,\n  context     : false,\n  xcontext    : false,\n  before      : false,\n  after       : false,\n  beforeEach  : false,\n  afterEach   : false,\n  // TDD\n  suite         : false,\n  test          : false,\n  setup         : false,\n  teardown      : false,\n  suiteSetup    : false,\n  suiteTeardown : false\n};\n\nexports.jasmine = {\n  jasmine     : false,\n  describe    : false,\n  xdescribe   : false,\n  it          : false,\n  xit         : false,\n  beforeEach  : false,\n  afterEach   : false,\n  setFixtures : false,\n  loadFixtures: false,\n  spyOn       : false,\n  expect      : false,\n  // Jasmine 1.3\n  runs        : false,\n  waitsFor    : false,\n  waits       : false,\n  // Jasmine 2.1\n  beforeAll   : false,\n  afterAll    : false,\n  fail        : false,\n  fdescribe   : false,\n  fit         : false,\n  pending     : false\n};\n\n},{}]},{},[\"/node_modules/jshint/src/jshint.js\"]);\n\n});"
  },
  {
    "path": "lib/ace/mode/javascript.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/javascript_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\n// TODO: Unicode escape sequences\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    // see: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            // invalid or reserved\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n\n    // keywords which can be followed by regular expressions\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hexadecimal, octal and binary\n                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // decimal integers and floats\n                regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                // Sound.prototype.play =\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                // Sound.play = function() {  }\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                // play = function() {  }\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                // Sound.play = function play() {  }\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                // function myFunc(arg) { }\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                // foobar: function() { }\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                // : function() { } (this is for issues with 'foo': function() { })\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                // from \"module-path\" (this is the only case where 'from' should be a keyword)\n                token : \"keyword\",\n                regex : \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"storage.type\",\n                regex : /=>/\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                // Sound.play = function play() {  }\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        // regular expressions are only allowed after certain tokens. This\n        // makes sure we don't mix up regexps with the divison operator\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                // immediately return to the start mode without matching\n                // anything\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                // escapes\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                // flag\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                // invalid operators\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                // operators\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                consumeLineEnd  : true\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\",\n        regex : \"/?>\",\n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    },\n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/javascript_test.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\nif (typeof process !== \"undefined\") {\n    require(\"amd-loader\");\n}\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar EditSession = require(\"../edit_session\").EditSession;\nvar Tokenizer = require(\"../tokenizer\").Tokenizer;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar assert = require(\"../test/assertions\");\n\nmodule.exports = {\n    setUp : function() {    \n        this.mode = new JavaScriptMode();\n    },\n\n    \"test: getTokenizer() (smoke test)\" : function() {\n        var tokenizer = this.mode.getTokenizer();\n\n        assert.ok(tokenizer instanceof Tokenizer);\n\n        var tokens = tokenizer.getLineTokens(\"'juhu'\", \"start\").tokens;\n        assert.equal(\"string\", tokens[0].type);\n    },\n\n    \"test: toggle comment lines should prepend '//' to each line\" : function() {\n        var session = new EditSession([\"  abc\", \"cde\", \"fg\"]);\n        session.setTabSize(1);\n\n        this.mode.toggleCommentLines(\"start\", session, 0, 1);\n        assert.equal([\"//   abc\", \"// cde\", \"fg\"].join(\"\\n\"), session.toString());\n    },\n\n    \"test: toggle comment on commented lines should remove leading '//' chars\" : function() {\n        var session = new EditSession([\"//  abc\", \"//cde\", \"fg\"]);\n        session.setTabSize(1);\n\n        this.mode.toggleCommentLines(\"start\", session, 0, 1);\n        assert.equal([\" abc\", \"cde\", \"fg\"].join(\"\\n\"), session.toString());\n    },\n    \n    \"test: toggle comment on all empty lines\" : function() {\n        var session = new EditSession([\"  \", \" \", \"  \"]);\n        session.setTabSize(1);\n\n        this.mode.toggleCommentLines(\"start\", session, 0, 1);\n        assert.equal([\" //  \", \" // \", \"  \"].join(\"\\n\"), session.toString());\n    },\n    \n    \"test: toggle comment with empty lines\" : function() {\n        var session = new EditSession([\n            \"        abc\",\n            \"\",\n            \"    cde\", \n            \"    fg\"]);\n        \n        var initial = session.toString();\n        this.mode.toggleCommentLines(\"start\", session, 0, 3);\n        assert.equal([\n            \"    //     abc\",\n            \"\",\n            \"    // cde\", \n            \"    // fg\"].join(\"\\n\"),\n            session.toString()\n        );\n        this.mode.toggleCommentLines(\"start\", session, 0, 3);\n        assert.equal(initial, session.toString());\n    },\n\n    \"test: toggle comment lines twice should return the original text\" : function() {\n        var session = new EditSession([\"  abc\", \"cde\", \"fg\"]);\n\n        this.mode.toggleCommentLines(\"start\", session, 0, 2);\n        this.mode.toggleCommentLines(\"start\", session, 0, 2);\n        assert.equal([\"  abc\", \"cde\", \"fg\"].join(\"\\n\"), session.toString());\n    },\n\n    \"test: toggle comment on multiple lines with one commented line prepend '//' to each line\" : function() {\n        var session = new EditSession([\"  //  abc\", \"  //cde\", \"    fg\"]);\n        session.setTabSize(1);\n        this.mode.toggleCommentLines(\"start\", session, 0, 2);\n        assert.equal([\"  // //  abc\", \"  // //cde\", \"  //   fg\"].join(\"\\n\"), session.toString());\n    },\n\n    \"test: toggle comment on a comment line with leading white space\": function() {\n        var session = new EditSession([\"//cde\", \"  //fg\"]);\n\n        this.mode.toggleCommentLines(\"start\", session, 0, 1);\n        assert.equal([\"cde\", \"  fg\"].join(\"\\n\"), session.toString());\n    },\n\n    \"test: toggle comment lines should take tabsize into account\" : function() {\n        var session = new EditSession([\"  //  abc\", \"  // cde\", \"//    fg\"]);\n        session.setTabSize(2);\n        this.mode.toggleCommentLines(\"start\", session, 0, 2);\n        assert.equal([\"    abc\", \"  cde\", \"    fg\"].join(\"\\n\"), session.toString());\n        session.setTabSize(4);\n        this.mode.toggleCommentLines(\"start\", session, 0, 2);\n        assert.equal([\"//     abc\", \"//   cde\", \"//     fg\"].join(\"\\n\"), session.toString());\n        this.mode.toggleCommentLines(\"start\", session, 0, 2);\n        assert.equal([\"    abc\", \"  cde\", \"    fg\"].join(\"\\n\"), session.toString());\n        \n        session.insert({row: 0, column: 0}, \" \");\n        this.mode.toggleCommentLines(\"start\", session, 0, 2);\n        assert.equal([\"//      abc\", \"//   cde\", \"//     fg\"].join(\"\\n\"), session.toString());        \n    },\n    //there doesn't seem to be any way to make this work\n    \"!test: togglecomment on line with one space\" : function() {\n        var session = new EditSession([\" abc\", \"  // cde\", \"//    fg\"]);\n        var initialValue = session + \"\";\n        session.setTabSize(4);\n        this.mode.toggleCommentLines(\"start\", session, 0, 0);\n        this.mode.toggleCommentLines(\"start\", session, 0, 0);\n        assert.equal(initialValue, session.toString());\n    },\n\n    \"test: auto indent after opening brace\" : function() {\n        assert.equal(\"  \", this.mode.getNextLineIndent(\"start\", \"if () {\", \"  \"));\n    },\n    \n    \"test: auto indent after case\" : function() {\n        assert.equal(\"  \", this.mode.getNextLineIndent(\"start\", \"case 'juhu':\", \"  \"));\n    },\n\n    \"test: no auto indent in object literal\" : function() {\n        assert.equal(\"\", this.mode.getNextLineIndent(\"start\", \"{ 'juhu':\", \"  \"));\n    },\n\n    \"test: no auto indent after opening brace in multi line comment\" : function() {\n        assert.equal(\"\", this.mode.getNextLineIndent(\"start\", \"/*if () {\", \"  \"));\n        assert.equal(\"  \", this.mode.getNextLineIndent(\"comment\", \"  abcd\", \"  \"));\n    },\n\n    \"test: no auto indent after opening brace in single line comment\" : function() {\n        assert.equal(\"\", this.mode.getNextLineIndent(\"start\", \"//if () {\", \"  \"));\n        assert.equal(\"  \", this.mode.getNextLineIndent(\"start\", \"  //if () {\", \"  \"));\n    },\n\n    \"test: no auto indent should add to existing indent\" : function() {\n        assert.equal(\"      \", this.mode.getNextLineIndent(\"start\", \"    if () {\", \"  \"));\n        assert.equal(\"    \", this.mode.getNextLineIndent(\"start\", \"    cde\", \"  \"));\n        assert.equal(\"    \", this.mode.getNextLineIndent(\"start\", \"function foo(items) {\", \"    \"));\n    },\n\n    \"test: special indent in doc comments\" : function() {\n        assert.equal(\" * \", this.mode.getNextLineIndent(\"doc-start\", \"/**\", \" \"));\n        assert.equal(\"   * \", this.mode.getNextLineIndent(\"doc-start\", \"  /**\", \" \"));\n        assert.equal(\" * \", this.mode.getNextLineIndent(\"doc-start\", \" *\", \" \"));\n        assert.equal(\"    * \", this.mode.getNextLineIndent(\"doc-start\", \"    *\", \" \"));\n        assert.equal(\"  \", this.mode.getNextLineIndent(\"doc-start\", \"  abc\", \" \"));\n    },\n\n    \"test: no indent after doc comments\" : function() {\n        assert.equal(\"\", this.mode.getNextLineIndent(\"doc-start\", \"   */\", \"  \"));\n    },\n\n    \"test: trigger outdent if line is space and new text starts with closing brace\" : function() {\n        assert.ok(this.mode.checkOutdent(\"start\", \"   \", \" }\"));\n        assert.ok(!this.mode.checkOutdent(\"start\", \" a  \", \" }\"));\n        assert.ok(!this.mode.checkOutdent(\"start\", \"\", \"}\"));\n        assert.ok(!this.mode.checkOutdent(\"start\", \"   \", \"a }\"));\n        assert.ok(!this.mode.checkOutdent(\"start\", \"   }\", \"}\"));\n    },\n\n    \"test: auto outdent should indent the line with the same indent as the line with the matching opening brace\" : function() {\n        var session = new EditSession([\"  function foo() {\", \"    bla\", \"    }\"], new JavaScriptMode());\n        this.mode.autoOutdent(\"start\", session, 2);\n        assert.equal(\"  }\", session.getLine(2));\n    },\n\n    \"test: no auto outdent if no matching brace is found\" : function() {\n        var session = new EditSession([\"  function foo()\", \"    bla\", \"    }\"]);\n        this.mode.autoOutdent(\"start\", session, 2);\n        assert.equal(\"    }\", session.getLine(2));\n    }\n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main) {\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n}\n"
  },
  {
    "path": "lib/ace/mode/javascript_worker.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar Mirror = require(\"../worker/mirror\").Mirror;\nvar lint = require(\"./javascript/jshint\").JSHINT;\n\nfunction startRegex(arr) {\n    return RegExp(\"^(\" + arr.join(\"|\") + \")\");\n}\n\nvar disabledWarningsRe = startRegex([\n    \"Bad for in variable '(.+)'.\",\n    'Missing \"use strict\"'\n]);\nvar errorsRe = startRegex([\n    \"Unexpected\",\n    \"Expected \",\n    \"Confusing (plus|minus)\",\n    \"\\\\{a\\\\} unterminated regular expression\",\n    \"Unclosed \",\n    \"Unmatched \",\n    \"Unbegun comment\",\n    \"Bad invocation\",\n    \"Missing space after\",\n    \"Missing operator at\"\n]);\nvar infoRe = startRegex([\n    \"Expected an assignment\",\n    \"Bad escapement of EOL\",\n    \"Unexpected comma\",\n    \"Unexpected space\",\n    \"Missing radix parameter.\",\n    \"A leading decimal point can\",\n    \"\\\\['{a}'\\\\] is better written in dot notation.\",\n    \"'{a}' used out of scope\"\n]);\n\nvar JavaScriptWorker = exports.JavaScriptWorker = function(sender) {\n    Mirror.call(this, sender);\n    this.setTimeout(500);\n    this.setOptions();\n};\n\noop.inherits(JavaScriptWorker, Mirror);\n\n(function() {\n    this.setOptions = function(options) {\n        this.options = options || {\n            // undef: true,\n            // unused: true,\n            esnext: true,\n            moz: true,\n            devel: true,\n            browser: true,\n            node: true,\n            laxcomma: true,\n            laxbreak: true,\n            lastsemic: true,\n            onevar: false,\n            passfail: false,\n            maxerr: 100,\n            expr: true,\n            multistr: true,\n            globalstrict: true\n        };\n        this.doc.getValue() && this.deferredUpdate.schedule(100);\n    };\n\n    this.changeOptions = function(newOptions) {\n        oop.mixin(this.options, newOptions);\n        this.doc.getValue() && this.deferredUpdate.schedule(100);\n    };\n\n    this.isValidJS = function(str) {\n        try {\n            // evaluated code can only create variables in this function\n            eval(\"throw 0;\" + str);\n        } catch(e) {\n            if (e === 0)\n                return true;\n        }\n        return false;\n    };\n\n    this.onUpdate = function() {\n        var value = this.doc.getValue();\n        value = value.replace(/^#!.*\\n/, \"\\n\");\n        if (!value)\n            return this.sender.emit(\"annotate\", []);\n\n        var errors = [];\n        // jshint reports many false errors\n        // report them as error only if code is actually invalid\n        var maxErrorLevel = this.isValidJS(value) ? \"warning\" : \"error\";\n\n        // var start = new Date();\n        lint(value, this.options, this.options.globals);\n        var results = lint.errors;\n\n        var errorAdded = false;\n        for (var i = 0; i < results.length; i++) {\n            var error = results[i];\n            if (!error)\n                continue;\n            var raw = error.raw;\n            var type = \"warning\";\n\n            if (raw == \"Missing semicolon.\") {\n                var str = error.evidence.substr(error.character);\n                str = str.charAt(str.search(/\\S/));\n                if (maxErrorLevel == \"error\" && str && /[\\w\\d{(['\"]/.test(str)) {\n                    error.reason = 'Missing \";\" before statement';\n                    type = \"error\";\n                } else {\n                    type = \"info\";\n                }\n            }\n            else if (disabledWarningsRe.test(raw)) {\n                continue;\n            }\n            else if (infoRe.test(raw)) {\n                type = \"info\";\n            }\n            else if (errorsRe.test(raw)) {\n                errorAdded  = true;\n                type = maxErrorLevel;\n            }\n            else if (raw == \"'{a}' is not defined.\") {\n                type = \"warning\";\n            }\n            else if (raw == \"'{a}' is defined but never used.\") {\n                type = \"info\";\n            }\n\n            errors.push({\n                row: error.line-1,\n                column: error.character-1,\n                text: error.reason,\n                type: type,\n                raw: raw\n            });\n\n            if (errorAdded) {\n               // break;\n            }\n        }\n        // console.log(\"lint time: \" + (new Date() - start));\n\n        this.sender.emit(\"annotate\", errors);\n    };\n\n}).call(JavaScriptWorker.prototype);\n\n});\n"
  },
  {
    "path": "lib/ace/mode/javascript_worker_test.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\nif (typeof process !== \"undefined\") {\n    require(\"amd-loader\");\n}\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar assert = require(\"../test/assertions\");\nvar JavaScriptWorker = require(\"./javascript_worker\").JavaScriptWorker;\n\n\nmodule.exports = {\n    setUp : function() {\n        this.sender = {\n            on: function() {},\n            callback: function(data, id) {\n                this.data = data;\n            },\n            events: [],\n            emit: function(type, e) {\n                this.events.push([type, e]);\n            }\n        };\n    },\n\n    \"test check for syntax error\": function() {\n        var worker = new JavaScriptWorker(this.sender);\n        worker.setValue(\"Juhu Kinners\");\n        worker.deferredUpdate.call();\n\n        var error = this.sender.events[0][1][0];\n        assert.equal(error.text, 'Missing \";\" before statement');\n        assert.equal(error.type, \"error\");\n        assert.equal(error.row, 0);\n        assert.equal(error.column, 4);\n    },\n\n    \"test invalid multi line string\": function() {\n        var worker = new JavaScriptWorker(this.sender);\n        worker.setValue('\"a\\n\\\\nn\"');\n        worker.deferredUpdate.call();\n\n        var error = this.sender.events[0][1][0];\n        assert.equal(error.text, \"Unclosed string.\");\n        assert.equal(error.type, \"error\");\n        assert.equal(error.row, 0);\n        assert.equal(error.column, 2);\n    },\n\n    \"test another invalid string\": function() {\n        var worker = new JavaScriptWorker(this.sender);\n        worker.setValue(\"if('\");\n        worker.deferredUpdate.call();\n        \n        var error = this.sender.events[0][1][0];\n        assert.equal(error.text, \"Unclosed string.\");\n        assert.equal(error.type, \"error\");\n        assert.equal(error.row, 0);\n        assert.equal(error.column, 4);\n    },\n    \n    \"test for each\": function() {\n        var worker = new JavaScriptWorker(this.sender);\n        worker.setValue(\"for each(var i in x)\");\n        worker.deferredUpdate.call();\n        \n        var error = this.sender.events[0][1][0];\n        assert.equal(error.text, \"Unexpected early end of program.\");\n    }\n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main) {\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n}\n"
  },
  {
    "path": "lib/ace/mode/js_regex_highlight_rules.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar escape = \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\";\nvar quantifier = \"({\\\\d+\\\\b,?\\\\d*}|[+*?])(\\\\??)\";\n\nvar JsRegexHighlightRules = function() {\n    this.$rules = {\n        \"start\": [{\n                // operators\n                token : \"keyword\",\n                regex: \"\\\\\\\\[bB]\",\n                next: \"no_quantifier\"\n            }, {\n                token: \"regexp.keyword.operator\",\n                regex: escape\n            }, {\n                // flag\n                token: \"string.regexp\",\n                regex: \"/\\\\w*\",\n                next: \"start\"\n            }, {               \n                token : [\"string\", \"string.regex\"],\n                regex: quantifier,\n                next: \"no_quantifier\"\n            }, {\n                // operators\n                token : \"keyword\",\n                regex: \"[$^]|\\\\\\\\[bB]\",\n                next: \"no_quantifier\"\n            }, {\n                // operators\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|[()$^+*?]/,\n                next: \"no_quantifier\"\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/,\n                next: \"no_quantifier\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"start\"\n            }\n        ],\n        \n\n        \"character_class\": [{\n                regex: /\\\\[dDwWsS]/\n            },{\n                token: \"markup.list\",\n                regex: \"(?:\" + escape + \"|.)-(?:[^\\\\]\\\\\\\\]|\" + escape + \")\"\n            }, {\n                token: \"keyword\",\n                regex: escape\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"start\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"start\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"no_quantifier\":[{\n                token: \"invalid\",\n                regex: quantifier\n            }, {\n                token: \"invalid\",\n                regex: \"\",\n                next: \"start\"\n            }\n        ]\n        \n    };\n};\n\noop.inherits(JsRegexHighlightRules, TextHighlightRules);\n\nexports.JsRegexHighlightRules = JsRegexHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/json/json_parse.js",
    "content": "/*\n    http://www.JSON.org/json_parse.js\n    2008-09-18\n\n    Public Domain.\n\n    NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n\n    This file creates a json_parse function.\n\n        json_parse(text, reviver)\n            This method parses a JSON text to produce an object or array.\n            It can throw a SyntaxError exception.\n\n            The optional reviver parameter is a function that can filter and\n            transform the results. It receives each of the keys and values,\n            and its return value is used instead of the original value.\n            If it returns what it received, then the structure is not modified.\n            If it returns undefined then the member is deleted.\n\n            Example:\n\n            // Parse the text. Values that look like ISO date strings will\n            // be converted to Date objects.\n\n            myData = json_parse(text, function (key, value) {\n                var a;\n                if (typeof value === 'string') {\n                    a =\n/^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n                    if (a) {\n                        return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n                            +a[5], +a[6]));\n                    }\n                }\n                return value;\n            });\n\n    This is a reference implementation. You are free to copy, modify, or\n    redistribute.\n\n    This code should be minified before deployment.\n    See http://javascript.crockford.com/jsmin.html\n\n    USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n    NOT CONTROL.\n*/\n\n/*members \"\", \"\\\"\", \"\\/\", \"\\\\\", at, b, call, charAt, f, fromCharCode,\n    hasOwnProperty, message, n, name, push, r, t, text\n*/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\n// This is a function that can parse a JSON text, producing a JavaScript\n// data structure. It is a simple, recursive descent parser. It does not use\n// eval or regular expressions, so it can be used as a model for implementing\n// a JSON parser in other languages.\n\n// We are defining the function inside of another function to avoid creating\n// global variables.\n\n    var at,     // The index of the current character\n        ch,     // The current character\n        escapee = {\n            '\"':  '\"',\n            '\\\\': '\\\\',\n            '/':  '/',\n            b:    '\\b',\n            f:    '\\f',\n            n:    '\\n',\n            r:    '\\r',\n            t:    '\\t'\n        },\n        text,\n\n        error = function (m) {\n\n// Call error when something is wrong.\n\n            throw {\n                name:    'SyntaxError',\n                message: m,\n                at:      at,\n                text:    text\n            };\n        },\n\n        next = function (c) {\n\n// If a c parameter is provided, verify that it matches the current character.\n\n            if (c && c !== ch) {\n                error(\"Expected '\" + c + \"' instead of '\" + ch + \"'\");\n            }\n\n// Get the next character. When there are no more characters,\n// return the empty string.\n\n            ch = text.charAt(at);\n            at += 1;\n            return ch;\n        },\n\n        number = function () {\n\n// Parse a number value.\n\n            var number,\n                string = '';\n\n            if (ch === '-') {\n                string = '-';\n                next('-');\n            }\n            while (ch >= '0' && ch <= '9') {\n                string += ch;\n                next();\n            }\n            if (ch === '.') {\n                string += '.';\n                while (next() && ch >= '0' && ch <= '9') {\n                    string += ch;\n                }\n            }\n            if (ch === 'e' || ch === 'E') {\n                string += ch;\n                next();\n                if (ch === '-' || ch === '+') {\n                    string += ch;\n                    next();\n                }\n                while (ch >= '0' && ch <= '9') {\n                    string += ch;\n                    next();\n                }\n            }\n            number = +string;\n            if (isNaN(number)) {\n                error(\"Bad number\");\n            } else {\n                return number;\n            }\n        },\n\n        string = function () {\n\n// Parse a string value.\n\n            var hex,\n                i,\n                string = '',\n                uffff;\n\n// When parsing for string values, we must look for \" and \\ characters.\n\n            if (ch === '\"') {\n                while (next()) {\n                    if (ch === '\"') {\n                        next();\n                        return string;\n                    } else if (ch === '\\\\') {\n                        next();\n                        if (ch === 'u') {\n                            uffff = 0;\n                            for (i = 0; i < 4; i += 1) {\n                                hex = parseInt(next(), 16);\n                                if (!isFinite(hex)) {\n                                    break;\n                                }\n                                uffff = uffff * 16 + hex;\n                            }\n                            string += String.fromCharCode(uffff);\n                        } else if (typeof escapee[ch] === 'string') {\n                            string += escapee[ch];\n                        } else {\n                            break;\n                        }\n                    } else {\n                        string += ch;\n                    }\n                }\n            }\n            error(\"Bad string\");\n        },\n\n        white = function () {\n\n// Skip whitespace.\n\n            while (ch && ch <= ' ') {\n                next();\n            }\n        },\n\n        word = function () {\n\n// true, false, or null.\n\n            switch (ch) {\n            case 't':\n                next('t');\n                next('r');\n                next('u');\n                next('e');\n                return true;\n            case 'f':\n                next('f');\n                next('a');\n                next('l');\n                next('s');\n                next('e');\n                return false;\n            case 'n':\n                next('n');\n                next('u');\n                next('l');\n                next('l');\n                return null;\n            }\n            error(\"Unexpected '\" + ch + \"'\");\n        },\n\n        value,  // Place holder for the value function.\n\n        array = function () {\n\n// Parse an array value.\n\n            var array = [];\n\n            if (ch === '[') {\n                next('[');\n                white();\n                if (ch === ']') {\n                    next(']');\n                    return array;   // empty array\n                }\n                while (ch) {\n                    array.push(value());\n                    white();\n                    if (ch === ']') {\n                        next(']');\n                        return array;\n                    }\n                    next(',');\n                    white();\n                }\n            }\n            error(\"Bad array\");\n        },\n\n        object = function () {\n\n// Parse an object value.\n\n            var key,\n                object = {};\n\n            if (ch === '{') {\n                next('{');\n                white();\n                if (ch === '}') {\n                    next('}');\n                    return object;   // empty object\n                }\n                while (ch) {\n                    key = string();\n                    white();\n                    next(':');\n                    if (Object.hasOwnProperty.call(object, key)) {\n                        error('Duplicate key \"' + key + '\"');\n                    }\n                    object[key] = value();\n                    white();\n                    if (ch === '}') {\n                        next('}');\n                        return object;\n                    }\n                    next(',');\n                    white();\n                }\n            }\n            error(\"Bad object\");\n        };\n\n    value = function () {\n\n// Parse a JSON value. It could be an object, an array, a string, a number,\n// or a word.\n\n        white();\n        switch (ch) {\n        case '{':\n            return object();\n        case '[':\n            return array();\n        case '\"':\n            return string();\n        case '-':\n            return number();\n        default:\n            return ch >= '0' && ch <= '9' ? number() : word();\n        }\n    };\n\n// Return the json_parse function. It will have access to all of the above\n// functions and variables.\n\n    return function (source, reviver) {\n        var result;\n\n        text = source;\n        at = 0;\n        ch = ' ';\n        result = value();\n        white();\n        if (ch) {\n            error(\"Syntax error\");\n        }\n\n// If there is a reviver function, we recursively walk the new structure,\n// passing each name/value pair to the reviver function for possible\n// transformation, starting with a temporary root object that holds the result\n// in an empty key. If there is not a reviver function, we simply return the\n// result.\n\n        return typeof reviver === 'function' ? function walk(holder, key) {\n            var k, v, value = holder[key];\n            if (value && typeof value === 'object') {\n                for (k in value) {\n                    if (Object.hasOwnProperty.call(value, k)) {\n                        v = walk(value, k);\n                        if (v !== undefined) {\n                            value[k] = v;\n                        } else {\n                            delete value[k];\n                        }\n                    }\n                }\n            }\n            return reviver.call(holder, key, value);\n        }({'': result}, '') : result;\n    };\n});\n"
  },
  {
    "path": "lib/ace/mode/json.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar HighlightRules = require(\"./json_highlight_rules\").JsonHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\n\nvar Mode = function() {\n    this.HighlightRules = HighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/json_worker\", \"JsonWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n\n    this.$id = \"ace/mode/json\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/json_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar JsonHighlightRules = function() {\n\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"variable\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]\\\\s*(?=:)'\n            }, {\n                token : \"string\", // single line\n                regex : '\"',\n                next  : \"string\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false)\\\\b\"\n            }, {\n                token : \"text\", // single quoted strings are not allowed\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"comment\", // comments are not allowed, but who cares?\n                regex : \"\\\\/\\\\/.*$\"\n            }, {\n                token : \"comment.start\", // comments are not allowed, but who cares?\n                regex : \"\\\\/\\\\*\",\n                next  : \"comment\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"string\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : /\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[\"\\\\\\/bfnrt])/\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"start\"\n            }, {\n                defaultToken : \"string\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment.end\", // comments are not allowed, but who cares?\n                regex : \"\\\\*\\\\/\",\n                next  : \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ]\n    };\n    \n};\n\noop.inherits(JsonHighlightRules, TextHighlightRules);\n\nexports.JsonHighlightRules = JsonHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/json_worker.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar Mirror = require(\"../worker/mirror\").Mirror;\nvar parse = require(\"./json/json_parse\");\n\nvar JsonWorker = exports.JsonWorker = function(sender) {\n    Mirror.call(this, sender);\n    this.setTimeout(200);\n};\n\noop.inherits(JsonWorker, Mirror);\n\n(function() {\n\n    this.onUpdate = function() {\n        var value = this.doc.getValue();\n        var errors = [];\n        try {\n            if (value)\n                parse(value);\n        } catch (e) {\n            var pos = this.doc.indexToPosition(e.at-1);\n            errors.push({\n                row: pos.row,\n                column: pos.column,\n                text: e.message,\n                type: \"error\"\n            });\n        }\n        this.sender.emit(\"annotate\", errors);\n    };\n\n}).call(JsonWorker.prototype);\n\n});\n"
  },
  {
    "path": "lib/ace/mode/json_worker_test.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\nif (typeof process !== \"undefined\") {\n    require(\"amd-loader\");\n}\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar assert = require(\"../test/assertions\");\nvar Worker = require(\"./json_worker\").JsonWorker;\n\n\nmodule.exports = {\n    setUp : function() {\n        this.sender = {\n            on: function() {},\n            callback: function(data, id) {\n                this.data = data;\n            },\n            events: [],\n            emit: function(type, e) {\n                this.events.push([type, e]);\n            }\n        };\n    },\n\n    \"test check valid json\": function() {\n        var worker = new Worker(this.sender);\n        worker.setValue(\"{}\");\n        worker.deferredUpdate.call();\n\n        assert.equal(this.sender.events[0][1].length, 0);\n    },\n\n    \"test check for syntax error\": function() {\n        var worker = new Worker(this.sender);\n        worker.setValue([\n            \"{\",\n            \"juhu: 12\",\n            \"}\"\n        ].join(\"\\n\"));\n        worker.deferredUpdate.call();\n\n        var event = this.sender.events[0];\n        assert.equal(event[0], \"annotate\");\n        assert.equal(event[1].length, 1);\n        assert.equal(event[1][0].type, \"error\");\n        assert.equal(event[1][0].text, \"Bad string\");\n        assert.equal(event[1][0].row, 1);\n        assert.equal(event[1][0].column, 0);\n\n    },\n\n    \"test check for syntax error at first char\": function() {\n        var worker = new Worker(this.sender);\n        worker.setValue(\"x\");\n        worker.deferredUpdate.call();\n\n        var event = this.sender.events[0];\n        assert.equal(event[0], \"annotate\");\n        assert.equal(event[1][0].type, \"error\");\n        assert.equal(event[1][0].text, \"Unexpected 'x'\");\n        assert.equal(event[1][0].row, 0);\n        assert.equal(event[1][0].column, 0);\n    }\n\n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main) {\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n}\n"
  },
  {
    "path": "lib/ace/mode/jsoniq.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar JSONiqLexer = require(\"./xquery/jsoniq_lexer\").JSONiqLexer;\nvar Range = require(\"../range\").Range;\nvar XQueryBehaviour = require(\"./behaviour/xquery\").XQueryBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Anchor = require(\"../anchor\").Anchor;\n\nvar Mode = function() {\n    this.$tokenizer   = new JSONiqLexer();\n    this.$behaviour   = new XQueryBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n    this.$highlightRules = new TextHighlightRules();\n};\n\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.completer = {\n        getCompletions: function(editor, session, pos, prefix, callback) {\n            if (!session.$worker)\n                return callback();\n            session.$worker.emit(\"complete\", { data: { pos: pos, prefix: prefix } });\n            session.$worker.on(\"complete\", function(e){\n                callback(null, e.data);\n            });\n        }\n    };\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var match = line.match(/\\s*(?:then|else|return|[{\\(]|<\\w+>)\\s*$/);\n        if (match)\n            indent += tab;\n        return indent;\n    };\n    \n    this.checkOutdent = function(state, line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*[\\}\\)]/.test(input);\n    };\n    \n    this.autoOutdent = function(state, doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*[\\}\\)])/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.toggleCommentLines = function(state, doc, startRow, endRow) {\n        var i, line;\n        var outdent = true;\n        var re = /^\\s*\\(:(.*):\\)/;\n\n        for (i=startRow; i<= endRow; i++) {\n            if (!re.test(doc.getLine(i))) {\n                outdent = false;\n                break;\n            }\n        }\n\n        var range = new Range(0, 0, 0, 0);\n        for (i=startRow; i<= endRow; i++) {\n            line = doc.getLine(i);\n            range.start.row  = i;\n            range.end.row    = i;\n            range.end.column = line.length;\n\n            doc.replace(range, outdent ? line.match(re)[1] : \"(:\" + line + \":)\");\n        }\n    };\n    this.createWorker = function(session) {\n        \n      var worker = new WorkerClient([\"ace\"], \"ace/mode/xquery_worker\", \"XQueryWorker\");\n        var that = this;\n\n        worker.attachToDocument(session.getDocument());\n        \n        worker.on(\"ok\", function(e) {\n          session.clearAnnotations();\n        });\n        \n        worker.on(\"markers\", function(e) {\n          session.clearAnnotations();\n          that.addMarkers(e.data, session);\n        });\n \n        return worker;\n    };\n \n    this.removeMarkers = function(session) {\n        var markers = session.getMarkers(false);\n        for (var id in markers) {\n            // All language analysis' markers are prefixed with language_highlight\n            if (markers[id].clazz.indexOf('language_highlight_') === 0) {\n                session.removeMarker(id);\n            }\n        }\n        for (var i = 0; i < session.markerAnchors.length; i++) {\n            session.markerAnchors[i].detach();\n        }\n        session.markerAnchors = [];\n    };\n\n    this.addMarkers = function(annos, mySession) {\n        var _self = this;\n        \n        if (!mySession.markerAnchors) mySession.markerAnchors = [];\n        this.removeMarkers(mySession);\n        mySession.languageAnnos = [];\n        annos.forEach(function(anno) {\n            // Certain annotations can temporarily be disabled\n            //if (_self.disabledMarkerTypes[anno.type])\n            //    return;\n            // Multi-line markers are not supported, and typically are a result from a bad error recover, ignore\n            //if(anno.pos.el && anno.pos.sl !== anno.pos.el)\n            //    return;\n            // Using anchors here, to automaticaly move markers as text around the marker is updated\n            var anchor = new Anchor(mySession.getDocument(), anno.pos.sl, anno.pos.sc || 0);\n            mySession.markerAnchors.push(anchor);\n            var markerId;\n            var colDiff = anno.pos.ec - anno.pos.sc;\n            var rowDiff = anno.pos.el - anno.pos.sl;\n            var gutterAnno = {\n                guttertext: anno.message,\n                type: anno.level || \"warning\",\n                text: anno.message\n                // row will be filled in updateFloat()\n            };\n\n            function updateFloat(single) {\n                if (markerId)\n                    mySession.removeMarker(markerId);\n                gutterAnno.row = anchor.row;\n                if (anno.pos.sc !== undefined && anno.pos.ec !== undefined) {\n                    var range = new Range(anno.pos.sl, anno.pos.sc, anno.pos.el, anno.pos.ec);\n                    //var range = Range.fromPoints(anchor.getPosition(), {\n                    //    row: anchor.row + rowDiff,\n                    //    column: anchor.column + colDiff\n                    //});\n                    markerId = mySession.addMarker(range, \"language_highlight_\" + (anno.type ? anno.type : \"default\"));\n                }\n                if (single) mySession.setAnnotations(mySession.languageAnnos);\n            }\n            updateFloat();\n            anchor.on(\"change\", function() {\n                updateFloat(true);\n            });\n            if (anno.message) mySession.languageAnnos.push(gutterAnno);\n        });\n        mySession.setAnnotations(mySession.languageAnnos);\n    }; \n\n    this.$id = \"ace/mode/jsoniq\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/jsp.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JspHighlightRules = require(\"./jsp_highlight_rules\").JspHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JspHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.$id = \"ace/mode/jsp\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/jsp_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar JavaHighlightRules = require(\"./java_highlight_rules\").JavaHighlightRules;\n\nvar JspHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n\n    var builtinVariables = 'request|response|out|session|' +\n            'application|config|pageContext|page|Exception';\n\n    var keywords = 'page|include|taglib';\n\n    var startRules = [\n        {\n            token : \"comment\",\n            regex : \"<%--\",\n            push : \"jsp-dcomment\"\n        }, {\n            token : \"meta.tag\", // jsp open tag\n            regex : \"<%@?|<%=?|<%!?|<jsp:[^>]+>\",\n            push  : \"jsp-start\"\n        }\n    ];\n\n    var endRules = [\n        {\n            token : \"meta.tag\", // jsp close tag\n            regex : \"%>|<\\\\/jsp:[^>]+>\",\n            next  : \"pop\"\n        }, {\n            token: \"variable.language\",\n            regex : builtinVariables\n        }, {\n            token: \"keyword\",\n            regex : keywords\n        }\n    ];\n\n    for (var key in this.$rules)\n        this.$rules[key].unshift.apply(this.$rules[key], startRules);\n\n    this.embedRules(JavaHighlightRules, \"jsp-\", endRules, [\"start\"]);\n\n    this.addRules({\n        \"jsp-dcomment\" : [{\n            token : \"comment\",\n            regex : \".*?--%>\",\n            next : \"pop\"\n        }]\n    });\n\n    this.normalizeRules();\n};\n\noop.inherits(JspHighlightRules, HtmlHighlightRules);\n\nexports.JspHighlightRules = JspHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/jssm.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JSSMHighlightRules = require(\"./jssm_highlight_rules\").JSSMHighlightRules;\n// TODO: pick appropriate fold mode\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JSSMHighlightRules;\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    // Extra logic goes here.\n    this.$id = \"ace/mode/jssm\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});"
  },
  {
    "path": "lib/ace/mode/jssm_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/* This file was autogenerated from ./jssm.tmLanguage (uuid: ) */\n/****************************************************************************************\n * IT MIGHT NOT BE PERFECT ...But it's a good start from an existing *.tmlanguage file. *\n * fileTypes                                                                            *\n ****************************************************************************************/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar JSSMHighlightRules = function() {\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = {\n        start: [{\n            token: \"punctuation.definition.comment.mn\",\n            regex: /\\/\\*/,\n            push: [{\n                token: \"punctuation.definition.comment.mn\",\n                regex: /\\*\\//,\n                next: \"pop\"\n            }, {\n                defaultToken: \"comment.block.jssm\"\n            }],\n            comment: \"block comment\"\n        }, {\n            token: \"comment.line.jssm\",\n            regex: /\\/\\//,\n            push: [{\n                token: \"comment.line.jssm\",\n                regex: /$/,\n                next: \"pop\"\n            }, {\n                defaultToken: \"comment.line.jssm\"\n            }],\n            comment: \"block comment\"\n        }, {\n            token: \"entity.name.function\",\n            regex: /\\${/,\n            push: [{\n                token: \"entity.name.function\",\n                regex: /}/,\n                next: \"pop\"\n            }, {\n                defaultToken: \"keyword.other\"\n            }],\n            comment: \"js outcalls\"\n        }, {\n            token: \"constant.numeric\",\n            regex: /[0-9]*\\.[0-9]*\\.[0-9]*/,\n            comment: \"semver\"\n        }, {\n            token: \"constant.language.jssmLanguage\",\n            regex: /graph_layout\\s*:/,\n            comment: \"jssm language tokens\"\n        }, {\n            token: \"constant.language.jssmLanguage\",\n            regex: /machine_name\\s*:/,\n            comment: \"jssm language tokens\"\n        }, {\n            token: \"constant.language.jssmLanguage\",\n            regex: /machine_version\\s*:/,\n            comment: \"jssm language tokens\"\n        }, {\n            token: \"constant.language.jssmLanguage\",\n            regex: /jssm_version\\s*:/,\n            comment: \"jssm language tokens\"\n        }, {\n            token: \"keyword.control.transition.jssmArrow.legal_legal\",\n            regex: /<->/,\n            comment: \"transitions\"\n        }, {\n            token: \"keyword.control.transition.jssmArrow.legal_none\",\n            regex: /<-/,\n            comment: \"transitions\"\n        }, {\n            token: \"keyword.control.transition.jssmArrow.none_legal\",\n            regex: /->/,\n            comment: \"transitions\"\n        }, {\n            token: \"keyword.control.transition.jssmArrow.main_main\",\n            regex: /<=>/,\n            comment: \"transitions\"\n        }, {\n            token: \"keyword.control.transition.jssmArrow.none_main\",\n            regex: /=>/,\n            comment: \"transitions\"\n        }, {\n            token: \"keyword.control.transition.jssmArrow.main_none\",\n            regex: /<=/,\n            comment: \"transitions\"\n        }, {\n            token: \"keyword.control.transition.jssmArrow.forced_forced\",\n            regex: /<~>/,\n            comment: \"transitions\"\n        }, {\n            token: \"keyword.control.transition.jssmArrow.none_forced\",\n            regex: /~>/,\n            comment: \"transitions\"\n        }, {\n            token: \"keyword.control.transition.jssmArrow.forced_none\",\n            regex: /<~/,\n            comment: \"transitions\"\n        }, {\n            token: \"keyword.control.transition.jssmArrow.legal_main\",\n            regex: /<-=>/,\n            comment: \"transitions\"\n        }, {\n            token: \"keyword.control.transition.jssmArrow.main_legal\",\n            regex: /<=->/,\n            comment: \"transitions\"\n        }, {\n            token: \"keyword.control.transition.jssmArrow.legal_forced\",\n            regex: /<-~>/,\n            comment: \"transitions\"\n        }, {\n            token: \"keyword.control.transition.jssmArrow.forced_legal\",\n            regex: /<~->/,\n            comment: \"transitions\"\n        }, {\n            token: \"keyword.control.transition.jssmArrow.main_forced\",\n            regex: /<=~>/,\n            comment: \"transitions\"\n        }, {\n            token: \"keyword.control.transition.jssmArrow.forced_main\",\n            regex: /<~=>/,\n            comment: \"transitions\"\n        }, {\n            token: \"constant.numeric.jssmProbability\",\n            regex: /[0-9]+%/,\n            comment: \"edge probability annotation\"\n        }, {\n            token: \"constant.character.jssmAction\",\n            regex: /\\'[^']*\\'/,\n            comment: \"action annotation\"\n        }, {\n            token: \"entity.name.tag.jssmLabel.doublequoted\",\n            regex: /\\\"[^\"]*\\\"/,\n            comment: \"jssm label annotation\"\n        }, {\n            token: \"entity.name.tag.jssmLabel.atom\",\n            regex: /[a-zA-Z0-9_.+&()#@!?,]/,\n            comment: \"jssm label annotation\"\n        }]\n    };\n    \n    this.normalizeRules();\n};\n\nJSSMHighlightRules.metaData = {\n    fileTypes: [\"jssm\", \"jssm_state\"],\n    name: \"JSSM\",\n    scopeName: \"source.jssm\"\n};\n\n\noop.inherits(JSSMHighlightRules, TextHighlightRules);\n\nexports.JSSMHighlightRules = JSSMHighlightRules;\n});"
  },
  {
    "path": "lib/ace/mode/jsx.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JsxHighlightRules = require(\"./jsx_highlight_rules\").JsxHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nfunction Mode() {\n    this.HighlightRules = JsxHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n}\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/jsx\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/jsx_highlight_rules.js",
    "content": "define(function(require, exports, module) {\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar JsxHighlightRules = function() {\n    var keywords = lang.arrayToMap(\n        (\"break|do|instanceof|typeof|case|else|new|var|catch|finally|return|void|continue|for|switch|default|while|function|this|\" +\n         \"if|throw|\" +\n         \"delete|in|try|\" +\n         \"class|extends|super|import|from|into|implements|interface|static|mixin|override|abstract|final|\" +\n         \"number|int|string|boolean|variant|\" +\n         \"log|assert\").split(\"|\")\n    );\n    \n    var buildinConstants = lang.arrayToMap(\n        (\"null|true|false|NaN|Infinity|__FILE__|__LINE__|undefined\").split(\"|\")\n    );\n    \n    var reserved = lang.arrayToMap(\n        (\"debugger|with|\" +\n         \"const|export|\" +\n         \"let|private|public|yield|protected|\" +\n         \"extern|native|as|operator|__fake__|__readonly__\").split(\"|\")\n    );\n    \n    var identifierRe = \"[a-zA-Z_][a-zA-Z0-9_]*\\\\b\";\n    \n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string.regexp\",\n                regex : \"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false)\\\\b\"\n            }, {\n                token : [\n                    \"storage.type\",\n                    \"text\",\n                    \"entity.name.function\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")\"\n            }, {\n                token : function(value) {\n                    if (value == \"this\")\n                        return \"variable.language\";\n                    else if (value == \"function\")\n                        return \"storage.type\";\n                    else if (keywords.hasOwnProperty(value) || reserved.hasOwnProperty(value))\n                        return \"keyword\";\n                    else if (buildinConstants.hasOwnProperty(value))\n                        return \"constant.language\";\n                    else if (/^_?[A-Z][a-zA-Z0-9_]*$/.test(value))\n                        return \"language.support.class\";\n                    else\n                        return \"identifier\";\n                },\n                // TODO: Unicode escape sequences\n                // TODO: Unicode identifiers\n                regex : identifierRe\n            }, {\n                token : \"keyword.operator\",\n                regex : \"!|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : \"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({<]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}>]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ]\n    };\n    \n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n};\n\noop.inherits(JsxHighlightRules, TextHighlightRules);\n\nexports.JsxHighlightRules = JsxHighlightRules;\n});"
  },
  {
    "path": "lib/ace/mode/julia.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n *\n * Contributor(s):\n *\n *\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JuliaHighlightRules = require(\"./julia_highlight_rules\").JuliaHighlightRules;\n// TODO: pick appropriate fold mode\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JuliaHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"#\";\n    this.blockComment = \"\";\n    this.$id = \"ace/mode/julia\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});"
  },
  {
    "path": "lib/ace/mode/julia_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/* This file was autogenerated from https://raw.github.com/JuliaLang/julia/master/contrib/Julia.tmbundle/Syntaxes/Julia.tmLanguage (uuid: ) */\n/****************************************************************************************\n * IT MIGHT NOT BE PERFECT ...But it's a good start from an existing *.tmlanguage file. *\n * fileTypes                                                                            *\n ****************************************************************************************/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar JuliaHighlightRules = function() {\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = { start: \n       [ { include: '#function_decl' },\n         { include: '#function_call' },\n         { include: '#type_decl' },\n         { include: '#keyword' },\n         { include: '#operator' },\n         { include: '#number' },\n         { include: '#string' },\n         { include: '#comment' } ],\n      '#bracket': \n       [ { token: 'keyword.bracket.julia',\n           regex: '\\\\(|\\\\)|\\\\[|\\\\]|\\\\{|\\\\}|,' } ],\n      '#comment': \n       [ { token: \n            [ 'punctuation.definition.comment.julia',\n              'comment.line.number-sign.julia' ],\n           regex: '(#)(?!\\\\{)(.*$)'} ],\n      '#function_call': \n       [ { token: [ 'support.function.julia', 'text' ],\n           regex: '([a-zA-Z0-9_]+!?)([\\\\w\\\\xff-\\\\u218e\\\\u2455-\\\\uffff]*\\\\()'} ],\n      '#function_decl': \n       [ { token: [ 'keyword.other.julia', 'meta.function.julia',\n               'entity.name.function.julia', 'meta.function.julia','text' ],\n           regex: '(function|macro)(\\\\s*)([a-zA-Z0-9_\\\\{]+!?)([\\\\w\\\\xff-\\\\u218e\\\\u2455-\\\\uffff]*)([(\\\\\\\\{])'} ],\n      '#keyword':\n       [ { token: 'keyword.other.julia',\n           regex: '\\\\b(?:function|type|immutable|macro|quote|abstract|bitstype|typealias|module|baremodule|new)\\\\b' },\n         { token: 'keyword.control.julia',\n           regex: '\\\\b(?:if|else|elseif|while|for|in|begin|let|end|do|try|catch|finally|return|break|continue)\\\\b' },\n         { token: 'storage.modifier.variable.julia',\n           regex: '\\\\b(?:global|local|const|export|import|importall|using)\\\\b' },\n         { token: 'variable.macro.julia', regex: '@[\\\\w\\\\xff-\\\\u218e\\\\u2455-\\\\uffff]+\\\\b' } ],\n      '#number': \n       [ { token: 'constant.numeric.julia',\n           regex: '\\\\b0(?:x|X)[0-9a-fA-F]*|(?:\\\\b[0-9]+\\\\.?[0-9]*|\\\\.[0-9]+)(?:(?:e|E)(?:\\\\+|-)?[0-9]*)?(?:im)?|\\\\bInf(?:32)?\\\\b|\\\\bNaN(?:32)?\\\\b|\\\\btrue\\\\b|\\\\bfalse\\\\b' } ],\n      '#operator': \n       [ { token: 'keyword.operator.update.julia',\n           regex: '=|:=|\\\\+=|-=|\\\\*=|/=|//=|\\\\.//=|\\\\.\\\\*=|\\\\\\\\=|\\\\.\\\\\\\\=|^=|\\\\.^=|%=|\\\\|=|&=|\\\\$=|<<=|>>=' },\n         { token: 'keyword.operator.ternary.julia', regex: '\\\\?|:' },\n         { token: 'keyword.operator.boolean.julia',\n           regex: '\\\\|\\\\||&&|!' },\n         { token: 'keyword.operator.arrow.julia', regex: '->|<-|-->' },\n         { token: 'keyword.operator.relation.julia',\n           regex: '>|<|>=|<=|==|!=|\\\\.>|\\\\.<|\\\\.>=|\\\\.>=|\\\\.==|\\\\.!=|\\\\.=|\\\\.!|<:|:>' },\n         { token: 'keyword.operator.range.julia', regex: ':' },\n         { token: 'keyword.operator.shift.julia', regex: '<<|>>' },\n         { token: 'keyword.operator.bitwise.julia', regex: '\\\\||\\\\&|~' },\n         { token: 'keyword.operator.arithmetic.julia',\n           regex: '\\\\+|-|\\\\*|\\\\.\\\\*|/|\\\\./|//|\\\\.//|%|\\\\.%|\\\\\\\\|\\\\.\\\\\\\\|\\\\^|\\\\.\\\\^' },\n         { token: 'keyword.operator.isa.julia', regex: '::' },\n         { token: 'keyword.operator.dots.julia',\n           regex: '\\\\.(?=[a-zA-Z])|\\\\.\\\\.+' },\n         { token: 'keyword.operator.interpolation.julia',\n           regex: '\\\\$#?(?=.)' },\n         { token: [ 'variable', 'keyword.operator.transposed-variable.julia' ],\n           regex: '([\\\\w\\\\xff-\\\\u218e\\\\u2455-\\\\uffff]+)((?:\\'|\\\\.\\')*\\\\.?\\')' },\n         { token: 'text',\n           regex: '\\\\[|\\\\('},\n         { token: [ 'text', 'keyword.operator.transposed-matrix.julia' ],\n            regex: \"([\\\\]\\\\)])((?:'|\\\\.')*\\\\.?')\"} ],\n      '#string': \n       [ { token: 'punctuation.definition.string.begin.julia',\n           regex: '\\'',\n           push: \n            [ { token: 'punctuation.definition.string.end.julia',\n                regex: '\\'',\n                next: 'pop' },\n              { include: '#string_escaped_char' },\n              { defaultToken: 'string.quoted.single.julia' } ] },\n         { token: 'punctuation.definition.string.begin.julia',\n           regex: '\"',\n           push: \n            [ { token: 'punctuation.definition.string.end.julia',\n                regex: '\"',\n                next: 'pop' },\n              { include: '#string_escaped_char' },\n              { defaultToken: 'string.quoted.double.julia' } ] },\n         { token: 'punctuation.definition.string.begin.julia',\n           regex: '\\\\b[\\\\w\\\\xff-\\\\u218e\\\\u2455-\\\\uffff]+\"',\n           push: \n            [ { token: 'punctuation.definition.string.end.julia',\n                regex: '\"[\\\\w\\\\xff-\\\\u218e\\\\u2455-\\\\uffff]*',\n                next: 'pop' },\n              { include: '#string_custom_escaped_char' },\n              { defaultToken: 'string.quoted.custom-double.julia' } ] },\n         { token: 'punctuation.definition.string.begin.julia',\n           regex: '`',\n           push: \n            [ { token: 'punctuation.definition.string.end.julia',\n                regex: '`',\n                next: 'pop' },\n              { include: '#string_escaped_char' },\n              { defaultToken: 'string.quoted.backtick.julia' } ] } ],\n      '#string_custom_escaped_char': [ { token: 'constant.character.escape.julia', regex: '\\\\\\\\\"' } ],\n      '#string_escaped_char': \n       [ { token: 'constant.character.escape.julia',\n           regex: '\\\\\\\\(?:\\\\\\\\|[0-3]\\\\d{,2}|[4-7]\\\\d?|x[a-fA-F0-9]{,2}|u[a-fA-F0-9]{,4}|U[a-fA-F0-9]{,8}|.)' } ],\n      '#type_decl': \n       [ { token: \n            [ 'keyword.control.type.julia',\n              'meta.type.julia',\n              'entity.name.type.julia',\n              'entity.other.inherited-class.julia',\n              'punctuation.separator.inheritance.julia',\n              'entity.other.inherited-class.julia' ],\n           regex: '(type|immutable)(\\\\s+)([a-zA-Z0-9_]+)(?:(\\\\s*)(<:)(\\\\s*[.a-zA-Z0-9_:]+))?' },\n         { token: [ 'other.typed-variable.julia', 'support.type.julia' ],\n           regex: '([a-zA-Z0-9_]+)(::[a-zA-Z0-9_{}]+)' } ] };\n    \n    this.normalizeRules();\n};\n\nJuliaHighlightRules.metaData = { fileTypes: [ 'jl' ],\n      firstLineMatch: '^#!.*\\\\bjulia\\\\s*$',\n      foldingStartMarker: '^\\\\s*(?:if|while|for|begin|function|macro|module|baremodule|type|immutable|let)\\\\b(?!.*\\\\bend\\\\b).*$',\n      foldingStopMarker: '^\\\\s*(?:end)\\\\b.*$',\n      name: 'Julia',\n      scopeName: 'source.julia' };\n\n\noop.inherits(JuliaHighlightRules, TextHighlightRules);\n\nexports.JuliaHighlightRules = JuliaHighlightRules;\n});"
  },
  {
    "path": "lib/ace/mode/kotlin.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar KotlinHighlightRules = require(\"./kotlin_highlight_rules\").KotlinHighlightRules;\n// TODO: pick appropriate fold mode\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = KotlinHighlightRules;\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    // this.lineCommentStart = \"\"/\\\\*\"\";\n    // this.blockComment = {start: \"\"/*\"\", end: \"\"*/\"\"};\n    // Extra logic goes here.\n    this.$id = \"ace/mode/kotlin\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});"
  },
  {
    "path": "lib/ace/mode/kotlin_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/* This file was autogenerated from Kotlin.tmLanguage (uuid: ) */\n/****************************************************************************************\n * IT MIGHT NOT BE PERFECT ...But it's a good start from an existing *.tmlanguage file. *\n * fileTypes                                                                            *\n ****************************************************************************************/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar KotlinHighlightRules = function() {\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = {\n        start: [{\n            include: \"#comments\"\n        }, {\n            token: [\n                \"text\",\n                \"keyword.other.kotlin\",\n                \"text\",\n                \"entity.name.package.kotlin\",\n                \"text\"\n            ],\n            regex: /^(\\s*)(package)\\b(?:(\\s*)([^ ;$]+)(\\s*))?/\n        }, {\n            include: \"#imports\"\n        }, {\n            include: \"#statements\"\n        }],\n        \"#classes\": [{\n            token: \"text\",\n            regex: /(?=\\s*(?:companion|class|object|interface))/,\n            push: [{\n                token: \"text\",\n                regex: /}|(?=$)/,\n                next: \"pop\"\n            }, {\n                token: [\"keyword.other.kotlin\", \"text\"],\n                regex: /\\b((?:companion\\s*)?)(class|object|interface)\\b/,\n                push: [{\n                    token: \"text\",\n                    regex: /(?=<|{|\\(|:)/,\n                    next: \"pop\"\n                }, {\n                    token: \"keyword.other.kotlin\",\n                    regex: /\\bobject\\b/\n                }, {\n                    token: \"entity.name.type.class.kotlin\",\n                    regex: /\\w+/\n                }]\n            }, {\n                token: \"text\",\n                regex: /</,\n                push: [{\n                    token: \"text\",\n                    regex: />/,\n                    next: \"pop\"\n                }, {\n                    include: \"#generics\"\n                }]\n            }, {\n                token: \"text\",\n                regex: /\\(/,\n                push: [{\n                    token: \"text\",\n                    regex: /\\)/,\n                    next: \"pop\"\n                }, {\n                    include: \"#parameters\"\n                }]\n            }, {\n                token: \"keyword.operator.declaration.kotlin\",\n                regex: /:/,\n                push: [{\n                    token: \"text\",\n                    regex: /(?={|$)/,\n                    next: \"pop\"\n                }, {\n                    token: \"entity.other.inherited-class.kotlin\",\n                    regex: /\\w+/\n                }, {\n                    token: \"text\",\n                    regex: /\\(/,\n                    push: [{\n                        token: \"text\",\n                        regex: /\\)/,\n                        next: \"pop\"\n                    }, {\n                        include: \"#expressions\"\n                    }]\n                }]\n            }, {\n                token: \"text\",\n                regex: /\\{/,\n                push: [{\n                    token: \"text\",\n                    regex: /\\}/,\n                    next: \"pop\"\n                }, {\n                    include: \"#statements\"\n                }]\n            }]\n        }],\n        \"#comments\": [{\n            token: \"punctuation.definition.comment.kotlin\",\n            regex: /\\/\\*/,\n            push: [{\n                token: \"punctuation.definition.comment.kotlin\",\n                regex: /\\*\\//,\n                next: \"pop\"\n            }, {\n                defaultToken: \"comment.block.kotlin\"\n            }]\n        }, {\n            token: [\n                \"text\",\n                \"punctuation.definition.comment.kotlin\",\n                \"comment.line.double-slash.kotlin\"\n            ],\n            regex: /(\\s*)(\\/\\/)(.*$)/\n        }],\n        \"#constants\": [{\n            token: \"constant.language.kotlin\",\n            regex: /\\b(?:true|false|null|this|super)\\b/\n        }, {\n            token: \"constant.numeric.kotlin\",\n            regex: /\\b(?:0(?:x|X)[0-9a-fA-F]*|(?:[0-9]+\\.?[0-9]*|\\.[0-9]+)(?:(?:e|E)(?:\\+|-)?[0-9]+)?)(?:[LlFfUuDd]|UL|ul)?\\b/\n        }, {\n            token: \"constant.other.kotlin\",\n            regex: /\\b[A-Z][A-Z0-9_]+\\b/\n        }],\n        \"#expressions\": [{\n            token: \"text\",\n            regex: /\\(/,\n            push: [{\n                token: \"text\",\n                regex: /\\)/,\n                next: \"pop\"\n            }, {\n                include: \"#expressions\"\n            }]\n        }, {\n            include: \"#types\"\n        }, {\n            include: \"#strings\"\n        }, {\n            include: \"#constants\"\n        }, {\n            include: \"#comments\"\n        }, {\n            include: \"#keywords\"\n        }],\n        \"#functions\": [{\n            token: \"text\",\n            regex: /(?=\\s*fun)/,\n            push: [{\n                token: \"text\",\n                regex: /}|(?=$)/,\n                next: \"pop\"\n            }, {\n                token: \"keyword.other.kotlin\",\n                regex: /\\bfun\\b/,\n                push: [{\n                    token: \"text\",\n                    regex: /(?=\\()/,\n                    next: \"pop\"\n                }, {\n                    token: \"text\",\n                    regex: /</,\n                    push: [{\n                        token: \"text\",\n                        regex: />/,\n                        next: \"pop\"\n                    }, {\n                        include: \"#generics\"\n                    }]\n                }, {\n                    token: [\"text\", \"entity.name.function.kotlin\"],\n                    regex: /((?:[\\.<\\?>\\w]+\\.)?)(\\w+)/\n                }]\n            }, {\n                token: \"text\",\n                regex: /\\(/,\n                push: [{\n                    token: \"text\",\n                    regex: /\\)/,\n                    next: \"pop\"\n                }, {\n                    include: \"#parameters\"\n                }]\n            }, {\n                token: \"keyword.operator.declaration.kotlin\",\n                regex: /:/,\n                push: [{\n                    token: \"text\",\n                    regex: /(?={|=|$)/,\n                    next: \"pop\"\n                }, {\n                    include: \"#types\"\n                }]\n            }, {\n                token: \"text\",\n                regex: /\\{/,\n                push: [{\n                    token: \"text\",\n                    regex: /(?=\\})/,\n                    next: \"pop\"\n                }, {\n                    include: \"#statements\"\n                }]\n            }, {\n                token: \"keyword.operator.assignment.kotlin\",\n                regex: /=/,\n                push: [{\n                    token: \"text\",\n                    regex: /(?=$)/,\n                    next: \"pop\"\n                }, {\n                    include: \"#expressions\"\n                }]\n            }]\n        }],\n        \"#generics\": [{\n            token: \"keyword.operator.declaration.kotlin\",\n            regex: /:/,\n            push: [{\n                token: \"text\",\n                regex: /(?=,|>)/,\n                next: \"pop\"\n            }, {\n                include: \"#types\"\n            }]\n        }, {\n            include: \"#keywords\"\n        }, {\n            token: \"storage.type.generic.kotlin\",\n            regex: /\\w+/\n        }],\n        \"#getters-and-setters\": [{\n            token: [\"entity.name.function.kotlin\", \"text\"],\n            regex: /\\b(get)\\b(\\s*\\(\\s*\\))/,\n            push: [{\n                token: \"text\",\n                regex: /\\}|(?=\\bset\\b)|$/,\n                next: \"pop\"\n            }, {\n                token: \"keyword.operator.assignment.kotlin\",\n                regex: /=/,\n                push: [{\n                    token: \"text\",\n                    regex: /(?=$|\\bset\\b)/,\n                    next: \"pop\"\n                }, {\n                    include: \"#expressions\"\n                }]\n            }, {\n                token: \"text\",\n                regex: /\\{/,\n                push: [{\n                    token: \"text\",\n                    regex: /\\}/,\n                    next: \"pop\"\n                }, {\n                    include: \"#expressions\"\n                }]\n            }]\n        }, {\n            token: [\"entity.name.function.kotlin\", \"text\"],\n            regex: /\\b(set)\\b(\\s*)(?=\\()/,\n            push: [{\n                token: \"text\",\n                regex: /\\}|(?=\\bget\\b)|$/,\n                next: \"pop\"\n            }, {\n                token: \"text\",\n                regex: /\\(/,\n                push: [{\n                    token: \"text\",\n                    regex: /\\)/,\n                    next: \"pop\"\n                }, {\n                    include: \"#parameters\"\n                }]\n            }, {\n                token: \"keyword.operator.assignment.kotlin\",\n                regex: /=/,\n                push: [{\n                    token: \"text\",\n                    regex: /(?=$|\\bset\\b)/,\n                    next: \"pop\"\n                }, {\n                    include: \"#expressions\"\n                }]\n            }, {\n                token: \"text\",\n                regex: /\\{/,\n                push: [{\n                    token: \"text\",\n                    regex: /\\}/,\n                    next: \"pop\"\n                }, {\n                    include: \"#expressions\"\n                }]\n            }]\n        }],\n        \"#imports\": [{\n            token: [\n                \"text\",\n                \"keyword.other.kotlin\",\n                \"text\",\n                \"keyword.other.kotlin\"\n            ],\n            regex: /^(\\s*)(import)(\\s+[^ $]+\\s+)((?:as)?)/\n        }],\n        \"#keywords\": [{\n            token: \"storage.modifier.kotlin\",\n            regex: /\\b(?:var|val|public|private|protected|abstract|final|enum|open|attribute|annotation|override|inline|var|val|vararg|lazy|in|out|internal|data|tailrec|operator|infix|const|yield|typealias|typeof)\\b/\n        }, {\n            token: \"keyword.control.catch-exception.kotlin\",\n            regex: /\\b(?:try|catch|finally|throw)\\b/\n        }, {\n            token: \"keyword.control.kotlin\",\n            regex: /\\b(?:if|else|while|for|do|return|when|where|break|continue)\\b/\n        }, {\n            token: \"keyword.operator.kotlin\",\n            regex: /\\b(?:in|is|as|assert)\\b/\n        }, {\n            token: \"keyword.operator.comparison.kotlin\",\n            regex: /==|!=|===|!==|<=|>=|<|>/\n        }, {\n            token: \"keyword.operator.assignment.kotlin\",\n            regex: /=/\n        }, {\n            token: \"keyword.operator.declaration.kotlin\",\n            regex: /:/\n        }, {\n            token: \"keyword.operator.dot.kotlin\",\n            regex: /\\./\n        }, {\n            token: \"keyword.operator.increment-decrement.kotlin\",\n            regex: /\\-\\-|\\+\\+/\n        }, {\n            token: \"keyword.operator.arithmetic.kotlin\",\n            regex: /\\-|\\+|\\*|\\/|%/\n        }, {\n            token: \"keyword.operator.arithmetic.assign.kotlin\",\n            regex: /\\+=|\\-=|\\*=|\\/=/\n        }, {\n            token: \"keyword.operator.logical.kotlin\",\n            regex: /!|&&|\\|\\|/\n        }, {\n            token: \"keyword.operator.range.kotlin\",\n            regex: /\\.\\./\n        }, {\n            token: \"punctuation.terminator.kotlin\",\n            regex: /;/\n        }],\n        \"#namespaces\": [{\n            token: \"keyword.other.kotlin\",\n            regex: /\\bnamespace\\b/\n        }, {\n            token: \"text\",\n            regex: /\\{/,\n            push: [{\n                token: \"text\",\n                regex: /\\}/,\n                next: \"pop\"\n            }, {\n                include: \"#statements\"\n            }]\n        }],\n        \"#parameters\": [{\n            token: \"keyword.operator.declaration.kotlin\",\n            regex: /:/,\n            push: [{\n                token: \"text\",\n                regex: /(?=,|\\)|=)/,\n                next: \"pop\"\n            }, {\n                include: \"#types\"\n            }]\n        }, {\n            token: \"keyword.operator.declaration.kotlin\",\n            regex: /=/,\n            push: [{\n                token: \"text\",\n                regex: /(?=,|\\))/,\n                next: \"pop\"\n            }, {\n                include: \"#expressions\"\n            }]\n        }, {\n            include: \"#keywords\"\n        }, {\n            token: \"variable.parameter.function.kotlin\",\n            regex: /\\w+/\n        }],\n        \"#statements\": [{\n            include: \"#namespaces\"\n        }, {\n            include: \"#typedefs\"\n        }, {\n            include: \"#classes\"\n        }, {\n            include: \"#functions\"\n        }, {\n            include: \"#variables\"\n        }, {\n            include: \"#getters-and-setters\"\n        }, {\n            include: \"#expressions\"\n        }],\n        \"#strings\": [{\n            token: \"punctuation.definition.string.begin.kotlin\",\n            regex: /\"\"\"/,\n            push: [{\n                token: \"punctuation.definition.string.end.kotlin\",\n                regex: /\"\"\"/,\n                next: \"pop\"\n            }, {\n                token: \"variable.parameter.template.kotlin\",\n                regex: /\\$\\w+|\\$\\{[^\\}]+\\}/\n            }, {\n                token: \"constant.character.escape.kotlin\",\n                regex: /\\\\./\n            }, {\n                defaultToken: \"string.quoted.third.kotlin\"\n            }]\n        }, {\n            token: \"punctuation.definition.string.begin.kotlin\",\n            regex: /\"/,\n            push: [{\n                token: \"punctuation.definition.string.end.kotlin\",\n                regex: /\"/,\n                next: \"pop\"\n            }, {\n                token: \"variable.parameter.template.kotlin\",\n                regex: /\\$\\w+|\\$\\{[^\\}]+\\}/\n            }, {\n                token: \"constant.character.escape.kotlin\",\n                regex: /\\\\./\n            }, {\n                defaultToken: \"string.quoted.double.kotlin\"\n            }]\n        }, {\n            token: \"punctuation.definition.string.begin.kotlin\",\n            regex: /'/,\n            push: [{\n                token: \"punctuation.definition.string.end.kotlin\",\n                regex: /'/,\n                next: \"pop\"\n            }, {\n                token: \"constant.character.escape.kotlin\",\n                regex: /\\\\./\n            }, {\n                defaultToken: \"string.quoted.single.kotlin\"\n            }]\n        }, {\n            token: \"punctuation.definition.string.begin.kotlin\",\n            regex: /`/,\n            push: [{\n                token: \"punctuation.definition.string.end.kotlin\",\n                regex: /`/,\n                next: \"pop\"\n            }, {\n                defaultToken: \"string.quoted.single.kotlin\"\n            }]\n        }],\n        \"#typedefs\": [{\n            token: \"text\",\n            regex: /(?=\\s*type)/,\n            push: [{\n                token: \"text\",\n                regex: /(?=$)/,\n                next: \"pop\"\n            }, {\n                token: \"keyword.other.kotlin\",\n                regex: /\\btype\\b/\n            }, {\n                token: \"text\",\n                regex: /</,\n                push: [{\n                    token: \"text\",\n                    regex: />/,\n                    next: \"pop\"\n                }, {\n                    include: \"#generics\"\n                }]\n            }, {\n                include: \"#expressions\"\n            }]\n        }],\n        \"#types\": [{\n            token: \"storage.type.buildin.kotlin\",\n            regex: /\\b(?:Any|Unit|String|Int|Boolean|Char|Long|Double|Float|Short|Byte|dynamic)\\b/\n        }, {\n            token: \"storage.type.buildin.array.kotlin\",\n            regex: /\\b(?:IntArray|BooleanArray|CharArray|LongArray|DoubleArray|FloatArray|ShortArray|ByteArray)\\b/\n        }, {\n            token: [\n                \"storage.type.buildin.collection.kotlin\",\n                \"text\"\n            ],\n            regex: /\\b(Array|List|Map)(<\\b)/,\n            push: [{\n                token: \"text\",\n                regex: />/,\n                next: \"pop\"\n            }, {\n                include: \"#types\"\n            }, {\n                include: \"#keywords\"\n            }]\n        }, {\n            token: \"text\",\n            regex: /\\w+</,\n            push: [{\n                token: \"text\",\n                regex: />/,\n                next: \"pop\"\n            }, {\n                include: \"#types\"\n            }, {\n                include: \"#keywords\"\n            }]\n        }, {\n            token: [\"keyword.operator.tuple.kotlin\", \"text\"],\n            regex: /(#)(\\()/,\n            push: [{\n                token: \"text\",\n                regex: /\\)/,\n                next: \"pop\"\n            }, {\n                include: \"#expressions\"\n            }]\n        }, {\n            token: \"text\",\n            regex: /\\{/,\n            push: [{\n                token: \"text\",\n                regex: /\\}/,\n                next: \"pop\"\n            }, {\n                include: \"#statements\"\n            }]\n        }, {\n            token: \"text\",\n            regex: /\\(/,\n            push: [{\n                token: \"text\",\n                regex: /\\)/,\n                next: \"pop\"\n            }, {\n                include: \"#types\"\n            }]\n        }, {\n            token: \"keyword.operator.declaration.kotlin\",\n            regex: /->/\n        }],\n        \"#variables\": [{\n            token: \"text\",\n            regex: /(?=\\s*(?:var|val))/,\n            push: [{\n                token: \"text\",\n                regex: /(?=:|=|$)/,\n                next: \"pop\"\n            }, {\n                token: \"keyword.other.kotlin\",\n                regex: /\\b(?:var|val)\\b/,\n                push: [{\n                    token: \"text\",\n                    regex: /(?=:|=|$)/,\n                    next: \"pop\"\n                }, {\n                    token: \"text\",\n                    regex: /</,\n                    push: [{\n                        token: \"text\",\n                        regex: />/,\n                        next: \"pop\"\n                    }, {\n                        include: \"#generics\"\n                    }]\n                }, {\n                    token: [\"text\", \"entity.name.variable.kotlin\"],\n                    regex: /((?:[\\.<\\?>\\w]+\\.)?)(\\w+)/\n                }]\n            }, {\n                token: \"keyword.operator.declaration.kotlin\",\n                regex: /:/,\n                push: [{\n                    token: \"text\",\n                    regex: /(?==|$)/,\n                    next: \"pop\"\n                }, {\n                    include: \"#types\"\n                }, {\n                    include: \"#getters-and-setters\"\n                }]\n            }, {\n                token: \"keyword.operator.assignment.kotlin\",\n                regex: /=/,\n                push: [{\n                    token: \"text\",\n                    regex: /(?=$)/,\n                    next: \"pop\"\n                }, {\n                    include: \"#expressions\"\n                }, {\n                    include: \"#getters-and-setters\"\n                }]\n            }]\n        }]\n    };\n    \n    this.normalizeRules();\n};\n\nKotlinHighlightRules.metaData = {\n    fileTypes: [\"kt\", \"kts\"],\n    name: \"Kotlin\",\n    scopeName: \"source.Kotlin\"\n};\n\n\noop.inherits(KotlinHighlightRules, TextHighlightRules);\n\nexports.KotlinHighlightRules = KotlinHighlightRules;\n});"
  },
  {
    "path": "lib/ace/mode/latex.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar LatexHighlightRules = require(\"./latex_highlight_rules\").LatexHighlightRules;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar LatexFoldMode = require(\"./folding/latex\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = LatexHighlightRules;\n    this.foldingRules = new LatexFoldMode();\n    this.$behaviour = new CstyleBehaviour({ braces: true });\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.type = \"text\";\n    \n    this.lineCommentStart = \"%\";\n\n    this.$id = \"ace/mode/latex\";\n    \n    this.getMatching = function(session, row, column) {\n        if (row == undefined)\n            row = session.selection.lead;\n        if (typeof row == \"object\") {\n            column = row.column;\n            row = row.row;\n        }\n\n        var startToken = session.getTokenAt(row, column);\n        if (!startToken)\n            return;\n        if (startToken.value == \"\\\\begin\" || startToken.value == \"\\\\end\") {\n            return this.foldingRules.latexBlock(session, row, column, true);\n        }\n    };\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n"
  },
  {
    "path": "lib/ace/mode/latex_highlight_rules.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar LatexHighlightRules = function() {  \n\n    this.$rules = {\n        \"start\" : [{\n            // A comment. Tex comments start with % and go to \n            // the end of the line\n            token : \"comment\",\n            regex : \"%.*$\"\n        }, {\n            // Documentclass and usepackage\n            token : [\"keyword\", \"lparen\", \"variable.parameter\", \"rparen\", \"lparen\", \"storage.type\", \"rparen\"],\n            regex : \"(\\\\\\\\(?:documentclass|usepackage|input))(?:(\\\\[)([^\\\\]]*)(\\\\]))?({)([^}]*)(})\"\n        }, {\n            // A label\n            token : [\"keyword\",\"lparen\", \"variable.parameter\", \"rparen\"],\n            regex : \"(\\\\\\\\(?:label|v?ref|cite(?:[^{]*)))(?:({)([^}]*)(}))?\"\n        }, {\n            // A Verbatim block\n            token : [\"storage.type\", \"lparen\", \"variable.parameter\", \"rparen\"],\n            regex : \"(\\\\\\\\begin)({)(verbatim)(})\",\n            next : \"verbatim\"\n        },  {\n            token : [\"storage.type\", \"lparen\", \"variable.parameter\", \"rparen\"],\n            regex : \"(\\\\\\\\begin)({)(lstlisting)(})\",\n            next : \"lstlisting\"\n        },  {\n            // A block\n            token : [\"storage.type\", \"lparen\", \"variable.parameter\", \"rparen\"],\n            regex : \"(\\\\\\\\(?:begin|end))({)([\\\\w*]*)(})\"\n        }, {\n            token : \"storage.type\",\n            regex : /\\\\verb\\b\\*?/,\n            next : [{\n                token : [\"keyword.operator\", \"string\", \"keyword.operator\"],\n                regex : \"(.)(.*?)(\\\\1|$)|\",\n                next : \"start\"\n            }]\n        }, {\n            // A tex command e.g. \\foo\n            token : \"storage.type\",\n            regex : \"\\\\\\\\[a-zA-Z]+\"\n        }, {\n            // Curly and square braces\n            token : \"lparen\",\n            regex : \"[[({]\"\n        }, {\n            // Curly and square braces\n            token : \"rparen\",\n            regex : \"[\\\\])}]\"\n        }, {\n            // Escaped character (including new line)\n            token : \"constant.character.escape\",\n            regex : \"\\\\\\\\[^a-zA-Z]?\"\n        }, {\n            // An equation\n            token : \"string\",\n            regex : \"\\\\${1,2}\",\n            next  : \"equation\"\n        }],\n        \"equation\" : [{\n            token : \"comment\",\n            regex : \"%.*$\"\n        }, {\n            token : \"string\",\n            regex : \"\\\\${1,2}\",\n            next  : \"start\"\n        }, {\n            token : \"constant.character.escape\",\n            regex : \"\\\\\\\\(?:[^a-zA-Z]|[a-zA-Z]+)\"\n        }, {\n            token : \"error\", \n            regex : \"^\\\\s*$\", \n            next : \"start\" \n        }, {\n            defaultToken : \"string\"\n        }],\n        \"verbatim\": [{\n            token : [\"storage.type\", \"lparen\", \"variable.parameter\", \"rparen\"],\n            regex : \"(\\\\\\\\end)({)(verbatim)(})\",\n            next : \"start\"\n        }, {\n            defaultToken : \"text\"\n        }],\n        \"lstlisting\": [{\n            token : [\"storage.type\", \"lparen\", \"variable.parameter\", \"rparen\"],\n            regex : \"(\\\\\\\\end)({)(lstlisting)(})\",\n            next : \"start\"\n        }, {\n            defaultToken : \"text\"\n        }]\n    };\n    \n    this.normalizeRules();\n};\noop.inherits(LatexHighlightRules, TextHighlightRules);\n\nexports.LatexHighlightRules = LatexHighlightRules;\n\n});\n"
  },
  {
    "path": "lib/ace/mode/less.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar LessHighlightRules = require(\"./less_highlight_rules\").LessHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\n\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = LessHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    \n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        // ignore braces in comments\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        // CSS completions only work with single (not nested) rulesets\n        return this.$completer.getCompletions(\"ruleset\", session, pos, prefix);\n    };\n\n    this.$id = \"ace/mode/less\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n"
  },
  {
    "path": "lib/ace/mode/less_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CssHighlightRules = require('./css_highlight_rules');\n\nvar LessHighlightRules = function() {\n\n\n    var keywordList = \"@import|@media|@font-face|@keyframes|@-webkit-keyframes|@supports|\" + \n        \"@charset|@plugin|@namespace|@document|@page|@viewport|@-ms-viewport|\" +\n        \"or|and|when|not\";\n\n    var keywords = keywordList.split('|');\n\n    var properties = CssHighlightRules.supportType.split('|');\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.constant\": CssHighlightRules.supportConstant,\n        \"keyword\": keywordList,\n        \"support.constant.color\": CssHighlightRules.supportConstantColor,\n        \"support.constant.fonts\": CssHighlightRules.supportConstantFonts\n    }, \"identifier\", true);   \n\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    var numRe = \"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";\n\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : [\"constant.numeric\", \"keyword\"],\n                regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"\n            }, {\n                token : \"constant.numeric\", // hex6 color\n                regex : \"#[a-f0-9]{6}\"\n            }, {\n                token : \"constant.numeric\", // hex3 color\n                regex : \"#[a-f0-9]{3}\"\n            }, {\n                token : \"constant.numeric\",\n                regex : numRe\n            }, {\n                token : [\"support.function\", \"paren.lparen\", \"string\", \"paren.rparen\"],\n                regex : \"(url)(\\\\()(.*)(\\\\))\"\n            }, {\n                token : [\"support.function\", \"paren.lparen\"],\n                regex : \"(:extend|[a-z0-9_\\\\-]+)(\\\\()\"\n            }, {\n                token : function(value) {\n                    if (keywords.indexOf(value.toLowerCase()) > -1)\n                        return \"keyword\";\n                    else\n                        return \"variable\";\n                },\n                regex : \"[@\\\\$][a-z0-9_\\\\-@\\\\$]*\\\\b\"\n            }, {\n                token : \"variable\",\n                regex : \"[@\\\\$]\\\\{[a-z0-9_\\\\-@\\\\$]*\\\\}\"\n            }, {\n                token : function(first, second) {\n                    if(properties.indexOf(first.toLowerCase()) > -1) {\n                        return [\"support.type.property\", \"text\"];\n                    }\n                    else {\n                        return [\"support.type.unknownProperty\", \"text\"];\n                    }\n                },\n                regex : \"([a-z0-9-_]+)(\\\\s*:)\"\n            }, {\n                token : \"keyword\",\n                regex : \"&\"   // special case - always treat as keyword\n            }, {\n                token : keywordMapper,\n                regex : \"\\\\-?[@a-z_][@a-z0-9_\\\\-]*\"\n            }, {\n                token: \"variable.language\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \":[a-z_][a-z0-9-_]*\"\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"<|>|<=|>=|=|!=|-|%|\\\\+|\\\\*\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                caseInsensitive: true\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ]\n    };\n    this.normalizeRules();\n};\n\noop.inherits(LessHighlightRules, TextHighlightRules);\n\nexports.LessHighlightRules = LessHighlightRules;\n\n});\n"
  },
  {
    "path": "lib/ace/mode/liquid.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar LiquidHighlightRules = require(\"./liquid_highlight_rules\").LiquidHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\n\nvar Mode = function() {\n    this.HighlightRules = LiquidHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/liquid\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/liquid_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\n\nvar LiquidHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n\n    // see: https://developer.mozilla.org/en/Liquid/Reference/Global_Objects\n    var functions = (\n      // Standard Filters\n        \"date|capitalize|downcase|upcase|first|last|join|sort|map|size|escape|\" +\n         \"escape_once|strip_html|strip_newlines|newline_to_br|replace|replace_first|\" +\n         \"truncate|truncatewords|prepend|append|minus|plus|times|divided_by|split\"\n    );\n\n    var keywords = (\n      // Standard Tags\n        \"capture|endcapture|case|endcase|when|comment|endcomment|\" +\n        \"cycle|for|endfor|in|reversed|if|endif|else|elsif|include|endinclude|unless|endunless|\" +\n      // Commonly used tags\n        \"style|text|image|widget|plugin|marker|endmarker|tablerow|endtablerow\"\n    );\n\n    var builtinVariables = 'forloop|tablerowloop';\n        // \"forloop\\\\.(length|index|index0|rindex|rindex0|first|last)|limit|offset|range\" +\n        // \"tablerowloop\\\\.(length|index|index0|rindex|rindex0|first|last|col|col0|\"+\n        // \"col_first|col_last)\"\n\n    var definitions = (\"assign\");\n\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": builtinVariables,\n        \"keyword\": keywords,\n        \"support.function\": functions,\n        \"keyword.definition\": definitions\n    }, \"identifier\");\n\n    // add liquid start tags to the HTML start tags\n    for (var rule in this.$rules) {\n        this.$rules[rule].unshift({\n            token : \"variable\",\n            regex : \"{%\",\n            push : \"liquid-start\"\n        }, {\n            token : \"variable\",\n            regex : \"{{\",\n            push : \"liquid-start\"\n        });\n    }\n\n    this.addRules({\n        \"liquid-start\" : [{\n            token: \"variable\",\n            regex: \"}}\",\n            next: \"pop\"\n        }, {\n            token: \"variable\",\n            regex: \"%}\",\n            next: \"pop\"\n        }, {\n            token : \"string\", // single line\n            regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n        }, {\n            token : \"string\", // single line\n            regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n        }, {\n            token : \"constant.numeric\", // hex\n            regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n        }, {\n            token : \"constant.language.boolean\",\n            regex : \"(?:true|false)\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"/|\\\\*|\\\\-|\\\\+|=|!=|\\\\?\\\\:\"\n        }, {\n            token : \"paren.lparen\",\n            regex : /[\\[\\({]/\n        }, {\n            token : \"paren.rparen\",\n            regex : /[\\])}]/\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+\"\n        }]\n    });\n\n    this.normalizeRules();\n};\noop.inherits(LiquidHighlightRules, TextHighlightRules);\n\nexports.LiquidHighlightRules = LiquidHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/lisp.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar LispHighlightRules = require(\"./lisp_highlight_rules\").LispHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = LispHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n       \n    this.lineCommentStart = \";\";\n    \n    this.$id = \"ace/mode/lisp\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});"
  },
  {
    "path": "lib/ace/mode/lisp_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n *\n * Contributor(s):\n * \n * Garen J. Torikian <gjtorikian @ gmail DOT com>\n *\n * ***** END LICENSE BLOCK ***** */\n\n /*\n  THIS FILE WAS AUTOGENERATED BY Lisp.tmlanguage (UUID: 00D451C9-6B1D-11D9-8DFA-000D93589AF6) */\n\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar LispHighlightRules = function() {\n    var keywordControl = \"case|do|let|loop|if|else|when\";\n    var keywordOperator = \"eq|neq|and|or\";\n    var constantLanguage = \"null|nil\";\n    var supportFunctions = \"cons|car|cdr|cond|lambda|format|setq|setf|quote|eval|append|list|listp|memberp|t|load|progn\";\n\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword.control\": keywordControl,\n        \"keyword.operator\": keywordOperator,\n        \"constant.language\": constantLanguage,\n        \"support.function\": supportFunctions\n    }, \"identifier\", true);\n\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = \n        {\n    \"start\": [\n        {\n            token : \"comment\",\n            regex : \";.*$\"\n        },\n        {\n            token: [\"storage.type.function-type.lisp\", \"text\", \"entity.name.function.lisp\"],\n            regex: \"(?:\\\\b(?:(defun|defmethod|defmacro))\\\\b)(\\\\s+)((?:\\\\w|\\\\-|\\\\!|\\\\?)*)\"\n        },\n        {\n            token: [\"punctuation.definition.constant.character.lisp\", \"constant.character.lisp\"],\n            regex: \"(#)((?:\\\\w|[\\\\\\\\+-=<>'\\\"&#])+)\"\n        },\n        {\n            token: [\"punctuation.definition.variable.lisp\", \"variable.other.global.lisp\", \"punctuation.definition.variable.lisp\"],\n            regex: \"(\\\\*)(\\\\S*)(\\\\*)\"\n        },\n        {\n            token : \"constant.numeric\", // hex\n            regex : \"0[xX][0-9a-fA-F]+(?:L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"\n        }, \n        {\n            token : \"constant.numeric\", // float\n            regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?(?:L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"\n        },\n        {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        },\n        {\n            token : \"string\",\n            regex : '\"(?=.)',\n            next  : \"qqstring\"\n        }\n    ],\n    \"qqstring\": [\n        {\n            token: \"constant.character.escape.lisp\",\n            regex: \"\\\\\\\\.\"\n        },\n        {\n            token : \"string\",\n            regex : '[^\"\\\\\\\\]+'\n        }, {\n            token : \"string\",\n            regex : \"\\\\\\\\$\",\n            next  : \"qqstring\"\n        }, {\n            token : \"string\",\n            regex : '\"|$',\n            next  : \"start\"\n        }\n    ]\n};\n\n};\n\noop.inherits(LispHighlightRules, TextHighlightRules);\n\nexports.LispHighlightRules = LispHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/livescript.js",
    "content": "define(function(require, exports, module){\n  var identifier, LiveScriptMode, keywordend, stringfill;\n  identifier = '(?![\\\\d\\\\s])[$\\\\w\\\\xAA-\\\\uFFDC](?:(?!\\\\s)[$\\\\w\\\\xAA-\\\\uFFDC]|-[A-Za-z])*';\n  exports.Mode = LiveScriptMode = (function(superclass){\n    var indenter, prototype = extend$((import$(LiveScriptMode, superclass).displayName = 'LiveScriptMode', LiveScriptMode), superclass).prototype, constructor = LiveScriptMode;\n    function LiveScriptMode(){\n      var that;\n      this.$tokenizer = new (require('../tokenizer')).Tokenizer(LiveScriptMode.Rules);\n      if (that = require('../mode/matching_brace_outdent')) {\n        this.$outdent = new that.MatchingBraceOutdent;\n      }\n      this.$id = \"ace/mode/livescript\";\n    }\n    indenter = RegExp('(?:[({[=:]|[-~]>|\\\\b(?:e(?:lse|xport)|d(?:o|efault)|t(?:ry|hen)|finally|import(?:\\\\s*all)?|const|var|let|new|catch(?:\\\\s*' + identifier + ')?))\\\\s*$');\n    prototype.getNextLineIndent = function(state, line, tab){\n      var indent, tokens;\n      indent = this.$getIndent(line);\n      tokens = this.$tokenizer.getLineTokens(line, state).tokens;\n      if (!(tokens.length && tokens[tokens.length - 1].type === 'comment')) {\n        if (state === 'start' && indenter.test(line)) {\n          indent += tab;\n        }\n      }\n      return indent;\n    };\n    prototype.lineCommentStart = \"#\";\n    prototype.blockComment = {start: \"###\", end: \"###\"};\n    prototype.checkOutdent = function(state, line, input){\n      var ref$;\n      return (ref$ = this.$outdent) != null ? ref$.checkOutdent(line, input) : void 8;\n    };\n    prototype.autoOutdent = function(state, doc, row){\n      var ref$;\n      return (ref$ = this.$outdent) != null ? ref$.autoOutdent(doc, row) : void 8;\n    };\n    return LiveScriptMode;\n  }(require('../mode/text').Mode));\n  keywordend = '(?![$\\\\w]|-[A-Za-z]|\\\\s*:(?![:=]))';\n  stringfill = {\n    defaultToken: 'string'\n  };\n  LiveScriptMode.Rules = {\n    start: [\n      {\n        token: 'keyword',\n        regex: '(?:t(?:h(?:is|row|en)|ry|ypeof!?)|c(?:on(?:tinue|st)|a(?:se|tch)|lass)|i(?:n(?:stanceof)?|mp(?:ort(?:\\\\s+all)?|lements)|[fs])|d(?:e(?:fault|lete|bugger)|o)|f(?:or(?:\\\\s+own)?|inally|unction)|s(?:uper|witch)|e(?:lse|x(?:tends|port)|val)|a(?:nd|rguments)|n(?:ew|ot)|un(?:less|til)|w(?:hile|ith)|o[fr]|return|break|let|var|loop)' + keywordend\n      }, {\n        token: 'constant.language',\n        regex: '(?:true|false|yes|no|on|off|null|void|undefined)' + keywordend\n      }, {\n        token: 'invalid.illegal',\n        regex: '(?:p(?:ackage|r(?:ivate|otected)|ublic)|i(?:mplements|nterface)|enum|static|yield)' + keywordend\n      }, {\n        token: 'language.support.class',\n        regex: '(?:R(?:e(?:gExp|ferenceError)|angeError)|S(?:tring|yntaxError)|E(?:rror|valError)|Array|Boolean|Date|Function|Number|Object|TypeError|URIError)' + keywordend\n      }, {\n        token: 'language.support.function',\n        regex: '(?:is(?:NaN|Finite)|parse(?:Int|Float)|Math|JSON|(?:en|de)codeURI(?:Component)?)' + keywordend\n      }, {\n        token: 'variable.language',\n        regex: '(?:t(?:hat|il|o)|f(?:rom|allthrough)|it|by|e)' + keywordend\n      }, {\n        token: 'identifier',\n        regex: identifier + '\\\\s*:(?![:=])'\n      }, {\n        token: 'variable',\n        regex: identifier\n      }, {\n        token: 'keyword.operator',\n        regex: '(?:\\\\.{3}|\\\\s+\\\\?)'\n      }, {\n        token: 'keyword.variable',\n        regex: '(?:@+|::|\\\\.\\\\.)',\n        next: 'key'\n      }, {\n        token: 'keyword.operator',\n        regex: '\\\\.\\\\s*',\n        next: 'key'\n      }, {\n        token: 'string',\n        regex: '\\\\\\\\\\\\S[^\\\\s,;)}\\\\]]*'\n      }, {\n        token: 'string.doc',\n        regex: '\\'\\'\\'',\n        next: 'qdoc'\n      }, {\n        token: 'string.doc',\n        regex: '\"\"\"',\n        next: 'qqdoc'\n      }, {\n        token: 'string',\n        regex: '\\'',\n        next: 'qstring'\n      }, {\n        token: 'string',\n        regex: '\"',\n        next: 'qqstring'\n      }, {\n        token: 'string',\n        regex: '`',\n        next: 'js'\n      }, {\n        token: 'string',\n        regex: '<\\\\[',\n        next: 'words'\n      }, {\n        token: 'string.regex',\n        regex: '//',\n        next: 'heregex'\n      }, {\n        token: 'comment.doc',\n        regex: '/\\\\*',\n        next: 'comment'\n      }, {\n        token: 'comment',\n        regex: '#.*'\n      }, {\n        token: 'string.regex',\n        regex: '\\\\/(?:[^[\\\\/\\\\n\\\\\\\\]*(?:(?:\\\\\\\\.|\\\\[[^\\\\]\\\\n\\\\\\\\]*(?:\\\\\\\\.[^\\\\]\\\\n\\\\\\\\]*)*\\\\])[^[\\\\/\\\\n\\\\\\\\]*)*)\\\\/[gimy$]{0,4}',\n        next: 'key'\n      }, {\n        token: 'constant.numeric',\n        regex: '(?:0x[\\\\da-fA-F][\\\\da-fA-F_]*|(?:[2-9]|[12]\\\\d|3[0-6])r[\\\\da-zA-Z][\\\\da-zA-Z_]*|(?:\\\\d[\\\\d_]*(?:\\\\.\\\\d[\\\\d_]*)?|\\\\.\\\\d[\\\\d_]*)(?:e[+-]?\\\\d[\\\\d_]*)?[\\\\w$]*)'\n      }, {\n        token: 'lparen',\n        regex: '[({[]'\n      }, {\n        token: 'rparen',\n        regex: '[)}\\\\]]',\n        next: 'key'\n      }, {\n        token: 'keyword.operator',\n        regex: '[\\\\^!|&%+\\\\-]+'\n      }, {\n        token: 'text',\n        regex: '\\\\s+'\n      }\n    ],\n    heregex: [\n      {\n        token: 'string.regex',\n        regex: '.*?//[gimy$?]{0,4}',\n        next: 'start'\n      }, {\n        token: 'string.regex',\n        regex: '\\\\s*#{'\n      }, {\n        token: 'comment.regex',\n        regex: '\\\\s+(?:#.*)?'\n      }, {\n        defaultToken: 'string.regex'\n      }\n    ],\n    key: [\n      {\n        token: 'keyword.operator',\n        regex: '[.?@!]+'\n      }, {\n        token: 'identifier',\n        regex: identifier,\n        next: 'start'\n      }, {\n        token: 'text',\n        regex: '',\n        next: 'start'\n      }\n    ],\n    comment: [\n      {\n        token: 'comment.doc',\n        regex: '.*?\\\\*/',\n        next: 'start'\n      }, {\n        defaultToken: 'comment.doc'\n      }\n    ],\n    qdoc: [\n      {\n        token: 'string',\n        regex: \".*?'''\",\n        next: 'key'\n      }, stringfill\n    ],\n    qqdoc: [\n      {\n        token: 'string',\n        regex: '.*?\"\"\"',\n        next: 'key'\n      }, stringfill\n    ],\n    qstring: [\n      {\n        token: 'string',\n        regex: '[^\\\\\\\\\\']*(?:\\\\\\\\.[^\\\\\\\\\\']*)*\\'',\n        next: 'key'\n      }, stringfill\n    ],\n    qqstring: [\n      {\n        token: 'string',\n        regex: '[^\\\\\\\\\"]*(?:\\\\\\\\.[^\\\\\\\\\"]*)*\"',\n        next: 'key'\n      }, stringfill\n    ],\n    js: [\n      {\n        token: 'string',\n        regex: '[^\\\\\\\\`]*(?:\\\\\\\\.[^\\\\\\\\`]*)*`',\n        next: 'key'\n      }, stringfill\n    ],\n    words: [\n      {\n        token: 'string',\n        regex: '.*?\\\\]>',\n        next: 'key'\n      }, stringfill\n    ]\n  };\nfunction extend$(sub, sup){\n  function fun(){} fun.prototype = (sub.superclass = sup).prototype;\n  (sub.prototype = new fun).constructor = sub;\n  if (typeof sup.extended == 'function') sup.extended(sub);\n  return sub;\n}\nfunction import$(obj, src){\n  var own = {}.hasOwnProperty;\n  for (var key in src) if (own.call(src, key)) obj[key] = src[key];\n  return obj;\n}\n});"
  },
  {
    "path": "lib/ace/mode/logiql.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar LogiQLHighlightRules = require(\"./logiql_highlight_rules\").LogiQLHighlightRules;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar Range = require(\"../range\").Range;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\n\nvar Mode = function() {\n    this.HighlightRules = LogiQLHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (/comment|string/.test(endState))  \n            return indent;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment.single\")\n            return indent;\n\n        var match = line.match();\n        if (/(-->|<--|<-|->|{)\\s*$/.test(line))\n            indent += tab;\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        if (this.$outdent.checkOutdent(line, input))\n            return true;\n\n        if (input !== \"\\n\" && input !== \"\\r\\n\")\n            return false;\n            \n        if (!/^\\s+/.test(line))\n            return false;\n\n        return true;\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        if (this.$outdent.autoOutdent(doc, row))\n            return;\n        var prevLine = doc.getLine(row);\n        var match = prevLine.match(/^\\s+/);\n        var column = prevLine.lastIndexOf(\".\") + 1;\n        if (!match || !row || !column) return 0;\n\n        var line = doc.getLine(row + 1);\n        var startRange = this.getMatching(doc, {row: row, column: column});\n        if (!startRange || startRange.start.row == row) return 0;\n\n        column = match[0].length;\n        var indent = this.$getIndent(doc.getLine(startRange.start.row));\n        doc.replace(new Range(row + 1, 0, row + 1, column), indent);\n    };\n\n    this.getMatching = function(session, row, column) {\n        if (row == undefined)\n            row = session.selection.lead;\n        if (typeof row == \"object\") {\n            column = row.column;\n            row = row.row;\n        }\n\n        var startToken = session.getTokenAt(row, column);\n        var KW_START = \"keyword.start\", KW_END = \"keyword.end\";\n        var tok;\n        if (!startToken)\n            return;\n        if (startToken.type == KW_START) {\n            var it = new TokenIterator(session, row, column);\n            it.step = it.stepForward;\n        } else if (startToken.type == KW_END) {\n            var it = new TokenIterator(session, row, column);\n            it.step = it.stepBackward;\n        } else\n            return;\n\n        while (tok = it.step()) {\n            if (tok.type == KW_START || tok.type == KW_END)\n                break;\n        }\n        if (!tok || tok.type == startToken.type)\n            return;\n\n        var col = it.getCurrentTokenColumn();\n        var row = it.getCurrentTokenRow();\n        return new Range(row, col, row, col + tok.value.length);\n    };\n    this.$id = \"ace/mode/logiql\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});"
  },
  {
    "path": "lib/ace/mode/logiql_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/* THIS FILE WAS AUTOGENERATED FROM tool\\LogicBlox.tmbundle\\Syntaxes\\LogicBlox.tmLanguage (UUID: 59bf5022-e261-453f-b1cb-9f9fa0712413) */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar LogiQLHighlightRules = function() {\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = { start: \n       [ { token: 'comment.block',\n           regex: '/\\\\*',\n           push: \n            [ { token: 'comment.block', regex: '\\\\*/', next: 'pop' },\n              { defaultToken: 'comment.block' } ]\n           //A block comment.\n            },\n         { token: 'comment.single',\n           regex: '//.*'\n           //A single line comment.\n            },\n         { token: 'constant.numeric',\n           regex: '\\\\d+(?:\\\\.\\\\d+)?(?:[eE][+-]?\\\\d+)?[fd]?'\n           //An integer constant.\n           //Or a Real number.\n            },\n         { token: 'string',\n           regex: '\"',\n           push: \n            [ { token: 'string', regex: '\"', next: 'pop' },\n              { defaultToken: 'string' } ]\n           //Strings\n            },\n         { token: 'constant.language',\n           regex: '\\\\b(true|false)\\\\b'\n           //Boolean values.\n            },\n         { token: 'entity.name.type.logicblox',\n           regex: '`[a-zA-Z_:]+(\\\\d|\\\\a)*\\\\b'\n           //LogicBlox Symbol\n            },\n         { token: 'keyword.start', regex: '->',  comment: 'Constraint' },\n         { token: 'keyword.start', regex: '-->', comment: 'Level 1 Constraint'},\n         { token: 'keyword.start', regex: '<-',  comment: 'Rule' },\n         { token: 'keyword.start', regex: '<--', comment: 'Level 1 Rule' },\n         { token: 'keyword.end',   regex: '\\\\.', comment: 'Terminator' },\n         { token: 'keyword.other', regex: '!',   comment: 'Negation' },\n         { token: 'keyword.other', regex: ',',   comment: 'Conjunction' },\n         { token: 'keyword.other', regex: ';',   comment: 'Disjunction' },\n         { token: 'keyword.operator', regex: '<=|>=|!=|<|>', comment: 'Equality'},\n         { token: 'keyword.other', regex: '@', comment: 'Equality' },\n         { token: 'keyword.operator', regex: '\\\\+|-|\\\\*|/', comment: 'Arithmetic operations'},\n         { token: 'keyword', regex: '::', comment: 'Colon colon' },\n         { token: 'support.function',\n           regex: '\\\\b(agg\\\\s*<<)',\n           push: \n            [ { include: '$self' },\n              { token: 'support.function',\n                regex: '>>',\n                next: 'pop' } ]\n            //Aggregations\n            },\n         { token: 'storage.modifier',\n           regex: '\\\\b(lang:[\\\\w:]*)'\n           //All the lang system predicates\n            },\n         { token: [ 'storage.type', 'text' ],\n           regex: '(export|sealed|clauses|block|alias|alias_all)(\\\\s*\\\\()(?=`)'\n           //Module keywords\n            },\n         { token: 'entity.name',\n           regex: '[a-zA-Z_][a-zA-Z_0-9:]*(@prev|@init|@final)?(?=(\\\\(|\\\\[))'\n           //A predicate name.\n            },\n         { token: 'variable.parameter',\n           regex: '([a-zA-Z][a-zA-Z_0-9]*|_)\\\\s*(?=(,|\\\\.|<-|->|\\\\)|\\\\]|=))'\n           //A variable to a functional predicate.\n            } ] };\n    \n    this.normalizeRules();\n};\n\noop.inherits(LogiQLHighlightRules, TextHighlightRules);\n\nexports.LogiQLHighlightRules = LogiQLHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/logiql_test.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\nif (typeof process !== \"undefined\") {\n    require(\"amd-loader\");\n}\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar EditSession = require(\"../edit_session\").EditSession;\nvar LogiQLMode = require(\"./logiql\").Mode;\nvar assert = require(\"../test/assertions\");\n\nmodule.exports = {\n    setUp : function() {    \n        this.mode = new LogiQLMode();\n    },\n\n    \"test: toggle comment lines should prepend '//' to each line\" : function() {\n        var session = new EditSession([\"    abc\", \"cde\", \"fg\"]);\n\n        this.mode.toggleCommentLines(\"start\", session, 0, 1);\n        assert.equal([\"//     abc\", \"// cde\", \"fg\"].join(\"\\n\"), session.toString());\n    },\n\n    \"test: auto indent after ->\" : function() {\n        assert.equal(\"  \", this.mode.getNextLineIndent(\"start\", \"parent(a, b) ->\", \"  \"));\n    },\n    \n    \"test: auto indent after <--\" : function() {\n        assert.equal(\"  \", this.mode.getNextLineIndent(\"start\", \"foo <--    \", \"  \"));\n    },\n\n    \"test: no auto indent in multi line comment\" : function() {\n        assert.equal(\"\", this.mode.getNextLineIndent(\"start\", \"/* -->\", \"  \"));\n        assert.equal(\"  \", this.mode.getNextLineIndent(\"start\", \"  /* ->\", \"    \"));\n        assert.equal(\"  \", this.mode.getNextLineIndent(\"comment.block\", \"  abcd\", \"  \"));\n    },\n\n    \"test: no auto indent after -> in single line comment\" : function() {\n        assert.equal(\"\", this.mode.getNextLineIndent(\"start\", \"//->\", \"  \"));\n        assert.equal(\"  \", this.mode.getNextLineIndent(\"start\", \"  //->\", \"  \"));\n    },\n\n    \"test: trigger outdent if line ends with .\" : function() {\n        assert.ok(this.mode.checkOutdent(\"start\", \"   \", \"\\n\"));\n        assert.ok(this.mode.checkOutdent(\"start\", \" a  \", \"\\r\\n\"));\n        assert.ok(!this.mode.checkOutdent(\"start\", \"\", \"}\"));\n        assert.ok(!this.mode.checkOutdent(\"start\", \"   \", \"a }\"));\n        assert.ok(!this.mode.checkOutdent(\"start\", \"   }\", \"}\"));\n    },\n\n    \"test: auto outdent should indent the line with the same indent as the line with the matching ->\" : function() {\n        var session = new EditSession([\"  bar (a, b) ->\", \"  foo(a)[1.2]\", \"    bla.\", \"    \"], new LogiQLMode());\n        this.mode.autoOutdent(\"start\", session, 2);\n        assert.equal(\"  \", session.getLine(3));\n    },\n\n    \"test: no auto outdent if no matching brace is found\" : function() {\n        var session = new EditSession([\"  bar (a, b) ->\", \"  foo(a)[1.2].\", \"    bla.\", \"    \"], new LogiQLMode());\n        this.mode.autoOutdent(\"start\", session, 2);\n        assert.equal(\"    \", session.getLine(3));\n    }\n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main) {\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n}\n"
  },
  {
    "path": "lib/ace/mode/lsl.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2013, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar Rules = require(\"./lsl_highlight_rules\").LSLHighlightRules;\nvar Outdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\nvar TextMode = require(\"./text\").Mode;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar oop = require(\"../lib/oop\");\n\nvar Mode = function() {\n    this.HighlightRules = Rules;\n    this.$outdent = new Outdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = [\"//\"];\n\n    this.blockComment = {\n        start: \"/*\",\n        end: \"*/\"\n    };\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type === \"comment.block.lsl\") {\n            return indent;\n        }\n\n        if (state === \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/lsl\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/lsl_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2013, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\noop.inherits(LSLHighlightRules, TextHighlightRules);\n\nfunction LSLHighlightRules() {\n    var keywordMapper = this.createKeywordMapper({\n        \"constant.language.float.lsl\" : \"DEG_TO_RAD|PI|PI_BY_TWO|RAD_TO_DEG|SQRT2|TWO_PI\",\n        \"constant.language.integer.lsl\": \"ACTIVE|AGENT|AGENT_ALWAYS_RUN|AGENT_ATTACHMENTS|AGENT_AUTOPILOT|AGENT_AWAY|AGENT_BUSY|AGENT_BY_LEGACY_NAME|AGENT_BY_USERNAME|AGENT_CROUCHING|AGENT_FLYING|AGENT_IN_AIR|AGENT_LIST_PARCEL|AGENT_LIST_PARCEL_OWNER|AGENT_LIST_REGION|AGENT_MOUSELOOK|AGENT_ON_OBJECT|AGENT_SCRIPTED|AGENT_SITTING|AGENT_TYPING|AGENT_WALKING|ALL_SIDES|ANIM_ON|ATTACH_AVATAR_CENTER|ATTACH_BACK|ATTACH_BELLY|ATTACH_CHEST|ATTACH_CHIN|ATTACH_HEAD|ATTACH_HUD_BOTTOM|ATTACH_HUD_BOTTOM_LEFT|ATTACH_HUD_BOTTOM_RIGHT|ATTACH_HUD_CENTER_1|ATTACH_HUD_CENTER_2|ATTACH_HUD_TOP_CENTER|ATTACH_HUD_TOP_LEFT|ATTACH_HUD_TOP_RIGHT|ATTACH_LEAR|ATTACH_LEFT_PEC|ATTACH_LEYE|ATTACH_LFOOT|ATTACH_LHAND|ATTACH_LHIP|ATTACH_LLARM|ATTACH_LLLEG|ATTACH_LSHOULDER|ATTACH_LUARM|ATTACH_LULEG|ATTACH_MOUTH|ATTACH_NECK|ATTACH_NOSE|ATTACH_PELVIS|ATTACH_REAR|ATTACH_REYE|ATTACH_RFOOT|ATTACH_RHAND|ATTACH_RHIP|ATTACH_RIGHT_PEC|ATTACH_RLARM|ATTACH_RLLEG|ATTACH_RSHOULDER|ATTACH_RUARM|ATTACH_RULEG|AVOID_CHARACTERS|AVOID_DYNAMIC_OBSTACLES|AVOID_NONE|CAMERA_ACTIVE|CAMERA_BEHINDNESS_ANGLE|CAMERA_BEHINDNESS_LAG|CAMERA_DISTANCE|CAMERA_FOCUS|CAMERA_FOCUS_LAG|CAMERA_FOCUS_LOCKED|CAMERA_FOCUS_OFFSET|CAMERA_FOCUS_THRESHOLD|CAMERA_PITCH|CAMERA_POSITION|CAMERA_POSITION_LAG|CAMERA_POSITION_LOCKED|CAMERA_POSITION_THRESHOLD|CHANGED_ALLOWED_DROP|CHANGED_COLOR|CHANGED_INVENTORY|CHANGED_LINK|CHANGED_MEDIA|CHANGED_OWNER|CHANGED_REGION|CHANGED_REGION_START|CHANGED_SCALE|CHANGED_SHAPE|CHANGED_TELEPORT|CHANGED_TEXTURE|CHARACTER_ACCOUNT_FOR_SKIPPED_FRAMES|CHARACTER_AVOIDANCE_MODE|CHARACTER_CMD_JUMP|CHARACTER_CMD_SMOOTH_STOP|CHARACTER_CMD_STOP|CHARACTER_DESIRED_SPEED|CHARACTER_DESIRED_TURN_SPEED|CHARACTER_LENGTH|CHARACTER_MAX_ACCEL|CHARACTER_MAX_DECEL|CHARACTER_MAX_SPEED|CHARACTER_MAX_TURN_RADIUS|CHARACTER_ORIENTATION|CHARACTER_RADIUS|CHARACTER_STAY_WITHIN_PARCEL|CHARACTER_TYPE|CHARACTER_TYPE_A|CHARACTER_TYPE_B|CHARACTER_TYPE_C|CHARACTER_TYPE_D|CHARACTER_TYPE_NONE|CLICK_ACTION_BUY|CLICK_ACTION_NONE|CLICK_ACTION_OPEN|CLICK_ACTION_OPEN_MEDIA|CLICK_ACTION_PAY|CLICK_ACTION_PLAY|CLICK_ACTION_SIT|CLICK_ACTION_TOUCH|CONTENT_TYPE_ATOM|CONTENT_TYPE_FORM|CONTENT_TYPE_HTML|CONTENT_TYPE_JSON|CONTENT_TYPE_LLSD|CONTENT_TYPE_RSS|CONTENT_TYPE_TEXT|CONTENT_TYPE_XHTML|CONTENT_TYPE_XML|CONTROL_BACK|CONTROL_DOWN|CONTROL_FWD|CONTROL_LBUTTON|CONTROL_LEFT|CONTROL_ML_LBUTTON|CONTROL_RIGHT|CONTROL_ROT_LEFT|CONTROL_ROT_RIGHT|CONTROL_UP|DATA_BORN|DATA_NAME|DATA_ONLINE|DATA_PAYINFO|DATA_SIM_POS|DATA_SIM_RATING|DATA_SIM_STATUS|DEBUG_CHANNEL|DENSITY|ERR_GENERIC|ERR_MALFORMED_PARAMS|ERR_PARCEL_PERMISSIONS|ERR_RUNTIME_PERMISSIONS|ERR_THROTTLED|ESTATE_ACCESS_ALLOWED_AGENT_ADD|ESTATE_ACCESS_ALLOWED_AGENT_REMOVE|ESTATE_ACCESS_ALLOWED_GROUP_ADD|ESTATE_ACCESS_ALLOWED_GROUP_REMOVE|ESTATE_ACCESS_BANNED_AGENT_ADD|ESTATE_ACCESS_BANNED_AGENT_REMOVE|FALSE|FORCE_DIRECT_PATH|FRICTION|GCNP_RADIUS|GCNP_STATIC|GRAVITY_MULTIPLIER|HORIZONTAL|HTTP_BODY_MAXLENGTH|HTTP_BODY_TRUNCATED|HTTP_CUSTOM_HEADER|HTTP_METHOD|HTTP_MIMETYPE|HTTP_PRAGMA_NO_CACHE|HTTP_VERBOSE_THROTTLE|HTTP_VERIFY_CERT|INVENTORY_ALL|INVENTORY_ANIMATION|INVENTORY_BODYPART|INVENTORY_CLOTHING|INVENTORY_GESTURE|INVENTORY_LANDMARK|INVENTORY_NONE|INVENTORY_NOTECARD|INVENTORY_OBJECT|INVENTORY_SCRIPT|INVENTORY_SOUND|INVENTORY_TEXTURE|JSON_APPEND|KFM_CMD_PAUSE|KFM_CMD_PLAY|KFM_CMD_SET_MODE|KFM_CMD_STOP|KFM_COMMAND|KFM_DATA|KFM_FORWARD|KFM_LOOP|KFM_MODE|KFM_PING_PONG|KFM_REVERSE|KFM_ROTATION|KFM_TRANSLATION|LAND_LEVEL|LAND_LOWER|LAND_NOISE|LAND_RAISE|LAND_REVERT|LAND_SMOOTH|LINK_ALL_CHILDREN|LINK_ALL_OTHERS|LINK_ROOT|LINK_SET|LINK_THIS|LIST_STAT_GEOMETRIC_MEAN|LIST_STAT_MAX|LIST_STAT_MEAN|LIST_STAT_MEDIAN|LIST_STAT_MIN|LIST_STAT_NUM_COUNT|LIST_STAT_RANGE|LIST_STAT_STD_DEV|LIST_STAT_SUM|LIST_STAT_SUM_SQUARES|LOOP|MASK_BASE|MASK_EVERYONE|MASK_GROUP|MASK_NEXT|MASK_OWNER|OBJECT_ATTACHED_POINT|OBJECT_BODY_SHAPE_TYPE|OBJECT_CHARACTER_TIME|OBJECT_CLICK_ACTION|OBJECT_CREATOR|OBJECT_DESC|OBJECT_GROUP|OBJECT_HOVER_HEIGHT|OBJECT_LAST_OWNER_ID|OBJECT_NAME|OBJECT_OWNER|OBJECT_PATHFINDING_TYPE|OBJECT_PHANTOM|OBJECT_PHYSICS|OBJECT_PHYSICS_COST|OBJECT_POS|OBJECT_PRIM_EQUIVALENCE|OBJECT_RENDER_WEIGHT|OBJECT_RETURN_PARCEL|OBJECT_RETURN_PARCEL_OWNER|OBJECT_RETURN_REGION|OBJECT_ROOT|OBJECT_ROT|OBJECT_RUNNING_SCRIPT_COUNT|OBJECT_SCRIPT_MEMORY|OBJECT_SCRIPT_TIME|OBJECT_SERVER_COST|OBJECT_STREAMING_COST|OBJECT_TEMP_ON_REZ|OBJECT_TOTAL_SCRIPT_COUNT|OBJECT_UNKNOWN_DETAIL|OBJECT_VELOCITY|OPT_AVATAR|OPT_CHARACTER|OPT_EXCLUSION_VOLUME|OPT_LEGACY_LINKSET|OPT_MATERIAL_VOLUME|OPT_OTHER|OPT_STATIC_OBSTACLE|OPT_WALKABLE|PARCEL_COUNT_GROUP|PARCEL_COUNT_OTHER|PARCEL_COUNT_OWNER|PARCEL_COUNT_SELECTED|PARCEL_COUNT_TEMP|PARCEL_COUNT_TOTAL|PARCEL_DETAILS_AREA|PARCEL_DETAILS_DESC|PARCEL_DETAILS_GROUP|PARCEL_DETAILS_ID|PARCEL_DETAILS_NAME|PARCEL_DETAILS_OWNER|PARCEL_DETAILS_SEE_AVATARS|PARCEL_FLAG_ALLOW_ALL_OBJECT_ENTRY|PARCEL_FLAG_ALLOW_CREATE_GROUP_OBJECTS|PARCEL_FLAG_ALLOW_CREATE_OBJECTS|PARCEL_FLAG_ALLOW_DAMAGE|PARCEL_FLAG_ALLOW_FLY|PARCEL_FLAG_ALLOW_GROUP_OBJECT_ENTRY|PARCEL_FLAG_ALLOW_GROUP_SCRIPTS|PARCEL_FLAG_ALLOW_LANDMARK|PARCEL_FLAG_ALLOW_SCRIPTS|PARCEL_FLAG_ALLOW_TERRAFORM|PARCEL_FLAG_LOCAL_SOUND_ONLY|PARCEL_FLAG_RESTRICT_PUSHOBJECT|PARCEL_FLAG_USE_ACCESS_GROUP|PARCEL_FLAG_USE_ACCESS_LIST|PARCEL_FLAG_USE_BAN_LIST|PARCEL_FLAG_USE_LAND_PASS_LIST|PARCEL_MEDIA_COMMAND_AGENT|PARCEL_MEDIA_COMMAND_AUTO_ALIGN|PARCEL_MEDIA_COMMAND_DESC|PARCEL_MEDIA_COMMAND_LOOP|PARCEL_MEDIA_COMMAND_LOOP_SET|PARCEL_MEDIA_COMMAND_PAUSE|PARCEL_MEDIA_COMMAND_PLAY|PARCEL_MEDIA_COMMAND_SIZE|PARCEL_MEDIA_COMMAND_STOP|PARCEL_MEDIA_COMMAND_TEXTURE|PARCEL_MEDIA_COMMAND_TIME|PARCEL_MEDIA_COMMAND_TYPE|PARCEL_MEDIA_COMMAND_UNLOAD|PARCEL_MEDIA_COMMAND_URL|PASS_ALWAYS|PASS_IF_NOT_HANDLED|PASS_NEVER|PASSIVE|PATROL_PAUSE_AT_WAYPOINTS|PAYMENT_INFO_ON_FILE|PAYMENT_INFO_USED|PAY_DEFAULT|PAY_HIDE|PERMISSION_ATTACH|PERMISSION_CHANGE_LINKS|PERMISSION_CONTROL_CAMERA|PERMISSION_DEBIT|PERMISSION_OVERRIDE_ANIMATIONS|PERMISSION_RETURN_OBJECTS|PERMISSION_SILENT_ESTATE_MANAGEMENT|PERMISSION_TAKE_CONTROLS|PERMISSION_TELEPORT|PERMISSION_TRACK_CAMERA|PERMISSION_TRIGGER_ANIMATION|PERM_ALL|PERM_COPY|PERM_MODIFY|PERM_MOVE|PERM_TRANSFER|PING_PONG|PRIM_ALPHA_MODE|PRIM_ALPHA_MODE_BLEND|PRIM_ALPHA_MODE_EMISSIVE|PRIM_ALPHA_MODE_MASK|PRIM_ALPHA_MODE_NONE|PRIM_BUMP_BARK|PRIM_BUMP_BLOBS|PRIM_BUMP_BRICKS|PRIM_BUMP_BRIGHT|PRIM_BUMP_CHECKER|PRIM_BUMP_CONCRETE|PRIM_BUMP_DARK|PRIM_BUMP_DISKS|PRIM_BUMP_GRAVEL|PRIM_BUMP_LARGETILE|PRIM_BUMP_NONE|PRIM_BUMP_SHINY|PRIM_BUMP_SIDING|PRIM_BUMP_STONE|PRIM_BUMP_STUCCO|PRIM_BUMP_SUCTION|PRIM_BUMP_TILE|PRIM_BUMP_WEAVE|PRIM_BUMP_WOOD|PRIM_COLOR|PRIM_DESC|PRIM_FLEXIBLE|PRIM_FULLBRIGHT|PRIM_GLOW|PRIM_HOLE_CIRCLE|PRIM_HOLE_DEFAULT|PRIM_HOLE_SQUARE|PRIM_HOLE_TRIANGLE|PRIM_LINK_TARGET|PRIM_MATERIAL|PRIM_MATERIAL_FLESH|PRIM_MATERIAL_GLASS|PRIM_MATERIAL_METAL|PRIM_MATERIAL_PLASTIC|PRIM_MATERIAL_RUBBER|PRIM_MATERIAL_STONE|PRIM_MATERIAL_WOOD|PRIM_MEDIA_ALT_IMAGE_ENABLE|PRIM_MEDIA_AUTO_LOOP|PRIM_MEDIA_AUTO_PLAY|PRIM_MEDIA_AUTO_SCALE|PRIM_MEDIA_AUTO_ZOOM|PRIM_MEDIA_CONTROLS|PRIM_MEDIA_CONTROLS_MINI|PRIM_MEDIA_CONTROLS_STANDARD|PRIM_MEDIA_CURRENT_URL|PRIM_MEDIA_FIRST_CLICK_INTERACT|PRIM_MEDIA_HEIGHT_PIXELS|PRIM_MEDIA_HOME_URL|PRIM_MEDIA_MAX_HEIGHT_PIXELS|PRIM_MEDIA_MAX_URL_LENGTH|PRIM_MEDIA_MAX_WHITELIST_COUNT|PRIM_MEDIA_MAX_WHITELIST_SIZE|PRIM_MEDIA_MAX_WIDTH_PIXELS|PRIM_MEDIA_PARAM_MAX|PRIM_MEDIA_PERMS_CONTROL|PRIM_MEDIA_PERMS_INTERACT|PRIM_MEDIA_PERM_ANYONE|PRIM_MEDIA_PERM_GROUP|PRIM_MEDIA_PERM_NONE|PRIM_MEDIA_PERM_OWNER|PRIM_MEDIA_WHITELIST|PRIM_MEDIA_WHITELIST_ENABLE|PRIM_MEDIA_WIDTH_PIXELS|PRIM_NAME|PRIM_NORMAL|PRIM_OMEGA|PRIM_PHANTOM|PRIM_PHYSICS|PRIM_PHYSICS_SHAPE_CONVEX|PRIM_PHYSICS_SHAPE_NONE|PRIM_PHYSICS_SHAPE_PRIM|PRIM_PHYSICS_SHAPE_TYPE|PRIM_POINT_LIGHT|PRIM_POSITION|PRIM_POS_LOCAL|PRIM_ROTATION|PRIM_ROT_LOCAL|PRIM_SCULPT_FLAG_INVERT|PRIM_SCULPT_FLAG_MIRROR|PRIM_SCULPT_TYPE_CYLINDER|PRIM_SCULPT_TYPE_MASK|PRIM_SCULPT_TYPE_PLANE|PRIM_SCULPT_TYPE_SPHERE|PRIM_SCULPT_TYPE_TORUS|PRIM_SHINY_HIGH|PRIM_SHINY_LOW|PRIM_SHINY_MEDIUM|PRIM_SHINY_NONE|PRIM_SIZE|PRIM_SLICE|PRIM_SPECULAR|PRIM_TEMP_ON_REZ|PRIM_TEXGEN|PRIM_TEXGEN_DEFAULT|PRIM_TEXGEN_PLANAR|PRIM_TEXT|PRIM_TEXTURE|PRIM_TYPE|PRIM_TYPE_BOX|PRIM_TYPE_CYLINDER|PRIM_TYPE_PRISM|PRIM_TYPE_RING|PRIM_TYPE_SCULPT|PRIM_TYPE_SPHERE|PRIM_TYPE_TORUS|PRIM_TYPE_TUBE|PROFILE_NONE|PROFILE_SCRIPT_MEMORY|PSYS_PART_BF_DEST_COLOR|PSYS_PART_BF_ONE|PSYS_PART_BF_ONE_MINUS_DEST_COLOR|PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA|PSYS_PART_BF_ONE_MINUS_SOURCE_COLOR|PSYS_PART_BF_SOURCE_ALPHA|PSYS_PART_BF_SOURCE_COLOR|PSYS_PART_BF_ZERO|PSYS_PART_BLEND_FUNC_DEST|PSYS_PART_BLEND_FUNC_SOURCE|PSYS_PART_BOUNCE_MASK|PSYS_PART_EMISSIVE_MASK|PSYS_PART_END_ALPHA|PSYS_PART_END_COLOR|PSYS_PART_END_GLOW|PSYS_PART_END_SCALE|PSYS_PART_FLAGS|PSYS_PART_FOLLOW_SRC_MASK|PSYS_PART_FOLLOW_VELOCITY_MASK|PSYS_PART_INTERP_COLOR_MASK|PSYS_PART_INTERP_SCALE_MASK|PSYS_PART_MAX_AGE|PSYS_PART_RIBBON_MASK|PSYS_PART_START_ALPHA|PSYS_PART_START_COLOR|PSYS_PART_START_GLOW|PSYS_PART_START_SCALE|PSYS_PART_TARGET_LINEAR_MASK|PSYS_PART_TARGET_POS_MASK|PSYS_PART_WIND_MASK|PSYS_SRC_ACCEL|PSYS_SRC_ANGLE_BEGIN|PSYS_SRC_ANGLE_END|PSYS_SRC_BURST_PART_COUNT|PSYS_SRC_BURST_RADIUS|PSYS_SRC_BURST_RATE|PSYS_SRC_BURST_SPEED_MAX|PSYS_SRC_BURST_SPEED_MIN|PSYS_SRC_MAX_AGE|PSYS_SRC_OMEGA|PSYS_SRC_PATTERN|PSYS_SRC_PATTERN_ANGLE|PSYS_SRC_PATTERN_ANGLE_CONE|PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY|PSYS_SRC_PATTERN_DROP|PSYS_SRC_PATTERN_EXPLODE|PSYS_SRC_TARGET_KEY|PSYS_SRC_TEXTURE|PUBLIC_CHANNEL|PURSUIT_FUZZ_FACTOR|PURSUIT_GOAL_TOLERANCE|PURSUIT_INTERCEPT|PURSUIT_OFFSET|PU_EVADE_HIDDEN|PU_EVADE_SPOTTED|PU_FAILURE_DYNAMIC_PATHFINDING_DISABLED|PU_FAILURE_INVALID_GOAL|PU_FAILURE_INVALID_START|PU_FAILURE_NO_NAVMESH|PU_FAILURE_NO_VALID_DESTINATION|PU_FAILURE_OTHER|PU_FAILURE_PARCEL_UNREACHABLE|PU_FAILURE_TARGET_GONE|PU_FAILURE_UNREACHABLE|PU_GOAL_REACHED|PU_SLOWDOWN_DISTANCE_REACHED|RCERR_CAST_TIME_EXCEEDED|RCERR_SIM_PERF_LOW|RCERR_UNKNOWN|RC_DATA_FLAGS|RC_DETECT_PHANTOM|RC_GET_LINK_NUM|RC_GET_NORMAL|RC_GET_ROOT_KEY|RC_MAX_HITS|RC_REJECT_AGENTS|RC_REJECT_LAND|RC_REJECT_NONPHYSICAL|RC_REJECT_PHYSICAL|RC_REJECT_TYPES|REGION_FLAG_ALLOW_DAMAGE|REGION_FLAG_ALLOW_DIRECT_TELEPORT|REGION_FLAG_BLOCK_FLY|REGION_FLAG_BLOCK_TERRAFORM|REGION_FLAG_DISABLE_COLLISIONS|REGION_FLAG_DISABLE_PHYSICS|REGION_FLAG_FIXED_SUN|REGION_FLAG_RESTRICT_PUSHOBJECT|REGION_FLAG_SANDBOX|REMOTE_DATA_CHANNEL|REMOTE_DATA_REPLY|REMOTE_DATA_REQUEST|REQUIRE_LINE_OF_SIGHT|RESTITUTION|REVERSE|ROTATE|SCALE|SCRIPTED|SIM_STAT_PCT_CHARS_STEPPED|SMOOTH|STATUS_BLOCK_GRAB|STATUS_BLOCK_GRAB_OBJECT|STATUS_BOUNDS_ERROR|STATUS_CAST_SHADOWS|STATUS_DIE_AT_EDGE|STATUS_INTERNAL_ERROR|STATUS_MALFORMED_PARAMS|STATUS_NOT_FOUND|STATUS_NOT_SUPPORTED|STATUS_OK|STATUS_PHANTOM|STATUS_PHYSICS|STATUS_RETURN_AT_EDGE|STATUS_ROTATE_X|STATUS_ROTATE_Y|STATUS_ROTATE_Z|STATUS_SANDBOX|STATUS_TYPE_MISMATCH|STATUS_WHITELIST_FAILED|STRING_TRIM|STRING_TRIM_HEAD|STRING_TRIM_TAIL|TOUCH_INVALID_FACE|TRAVERSAL_TYPE|TRAVERSAL_TYPE_FAST|TRAVERSAL_TYPE_NONE|TRAVERSAL_TYPE_SLOW|TRUE|TYPE_FLOAT|TYPE_INTEGER|TYPE_INVALID|TYPE_KEY|TYPE_ROTATION|TYPE_STRING|TYPE_VECTOR|VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY|VEHICLE_ANGULAR_DEFLECTION_TIMESCALE|VEHICLE_ANGULAR_FRICTION_TIMESCALE|VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE|VEHICLE_ANGULAR_MOTOR_DIRECTION|VEHICLE_ANGULAR_MOTOR_TIMESCALE|VEHICLE_BANKING_EFFICIENCY|VEHICLE_BANKING_MIX|VEHICLE_BANKING_TIMESCALE|VEHICLE_BUOYANCY|VEHICLE_FLAG_CAMERA_DECOUPLED|VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT|VEHICLE_FLAG_HOVER_TERRAIN_ONLY|VEHICLE_FLAG_HOVER_UP_ONLY|VEHICLE_FLAG_HOVER_WATER_ONLY|VEHICLE_FLAG_LIMIT_MOTOR_UP|VEHICLE_FLAG_LIMIT_ROLL_ONLY|VEHICLE_FLAG_MOUSELOOK_BANK|VEHICLE_FLAG_MOUSELOOK_STEER|VEHICLE_FLAG_NO_DEFLECTION_UP|VEHICLE_HOVER_EFFICIENCY|VEHICLE_HOVER_HEIGHT|VEHICLE_HOVER_TIMESCALE|VEHICLE_LINEAR_DEFLECTION_EFFICIENCY|VEHICLE_LINEAR_DEFLECTION_TIMESCALE|VEHICLE_LINEAR_FRICTION_TIMESCALE|VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE|VEHICLE_LINEAR_MOTOR_DIRECTION|VEHICLE_LINEAR_MOTOR_OFFSET|VEHICLE_LINEAR_MOTOR_TIMESCALE|VEHICLE_REFERENCE_FRAME|VEHICLE_TYPE_AIRPLANE|VEHICLE_TYPE_BALLOON|VEHICLE_TYPE_BOAT|VEHICLE_TYPE_CAR|VEHICLE_TYPE_NONE|VEHICLE_TYPE_SLED|VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY|VEHICLE_VERTICAL_ATTRACTION_TIMESCALE|VERTICAL|WANDER_PAUSE_AT_WAYPOINTS|XP_ERROR_EXPERIENCES_DISABLED|XP_ERROR_EXPERIENCE_DISABLED|XP_ERROR_EXPERIENCE_SUSPENDED|XP_ERROR_INVALID_EXPERIENCE|XP_ERROR_INVALID_PARAMETERS|XP_ERROR_KEY_NOT_FOUND|XP_ERROR_MATURITY_EXCEEDED|XP_ERROR_NONE|XP_ERROR_NOT_FOUND|XP_ERROR_NOT_PERMITTED|XP_ERROR_NO_EXPERIENCE|XP_ERROR_QUOTA_EXCEEDED|XP_ERROR_RETRY_UPDATE|XP_ERROR_STORAGE_EXCEPTION|XP_ERROR_STORE_DISABLED|XP_ERROR_THROTTLED|XP_ERROR_UNKNOWN_ERROR\",\n        \"constant.language.integer.boolean.lsl\" : \"FALSE|TRUE\",\n        \"constant.language.quaternion.lsl\" : \"ZERO_ROTATION\",\n        \"constant.language.string.lsl\" : \"EOF|JSON_ARRAY|JSON_DELETE|JSON_FALSE|JSON_INVALID|JSON_NULL|JSON_NUMBER|JSON_OBJECT|JSON_STRING|JSON_TRUE|NULL_KEY|TEXTURE_BLANK|TEXTURE_DEFAULT|TEXTURE_MEDIA|TEXTURE_PLYWOOD|TEXTURE_TRANSPARENT|URL_REQUEST_DENIED|URL_REQUEST_GRANTED\",\n        \"constant.language.vector.lsl\" : \"TOUCH_INVALID_TEXCOORD|TOUCH_INVALID_VECTOR|ZERO_VECTOR\",\n        \"invalid.broken.lsl\": \"LAND_LARGE_BRUSH|LAND_MEDIUM_BRUSH|LAND_SMALL_BRUSH\",\n        \"invalid.deprecated.lsl\" : \"ATTACH_LPEC|ATTACH_RPEC|DATA_RATING|OBJECT_ATTACHMENT_GEOMETRY_BYTES|OBJECT_ATTACHMENT_SURFACE_AREA|PRIM_CAST_SHADOWS|PRIM_MATERIAL_LIGHT|PRIM_TYPE_LEGACY|PSYS_SRC_INNERANGLE|PSYS_SRC_OUTERANGLE|VEHICLE_FLAG_NO_FLY_UP|llClearExperiencePermissions|llCloud|llGetExperienceList|llMakeExplosion|llMakeFire|llMakeFountain|llMakeSmoke|llRemoteDataSetRegion|llSound|llSoundPreload|llXorBase64Strings|llXorBase64StringsCorrect\",\n        \"invalid.illegal.lsl\": \"event\",\n        \"invalid.unimplemented.lsl\": \"CHARACTER_MAX_ANGULAR_ACCEL|CHARACTER_MAX_ANGULAR_SPEED|CHARACTER_TURN_SPEED_MULTIPLIER|PERMISSION_CHANGE_JOINTS|PERMISSION_CHANGE_PERMISSIONS|PERMISSION_EXPERIENCE|PERMISSION_RELEASE_OWNERSHIP|PERMISSION_REMAP_CONTROLS|PRIM_PHYSICS_MATERIAL|PSYS_SRC_OBJ_REL_MASK|llCollisionSprite|llPointAt|llRefreshPrimURL|llReleaseCamera|llRemoteLoadScript|llSetPrimURL|llStopPointAt|llTakeCamera\",\n        \"reserved.godmode.lsl\": \"llGodLikeRezObject|llSetInventoryPermMask|llSetObjectPermMask\",\n        \"reserved.log.lsl\" : \"print\",\n        \"keyword.control.lsl\" : \"do|else|for|if|jump|return|while\",\n        \"storage.type.lsl\" : \"float|integer|key|list|quaternion|rotation|string|vector\",\n        \"support.function.lsl\": \"llAbs|llAcos|llAddToLandBanList|llAddToLandPassList|llAdjustSoundVolume|llAgentInExperience|llAllowInventoryDrop|llAngleBetween|llApplyImpulse|llApplyRotationalImpulse|llAsin|llAtan2|llAttachToAvatar|llAttachToAvatarTemp|llAvatarOnLinkSitTarget|llAvatarOnSitTarget|llAxes2Rot|llAxisAngle2Rot|llBase64ToInteger|llBase64ToString|llBreakAllLinks|llBreakLink|llCSV2List|llCastRay|llCeil|llClearCameraParams|llClearLinkMedia|llClearPrimMedia|llCloseRemoteDataChannel|llCollisionFilter|llCollisionSound|llCos|llCreateCharacter|llCreateKeyValue|llCreateLink|llDataSizeKeyValue|llDeleteCharacter|llDeleteKeyValue|llDeleteSubList|llDeleteSubString|llDetachFromAvatar|llDetectedGrab|llDetectedGroup|llDetectedKey|llDetectedLinkNumber|llDetectedName|llDetectedOwner|llDetectedPos|llDetectedRot|llDetectedTouchBinormal|llDetectedTouchFace|llDetectedTouchNormal|llDetectedTouchPos|llDetectedTouchST|llDetectedTouchUV|llDetectedType|llDetectedVel|llDialog|llDie|llDumpList2String|llEdgeOfWorld|llEjectFromLand|llEmail|llEscapeURL|llEuler2Rot|llEvade|llExecCharacterCmd|llFabs|llFleeFrom|llFloor|llForceMouselook|llFrand|llGenerateKey|llGetAccel|llGetAgentInfo|llGetAgentLanguage|llGetAgentList|llGetAgentSize|llGetAlpha|llGetAndResetTime|llGetAnimation|llGetAnimationList|llGetAnimationOverride|llGetAttached|llGetAttachedList|llGetBoundingBox|llGetCameraPos|llGetCameraRot|llGetCenterOfMass|llGetClosestNavPoint|llGetColor|llGetCreator|llGetDate|llGetDisplayName|llGetEnergy|llGetEnv|llGetExperienceDetails|llGetExperienceErrorMessage|llGetForce|llGetFreeMemory|llGetFreeURLs|llGetGMTclock|llGetGeometricCenter|llGetHTTPHeader|llGetInventoryCreator|llGetInventoryKey|llGetInventoryName|llGetInventoryNumber|llGetInventoryPermMask|llGetInventoryType|llGetKey|llGetLandOwnerAt|llGetLinkKey|llGetLinkMedia|llGetLinkName|llGetLinkNumber|llGetLinkNumberOfSides|llGetLinkPrimitiveParams|llGetListEntryType|llGetListLength|llGetLocalPos|llGetLocalRot|llGetMass|llGetMassMKS|llGetMaxScaleFactor|llGetMemoryLimit|llGetMinScaleFactor|llGetNextEmail|llGetNotecardLine|llGetNumberOfNotecardLines|llGetNumberOfPrims|llGetNumberOfSides|llGetObjectDesc|llGetObjectDetails|llGetObjectMass|llGetObjectName|llGetObjectPermMask|llGetObjectPrimCount|llGetOmega|llGetOwner|llGetOwnerKey|llGetParcelDetails|llGetParcelFlags|llGetParcelMaxPrims|llGetParcelMusicURL|llGetParcelPrimCount|llGetParcelPrimOwners|llGetPermissions|llGetPermissionsKey|llGetPhysicsMaterial|llGetPos|llGetPrimMediaParams|llGetPrimitiveParams|llGetRegionAgentCount|llGetRegionCorner|llGetRegionFPS|llGetRegionFlags|llGetRegionName|llGetRegionTimeDilation|llGetRootPosition|llGetRootRotation|llGetRot|llGetSPMaxMemory|llGetScale|llGetScriptName|llGetScriptState|llGetSimStats|llGetSimulatorHostname|llGetStartParameter|llGetStaticPath|llGetStatus|llGetSubString|llGetSunDirection|llGetTexture|llGetTextureOffset|llGetTextureRot|llGetTextureScale|llGetTime|llGetTimeOfDay|llGetTimestamp|llGetTorque|llGetUnixTime|llGetUsedMemory|llGetUsername|llGetVel|llGetWallclock|llGiveInventory|llGiveInventoryList|llGiveMoney|llGround|llGroundContour|llGroundNormal|llGroundRepel|llGroundSlope|llHTTPRequest|llHTTPResponse|llInsertString|llInstantMessage|llIntegerToBase64|llJson2List|llJsonGetValue|llJsonSetValue|llJsonValueType|llKey2Name|llKeyCountKeyValue|llKeysKeyValue|llLinkParticleSystem|llLinkSitTarget|llList2CSV|llList2Float|llList2Integer|llList2Json|llList2Key|llList2List|llList2ListStrided|llList2Rot|llList2String|llList2Vector|llListFindList|llListInsertList|llListRandomize|llListReplaceList|llListSort|llListStatistics|llListen|llListenControl|llListenRemove|llLoadURL|llLog|llLog10|llLookAt|llLoopSound|llLoopSoundMaster|llLoopSoundSlave|llMD5String|llManageEstateAccess|llMapDestination|llMessageLinked|llMinEventDelay|llModPow|llModifyLand|llMoveToTarget|llNavigateTo|llOffsetTexture|llOpenRemoteDataChannel|llOverMyLand|llOwnerSay|llParcelMediaCommandList|llParcelMediaQuery|llParseString2List|llParseStringKeepNulls|llParticleSystem|llPassCollisions|llPassTouches|llPatrolPoints|llPlaySound|llPlaySoundSlave|llPow|llPreloadSound|llPursue|llPushObject|llReadKeyValue|llRegionSay|llRegionSayTo|llReleaseControls|llReleaseURL|llRemoteDataReply|llRemoteLoadScriptPin|llRemoveFromLandBanList|llRemoveFromLandPassList|llRemoveInventory|llRemoveVehicleFlags|llRequestAgentData|llRequestDisplayName|llRequestExperiencePermissions|llRequestInventoryData|llRequestPermissions|llRequestSecureURL|llRequestSimulatorData|llRequestURL|llRequestUsername|llResetAnimationOverride|llResetLandBanList|llResetLandPassList|llResetOtherScript|llResetScript|llResetTime|llReturnObjectsByID|llReturnObjectsByOwner|llRezAtRoot|llRezObject|llRot2Angle|llRot2Axis|llRot2Euler|llRot2Fwd|llRot2Left|llRot2Up|llRotBetween|llRotLookAt|llRotTarget|llRotTargetRemove|llRotateTexture|llRound|llSHA1String|llSameGroup|llSay|llScaleByFactor|llScaleTexture|llScriptDanger|llScriptProfiler|llSendRemoteData|llSensor|llSensorRemove|llSensorRepeat|llSetAlpha|llSetAngularVelocity|llSetAnimationOverride|llSetBuoyancy|llSetCameraAtOffset|llSetCameraEyeOffset|llSetCameraParams|llSetClickAction|llSetColor|llSetContentType|llSetDamage|llSetForce|llSetForceAndTorque|llSetHoverHeight|llSetKeyframedMotion|llSetLinkAlpha|llSetLinkCamera|llSetLinkColor|llSetLinkMedia|llSetLinkPrimitiveParams|llSetLinkPrimitiveParamsFast|llSetLinkTexture|llSetLinkTextureAnim|llSetLocalRot|llSetMemoryLimit|llSetObjectDesc|llSetObjectName|llSetParcelMusicURL|llSetPayPrice|llSetPhysicsMaterial|llSetPos|llSetPrimMediaParams|llSetPrimitiveParams|llSetRegionPos|llSetRemoteScriptAccessPin|llSetRot|llSetScale|llSetScriptState|llSetSitText|llSetSoundQueueing|llSetSoundRadius|llSetStatus|llSetText|llSetTexture|llSetTextureAnim|llSetTimerEvent|llSetTorque|llSetTouchText|llSetVehicleFlags|llSetVehicleFloatParam|llSetVehicleRotationParam|llSetVehicleType|llSetVehicleVectorParam|llSetVelocity|llShout|llSin|llSitTarget|llSleep|llSqrt|llStartAnimation|llStopAnimation|llStopHover|llStopLookAt|llStopMoveToTarget|llStopSound|llStringLength|llStringToBase64|llStringTrim|llSubStringIndex|llTakeControls|llTan|llTarget|llTargetOmega|llTargetRemove|llTeleportAgent|llTeleportAgentGlobalCoords|llTeleportAgentHome|llTextBox|llToLower|llToUpper|llTransferLindenDollars|llTriggerSound|llTriggerSoundLimited|llUnSit|llUnescapeURL|llUpdateCharacter|llUpdateKeyValue|llVecDist|llVecMag|llVecNorm|llVolumeDetect|llWanderWithin|llWater|llWhisper|llWind|llXorBase64\",\n        \"support.function.event.lsl\" : \"at_rot_target|at_target|attach|changed|collision|collision_end|collision_start|control|dataserver|email|experience_permissions|experience_permissions_denied|http_request|http_response|land_collision|land_collision_end|land_collision_start|link_message|listen|money|moving_end|moving_start|no_sensor|not_at_rot_target|not_at_target|object_rez|on_rez|path_update|remote_data|run_time_permissions|sensor|state_entry|state_exit|timer|touch|touch_end|touch_start|transaction_result\"\n        }, \"identifier\");\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment.line.double-slash.lsl\",\n                regex : \"\\\\/\\\\/.*$\"\n            }, {\n                token : \"comment.block.begin.lsl\",\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string.quoted.double.lsl\",\n                start : '\"',\n                end : '\"',\n                next : [{\n                    token : \"constant.character.escape.lsl\",\n                    regex : /\\\\[tn\"\\\\]/\n                }]\n            }, {\n                token : \"constant.numeric.lsl\",\n                regex : \"(0[xX][0-9a-fA-F]+|[+-]?[0-9]+(?:(?:\\\\.[0-9]*)?(?:[eE][+-]?[0-9]+)?)?)\\\\b\"\n            }, {\n                token : \"entity.name.state.lsl\",\n                regex : \"\\\\b((state)\\\\s+[A-Za-z_]\\\\w*|default)\\\\b\"\n            }, {\n                token : keywordMapper,\n                regex : \"\\\\b[a-zA-Z_][a-zA-Z0-9_]*\\\\b\"\n            }, {\n                token : \"support.function.user-defined.lsl\",\n                regex : /\\b([a-zA-Z_]\\w*)(?=\\(.*?\\))/\n            }, {\n                token : \"keyword.operator.lsl\",\n                regex : \"\\\\+\\\\+|\\\\-\\\\-|<<|>>|&&?|\\\\|\\\\|?|\\\\^|~|[!%<>=*+\\\\-\\\\/]=?\"\n            }, {\n                token : \"invalid.illegal.keyword.operator.lsl\",\n                regex : \":=?\"\n            }, {\n                token : \"punctuation.operator.lsl\",\n                regex : \"\\\\,|\\\\;\"\n            }, {\n                token : \"paren.lparen.lsl\",\n                regex : \"[\\\\[\\\\(\\\\{]\"\n            }, {\n                token : \"paren.rparen.lsl\",\n                regex : \"[\\\\]\\\\)\\\\}]\"\n            }, {\n                token : \"text.lsl\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment.block.end.lsl\",\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment.block.lsl\"\n            }\n        ]\n    };\n    this.normalizeRules();\n}\n\nexports.LSLHighlightRules = LSLHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/lua/luaparse.js",
    "content": "define(function(require, exports, module) {\n/*global exports:true module:true require:true define:true global:true */\n\n(function (root, name, factory) {\n   factory(exports)\n}(this, 'luaparse', function (exports) {\n  'use strict';\n\n  exports.version = '0.1.4';\n\n  var input, options, length;\n\n  // Options can be set either globally on the parser object through\n  // defaultOptions, or during the parse call.\n  var defaultOptions = exports.defaultOptions = {\n    // Explicitly tell the parser when the input ends.\n      wait: false\n    // Store comments as an array in the chunk object.\n    , comments: true\n    // Track identifier scopes by adding an isLocal attribute to each\n    // identifier-node.\n    , scope: false\n    // Store location information on each syntax node as\n    // `loc: { start: { line, column }, end: { line, column } }`.\n    , locations: false\n    // Store the start and end character locations on each syntax node as\n    // `range: [start, end]`.\n    , ranges: false\n  };\n\n  // The available tokens expressed as enum flags so they can be checked with\n  // bitwise operations.\n\n  var EOF = 1, StringLiteral = 2, Keyword = 4, Identifier = 8\n    , NumericLiteral = 16, Punctuator = 32, BooleanLiteral = 64\n    , NilLiteral = 128, VarargLiteral = 256;\n\n  exports.tokenTypes = { EOF: EOF, StringLiteral: StringLiteral\n    , Keyword: Keyword, Identifier: Identifier, NumericLiteral: NumericLiteral\n    , Punctuator: Punctuator, BooleanLiteral: BooleanLiteral\n    , NilLiteral: NilLiteral, VarargLiteral: VarargLiteral\n  };\n\n  // As this parser is a bit different from luas own, the error messages\n  // will be different in some situations.\n\n  var errors = exports.errors = {\n      unexpected: 'Unexpected %1 \\'%2\\' near \\'%3\\''\n    , expected: '\\'%1\\' expected near \\'%2\\''\n    , expectedToken: '%1 expected near \\'%2\\''\n    , unfinishedString: 'unfinished string near \\'%1\\''\n    , malformedNumber: 'malformed number near \\'%1\\''\n  };\n\n  // ### Abstract Syntax Tree\n  //\n  // The default AST structure is inspired by the Mozilla Parser API but can\n  // easily be customized by overriding these functions.\n\n  var ast = exports.ast = {\n      labelStatement: function(label) {\n      return {\n          type: 'LabelStatement'\n        , label: label\n      };\n    }\n\n    , breakStatement: function() {\n      return {\n          type: 'BreakStatement'\n      };\n    }\n\n    , gotoStatement: function(label) {\n      return {\n          type: 'GotoStatement'\n        , label: label\n      };\n    }\n\n    , returnStatement: function(args) {\n      return {\n          type: 'ReturnStatement'\n        , 'arguments': args\n      };\n    }\n\n    , ifStatement: function(clauses) {\n      return {\n          type: 'IfStatement'\n        , clauses: clauses\n      };\n    }\n    , ifClause: function(condition, body) {\n      return {\n          type: 'IfClause'\n        , condition: condition\n        , body: body\n      };\n    }\n    , elseifClause: function(condition, body) {\n      return {\n          type: 'ElseifClause'\n        , condition: condition\n        , body: body\n      };\n    }\n    , elseClause: function(body) {\n      return {\n          type: 'ElseClause'\n        , body: body\n      };\n    }\n\n    , whileStatement: function(condition, body) {\n      return {\n          type: 'WhileStatement'\n        , condition: condition\n        , body: body\n      };\n    }\n\n    , doStatement: function(body) {\n      return {\n          type: 'DoStatement'\n        , body: body\n      };\n    }\n\n    , repeatStatement: function(condition, body) {\n      return {\n          type: 'RepeatStatement'\n        , condition: condition\n        , body: body\n      };\n    }\n\n    , localStatement: function(variables, init) {\n      return {\n          type: 'LocalStatement'\n        , variables: variables\n        , init: init\n      };\n    }\n\n    , assignmentStatement: function(variables, init) {\n      return {\n          type: 'AssignmentStatement'\n        , variables: variables\n        , init: init\n      };\n    }\n\n    , callStatement: function(expression) {\n      return {\n          type: 'CallStatement'\n        , expression: expression\n      };\n    }\n\n    , functionStatement: function(identifier, parameters, isLocal, body) {\n      return {\n          type: 'FunctionDeclaration'\n        , identifier: identifier\n        , isLocal: isLocal\n        , parameters: parameters\n        , body: body\n      };\n    }\n\n    , forNumericStatement: function(variable, start, end, step, body) {\n      return {\n          type: 'ForNumericStatement'\n        , variable: variable\n        , start: start\n        , end: end\n        , step: step\n        , body: body\n      };\n    }\n\n    , forGenericStatement: function(variables, iterators, body) {\n      return {\n          type: 'ForGenericStatement'\n        , variables: variables\n        , iterators: iterators\n        , body: body\n      };\n    }\n\n    , chunk: function(body) {\n      return {\n          type: 'Chunk'\n        , body: body\n      };\n    }\n\n    , identifier: function(name) {\n      return {\n          type: 'Identifier'\n        , name: name\n      };\n    }\n\n    , literal: function(type, value, raw) {\n      type = (type === StringLiteral) ? 'StringLiteral'\n        : (type === NumericLiteral) ? 'NumericLiteral'\n        : (type === BooleanLiteral) ? 'BooleanLiteral'\n        : (type === NilLiteral) ? 'NilLiteral'\n        : 'VarargLiteral';\n\n      return {\n          type: type\n        , value: value\n        , raw: raw\n      };\n    }\n\n    , tableKey: function(key, value) {\n      return {\n          type: 'TableKey'\n        , key: key\n        , value: value\n      };\n    }\n    , tableKeyString: function(key, value) {\n      return {\n          type: 'TableKeyString'\n        , key: key\n        , value: value\n      };\n    }\n    , tableValue: function(value) {\n      return {\n          type: 'TableValue'\n        , value: value\n      };\n    }\n\n\n    , tableConstructorExpression: function(fields) {\n      return {\n          type: 'TableConstructorExpression'\n        , fields: fields\n      };\n    }\n    , binaryExpression: function(operator, left, right) {\n      var type = ('and' === operator || 'or' === operator) ?\n        'LogicalExpression' :\n        'BinaryExpression';\n\n      return {\n          type: type\n        , operator: operator\n        , left: left\n        , right: right\n      };\n    }\n    , unaryExpression: function(operator, argument) {\n      return {\n          type: 'UnaryExpression'\n        , operator: operator\n        , argument: argument\n      };\n    }\n    , memberExpression: function(base, indexer, identifier) {\n      return {\n          type: 'MemberExpression'\n        , indexer: indexer\n        , identifier: identifier\n        , base: base\n      };\n    }\n\n    , indexExpression: function(base, index) {\n      return {\n          type: 'IndexExpression'\n        , base: base\n        , index: index\n      };\n    }\n\n    , callExpression: function(base, args) {\n      return {\n          type: 'CallExpression'\n        , base: base\n        , 'arguments': args\n      };\n    }\n\n    , tableCallExpression: function(base, args) {\n      return {\n          type: 'TableCallExpression'\n        , base: base\n        , 'arguments': args\n      };\n    }\n\n    , stringCallExpression: function(base, argument) {\n      return {\n          type: 'StringCallExpression'\n        , base: base\n        , argument: argument\n      };\n    }\n\n    , comment: function(value, raw) {\n      return {\n          type: 'Comment'\n        , value: value\n        , raw: raw\n      };\n    }\n  };\n\n  // Wrap up the node object.\n\n  function finishNode(node) {\n    // Pop a `Marker` off the location-array and attach its location data.\n    if (trackLocations) {\n      var location = locations.pop();\n      location.complete();\n      if (options.locations) node.loc = location.loc;\n      if (options.ranges) node.range = location.range;\n    }\n    return node;\n  }\n\n\n\n  // Helpers\n  // -------\n\n  var slice = Array.prototype.slice\n    , toString = Object.prototype.toString\n    , indexOf = function indexOf(array, element) {\n      for (var i = 0, length = array.length; i < length; i++) {\n        if (array[i] === element) return i;\n      }\n      return -1;\n    };\n\n  // Iterate through an array of objects and return the index of an object\n  // with a matching property.\n\n  function indexOfObject(array, property, element) {\n    for (var i = 0, length = array.length; i < length; i++) {\n      if (array[i][property] === element) return i;\n    }\n    return -1;\n  }\n\n  // A sprintf implementation using %index (beginning at 1) to input\n  // arguments in the format string.\n  //\n  // Example:\n  //\n  //     // Unexpected function in token\n  //     sprintf('Unexpected %2 in %1.', 'token', 'function');\n\n  function sprintf(format) {\n    var args = slice.call(arguments, 1);\n    format = format.replace(/%(\\d)/g, function (match, index) {\n      return '' + args[index - 1] || '';\n    });\n    return format;\n  }\n\n  // Returns a new object with the properties from all objectes passed as\n  // arguments. Last argument takes precedence.\n  //\n  // Example:\n  //\n  //     this.options = extend(options, { output: false });\n\n  function extend() {\n    var args = slice.call(arguments)\n      , dest = {}\n      , src, prop;\n\n    for (var i = 0, length = args.length; i < length; i++) {\n      src = args[i];\n      for (prop in src) if (src.hasOwnProperty(prop)) {\n        dest[prop] = src[prop];\n      }\n    }\n    return dest;\n  }\n\n  // ### Error functions\n\n  // #### Raise an exception.\n  //\n  // Raise an exception by passing a token, a string format and its paramters.\n  //\n  // The passed tokens location will automatically be added to the error\n  // message if it exists, if not it will default to the lexers current\n  // position.\n  //\n  // Example:\n  //\n  //     // [1:0] expected [ near (\n  //     raise(token, \"expected %1 near %2\", '[', token.value);\n\n  function raise(token) {\n    var message = sprintf.apply(null, slice.call(arguments, 1))\n      , error, col;\n\n    if ('undefined' !== typeof token.line) {\n      col = token.range[0] - token.lineStart;\n      error = new SyntaxError(sprintf('[%1:%2] %3', token.line, col, message));\n      error.line = token.line;\n      error.index = token.range[0];\n      error.column = col;\n    } else {\n      col = index - lineStart + 1;\n      error = new SyntaxError(sprintf('[%1:%2] %3', line, col, message));\n      error.index = index;\n      error.line = line;\n      error.column = col;\n    }\n    throw error;\n  }\n\n  // #### Raise an unexpected token error.\n  //\n  // Example:\n  //\n  //     // expected <name> near '0'\n  //     raiseUnexpectedToken('<name>', token);\n\n  function raiseUnexpectedToken(type, token) {\n    raise(token, errors.expectedToken, type, token.value);\n  }\n\n  // #### Raise a general unexpected error\n  //\n  // Usage should pass either a token object or a symbol string which was\n  // expected. We can also specify a nearby token such as <eof>, this will\n  // default to the currently active token.\n  //\n  // Example:\n  //\n  //     // Unexpected symbol 'end' near '<eof>'\n  //     unexpected(token);\n  //\n  // If there's no token in the buffer it means we have reached <eof>.\n\n  function unexpected(found, near) {\n    if ('undefined' === typeof near) near = lookahead.value;\n    if ('undefined' !== typeof found.type) {\n      var type;\n      switch (found.type) {\n        case StringLiteral:   type = 'string';      break;\n        case Keyword:         type = 'keyword';     break;\n        case Identifier:      type = 'identifier';  break;\n        case NumericLiteral:  type = 'number';      break;\n        case Punctuator:      type = 'symbol';      break;\n        case BooleanLiteral:  type = 'boolean';     break;\n        case NilLiteral:\n          return raise(found, errors.unexpected, 'symbol', 'nil', near);\n      }\n      return raise(found, errors.unexpected, type, found.value, near);\n    }\n    return raise(found, errors.unexpected, 'symbol', found, near);\n  }\n\n  // Lexer\n  // -----\n  //\n  // The lexer, or the tokenizer reads the input string character by character\n  // and derives a token left-right. To be as efficient as possible the lexer\n  // prioritizes the common cases such as identifiers. It also works with\n  // character codes instead of characters as string comparisons was the\n  // biggest bottleneck of the parser.\n  //\n  // If `options.comments` is enabled, all comments encountered will be stored\n  // in an array which later will be appended to the chunk object. If disabled,\n  // they will simply be disregarded.\n  //\n  // When the lexer has derived a valid token, it will be returned as an object\n  // containing its value and as well as its position in the input string (this\n  // is always enabled to provide proper debug messages).\n  //\n  // `lex()` starts lexing and returns the following token in the stream.\n\n  var index\n    , token\n    , previousToken\n    , lookahead\n    , comments\n    , tokenStart\n    , line\n    , lineStart;\n\n  exports.lex = lex;\n\n  function lex() {\n    skipWhiteSpace();\n\n    // Skip comments beginning with --\n    while (45 === input.charCodeAt(index) &&\n           45 === input.charCodeAt(index + 1)) {\n      scanComment();\n      skipWhiteSpace();\n    }\n    if (index >= length) return {\n        type : EOF\n      , value: '<eof>'\n      , line: line\n      , lineStart: lineStart\n      , range: [index, index]\n    };\n\n    var charCode = input.charCodeAt(index)\n      , next = input.charCodeAt(index + 1);\n\n    // Memorize the range index where the token begins.\n    tokenStart = index;\n    if (isIdentifierStart(charCode)) return scanIdentifierOrKeyword();\n\n    switch (charCode) {\n      case 39: case 34: // '\"\n        return scanStringLiteral();\n\n      // 0-9\n      case 48: case 49: case 50: case 51: case 52: case 53:\n      case 54: case 55: case 56: case 57:\n        return scanNumericLiteral();\n\n      case 46: // .\n        // If the dot is followed by a digit it's a float.\n        if (isDecDigit(next)) return scanNumericLiteral();\n        if (46 === next) {\n          if (46 === input.charCodeAt(index + 2)) return scanVarargLiteral();\n          return scanPunctuator('..');\n        }\n        return scanPunctuator('.');\n\n      case 61: // =\n        if (61 === next) return scanPunctuator('==');\n        return scanPunctuator('=');\n\n      case 62: // >\n        if (61 === next) return scanPunctuator('>=');\n        return scanPunctuator('>');\n\n      case 60: // <\n        if (61 === next) return scanPunctuator('<=');\n        return scanPunctuator('<');\n\n      case 126: // ~\n        if (61 === next) return scanPunctuator('~=');\n        return scanPunctuator('~');\n\n      case 58: // :\n        if (58 === next) return scanPunctuator('::');\n        return scanPunctuator(':');\n\n      case 91: // [\n        // Check for a multiline string, they begin with [= or [[\n        if (91 === next || 61 === next) return scanLongStringLiteral();\n        return scanPunctuator('[');\n\n      // \\* / ^ % , { } ] ( ) ; # - +\n      case 42: case 47: case 94: case 37: case 44: case 123: case 125:\n      case 93: case 40: case 41: case 59: case 35: case 45: case 43:\n        return scanPunctuator(input.charAt(index));\n    }\n\n    return unexpected(input.charAt(index));\n  }\n\n  // Whitespace has no semantic meaning in lua so simply skip ahead while\n  // tracking the encounted newlines. Newlines are also tracked in all\n  // token functions where multiline values are allowed.\n\n  function skipWhiteSpace() {\n    while (index < length) {\n      var charCode = input.charCodeAt(index);\n      if (isWhiteSpace(charCode)) {\n        index++;\n      } else if (isLineTerminator(charCode)) {\n        line++;\n        lineStart = ++index;\n      } else {\n        break;\n      }\n    }\n  }\n\n  // Identifiers, keywords, booleans and nil all look the same syntax wise. We\n  // simply go through them one by one and defaulting to an identifier if no\n  // previous case matched.\n\n  function scanIdentifierOrKeyword() {\n    var value, type;\n\n    // Slicing the input string is prefered before string concatenation in a\n    // loop for performance reasons.\n    while (isIdentifierPart(input.charCodeAt(++index)));\n    value = input.slice(tokenStart, index);\n\n    // Decide on the token type and possibly cast the value.\n    if (isKeyword(value)) {\n      type = Keyword;\n    } else if ('true' === value || 'false' === value) {\n      type = BooleanLiteral;\n      value = ('true' === value);\n    } else if ('nil' === value) {\n      type = NilLiteral;\n      value = null;\n    } else {\n      type = Identifier;\n    }\n\n    return {\n        type: type\n      , value: value\n      , line: line\n      , lineStart: lineStart\n      , range: [tokenStart, index]\n    };\n  }\n\n  // Once a punctuator reaches this function it should already have been\n  // validated so we simply return it as a token.\n\n  function scanPunctuator(value) {\n    index += value.length;\n    return {\n        type: Punctuator\n      , value: value\n      , line: line\n      , lineStart: lineStart\n      , range: [tokenStart, index]\n    };\n  }\n\n  // A vararg literal consists of three dots.\n\n  function scanVarargLiteral() {\n    index += 3;\n    return {\n        type: VarargLiteral\n      , value: '...'\n      , line: line\n      , lineStart: lineStart\n      , range: [tokenStart, index]\n    };\n  }\n\n  // Find the string literal by matching the delimiter marks used.\n\n  function scanStringLiteral() {\n    var delimiter = input.charCodeAt(index++)\n      , stringStart = index\n      , string = ''\n      , charCode;\n\n    while (index < length) {\n      charCode = input.charCodeAt(index++);\n      if (delimiter === charCode) break;\n      if (92 === charCode) { // \\\n        string += input.slice(stringStart, index - 1) + readEscapeSequence();\n        stringStart = index;\n      }\n      // EOF or `\\n` terminates a string literal. If we haven't found the\n      // ending delimiter by now, raise an exception.\n      else if (index >= length || isLineTerminator(charCode)) {\n        string += input.slice(stringStart, index - 1);\n        raise({}, errors.unfinishedString, string + String.fromCharCode(charCode));\n      }\n    }\n    string += input.slice(stringStart, index - 1);\n\n    return {\n        type: StringLiteral\n      , value: string\n      , line: line\n      , lineStart: lineStart\n      , range: [tokenStart, index]\n    };\n  }\n\n  // Expect a multiline string literal and return it as a regular string\n  // literal, if it doesn't validate into a valid multiline string, throw an\n  // exception.\n\n  function scanLongStringLiteral() {\n    var string = readLongString();\n    // Fail if it's not a multiline literal.\n    if (false === string) raise(token, errors.expected, '[', token.value);\n\n    return {\n        type: StringLiteral\n      , value: string\n      , line: line\n      , lineStart: lineStart\n      , range: [tokenStart, index]\n    };\n  }\n\n  // Numeric literals will be returned as floating-point numbers instead of\n  // strings. The raw value should be retrieved from slicing the input string\n  // later on in the process.\n  //\n  // If a hexadecimal number is encountered, it will be converted.\n\n  function scanNumericLiteral() {\n    var character = input.charAt(index)\n      , next = input.charAt(index + 1);\n\n    var value = ('0' === character && 'xX'.indexOf(next || null) >= 0) ?\n      readHexLiteral() : readDecLiteral();\n\n    return {\n        type: NumericLiteral\n      , value: value\n      , line: line\n      , lineStart: lineStart\n      , range: [tokenStart, index]\n    };\n  }\n\n  // Lua hexadecimals have an optional fraction part and an optional binary\n  // exoponent part. These are not included in JavaScript so we will compute\n  // all three parts separately and then sum them up at the end of the function\n  // with the following algorithm.\n  //\n  //     Digit := toDec(digit)\n  //     Fraction := toDec(fraction) / 16 ^ fractionCount\n  //     BinaryExp := 2 ^ binaryExp\n  //     Number := ( Digit + Fraction ) * BinaryExp\n\n  function readHexLiteral() {\n    var fraction = 0 // defaults to 0 as it gets summed\n      , binaryExponent = 1 // defaults to 1 as it gets multiplied\n      , binarySign = 1 // positive\n      , digit, fractionStart, exponentStart, digitStart;\n\n    digitStart = index += 2; // Skip 0x part\n\n    // A minimum of one hex digit is required.\n    if (!isHexDigit(input.charCodeAt(index)))\n      raise({}, errors.malformedNumber, input.slice(tokenStart, index));\n\n    while (isHexDigit(input.charCodeAt(index))) index++;\n    // Convert the hexadecimal digit to base 10.\n    digit = parseInt(input.slice(digitStart, index), 16);\n\n    // Fraction part i optional.\n    if ('.' === input.charAt(index)) {\n      fractionStart = ++index;\n\n      while (isHexDigit(input.charCodeAt(index))) index++;\n      fraction = input.slice(fractionStart, index);\n\n      // Empty fraction parts should default to 0, others should be converted\n      // 0.x form so we can use summation at the end.\n      fraction = (fractionStart === index) ? 0\n        : parseInt(fraction, 16) / Math.pow(16, index - fractionStart);\n    }\n\n    // Binary exponents are optional\n    if ('pP'.indexOf(input.charAt(index) || null) >= 0) {\n      index++;\n\n      // Sign part is optional and defaults to 1 (positive).\n      if ('+-'.indexOf(input.charAt(index) || null) >= 0)\n        binarySign = ('+' === input.charAt(index++)) ? 1 : -1;\n\n      exponentStart = index;\n\n      // The binary exponent sign requires a decimal digit.\n      if (!isDecDigit(input.charCodeAt(index)))\n        raise({}, errors.malformedNumber, input.slice(tokenStart, index));\n\n      while (isDecDigit(input.charCodeAt(index))) index++;\n      binaryExponent = input.slice(exponentStart, index);\n\n      // Calculate the binary exponent of the number.\n      binaryExponent = Math.pow(2, binaryExponent * binarySign);\n    }\n\n    return (digit + fraction) * binaryExponent;\n  }\n\n  // Decimal numbers are exactly the same in Lua and in JavaScript, because of\n  // this we check where the token ends and then parse it with native\n  // functions.\n\n  function readDecLiteral() {\n    while (isDecDigit(input.charCodeAt(index))) index++;\n    // Fraction part is optional\n    if ('.' === input.charAt(index)) {\n      index++;\n      // Fraction part defaults to 0\n      while (isDecDigit(input.charCodeAt(index))) index++;\n    }\n    // Exponent part is optional.\n    if ('eE'.indexOf(input.charAt(index) || null) >= 0) {\n      index++;\n      // Sign part is optional.\n      if ('+-'.indexOf(input.charAt(index) || null) >= 0) index++;\n      // An exponent is required to contain at least one decimal digit.\n      if (!isDecDigit(input.charCodeAt(index)))\n        raise({}, errors.malformedNumber, input.slice(tokenStart, index));\n\n      while (isDecDigit(input.charCodeAt(index))) index++;\n    }\n\n    return parseFloat(input.slice(tokenStart, index));\n  }\n\n\n  // Translate escape sequences to the actual characters.\n\n  function readEscapeSequence() {\n    var sequenceStart = index;\n    switch (input.charAt(index)) {\n      // Lua allow the following escape sequences.\n      // We don't escape the bell sequence.\n      case 'n': index++; return '\\n';\n      case 'r': index++; return '\\r';\n      case 't': index++; return '\\t';\n      case 'v': index++; return '\\x0B';\n      case 'b': index++; return '\\b';\n      case 'f': index++; return '\\f';\n      // Skips the following span of white-space.\n      case 'z': index++; skipWhiteSpace(); return '';\n      // Byte representation should for now be returned as is.\n      case 'x':\n        // \\xXX, where XX is a sequence of exactly two hexadecimal digits\n        if (isHexDigit(input.charCodeAt(index + 1)) &&\n            isHexDigit(input.charCodeAt(index + 2))) {\n          index += 3;\n          // Return it as is, without translating the byte.\n          return '\\\\' + input.slice(sequenceStart, index);\n        }\n        return '\\\\' + input.charAt(index++);\n      default:\n        // \\ddd, where ddd is a sequence of up to three decimal digits.\n        if (isDecDigit(input.charCodeAt(index))) {\n          while (isDecDigit(input.charCodeAt(++index)));\n          return '\\\\' + input.slice(sequenceStart, index);\n        }\n        // Simply return the \\ as is, it's not escaping any sequence.\n        return input.charAt(index++);\n    }\n  }\n\n  // Comments begin with -- after which it will be decided if they are\n  // multiline comments or not.\n  //\n  // The multiline functionality works the exact same way as with string\n  // literals so we reuse the functionality.\n\n  function scanComment() {\n    tokenStart = index;\n    index += 2; // --\n\n    var character = input.charAt(index)\n      , content = ''\n      , isLong = false\n      , commentStart = index\n      , lineStartComment = lineStart\n      , lineComment = line;\n\n    if ('[' === character) {\n      content = readLongString();\n      // This wasn't a multiline comment after all.\n      if (false === content) content = character;\n      else isLong = true;\n    }\n    // Scan until next line as long as it's not a multiline comment.\n    if (!isLong) {\n      while (index < length) {\n        if (isLineTerminator(input.charCodeAt(index))) break;\n        index++;\n      }\n      if (options.comments) content = input.slice(commentStart, index);\n    }\n\n    if (options.comments) {\n      var node = ast.comment(content, input.slice(tokenStart, index));\n\n      // `Marker`s depend on tokens available in the parser and as comments are\n      // intercepted in the lexer all location data is set manually.\n      if (options.locations) {\n        node.loc = {\n            start: { line: lineComment, column: tokenStart - lineStartComment }\n          , end: { line: line, column: index - lineStart }\n        };\n      }\n      if (options.ranges) {\n        node.range = [tokenStart, index];\n      }\n      comments.push(node);\n    }\n  }\n\n  // Read a multiline string by calculating the depth of `=` characters and\n  // then appending until an equal depth is found.\n\n  function readLongString() {\n    var level = 0\n      , content = ''\n      , terminator = false\n      , character, stringStart;\n\n    index++; // [\n\n    // Calculate the depth of the comment.\n    while ('=' === input.charAt(index + level)) level++;\n    // Exit, this is not a long string afterall.\n    if ('[' !== input.charAt(index + level)) return false;\n\n    index += level + 1;\n\n    // If the first character is a newline, ignore it and begin on next line.\n    if (isLineTerminator(input.charCodeAt(index))) {\n      line++;\n      lineStart = index++;\n    }\n\n    stringStart = index;\n    while (index < length) {\n      character = input.charAt(index++);\n\n      // We have to keep track of newlines as `skipWhiteSpace()` does not get\n      // to scan this part.\n      if (isLineTerminator(character.charCodeAt(0))) {\n        line++;\n        lineStart = index;\n      }\n\n      // Once the delimiter is found, iterate through the depth count and see\n      // if it matches.\n      if (']' === character) {\n        terminator = true;\n        for (var i = 0; i < level; i++) {\n          if ('=' !== input.charAt(index + i)) terminator = false;\n        }\n        if (']' !== input.charAt(index + level)) terminator = false;\n      }\n\n      // We reached the end of the multiline string. Get out now.\n      if (terminator) break;\n    }\n    content += input.slice(stringStart, index - 1);\n    index += level + 1;\n\n    return content;\n  }\n\n  // ## Lex functions and helpers.\n\n  // Read the next token.\n  //\n  // This is actually done by setting the current token to the lookahead and\n  // reading in the new lookahead token.\n\n  function next() {\n    previousToken = token;\n    token = lookahead;\n    lookahead = lex();\n  }\n\n  // Consume a token if its value matches. Once consumed or not, return the\n  // success of the operation.\n\n  function consume(value) {\n    if (value === token.value) {\n      next();\n      return true;\n    }\n    return false;\n  }\n\n  // Expect the next token value to match. If not, throw an exception.\n\n  function expect(value) {\n    if (value === token.value) next();\n    else raise(token, errors.expected, value, token.value);\n  }\n\n  // ### Validation functions\n\n  function isWhiteSpace(charCode) {\n    return 9 === charCode || 32 === charCode || 0xB === charCode || 0xC === charCode;\n  }\n\n  function isLineTerminator(charCode) {\n    return 10 === charCode || 13 === charCode;\n  }\n\n  function isDecDigit(charCode) {\n    return charCode >= 48 && charCode <= 57;\n  }\n\n  function isHexDigit(charCode) {\n    return (charCode >= 48 && charCode <= 57) || (charCode >= 97 && charCode <= 102) || (charCode >= 65 && charCode <= 70);\n  }\n\n  // From [Lua 5.2](http://www.lua.org/manual/5.2/manual.html#8.1) onwards\n  // identifiers cannot use locale-dependet letters.\n\n  function isIdentifierStart(charCode) {\n    return (charCode >= 65 && charCode <= 90) || (charCode >= 97 && charCode <= 122) || 95 === charCode;\n  }\n\n  function isIdentifierPart(charCode) {\n    return (charCode >= 65 && charCode <= 90) || (charCode >= 97 && charCode <= 122) || 95 === charCode || (charCode >= 48 && charCode <= 57);\n  }\n\n  // [3.1 Lexical Conventions](http://www.lua.org/manual/5.2/manual.html#3.1)\n  //\n  // `true`, `false` and `nil` will not be considered keywords, but literals.\n\n  function isKeyword(id) {\n    switch (id.length) {\n      case 2:\n        return 'do' === id || 'if' === id || 'in' === id || 'or' === id;\n      case 3:\n        return 'and' === id || 'end' === id || 'for' === id || 'not' === id;\n      case 4:\n        return 'else' === id || 'goto' === id || 'then' === id;\n      case 5:\n        return 'break' === id || 'local' === id || 'until' === id || 'while' === id;\n      case 6:\n        return 'elseif' === id || 'repeat' === id || 'return' === id;\n      case 8:\n        return 'function' === id;\n    }\n    return false;\n  }\n\n  function isUnary(token) {\n    if (Punctuator === token.type) return '#-~'.indexOf(token.value) >= 0;\n    if (Keyword === token.type) return 'not' === token.value;\n    return false;\n  }\n\n  // @TODO this needs to be rethought.\n  function isCallExpression(expression) {\n    switch (expression.type) {\n      case 'CallExpression':\n      case 'TableCallExpression':\n      case 'StringCallExpression':\n        return true;\n    }\n    return false;\n  }\n\n  // Check if the token syntactically closes a block.\n\n  function isBlockFollow(token) {\n    if (EOF === token.type) return true;\n    if (Keyword !== token.type) return false;\n    switch (token.value) {\n      case 'else': case 'elseif':\n      case 'end': case 'until':\n        return true;\n      default:\n        return false;\n    }\n  }\n\n  // Scope\n  // -----\n\n  // Store each block scope as a an array of identifier names. Each scope is\n  // stored in an FILO-array.\n  var scopes\n    // The current scope index\n    , scopeDepth\n    // A list of all global identifier nodes.\n    , globals;\n\n  // Create a new scope inheriting all declarations from the previous scope.\n  function createScope() {\n    scopes.push(Array.apply(null, scopes[scopeDepth++]));\n  }\n\n  // Exit and remove the current scope.\n  function exitScope() {\n    scopes.pop();\n    scopeDepth--;\n  }\n\n  // Add identifier name to the current scope if it doesnt already exist.\n  function scopeIdentifierName(name) {\n    if (-1 !== indexOf(scopes[scopeDepth], name)) return;\n    scopes[scopeDepth].push(name);\n  }\n\n  // Add identifier to the current scope\n  function scopeIdentifier(node) {\n    scopeIdentifierName(node.name);\n    attachScope(node, true);\n  }\n\n  // Attach scope information to node. If the node is global, store it in the\n  // globals array so we can return the information to the user.\n  function attachScope(node, isLocal) {\n    if (!isLocal && -1 === indexOfObject(globals, 'name', node.name))\n      globals.push(node);\n\n    node.isLocal = isLocal;\n  }\n\n  // Is the identifier name available in this scope.\n  function scopeHasName(name) {\n    return (-1 !== indexOf(scopes[scopeDepth], name));\n  }\n\n  // Location tracking\n  // -----------------\n  //\n  // Locations are stored in FILO-array as a `Marker` object consisting of both\n  // `loc` and `range` data. Once a `Marker` is popped off the list an end\n  // location is added and the data is attached to a syntax node.\n\n  var locations = []\n    , trackLocations;\n\n  function createLocationMarker() {\n    return new Marker(token);\n  }\n\n  function Marker(token) {\n    if (options.locations) {\n      this.loc = {\n          start: {\n            line: token.line\n          , column: token.range[0] - token.lineStart\n        }\n        , end: {\n            line: 0\n          , column: 0\n        }\n      };\n    }\n    if (options.ranges) this.range = [token.range[0], 0];\n  }\n\n  // Complete the location data stored in the `Marker` by adding the location\n  // of the *previous token* as an end location.\n  Marker.prototype.complete = function() {\n    if (options.locations) {\n      this.loc.end.line = previousToken.line;\n      this.loc.end.column = previousToken.range[1] - previousToken.lineStart;\n    }\n    if (options.ranges) {\n      this.range[1] = previousToken.range[1];\n    }\n  };\n\n  // Create a new `Marker` and add it to the FILO-array.\n  function markLocation() {\n    if (trackLocations) locations.push(createLocationMarker());\n  }\n\n  // Push an arbitrary `Marker` object onto the FILO-array.\n  function pushLocation(marker) {\n    if (trackLocations) locations.push(marker);\n  }\n\n  // Parse functions\n  // ---------------\n\n  // Chunk is the main program object. Syntactically it's the same as a block.\n  //\n  //     chunk ::= block\n\n  function parseChunk() {\n    next();\n    markLocation();\n    var body = parseBlock();\n    if (EOF !== token.type) unexpected(token);\n    // If the body is empty no previousToken exists when finishNode runs.\n    if (trackLocations && !body.length) previousToken = token;\n    return finishNode(ast.chunk(body));\n  }\n\n  // A block contains a list of statements with an optional return statement\n  // as its last statement.\n  //\n  //     block ::= {stat} [retstat]\n\n  function parseBlock(terminator) {\n    var block = []\n      , statement;\n\n    // Each block creates a new scope.\n    if (options.scope) createScope();\n\n    while (!isBlockFollow(token)) {\n      // Return has to be the last statement in a block.\n      if ('return' === token.value) {\n        block.push(parseStatement());\n        break;\n      }\n      statement = parseStatement();\n      // Statements are only added if they are returned, this allows us to\n      // ignore some statements, such as EmptyStatement.\n      if (statement) block.push(statement);\n    }\n\n    if (options.scope) exitScope();\n    // Doesn't really need an ast node\n    return block;\n  }\n\n  // There are two types of statements, simple and compound.\n  //\n  //     statement ::= break | goto | do | while | repeat | return\n  //          | if | for | function | local | label | assignment\n  //          | functioncall | ';'\n\n  function parseStatement() {\n    markLocation();\n    if (Keyword === token.type) {\n      switch (token.value) {\n        case 'local':    next(); return parseLocalStatement();\n        case 'if':       next(); return parseIfStatement();\n        case 'return':   next(); return parseReturnStatement();\n        case 'function': next();\n          var name = parseFunctionName();\n          return parseFunctionDeclaration(name);\n        case 'while':    next(); return parseWhileStatement();\n        case 'for':      next(); return parseForStatement();\n        case 'repeat':   next(); return parseRepeatStatement();\n        case 'break':    next(); return parseBreakStatement();\n        case 'do':       next(); return parseDoStatement();\n        case 'goto':     next(); return parseGotoStatement();\n      }\n    }\n\n    if (Punctuator === token.type) {\n      if (consume('::')) return parseLabelStatement();\n    }\n    // Assignments memorizes the location and pushes it manually for wrapper\n    // nodes. Additionally empty `;` statements should not mark a location.\n    if (trackLocations) locations.pop();\n\n    // When a `;` is encounted, simply eat it without storing it.\n    if (consume(';')) return;\n\n    return parseAssignmentOrCallStatement();\n  }\n\n  // ## Statements\n\n  //     label ::= '::' Name '::'\n\n  function parseLabelStatement() {\n    var name = token.value\n      , label = parseIdentifier();\n\n    if (options.scope) {\n      scopeIdentifierName('::' + name + '::');\n      attachScope(label, true);\n    }\n\n    expect('::');\n    return finishNode(ast.labelStatement(label));\n  }\n\n  //     break ::= 'break'\n\n  function parseBreakStatement() {\n    return finishNode(ast.breakStatement());\n  }\n\n  //     goto ::= 'goto' Name\n\n  function parseGotoStatement() {\n    var name = token.value\n      , label = parseIdentifier();\n\n    if (options.scope) label.isLabel = scopeHasName('::' + name + '::');\n    return finishNode(ast.gotoStatement(label));\n  }\n\n  //     do ::= 'do' block 'end'\n\n  function parseDoStatement() {\n    var body = parseBlock();\n    expect('end');\n    return finishNode(ast.doStatement(body));\n  }\n\n  //     while ::= 'while' exp 'do' block 'end'\n\n  function parseWhileStatement() {\n    var condition = parseExpectedExpression();\n    expect('do');\n    var body = parseBlock();\n    expect('end');\n    return finishNode(ast.whileStatement(condition, body));\n  }\n\n  //     repeat ::= 'repeat' block 'until' exp\n\n  function parseRepeatStatement() {\n    var body = parseBlock();\n    expect('until');\n    var condition = parseExpectedExpression();\n    return finishNode(ast.repeatStatement(condition, body));\n  }\n\n  //     retstat ::= 'return' [exp {',' exp}] [';']\n\n  function parseReturnStatement() {\n    var expressions = [];\n\n    if ('end' !== token.value) {\n      var expression = parseExpression();\n      if (null != expression) expressions.push(expression);\n      while (consume(',')) {\n        expression = parseExpectedExpression();\n        expressions.push(expression);\n      }\n      consume(';'); // grammar tells us ; is optional here.\n    }\n    return finishNode(ast.returnStatement(expressions));\n  }\n\n  //     if ::= 'if' exp 'then' block {elif} ['else' block] 'end'\n  //     elif ::= 'elseif' exp 'then' block\n\n  function parseIfStatement() {\n    var clauses = []\n      , condition\n      , body\n      , marker;\n\n    // IfClauses begin at the same location as the parent IfStatement.\n    // It ends at the start of `end`, `else`, or `elseif`.\n    if (trackLocations) {\n      marker = locations[locations.length - 1];\n      locations.push(marker);\n    }\n    condition = parseExpectedExpression();\n    expect('then');\n    body = parseBlock();\n    clauses.push(finishNode(ast.ifClause(condition, body)));\n\n    if (trackLocations) marker = createLocationMarker();\n    while (consume('elseif')) {\n      pushLocation(marker);\n      condition = parseExpectedExpression();\n      expect('then');\n      body = parseBlock();\n      clauses.push(finishNode(ast.elseifClause(condition, body)));\n      if (trackLocations) marker = createLocationMarker();\n    }\n\n    if (consume('else')) {\n      // Include the `else` in the location of ElseClause.\n      if (trackLocations) {\n        marker = new Marker(previousToken);\n        locations.push(marker);\n      }\n      body = parseBlock();\n      clauses.push(finishNode(ast.elseClause(body)));\n    }\n\n    expect('end');\n    return finishNode(ast.ifStatement(clauses));\n  }\n\n  // There are two types of for statements, generic and numeric.\n  //\n  //     for ::= Name '=' exp ',' exp [',' exp] 'do' block 'end'\n  //     for ::= namelist 'in' explist 'do' block 'end'\n  //     namelist ::= Name {',' Name}\n  //     explist ::= exp {',' exp}\n\n  function parseForStatement() {\n    var variable = parseIdentifier()\n      , body;\n\n    // The start-identifier is local.\n    if (options.scope) scopeIdentifier(variable);\n\n    // If the first expression is followed by a `=` punctuator, this is a\n    // Numeric For Statement.\n    if (consume('=')) {\n      // Start expression\n      var start = parseExpectedExpression();\n      expect(',');\n      // End expression\n      var end = parseExpectedExpression();\n      // Optional step expression\n      var step = consume(',') ? parseExpectedExpression() : null;\n\n      expect('do');\n      body = parseBlock();\n      expect('end');\n\n      return finishNode(ast.forNumericStatement(variable, start, end, step, body));\n    }\n    // If not, it's a Generic For Statement\n    else {\n      // The namelist can contain one or more identifiers.\n      var variables = [variable];\n      while (consume(',')) {\n        variable = parseIdentifier();\n        // Each variable in the namelist is locally scoped.\n        if (options.scope) scopeIdentifier(variable);\n        variables.push(variable);\n      }\n      expect('in');\n      var iterators = [];\n\n      // One or more expressions in the explist.\n      do {\n        var expression = parseExpectedExpression();\n        iterators.push(expression);\n      } while (consume(','));\n\n      expect('do');\n      body = parseBlock();\n      expect('end');\n\n      return finishNode(ast.forGenericStatement(variables, iterators, body));\n    }\n  }\n\n  // Local statements can either be variable assignments or function\n  // definitions. If a function definition is found, it will be delegated to\n  // `parseFunctionDeclaration()` with the isLocal flag.\n  //\n  // This AST structure might change into a local assignment with a function\n  // child.\n  //\n  //     local ::= 'local' 'function' Name funcdecl\n  //        | 'local' Name {',' Name} ['=' exp {',' exp}\n\n  function parseLocalStatement() {\n    var name;\n\n    if (Identifier === token.type) {\n      var variables = []\n        , init = [];\n\n      do {\n        name = parseIdentifier();\n\n        variables.push(name);\n      } while (consume(','));\n\n      if (consume('=')) {\n        do {\n          var expression = parseExpectedExpression();\n          init.push(expression);\n        } while (consume(','));\n      }\n\n      // Declarations doesn't exist before the statement has been evaluated.\n      // Therefore assignments can't use their declarator. And the identifiers\n      // shouldn't be added to the scope until the statement is complete.\n      if (options.scope) {\n        for (var i = 0, l = variables.length; i < l; i++) {\n          scopeIdentifier(variables[i]);\n        }\n      }\n\n      return finishNode(ast.localStatement(variables, init));\n    }\n    if (consume('function')) {\n      name = parseIdentifier();\n      if (options.scope) scopeIdentifier(name);\n\n      // MemberExpressions are not allowed in local function statements.\n      return parseFunctionDeclaration(name, true);\n    } else {\n      raiseUnexpectedToken('<name>', token);\n    }\n  }\n\n  //     assignment ::= varlist '=' explist\n  //     varlist ::= prefixexp {',' prefixexp}\n  //     explist ::= exp {',' exp}\n  //\n  //     call ::= callexp\n  //     callexp ::= prefixexp args | prefixexp ':' Name args\n\n  function parseAssignmentOrCallStatement() {\n    // Keep a reference to the previous token for better error messages in case\n    // of invalid statement\n    var previous = token\n      , expression, marker;\n\n    if (trackLocations) marker = createLocationMarker();\n    expression = parsePrefixExpression();\n\n    if (null == expression) return unexpected(token);\n    if (',='.indexOf(token.value) >= 0) {\n      var variables = [expression]\n        , init = []\n        , exp;\n\n      while (consume(',')) {\n        exp = parsePrefixExpression();\n        if (null == exp) raiseUnexpectedToken('<expression>', token);\n        variables.push(exp);\n      }\n      expect('=');\n      do {\n        exp = parseExpectedExpression();\n        init.push(exp);\n      } while (consume(','));\n\n      pushLocation(marker);\n      return finishNode(ast.assignmentStatement(variables, init));\n    }\n    if (isCallExpression(expression)) {\n      pushLocation(marker);\n      return finishNode(ast.callStatement(expression));\n    }\n    // The prefix expression was neither part of an assignment or a\n    // callstatement, however as it was valid it's been consumed, so raise\n    // the exception on the previous token to provide a helpful message.\n    return unexpected(previous);\n  }\n\n\n\n  // ### Non-statements\n\n  //     Identifier ::= Name\n\n  function parseIdentifier() {\n    markLocation();\n    var identifier = token.value;\n    if (Identifier !== token.type) raiseUnexpectedToken('<name>', token);\n    next();\n    return finishNode(ast.identifier(identifier));\n  }\n\n  // Parse the functions parameters and body block. The name should already\n  // have been parsed and passed to this declaration function. By separating\n  // this we allow for anonymous functions in expressions.\n  //\n  // For local functions there's a boolean parameter which needs to be set\n  // when parsing the declaration.\n  //\n  //     funcdecl ::= '(' [parlist] ')' block 'end'\n  //     parlist ::= Name {',' Name} | [',' '...'] | '...'\n\n  function parseFunctionDeclaration(name, isLocal) {\n    var parameters = [];\n    expect('(');\n\n    // The declaration has arguments\n    if (!consume(')')) {\n      // Arguments are a comma separated list of identifiers, optionally ending\n      // with a vararg.\n      while (true) {\n        if (Identifier === token.type) {\n          var parameter = parseIdentifier();\n          // Function parameters are local.\n          if (options.scope) scopeIdentifier(parameter);\n\n          parameters.push(parameter);\n\n          if (consume(',')) continue;\n          else if (consume(')')) break;\n        }\n        // No arguments are allowed after a vararg.\n        else if (VarargLiteral === token.type) {\n          parameters.push(parsePrimaryExpression());\n          expect(')');\n          break;\n        } else {\n          raiseUnexpectedToken('<name> or \\'...\\'', token);\n        }\n      }\n    }\n\n    var body = parseBlock();\n    expect('end');\n\n    isLocal = isLocal || false;\n    return finishNode(ast.functionStatement(name, parameters, isLocal, body));\n  }\n\n  // Parse the function name as identifiers and member expressions.\n  //\n  //     Name {'.' Name} [':' Name]\n\n  function parseFunctionName() {\n    var base, name, marker;\n\n    if (trackLocations) marker = createLocationMarker();\n    base = parseIdentifier();\n\n    if (options.scope) attachScope(base, false);\n\n    while (consume('.')) {\n      pushLocation(marker);\n      name = parseIdentifier();\n      if (options.scope) attachScope(name, false);\n      base = finishNode(ast.memberExpression(base, '.', name));\n    }\n\n    if (consume(':')) {\n      pushLocation(marker);\n      name = parseIdentifier();\n      if (options.scope) attachScope(name, false);\n      base = finishNode(ast.memberExpression(base, ':', name));\n    }\n\n    return base;\n  }\n\n  //     tableconstructor ::= '{' [fieldlist] '}'\n  //     fieldlist ::= field {fieldsep field} fieldsep\n  //     field ::= '[' exp ']' '=' exp | Name = 'exp' | exp\n  //\n  //     fieldsep ::= ',' | ';'\n\n  function parseTableConstructor() {\n    var fields = []\n      , key, value;\n\n    while (true) {\n      markLocation();\n      if (Punctuator === token.type && consume('[')) {\n        key = parseExpectedExpression();\n        expect(']');\n        expect('=');\n        value = parseExpectedExpression();\n        fields.push(finishNode(ast.tableKey(key, value)));\n      } else if (Identifier === token.type) {\n        key = parseExpectedExpression();\n        if (consume('=')) {\n          value = parseExpectedExpression();\n          fields.push(finishNode(ast.tableKeyString(key, value)));\n        } else {\n          fields.push(finishNode(ast.tableValue(key)));\n        }\n      } else {\n        if (null == (value = parseExpression())) {\n          locations.pop();\n          break;\n        }\n        fields.push(finishNode(ast.tableValue(value)));\n      }\n      if (',;'.indexOf(token.value) >= 0) {\n        next();\n        continue;\n      }\n      if ('}' === token.value) break;\n    }\n    expect('}');\n    return finishNode(ast.tableConstructorExpression(fields));\n  }\n\n  // Expression parser\n  // -----------------\n  //\n  // Expressions are evaluated and always return a value. If nothing is\n  // matched null will be returned.\n  //\n  //     exp ::= (unop exp | primary | prefixexp ) { binop exp }\n  //\n  //     primary ::= nil | false | true | Number | String | '...'\n  //          | functiondef | tableconstructor\n  //\n  //     prefixexp ::= (Name | '(' exp ')' ) { '[' exp ']'\n  //          | '.' Name | ':' Name args | args }\n  //\n\n  function parseExpression() {\n    var expression = parseSubExpression(0);\n    return expression;\n  }\n\n  // Parse an expression expecting it to be valid.\n\n  function parseExpectedExpression() {\n    var expression = parseExpression();\n    if (null == expression) raiseUnexpectedToken('<expression>', token);\n    else return expression;\n  }\n\n\n  // Return the precedence priority of the operator.\n  //\n  // As unary `-` can't be distinguished from binary `-`, unary precedence\n  // isn't described in this table but in `parseSubExpression()` itself.\n  //\n  // As this function gets hit on every expression it's been optimized due to\n  // the expensive CompareICStub which took ~8% of the parse time.\n\n  function binaryPrecedence(operator) {\n    var charCode = operator.charCodeAt(0)\n      , length = operator.length;\n\n    if (1 === length) {\n      switch (charCode) {\n        case 94: return 10; // ^\n        case 42: case 47: case 37: return 7; // * / %\n        case 43: case 45: return 6; // + -\n        case 60: case 62: return 3; // < >\n      }\n    } else if (2 === length) {\n      switch (charCode) {\n        case 46: return 5; // ..\n        case 60: case 62: case 61: case 126: return 3; // <= >= == ~=\n        case 111: return 1; // or\n      }\n    } else if (97 === charCode && 'and' === operator) return 2;\n    return 0;\n  }\n\n  // Implement an operator-precedence parser to handle binary operator\n  // precedence.\n  //\n  // We use this algorithm because it's compact, it's fast and Lua core uses\n  // the same so we can be sure our expressions are parsed in the same manner\n  // without excessive amounts of tests.\n  //\n  //     exp ::= (unop exp | primary | prefixexp ) { binop exp }\n\n  function parseSubExpression(minPrecedence) {\n    var operator = token.value\n    // The left-hand side in binary operations.\n      , expression, marker;\n\n    if (trackLocations) marker = createLocationMarker();\n\n    // UnaryExpression\n    if (isUnary(token)) {\n      markLocation();\n      next();\n      var argument = parseSubExpression(8);\n      if (argument == null) raiseUnexpectedToken('<expression>', token);\n      expression = finishNode(ast.unaryExpression(operator, argument));\n    }\n    if (null == expression) {\n      // PrimaryExpression\n      expression = parsePrimaryExpression();\n\n      // PrefixExpression\n      if (null == expression) {\n        expression = parsePrefixExpression();\n      }\n    }\n    // This is not a valid left hand expression.\n    if (null == expression) return null;\n\n    var precedence;\n    while (true) {\n      operator = token.value;\n\n      precedence = (Punctuator === token.type || Keyword === token.type) ?\n        binaryPrecedence(operator) : 0;\n\n      if (precedence === 0 || precedence <= minPrecedence) break;\n      // Right-hand precedence operators\n      if ('^' === operator || '..' === operator) precedence--;\n      next();\n      var right = parseSubExpression(precedence);\n      if (null == right) raiseUnexpectedToken('<expression>', token);\n      // Push in the marker created before the loop to wrap its entirety.\n      if (trackLocations) locations.push(marker);\n      expression = finishNode(ast.binaryExpression(operator, expression, right));\n\n    }\n    return expression;\n  }\n\n  //     prefixexp ::= prefix {suffix}\n  //     prefix ::= Name | '(' exp ')'\n  //     suffix ::= '[' exp ']' | '.' Name | ':' Name args | args\n  //\n  //     args ::= '(' [explist] ')' | tableconstructor | String\n\n  function parsePrefixExpression() {\n    var base, name, marker\n      // Keep track of the scope, if a parent is local so are the children.\n      , isLocal;\n\n    if (trackLocations) marker = createLocationMarker();\n\n    // The prefix\n    if (Identifier === token.type) {\n      name = token.value;\n      base = parseIdentifier();\n      // Set the parent scope.\n      if (options.scope) attachScope(base, isLocal = scopeHasName(name));\n    } else if (consume('(')) {\n      base = parseExpectedExpression();\n      expect(')');\n      if (options.scope) isLocal = base.isLocal;\n    } else {\n      return null;\n    }\n\n    // The suffix\n    var expression, identifier;\n    while (true) {\n      if (Punctuator === token.type) {\n        switch (token.value) {\n          case '[':\n            pushLocation(marker);\n            next();\n            expression = parseExpectedExpression();\n            base = finishNode(ast.indexExpression(base, expression));\n            expect(']');\n            break;\n          case '.':\n            pushLocation(marker);\n            next();\n            identifier = parseIdentifier();\n            // Inherit the scope\n            if (options.scope) attachScope(identifier, isLocal);\n            base = finishNode(ast.memberExpression(base, '.', identifier));\n            break;\n          case ':':\n            pushLocation(marker);\n            next();\n            identifier = parseIdentifier();\n            if (options.scope) attachScope(identifier, isLocal);\n            base = finishNode(ast.memberExpression(base, ':', identifier));\n            // Once a : is found, this has to be a CallExpression, otherwise\n            // throw an error.\n            pushLocation(marker);\n            base = parseCallExpression(base);\n            break;\n          case '(': case '{': // args\n            pushLocation(marker);\n            base = parseCallExpression(base);\n            break;\n          default:\n            return base;\n        }\n      } else if (StringLiteral === token.type) {\n        pushLocation(marker);\n        base = parseCallExpression(base);\n      } else {\n        break;\n      }\n    }\n\n    return base;\n  }\n\n  //     args ::= '(' [explist] ')' | tableconstructor | String\n\n  function parseCallExpression(base) {\n    if (Punctuator === token.type) {\n      switch (token.value) {\n        case '(':\n          next();\n\n          // List of expressions\n          var expressions = [];\n          var expression = parseExpression();\n          if (null != expression) expressions.push(expression);\n          while (consume(',')) {\n            expression = parseExpectedExpression();\n            expressions.push(expression);\n          }\n\n          expect(')');\n          return finishNode(ast.callExpression(base, expressions));\n\n        case '{':\n          markLocation();\n          next();\n          var table = parseTableConstructor();\n          return finishNode(ast.tableCallExpression(base, table));\n      }\n    } else if (StringLiteral === token.type) {\n      return finishNode(ast.stringCallExpression(base, parsePrimaryExpression()));\n    }\n\n    raiseUnexpectedToken('function arguments', token);\n  }\n\n  //     primary ::= String | Numeric | nil | true | false\n  //          | functiondef | tableconstructor | '...'\n\n  function parsePrimaryExpression() {\n    var literals = StringLiteral | NumericLiteral | BooleanLiteral | NilLiteral | VarargLiteral\n      , value = token.value\n      , type = token.type\n      , marker;\n\n    if (trackLocations) marker = createLocationMarker();\n\n    if (type & literals) {\n      pushLocation(marker);\n      var raw = input.slice(token.range[0], token.range[1]);\n      next();\n      return finishNode(ast.literal(type, value, raw));\n    } else if (Keyword === type && 'function' === value) {\n      pushLocation(marker);\n      next();\n      return parseFunctionDeclaration(null);\n    } else if (consume('{')) {\n      pushLocation(marker);\n      return parseTableConstructor();\n    }\n  }\n\n  // Parser\n  // ------\n\n  // Export the main parser.\n  //\n  //   - `wait` Hold parsing until end() is called. Defaults to false\n  //   - `comments` Store comments. Defaults to true.\n  //   - `scope` Track identifier scope. Defaults to false.\n  //\n  // Example:\n  //\n  //     var parser = require('luaparser');\n  //     parser.parse('i = 0');\n\n  exports.parse = parse;\n\n  function parse(_input, _options) {\n    if ('undefined' === typeof _options && 'object' === typeof _input) {\n      _options = _input;\n      _input = undefined;\n    }\n    if (!_options) _options = {};\n\n    input = _input || '';\n    options = extend(defaultOptions, _options);\n\n    // Rewind the lexer\n    index = 0;\n    line = 1;\n    lineStart = 0;\n    length = input.length;\n    // When tracking identifier scope, initialize with an empty scope.\n    scopes = [[]];\n    scopeDepth = 0;\n    globals = [];\n    locations = [];\n\n    if (options.comments) comments = [];\n    if (!options.wait) return end();\n    return exports;\n  }\n\n  // Write to the source code buffer without beginning the parse.\n  exports.write = write;\n\n  function write(_input) {\n    input += String(_input);\n    length = input.length;\n    return exports;\n  }\n\n  // Send an EOF and begin parsing.\n  exports.end = end;\n\n  function end(_input) {\n    if ('undefined' !== typeof _input) write(_input);\n\n    length = input.length;\n    trackLocations = options.locations || options.ranges;\n    // Initialize with a lookahead token.\n    lookahead = lex();\n\n    var chunk = parseChunk();\n    if (options.comments) chunk.comments = comments;\n    if (options.scope) chunk.globals = globals;\n\n    if (locations.length > 0)\n      throw new Error('Location tracking failed. This is most likely a bug in luaparse');\n\n    return chunk;\n  }\n\n}));\n/* vim: set sw=2 ts=2 et tw=79 : */\n\n});\n"
  },
  {
    "path": "lib/ace/mode/lua.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar LuaHighlightRules = require(\"./lua_highlight_rules\").LuaHighlightRules;\nvar LuaFoldMode = require(\"./folding/lua\").FoldMode;\nvar Range = require(\"../range\").Range;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\n\nvar Mode = function() {\n    this.HighlightRules = LuaHighlightRules;\n    \n    this.foldingRules = new LuaFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n   \n    this.lineCommentStart = \"--\";\n    this.blockComment = {start: \"--[\", end: \"]--\"};\n    \n    var indentKeywords = {\n        \"function\": 1,\n        \"then\": 1,\n        \"do\": 1,\n        \"else\": 1,\n        \"elseif\": 1,\n        \"repeat\": 1,\n        \"end\": -1,\n        \"until\": -1\n    };\n    var outdentKeywords = [\n        \"else\",\n        \"elseif\",\n        \"end\",\n        \"until\"\n    ];\n\n    function getNetIndentLevel(tokens) {\n        var level = 0;\n        // Support single-line blocks by decrementing the indent level if\n        // an ending token is found\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (token.type == \"keyword\") {\n                if (token.value in indentKeywords) {\n                    level += indentKeywords[token.value];\n                }\n            } else if (token.type == \"paren.lparen\") {\n                level += token.value.length;\n            } else if (token.type == \"paren.rparen\") {\n                level -= token.value.length;\n            }\n        }\n        // Limit the level to +/- 1 since usually users only indent one level\n        // at a time regardless of the logical nesting level\n        if (level < 0) {\n            return -1;\n        } else if (level > 0) {\n            return 1;\n        } else {\n            return 0;\n        }\n    }\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var level = 0;\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (state == \"start\") {\n            level = getNetIndentLevel(tokens);\n        }\n        if (level > 0) {\n            return indent + tab;\n        } else if (level < 0 && indent.substr(indent.length - tab.length) == tab) {\n            // Don't do a next-line outdent if we're going to do a real outdent of this line\n            if (!this.checkOutdent(state, line, \"\\n\")) {\n                return indent.substr(0, indent.length - tab.length);\n            }\n        }\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        if (input != \"\\n\" && input != \"\\r\" && input != \"\\r\\n\")\n            return false;\n\n        if (line.match(/^\\s*[\\)\\}\\]]$/))\n            return true;\n\n        var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens;\n\n        if (!tokens || !tokens.length)\n            return false;\n\n        return (tokens[0].type == \"keyword\" && outdentKeywords.indexOf(tokens[0].value) != -1);\n    };\n\n    this.autoOutdent = function(state, session, row) {\n        var prevLine = session.getLine(row - 1);\n        var prevIndent = this.$getIndent(prevLine).length;\n        var prevTokens = this.getTokenizer().getLineTokens(prevLine, \"start\").tokens;\n        var tabLength = session.getTabString().length;\n        var expectedIndent = prevIndent + tabLength * getNetIndentLevel(prevTokens);\n        var curIndent = this.$getIndent(session.getLine(row)).length;\n        if (curIndent <= expectedIndent) {\n            // User already outdented //\n            return;\n        }\n        session.outdentRows(new Range(row, 0, row + 2, 0));\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/lua_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        \n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n        \n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n        \n        return worker;\n    };\n\n    this.$id = \"ace/mode/lua\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\n\n"
  },
  {
    "path": "lib/ace/mode/lua_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar LuaHighlightRules = function() {\n\n    var keywords = (\n        \"break|do|else|elseif|end|for|function|if|in|local|repeat|\"+\n         \"return|then|until|while|or|and|not\"\n    );\n\n    var builtinConstants = (\"true|false|nil|_G|_VERSION\");\n\n    var functions = (\n      // builtinFunctions\n        \"string|xpcall|package|tostring|print|os|unpack|require|\"+\n        \"getfenv|setmetatable|next|assert|tonumber|io|rawequal|\"+\n        \"collectgarbage|getmetatable|module|rawset|math|debug|\"+\n        \"pcall|table|newproxy|type|coroutine|_G|select|gcinfo|\"+\n        \"pairs|rawget|loadstring|ipairs|_VERSION|dofile|setfenv|\"+\n        \"load|error|loadfile|\"+\n\n        \"sub|upper|len|gfind|rep|find|match|char|dump|gmatch|\"+\n        \"reverse|byte|format|gsub|lower|preload|loadlib|loaded|\"+\n        \"loaders|cpath|config|path|seeall|exit|setlocale|date|\"+\n        \"getenv|difftime|remove|time|clock|tmpname|rename|execute|\"+\n        \"lines|write|close|flush|open|output|type|read|stderr|\"+\n        \"stdin|input|stdout|popen|tmpfile|log|max|acos|huge|\"+\n        \"ldexp|pi|cos|tanh|pow|deg|tan|cosh|sinh|random|randomseed|\"+\n        \"frexp|ceil|floor|rad|abs|sqrt|modf|asin|min|mod|fmod|log10|\"+\n        \"atan2|exp|sin|atan|getupvalue|debug|sethook|getmetatable|\"+\n        \"gethook|setmetatable|setlocal|traceback|setfenv|getinfo|\"+\n        \"setupvalue|getlocal|getregistry|getfenv|setn|insert|getn|\"+\n        \"foreachi|maxn|foreach|concat|sort|remove|resume|yield|\"+\n        \"status|wrap|create|running|\"+\n      // metatableMethods\n        \"__add|__sub|__mod|__unm|__concat|__lt|__index|__call|__gc|__metatable|\"+\n         \"__mul|__div|__pow|__len|__eq|__le|__newindex|__tostring|__mode|__tonumber\"\n    );\n\n    var stdLibaries = (\"string|package|os|io|math|debug|table|coroutine\");\n\n    var deprecatedIn5152 = (\"setn|foreach|foreachi|gcinfo|log10|maxn\");\n\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"support.function\": functions,\n        \"keyword.deprecated\": deprecatedIn5152,\n        \"constant.library\": stdLibaries,\n        \"constant.language\": builtinConstants,\n        \"variable.language\": \"self\"\n    }, \"identifier\");\n\n    var decimalInteger = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n    var hexInteger = \"(?:0[xX][\\\\dA-Fa-f]+)\";\n    var integer = \"(?:\" + decimalInteger + \"|\" + hexInteger + \")\";\n\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var floatNumber = \"(?:\" + pointFloat + \")\";\n\n    this.$rules = {\n        \"start\" : [{\n            stateName: \"bracketedComment\",\n            onMatch : function(value, currentState, stack){\n                stack.unshift(this.next, value.length - 2, currentState);\n                return \"comment\";\n            },\n            regex : /\\-\\-\\[=*\\[/,\n            next  : [\n                {\n                    onMatch : function(value, currentState, stack) {\n                        if (value.length == stack[1]) {\n                            stack.shift();\n                            stack.shift();\n                            this.next = stack.shift();\n                        } else {\n                            this.next = \"\";\n                        }\n                        return \"comment\";\n                    },\n                    regex : /\\]=*\\]/,\n                    next  : \"start\"\n                }, {\n                    defaultToken : \"comment\"\n                }\n            ]\n        },\n\n        {\n            token : \"comment\",\n            regex : \"\\\\-\\\\-.*$\"\n        },\n        {\n            stateName: \"bracketedString\",\n            onMatch : function(value, currentState, stack){\n                stack.unshift(this.next, value.length, currentState);\n                return \"string.start\";\n            },\n            regex : /\\[=*\\[/,\n            next  : [\n                {\n                    onMatch : function(value, currentState, stack) {\n                        if (value.length == stack[1]) {\n                            stack.shift();\n                            stack.shift();\n                            this.next = stack.shift();\n                        } else {\n                            this.next = \"\";\n                        }\n                        return \"string.end\";\n                    },\n                    \n                    regex : /\\]=*\\]/,\n                    next  : \"start\"\n                }, {\n                    defaultToken : \"string\"\n                }\n            ]\n        },\n        {\n            token : \"string\",           // \" string\n            regex : '\"(?:[^\\\\\\\\]|\\\\\\\\.)*?\"'\n        }, {\n            token : \"string\",           // ' string\n            regex : \"'(?:[^\\\\\\\\]|\\\\\\\\.)*?'\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : floatNumber\n        }, {\n            token : \"constant.numeric\", // integer\n            regex : integer + \"\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"\\\\+|\\\\-|\\\\*|\\\\/|%|\\\\#|\\\\^|~|<|>|<=|=>|==|~=|=|\\\\:|\\\\.\\\\.\\\\.|\\\\.\\\\.\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[\\\\[\\\\(\\\\{]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\]\\\\)\\\\}]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+|\\\\w+\"\n        } ]\n    };\n    \n    this.normalizeRules();\n};\n\noop.inherits(LuaHighlightRules, TextHighlightRules);\n\nexports.LuaHighlightRules = LuaHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/lua_worker.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar Mirror = require(\"../worker/mirror\").Mirror;\nvar luaparse = require(\"../mode/lua/luaparse\");\n\nvar Worker = exports.Worker = function(sender) {\n    Mirror.call(this, sender);\n    this.setTimeout(500);\n};\n\noop.inherits(Worker, Mirror);\n\n(function() {\n\n    this.onUpdate = function() {\n        var value = this.doc.getValue();\n        var errors = [];\n        \n        // var t=Date.now()\n        try {\n            luaparse.parse(value);\n        } catch(e) {\n            if (e instanceof SyntaxError) {\n                errors.push({\n                    row: e.line - 1,\n                    column: e.column,\n                    text: e.message,\n                    type: \"error\"\n                });\n            }\n        }\n        // console.log( t-Date.now())\n        this.sender.emit(\"annotate\", errors);\n    };\n\n}).call(Worker.prototype);\n\n});\n"
  },
  {
    "path": "lib/ace/mode/luapage.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlMode = require(\"./html\").Mode;\nvar LuaMode = require(\"./lua\").Mode;\nvar LuaPageHighlightRules = require(\"./luapage_highlight_rules\").LuaPageHighlightRules;\n\nvar Mode = function() {\n    HtmlMode.call(this);\n    \n    this.HighlightRules = LuaPageHighlightRules;\n    this.createModeDelegates({\n        \"lua-\": LuaMode\n    });\n};\noop.inherits(Mode, HtmlMode);\n\n(function() {\n    this.$id = \"ace/mode/luapage\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});"
  },
  {
    "path": "lib/ace/mode/luapage_highlight_rules.js",
    "content": "// LuaPage implements the LuaPage markup as described by the Kepler Project's CGILua\n// documentation: http://keplerproject.github.com/cgilua/manual.html#templates\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar LuaHighlightRules = require(\"./lua_highlight_rules\").LuaHighlightRules;\n\nvar LuaPageHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n\n    var startRules = [\n        {\n            token: \"keyword\",\n            regex: \"<\\\\%\\\\=?\",\n            push: \"lua-start\"\n        }, {\n            token: \"keyword\",\n            regex: \"<\\\\?lua\\\\=?\",\n            push: \"lua-start\"\n        }\n    ];\n\n    var endRules = [\n        {\n            token: \"keyword\",\n            regex: \"\\\\%>\",\n            next: \"pop\"\n        }, {\n            token: \"keyword\",\n            regex: \"\\\\?>\",\n            next: \"pop\"\n        }\n    ];\n\n    this.embedRules(LuaHighlightRules, \"lua-\", endRules, [\"start\"]);\n\n    for (var key in this.$rules)\n        this.$rules[key].unshift.apply(this.$rules[key], startRules);\n\n    this.normalizeRules();\n};\n\noop.inherits(LuaPageHighlightRules, HtmlHighlightRules);\n\nexports.LuaPageHighlightRules = LuaPageHighlightRules;\n\n});"
  },
  {
    "path": "lib/ace/mode/lucene.js",
    "content": "define(function(require, exports, module) {\n'use strict';\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar LuceneHighlightRules = require(\"./lucene_highlight_rules\").LuceneHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = LuceneHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\n\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.$id = \"ace/mode/lucene\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});"
  },
  {
    "path": "lib/ace/mode/lucene_highlight_rules.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar LuceneHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"constant.character.negation\",\n                regex : \"[\\\\-]\"\n            }, {\n                token : \"constant.character.interro\",\n                regex : \"[\\\\?]\"\n            }, {\n                token : \"constant.character.asterisk\",\n                regex : \"[\\\\*]\"\n            }, {\n                token: 'constant.character.proximity',\n                regex: '~[0-9]+\\\\b'\n            }, {\n                token : 'keyword.operator',\n                regex: '(?:AND|OR|NOT)\\\\b'\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[\\\\(]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\)]\"\n            }, {\n                token : \"keyword\",\n                regex : \"[\\\\S]+:\"\n            }, {\n                token : \"string\",           // \" string\n                regex : '\".*?\"'\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ]\n    };\n};\n\noop.inherits(LuceneHighlightRules, TextHighlightRules);\n\nexports.LuceneHighlightRules = LuceneHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/makefile.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar MakefileHighlightRules = require(\"./makefile_highlight_rules\").MakefileHighlightRules;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = MakefileHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n       \n    this.lineCommentStart = \"#\";    \n    this.$indentWithTabs = true;\n    \n    this.$id = \"ace/mode/makefile\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});"
  },
  {
    "path": "lib/ace/mode/makefile_highlight_rules.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar ShHighlightFile = require(\"./sh_highlight_rules\");\n\nvar MakefileHighlightRules = function() {\n\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": ShHighlightFile.reservedKeywords,\n        \"support.function.builtin\": ShHighlightFile.languageConstructs,\n        \"invalid.deprecated\": \"debugger\"\n    }, \"string\");\n\n    this.$rules = \n        {\n    \"start\": [\n        {\n            token: \"string.interpolated.backtick.makefile\",\n            regex: \"`\",\n            next: \"shell-start\"\n        },\n        {\n            token: \"punctuation.definition.comment.makefile\",\n            regex: /#(?=.)/,\n            next: \"comment\"\n        },\n        {\n            token: [ \"keyword.control.makefile\"],\n            regex: \"^(?:\\\\s*\\\\b)(\\\\-??include|ifeq|ifneq|ifdef|ifndef|else|endif|vpath|export|unexport|define|endef|override)(?:\\\\b)\"\n        },\n        {// ^([^\\t ]+(\\s[^\\t ]+)*:(?!\\=))\\s*.*\n            token: [\"entity.name.function.makefile\", \"text\"],\n            regex: \"^([^\\\\t ]+(?:\\\\s[^\\\\t ]+)*:)(\\\\s*.*)\"\n        }\n    ],\n    \"comment\": [\n        {\n            token : \"punctuation.definition.comment.makefile\",\n            regex : /.+\\\\/\n        },\n        {\n            token : \"punctuation.definition.comment.makefile\",\n            regex : \".+\",\n            next  : \"start\"\n        }\n    ],\n    \"shell-start\": [\n        {\n            token: keywordMapper,\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, \n        {\n            token: \"string\",\n            regex : \"\\\\w+\"\n        }, \n        {\n            token : \"string.interpolated.backtick.makefile\",\n            regex : \"`\",\n            next  : \"start\"\n        }\n    ]\n};\n\n};\n\noop.inherits(MakefileHighlightRules, TextHighlightRules);\n\nexports.MakefileHighlightRules = MakefileHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/markdown.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar XmlMode = require(\"./xml\").Mode;\nvar HtmlMode = require(\"./html\").Mode;\nvar MarkdownHighlightRules = require(\"./markdown_highlight_rules\").MarkdownHighlightRules;\nvar MarkdownFoldMode = require(\"./folding/markdown\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = MarkdownHighlightRules;\n\n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"xml-\": XmlMode,\n        \"html-\": HtmlMode\n    });\n\n    this.foldingRules = new MarkdownFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.type = \"text\";\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        if (state == \"listblock\") {\n            var match = /^(\\s*)(?:([-+*])|(\\d+)\\.)(\\s+)/.exec(line);\n            if (!match)\n                return \"\";\n            var marker = match[2];\n            if (!marker)\n                marker = parseInt(match[3], 10) + 1 + \".\";\n            return match[1] + marker + match[4];\n        } else {\n            return this.$getIndent(line);\n        }\n    };\n    this.$id = \"ace/mode/markdown\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/markdown_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\n\nvar escaped = function(ch) {\n    return \"(?:[^\" + lang.escapeRegExp(ch) + \"\\\\\\\\]|\\\\\\\\.)*\";\n};\n\nfunction github_embed(tag, prefix) {\n    return { // Github style block\n        token : \"support.function\",\n        regex : \"^\\\\s*```\" + tag + \"\\\\s*$\",\n        push  : prefix + \"start\"\n    };\n}\n\nvar MarkdownHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n    // regexp must not have capturing parentheses\n    // regexps are ordered -> the first match is used\n\n    this.$rules[\"start\"].unshift({\n        token : \"empty_line\",\n        regex : '^$',\n        next: \"allowBlock\"\n    }, { // h1\n        token: \"markup.heading.1\",\n        regex: \"^=+(?=\\\\s*$)\"\n    }, { // h2\n        token: \"markup.heading.2\",\n        regex: \"^\\\\-+(?=\\\\s*$)\"\n    }, {\n        token : function(value) {\n            return \"markup.heading.\" + value.length;\n        },\n        regex : /^#{1,6}(?=\\s*[^ #]|\\s+#.)/,\n        next : \"header\"\n    },\n       github_embed(\"(?:javascript|js)\", \"jscode-\"),\n       github_embed(\"xml\", \"xmlcode-\"),\n       github_embed(\"html\", \"htmlcode-\"),\n       github_embed(\"css\", \"csscode-\"),\n    { // Github style block\n        token : \"support.function\",\n        regex : \"^\\\\s*```\\\\s*\\\\S*(?:{.*?\\\\})?\\\\s*$\",\n        next  : \"githubblock\"\n    }, { // block quote\n        token : \"string.blockquote\",\n        regex : \"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",\n        next  : \"blockquote\"\n    }, { // HR * - _\n        token : \"constant\",\n        regex : \"^ {0,2}(?:(?: ?\\\\* ?){3,}|(?: ?\\\\- ?){3,}|(?: ?\\\\_ ?){3,})\\\\s*$\",\n        next: \"allowBlock\"\n    }, { // list\n        token : \"markup.list\",\n        regex : \"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",\n        next  : \"listblock-start\"\n    }, {\n        include : \"basic\"\n    });\n\n    this.addRules({\n        \"basic\" : [{\n            token : \"constant.language.escape\",\n            regex : /\\\\[\\\\`*_{}\\[\\]()#+\\-.!]/\n        }, { // code span `\n            token : \"support.function\",\n            regex : \"(`+)(.*?[^`])(\\\\1)\"\n        }, { // reference\n            token : [\"text\", \"constant\", \"text\", \"url\", \"string\", \"text\"],\n            regex : \"^([ ]{0,3}\\\\[)([^\\\\]]+)(\\\\]:\\\\s*)([^ ]+)(\\\\s*(?:[\\\"][^\\\"]+[\\\"])?(\\\\s*))$\"\n        }, { // link by reference\n            token : [\"text\", \"string\", \"text\", \"constant\", \"text\"],\n            regex : \"(\\\\[)(\" + escaped(\"]\") + \")(\\\\]\\\\s*\\\\[)(\"+ escaped(\"]\") + \")(\\\\])\"\n        }, { // link by url\n            token : [\"text\", \"string\", \"text\", \"markup.underline\", \"string\", \"text\"],\n            regex : \"(\\\\[)(\" +                                        // [\n                    escaped(\"]\") +                                    // link text\n                    \")(\\\\]\\\\()\"+                                      // ](\n                    '((?:[^\\\\)\\\\s\\\\\\\\]|\\\\\\\\.|\\\\s(?=[^\"]))*)' +        // href\n                    '(\\\\s*\"' +  escaped('\"') + '\"\\\\s*)?' +            // \"title\"\n                    \"(\\\\))\"                                           // )\n        }, { // strong ** __\n            token : \"string.strong\",\n            regex : \"([*]{2}|[_]{2}(?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"\n        }, { // emphasis * _\n            token : \"string.emphasis\",\n            regex : \"([*]|[_](?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"\n        }, { //\n            token : [\"text\", \"url\", \"text\"],\n            regex : \"(<)(\"+\n                      \"(?:https?|ftp|dict):[^'\\\">\\\\s]+\"+\n                      \"|\"+\n                      \"(?:mailto:)?[-.\\\\w]+\\\\@[-a-z0-9]+(?:\\\\.[-a-z0-9]+)*\\\\.[a-z]+\"+\n                    \")(>)\"\n        }],\n\n        // code block\n        \"allowBlock\": [\n            {token : \"support.function\", regex : \"^ {4}.+\", next : \"allowBlock\"},\n            {token : \"empty_line\", regex : '^$', next: \"allowBlock\"},\n            {token : \"empty\", regex : \"\", next : \"start\"}\n        ],\n\n        \"header\" : [{\n            regex: \"$\",\n            next : \"start\"\n        }, {\n            include: \"basic\"\n        }, {\n            defaultToken : \"heading\"\n        } ],\n\n        \"listblock-start\" : [{\n            token : \"support.variable\",\n            regex : /(?:\\[[ x]\\])?/,\n            next  : \"listblock\"\n        }],\n\n        \"listblock\" : [ { // Lists only escape on completely blank lines.\n            token : \"empty_line\",\n            regex : \"^$\",\n            next  : \"start\"\n        }, { // list\n            token : \"markup.list\",\n            regex : \"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",\n            next  : \"listblock-start\"\n        }, {\n            include : \"basic\", noEscape: true\n        }, { // Github style block\n            token : \"support.function\",\n            regex : \"^\\\\s*```\\\\s*[a-zA-Z]*(?:{.*?\\\\})?\\\\s*$\",\n            next  : \"githubblock\"\n        }, {\n            defaultToken : \"list\" //do not use markup.list to allow stling leading `*` differntly\n        } ],\n\n        \"blockquote\" : [ { // Blockquotes only escape on blank lines.\n            token : \"empty_line\",\n            regex : \"^\\\\s*$\",\n            next  : \"start\"\n        }, { // block quote\n            token : \"string.blockquote\",\n            regex : \"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",\n            next  : \"blockquote\"\n        }, {\n            include : \"basic\", noEscape: true\n        }, {\n            defaultToken : \"string.blockquote\"\n        } ],\n\n        \"githubblock\" : [ {\n            token : \"support.function\",\n            regex : \"^\\\\s*```\",\n            next  : \"start\"\n        }, {\n            defaultToken : \"support.function\"\n        } ]\n    });\n\n    this.embedRules(JavaScriptHighlightRules, \"jscode-\", [{\n       token : \"support.function\",\n       regex : \"^\\\\s*```\",\n       next  : \"pop\"\n    }]);\n\n    this.embedRules(HtmlHighlightRules, \"htmlcode-\", [{\n       token : \"support.function\",\n       regex : \"^\\\\s*```\",\n       next  : \"pop\"\n    }]);\n\n    this.embedRules(CssHighlightRules, \"csscode-\", [{\n       token : \"support.function\",\n       regex : \"^\\\\s*```\",\n       next  : \"pop\"\n    }]);\n\n    this.embedRules(XmlHighlightRules, \"xmlcode-\", [{\n       token : \"support.function\",\n       regex : \"^\\\\s*```\",\n       next  : \"pop\"\n    }]);\n\n    this.normalizeRules();\n};\noop.inherits(MarkdownHighlightRules, TextHighlightRules);\n\nexports.MarkdownHighlightRules = MarkdownHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/mask.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2014, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar MaskHighlightRules = require(\"./mask_highlight_rules\").MaskHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = MaskHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n   \n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        // ignore braces in comments\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/mask\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n"
  },
  {
    "path": "lib/ace/mode/mask_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2014, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nexports.MaskHighlightRules = MaskHighlightRules;\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextRules   = require(\"./text_highlight_rules\").TextHighlightRules;\nvar JSRules     = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar CssRules    = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MDRules     = require(\"./markdown_highlight_rules\").MarkdownHighlightRules;\nvar HTMLRules   = require(\"./html_highlight_rules\").HtmlHighlightRules;\n\nvar token_TAG       = \"keyword.support.constant.language\",\n    token_COMPO     = \"support.function.markup.bold\",\n    token_KEYWORD   = \"keyword\",\n    token_LANG      = \"constant.language\",\n    token_UTIL      = \"keyword.control.markup.italic\",\n    token_ATTR      = \"support.variable.class\",\n    token_PUNKT     = \"keyword.operator\",\n    token_ITALIC    = \"markup.italic\",\n    token_BOLD      = \"markup.bold\",\n    token_LPARE     = \"paren.lparen\",\n    token_RPARE     = \"paren.rparen\";\n\nvar const_FUNCTIONS,\n    const_KEYWORDS,\n    const_CONST,\n    const_TAGS;\n(function(){\n    const_FUNCTIONS = lang.arrayToMap(\n        (\"log\").split(\"|\")\n    );\n    const_CONST = lang.arrayToMap(\n        (\":dualbind|:bind|:import|slot|event|style|html|markdown|md\").split(\"|\")\n    );\n    const_KEYWORDS = lang.arrayToMap(\n        (\"debugger|define|var|if|each|for|of|else|switch|case|with|visible|+if|+each|+for|+switch|+with|+visible|include|import\").split(\"|\")\n    );\n    const_TAGS = lang.arrayToMap(\n        (\"a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|\" + \n         \"big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|\" + \n         \"command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|\" + \n         \"figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|\" + \n         \"header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|\" + \n         \"link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|\" + \n         \"option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|\" + \n         \"small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|\" + \n         \"textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp\").split(\"|\")\n    );\n}());\n\nfunction MaskHighlightRules () {\n\n    this.$rules = {\n        \"start\" : [\n            Token(\"comment\", \"\\\\/\\\\/.*$\"),\n            Token(\"comment\", \"\\\\/\\\\*\", [\n                Token(\"comment\", \".*?\\\\*\\\\/\", \"start\"),\n                Token(\"comment\", \".+\")\n            ]),\n            \n            Blocks.string(\"'''\"),\n            Blocks.string('\"\"\"'),\n            Blocks.string('\"'),\n            Blocks.string(\"'\"),\n            \n            Blocks.syntax(/(markdown|md)\\b/, \"md-multiline\", \"multiline\"),\n            Blocks.syntax(/html\\b/, \"html-multiline\", \"multiline\"),\n            Blocks.syntax(/(slot|event)\\b/, \"js-block\", \"block\"),\n            Blocks.syntax(/style\\b/, \"css-block\", \"block\"),\n            Blocks.syntax(/var\\b/, \"js-statement\", \"attr\"),\n            \n            Blocks.tag(),\n            \n            Token(token_LPARE, \"[[({>]\"),\n            Token(token_RPARE, \"[\\\\])};]\", \"start\"),\n            {\n                caseInsensitive: true\n            }\n        ]\n    };\n    var rules = this;\n    \n    addJavaScript(\"interpolation\", /\\]/, token_RPARE + \".\" + token_ITALIC);\n    addJavaScript(\"statement\", /\\)|}|;/);\n    addJavaScript(\"block\", /\\}/);\n    addCss();\n    addMarkdown();\n    addHtml();\n    \n    function addJavaScript(name, escape, closeType) {\n        var prfx  =  \"js-\" + name + \"-\",\n            rootTokens = name === \"block\" ? [\"start\"] : [\"start\", \"no_regex\"];\n        add(\n            JSRules\n            , prfx\n            , escape\n            , rootTokens\n            , closeType\n        );\n    }\n    function addCss() {\n        add(CssRules, \"css-block-\", /\\}/);\n    }\n    function addMarkdown() {\n        add(MDRules, \"md-multiline-\", /(\"\"\"|''')/, []);\n    }\n    function addHtml() {\n        add(HTMLRules, \"html-multiline-\", /(\"\"\"|''')/);\n    }\n    function add(Rules, strPrfx, rgxEnd, rootTokens, closeType) {\n        var next = \"pop\";\n        var tokens = rootTokens || [ \"start\" ];\n        if (tokens.length === 0) {\n            tokens = null;\n        }\n        if (/block|multiline/.test(strPrfx)) {\n            next = strPrfx + \"end\";\n            rules.$rules[next] = [\n                Token(\"empty\", \"\", \"start\")\n            ];\n        }\n        rules.embedRules(\n            Rules\n            , strPrfx\n            , [ Token(closeType || token_RPARE, rgxEnd, next) ]\n            , tokens\n            , tokens == null ? true : false\n        );\n    }\n\n    this.normalizeRules();\n}\noop.inherits(MaskHighlightRules, TextRules);\n\nvar Blocks = {\n    string: function(str, next){\n        var token = Token(\n            \"string.start\"\n            , str\n            , [\n                Token(token_LPARE + \".\" + token_ITALIC, /~\\[/, Blocks.interpolation()),\n                Token(\"string.end\", str, \"pop\"),\n                {\n                    defaultToken: \"string\"\n                }\n            ]\n            , next\n        );\n        if (str.length === 1){\n            var escaped = Token(\"string.escape\", \"\\\\\\\\\" + str);\n            token.push.unshift(escaped);\n        }\n        return token;\n    },\n    interpolation: function(){\n        return [\n            Token(token_UTIL, /\\s*\\w*\\s*:/),\n            \"js-interpolation-start\"\n        ];\n    },\n    tagHead: function (rgx) {\n      return Token(token_ATTR, rgx, [\n            Token(token_ATTR, /[\\w\\-_]+/),\n            Token(token_LPARE + \".\" + token_ITALIC, /~\\[/, Blocks.interpolation()),\n            Blocks.goUp()\n        ]);\n    },\n    tag: function () {\n        return {\n            token: 'tag',\n            onMatch :  function(value) {\n                if (void 0 !== const_KEYWORDS[value])\n                    return token_KEYWORD;\n                if (void 0 !== const_CONST[value])\n                    return token_LANG;\n                if (void 0 !== const_FUNCTIONS[value])\n                    return \"support.function\";\n                if (void 0 !== const_TAGS[value.toLowerCase()])\n                    return token_TAG;\n                \n                return token_COMPO;\n            },\n            regex : /([@\\w\\-_:+]+)|((^|\\s)(?=\\s*(\\.|#)))/,\n            push: [\n                Blocks.tagHead(/\\./) ,\n                Blocks.tagHead(/#/) ,\n                Blocks.expression(),\n                Blocks.attribute(),\n                \n                Token(token_LPARE, /[;>{]/, \"pop\")\n            ]\n        };\n    },\n    syntax: function(rgx, next, type){\n        return {\n            token: token_LANG,\n            regex : rgx,\n            push: ({\n                \"attr\": [\n                    next + \"-start\",\n                    Token(token_PUNKT, /;/, \"start\")\n                ],\n                \"multiline\": [\n                    Blocks.tagHead(/\\./) ,\n                    Blocks.tagHead(/#/) ,\n                    Blocks.attribute(),\n                    Blocks.expression(),\n                    Token(token_LPARE, /[>\\{]/),\n                    Token(token_PUNKT, /;/, \"start\"),\n                    Token(token_LPARE, /'''|\"\"\"/, [ next + \"-start\" ])\n                ],\n                \"block\": [\n                    Blocks.tagHead(/\\./) ,\n                    Blocks.tagHead(/#/) ,\n                    Blocks.attribute(),\n                    Blocks.expression(),\n                    Token(token_LPARE, /\\{/, [ next + \"-start\" ])\n                ]\n            })[type]\n        };\n    },\n    attribute: function(){\n        return Token(function(value){\n            return  /^x\\-/.test(value)\n                ? token_ATTR + \".\" + token_BOLD\n                : token_ATTR;\n        }, /[\\w_-]+/, [\n            Token(token_PUNKT, /\\s*=\\s*/, [\n                Blocks.string('\"'),\n                Blocks.string(\"'\"),\n                Blocks.word(),\n                Blocks.goUp()\n            ]),\n            Blocks.goUp()\n        ]);\n    },\n    expression: function(){\n        return Token(token_LPARE, /\\(/, [ \"js-statement-start\" ]);\n    },\n    word: function(){\n        return Token(\"string\", /[\\w-_]+/);\n    },\n    goUp: function(){\n        return Token(\"text\", \"\", \"pop\");\n    },\n    goStart: function(){\n        return Token(\"text\", \"\", \"start\");\n    }\n};\n\n\nfunction Token(token, rgx, mix) {\n    var push, next, onMatch;\n    if (arguments.length === 4) {\n        push = mix;\n        next = arguments[3];\n    }\n    else if (typeof mix === \"string\") {\n        next = mix;\n    }\n    else {\n        push = mix;\n    }\n    if (typeof token === \"function\") {\n        onMatch = token;\n        token   = \"empty\";\n    }\n    return {\n        token: token,\n        regex: rgx,\n        push: push,\n        next: next,\n        onMatch: onMatch\n    };\n}\n\n});\n"
  },
  {
    "path": "lib/ace/mode/matching_brace_outdent.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n"
  },
  {
    "path": "lib/ace/mode/matching_parens_outdent.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingParensOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\)/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\))/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        var match = line.match(/^(\\s+)/);\n        if (match) {\n            return match[1];\n        }\n\n        return \"\";\n    };\n\n}).call(MatchingParensOutdent.prototype);\n\nexports.MatchingParensOutdent = MatchingParensOutdent;\n});\n"
  },
  {
    "path": "lib/ace/mode/matlab.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar MatlabHighlightRules = require(\"./matlab_highlight_rules\").MatlabHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = MatlabHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"%\";\n    this.blockComment = {start: \"%{\", end: \"%}\"};\n\n    this.$id = \"ace/mode/matlab\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\n"
  },
  {
    "path": "lib/ace/mode/matlab_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar MatlabHighlightRules = function() {\n\nvar keywords = (\n        \"break|case|catch|classdef|continue|else|elseif|end|for|function|global|if|otherwise|parfor|persistent|return|spmd|switch|try|while\"\n    );\n\n    var builtinConstants = (\n        \"true|false|inf|Inf|nan|NaN|eps|pi|ans|nargin|nargout|varargin|varargout\"\n    );\n\n    var builtinFunctions = (\n        \"abs|accumarray|acos(?:d|h)?|acot(?:d|h)?|acsc(?:d|h)?|actxcontrol(?:list|select)?|actxGetRunningServer|actxserver|addlistener|addpath|addpref|addtodate|\"+\n\t\t\"airy|align|alim|all|allchild|alpha|alphamap|amd|ancestor|and|angle|annotation|any|area|arrayfun|asec(?:d|h)?|asin(?:d|h)?|assert|assignin|atan(?:2|d|h)?|\" +\n\t\t\"audiodevinfo|audioplayer|audiorecorder|aufinfo|auread|autumn|auwrite|avifile|aviinfo|aviread|axes|axis|balance|bar(?:3|3h|h)?|base2dec|beep|BeginInvoke|bench|\"+\n\t\t\"bessel(?:h|i|j|k|y)|beta|betainc|betaincinv|betaln|bicg|bicgstab|bicgstabl|bin2dec|bitand|bitcmp|bitget|bitmax|bitnot|bitor|bitset|bitshift|bitxor|blanks|blkdiag|\"+\n\t\t\"bone|box|brighten|brush|bsxfun|builddocsearchdb|builtin|bvp4c|bvp5c|bvpget|bvpinit|bvpset|bvpxtend|calendar|calllib|callSoapService|camdolly|cameratoolbar|camlight|\"+\n\t\t\"camlookat|camorbit|campan|campos|camproj|camroll|camtarget|camup|camva|camzoom|cart2pol|cart2sph|cast|cat|caxis|cd|cdf2rdf|cdfepoch|cdfinfo|cdflib(?:.(?:close|closeVar|\"+\n\t\t\"computeEpoch|computeEpoch16|create|createAttr|createVar|delete|deleteAttr|deleteAttrEntry|deleteAttrgEntry|deleteVar|deleteVarRecords|epoch16Breakdown|epochBreakdown|getAttrEntry|\"+\n\t\t\"getAttrgEntry|getAttrMaxEntry|getAttrMaxgEntry|getAttrName|getAttrNum|getAttrScope|getCacheSize|getChecksum|getCompression|getCompressionCacheSize|getConstantNames|\"+\n\t\t\"getConstantValue|getCopyright|getFileBackward|getFormat|getLibraryCopyright|getLibraryVersion|getMajority|getName|getNumAttrEntries|getNumAttrgEntries|getNumAttributes|\"+\n\t\t\"getNumgAttributes|getReadOnlyMode|getStageCacheSize|getValidate|getVarAllocRecords|getVarBlockingFactor|getVarCacheSize|getVarCompression|getVarData|getVarMaxAllocRecNum|\"+\n\t\t\"getVarMaxWrittenRecNum|getVarName|getVarNum|getVarNumRecsWritten|getVarPadValue|getVarRecordData|getVarReservePercent|getVarsMaxWrittenRecNum|getVarSparseRecords|getVersion|\"+\n\t\t\"hyperGetVarData|hyperPutVarData|inquire|inquireAttr|inquireAttrEntry|inquireAttrgEntry|inquireVar|open|putAttrEntry|putAttrgEntry|putVarData|putVarRecordData|renameAttr|\"+\n\t\t\"renameVar|setCacheSize|setChecksum|setCompression|setCompressionCacheSize|setFileBackward|setFormat|setMajority|setReadOnlyMode|setStageCacheSize|setValidate|\"+\n\t\t\"setVarAllocBlockRecords|setVarBlockingFactor|setVarCacheSize|setVarCompression|setVarInitialRecs|setVarPadValue|SetVarReservePercent|setVarsCacheSize|setVarSparseRecords))?|\"+\n\t\t\"cdfread|cdfwrite|ceil|cell2mat|cell2struct|celldisp|cellfun|cellplot|cellstr|cgs|checkcode|checkin|checkout|chol|cholinc|cholupdate|circshift|cla|clabel|class|clc|clear|\"+\n\t\t\"clearvars|clf|clipboard|clock|close|closereq|cmopts|cmpermute|cmunique|colamd|colon|colorbar|colordef|colormap|colormapeditor|colperm|Combine|comet|comet3|commandhistory|\"+\n\t\t\"commandwindow|compan|compass|complex|computer|cond|condeig|condest|coneplot|conj|containers.Map|contour(?:3|c|f|slice)?|contrast|conv|conv2|convhull|convhulln|convn|cool|\"+\n\t\t\"copper|copyfile|copyobj|corrcoef|cos(?:d|h)?|cot(?:d|h)?|cov|cplxpair|cputime|createClassFromWsdl|createSoapMessage|cross|csc(?:d|h)?|csvread|csvwrite|ctranspose|cumprod|\"+\n\t\t\"cumsum|cumtrapz|curl|customverctrl|cylinder|daqread|daspect|datacursormode|datatipinfo|date|datenum|datestr|datetick|datevec|dbclear|dbcont|dbdown|dblquad|dbmex|dbquit|\"+\n\t\t\"dbstack|dbstatus|dbstep|dbstop|dbtype|dbup|dde23|ddeget|ddesd|ddeset|deal|deblank|dec2base|dec2bin|dec2hex|decic|deconv|del2|delaunay|delaunay3|delaunayn|DelaunayTri|delete|\"+\n\t\t\"demo|depdir|depfun|det|detrend|deval|diag|dialog|diary|diff|diffuse|dir|disp|display|dither|divergence|dlmread|dlmwrite|dmperm|doc|docsearch|dos|dot|dragrect|drawnow|dsearch|\"+\n\t\t\"dsearchn|dynamicprops|echo|echodemo|edit|eig|eigs|ellipj|ellipke|ellipsoid|empty|enableNETfromNetworkDrive|enableservice|EndInvoke|enumeration|eomday|eq|erf|erfc|erfcinv|\"+\n\t\t\"erfcx|erfinv|error|errorbar|errordlg|etime|etree|etreeplot|eval|evalc|evalin|event.(?:EventData|listener|PropertyEvent|proplistener)|exifread|exist|exit|exp|expint|expm|\"+\n\t\t\"expm1|export2wsdlg|eye|ezcontour|ezcontourf|ezmesh|ezmeshc|ezplot|ezplot3|ezpolar|ezsurf|ezsurfc|factor|factorial|fclose|feather|feature|feof|ferror|feval|fft|fft2|fftn|\"+\n\t\t\"fftshift|fftw|fgetl|fgets|fieldnames|figure|figurepalette|fileattrib|filebrowser|filemarker|fileparts|fileread|filesep|fill|fill3|filter|filter2|find|findall|findfigs|\"+\n\t\t\"findobj|findstr|finish|fitsdisp|fitsinfo|fitsread|fitswrite|fix|flag|flipdim|fliplr|flipud|floor|flow|fminbnd|fminsearch|fopen|format|fplot|fprintf|frame2im|fread|freqspace|\"+\n\t\t\"frewind|fscanf|fseek|ftell|FTP|full|fullfile|func2str|functions|funm|fwrite|fzero|gallery|gamma|gammainc|gammaincinv|gammaln|gca|gcbf|gcbo|gcd|gcf|gco|ge|genpath|genvarname|\"+\n\t\t\"get|getappdata|getenv|getfield|getframe|getpixelposition|getpref|ginput|gmres|gplot|grabcode|gradient|gray|graymon|grid|griddata(?:3|n)?|griddedInterpolant|gsvd|gt|gtext|\"+\n\t\t\"guidata|guide|guihandles|gunzip|gzip|h5create|h5disp|h5info|h5read|h5readatt|h5write|h5writeatt|hadamard|handle|hankel|hdf|hdf5|hdf5info|hdf5read|hdf5write|hdfinfo|\"+\n\t\t\"hdfread|hdftool|help|helpbrowser|helpdesk|helpdlg|helpwin|hess|hex2dec|hex2num|hgexport|hggroup|hgload|hgsave|hgsetget|hgtransform|hidden|hilb|hist|histc|hold|home|horzcat|\"+\n\t\t\"hostid|hot|hsv|hsv2rgb|hypot|ichol|idivide|ifft|ifft2|ifftn|ifftshift|ilu|im2frame|im2java|imag|image|imagesc|imapprox|imfinfo|imformats|import|importdata|imread|imwrite|\"+\n\t\t\"ind2rgb|ind2sub|inferiorto|info|inline|inmem|inpolygon|input|inputdlg|inputname|inputParser|inspect|instrcallback|instrfind|instrfindall|int2str|integral(?:2|3)?|interp(?:1|\"+\n\t\t\"1q|2|3|ft|n)|interpstreamspeed|intersect|intmax|intmin|inv|invhilb|ipermute|isa|isappdata|iscell|iscellstr|ischar|iscolumn|isdir|isempty|isequal|isequaln|isequalwithequalnans|\"+\n\t\t\"isfield|isfinite|isfloat|isglobal|ishandle|ishghandle|ishold|isinf|isinteger|isjava|iskeyword|isletter|islogical|ismac|ismatrix|ismember|ismethod|isnan|isnumeric|isobject|\"+\n\t\t\"isocaps|isocolors|isonormals|isosurface|ispc|ispref|isprime|isprop|isreal|isrow|isscalar|issorted|isspace|issparse|isstr|isstrprop|isstruct|isstudent|isunix|isvarname|\"+\n\t\t\"isvector|javaaddpath|javaArray|javachk|javaclasspath|javacomponent|javaMethod|javaMethodEDT|javaObject|javaObjectEDT|javarmpath|jet|keyboard|kron|lasterr|lasterror|\"+\n\t\t\"lastwarn|lcm|ldivide|ldl|le|legend|legendre|length|libfunctions|libfunctionsview|libisloaded|libpointer|libstruct|license|light|lightangle|lighting|lin2mu|line|lines|\"+\n\t\t\"linkaxes|linkdata|linkprop|linsolve|linspace|listdlg|listfonts|load|loadlibrary|loadobj|log|log10|log1p|log2|loglog|logm|logspace|lookfor|lower|ls|lscov|lsqnonneg|lsqr|\"+\n\t\t\"lt|lu|luinc|magic|makehgtform|mat2cell|mat2str|material|matfile|matlab.io.MatFile|matlab.mixin.(?:Copyable|Heterogeneous(?:.getDefaultScalarElement)?)|matlabrc|\"+\n\t\t\"matlabroot|max|maxNumCompThreads|mean|median|membrane|memmapfile|memory|menu|mesh|meshc|meshgrid|meshz|meta.(?:class(?:.fromName)?|DynamicProperty|EnumeratedValue|event|\"+\n\t\t\"MetaData|method|package(?:.(?:fromName|getAllPackages))?|property)|metaclass|methods|methodsview|mex(?:.getCompilerConfigurations)?|MException|mexext|mfilename|min|minres|\"+\n\t\t\"minus|mislocked|mkdir|mkpp|mldivide|mlint|mlintrpt|mlock|mmfileinfo|mmreader|mod|mode|more|move|movefile|movegui|movie|movie2avi|mpower|mrdivide|msgbox|mtimes|mu2lin|\"+\n\t\t\"multibandread|multibandwrite|munlock|namelengthmax|nargchk|narginchk|nargoutchk|native2unicode|nccreate|ncdisp|nchoosek|ncinfo|ncread|ncreadatt|ncwrite|ncwriteatt|\"+\n\t\t\"ncwriteschema|ndgrid|ndims|ne|NET(?:.(?:addAssembly|Assembly|convertArray|createArray|createGeneric|disableAutoRelease|enableAutoRelease|GenericClass|invokeGenericMethod|\"+\n\t\t\"NetException|setStaticProperty))?|netcdf.(?:abort|close|copyAtt|create|defDim|defGrp|defVar|defVarChunking|defVarDeflate|defVarFill|defVarFletcher32|delAtt|endDef|getAtt|\"+\n\t\t\"getChunkCache|getConstant|getConstantNames|getVar|inq|inqAtt|inqAttID|inqAttName|inqDim|inqDimID|inqDimIDs|inqFormat|inqGrpName|inqGrpNameFull|inqGrpParent|inqGrps|\"+\n\t\t\"inqLibVers|inqNcid|inqUnlimDims|inqVar|inqVarChunking|inqVarDeflate|inqVarFill|inqVarFletcher32|inqVarID|inqVarIDs|open|putAtt|putVar|reDef|renameAtt|renameDim|renameVar|\"+\n\t\t\"setChunkCache|setDefaultFormat|setFill|sync)|newplot|nextpow2|nnz|noanimate|nonzeros|norm|normest|not|notebook|now|nthroot|null|num2cell|num2hex|num2str|numel|nzmax|\"+\n\t\t\"ode(?:113|15i|15s|23|23s|23t|23tb|45)|odeget|odeset|odextend|onCleanup|ones|open|openfig|opengl|openvar|optimget|optimset|or|ordeig|orderfields|ordqz|ordschur|orient|\"+\n\t\t\"orth|pack|padecoef|pagesetupdlg|pan|pareto|parseSoapResponse|pascal|patch|path|path2rc|pathsep|pathtool|pause|pbaspect|pcg|pchip|pcode|pcolor|pdepe|pdeval|peaks|perl|perms|\"+\n\t\t\"permute|pie|pink|pinv|planerot|playshow|plot|plot3|plotbrowser|plotedit|plotmatrix|plottools|plotyy|plus|pol2cart|polar|poly|polyarea|polyder|polyeig|polyfit|polyint|polyval|\"+\n\t\t\"polyvalm|pow2|power|ppval|prefdir|preferences|primes|print|printdlg|printopt|printpreview|prod|profile|profsave|propedit|propertyeditor|psi|publish|PutCharArray|PutFullMatrix|\"+\n\t\t\"PutWorkspaceData|pwd|qhull|qmr|qr|qrdelete|qrinsert|qrupdate|quad|quad2d|quadgk|quadl|quadv|questdlg|quit|quiver|quiver3|qz|rand|randi|randn|randperm|RandStream(?:.(?:create|\"+\n\t\t\"getDefaultStream|getGlobalStream|list|setDefaultStream|setGlobalStream))?|rank|rat|rats|rbbox|rcond|rdivide|readasync|real|reallog|realmax|realmin|realpow|realsqrt|record|\"+\n\t\t\"rectangle|rectint|recycle|reducepatch|reducevolume|refresh|refreshdata|regexp|regexpi|regexprep|regexptranslate|rehash|rem|Remove|RemoveAll|repmat|reset|reshape|residue|\"+\n\t\t\"restoredefaultpath|rethrow|rgb2hsv|rgb2ind|rgbplot|ribbon|rmappdata|rmdir|rmfield|rmpath|rmpref|rng|roots|rose|rosser|rot90|rotate|rotate3d|round|rref|rsf2csf|run|save|saveas|\"+\n\t\t\"saveobj|savepath|scatter|scatter3|schur|sec|secd|sech|selectmoveresize|semilogx|semilogy|sendmail|serial|set|setappdata|setdiff|setenv|setfield|setpixelposition|setpref|setstr|\"+\n\t\t\"setxor|shading|shg|shiftdim|showplottool|shrinkfaces|sign|sin(?:d|h)?|size|slice|smooth3|snapnow|sort|sortrows|sound|soundsc|spalloc|spaugment|spconvert|spdiags|specular|speye|\"+\n\t\t\"spfun|sph2cart|sphere|spinmap|spline|spones|spparms|sprand|sprandn|sprandsym|sprank|spring|sprintf|spy|sqrt|sqrtm|squeeze|ss2tf|sscanf|stairs|startup|std|stem|stem3|stopasync|\"+\n\t\t\"str2double|str2func|str2mat|str2num|strcat|strcmp|strcmpi|stream2|stream3|streamline|streamparticles|streamribbon|streamslice|streamtube|strfind|strjust|strmatch|strncmp|\"+\n\t\t\"strncmpi|strread|strrep|strtok|strtrim|struct2cell|structfun|strvcat|sub2ind|subplot|subsasgn|subsindex|subspace|subsref|substruct|subvolume|sum|summer|superclasses|superiorto|\"+\n\t\t\"support|surf|surf2patch|surface|surfc|surfl|surfnorm|svd|svds|swapbytes|symamd|symbfact|symmlq|symrcm|symvar|system|tan(?:d|h)?|tar|tempdir|tempname|tetramesh|texlabel|text|\"+\n\t\t\"textread|textscan|textwrap|tfqmr|throw|tic|Tiff(?:.(?:getTagNames|getVersion))?|timer|timerfind|timerfindall|times|timeseries|title|toc|todatenum|toeplitz|toolboxdir|trace|\"+\n\t\t\"transpose|trapz|treelayout|treeplot|tril|trimesh|triplequad|triplot|TriRep|TriScatteredInterp|trisurf|triu|tscollection|tsearch|tsearchn|tstool|type|typecast|uibuttongroup|\"+\n\t\t\"uicontextmenu|uicontrol|uigetdir|uigetfile|uigetpref|uiimport|uimenu|uiopen|uipanel|uipushtool|uiputfile|uiresume|uisave|uisetcolor|uisetfont|uisetpref|uistack|uitable|\"+\n\t\t\"uitoggletool|uitoolbar|uiwait|uminus|undocheckout|unicode2native|union|unique|unix|unloadlibrary|unmesh|unmkpp|untar|unwrap|unzip|uplus|upper|urlread|urlwrite|usejava|\"+\n\t\t\"userpath|validateattributes|validatestring|vander|var|vectorize|ver|verctrl|verLessThan|version|vertcat|VideoReader(?:.isPlatformSupported)?|VideoWriter(?:.getProfiles)?|\"+\n\t\t\"view|viewmtx|visdiff|volumebounds|voronoi|voronoin|wait|waitbar|waitfor|waitforbuttonpress|warndlg|warning|waterfall|wavfinfo|wavplay|wavread|wavrecord|wavwrite|web|weekday|\"+\n\t\t\"what|whatsnew|which|whitebg|who|whos|wilkinson|winopen|winqueryreg|winter|wk1finfo|wk1read|wk1write|workspace|xlabel|xlim|xlsfinfo|xlsread|xlswrite|xmlread|xmlwrite|xor|xslt|\"+\n\t\t\"ylabel|ylim|zeros|zip|zlabel|zlim|zoom|addedvarplot|andrewsplot|anova(?:1|2|n)|ansaribradley|aoctool|barttest|bbdesign|beta(?:cdf|fit|inv|like|pdf|rnd|stat)|bino(?:cdf|fit|inv|\"+\n\t\t\"pdf|rnd|stat)|biplot|bootci|bootstrp|boxplot|candexch|candgen|canoncorr|capability|capaplot|caseread|casewrite|categorical|ccdesign|cdfplot|chi2(?:cdf|gof|inv|pdf|rnd|stat)|\"+\n\t\t\"cholcov|Classification(?:BaggedEnsemble|Discriminant(?:.(?:fit|make|template))?|Ensemble|KNN(?:.(?:fit|template))?|PartitionedEnsemble|PartitionedModel|Tree(?:.(?:fit|\"+\n\t\t\"template))?)|classify|classregtree|cluster|clusterdata|cmdscale|combnk|Compact(?:Classification(?:Discriminant|Ensemble|Tree)|Regression(?:Ensemble|Tree)|TreeBagger)|confusionmat|\"+\n\t\t\"controlchart|controlrules|cophenet|copula(?:cdf|fit|param|pdf|rnd|stat)|cordexch|corr|corrcov|coxphfit|createns|crosstab|crossval|cvpartition|datasample|dataset|daugment|dcovary|\"+\n\t\t\"dendrogram|dfittool|disttool|dummyvar|dwtest|ecdf|ecdfhist|ev(?:cdf|fit|inv|like|pdf|rnd|stat)|ExhaustiveSearcher|exp(?:cdf|fit|inv|like|pdf|rnd|stat)|factoran|fcdf|ff2n|finv|\"+\n\t\t\"fitdist|fitensemble|fpdf|fracfact|fracfactgen|friedman|frnd|fstat|fsurfht|fullfact|gagerr|gam(?:cdf|fit|inv|like|pdf|rnd|stat)|GeneralizedLinearModel(?:.fit)?|geo(?:cdf|inv|mean|\"+\n\t\t\"pdf|rnd|stat)|gev(?:cdf|fit|inv|like|pdf|rnd|stat)|gline|glmfit|glmval|glyphplot|gmdistribution(?:.fit)?|gname|gp(?:cdf|fit|inv|like|pdf|rnd|stat)|gplotmatrix|grp2idx|grpstats|\"+\n\t\t\"gscatter|haltonset|harmmean|hist3|histfit|hmm(?:decode|estimate|generate|train|viterbi)|hougen|hyge(?:cdf|inv|pdf|rnd|stat)|icdf|inconsistent|interactionplot|invpred|iqr|iwishrnd|\"+\n\t\t\"jackknife|jbtest|johnsrnd|KDTreeSearcher|kmeans|knnsearch|kruskalwallis|ksdensity|kstest|kstest2|kurtosis|lasso|lassoglm|lassoPlot|leverage|lhsdesign|lhsnorm|lillietest|\"+\n\t\t\"LinearModel(?:.fit)?|linhyptest|linkage|logn(?:cdf|fit|inv|like|pdf|rnd|stat)|lsline|mad|mahal|maineffectsplot|manova1|manovacluster|mdscale|mhsample|mle|mlecov|mnpdf|\"+\n\t\t\"mnrfit|mnrnd|mnrval|moment|multcompare|multivarichart|mvn(?:cdf|pdf|rnd)|mvregress|mvregresslike|mvt(?:cdf|pdf|rnd)|NaiveBayes(?:.fit)?|nan(?:cov|max|mean|median|min|std|\"+\n\t\t\"sum|var)|nbin(?:cdf|fit|inv|pdf|rnd|stat)|ncf(?:cdf|inv|pdf|rnd|stat)|nct(?:cdf|inv|pdf|rnd|stat)|ncx2(?:cdf|inv|pdf|rnd|stat)|NeighborSearcher|nlinfit|nlintool|nlmefit|nlmefitsa|\"+\n\t\t\"nlparci|nlpredci|nnmf|nominal|NonLinearModel(?:.fit)?|norm(?:cdf|fit|inv|like|pdf|rnd|stat)|normplot|normspec|ordinal|outlierMeasure|parallelcoords|paretotails|partialcorr|\"+\n\t\t\"pcacov|pcares|pdf|pdist|pdist2|pearsrnd|perfcurve|perms|piecewisedistribution|plsregress|poiss(?:cdf|fit|inv|pdf|rnd|tat)|polyconf|polytool|prctile|princomp|ProbDist(?:Kernel|\"+\n\t\t\"Parametric|UnivKernel|UnivParam)?|probplot|procrustes|qqplot|qrandset|qrandstream|quantile|randg|random|randsample|randtool|range|rangesearch|ranksum|rayl(?:cdf|fit|inv|pdf|\"+\n\t\t\"rnd|stat)|rcoplot|refcurve|refline|regress|Regression(?:BaggedEnsemble|Ensemble|PartitionedEnsemble|PartitionedModel|Tree(?:.(?:fit|template))?)|regstats|relieff|ridge|\"+\n\t\t\"robustdemo|robustfit|rotatefactors|rowexch|rsmdemo|rstool|runstest|sampsizepwr|scatterhist|sequentialfs|signrank|signtest|silhouette|skewness|slicesample|sobolset|squareform|\"+\n\t\t\"statget|statset|stepwise|stepwisefit|surfht|tabulate|tblread|tblwrite|tcdf|tdfread|tiedrank|tinv|tpdf|TreeBagger|treedisp|treefit|treeprune|treetest|treeval|trimmean|trnd|tstat|\"+\n\t\t\"ttest|ttest2|unid(?:cdf|inv|pdf|rnd|stat)|unif(?:cdf|inv|it|pdf|rnd|stat)|vartest(?:2|n)?|wbl(?:cdf|fit|inv|like|pdf|rnd|stat)|wblplot|wishrnd|x2fx|xptread|zscore|ztest\"+\n\t\t\"adapthisteq|analyze75info|analyze75read|applycform|applylut|axes2pix|bestblk|blockproc|bwarea|bwareaopen|bwboundaries|bwconncomp|bwconvhull|bwdist|bwdistgeodesic|bweuler|\"+\n\t\t\"bwhitmiss|bwlabel|bwlabeln|bwmorph|bwpack|bwperim|bwselect|bwtraceboundary|bwulterode|bwunpack|checkerboard|col2im|colfilt|conndef|convmtx2|corner|cornermetric|corr2|cp2tform|\"+\n\t\t\"cpcorr|cpselect|cpstruct2pairs|dct2|dctmtx|deconvblind|deconvlucy|deconvreg|deconvwnr|decorrstretch|demosaic|dicom(?:anon|dict|info|lookup|read|uid|write)|edge|edgetaper|entropy|\"+\n\t\t\"entropyfilt|fan2para|fanbeam|findbounds|fliptform|freqz2|fsamp2|fspecial|ftrans2|fwind1|fwind2|getheight|getimage|getimagemodel|getline|getneighbors|getnhood|getpts|\"+\n\t\t\"getrangefromclass|getrect|getsequence|gray2ind|graycomatrix|graycoprops|graydist|grayslice|graythresh|hdrread|hdrwrite|histeq|hough|houghlines|houghpeaks|iccfind|iccread|\"+\n\t\t\"iccroot|iccwrite|idct2|ifanbeam|im2bw|im2col|im2double|im2int16|im2java2d|im2single|im2uint16|im2uint8|imabsdiff|imadd|imadjust|ImageAdapter|imageinfo|imagemodel|imapplymatrix|\"+\n\t\t\"imattributes|imbothat|imclearborder|imclose|imcolormaptool|imcomplement|imcontour|imcontrast|imcrop|imdilate|imdisplayrange|imdistline|imdivide|imellipse|imerode|imextendedmax|\"+\n\t\t\"imextendedmin|imfill|imfilter|imfindcircles|imfreehand|imfuse|imgca|imgcf|imgetfile|imhandles|imhist|imhmax|imhmin|imimposemin|imlincomb|imline|immagbox|immovie|immultiply|imnoise|\"+\n\t\t\"imopen|imoverview|imoverviewpanel|impixel|impixelinfo|impixelinfoval|impixelregion|impixelregionpanel|implay|impoint|impoly|impositionrect|improfile|imputfile|impyramid|\"+\n\t\t\"imreconstruct|imrect|imregconfig|imregionalmax|imregionalmin|imregister|imresize|imroi|imrotate|imsave|imscrollpanel|imshow|imshowpair|imsubtract|imtool|imtophat|imtransform|\"+\n\t\t\"imview|ind2gray|ind2rgb|interfileinfo|interfileread|intlut|ippl|iptaddcallback|iptcheckconn|iptcheckhandle|iptcheckinput|iptcheckmap|iptchecknargin|iptcheckstrs|iptdemos|iptgetapi|\"+\n\t\t\"iptGetPointerBehavior|iptgetpref|ipticondir|iptnum2ordinal|iptPointerManager|iptprefs|iptremovecallback|iptSetPointerBehavior|iptsetpref|iptwindowalign|iradon|isbw|isflat|isgray|\"+\n\t\t\"isicc|isind|isnitf|isrgb|isrset|lab2double|lab2uint16|lab2uint8|label2rgb|labelmatrix|makecform|makeConstrainToRectFcn|makehdr|makelut|makeresampler|maketform|mat2gray|mean2|\"+\n\t\t\"medfilt2|montage|nitfinfo|nitfread|nlfilter|normxcorr2|ntsc2rgb|openrset|ordfilt2|otf2psf|padarray|para2fan|phantom|poly2mask|psf2otf|qtdecomp|qtgetblk|qtsetblk|radon|rangefilt|\"+\n\t\t\"reflect|regionprops|registration.metric.(?:MattesMutualInformation|MeanSquares)|registration.optimizer.(?:OnePlusOneEvolutionary|RegularStepGradientDescent)|rgb2gray|\"+\n\t\t\"rgb2ntsc|rgb2ycbcr|roicolor|roifill|roifilt2|roipoly|rsetwrite|std2|stdfilt|strel|stretchlim|subimage|tformarray|tformfwd|tforminv|tonemap|translate|truesize|uintlut|viscircles|\"+\n\t\t\"warp|watershed|whitepoint|wiener2|xyz2double|xyz2uint16|ycbcr2rgb|bintprog|color|fgoalattain|fminbnd|fmincon|fminimax|fminsearch|fminunc|fseminf|fsolve|fzero|fzmult|gangstr|ktrlink|\"+\n\t\t\"linprog|lsqcurvefit|lsqlin|lsqnonlin|lsqnonneg|optimget|optimset|optimtool|quadprog\"\n    );\n    var storageType = (\n        \"cell|struct|char|double|single|logical|u?int(?:8|16|32|64)|sparse\"\n    );\n    var keywordMapper = this.createKeywordMapper({\n        \"storage.type\": storageType,\n        \"support.function\": builtinFunctions,\n        \"keyword\": keywords,\n        \"constant.language\": builtinConstants\n    }, \"identifier\", true);\n\n    this.$rules = {\n        // allowQstring\n        start: [{ \n            token : \"string\",\n            regex : \"'\",\n            stateName : \"qstring\",\n            next  : [{\n                token : \"constant.language.escape\",\n                regex : \"''\"\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"start\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+\"\n        }, {\n            regex: \"\",\n            next: \"noQstring\"\n        }],        \n        noQstring : [{\n            regex: \"^\\\\s*%{\\\\s*$\",\n            token: \"comment.start\",\n            push: \"blockComment\"\n        }, {\n            token : \"comment\",\n            regex : \"%[^\\r\\n]*\"\n        }, {\n            token : \"string\",\n            regex : '\"',\n            stateName : \"qqstring\",\n            next  : [{\n                token : \"constant.language.escape\",\n                regex : /\\\\./\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                next  : \"qqstring\"\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"start\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"constant.numeric\", // float\n            regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=\",\n            next: \"start\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\",\n            next: \"start\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[({\\\\[]\",\n            next: \"start\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\]})]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+\"\n        }, {\n            token : \"text\",\n            regex : \"$\",\n            next  : \"start\"\n        }],\n        blockComment: [{\n            regex: \"^\\\\s*%{\\\\s*$\",\n            token: \"comment.start\",\n            push: \"blockComment\"\n        }, {\n            regex: \"^\\\\s*%}\\\\s*$\",\n            token: \"comment.end\",\n            next: \"pop\"\n        }, {\n            defaultToken: \"comment\"\n        }]\n    };\n    \n    this.normalizeRules();\n};\n\noop.inherits(MatlabHighlightRules, TextHighlightRules);\n\nexports.MatlabHighlightRules = MatlabHighlightRules;\n});"
  },
  {
    "path": "lib/ace/mode/maze.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar MazeHighlightRules = require(\"./maze_highlight_rules\").MazeHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = MazeHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    this.$id = \"ace/mode/maze\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/maze_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar MazeHighlightRules = function() {\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = {\n        start: [{\n            token: \"keyword.control\",\n            regex: /##|``/,\n            comment: \"Wall\"\n        }, {\n            token: \"entity.name.tag\",\n            regex: /\\.\\./,\n            comment: \"Path\"\n        }, {\n            token: \"keyword.control\",\n            regex: /<>/,\n            comment: \"Splitter\"\n        }, {\n            token: \"entity.name.tag\",\n            regex: /\\*[\\*A-Za-z0-9]/,\n            comment: \"Signal\"\n        }, {\n            token: \"constant.numeric\",\n            regex: /[0-9]{2}/,\n            comment: \"Pause\"\n        }, {\n            token: \"keyword.control\",\n            regex: /\\^\\^/,\n            comment: \"Start\"\n        }, {\n            token: \"keyword.control\",\n            regex: /\\(\\)/,\n            comment: \"Hole\"\n        }, {\n            token: \"support.function\",\n            regex: />>/,\n            comment: \"Out\"\n        }, {\n            token: \"support.function\",\n            regex: />\\//,\n            comment: \"Ln Out\"\n        }, {\n            token: \"support.function\",\n            regex: /<</,\n            comment: \"In\"\n        }, {\n            token: \"keyword.control\",\n            regex: /--/,\n            comment: \"One use\"\n        }, {\n            token: \"constant.language\",\n            regex: /%[LRUDNlrudn]/,\n            comment: \"Direction\"\n        }, {\n            token: [\n                \"entity.name.function\",\n                \"keyword.other\",\n                \"keyword.operator\",\n                \"keyword.other\",\n                \"keyword.operator\",\n                \"constant.numeric\",\n                \"keyword.operator\",\n                \"keyword.other\",\n                \"keyword.operator\",\n                \"constant.numeric\",\n                \"string.quoted.double\",\n                \"string.quoted.single\"\n            ],\n            regex: /([A-Za-z][A-Za-z0-9])( *-> *)(?:([-+*\\/]=)( *)((?:-)?)([0-9]+)|(=)( *)(?:((?:-)?)([0-9]+)|(\"[^\"]*\")|('[^']*')))/,\n            comment: \"Assignment function\"\n        }, {\n            token: [\n                \"entity.name.function\",\n                \"keyword.other\",\n                \"keyword.control\",\n                \"keyword.other\",\n                \"keyword.operator\",\n                \"keyword.other\",\n                \"keyword.operator\",\n                \"constant.numeric\",\n                \"entity.name.tag\",\n                \"keyword.other\",\n                \"keyword.control\",\n                \"keyword.other\",\n                \"constant.language\",\n                \"keyword.other\",\n                \"keyword.control\",\n                \"keyword.other\",\n                \"constant.language\"\n            ],\n            regex: /([A-Za-z][A-Za-z0-9])( *-> *)(IF|if)( *)(?:([<>]=?|==)( *)((?:-)?)([0-9]+)|(\\*[\\*A-Za-z0-9]))( *)(THEN|then)( *)(%[LRUDNlrudn])(?:( *)(ELSE|else)( *)(%[LRUDNlrudn]))?/,\n            comment: \"Equality Function\"\n        }, {\n            token: \"entity.name.function\",\n            regex: /[A-Za-z][A-Za-z0-9]/,\n            comment: \"Function cell\"\n        }, {\n            token: \"comment.line.double-slash\",\n            regex: / *\\/\\/.*/,\n            comment: \"Comment\"\n        }]\n    };\n\n    this.normalizeRules();\n};\n\nMazeHighlightRules.metaData = {\n    fileTypes: [\"mz\"],\n    name: \"Maze\",\n    scopeName: \"source.maze\"\n};\n\n\noop.inherits(MazeHighlightRules, TextHighlightRules);\n\nexports.MazeHighlightRules = MazeHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/mel.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar MELHighlightRules = require(\"./mel_highlight_rules\").MELHighlightRules;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = MELHighlightRules;\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$id = \"ace/mode/mel\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});"
  },
  {
    "path": "lib/ace/mode/mel_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/* THIS FILE WAS AUTOGENERATED FROM MEL.tmLanguage (UUID: 69554E52-391D-42BC-9F65-7A77444BA1CF) */\n/****************************************************************\n * IT MIGHT NOT BE PERFECT, PARTICULARLY:                       *\n * IN DECIDING STATES TO TRANSITION TO,                         *\n * IGNORING WHITESPACE,                                         *\n * IGNORING GROUPS WITH ?:,                                     *\n * EXTENDING EXISTING MODES,                                    *\n * GATHERING KEYWORDS, OR                                       *\n * DECIDING WHEN TO USE PUSH.                                   *\n * ...But it's a good start from an existing *.tmlanguage file. *\n ****************************************************************/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar MELHighlightRules = function() {\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = { start: \n       [ { caseInsensitive: true,\n           token: 'storage.type.mel',\n           regex: '\\\\b(matrix|string|vector|float|int|void)\\\\b' },\n         { caseInsensitive: true,\n           token: 'support.function.mel',\n           regex: '\\\\b((s(h(ow(ManipCtx|S(hadingGroupAttrEditor|electionInTitle)|H(idden|elp)|Window)|el(f(Button|TabLayout|Layout)|lField)|ading(GeometryRelCtx|Node|Connection|LightRelCtx))|y(s(tem|File)|mbol(Button|CheckBox))|nap(shot|Mode|2to2 |TogetherCtx|Key)|c(ulpt|ene(UIReplacement|Editor)|ale(BrushBrightness |Constraint|Key(Ctx)?)?|r(ipt(Node|Ctx|Table|edPanel(Type)?|Job|EditorInfo)|oll(Field|Layout))|mh)|t(itch(Surface(Points)?|AndExplodeShell )|a(ckTrace|rt(sWith |String ))|r(cmp|i(ng(ToStringArray |Array(Remove(Duplicates | )|C(ount |atenate )|ToString |Intersector))|p )|oke))|i(n(gleProfileBirailSurface)?|ze|gn|mplify)|o(u(nd(Control)?|rce)|ft(Mod(Ctx)?)?|rt)|u(perCtx|rface(S(haderList|ampler))?|b(st(itute(Geometry|AllString )?|ring)|d(M(irror|a(tchTopology|p(SewMove|Cut)))|iv(Crease|DisplaySmoothness)?|C(ollapse|leanTopology)|T(o(Blind|Poly)|ransferUVsToCache)|DuplicateAndConnect|EditUV|ListComponentConversion|AutoProjection)))|p(h(ere|rand)|otLight(PreviewPort)?|aceLocator|r(ing|eadSheetEditor))|e(t(s|MenuMode|Sta(te |rtupMessage|mpDensity )|NodeTypeFlag|ConstraintRestPosition |ToolTo|In(putDeviceMapping|finity)|D(ynamic|efaultShadingGroup|rivenKeyframe)|UITemplate|P(ar(ticleAttr|ent)|roject )|E(scapeCtx|dit(or|Ctx))|Key(Ctx|frame|Path)|F(ocus|luidAttr)|Attr(Mapping)?)|parator|ed|l(ect(Mode|ionConnection|Context|Type|edNodes|Pr(iority|ef)|Key(Ctx)?)?|LoadSettings)|archPathArray )|kin(Cluster|Percent)|q(uareSurface|rt)|w(itchTable|atchDisplayPort)|a(ve(Menu|Shelf|ToolSettings|I(nitialState|mage)|Pref(s|Objects)|Fluid|A(ttrPreset |llShelves))|mpleImage)|rtContext|mooth(step|Curve|TangentSurface))|h(sv_to_rgb|yp(ot|er(Graph|Shade|Panel))|i(tTest|de|lite)|ot(Box|key(Check)?)|ud(Button|Slider(Button)?)|e(lp(Line)?|adsUpDisplay|rmite)|wRe(nder(Load)?|flectionMap)|ard(enPointCurve|ware(RenderPanel)?))|n(o(nLinear|ise|de(Type|IconButton|Outliner|Preset)|rmal(ize |Constraint))|urbs(Boolean|S(elect|quare)|C(opyUVSet|ube)|To(Subdiv|Poly(gonsPref)?)|Plane|ViewDirectionVector )|ew(ton|PanelItems)|ame(space(Info)?|Command|Field))|c(h(oice|dir|eck(Box(Grp)?|DefaultRenderGlobals)|a(n(nelBox|geSubdiv(Region|ComponentDisplayLevel))|racter(Map|OutlineEditor)?))|y(cleCheck|linder)|tx(Completion|Traverse|EditMode|Abort)|irc(ularFillet|le)|o(s|n(str(uctionHistory|ain(Value)?)|nect(ionInfo|Control|Dynamic|Joint|Attr)|t(extInfo|rol)|dition|e|vert(SolidTx|Tessellation|Unit|FromOldLayers |Lightmap)|firmDialog)|py(SkinWeights|Key|Flexor|Array )|l(or(Slider(Grp|ButtonGrp)|Index(SliderGrp)?|Editor|AtPoint)?|umnLayout|lision)|arsenSubdivSelectionList|m(p(onentEditor|utePolysetVolume |actHairSystem )|mand(Port|Echo|Line)))|u(tKey|r(ve(MoveEPCtx|SketchCtx|CVCtx|Intersect|OnSurface|E(ditorCtx|PCtx)|AddPtCtx)?|rent(Ctx|Time(Ctx)?|Unit)))|p(GetSolverAttr|Button|S(olver(Types)?|e(t(SolverAttr|Edit)|am))|C(o(nstraint|llision)|ache)|Tool|P(anel|roperty))|eil|l(ip(Schedule(rOutliner)?|TrimBefore |Editor(CurrentTimeCtx)?)?|ose(Surface|Curve)|uster|ear(Cache)?|amp)|a(n(CreateManip|vas)|tch(Quiet)?|pitalizeString |mera(View)?)|r(oss(Product )?|eate(RenderLayer|MotionField |SubdivRegion|N(ode|ewShelf )|D(isplayLayer|rawCtx)|Editor))|md(Shell|FileOutput))|M(R(ender(ShadowData|Callback|Data|Util|View|Line(Array)?)|ampAttribute)|G(eometryData|lobal)|M(odelMessage|essage|a(nipData|t(erial|rix)))|BoundingBox|S(yntax|ceneMessage|t(atus|ring(Array)?)|imple|pace|elect(ion(Mask|List)|Info)|watchRender(Register|Base))|H(ardwareRenderer|WShaderSwatchGenerator)|NodeMessage|C(o(nditionMessage|lor(Array)?|m(putation|mand(Result|Message)))|ursor|loth(Material|S(ystem|olverRegister)|Con(straint|trol)|Triangle|Particle|Edge|Force)|allbackIdArray)|T(ypeId|ime(r(Message)?|Array)?|oolsInfo|esselationParams|r(imBoundaryArray|ansformationMatrix))|I(ntArray|t(Geometry|Mesh(Polygon|Edge|Vertex|FaceVertex)|S(urfaceCV|electionList)|CurveCV|Instancer|eratorType|D(ependency(Graph|Nodes)|ag)|Keyframe)|k(System|HandleGroup)|mage)|3dView|Object(SetMessage|Handle|Array)?|D(G(M(odifier|essage)|Context)|ynSwept(Triangle|Line)|istance|oubleArray|evice(State|Channel)|a(ta(Block|Handle)|g(M(odifier|essage)|Path(Array)?))|raw(Request(Queue)?|Info|Data|ProcedureBase))|U(serEventMessage|i(nt(Array|64Array)|Message))|P(o(int(Array)?|lyMessage)|lug(Array)?|rogressWindow|x(G(eometry(Iterator|Data)|lBuffer)|M(idiInputDevice|odelEditorCommand|anipContainer)|S(urfaceShape(UI)?|pringNode|electionContext)|HwShaderNode|Node|Co(ntext(Command)?|m(ponentShape|mand))|T(oolCommand|ransform(ationMatrix)?)|IkSolver(Node)?|3dModelView|ObjectSet|D(eformerNode|ata|ragAndDropBehavior)|PolyT(weakUVCommand|rg)|EmitterNode|F(i(eldNode|leTranslator)|luidEmitterNode)|LocatorNode))|E(ulerRotation|vent(Message)?)|ayatomr|Vector(Array)?|Quaternion|F(n(R(otateManip|eflectShader|adialField)|G(e(nericAttribute|ometry(Data|Filter))|ravityField)|M(otionPath|es(sageAttribute|h(Data)?)|a(nip3D|trix(Data|Attribute)))|B(l(innShader|endShapeDeformer)|ase)|S(caleManip|t(ateManip|ring(Data|ArrayData))|ingleIndexedComponent|ubd(Names|Data)?|p(hereData|otLight)|et|kinCluster)|HikEffector|N(on(ExtendedLight|AmbientLight)|u(rbs(Surface(Data)?|Curve(Data)?)|meric(Data|Attribute))|ewtonField)|C(haracter|ircleSweepManip|ompo(nent(ListData)?|undAttribute)|urveSegmentManip|lip|amera)|T(ypedAttribute|oggleManip|urbulenceField|r(ipleIndexedComponent|ansform))|I(ntArrayData|k(Solver|Handle|Joint|Effector))|D(ynSweptGeometryData|i(s(cManip|tanceManip)|rection(Manip|alLight))|ouble(IndexedComponent|ArrayData)|ependencyNode|a(ta|gNode)|ragField)|U(ni(tAttribute|formField)|Int64ArrayData)|P(hong(Shader|EShader)|oint(On(SurfaceManip|CurveManip)|Light|ArrayData)|fxGeometry|lugin(Data)?|arti(cleSystem|tion))|E(numAttribute|xpression)|V(o(lume(Light|AxisField)|rtexField)|ectorArrayData)|KeyframeDelta(Move|B(lockAddRemove|reakdown)|Scale|Tangent|InfType|Weighted|AddRemove)?|F(ield|luid|reePointTriadManip)|W(ireDeformer|eightGeometryFilter)|L(ight(DataAttribute)?|a(yeredShader|ttice(D(eformer|ata))?|mbertShader))|A(ni(sotropyShader|mCurve)|ttribute|irField|r(eaLight|rayAttrsData)|mbientLight))?|ile(IO|Object)|eedbackLine|loat(Matrix|Point(Array)?|Vector(Array)?|Array))|L(i(ghtLinks|brary)|ockMessage)|A(n(im(Message|C(ontrol|urveC(hange|lipboard(Item(Array)?)?))|Util)|gle)|ttribute(Spec(Array)?|Index)|r(rayData(Builder|Handle)|g(Database|Parser|List))))|t(hreePointArcCtx|ime(Control|Port|rX)|o(ol(Button|HasOptions|Collection|Dropped|PropertyWindow)|NativePath |upper|kenize(List )?|l(ower|erance)|rus|ggle(WindowVisibility|Axis)?)|u(rbulence|mble(Ctx)?)|ex(RotateContext|M(oveContext|anipContext)|t(ScrollList|Curves|ure(HairColor |DisplacePlane |PlacementContext|Window)|ToShelf |Field(Grp|ButtonGrp)?)?|S(caleContext|electContext|mudgeUVContext)|WinToolCtx)|woPointArcCtx|a(n(gentConstraint)?|bLayout)|r(im|unc(ate(HairCache|FluidCache))?|a(ns(formLimits|lator)|c(e|k(Ctx)?))))|i(s(olateSelect|Connected|True|Dirty|ParentOf |Valid(String |ObjectName |UiName )|AnimCurve )|n(s(tance(r)?|ert(Joint(Ctx)?|K(not(Surface|Curve)|eyCtx)))|heritTransform|t(S(crollBar|lider(Grp)?)|er(sect|nalVar|ToUI )|Field(Grp)?))|conText(Radio(Button|Collection)|Button|StaticLabel|CheckBox)|temFilter(Render|Type|Attr)?|prEngine|k(S(ystem(Info)?|olver|plineHandleCtx)|Handle(Ctx|DisplayScale)?|fkDisplayMethod)|m(portComposerCurves |fPlugins|age))|o(ceanNurbsPreviewPlane |utliner(Panel|Editor)|p(tion(Menu(Grp)?|Var)|en(GLExtension|MayaPref))|verrideModifier|ffset(Surface|Curve(OnSurface)?)|r(ientConstraint|bit(Ctx)?)|b(soleteProc |j(ect(Center|Type(UI)?|Layer )|Exists)))|d(yn(RelEd(itor|Panel)|Globals|C(ontrol|ache)|P(a(intEditor|rticleCtx)|ref)|Exp(ort|ression)|amicLoad)|i(s(connect(Joint|Attr)|tanceDim(Context|ension)|pla(y(RGBColor|S(tats|urface|moothness)|C(olor|ull)|Pref|LevelOfDetail|Affected)|cementToPoly)|kCache|able)|r(name |ect(ionalLight|KeyCtx)|map)|mWhen)|o(cServer|Blur|t(Product )?|ubleProfileBirailSurface|peSheetEditor|lly(Ctx)?)|uplicate(Surface|Curve)?|e(tach(Surface|Curve|DeviceAttr)|vice(Panel|Editor)|f(ine(DataServer|VirtualDevice)|ormer|ault(Navigation|LightListCheckBox))|l(ete(Sh(elfTab |adingGroupsAndMaterials )|U(nusedBrushes |I)|Attr)?|randstr)|g_to_rad)|agPose|r(opoffLocator|ag(gerContext)?)|g(timer|dirty|Info|eval))|CBG |u(serCtx|n(t(angleUV|rim)|i(t|form)|do(Info)?|loadPlugin|assignInputDevice|group)|iTemplate|p(dateAE |Axis)|v(Snapshot|Link))|joint(C(tx|luster)|DisplayScale|Lattice)?|p(sd(ChannelOutliner|TextureFile|E(ditTextureFile|xport))|close|i(c(ture|kWalk)|xelMove)|o(se|int(MatrixMult |C(onstraint|urveConstraint)|On(Surface|Curve)|Position|Light)|p(upMenu|en)|w|l(y(Reduce|GeoSampler|M(irrorFace|ove(UV|Edge|Vertex|Facet(UV)?)|erge(UV|Edge(Ctx)?|Vertex|Facet(Ctx)?)|ap(Sew(Move)?|Cut|Del))|B(oolOp|evel|l(indData|endColor))|S(traightenUVBorder|oftEdge|u(perCtx|bdivide(Edge|Facet))|p(her(icalProjection|e)|lit(Ring|Ctx|Edge|Vertex)?)|e(tToFaceNormal|parate|wEdge|lect(Constraint(Monitor)?|EditCtx))|mooth)|Normal(izeUV|PerVertex)?|C(hipOff|ylind(er|ricalProjection)|o(ne|pyUV|l(or(BlindData|Set|PerVertex)|lapse(Edge|Facet)))|u(t(Ctx)?|be)|l(ipboard|oseBorder)|acheMonitor|rea(seEdge|teFacet(Ctx)?))|T(o(Subdiv|rus)|r(iangulate|ansfer))|In(stallAction|fo)|Options|D(uplicate(Edge|AndConnect)|el(Edge|Vertex|Facet))|U(nite|VSet)|P(yramid|oke|lan(e|arProjection)|r(ism|ojection))|E(ditUV|valuate|xtrude(Edge|Facet))|Qu(eryBlindData|ad)|F(orceUV|lip(UV|Edge))|WedgeFace|L(istComponentConversion|ayoutUV)|A(utoProjection|ppend(Vertex|FacetCtx)?|verage(Normal|Vertex)))|eVectorConstraint))|utenv|er(cent|formanceOptions)|fxstrokes|wd|l(uginInfo|a(y(b(last|ackOptions))?|n(e|arSrf)))|a(steKey|ne(l(History|Configuration)?|Layout)|thAnimation|irBlend|use|lettePort|r(ti(cle(RenderInfo|Instancer|Exists)?|tion)|ent(Constraint)?|am(Dim(Context|ension)|Locator)))|r(int|o(j(ect(ion(Manip|Context)|Curve|Tangent)|FileViewer)|pMo(dCtx|ve)|gress(Bar|Window)|mptDialog)|eloadRefEd))|e(n(codeString|d(sWith |String )|v|ableDevice)|dit(RenderLayer(Globals|Members)|or(Template)?|DisplayLayer(Globals|Members)|AttrLimits )|v(ent|al(Deferred|Echo)?)|quivalent(Tol | )|ffector|r(f|ror)|x(clusiveLightCheckBox|t(end(Surface|Curve)|rude)|ists|p(ortComposerCurves |ression(EditorListen)?)?|ec(uteForEachObject )?|actWorldBoundingBox)|mit(ter)?)|v(i(sor|ew(Set|HeadOn|2dToolCtx|C(lipPlane|amera)|Place|Fit|LookAt))|o(lumeAxis|rtex)|e(ctorize|rifyCmd )|alidateShelfName )|key(Tangent|frame(Region(MoveKeyCtx|S(caleKeyCtx|e(tKeyCtx|lectKeyCtx))|CurrentTimeCtx|TrackCtx|InsertKeyCtx|D(irectKeyCtx|ollyCtx))|Stats|Outliner)?)|qu(it|erySubdiv)|f(c(heck|lose)|i(nd(RelatedSkinCluster |MenuItem |er|Keyframe|AllIntersections )|tBspline|l(ter(StudioImport|Curve|Expand)?|e(BrowserDialog|test|Info|Dialog|Extension )?|letCurve)|rstParentOf )|o(ntDialog|pen|rmLayout)|print|eof|flush|write|l(o(or|w|at(S(crollBar|lider(Grp|ButtonGrp|2)?)|Eq |Field(Grp)?))|u(shUndo|id(CacheInfo|Emitter|VoxelInfo))|exor)|r(omNativePath |e(eFormFillet|wind|ad)|ameLayout)|get(word|line)|mod)|w(hatIs|i(ndow(Pref)?|re(Context)?)|orkspace|ebBrowser(Prefs)?|a(itCursor|rning)|ri(nkle(Context)?|teTake))|l(s(T(hroughFilter|ype )|UI)?|i(st(Relatives|MenuAnnotation |Sets|History|NodeTypes|C(onnections|ameras)|Transforms |InputDevice(s|Buttons|Axes)|erEditor|DeviceAttachments|Unselected |A(nimatable|ttr))|n(step|eIntersection )|ght(link|List(Panel|Editor)?))|o(ckNode|okThru|ft|ad(NewShelf |P(lugin|refObjects)|Fluid)|g)|a(ssoContext|y(out|er(Button|ed(ShaderPort|TexturePort)))|ttice(DeformKeyCtx)?|unch(ImageEditor)?))|a(ssign(Command|InputDevice)|n(notate|im(C(one|urveEditor)|Display|View)|gle(Between)?)|tt(ach(Surface|Curve|DeviceAttr)|r(ibute(Menu|Info|Exists|Query)|NavigationControlGrp|Co(ntrolGrp|lorSliderGrp|mpatibility)|PresetEditWin|EnumOptionMenu(Grp)?|Field(Grp|SliderGrp)))|i(r|mConstraint)|d(d(NewShelfTab|Dynamic|PP|Attr(ibuteEditorNodeHelp)?)|vanceToNextDrivenKey)|uto(Place|Keyframe)|pp(endStringArray|l(y(Take|AttrPreset)|icationName))|ffect(s|edNet)|l(i(as(Attr)?|gn(Surface|C(tx|urve))?)|lViewFit)|r(c(len|Len(DimContext|gthDimension))|t(BuildPaintMenu|Se(tPaintCtx|lectCtx)|3dPaintCtx|UserPaintCtx|PuttyCtx|FluidAttrCtx|Attr(SkinPaintCtx|Ctx|PaintVertexCtx))|rayMapper)|mbientLight|b(s|out))|r(igid(Body|Solver)|o(t(at(ionInterpolation|e))?|otOf |undConstantRadius|w(ColumnLayout|Layout)|ll(Ctx)?)|un(up|TimeCommand)|e(s(olutionNode|et(Tool|AE )|ampleFluid)|hash|n(der(GlobalsNode|Manip|ThumbnailUpdate|Info|er|Partition|QualityNode|Window(SelectContext|Editor)|LayerButton)?|ame(SelectionList |UI|Attr)?)|cord(Device|Attr)|target|order(Deformers)?|do|v(olve|erse(Surface|Curve))|quires|f(ineSubdivSelectionList|erence(Edit|Query)?|resh(AE )?)|loadImage|adTake|root|move(MultiInstance|Joint)|build(Surface|Curve))|a(n(d(state|omizeFollicles )?|geControl)|d(i(o(MenuItemCollection|Button(Grp)?|Collection)|al)|_to_deg)|mpColorPort)|gb_to_hsv)|g(o(toBindPose |al)|e(t(M(odifiers|ayaPanelTypes )|Classification|InputDeviceRange|pid|env|DefaultBrush|Pa(nel|rticleAttr)|F(ileList|luidAttr)|A(ttr|pplicationVersionAsFloat ))|ometryConstraint)|l(Render(Editor)?|obalStitch)|a(uss|mma)|r(id(Layout)?|oup(ObjectsByName )?|a(dientControl(NoAttr)?|ph(SelectContext|TrackCtx|DollyCtx)|vity|bColor))|match)|x(pmPicker|form|bmLangPathList )|m(i(n(imizeApp)?|rrorJoint)|o(del(CurrentTimeCtx|Panel|Editor)|use|v(In|e(IKtoFK |VertexAlongDirection|KeyCtx)?|Out))|u(te|ltiProfileBirailSurface)|e(ssageLine|nu(BarLayout|Item(ToShelf )?|Editor)?|mory)|a(nip(Rotate(Context|LimitsCtx)|Move(Context|LimitsCtx)|Scale(Context|LimitsCtx)|Options)|tch|ke(Roll |SingleSurface|TubeOn |Identity|Paintable|bot|Live)|rker|g|x))|b(in(Membership|d(Skin|Pose))|o(neLattice|undary|x(ZoomCtx|DollyCtx))|u(tton(Manip)?|ild(BookmarkMenu|KeyframeMenu)|fferCurve)|e(ssel|vel(Plus)?)|l(indDataType|end(Shape(Panel|Editor)?|2|TwoAttr))|a(sename(Ex | )|tchRender|ke(Results|Simulation|Clip|PartialHistory|FluidShading )))))\\\\b' },\n         { caseInsensitive: true,\n           token: 'support.constant.mel',\n           regex: '\\\\b(s(h(ellTessellate|a(d(ing(Map|Engine)|erGlow)|pe))|n(ow|apshot(Shape)?)|c(ulpt|aleConstraint|ript)|t(yleCurve|itch(Srf|AsNurbsShell)|u(cco|dioClearCoat)|encil|roke(Globals)?)|i(ngleShadingSwitch|mpleVolumeShader)|o(ftMod(Manip|Handle)?|lidFractal)|u(rface(Sha(der|pe)|Info|EdManip|VarGroup|Luminance)|b(Surface|d(M(odifier(UV|World)?|ap(SewMove|Cut|pingManip))|B(lindData|ase)|iv(ReverseFaces|SurfaceVarGroup|Co(llapse|mponentId)|To(Nurbs|Poly))?|HierBlind|CleanTopology|Tweak(UV)?|P(lanarProj|rojManip)|LayoutUV|A(ddTopology|utoProj))|Curve))|p(BirailSrf|otLight|ring)|e(tRange|lectionListOperator)|k(inCluster|etchPlane)|quareSrf|ampler(Info)?|m(ooth(Curve|TangentSrf)|ear))|h(svToRgb|yper(GraphInfo|View|Layout)|ik(Solver|Handle|Effector)|oldMatrix|eightField|w(Re(nderGlobals|flectionMap)|Shader)|a(ir(System|Constraint|TubeShader)|rd(enPoint|wareRenderGlobals)))|n(o(n(ExtendedLightShapeNode|Linear|AmbientLightShapeNode)|ise|rmalConstraint)|urbs(Surface|Curve|T(oSubdiv(Proc)?|essellate)|DimShape)|e(twork|wtonField))|c(h(o(ice|oser)|ecker|aracter(Map|Offset)?)|o(n(straint|tr(olPoint|ast)|dition)|py(ColorSet|UVSet))|urve(Range|Shape|Normalizer(Linear|Angle)?|In(tersect|fo)|VarGroup|From(Mesh(CoM|Edge)?|Su(rface(Bnd|CoS|Iso)?|bdiv(Edge|Face)?)))|l(ip(Scheduler|Library)|o(se(stPointOnSurface|Surface|Curve)|th|ud)|uster(Handle)?|amp)|amera(View)?|r(eate(BPManip|ColorSet|UVSet)|ater))|t(ime(ToUnitConversion|Function)?|oo(nLineAttributes|lDrawManip)|urbulenceField|ex(BaseDeformManip|ture(BakeSet|2d|ToGeom|3d|Env)|SmudgeUVManip|LatticeDeformManip)|weak|angentConstraint|r(i(pleShadingSwitch|m(WithBoundaries)?)|ansform(Geometry)?))|i(n(s(tancer|ertKnot(Surface|Curve))|tersectSurface)|k(RPsolver|MCsolver|S(ystem|olver|Csolver|plineSolver)|Handle|PASolver|Effector)|m(plicit(Box|Sphere|Cone)|agePlane))|o(cean(Shader)?|pticalFX|ffset(Surface|C(os|urve))|ldBlindDataBase|rient(Constraint|ationMarker)|bject(RenderFilter|MultiFilter|BinFilter|S(criptFilter|et)|NameFilter|TypeFilter|Filter|AttrFilter))|d(yn(Globals|Base)|i(s(tance(Between|DimShape)|pla(yLayer(Manager)?|cementShader)|kCache)|rect(ionalLight|edDisc)|mensionShape)|o(ubleShadingSwitch|f)|pBirailSrf|e(tach(Surface|Curve)|pendNode|f(orm(Bend|S(ine|quash)|Twist|ableShape|F(unc|lare)|Wave)|ault(RenderUtilityList|ShaderList|TextureList|LightList))|lete(Co(lorSet|mponent)|UVSet))|ag(Node|Pose)|r(opoffLocator|agField))|u(seBackground|n(trim|i(t(Conversion|ToTimeConversion)|formField)|known(Transform|Dag)?)|vChooser)|j(iggle|oint(Cluster|Ffd|Lattice)?)|p(sdFileTex|hong(E)?|o(s(tProcessList|itionMarker)|int(MatrixMult|Constraint|On(SurfaceInfo|CurveInfo)|Emitter|Light)|l(y(Reduce|M(irror|o(difier(UV|World)?|ve(UV|Edge|Vertex|Face(tUV)?))|erge(UV|Edge|Vert|Face)|ap(Sew(Move)?|Cut|Del))|B(oolOp|evel|lindData|ase)|S(traightenUVBorder|oftEdge|ubd(Edge|Face)|p(h(ere|Proj)|lit(Ring|Edge|Vert)?)|e(parate|wEdge)|mooth(Proxy|Face)?)|Normal(izeUV|PerVertex)?|C(hipOff|yl(inder|Proj)|o(ne|pyUV|l(orPerVertex|lapse(Edge|F)))|u(t(Manip(Container)?)?|be)|loseBorder|rea(seEdge|t(or|eFace)))|T(o(Subdiv|rus)|weak(UV)?|r(iangulate|ansfer))|OptUvs|D(uplicateEdge|el(Edge|Vertex|Facet))|Unite|P(yramid|oke(Manip)?|lan(e|arProj)|r(i(sm|mitive)|oj))|Extrude(Edge|Vertex|Face)|VertexNormalManip|Quad|Flip(UV|Edge)|WedgeFace|LayoutUV|A(utoProj|ppend(Vertex)?|verageVertex))|eVectorConstraint))|fx(Geometry|Hair|Toon)|l(usMinusAverage|a(n(e|arTrimSurface)|ce(2dTexture|3dTexture)))|a(ssMatrix|irBlend|r(ti(cle(SamplerInfo|C(olorMapper|loud)|TranspMapper|IncandMapper|AgeMapper)?|tion)|ent(Constraint|Tessellate)|amDimension))|r(imitive|o(ject(ion|Curve|Tangent)|xyManager)))|e(n(tity|v(Ball|ironmentFog|S(phere|ky)|C(hrome|ube)|Fog))|x(t(end(Surface|Curve)|rude)|p(lodeNurbsShell|ression)))|v(iewManip|o(lume(Shader|Noise|Fog|Light|AxisField)|rtexField)|e(ctor(RenderGlobals|Product)|rtexBakeSet))|quadShadingSwitch|f(i(tBspline|eld|l(ter(Resample|Simplify|ClosestSample|Euler)?|e|letCurve))|o(urByFourMatrix|llicle)|urPointOn(MeshInfo|Subd)|f(BlendSrf(Obsolete)?|d|FilletSrf)|l(ow|uid(S(hape|liceManip)|Texture(2D|3D)|Emitter)|exorShape)|ra(ctal|meCache))|w(tAddMatrix|ire|ood|eightGeometryFilter|ater|rap)|l(ight(Info|Fog|Li(st|nker))?|o(cator|okAt|d(Group|Thresholds)|ft)|uminance|ea(stSquaresModifier|ther)|a(yered(Shader|Texture)|ttice|mbert))|a(n(notationShape|i(sotropic|m(Blend(InOut)?|C(urve(T(T|U|L|A)|U(T|U|L|A))?|lip)))|gleBetween)|tt(ach(Surface|Curve)|rHierarchyTest)|i(rField|mConstraint)|dd(Matrix|DoubleLinear)|udio|vg(SurfacePoints|NurbsSurfacePoints|Curves)|lign(Manip|Surface|Curve)|r(cLengthDimension|tAttrPaintTest|eaLight|rayMapper)|mbientLight|bstractBase(NurbsConversion|Create))|r(igid(Body|Solver|Constraint)|o(ck|undConstantRadius)|e(s(olution|ultCurve(TimeTo(Time|Unitless|Linear|Angular))?)|nder(Rect|Globals(List)?|Box|Sphere|Cone|Quality|L(ight|ayer(Manager)?))|cord|v(olve(dPrimitive)?|erse(Surface|Curve)?)|f(erence|lect)|map(Hsv|Color|Value)|build(Surface|Curve))|a(dialField|mp(Shader)?)|gbToHsv|bfSrf)|g(uide|eo(Connect(or|able)|metry(Shape|Constraint|VarGroup|Filter))|lobal(Stitch|CacheControl)|ammaCorrect|r(id|oup(Id|Parts)|a(nite|vityField)))|Fur(Globals|Description|Feedback|Attractors)|xformManip|m(o(tionPath|untain|vie)|u(te|lt(Matrix|i(plyDivide|listerLight)|DoubleLinear))|pBirailSrf|e(sh(VarGroup)?|ntalray(Texture|IblShape))|a(terialInfo|ke(Group|Nurb(sSquare|Sphere|C(ylinder|ircle|one|ube)|Torus|Plane)|CircularArc|T(hreePointCircularArc|extCurves|woPointCircularArc))|rble))|b(irailSrf|o(neLattice|olean|undary(Base)?)|u(lge|mp(2d|3d))|evel(Plus)?|l(in(n|dDataTemplate)|end(Shape|Color(s|Sets)|TwoAttr|Device|Weighted)?)|a(se(GeometryVarGroup|ShadingSwitch|Lattice)|keSet)|r(ownian|ush)))\\\\b' },\n         { caseInsensitive: true,\n           token: 'keyword.control.mel',\n           regex: '\\\\b(if|in|else|for|while|break|continue|case|default|do|switch|return|switch|case|source|catch|alias)\\\\b' },\n         { token: 'keyword.other.mel', regex: '\\\\b(global)\\\\b' },\n         { caseInsensitive: true,\n           token: 'constant.language.mel',\n           regex: '\\\\b(null|undefined)\\\\b' },\n         { token: 'constant.numeric.mel',\n           regex: '\\\\b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\\\\.?[0-9]*)|(\\\\.[0-9]+))((e|E)(\\\\+|-)?[0-9]+)?)(L|l|UL|ul|u|U|F|f)?\\\\b' },\n         { token: 'punctuation.definition.string.begin.mel',\n           regex: '\"',\n           push: \n            [ { token: 'constant.character.escape.mel', regex: '\\\\\\\\.' },\n              { token: 'punctuation.definition.string.end.mel',\n                regex: '\"',\n                next: 'pop' },\n              { defaultToken: 'string.quoted.double.mel' } ] },\n         \n         { token: [ 'variable.other.mel', 'punctuation.definition.variable.mel' ],\n           regex: '(\\\\$)([a-zA-Z_\\\\x7f-\\\\xff][a-zA-Z0-9_\\\\x7f-\\\\xff]*?\\\\b)' },\n           \n         { token: 'punctuation.definition.string.begin.mel',\n           regex: '\\'',\n           push: \n            [ { token: 'constant.character.escape.mel', regex: '\\\\\\\\.' },\n              { token: 'punctuation.definition.string.end.mel',\n                regex: '\\'',\n                next: 'pop' },\n              { defaultToken: 'string.quoted.single.mel' } ] },\n         \n         { token: 'constant.language.mel',\n           regex: '\\\\b(false|true|yes|no|on|off)\\\\b' },\n           \n         { token: 'punctuation.definition.comment.mel',\n           regex: '/\\\\*',\n           push: \n            [ { token: 'punctuation.definition.comment.mel',\n                regex: '\\\\*/',\n                next: 'pop' },\n              { defaultToken: 'comment.block.mel' } ] },\n         \n         { token: [ 'comment.line.double-slash.mel', 'punctuation.definition.comment.mel' ],\n           regex: '(//)(.*$\\\\n?)' },\n           \n         { caseInsensitive: true,\n           token: 'keyword.operator.mel',\n           regex: '\\\\b(instanceof)\\\\b' },\n         { token: 'keyword.operator.symbolic.mel',\n           regex: '[-\\\\!\\\\%\\\\&\\\\*\\\\+\\\\=\\\\/\\\\?\\\\:]' },\n         \n         { token: [ 'meta.preprocessor.mel', 'punctuation.definition.preprocessor.mel' ],\n           regex: '(^[ \\\\t]*)((?:#)[a-zA-Z]+)' },\n         \n         { token: [ 'meta.function.mel', 'keyword.other.mel', 'storage.type.mel', 'entity.name.function.mel', 'punctuation.section.function.mel' ],\n           regex: '(global\\\\s*)?(proc\\\\s*)(\\\\w+\\\\s*\\\\[?\\\\]?\\\\s+|\\\\s+)([A-Za-z_][A-Za-z0-9_\\\\.]*)(\\\\s*\\\\()',\n           push: \n            [ { include: '$self' },\n              { token: 'punctuation.section.function.mel',\n                regex: '\\\\)',\n                next: 'pop' },\n              { defaultToken: 'meta.function.mel' } ] }\n              \n              ] };\n    \n    this.normalizeRules();\n};\n\noop.inherits(MELHighlightRules, TextHighlightRules);\n\nexports.MELHighlightRules = MELHighlightRules;\n});"
  },
  {
    "path": "lib/ace/mode/mixal.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2017, Ruslan Batdalov\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar MixalHighlightRules = require(\"./mixal_highlight_rules\").MixalHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = MixalHighlightRules;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.$id = \"ace/mode/mixal\";\n    this.lineCommentStart = \"*\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/mixal_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2017, Ruslan Batdalov\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar MixalHighlightRules = function() {\n    var isValidSymbol = function(string) {\n        return string && string.search(/^[A-Z\\u0394\\u03a0\\u03a30-9]{1,10}$/) > -1 && string.search(/[A-Z\\u0394\\u03a0\\u03a3]/) > -1;\n    };\n\n    var isValidOp = function(op) {\n        return op && [\n            'NOP', 'ADD', 'FADD', 'SUB', 'FSUB', 'MUL', 'FMUL', 'DIV', 'FDIV', 'NUM', 'CHAR', 'HLT',\n            'SLA', 'SRA', 'SLAX', 'SRAX', 'SLC', 'SRC', 'MOVE', 'LDA', 'LD1', 'LD2', 'LD3', 'LD4',\n            'LD5', 'LD6', 'LDX', 'LDAN', 'LD1N', 'LD2N', 'LD3N', 'LD4N', 'LD5N', 'LD6N', 'LDXN',\n            'STA', 'ST1', 'ST2', 'ST3', 'ST4', 'ST5', 'ST6', 'STX', 'STJ', 'STZ', 'JBUS', 'IOC',\n            'IN', 'OUT', 'JRED', 'JMP', 'JSJ', 'JOV', 'JNOV', 'JL', 'JE', 'JG', 'JGE', 'JNE', 'JLE',\n            'JAN', 'JAZ', 'JAP', 'JANN', 'JANZ', 'JANP', 'J1N', 'J1Z', 'J1P', 'J1NN', 'J1NZ',\n            'J1NP', 'J2N', 'J2Z', 'J2P', 'J2NN', 'J2NZ', 'J2NP','J3N', 'J3Z', 'J3P', 'J3NN', 'J3NZ',\n            'J3NP', 'J4N', 'J4Z', 'J4P', 'J4NN', 'J4NZ', 'J4NP', 'J5N', 'J5Z', 'J5P', 'J5NN',\n            'J5NZ', 'J5NP','J6N', 'J6Z', 'J6P', 'J6NN', 'J6NZ', 'J6NP', 'JXAN', 'JXZ', 'JXP',\n            'JXNN', 'JXNZ', 'JXNP', 'INCA', 'DECA', 'ENTA', 'ENNA', 'INC1', 'DEC1', 'ENT1', 'ENN1',\n            'INC2', 'DEC2', 'ENT2', 'ENN2', 'INC3', 'DEC3', 'ENT3', 'ENN3', 'INC4', 'DEC4', 'ENT4',\n            'ENN4', 'INC5', 'DEC5', 'ENT5', 'ENN5', 'INC6', 'DEC6', 'ENT6', 'ENN6', 'INCX', 'DECX',\n            'ENTX', 'ENNX', 'CMPA', 'FCMP', 'CMP1', 'CMP2', 'CMP3', 'CMP4', 'CMP5', 'CMP6', 'CMPX',\n            'EQU', 'ORIG', 'CON', 'ALF', 'END'\n        ].indexOf(op) > -1;\n    };\n\n    var containsOnlySupportedCharacters = function(string) {\n        return string && string.search(/[^ A-Z\\u0394\\u03a0\\u03a30-9.,()+*/=$<>@;:'-]/) == -1;\n    };\n\n    this.$rules = {\n        \"start\" : [{\n            token: \"comment.line.character\",\n            regex: /^ *\\*.*$/\n        }, {\n            token: function(label, space0, keyword, space1, literal, comment) {\n                return [\n                    isValidSymbol(label) ? \"variable.other\" : \"invalid.illegal\",\n                    \"text\",\n                    \"keyword.control\",\n                    \"text\",\n                    containsOnlySupportedCharacters(literal) ? \"text\" : \"invalid.illegal\",\n                    \"comment.line.character\"\n                ];\n            },\n            regex: /^(\\S+)?( +)(ALF)(  )(.{5})(\\s+.*)?$/\n        }, {\n            token: function(label, space0, keyword, space1, literal, comment) {\n                return [\n                    isValidSymbol(label) ? \"variable.other\" : \"invalid.illegal\",\n                    \"text\",\n                    \"keyword.control\",\n                    \"text\",\n                    containsOnlySupportedCharacters(literal) ? \"text\" : \"invalid.illegal\",\n                    \"comment.line.character\"\n                ];\n            },\n            regex: /^(\\S+)?( +)(ALF)( )(\\S.{4})(\\s+.*)?$/\n        }, {\n            token: function(label, space0, op, comment) {\n                return [\n                    isValidSymbol(label) ? \"variable.other\" : \"invalid.illegal\",\n                    \"text\",\n                    isValidOp(op) ? \"keyword.control\" : \"invalid.illegal\",\n                    \"comment.line.character\"\n                ];\n            },\n            regex: /^(\\S+)?( +)(\\S+)(?:\\s*)$/\n        }, {\n            token: function(label, space0, op, space1, address, comment) {\n                return [\n                    isValidSymbol(label) ? \"variable.other\" : \"invalid.illegal\",\n                    \"text\",\n                    isValidOp(op) ? \"keyword.control\" : \"invalid.illegal\",\n                    \"text\",\n                    containsOnlySupportedCharacters(address) ? \"text\" : \"invalid.illegal\",\n                    \"comment.line.character\"\n                ];\n            },\n            regex: /^(\\S+)?( +)(\\S+)( +)(\\S+)(\\s+.*)?$/\n        }, {\n            defaultToken: \"text\"\n        }]\n    };\n};\n\noop.inherits(MixalHighlightRules, TextHighlightRules);\n\nexports.MixalHighlightRules = MixalHighlightRules;\n\n});\n"
  },
  {
    "path": "lib/ace/mode/mushcode.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar MushCodeRules = require(\"./mushcode_highlight_rules\").MushCodeRules;\nvar PythonFoldMode = require(\"./folding/pythonic\").FoldMode;\nvar Range = require(\"../range\").Range;\n\nvar Mode = function() {\n    this.HighlightRules = MushCodeRules;\n    this.foldingRules = new PythonFoldMode(\"\\\\:\");\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[:]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n   var outdents = {\n        \"pass\": 1,\n        \"return\": 1,\n        \"raise\": 1,\n        \"break\": 1,\n        \"continue\": 1\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        if (input !== \"\\r\\n\" && input !== \"\\r\" && input !== \"\\n\")\n            return false;\n\n        var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens;\n\n        if (!tokens)\n            return false;\n\n        // ignore trailing comments\n        do {\n            var last = tokens.pop();\n        } while (last && (last.type == \"comment\" || (last.type == \"text\" && last.value.match(/^\\s+$/))));\n\n        if (!last)\n            return false;\n\n        return (last.type == \"keyword\" && outdents[last.value]);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        // outdenting in python is slightly different because it always applies\n        // to the next line and only of a new line is inserted\n\n        row += 1;\n        var indent = this.$getIndent(doc.getLine(row));\n        var tab = doc.getTabString();\n        if (indent.slice(-tab.length) == tab)\n            doc.remove(new Range(row, indent.length-tab.length, row, indent.length));\n    };\n\n    this.$id = \"ace/mode/mushcode\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\n\n\n"
  },
  {
    "path": "lib/ace/mode/mushcode_highlight_rules.js",
    "content": "/*\n * MUSHCodeMode\n */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar MushCodeRules = function() {\n\n\n    var keywords = (\n \"@if|\"+\n \"@ifelse|\"+\n \"@switch|\"+\n \"@halt|\"+\n \"@dolist|\"+\n \"@create|\"+\n \"@scent|\"+\n \"@sound|\"+\n \"@touch|\"+\n \"@ataste|\"+\n \"@osound|\"+\n \"@ahear|\"+\n \"@aahear|\"+\n \"@amhear|\"+\n \"@otouch|\"+\n \"@otaste|\"+\n \"@drop|\"+\n \"@odrop|\"+\n \"@adrop|\"+\n \"@dropfail|\"+\n \"@odropfail|\"+\n \"@smell|\"+\n \"@oemit|\"+\n \"@emit|\"+\n \"@pemit|\"+\n \"@parent|\"+\n \"@clone|\"+\n \"@taste|\"+\n \"whisper|\"+\n \"page|\"+\n \"say|\"+\n \"pose|\"+\n \"semipose|\"+\n \"teach|\"+\n \"touch|\"+\n \"taste|\"+\n \"smell|\"+\n \"listen|\"+\n \"look|\"+\n \"move|\"+\n \"go|\"+\n \"home|\"+\n \"follow|\"+\n \"unfollow|\"+\n \"desert|\"+\n \"dismiss|\"+\n \"@tel\"\n    );\n\n    var builtinConstants = (\n        \"=#0\"\n    );\n\n    var builtinFunctions = (\n \"default|\"+\n \"edefault|\"+\n \"eval|\"+\n \"get_eval|\"+\n \"get|\"+\n \"grep|\"+\n \"grepi|\"+\n \"hasattr|\"+\n \"hasattrp|\"+\n \"hasattrval|\"+\n \"hasattrpval|\"+\n \"lattr|\"+\n \"nattr|\"+\n \"poss|\"+\n \"udefault|\"+\n \"ufun|\"+\n \"u|\"+\n \"v|\"+\n \"uldefault|\"+\n \"xget|\"+\n \"zfun|\"+\n \"band|\"+\n \"bnand|\"+\n \"bnot|\"+\n \"bor|\"+\n \"bxor|\"+\n \"shl|\"+\n \"shr|\"+\n \"and|\"+\n \"cand|\"+\n \"cor|\"+\n \"eq|\"+\n \"gt|\"+\n \"gte|\"+\n \"lt|\"+\n \"lte|\"+\n \"nand|\"+\n \"neq|\"+\n \"nor|\"+\n \"not|\"+\n \"or|\"+\n \"t|\"+\n \"xor|\"+\n \"con|\"+\n \"entrances|\"+\n \"exit|\"+\n \"followers|\"+\n \"home|\"+\n \"lcon|\"+\n \"lexits|\"+\n \"loc|\"+\n \"locate|\"+\n \"lparent|\"+\n \"lsearch|\"+\n \"next|\"+\n \"num|\"+\n \"owner|\"+\n \"parent|\"+\n \"pmatch|\"+\n \"rloc|\"+\n \"rnum|\"+\n \"room|\"+\n \"where|\"+\n \"zone|\"+\n \"worn|\"+\n \"held|\"+\n \"carried|\"+\n \"acos|\"+\n \"asin|\"+\n \"atan|\"+\n \"ceil|\"+\n \"cos|\"+\n \"e|\"+\n \"exp|\"+\n \"fdiv|\"+\n \"fmod|\"+\n \"floor|\"+\n \"log|\"+\n \"ln|\"+\n \"pi|\"+\n \"power|\"+\n \"round|\"+\n \"sin|\"+\n \"sqrt|\"+\n \"tan|\"+\n \"aposs|\"+\n \"andflags|\"+\n \"conn|\"+\n \"commandssent|\"+\n \"controls|\"+\n \"doing|\"+\n \"elock|\"+\n \"findable|\"+\n \"flags|\"+\n \"fullname|\"+\n \"hasflag|\"+\n \"haspower|\"+\n \"hastype|\"+\n \"hidden|\"+\n \"idle|\"+\n \"isbaker|\"+\n \"lock|\"+\n \"lstats|\"+\n \"money|\"+\n \"who|\"+\n \"name|\"+\n \"nearby|\"+\n \"obj|\"+\n \"objflags|\"+\n \"photo|\"+\n \"poll|\"+\n \"powers|\"+\n \"pendingtext|\"+\n \"receivedtext|\"+\n \"restarts|\"+\n \"restarttime|\"+\n \"subj|\"+\n \"shortestpath|\"+\n \"tmoney|\"+\n \"type|\"+\n \"visible|\"+\n \"cat|\"+\n \"element|\"+\n \"elements|\"+\n \"extract|\"+\n \"filter|\"+\n \"filterbool|\"+\n \"first|\"+\n \"foreach|\"+\n \"fold|\"+\n \"grab|\"+\n \"graball|\"+\n \"index|\"+\n \"insert|\"+\n \"itemize|\"+\n \"items|\"+\n \"iter|\"+\n \"last|\"+\n \"ldelete|\"+\n \"map|\"+\n \"match|\"+\n \"matchall|\"+\n \"member|\"+\n \"mix|\"+\n \"munge|\"+\n \"pick|\"+\n \"remove|\"+\n \"replace|\"+\n \"rest|\"+\n \"revwords|\"+\n \"setdiff|\"+\n \"setinter|\"+\n \"setunion|\"+\n \"shuffle|\"+\n \"sort|\"+\n \"sortby|\"+\n \"splice|\"+\n \"step|\"+\n \"wordpos|\"+\n \"words|\"+\n \"add|\"+\n \"lmath|\"+\n \"max|\"+\n \"mean|\"+\n \"median|\"+\n \"min|\"+\n \"mul|\"+\n \"percent|\"+\n \"sign|\"+\n \"stddev|\"+\n \"sub|\"+\n \"val|\"+\n \"bound|\"+\n \"abs|\"+\n \"inc|\"+\n \"dec|\"+\n \"dist2d|\"+\n \"dist3d|\"+\n \"div|\"+\n \"floordiv|\"+\n \"mod|\"+\n \"modulo|\"+\n \"remainder|\"+\n \"vadd|\"+\n \"vdim|\"+\n \"vdot|\"+\n \"vmag|\"+\n \"vmax|\"+\n \"vmin|\"+\n \"vmul|\"+\n \"vsub|\"+\n \"vunit|\"+\n \"regedit|\"+\n \"regeditall|\"+\n \"regeditalli|\"+\n \"regediti|\"+\n \"regmatch|\"+\n \"regmatchi|\"+\n \"regrab|\"+\n \"regraball|\"+\n \"regraballi|\"+\n \"regrabi|\"+\n \"regrep|\"+\n \"regrepi|\"+\n \"after|\"+\n \"alphamin|\"+\n \"alphamax|\"+\n \"art|\"+\n \"before|\"+\n \"brackets|\"+\n \"capstr|\"+\n \"case|\"+\n \"caseall|\"+\n \"center|\"+\n \"containsfansi|\"+\n \"comp|\"+\n \"decompose|\"+\n \"decrypt|\"+\n \"delete|\"+\n \"edit|\"+\n \"encrypt|\"+\n \"escape|\"+\n \"if|\"+\n \"ifelse|\"+\n \"lcstr|\"+\n \"left|\"+\n \"lit|\"+\n \"ljust|\"+\n \"merge|\"+\n \"mid|\"+\n \"ostrlen|\"+\n \"pos|\"+\n \"repeat|\"+\n \"reverse|\"+\n \"right|\"+\n \"rjust|\"+\n \"scramble|\"+\n \"secure|\"+\n \"space|\"+\n \"spellnum|\"+\n \"squish|\"+\n \"strcat|\"+\n \"strmatch|\"+\n \"strinsert|\"+\n \"stripansi|\"+\n \"stripfansi|\"+\n \"strlen|\"+\n \"switch|\"+\n \"switchall|\"+\n \"table|\"+\n \"tr|\"+\n \"trim|\"+\n \"ucstr|\"+\n \"unsafe|\"+\n \"wrap|\"+\n \"ctitle|\"+\n \"cwho|\"+\n \"channels|\"+\n \"clock|\"+\n \"cflags|\"+\n \"ilev|\"+\n \"itext|\"+\n \"inum|\"+\n \"convsecs|\"+\n \"convutcsecs|\"+\n \"convtime|\"+\n \"ctime|\"+\n \"etimefmt|\"+\n \"isdaylight|\"+\n \"mtime|\"+\n \"secs|\"+\n \"msecs|\"+\n \"starttime|\"+\n \"time|\"+\n \"timefmt|\"+\n \"timestring|\"+\n \"utctime|\"+\n \"atrlock|\"+\n \"clone|\"+\n \"create|\"+\n \"cook|\"+\n \"dig|\"+\n \"emit|\"+\n \"lemit|\"+\n \"link|\"+\n \"oemit|\"+\n \"open|\"+\n \"pemit|\"+\n \"remit|\"+\n \"set|\"+\n \"tel|\"+\n \"wipe|\"+\n \"zemit|\"+\n \"fbcreate|\"+\n \"fbdestroy|\"+\n \"fbwrite|\"+\n \"fbclear|\"+\n \"fbcopy|\"+\n \"fbcopyto|\"+\n \"fbclip|\"+\n \"fbdump|\"+\n \"fbflush|\"+\n \"fbhset|\"+\n \"fblist|\"+\n \"fbstats|\"+\n \"qentries|\"+\n \"qentry|\"+\n \"play|\"+\n \"ansi|\"+\n \"break|\"+\n \"c|\"+\n \"asc|\"+\n \"die|\"+\n \"isdbref|\"+\n \"isint|\"+\n \"isnum|\"+\n \"isletters|\"+\n \"linecoords|\"+\n \"localize|\"+\n \"lnum|\"+\n \"nameshort|\"+\n \"null|\"+\n \"objeval|\"+\n \"r|\"+\n \"rand|\"+\n \"s|\"+\n \"setq|\"+\n \"setr|\"+\n \"soundex|\"+\n \"soundslike|\"+\n \"valid|\"+\n \"vchart|\"+\n \"vchart2|\"+\n \"vlabel|\"+\n \"@@|\"+\n \"bakerdays|\"+\n \"bodybuild|\"+\n \"box|\"+\n \"capall|\"+\n \"catalog|\"+\n \"children|\"+\n \"ctrailer|\"+\n \"darttime|\"+\n \"debt|\"+\n \"detailbar|\"+\n \"exploredroom|\"+\n \"fansitoansi|\"+\n \"fansitoxansi|\"+\n \"fullbar|\"+\n \"halfbar|\"+\n \"isdarted|\"+\n \"isnewbie|\"+\n \"isword|\"+\n \"lambda|\"+\n \"lobjects|\"+\n \"lplayers|\"+\n \"lthings|\"+\n \"lvexits|\"+\n \"lvobjects|\"+\n \"lvplayers|\"+\n \"lvthings|\"+\n \"newswrap|\"+\n \"numsuffix|\"+\n \"playerson|\"+\n \"playersthisweek|\"+\n \"randomad|\"+\n \"randword|\"+\n \"realrandword|\"+\n \"replacechr|\"+\n \"second|\"+\n \"splitamount|\"+\n \"strlenall|\"+\n \"text|\"+\n \"third|\"+\n \"tofansi|\"+\n \"totalac|\"+\n \"unique|\"+\n \"getaddressroom|\"+\n \"listpropertycomm|\"+\n \"listpropertyres|\"+\n \"lotowner|\"+\n \"lotrating|\"+\n \"lotratingcount|\"+\n \"lotvalue|\"+\n \"boughtproduct|\"+\n \"companyabb|\"+\n \"companyicon|\"+\n \"companylist|\"+\n \"companyname|\"+\n \"companyowners|\"+\n \"companyvalue|\"+\n \"employees|\"+\n \"invested|\"+\n \"productlist|\"+\n \"productname|\"+\n \"productowners|\"+\n \"productrating|\"+\n \"productratingcount|\"+\n \"productsoldat|\"+\n \"producttype|\"+\n \"ratedproduct|\"+\n \"soldproduct|\"+\n \"topproducts|\"+\n \"totalspentonproduct|\"+\n \"totalstock|\"+\n \"transfermoney|\"+\n \"uniquebuyercount|\"+\n \"uniqueproductsbought|\"+\n \"validcompany|\"+\n \"deletepicture|\"+\n \"fbsave|\"+\n \"getpicturesecurity|\"+\n \"haspicture|\"+\n \"listpictures|\"+\n \"picturesize|\"+\n \"replacecolor|\"+\n \"rgbtocolor|\"+\n \"savepicture|\"+\n \"setpicturesecurity|\"+\n \"showpicture|\"+\n \"piechart|\"+\n \"piechartlabel|\"+\n \"createmaze|\"+\n \"drawmaze|\"+\n \"drawwireframe\"\n    );\n    var keywordMapper = this.createKeywordMapper({\n        \"invalid.deprecated\": \"debugger\",\n        \"support.function\": builtinFunctions,\n        \"constant.language\": builtinConstants,\n        \"keyword\": keywords\n    }, \"identifier\");\n\n    var strPre = \"(?:r|u|ur|R|U|UR|Ur|uR)?\";\n\n    var decimalInteger = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n    var octInteger = \"(?:0[oO]?[0-7]+)\";\n    var hexInteger = \"(?:0[xX][\\\\dA-Fa-f]+)\";\n    var binInteger = \"(?:0[bB][01]+)\";\n    var integer = \"(?:\" + decimalInteger + \"|\" + octInteger + \"|\" + hexInteger + \"|\" + binInteger + \")\";\n\n    var exponent = \"(?:[eE][+-]?\\\\d+)\";\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var exponentFloat = \"(?:(?:\" + pointFloat + \"|\" +  intPart + \")\" + exponent + \")\";\n    var floatNumber = \"(?:\" + exponentFloat + \"|\" + pointFloat + \")\";\n\n    this.$rules = {\n        \"start\" : [\n         {\n                token : \"variable\", // mush substitution register\n                regex : \"%[0-9]{1}\"\n         },\n         {\n                token : \"variable\", // mush substitution register\n                regex : \"%q[0-9A-Za-z]{1}\"\n         },\n         {\n                token : \"variable\", // mush special character register\n                regex : \"%[a-zA-Z]{1}\"\n         },\n         {\n                token: \"variable.language\",\n                regex: \"%[a-z0-9-_]+\"\n         },\n        {\n            token : \"constant.numeric\", // imaginary\n            regex : \"(?:\" + floatNumber + \"|\\\\d+)[jJ]\\\\b\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : floatNumber\n        }, {\n            token : \"constant.numeric\", // long integer\n            regex : integer + \"[lL]\\\\b\"\n        }, {\n            token : \"constant.numeric\", // integer\n            regex : integer + \"\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|#|%|<<|>>|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|=\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[\\\\[\\\\(\\\\{]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\]\\\\)\\\\}]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+\"\n        } ]\n    };\n};\n\noop.inherits(MushCodeRules, TextHighlightRules);\n\nexports.MushCodeRules = MushCodeRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/mysql.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"../mode/text\").Mode;\nvar MysqlHighlightRules = require(\"./mysql_highlight_rules\").MysqlHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = MysqlHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {       \n    this.lineCommentStart = [\"--\", \"#\"]; // todo space\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.$id = \"ace/mode/mysql\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/mysql_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar MysqlHighlightRules = function() {\n\n    var mySqlKeywords = /*sql*/ \"alter|and|as|asc|between|count|create|delete|desc|distinct|drop|from|having|in|insert|into|is|join|like|not|on|or|order|select|set|table|union|update|values|where\"\n        /*mysql*/ + \"|accessible|action|add|after|algorithm|all|analyze|asensitive|at|authors|auto_increment|autocommit|avg|avg_row_length|before|binary|binlog|both|btree|cache|call|cascade|cascaded|case|catalog_name|chain|change|changed|character|check|checkpoint|checksum|class_origin|client_statistics|close|coalesce|code|collate|collation|collations|column|columns|comment|commit|committed|completion|concurrent|condition|connection|consistent|constraint|contains|continue|contributors|convert|cross|current_date|current_time|current_timestamp|current_user|cursor|data|database|databases|day_hour|day_microsecond|day_minute|day_second|deallocate|dec|declare|default|delay_key_write|delayed|delimiter|des_key_file|describe|deterministic|dev_pop|dev_samp|deviance|directory|disable|discard|distinctrow|div|dual|dumpfile|each|elseif|enable|enclosed|end|ends|engine|engines|enum|errors|escape|escaped|even|event|events|every|execute|exists|exit|explain|extended|fast|fetch|field|fields|first|flush|for|force|foreign|found_rows|full|fulltext|function|general|global|grant|grants|group|groupby_concat|handler|hash|help|high_priority|hosts|hour_microsecond|hour_minute|hour_second|if|ignore|ignore_server_ids|import|index|index_statistics|infile|inner|innodb|inout|insensitive|insert_method|install|interval|invoker|isolation|iterate|key|keys|kill|language|last|leading|leave|left|level|limit|linear|lines|list|load|local|localtime|localtimestamp|lock|logs|low_priority|master|master_heartbeat_period|master_ssl_verify_server_cert|masters|match|max|max_rows|maxvalue|message_text|middleint|migrate|min|min_rows|minute_microsecond|minute_second|mod|mode|modifies|modify|mutex|mysql_errno|natural|next|no|no_write_to_binlog|offline|offset|one|online|open|optimize|option|optionally|out|outer|outfile|pack_keys|parser|partition|partitions|password|phase|plugin|plugins|prepare|preserve|prev|primary|privileges|procedure|processlist|profile|profiles|purge|query|quick|range|read|read_write|reads|real|rebuild|recover|references|regexp|relaylog|release|remove|rename|reorganize|repair|repeatable|replace|require|resignal|restrict|resume|return|returns|revoke|right|rlike|rollback|rollup|row|row_format|rtree|savepoint|schedule|schema|schema_name|schemas|second_microsecond|security|sensitive|separator|serializable|server|session|share|show|signal|slave|slow|smallint|snapshot|soname|spatial|specific|sql|sql_big_result|sql_buffer_result|sql_cache|sql_calc_found_rows|sql_no_cache|sql_small_result|sqlexception|sqlstate|sqlwarning|ssl|start|starting|starts|status|std|stddev|stddev_pop|stddev_samp|storage|straight_join|subclass_origin|sum|suspend|table_name|table_statistics|tables|tablespace|temporary|terminated|to|trailing|transaction|trigger|triggers|truncate|uncommitted|undo|uninstall|unique|unlock|upgrade|usage|use|use_frm|user|user_resources|user_statistics|using|utc_date|utc_time|utc_timestamp|value|variables|varying|view|views|warnings|when|while|with|work|write|xa|xor|year_month|zerofill|begin|do|then|else|loop|repeat\";\n    var builtins = \"by|bool|boolean|bit|blob|decimal|double|enum|float|long|longblob|longtext|medium|mediumblob|mediumint|mediumtext|time|timestamp|tinyblob|tinyint|tinytext|text|bigint|int|int1|int2|int3|int4|int8|integer|float|float4|float8|double|char|varbinary|varchar|varcharacter|precision|date|datetime|year|unsigned|signed|numeric|ucase|lcase|mid|len|round|rank|now|format|coalesce|ifnull|isnull|nvl\";\n    var variable = \"charset|clear|connect|edit|ego|exit|go|help|nopager|notee|nowarning|pager|print|prompt|quit|rehash|source|status|system|tee\";\n\n    //operatorChars: /^[*+\\-%<>!=&|^]/,\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": builtins,\n        \"keyword\": mySqlKeywords,\n        \"constant\": \"false|true|null|unknown|date|time|timestamp|ODBCdotTable|zerolessFloat\",\n        \"variable.language\": variable\n    }, \"identifier\", true);\n\n    \n    function string(rule) {\n        var start = rule.start;\n        var escapeSeq = rule.escape;\n        return {\n            token: \"string.start\",\n            regex: start,\n            next: [\n                {token: \"constant.language.escape\", regex: escapeSeq},\n                {token: \"string.end\", next: \"start\", regex: start},\n                {defaultToken: \"string\"}\n            ]\n        };\n    }\n\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment\", regex : \"(?:-- |#).*$\"\n        },  \n        string({start: '\"', escape: /\\\\[0'\"bnrtZ\\\\%_]?/}),\n        string({start: \"'\", escape: /\\\\[0'\"bnrtZ\\\\%_]?/}),\n        DocCommentHighlightRules.getStartRule(\"doc-start\"),\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next : \"comment\"\n        }, {\n            token : \"constant.numeric\", // hex\n            regex : /0[xX][0-9a-fA-F]+|[xX]'[0-9a-fA-F]+'|0[bB][01]+|[bB]'[01]+'/\n        }, {\n            token : \"constant.numeric\", // float\n            regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token : \"constant.class\",\n            regex : \"@@?[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token : \"constant.buildin\",\n            regex : \"`[^`]*`\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|%|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[\\\\(]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\)]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+\"\n        } ],\n        \"comment\" : [\n            {token : \"comment\", regex : \"\\\\*\\\\/\", next : \"start\"},\n            {defaultToken : \"comment\"}\n        ]\n    };\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n    this.normalizeRules();\n};\n\noop.inherits(MysqlHighlightRules, TextHighlightRules);\n\nexports.MysqlHighlightRules = MysqlHighlightRules;\n});\n\n"
  },
  {
    "path": "lib/ace/mode/nix.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n *\n * Contributor(s):\n * \n *    Zef Hemel\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar CMode = require(\"./c_cpp\").Mode;\nvar NixHighlightRules = require(\"./nix_highlight_rules\").NixHighlightRules;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    CMode.call(this);\n    this.HighlightRules = NixHighlightRules;\n    this.foldingRules = new CStyleFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, CMode);\n\n(function() { \n    this.lineCommentStart = \"#\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$id = \"ace/mode/nix\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});"
  },
  {
    "path": "lib/ace/mode/nix_highlight_rules.js",
    "content": "define(function(require, exports, module) {\n    \"use strict\";\n\n    var oop = require(\"../lib/oop\");\n    var TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\n    var NixHighlightRules = function() {\n\n        var constantLanguage = \"true|false\";\n        var keywordControl = \"with|import|if|else|then|inherit\";\n        var keywordDeclaration = \"let|in|rec\";\n\n        var keywordMapper = this.createKeywordMapper({\n            \"constant.language.nix\": constantLanguage,\n            \"keyword.control.nix\": keywordControl,\n            \"keyword.declaration.nix\": keywordDeclaration\n        }, \"identifier\");\n\n        this.$rules = {\n            \"start\": [{\n                    token: \"comment\",\n                    regex: /#.*$/\n                }, {\n                    token: \"comment\",\n                    regex: /\\/\\*/,\n                    next: \"comment\"\n                }, {\n                    token: \"constant\",\n                    regex: \"<[^>]+>\"\n                }, {\n                    regex: \"(==|!=|<=?|>=?)\",\n                    token: [\"keyword.operator.comparison.nix\"]\n                }, {\n                    regex: \"((?:[+*/%-]|\\\\~)=)\",\n                    token: [\"keyword.operator.assignment.arithmetic.nix\"]\n                }, {\n                    regex: \"=\",\n                    token: \"keyword.operator.assignment.nix\"\n                }, {\n                    token: \"string\",\n                    regex: \"''\",\n                    next: \"qqdoc\"\n                }, {\n                    token: \"string\",\n                    regex: \"'\",\n                    next: \"qstring\"\n                }, {\n                    token: \"string\",\n                    regex: '\"',\n                    push: \"qqstring\"\n                }, {\n                    token: \"constant.numeric\", // hex\n                    regex: \"0[xX][0-9a-fA-F]+\\\\b\"\n                }, {\n                    token: \"constant.numeric\", // float\n                    regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n                }, {\n                    token: keywordMapper,\n                    regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n                }, {\n                    regex: \"}\",\n                    token: function(val, start, stack) {\n                        return stack[1] && stack[1].charAt(0) == \"q\" ? \"constant.language.escape\" : \"text\";\n                    },\n                    next: \"pop\"\n                }],\n            \"comment\": [{\n                token: \"comment\", // closing comment\n                regex: \"\\\\*\\\\/\",\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }],\n            \"qqdoc\": [\n                {\n                    token: \"constant.language.escape\",\n                    regex: /\\$\\{/,\n                    push: \"start\"\n                }, {\n                    token: \"string\",\n                    regex: \"''\",\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"string\"\n                }],\n            \"qqstring\": [\n                {\n                    token: \"constant.language.escape\",\n                    regex: /\\$\\{/,\n                    push: \"start\"\n                }, {\n                    token: \"string\",\n                    regex: '\"',\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"string\"\n                }],\n            \"qstring\": [\n                {\n                    token: \"constant.language.escape\",\n                    regex: /\\$\\{/,\n                    push: \"start\"\n                }, {\n                    token: \"string\",\n                    regex: \"'\",\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"string\"\n                }]\n        };\n\n        this.normalizeRules();\n    };\n\n    oop.inherits(NixHighlightRules, TextHighlightRules);\n\n    exports.NixHighlightRules = NixHighlightRules;\n});"
  },
  {
    "path": "lib/ace/mode/nsis.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar NSISHighlightRules = require(\"./nsis_highlight_rules\").NSISHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = NSISHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = [\";\", \"#\"];\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$id = \"ace/mode/nsis\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});"
  },
  {
    "path": "lib/ace/mode/nsis_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar NSISHighlightRules = function() {\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = {\n        start: [{\n            token: \"keyword.compiler.nsis\",\n            regex: /^\\s*!(?:include|addincludedir|addplugindir|appendfile|cd|delfile|echo|error|execute|packhdr|pragma|finalize|getdllversion|system|tempfile|warning|verbose|define|undef|insertmacro|macro|macroend|makensis|searchparse|searchreplace)\\b/,\n            caseInsensitive: true\n        }, {\n            token: \"keyword.command.nsis\",\n            regex: /^\\s*(?:Abort|AddBrandingImage|AddSize|AllowRootDirInstall|AllowSkipFiles|AutoCloseWindow|BGFont|BGGradient|BrandingText|BringToFront|Call|CallInstDLL|Caption|ChangeUI|CheckBitmap|ClearErrors|CompletedText|ComponentText|CopyFiles|CRCCheck|CreateDirectory|CreateFont|CreateShortCut|Delete|DeleteINISec|DeleteINIStr|DeleteRegKey|DeleteRegValue|DetailPrint|DetailsButtonText|DirText|DirVar|DirVerify|EnableWindow|EnumRegKey|EnumRegValue|Exch|Exec|ExecShell|ExecShellWait|ExecWait|ExpandEnvStrings|File|FileBufSize|FileClose|FileErrorText|FileOpen|FileRead|FileReadByte|FileReadUTF16LE|FileReadWord|FileWriteUTF16LE|FileSeek|FileWrite|FileWriteByte|FileWriteWord|FindClose|FindFirst|FindNext|FindWindow|FlushINI|GetCurInstType|GetCurrentAddress|GetDlgItem|GetDLLVersion|GetDLLVersionLocal|GetErrorLevel|GetFileTime|GetFileTimeLocal|GetFullPathName|GetFunctionAddress|GetInstDirError|GetLabelAddress|GetTempFileName|Goto|HideWindow|Icon|IfAbort|IfErrors|IfFileExists|IfRebootFlag|IfSilent|InitPluginsDir|InstallButtonText|InstallColors|InstallDir|InstallDirRegKey|InstProgressFlags|InstType|InstTypeGetText|InstTypeSetText|IntCmp|IntCmpU|IntFmt|IntOp|IsWindow|LangString|LicenseBkColor|LicenseData|LicenseForceSelection|LicenseLangString|LicenseText|LoadLanguageFile|LockWindow|LogSet|LogText|ManifestDPIAware|ManifestSupportedOS|MessageBox|MiscButtonText|Name|Nop|OutFile|Page|PageCallbacks|Pop|Push|Quit|ReadEnvStr|ReadINIStr|ReadRegDWORD|ReadRegStr|Reboot|RegDLL|Rename|RequestExecutionLevel|ReserveFile|Return|RMDir|SearchPath|SectionGetFlags|SectionGetInstTypes|SectionGetSize|SectionGetText|SectionIn|SectionSetFlags|SectionSetInstTypes|SectionSetSize|SectionSetText|SendMessage|SetAutoClose|SetBrandingImage|SetCompress|SetCompressor|SetCompressorDictSize|SetCtlColors|SetCurInstType|SetDatablockOptimize|SetDateSave|SetDetailsPrint|SetDetailsView|SetErrorLevel|SetErrors|SetFileAttributes|SetFont|SetOutPath|SetOverwrite|SetRebootFlag|SetRegView|SetShellVarContext|SetSilent|ShowInstDetails|ShowUninstDetails|ShowWindow|SilentInstall|SilentUnInstall|Sleep|SpaceTexts|StrCmp|StrCmpS|StrCpy|StrLen|SubCaption|Unicode|UninstallButtonText|UninstallCaption|UninstallIcon|UninstallSubCaption|UninstallText|UninstPage|UnRegDLL|Var|VIAddVersionKey|VIFileVersion|VIProductVersion|WindowIcon|WriteINIStr|WriteRegBin|WriteRegDWORD|WriteRegExpandStr|WriteRegMultiStr|WriteRegNone|WriteRegStr|WriteUninstaller|XPStyle)\\b/,\n            caseInsensitive: true\n        }, {\n            token: \"keyword.control.nsis\",\n            regex: /^\\s*!(?:ifdef|ifndef|if|ifmacrodef|ifmacrondef|else|endif)\\b/,\n            caseInsensitive: true\n        }, {\n            token: \"keyword.plugin.nsis\",\n            regex: /^\\s*\\w+::\\w+/,\n            caseInsensitive: true\n        }, {\n            token: \"keyword.operator.comparison.nsis\",\n            regex: /[!<>]?=|<>|<|>/\n        }, {\n            token: \"support.function.nsis\",\n            regex: /(?:\\b|^\\s*)(?:Function|FunctionEnd|Section|SectionEnd|SectionGroup|SectionGroupEnd|PageEx|PageExEnd)\\b/,\n            caseInsensitive: true\n        }, {\n            token: \"support.library.nsis\",\n            regex: /\\${[\\w\\.:-]+}/\n        }, {\n            token: \"constant.nsis\",\n            regex: /\\b(?:ARCHIVE|FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_NORMAL|FILE_ATTRIBUTE_OFFLINE|FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_TEMPORARY|HIDDEN|HKCC|HKCR(32|64)?|HKCU(32|64)?|HKDD|HKEY_CLASSES_ROOT|HKEY_CURRENT_CONFIG|HKEY_CURRENT_USER|HKEY_DYN_DATA|HKEY_LOCAL_MACHINE|HKEY_PERFORMANCE_DATA|HKEY_USERS|HKLM(32|64)?|HKPD|HKU|IDABORT|IDCANCEL|IDD_DIR|IDD_INST|IDD_INSTFILES|IDD_LICENSE|IDD_SELCOM|IDD_UNINST|IDD_VERIFY|IDIGNORE|IDNO|IDOK|IDRETRY|IDYES|MB_ABORTRETRYIGNORE|MB_DEFBUTTON1|MB_DEFBUTTON2|MB_DEFBUTTON3|MB_DEFBUTTON4|MB_ICONEXCLAMATION|MB_ICONINFORMATION|MB_ICONQUESTION|MB_ICONSTOP|MB_OK|MB_OKCANCEL|MB_RETRYCANCEL|MB_RIGHT|MB_RTLREADING|MB_SETFOREGROUND|MB_TOPMOST|MB_USERICON|MB_YESNO|MB_YESNOCANCEL|NORMAL|OFFLINE|READONLY|SHCTX|SHELL_CONTEXT|SW_HIDE|SW_SHOWDEFAULT|SW_SHOWMAXIMIZED|SW_SHOWMINIMIZED|SW_SHOWNORMAL|SYSTEM|TEMPORARY)\\b/,\n            caseInsensitive: true\n        }, {\n            token: \"constant.library.nsis\",\n            regex: /\\${(?:AtLeastServicePack|AtLeastWin7|AtLeastWin8|AtLeastWin10|AtLeastWin95|AtLeastWin98|AtLeastWin2000|AtLeastWin2003|AtLeastWin2008|AtLeastWin2008R2|AtLeastWinME|AtLeastWinNT4|AtLeastWinVista|AtLeastWinXP|AtMostServicePack|AtMostWin7|AtMostWin8|AtMostWin10|AtMostWin95|AtMostWin98|AtMostWin2000|AtMostWin2003|AtMostWin2008|AtMostWin2008R2|AtMostWinME|AtMostWinNT4|AtMostWinVista|AtMostWinXP|IsNT|IsServer|IsServicePack|IsWin7|IsWin8|IsWin10|IsWin95|IsWin98|IsWin2000|IsWin2003|IsWin2008|IsWin2008R2|IsWinME|IsWinNT4|IsWinVista|IsWinXP)}/\n        }, {\n            token: \"constant.language.boolean.true.nsis\",\n            regex: /\\b(?:true|on)\\b/\n        }, {\n            token: \"constant.language.boolean.false.nsis\",\n            regex: /\\b(?:false|off)\\b/\n        }, {\n            token: \"constant.language.option.nsis\",\n            regex: /(?:\\b|^\\s*)(?:(?:un\\.)?components|(?:un\\.)?custom|(?:un\\.)?directory|(?:un\\.)?instfiles|(?:un\\.)?license|uninstConfirm|admin|all|auto|both|bottom|bzip2|current|force|hide|highest|ifdiff|ifnewer|lastused|leave|left|listonly|lzma|nevershow|none|normal|notset|right|show|silent|silentlog|textonly|top|try|user|Win10|Win7|Win8|WinVista|zlib)\\b/,\n            caseInsensitive: true\n        }, {\n            token: \"constant.language.slash-option.nsis\",\n            regex: /\\b\\/(?:a|BRANDING|CENTER|COMPONENTSONLYONCUSTOM|CUSTOMSTRING=|date|e|ENABLECANCEL|FILESONLY|file|FINAL|GLOBAL|gray|ifempty|ifndef|ignorecase|IMGID=|ITALIC|LANG=|NOCUSTOM|noerrors|NONFATAL|nonfatal|oname=|o|REBOOTOK|redef|RESIZETOFIT|r|SHORT|SILENT|SOLID|STRIKE|TRIM|UNDERLINE|utcdate|windows|x)\\b/,\n            caseInsensitive: true\n        }, {\n            token: \"constant.numeric.nsis\",\n            regex: /\\b(?:0(?:x|X)[0-9a-fA-F]+|[0-9]+(?:\\.[0-9]+)?)\\b/\n        }, {\n            token: \"entity.name.function.nsis\",\n            regex: /\\$\\([\\w\\.:-]+\\)/\n        }, {\n            token: \"storage.type.function.nsis\",\n            regex: /\\$\\w+/\n        }, {\n            token: \"punctuation.definition.string.begin.nsis\",\n            regex: /`/,\n            push: [{\n                token: \"punctuation.definition.string.end.nsis\",\n                regex: /`/,\n                next: \"pop\"\n            }, {\n                token: \"constant.character.escape.nsis\",\n                regex: /\\$\\\\./\n            }, {\n                defaultToken: \"string.quoted.back.nsis\"\n            }]\n        }, {\n            token: \"punctuation.definition.string.begin.nsis\",\n            regex: /\"/,\n            push: [{\n                token: \"punctuation.definition.string.end.nsis\",\n                regex: /\"/,\n                next: \"pop\"\n            }, {\n                token: \"constant.character.escape.nsis\",\n                regex: /\\$\\\\./\n            }, {\n                defaultToken: \"string.quoted.double.nsis\"\n            }]\n        }, {\n            token: \"punctuation.definition.string.begin.nsis\",\n            regex: /'/,\n            push: [{\n                token: \"punctuation.definition.string.end.nsis\",\n                regex: /'/,\n                next: \"pop\"\n            }, {\n                token: \"constant.character.escape.nsis\",\n                regex: /\\$\\\\./\n            }, {\n                defaultToken: \"string.quoted.single.nsis\"\n            }]\n        }, {\n            token: [\n                \"punctuation.definition.comment.nsis\",\n                \"comment.line.nsis\"\n            ],\n            regex: /(;|#)(.*$)/\n        }, {\n            token: \"punctuation.definition.comment.nsis\",\n            regex: /\\/\\*/,\n            push: [{\n                token: \"punctuation.definition.comment.nsis\",\n                regex: /\\*\\//,\n                next: \"pop\"\n            }, {\n                defaultToken: \"comment.block.nsis\"\n            }]\n        }, {\n            token: \"text\",\n            regex: /(?:!include|!insertmacro)\\b/\n        }]\n    };\n    \n    this.normalizeRules();\n};\n\nNSISHighlightRules.metaData = {\n    comment: \"\\n\\ttodo: - highlight functions\\n\\t\",\n    fileTypes: [\"nsi\", \"nsh\"],\n    name: \"NSIS\",\n    scopeName: \"source.nsis\"\n};\n\n\noop.inherits(NSISHighlightRules, TextHighlightRules);\n\nexports.NSISHighlightRules = NSISHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/objectivec.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n *\n * Contributor(s):\n * \n *\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ObjectiveCHighlightRules = require(\"./objectivec_highlight_rules\").ObjectiveCHighlightRules;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = ObjectiveCHighlightRules;\n    this.foldingRules = new CStyleFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$id = \"ace/mode/objectivec\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});"
  },
  {
    "path": "lib/ace/mode/objectivec_highlight_rules.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar C_Highlight_File = require(\"./c_cpp_highlight_rules\");\nvar CHighlightRules = C_Highlight_File.c_cppHighlightRules;\n\nvar ObjectiveCHighlightRules = function() {\n\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    var escapedConstRe = \"\\\\\\\\(?:[abefnrtv'\\\"?\\\\\\\\]|\" + \n                         \"[0-3]\\\\d{1,2}|\" +\n                         \"[4-7]\\\\d?|\" +\n                         \"222|\" +\n                         \"x[a-zA-Z0-9]+)\";\n\n    var specialVariables = [{\n            regex: \"\\\\b_cmd\\\\b\",\n            token: \"variable.other.selector.objc\"\n        }, {\n            regex: \"\\\\b(?:self|super)\\\\b\",\n            token: \"variable.language.objc\"\n        }\n    ];\n\n    var cObj = new CHighlightRules();\n    var cRules = cObj.getRules();\n\n    this.$rules = {\n    \"start\": [ \n        {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/.*$\"\n        },\n        DocCommentHighlightRules.getStartRule(\"doc-start\"),\n        {\n            token : \"comment\", // multi line comment\n            regex : \"\\\\/\\\\*\",\n            next : \"comment\"\n        }, \n        {\n            token: [ \"storage.type.objc\", \"punctuation.definition.storage.type.objc\", \n                       \"entity.name.type.objc\", \"text\", \"entity.other.inherited-class.objc\"\n                     ],\n            regex: \"(@)(interface|protocol)(?!.+;)(\\\\s+[A-Za-z_][A-Za-z0-9_]*)(\\\\s*:\\\\s*)([A-Za-z]+)\"\n        },\n        {\n            token: [ \"storage.type.objc\" ],\n            regex: \"(@end)\"\n        },\n        {\n            token: [ \"storage.type.objc\", \"entity.name.type.objc\", \n                        \"entity.other.inherited-class.objc\"\n                     ],\n            regex: \"(@implementation)(\\\\s+[A-Za-z_][A-Za-z0-9_]*)(\\\\s*?::\\\\s*(?:[A-Za-z][A-Za-z0-9]*))?\"\n        },\n        {\n            token: \"string.begin.objc\",\n            regex: '@\"',\n            next: \"constant_NSString\"\n        },\n        {\n            token: \"storage.type.objc\",\n            regex: \"\\\\bid\\\\s*<\",\n            next: \"protocol_list\"\n        },\n        {\n            token: \"keyword.control.macro.objc\",\n            regex: \"\\\\bNS_DURING|NS_HANDLER|NS_ENDHANDLER\\\\b\"\n        },\n        {\n            token: [\"punctuation.definition.keyword.objc\", \"keyword.control.exception.objc\"],\n            regex: \"(@)(try|catch|finally|throw)\\\\b\"\n        },\n        {\n            token: [\"punctuation.definition.keyword.objc\", \"keyword.other.objc\"],\n            regex: \"(@)(defs|encode)\\\\b\"\n        },\n        {\n            token: [\"storage.type.id.objc\", \"text\"],\n            regex: \"(\\\\bid\\\\b)(\\\\s|\\\\n)?\"\n        },\n        {\n            token: \"storage.type.objc\",\n            regex: \"\\\\bIBOutlet|IBAction|BOOL|SEL|id|unichar|IMP|Class\\\\b\"\n        },\n        {\n            token: [ \"punctuation.definition.storage.type.objc\", \"storage.type.objc\"],\n            regex: \"(@)(class|protocol)\\\\b\"\n        },\n        {\n            token: [ \"punctuation.definition.storage.type.objc\", \"punctuation\"],\n            regex: \"(@selector)(\\\\s*\\\\()\",\n            next: \"selectors\"\n        },\n        {\n            token: [ \"punctuation.definition.storage.modifier.objc\", \"storage.modifier.objc\"],\n            regex: \"(@)(synchronized|public|private|protected|package)\\\\b\"\n        },\n        {\n            token: \"constant.language.objc\",\n            regex: \"\\\\bYES|NO|Nil|nil\\\\b\"\n        },\n        {\n            token:  \"support.variable.foundation\",\n            regex: \"\\\\bNSApp\\\\b\"\n        },\n        {\n            token: [ \"support.function.cocoa.leopard\"],\n            regex: \"(?:\\\\b)(NS(?:Rect(?:ToCGRect|FromCGRect)|MakeCollectable|S(?:tringFromProtocol|ize(?:ToCGSize|FromCGSize))|Draw(?:NinePartImage|ThreePartImage)|P(?:oint(?:ToCGPoint|FromCGPoint)|rotocolFromString)|EventMaskFromType|Value))(?:\\\\b)\"\n        },\n        {\n            token: [\"support.function.cocoa\"],\n            regex: \"(?:\\\\b)(NS(?:R(?:ound(?:DownToMultipleOfPageSize|UpToMultipleOfPageSize)|un(?:CriticalAlertPanel(?:RelativeToWindow)?|InformationalAlertPanel(?:RelativeToWindow)?|AlertPanel(?:RelativeToWindow)?)|e(?:set(?:MapTable|HashTable)|c(?:ycleZone|t(?:Clip(?:List)?|F(?:ill(?:UsingOperation|List(?:UsingOperation|With(?:Grays|Colors(?:UsingOperation)?))?)?|romString))|ordAllocationEvent)|turnAddress|leaseAlertPanel|a(?:dPixel|l(?:MemoryAvailable|locateCollectable))|gisterServicesProvider)|angeFromString)|Get(?:SizeAndAlignment|CriticalAlertPanel|InformationalAlertPanel|UncaughtExceptionHandler|FileType(?:s)?|WindowServerMemory|AlertPanel)|M(?:i(?:n(?:X|Y)|d(?:X|Y))|ouseInRect|a(?:p(?:Remove|Get|Member|Insert(?:IfAbsent|KnownAbsent)?)|ke(?:R(?:ect|ange)|Size|Point)|x(?:Range|X|Y)))|B(?:itsPer(?:SampleFromDepth|PixelFromDepth)|e(?:stDepth|ep|gin(?:CriticalAlertSheet|InformationalAlertSheet|AlertSheet)))|S(?:ho(?:uldRetainWithZone|w(?:sServicesMenuItem|AnimationEffect))|tringFrom(?:R(?:ect|ange)|MapTable|S(?:ize|elector)|HashTable|Class|Point)|izeFromString|e(?:t(?:ShowsServicesMenuItem|ZoneName|UncaughtExceptionHandler|FocusRingStyle)|lectorFromString|archPathForDirectoriesInDomains)|wap(?:Big(?:ShortToHost|IntToHost|DoubleToHost|FloatToHost|Long(?:ToHost|LongToHost))|Short|Host(?:ShortTo(?:Big|Little)|IntTo(?:Big|Little)|DoubleTo(?:Big|Little)|FloatTo(?:Big|Little)|Long(?:To(?:Big|Little)|LongTo(?:Big|Little)))|Int|Double|Float|L(?:ittle(?:ShortToHost|IntToHost|DoubleToHost|FloatToHost|Long(?:ToHost|LongToHost))|ong(?:Long)?)))|H(?:ighlightRect|o(?:stByteOrder|meDirectory(?:ForUser)?)|eight|ash(?:Remove|Get|Insert(?:IfAbsent|KnownAbsent)?)|FSType(?:CodeFromFileType|OfFile))|N(?:umberOfColorComponents|ext(?:MapEnumeratorPair|HashEnumeratorItem))|C(?:o(?:n(?:tainsRect|vert(?:GlyphsToPackedGlyphs|Swapped(?:DoubleToHost|FloatToHost)|Host(?:DoubleToSwapped|FloatToSwapped)))|unt(?:MapTable|HashTable|Frames|Windows(?:ForContext)?)|py(?:M(?:emoryPages|apTableWithZone)|Bits|HashTableWithZone|Object)|lorSpaceFromDepth|mpare(?:MapTables|HashTables))|lassFromString|reate(?:MapTable(?:WithZone)?|HashTable(?:WithZone)?|Zone|File(?:namePboardType|ContentsPboardType)))|TemporaryDirectory|I(?:s(?:ControllerMarker|EmptyRect|FreedObject)|n(?:setRect|crementExtraRefCount|te(?:r(?:sect(?:sRect|ionR(?:ect|ange))|faceStyleForKey)|gralRect)))|Zone(?:Realloc|Malloc|Name|Calloc|Fr(?:omPointer|ee))|O(?:penStepRootDirectory|ffsetRect)|D(?:i(?:sableScreenUpdates|videRect)|ottedFrameRect|e(?:c(?:imal(?:Round|Multiply|S(?:tring|ubtract)|Normalize|Co(?:py|mpa(?:ct|re))|IsNotANumber|Divide|Power|Add)|rementExtraRefCountWasZero)|faultMallocZone|allocate(?:MemoryPages|Object))|raw(?:Gr(?:oove|ayBezel)|B(?:itmap|utton)|ColorTiledRects|TiledRects|DarkBezel|W(?:hiteBezel|indowBackground)|LightBezel))|U(?:serName|n(?:ionR(?:ect|ange)|registerServicesProvider)|pdateDynamicServices)|Java(?:Bundle(?:Setup|Cleanup)|Setup(?:VirtualMachine)?|Needs(?:ToLoadClasses|VirtualMachine)|ClassesF(?:orBundle|romPath)|ObjectNamedInPath|ProvidesClasses)|P(?:oint(?:InRect|FromString)|erformService|lanarFromDepth|ageSize)|E(?:n(?:d(?:MapTableEnumeration|HashTableEnumeration)|umerate(?:MapTable|HashTable)|ableScreenUpdates)|qual(?:R(?:ects|anges)|Sizes|Points)|raseRect|xtraRefCount)|F(?:ileTypeForHFSTypeCode|ullUserName|r(?:ee(?:MapTable|HashTable)|ame(?:Rect(?:WithWidth(?:UsingOperation)?)?|Address)))|Wi(?:ndowList(?:ForContext)?|dth)|Lo(?:cationInRange|g(?:v|PageSize)?)|A(?:ccessibility(?:R(?:oleDescription(?:ForUIElement)?|aiseBadArgumentException)|Unignored(?:Children(?:ForOnlyChild)?|Descendant|Ancestor)|PostNotification|ActionDescription)|pplication(?:Main|Load)|vailableWindowDepths|ll(?:MapTable(?:Values|Keys)|HashTableObjects|ocate(?:MemoryPages|Collectable|Object)))))(?:\\\\b)\"\n        },\n        {\n            token: [\"support.class.cocoa.leopard\"],\n            regex: \"(?:\\\\b)(NS(?:RuleEditor|G(?:arbageCollector|radient)|MapTable|HashTable|Co(?:ndition|llectionView(?:Item)?)|T(?:oolbarItemGroup|extInputClient|r(?:eeNode|ackingArea))|InvocationOperation|Operation(?:Queue)?|D(?:ictionaryController|ockTile)|P(?:ointer(?:Functions|Array)|athC(?:o(?:ntrol(?:Delegate)?|mponentCell)|ell(?:Delegate)?)|r(?:intPanelAccessorizing|edicateEditor(?:RowTemplate)?))|ViewController|FastEnumeration|Animat(?:ionContext|ablePropertyContainer)))(?:\\\\b)\"\n        },\n        {\n            token: [\"support.class.cocoa\"],\n            regex: \"(?:\\\\b)(NS(?:R(?:u(?:nLoop|ler(?:Marker|View))|e(?:sponder|cursiveLock|lativeSpecifier)|an(?:domSpecifier|geSpecifier))|G(?:etCommand|lyph(?:Generator|Storage|Info)|raphicsContext)|XML(?:Node|D(?:ocument|TD(?:Node)?)|Parser|Element)|M(?:iddleSpecifier|ov(?:ie(?:View)?|eCommand)|utable(?:S(?:tring|et)|C(?:haracterSet|opying)|IndexSet|D(?:ictionary|ata)|URLRequest|ParagraphStyle|A(?:ttributedString|rray))|e(?:ssagePort(?:NameServer)?|nu(?:Item(?:Cell)?|View)?|t(?:hodSignature|adata(?:Item|Query(?:ResultGroup|AttributeValueTuple)?)))|a(?:ch(?:BootstrapServer|Port)|trix))|B(?:itmapImageRep|ox|u(?:ndle|tton(?:Cell)?)|ezierPath|rowser(?:Cell)?)|S(?:hadow|c(?:anner|r(?:ipt(?:SuiteRegistry|C(?:o(?:ercionHandler|mmand(?:Description)?)|lassDescription)|ObjectSpecifier|ExecutionContext|WhoseTest)|oll(?:er|View)|een))|t(?:epper(?:Cell)?|atus(?:Bar|Item)|r(?:ing|eam))|imple(?:HorizontalTypesetter|CString)|o(?:cketPort(?:NameServer)?|und|rtDescriptor)|p(?:e(?:cifierTest|ech(?:Recognizer|Synthesizer)|ll(?:Server|Checker))|litView)|e(?:cureTextField(?:Cell)?|t(?:Command)?|archField(?:Cell)?|rializer|gmentedC(?:ontrol|ell))|lider(?:Cell)?|avePanel)|H(?:ost|TTP(?:Cookie(?:Storage)?|URLResponse)|elpManager)|N(?:ib(?:Con(?:nector|trolConnector)|OutletConnector)?|otification(?:Center|Queue)?|u(?:ll|mber(?:Formatter)?)|etService(?:Browser)?|ameSpecifier)|C(?:ha(?:ngeSpelling|racterSet)|o(?:n(?:stantString|nection|trol(?:ler)?|ditionLock)|d(?:ing|er)|unt(?:Command|edSet)|pying|lor(?:Space|P(?:ick(?:ing(?:Custom|Default)|er)|anel)|Well|List)?|m(?:p(?:oundPredicate|arisonPredicate)|boBox(?:Cell)?))|u(?:stomImageRep|rsor)|IImageRep|ell|l(?:ipView|o(?:seCommand|neCommand)|assDescription)|a(?:ched(?:ImageRep|URLResponse)|lendar(?:Date)?)|reateCommand)|T(?:hread|ypesetter|ime(?:Zone|r)|o(?:olbar(?:Item(?:Validations)?)?|kenField(?:Cell)?)|ext(?:Block|Storage|Container|Tab(?:le(?:Block)?)?|Input|View|Field(?:Cell)?|List|Attachment(?:Cell)?)?|a(?:sk|b(?:le(?:Header(?:Cell|View)|Column|View)|View(?:Item)?))|reeController)|I(?:n(?:dex(?:S(?:pecifier|et)|Path)|put(?:Manager|S(?:tream|erv(?:iceProvider|er(?:MouseTracker)?)))|vocation)|gnoreMisspelledWords|mage(?:Rep|Cell|View)?)|O(?:ut(?:putStream|lineView)|pen(?:GL(?:Context|Pixel(?:Buffer|Format)|View)|Panel)|bj(?:CTypeSerializationCallBack|ect(?:Controller)?))|D(?:i(?:st(?:antObject(?:Request)?|ributed(?:NotificationCenter|Lock))|ctionary|rectoryEnumerator)|ocument(?:Controller)?|e(?:serializer|cimalNumber(?:Behaviors|Handler)?|leteCommand)|at(?:e(?:Components|Picker(?:Cell)?|Formatter)?|a)|ra(?:wer|ggingInfo))|U(?:ser(?:InterfaceValidations|Defaults(?:Controller)?)|RL(?:Re(?:sponse|quest)|Handle(?:Client)?|C(?:onnection|ache|redential(?:Storage)?)|Download(?:Delegate)?|Prot(?:ocol(?:Client)?|ectionSpace)|AuthenticationChallenge(?:Sender)?)?|n(?:iqueIDSpecifier|doManager|archiver))|P(?:ipe|o(?:sitionalSpecifier|pUpButton(?:Cell)?|rt(?:Message|NameServer|Coder)?)|ICTImageRep|ersistentDocument|DFImageRep|a(?:steboard|nel|ragraphStyle|geLayout)|r(?:int(?:Info|er|Operation|Panel)|o(?:cessInfo|tocolChecker|perty(?:Specifier|ListSerialization)|gressIndicator|xy)|edicate))|E(?:numerator|vent|PSImageRep|rror|x(?:ception|istsCommand|pression))|V(?:iew(?:Animation)?|al(?:idated(?:ToobarItem|UserInterfaceItem)|ue(?:Transformer)?))|Keyed(?:Unarchiver|Archiver)|Qui(?:ckDrawView|tCommand)|F(?:ile(?:Manager|Handle|Wrapper)|o(?:nt(?:Manager|Descriptor|Panel)?|rm(?:Cell|atter)))|W(?:hoseSpecifier|indow(?:Controller)?|orkspace)|L(?:o(?:c(?:k(?:ing)?|ale)|gicalTest)|evelIndicator(?:Cell)?|ayoutManager)|A(?:ssertionHandler|nimation|ctionCell|ttributedString|utoreleasePool|TSTypesetter|ppl(?:ication|e(?:Script|Event(?:Manager|Descriptor)))|ffineTransform|lert|r(?:chiver|ray(?:Controller)?))))(?:\\\\b)\"\n        },\n        {\n            token: [\"support.type.cocoa.leopard\"],\n            regex: \"(?:\\\\b)(NS(?:R(?:u(?:nLoop|ler(?:Marker|View))|e(?:sponder|cursiveLock|lativeSpecifier)|an(?:domSpecifier|geSpecifier))|G(?:etCommand|lyph(?:Generator|Storage|Info)|raphicsContext)|XML(?:Node|D(?:ocument|TD(?:Node)?)|Parser|Element)|M(?:iddleSpecifier|ov(?:ie(?:View)?|eCommand)|utable(?:S(?:tring|et)|C(?:haracterSet|opying)|IndexSet|D(?:ictionary|ata)|URLRequest|ParagraphStyle|A(?:ttributedString|rray))|e(?:ssagePort(?:NameServer)?|nu(?:Item(?:Cell)?|View)?|t(?:hodSignature|adata(?:Item|Query(?:ResultGroup|AttributeValueTuple)?)))|a(?:ch(?:BootstrapServer|Port)|trix))|B(?:itmapImageRep|ox|u(?:ndle|tton(?:Cell)?)|ezierPath|rowser(?:Cell)?)|S(?:hadow|c(?:anner|r(?:ipt(?:SuiteRegistry|C(?:o(?:ercionHandler|mmand(?:Description)?)|lassDescription)|ObjectSpecifier|ExecutionContext|WhoseTest)|oll(?:er|View)|een))|t(?:epper(?:Cell)?|atus(?:Bar|Item)|r(?:ing|eam))|imple(?:HorizontalTypesetter|CString)|o(?:cketPort(?:NameServer)?|und|rtDescriptor)|p(?:e(?:cifierTest|ech(?:Recognizer|Synthesizer)|ll(?:Server|Checker))|litView)|e(?:cureTextField(?:Cell)?|t(?:Command)?|archField(?:Cell)?|rializer|gmentedC(?:ontrol|ell))|lider(?:Cell)?|avePanel)|H(?:ost|TTP(?:Cookie(?:Storage)?|URLResponse)|elpManager)|N(?:ib(?:Con(?:nector|trolConnector)|OutletConnector)?|otification(?:Center|Queue)?|u(?:ll|mber(?:Formatter)?)|etService(?:Browser)?|ameSpecifier)|C(?:ha(?:ngeSpelling|racterSet)|o(?:n(?:stantString|nection|trol(?:ler)?|ditionLock)|d(?:ing|er)|unt(?:Command|edSet)|pying|lor(?:Space|P(?:ick(?:ing(?:Custom|Default)|er)|anel)|Well|List)?|m(?:p(?:oundPredicate|arisonPredicate)|boBox(?:Cell)?))|u(?:stomImageRep|rsor)|IImageRep|ell|l(?:ipView|o(?:seCommand|neCommand)|assDescription)|a(?:ched(?:ImageRep|URLResponse)|lendar(?:Date)?)|reateCommand)|T(?:hread|ypesetter|ime(?:Zone|r)|o(?:olbar(?:Item(?:Validations)?)?|kenField(?:Cell)?)|ext(?:Block|Storage|Container|Tab(?:le(?:Block)?)?|Input|View|Field(?:Cell)?|List|Attachment(?:Cell)?)?|a(?:sk|b(?:le(?:Header(?:Cell|View)|Column|View)|View(?:Item)?))|reeController)|I(?:n(?:dex(?:S(?:pecifier|et)|Path)|put(?:Manager|S(?:tream|erv(?:iceProvider|er(?:MouseTracker)?)))|vocation)|gnoreMisspelledWords|mage(?:Rep|Cell|View)?)|O(?:ut(?:putStream|lineView)|pen(?:GL(?:Context|Pixel(?:Buffer|Format)|View)|Panel)|bj(?:CTypeSerializationCallBack|ect(?:Controller)?))|D(?:i(?:st(?:antObject(?:Request)?|ributed(?:NotificationCenter|Lock))|ctionary|rectoryEnumerator)|ocument(?:Controller)?|e(?:serializer|cimalNumber(?:Behaviors|Handler)?|leteCommand)|at(?:e(?:Components|Picker(?:Cell)?|Formatter)?|a)|ra(?:wer|ggingInfo))|U(?:ser(?:InterfaceValidations|Defaults(?:Controller)?)|RL(?:Re(?:sponse|quest)|Handle(?:Client)?|C(?:onnection|ache|redential(?:Storage)?)|Download(?:Delegate)?|Prot(?:ocol(?:Client)?|ectionSpace)|AuthenticationChallenge(?:Sender)?)?|n(?:iqueIDSpecifier|doManager|archiver))|P(?:ipe|o(?:sitionalSpecifier|pUpButton(?:Cell)?|rt(?:Message|NameServer|Coder)?)|ICTImageRep|ersistentDocument|DFImageRep|a(?:steboard|nel|ragraphStyle|geLayout)|r(?:int(?:Info|er|Operation|Panel)|o(?:cessInfo|tocolChecker|perty(?:Specifier|ListSerialization)|gressIndicator|xy)|edicate))|E(?:numerator|vent|PSImageRep|rror|x(?:ception|istsCommand|pression))|V(?:iew(?:Animation)?|al(?:idated(?:ToobarItem|UserInterfaceItem)|ue(?:Transformer)?))|Keyed(?:Unarchiver|Archiver)|Qui(?:ckDrawView|tCommand)|F(?:ile(?:Manager|Handle|Wrapper)|o(?:nt(?:Manager|Descriptor|Panel)?|rm(?:Cell|atter)))|W(?:hoseSpecifier|indow(?:Controller)?|orkspace)|L(?:o(?:c(?:k(?:ing)?|ale)|gicalTest)|evelIndicator(?:Cell)?|ayoutManager)|A(?:ssertionHandler|nimation|ctionCell|ttributedString|utoreleasePool|TSTypesetter|ppl(?:ication|e(?:Script|Event(?:Manager|Descriptor)))|ffineTransform|lert|r(?:chiver|ray(?:Controller)?))))(?:\\\\b)\"\n        },\n        {\n            token: [\"support.class.quartz\"],\n            regex: \"(?:\\\\b)(C(?:I(?:Sampler|Co(?:ntext|lor)|Image(?:Accumulator)?|PlugIn(?:Registration)?|Vector|Kernel|Filter(?:Generator|Shape)?)|A(?:Renderer|MediaTiming(?:Function)?|BasicAnimation|ScrollLayer|Constraint(?:LayoutManager)?|T(?:iledLayer|extLayer|rans(?:ition|action))|OpenGLLayer|PropertyAnimation|KeyframeAnimation|Layer|A(?:nimation(?:Group)?|ction))))(?:\\\\b)\"\n        },\n        {\n            token: [\"support.type.quartz\"],\n            regex: \"(?:\\\\b)(C(?:G(?:Float|Point|Size|Rect)|IFormat|AConstraintAttribute))(?:\\\\b)\"\n        },\n        {\n            token: [\"support.type.cocoa\"],\n            regex: \"(?:\\\\b)(NS(?:R(?:ect(?:Edge)?|ange)|G(?:lyph(?:Relation|LayoutMode)?|radientType)|M(?:odalSession|a(?:trixMode|p(?:Table|Enumerator)))|B(?:itmapImageFileType|orderType|uttonType|ezelStyle|ackingStoreType|rowserColumnResizingType)|S(?:cr(?:oll(?:er(?:Part|Arrow)|ArrowPosition)|eenAuxiliaryOpaque)|tringEncoding|ize|ocketNativeHandle|election(?:Granularity|Direction|Affinity)|wapped(?:Double|Float)|aveOperationType)|Ha(?:sh(?:Table|Enumerator)|ndler(?:2)?)|C(?:o(?:ntrol(?:Size|Tint)|mp(?:ositingOperation|arisonResult))|ell(?:State|Type|ImagePosition|Attribute))|T(?:hreadPrivate|ypesetterGlyphInfo|i(?:ckMarkPosition|tlePosition|meInterval)|o(?:ol(?:TipTag|bar(?:SizeMode|DisplayMode))|kenStyle)|IFFCompression|ext(?:TabType|Alignment)|ab(?:State|leViewDropOperation|ViewType)|rackingRectTag)|ImageInterpolation|Zone|OpenGL(?:ContextAuxiliary|PixelFormatAuxiliary)|D(?:ocumentChangeType|atePickerElementFlags|ra(?:werState|gOperation))|UsableScrollerParts|P(?:oint|r(?:intingPageOrder|ogressIndicator(?:Style|Th(?:ickness|readInfo))))|EventType|KeyValueObservingOptions|Fo(?:nt(?:SymbolicTraits|TraitMask|Action)|cusRingType)|W(?:indow(?:OrderingMode|Depth)|orkspace(?:IconCreationOptions|LaunchOptions)|ritingDirection)|L(?:ineBreakMode|ayout(?:Status|Direction))|A(?:nimation(?:Progress|Effect)|ppl(?:ication(?:TerminateReply|DelegateReply|PrintReply)|eEventManagerSuspensionID)|ffineTransformStruct|lertStyle)))(?:\\\\b)\"\n        },\n        {\n            token: [\"support.constant.cocoa\"],\n            regex: \"(?:\\\\b)(NS(?:NotFound|Ordered(?:Ascending|Descending|Same)))(?:\\\\b)\"\n        },\n        {\n            token: [\"support.constant.notification.cocoa.leopard\"],\n            regex: \"(?:\\\\b)(NS(?:MenuDidBeginTracking|ViewDidUpdateTrackingAreas)?Notification)(?:\\\\b)\"\n        },\n        {\n            token: [\"support.constant.notification.cocoa\"],\n            regex: \"(?:\\\\b)(NS(?:Menu(?:Did(?:RemoveItem|SendAction|ChangeItem|EndTracking|AddItem)|WillSendAction)|S(?:ystemColorsDidChange|plitView(?:DidResizeSubviews|WillResizeSubviews))|C(?:o(?:nt(?:extHelpModeDid(?:Deactivate|Activate)|rolT(?:intDidChange|extDid(?:BeginEditing|Change|EndEditing)))|lor(?:PanelColorDidChange|ListDidChange)|mboBox(?:Selection(?:IsChanging|DidChange)|Will(?:Dismiss|PopUp)))|lassDescriptionNeededForClass)|T(?:oolbar(?:DidRemoveItem|WillAddItem)|ext(?:Storage(?:DidProcessEditing|WillProcessEditing)|Did(?:BeginEditing|Change|EndEditing)|View(?:DidChange(?:Selection|TypingAttributes)|WillChangeNotifyingTextView))|ableView(?:Selection(?:IsChanging|DidChange)|ColumnDid(?:Resize|Move)))|ImageRepRegistryDidChange|OutlineView(?:Selection(?:IsChanging|DidChange)|ColumnDid(?:Resize|Move)|Item(?:Did(?:Collapse|Expand)|Will(?:Collapse|Expand)))|Drawer(?:Did(?:Close|Open)|Will(?:Close|Open))|PopUpButton(?:CellWillPopUp|WillPopUp)|View(?:GlobalFrameDidChange|BoundsDidChange|F(?:ocusDidChange|rameDidChange))|FontSetChanged|W(?:indow(?:Did(?:Resi(?:ze|gn(?:Main|Key))|M(?:iniaturize|ove)|Become(?:Main|Key)|ChangeScreen(?:|Profile)|Deminiaturize|Update|E(?:ndSheet|xpose))|Will(?:M(?:iniaturize|ove)|BeginSheet|Close))|orkspace(?:SessionDid(?:ResignActive|BecomeActive)|Did(?:Mount|TerminateApplication|Unmount|PerformFileOperation|Wake|LaunchApplication)|Will(?:Sleep|Unmount|PowerOff|LaunchApplication)))|A(?:ntialiasThresholdChanged|ppl(?:ication(?:Did(?:ResignActive|BecomeActive|Hide|ChangeScreenParameters|U(?:nhide|pdate)|FinishLaunching)|Will(?:ResignActive|BecomeActive|Hide|Terminate|U(?:nhide|pdate)|FinishLaunching))|eEventManagerWillProcessFirstEvent)))Notification)(?:\\\\b)\"\n        },\n        {\n            token: [\"support.constant.cocoa.leopard\"],\n            regex: \"(?:\\\\b)(NS(?:RuleEditor(?:RowType(?:Simple|Compound)|NestingMode(?:Si(?:ngle|mple)|Compound|List))|GradientDraws(?:BeforeStartingLocation|AfterEndingLocation)|M(?:inusSetExpressionType|a(?:chPortDeallocate(?:ReceiveRight|SendRight|None)|pTable(?:StrongMemory|CopyIn|ZeroingWeakMemory|ObjectPointerPersonality)))|B(?:oxCustom|undleExecutableArchitecture(?:X86|I386|PPC(?:64)?)|etweenPredicateOperatorType|ackgroundStyle(?:Raised|Dark|L(?:ight|owered)))|S(?:tring(?:DrawingTruncatesLastVisibleLine|EncodingConversion(?:ExternalRepresentation|AllowLossy))|ubqueryExpressionType|p(?:e(?:ech(?:SentenceBoundary|ImmediateBoundary|WordBoundary)|llingState(?:GrammarFlag|SpellingFlag))|litViewDividerStyleThi(?:n|ck))|e(?:rvice(?:RequestTimedOutError|M(?:iscellaneousError|alformedServiceDictionaryError)|InvalidPasteboardDataError|ErrorM(?:inimum|aximum)|Application(?:NotFoundError|LaunchFailedError))|gmentStyle(?:Round(?:Rect|ed)|SmallSquare|Capsule|Textured(?:Rounded|Square)|Automatic)))|H(?:UDWindowMask|ashTable(?:StrongMemory|CopyIn|ZeroingWeakMemory|ObjectPointerPersonality))|N(?:oModeColorPanel|etServiceNoAutoRename)|C(?:hangeRedone|o(?:ntainsPredicateOperatorType|l(?:orRenderingIntent(?:RelativeColorimetric|Saturation|Default|Perceptual|AbsoluteColorimetric)|lectorDisabledOption))|ellHit(?:None|ContentArea|TrackableArea|EditableTextArea))|T(?:imeZoneNameStyle(?:S(?:hort(?:Standard|DaylightSaving)|tandard)|DaylightSaving)|extFieldDatePickerStyle|ableViewSelectionHighlightStyle(?:Regular|SourceList)|racking(?:Mouse(?:Moved|EnteredAndExited)|CursorUpdate|InVisibleRect|EnabledDuringMouseDrag|A(?:ssumeInside|ctive(?:In(?:KeyWindow|ActiveApp)|WhenFirstResponder|Always))))|I(?:n(?:tersectSetExpressionType|dexedColorSpaceModel)|mageScale(?:None|Proportionally(?:Down|UpOrDown)|AxesIndependently))|Ope(?:nGLPFAAllowOfflineRenderers|rationQueue(?:DefaultMaxConcurrentOperationCount|Priority(?:High|Normal|Very(?:High|Low)|Low)))|D(?:iacriticInsensitiveSearch|ownloadsDirectory)|U(?:nionSetExpressionType|TF(?:16(?:BigEndianStringEncoding|StringEncoding|LittleEndianStringEncoding)|32(?:BigEndianStringEncoding|StringEncoding|LittleEndianStringEncoding)))|P(?:ointerFunctions(?:Ma(?:chVirtualMemory|llocMemory)|Str(?:ongMemory|uctPersonality)|C(?:StringPersonality|opyIn)|IntegerPersonality|ZeroingWeakMemory|O(?:paque(?:Memory|Personality)|bjectP(?:ointerPersonality|ersonality)))|at(?:hStyle(?:Standard|NavigationBar|PopUp)|ternColorSpaceModel)|rintPanelShows(?:Scaling|Copies|Orientation|P(?:a(?:perSize|ge(?:Range|SetupAccessory))|review)))|Executable(?:RuntimeMismatchError|NotLoadableError|ErrorM(?:inimum|aximum)|L(?:inkError|oadError)|ArchitectureMismatchError)|KeyValueObservingOption(?:Initial|Prior)|F(?:i(?:ndPanelSubstringMatchType(?:StartsWith|Contains|EndsWith|FullWord)|leRead(?:TooLargeError|UnknownStringEncodingError))|orcedOrderingSearch)|Wi(?:ndow(?:BackingLocation(?:MainMemory|Default|VideoMemory)|Sharing(?:Read(?:Only|Write)|None)|CollectionBehavior(?:MoveToActiveSpace|CanJoinAllSpaces|Default))|dthInsensitiveSearch)|AggregateExpressionType))(?:\\\\b)\"\n        },\n        {\n            token: [\"support.constant.cocoa\"],\n            regex: \"(?:\\\\b)(NS(?:R(?:GB(?:ModeColorPanel|ColorSpaceModel)|ight(?:Mouse(?:D(?:own(?:Mask)?|ragged(?:Mask)?)|Up(?:Mask)?)|T(?:ext(?:Movement|Alignment)|ab(?:sBezelBorder|StopType))|ArrowFunctionKey)|ound(?:RectBezelStyle|Bankers|ed(?:BezelStyle|TokenStyle|DisclosureBezelStyle)|Down|Up|Plain|Line(?:CapStyle|JoinStyle))|un(?:StoppedResponse|ContinuesResponse|AbortedResponse)|e(?:s(?:izableWindowMask|et(?:CursorRectsRunLoopOrdering|FunctionKey))|ce(?:ssedBezelStyle|iver(?:sCantHandleCommandScriptError|EvaluationScriptError))|turnTextMovement|doFunctionKey|quiredArgumentsMissingScriptError|l(?:evancyLevelIndicatorStyle|ative(?:Before|After))|gular(?:SquareBezelStyle|ControlSize)|moveTraitFontAction)|a(?:n(?:domSubelement|geDateMode)|tingLevelIndicatorStyle|dio(?:ModeMatrix|Button)))|G(?:IFFileType|lyph(?:Below|Inscribe(?:B(?:elow|ase)|Over(?:strike|Below)|Above)|Layout(?:WithPrevious|A(?:tAPoint|gainstAPoint))|A(?:ttribute(?:BidiLevel|Soft|Inscribe|Elastic)|bove))|r(?:ooveBorder|eaterThan(?:Comparison|OrEqualTo(?:Comparison|PredicateOperatorType)|PredicateOperatorType)|a(?:y(?:ModeColorPanel|ColorSpaceModel)|dient(?:None|Con(?:cave(?:Strong|Weak)|vex(?:Strong|Weak)))|phiteControlTint)))|XML(?:N(?:o(?:tationDeclarationKind|de(?:CompactEmptyElement|IsCDATA|OptionsNone|Use(?:SingleQuotes|DoubleQuotes)|Pre(?:serve(?:NamespaceOrder|C(?:haracterReferences|DATA)|DTD|Prefixes|E(?:ntities|mptyElements)|Quotes|Whitespace|A(?:ttributeOrder|ll))|ttyPrint)|ExpandEmptyElement))|amespaceKind)|CommentKind|TextKind|InvalidKind|D(?:ocument(?:X(?:MLKind|HTMLKind|Include)|HTMLKind|T(?:idy(?:XML|HTML)|extKind)|IncludeContentTypeDeclaration|Validate|Kind)|TDKind)|P(?:arser(?:GTRequiredError|XMLDeclNot(?:StartedError|FinishedError)|Mi(?:splaced(?:XMLDeclarationError|CDATAEndStringError)|xedContentDeclNot(?:StartedError|FinishedError))|S(?:t(?:andaloneValueError|ringNot(?:StartedError|ClosedError))|paceRequiredError|eparatorRequiredError)|N(?:MTOKENRequiredError|o(?:t(?:ationNot(?:StartedError|FinishedError)|WellBalancedError)|DTDError)|amespaceDeclarationError|AMERequiredError)|C(?:haracterRef(?:In(?:DTDError|PrologError|EpilogError)|AtEOFError)|o(?:nditionalSectionNot(?:StartedError|FinishedError)|mment(?:NotFinishedError|ContainsDoubleHyphenError))|DATANotFinishedError)|TagNameMismatchError|In(?:ternalError|valid(?:HexCharacterRefError|C(?:haracter(?:RefError|InEntityError|Error)|onditionalSectionError)|DecimalCharacterRefError|URIError|Encoding(?:NameError|Error)))|OutOfMemoryError|D(?:ocumentStartError|elegateAbortedParseError|OCTYPEDeclNotFinishedError)|U(?:RI(?:RequiredError|FragmentError)|n(?:declaredEntityError|parsedEntityError|knownEncodingError|finishedTagError))|P(?:CDATARequiredError|ublicIdentifierRequiredError|arsedEntityRef(?:MissingSemiError|NoNameError|In(?:Internal(?:SubsetError|Error)|PrologError|EpilogError)|AtEOFError)|r(?:ocessingInstructionNot(?:StartedError|FinishedError)|ematureDocumentEndError))|E(?:n(?:codingNotSupportedError|tity(?:Ref(?:In(?:DTDError|PrologError|EpilogError)|erence(?:MissingSemiError|WithoutNameError)|LoopError|AtEOFError)|BoundaryError|Not(?:StartedError|FinishedError)|Is(?:ParameterError|ExternalError)|ValueRequiredError))|qualExpectedError|lementContentDeclNot(?:StartedError|FinishedError)|xt(?:ernalS(?:tandaloneEntityError|ubsetNotFinishedError)|raContentError)|mptyDocumentError)|L(?:iteralNot(?:StartedError|FinishedError)|T(?:RequiredError|SlashRequiredError)|essThanSymbolInAttributeError)|Attribute(?:RedefinedError|HasNoValueError|Not(?:StartedError|FinishedError)|ListNot(?:StartedError|FinishedError)))|rocessingInstructionKind)|E(?:ntity(?:GeneralKind|DeclarationKind|UnparsedKind|P(?:ar(?:sedKind|ameterKind)|redefined))|lement(?:Declaration(?:MixedKind|UndefinedKind|E(?:lementKind|mptyKind)|Kind|AnyKind)|Kind))|Attribute(?:N(?:MToken(?:sKind|Kind)|otationKind)|CDATAKind|ID(?:Ref(?:sKind|Kind)|Kind)|DeclarationKind|En(?:tit(?:yKind|iesKind)|umerationKind)|Kind))|M(?:i(?:n(?:XEdge|iaturizableWindowMask|YEdge|uteCalendarUnit)|terLineJoinStyle|ddleSubelement|xedState)|o(?:nthCalendarUnit|deSwitchFunctionKey|use(?:Moved(?:Mask)?|E(?:ntered(?:Mask)?|ventSubtype|xited(?:Mask)?))|veToBezierPathElement|mentary(?:ChangeButton|Push(?:Button|InButton)|Light(?:Button)?))|enuFunctionKey|a(?:c(?:intoshInterfaceStyle|OSRomanStringEncoding)|tchesPredicateOperatorType|ppedRead|x(?:XEdge|YEdge))|ACHOperatingSystem)|B(?:MPFileType|o(?:ttomTabsBezelBorder|ldFontMask|rderlessWindowMask|x(?:Se(?:condary|parator)|OldStyle|Primary))|uttLineCapStyle|e(?:zelBorder|velLineJoinStyle|low(?:Bottom|Top)|gin(?:sWith(?:Comparison|PredicateOperatorType)|FunctionKey))|lueControlTint|ack(?:spaceCharacter|tabTextMovement|ingStore(?:Retained|Buffered|Nonretained)|TabCharacter|wardsSearch|groundTab)|r(?:owser(?:NoColumnResizing|UserColumnResizing|AutoColumnResizing)|eakFunctionKey))|S(?:h(?:ift(?:JISStringEncoding|KeyMask)|ow(?:ControlGlyphs|InvisibleGlyphs)|adowlessSquareBezelStyle)|y(?:s(?:ReqFunctionKey|tem(?:D(?:omainMask|efined(?:Mask)?)|FunctionKey))|mbolStringEncoding)|c(?:a(?:nnedOption|le(?:None|ToFit|Proportionally))|r(?:oll(?:er(?:NoPart|Increment(?:Page|Line|Arrow)|Decrement(?:Page|Line|Arrow)|Knob(?:Slot)?|Arrows(?:M(?:inEnd|axEnd)|None|DefaultSetting))|Wheel(?:Mask)?|LockFunctionKey)|eenChangedEventType))|t(?:opFunctionKey|r(?:ingDrawing(?:OneShot|DisableScreenFontSubstitution|Uses(?:DeviceMetrics|FontLeading|LineFragmentOrigin))|eam(?:Status(?:Reading|NotOpen|Closed|Open(?:ing)?|Error|Writing|AtEnd)|Event(?:Has(?:BytesAvailable|SpaceAvailable)|None|OpenCompleted|E(?:ndEncountered|rrorOccurred)))))|i(?:ngle(?:DateMode|UnderlineStyle)|ze(?:DownFontAction|UpFontAction))|olarisOperatingSystem|unOSOperatingSystem|pecialPageOrder|e(?:condCalendarUnit|lect(?:By(?:Character|Paragraph|Word)|i(?:ng(?:Next|Previous)|onAffinity(?:Downstream|Upstream))|edTab|FunctionKey)|gmentSwitchTracking(?:Momentary|Select(?:One|Any)))|quareLineCapStyle|witchButton|ave(?:ToOperation|Op(?:tions(?:Yes|No|Ask)|eration)|AsOperation)|mall(?:SquareBezelStyle|C(?:ontrolSize|apsFontMask)|IconButtonBezelStyle))|H(?:ighlightModeMatrix|SBModeColorPanel|o(?:ur(?:Minute(?:SecondDatePickerElementFlag|DatePickerElementFlag)|CalendarUnit)|rizontalRuler|meFunctionKey)|TTPCookieAcceptPolicy(?:Never|OnlyFromMainDocumentDomain|Always)|e(?:lp(?:ButtonBezelStyle|KeyMask|FunctionKey)|avierFontAction)|PUXOperatingSystem)|Year(?:MonthDa(?:yDatePickerElementFlag|tePickerElementFlag)|CalendarUnit)|N(?:o(?:n(?:StandardCharacterSetFontMask|ZeroWindingRule|activatingPanelMask|LossyASCIIStringEncoding)|Border|t(?:ification(?:SuspensionBehavior(?:Hold|Coalesce|D(?:eliverImmediately|rop))|NoCoalescing|CoalescingOn(?:Sender|Name)|DeliverImmediately|PostToAllSessions)|PredicateType|EqualToPredicateOperatorType)|S(?:cr(?:iptError|ollerParts)|ubelement|pecifierError)|CellMask|T(?:itle|opLevelContainersSpecifierError|abs(?:BezelBorder|NoBorder|LineBorder))|I(?:nterfaceStyle|mage)|UnderlineStyle|FontChangeAction)|u(?:ll(?:Glyph|CellType)|m(?:eric(?:Search|PadKeyMask)|berFormatter(?:Round(?:Half(?:Down|Up|Even)|Ceiling|Down|Up|Floor)|Behavior(?:10|Default)|S(?:cientificStyle|pellOutStyle)|NoStyle|CurrencyStyle|DecimalStyle|P(?:ercentStyle|ad(?:Before(?:Suffix|Prefix)|After(?:Suffix|Prefix))))))|e(?:t(?:Services(?:BadArgumentError|NotFoundError|C(?:ollisionError|ancelledError)|TimeoutError|InvalidError|UnknownError|ActivityInProgress)|workDomainMask)|wlineCharacter|xt(?:StepInterfaceStyle|FunctionKey))|EXTSTEPStringEncoding|a(?:t(?:iveShortGlyphPacking|uralTextAlignment)|rrowFontMask))|C(?:hange(?:ReadOtherContents|GrayCell(?:Mask)?|BackgroundCell(?:Mask)?|Cleared|Done|Undone|Autosaved)|MYK(?:ModeColorPanel|ColorSpaceModel)|ircular(?:BezelStyle|Slider)|o(?:n(?:stantValueExpressionType|t(?:inuousCapacityLevelIndicatorStyle|entsCellMask|ain(?:sComparison|erSpecifierError)|rol(?:Glyph|KeyMask))|densedFontMask)|lor(?:Panel(?:RGBModeMask|GrayModeMask|HSBModeMask|C(?:MYKModeMask|olorListModeMask|ustomPaletteModeMask|rayonModeMask)|WheelModeMask|AllModesMask)|ListModeColorPanel)|reServiceDirectory|m(?:p(?:osite(?:XOR|Source(?:In|O(?:ut|ver)|Atop)|Highlight|C(?:opy|lear)|Destination(?:In|O(?:ut|ver)|Atop)|Plus(?:Darker|Lighter))|ressedFontMask)|mandKeyMask))|u(?:stom(?:SelectorPredicateOperatorType|PaletteModeColorPanel)|r(?:sor(?:Update(?:Mask)?|PointingDevice)|veToBezierPathElement))|e(?:nterT(?:extAlignment|abStopType)|ll(?:State|H(?:ighlighted|as(?:Image(?:Horizontal|OnLeftOrBottom)|OverlappingImage))|ChangesContents|Is(?:Bordered|InsetButton)|Disabled|Editable|LightsBy(?:Gray|Background|Contents)|AllowsMixedState))|l(?:ipPagination|o(?:s(?:ePathBezierPathElement|ableWindowMask)|ckAndCalendarDatePickerStyle)|ear(?:ControlTint|DisplayFunctionKey|LineFunctionKey))|a(?:seInsensitive(?:Search|PredicateOption)|n(?:notCreateScriptCommandError|cel(?:Button|TextMovement))|chesDirectory|lculation(?:NoError|Overflow|DivideByZero|Underflow|LossOfPrecision)|rriageReturnCharacter)|r(?:itical(?:Request|AlertStyle)|ayonModeColorPanel))|T(?:hick(?:SquareBezelStyle|erSquareBezelStyle)|ypesetter(?:Behavior|HorizontalTabAction|ContainerBreakAction|ZeroAdvancementAction|OriginalBehavior|ParagraphBreakAction|WhitespaceAction|L(?:ineBreakAction|atestBehavior))|i(?:ckMark(?:Right|Below|Left|Above)|tledWindowMask|meZoneDatePickerElementFlag)|o(?:olbarItemVisibilityPriority(?:Standard|High|User|Low)|pTabsBezelBorder|ggleButton)|IFF(?:Compression(?:N(?:one|EXT)|CCITTFAX(?:3|4)|OldJPEG|JPEG|PackBits|LZW)|FileType)|e(?:rminate(?:Now|Cancel|Later)|xt(?:Read(?:InapplicableDocumentTypeError|WriteErrorM(?:inimum|aximum))|Block(?:M(?:i(?:nimum(?:Height|Width)|ddleAlignment)|a(?:rgin|ximum(?:Height|Width)))|B(?:o(?:ttomAlignment|rder)|aselineAlignment)|Height|TopAlignment|P(?:ercentageValueType|adding)|Width|AbsoluteValueType)|StorageEdited(?:Characters|Attributes)|CellType|ured(?:RoundedBezelStyle|BackgroundWindowMask|SquareBezelStyle)|Table(?:FixedLayoutAlgorithm|AutomaticLayoutAlgorithm)|Field(?:RoundedBezel|SquareBezel|AndStepperDatePickerStyle)|WriteInapplicableDocumentTypeError|ListPrependEnclosingMarker))|woByteGlyphPacking|ab(?:Character|TextMovement|le(?:tP(?:oint(?:Mask|EventSubtype)?|roximity(?:Mask|EventSubtype)?)|Column(?:NoResizing|UserResizingMask|AutoresizingMask)|View(?:ReverseSequentialColumnAutoresizingStyle|GridNone|S(?:olid(?:HorizontalGridLineMask|VerticalGridLineMask)|equentialColumnAutoresizingStyle)|NoColumnAutoresizing|UniformColumnAutoresizingStyle|FirstColumnOnlyAutoresizingStyle|LastColumnOnlyAutoresizingStyle)))|rackModeMatrix)|I(?:n(?:sert(?:CharFunctionKey|FunctionKey|LineFunctionKey)|t(?:Type|ernalS(?:criptError|pecifierError))|dexSubelement|validIndexSpecifierError|formational(?:Request|AlertStyle)|PredicateOperatorType)|talicFontMask|SO(?:2022JPStringEncoding|Latin(?:1StringEncoding|2StringEncoding))|dentityMappingCharacterCollection|llegalTextMovement|mage(?:R(?:ight|ep(?:MatchesDevice|LoadStatus(?:ReadingHeader|Completed|InvalidData|Un(?:expectedEOF|knownType)|WillNeedAllData)))|Below|C(?:ellType|ache(?:BySize|Never|Default|Always))|Interpolation(?:High|None|Default|Low)|O(?:nly|verlaps)|Frame(?:Gr(?:oove|ayBezel)|Button|None|Photo)|L(?:oadStatus(?:ReadError|C(?:ompleted|ancelled)|InvalidData|UnexpectedEOF)|eft)|A(?:lign(?:Right|Bottom(?:Right|Left)?|Center|Top(?:Right|Left)?|Left)|bove)))|O(?:n(?:State|eByteGlyphPacking|OffButton|lyScrollerArrows)|ther(?:Mouse(?:D(?:own(?:Mask)?|ragged(?:Mask)?)|Up(?:Mask)?)|TextMovement)|SF1OperatingSystem|pe(?:n(?:GL(?:GO(?:Re(?:setLibrary|tainRenderers)|ClearFormatCache|FormatCacheSize)|PFA(?:R(?:obust|endererID)|M(?:inimumPolicy|ulti(?:sample|Screen)|PSafe|aximumPolicy)|BackingStore|S(?:creenMask|te(?:ncilSize|reo)|ingleRenderer|upersample|ample(?:s|Buffers|Alpha))|NoRecovery|C(?:o(?:lor(?:Size|Float)|mpliant)|losestPolicy)|OffScreen|D(?:oubleBuffer|epthSize)|PixelBuffer|VirtualScreenCount|FullScreen|Window|A(?:cc(?:umSize|elerated)|ux(?:Buffers|DepthStencil)|l(?:phaSize|lRenderers))))|StepUnicodeReservedBase)|rationNotSupportedForKeyS(?:criptError|pecifierError))|ffState|KButton|rPredicateType|bjC(?:B(?:itfield|oolType)|S(?:hortType|tr(?:ingType|uctType)|electorType)|NoType|CharType|ObjectType|DoubleType|UnionType|PointerType|VoidType|FloatType|Long(?:Type|longType)|ArrayType))|D(?:i(?:s(?:c(?:losureBezelStyle|reteCapacityLevelIndicatorStyle)|playWindowRunLoopOrdering)|acriticInsensitivePredicateOption|rect(?:Selection|PredicateModifier))|o(?:c(?:ModalWindowMask|ument(?:Directory|ationDirectory))|ubleType|wn(?:TextMovement|ArrowFunctionKey))|e(?:s(?:cendingPageOrder|ktopDirectory)|cimalTabStopType|v(?:ice(?:NColorSpaceModel|IndependentModifierFlagsMask)|eloper(?:Directory|ApplicationDirectory))|fault(?:ControlTint|TokenStyle)|lete(?:Char(?:acter|FunctionKey)|FunctionKey|LineFunctionKey)|moApplicationDirectory)|a(?:yCalendarUnit|teFormatter(?:MediumStyle|Behavior(?:10|Default)|ShortStyle|NoStyle|FullStyle|LongStyle))|ra(?:wer(?:Clos(?:ingState|edState)|Open(?:ingState|State))|gOperation(?:Generic|Move|None|Copy|Delete|Private|Every|Link|All)))|U(?:ser(?:CancelledError|D(?:irectory|omainMask)|FunctionKey)|RL(?:Handle(?:NotLoaded|Load(?:Succeeded|InProgress|Failed))|CredentialPersistence(?:None|Permanent|ForSession))|n(?:scaledWindowMask|cachedRead|i(?:codeStringEncoding|talicFontMask|fiedTitleAndToolbarWindowMask)|d(?:o(?:CloseGroupingRunLoopOrdering|FunctionKey)|e(?:finedDateComponent|rline(?:Style(?:Single|None|Thick|Double)|Pattern(?:Solid|D(?:ot|ash(?:Dot(?:Dot)?)?)))))|known(?:ColorSpaceModel|P(?:ointingDevice|ageOrder)|KeyS(?:criptError|pecifierError))|boldFontMask)|tilityWindowMask|TF8StringEncoding|p(?:dateWindowsRunLoopOrdering|TextMovement|ArrowFunctionKey))|J(?:ustifiedTextAlignment|PEG(?:2000FileType|FileType)|apaneseEUC(?:GlyphPacking|StringEncoding))|P(?:o(?:s(?:t(?:Now|erFontMask|WhenIdle|ASAP)|iti(?:on(?:Replace|Be(?:fore|ginning)|End|After)|ve(?:IntType|DoubleType|FloatType)))|pUp(?:NoArrow|ArrowAt(?:Bottom|Center))|werOffEventType|rtraitOrientation)|NGFileType|ush(?:InCell(?:Mask)?|OnPushOffButton)|e(?:n(?:TipMask|UpperSideMask|PointingDevice|LowerSideMask)|riodic(?:Mask)?)|P(?:S(?:caleField|tatus(?:Title|Field)|aveButton)|N(?:ote(?:Title|Field)|ame(?:Title|Field))|CopiesField|TitleField|ImageButton|OptionsButton|P(?:a(?:perFeedButton|ge(?:Range(?:To|From)|ChoiceMatrix))|reviewButton)|LayoutButton)|lainTextTokenStyle|a(?:useFunctionKey|ragraphSeparatorCharacter|ge(?:DownFunctionKey|UpFunctionKey))|r(?:int(?:ing(?:ReplyLater|Success|Cancelled|Failure)|ScreenFunctionKey|erTable(?:NotFound|OK|Error)|FunctionKey)|o(?:p(?:ertyList(?:XMLFormat|MutableContainers(?:AndLeaves)?|BinaryFormat|Immutable|OpenStepFormat)|rietaryStringEncoding)|gressIndicator(?:BarStyle|SpinningStyle|Preferred(?:SmallThickness|Thickness|LargeThickness|AquaThickness)))|e(?:ssedTab|vFunctionKey))|L(?:HeightForm|CancelButton|TitleField|ImageButton|O(?:KButton|rientationMatrix)|UnitsButton|PaperNameButton|WidthForm))|E(?:n(?:terCharacter|d(?:sWith(?:Comparison|PredicateOperatorType)|FunctionKey))|v(?:e(?:nOddWindingRule|rySubelement)|aluatedObjectExpressionType)|qualTo(?:Comparison|PredicateOperatorType)|ra(?:serPointingDevice|CalendarUnit|DatePickerElementFlag)|x(?:clude(?:10|QuickDrawElementsIconCreationOption)|pandedFontMask|ecuteFunctionKey))|V(?:i(?:ew(?:M(?:in(?:XMargin|YMargin)|ax(?:XMargin|YMargin))|HeightSizable|NotSizable|WidthSizable)|aPanelFontAction)|erticalRuler|a(?:lidationErrorM(?:inimum|aximum)|riableExpressionType))|Key(?:SpecifierEvaluationScriptError|Down(?:Mask)?|Up(?:Mask)?|PathExpressionType|Value(?:MinusSetMutation|SetSetMutation|Change(?:Re(?:placement|moval)|Setting|Insertion)|IntersectSetMutation|ObservingOption(?:New|Old)|UnionSetMutation|ValidationError))|QTMovie(?:NormalPlayback|Looping(?:BackAndForthPlayback|Playback))|F(?:1(?:1FunctionKey|7FunctionKey|2FunctionKey|8FunctionKey|3FunctionKey|9FunctionKey|4FunctionKey|5FunctionKey|FunctionKey|0FunctionKey|6FunctionKey)|7FunctionKey|i(?:nd(?:PanelAction(?:Replace(?:A(?:ndFind|ll(?:InSelection)?))?|S(?:howFindPanel|e(?:tFindString|lectAll(?:InSelection)?))|Next|Previous)|FunctionKey)|tPagination|le(?:Read(?:No(?:SuchFileError|PermissionError)|CorruptFileError|In(?:validFileNameError|applicableStringEncodingError)|Un(?:supportedSchemeError|knownError))|HandlingPanel(?:CancelButton|OKButton)|NoSuchFileError|ErrorM(?:inimum|aximum)|Write(?:NoPermissionError|In(?:validFileNameError|applicableStringEncodingError)|OutOfSpaceError|Un(?:supportedSchemeError|knownError))|LockingError)|xedPitchFontMask)|2(?:1FunctionKey|7FunctionKey|2FunctionKey|8FunctionKey|3FunctionKey|9FunctionKey|4FunctionKey|5FunctionKey|FunctionKey|0FunctionKey|6FunctionKey)|o(?:nt(?:Mo(?:noSpaceTrait|dernSerifsClass)|BoldTrait|S(?:ymbolicClass|criptsClass|labSerifsClass|ansSerifClass)|C(?:o(?:ndensedTrait|llectionApplicationOnlyMask)|larendonSerifsClass)|TransitionalSerifsClass|I(?:ntegerAdvancementsRenderingMode|talicTrait)|O(?:ldStyleSerifsClass|rnamentalsClass)|DefaultRenderingMode|U(?:nknownClass|IOptimizedTrait)|Panel(?:S(?:hadowEffectModeMask|t(?:andardModesMask|rikethroughEffectModeMask)|izeModeMask)|CollectionModeMask|TextColorEffectModeMask|DocumentColorEffectModeMask|UnderlineEffectModeMask|FaceModeMask|All(?:ModesMask|EffectsModeMask))|ExpandedTrait|VerticalTrait|F(?:amilyClassMask|reeformSerifsClass)|Antialiased(?:RenderingMode|IntegerAdvancementsRenderingMode))|cusRing(?:Below|Type(?:None|Default|Exterior)|Only|Above)|urByteGlyphPacking|rm(?:attingError(?:M(?:inimum|aximum))?|FeedCharacter))|8FunctionKey|unction(?:ExpressionType|KeyMask)|3(?:1FunctionKey|2FunctionKey|3FunctionKey|4FunctionKey|5FunctionKey|FunctionKey|0FunctionKey)|9FunctionKey|4FunctionKey|P(?:RevertButton|S(?:ize(?:Title|Field)|etButton)|CurrentField|Preview(?:Button|Field))|l(?:oat(?:ingPointSamplesBitmapFormat|Type)|agsChanged(?:Mask)?)|axButton|5FunctionKey|6FunctionKey)|W(?:heelModeColorPanel|indow(?:s(?:NTOperatingSystem|CP125(?:1StringEncoding|2StringEncoding|3StringEncoding|4StringEncoding|0StringEncoding)|95(?:InterfaceStyle|OperatingSystem))|M(?:iniaturizeButton|ovedEventType)|Below|CloseButton|ToolbarButton|ZoomButton|Out|DocumentIconButton|ExposedEventType|Above)|orkspaceLaunch(?:NewInstance|InhibitingBackgroundOnly|Default|PreferringClassic|WithoutA(?:ctivation|ddingToRecents)|A(?:sync|nd(?:Hide(?:Others)?|Print)|llowingClassicStartup))|eek(?:day(?:CalendarUnit|OrdinalCalendarUnit)|CalendarUnit)|a(?:ntsBidiLevels|rningAlertStyle)|r(?:itingDirection(?:RightToLeft|Natural|LeftToRight)|apCalendarComponents))|L(?:i(?:stModeMatrix|ne(?:Moves(?:Right|Down|Up|Left)|B(?:order|reakBy(?:C(?:harWrapping|lipping)|Truncating(?:Middle|Head|Tail)|WordWrapping))|S(?:eparatorCharacter|weep(?:Right|Down|Up|Left))|ToBezierPathElement|DoesntMove|arSlider)|teralSearch|kePredicateOperatorType|ghterFontAction|braryDirectory)|ocalDomainMask|e(?:ssThan(?:Comparison|OrEqualTo(?:Comparison|PredicateOperatorType)|PredicateOperatorType)|ft(?:Mouse(?:D(?:own(?:Mask)?|ragged(?:Mask)?)|Up(?:Mask)?)|T(?:ext(?:Movement|Alignment)|ab(?:sBezelBorder|StopType))|ArrowFunctionKey))|a(?:yout(?:RightToLeft|NotDone|CantFit|OutOfGlyphs|Done|LeftToRight)|ndscapeOrientation)|ABColorSpaceModel)|A(?:sc(?:iiWithDoubleByteEUCGlyphPacking|endingPageOrder)|n(?:y(?:Type|PredicateModifier|EventMask)|choredSearch|imation(?:Blocking|Nonblocking(?:Threaded)?|E(?:ffect(?:DisappearingItemDefault|Poof)|ase(?:In(?:Out)?|Out))|Linear)|dPredicateType)|t(?:Bottom|tachmentCharacter|omicWrite|Top)|SCIIStringEncoding|d(?:obe(?:GB1CharacterCollection|CNS1CharacterCollection|Japan(?:1CharacterCollection|2CharacterCollection)|Korea1CharacterCollection)|dTraitFontAction|minApplicationDirectory)|uto(?:saveOperation|Pagination)|pp(?:lication(?:SupportDirectory|D(?:irectory|e(?:fined(?:Mask)?|legateReply(?:Success|Cancel|Failure)|activatedEventType))|ActivatedEventType)|KitDefined(?:Mask)?)|l(?:ternateKeyMask|pha(?:ShiftKeyMask|NonpremultipliedBitmapFormat|FirstBitmapFormat)|ert(?:SecondButtonReturn|ThirdButtonReturn|OtherReturn|DefaultReturn|ErrorReturn|FirstButtonReturn|AlternateReturn)|l(?:ScrollerParts|DomainsMask|PredicateModifier|LibrariesDirectory|ApplicationsDirectory))|rgument(?:sWrongScriptError|EvaluationScriptError)|bove(?:Bottom|Top)|WTEventType)))(?:\\\\b)\"\n        },\n        {\n        token: \"support.function.C99.c\",\n        regex: C_Highlight_File.cFunctions\n        },\n        {\n            token : cObj.getKeywords(),\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        },\n        {\n            token: \"punctuation.section.scope.begin.objc\",\n            regex: \"\\\\[\",\n            next: \"bracketed_content\"\n        },\n        {\n            token: \"meta.function.objc\",\n            regex: \"^(?:-|\\\\+)\\\\s*\"\n        }\n    ],\n    \"constant_NSString\": [\n        {\n            token: \"constant.character.escape.objc\",\n            regex: escapedConstRe\n        },\n        {\n            token: \"invalid.illegal.unknown-escape.objc\",\n            regex: \"\\\\\\\\.\"\n        },\n        {\n            token: \"string\",\n            regex: '[^\"\\\\\\\\]+'\n        },\n        {\n            token: \"punctuation.definition.string.end\",\n            regex: \"\\\"\",\n            next: \"start\"\n        }\n    ],\n    \"protocol_list\": [\n        {\n            token: \"punctuation.section.scope.end.objc\",\n            regex: \">\",\n            next: \"start\"\n        },\n        {\n            token: \"support.other.protocol.objc\",\n            regex: \"\\bNS(?:GlyphStorage|M(?:utableCopying|enuItem)|C(?:hangeSpelling|o(?:ding|pying|lorPicking(?:Custom|Default)))|T(?:oolbarItemValidations|ext(?:Input|AttachmentCell))|I(?:nputServ(?:iceProvider|erMouseTracker)|gnoreMisspelledWords)|Obj(?:CTypeSerializationCallBack|ect)|D(?:ecimalNumberBehaviors|raggingInfo)|U(?:serInterfaceValidations|RL(?:HandleClient|DownloadDelegate|ProtocolClient|AuthenticationChallengeSender))|Validated(?:ToobarItem|UserInterfaceItem)|Locking)\\b\"\n        }\n    ],\n    \"selectors\": [\n        {\n            token: \"support.function.any-method.name-of-parameter.objc\",\n            regex: \"\\\\b(?:[a-zA-Z_:][\\\\w]*)+\"\n        },\n        {\n            token: \"punctuation\",\n            regex: \"\\\\)\",\n            next: \"start\"\n        }\n    ],\n    \"bracketed_content\": [\n        {\n            token: \"punctuation.section.scope.end.objc\",\n            regex: \"]\",\n            next: \"start\"\n        },\n        {\n            token: [\"support.function.any-method.objc\"],\n            regex: \"(?:predicateWithFormat:| NSPredicate predicateWithFormat:)\",\n            next: \"start\"\n        },\n        {\n            token: \"support.function.any-method.objc\",\n            regex: \"\\\\w+(?::|(?=]))\",\n            next: \"start\"\n        }\n    ],\n    \"bracketed_strings\": [\n        {\n            token: \"punctuation.section.scope.end.objc\",\n            regex: \"]\",\n            next: \"start\"\n        },\n        {\n            token: \"keyword.operator.logical.predicate.cocoa\",\n            regex: \"\\\\b(?:AND|OR|NOT|IN)\\\\b\"\n        },\n        {\n            token: [\"invalid.illegal.unknown-method.objc\", \"punctuation.separator.arguments.objc\"],\n            regex: \"\\\\b(\\\\w+)(:)\"\n        },\n        {\n            regex: \"\\\\b(?:ALL|ANY|SOME|NONE)\\\\b\",\n            token: \"constant.language.predicate.cocoa\"\n        },\n        {\n            regex: \"\\\\b(?:NULL|NIL|SELF|TRUE|YES|FALSE|NO|FIRST|LAST|SIZE)\\\\b\",\n            token: \"constant.language.predicate.cocoa\"\n        },\n        {\n            regex: \"\\\\b(?:MATCHES|CONTAINS|BEGINSWITH|ENDSWITH|BETWEEN)\\\\b\",\n            token: \"keyword.operator.comparison.predicate.cocoa\"\n        },\n        {\n            regex: \"\\\\bC(?:ASEINSENSITIVE|I)\\\\b\",\n            token: \"keyword.other.modifier.predicate.cocoa\"\n        },\n        {\n            regex: \"\\\\b(?:ANYKEY|SUBQUERY|CAST|TRUEPREDICATE|FALSEPREDICATE)\\\\b\",\n            token: \"keyword.other.predicate.cocoa\"\n        },\n        {\n            regex: escapedConstRe,\n            token: \"constant.character.escape.objc\"\n        },\n        {\n            regex: \"\\\\\\\\.\",\n            token: \"invalid.illegal.unknown-escape.objc\"\n        },\n        {\n            token: \"string\",\n            regex: '[^\"\\\\\\\\]'\n        },\n        {\n            token: \"punctuation.definition.string.end.objc\",\n            regex: \"\\\"\",\n            next: \"predicates\"\n        }\n    ],\n    \"comment\" : [\n        {\n            token : \"comment\", // closing comment\n            regex : \".*?\\\\*\\\\/\",\n            next : \"start\"\n        }, {\n            defaultToken : \"comment\"\n        }\n    ],\n    \"methods\" : [\n        {\n            token : \"meta.function.objc\",\n            regex : \"(?=\\\\{|#)|;\",\n            next : \"start\"\n        }\n    ]\n};\n\n    // copy in C-Rules directly\n    for (var r in cRules) {\n        if (this.$rules[r]) {\n            if (this.$rules[r].push)\n                this.$rules[r].push.apply(this.$rules[r], cRules[r]);\n        } else {\n            this.$rules[r] = cRules[r];\n        }\n    }\n    \n    this.$rules.bracketed_content = this.$rules.bracketed_content.concat(\n        this.$rules.start, specialVariables\n    );\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n};\n\noop.inherits(ObjectiveCHighlightRules, CHighlightRules);\n\nexports.ObjectiveCHighlightRules = ObjectiveCHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/ocaml.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar OcamlHighlightRules = require(\"./ocaml_highlight_rules\").OcamlHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\n\nvar Mode = function() {\n    this.HighlightRules = OcamlHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n    \n    this.$outdent   = new MatchingBraceOutdent();\n};\noop.inherits(Mode, TextMode);\n\nvar indenter = /(?:[({[=:]|[-=]>|\\b(?:else|try|with))\\s*$/;\n\n(function() {\n\n    this.toggleCommentLines = function(state, doc, startRow, endRow) {\n        var i, line;\n        var outdent = true;\n        var re = /^\\s*\\(\\*(.*)\\*\\)/;\n\n        for (i=startRow; i<= endRow; i++) {\n            if (!re.test(doc.getLine(i))) {\n                outdent = false;\n                break;\n            }\n        }\n\n        var range = new Range(0, 0, 0, 0);\n        for (i=startRow; i<= endRow; i++) {\n            line = doc.getLine(i);\n            range.start.row  = i;\n            range.end.row    = i;\n            range.end.column = line.length;\n\n            doc.replace(range, outdent ? line.match(re)[1] : \"(*\" + line + \"*)\");\n        }\n    };\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n\n        if (!(tokens.length && tokens[tokens.length - 1].type === 'comment') &&\n            state === 'start' && indenter.test(line))\n            indent += tab;\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/ocaml\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\n"
  },
  {
    "path": "lib/ace/mode/ocaml_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar OcamlHighlightRules = function() {\n\n    var keywords = (\n        \"and|as|assert|begin|class|constraint|do|done|downto|else|end|\"  +\n        \"exception|external|for|fun|function|functor|if|in|include|\"     +\n        \"inherit|initializer|lazy|let|match|method|module|mutable|new|\"  +\n        \"object|of|open|or|private|rec|sig|struct|then|to|try|type|val|\" +\n        \"virtual|when|while|with\"\n    );\n\n    var builtinConstants = (\"true|false\");\n\n    var builtinFunctions = (\n        \"abs|abs_big_int|abs_float|abs_num|abstract_tag|accept|access|acos|add|\" +\n        \"add_available_units|add_big_int|add_buffer|add_channel|add_char|\" +\n        \"add_initializer|add_int_big_int|add_interfaces|add_num|add_string|\" +\n        \"add_substitute|add_substring|alarm|allocated_bytes|allow_only|\" +\n        \"allow_unsafe_modules|always|append|appname_get|appname_set|\" +\n        \"approx_num_exp|approx_num_fix|arg|argv|arith_status|array|\" +\n        \"array1_of_genarray|array2_of_genarray|array3_of_genarray|asin|asr|\" +\n        \"assoc|assq|at_exit|atan|atan2|auto_synchronize|background|basename|\" +\n        \"beginning_of_input|big_int_of_int|big_int_of_num|big_int_of_string|bind|\" +\n        \"bind_class|bind_tag|bits|bits_of_float|black|blit|blit_image|blue|bool|\" +\n        \"bool_of_string|bounded_full_split|bounded_split|bounded_split_delim|\" +\n        \"bprintf|break|broadcast|bscanf|button_down|c_layout|capitalize|cardinal|\" +\n        \"cardinal|catch|catch_break|ceil|ceiling_num|channel|char|char_of_int|\" +\n        \"chdir|check|check_suffix|chmod|choose|chop_extension|chop_suffix|chown|\" +\n        \"chown|chr|chroot|classify_float|clear|clear_available_units|\" +\n        \"clear_close_on_exec|clear_graph|clear_nonblock|clear_parser|\" +\n        \"close|close|closeTk|close_box|close_graph|close_in|close_in_noerr|\" +\n        \"close_out|close_out_noerr|close_process|close_process|\" +\n        \"close_process_full|close_process_in|close_process_out|close_subwindow|\" +\n        \"close_tag|close_tbox|closedir|closedir|closure_tag|code|combine|\" +\n        \"combine|combine|command|compact|compare|compare_big_int|compare_num|\" +\n        \"complex32|complex64|concat|conj|connect|contains|contains_from|contents|\" +\n        \"copy|cos|cosh|count|count|counters|create|create_alarm|create_image|\" +\n        \"create_matrix|create_matrix|create_matrix|create_object|\" +\n        \"create_object_and_run_initializers|create_object_opt|create_process|\" +\n        \"create_process|create_process_env|create_process_env|create_table|\" +\n        \"current|current_dir_name|current_point|current_x|current_y|curveto|\" +\n        \"custom_tag|cyan|data_size|decr|decr_num|default_available_units|delay|\" +\n        \"delete_alarm|descr_of_in_channel|descr_of_out_channel|destroy|diff|dim|\" +\n        \"dim1|dim2|dim3|dims|dirname|display_mode|div|div_big_int|div_num|\" +\n        \"double_array_tag|double_tag|draw_arc|draw_char|draw_circle|draw_ellipse|\" +\n        \"draw_image|draw_poly|draw_poly_line|draw_rect|draw_segments|draw_string|\" +\n        \"dummy_pos|dummy_table|dump_image|dup|dup2|elements|empty|end_of_input|\" +\n        \"environment|eprintf|epsilon_float|eq_big_int|eq_num|equal|err_formatter|\" +\n        \"error_message|escaped|establish_server|executable_name|execv|execve|execvp|\" +\n        \"execvpe|exists|exists2|exit|exp|failwith|fast_sort|fchmod|fchown|field|\" +\n        \"file|file_exists|fill|fill_arc|fill_circle|fill_ellipse|fill_poly|fill_rect|\" +\n        \"filter|final_tag|finalise|find|find_all|first_chars|firstkey|flatten|\" +\n        \"float|float32|float64|float_of_big_int|float_of_bits|float_of_int|\" +\n        \"float_of_num|float_of_string|floor|floor_num|flush|flush_all|flush_input|\" +\n        \"flush_str_formatter|fold|fold_left|fold_left2|fold_right|fold_right2|\" +\n        \"for_all|for_all2|force|force_newline|force_val|foreground|fork|\" +\n        \"format_of_string|formatter_of_buffer|formatter_of_out_channel|\" +\n        \"fortran_layout|forward_tag|fprintf|frexp|from|from_channel|from_file|\" +\n        \"from_file_bin|from_function|from_string|fscanf|fst|fstat|ftruncate|\" +\n        \"full_init|full_major|full_split|gcd_big_int|ge_big_int|ge_num|\" +\n        \"genarray_of_array1|genarray_of_array2|genarray_of_array3|get|\" +\n        \"get_all_formatter_output_functions|get_approx_printing|get_copy|\" +\n        \"get_ellipsis_text|get_error_when_null_denominator|get_floating_precision|\" +\n        \"get_formatter_output_functions|get_formatter_tag_functions|get_image|\" +\n        \"get_margin|get_mark_tags|get_max_boxes|get_max_indent|get_method|\" +\n        \"get_method_label|get_normalize_ratio|get_normalize_ratio_when_printing|\" +\n        \"get_print_tags|get_state|get_variable|getcwd|getegid|getegid|getenv|\" +\n        \"getenv|getenv|geteuid|geteuid|getgid|getgid|getgrgid|getgrgid|getgrnam|\" +\n        \"getgrnam|getgroups|gethostbyaddr|gethostbyname|gethostname|getitimer|\" +\n        \"getlogin|getpeername|getpid|getppid|getprotobyname|getprotobynumber|\" +\n        \"getpwnam|getpwuid|getservbyname|getservbyport|getsockname|getsockopt|\" +\n        \"getsockopt_float|getsockopt_int|getsockopt_optint|gettimeofday|getuid|\" +\n        \"global_replace|global_substitute|gmtime|green|grid|group_beginning|\" +\n        \"group_end|gt_big_int|gt_num|guard|handle_unix_error|hash|hash_param|\" +\n        \"hd|header_size|i|id|ignore|in_channel_length|in_channel_of_descr|incr|\" +\n        \"incr_num|index|index_from|inet_addr_any|inet_addr_of_string|infinity|\" +\n        \"infix_tag|init|init_class|input|input_binary_int|input_byte|input_char|\" +\n        \"input_line|input_value|int|int16_signed|int16_unsigned|int32|int64|\" +\n        \"int8_signed|int8_unsigned|int_of_big_int|int_of_char|int_of_float|\" +\n        \"int_of_num|int_of_string|integer_num|inter|interactive|inv|invalid_arg|\" +\n        \"is_block|is_empty|is_implicit|is_int|is_int_big_int|is_integer_num|\" +\n        \"is_relative|iter|iter2|iteri|join|junk|key_pressed|kill|kind|kprintf|\" +\n        \"kscanf|land|last_chars|layout|lazy_from_fun|lazy_from_val|lazy_is_val|\" +\n        \"lazy_tag|ldexp|le_big_int|le_num|length|lexeme|lexeme_char|lexeme_end|\" +\n        \"lexeme_end_p|lexeme_start|lexeme_start_p|lineto|link|list|listen|lnot|\" +\n        \"loadfile|loadfile_private|localtime|lock|lockf|log|log10|logand|lognot|\" +\n        \"logor|logxor|lor|lower_window|lowercase|lseek|lsl|lsr|lstat|lt_big_int|\" +\n        \"lt_num|lxor|magenta|magic|mainLoop|major|major_slice|make|make_formatter|\" +\n        \"make_image|make_lexer|make_matrix|make_self_init|map|map2|map_file|mapi|\" +\n        \"marshal|match_beginning|match_end|matched_group|matched_string|max|\" +\n        \"max_array_length|max_big_int|max_elt|max_float|max_int|max_num|\" +\n        \"max_string_length|mem|mem_assoc|mem_assq|memq|merge|min|min_big_int|\" +\n        \"min_elt|min_float|min_int|min_num|minor|minus_big_int|minus_num|\" +\n        \"minus_one|mkdir|mkfifo|mktime|mod|mod_big_int|mod_float|mod_num|modf|\" +\n        \"mouse_pos|moveto|mul|mult_big_int|mult_int_big_int|mult_num|nan|narrow|\" +\n        \"nat_of_num|nativeint|neg|neg_infinity|new_block|new_channel|new_method|\" +\n        \"new_variable|next|nextkey|nice|nice|no_scan_tag|norm|norm2|not|npeek|\" +\n        \"nth|nth_dim|num_digits_big_int|num_dims|num_of_big_int|num_of_int|\" +\n        \"num_of_nat|num_of_ratio|num_of_string|O|obj|object_tag|ocaml_version|\" +\n        \"of_array|of_channel|of_float|of_int|of_int32|of_list|of_nativeint|\" +\n        \"of_string|one|openTk|open_box|open_connection|open_graph|open_hbox|\" +\n        \"open_hovbox|open_hvbox|open_in|open_in_bin|open_in_gen|open_out|\" +\n        \"open_out_bin|open_out_gen|open_process|open_process_full|open_process_in|\" +\n        \"open_process_out|open_subwindow|open_tag|open_tbox|open_temp_file|\" +\n        \"open_vbox|opendbm|opendir|openfile|or|os_type|out_channel_length|\" +\n        \"out_channel_of_descr|output|output_binary_int|output_buffer|output_byte|\" +\n        \"output_char|output_string|output_value|over_max_boxes|pack|params|\" +\n        \"parent_dir_name|parse|parse_argv|partition|pause|peek|pipe|pixels|\" +\n        \"place|plot|plots|point_color|polar|poll|pop|pos_in|pos_out|pow|\" +\n        \"power_big_int_positive_big_int|power_big_int_positive_int|\" +\n        \"power_int_positive_big_int|power_int_positive_int|power_num|\" +\n        \"pp_close_box|pp_close_tag|pp_close_tbox|pp_force_newline|\" +\n        \"pp_get_all_formatter_output_functions|pp_get_ellipsis_text|\" +\n        \"pp_get_formatter_output_functions|pp_get_formatter_tag_functions|\" +\n        \"pp_get_margin|pp_get_mark_tags|pp_get_max_boxes|pp_get_max_indent|\" +\n        \"pp_get_print_tags|pp_open_box|pp_open_hbox|pp_open_hovbox|pp_open_hvbox|\" +\n        \"pp_open_tag|pp_open_tbox|pp_open_vbox|pp_over_max_boxes|pp_print_as|\" +\n        \"pp_print_bool|pp_print_break|pp_print_char|pp_print_cut|pp_print_float|\" +\n        \"pp_print_flush|pp_print_if_newline|pp_print_int|pp_print_newline|\" +\n        \"pp_print_space|pp_print_string|pp_print_tab|pp_print_tbreak|\" +\n        \"pp_set_all_formatter_output_functions|pp_set_ellipsis_text|\" +\n        \"pp_set_formatter_out_channel|pp_set_formatter_output_functions|\" +\n        \"pp_set_formatter_tag_functions|pp_set_margin|pp_set_mark_tags|\" +\n        \"pp_set_max_boxes|pp_set_max_indent|pp_set_print_tags|pp_set_tab|\" +\n        \"pp_set_tags|pred|pred_big_int|pred_num|prerr_char|prerr_endline|\" +\n        \"prerr_float|prerr_int|prerr_newline|prerr_string|print|print_as|\" +\n        \"print_bool|print_break|print_char|print_cut|print_endline|print_float|\" +\n        \"print_flush|print_if_newline|print_int|print_newline|print_space|\" +\n        \"print_stat|print_string|print_tab|print_tbreak|printf|prohibit|\" +\n        \"public_method_label|push|putenv|quo_num|quomod_big_int|quote|raise|\" +\n        \"raise_window|ratio_of_num|rcontains_from|read|read_float|read_int|\" +\n        \"read_key|read_line|readdir|readdir|readlink|really_input|receive|recv|\" +\n        \"recvfrom|red|ref|regexp|regexp_case_fold|regexp_string|\" +\n        \"regexp_string_case_fold|register|register_exception|rem|remember_mode|\" +\n        \"remove|remove_assoc|remove_assq|rename|replace|replace_first|\" +\n        \"replace_matched|repr|reset|reshape|reshape_1|reshape_2|reshape_3|rev|\" +\n        \"rev_append|rev_map|rev_map2|rewinddir|rgb|rhs_end|rhs_end_pos|rhs_start|\" +\n        \"rhs_start_pos|rindex|rindex_from|rlineto|rmdir|rmoveto|round_num|\" +\n        \"run_initializers|run_initializers_opt|scanf|search_backward|\" +\n        \"search_forward|seek_in|seek_out|select|self|self_init|send|sendto|set|\" +\n        \"set_all_formatter_output_functions|set_approx_printing|\" +\n        \"set_binary_mode_in|set_binary_mode_out|set_close_on_exec|\" +\n        \"set_close_on_exec|set_color|set_ellipsis_text|\" +\n        \"set_error_when_null_denominator|set_field|set_floating_precision|\" +\n        \"set_font|set_formatter_out_channel|set_formatter_output_functions|\" +\n        \"set_formatter_tag_functions|set_line_width|set_margin|set_mark_tags|\" +\n        \"set_max_boxes|set_max_indent|set_method|set_nonblock|set_nonblock|\" +\n        \"set_normalize_ratio|set_normalize_ratio_when_printing|set_print_tags|\" +\n        \"set_signal|set_state|set_tab|set_tag|set_tags|set_text_size|\" +\n        \"set_window_title|setgid|setgid|setitimer|setitimer|setsid|setsid|\" +\n        \"setsockopt|setsockopt|setsockopt_float|setsockopt_float|setsockopt_int|\" +\n        \"setsockopt_int|setsockopt_optint|setsockopt_optint|setuid|setuid|\" +\n        \"shift_left|shift_left|shift_left|shift_right|shift_right|shift_right|\" +\n        \"shift_right_logical|shift_right_logical|shift_right_logical|show_buckets|\" +\n        \"shutdown|shutdown|shutdown_connection|shutdown_connection|sigabrt|\" +\n        \"sigalrm|sigchld|sigcont|sigfpe|sighup|sigill|sigint|sigkill|sign_big_int|\" +\n        \"sign_num|signal|signal|sigpending|sigpending|sigpipe|sigprocmask|\" +\n        \"sigprocmask|sigprof|sigquit|sigsegv|sigstop|sigsuspend|sigsuspend|\" +\n        \"sigterm|sigtstp|sigttin|sigttou|sigusr1|sigusr2|sigvtalrm|sin|singleton|\" +\n        \"sinh|size|size|size_x|size_y|sleep|sleep|sleep|slice_left|slice_left|\" +\n        \"slice_left_1|slice_left_2|slice_right|slice_right|slice_right_1|\" +\n        \"slice_right_2|snd|socket|socket|socket|socketpair|socketpair|sort|sound|\" +\n        \"split|split_delim|sprintf|sprintf|sqrt|sqrt|sqrt_big_int|square_big_int|\" +\n        \"square_num|sscanf|stable_sort|stable_sort|stable_sort|stable_sort|stable_sort|\" +\n        \"stable_sort|stat|stat|stat|stat|stat|stats|stats|std_formatter|stdbuf|\" +\n        \"stderr|stderr|stderr|stdib|stdin|stdin|stdin|stdout|stdout|stdout|\" +\n        \"str_formatter|string|string_after|string_before|string_match|\" +\n        \"string_of_big_int|string_of_bool|string_of_float|string_of_format|\" +\n        \"string_of_inet_addr|string_of_inet_addr|string_of_int|string_of_num|\" +\n        \"string_partial_match|string_tag|sub|sub|sub_big_int|sub_left|sub_num|\" +\n        \"sub_right|subset|subset|substitute_first|substring|succ|succ|\" +\n        \"succ|succ|succ_big_int|succ_num|symbol_end|symbol_end_pos|symbol_start|\" +\n        \"symbol_start_pos|symlink|symlink|sync|synchronize|system|system|system|\" +\n        \"tag|take|tan|tanh|tcdrain|tcdrain|tcflow|tcflow|tcflush|tcflush|\" +\n        \"tcgetattr|tcgetattr|tcsendbreak|tcsendbreak|tcsetattr|tcsetattr|\" +\n        \"temp_file|text_size|time|time|time|timed_read|timed_write|times|times|\" +\n        \"tl|tl|tl|to_buffer|to_channel|to_float|to_hex|to_int|to_int32|to_list|\" +\n        \"to_list|to_list|to_nativeint|to_string|to_string|to_string|to_string|\" +\n        \"to_string|top|top|total_size|transfer|transp|truncate|truncate|truncate|\" +\n        \"truncate|truncate|truncate|try_lock|umask|umask|uncapitalize|uncapitalize|\" +\n        \"uncapitalize|union|union|unit_big_int|unlink|unlink|unlock|unmarshal|\" +\n        \"unsafe_blit|unsafe_fill|unsafe_get|unsafe_get|unsafe_set|unsafe_set|\" +\n        \"update|uppercase|uppercase|uppercase|uppercase|usage|utimes|utimes|wait|\" +\n        \"wait|wait|wait|wait_next_event|wait_pid|wait_read|wait_signal|\" +\n        \"wait_timed_read|wait_timed_write|wait_write|waitpid|white|\" +\n        \"widen|window_id|word_size|wrap|wrap_abort|write|yellow|yield|zero|zero_big_int|\" +\n\n        \"Arg|Arith_status|Array|Array1|Array2|Array3|ArrayLabels|Big_int|Bigarray|\" +\n        \"Buffer|Callback|CamlinternalOO|Char|Complex|Condition|Dbm|Digest|Dynlink|\" +\n        \"Event|Filename|Format|Gc|Genarray|Genlex|Graphics|GraphicsX11|Hashtbl|\" +\n        \"Int32|Int64|LargeFile|Lazy|Lexing|List|ListLabels|Make|Map|Marshal|\" +\n        \"MoreLabels|Mutex|Nativeint|Num|Obj|Oo|Parsing|Pervasives|Printexc|\" +\n        \"Printf|Queue|Random|Scanf|Scanning|Set|Sort|Stack|State|StdLabels|Str|\" +\n        \"Stream|String|StringLabels|Sys|Thread|ThreadUnix|Tk|Unix|UnixLabels|Weak\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"this\",\n        \"keyword\": keywords,\n        \"constant.language\": builtinConstants,\n        \"support.function\": builtinFunctions\n    }, \"identifier\");\n\n    var decimalInteger = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n    var octInteger = \"(?:0[oO]?[0-7]+)\";\n    var hexInteger = \"(?:0[xX][\\\\dA-Fa-f]+)\";\n    var binInteger = \"(?:0[bB][01]+)\";\n    var integer = \"(?:\" + decimalInteger + \"|\" + octInteger + \"|\" + hexInteger + \"|\" + binInteger + \")\";\n\n    var exponent = \"(?:[eE][+-]?\\\\d+)\";\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var exponentFloat = \"(?:(?:\" + pointFloat + \"|\" +  intPart + \")\" + exponent + \")\";\n    var floatNumber = \"(?:\" + exponentFloat + \"|\" + pointFloat + \")\";\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : '\\\\(\\\\*.*?\\\\*\\\\)\\\\s*?$'\n            },\n            {\n                token : \"comment\",\n                regex : '\\\\(\\\\*.*',\n                next : \"comment\"\n            },\n            {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            },\n            {\n                token : \"string\", // single char\n                regex : \"'.'\"\n            },\n            {\n                token : \"string\", // \" string\n                regex : '\"',\n                next  : \"qstring\"\n            },\n            {\n                token : \"constant.numeric\", // imaginary\n                regex : \"(?:\" + floatNumber + \"|\\\\d+)[jJ]\\\\b\"\n            },\n            {\n                token : \"constant.numeric\", // float\n                regex : floatNumber\n            },\n            {\n                token : \"constant.numeric\", // integer\n                regex : integer + \"\\\\b\"\n            },\n            {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            },\n            {\n                token : \"keyword.operator\",\n                regex : \"\\\\+\\\\.|\\\\-\\\\.|\\\\*\\\\.|\\\\/\\\\.|#|;;|\\\\+|\\\\-|\\\\*|\\\\*\\\\*\\\\/|\\\\/\\\\/|%|<<|>>|&|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|<-|=\"\n            },\n            {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            },\n            {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            },\n            {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\)\",\n                next : \"start\"\n            },\n            {\n                defaultToken : \"comment\"\n            }\n        ],\n\n        \"qstring\" : [\n            {\n                token : \"string\",\n                regex : '\"',\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : '.+'\n            }\n        ]\n    };\n};\n\noop.inherits(OcamlHighlightRules, TextHighlightRules);\n\nexports.OcamlHighlightRules = OcamlHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/pascal.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n *\n * Contributor(s):\n * \n *\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar PascalHighlightRules = require(\"./pascal_highlight_rules\").PascalHighlightRules;\n// TODO: pick appropriate fold mode\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = PascalHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n       \n    this.lineCommentStart = [\"--\", \"//\"];\n    this.blockComment = [\n        {start: \"(*\", end: \"*)\"},\n        {start: \"{\", end: \"}\"}\n    ];\n    \n    this.$id = \"ace/mode/pascal\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});"
  },
  {
    "path": "lib/ace/mode/pascal_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/* THIS FILE WAS AUTOGENERATED FROM tool\\tm bundles\\pascal.tmbundle\\Syntaxes\\Pascal.plist (UUID: F42FA544-6B1C-11D9-9517-000D93589AF6) */\n/****************************************************************\n * IT MIGHT NOT BE PERFECT, PARTICULARLY:                       *\n * IN DECIDING STATES TO TRANSITION TO,                         *\n * IGNORING WHITESPACE,                                         *\n * IGNORING GROUPS WITH ?:,                                     *\n * EXTENDING EXISTING MODES,                                    *\n * GATHERING KEYWORDS, OR                                       *\n * DECIDING WHEN TO USE PUSH.                                   *\n * ...But it's a good start from an existing *.tmlanguage file. *\n ****************************************************************/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar PascalHighlightRules = function() {\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = { start: \n       [ { caseInsensitive: true,\n           token: 'keyword.control.pascal',\n           regex: '\\\\b(?:(absolute|abstract|all|and|and_then|array|as|asm|attribute|begin|bindable|case|class|const|constructor|destructor|div|do|do|else|end|except|export|exports|external|far|file|finalization|finally|for|forward|goto|if|implementation|import|in|inherited|initialization|interface|interrupt|is|label|library|mod|module|name|near|nil|not|object|of|only|operator|or|or_else|otherwise|packed|pow|private|program|property|protected|public|published|qualified|record|repeat|resident|restricted|segment|set|shl|shr|then|to|try|type|unit|until|uses|value|var|view|virtual|while|with|xor))\\\\b' },\n         { caseInsensitive: true,           \n           token: \n            [ 'variable.pascal', \"text\",\n              'storage.type.prototype.pascal',\n              'entity.name.function.prototype.pascal' ],\n           regex: '\\\\b(function|procedure)(\\\\s+)(\\\\w+)(\\\\.\\\\w+)?(?=(?:\\\\(.*?\\\\))?;\\\\s*(?:attribute|forward|external))' },\n         { caseInsensitive: true,\n           token: \n            [ 'variable.pascal', \"text\",\n              'storage.type.function.pascal',\n              'entity.name.function.pascal' ],\n           regex: '\\\\b(function|procedure)(\\\\s+)(\\\\w+)(\\\\.\\\\w+)?' },\n         { token: 'constant.numeric.pascal',\n           regex: '\\\\b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\\\\.?[0-9]*)|(\\\\.[0-9]+))((e|E)(\\\\+|-)?[0-9]+)?)(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b' },\n         { token: 'punctuation.definition.comment.pascal',\n           regex: '--.*$',\n           push_: \n            [ { token: 'comment.line.double-dash.pascal.one',\n                regex: '$',\n                next: 'pop' },\n              { defaultToken: 'comment.line.double-dash.pascal.one' } ] },\n         { token: 'punctuation.definition.comment.pascal',\n           regex: '//.*$',\n           push_: \n            [ { token: 'comment.line.double-slash.pascal.two',\n                regex: '$',\n                next: 'pop' },\n              { defaultToken: 'comment.line.double-slash.pascal.two' } ] },\n         { token: 'punctuation.definition.comment.pascal',\n           regex: '\\\\(\\\\*',\n           push: \n            [ { token: 'punctuation.definition.comment.pascal',\n                regex: '\\\\*\\\\)',\n                next: 'pop' },\n              { defaultToken: 'comment.block.pascal.one' } ] },\n         { token: 'punctuation.definition.comment.pascal',\n           regex: '\\\\{',\n           push: \n            [ { token: 'punctuation.definition.comment.pascal',\n                regex: '\\\\}',\n                next: 'pop' },\n              { defaultToken: 'comment.block.pascal.two' } ] },\n         { token: 'punctuation.definition.string.begin.pascal',\n           regex: '\"',\n           push: \n            [ { token: 'constant.character.escape.pascal', regex: '\\\\\\\\.' },\n              { token: 'punctuation.definition.string.end.pascal',\n                regex: '\"',\n                next: 'pop' },\n              { defaultToken: 'string.quoted.double.pascal' } ]\n           //Double quoted strings are an extension and (generally) support C-style escape sequences.\n            },\n         { token: 'punctuation.definition.string.begin.pascal',\n           regex: '\\'',\n           push: \n            [ { token: 'constant.character.escape.apostrophe.pascal',\n                regex: '\\'\\'' },\n              { token: 'punctuation.definition.string.end.pascal',\n                regex: '\\'',\n                next: 'pop' },\n              { defaultToken: 'string.quoted.single.pascal' } ] },\n          { token: 'keyword.operator',\n           regex: '[+\\\\-;,/*%]|:=|=' } ] };\n    \n    this.normalizeRules();\n};\n\noop.inherits(PascalHighlightRules, TextHighlightRules);\n\nexports.PascalHighlightRules = PascalHighlightRules;\n});"
  },
  {
    "path": "lib/ace/mode/perl.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar PerlHighlightRules = require(\"./perl_highlight_rules\").PerlHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = PerlHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.foldingRules = new CStyleFoldMode({start: \"^=(begin|item)\\\\b\", end: \"^=(cut)\\\\b\"});\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"#\";\n    this.blockComment = [\n        {start: \"=begin\", end: \"=cut\", lineStartOnly: true},\n        {start: \"=item\", end: \"=cut\", lineStartOnly: true}\n    ];\n\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[:]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/perl\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/perl_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar PerlHighlightRules = function() {\n\n    var keywords = (\n        \"base|constant|continue|else|elsif|for|foreach|format|goto|if|last|local|my|next|\" +\n         \"no|package|parent|redo|require|scalar|sub|unless|until|while|use|vars\"\n    );\n\n    var buildinConstants = (\"ARGV|ENV|INC|SIG\");\n\n    var builtinFunctions = (\n        \"getprotobynumber|getprotobyname|getservbyname|gethostbyaddr|\" +\n         \"gethostbyname|getservbyport|getnetbyaddr|getnetbyname|getsockname|\" +\n         \"getpeername|setpriority|getprotoent|setprotoent|getpriority|\" +\n         \"endprotoent|getservent|setservent|endservent|sethostent|socketpair|\" +\n         \"getsockopt|gethostent|endhostent|setsockopt|setnetent|quotemeta|\" +\n         \"localtime|prototype|getnetent|endnetent|rewinddir|wantarray|getpwuid|\" +\n         \"closedir|getlogin|readlink|endgrent|getgrgid|getgrnam|shmwrite|\" +\n         \"shutdown|readline|endpwent|setgrent|readpipe|formline|truncate|\" +\n         \"dbmclose|syswrite|setpwent|getpwnam|getgrent|getpwent|ucfirst|sysread|\" +\n         \"setpgrp|shmread|sysseek|sysopen|telldir|defined|opendir|connect|\" +\n         \"lcfirst|getppid|binmode|syscall|sprintf|getpgrp|readdir|seekdir|\" +\n         \"waitpid|reverse|unshift|symlink|dbmopen|semget|msgrcv|rename|listen|\" +\n         \"chroot|msgsnd|shmctl|accept|unpack|exists|fileno|shmget|system|\" +\n         \"unlink|printf|gmtime|msgctl|semctl|values|rindex|substr|splice|\" +\n         \"length|msgget|select|socket|return|caller|delete|alarm|ioctl|index|\" +\n         \"undef|lstat|times|srand|chown|fcntl|close|write|umask|rmdir|study|\" +\n         \"sleep|chomp|untie|print|utime|mkdir|atan2|split|crypt|flock|chmod|\" +\n         \"BEGIN|bless|chdir|semop|shift|reset|link|stat|chop|grep|fork|dump|\" +\n         \"join|open|tell|pipe|exit|glob|warn|each|bind|sort|pack|eval|push|\" +\n         \"keys|getc|kill|seek|sqrt|send|wait|rand|tied|read|time|exec|recv|\" +\n         \"eof|chr|int|ord|exp|pos|pop|sin|log|abs|oct|hex|tie|cos|vec|END|ref|\" +\n         \"map|die|uc|lc|do\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants,\n        \"support.function\": builtinFunctions\n    }, \"identifier\");\n\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment.doc\",\n                regex : \"^=(?:begin|item)\\\\b\",\n                next : \"block_comment\"\n            }, {\n                token : \"string.regexp\",\n                regex : \"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // multi line string start\n                regex : '[\"].*\\\\\\\\$',\n                next : \"qqstring\"\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"string\", // multi line string start\n                regex : \"['].*\\\\\\\\$\",\n                next : \"qstring\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0x[0-9a-fA-F]+\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"%#|\\\\$#|\\\\.\\\\.\\\\.|\\\\|\\\\|=|>>=|<<=|<=>|&&=|=>|!~|\\\\^=|&=|\\\\|=|\\\\.=|x=|%=|\\\\/=|\\\\*=|\\\\-=|\\\\+=|=~|\\\\*\\\\*|\\\\-\\\\-|\\\\.\\\\.|\\\\|\\\\||&&|\\\\+\\\\+|\\\\->|!=|==|>=|<=|>>|<<|,|=|\\\\?\\\\:|\\\\^|\\\\||x|%|\\\\/|\\\\*|<|&|\\\\\\\\|~|!|>|\\\\.|\\\\-|\\\\+|\\\\-C|\\\\-b|\\\\-S|\\\\-u|\\\\-t|\\\\-p|\\\\-l|\\\\-d|\\\\-f|\\\\-g|\\\\-s|\\\\-z|\\\\-k|\\\\-e|\\\\-O|\\\\-T|\\\\-B|\\\\-M|\\\\-A|\\\\-X|\\\\-W|\\\\-c|\\\\-R|\\\\-o|\\\\-x|\\\\-w|\\\\-r|\\\\b(?:and|cmp|eq|ge|gt|le|lt|ne|not|or|xor)\"\n            }, {\n                token : \"comment\",\n                regex : \"#.*$\"\n            }, {\n                token : \"lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"string\",\n                regex : '(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : '.+'\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"string\",\n                regex : \"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : '.+'\n            }\n        ],\n        \"block_comment\": [\n            {\n                token: \"comment.doc\", \n                regex: \"^=cut\\\\b\",\n                next: \"start\"\n            },\n            {\n                defaultToken: \"comment.doc\"\n            }\n        ]\n    };\n};\n\noop.inherits(PerlHighlightRules, TextHighlightRules);\n\nexports.PerlHighlightRules = PerlHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/pgsql.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"../mode/text\").Mode;\nvar PgsqlHighlightRules = require(\"./pgsql_highlight_rules\").PgsqlHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = PgsqlHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"--\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) { \n        if (state == \"start\" || state == \"keyword.statementEnd\") {\n            return \"\";\n        } else {\n            return this.$getIndent(line); // Keep whatever indent the previous line has\n        }\n    };\n\n    this.$id = \"ace/mode/pgsql\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/pgsql_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n// Syntax highlighting for pl/languages and json.\nvar PerlHighlightRules = require(\"./perl_highlight_rules\").PerlHighlightRules;\nvar PythonHighlightRules = require(\"./python_highlight_rules\").PythonHighlightRules;\nvar JsonHighlightRules = require(\"./json_highlight_rules\").JsonHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\n\nvar PgsqlHighlightRules = function() {\n\n    // Keywords, functions, operators last updated for pg 9.3.\n    var keywords = (\n        \"abort|absolute|abstime|access|aclitem|action|add|admin|after|aggregate|all|also|alter|always|\" +\n        \"analyse|analyze|and|any|anyarray|anyelement|anyenum|anynonarray|anyrange|array|as|asc|\" +\n        \"assertion|assignment|asymmetric|at|attribute|authorization|backward|before|begin|between|\" +\n        \"bigint|binary|bit|bool|boolean|both|box|bpchar|by|bytea|cache|called|cascade|cascaded|case|cast|\" +\n        \"catalog|chain|char|character|characteristics|check|checkpoint|cid|cidr|circle|class|close|\" +\n        \"cluster|coalesce|collate|collation|column|comment|comments|commit|committed|concurrently|\" +\n        \"configuration|connection|constraint|constraints|content|continue|conversion|copy|cost|\" +\n        \"create|cross|cstring|csv|current|current_catalog|current_date|current_role|\" +\n        \"current_schema|current_time|current_timestamp|current_user|cursor|cycle|data|database|\" +\n        \"date|daterange|day|deallocate|dec|decimal|declare|default|defaults|deferrable|deferred|\" +\n        \"definer|delete|delimiter|delimiters|desc|dictionary|disable|discard|distinct|do|document|\" +\n        \"domain|double|drop|each|else|enable|encoding|encrypted|end|enum|escape|event|event_trigger|\" +\n        \"except|exclude|excluding|exclusive|execute|exists|explain|extension|external|extract|false|\" +\n        \"family|fdw_handler|fetch|first|float|float4|float8|following|for|force|foreign|forward|\" +\n        \"freeze|from|full|function|functions|global|grant|granted|greatest|group|gtsvector|handler|\" +\n        \"having|header|hold|hour|identity|if|ilike|immediate|immutable|implicit|in|including|\" +\n        \"increment|index|indexes|inet|inherit|inherits|initially|inline|inner|inout|input|\" +\n        \"insensitive|insert|instead|int|int2|int2vector|int4|int4range|int8|int8range|integer|\" +\n        \"internal|intersect|interval|into|invoker|is|isnull|isolation|join|json|key|label|language|\" +\n        \"language_handler|large|last|lateral|lc_collate|lc_ctype|leading|leakproof|least|left|level|\" +\n        \"like|limit|line|listen|load|local|localtime|localtimestamp|location|lock|lseg|macaddr|\" +\n        \"mapping|match|materialized|maxvalue|minute|minvalue|mode|money|month|move|name|names|\" +\n        \"national|natural|nchar|next|no|none|not|nothing|notify|notnull|nowait|null|nullif|nulls|\" +\n        \"numeric|numrange|object|of|off|offset|oid|oids|oidvector|on|only|opaque|operator|option|\" +\n        \"options|or|order|out|outer|over|overlaps|overlay|owned|owner|parser|partial|partition|passing|\" +\n        \"password|path|pg_attribute|pg_auth_members|pg_authid|pg_class|pg_database|pg_node_tree|\" +\n        \"pg_proc|pg_type|placing|plans|point|polygon|position|preceding|precision|prepare|prepared|\" +\n        \"preserve|primary|prior|privileges|procedural|procedure|program|quote|range|read|real|\" +\n        \"reassign|recheck|record|recursive|ref|refcursor|references|refresh|regclass|regconfig|\" +\n        \"regdictionary|regoper|regoperator|regproc|regprocedure|regtype|reindex|relative|release|\" +\n        \"reltime|rename|repeatable|replace|replica|reset|restart|restrict|returning|returns|revoke|\" +\n        \"right|role|rollback|row|rows|rule|savepoint|schema|scroll|search|second|security|select|\" +\n        \"sequence|sequences|serializable|server|session|session_user|set|setof|share|show|similar|\" +\n        \"simple|smallint|smgr|snapshot|some|stable|standalone|start|statement|statistics|stdin|\" +\n        \"stdout|storage|strict|strip|substring|symmetric|sysid|system|table|tables|tablespace|temp|\" +\n        \"template|temporary|text|then|tid|time|timestamp|timestamptz|timetz|tinterval|to|trailing|\" +\n        \"transaction|treat|trigger|trim|true|truncate|trusted|tsquery|tsrange|tstzrange|tsvector|\" +\n        \"txid_snapshot|type|types|unbounded|uncommitted|unencrypted|union|unique|unknown|unlisten|\" +\n        \"unlogged|until|update|user|using|uuid|vacuum|valid|validate|validator|value|values|varbit|\" +\n        \"varchar|variadic|varying|verbose|version|view|void|volatile|when|where|whitespace|window|\" +\n        \"with|without|work|wrapper|write|xid|xml|xmlattributes|xmlconcat|xmlelement|xmlexists|\" +\n        \"xmlforest|xmlparse|xmlpi|xmlroot|xmlserialize|year|yes|zone\"\n    );\n\n\n    var builtinFunctions = (\n        \"RI_FKey_cascade_del|RI_FKey_cascade_upd|RI_FKey_check_ins|RI_FKey_check_upd|\" +\n        \"RI_FKey_noaction_del|RI_FKey_noaction_upd|RI_FKey_restrict_del|RI_FKey_restrict_upd|\" +\n        \"RI_FKey_setdefault_del|RI_FKey_setdefault_upd|RI_FKey_setnull_del|\" +\n        \"RI_FKey_setnull_upd|abbrev|abs|abstime|abstimeeq|abstimege|abstimegt|abstimein|abstimele|\" +\n        \"abstimelt|abstimene|abstimeout|abstimerecv|abstimesend|aclcontains|acldefault|\" +\n        \"aclexplode|aclinsert|aclitemeq|aclitemin|aclitemout|aclremove|acos|age|any_in|any_out|\" +\n        \"anyarray_in|anyarray_out|anyarray_recv|anyarray_send|anyelement_in|anyelement_out|\" +\n        \"anyenum_in|anyenum_out|anynonarray_in|anynonarray_out|anyrange_in|anyrange_out|\" +\n        \"anytextcat|area|areajoinsel|areasel|array_agg|array_agg_finalfn|array_agg_transfn|\" +\n        \"array_append|array_cat|array_dims|array_eq|array_fill|array_ge|array_gt|array_in|\" +\n        \"array_larger|array_le|array_length|array_lower|array_lt|array_ndims|array_ne|array_out|\" +\n        \"array_prepend|array_recv|array_remove|array_replace|array_send|array_smaller|\" +\n        \"array_to_json|array_to_string|array_typanalyze|array_upper|arraycontained|\" +\n        \"arraycontains|arraycontjoinsel|arraycontsel|arrayoverlap|ascii|ascii_to_mic|\" +\n        \"ascii_to_utf8|asin|atan|atan2|avg|big5_to_euc_tw|big5_to_mic|big5_to_utf8|bit_and|bit_in|\" +\n        \"bit_length|bit_or|bit_out|bit_recv|bit_send|bitand|bitcat|bitcmp|biteq|bitge|bitgt|bitle|\" +\n        \"bitlt|bitne|bitnot|bitor|bitshiftleft|bitshiftright|bittypmodin|bittypmodout|bitxor|bool|\" +\n        \"bool_and|bool_or|booland_statefunc|booleq|boolge|boolgt|boolin|boolle|boollt|boolne|\" +\n        \"boolor_statefunc|boolout|boolrecv|boolsend|box|box_above|box_above_eq|box_add|box_below|\" +\n        \"box_below_eq|box_center|box_contain|box_contain_pt|box_contained|box_distance|box_div|\" +\n        \"box_eq|box_ge|box_gt|box_in|box_intersect|box_le|box_left|box_lt|box_mul|box_out|\" +\n        \"box_overabove|box_overbelow|box_overlap|box_overleft|box_overright|box_recv|box_right|\" +\n        \"box_same|box_send|box_sub|bpchar_larger|bpchar_pattern_ge|bpchar_pattern_gt|\" +\n        \"bpchar_pattern_le|bpchar_pattern_lt|bpchar_smaller|bpcharcmp|bpchareq|bpcharge|\" +\n        \"bpchargt|bpchariclike|bpcharicnlike|bpcharicregexeq|bpcharicregexne|bpcharin|bpcharle|\" +\n        \"bpcharlike|bpcharlt|bpcharne|bpcharnlike|bpcharout|bpcharrecv|bpcharregexeq|\" +\n        \"bpcharregexne|bpcharsend|bpchartypmodin|bpchartypmodout|broadcast|btabstimecmp|\" +\n        \"btarraycmp|btbeginscan|btboolcmp|btbpchar_pattern_cmp|btbuild|btbuildempty|\" +\n        \"btbulkdelete|btcanreturn|btcharcmp|btcostestimate|btendscan|btfloat48cmp|btfloat4cmp|\" +\n        \"btfloat4sortsupport|btfloat84cmp|btfloat8cmp|btfloat8sortsupport|btgetbitmap|\" +\n        \"btgettuple|btinsert|btint24cmp|btint28cmp|btint2cmp|btint2sortsupport|btint42cmp|\" +\n        \"btint48cmp|btint4cmp|btint4sortsupport|btint82cmp|btint84cmp|btint8cmp|\" +\n        \"btint8sortsupport|btmarkpos|btnamecmp|btnamesortsupport|btoidcmp|btoidsortsupport|\" +\n        \"btoidvectorcmp|btoptions|btrecordcmp|btreltimecmp|btrescan|btrestrpos|btrim|\" +\n        \"bttext_pattern_cmp|bttextcmp|bttidcmp|bttintervalcmp|btvacuumcleanup|\" +\n        \"bytea_string_agg_finalfn|bytea_string_agg_transfn|byteacat|byteacmp|byteaeq|byteage|\" +\n        \"byteagt|byteain|byteale|bytealike|bytealt|byteane|byteanlike|byteaout|bytearecv|byteasend|\" +\n        \"cash_cmp|cash_div_cash|cash_div_flt4|cash_div_flt8|cash_div_int2|cash_div_int4|cash_eq|\" +\n        \"cash_ge|cash_gt|cash_in|cash_le|cash_lt|cash_mi|cash_mul_flt4|cash_mul_flt8|\" +\n        \"cash_mul_int2|cash_mul_int4|cash_ne|cash_out|cash_pl|cash_recv|cash_send|cash_words|\" +\n        \"cashlarger|cashsmaller|cbrt|ceil|ceiling|center|char|char_length|character_length|chareq|\" +\n        \"charge|chargt|charin|charle|charlt|charne|charout|charrecv|charsend|chr|cideq|cidin|cidout|\" +\n        \"cidr|cidr_in|cidr_out|cidr_recv|cidr_send|cidrecv|cidsend|circle|circle_above|\" +\n        \"circle_add_pt|circle_below|circle_center|circle_contain|circle_contain_pt|\" +\n        \"circle_contained|circle_distance|circle_div_pt|circle_eq|circle_ge|circle_gt|circle_in|\" +\n        \"circle_le|circle_left|circle_lt|circle_mul_pt|circle_ne|circle_out|circle_overabove|\" +\n        \"circle_overbelow|circle_overlap|circle_overleft|circle_overright|circle_recv|\" +\n        \"circle_right|circle_same|circle_send|circle_sub_pt|clock_timestamp|close_lb|close_ls|\" +\n        \"close_lseg|close_pb|close_pl|close_ps|close_sb|close_sl|col_description|concat|concat_ws|\" +\n        \"contjoinsel|contsel|convert|convert_from|convert_to|corr|cos|cot|count|covar_pop|\" +\n        \"covar_samp|cstring_in|cstring_out|cstring_recv|cstring_send|cume_dist|current_database|\" +\n        \"current_query|current_schema|current_schemas|current_setting|current_user|currtid|\" +\n        \"currtid2|currval|cursor_to_xml|cursor_to_xmlschema|database_to_xml|\" +\n        \"database_to_xml_and_xmlschema|database_to_xmlschema|date|date_cmp|date_cmp_timestamp|\" +\n        \"date_cmp_timestamptz|date_eq|date_eq_timestamp|date_eq_timestamptz|date_ge|\" +\n        \"date_ge_timestamp|date_ge_timestamptz|date_gt|date_gt_timestamp|date_gt_timestamptz|\" +\n        \"date_in|date_larger|date_le|date_le_timestamp|date_le_timestamptz|date_lt|\" +\n        \"date_lt_timestamp|date_lt_timestamptz|date_mi|date_mi_interval|date_mii|date_ne|\" +\n        \"date_ne_timestamp|date_ne_timestamptz|date_out|date_part|date_pl_interval|date_pli|\" +\n        \"date_recv|date_send|date_smaller|date_sortsupport|date_trunc|daterange|\" +\n        \"daterange_canonical|daterange_subdiff|datetime_pl|datetimetz_pl|dcbrt|decode|degrees|\" +\n        \"dense_rank|dexp|diagonal|diameter|dispell_init|dispell_lexize|dist_cpoly|dist_lb|dist_pb|\" +\n        \"dist_pc|dist_pl|dist_ppath|dist_ps|dist_sb|dist_sl|div|dlog1|dlog10|domain_in|domain_recv|\" +\n        \"dpow|dround|dsimple_init|dsimple_lexize|dsnowball_init|dsnowball_lexize|dsqrt|\" +\n        \"dsynonym_init|dsynonym_lexize|dtrunc|elem_contained_by_range|encode|enum_cmp|enum_eq|\" +\n        \"enum_first|enum_ge|enum_gt|enum_in|enum_larger|enum_last|enum_le|enum_lt|enum_ne|enum_out|\" +\n        \"enum_range|enum_recv|enum_send|enum_smaller|eqjoinsel|eqsel|euc_cn_to_mic|\" +\n        \"euc_cn_to_utf8|euc_jis_2004_to_shift_jis_2004|euc_jis_2004_to_utf8|euc_jp_to_mic|\" +\n        \"euc_jp_to_sjis|euc_jp_to_utf8|euc_kr_to_mic|euc_kr_to_utf8|euc_tw_to_big5|\" +\n        \"euc_tw_to_mic|euc_tw_to_utf8|event_trigger_in|event_trigger_out|every|exp|factorial|\" +\n        \"family|fdw_handler_in|fdw_handler_out|first_value|float4|float48div|float48eq|float48ge|\" +\n        \"float48gt|float48le|float48lt|float48mi|float48mul|float48ne|float48pl|float4_accum|\" +\n        \"float4abs|float4div|float4eq|float4ge|float4gt|float4in|float4larger|float4le|float4lt|\" +\n        \"float4mi|float4mul|float4ne|float4out|float4pl|float4recv|float4send|float4smaller|\" +\n        \"float4um|float4up|float8|float84div|float84eq|float84ge|float84gt|float84le|float84lt|\" +\n        \"float84mi|float84mul|float84ne|float84pl|float8_accum|float8_avg|float8_corr|\" +\n        \"float8_covar_pop|float8_covar_samp|float8_regr_accum|float8_regr_avgx|\" +\n        \"float8_regr_avgy|float8_regr_intercept|float8_regr_r2|float8_regr_slope|\" +\n        \"float8_regr_sxx|float8_regr_sxy|float8_regr_syy|float8_stddev_pop|float8_stddev_samp|\" +\n        \"float8_var_pop|float8_var_samp|float8abs|float8div|float8eq|float8ge|float8gt|float8in|\" +\n        \"float8larger|float8le|float8lt|float8mi|float8mul|float8ne|float8out|float8pl|float8recv|\" +\n        \"float8send|float8smaller|float8um|float8up|floor|flt4_mul_cash|flt8_mul_cash|\" +\n        \"fmgr_c_validator|fmgr_internal_validator|fmgr_sql_validator|format|format_type|\" +\n        \"gb18030_to_utf8|gbk_to_utf8|generate_series|generate_subscripts|get_bit|get_byte|\" +\n        \"get_current_ts_config|getdatabaseencoding|getpgusername|gin_cmp_prefix|\" +\n        \"gin_cmp_tslexeme|gin_extract_tsquery|gin_extract_tsvector|gin_tsquery_consistent|\" +\n        \"ginarrayconsistent|ginarrayextract|ginbeginscan|ginbuild|ginbuildempty|ginbulkdelete|\" +\n        \"gincostestimate|ginendscan|gingetbitmap|gininsert|ginmarkpos|ginoptions|\" +\n        \"ginqueryarrayextract|ginrescan|ginrestrpos|ginvacuumcleanup|gist_box_compress|\" +\n        \"gist_box_consistent|gist_box_decompress|gist_box_penalty|gist_box_picksplit|\" +\n        \"gist_box_same|gist_box_union|gist_circle_compress|gist_circle_consistent|\" +\n        \"gist_point_compress|gist_point_consistent|gist_point_distance|gist_poly_compress|\" +\n        \"gist_poly_consistent|gistbeginscan|gistbuild|gistbuildempty|gistbulkdelete|\" +\n        \"gistcostestimate|gistendscan|gistgetbitmap|gistgettuple|gistinsert|gistmarkpos|\" +\n        \"gistoptions|gistrescan|gistrestrpos|gistvacuumcleanup|gtsquery_compress|\" +\n        \"gtsquery_consistent|gtsquery_decompress|gtsquery_penalty|gtsquery_picksplit|\" +\n        \"gtsquery_same|gtsquery_union|gtsvector_compress|gtsvector_consistent|\" +\n        \"gtsvector_decompress|gtsvector_penalty|gtsvector_picksplit|gtsvector_same|\" +\n        \"gtsvector_union|gtsvectorin|gtsvectorout|has_any_column_privilege|\" +\n        \"has_column_privilege|has_database_privilege|has_foreign_data_wrapper_privilege|\" +\n        \"has_function_privilege|has_language_privilege|has_schema_privilege|\" +\n        \"has_sequence_privilege|has_server_privilege|has_table_privilege|\" +\n        \"has_tablespace_privilege|has_type_privilege|hash_aclitem|hash_array|hash_numeric|\" +\n        \"hash_range|hashbeginscan|hashbpchar|hashbuild|hashbuildempty|hashbulkdelete|hashchar|\" +\n        \"hashcostestimate|hashendscan|hashenum|hashfloat4|hashfloat8|hashgetbitmap|hashgettuple|\" +\n        \"hashinet|hashinsert|hashint2|hashint2vector|hashint4|hashint8|hashmacaddr|hashmarkpos|\" +\n        \"hashname|hashoid|hashoidvector|hashoptions|hashrescan|hashrestrpos|hashtext|\" +\n        \"hashvacuumcleanup|hashvarlena|height|host|hostmask|iclikejoinsel|iclikesel|\" +\n        \"icnlikejoinsel|icnlikesel|icregexeqjoinsel|icregexeqsel|icregexnejoinsel|icregexnesel|\" +\n        \"inet_client_addr|inet_client_port|inet_in|inet_out|inet_recv|inet_send|\" +\n        \"inet_server_addr|inet_server_port|inetand|inetmi|inetmi_int8|inetnot|inetor|inetpl|\" +\n        \"initcap|int2|int24div|int24eq|int24ge|int24gt|int24le|int24lt|int24mi|int24mul|int24ne|\" +\n        \"int24pl|int28div|int28eq|int28ge|int28gt|int28le|int28lt|int28mi|int28mul|int28ne|int28pl|\" +\n        \"int2_accum|int2_avg_accum|int2_mul_cash|int2_sum|int2abs|int2and|int2div|int2eq|int2ge|\" +\n        \"int2gt|int2in|int2larger|int2le|int2lt|int2mi|int2mod|int2mul|int2ne|int2not|int2or|int2out|\" +\n        \"int2pl|int2recv|int2send|int2shl|int2shr|int2smaller|int2um|int2up|int2vectoreq|\" +\n        \"int2vectorin|int2vectorout|int2vectorrecv|int2vectorsend|int2xor|int4|int42div|int42eq|\" +\n        \"int42ge|int42gt|int42le|int42lt|int42mi|int42mul|int42ne|int42pl|int48div|int48eq|int48ge|\" +\n        \"int48gt|int48le|int48lt|int48mi|int48mul|int48ne|int48pl|int4_accum|int4_avg_accum|\" +\n        \"int4_mul_cash|int4_sum|int4abs|int4and|int4div|int4eq|int4ge|int4gt|int4in|int4inc|\" +\n        \"int4larger|int4le|int4lt|int4mi|int4mod|int4mul|int4ne|int4not|int4or|int4out|int4pl|\" +\n        \"int4range|int4range_canonical|int4range_subdiff|int4recv|int4send|int4shl|int4shr|\" +\n        \"int4smaller|int4um|int4up|int4xor|int8|int82div|int82eq|int82ge|int82gt|int82le|int82lt|\" +\n        \"int82mi|int82mul|int82ne|int82pl|int84div|int84eq|int84ge|int84gt|int84le|int84lt|int84mi|\" +\n        \"int84mul|int84ne|int84pl|int8_accum|int8_avg|int8_avg_accum|int8_sum|int8abs|int8and|\" +\n        \"int8div|int8eq|int8ge|int8gt|int8in|int8inc|int8inc_any|int8inc_float8_float8|int8larger|\" +\n        \"int8le|int8lt|int8mi|int8mod|int8mul|int8ne|int8not|int8or|int8out|int8pl|int8pl_inet|\" +\n        \"int8range|int8range_canonical|int8range_subdiff|int8recv|int8send|int8shl|int8shr|\" +\n        \"int8smaller|int8um|int8up|int8xor|integer_pl_date|inter_lb|inter_sb|inter_sl|internal_in|\" +\n        \"internal_out|interval_accum|interval_avg|interval_cmp|interval_div|interval_eq|\" +\n        \"interval_ge|interval_gt|interval_hash|interval_in|interval_larger|interval_le|\" +\n        \"interval_lt|interval_mi|interval_mul|interval_ne|interval_out|interval_pl|\" +\n        \"interval_pl_date|interval_pl_time|interval_pl_timestamp|interval_pl_timestamptz|\" +\n        \"interval_pl_timetz|interval_recv|interval_send|interval_smaller|interval_transform|\" +\n        \"interval_um|intervaltypmodin|intervaltypmodout|intinterval|isclosed|isempty|isfinite|\" +\n        \"ishorizontal|iso8859_1_to_utf8|iso8859_to_utf8|iso_to_koi8r|iso_to_mic|iso_to_win1251|\" +\n        \"iso_to_win866|isopen|isparallel|isperp|isvertical|johab_to_utf8|json_agg|\" +\n        \"json_agg_finalfn|json_agg_transfn|json_array_element|json_array_element_text|\" +\n        \"json_array_elements|json_array_length|json_each|json_each_text|json_extract_path|\" +\n        \"json_extract_path_op|json_extract_path_text|json_extract_path_text_op|json_in|\" +\n        \"json_object_field|json_object_field_text|json_object_keys|json_out|\" +\n        \"json_populate_record|json_populate_recordset|json_recv|json_send|justify_days|\" +\n        \"justify_hours|justify_interval|koi8r_to_iso|koi8r_to_mic|koi8r_to_utf8|\" +\n        \"koi8r_to_win1251|koi8r_to_win866|koi8u_to_utf8|lag|language_handler_in|\" +\n        \"language_handler_out|last_value|lastval|latin1_to_mic|latin2_to_mic|latin2_to_win1250|\" +\n        \"latin3_to_mic|latin4_to_mic|lead|left|length|like|like_escape|likejoinsel|likesel|line|\" +\n        \"line_distance|line_eq|line_horizontal|line_in|line_interpt|line_intersect|line_out|\" +\n        \"line_parallel|line_perp|line_recv|line_send|line_vertical|ln|lo_close|lo_creat|lo_create|\" +\n        \"lo_export|lo_import|lo_lseek|lo_lseek64|lo_open|lo_tell|lo_tell64|lo_truncate|\" +\n        \"lo_truncate64|lo_unlink|log|loread|lower|lower_inc|lower_inf|lowrite|lpad|lseg|lseg_center|\" +\n        \"lseg_distance|lseg_eq|lseg_ge|lseg_gt|lseg_horizontal|lseg_in|lseg_interpt|\" +\n        \"lseg_intersect|lseg_le|lseg_length|lseg_lt|lseg_ne|lseg_out|lseg_parallel|lseg_perp|\" +\n        \"lseg_recv|lseg_send|lseg_vertical|ltrim|macaddr_and|macaddr_cmp|macaddr_eq|macaddr_ge|\" +\n        \"macaddr_gt|macaddr_in|macaddr_le|macaddr_lt|macaddr_ne|macaddr_not|macaddr_or|\" +\n        \"macaddr_out|macaddr_recv|macaddr_send|makeaclitem|masklen|max|md5|mic_to_ascii|\" +\n        \"mic_to_big5|mic_to_euc_cn|mic_to_euc_jp|mic_to_euc_kr|mic_to_euc_tw|mic_to_iso|\" +\n        \"mic_to_koi8r|mic_to_latin1|mic_to_latin2|mic_to_latin3|mic_to_latin4|mic_to_sjis|\" +\n        \"mic_to_win1250|mic_to_win1251|mic_to_win866|min|mktinterval|mod|money|mul_d_interval|\" +\n        \"name|nameeq|namege|namegt|nameiclike|nameicnlike|nameicregexeq|nameicregexne|namein|\" +\n        \"namele|namelike|namelt|namene|namenlike|nameout|namerecv|nameregexeq|nameregexne|namesend|\" +\n        \"neqjoinsel|neqsel|netmask|network|network_cmp|network_eq|network_ge|network_gt|\" +\n        \"network_le|network_lt|network_ne|network_sub|network_subeq|network_sup|network_supeq|\" +\n        \"nextval|nlikejoinsel|nlikesel|notlike|now|npoints|nth_value|ntile|numeric_abs|\" +\n        \"numeric_accum|numeric_add|numeric_avg|numeric_avg_accum|numeric_cmp|numeric_div|\" +\n        \"numeric_div_trunc|numeric_eq|numeric_exp|numeric_fac|numeric_ge|numeric_gt|numeric_in|\" +\n        \"numeric_inc|numeric_larger|numeric_le|numeric_ln|numeric_log|numeric_lt|numeric_mod|\" +\n        \"numeric_mul|numeric_ne|numeric_out|numeric_power|numeric_recv|numeric_send|\" +\n        \"numeric_smaller|numeric_sqrt|numeric_stddev_pop|numeric_stddev_samp|numeric_sub|\" +\n        \"numeric_transform|numeric_uminus|numeric_uplus|numeric_var_pop|numeric_var_samp|\" +\n        \"numerictypmodin|numerictypmodout|numnode|numrange|numrange_subdiff|obj_description|\" +\n        \"octet_length|oid|oideq|oidge|oidgt|oidin|oidlarger|oidle|oidlt|oidne|oidout|oidrecv|oidsend|\" +\n        \"oidsmaller|oidvectoreq|oidvectorge|oidvectorgt|oidvectorin|oidvectorle|oidvectorlt|\" +\n        \"oidvectorne|oidvectorout|oidvectorrecv|oidvectorsend|oidvectortypes|on_pb|on_pl|\" +\n        \"on_ppath|on_ps|on_sb|on_sl|opaque_in|opaque_out|overlaps|overlay|path|path_add|path_add_pt|\" +\n        \"path_center|path_contain_pt|path_distance|path_div_pt|path_in|path_inter|path_length|\" +\n        \"path_mul_pt|path_n_eq|path_n_ge|path_n_gt|path_n_le|path_n_lt|path_npoints|path_out|\" +\n        \"path_recv|path_send|path_sub_pt|pclose|percent_rank|pg_advisory_lock|\" +\n        \"pg_advisory_lock_shared|pg_advisory_unlock|pg_advisory_unlock_all|\" +\n        \"pg_advisory_unlock_shared|pg_advisory_xact_lock|pg_advisory_xact_lock_shared|\" +\n        \"pg_available_extension_versions|pg_available_extensions|pg_backend_pid|\" +\n        \"pg_backup_start_time|pg_cancel_backend|pg_char_to_encoding|pg_client_encoding|\" +\n        \"pg_collation_for|pg_collation_is_visible|pg_column_is_updatable|pg_column_size|\" +\n        \"pg_conf_load_time|pg_conversion_is_visible|pg_create_restore_point|\" +\n        \"pg_current_xlog_insert_location|pg_current_xlog_location|pg_cursor|pg_database_size|\" +\n        \"pg_describe_object|pg_encoding_max_length|pg_encoding_to_char|\" +\n        \"pg_event_trigger_dropped_objects|pg_export_snapshot|pg_extension_config_dump|\" +\n        \"pg_extension_update_paths|pg_function_is_visible|pg_get_constraintdef|pg_get_expr|\" +\n        \"pg_get_function_arguments|pg_get_function_identity_arguments|\" +\n        \"pg_get_function_result|pg_get_functiondef|pg_get_indexdef|pg_get_keywords|\" +\n        \"pg_get_multixact_members|pg_get_ruledef|pg_get_serial_sequence|pg_get_triggerdef|\" +\n        \"pg_get_userbyid|pg_get_viewdef|pg_has_role|pg_identify_object|pg_indexes_size|\" +\n        \"pg_is_in_backup|pg_is_in_recovery|pg_is_other_temp_schema|pg_is_xlog_replay_paused|\" +\n        \"pg_last_xact_replay_timestamp|pg_last_xlog_receive_location|\" +\n        \"pg_last_xlog_replay_location|pg_listening_channels|pg_lock_status|pg_ls_dir|\" +\n        \"pg_my_temp_schema|pg_node_tree_in|pg_node_tree_out|pg_node_tree_recv|\" +\n        \"pg_node_tree_send|pg_notify|pg_opclass_is_visible|pg_operator_is_visible|\" +\n        \"pg_opfamily_is_visible|pg_options_to_table|pg_postmaster_start_time|\" +\n        \"pg_prepared_statement|pg_prepared_xact|pg_read_binary_file|pg_read_file|\" +\n        \"pg_relation_filenode|pg_relation_filepath|pg_relation_is_updatable|pg_relation_size|\" +\n        \"pg_reload_conf|pg_rotate_logfile|pg_sequence_parameters|pg_show_all_settings|\" +\n        \"pg_size_pretty|pg_sleep|pg_start_backup|pg_stat_clear_snapshot|pg_stat_file|\" +\n        \"pg_stat_get_activity|pg_stat_get_analyze_count|pg_stat_get_autoanalyze_count|\" +\n        \"pg_stat_get_autovacuum_count|pg_stat_get_backend_activity|\" +\n        \"pg_stat_get_backend_activity_start|pg_stat_get_backend_client_addr|\" +\n        \"pg_stat_get_backend_client_port|pg_stat_get_backend_dbid|pg_stat_get_backend_idset|\" +\n        \"pg_stat_get_backend_pid|pg_stat_get_backend_start|pg_stat_get_backend_userid|\" +\n        \"pg_stat_get_backend_waiting|pg_stat_get_backend_xact_start|\" +\n        \"pg_stat_get_bgwriter_buf_written_checkpoints|\" +\n        \"pg_stat_get_bgwriter_buf_written_clean|pg_stat_get_bgwriter_maxwritten_clean|\" +\n        \"pg_stat_get_bgwriter_requested_checkpoints|pg_stat_get_bgwriter_stat_reset_time|\" +\n        \"pg_stat_get_bgwriter_timed_checkpoints|pg_stat_get_blocks_fetched|\" +\n        \"pg_stat_get_blocks_hit|pg_stat_get_buf_alloc|pg_stat_get_buf_fsync_backend|\" +\n        \"pg_stat_get_buf_written_backend|pg_stat_get_checkpoint_sync_time|\" +\n        \"pg_stat_get_checkpoint_write_time|pg_stat_get_db_blk_read_time|\" +\n        \"pg_stat_get_db_blk_write_time|pg_stat_get_db_blocks_fetched|\" +\n        \"pg_stat_get_db_blocks_hit|pg_stat_get_db_conflict_all|\" +\n        \"pg_stat_get_db_conflict_bufferpin|pg_stat_get_db_conflict_lock|\" +\n        \"pg_stat_get_db_conflict_snapshot|pg_stat_get_db_conflict_startup_deadlock|\" +\n        \"pg_stat_get_db_conflict_tablespace|pg_stat_get_db_deadlocks|\" +\n        \"pg_stat_get_db_numbackends|pg_stat_get_db_stat_reset_time|\" +\n        \"pg_stat_get_db_temp_bytes|pg_stat_get_db_temp_files|pg_stat_get_db_tuples_deleted|\" +\n        \"pg_stat_get_db_tuples_fetched|pg_stat_get_db_tuples_inserted|\" +\n        \"pg_stat_get_db_tuples_returned|pg_stat_get_db_tuples_updated|\" +\n        \"pg_stat_get_db_xact_commit|pg_stat_get_db_xact_rollback|pg_stat_get_dead_tuples|\" +\n        \"pg_stat_get_function_calls|pg_stat_get_function_self_time|\" +\n        \"pg_stat_get_function_total_time|pg_stat_get_last_analyze_time|\" +\n        \"pg_stat_get_last_autoanalyze_time|pg_stat_get_last_autovacuum_time|\" +\n        \"pg_stat_get_last_vacuum_time|pg_stat_get_live_tuples|pg_stat_get_numscans|\" +\n        \"pg_stat_get_tuples_deleted|pg_stat_get_tuples_fetched|\" +\n        \"pg_stat_get_tuples_hot_updated|pg_stat_get_tuples_inserted|\" +\n        \"pg_stat_get_tuples_returned|pg_stat_get_tuples_updated|pg_stat_get_vacuum_count|\" +\n        \"pg_stat_get_wal_senders|pg_stat_get_xact_blocks_fetched|\" +\n        \"pg_stat_get_xact_blocks_hit|pg_stat_get_xact_function_calls|\" +\n        \"pg_stat_get_xact_function_self_time|pg_stat_get_xact_function_total_time|\" +\n        \"pg_stat_get_xact_numscans|pg_stat_get_xact_tuples_deleted|\" +\n        \"pg_stat_get_xact_tuples_fetched|pg_stat_get_xact_tuples_hot_updated|\" +\n        \"pg_stat_get_xact_tuples_inserted|pg_stat_get_xact_tuples_returned|\" +\n        \"pg_stat_get_xact_tuples_updated|pg_stat_reset|pg_stat_reset_shared|\" +\n        \"pg_stat_reset_single_function_counters|pg_stat_reset_single_table_counters|\" +\n        \"pg_stop_backup|pg_switch_xlog|pg_table_is_visible|pg_table_size|\" +\n        \"pg_tablespace_databases|pg_tablespace_location|pg_tablespace_size|\" +\n        \"pg_terminate_backend|pg_timezone_abbrevs|pg_timezone_names|pg_total_relation_size|\" +\n        \"pg_trigger_depth|pg_try_advisory_lock|pg_try_advisory_lock_shared|\" +\n        \"pg_try_advisory_xact_lock|pg_try_advisory_xact_lock_shared|pg_ts_config_is_visible|\" +\n        \"pg_ts_dict_is_visible|pg_ts_parser_is_visible|pg_ts_template_is_visible|\" +\n        \"pg_type_is_visible|pg_typeof|pg_xlog_location_diff|pg_xlog_replay_pause|\" +\n        \"pg_xlog_replay_resume|pg_xlogfile_name|pg_xlogfile_name_offset|pi|plainto_tsquery|\" +\n        \"plpgsql_call_handler|plpgsql_inline_handler|plpgsql_validator|point|point_above|\" +\n        \"point_add|point_below|point_distance|point_div|point_eq|point_horiz|point_in|point_left|\" +\n        \"point_mul|point_ne|point_out|point_recv|point_right|point_send|point_sub|point_vert|\" +\n        \"poly_above|poly_below|poly_center|poly_contain|poly_contain_pt|poly_contained|\" +\n        \"poly_distance|poly_in|poly_left|poly_npoints|poly_out|poly_overabove|poly_overbelow|\" +\n        \"poly_overlap|poly_overleft|poly_overright|poly_recv|poly_right|poly_same|poly_send|\" +\n        \"polygon|popen|position|positionjoinsel|positionsel|postgresql_fdw_validator|pow|power|\" +\n        \"prsd_end|prsd_headline|prsd_lextype|prsd_nexttoken|prsd_start|pt_contained_circle|\" +\n        \"pt_contained_poly|query_to_xml|query_to_xml_and_xmlschema|query_to_xmlschema|\" +\n        \"querytree|quote_ident|quote_literal|quote_nullable|radians|radius|random|range_adjacent|\" +\n        \"range_after|range_before|range_cmp|range_contained_by|range_contains|\" +\n        \"range_contains_elem|range_eq|range_ge|range_gist_compress|range_gist_consistent|\" +\n        \"range_gist_decompress|range_gist_penalty|range_gist_picksplit|range_gist_same|\" +\n        \"range_gist_union|range_gt|range_in|range_intersect|range_le|range_lt|range_minus|\" +\n        \"range_ne|range_out|range_overlaps|range_overleft|range_overright|range_recv|range_send|\" +\n        \"range_typanalyze|range_union|rangesel|rank|record_eq|record_ge|record_gt|record_in|\" +\n        \"record_le|record_lt|record_ne|record_out|record_recv|record_send|regclass|regclassin|\" +\n        \"regclassout|regclassrecv|regclasssend|regconfigin|regconfigout|regconfigrecv|\" +\n        \"regconfigsend|regdictionaryin|regdictionaryout|regdictionaryrecv|regdictionarysend|\" +\n        \"regexeqjoinsel|regexeqsel|regexnejoinsel|regexnesel|regexp_matches|regexp_replace|\" +\n        \"regexp_split_to_array|regexp_split_to_table|regoperatorin|regoperatorout|\" +\n        \"regoperatorrecv|regoperatorsend|regoperin|regoperout|regoperrecv|regopersend|\" +\n        \"regprocedurein|regprocedureout|regprocedurerecv|regproceduresend|regprocin|regprocout|\" +\n        \"regprocrecv|regprocsend|regr_avgx|regr_avgy|regr_count|regr_intercept|regr_r2|\" +\n        \"regr_slope|regr_sxx|regr_sxy|regr_syy|regtypein|regtypeout|regtyperecv|regtypesend|\" +\n        \"reltime|reltimeeq|reltimege|reltimegt|reltimein|reltimele|reltimelt|reltimene|reltimeout|\" +\n        \"reltimerecv|reltimesend|repeat|replace|reverse|right|round|row_number|row_to_json|rpad|\" +\n        \"rtrim|scalargtjoinsel|scalargtsel|scalarltjoinsel|scalarltsel|schema_to_xml|\" +\n        \"schema_to_xml_and_xmlschema|schema_to_xmlschema|session_user|set_bit|set_byte|\" +\n        \"set_config|set_masklen|setseed|setval|setweight|shell_in|shell_out|\" +\n        \"shift_jis_2004_to_euc_jis_2004|shift_jis_2004_to_utf8|shobj_description|sign|\" +\n        \"similar_escape|sin|sjis_to_euc_jp|sjis_to_mic|sjis_to_utf8|slope|smgreq|smgrin|smgrne|\" +\n        \"smgrout|spg_kd_choose|spg_kd_config|spg_kd_inner_consistent|spg_kd_picksplit|\" +\n        \"spg_quad_choose|spg_quad_config|spg_quad_inner_consistent|spg_quad_leaf_consistent|\" +\n        \"spg_quad_picksplit|spg_range_quad_choose|spg_range_quad_config|\" +\n        \"spg_range_quad_inner_consistent|spg_range_quad_leaf_consistent|\" +\n        \"spg_range_quad_picksplit|spg_text_choose|spg_text_config|spg_text_inner_consistent|\" +\n        \"spg_text_leaf_consistent|spg_text_picksplit|spgbeginscan|spgbuild|spgbuildempty|\" +\n        \"spgbulkdelete|spgcanreturn|spgcostestimate|spgendscan|spggetbitmap|spggettuple|\" +\n        \"spginsert|spgmarkpos|spgoptions|spgrescan|spgrestrpos|spgvacuumcleanup|split_part|sqrt|\" +\n        \"statement_timestamp|stddev|stddev_pop|stddev_samp|string_agg|string_agg_finalfn|\" +\n        \"string_agg_transfn|string_to_array|strip|strpos|substr|substring|sum|\" +\n        \"suppress_redundant_updates_trigger|table_to_xml|table_to_xml_and_xmlschema|\" +\n        \"table_to_xmlschema|tan|text|text_ge|text_gt|text_larger|text_le|text_lt|text_pattern_ge|\" +\n        \"text_pattern_gt|text_pattern_le|text_pattern_lt|text_smaller|textanycat|textcat|texteq|\" +\n        \"texticlike|texticnlike|texticregexeq|texticregexne|textin|textlen|textlike|textne|\" +\n        \"textnlike|textout|textrecv|textregexeq|textregexne|textsend|thesaurus_init|\" +\n        \"thesaurus_lexize|tideq|tidge|tidgt|tidin|tidlarger|tidle|tidlt|tidne|tidout|tidrecv|tidsend|\" +\n        \"tidsmaller|time_cmp|time_eq|time_ge|time_gt|time_hash|time_in|time_larger|time_le|time_lt|\" +\n        \"time_mi_interval|time_mi_time|time_ne|time_out|time_pl_interval|time_recv|time_send|\" +\n        \"time_smaller|time_transform|timedate_pl|timemi|timenow|timeofday|timepl|timestamp_cmp|\" +\n        \"timestamp_cmp_date|timestamp_cmp_timestamptz|timestamp_eq|timestamp_eq_date|\" +\n        \"timestamp_eq_timestamptz|timestamp_ge|timestamp_ge_date|timestamp_ge_timestamptz|\" +\n        \"timestamp_gt|timestamp_gt_date|timestamp_gt_timestamptz|timestamp_hash|timestamp_in|\" +\n        \"timestamp_larger|timestamp_le|timestamp_le_date|timestamp_le_timestamptz|\" +\n        \"timestamp_lt|timestamp_lt_date|timestamp_lt_timestamptz|timestamp_mi|\" +\n        \"timestamp_mi_interval|timestamp_ne|timestamp_ne_date|timestamp_ne_timestamptz|\" +\n        \"timestamp_out|timestamp_pl_interval|timestamp_recv|timestamp_send|timestamp_smaller|\" +\n        \"timestamp_sortsupport|timestamp_transform|timestamptypmodin|timestamptypmodout|\" +\n        \"timestamptz_cmp|timestamptz_cmp_date|timestamptz_cmp_timestamp|timestamptz_eq|\" +\n        \"timestamptz_eq_date|timestamptz_eq_timestamp|timestamptz_ge|timestamptz_ge_date|\" +\n        \"timestamptz_ge_timestamp|timestamptz_gt|timestamptz_gt_date|\" +\n        \"timestamptz_gt_timestamp|timestamptz_in|timestamptz_larger|timestamptz_le|\" +\n        \"timestamptz_le_date|timestamptz_le_timestamp|timestamptz_lt|timestamptz_lt_date|\" +\n        \"timestamptz_lt_timestamp|timestamptz_mi|timestamptz_mi_interval|timestamptz_ne|\" +\n        \"timestamptz_ne_date|timestamptz_ne_timestamp|timestamptz_out|\" +\n        \"timestamptz_pl_interval|timestamptz_recv|timestamptz_send|timestamptz_smaller|\" +\n        \"timestamptztypmodin|timestamptztypmodout|timetypmodin|timetypmodout|timetz_cmp|\" +\n        \"timetz_eq|timetz_ge|timetz_gt|timetz_hash|timetz_in|timetz_larger|timetz_le|timetz_lt|\" +\n        \"timetz_mi_interval|timetz_ne|timetz_out|timetz_pl_interval|timetz_recv|timetz_send|\" +\n        \"timetz_smaller|timetzdate_pl|timetztypmodin|timetztypmodout|timezone|tinterval|\" +\n        \"tintervalct|tintervalend|tintervaleq|tintervalge|tintervalgt|tintervalin|tintervalle|\" +\n        \"tintervalleneq|tintervallenge|tintervallengt|tintervallenle|tintervallenlt|\" +\n        \"tintervallenne|tintervallt|tintervalne|tintervalout|tintervalov|tintervalrecv|\" +\n        \"tintervalrel|tintervalsame|tintervalsend|tintervalstart|to_ascii|to_char|to_date|to_hex|\" +\n        \"to_json|to_number|to_timestamp|to_tsquery|to_tsvector|transaction_timestamp|translate|\" +\n        \"trigger_in|trigger_out|trunc|ts_debug|ts_headline|ts_lexize|ts_match_qv|ts_match_tq|\" +\n        \"ts_match_tt|ts_match_vq|ts_parse|ts_rank|ts_rank_cd|ts_rewrite|ts_stat|ts_token_type|\" +\n        \"ts_typanalyze|tsmatchjoinsel|tsmatchsel|tsq_mcontained|tsq_mcontains|tsquery_and|\" +\n        \"tsquery_cmp|tsquery_eq|tsquery_ge|tsquery_gt|tsquery_le|tsquery_lt|tsquery_ne|\" +\n        \"tsquery_not|tsquery_or|tsqueryin|tsqueryout|tsqueryrecv|tsquerysend|tsrange|\" +\n        \"tsrange_subdiff|tstzrange|tstzrange_subdiff|tsvector_cmp|tsvector_concat|tsvector_eq|\" +\n        \"tsvector_ge|tsvector_gt|tsvector_le|tsvector_lt|tsvector_ne|tsvector_update_trigger|\" +\n        \"tsvector_update_trigger_column|tsvectorin|tsvectorout|tsvectorrecv|tsvectorsend|\" +\n        \"txid_current|txid_current_snapshot|txid_snapshot_in|txid_snapshot_out|\" +\n        \"txid_snapshot_recv|txid_snapshot_send|txid_snapshot_xip|txid_snapshot_xmax|\" +\n        \"txid_snapshot_xmin|txid_visible_in_snapshot|uhc_to_utf8|unique_key_recheck|unknownin|\" +\n        \"unknownout|unknownrecv|unknownsend|unnest|upper|upper_inc|upper_inf|utf8_to_ascii|\" +\n        \"utf8_to_big5|utf8_to_euc_cn|utf8_to_euc_jis_2004|utf8_to_euc_jp|utf8_to_euc_kr|\" +\n        \"utf8_to_euc_tw|utf8_to_gb18030|utf8_to_gbk|utf8_to_iso8859|utf8_to_iso8859_1|\" +\n        \"utf8_to_johab|utf8_to_koi8r|utf8_to_koi8u|utf8_to_shift_jis_2004|utf8_to_sjis|\" +\n        \"utf8_to_uhc|utf8_to_win|uuid_cmp|uuid_eq|uuid_ge|uuid_gt|uuid_hash|uuid_in|uuid_le|\" +\n        \"uuid_lt|uuid_ne|uuid_out|uuid_recv|uuid_send|var_pop|var_samp|varbit_in|varbit_out|\" +\n        \"varbit_recv|varbit_send|varbit_transform|varbitcmp|varbiteq|varbitge|varbitgt|varbitle|\" +\n        \"varbitlt|varbitne|varbittypmodin|varbittypmodout|varchar_transform|varcharin|\" +\n        \"varcharout|varcharrecv|varcharsend|varchartypmodin|varchartypmodout|variance|version|\" +\n        \"void_in|void_out|void_recv|void_send|width|width_bucket|win1250_to_latin2|\" +\n        \"win1250_to_mic|win1251_to_iso|win1251_to_koi8r|win1251_to_mic|win1251_to_win866|\" +\n        \"win866_to_iso|win866_to_koi8r|win866_to_mic|win866_to_win1251|win_to_utf8|xideq|\" +\n        \"xideqint4|xidin|xidout|xidrecv|xidsend|xml|xml_in|xml_is_well_formed|\" +\n        \"xml_is_well_formed_content|xml_is_well_formed_document|xml_out|xml_recv|xml_send|\" +\n        \"xmlagg|xmlcomment|xmlconcat2|xmlexists|xmlvalidate|xpath|xpath_exists\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": builtinFunctions,\n        \"keyword\": keywords\n    }, \"identifier\", true);\n\n\n    var sqlRules = [{\n            token : \"string\", // single line string -- assume dollar strings if multi-line for now\n            regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n        }, {\n            token : \"variable.language\", // pg identifier\n            regex : '\".*?\"'\n        }, {\n            token : \"constant.numeric\", // float\n            regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_][a-zA-Z0-9_$]*\\\\b\" // TODO - Unicode in identifiers\n        }, {\n            token : \"keyword.operator\",\n            regex : \"!|!!|!~|!~\\\\*|!~~|!~~\\\\*|#|##|#<|#<=|#<>|#=|#>|#>=|%|\\\\&|\\\\&\\\\&|\\\\&<|\\\\&<\\\\||\\\\&>|\\\\*|\\\\+|\" +\n                    \"\\\\-|/|<|<#>|<\\\\->|<<|<<=|<<\\\\||<=|<>|<\\\\?>|<@|<\\\\^|=|>|>=|>>|>>=|>\\\\^|\\\\?#|\\\\?\\\\-|\\\\?\\\\-\\\\||\" +\n                    \"\\\\?\\\\||\\\\?\\\\|\\\\||@|@\\\\-@|@>|@@|@@@|\\\\^|\\\\||\\\\|\\\\&>|\\\\|/|\\\\|>>|\\\\|\\\\||\\\\|\\\\|/|~|~\\\\*|~<=~|~<~|\" +\n                    \"~=|~>=~|~>~|~~|~~\\\\*\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[\\\\(]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\)]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+\"\n        }\n    ];\n\n\n    this.$rules = {\n        \"start\" : [{\n                token : \"comment\",\n                regex : \"--.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi-line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            },{\n                token : \"keyword.statementBegin\",\n                regex : \"[a-zA-Z]+\", // Could enumerate starting keywords but this allows things to work when new statements are added.\n                next : \"statement\"\n            },{\n                token : \"support.buildin\", // psql directive\n                regex : \"^\\\\\\\\[\\\\S]+.*$\"\n            }\n        ],\n\n        \"statement\" : [{\n                token : \"comment\",\n                regex : \"--.*$\"\n            }, {\n                token : \"comment\", // multi-line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"commentStatement\"\n            }, {\n                token : \"statementEnd\",\n                regex : \";\",\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : \"\\\\$perl\\\\$\",\n                next : \"perl-start\"\n            }, {\n                token : \"string\",\n                regex : \"\\\\$python\\\\$\",\n                next : \"python-start\"\n            }, {\n                token : \"string\",\n                regex : \"\\\\$json\\\\$\",\n                next : \"json-start\"\n            }, {\n                token : \"string\",\n                regex : \"\\\\$(js|javascript)\\\\$\",\n                next : \"javascript-start\"\n            }, {\n                token : \"string\",\n                regex : \"\\\\$[\\\\w_0-9]*\\\\$$\", // dollar quote at the end of a line\n                next : \"dollarSql\"\n            }, {\n                token : \"string\",\n                regex : \"\\\\$[\\\\w_0-9]*\\\\$\",\n                next : \"dollarStatementString\"\n            }\n        ].concat(sqlRules),\n\n        \"dollarSql\" : [{\n                token : \"comment\",\n                regex : \"--.*$\"\n            }, {\n                token : \"comment\", // multi-line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"commentDollarSql\"\n            }, {\n                token : \"string\", // end quoting with dollar at the start of a line\n                regex : \"^\\\\$[\\\\w_0-9]*\\\\$\",\n                next : \"statement\"\n            }, {\n                token : \"string\",\n                regex : \"\\\\$[\\\\w_0-9]*\\\\$\",\n                next : \"dollarSqlString\"\n            }\n        ].concat(sqlRules),\n\n        \"comment\" : [{\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ],\n\n        \"commentStatement\" : [{\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"statement\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ],\n\n        \"commentDollarSql\" : [{\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"dollarSql\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ],\n\n        \"dollarStatementString\" : [{\n                token : \"string\", // closing dollarstring\n                regex : \".*?\\\\$[\\\\w_0-9]*\\\\$\",\n                next : \"statement\"\n            }, {\n                token : \"string\", // dollarstring spanning whole line\n                regex : \".+\"\n            }\n        ],\n\n        \"dollarSqlString\" : [{\n                token : \"string\", // closing dollarstring\n                regex : \".*?\\\\$[\\\\w_0-9]*\\\\$\",\n                next : \"dollarSql\"\n            }, {\n                token : \"string\", // dollarstring spanning whole line\n                regex : \".+\"\n            }\n        ]\n    };\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n    this.embedRules(PerlHighlightRules, \"perl-\", [{token : \"string\", regex : \"\\\\$perl\\\\$\", next : \"statement\"}]);\n    this.embedRules(PythonHighlightRules, \"python-\", [{token : \"string\", regex : \"\\\\$python\\\\$\", next : \"statement\"}]);\n    this.embedRules(JsonHighlightRules, \"json-\", [{token : \"string\", regex : \"\\\\$json\\\\$\", next : \"statement\"}]);\n    this.embedRules(JavaScriptHighlightRules, \"javascript-\", [{token : \"string\", regex : \"\\\\$(js|javascript)\\\\$\", next : \"statement\"}]);\n};\n\noop.inherits(PgsqlHighlightRules, TextHighlightRules);\n\nexports.PgsqlHighlightRules = PgsqlHighlightRules;\n});\n\n"
  },
  {
    "path": "lib/ace/mode/php/php.js",
    "content": "/*\n  php.js 0.1.0 <http://phpjs.hertzen.com/>\n  Copyright (c) 2013 Niklas von Hertzen\n\n  Released under MIT License\n\n  This file contains:\n  - [var PHP = {Constants:{}};]\n  - src/modules/tokenizer/constants.js\n  - src/parser/lexer.js\n  - src/parser/parser.js\n  - src/parser/yyn.js\n  - src/parser/yyn_stmt.js\n  - src/parser/yyn_expr.js\n  - src/parser/yyn_scalar.js\n*/\n\n\n\ndefine(function(require, exports, module) {\n\nvar PHP = {Constants:{}};\n\nPHP.Constants.T_INCLUDE = 257;\nPHP.Constants.T_INCLUDE_ONCE = 258;\nPHP.Constants.T_EVAL = 259;\nPHP.Constants.T_REQUIRE = 260;\nPHP.Constants.T_REQUIRE_ONCE = 261;\nPHP.Constants.T_LOGICAL_OR = 262;\nPHP.Constants.T_LOGICAL_XOR = 263;\nPHP.Constants.T_LOGICAL_AND = 264;\nPHP.Constants.T_PRINT = 265;\nPHP.Constants.T_YIELD = 266;\nPHP.Constants.T_DOUBLE_ARROW = 267;\nPHP.Constants.T_YIELD_FROM = 268;\nPHP.Constants.T_PLUS_EQUAL = 269;\nPHP.Constants.T_MINUS_EQUAL = 270;\nPHP.Constants.T_MUL_EQUAL = 271;\nPHP.Constants.T_DIV_EQUAL = 272;\nPHP.Constants.T_CONCAT_EQUAL = 273;\nPHP.Constants.T_MOD_EQUAL = 274;\nPHP.Constants.T_AND_EQUAL = 275;\nPHP.Constants.T_OR_EQUAL = 276;\nPHP.Constants.T_XOR_EQUAL = 277;\nPHP.Constants.T_SL_EQUAL = 278;\nPHP.Constants.T_SR_EQUAL = 279;\nPHP.Constants.T_POW_EQUAL = 280;\nPHP.Constants.T_COALESCE = 281;\nPHP.Constants.T_BOOLEAN_OR = 282;\nPHP.Constants.T_BOOLEAN_AND = 283;\nPHP.Constants.T_IS_EQUAL = 284;\nPHP.Constants.T_IS_NOT_EQUAL = 285;\nPHP.Constants.T_IS_IDENTICAL = 286;\nPHP.Constants.T_IS_NOT_IDENTICAL = 287;\nPHP.Constants.T_SPACESHIP = 288;\nPHP.Constants.T_IS_SMALLER_OR_EQUAL = 289;\nPHP.Constants.T_IS_GREATER_OR_EQUAL = 290;\nPHP.Constants.T_SL = 291;\nPHP.Constants.T_SR = 292;\nPHP.Constants.T_INSTANCEOF = 293;\nPHP.Constants.T_INC = 294;\nPHP.Constants.T_DEC = 295;\nPHP.Constants.T_INT_CAST = 296;\nPHP.Constants.T_DOUBLE_CAST = 297;\nPHP.Constants.T_STRING_CAST = 298;\nPHP.Constants.T_ARRAY_CAST = 299;\nPHP.Constants.T_OBJECT_CAST = 300;\nPHP.Constants.T_BOOL_CAST = 301;\nPHP.Constants.T_UNSET_CAST = 302;\nPHP.Constants.T_POW = 303;\nPHP.Constants.T_NEW = 304;\nPHP.Constants.T_CLONE = 305;\nPHP.Constants.T_EXIT = 306;\nPHP.Constants.T_IF = 307;\nPHP.Constants.T_ELSEIF = 308;\nPHP.Constants.T_ELSE = 309;\nPHP.Constants.T_ENDIF = 310;\nPHP.Constants.T_LNUMBER = 311;\nPHP.Constants.T_DNUMBER = 312;\nPHP.Constants.T_STRING = 313;\nPHP.Constants.T_STRING_VARNAME = 314;\nPHP.Constants.T_VARIABLE = 315;\nPHP.Constants.T_NUM_STRING = 316;\nPHP.Constants.T_INLINE_HTML = 317;\nPHP.Constants.T_CHARACTER = 318;\nPHP.Constants.T_BAD_CHARACTER = 319;\nPHP.Constants.T_ENCAPSED_AND_WHITESPACE = 320;\nPHP.Constants.T_CONSTANT_ENCAPSED_STRING = 321;\nPHP.Constants.T_ECHO = 322;\nPHP.Constants.T_DO = 323;\nPHP.Constants.T_WHILE = 324;\nPHP.Constants.T_ENDWHILE = 325;\nPHP.Constants.T_FOR = 326;\nPHP.Constants.T_ENDFOR = 327;\nPHP.Constants.T_FOREACH = 328;\nPHP.Constants.T_ENDFOREACH = 329;\nPHP.Constants.T_DECLARE = 330;\nPHP.Constants.T_ENDDECLARE = 331;\nPHP.Constants.T_AS = 332;\nPHP.Constants.T_SWITCH = 333;\nPHP.Constants.T_ENDSWITCH = 334;\nPHP.Constants.T_CASE = 335;\nPHP.Constants.T_DEFAULT = 336;\nPHP.Constants.T_BREAK = 337;\nPHP.Constants.T_CONTINUE = 338;\nPHP.Constants.T_GOTO = 339;\nPHP.Constants.T_FUNCTION = 340;\nPHP.Constants.T_CONST = 341;\nPHP.Constants.T_RETURN = 342;\nPHP.Constants.T_TRY = 343;\nPHP.Constants.T_CATCH = 344;\nPHP.Constants.T_FINALLY = 345;\nPHP.Constants.T_THROW = 346;\nPHP.Constants.T_USE = 347;\nPHP.Constants.T_INSTEADOF = 348;\nPHP.Constants.T_GLOBAL = 349;\nPHP.Constants.T_STATIC = 350;\nPHP.Constants.T_ABSTRACT = 351;\nPHP.Constants.T_FINAL = 352;\nPHP.Constants.T_PRIVATE = 353;\nPHP.Constants.T_PROTECTED = 354;\nPHP.Constants.T_PUBLIC = 355;\nPHP.Constants.T_VAR = 356;\nPHP.Constants.T_UNSET = 357;\nPHP.Constants.T_ISSET = 358;\nPHP.Constants.T_EMPTY = 359;\nPHP.Constants.T_HALT_COMPILER = 360;\nPHP.Constants.T_CLASS = 361;\nPHP.Constants.T_TRAIT = 362;\nPHP.Constants.T_INTERFACE = 363;\nPHP.Constants.T_EXTENDS = 364;\nPHP.Constants.T_IMPLEMENTS = 365;\nPHP.Constants.T_OBJECT_OPERATOR = 366;\nPHP.Constants.T_LIST = 367;\nPHP.Constants.T_ARRAY = 368;\nPHP.Constants.T_CALLABLE = 369;\nPHP.Constants.T_CLASS_C = 370;\nPHP.Constants.T_TRAIT_C = 371;\nPHP.Constants.T_METHOD_C = 372;\nPHP.Constants.T_FUNC_C = 373;\nPHP.Constants.T_LINE = 374;\nPHP.Constants.T_FILE = 375;\nPHP.Constants.T_COMMENT = 376;\nPHP.Constants.T_DOC_COMMENT = 377;\nPHP.Constants.T_OPEN_TAG = 378;\nPHP.Constants.T_OPEN_TAG_WITH_ECHO = 379;\nPHP.Constants.T_CLOSE_TAG = 380;\nPHP.Constants.T_WHITESPACE = 381;\nPHP.Constants.T_START_HEREDOC = 382;\nPHP.Constants.T_END_HEREDOC = 383;\nPHP.Constants.T_DOLLAR_OPEN_CURLY_BRACES = 384;\nPHP.Constants.T_CURLY_OPEN = 385;\nPHP.Constants.T_PAAMAYIM_NEKUDOTAYIM = 386;\nPHP.Constants.T_NAMESPACE = 387;\nPHP.Constants.T_NS_C = 388;\nPHP.Constants.T_DIR = 389;\nPHP.Constants.T_NS_SEPARATOR = 390;\nPHP.Constants.T_ELLIPSIS = 391;\n\nPHP.Lexer = function(src, ini) {\n    var heredoc, heredocEndAllowed,\n\n    stateStack = ['INITIAL'], stackPos = 0,\n    swapState = function(state) {\n        stateStack[stackPos] = state;\n    },\n    pushState = function(state) {\n        stateStack[++stackPos] = state;\n    },\n    popState = function() {\n        --stackPos;\n    },\n\n    shortOpenTag = ini === undefined || /^(on|true|1)$/i.test(ini.short_open_tag),\n    openTag = shortOpenTag\n        ? /^(\\<\\?php(?:\\r\\n|[ \\t\\r\\n])|<\\?|\\<script language\\=('|\")?php('|\")?\\>)/i\n        : /^(\\<\\?php(?:\\r\\n|[ \\t\\r\\n])|\\<script language\\=('|\")?php('|\")?\\>)/i,\n    inlineHtml = shortOpenTag\n        ? /[^<]*(?:<(?!\\?|script language\\=('|\")?php('|\")?\\>)[^<]*)*/i\n        : /[^<]*(?:<(?!\\?=|\\?php[ \\t\\r\\n]|script language\\=('|\")?php('|\")?\\>)[^<]*)*/i,\n    labelRegexPart = '[a-zA-Z_\\\\x7f-\\\\uffff][a-zA-Z0-9_\\\\x7f-\\\\uffff]*',\n    stringRegexPart = function(quote) {\n        // Matches non-interpolated portion of interpolated string\n        return '[^' + quote + '\\\\\\\\${]*(?:(?:\\\\\\\\[\\\\s\\\\S]|\\\\$(?!\\\\{|[a-zA-Z_\\\\x7f-\\\\uffff])|\\\\{(?!\\\\$))[^' + quote + '\\\\\\\\${]*)*';\n    },\n\n    sharedStringTokens = [\n        {\n            value: PHP.Constants.T_VARIABLE,\n            re: new RegExp('^\\\\$' + labelRegexPart + '(?=\\\\[)'),\n            func: function() {\n                pushState('VAR_OFFSET');\n            }\n        },\n        {\n            value: PHP.Constants.T_VARIABLE,\n            re: new RegExp('^\\\\$' + labelRegexPart + '(?=->' + labelRegexPart + ')'),\n            func: function() {\n                pushState('LOOKING_FOR_PROPERTY');\n            }\n        },\n        {\n            value: PHP.Constants.T_DOLLAR_OPEN_CURLY_BRACES,\n            re: new RegExp('^\\\\$\\\\{(?=' + labelRegexPart + '[\\\\[}])'),\n            func: function() {\n                pushState('LOOKING_FOR_VARNAME');\n            }\n        },\n        {\n            value: PHP.Constants.T_VARIABLE,\n            re: new RegExp('^\\\\$' + labelRegexPart)\n        },\n        {\n            value: PHP.Constants.T_DOLLAR_OPEN_CURLY_BRACES,\n            re: /^\\$\\{/,\n            func: function() {\n                pushState('IN_SCRIPTING');\n            }\n        },\n        {\n            value: PHP.Constants.T_CURLY_OPEN,\n            re: /^\\{(?=\\$)/,\n            func: function() {\n                pushState('IN_SCRIPTING');\n            }\n        }\n    ],\n    data = {\n        // Outside of PHP\n        'INITIAL': [\n            {\n                value: PHP.Constants.T_OPEN_TAG_WITH_ECHO,\n                re: /^<\\?=/i,\n                func: function() {\n                    swapState('IN_SCRIPTING');\n                }\n            },\n            {\n                value: PHP.Constants.T_OPEN_TAG,\n                re: openTag,\n                func: function() {\n                    swapState('IN_SCRIPTING');\n                }\n            },\n            {\n                value: PHP.Constants.T_INLINE_HTML,\n                re: inlineHtml\n            },\n        ],\n        // In normal PHP code\n        'IN_SCRIPTING': [\n            // Match whitespace first\n            {\n                value: PHP.Constants.T_WHITESPACE,\n                re: /^[ \\n\\r\\t]+/\n            },\n\n\t\t\t// Keywords, sorted alphabetically\n            {\n                value: PHP.Constants.T_ABSTRACT,\n                re: /^abstract\\b/i\n            },\n            {\n                value: PHP.Constants.T_LOGICAL_AND,\n                re: /^and\\b/i\n            },\n            {\n                value: PHP.Constants.T_ARRAY,\n                re: /^array\\b/i\n            },\n            {\n                value: PHP.Constants.T_AS,\n                re: /^as\\b/i\n            },\n            {\n                value: PHP.Constants.T_BREAK,\n                re: /^break\\b/i\n            },\n            {\n                value: PHP.Constants.T_CALLABLE,\n                re: /^callable\\b/i\n            },\n            {\n                value: PHP.Constants.T_CASE,\n                re: /^case\\b/i\n            },\n            {\n                value: PHP.Constants.T_CATCH,\n                re: /^catch\\b/i\n            },\n            {\n                value: PHP.Constants.T_CLASS,\n                re: /^class\\b/i,\n            },\n            {\n                value: PHP.Constants.T_CLONE,\n                re: /^clone\\b/i\n            },\n            {\n                value: PHP.Constants.T_CONST,\n                re: /^const\\b/i\n            },\n            {\n                value: PHP.Constants.T_CONTINUE,\n                re: /^continue\\b/i\n            },\n            {\n                value: PHP.Constants.T_DECLARE,\n                re: /^declare\\b/i\n            },\n            {\n                value: PHP.Constants.T_DEFAULT,\n                re: /^default\\b/i\n            },\n            {\n                value: PHP.Constants.T_DO,\n                re: /^do\\b/i\n            },\n            {\n                value: PHP.Constants.T_ECHO,\n                re: /^echo\\b/i\n            },\n            {\n                value: PHP.Constants.T_ELSE,\n                re: /^else\\b/i\n            },\n            {\n                value: PHP.Constants.T_ELSEIF,\n                re: /^elseif\\b/i\n            },\n            {\n                value: PHP.Constants.T_ENDDECLARE,\n                re: /^enddeclare\\b/i\n            },\n            {\n                value: PHP.Constants.T_ENDFOR,\n                re: /^endfor\\b/i\n            },\n            {\n                value: PHP.Constants.T_ENDFOREACH,\n                re: /^endforeach\\b/i\n            },\n            {\n                value: PHP.Constants.T_ENDIF,\n                re: /^endif\\b/i\n            },\n            {\n                value: PHP.Constants.T_ENDSWITCH,\n                re: /^endswitch\\b/i\n            },\n            {\n                value: PHP.Constants.T_ENDWHILE,\n                re: /^endwhile\\b/i\n            },\n            {\n                value: PHP.Constants.T_EMPTY,\n                re: /^empty\\b/i\n            },\n            {\n                value: PHP.Constants.T_EVAL,\n                re: /^eval\\b/i\n            },\n            {\n                value: PHP.Constants.T_EXIT,\n                re: /^(?:exit|die)\\b/i\n            },\n            {\n                value: PHP.Constants.T_EXTENDS,\n                re: /^extends\\b/i\n            },\n            {\n                value: PHP.Constants.T_FINAL,\n                re: /^final\\b/i\n            },\n            {\n                value: PHP.Constants.T_FINALLY,\n                re: /^finally\\b/i\n            },\n            {\n                value: PHP.Constants.T_FOR,\n                re: /^for\\b/i\n            },\n            {\n                value: PHP.Constants.T_FOREACH,\n                re: /^foreach\\b/i\n            },\n            {\n                value: PHP.Constants.T_FUNCTION,\n                re: /^function\\b/i\n            },\n            {\n                value: PHP.Constants.T_GLOBAL,\n                re: /^global\\b/i\n            },\n            {\n                value: PHP.Constants.T_GOTO,\n                re: /^goto\\b/i\n            },\n            {\n                value: PHP.Constants.T_IF,\n                re: /^if\\b/i\n            },\n            {\n                value: PHP.Constants.T_IMPLEMENTS,\n                re: /^implements\\b/i\n            },\n            {\n                value: PHP.Constants.T_INCLUDE,\n                re: /^include\\b/i\n            },\n            {\n                value: PHP.Constants.T_INCLUDE_ONCE,\n                re: /^include_once\\b/i\n            },\n            {\n                value: PHP.Constants.T_INSTANCEOF,\n                re: /^instanceof\\b/i\n            },\n            {\n                value: PHP.Constants.T_INSTEADOF,\n                re: /^insteadof\\b/i\n            },\n            {\n                value: PHP.Constants.T_INTERFACE,\n                re: /^interface\\b/i\n            },\n            {\n                value: PHP.Constants.T_ISSET,\n                re: /^isset\\b/i\n            },\n            {\n                value: PHP.Constants.T_LIST,\n                re: /^list\\b/i\n            },\n            {\n                value: PHP.Constants.T_NAMESPACE,\n                re: /^namespace\\b/i\n            },\n            {\n                value: PHP.Constants.T_NEW,\n                re: /^new\\b/i\n            },\n            {\n                value: PHP.Constants.T_LOGICAL_OR,\n                re: /^or\\b/i\n            },\n            {\n                value: PHP.Constants.T_PRINT,\n                re: /^print\\b/i\n            },\n            {\n                value: PHP.Constants.T_PRIVATE,\n                re: /^private\\b/i\n            },\n            {\n                value: PHP.Constants.T_PROTECTED,\n                re: /^protected\\b/i\n            },\n            {\n                value: PHP.Constants.T_PUBLIC,\n                re: /^public\\b/i\n            },\n            {\n                value: PHP.Constants.T_REQUIRE,\n                re: /^require\\b/i\n            },\n            {\n                value: PHP.Constants.T_REQUIRE_ONCE,\n                re: /^require_once\\b/i\n            },\n            {\n                value: PHP.Constants.T_STATIC,\n                re: /^static\\b/i\n            },\n            {\n                value: PHP.Constants.T_SWITCH,\n                re: /^switch\\b/i\n            },\n            {\n                value: PHP.Constants.T_THROW,\n                re: /^throw\\b/i\n            },\n            {\n                value: PHP.Constants.T_TRAIT,\n                re: /^trait\\b/i,\n            },\n            {\n                value: PHP.Constants.T_TRY,\n                re: /^try\\b/i\n            },\n            {\n                value: PHP.Constants.T_UNSET,\n                re: /^unset\\b/i\n            },\n            {\n                value: PHP.Constants.T_USE,\n                re: /^use\\b/i\n            },\n            {\n                value: PHP.Constants.T_VAR,\n                re: /^var\\b/i\n            },\n            {\n                value: PHP.Constants.T_WHILE,\n                re: /^while\\b/i\n            },\n            {\n                value: PHP.Constants.T_LOGICAL_XOR,\n                re: /^xor\\b/i\n            },\n            {\n                value: PHP.Constants.T_YIELD_FROM,\n                re: /^yield\\s+from\\b/i\n            },\n            {\n                value: PHP.Constants.T_YIELD,\n                re: /^yield\\b/i\n            },\n            {\n                value: PHP.Constants.T_RETURN,\n                re: /^return\\b/i\n            },\n            {\n                value: PHP.Constants.T_METHOD_C,\n                re: /^__METHOD__\\b/i\n            },\n            {\n                value: PHP.Constants.T_LINE,\n                re: /^__LINE__\\b/i\n            },\n            {\n                value: PHP.Constants.T_FILE,\n                re: /^__FILE__\\b/i\n            },\n            {\n                value: PHP.Constants.T_FUNC_C,\n                re: /^__FUNCTION__\\b/i\n            },\n            {\n                value: PHP.Constants.T_NS_C,\n                re: /^__NAMESPACE__\\b/i\n            },\n            {\n                value: PHP.Constants.T_TRAIT_C,\n                re: /^__TRAIT__\\b/i\n            },\n            {\n                value: PHP.Constants.T_DIR,\n                re: /^__DIR__\\b/i\n            },\n            {\n                value: PHP.Constants.T_CLASS_C,\n                re: /^__CLASS__\\b/i\n            },\n\t\t\t\n            // Other tokens\n            {\n                value: PHP.Constants.T_AND_EQUAL,\n                re: /^&=/\n            },\n            {\n                value: PHP.Constants.T_ARRAY_CAST,\n                re: /^\\([ \\t]*array[ \\t]*\\)/i\n            },\n            {\n                value: PHP.Constants.T_BOOL_CAST,\n                re: /^\\([ \\t]*(?:bool|boolean)[ \\t]*\\)/i\n            },\n            {\n                value: PHP.Constants.T_DOUBLE_CAST,\n                re: /^\\([ \\t]*(?:real|float|double)[ \\t]*\\)/i\n            },\n            {\n                value: PHP.Constants.T_INT_CAST,\n                re: /^\\([ \\t]*(?:int|integer)[ \\t]*\\)/i\n            },\n            {\n                value: PHP.Constants.T_OBJECT_CAST,\n                re: /^\\([ \\t]*object[ \\t]*\\)/i\n            },\n            {\n                value: PHP.Constants.T_STRING_CAST,\n                re: /^\\([ \\t]*(?:binary|string)[ \\t]*\\)/i\n            },\n            {\n                value: PHP.Constants.T_UNSET_CAST,\n                re: /^\\([ \\t]*unset[ \\t]*\\)/i\n            },\n            {\n                value: PHP.Constants.T_BOOLEAN_AND,\n                re: /^&&/\n            },\n            {\n                value: PHP.Constants.T_BOOLEAN_OR,\n                re: /^\\|\\|/\n            },\n            {\n                value: PHP.Constants.T_CLOSE_TAG,\n                re: /^(?:\\?>|<\\/script>)(\\r\\n|\\r|\\n)?/i,\n                func: function() {\n                    swapState('INITIAL');\n                }\n            },\n            {\n                value: PHP.Constants.T_DOUBLE_ARROW,\n                re: /^=>/\n            },\n            {\n                value: PHP.Constants.T_PAAMAYIM_NEKUDOTAYIM,\n                re: /^::/\n            },\n            {\n                value: PHP.Constants.T_INC,\n                re: /^\\+\\+/\n            },\n            {\n                value: PHP.Constants.T_DEC,\n                re: /^--/\n            },\n            {\n                value: PHP.Constants.T_CONCAT_EQUAL,\n                re: /^\\.=/\n            },\n            {\n                value: PHP.Constants.T_DIV_EQUAL,\n                re: /^\\/=/\n            },\n            {\n                value: PHP.Constants.T_XOR_EQUAL,\n                re: /^\\^=/\n            },\n            {\n                value: PHP.Constants.T_MUL_EQUAL,\n                re: /^\\*=/\n            },\n            {\n                value: PHP.Constants.T_MOD_EQUAL,\n                re: /^%=/\n            },\n            {\n                value: PHP.Constants.T_SL_EQUAL,\n                re: /^<<=/\n            },\n            {\n                value: PHP.Constants.T_START_HEREDOC,\n                re: new RegExp('^[bB]?<<<[ \\\\t]*\\'(' + labelRegexPart + ')\\'(?:\\\\r\\\\n|\\\\r|\\\\n)'),\n                func: function(result) {\n                    heredoc = result[1];\n                    swapState('NOWDOC');\n                }\n            },\n            {\n                value: PHP.Constants.T_START_HEREDOC,\n                re: new RegExp('^[bB]?<<<[ \\\\t]*(\"?)(' + labelRegexPart + ')\\\\1(?:\\\\r\\\\n|\\\\r|\\\\n)'),\n                func: function(result) {\n                    heredoc = result[2];\n                    heredocEndAllowed = true;\n                    swapState('HEREDOC');\n                }\n            },\n            {\n                value: PHP.Constants.T_SL,\n                re: /^<</\n            },\n            {\n                value: PHP.Constants.T_SPACESHIP,\n                re: /^<=>/\n            },\n            {\n                value: PHP.Constants.T_IS_SMALLER_OR_EQUAL,\n                re: /^<=/\n            },\n            {\n                value: PHP.Constants.T_SR_EQUAL,\n                re: /^>>=/\n            },\n            {\n                value: PHP.Constants.T_SR,\n                re: /^>>/\n            },\n            {\n                value: PHP.Constants.T_IS_GREATER_OR_EQUAL,\n                re: /^>=/\n            },\n            {\n                value: PHP.Constants.T_OR_EQUAL,\n                re: /^\\|=/\n            },\n            {\n                value: PHP.Constants.T_PLUS_EQUAL,\n                re: /^\\+=/\n            },\n            {\n                value: PHP.Constants.T_MINUS_EQUAL,\n                re: /^-=/\n            },\n            {\n                value: PHP.Constants.T_OBJECT_OPERATOR,\n                re: new RegExp('^->(?=[ \\n\\r\\t]*' + labelRegexPart + ')'),\n                func: function() {\n                    pushState('LOOKING_FOR_PROPERTY');\n                }\n            },\n            {\n                value: PHP.Constants.T_OBJECT_OPERATOR,\n                re: /^->/i\n            },\n            {\n                value: PHP.Constants.T_ELLIPSIS,\n                re: /^\\.\\.\\./\n            },\n            {\n                value: PHP.Constants.T_POW_EQUAL,\n                re: /^\\*\\*=/\n            },\n            {\n                value: PHP.Constants.T_POW,\n                re: /^\\*\\*/\n            },\n            {\n                value: PHP.Constants.T_COALESCE,\n                re: /^\\?\\?/\n            },\n            {\n                value: PHP.Constants.T_COMMENT,\n                re: /^\\/\\*([\\S\\s]*?)(?:\\*\\/|$)/\n            },\n            {\n                value: PHP.Constants.T_COMMENT,\n                re: /^(?:\\/\\/|#)[^\\r\\n?]*(?:\\?(?!>)[^\\r\\n?]*)*(?:\\r\\n|\\r|\\n)?/\n            },\n            {\n                value: PHP.Constants.T_IS_IDENTICAL,\n                re: /^===/\n            },\n            {\n                value: PHP.Constants.T_IS_EQUAL,\n                re: /^==/\n            },\n            {\n                value: PHP.Constants.T_IS_NOT_IDENTICAL,\n                re: /^!==/\n            },\n            {\n                value: PHP.Constants.T_IS_NOT_EQUAL,\n                re: /^(!=|<>)/\n            },\n            {\n                value: PHP.Constants.T_DNUMBER,\n                re: /^(?:[0-9]+\\.[0-9]*|\\.[0-9]+)(?:[eE][+-]?[0-9]+)?/\n            },\n            {\n                value: PHP.Constants.T_DNUMBER,\n                re: /^[0-9]+[eE][+-]?[0-9]+/\n            },\n            {\n                value: PHP.Constants.T_LNUMBER,\n                re: /^(?:0x[0-9A-F]+|0b[01]+|[0-9]+)/i\n            },\n            {\n                value: PHP.Constants.T_VARIABLE,\n                re: new RegExp('^\\\\$' + labelRegexPart)\n            },\n            {\n                value: PHP.Constants.T_CONSTANT_ENCAPSED_STRING,\n                re: /^[bB]?'[^'\\\\]*(?:\\\\[\\s\\S][^'\\\\]*)*'/,\n            },\n            {\n                value: PHP.Constants.T_CONSTANT_ENCAPSED_STRING,\n                re: new RegExp('^[bB]?\"' + stringRegexPart('\"') + '\"')\n            },\n            {\n                value: -1,\n                re: /^[bB]?\"/,\n                func: function() {\n                    swapState('DOUBLE_QUOTES');\n                }\n            },\n            {\n                value: -1,\n                re: /^`/,\n                func: function() {\n                    swapState('BACKTICKS');\n                }\n            },\n            {\n                value: PHP.Constants.T_NS_SEPARATOR,\n                re: /^\\\\/\n            },\n            {\n                value: PHP.Constants.T_STRING,\n                re: /^[a-zA-Z_\\x7f-\\uffff][a-zA-Z0-9_\\x7f-\\uffff]*/\n            },\n            {\n                value: -1,\n                re: /^\\{/,\n                func: function() {\n                    pushState('IN_SCRIPTING');\n                }\n            },\n            {\n                value: -1,\n                re: /^\\}/,\n                func: function() {\n                    if (stackPos > 0) {\n                        popState();\n                    }\n                }\n            },\n            {\n                value: -1,\n                re: /^[\\[\\];:?()!.,><=+-/*|&@^%\"'$~]/\n            }\n        ],\n        'DOUBLE_QUOTES': sharedStringTokens.concat([\n            {\n                value: -1,\n                re: /^\"/,\n                func: function() {\n                    swapState('IN_SCRIPTING');\n                }\n            },\n            {\n                value: PHP.Constants.T_ENCAPSED_AND_WHITESPACE,\n                re: new RegExp('^' + stringRegexPart('\"'))\n            }\n        ]),\n        'BACKTICKS': sharedStringTokens.concat([\n            {\n                value: -1,\n                re: /^`/,\n                func: function() {\n                    swapState('IN_SCRIPTING');\n                }\n            },\n            {\n                value: PHP.Constants.T_ENCAPSED_AND_WHITESPACE,\n                re: new RegExp('^' + stringRegexPart('`'))\n            }\n        ]),\n        'VAR_OFFSET': [\n            {\n                value: -1,\n                re: /^\\]/,\n                func: function() {\n                    popState();\n                }\n            },\n            {\n                value: PHP.Constants.T_NUM_STRING,\n                re: /^(?:0x[0-9A-F]+|0b[01]+|[0-9]+)/i\n            },\n            {\n                value: PHP.Constants.T_VARIABLE,\n                re: new RegExp('^\\\\$' + labelRegexPart)\n            },\n            {\n                value: PHP.Constants.T_STRING,\n                re: new RegExp('^' + labelRegexPart)\n            },\n            {\n                value: -1,\n                re: /^[;:,.\\[()|^&+-/*=%!~$<>?@{}\"`]/\n            }\n        ],\n        'LOOKING_FOR_PROPERTY': [\n            {\n                value: PHP.Constants.T_OBJECT_OPERATOR,\n                re: /^->/\n            },\n            {\n                value: PHP.Constants.T_STRING,\n                re: new RegExp('^' + labelRegexPart),\n                func: function() {\n                    popState();\n                }\n            },\n            {\n                value: PHP.Constants.T_WHITESPACE,\n                re: /^[ \\n\\r\\t]+/\n            }\n        ],\n        'LOOKING_FOR_VARNAME': [\n            {\n                value: PHP.Constants.T_STRING_VARNAME,\n                re: new RegExp('^' + labelRegexPart + '(?=[\\\\[}])'),\n                func: function() {\n                    swapState('IN_SCRIPTING');\n                }\n            }\n        ],\n        'NOWDOC': [\n            {\n                value: PHP.Constants.T_END_HEREDOC,\n                matchFunc: function(src) {\n                    var re = new RegExp('^' + heredoc + '(?=;?[\\\\r\\\\n])');\n                    if (src.match(re)) {\n                        return [src.substr(0, heredoc.length)];\n                    } else {\n                        return null;\n                    }\n                },\n                func: function() {\n                    swapState('IN_SCRIPTING');\n                }\n            },\n            {\n                value: PHP.Constants.T_ENCAPSED_AND_WHITESPACE,\n                matchFunc: function(src) {\n                    var re = new RegExp('[\\\\r\\\\n]' + heredoc + '(?=;?[\\\\r\\\\n])');\n                    var result = re.exec(src);\n                    var end = result ? result.index + 1 : src.length;\n                    return [src.substring(0, end)];\n                }\n            }\n        ],\n        'HEREDOC': sharedStringTokens.concat([\n            {\n                value: PHP.Constants.T_END_HEREDOC,\n                matchFunc: function(src) {\n                    if (!heredocEndAllowed) {\n                        return null;\n                    }\n                    var re = new RegExp('^' + heredoc + '(?=;?[\\\\r\\\\n])');\n                    if (src.match(re)) {\n                        return [src.substr(0, heredoc.length)];\n                    } else {\n                        return null;\n                    }\n                },\n                func: function() {\n                    swapState('IN_SCRIPTING');\n                }\n            },\n            {\n                value: PHP.Constants.T_ENCAPSED_AND_WHITESPACE,\n                matchFunc: function(src) {\n                    var end = src.length;\n                    // Find next interpolation\n                    var re = new RegExp('^' + stringRegexPart(''));\n                    var result = re.exec(src);\n                    if (result) {\n                        end = result[0].length;\n                    }\n                    // Find heredoc end\n                    re = new RegExp('([\\\\r\\\\n])' + heredoc + '(?=;?[\\\\r\\\\n])');\n                    result = re.exec(src.substring(0, end));\n                    if (result) {\n                        end = result.index + 1;\n                        heredocEndAllowed = true;\n                    } else {\n                        heredocEndAllowed = false;\n                    }\n                    if (end == 0) {\n                        return null;\n                    }\n                    return [src.substring(0, end)];\n                }\n            }\n        ])\n    };\n\n    var results = [],\n    line = 1,\n    cancel = true;\n\n    if (src === null) {\n        return results;\n    }\n\n    if (typeof src !== \"string\") {\n        src = src.toString();\n    }\n\n    while (src.length > 0 && cancel === true) {\n        var state = stateStack[stackPos];\n        var tokens = data[state];\n        cancel = tokens.some(function(token){\n            var result = token.matchFunc !== undefined\n                ? token.matchFunc(src)\n                : src.match(token.re);\n            if (result !== null) {\n                if (result[0].length == 0) {\n                    // Error in the lexer definition, prevent infinite loop\n                    throw new Error(\"empty match\");\n                }\n\n                if (token.func !== undefined) {\n                    token.func(result);\n                }\n\n                if (token.value === -1) {\n                    // character token\n                    results.push(result[0]);\n                } else {\n                    var resultString = result[0];\n                    results.push([\n                        parseInt(token.value, 10),\n                        resultString,\n                        line\n                        ]);\n                    line += resultString.split('\\n').length - 1;\n                }\n\n                src = src.substring(result[0].length);\n\n                return true;\n            }\n            return false;\n        });\n    }\n\n    return results;\n};\n\n/*\n * @author Niklas von Hertzen <niklas at hertzen.com>\n * @created 15.6.2012\n * @website http://hertzen.com\n */\n\n/*\n * The skeleton for this parser was written by Moriyoshi Koizumi and is based on\n * the work by Masato Bito and is in the PUBLIC DOMAIN.\n * Ported to JavaScript by Niklas von Hertzen\n */\n\n\nPHP.Parser = function ( preprocessedTokens, eval ) {\n\n    var yybase = this.yybase,\n    yydefault = this.yydefault,\n    yycheck = this.yycheck,\n    yyaction = this.yyaction,\n    yylen = this.yylen,\n    yygbase = this.yygbase,\n    yygcheck = this.yygcheck,\n    yyp = this.yyp,\n    yygoto = this.yygoto,\n    yylhs = this.yylhs,\n    terminals = this.terminals,\n    translate = this.translate,\n    yygdefault = this.yygdefault;\n\n\n    this.pos = -1;\n    this.line = 1;\n\n    this.tokenMap = this.createTokenMap( );\n\n    this.dropTokens = {};\n    this.dropTokens[ PHP.Constants.T_WHITESPACE ] = 1;\n    this.dropTokens[ PHP.Constants.T_OPEN_TAG ] = 1;\n    var tokens = [];\n\n    // pre-process\n    preprocessedTokens.forEach( function( token, index ) {\n        if ( typeof token === \"object\" && token[ 0 ] === PHP.Constants.T_OPEN_TAG_WITH_ECHO) {\n            tokens.push([\n                PHP.Constants.T_OPEN_TAG,\n                token[ 1 ],\n                token[ 2 ]\n                ]);\n            tokens.push([\n                PHP.Constants.T_ECHO,\n                token[ 1 ],\n                token[ 2 ]\n                ]);\n        } else {\n            tokens.push( token );\n        }\n    });\n    this.tokens = tokens;\n\n    // We start off with no lookahead-token\n    var tokenId = this.TOKEN_NONE;\n\n    // The attributes for a node are taken from the first and last token of the node.\n    // From the first token only the startAttributes are taken and from the last only\n    // the endAttributes. Both are merged using the array union operator (+).\n    this.startAttributes = {\n        'startLine': 1\n    };\n\n    this.endAttributes = {};\n\n    // In order to figure out the attributes for the starting token, we have to keep\n    // them in a stack\n    var attributeStack = [ this.startAttributes ];\n\n    // Start off in the initial state and keep a stack of previous states\n    var state = 0;\n    var stateStack = [ state ];\n\n    // AST stack\n    this.yyastk = [];\n\n    // Current position in the stack(s)\n    this.stackPos  = 0;\n\n    var yyn;\n\n    var origTokenId;\n\n\n    for (;;) {\n\n        if ( yybase[ state ] === 0 ) {\n            yyn = yydefault[ state ];\n        } else {\n            if (tokenId === this.TOKEN_NONE ) {\n                // fetch the next token id from the lexer and fetch additional info by-ref\n                origTokenId = this.getNextToken( );\n\n                // map the lexer token id to the internally used token id's\n                tokenId = (origTokenId >= 0 && origTokenId < this.TOKEN_MAP_SIZE) ? translate[ origTokenId ] : this.TOKEN_INVALID;\n\n                attributeStack[ this.stackPos ] = this.startAttributes;\n            }\n\n            if (((yyn = yybase[ state ] + tokenId) >= 0\n                && yyn < this.YYLAST && yycheck[ yyn ] === tokenId\n                || (state < this.YY2TBLSTATE\n                    && (yyn = yybase[state + this.YYNLSTATES] + tokenId) >= 0\n                    && yyn < this.YYLAST\n                    && yycheck[ yyn ] === tokenId))\n            && (yyn = yyaction[ yyn ]) !== this.YYDEFAULT ) {\n                /*\n                 * >= YYNLSTATE: shift and reduce\n                 * > 0: shift\n                 * = 0: accept\n                 * < 0: reduce\n                 * = -YYUNEXPECTED: error\n                 */\n                if (yyn > 0) {\n                    /* shift */\n                    ++this.stackPos;\n\n                    stateStack[ this.stackPos ] = state = yyn;\n                    this.yyastk[ this.stackPos ] = this.tokenValue;\n                    attributeStack[ this.stackPos ] = this.startAttributes;\n                    tokenId = this.TOKEN_NONE;\n\n                    if (yyn < this.YYNLSTATES)\n                        continue;\n\n                    /* $yyn >= YYNLSTATES means shift-and-reduce */\n                    yyn -= this.YYNLSTATES;\n                } else {\n                    yyn = -yyn;\n                }\n            } else {\n                yyn = yydefault[ state ];\n            }\n        }\n\n        for (;;) {\n            /* reduce/error */\n\n            if ( yyn === 0 ) {\n                /* accept */\n                return this.yyval;\n            } else if (yyn !== this.YYUNEXPECTED ) {\n                /* reduce */\n                for (var attr in this.endAttributes) {\n                    attributeStack[ this.stackPos - yylen[ yyn ] ][ attr ] = this.endAttributes[ attr ];\n                }\n                \n                // We do not build an AST!\n                // this['yyn' + yyn](attributeStack[ this.stackPos - yylen[ yyn ] ]);\n\n                /* Goto - shift nonterminal */\n                this.stackPos -= yylen[ yyn ];\n                yyn = yylhs[ yyn ];\n                if ((yyp = yygbase[ yyn ] + stateStack[ this.stackPos ]) >= 0\n                    && yyp < this.YYGLAST\n                    && yygcheck[ yyp ] === yyn) {\n                    state = yygoto[ yyp ];\n                } else {\n                    state = yygdefault[ yyn ];\n                }\n\n                ++this.stackPos;\n\n                stateStack[ this.stackPos ] = state;\n                this.yyastk[ this.stackPos ] = this.yyval;\n                attributeStack[ this.stackPos ] = this.startAttributes;\n            } else {\n                /* error */\n                if (eval !== true) {\n\n                    var expected = [];\n\n                    for (var i = 0; i < this.TOKEN_MAP_SIZE; ++i) {\n                        if ((yyn = yybase[ state ] + i) >= 0 && yyn < this.YYLAST && yycheck[ yyn ] == i\n                         || state < this.YY2TBLSTATE\n                            && (yyn = yybase[ state + this.YYNLSTATES] + i)\n                            && yyn < this.YYLAST && yycheck[ yyn ] == i\n                        ) {\n                            if (yyaction[ yyn ] != this.YYUNEXPECTED) {\n                                if (expected.length == 4) {\n                                    /* Too many expected tokens */\n                                    expected = [];\n                                    break;\n                                }\n\n                                expected.push( this.terminals[ i ] );\n                            }\n                        }\n                    }\n\n                    var expectedString = '';\n                    if (expected.length) {\n                        expectedString = ', expecting ' + expected.join(' or ');\n                    }\n                    throw new PHP.ParseError('syntax error, unexpected ' + terminals[ tokenId ] + expectedString, this.startAttributes['startLine']);\n                } else {\n                    return this.startAttributes['startLine'];\n                }\n\n            }\n\n            if (state < this.YYNLSTATES)\n                break;\n            /* >= YYNLSTATES means shift-and-reduce */\n            yyn = state - this.YYNLSTATES;\n        }\n    }\n};\n\nPHP.ParseError = function( msg, line ) {\n    this.message = msg;\n    this.line = line;\n};\n\nPHP.Parser.prototype.getNextToken = function( ) {\n\n    this.startAttributes = {};\n    this.endAttributes = {};\n\n    var token,\n    tmp;\n\n    while (this.tokens[++this.pos] !== undefined) {\n        token = this.tokens[this.pos];\n\n        if (typeof token === \"string\") {\n            this.startAttributes['startLine'] = this.line;\n            this.endAttributes['endLine'] = this.line;\n\n            // bug in token_get_all\n            if ('b\"' === token) {\n                this.tokenValue = 'b\"';\n                return '\"'.charCodeAt(0);\n            } else {\n                this.tokenValue = token;\n                return token.charCodeAt(0);\n            }\n        } else {\n\n\n\n            this.line += ((tmp = token[ 1 ].match(/\\n/g)) === null) ? 0 : tmp.length;\n\n            if (PHP.Constants.T_COMMENT === token[0]) {\n\n                if (!Array.isArray(this.startAttributes['comments'])) {\n                    this.startAttributes['comments'] = [];\n                }\n\n                this.startAttributes['comments'].push( {\n                    type: \"comment\",\n                    comment: token[1],\n                    line: token[2]\n                });\n\n            } else if (PHP.Constants.T_DOC_COMMENT === token[0]) {\n                this.startAttributes['comments'].push( new PHPParser_Comment_Doc(token[1], token[2]) );\n            } else if (this.dropTokens[token[0]] === undefined) {\n                this.tokenValue = token[1];\n                this.startAttributes['startLine'] = token[2];\n                this.endAttributes['endLine'] = this.line;\n\n                return this.tokenMap[token[0]];\n            }\n        }\n    }\n\n    this.startAttributes['startLine'] = this.line;\n\n    // 0 is the EOF token\n    return 0;\n};\n\nPHP.Parser.prototype.tokenName = function( token ) {\n    var constants = [\"T_INCLUDE\",\"T_INCLUDE_ONCE\",\"T_EVAL\",\"T_REQUIRE\",\"T_REQUIRE_ONCE\",\"T_LOGICAL_OR\",\"T_LOGICAL_XOR\",\"T_LOGICAL_AND\",\"T_PRINT\",\"T_YIELD\",\"T_DOUBLE_ARROW\",\"T_YIELD_FROM\",\"T_PLUS_EQUAL\",\"T_MINUS_EQUAL\",\"T_MUL_EQUAL\",\"T_DIV_EQUAL\",\"T_CONCAT_EQUAL\",\"T_MOD_EQUAL\",\"T_AND_EQUAL\",\"T_OR_EQUAL\",\"T_XOR_EQUAL\",\"T_SL_EQUAL\",\"T_SR_EQUAL\",\"T_POW_EQUAL\",\"T_COALESCE\",\"T_BOOLEAN_OR\",\"T_BOOLEAN_AND\",\"T_IS_EQUAL\",\"T_IS_NOT_EQUAL\",\"T_IS_IDENTICAL\",\"T_IS_NOT_IDENTICAL\",\"T_SPACESHIP\",\"T_IS_SMALLER_OR_EQUAL\",\"T_IS_GREATER_OR_EQUAL\",\"T_SL\",\"T_SR\",\"T_INSTANCEOF\",\"T_INC\",\"T_DEC\",\"T_INT_CAST\",\"T_DOUBLE_CAST\",\"T_STRING_CAST\",\"T_ARRAY_CAST\",\"T_OBJECT_CAST\",\"T_BOOL_CAST\",\"T_UNSET_CAST\",\"T_POW\",\"T_NEW\",\"T_CLONE\",\"T_EXIT\",\"T_IF\",\"T_ELSEIF\",\"T_ELSE\",\"T_ENDIF\",\"T_LNUMBER\",\"T_DNUMBER\",\"T_STRING\",\"T_STRING_VARNAME\",\"T_VARIABLE\",\"T_NUM_STRING\",\"T_INLINE_HTML\",\"T_CHARACTER\",\"T_BAD_CHARACTER\",\"T_ENCAPSED_AND_WHITESPACE\",\"T_CONSTANT_ENCAPSED_STRING\",\"T_ECHO\",\"T_DO\",\"T_WHILE\",\"T_ENDWHILE\",\"T_FOR\",\"T_ENDFOR\",\"T_FOREACH\",\"T_ENDFOREACH\",\"T_DECLARE\",\"T_ENDDECLARE\",\"T_AS\",\"T_SWITCH\",\"T_ENDSWITCH\",\"T_CASE\",\"T_DEFAULT\",\"T_BREAK\",\"T_CONTINUE\",\"T_GOTO\",\"T_FUNCTION\",\"T_CONST\",\"T_RETURN\",\"T_TRY\",\"T_CATCH\",\"T_FINALLY\",\"T_THROW\",\"T_USE\",\"T_INSTEADOF\",\"T_GLOBAL\",\"T_STATIC\",\"T_ABSTRACT\",\"T_FINAL\",\"T_PRIVATE\",\"T_PROTECTED\",\"T_PUBLIC\",\"T_VAR\",\"T_UNSET\",\"T_ISSET\",\"T_EMPTY\",\"T_HALT_COMPILER\",\"T_CLASS\",\"T_TRAIT\",\"T_INTERFACE\",\"T_EXTENDS\",\"T_IMPLEMENTS\",\"T_OBJECT_OPERATOR\",\"T_DOUBLE_ARROW\",\"T_LIST\",\"T_ARRAY\",\"T_CALLABLE\",\"T_CLASS_C\",\"T_TRAIT_C\",\"T_METHOD_C\",\"T_FUNC_C\",\"T_LINE\",\"T_FILE\",\"T_COMMENT\",\"T_DOC_COMMENT\",\"T_OPEN_TAG\",\"T_OPEN_TAG_WITH_ECHO\",\"T_CLOSE_TAG\",\"T_WHITESPACE\",\"T_START_HEREDOC\",\"T_END_HEREDOC\",\"T_DOLLAR_OPEN_CURLY_BRACES\",\"T_CURLY_OPEN\",\"T_PAAMAYIM_NEKUDOTAYIM\",\"T_NAMESPACE\",\"T_NS_C\",\"T_DIR\",\"T_NS_SEPARATOR\",\"T_ELLIPSIS\"];\n    var current = \"UNKNOWN\";\n    constants.some(function( constant ) {\n        if (PHP.Constants[ constant ] === token) {\n            current = constant;\n            return true;\n        } else {\n            return false;\n        }\n    });\n\n    return current;\n};\n\n/**\n * Creates the token map.\n *\n * The token map maps the PHP internal token identifiers\n * to the identifiers used by the PHP.Parser. Additionally it\n * maps T_OPEN_TAG_WITH_ECHO to T_ECHO and T_CLOSE_TAG to ';'.\n *\n * @return array The token map\n */\n\nPHP.Parser.prototype.createTokenMap = function() {\n    var tokenMap = {},\n    name,\n    i;\n    // 256 is the minimum possible token number, as everything below\n    // it is an ASCII value\n    for ( i = 256; i < 1000; ++i ) {\n        // T_OPEN_TAG_WITH_ECHO with dropped T_OPEN_TAG results in T_ECHO\n        if( PHP.Constants.T_OPEN_TAG_WITH_ECHO === i ) {\n            tokenMap[ i ] = PHP.Constants.T_ECHO;\n        // T_CLOSE_TAG is equivalent to ';'\n        } else if( PHP.Constants.T_CLOSE_TAG === i ) {\n            tokenMap[ i ] = 59;\n        // and the others can be mapped directly\n        } else if ( 'UNKNOWN' !== (name = this.tokenName( i ) ) ) { \n            tokenMap[ i ] =  this[name];\n        }\n    }\n    return tokenMap;\n};\n\n\n/* This is an automatically GENERATED file, which should not be manually edited.\n * Instead edit one of the following:\n *  * the grammar file grammar/zend_language_parser.jsy\n *  * the parser skeleton grammar/kymacc.js.parser\n *  * the preprocessing script grammar/rebuildParser.php\n *\n * The skeleton for this parser was written by Moriyoshi Koizumi and is based on\n * the work by Masato Bito and is in the PUBLIC DOMAIN.\n * Ported to JavaScript by Niklas von Hertzen\n */\n\nPHP.Parser.prototype.TOKEN_NONE    = -1;\nPHP.Parser.prototype.TOKEN_INVALID = 157;\n\nPHP.Parser.prototype.TOKEN_MAP_SIZE = 392;\n\nPHP.Parser.prototype.YYLAST       = 889;\nPHP.Parser.prototype.YY2TBLSTATE  = 337;\nPHP.Parser.prototype.YYGLAST      = 410;\nPHP.Parser.prototype.YYNLSTATES   = 564;\nPHP.Parser.prototype.YYUNEXPECTED = 32767;\nPHP.Parser.prototype.YYDEFAULT    = -32766;\n\n// {{{ Tokens\nPHP.Parser.prototype.YYERRTOK = 256;\nPHP.Parser.prototype.T_INCLUDE = 257;\nPHP.Parser.prototype.T_INCLUDE_ONCE = 258;\nPHP.Parser.prototype.T_EVAL = 259;\nPHP.Parser.prototype.T_REQUIRE = 260;\nPHP.Parser.prototype.T_REQUIRE_ONCE = 261;\nPHP.Parser.prototype.T_LOGICAL_OR = 262;\nPHP.Parser.prototype.T_LOGICAL_XOR = 263;\nPHP.Parser.prototype.T_LOGICAL_AND = 264;\nPHP.Parser.prototype.T_PRINT = 265;\nPHP.Parser.prototype.T_YIELD = 266;\nPHP.Parser.prototype.T_DOUBLE_ARROW = 267;\nPHP.Parser.prototype.T_YIELD_FROM = 268;\nPHP.Parser.prototype.T_PLUS_EQUAL = 269;\nPHP.Parser.prototype.T_MINUS_EQUAL = 270;\nPHP.Parser.prototype.T_MUL_EQUAL = 271;\nPHP.Parser.prototype.T_DIV_EQUAL = 272;\nPHP.Parser.prototype.T_CONCAT_EQUAL = 273;\nPHP.Parser.prototype.T_MOD_EQUAL = 274;\nPHP.Parser.prototype.T_AND_EQUAL = 275;\nPHP.Parser.prototype.T_OR_EQUAL = 276;\nPHP.Parser.prototype.T_XOR_EQUAL = 277;\nPHP.Parser.prototype.T_SL_EQUAL = 278;\nPHP.Parser.prototype.T_SR_EQUAL = 279;\nPHP.Parser.prototype.T_POW_EQUAL = 280;\nPHP.Parser.prototype.T_COALESCE = 281;\nPHP.Parser.prototype.T_BOOLEAN_OR = 282;\nPHP.Parser.prototype.T_BOOLEAN_AND = 283;\nPHP.Parser.prototype.T_IS_EQUAL = 284;\nPHP.Parser.prototype.T_IS_NOT_EQUAL = 285;\nPHP.Parser.prototype.T_IS_IDENTICAL = 286;\nPHP.Parser.prototype.T_IS_NOT_IDENTICAL = 287;\nPHP.Parser.prototype.T_SPACESHIP = 288;\nPHP.Parser.prototype.T_IS_SMALLER_OR_EQUAL = 289;\nPHP.Parser.prototype.T_IS_GREATER_OR_EQUAL = 290;\nPHP.Parser.prototype.T_SL = 291;\nPHP.Parser.prototype.T_SR = 292;\nPHP.Parser.prototype.T_INSTANCEOF = 293;\nPHP.Parser.prototype.T_INC = 294;\nPHP.Parser.prototype.T_DEC = 295;\nPHP.Parser.prototype.T_INT_CAST = 296;\nPHP.Parser.prototype.T_DOUBLE_CAST = 297;\nPHP.Parser.prototype.T_STRING_CAST = 298;\nPHP.Parser.prototype.T_ARRAY_CAST = 299;\nPHP.Parser.prototype.T_OBJECT_CAST = 300;\nPHP.Parser.prototype.T_BOOL_CAST = 301;\nPHP.Parser.prototype.T_UNSET_CAST = 302;\nPHP.Parser.prototype.T_POW = 303;\nPHP.Parser.prototype.T_NEW = 304;\nPHP.Parser.prototype.T_CLONE = 305;\nPHP.Parser.prototype.T_EXIT = 306;\nPHP.Parser.prototype.T_IF = 307;\nPHP.Parser.prototype.T_ELSEIF = 308;\nPHP.Parser.prototype.T_ELSE = 309;\nPHP.Parser.prototype.T_ENDIF = 310;\nPHP.Parser.prototype.T_LNUMBER = 311;\nPHP.Parser.prototype.T_DNUMBER = 312;\nPHP.Parser.prototype.T_STRING = 313;\nPHP.Parser.prototype.T_STRING_VARNAME = 314;\nPHP.Parser.prototype.T_VARIABLE = 315;\nPHP.Parser.prototype.T_NUM_STRING = 316;\nPHP.Parser.prototype.T_INLINE_HTML = 317;\nPHP.Parser.prototype.T_CHARACTER = 318;\nPHP.Parser.prototype.T_BAD_CHARACTER = 319;\nPHP.Parser.prototype.T_ENCAPSED_AND_WHITESPACE = 320;\nPHP.Parser.prototype.T_CONSTANT_ENCAPSED_STRING = 321;\nPHP.Parser.prototype.T_ECHO = 322;\nPHP.Parser.prototype.T_DO = 323;\nPHP.Parser.prototype.T_WHILE = 324;\nPHP.Parser.prototype.T_ENDWHILE = 325;\nPHP.Parser.prototype.T_FOR = 326;\nPHP.Parser.prototype.T_ENDFOR = 327;\nPHP.Parser.prototype.T_FOREACH = 328;\nPHP.Parser.prototype.T_ENDFOREACH = 329;\nPHP.Parser.prototype.T_DECLARE = 330;\nPHP.Parser.prototype.T_ENDDECLARE = 331;\nPHP.Parser.prototype.T_AS = 332;\nPHP.Parser.prototype.T_SWITCH = 333;\nPHP.Parser.prototype.T_ENDSWITCH = 334;\nPHP.Parser.prototype.T_CASE = 335;\nPHP.Parser.prototype.T_DEFAULT = 336;\nPHP.Parser.prototype.T_BREAK = 337;\nPHP.Parser.prototype.T_CONTINUE = 338;\nPHP.Parser.prototype.T_GOTO = 339;\nPHP.Parser.prototype.T_FUNCTION = 340;\nPHP.Parser.prototype.T_CONST = 341;\nPHP.Parser.prototype.T_RETURN = 342;\nPHP.Parser.prototype.T_TRY = 343;\nPHP.Parser.prototype.T_CATCH = 344;\nPHP.Parser.prototype.T_FINALLY = 345;\nPHP.Parser.prototype.T_THROW = 346;\nPHP.Parser.prototype.T_USE = 347;\nPHP.Parser.prototype.T_INSTEADOF = 348;\nPHP.Parser.prototype.T_GLOBAL = 349;\nPHP.Parser.prototype.T_STATIC = 350;\nPHP.Parser.prototype.T_ABSTRACT = 351;\nPHP.Parser.prototype.T_FINAL = 352;\nPHP.Parser.prototype.T_PRIVATE = 353;\nPHP.Parser.prototype.T_PROTECTED = 354;\nPHP.Parser.prototype.T_PUBLIC = 355;\nPHP.Parser.prototype.T_VAR = 356;\nPHP.Parser.prototype.T_UNSET = 357;\nPHP.Parser.prototype.T_ISSET = 358;\nPHP.Parser.prototype.T_EMPTY = 359;\nPHP.Parser.prototype.T_HALT_COMPILER = 360;\nPHP.Parser.prototype.T_CLASS = 361;\nPHP.Parser.prototype.T_TRAIT = 362;\nPHP.Parser.prototype.T_INTERFACE = 363;\nPHP.Parser.prototype.T_EXTENDS = 364;\nPHP.Parser.prototype.T_IMPLEMENTS = 365;\nPHP.Parser.prototype.T_OBJECT_OPERATOR = 366;\nPHP.Parser.prototype.T_LIST = 367;\nPHP.Parser.prototype.T_ARRAY = 368;\nPHP.Parser.prototype.T_CALLABLE = 369;\nPHP.Parser.prototype.T_CLASS_C = 370;\nPHP.Parser.prototype.T_TRAIT_C = 371;\nPHP.Parser.prototype.T_METHOD_C = 372;\nPHP.Parser.prototype.T_FUNC_C = 373;\nPHP.Parser.prototype.T_LINE = 374;\nPHP.Parser.prototype.T_FILE = 375;\nPHP.Parser.prototype.T_COMMENT = 376;\nPHP.Parser.prototype.T_DOC_COMMENT = 377;\nPHP.Parser.prototype.T_OPEN_TAG = 378;\nPHP.Parser.prototype.T_OPEN_TAG_WITH_ECHO = 379;\nPHP.Parser.prototype.T_CLOSE_TAG = 380;\nPHP.Parser.prototype.T_WHITESPACE = 381;\nPHP.Parser.prototype.T_START_HEREDOC = 382;\nPHP.Parser.prototype.T_END_HEREDOC = 383;\nPHP.Parser.prototype.T_DOLLAR_OPEN_CURLY_BRACES = 384;\nPHP.Parser.prototype.T_CURLY_OPEN = 385;\nPHP.Parser.prototype.T_PAAMAYIM_NEKUDOTAYIM = 386;\nPHP.Parser.prototype.T_NAMESPACE = 387;\nPHP.Parser.prototype.T_NS_C = 388;\nPHP.Parser.prototype.T_DIR = 389;\nPHP.Parser.prototype.T_NS_SEPARATOR = 390;\nPHP.Parser.prototype.T_ELLIPSIS = 391;\n// }}}\n\n/* @var array Map of token ids to their respective names */\nPHP.Parser.prototype.terminals = [\n    \"$EOF\",\n    \"error\",\n    \"T_INCLUDE\",\n    \"T_INCLUDE_ONCE\",\n    \"T_EVAL\",\n    \"T_REQUIRE\",\n    \"T_REQUIRE_ONCE\",\n    \"','\",\n    \"T_LOGICAL_OR\",\n    \"T_LOGICAL_XOR\",\n    \"T_LOGICAL_AND\",\n    \"T_PRINT\",\n    \"T_YIELD\",\n    \"T_DOUBLE_ARROW\",\n    \"T_YIELD_FROM\",\n    \"'='\",\n    \"T_PLUS_EQUAL\",\n    \"T_MINUS_EQUAL\",\n    \"T_MUL_EQUAL\",\n    \"T_DIV_EQUAL\",\n    \"T_CONCAT_EQUAL\",\n    \"T_MOD_EQUAL\",\n    \"T_AND_EQUAL\",\n    \"T_OR_EQUAL\",\n    \"T_XOR_EQUAL\",\n    \"T_SL_EQUAL\",\n    \"T_SR_EQUAL\",\n    \"T_POW_EQUAL\",\n    \"'?'\",\n    \"':'\",\n    \"T_COALESCE\",\n    \"T_BOOLEAN_OR\",\n    \"T_BOOLEAN_AND\",\n    \"'|'\",\n    \"'^'\",\n    \"'&'\",\n    \"T_IS_EQUAL\",\n    \"T_IS_NOT_EQUAL\",\n    \"T_IS_IDENTICAL\",\n    \"T_IS_NOT_IDENTICAL\",\n    \"T_SPACESHIP\",\n    \"'<'\",\n    \"T_IS_SMALLER_OR_EQUAL\",\n    \"'>'\",\n    \"T_IS_GREATER_OR_EQUAL\",\n    \"T_SL\",\n    \"T_SR\",\n    \"'+'\",\n    \"'-'\",\n    \"'.'\",\n    \"'*'\",\n    \"'/'\",\n    \"'%'\",\n    \"'!'\",\n    \"T_INSTANCEOF\",\n    \"'~'\",\n    \"T_INC\",\n    \"T_DEC\",\n    \"T_INT_CAST\",\n    \"T_DOUBLE_CAST\",\n    \"T_STRING_CAST\",\n    \"T_ARRAY_CAST\",\n    \"T_OBJECT_CAST\",\n    \"T_BOOL_CAST\",\n    \"T_UNSET_CAST\",\n    \"'@'\",\n    \"T_POW\",\n    \"'['\",\n    \"T_NEW\",\n    \"T_CLONE\",\n    \"T_EXIT\",\n    \"T_IF\",\n    \"T_ELSEIF\",\n    \"T_ELSE\",\n    \"T_ENDIF\",\n    \"T_LNUMBER\",\n    \"T_DNUMBER\",\n    \"T_STRING\",\n    \"T_STRING_VARNAME\",\n    \"T_VARIABLE\",\n    \"T_NUM_STRING\",\n    \"T_INLINE_HTML\",\n    \"T_ENCAPSED_AND_WHITESPACE\",\n    \"T_CONSTANT_ENCAPSED_STRING\",\n    \"T_ECHO\",\n    \"T_DO\",\n    \"T_WHILE\",\n    \"T_ENDWHILE\",\n    \"T_FOR\",\n    \"T_ENDFOR\",\n    \"T_FOREACH\",\n    \"T_ENDFOREACH\",\n    \"T_DECLARE\",\n    \"T_ENDDECLARE\",\n    \"T_AS\",\n    \"T_SWITCH\",\n    \"T_ENDSWITCH\",\n    \"T_CASE\",\n    \"T_DEFAULT\",\n    \"T_BREAK\",\n    \"T_CONTINUE\",\n    \"T_GOTO\",\n    \"T_FUNCTION\",\n    \"T_CONST\",\n    \"T_RETURN\",\n    \"T_TRY\",\n    \"T_CATCH\",\n    \"T_FINALLY\",\n    \"T_THROW\",\n    \"T_USE\",\n    \"T_INSTEADOF\",\n    \"T_GLOBAL\",\n    \"T_STATIC\",\n    \"T_ABSTRACT\",\n    \"T_FINAL\",\n    \"T_PRIVATE\",\n    \"T_PROTECTED\",\n    \"T_PUBLIC\",\n    \"T_VAR\",\n    \"T_UNSET\",\n    \"T_ISSET\",\n    \"T_EMPTY\",\n    \"T_HALT_COMPILER\",\n    \"T_CLASS\",\n    \"T_TRAIT\",\n    \"T_INTERFACE\",\n    \"T_EXTENDS\",\n    \"T_IMPLEMENTS\",\n    \"T_OBJECT_OPERATOR\",\n    \"T_LIST\",\n    \"T_ARRAY\",\n    \"T_CALLABLE\",\n    \"T_CLASS_C\",\n    \"T_TRAIT_C\",\n    \"T_METHOD_C\",\n    \"T_FUNC_C\",\n    \"T_LINE\",\n    \"T_FILE\",\n    \"T_START_HEREDOC\",\n    \"T_END_HEREDOC\",\n    \"T_DOLLAR_OPEN_CURLY_BRACES\",\n    \"T_CURLY_OPEN\",\n    \"T_PAAMAYIM_NEKUDOTAYIM\",\n    \"T_NAMESPACE\",\n    \"T_NS_C\",\n    \"T_DIR\",\n    \"T_NS_SEPARATOR\",\n    \"T_ELLIPSIS\",\n    \"';'\",\n    \"'{'\",\n    \"'}'\",\n    \"'('\",\n    \"')'\",\n    \"'`'\",\n    \"']'\",\n    \"'\\\"'\",\n    \"'$'\"\n    , \"???\"\n];\n\n/* @var Map which translates lexer tokens to internal tokens */\nPHP.Parser.prototype.translate = [\n        0,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,   53,  155,  157,  156,   52,   35,  157,\n      151,  152,   50,   47,    7,   48,   49,   51,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,   29,  148,\n       41,   15,   43,   28,   65,  157,  157,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,   67,  157,  154,   34,  157,  153,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,  149,   33,  150,   55,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,\n      157,  157,  157,  157,  157,  157,    1,    2,    3,    4,\n        5,    6,    8,    9,   10,   11,   12,   13,   14,   16,\n       17,   18,   19,   20,   21,   22,   23,   24,   25,   26,\n       27,   30,   31,   32,   36,   37,   38,   39,   40,   42,\n       44,   45,   46,   54,   56,   57,   58,   59,   60,   61,\n       62,   63,   64,   66,   68,   69,   70,   71,   72,   73,\n       74,   75,   76,   77,   78,   79,   80,   81,  157,  157,\n       82,   83,   84,   85,   86,   87,   88,   89,   90,   91,\n       92,   93,   94,   95,   96,   97,   98,   99,  100,  101,\n      102,  103,  104,  105,  106,  107,  108,  109,  110,  111,\n      112,  113,  114,  115,  116,  117,  118,  119,  120,  121,\n      122,  123,  124,  125,  126,  127,  128,  129,  130,  131,\n      132,  133,  134,  135,  136,  137,  157,  157,  157,  157,\n      157,  157,  138,  139,  140,  141,  142,  143,  144,  145,\n      146,  147\n];\n\nPHP.Parser.prototype.yyaction = [\n      569,  570,  571,  572,  573,  215,  574,  575,  576,  612,\n      613,    0,   27,   99,  100,  101,  102,  103,  104,  105,\n      106,  107,  108,  109,  110,-32766,-32766,-32766,   95,   96,\n       97,   24,  240,  226, -267,-32766,-32766,-32766,-32766,-32766,\n    -32766,  530,  344,  114,   98,-32766,  286,-32766,-32766,-32766,\n    -32766,-32766,  577,  870,  872,-32766,-32766,-32766,-32766,-32766,\n    -32766,-32766,-32766,  224,-32766,  714,  578,  579,  580,  581,\n      582,  583,  584,-32766,  264,  644,  840,  841,  842,  839,\n      838,  837,  585,  586,  587,  588,  589,  590,  591,  592,\n      593,  594,  595,  615,  616,  617,  618,  619,  607,  608,\n      609,  610,  611,  596,  597,  598,  599,  600,  601,  602,\n      638,  639,  640,  641,  642,  643,  603,  604,  605,  606,\n      636,  627,  625,  626,  622,  623,  116,  614,  620,  621,\n      628,  629,  631,  630,  632,  633,   42,   43,  381,   44,\n       45,  624,  635,  634, -214,   46,   47,  289,   48,-32767,\n    -32767,-32767,-32767,   90,   91,   92,   93,   94,  267,  241,\n       22,  840,  841,  842,  839,  838,  837,  832,-32766,-32766,\n    -32766,  306, 1000, 1000, 1037,  120,  966,  436, -423,  244,\n      797,   49,   50,  660,  661,  272,  362,   51,-32766,   52,\n      219,  220,   53,   54,   55,   56,   57,   58,   59,   60,\n     1016,   22,  238,   61,  351,  945,-32766,-32766,-32766,  967,\n      968,  646,  705, 1000,   28, -456,  125,  966,-32766,-32766,\n    -32766,  715,  398,  399,  216, 1000,-32766,  339,-32766,-32766,\n    -32766,-32766,   25,  222,  980,  552,  355,  378,-32766, -423,\n    -32766,-32766,-32766,  121,   65, 1045,  408, 1047, 1046,  274,\n      274,  131,  244, -423,  394,  395,  358,  519,  945,  537,\n     -423,  111, -426,  398,  399,  130,  972,  973,  974,  975,\n      969,  970,  243,  128, -422, -421, 1013,  409,  976,  971,\n      353,  791,  792,    7, -162,   63,  124,  255,  701,  256,\n      274,  382, -122, -122, -122,   -4,  715,  383,  646, 1042,\n     -421,  704,  274, -219,   33,   17,  384, -122,  385, -122,\n      386, -122,  387, -122,  369,  388, -122, -122, -122,   34,\n       35,  389,  352,  520,   36,  390,  353,  702,   62,  112,\n      818,  287,  288,  391,  392, -422, -421, -161,  350,  393,\n       40,   38,  690,  735,  396,  397,  361,   22,  122, -422,\n     -421,-32766,-32766,-32766,  791,  792, -422, -421, -425, 1000,\n     -456, -421, -238,  966,  409,   41,  382,  353,  717,  535,\n     -122,-32766,  383,-32766,-32766, -421,  704,   21,  813,   33,\n       17,  384, -421,  385, -466,  386,  224,  387, -467,  273,\n      388,  367,  945, -458,   34,   35,  389,  352,  345,   36,\n      390,  248,  247,   62,  254,  715,  287,  288,  391,  392,\n      399,-32766,-32766,-32766,  393,  295, 1000,  652,  735,  396,\n      397,  117,  115,  113,  814,  119,   72,   73,   74, -162,\n      764,   65,  240,  541,  370,  518,  274,  118,  270,   92,\n       93,   94,  242,  717,  535,   -4,   26, 1000,   75,   76,\n       77,   78,   79,   80,   81,   82,   83,   84,   85,   86,\n       87,   88,   89,   90,   91,   92,   93,   94,   95,   96,\n       97,  547,  240,  713,  715,  382,  276,-32766,-32766,  126,\n      945,  383, -161,  938,   98,  704,  225,  659,   33,   17,\n      384,  346,  385,  274,  386,  728,  387,  221,  120,  388,\n      505,  506,  540,   34,   35,  389,  715, -238,   36,  390,\n     1017,  223,   62,  494,   18,  287,  288,  127,  297,  376,\n        6,   98,  798,  393,  274,  660,  661,  490,  491, -466,\n       39, -466,  514, -467,  539, -467,   16,  458, -458,  315,\n      791,  792,  829,  553,  382,  817,  563,  653,  538,  765,\n      383,  449,  751,  535,  704,  448,  435,   33,   17,  384,\n      430,  385,  646,  386,  359,  387,  357,  647,  388,  673,\n      429, 1040,   34,   35,  389,  715,  382,   36,  390,  941,\n      492,   62,  383,  503,  287,  288,  704,  434,  440,   33,\n       17,  384,  393,  385,-32766,  386,  445,  387,  495,  509,\n      388,   10,  529,  542,   34,   35,  389,  715,  515,   36,\n      390,  499,  500,   62,  214,  -80,  287,  288,  452,  269,\n      736,  717,  535,  488,  393,  356,  266,  979,  265,  730,\n      982,  722,  358,  338,  493,  548,    0,  294,  737,    0,\n        3,    0,  309,    0,    0,  382,    0,    0,  271,    0,\n        0,  383,    0,  717,  535,  704,  227,    0,   33,   17,\n      384,    9,  385,    0,  386,    0,  387, -382,    0,  388,\n        0,    0,  325,   34,   35,  389,  715,  382,   36,  390,\n      321,  341,   62,  383,  340,  287,  288,  704,   22,  320,\n       33,   17,  384,  393,  385,  442,  386,  337,  387,  562,\n     1000,  388,   32,   31,  966,   34,   35,  389,  823,  657,\n       36,  390,  656,  821,   62,  703,  711,  287,  288,  561,\n      822,  825,  717,  535,  695,  393,  747,  749,  693,  759,\n      758,  752,  767,  945,  824,  706,  700,  712,  699,  698,\n      658,    0,  263,  262,  559,  558,  382,  556,  554,  551,\n      398,  399,  383,  550,  717,  535,  704,  546,  545,   33,\n       17,  384,  543,  385,  536,  386,   71,  387,  933,  932,\n      388,   30,   65,  731,   34,   35,  389,  274,  724,   36,\n      390,  830,  734,   62,  663,  662,  287,  288,-32766,-32766,\n    -32766,  733,  732,  934,  393,  665,  664,  756,  555,  691,\n     1041, 1001,  994, 1006, 1011, 1014,  757, 1043,-32766,  654,\n    -32766,-32766,-32766,-32766,-32766,-32766,-32767,-32767,-32767,-32767,\n    -32767,  655, 1044,  717,  535, -446,  926,  348,  343,  268,\n      237,  236,  235,  234,  218,  217,  132,  129, -426, -425,\n     -424,  123,   20,   23,   70,   69,   29,   37,   64,   68,\n       66,   67, -448,    0,   15,   19,  250,  910,  296, -217,\n      467,  484,  909,  472,  528,  913,   11,  964,  955, -215,\n      525,  379,  375,  373,  371,   14,   13,   12, -214,    0,\n     -393,    0, 1005, 1039,  992,  993,  963,    0,  981\n];\n\nPHP.Parser.prototype.yycheck = [\n        2,    3,    4,    5,    6,   13,    8,    9,   10,   11,\n       12,    0,   15,   16,   17,   18,   19,   20,   21,   22,\n       23,   24,   25,   26,   27,    8,    9,   10,   50,   51,\n       52,    7,   54,    7,   79,    8,    9,   10,    8,    9,\n       10,   77,    7,   13,   66,   28,    7,   30,   31,   32,\n       33,   34,   54,   56,   57,   28,    8,   30,   31,   32,\n       33,   34,   35,   35,  109,    1,   68,   69,   70,   71,\n       72,   73,   74,  118,    7,   77,  112,  113,  114,  115,\n      116,  117,   84,   85,   86,   87,   88,   89,   90,   91,\n       92,   93,   94,   95,   96,   97,   98,   99,  100,  101,\n      102,  103,  104,  105,  106,  107,  108,  109,  110,  111,\n      112,  113,  114,  115,  116,  117,  118,  119,  120,  121,\n      122,  123,  124,  125,  126,  127,    7,  129,  130,  131,\n      132,  133,  134,  135,  136,  137,    2,    3,    4,    5,\n        6,  143,  144,  145,  152,   11,   12,    7,   14,   41,\n       42,   43,   44,   45,   46,   47,   48,   49,  109,    7,\n       67,  112,  113,  114,  115,  116,  117,  118,    8,    9,\n       10,   79,   79,   79,   82,  147,   83,   82,   67,   28,\n      152,   47,   48,  102,  103,    7,    7,   53,   28,   55,\n       56,   57,   58,   59,   60,   61,   62,   63,   64,   65,\n        1,   67,   68,   69,   70,  112,    8,    9,   10,   75,\n       76,   77,  148,   79,   13,    7,   67,   83,    8,    9,\n       10,    1,  129,  130,   13,   79,   28,  146,   30,   31,\n       32,   33,  140,  141,  139,   29,  102,    7,   28,  128,\n       30,   31,   32,  149,  151,   77,  112,   79,   80,  156,\n      156,   15,   28,  142,  120,  121,  146,   77,  112,  149,\n      149,   15,  151,  129,  130,   15,  132,  133,  134,  135,\n      136,  137,  138,   15,   67,   67,   77,  143,  144,  145,\n      146,  130,  131,    7,    7,  151,   15,  153,  148,  155,\n      156,   71,   72,   73,   74,    0,    1,   77,   77,  150,\n       67,   81,  156,  152,   84,   85,   86,   87,   88,   89,\n       90,   91,   92,   93,   29,   95,   96,   97,   98,   99,\n      100,  101,  102,  143,  104,  105,  146,  148,  108,   15,\n      150,  111,  112,  113,  114,  128,  128,    7,    7,  119,\n       67,   67,  122,  123,  124,  125,    7,   67,  149,  142,\n      142,    8,    9,   10,  130,  131,  149,  149,  151,   79,\n      152,  128,    7,   83,  143,    7,   71,  146,  148,  149,\n      150,   28,   77,   30,   31,  142,   81,    7,  148,   84,\n       85,   86,  149,   88,    7,   90,   35,   92,    7,   33,\n       95,    7,  112,    7,   99,  100,  101,  102,  103,  104,\n      105,  128,  128,  108,  109,    1,  111,  112,  113,  114,\n      130,    8,    9,   10,  119,  142,   79,  122,  123,  124,\n      125,   15,  149,  149,  148,   29,    8,    9,   10,  152,\n       29,  151,   54,   29,  149,   79,  156,   15,  143,   47,\n       48,   49,   29,  148,  149,  150,   28,   79,   30,   31,\n       32,   33,   34,   35,   36,   37,   38,   39,   40,   41,\n       42,   43,   44,   45,   46,   47,   48,   49,   50,   51,\n       52,   29,   54,   29,    1,   71,   67,    8,    9,   29,\n      112,   77,  152,  152,   66,   81,   35,  148,   84,   85,\n       86,  123,   88,  156,   90,   35,   92,   35,  147,   95,\n       72,   73,   29,   99,  100,  101,    1,  152,  104,  105,\n      152,   35,  108,   72,   73,  111,  112,   97,   98,  102,\n      103,   66,  152,  119,  156,  102,  103,  106,  107,  152,\n       67,  154,   74,  152,   29,  154,  152,  128,  152,   78,\n      130,  131,  148,  149,   71,  148,  149,  148,  149,  148,\n       77,   77,  148,  149,   81,   77,   77,   84,   85,   86,\n       77,   88,   77,   90,   77,   92,   77,   77,   95,   77,\n       77,   77,   99,  100,  101,    1,   71,  104,  105,   79,\n       79,  108,   77,   79,  111,  112,   81,   79,   82,   84,\n       85,   86,  119,   88,   82,   90,   86,   92,   87,   96,\n       95,   94,   89,   29,   99,  100,  101,    1,   91,  104,\n      105,   93,   96,  108,   94,   94,  111,  112,   94,  110,\n      123,  148,  149,  109,  119,  102,  127,  139,  126,  147,\n      139,  150,  146,  149,  154,   29,   -1,  142,  123,   -1,\n      142,   -1,  146,   -1,   -1,   71,   -1,   -1,  126,   -1,\n       -1,   77,   -1,  148,  149,   81,   35,   -1,   84,   85,\n       86,  142,   88,   -1,   90,   -1,   92,  142,   -1,   95,\n       -1,   -1,  146,   99,  100,  101,    1,   71,  104,  105,\n      146,  146,  108,   77,  146,  111,  112,   81,   67,  146,\n       84,   85,   86,  119,   88,  146,   90,  149,   92,  148,\n       79,   95,  148,  148,   83,   99,  100,  101,  148,  148,\n      104,  105,  148,  148,  108,  148,  148,  111,  112,  148,\n      148,  148,  148,  149,  148,  119,  148,  148,  148,  148,\n      148,  148,  148,  112,  148,  148,  148,  148,  148,  148,\n      148,   -1,  149,  149,  149,  149,   71,  149,  149,  149,\n      129,  130,   77,  149,  148,  149,   81,  149,  149,   84,\n       85,   86,  149,   88,  149,   90,  149,   92,  150,  150,\n       95,  151,  151,  150,   99,  100,  101,  156,  150,  104,\n      105,  150,  150,  108,  150,  150,  111,  112,    8,    9,\n       10,  150,  150,  150,  119,  150,  150,  150,  150,  150,\n      150,  150,  150,  150,  150,  150,  150,  150,   28,  150,\n       30,   31,   32,   33,   34,   35,   36,   37,   38,   39,\n       40,  150,  150,  148,  149,  151,  153,  151,  151,  151,\n      151,  151,  151,  151,  151,  151,  151,  151,  151,  151,\n      151,  151,  151,  151,  151,  151,  151,  151,  151,  151,\n      151,  151,  151,   -1,  152,  152,  152,  152,  152,  152,\n      152,  152,  152,  152,  152,  152,  152,  152,  152,  152,\n      152,  152,  152,  152,  152,  152,  152,  152,  152,   -1,\n      153,   -1,  154,  154,  154,  154,  154,   -1,  155\n];\n\nPHP.Parser.prototype.yybase = [\n        0,  220,  295,   94,  180,  560,   -2,   -2,   -2,   -2,\n      -36,  473,  574,  606,  574,  505,  404,  675,  675,  675,\n       28,  351,  462,  462,  462,  461,  396,  476,  451,  134,\n      134,  134,  134,  134,  134,  134,  134,  134,  134,  134,\n      134,  134,  134,  134,  134,  134,  134,  134,  134,  134,\n      134,  134,  134,  134,  134,  134,  134,  134,  134,  134,\n      134,  134,  134,  134,  134,  134,  134,  134,  134,  134,\n      134,  134,  134,  134,  134,  134,  134,  134,  134,  134,\n      134,  134,  134,  134,  134,  134,  134,  134,  134,  134,\n      134,  134,  134,  134,  134,  134,  134,  134,  134,  134,\n      134,  134,  134,  134,  134,  134,  134,  134,  134,  134,\n      134,  134,  134,  134,  134,  134,  134,  134,  134,  134,\n      134,  134,  134,  134,  134,  134,  134,  134,  134,  134,\n      134,  134,  134,  401,   64,  201,  568,  704,  713,  708,\n      702,  714,  520,  706,  705,  211,  650,  651,  450,  652,\n      653,  654,  655,  709,  480,  703,  712,  418,  418,  418,\n      418,  418,  418,  418,  418,  418,  418,  418,  418,  418,\n      418,  418,  418,   48,   30,  469,  403,  403,  403,  403,\n      403,  403,  403,  403,  403,  403,  403,  403,  403,  403,\n      403,  403,  403,  403,  403,  160,  160,  160,  343,  210,\n      208,  198,   17,  233,   27,  780,  780,  780,  780,  780,\n      108,  108,  108,  108,  621,  621,   93,  280,  280,  280,\n      280,  280,  280,  280,  280,  280,  280,  280,  632,  641,\n      642,  643,  392,  392,  151,  151,  151,  151,  368,  -45,\n      146,  224,  224,   95,  410,  491,  733,  199,  199,  111,\n      207,  -22,  -22,  -22,   81,  506,   92,   92,  233,  233,\n      273,  233,  423,  423,  423,  221,  221,  221,  221,  221,\n      110,  221,  221,  221,  617,  512,  168,  516,  647,  397,\n      503,  656,  274,  381,  377,  538,  535,  337,  523,  337,\n      421,  441,  428,  525,  337,  337,  285,  401,  394,  378,\n      567,  474,  339,  564,  140,  179,  409,  399,  384,  594,\n      561,  711,  330,  710,  358,  149,  378,  378,  378,  370,\n      593,  548,  355,   -8,  646,  484,  277,  417,  386,  645,\n      635,  230,  634,  276,  331,  356,  565,  485,  485,  485,\n      485,  485,  485,  460,  485,  483,  691,  691,  478,  501,\n      460,  696,  460,  485,  691,  460,  460,  502,  485,  522,\n      522,  483,  508,  499,  691,  691,  499,  478,  460,  571,\n      551,  514,  482,  413,  413,  514,  460,  413,  501,  413,\n       11,  697,  699,  444,  700,  695,  698,  676,  694,  493,\n      615,  497,  515,  684,  683,  693,  479,  489,  620,  692,\n      549,  592,  487,  246,  314,  498,  463,  689,  523,  486,\n      455,  455,  455,  463,  687,  455,  455,  455,  455,  455,\n      455,  455,  455,  732,   24,  495,  510,  591,  590,  589,\n      406,  588,  496,  524,  422,  599,  488,  549,  549,  649,\n      727,  673,  490,  682,  716,  690,  555,  119,  271,  681,\n      648,  543,  492,  534,  680,  598,  246,  715,  494,  672,\n      549,  671,  455,  674,  701,  730,  731,  688,  728,  722,\n      152,  526,  587,  178,  729,  659,  596,  595,  554,  725,\n      707,  721,  720,  178,  576,  511,  717,  518,  677,  504,\n      678,  613,  258,  657,  686,  584,  724,  723,  726,  583,\n      582,  609,  608,  250,  236,  685,  442,  458,  517,  581,\n      500,  628,  604,  679,  580,  579,  623,  619,  718,  521,\n      486,  519,  509,  507,  513,  600,  618,  719,  206,  578,\n      586,  573,  481,  572,  631,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,  134,  134,   -2,   -2,   -2,\n        0,    0,    0,    0,   -2,  134,  134,  134,  134,  134,\n      134,  134,  134,  134,  134,  134,  134,  134,  134,  134,\n      134,  134,  134,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,  418,  418,  418,\n      418,  418,  418,  418,  418,  418,  418,  418,  418,  418,\n      418,  418,  418,  418,  418,  418,  418,  418,  418,  418,\n      418,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,  418,  418,  418,\n      418,  418,  418,  418,  418,  418,  418,  418,  418,  418,\n      418,  418,  418,  418,  418,  418,  418,  418,  418,  418,\n      418,  418,  418,  418,   -3,  418,  418,   -3,  418,  418,\n      418,  418,  418,  418,  -22,  -22,  -22,  -22,  221,  221,\n      221,  221,  221,  221,  221,  221,  221,  221,  221,  221,\n      221,  221,   49,   49,   49,   49,  -22,  -22,  221,  221,\n      221,  221,  221,   49,  221,  221,  221,   92,  221,   92,\n       92,  337,  337,    0,    0,    0,    0,    0,  485,   92,\n        0,    0,    0,    0,    0,    0,  485,  485,  485,    0,\n        0,    0,    0,    0,  485,    0,    0,    0,  337,   92,\n        0,  420,  420,  178,  420,  420,    0,    0,    0,  485,\n      485,    0,  508,    0,    0,    0,    0,  691,    0,    0,\n        0,    0,    0,  455,  119,  682,    0,   39,    0,    0,\n        0,    0,    0,  490,   39,   26,    0,   26,    0,    0,\n      455,  455,  455,    0,  490,  490,    0,    0,   67,  490,\n        0,    0,    0,   67,   35,    0,   35,    0,    0,    0,\n      178\n];\n\nPHP.Parser.prototype.yydefault = [\n        3,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,  468,  468,  468,32767,32767,32767,32767,  285,\n      460,  285,  285,32767,  419,  419,  419,  419,  419,  419,\n      419,  460,32767,32767,32767,32767,32767,  364,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,  465,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,  347,  348,  350,\n      351,  284,  420,  237,  464,  283,  116,  246,  239,  191,\n      282,  223,  119,  312,  365,  314,  363,  367,  313,  290,\n      294,  295,  296,  297,  298,  299,  300,  301,  302,  303,\n      304,  305,  288,  289,  366,  344,  343,  342,  310,  311,\n      287,  315,  317,  287,  316,  333,  334,  331,  332,  335,\n      336,  337,  338,  339,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,  269,  269,\n      269,  269,  324,  325,  229,  229,  229,  229,32767,  270,\n    32767,  229,32767,32767,32767,32767,32767,32767,32767,  413,\n      341,  319,  320,  318,32767,  392,32767,  394,  307,  309,\n      387,  291,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,  389,  421,  421,32767,32767,32767,  381,32767,\n      159,  210,  212,  397,32767,32767,32767,32767,32767,  329,\n    32767,32767,32767,32767,32767,32767,  474,32767,32767,32767,\n    32767,32767,  421,32767,32767,32767,  321,  322,  323,32767,\n    32767,32767,  421,  421,32767,32767,  421,32767,  421,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,  163,32767,32767,  395,  395,32767,32767,\n      163,  390,  163,32767,32767,  163,  163,  176,32767,  174,\n      174,32767,32767,  178,32767,  435,  178,32767,  163,  196,\n      196,  373,  165,  231,  231,  373,  163,  231,32767,  231,\n    32767,32767,32767,   82,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n      383,32767,32767,32767,  401,32767,  414,  433,  381,32767,\n      327,  328,  330,32767,  423,  352,  353,  354,  355,  356,\n      357,  358,  360,32767,  461,  386,32767,32767,32767,32767,\n    32767,32767,   84,  108,  245,32767,  473,   84,  384,32767,\n      473,32767,32767,32767,32767,32767,32767,  286,32767,32767,\n    32767,   84,32767,   84,32767,32767,  457,32767,32767,  421,\n      385,32767,  326,  398,  439,32767,32767,  422,32767,32767,\n      218,   84,32767,  177,32767,32767,32767,32767,32767,32767,\n      401,32767,32767,  179,32767,32767,  421,32767,32767,32767,\n    32767,32767,  281,32767,32767,32767,32767,32767,  421,32767,\n    32767,32767,32767,  222,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,   82,\n       60,32767,  263,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,  121,  121,    3,    3,  121,\n      121,  121,  121,  121,  121,  121,  121,  121,  121,  121,\n      121,  121,  121,  121,  248,  154,  248,  204,  248,  248,\n      207,  196,  196,  255\n];\n\nPHP.Parser.prototype.yygoto = [\n      163,  163,  135,  135,  135,  146,  148,  179,  164,  161,\n      145,  161,  161,  161,  162,  162,  162,  162,  162,  162,\n      162,  145,  157,  158,  159,  160,  176,  174,  177,  410,\n      411,  299,  412,  415,  416,  417,  418,  419,  420,  421,\n      422,  857,  136,  137,  138,  139,  140,  141,  142,  143,\n      144,  147,  173,  175,  178,  195,  198,  199,  201,  202,\n      204,  205,  206,  207,  208,  209,  210,  211,  212,  213,\n      232,  233,  251,  252,  253,  316,  317,  318,  462,  180,\n      181,  182,  183,  184,  185,  186,  187,  188,  189,  190,\n      191,  192,  193,  149,  194,  150,  165,  166,  167,  196,\n      168,  151,  152,  153,  169,  154,  197,  133,  170,  155,\n      171,  172,  156,  521,  200,  257,  246,  464,  432,  687,\n      649,  278,  481,  482,  527,  200,  437,  437,  437,  766,\n        5,  746,  650,  557,  437,  426,  775,  770,  428,  431,\n      444,  465,  466,  468,  483,  279,  651,  336,  450,  453,\n      437,  560,  485,  487,  508,  511,  763,  516,  517,  777,\n      524,  762,  526,  532,  773,  534,  480,  480,  965,  965,\n      965,  965,  965,  965,  965,  965,  965,  965,  965,  965,\n      413,  413,  413,  413,  413,  413,  413,  413,  413,  413,\n      413,  413,  413,  413,  942,  502,  478,  496,  512,  456,\n      298,  437,  437,  451,  471,  437,  437,  674,  437,  229,\n      456,  230,  231,  463,  828,  533,  681,  438,  513,  826,\n      461,  475,  460,  414,  414,  414,  414,  414,  414,  414,\n      414,  414,  414,  414,  414,  414,  414,  301,  674,  674,\n      443,  454, 1033, 1033, 1034, 1034,  425,  531,  425,  708,\n      750,  800,  457,  372, 1033,  943, 1034, 1026,  300, 1018,\n      497,    8,  313,  904,  796,  944,  996,  785,  789, 1007,\n      285,  670, 1036,  329,  307,  310,  804,  668,  544,  332,\n      935,  940,  366,  807,  678,  477,  377,  754,  844,    0,\n      667,  667,  675,  675,  675,  677,    0,  666,  323,  498,\n      328,  312,  312,  258,  259,  283,  459,  261,  322,  284,\n      326,  486,  280,  281,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,  790,  790,  790,  790,  946,    0,  946,\n      790,  790, 1004,  790, 1004,    0,    0,    0,    0,  836,\n        0, 1015, 1015,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,  744,  744,  744,  720,  744,    0,\n      739,  745,  721,  780,  780, 1023,    0,    0, 1002,    0,\n        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,  806,    0,  806,    0,    0,    0,    0, 1008, 1009\n];\n\nPHP.Parser.prototype.yygcheck = [\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   52,   45,  112,  112,   80,    8,   10,\n       10,   64,   55,   55,   55,   45,    8,    8,    8,   10,\n       92,   10,   11,   10,    8,   10,   10,   10,   38,   38,\n       38,   38,   38,   38,   62,   62,   12,   62,   28,    8,\n        8,   28,   28,   28,   28,   28,   28,   28,   28,   28,\n       28,   28,   28,   28,   28,   28,   70,   70,   70,   70,\n       70,   70,   70,   70,   70,   70,   70,   70,   70,   70,\n      113,  113,  113,  113,  113,  113,  113,  113,  113,  113,\n      113,  113,  113,  113,   76,   56,   35,   35,   56,   69,\n       56,    8,    8,    8,    8,    8,    8,   19,    8,   60,\n       69,   60,   60,    7,    7,    7,   25,    8,    7,    7,\n        2,    2,    8,  115,  115,  115,  115,  115,  115,  115,\n      115,  115,  115,  115,  115,  115,  115,   53,   19,   19,\n       53,   53,  123,  123,  124,  124,  109,    5,  109,   44,\n       29,   78,  114,   53,  123,   76,  124,  122,   41,  120,\n       43,   53,   42,   96,   74,   76,   76,   72,   75,  117,\n       14,   21,  123,   18,    9,   13,   79,   20,   66,   17,\n      102,  104,   58,   81,   22,   59,  100,   63,   94,   -1,\n       19,   19,   19,   19,   19,   19,   -1,   19,   45,   45,\n       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,\n       45,   45,   64,   64,   -1,   -1,   -1,   -1,   -1,   -1,\n       -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,\n       -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,\n       -1,   -1,   -1,   52,   52,   52,   52,   52,   -1,   52,\n       52,   52,   80,   52,   80,   -1,   -1,   -1,   -1,   92,\n       -1,   80,   80,   -1,   -1,   -1,   -1,   -1,   -1,   -1,\n       -1,   -1,   -1,   -1,   52,   52,   52,   52,   52,   -1,\n       52,   52,   52,   69,   69,   69,   -1,   -1,   80,   -1,\n       -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,\n       -1,   80,   -1,   80,   -1,   -1,   -1,   -1,   80,   80\n];\n\nPHP.Parser.prototype.yygbase = [\n        0,    0, -317,    0,    0,  237,    0,  210, -136,    4,\n      118,  130,  144,  -10,   16,    0,    0,  -59,   10,  -47,\n       -9,    7,  -77,  -20,    0,  209,    0,    0, -388,  234,\n        0,    0,    0,    0,    0,  165,    0,    0,  103,    0,\n        0,  225,   44,   45,  235,   84,    0,    0,    0,    0,\n        0,    0,  109, -115,    0, -113, -179,    0,  -78,  -81,\n     -347,    0, -122,  -80, -249,    0,  -19,    0,    0,  169,\n      -48,    0,   26,    0,   22,   24,  -99,    0,  230,  -13,\n      114,  -79,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,  120,    0,  -90,    0,   23,    0,    0,    0,\n      -89,    0,  -67,    0,  -69,    0,    0,    0,    0,    8,\n        0,    0, -140,  -34,  229,    9,    0,   21,    0,    0,\n      218,    0,  233,   -3,   -1,    0\n];\n\nPHP.Parser.prototype.yygdefault = [\n    -32768,  380,  565,    2,  566,  637,  645,  504,  400,  433,\n      748,  688,  689,  303,  342,  401,  302,  330,  324,  676,\n      669,  671,  679,  134,  333,  682,    1,  684,  439,  716,\n      291,  692,  292,  507,  694,  446,  696,  697,  427,  304,\n      305,  447,  311,  479,  707,  203,  308,  709,  290,  710,\n      719,  335,  293,  510,  489,  469,  501,  402,  363,  476,\n      228,  455,  473,  753,  277,  761,  549,  769,  772,  403,\n      404,  470,  784,  368,  794,  788,  960,  319,  799,  805,\n      991,  808,  811,  349,  331,  327,  815,  816,    4,  820,\n      522,  523,  835,  239,  843,  856,  347,  923,  925,  441,\n      374,  936,  360,  334,  939,  995,  354,  405,  364,  952,\n      260,  282,  245,  406,  423,  249,  407,  365,  998,  314,\n     1019,  424, 1027, 1035,  275,  474\n];\n\nPHP.Parser.prototype.yylhs = [\n        0,    1,    3,    3,    2,    5,    5,    5,    5,    5,\n        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,\n        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,\n        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,\n        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,\n        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,\n        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,\n        5,    5,    5,    6,    6,    6,    6,    6,    6,    6,\n        7,    7,    8,    8,    9,    4,    4,    4,    4,    4,\n        4,    4,    4,    4,    4,    4,   14,   14,   15,   15,\n       15,   15,   17,   17,   13,   13,   18,   18,   19,   19,\n       20,   20,   21,   21,   16,   16,   22,   24,   24,   25,\n       26,   26,   28,   27,   27,   27,   27,   29,   29,   29,\n       29,   29,   29,   29,   29,   29,   29,   29,   29,   29,\n       29,   29,   29,   29,   29,   29,   29,   29,   29,   29,\n       29,   29,   10,   10,   48,   48,   51,   51,   50,   49,\n       49,   42,   42,   53,   53,   54,   54,   11,   12,   12,\n       12,   57,   57,   57,   58,   58,   61,   61,   59,   59,\n       62,   62,   36,   36,   44,   44,   47,   47,   47,   46,\n       46,   63,   37,   37,   37,   37,   64,   64,   65,   65,\n       66,   66,   34,   34,   30,   30,   67,   32,   32,   68,\n       31,   31,   33,   33,   43,   43,   43,   43,   55,   55,\n       71,   71,   72,   72,   74,   74,   75,   75,   75,   73,\n       73,   56,   56,   76,   76,   77,   77,   78,   78,   78,\n       39,   39,   79,   40,   40,   81,   81,   60,   60,   82,\n       82,   82,   82,   87,   87,   88,   88,   89,   89,   89,\n       89,   89,   90,   91,   91,   86,   86,   83,   83,   85,\n       85,   93,   93,   92,   92,   92,   92,   92,   92,   84,\n       84,   94,   94,   41,   41,   35,   35,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,\n      101,   95,   95,  100,  100,  103,  103,  104,  105,  105,\n      105,  109,  109,   52,   52,   52,   96,   96,  107,  107,\n       97,   97,   99,   99,   99,  102,  102,  113,  113,   70,\n      115,  115,  115,   98,   98,   98,   98,   98,   98,   98,\n       98,   98,   98,   98,   98,   98,   98,   98,   98,   38,\n       38,  111,  111,  111,  106,  106,  106,  116,  116,  116,\n      116,  116,  116,   45,   45,   45,   80,   80,   80,  118,\n      110,  110,  110,  110,  110,  110,  108,  108,  108,  117,\n      117,  117,  117,   69,  119,  119,  120,  120,  120,  120,\n      120,  114,  121,  121,  122,  122,  122,  122,  122,  112,\n      112,  112,  112,  124,  123,  123,  123,  123,  123,  123,\n      123,  125,  125,  125\n];\n\nPHP.Parser.prototype.yylen = [\n        1,    1,    2,    0,    1,    1,    1,    1,    1,    1,\n        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,\n        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,\n        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,\n        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,\n        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,\n        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,\n        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,\n        1,    1,    1,    3,    1,    1,    1,    1,    1,    3,\n        5,    4,    3,    4,    2,    3,    1,    1,    7,    8,\n        6,    7,    3,    1,    3,    1,    3,    1,    1,    3,\n        1,    2,    1,    2,    3,    1,    3,    3,    1,    3,\n        2,    0,    1,    1,    1,    1,    1,    3,    7,   10,\n        5,    7,    9,    5,    3,    3,    3,    3,    3,    3,\n        1,    2,    5,    7,    9,    5,    6,    3,    3,    2,\n        2,    1,    1,    1,    0,    2,    1,    3,    8,    0,\n        4,    1,    3,    0,    1,    0,    1,   10,    7,    6,\n        5,    1,    2,    2,    0,    2,    0,    2,    0,    2,\n        1,    3,    1,    4,    1,    4,    1,    1,    4,    1,\n        3,    3,    3,    4,    4,    5,    0,    2,    4,    3,\n        1,    1,    1,    4,    0,    2,    5,    0,    2,    6,\n        0,    2,    0,    3,    1,    2,    1,    1,    1,    0,\n        1,    3,    4,    6,    1,    2,    1,    1,    1,    0,\n        1,    0,    2,    2,    3,    1,    3,    1,    2,    2,\n        3,    1,    1,    3,    1,    1,    3,    2,    0,    3,\n        4,    9,    3,    1,    3,    0,    2,    4,    5,    4,\n        4,    4,    3,    1,    1,    1,    3,    1,    1,    0,\n        1,    1,    2,    1,    1,    1,    1,    1,    1,    1,\n        3,    1,    3,    3,    1,    0,    1,    1,    3,    3,\n        3,    4,    1,    2,    3,    3,    3,    3,    3,    3,\n        3,    3,    3,    3,    3,    3,    2,    2,    2,    2,\n        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,\n        3,    3,    3,    3,    3,    3,    3,    2,    2,    2,\n        2,    3,    3,    3,    3,    3,    3,    3,    3,    3,\n        3,    3,    5,    4,    3,    4,    4,    2,    2,    4,\n        2,    2,    2,    2,    2,    2,    2,    2,    2,    2,\n        2,    1,    3,    2,    1,    2,    4,    2,   10,   11,\n        7,    3,    2,    0,    4,    1,    3,    2,    2,    2,\n        4,    1,    1,    1,    2,    3,    1,    1,    1,    1,\n        0,    3,    0,    1,    1,    0,    1,    1,    3,    3,\n        4,    1,    1,    1,    1,    1,    1,    1,    1,    1,\n        1,    1,    1,    1,    1,    3,    2,    3,    3,    0,\n        1,    1,    3,    1,    1,    3,    1,    1,    4,    4,\n        4,    1,    4,    1,    1,    3,    1,    4,    2,    3,\n        1,    4,    4,    3,    3,    3,    1,    3,    1,    1,\n        3,    1,    1,    4,    3,    1,    1,    1,    3,    3,\n        0,    1,    3,    1,    3,    1,    4,    2,    0,    2,\n        2,    1,    2,    1,    1,    4,    3,    3,    3,    6,\n        3,    1,    1,    1\n];\n\n\n\nexports.PHP = PHP;\n});\n"
  },
  {
    "path": "lib/ace/mode/php.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar PhpHighlightRules = require(\"./php_highlight_rules\").PhpHighlightRules;\nvar PhpLangHighlightRules = require(\"./php_highlight_rules\").PhpLangHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar PhpCompletions = require(\"./php_completions\").PhpCompletions;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar unicode = require(\"../unicode\");\nvar HtmlMode = require(\"./html\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\n\nvar PhpMode = function(opts) {\n    this.HighlightRules = PhpLangHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.$completer = new PhpCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(PhpMode, TextMode);\n\n(function() {\n\n    this.tokenRe = new RegExp(\"^[\" + unicode.wordChars + \"_]+\", \"g\");\n    this.nonTokenRe = new RegExp(\"^(?:[^\" + unicode.wordChars + \"_]|\\\\s])+\", \"g\");\n\n    this.lineCommentStart = [\"//\", \"#\"];\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[:]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState != \"doc-start\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.$id = \"ace/mode/php-inline\";\n}).call(PhpMode.prototype);\n\nvar Mode = function(opts) {\n    if (opts && opts.inline) {\n        var mode = new PhpMode();\n        mode.createWorker = this.createWorker;\n        mode.inlinePhp = true;\n        return mode;\n    }\n    HtmlMode.call(this);\n    this.HighlightRules = PhpHighlightRules;\n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode,\n        \"php-\": PhpMode\n    });\n    this.foldingRules.subModes[\"php-\"] = new CStyleFoldMode();\n};\noop.inherits(Mode, HtmlMode);\n\n(function() {\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/php_worker\", \"PhpWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.inlinePhp)\n            worker.call(\"setOptions\", [{inline: true}]);\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/php\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/php_completions.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar functionMap = {\n    \"abs\": [\n        \"int abs(int number)\",\n        \"Return the absolute value of the number\"\n    ],\n    \"acos\": [\n        \"float acos(float number)\",\n        \"Return the arc cosine of the number in radians\"\n    ],\n    \"acosh\": [\n        \"float acosh(float number)\",\n        \"Returns the inverse hyperbolic cosine of the number, i.e. the value whose hyperbolic cosine is number\"\n    ],\n    \"addGlob\": [\n        \"bool addGlob(string pattern[,int flags [, array options]])\",\n        \"Add files matching the glob pattern. See php's glob for the pattern syntax.\"\n    ],\n    \"addPattern\": [\n        \"bool addPattern(string pattern[, string path [, array options]])\",\n        \"Add files matching the pcre pattern. See php's pcre for the pattern syntax.\"\n    ],\n    \"addcslashes\": [\n        \"string addcslashes(string str, string charlist)\",\n        \"Escapes all chars mentioned in charlist with backslash. It creates octal representations if asked to backslash characters with 8th bit set or with ASCII<32 (except '\\\\n', '\\\\r', '\\\\t' etc...)\"\n    ],\n    \"addslashes\": [\n        \"string addslashes(string str)\",\n        \"Escapes single quote, double quotes and backslash characters in a string with backslashes\"\n    ],\n    \"apache_child_terminate\": [\n        \"bool apache_child_terminate(void)\",\n        \"Terminate apache process after this request\"\n    ],\n    \"apache_get_modules\": [\n        \"array apache_get_modules(void)\",\n        \"Get a list of loaded Apache modules\"\n    ],\n    \"apache_get_version\": [\n        \"string apache_get_version(void)\",\n        \"Fetch Apache version\"\n    ],\n    \"apache_getenv\": [\n        \"bool apache_getenv(string variable [, bool walk_to_top])\",\n        \"Get an Apache subprocess_env variable\"\n    ],\n    \"apache_lookup_uri\": [\n        \"object apache_lookup_uri(string URI)\",\n        \"Perform a partial request of the given URI to obtain information about it\"\n    ],\n    \"apache_note\": [\n        \"string apache_note(string note_name [, string note_value])\",\n        \"Get and set Apache request notes\"\n    ],\n    \"apache_request_auth_name\": [\n        \"string apache_request_auth_name()\",\n        \"\"\n    ],\n    \"apache_request_auth_type\": [\n        \"string apache_request_auth_type()\",\n        \"\"\n    ],\n    \"apache_request_discard_request_body\": [\n        \"long apache_request_discard_request_body()\",\n        \"\"\n    ],\n    \"apache_request_err_headers_out\": [\n        \"array apache_request_err_headers_out([{string name|array list} [, string value [, bool replace = false]]])\",\n        \"* fetch all headers that go out in case of an error or a subrequest\"\n    ],\n    \"apache_request_headers\": [\n        \"array apache_request_headers(void)\",\n        \"Fetch all HTTP request headers\"\n    ],\n    \"apache_request_headers_in\": [\n        \"array apache_request_headers_in()\",\n        \"* fetch all incoming request headers\"\n    ],\n    \"apache_request_headers_out\": [\n        \"array apache_request_headers_out([{string name|array list} [, string value [, bool replace = false]]])\",\n        \"* fetch all outgoing request headers\"\n    ],\n    \"apache_request_is_initial_req\": [\n        \"bool apache_request_is_initial_req()\",\n        \"\"\n    ],\n    \"apache_request_log_error\": [\n        \"boolean apache_request_log_error(string message, [long facility])\",\n        \"\"\n    ],\n    \"apache_request_meets_conditions\": [\n        \"long apache_request_meets_conditions()\",\n        \"\"\n    ],\n    \"apache_request_remote_host\": [\n        \"int apache_request_remote_host([int type])\",\n        \"\"\n    ],\n    \"apache_request_run\": [\n        \"long apache_request_run()\",\n        \"This is a wrapper for ap_sub_run_req and ap_destory_sub_req.  It takes      sub_request, runs it, destroys it, and returns it's status.\"\n    ],\n    \"apache_request_satisfies\": [\n        \"long apache_request_satisfies()\",\n        \"\"\n    ],\n    \"apache_request_server_port\": [\n        \"int apache_request_server_port()\",\n        \"\"\n    ],\n    \"apache_request_set_etag\": [\n        \"void apache_request_set_etag()\",\n        \"\"\n    ],\n    \"apache_request_set_last_modified\": [\n        \"void apache_request_set_last_modified()\",\n        \"\"\n    ],\n    \"apache_request_some_auth_required\": [\n        \"bool apache_request_some_auth_required()\",\n        \"\"\n    ],\n    \"apache_request_sub_req_lookup_file\": [\n        \"object apache_request_sub_req_lookup_file(string file)\",\n        \"Returns sub-request for the specified file.  You would     need to run it yourself with run().\"\n    ],\n    \"apache_request_sub_req_lookup_uri\": [\n        \"object apache_request_sub_req_lookup_uri(string uri)\",\n        \"Returns sub-request for the specified uri.  You would     need to run it yourself with run()\"\n    ],\n    \"apache_request_sub_req_method_uri\": [\n        \"object apache_request_sub_req_method_uri(string method, string uri)\",\n        \"Returns sub-request for the specified file.  You would     need to run it yourself with run().\"\n    ],\n    \"apache_request_update_mtime\": [\n        \"long apache_request_update_mtime([int dependency_mtime])\",\n        \"\"\n    ],\n    \"apache_reset_timeout\": [\n        \"bool apache_reset_timeout(void)\",\n        \"Reset the Apache write timer\"\n    ],\n    \"apache_response_headers\": [\n        \"array apache_response_headers(void)\",\n        \"Fetch all HTTP response headers\"\n    ],\n    \"apache_setenv\": [\n        \"bool apache_setenv(string variable, string value [, bool walk_to_top])\",\n        \"Set an Apache subprocess_env variable\"\n    ],\n    \"array_change_key_case\": [\n        \"array array_change_key_case(array input [, int case=CASE_LOWER])\",\n        \"Retuns an array with all string keys lowercased [or uppercased]\"\n    ],\n    \"array_chunk\": [\n        \"array array_chunk(array input, int size [, bool preserve_keys])\",\n        \"Split array into chunks\"\n    ],\n    \"array_combine\": [\n        \"array array_combine(array keys, array values)\",\n        \"Creates an array by using the elements of the first parameter as keys and the elements of the second as the corresponding values\"\n    ],\n    \"array_count_values\": [\n        \"array array_count_values(array input)\",\n        \"Return the value as key and the frequency of that value in input as value\"\n    ],\n    \"array_diff\": [\n        \"array array_diff(array arr1, array arr2 [, array ...])\",\n        \"Returns the entries of arr1 that have values which are not present in any of the others arguments.\"\n    ],\n    \"array_diff_assoc\": [\n        \"array array_diff_assoc(array arr1, array arr2 [, array ...])\",\n        \"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal\"\n    ],\n    \"array_diff_key\": [\n        \"array array_diff_key(array arr1, array arr2 [, array ...])\",\n        \"Returns the entries of arr1 that have keys which are not present in any of the others arguments. This function is like array_diff() but works on the keys instead of the values. The associativity is preserved.\"\n    ],\n    \"array_diff_uassoc\": [\n        \"array array_diff_uassoc(array arr1, array arr2 [, array ...], callback data_comp_func)\",\n        \"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Elements are compared by user supplied function.\"\n    ],\n    \"array_diff_ukey\": [\n        \"array array_diff_ukey(array arr1, array arr2 [, array ...], callback key_comp_func)\",\n        \"Returns the entries of arr1 that have keys which are not present in any of the others arguments. User supplied function is used for comparing the keys. This function is like array_udiff() but works on the keys instead of the values. The associativity is preserved.\"\n    ],\n    \"array_fill\": [\n        \"array array_fill(int start_key, int num, mixed val)\",\n        \"Create an array containing num elements starting with index start_key each initialized to val\"\n    ],\n    \"array_fill_keys\": [\n        \"array array_fill_keys(array keys, mixed val)\",\n        \"Create an array using the elements of the first parameter as keys each initialized to val\"\n    ],\n    \"array_filter\": [\n        \"array array_filter(array input [, mixed callback])\",\n        \"Filters elements from the array via the callback.\"\n    ],\n    \"array_flip\": [\n        \"array array_flip(array input)\",\n        \"Return array with key <-> value flipped\"\n    ],\n    \"array_intersect\": [\n        \"array array_intersect(array arr1, array arr2 [, array ...])\",\n        \"Returns the entries of arr1 that have values which are present in all the other arguments\"\n    ],\n    \"array_intersect_assoc\": [\n        \"array array_intersect_assoc(array arr1, array arr2 [, array ...])\",\n        \"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check\"\n    ],\n    \"array_intersect_key\": [\n        \"array array_intersect_key(array arr1, array arr2 [, array ...])\",\n        \"Returns the entries of arr1 that have keys which are present in all the other arguments. Kind of equivalent to array_diff(array_keys($arr1), array_keys($arr2)[,array_keys(...)]). Equivalent of array_intersect_assoc() but does not do compare of the data.\"\n    ],\n    \"array_intersect_uassoc\": [\n        \"array array_intersect_uassoc(array arr1, array arr2 [, array ...], callback key_compare_func)\",\n        \"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check and they are compared by using an user-supplied callback.\"\n    ],\n    \"array_intersect_ukey\": [\n        \"array array_intersect_ukey(array arr1, array arr2 [, array ...], callback key_compare_func)\",\n        \"Returns the entries of arr1 that have keys which are present in all the other arguments. Kind of equivalent to array_diff(array_keys($arr1), array_keys($arr2)[,array_keys(...)]). The comparison of the keys is performed by a user supplied function. Equivalent of array_intersect_uassoc() but does not do compare of the data.\"\n    ],\n    \"array_key_exists\": [\n        \"bool array_key_exists(mixed key, array search)\",\n        \"Checks if the given key or index exists in the array\"\n    ],\n    \"array_keys\": [\n        \"array array_keys(array input [, mixed search_value[, bool strict]])\",\n        \"Return just the keys from the input array, optionally only for the specified search_value\"\n    ],\n    \"array_map\": [\n        \"array array_map(mixed callback, array input1 [, array input2 ,...])\",\n        \"Applies the callback to the elements in given arrays.\"\n    ],\n    \"array_merge\": [\n        \"array array_merge(array arr1, array arr2 [, array ...])\",\n        \"Merges elements from passed arrays into one array\"\n    ],\n    \"array_merge_recursive\": [\n        \"array array_merge_recursive(array arr1, array arr2 [, array ...])\",\n        \"Recursively merges elements from passed arrays into one array\"\n    ],\n    \"array_multisort\": [\n        \"bool array_multisort(array ar1 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]] [, array ar2 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]], ...])\",\n        \"Sort multiple arrays at once similar to how ORDER BY clause works in SQL\"\n    ],\n    \"array_pad\": [\n        \"array array_pad(array input, int pad_size, mixed pad_value)\",\n        \"Returns a copy of input array padded with pad_value to size pad_size\"\n    ],\n    \"array_pop\": [\n        \"mixed array_pop(array stack)\",\n        \"Pops an element off the end of the array\"\n    ],\n    \"array_product\": [\n        \"mixed array_product(array input)\",\n        \"Returns the product of the array entries\"\n    ],\n    \"array_push\": [\n        \"int array_push(array stack, mixed var [, mixed ...])\",\n        \"Pushes elements onto the end of the array\"\n    ],\n    \"array_rand\": [\n        \"mixed array_rand(array input [, int num_req])\",\n        \"Return key/keys for random entry/entries in the array\"\n    ],\n    \"array_reduce\": [\n        \"mixed array_reduce(array input, mixed callback [, mixed initial])\",\n        \"Iteratively reduce the array to a single value via the callback.\"\n    ],\n    \"array_replace\": [\n        \"array array_replace(array arr1, array arr2 [, array ...])\",\n        \"Replaces elements from passed arrays into one array\"\n    ],\n    \"array_replace_recursive\": [\n        \"array array_replace_recursive(array arr1, array arr2 [, array ...])\",\n        \"Recursively replaces elements from passed arrays into one array\"\n    ],\n    \"array_reverse\": [\n        \"array array_reverse(array input [, bool preserve keys])\",\n        \"Return input as a new array with the order of the entries reversed\"\n    ],\n    \"array_search\": [\n        \"mixed array_search(mixed needle, array haystack [, bool strict])\",\n        \"Searches the array for a given value and returns the corresponding key if successful\"\n    ],\n    \"array_shift\": [\n        \"mixed array_shift(array stack)\",\n        \"Pops an element off the beginning of the array\"\n    ],\n    \"array_slice\": [\n        \"array array_slice(array input, int offset [, int length [, bool preserve_keys]])\",\n        \"Returns elements specified by offset and length\"\n    ],\n    \"array_splice\": [\n        \"array array_splice(array input, int offset [, int length [, array replacement]])\",\n        \"Removes the elements designated by offset and length and replace them with supplied array\"\n    ],\n    \"array_sum\": [\n        \"mixed array_sum(array input)\",\n        \"Returns the sum of the array entries\"\n    ],\n    \"array_udiff\": [\n        \"array array_udiff(array arr1, array arr2 [, array ...], callback data_comp_func)\",\n        \"Returns the entries of arr1 that have values which are not present in any of the others arguments. Elements are compared by user supplied function.\"\n    ],\n    \"array_udiff_assoc\": [\n        \"array array_udiff_assoc(array arr1, array arr2 [, array ...], callback key_comp_func)\",\n        \"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys are compared by user supplied function.\"\n    ],\n    \"array_udiff_uassoc\": [\n        \"array array_udiff_uassoc(array arr1, array arr2 [, array ...], callback data_comp_func, callback key_comp_func)\",\n        \"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys and elements are compared by user supplied functions.\"\n    ],\n    \"array_uintersect\": [\n        \"array array_uintersect(array arr1, array arr2 [, array ...], callback data_compare_func)\",\n        \"Returns the entries of arr1 that have values which are present in all the other arguments. Data is compared by using an user-supplied callback.\"\n    ],\n    \"array_uintersect_assoc\": [\n        \"array array_uintersect_assoc(array arr1, array arr2 [, array ...], callback data_compare_func)\",\n        \"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check. Data is compared by using an user-supplied callback.\"\n    ],\n    \"array_uintersect_uassoc\": [\n        \"array array_uintersect_uassoc(array arr1, array arr2 [, array ...], callback data_compare_func, callback key_compare_func)\",\n        \"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check. Both data and keys are compared by using user-supplied callbacks.\"\n    ],\n    \"array_unique\": [\n        \"array array_unique(array input [, int sort_flags])\",\n        \"Removes duplicate values from array\"\n    ],\n    \"array_unshift\": [\n        \"int array_unshift(array stack, mixed var [, mixed ...])\",\n        \"Pushes elements onto the beginning of the array\"\n    ],\n    \"array_values\": [\n        \"array array_values(array input)\",\n        \"Return just the values from the input array\"\n    ],\n    \"array_walk\": [\n        \"bool array_walk(array input, string funcname [, mixed userdata])\",\n        \"Apply a user function to every member of an array\"\n    ],\n    \"array_walk_recursive\": [\n        \"bool array_walk_recursive(array input, string funcname [, mixed userdata])\",\n        \"Apply a user function recursively to every member of an array\"\n    ],\n    \"arsort\": [\n        \"bool arsort(array &array_arg [, int sort_flags])\",\n        \"Sort an array in reverse order and maintain index association\"\n    ],\n    \"asin\": [\n        \"float asin(float number)\",\n        \"Returns the arc sine of the number in radians\"\n    ],\n    \"asinh\": [\n        \"float asinh(float number)\",\n        \"Returns the inverse hyperbolic sine of the number, i.e. the value whose hyperbolic sine is number\"\n    ],\n    \"asort\": [\n        \"bool asort(array &array_arg [, int sort_flags])\",\n        \"Sort an array and maintain index association\"\n    ],\n    \"assert\": [\n        \"int assert(string|bool assertion)\",\n        \"Checks if assertion is false\"\n    ],\n    \"assert_options\": [\n        \"mixed assert_options(int what [, mixed value])\",\n        \"Set/get the various assert flags\"\n    ],\n    \"atan\": [\n        \"float atan(float number)\",\n        \"Returns the arc tangent of the number in radians\"\n    ],\n    \"atan2\": [\n        \"float atan2(float y, float x)\",\n        \"Returns the arc tangent of y/x, with the resulting quadrant determined by the signs of y and x\"\n    ],\n    \"atanh\": [\n        \"float atanh(float number)\",\n        \"Returns the inverse hyperbolic tangent of the number, i.e. the value whose hyperbolic tangent is number\"\n    ],\n    \"attachIterator\": [\n        \"void attachIterator(Iterator iterator[, mixed info])\",\n        \"Attach a new iterator\"\n    ],\n    \"base64_decode\": [\n        \"string base64_decode(string str[, bool strict])\",\n        \"Decodes string using MIME base64 algorithm\"\n    ],\n    \"base64_encode\": [\n        \"string base64_encode(string str)\",\n        \"Encodes string using MIME base64 algorithm\"\n    ],\n    \"base_convert\": [\n        \"string base_convert(string number, int frombase, int tobase)\",\n        \"Converts a number in a string from any base <= 36 to any base <= 36\"\n    ],\n    \"basename\": [\n        \"string basename(string path [, string suffix])\",\n        \"Returns the filename component of the path\"\n    ],\n    \"bcadd\": [\n        \"string bcadd(string left_operand, string right_operand [, int scale])\",\n        \"Returns the sum of two arbitrary precision numbers\"\n    ],\n    \"bccomp\": [\n        \"int bccomp(string left_operand, string right_operand [, int scale])\",\n        \"Compares two arbitrary precision numbers\"\n    ],\n    \"bcdiv\": [\n        \"string bcdiv(string left_operand, string right_operand [, int scale])\",\n        \"Returns the quotient of two arbitrary precision numbers (division)\"\n    ],\n    \"bcmod\": [\n        \"string bcmod(string left_operand, string right_operand)\",\n        \"Returns the modulus of the two arbitrary precision operands\"\n    ],\n    \"bcmul\": [\n        \"string bcmul(string left_operand, string right_operand [, int scale])\",\n        \"Returns the multiplication of two arbitrary precision numbers\"\n    ],\n    \"bcpow\": [\n        \"string bcpow(string x, string y [, int scale])\",\n        \"Returns the value of an arbitrary precision number raised to the power of another\"\n    ],\n    \"bcpowmod\": [\n        \"string bcpowmod(string x, string y, string mod [, int scale])\",\n        \"Returns the value of an arbitrary precision number raised to the power of another reduced by a modulous\"\n    ],\n    \"bcscale\": [\n        \"bool bcscale(int scale)\",\n        \"Sets default scale parameter for all bc math functions\"\n    ],\n    \"bcsqrt\": [\n        \"string bcsqrt(string operand [, int scale])\",\n        \"Returns the square root of an arbitray precision number\"\n    ],\n    \"bcsub\": [\n        \"string bcsub(string left_operand, string right_operand [, int scale])\",\n        \"Returns the difference between two arbitrary precision numbers\"\n    ],\n    \"bin2hex\": [\n        \"string bin2hex(string data)\",\n        \"Converts the binary representation of data to hex\"\n    ],\n    \"bind_textdomain_codeset\": [\n        \"string bind_textdomain_codeset (string domain, string codeset)\",\n        \"Specify the character encoding in which the messages from the DOMAIN message catalog will be returned.\"\n    ],\n    \"bindec\": [\n        \"int bindec(string binary_number)\",\n        \"Returns the decimal equivalent of the binary number\"\n    ],\n    \"bindtextdomain\": [\n        \"string bindtextdomain(string domain_name, string dir)\",\n        \"Bind to the text domain domain_name, looking for translations in dir. Returns the current domain\"\n    ],\n    \"birdstep_autocommit\": [\n        \"bool birdstep_autocommit(int index)\",\n        \"\"\n    ],\n    \"birdstep_close\": [\n        \"bool birdstep_close(int id)\",\n        \"\"\n    ],\n    \"birdstep_commit\": [\n        \"bool birdstep_commit(int index)\",\n        \"\"\n    ],\n    \"birdstep_connect\": [\n        \"int birdstep_connect(string server, string user, string pass)\",\n        \"\"\n    ],\n    \"birdstep_exec\": [\n        \"int birdstep_exec(int index, string exec_str)\",\n        \"\"\n    ],\n    \"birdstep_fetch\": [\n        \"bool birdstep_fetch(int index)\",\n        \"\"\n    ],\n    \"birdstep_fieldname\": [\n        \"string birdstep_fieldname(int index, int col)\",\n        \"\"\n    ],\n    \"birdstep_fieldnum\": [\n        \"int birdstep_fieldnum(int index)\",\n        \"\"\n    ],\n    \"birdstep_freeresult\": [\n        \"bool birdstep_freeresult(int index)\",\n        \"\"\n    ],\n    \"birdstep_off_autocommit\": [\n        \"bool birdstep_off_autocommit(int index)\",\n        \"\"\n    ],\n    \"birdstep_result\": [\n        \"mixed birdstep_result(int index, mixed col)\",\n        \"\"\n    ],\n    \"birdstep_rollback\": [\n        \"bool birdstep_rollback(int index)\",\n        \"\"\n    ],\n    \"bzcompress\": [\n        \"string bzcompress(string source [, int blocksize100k [, int workfactor]])\",\n        \"Compresses a string into BZip2 encoded data\"\n    ],\n    \"bzdecompress\": [\n        \"string bzdecompress(string source [, int small])\",\n        \"Decompresses BZip2 compressed data\"\n    ],\n    \"bzerrno\": [\n        \"int bzerrno(resource bz)\",\n        \"Returns the error number\"\n    ],\n    \"bzerror\": [\n        \"array bzerror(resource bz)\",\n        \"Returns the error number and error string in an associative array\"\n    ],\n    \"bzerrstr\": [\n        \"string bzerrstr(resource bz)\",\n        \"Returns the error string\"\n    ],\n    \"bzopen\": [\n        \"resource bzopen(string|int file|fp, string mode)\",\n        \"Opens a new BZip2 stream\"\n    ],\n    \"bzread\": [\n        \"string bzread(resource bz[, int length])\",\n        \"Reads up to length bytes from a BZip2 stream, or 1024 bytes if length is not specified\"\n    ],\n    \"cal_days_in_month\": [\n        \"int cal_days_in_month(int calendar, int month, int year)\",\n        \"Returns the number of days in a month for a given year and calendar\"\n    ],\n    \"cal_from_jd\": [\n        \"array cal_from_jd(int jd, int calendar)\",\n        \"Converts from Julian Day Count to a supported calendar and return extended information\"\n    ],\n    \"cal_info\": [\n        \"array cal_info([int calendar])\",\n        \"Returns information about a particular calendar\"\n    ],\n    \"cal_to_jd\": [\n        \"int cal_to_jd(int calendar, int month, int day, int year)\",\n        \"Converts from a supported calendar to Julian Day Count\"\n    ],\n    \"call_user_func\": [\n        \"mixed call_user_func(mixed function_name [, mixed parmeter] [, mixed ...])\",\n        \"Call a user function which is the first parameter\"\n    ],\n    \"call_user_func_array\": [\n        \"mixed call_user_func_array(string function_name, array parameters)\",\n        \"Call a user function which is the first parameter with the arguments contained in array\"\n    ],\n    \"call_user_method\": [\n        \"mixed call_user_method(string method_name, mixed object [, mixed parameter] [, mixed ...])\",\n        \"Call a user method on a specific object or class\"\n    ],\n    \"call_user_method_array\": [\n        \"mixed call_user_method_array(string method_name, mixed object, array params)\",\n        \"Call a user method on a specific object or class using a parameter array\"\n    ],\n    \"ceil\": [\n        \"float ceil(float number)\",\n        \"Returns the next highest integer value of the number\"\n    ],\n    \"chdir\": [\n        \"bool chdir(string directory)\",\n        \"Change the current directory\"\n    ],\n    \"checkdate\": [\n        \"bool checkdate(int month, int day, int year)\",\n        \"Returns true(1) if it is a valid date in gregorian calendar\"\n    ],\n    \"chgrp\": [\n        \"bool chgrp(string filename, mixed group)\",\n        \"Change file group\"\n    ],\n    \"chmod\": [\n        \"bool chmod(string filename, int mode)\",\n        \"Change file mode\"\n    ],\n    \"chown\": [\n        \"bool chown (string filename, mixed user)\",\n        \"Change file owner\"\n    ],\n    \"chr\": [\n        \"string chr(int ascii)\",\n        \"Converts ASCII code to a character\"\n    ],\n    \"chroot\": [\n        \"bool chroot(string directory)\",\n        \"Change root directory\"\n    ],\n    \"chunk_split\": [\n        \"string chunk_split(string str [, int chunklen [, string ending]])\",\n        \"Returns split line\"\n    ],\n    \"class_alias\": [\n        \"bool class_alias(string user_class_name , string alias_name [, bool autoload])\",\n        \"Creates an alias for user defined class\"\n    ],\n    \"class_exists\": [\n        \"bool class_exists(string classname [, bool autoload])\",\n        \"Checks if the class exists\"\n    ],\n    \"class_implements\": [\n        \"array class_implements(mixed what [, bool autoload ])\",\n        \"Return all classes and interfaces implemented by SPL\"\n    ],\n    \"class_parents\": [\n        \"array class_parents(object instance [, boolean autoload = true])\",\n        \"Return an array containing the names of all parent classes\"\n    ],\n    \"clearstatcache\": [\n        \"void clearstatcache([bool clear_realpath_cache[, string filename]])\",\n        \"Clear file stat cache\"\n    ],\n    \"closedir\": [\n        \"void closedir([resource dir_handle])\",\n        \"Close directory connection identified by the dir_handle\"\n    ],\n    \"closelog\": [\n        \"bool closelog(void)\",\n        \"Close connection to system logger\"\n    ],\n    \"collator_asort\": [\n        \"bool collator_asort( Collator $coll, array(string) $arr )\",\n        \"* Sort array using specified collator, maintaining index association.\"\n    ],\n    \"collator_compare\": [\n        \"int collator_compare( Collator $coll, string $str1, string $str2 )\",\n        \"* Compare two strings.\"\n    ],\n    \"collator_create\": [\n        \"Collator collator_create( string $locale )\",\n        \"* Create collator.\"\n    ],\n    \"collator_get_attribute\": [\n        \"int collator_get_attribute( Collator $coll, int $attr )\",\n        \"* Get collation attribute value.\"\n    ],\n    \"collator_get_error_code\": [\n        \"int collator_get_error_code( Collator $coll )\",\n        \"* Get collator's last error code.\"\n    ],\n    \"collator_get_error_message\": [\n        \"string collator_get_error_message( Collator $coll )\",\n        \"* Get text description for collator's last error code.\"\n    ],\n    \"collator_get_locale\": [\n        \"string collator_get_locale( Collator $coll, int $type )\",\n        \"* Gets the locale name of the collator.\"\n    ],\n    \"collator_get_sort_key\": [\n        \"bool collator_get_sort_key( Collator $coll, string $str )\",\n        \"* Get a sort key for a string from a Collator. }}}\"\n    ],\n    \"collator_get_strength\": [\n        \"int collator_get_strength(Collator coll)\",\n        \"* Returns the current collation strength.\"\n    ],\n    \"collator_set_attribute\": [\n        \"bool collator_set_attribute( Collator $coll, int $attr, int $val )\",\n        \"* Set collation attribute.\"\n    ],\n    \"collator_set_strength\": [\n        \"bool collator_set_strength(Collator coll, int strength)\",\n        \"* Set the collation strength.\"\n    ],\n    \"collator_sort\": [\n        \"bool collator_sort(  Collator $coll, array(string) $arr [, int $sort_flags] )\",\n        \"* Sort array using specified collator.\"\n    ],\n    \"collator_sort_with_sort_keys\": [\n        \"bool collator_sort_with_sort_keys( Collator $coll, array(string) $arr )\",\n        \"* Equivalent to standard PHP sort using Collator.  * Uses ICU ucol_getSortKey for performance.\"\n    ],\n    \"com_create_guid\": [\n        \"string com_create_guid()\",\n        \"Generate a globally unique identifier (GUID)\"\n    ],\n    \"com_event_sink\": [\n        \"bool com_event_sink(object comobject, object sinkobject [, mixed sinkinterface])\",\n        \"Connect events from a COM object to a PHP object\"\n    ],\n    \"com_get_active_object\": [\n        \"object com_get_active_object(string progid [, int code_page ])\",\n        \"Returns a handle to an already running instance of a COM object\"\n    ],\n    \"com_load_typelib\": [\n        \"bool com_load_typelib(string typelib_name [, int case_insensitive])\",\n        \"Loads a Typelibrary and registers its constants\"\n    ],\n    \"com_message_pump\": [\n        \"bool com_message_pump([int timeoutms])\",\n        \"Process COM messages, sleeping for up to timeoutms milliseconds\"\n    ],\n    \"com_print_typeinfo\": [\n        \"bool com_print_typeinfo(object comobject | string typelib, string dispinterface, bool wantsink)\",\n        \"Print out a PHP class definition for a dispatchable interface\"\n    ],\n    \"compact\": [\n        \"array compact(mixed var_names [, mixed ...])\",\n        \"Creates a hash containing variables and their values\"\n    ],\n    \"compose_locale\": [\n        \"static string compose_locale($array)\",\n        \"* Creates a locale by combining the parts of locale-ID passed  * }}}\"\n    ],\n    \"confirm_extname_compiled\": [\n        \"string confirm_extname_compiled(string arg)\",\n        \"Return a string to confirm that the module is compiled in\"\n    ],\n    \"connection_aborted\": [\n        \"int connection_aborted(void)\",\n        \"Returns true if client disconnected\"\n    ],\n    \"connection_status\": [\n        \"int connection_status(void)\",\n        \"Returns the connection status bitfield\"\n    ],\n    \"constant\": [\n        \"mixed constant(string const_name)\",\n        \"Given the name of a constant this function will return the constant's associated value\"\n    ],\n    \"convert_cyr_string\": [\n        \"string convert_cyr_string(string str, string from, string to)\",\n        \"Convert from one Cyrillic character set to another\"\n    ],\n    \"convert_uudecode\": [\n        \"string convert_uudecode(string data)\",\n        \"decode a uuencoded string\"\n    ],\n    \"convert_uuencode\": [\n        \"string convert_uuencode(string data)\",\n        \"uuencode a string\"\n    ],\n    \"copy\": [\n        \"bool copy(string source_file, string destination_file [, resource context])\",\n        \"Copy a file\"\n    ],\n    \"cos\": [\n        \"float cos(float number)\",\n        \"Returns the cosine of the number in radians\"\n    ],\n    \"cosh\": [\n        \"float cosh(float number)\",\n        \"Returns the hyperbolic cosine of the number, defined as (exp(number) + exp(-number))/2\"\n    ],\n    \"count\": [\n        \"int count(mixed var [, int mode])\",\n        \"Count the number of elements in a variable (usually an array)\"\n    ],\n    \"count_chars\": [\n        \"mixed count_chars(string input [, int mode])\",\n        \"Returns info about what characters are used in input\"\n    ],\n    \"crc32\": [\n        \"string crc32(string str)\",\n        \"Calculate the crc32 polynomial of a string\"\n    ],\n    \"create_function\": [\n        \"string create_function(string args, string code)\",\n        \"Creates an anonymous function, and returns its name (funny, eh?)\"\n    ],\n    \"crypt\": [\n        \"string crypt(string str [, string salt])\",\n        \"Hash a string\"\n    ],\n    \"ctype_alnum\": [\n        \"bool ctype_alnum(mixed c)\",\n        \"Checks for alphanumeric character(s)\"\n    ],\n    \"ctype_alpha\": [\n        \"bool ctype_alpha(mixed c)\",\n        \"Checks for alphabetic character(s)\"\n    ],\n    \"ctype_cntrl\": [\n        \"bool ctype_cntrl(mixed c)\",\n        \"Checks for control character(s)\"\n    ],\n    \"ctype_digit\": [\n        \"bool ctype_digit(mixed c)\",\n        \"Checks for numeric character(s)\"\n    ],\n    \"ctype_graph\": [\n        \"bool ctype_graph(mixed c)\",\n        \"Checks for any printable character(s) except space\"\n    ],\n    \"ctype_lower\": [\n        \"bool ctype_lower(mixed c)\",\n        \"Checks for lowercase character(s)\"\n    ],\n    \"ctype_print\": [\n        \"bool ctype_print(mixed c)\",\n        \"Checks for printable character(s)\"\n    ],\n    \"ctype_punct\": [\n        \"bool ctype_punct(mixed c)\",\n        \"Checks for any printable character which is not whitespace or an alphanumeric character\"\n    ],\n    \"ctype_space\": [\n        \"bool ctype_space(mixed c)\",\n        \"Checks for whitespace character(s)\"\n    ],\n    \"ctype_upper\": [\n        \"bool ctype_upper(mixed c)\",\n        \"Checks for uppercase character(s)\"\n    ],\n    \"ctype_xdigit\": [\n        \"bool ctype_xdigit(mixed c)\",\n        \"Checks for character(s) representing a hexadecimal digit\"\n    ],\n    \"curl_close\": [\n        \"void curl_close(resource ch)\",\n        \"Close a cURL session\"\n    ],\n    \"curl_copy_handle\": [\n        \"resource curl_copy_handle(resource ch)\",\n        \"Copy a cURL handle along with all of it's preferences\"\n    ],\n    \"curl_errno\": [\n        \"int curl_errno(resource ch)\",\n        \"Return an integer containing the last error number\"\n    ],\n    \"curl_error\": [\n        \"string curl_error(resource ch)\",\n        \"Return a string contain the last error for the current session\"\n    ],\n    \"curl_exec\": [\n        \"bool curl_exec(resource ch)\",\n        \"Perform a cURL session\"\n    ],\n    \"curl_getinfo\": [\n        \"mixed curl_getinfo(resource ch [, int option])\",\n        \"Get information regarding a specific transfer\"\n    ],\n    \"curl_init\": [\n        \"resource curl_init([string url])\",\n        \"Initialize a cURL session\"\n    ],\n    \"curl_multi_add_handle\": [\n        \"int curl_multi_add_handle(resource mh, resource ch)\",\n        \"Add a normal cURL handle to a cURL multi handle\"\n    ],\n    \"curl_multi_close\": [\n        \"void curl_multi_close(resource mh)\",\n        \"Close a set of cURL handles\"\n    ],\n    \"curl_multi_exec\": [\n        \"int curl_multi_exec(resource mh, int &still_running)\",\n        \"Run the sub-connections of the current cURL handle\"\n    ],\n    \"curl_multi_getcontent\": [\n        \"string curl_multi_getcontent(resource ch)\",\n        \"Return the content of a cURL handle if CURLOPT_RETURNTRANSFER is set\"\n    ],\n    \"curl_multi_info_read\": [\n        \"array curl_multi_info_read(resource mh [, long msgs_in_queue])\",\n        \"Get information about the current transfers\"\n    ],\n    \"curl_multi_init\": [\n        \"resource curl_multi_init(void)\",\n        \"Returns a new cURL multi handle\"\n    ],\n    \"curl_multi_remove_handle\": [\n        \"int curl_multi_remove_handle(resource mh, resource ch)\",\n        \"Remove a multi handle from a set of cURL handles\"\n    ],\n    \"curl_multi_select\": [\n        \"int curl_multi_select(resource mh[, double timeout])\",\n        \"Get all the sockets associated with the cURL extension, which can then be \\\"selected\\\"\"\n    ],\n    \"curl_setopt\": [\n        \"bool curl_setopt(resource ch, int option, mixed value)\",\n        \"Set an option for a cURL transfer\"\n    ],\n    \"curl_setopt_array\": [\n        \"bool curl_setopt_array(resource ch, array options)\",\n        \"Set an array of option for a cURL transfer\"\n    ],\n    \"curl_version\": [\n        \"array curl_version([int version])\",\n        \"Return cURL version information.\"\n    ],\n    \"current\": [\n        \"mixed current(array array_arg)\",\n        \"Return the element currently pointed to by the internal array pointer\"\n    ],\n    \"date\": [\n        \"string date(string format [, long timestamp])\",\n        \"Format a local date/time\"\n    ],\n    \"date_add\": [\n        \"DateTime date_add(DateTime object, DateInterval interval)\",\n        \"Adds an interval to the current date in object.\"\n    ],\n    \"date_create\": [\n        \"DateTime date_create([string time[, DateTimeZone object]])\",\n        \"Returns new DateTime object\"\n    ],\n    \"date_create_from_format\": [\n        \"DateTime date_create_from_format(string format, string time[, DateTimeZone object])\",\n        \"Returns new DateTime object formatted according to the specified format\"\n    ],\n    \"date_date_set\": [\n        \"DateTime date_date_set(DateTime object, long year, long month, long day)\",\n        \"Sets the date.\"\n    ],\n    \"date_default_timezone_get\": [\n        \"string date_default_timezone_get()\",\n        \"Gets the default timezone used by all date/time functions in a script\"\n    ],\n    \"date_default_timezone_set\": [\n        \"bool date_default_timezone_set(string timezone_identifier)\",\n        \"Sets the default timezone used by all date/time functions in a script\"\n    ],\n    \"date_diff\": [\n        \"DateInterval date_diff(DateTime object [, bool absolute])\",\n        \"Returns the difference between two DateTime objects.\"\n    ],\n    \"date_format\": [\n        \"string date_format(DateTime object, string format)\",\n        \"Returns date formatted according to given format\"\n    ],\n    \"date_get_last_errors\": [\n        \"array date_get_last_errors()\",\n        \"Returns the warnings and errors found while parsing a date/time string.\"\n    ],\n    \"date_interval_create_from_date_string\": [\n        \"DateInterval date_interval_create_from_date_string(string time)\",\n        \"Uses the normal date parsers and sets up a DateInterval from the relative parts of the parsed string\"\n    ],\n    \"date_interval_format\": [\n        \"string date_interval_format(DateInterval object, string format)\",\n        \"Formats the interval.\"\n    ],\n    \"date_isodate_set\": [\n        \"DateTime date_isodate_set(DateTime object, long year, long week[, long day])\",\n        \"Sets the ISO date.\"\n    ],\n    \"date_modify\": [\n        \"DateTime date_modify(DateTime object, string modify)\",\n        \"Alters the timestamp.\"\n    ],\n    \"date_offset_get\": [\n        \"long date_offset_get(DateTime object)\",\n        \"Returns the DST offset.\"\n    ],\n    \"date_parse\": [\n        \"array date_parse(string date)\",\n        \"Returns associative array with detailed info about given date\"\n    ],\n    \"date_parse_from_format\": [\n        \"array date_parse_from_format(string format, string date)\",\n        \"Returns associative array with detailed info about given date\"\n    ],\n    \"date_sub\": [\n        \"DateTime date_sub(DateTime object, DateInterval interval)\",\n        \"Subtracts an interval to the current date in object.\"\n    ],\n    \"date_sun_info\": [\n        \"array date_sun_info(long time, float latitude, float longitude)\",\n        \"Returns an array with information about sun set/rise and twilight begin/end\"\n    ],\n    \"date_sunrise\": [\n        \"mixed date_sunrise(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])\",\n        \"Returns time of sunrise for a given day and location\"\n    ],\n    \"date_sunset\": [\n        \"mixed date_sunset(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])\",\n        \"Returns time of sunset for a given day and location\"\n    ],\n    \"date_time_set\": [\n        \"DateTime date_time_set(DateTime object, long hour, long minute[, long second])\",\n        \"Sets the time.\"\n    ],\n    \"date_timestamp_get\": [\n        \"long date_timestamp_get(DateTime object)\",\n        \"Gets the Unix timestamp.\"\n    ],\n    \"date_timestamp_set\": [\n        \"DateTime date_timestamp_set(DateTime object, long unixTimestamp)\",\n        \"Sets the date and time based on an Unix timestamp.\"\n    ],\n    \"date_timezone_get\": [\n        \"DateTimeZone date_timezone_get(DateTime object)\",\n        \"Return new DateTimeZone object relative to give DateTime\"\n    ],\n    \"date_timezone_set\": [\n        \"DateTime date_timezone_set(DateTime object, DateTimeZone object)\",\n        \"Sets the timezone for the DateTime object.\"\n    ],\n    \"datefmt_create\": [\n        \"IntlDateFormatter datefmt_create(string $locale, long date_type, long time_type[, string $timezone_str, long $calendar, string $pattern] )\",\n        \"* Create formatter.\"\n    ],\n    \"datefmt_format\": [\n        \"string datefmt_format( [mixed]int $args or array $args )\",\n        \"* Format the time value as a string. }}}\"\n    ],\n    \"datefmt_get_calendar\": [\n        \"string datefmt_get_calendar( IntlDateFormatter $mf )\",\n        \"* Get formatter calendar.\"\n    ],\n    \"datefmt_get_datetype\": [\n        \"string datefmt_get_datetype( IntlDateFormatter $mf )\",\n        \"* Get formatter datetype.\"\n    ],\n    \"datefmt_get_error_code\": [\n        \"int datefmt_get_error_code( IntlDateFormatter $nf )\",\n        \"* Get formatter's last error code.\"\n    ],\n    \"datefmt_get_error_message\": [\n        \"string datefmt_get_error_message( IntlDateFormatter $coll )\",\n        \"* Get text description for formatter's last error code.\"\n    ],\n    \"datefmt_get_locale\": [\n        \"string datefmt_get_locale(IntlDateFormatter $mf)\",\n        \"* Get formatter locale.\"\n    ],\n    \"datefmt_get_pattern\": [\n        \"string datefmt_get_pattern( IntlDateFormatter $mf )\",\n        \"* Get formatter pattern.\"\n    ],\n    \"datefmt_get_timetype\": [\n        \"string datefmt_get_timetype( IntlDateFormatter $mf )\",\n        \"* Get formatter timetype.\"\n    ],\n    \"datefmt_get_timezone_id\": [\n        \"string datefmt_get_timezone_id( IntlDateFormatter $mf )\",\n        \"* Get formatter timezone_id.\"\n    ],\n    \"datefmt_isLenient\": [\n        \"string datefmt_isLenient(IntlDateFormatter $mf)\",\n        \"* Get formatter locale.\"\n    ],\n    \"datefmt_localtime\": [\n        \"integer datefmt_localtime( IntlDateFormatter $fmt, string $text_to_parse[, int $parse_pos ])\",\n        \"* Parse the string $value to a localtime array  }}}\"\n    ],\n    \"datefmt_parse\": [\n        \"integer datefmt_parse( IntlDateFormatter $fmt, string $text_to_parse [, int $parse_pos] )\",\n        \"* Parse the string $value starting at parse_pos to a Unix timestamp -int }}}\"\n    ],\n    \"datefmt_setLenient\": [\n        \"string datefmt_setLenient(IntlDateFormatter $mf)\",\n        \"* Set formatter lenient.\"\n    ],\n    \"datefmt_set_calendar\": [\n        \"bool datefmt_set_calendar( IntlDateFormatter $mf, int $calendar )\",\n        \"* Set formatter calendar.\"\n    ],\n    \"datefmt_set_pattern\": [\n        \"bool datefmt_set_pattern( IntlDateFormatter $mf, string $pattern )\",\n        \"* Set formatter pattern.\"\n    ],\n    \"datefmt_set_timezone_id\": [\n        \"boolean datefmt_set_timezone_id( IntlDateFormatter $mf,$timezone_id)\",\n        \"* Set formatter timezone_id.\"\n    ],\n    \"dba_close\": [\n        \"void dba_close(resource handle)\",\n        \"Closes database\"\n    ],\n    \"dba_delete\": [\n        \"bool dba_delete(string key, resource handle)\",\n        \"Deletes the entry associated with key    If inifile: remove all other key lines\"\n    ],\n    \"dba_exists\": [\n        \"bool dba_exists(string key, resource handle)\",\n        \"Checks, if the specified key exists\"\n    ],\n    \"dba_fetch\": [\n        \"string dba_fetch(string key, [int skip ,] resource handle)\",\n        \"Fetches the data associated with key\"\n    ],\n    \"dba_firstkey\": [\n        \"string dba_firstkey(resource handle)\",\n        \"Resets the internal key pointer and returns the first key\"\n    ],\n    \"dba_handlers\": [\n        \"array dba_handlers([bool full_info])\",\n        \"List configured database handlers\"\n    ],\n    \"dba_insert\": [\n        \"bool dba_insert(string key, string value, resource handle)\",\n        \"If not inifile: Insert value as key, return false, if key exists already     If inifile: Add vakue as key (next instance of key)\"\n    ],\n    \"dba_key_split\": [\n        \"array|false dba_key_split(string key)\",\n        \"Splits an inifile key into an array of the form array(0=>group,1=>value_name) but returns false if input is false or null\"\n    ],\n    \"dba_list\": [\n        \"array dba_list()\",\n        \"List opened databases\"\n    ],\n    \"dba_nextkey\": [\n        \"string dba_nextkey(resource handle)\",\n        \"Returns the next key\"\n    ],\n    \"dba_open\": [\n        \"resource dba_open(string path, string mode [, string handlername, string ...])\",\n        \"Opens path using the specified handler in mode\"\n    ],\n    \"dba_optimize\": [\n        \"bool dba_optimize(resource handle)\",\n        \"Optimizes (e.g. clean up, vacuum) database\"\n    ],\n    \"dba_popen\": [\n        \"resource dba_popen(string path, string mode [, string handlername, string ...])\",\n        \"Opens path using the specified handler in mode persistently\"\n    ],\n    \"dba_replace\": [\n        \"bool dba_replace(string key, string value, resource handle)\",\n        \"Inserts value as key, replaces key, if key exists already    If inifile: remove all other key lines\"\n    ],\n    \"dba_sync\": [\n        \"bool dba_sync(resource handle)\",\n        \"Synchronizes database\"\n    ],\n    \"dcgettext\": [\n        \"string dcgettext(string domain_name, string msgid, long category)\",\n        \"Return the translation of msgid for domain_name and category, or msgid unaltered if a translation does not exist\"\n    ],\n    \"dcngettext\": [\n        \"string dcngettext (string domain, string msgid1, string msgid2, int n, int category)\",\n        \"Plural version of dcgettext()\"\n    ],\n    \"debug_backtrace\": [\n        \"array debug_backtrace([bool provide_object])\",\n        \"Return backtrace as array\"\n    ],\n    \"debug_print_backtrace\": [\n        \"void debug_print_backtrace(void) */\",\n        \"ZEND_FUNCTION(debug_print_backtrace) {  zend_execute_data *ptr, *skip;  int lineno;  char *function_name;  char *filename;  char *class_name = NULL;  char *call_type;  char *include_filename = NULL;  zval *arg_array = NULL;  int indent = 0;   if (zend_parse_parameters_none() == FAILURE) {   return;  }   ptr = EG(current_execute_data);   /* skip debug_backtrace()\"\n    ],\n    \"debug_zval_dump\": [\n        \"void debug_zval_dump(mixed var)\",\n        \"Dumps a string representation of an internal zend value to output.\"\n    ],\n    \"decbin\": [\n        \"string decbin(int decimal_number)\",\n        \"Returns a string containing a binary representation of the number\"\n    ],\n    \"dechex\": [\n        \"string dechex(int decimal_number)\",\n        \"Returns a string containing a hexadecimal representation of the given number\"\n    ],\n    \"decoct\": [\n        \"string decoct(int decimal_number)\",\n        \"Returns a string containing an octal representation of the given number\"\n    ],\n    \"define\": [\n        \"bool define(string constant_name, mixed value, boolean case_insensitive=false)\",\n        \"Define a new constant\"\n    ],\n    \"define_syslog_variables\": [\n        \"void define_syslog_variables(void)\",\n        \"Initializes all syslog-related variables\"\n    ],\n    \"defined\": [\n        \"bool defined(string constant_name)\",\n        \"Check whether a constant exists\"\n    ],\n    \"deg2rad\": [\n        \"float deg2rad(float number)\",\n        \"Converts the number in degrees to the radian equivalent\"\n    ],\n    \"dgettext\": [\n        \"string dgettext(string domain_name, string msgid)\",\n        \"Return the translation of msgid for domain_name, or msgid unaltered if a translation does not exist\"\n    ],\n    \"die\": [\n        \"void die([mixed status])\",\n        \"Output a message and terminate the current script\"\n    ],\n    \"dir\": [\n        \"object dir(string directory[, resource context])\",\n        \"Directory class with properties, handle and class and methods read, rewind and close\"\n    ],\n    \"dirname\": [\n        \"string dirname(string path)\",\n        \"Returns the directory name component of the path\"\n    ],\n    \"disk_free_space\": [\n        \"float disk_free_space(string path)\",\n        \"Get free disk space for filesystem that path is on\"\n    ],\n    \"disk_total_space\": [\n        \"float disk_total_space(string path)\",\n        \"Get total disk space for filesystem that path is on\"\n    ],\n    \"display_disabled_function\": [\n        \"void display_disabled_function(void)\",\n        \"Dummy function which displays an error when a disabled function is called.\"\n    ],\n    \"dl\": [\n        \"int dl(string extension_filename)\",\n        \"Load a PHP extension at runtime\"\n    ],\n    \"dngettext\": [\n        \"string dngettext (string domain, string msgid1, string msgid2, int count)\",\n        \"Plural version of dgettext()\"\n    ],\n    \"dns_check_record\": [\n        \"bool dns_check_record(string host [, string type])\",\n        \"Check DNS records corresponding to a given Internet host name or IP address\"\n    ],\n    \"dns_get_mx\": [\n        \"bool dns_get_mx(string hostname, array mxhosts [, array weight])\",\n        \"Get MX records corresponding to a given Internet host name\"\n    ],\n    \"dns_get_record\": [\n        \"array|false dns_get_record(string hostname [, int type[, array authns, array addtl]])\",\n        \"Get any Resource Record corresponding to a given Internet host name\"\n    ],\n    \"dom_attr_is_id\": [\n        \"boolean dom_attr_is_id();\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Attr-isId Since: DOM Level 3\"\n    ],\n    \"dom_characterdata_append_data\": [\n        \"void dom_characterdata_append_data(string arg);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-32791A2F Since:\"\n    ],\n    \"dom_characterdata_delete_data\": [\n        \"void dom_characterdata_delete_data(int offset, int count);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-7C603781 Since:\"\n    ],\n    \"dom_characterdata_insert_data\": [\n        \"void dom_characterdata_insert_data(int offset, string arg);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-3EDB695F Since:\"\n    ],\n    \"dom_characterdata_replace_data\": [\n        \"void dom_characterdata_replace_data(int offset, int count, string arg);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-E5CBA7FB Since:\"\n    ],\n    \"dom_characterdata_substring_data\": [\n        \"string dom_characterdata_substring_data(int offset, int count);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-6531BCCF Since:\"\n    ],\n    \"dom_document_adopt_node\": [\n        \"DOMNode dom_document_adopt_node(DOMNode source);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-adoptNode Since: DOM Level 3\"\n    ],\n    \"dom_document_create_attribute\": [\n        \"DOMAttr dom_document_create_attribute(string name);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1084891198 Since:\"\n    ],\n    \"dom_document_create_attribute_ns\": [\n        \"DOMAttr dom_document_create_attribute_ns(string namespaceURI, string qualifiedName);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-DocCrAttrNS Since: DOM Level 2\"\n    ],\n    \"dom_document_create_cdatasection\": [\n        \"DOMCdataSection dom_document_create_cdatasection(string data);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-D26C0AF8 Since:\"\n    ],\n    \"dom_document_create_comment\": [\n        \"DOMComment dom_document_create_comment(string data);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1334481328 Since:\"\n    ],\n    \"dom_document_create_document_fragment\": [\n        \"DOMDocumentFragment dom_document_create_document_fragment();\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-35CB04B5 Since:\"\n    ],\n    \"dom_document_create_element\": [\n        \"DOMElement dom_document_create_element(string tagName [, string value]);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-2141741547 Since:\"\n    ],\n    \"dom_document_create_element_ns\": [\n        \"DOMElement dom_document_create_element_ns(string namespaceURI, string qualifiedName [,string value]);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-DocCrElNS Since: DOM Level 2\"\n    ],\n    \"dom_document_create_entity_reference\": [\n        \"DOMEntityReference dom_document_create_entity_reference(string name);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-392B75AE Since:\"\n    ],\n    \"dom_document_create_processing_instruction\": [\n        \"DOMProcessingInstruction dom_document_create_processing_instruction(string target, string data);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-135944439 Since:\"\n    ],\n    \"dom_document_create_text_node\": [\n        \"DOMText dom_document_create_text_node(string data);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1975348127 Since:\"\n    ],\n    \"dom_document_get_element_by_id\": [\n        \"DOMElement dom_document_get_element_by_id(string elementId);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-getElBId Since: DOM Level 2\"\n    ],\n    \"dom_document_get_elements_by_tag_name\": [\n        \"DOMNodeList dom_document_get_elements_by_tag_name(string tagname);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-A6C9094 Since:\"\n    ],\n    \"dom_document_get_elements_by_tag_name_ns\": [\n        \"DOMNodeList dom_document_get_elements_by_tag_name_ns(string namespaceURI, string localName);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-getElBTNNS Since: DOM Level 2\"\n    ],\n    \"dom_document_import_node\": [\n        \"DOMNode dom_document_import_node(DOMNode importedNode, boolean deep);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Core-Document-importNode Since: DOM Level 2\"\n    ],\n    \"dom_document_load\": [\n        \"DOMNode dom_document_load(string source [, int options]);\",\n        \"URL: http://www.w3.org/TR/DOM-Level-3-LS/load-save.html#LS-DocumentLS-load Since: DOM Level 3\"\n    ],\n    \"dom_document_load_html\": [\n        \"DOMNode dom_document_load_html(string source);\",\n        \"Since: DOM extended\"\n    ],\n    \"dom_document_load_html_file\": [\n        \"DOMNode dom_document_load_html_file(string source);\",\n        \"Since: DOM extended\"\n    ],\n    \"dom_document_loadxml\": [\n        \"DOMNode dom_document_loadxml(string source [, int options]);\",\n        \"URL: http://www.w3.org/TR/DOM-Level-3-LS/load-save.html#LS-DocumentLS-loadXML Since: DOM Level 3\"\n    ],\n    \"dom_document_normalize_document\": [\n        \"void dom_document_normalize_document();\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-normalizeDocument Since: DOM Level 3\"\n    ],\n    \"dom_document_relaxNG_validate_file\": [\n        \"boolean dom_document_relaxNG_validate_file(string filename); */\",\n        \"PHP_FUNCTION(dom_document_relaxNG_validate_file) {  _dom_document_relaxNG_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_FILE); } /* }}} end dom_document_relaxNG_validate_file\"\n    ],\n    \"dom_document_relaxNG_validate_xml\": [\n        \"boolean dom_document_relaxNG_validate_xml(string source); */\",\n        \"PHP_FUNCTION(dom_document_relaxNG_validate_xml) {  _dom_document_relaxNG_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_STRING); } /* }}} end dom_document_relaxNG_validate_xml\"\n    ],\n    \"dom_document_rename_node\": [\n        \"DOMNode dom_document_rename_node(node n, string namespaceURI, string qualifiedName);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-renameNode Since: DOM Level 3\"\n    ],\n    \"dom_document_save\": [\n        \"int dom_document_save(string file);\",\n        \"Convenience method to save to file\"\n    ],\n    \"dom_document_save_html\": [\n        \"string dom_document_save_html();\",\n        \"Convenience method to output as html\"\n    ],\n    \"dom_document_save_html_file\": [\n        \"int dom_document_save_html_file(string file);\",\n        \"Convenience method to save to file as html\"\n    ],\n    \"dom_document_savexml\": [\n        \"string dom_document_savexml([node n]);\",\n        \"URL: http://www.w3.org/TR/DOM-Level-3-LS/load-save.html#LS-DocumentLS-saveXML Since: DOM Level 3\"\n    ],\n    \"dom_document_schema_validate\": [\n        \"boolean dom_document_schema_validate(string source); */\",\n        \"PHP_FUNCTION(dom_document_schema_validate_xml) {  _dom_document_schema_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_STRING); } /* }}} end dom_document_schema_validate\"\n    ],\n    \"dom_document_schema_validate_file\": [\n        \"boolean dom_document_schema_validate_file(string filename); */\",\n        \"PHP_FUNCTION(dom_document_schema_validate_file) {  _dom_document_schema_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_FILE); } /* }}} end dom_document_schema_validate_file\"\n    ],\n    \"dom_document_validate\": [\n        \"boolean dom_document_validate();\",\n        \"Since: DOM extended\"\n    ],\n    \"dom_document_xinclude\": [\n        \"int dom_document_xinclude([int options])\",\n        \"Substitutues xincludes in a DomDocument\"\n    ],\n    \"dom_domconfiguration_can_set_parameter\": [\n        \"boolean dom_domconfiguration_can_set_parameter(string name, domuserdata value);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration-canSetParameter Since:\"\n    ],\n    \"dom_domconfiguration_get_parameter\": [\n        \"domdomuserdata dom_domconfiguration_get_parameter(string name);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration-getParameter Since:\"\n    ],\n    \"dom_domconfiguration_set_parameter\": [\n        \"dom_void dom_domconfiguration_set_parameter(string name, domuserdata value);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration-property Since:\"\n    ],\n    \"dom_domerrorhandler_handle_error\": [\n        \"dom_boolean dom_domerrorhandler_handle_error(domerror error);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-ERRORS-DOMErrorHandler-handleError Since:\"\n    ],\n    \"dom_domimplementation_create_document\": [\n        \"DOMDocument dom_domimplementation_create_document(string namespaceURI, string qualifiedName, DOMDocumentType doctype);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Level-2-Core-DOM-createDocument Since: DOM Level 2\"\n    ],\n    \"dom_domimplementation_create_document_type\": [\n        \"DOMDocumentType dom_domimplementation_create_document_type(string qualifiedName, string publicId, string systemId);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Level-2-Core-DOM-createDocType Since: DOM Level 2\"\n    ],\n    \"dom_domimplementation_get_feature\": [\n        \"DOMNode dom_domimplementation_get_feature(string feature, string version);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMImplementation3-getFeature Since: DOM Level 3\"\n    ],\n    \"dom_domimplementation_has_feature\": [\n        \"boolean dom_domimplementation_has_feature(string feature, string version);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-5CED94D7 Since:\"\n    ],\n    \"dom_domimplementationlist_item\": [\n        \"domdomimplementation dom_domimplementationlist_item(int index);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMImplementationList-item Since:\"\n    ],\n    \"dom_domimplementationsource_get_domimplementation\": [\n        \"domdomimplementation dom_domimplementationsource_get_domimplementation(string features);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-getDOMImpl Since:\"\n    ],\n    \"dom_domimplementationsource_get_domimplementations\": [\n        \"domimplementationlist dom_domimplementationsource_get_domimplementations(string features);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-getDOMImpls Since:\"\n    ],\n    \"dom_domstringlist_item\": [\n        \"domstring dom_domstringlist_item(int index);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMStringList-item Since:\"\n    ],\n    \"dom_element_get_attribute\": [\n        \"string dom_element_get_attribute(string name);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-666EE0F9 Since:\"\n    ],\n    \"dom_element_get_attribute_node\": [\n        \"DOMAttr dom_element_get_attribute_node(string name);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-217A91B8 Since:\"\n    ],\n    \"dom_element_get_attribute_node_ns\": [\n        \"DOMAttr dom_element_get_attribute_node_ns(string namespaceURI, string localName);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElGetAtNodeNS Since: DOM Level 2\"\n    ],\n    \"dom_element_get_attribute_ns\": [\n        \"string dom_element_get_attribute_ns(string namespaceURI, string localName);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElGetAttrNS Since: DOM Level 2\"\n    ],\n    \"dom_element_get_elements_by_tag_name\": [\n        \"DOMNodeList dom_element_get_elements_by_tag_name(string name);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1938918D Since:\"\n    ],\n    \"dom_element_get_elements_by_tag_name_ns\": [\n        \"DOMNodeList dom_element_get_elements_by_tag_name_ns(string namespaceURI, string localName);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-A6C90942 Since: DOM Level 2\"\n    ],\n    \"dom_element_has_attribute\": [\n        \"boolean dom_element_has_attribute(string name);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElHasAttr Since: DOM Level 2\"\n    ],\n    \"dom_element_has_attribute_ns\": [\n        \"boolean dom_element_has_attribute_ns(string namespaceURI, string localName);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElHasAttrNS Since: DOM Level 2\"\n    ],\n    \"dom_element_remove_attribute\": [\n        \"void dom_element_remove_attribute(string name);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-6D6AC0F9 Since:\"\n    ],\n    \"dom_element_remove_attribute_node\": [\n        \"DOMAttr dom_element_remove_attribute_node(DOMAttr oldAttr);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-D589198 Since:\"\n    ],\n    \"dom_element_remove_attribute_ns\": [\n        \"void dom_element_remove_attribute_ns(string namespaceURI, string localName);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElRemAtNS Since: DOM Level 2\"\n    ],\n    \"dom_element_set_attribute\": [\n        \"void dom_element_set_attribute(string name, string value);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-F68F082 Since:\"\n    ],\n    \"dom_element_set_attribute_node\": [\n        \"DOMAttr dom_element_set_attribute_node(DOMAttr newAttr);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-887236154 Since:\"\n    ],\n    \"dom_element_set_attribute_node_ns\": [\n        \"DOMAttr dom_element_set_attribute_node_ns(DOMAttr newAttr);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetAtNodeNS Since: DOM Level 2\"\n    ],\n    \"dom_element_set_attribute_ns\": [\n        \"void dom_element_set_attribute_ns(string namespaceURI, string qualifiedName, string value);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetAttrNS Since: DOM Level 2\"\n    ],\n    \"dom_element_set_id_attribute\": [\n        \"void dom_element_set_id_attribute(string name, boolean isId);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetIdAttr Since: DOM Level 3\"\n    ],\n    \"dom_element_set_id_attribute_node\": [\n        \"void dom_element_set_id_attribute_node(attr idAttr, boolean isId);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetIdAttrNode Since: DOM Level 3\"\n    ],\n    \"dom_element_set_id_attribute_ns\": [\n        \"void dom_element_set_id_attribute_ns(string namespaceURI, string localName, boolean isId);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetIdAttrNS Since: DOM Level 3\"\n    ],\n    \"dom_import_simplexml\": [\n        \"somNode dom_import_simplexml(sxeobject node)\",\n        \"Get a simplexml_element object from dom to allow for processing\"\n    ],\n    \"dom_namednodemap_get_named_item\": [\n        \"DOMNode dom_namednodemap_get_named_item(string name);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1074577549 Since:\"\n    ],\n    \"dom_namednodemap_get_named_item_ns\": [\n        \"DOMNode dom_namednodemap_get_named_item_ns(string namespaceURI, string localName);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-getNamedItemNS Since: DOM Level 2\"\n    ],\n    \"dom_namednodemap_item\": [\n        \"DOMNode dom_namednodemap_item(int index);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-349467F9 Since:\"\n    ],\n    \"dom_namednodemap_remove_named_item\": [\n        \"DOMNode dom_namednodemap_remove_named_item(string name);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-D58B193 Since:\"\n    ],\n    \"dom_namednodemap_remove_named_item_ns\": [\n        \"DOMNode dom_namednodemap_remove_named_item_ns(string namespaceURI, string localName);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-removeNamedItemNS Since: DOM Level 2\"\n    ],\n    \"dom_namednodemap_set_named_item\": [\n        \"DOMNode dom_namednodemap_set_named_item(DOMNode arg);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1025163788 Since:\"\n    ],\n    \"dom_namednodemap_set_named_item_ns\": [\n        \"DOMNode dom_namednodemap_set_named_item_ns(DOMNode arg);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-setNamedItemNS Since: DOM Level 2\"\n    ],\n    \"dom_namelist_get_name\": [\n        \"string dom_namelist_get_name(int index);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#NameList-getName Since:\"\n    ],\n    \"dom_namelist_get_namespace_uri\": [\n        \"string dom_namelist_get_namespace_uri(int index);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#NameList-getNamespaceURI Since:\"\n    ],\n    \"dom_node_append_child\": [\n        \"DomNode dom_node_append_child(DomNode newChild);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-184E7107 Since:\"\n    ],\n    \"dom_node_clone_node\": [\n        \"DomNode dom_node_clone_node(boolean deep);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-3A0ED0A4 Since:\"\n    ],\n    \"dom_node_compare_document_position\": [\n        \"short dom_node_compare_document_position(DomNode other);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-compareDocumentPosition Since: DOM Level 3\"\n    ],\n    \"dom_node_get_feature\": [\n        \"DomNode dom_node_get_feature(string feature, string version);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-getFeature Since: DOM Level 3\"\n    ],\n    \"dom_node_get_user_data\": [\n        \"mixed dom_node_get_user_data(string key);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-getUserData Since: DOM Level 3\"\n    ],\n    \"dom_node_has_attributes\": [\n        \"boolean dom_node_has_attributes();\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-NodeHasAttrs Since: DOM Level 2\"\n    ],\n    \"dom_node_has_child_nodes\": [\n        \"boolean dom_node_has_child_nodes();\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-810594187 Since:\"\n    ],\n    \"dom_node_insert_before\": [\n        \"domnode dom_node_insert_before(DomNode newChild, DomNode refChild);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-952280727 Since:\"\n    ],\n    \"dom_node_is_default_namespace\": [\n        \"boolean dom_node_is_default_namespace(string namespaceURI);\",\n        \"URL: http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-isDefaultNamespace Since: DOM Level 3\"\n    ],\n    \"dom_node_is_equal_node\": [\n        \"boolean dom_node_is_equal_node(DomNode arg);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-isEqualNode Since: DOM Level 3\"\n    ],\n    \"dom_node_is_same_node\": [\n        \"boolean dom_node_is_same_node(DomNode other);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-isSameNode Since: DOM Level 3\"\n    ],\n    \"dom_node_is_supported\": [\n        \"boolean dom_node_is_supported(string feature, string version);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Level-2-Core-Node-supports Since: DOM Level 2\"\n    ],\n    \"dom_node_lookup_namespace_uri\": [\n        \"string dom_node_lookup_namespace_uri(string prefix);\",\n        \"URL: http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespaceURI Since: DOM Level 3\"\n    ],\n    \"dom_node_lookup_prefix\": [\n        \"string dom_node_lookup_prefix(string namespaceURI);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-lookupNamespacePrefix Since: DOM Level 3\"\n    ],\n    \"dom_node_normalize\": [\n        \"void dom_node_normalize();\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-normalize Since:\"\n    ],\n    \"dom_node_remove_child\": [\n        \"DomNode dom_node_remove_child(DomNode oldChild);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1734834066 Since:\"\n    ],\n    \"dom_node_replace_child\": [\n        \"DomNode dom_node_replace_child(DomNode newChild, DomNode oldChild);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-785887307 Since:\"\n    ],\n    \"dom_node_set_user_data\": [\n        \"mixed dom_node_set_user_data(string key, mixed data, userdatahandler handler);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-setUserData Since: DOM Level 3\"\n    ],\n    \"dom_nodelist_item\": [\n        \"DOMNode dom_nodelist_item(int index);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-844377136 Since:\"\n    ],\n    \"dom_string_extend_find_offset16\": [\n        \"int dom_string_extend_find_offset16(int offset32);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#i18n-methods-StringExtend-findOffset16 Since:\"\n    ],\n    \"dom_string_extend_find_offset32\": [\n        \"int dom_string_extend_find_offset32(int offset16);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#i18n-methods-StringExtend-findOffset32 Since:\"\n    ],\n    \"dom_text_is_whitespace_in_element_content\": [\n        \"boolean dom_text_is_whitespace_in_element_content();\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Text3-isWhitespaceInElementContent Since: DOM Level 3\"\n    ],\n    \"dom_text_replace_whole_text\": [\n        \"DOMText dom_text_replace_whole_text(string content);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Text3-replaceWholeText Since: DOM Level 3\"\n    ],\n    \"dom_text_split_text\": [\n        \"DOMText dom_text_split_text(int offset);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-38853C1D Since:\"\n    ],\n    \"dom_userdatahandler_handle\": [\n        \"dom_void dom_userdatahandler_handle(short operation, string key, domobject data, node src, node dst);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-handleUserDataEvent Since:\"\n    ],\n    \"dom_xpath_evaluate\": [\n        \"mixed dom_xpath_evaluate(string expr [,DOMNode context]); */\",\n        \"PHP_FUNCTION(dom_xpath_evaluate) {  php_xpath_eval(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_DOM_XPATH_EVALUATE); } /* }}} end dom_xpath_evaluate\"\n    ],\n    \"dom_xpath_query\": [\n        \"DOMNodeList dom_xpath_query(string expr [,DOMNode context]); */\",\n        \"PHP_FUNCTION(dom_xpath_query) {  php_xpath_eval(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_DOM_XPATH_QUERY); } /* }}} end dom_xpath_query\"\n    ],\n    \"dom_xpath_register_ns\": [\n        \"boolean dom_xpath_register_ns(string prefix, string uri); */\",\n        \"PHP_FUNCTION(dom_xpath_register_ns) {  zval *id;  xmlXPathContextPtr ctxp;  int prefix_len, ns_uri_len;  dom_xpath_object *intern;  unsigned char *prefix, *ns_uri;   if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), \\\"Oss\\\", &id, dom_xpath_class_entry, &prefix, &prefix_len, &ns_uri, &ns_uri_len) == FAILURE) {   return;  }   intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);   ctxp = (xmlXPathContextPtr) intern->ptr;  if (ctxp == NULL) {   php_error_docref(NULL TSRMLS_CC, E_WARNING, \\\"Invalid XPath Context\\\");   RETURN_FALSE;  }   if (xmlXPathRegisterNs(ctxp, prefix, ns_uri) != 0) {   RETURN_FALSE  }  RETURN_TRUE; } /* }}}\"\n    ],\n    \"dom_xpath_register_php_functions\": [\n        \"void dom_xpath_register_php_functions() */\",\n        \"PHP_FUNCTION(dom_xpath_register_php_functions) {  zval *id;  dom_xpath_object *intern;  zval *array_value, **entry, *new_string;  int  name_len = 0;  char *name;   DOM_GET_THIS(id);    if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, \\\"a\\\",  &array_value) == SUCCESS) {   intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);   zend_hash_internal_pointer_reset(Z_ARRVAL_P(array_value));    while (zend_hash_get_current_data(Z_ARRVAL_P(array_value), (void **)&entry) == SUCCESS) {    SEPARATE_ZVAL(entry);    convert_to_string_ex(entry);     MAKE_STD_ZVAL(new_string);    ZVAL_LONG(new_string,1);       zend_hash_update(intern->registered_phpfunctions, Z_STRVAL_PP(entry), Z_STRLEN_PP(entry) + 1, &new_string, sizeof(zval*), NULL);    zend_hash_move_forward(Z_ARRVAL_P(array_value));   }   intern->registerPhpFunctions = 2;   RETURN_TRUE;   } else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, \\\"s\\\",  &name, &name_len) == SUCCESS) {   intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);      MAKE_STD_ZVAL(new_string);   ZVAL_LONG(new_string,1);   zend_hash_update(intern->registered_phpfunctions, name, name_len + 1, &new_string, sizeof(zval*), NULL);   intern->registerPhpFunctions = 2;     } else {   intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);   intern->registerPhpFunctions = 1;  }   } /* }}} end dom_xpath_register_php_functions\"\n    ],\n    \"each\": [\n        \"array each(array arr)\",\n        \"Return the currently pointed key..value pair in the passed array, and advance the pointer to the next element\"\n    ],\n    \"easter_date\": [\n        \"int easter_date([int year])\",\n        \"Return the timestamp of midnight on Easter of a given year (defaults to current year)\"\n    ],\n    \"easter_days\": [\n        \"int easter_days([int year, [int method]])\",\n        \"Return the number of days after March 21 that Easter falls on for a given year (defaults to current year)\"\n    ],\n    \"echo\": [\n        \"void echo(string arg1 [, string ...])\",\n        \"Output one or more strings\"\n    ],\n    \"empty\": [\n        \"bool empty( mixed var )\",\n        \"Determine whether a variable is empty\"\n    ],\n    \"enchant_broker_describe\": [\n        \"array enchant_broker_describe(resource broker)\",\n        \"Enumerates the Enchant providers and tells you some rudimentary information about them. The same info is provided through phpinfo()\"\n    ],\n    \"enchant_broker_dict_exists\": [\n        \"bool enchant_broker_dict_exists(resource broker, string tag)\",\n        \"Wether a dictionary exists or not. Using non-empty tag\"\n    ],\n    \"enchant_broker_free\": [\n        \"boolean enchant_broker_free(resource broker)\",\n        \"Destroys the broker object and its dictionnaries\"\n    ],\n    \"enchant_broker_free_dict\": [\n        \"resource enchant_broker_free_dict(resource dict)\",\n        \"Free the dictionary resource\"\n    ],\n    \"enchant_broker_get_dict_path\": [\n        \"string enchant_broker_get_dict_path(resource broker, int dict_type)\",\n        \"Get the directory path for a given backend, works with ispell and myspell\"\n    ],\n    \"enchant_broker_get_error\": [\n        \"string enchant_broker_get_error(resource broker)\",\n        \"Returns the last error of the broker\"\n    ],\n    \"enchant_broker_init\": [\n        \"resource enchant_broker_init()\",\n        \"create a new broker object capable of requesting\"\n    ],\n    \"enchant_broker_list_dicts\": [\n        \"string enchant_broker_list_dicts(resource broker)\",\n        \"Lists the dictionaries available for the given broker\"\n    ],\n    \"enchant_broker_request_dict\": [\n        \"resource enchant_broker_request_dict(resource broker, string tag)\",\n        \"create a new dictionary using tag, the non-empty language tag you wish to request  a dictionary for (\\\"en_US\\\", \\\"de_DE\\\", ...)\"\n    ],\n    \"enchant_broker_request_pwl_dict\": [\n        \"resource enchant_broker_request_pwl_dict(resource broker, string filename)\",\n        \"creates a dictionary using a PWL file. A PWL file is personal word file one word per line. It must exist before the call.\"\n    ],\n    \"enchant_broker_set_dict_path\": [\n        \"bool enchant_broker_set_dict_path(resource broker, int dict_type, string value)\",\n        \"Set the directory path for a given backend, works with ispell and myspell\"\n    ],\n    \"enchant_broker_set_ordering\": [\n        \"bool enchant_broker_set_ordering(resource broker, string tag, string ordering)\",\n        \"Declares a preference of dictionaries to use for the language  described/referred to by 'tag'. The ordering is a comma delimited  list of provider names. As a special exception, the \\\"*\\\" tag can  be used as a language tag to declare a default ordering for any  language that does not explictly declare an ordering.\"\n    ],\n    \"enchant_dict_add_to_personal\": [\n        \"void enchant_dict_add_to_personal(resource dict, string word)\",\n        \"add 'word' to personal word list\"\n    ],\n    \"enchant_dict_add_to_session\": [\n        \"void enchant_dict_add_to_session(resource dict, string word)\",\n        \"add 'word' to this spell-checking session\"\n    ],\n    \"enchant_dict_check\": [\n        \"bool enchant_dict_check(resource dict, string word)\",\n        \"If the word is correctly spelled return true, otherwise return false\"\n    ],\n    \"enchant_dict_describe\": [\n        \"array enchant_dict_describe(resource dict)\",\n        \"Describes an individual dictionary 'dict'\"\n    ],\n    \"enchant_dict_get_error\": [\n        \"string enchant_dict_get_error(resource dict)\",\n        \"Returns the last error of the current spelling-session\"\n    ],\n    \"enchant_dict_is_in_session\": [\n        \"bool enchant_dict_is_in_session(resource dict, string word)\",\n        \"whether or not 'word' exists in this spelling-session\"\n    ],\n    \"enchant_dict_quick_check\": [\n        \"bool enchant_dict_quick_check(resource dict, string word [, array &suggestions])\",\n        \"If the word is correctly spelled return true, otherwise return false, if suggestions variable     is provided, fill it with spelling alternatives.\"\n    ],\n    \"enchant_dict_store_replacement\": [\n        \"void enchant_dict_store_replacement(resource dict, string mis, string cor)\",\n        \"add a correction for 'mis' using 'cor'.  Notes that you replaced @mis with @cor, so it's possibly more likely  that future occurrences of @mis will be replaced with @cor. So it might  bump @cor up in the suggestion list.\"\n    ],\n    \"enchant_dict_suggest\": [\n        \"array enchant_dict_suggest(resource dict, string word)\",\n        \"Will return a list of values if any of those pre-conditions are not met.\"\n    ],\n    \"end\": [\n        \"mixed end(array array_arg)\",\n        \"Advances array argument's internal pointer to the last element and return it\"\n    ],\n    \"ereg\": [\n        \"int ereg(string pattern, string string [, array registers])\",\n        \"Regular expression match\"\n    ],\n    \"ereg_replace\": [\n        \"string ereg_replace(string pattern, string replacement, string string)\",\n        \"Replace regular expression\"\n    ],\n    \"eregi\": [\n        \"int eregi(string pattern, string string [, array registers])\",\n        \"Case-insensitive regular expression match\"\n    ],\n    \"eregi_replace\": [\n        \"string eregi_replace(string pattern, string replacement, string string)\",\n        \"Case insensitive replace regular expression\"\n    ],\n    \"error_get_last\": [\n        \"array error_get_last()\",\n        \"Get the last occurred error as associative array. Returns NULL if there hasn't been an error yet.\"\n    ],\n    \"error_log\": [\n        \"bool error_log(string message [, int message_type [, string destination [, string extra_headers]]])\",\n        \"Send an error message somewhere\"\n    ],\n    \"error_reporting\": [\n        \"int error_reporting([int new_error_level])\",\n        \"Return the current error_reporting level, and if an argument was passed - change to the new level\"\n    ],\n    \"escapeshellarg\": [\n        \"string escapeshellarg(string arg)\",\n        \"Quote and escape an argument for use in a shell command\"\n    ],\n    \"escapeshellcmd\": [\n        \"string escapeshellcmd(string command)\",\n        \"Escape shell metacharacters\"\n    ],\n    \"exec\": [\n        \"string exec(string command [, array &output [, int &return_value]])\",\n        \"Execute an external program\"\n    ],\n    \"exif_imagetype\": [\n        \"int exif_imagetype(string imagefile)\",\n        \"Get the type of an image\"\n    ],\n    \"exif_read_data\": [\n        \"array exif_read_data(string filename [, sections_needed [, sub_arrays[, read_thumbnail]]])\",\n        \"Reads header data from the JPEG/TIFF image filename and optionally reads the internal thumbnails\"\n    ],\n    \"exif_tagname\": [\n        \"string exif_tagname(index)\",\n        \"Get headername for index or false if not defined\"\n    ],\n    \"exif_thumbnail\": [\n        \"string exif_thumbnail(string filename [, &width, &height [, &imagetype]])\",\n        \"Reads the embedded thumbnail\"\n    ],\n    \"exit\": [\n        \"void exit([mixed status])\",\n        \"Output a message and terminate the current script\"\n    ],\n    \"exp\": [\n        \"float exp(float number)\",\n        \"Returns e raised to the power of the number\"\n    ],\n    \"explode\": [\n        \"array explode(string separator, string str [, int limit])\",\n        \"Splits a string on string separator and return array of components. If limit is positive only limit number of components is returned. If limit is negative all components except the last abs(limit) are returned.\"\n    ],\n    \"expm1\": [\n        \"float expm1(float number)\",\n        \"Returns exp(number) - 1, computed in a way that accurate even when the value of number is close to zero\"\n    ],\n    \"extension_loaded\": [\n        \"bool extension_loaded(string extension_name)\",\n        \"Returns true if the named extension is loaded\"\n    ],\n    \"extract\": [\n        \"int extract(array var_array [, int extract_type [, string prefix]])\",\n        \"Imports variables into symbol table from an array\"\n    ],\n    \"ezmlm_hash\": [\n        \"int ezmlm_hash(string addr)\",\n        \"Calculate EZMLM list hash value.\"\n    ],\n    \"fclose\": [\n        \"bool fclose(resource fp)\",\n        \"Close an open file pointer\"\n    ],\n    \"feof\": [\n        \"bool feof(resource fp)\",\n        \"Test for end-of-file on a file pointer\"\n    ],\n    \"fflush\": [\n        \"bool fflush(resource fp)\",\n        \"Flushes output\"\n    ],\n    \"fgetc\": [\n        \"string fgetc(resource fp)\",\n        \"Get a character from file pointer\"\n    ],\n    \"fgetcsv\": [\n        \"array fgetcsv(resource fp [,int length [, string delimiter [, string enclosure [, string escape]]]])\",\n        \"Get line from file pointer and parse for CSV fields\"\n    ],\n    \"fgets\": [\n        \"string fgets(resource fp[, int length])\",\n        \"Get a line from file pointer\"\n    ],\n    \"fgetss\": [\n        \"string fgetss(resource fp [, int length [, string allowable_tags]])\",\n        \"Get a line from file pointer and strip HTML tags\"\n    ],\n    \"file\": [\n        \"array file(string filename [, int flags[, resource context]])\",\n        \"Read entire file into an array\"\n    ],\n    \"file_exists\": [\n        \"bool file_exists(string filename)\",\n        \"Returns true if filename exists\"\n    ],\n    \"file_get_contents\": [\n        \"string file_get_contents(string filename [, bool use_include_path [, resource context [, long offset [, long maxlen]]]])\",\n        \"Read the entire file into a string\"\n    ],\n    \"file_put_contents\": [\n        \"int file_put_contents(string file, mixed data [, int flags [, resource context]])\",\n        \"Write/Create a file with contents data and return the number of bytes written\"\n    ],\n    \"fileatime\": [\n        \"int fileatime(string filename)\",\n        \"Get last access time of file\"\n    ],\n    \"filectime\": [\n        \"int filectime(string filename)\",\n        \"Get inode modification time of file\"\n    ],\n    \"filegroup\": [\n        \"int filegroup(string filename)\",\n        \"Get file group\"\n    ],\n    \"fileinode\": [\n        \"int fileinode(string filename)\",\n        \"Get file inode\"\n    ],\n    \"filemtime\": [\n        \"int filemtime(string filename)\",\n        \"Get last modification time of file\"\n    ],\n    \"fileowner\": [\n        \"int fileowner(string filename)\",\n        \"Get file owner\"\n    ],\n    \"fileperms\": [\n        \"int fileperms(string filename)\",\n        \"Get file permissions\"\n    ],\n    \"filesize\": [\n        \"int filesize(string filename)\",\n        \"Get file size\"\n    ],\n    \"filetype\": [\n        \"string filetype(string filename)\",\n        \"Get file type\"\n    ],\n    \"filter_has_var\": [\n        \"mixed filter_has_var(constant type, string variable_name)\",\n        \"* Returns true if the variable with the name 'name' exists in source.\"\n    ],\n    \"filter_input\": [\n        \"mixed filter_input(constant type, string variable_name [, long filter [, mixed options]])\",\n        \"* Returns the filtered variable 'name'* from source `type`.\"\n    ],\n    \"filter_input_array\": [\n        \"mixed filter_input_array(constant type, [, mixed options]])\",\n        \"* Returns an array with all arguments defined in 'definition'.\"\n    ],\n    \"filter_var\": [\n        \"mixed filter_var(mixed variable [, long filter [, mixed options]])\",\n        \"* Returns the filtered version of the vriable.\"\n    ],\n    \"filter_var_array\": [\n        \"mixed filter_var_array(array data, [, mixed options]])\",\n        \"* Returns an array with all arguments defined in 'definition'.\"\n    ],\n    \"finfo_buffer\": [\n        \"string finfo_buffer(resource finfo, char *string [, int options [, resource context]])\",\n        \"Return infromation about a string buffer.\"\n    ],\n    \"finfo_close\": [\n        \"resource finfo_close(resource finfo)\",\n        \"Close fileinfo resource.\"\n    ],\n    \"finfo_file\": [\n        \"string finfo_file(resource finfo, char *file_name [, int options [, resource context]])\",\n        \"Return information about a file.\"\n    ],\n    \"finfo_open\": [\n        \"resource finfo_open([int options [, string arg]])\",\n        \"Create a new fileinfo resource.\"\n    ],\n    \"finfo_set_flags\": [\n        \"bool finfo_set_flags(resource finfo, int options)\",\n        \"Set libmagic configuration options.\"\n    ],\n    \"floatval\": [\n        \"float floatval(mixed var)\",\n        \"Get the float value of a variable\"\n    ],\n    \"flock\": [\n        \"bool flock(resource fp, int operation [, int &wouldblock])\",\n        \"Portable file locking\"\n    ],\n    \"floor\": [\n        \"float floor(float number)\",\n        \"Returns the next lowest integer value from the number\"\n    ],\n    \"flush\": [\n        \"void flush(void)\",\n        \"Flush the output buffer\"\n    ],\n    \"fmod\": [\n        \"float fmod(float x, float y)\",\n        \"Returns the remainder of dividing x by y as a float\"\n    ],\n    \"fnmatch\": [\n        \"bool fnmatch(string pattern, string filename [, int flags])\",\n        \"Match filename against pattern\"\n    ],\n    \"fopen\": [\n        \"resource fopen(string filename, string mode [, bool use_include_path [, resource context]])\",\n        \"Open a file or a URL and return a file pointer\"\n    ],\n    \"forward_static_call\": [\n        \"mixed forward_static_call(mixed function_name [, mixed parmeter] [, mixed ...])\",\n        \"Call a user function which is the first parameter\"\n    ],\n    \"fpassthru\": [\n        \"int fpassthru(resource fp)\",\n        \"Output all remaining data from a file pointer\"\n    ],\n    \"fprintf\": [\n        \"int fprintf(resource stream, string format [, mixed arg1 [, mixed ...]])\",\n        \"Output a formatted string into a stream\"\n    ],\n    \"fputcsv\": [\n        \"int fputcsv(resource fp, array fields [, string delimiter [, string enclosure]])\",\n        \"Format line as CSV and write to file pointer\"\n    ],\n    \"fread\": [\n        \"string fread(resource fp, int length)\",\n        \"Binary-safe file read\"\n    ],\n    \"frenchtojd\": [\n        \"int frenchtojd(int month, int day, int year)\",\n        \"Converts a french republic calendar date to julian day count\"\n    ],\n    \"fscanf\": [\n        \"mixed fscanf(resource stream, string format [, string ...])\",\n        \"Implements a mostly ANSI compatible fscanf()\"\n    ],\n    \"fseek\": [\n        \"int fseek(resource fp, int offset [, int whence])\",\n        \"Seek on a file pointer\"\n    ],\n    \"fsockopen\": [\n        \"resource fsockopen(string hostname, int port [, int errno [, string errstr [, float timeout]]])\",\n        \"Open Internet or Unix domain socket connection\"\n    ],\n    \"fstat\": [\n        \"array fstat(resource fp)\",\n        \"Stat() on a filehandle\"\n    ],\n    \"ftell\": [\n        \"int ftell(resource fp)\",\n        \"Get file pointer's read/write position\"\n    ],\n    \"ftok\": [\n        \"int ftok(string pathname, string proj)\",\n        \"Convert a pathname and a project identifier to a System V IPC key\"\n    ],\n    \"ftp_alloc\": [\n        \"bool ftp_alloc(resource stream, int size[, &response])\",\n        \"Attempt to allocate space on the remote FTP server\"\n    ],\n    \"ftp_cdup\": [\n        \"bool ftp_cdup(resource stream)\",\n        \"Changes to the parent directory\"\n    ],\n    \"ftp_chdir\": [\n        \"bool ftp_chdir(resource stream, string directory)\",\n        \"Changes directories\"\n    ],\n    \"ftp_chmod\": [\n        \"int ftp_chmod(resource stream, int mode, string filename)\",\n        \"Sets permissions on a file\"\n    ],\n    \"ftp_close\": [\n        \"bool ftp_close(resource stream)\",\n        \"Closes the FTP stream\"\n    ],\n    \"ftp_connect\": [\n        \"resource ftp_connect(string host [, int port [, int timeout]])\",\n        \"Opens a FTP stream\"\n    ],\n    \"ftp_delete\": [\n        \"bool ftp_delete(resource stream, string file)\",\n        \"Deletes a file\"\n    ],\n    \"ftp_exec\": [\n        \"bool ftp_exec(resource stream, string command)\",\n        \"Requests execution of a program on the FTP server\"\n    ],\n    \"ftp_fget\": [\n        \"bool ftp_fget(resource stream, resource fp, string remote_file, int mode[, int resumepos])\",\n        \"Retrieves a file from the FTP server and writes it to an open file\"\n    ],\n    \"ftp_fput\": [\n        \"bool ftp_fput(resource stream, string remote_file, resource fp, int mode[, int startpos])\",\n        \"Stores a file from an open file to the FTP server\"\n    ],\n    \"ftp_get\": [\n        \"bool ftp_get(resource stream, string local_file, string remote_file, int mode[, int resume_pos])\",\n        \"Retrieves a file from the FTP server and writes it to a local file\"\n    ],\n    \"ftp_get_option\": [\n        \"mixed ftp_get_option(resource stream, int option)\",\n        \"Gets an FTP option\"\n    ],\n    \"ftp_login\": [\n        \"bool ftp_login(resource stream, string username, string password)\",\n        \"Logs into the FTP server\"\n    ],\n    \"ftp_mdtm\": [\n        \"int ftp_mdtm(resource stream, string filename)\",\n        \"Returns the last modification time of the file, or -1 on error\"\n    ],\n    \"ftp_mkdir\": [\n        \"string ftp_mkdir(resource stream, string directory)\",\n        \"Creates a directory and returns the absolute path for the new directory or false on error\"\n    ],\n    \"ftp_nb_continue\": [\n        \"int ftp_nb_continue(resource stream)\",\n        \"Continues retrieving/sending a file nbronously\"\n    ],\n    \"ftp_nb_fget\": [\n        \"int ftp_nb_fget(resource stream, resource fp, string remote_file, int mode[, int resumepos])\",\n        \"Retrieves a file from the FTP server asynchronly and writes it to an open file\"\n    ],\n    \"ftp_nb_fput\": [\n        \"int ftp_nb_fput(resource stream, string remote_file, resource fp, int mode[, int startpos])\",\n        \"Stores a file from an open file to the FTP server nbronly\"\n    ],\n    \"ftp_nb_get\": [\n        \"int ftp_nb_get(resource stream, string local_file, string remote_file, int mode[, int resume_pos])\",\n        \"Retrieves a file from the FTP server nbhronly and writes it to a local file\"\n    ],\n    \"ftp_nb_put\": [\n        \"int ftp_nb_put(resource stream, string remote_file, string local_file, int mode[, int startpos])\",\n        \"Stores a file on the FTP server\"\n    ],\n    \"ftp_nlist\": [\n        \"array ftp_nlist(resource stream, string directory)\",\n        \"Returns an array of filenames in the given directory\"\n    ],\n    \"ftp_pasv\": [\n        \"bool ftp_pasv(resource stream, bool pasv)\",\n        \"Turns passive mode on or off\"\n    ],\n    \"ftp_put\": [\n        \"bool ftp_put(resource stream, string remote_file, string local_file, int mode[, int startpos])\",\n        \"Stores a file on the FTP server\"\n    ],\n    \"ftp_pwd\": [\n        \"string ftp_pwd(resource stream)\",\n        \"Returns the present working directory\"\n    ],\n    \"ftp_raw\": [\n        \"array ftp_raw(resource stream, string command)\",\n        \"Sends a literal command to the FTP server\"\n    ],\n    \"ftp_rawlist\": [\n        \"array ftp_rawlist(resource stream, string directory [, bool recursive])\",\n        \"Returns a detailed listing of a directory as an array of output lines\"\n    ],\n    \"ftp_rename\": [\n        \"bool ftp_rename(resource stream, string src, string dest)\",\n        \"Renames the given file to a new path\"\n    ],\n    \"ftp_rmdir\": [\n        \"bool ftp_rmdir(resource stream, string directory)\",\n        \"Removes a directory\"\n    ],\n    \"ftp_set_option\": [\n        \"bool ftp_set_option(resource stream, int option, mixed value)\",\n        \"Sets an FTP option\"\n    ],\n    \"ftp_site\": [\n        \"bool ftp_site(resource stream, string cmd)\",\n        \"Sends a SITE command to the server\"\n    ],\n    \"ftp_size\": [\n        \"int ftp_size(resource stream, string filename)\",\n        \"Returns the size of the file, or -1 on error\"\n    ],\n    \"ftp_ssl_connect\": [\n        \"resource ftp_ssl_connect(string host [, int port [, int timeout]])\",\n        \"Opens a FTP-SSL stream\"\n    ],\n    \"ftp_systype\": [\n        \"string ftp_systype(resource stream)\",\n        \"Returns the system type identifier\"\n    ],\n    \"ftruncate\": [\n        \"bool ftruncate(resource fp, int size)\",\n        \"Truncate file to 'size' length\"\n    ],\n    \"func_get_arg\": [\n        \"mixed func_get_arg(int arg_num)\",\n        \"Get the $arg_num'th argument that was passed to the function\"\n    ],\n    \"func_get_args\": [\n        \"array func_get_args()\",\n        \"Get an array of the arguments that were passed to the function\"\n    ],\n    \"func_num_args\": [\n        \"int func_num_args(void)\",\n        \"Get the number of arguments that were passed to the function\"\n    ],\n    \"function_exists\": [\n        \"bool function_exists(string function_name)\",\n        \"Checks if the function exists\"\n    ],\n    \"fwrite\": [\n        \"int fwrite(resource fp, string str [, int length])\",\n        \"Binary-safe file write\"\n    ],\n    \"gc_collect_cycles\": [\n        \"int gc_collect_cycles(void)\",\n        \"Forces collection of any existing garbage cycles.    Returns number of freed zvals\"\n    ],\n    \"gc_disable\": [\n        \"void gc_disable(void)\",\n        \"Deactivates the circular reference collector\"\n    ],\n    \"gc_enable\": [\n        \"void gc_enable(void)\",\n        \"Activates the circular reference collector\"\n    ],\n    \"gc_enabled\": [\n        \"void gc_enabled(void)\",\n        \"Returns status of the circular reference collector\"\n    ],\n    \"gd_info\": [\n        \"array gd_info()\",\n        \"\"\n    ],\n    \"getKeywords\": [\n        \"static array getKeywords(string $locale) {\",\n        \"* return an associative array containing keyword-value  * pairs for this locale. The keys are keys to the array (doh!)  * }}}\"\n    ],\n    \"get_browser\": [\n        \"mixed get_browser([string browser_name [, bool return_array]])\",\n        \"Get information about the capabilities of a browser. If browser_name is omitted or null, HTTP_USER_AGENT is used. Returns an object by default; if return_array is true, returns an array.\"\n    ],\n    \"get_called_class\": [\n        \"string get_called_class()\",\n        \"Retrieves the \\\"Late Static Binding\\\" class name\"\n    ],\n    \"get_cfg_var\": [\n        \"mixed get_cfg_var(string option_name)\",\n        \"Get the value of a PHP configuration option\"\n    ],\n    \"get_class\": [\n        \"string get_class([object object])\",\n        \"Retrieves the class name\"\n    ],\n    \"get_class_methods\": [\n        \"array get_class_methods(mixed class)\",\n        \"Returns an array of method names for class or class instance.\"\n    ],\n    \"get_class_vars\": [\n        \"array get_class_vars(string class_name)\",\n        \"Returns an array of default properties of the class.\"\n    ],\n    \"get_current_user\": [\n        \"string get_current_user(void)\",\n        \"Get the name of the owner of the current PHP script\"\n    ],\n    \"get_declared_classes\": [\n        \"array get_declared_classes()\",\n        \"Returns an array of all declared classes.\"\n    ],\n    \"get_declared_interfaces\": [\n        \"array get_declared_interfaces()\",\n        \"Returns an array of all declared interfaces.\"\n    ],\n    \"get_defined_constants\": [\n        \"array get_defined_constants([bool categorize])\",\n        \"Return an array containing the names and values of all defined constants\"\n    ],\n    \"get_defined_functions\": [\n        \"array get_defined_functions(void)\",\n        \"Returns an array of all defined functions\"\n    ],\n    \"get_defined_vars\": [\n        \"array get_defined_vars(void)\",\n        \"Returns an associative array of names and values of all currently defined variable names (variables in the current scope)\"\n    ],\n    \"get_display_language\": [\n        \"static string get_display_language($locale[, $in_locale = null])\",\n        \"* gets the language for the $locale in $in_locale or default_locale\"\n    ],\n    \"get_display_name\": [\n        \"static string get_display_name($locale[, $in_locale = null])\",\n        \"* gets the name for the $locale in $in_locale or default_locale\"\n    ],\n    \"get_display_region\": [\n        \"static string get_display_region($locale, $in_locale = null)\",\n        \"* gets the region for the $locale in $in_locale or default_locale\"\n    ],\n    \"get_display_script\": [\n        \"static string get_display_script($locale, $in_locale = null)\",\n        \"* gets the script for the $locale in $in_locale or default_locale\"\n    ],\n    \"get_extension_funcs\": [\n        \"array get_extension_funcs(string extension_name)\",\n        \"Returns an array with the names of functions belonging to the named extension\"\n    ],\n    \"get_headers\": [\n        \"array get_headers(string url[, int format])\",\n        \"fetches all the headers sent by the server in response to a HTTP request\"\n    ],\n    \"get_html_translation_table\": [\n        \"array get_html_translation_table([int table [, int quote_style]])\",\n        \"Returns the internal translation table used by htmlspecialchars and htmlentities\"\n    ],\n    \"get_include_path\": [\n        \"string get_include_path()\",\n        \"Get the current include_path configuration option\"\n    ],\n    \"get_included_files\": [\n        \"array get_included_files(void)\",\n        \"Returns an array with the file names that were include_once()'d\"\n    ],\n    \"get_loaded_extensions\": [\n        \"array get_loaded_extensions([bool zend_extensions])\",\n        \"Return an array containing names of loaded extensions\"\n    ],\n    \"get_magic_quotes_gpc\": [\n        \"int get_magic_quotes_gpc(void)\",\n        \"Get the current active configuration setting of magic_quotes_gpc\"\n    ],\n    \"get_magic_quotes_runtime\": [\n        \"int get_magic_quotes_runtime(void)\",\n        \"Get the current active configuration setting of magic_quotes_runtime\"\n    ],\n    \"get_meta_tags\": [\n        \"array get_meta_tags(string filename [, bool use_include_path])\",\n        \"Extracts all meta tag content attributes from a file and returns an array\"\n    ],\n    \"get_object_vars\": [\n        \"array get_object_vars(object obj)\",\n        \"Returns an array of object properties\"\n    ],\n    \"get_parent_class\": [\n        \"string get_parent_class([mixed object])\",\n        \"Retrieves the parent class name for object or class or current scope.\"\n    ],\n    \"get_resource_type\": [\n        \"string get_resource_type(resource res)\",\n        \"Get the resource type name for a given resource\"\n    ],\n    \"getallheaders\": [\n        \"array getallheaders(void)\",\n        \"\"\n    ],\n    \"getcwd\": [\n        \"mixed getcwd(void)\",\n        \"Gets the current directory\"\n    ],\n    \"getdate\": [\n        \"array getdate([int timestamp])\",\n        \"Get date/time information\"\n    ],\n    \"getenv\": [\n        \"string getenv(string varname)\",\n        \"Get the value of an environment variable\"\n    ],\n    \"gethostbyaddr\": [\n        \"string gethostbyaddr(string ip_address)\",\n        \"Get the Internet host name corresponding to a given IP address\"\n    ],\n    \"gethostbyname\": [\n        \"string gethostbyname(string hostname)\",\n        \"Get the IP address corresponding to a given Internet host name\"\n    ],\n    \"gethostbynamel\": [\n        \"array gethostbynamel(string hostname)\",\n        \"Return a list of IP addresses that a given hostname resolves to.\"\n    ],\n    \"gethostname\": [\n        \"string gethostname()\",\n        \"Get the host name of the current machine\"\n    ],\n    \"getimagesize\": [\n        \"array getimagesize(string imagefile [, array info])\",\n        \"Get the size of an image as 4-element array\"\n    ],\n    \"getlastmod\": [\n        \"int getlastmod(void)\",\n        \"Get time of last page modification\"\n    ],\n    \"getmygid\": [\n        \"int getmygid(void)\",\n        \"Get PHP script owner's GID\"\n    ],\n    \"getmyinode\": [\n        \"int getmyinode(void)\",\n        \"Get the inode of the current script being parsed\"\n    ],\n    \"getmypid\": [\n        \"int getmypid(void)\",\n        \"Get current process ID\"\n    ],\n    \"getmyuid\": [\n        \"int getmyuid(void)\",\n        \"Get PHP script owner's UID\"\n    ],\n    \"getopt\": [\n        \"array getopt(string options [, array longopts])\",\n        \"Get options from the command line argument list\"\n    ],\n    \"getprotobyname\": [\n        \"int getprotobyname(string name)\",\n        \"Returns protocol number associated with name as per /etc/protocols\"\n    ],\n    \"getprotobynumber\": [\n        \"string getprotobynumber(int proto)\",\n        \"Returns protocol name associated with protocol number proto\"\n    ],\n    \"getrandmax\": [\n        \"int getrandmax(void)\",\n        \"Returns the maximum value a random number can have\"\n    ],\n    \"getrusage\": [\n        \"array getrusage([int who])\",\n        \"Returns an array of usage statistics\"\n    ],\n    \"getservbyname\": [\n        \"int getservbyname(string service, string protocol)\",\n        \"Returns port associated with service. Protocol must be \\\"tcp\\\" or \\\"udp\\\"\"\n    ],\n    \"getservbyport\": [\n        \"string getservbyport(int port, string protocol)\",\n        \"Returns service name associated with port. Protocol must be \\\"tcp\\\" or \\\"udp\\\"\"\n    ],\n    \"gettext\": [\n        \"string gettext(string msgid)\",\n        \"Return the translation of msgid for the current domain, or msgid unaltered if a translation does not exist\"\n    ],\n    \"gettimeofday\": [\n        \"array gettimeofday([bool get_as_float])\",\n        \"Returns the current time as array\"\n    ],\n    \"gettype\": [\n        \"string gettype(mixed var)\",\n        \"Returns the type of the variable\"\n    ],\n    \"glob\": [\n        \"array glob(string pattern [, int flags])\",\n        \"Find pathnames matching a pattern\"\n    ],\n    \"gmdate\": [\n        \"string gmdate(string format [, long timestamp])\",\n        \"Format a GMT date/time\"\n    ],\n    \"gmmktime\": [\n        \"int gmmktime([int hour [, int min [, int sec [, int mon [, int day [, int year]]]]]])\",\n        \"Get UNIX timestamp for a GMT date\"\n    ],\n    \"gmp_abs\": [\n        \"resource gmp_abs(resource a)\",\n        \"Calculates absolute value\"\n    ],\n    \"gmp_add\": [\n        \"resource gmp_add(resource a, resource b)\",\n        \"Add a and b\"\n    ],\n    \"gmp_and\": [\n        \"resource gmp_and(resource a, resource b)\",\n        \"Calculates logical AND of a and b\"\n    ],\n    \"gmp_clrbit\": [\n        \"void gmp_clrbit(resource &a, int index)\",\n        \"Clears bit in a\"\n    ],\n    \"gmp_cmp\": [\n        \"int gmp_cmp(resource a, resource b)\",\n        \"Compares two numbers\"\n    ],\n    \"gmp_com\": [\n        \"resource gmp_com(resource a)\",\n        \"Calculates one's complement of a\"\n    ],\n    \"gmp_div_q\": [\n        \"resource gmp_div_q(resource a, resource b [, int round])\",\n        \"Divide a by b, returns quotient only\"\n    ],\n    \"gmp_div_qr\": [\n        \"array gmp_div_qr(resource a, resource b [, int round])\",\n        \"Divide a by b, returns quotient and reminder\"\n    ],\n    \"gmp_div_r\": [\n        \"resource gmp_div_r(resource a, resource b [, int round])\",\n        \"Divide a by b, returns reminder only\"\n    ],\n    \"gmp_divexact\": [\n        \"resource gmp_divexact(resource a, resource b)\",\n        \"Divide a by b using exact division algorithm\"\n    ],\n    \"gmp_fact\": [\n        \"resource gmp_fact(int a)\",\n        \"Calculates factorial function\"\n    ],\n    \"gmp_gcd\": [\n        \"resource gmp_gcd(resource a, resource b)\",\n        \"Computes greatest common denominator (gcd) of a and b\"\n    ],\n    \"gmp_gcdext\": [\n        \"array gmp_gcdext(resource a, resource b)\",\n        \"Computes G, S, and T, such that AS + BT = G = `gcd' (A, B)\"\n    ],\n    \"gmp_hamdist\": [\n        \"int gmp_hamdist(resource a, resource b)\",\n        \"Calculates hamming distance between a and b\"\n    ],\n    \"gmp_init\": [\n        \"resource gmp_init(mixed number [, int base])\",\n        \"Initializes GMP number\"\n    ],\n    \"gmp_intval\": [\n        \"int gmp_intval(resource gmpnumber)\",\n        \"Gets signed long value of GMP number\"\n    ],\n    \"gmp_invert\": [\n        \"resource gmp_invert(resource a, resource b)\",\n        \"Computes the inverse of a modulo b\"\n    ],\n    \"gmp_jacobi\": [\n        \"int gmp_jacobi(resource a, resource b)\",\n        \"Computes Jacobi symbol\"\n    ],\n    \"gmp_legendre\": [\n        \"int gmp_legendre(resource a, resource b)\",\n        \"Computes Legendre symbol\"\n    ],\n    \"gmp_mod\": [\n        \"resource gmp_mod(resource a, resource b)\",\n        \"Computes a modulo b\"\n    ],\n    \"gmp_mul\": [\n        \"resource gmp_mul(resource a, resource b)\",\n        \"Multiply a and b\"\n    ],\n    \"gmp_neg\": [\n        \"resource gmp_neg(resource a)\",\n        \"Negates a number\"\n    ],\n    \"gmp_nextprime\": [\n        \"resource gmp_nextprime(resource a)\",\n        \"Finds next prime of a\"\n    ],\n    \"gmp_or\": [\n        \"resource gmp_or(resource a, resource b)\",\n        \"Calculates logical OR of a and b\"\n    ],\n    \"gmp_perfect_square\": [\n        \"bool gmp_perfect_square(resource a)\",\n        \"Checks if a is an exact square\"\n    ],\n    \"gmp_popcount\": [\n        \"int gmp_popcount(resource a)\",\n        \"Calculates the population count of a\"\n    ],\n    \"gmp_pow\": [\n        \"resource gmp_pow(resource base, int exp)\",\n        \"Raise base to power exp\"\n    ],\n    \"gmp_powm\": [\n        \"resource gmp_powm(resource base, resource exp, resource mod)\",\n        \"Raise base to power exp and take result modulo mod\"\n    ],\n    \"gmp_prob_prime\": [\n        \"int gmp_prob_prime(resource a[, int reps])\",\n        \"Checks if a is \\\"probably prime\\\"\"\n    ],\n    \"gmp_random\": [\n        \"resource gmp_random([int limiter])\",\n        \"Gets random number\"\n    ],\n    \"gmp_scan0\": [\n        \"int gmp_scan0(resource a, int start)\",\n        \"Finds first zero bit\"\n    ],\n    \"gmp_scan1\": [\n        \"int gmp_scan1(resource a, int start)\",\n        \"Finds first non-zero bit\"\n    ],\n    \"gmp_setbit\": [\n        \"void gmp_setbit(resource &a, int index[, bool set_clear])\",\n        \"Sets or clear bit in a\"\n    ],\n    \"gmp_sign\": [\n        \"int gmp_sign(resource a)\",\n        \"Gets the sign of the number\"\n    ],\n    \"gmp_sqrt\": [\n        \"resource gmp_sqrt(resource a)\",\n        \"Takes integer part of square root of a\"\n    ],\n    \"gmp_sqrtrem\": [\n        \"array gmp_sqrtrem(resource a)\",\n        \"Square root with remainder\"\n    ],\n    \"gmp_strval\": [\n        \"string gmp_strval(resource gmpnumber [, int base])\",\n        \"Gets string representation of GMP number\"\n    ],\n    \"gmp_sub\": [\n        \"resource gmp_sub(resource a, resource b)\",\n        \"Subtract b from a\"\n    ],\n    \"gmp_testbit\": [\n        \"bool gmp_testbit(resource a, int index)\",\n        \"Tests if bit is set in a\"\n    ],\n    \"gmp_xor\": [\n        \"resource gmp_xor(resource a, resource b)\",\n        \"Calculates logical exclusive OR of a and b\"\n    ],\n    \"gmstrftime\": [\n        \"string gmstrftime(string format [, int timestamp])\",\n        \"Format a GMT/UCT time/date according to locale settings\"\n    ],\n    \"grapheme_extract\": [\n        \"string grapheme_extract(string str, int size[, int extract_type[, int start[, int next]]])\",\n        \"Function to extract a sequence of default grapheme clusters\"\n    ],\n    \"grapheme_stripos\": [\n        \"int grapheme_stripos(string haystack, string needle [, int offset ])\",\n        \"Find position of first occurrence of a string within another, ignoring case differences\"\n    ],\n    \"grapheme_stristr\": [\n        \"string grapheme_stristr(string haystack, string needle[, bool part])\",\n        \"Finds first occurrence of a string within another\"\n    ],\n    \"grapheme_strlen\": [\n        \"int grapheme_strlen(string str)\",\n        \"Get number of graphemes in a string\"\n    ],\n    \"grapheme_strpos\": [\n        \"int grapheme_strpos(string haystack, string needle [, int offset ])\",\n        \"Find position of first occurrence of a string within another\"\n    ],\n    \"grapheme_strripos\": [\n        \"int grapheme_strripos(string haystack, string needle [, int offset])\",\n        \"Find position of last occurrence of a string within another, ignoring case\"\n    ],\n    \"grapheme_strrpos\": [\n        \"int grapheme_strrpos(string haystack, string needle [, int offset])\",\n        \"Find position of last occurrence of a string within another\"\n    ],\n    \"grapheme_strstr\": [\n        \"string grapheme_strstr(string haystack, string needle[, bool part])\",\n        \"Finds first occurrence of a string within another\"\n    ],\n    \"grapheme_substr\": [\n        \"string grapheme_substr(string str, int start [, int length])\",\n        \"Returns part of a string\"\n    ],\n    \"gregoriantojd\": [\n        \"int gregoriantojd(int month, int day, int year)\",\n        \"Converts a gregorian calendar date to julian day count\"\n    ],\n    \"gzcompress\": [\n        \"string gzcompress(string data [, int level])\",\n        \"Gzip-compress a string\"\n    ],\n    \"gzdeflate\": [\n        \"string gzdeflate(string data [, int level])\",\n        \"Gzip-compress a string\"\n    ],\n    \"gzencode\": [\n        \"string gzencode(string data [, int level [, int encoding_mode]])\",\n        \"GZ encode a string\"\n    ],\n    \"gzfile\": [\n        \"array gzfile(string filename [, int use_include_path])\",\n        \"Read und uncompress entire .gz-file into an array\"\n    ],\n    \"gzinflate\": [\n        \"string gzinflate(string data [, int length])\",\n        \"Unzip a gzip-compressed string\"\n    ],\n    \"gzopen\": [\n        \"resource gzopen(string filename, string mode [, int use_include_path])\",\n        \"Open a .gz-file and return a .gz-file pointer\"\n    ],\n    \"gzuncompress\": [\n        \"string gzuncompress(string data [, int length])\",\n        \"Unzip a gzip-compressed string\"\n    ],\n    \"hash\": [\n        \"string hash(string algo, string data[, bool raw_output = false])\",\n        \"Generate a hash of a given input string Returns lowercase hexits by default\"\n    ],\n    \"hash_algos\": [\n        \"array hash_algos(void)\",\n        \"Return a list of registered hashing algorithms\"\n    ],\n    \"hash_copy\": [\n        \"resource hash_copy(resource context)\",\n        \"Copy hash resource\"\n    ],\n    \"hash_file\": [\n        \"string hash_file(string algo, string filename[, bool raw_output = false])\",\n        \"Generate a hash of a given file Returns lowercase hexits by default\"\n    ],\n    \"hash_final\": [\n        \"string hash_final(resource context[, bool raw_output=false])\",\n        \"Output resulting digest\"\n    ],\n    \"hash_hmac\": [\n        \"string hash_hmac(string algo, string data, string key[, bool raw_output = false])\",\n        \"Generate a hash of a given input string with a key using HMAC Returns lowercase hexits by default\"\n    ],\n    \"hash_hmac_file\": [\n        \"string hash_hmac_file(string algo, string filename, string key[, bool raw_output = false])\",\n        \"Generate a hash of a given file with a key using HMAC Returns lowercase hexits by default\"\n    ],\n    \"hash_init\": [\n        \"resource hash_init(string algo[, int options, string key])\",\n        \"Initialize a hashing context\"\n    ],\n    \"hash_update\": [\n        \"bool hash_update(resource context, string data)\",\n        \"Pump data into the hashing algorithm\"\n    ],\n    \"hash_update_file\": [\n        \"bool hash_update_file(resource context, string filename[, resource context])\",\n        \"Pump data into the hashing algorithm from a file\"\n    ],\n    \"hash_update_stream\": [\n        \"int hash_update_stream(resource context, resource handle[, integer length])\",\n        \"Pump data into the hashing algorithm from an open stream\"\n    ],\n    \"header\": [\n        \"void header(string header [, bool replace, [int http_response_code]])\",\n        \"Sends a raw HTTP header\"\n    ],\n    \"header_remove\": [\n        \"void header_remove([string name])\",\n        \"Removes an HTTP header previously set using header()\"\n    ],\n    \"headers_list\": [\n        \"array headers_list(void)\",\n        \"Return list of headers to be sent / already sent\"\n    ],\n    \"headers_sent\": [\n        \"bool headers_sent([string &$file [, int &$line]])\",\n        \"Returns true if headers have already been sent, false otherwise\"\n    ],\n    \"hebrev\": [\n        \"string hebrev(string str [, int max_chars_per_line])\",\n        \"Converts logical Hebrew text to visual text\"\n    ],\n    \"hebrevc\": [\n        \"string hebrevc(string str [, int max_chars_per_line])\",\n        \"Converts logical Hebrew text to visual text with newline conversion\"\n    ],\n    \"hexdec\": [\n        \"int hexdec(string hexadecimal_number)\",\n        \"Returns the decimal equivalent of the hexadecimal number\"\n    ],\n    \"highlight_file\": [\n        \"bool highlight_file(string file_name [, bool return] )\",\n        \"Syntax highlight a source file\"\n    ],\n    \"highlight_string\": [\n        \"bool highlight_string(string string [, bool return] )\",\n        \"Syntax highlight a string or optionally return it\"\n    ],\n    \"html_entity_decode\": [\n        \"string html_entity_decode(string string [, int quote_style][, string charset])\",\n        \"Convert all HTML entities to their applicable characters\"\n    ],\n    \"htmlentities\": [\n        \"string htmlentities(string string [, int quote_style[, string charset[, bool double_encode]]])\",\n        \"Convert all applicable characters to HTML entities\"\n    ],\n    \"htmlspecialchars\": [\n        \"string htmlspecialchars(string string [, int quote_style[, string charset[, bool double_encode]]])\",\n        \"Convert special characters to HTML entities\"\n    ],\n    \"htmlspecialchars_decode\": [\n        \"string htmlspecialchars_decode(string string [, int quote_style])\",\n        \"Convert special HTML entities back to characters\"\n    ],\n    \"http_build_query\": [\n        \"string http_build_query(mixed formdata [, string prefix [, string arg_separator]])\",\n        \"Generates a form-encoded query string from an associative array or object.\"\n    ],\n    \"hypot\": [\n        \"float hypot(float num1, float num2)\",\n        \"Returns sqrt(num1*num1 + num2*num2)\"\n    ],\n    \"ibase_add_user\": [\n        \"bool ibase_add_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])\",\n        \"Add a user to security database\"\n    ],\n    \"ibase_affected_rows\": [\n        \"int ibase_affected_rows( [ resource link_identifier ] )\",\n        \"Returns the number of rows affected by the previous INSERT, UPDATE or DELETE statement\"\n    ],\n    \"ibase_backup\": [\n        \"mixed ibase_backup(resource service_handle, string source_db, string dest_file [, int options [, bool verbose]])\",\n        \"Initiates a backup task in the service manager and returns immediately\"\n    ],\n    \"ibase_blob_add\": [\n        \"bool ibase_blob_add(resource blob_handle, string data)\",\n        \"Add data into created blob\"\n    ],\n    \"ibase_blob_cancel\": [\n        \"bool ibase_blob_cancel(resource blob_handle)\",\n        \"Cancel creating blob\"\n    ],\n    \"ibase_blob_close\": [\n        \"string ibase_blob_close(resource blob_handle)\",\n        \"Close blob\"\n    ],\n    \"ibase_blob_create\": [\n        \"resource ibase_blob_create([resource link_identifier])\",\n        \"Create blob for adding data\"\n    ],\n    \"ibase_blob_echo\": [\n        \"bool ibase_blob_echo([ resource link_identifier, ] string blob_id)\",\n        \"Output blob contents to browser\"\n    ],\n    \"ibase_blob_get\": [\n        \"string ibase_blob_get(resource blob_handle, int len)\",\n        \"Get len bytes data from open blob\"\n    ],\n    \"ibase_blob_import\": [\n        \"string ibase_blob_import([ resource link_identifier, ] resource file)\",\n        \"Create blob, copy file in it, and close it\"\n    ],\n    \"ibase_blob_info\": [\n        \"array ibase_blob_info([ resource link_identifier, ] string blob_id)\",\n        \"Return blob length and other useful info\"\n    ],\n    \"ibase_blob_open\": [\n        \"resource ibase_blob_open([ resource link_identifier, ] string blob_id)\",\n        \"Open blob for retrieving data parts\"\n    ],\n    \"ibase_close\": [\n        \"bool ibase_close([resource link_identifier])\",\n        \"Close an InterBase connection\"\n    ],\n    \"ibase_commit\": [\n        \"bool ibase_commit( resource link_identifier )\",\n        \"Commit transaction\"\n    ],\n    \"ibase_commit_ret\": [\n        \"bool ibase_commit_ret( resource link_identifier )\",\n        \"Commit transaction and retain the transaction context\"\n    ],\n    \"ibase_connect\": [\n        \"resource ibase_connect(string database [, string username [, string password [, string charset [, int buffers [, int dialect [, string role]]]]]])\",\n        \"Open a connection to an InterBase database\"\n    ],\n    \"ibase_db_info\": [\n        \"string ibase_db_info(resource service_handle, string db, int action [, int argument])\",\n        \"Request statistics about a database\"\n    ],\n    \"ibase_delete_user\": [\n        \"bool ibase_delete_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])\",\n        \"Delete a user from security database\"\n    ],\n    \"ibase_drop_db\": [\n        \"bool ibase_drop_db([resource link_identifier])\",\n        \"Drop an InterBase database\"\n    ],\n    \"ibase_errcode\": [\n        \"int ibase_errcode(void)\",\n        \"Return error code\"\n    ],\n    \"ibase_errmsg\": [\n        \"string ibase_errmsg(void)\",\n        \"Return error message\"\n    ],\n    \"ibase_execute\": [\n        \"mixed ibase_execute(resource query [, mixed bind_arg [, mixed bind_arg [, ...]]])\",\n        \"Execute a previously prepared query\"\n    ],\n    \"ibase_fetch_assoc\": [\n        \"array ibase_fetch_assoc(resource result [, int fetch_flags])\",\n        \"Fetch a row  from the results of a query\"\n    ],\n    \"ibase_fetch_object\": [\n        \"object ibase_fetch_object(resource result [, int fetch_flags])\",\n        \"Fetch a object from the results of a query\"\n    ],\n    \"ibase_fetch_row\": [\n        \"array ibase_fetch_row(resource result [, int fetch_flags])\",\n        \"Fetch a row  from the results of a query\"\n    ],\n    \"ibase_field_info\": [\n        \"array ibase_field_info(resource query_result, int field_number)\",\n        \"Get information about a field\"\n    ],\n    \"ibase_free_event_handler\": [\n        \"bool ibase_free_event_handler(resource event)\",\n        \"Frees the event handler set by ibase_set_event_handler()\"\n    ],\n    \"ibase_free_query\": [\n        \"bool ibase_free_query(resource query)\",\n        \"Free memory used by a query\"\n    ],\n    \"ibase_free_result\": [\n        \"bool ibase_free_result(resource result)\",\n        \"Free the memory used by a result\"\n    ],\n    \"ibase_gen_id\": [\n        \"int ibase_gen_id(string generator [, int increment [, resource link_identifier ]])\",\n        \"Increments the named generator and returns its new value\"\n    ],\n    \"ibase_maintain_db\": [\n        \"bool ibase_maintain_db(resource service_handle, string db, int action [, int argument])\",\n        \"Execute a maintenance command on the database server\"\n    ],\n    \"ibase_modify_user\": [\n        \"bool ibase_modify_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])\",\n        \"Modify a user in security database\"\n    ],\n    \"ibase_name_result\": [\n        \"bool ibase_name_result(resource result, string name)\",\n        \"Assign a name to a result for use with ... WHERE CURRENT OF <name> statements\"\n    ],\n    \"ibase_num_fields\": [\n        \"int ibase_num_fields(resource query_result)\",\n        \"Get the number of fields in result\"\n    ],\n    \"ibase_num_params\": [\n        \"int ibase_num_params(resource query)\",\n        \"Get the number of params in a prepared query\"\n    ],\n    \"ibase_num_rows\": [\n        \"int ibase_num_rows( resource result_identifier )\",\n        \"Return the number of rows that are available in a result\"\n    ],\n    \"ibase_param_info\": [\n        \"array ibase_param_info(resource query, int field_number)\",\n        \"Get information about a parameter\"\n    ],\n    \"ibase_pconnect\": [\n        \"resource ibase_pconnect(string database [, string username [, string password [, string charset [, int buffers [, int dialect [, string role]]]]]])\",\n        \"Open a persistent connection to an InterBase database\"\n    ],\n    \"ibase_prepare\": [\n        \"resource ibase_prepare(resource link_identifier[, string query [, resource trans_identifier ]])\",\n        \"Prepare a query for later execution\"\n    ],\n    \"ibase_query\": [\n        \"mixed ibase_query([resource link_identifier, [ resource link_identifier, ]] string query [, mixed bind_arg [, mixed bind_arg [, ...]]])\",\n        \"Execute a query\"\n    ],\n    \"ibase_restore\": [\n        \"mixed ibase_restore(resource service_handle, string source_file, string dest_db [, int options [, bool verbose]])\",\n        \"Initiates a restore task in the service manager and returns immediately\"\n    ],\n    \"ibase_rollback\": [\n        \"bool ibase_rollback( resource link_identifier )\",\n        \"Rollback transaction\"\n    ],\n    \"ibase_rollback_ret\": [\n        \"bool ibase_rollback_ret( resource link_identifier )\",\n        \"Rollback transaction and retain the transaction context\"\n    ],\n    \"ibase_server_info\": [\n        \"string ibase_server_info(resource service_handle, int action)\",\n        \"Request information about a database server\"\n    ],\n    \"ibase_service_attach\": [\n        \"resource ibase_service_attach(string host, string dba_username, string dba_password)\",\n        \"Connect to the service manager\"\n    ],\n    \"ibase_service_detach\": [\n        \"bool ibase_service_detach(resource service_handle)\",\n        \"Disconnect from the service manager\"\n    ],\n    \"ibase_set_event_handler\": [\n        \"resource ibase_set_event_handler([resource link_identifier,] callback handler, string event [, string event [, ...]])\",\n        \"Register the callback for handling each of the named events\"\n    ],\n    \"ibase_trans\": [\n        \"resource ibase_trans([int trans_args [, resource link_identifier [, ... ], int trans_args [, resource link_identifier [, ... ]] [, ...]]])\",\n        \"Start a transaction over one or several databases\"\n    ],\n    \"ibase_wait_event\": [\n        \"string ibase_wait_event([resource link_identifier,] string event [, string event [, ...]])\",\n        \"Waits for any one of the passed Interbase events to be posted by the database, and returns its name\"\n    ],\n    \"iconv\": [\n        \"string iconv(string in_charset, string out_charset, string str)\",\n        \"Returns str converted to the out_charset character set\"\n    ],\n    \"iconv_get_encoding\": [\n        \"mixed iconv_get_encoding([string type])\",\n        \"Get internal encoding and output encoding for ob_iconv_handler()\"\n    ],\n    \"iconv_mime_decode\": [\n        \"string iconv_mime_decode(string encoded_string [, int mode, string charset])\",\n        \"Decodes a mime header field\"\n    ],\n    \"iconv_mime_decode_headers\": [\n        \"array iconv_mime_decode_headers(string headers [, int mode, string charset])\",\n        \"Decodes multiple mime header fields\"\n    ],\n    \"iconv_mime_encode\": [\n        \"string iconv_mime_encode(string field_name, string field_value [, array preference])\",\n        \"Composes a mime header field with field_name and field_value in a specified scheme\"\n    ],\n    \"iconv_set_encoding\": [\n        \"bool iconv_set_encoding(string type, string charset)\",\n        \"Sets internal encoding and output encoding for ob_iconv_handler()\"\n    ],\n    \"iconv_strlen\": [\n        \"int iconv_strlen(string str [, string charset])\",\n        \"Returns the character count of str\"\n    ],\n    \"iconv_strpos\": [\n        \"int iconv_strpos(string haystack, string needle [, int offset [, string charset]])\",\n        \"Finds position of first occurrence of needle within part of haystack beginning with offset\"\n    ],\n    \"iconv_strrpos\": [\n        \"int iconv_strrpos(string haystack, string needle [, string charset])\",\n        \"Finds position of last occurrence of needle within part of haystack beginning with offset\"\n    ],\n    \"iconv_substr\": [\n        \"string iconv_substr(string str, int offset, [int length, string charset])\",\n        \"Returns specified part of a string\"\n    ],\n    \"idate\": [\n        \"int idate(string format [, int timestamp])\",\n        \"Format a local time/date as integer\"\n    ],\n    \"idn_to_ascii\": [\n        \"int idn_to_ascii(string domain[, int options])\",\n        \"Converts an Unicode domain to ASCII representation, as defined in the IDNA RFC\"\n    ],\n    \"idn_to_utf8\": [\n        \"int idn_to_utf8(string domain[, int options])\",\n        \"Converts an ASCII representation of the domain to Unicode (UTF-8), as defined in the IDNA RFC\"\n    ],\n    \"ignore_user_abort\": [\n        \"int ignore_user_abort([string value])\",\n        \"Set whether we want to ignore a user abort event or not\"\n    ],\n    \"image2wbmp\": [\n        \"bool image2wbmp(resource im [, string filename [, int threshold]])\",\n        \"Output WBMP image to browser or file\"\n    ],\n    \"image_type_to_extension\": [\n        \"string image_type_to_extension(int imagetype [, bool include_dot])\",\n        \"Get file extension for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype\"\n    ],\n    \"image_type_to_mime_type\": [\n        \"string image_type_to_mime_type(int imagetype)\",\n        \"Get Mime-Type for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype\"\n    ],\n    \"imagealphablending\": [\n        \"bool imagealphablending(resource im, bool on)\",\n        \"Turn alpha blending mode on or off for the given image\"\n    ],\n    \"imageantialias\": [\n        \"bool imageantialias(resource im, bool on)\",\n        \"Should antialiased functions used or not\"\n    ],\n    \"imagearc\": [\n        \"bool imagearc(resource im, int cx, int cy, int w, int h, int s, int e, int col)\",\n        \"Draw a partial ellipse\"\n    ],\n    \"imagechar\": [\n        \"bool imagechar(resource im, int font, int x, int y, string c, int col)\",\n        \"Draw a character\"\n    ],\n    \"imagecharup\": [\n        \"bool imagecharup(resource im, int font, int x, int y, string c, int col)\",\n        \"Draw a character rotated 90 degrees counter-clockwise\"\n    ],\n    \"imagecolorallocate\": [\n        \"int imagecolorallocate(resource im, int red, int green, int blue)\",\n        \"Allocate a color for an image\"\n    ],\n    \"imagecolorallocatealpha\": [\n        \"int imagecolorallocatealpha(resource im, int red, int green, int blue, int alpha)\",\n        \"Allocate a color with an alpha level.  Works for true color and palette based images\"\n    ],\n    \"imagecolorat\": [\n        \"int imagecolorat(resource im, int x, int y)\",\n        \"Get the index of the color of a pixel\"\n    ],\n    \"imagecolorclosest\": [\n        \"int imagecolorclosest(resource im, int red, int green, int blue)\",\n        \"Get the index of the closest color to the specified color\"\n    ],\n    \"imagecolorclosestalpha\": [\n        \"int imagecolorclosestalpha(resource im, int red, int green, int blue, int alpha)\",\n        \"Find the closest matching colour with alpha transparency\"\n    ],\n    \"imagecolorclosesthwb\": [\n        \"int imagecolorclosesthwb(resource im, int red, int green, int blue)\",\n        \"Get the index of the color which has the hue, white and blackness nearest to the given color\"\n    ],\n    \"imagecolordeallocate\": [\n        \"bool imagecolordeallocate(resource im, int index)\",\n        \"De-allocate a color for an image\"\n    ],\n    \"imagecolorexact\": [\n        \"int imagecolorexact(resource im, int red, int green, int blue)\",\n        \"Get the index of the specified color\"\n    ],\n    \"imagecolorexactalpha\": [\n        \"int imagecolorexactalpha(resource im, int red, int green, int blue, int alpha)\",\n        \"Find exact match for colour with transparency\"\n    ],\n    \"imagecolormatch\": [\n        \"bool imagecolormatch(resource im1, resource im2)\",\n        \"Makes the colors of the palette version of an image more closely match the true color version\"\n    ],\n    \"imagecolorresolve\": [\n        \"int imagecolorresolve(resource im, int red, int green, int blue)\",\n        \"Get the index of the specified color or its closest possible alternative\"\n    ],\n    \"imagecolorresolvealpha\": [\n        \"int imagecolorresolvealpha(resource im, int red, int green, int blue, int alpha)\",\n        \"Resolve/Allocate a colour with an alpha level.  Works for true colour and palette based images\"\n    ],\n    \"imagecolorset\": [\n        \"void imagecolorset(resource im, int col, int red, int green, int blue)\",\n        \"Set the color for the specified palette index\"\n    ],\n    \"imagecolorsforindex\": [\n        \"array imagecolorsforindex(resource im, int col)\",\n        \"Get the colors for an index\"\n    ],\n    \"imagecolorstotal\": [\n        \"int imagecolorstotal(resource im)\",\n        \"Find out the number of colors in an image's palette\"\n    ],\n    \"imagecolortransparent\": [\n        \"int imagecolortransparent(resource im [, int col])\",\n        \"Define a color as transparent\"\n    ],\n    \"imageconvolution\": [\n        \"resource imageconvolution(resource src_im, array matrix3x3, double div, double offset)\",\n        \"Apply a 3x3 convolution matrix, using coefficient div and offset\"\n    ],\n    \"imagecopy\": [\n        \"bool imagecopy(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h)\",\n        \"Copy part of an image\"\n    ],\n    \"imagecopymerge\": [\n        \"bool imagecopymerge(resource src_im, resource dst_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct)\",\n        \"Merge one part of an image with another\"\n    ],\n    \"imagecopymergegray\": [\n        \"bool imagecopymergegray(resource src_im, resource dst_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct)\",\n        \"Merge one part of an image with another\"\n    ],\n    \"imagecopyresampled\": [\n        \"bool imagecopyresampled(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h)\",\n        \"Copy and resize part of an image using resampling to help ensure clarity\"\n    ],\n    \"imagecopyresized\": [\n        \"bool imagecopyresized(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h)\",\n        \"Copy and resize part of an image\"\n    ],\n    \"imagecreate\": [\n        \"resource imagecreate(int x_size, int y_size)\",\n        \"Create a new image\"\n    ],\n    \"imagecreatefromgd\": [\n        \"resource imagecreatefromgd(string filename)\",\n        \"Create a new image from GD file or URL\"\n    ],\n    \"imagecreatefromgd2\": [\n        \"resource imagecreatefromgd2(string filename)\",\n        \"Create a new image from GD2 file or URL\"\n    ],\n    \"imagecreatefromgd2part\": [\n        \"resource imagecreatefromgd2part(string filename, int srcX, int srcY, int width, int height)\",\n        \"Create a new image from a given part of GD2 file or URL\"\n    ],\n    \"imagecreatefromgif\": [\n        \"resource imagecreatefromgif(string filename)\",\n        \"Create a new image from GIF file or URL\"\n    ],\n    \"imagecreatefromjpeg\": [\n        \"resource imagecreatefromjpeg(string filename)\",\n        \"Create a new image from JPEG file or URL\"\n    ],\n    \"imagecreatefrompng\": [\n        \"resource imagecreatefrompng(string filename)\",\n        \"Create a new image from PNG file or URL\"\n    ],\n    \"imagecreatefromstring\": [\n        \"resource imagecreatefromstring(string image)\",\n        \"Create a new image from the image stream in the string\"\n    ],\n    \"imagecreatefromwbmp\": [\n        \"resource imagecreatefromwbmp(string filename)\",\n        \"Create a new image from WBMP file or URL\"\n    ],\n    \"imagecreatefromxbm\": [\n        \"resource imagecreatefromxbm(string filename)\",\n        \"Create a new image from XBM file or URL\"\n    ],\n    \"imagecreatefromxpm\": [\n        \"resource imagecreatefromxpm(string filename)\",\n        \"Create a new image from XPM file or URL\"\n    ],\n    \"imagecreatetruecolor\": [\n        \"resource imagecreatetruecolor(int x_size, int y_size)\",\n        \"Create a new true color image\"\n    ],\n    \"imagedashedline\": [\n        \"bool imagedashedline(resource im, int x1, int y1, int x2, int y2, int col)\",\n        \"Draw a dashed line\"\n    ],\n    \"imagedestroy\": [\n        \"bool imagedestroy(resource im)\",\n        \"Destroy an image\"\n    ],\n    \"imageellipse\": [\n        \"bool imageellipse(resource im, int cx, int cy, int w, int h, int color)\",\n        \"Draw an ellipse\"\n    ],\n    \"imagefill\": [\n        \"bool imagefill(resource im, int x, int y, int col)\",\n        \"Flood fill\"\n    ],\n    \"imagefilledarc\": [\n        \"bool imagefilledarc(resource im, int cx, int cy, int w, int h, int s, int e, int col, int style)\",\n        \"Draw a filled partial ellipse\"\n    ],\n    \"imagefilledellipse\": [\n        \"bool imagefilledellipse(resource im, int cx, int cy, int w, int h, int color)\",\n        \"Draw an ellipse\"\n    ],\n    \"imagefilledpolygon\": [\n        \"bool imagefilledpolygon(resource im, array point, int num_points, int col)\",\n        \"Draw a filled polygon\"\n    ],\n    \"imagefilledrectangle\": [\n        \"bool imagefilledrectangle(resource im, int x1, int y1, int x2, int y2, int col)\",\n        \"Draw a filled rectangle\"\n    ],\n    \"imagefilltoborder\": [\n        \"bool imagefilltoborder(resource im, int x, int y, int border, int col)\",\n        \"Flood fill to specific color\"\n    ],\n    \"imagefilter\": [\n        \"bool imagefilter(resource src_im, int filtertype, [args] )\",\n        \"Applies Filter an image using a custom angle\"\n    ],\n    \"imagefontheight\": [\n        \"int imagefontheight(int font)\",\n        \"Get font height\"\n    ],\n    \"imagefontwidth\": [\n        \"int imagefontwidth(int font)\",\n        \"Get font width\"\n    ],\n    \"imageftbbox\": [\n        \"array imageftbbox(float size, float angle, string font_file, string text [, array extrainfo])\",\n        \"Give the bounding box of a text using fonts via freetype2\"\n    ],\n    \"imagefttext\": [\n        \"array imagefttext(resource im, float size, float angle, int x, int y, int col, string font_file, string text [, array extrainfo])\",\n        \"Write text to the image using fonts via freetype2\"\n    ],\n    \"imagegammacorrect\": [\n        \"bool imagegammacorrect(resource im, float inputgamma, float outputgamma)\",\n        \"Apply a gamma correction to a GD image\"\n    ],\n    \"imagegd\": [\n        \"bool imagegd(resource im [, string filename])\",\n        \"Output GD image to browser or file\"\n    ],\n    \"imagegd2\": [\n        \"bool imagegd2(resource im [, string filename, [, int chunk_size, [, int type]]])\",\n        \"Output GD2 image to browser or file\"\n    ],\n    \"imagegif\": [\n        \"bool imagegif(resource im [, string filename])\",\n        \"Output GIF image to browser or file\"\n    ],\n    \"imagegrabscreen\": [\n        \"resource imagegrabscreen()\",\n        \"Grab a screenshot\"\n    ],\n    \"imagegrabwindow\": [\n        \"resource imagegrabwindow(int window_handle [, int client_area])\",\n        \"Grab a window or its client area using a windows handle (HWND property in COM instance)\"\n    ],\n    \"imageinterlace\": [\n        \"int imageinterlace(resource im [, int interlace])\",\n        \"Enable or disable interlace\"\n    ],\n    \"imageistruecolor\": [\n        \"bool imageistruecolor(resource im)\",\n        \"return true if the image uses truecolor\"\n    ],\n    \"imagejpeg\": [\n        \"bool imagejpeg(resource im [, string filename [, int quality]])\",\n        \"Output JPEG image to browser or file\"\n    ],\n    \"imagelayereffect\": [\n        \"bool imagelayereffect(resource im, int effect)\",\n        \"Set the alpha blending flag to use the bundled libgd layering effects\"\n    ],\n    \"imageline\": [\n        \"bool imageline(resource im, int x1, int y1, int x2, int y2, int col)\",\n        \"Draw a line\"\n    ],\n    \"imageloadfont\": [\n        \"int imageloadfont(string filename)\",\n        \"Load a new font\"\n    ],\n    \"imagepalettecopy\": [\n        \"void imagepalettecopy(resource dst, resource src)\",\n        \"Copy the palette from the src image onto the dst image\"\n    ],\n    \"imagepng\": [\n        \"bool imagepng(resource im [, string filename])\",\n        \"Output PNG image to browser or file\"\n    ],\n    \"imagepolygon\": [\n        \"bool imagepolygon(resource im, array point, int num_points, int col)\",\n        \"Draw a polygon\"\n    ],\n    \"imagepsbbox\": [\n        \"array imagepsbbox(string text, resource font, int size [, int space, int tightness, float angle])\",\n        \"Return the bounding box needed by a string if rasterized\"\n    ],\n    \"imagepscopyfont\": [\n        \"int imagepscopyfont(int font_index)\",\n        \"Make a copy of a font for purposes like extending or reenconding\"\n    ],\n    \"imagepsencodefont\": [\n        \"bool imagepsencodefont(resource font_index, string filename)\",\n        \"To change a fonts character encoding vector\"\n    ],\n    \"imagepsextendfont\": [\n        \"bool imagepsextendfont(resource font_index, float extend)\",\n        \"Extend or or condense (if extend < 1) a font\"\n    ],\n    \"imagepsfreefont\": [\n        \"bool imagepsfreefont(resource font_index)\",\n        \"Free memory used by a font\"\n    ],\n    \"imagepsloadfont\": [\n        \"resource imagepsloadfont(string pathname)\",\n        \"Load a new font from specified file\"\n    ],\n    \"imagepsslantfont\": [\n        \"bool imagepsslantfont(resource font_index, float slant)\",\n        \"Slant a font\"\n    ],\n    \"imagepstext\": [\n        \"array imagepstext(resource image, string text, resource font, int size, int foreground, int background, int xcoord, int ycoord [, int space [, int tightness [, float angle [, int antialias])\",\n        \"Rasterize a string over an image\"\n    ],\n    \"imagerectangle\": [\n        \"bool imagerectangle(resource im, int x1, int y1, int x2, int y2, int col)\",\n        \"Draw a rectangle\"\n    ],\n    \"imagerotate\": [\n        \"resource imagerotate(resource src_im, float angle, int bgdcolor [, int ignoretransparent])\",\n        \"Rotate an image using a custom angle\"\n    ],\n    \"imagesavealpha\": [\n        \"bool imagesavealpha(resource im, bool on)\",\n        \"Include alpha channel to a saved image\"\n    ],\n    \"imagesetbrush\": [\n        \"bool imagesetbrush(resource image, resource brush)\",\n        \"Set the brush image to $brush when filling $image with the \\\"IMG_COLOR_BRUSHED\\\" color\"\n    ],\n    \"imagesetpixel\": [\n        \"bool imagesetpixel(resource im, int x, int y, int col)\",\n        \"Set a single pixel\"\n    ],\n    \"imagesetstyle\": [\n        \"bool imagesetstyle(resource im, array styles)\",\n        \"Set the line drawing styles for use with imageline and IMG_COLOR_STYLED.\"\n    ],\n    \"imagesetthickness\": [\n        \"bool imagesetthickness(resource im, int thickness)\",\n        \"Set line thickness for drawing lines, ellipses, rectangles, polygons etc.\"\n    ],\n    \"imagesettile\": [\n        \"bool imagesettile(resource image, resource tile)\",\n        \"Set the tile image to $tile when filling $image with the \\\"IMG_COLOR_TILED\\\" color\"\n    ],\n    \"imagestring\": [\n        \"bool imagestring(resource im, int font, int x, int y, string str, int col)\",\n        \"Draw a string horizontally\"\n    ],\n    \"imagestringup\": [\n        \"bool imagestringup(resource im, int font, int x, int y, string str, int col)\",\n        \"Draw a string vertically - rotated 90 degrees counter-clockwise\"\n    ],\n    \"imagesx\": [\n        \"int imagesx(resource im)\",\n        \"Get image width\"\n    ],\n    \"imagesy\": [\n        \"int imagesy(resource im)\",\n        \"Get image height\"\n    ],\n    \"imagetruecolortopalette\": [\n        \"void imagetruecolortopalette(resource im, bool ditherFlag, int colorsWanted)\",\n        \"Convert a true colour image to a palette based image with a number of colours, optionally using dithering.\"\n    ],\n    \"imagettfbbox\": [\n        \"array imagettfbbox(float size, float angle, string font_file, string text)\",\n        \"Give the bounding box of a text using TrueType fonts\"\n    ],\n    \"imagettftext\": [\n        \"array imagettftext(resource im, float size, float angle, int x, int y, int col, string font_file, string text)\",\n        \"Write text to the image using a TrueType font\"\n    ],\n    \"imagetypes\": [\n        \"int imagetypes(void)\",\n        \"Return the types of images supported in a bitfield - 1=GIF, 2=JPEG, 4=PNG, 8=WBMP, 16=XPM\"\n    ],\n    \"imagewbmp\": [\n        \"bool imagewbmp(resource im [, string filename, [, int foreground]])\",\n        \"Output WBMP image to browser or file\"\n    ],\n    \"imagexbm\": [\n        \"int imagexbm(int im, string filename [, int foreground])\",\n        \"Output XBM image to browser or file\"\n    ],\n    \"imap_8bit\": [\n        \"string imap_8bit(string text)\",\n        \"Convert an 8-bit string to a quoted-printable string\"\n    ],\n    \"imap_alerts\": [\n        \"array imap_alerts(void)\",\n        \"Returns an array of all IMAP alerts that have been generated since the last page load or since the last imap_alerts() call, whichever came last. The alert stack is cleared after imap_alerts() is called.\"\n    ],\n    \"imap_append\": [\n        \"bool imap_append(resource stream_id, string folder, string message [, string options [, string internal_date]])\",\n        \"Append a new message to a specified mailbox\"\n    ],\n    \"imap_base64\": [\n        \"string imap_base64(string text)\",\n        \"Decode BASE64 encoded text\"\n    ],\n    \"imap_binary\": [\n        \"string imap_binary(string text)\",\n        \"Convert an 8bit string to a base64 string\"\n    ],\n    \"imap_body\": [\n        \"string imap_body(resource stream_id, int msg_no [, int options])\",\n        \"Read the message body\"\n    ],\n    \"imap_bodystruct\": [\n        \"object imap_bodystruct(resource stream_id, int msg_no, string section)\",\n        \"Read the structure of a specified body section of a specific message\"\n    ],\n    \"imap_check\": [\n        \"object imap_check(resource stream_id)\",\n        \"Get mailbox properties\"\n    ],\n    \"imap_clearflag_full\": [\n        \"bool imap_clearflag_full(resource stream_id, string sequence, string flag [, int options])\",\n        \"Clears flags on messages\"\n    ],\n    \"imap_close\": [\n        \"bool imap_close(resource stream_id [, int options])\",\n        \"Close an IMAP stream\"\n    ],\n    \"imap_createmailbox\": [\n        \"bool imap_createmailbox(resource stream_id, string mailbox)\",\n        \"Create a new mailbox\"\n    ],\n    \"imap_delete\": [\n        \"bool imap_delete(resource stream_id, int msg_no [, int options])\",\n        \"Mark a message for deletion\"\n    ],\n    \"imap_deletemailbox\": [\n        \"bool imap_deletemailbox(resource stream_id, string mailbox)\",\n        \"Delete a mailbox\"\n    ],\n    \"imap_errors\": [\n        \"array imap_errors(void)\",\n        \"Returns an array of all IMAP errors generated since the last page load, or since the last imap_errors() call, whichever came last. The error stack is cleared after imap_errors() is called.\"\n    ],\n    \"imap_expunge\": [\n        \"bool imap_expunge(resource stream_id)\",\n        \"Permanently delete all messages marked for deletion\"\n    ],\n    \"imap_fetch_overview\": [\n        \"array imap_fetch_overview(resource stream_id, string sequence [, int options])\",\n        \"Read an overview of the information in the headers of the given message sequence\"\n    ],\n    \"imap_fetchbody\": [\n        \"string imap_fetchbody(resource stream_id, int msg_no, string section [, int options])\",\n        \"Get a specific body section\"\n    ],\n    \"imap_fetchheader\": [\n        \"string imap_fetchheader(resource stream_id, int msg_no [, int options])\",\n        \"Get the full unfiltered header for a message\"\n    ],\n    \"imap_fetchstructure\": [\n        \"object imap_fetchstructure(resource stream_id, int msg_no [, int options])\",\n        \"Read the full structure of a message\"\n    ],\n    \"imap_gc\": [\n        \"bool imap_gc(resource stream_id, int flags)\",\n        \"This function garbage collects (purges) the cache of entries of a specific type.\"\n    ],\n    \"imap_get_quota\": [\n        \"array imap_get_quota(resource stream_id, string qroot)\",\n        \"Returns the quota set to the mailbox account qroot\"\n    ],\n    \"imap_get_quotaroot\": [\n        \"array imap_get_quotaroot(resource stream_id, string mbox)\",\n        \"Returns the quota set to the mailbox account mbox\"\n    ],\n    \"imap_getacl\": [\n        \"array imap_getacl(resource stream_id, string mailbox)\",\n        \"Gets the ACL for a given mailbox\"\n    ],\n    \"imap_getmailboxes\": [\n        \"array imap_getmailboxes(resource stream_id, string ref, string pattern)\",\n        \"Reads the list of mailboxes and returns a full array of objects containing name, attributes, and delimiter\"\n    ],\n    \"imap_getsubscribed\": [\n        \"array imap_getsubscribed(resource stream_id, string ref, string pattern)\",\n        \"Return a list of subscribed mailboxes, in the same format as imap_getmailboxes()\"\n    ],\n    \"imap_headerinfo\": [\n        \"object imap_headerinfo(resource stream_id, int msg_no [, int from_length [, int subject_length [, string default_host]]])\",\n        \"Read the headers of the message\"\n    ],\n    \"imap_headers\": [\n        \"array imap_headers(resource stream_id)\",\n        \"Returns headers for all messages in a mailbox\"\n    ],\n    \"imap_last_error\": [\n        \"string imap_last_error(void)\",\n        \"Returns the last error that was generated by an IMAP function. The error stack is NOT cleared after this call.\"\n    ],\n    \"imap_list\": [\n        \"array imap_list(resource stream_id, string ref, string pattern)\",\n        \"Read the list of mailboxes\"\n    ],\n    \"imap_listscan\": [\n        \"array imap_listscan(resource stream_id, string ref, string pattern, string content)\",\n        \"Read list of mailboxes containing a certain string\"\n    ],\n    \"imap_lsub\": [\n        \"array imap_lsub(resource stream_id, string ref, string pattern)\",\n        \"Return a list of subscribed mailboxes\"\n    ],\n    \"imap_mail\": [\n        \"bool imap_mail(string to, string subject, string message [, string additional_headers [, string cc [, string bcc [, string rpath]]]])\",\n        \"Send an email message\"\n    ],\n    \"imap_mail_compose\": [\n        \"string imap_mail_compose(array envelope, array body)\",\n        \"Create a MIME message based on given envelope and body sections\"\n    ],\n    \"imap_mail_copy\": [\n        \"bool imap_mail_copy(resource stream_id, string msglist, string mailbox [, int options])\",\n        \"Copy specified message to a mailbox\"\n    ],\n    \"imap_mail_move\": [\n        \"bool imap_mail_move(resource stream_id, string sequence, string mailbox [, int options])\",\n        \"Move specified message to a mailbox\"\n    ],\n    \"imap_mailboxmsginfo\": [\n        \"object imap_mailboxmsginfo(resource stream_id)\",\n        \"Returns info about the current mailbox\"\n    ],\n    \"imap_mime_header_decode\": [\n        \"array imap_mime_header_decode(string str)\",\n        \"Decode mime header element in accordance with RFC 2047 and return array of objects containing 'charset' encoding and decoded 'text'\"\n    ],\n    \"imap_msgno\": [\n        \"int imap_msgno(resource stream_id, int unique_msg_id)\",\n        \"Get the sequence number associated with a UID\"\n    ],\n    \"imap_mutf7_to_utf8\": [\n        \"string imap_mutf7_to_utf8(string in)\",\n        \"Decode a modified UTF-7 string to UTF-8\"\n    ],\n    \"imap_num_msg\": [\n        \"int imap_num_msg(resource stream_id)\",\n        \"Gives the number of messages in the current mailbox\"\n    ],\n    \"imap_num_recent\": [\n        \"int imap_num_recent(resource stream_id)\",\n        \"Gives the number of recent messages in current mailbox\"\n    ],\n    \"imap_open\": [\n        \"resource imap_open(string mailbox, string user, string password [, int options [, int n_retries]])\",\n        \"Open an IMAP stream to a mailbox\"\n    ],\n    \"imap_ping\": [\n        \"bool imap_ping(resource stream_id)\",\n        \"Check if the IMAP stream is still active\"\n    ],\n    \"imap_qprint\": [\n        \"string imap_qprint(string text)\",\n        \"Convert a quoted-printable string to an 8-bit string\"\n    ],\n    \"imap_renamemailbox\": [\n        \"bool imap_renamemailbox(resource stream_id, string old_name, string new_name)\",\n        \"Rename a mailbox\"\n    ],\n    \"imap_reopen\": [\n        \"bool imap_reopen(resource stream_id, string mailbox [, int options [, int n_retries]])\",\n        \"Reopen an IMAP stream to a new mailbox\"\n    ],\n    \"imap_rfc822_parse_adrlist\": [\n        \"array imap_rfc822_parse_adrlist(string address_string, string default_host)\",\n        \"Parses an address string\"\n    ],\n    \"imap_rfc822_parse_headers\": [\n        \"object imap_rfc822_parse_headers(string headers [, string default_host])\",\n        \"Parse a set of mail headers contained in a string, and return an object similar to imap_headerinfo()\"\n    ],\n    \"imap_rfc822_write_address\": [\n        \"string imap_rfc822_write_address(string mailbox, string host, string personal)\",\n        \"Returns a properly formatted email address given the mailbox, host, and personal info\"\n    ],\n    \"imap_savebody\": [\n        \"bool imap_savebody(resource stream_id, string|resource file, int msg_no[, string section = \\\"\\\"[, int options = 0]])\",\n        \"Save a specific body section to a file\"\n    ],\n    \"imap_search\": [\n        \"array imap_search(resource stream_id, string criteria [, int options [, string charset]])\",\n        \"Return a list of messages matching the given criteria\"\n    ],\n    \"imap_set_quota\": [\n        \"bool imap_set_quota(resource stream_id, string qroot, int mailbox_size)\",\n        \"Will set the quota for qroot mailbox\"\n    ],\n    \"imap_setacl\": [\n        \"bool imap_setacl(resource stream_id, string mailbox, string id, string rights)\",\n        \"Sets the ACL for a given mailbox\"\n    ],\n    \"imap_setflag_full\": [\n        \"bool imap_setflag_full(resource stream_id, string sequence, string flag [, int options])\",\n        \"Sets flags on messages\"\n    ],\n    \"imap_sort\": [\n        \"array imap_sort(resource stream_id, int criteria, int reverse [, int options [, string search_criteria [, string charset]]])\",\n        \"Sort an array of message headers, optionally including only messages that meet specified criteria.\"\n    ],\n    \"imap_status\": [\n        \"object imap_status(resource stream_id, string mailbox, int options)\",\n        \"Get status info from a mailbox\"\n    ],\n    \"imap_subscribe\": [\n        \"bool imap_subscribe(resource stream_id, string mailbox)\",\n        \"Subscribe to a mailbox\"\n    ],\n    \"imap_thread\": [\n        \"array imap_thread(resource stream_id [, int options])\",\n        \"Return threaded by REFERENCES tree\"\n    ],\n    \"imap_timeout\": [\n        \"mixed imap_timeout(int timeout_type [, int timeout])\",\n        \"Set or fetch imap timeout\"\n    ],\n    \"imap_uid\": [\n        \"int imap_uid(resource stream_id, int msg_no)\",\n        \"Get the unique message id associated with a standard sequential message number\"\n    ],\n    \"imap_undelete\": [\n        \"bool imap_undelete(resource stream_id, int msg_no [, int flags])\",\n        \"Remove the delete flag from a message\"\n    ],\n    \"imap_unsubscribe\": [\n        \"bool imap_unsubscribe(resource stream_id, string mailbox)\",\n        \"Unsubscribe from a mailbox\"\n    ],\n    \"imap_utf7_decode\": [\n        \"string imap_utf7_decode(string buf)\",\n        \"Decode a modified UTF-7 string\"\n    ],\n    \"imap_utf7_encode\": [\n        \"string imap_utf7_encode(string buf)\",\n        \"Encode a string in modified UTF-7\"\n    ],\n    \"imap_utf8\": [\n        \"string imap_utf8(string mime_encoded_text)\",\n        \"Convert a mime-encoded text to UTF-8\"\n    ],\n    \"imap_utf8_to_mutf7\": [\n        \"string imap_utf8_to_mutf7(string in)\",\n        \"Encode a UTF-8 string to modified UTF-7\"\n    ],\n    \"implode\": [\n        \"string implode([string glue,] array pieces)\",\n        \"Joins array elements placing glue string between items and return one string\"\n    ],\n    \"import_request_variables\": [\n        \"bool import_request_variables(string types [, string prefix])\",\n        \"Import GET/POST/Cookie variables into the global scope\"\n    ],\n    \"in_array\": [\n        \"bool in_array(mixed needle, array haystack [, bool strict])\",\n        \"Checks if the given value exists in the array\"\n    ],\n    \"include\": [\n        \"bool include(string path)\",\n        \"Includes and evaluates the specified file\"\n    ],\n    \"include_once\": [\n        \"bool include_once(string path)\",\n        \"Includes and evaluates the specified file\"\n    ],\n    \"inet_ntop\": [\n        \"string inet_ntop(string in_addr)\",\n        \"Converts a packed inet address to a human readable IP address string\"\n    ],\n    \"inet_pton\": [\n        \"string inet_pton(string ip_address)\",\n        \"Converts a human readable IP address to a packed binary string\"\n    ],\n    \"ini_get\": [\n        \"string ini_get(string varname)\",\n        \"Get a configuration option\"\n    ],\n    \"ini_get_all\": [\n        \"array ini_get_all([string extension[, bool details = true]])\",\n        \"Get all configuration options\"\n    ],\n    \"ini_restore\": [\n        \"void ini_restore(string varname)\",\n        \"Restore the value of a configuration option specified by varname\"\n    ],\n    \"ini_set\": [\n        \"string ini_set(string varname, string newvalue)\",\n        \"Set a configuration option, returns false on error and the old value of the configuration option on success\"\n    ],\n    \"interface_exists\": [\n        \"bool interface_exists(string classname [, bool autoload])\",\n        \"Checks if the class exists\"\n    ],\n    \"intl_error_name\": [\n        \"string intl_error_name()\",\n        \"* Return a string for a given error code.  * The string will be the same as the name of the error code constant.\"\n    ],\n    \"intl_get_error_code\": [\n        \"int intl_get_error_code()\",\n        \"* Get code of the last occured error.\"\n    ],\n    \"intl_get_error_message\": [\n        \"string intl_get_error_message()\",\n        \"* Get text description of the last occured error.\"\n    ],\n    \"intl_is_failure\": [\n        \"bool intl_is_failure()\",\n        \"* Check whether the given error code indicates a failure.  * Returns true if it does, and false if the code  * indicates success or a warning.\"\n    ],\n    \"intval\": [\n        \"int intval(mixed var [, int base])\",\n        \"Get the integer value of a variable using the optional base for the conversion\"\n    ],\n    \"ip2long\": [\n        \"int ip2long(string ip_address)\",\n        \"Converts a string containing an (IPv4) Internet Protocol dotted address into a proper address\"\n    ],\n    \"iptcembed\": [\n        \"array iptcembed(string iptcdata, string jpeg_file_name [, int spool])\",\n        \"Embed binary IPTC data into a JPEG image.\"\n    ],\n    \"iptcparse\": [\n        \"array iptcparse(string iptcdata)\",\n        \"Parse binary IPTC-data into associative array\"\n    ],\n    \"is_a\": [\n        \"bool is_a(object object, string class_name)\",\n        \"Returns true if the object is of this class or has this class as one of its parents\"\n    ],\n    \"is_array\": [\n        \"bool is_array(mixed var)\",\n        \"Returns true if variable is an array\"\n    ],\n    \"is_bool\": [\n        \"bool is_bool(mixed var)\",\n        \"Returns true if variable is a boolean\"\n    ],\n    \"is_callable\": [\n        \"bool is_callable(mixed var [, bool syntax_only [, string callable_name]])\",\n        \"Returns true if var is callable.\"\n    ],\n    \"is_dir\": [\n        \"bool is_dir(string filename)\",\n        \"Returns true if file is directory\"\n    ],\n    \"is_executable\": [\n        \"bool is_executable(string filename)\",\n        \"Returns true if file is executable\"\n    ],\n    \"is_file\": [\n        \"bool is_file(string filename)\",\n        \"Returns true if file is a regular file\"\n    ],\n    \"is_finite\": [\n        \"bool is_finite(float val)\",\n        \"Returns whether argument is finite\"\n    ],\n    \"is_float\": [\n        \"bool is_float(mixed var)\",\n        \"Returns true if variable is float point\"\n    ],\n    \"is_infinite\": [\n        \"bool is_infinite(float val)\",\n        \"Returns whether argument is infinite\"\n    ],\n    \"is_link\": [\n        \"bool is_link(string filename)\",\n        \"Returns true if file is symbolic link\"\n    ],\n    \"is_long\": [\n        \"bool is_long(mixed var)\",\n        \"Returns true if variable is a long (integer)\"\n    ],\n    \"is_nan\": [\n        \"bool is_nan(float val)\",\n        \"Returns whether argument is not a number\"\n    ],\n    \"is_null\": [\n        \"bool is_null(mixed var)\",\n        \"Returns true if variable is null\"\n    ],\n    \"is_numeric\": [\n        \"bool is_numeric(mixed value)\",\n        \"Returns true if value is a number or a numeric string\"\n    ],\n    \"is_object\": [\n        \"bool is_object(mixed var)\",\n        \"Returns true if variable is an object\"\n    ],\n    \"is_readable\": [\n        \"bool is_readable(string filename)\",\n        \"Returns true if file can be read\"\n    ],\n    \"is_resource\": [\n        \"bool is_resource(mixed var)\",\n        \"Returns true if variable is a resource\"\n    ],\n    \"is_scalar\": [\n        \"bool is_scalar(mixed value)\",\n        \"Returns true if value is a scalar\"\n    ],\n    \"is_string\": [\n        \"bool is_string(mixed var)\",\n        \"Returns true if variable is a string\"\n    ],\n    \"is_subclass_of\": [\n        \"bool is_subclass_of(object object, string class_name)\",\n        \"Returns true if the object has this class as one of its parents\"\n    ],\n    \"is_uploaded_file\": [\n        \"bool is_uploaded_file(string path)\",\n        \"Check if file was created by rfc1867 upload\"\n    ],\n    \"is_writable\": [\n        \"bool is_writable(string filename)\",\n        \"Returns true if file can be written\"\n    ],\n    \"isset\": [\n        \"bool isset(mixed var [, mixed var])\",\n        \"Determine whether a variable is set\"\n    ],\n    \"iterator_apply\": [\n        \"int iterator_apply(Traversable it, mixed function [, mixed params])\",\n        \"Calls a function for every element in an iterator\"\n    ],\n    \"iterator_count\": [\n        \"int iterator_count(Traversable it)\",\n        \"Count the elements in an iterator\"\n    ],\n    \"iterator_to_array\": [\n        \"array iterator_to_array(Traversable it [, bool use_keys = true])\",\n        \"Copy the iterator into an array\"\n    ],\n    \"jddayofweek\": [\n        \"mixed jddayofweek(int juliandaycount [, int mode])\",\n        \"Returns name or number of day of week from julian day count\"\n    ],\n    \"jdmonthname\": [\n        \"string jdmonthname(int juliandaycount, int mode)\",\n        \"Returns name of month for julian day count\"\n    ],\n    \"jdtofrench\": [\n        \"string jdtofrench(int juliandaycount)\",\n        \"Converts a julian day count to a french republic calendar date\"\n    ],\n    \"jdtogregorian\": [\n        \"string jdtogregorian(int juliandaycount)\",\n        \"Converts a julian day count to a gregorian calendar date\"\n    ],\n    \"jdtojewish\": [\n        \"string jdtojewish(int juliandaycount [, bool hebrew [, int fl]])\",\n        \"Converts a julian day count to a jewish calendar date\"\n    ],\n    \"jdtojulian\": [\n        \"string jdtojulian(int juliandaycount)\",\n        \"Convert a julian day count to a julian calendar date\"\n    ],\n    \"jdtounix\": [\n        \"int jdtounix(int jday)\",\n        \"Convert Julian Day to UNIX timestamp\"\n    ],\n    \"jewishtojd\": [\n        \"int jewishtojd(int month, int day, int year)\",\n        \"Converts a jewish calendar date to a julian day count\"\n    ],\n    \"join\": [\n        \"string join(array src, string glue)\",\n        \"An alias for implode\"\n    ],\n    \"jpeg2wbmp\": [\n        \"bool jpeg2wbmp (string f_org, string f_dest, int d_height, int d_width, int threshold)\",\n        \"Convert JPEG image to WBMP image\"\n    ],\n    \"json_decode\": [\n        \"mixed json_decode(string json [, bool assoc [, long depth]])\",\n        \"Decodes the JSON representation into a PHP value\"\n    ],\n    \"json_encode\": [\n        \"string json_encode(mixed data [, int options])\",\n        \"Returns the JSON representation of a value\"\n    ],\n    \"json_last_error\": [\n        \"int json_last_error()\",\n        \"Returns the error code of the last json_decode().\"\n    ],\n    \"juliantojd\": [\n        \"int juliantojd(int month, int day, int year)\",\n        \"Converts a julian calendar date to julian day count\"\n    ],\n    \"key\": [\n        \"mixed key(array array_arg)\",\n        \"Return the key of the element currently pointed to by the internal array pointer\"\n    ],\n    \"krsort\": [\n        \"bool krsort(array &array_arg [, int sort_flags])\",\n        \"Sort an array by key value in reverse order\"\n    ],\n    \"ksort\": [\n        \"bool ksort(array &array_arg [, int sort_flags])\",\n        \"Sort an array by key\"\n    ],\n    \"lcfirst\": [\n        \"string lcfirst(string str)\",\n        \"Make a string's first character lowercase\"\n    ],\n    \"lcg_value\": [\n        \"float lcg_value()\",\n        \"Returns a value from the combined linear congruential generator\"\n    ],\n    \"lchgrp\": [\n        \"bool lchgrp(string filename, mixed group)\",\n        \"Change symlink group\"\n    ],\n    \"ldap_8859_to_t61\": [\n        \"string ldap_8859_to_t61(string value)\",\n        \"Translate 8859 characters to t61 characters\"\n    ],\n    \"ldap_add\": [\n        \"bool ldap_add(resource link, string dn, array entry)\",\n        \"Add entries to LDAP directory\"\n    ],\n    \"ldap_bind\": [\n        \"bool ldap_bind(resource link [, string dn [, string password]])\",\n        \"Bind to LDAP directory\"\n    ],\n    \"ldap_compare\": [\n        \"bool ldap_compare(resource link, string dn, string attr, string value)\",\n        \"Determine if an entry has a specific value for one of its attributes\"\n    ],\n    \"ldap_connect\": [\n        \"resource ldap_connect([string host [, int port [, string wallet [, string wallet_passwd [, int authmode]]]]])\",\n        \"Connect to an LDAP server\"\n    ],\n    \"ldap_count_entries\": [\n        \"int ldap_count_entries(resource link, resource result)\",\n        \"Count the number of entries in a search result\"\n    ],\n    \"ldap_delete\": [\n        \"bool ldap_delete(resource link, string dn)\",\n        \"Delete an entry from a directory\"\n    ],\n    \"ldap_dn2ufn\": [\n        \"string ldap_dn2ufn(string dn)\",\n        \"Convert DN to User Friendly Naming format\"\n    ],\n    \"ldap_err2str\": [\n        \"string ldap_err2str(int errno)\",\n        \"Convert error number to error string\"\n    ],\n    \"ldap_errno\": [\n        \"int ldap_errno(resource link)\",\n        \"Get the current ldap error number\"\n    ],\n    \"ldap_error\": [\n        \"string ldap_error(resource link)\",\n        \"Get the current ldap error string\"\n    ],\n    \"ldap_explode_dn\": [\n        \"array ldap_explode_dn(string dn, int with_attrib)\",\n        \"Splits DN into its component parts\"\n    ],\n    \"ldap_first_attribute\": [\n        \"string ldap_first_attribute(resource link, resource result_entry)\",\n        \"Return first attribute\"\n    ],\n    \"ldap_first_entry\": [\n        \"resource ldap_first_entry(resource link, resource result)\",\n        \"Return first result id\"\n    ],\n    \"ldap_first_reference\": [\n        \"resource ldap_first_reference(resource link, resource result)\",\n        \"Return first reference\"\n    ],\n    \"ldap_free_result\": [\n        \"bool ldap_free_result(resource result)\",\n        \"Free result memory\"\n    ],\n    \"ldap_get_attributes\": [\n        \"array ldap_get_attributes(resource link, resource result_entry)\",\n        \"Get attributes from a search result entry\"\n    ],\n    \"ldap_get_dn\": [\n        \"string ldap_get_dn(resource link, resource result_entry)\",\n        \"Get the DN of a result entry\"\n    ],\n    \"ldap_get_entries\": [\n        \"array ldap_get_entries(resource link, resource result)\",\n        \"Get all result entries\"\n    ],\n    \"ldap_get_option\": [\n        \"bool ldap_get_option(resource link, int option, mixed retval)\",\n        \"Get the current value of various session-wide parameters\"\n    ],\n    \"ldap_get_values_len\": [\n        \"array ldap_get_values_len(resource link, resource result_entry, string attribute)\",\n        \"Get all values with lengths from a result entry\"\n    ],\n    \"ldap_list\": [\n        \"resource ldap_list(resource|array link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])\",\n        \"Single-level search\"\n    ],\n    \"ldap_mod_add\": [\n        \"bool ldap_mod_add(resource link, string dn, array entry)\",\n        \"Add attribute values to current\"\n    ],\n    \"ldap_mod_del\": [\n        \"bool ldap_mod_del(resource link, string dn, array entry)\",\n        \"Delete attribute values\"\n    ],\n    \"ldap_mod_replace\": [\n        \"bool ldap_mod_replace(resource link, string dn, array entry)\",\n        \"Replace attribute values with new ones\"\n    ],\n    \"ldap_next_attribute\": [\n        \"string ldap_next_attribute(resource link, resource result_entry)\",\n        \"Get the next attribute in result\"\n    ],\n    \"ldap_next_entry\": [\n        \"resource ldap_next_entry(resource link, resource result_entry)\",\n        \"Get next result entry\"\n    ],\n    \"ldap_next_reference\": [\n        \"resource ldap_next_reference(resource link, resource reference_entry)\",\n        \"Get next reference\"\n    ],\n    \"ldap_parse_reference\": [\n        \"bool ldap_parse_reference(resource link, resource reference_entry, array referrals)\",\n        \"Extract information from reference entry\"\n    ],\n    \"ldap_parse_result\": [\n        \"bool ldap_parse_result(resource link, resource result, int errcode, string matcheddn, string errmsg, array referrals)\",\n        \"Extract information from result\"\n    ],\n    \"ldap_read\": [\n        \"resource ldap_read(resource|array link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])\",\n        \"Read an entry\"\n    ],\n    \"ldap_rename\": [\n        \"bool ldap_rename(resource link, string dn, string newrdn, string newparent, bool deleteoldrdn);\",\n        \"Modify the name of an entry\"\n    ],\n    \"ldap_sasl_bind\": [\n        \"bool ldap_sasl_bind(resource link [, string binddn [, string password [, string sasl_mech [, string sasl_realm [, string sasl_authc_id [, string sasl_authz_id [, string props]]]]]]])\",\n        \"Bind to LDAP directory using SASL\"\n    ],\n    \"ldap_search\": [\n        \"resource ldap_search(resource|array link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])\",\n        \"Search LDAP tree under base_dn\"\n    ],\n    \"ldap_set_option\": [\n        \"bool ldap_set_option(resource link, int option, mixed newval)\",\n        \"Set the value of various session-wide parameters\"\n    ],\n    \"ldap_set_rebind_proc\": [\n        \"bool ldap_set_rebind_proc(resource link, string callback)\",\n        \"Set a callback function to do re-binds on referral chasing.\"\n    ],\n    \"ldap_sort\": [\n        \"bool ldap_sort(resource link, resource result, string sortfilter)\",\n        \"Sort LDAP result entries\"\n    ],\n    \"ldap_start_tls\": [\n        \"bool ldap_start_tls(resource link)\",\n        \"Start TLS\"\n    ],\n    \"ldap_t61_to_8859\": [\n        \"string ldap_t61_to_8859(string value)\",\n        \"Translate t61 characters to 8859 characters\"\n    ],\n    \"ldap_unbind\": [\n        \"bool ldap_unbind(resource link)\",\n        \"Unbind from LDAP directory\"\n    ],\n    \"leak\": [\n        \"void leak(int num_bytes=3)\",\n        \"Cause an intentional memory leak, for testing/debugging purposes\"\n    ],\n    \"levenshtein\": [\n        \"int levenshtein(string str1, string str2[, int cost_ins, int cost_rep, int cost_del])\",\n        \"Calculate Levenshtein distance between two strings\"\n    ],\n    \"libxml_clear_errors\": [\n        \"void libxml_clear_errors()\",\n        \"Clear last error from libxml\"\n    ],\n    \"libxml_disable_entity_loader\": [\n        \"bool libxml_disable_entity_loader([boolean disable])\",\n        \"Disable/Enable ability to load external entities\"\n    ],\n    \"libxml_get_errors\": [\n        \"object libxml_get_errors()\",\n        \"Retrieve array of errors\"\n    ],\n    \"libxml_get_last_error\": [\n        \"object libxml_get_last_error()\",\n        \"Retrieve last error from libxml\"\n    ],\n    \"libxml_set_streams_context\": [\n        \"void libxml_set_streams_context(resource streams_context)\",\n        \"Set the streams context for the next libxml document load or write\"\n    ],\n    \"libxml_use_internal_errors\": [\n        \"bool libxml_use_internal_errors([boolean use_errors])\",\n        \"Disable libxml errors and allow user to fetch error information as needed\"\n    ],\n    \"link\": [\n        \"int link(string target, string link)\",\n        \"Create a hard link\"\n    ],\n    \"linkinfo\": [\n        \"int linkinfo(string filename)\",\n        \"Returns the st_dev field of the UNIX C stat structure describing the link\"\n    ],\n    \"litespeed_request_headers\": [\n        \"array litespeed_request_headers(void)\",\n        \"Fetch all HTTP request headers\"\n    ],\n    \"litespeed_response_headers\": [\n        \"array litespeed_response_headers(void)\",\n        \"Fetch all HTTP response headers\"\n    ],\n    \"locale_accept_from_http\": [\n        \"string locale_accept_from_http(string $http_accept)\",\n        null\n    ],\n    \"locale_canonicalize\": [\n        \"static string locale_canonicalize(Locale $loc, string $locale)\",\n        \"* @param string $locale The locale string to canonicalize\"\n    ],\n    \"locale_filter_matches\": [\n        \"boolean locale_filter_matches(string $langtag, string $locale[, bool $canonicalize])\",\n        \"* Checks if a $langtag filter matches with $locale according to RFC 4647's basic filtering algorithm\"\n    ],\n    \"locale_get_all_variants\": [\n        \"static array locale_get_all_variants($locale)\",\n        \"* gets an array containing the list of variants, or null\"\n    ],\n    \"locale_get_default\": [\n        \"static string locale_get_default( )\",\n        \"Get default locale\"\n    ],\n    \"locale_get_keywords\": [\n        \"static array locale_get_keywords(string $locale) {\",\n        \"* return an associative array containing keyword-value  * pairs for this locale. The keys are keys to the array (doh!)\"\n    ],\n    \"locale_get_primary_language\": [\n        \"static string locale_get_primary_language($locale)\",\n        \"* gets the primary language for the $locale\"\n    ],\n    \"locale_get_region\": [\n        \"static string locale_get_region($locale)\",\n        \"* gets the region for the $locale\"\n    ],\n    \"locale_get_script\": [\n        \"static string locale_get_script($locale)\",\n        \"* gets the script for the $locale\"\n    ],\n    \"locale_lookup\": [\n        \"string locale_lookup(array $langtag, string $locale[, bool $canonicalize[, string $default = null]])\",\n        \"* Searchs the items in $langtag for the best match to the language * range\"\n    ],\n    \"locale_set_default\": [\n        \"static string locale_set_default( string $locale )\",\n        \"Set default locale\"\n    ],\n    \"localeconv\": [\n        \"array localeconv(void)\",\n        \"Returns numeric formatting information based on the current locale\"\n    ],\n    \"localtime\": [\n        \"array localtime([int timestamp [, bool associative_array]])\",\n        \"Returns the results of the C system call localtime as an associative array if the associative_array argument is set to 1 other wise it is a regular array\"\n    ],\n    \"log\": [\n        \"float log(float number, [float base])\",\n        \"Returns the natural logarithm of the number, or the base log if base is specified\"\n    ],\n    \"log10\": [\n        \"float log10(float number)\",\n        \"Returns the base-10 logarithm of the number\"\n    ],\n    \"log1p\": [\n        \"float log1p(float number)\",\n        \"Returns log(1 + number), computed in a way that accurate even when the value of number is close to zero\"\n    ],\n    \"long2ip\": [\n        \"string long2ip(int proper_address)\",\n        \"Converts an (IPv4) Internet network address into a string in Internet standard dotted format\"\n    ],\n    \"lstat\": [\n        \"array lstat(string filename)\",\n        \"Give information about a file or symbolic link\"\n    ],\n    \"ltrim\": [\n        \"string ltrim(string str [, string character_mask])\",\n        \"Strips whitespace from the beginning of a string\"\n    ],\n    \"mail\": [\n        \"int mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])\",\n        \"Send an email message\"\n    ],\n    \"max\": [\n        \"mixed max(mixed arg1 [, mixed arg2 [, mixed ...]])\",\n        \"Return the highest value in an array or a series of arguments\"\n    ],\n    \"mb_check_encoding\": [\n        \"bool mb_check_encoding([string var[, string encoding]])\",\n        \"Check if the string is valid for the specified encoding\"\n    ],\n    \"mb_convert_case\": [\n        \"string mb_convert_case(string sourcestring, int mode [, string encoding])\",\n        \"Returns a case-folded version of sourcestring\"\n    ],\n    \"mb_convert_encoding\": [\n        \"string mb_convert_encoding(string str, string to-encoding [, mixed from-encoding])\",\n        \"Returns converted string in desired encoding\"\n    ],\n    \"mb_convert_kana\": [\n        \"string mb_convert_kana(string str [, string option] [, string encoding])\",\n        \"Conversion between full-width character and half-width character (Japanese)\"\n    ],\n    \"mb_convert_variables\": [\n        \"string mb_convert_variables(string to-encoding, mixed from-encoding, mixed vars [, ...])\",\n        \"Converts the string resource in variables to desired encoding\"\n    ],\n    \"mb_decode_mimeheader\": [\n        \"string mb_decode_mimeheader(string string)\",\n        \"Decodes the MIME \\\"encoded-word\\\" in the string\"\n    ],\n    \"mb_decode_numericentity\": [\n        \"string mb_decode_numericentity(string string, array convmap [, string encoding])\",\n        \"Converts HTML numeric entities to character code\"\n    ],\n    \"mb_detect_encoding\": [\n        \"string mb_detect_encoding(string str [, mixed encoding_list [, bool strict]])\",\n        \"Encodings of the given string is returned (as a string)\"\n    ],\n    \"mb_detect_order\": [\n        \"bool|array mb_detect_order([mixed encoding-list])\",\n        \"Sets the current detect_order or Return the current detect_order as a array\"\n    ],\n    \"mb_encode_mimeheader\": [\n        \"string mb_encode_mimeheader(string str [, string charset [, string transfer-encoding [, string linefeed [, int indent]]]])\",\n        \"Converts the string to MIME \\\"encoded-word\\\" in the format of =?charset?(B|Q)?encoded_string?=\"\n    ],\n    \"mb_encode_numericentity\": [\n        \"string mb_encode_numericentity(string string, array convmap [, string encoding])\",\n        \"Converts specified characters to HTML numeric entities\"\n    ],\n    \"mb_encoding_aliases\": [\n        \"array mb_encoding_aliases(string encoding)\",\n        \"Returns an array of the aliases of a given encoding name\"\n    ],\n    \"mb_ereg\": [\n        \"int mb_ereg(string pattern, string string [, array registers])\",\n        \"Regular expression match for multibyte string\"\n    ],\n    \"mb_ereg_match\": [\n        \"bool mb_ereg_match(string pattern, string string [,string option])\",\n        \"Regular expression match for multibyte string\"\n    ],\n    \"mb_ereg_replace\": [\n        \"string mb_ereg_replace(string pattern, string replacement, string string [, string option])\",\n        \"Replace regular expression for multibyte string\"\n    ],\n    \"mb_ereg_search\": [\n        \"bool mb_ereg_search([string pattern[, string option]])\",\n        \"Regular expression search for multibyte string\"\n    ],\n    \"mb_ereg_search_getpos\": [\n        \"int mb_ereg_search_getpos(void)\",\n        \"Get search start position\"\n    ],\n    \"mb_ereg_search_getregs\": [\n        \"array mb_ereg_search_getregs(void)\",\n        \"Get matched substring of the last time\"\n    ],\n    \"mb_ereg_search_init\": [\n        \"bool mb_ereg_search_init(string string [, string pattern[, string option]])\",\n        \"Initialize string and regular expression for search.\"\n    ],\n    \"mb_ereg_search_pos\": [\n        \"array mb_ereg_search_pos([string pattern[, string option]])\",\n        \"Regular expression search for multibyte string\"\n    ],\n    \"mb_ereg_search_regs\": [\n        \"array mb_ereg_search_regs([string pattern[, string option]])\",\n        \"Regular expression search for multibyte string\"\n    ],\n    \"mb_ereg_search_setpos\": [\n        \"bool mb_ereg_search_setpos(int position)\",\n        \"Set search start position\"\n    ],\n    \"mb_eregi\": [\n        \"int mb_eregi(string pattern, string string [, array registers])\",\n        \"Case-insensitive regular expression match for multibyte string\"\n    ],\n    \"mb_eregi_replace\": [\n        \"string mb_eregi_replace(string pattern, string replacement, string string)\",\n        \"Case insensitive replace regular expression for multibyte string\"\n    ],\n    \"mb_get_info\": [\n        \"mixed mb_get_info([string type])\",\n        \"Returns the current settings of mbstring\"\n    ],\n    \"mb_http_input\": [\n        \"mixed mb_http_input([string type])\",\n        \"Returns the input encoding\"\n    ],\n    \"mb_http_output\": [\n        \"string mb_http_output([string encoding])\",\n        \"Sets the current output_encoding or returns the current output_encoding as a string\"\n    ],\n    \"mb_internal_encoding\": [\n        \"string mb_internal_encoding([string encoding])\",\n        \"Sets the current internal encoding or Returns the current internal encoding as a string\"\n    ],\n    \"mb_language\": [\n        \"string mb_language([string language])\",\n        \"Sets the current language or Returns the current language as a string\"\n    ],\n    \"mb_list_encodings\": [\n        \"mixed mb_list_encodings()\",\n        \"Returns an array of all supported entity encodings\"\n    ],\n    \"mb_output_handler\": [\n        \"string mb_output_handler(string contents, int status)\",\n        \"Returns string in output buffer converted to the http_output encoding\"\n    ],\n    \"mb_parse_str\": [\n        \"bool mb_parse_str(string encoded_string [, array result])\",\n        \"Parses GET/POST/COOKIE data and sets global variables\"\n    ],\n    \"mb_preferred_mime_name\": [\n        \"string mb_preferred_mime_name(string encoding)\",\n        \"Return the preferred MIME name (charset) as a string\"\n    ],\n    \"mb_regex_encoding\": [\n        \"string mb_regex_encoding([string encoding])\",\n        \"Returns the current encoding for regex as a string.\"\n    ],\n    \"mb_regex_set_options\": [\n        \"string mb_regex_set_options([string options])\",\n        \"Set or get the default options for mbregex functions\"\n    ],\n    \"mb_send_mail\": [\n        \"int mb_send_mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])\",\n        \"*  Sends an email message with MIME scheme\"\n    ],\n    \"mb_split\": [\n        \"array mb_split(string pattern, string string [, int limit])\",\n        \"split multibyte string into array by regular expression\"\n    ],\n    \"mb_strcut\": [\n        \"string mb_strcut(string str, int start [, int length [, string encoding]])\",\n        \"Returns part of a string\"\n    ],\n    \"mb_strimwidth\": [\n        \"string mb_strimwidth(string str, int start, int width [, string trimmarker [, string encoding]])\",\n        \"Trim the string in terminal width\"\n    ],\n    \"mb_stripos\": [\n        \"int mb_stripos(string haystack, string needle [, int offset [, string encoding]])\",\n        \"Finds position of first occurrence of a string within another, case insensitive\"\n    ],\n    \"mb_stristr\": [\n        \"string mb_stristr(string haystack, string needle[, bool part[, string encoding]])\",\n        \"Finds first occurrence of a string within another, case insensitive\"\n    ],\n    \"mb_strlen\": [\n        \"int mb_strlen(string str [, string encoding])\",\n        \"Get character numbers of a string\"\n    ],\n    \"mb_strpos\": [\n        \"int mb_strpos(string haystack, string needle [, int offset [, string encoding]])\",\n        \"Find position of first occurrence of a string within another\"\n    ],\n    \"mb_strrchr\": [\n        \"string mb_strrchr(string haystack, string needle[, bool part[, string encoding]])\",\n        \"Finds the last occurrence of a character in a string within another\"\n    ],\n    \"mb_strrichr\": [\n        \"string mb_strrichr(string haystack, string needle[, bool part[, string encoding]])\",\n        \"Finds the last occurrence of a character in a string within another, case insensitive\"\n    ],\n    \"mb_strripos\": [\n        \"int mb_strripos(string haystack, string needle [, int offset [, string encoding]])\",\n        \"Finds position of last occurrence of a string within another, case insensitive\"\n    ],\n    \"mb_strrpos\": [\n        \"int mb_strrpos(string haystack, string needle [, int offset [, string encoding]])\",\n        \"Find position of last occurrence of a string within another\"\n    ],\n    \"mb_strstr\": [\n        \"string mb_strstr(string haystack, string needle[, bool part[, string encoding]])\",\n        \"Finds first occurrence of a string within another\"\n    ],\n    \"mb_strtolower\": [\n        \"string mb_strtolower(string sourcestring [, string encoding])\",\n        \"*  Returns a lowercased version of sourcestring\"\n    ],\n    \"mb_strtoupper\": [\n        \"string mb_strtoupper(string sourcestring [, string encoding])\",\n        \"*  Returns a uppercased version of sourcestring\"\n    ],\n    \"mb_strwidth\": [\n        \"int mb_strwidth(string str [, string encoding])\",\n        \"Gets terminal width of a string\"\n    ],\n    \"mb_substitute_character\": [\n        \"mixed mb_substitute_character([mixed substchar])\",\n        \"Sets the current substitute_character or returns the current substitute_character\"\n    ],\n    \"mb_substr\": [\n        \"string mb_substr(string str, int start [, int length [, string encoding]])\",\n        \"Returns part of a string\"\n    ],\n    \"mb_substr_count\": [\n        \"int mb_substr_count(string haystack, string needle [, string encoding])\",\n        \"Count the number of substring occurrences\"\n    ],\n    \"mcrypt_cbc\": [\n        \"string mcrypt_cbc(int cipher, string key, string data, int mode, string iv)\",\n        \"CBC crypt/decrypt data using key key with cipher cipher starting with iv\"\n    ],\n    \"mcrypt_cfb\": [\n        \"string mcrypt_cfb(int cipher, string key, string data, int mode, string iv)\",\n        \"CFB crypt/decrypt data using key key with cipher cipher starting with iv\"\n    ],\n    \"mcrypt_create_iv\": [\n        \"string mcrypt_create_iv(int size, int source)\",\n        \"Create an initialization vector (IV)\"\n    ],\n    \"mcrypt_decrypt\": [\n        \"string mcrypt_decrypt(string cipher, string key, string data, string mode, string iv)\",\n        \"OFB crypt/decrypt data using key key with cipher cipher starting with iv\"\n    ],\n    \"mcrypt_ecb\": [\n        \"string mcrypt_ecb(int cipher, string key, string data, int mode, string iv)\",\n        \"ECB crypt/decrypt data using key key with cipher cipher starting with iv\"\n    ],\n    \"mcrypt_enc_get_algorithms_name\": [\n        \"string mcrypt_enc_get_algorithms_name(resource td)\",\n        \"Returns the name of the algorithm specified by the descriptor td\"\n    ],\n    \"mcrypt_enc_get_block_size\": [\n        \"int mcrypt_enc_get_block_size(resource td)\",\n        \"Returns the block size of the cipher specified by the descriptor td\"\n    ],\n    \"mcrypt_enc_get_iv_size\": [\n        \"int mcrypt_enc_get_iv_size(resource td)\",\n        \"Returns the size of the IV in bytes of the algorithm specified by the descriptor td\"\n    ],\n    \"mcrypt_enc_get_key_size\": [\n        \"int mcrypt_enc_get_key_size(resource td)\",\n        \"Returns the maximum supported key size in bytes of the algorithm specified by the descriptor td\"\n    ],\n    \"mcrypt_enc_get_modes_name\": [\n        \"string mcrypt_enc_get_modes_name(resource td)\",\n        \"Returns the name of the mode specified by the descriptor td\"\n    ],\n    \"mcrypt_enc_get_supported_key_sizes\": [\n        \"array mcrypt_enc_get_supported_key_sizes(resource td)\",\n        \"This function decrypts the crypttext\"\n    ],\n    \"mcrypt_enc_is_block_algorithm\": [\n        \"bool mcrypt_enc_is_block_algorithm(resource td)\",\n        \"Returns TRUE if the alrogithm is a block algorithms\"\n    ],\n    \"mcrypt_enc_is_block_algorithm_mode\": [\n        \"bool mcrypt_enc_is_block_algorithm_mode(resource td)\",\n        \"Returns TRUE if the mode is for use with block algorithms\"\n    ],\n    \"mcrypt_enc_is_block_mode\": [\n        \"bool mcrypt_enc_is_block_mode(resource td)\",\n        \"Returns TRUE if the mode outputs blocks\"\n    ],\n    \"mcrypt_enc_self_test\": [\n        \"int mcrypt_enc_self_test(resource td)\",\n        \"This function runs the self test on the algorithm specified by the descriptor td\"\n    ],\n    \"mcrypt_encrypt\": [\n        \"string mcrypt_encrypt(string cipher, string key, string data, string mode, string iv)\",\n        \"OFB crypt/decrypt data using key key with cipher cipher starting with iv\"\n    ],\n    \"mcrypt_generic\": [\n        \"string mcrypt_generic(resource td, string data)\",\n        \"This function encrypts the plaintext\"\n    ],\n    \"mcrypt_generic_deinit\": [\n        \"bool mcrypt_generic_deinit(resource td)\",\n        \"This function terminates encrypt specified by the descriptor td\"\n    ],\n    \"mcrypt_generic_init\": [\n        \"int mcrypt_generic_init(resource td, string key, string iv)\",\n        \"This function initializes all buffers for the specific module\"\n    ],\n    \"mcrypt_get_block_size\": [\n        \"int mcrypt_get_block_size(string cipher, string module)\",\n        \"Get the key size of cipher\"\n    ],\n    \"mcrypt_get_cipher_name\": [\n        \"string mcrypt_get_cipher_name(string cipher)\",\n        \"Get the key size of cipher\"\n    ],\n    \"mcrypt_get_iv_size\": [\n        \"int mcrypt_get_iv_size(string cipher, string module)\",\n        \"Get the IV size of cipher (Usually the same as the blocksize)\"\n    ],\n    \"mcrypt_get_key_size\": [\n        \"int mcrypt_get_key_size(string cipher, string module)\",\n        \"Get the key size of cipher\"\n    ],\n    \"mcrypt_list_algorithms\": [\n        \"array mcrypt_list_algorithms([string lib_dir])\",\n        \"List all algorithms in \\\"module_dir\\\"\"\n    ],\n    \"mcrypt_list_modes\": [\n        \"array mcrypt_list_modes([string lib_dir])\",\n        \"List all modes \\\"module_dir\\\"\"\n    ],\n    \"mcrypt_module_close\": [\n        \"bool mcrypt_module_close(resource td)\",\n        \"Free the descriptor td\"\n    ],\n    \"mcrypt_module_get_algo_block_size\": [\n        \"int mcrypt_module_get_algo_block_size(string algorithm [, string lib_dir])\",\n        \"Returns the block size of the algorithm\"\n    ],\n    \"mcrypt_module_get_algo_key_size\": [\n        \"int mcrypt_module_get_algo_key_size(string algorithm [, string lib_dir])\",\n        \"Returns the maximum supported key size of the algorithm\"\n    ],\n    \"mcrypt_module_get_supported_key_sizes\": [\n        \"array mcrypt_module_get_supported_key_sizes(string algorithm [, string lib_dir])\",\n        \"This function decrypts the crypttext\"\n    ],\n    \"mcrypt_module_is_block_algorithm\": [\n        \"bool mcrypt_module_is_block_algorithm(string algorithm [, string lib_dir])\",\n        \"Returns TRUE if the algorithm is a block algorithm\"\n    ],\n    \"mcrypt_module_is_block_algorithm_mode\": [\n        \"bool mcrypt_module_is_block_algorithm_mode(string mode [, string lib_dir])\",\n        \"Returns TRUE if the mode is for use with block algorithms\"\n    ],\n    \"mcrypt_module_is_block_mode\": [\n        \"bool mcrypt_module_is_block_mode(string mode [, string lib_dir])\",\n        \"Returns TRUE if the mode outputs blocks of bytes\"\n    ],\n    \"mcrypt_module_open\": [\n        \"resource mcrypt_module_open(string cipher, string cipher_directory, string mode, string mode_directory)\",\n        \"Opens the module of the algorithm and the mode to be used\"\n    ],\n    \"mcrypt_module_self_test\": [\n        \"bool mcrypt_module_self_test(string algorithm [, string lib_dir])\",\n        \"Does a self test of the module \\\"module\\\"\"\n    ],\n    \"mcrypt_ofb\": [\n        \"string mcrypt_ofb(int cipher, string key, string data, int mode, string iv)\",\n        \"OFB crypt/decrypt data using key key with cipher cipher starting with iv\"\n    ],\n    \"md5\": [\n        \"string md5(string str, [ bool raw_output])\",\n        \"Calculate the md5 hash of a string\"\n    ],\n    \"md5_file\": [\n        \"string md5_file(string filename [, bool raw_output])\",\n        \"Calculate the md5 hash of given filename\"\n    ],\n    \"mdecrypt_generic\": [\n        \"string mdecrypt_generic(resource td, string data)\",\n        \"This function decrypts the plaintext\"\n    ],\n    \"memory_get_peak_usage\": [\n        \"int memory_get_peak_usage([real_usage])\",\n        \"Returns the peak allocated by PHP memory\"\n    ],\n    \"memory_get_usage\": [\n        \"int memory_get_usage([real_usage])\",\n        \"Returns the allocated by PHP memory\"\n    ],\n    \"metaphone\": [\n        \"string metaphone(string text[, int phones])\",\n        \"Break english phrases down into their phonemes\"\n    ],\n    \"method_exists\": [\n        \"bool method_exists(object object, string method)\",\n        \"Checks if the class method exists\"\n    ],\n    \"mhash\": [\n        \"string mhash(int hash, string data [, string key])\",\n        \"Hash data with hash\"\n    ],\n    \"mhash_count\": [\n        \"int mhash_count(void)\",\n        \"Gets the number of available hashes\"\n    ],\n    \"mhash_get_block_size\": [\n        \"int mhash_get_block_size(int hash)\",\n        \"Gets the block size of hash\"\n    ],\n    \"mhash_get_hash_name\": [\n        \"string mhash_get_hash_name(int hash)\",\n        \"Gets the name of hash\"\n    ],\n    \"mhash_keygen_s2k\": [\n        \"string mhash_keygen_s2k(int hash, string input_password, string salt, int bytes)\",\n        \"Generates a key using hash functions\"\n    ],\n    \"microtime\": [\n        \"mixed microtime([bool get_as_float])\",\n        \"Returns either a string or a float containing the current time in seconds and microseconds\"\n    ],\n    \"mime_content_type\": [\n        \"string mime_content_type(string filename|resource stream)\",\n        \"Return content-type for file\"\n    ],\n    \"min\": [\n        \"mixed min(mixed arg1 [, mixed arg2 [, mixed ...]])\",\n        \"Return the lowest value in an array or a series of arguments\"\n    ],\n    \"mkdir\": [\n        \"bool mkdir(string pathname [, int mode [, bool recursive [, resource context]]])\",\n        \"Create a directory\"\n    ],\n    \"mktime\": [\n        \"int mktime([int hour [, int min [, int sec [, int mon [, int day [, int year]]]]]])\",\n        \"Get UNIX timestamp for a date\"\n    ],\n    \"money_format\": [\n        \"string money_format(string format , float value)\",\n        \"Convert monetary value(s) to string\"\n    ],\n    \"move_uploaded_file\": [\n        \"bool move_uploaded_file(string path, string new_path)\",\n        \"Move a file if and only if it was created by an upload\"\n    ],\n    \"msg_get_queue\": [\n        \"resource msg_get_queue(int key [, int perms])\",\n        \"Attach to a message queue\"\n    ],\n    \"msg_queue_exists\": [\n        \"bool msg_queue_exists(int key)\",\n        \"Check wether a message queue exists\"\n    ],\n    \"msg_receive\": [\n        \"mixed msg_receive(resource queue, int desiredmsgtype, int &msgtype, int maxsize, mixed message [, bool unserialize=true [, int flags=0 [, int errorcode]]])\",\n        \"Send a message of type msgtype (must be > 0) to a message queue\"\n    ],\n    \"msg_remove_queue\": [\n        \"bool msg_remove_queue(resource queue)\",\n        \"Destroy the queue\"\n    ],\n    \"msg_send\": [\n        \"bool msg_send(resource queue, int msgtype, mixed message [, bool serialize=true [, bool blocking=true [, int errorcode]]])\",\n        \"Send a message of type msgtype (must be > 0) to a message queue\"\n    ],\n    \"msg_set_queue\": [\n        \"bool msg_set_queue(resource queue, array data)\",\n        \"Set information for a message queue\"\n    ],\n    \"msg_stat_queue\": [\n        \"array msg_stat_queue(resource queue)\",\n        \"Returns information about a message queue\"\n    ],\n    \"msgfmt_create\": [\n        \"MessageFormatter msgfmt_create( string $locale, string $pattern )\",\n        \"* Create formatter.\"\n    ],\n    \"msgfmt_format\": [\n        \"mixed msgfmt_format( MessageFormatter $nf, array $args )\",\n        \"* Format a message.\"\n    ],\n    \"msgfmt_format_message\": [\n        \"mixed msgfmt_format_message( string $locale, string $pattern, array $args )\",\n        \"* Format a message.\"\n    ],\n    \"msgfmt_get_error_code\": [\n        \"int msgfmt_get_error_code( MessageFormatter $nf )\",\n        \"* Get formatter's last error code.\"\n    ],\n    \"msgfmt_get_error_message\": [\n        \"string msgfmt_get_error_message( MessageFormatter $coll )\",\n        \"* Get text description for formatter's last error code.\"\n    ],\n    \"msgfmt_get_locale\": [\n        \"string msgfmt_get_locale(MessageFormatter $mf)\",\n        \"* Get formatter locale.\"\n    ],\n    \"msgfmt_get_pattern\": [\n        \"string msgfmt_get_pattern( MessageFormatter $mf )\",\n        \"* Get formatter pattern.\"\n    ],\n    \"msgfmt_parse\": [\n        \"array msgfmt_parse( MessageFormatter $nf, string $source )\",\n        \"* Parse a message.\"\n    ],\n    \"msgfmt_set_pattern\": [\n        \"bool msgfmt_set_pattern( MessageFormatter $mf, string $pattern )\",\n        \"* Set formatter pattern.\"\n    ],\n    \"mssql_bind\": [\n        \"bool mssql_bind(resource stmt, string param_name, mixed var, int type [, bool is_output [, bool is_null [, int maxlen]]])\",\n        \"Adds a parameter to a stored procedure or a remote stored procedure\"\n    ],\n    \"mssql_close\": [\n        \"bool mssql_close([resource conn_id])\",\n        \"Closes a connection to a MS-SQL server\"\n    ],\n    \"mssql_connect\": [\n        \"int mssql_connect([string servername [, string username [, string password [, bool new_link]]]])\",\n        \"Establishes a connection to a MS-SQL server\"\n    ],\n    \"mssql_data_seek\": [\n        \"bool mssql_data_seek(resource result_id, int offset)\",\n        \"Moves the internal row pointer of the MS-SQL result associated with the specified result identifier to pointer to the specified row number\"\n    ],\n    \"mssql_execute\": [\n        \"mixed mssql_execute(resource stmt [, bool skip_results = false])\",\n        \"Executes a stored procedure on a MS-SQL server database\"\n    ],\n    \"mssql_fetch_array\": [\n        \"array mssql_fetch_array(resource result_id [, int result_type])\",\n        \"Returns an associative array of the current row in the result set specified by result_id\"\n    ],\n    \"mssql_fetch_assoc\": [\n        \"array mssql_fetch_assoc(resource result_id)\",\n        \"Returns an associative array of the current row in the result set specified by result_id\"\n    ],\n    \"mssql_fetch_batch\": [\n        \"int mssql_fetch_batch(resource result_index)\",\n        \"Returns the next batch of records\"\n    ],\n    \"mssql_fetch_field\": [\n        \"object mssql_fetch_field(resource result_id [, int offset])\",\n        \"Gets information about certain fields in a query result\"\n    ],\n    \"mssql_fetch_object\": [\n        \"object mssql_fetch_object(resource result_id)\",\n        \"Returns a pseudo-object of the current row in the result set specified by result_id\"\n    ],\n    \"mssql_fetch_row\": [\n        \"array mssql_fetch_row(resource result_id)\",\n        \"Returns an array of the current row in the result set specified by result_id\"\n    ],\n    \"mssql_field_length\": [\n        \"int mssql_field_length(resource result_id [, int offset])\",\n        \"Get the length of a MS-SQL field\"\n    ],\n    \"mssql_field_name\": [\n        \"string mssql_field_name(resource result_id [, int offset])\",\n        \"Returns the name of the field given by offset in the result set given by result_id\"\n    ],\n    \"mssql_field_seek\": [\n        \"bool mssql_field_seek(resource result_id, int offset)\",\n        \"Seeks to the specified field offset\"\n    ],\n    \"mssql_field_type\": [\n        \"string mssql_field_type(resource result_id [, int offset])\",\n        \"Returns the type of a field\"\n    ],\n    \"mssql_free_result\": [\n        \"bool mssql_free_result(resource result_index)\",\n        \"Free a MS-SQL result index\"\n    ],\n    \"mssql_free_statement\": [\n        \"bool mssql_free_statement(resource result_index)\",\n        \"Free a MS-SQL statement index\"\n    ],\n    \"mssql_get_last_message\": [\n        \"string mssql_get_last_message(void)\",\n        \"Gets the last message from the MS-SQL server\"\n    ],\n    \"mssql_guid_string\": [\n        \"string mssql_guid_string(string binary [,bool short_format])\",\n        \"Converts a 16 byte binary GUID to a string\"\n    ],\n    \"mssql_init\": [\n        \"int mssql_init(string sp_name [, resource conn_id])\",\n        \"Initializes a stored procedure or a remote stored procedure\"\n    ],\n    \"mssql_min_error_severity\": [\n        \"void mssql_min_error_severity(int severity)\",\n        \"Sets the lower error severity\"\n    ],\n    \"mssql_min_message_severity\": [\n        \"void mssql_min_message_severity(int severity)\",\n        \"Sets the lower message severity\"\n    ],\n    \"mssql_next_result\": [\n        \"bool mssql_next_result(resource result_id)\",\n        \"Move the internal result pointer to the next result\"\n    ],\n    \"mssql_num_fields\": [\n        \"int mssql_num_fields(resource mssql_result_index)\",\n        \"Returns the number of fields fetched in from the result id specified\"\n    ],\n    \"mssql_num_rows\": [\n        \"int mssql_num_rows(resource mssql_result_index)\",\n        \"Returns the number of rows fetched in from the result id specified\"\n    ],\n    \"mssql_pconnect\": [\n        \"int mssql_pconnect([string servername [, string username [, string password [, bool new_link]]]])\",\n        \"Establishes a persistent connection to a MS-SQL server\"\n    ],\n    \"mssql_query\": [\n        \"resource mssql_query(string query [, resource conn_id [, int batch_size]])\",\n        \"Perform an SQL query on a MS-SQL server database\"\n    ],\n    \"mssql_result\": [\n        \"string mssql_result(resource result_id, int row, mixed field)\",\n        \"Returns the contents of one cell from a MS-SQL result set\"\n    ],\n    \"mssql_rows_affected\": [\n        \"int mssql_rows_affected(resource conn_id)\",\n        \"Returns the number of records affected by the query\"\n    ],\n    \"mssql_select_db\": [\n        \"bool mssql_select_db(string database_name [, resource conn_id])\",\n        \"Select a MS-SQL database\"\n    ],\n    \"mt_getrandmax\": [\n        \"int mt_getrandmax(void)\",\n        \"Returns the maximum value a random number from Mersenne Twister can have\"\n    ],\n    \"mt_rand\": [\n        \"int mt_rand([int min, int max])\",\n        \"Returns a random number from Mersenne Twister\"\n    ],\n    \"mt_srand\": [\n        \"void mt_srand([int seed])\",\n        \"Seeds Mersenne Twister random number generator\"\n    ],\n    \"mysql_affected_rows\": [\n        \"int mysql_affected_rows([int link_identifier])\",\n        \"Gets number of affected rows in previous MySQL operation\"\n    ],\n    \"mysql_client_encoding\": [\n        \"string mysql_client_encoding([int link_identifier])\",\n        \"Returns the default character set for the current connection\"\n    ],\n    \"mysql_close\": [\n        \"bool mysql_close([int link_identifier])\",\n        \"Close a MySQL connection\"\n    ],\n    \"mysql_connect\": [\n        \"resource mysql_connect([string hostname[:port][:/path/to/socket] [, string username [, string password [, bool new [, int flags]]]]])\",\n        \"Opens a connection to a MySQL Server\"\n    ],\n    \"mysql_create_db\": [\n        \"bool mysql_create_db(string database_name [, int link_identifier])\",\n        \"Create a MySQL database\"\n    ],\n    \"mysql_data_seek\": [\n        \"bool mysql_data_seek(resource result, int row_number)\",\n        \"Move internal result pointer\"\n    ],\n    \"mysql_db_query\": [\n        \"resource mysql_db_query(string database_name, string query [, int link_identifier])\",\n        \"Sends an SQL query to MySQL\"\n    ],\n    \"mysql_drop_db\": [\n        \"bool mysql_drop_db(string database_name [, int link_identifier])\",\n        \"Drops (delete) a MySQL database\"\n    ],\n    \"mysql_errno\": [\n        \"int mysql_errno([int link_identifier])\",\n        \"Returns the number of the error message from previous MySQL operation\"\n    ],\n    \"mysql_error\": [\n        \"string mysql_error([int link_identifier])\",\n        \"Returns the text of the error message from previous MySQL operation\"\n    ],\n    \"mysql_escape_string\": [\n        \"string mysql_escape_string(string to_be_escaped)\",\n        \"Escape string for mysql query\"\n    ],\n    \"mysql_fetch_array\": [\n        \"array mysql_fetch_array(resource result [, int result_type])\",\n        \"Fetch a result row as an array (associative, numeric or both)\"\n    ],\n    \"mysql_fetch_assoc\": [\n        \"array mysql_fetch_assoc(resource result)\",\n        \"Fetch a result row as an associative array\"\n    ],\n    \"mysql_fetch_field\": [\n        \"object mysql_fetch_field(resource result [, int field_offset])\",\n        \"Gets column information from a result and return as an object\"\n    ],\n    \"mysql_fetch_lengths\": [\n        \"array mysql_fetch_lengths(resource result)\",\n        \"Gets max data size of each column in a result\"\n    ],\n    \"mysql_fetch_object\": [\n        \"object mysql_fetch_object(resource result [, string class_name [, NULL|array ctor_params]])\",\n        \"Fetch a result row as an object\"\n    ],\n    \"mysql_fetch_row\": [\n        \"array mysql_fetch_row(resource result)\",\n        \"Gets a result row as an enumerated array\"\n    ],\n    \"mysql_field_flags\": [\n        \"string mysql_field_flags(resource result, int field_offset)\",\n        \"Gets the flags associated with the specified field in a result\"\n    ],\n    \"mysql_field_len\": [\n        \"int mysql_field_len(resource result, int field_offset)\",\n        \"Returns the length of the specified field\"\n    ],\n    \"mysql_field_name\": [\n        \"string mysql_field_name(resource result, int field_index)\",\n        \"Gets the name of the specified field in a result\"\n    ],\n    \"mysql_field_seek\": [\n        \"bool mysql_field_seek(resource result, int field_offset)\",\n        \"Sets result pointer to a specific field offset\"\n    ],\n    \"mysql_field_table\": [\n        \"string mysql_field_table(resource result, int field_offset)\",\n        \"Gets name of the table the specified field is in\"\n    ],\n    \"mysql_field_type\": [\n        \"string mysql_field_type(resource result, int field_offset)\",\n        \"Gets the type of the specified field in a result\"\n    ],\n    \"mysql_free_result\": [\n        \"bool mysql_free_result(resource result)\",\n        \"Free result memory\"\n    ],\n    \"mysql_get_client_info\": [\n        \"string mysql_get_client_info(void)\",\n        \"Returns a string that represents the client library version\"\n    ],\n    \"mysql_get_host_info\": [\n        \"string mysql_get_host_info([int link_identifier])\",\n        \"Returns a string describing the type of connection in use, including the server host name\"\n    ],\n    \"mysql_get_proto_info\": [\n        \"int mysql_get_proto_info([int link_identifier])\",\n        \"Returns the protocol version used by current connection\"\n    ],\n    \"mysql_get_server_info\": [\n        \"string mysql_get_server_info([int link_identifier])\",\n        \"Returns a string that represents the server version number\"\n    ],\n    \"mysql_info\": [\n        \"string mysql_info([int link_identifier])\",\n        \"Returns a string containing information about the most recent query\"\n    ],\n    \"mysql_insert_id\": [\n        \"int mysql_insert_id([int link_identifier])\",\n        \"Gets the ID generated from the previous INSERT operation\"\n    ],\n    \"mysql_list_dbs\": [\n        \"resource mysql_list_dbs([int link_identifier])\",\n        \"List databases available on a MySQL server\"\n    ],\n    \"mysql_list_fields\": [\n        \"resource mysql_list_fields(string database_name, string table_name [, int link_identifier])\",\n        \"List MySQL result fields\"\n    ],\n    \"mysql_list_processes\": [\n        \"resource mysql_list_processes([int link_identifier])\",\n        \"Returns a result set describing the current server threads\"\n    ],\n    \"mysql_list_tables\": [\n        \"resource mysql_list_tables(string database_name [, int link_identifier])\",\n        \"List tables in a MySQL database\"\n    ],\n    \"mysql_num_fields\": [\n        \"int mysql_num_fields(resource result)\",\n        \"Gets number of fields in a result\"\n    ],\n    \"mysql_num_rows\": [\n        \"int mysql_num_rows(resource result)\",\n        \"Gets number of rows in a result\"\n    ],\n    \"mysql_pconnect\": [\n        \"resource mysql_pconnect([string hostname[:port][:/path/to/socket] [, string username [, string password [, int flags]]]])\",\n        \"Opens a persistent connection to a MySQL Server\"\n    ],\n    \"mysql_ping\": [\n        \"bool mysql_ping([int link_identifier])\",\n        \"Ping a server connection. If no connection then reconnect.\"\n    ],\n    \"mysql_query\": [\n        \"resource mysql_query(string query [, int link_identifier])\",\n        \"Sends an SQL query to MySQL\"\n    ],\n    \"mysql_real_escape_string\": [\n        \"string mysql_real_escape_string(string to_be_escaped [, int link_identifier])\",\n        \"Escape special characters in a string for use in a SQL statement, taking into account the current charset of the connection\"\n    ],\n    \"mysql_result\": [\n        \"mixed mysql_result(resource result, int row [, mixed field])\",\n        \"Gets result data\"\n    ],\n    \"mysql_select_db\": [\n        \"bool mysql_select_db(string database_name [, int link_identifier])\",\n        \"Selects a MySQL database\"\n    ],\n    \"mysql_set_charset\": [\n        \"bool mysql_set_charset(string csname [, int link_identifier])\",\n        \"sets client character set\"\n    ],\n    \"mysql_stat\": [\n        \"string mysql_stat([int link_identifier])\",\n        \"Returns a string containing status information\"\n    ],\n    \"mysql_thread_id\": [\n        \"int mysql_thread_id([int link_identifier])\",\n        \"Returns the thread id of current connection\"\n    ],\n    \"mysql_unbuffered_query\": [\n        \"resource mysql_unbuffered_query(string query [, int link_identifier])\",\n        \"Sends an SQL query to MySQL, without fetching and buffering the result rows\"\n    ],\n    \"mysqli_affected_rows\": [\n        \"mixed mysqli_affected_rows(object link)\",\n        \"Get number of affected rows in previous MySQL operation\"\n    ],\n    \"mysqli_autocommit\": [\n        \"bool mysqli_autocommit(object link, bool mode)\",\n        \"Turn auto commit on or of\"\n    ],\n    \"mysqli_cache_stats\": [\n        \"array mysqli_cache_stats(void)\",\n        \"Returns statistics about the zval cache\"\n    ],\n    \"mysqli_change_user\": [\n        \"bool mysqli_change_user(object link, string user, string password, string database)\",\n        \"Change logged-in user of the active connection\"\n    ],\n    \"mysqli_character_set_name\": [\n        \"string mysqli_character_set_name(object link)\",\n        \"Returns the name of the character set used for this connection\"\n    ],\n    \"mysqli_close\": [\n        \"bool mysqli_close(object link)\",\n        \"Close connection\"\n    ],\n    \"mysqli_commit\": [\n        \"bool mysqli_commit(object link)\",\n        \"Commit outstanding actions and close transaction\"\n    ],\n    \"mysqli_connect\": [\n        \"object mysqli_connect([string hostname [,string username [,string passwd [,string dbname [,int port [,string socket]]]]]])\",\n        \"Open a connection to a mysql server\"\n    ],\n    \"mysqli_connect_errno\": [\n        \"int mysqli_connect_errno(void)\",\n        \"Returns the numerical value of the error message from last connect command\"\n    ],\n    \"mysqli_connect_error\": [\n        \"string mysqli_connect_error(void)\",\n        \"Returns the text of the error message from previous MySQL operation\"\n    ],\n    \"mysqli_data_seek\": [\n        \"bool mysqli_data_seek(object result, int offset)\",\n        \"Move internal result pointer\"\n    ],\n    \"mysqli_debug\": [\n        \"void mysqli_debug(string debug)\",\n        \"\"\n    ],\n    \"mysqli_dump_debug_info\": [\n        \"bool mysqli_dump_debug_info(object link)\",\n        \"\"\n    ],\n    \"mysqli_embedded_server_end\": [\n        \"void mysqli_embedded_server_end(void)\",\n        \"\"\n    ],\n    \"mysqli_embedded_server_start\": [\n        \"bool mysqli_embedded_server_start(bool start, array arguments, array groups)\",\n        \"initialize and start embedded server\"\n    ],\n    \"mysqli_errno\": [\n        \"int mysqli_errno(object link)\",\n        \"Returns the numerical value of the error message from previous MySQL operation\"\n    ],\n    \"mysqli_error\": [\n        \"string mysqli_error(object link)\",\n        \"Returns the text of the error message from previous MySQL operation\"\n    ],\n    \"mysqli_fetch_all\": [\n        \"mixed mysqli_fetch_all (object result [,int resulttype])\",\n        \"Fetches all result rows as an associative array, a numeric array, or both\"\n    ],\n    \"mysqli_fetch_array\": [\n        \"mixed mysqli_fetch_array (object result [,int resulttype])\",\n        \"Fetch a result row as an associative array, a numeric array, or both\"\n    ],\n    \"mysqli_fetch_assoc\": [\n        \"mixed mysqli_fetch_assoc (object result)\",\n        \"Fetch a result row as an associative array\"\n    ],\n    \"mysqli_fetch_field\": [\n        \"mixed mysqli_fetch_field (object result)\",\n        \"Get column information from a result and return as an object\"\n    ],\n    \"mysqli_fetch_field_direct\": [\n        \"mixed mysqli_fetch_field_direct (object result, int offset)\",\n        \"Fetch meta-data for a single field\"\n    ],\n    \"mysqli_fetch_fields\": [\n        \"mixed mysqli_fetch_fields (object result)\",\n        \"Return array of objects containing field meta-data\"\n    ],\n    \"mysqli_fetch_lengths\": [\n        \"mixed mysqli_fetch_lengths (object result)\",\n        \"Get the length of each output in a result\"\n    ],\n    \"mysqli_fetch_object\": [\n        \"mixed mysqli_fetch_object (object result [, string class_name [, NULL|array ctor_params]])\",\n        \"Fetch a result row as an object\"\n    ],\n    \"mysqli_fetch_row\": [\n        \"array mysqli_fetch_row (object result)\",\n        \"Get a result row as an enumerated array\"\n    ],\n    \"mysqli_field_count\": [\n        \"int mysqli_field_count(object link)\",\n        \"Fetch the number of fields returned by the last query for the given link\"\n    ],\n    \"mysqli_field_seek\": [\n        \"int mysqli_field_seek(object result, int fieldnr)\",\n        \"Set result pointer to a specified field offset\"\n    ],\n    \"mysqli_field_tell\": [\n        \"int mysqli_field_tell(object result)\",\n        \"Get current field offset of result pointer\"\n    ],\n    \"mysqli_free_result\": [\n        \"void mysqli_free_result(object result)\",\n        \"Free query result memory for the given result handle\"\n    ],\n    \"mysqli_get_charset\": [\n        \"object mysqli_get_charset(object link)\",\n        \"returns a character set object\"\n    ],\n    \"mysqli_get_client_info\": [\n        \"string mysqli_get_client_info(void)\",\n        \"Get MySQL client info\"\n    ],\n    \"mysqli_get_client_stats\": [\n        \"array mysqli_get_client_stats(void)\",\n        \"Returns statistics about the zval cache\"\n    ],\n    \"mysqli_get_client_version\": [\n        \"int mysqli_get_client_version(void)\",\n        \"Get MySQL client info\"\n    ],\n    \"mysqli_get_connection_stats\": [\n        \"array mysqli_get_connection_stats(void)\",\n        \"Returns statistics about the zval cache\"\n    ],\n    \"mysqli_get_host_info\": [\n        \"string mysqli_get_host_info (object link)\",\n        \"Get MySQL host info\"\n    ],\n    \"mysqli_get_proto_info\": [\n        \"int mysqli_get_proto_info(object link)\",\n        \"Get MySQL protocol information\"\n    ],\n    \"mysqli_get_server_info\": [\n        \"string mysqli_get_server_info(object link)\",\n        \"Get MySQL server info\"\n    ],\n    \"mysqli_get_server_version\": [\n        \"int mysqli_get_server_version(object link)\",\n        \"Return the MySQL version for the server referenced by the given link\"\n    ],\n    \"mysqli_get_warnings\": [\n        \"object mysqli_get_warnings(object link) */\",\n        \"PHP_FUNCTION(mysqli_get_warnings) {  MY_MYSQL   *mysql;  zval    *mysql_link;  MYSQLI_RESOURCE  *mysqli_resource;  MYSQLI_WARNING  *w;   if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), \\\"O\\\", &mysql_link, mysqli_link_class_entry) == FAILURE) {   return;  }  MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL*, &mysql_link, \\\"mysqli_link\\\", MYSQLI_STATUS_VALID);   if (mysql_warning_count(mysql->mysql)) {   w = php_get_warnings(mysql->mysql TSRMLS_CC);   } else {   RETURN_FALSE;  }  mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE));  mysqli_resource->ptr = mysqli_resource->info = (void *)w;  mysqli_resource->status = MYSQLI_STATUS_VALID;  MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_warning_class_entry);  } /* }}}\"\n    ],\n    \"mysqli_info\": [\n        \"string mysqli_info(object link)\",\n        \"Get information about the most recent query\"\n    ],\n    \"mysqli_init\": [\n        \"resource mysqli_init(void)\",\n        \"Initialize mysqli and return a resource for use with mysql_real_connect\"\n    ],\n    \"mysqli_insert_id\": [\n        \"mixed mysqli_insert_id(object link)\",\n        \"Get the ID generated from the previous INSERT operation\"\n    ],\n    \"mysqli_kill\": [\n        \"bool mysqli_kill(object link, int processid)\",\n        \"Kill a mysql process on the server\"\n    ],\n    \"mysqli_link_construct\": [\n        \"object mysqli_link_construct()\",\n        \"\"\n    ],\n    \"mysqli_more_results\": [\n        \"bool mysqli_more_results(object link)\",\n        \"check if there any more query results from a multi query\"\n    ],\n    \"mysqli_multi_query\": [\n        \"bool mysqli_multi_query(object link, string query)\",\n        \"allows to execute multiple queries\"\n    ],\n    \"mysqli_next_result\": [\n        \"bool mysqli_next_result(object link)\",\n        \"read next result from multi_query\"\n    ],\n    \"mysqli_num_fields\": [\n        \"int mysqli_num_fields(object result)\",\n        \"Get number of fields in result\"\n    ],\n    \"mysqli_num_rows\": [\n        \"mixed mysqli_num_rows(object result)\",\n        \"Get number of rows in result\"\n    ],\n    \"mysqli_options\": [\n        \"bool mysqli_options(object link, int flags, mixed values)\",\n        \"Set options\"\n    ],\n    \"mysqli_ping\": [\n        \"bool mysqli_ping(object link)\",\n        \"Ping a server connection or reconnect if there is no connection\"\n    ],\n    \"mysqli_poll\": [\n        \"int mysqli_poll(array read, array write, array error, long sec [, long usec])\",\n        \"Poll connections\"\n    ],\n    \"mysqli_prepare\": [\n        \"mixed mysqli_prepare(object link, string query)\",\n        \"Prepare a SQL statement for execution\"\n    ],\n    \"mysqli_query\": [\n        \"mixed mysqli_query(object link, string query [,int resultmode]) */\",\n        \"PHP_FUNCTION(mysqli_query) {  MY_MYSQL   *mysql;  zval    *mysql_link;  MYSQLI_RESOURCE  *mysqli_resource;  MYSQL_RES    *result;  char    *query = NULL;  unsigned int   query_len;  unsigned long   resultmode = MYSQLI_STORE_RESULT;   if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), \\\"Os|l\\\", &mysql_link, mysqli_link_class_entry, &query, &query_len, &resultmode) == FAILURE) {   return;  }   if (!query_len) {   php_error_docref(NULL TSRMLS_CC, E_WARNING, \\\"Empty query\\\");   RETURN_FALSE;  }  if ((resultmode & ~MYSQLI_ASYNC) != MYSQLI_USE_RESULT && (resultmode & ~MYSQLI_ASYNC) != MYSQLI_STORE_RESULT) {   php_error_docref(NULL TSRMLS_CC, E_WARNING, \\\"Invalid value for resultmode\\\");   RETURN_FALSE;  }   MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL*, &mysql_link, \\\"mysqli_link\\\", MYSQLI_STATUS_VALID);   MYSQLI_DISABLE_MQ;   #ifdef MYSQLI_USE_MYSQLND  if (resultmode & MYSQLI_ASYNC) {   if (mysqli_async_query(mysql->mysql, query, query_len)) {    MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);    RETURN_FALSE;   }   mysql->async_result_fetch_type = resultmode & ~MYSQLI_ASYNC;   RETURN_TRUE;  } #endif   if (mysql_real_query(mysql->mysql, query, query_len)) {   MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);   RETURN_FALSE;  }   if (!mysql_field_count(mysql->mysql)) {   /* no result set - not a SELECT\"\n    ],\n    \"mysqli_real_connect\": [\n        \"bool mysqli_real_connect(object link [,string hostname [,string username [,string passwd [,string dbname [,int port [,string socket [,int flags]]]]]]])\",\n        \"Open a connection to a mysql server\"\n    ],\n    \"mysqli_real_escape_string\": [\n        \"string mysqli_real_escape_string(object link, string escapestr)\",\n        \"Escapes special characters in a string for use in a SQL statement, taking into account the current charset of the connection\"\n    ],\n    \"mysqli_real_query\": [\n        \"bool mysqli_real_query(object link, string query)\",\n        \"Binary-safe version of mysql_query()\"\n    ],\n    \"mysqli_reap_async_query\": [\n        \"int mysqli_reap_async_query(object link)\",\n        \"Poll connections\"\n    ],\n    \"mysqli_refresh\": [\n        \"bool mysqli_refresh(object link, long options)\",\n        \"Flush tables or caches, or reset replication server information\"\n    ],\n    \"mysqli_report\": [\n        \"bool mysqli_report(int flags)\",\n        \"sets report level\"\n    ],\n    \"mysqli_rollback\": [\n        \"bool mysqli_rollback(object link)\",\n        \"Undo actions from current transaction\"\n    ],\n    \"mysqli_select_db\": [\n        \"bool mysqli_select_db(object link, string dbname)\",\n        \"Select a MySQL database\"\n    ],\n    \"mysqli_set_charset\": [\n        \"bool mysqli_set_charset(object link, string csname)\",\n        \"sets client character set\"\n    ],\n    \"mysqli_set_local_infile_default\": [\n        \"void mysqli_set_local_infile_default(object link)\",\n        \"unsets user defined handler for load local infile command\"\n    ],\n    \"mysqli_set_local_infile_handler\": [\n        \"bool mysqli_set_local_infile_handler(object link, callback read_func)\",\n        \"Set callback functions for LOAD DATA LOCAL INFILE\"\n    ],\n    \"mysqli_sqlstate\": [\n        \"string mysqli_sqlstate(object link)\",\n        \"Returns the SQLSTATE error from previous MySQL operation\"\n    ],\n    \"mysqli_ssl_set\": [\n        \"bool mysqli_ssl_set(object link ,string key ,string cert ,string ca ,string capath ,string cipher])\",\n        \"\"\n    ],\n    \"mysqli_stat\": [\n        \"mixed mysqli_stat(object link)\",\n        \"Get current system status\"\n    ],\n    \"mysqli_stmt_affected_rows\": [\n        \"mixed mysqli_stmt_affected_rows(object stmt)\",\n        \"Return the number of rows affected in the last query for the given link\"\n    ],\n    \"mysqli_stmt_attr_get\": [\n        \"int mysqli_stmt_attr_get(object stmt, long attr)\",\n        \"\"\n    ],\n    \"mysqli_stmt_attr_set\": [\n        \"int mysqli_stmt_attr_set(object stmt, long attr, long mode)\",\n        \"\"\n    ],\n    \"mysqli_stmt_bind_param\": [\n        \"bool mysqli_stmt_bind_param(object stmt, string types, mixed variable [,mixed,....])\",\n        \"Bind variables to a prepared statement as parameters\"\n    ],\n    \"mysqli_stmt_bind_result\": [\n        \"bool mysqli_stmt_bind_result(object stmt, mixed var, [,mixed, ...])\",\n        \"Bind variables to a prepared statement for result storage\"\n    ],\n    \"mysqli_stmt_close\": [\n        \"bool mysqli_stmt_close(object stmt)\",\n        \"Close statement\"\n    ],\n    \"mysqli_stmt_data_seek\": [\n        \"void mysqli_stmt_data_seek(object stmt, int offset)\",\n        \"Move internal result pointer\"\n    ],\n    \"mysqli_stmt_errno\": [\n        \"int mysqli_stmt_errno(object stmt)\",\n        \"\"\n    ],\n    \"mysqli_stmt_error\": [\n        \"string mysqli_stmt_error(object stmt)\",\n        \"\"\n    ],\n    \"mysqli_stmt_execute\": [\n        \"bool mysqli_stmt_execute(object stmt)\",\n        \"Execute a prepared statement\"\n    ],\n    \"mysqli_stmt_fetch\": [\n        \"mixed mysqli_stmt_fetch(object stmt)\",\n        \"Fetch results from a prepared statement into the bound variables\"\n    ],\n    \"mysqli_stmt_field_count\": [\n        \"int mysqli_stmt_field_count(object stmt) {\",\n        \"Return the number of result columns for the given statement\"\n    ],\n    \"mysqli_stmt_free_result\": [\n        \"void mysqli_stmt_free_result(object stmt)\",\n        \"Free stored result memory for the given statement handle\"\n    ],\n    \"mysqli_stmt_get_result\": [\n        \"object mysqli_stmt_get_result(object link)\",\n        \"Buffer result set on client\"\n    ],\n    \"mysqli_stmt_get_warnings\": [\n        \"object mysqli_stmt_get_warnings(object link) */\",\n        \"PHP_FUNCTION(mysqli_stmt_get_warnings) {  MY_STMT    *stmt;  zval    *stmt_link;  MYSQLI_RESOURCE  *mysqli_resource;  MYSQLI_WARNING  *w;   if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), \\\"O\\\", &stmt_link, mysqli_stmt_class_entry) == FAILURE) {   return;  }  MYSQLI_FETCH_RESOURCE(stmt, MY_STMT*, &stmt_link, \\\"mysqli_stmt\\\", MYSQLI_STATUS_VALID);   if (mysqli_stmt_warning_count(stmt->stmt)) {   w = php_get_warnings(mysqli_stmt_get_connection(stmt->stmt) TSRMLS_CC);   } else {   RETURN_FALSE;  }  mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE));  mysqli_resource->ptr = mysqli_resource->info = (void *)w;  mysqli_resource->status = MYSQLI_STATUS_VALID;  MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_warning_class_entry); } /* }}}\"\n    ],\n    \"mysqli_stmt_init\": [\n        \"mixed mysqli_stmt_init(object link)\",\n        \"Initialize statement object\"\n    ],\n    \"mysqli_stmt_insert_id\": [\n        \"mixed mysqli_stmt_insert_id(object stmt)\",\n        \"Get the ID generated from the previous INSERT operation\"\n    ],\n    \"mysqli_stmt_next_result\": [\n        \"bool mysqli_stmt_next_result(object link)\",\n        \"read next result from multi_query\"\n    ],\n    \"mysqli_stmt_num_rows\": [\n        \"mixed mysqli_stmt_num_rows(object stmt)\",\n        \"Return the number of rows in statements result set\"\n    ],\n    \"mysqli_stmt_param_count\": [\n        \"int mysqli_stmt_param_count(object stmt)\",\n        \"Return the number of parameter for the given statement\"\n    ],\n    \"mysqli_stmt_prepare\": [\n        \"bool mysqli_stmt_prepare(object stmt, string query)\",\n        \"prepare server side statement with query\"\n    ],\n    \"mysqli_stmt_reset\": [\n        \"bool mysqli_stmt_reset(object stmt)\",\n        \"reset a prepared statement\"\n    ],\n    \"mysqli_stmt_result_metadata\": [\n        \"mixed mysqli_stmt_result_metadata(object stmt)\",\n        \"return result set from statement\"\n    ],\n    \"mysqli_stmt_send_long_data\": [\n        \"bool mysqli_stmt_send_long_data(object stmt, int param_nr, string data)\",\n        \"\"\n    ],\n    \"mysqli_stmt_sqlstate\": [\n        \"string mysqli_stmt_sqlstate(object stmt)\",\n        \"\"\n    ],\n    \"mysqli_stmt_store_result\": [\n        \"bool mysqli_stmt_store_result(stmt)\",\n        \"\"\n    ],\n    \"mysqli_store_result\": [\n        \"object mysqli_store_result(object link)\",\n        \"Buffer result set on client\"\n    ],\n    \"mysqli_thread_id\": [\n        \"int mysqli_thread_id(object link)\",\n        \"Return the current thread ID\"\n    ],\n    \"mysqli_thread_safe\": [\n        \"bool mysqli_thread_safe(void)\",\n        \"Return whether thread safety is given or not\"\n    ],\n    \"mysqli_use_result\": [\n        \"mixed mysqli_use_result(object link)\",\n        \"Directly retrieve query results - do not buffer results on client side\"\n    ],\n    \"mysqli_warning_count\": [\n        \"int mysqli_warning_count (object link)\",\n        \"Return number of warnings from the last query for the given link\"\n    ],\n    \"natcasesort\": [\n        \"void natcasesort(array &array_arg)\",\n        \"Sort an array using case-insensitive natural sort\"\n    ],\n    \"natsort\": [\n        \"void natsort(array &array_arg)\",\n        \"Sort an array using natural sort\"\n    ],\n    \"next\": [\n        \"mixed next(array array_arg)\",\n        \"Move array argument's internal pointer to the next element and return it\"\n    ],\n    \"ngettext\": [\n        \"string ngettext(string MSGID1, string MSGID2, int N)\",\n        \"Plural version of gettext()\"\n    ],\n    \"nl2br\": [\n        \"string nl2br(string str [, bool is_xhtml])\",\n        \"Converts newlines to HTML line breaks\"\n    ],\n    \"nl_langinfo\": [\n        \"string nl_langinfo(int item)\",\n        \"Query language and locale information\"\n    ],\n    \"normalizer_is_normalize\": [\n        \"bool normalizer_is_normalize( string $input [, string $form = FORM_C] )\",\n        \"* Test if a string is in a given normalization form.\"\n    ],\n    \"normalizer_normalize\": [\n        \"string normalizer_normalize( string $input [, string $form = FORM_C] )\",\n        \"* Normalize a string.\"\n    ],\n    \"nsapi_request_headers\": [\n        \"array nsapi_request_headers(void)\",\n        \"Get all headers from the request\"\n    ],\n    \"nsapi_response_headers\": [\n        \"array nsapi_response_headers(void)\",\n        \"Get all headers from the response\"\n    ],\n    \"nsapi_virtual\": [\n        \"bool nsapi_virtual(string uri)\",\n        \"Perform an NSAPI sub-request\"\n    ],\n    \"number_format\": [\n        \"string number_format(float number [, int num_decimal_places [, string dec_seperator, string thousands_seperator]])\",\n        \"Formats a number with grouped thousands\"\n    ],\n    \"numfmt_create\": [\n        \"NumberFormatter numfmt_create( string $locale, int style[, string $pattern ] )\",\n        \"* Create number formatter.\"\n    ],\n    \"numfmt_format\": [\n        \"mixed numfmt_format( NumberFormatter $nf, mixed $num[, int type] )\",\n        \"* Format a number.\"\n    ],\n    \"numfmt_format_currency\": [\n        \"mixed numfmt_format_currency( NumberFormatter $nf, double $num, string $currency )\",\n        \"* Format a number as currency.\"\n    ],\n    \"numfmt_get_attribute\": [\n        \"mixed numfmt_get_attribute( NumberFormatter $nf, int $attr )\",\n        \"* Get formatter attribute value.\"\n    ],\n    \"numfmt_get_error_code\": [\n        \"int numfmt_get_error_code( NumberFormatter $nf )\",\n        \"* Get formatter's last error code.\"\n    ],\n    \"numfmt_get_error_message\": [\n        \"string numfmt_get_error_message( NumberFormatter $nf )\",\n        \"* Get text description for formatter's last error code.\"\n    ],\n    \"numfmt_get_locale\": [\n        \"string numfmt_get_locale( NumberFormatter $nf[, int type] )\",\n        \"* Get formatter locale.\"\n    ],\n    \"numfmt_get_pattern\": [\n        \"string numfmt_get_pattern( NumberFormatter $nf )\",\n        \"* Get formatter pattern.\"\n    ],\n    \"numfmt_get_symbol\": [\n        \"string numfmt_get_symbol( NumberFormatter $nf, int $attr )\",\n        \"* Get formatter symbol value.\"\n    ],\n    \"numfmt_get_text_attribute\": [\n        \"string numfmt_get_text_attribute( NumberFormatter $nf, int $attr )\",\n        \"* Get formatter attribute value.\"\n    ],\n    \"numfmt_parse\": [\n        \"mixed numfmt_parse( NumberFormatter $nf, string $str[, int $type, int &$position ])\",\n        \"* Parse a number.\"\n    ],\n    \"numfmt_parse_currency\": [\n        \"double numfmt_parse_currency( NumberFormatter $nf, string $str, string $&currency[, int $&position] )\",\n        \"* Parse a number as currency.\"\n    ],\n    \"numfmt_parse_message\": [\n        \"array numfmt_parse_message( string $locale, string $pattern, string $source )\",\n        \"* Parse a message.\"\n    ],\n    \"numfmt_set_attribute\": [\n        \"bool numfmt_set_attribute( NumberFormatter $nf, int $attr, mixed $value )\",\n        \"* Get formatter attribute value.\"\n    ],\n    \"numfmt_set_pattern\": [\n        \"bool numfmt_set_pattern( NumberFormatter $nf, string $pattern )\",\n        \"* Set formatter pattern.\"\n    ],\n    \"numfmt_set_symbol\": [\n        \"bool numfmt_set_symbol( NumberFormatter $nf, int $attr, string $symbol )\",\n        \"* Set formatter symbol value.\"\n    ],\n    \"numfmt_set_text_attribute\": [\n        \"bool numfmt_set_text_attribute( NumberFormatter $nf, int $attr, string $value )\",\n        \"* Get formatter attribute value.\"\n    ],\n    \"ob_clean\": [\n        \"bool ob_clean(void)\",\n        \"Clean (delete) the current output buffer\"\n    ],\n    \"ob_end_clean\": [\n        \"bool ob_end_clean(void)\",\n        \"Clean the output buffer, and delete current output buffer\"\n    ],\n    \"ob_end_flush\": [\n        \"bool ob_end_flush(void)\",\n        \"Flush (send) the output buffer, and delete current output buffer\"\n    ],\n    \"ob_flush\": [\n        \"bool ob_flush(void)\",\n        \"Flush (send) contents of the output buffer. The last buffer content is sent to next buffer\"\n    ],\n    \"ob_get_clean\": [\n        \"bool ob_get_clean(void)\",\n        \"Get current buffer contents and delete current output buffer\"\n    ],\n    \"ob_get_contents\": [\n        \"string ob_get_contents(void)\",\n        \"Return the contents of the output buffer\"\n    ],\n    \"ob_get_flush\": [\n        \"bool ob_get_flush(void)\",\n        \"Get current buffer contents, flush (send) the output buffer, and delete current output buffer\"\n    ],\n    \"ob_get_length\": [\n        \"int ob_get_length(void)\",\n        \"Return the length of the output buffer\"\n    ],\n    \"ob_get_level\": [\n        \"int ob_get_level(void)\",\n        \"Return the nesting level of the output buffer\"\n    ],\n    \"ob_get_status\": [\n        \"false|array ob_get_status([bool full_status])\",\n        \"Return the status of the active or all output buffers\"\n    ],\n    \"ob_gzhandler\": [\n        \"string ob_gzhandler(string str, int mode)\",\n        \"Encode str based on accept-encoding setting - designed to be called from ob_start()\"\n    ],\n    \"ob_iconv_handler\": [\n        \"string ob_iconv_handler(string contents, int status)\",\n        \"Returns str in output buffer converted to the iconv.output_encoding character set\"\n    ],\n    \"ob_implicit_flush\": [\n        \"void ob_implicit_flush([int flag])\",\n        \"Turn implicit flush on/off and is equivalent to calling flush() after every output call\"\n    ],\n    \"ob_list_handlers\": [\n        \"false|array ob_list_handlers()\",\n        \"*  List all output_buffers in an array\"\n    ],\n    \"ob_start\": [\n        \"bool ob_start([ string|array user_function [, int chunk_size [, bool erase]]])\",\n        \"Turn on Output Buffering (specifying an optional output handler).\"\n    ],\n    \"oci_bind_array_by_name\": [\n        \"bool oci_bind_array_by_name(resource stmt, string name, array &var, int max_table_length [, int max_item_length [, int type ]])\",\n        \"Bind a PHP array to an Oracle PL/SQL type by name\"\n    ],\n    \"oci_bind_by_name\": [\n        \"bool oci_bind_by_name(resource stmt, string name, mixed &var, [, int maxlength [, int type]])\",\n        \"Bind a PHP variable to an Oracle placeholder by name\"\n    ],\n    \"oci_cancel\": [\n        \"bool oci_cancel(resource stmt)\",\n        \"Cancel reading from a cursor\"\n    ],\n    \"oci_close\": [\n        \"bool oci_close(resource connection)\",\n        \"Disconnect from database\"\n    ],\n    \"oci_collection_append\": [\n        \"bool oci_collection_append(string value)\",\n        \"Append an object to the collection\"\n    ],\n    \"oci_collection_assign\": [\n        \"bool oci_collection_assign(object from)\",\n        \"Assign a collection from another existing collection\"\n    ],\n    \"oci_collection_element_assign\": [\n        \"bool oci_collection_element_assign(int index, string val)\",\n        \"Assign element val to collection at index ndx\"\n    ],\n    \"oci_collection_element_get\": [\n        \"string oci_collection_element_get(int ndx)\",\n        \"Retrieve the value at collection index ndx\"\n    ],\n    \"oci_collection_max\": [\n        \"int oci_collection_max()\",\n        \"Return the max value of a collection. For a varray this is the maximum length of the array\"\n    ],\n    \"oci_collection_size\": [\n        \"int oci_collection_size()\",\n        \"Return the size of a collection\"\n    ],\n    \"oci_collection_trim\": [\n        \"bool oci_collection_trim(int num)\",\n        \"Trim num elements from the end of a collection\"\n    ],\n    \"oci_commit\": [\n        \"bool oci_commit(resource connection)\",\n        \"Commit the current context\"\n    ],\n    \"oci_connect\": [\n        \"resource oci_connect(string user, string pass [, string db [, string charset [, int session_mode ]])\",\n        \"Connect to an Oracle database and log on. Returns a new session.\"\n    ],\n    \"oci_define_by_name\": [\n        \"bool oci_define_by_name(resource stmt, string name, mixed &var [, int type])\",\n        \"Define a PHP variable to an Oracle column by name\"\n    ],\n    \"oci_error\": [\n        \"array oci_error([resource stmt|connection|global])\",\n        \"Return the last error of stmt|connection|global. If no error happened returns false.\"\n    ],\n    \"oci_execute\": [\n        \"bool oci_execute(resource stmt [, int mode])\",\n        \"Execute a parsed statement\"\n    ],\n    \"oci_fetch\": [\n        \"bool oci_fetch(resource stmt)\",\n        \"Prepare a new row of data for reading\"\n    ],\n    \"oci_fetch_all\": [\n        \"int oci_fetch_all(resource stmt, array &output[, int skip[, int maxrows[, int flags]]])\",\n        \"Fetch all rows of result data into an array\"\n    ],\n    \"oci_fetch_array\": [\n        \"array oci_fetch_array( resource stmt [, int mode ])\",\n        \"Fetch a result row as an array\"\n    ],\n    \"oci_fetch_assoc\": [\n        \"array oci_fetch_assoc( resource stmt )\",\n        \"Fetch a result row as an associative array\"\n    ],\n    \"oci_fetch_object\": [\n        \"object oci_fetch_object( resource stmt )\",\n        \"Fetch a result row as an object\"\n    ],\n    \"oci_fetch_row\": [\n        \"array oci_fetch_row( resource stmt )\",\n        \"Fetch a result row as an enumerated array\"\n    ],\n    \"oci_field_is_null\": [\n        \"bool oci_field_is_null(resource stmt, int col)\",\n        \"Tell whether a column is NULL\"\n    ],\n    \"oci_field_name\": [\n        \"string oci_field_name(resource stmt, int col)\",\n        \"Tell the name of a column\"\n    ],\n    \"oci_field_precision\": [\n        \"int oci_field_precision(resource stmt, int col)\",\n        \"Tell the precision of a column\"\n    ],\n    \"oci_field_scale\": [\n        \"int oci_field_scale(resource stmt, int col)\",\n        \"Tell the scale of a column\"\n    ],\n    \"oci_field_size\": [\n        \"int oci_field_size(resource stmt, int col)\",\n        \"Tell the maximum data size of a column\"\n    ],\n    \"oci_field_type\": [\n        \"mixed oci_field_type(resource stmt, int col)\",\n        \"Tell the data type of a column\"\n    ],\n    \"oci_field_type_raw\": [\n        \"int oci_field_type_raw(resource stmt, int col)\",\n        \"Tell the raw oracle data type of a column\"\n    ],\n    \"oci_free_collection\": [\n        \"bool oci_free_collection()\",\n        \"Deletes collection object\"\n    ],\n    \"oci_free_descriptor\": [\n        \"bool oci_free_descriptor()\",\n        \"Deletes large object description\"\n    ],\n    \"oci_free_statement\": [\n        \"bool oci_free_statement(resource stmt)\",\n        \"Free all resources associated with a statement\"\n    ],\n    \"oci_internal_debug\": [\n        \"void oci_internal_debug(int onoff)\",\n        \"Toggle internal debugging output for the OCI extension\"\n    ],\n    \"oci_lob_append\": [\n        \"bool oci_lob_append( object lob )\",\n        \"Appends data from a LOB to another LOB\"\n    ],\n    \"oci_lob_close\": [\n        \"bool oci_lob_close()\",\n        \"Closes lob descriptor\"\n    ],\n    \"oci_lob_copy\": [\n        \"bool oci_lob_copy( object lob_to, object lob_from [, int length ] )\",\n        \"Copies data from a LOB to another LOB\"\n    ],\n    \"oci_lob_eof\": [\n        \"bool oci_lob_eof()\",\n        \"Checks if EOF is reached\"\n    ],\n    \"oci_lob_erase\": [\n        \"int oci_lob_erase( [ int offset [, int length ] ] )\",\n        \"Erases a specified portion of the internal LOB, starting at a specified offset\"\n    ],\n    \"oci_lob_export\": [\n        \"bool oci_lob_export([string filename [, int start [, int length]]])\",\n        \"Writes a large object into a file\"\n    ],\n    \"oci_lob_flush\": [\n        \"bool oci_lob_flush( [ int flag ] )\",\n        \"Flushes the LOB buffer\"\n    ],\n    \"oci_lob_import\": [\n        \"bool oci_lob_import( string filename )\",\n        \"Loads file into a LOB\"\n    ],\n    \"oci_lob_is_equal\": [\n        \"bool oci_lob_is_equal( object lob1, object lob2 )\",\n        \"Tests to see if two LOB/FILE locators are equal\"\n    ],\n    \"oci_lob_load\": [\n        \"string oci_lob_load()\",\n        \"Loads a large object\"\n    ],\n    \"oci_lob_read\": [\n        \"string oci_lob_read( int length )\",\n        \"Reads particular part of a large object\"\n    ],\n    \"oci_lob_rewind\": [\n        \"bool oci_lob_rewind()\",\n        \"Rewind pointer of a LOB\"\n    ],\n    \"oci_lob_save\": [\n        \"bool oci_lob_save( string data [, int offset ])\",\n        \"Saves a large object\"\n    ],\n    \"oci_lob_seek\": [\n        \"bool oci_lob_seek( int offset [, int whence ])\",\n        \"Moves the pointer of a LOB\"\n    ],\n    \"oci_lob_size\": [\n        \"int oci_lob_size()\",\n        \"Returns size of a large object\"\n    ],\n    \"oci_lob_tell\": [\n        \"int oci_lob_tell()\",\n        \"Tells LOB pointer position\"\n    ],\n    \"oci_lob_truncate\": [\n        \"bool oci_lob_truncate( [ int length ])\",\n        \"Truncates a LOB\"\n    ],\n    \"oci_lob_write\": [\n        \"int oci_lob_write( string string [, int length ])\",\n        \"Writes data to current position of a LOB\"\n    ],\n    \"oci_lob_write_temporary\": [\n        \"bool oci_lob_write_temporary(string var [, int lob_type])\",\n        \"Writes temporary blob\"\n    ],\n    \"oci_new_collection\": [\n        \"object oci_new_collection(resource connection, string tdo [, string schema])\",\n        \"Initialize a new collection\"\n    ],\n    \"oci_new_connect\": [\n        \"resource oci_new_connect(string user, string pass [, string db])\",\n        \"Connect to an Oracle database and log on. Returns a new session.\"\n    ],\n    \"oci_new_cursor\": [\n        \"resource oci_new_cursor(resource connection)\",\n        \"Return a new cursor (Statement-Handle) - use this to bind ref-cursors!\"\n    ],\n    \"oci_new_descriptor\": [\n        \"object oci_new_descriptor(resource connection [, int type])\",\n        \"Initialize a new empty descriptor LOB/FILE (LOB is default)\"\n    ],\n    \"oci_num_fields\": [\n        \"int oci_num_fields(resource stmt)\",\n        \"Return the number of result columns in a statement\"\n    ],\n    \"oci_num_rows\": [\n        \"int oci_num_rows(resource stmt)\",\n        \"Return the row count of an OCI statement\"\n    ],\n    \"oci_parse\": [\n        \"resource oci_parse(resource connection, string query)\",\n        \"Parse a query and return a statement\"\n    ],\n    \"oci_password_change\": [\n        \"bool oci_password_change(resource connection, string username, string old_password, string new_password)\",\n        \"Changes the password of an account\"\n    ],\n    \"oci_pconnect\": [\n        \"resource oci_pconnect(string user, string pass [, string db [, string charset ]])\",\n        \"Connect to an Oracle database using a persistent connection and log on. Returns a new session.\"\n    ],\n    \"oci_result\": [\n        \"string oci_result(resource stmt, mixed column)\",\n        \"Return a single column of result data\"\n    ],\n    \"oci_rollback\": [\n        \"bool oci_rollback(resource connection)\",\n        \"Rollback the current context\"\n    ],\n    \"oci_server_version\": [\n        \"string oci_server_version(resource connection)\",\n        \"Return a string containing server version information\"\n    ],\n    \"oci_set_action\": [\n        \"bool oci_set_action(resource connection, string value)\",\n        \"Sets the action attribute on the connection\"\n    ],\n    \"oci_set_client_identifier\": [\n        \"bool oci_set_client_identifier(resource connection, string value)\",\n        \"Sets the client identifier attribute on the connection\"\n    ],\n    \"oci_set_client_info\": [\n        \"bool oci_set_client_info(resource connection, string value)\",\n        \"Sets the client info attribute on the connection\"\n    ],\n    \"oci_set_edition\": [\n        \"bool oci_set_edition(string value)\",\n        \"Sets the edition attribute for all subsequent connections created\"\n    ],\n    \"oci_set_module_name\": [\n        \"bool oci_set_module_name(resource connection, string value)\",\n        \"Sets the module attribute on the connection\"\n    ],\n    \"oci_set_prefetch\": [\n        \"bool oci_set_prefetch(resource stmt, int prefetch_rows)\",\n        \"Sets the number of rows to be prefetched on execute to prefetch_rows for stmt\"\n    ],\n    \"oci_statement_type\": [\n        \"string oci_statement_type(resource stmt)\",\n        \"Return the query type of an OCI statement\"\n    ],\n    \"ocifetchinto\": [\n        \"int ocifetchinto(resource stmt, array &output [, int mode])\",\n        \"Fetch a row of result data into an array\"\n    ],\n    \"ocigetbufferinglob\": [\n        \"bool ocigetbufferinglob()\",\n        \"Returns current state of buffering for a LOB\"\n    ],\n    \"ocisetbufferinglob\": [\n        \"bool ocisetbufferinglob( boolean flag )\",\n        \"Enables/disables buffering for a LOB\"\n    ],\n    \"octdec\": [\n        \"int octdec(string octal_number)\",\n        \"Returns the decimal equivalent of an octal string\"\n    ],\n    \"odbc_autocommit\": [\n        \"mixed odbc_autocommit(resource connection_id [, int OnOff])\",\n        \"Toggle autocommit mode or get status\"\n    ],\n    \"odbc_binmode\": [\n        \"bool odbc_binmode(int result_id, int mode)\",\n        \"Handle binary column data\"\n    ],\n    \"odbc_close\": [\n        \"void odbc_close(resource connection_id)\",\n        \"Close an ODBC connection\"\n    ],\n    \"odbc_close_all\": [\n        \"void odbc_close_all(void)\",\n        \"Close all ODBC connections\"\n    ],\n    \"odbc_columnprivileges\": [\n        \"resource odbc_columnprivileges(resource connection_id, string catalog, string schema, string table, string column)\",\n        \"Returns a result identifier that can be used to fetch a list of columns and associated privileges for the specified table\"\n    ],\n    \"odbc_columns\": [\n        \"resource odbc_columns(resource connection_id [, string qualifier [, string owner [, string table_name [, string column_name]]]])\",\n        \"Returns a result identifier that can be used to fetch a list of column names in specified tables\"\n    ],\n    \"odbc_commit\": [\n        \"bool odbc_commit(resource connection_id)\",\n        \"Commit an ODBC transaction\"\n    ],\n    \"odbc_connect\": [\n        \"resource odbc_connect(string DSN, string user, string password [, int cursor_option])\",\n        \"Connect to a datasource\"\n    ],\n    \"odbc_cursor\": [\n        \"string odbc_cursor(resource result_id)\",\n        \"Get cursor name\"\n    ],\n    \"odbc_data_source\": [\n        \"array odbc_data_source(resource connection_id, int fetch_type)\",\n        \"Return information about the currently connected data source\"\n    ],\n    \"odbc_error\": [\n        \"string odbc_error([resource connection_id])\",\n        \"Get the last error code\"\n    ],\n    \"odbc_errormsg\": [\n        \"string odbc_errormsg([resource connection_id])\",\n        \"Get the last error message\"\n    ],\n    \"odbc_exec\": [\n        \"resource odbc_exec(resource connection_id, string query [, int flags])\",\n        \"Prepare and execute an SQL statement\"\n    ],\n    \"odbc_execute\": [\n        \"bool odbc_execute(resource result_id [, array parameters_array])\",\n        \"Execute a prepared statement\"\n    ],\n    \"odbc_fetch_array\": [\n        \"array odbc_fetch_array(int result [, int rownumber])\",\n        \"Fetch a result row as an associative array\"\n    ],\n    \"odbc_fetch_into\": [\n        \"int odbc_fetch_into(resource result_id, array &result_array, [, int rownumber])\",\n        \"Fetch one result row into an array\"\n    ],\n    \"odbc_fetch_object\": [\n        \"object odbc_fetch_object(int result [, int rownumber])\",\n        \"Fetch a result row as an object\"\n    ],\n    \"odbc_fetch_row\": [\n        \"bool odbc_fetch_row(resource result_id [, int row_number])\",\n        \"Fetch a row\"\n    ],\n    \"odbc_field_len\": [\n        \"int odbc_field_len(resource result_id, int field_number)\",\n        \"Get the length (precision) of a column\"\n    ],\n    \"odbc_field_name\": [\n        \"string odbc_field_name(resource result_id, int field_number)\",\n        \"Get a column name\"\n    ],\n    \"odbc_field_num\": [\n        \"int odbc_field_num(resource result_id, string field_name)\",\n        \"Return column number\"\n    ],\n    \"odbc_field_scale\": [\n        \"int odbc_field_scale(resource result_id, int field_number)\",\n        \"Get the scale of a column\"\n    ],\n    \"odbc_field_type\": [\n        \"string odbc_field_type(resource result_id, int field_number)\",\n        \"Get the datatype of a column\"\n    ],\n    \"odbc_foreignkeys\": [\n        \"resource odbc_foreignkeys(resource connection_id, string pk_qualifier, string pk_owner, string pk_table, string fk_qualifier, string fk_owner, string fk_table)\",\n        \"Returns a result identifier to either a list of foreign keys in the specified table or a list of foreign keys in other tables that refer to the primary key in the specified table\"\n    ],\n    \"odbc_free_result\": [\n        \"bool odbc_free_result(resource result_id)\",\n        \"Free resources associated with a result\"\n    ],\n    \"odbc_gettypeinfo\": [\n        \"resource odbc_gettypeinfo(resource connection_id [, int data_type])\",\n        \"Returns a result identifier containing information about data types supported by the data source\"\n    ],\n    \"odbc_longreadlen\": [\n        \"bool odbc_longreadlen(int result_id, int length)\",\n        \"Handle LONG columns\"\n    ],\n    \"odbc_next_result\": [\n        \"bool odbc_next_result(resource result_id)\",\n        \"Checks if multiple results are avaiable\"\n    ],\n    \"odbc_num_fields\": [\n        \"int odbc_num_fields(resource result_id)\",\n        \"Get number of columns in a result\"\n    ],\n    \"odbc_num_rows\": [\n        \"int odbc_num_rows(resource result_id)\",\n        \"Get number of rows in a result\"\n    ],\n    \"odbc_pconnect\": [\n        \"resource odbc_pconnect(string DSN, string user, string password [, int cursor_option])\",\n        \"Establish a persistent connection to a datasource\"\n    ],\n    \"odbc_prepare\": [\n        \"resource odbc_prepare(resource connection_id, string query)\",\n        \"Prepares a statement for execution\"\n    ],\n    \"odbc_primarykeys\": [\n        \"resource odbc_primarykeys(resource connection_id, string qualifier, string owner, string table)\",\n        \"Returns a result identifier listing the column names that comprise the primary key for a table\"\n    ],\n    \"odbc_procedurecolumns\": [\n        \"resource odbc_procedurecolumns(resource connection_id [, string qualifier, string owner, string proc, string column])\",\n        \"Returns a result identifier containing the list of input and output parameters, as well as the columns that make up the result set for the specified procedures\"\n    ],\n    \"odbc_procedures\": [\n        \"resource odbc_procedures(resource connection_id [, string qualifier, string owner, string name])\",\n        \"Returns a result identifier containg the list of procedure names in a datasource\"\n    ],\n    \"odbc_result\": [\n        \"mixed odbc_result(resource result_id, mixed field)\",\n        \"Get result data\"\n    ],\n    \"odbc_result_all\": [\n        \"int odbc_result_all(resource result_id [, string format])\",\n        \"Print result as HTML table\"\n    ],\n    \"odbc_rollback\": [\n        \"bool odbc_rollback(resource connection_id)\",\n        \"Rollback a transaction\"\n    ],\n    \"odbc_setoption\": [\n        \"bool odbc_setoption(resource conn_id|result_id, int which, int option, int value)\",\n        \"Sets connection or statement options\"\n    ],\n    \"odbc_specialcolumns\": [\n        \"resource odbc_specialcolumns(resource connection_id, int type, string qualifier, string owner, string table, int scope, int nullable)\",\n        \"Returns a result identifier containing either the optimal set of columns that uniquely identifies a row in the table or columns that are automatically updated when any value in the row is updated by a transaction\"\n    ],\n    \"odbc_statistics\": [\n        \"resource odbc_statistics(resource connection_id, string qualifier, string owner, string name, int unique, int accuracy)\",\n        \"Returns a result identifier that contains statistics about a single table and the indexes associated with the table\"\n    ],\n    \"odbc_tableprivileges\": [\n        \"resource odbc_tableprivileges(resource connection_id, string qualifier, string owner, string name)\",\n        \"Returns a result identifier containing a list of tables and the privileges associated with each table\"\n    ],\n    \"odbc_tables\": [\n        \"resource odbc_tables(resource connection_id [, string qualifier [, string owner [, string name [, string table_types]]]])\",\n        \"Call the SQLTables function\"\n    ],\n    \"opendir\": [\n        \"mixed opendir(string path[, resource context])\",\n        \"Open a directory and return a dir_handle\"\n    ],\n    \"openlog\": [\n        \"bool openlog(string ident, int option, int facility)\",\n        \"Open connection to system logger\"\n    ],\n    \"openssl_csr_export\": [\n        \"bool openssl_csr_export(resource csr, string &out [, bool notext=true])\",\n        \"Exports a CSR to file or a var\"\n    ],\n    \"openssl_csr_export_to_file\": [\n        \"bool openssl_csr_export_to_file(resource csr, string outfilename [, bool notext=true])\",\n        \"Exports a CSR to file\"\n    ],\n    \"openssl_csr_get_public_key\": [\n        \"mixed openssl_csr_get_public_key(mixed csr)\",\n        \"Returns the subject of a CERT or FALSE on error\"\n    ],\n    \"openssl_csr_get_subject\": [\n        \"mixed openssl_csr_get_subject(mixed csr)\",\n        \"Returns the subject of a CERT or FALSE on error\"\n    ],\n    \"openssl_csr_new\": [\n        \"bool openssl_csr_new(array dn, resource &privkey [, array configargs [, array extraattribs]])\",\n        \"Generates a privkey and CSR\"\n    ],\n    \"openssl_csr_sign\": [\n        \"resource openssl_csr_sign(mixed csr, mixed x509, mixed priv_key, long days [, array config_args [, long serial]])\",\n        \"Signs a cert with another CERT\"\n    ],\n    \"openssl_decrypt\": [\n        \"string openssl_decrypt(string data, string method, string password [, bool raw_input=false])\",\n        \"Takes raw or base64 encoded string and dectupt it using given method and key\"\n    ],\n    \"openssl_dh_compute_key\": [\n        \"string openssl_dh_compute_key(string pub_key, resource dh_key)\",\n        \"Computes shared sicret for public value of remote DH key and local DH key\"\n    ],\n    \"openssl_digest\": [\n        \"string openssl_digest(string data, string method [, bool raw_output=false])\",\n        \"Computes digest hash value for given data using given method, returns raw or binhex encoded string\"\n    ],\n    \"openssl_encrypt\": [\n        \"string openssl_encrypt(string data, string method, string password [, bool raw_output=false])\",\n        \"Encrypts given data with given method and key, returns raw or base64 encoded string\"\n    ],\n    \"openssl_error_string\": [\n        \"mixed openssl_error_string(void)\",\n        \"Returns a description of the last error, and alters the index of the error messages. Returns false when the are no more messages\"\n    ],\n    \"openssl_get_cipher_methods\": [\n        \"array openssl_get_cipher_methods([bool aliases = false])\",\n        \"Return array of available cipher methods\"\n    ],\n    \"openssl_get_md_methods\": [\n        \"array openssl_get_md_methods([bool aliases = false])\",\n        \"Return array of available digest methods\"\n    ],\n    \"openssl_open\": [\n        \"bool openssl_open(string data, &string opendata, string ekey, mixed privkey)\",\n        \"Opens data\"\n    ],\n    \"openssl_pkcs12_export\": [\n        \"bool openssl_pkcs12_export(mixed x509, string &out, mixed priv_key, string pass[, array args])\",\n        \"Creates and exports a PKCS12 to a var\"\n    ],\n    \"openssl_pkcs12_export_to_file\": [\n        \"bool openssl_pkcs12_export_to_file(mixed x509, string filename, mixed priv_key, string pass[, array args])\",\n        \"Creates and exports a PKCS to file\"\n    ],\n    \"openssl_pkcs12_read\": [\n        \"bool openssl_pkcs12_read(string PKCS12, array &certs, string pass)\",\n        \"Parses a PKCS12 to an array\"\n    ],\n    \"openssl_pkcs7_decrypt\": [\n        \"bool openssl_pkcs7_decrypt(string infilename, string outfilename, mixed recipcert [, mixed recipkey])\",\n        \"Decrypts the S/MIME message in the file name infilename and output the results to the file name outfilename.  recipcert is a CERT for one of the recipients. recipkey specifies the private key matching recipcert, if recipcert does not include the key\"\n    ],\n    \"openssl_pkcs7_encrypt\": [\n        \"bool openssl_pkcs7_encrypt(string infile, string outfile, mixed recipcerts, array headers [, long flags [, long cipher]])\",\n        \"Encrypts the message in the file named infile with the certificates in recipcerts and output the result to the file named outfile\"\n    ],\n    \"openssl_pkcs7_sign\": [\n        \"bool openssl_pkcs7_sign(string infile, string outfile, mixed signcert, mixed signkey, array headers [, long flags [, string extracertsfilename]])\",\n        \"Signs the MIME message in the file named infile with signcert/signkey and output the result to file name outfile. headers lists plain text headers to exclude from the signed portion of the message, and should include to, from and subject as a minimum\"\n    ],\n    \"openssl_pkcs7_verify\": [\n        \"bool openssl_pkcs7_verify(string filename, long flags [, string signerscerts [, array cainfo [, string extracerts [, string content]]]])\",\n        \"Verifys that the data block is intact, the signer is who they say they are, and returns the CERTs of the signers\"\n    ],\n    \"openssl_pkey_export\": [\n        \"bool openssl_pkey_export(mixed key, &mixed out [, string passphrase [, array config_args]])\",\n        \"Gets an exportable representation of a key into a string or file\"\n    ],\n    \"openssl_pkey_export_to_file\": [\n        \"bool openssl_pkey_export_to_file(mixed key, string outfilename [, string passphrase, array config_args)\",\n        \"Gets an exportable representation of a key into a file\"\n    ],\n    \"openssl_pkey_free\": [\n        \"void openssl_pkey_free(int key)\",\n        \"Frees a key\"\n    ],\n    \"openssl_pkey_get_details\": [\n        \"resource openssl_pkey_get_details(resource key)\",\n        \"returns an array with the key details (bits, pkey, type)\"\n    ],\n    \"openssl_pkey_get_private\": [\n        \"int openssl_pkey_get_private(string key [, string passphrase])\",\n        \"Gets private keys\"\n    ],\n    \"openssl_pkey_get_public\": [\n        \"int openssl_pkey_get_public(mixed cert)\",\n        \"Gets public key from X.509 certificate\"\n    ],\n    \"openssl_pkey_new\": [\n        \"resource openssl_pkey_new([array configargs])\",\n        \"Generates a new private key\"\n    ],\n    \"openssl_private_decrypt\": [\n        \"bool openssl_private_decrypt(string data, string &decrypted, mixed key [, int padding])\",\n        \"Decrypts data with private key\"\n    ],\n    \"openssl_private_encrypt\": [\n        \"bool openssl_private_encrypt(string data, string &crypted, mixed key [, int padding])\",\n        \"Encrypts data with private key\"\n    ],\n    \"openssl_public_decrypt\": [\n        \"bool openssl_public_decrypt(string data, string &crypted, resource key [, int padding])\",\n        \"Decrypts data with public key\"\n    ],\n    \"openssl_public_encrypt\": [\n        \"bool openssl_public_encrypt(string data, string &crypted, mixed key [, int padding])\",\n        \"Encrypts data with public key\"\n    ],\n    \"openssl_random_pseudo_bytes\": [\n        \"string openssl_random_pseudo_bytes(integer length [, &bool returned_strong_result])\",\n        \"Returns a string of the length specified filled with random pseudo bytes\"\n    ],\n    \"openssl_seal\": [\n        \"int openssl_seal(string data, &string sealdata, &array ekeys, array pubkeys)\",\n        \"Seals data\"\n    ],\n    \"openssl_sign\": [\n        \"bool openssl_sign(string data, &string signature, mixed key[, mixed method])\",\n        \"Signs data\"\n    ],\n    \"openssl_verify\": [\n        \"int openssl_verify(string data, string signature, mixed key[, mixed method])\",\n        \"Verifys data\"\n    ],\n    \"openssl_x509_check_private_key\": [\n        \"bool openssl_x509_check_private_key(mixed cert, mixed key)\",\n        \"Checks if a private key corresponds to a CERT\"\n    ],\n    \"openssl_x509_checkpurpose\": [\n        \"int openssl_x509_checkpurpose(mixed x509cert, int purpose, array cainfo [, string untrustedfile])\",\n        \"Checks the CERT to see if it can be used for the purpose in purpose. cainfo holds information about trusted CAs\"\n    ],\n    \"openssl_x509_export\": [\n        \"bool openssl_x509_export(mixed x509, string &out [, bool notext = true])\",\n        \"Exports a CERT to file or a var\"\n    ],\n    \"openssl_x509_export_to_file\": [\n        \"bool openssl_x509_export_to_file(mixed x509, string outfilename [, bool notext = true])\",\n        \"Exports a CERT to file or a var\"\n    ],\n    \"openssl_x509_free\": [\n        \"void openssl_x509_free(resource x509)\",\n        \"Frees X.509 certificates\"\n    ],\n    \"openssl_x509_parse\": [\n        \"array openssl_x509_parse(mixed x509 [, bool shortnames=true])\",\n        \"Returns an array of the fields/values of the CERT\"\n    ],\n    \"openssl_x509_read\": [\n        \"resource openssl_x509_read(mixed cert)\",\n        \"Reads X.509 certificates\"\n    ],\n    \"ord\": [\n        \"int ord(string character)\",\n        \"Returns ASCII value of character\"\n    ],\n    \"output_add_rewrite_var\": [\n        \"bool output_add_rewrite_var(string name, string value)\",\n        \"Add URL rewriter values\"\n    ],\n    \"output_reset_rewrite_vars\": [\n        \"bool output_reset_rewrite_vars(void)\",\n        \"Reset(clear) URL rewriter values\"\n    ],\n    \"pack\": [\n        \"string pack(string format, mixed arg1 [, mixed arg2 [, mixed ...]])\",\n        \"Takes one or more arguments and packs them into a binary string according to the format argument\"\n    ],\n    \"parse_ini_file\": [\n        \"array parse_ini_file(string filename [, bool process_sections [, int scanner_mode]])\",\n        \"Parse configuration file\"\n    ],\n    \"parse_ini_string\": [\n        \"array parse_ini_string(string ini_string [, bool process_sections [, int scanner_mode]])\",\n        \"Parse configuration string\"\n    ],\n    \"parse_locale\": [\n        \"static array parse_locale($locale)\",\n        \"* parses a locale-id into an array the different parts of it\"\n    ],\n    \"parse_str\": [\n        \"void parse_str(string encoded_string [, array result])\",\n        \"Parses GET/POST/COOKIE data and sets global variables\"\n    ],\n    \"parse_url\": [\n        \"mixed parse_url(string url, [int url_component])\",\n        \"Parse a URL and return its components\"\n    ],\n    \"passthru\": [\n        \"void passthru(string command [, int &return_value])\",\n        \"Execute an external program and display raw output\"\n    ],\n    \"pathinfo\": [\n        \"array pathinfo(string path[, int options])\",\n        \"Returns information about a certain string\"\n    ],\n    \"pclose\": [\n        \"int pclose(resource fp)\",\n        \"Close a file pointer opened by popen()\"\n    ],\n    \"pcnlt_sigwaitinfo\": [\n        \"int pcnlt_sigwaitinfo(array set[, array &siginfo])\",\n        \"Synchronously wait for queued signals\"\n    ],\n    \"pcntl_alarm\": [\n        \"int pcntl_alarm(int seconds)\",\n        \"Set an alarm clock for delivery of a signal\"\n    ],\n    \"pcntl_exec\": [\n        \"bool pcntl_exec(string path [, array args [, array envs]])\",\n        \"Executes specified program in current process space as defined by exec(2)\"\n    ],\n    \"pcntl_fork\": [\n        \"int pcntl_fork(void)\",\n        \"Forks the currently running process following the same behavior as the UNIX fork() system call\"\n    ],\n    \"pcntl_getpriority\": [\n        \"int pcntl_getpriority([int pid [, int process_identifier]])\",\n        \"Get the priority of any process\"\n    ],\n    \"pcntl_setpriority\": [\n        \"bool pcntl_setpriority(int priority [, int pid [, int process_identifier]])\",\n        \"Change the priority of any process\"\n    ],\n    \"pcntl_signal\": [\n        \"bool pcntl_signal(int signo, callback handle [, bool restart_syscalls])\",\n        \"Assigns a system signal handler to a PHP function\"\n    ],\n    \"pcntl_signal_dispatch\": [\n        \"bool pcntl_signal_dispatch()\",\n        \"Dispatch signals to signal handlers\"\n    ],\n    \"pcntl_sigprocmask\": [\n        \"bool pcntl_sigprocmask(int how, array set[, array &oldset])\",\n        \"Examine and change blocked signals\"\n    ],\n    \"pcntl_sigtimedwait\": [\n        \"int pcntl_sigtimedwait(array set[, array &siginfo[, int seconds[, int nanoseconds]]])\",\n        \"Wait for queued signals\"\n    ],\n    \"pcntl_wait\": [\n        \"int pcntl_wait(int &status)\",\n        \"Waits on or returns the status of a forked child as defined by the waitpid() system call\"\n    ],\n    \"pcntl_waitpid\": [\n        \"int pcntl_waitpid(int pid, int &status, int options)\",\n        \"Waits on or returns the status of a forked child as defined by the waitpid() system call\"\n    ],\n    \"pcntl_wexitstatus\": [\n        \"int pcntl_wexitstatus(int status)\",\n        \"Returns the status code of a child's exit\"\n    ],\n    \"pcntl_wifexited\": [\n        \"bool pcntl_wifexited(int status)\",\n        \"Returns true if the child status code represents a successful exit\"\n    ],\n    \"pcntl_wifsignaled\": [\n        \"bool pcntl_wifsignaled(int status)\",\n        \"Returns true if the child status code represents a process that was terminated due to a signal\"\n    ],\n    \"pcntl_wifstopped\": [\n        \"bool pcntl_wifstopped(int status)\",\n        \"Returns true if the child status code represents a stopped process (WUNTRACED must have been used with waitpid)\"\n    ],\n    \"pcntl_wstopsig\": [\n        \"int pcntl_wstopsig(int status)\",\n        \"Returns the number of the signal that caused the process to stop who's status code is passed\"\n    ],\n    \"pcntl_wtermsig\": [\n        \"int pcntl_wtermsig(int status)\",\n        \"Returns the number of the signal that terminated the process who's status code is passed\"\n    ],\n    \"pdo_drivers\": [\n        \"array pdo_drivers()\",\n        \"Return array of available PDO drivers\"\n    ],\n    \"pfsockopen\": [\n        \"resource pfsockopen(string hostname, int port [, int errno [, string errstr [, float timeout]]])\",\n        \"Open persistent Internet or Unix domain socket connection\"\n    ],\n    \"pg_affected_rows\": [\n        \"int pg_affected_rows(resource result)\",\n        \"Returns the number of affected tuples\"\n    ],\n    \"pg_cancel_query\": [\n        \"bool pg_cancel_query(resource connection)\",\n        \"Cancel request\"\n    ],\n    \"pg_client_encoding\": [\n        \"string pg_client_encoding([resource connection])\",\n        \"Get the current client encoding\"\n    ],\n    \"pg_close\": [\n        \"bool pg_close([resource connection])\",\n        \"Close a PostgreSQL connection\"\n    ],\n    \"pg_connect\": [\n        \"resource pg_connect(string connection_string[, int connect_type] | [string host, string port [, string options [, string tty,]]] string database)\",\n        \"Open a PostgreSQL connection\"\n    ],\n    \"pg_connection_busy\": [\n        \"bool pg_connection_busy(resource connection)\",\n        \"Get connection is busy or not\"\n    ],\n    \"pg_connection_reset\": [\n        \"bool pg_connection_reset(resource connection)\",\n        \"Reset connection (reconnect)\"\n    ],\n    \"pg_connection_status\": [\n        \"int pg_connection_status(resource connnection)\",\n        \"Get connection status\"\n    ],\n    \"pg_convert\": [\n        \"array pg_convert(resource db, string table, array values[, int options])\",\n        \"Check and convert values for PostgreSQL SQL statement\"\n    ],\n    \"pg_copy_from\": [\n        \"bool pg_copy_from(resource connection, string table_name , array rows [, string delimiter [, string null_as]])\",\n        \"Copy table from array\"\n    ],\n    \"pg_copy_to\": [\n        \"array pg_copy_to(resource connection, string table_name [, string delimiter [, string null_as]])\",\n        \"Copy table to array\"\n    ],\n    \"pg_dbname\": [\n        \"string pg_dbname([resource connection])\",\n        \"Get the database name\"\n    ],\n    \"pg_delete\": [\n        \"mixed pg_delete(resource db, string table, array ids[, int options])\",\n        \"Delete records has ids (id=>value)\"\n    ],\n    \"pg_end_copy\": [\n        \"bool pg_end_copy([resource connection])\",\n        \"Sync with backend. Completes the Copy command\"\n    ],\n    \"pg_escape_bytea\": [\n        \"string pg_escape_bytea([resource connection,] string data)\",\n        \"Escape binary for bytea type\"\n    ],\n    \"pg_escape_string\": [\n        \"string pg_escape_string([resource connection,] string data)\",\n        \"Escape string for text/char type\"\n    ],\n    \"pg_execute\": [\n        \"resource pg_execute([resource connection,] string stmtname, array params)\",\n        \"Execute a prepared query\"\n    ],\n    \"pg_fetch_all\": [\n        \"array pg_fetch_all(resource result)\",\n        \"Fetch all rows into array\"\n    ],\n    \"pg_fetch_all_columns\": [\n        \"array pg_fetch_all_columns(resource result [, int column_number])\",\n        \"Fetch all rows into array\"\n    ],\n    \"pg_fetch_array\": [\n        \"array pg_fetch_array(resource result [, int row [, int result_type]])\",\n        \"Fetch a row as an array\"\n    ],\n    \"pg_fetch_assoc\": [\n        \"array pg_fetch_assoc(resource result [, int row])\",\n        \"Fetch a row as an assoc array\"\n    ],\n    \"pg_fetch_object\": [\n        \"object pg_fetch_object(resource result [, int row [, string class_name [, NULL|array ctor_params]]])\",\n        \"Fetch a row as an object\"\n    ],\n    \"pg_fetch_result\": [\n        \"mixed pg_fetch_result(resource result, [int row_number,] mixed field_name)\",\n        \"Returns values from a result identifier\"\n    ],\n    \"pg_fetch_row\": [\n        \"array pg_fetch_row(resource result [, int row [, int result_type]])\",\n        \"Get a row as an enumerated array\"\n    ],\n    \"pg_field_is_null\": [\n        \"int pg_field_is_null(resource result, [int row,] mixed field_name_or_number)\",\n        \"Test if a field is NULL\"\n    ],\n    \"pg_field_name\": [\n        \"string pg_field_name(resource result, int field_number)\",\n        \"Returns the name of the field\"\n    ],\n    \"pg_field_num\": [\n        \"int pg_field_num(resource result, string field_name)\",\n        \"Returns the field number of the named field\"\n    ],\n    \"pg_field_prtlen\": [\n        \"int pg_field_prtlen(resource result, [int row,] mixed field_name_or_number)\",\n        \"Returns the printed length\"\n    ],\n    \"pg_field_size\": [\n        \"int pg_field_size(resource result, int field_number)\",\n        \"Returns the internal size of the field\"\n    ],\n    \"pg_field_table\": [\n        \"mixed pg_field_table(resource result, int field_number[, bool oid_only])\",\n        \"Returns the name of the table field belongs to, or table's oid if oid_only is true\"\n    ],\n    \"pg_field_type\": [\n        \"string pg_field_type(resource result, int field_number)\",\n        \"Returns the type name for the given field\"\n    ],\n    \"pg_field_type_oid\": [\n        \"string pg_field_type_oid(resource result, int field_number)\",\n        \"Returns the type oid for the given field\"\n    ],\n    \"pg_free_result\": [\n        \"bool pg_free_result(resource result)\",\n        \"Free result memory\"\n    ],\n    \"pg_get_notify\": [\n        \"array pg_get_notify([resource connection[, result_type]])\",\n        \"Get asynchronous notification\"\n    ],\n    \"pg_get_pid\": [\n        \"int pg_get_pid([resource connection)\",\n        \"Get backend(server) pid\"\n    ],\n    \"pg_get_result\": [\n        \"resource pg_get_result(resource connection)\",\n        \"Get asynchronous query result\"\n    ],\n    \"pg_host\": [\n        \"string pg_host([resource connection])\",\n        \"Returns the host name associated with the connection\"\n    ],\n    \"pg_insert\": [\n        \"mixed pg_insert(resource db, string table, array values[, int options])\",\n        \"Insert values (filed=>value) to table\"\n    ],\n    \"pg_last_error\": [\n        \"string pg_last_error([resource connection])\",\n        \"Get the error message string\"\n    ],\n    \"pg_last_notice\": [\n        \"string pg_last_notice(resource connection)\",\n        \"Returns the last notice set by the backend\"\n    ],\n    \"pg_last_oid\": [\n        \"string pg_last_oid(resource result)\",\n        \"Returns the last object identifier\"\n    ],\n    \"pg_lo_close\": [\n        \"bool pg_lo_close(resource large_object)\",\n        \"Close a large object\"\n    ],\n    \"pg_lo_create\": [\n        \"mixed pg_lo_create([resource connection],[mixed large_object_oid])\",\n        \"Create a large object\"\n    ],\n    \"pg_lo_export\": [\n        \"bool pg_lo_export([resource connection, ] int objoid, string filename)\",\n        \"Export large object direct to filesystem\"\n    ],\n    \"pg_lo_import\": [\n        \"int pg_lo_import([resource connection, ] string filename [, mixed oid])\",\n        \"Import large object direct from filesystem\"\n    ],\n    \"pg_lo_open\": [\n        \"resource pg_lo_open([resource connection,] int large_object_oid, string mode)\",\n        \"Open a large object and return fd\"\n    ],\n    \"pg_lo_read\": [\n        \"string pg_lo_read(resource large_object [, int len])\",\n        \"Read a large object\"\n    ],\n    \"pg_lo_read_all\": [\n        \"int pg_lo_read_all(resource large_object)\",\n        \"Read a large object and send straight to browser\"\n    ],\n    \"pg_lo_seek\": [\n        \"bool pg_lo_seek(resource large_object, int offset [, int whence])\",\n        \"Seeks position of large object\"\n    ],\n    \"pg_lo_tell\": [\n        \"int pg_lo_tell(resource large_object)\",\n        \"Returns current position of large object\"\n    ],\n    \"pg_lo_unlink\": [\n        \"bool pg_lo_unlink([resource connection,] string large_object_oid)\",\n        \"Delete a large object\"\n    ],\n    \"pg_lo_write\": [\n        \"int pg_lo_write(resource large_object, string buf [, int len])\",\n        \"Write a large object\"\n    ],\n    \"pg_meta_data\": [\n        \"array pg_meta_data(resource db, string table)\",\n        \"Get meta_data\"\n    ],\n    \"pg_num_fields\": [\n        \"int pg_num_fields(resource result)\",\n        \"Return the number of fields in the result\"\n    ],\n    \"pg_num_rows\": [\n        \"int pg_num_rows(resource result)\",\n        \"Return the number of rows in the result\"\n    ],\n    \"pg_options\": [\n        \"string pg_options([resource connection])\",\n        \"Get the options associated with the connection\"\n    ],\n    \"pg_parameter_status\": [\n        \"string|false pg_parameter_status([resource connection,] string param_name)\",\n        \"Returns the value of a server parameter\"\n    ],\n    \"pg_pconnect\": [\n        \"resource pg_pconnect(string connection_string | [string host, string port [, string options [, string tty,]]] string database)\",\n        \"Open a persistent PostgreSQL connection\"\n    ],\n    \"pg_ping\": [\n        \"bool pg_ping([resource connection])\",\n        \"Ping database. If connection is bad, try to reconnect.\"\n    ],\n    \"pg_port\": [\n        \"int pg_port([resource connection])\",\n        \"Return the port number associated with the connection\"\n    ],\n    \"pg_prepare\": [\n        \"resource pg_prepare([resource connection,] string stmtname, string query)\",\n        \"Prepare a query for future execution\"\n    ],\n    \"pg_put_line\": [\n        \"bool pg_put_line([resource connection,] string query)\",\n        \"Send null-terminated string to backend server\"\n    ],\n    \"pg_query\": [\n        \"resource pg_query([resource connection,] string query)\",\n        \"Execute a query\"\n    ],\n    \"pg_query_params\": [\n        \"resource pg_query_params([resource connection,] string query, array params)\",\n        \"Execute a query\"\n    ],\n    \"pg_result_error\": [\n        \"string pg_result_error(resource result)\",\n        \"Get error message associated with result\"\n    ],\n    \"pg_result_error_field\": [\n        \"string pg_result_error_field(resource result, int fieldcode)\",\n        \"Get error message field associated with result\"\n    ],\n    \"pg_result_seek\": [\n        \"bool pg_result_seek(resource result, int offset)\",\n        \"Set internal row offset\"\n    ],\n    \"pg_result_status\": [\n        \"mixed pg_result_status(resource result[, long result_type])\",\n        \"Get status of query result\"\n    ],\n    \"pg_select\": [\n        \"mixed pg_select(resource db, string table, array ids[, int options])\",\n        \"Select records that has ids (id=>value)\"\n    ],\n    \"pg_send_execute\": [\n        \"bool pg_send_execute(resource connection, string stmtname, array params)\",\n        \"Executes prevriously prepared stmtname asynchronously\"\n    ],\n    \"pg_send_prepare\": [\n        \"bool pg_send_prepare(resource connection, string stmtname, string query)\",\n        \"Asynchronously prepare a query for future execution\"\n    ],\n    \"pg_send_query\": [\n        \"bool pg_send_query(resource connection, string query)\",\n        \"Send asynchronous query\"\n    ],\n    \"pg_send_query_params\": [\n        \"bool pg_send_query_params(resource connection, string query, array params)\",\n        \"Send asynchronous parameterized query\"\n    ],\n    \"pg_set_client_encoding\": [\n        \"int pg_set_client_encoding([resource connection,] string encoding)\",\n        \"Set client encoding\"\n    ],\n    \"pg_set_error_verbosity\": [\n        \"int pg_set_error_verbosity([resource connection,] int verbosity)\",\n        \"Set error verbosity\"\n    ],\n    \"pg_trace\": [\n        \"bool pg_trace(string filename [, string mode [, resource connection]])\",\n        \"Enable tracing a PostgreSQL connection\"\n    ],\n    \"pg_transaction_status\": [\n        \"int pg_transaction_status(resource connnection)\",\n        \"Get transaction status\"\n    ],\n    \"pg_tty\": [\n        \"string pg_tty([resource connection])\",\n        \"Return the tty name associated with the connection\"\n    ],\n    \"pg_unescape_bytea\": [\n        \"string pg_unescape_bytea(string data)\",\n        \"Unescape binary for bytea type\"\n    ],\n    \"pg_untrace\": [\n        \"bool pg_untrace([resource connection])\",\n        \"Disable tracing of a PostgreSQL connection\"\n    ],\n    \"pg_update\": [\n        \"mixed pg_update(resource db, string table, array fields, array ids[, int options])\",\n        \"Update table using values (field=>value) and ids (id=>value)\"\n    ],\n    \"pg_version\": [\n        \"array pg_version([resource connection])\",\n        \"Returns an array with client, protocol and server version (when available)\"\n    ],\n    \"php_egg_logo_guid\": [\n        \"string php_egg_logo_guid(void)\",\n        \"Return the special ID used to request the PHP logo in phpinfo screens\"\n    ],\n    \"php_ini_loaded_file\": [\n        \"string php_ini_loaded_file(void)\",\n        \"Return the actual loaded ini filename\"\n    ],\n    \"php_ini_scanned_files\": [\n        \"string php_ini_scanned_files(void)\",\n        \"Return comma-separated string of .ini files parsed from the additional ini dir\"\n    ],\n    \"php_logo_guid\": [\n        \"string php_logo_guid(void)\",\n        \"Return the special ID used to request the PHP logo in phpinfo screens\"\n    ],\n    \"php_real_logo_guid\": [\n        \"string php_real_logo_guid(void)\",\n        \"Return the special ID used to request the PHP logo in phpinfo screens\"\n    ],\n    \"php_sapi_name\": [\n        \"string php_sapi_name(void)\",\n        \"Return the current SAPI module name\"\n    ],\n    \"php_snmpv3\": [\n        \"void php_snmpv3(INTERNAL_FUNCTION_PARAMETERS, int st)\",\n        \"* * Generic SNMPv3 object fetcher * From here is passed on the the common internal object fetcher. * * st=SNMP_CMD_GET   snmp3_get() - query an agent and return a single value. * st=SNMP_CMD_GETNEXT   snmp3_getnext() - query an agent and return the next single value. * st=SNMP_CMD_WALK   snmp3_walk() - walk the mib and return a single dimensional array  *                       containing the values. * st=SNMP_CMD_REALWALK   snmp3_real_walk() - walk the mib and return an  *                            array of oid,value pairs. * st=SNMP_CMD_SET  snmp3_set() - query an agent and set a single value *\"\n    ],\n    \"php_strip_whitespace\": [\n        \"string php_strip_whitespace(string file_name)\",\n        \"Return source with stripped comments and whitespace\"\n    ],\n    \"php_uname\": [\n        \"string php_uname(void)\",\n        \"Return information about the system PHP was built on\"\n    ],\n    \"phpcredits\": [\n        \"void phpcredits([int flag])\",\n        \"Prints the list of people who've contributed to the PHP project\"\n    ],\n    \"phpinfo\": [\n        \"void phpinfo([int what])\",\n        \"Output a page of useful information about PHP and the current request\"\n    ],\n    \"phpversion\": [\n        \"string phpversion([string extension])\",\n        \"Return the current PHP version\"\n    ],\n    \"pi\": [\n        \"float pi(void)\",\n        \"Returns an approximation of pi\"\n    ],\n    \"png2wbmp\": [\n        \"bool png2wbmp (string f_org, string f_dest, int d_height, int d_width, int threshold)\",\n        \"Convert PNG image to WBMP image\"\n    ],\n    \"popen\": [\n        \"resource popen(string command, string mode)\",\n        \"Execute a command and open either a read or a write pipe to it\"\n    ],\n    \"posix_access\": [\n        \"bool posix_access(string file [, int mode])\",\n        \"Determine accessibility of a file (POSIX.1 5.6.3)\"\n    ],\n    \"posix_ctermid\": [\n        \"string posix_ctermid(void)\",\n        \"Generate terminal path name (POSIX.1, 4.7.1)\"\n    ],\n    \"posix_get_last_error\": [\n        \"int posix_get_last_error(void)\",\n        \"Retrieve the error number set by the last posix function which failed.\"\n    ],\n    \"posix_getcwd\": [\n        \"string posix_getcwd(void)\",\n        \"Get working directory pathname (POSIX.1, 5.2.2)\"\n    ],\n    \"posix_getegid\": [\n        \"int posix_getegid(void)\",\n        \"Get the current effective group id (POSIX.1, 4.2.1)\"\n    ],\n    \"posix_geteuid\": [\n        \"int posix_geteuid(void)\",\n        \"Get the current effective user id (POSIX.1, 4.2.1)\"\n    ],\n    \"posix_getgid\": [\n        \"int posix_getgid(void)\",\n        \"Get the current group id (POSIX.1, 4.2.1)\"\n    ],\n    \"posix_getgrgid\": [\n        \"array posix_getgrgid(long gid)\",\n        \"Group database access (POSIX.1, 9.2.1)\"\n    ],\n    \"posix_getgrnam\": [\n        \"array posix_getgrnam(string groupname)\",\n        \"Group database access (POSIX.1, 9.2.1)\"\n    ],\n    \"posix_getgroups\": [\n        \"array posix_getgroups(void)\",\n        \"Get supplementary group id's (POSIX.1, 4.2.3)\"\n    ],\n    \"posix_getlogin\": [\n        \"string posix_getlogin(void)\",\n        \"Get user name (POSIX.1, 4.2.4)\"\n    ],\n    \"posix_getpgid\": [\n        \"int posix_getpgid(void)\",\n        \"Get the process group id of the specified process (This is not a POSIX function, but a SVR4ism, so we compile conditionally)\"\n    ],\n    \"posix_getpgrp\": [\n        \"int posix_getpgrp(void)\",\n        \"Get current process group id (POSIX.1, 4.3.1)\"\n    ],\n    \"posix_getpid\": [\n        \"int posix_getpid(void)\",\n        \"Get the current process id (POSIX.1, 4.1.1)\"\n    ],\n    \"posix_getppid\": [\n        \"int posix_getppid(void)\",\n        \"Get the parent process id (POSIX.1, 4.1.1)\"\n    ],\n    \"posix_getpwnam\": [\n        \"array posix_getpwnam(string groupname)\",\n        \"User database access (POSIX.1, 9.2.2)\"\n    ],\n    \"posix_getpwuid\": [\n        \"array posix_getpwuid(long uid)\",\n        \"User database access (POSIX.1, 9.2.2)\"\n    ],\n    \"posix_getrlimit\": [\n        \"array posix_getrlimit(void)\",\n        \"Get system resource consumption limits (This is not a POSIX function, but a BSDism and a SVR4ism. We compile conditionally)\"\n    ],\n    \"posix_getsid\": [\n        \"int posix_getsid(void)\",\n        \"Get process group id of session leader (This is not a POSIX function, but a SVR4ism, so be compile conditionally)\"\n    ],\n    \"posix_getuid\": [\n        \"int posix_getuid(void)\",\n        \"Get the current user id (POSIX.1, 4.2.1)\"\n    ],\n    \"posix_initgroups\": [\n        \"bool posix_initgroups(string name, int base_group_id)\",\n        \"Calculate the group access list for the user specified in name.\"\n    ],\n    \"posix_isatty\": [\n        \"bool posix_isatty(int fd)\",\n        \"Determine if filedesc is a tty (POSIX.1, 4.7.1)\"\n    ],\n    \"posix_kill\": [\n        \"bool posix_kill(int pid, int sig)\",\n        \"Send a signal to a process (POSIX.1, 3.3.2)\"\n    ],\n    \"posix_mkfifo\": [\n        \"bool posix_mkfifo(string pathname, int mode)\",\n        \"Make a FIFO special file (POSIX.1, 5.4.2)\"\n    ],\n    \"posix_mknod\": [\n        \"bool posix_mknod(string pathname, int mode [, int major [, int minor]])\",\n        \"Make a special or ordinary file (POSIX.1)\"\n    ],\n    \"posix_setegid\": [\n        \"bool posix_setegid(long uid)\",\n        \"Set effective group id\"\n    ],\n    \"posix_seteuid\": [\n        \"bool posix_seteuid(long uid)\",\n        \"Set effective user id\"\n    ],\n    \"posix_setgid\": [\n        \"bool posix_setgid(int uid)\",\n        \"Set group id (POSIX.1, 4.2.2)\"\n    ],\n    \"posix_setpgid\": [\n        \"bool posix_setpgid(int pid, int pgid)\",\n        \"Set process group id for job control (POSIX.1, 4.3.3)\"\n    ],\n    \"posix_setsid\": [\n        \"int posix_setsid(void)\",\n        \"Create session and set process group id (POSIX.1, 4.3.2)\"\n    ],\n    \"posix_setuid\": [\n        \"bool posix_setuid(long uid)\",\n        \"Set user id (POSIX.1, 4.2.2)\"\n    ],\n    \"posix_strerror\": [\n        \"string posix_strerror(int errno)\",\n        \"Retrieve the system error message associated with the given errno.\"\n    ],\n    \"posix_times\": [\n        \"array posix_times(void)\",\n        \"Get process times (POSIX.1, 4.5.2)\"\n    ],\n    \"posix_ttyname\": [\n        \"string posix_ttyname(int fd)\",\n        \"Determine terminal device name (POSIX.1, 4.7.2)\"\n    ],\n    \"posix_uname\": [\n        \"array posix_uname(void)\",\n        \"Get system name (POSIX.1, 4.4.1)\"\n    ],\n    \"pow\": [\n        \"number pow(number base, number exponent)\",\n        \"Returns base raised to the power of exponent. Returns integer result when possible\"\n    ],\n    \"preg_filter\": [\n        \"mixed preg_filter(mixed regex, mixed replace, mixed subject [, int limit [, int &count]])\",\n        \"Perform Perl-style regular expression replacement and only return matches.\"\n    ],\n    \"preg_grep\": [\n        \"array preg_grep(string regex, array input [, int flags])\",\n        \"Searches array and returns entries which match regex\"\n    ],\n    \"preg_last_error\": [\n        \"int preg_last_error()\",\n        \"Returns the error code of the last regexp execution.\"\n    ],\n    \"preg_match\": [\n        \"int preg_match(string pattern, string subject [, array &subpatterns [, int flags [, int offset]]])\",\n        \"Perform a Perl-style regular expression match\"\n    ],\n    \"preg_match_all\": [\n        \"int preg_match_all(string pattern, string subject, array &subpatterns [, int flags [, int offset]])\",\n        \"Perform a Perl-style global regular expression match\"\n    ],\n    \"preg_quote\": [\n        \"string preg_quote(string str [, string delim_char])\",\n        \"Quote regular expression characters plus an optional character\"\n    ],\n    \"preg_replace\": [\n        \"mixed preg_replace(mixed regex, mixed replace, mixed subject [, int limit [, int &count]])\",\n        \"Perform Perl-style regular expression replacement.\"\n    ],\n    \"preg_replace_callback\": [\n        \"mixed preg_replace_callback(mixed regex, mixed callback, mixed subject [, int limit [, int &count]])\",\n        \"Perform Perl-style regular expression replacement using replacement callback.\"\n    ],\n    \"preg_split\": [\n        \"array preg_split(string pattern, string subject [, int limit [, int flags]])\",\n        \"Split string into an array using a perl-style regular expression as a delimiter\"\n    ],\n    \"prev\": [\n        \"mixed prev(array array_arg)\",\n        \"Move array argument's internal pointer to the previous element and return it\"\n    ],\n    \"print\": [\n        \"int print(string arg)\",\n        \"Output a string\"\n    ],\n    \"print_r\": [\n        \"mixed print_r(mixed var [, bool return])\",\n        \"Prints out or returns information about the specified variable\"\n    ],\n    \"printf\": [\n        \"int printf(string format [, mixed arg1 [, mixed ...]])\",\n        \"Output a formatted string\"\n    ],\n    \"proc_close\": [\n        \"int proc_close(resource process)\",\n        \"close a process opened by proc_open\"\n    ],\n    \"proc_get_status\": [\n        \"array proc_get_status(resource process)\",\n        \"get information about a process opened by proc_open\"\n    ],\n    \"proc_nice\": [\n        \"bool proc_nice(int priority)\",\n        \"Change the priority of the current process\"\n    ],\n    \"proc_open\": [\n        \"resource proc_open(string command, array descriptorspec, array &pipes [, string cwd [, array env [, array other_options]]])\",\n        \"Run a process with more control over it's file descriptors\"\n    ],\n    \"proc_terminate\": [\n        \"bool proc_terminate(resource process [, long signal])\",\n        \"kill a process opened by proc_open\"\n    ],\n    \"property_exists\": [\n        \"bool property_exists(mixed object_or_class, string property_name)\",\n        \"Checks if the object or class has a property\"\n    ],\n    \"pspell_add_to_personal\": [\n        \"bool pspell_add_to_personal(int pspell, string word)\",\n        \"Adds a word to a personal list\"\n    ],\n    \"pspell_add_to_session\": [\n        \"bool pspell_add_to_session(int pspell, string word)\",\n        \"Adds a word to the current session\"\n    ],\n    \"pspell_check\": [\n        \"bool pspell_check(int pspell, string word)\",\n        \"Returns true if word is valid\"\n    ],\n    \"pspell_clear_session\": [\n        \"bool pspell_clear_session(int pspell)\",\n        \"Clears the current session\"\n    ],\n    \"pspell_config_create\": [\n        \"int pspell_config_create(string language [, string spelling [, string jargon [, string encoding]]])\",\n        \"Create a new config to be used later to create a manager\"\n    ],\n    \"pspell_config_data_dir\": [\n        \"bool pspell_config_data_dir(int conf, string directory)\",\n        \"location of language data files\"\n    ],\n    \"pspell_config_dict_dir\": [\n        \"bool pspell_config_dict_dir(int conf, string directory)\",\n        \"location of the main word list\"\n    ],\n    \"pspell_config_ignore\": [\n        \"bool pspell_config_ignore(int conf, int ignore)\",\n        \"Ignore words <= n chars\"\n    ],\n    \"pspell_config_mode\": [\n        \"bool pspell_config_mode(int conf, long mode)\",\n        \"Select mode for config (PSPELL_FAST, PSPELL_NORMAL or PSPELL_BAD_SPELLERS)\"\n    ],\n    \"pspell_config_personal\": [\n        \"bool pspell_config_personal(int conf, string personal)\",\n        \"Use a personal dictionary for this config\"\n    ],\n    \"pspell_config_repl\": [\n        \"bool pspell_config_repl(int conf, string repl)\",\n        \"Use a personal dictionary with replacement pairs for this config\"\n    ],\n    \"pspell_config_runtogether\": [\n        \"bool pspell_config_runtogether(int conf, bool runtogether)\",\n        \"Consider run-together words as valid components\"\n    ],\n    \"pspell_config_save_repl\": [\n        \"bool pspell_config_save_repl(int conf, bool save)\",\n        \"Save replacement pairs when personal list is saved for this config\"\n    ],\n    \"pspell_new\": [\n        \"int pspell_new(string language [, string spelling [, string jargon [, string encoding [, int mode]]]])\",\n        \"Load a dictionary\"\n    ],\n    \"pspell_new_config\": [\n        \"int pspell_new_config(int config)\",\n        \"Load a dictionary based on the given config\"\n    ],\n    \"pspell_new_personal\": [\n        \"int pspell_new_personal(string personal, string language [, string spelling [, string jargon [, string encoding [, int mode]]]])\",\n        \"Load a dictionary with a personal wordlist\"\n    ],\n    \"pspell_save_wordlist\": [\n        \"bool pspell_save_wordlist(int pspell)\",\n        \"Saves the current (personal) wordlist\"\n    ],\n    \"pspell_store_replacement\": [\n        \"bool pspell_store_replacement(int pspell, string misspell, string correct)\",\n        \"Notify the dictionary of a user-selected replacement\"\n    ],\n    \"pspell_suggest\": [\n        \"array pspell_suggest(int pspell, string word)\",\n        \"Returns array of suggestions\"\n    ],\n    \"putenv\": [\n        \"bool putenv(string setting)\",\n        \"Set the value of an environment variable\"\n    ],\n    \"quoted_printable_decode\": [\n        \"string quoted_printable_decode(string str)\",\n        \"Convert a quoted-printable string to an 8 bit string\"\n    ],\n    \"quoted_printable_encode\": [\n        \"string quoted_printable_encode(string str) */\",\n        \"PHP_FUNCTION(quoted_printable_encode) {  char *str, *new_str;  int str_len;  size_t new_str_len;   if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, \\\"s\\\", &str, &str_len) != SUCCESS) {   return;  }   if (!str_len) {   RETURN_EMPTY_STRING();  }   new_str = (char *)php_quot_print_encode((unsigned char *)str, (size_t)str_len, &new_str_len);  RETURN_STRINGL(new_str, new_str_len, 0); } /* }}}\"\n    ],\n    \"quotemeta\": [\n        \"string quotemeta(string str)\",\n        \"Quotes meta characters\"\n    ],\n    \"rad2deg\": [\n        \"float rad2deg(float number)\",\n        \"Converts the radian number to the equivalent number in degrees\"\n    ],\n    \"rand\": [\n        \"int rand([int min, int max])\",\n        \"Returns a random number\"\n    ],\n    \"range\": [\n        \"array range(mixed low, mixed high[, int step])\",\n        \"Create an array containing the range of integers or characters from low to high (inclusive)\"\n    ],\n    \"rawurldecode\": [\n        \"string rawurldecode(string str)\",\n        \"Decodes URL-encodes string\"\n    ],\n    \"rawurlencode\": [\n        \"string rawurlencode(string str)\",\n        \"URL-encodes string\"\n    ],\n    \"readdir\": [\n        \"string readdir([resource dir_handle])\",\n        \"Read directory entry from dir_handle\"\n    ],\n    \"readfile\": [\n        \"int readfile(string filename [, bool use_include_path[, resource context]])\",\n        \"Output a file or a URL\"\n    ],\n    \"readgzfile\": [\n        \"int readgzfile(string filename [, int use_include_path])\",\n        \"Output a .gz-file\"\n    ],\n    \"readline\": [\n        \"string readline([string prompt])\",\n        \"Reads a line\"\n    ],\n    \"readline_add_history\": [\n        \"bool readline_add_history(string prompt)\",\n        \"Adds a line to the history\"\n    ],\n    \"readline_callback_handler_install\": [\n        \"void readline_callback_handler_install(string prompt, mixed callback)\",\n        \"Initializes the readline callback interface and terminal, prints the prompt and returns immediately\"\n    ],\n    \"readline_callback_handler_remove\": [\n        \"bool readline_callback_handler_remove()\",\n        \"Removes a previously installed callback handler and restores terminal settings\"\n    ],\n    \"readline_callback_read_char\": [\n        \"void readline_callback_read_char()\",\n        \"Informs the readline callback interface that a character is ready for input\"\n    ],\n    \"readline_clear_history\": [\n        \"bool readline_clear_history(void)\",\n        \"Clears the history\"\n    ],\n    \"readline_completion_function\": [\n        \"bool readline_completion_function(string funcname)\",\n        \"Readline completion function?\"\n    ],\n    \"readline_info\": [\n        \"mixed readline_info([string varname [, string newvalue]])\",\n        \"Gets/sets various internal readline variables.\"\n    ],\n    \"readline_list_history\": [\n        \"array readline_list_history(void)\",\n        \"Lists the history\"\n    ],\n    \"readline_on_new_line\": [\n        \"void readline_on_new_line(void)\",\n        \"Inform readline that the cursor has moved to a new line\"\n    ],\n    \"readline_read_history\": [\n        \"bool readline_read_history([string filename])\",\n        \"Reads the history\"\n    ],\n    \"readline_redisplay\": [\n        \"void readline_redisplay(void)\",\n        \"Ask readline to redraw the display\"\n    ],\n    \"readline_write_history\": [\n        \"bool readline_write_history([string filename])\",\n        \"Writes the history\"\n    ],\n    \"readlink\": [\n        \"string readlink(string filename)\",\n        \"Return the target of a symbolic link\"\n    ],\n    \"realpath\": [\n        \"string realpath(string path)\",\n        \"Return the resolved path\"\n    ],\n    \"realpath_cache_get\": [\n        \"bool realpath_cache_get()\",\n        \"Get current size of realpath cache\"\n    ],\n    \"realpath_cache_size\": [\n        \"bool realpath_cache_size()\",\n        \"Get current size of realpath cache\"\n    ],\n    \"recode_file\": [\n        \"bool recode_file(string request, resource input, resource output)\",\n        \"Recode file input into file output according to request\"\n    ],\n    \"recode_string\": [\n        \"string recode_string(string request, string str)\",\n        \"Recode string str according to request string\"\n    ],\n    \"register_shutdown_function\": [\n        \"void register_shutdown_function(string function_name)\",\n        \"Register a user-level function to be called on request termination\"\n    ],\n    \"register_tick_function\": [\n        \"bool register_tick_function(string function_name [, mixed arg [, mixed ... ]])\",\n        \"Registers a tick callback function\"\n    ],\n    \"rename\": [\n        \"bool rename(string old_name, string new_name[, resource context])\",\n        \"Rename a file\"\n    ],\n    \"require\": [\n        \"bool require(string path)\",\n        \"Includes and evaluates the specified file, erroring if the file cannot be included\"\n    ],\n    \"require_once\": [\n        \"bool require_once(string path)\",\n        \"Includes and evaluates the specified file, erroring if the file cannot be included\"\n    ],\n    \"reset\": [\n        \"mixed reset(array array_arg)\",\n        \"Set array argument's internal pointer to the first element and return it\"\n    ],\n    \"restore_error_handler\": [\n        \"void restore_error_handler(void)\",\n        \"Restores the previously defined error handler function\"\n    ],\n    \"restore_exception_handler\": [\n        \"void restore_exception_handler(void)\",\n        \"Restores the previously defined exception handler function\"\n    ],\n    \"restore_include_path\": [\n        \"void restore_include_path()\",\n        \"Restore the value of the include_path configuration option\"\n    ],\n    \"rewind\": [\n        \"bool rewind(resource fp)\",\n        \"Rewind the position of a file pointer\"\n    ],\n    \"rewinddir\": [\n        \"void rewinddir([resource dir_handle])\",\n        \"Rewind dir_handle back to the start\"\n    ],\n    \"rmdir\": [\n        \"bool rmdir(string dirname[, resource context])\",\n        \"Remove a directory\"\n    ],\n    \"round\": [\n        \"float round(float number [, int precision [, int mode]])\",\n        \"Returns the number rounded to specified precision\"\n    ],\n    \"rsort\": [\n        \"bool rsort(array &array_arg [, int sort_flags])\",\n        \"Sort an array in reverse order\"\n    ],\n    \"rtrim\": [\n        \"string rtrim(string str [, string character_mask])\",\n        \"Removes trailing whitespace\"\n    ],\n    \"scandir\": [\n        \"array scandir(string dir [, int sorting_order [, resource context]])\",\n        \"List files & directories inside the specified path\"\n    ],\n    \"sem_acquire\": [\n        \"bool sem_acquire(resource id)\",\n        \"Acquires the semaphore with the given id, blocking if necessary\"\n    ],\n    \"sem_get\": [\n        \"resource sem_get(int key [, int max_acquire [, int perm [, int auto_release]])\",\n        \"Return an id for the semaphore with the given key, and allow max_acquire (default 1) processes to acquire it simultaneously\"\n    ],\n    \"sem_release\": [\n        \"bool sem_release(resource id)\",\n        \"Releases the semaphore with the given id\"\n    ],\n    \"sem_remove\": [\n        \"bool sem_remove(resource id)\",\n        \"Removes semaphore from Unix systems\"\n    ],\n    \"serialize\": [\n        \"string serialize(mixed variable)\",\n        \"Returns a string representation of variable (which can later be unserialized)\"\n    ],\n    \"session_cache_expire\": [\n        \"int session_cache_expire([int new_cache_expire])\",\n        \"Return the current cache expire. If new_cache_expire is given, the current cache_expire is replaced with new_cache_expire\"\n    ],\n    \"session_cache_limiter\": [\n        \"string session_cache_limiter([string new_cache_limiter])\",\n        \"Return the current cache limiter. If new_cache_limited is given, the current cache_limiter is replaced with new_cache_limiter\"\n    ],\n    \"session_decode\": [\n        \"bool session_decode(string data)\",\n        \"Deserializes data and reinitializes the variables\"\n    ],\n    \"session_destroy\": [\n        \"bool session_destroy(void)\",\n        \"Destroy the current session and all data associated with it\"\n    ],\n    \"session_encode\": [\n        \"string session_encode(void)\",\n        \"Serializes the current setup and returns the serialized representation\"\n    ],\n    \"session_get_cookie_params\": [\n        \"array session_get_cookie_params(void)\",\n        \"Return the session cookie parameters\"\n    ],\n    \"session_id\": [\n        \"string session_id([string newid])\",\n        \"Return the current session id. If newid is given, the session id is replaced with newid\"\n    ],\n    \"session_is_registered\": [\n        \"bool session_is_registered(string varname)\",\n        \"Checks if a variable is registered in session\"\n    ],\n    \"session_module_name\": [\n        \"string session_module_name([string newname])\",\n        \"Return the current module name used for accessing session data. If newname is given, the module name is replaced with newname\"\n    ],\n    \"session_name\": [\n        \"string session_name([string newname])\",\n        \"Return the current session name. If newname is given, the session name is replaced with newname\"\n    ],\n    \"session_regenerate_id\": [\n        \"bool session_regenerate_id([bool delete_old_session])\",\n        \"Update the current session id with a newly generated one. If delete_old_session is set to true, remove the old session.\"\n    ],\n    \"session_register\": [\n        \"bool session_register(mixed var_names [, mixed ...])\",\n        \"Adds varname(s) to the list of variables which are freezed at the session end\"\n    ],\n    \"session_save_path\": [\n        \"string session_save_path([string newname])\",\n        \"Return the current save path passed to module_name. If newname is given, the save path is replaced with newname\"\n    ],\n    \"session_set_cookie_params\": [\n        \"void session_set_cookie_params(int lifetime [, string path [, string domain [, bool secure[, bool httponly]]]])\",\n        \"Set session cookie parameters\"\n    ],\n    \"session_set_save_handler\": [\n        \"void session_set_save_handler(string open, string close, string read, string write, string destroy, string gc)\",\n        \"Sets user-level functions\"\n    ],\n    \"session_start\": [\n        \"bool session_start(void)\",\n        \"Begin session - reinitializes freezed variables, registers browsers etc\"\n    ],\n    \"session_unregister\": [\n        \"bool session_unregister(string varname)\",\n        \"Removes varname from the list of variables which are freezed at the session end\"\n    ],\n    \"session_unset\": [\n        \"void session_unset(void)\",\n        \"Unset all registered variables\"\n    ],\n    \"session_write_close\": [\n        \"void session_write_close(void)\",\n        \"Write session data and end session\"\n    ],\n    \"set_error_handler\": [\n        \"string set_error_handler(string error_handler [, int error_types])\",\n        \"Sets a user-defined error handler function.  Returns the previously defined error handler, or false on error\"\n    ],\n    \"set_exception_handler\": [\n        \"string set_exception_handler(callable exception_handler)\",\n        \"Sets a user-defined exception handler function.  Returns the previously defined exception handler, or false on error\"\n    ],\n    \"set_include_path\": [\n        \"string set_include_path(string new_include_path)\",\n        \"Sets the include_path configuration option\"\n    ],\n    \"set_magic_quotes_runtime\": [\n        \"bool set_magic_quotes_runtime(int new_setting)\",\n        \"Set the current active configuration setting of magic_quotes_runtime and return previous\"\n    ],\n    \"set_time_limit\": [\n        \"bool set_time_limit(int seconds)\",\n        \"Sets the maximum time a script can run\"\n    ],\n    \"setcookie\": [\n        \"bool setcookie(string name [, string value [, int expires [, string path [, string domain [, bool secure[, bool httponly]]]]]])\",\n        \"Send a cookie\"\n    ],\n    \"setlocale\": [\n        \"string setlocale(mixed category, string locale [, string ...])\",\n        \"Set locale information\"\n    ],\n    \"setrawcookie\": [\n        \"bool setrawcookie(string name [, string value [, int expires [, string path [, string domain [, bool secure[, bool httponly]]]]]])\",\n        \"Send a cookie with no url encoding of the value\"\n    ],\n    \"settype\": [\n        \"bool settype(mixed var, string type)\",\n        \"Set the type of the variable\"\n    ],\n    \"sha1\": [\n        \"string sha1(string str [, bool raw_output])\",\n        \"Calculate the sha1 hash of a string\"\n    ],\n    \"sha1_file\": [\n        \"string sha1_file(string filename [, bool raw_output])\",\n        \"Calculate the sha1 hash of given filename\"\n    ],\n    \"shell_exec\": [\n        \"string shell_exec(string cmd)\",\n        \"Execute command via shell and return complete output as string\"\n    ],\n    \"shm_attach\": [\n        \"int shm_attach(int key [, int memsize [, int perm]])\",\n        \"Creates or open a shared memory segment\"\n    ],\n    \"shm_detach\": [\n        \"bool shm_detach(resource shm_identifier)\",\n        \"Disconnects from shared memory segment\"\n    ],\n    \"shm_get_var\": [\n        \"mixed shm_get_var(resource id, int variable_key)\",\n        \"Returns a variable from shared memory\"\n    ],\n    \"shm_has_var\": [\n        \"bool shm_has_var(resource id, int variable_key)\",\n        \"Checks whether a specific entry exists\"\n    ],\n    \"shm_put_var\": [\n        \"bool shm_put_var(resource shm_identifier, int variable_key, mixed variable)\",\n        \"Inserts or updates a variable in shared memory\"\n    ],\n    \"shm_remove\": [\n        \"bool shm_remove(resource shm_identifier)\",\n        \"Removes shared memory from Unix systems\"\n    ],\n    \"shm_remove_var\": [\n        \"bool shm_remove_var(resource id, int variable_key)\",\n        \"Removes variable from shared memory\"\n    ],\n    \"shmop_close\": [\n        \"void shmop_close (int shmid)\",\n        \"closes a shared memory segment\"\n    ],\n    \"shmop_delete\": [\n        \"bool shmop_delete (int shmid)\",\n        \"mark segment for deletion\"\n    ],\n    \"shmop_open\": [\n        \"int shmop_open (int key, string flags, int mode, int size)\",\n        \"gets and attaches a shared memory segment\"\n    ],\n    \"shmop_read\": [\n        \"string shmop_read (int shmid, int start, int count)\",\n        \"reads from a shm segment\"\n    ],\n    \"shmop_size\": [\n        \"int shmop_size (int shmid)\",\n        \"returns the shm size\"\n    ],\n    \"shmop_write\": [\n        \"int shmop_write (int shmid, string data, int offset)\",\n        \"writes to a shared memory segment\"\n    ],\n    \"shuffle\": [\n        \"bool shuffle(array array_arg)\",\n        \"Randomly shuffle the contents of an array\"\n    ],\n    \"similar_text\": [\n        \"int similar_text(string str1, string str2 [, float percent])\",\n        \"Calculates the similarity between two strings\"\n    ],\n    \"simplexml_import_dom\": [\n        \"simplemxml_element simplexml_import_dom(domNode node [, string class_name])\",\n        \"Get a simplexml_element object from dom to allow for processing\"\n    ],\n    \"simplexml_load_file\": [\n        \"simplemxml_element simplexml_load_file(string filename [, string class_name [, int options [, string ns [, bool is_prefix]]]])\",\n        \"Load a filename and return a simplexml_element object to allow for processing\"\n    ],\n    \"simplexml_load_string\": [\n        \"simplemxml_element simplexml_load_string(string data [, string class_name [, int options [, string ns [, bool is_prefix]]]])\",\n        \"Load a string and return a simplexml_element object to allow for processing\"\n    ],\n    \"sin\": [\n        \"float sin(float number)\",\n        \"Returns the sine of the number in radians\"\n    ],\n    \"sinh\": [\n        \"float sinh(float number)\",\n        \"Returns the hyperbolic sine of the number, defined as (exp(number) - exp(-number))/2\"\n    ],\n    \"sleep\": [\n        \"void sleep(int seconds)\",\n        \"Delay for a given number of seconds\"\n    ],\n    \"smfi_addheader\": [\n        \"bool smfi_addheader(string headerf, string headerv)\",\n        \"Adds a header to the current message.\"\n    ],\n    \"smfi_addrcpt\": [\n        \"bool smfi_addrcpt(string rcpt)\",\n        \"Add a recipient to the message envelope.\"\n    ],\n    \"smfi_chgheader\": [\n        \"bool smfi_chgheader(string headerf, string headerv)\",\n        \"Changes a header's value for the current message.\"\n    ],\n    \"smfi_delrcpt\": [\n        \"bool smfi_delrcpt(string rcpt)\",\n        \"Removes the named recipient from the current message's envelope.\"\n    ],\n    \"smfi_getsymval\": [\n        \"string smfi_getsymval(string macro)\",\n        \"Returns the value of the given macro or NULL if the macro is not defined.\"\n    ],\n    \"smfi_replacebody\": [\n        \"bool smfi_replacebody(string body)\",\n        \"Replaces the body of the current message. If called more than once,    subsequent calls result in data being appended to the new body.\"\n    ],\n    \"smfi_setflags\": [\n        \"void smfi_setflags(long flags)\",\n        \"Sets the flags describing the actions the filter may take.\"\n    ],\n    \"smfi_setreply\": [\n        \"bool smfi_setreply(string rcode, string xcode, string message)\",\n        \"Directly set the SMTP error reply code for this connection.    This code will be used on subsequent error replies resulting from actions taken by this filter.\"\n    ],\n    \"smfi_settimeout\": [\n        \"void smfi_settimeout(long timeout)\",\n        \"Sets the number of seconds libmilter will wait for an MTA connection before timing out a socket.\"\n    ],\n    \"snmp2_get\": [\n        \"string snmp2_get(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Fetch a SNMP object\"\n    ],\n    \"snmp2_getnext\": [\n        \"string snmp2_getnext(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Fetch a SNMP object\"\n    ],\n    \"snmp2_real_walk\": [\n        \"array snmp2_real_walk(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Return all objects including their respective object id withing the specified one\"\n    ],\n    \"snmp2_set\": [\n        \"int snmp2_set(string host, string community, string object_id, string type, mixed value [, int timeout [, int retries]])\",\n        \"Set the value of a SNMP object\"\n    ],\n    \"snmp2_walk\": [\n        \"array snmp2_walk(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Return all objects under the specified object id\"\n    ],\n    \"snmp3_get\": [\n        \"int snmp3_get(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\n        \"Fetch the value of a SNMP object\"\n    ],\n    \"snmp3_getnext\": [\n        \"int snmp3_getnext(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\n        \"Fetch the value of a SNMP object\"\n    ],\n    \"snmp3_real_walk\": [\n        \"int snmp3_real_walk(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\n        \"Fetch the value of a SNMP object\"\n    ],\n    \"snmp3_set\": [\n        \"int snmp3_set(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id, string type, mixed value [, int timeout [, int retries]])\",\n        \"Fetch the value of a SNMP object\"\n    ],\n    \"snmp3_walk\": [\n        \"int snmp3_walk(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\n        \"Fetch the value of a SNMP object\"\n    ],\n    \"snmp_get_quick_print\": [\n        \"bool snmp_get_quick_print(void)\",\n        \"Return the current status of quick_print\"\n    ],\n    \"snmp_get_valueretrieval\": [\n        \"int snmp_get_valueretrieval()\",\n        \"Return the method how the SNMP values will be returned\"\n    ],\n    \"snmp_read_mib\": [\n        \"int snmp_read_mib(string filename)\",\n        \"Reads and parses a MIB file into the active MIB tree.\"\n    ],\n    \"snmp_set_enum_print\": [\n        \"void snmp_set_enum_print(int enum_print)\",\n        \"Return all values that are enums with their enum value instead of the raw integer\"\n    ],\n    \"snmp_set_oid_output_format\": [\n        \"void snmp_set_oid_output_format(int oid_format)\",\n        \"Set the OID output format.\"\n    ],\n    \"snmp_set_quick_print\": [\n        \"void snmp_set_quick_print(int quick_print)\",\n        \"Return all objects including their respective object id withing the specified one\"\n    ],\n    \"snmp_set_valueretrieval\": [\n        \"void snmp_set_valueretrieval(int method)\",\n        \"Specify the method how the SNMP values will be returned\"\n    ],\n    \"snmpget\": [\n        \"string snmpget(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Fetch a SNMP object\"\n    ],\n    \"snmpgetnext\": [\n        \"string snmpgetnext(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Fetch a SNMP object\"\n    ],\n    \"snmprealwalk\": [\n        \"array snmprealwalk(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Return all objects including their respective object id withing the specified one\"\n    ],\n    \"snmpset\": [\n        \"int snmpset(string host, string community, string object_id, string type, mixed value [, int timeout [, int retries]])\",\n        \"Set the value of a SNMP object\"\n    ],\n    \"snmpwalk\": [\n        \"array snmpwalk(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Return all objects under the specified object id\"\n    ],\n    \"socket_accept\": [\n        \"resource socket_accept(resource socket)\",\n        \"Accepts a connection on the listening socket fd\"\n    ],\n    \"socket_bind\": [\n        \"bool socket_bind(resource socket, string addr [, int port])\",\n        \"Binds an open socket to a listening port, port is only specified in AF_INET family.\"\n    ],\n    \"socket_clear_error\": [\n        \"void socket_clear_error([resource socket])\",\n        \"Clears the error on the socket or the last error code.\"\n    ],\n    \"socket_close\": [\n        \"void socket_close(resource socket)\",\n        \"Closes a file descriptor\"\n    ],\n    \"socket_connect\": [\n        \"bool socket_connect(resource socket, string addr [, int port])\",\n        \"Opens a connection to addr:port on the socket specified by socket\"\n    ],\n    \"socket_create\": [\n        \"resource socket_create(int domain, int type, int protocol)\",\n        \"Creates an endpoint for communication in the domain specified by domain, of type specified by type\"\n    ],\n    \"socket_create_listen\": [\n        \"resource socket_create_listen(int port[, int backlog])\",\n        \"Opens a socket on port to accept connections\"\n    ],\n    \"socket_create_pair\": [\n        \"bool socket_create_pair(int domain, int type, int protocol, array &fd)\",\n        \"Creates a pair of indistinguishable sockets and stores them in fds.\"\n    ],\n    \"socket_get_option\": [\n        \"mixed socket_get_option(resource socket, int level, int optname)\",\n        \"Gets socket options for the socket\"\n    ],\n    \"socket_getpeername\": [\n        \"bool socket_getpeername(resource socket, string &addr[, int &port])\",\n        \"Queries the remote side of the given socket which may either result in host/port or in a UNIX filesystem path, dependent on its type.\"\n    ],\n    \"socket_getsockname\": [\n        \"bool socket_getsockname(resource socket, string &addr[, int &port])\",\n        \"Queries the remote side of the given socket which may either result in host/port or in a UNIX filesystem path, dependent on its type.\"\n    ],\n    \"socket_last_error\": [\n        \"int socket_last_error([resource socket])\",\n        \"Returns the last socket error (either the last used or the provided socket resource)\"\n    ],\n    \"socket_listen\": [\n        \"bool socket_listen(resource socket[, int backlog])\",\n        \"Sets the maximum number of connections allowed to be waited for on the socket specified by fd\"\n    ],\n    \"socket_read\": [\n        \"string socket_read(resource socket, int length [, int type])\",\n        \"Reads a maximum of length bytes from socket\"\n    ],\n    \"socket_recv\": [\n        \"int socket_recv(resource socket, string &buf, int len, int flags)\",\n        \"Receives data from a connected socket\"\n    ],\n    \"socket_recvfrom\": [\n        \"int socket_recvfrom(resource socket, string &buf, int len, int flags, string &name [, int &port])\",\n        \"Receives data from a socket, connected or not\"\n    ],\n    \"socket_select\": [\n        \"int socket_select(array &read_fds, array &write_fds, array &except_fds, int tv_sec[, int tv_usec])\",\n        \"Runs the select() system call on the sets mentioned with a timeout specified by tv_sec and tv_usec\"\n    ],\n    \"socket_send\": [\n        \"int socket_send(resource socket, string buf, int len, int flags)\",\n        \"Sends data to a connected socket\"\n    ],\n    \"socket_sendto\": [\n        \"int socket_sendto(resource socket, string buf, int len, int flags, string addr [, int port])\",\n        \"Sends a message to a socket, whether it is connected or not\"\n    ],\n    \"socket_set_block\": [\n        \"bool socket_set_block(resource socket)\",\n        \"Sets blocking mode on a socket resource\"\n    ],\n    \"socket_set_nonblock\": [\n        \"bool socket_set_nonblock(resource socket)\",\n        \"Sets nonblocking mode on a socket resource\"\n    ],\n    \"socket_set_option\": [\n        \"bool socket_set_option(resource socket, int level, int optname, int|array optval)\",\n        \"Sets socket options for the socket\"\n    ],\n    \"socket_shutdown\": [\n        \"bool socket_shutdown(resource socket[, int how])\",\n        \"Shuts down a socket for receiving, sending, or both.\"\n    ],\n    \"socket_strerror\": [\n        \"string socket_strerror(int errno)\",\n        \"Returns a string describing an error\"\n    ],\n    \"socket_write\": [\n        \"int socket_write(resource socket, string buf[, int length])\",\n        \"Writes the buffer to the socket resource, length is optional\"\n    ],\n    \"solid_fetch_prev\": [\n        \"bool solid_fetch_prev(resource result_id)\",\n        \"\"\n    ],\n    \"sort\": [\n        \"bool sort(array &array_arg [, int sort_flags])\",\n        \"Sort an array\"\n    ],\n    \"soundex\": [\n        \"string soundex(string str)\",\n        \"Calculate the soundex key of a string\"\n    ],\n    \"spl_autoload\": [\n        \"void spl_autoload(string class_name [, string file_extensions])\",\n        \"Default implementation for __autoload()\"\n    ],\n    \"spl_autoload_call\": [\n        \"void spl_autoload_call(string class_name)\",\n        \"Try all registerd autoload function to load the requested class\"\n    ],\n    \"spl_autoload_extensions\": [\n        \"string spl_autoload_extensions([string file_extensions])\",\n        \"Register and return default file extensions for spl_autoload\"\n    ],\n    \"spl_autoload_functions\": [\n        \"false|array spl_autoload_functions()\",\n        \"Return all registered __autoload() functionns\"\n    ],\n    \"spl_autoload_register\": [\n        \"bool spl_autoload_register([mixed autoload_function = \\\"spl_autoload\\\" [, throw = true [, prepend]]])\",\n        \"Register given function as __autoload() implementation\"\n    ],\n    \"spl_autoload_unregister\": [\n        \"bool spl_autoload_unregister(mixed autoload_function)\",\n        \"Unregister given function as __autoload() implementation\"\n    ],\n    \"spl_classes\": [\n        \"array spl_classes()\",\n        \"Return an array containing the names of all clsses and interfaces defined in SPL\"\n    ],\n    \"spl_object_hash\": [\n        \"string spl_object_hash(object obj)\",\n        \"Return hash id for given object\"\n    ],\n    \"split\": [\n        \"array split(string pattern, string string [, int limit])\",\n        \"Split string into array by regular expression\"\n    ],\n    \"spliti\": [\n        \"array spliti(string pattern, string string [, int limit])\",\n        \"Split string into array by regular expression case-insensitive\"\n    ],\n    \"sprintf\": [\n        \"string sprintf(string format [, mixed arg1 [, mixed ...]])\",\n        \"Return a formatted string\"\n    ],\n    \"sql_regcase\": [\n        \"string sql_regcase(string string)\",\n        \"Make regular expression for case insensitive match\"\n    ],\n    \"sqlite_array_query\": [\n        \"array sqlite_array_query(resource db, string query [ , int result_type [, bool decode_binary]])\",\n        \"Executes a query against a given database and returns an array of arrays.\"\n    ],\n    \"sqlite_busy_timeout\": [\n        \"void sqlite_busy_timeout(resource db, int ms)\",\n        \"Set busy timeout duration. If ms <= 0, all busy handlers are disabled.\"\n    ],\n    \"sqlite_changes\": [\n        \"int sqlite_changes(resource db)\",\n        \"Returns the number of rows that were changed by the most recent SQL statement.\"\n    ],\n    \"sqlite_close\": [\n        \"void sqlite_close(resource db)\",\n        \"Closes an open sqlite database.\"\n    ],\n    \"sqlite_column\": [\n        \"mixed sqlite_column(resource result, mixed index_or_name [, bool decode_binary])\",\n        \"Fetches a column from the current row of a result set.\"\n    ],\n    \"sqlite_create_aggregate\": [\n        \"bool sqlite_create_aggregate(resource db, string funcname, mixed step_func, mixed finalize_func[, long num_args])\",\n        \"Registers an aggregate function for queries.\"\n    ],\n    \"sqlite_create_function\": [\n        \"bool sqlite_create_function(resource db, string funcname, mixed callback[, long num_args])\",\n        \"Registers a \\\"regular\\\" function for queries.\"\n    ],\n    \"sqlite_current\": [\n        \"array sqlite_current(resource result [, int result_type [, bool decode_binary]])\",\n        \"Fetches the current row from a result set as an array.\"\n    ],\n    \"sqlite_error_string\": [\n        \"string sqlite_error_string(int error_code)\",\n        \"Returns the textual description of an error code.\"\n    ],\n    \"sqlite_escape_string\": [\n        \"string sqlite_escape_string(string item)\",\n        \"Escapes a string for use as a query parameter.\"\n    ],\n    \"sqlite_exec\": [\n        \"boolean sqlite_exec(string query, resource db[, string &error_message])\",\n        \"Executes a result-less query against a given database\"\n    ],\n    \"sqlite_factory\": [\n        \"object sqlite_factory(string filename [, int mode [, string &error_message]])\",\n        \"Opens a SQLite database and creates an object for it. Will create the database if it does not exist.\"\n    ],\n    \"sqlite_fetch_all\": [\n        \"array sqlite_fetch_all(resource result [, int result_type [, bool decode_binary]])\",\n        \"Fetches all rows from a result set as an array of arrays.\"\n    ],\n    \"sqlite_fetch_array\": [\n        \"array sqlite_fetch_array(resource result [, int result_type [, bool decode_binary]])\",\n        \"Fetches the next row from a result set as an array.\"\n    ],\n    \"sqlite_fetch_column_types\": [\n        \"resource sqlite_fetch_column_types(string table_name, resource db [, int result_type])\",\n        \"Return an array of column types from a particular table.\"\n    ],\n    \"sqlite_fetch_object\": [\n        \"object sqlite_fetch_object(resource result [, string class_name [, NULL|array ctor_params [, bool decode_binary]]])\",\n        \"Fetches the next row from a result set as an object.\"\n    ],\n    \"sqlite_fetch_single\": [\n        \"string sqlite_fetch_single(resource result [, bool decode_binary])\",\n        \"Fetches the first column of a result set as a string.\"\n    ],\n    \"sqlite_field_name\": [\n        \"string sqlite_field_name(resource result, int field_index)\",\n        \"Returns the name of a particular field of a result set.\"\n    ],\n    \"sqlite_has_prev\": [\n        \"bool sqlite_has_prev(resource result)\",\n        \"* Returns whether a previous row is available.\"\n    ],\n    \"sqlite_key\": [\n        \"int sqlite_key(resource result)\",\n        \"Return the current row index of a buffered result.\"\n    ],\n    \"sqlite_last_error\": [\n        \"int sqlite_last_error(resource db)\",\n        \"Returns the error code of the last error for a database.\"\n    ],\n    \"sqlite_last_insert_rowid\": [\n        \"int sqlite_last_insert_rowid(resource db)\",\n        \"Returns the rowid of the most recently inserted row.\"\n    ],\n    \"sqlite_libencoding\": [\n        \"string sqlite_libencoding()\",\n        \"Returns the encoding (iso8859 or UTF-8) of the linked SQLite library.\"\n    ],\n    \"sqlite_libversion\": [\n        \"string sqlite_libversion()\",\n        \"Returns the version of the linked SQLite library.\"\n    ],\n    \"sqlite_next\": [\n        \"bool sqlite_next(resource result)\",\n        \"Seek to the next row number of a result set.\"\n    ],\n    \"sqlite_num_fields\": [\n        \"int sqlite_num_fields(resource result)\",\n        \"Returns the number of fields in a result set.\"\n    ],\n    \"sqlite_num_rows\": [\n        \"int sqlite_num_rows(resource result)\",\n        \"Returns the number of rows in a buffered result set.\"\n    ],\n    \"sqlite_open\": [\n        \"resource sqlite_open(string filename [, int mode [, string &error_message]])\",\n        \"Opens a SQLite database. Will create the database if it does not exist.\"\n    ],\n    \"sqlite_popen\": [\n        \"resource sqlite_popen(string filename [, int mode [, string &error_message]])\",\n        \"Opens a persistent handle to a SQLite database. Will create the database if it does not exist.\"\n    ],\n    \"sqlite_prev\": [\n        \"bool sqlite_prev(resource result)\",\n        \"* Seek to the previous row number of a result set.\"\n    ],\n    \"sqlite_query\": [\n        \"resource sqlite_query(string query, resource db [, int result_type [, string &error_message]])\",\n        \"Executes a query against a given database and returns a result handle.\"\n    ],\n    \"sqlite_rewind\": [\n        \"bool sqlite_rewind(resource result)\",\n        \"Seek to the first row number of a buffered result set.\"\n    ],\n    \"sqlite_seek\": [\n        \"bool sqlite_seek(resource result, int row)\",\n        \"Seek to a particular row number of a buffered result set.\"\n    ],\n    \"sqlite_single_query\": [\n        \"array sqlite_single_query(resource db, string query [, bool first_row_only [, bool decode_binary]])\",\n        \"Executes a query and returns either an array for one single column or the value of the first row.\"\n    ],\n    \"sqlite_udf_decode_binary\": [\n        \"string sqlite_udf_decode_binary(string data)\",\n        \"Decode binary encoding on a string parameter passed to an UDF.\"\n    ],\n    \"sqlite_udf_encode_binary\": [\n        \"string sqlite_udf_encode_binary(string data)\",\n        \"Apply binary encoding (if required) to a string to return from an UDF.\"\n    ],\n    \"sqlite_unbuffered_query\": [\n        \"resource sqlite_unbuffered_query(string query, resource db [ , int result_type [, string &error_message]])\",\n        \"Executes a query that does not prefetch and buffer all data.\"\n    ],\n    \"sqlite_valid\": [\n        \"bool sqlite_valid(resource result)\",\n        \"Returns whether more rows are available.\"\n    ],\n    \"sqrt\": [\n        \"float sqrt(float number)\",\n        \"Returns the square root of the number\"\n    ],\n    \"srand\": [\n        \"void srand([int seed])\",\n        \"Seeds random number generator\"\n    ],\n    \"sscanf\": [\n        \"mixed sscanf(string str, string format [, string ...])\",\n        \"Implements an ANSI C compatible sscanf\"\n    ],\n    \"stat\": [\n        \"array stat(string filename)\",\n        \"Give information about a file\"\n    ],\n    \"str_getcsv\": [\n        \"array str_getcsv(string input[, string delimiter[, string enclosure[, string escape]]])\",\n        \"Parse a CSV string into an array\"\n    ],\n    \"str_ireplace\": [\n        \"mixed str_ireplace(mixed search, mixed replace, mixed subject [, int &replace_count])\",\n        \"Replaces all occurrences of search in haystack with replace / case-insensitive\"\n    ],\n    \"str_pad\": [\n        \"string str_pad(string input, int pad_length [, string pad_string [, int pad_type]])\",\n        \"Returns input string padded on the left or right to specified length with pad_string\"\n    ],\n    \"str_repeat\": [\n        \"string str_repeat(string input, int mult)\",\n        \"Returns the input string repeat mult times\"\n    ],\n    \"str_replace\": [\n        \"mixed str_replace(mixed search, mixed replace, mixed subject [, int &replace_count])\",\n        \"Replaces all occurrences of search in haystack with replace\"\n    ],\n    \"str_rot13\": [\n        \"string str_rot13(string str)\",\n        \"Perform the rot13 transform on a string\"\n    ],\n    \"str_shuffle\": [\n        \"void str_shuffle(string str)\",\n        \"Shuffles string. One permutation of all possible is created\"\n    ],\n    \"str_split\": [\n        \"array str_split(string str [, int split_length])\",\n        \"Convert a string to an array. If split_length is specified, break the string down into chunks each split_length characters long.\"\n    ],\n    \"str_word_count\": [\n        \"mixed str_word_count(string str, [int format [, string charlist]])\",\n        \"Counts the number of words inside a string. If format of 1 is specified,     then the function will return an array containing all the words     found inside the string. If format of 2 is specified, then the function     will return an associated array where the position of the word is the key     and the word itself is the value.          For the purpose of this function, 'word' is defined as a locale dependent     string containing alphabetic characters, which also may contain, but not start     with \\\"'\\\" and \\\"-\\\" characters.\"\n    ],\n    \"strcasecmp\": [\n        \"int strcasecmp(string str1, string str2)\",\n        \"Binary safe case-insensitive string comparison\"\n    ],\n    \"strchr\": [\n        \"string strchr(string haystack, string needle)\",\n        \"An alias for strstr\"\n    ],\n    \"strcmp\": [\n        \"int strcmp(string str1, string str2)\",\n        \"Binary safe string comparison\"\n    ],\n    \"strcoll\": [\n        \"int strcoll(string str1, string str2)\",\n        \"Compares two strings using the current locale\"\n    ],\n    \"strcspn\": [\n        \"int strcspn(string str, string mask [, start [, len]])\",\n        \"Finds length of initial segment consisting entirely of characters not found in mask. If start or/and length is provide works like strcspn(substr($s,$start,$len),$bad_chars)\"\n    ],\n    \"stream_bucket_append\": [\n        \"void stream_bucket_append(resource brigade, resource bucket)\",\n        \"Append bucket to brigade\"\n    ],\n    \"stream_bucket_make_writeable\": [\n        \"object stream_bucket_make_writeable(resource brigade)\",\n        \"Return a bucket object from the brigade for operating on\"\n    ],\n    \"stream_bucket_new\": [\n        \"resource stream_bucket_new(resource stream, string buffer)\",\n        \"Create a new bucket for use on the current stream\"\n    ],\n    \"stream_bucket_prepend\": [\n        \"void stream_bucket_prepend(resource brigade, resource bucket)\",\n        \"Prepend bucket to brigade\"\n    ],\n    \"stream_context_create\": [\n        \"resource stream_context_create([array options[, array params]])\",\n        \"Create a file context and optionally set parameters\"\n    ],\n    \"stream_context_get_default\": [\n        \"resource stream_context_get_default([array options])\",\n        \"Get a handle on the default file/stream context and optionally set parameters\"\n    ],\n    \"stream_context_get_options\": [\n        \"array stream_context_get_options(resource context|resource stream)\",\n        \"Retrieve options for a stream/wrapper/context\"\n    ],\n    \"stream_context_get_params\": [\n        \"array stream_context_get_params(resource context|resource stream)\",\n        \"Get parameters of a file context\"\n    ],\n    \"stream_context_set_default\": [\n        \"resource stream_context_set_default(array options)\",\n        \"Set default file/stream context, returns the context as a resource\"\n    ],\n    \"stream_context_set_option\": [\n        \"bool stream_context_set_option(resource context|resource stream, string wrappername, string optionname, mixed value)\",\n        \"Set an option for a wrapper\"\n    ],\n    \"stream_context_set_params\": [\n        \"bool stream_context_set_params(resource context|resource stream, array options)\",\n        \"Set parameters for a file context\"\n    ],\n    \"stream_copy_to_stream\": [\n        \"long stream_copy_to_stream(resource source, resource dest [, long maxlen [, long pos]])\",\n        \"Reads up to maxlen bytes from source stream and writes them to dest stream.\"\n    ],\n    \"stream_filter_append\": [\n        \"resource stream_filter_append(resource stream, string filtername[, int read_write[, string filterparams]])\",\n        \"Append a filter to a stream\"\n    ],\n    \"stream_filter_prepend\": [\n        \"resource stream_filter_prepend(resource stream, string filtername[, int read_write[, string filterparams]])\",\n        \"Prepend a filter to a stream\"\n    ],\n    \"stream_filter_register\": [\n        \"bool stream_filter_register(string filtername, string classname)\",\n        \"Registers a custom filter handler class\"\n    ],\n    \"stream_filter_remove\": [\n        \"bool stream_filter_remove(resource stream_filter)\",\n        \"Flushes any data in the filter's internal buffer, removes it from the chain, and frees the resource\"\n    ],\n    \"stream_get_contents\": [\n        \"string stream_get_contents(resource source [, long maxlen [, long offset]])\",\n        \"Reads all remaining bytes (or up to maxlen bytes) from a stream and returns them as a string.\"\n    ],\n    \"stream_get_filters\": [\n        \"array stream_get_filters(void)\",\n        \"Returns a list of registered filters\"\n    ],\n    \"stream_get_line\": [\n        \"string stream_get_line(resource stream, int maxlen [, string ending])\",\n        \"Read up to maxlen bytes from a stream or until the ending string is found\"\n    ],\n    \"stream_get_meta_data\": [\n        \"array stream_get_meta_data(resource fp)\",\n        \"Retrieves header/meta data from streams/file pointers\"\n    ],\n    \"stream_get_transports\": [\n        \"array stream_get_transports()\",\n        \"Retrieves list of registered socket transports\"\n    ],\n    \"stream_get_wrappers\": [\n        \"array stream_get_wrappers()\",\n        \"Retrieves list of registered stream wrappers\"\n    ],\n    \"stream_is_local\": [\n        \"bool stream_is_local(resource stream|string url)\",\n        \"\"\n    ],\n    \"stream_resolve_include_path\": [\n        \"string stream_resolve_include_path(string filename)\",\n        \"Determine what file will be opened by calls to fopen() with a relative path\"\n    ],\n    \"stream_select\": [\n        \"int stream_select(array &read_streams, array &write_streams, array &except_streams, int tv_sec[, int tv_usec])\",\n        \"Runs the select() system call on the sets of streams with a timeout specified by tv_sec and tv_usec\"\n    ],\n    \"stream_set_blocking\": [\n        \"bool stream_set_blocking(resource socket, int mode)\",\n        \"Set blocking/non-blocking mode on a socket or stream\"\n    ],\n    \"stream_set_timeout\": [\n        \"bool stream_set_timeout(resource stream, int seconds [, int microseconds])\",\n        \"Set timeout on stream read to seconds + microseonds\"\n    ],\n    \"stream_set_write_buffer\": [\n        \"int stream_set_write_buffer(resource fp, int buffer)\",\n        \"Set file write buffer\"\n    ],\n    \"stream_socket_accept\": [\n        \"resource stream_socket_accept(resource serverstream, [ double timeout [, string &peername ]])\",\n        \"Accept a client connection from a server socket\"\n    ],\n    \"stream_socket_client\": [\n        \"resource stream_socket_client(string remoteaddress [, long &errcode [, string &errstring [, double timeout [, long flags [, resource context]]]]])\",\n        \"Open a client connection to a remote address\"\n    ],\n    \"stream_socket_enable_crypto\": [\n        \"int stream_socket_enable_crypto(resource stream, bool enable [, int cryptokind [, resource sessionstream]])\",\n        \"Enable or disable a specific kind of crypto on the stream\"\n    ],\n    \"stream_socket_get_name\": [\n        \"string stream_socket_get_name(resource stream, bool want_peer)\",\n        \"Returns either the locally bound or remote name for a socket stream\"\n    ],\n    \"stream_socket_pair\": [\n        \"array stream_socket_pair(int domain, int type, int protocol)\",\n        \"Creates a pair of connected, indistinguishable socket streams\"\n    ],\n    \"stream_socket_recvfrom\": [\n        \"string stream_socket_recvfrom(resource stream, long amount [, long flags [, string &remote_addr]])\",\n        \"Receives data from a socket stream\"\n    ],\n    \"stream_socket_sendto\": [\n        \"long stream_socket_sendto(resouce stream, string data [, long flags [, string target_addr]])\",\n        \"Send data to a socket stream.  If target_addr is specified it must be in dotted quad (or [ipv6]) format\"\n    ],\n    \"stream_socket_server\": [\n        \"resource stream_socket_server(string localaddress [, long &errcode [, string &errstring [, long flags [, resource context]]]])\",\n        \"Create a server socket bound to localaddress\"\n    ],\n    \"stream_socket_shutdown\": [\n        \"int stream_socket_shutdown(resource stream, int how)\",\n        \"causes all or part of a full-duplex connection on the socket associated  with stream to be shut down.  If how is SHUT_RD,  further receptions will  be disallowed. If how is SHUT_WR, further transmissions will be disallowed.  If how is SHUT_RDWR,  further  receptions and transmissions will be  disallowed.\"\n    ],\n    \"stream_supports_lock\": [\n        \"bool stream_supports_lock(resource stream)\",\n        \"Tells wether the stream supports locking through flock().\"\n    ],\n    \"stream_wrapper_register\": [\n        \"bool stream_wrapper_register(string protocol, string classname[, integer flags])\",\n        \"Registers a custom URL protocol handler class\"\n    ],\n    \"stream_wrapper_restore\": [\n        \"bool stream_wrapper_restore(string protocol)\",\n        \"Restore the original protocol handler, overriding if necessary\"\n    ],\n    \"stream_wrapper_unregister\": [\n        \"bool stream_wrapper_unregister(string protocol)\",\n        \"Unregister a wrapper for the life of the current request.\"\n    ],\n    \"strftime\": [\n        \"string strftime(string format [, int timestamp])\",\n        \"Format a local time/date according to locale settings\"\n    ],\n    \"strip_tags\": [\n        \"string strip_tags(string str [, string allowable_tags])\",\n        \"Strips HTML and PHP tags from a string\"\n    ],\n    \"stripcslashes\": [\n        \"string stripcslashes(string str)\",\n        \"Strips backslashes from a string. Uses C-style conventions\"\n    ],\n    \"stripos\": [\n        \"int stripos(string haystack, string needle [, int offset])\",\n        \"Finds position of first occurrence of a string within another, case insensitive\"\n    ],\n    \"stripslashes\": [\n        \"string stripslashes(string str)\",\n        \"Strips backslashes from a string\"\n    ],\n    \"stristr\": [\n        \"string stristr(string haystack, string needle[, bool part])\",\n        \"Finds first occurrence of a string within another, case insensitive\"\n    ],\n    \"strlen\": [\n        \"int strlen(string str)\",\n        \"Get string length\"\n    ],\n    \"strnatcasecmp\": [\n        \"int strnatcasecmp(string s1, string s2)\",\n        \"Returns the result of case-insensitive string comparison using 'natural' algorithm\"\n    ],\n    \"strnatcmp\": [\n        \"int strnatcmp(string s1, string s2)\",\n        \"Returns the result of string comparison using 'natural' algorithm\"\n    ],\n    \"strncasecmp\": [\n        \"int strncasecmp(string str1, string str2, int len)\",\n        \"Binary safe string comparison\"\n    ],\n    \"strncmp\": [\n        \"int strncmp(string str1, string str2, int len)\",\n        \"Binary safe string comparison\"\n    ],\n    \"strpbrk\": [\n        \"array strpbrk(string haystack, string char_list)\",\n        \"Search a string for any of a set of characters\"\n    ],\n    \"strpos\": [\n        \"int strpos(string haystack, string needle [, int offset])\",\n        \"Finds position of first occurrence of a string within another\"\n    ],\n    \"strptime\": [\n        \"string strptime(string timestamp, string format)\",\n        \"Parse a time/date generated with strftime()\"\n    ],\n    \"strrchr\": [\n        \"string strrchr(string haystack, string needle)\",\n        \"Finds the last occurrence of a character in a string within another\"\n    ],\n    \"strrev\": [\n        \"string strrev(string str)\",\n        \"Reverse a string\"\n    ],\n    \"strripos\": [\n        \"int strripos(string haystack, string needle [, int offset])\",\n        \"Finds position of last occurrence of a string within another string\"\n    ],\n    \"strrpos\": [\n        \"int strrpos(string haystack, string needle [, int offset])\",\n        \"Finds position of last occurrence of a string within another string\"\n    ],\n    \"strspn\": [\n        \"int strspn(string str, string mask [, start [, len]])\",\n        \"Finds length of initial segment consisting entirely of characters found in mask. If start or/and length is provided works like strspn(substr($s,$start,$len),$good_chars)\"\n    ],\n    \"strstr\": [\n        \"string strstr(string haystack, string needle[, bool part])\",\n        \"Finds first occurrence of a string within another\"\n    ],\n    \"strtok\": [\n        \"string strtok([string str,] string token)\",\n        \"Tokenize a string\"\n    ],\n    \"strtolower\": [\n        \"string strtolower(string str)\",\n        \"Makes a string lowercase\"\n    ],\n    \"strtotime\": [\n        \"int strtotime(string time [, int now ])\",\n        \"Convert string representation of date and time to a timestamp\"\n    ],\n    \"strtoupper\": [\n        \"string strtoupper(string str)\",\n        \"Makes a string uppercase\"\n    ],\n    \"strtr\": [\n        \"string strtr(string str, string from[, string to])\",\n        \"Translates characters in str using given translation tables\"\n    ],\n    \"strval\": [\n        \"string strval(mixed var)\",\n        \"Get the string value of a variable\"\n    ],\n    \"substr\": [\n        \"string substr(string str, int start [, int length])\",\n        \"Returns part of a string\"\n    ],\n    \"substr_compare\": [\n        \"int substr_compare(string main_str, string str, int offset [, int length [, bool case_sensitivity]])\",\n        \"Binary safe optionally case insensitive comparison of 2 strings from an offset, up to length characters\"\n    ],\n    \"substr_count\": [\n        \"int substr_count(string haystack, string needle [, int offset [, int length]])\",\n        \"Returns the number of times a substring occurs in the string\"\n    ],\n    \"substr_replace\": [\n        \"mixed substr_replace(mixed str, mixed repl, mixed start [, mixed length])\",\n        \"Replaces part of a string with another string\"\n    ],\n    \"sybase_affected_rows\": [\n        \"int sybase_affected_rows([resource link_id])\",\n        \"Get number of affected rows in last query\"\n    ],\n    \"sybase_close\": [\n        \"bool sybase_close([resource link_id])\",\n        \"Close Sybase connection\"\n    ],\n    \"sybase_connect\": [\n        \"int sybase_connect([string host [, string user [, string password [, string charset [, string appname [, bool new]]]]]])\",\n        \"Open Sybase server connection\"\n    ],\n    \"sybase_data_seek\": [\n        \"bool sybase_data_seek(resource result, int offset)\",\n        \"Move internal row pointer\"\n    ],\n    \"sybase_deadlock_retry_count\": [\n        \"void sybase_deadlock_retry_count(int retry_count)\",\n        \"Sets deadlock retry count\"\n    ],\n    \"sybase_fetch_array\": [\n        \"array sybase_fetch_array(resource result)\",\n        \"Fetch row as array\"\n    ],\n    \"sybase_fetch_assoc\": [\n        \"array sybase_fetch_assoc(resource result)\",\n        \"Fetch row as array without numberic indices\"\n    ],\n    \"sybase_fetch_field\": [\n        \"object sybase_fetch_field(resource result [, int offset])\",\n        \"Get field information\"\n    ],\n    \"sybase_fetch_object\": [\n        \"object sybase_fetch_object(resource result [, mixed object])\",\n        \"Fetch row as object\"\n    ],\n    \"sybase_fetch_row\": [\n        \"array sybase_fetch_row(resource result)\",\n        \"Get row as enumerated array\"\n    ],\n    \"sybase_field_seek\": [\n        \"bool sybase_field_seek(resource result, int offset)\",\n        \"Set field offset\"\n    ],\n    \"sybase_free_result\": [\n        \"bool sybase_free_result(resource result)\",\n        \"Free result memory\"\n    ],\n    \"sybase_get_last_message\": [\n        \"string sybase_get_last_message(void)\",\n        \"Returns the last message from server (over min_message_severity)\"\n    ],\n    \"sybase_min_client_severity\": [\n        \"void sybase_min_client_severity(int severity)\",\n        \"Sets minimum client severity\"\n    ],\n    \"sybase_min_server_severity\": [\n        \"void sybase_min_server_severity(int severity)\",\n        \"Sets minimum server severity\"\n    ],\n    \"sybase_num_fields\": [\n        \"int sybase_num_fields(resource result)\",\n        \"Get number of fields in result\"\n    ],\n    \"sybase_num_rows\": [\n        \"int sybase_num_rows(resource result)\",\n        \"Get number of rows in result\"\n    ],\n    \"sybase_pconnect\": [\n        \"int sybase_pconnect([string host [, string user [, string password [, string charset [, string appname]]]]])\",\n        \"Open persistent Sybase connection\"\n    ],\n    \"sybase_query\": [\n        \"int sybase_query(string query [, resource link_id])\",\n        \"Send Sybase query\"\n    ],\n    \"sybase_result\": [\n        \"string sybase_result(resource result, int row, mixed field)\",\n        \"Get result data\"\n    ],\n    \"sybase_select_db\": [\n        \"bool sybase_select_db(string database [, resource link_id])\",\n        \"Select Sybase database\"\n    ],\n    \"sybase_set_message_handler\": [\n        \"bool sybase_set_message_handler(mixed error_func [, resource connection])\",\n        \"Set the error handler, to be called when a server message is raised.     If error_func is NULL the handler will be deleted\"\n    ],\n    \"sybase_unbuffered_query\": [\n        \"int sybase_unbuffered_query(string query [, resource link_id])\",\n        \"Send Sybase query\"\n    ],\n    \"symlink\": [\n        \"int symlink(string target, string link)\",\n        \"Create a symbolic link\"\n    ],\n    \"sys_get_temp_dir\": [\n        \"string sys_get_temp_dir()\",\n        \"Returns directory path used for temporary files\"\n    ],\n    \"sys_getloadavg\": [\n        \"array sys_getloadavg()\",\n        \"\"\n    ],\n    \"syslog\": [\n        \"bool syslog(int priority, string message)\",\n        \"Generate a system log message\"\n    ],\n    \"system\": [\n        \"int system(string command [, int &return_value])\",\n        \"Execute an external program and display output\"\n    ],\n    \"tan\": [\n        \"float tan(float number)\",\n        \"Returns the tangent of the number in radians\"\n    ],\n    \"tanh\": [\n        \"float tanh(float number)\",\n        \"Returns the hyperbolic tangent of the number, defined as sinh(number)/cosh(number)\"\n    ],\n    \"tempnam\": [\n        \"string tempnam(string dir, string prefix)\",\n        \"Create a unique filename in a directory\"\n    ],\n    \"textdomain\": [\n        \"string textdomain(string domain)\",\n        \"Set the textdomain to \\\"domain\\\". Returns the current domain\"\n    ],\n    \"tidy_access_count\": [\n        \"int tidy_access_count()\",\n        \"Returns the Number of Tidy accessibility warnings encountered for specified document.\"\n    ],\n    \"tidy_clean_repair\": [\n        \"boolean tidy_clean_repair()\",\n        \"Execute configured cleanup and repair operations on parsed markup\"\n    ],\n    \"tidy_config_count\": [\n        \"int tidy_config_count()\",\n        \"Returns the Number of Tidy configuration errors encountered for specified document.\"\n    ],\n    \"tidy_diagnose\": [\n        \"boolean tidy_diagnose()\",\n        \"Run configured diagnostics on parsed and repaired markup.\"\n    ],\n    \"tidy_error_count\": [\n        \"int tidy_error_count()\",\n        \"Returns the Number of Tidy errors encountered for specified document.\"\n    ],\n    \"tidy_get_body\": [\n        \"TidyNode tidy_get_body(resource tidy)\",\n        \"Returns a TidyNode Object starting from the <BODY> tag of the tidy parse tree\"\n    ],\n    \"tidy_get_config\": [\n        \"array tidy_get_config()\",\n        \"Get current Tidy configuarion\"\n    ],\n    \"tidy_get_error_buffer\": [\n        \"string tidy_get_error_buffer([boolean detailed])\",\n        \"Return warnings and errors which occured parsing the specified document\"\n    ],\n    \"tidy_get_head\": [\n        \"TidyNode tidy_get_head()\",\n        \"Returns a TidyNode Object starting from the <HEAD> tag of the tidy parse tree\"\n    ],\n    \"tidy_get_html\": [\n        \"TidyNode tidy_get_html()\",\n        \"Returns a TidyNode Object starting from the <HTML> tag of the tidy parse tree\"\n    ],\n    \"tidy_get_html_ver\": [\n        \"int tidy_get_html_ver()\",\n        \"Get the Detected HTML version for the specified document.\"\n    ],\n    \"tidy_get_opt_doc\": [\n        \"string tidy_get_opt_doc(tidy resource, string optname)\",\n        \"Returns the documentation for the given option name\"\n    ],\n    \"tidy_get_output\": [\n        \"string tidy_get_output()\",\n        \"Return a string representing the parsed tidy markup\"\n    ],\n    \"tidy_get_release\": [\n        \"string tidy_get_release()\",\n        \"Get release date (version) for Tidy library\"\n    ],\n    \"tidy_get_root\": [\n        \"TidyNode tidy_get_root()\",\n        \"Returns a TidyNode Object representing the root of the tidy parse tree\"\n    ],\n    \"tidy_get_status\": [\n        \"int tidy_get_status()\",\n        \"Get status of specfied document.\"\n    ],\n    \"tidy_getopt\": [\n        \"mixed tidy_getopt(string option)\",\n        \"Returns the value of the specified configuration option for the tidy document.\"\n    ],\n    \"tidy_is_xhtml\": [\n        \"boolean tidy_is_xhtml()\",\n        \"Indicates if the document is a XHTML document.\"\n    ],\n    \"tidy_is_xml\": [\n        \"boolean tidy_is_xml()\",\n        \"Indicates if the document is a generic (non HTML/XHTML) XML document.\"\n    ],\n    \"tidy_parse_file\": [\n        \"boolean tidy_parse_file(string file [, mixed config_options [, string encoding [, bool use_include_path]]])\",\n        \"Parse markup in file or URI\"\n    ],\n    \"tidy_parse_string\": [\n        \"bool tidy_parse_string(string input [, mixed config_options [, string encoding]])\",\n        \"Parse a document stored in a string\"\n    ],\n    \"tidy_repair_file\": [\n        \"boolean tidy_repair_file(string filename [, mixed config_file [, string encoding [, bool use_include_path]]])\",\n        \"Repair a file using an optionally provided configuration file\"\n    ],\n    \"tidy_repair_string\": [\n        \"boolean tidy_repair_string(string data [, mixed config_file [, string encoding]])\",\n        \"Repair a string using an optionally provided configuration file\"\n    ],\n    \"tidy_warning_count\": [\n        \"int tidy_warning_count()\",\n        \"Returns the Number of Tidy warnings encountered for specified document.\"\n    ],\n    \"time\": [\n        \"int time(void)\",\n        \"Return current UNIX timestamp\"\n    ],\n    \"time_nanosleep\": [\n        \"mixed time_nanosleep(long seconds, long nanoseconds)\",\n        \"Delay for a number of seconds and nano seconds\"\n    ],\n    \"time_sleep_until\": [\n        \"mixed time_sleep_until(float timestamp)\",\n        \"Make the script sleep until the specified time\"\n    ],\n    \"timezone_abbreviations_list\": [\n        \"array timezone_abbreviations_list()\",\n        \"Returns associative array containing dst, offset and the timezone name\"\n    ],\n    \"timezone_identifiers_list\": [\n        \"array timezone_identifiers_list([long what[, string country]])\",\n        \"Returns numerically index array with all timezone identifiers.\"\n    ],\n    \"timezone_location_get\": [\n        \"array timezone_location_get()\",\n        \"Returns location information for a timezone, including country code, latitude/longitude and comments\"\n    ],\n    \"timezone_name_from_abbr\": [\n        \"string timezone_name_from_abbr(string abbr[, long gmtOffset[, long isdst]])\",\n        \"Returns the timezone name from abbrevation\"\n    ],\n    \"timezone_name_get\": [\n        \"string timezone_name_get(DateTimeZone object)\",\n        \"Returns the name of the timezone.\"\n    ],\n    \"timezone_offset_get\": [\n        \"long timezone_offset_get(DateTimeZone object, DateTime object)\",\n        \"Returns the timezone offset.\"\n    ],\n    \"timezone_open\": [\n        \"DateTimeZone timezone_open(string timezone)\",\n        \"Returns new DateTimeZone object\"\n    ],\n    \"timezone_transitions_get\": [\n        \"array timezone_transitions_get(DateTimeZone object [, long timestamp_begin [, long timestamp_end ]])\",\n        \"Returns numerically indexed array containing associative array for all transitions in the specified range for the timezone.\"\n    ],\n    \"timezone_version_get\": [\n        \"array timezone_version_get()\",\n        \"Returns the Olson database version number.\"\n    ],\n    \"tmpfile\": [\n        \"resource tmpfile(void)\",\n        \"Create a temporary file that will be deleted automatically after use\"\n    ],\n    \"token_get_all\": [\n        \"array token_get_all(string source)\",\n        \"\"\n    ],\n    \"token_name\": [\n        \"string token_name(int type)\",\n        \"\"\n    ],\n    \"touch\": [\n        \"bool touch(string filename [, int time [, int atime]])\",\n        \"Set modification time of file\"\n    ],\n    \"trigger_error\": [\n        \"void trigger_error(string messsage [, int error_type])\",\n        \"Generates a user-level error/warning/notice message\"\n    ],\n    \"trim\": [\n        \"string trim(string str [, string character_mask])\",\n        \"Strips whitespace from the beginning and end of a string\"\n    ],\n    \"uasort\": [\n        \"bool uasort(array array_arg, string cmp_function)\",\n        \"Sort an array with a user-defined comparison function and maintain index association\"\n    ],\n    \"ucfirst\": [\n        \"string ucfirst(string str)\",\n        \"Make a string's first character lowercase\"\n    ],\n    \"ucwords\": [\n        \"string ucwords(string str)\",\n        \"Uppercase the first character of every word in a string\"\n    ],\n    \"uksort\": [\n        \"bool uksort(array array_arg, string cmp_function)\",\n        \"Sort an array by keys using a user-defined comparison function\"\n    ],\n    \"umask\": [\n        \"int umask([int mask])\",\n        \"Return or change the umask\"\n    ],\n    \"uniqid\": [\n        \"string uniqid([string prefix [, bool more_entropy]])\",\n        \"Generates a unique ID\"\n    ],\n    \"unixtojd\": [\n        \"int unixtojd([int timestamp])\",\n        \"Convert UNIX timestamp to Julian Day\"\n    ],\n    \"unlink\": [\n        \"bool unlink(string filename[, context context])\",\n        \"Delete a file\"\n    ],\n    \"unpack\": [\n        \"array unpack(string format, string input)\",\n        \"Unpack binary string into named array elements according to format argument\"\n    ],\n    \"unregister_tick_function\": [\n        \"void unregister_tick_function(string function_name)\",\n        \"Unregisters a tick callback function\"\n    ],\n    \"unserialize\": [\n        \"mixed unserialize(string variable_representation)\",\n        \"Takes a string representation of variable and recreates it\"\n    ],\n    \"unset\": [\n        \"void unset (mixed var [, mixed var])\",\n        \"Unset a given variable\"\n    ],\n    \"urldecode\": [\n        \"string urldecode(string str)\",\n        \"Decodes URL-encoded string\"\n    ],\n    \"urlencode\": [\n        \"string urlencode(string str)\",\n        \"URL-encodes string\"\n    ],\n    \"usleep\": [\n        \"void usleep(int micro_seconds)\",\n        \"Delay for a given number of micro seconds\"\n    ],\n    \"usort\": [\n        \"bool usort(array array_arg, string cmp_function)\",\n        \"Sort an array by values using a user-defined comparison function\"\n    ],\n    \"utf8_decode\": [\n        \"string utf8_decode(string data)\",\n        \"Converts a UTF-8 encoded string to ISO-8859-1\"\n    ],\n    \"utf8_encode\": [\n        \"string utf8_encode(string data)\",\n        \"Encodes an ISO-8859-1 string to UTF-8\"\n    ],\n    \"var_dump\": [\n        \"void var_dump(mixed var)\",\n        \"Dumps a string representation of variable to output\"\n    ],\n    \"var_export\": [\n        \"mixed var_export(mixed var [, bool return])\",\n        \"Outputs or returns a string representation of a variable\"\n    ],\n    \"variant_abs\": [\n        \"mixed variant_abs(mixed left)\",\n        \"Returns the absolute value of a variant\"\n    ],\n    \"variant_add\": [\n        \"mixed variant_add(mixed left, mixed right)\",\n        \"\\\"Adds\\\" two variant values together and returns the result\"\n    ],\n    \"variant_and\": [\n        \"mixed variant_and(mixed left, mixed right)\",\n        \"performs a bitwise AND operation between two variants and returns the result\"\n    ],\n    \"variant_cast\": [\n        \"object variant_cast(object variant, int type)\",\n        \"Convert a variant into a new variant object of another type\"\n    ],\n    \"variant_cat\": [\n        \"mixed variant_cat(mixed left, mixed right)\",\n        \"concatenates two variant values together and returns the result\"\n    ],\n    \"variant_cmp\": [\n        \"int variant_cmp(mixed left, mixed right [, int lcid [, int flags]])\",\n        \"Compares two variants\"\n    ],\n    \"variant_date_from_timestamp\": [\n        \"object variant_date_from_timestamp(int timestamp)\",\n        \"Returns a variant date representation of a unix timestamp\"\n    ],\n    \"variant_date_to_timestamp\": [\n        \"int variant_date_to_timestamp(object variant)\",\n        \"Converts a variant date/time value to unix timestamp\"\n    ],\n    \"variant_div\": [\n        \"mixed variant_div(mixed left, mixed right)\",\n        \"Returns the result from dividing two variants\"\n    ],\n    \"variant_eqv\": [\n        \"mixed variant_eqv(mixed left, mixed right)\",\n        \"Performs a bitwise equivalence on two variants\"\n    ],\n    \"variant_fix\": [\n        \"mixed variant_fix(mixed left)\",\n        \"Returns the integer part ? of a variant\"\n    ],\n    \"variant_get_type\": [\n        \"int variant_get_type(object variant)\",\n        \"Returns the VT_XXX type code for a variant\"\n    ],\n    \"variant_idiv\": [\n        \"mixed variant_idiv(mixed left, mixed right)\",\n        \"Converts variants to integers and then returns the result from dividing them\"\n    ],\n    \"variant_imp\": [\n        \"mixed variant_imp(mixed left, mixed right)\",\n        \"Performs a bitwise implication on two variants\"\n    ],\n    \"variant_int\": [\n        \"mixed variant_int(mixed left)\",\n        \"Returns the integer portion of a variant\"\n    ],\n    \"variant_mod\": [\n        \"mixed variant_mod(mixed left, mixed right)\",\n        \"Divides two variants and returns only the remainder\"\n    ],\n    \"variant_mul\": [\n        \"mixed variant_mul(mixed left, mixed right)\",\n        \"multiplies the values of the two variants and returns the result\"\n    ],\n    \"variant_neg\": [\n        \"mixed variant_neg(mixed left)\",\n        \"Performs logical negation on a variant\"\n    ],\n    \"variant_not\": [\n        \"mixed variant_not(mixed left)\",\n        \"Performs bitwise not negation on a variant\"\n    ],\n    \"variant_or\": [\n        \"mixed variant_or(mixed left, mixed right)\",\n        \"Performs a logical disjunction on two variants\"\n    ],\n    \"variant_pow\": [\n        \"mixed variant_pow(mixed left, mixed right)\",\n        \"Returns the result of performing the power function with two variants\"\n    ],\n    \"variant_round\": [\n        \"mixed variant_round(mixed left, int decimals)\",\n        \"Rounds a variant to the specified number of decimal places\"\n    ],\n    \"variant_set\": [\n        \"void variant_set(object variant, mixed value)\",\n        \"Assigns a new value for a variant object\"\n    ],\n    \"variant_set_type\": [\n        \"void variant_set_type(object variant, int type)\",\n        \"Convert a variant into another type.  Variant is modified \\\"in-place\\\"\"\n    ],\n    \"variant_sub\": [\n        \"mixed variant_sub(mixed left, mixed right)\",\n        \"subtracts the value of the right variant from the left variant value and returns the result\"\n    ],\n    \"variant_xor\": [\n        \"mixed variant_xor(mixed left, mixed right)\",\n        \"Performs a logical exclusion on two variants\"\n    ],\n    \"version_compare\": [\n        \"int version_compare(string ver1, string ver2 [, string oper])\",\n        \"Compares two \\\"PHP-standardized\\\" version number strings\"\n    ],\n    \"vfprintf\": [\n        \"int vfprintf(resource stream, string format, array args)\",\n        \"Output a formatted string into a stream\"\n    ],\n    \"virtual\": [\n        \"bool virtual(string filename)\",\n        \"Perform an Apache sub-request\"\n    ],\n    \"vprintf\": [\n        \"int vprintf(string format, array args)\",\n        \"Output a formatted string\"\n    ],\n    \"vsprintf\": [\n        \"string vsprintf(string format, array args)\",\n        \"Return a formatted string\"\n    ],\n    \"wddx_add_vars\": [\n        \"int wddx_add_vars(resource packet_id,  mixed var_names [, mixed ...])\",\n        \"Serializes given variables and adds them to packet given by packet_id\"\n    ],\n    \"wddx_deserialize\": [\n        \"mixed wddx_deserialize(mixed packet)\",\n        \"Deserializes given packet and returns a PHP value\"\n    ],\n    \"wddx_packet_end\": [\n        \"string wddx_packet_end(resource packet_id)\",\n        \"Ends specified WDDX packet and returns the string containing the packet\"\n    ],\n    \"wddx_packet_start\": [\n        \"resource wddx_packet_start([string comment])\",\n        \"Starts a WDDX packet with optional comment and returns the packet id\"\n    ],\n    \"wddx_serialize_value\": [\n        \"string wddx_serialize_value(mixed var [, string comment])\",\n        \"Creates a new packet and serializes the given value\"\n    ],\n    \"wddx_serialize_vars\": [\n        \"string wddx_serialize_vars(mixed var_name [, mixed ...])\",\n        \"Creates a new packet and serializes given variables into a struct\"\n    ],\n    \"wordwrap\": [\n        \"string wordwrap(string str [, int width [, string break [, boolean cut]]])\",\n        \"Wraps buffer to selected number of characters using string break char\"\n    ],\n    \"xml_error_string\": [\n        \"string xml_error_string(int code)\",\n        \"Get XML parser error string\"\n    ],\n    \"xml_get_current_byte_index\": [\n        \"int xml_get_current_byte_index(resource parser)\",\n        \"Get current byte index for an XML parser\"\n    ],\n    \"xml_get_current_column_number\": [\n        \"int xml_get_current_column_number(resource parser)\",\n        \"Get current column number for an XML parser\"\n    ],\n    \"xml_get_current_line_number\": [\n        \"int xml_get_current_line_number(resource parser)\",\n        \"Get current line number for an XML parser\"\n    ],\n    \"xml_get_error_code\": [\n        \"int xml_get_error_code(resource parser)\",\n        \"Get XML parser error code\"\n    ],\n    \"xml_parse\": [\n        \"int xml_parse(resource parser, string data [, int isFinal])\",\n        \"Start parsing an XML document\"\n    ],\n    \"xml_parse_into_struct\": [\n        \"int xml_parse_into_struct(resource parser, string data, array &values [, array &index ])\",\n        \"Parsing a XML document\"\n    ],\n    \"xml_parser_create\": [\n        \"resource xml_parser_create([string encoding])\",\n        \"Create an XML parser\"\n    ],\n    \"xml_parser_create_ns\": [\n        \"resource xml_parser_create_ns([string encoding [, string sep]])\",\n        \"Create an XML parser\"\n    ],\n    \"xml_parser_free\": [\n        \"int xml_parser_free(resource parser)\",\n        \"Free an XML parser\"\n    ],\n    \"xml_parser_get_option\": [\n        \"int xml_parser_get_option(resource parser, int option)\",\n        \"Get options from an XML parser\"\n    ],\n    \"xml_parser_set_option\": [\n        \"int xml_parser_set_option(resource parser, int option, mixed value)\",\n        \"Set options in an XML parser\"\n    ],\n    \"xml_set_character_data_handler\": [\n        \"int xml_set_character_data_handler(resource parser, string hdl)\",\n        \"Set up character data handler\"\n    ],\n    \"xml_set_default_handler\": [\n        \"int xml_set_default_handler(resource parser, string hdl)\",\n        \"Set up default handler\"\n    ],\n    \"xml_set_element_handler\": [\n        \"int xml_set_element_handler(resource parser, string shdl, string ehdl)\",\n        \"Set up start and end element handlers\"\n    ],\n    \"xml_set_end_namespace_decl_handler\": [\n        \"int xml_set_end_namespace_decl_handler(resource parser, string hdl)\",\n        \"Set up character data handler\"\n    ],\n    \"xml_set_external_entity_ref_handler\": [\n        \"int xml_set_external_entity_ref_handler(resource parser, string hdl)\",\n        \"Set up external entity reference handler\"\n    ],\n    \"xml_set_notation_decl_handler\": [\n        \"int xml_set_notation_decl_handler(resource parser, string hdl)\",\n        \"Set up notation declaration handler\"\n    ],\n    \"xml_set_object\": [\n        \"int xml_set_object(resource parser, object &obj)\",\n        \"Set up object which should be used for callbacks\"\n    ],\n    \"xml_set_processing_instruction_handler\": [\n        \"int xml_set_processing_instruction_handler(resource parser, string hdl)\",\n        \"Set up processing instruction (PI) handler\"\n    ],\n    \"xml_set_start_namespace_decl_handler\": [\n        \"int xml_set_start_namespace_decl_handler(resource parser, string hdl)\",\n        \"Set up character data handler\"\n    ],\n    \"xml_set_unparsed_entity_decl_handler\": [\n        \"int xml_set_unparsed_entity_decl_handler(resource parser, string hdl)\",\n        \"Set up unparsed entity declaration handler\"\n    ],\n    \"xmlrpc_decode\": [\n        \"array xmlrpc_decode(string xml [, string encoding])\",\n        \"Decodes XML into native PHP types\"\n    ],\n    \"xmlrpc_decode_request\": [\n        \"array xmlrpc_decode_request(string xml, string& method [, string encoding])\",\n        \"Decodes XML into native PHP types\"\n    ],\n    \"xmlrpc_encode\": [\n        \"string xmlrpc_encode(mixed value)\",\n        \"Generates XML for a PHP value\"\n    ],\n    \"xmlrpc_encode_request\": [\n        \"string xmlrpc_encode_request(string method, mixed params [, array output_options])\",\n        \"Generates XML for a method request\"\n    ],\n    \"xmlrpc_get_type\": [\n        \"string xmlrpc_get_type(mixed value)\",\n        \"Gets xmlrpc type for a PHP value. Especially useful for base64 and datetime strings\"\n    ],\n    \"xmlrpc_is_fault\": [\n        \"bool xmlrpc_is_fault(array)\",\n        \"Determines if an array value represents an XMLRPC fault.\"\n    ],\n    \"xmlrpc_parse_method_descriptions\": [\n        \"array xmlrpc_parse_method_descriptions(string xml)\",\n        \"Decodes XML into a list of method descriptions\"\n    ],\n    \"xmlrpc_server_add_introspection_data\": [\n        \"int xmlrpc_server_add_introspection_data(resource server, array desc)\",\n        \"Adds introspection documentation\"\n    ],\n    \"xmlrpc_server_call_method\": [\n        \"mixed xmlrpc_server_call_method(resource server, string xml, mixed user_data [, array output_options])\",\n        \"Parses XML requests and call methods\"\n    ],\n    \"xmlrpc_server_create\": [\n        \"resource xmlrpc_server_create(void)\",\n        \"Creates an xmlrpc server\"\n    ],\n    \"xmlrpc_server_destroy\": [\n        \"int xmlrpc_server_destroy(resource server)\",\n        \"Destroys server resources\"\n    ],\n    \"xmlrpc_server_register_introspection_callback\": [\n        \"bool xmlrpc_server_register_introspection_callback(resource server, string function)\",\n        \"Register a PHP function to generate documentation\"\n    ],\n    \"xmlrpc_server_register_method\": [\n        \"bool xmlrpc_server_register_method(resource server, string method_name, string function)\",\n        \"Register a PHP function to handle method matching method_name\"\n    ],\n    \"xmlrpc_set_type\": [\n        \"bool xmlrpc_set_type(string value, string type)\",\n        \"Sets xmlrpc type, base64 or datetime, for a PHP string value\"\n    ],\n    \"xmlwriter_end_attribute\": [\n        \"bool xmlwriter_end_attribute(resource xmlwriter)\",\n        \"End attribute - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_cdata\": [\n        \"bool xmlwriter_end_cdata(resource xmlwriter)\",\n        \"End current CDATA - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_comment\": [\n        \"bool xmlwriter_end_comment(resource xmlwriter)\",\n        \"Create end comment - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_document\": [\n        \"bool xmlwriter_end_document(resource xmlwriter)\",\n        \"End current document - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_dtd\": [\n        \"bool xmlwriter_end_dtd(resource xmlwriter)\",\n        \"End current DTD - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_dtd_attlist\": [\n        \"bool xmlwriter_end_dtd_attlist(resource xmlwriter)\",\n        \"End current DTD AttList - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_dtd_element\": [\n        \"bool xmlwriter_end_dtd_element(resource xmlwriter)\",\n        \"End current DTD element - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_dtd_entity\": [\n        \"bool xmlwriter_end_dtd_entity(resource xmlwriter)\",\n        \"End current DTD Entity - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_element\": [\n        \"bool xmlwriter_end_element(resource xmlwriter)\",\n        \"End current element - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_pi\": [\n        \"bool xmlwriter_end_pi(resource xmlwriter)\",\n        \"End current PI - returns FALSE on error\"\n    ],\n    \"xmlwriter_flush\": [\n        \"mixed xmlwriter_flush(resource xmlwriter [,bool empty])\",\n        \"Output current buffer\"\n    ],\n    \"xmlwriter_full_end_element\": [\n        \"bool xmlwriter_full_end_element(resource xmlwriter)\",\n        \"End current element - returns FALSE on error\"\n    ],\n    \"xmlwriter_open_memory\": [\n        \"resource xmlwriter_open_memory()\",\n        \"Create new xmlwriter using memory for string output\"\n    ],\n    \"xmlwriter_open_uri\": [\n        \"resource xmlwriter_open_uri(resource xmlwriter, string source)\",\n        \"Create new xmlwriter using source uri for output\"\n    ],\n    \"xmlwriter_output_memory\": [\n        \"string xmlwriter_output_memory(resource xmlwriter [,bool flush])\",\n        \"Output current buffer as string\"\n    ],\n    \"xmlwriter_set_indent\": [\n        \"bool xmlwriter_set_indent(resource xmlwriter, bool indent)\",\n        \"Toggle indentation on/off - returns FALSE on error\"\n    ],\n    \"xmlwriter_set_indent_string\": [\n        \"bool xmlwriter_set_indent_string(resource xmlwriter, string indentString)\",\n        \"Set string used for indenting - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_attribute\": [\n        \"bool xmlwriter_start_attribute(resource xmlwriter, string name)\",\n        \"Create start attribute - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_attribute_ns\": [\n        \"bool xmlwriter_start_attribute_ns(resource xmlwriter, string prefix, string name, string uri)\",\n        \"Create start namespaced attribute - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_cdata\": [\n        \"bool xmlwriter_start_cdata(resource xmlwriter)\",\n        \"Create start CDATA tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_comment\": [\n        \"bool xmlwriter_start_comment(resource xmlwriter)\",\n        \"Create start comment - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_document\": [\n        \"bool xmlwriter_start_document(resource xmlwriter, string version, string encoding, string standalone)\",\n        \"Create document tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_dtd\": [\n        \"bool xmlwriter_start_dtd(resource xmlwriter, string name, string pubid, string sysid)\",\n        \"Create start DTD tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_dtd_attlist\": [\n        \"bool xmlwriter_start_dtd_attlist(resource xmlwriter, string name)\",\n        \"Create start DTD AttList - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_dtd_element\": [\n        \"bool xmlwriter_start_dtd_element(resource xmlwriter, string name)\",\n        \"Create start DTD element - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_dtd_entity\": [\n        \"bool xmlwriter_start_dtd_entity(resource xmlwriter, string name, bool isparam)\",\n        \"Create start DTD Entity - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_element\": [\n        \"bool xmlwriter_start_element(resource xmlwriter, string name)\",\n        \"Create start element tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_element_ns\": [\n        \"bool xmlwriter_start_element_ns(resource xmlwriter, string prefix, string name, string uri)\",\n        \"Create start namespaced element tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_pi\": [\n        \"bool xmlwriter_start_pi(resource xmlwriter, string target)\",\n        \"Create start PI tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_text\": [\n        \"bool xmlwriter_text(resource xmlwriter, string content)\",\n        \"Write text - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_attribute\": [\n        \"bool xmlwriter_write_attribute(resource xmlwriter, string name, string content)\",\n        \"Write full attribute - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_attribute_ns\": [\n        \"bool xmlwriter_write_attribute_ns(resource xmlwriter, string prefix, string name, string uri, string content)\",\n        \"Write full namespaced attribute - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_cdata\": [\n        \"bool xmlwriter_write_cdata(resource xmlwriter, string content)\",\n        \"Write full CDATA tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_comment\": [\n        \"bool xmlwriter_write_comment(resource xmlwriter, string content)\",\n        \"Write full comment tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_dtd\": [\n        \"bool xmlwriter_write_dtd(resource xmlwriter, string name, string pubid, string sysid, string subset)\",\n        \"Write full DTD tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_dtd_attlist\": [\n        \"bool xmlwriter_write_dtd_attlist(resource xmlwriter, string name, string content)\",\n        \"Write full DTD AttList tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_dtd_element\": [\n        \"bool xmlwriter_write_dtd_element(resource xmlwriter, string name, string content)\",\n        \"Write full DTD element tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_dtd_entity\": [\n        \"bool xmlwriter_write_dtd_entity(resource xmlwriter, string name, string content [, int pe [, string pubid [, string sysid [, string ndataid]]]])\",\n        \"Write full DTD Entity tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_element\": [\n        \"bool xmlwriter_write_element(resource xmlwriter, string name[, string content])\",\n        \"Write full element tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_element_ns\": [\n        \"bool xmlwriter_write_element_ns(resource xmlwriter, string prefix, string name, string uri[, string content])\",\n        \"Write full namesapced element tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_pi\": [\n        \"bool xmlwriter_write_pi(resource xmlwriter, string target, string content)\",\n        \"Write full PI tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_raw\": [\n        \"bool xmlwriter_write_raw(resource xmlwriter, string content)\",\n        \"Write text - returns FALSE on error\"\n    ],\n    \"xsl_xsltprocessor_get_parameter\": [\n        \"string xsl_xsltprocessor_get_parameter(string namespace, string name);\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_has_exslt_support\": [\n        \"bool xsl_xsltprocessor_has_exslt_support();\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_import_stylesheet\": [\n        \"void xsl_xsltprocessor_import_stylesheet(domdocument doc);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html# Since:\"\n    ],\n    \"xsl_xsltprocessor_register_php_functions\": [\n        \"void xsl_xsltprocessor_register_php_functions([mixed $restrict]);\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_remove_parameter\": [\n        \"bool xsl_xsltprocessor_remove_parameter(string namespace, string name);\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_set_parameter\": [\n        \"bool xsl_xsltprocessor_set_parameter(string namespace, mixed name [, string value]);\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_set_profiling\": [\n        \"bool xsl_xsltprocessor_set_profiling(string filename) */\",\n        \"PHP_FUNCTION(xsl_xsltprocessor_set_profiling) {  zval *id;  xsl_object *intern;  char *filename = NULL;  int filename_len;  DOM_GET_THIS(id);   if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, \\\"s!\\\", &filename, &filename_len) == SUCCESS) {   intern = (xsl_object *)zend_object_store_get_object(id TSRMLS_CC);   if (intern->profiling) {    efree(intern->profiling);   }   if (filename != NULL) {    intern->profiling = estrndup(filename,filename_len);   } else {    intern->profiling = NULL;   }   RETURN_TRUE;  } else {   WRONG_PARAM_COUNT;  } } /* }}} end xsl_xsltprocessor_set_profiling\"\n    ],\n    \"xsl_xsltprocessor_transform_to_doc\": [\n        \"domdocument xsl_xsltprocessor_transform_to_doc(domnode doc);\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html# Since:\"\n    ],\n    \"xsl_xsltprocessor_transform_to_uri\": [\n        \"int xsl_xsltprocessor_transform_to_uri(domdocument doc, string uri);\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_transform_to_xml\": [\n        \"string xsl_xsltprocessor_transform_to_xml(domdocument doc);\",\n        \"\"\n    ],\n    \"zend_logo_guid\": [\n        \"string zend_logo_guid(void)\",\n        \"Return the special ID used to request the Zend logo in phpinfo screens\"\n    ],\n    \"zend_version\": [\n        \"string zend_version(void)\",\n        \"Get the version of the Zend Engine\"\n    ],\n    \"zip_close\": [\n        \"void zip_close(resource zip)\",\n        \"Close a Zip archive\"\n    ],\n    \"zip_entry_close\": [\n        \"void zip_entry_close(resource zip_ent)\",\n        \"Close a zip entry\"\n    ],\n    \"zip_entry_compressedsize\": [\n        \"int zip_entry_compressedsize(resource zip_entry)\",\n        \"Return the compressed size of a ZZip entry\"\n    ],\n    \"zip_entry_compressionmethod\": [\n        \"string zip_entry_compressionmethod(resource zip_entry)\",\n        \"Return a string containing the compression method used on a particular entry\"\n    ],\n    \"zip_entry_filesize\": [\n        \"int zip_entry_filesize(resource zip_entry)\",\n        \"Return the actual filesize of a ZZip entry\"\n    ],\n    \"zip_entry_name\": [\n        \"string zip_entry_name(resource zip_entry)\",\n        \"Return the name given a ZZip entry\"\n    ],\n    \"zip_entry_open\": [\n        \"bool zip_entry_open(resource zip_dp, resource zip_entry [, string mode])\",\n        \"Open a Zip File, pointed by the resource entry\"\n    ],\n    \"zip_entry_read\": [\n        \"mixed zip_entry_read(resource zip_entry [, int len])\",\n        \"Read from an open directory entry\"\n    ],\n    \"zip_open\": [\n        \"resource zip_open(string filename)\",\n        \"Create new zip using source uri for output\"\n    ],\n    \"zip_read\": [\n        \"resource zip_read(resource zip)\",\n        \"Returns the next file in the archive\"\n    ],\n    \"zlib_get_coding_type\": [\n        \"string zlib_get_coding_type(void)\",\n        \"Returns the coding type used for output compression\"\n    ]\n};\n\nvar variableMap = {\n    \"$_COOKIE\": {\n        type: \"array\"\n    },\n    \"$_ENV\": {\n        type: \"array\"\n    },\n    \"$_FILES\": {\n        type: \"array\"\n    },\n    \"$_GET\": {\n        type: \"array\"\n    },\n    \"$_POST\": {\n        type: \"array\"\n    },\n    \"$_REQUEST\": {\n        type: \"array\"\n    },\n    \"$_SERVER\": {\n        type: \"array\",\n        value: {\n            \"DOCUMENT_ROOT\":  1,\n            \"GATEWAY_INTERFACE\":  1,\n            \"HTTP_ACCEPT\":  1,\n            \"HTTP_ACCEPT_CHARSET\":  1,\n            \"HTTP_ACCEPT_ENCODING\":  1 ,\n            \"HTTP_ACCEPT_LANGUAGE\":  1,\n            \"HTTP_CONNECTION\":  1,\n            \"HTTP_HOST\":  1,\n            \"HTTP_REFERER\":  1,\n            \"HTTP_USER_AGENT\":  1,\n            \"PATH_TRANSLATED\":  1,\n            \"PHP_SELF\":  1,\n            \"QUERY_STRING\":  1,\n            \"REMOTE_ADDR\":  1,\n            \"REMOTE_PORT\":  1,\n            \"REQUEST_METHOD\":  1,\n            \"REQUEST_URI\":  1,\n            \"SCRIPT_FILENAME\":  1,\n            \"SCRIPT_NAME\":  1,\n            \"SERVER_ADMIN\":  1,\n            \"SERVER_NAME\":  1,\n            \"SERVER_PORT\":  1,\n            \"SERVER_PROTOCOL\":  1,\n            \"SERVER_SIGNATURE\":  1,\n            \"SERVER_SOFTWARE\":  1\n        }\n    },\n    \"$_SESSION\": {\n        type: \"array\"\n    },\n    \"$GLOBALS\": {\n        type: \"array\"\n    }\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type) > -1;\n}\n\nvar PhpCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n\n        // php function\n        if (token.type==='identifier')\n            return this.getFunctionCompletions(state, session, pos, prefix);\n\n        // php variable\n        if (is(token, \"variable\"))\n            return this.getVariableCompletions(state, session, pos, prefix);\n\n        // php array key\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (token.type==='string' && /(\\$[\\w]*)\\[[\"']([^'\"]*)$/i.test(line))\n            return this.getArrayKeyCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n\n    this.getFunctionCompletions = function(state, session, pos, prefix) {\n        var functions = Object.keys(functionMap);\n        return functions.map(function(func){\n            return {\n                caption: func,\n                snippet: func + '($0)',\n                meta: \"php function\",\n                score: Number.MAX_VALUE,\n                docHTML: functionMap[func][1]\n            };\n        });\n    };\n\n    this.getVariableCompletions = function(state, session, pos, prefix) {\n        var variables = Object.keys(variableMap);\n        return variables.map(function(variable){\n            return {\n                caption: variable,\n                value: variable,\n                meta: \"php variable\",\n                score: Number.MAX_VALUE\n            };\n        });\n    };\n\n    this.getArrayKeyCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var variable = line.match(/(\\$[\\w]*)\\[[\"']([^'\"]*)$/i)[1];\n\n        if (!variableMap[variable]) {\n            return [];\n        }\n\n        var keys = [];\n        if (variableMap[variable].type==='array' && variableMap[variable].value)\n            keys = Object.keys(variableMap[variable].value);\n\n        return keys.map(function(key) {\n            return {\n                caption: key,\n                value: key,\n                meta: \"php array key\",\n                score: Number.MAX_VALUE\n            };\n        });\n    };\n\n}).call(PhpCompletions.prototype);\n\nexports.PhpCompletions = PhpCompletions;\n});\n"
  },
  {
    "path": "lib/ace/mode/php_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\n\nvar PhpLangHighlightRules = function() {\n    var docComment = DocCommentHighlightRules;\n    // http://php.net/quickref.php\n    var builtinFunctions = lang.arrayToMap(\n        ('abs|acos|acosh|addcslashes|addslashes|aggregate|aggregate_info|aggregate_methods|aggregate_methods_by_list|aggregate_methods_by_regexp|' +\n        'aggregate_properties|aggregate_properties_by_list|aggregate_properties_by_regexp|aggregation_info|amqpconnection|amqpexchange|amqpqueue|' +\n        'apache_child_terminate|apache_get_modules|apache_get_version|apache_getenv|apache_lookup_uri|apache_note|apache_request_headers|' +\n        'apache_reset_timeout|apache_response_headers|apache_setenv|apc_add|apc_bin_dump|apc_bin_dumpfile|apc_bin_load|apc_bin_loadfile|' +\n        'apc_cache_info|apc_cas|apc_clear_cache|apc_compile_file|apc_dec|apc_define_constants|apc_delete|apc_delete_file|apc_exists|apc_fetch|' +\n        'apc_inc|apc_load_constants|apc_sma_info|apc_store|apciterator|apd_breakpoint|apd_callstack|apd_clunk|apd_continue|apd_croak|' +\n        'apd_dump_function_table|apd_dump_persistent_resources|apd_dump_regular_resources|apd_echo|apd_get_active_symbols|apd_set_pprof_trace|' +\n        'apd_set_session|apd_set_session_trace|apd_set_session_trace_socket|appenditerator|array|array_change_key_case|array_chunk|array_combine|' +\n        'array_count_values|array_diff|array_diff_assoc|array_diff_key|array_diff_uassoc|array_diff_ukey|array_fill|array_fill_keys|array_filter|' +\n        'array_flip|array_intersect|array_intersect_assoc|array_intersect_key|array_intersect_uassoc|array_intersect_ukey|array_key_exists|' +\n        'array_keys|array_map|array_merge|array_merge_recursive|array_multisort|array_pad|array_pop|array_product|array_push|array_rand|' +\n        'array_reduce|array_replace|array_replace_recursive|array_reverse|array_search|array_shift|array_slice|array_splice|array_sum|array_udiff|' +\n        'array_udiff_assoc|array_udiff_uassoc|array_uintersect|array_uintersect_assoc|array_uintersect_uassoc|array_unique|array_unshift|' +\n        'array_values|array_walk|array_walk_recursive|arrayaccess|arrayiterator|arrayobject|arsort|asin|asinh|asort|assert|assert_options|atan|' +\n        'atan2|atanh|audioproperties|badfunctioncallexception|badmethodcallexception|base64_decode|base64_encode|base_convert|basename|' +\n        'bbcode_add_element|bbcode_add_smiley|bbcode_create|bbcode_destroy|bbcode_parse|bbcode_set_arg_parser|bbcode_set_flags|bcadd|bccomp|bcdiv|' +\n        'bcmod|bcmul|bcompiler_load|bcompiler_load_exe|bcompiler_parse_class|bcompiler_read|bcompiler_write_class|bcompiler_write_constant|' +\n        'bcompiler_write_exe_footer|bcompiler_write_file|bcompiler_write_footer|bcompiler_write_function|bcompiler_write_functions_from_file|' +\n        'bcompiler_write_header|bcompiler_write_included_filename|bcpow|bcpowmod|bcscale|bcsqrt|bcsub|bin2hex|bind_textdomain_codeset|bindec|' +\n        'bindtextdomain|bson_decode|bson_encode|bumpValue|bzclose|bzcompress|bzdecompress|bzerrno|bzerror|bzerrstr|bzflush|bzopen|bzread|bzwrite|' +\n        'cachingiterator|cairo|cairo_create|cairo_font_face_get_type|cairo_font_face_status|cairo_font_options_create|cairo_font_options_equal|' +\n        'cairo_font_options_get_antialias|cairo_font_options_get_hint_metrics|cairo_font_options_get_hint_style|' +\n        'cairo_font_options_get_subpixel_order|cairo_font_options_hash|cairo_font_options_merge|cairo_font_options_set_antialias|' +\n        'cairo_font_options_set_hint_metrics|cairo_font_options_set_hint_style|cairo_font_options_set_subpixel_order|cairo_font_options_status|' +\n        'cairo_format_stride_for_width|cairo_image_surface_create|cairo_image_surface_create_for_data|cairo_image_surface_create_from_png|' +\n        'cairo_image_surface_get_data|cairo_image_surface_get_format|cairo_image_surface_get_height|cairo_image_surface_get_stride|' +\n        'cairo_image_surface_get_width|cairo_matrix_create_scale|cairo_matrix_create_translate|cairo_matrix_invert|cairo_matrix_multiply|' +\n        'cairo_matrix_rotate|cairo_matrix_transform_distance|cairo_matrix_transform_point|cairo_matrix_translate|cairo_pattern_add_color_stop_rgb|' +\n        'cairo_pattern_add_color_stop_rgba|cairo_pattern_create_for_surface|cairo_pattern_create_linear|cairo_pattern_create_radial|' +\n        'cairo_pattern_create_rgb|cairo_pattern_create_rgba|cairo_pattern_get_color_stop_count|cairo_pattern_get_color_stop_rgba|' +\n        'cairo_pattern_get_extend|cairo_pattern_get_filter|cairo_pattern_get_linear_points|cairo_pattern_get_matrix|' +\n        'cairo_pattern_get_radial_circles|cairo_pattern_get_rgba|cairo_pattern_get_surface|cairo_pattern_get_type|cairo_pattern_set_extend|' +\n        'cairo_pattern_set_filter|cairo_pattern_set_matrix|cairo_pattern_status|cairo_pdf_surface_create|cairo_pdf_surface_set_size|' +\n        'cairo_ps_get_levels|cairo_ps_level_to_string|cairo_ps_surface_create|cairo_ps_surface_dsc_begin_page_setup|' +\n        'cairo_ps_surface_dsc_begin_setup|cairo_ps_surface_dsc_comment|cairo_ps_surface_get_eps|cairo_ps_surface_restrict_to_level|' +\n        'cairo_ps_surface_set_eps|cairo_ps_surface_set_size|cairo_scaled_font_create|cairo_scaled_font_extents|cairo_scaled_font_get_ctm|' +\n        'cairo_scaled_font_get_font_face|cairo_scaled_font_get_font_matrix|cairo_scaled_font_get_font_options|cairo_scaled_font_get_scale_matrix|' +\n        'cairo_scaled_font_get_type|cairo_scaled_font_glyph_extents|cairo_scaled_font_status|cairo_scaled_font_text_extents|' +\n        'cairo_surface_copy_page|cairo_surface_create_similar|cairo_surface_finish|cairo_surface_flush|cairo_surface_get_content|' +\n        'cairo_surface_get_device_offset|cairo_surface_get_font_options|cairo_surface_get_type|cairo_surface_mark_dirty|' +\n        'cairo_surface_mark_dirty_rectangle|cairo_surface_set_device_offset|cairo_surface_set_fallback_resolution|cairo_surface_show_page|' +\n        'cairo_surface_status|cairo_surface_write_to_png|cairo_svg_surface_create|cairo_svg_surface_restrict_to_version|' +\n        'cairo_svg_version_to_string|cairoantialias|cairocontent|cairocontext|cairoexception|cairoextend|cairofillrule|cairofilter|cairofontface|' +\n        'cairofontoptions|cairofontslant|cairofonttype|cairofontweight|cairoformat|cairogradientpattern|cairohintmetrics|cairohintstyle|' +\n        'cairoimagesurface|cairolineargradient|cairolinecap|cairolinejoin|cairomatrix|cairooperator|cairopath|cairopattern|cairopatterntype|' +\n        'cairopdfsurface|cairopslevel|cairopssurface|cairoradialgradient|cairoscaledfont|cairosolidpattern|cairostatus|cairosubpixelorder|' +\n        'cairosurface|cairosurfacepattern|cairosurfacetype|cairosvgsurface|cairosvgversion|cairotoyfontface|cal_days_in_month|cal_from_jd|cal_info|' +\n        'cal_to_jd|calcul_hmac|calculhmac|call_user_func|call_user_func_array|call_user_method|call_user_method_array|callbackfilteriterator|ceil|' +\n        'chdb|chdb_create|chdir|checkdate|checkdnsrr|chgrp|chmod|chop|chown|chr|chroot|chunk_split|class_alias|class_exists|class_implements|' +\n        'class_parents|class_uses|classkit_import|classkit_method_add|classkit_method_copy|classkit_method_redefine|classkit_method_remove|' +\n        'classkit_method_rename|clearstatcache|clone|closedir|closelog|collator|com|com_addref|com_create_guid|com_event_sink|com_get|' +\n        'com_get_active_object|com_invoke|com_isenum|com_load|com_load_typelib|com_message_pump|com_print_typeinfo|com_propget|com_propput|' +\n        'com_propset|com_release|com_set|compact|connection_aborted|connection_status|connection_timeout|constant|construct|construct|construct|' +\n        'convert_cyr_string|convert_uudecode|convert_uuencode|copy|cos|cosh|count|count_chars|countable|counter_bump|counter_bump_value|' +\n        'counter_create|counter_get|counter_get_meta|counter_get_named|counter_get_value|counter_reset|counter_reset_value|crack_check|' +\n        'crack_closedict|crack_getlastmessage|crack_opendict|crc32|create_function|crypt|ctype_alnum|ctype_alpha|ctype_cntrl|ctype_digit|' +\n        'ctype_graph|ctype_lower|ctype_print|ctype_punct|ctype_space|ctype_upper|ctype_xdigit|cubrid_affected_rows|cubrid_bind|' +\n        'cubrid_client_encoding|cubrid_close|cubrid_close_prepare|cubrid_close_request|cubrid_col_get|cubrid_col_size|cubrid_column_names|' +\n        'cubrid_column_types|cubrid_commit|cubrid_connect|cubrid_connect_with_url|cubrid_current_oid|cubrid_data_seek|cubrid_db_name|' +\n        'cubrid_disconnect|cubrid_drop|cubrid_errno|cubrid_error|cubrid_error_code|cubrid_error_code_facility|cubrid_error_msg|cubrid_execute|' +\n        'cubrid_fetch|cubrid_fetch_array|cubrid_fetch_assoc|cubrid_fetch_field|cubrid_fetch_lengths|cubrid_fetch_object|cubrid_fetch_row|' +\n        'cubrid_field_flags|cubrid_field_len|cubrid_field_name|cubrid_field_seek|cubrid_field_table|cubrid_field_type|cubrid_free_result|' +\n        'cubrid_get|cubrid_get_autocommit|cubrid_get_charset|cubrid_get_class_name|cubrid_get_client_info|cubrid_get_db_parameter|' +\n        'cubrid_get_server_info|cubrid_insert_id|cubrid_is_instance|cubrid_list_dbs|cubrid_load_from_glo|cubrid_lob_close|cubrid_lob_export|' +\n        'cubrid_lob_get|cubrid_lob_send|cubrid_lob_size|cubrid_lock_read|cubrid_lock_write|cubrid_move_cursor|cubrid_new_glo|cubrid_next_result|' +\n        'cubrid_num_cols|cubrid_num_fields|cubrid_num_rows|cubrid_ping|cubrid_prepare|cubrid_put|cubrid_query|cubrid_real_escape_string|' +\n        'cubrid_result|cubrid_rollback|cubrid_save_to_glo|cubrid_schema|cubrid_send_glo|cubrid_seq_drop|cubrid_seq_insert|cubrid_seq_put|' +\n        'cubrid_set_add|cubrid_set_autocommit|cubrid_set_db_parameter|cubrid_set_drop|cubrid_unbuffered_query|cubrid_version|curl_close|' +\n        'curl_copy_handle|curl_errno|curl_error|curl_exec|curl_getinfo|curl_init|curl_multi_add_handle|curl_multi_close|curl_multi_exec|' +\n        'curl_multi_getcontent|curl_multi_info_read|curl_multi_init|curl_multi_remove_handle|curl_multi_select|curl_setopt|curl_setopt_array|' +\n        'curl_version|current|cyrus_authenticate|cyrus_bind|cyrus_close|cyrus_connect|cyrus_query|cyrus_unbind|date|date_add|date_create|' +\n        'date_create_from_format|date_date_set|date_default_timezone_get|date_default_timezone_set|date_diff|date_format|date_get_last_errors|' +\n        'date_interval_create_from_date_string|date_interval_format|date_isodate_set|date_modify|date_offset_get|date_parse|date_parse_from_format|' +\n        'date_sub|date_sun_info|date_sunrise|date_sunset|date_time_set|date_timestamp_get|date_timestamp_set|date_timezone_get|date_timezone_set|' +\n        'dateinterval|dateperiod|datetime|datetimezone|db2_autocommit|db2_bind_param|db2_client_info|db2_close|db2_column_privileges|db2_columns|' +\n        'db2_commit|db2_conn_error|db2_conn_errormsg|db2_connect|db2_cursor_type|db2_escape_string|db2_exec|db2_execute|db2_fetch_array|' +\n        'db2_fetch_assoc|db2_fetch_both|db2_fetch_object|db2_fetch_row|db2_field_display_size|db2_field_name|db2_field_num|db2_field_precision|' +\n        'db2_field_scale|db2_field_type|db2_field_width|db2_foreign_keys|db2_free_result|db2_free_stmt|db2_get_option|db2_last_insert_id|' +\n        'db2_lob_read|db2_next_result|db2_num_fields|db2_num_rows|db2_pclose|db2_pconnect|db2_prepare|db2_primary_keys|db2_procedure_columns|' +\n        'db2_procedures|db2_result|db2_rollback|db2_server_info|db2_set_option|db2_special_columns|db2_statistics|db2_stmt_error|db2_stmt_errormsg|' +\n        'db2_table_privileges|db2_tables|dba_close|dba_delete|dba_exists|dba_fetch|dba_firstkey|dba_handlers|dba_insert|dba_key_split|dba_list|' +\n        'dba_nextkey|dba_open|dba_optimize|dba_popen|dba_replace|dba_sync|dbase_add_record|dbase_close|dbase_create|dbase_delete_record|' +\n        'dbase_get_header_info|dbase_get_record|dbase_get_record_with_names|dbase_numfields|dbase_numrecords|dbase_open|dbase_pack|' +\n        'dbase_replace_record|dbplus_add|dbplus_aql|dbplus_chdir|dbplus_close|dbplus_curr|dbplus_errcode|dbplus_errno|dbplus_find|dbplus_first|' +\n        'dbplus_flush|dbplus_freealllocks|dbplus_freelock|dbplus_freerlocks|dbplus_getlock|dbplus_getunique|dbplus_info|dbplus_last|dbplus_lockrel|' +\n        'dbplus_next|dbplus_open|dbplus_prev|dbplus_rchperm|dbplus_rcreate|dbplus_rcrtexact|dbplus_rcrtlike|dbplus_resolve|dbplus_restorepos|' +\n        'dbplus_rkeys|dbplus_ropen|dbplus_rquery|dbplus_rrename|dbplus_rsecindex|dbplus_runlink|dbplus_rzap|dbplus_savepos|dbplus_setindex|' +\n        'dbplus_setindexbynumber|dbplus_sql|dbplus_tcl|dbplus_tremove|dbplus_undo|dbplus_undoprepare|dbplus_unlockrel|dbplus_unselect|' +\n        'dbplus_update|dbplus_xlockrel|dbplus_xunlockrel|dbx_close|dbx_compare|dbx_connect|dbx_error|dbx_escape_string|dbx_fetch_row|dbx_query|' +\n        'dbx_sort|dcgettext|dcngettext|deaggregate|debug_backtrace|debug_print_backtrace|debug_zval_dump|decbin|dechex|decoct|define|' +\n        'define_syslog_variables|defined|deg2rad|delete|dgettext|die|dio_close|dio_fcntl|dio_open|dio_read|dio_seek|dio_stat|dio_tcsetattr|' +\n        'dio_truncate|dio_write|dir|directoryiterator|dirname|disk_free_space|disk_total_space|diskfreespace|dl|dngettext|dns_check_record|' +\n        'dns_get_mx|dns_get_record|dom_import_simplexml|domainexception|domattr|domattribute_name|domattribute_set_value|domattribute_specified|' +\n        'domattribute_value|domcharacterdata|domcomment|domdocument|domdocument_add_root|domdocument_create_attribute|' +\n        'domdocument_create_cdata_section|domdocument_create_comment|domdocument_create_element|domdocument_create_element_ns|' +\n        'domdocument_create_entity_reference|domdocument_create_processing_instruction|domdocument_create_text_node|domdocument_doctype|' +\n        'domdocument_document_element|domdocument_dump_file|domdocument_dump_mem|domdocument_get_element_by_id|domdocument_get_elements_by_tagname|' +\n        'domdocument_html_dump_mem|domdocument_xinclude|domdocumentfragment|domdocumenttype|domdocumenttype_entities|' +\n        'domdocumenttype_internal_subset|domdocumenttype_name|domdocumenttype_notations|domdocumenttype_public_id|domdocumenttype_system_id|' +\n        'domelement|domelement_get_attribute|domelement_get_attribute_node|domelement_get_elements_by_tagname|domelement_has_attribute|' +\n        'domelement_remove_attribute|domelement_set_attribute|domelement_set_attribute_node|domelement_tagname|domentity|domentityreference|' +\n        'domexception|domimplementation|domnamednodemap|domnode|domnode_add_namespace|domnode_append_child|domnode_append_sibling|' +\n        'domnode_attributes|domnode_child_nodes|domnode_clone_node|domnode_dump_node|domnode_first_child|domnode_get_content|' +\n        'domnode_has_attributes|domnode_has_child_nodes|domnode_insert_before|domnode_is_blank_node|domnode_last_child|domnode_next_sibling|' +\n        'domnode_node_name|domnode_node_type|domnode_node_value|domnode_owner_document|domnode_parent_node|domnode_prefix|domnode_previous_sibling|' +\n        'domnode_remove_child|domnode_replace_child|domnode_replace_node|domnode_set_content|domnode_set_name|domnode_set_namespace|' +\n        'domnode_unlink_node|domnodelist|domnotation|domprocessinginstruction|domprocessinginstruction_data|domprocessinginstruction_target|' +\n        'domtext|domxml_new_doc|domxml_open_file|domxml_open_mem|domxml_version|domxml_xmltree|domxml_xslt_stylesheet|domxml_xslt_stylesheet_doc|' +\n        'domxml_xslt_stylesheet_file|domxml_xslt_version|domxpath|domxsltstylesheet_process|domxsltstylesheet_result_dump_file|' +\n        'domxsltstylesheet_result_dump_mem|dotnet|dotnet_load|doubleval|each|easter_date|easter_days|echo|empty|emptyiterator|' +\n        'enchant_broker_describe|enchant_broker_dict_exists|enchant_broker_free|enchant_broker_free_dict|enchant_broker_get_error|' +\n        'enchant_broker_init|enchant_broker_list_dicts|enchant_broker_request_dict|enchant_broker_request_pwl_dict|enchant_broker_set_ordering|' +\n        'enchant_dict_add_to_personal|enchant_dict_add_to_session|enchant_dict_check|enchant_dict_describe|enchant_dict_get_error|' +\n        'enchant_dict_is_in_session|enchant_dict_quick_check|enchant_dict_store_replacement|enchant_dict_suggest|end|ereg|ereg_replace|eregi|' +\n        'eregi_replace|error_get_last|error_log|error_reporting|errorexception|escapeshellarg|escapeshellcmd|eval|event_add|event_base_free|' +\n        'event_base_loop|event_base_loopbreak|event_base_loopexit|event_base_new|event_base_priority_init|event_base_set|event_buffer_base_set|' +\n        'event_buffer_disable|event_buffer_enable|event_buffer_fd_set|event_buffer_free|event_buffer_new|event_buffer_priority_set|' +\n        'event_buffer_read|event_buffer_set_callback|event_buffer_timeout_set|event_buffer_watermark_set|event_buffer_write|event_del|event_free|' +\n        'event_new|event_set|exception|exec|exif_imagetype|exif_read_data|exif_tagname|exif_thumbnail|exit|exp|expect_expectl|expect_popen|explode|' +\n        'expm1|export|export|extension_loaded|extract|ezmlm_hash|fam_cancel_monitor|fam_close|fam_monitor_collection|fam_monitor_directory|' +\n        'fam_monitor_file|fam_next_event|fam_open|fam_pending|fam_resume_monitor|fam_suspend_monitor|fbsql_affected_rows|fbsql_autocommit|' +\n        'fbsql_blob_size|fbsql_change_user|fbsql_clob_size|fbsql_close|fbsql_commit|fbsql_connect|fbsql_create_blob|fbsql_create_clob|' +\n        'fbsql_create_db|fbsql_data_seek|fbsql_database|fbsql_database_password|fbsql_db_query|fbsql_db_status|fbsql_drop_db|fbsql_errno|' +\n        'fbsql_error|fbsql_fetch_array|fbsql_fetch_assoc|fbsql_fetch_field|fbsql_fetch_lengths|fbsql_fetch_object|fbsql_fetch_row|' +\n        'fbsql_field_flags|fbsql_field_len|fbsql_field_name|fbsql_field_seek|fbsql_field_table|fbsql_field_type|fbsql_free_result|' +\n        'fbsql_get_autostart_info|fbsql_hostname|fbsql_insert_id|fbsql_list_dbs|fbsql_list_fields|fbsql_list_tables|fbsql_next_result|' +\n        'fbsql_num_fields|fbsql_num_rows|fbsql_password|fbsql_pconnect|fbsql_query|fbsql_read_blob|fbsql_read_clob|fbsql_result|fbsql_rollback|' +\n        'fbsql_rows_fetched|fbsql_select_db|fbsql_set_characterset|fbsql_set_lob_mode|fbsql_set_password|fbsql_set_transaction|fbsql_start_db|' +\n        'fbsql_stop_db|fbsql_table_name|fbsql_tablename|fbsql_username|fbsql_warnings|fclose|fdf_add_doc_javascript|fdf_add_template|fdf_close|' +\n        'fdf_create|fdf_enum_values|fdf_errno|fdf_error|fdf_get_ap|fdf_get_attachment|fdf_get_encoding|fdf_get_file|fdf_get_flags|fdf_get_opt|' +\n        'fdf_get_status|fdf_get_value|fdf_get_version|fdf_header|fdf_next_field_name|fdf_open|fdf_open_string|fdf_remove_item|fdf_save|' +\n        'fdf_save_string|fdf_set_ap|fdf_set_encoding|fdf_set_file|fdf_set_flags|fdf_set_javascript_action|fdf_set_on_import_javascript|fdf_set_opt|' +\n        'fdf_set_status|fdf_set_submit_form_action|fdf_set_target_frame|fdf_set_value|fdf_set_version|feof|fflush|fgetc|fgetcsv|fgets|fgetss|file|' +\n        'file_exists|file_get_contents|file_put_contents|fileatime|filectime|filegroup|fileinode|filemtime|fileowner|fileperms|filepro|' +\n        'filepro_fieldcount|filepro_fieldname|filepro_fieldtype|filepro_fieldwidth|filepro_retrieve|filepro_rowcount|filesize|filesystemiterator|' +\n        'filetype|filter_has_var|filter_id|filter_input|filter_input_array|filter_list|filter_var|filter_var_array|filteriterator|finfo_buffer|' +\n        'finfo_close|finfo_file|finfo_open|finfo_set_flags|floatval|flock|floor|flush|fmod|fnmatch|fopen|forward_static_call|' +\n        'forward_static_call_array|fpassthru|fprintf|fputcsv|fputs|fread|frenchtojd|fribidi_log2vis|fscanf|fseek|fsockopen|fstat|ftell|ftok|' +\n        'ftp_alloc|ftp_cdup|ftp_chdir|ftp_chmod|ftp_close|ftp_connect|ftp_delete|ftp_exec|ftp_fget|ftp_fput|ftp_get|ftp_get_option|ftp_login|' +\n        'ftp_mdtm|ftp_mkdir|ftp_nb_continue|ftp_nb_fget|ftp_nb_fput|ftp_nb_get|ftp_nb_put|ftp_nlist|ftp_pasv|ftp_put|ftp_pwd|ftp_quit|ftp_raw|' +\n        'ftp_rawlist|ftp_rename|ftp_rmdir|ftp_set_option|ftp_site|ftp_size|ftp_ssl_connect|ftp_systype|ftruncate|func_get_arg|func_get_args|' +\n        'func_num_args|function_exists|fwrite|gc_collect_cycles|gc_disable|gc_enable|gc_enabled|gd_info|gearmanclient|gearmanjob|gearmantask|' +\n        'gearmanworker|geoip_continent_code_by_name|geoip_country_code3_by_name|geoip_country_code_by_name|geoip_country_name_by_name|' +\n        'geoip_database_info|geoip_db_avail|geoip_db_filename|geoip_db_get_all_info|geoip_id_by_name|geoip_isp_by_name|geoip_org_by_name|' +\n        'geoip_record_by_name|geoip_region_by_name|geoip_region_name_by_code|geoip_time_zone_by_country_and_region|getMeta|getNamed|getValue|' +\n        'get_browser|get_called_class|get_cfg_var|get_class|get_class_methods|get_class_vars|get_current_user|get_declared_classes|' +\n        'get_declared_interfaces|get_declared_traits|get_defined_constants|get_defined_functions|get_defined_vars|get_extension_funcs|get_headers|' +\n        'get_html_translation_table|get_include_path|get_included_files|get_loaded_extensions|get_magic_quotes_gpc|get_magic_quotes_runtime|' +\n        'get_meta_tags|get_object_vars|get_parent_class|get_required_files|get_resource_type|getallheaders|getconstant|getconstants|getconstructor|' +\n        'getcwd|getdate|getdefaultproperties|getdoccomment|getendline|getenv|getextension|getextensionname|getfilename|gethostbyaddr|gethostbyname|' +\n        'gethostbynamel|gethostname|getimagesize|getinterfacenames|getinterfaces|getlastmod|getmethod|getmethods|getmodifiers|getmxrr|getmygid|' +\n        'getmyinode|getmypid|getmyuid|getname|getnamespacename|getopt|getparentclass|getproperties|getproperty|getprotobyname|getprotobynumber|' +\n        'getrandmax|getrusage|getservbyname|getservbyport|getshortname|getstartline|getstaticproperties|getstaticpropertyvalue|gettext|' +\n        'gettimeofday|gettype|glob|globiterator|gmagick|gmagickdraw|gmagickpixel|gmdate|gmmktime|gmp_abs|gmp_add|gmp_and|gmp_clrbit|gmp_cmp|' +\n        'gmp_com|gmp_div|gmp_div_q|gmp_div_qr|gmp_div_r|gmp_divexact|gmp_fact|gmp_gcd|gmp_gcdext|gmp_hamdist|gmp_init|gmp_intval|gmp_invert|' +\n        'gmp_jacobi|gmp_legendre|gmp_mod|gmp_mul|gmp_neg|gmp_nextprime|gmp_or|gmp_perfect_square|gmp_popcount|gmp_pow|gmp_powm|gmp_prob_prime|' +\n        'gmp_random|gmp_scan0|gmp_scan1|gmp_setbit|gmp_sign|gmp_sqrt|gmp_sqrtrem|gmp_strval|gmp_sub|gmp_testbit|gmp_xor|gmstrftime|' +\n        'gnupg_adddecryptkey|gnupg_addencryptkey|gnupg_addsignkey|gnupg_cleardecryptkeys|gnupg_clearencryptkeys|gnupg_clearsignkeys|gnupg_decrypt|' +\n        'gnupg_decryptverify|gnupg_encrypt|gnupg_encryptsign|gnupg_export|gnupg_geterror|gnupg_getprotocol|gnupg_import|gnupg_init|gnupg_keyinfo|' +\n        'gnupg_setarmor|gnupg_seterrormode|gnupg_setsignmode|gnupg_sign|gnupg_verify|gopher_parsedir|grapheme_extract|grapheme_stripos|' +\n        'grapheme_stristr|grapheme_strlen|grapheme_strpos|grapheme_strripos|grapheme_strrpos|grapheme_strstr|grapheme_substr|gregoriantojd|' +\n        'gupnp_context_get_host_ip|gupnp_context_get_port|gupnp_context_get_subscription_timeout|gupnp_context_host_path|gupnp_context_new|' +\n        'gupnp_context_set_subscription_timeout|gupnp_context_timeout_add|gupnp_context_unhost_path|gupnp_control_point_browse_start|' +\n        'gupnp_control_point_browse_stop|gupnp_control_point_callback_set|gupnp_control_point_new|gupnp_device_action_callback_set|' +\n        'gupnp_device_info_get|gupnp_device_info_get_service|gupnp_root_device_get_available|gupnp_root_device_get_relative_location|' +\n        'gupnp_root_device_new|gupnp_root_device_set_available|gupnp_root_device_start|gupnp_root_device_stop|gupnp_service_action_get|' +\n        'gupnp_service_action_return|gupnp_service_action_return_error|gupnp_service_action_set|gupnp_service_freeze_notify|gupnp_service_info_get|' +\n        'gupnp_service_info_get_introspection|gupnp_service_introspection_get_state_variable|gupnp_service_notify|gupnp_service_proxy_action_get|' +\n        'gupnp_service_proxy_action_set|gupnp_service_proxy_add_notify|gupnp_service_proxy_callback_set|gupnp_service_proxy_get_subscribed|' +\n        'gupnp_service_proxy_remove_notify|gupnp_service_proxy_set_subscribed|gupnp_service_thaw_notify|gzclose|gzcompress|gzdecode|gzdeflate|' +\n        'gzencode|gzeof|gzfile|gzgetc|gzgets|gzgetss|gzinflate|gzopen|gzpassthru|gzputs|gzread|gzrewind|gzseek|gztell|gzuncompress|gzwrite|' +\n        'halt_compiler|haruannotation|haruannotation_setborderstyle|haruannotation_sethighlightmode|haruannotation_seticon|' +\n        'haruannotation_setopened|harudestination|harudestination_setfit|harudestination_setfitb|harudestination_setfitbh|harudestination_setfitbv|' +\n        'harudestination_setfith|harudestination_setfitr|harudestination_setfitv|harudestination_setxyz|harudoc|harudoc_addpage|' +\n        'harudoc_addpagelabel|harudoc_construct|harudoc_createoutline|harudoc_getcurrentencoder|harudoc_getcurrentpage|harudoc_getencoder|' +\n        'harudoc_getfont|harudoc_getinfoattr|harudoc_getpagelayout|harudoc_getpagemode|harudoc_getstreamsize|harudoc_insertpage|harudoc_loadjpeg|' +\n        'harudoc_loadpng|harudoc_loadraw|harudoc_loadttc|harudoc_loadttf|harudoc_loadtype1|harudoc_output|harudoc_readfromstream|' +\n        'harudoc_reseterror|harudoc_resetstream|harudoc_save|harudoc_savetostream|harudoc_setcompressionmode|harudoc_setcurrentencoder|' +\n        'harudoc_setencryptionmode|harudoc_setinfoattr|harudoc_setinfodateattr|harudoc_setopenaction|harudoc_setpagelayout|harudoc_setpagemode|' +\n        'harudoc_setpagesconfiguration|harudoc_setpassword|harudoc_setpermission|harudoc_usecnsencodings|harudoc_usecnsfonts|' +\n        'harudoc_usecntencodings|harudoc_usecntfonts|harudoc_usejpencodings|harudoc_usejpfonts|harudoc_usekrencodings|harudoc_usekrfonts|' +\n        'haruencoder|haruencoder_getbytetype|haruencoder_gettype|haruencoder_getunicode|haruencoder_getwritingmode|haruexception|harufont|' +\n        'harufont_getascent|harufont_getcapheight|harufont_getdescent|harufont_getencodingname|harufont_getfontname|harufont_gettextwidth|' +\n        'harufont_getunicodewidth|harufont_getxheight|harufont_measuretext|haruimage|haruimage_getbitspercomponent|haruimage_getcolorspace|' +\n        'haruimage_getheight|haruimage_getsize|haruimage_getwidth|haruimage_setcolormask|haruimage_setmaskimage|haruoutline|' +\n        'haruoutline_setdestination|haruoutline_setopened|harupage|harupage_arc|harupage_begintext|harupage_circle|harupage_closepath|' +\n        'harupage_concat|harupage_createdestination|harupage_createlinkannotation|harupage_createtextannotation|harupage_createurlannotation|' +\n        'harupage_curveto|harupage_curveto2|harupage_curveto3|harupage_drawimage|harupage_ellipse|harupage_endpath|harupage_endtext|' +\n        'harupage_eofill|harupage_eofillstroke|harupage_fill|harupage_fillstroke|harupage_getcharspace|harupage_getcmykfill|harupage_getcmykstroke|' +\n        'harupage_getcurrentfont|harupage_getcurrentfontsize|harupage_getcurrentpos|harupage_getcurrenttextpos|harupage_getdash|' +\n        'harupage_getfillingcolorspace|harupage_getflatness|harupage_getgmode|harupage_getgrayfill|harupage_getgraystroke|harupage_getheight|' +\n        'harupage_gethorizontalscaling|harupage_getlinecap|harupage_getlinejoin|harupage_getlinewidth|harupage_getmiterlimit|harupage_getrgbfill|' +\n        'harupage_getrgbstroke|harupage_getstrokingcolorspace|harupage_gettextleading|harupage_gettextmatrix|harupage_gettextrenderingmode|' +\n        'harupage_gettextrise|harupage_gettextwidth|harupage_gettransmatrix|harupage_getwidth|harupage_getwordspace|harupage_lineto|' +\n        'harupage_measuretext|harupage_movetextpos|harupage_moveto|harupage_movetonextline|harupage_rectangle|harupage_setcharspace|' +\n        'harupage_setcmykfill|harupage_setcmykstroke|harupage_setdash|harupage_setflatness|harupage_setfontandsize|harupage_setgrayfill|' +\n        'harupage_setgraystroke|harupage_setheight|harupage_sethorizontalscaling|harupage_setlinecap|harupage_setlinejoin|harupage_setlinewidth|' +\n        'harupage_setmiterlimit|harupage_setrgbfill|harupage_setrgbstroke|harupage_setrotate|harupage_setsize|harupage_setslideshow|' +\n        'harupage_settextleading|harupage_settextmatrix|harupage_settextrenderingmode|harupage_settextrise|harupage_setwidth|harupage_setwordspace|' +\n        'harupage_showtext|harupage_showtextnextline|harupage_stroke|harupage_textout|harupage_textrect|hasconstant|hash|hash_algos|hash_copy|' +\n        'hash_file|hash_final|hash_hmac|hash_hmac_file|hash_init|hash_update|hash_update_file|hash_update_stream|hasmethod|hasproperty|header|' +\n        'header_register_callback|header_remove|headers_list|headers_sent|hebrev|hebrevc|hex2bin|hexdec|highlight_file|highlight_string|' +\n        'html_entity_decode|htmlentities|htmlspecialchars|htmlspecialchars_decode|http_build_cookie|http_build_query|http_build_str|http_build_url|' +\n        'http_cache_etag|http_cache_last_modified|http_chunked_decode|http_date|http_deflate|http_get|http_get_request_body|' +\n        'http_get_request_body_stream|http_get_request_headers|http_head|http_inflate|http_match_etag|http_match_modified|' +\n        'http_match_request_header|http_negotiate_charset|http_negotiate_content_type|http_negotiate_language|http_parse_cookie|http_parse_headers|' +\n        'http_parse_message|http_parse_params|http_persistent_handles_clean|http_persistent_handles_count|http_persistent_handles_ident|' +\n        'http_post_data|http_post_fields|http_put_data|http_put_file|http_put_stream|http_redirect|http_request|http_request_body_encode|' +\n        'http_request_method_exists|http_request_method_name|http_request_method_register|http_request_method_unregister|http_response_code|' +\n        'http_send_content_disposition|http_send_content_type|http_send_data|http_send_file|http_send_last_modified|http_send_status|' +\n        'http_send_stream|http_support|http_throttle|httpdeflatestream|httpdeflatestream_construct|httpdeflatestream_factory|' +\n        'httpdeflatestream_finish|httpdeflatestream_flush|httpdeflatestream_update|httpinflatestream|httpinflatestream_construct|' +\n        'httpinflatestream_factory|httpinflatestream_finish|httpinflatestream_flush|httpinflatestream_update|httpmessage|httpmessage_addheaders|' +\n        'httpmessage_construct|httpmessage_detach|httpmessage_factory|httpmessage_fromenv|httpmessage_fromstring|httpmessage_getbody|' +\n        'httpmessage_getheader|httpmessage_getheaders|httpmessage_gethttpversion|httpmessage_getparentmessage|httpmessage_getrequestmethod|' +\n        'httpmessage_getrequesturl|httpmessage_getresponsecode|httpmessage_getresponsestatus|httpmessage_gettype|httpmessage_guesscontenttype|' +\n        'httpmessage_prepend|httpmessage_reverse|httpmessage_send|httpmessage_setbody|httpmessage_setheaders|httpmessage_sethttpversion|' +\n        'httpmessage_setrequestmethod|httpmessage_setrequesturl|httpmessage_setresponsecode|httpmessage_setresponsestatus|httpmessage_settype|' +\n        'httpmessage_tomessagetypeobject|httpmessage_tostring|httpquerystring|httpquerystring_construct|httpquerystring_get|httpquerystring_mod|' +\n        'httpquerystring_set|httpquerystring_singleton|httpquerystring_toarray|httpquerystring_tostring|httpquerystring_xlate|httprequest|' +\n        'httprequest_addcookies|httprequest_addheaders|httprequest_addpostfields|httprequest_addpostfile|httprequest_addputdata|' +\n        'httprequest_addquerydata|httprequest_addrawpostdata|httprequest_addssloptions|httprequest_clearhistory|httprequest_construct|' +\n        'httprequest_enablecookies|httprequest_getcontenttype|httprequest_getcookies|httprequest_getheaders|httprequest_gethistory|' +\n        'httprequest_getmethod|httprequest_getoptions|httprequest_getpostfields|httprequest_getpostfiles|httprequest_getputdata|' +\n        'httprequest_getputfile|httprequest_getquerydata|httprequest_getrawpostdata|httprequest_getrawrequestmessage|' +\n        'httprequest_getrawresponsemessage|httprequest_getrequestmessage|httprequest_getresponsebody|httprequest_getresponsecode|' +\n        'httprequest_getresponsecookies|httprequest_getresponsedata|httprequest_getresponseheader|httprequest_getresponseinfo|' +\n        'httprequest_getresponsemessage|httprequest_getresponsestatus|httprequest_getssloptions|httprequest_geturl|httprequest_resetcookies|' +\n        'httprequest_send|httprequest_setcontenttype|httprequest_setcookies|httprequest_setheaders|httprequest_setmethod|httprequest_setoptions|' +\n        'httprequest_setpostfields|httprequest_setpostfiles|httprequest_setputdata|httprequest_setputfile|httprequest_setquerydata|' +\n        'httprequest_setrawpostdata|httprequest_setssloptions|httprequest_seturl|httprequestpool|httprequestpool_attach|httprequestpool_construct|' +\n        'httprequestpool_destruct|httprequestpool_detach|httprequestpool_getattachedrequests|httprequestpool_getfinishedrequests|' +\n        'httprequestpool_reset|httprequestpool_send|httprequestpool_socketperform|httprequestpool_socketselect|httpresponse|httpresponse_capture|' +\n        'httpresponse_getbuffersize|httpresponse_getcache|httpresponse_getcachecontrol|httpresponse_getcontentdisposition|' +\n        'httpresponse_getcontenttype|httpresponse_getdata|httpresponse_getetag|httpresponse_getfile|httpresponse_getgzip|httpresponse_getheader|' +\n        'httpresponse_getlastmodified|httpresponse_getrequestbody|httpresponse_getrequestbodystream|httpresponse_getrequestheaders|' +\n        'httpresponse_getstream|httpresponse_getthrottledelay|httpresponse_guesscontenttype|httpresponse_redirect|httpresponse_send|' +\n        'httpresponse_setbuffersize|httpresponse_setcache|httpresponse_setcachecontrol|httpresponse_setcontentdisposition|' +\n        'httpresponse_setcontenttype|httpresponse_setdata|httpresponse_setetag|httpresponse_setfile|httpresponse_setgzip|httpresponse_setheader|' +\n        'httpresponse_setlastmodified|httpresponse_setstream|httpresponse_setthrottledelay|httpresponse_status|hw_array2objrec|hw_changeobject|' +\n        'hw_children|hw_childrenobj|hw_close|hw_connect|hw_connection_info|hw_cp|hw_deleteobject|hw_docbyanchor|hw_docbyanchorobj|' +\n        'hw_document_attributes|hw_document_bodytag|hw_document_content|hw_document_setcontent|hw_document_size|hw_dummy|hw_edittext|hw_error|' +\n        'hw_errormsg|hw_free_document|hw_getanchors|hw_getanchorsobj|hw_getandlock|hw_getchildcoll|hw_getchildcollobj|hw_getchilddoccoll|' +\n        'hw_getchilddoccollobj|hw_getobject|hw_getobjectbyquery|hw_getobjectbyquerycoll|hw_getobjectbyquerycollobj|hw_getobjectbyqueryobj|' +\n        'hw_getparents|hw_getparentsobj|hw_getrellink|hw_getremote|hw_getremotechildren|hw_getsrcbydestobj|hw_gettext|hw_getusername|hw_identify|' +\n        'hw_incollections|hw_info|hw_inscoll|hw_insdoc|hw_insertanchors|hw_insertdocument|hw_insertobject|hw_mapid|hw_modifyobject|hw_mv|' +\n        'hw_new_document|hw_objrec2array|hw_output_document|hw_pconnect|hw_pipedocument|hw_root|hw_setlinkroot|hw_stat|hw_unlock|hw_who|' +\n        'hwapi_attribute|hwapi_attribute_key|hwapi_attribute_langdepvalue|hwapi_attribute_value|hwapi_attribute_values|hwapi_checkin|' +\n        'hwapi_checkout|hwapi_children|hwapi_content|hwapi_content_mimetype|hwapi_content_read|hwapi_copy|hwapi_dbstat|hwapi_dcstat|' +\n        'hwapi_dstanchors|hwapi_dstofsrcanchor|hwapi_error_count|hwapi_error_reason|hwapi_find|hwapi_ftstat|hwapi_hgcsp|hwapi_hwstat|' +\n        'hwapi_identify|hwapi_info|hwapi_insert|hwapi_insertanchor|hwapi_insertcollection|hwapi_insertdocument|hwapi_link|hwapi_lock|hwapi_move|' +\n        'hwapi_new_content|hwapi_object|hwapi_object_assign|hwapi_object_attreditable|hwapi_object_count|hwapi_object_insert|hwapi_object_new|' +\n        'hwapi_object_remove|hwapi_object_title|hwapi_object_value|hwapi_objectbyanchor|hwapi_parents|hwapi_reason_description|hwapi_reason_type|' +\n        'hwapi_remove|hwapi_replace|hwapi_setcommittedversion|hwapi_srcanchors|hwapi_srcsofdst|hwapi_unlock|hwapi_user|hwapi_userlist|hypot|' +\n        'ibase_add_user|ibase_affected_rows|ibase_backup|ibase_blob_add|ibase_blob_cancel|ibase_blob_close|ibase_blob_create|ibase_blob_echo|' +\n        'ibase_blob_get|ibase_blob_import|ibase_blob_info|ibase_blob_open|ibase_close|ibase_commit|ibase_commit_ret|ibase_connect|ibase_db_info|' +\n        'ibase_delete_user|ibase_drop_db|ibase_errcode|ibase_errmsg|ibase_execute|ibase_fetch_assoc|ibase_fetch_object|ibase_fetch_row|' +\n        'ibase_field_info|ibase_free_event_handler|ibase_free_query|ibase_free_result|ibase_gen_id|ibase_maintain_db|ibase_modify_user|' +\n        'ibase_name_result|ibase_num_fields|ibase_num_params|ibase_param_info|ibase_pconnect|ibase_prepare|ibase_query|ibase_restore|' +\n        'ibase_rollback|ibase_rollback_ret|ibase_server_info|ibase_service_attach|ibase_service_detach|ibase_set_event_handler|ibase_timefmt|' +\n        'ibase_trans|ibase_wait_event|iconv|iconv_get_encoding|iconv_mime_decode|iconv_mime_decode_headers|iconv_mime_encode|iconv_set_encoding|' +\n        'iconv_strlen|iconv_strpos|iconv_strrpos|iconv_substr|id3_get_frame_long_name|id3_get_frame_short_name|id3_get_genre_id|id3_get_genre_list|' +\n        'id3_get_genre_name|id3_get_tag|id3_get_version|id3_remove_tag|id3_set_tag|id3v2attachedpictureframe|id3v2frame|id3v2tag|idate|' +\n        'idn_to_ascii|idn_to_unicode|idn_to_utf8|ifx_affected_rows|ifx_blobinfile_mode|ifx_byteasvarchar|ifx_close|ifx_connect|ifx_copy_blob|' +\n        'ifx_create_blob|ifx_create_char|ifx_do|ifx_error|ifx_errormsg|ifx_fetch_row|ifx_fieldproperties|ifx_fieldtypes|ifx_free_blob|' +\n        'ifx_free_char|ifx_free_result|ifx_get_blob|ifx_get_char|ifx_getsqlca|ifx_htmltbl_result|ifx_nullformat|ifx_num_fields|ifx_num_rows|' +\n        'ifx_pconnect|ifx_prepare|ifx_query|ifx_textasvarchar|ifx_update_blob|ifx_update_char|ifxus_close_slob|ifxus_create_slob|ifxus_free_slob|' +\n        'ifxus_open_slob|ifxus_read_slob|ifxus_seek_slob|ifxus_tell_slob|ifxus_write_slob|ignore_user_abort|iis_add_server|iis_get_dir_security|' +\n        'iis_get_script_map|iis_get_server_by_comment|iis_get_server_by_path|iis_get_server_rights|iis_get_service_state|iis_remove_server|' +\n        'iis_set_app_settings|iis_set_dir_security|iis_set_script_map|iis_set_server_rights|iis_start_server|iis_start_service|iis_stop_server|' +\n        'iis_stop_service|image2wbmp|image_type_to_extension|image_type_to_mime_type|imagealphablending|imageantialias|imagearc|imagechar|' +\n        'imagecharup|imagecolorallocate|imagecolorallocatealpha|imagecolorat|imagecolorclosest|imagecolorclosestalpha|imagecolorclosesthwb|' +\n        'imagecolordeallocate|imagecolorexact|imagecolorexactalpha|imagecolormatch|imagecolorresolve|imagecolorresolvealpha|imagecolorset|' +\n        'imagecolorsforindex|imagecolorstotal|imagecolortransparent|imageconvolution|imagecopy|imagecopymerge|imagecopymergegray|' +\n        'imagecopyresampled|imagecopyresized|imagecreate|imagecreatefromgd|imagecreatefromgd2|imagecreatefromgd2part|imagecreatefromgif|' +\n        'imagecreatefromjpeg|imagecreatefrompng|imagecreatefromstring|imagecreatefromwbmp|imagecreatefromxbm|imagecreatefromxpm|' +\n        'imagecreatetruecolor|imagedashedline|imagedestroy|imageellipse|imagefill|imagefilledarc|imagefilledellipse|imagefilledpolygon|' +\n        'imagefilledrectangle|imagefilltoborder|imagefilter|imagefontheight|imagefontwidth|imageftbbox|imagefttext|imagegammacorrect|imagegd|' +\n        'imagegd2|imagegif|imagegrabscreen|imagegrabwindow|imageinterlace|imageistruecolor|imagejpeg|imagelayereffect|imageline|imageloadfont|' +\n        'imagepalettecopy|imagepng|imagepolygon|imagepsbbox|imagepsencodefont|imagepsextendfont|imagepsfreefont|imagepsloadfont|imagepsslantfont|' +\n        'imagepstext|imagerectangle|imagerotate|imagesavealpha|imagesetbrush|imagesetpixel|imagesetstyle|imagesetthickness|imagesettile|' +\n        'imagestring|imagestringup|imagesx|imagesy|imagetruecolortopalette|imagettfbbox|imagettftext|imagetypes|imagewbmp|imagexbm|imagick|' +\n        'imagick_adaptiveblurimage|imagick_adaptiveresizeimage|imagick_adaptivesharpenimage|imagick_adaptivethresholdimage|imagick_addimage|' +\n        'imagick_addnoiseimage|imagick_affinetransformimage|imagick_animateimages|imagick_annotateimage|imagick_appendimages|imagick_averageimages|' +\n        'imagick_blackthresholdimage|imagick_blurimage|imagick_borderimage|imagick_charcoalimage|imagick_chopimage|imagick_clear|imagick_clipimage|' +\n        'imagick_clippathimage|imagick_clone|imagick_clutimage|imagick_coalesceimages|imagick_colorfloodfillimage|imagick_colorizeimage|' +\n        'imagick_combineimages|imagick_commentimage|imagick_compareimagechannels|imagick_compareimagelayers|imagick_compareimages|' +\n        'imagick_compositeimage|imagick_construct|imagick_contrastimage|imagick_contraststretchimage|imagick_convolveimage|imagick_cropimage|' +\n        'imagick_cropthumbnailimage|imagick_current|imagick_cyclecolormapimage|imagick_decipherimage|imagick_deconstructimages|' +\n        'imagick_deleteimageartifact|imagick_despeckleimage|imagick_destroy|imagick_displayimage|imagick_displayimages|imagick_distortimage|' +\n        'imagick_drawimage|imagick_edgeimage|imagick_embossimage|imagick_encipherimage|imagick_enhanceimage|imagick_equalizeimage|' +\n        'imagick_evaluateimage|imagick_extentimage|imagick_flattenimages|imagick_flipimage|imagick_floodfillpaintimage|imagick_flopimage|' +\n        'imagick_frameimage|imagick_fximage|imagick_gammaimage|imagick_gaussianblurimage|imagick_getcolorspace|imagick_getcompression|' +\n        'imagick_getcompressionquality|imagick_getcopyright|imagick_getfilename|imagick_getfont|imagick_getformat|imagick_getgravity|' +\n        'imagick_gethomeurl|imagick_getimage|imagick_getimagealphachannel|imagick_getimageartifact|imagick_getimagebackgroundcolor|' +\n        'imagick_getimageblob|imagick_getimageblueprimary|imagick_getimagebordercolor|imagick_getimagechanneldepth|' +\n        'imagick_getimagechanneldistortion|imagick_getimagechanneldistortions|imagick_getimagechannelextrema|imagick_getimagechannelmean|' +\n        'imagick_getimagechannelrange|imagick_getimagechannelstatistics|imagick_getimageclipmask|imagick_getimagecolormapcolor|' +\n        'imagick_getimagecolors|imagick_getimagecolorspace|imagick_getimagecompose|imagick_getimagecompression|imagick_getimagecompressionquality|' +\n        'imagick_getimagedelay|imagick_getimagedepth|imagick_getimagedispose|imagick_getimagedistortion|imagick_getimageextrema|' +\n        'imagick_getimagefilename|imagick_getimageformat|imagick_getimagegamma|imagick_getimagegeometry|imagick_getimagegravity|' +\n        'imagick_getimagegreenprimary|imagick_getimageheight|imagick_getimagehistogram|imagick_getimageindex|imagick_getimageinterlacescheme|' +\n        'imagick_getimageinterpolatemethod|imagick_getimageiterations|imagick_getimagelength|imagick_getimagemagicklicense|imagick_getimagematte|' +\n        'imagick_getimagemattecolor|imagick_getimageorientation|imagick_getimagepage|imagick_getimagepixelcolor|imagick_getimageprofile|' +\n        'imagick_getimageprofiles|imagick_getimageproperties|imagick_getimageproperty|imagick_getimageredprimary|imagick_getimageregion|' +\n        'imagick_getimagerenderingintent|imagick_getimageresolution|imagick_getimagesblob|imagick_getimagescene|imagick_getimagesignature|' +\n        'imagick_getimagesize|imagick_getimagetickspersecond|imagick_getimagetotalinkdensity|imagick_getimagetype|imagick_getimageunits|' +\n        'imagick_getimagevirtualpixelmethod|imagick_getimagewhitepoint|imagick_getimagewidth|imagick_getinterlacescheme|imagick_getiteratorindex|' +\n        'imagick_getnumberimages|imagick_getoption|imagick_getpackagename|imagick_getpage|imagick_getpixeliterator|imagick_getpixelregioniterator|' +\n        'imagick_getpointsize|imagick_getquantumdepth|imagick_getquantumrange|imagick_getreleasedate|imagick_getresource|imagick_getresourcelimit|' +\n        'imagick_getsamplingfactors|imagick_getsize|imagick_getsizeoffset|imagick_getversion|imagick_hasnextimage|imagick_haspreviousimage|' +\n        'imagick_identifyimage|imagick_implodeimage|imagick_labelimage|imagick_levelimage|imagick_linearstretchimage|imagick_liquidrescaleimage|' +\n        'imagick_magnifyimage|imagick_mapimage|imagick_mattefloodfillimage|imagick_medianfilterimage|imagick_mergeimagelayers|imagick_minifyimage|' +\n        'imagick_modulateimage|imagick_montageimage|imagick_morphimages|imagick_mosaicimages|imagick_motionblurimage|imagick_negateimage|' +\n        'imagick_newimage|imagick_newpseudoimage|imagick_nextimage|imagick_normalizeimage|imagick_oilpaintimage|imagick_opaquepaintimage|' +\n        'imagick_optimizeimagelayers|imagick_orderedposterizeimage|imagick_paintfloodfillimage|imagick_paintopaqueimage|' +\n        'imagick_painttransparentimage|imagick_pingimage|imagick_pingimageblob|imagick_pingimagefile|imagick_polaroidimage|imagick_posterizeimage|' +\n        'imagick_previewimages|imagick_previousimage|imagick_profileimage|imagick_quantizeimage|imagick_quantizeimages|imagick_queryfontmetrics|' +\n        'imagick_queryfonts|imagick_queryformats|imagick_radialblurimage|imagick_raiseimage|imagick_randomthresholdimage|imagick_readimage|' +\n        'imagick_readimageblob|imagick_readimagefile|imagick_recolorimage|imagick_reducenoiseimage|imagick_removeimage|imagick_removeimageprofile|' +\n        'imagick_render|imagick_resampleimage|imagick_resetimagepage|imagick_resizeimage|imagick_rollimage|imagick_rotateimage|' +\n        'imagick_roundcorners|imagick_sampleimage|imagick_scaleimage|imagick_separateimagechannel|imagick_sepiatoneimage|' +\n        'imagick_setbackgroundcolor|imagick_setcolorspace|imagick_setcompression|imagick_setcompressionquality|imagick_setfilename|' +\n        'imagick_setfirstiterator|imagick_setfont|imagick_setformat|imagick_setgravity|imagick_setimage|imagick_setimagealphachannel|' +\n        'imagick_setimageartifact|imagick_setimagebackgroundcolor|imagick_setimagebias|imagick_setimageblueprimary|imagick_setimagebordercolor|' +\n        'imagick_setimagechanneldepth|imagick_setimageclipmask|imagick_setimagecolormapcolor|imagick_setimagecolorspace|imagick_setimagecompose|' +\n        'imagick_setimagecompression|imagick_setimagecompressionquality|imagick_setimagedelay|imagick_setimagedepth|imagick_setimagedispose|' +\n        'imagick_setimageextent|imagick_setimagefilename|imagick_setimageformat|imagick_setimagegamma|imagick_setimagegravity|' +\n        'imagick_setimagegreenprimary|imagick_setimageindex|imagick_setimageinterlacescheme|imagick_setimageinterpolatemethod|' +\n        'imagick_setimageiterations|imagick_setimagematte|imagick_setimagemattecolor|imagick_setimageopacity|imagick_setimageorientation|' +\n        'imagick_setimagepage|imagick_setimageprofile|imagick_setimageproperty|imagick_setimageredprimary|imagick_setimagerenderingintent|' +\n        'imagick_setimageresolution|imagick_setimagescene|imagick_setimagetickspersecond|imagick_setimagetype|imagick_setimageunits|' +\n        'imagick_setimagevirtualpixelmethod|imagick_setimagewhitepoint|imagick_setinterlacescheme|imagick_setiteratorindex|imagick_setlastiterator|' +\n        'imagick_setoption|imagick_setpage|imagick_setpointsize|imagick_setresolution|imagick_setresourcelimit|imagick_setsamplingfactors|' +\n        'imagick_setsize|imagick_setsizeoffset|imagick_settype|imagick_shadeimage|imagick_shadowimage|imagick_sharpenimage|imagick_shaveimage|' +\n        'imagick_shearimage|imagick_sigmoidalcontrastimage|imagick_sketchimage|imagick_solarizeimage|imagick_spliceimage|imagick_spreadimage|' +\n        'imagick_steganoimage|imagick_stereoimage|imagick_stripimage|imagick_swirlimage|imagick_textureimage|imagick_thresholdimage|' +\n        'imagick_thumbnailimage|imagick_tintimage|imagick_transformimage|imagick_transparentpaintimage|imagick_transposeimage|' +\n        'imagick_transverseimage|imagick_trimimage|imagick_uniqueimagecolors|imagick_unsharpmaskimage|imagick_valid|imagick_vignetteimage|' +\n        'imagick_waveimage|imagick_whitethresholdimage|imagick_writeimage|imagick_writeimagefile|imagick_writeimages|imagick_writeimagesfile|' +\n        'imagickdraw|imagickdraw_affine|imagickdraw_annotation|imagickdraw_arc|imagickdraw_bezier|imagickdraw_circle|imagickdraw_clear|' +\n        'imagickdraw_clone|imagickdraw_color|imagickdraw_comment|imagickdraw_composite|imagickdraw_construct|imagickdraw_destroy|' +\n        'imagickdraw_ellipse|imagickdraw_getclippath|imagickdraw_getcliprule|imagickdraw_getclipunits|imagickdraw_getfillcolor|' +\n        'imagickdraw_getfillopacity|imagickdraw_getfillrule|imagickdraw_getfont|imagickdraw_getfontfamily|imagickdraw_getfontsize|' +\n        'imagickdraw_getfontstyle|imagickdraw_getfontweight|imagickdraw_getgravity|imagickdraw_getstrokeantialias|imagickdraw_getstrokecolor|' +\n        'imagickdraw_getstrokedasharray|imagickdraw_getstrokedashoffset|imagickdraw_getstrokelinecap|imagickdraw_getstrokelinejoin|' +\n        'imagickdraw_getstrokemiterlimit|imagickdraw_getstrokeopacity|imagickdraw_getstrokewidth|imagickdraw_gettextalignment|' +\n        'imagickdraw_gettextantialias|imagickdraw_gettextdecoration|imagickdraw_gettextencoding|imagickdraw_gettextundercolor|' +\n        'imagickdraw_getvectorgraphics|imagickdraw_line|imagickdraw_matte|imagickdraw_pathclose|imagickdraw_pathcurvetoabsolute|' +\n        'imagickdraw_pathcurvetoquadraticbezierabsolute|imagickdraw_pathcurvetoquadraticbezierrelative|' +\n        'imagickdraw_pathcurvetoquadraticbeziersmoothabsolute|imagickdraw_pathcurvetoquadraticbeziersmoothrelative|imagickdraw_pathcurvetorelative|' +\n        'imagickdraw_pathcurvetosmoothabsolute|imagickdraw_pathcurvetosmoothrelative|imagickdraw_pathellipticarcabsolute|' +\n        'imagickdraw_pathellipticarcrelative|imagickdraw_pathfinish|imagickdraw_pathlinetoabsolute|imagickdraw_pathlinetohorizontalabsolute|' +\n        'imagickdraw_pathlinetohorizontalrelative|imagickdraw_pathlinetorelative|imagickdraw_pathlinetoverticalabsolute|' +\n        'imagickdraw_pathlinetoverticalrelative|imagickdraw_pathmovetoabsolute|imagickdraw_pathmovetorelative|imagickdraw_pathstart|' +\n        'imagickdraw_point|imagickdraw_polygon|imagickdraw_polyline|imagickdraw_pop|imagickdraw_popclippath|imagickdraw_popdefs|' +\n        'imagickdraw_poppattern|imagickdraw_push|imagickdraw_pushclippath|imagickdraw_pushdefs|imagickdraw_pushpattern|imagickdraw_rectangle|' +\n        'imagickdraw_render|imagickdraw_rotate|imagickdraw_roundrectangle|imagickdraw_scale|imagickdraw_setclippath|imagickdraw_setcliprule|' +\n        'imagickdraw_setclipunits|imagickdraw_setfillalpha|imagickdraw_setfillcolor|imagickdraw_setfillopacity|imagickdraw_setfillpatternurl|' +\n        'imagickdraw_setfillrule|imagickdraw_setfont|imagickdraw_setfontfamily|imagickdraw_setfontsize|imagickdraw_setfontstretch|' +\n        'imagickdraw_setfontstyle|imagickdraw_setfontweight|imagickdraw_setgravity|imagickdraw_setstrokealpha|imagickdraw_setstrokeantialias|' +\n        'imagickdraw_setstrokecolor|imagickdraw_setstrokedasharray|imagickdraw_setstrokedashoffset|imagickdraw_setstrokelinecap|' +\n        'imagickdraw_setstrokelinejoin|imagickdraw_setstrokemiterlimit|imagickdraw_setstrokeopacity|imagickdraw_setstrokepatternurl|' +\n        'imagickdraw_setstrokewidth|imagickdraw_settextalignment|imagickdraw_settextantialias|imagickdraw_settextdecoration|' +\n        'imagickdraw_settextencoding|imagickdraw_settextundercolor|imagickdraw_setvectorgraphics|imagickdraw_setviewbox|imagickdraw_skewx|' +\n        'imagickdraw_skewy|imagickdraw_translate|imagickpixel|imagickpixel_clear|imagickpixel_construct|imagickpixel_destroy|imagickpixel_getcolor|' +\n        'imagickpixel_getcolorasstring|imagickpixel_getcolorcount|imagickpixel_getcolorvalue|imagickpixel_gethsl|imagickpixel_issimilar|' +\n        'imagickpixel_setcolor|imagickpixel_setcolorvalue|imagickpixel_sethsl|imagickpixeliterator|imagickpixeliterator_clear|' +\n        'imagickpixeliterator_construct|imagickpixeliterator_destroy|imagickpixeliterator_getcurrentiteratorrow|' +\n        'imagickpixeliterator_getiteratorrow|imagickpixeliterator_getnextiteratorrow|imagickpixeliterator_getpreviousiteratorrow|' +\n        'imagickpixeliterator_newpixeliterator|imagickpixeliterator_newpixelregioniterator|imagickpixeliterator_resetiterator|' +\n        'imagickpixeliterator_setiteratorfirstrow|imagickpixeliterator_setiteratorlastrow|imagickpixeliterator_setiteratorrow|' +\n        'imagickpixeliterator_synciterator|imap_8bit|imap_alerts|imap_append|imap_base64|imap_binary|imap_body|imap_bodystruct|imap_check|' +\n        'imap_clearflag_full|imap_close|imap_create|imap_createmailbox|imap_delete|imap_deletemailbox|imap_errors|imap_expunge|imap_fetch_overview|' +\n        'imap_fetchbody|imap_fetchheader|imap_fetchmime|imap_fetchstructure|imap_fetchtext|imap_gc|imap_get_quota|imap_get_quotaroot|imap_getacl|' +\n        'imap_getmailboxes|imap_getsubscribed|imap_header|imap_headerinfo|imap_headers|imap_last_error|imap_list|imap_listmailbox|imap_listscan|' +\n        'imap_listsubscribed|imap_lsub|imap_mail|imap_mail_compose|imap_mail_copy|imap_mail_move|imap_mailboxmsginfo|imap_mime_header_decode|' +\n        'imap_msgno|imap_num_msg|imap_num_recent|imap_open|imap_ping|imap_qprint|imap_rename|imap_renamemailbox|imap_reopen|' +\n        'imap_rfc822_parse_adrlist|imap_rfc822_parse_headers|imap_rfc822_write_address|imap_savebody|imap_scan|imap_scanmailbox|imap_search|' +\n        'imap_set_quota|imap_setacl|imap_setflag_full|imap_sort|imap_status|imap_subscribe|imap_thread|imap_timeout|imap_uid|imap_undelete|' +\n        'imap_unsubscribe|imap_utf7_decode|imap_utf7_encode|imap_utf8|implementsinterface|implode|import_request_variables|in_array|include|' +\n        'include_once|inclued_get_data|inet_ntop|inet_pton|infiniteiterator|ingres_autocommit|ingres_autocommit_state|ingres_charset|ingres_close|' +\n        'ingres_commit|ingres_connect|ingres_cursor|ingres_errno|ingres_error|ingres_errsqlstate|ingres_escape_string|ingres_execute|' +\n        'ingres_fetch_array|ingres_fetch_assoc|ingres_fetch_object|ingres_fetch_proc_return|ingres_fetch_row|ingres_field_length|ingres_field_name|' +\n        'ingres_field_nullable|ingres_field_precision|ingres_field_scale|ingres_field_type|ingres_free_result|ingres_next_error|ingres_num_fields|' +\n        'ingres_num_rows|ingres_pconnect|ingres_prepare|ingres_query|ingres_result_seek|ingres_rollback|ingres_set_environment|' +\n        'ingres_unbuffered_query|ini_alter|ini_get|ini_get_all|ini_restore|ini_set|innamespace|inotify_add_watch|inotify_init|inotify_queue_len|' +\n        'inotify_read|inotify_rm_watch|interface_exists|intl_error_name|intl_get_error_code|intl_get_error_message|intl_is_failure|' +\n        'intldateformatter|intval|invalidargumentexception|invoke|invokeargs|ip2long|iptcembed|iptcparse|is_a|is_array|is_bool|is_callable|is_dir|' +\n        'is_double|is_executable|is_file|is_finite|is_float|is_infinite|is_int|is_integer|is_link|is_long|is_nan|is_null|is_numeric|is_object|' +\n        'is_readable|is_real|is_resource|is_scalar|is_soap_fault|is_string|is_subclass_of|is_uploaded_file|is_writable|is_writeable|isabstract|' +\n        'iscloneable|isdisabled|isfinal|isinstance|isinstantiable|isinterface|isinternal|isiterateable|isset|issubclassof|isuserdefined|iterator|' +\n        'iterator_apply|iterator_count|iterator_to_array|iteratoraggregate|iteratoriterator|java_last_exception_clear|java_last_exception_get|' +\n        'jddayofweek|jdmonthname|jdtofrench|jdtogregorian|jdtojewish|jdtojulian|jdtounix|jewishtojd|join|jpeg2wbmp|json_decode|json_encode|' +\n        'json_last_error|jsonserializable|judy|judy_type|judy_version|juliantojd|kadm5_chpass_principal|kadm5_create_principal|' +\n        'kadm5_delete_principal|kadm5_destroy|kadm5_flush|kadm5_get_policies|kadm5_get_principal|kadm5_get_principals|kadm5_init_with_password|' +\n        'kadm5_modify_principal|key|krsort|ksort|lcfirst|lcg_value|lchgrp|lchown|ldap_8859_to_t61|ldap_add|ldap_bind|ldap_close|ldap_compare|' +\n        'ldap_connect|ldap_count_entries|ldap_delete|ldap_dn2ufn|ldap_err2str|ldap_errno|ldap_error|ldap_explode_dn|ldap_first_attribute|' +\n        'ldap_first_entry|ldap_first_reference|ldap_free_result|ldap_get_attributes|ldap_get_dn|ldap_get_entries|ldap_get_option|ldap_get_values|' +\n        'ldap_get_values_len|ldap_list|ldap_mod_add|ldap_mod_del|ldap_mod_replace|ldap_modify|ldap_next_attribute|ldap_next_entry|' +\n        'ldap_next_reference|ldap_parse_reference|ldap_parse_result|ldap_read|ldap_rename|ldap_sasl_bind|ldap_search|ldap_set_option|' +\n        'ldap_set_rebind_proc|ldap_sort|ldap_start_tls|ldap_t61_to_8859|ldap_unbind|lengthexception|levenshtein|libxml_clear_errors|' +\n        'libxml_disable_entity_loader|libxml_get_errors|libxml_get_last_error|libxml_set_streams_context|libxml_use_internal_errors|libxmlerror|' +\n        'limititerator|link|linkinfo|list|locale|localeconv|localtime|log|log10|log1p|logicexception|long2ip|lstat|ltrim|lzf_compress|' +\n        'lzf_decompress|lzf_optimized_for|m_checkstatus|m_completeauthorizations|m_connect|m_connectionerror|m_deletetrans|m_destroyconn|' +\n        'm_destroyengine|m_getcell|m_getcellbynum|m_getcommadelimited|m_getheader|m_initconn|m_initengine|m_iscommadelimited|m_maxconntimeout|' +\n        'm_monitor|m_numcolumns|m_numrows|m_parsecommadelimited|m_responsekeys|m_responseparam|m_returnstatus|m_setblocking|m_setdropfile|m_setip|' +\n        'm_setssl|m_setssl_cafile|m_setssl_files|m_settimeout|m_sslcert_gen_hash|m_transactionssent|m_transinqueue|m_transkeyval|m_transnew|' +\n        'm_transsend|m_uwait|m_validateidentifier|m_verifyconnection|m_verifysslcert|magic_quotes_runtime|mail|' +\n        'mailparse_determine_best_xfer_encoding|mailparse_msg_create|mailparse_msg_extract_part|mailparse_msg_extract_part_file|' +\n        'mailparse_msg_extract_whole_part_file|mailparse_msg_free|mailparse_msg_get_part|mailparse_msg_get_part_data|mailparse_msg_get_structure|' +\n        'mailparse_msg_parse|mailparse_msg_parse_file|mailparse_rfc822_parse_addresses|mailparse_stream_encode|mailparse_uudecode_all|main|max|' +\n        'maxdb_affected_rows|maxdb_autocommit|maxdb_bind_param|maxdb_bind_result|maxdb_change_user|maxdb_character_set_name|maxdb_client_encoding|' +\n        'maxdb_close|maxdb_close_long_data|maxdb_commit|maxdb_connect|maxdb_connect_errno|maxdb_connect_error|maxdb_data_seek|maxdb_debug|' +\n        'maxdb_disable_reads_from_master|maxdb_disable_rpl_parse|maxdb_dump_debug_info|maxdb_embedded_connect|maxdb_enable_reads_from_master|' +\n        'maxdb_enable_rpl_parse|maxdb_errno|maxdb_error|maxdb_escape_string|maxdb_execute|maxdb_fetch|maxdb_fetch_array|maxdb_fetch_assoc|' +\n        'maxdb_fetch_field|maxdb_fetch_field_direct|maxdb_fetch_fields|maxdb_fetch_lengths|maxdb_fetch_object|maxdb_fetch_row|maxdb_field_count|' +\n        'maxdb_field_seek|maxdb_field_tell|maxdb_free_result|maxdb_get_client_info|maxdb_get_client_version|maxdb_get_host_info|maxdb_get_metadata|' +\n        'maxdb_get_proto_info|maxdb_get_server_info|maxdb_get_server_version|maxdb_info|maxdb_init|maxdb_insert_id|maxdb_kill|maxdb_master_query|' +\n        'maxdb_more_results|maxdb_multi_query|maxdb_next_result|maxdb_num_fields|maxdb_num_rows|maxdb_options|maxdb_param_count|maxdb_ping|' +\n        'maxdb_prepare|maxdb_query|maxdb_real_connect|maxdb_real_escape_string|maxdb_real_query|maxdb_report|maxdb_rollback|' +\n        'maxdb_rpl_parse_enabled|maxdb_rpl_probe|maxdb_rpl_query_type|maxdb_select_db|maxdb_send_long_data|maxdb_send_query|maxdb_server_end|' +\n        'maxdb_server_init|maxdb_set_opt|maxdb_sqlstate|maxdb_ssl_set|maxdb_stat|maxdb_stmt_affected_rows|maxdb_stmt_bind_param|' +\n        'maxdb_stmt_bind_result|maxdb_stmt_close|maxdb_stmt_close_long_data|maxdb_stmt_data_seek|maxdb_stmt_errno|maxdb_stmt_error|' +\n        'maxdb_stmt_execute|maxdb_stmt_fetch|maxdb_stmt_free_result|maxdb_stmt_init|maxdb_stmt_num_rows|maxdb_stmt_param_count|maxdb_stmt_prepare|' +\n        'maxdb_stmt_reset|maxdb_stmt_result_metadata|maxdb_stmt_send_long_data|maxdb_stmt_sqlstate|maxdb_stmt_store_result|maxdb_store_result|' +\n        'maxdb_thread_id|maxdb_thread_safe|maxdb_use_result|maxdb_warning_count|mb_check_encoding|mb_convert_case|mb_convert_encoding|' +\n        'mb_convert_kana|mb_convert_variables|mb_decode_mimeheader|mb_decode_numericentity|mb_detect_encoding|mb_detect_order|mb_encode_mimeheader|' +\n        'mb_encode_numericentity|mb_encoding_aliases|mb_ereg|mb_ereg_match|mb_ereg_replace|mb_ereg_search|mb_ereg_search_getpos|' +\n        'mb_ereg_search_getregs|mb_ereg_search_init|mb_ereg_search_pos|mb_ereg_search_regs|mb_ereg_search_setpos|mb_eregi|mb_eregi_replace|' +\n        'mb_get_info|mb_http_input|mb_http_output|mb_internal_encoding|mb_language|mb_list_encodings|mb_output_handler|mb_parse_str|' +\n        'mb_preferred_mime_name|mb_regex_encoding|mb_regex_set_options|mb_send_mail|mb_split|mb_strcut|mb_strimwidth|mb_stripos|mb_stristr|' +\n        'mb_strlen|mb_strpos|mb_strrchr|mb_strrichr|mb_strripos|mb_strrpos|mb_strstr|mb_strtolower|mb_strtoupper|mb_strwidth|' +\n        'mb_substitute_character|mb_substr|mb_substr_count|mcrypt_cbc|mcrypt_cfb|mcrypt_create_iv|mcrypt_decrypt|mcrypt_ecb|' +\n        'mcrypt_enc_get_algorithms_name|mcrypt_enc_get_block_size|mcrypt_enc_get_iv_size|mcrypt_enc_get_key_size|mcrypt_enc_get_modes_name|' +\n        'mcrypt_enc_get_supported_key_sizes|mcrypt_enc_is_block_algorithm|mcrypt_enc_is_block_algorithm_mode|mcrypt_enc_is_block_mode|' +\n        'mcrypt_enc_self_test|mcrypt_encrypt|mcrypt_generic|mcrypt_generic_deinit|mcrypt_generic_end|mcrypt_generic_init|mcrypt_get_block_size|' +\n        'mcrypt_get_cipher_name|mcrypt_get_iv_size|mcrypt_get_key_size|mcrypt_list_algorithms|mcrypt_list_modes|mcrypt_module_close|' +\n        'mcrypt_module_get_algo_block_size|mcrypt_module_get_algo_key_size|mcrypt_module_get_supported_key_sizes|mcrypt_module_is_block_algorithm|' +\n        'mcrypt_module_is_block_algorithm_mode|mcrypt_module_is_block_mode|mcrypt_module_open|mcrypt_module_self_test|mcrypt_ofb|md5|md5_file|' +\n        'mdecrypt_generic|memcache|memcache_debug|memcached|memory_get_peak_usage|memory_get_usage|messageformatter|metaphone|method_exists|mhash|' +\n        'mhash_count|mhash_get_block_size|mhash_get_hash_name|mhash_keygen_s2k|microtime|mime_content_type|min|ming_keypress|' +\n        'ming_setcubicthreshold|ming_setscale|ming_setswfcompression|ming_useconstants|ming_useswfversion|mkdir|mktime|money_format|mongo|' +\n        'mongobindata|mongocode|mongocollection|mongoconnectionexception|mongocursor|mongocursorexception|mongocursortimeoutexception|mongodate|' +\n        'mongodb|mongodbref|mongoexception|mongogridfs|mongogridfscursor|mongogridfsexception|mongogridfsfile|mongoid|mongoint32|mongoint64|' +\n        'mongomaxkey|mongominkey|mongoregex|mongotimestamp|move_uploaded_file|mpegfile|mqseries_back|mqseries_begin|mqseries_close|mqseries_cmit|' +\n        'mqseries_conn|mqseries_connx|mqseries_disc|mqseries_get|mqseries_inq|mqseries_open|mqseries_put|mqseries_put1|mqseries_set|' +\n        'mqseries_strerror|msession_connect|msession_count|msession_create|msession_destroy|msession_disconnect|msession_find|msession_get|' +\n        'msession_get_array|msession_get_data|msession_inc|msession_list|msession_listvar|msession_lock|msession_plugin|msession_randstr|' +\n        'msession_set|msession_set_array|msession_set_data|msession_timeout|msession_uniq|msession_unlock|msg_get_queue|msg_queue_exists|' +\n        'msg_receive|msg_remove_queue|msg_send|msg_set_queue|msg_stat_queue|msql|msql_affected_rows|msql_close|msql_connect|msql_create_db|' +\n        'msql_createdb|msql_data_seek|msql_db_query|msql_dbname|msql_drop_db|msql_error|msql_fetch_array|msql_fetch_field|msql_fetch_object|' +\n        'msql_fetch_row|msql_field_flags|msql_field_len|msql_field_name|msql_field_seek|msql_field_table|msql_field_type|msql_fieldflags|' +\n        'msql_fieldlen|msql_fieldname|msql_fieldtable|msql_fieldtype|msql_free_result|msql_list_dbs|msql_list_fields|msql_list_tables|' +\n        'msql_num_fields|msql_num_rows|msql_numfields|msql_numrows|msql_pconnect|msql_query|msql_regcase|msql_result|msql_select_db|msql_tablename|' +\n        'mssql_bind|mssql_close|mssql_connect|mssql_data_seek|mssql_execute|mssql_fetch_array|mssql_fetch_assoc|mssql_fetch_batch|' +\n        'mssql_fetch_field|mssql_fetch_object|mssql_fetch_row|mssql_field_length|mssql_field_name|mssql_field_seek|mssql_field_type|' +\n        'mssql_free_result|mssql_free_statement|mssql_get_last_message|mssql_guid_string|mssql_init|mssql_min_error_severity|' +\n        'mssql_min_message_severity|mssql_next_result|mssql_num_fields|mssql_num_rows|mssql_pconnect|mssql_query|mssql_result|mssql_rows_affected|' +\n        'mssql_select_db|mt_getrandmax|mt_rand|mt_srand|multipleiterator|mysql_affected_rows|mysql_client_encoding|mysql_close|mysql_connect|' +\n        'mysql_create_db|mysql_data_seek|mysql_db_name|mysql_db_query|mysql_drop_db|mysql_errno|mysql_error|mysql_escape_string|mysql_fetch_array|' +\n        'mysql_fetch_assoc|mysql_fetch_field|mysql_fetch_lengths|mysql_fetch_object|mysql_fetch_row|mysql_field_flags|mysql_field_len|' +\n        'mysql_field_name|mysql_field_seek|mysql_field_table|mysql_field_type|mysql_free_result|mysql_get_client_info|mysql_get_host_info|' +\n        'mysql_get_proto_info|mysql_get_server_info|mysql_info|mysql_insert_id|mysql_list_dbs|mysql_list_fields|mysql_list_processes|' +\n        'mysql_list_tables|mysql_num_fields|mysql_num_rows|mysql_pconnect|mysql_ping|mysql_query|mysql_real_escape_string|mysql_result|' +\n        'mysql_select_db|mysql_set_charset|mysql_stat|mysql_tablename|mysql_thread_id|mysql_unbuffered_query|mysqli|mysqli_affected_rows|' +\n        'mysqli_autocommit|mysqli_bind_param|mysqli_bind_result|mysqli_cache_stats|mysqli_change_user|mysqli_character_set_name|' +\n        'mysqli_client_encoding|mysqli_close|mysqli_commit|mysqli_connect|mysqli_connect_errno|mysqli_connect_error|mysqli_data_seek|' +\n        'mysqli_debug|mysqli_disable_reads_from_master|mysqli_disable_rpl_parse|mysqli_driver|mysqli_dump_debug_info|mysqli_embedded_server_end|' +\n        'mysqli_embedded_server_start|mysqli_enable_reads_from_master|mysqli_enable_rpl_parse|mysqli_errno|mysqli_error|mysqli_escape_string|' +\n        'mysqli_execute|mysqli_fetch|mysqli_fetch_all|mysqli_fetch_array|mysqli_fetch_assoc|mysqli_fetch_field|mysqli_fetch_field_direct|' +\n        'mysqli_fetch_fields|mysqli_fetch_lengths|mysqli_fetch_object|mysqli_fetch_row|mysqli_field_count|mysqli_field_seek|mysqli_field_tell|' +\n        'mysqli_free_result|mysqli_get_charset|mysqli_get_client_info|mysqli_get_client_stats|mysqli_get_client_version|mysqli_get_connection_stats|' +\n        'mysqli_get_host_info|mysqli_get_metadata|mysqli_get_proto_info|mysqli_get_server_info|mysqli_get_server_version|mysqli_get_warnings|' +\n        'mysqli_info|mysqli_init|mysqli_insert_id|mysqli_kill|mysqli_link_construct|mysqli_master_query|mysqli_more_results|mysqli_multi_query|' +\n        'mysqli_next_result|mysqli_num_fields|mysqli_num_rows|mysqli_options|mysqli_param_count|mysqli_ping|mysqli_poll|mysqli_prepare|' +\n        'mysqli_query|mysqli_real_connect|mysqli_real_escape_string|mysqli_real_query|mysqli_reap_async_query|mysqli_refresh|mysqli_report|' +\n        'mysqli_result|mysqli_rollback|mysqli_rpl_parse_enabled|mysqli_rpl_probe|mysqli_rpl_query_type|mysqli_select_db|mysqli_send_long_data|' +\n        'mysqli_send_query|mysqli_set_charset|mysqli_set_local_infile_default|mysqli_set_local_infile_handler|mysqli_set_opt|mysqli_slave_query|' +\n        'mysqli_sqlstate|mysqli_ssl_set|mysqli_stat|mysqli_stmt|mysqli_stmt_affected_rows|mysqli_stmt_attr_get|mysqli_stmt_attr_set|' +\n        'mysqli_stmt_bind_param|mysqli_stmt_bind_result|mysqli_stmt_close|mysqli_stmt_data_seek|mysqli_stmt_errno|mysqli_stmt_error|' +\n        'mysqli_stmt_execute|mysqli_stmt_fetch|mysqli_stmt_field_count|mysqli_stmt_free_result|mysqli_stmt_get_result|mysqli_stmt_get_warnings|' +\n        'mysqli_stmt_init|mysqli_stmt_insert_id|mysqli_stmt_next_result|mysqli_stmt_num_rows|mysqli_stmt_param_count|mysqli_stmt_prepare|' +\n        'mysqli_stmt_reset|mysqli_stmt_result_metadata|mysqli_stmt_send_long_data|mysqli_stmt_sqlstate|mysqli_stmt_store_result|mysqli_store_result|' +\n        'mysqli_thread_id|mysqli_thread_safe|mysqli_use_result|mysqli_warning|mysqli_warning_count|mysqlnd_ms_get_stats|' +\n        'mysqlnd_ms_query_is_select|mysqlnd_ms_set_user_pick_server|mysqlnd_qc_change_handler|mysqlnd_qc_clear_cache|mysqlnd_qc_get_cache_info|' +\n        'mysqlnd_qc_get_core_stats|mysqlnd_qc_get_handler|mysqlnd_qc_get_query_trace_log|mysqlnd_qc_set_user_handlers|natcasesort|natsort|' +\n        'ncurses_addch|ncurses_addchnstr|ncurses_addchstr|ncurses_addnstr|ncurses_addstr|ncurses_assume_default_colors|ncurses_attroff|' +\n        'ncurses_attron|ncurses_attrset|ncurses_baudrate|ncurses_beep|ncurses_bkgd|ncurses_bkgdset|ncurses_border|ncurses_bottom_panel|' +\n        'ncurses_can_change_color|ncurses_cbreak|ncurses_clear|ncurses_clrtobot|ncurses_clrtoeol|ncurses_color_content|ncurses_color_set|' +\n        'ncurses_curs_set|ncurses_def_prog_mode|ncurses_def_shell_mode|ncurses_define_key|ncurses_del_panel|ncurses_delay_output|ncurses_delch|' +\n        'ncurses_deleteln|ncurses_delwin|ncurses_doupdate|ncurses_echo|ncurses_echochar|ncurses_end|ncurses_erase|ncurses_erasechar|ncurses_filter|' +\n        'ncurses_flash|ncurses_flushinp|ncurses_getch|ncurses_getmaxyx|ncurses_getmouse|ncurses_getyx|ncurses_halfdelay|ncurses_has_colors|' +\n        'ncurses_has_ic|ncurses_has_il|ncurses_has_key|ncurses_hide_panel|ncurses_hline|ncurses_inch|ncurses_init|ncurses_init_color|' +\n        'ncurses_init_pair|ncurses_insch|ncurses_insdelln|ncurses_insertln|ncurses_insstr|ncurses_instr|ncurses_isendwin|ncurses_keyok|' +\n        'ncurses_keypad|ncurses_killchar|ncurses_longname|ncurses_meta|ncurses_mouse_trafo|ncurses_mouseinterval|ncurses_mousemask|ncurses_move|' +\n        'ncurses_move_panel|ncurses_mvaddch|ncurses_mvaddchnstr|ncurses_mvaddchstr|ncurses_mvaddnstr|ncurses_mvaddstr|ncurses_mvcur|' +\n        'ncurses_mvdelch|ncurses_mvgetch|ncurses_mvhline|ncurses_mvinch|ncurses_mvvline|ncurses_mvwaddstr|ncurses_napms|ncurses_new_panel|' +\n        'ncurses_newpad|ncurses_newwin|ncurses_nl|ncurses_nocbreak|ncurses_noecho|ncurses_nonl|ncurses_noqiflush|ncurses_noraw|' +\n        'ncurses_pair_content|ncurses_panel_above|ncurses_panel_below|ncurses_panel_window|ncurses_pnoutrefresh|ncurses_prefresh|ncurses_putp|' +\n        'ncurses_qiflush|ncurses_raw|ncurses_refresh|ncurses_replace_panel|ncurses_reset_prog_mode|ncurses_reset_shell_mode|ncurses_resetty|' +\n        'ncurses_savetty|ncurses_scr_dump|ncurses_scr_init|ncurses_scr_restore|ncurses_scr_set|ncurses_scrl|ncurses_show_panel|ncurses_slk_attr|' +\n        'ncurses_slk_attroff|ncurses_slk_attron|ncurses_slk_attrset|ncurses_slk_clear|ncurses_slk_color|ncurses_slk_init|ncurses_slk_noutrefresh|' +\n        'ncurses_slk_refresh|ncurses_slk_restore|ncurses_slk_set|ncurses_slk_touch|ncurses_standend|ncurses_standout|ncurses_start_color|' +\n        'ncurses_termattrs|ncurses_termname|ncurses_timeout|ncurses_top_panel|ncurses_typeahead|ncurses_ungetch|ncurses_ungetmouse|' +\n        'ncurses_update_panels|ncurses_use_default_colors|ncurses_use_env|ncurses_use_extended_names|ncurses_vidattr|ncurses_vline|ncurses_waddch|' +\n        'ncurses_waddstr|ncurses_wattroff|ncurses_wattron|ncurses_wattrset|ncurses_wborder|ncurses_wclear|ncurses_wcolor_set|ncurses_werase|' +\n        'ncurses_wgetch|ncurses_whline|ncurses_wmouse_trafo|ncurses_wmove|ncurses_wnoutrefresh|ncurses_wrefresh|ncurses_wstandend|' +\n        'ncurses_wstandout|ncurses_wvline|newinstance|newinstanceargs|newt_bell|newt_button|newt_button_bar|newt_centered_window|newt_checkbox|' +\n        'newt_checkbox_get_value|newt_checkbox_set_flags|newt_checkbox_set_value|newt_checkbox_tree|newt_checkbox_tree_add_item|' +\n        'newt_checkbox_tree_find_item|newt_checkbox_tree_get_current|newt_checkbox_tree_get_entry_value|newt_checkbox_tree_get_multi_selection|' +\n        'newt_checkbox_tree_get_selection|newt_checkbox_tree_multi|newt_checkbox_tree_set_current|newt_checkbox_tree_set_entry|' +\n        'newt_checkbox_tree_set_entry_value|newt_checkbox_tree_set_width|newt_clear_key_buffer|newt_cls|newt_compact_button|' +\n        'newt_component_add_callback|newt_component_takes_focus|newt_create_grid|newt_cursor_off|newt_cursor_on|newt_delay|newt_draw_form|' +\n        'newt_draw_root_text|newt_entry|newt_entry_get_value|newt_entry_set|newt_entry_set_filter|newt_entry_set_flags|newt_finished|newt_form|' +\n        'newt_form_add_component|newt_form_add_components|newt_form_add_hot_key|newt_form_destroy|newt_form_get_current|newt_form_run|' +\n        'newt_form_set_background|newt_form_set_height|newt_form_set_size|newt_form_set_timer|newt_form_set_width|newt_form_watch_fd|' +\n        'newt_get_screen_size|newt_grid_add_components_to_form|newt_grid_basic_window|newt_grid_free|newt_grid_get_size|newt_grid_h_close_stacked|' +\n        'newt_grid_h_stacked|newt_grid_place|newt_grid_set_field|newt_grid_simple_window|newt_grid_v_close_stacked|newt_grid_v_stacked|' +\n        'newt_grid_wrapped_window|newt_grid_wrapped_window_at|newt_init|newt_label|newt_label_set_text|newt_listbox|newt_listbox_append_entry|' +\n        'newt_listbox_clear|newt_listbox_clear_selection|newt_listbox_delete_entry|newt_listbox_get_current|newt_listbox_get_selection|' +\n        'newt_listbox_insert_entry|newt_listbox_item_count|newt_listbox_select_item|newt_listbox_set_current|newt_listbox_set_current_by_key|' +\n        'newt_listbox_set_data|newt_listbox_set_entry|newt_listbox_set_width|newt_listitem|newt_listitem_get_data|newt_listitem_set|' +\n        'newt_open_window|newt_pop_help_line|newt_pop_window|newt_push_help_line|newt_radio_get_current|newt_radiobutton|newt_redraw_help_line|' +\n        'newt_reflow_text|newt_refresh|newt_resize_screen|newt_resume|newt_run_form|newt_scale|newt_scale_set|newt_scrollbar_set|' +\n        'newt_set_help_callback|newt_set_suspend_callback|newt_suspend|newt_textbox|newt_textbox_get_num_lines|newt_textbox_reflowed|' +\n        'newt_textbox_set_height|newt_textbox_set_text|newt_vertical_scrollbar|newt_wait_for_key|newt_win_choice|newt_win_entries|newt_win_menu|' +\n        'newt_win_message|newt_win_messagev|newt_win_ternary|next|ngettext|nl2br|nl_langinfo|norewinditerator|normalizer|notes_body|notes_copy_db|' +\n        'notes_create_db|notes_create_note|notes_drop_db|notes_find_note|notes_header_info|notes_list_msgs|notes_mark_read|notes_mark_unread|' +\n        'notes_nav_create|notes_search|notes_unread|notes_version|nsapi_request_headers|nsapi_response_headers|nsapi_virtual|nthmac|number_format|' +\n        'numberformatter|oauth|oauth_get_sbs|oauth_urlencode|oauthexception|oauthprovider|ob_clean|ob_deflatehandler|ob_end_clean|ob_end_flush|' +\n        'ob_etaghandler|ob_flush|ob_get_clean|ob_get_contents|ob_get_flush|ob_get_length|ob_get_level|ob_get_status|ob_gzhandler|ob_iconv_handler|' +\n        'ob_implicit_flush|ob_inflatehandler|ob_list_handlers|ob_start|ob_tidyhandler|oci_bind_array_by_name|oci_bind_by_name|oci_cancel|' +\n        'oci_client_version|oci_close|oci_collection_append|oci_collection_assign|oci_collection_element_assign|oci_collection_element_get|' +\n        'oci_collection_free|oci_collection_max|oci_collection_size|oci_collection_trim|oci_commit|oci_connect|oci_define_by_name|oci_error|' +\n        'oci_execute|oci_fetch|oci_fetch_all|oci_fetch_array|oci_fetch_assoc|oci_fetch_object|oci_fetch_row|oci_field_is_null|oci_field_name|' +\n        'oci_field_precision|oci_field_scale|oci_field_size|oci_field_type|oci_field_type_raw|oci_free_statement|oci_internal_debug|oci_lob_append|' +\n        'oci_lob_close|oci_lob_copy|oci_lob_eof|oci_lob_erase|oci_lob_export|oci_lob_flush|oci_lob_free|oci_lob_getbuffering|oci_lob_import|' +\n        'oci_lob_is_equal|oci_lob_load|oci_lob_read|oci_lob_rewind|oci_lob_save|oci_lob_savefile|oci_lob_seek|oci_lob_setbuffering|oci_lob_size|' +\n        'oci_lob_tell|oci_lob_truncate|oci_lob_write|oci_lob_writetemporary|oci_lob_writetofile|oci_new_collection|oci_new_connect|oci_new_cursor|' +\n        'oci_new_descriptor|oci_num_fields|oci_num_rows|oci_parse|oci_password_change|oci_pconnect|oci_result|oci_rollback|oci_server_version|' +\n        'oci_set_action|oci_set_client_identifier|oci_set_client_info|oci_set_edition|oci_set_module_name|oci_set_prefetch|oci_statement_type|' +\n        'ocibindbyname|ocicancel|ocicloselob|ocicollappend|ocicollassign|ocicollassignelem|ocicollgetelem|ocicollmax|ocicollsize|ocicolltrim|' +\n        'ocicolumnisnull|ocicolumnname|ocicolumnprecision|ocicolumnscale|ocicolumnsize|ocicolumntype|ocicolumntyperaw|ocicommit|ocidefinebyname|' +\n        'ocierror|ociexecute|ocifetch|ocifetchinto|ocifetchstatement|ocifreecollection|ocifreecursor|ocifreedesc|ocifreestatement|ociinternaldebug|' +\n        'ociloadlob|ocilogoff|ocilogon|ocinewcollection|ocinewcursor|ocinewdescriptor|ocinlogon|ocinumcols|ociparse|ociplogon|ociresult|' +\n        'ocirollback|ocirowcount|ocisavelob|ocisavelobfile|ociserverversion|ocisetprefetch|ocistatementtype|ociwritelobtofile|ociwritetemporarylob|' +\n        'octdec|odbc_autocommit|odbc_binmode|odbc_close|odbc_close_all|odbc_columnprivileges|odbc_columns|odbc_commit|odbc_connect|odbc_cursor|' +\n        'odbc_data_source|odbc_do|odbc_error|odbc_errormsg|odbc_exec|odbc_execute|odbc_fetch_array|odbc_fetch_into|odbc_fetch_object|' +\n        'odbc_fetch_row|odbc_field_len|odbc_field_name|odbc_field_num|odbc_field_precision|odbc_field_scale|odbc_field_type|odbc_foreignkeys|' +\n        'odbc_free_result|odbc_gettypeinfo|odbc_longreadlen|odbc_next_result|odbc_num_fields|odbc_num_rows|odbc_pconnect|odbc_prepare|' +\n        'odbc_primarykeys|odbc_procedurecolumns|odbc_procedures|odbc_result|odbc_result_all|odbc_rollback|odbc_setoption|odbc_specialcolumns|' +\n        'odbc_statistics|odbc_tableprivileges|odbc_tables|openal_buffer_create|openal_buffer_data|openal_buffer_destroy|openal_buffer_get|' +\n        'openal_buffer_loadwav|openal_context_create|openal_context_current|openal_context_destroy|openal_context_process|openal_context_suspend|' +\n        'openal_device_close|openal_device_open|openal_listener_get|openal_listener_set|openal_source_create|openal_source_destroy|' +\n        'openal_source_get|openal_source_pause|openal_source_play|openal_source_rewind|openal_source_set|openal_source_stop|openal_stream|opendir|' +\n        'openlog|openssl_cipher_iv_length|openssl_csr_export|openssl_csr_export_to_file|openssl_csr_get_public_key|openssl_csr_get_subject|' +\n        'openssl_csr_new|openssl_csr_sign|openssl_decrypt|openssl_dh_compute_key|openssl_digest|openssl_encrypt|openssl_error_string|' +\n        'openssl_free_key|openssl_get_cipher_methods|openssl_get_md_methods|openssl_get_privatekey|openssl_get_publickey|openssl_open|' +\n        'openssl_pkcs12_export|openssl_pkcs12_export_to_file|openssl_pkcs12_read|openssl_pkcs7_decrypt|openssl_pkcs7_encrypt|openssl_pkcs7_sign|' +\n        'openssl_pkcs7_verify|openssl_pkey_export|openssl_pkey_export_to_file|openssl_pkey_free|openssl_pkey_get_details|openssl_pkey_get_private|' +\n        'openssl_pkey_get_public|openssl_pkey_new|openssl_private_decrypt|openssl_private_encrypt|openssl_public_decrypt|openssl_public_encrypt|' +\n        'openssl_random_pseudo_bytes|openssl_seal|openssl_sign|openssl_verify|openssl_x509_check_private_key|openssl_x509_checkpurpose|' +\n        'openssl_x509_export|openssl_x509_export_to_file|openssl_x509_free|openssl_x509_parse|openssl_x509_read|ord|outeriterator|' +\n        'outofboundsexception|outofrangeexception|output_add_rewrite_var|output_reset_rewrite_vars|overflowexception|overload|override_function|' +\n        'ovrimos_close|ovrimos_commit|ovrimos_connect|ovrimos_cursor|ovrimos_exec|ovrimos_execute|ovrimos_fetch_into|ovrimos_fetch_row|' +\n        'ovrimos_field_len|ovrimos_field_name|ovrimos_field_num|ovrimos_field_type|ovrimos_free_result|ovrimos_longreadlen|ovrimos_num_fields|' +\n        'ovrimos_num_rows|ovrimos_prepare|ovrimos_result|ovrimos_result_all|ovrimos_rollback|pack|parentiterator|parse_ini_file|parse_ini_string|' +\n        'parse_str|parse_url|parsekit_compile_file|parsekit_compile_string|parsekit_func_arginfo|passthru|pathinfo|pclose|pcntl_alarm|pcntl_exec|' +\n        'pcntl_fork|pcntl_getpriority|pcntl_setpriority|pcntl_signal|pcntl_signal_dispatch|pcntl_sigprocmask|pcntl_sigtimedwait|pcntl_sigwaitinfo|' +\n        'pcntl_wait|pcntl_waitpid|pcntl_wexitstatus|pcntl_wifexited|pcntl_wifsignaled|pcntl_wifstopped|pcntl_wstopsig|pcntl_wtermsig|' +\n        'pdf_activate_item|pdf_add_annotation|pdf_add_bookmark|pdf_add_launchlink|pdf_add_locallink|pdf_add_nameddest|pdf_add_note|pdf_add_outline|' +\n        'pdf_add_pdflink|pdf_add_table_cell|pdf_add_textflow|pdf_add_thumbnail|pdf_add_weblink|pdf_arc|pdf_arcn|pdf_attach_file|pdf_begin_document|' +\n        'pdf_begin_font|pdf_begin_glyph|pdf_begin_item|pdf_begin_layer|pdf_begin_page|pdf_begin_page_ext|pdf_begin_pattern|pdf_begin_template|' +\n        'pdf_begin_template_ext|pdf_circle|pdf_clip|pdf_close|pdf_close_image|pdf_close_pdi|pdf_close_pdi_page|pdf_closepath|' +\n        'pdf_closepath_fill_stroke|pdf_closepath_stroke|pdf_concat|pdf_continue_text|pdf_create_3dview|pdf_create_action|pdf_create_annotation|' +\n        'pdf_create_bookmark|pdf_create_field|pdf_create_fieldgroup|pdf_create_gstate|pdf_create_pvf|pdf_create_textflow|pdf_curveto|' +\n        'pdf_define_layer|pdf_delete|pdf_delete_pvf|pdf_delete_table|pdf_delete_textflow|pdf_encoding_set_char|pdf_end_document|pdf_end_font|' +\n        'pdf_end_glyph|pdf_end_item|pdf_end_layer|pdf_end_page|pdf_end_page_ext|pdf_end_pattern|pdf_end_template|pdf_endpath|pdf_fill|' +\n        'pdf_fill_imageblock|pdf_fill_pdfblock|pdf_fill_stroke|pdf_fill_textblock|pdf_findfont|pdf_fit_image|pdf_fit_pdi_page|pdf_fit_table|' +\n        'pdf_fit_textflow|pdf_fit_textline|pdf_get_apiname|pdf_get_buffer|pdf_get_errmsg|pdf_get_errnum|pdf_get_font|pdf_get_fontname|' +\n        'pdf_get_fontsize|pdf_get_image_height|pdf_get_image_width|pdf_get_majorversion|pdf_get_minorversion|pdf_get_parameter|' +\n        'pdf_get_pdi_parameter|pdf_get_pdi_value|pdf_get_value|pdf_info_font|pdf_info_matchbox|pdf_info_table|pdf_info_textflow|pdf_info_textline|' +\n        'pdf_initgraphics|pdf_lineto|pdf_load_3ddata|pdf_load_font|pdf_load_iccprofile|pdf_load_image|pdf_makespotcolor|pdf_moveto|pdf_new|' +\n        'pdf_open_ccitt|pdf_open_file|pdf_open_gif|pdf_open_image|pdf_open_image_file|pdf_open_jpeg|pdf_open_memory_image|pdf_open_pdi|' +\n        'pdf_open_pdi_document|pdf_open_pdi_page|pdf_open_tiff|pdf_pcos_get_number|pdf_pcos_get_stream|pdf_pcos_get_string|pdf_place_image|' +\n        'pdf_place_pdi_page|pdf_process_pdi|pdf_rect|pdf_restore|pdf_resume_page|pdf_rotate|pdf_save|pdf_scale|pdf_set_border_color|' +\n        'pdf_set_border_dash|pdf_set_border_style|pdf_set_char_spacing|pdf_set_duration|pdf_set_gstate|pdf_set_horiz_scaling|pdf_set_info|' +\n        'pdf_set_info_author|pdf_set_info_creator|pdf_set_info_keywords|pdf_set_info_subject|pdf_set_info_title|pdf_set_layer_dependency|' +\n        'pdf_set_leading|pdf_set_parameter|pdf_set_text_matrix|pdf_set_text_pos|pdf_set_text_rendering|pdf_set_text_rise|pdf_set_value|' +\n        'pdf_set_word_spacing|pdf_setcolor|pdf_setdash|pdf_setdashpattern|pdf_setflat|pdf_setfont|pdf_setgray|pdf_setgray_fill|pdf_setgray_stroke|' +\n        'pdf_setlinecap|pdf_setlinejoin|pdf_setlinewidth|pdf_setmatrix|pdf_setmiterlimit|pdf_setpolydash|pdf_setrgbcolor|pdf_setrgbcolor_fill|' +\n        'pdf_setrgbcolor_stroke|pdf_shading|pdf_shading_pattern|pdf_shfill|pdf_show|pdf_show_boxed|pdf_show_xy|pdf_skew|pdf_stringwidth|pdf_stroke|' +\n        'pdf_suspend_page|pdf_translate|pdf_utf16_to_utf8|pdf_utf32_to_utf16|pdf_utf8_to_utf16|pdo|pdo_cubrid_schema|pdo_pgsqllobcreate|' +\n        'pdo_pgsqllobopen|pdo_pgsqllobunlink|pdo_sqlitecreateaggregate|pdo_sqlitecreatefunction|pdoexception|pdostatement|pfsockopen|' +\n        'pg_affected_rows|pg_cancel_query|pg_client_encoding|pg_close|pg_connect|pg_connection_busy|pg_connection_reset|pg_connection_status|' +\n        'pg_convert|pg_copy_from|pg_copy_to|pg_dbname|pg_delete|pg_end_copy|pg_escape_bytea|pg_escape_string|pg_execute|pg_fetch_all|' +\n        'pg_fetch_all_columns|pg_fetch_array|pg_fetch_assoc|pg_fetch_object|pg_fetch_result|pg_fetch_row|pg_field_is_null|pg_field_name|' +\n        'pg_field_num|pg_field_prtlen|pg_field_size|pg_field_table|pg_field_type|pg_field_type_oid|pg_free_result|pg_get_notify|pg_get_pid|' +\n        'pg_get_result|pg_host|pg_insert|pg_last_error|pg_last_notice|pg_last_oid|pg_lo_close|pg_lo_create|pg_lo_export|pg_lo_import|pg_lo_open|' +\n        'pg_lo_read|pg_lo_read_all|pg_lo_seek|pg_lo_tell|pg_lo_unlink|pg_lo_write|pg_meta_data|pg_num_fields|pg_num_rows|pg_options|' +\n        'pg_parameter_status|pg_pconnect|pg_ping|pg_port|pg_prepare|pg_put_line|pg_query|pg_query_params|pg_result_error|pg_result_error_field|' +\n        'pg_result_seek|pg_result_status|pg_select|pg_send_execute|pg_send_prepare|pg_send_query|pg_send_query_params|pg_set_client_encoding|' +\n        'pg_set_error_verbosity|pg_trace|pg_transaction_status|pg_tty|pg_unescape_bytea|pg_untrace|pg_update|pg_version|php_check_syntax|' +\n        'php_ini_loaded_file|php_ini_scanned_files|php_logo_guid|php_sapi_name|php_strip_whitespace|php_uname|phpcredits|phpinfo|phpversion|pi|' +\n        'png2wbmp|popen|pos|posix_access|posix_ctermid|posix_errno|posix_get_last_error|posix_getcwd|posix_getegid|posix_geteuid|posix_getgid|' +\n        'posix_getgrgid|posix_getgrnam|posix_getgroups|posix_getlogin|posix_getpgid|posix_getpgrp|posix_getpid|posix_getppid|posix_getpwnam|' +\n        'posix_getpwuid|posix_getrlimit|posix_getsid|posix_getuid|posix_initgroups|posix_isatty|posix_kill|posix_mkfifo|posix_mknod|posix_setegid|' +\n        'posix_seteuid|posix_setgid|posix_setpgid|posix_setsid|posix_setuid|posix_strerror|posix_times|posix_ttyname|posix_uname|pow|preg_filter|' +\n        'preg_grep|preg_last_error|preg_match|preg_match_all|preg_quote|preg_replace|preg_replace_callback|preg_split|prev|print|print_r|' +\n        'printer_abort|printer_close|printer_create_brush|printer_create_dc|printer_create_font|printer_create_pen|printer_delete_brush|' +\n        'printer_delete_dc|printer_delete_font|printer_delete_pen|printer_draw_bmp|printer_draw_chord|printer_draw_elipse|printer_draw_line|' +\n        'printer_draw_pie|printer_draw_rectangle|printer_draw_roundrect|printer_draw_text|printer_end_doc|printer_end_page|printer_get_option|' +\n        'printer_list|printer_logical_fontheight|printer_open|printer_select_brush|printer_select_font|printer_select_pen|printer_set_option|' +\n        'printer_start_doc|printer_start_page|printer_write|printf|proc_close|proc_get_status|proc_nice|proc_open|proc_terminate|property_exists|' +\n        'ps_add_bookmark|ps_add_launchlink|ps_add_locallink|ps_add_note|ps_add_pdflink|ps_add_weblink|ps_arc|ps_arcn|ps_begin_page|' +\n        'ps_begin_pattern|ps_begin_template|ps_circle|ps_clip|ps_close|ps_close_image|ps_closepath|ps_closepath_stroke|ps_continue_text|ps_curveto|' +\n        'ps_delete|ps_end_page|ps_end_pattern|ps_end_template|ps_fill|ps_fill_stroke|ps_findfont|ps_get_buffer|ps_get_parameter|ps_get_value|' +\n        'ps_hyphenate|ps_include_file|ps_lineto|ps_makespotcolor|ps_moveto|ps_new|ps_open_file|ps_open_image|ps_open_image_file|' +\n        'ps_open_memory_image|ps_place_image|ps_rect|ps_restore|ps_rotate|ps_save|ps_scale|ps_set_border_color|ps_set_border_dash|' +\n        'ps_set_border_style|ps_set_info|ps_set_parameter|ps_set_text_pos|ps_set_value|ps_setcolor|ps_setdash|ps_setflat|ps_setfont|ps_setgray|' +\n        'ps_setlinecap|ps_setlinejoin|ps_setlinewidth|ps_setmiterlimit|ps_setoverprintmode|ps_setpolydash|ps_shading|ps_shading_pattern|ps_shfill|' +\n        'ps_show|ps_show2|ps_show_boxed|ps_show_xy|ps_show_xy2|ps_string_geometry|ps_stringwidth|ps_stroke|ps_symbol|ps_symbol_name|' +\n        'ps_symbol_width|ps_translate|pspell_add_to_personal|pspell_add_to_session|pspell_check|pspell_clear_session|pspell_config_create|' +\n        'pspell_config_data_dir|pspell_config_dict_dir|pspell_config_ignore|pspell_config_mode|pspell_config_personal|pspell_config_repl|' +\n        'pspell_config_runtogether|pspell_config_save_repl|pspell_new|pspell_new_config|pspell_new_personal|pspell_save_wordlist|' +\n        'pspell_store_replacement|pspell_suggest|putenv|px_close|px_create_fp|px_date2string|px_delete|px_delete_record|px_get_field|px_get_info|' +\n        'px_get_parameter|px_get_record|px_get_schema|px_get_value|px_insert_record|px_new|px_numfields|px_numrecords|px_open_fp|px_put_record|' +\n        'px_retrieve_record|px_set_blob_file|px_set_parameter|px_set_tablename|px_set_targetencoding|px_set_value|px_timestamp2string|' +\n        'px_update_record|qdom_error|qdom_tree|quoted_printable_decode|quoted_printable_encode|quotemeta|rad2deg|radius_acct_open|' +\n        'radius_add_server|radius_auth_open|radius_close|radius_config|radius_create_request|radius_cvt_addr|radius_cvt_int|radius_cvt_string|' +\n        'radius_demangle|radius_demangle_mppe_key|radius_get_attr|radius_get_vendor_attr|radius_put_addr|radius_put_attr|radius_put_int|' +\n        'radius_put_string|radius_put_vendor_addr|radius_put_vendor_attr|radius_put_vendor_int|radius_put_vendor_string|' +\n        'radius_request_authenticator|radius_send_request|radius_server_secret|radius_strerror|rand|range|rangeexception|rar_wrapper_cache_stats|' +\n        'rararchive|rarentry|rarexception|rawurldecode|rawurlencode|read_exif_data|readdir|readfile|readgzfile|readline|readline_add_history|' +\n        'readline_callback_handler_install|readline_callback_handler_remove|readline_callback_read_char|readline_clear_history|' +\n        'readline_completion_function|readline_info|readline_list_history|readline_on_new_line|readline_read_history|readline_redisplay|' +\n        'readline_write_history|readlink|realpath|realpath_cache_get|realpath_cache_size|recode|recode_file|recode_string|recursivearrayiterator|' +\n        'recursivecachingiterator|recursivecallbackfilteriterator|recursivedirectoryiterator|recursivefilteriterator|recursiveiterator|' +\n        'recursiveiteratoriterator|recursiveregexiterator|recursivetreeiterator|reflection|reflectionclass|reflectionexception|reflectionextension|' +\n        'reflectionfunction|reflectionfunctionabstract|reflectionmethod|reflectionobject|reflectionparameter|reflectionproperty|reflector|' +\n        'regexiterator|register_shutdown_function|register_tick_function|rename|rename_function|require|require_once|reset|resetValue|' +\n        'resourcebundle|restore_error_handler|restore_exception_handler|restore_include_path|return|rewind|rewinddir|rmdir|round|rpm_close|' +\n        'rpm_get_tag|rpm_is_valid|rpm_open|rpm_version|rrd_create|rrd_error|rrd_fetch|rrd_first|rrd_graph|rrd_info|rrd_last|rrd_lastupdate|' +\n        'rrd_restore|rrd_tune|rrd_update|rrd_xport|rrdcreator|rrdgraph|rrdupdater|rsort|rtrim|runkit_class_adopt|runkit_class_emancipate|' +\n        'runkit_constant_add|runkit_constant_redefine|runkit_constant_remove|runkit_function_add|runkit_function_copy|runkit_function_redefine|' +\n        'runkit_function_remove|runkit_function_rename|runkit_import|runkit_lint|runkit_lint_file|runkit_method_add|runkit_method_copy|' +\n        'runkit_method_redefine|runkit_method_remove|runkit_method_rename|runkit_return_value_used|runkit_sandbox_output_handler|' +\n        'runkit_superglobals|runtimeexception|samconnection_commit|samconnection_connect|samconnection_constructor|samconnection_disconnect|' +\n        'samconnection_errno|samconnection_error|samconnection_isconnected|samconnection_peek|samconnection_peekall|samconnection_receive|' +\n        'samconnection_remove|samconnection_rollback|samconnection_send|samconnection_setDebug|samconnection_subscribe|samconnection_unsubscribe|' +\n        'sammessage_body|sammessage_constructor|sammessage_header|sca_createdataobject|sca_getservice|sca_localproxy_createdataobject|' +\n        'sca_soapproxy_createdataobject|scandir|sdo_das_changesummary_beginlogging|sdo_das_changesummary_endlogging|' +\n        'sdo_das_changesummary_getchangeddataobjects|sdo_das_changesummary_getchangetype|sdo_das_changesummary_getoldcontainer|' +\n        'sdo_das_changesummary_getoldvalues|sdo_das_changesummary_islogging|sdo_das_datafactory_addpropertytotype|sdo_das_datafactory_addtype|' +\n        'sdo_das_datafactory_getdatafactory|sdo_das_dataobject_getchangesummary|sdo_das_relational_applychanges|sdo_das_relational_construct|' +\n        'sdo_das_relational_createrootdataobject|sdo_das_relational_executepreparedquery|sdo_das_relational_executequery|' +\n        'sdo_das_setting_getlistindex|sdo_das_setting_getpropertyindex|sdo_das_setting_getpropertyname|sdo_das_setting_getvalue|' +\n        'sdo_das_setting_isset|sdo_das_xml_addtypes|sdo_das_xml_create|sdo_das_xml_createdataobject|sdo_das_xml_createdocument|' +\n        'sdo_das_xml_document_getrootdataobject|sdo_das_xml_document_getrootelementname|sdo_das_xml_document_getrootelementuri|' +\n        'sdo_das_xml_document_setencoding|sdo_das_xml_document_setxmldeclaration|sdo_das_xml_document_setxmlversion|sdo_das_xml_loadfile|' +\n        'sdo_das_xml_loadstring|sdo_das_xml_savefile|sdo_das_xml_savestring|sdo_datafactory_create|sdo_dataobject_clear|' +\n        'sdo_dataobject_createdataobject|sdo_dataobject_getcontainer|sdo_dataobject_getsequence|sdo_dataobject_gettypename|' +\n        'sdo_dataobject_gettypenamespaceuri|sdo_exception_getcause|sdo_list_insert|sdo_model_property_getcontainingtype|' +\n        'sdo_model_property_getdefault|sdo_model_property_getname|sdo_model_property_gettype|sdo_model_property_iscontainment|' +\n        'sdo_model_property_ismany|sdo_model_reflectiondataobject_construct|sdo_model_reflectiondataobject_export|' +\n        'sdo_model_reflectiondataobject_getcontainmentproperty|sdo_model_reflectiondataobject_getinstanceproperties|' +\n        'sdo_model_reflectiondataobject_gettype|sdo_model_type_getbasetype|sdo_model_type_getname|sdo_model_type_getnamespaceuri|' +\n        'sdo_model_type_getproperties|sdo_model_type_getproperty|sdo_model_type_isabstracttype|sdo_model_type_isdatatype|sdo_model_type_isinstance|' +\n        'sdo_model_type_isopentype|sdo_model_type_issequencedtype|sdo_sequence_getproperty|sdo_sequence_insert|sdo_sequence_move|seekableiterator|' +\n        'sem_acquire|sem_get|sem_release|sem_remove|serializable|serialize|session_cache_expire|session_cache_limiter|session_commit|' +\n        'session_decode|session_destroy|session_encode|session_get_cookie_params|session_id|session_is_registered|session_module_name|session_name|' +\n        'session_pgsql_add_error|session_pgsql_get_error|session_pgsql_get_field|session_pgsql_reset|session_pgsql_set_field|session_pgsql_status|' +\n        'session_regenerate_id|session_register|session_save_path|session_set_cookie_params|session_set_save_handler|session_start|' +\n        'session_unregister|session_unset|session_write_close|setCounterClass|set_error_handler|set_exception_handler|set_file_buffer|' +\n        'set_include_path|set_magic_quotes_runtime|set_socket_blocking|set_time_limit|setcookie|setlocale|setproctitle|setrawcookie|' +\n        'setstaticpropertyvalue|setthreadtitle|settype|sha1|sha1_file|shell_exec|shm_attach|shm_detach|shm_get_var|shm_has_var|shm_put_var|' +\n        'shm_remove|shm_remove_var|shmop_close|shmop_delete|shmop_open|shmop_read|shmop_size|shmop_write|show_source|shuffle|signeurlpaiement|' +\n        'similar_text|simplexml_import_dom|simplexml_load_file|simplexml_load_string|simplexmlelement|simplexmliterator|sin|sinh|sizeof|sleep|snmp|' +\n        'snmp2_get|snmp2_getnext|snmp2_real_walk|snmp2_set|snmp2_walk|snmp3_get|snmp3_getnext|snmp3_real_walk|snmp3_set|snmp3_walk|' +\n        'snmp_get_quick_print|snmp_get_valueretrieval|snmp_read_mib|snmp_set_enum_print|snmp_set_oid_numeric_print|snmp_set_oid_output_format|' +\n        'snmp_set_quick_print|snmp_set_valueretrieval|snmpget|snmpgetnext|snmprealwalk|snmpset|snmpwalk|snmpwalkoid|soapclient|soapfault|' +\n        'soapheader|soapparam|soapserver|soapvar|socket_accept|socket_bind|socket_clear_error|socket_close|socket_connect|socket_create|' +\n        'socket_create_listen|socket_create_pair|socket_get_option|socket_get_status|socket_getpeername|socket_getsockname|socket_last_error|' +\n        'socket_listen|socket_read|socket_recv|socket_recvfrom|socket_select|socket_send|socket_sendto|socket_set_block|socket_set_blocking|' +\n        'socket_set_nonblock|socket_set_option|socket_set_timeout|socket_shutdown|socket_strerror|socket_write|solr_get_version|solrclient|' +\n        'solrclientexception|solrdocument|solrdocumentfield|solrexception|solrgenericresponse|solrillegalargumentexception|' +\n        'solrillegaloperationexception|solrinputdocument|solrmodifiableparams|solrobject|solrparams|solrpingresponse|solrquery|solrqueryresponse|' +\n        'solrresponse|solrupdateresponse|solrutils|sort|soundex|sphinxclient|spl_autoload|spl_autoload_call|spl_autoload_extensions|' +\n        'spl_autoload_functions|spl_autoload_register|spl_autoload_unregister|spl_classes|spl_object_hash|splbool|spldoublylinkedlist|splenum|' +\n        'splfileinfo|splfileobject|splfixedarray|splfloat|splheap|splint|split|spliti|splmaxheap|splminheap|splobjectstorage|splobserver|' +\n        'splpriorityqueue|splqueue|splstack|splstring|splsubject|spltempfileobject|spoofchecker|sprintf|sql_regcase|sqlite3|sqlite3result|' +\n        'sqlite3stmt|sqlite_array_query|sqlite_busy_timeout|sqlite_changes|sqlite_close|sqlite_column|sqlite_create_aggregate|' +\n        'sqlite_create_function|sqlite_current|sqlite_error_string|sqlite_escape_string|sqlite_exec|sqlite_factory|sqlite_fetch_all|' +\n        'sqlite_fetch_array|sqlite_fetch_column_types|sqlite_fetch_object|sqlite_fetch_single|sqlite_fetch_string|sqlite_field_name|' +\n        'sqlite_has_more|sqlite_has_prev|sqlite_key|sqlite_last_error|sqlite_last_insert_rowid|sqlite_libencoding|sqlite_libversion|sqlite_next|' +\n        'sqlite_num_fields|sqlite_num_rows|sqlite_open|sqlite_popen|sqlite_prev|sqlite_query|sqlite_rewind|sqlite_seek|sqlite_single_query|' +\n        'sqlite_udf_decode_binary|sqlite_udf_encode_binary|sqlite_unbuffered_query|sqlite_valid|sqrt|srand|sscanf|ssdeep_fuzzy_compare|' +\n        'ssdeep_fuzzy_hash|ssdeep_fuzzy_hash_filename|ssh2_auth_hostbased_file|ssh2_auth_none|ssh2_auth_password|ssh2_auth_pubkey_file|' +\n        'ssh2_connect|ssh2_exec|ssh2_fetch_stream|ssh2_fingerprint|ssh2_methods_negotiated|ssh2_publickey_add|ssh2_publickey_init|' +\n        'ssh2_publickey_list|ssh2_publickey_remove|ssh2_scp_recv|ssh2_scp_send|ssh2_sftp|ssh2_sftp_lstat|ssh2_sftp_mkdir|ssh2_sftp_readlink|' +\n        'ssh2_sftp_realpath|ssh2_sftp_rename|ssh2_sftp_rmdir|ssh2_sftp_stat|ssh2_sftp_symlink|ssh2_sftp_unlink|ssh2_shell|ssh2_tunnel|stat|' +\n        'stats_absolute_deviation|stats_cdf_beta|stats_cdf_binomial|stats_cdf_cauchy|stats_cdf_chisquare|stats_cdf_exponential|stats_cdf_f|' +\n        'stats_cdf_gamma|stats_cdf_laplace|stats_cdf_logistic|stats_cdf_negative_binomial|stats_cdf_noncentral_chisquare|stats_cdf_noncentral_f|' +\n        'stats_cdf_poisson|stats_cdf_t|stats_cdf_uniform|stats_cdf_weibull|stats_covariance|stats_den_uniform|stats_dens_beta|stats_dens_cauchy|' +\n        'stats_dens_chisquare|stats_dens_exponential|stats_dens_f|stats_dens_gamma|stats_dens_laplace|stats_dens_logistic|' +\n        'stats_dens_negative_binomial|stats_dens_normal|stats_dens_pmf_binomial|stats_dens_pmf_hypergeometric|stats_dens_pmf_poisson|stats_dens_t|' +\n        'stats_dens_weibull|stats_harmonic_mean|stats_kurtosis|stats_rand_gen_beta|stats_rand_gen_chisquare|stats_rand_gen_exponential|' +\n        'stats_rand_gen_f|stats_rand_gen_funiform|stats_rand_gen_gamma|stats_rand_gen_ibinomial|stats_rand_gen_ibinomial_negative|' +\n        'stats_rand_gen_int|stats_rand_gen_ipoisson|stats_rand_gen_iuniform|stats_rand_gen_noncenral_chisquare|stats_rand_gen_noncentral_f|' +\n        'stats_rand_gen_noncentral_t|stats_rand_gen_normal|stats_rand_gen_t|stats_rand_get_seeds|stats_rand_phrase_to_seeds|stats_rand_ranf|' +\n        'stats_rand_setall|stats_skew|stats_standard_deviation|stats_stat_binomial_coef|stats_stat_correlation|stats_stat_gennch|' +\n        'stats_stat_independent_t|stats_stat_innerproduct|stats_stat_noncentral_t|stats_stat_paired_t|stats_stat_percentile|stats_stat_powersum|' +\n        'stats_variance|stomp|stomp_connect_error|stomp_version|stompexception|stompframe|str_getcsv|str_ireplace|str_pad|str_repeat|str_replace|' +\n        'str_rot13|str_shuffle|str_split|str_word_count|strcasecmp|strchr|strcmp|strcoll|strcspn|stream_bucket_append|stream_bucket_make_writeable|' +\n        'stream_bucket_new|stream_bucket_prepend|stream_context_create|stream_context_get_default|stream_context_get_options|' +\n        'stream_context_get_params|stream_context_set_default|stream_context_set_option|stream_context_set_params|stream_copy_to_stream|' +\n        'stream_encoding|stream_filter_append|stream_filter_prepend|stream_filter_register|stream_filter_remove|stream_get_contents|' +\n        'stream_get_filters|stream_get_line|stream_get_meta_data|stream_get_transports|stream_get_wrappers|stream_is_local|' +\n        'stream_notification_callback|stream_register_wrapper|stream_resolve_include_path|stream_select|stream_set_blocking|stream_set_read_buffer|' +\n        'stream_set_timeout|stream_set_write_buffer|stream_socket_accept|stream_socket_client|stream_socket_enable_crypto|stream_socket_get_name|' +\n        'stream_socket_pair|stream_socket_recvfrom|stream_socket_sendto|stream_socket_server|stream_socket_shutdown|stream_supports_lock|' +\n        'stream_wrapper_register|stream_wrapper_restore|stream_wrapper_unregister|streamwrapper|strftime|strip_tags|stripcslashes|stripos|' +\n        'stripslashes|stristr|strlen|strnatcasecmp|strnatcmp|strncasecmp|strncmp|strpbrk|strpos|strptime|strrchr|strrev|strripos|strrpos|strspn|' +\n        'strstr|strtok|strtolower|strtotime|strtoupper|strtr|strval|substr|substr_compare|substr_count|substr_replace|svm|svmmodel|svn_add|' +\n        'svn_auth_get_parameter|svn_auth_set_parameter|svn_blame|svn_cat|svn_checkout|svn_cleanup|svn_client_version|svn_commit|svn_delete|' +\n        'svn_diff|svn_export|svn_fs_abort_txn|svn_fs_apply_text|svn_fs_begin_txn2|svn_fs_change_node_prop|svn_fs_check_path|' +\n        'svn_fs_contents_changed|svn_fs_copy|svn_fs_delete|svn_fs_dir_entries|svn_fs_file_contents|svn_fs_file_length|svn_fs_is_dir|svn_fs_is_file|' +\n        'svn_fs_make_dir|svn_fs_make_file|svn_fs_node_created_rev|svn_fs_node_prop|svn_fs_props_changed|svn_fs_revision_prop|svn_fs_revision_root|' +\n        'svn_fs_txn_root|svn_fs_youngest_rev|svn_import|svn_log|svn_ls|svn_mkdir|svn_repos_create|svn_repos_fs|svn_repos_fs_begin_txn_for_commit|' +\n        'svn_repos_fs_commit_txn|svn_repos_hotcopy|svn_repos_open|svn_repos_recover|svn_revert|svn_status|svn_update|swf_actiongeturl|' +\n        'swf_actiongotoframe|swf_actiongotolabel|swf_actionnextframe|swf_actionplay|swf_actionprevframe|swf_actionsettarget|swf_actionstop|' +\n        'swf_actiontogglequality|swf_actionwaitforframe|swf_addbuttonrecord|swf_addcolor|swf_closefile|swf_definebitmap|swf_definefont|' +\n        'swf_defineline|swf_definepoly|swf_definerect|swf_definetext|swf_endbutton|swf_enddoaction|swf_endshape|swf_endsymbol|swf_fontsize|' +\n        'swf_fontslant|swf_fonttracking|swf_getbitmapinfo|swf_getfontinfo|swf_getframe|swf_labelframe|swf_lookat|swf_modifyobject|swf_mulcolor|' +\n        'swf_nextid|swf_oncondition|swf_openfile|swf_ortho|swf_ortho2|swf_perspective|swf_placeobject|swf_polarview|swf_popmatrix|swf_posround|' +\n        'swf_pushmatrix|swf_removeobject|swf_rotate|swf_scale|swf_setfont|swf_setframe|swf_shapearc|swf_shapecurveto|swf_shapecurveto3|' +\n        'swf_shapefillbitmapclip|swf_shapefillbitmaptile|swf_shapefilloff|swf_shapefillsolid|swf_shapelinesolid|swf_shapelineto|swf_shapemoveto|' +\n        'swf_showframe|swf_startbutton|swf_startdoaction|swf_startshape|swf_startsymbol|swf_textwidth|swf_translate|swf_viewport|swfaction|' +\n        'swfbitmap|swfbutton|swfdisplayitem|swffill|swffont|swffontchar|swfgradient|swfmorph|swfmovie|swfprebuiltclip|swfshape|swfsound|' +\n        'swfsoundinstance|swfsprite|swftext|swftextfield|swfvideostream|swish_construct|swish_getmetalist|swish_getpropertylist|swish_prepare|' +\n        'swish_query|swishresult_getmetalist|swishresult_stem|swishresults_getparsedwords|swishresults_getremovedstopwords|swishresults_nextresult|' +\n        'swishresults_seekresult|swishsearch_execute|swishsearch_resetlimit|swishsearch_setlimit|swishsearch_setphrasedelimiter|' +\n        'swishsearch_setsort|swishsearch_setstructure|sybase_affected_rows|sybase_close|sybase_connect|sybase_data_seek|' +\n        'sybase_deadlock_retry_count|sybase_fetch_array|sybase_fetch_assoc|sybase_fetch_field|sybase_fetch_object|sybase_fetch_row|' +\n        'sybase_field_seek|sybase_free_result|sybase_get_last_message|sybase_min_client_severity|sybase_min_error_severity|' +\n        'sybase_min_message_severity|sybase_min_server_severity|sybase_num_fields|sybase_num_rows|sybase_pconnect|sybase_query|sybase_result|' +\n        'sybase_select_db|sybase_set_message_handler|sybase_unbuffered_query|symlink|sys_get_temp_dir|sys_getloadavg|syslog|system|tag|tan|tanh|' +\n        'tcpwrap_check|tempnam|textdomain|tidy|tidy_access_count|tidy_config_count|tidy_diagnose|tidy_error_count|tidy_get_error_buffer|' +\n        'tidy_get_output|tidy_load_config|tidy_reset_config|tidy_save_config|tidy_set_encoding|tidy_setopt|tidy_warning_count|tidynode|time|' +\n        'time_nanosleep|time_sleep_until|timezone_abbreviations_list|timezone_identifiers_list|timezone_location_get|timezone_name_from_abbr|' +\n        'timezone_name_get|timezone_offset_get|timezone_open|timezone_transitions_get|timezone_version_get|tmpfile|token_get_all|token_name|' +\n        'tokyotyrant|tokyotyrantquery|tokyotyranttable|tostring|tostring|touch|trait_exists|transliterator|traversable|trigger_error|trim|uasort|ucfirst|' +\n        'ucwords|udm_add_search_limit|udm_alloc_agent|udm_alloc_agent_array|udm_api_version|udm_cat_list|udm_cat_path|udm_check_charset|' +\n        'udm_check_stored|udm_clear_search_limits|udm_close_stored|udm_crc32|udm_errno|udm_error|udm_find|udm_free_agent|udm_free_ispell_data|' +\n        'udm_free_res|udm_get_doc_count|udm_get_res_field|udm_get_res_param|udm_hash32|udm_load_ispell_data|udm_open_stored|udm_set_agent_param|' +\n        'uksort|umask|underflowexception|unexpectedvalueexception|uniqid|unixtojd|unlink|unpack|unregister_tick_function|unserialize|unset|' +\n        'urldecode|urlencode|use_soap_error_handler|user_error|usleep|usort|utf8_decode|utf8_encode|v8js|v8jsexception|var_dump|var_export|variant|' +\n        'variant_abs|variant_add|variant_and|variant_cast|variant_cat|variant_cmp|variant_date_from_timestamp|variant_date_to_timestamp|' +\n        'variant_div|variant_eqv|variant_fix|variant_get_type|variant_idiv|variant_imp|variant_int|variant_mod|variant_mul|variant_neg|variant_not|' +\n        'variant_or|variant_pow|variant_round|variant_set|variant_set_type|variant_sub|variant_xor|version_compare|vfprintf|virtual|' +\n        'vpopmail_add_alias_domain|vpopmail_add_alias_domain_ex|vpopmail_add_domain|vpopmail_add_domain_ex|vpopmail_add_user|vpopmail_alias_add|' +\n        'vpopmail_alias_del|vpopmail_alias_del_domain|vpopmail_alias_get|vpopmail_alias_get_all|vpopmail_auth_user|vpopmail_del_domain|' +\n        'vpopmail_del_domain_ex|vpopmail_del_user|vpopmail_error|vpopmail_passwd|vpopmail_set_user_quota|vprintf|vsprintf|w32api_deftype|' +\n        'w32api_init_dtype|w32api_invoke_function|w32api_register_function|w32api_set_call_method|wddx_add_vars|wddx_deserialize|wddx_packet_end|' +\n        'wddx_packet_start|wddx_serialize_value|wddx_serialize_vars|win32_continue_service|win32_create_service|win32_delete_service|' +\n        'win32_get_last_control_message|win32_pause_service|win32_ps_list_procs|win32_ps_stat_mem|win32_ps_stat_proc|win32_query_service_status|' +\n        'win32_set_service_status|win32_start_service|win32_start_service_ctrl_dispatcher|win32_stop_service|wincache_fcache_fileinfo|' +\n        'wincache_fcache_meminfo|wincache_lock|wincache_ocache_fileinfo|wincache_ocache_meminfo|wincache_refresh_if_changed|' +\n        'wincache_rplist_fileinfo|wincache_rplist_meminfo|wincache_scache_info|wincache_scache_meminfo|wincache_ucache_add|wincache_ucache_cas|' +\n        'wincache_ucache_clear|wincache_ucache_dec|wincache_ucache_delete|wincache_ucache_exists|wincache_ucache_get|wincache_ucache_inc|' +\n        'wincache_ucache_info|wincache_ucache_meminfo|wincache_ucache_set|wincache_unlock|wordwrap|xattr_get|xattr_list|xattr_remove|xattr_set|' +\n        'xattr_supported|xdiff_file_bdiff|xdiff_file_bdiff_size|xdiff_file_bpatch|xdiff_file_diff|xdiff_file_diff_binary|xdiff_file_merge3|' +\n        'xdiff_file_patch|xdiff_file_patch_binary|xdiff_file_rabdiff|xdiff_string_bdiff|xdiff_string_bdiff_size|xdiff_string_bpatch|' +\n        'xdiff_string_diff|xdiff_string_diff_binary|xdiff_string_merge3|xdiff_string_patch|xdiff_string_patch_binary|xdiff_string_rabdiff|' +\n        'xhprof_disable|xhprof_enable|xhprof_sample_disable|xhprof_sample_enable|xml_error_string|xml_get_current_byte_index|' +\n        'xml_get_current_column_number|xml_get_current_line_number|xml_get_error_code|xml_parse|xml_parse_into_struct|xml_parser_create|' +\n        'xml_parser_create_ns|xml_parser_free|xml_parser_get_option|xml_parser_set_option|xml_set_character_data_handler|xml_set_default_handler|' +\n        'xml_set_element_handler|xml_set_end_namespace_decl_handler|xml_set_external_entity_ref_handler|xml_set_notation_decl_handler|' +\n        'xml_set_object|xml_set_processing_instruction_handler|xml_set_start_namespace_decl_handler|xml_set_unparsed_entity_decl_handler|xmlreader|' +\n        'xmlrpc_decode|xmlrpc_decode_request|xmlrpc_encode|xmlrpc_encode_request|xmlrpc_get_type|xmlrpc_is_fault|xmlrpc_parse_method_descriptions|' +\n        'xmlrpc_server_add_introspection_data|xmlrpc_server_call_method|xmlrpc_server_create|xmlrpc_server_destroy|' +\n        'xmlrpc_server_register_introspection_callback|xmlrpc_server_register_method|xmlrpc_set_type|xmlwriter_end_attribute|xmlwriter_end_cdata|' +\n        'xmlwriter_end_comment|xmlwriter_end_document|xmlwriter_end_dtd|xmlwriter_end_dtd_attlist|xmlwriter_end_dtd_element|' +\n        'xmlwriter_end_dtd_entity|xmlwriter_end_element|xmlwriter_end_pi|xmlwriter_flush|xmlwriter_full_end_element|xmlwriter_open_memory|' +\n        'xmlwriter_open_uri|xmlwriter_output_memory|xmlwriter_set_indent|xmlwriter_set_indent_string|xmlwriter_start_attribute|' +\n        'xmlwriter_start_attribute_ns|xmlwriter_start_cdata|xmlwriter_start_comment|xmlwriter_start_document|xmlwriter_start_dtd|' +\n        'xmlwriter_start_dtd_attlist|xmlwriter_start_dtd_element|xmlwriter_start_dtd_entity|xmlwriter_start_element|xmlwriter_start_element_ns|' +\n        'xmlwriter_start_pi|xmlwriter_text|xmlwriter_write_attribute|xmlwriter_write_attribute_ns|xmlwriter_write_cdata|xmlwriter_write_comment|' +\n        'xmlwriter_write_dtd|xmlwriter_write_dtd_attlist|xmlwriter_write_dtd_element|xmlwriter_write_dtd_entity|xmlwriter_write_element|' +\n        'xmlwriter_write_element_ns|xmlwriter_write_pi|xmlwriter_write_raw|xpath_eval|xpath_eval_expression|xpath_new_context|xpath_register_ns|' +\n        'xpath_register_ns_auto|xptr_eval|xptr_new_context|xslt_backend_info|xslt_backend_name|xslt_backend_version|xslt_create|xslt_errno|' +\n        'xslt_error|xslt_free|xslt_getopt|xslt_process|xslt_set_base|xslt_set_encoding|xslt_set_error_handler|xslt_set_log|xslt_set_object|' +\n        'xslt_set_sax_handler|xslt_set_sax_handlers|xslt_set_scheme_handler|xslt_set_scheme_handlers|xslt_setopt|xsltprocessor|yaml_emit|' +\n        'yaml_emit_file|yaml_parse|yaml_parse_file|yaml_parse_url|yaz_addinfo|yaz_ccl_conf|yaz_ccl_parse|yaz_close|yaz_connect|yaz_database|' +\n        'yaz_element|yaz_errno|yaz_error|yaz_es|yaz_es_result|yaz_get_option|yaz_hits|yaz_itemorder|yaz_present|yaz_range|yaz_record|yaz_scan|' +\n        'yaz_scan_result|yaz_schema|yaz_search|yaz_set_option|yaz_sort|yaz_syntax|yaz_wait|yp_all|yp_cat|yp_err_string|yp_errno|yp_first|' +\n        'yp_get_default_domain|yp_master|yp_match|yp_next|yp_order|zend_logo_guid|zend_thread_id|zend_version|zip_close|zip_entry_close|' +\n        'zip_entry_compressedsize|zip_entry_compressionmethod|zip_entry_filesize|zip_entry_name|zip_entry_open|zip_entry_read|zip_open|zip_read|' +\n        'ziparchive|ziparchive_addemptydir|ziparchive_addfile|ziparchive_addfromstring|ziparchive_close|ziparchive_deleteindex|' +\n        'ziparchive_deletename|ziparchive_extractto|ziparchive_getarchivecomment|ziparchive_getcommentindex|ziparchive_getcommentname|' +\n        'ziparchive_getfromindex|ziparchive_getfromname|ziparchive_getnameindex|ziparchive_getstatusstring|ziparchive_getstream|' +\n        'ziparchive_locatename|ziparchive_open|ziparchive_renameindex|ziparchive_renamename|ziparchive_setCommentName|ziparchive_setarchivecomment|' +\n        'ziparchive_setcommentindex|ziparchive_statindex|ziparchive_statname|ziparchive_unchangeall|ziparchive_unchangearchive|' +\n        'ziparchive_unchangeindex|ziparchive_unchangename|zlib_get_coding_type').split('|')\n    );\n\n    // http://php.net/manual/en/reserved.keywords.php\n    var keywords = lang.arrayToMap(\n        ('abstract|and|array|as|break|case|catch|class|clone|const|continue|declare|default|do|else|elseif|enddeclare|endfor|endforeach|endif|' +\n        'endswitch|endwhile|extends|final|for|foreach|function|global|goto|if|implements|interface|instanceof|namespace|new|or|private|protected|' +\n        'public|static|switch|throw|trait|try|use|var|while|xor').split('|')\n    );\n\n    // http://php.net/manual/en/reserved.keywords.php\n    var languageConstructs = lang.arrayToMap(\n        ('die|echo|empty|exit|eval|include|include_once|isset|list|require|require_once|return|print|unset').split('|')\n    );\n\n    var builtinConstants = lang.arrayToMap(\n        ('true|TRUE|false|FALSE|null|NULL|__CLASS__|__DIR__|__FILE__|__LINE__|__METHOD__|__FUNCTION__|__NAMESPACE__').split('|')\n    );\n\n    var builtinVariables = lang.arrayToMap(\n        ('$GLOBALS|$_SERVER|$_GET|$_POST|$_FILES|$_REQUEST|$_SESSION|$_ENV|$_COOKIE|$php_errormsg|$HTTP_RAW_POST_DATA|' +\n        '$http_response_header|$argc|$argv').split('|')\n    );\n\n    // Discovery done by downloading 'Many HTML files' from:  http://php.net/download-docs.php\n    // Then search for files containing 'deprecated' (case-insensitive) and look at each file that turns up.\n    var builtinFunctionsDeprecated = lang.arrayToMap(\n        ('key_exists|cairo_matrix_create_scale|cairo_matrix_create_translate|call_user_method|call_user_method_array|com_addref|com_get|' +\n        'com_invoke|com_isenum|com_load|com_release|com_set|connection_timeout|cubrid_load_from_glo|cubrid_new_glo|cubrid_save_to_glo|' +\n        'cubrid_send_glo|define_syslog_variables|dl|ereg|ereg_replace|eregi|eregi_replace|hw_documentattributes|hw_documentbodytag|' +\n        'hw_documentsize|hw_outputdocument|imagedashedline|maxdb_bind_param|maxdb_bind_result|maxdb_client_encoding|maxdb_close_long_data|' +\n        'maxdb_execute|maxdb_fetch|maxdb_get_metadata|maxdb_param_count|maxdb_send_long_data|mcrypt_ecb|mcrypt_generic_end|mime_content_type|' +\n        'mysql_createdb|mysql_dbname|mysql_db_query|mysql_drop_db|mysql_dropdb|mysql_escape_string|mysql_fieldflags|mysql_fieldflags|' +\n        'mysql_fieldname|mysql_fieldtable|mysql_fieldtype|mysql_freeresult|mysql_listdbs|mysql_list_fields|mysql_listfields|mysql_list_tables|' +\n        'mysql_listtables|mysql_numfields|mysql_numrows|mysql_selectdb|mysql_tablename|mysqli_bind_param|mysqli_bind_result|' +\n        'mysqli_disable_reads_from_master|mysqli_disable_rpl_parse|mysqli_enable_reads_from_master|mysqli_enable_rpl_parse|mysqli_execute|' +\n        'mysqli_fetch|mysqli_get_metadata|mysqli_master_query|mysqli_param_count|mysqli_rpl_parse_enabled|mysqli_rpl_probe|mysqli_rpl_query_type|' +\n        'mysqli_send_long_data|mysqli_send_query|mysqli_slave_query|ocibindbyname|ocicancel|ocicloselob|ocicollappend|ocicollassign|' +\n        'ocicollassignelem|ocicollgetelem|ocicollmax|ocicollsize|ocicolltrim|ocicolumnisnull|ocicolumnname|ocicolumnprecision|ocicolumnscale|' +\n        'ocicolumnsize|ocicolumntype|ocicolumntyperaw|ocicommit|ocidefinebyname|ocierror|ociexecute|ocifetch|ocifetchinto|ocifetchstatement|' +\n        'ocifreecollection|ocifreecursor|ocifreedesc|ocifreestatement|ociinternaldebug|ociloadlob|ocilogoff|ocilogon|ocinewcollection|' +\n        'ocinewcursor|ocinewdescriptor|ocinlogon|ocinumcols|ociparse|ociplogon|ociresult|ocirollback|ocirowcount|ocisavelob|ocisavelobfile|' +\n        'ociserverversion|ocisetprefetch|ocistatementtype|ociwritelobtofile|ociwritetemporarylob|PDF_add_annotation|PDF_add_bookmark|' +\n        'PDF_add_launchlink|PDF_add_locallink|PDF_add_note|PDF_add_outline|PDF_add_pdflink|PDF_add_weblink|PDF_attach_file|PDF_begin_page|' +\n        'PDF_begin_template|PDF_close_pdi|PDF_close|PDF_findfont|PDF_get_font|PDF_get_fontname|PDF_get_fontsize|PDF_get_image_height|' +\n        'PDF_get_image_width|PDF_get_majorversion|PDF_get_minorversion|PDF_get_pdi_parameter|PDF_get_pdi_value|PDF_open_ccitt|PDF_open_file|' +\n        'PDF_open_gif|PDF_open_image_file|PDF_open_image|PDF_open_jpeg|PDF_open_pdi|PDF_open_tiff|PDF_place_image|PDF_place_pdi_page|' +\n        'PDF_set_border_color|PDF_set_border_dash|PDF_set_border_style|PDF_set_char_spacing|PDF_set_duration|PDF_set_horiz_scaling|' +\n        'PDF_set_info_author|PDF_set_info_creator|PDF_set_info_keywords|PDF_set_info_subject|PDF_set_info_title|PDF_set_leading|' +\n        'PDF_set_text_matrix|PDF_set_text_rendering|PDF_set_text_rise|PDF_set_word_spacing|PDF_setgray_fill|PDF_setgray_stroke|PDF_setgray|' +\n        'PDF_setpolydash|PDF_setrgbcolor_fill|PDF_setrgbcolor_stroke|PDF_setrgbcolor|PDF_show_boxed|php_check_syntax|px_set_tablename|' +\n        'px_set_targetencoding|runkit_sandbox_output_handler|session_is_registered|session_register|session_unregister' +\n        'set_magic_quotes_runtime|magic_quotes_runtime|set_socket_blocking|socket_set_blocking|set_socket_timeout|socket_set_timeout|split|spliti|' +\n        'sql_regcase').split('|')\n    );\n\n    var keywordsDeprecated = lang.arrayToMap(\n        ('cfunction|old_function').split('|')\n    );\n\n    var futureReserved = lang.arrayToMap([]);\n\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : /(?:#|\\/\\/)(?:[^?]|\\?[^>])*/\n            },\n            docComment.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string.regexp\",\n                regex : \"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/][gimy]*\\\\s*(?=[).,;]|$)\"\n            }, {\n                token : \"string\", // \" string start\n                regex : '\"',\n                next : \"qqstring\"\n            }, {\n                token : \"string\", // ' string start\n                regex : \"'\",\n                next : \"qstring\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token : \"constant.language\", // constants\n                regex : \"\\\\b(?:DEFAULT_INCLUDE_PATH|E_(?:ALL|CO(?:MPILE_(?:ERROR|WARNING)|RE_(?:ERROR|WARNING))|\" +\n                        \"ERROR|NOTICE|PARSE|STRICT|USER_(?:ERROR|NOTICE|WARNING)|WARNING)|P(?:EAR_(?:EXTENSION_DIR|INSTALL_DIR)|\" +\n                        \"HP_(?:BINDIR|CONFIG_FILE_(?:PATH|SCAN_DIR)|DATADIR|E(?:OL|XTENSION_DIR)|INT_(?:MAX|SIZE)|\" +\n                        \"L(?:IBDIR|OCALSTATEDIR)|O(?:S|UTPUT_HANDLER_(?:CONT|END|START))|PREFIX|S(?:API|HLIB_SUFFIX|YSCONFDIR)|\" +\n                        \"VERSION))|__COMPILER_HALT_OFFSET__)\\\\b\"\n            }, {\n                token : [\"keyword\", \"text\", \"support.class\"],\n                regex : \"\\\\b(new)(\\\\s+)(\\\\w+)\"\n            }, {\n                token : [\"support.class\", \"keyword.operator\"],\n                regex : \"\\\\b(\\\\w+)(::)\"\n            }, {\n                token : \"constant.language\", // constants\n                regex : \"\\\\b(?:A(?:B(?:DAY_(?:1|2|3|4|5|6|7)|MON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9))|LT_DIGITS|M_STR|\" +\n                        \"SSERT_(?:ACTIVE|BAIL|CALLBACK|QUIET_EVAL|WARNING))|C(?:ASE_(?:LOWER|UPPER)|HAR_MAX|\" +\n                        \"O(?:DESET|NNECTION_(?:ABORTED|NORMAL|TIMEOUT)|UNT_(?:NORMAL|RECURSIVE))|\" +\n                        \"R(?:EDITS_(?:ALL|DOCS|FULLPAGE|G(?:ENERAL|ROUP)|MODULES|QA|SAPI)|NCYSTR|\" +\n                        \"YPT_(?:BLOWFISH|EXT_DES|MD5|S(?:ALT_LENGTH|TD_DES)))|URRENCY_SYMBOL)|D(?:AY_(?:1|2|3|4|5|6|7)|\" +\n                        \"ECIMAL_POINT|IRECTORY_SEPARATOR|_(?:FMT|T_FMT))|E(?:NT_(?:COMPAT|NOQUOTES|QUOTES)|RA(?:_(?:D_(?:FMT|T_FMT)|\" +\n                        \"T_FMT|YEAR)|)|XTR_(?:IF_EXISTS|OVERWRITE|PREFIX_(?:ALL|I(?:F_EXISTS|NVALID)|SAME)|SKIP))|FRAC_DIGITS|GROUPING|\" +\n                        \"HTML_(?:ENTITIES|SPECIALCHARS)|IN(?:FO_(?:ALL|C(?:ONFIGURATION|REDITS)|ENVIRONMENT|GENERAL|LICENSE|MODULES|VARIABLES)|\" +\n                        \"I_(?:ALL|PERDIR|SYSTEM|USER)|T_(?:CURR_SYMBOL|FRAC_DIGITS))|L(?:C_(?:ALL|C(?:OLLATE|TYPE)|M(?:ESSAGES|ONETARY)|NUMERIC|TIME)|\" +\n                        \"O(?:CK_(?:EX|NB|SH|UN)|G_(?:A(?:LERT|UTH(?:PRIV|))|C(?:ONS|R(?:IT|ON))|D(?:AEMON|EBUG)|E(?:MERG|RR)|INFO|KERN|\" +\n                        \"L(?:OCAL(?:0|1|2|3|4|5|6|7)|PR)|MAIL|N(?:DELAY|EWS|O(?:TICE|WAIT))|ODELAY|P(?:ERROR|ID)|SYSLOG|U(?:SER|UCP)|WARNING)))|\" +\n                        \"M(?:ON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9|DECIMAL_POINT|GROUPING|THOUSANDS_SEP)|_(?:1_PI|2_(?:PI|SQRTPI)|E|L(?:N(?:10|2)|\" +\n                        \"OG(?:10E|2E))|PI(?:_(?:2|4)|)|SQRT(?:1_2|2)))|N(?:EGATIVE_SIGN|O(?:EXPR|STR)|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|\" +\n                        \"P(?:ATH(?:INFO_(?:BASENAME|DIRNAME|EXTENSION)|_SEPARATOR)|M_STR|OSITIVE_SIGN|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|\" +\n                        \"RADIXCHAR|S(?:EEK_(?:CUR|END|SET)|ORT_(?:ASC|DESC|NUMERIC|REGULAR|STRING)|TR_PAD_(?:BOTH|LEFT|RIGHT))|\" +\n                        \"T(?:HOUS(?:ANDS_SEP|EP)|_FMT(?:_AMPM|))|YES(?:EXPR|STR)|STD(?:IN|OUT|ERR))\\\\b\"\n            }, {\n                token : function(value) {\n                    if (keywords.hasOwnProperty(value))\n                        return \"keyword\";\n                    else if (builtinConstants.hasOwnProperty(value))\n                        return \"constant.language\";\n                    else if (builtinVariables.hasOwnProperty(value))\n                        return \"variable.language\";\n                    else if (futureReserved.hasOwnProperty(value))\n                        return \"invalid.illegal\";\n                    else if (builtinFunctions.hasOwnProperty(value))\n                        return \"support.function\";\n                    else if (value == \"debugger\")\n                        return \"invalid.deprecated\";\n                    else\n                        if(value.match(/^(\\$[a-zA-Z_\\x7f-\\uffff][a-zA-Z0-9_\\x7f-\\uffff]*|self|parent)$/))\n                            return \"variable\";\n                        return \"identifier\";\n                },\n                regex : /[a-zA-Z_$\\x7f-\\uffff][a-zA-Z0-9_\\x7f-\\uffff]*/\n            }, {\n                onMatch : function(value, currentSate, state) {\n                    value = value.substr(3);\n                    if (value[0] == \"'\" || value[0] == '\"')\n                        value = value.slice(1, -1);\n                    state.unshift(this.next, value);\n                    return \"markup.list\";\n                },\n                regex : /<<<(?:\\w+|'\\w+'|\"\\w+\")$/,\n                next: \"heredoc\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"::|!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|!=|!==|<=|>=|=>|<<=|>>=|>>>=|<>|<|>|=|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"heredoc\" : [\n            {\n                onMatch : function(value, currentSate, stack) {\n                    if (stack[1] != value)\n                        return \"string\";\n                    stack.shift();\n                    stack.shift();\n                    return \"markup.list\";\n                },\n                regex : \"^\\\\w+(?=;?$)\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex : \".*\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : '\\\\\\\\(?:[nrtvef\\\\\\\\\"$]|[0-7]{1,3}|x[0-9A-Fa-f]{1,2})'\n            }, {\n                token : \"variable\",\n                regex : /\\$[\\w]+(?:\\[[\\w\\]+]|[=\\-]>\\w+)?/\n            }, {\n                token : \"variable\",\n                regex : /\\$\\{[^\"\\}]+\\}?/           // this is wrong but ok for now\n            },\n            {token : \"string\", regex : '\"', next : \"start\"},\n            {defaultToken : \"string\"}\n        ],\n        \"qstring\" : [\n            {token : \"constant.language.escape\", regex : /\\\\['\\\\]/},\n            {token : \"string\", regex : \"'\", next : \"start\"},\n            {defaultToken : \"string\"}\n        ]\n    };\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n};\n\noop.inherits(PhpLangHighlightRules, TextHighlightRules);\n\n\nvar PhpHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n\n    var startRules = [\n        {\n            token : \"support.php_tag\", // php open tag\n            regex : \"<\\\\?(?:php|=)?\",\n            push  : \"php-start\"\n        }\n    ];\n\n    var endRules = [\n        {\n            token : \"support.php_tag\", // php close tag\n            regex : \"\\\\?>\",\n            next  : \"pop\"\n        }\n    ];\n\n    for (var key in this.$rules)\n        this.$rules[key].unshift.apply(this.$rules[key], startRules);\n\n    this.embedRules(PhpLangHighlightRules, \"php-\", endRules, [\"start\"]);\n\n    this.normalizeRules();\n};\n\noop.inherits(PhpHighlightRules, HtmlHighlightRules);\n\nexports.PhpHighlightRules = PhpHighlightRules;\nexports.PhpLangHighlightRules = PhpLangHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/php_test.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\nif (typeof process !== \"undefined\") {\n    require(\"amd-loader\");\n}\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar EditSession = require(\"../edit_session\").EditSession;\nvar Tokenizer = require(\"../tokenizer\").Tokenizer;\nvar Mode = require(\"./php\").Mode;\nvar assert = require(\"../test/assertions\");\n\nmodule.exports = {\n    \"test: inline mode\" : function() {\n        var mode = new Mode();\n        var tokenizer = mode.getTokenizer();\n        var tokens = tokenizer.getLineTokens(\"'juhu kinners' ?> html  <? 'php'\", \"start\").tokens;\n        assert.equal(\"string\", tokens[tokens.length - 1].type);\n        assert.notEqual(\"string\", tokens[0].type);\n        assert.equal(tokens.length, 4);\n        \n        mode = new Mode({inline: true});\n        tokenizer = mode.getTokenizer();\n        tokens = tokenizer.getLineTokens(\"'juhu kinners' ?> html  <? 'php'\", \"start\").tokens;\n        assert.equal(\"string\", tokens[0].type);\n        assert.equal(\"string\", tokens[tokens.length - 1].type);\n        assert.equal(tokens.length, 9);\n    }\n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main) {\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n}\n"
  },
  {
    "path": "lib/ace/mode/php_worker.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar Mirror = require(\"../worker/mirror\").Mirror;\nvar PHP = require(\"./php/php\").PHP;\n\nvar PhpWorker = exports.PhpWorker = function(sender) {\n    Mirror.call(this, sender);\n    this.setTimeout(500);\n};\n\noop.inherits(PhpWorker, Mirror);\n\n(function() {\n    this.setOptions = function(opts) {\n        this.inlinePhp = opts && opts.inline;\n    };\n    \n    this.onUpdate = function() {\n        var value = this.doc.getValue();\n        var errors = [];\n\n        // var start = new Date();\n        if (this.inlinePhp)\n            value = \"<?\" + value + \"?>\";\n\n        var tokens = PHP.Lexer(value, {short_open_tag: 1});\n        try {\n            new PHP.Parser(tokens);\n        } catch(e) {\n            errors.push({\n                row: e.line - 1,\n                column: null,\n                text: e.message.charAt(0).toUpperCase() + e.message.substring(1),\n                type: \"error\"\n            });\n        }\n\n        // console.log(\"lint time: \" + (new Date() - start));\n\n        this.sender.emit(\"annotate\", errors);\n    };\n\n}).call(PhpWorker.prototype);\n\n});\n"
  },
  {
    "path": "lib/ace/mode/pig.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar PigHighlightRules = require(\"./pig_highlight_rules\").PigHighlightRules;\n// TODO: pick appropriate fold mode\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = PigHighlightRules;\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"--\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    // Extra logic goes here.\n    this.$id = \"ace/mode/pig\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/pig_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/* This file was autogenerated from Pig.tmLanguage (uuid: ) */\n/****************************************************************************************\n * IT MIGHT NOT BE PERFECT ...But it's a good start from an existing *.tmlanguage file. *\n * fileTypes                                                                            *\n ****************************************************************************************/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar PigHighlightRules = function() {\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = {\n        start: [{\n            token: \"comment.block.pig\",\n            regex: /\\/\\*/,\n            push: [{\n                token: \"comment.block.pig\",\n                regex: /\\*\\//,\n                next: \"pop\"\n            }, {\n                defaultToken: \"comment.block.pig\"\n            }]\n        }, {\n            token: \"comment.line.double-dash.asciidoc\",\n            regex: /--.*$/\n        }, {\n            token: \"keyword.control.pig\",\n            regex: /\\b(?:ASSERT|LOAD|STORE|DUMP|FILTER|DISTINCT|FOREACH|GENERATE|STREAM|JOIN|COGROUP|GROUP|CROSS|ORDER|LIMIT|UNION|SPLIT|DESCRIBE|EXPLAIN|ILLUSTRATE|AS|BY|INTO|USING|LIMIT|PARALLEL|OUTER|INNER|DEFAULT|LEFT|SAMPLE|RANK|CUBE|ALL|KILL|QUIT|MAPREDUCE|ASC|DESC|THROUGH|SHIP|CACHE|DECLARE|CASE|WHEN|THEN|END|IN|PARTITION|FULL|IMPORT|IF|ONSCHEMA|INPUT|OUTPUT)\\b/,\n            caseInsensitive: true\n        }, {\n            token: \"storage.datatypes.pig\",\n            regex: /\\b(?:int|long|float|double|chararray|bytearray|boolean|datetime|biginteger|bigdecimal|tuple|bag|map)\\b/,\n            caseInsensitive: true\n        }, {\n            token: \"support.function.storage.pig\",\n            regex: /\\b(?:PigStorage|BinStorage|BinaryStorage|PigDump|HBaseStorage|JsonLoader|JsonStorage|AvroStorage|TextLoader|PigStreaming|TrevniStorage|AccumuloStorage)\\b/\n        }, {\n            token: \"support.function.udf.pig\",\n            regex: /\\b(?:DIFF|TOBAG|TOMAP|TOP|TOTUPLE|RANDOM|FLATTEN|flatten|CUBE|ROLLUP|IsEmpty|ARITY|PluckTuple|SUBTRACT|BagToString)\\b/\n        }, {\n            token: \"support.function.udf.math.pig\",\n            regex: /\\b(?:ABS|ACOS|ASIN|ATAN|CBRT|CEIL|COS|COSH|EXP|FLOOR|LOG|LOG10|ROUND|ROUND_TO|SIN|SINH|SQRT|TAN|TANH|AVG|COUNT|COUNT_STAR|MAX|MIN|SUM|COR|COV)\\b/\n        }, {\n            token: \"support.function.udf.string.pig\",\n            regex: /\\b(?:CONCAT|INDEXOF|LAST_INDEX_OF|LCFIRST|LOWER|REGEX_EXTRACT|REGEX_EXTRACT_ALL|REPLACE|SIZE|STRSPLIT|SUBSTRING|TOKENIZE|TRIM|UCFIRST|UPPER|LTRIM|RTRIM|ENDSWITH|STARTSWITH|TRIM)\\b/\n        }, {\n            token: \"support.function.udf.datetime.pig\",\n            regex: /\\b(?:AddDuration|CurrentTime|DaysBetween|GetDay|GetHour|GetMilliSecond|GetMinute|GetMonth|GetSecond|GetWeek|GetWeekYear|GetYear|HoursBetween|MilliSecondsBetween|MinutesBetween|MonthsBetween|SecondsBetween|SubtractDuration|ToDate|WeeksBetween|YearsBetween|ToMilliSeconds|ToString|ToUnixTime)\\b/\n        }, {\n            token: \"support.function.command.pig\",\n            regex: /\\b(?:cat|cd|copyFromLocal|copyToLocal|cp|ls|mkdir|mv|pwd|rm)\\b/\n        }, {\n            token: \"variable.pig\",\n            regex: /\\$[a_zA-Z0-9_]+/\n        }, {\n            token: \"constant.language.pig\",\n            regex: /\\b(?:NULL|true|false|stdin|stdout|stderr)\\b/,\n            caseInsensitive: true\n        }, {\n            token: \"constant.numeric.pig\",\n            regex: /\\b\\d+(?:\\.\\d+)?\\b/\n        }, {\n            token: \"keyword.operator.comparison.pig\",\n            regex: /!=|==|<|>|<=|>=|\\b(?:MATCHES|IS|OR|AND|NOT)\\b/,\n            caseInsensitive: true\n        }, {\n            token: \"keyword.operator.arithmetic.pig\",\n            regex: /\\+|\\-|\\*|\\/|\\%|\\?|:|::|\\.\\.|#/\n        }, {\n            token: \"string.quoted.double.pig\",\n            regex: /\"/,\n            push: [{\n                token: \"string.quoted.double.pig\",\n                regex: /\"/,\n                next: \"pop\"\n            }, {\n                token: \"constant.character.escape.pig\",\n                regex: /\\\\./\n            }, {\n                defaultToken: \"string.quoted.double.pig\"\n            }]\n        }, {\n            token: \"string.quoted.single.pig\",\n            regex: /'/,\n            push: [{\n                token: \"string.quoted.single.pig\",\n                regex: /'/,\n                next: \"pop\"\n            }, {\n                token: \"constant.character.escape.pig\",\n                regex: /\\\\./\n            }, {\n                defaultToken: \"string.quoted.single.pig\"\n            }]\n        }, {\n            todo: {\n                token: [\n                    \"text\",\n                    \"keyword.parameter.pig\",\n                    \"text\",\n                    \"storage.type.parameter.pig\"\n                ],\n                regex: /^(\\s*)(set)(\\s+)(\\S+)/,\n                caseInsensitive: true,\n                push: [{\n                    token: \"text\",\n                    regex: /$/,\n                    next: \"pop\"\n                }, {\n                    include: \"$self\"\n                }]\n            }\n        }, {\n            token: [\n                \"text\",\n                \"keyword.alias.pig\",\n                \"text\",\n                \"storage.type.alias.pig\"\n            ],\n            regex: /(\\s*)(DEFINE|DECLARE|REGISTER)(\\s+)(\\S+)/,\n            caseInsensitive: true,\n            push: [{\n                token: \"text\",\n                regex: /;?$/,\n                next: \"pop\"\n            }]\n        }]\n    };\n    \n    this.normalizeRules();\n};\n\nPigHighlightRules.metaData = {\n    fileTypes: [\"pig\"],\n    name: \"Pig\",\n    scopeName: \"source.pig\"\n};\n\n\noop.inherits(PigHighlightRules, TextHighlightRules);\n\nexports.PigHighlightRules = PigHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/plain_text.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar Behaviour = require(\"./behaviour\").Behaviour;\n\nvar Mode = function() {\n    this.HighlightRules = TextHighlightRules;\n    this.$behaviour = new Behaviour();\n};\n\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.type = \"text\";\n    this.getNextLineIndent = function(state, line, tab) {\n        return '';\n    };\n    this.$id = \"ace/mode/plain_text\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});"
  },
  {
    "path": "lib/ace/mode/plain_text_test.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\nif (typeof process !== \"undefined\") {\n    require(\"amd-loader\");\n}\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar EditSession = require(\"../edit_session\").EditSession;\nvar PlainTextMode = require(\"./plain_text\").Mode;\nvar assert = require(\"../test/assertions\");\n\nmodule.exports = {\n    setUp : function() {\n        this.mode = new PlainTextMode();\n    },\n\n    \"test: lines should not be indented\" : function() {\n        assert.equal(\"\", this.mode.getNextLineIndent(\"start\", \"   abc\", \"  \"));\n    }\n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main) {\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n}\n"
  },
  {
    "path": "lib/ace/mode/powershell.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar PowershellHighlightRules = require(\"./powershell_highlight_rules\").PowershellHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = PowershellHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode({start: \"^\\\\s*(<#)\", end: \"^[#\\\\s]>\\\\s*$\"});\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"#\";\n    this.blockComment = {start: \"<#\", end: \"#>\"};\n    \n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n      \n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n\n    this.createWorker = function(session) {\n        return null;\n    };\n\n    this.$id = \"ace/mode/powershell\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/powershell_highlight_rules.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar PowershellHighlightRules = function() {\n\n    // Help Reference: about_Language_Keywords\n    // https://technet.microsoft.com/en-us/library/hh847744.aspx\n    var keywords = (\n        \"begin|break|catch|continue|data|do|dynamicparam|else|elseif|end|exit|filter|\" +\n        \"finally|for|foreach|from|function|if|in|inlinescript|hidden|parallel|param|\" +\n        \"process|return|sequence|switch|throw|trap|try|until|while|workflow\"\n    );\n\n    // Command to enumerate all module commands in Windows PowerShell:\n    // PS C:\\> Get-Module -ListAvailable | Select-Object -Unique Name -ExpandProperty Name | Sort-Object |\n    //             ForEach-Object { \"// Module $_\"; '\"' + ((Get-Command -Module $_ | Select-Object -ExpandProperty Name) -join '|') + '|\" +' } | clip\n    var builtinFunctions = (\n        // Module AppBackgroundTask\n        \"Get-AppBackgroundTask|Start-AppBackgroundTask|Unregister-AppBackgroundTask|Disable-AppBackgroundTaskDiagnosticLog|Enable-AppBackgroundTaskDiagnosticLog|Set-AppBackgroundTaskResourcePolicy|\" +\n        // Module AppLocker\n        \"Get-AppLockerFileInformation|Get-AppLockerPolicy|New-AppLockerPolicy|Set-AppLockerPolicy|Test-AppLockerPolicy|\" +\n        // Module Appx\n        \"Get-AppxLastError|Get-AppxLog|Add-AppxPackage|Add-AppxVolume|Dismount-AppxVolume|Get-AppxDefaultVolume|Get-AppxPackage|Get-AppxPackageManifest|Get-AppxVolume|Mount-AppxVolume|Move-AppxPackage|Remove-AppxPackage|Remove-AppxVolume|Set-AppxDefaultVolume|\" +\n        // Module AssignedAccess\n        \"Clear-AssignedAccess|Get-AssignedAccess|Set-AssignedAccess|\" +\n        // Module BitLocker\n        \"Add-BitLockerKeyProtector|Backup-BitLockerKeyProtector|Clear-BitLockerAutoUnlock|Disable-BitLocker|Disable-BitLockerAutoUnlock|Enable-BitLocker|Enable-BitLockerAutoUnlock|Get-BitLockerVolume|Lock-BitLocker|Remove-BitLockerKeyProtector|Resume-BitLocker|Suspend-BitLocker|Unlock-BitLocker|\" +\n        // Module BitsTransfer\n        \"Add-BitsFile|Complete-BitsTransfer|Get-BitsTransfer|Remove-BitsTransfer|Resume-BitsTransfer|Set-BitsTransfer|Start-BitsTransfer|Suspend-BitsTransfer|\" +\n        // Module BranchCache\n        \"Add-BCDataCacheExtension|Clear-BCCache|Disable-BC|Disable-BCDowngrading|Disable-BCServeOnBattery|Enable-BCDistributed|Enable-BCDowngrading|Enable-BCHostedClient|Enable-BCHostedServer|Enable-BCLocal|Enable-BCServeOnBattery|Export-BCCachePackage|Export-BCSecretKey|Get-BCClientConfiguration|Get-BCContentServerConfiguration|Get-BCDataCache|Get-BCDataCacheExtension|Get-BCHashCache|Get-BCHostedCacheServerConfiguration|Get-BCNetworkConfiguration|Get-BCStatus|Import-BCCachePackage|Import-BCSecretKey|Publish-BCFileContent|Publish-BCWebContent|Remove-BCDataCacheExtension|Reset-BC|Set-BCAuthentication|Set-BCCache|Set-BCDataCacheEntryMaxAge|Set-BCMinSMBLatency|Set-BCSecretKey|\" +\n        // Module CimCmdlets\n        \"Export-BinaryMiLog|Get-CimAssociatedInstance|Get-CimClass|Get-CimInstance|Get-CimSession|Import-BinaryMiLog|Invoke-CimMethod|New-CimInstance|New-CimSession|New-CimSessionOption|Register-CimIndicationEvent|Remove-CimInstance|Remove-CimSession|Set-CimInstance|\" +\n        // Module CIPolicy\n        \"ConvertFrom-CIPolicy|\" +\n        // Module ConfigCI\n        \"Add-SignerRule|Edit-CIPolicyRule|Get-CIPolicy|Get-CIPolicyInfo|Get-SystemDriver|Merge-CIPolicy|New-CIPolicy|New-CIPolicyRule|Remove-CIPolicyRule|Set-CIPolicyVersion|Set-HVCIOptions|Set-RuleOption|\" +\n        // Module Defender\n        \"Add-MpPreference|Get-MpComputerStatus|Get-MpPreference|Get-MpThreat|Get-MpThreatCatalog|Get-MpThreatDetection|Remove-MpPreference|Remove-MpThreat|Set-MpPreference|Start-MpScan|Start-MpWDOScan|Update-MpSignature|\" +\n        // Module DirectAccessClientComponents\n        \"Disable-DAManualEntryPointSelection|Enable-DAManualEntryPointSelection|Get-DAClientExperienceConfiguration|Get-DAEntryPointTableItem|New-DAEntryPointTableItem|Remove-DAEntryPointTableItem|Rename-DAEntryPointTableItem|Reset-DAClientExperienceConfiguration|Reset-DAEntryPointTableItem|Set-DAClientExperienceConfiguration|Set-DAEntryPointTableItem|\" +\n        // Module Dism\n        \"Add-ProvisionedAppxPackage|Apply-WindowsUnattend|Get-ProvisionedAppxPackage|Remove-ProvisionedAppxPackage|Add-AppxProvisionedPackage|Add-WindowsCapability|Add-WindowsDriver|Add-WindowsImage|Add-WindowsPackage|Clear-WindowsCorruptMountPoint|Disable-WindowsOptionalFeature|Dismount-WindowsImage|Enable-WindowsOptionalFeature|Expand-WindowsCustomDataImage|Expand-WindowsImage|Export-WindowsDriver|Export-WindowsImage|Get-AppxProvisionedPackage|Get-WIMBootEntry|Get-WindowsCapability|Get-WindowsDriver|Get-WindowsEdition|Get-WindowsImage|Get-WindowsImageContent|Get-WindowsOptionalFeature|Get-WindowsPackage|Mount-WindowsImage|New-WindowsCustomImage|New-WindowsImage|Optimize-WindowsImage|Remove-AppxProvisionedPackage|Remove-WindowsCapability|Remove-WindowsDriver|Remove-WindowsImage|Remove-WindowsPackage|Repair-WindowsImage|Save-WindowsImage|Set-AppXProvisionedDataFile|Set-WindowsEdition|Set-WindowsProductKey|Split-WindowsImage|Update-WIMBootEntry|Use-WindowsUnattend|\" +\n        // Module DnsClient\n        \"Add-DnsClientNrptRule|Clear-DnsClientCache|Get-DnsClient|Get-DnsClientCache|Get-DnsClientGlobalSetting|Get-DnsClientNrptGlobal|Get-DnsClientNrptPolicy|Get-DnsClientNrptRule|Get-DnsClientServerAddress|Register-DnsClient|Remove-DnsClientNrptRule|Set-DnsClient|Set-DnsClientGlobalSetting|Set-DnsClientNrptGlobal|Set-DnsClientNrptRule|Set-DnsClientServerAddress|Resolve-DnsName|\" +\n        // Module EventTracingManagement\n        \"Add-EtwTraceProvider|Get-AutologgerConfig|Get-EtwTraceProvider|Get-EtwTraceSession|New-AutologgerConfig|New-EtwTraceSession|Remove-AutologgerConfig|Remove-EtwTraceProvider|Remove-EtwTraceSession|Send-EtwTraceSession|Set-AutologgerConfig|Set-EtwTraceProvider|Set-EtwTraceSession|\" +\n        // Module International\n        \"Get-WinAcceptLanguageFromLanguageListOptOut|Get-WinCultureFromLanguageListOptOut|Get-WinDefaultInputMethodOverride|Get-WinHomeLocation|Get-WinLanguageBarOption|Get-WinSystemLocale|Get-WinUILanguageOverride|Get-WinUserLanguageList|New-WinUserLanguageList|Set-Culture|Set-WinAcceptLanguageFromLanguageListOptOut|Set-WinCultureFromLanguageListOptOut|Set-WinDefaultInputMethodOverride|Set-WinHomeLocation|Set-WinLanguageBarOption|Set-WinSystemLocale|Set-WinUILanguageOverride|Set-WinUserLanguageList|\" +\n        // Module iSCSI\n        \"Connect-IscsiTarget|Disconnect-IscsiTarget|Get-IscsiConnection|Get-IscsiSession|Get-IscsiTarget|Get-IscsiTargetPortal|New-IscsiTargetPortal|Register-IscsiSession|Remove-IscsiTargetPortal|Set-IscsiChapSecret|Unregister-IscsiSession|Update-IscsiTarget|Update-IscsiTargetPortal|\" +\n        // Module ISE\n        \"Get-IseSnippet|Import-IseSnippet|New-IseSnippet|\" +\n        // Module Kds\n        \"Add-KdsRootKey|Clear-KdsCache|Get-KdsConfiguration|Get-KdsRootKey|Set-KdsConfiguration|Test-KdsRootKey|\" +\n        // Module Microsoft.PowerShell.Archive\n        \"Compress-Archive|Expand-Archive|\" +\n        // Module Microsoft.PowerShell.Diagnostics\n        \"Export-Counter|Get-Counter|Get-WinEvent|Import-Counter|New-WinEvent|\" +\n        // Module Microsoft.PowerShell.Host\n        \"Start-Transcript|Stop-Transcript|\" +\n        // Module Microsoft.PowerShell.Management\n        \"Add-Computer|Add-Content|Checkpoint-Computer|Clear-Content|Clear-EventLog|Clear-Item|Clear-ItemProperty|Clear-RecycleBin|Complete-Transaction|Convert-Path|Copy-Item|Copy-ItemProperty|Debug-Process|Disable-ComputerRestore|Enable-ComputerRestore|Get-ChildItem|Get-Clipboard|Get-ComputerRestorePoint|Get-Content|Get-ControlPanelItem|Get-EventLog|Get-HotFix|Get-Item|Get-ItemProperty|Get-ItemPropertyValue|Get-Location|Get-Process|Get-PSDrive|Get-PSProvider|Get-Service|Get-Transaction|Get-WmiObject|Invoke-Item|Invoke-WmiMethod|Join-Path|Limit-EventLog|Move-Item|Move-ItemProperty|New-EventLog|New-Item|New-ItemProperty|New-PSDrive|New-Service|New-WebServiceProxy|Pop-Location|Push-Location|Register-WmiEvent|Remove-Computer|Remove-EventLog|Remove-Item|Remove-ItemProperty|Remove-PSDrive|Remove-WmiObject|Rename-Computer|Rename-Item|Rename-ItemProperty|Reset-ComputerMachinePassword|Resolve-Path|Restart-Computer|Restart-Service|Restore-Computer|Resume-Service|Set-Clipboard|Set-Content|Set-Item|Set-ItemProperty|Set-Location|Set-Service|Set-WmiInstance|Show-ControlPanelItem|Show-EventLog|Split-Path|Start-Process|Start-Service|Start-Transaction|Stop-Computer|Stop-Process|Stop-Service|Suspend-Service|Test-ComputerSecureChannel|Test-Connection|Test-Path|Undo-Transaction|Use-Transaction|Wait-Process|Write-EventLog|\" +\n        // Module Microsoft.PowerShell.ODataUtils\n        \"Export-ODataEndpointProxy|\" +\n        // Module Microsoft.PowerShell.Security\n        \"ConvertFrom-SecureString|ConvertTo-SecureString|Get-Acl|Get-AuthenticodeSignature|Get-CmsMessage|Get-Credential|Get-ExecutionPolicy|Get-PfxCertificate|Protect-CmsMessage|Set-Acl|Set-AuthenticodeSignature|Set-ExecutionPolicy|Unprotect-CmsMessage|\" +\n        // Module Microsoft.PowerShell.Utility\n        \"ConvertFrom-SddlString|Format-Hex|Get-FileHash|Import-PowerShellDataFile|New-Guid|New-TemporaryFile|Add-Member|Add-Type|Clear-Variable|Compare-Object|ConvertFrom-Csv|ConvertFrom-Json|ConvertFrom-String|ConvertFrom-StringData|Convert-String|ConvertTo-Csv|ConvertTo-Html|ConvertTo-Json|ConvertTo-Xml|Debug-Runspace|Disable-PSBreakpoint|Disable-RunspaceDebug|Enable-PSBreakpoint|Enable-RunspaceDebug|Export-Alias|Export-Clixml|Export-Csv|Export-FormatData|Export-PSSession|Format-Custom|Format-List|Format-Table|Format-Wide|Get-Alias|Get-Culture|Get-Date|Get-Event|Get-EventSubscriber|Get-FormatData|Get-Host|Get-Member|Get-PSBreakpoint|Get-PSCallStack|Get-Random|Get-Runspace|Get-RunspaceDebug|Get-TraceSource|Get-TypeData|Get-UICulture|Get-Unique|Get-Variable|Group-Object|Import-Alias|Import-Clixml|Import-Csv|Import-LocalizedData|Import-PSSession|Invoke-Expression|Invoke-RestMethod|Invoke-WebRequest|Measure-Command|Measure-Object|New-Alias|New-Event|New-Object|New-TimeSpan|New-Variable|Out-File|Out-GridView|Out-Printer|Out-String|Read-Host|Register-EngineEvent|Register-ObjectEvent|Remove-Event|Remove-PSBreakpoint|Remove-TypeData|Remove-Variable|Select-Object|Select-String|Select-Xml|Send-MailMessage|Set-Alias|Set-Date|Set-PSBreakpoint|Set-TraceSource|Set-Variable|Show-Command|Sort-Object|Start-Sleep|Tee-Object|Trace-Command|Unblock-File|Unregister-Event|Update-FormatData|Update-List|Update-TypeData|Wait-Debugger|Wait-Event|Write-Debug|Write-Error|Write-Host|Write-Information|Write-Output|Write-Progress|Write-Verbose|Write-Warning|\" +\n        // Module Microsoft.WSMan.Management\n        \"Connect-WSMan|Disable-WSManCredSSP|Disconnect-WSMan|Enable-WSManCredSSP|Get-WSManCredSSP|Get-WSManInstance|Invoke-WSManAction|New-WSManInstance|New-WSManSessionOption|Remove-WSManInstance|Set-WSManInstance|Set-WSManQuickConfig|Test-WSMan|\" +\n        // Module MMAgent\n        \"Debug-MMAppPrelaunch|Disable-MMAgent|Enable-MMAgent|Get-MMAgent|Set-MMAgent|\" +\n        // Module MsDtc\n        \"Add-DtcClusterTMMapping|Get-Dtc|Get-DtcAdvancedHostSetting|Get-DtcAdvancedSetting|Get-DtcClusterDefault|Get-DtcClusterTMMapping|Get-DtcDefault|Get-DtcLog|Get-DtcNetworkSetting|Get-DtcTransaction|Get-DtcTransactionsStatistics|Get-DtcTransactionsTraceSession|Get-DtcTransactionsTraceSetting|Install-Dtc|Remove-DtcClusterTMMapping|Reset-DtcLog|Set-DtcAdvancedHostSetting|Set-DtcAdvancedSetting|Set-DtcClusterDefault|Set-DtcClusterTMMapping|Set-DtcDefault|Set-DtcLog|Set-DtcNetworkSetting|Set-DtcTransaction|Set-DtcTransactionsTraceSession|Set-DtcTransactionsTraceSetting|Start-Dtc|Start-DtcTransactionsTraceSession|Stop-Dtc|Stop-DtcTransactionsTraceSession|Test-Dtc|Uninstall-Dtc|Write-DtcTransactionsTraceSession|Complete-DtcDiagnosticTransaction|Join-DtcDiagnosticResourceManager|New-DtcDiagnosticTransaction|Receive-DtcDiagnosticTransaction|Send-DtcDiagnosticTransaction|Start-DtcDiagnosticResourceManager|Stop-DtcDiagnosticResourceManager|Undo-DtcDiagnosticTransaction|\" +\n        // Module NetAdapter\n        \"Disable-NetAdapter|Disable-NetAdapterBinding|Disable-NetAdapterChecksumOffload|Disable-NetAdapterEncapsulatedPacketTaskOffload|Disable-NetAdapterIPsecOffload|Disable-NetAdapterLso|Disable-NetAdapterPacketDirect|Disable-NetAdapterPowerManagement|Disable-NetAdapterQos|Disable-NetAdapterRdma|Disable-NetAdapterRsc|Disable-NetAdapterRss|Disable-NetAdapterSriov|Disable-NetAdapterVmq|Enable-NetAdapter|Enable-NetAdapterBinding|Enable-NetAdapterChecksumOffload|Enable-NetAdapterEncapsulatedPacketTaskOffload|Enable-NetAdapterIPsecOffload|Enable-NetAdapterLso|Enable-NetAdapterPacketDirect|Enable-NetAdapterPowerManagement|Enable-NetAdapterQos|Enable-NetAdapterRdma|Enable-NetAdapterRsc|Enable-NetAdapterRss|Enable-NetAdapterSriov|Enable-NetAdapterVmq|Get-NetAdapter|Get-NetAdapterAdvancedProperty|Get-NetAdapterBinding|Get-NetAdapterChecksumOffload|Get-NetAdapterEncapsulatedPacketTaskOffload|Get-NetAdapterHardwareInfo|Get-NetAdapterIPsecOffload|Get-NetAdapterLso|Get-NetAdapterPacketDirect|Get-NetAdapterPowerManagement|Get-NetAdapterQos|Get-NetAdapterRdma|Get-NetAdapterRsc|Get-NetAdapterRss|Get-NetAdapterSriov|Get-NetAdapterSriovVf|Get-NetAdapterStatistics|Get-NetAdapterVmq|Get-NetAdapterVmqQueue|Get-NetAdapterVPort|New-NetAdapterAdvancedProperty|Remove-NetAdapterAdvancedProperty|Rename-NetAdapter|Reset-NetAdapterAdvancedProperty|Restart-NetAdapter|Set-NetAdapter|Set-NetAdapterAdvancedProperty|Set-NetAdapterBinding|Set-NetAdapterChecksumOffload|Set-NetAdapterEncapsulatedPacketTaskOffload|Set-NetAdapterIPsecOffload|Set-NetAdapterLso|Set-NetAdapterPacketDirect|Set-NetAdapterPowerManagement|Set-NetAdapterQos|Set-NetAdapterRdma|Set-NetAdapterRsc|Set-NetAdapterRss|Set-NetAdapterSriov|Set-NetAdapterVmq|\" +\n        // Module NetConnection\n        \"Get-NetConnectionProfile|Set-NetConnectionProfile|\" +\n        // Module NetEventPacketCapture\n        \"Add-NetEventNetworkAdapter|Add-NetEventPacketCaptureProvider|Add-NetEventProvider|Add-NetEventVmNetworkAdapter|Add-NetEventVmSwitch|Add-NetEventWFPCaptureProvider|Get-NetEventNetworkAdapter|Get-NetEventPacketCaptureProvider|Get-NetEventProvider|Get-NetEventSession|Get-NetEventVmNetworkAdapter|Get-NetEventVmSwitch|Get-NetEventWFPCaptureProvider|New-NetEventSession|Remove-NetEventNetworkAdapter|Remove-NetEventPacketCaptureProvider|Remove-NetEventProvider|Remove-NetEventSession|Remove-NetEventVmNetworkAdapter|Remove-NetEventVmSwitch|Remove-NetEventWFPCaptureProvider|Set-NetEventPacketCaptureProvider|Set-NetEventProvider|Set-NetEventSession|Set-NetEventWFPCaptureProvider|Start-NetEventSession|Stop-NetEventSession|\" +\n        // Module NetLbfo\n        \"Add-NetLbfoTeamMember|Add-NetLbfoTeamNic|Get-NetLbfoTeam|Get-NetLbfoTeamMember|Get-NetLbfoTeamNic|New-NetLbfoTeam|Remove-NetLbfoTeam|Remove-NetLbfoTeamMember|Remove-NetLbfoTeamNic|Rename-NetLbfoTeam|Set-NetLbfoTeam|Set-NetLbfoTeamMember|Set-NetLbfoTeamNic|\" +\n        // Module NetNat\n        \"Add-NetNatExternalAddress|Add-NetNatStaticMapping|Get-NetNat|Get-NetNatExternalAddress|Get-NetNatGlobal|Get-NetNatSession|Get-NetNatStaticMapping|New-NetNat|Remove-NetNat|Remove-NetNatExternalAddress|Remove-NetNatStaticMapping|Set-NetNat|Set-NetNatGlobal|\" +\n        // Module NetQos\n        \"Get-NetQosPolicy|New-NetQosPolicy|Remove-NetQosPolicy|Set-NetQosPolicy|\" +\n        // Module NetSecurity\n        \"Copy-NetFirewallRule|Copy-NetIPsecMainModeCryptoSet|Copy-NetIPsecMainModeRule|Copy-NetIPsecPhase1AuthSet|Copy-NetIPsecPhase2AuthSet|Copy-NetIPsecQuickModeCryptoSet|Copy-NetIPsecRule|Disable-NetFirewallRule|Disable-NetIPsecMainModeRule|Disable-NetIPsecRule|Enable-NetFirewallRule|Enable-NetIPsecMainModeRule|Enable-NetIPsecRule|Find-NetIPsecRule|Get-NetFirewallAddressFilter|Get-NetFirewallApplicationFilter|Get-NetFirewallInterfaceFilter|Get-NetFirewallInterfaceTypeFilter|Get-NetFirewallPortFilter|Get-NetFirewallProfile|Get-NetFirewallRule|Get-NetFirewallSecurityFilter|Get-NetFirewallServiceFilter|Get-NetFirewallSetting|Get-NetIPsecDospSetting|Get-NetIPsecMainModeCryptoSet|Get-NetIPsecMainModeRule|Get-NetIPsecMainModeSA|Get-NetIPsecPhase1AuthSet|Get-NetIPsecPhase2AuthSet|Get-NetIPsecQuickModeCryptoSet|Get-NetIPsecQuickModeSA|Get-NetIPsecRule|New-NetFirewallRule|New-NetIPsecDospSetting|New-NetIPsecMainModeCryptoSet|New-NetIPsecMainModeRule|New-NetIPsecPhase1AuthSet|New-NetIPsecPhase2AuthSet|New-NetIPsecQuickModeCryptoSet|New-NetIPsecRule|Open-NetGPO|Remove-NetFirewallRule|Remove-NetIPsecDospSetting|Remove-NetIPsecMainModeCryptoSet|Remove-NetIPsecMainModeRule|Remove-NetIPsecMainModeSA|Remove-NetIPsecPhase1AuthSet|Remove-NetIPsecPhase2AuthSet|Remove-NetIPsecQuickModeCryptoSet|Remove-NetIPsecQuickModeSA|Remove-NetIPsecRule|Rename-NetFirewallRule|Rename-NetIPsecMainModeCryptoSet|Rename-NetIPsecMainModeRule|Rename-NetIPsecPhase1AuthSet|Rename-NetIPsecPhase2AuthSet|Rename-NetIPsecQuickModeCryptoSet|Rename-NetIPsecRule|Save-NetGPO|Set-NetFirewallAddressFilter|Set-NetFirewallApplicationFilter|Set-NetFirewallInterfaceFilter|Set-NetFirewallInterfaceTypeFilter|Set-NetFirewallPortFilter|Set-NetFirewallProfile|Set-NetFirewallRule|Set-NetFirewallSecurityFilter|Set-NetFirewallServiceFilter|Set-NetFirewallSetting|Set-NetIPsecDospSetting|Set-NetIPsecMainModeCryptoSet|Set-NetIPsecMainModeRule|Set-NetIPsecPhase1AuthSet|Set-NetIPsecPhase2AuthSet|Set-NetIPsecQuickModeCryptoSet|Set-NetIPsecRule|Show-NetFirewallRule|Show-NetIPsecRule|Sync-NetIPsecRule|Update-NetIPsecRule|Get-DAPolicyChange|New-NetIPsecAuthProposal|New-NetIPsecMainModeCryptoProposal|New-NetIPsecQuickModeCryptoProposal|\" +\n        // Module NetSwitchTeam\n        \"Add-NetSwitchTeamMember|Get-NetSwitchTeam|Get-NetSwitchTeamMember|New-NetSwitchTeam|Remove-NetSwitchTeam|Remove-NetSwitchTeamMember|Rename-NetSwitchTeam|\" +\n        // Module NetTCPIP\n        \"Find-NetRoute|Get-NetCompartment|Get-NetIPAddress|Get-NetIPConfiguration|Get-NetIPInterface|Get-NetIPv4Protocol|Get-NetIPv6Protocol|Get-NetNeighbor|Get-NetOffloadGlobalSetting|Get-NetPrefixPolicy|Get-NetRoute|Get-NetTCPConnection|Get-NetTCPSetting|Get-NetTransportFilter|Get-NetUDPEndpoint|Get-NetUDPSetting|New-NetIPAddress|New-NetNeighbor|New-NetRoute|New-NetTransportFilter|Remove-NetIPAddress|Remove-NetNeighbor|Remove-NetRoute|Remove-NetTransportFilter|Set-NetIPAddress|Set-NetIPInterface|Set-NetIPv4Protocol|Set-NetIPv6Protocol|Set-NetNeighbor|Set-NetOffloadGlobalSetting|Set-NetRoute|Set-NetTCPSetting|Set-NetUDPSetting|Test-NetConnection|\" +\n        // Module NetworkConnectivityStatus\n        \"Get-DAConnectionStatus|Get-NCSIPolicyConfiguration|Reset-NCSIPolicyConfiguration|Set-NCSIPolicyConfiguration|\" +\n        // Module NetworkSwitchManager\n        \"Disable-NetworkSwitchEthernetPort|Disable-NetworkSwitchFeature|Disable-NetworkSwitchVlan|Enable-NetworkSwitchEthernetPort|Enable-NetworkSwitchFeature|Enable-NetworkSwitchVlan|Get-NetworkSwitchEthernetPort|Get-NetworkSwitchFeature|Get-NetworkSwitchGlobalData|Get-NetworkSwitchVlan|New-NetworkSwitchVlan|Remove-NetworkSwitchEthernetPortIPAddress|Remove-NetworkSwitchVlan|Restore-NetworkSwitchConfiguration|Save-NetworkSwitchConfiguration|Set-NetworkSwitchEthernetPortIPAddress|Set-NetworkSwitchPortMode|Set-NetworkSwitchPortProperty|Set-NetworkSwitchVlanProperty|\" +\n        // Module NetworkTransition\n        \"Add-NetIPHttpsCertBinding|Disable-NetDnsTransitionConfiguration|Disable-NetIPHttpsProfile|Disable-NetNatTransitionConfiguration|Enable-NetDnsTransitionConfiguration|Enable-NetIPHttpsProfile|Enable-NetNatTransitionConfiguration|Get-Net6to4Configuration|Get-NetDnsTransitionConfiguration|Get-NetDnsTransitionMonitoring|Get-NetIPHttpsConfiguration|Get-NetIPHttpsState|Get-NetIsatapConfiguration|Get-NetNatTransitionConfiguration|Get-NetNatTransitionMonitoring|Get-NetTeredoConfiguration|Get-NetTeredoState|New-NetIPHttpsConfiguration|New-NetNatTransitionConfiguration|Remove-NetIPHttpsCertBinding|Remove-NetIPHttpsConfiguration|Remove-NetNatTransitionConfiguration|Rename-NetIPHttpsConfiguration|Reset-Net6to4Configuration|Reset-NetDnsTransitionConfiguration|Reset-NetIPHttpsConfiguration|Reset-NetIsatapConfiguration|Reset-NetTeredoConfiguration|Set-Net6to4Configuration|Set-NetDnsTransitionConfiguration|Set-NetIPHttpsConfiguration|Set-NetIsatapConfiguration|Set-NetNatTransitionConfiguration|Set-NetTeredoConfiguration|\" +\n        // Module PackageManagement\n        \"Find-Package|Find-PackageProvider|Get-Package|Get-PackageProvider|Get-PackageSource|Import-PackageProvider|Install-Package|Install-PackageProvider|Register-PackageSource|Save-Package|Set-PackageSource|Uninstall-Package|Unregister-PackageSource|\" +\n        // Module PcsvDevice\n        \"Clear-PcsvDeviceLog|Get-PcsvDevice|Get-PcsvDeviceLog|Restart-PcsvDevice|Set-PcsvDeviceBootConfiguration|Set-PcsvDeviceNetworkConfiguration|Set-PcsvDeviceUserPassword|Start-PcsvDevice|Stop-PcsvDevice|\" +\n        // Module Pester\n        \"AfterAll|AfterEach|Assert-MockCalled|Assert-VerifiableMocks|BeforeAll|BeforeEach|Context|Describe|Get-MockDynamicParameters|Get-TestDriveItem|In|InModuleScope|Invoke-Mock|Invoke-Pester|It|Mock|New-Fixture|Set-DynamicParameterVariables|Setup|Should|\" +\n        // Module PKI\n        \"Add-CertificateEnrollmentPolicyServer|Export-Certificate|Export-PfxCertificate|Get-Certificate|Get-CertificateAutoEnrollmentPolicy|Get-CertificateEnrollmentPolicyServer|Get-CertificateNotificationTask|Get-PfxData|Import-Certificate|Import-PfxCertificate|New-CertificateNotificationTask|New-SelfSignedCertificate|Remove-CertificateEnrollmentPolicyServer|Remove-CertificateNotificationTask|Set-CertificateAutoEnrollmentPolicy|Switch-Certificate|Test-Certificate|\" +\n        // Module PnpDevice\n        \"Disable-PnpDevice|Enable-PnpDevice|Get-PnpDevice|Get-PnpDeviceProperty|\" +\n        // Module PowerShellGet\n        \"Find-DscResource|Find-Module|Find-Script|Get-InstalledModule|Get-InstalledScript|Get-PSRepository|Install-Module|Install-Script|New-ScriptFileInfo|Publish-Module|Publish-Script|Register-PSRepository|Save-Module|Save-Script|Set-PSRepository|Test-ScriptFileInfo|Uninstall-Module|Uninstall-Script|Unregister-PSRepository|Update-Module|Update-ModuleManifest|Update-Script|Update-ScriptFileInfo|\" +\n        // Module PrintManagement\n        \"Add-Printer|Add-PrinterDriver|Add-PrinterPort|Get-PrintConfiguration|Get-Printer|Get-PrinterDriver|Get-PrinterPort|Get-PrinterProperty|Get-PrintJob|Read-PrinterNfcTag|Remove-Printer|Remove-PrinterDriver|Remove-PrinterPort|Remove-PrintJob|Rename-Printer|Restart-PrintJob|Resume-PrintJob|Set-PrintConfiguration|Set-Printer|Set-PrinterProperty|Suspend-PrintJob|Write-PrinterNfcTag|\" +\n        // Module PSDesiredStateConfiguration\n        \"Configuration|Disable-DscDebug|Enable-DscDebug|Get-DscConfiguration|Get-DscConfigurationStatus|Get-DscLocalConfigurationManager|Get-DscResource|New-DscChecksum|Remove-DscConfigurationDocument|Restore-DscConfiguration|Stop-DscConfiguration|Invoke-DscResource|Publish-DscConfiguration|Set-DscLocalConfigurationManager|Start-DscConfiguration|Test-DscConfiguration|Update-DscConfiguration|\" +\n        // Module PSDiagnostics\n        \"Disable-PSTrace|Disable-PSWSManCombinedTrace|Disable-WSManTrace|Enable-PSTrace|Enable-PSWSManCombinedTrace|Enable-WSManTrace|Get-LogProperties|Set-LogProperties|Start-Trace|Stop-Trace|\" +\n        // Module PSReadline\n        \"PSConsoleHostReadline|Get-PSReadlineKeyHandler|Get-PSReadlineOption|Remove-PSReadlineKeyHandler|Set-PSReadlineKeyHandler|Set-PSReadlineOption|\" +\n        // Module PSScheduledJob\n        \"Add-JobTrigger|Disable-JobTrigger|Disable-ScheduledJob|Enable-JobTrigger|Enable-ScheduledJob|Get-JobTrigger|Get-ScheduledJob|Get-ScheduledJobOption|New-JobTrigger|New-ScheduledJobOption|Register-ScheduledJob|Remove-JobTrigger|Set-JobTrigger|Set-ScheduledJob|Set-ScheduledJobOption|Unregister-ScheduledJob|\" +\n        // Module PSWorkflow\n        \"New-PSWorkflowSession|New-PSWorkflowExecutionOption|\" +\n        // Module PSWorkflowUtility\n        \"Invoke-AsWorkflow|\" +\n        // Module ScheduledTasks\n        \"Disable-ScheduledTask|Enable-ScheduledTask|Export-ScheduledTask|Get-ClusteredScheduledTask|Get-ScheduledTask|Get-ScheduledTaskInfo|New-ScheduledTask|New-ScheduledTaskAction|New-ScheduledTaskPrincipal|New-ScheduledTaskSettingsSet|New-ScheduledTaskTrigger|Register-ClusteredScheduledTask|Register-ScheduledTask|Set-ClusteredScheduledTask|Set-ScheduledTask|Start-ScheduledTask|Stop-ScheduledTask|Unregister-ClusteredScheduledTask|Unregister-ScheduledTask|\" +\n        // Module SecureBoot\n        \"Confirm-SecureBootUEFI|Format-SecureBootUEFI|Get-SecureBootPolicy|Get-SecureBootUEFI|Set-SecureBootUEFI|\" +\n        // Module SmbShare\n        \"Block-SmbShareAccess|Close-SmbOpenFile|Close-SmbSession|Disable-SmbDelegation|Enable-SmbDelegation|Get-SmbBandwidthLimit|Get-SmbClientConfiguration|Get-SmbClientNetworkInterface|Get-SmbConnection|Get-SmbDelegation|Get-SmbMapping|Get-SmbMultichannelConnection|Get-SmbMultichannelConstraint|Get-SmbOpenFile|Get-SmbServerConfiguration|Get-SmbServerNetworkInterface|Get-SmbSession|Get-SmbShare|Get-SmbShareAccess|Grant-SmbShareAccess|New-SmbMapping|New-SmbMultichannelConstraint|New-SmbShare|Remove-SmbBandwidthLimit|Remove-SmbMapping|Remove-SmbMultichannelConstraint|Remove-SmbShare|Revoke-SmbShareAccess|Set-SmbBandwidthLimit|Set-SmbClientConfiguration|Set-SmbPathAcl|Set-SmbServerConfiguration|Set-SmbShare|Unblock-SmbShareAccess|Update-SmbMultichannelConnection|\" +\n        // Module SmbWitness\n        \"Move-SmbClient|Get-SmbWitnessClient|Move-SmbWitnessClient|\" +\n        // Module StartLayout\n        \"Get-StartApps|Export-StartLayout|Import-StartLayout|\" +\n        // Module Storage\n        \"Disable-PhysicalDiskIndication|Disable-StorageDiagnosticLog|Enable-PhysicalDiskIndication|Enable-StorageDiagnosticLog|Flush-Volume|Get-DiskSNV|Get-PhysicalDiskSNV|Get-StorageEnclosureSNV|Initialize-Volume|Write-FileSystemCache|Add-InitiatorIdToMaskingSet|Add-PartitionAccessPath|Add-PhysicalDisk|Add-TargetPortToMaskingSet|Add-VirtualDiskToMaskingSet|Block-FileShareAccess|Clear-Disk|Clear-FileStorageTier|Clear-StorageDiagnosticInfo|Connect-VirtualDisk|Debug-FileShare|Debug-StorageSubSystem|Debug-Volume|Disable-PhysicalDiskIdentification|Disable-StorageEnclosureIdentification|Disable-StorageHighAvailability|Disconnect-VirtualDisk|Dismount-DiskImage|Enable-PhysicalDiskIdentification|Enable-StorageEnclosureIdentification|Enable-StorageHighAvailability|Format-Volume|Get-DedupProperties|Get-Disk|Get-DiskImage|Get-DiskStorageNodeView|Get-FileIntegrity|Get-FileShare|Get-FileShareAccessControlEntry|Get-FileStorageTier|Get-InitiatorId|Get-InitiatorPort|Get-MaskingSet|Get-OffloadDataTransferSetting|Get-Partition|Get-PartitionSupportedSize|Get-PhysicalDisk|Get-PhysicalDiskStorageNodeView|Get-ResiliencySetting|Get-StorageAdvancedProperty|Get-StorageDiagnosticInfo|Get-StorageEnclosure|Get-StorageEnclosureStorageNodeView|Get-StorageEnclosureVendorData|Get-StorageFaultDomain|Get-StorageFileServer|Get-StorageFirmwareInformation|Get-StorageHealthAction|Get-StorageHealthReport|Get-StorageHealthSetting|Get-StorageJob|Get-StorageNode|Get-StoragePool|Get-StorageProvider|Get-StorageReliabilityCounter|Get-StorageSetting|Get-StorageSubSystem|Get-StorageTier|Get-StorageTierSupportedSize|Get-SupportedClusterSizes|Get-SupportedFileSystems|Get-TargetPort|Get-TargetPortal|Get-VirtualDisk|Get-VirtualDiskSupportedSize|Get-Volume|Get-VolumeCorruptionCount|Get-VolumeScrubPolicy|Grant-FileShareAccess|Hide-VirtualDisk|Initialize-Disk|Mount-DiskImage|New-FileShare|New-MaskingSet|New-Partition|New-StorageFileServer|New-StoragePool|New-StorageSubsystemVirtualDisk|New-StorageTier|New-VirtualDisk|New-VirtualDiskClone|New-VirtualDiskSnapshot|New-Volume|Optimize-StoragePool|Optimize-Volume|Register-StorageSubsystem|Remove-FileShare|Remove-InitiatorId|Remove-InitiatorIdFromMaskingSet|Remove-MaskingSet|Remove-Partition|Remove-PartitionAccessPath|Remove-PhysicalDisk|Remove-StorageFileServer|Remove-StorageHealthSetting|Remove-StoragePool|Remove-StorageTier|Remove-TargetPortFromMaskingSet|Remove-VirtualDisk|Remove-VirtualDiskFromMaskingSet|Rename-MaskingSet|Repair-FileIntegrity|Repair-VirtualDisk|Repair-Volume|Reset-PhysicalDisk|Reset-StorageReliabilityCounter|Resize-Partition|Resize-StorageTier|Resize-VirtualDisk|Revoke-FileShareAccess|Set-Disk|Set-FileIntegrity|Set-FileShare|Set-FileStorageTier|Set-InitiatorPort|Set-Partition|Set-PhysicalDisk|Set-ResiliencySetting|Set-StorageFileServer|Set-StorageHealthSetting|Set-StoragePool|Set-StorageProvider|Set-StorageSetting|Set-StorageSubSystem|Set-StorageTier|Set-VirtualDisk|Set-Volume|Set-VolumeScrubPolicy|Show-VirtualDisk|Start-StorageDiagnosticLog|Stop-StorageDiagnosticLog|Stop-StorageJob|Unblock-FileShareAccess|Unregister-StorageSubsystem|Update-Disk|Update-HostStorageCache|Update-StorageFirmware|Update-StoragePool|Update-StorageProviderCache|Write-VolumeCache|\" +\n        // Module TLS\n        \"Disable-TlsCipherSuite|Disable-TlsSessionTicketKey|Enable-TlsCipherSuite|Enable-TlsSessionTicketKey|Export-TlsSessionTicketKey|Get-TlsCipherSuite|New-TlsSessionTicketKey|\" +\n        // Module TroubleshootingPack\n        \"Get-TroubleshootingPack|Invoke-TroubleshootingPack|\" +\n        // Module TrustedPlatformModule\n        \"Clear-Tpm|ConvertTo-TpmOwnerAuth|Disable-TpmAutoProvisioning|Enable-TpmAutoProvisioning|Get-Tpm|Get-TpmEndorsementKeyInfo|Get-TpmSupportedFeature|Import-TpmOwnerAuth|Initialize-Tpm|Set-TpmOwnerAuth|Unblock-Tpm|\" +\n        // Module VpnClient\n        \"Add-VpnConnection|Add-VpnConnectionRoute|Add-VpnConnectionTriggerApplication|Add-VpnConnectionTriggerDnsConfiguration|Add-VpnConnectionTriggerTrustedNetwork|Get-VpnConnection|Get-VpnConnectionTrigger|New-EapConfiguration|New-VpnServerAddress|Remove-VpnConnection|Remove-VpnConnectionRoute|Remove-VpnConnectionTriggerApplication|Remove-VpnConnectionTriggerDnsConfiguration|Remove-VpnConnectionTriggerTrustedNetwork|Set-VpnConnection|Set-VpnConnectionIPsecConfiguration|Set-VpnConnectionProxy|Set-VpnConnectionTriggerDnsConfiguration|Set-VpnConnectionTriggerTrustedNetwork|\" +\n        // Module Wdac\n        \"Add-OdbcDsn|Disable-OdbcPerfCounter|Disable-WdacBidTrace|Enable-OdbcPerfCounter|Enable-WdacBidTrace|Get-OdbcDriver|Get-OdbcDsn|Get-OdbcPerfCounter|Get-WdacBidTrace|Remove-OdbcDsn|Set-OdbcDriver|Set-OdbcDsn|\" +\n        // Module WindowsDeveloperLicense\n        \"Get-WindowsDeveloperLicense|Show-WindowsDeveloperLicenseRegistration|Unregister-WindowsDeveloperLicense|\" +\n        // Module WindowsErrorReporting\n        \"Disable-WindowsErrorReporting|Enable-WindowsErrorReporting|Get-WindowsErrorReporting|\" +\n        // Module WindowsSearch\n        \"Get-WindowsSearchSetting|Set-WindowsSearchSetting|\" +\n        // Module WindowsUpdate\n        \"Get-WindowsUpdateLog\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": builtinFunctions,\n        \"keyword\": keywords\n    }, \"identifier\");\n\n    // Help Reference: about_Operators\n    // https://technet.microsoft.com/en-us/library/hh847732.aspx\n    var binaryOperatorsRe = (\n        // Comparison Operators\n        \"eq|ne|gt|lt|le|ge|like|notlike|match|notmatch|contains|notcontains|in|notin|band|bor|bxor|bnot|\" + \n        \"ceq|cne|cgt|clt|cle|cge|clike|cnotlike|cmatch|cnotmatch|ccontains|cnotcontains|cin|cnotin|\" + \n        \"ieq|ine|igt|ilt|ile|ige|ilike|inotlike|imatch|inotmatch|icontains|inotcontains|iin|inotin|\" +\n        // Logical Operators\n        \"and|or|xor|not|\" +\n        // String Operators\n        \"split|join|replace|f|\" +\n        \"csplit|creplace|\" +\n        \"isplit|ireplace|\" +\n        // Type Operators\n        \"is|isnot|as|\" +\n        // Shift Operators\n        \"shl|shr\"\n    );\n\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"#.*$\"\n            }, {\n                token : \"comment.start\",\n                regex : \"<#\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token : \"constant.language.boolean\",\n                regex : \"[$](?:[Tt]rue|[Ff]alse)\\\\b\"\n            }, {\n                token : \"constant.language\",\n                regex : \"[$][Nn]ull\\\\b\"\n            }, {\n                token : \"variable.instance\",\n                regex : \"[$][a-zA-Z][a-zA-Z0-9_]*\\\\b\"\n            }, {\n                token : keywordMapper,\n                // TODO: Unicode escape sequences\n                // TODO: Unicode identifiers\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$\\\\-]*\\\\b\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"\\\\-(?:\" + binaryOperatorsRe + \")\"\n            }, {\n                // Arithmetic, Assignment, Redirection, Call, Not & Pipeline Operators\n                token : \"keyword.operator\",\n                regex : \"&|\\\\+|\\\\-|\\\\*|\\\\/|\\\\%|\\\\=|\\\\>|\\\\&|\\\\!|\\\\|\"\n            }, {\n                token : \"lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment.end\",\n                regex : \"#>\",\n                next : \"start\"\n            }, {\n                token : \"doc.comment.tag\",\n                regex : \"^\\\\.\\\\w+\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ]\n    };\n};\n\noop.inherits(PowershellHighlightRules, TextHighlightRules);\n\nexports.PowershellHighlightRules = PowershellHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/praat.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar PraatHighlightRules = require(\"./praat_highlight_rules\").PraatHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = PraatHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.foldingRules = new CStyleFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"#\";\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[:]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/praat\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/praat_highlight_rules.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar PraatHighlightRules = function() {\n\n    var keywords = (\n        \"if|then|else|elsif|elif|endif|fi|\" +\n        \"endfor|endproc|\" + // related keywords specified below\n        \"while|endwhile|\" +\n        \"repeat|until|\" +\n        \"select|plus|minus|\" +\n        \"assert|asserterror\"\n    );\n\n    var predefinedVariables = (\n        \"macintosh|windows|unix|\" +\n        \"praatVersion|praatVersion\\\\$\" +\n        \"pi|undefined|\" +\n        \"newline\\\\$|tab\\\\$|\" +\n        \"shellDirectory\\\\$|homeDirectory\\\\$|preferencesDirectory\\\\$|\" +\n        \"temporaryDirectory\\\\$|defaultDirectory\\\\$\"\n    );\n\n    // What is \"endSendPraat\"? Function? Directive?\n    var directives = (\n        \"clearinfo|endSendPraat\"\n    );\n\n    var functions = (\n//      Info functions\n        \"writeInfo|writeInfoLine|appendInfo|appendInfoLine|info\\\\$|\" +\n        \"writeFile|writeFileLine|appendFile|appendFileLine|\" +\n//      Math functions\n        \"abs|round|floor|ceiling|min|max|imin|imax|\" +\n        \"sqrt|sin|cos|tan|arcsin|arccos|arctan|arctan2|sinc|sincpi|\" +\n        \"exp|ln|lnBeta|lnGamma|log10|log2|\" +\n        \"sinh|cosh|tanh|arcsinh|arccosh|arctanh|\" +\n        \"sigmoid|invSigmoid|erf|erfc|\" +\n        \"random(?:Uniform|Integer|Gauss|Poisson|Binomial)|\" +\n        \"gaussP|gaussQ|invGaussQ|incompleteGammaP|incompleteBeta|\" +\n        \"chiSquareP|chiSquareQ|invChiSquareQ|studentP|studentQ|invStudentQ|\" +\n        \"fisherP|fisherQ|invFisherQ|\" +\n        \"binomialP|binomialQ|invBinomialP|invBinomialQ|\" +\n        \"hertzToBark|barkToHerz|\" +\n        \"hertzToMel|melToHertz|\" +\n        \"hertzToSemitones|semitonesToHerz|\" +\n        \"erb|hertzToErb|erbToHertz|\" +\n        \"phonToDifferenceLimens|differenceLimensToPhon|\" +\n        \"soundPressureToPhon|\" +\n        \"beta|beta2|besselI|besselK|\" +\n        \"numberOfColumns|numberOfRows|\" +\n//      String functions\n        \"selected|selected\\\\$|numberOfSelected|variableExists|\"+\n        \"index|rindex|startsWith|endsWith|\"+\n        \"index_regex|rindex_regex|replace_regex\\\\$|\"+\n        \"length|extractWord\\\\$|extractLine\\\\$|extractNumber|\" +\n        \"left\\\\$|right\\\\$|mid\\\\$|replace\\\\$|\" +\n        \"date\\\\$|fixed\\\\$|percent\\\\$|\" +\n//      Array functions\n        \"zero#|linear#|randomUniform#|randomInteger#|randomGauss#|\" +\n//      Pause functions\n        \"beginPause|endPause|\" +\n//      Demo functions\n        \"demoShow|demoWindowTitle|demoInput|demoWaitForInput|\" +\n        \"demoClicked|demoClickedIn|demoX|demoY|\" +\n        \"demoKeyPressed|demoKey\\\\$|\" +\n        \"demoExtraControlKeyPressed|demoShiftKeyPressed|\"+\n        \"demoCommandKeyPressed|demoOptionKeyPressed|\" +\n//      File functions\n        \"environment\\\\$|chooseReadFile\\\\$|\" +\n        \"chooseDirectory\\\\$|createDirectory|fileReadable|deleteFile|\" +\n        \"selectObject|removeObject|plusObject|minusObject|\" +\n        \"runScript|exitScript|\" +\n//      sendpraat functions\n        \"beginSendPraat|endSendPraat|\" +\n//      Other\n        \"objectsAreIdentical\"\n    );\n\n    var objectTypes = (\n        \"Activation|AffineTransform|AmplitudeTier|Art|Artword|Autosegment|\"  +\n        \"BarkFilter|CCA|Categories|Cepstrum|Cepstrumc|ChebyshevSeries|\"      +\n        \"ClassificationTable|Cochleagram|Collection|Configuration|\"          +\n        \"Confusion|ContingencyTable|Corpus|Correlation|Covariance|\"          +\n        \"CrossCorrelationTable|CrossCorrelationTables|DTW|Diagonalizer|\"     +\n        \"Discriminant|Dissimilarity|Distance|Distributions|DurationTier|\"    +\n        \"EEG|ERP|ERPTier|Eigen|Excitation|Excitations|ExperimentMFC|FFNet|\"  +\n        \"FeatureWeights|Formant|FormantFilter|FormantGrid|FormantPoint|\"     +\n        \"FormantTier|GaussianMixture|HMM|HMM_Observation|\"                   +\n        \"HMM_ObservationSequence|HMM_State|HMM_StateSequence|Harmonicity|\"   +\n        \"ISpline|Index|Intensity|IntensityTier|IntervalTier|KNN|KlattGrid|\"  +\n        \"KlattTable|LFCC|LPC|Label|LegendreSeries|LinearRegression|\"         +\n        \"LogisticRegression|LongSound|Ltas|MFCC|MSpline|ManPages|\"           +\n        \"Manipulation|Matrix|MelFilter|MixingMatrix|Movie|Network|\"          +\n        \"OTGrammar|OTHistory|OTMulti|PCA|PairDistribution|ParamCurve|\"       +\n        \"Pattern|Permutation|Pitch|PitchTier|PointProcess|Polygon|\"          +\n        \"Polynomial|Procrustes|RealPoint|RealTier|ResultsMFC|Roots|SPINET|\"  +\n        \"SSCP|SVD|Salience|ScalarProduct|Similarity|SimpleString|\"           +\n        \"SortedSetOfString|Sound|Speaker|Spectrogram|Spectrum|SpectrumTier|\" +\n        \"SpeechSynthesizer|SpellingChecker|Strings|StringsIndex|Table|\"      +\n        \"TableOfReal|TextGrid|TextInterval|TextPoint|TextTier|Tier|\"         +\n        \"Transition|VocalTract|Weight|WordList\"\n    );\n\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = {\n        \"start\" : [\n            {\n            // Interpolated strings\n                token : \"string.interpolated\",\n                regex : /'((?:[a-z][a-zA-Z0-9_]*)(?:\\$|#|:[0-9]+)?)'/\n            }, {\n            // stopwatch\n                token : [\"text\", \"text\", \"keyword.operator\", \"text\", \"keyword\"],\n                regex : /(^\\s*)(?:([a-z][a-zA-Z0-9_]*\\$?\\s+)(=)(\\s+))?(stopwatch)/\n            }, {\n            // Directives which introduce unquoted strings\n                token : [\"text\", \"keyword\", \"text\", \"string\"],\n                regex : /(^\\s*)(print(?:line|tab)?|echo|exit|pause|send(?:praat|socket)|include|execute|system(?:_nocheck)?)(\\s+)(.*)/\n            }, {\n            // Directives with no arguments\n                token : [\"text\", \"keyword\"],\n                regex : \"(^\\\\s*)(\" + directives + \")$\"\n            }, {\n            // Operators\n                token : [\"text\", \"keyword.operator\", \"text\"],\n                regex : /(\\s+)((?:\\+|-|\\/|\\*|<|>)=?|==?|!=|%|\\^|\\||and|or|not)(\\s+)/\n            }, {\n            // Commands\n                token : [\"text\", \"text\", \"keyword.operator\", \"text\", \"keyword\", \"text\", \"keyword\"],\n                regex : /(^\\s*)(?:([a-z][a-zA-Z0-9_]*\\$?\\s+)(=)(\\s+))?(?:((?:no)?warn|(?:unix_)?nocheck|noprogress)(\\s+))?((?:[A-Z][^.:\"]+)(?:$|(?:\\.{3}|:)))/\n            }, {\n            // Demo commands\n                token : [\"text\", \"keyword\", \"text\", \"keyword\"],\n                regex : /(^\\s*)(?:(demo)?(\\s+))((?:[A-Z][^.:\"]+)(?:$|(?:\\.{3}|:)))/\n            }, {\n            // Font-sizing commands\n                token : [\"text\", \"keyword\", \"text\", \"keyword\"],\n                regex : /^(\\s*)(?:(demo)(\\s+))?(10|12|14|16|24)$/\n            }, {\n            // do-style command calls\n                token : [\"text\", \"support.function\", \"text\"],\n                regex : /(\\s*)(do\\$?)(\\s*:\\s*|\\s*\\(\\s*)/\n            }, {\n            // Object types\n                token : \"entity.name.type\",\n                regex : \"(\" + objectTypes + \")\"\n            }, {\n            // Predefined variables\n                token : \"variable.language\",\n                regex : \"(\" + predefinedVariables + \")\"\n            }, {\n            // Functions\n                token : [\"support.function\", \"text\"],\n                regex : \"((?:\" + functions + \")\\\\$?)(\\\\s*(?::|\\\\())\"\n            }, {\n            // For-loop declarations\n                token : \"keyword\",\n                regex : /(\\bfor\\b)/,\n                next : \"for\"\n            }, {\n            // Generic keywords\n                token : \"keyword\",\n                regex : \"(\\\\b(?:\" + keywords + \")\\\\b)\"\n            }, {\n            // Generic strings\n                token : \"string\",\n                regex : /\"[^\"]*\"/\n            }, {\n            // Multiline quoted strings\n                token : \"string\",\n                regex : /\"[^\"]*$/,\n                next : \"brokenstring\"\n            }, {\n            // Form declarations\n                token : [\"text\", \"keyword\", \"text\", \"entity.name.section\"],\n                regex : /(^\\s*)(\\bform\\b)(\\s+)(.*)/,\n                next : \"form\"\n            }, {\n            // Numeric constants\n                token : \"constant.numeric\",\n                regex : /\\b[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b/\n            }, {\n            // Procedure declarations\n                token : [\"keyword\", \"text\", \"entity.name.function\"],\n                regex : /(procedure)(\\s+)(\\S+)/\n            }, {\n            // New-style procedure calls\n                token : [\"entity.name.function\", \"text\"],\n                regex : /(@\\S+)(:|\\s*\\()/\n            }, {\n            // Old-style procedure calls\n                token : [\"text\", \"keyword\", \"text\", \"entity.name.function\"],\n                regex : /(^\\s*)(call)(\\s+)(\\S+)/\n            }, {\n            // Comments\n                token : \"comment\",\n                regex : /(^\\s*#|;).*$/\n            }, {\n                token : \"text\",\n                regex : /\\s+/\n            }\n        ],\n        \"form\" : [\n            {\n                token : [\"keyword\", \"text\", \"constant.numeric\"],\n                regex : /((?:optionmenu|choice)\\s+)(\\S+:\\s+)([0-9]+)/\n            }, {\n                token : [\"keyword\", \"constant.numeric\"],\n                regex : /((?:option|button)\\s+)([+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b)/\n            }, {\n                token : [\"keyword\", \"string\"],\n                regex : /((?:option|button)\\s+)(.*)/\n            }, {\n                token : [\"keyword\", \"text\", \"string\"],\n                regex : /((?:sentence|text)\\s+)(\\S+\\s*)(.*)/\n            }, {\n                token : [\"keyword\", \"text\", \"string\", \"invalid.illegal\"],\n                regex : /(word\\s+)(\\S+\\s*)(\\S+)?(\\s.*)?/\n            }, {\n                token : [\"keyword\", \"text\", \"constant.language\"],\n                regex : /(boolean\\s+)(\\S+\\s*)(0|1|\"?(?:yes|no)\"?)/\n            }, {\n                token : [\"keyword\", \"text\", \"constant.numeric\"],\n                regex : /((?:real|natural|positive|integer)\\s+)(\\S+\\s*)([+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b)/\n            }, {\n                token : [\"keyword\", \"string\"],\n                regex : /(comment\\s+)(.*)/\n            }, {\n                token : \"keyword\",\n                regex : 'endform',\n                next : \"start\"\n            }\n        ],\n        \"for\" : [\n            {\n                token : [\"keyword\", \"text\", \"constant.numeric\", \"text\"],\n                regex : /(from|to)(\\s+)([+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?)(\\s*)/\n            }, {\n                token : [\"keyword\", \"text\"],\n                regex : /(from|to)(\\s+\\S+\\s*)/\n            }, {\n                token : \"text\",\n                regex : /$/,\n                next : \"start\"\n            }\n        ],\n        \"brokenstring\" : [\n            {\n                token : [\"text\", \"string\"],\n                regex : /(\\s*\\.{3})([^\"]*)/\n            }, {\n                token : \"string\",\n                regex : /\"/,\n                next : \"start\"\n            }\n        ]\n    };\n};\n\noop.inherits(PraatHighlightRules, TextHighlightRules);\n\nexports.PraatHighlightRules = PraatHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/prolog.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n *\n * Contributor(s):\n *\n *\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar PrologHighlightRules = require(\"./prolog_highlight_rules\").PrologHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = PrologHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"%\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$id = \"ace/mode/prolog\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});"
  },
  {
    "path": "lib/ace/mode/prolog_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/* This file was autogenerated from https://raw.github.com/stephenroller/prolog-tmbundle/master/Syntaxes/Prolog.tmLanguage (uuid: ) */\n/****************************************************************************************\n * IT MIGHT NOT BE PERFECT ...But it's a good start from an existing *.tmlanguage file. *\n * fileTypes                                                                            *\n ****************************************************************************************/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar PrologHighlightRules = function() {\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = { start: \n       [ { include: '#comment' },\n         { include: '#basic_fact' },\n         { include: '#rule' },\n         { include: '#directive' },\n         { include: '#fact' } ],\n      '#atom': \n       [ { token: 'constant.other.atom.prolog',\n           regex: '\\\\b[a-z][a-zA-Z0-9_]*\\\\b' },\n         { token: 'constant.numeric.prolog',\n           regex: '-?\\\\d+(?:\\\\.\\\\d+)?' },\n         { include: '#string' } ],\n      '#basic_elem': \n       [ { include: '#comment' },\n         { include: '#statement' },\n         { include: '#constants' },\n         { include: '#operators' },\n         { include: '#builtins' },\n         { include: '#list' },\n         { include: '#atom' },\n         { include: '#variable' } ],\n      '#basic_fact': \n       [ { token: \n            [ 'entity.name.function.fact.basic.prolog',\n              'punctuation.end.fact.basic.prolog' ],\n           regex: '([a-z]\\\\w*)(\\\\.)' } ],\n      '#builtins': \n       [ { token: 'support.function.builtin.prolog',\n           regex: '\\\\b(?:abolish|abort|ancestors|arg|ascii|assert[az]|atom(?:ic)?|body|char|close|conc|concat|consult|define|definition|dynamic|dump|fail|file|free|free_proc|functor|getc|goal|halt|head|head|integer|length|listing|match_args|member|next_clause|nl|nonvar|nth|number|cvars|nvars|offset|op|print?|prompt|putc|quoted|ratom|read|redefine|rename|retract(?:all)?|see|seeing|seen|skip|spy|statistics|system|tab|tell|telling|term|time|told|univ|unlink_clause|unspy_predicate|var|write)\\\\b' } ],\n      '#comment': \n       [ { token: \n            [ 'punctuation.definition.comment.prolog',\n              'comment.line.percentage.prolog' ],\n           regex: '(%)(.*$)' },\n         { token: 'punctuation.definition.comment.prolog',\n           regex: '/\\\\*',\n           push: \n            [ { token: 'punctuation.definition.comment.prolog',\n                regex: '\\\\*/',\n                next: 'pop' },\n              { defaultToken: 'comment.block.prolog' } ] } ],\n      '#constants': \n       [ { token: 'constant.language.prolog',\n           regex: '\\\\b(?:true|false|yes|no)\\\\b' } ],\n      '#directive': \n       [ { token: 'keyword.operator.directive.prolog',\n           regex: ':-',\n           push: \n            [ { token: 'meta.directive.prolog', regex: '\\\\.', next: 'pop' },\n              { include: '#comment' },\n              { include: '#statement' },\n              { defaultToken: 'meta.directive.prolog' } ] } ],\n      '#expr': \n       [ { include: '#comments' },\n         { token: 'meta.expression.prolog',\n           regex: '\\\\(',\n           push: \n            [ { token: 'meta.expression.prolog', regex: '\\\\)', next: 'pop' },\n              { include: '#expr' },\n              { defaultToken: 'meta.expression.prolog' } ] },\n         { token: 'keyword.control.cutoff.prolog', regex: '!' },\n         { token: 'punctuation.control.and.prolog', regex: ',' },\n         { token: 'punctuation.control.or.prolog', regex: ';' },\n         { include: '#basic_elem' } ],\n      '#fact': \n       [ { token: \n            [ 'entity.name.function.fact.prolog',\n              'punctuation.begin.fact.parameters.prolog' ],\n           regex: '([a-z]\\\\w*)(\\\\()(?!.*:-)',\n           push: \n            [ { token: \n                 [ 'punctuation.end.fact.parameters.prolog',\n                   'punctuation.end.fact.prolog' ],\n                regex: '(\\\\))(\\\\.?)',\n                next: 'pop' },\n              { include: '#parameter' },\n              { defaultToken: 'meta.fact.prolog' } ] } ],\n      '#list': \n       [ { token: 'punctuation.begin.list.prolog',\n           regex: '\\\\[(?=.*\\\\])',\n           push: \n            [ { token: 'punctuation.end.list.prolog',\n                regex: '\\\\]',\n                next: 'pop' },\n              { include: '#comment' },\n              { token: 'punctuation.separator.list.prolog', regex: ',' },\n              { token: 'punctuation.concat.list.prolog',\n                regex: '\\\\|',\n                push: \n                 [ { token: 'meta.list.concat.prolog',\n                     regex: '(?=\\\\s*\\\\])',\n                     next: 'pop' },\n                   { include: '#basic_elem' },\n                   { defaultToken: 'meta.list.concat.prolog' } ] },\n              { include: '#basic_elem' },\n              { defaultToken: 'meta.list.prolog' } ] } ],\n      '#operators': \n       [ { token: 'keyword.operator.prolog',\n           regex: '\\\\\\\\\\\\+|\\\\bnot\\\\b|\\\\bis\\\\b|->|[><]|[><\\\\\\\\:=]?=|(?:=\\\\\\\\|\\\\\\\\=)=' } ],\n      '#parameter': \n       [ { token: 'variable.language.anonymous.prolog',\n           regex: '\\\\b_\\\\b' },\n         { token: 'variable.parameter.prolog',\n           regex: '\\\\b[A-Z_]\\\\w*\\\\b' },\n         { token: 'punctuation.separator.parameters.prolog', regex: ',' },\n         { include: '#basic_elem' },\n         { token: 'text', regex: '[^\\\\s]' } ],\n      '#rule': \n       [ { token: 'meta.rule.prolog',\n           regex: '(?=[a-z]\\\\w*.*:-)',\n           push: \n            [ { token: 'punctuation.rule.end.prolog',\n                regex: '\\\\.',\n                next: 'pop' },\n              { token: 'meta.rule.signature.prolog',\n                regex: '(?=[a-z]\\\\w*.*:-)',\n                push: \n                 [ { token: 'meta.rule.signature.prolog',\n                     regex: '(?=:-)',\n                     next: 'pop' },\n                   { token: 'entity.name.function.rule.prolog',\n                     regex: '[a-z]\\\\w*(?=\\\\(|\\\\s*:-)' },\n                   { token: 'punctuation.rule.parameters.begin.prolog',\n                     regex: '\\\\(',\n                     push: \n                      [ { token: 'punctuation.rule.parameters.end.prolog',\n                          regex: '\\\\)',\n                          next: 'pop' },\n                        { include: '#parameter' },\n                        { defaultToken: 'meta.rule.parameters.prolog' } ] },\n                   { defaultToken: 'meta.rule.signature.prolog' } ] },\n              { token: 'keyword.operator.definition.prolog',\n                regex: ':-',\n                push: \n                 [ { token: 'meta.rule.definition.prolog',\n                     regex: '(?=\\\\.)',\n                     next: 'pop' },\n                   { include: '#comment' },\n                   { include: '#expr' },\n                   { defaultToken: 'meta.rule.definition.prolog' } ] },\n              { defaultToken: 'meta.rule.prolog' } ] } ],\n      '#statement': \n       [ { token: 'meta.statement.prolog',\n           regex: '(?=[a-z]\\\\w*\\\\()',\n           push: \n            [ { token: 'punctuation.end.statement.parameters.prolog',\n                regex: '\\\\)',\n                next: 'pop' },\n              { include: '#builtins' },\n              { include: '#atom' },\n              { token: 'punctuation.begin.statement.parameters.prolog',\n                regex: '\\\\(',\n                push: \n                 [ { token: 'meta.statement.parameters.prolog',\n                     regex: '(?=\\\\))',\n                     next: 'pop' },\n                   { token: 'punctuation.separator.statement.prolog', regex: ',' },\n                   { include: '#basic_elem' },\n                   { defaultToken: 'meta.statement.parameters.prolog' } ] },\n              { defaultToken: 'meta.statement.prolog' } ] } ],\n      '#string': \n       [ { token: 'punctuation.definition.string.begin.prolog',\n           regex: '\\'',\n           push: \n            [ { token: 'punctuation.definition.string.end.prolog',\n                regex: '\\'',\n                next: 'pop' },\n              { token: 'constant.character.escape.prolog', regex: '\\\\\\\\.' },\n              { token: 'constant.character.escape.quote.prolog',\n                regex: '\\'\\'' },\n              { defaultToken: 'string.quoted.single.prolog' } ] } ],\n      '#variable': \n       [ { token: 'variable.language.anonymous.prolog',\n           regex: '\\\\b_\\\\b' },\n         { token: 'variable.other.prolog',\n           regex: '\\\\b[A-Z_][a-zA-Z0-9_]*\\\\b' } ] };\n    \n    this.normalizeRules();\n};\n\nPrologHighlightRules.metaData = { fileTypes: [ 'plg', 'prolog' ],\n      foldingStartMarker: '(%\\\\s*region \\\\w*)|([a-z]\\\\w*.*:- ?)',\n      foldingStopMarker: '(%\\\\s*end(\\\\s*region)?)|(?=\\\\.)',\n      keyEquivalent: '^~P',\n      name: 'Prolog',\n      scopeName: 'source.prolog' };\n\n\noop.inherits(PrologHighlightRules, TextHighlightRules);\n\nexports.PrologHighlightRules = PrologHighlightRules;\n});"
  },
  {
    "path": "lib/ace/mode/properties.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar PropertiesHighlightRules = require(\"./properties_highlight_rules\").PropertiesHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = PropertiesHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.$id = \"ace/mode/properties\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/properties_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar PropertiesHighlightRules = function() {\n\n    var escapeRe = /\\\\u[0-9a-fA-F]{4}|\\\\/;\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : /[!#].*$/\n            }, {\n                // Empty value\n                token : \"keyword\",\n                regex : /[=:]$/\n            }, {\n                token : \"keyword\",\n                regex : /[=:]/,\n                next  : \"value\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : escapeRe\n            }, {\n                defaultToken: \"variable\"\n            }\n        ],\n        \"value\" : [\n            {\n                // Multi-line string\n                regex : /\\\\$/,\n                token : \"string\",\n                next : \"value\"\n            }, {\n                regex : /$/,\n                token : \"string\",\n                next : \"start\"\n            }, {\n                token : \"constant.language.escape\",\n                regex : escapeRe\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n\n};\n\noop.inherits(PropertiesHighlightRules, TextHighlightRules);\n\nexports.PropertiesHighlightRules = PropertiesHighlightRules;\n});\n\n"
  },
  {
    "path": "lib/ace/mode/protobuf.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n *\n * Contributor(s):\n *\n *    Zef Hemel\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar CMode = require(\"./c_cpp\").Mode;\nvar ProtobufHighlightRules = require(\"./protobuf_highlight_rules\").ProtobufHighlightRules;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    CMode.call(this);\n    this.foldingRules = new CStyleFoldMode();\n    this.HighlightRules = ProtobufHighlightRules;\n};\noop.inherits(Mode, CMode);\n\n(function() {\n    // Extra logic goes here.\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$id = \"ace/mode/protobuf\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});"
  },
  {
    "path": "lib/ace/mode/protobuf_highlight_rules.js",
    "content": "define(function(require, exports, module) {\n    \"use strict\";\n\n    var oop = require(\"../lib/oop\");\n    var TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\n    var ProtobufHighlightRules = function() {\n\n        var builtinTypes = \"double|float|int32|int64|uint32|uint64|sint32|\" +\n                           \"sint64|fixed32|fixed64|sfixed32|sfixed64|bool|\" +\n                           \"string|bytes\";\n        var keywordDeclaration = \"message|required|optional|repeated|package|\" +\n                                 \"import|option|enum\";\n\n        var keywordMapper = this.createKeywordMapper({\n            \"keyword.declaration.protobuf\": keywordDeclaration,\n            \"support.type\": builtinTypes\n        }, \"identifier\");\n\n        this.$rules = {\n            \"start\": [{\n                    token: \"comment\",\n                    regex: /\\/\\/.*$/\n                }, {\n                    token: \"comment\",\n                    regex: /\\/\\*/,\n                    next: \"comment\"\n                }, {\n                    token: \"constant\",\n                    regex: \"<[^>]+>\"\n                }, {\n                    regex: \"=\",\n                    token: \"keyword.operator.assignment.protobuf\"\n                }, {\n                    token : \"string\", // single line\n                    regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n                }, {\n                    token : \"string\", // single line\n                    regex : '[\\'](?:(?:\\\\\\\\.)|(?:[^\\'\\\\\\\\]))*?[\\']'\n                }, {\n                    token: \"constant.numeric\", // hex\n                    regex: \"0[xX][0-9a-fA-F]+\\\\b\"\n                }, {\n                    token: \"constant.numeric\", // float\n                    regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n                }, {\n                    token: keywordMapper,\n                    regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n                }],\n            \"comment\": [{\n                    token : \"comment\", // closing comment\n                    regex : \"\\\\*\\\\/\",\n                    next : \"start\"\n                }, {\n                    defaultToken : \"comment\"\n                }]\n        };\n\n        this.normalizeRules();\n    };\n\n    oop.inherits(ProtobufHighlightRules, TextHighlightRules);\n\n    exports.ProtobufHighlightRules = ProtobufHighlightRules;\n});"
  },
  {
    "path": "lib/ace/mode/python.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar PythonHighlightRules = require(\"./python_highlight_rules\").PythonHighlightRules;\nvar PythonFoldMode = require(\"./folding/pythonic\").FoldMode;\nvar Range = require(\"../range\").Range;\n\nvar Mode = function() {\n    this.HighlightRules = PythonHighlightRules;\n    this.foldingRules = new PythonFoldMode(\"\\\\:\");\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"#\";\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[:]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    var outdents = {\n        \"pass\": 1,\n        \"return\": 1,\n        \"raise\": 1,\n        \"break\": 1,\n        \"continue\": 1\n    };\n    \n    this.checkOutdent = function(state, line, input) {\n        if (input !== \"\\r\\n\" && input !== \"\\r\" && input !== \"\\n\")\n            return false;\n\n        var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens;\n        \n        if (!tokens)\n            return false;\n        \n        // ignore trailing comments\n        do {\n            var last = tokens.pop();\n        } while (last && (last.type == \"comment\" || (last.type == \"text\" && last.value.match(/^\\s+$/))));\n        \n        if (!last)\n            return false;\n        \n        return (last.type == \"keyword\" && outdents[last.value]);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        // outdenting in python is slightly different because it always applies\n        // to the next line and only of a new line is inserted\n        \n        row += 1;\n        var indent = this.$getIndent(doc.getLine(row));\n        var tab = doc.getTabString();\n        if (indent.slice(-tab.length) == tab)\n            doc.remove(new Range(row, indent.length-tab.length, row, indent.length));\n    };\n\n    this.$id = \"ace/mode/python\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/python_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n/*\n * TODO: python delimiters\n */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar PythonHighlightRules = function() {\n\n    var keywords = (\n        \"and|as|assert|break|class|continue|def|del|elif|else|except|exec|\" +\n        \"finally|for|from|global|if|import|in|is|lambda|not|or|pass|print|\" +\n        \"raise|return|try|while|with|yield|async|await\"\n    );\n\n    var builtinConstants = (\n        \"True|False|None|NotImplemented|Ellipsis|__debug__\"\n    );\n\n    var builtinFunctions = (\n        \"abs|divmod|input|open|staticmethod|all|enumerate|int|ord|str|any|\" +\n        \"eval|isinstance|pow|sum|basestring|execfile|issubclass|print|super|\" +\n        \"binfile|iter|property|tuple|bool|filter|len|range|type|bytearray|\" +\n        \"float|list|raw_input|unichr|callable|format|locals|reduce|unicode|\" +\n        \"chr|frozenset|long|reload|vars|classmethod|getattr|map|repr|xrange|\" +\n        \"cmp|globals|max|reversed|zip|compile|hasattr|memoryview|round|\" +\n        \"__import__|complex|hash|min|set|apply|delattr|help|next|setattr|\" +\n        \"buffer|dict|hex|object|slice|coerce|dir|id|oct|sorted|intern\"\n    );\n\n    //var futureReserved = \"\";\n    var keywordMapper = this.createKeywordMapper({\n        \"invalid.deprecated\": \"debugger\",\n        \"support.function\": builtinFunctions,\n        //\"invalid.illegal\": futureReserved,\n        \"constant.language\": builtinConstants,\n        \"keyword\": keywords\n    }, \"identifier\");\n\n    var strPre = \"(?:r|u|ur|R|U|UR|Ur|uR)?\";\n\n    var decimalInteger = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n    var octInteger = \"(?:0[oO]?[0-7]+)\";\n    var hexInteger = \"(?:0[xX][\\\\dA-Fa-f]+)\";\n    var binInteger = \"(?:0[bB][01]+)\";\n    var integer = \"(?:\" + decimalInteger + \"|\" + octInteger + \"|\" + hexInteger + \"|\" + binInteger + \")\";\n\n    var exponent = \"(?:[eE][+-]?\\\\d+)\";\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var exponentFloat = \"(?:(?:\" + pointFloat + \"|\" +  intPart + \")\" + exponent + \")\";\n    var floatNumber = \"(?:\" + exponentFloat + \"|\" + pointFloat + \")\";\n\n    var stringEscape =  \"\\\\\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\\\\\abfnrtv'\\\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})\";\n\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment\",\n            regex : \"#.*$\"\n        }, {\n            token : \"string\",           // multi line \"\"\" string start\n            regex : strPre + '\"{3}',\n            next : \"qqstring3\"\n        }, {\n            token : \"string\",           // \" string\n            regex : strPre + '\"(?=.)',\n            next : \"qqstring\"\n        }, {\n            token : \"string\",           // multi line ''' string start\n            regex : strPre + \"'{3}\",\n            next : \"qstring3\"\n        }, {\n            token : \"string\",           // ' string\n            regex : strPre + \"'(?=.)\",\n            next : \"qstring\"\n        }, {\n            token : \"constant.numeric\", // imaginary\n            regex : \"(?:\" + floatNumber + \"|\\\\d+)[jJ]\\\\b\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : floatNumber\n        }, {\n            token : \"constant.numeric\", // long integer\n            regex : integer + \"[lL]\\\\b\"\n        }, {\n            token : \"constant.numeric\", // integer\n            regex : integer + \"\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|%|<<|>>|&|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|=\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[\\\\[\\\\(\\\\{]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\]\\\\)\\\\}]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+\"\n        } ],\n        \"qqstring3\" : [ {\n            token : \"constant.language.escape\",\n            regex : stringEscape\n        }, {\n            token : \"string\", // multi line \"\"\" string end\n            regex : '\"{3}',\n            next : \"start\"\n        }, {\n            defaultToken : \"string\"\n        } ],\n        \"qstring3\" : [ {\n            token : \"constant.language.escape\",\n            regex : stringEscape\n        }, {\n            token : \"string\",  // multi line ''' string end\n            regex : \"'{3}\",\n            next : \"start\"\n        }, {\n            defaultToken : \"string\"\n        } ],\n        \"qqstring\" : [{\n            token : \"constant.language.escape\",\n            regex : stringEscape\n        }, {\n            token : \"string\",\n            regex : \"\\\\\\\\$\",\n            next  : \"qqstring\"\n        }, {\n            token : \"string\",\n            regex : '\"|$',\n            next  : \"start\"\n        }, {\n            defaultToken: \"string\"\n        }],\n        \"qstring\" : [{\n            token : \"constant.language.escape\",\n            regex : stringEscape\n        }, {\n            token : \"string\",\n            regex : \"\\\\\\\\$\",\n            next  : \"qstring\"\n        }, {\n            token : \"string\",\n            regex : \"'|$\",\n            next  : \"start\"\n        }, {\n            defaultToken: \"string\"\n        }]\n    };\n};\n\noop.inherits(PythonHighlightRules, TextHighlightRules);\n\nexports.PythonHighlightRules = PythonHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/python_test.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\nif (typeof process !== \"undefined\") {\n    require(\"amd-loader\");\n}\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar EditSession = require(\"../edit_session\").EditSession;\nvar Tokenizer = require(\"../tokenizer\").Tokenizer;\nvar Mode = require(\"./python\").Mode;\nvar assert = require(\"../test/assertions\");\n\nmodule.exports = {\n    setUp : function() {    \n        this.mode = new Mode();\n    },\n\n    \"test: getTokenizer() (smoke test)\" : function() {\n        var tokenizer = this.mode.getTokenizer();\n\n        assert.ok(tokenizer instanceof Tokenizer);\n\n        var tokens = tokenizer.getLineTokens(\"'juhu'\", \"start\").tokens;\n        assert.equal(\"string\", tokens[0].type);\n    },\n\n    \"test: auto outdent after 'pass', 'return' and 'raise'\" : function() {\n        assert.ok(this.mode.checkOutdent(\"start\", \"        pass\", \"\\n\"));\n        assert.ok(this.mode.checkOutdent(\"start\", \"        pass  \", \"\\n\"));\n        assert.ok(this.mode.checkOutdent(\"start\", \"        return\", \"\\n\"));\n        assert.ok(this.mode.checkOutdent(\"start\", \"        raise\", \"\\n\"));\n        assert.equal(this.mode.checkOutdent(\"start\", \"        raise\", \" \"), false);\n        assert.ok(this.mode.checkOutdent(\"start\", \"        pass # comment\", \"\\n\"));\n        assert.equal(this.mode.checkOutdent(\"start\", \"'juhu'\", \"\\n\"), false);\n    },\n    \n    \"test: auto outdent\" : function() {\n        var session = new EditSession([\"    if True:\", \"        pass\", \"        \"]);\n        this.mode.autoOutdent(\"start\", session, 1);\n        assert.equal(\"    \", session.getLine(2));\n    }\n\n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main) {\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n}\n"
  },
  {
    "path": "lib/ace/mode/r.js",
    "content": "/*\n * r.js\n *\n * Copyright (C) 2009-11 by RStudio, Inc.\n *\n * The Initial Developer of the Original Code is\n * Ajax.org B.V.\n * Portions created by the Initial Developer are Copyright (C) 2010\n * the Initial Developer. All Rights Reserved.\n *\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n *\n */\ndefine(function(require, exports, module) {\n   \"use strict\";\n\n   var unicode = require(\"../unicode\");\n   var Range = require(\"../range\").Range;\n   var oop = require(\"../lib/oop\");\n   var TextMode = require(\"./text\").Mode;\n   var TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n   var RHighlightRules = require(\"./r_highlight_rules\").RHighlightRules;\n   var MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\n\n   var Mode = function(){\n      this.HighlightRules = RHighlightRules;\n      this.$outdent = new MatchingBraceOutdent();\n      this.$behaviour = this.$defaultBehaviour;\n   };\n   oop.inherits(Mode, TextMode);\n\n   (function() {\n      this.lineCommentStart = \"#\";\n      // todo import codeModel from RStudio\n      this.tokenRe = new RegExp(\"^[\" + unicode.wordChars + \"._]+\", \"g\");\n\n      this.nonTokenRe = new RegExp(\"^(?:[^\" + unicode.wordChars + \"._]|\\s])+\", \"g\");\n\n      /*this.$complements = {\n               \"(\": \")\",\n               \"[\": \"]\",\n               '\"': '\"',\n               \"'\": \"'\",\n               \"{\": \"}\"\n            };\n      this.$reOpen = /^[([\"'{]$/;\n      this.$reClose = /^[)\\]\"'}]$/;\n\n      this.getNextLineIndent = function(state, line, tab, tabSize, row)\n      {\n         return this.codeModel.getNextLineIndent(row, line, state, tab, tabSize);\n      };\n\n      this.allowAutoInsert = this.smartAllowAutoInsert;\n\n      this.checkOutdent = function(state, line, input) {\n         if (! /^\\s+$/.test(line))\n            return false;\n\n         return /^\\s*[\\{\\}\\)]/.test(input);\n      };\n\n      this.getIndentForOpenBrace = function(openBracePos)\n      {\n         return this.codeModel.getIndentForOpenBrace(openBracePos);\n      };\n\n      this.autoOutdent = function(state, doc, row) {\n         if (row == 0)\n            return 0;\n\n         var line = doc.getLine(row);\n\n         var match = line.match(/^(\\s*[\\}\\)])/);\n         if (match)\n         {\n            var column = match[1].length;\n            var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n            if (!openBracePos || openBracePos.row == row) return 0;\n\n            var indent = this.codeModel.getIndentForOpenBrace(openBracePos);\n            doc.replace(new Range(row, 0, row, column-1), indent);\n         }\n\n         match = line.match(/^(\\s*\\{)/);\n         if (match)\n         {\n            var column = match[1].length;\n            var indent = this.codeModel.getBraceIndent(row-1);\n            doc.replace(new Range(row, 0, row, column-1), indent);\n         }\n      };\n\n      this.$getIndent = function(line) {\n         var match = line.match(/^(\\s+)/);\n         if (match) {\n            return match[1];\n         }\n\n         return \"\";\n      };\n\n      this.transformAction = function(state, action, editor, session, text) {\n         if (action === 'insertion' && text === \"\\n\") {\n\n            // If newline in a doxygen comment, continue the comment\n            var pos = editor.getSelectionRange().start;\n            var match = /^((\\s*#+')\\s*)/.exec(session.doc.getLine(pos.row));\n            if (match && editor.getSelectionRange().start.column >= match[2].length) {\n               return {text: \"\\n\" + match[1]};\n            }\n         }\n         return false;\n      };*/\n       this.$id = \"ace/mode/r\";\n   }).call(Mode.prototype);\n   exports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/r_highlight_rules.js",
    "content": "/*\n * r_highlight_rules.js\n *\n * Copyright (C) 2009-11 by RStudio, Inc.\n *\n * The Initial Developer of the Original Code is\n * Ajax.org B.V.\n * Portions created by the Initial Developer are Copyright (C) 2010\n * the Initial Developer. All Rights Reserved.\n *\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n *\n */\ndefine(function(require, exports, module)\n{\n\n   var oop = require(\"../lib/oop\");\n   var lang = require(\"../lib/lang\");\n   var TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n   var TexHighlightRules = require(\"./tex_highlight_rules\").TexHighlightRules;\n\n   var RHighlightRules = function()\n   {\n\n      var keywords = lang.arrayToMap(\n            (\"function|if|in|break|next|repeat|else|for|return|switch|while|try|tryCatch|stop|warning|require|library|attach|detach|source|setMethod|setGeneric|setGroupGeneric|setClass\")\n                  .split(\"|\")\n            );\n\n      var buildinConstants = lang.arrayToMap(\n            (\"NULL|NA|TRUE|FALSE|T|F|Inf|NaN|NA_integer_|NA_real_|NA_character_|\" +\n             \"NA_complex_\").split(\"|\")\n            );\n\n      // regexp must not have capturing parentheses. Use (?:) instead.\n      // regexps are ordered -> the first match is used\n\n      this.$rules = {\n         \"start\" : [\n            {\n               // Roxygen\n               token : \"comment.sectionhead\",\n               regex : \"#+(?!').*(?:----|====|####)\\\\s*$\"\n            },\n            {\n               // Roxygen\n               token : \"comment\",\n               regex : \"#+'\",\n               next : \"rd-start\"\n            },\n            {\n               token : \"comment\",\n               regex : \"#.*$\"\n            },\n            {\n               token : \"string\", // multi line string start\n               regex : '[\"]',\n               next : \"qqstring\"\n            },\n            {\n               token : \"string\", // multi line string start\n               regex : \"[']\",\n               next : \"qstring\"\n            },\n            {\n               token : \"constant.numeric\", // hex\n               regex : \"0[xX][0-9a-fA-F]+[Li]?\\\\b\"\n            },\n            {\n               token : \"constant.numeric\", // explicit integer\n               regex : \"\\\\d+L\\\\b\"\n            },\n            {\n               token : \"constant.numeric\", // number\n               regex : \"\\\\d+(?:\\\\.\\\\d*)?(?:[eE][+\\\\-]?\\\\d*)?i?\\\\b\"\n            },\n            {\n               token : \"constant.numeric\", // number with leading decimal\n               regex : \"\\\\.\\\\d+(?:[eE][+\\\\-]?\\\\d*)?i?\\\\b\"\n            },\n            {\n               token : \"constant.language.boolean\",\n               regex : \"(?:TRUE|FALSE|T|F)\\\\b\"\n            },\n            {\n               token : \"identifier\",\n               regex : \"`.*?`\"\n            },\n            {\n               onMatch : function(value) {\n                  if (keywords[value])\n                     return \"keyword\";\n                  else if (buildinConstants[value])\n                     return \"constant.language\";\n                  else if (value == '...' || value.match(/^\\.\\.\\d+$/))\n                     return \"variable.language\";\n                  else\n                     return \"identifier\";\n               },\n               regex : \"[a-zA-Z.][a-zA-Z0-9._]*\\\\b\"\n            },\n            {\n               token : \"keyword.operator\",\n               regex : \"%%|>=|<=|==|!=|\\\\->|<\\\\-|\\\\|\\\\||&&|=|\\\\+|\\\\-|\\\\*|/|\\\\^|>|<|!|&|\\\\||~|\\\\$|:\"\n            },\n            {\n               token : \"keyword.operator\", // infix operators\n               regex : \"%.*?%\"\n            },\n            {\n               // Obviously these are neither keywords nor operators, but\n               // labelling them as such was the easiest way to get them\n               // to be colored distinctly from regular text\n               token : \"paren.keyword.operator\",\n               regex : \"[[({]\"\n            },\n            {\n               // Obviously these are neither keywords nor operators, but\n               // labelling them as such was the easiest way to get them\n               // to be colored distinctly from regular text\n               token : \"paren.keyword.operator\",\n               regex : \"[\\\\])}]\"\n            },\n            {\n               token : \"text\",\n               regex : \"\\\\s+\"\n            }\n         ],\n         \"qqstring\" : [\n            {\n               token : \"string\",\n               regex : '(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',\n               next : \"start\"\n            },\n            {\n               token : \"string\",\n               regex : '.+'\n            }\n         ],\n         \"qstring\" : [\n            {\n               token : \"string\",\n               regex : \"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",\n               next : \"start\"\n            },\n            {\n               token : \"string\",\n               regex : '.+'\n            }\n         ]\n      };\n\n      var rdRules = new TexHighlightRules(\"comment\").getRules();\n\n      // Make all embedded TeX virtual-comment so they don't interfere with\n      // auto-indent.\n      for (var i = 0; i < rdRules[\"start\"].length; i++) {\n         rdRules[\"start\"][i].token += \".virtual-comment\";\n      }\n\n      this.addRules(rdRules, \"rd-\");\n      this.$rules[\"rd-start\"].unshift({\n          token: \"text\",\n          regex: \"^\",\n          next: \"start\"\n      });\n      this.$rules[\"rd-start\"].unshift({\n         token : \"keyword\",\n         regex : \"@(?!@)[^ ]*\"\n      });\n      this.$rules[\"rd-start\"].unshift({\n         token : \"comment\",\n         regex : \"@@\"\n      });\n      this.$rules[\"rd-start\"].push({\n         token : \"comment\",\n         regex : \"[^%\\\\\\\\[({\\\\])}]+\"\n      });\n   };\n\n   oop.inherits(RHighlightRules, TextHighlightRules);\n\n   exports.RHighlightRules = RHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/razor.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlMode = require(\"./html\").Mode;\nvar RazorHighlightRules = require(\"./razor_highlight_rules\").RazorHighlightRules;\nvar RazorCompletions = require(\"./razor_completions\").RazorCompletions;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\n\nvar Mode = function() {\n    HtmlMode.call(this);\n    this.$highlightRules = new RazorHighlightRules();\n    this.$completer = new RazorCompletions();\n    this.$htmlCompleter = new HtmlCompletions();\n};\noop.inherits(Mode, HtmlMode);\n\n(function() {\n    this.getCompletions = function(state, session, pos, prefix) {\n        var razorToken = this.$completer.getCompletions(state, session, pos, prefix);\n        var htmlToken = this.$htmlCompleter.getCompletions(state, session, pos, prefix);\n        return razorToken.concat(htmlToken);\n    };\n    \n    this.createWorker = function(session) {\n        return null;\n    };\n\n    this.$id = \"ace/mode/razor\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/razor_completions.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nvar keywords = [\n    \"abstract\", \"as\", \"base\", \"bool\",\n    \"break\", \"byte\", \"case\", \"catch\",\n    \"char\", \"checked\", \"class\", \"const\",\n    \"continue\", \"decimal\", \"default\", \"delegate\",\n    \"do\", \"double\",\"else\",\"enum\",\n    \"event\", \"explicit\", \"extern\", \"false\",\n    \"finally\", \"fixed\", \"float\", \"for\",\n    \"foreach\", \"goto\", \"if\", \"implicit\",\n    \"in\", \"int\", \"interface\", \"internal\",\n    \"is\", \"lock\", \"long\", \"namespace\",\n    \"new\", \"null\", \"object\", \"operator\",\n    \"out\", \"override\", \"params\", \"private\",\n    \"protected\", \"public\", \"readonly\", \"ref\",\n    \"return\", \"sbyte\", \"sealed\", \"short\",\n    \"sizeof\", \"stackalloc\", \"static\", \"string\",\n    \"struct\", \"switch\", \"this\", \"throw\",\n    \"true\", \"try\", \"typeof\", \"uint\",\n    \"ulong\", \"unchecked\", \"unsafe\", \"ushort\",\n    \"using\", \"var\", \"virtual\", \"void\",\n    \"volatile\", \"while\"];\n\nvar shortHands  = [\n    \"Html\", \"Model\", \"Url\", \"Layout\"\n];\n    \nvar RazorCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        \n        if(state.lastIndexOf(\"razor-short-start\") == -1 && state.lastIndexOf(\"razor-block-start\") == -1)\n            return [];\n        \n        var token = session.getTokenAt(pos.row, pos.column);\n        if (!token)\n            return [];\n        \n        if(state.lastIndexOf(\"razor-short-start\") != -1) {\n            return this.getShortStartCompletions(state, session, pos, prefix);\n        }\n        \n        if(state.lastIndexOf(\"razor-block-start\") != -1) {\n            return this.getKeywordCompletions(state, session, pos, prefix);\n        }\n\n        \n    };\n    \n    this.getShortStartCompletions = function(state, session, pos, prefix) {\n        return shortHands.map(function(element){\n            return {\n                value: element,\n                meta: \"keyword\",\n                score: Number.MAX_VALUE\n            };\n        });\n    };\n\n    this.getKeywordCompletions = function(state, session, pos, prefix) {\n        return shortHands.concat(keywords).map(function(element){\n            return {\n                value: element,\n                meta: \"keyword\",\n                score: Number.MAX_VALUE\n            };\n        });\n    };\n\n}).call(RazorCompletions.prototype);\n\nexports.RazorCompletions = RazorCompletions;\n\n});\n"
  },
  {
    "path": "lib/ace/mode/razor_highlight_rules.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar CSharpHighlightRules = require(\"./csharp_highlight_rules\").CSharpHighlightRules;\n\nvar blockPrefix = 'razor-block-';\nvar RazorLangHighlightRules = function() {\n    CSharpHighlightRules.call(this);\n\n    var processPotentialCallback = function(value, stackItem) {\n        if (typeof stackItem === \"function\")\n            return stackItem(value);\n\n        return stackItem;\n    };\n\n    var inBraces = 'in-braces';\n    this.$rules.start.unshift({\n        regex: '[\\\\[({]',\n        onMatch: function(value, state, stack) {\n            var prefix = /razor-[^\\-]+-/.exec(state)[0];\n\n            stack.unshift(value);\n            stack.unshift(prefix + inBraces);\n            this.next = prefix + inBraces;\n            return 'paren.lparen';\n        }\n    }, {\n        start: \"@\\\\*\",\n        end: \"\\\\*@\",\n        token: \"comment\"\n    });\n\n    var parentCloseMap = {\n        '{': '}',\n        '[': ']',\n        '(': ')'\n    };\n\n    this.$rules[inBraces] = lang.deepCopy(this.$rules.start);\n    this.$rules[inBraces].unshift({\n        regex: '[\\\\])}]',\n        onMatch: function(value, state, stack) {\n            var open = stack[1];\n            if (parentCloseMap[open] !== value)\n                return 'invalid.illegal';\n\n            stack.shift(); // exit in-braces block\n            stack.shift(); // exit brace marker\n            this.next = processPotentialCallback(value, stack[0]) || 'start';\n            return 'paren.rparen';\n        }\n    });\n};\n\noop.inherits(RazorLangHighlightRules, CSharpHighlightRules);\n\nvar RazorHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n\n    // 'Blocks': @{}, @(), @functions{}\n\n    var blockStartRule = {\n        regex: '@[({]|@functions{',\n        onMatch: function(value, state, stack) {\n            stack.unshift(value);\n            stack.unshift('razor-block-start');\n            this.next = 'razor-block-start';\n            return 'punctuation.block.razor';\n        }\n    };\n\n    var blockEndMap = {\n        '@{': '}',\n        '@(': ')',\n        '@functions{':'}'\n    };\n\n    var blockEndRule = {\n        regex: '[})]',\n        onMatch: function(value, state, stack) {\n            var blockStart = stack[1];\n            if (blockEndMap[blockStart] !== value)\n                return 'invalid.illegal';\n\n            stack.shift(); // exit razor block\n            stack.shift(); // remove block type marker\n            this.next = stack.shift() || 'start';\n            return 'punctuation.block.razor';\n        }\n    };\n\n    // Short: @Abc.Cde(Xyz).Ef\n\n    var shortStartRule = {\n        regex: \"@(?![{(])\",\n        onMatch: function(value, state, stack) {\n            stack.unshift(\"razor-short-start\");\n            this.next = \"razor-short-start\";\n            return 'punctuation.short.razor';\n        }\n    };\n\n    var shortEndRule = {\n        token: \"\",\n        regex: \"(?=[^A-Za-z_\\\\.()\\\\[\\\\]])\",\n        next: 'pop'\n    };\n\n    // Control flow: @if, etc\n\n    var ifStartRule = {\n        regex: \"@(?=if)\",\n        onMatch: function(value, state, stack) {\n            stack.unshift(function(value) {\n                if (value !== '}')\n                    return 'start';\n\n                return stack.shift() || 'start';\n            });\n            this.next = 'razor-block-start';\n            return 'punctuation.control.razor';\n        }\n    };\n\n    // Combined:\n\n    var razorStartRules = [\n        {\n            start: \"@\\\\*\",\n            end: \"\\\\*@\",\n            token: \"comment\"\n        },\n        {\n            token: [\"meta.directive.razor\", \"text\", \"identifier\"],\n            regex: \"^(\\\\s*@model)(\\\\s+)(.+)$\"\n        },\n        blockStartRule,\n        //ifStartRule,\n        shortStartRule\n    ];\n\n    for (var key in this.$rules)\n        this.$rules[key].unshift.apply(this.$rules[key], razorStartRules);\n\n    this.embedRules(RazorLangHighlightRules, \"razor-block-\", [blockEndRule], [\"start\"]);\n    this.embedRules(RazorLangHighlightRules, \"razor-short-\", [shortEndRule], [\"start\"]);\n\n    this.normalizeRules();\n};\n\noop.inherits(RazorHighlightRules, HtmlHighlightRules);\n\nexports.RazorHighlightRules = RazorHighlightRules;\nexports.RazorLangHighlightRules = RazorLangHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/rdoc.js",
    "content": "/*\n * rdoc.js\n *\n * Copyright (C) 2009-11 by RStudio, Inc.\n *\n * The Initial Developer of the Original Code is\n * Ajax.org B.V.\n * Portions created by the Initial Developer are Copyright (C) 2010\n * the Initial Developer. All Rights Reserved.\n *\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n *\n */\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar RDocHighlightRules = require(\"./rdoc_highlight_rules\").RDocHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\n\nvar Mode = function(suppressHighlighting) {\n\tthis.HighlightRules = RDocHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n    this.$id = \"ace/mode/rdoc\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/rdoc_highlight_rules.js",
    "content": "/*\n * rdoc_highlight_rules.js\n *\n * Copyright (C) 2009-11 by RStudio, Inc.\n *\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n *\n */\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar LaTeXHighlightRules = require(\"./latex_highlight_rules\");\n\nvar RDocHighlightRules = function() {\n\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"%.*$\"\n            }, {\n                token : \"text\", // non-command\n                regex : \"\\\\\\\\[$&%#\\\\{\\\\}]\"\n            }, {\n                token : \"keyword\", // command\n                regex : \"\\\\\\\\(?:name|alias|method|S3method|S4method|item|code|preformatted|kbd|pkg|var|env|option|command|author|email|url|source|cite|acronym|href|code|preformatted|link|eqn|deqn|keyword|usage|examples|dontrun|dontshow|figure|if|ifelse|Sexpr|RdOpts|inputencoding|usepackage)\\\\b\",\n               next : \"nospell\"\n            }, {\n                token : \"keyword\", // command\n                regex : \"\\\\\\\\(?:[a-zA-Z0-9]+|[^a-zA-Z0-9])\"\n            }, {\n               // Obviously these are neither keywords nor operators, but\n               // labelling them as such was the easiest way to get them\n               // to be colored distinctly from regular text\n               token : \"paren.keyword.operator\",\n                regex : \"[[({]\"\n            }, {\n               // Obviously these are neither keywords nor operators, but\n               // labelling them as such was the easiest way to get them\n               // to be colored distinctly from regular text\n               token : \"paren.keyword.operator\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        // This mode is necessary to prevent spell checking, but to keep the\n        // same syntax highlighting behavior. \n        \"nospell\" : [\n           {\n               token : \"comment\",\n               regex : \"%.*$\",\n               next : \"start\"\n           }, {\n               token : \"nospell.text\", // non-command\n               regex : \"\\\\\\\\[$&%#\\\\{\\\\}]\"\n           }, {\n               token : \"keyword\", // command\n               regex : \"\\\\\\\\(?:name|alias|method|S3method|S4method|item|code|preformatted|kbd|pkg|var|env|option|command|author|email|url|source|cite|acronym|href|code|preformatted|link|eqn|deqn|keyword|usage|examples|dontrun|dontshow|figure|if|ifelse|Sexpr|RdOpts|inputencoding|usepackage)\\\\b\"\n           }, {\n               token : \"keyword\", // command\n               regex : \"\\\\\\\\(?:[a-zA-Z0-9]+|[^a-zA-Z0-9])\",\n               next : \"start\"\n           }, {\n               token : \"paren.keyword.operator\",\n               regex : \"[[({]\"\n           }, {\n               token : \"paren.keyword.operator\",\n               regex : \"[\\\\])]\"\n           }, {\n               token : \"paren.keyword.operator\",\n               regex : \"}\",\n               next : \"start\"\n           }, {\n               token : \"nospell.text\",\n               regex : \"\\\\s+\"\n           }, {\n               token : \"nospell.text\",\n               regex : \"\\\\w+\"\n           }\n        ]\n    };\n};\n\noop.inherits(RDocHighlightRules, TextHighlightRules);\n\nexports.RDocHighlightRules = RDocHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/red.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar RedHighlightRules = require(\"./red_highlight_rules\").RedHighlightRules;\nvar RedFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\n\nvar Mode = function() {\n    this.HighlightRules = RedHighlightRules;\n    this.foldingRules = new RedFoldMode();\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \";\";\n\tthis.blockCommentStart = \"comment {\";\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\[\\(]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/red\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/red_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar RedHighlightRules = function() {\n\n    //var keywordMapper = this.createKeywordMapper({\n    //}, \"text\", true, \" \");\n\n    var compoundKeywords = \"\";        \n\n    this.$rules = {\n        \"start\" : [\n            {token : \"keyword.operator\", \n                regex: /\\s([\\-+%/=<>*]|(?:\\*\\*\\|\\/\\/|==|>>>?|<>|<<|=>|<=|=\\?))(\\s|(?=:))/},\n            {token : \"string.email\", regex : /\\w[-\\w._]*\\@\\w[-\\w._]*/},\n            {token : \"value.time\", regex : /\\b\\d+:\\d+(:\\d+)?/},\n            {token : \"string.url\", regex : /\\w[-\\w_]*\\:(\\/\\/)?\\w[-\\w._]*(:\\d+)?/},\n            {token : \"value.date\", regex : /(\\b\\d{1,4}[-/]\\d{1,2}[-/]\\d{1,2}|\\d{1,2}[-/]\\d{1,2}[-/]\\d{1,4})\\b/},\n            {token : \"value.tuple\", regex : /\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(\\.\\d{1,3}){0,9}/},\n            {token : \"value.pair\", regex: /[+-]?\\d+x[-+]?\\d+/},\n            {token : \"value.binary\", regex : /\\b2#{([01]{8})+}/},\n            {token : \"value.binary\", regex : /\\b64#{([\\w/=+])+}/},\n            {token : \"value.binary\", regex : /(16)?#{([\\dabcdefABCDEF][\\dabcdefABCDEF])*}/},\n            {token : \"value.issue\", regex : /#\\w[-\\w'*.]*/},\n            {token : \"value.numeric\", regex: /[+-]?\\d['\\d]*(?:\\.\\d+)?e[-+]?\\d{1,3}\\%?(?!\\w)/},\n            {token : \"invalid.illegal\", regex: /[+-]?\\d['\\d]*(?:\\.\\d+)?\\%?[a-zA-Z]/},\n            {token : \"value.numeric\", regex: /[+-]?\\d['\\d]*(?:\\.\\d+)?\\%?(?![a-zA-Z])/},\n            {token : \"value.character\", regex : /#\"(\\^[-@/_~^\"HKLM\\[]|.)\"/},\n            {token : \"string.file\", regex : /%[-\\w\\.\\/]+/},\n            {token : \"string.tag\", regex : /</, next : \"tag\"},\n            {token : \"string\", regex : /\"/, next  : \"string\"},\n            {token : \"string.other\", regex : \"{\", next  : \"string.other\"},\n            {token : \"comment\", regex : \"comment [[{]\", next : \"comment\"},\n            {token : \"comment\",  regex : /;.+$/},\n            //{token : \"invalid\", regex: \"\\\\.{2,}\"},\n            {token : \"paren.map-start\", regex : \"#\\\\(\"},\n            {token : \"paren.block-start\", regex : \"[\\\\[]\"},\n            {token : \"paren.block-end\", regex : \"[\\\\]]\"},\n            {token : \"paren.parens-start\", regex : \"[(]\"},\n            {token : \"paren.parens-end\", regex : \"\\\\)\"},\n            //{token : \"keyword\", regex : compoundKeywords}, \n            {token : \"keyword\", regex : \"/local|/external\"},\n            {token : \"keyword.preprocessor\", regex : \"#(if|either|\" +\n                \"switch|case|include|do|macrolocal|reset|process|trace)\"},\n            {token : \"constant.datatype!\", regex : \n                \"(?:datatype|unset|none|logic|block|paren|string|\" +\n                \"file|url|char|integer|float|word|set-word|lit-word|\" +\n                \"get-word|refinement|issue|native|action|op|function|\" +\n                \"path|lit-path|set-path|get-path|routine|bitset|point|\" + \n                \"object|typeset|error|vector|hash|pair|percent|tuple|\" +\n                \"map|binary|time|tag|email|handle|date|image|event|\" +\n                \"series|any-type|number|any-object|scalar|\" +\n                \"any-string|any-word|any-function|any-block|any-list|\" +\n                \"any-path|immediate|all-word|internal|external|default)!(?![-!?\\\\w~])\"},\n            {token : \"keyword.function\", regex : \n                \"\\\\b(?:collect|quote|on-parse-event|math|last|source|expand|\" +\n                \"show|context|object|input|quit|dir|make-dir|cause-error|\" +\n                \"error\\\\?|none\\\\?|block\\\\?|any-list\\\\?|word\\\\?|char\\\\?|\" +\n                \"any-string\\\\?|series\\\\?|binary\\\\?|attempt|url\\\\?|\" +\n                \"string\\\\?|suffix\\\\?|file\\\\?|object\\\\?|body-of|first|\" +\n                \"second|third|mod|clean-path|dir\\\\?|to-red-file|\" +\n                \"normalize-dir|list-dir|pad|empty\\\\?|dirize|offset\\\\?|\" +\n                \"what-dir|expand-directives|load|split-path|change-dir|\" +\n                \"to-file|path-thru|save|load-thru|View|float\\\\?|to-float|\" +\n                \"charset|\\\\?|probe|set-word\\\\?|q|words-of|replace|repend|\" +\n                \"react|function\\\\?|spec-of|unset\\\\?|halt|op\\\\?|\" +\n                \"any-function\\\\?|to-paren|tag\\\\?|routine|class-of|\" +\n                \"size-text|draw|handle\\\\?|link-tabs-to-parent|\" +\n                \"link-sub-to-parent|on-face-deep-change*|\" +\n                \"update-font-faces|do-actor|do-safe|do-events|pair\\\\?|\" +\n                \"foreach-face|hex-to-rgb|issue\\\\?|alter|path\\\\?|\" +\n                \"typeset\\\\?|datatype\\\\?|set-flag|layout|extract|image\\\\?|\" +\n                \"get-word\\\\?|to-logic|to-set-word|to-block|center-face|\" +\n                \"dump-face|request-font|request-file|request-dir|rejoin|\" +\n                \"ellipsize-at|any-block\\\\?|any-object\\\\?|map\\\\?|keys-of|\" +\n                \"a-an|also|parse-func-spec|help-string|what|routine\\\\?|\" +\n                \"action\\\\?|native\\\\?|refinement\\\\?|common-substr|\" +\n                \"red-complete-file|red-complete-path|unview|comment|\\\\?\\\\?|\" +\n                \"fourth|fifth|values-of|bitset\\\\?|email\\\\?|get-path\\\\?|\" +\n                \"hash\\\\?|integer\\\\?|lit-path\\\\?|lit-word\\\\?|logic\\\\?|\" +\n                \"paren\\\\?|percent\\\\?|set-path\\\\?|time\\\\?|tuple\\\\?|date\\\\?|\" +\n                \"vector\\\\?|any-path\\\\?|any-word\\\\?|number\\\\?|immediate\\\\?|\" +\n                \"scalar\\\\?|all-word\\\\?|to-bitset|to-binary|to-char|to-email|\" +\n                \"to-get-path|to-get-word|to-hash|to-integer|to-issue|\" +\n                \"to-lit-path|to-lit-word|to-map|to-none|to-pair|to-path|\" +\n                \"to-percent|to-refinement|to-set-path|to-string|to-tag|\" +\n                \"to-time|to-typeset|to-tuple|to-unset|to-url|to-word|\" +\n                \"to-image|to-date|parse-trace|modulo|eval-set-path|\" +\n                \"extract-boot-args|flip-exe-flag|split|do-file|\" +\n                \"exists-thru\\\\?|read-thru|do-thru|cos|sin|tan|acos|asin|\" +\n                \"atan|atan2|sqrt|clear-reactions|dump-reactions|react\\\\?|\" +\n                \"within\\\\?|overlap\\\\?|distance\\\\?|face\\\\?|metrics\\\\?|\" +\n                \"get-scroller|insert-event-func|remove-event-func|\" +\n                \"set-focus|help|fetch-help|about|ls|ll|pwd|cd|\" +\n                \"red-complete-input|matrix)(?![-!?\\\\w~])\"},\n            {token : \"keyword.action\", regex : \n                \"\\\\b(?:to|remove|copy|insert|change|clear|move|poke|put|\" +\n                \"random|reverse|sort|swap|take|trim|add|subtract|\" +\n                \"divide|multiply|make|reflect|form|mold|modify|\" +\n                \"absolute|negate|power|remainder|round|even\\\\?|odd\\\\?|\" +\n                \"and~|complement|or~|xor~|append|at|back|find|skip|\" +\n                \"tail|head|head\\\\?|index\\\\?|length\\\\?|next|pick|\" +\n                \"select|tail\\\\?|delete|read|write)(?![-_!?\\\\w~])\"\n            },\n            {token : \"keyword.native\", regex : \n                \"\\\\b(?:not|any|set|uppercase|lowercase|checksum|\" +\n                \"try|catch|browse|throw|all|as|\" +\n                \"remove-each|func|function|does|has|do|reduce|\" +\n                \"compose|get|print|prin|equal\\\\?|not-equal\\\\?|\" +\n                \"strict-equal\\\\?|lesser\\\\?|greater\\\\?|lesser-or-equal\\\\?|\" +\n                \"greater-or-equal\\\\?|same\\\\?|type\\\\?|stats|bind|in|parse|\" +\n                \"union|unique|intersect|difference|exclude|\" +\n                \"complement\\\\?|dehex|negative\\\\?|positive\\\\?|max|min|\" +\n                \"shift|to-hex|sine|cosine|tangent|arcsine|arccosine|\" +\n                \"arctangent|arctangent2|NaN\\\\?|zero\\\\?|log-2|log-10|log-e|\" +\n                \"exp|square-root|construct|value\\\\?|as-pair|\" +\n                \"extend|debase|enbase|to-local-file|\" +\n                \"wait|unset|new-line|new-line\\\\?|context\\\\?|set-env|\" +\n                \"get-env|list-env|now|sign\\\\?|call|size\\\\?)(?![-!?\\\\w~])\"\n            },\n            {token : \"keyword\", regex : \n                \"\\\\b(?:Red(?=\\\\s+\\\\[)|object|context|make|self|keep)(?![-!?\\\\w~])\"\n            },\n            {token: \"variable.language\", regex : \"this\"},\n            {token: \"keyword.control\", regex : \n                \"(?:while|if|return|case|unless|either|until|loop|repeat|\" +\n                \"forever|foreach|forall|switch|break|continue|exit)(?![-!?\\\\w~])\"},\n            {token: \"constant.language\", regex : \n                \"\\\\b(?:true|false|on|off|yes|none|no)(?![-!?\\\\w~])\"},\n            {token: \"constant.numeric\", regex : /\\bpi(?![^-_])/},\n            {token: \"constant.character\", regex : \"\\\\b(space|tab|newline|cr|lf)(?![-!?\\\\w~])\"},\n            {token: \"keyword.operator\", regex : \"\\s(or|and|xor|is)\\s\"},\n            //{token : keywordMapper, regex : \"\\\\b\\\\w[-\\\\w'*.]*\\\\b\"},\n            {token : \"variable.get-path\", regex : /:\\w[-\\w'*.?!]*(\\/\\w[-\\w'*.?!]*)(\\/\\w[-\\w'*.?!]*)*/},\n            {token : \"variable.set-path\", regex : /\\w[-\\w'*.?!]*(\\/\\w[-\\w'*.?!]*)(\\/\\w[-\\w'*.?!]*)*:/},\n            {token : \"variable.lit-path\", regex : /'\\w[-\\w'*.?!]*(\\/\\w[-\\w'*.?!]*)(\\/\\w[-\\w'*.?!]*)*/},\n            {token : \"variable.path\", regex : /\\w[-\\w'*.?!]*(\\/\\w[-\\w'*.?!]*)(\\/\\w[-\\w'*.?!]*)*/},\n            {token : \"variable.refinement\", regex : /\\/\\w[-\\w'*.?!]*/}, \n            {token : \"keyword.view.style\", regex : \n                \"\\\\b(?:window|base|button|text|field|area|check|\" +\n                \"radio|progress|slider|camera|text-list|\" +\n                \"drop-list|drop-down|panel|group-box|\" +\n                \"tab-panel|h1|h2|h3|h4|h5|box|image|init)(?![-!?\\\\w~])\"},\n            {token : \"keyword.view.event\", regex : \n                \"\\\\b(?:detect|on-detect|time|on-time|drawing|on-drawing|\" +\n                \"scroll|on-scroll|down|on-down|up|on-up|mid-down|\" +\n                \"on-mid-down|mid-up|on-mid-up|alt-down|on-alt-down|\" +\n                \"alt-up|on-alt-up|aux-down|on-aux-down|aux-up|\" +\n                \"on-aux-up|wheel|on-wheel|drag-start|on-drag-start|\" +\n                \"drag|on-drag|drop|on-drop|click|on-click|dbl-click|\" +\n                \"on-dbl-click|over|on-over|key|on-key|key-down|\" +\n                \"on-key-down|key-up|on-key-up|ime|on-ime|focus|\" +\n                \"on-focus|unfocus|on-unfocus|select|on-select|\" +\n                \"change|on-change|enter|on-enter|menu|on-menu|close|\" +\n                \"on-close|move|on-move|resize|on-resize|moving|\" +\n                \"on-moving|resizing|on-resizing|zoom|on-zoom|pan|\" +\n                \"on-pan|rotate|on-rotate|two-tap|on-two-tap|\" +\n                \"press-tap|on-press-tap|create|on-create|created|on-created)(?![-!?\\\\w~])\"},\n            {token : \"keyword.view.option\", regex : \n                \"\\\\b(?:all-over|center|color|default|disabled|down|\" +\n                \"flags|focus|font|font-color|font-name|\" +\n                \"font-size|hidden|hint|left|loose|name|\" +\n                \"no-border|now|rate|react|select|size|space)(?![-!?\\\\w~])\"},\n            {token : \"constant.other.colour\", regex : \"\\\\b(?:Red|white|transparent|\" +\n                \"black|gray|aqua|beige|blue|brick|brown|coal|coffee|\" +\n                \"crimson|cyan|forest|gold|green|ivory|khaki|leaf|linen|\" +\n                \"magenta|maroon|mint|navy|oldrab|olive|orange|papaya|\" +\n                \"pewter|pink|purple|reblue|rebolor|sienna|silver|sky|\" +\n                \"snow|tanned|teal|violet|water|wheat|yello|yellow|glass)(?![-!?\\\\w~])\"},\n            {token : \"variable.get-word\", regex : /\\:\\w[-\\w'*.?!]*/}, \n            {token : \"variable.set-word\", regex : /\\w[-\\w'*.?!]*\\:/}, \n            {token : \"variable.lit-word\", regex : /'\\w[-\\w'*.?!]*/},\n            {token : \"variable.word\", regex : /\\b\\w+[-\\w'*.!?]*/},\n            {caseInsensitive: true}\n        ],\n        \"string\" : [\n            //{token : \"constant.language.escape\",   regex : \"^\"},\n            {token : \"string\", regex : /\"/, next : \"start\"},\n            {defaultToken : \"string\"}\n        ],\n        \"string.other\" : [\n            //{token : \"constant.language.escape\",   regex : \"^\"},\n            {token : \"string.other\", regex : /}/, next : \"start\"},\n            {defaultToken : \"string.other\"}\n        ],\n        \"tag\" : [\n            {token : \"string.tag\", regex : />/, next : \"start\"},\n            {defaultToken : \"string.tag\"}\n        ],\n        \"comment\" : [\n            //{token : \"constant.language.escape\",   regex : \"^\"},\n            {token : \"comment\", regex : /}/, next : \"start\"},\n            {defaultToken : \"comment\"}\n        ]\n    };\n};\noop.inherits(RedHighlightRules, TextHighlightRules);\n\nexports.RedHighlightRules = RedHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/rhtml.js",
    "content": "/*\n * rhtml.js\n *\n * Copyright (C) 2009-11 by RStudio, Inc.\n *\n * The Initial Developer of the Original Code is\n * Ajax.org B.V.\n * Portions created by the Initial Developer are Copyright (C) 2010\n * the Initial Developer. All Rights Reserved.\n *\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlMode = require(\"./html\").Mode;\n\nvar RHtmlHighlightRules = require(\"./rhtml_highlight_rules\").RHtmlHighlightRules;\n/* Make life easier, don't do these right now \nvar SweaveBackgroundHighlighter = require(\"mode/sweave_background_highlighter\").SweaveBackgroundHighlighter;\nvar RCodeModel = require(\"mode/r_code_model\").RCodeModel;\n*/\n\nvar Mode = function(doc, session) {\n   HtmlMode.call(this);\n   this.$session = session;\n   this.HighlightRules = RHtmlHighlightRules;\n\n   /* Or these.\n   this.codeModel = new RCodeModel(doc, this.$tokenizer, /^r-/,\n                                   /^<!--\\s*begin.rcode\\s*(.*)/);\n   this.foldingRules = this.codeModel;\n   this.$sweaveBackgroundHighlighter = new SweaveBackgroundHighlighter(\n         session,\n         /^<!--\\s*begin.rcode\\s*(?:.*)/,\n         /^\\s*end.rcode\\s*-->/,\n         true); */\n};\noop.inherits(Mode, HtmlMode);\n\n(function() {\n   this.insertChunkInfo = {\n      value: \"<!--begin.rcode\\n\\nend.rcode-->\\n\",\n      position: {row: 0, column: 15}\n   };\n    \n   this.getLanguageMode = function(position)\n   {\n      return this.$session.getState(position.row).match(/^r-/) ? 'R' : 'HTML';\n   };\n\n   /* this.getNextLineIndent = function(state, line, tab, tabSize, row)\n   {\n      return this.codeModel.getNextLineIndent(row, line, state, tab, tabSize);\n   }; */\n\n    this.$id = \"ace/mode/rhtml\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/rhtml_highlight_rules.js",
    "content": "/*\n * rhtml_highlight_rules.js\n *\n * Copyright (C) 2009-11 by RStudio, Inc.\n *\n * The Initial Developer of the Original Code is\n * Ajax.org B.V.\n * Portions created by the Initial Developer are Copyright (C) 2010\n * the Initial Developer. All Rights Reserved.\n *\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n *\n */\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar RHighlightRules = require(\"./r_highlight_rules\").RHighlightRules;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar RHtmlHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n\n    this.$rules[\"start\"].unshift({\n        token: \"support.function.codebegin\",\n        regex: \"^<\" + \"!--\\\\s*begin.rcode\\\\s*(?:.*)\",\n        next: \"r-start\"\n    });\n\n    this.embedRules(RHighlightRules, \"r-\", [{\n        token: \"support.function.codeend\",\n        regex: \"^\\\\s*end.rcode\\\\s*-->\",\n        next: \"start\"\n    }], [\"start\"]);\n\n    this.normalizeRules();\n};\noop.inherits(RHtmlHighlightRules, TextHighlightRules);\n\nexports.RHtmlHighlightRules = RHtmlHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/rst.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2015, Robin Jarry\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar RSTHighlightRules = require(\"./rst_highlight_rules\").RSTHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = RSTHighlightRules;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.type = \"text\";\n\n    this.$id = \"ace/mode/rst\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n"
  },
  {
    "path": "lib/ace/mode/rst_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2015, Robin Jarry\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar RSTHighlightRules = function() {\n\n  var tokens = {\n    title: \"markup.heading\",\n    list: \"markup.heading\",\n    table: \"constant\",\n    directive: \"keyword.operator\",\n    entity: \"string\",\n    link: \"markup.underline.list\",\n    bold: \"markup.bold\",\n    italic: \"markup.italic\",\n    literal: \"support.function\",\n    comment: \"comment\"\n  };\n\n  var startStringPrefix = \"(^|\\\\s|[\\\"'(<\\\\[{\\\\-/:])\";\n  var endStringSuffix = \"(?:$|(?=\\\\s|[\\\\\\\\.,;!?\\\\-/:\\\"')>\\\\]}]))\";\n\n  this.$rules = {\n    \"start\": [\n      /* NB: Only the underline of the heading is highlighted.\n       * ACE tokenizer does not allow backtracking, the underlined text of the\n       * heading cannot be highlighted. */\n      {\n        token : tokens.title,\n        regex : \"(^)([\\\\=\\\\-`:\\\\.'\\\"~\\\\^_\\\\*\\\\+#])(\\\\2{2,}\\\\s*$)\"\n      },\n      /* Generic directive syntax (e.g. .. code-block:: c)\n       * All of the directive body is highlighted as a code block. */\n      {\n        token : [\"text\", tokens.directive, tokens.literal],\n        regex : \"(^\\\\s*\\\\.\\\\. )([^: ]+::)(.*$)\",\n        next  : \"codeblock\"\n      },\n      {\n        token : tokens.directive,\n        regex : \"::$\",\n        next  : \"codeblock\"\n      },\n      /* Link/anchor definitions */\n      {\n        token : [tokens.entity, tokens.link],\n        regex : \"(^\\\\.\\\\. _[^:]+:)(.*$)\"\n      },\n      {\n        token : [tokens.entity, tokens.link],\n        regex : \"(^__ )(https?://.*$)\"\n      },\n      /* Footnote definition */\n      {\n        token : tokens.entity,\n        regex : \"^\\\\.\\\\. \\\\[[^\\\\]]+\\\\] \"\n      },\n      /* Comment block start */\n      {\n        token : tokens.comment,\n        regex : \"^\\\\.\\\\. .*$\",\n        next  : \"comment\"\n      },\n      /* List items */\n      {\n        token : tokens.list,\n        regex : \"^\\\\s*[\\\\*\\\\+-] \"\n      },\n      {\n        token : tokens.list,\n        regex : \"^\\\\s*(?:[A-Za-z]|[0-9]+|[ivxlcdmIVXLCDM]+)\\\\. \"\n      },\n      {\n        token : tokens.list,\n        regex : \"^\\\\s*\\\\(?(?:[A-Za-z]|[0-9]+|[ivxlcdmIVXLCDM]+)\\\\) \"\n      },\n      /* \"Simple\" tables */\n      {\n        token : tokens.table,\n        regex : \"^={2,}(?: +={2,})+$\"\n      },\n      /* \"Grid\" tables */\n      {\n        token : tokens.table,\n        regex : \"^\\\\+-{2,}(?:\\\\+-{2,})+\\\\+$\"\n      },\n      {\n        token : tokens.table,\n        regex : \"^\\\\+={2,}(?:\\\\+={2,})+\\\\+$\"\n      },\n      /* Inline markup */\n      {\n        token : [\"text\", tokens.literal],\n        regex : startStringPrefix + \"(``)(?=\\\\S)\",\n        next  : \"code\"\n      },\n      {\n        token : [\"text\", tokens.bold],\n        regex : startStringPrefix + \"(\\\\*\\\\*)(?=\\\\S)\",\n        next  : \"bold\"\n      },\n      {\n        token : [\"text\", tokens.italic],\n        regex : startStringPrefix + \"(\\\\*)(?=\\\\S)\",\n        next  : \"italic\"\n      },\n      /* Substitution reference */\n      {\n        token : tokens.entity,\n        regex : \"\\\\|[\\\\w\\\\-]+?\\\\|\"\n      },\n      /* Link/footnote references */\n      {\n        token : tokens.entity,\n        regex : \":[\\\\w-:]+:`\\\\S\",\n        next  : \"entity\"\n      },\n      {\n        token : [\"text\", tokens.entity],\n        regex : startStringPrefix + \"(_`)(?=\\\\S)\",\n        next  : \"entity\"\n      },\n      {\n        token : tokens.entity,\n        regex : \"_[A-Za-z0-9\\\\-]+?\"\n      },\n      {\n        token : [\"text\", tokens.link],\n        regex : startStringPrefix + \"(`)(?=\\\\S)\",\n        next  : \"link\"\n      },\n      {\n        token : tokens.link,\n        regex : \"[A-Za-z0-9\\\\-]+?__?\"\n      },\n      {\n        token : tokens.link,\n        regex : \"\\\\[[^\\\\]]+?\\\\]_\"\n      },\n      {\n        token : tokens.link,\n        regex : \"https?://\\\\S+\"\n      },\n      /* \"Grid\" tables column separator\n       * This is at the end to make it lower priority over all other rules. */\n      {\n        token : tokens.table,\n        regex : \"\\\\|\"\n      }\n    ],\n\n    /* This state is used for all directive bodies and literal blocks.\n     * The parser returns to the \"start\" state when reaching the first\n     * non-empty line that does not start with at least one space. */\n    \"codeblock\": [\n      {\n        token : tokens.literal,\n        regex : \"^ +.+$\",\n        next : \"codeblock\"\n      },\n      {\n        token : tokens.literal,\n        regex : '^$',\n        next: \"codeblock\"\n      },\n      {\n        token : \"empty\",\n        regex : \"\",\n        next : \"start\"\n      }\n    ],\n\n    /* Inline code\n     * The parser returns to the \"start\" state when reaching \"``\" */\n    \"code\": [\n      {\n        token : tokens.literal,\n        regex : \"\\\\S``\" + endStringSuffix,\n        next  : \"start\"\n      },\n      {\n        defaultToken: tokens.literal\n      }\n    ],\n\n    /* Bold (strong) text\n     * The parser returns to the \"start\" state when reaching \"**\" */\n    \"bold\": [\n      {\n        token : tokens.bold,\n        regex : \"\\\\S\\\\*\\\\*\" + endStringSuffix,\n        next  : \"start\"\n      },\n      {\n        defaultToken: tokens.bold\n      }\n    ],\n\n    /* Italic (emphasis) text\n     * The parser returns to the \"start\" state when reaching \"*\" */\n    \"italic\": [\n      {\n        token : tokens.italic,\n        regex : \"\\\\S\\\\*\" + endStringSuffix,\n        next  : \"start\"\n      },\n      {\n        defaultToken: tokens.italic\n      }\n    ],\n\n    /* Explicit role/class text or link anchor definition\n     * The parser returns to the \"start\" state when reaching \"`\" */\n    \"entity\": [\n      {\n        token : tokens.entity,\n        regex : \"\\\\S`\" + endStringSuffix,\n        next  : \"start\"\n      },\n      {\n        defaultToken: tokens.entity\n      }\n    ],\n\n    /* Link reference\n     * The parser returns to the \"start\" state when reaching \"`_\" or \"`__\" */\n    \"link\": [\n      {\n        token : tokens.link,\n        regex : \"\\\\S`__?\" + endStringSuffix,\n        next  : \"start\"\n      },\n      {\n        defaultToken: tokens.link\n      }\n    ],\n\n    /* Comment block.\n     * The parser returns to the \"start\" state when reaching the first\n     * non-empty line that does not start with at least one space. */\n    \"comment\": [\n      {\n        token : tokens.comment,\n        regex : \"^ +.+$\",\n        next : \"comment\"\n      },\n      {\n        token : tokens.comment,\n        regex : '^$',\n        next: \"comment\"\n      },\n      {\n        token : \"empty\",\n        regex : \"\",\n        next : \"start\"\n      }\n    ]\n  };\n};\noop.inherits(RSTHighlightRules, TextHighlightRules);\n\nexports.RSTHighlightRules = RSTHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/ruby.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar RubyHighlightRules = require(\"./ruby_highlight_rules\").RubyHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = RubyHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n\n    this.lineCommentStart = \"#\";\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            var startingClassOrMethod = line.match(/^\\s*(class|def|module)\\s.*$/);\n            var startingDoBlock = line.match(/.*do(\\s*|\\s+\\|.*\\|\\s*)$/);\n            var startingConditional = line.match(/^\\s*(if|else|when)\\s*/);\n            if (match || startingClassOrMethod || startingDoBlock || startingConditional) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return /^\\s+(end|else)$/.test(line + input) || this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, session, row) {\n        var line = session.getLine(row);\n        if (/}/.test(line))\n            return this.$outdent.autoOutdent(session, row);\n        var indent = this.$getIndent(line);\n        var prevLine = session.getLine(row - 1);\n        var prevIndent = this.$getIndent(prevLine);\n        var tab = session.getTabString();\n        if (prevIndent.length <= indent.length) {\n            if (indent.slice(-tab.length) == tab)\n                session.remove(new Range(row, indent.length-tab.length, row, indent.length));\n        }\n    };\n\n    this.$id = \"ace/mode/ruby\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/ruby_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\n// exports is for Haml\nvar constantOtherSymbol = exports.constantOtherSymbol = {\n    token : \"constant.other.symbol.ruby\", // symbol\n    regex : \"[:](?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?\"\n};\n\nvar qString = exports.qString = {\n    token : \"string\", // single line\n    regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n};\n\nvar qqString = exports.qqString = {\n    token : \"string\", // single line\n    regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n};\n\nvar tString = exports.tString = {\n    token : \"string\", // backtick string\n    regex : \"[`](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[`]\"\n};\n\nvar constantNumericHex = exports.constantNumericHex = {\n    token : \"constant.numeric\", // hex\n    regex : \"0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_(?=[0-9a-fA-F]))*\\\\b\"\n};\n\nvar constantNumericFloat = exports.constantNumericFloat = {\n    token : \"constant.numeric\", // float\n    regex : \"[+-]?\\\\d(?:\\\\d|_(?=\\\\d))*(?:(?:\\\\.\\\\d(?:\\\\d|_(?=\\\\d))*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n};\n\nvar instanceVariable = exports.instanceVariable = {\n    token : \"variable.instance\", // instance variable\n    regex : \"@{1,2}[a-zA-Z_\\\\d]+\"\n};\n\nvar RubyHighlightRules = function() {\n\n    var builtinFunctions = (\n        \"abort|Array|assert|assert_equal|assert_not_equal|assert_same|assert_not_same|\" +\n        \"assert_nil|assert_not_nil|assert_match|assert_no_match|assert_in_delta|assert_throws|\" +\n        \"assert_raise|assert_nothing_raised|assert_instance_of|assert_kind_of|assert_respond_to|\" +\n        \"assert_operator|assert_send|assert_difference|assert_no_difference|assert_recognizes|\" +\n        \"assert_generates|assert_response|assert_redirected_to|assert_template|assert_select|\" +\n        \"assert_select_email|assert_select_rjs|assert_select_encoded|css_select|at_exit|\" +\n        \"attr|attr_writer|attr_reader|attr_accessor|attr_accessible|autoload|binding|block_given?|callcc|\" +\n        \"caller|catch|chomp|chomp!|chop|chop!|defined?|delete_via_redirect|eval|exec|exit|\" +\n        \"exit!|fail|Float|flunk|follow_redirect!|fork|form_for|form_tag|format|gets|global_variables|gsub|\" +\n        \"gsub!|get_via_redirect|host!|https?|https!|include|Integer|lambda|link_to|\" +\n        \"link_to_unless_current|link_to_function|link_to_remote|load|local_variables|loop|open|open_session|\" +\n        \"p|print|printf|proc|putc|puts|post_via_redirect|put_via_redirect|raise|rand|\" +\n        \"raw|readline|readlines|redirect?|request_via_redirect|require|scan|select|\" +\n        \"set_trace_func|sleep|split|sprintf|srand|String|stylesheet_link_tag|syscall|system|sub|sub!|test|\" +\n        \"throw|trace_var|trap|untrace_var|atan2|cos|exp|frexp|ldexp|log|log10|sin|sqrt|tan|\" +\n        \"render|javascript_include_tag|csrf_meta_tag|label_tag|text_field_tag|submit_tag|check_box_tag|\" +\n        \"content_tag|radio_button_tag|text_area_tag|password_field_tag|hidden_field_tag|\" +\n        \"fields_for|select_tag|options_for_select|options_from_collection_for_select|collection_select|\" +\n        \"time_zone_select|select_date|select_time|select_datetime|date_select|time_select|datetime_select|\" +\n        \"select_year|select_month|select_day|select_hour|select_minute|select_second|file_field_tag|\" +\n        \"file_field|respond_to|skip_before_filter|around_filter|after_filter|verify|\" +\n        \"protect_from_forgery|rescue_from|helper_method|redirect_to|before_filter|\" +\n        \"send_data|send_file|validates_presence_of|validates_uniqueness_of|validates_length_of|\" +\n        \"validates_format_of|validates_acceptance_of|validates_associated|validates_exclusion_of|\" +\n        \"validates_inclusion_of|validates_numericality_of|validates_with|validates_each|\" +\n        \"authenticate_or_request_with_http_basic|authenticate_or_request_with_http_digest|\" +\n        \"filter_parameter_logging|match|get|post|resources|redirect|scope|assert_routing|\" +\n        \"translate|localize|extract_locale_from_tld|caches_page|expire_page|caches_action|expire_action|\" +\n        \"cache|expire_fragment|expire_cache_for|observe|cache_sweeper|\" +\n        \"has_many|has_one|belongs_to|has_and_belongs_to_many\"\n    );\n\n    var keywords = (\n        \"alias|and|BEGIN|begin|break|case|class|def|defined|do|else|elsif|END|end|ensure|\" +\n        \"__FILE__|finally|for|gem|if|in|__LINE__|module|next|not|or|private|protected|public|\" +\n        \"redo|rescue|retry|return|super|then|undef|unless|until|when|while|yield\"\n    );\n\n    var buildinConstants = (\n        \"true|TRUE|false|FALSE|nil|NIL|ARGF|ARGV|DATA|ENV|RUBY_PLATFORM|RUBY_RELEASE_DATE|\" +\n        \"RUBY_VERSION|STDERR|STDIN|STDOUT|TOPLEVEL_BINDING\"\n    );\n\n    var builtinVariables = (\n        \"$DEBUG|$defout|$FILENAME|$LOAD_PATH|$SAFE|$stdin|$stdout|$stderr|$VERBOSE|\" +\n        \"$!|root_url|flash|session|cookies|params|request|response|logger|self\"\n    );\n\n    var keywordMapper = this.$keywords = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants,\n        \"variable.language\": builtinVariables,\n        \"support.function\": builtinFunctions,\n        \"invalid.deprecated\": \"debugger\" // TODO is this a remnant from js mode?\n    }, \"identifier\");\n\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"#.*$\"\n            }, {\n                token : \"comment\", // multi line comment\n                regex : \"^=begin(?:$|\\\\s.*$)\",\n                next : \"comment\"\n            }, {\n                token : \"string.regexp\",\n                regex : \"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"\n            },\n\n            [{\n                regex: \"[{}]\", onMatch: function(val, state, stack) {\n                    this.next = val == \"{\" ? this.nextState : \"\";\n                    if (val == \"{\" && stack.length) {\n                        stack.unshift(\"start\", state);\n                        return \"paren.lparen\";\n                    }\n                    if (val == \"}\" && stack.length) {\n                        stack.shift();\n                        this.next = stack.shift();\n                        if (this.next.indexOf(\"string\") != -1)\n                            return \"paren.end\";\n                    }\n                    return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n                },\n                nextState: \"start\"\n            }, {\n                token : \"string.start\",\n                regex : /\"/,\n                push  : [{\n                    token : \"constant.language.escape\",\n                    regex : /\\\\(?:[nsrtvfbae'\"\\\\]|c.|C-.|M-.(?:\\\\C-.)?|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4})/\n                }, {\n                    token : \"paren.start\",\n                    regex : /#{/,\n                    push  : \"start\"\n                }, {\n                    token : \"string.end\",\n                    regex : /\"/,\n                    next  : \"pop\"\n                }, {\n                    defaultToken: \"string\"\n                }]\n            }, {\n                token : \"string.start\",\n                regex : /`/,\n                push  : [{\n                    token : \"constant.language.escape\",\n                    regex : /\\\\(?:[nsrtvfbae'\"\\\\]|c.|C-.|M-.(?:\\\\C-.)?|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4})/\n                }, {\n                    token : \"paren.start\",\n                    regex : /#{/,\n                    push  : \"start\"\n                }, {\n                    token : \"string.end\",\n                    regex : /`/,\n                    next  : \"pop\"\n                }, {\n                    defaultToken: \"string\"\n                }]\n            }, {\n                token : \"string.start\",\n                regex : /'/,\n                push  : [{\n                    token : \"constant.language.escape\",\n                    regex : /\\\\['\\\\]/\n                },  {\n                    token : \"string.end\",\n                    regex : /'/,\n                    next  : \"pop\"\n                }, {\n                    defaultToken: \"string\"\n                }]\n            }],\n            // TODO: add support for %[QqxWwrs][{[(]\n\n            {\n                token : \"text\", // namespaces aren't symbols\n                regex : \"::\"\n            }, {\n                token : \"variable.instance\", // instance variable\n                regex : \"@{1,2}[a-zA-Z_\\\\d]+\"\n            }, {\n                token : \"support.class\", // class name\n                regex : \"[A-Z][a-zA-Z_\\\\d]+\"\n            },\n\n            constantOtherSymbol,\n            constantNumericHex,\n            constantNumericFloat,\n\n            {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false)\\\\b\"\n            }, {\n                token : keywordMapper,\n                // TODO: Unicode escape sequences\n                // TODO: Unicode identifiers\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token : \"punctuation.separator.key-value\",\n                regex : \"=>\"\n            }, {\n                stateName: \"heredoc\",\n                onMatch : function(value, currentState, stack) {\n                    var next = value[2] == '-' ? \"indentedHeredoc\" : \"heredoc\";\n                    var tokens = value.split(this.splitRegex);\n                    stack.push(next, tokens[3]);\n                    return [\n                        {type:\"constant\", value: tokens[1]},\n                        {type:\"string\", value: tokens[2]},\n                        {type:\"support.class\", value: tokens[3]},\n                        {type:\"string\", value: tokens[4]}\n                    ];\n                },\n                regex : \"(<<-?)(['\\\"`]?)([\\\\w]+)(['\\\"`]?)\",\n                rules: {\n                    heredoc: [{\n                        onMatch:  function(value, currentState, stack) {\n                            if (value === stack[1]) {\n                                stack.shift();\n                                stack.shift();\n                                this.next = stack[0] || \"start\";\n                                return \"support.class\";\n                            }\n                            this.next = \"\";\n                            return \"string\";\n                        },\n                        regex: \".*$\",\n                        next: \"start\"\n                    }],\n                    indentedHeredoc: [{\n                        token: \"string\",\n                        regex: \"^ +\"\n                    }, {\n                        onMatch:  function(value, currentState, stack) {\n                            if (value === stack[1]) {\n                                stack.shift();\n                                stack.shift();\n                                this.next = stack[0] || \"start\";\n                                return \"support.class\";\n                            }\n                            this.next = \"\";\n                            return \"string\";\n                        },\n                        regex: \".*$\",\n                        next: \"start\"\n                    }]\n                }\n            }, {\n                regex : \"$\",\n                token : \"empty\",\n                next : function(currentState, stack) {\n                    if (stack[0] === \"heredoc\" || stack[0] === \"indentedHeredoc\")\n                        return stack[0];\n                    return currentState;\n                }\n            }, {\n               token : \"string.character\",\n               regex : \"\\\\B\\\\?.\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"^=end(?:$|\\\\s.*$)\",\n                next : \"start\"\n            }, {\n                token : \"comment\", // comment spanning whole line\n                regex : \".+\"\n            }\n        ]\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(RubyHighlightRules, TextHighlightRules);\n\nexports.RubyHighlightRules = RubyHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/ruby_test.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\nif (typeof process !== \"undefined\") {\n    require(\"amd-loader\");\n}\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar EditSession = require(\"../edit_session\").EditSession;\nvar Mode = require(\"./ruby\").Mode;\nvar assert = require(\"../test/assertions\");\n\nmodule.exports = {\n    setUp : function() {\n        this.mode = new Mode();\n    },\n\n    \"test getNextLineIndent\": function() {\n        assert.equal(this.mode.getNextLineIndent(\"start\", \"class Foo\", \"  \"), \"  \");\n        assert.equal(this.mode.getNextLineIndent(\"start\", \"  def thing(wut)\", \"  \"), \"    \");\n        assert.equal(this.mode.getNextLineIndent(\"start\", \"  fork do\", \"  \"), \"    \");\n        assert.equal(this.mode.getNextLineIndent(\"start\", \"  fork do |wut| \", \"  \"), \"    \");\n        assert.equal(this.mode.getNextLineIndent(\"start\", \"  something = :ruby\", \"  \"), \"  \");\n        assert.equal(this.mode.getNextLineIndent(\"start\", \"  if something == 3\", \"  \"), \"    \");\n        assert.equal(this.mode.getNextLineIndent(\"start\", \"  else\", \"  \"), \"    \");\n    },\n\n    \"test: checkOutdent\": function() {\n        assert.ok(this.mode.checkOutdent(\"start\", \"        en\", \"d\"));\n        assert.ok(this.mode.checkOutdent(\"start\", \"        els\", \"e\"));\n        assert.ok(this.mode.checkOutdent(\"start\", \"        \", \"}\"));\n        assert.equal(this.mode.checkOutdent(\"start\", \"  end\", \"\\n\"), false);\n        assert.equal(this.mode.checkOutdent(\"start\", \"foo = ba\", \"r\"), false);\n    },\n\n    \"test: auto outdent\" : function() {\n        var session = new EditSession([\"class Phil\", \"  Foo = 'bar'\", \"  end\"]);\n        this.mode.autoOutdent(\"start\", session, 2);\n        assert.equal(\"  end\", session.getLine(2));\n    }\n\n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main) {\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n}\n"
  },
  {
    "path": "lib/ace/mode/rust.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar RustHighlightRules = require(\"./rust_highlight_rules\").RustHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = RustHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\", nestable: true};\n    this.$quotes = { '\"': '\"' };\n    this.$id = \"ace/mode/rust\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/rust_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/* This file was autogenerated from https://raw.github.com/dbp/sublime-rust/master/Rust.tmLanguage (uuid: ) */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar stringEscape = /\\\\(?:[nrt0'\"\\\\]|x[\\da-fA-F]{2}|u\\{[\\da-fA-F]{6}\\})/.source;\nvar RustHighlightRules = function() {\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = { start:\n       [ { token: 'variable.other.source.rust',\n           // `(?![\\\\\\'])` to keep a lifetime name highlighting from continuing one character\n           // past the name. The end `\\'` will block this from matching for a character like\n           // `'a'` (it should have character highlighting, not variable highlighting).\n           regex: '\\'[a-zA-Z_][a-zA-Z0-9_]*(?![\\\\\\'])' },\n         { token: 'string.quoted.single.source.rust',\n           regex: \"'(?:[^'\\\\\\\\]|\" + stringEscape + \")'\" },\n         {\n            stateName: \"bracketedComment\",\n            onMatch : function(value, currentState, stack){\n                stack.unshift(this.next, value.length - 1, currentState);\n                return \"string.quoted.raw.source.rust\";\n            },\n            regex : /r#*\"/,\n            next  : [\n                {\n                    onMatch : function(value, currentState, stack) {\n                        var token = \"string.quoted.raw.source.rust\";\n                        if (value.length >= stack[1]) {\n                            if (value.length > stack[1])\n                                token = \"invalid\";\n                            stack.shift();\n                            stack.shift();\n                            this.next = stack.shift();\n                        } else {\n                            this.next = \"\";\n                        }\n                        return token;\n                    },\n                    regex : /\"#*/,\n                    next  : \"start\"\n                }, {\n                    defaultToken : \"string.quoted.raw.source.rust\"\n                }\n            ]\n         },\n         { token: 'string.quoted.double.source.rust',\n           regex: '\"',\n           push: \n            [ { token: 'string.quoted.double.source.rust',\n                regex: '\"',\n                next: 'pop' },\n              { token: 'constant.character.escape.source.rust',\n                regex: stringEscape },\n              { defaultToken: 'string.quoted.double.source.rust' } ] },\n         { token: [ 'keyword.source.rust', 'text', 'entity.name.function.source.rust' ],\n           regex: '\\\\b(fn)(\\\\s+)([a-zA-Z_][a-zA-Z0-9_]*)' },\n         { token: 'support.constant', regex: '\\\\b[a-zA-Z_][\\\\w\\\\d]*::' },\n         { token: 'keyword.source.rust',\n           regex: '\\\\b(?:abstract|alignof|as|become|box|break|catch|continue|const|crate|default|do|dyn|else|enum|extern|for|final|if|impl|in|let|loop|macro|match|mod|move|mut|offsetof|override|priv|proc|pub|pure|ref|return|self|sizeof|static|struct|super|trait|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\\\\b' },\n         { token: 'storage.type.source.rust',\n           regex: '\\\\b(?:Self|isize|usize|char|bool|u8|u16|u32|u64|u128|f16|f32|f64|i8|i16|i32|i64|i128|str|option|either|c_float|c_double|c_void|FILE|fpos_t|DIR|dirent|c_char|c_schar|c_uchar|c_short|c_ushort|c_int|c_uint|c_long|c_ulong|size_t|ptrdiff_t|clock_t|time_t|c_longlong|c_ulonglong|intptr_t|uintptr_t|off_t|dev_t|ino_t|pid_t|mode_t|ssize_t)\\\\b' },\n         { token: 'variable.language.source.rust', regex: '\\\\bself\\\\b' },\n         \n         { token: 'comment.line.doc.source.rust',\n           regex: '//!.*$' },\n         { token: 'comment.line.double-dash.source.rust',\n           regex: '//.*$' },\n         { token: 'comment.start.block.source.rust',\n           regex: '/\\\\*',\n           stateName: 'comment',\n           push: \n            [ { token: 'comment.start.block.source.rust',\n                regex: '/\\\\*',\n                push: 'comment' },\n              { token: 'comment.end.block.source.rust',\n                regex: '\\\\*/',\n                next: 'pop' },\n              { defaultToken: 'comment.block.source.rust' } ] },\n         \n         { token: 'keyword.operator',\n         // `[*/](?![*/])=?` is separated because `//` and `/* */` become comments and must be\n         // guarded against. This states either `*` or `/` may be matched as long as the match\n         // it isn't followed by either of the two. An `=` may be on the end.\n           regex: /\\$|[-=]>|[-+%^=!&|<>]=?|[*/](?![*/])=?/ },\n         { token : \"punctuation.operator\", regex : /[?:,;.]/ },\n         { token : \"paren.lparen\", regex : /[\\[({]/ },\n         { token : \"paren.rparen\", regex : /[\\])}]/ },\n         { token: 'constant.language.source.rust',\n           regex: '\\\\b(?:true|false|Some|None|Ok|Err)\\\\b' },\n         { token: 'support.constant.source.rust',\n           regex: '\\\\b(?:EXIT_FAILURE|EXIT_SUCCESS|RAND_MAX|EOF|SEEK_SET|SEEK_CUR|SEEK_END|_IOFBF|_IONBF|_IOLBF|BUFSIZ|FOPEN_MAX|FILENAME_MAX|L_tmpnam|TMP_MAX|O_RDONLY|O_WRONLY|O_RDWR|O_APPEND|O_CREAT|O_EXCL|O_TRUNC|S_IFIFO|S_IFCHR|S_IFBLK|S_IFDIR|S_IFREG|S_IFMT|S_IEXEC|S_IWRITE|S_IREAD|S_IRWXU|S_IXUSR|S_IWUSR|S_IRUSR|F_OK|R_OK|W_OK|X_OK|STDIN_FILENO|STDOUT_FILENO|STDERR_FILENO)\\\\b' },\n         { token: 'meta.preprocessor.source.rust',\n           regex: '\\\\b\\\\w\\\\(\\\\w\\\\)*!|#\\\\[[\\\\w=\\\\(\\\\)_]+\\\\]\\\\b' },\n         { token: 'constant.numeric.source.rust',\n           regex: /\\b(?:0x[a-fA-F0-9_]+|0o[0-7_]+|0b[01_]+|[0-9][0-9_]*(?!\\.))(?:[iu](?:size|8|16|32|64|128))?\\b/ },\n         { token: 'constant.numeric.source.rust',\n           regex: /\\b(?:[0-9][0-9_]*)(?:\\.[0-9][0-9_]*)?(?:[Ee][+-][0-9][0-9_]*)?(?:f32|f64)?\\b/ } ] };\n    \n    this.normalizeRules();\n};\n\nRustHighlightRules.metaData = { fileTypes: [ 'rs', 'rc' ],\n      foldingStartMarker: '^.*\\\\bfn\\\\s*(\\\\w+\\\\s*)?\\\\([^\\\\)]*\\\\)(\\\\s*\\\\{[^\\\\}]*)?\\\\s*$',\n      foldingStopMarker: '^\\\\s*\\\\}',\n      name: 'Rust',\n      scopeName: 'source.rust' };\n\n\noop.inherits(RustHighlightRules, TextHighlightRules);\n\nexports.RustHighlightRules = RustHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/sass.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar SassHighlightRules = require(\"./sass_highlight_rules\").SassHighlightRules;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = SassHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {   \n    this.lineCommentStart = \"//\";\n    this.$id = \"ace/mode/sass\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n"
  },
  {
    "path": "lib/ace/mode/sass_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar ScssHighlightRules = require(\"./scss_highlight_rules\").ScssHighlightRules;\n\nvar SassHighlightRules = function() {\n    ScssHighlightRules.call(this);\n    var start = this.$rules.start;\n    if (start[1].token == \"comment\") {\n        start.splice(1, 1, {\n            onMatch: function(value, currentState, stack) {\n                stack.unshift(this.next, -1, value.length - 2, currentState);\n                return \"comment\";\n            },\n            regex: /^\\s*\\/\\*/,\n            next: \"comment\"\n        }, {\n            token: \"error.invalid\",\n            regex: \"/\\\\*|[{;}]\"\n        }, {\n            token: \"support.type\",\n            regex: /^\\s*:[\\w\\-]+\\s/\n        });\n        \n        this.$rules.comment = [\n            {regex: /^\\s*/, onMatch: function(value, currentState, stack) {\n                if (stack[1] === -1)\n                    stack[1] = Math.max(stack[2], value.length - 1);\n                if (value.length <= stack[1]) {\n                    /*shift3x*/stack.shift();stack.shift();stack.shift();\n                    this.next = stack.shift();\n                    return \"text\";\n                } else {\n                    this.next = \"\";\n                    return \"comment\";\n                }\n            }, next: \"start\"},\n            {defaultToken: \"comment\"}\n        ];\n    }\n};\n\noop.inherits(SassHighlightRules, ScssHighlightRules);\n\nexports.SassHighlightRules = SassHighlightRules;\n\n});\n"
  },
  {
    "path": "lib/ace/mode/scad.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar scadHighlightRules = require(\"./scad_highlight_rules\").scadHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = scadHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/scad\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/scad_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar scadHighlightRules = function() {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"this\",\n        \"keyword\": \"module|if|else|for\",\n        \"constant.language\": \"NULL\"\n    }, \"identifier\");\n\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // multi line string start\n                regex : '[\"].*\\\\\\\\$',\n                next : \"qqstring\"\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"string\", // multi line string start\n                regex : \"['].*\\\\\\\\$\",\n                next : \"qstring\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n              token : \"constant\", // <CONSTANT>\n              regex : \"<[a-zA-Z0-9.]+>\"\n            }, {\n              token : \"keyword\", // pre-compiler directivs\n              regex : \"(?:use|include)\"\n            }, {\n                token : keywordMapper,\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|new|delete|typeof|void)\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"string\",\n                regex : '(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : '.+'\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"string\",\n                regex : \"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : '.+'\n            }\n        ]\n    };\n    \n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n};\n\noop.inherits(scadHighlightRules, TextHighlightRules);\n\nexports.scadHighlightRules = scadHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/scala.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar ScalaHighlightRules = require(\"./scala_highlight_rules\").ScalaHighlightRules;\n\nvar Mode = function() {\n    JavaScriptMode.call(this);\n    this.HighlightRules = ScalaHighlightRules;\n};\noop.inherits(Mode, JavaScriptMode);\n\n(function() {\n\n    this.createWorker = function(session) {\n        return null;\n    };\n\n    this.$id = \"ace/mode/scala\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/scala_highlight_rules.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar ScalaHighlightRules = function() {\n\n    var keywords = (\n            \"case|default|do|else|for|if|match|while|throw|return|try|trye|catch|finally|yield|\" +\n            \"abstract|class|def|extends|final|forSome|implicit|implicits|import|lazy|new|object|null|\" +\n            \"override|package|private|protected|sealed|super|this|trait|type|val|var|with|\" +\n            \"assert|assume|require|print|println|printf|readLine|readBoolean|readByte|readShort|\" + // package scala\n            \"readChar|readInt|readLong|readFloat|readDouble\" // package scala\n    );\n\n    var buildinConstants = (\"true|false\");\n\n    var langClasses = (\n        \"AbstractMethodError|AssertionError|ClassCircularityError|\"+\n        \"ClassFormatError|Deprecated|EnumConstantNotPresentException|\"+\n        \"ExceptionInInitializerError|IllegalAccessError|\"+\n        \"IllegalThreadStateException|InstantiationError|InternalError|\"+\n\n        \"NegativeArraySizeException|NoSuchFieldError|Override|Process|\"+\n        \"ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|\"+\n        \"SuppressWarnings|TypeNotPresentException|UnknownError|\"+\n        \"UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|\"+\n        \"InstantiationException|IndexOutOfBoundsException|\"+\n        \"ArrayIndexOutOfBoundsException|CloneNotSupportedException|\"+\n        \"NoSuchFieldException|IllegalArgumentException|NumberFormatException|\"+\n        \"SecurityException|Void|InheritableThreadLocal|IllegalStateException|\"+\n        \"InterruptedException|NoSuchMethodException|IllegalAccessException|\"+\n        \"UnsupportedOperationException|Enum|StrictMath|Package|Compiler|\"+\n        \"Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|\"+\n        \"NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|\"+\n        \"NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|\"+\n        \"Character|Boolean|StackTraceElement|Appendable|StringBuffer|\"+\n        \"Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|\"+\n        \"StackOverflowError|OutOfMemoryError|VirtualMachineError|\"+\n        \"ArrayStoreException|ClassCastException|LinkageError|\"+\n        \"NoClassDefFoundError|ClassNotFoundException|RuntimeException|\"+\n        \"Exception|ThreadDeath|Error|Throwable|System|ClassLoader|\"+\n        \"Cloneable|Class|CharSequence|Comparable|String|Object|\" +\n        \"Unit|Any|AnyVal|AnyRef|Null|ScalaObject|Singleton|Seq|Iterable|List|\" +\n        \"Option|Array|Char|Byte|Int|Long|Nothing|\" +\n\n        \"App|Application|BufferedIterator|BigDecimal|BigInt|Console|Either|\" +\n        \"Enumeration|Equiv|Fractional|Function|IndexedSeq|Integral|Iterator|\" +\n        \"Map|Numeric|Nil|NotNull|Ordered|Ordering|PartialFunction|PartialOrdering|\" +\n        \"Product|Proxy|Range|Responder|Seq|Serializable|Set|Specializable|Stream|\" +\n        \"StringContext|Symbol|Traversable|TraversableOnce|Tuple|Vector|Pair|Triple\"\n\n\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"this\",\n        \"keyword\": keywords,\n        \"support.function\": langClasses,\n        \"constant.language\": buildinConstants\n    }, \"identifier\");\n\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string.regexp\",\n                regex : \"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"\n            }, {\n                token : \"string\",\n                regex : '\"\"\"',\n                next : \"tstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)', // \" strings can't span multiple lines\n                next : \"string\"\n            }, {\n                token : \"symbol.constant\", // single line\n                regex : \"'[\\\\w\\\\d_]+\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false)\\\\b\"\n            }, {\n                token : keywordMapper,\n                // TODO: Unicode escape sequences\n                // TODO: Unicode identifiers\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ],\n        \"string\" : [\n            {\n                token : \"escape\",\n                regex : '\\\\\\\\\"'\n            }, {\n                token : \"string\",\n                regex : '\"',\n                next : \"start\"\n            }, {\n                token : \"string.invalid\",\n                regex : '[^\"\\\\\\\\]*$',\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : '[^\"\\\\\\\\]+'\n            }\n        ],\n        \"tstring\" : [\n            {\n                token : \"string\",\n                regex : '\"{3,5}',\n                next : \"start\"\n            }, {\n                defaultToken : \"string\"\n            }\n        ]\n    };\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n};\n\noop.inherits(ScalaHighlightRules, TextHighlightRules);\n\nexports.ScalaHighlightRules = ScalaHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/scheme.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n *\n * Contributor(s):\n * \n * NalaGinrut@gmail.com\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar SchemeHighlightRules = require(\"./scheme_highlight_rules\").SchemeHighlightRules;\nvar MatchingParensOutdent = require(\"./matching_parens_outdent\").MatchingParensOutdent;\n\nvar Mode = function() {\n    this.HighlightRules = SchemeHighlightRules;\n\tthis.$outdent = new MatchingParensOutdent();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n       \n    this.lineCommentStart = \";\";\n    this.minorIndentFunctions = [\"define\", \"lambda\", \"define-macro\", \"define-syntax\", \"syntax-rules\", \"define-record-type\", \"define-structure\"];\n\n    this.$toIndent = function(str) {\n        return str.split('').map(function(ch) {\n            if (/\\s/.exec(ch)) {\n                return ch;\n            } else {\n                return ' ';\n            }\n        }).join('');\n    };\n\n    this.$calculateIndent = function(line, tab) {\n        var baseIndent = this.$getIndent(line);\n        var delta = 0;\n        var isParen, ch;\n        // Walk back from end of line, find matching braces\n        for (var i = line.length - 1; i >= 0; i--) {\n            ch = line[i];\n            if (ch === '(') {\n                delta--;\n                isParen = true;\n            } else if (ch === '(' || ch === '[' || ch === '{') {\n                delta--;\n                isParen = false;\n            } else if (ch === ')' || ch === ']' || ch === '}') {\n                delta++;\n            }\n            if (delta < 0) {\n                break;\n            }\n        }\n        if (delta < 0 && isParen) {\n            // Were more brackets opened than closed and was a ( left open?\n            i += 1;\n            var iBefore = i;\n            var fn = '';\n            while (true) {\n                ch = line[i];\n                if (ch === ' ' || ch === '\\t') {\n                    if(this.minorIndentFunctions.indexOf(fn) !== -1) {\n                        return this.$toIndent(line.substring(0, iBefore - 1) + tab);\n                    } else {\n                        return this.$toIndent(line.substring(0, i + 1));\n                    }\n                } else if (ch === undefined) {\n                    return this.$toIndent(line.substring(0, iBefore - 1) + tab);\n                }\n                fn += line[i];\n                i++;\n            }\n        } else if(delta < 0 && !isParen) {\n            // Were more brackets openend than closed and was it not a (?\n            return this.$toIndent(line.substring(0, i+1));\n        } else if(delta > 0) {\n            // Mere more brackets closed than opened? Outdent.\n            baseIndent = baseIndent.substring(0, baseIndent.length - tab.length);\n            return baseIndent;\n        } else {\n            // Were they nicely matched? Just indent like line before.\n            return baseIndent;\n        }\n    };\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$calculateIndent(line, tab);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    \n    this.$id = \"ace/mode/scheme\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/scheme_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n *\n * Contributor(s):\n * \n * NalaGinrut@gmail.com\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar SchemeHighlightRules = function() {\n    var keywordControl = \"case|do|let|loop|if|else|when\";\n    var keywordOperator = \"eq?|eqv?|equal?|and|or|not|null?\";\n    var constantLanguage = \"#t|#f\";\n    var supportFunctions = \"cons|car|cdr|cond|lambda|lambda*|syntax-rules|format|set!|quote|eval|append|list|list?|member?|load\";\n\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword.control\": keywordControl,\n        \"keyword.operator\": keywordOperator,\n        \"constant.language\": constantLanguage,\n        \"support.function\": supportFunctions\n    }, \"identifier\", true);\n\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = \n        {\n    \"start\": [\n        {\n            token : \"comment\",\n            regex : \";.*$\"\n        },\n        {\n            \"token\": [\"storage.type.function-type.scheme\", \"text\", \"entity.name.function.scheme\"],\n            \"regex\": \"(?:\\\\b(?:(define|define-syntax|define-macro))\\\\b)(\\\\s+)((?:\\\\w|\\\\-|\\\\!|\\\\?)*)\"\n        },\n        {\n            \"token\": \"punctuation.definition.constant.character.scheme\",\n            \"regex\": \"#:\\\\S+\"\n        },\n        {\n            \"token\": [\"punctuation.definition.variable.scheme\", \"variable.other.global.scheme\", \"punctuation.definition.variable.scheme\"],\n            \"regex\": \"(\\\\*)(\\\\S*)(\\\\*)\"\n        },\n        {\n            \"token\" : \"constant.numeric\", // hex\n            \"regex\" : \"#[xXoObB][0-9a-fA-F]+\"\n        }, \n        {\n            \"token\" : \"constant.numeric\", // float\n            \"regex\" : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\"\n        },\n        {\n                \"token\" : keywordMapper,\n                \"regex\" : \"[a-zA-Z_#][a-zA-Z0-9_\\\\-\\\\?\\\\!\\\\*]*\"\n        },\n        {\n            \"token\" : \"string\",\n            \"regex\" : '\"(?=.)',\n            \"next\"  : \"qqstring\"\n        }\n    ],\n    \"qqstring\": [\n        {\n            \"token\": \"constant.character.escape.scheme\",\n            \"regex\": \"\\\\\\\\.\"\n        },\n        {\n            \"token\" : \"string\",\n            \"regex\" : '[^\"\\\\\\\\]+',\n            \"merge\" : true\n        }, {\n            \"token\" : \"string\",\n            \"regex\" : \"\\\\\\\\$\",\n            \"next\"  : \"qqstring\",\n            \"merge\" : true\n        }, {\n            \"token\" : \"string\",\n            \"regex\" : '\"|$',\n            \"next\"  : \"start\",\n            \"merge\" : true\n        }\n    ]\n};\n\n};\n\noop.inherits(SchemeHighlightRules, TextHighlightRules);\n\nexports.SchemeHighlightRules = SchemeHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/scss.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ScssHighlightRules = require(\"./scss_highlight_rules\").ScssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = ScssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n   \n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        // ignore braces in comments\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/scss\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n"
  },
  {
    "path": "lib/ace/mode/scss_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar ScssHighlightRules = function() {\n    \n    var properties = lang.arrayToMap( (function () {\n\n        var browserPrefix = (\"-webkit-|-moz-|-o-|-ms-|-svg-|-pie-|-khtml-\").split(\"|\");\n        \n        var prefixProperties = (\"appearance|background-clip|background-inline-policy|background-origin|\" + \n             \"background-size|binding|border-bottom-colors|border-left-colors|\" + \n             \"border-right-colors|border-top-colors|border-end|border-end-color|\" + \n             \"border-end-style|border-end-width|border-image|border-start|\" + \n             \"border-start-color|border-start-style|border-start-width|box-align|\" + \n             \"box-direction|box-flex|box-flexgroup|box-ordinal-group|box-orient|\" + \n             \"box-pack|box-sizing|column-count|column-gap|column-width|column-rule|\" + \n             \"column-rule-width|column-rule-style|column-rule-color|float-edge|\" + \n             \"font-feature-settings|font-language-override|force-broken-image-icon|\" + \n             \"image-region|margin-end|margin-start|opacity|outline|outline-color|\" + \n             \"outline-offset|outline-radius|outline-radius-bottomleft|\" + \n             \"outline-radius-bottomright|outline-radius-topleft|outline-radius-topright|\" + \n             \"outline-style|outline-width|padding-end|padding-start|stack-sizing|\" + \n             \"tab-size|text-blink|text-decoration-color|text-decoration-line|\" + \n             \"text-decoration-style|transform|transform-origin|transition|\" + \n             \"transition-delay|transition-duration|transition-property|\" + \n             \"transition-timing-function|user-focus|user-input|user-modify|user-select|\" +\n             \"window-shadow|border-radius\").split(\"|\");\n        \n        var properties = (\"azimuth|background-attachment|background-color|background-image|\" +\n            \"background-position|background-repeat|background|border-bottom-color|\" +\n            \"border-bottom-style|border-bottom-width|border-bottom|border-collapse|\" +\n            \"border-color|border-left-color|border-left-style|border-left-width|\" +\n            \"border-left|border-right-color|border-right-style|border-right-width|\" +\n            \"border-right|border-spacing|border-style|border-top-color|\" +\n            \"border-top-style|border-top-width|border-top|border-width|border|bottom|\" +\n            \"box-shadow|box-sizing|caption-side|clear|clip|color|content|counter-increment|\" +\n            \"counter-reset|cue-after|cue-before|cue|cursor|direction|display|\" +\n            \"elevation|empty-cells|float|font-family|font-size-adjust|font-size|\" +\n            \"font-stretch|font-style|font-variant|font-weight|font|height|left|\" +\n            \"letter-spacing|line-height|list-style-image|list-style-position|\" +\n            \"list-style-type|list-style|margin-bottom|margin-left|margin-right|\" +\n            \"margin-top|marker-offset|margin|marks|max-height|max-width|min-height|\" +\n            \"min-width|opacity|orphans|outline-color|\" +\n            \"outline-style|outline-width|outline|overflow|overflow-x|overflow-y|padding-bottom|\" +\n            \"padding-left|padding-right|padding-top|padding|page-break-after|\" +\n            \"page-break-before|page-break-inside|page|pause-after|pause-before|\" +\n            \"pause|pitch-range|pitch|play-during|position|quotes|richness|right|\" +\n            \"size|speak-header|speak-numeral|speak-punctuation|speech-rate|speak|\" +\n            \"stress|table-layout|text-align|text-decoration|text-indent|\" +\n            \"text-shadow|text-transform|top|unicode-bidi|vertical-align|\" +\n            \"visibility|voice-family|volume|white-space|widows|width|word-spacing|\" +\n            \"z-index\").split(\"|\");\n          \n        //The return array     \n        var ret = [];\n        \n        //All prefixProperties will get the browserPrefix in\n        //the begning by join the prefixProperties array with the value of browserPrefix\n        for (var i=0, ln=browserPrefix.length; i<ln; i++) {\n            Array.prototype.push.apply(\n                ret,\n                (( browserPrefix[i] + prefixProperties.join(\"|\" + browserPrefix[i]) ).split(\"|\"))\n            );\n        }\n        \n        //Add also prefixProperties and properties without any browser prefix\n        Array.prototype.push.apply(ret, prefixProperties);\n        Array.prototype.push.apply(ret, properties);\n        \n        return ret;\n        \n    })() );\n    \n\n\n    var functions = lang.arrayToMap(\n        (\"hsl|hsla|rgb|rgba|url|attr|counter|counters|abs|adjust_color|adjust_hue|\" +\n         \"alpha|join|blue|ceil|change_color|comparable|complement|darken|desaturate|\" + \n         \"floor|grayscale|green|hue|if|invert|join|length|lighten|lightness|mix|\" + \n         \"nth|opacify|opacity|percentage|quote|red|round|saturate|saturation|\" +\n         \"scale_color|transparentize|type_of|unit|unitless|unquote\").split(\"|\")\n    );\n\n    var constants = lang.arrayToMap(\n        (\"absolute|all-scroll|always|armenian|auto|baseline|below|bidi-override|\" +\n        \"block|bold|bolder|border-box|both|bottom|break-all|break-word|capitalize|center|\" +\n        \"char|circle|cjk-ideographic|col-resize|collapse|content-box|crosshair|dashed|\" +\n        \"decimal-leading-zero|decimal|default|disabled|disc|\" +\n        \"distribute-all-lines|distribute-letter|distribute-space|\" +\n        \"distribute|dotted|double|e-resize|ellipsis|fixed|georgian|groove|\" +\n        \"hand|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|\" +\n        \"ideograph-alpha|ideograph-numeric|ideograph-parenthesis|\" +\n        \"ideograph-space|inactive|inherit|inline-block|inline|inset|inside|\" +\n        \"inter-ideograph|inter-word|italic|justify|katakana-iroha|katakana|\" +\n        \"keep-all|left|lighter|line-edge|line-through|line|list-item|loose|\" +\n        \"lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|\" +\n        \"medium|middle|move|n-resize|ne-resize|newspaper|no-drop|no-repeat|\" +\n        \"nw-resize|none|normal|not-allowed|nowrap|oblique|outset|outside|\" +\n        \"overline|pointer|progress|relative|repeat-x|repeat-y|repeat|right|\" +\n        \"ridge|row-resize|rtl|s-resize|scroll|se-resize|separate|small-caps|\" +\n        \"solid|square|static|strict|super|sw-resize|table-footer-group|\" +\n        \"table-header-group|tb-rl|text-bottom|text-top|text|thick|thin|top|\" +\n        \"transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|\" +\n        \"vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|\" +\n        \"zero\").split(\"|\")\n    );\n\n    var colors = lang.arrayToMap(\n        (\"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|\" +\n        \"blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|\" +\n        \"chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|\" +\n        \"darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|\" +\n        \"darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|\" +\n        \"darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|\" +\n        \"darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|\" +\n        \"dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|\" +\n        \"ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|\" +\n        \"hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|\" +\n        \"lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|\" +\n        \"lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|\" +\n        \"lightsalmon|lightseagreen|lightskyblue|lightslategray|\" +\n        \"lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|\" +\n        \"magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|\" +\n        \"mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|\" +\n        \"mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|\" +\n        \"moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|\" +\n        \"orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|\" +\n        \"papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|\" +\n        \"red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|\" +\n        \"seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|\" +\n        \"springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|\" +\n        \"wheat|white|whitesmoke|yellow|yellowgreen\").split(\"|\")\n    );\n    \n    var keywords = lang.arrayToMap(\n        (\"@mixin|@extend|@include|@import|@media|@debug|@warn|@if|@for|@each|@while|@else|@font-face|@-webkit-keyframes|if|and|!default|module|def|end|declare\").split(\"|\")\n    );\n    \n    var tags = lang.arrayToMap(\n        (\"a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|\" + \n         \"big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|\" + \n         \"command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|\" + \n         \"figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|\" + \n         \"header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|\" + \n         \"link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|\" + \n         \"option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|\" + \n         \"small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|\" + \n         \"textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp\").split(\"|\")\n    );\n\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    var numRe = \"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";\n\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // multi line string start\n                regex : '[\"].*\\\\\\\\$',\n                next : \"qqstring\"\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"string\", // multi line string start\n                regex : \"['].*\\\\\\\\$\",\n                next : \"qstring\"\n            }, {\n                token : \"constant.numeric\",\n                regex : numRe + \"(?:em|ex|px|cm|mm|in|pt|pc|deg|rad|grad|ms|s|hz|khz|%)\"\n            }, {\n                token : \"constant.numeric\", // hex6 color\n                regex : \"#[a-f0-9]{6}\"\n            }, {\n                token : \"constant.numeric\", // hex3 color\n                regex : \"#[a-f0-9]{3}\"\n            }, {\n                token : \"constant.numeric\",\n                regex : numRe\n            }, {\n                token : [\"support.function\", \"string\", \"support.function\"],\n                regex : \"(url\\\\()(.*)(\\\\))\"\n            }, {\n                token : function(value) {\n                    if (properties.hasOwnProperty(value.toLowerCase()))\n                        return \"support.type\";\n                    if (keywords.hasOwnProperty(value))\n                        return \"keyword\";\n                    else if (constants.hasOwnProperty(value))\n                        return \"constant.language\";\n                    else if (functions.hasOwnProperty(value))\n                        return \"support.function\";\n                    else if (colors.hasOwnProperty(value.toLowerCase()))\n                        return \"support.constant.color\";\n                    else if (tags.hasOwnProperty(value.toLowerCase()))\n                        return \"variable.language\";\n                    else\n                        return \"text\";\n                },\n                regex : \"\\\\-?[@a-z_][@a-z0-9_\\\\-]*\"\n            }, {\n                token : \"variable\",\n                regex : \"[a-z_\\\\-$][a-z0-9_\\\\-$]*\\\\b\"\n            }, {\n                token: \"variable.language\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \":[a-z0-9-_]+\"\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"<|>|<=|>=|==|!=|-|%|#|\\\\+|\\\\$|\\\\+|\\\\*\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                caseInsensitive: true\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"string\",\n                regex : '(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : '.+'\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"string\",\n                regex : \"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : '.+'\n            }\n        ]\n    };\n};\n\noop.inherits(ScssHighlightRules, TextHighlightRules);\n\nexports.ScssHighlightRules = ScssHighlightRules;\n\n});\n"
  },
  {
    "path": "lib/ace/mode/sh.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ShHighlightRules = require(\"./sh_highlight_rules\").ShHighlightRules;\nvar Range = require(\"../range\").Range;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\n\nvar Mode = function() {\n    this.HighlightRules = ShHighlightRules;\n    this.foldingRules = new CStyleFoldMode();\n    this.$behaviour = new CstyleBehaviour();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n   \n    this.lineCommentStart = \"#\";\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[:]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    var outdents = {\n        \"pass\": 1,\n        \"return\": 1,\n        \"raise\": 1,\n        \"break\": 1,\n        \"continue\": 1\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        if (input !== \"\\r\\n\" && input !== \"\\r\" && input !== \"\\n\")\n            return false;\n\n        var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens;\n\n        if (!tokens)\n            return false;\n\n        // ignore trailing comments\n        do {\n            var last = tokens.pop();\n        } while (last && (last.type == \"comment\" || (last.type == \"text\" && last.value.match(/^\\s+$/))));\n\n        if (!last)\n            return false;\n\n        return (last.type == \"keyword\" && outdents[last.value]);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        // outdenting in sh is slightly different because it always applies\n        // to the next line and only of a new line is inserted\n\n        row += 1;\n        var indent = this.$getIndent(doc.getLine(row));\n        var tab = doc.getTabString();\n        if (indent.slice(-tab.length) == tab)\n            doc.remove(new Range(row, indent.length-tab.length, row, indent.length));\n    };\n\n    this.$id = \"ace/mode/sh\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/sh_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar reservedKeywords = exports.reservedKeywords = (\n        '!|{|}|case|do|done|elif|else|'+\n        'esac|fi|for|if|in|then|until|while|'+\n        '&|;|export|local|read|typeset|unset|'+\n        'elif|select|set|function|declare|readonly'\n    );\n\nvar languageConstructs = exports.languageConstructs = (\n    '[|]|alias|bg|bind|break|builtin|'+\n     'cd|command|compgen|complete|continue|'+\n     'dirs|disown|echo|enable|eval|exec|'+\n     'exit|fc|fg|getopts|hash|help|history|'+\n     'jobs|kill|let|logout|popd|printf|pushd|'+\n     'pwd|return|set|shift|shopt|source|'+\n     'suspend|test|times|trap|type|ulimit|'+\n     'umask|unalias|wait'\n);\n\nvar ShHighlightRules = function() {\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": reservedKeywords,\n        \"support.function.builtin\": languageConstructs,\n        \"invalid.deprecated\": \"debugger\"\n    }, \"identifier\");\n\n    var integer = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n    // var integer = \"(?:\" + decimalInteger + \")\";\n\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var exponentFloat = \"(?:(?:\" + pointFloat + \"|\" +  intPart + \")\" + \")\";\n    var floatNumber = \"(?:\" + exponentFloat + \"|\" + pointFloat + \")\";\n    var fileDescriptor = \"(?:&\" + intPart + \")\";\n\n    var variableName = \"[a-zA-Z_][a-zA-Z0-9_]*\";\n    var variable = \"(?:\" + variableName + \"(?==))\";\n\n    var builtinVariable = \"(?:\\\\$(?:SHLVL|\\\\$|\\\\!|\\\\?))\";\n\n    var func = \"(?:\" + variableName + \"\\\\s*\\\\(\\\\))\";\n\n    this.$rules = {\n        \"start\" : [{\n            token : \"constant\",\n            regex : /\\\\./\n        }, {\n            token : [\"text\", \"comment\"],\n            regex : /(^|\\s)(#.*)$/\n        }, {\n            token : \"string.start\",\n            regex : '\"',\n            push : [{\n                token : \"constant.language.escape\",\n                regex : /\\\\(?:[$`\"\\\\]|$)/\n            }, {\n                include : \"variables\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /`/ // TODO highlight `\n            }, {\n                token : \"string.end\",\n                regex : '\"',\n                next: \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            token : \"string\",\n            regex : \"\\\\$'\",\n            push : [{\n                token : \"constant.language.escape\",\n                regex : /\\\\(?:[abeEfnrtv\\\\'\"]|x[a-fA-F\\d]{1,2}|u[a-fA-F\\d]{4}([a-fA-F\\d]{4})?|c.|\\d{1,3})/\n            }, {\n                token : \"string\",\n                regex : \"'\",\n                next: \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        }, {\n            regex : \"<<<\",\n            token : \"keyword.operator\"\n        }, {\n            stateName: \"heredoc\",\n            regex : \"(<<-?)(\\\\s*)(['\\\"`]?)([\\\\w\\\\-]+)(['\\\"`]?)\",\n            onMatch : function(value, currentState, stack) {\n                var next = value[2] == '-' ? \"indentedHeredoc\" : \"heredoc\";\n                var tokens = value.split(this.splitRegex);\n                stack.push(next, tokens[4]);\n                return [\n                    {type:\"constant\", value: tokens[1]},\n                    {type:\"text\", value: tokens[2]},\n                    {type:\"string\", value: tokens[3]},\n                    {type:\"support.class\", value: tokens[4]},\n                    {type:\"string\", value: tokens[5]}\n                ];\n            },\n            rules: {\n                heredoc: [{\n                    onMatch:  function(value, currentState, stack) {\n                        if (value === stack[1]) {\n                            stack.shift();\n                            stack.shift();\n                            this.next = stack[0] || \"start\";\n                            return \"support.class\";\n                        }\n                        this.next = \"\";\n                        return \"string\";\n                    },\n                    regex: \".*$\",\n                    next: \"start\"\n                }],\n                indentedHeredoc: [{\n                    token: \"string\",\n                    regex: \"^\\t+\"\n                }, {\n                    onMatch:  function(value, currentState, stack) {\n                        if (value === stack[1]) {\n                            stack.shift();\n                            stack.shift();\n                            this.next = stack[0] || \"start\";\n                            return \"support.class\";\n                        }\n                        this.next = \"\";\n                        return \"string\";\n                    },\n                    regex: \".*$\",\n                    next: \"start\"\n                }]\n            }\n        }, {\n            regex : \"$\",\n            token : \"empty\",\n            next : function(currentState, stack) {\n                if (stack[0] === \"heredoc\" || stack[0] === \"indentedHeredoc\")\n                    return stack[0];\n                return currentState;\n            }\n        }, {\n            token : [\"keyword\", \"text\", \"text\", \"text\", \"variable\"],\n            regex : /(declare|local|readonly)(\\s+)(?:(-[fixar]+)(\\s+))?([a-zA-Z_][a-zA-Z0-9_]*\\b)/\n        }, {\n            token : \"variable.language\",\n            regex : builtinVariable\n        }, {\n            token : \"variable\",\n            regex : variable\n        }, {\n            include : \"variables\"\n        }, {\n            token : \"support.function\",\n            regex : func\n        }, {\n            token : \"support.function\",\n            regex : fileDescriptor\n        }, {\n            token : \"string\",           // ' string\n            start : \"'\", end : \"'\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : floatNumber\n        }, {\n            token : \"constant.numeric\", // integer\n            regex : integer + \"\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_][a-zA-Z0-9_]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|~|<|>|<=|=>|=|!=|[%&|`]\"\n        }, {\n            token : \"punctuation.operator\",\n            regex : \";\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[\\\\[\\\\(\\\\{]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\]]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\)\\\\}]\",\n            next : \"pop\"\n        }],\n        variables: [{\n            token : \"variable\",\n            regex : /(\\$)(\\w+)/\n        }, {\n            token : [\"variable\", \"paren.lparen\"],\n            regex : /(\\$)(\\()/,\n            push : \"start\"\n        }, {\n            token : [\"variable\", \"paren.lparen\", \"keyword.operator\", \"variable\", \"keyword.operator\"],\n            regex : /(\\$)(\\{)([#!]?)(\\w+|[*@#?\\-$!0_])(:[?+\\-=]?|##?|%%?|,,?\\/|\\^\\^?)?/,\n            push : \"start\"\n        }, {\n            token : \"variable\",\n            regex : /\\$[*@#?\\-$!0_]/\n        }, {\n            token : [\"variable\", \"paren.lparen\"],\n            regex : /(\\$)(\\{)/,\n            push : \"start\"\n        }]\n    };\n    \n    this.normalizeRules();\n};\n\noop.inherits(ShHighlightRules, TextHighlightRules);\n\nexports.ShHighlightRules = ShHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/sjs.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar JSMode = require(\"./javascript\").Mode;\nvar SJSHighlightRules = require(\"./sjs_highlight_rules\").SJSHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = SJSHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, JSMode);\n(function() {\n    // disable jshint\n    this.createWorker = function(session) {\n        return null;\n    };\n    this.$id = \"ace/mode/sjs\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/sjs_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar SJSHighlightRules = function() {\n    var parent = new JavaScriptHighlightRules({noES6: true});\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-6][0-7]?|\" + // oct\n        \"37[0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    var contextAware = function(f) {\n        f.isContextAware = true;\n        return f;\n    };\n\n    var ctxBegin = function(opts) {\n        return {\n            token: opts.token,\n            regex: opts.regex,\n            next: contextAware(function(currentState, stack) {\n                if (stack.length === 0)\n                    stack.unshift(currentState);\n                stack.unshift(opts.next);\n                return opts.next;\n            })\n        };\n    };\n\n    var ctxEnd = function(opts) {\n        return {\n            token: opts.token,\n            regex: opts.regex,\n            next: contextAware(function(currentState, stack) {\n                stack.shift();\n                return stack[0] || \"start\";\n            })\n        };\n    };\n\n    this.$rules = parent.$rules;\n    this.$rules.no_regex = [\n        {\n            token: \"keyword\",\n            regex: \"(waitfor|or|and|collapse|spawn|retract)\\\\b\"\n        },\n        {\n            token: \"keyword.operator\",\n            regex: \"(->|=>|\\\\.\\\\.)\"\n        },\n        {\n            token: \"variable.language\",\n            regex: \"(hold|default)\\\\b\"\n        },\n        ctxBegin({\n            token: \"string\",\n            regex: \"`\",\n            next: \"bstring\"\n        }),\n        ctxBegin({\n            token: \"string\",\n            regex: '\"',\n            next: \"qqstring\"\n        }),\n        ctxBegin({\n            token: \"string\",\n            regex: '\"',\n            next: \"qqstring\"\n        }),\n        {\n            token: [\"paren.lparen\", \"text\", \"paren.rparen\"],\n            regex: \"(\\\\{)(\\\\s*)(\\\\|)\",\n            next: \"block_arguments\"\n        }\n\n    ].concat(this.$rules.no_regex);\n\n    this.$rules.block_arguments = [\n        {\n            token: \"paren.rparen\",\n            regex: \"\\\\|\",\n            next: \"no_regex\"\n        }\n    ].concat(this.$rules.function_arguments);\n\n    this.$rules.bstring = [\n        {\n            token : \"constant.language.escape\",\n            regex : escapedRe\n        },\n        {\n            token : \"string\",\n            regex : \"\\\\\\\\$\",\n            next: \"bstring\"\n        },\n        ctxBegin({\n            token : \"paren.lparen\",\n            regex : \"\\\\$\\\\{\",\n            next: \"string_interp\"\n        }),\n        ctxBegin({\n            token : \"paren.lparen\",\n            regex : \"\\\\$\",\n            next: \"bstring_interp_single\"\n        }),\n        ctxEnd({\n            token : \"string\",\n            regex : \"`\"\n        }),\n        {\n            defaultToken: \"string\"\n        }\n    ];\n    \n    this.$rules.qqstring = [\n        {\n            token : \"constant.language.escape\",\n            regex : escapedRe\n        },\n        {\n            token : \"string\",\n            regex : \"\\\\\\\\$\",\n            next: \"qqstring\"\n        },\n        ctxBegin({\n            token : \"paren.lparen\",\n            regex : \"#\\\\{\",\n            next: \"string_interp\"\n        }),\n        ctxEnd({\n            token : \"string\",\n            regex : '\"'\n        }),\n        {\n            defaultToken: \"string\"\n        }\n    ];\n\n    // collect all context-aware (or stateless), brace-less\n    // states. This gives us most normal highlighting\n    // for use within interpreted contexts\n    // without interfering with context nesting\n    var embeddableRules = [];\n    for (var i=0; i < this.$rules.no_regex.length; i++) {\n        var rule = this.$rules.no_regex[i];\n        var token = String(rule.token);\n        if (token.indexOf('paren') == -1 && (!rule.next || rule.next.isContextAware)) {\n            embeddableRules.push(rule);\n        }\n    }\n\n    this.$rules.string_interp = [\n        ctxEnd({\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }),\n        ctxBegin({\n            token: \"paren.lparen\",\n            regex: '{',\n            next: \"string_interp\"\n        })\n    ].concat(embeddableRules);\n\n    // backtick strings can have single interpolation, which accept\n    // \\w+ followed by an optional set of function call parens\n    this.$rules.bstring_interp_single = [\n        {\n            token: [\"identifier\", \"paren.lparen\"],\n            regex: '(\\\\w+)(\\\\()',\n            next: 'bstring_interp_single_call'\n        },\n        // identifier-only match ends this interp\n        ctxEnd({\n            token : \"identifier\",\n            regex : \"\\\\w*\"\n        })\n    ];\n    \n    // the call part of a bstring_interp_single\n    // is terminated by a close paren `)`, but\n    // can have nested parens.\n    this.$rules.bstring_interp_single_call = [\n        ctxBegin({\n            token: \"paren.lparen\",\n            regex: \"\\\\(\",\n            next: \"bstring_interp_single_call\"\n        }),\n        ctxEnd({\n            token: \"paren.rparen\",\n            regex: \"\\\\)\"\n        })\n    ].concat(embeddableRules);\n};\noop.inherits(SJSHighlightRules, TextHighlightRules);\n\nexports.SJSHighlightRules = SJSHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/smarty.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n  \"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlMode = require(\"./html\").Mode;\nvar SmartyHighlightRules = require(\"./smarty_highlight_rules\").SmartyHighlightRules;\n\nvar Mode = function() {\n    HtmlMode.call(this);\n    this.HighlightRules = SmartyHighlightRules;\n};\n\noop.inherits(Mode, HtmlMode);\n\n(function() {\n    \n    this.$id = \"ace/mode/smarty\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/smarty_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/* This file was autogenerated from https://raw.github.com/amitsnyderman/sublime-smarty/master/Syntaxes/Smarty.tmLanguage (uuid: ) */\n/****************************************************************************************\n * IT MIGHT NOT BE PERFECT ...But it's a good start from an existing *.tmlanguage file. *\n * fileTypes                                                                            *\n ****************************************************************************************/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\n\nvar SmartyHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n    var smartyRules = { start: \n       [ { include: '#comments' },\n         { include: '#blocks' } ],\n      '#blocks': \n       [ { token: 'punctuation.section.embedded.begin.smarty',\n           regex: '\\\\{%?',\n           push: \n            [ { token: 'punctuation.section.embedded.end.smarty',\n                regex: '%?\\\\}',\n                next: 'pop' },\n              { include: '#strings' },\n              { include: '#variables' },\n              { include: '#lang' },\n              { defaultToken: 'source.smarty' } ] } ],\n      '#comments': \n       [ { token: \n            [ 'punctuation.definition.comment.smarty',\n              'comment.block.smarty' ],\n           regex: '(\\\\{%?)(\\\\*)',\n           push: \n            [ { token: 'comment.block.smarty', regex: '\\\\*%?\\\\}', next: 'pop' },\n              { defaultToken: 'comment.block.smarty' } ] } ],\n      '#lang': \n       [ { token: 'keyword.operator.smarty',\n           regex: '(?:!=|!|<=|>=|<|>|===|==|%|&&|\\\\|\\\\|)|\\\\b(?:and|or|eq|neq|ne|gte|gt|ge|lte|lt|le|not|mod)\\\\b' },\n         { token: 'constant.language.smarty',\n           regex: '\\\\b(?:TRUE|FALSE|true|false)\\\\b' },\n         { token: 'keyword.control.smarty',\n           regex: '\\\\b(?:if|else|elseif|foreach|foreachelse|section|switch|case|break|default)\\\\b' },\n         { token: 'variable.parameter.smarty', regex: '\\\\b[a-zA-Z]+=' },\n         { token: 'support.function.built-in.smarty',\n           regex: '\\\\b(?:capture|config_load|counter|cycle|debug|eval|fetch|include_php|include|insert|literal|math|strip|rdelim|ldelim|assign|constant|block|html_[a-z_]*)\\\\b' },\n         { token: 'support.function.variable-modifier.smarty',\n           regex: '\\\\|(?:capitalize|cat|count_characters|count_paragraphs|count_sentences|count_words|date_format|default|escape|indent|lower|nl2br|regex_replace|replace|spacify|string_format|strip_tags|strip|truncate|upper|wordwrap)' } ],\n      '#strings': \n       [ { token: 'punctuation.definition.string.begin.smarty',\n           regex: '\\'',\n           push: \n            [ { token: 'punctuation.definition.string.end.smarty',\n                regex: '\\'',\n                next: 'pop' },\n              { token: 'constant.character.escape.smarty', regex: '\\\\\\\\.' },\n              { defaultToken: 'string.quoted.single.smarty' } ] },\n         { token: 'punctuation.definition.string.begin.smarty',\n           regex: '\"',\n           push: \n            [ { token: 'punctuation.definition.string.end.smarty',\n                regex: '\"',\n                next: 'pop' },\n              { token: 'constant.character.escape.smarty', regex: '\\\\\\\\.' },\n              { defaultToken: 'string.quoted.double.smarty' } ] } ],\n      '#variables': \n       [ { token: \n            [ 'punctuation.definition.variable.smarty',\n              'variable.other.global.smarty' ],\n           regex: '\\\\b(\\\\$)(Smarty\\\\.)' },\n         { token: \n            [ 'punctuation.definition.variable.smarty',\n              'variable.other.smarty' ],\n           regex: '(\\\\$)([a-zA-Z_][a-zA-Z0-9_]*)\\\\b' },\n         { token: [ 'keyword.operator.smarty', 'variable.other.property.smarty' ],\n           regex: '(->)([a-zA-Z_][a-zA-Z0-9_]*)\\\\b' },\n         { token: \n            [ 'keyword.operator.smarty',\n              'meta.function-call.object.smarty',\n              'punctuation.definition.variable.smarty',\n              'variable.other.smarty',\n              'punctuation.definition.variable.smarty' ],\n           regex: '(->)([a-zA-Z_][a-zA-Z0-9_]*)(\\\\()(.*?)(\\\\))' } ] };\n    \n    var smartyStart = smartyRules.start;\n    \n    for (var rule in this.$rules) {\n        this.$rules[rule].unshift.apply(this.$rules[rule], smartyStart);\n    }\n    \n    Object.keys(smartyRules).forEach(function(x) {\n        if (!this.$rules[x])\n            this.$rules[x] = smartyRules[x];\n    }, this);\n    \n    this.normalizeRules();\n};\n\nSmartyHighlightRules.metaData = { fileTypes: [ 'tpl' ],\n      foldingStartMarker: '\\\\{%?',\n      foldingStopMarker: '%?\\\\}',\n      name: 'Smarty',\n      scopeName: 'text.html.smarty' };\n\n\noop.inherits(SmartyHighlightRules, HtmlHighlightRules);\n\nexports.SmartyHighlightRules = SmartyHighlightRules;\n});"
  },
  {
    "path": "lib/ace/mode/snippets.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar SnippetHighlightRules = function() {\n\n    var builtins = \"SELECTION|CURRENT_WORD|SELECTED_TEXT|CURRENT_LINE|LINE_INDEX|\" +\n        \"LINE_NUMBER|SOFT_TABS|TAB_SIZE|FILENAME|FILEPATH|FULLNAME\";\n\n    this.$rules = {\n        \"start\" : [\n            {token:\"constant.language.escape\", regex: /\\\\[\\$}`\\\\]/},\n            {token:\"keyword\", regex: \"\\\\$(?:TM_)?(?:\" + builtins + \")\\\\b\"},\n            {token:\"variable\", regex: \"\\\\$\\\\w+\"},\n            {onMatch: function(value, state, stack) {\n                if (stack[1])\n                    stack[1]++;\n                else\n                    stack.unshift(state, 1);\n                return this.tokenName;\n            }, tokenName: \"markup.list\", regex: \"\\\\${\", next: \"varDecl\"},\n            {onMatch: function(value, state, stack) {\n                if (!stack[1])\n                    return \"text\";\n                stack[1]--;\n                if (!stack[1])\n                    stack.splice(0,2);\n                return this.tokenName;\n            }, tokenName: \"markup.list\", regex: \"}\"},\n            {token: \"doc.comment\", regex:/^\\${2}-{5,}$/}\n        ],\n        \"varDecl\" : [\n            {regex: /\\d+\\b/, token: \"constant.numeric\"},\n            {token:\"keyword\", regex: \"(?:TM_)?(?:\" + builtins + \")\\\\b\"},\n            {token:\"variable\", regex: \"\\\\w+\"},\n            {regex: /:/, token: \"punctuation.operator\", next: \"start\"},\n            {regex: /\\//, token: \"string.regex\", next: \"regexp\"},\n            {regex: \"\", next: \"start\"}\n        ],\n        \"regexp\" : [\n            {regex: /\\\\./, token: \"escape\"},\n            {regex: /\\[/, token: \"regex.start\", next: \"charClass\"},\n            {regex: \"/\", token: \"string.regex\", next: \"format\"},\n            //{\"default\": \"string.regex\"},\n            {\"token\": \"string.regex\", regex:\".\"}\n        ],\n        charClass : [\n            {regex: \"\\\\.\", token: \"escape\"},\n            {regex: \"\\\\]\", token: \"regex.end\", next: \"regexp\"},\n            {\"token\": \"string.regex\", regex:\".\"}\n        ],\n        \"format\" : [\n            {regex: /\\\\[ulULE]/, token: \"keyword\"},\n            {regex: /\\$\\d+/, token: \"variable\"},\n            {regex: \"/[gim]*:?\", token: \"string.regex\", next: \"start\"},\n            // {\"default\": \"string\"},\n            {\"token\": \"string\", regex:\".\"}\n        ]\n    };\n};\noop.inherits(SnippetHighlightRules, TextHighlightRules);\n\nexports.SnippetHighlightRules = SnippetHighlightRules;\n\nvar SnippetGroupHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [\n\t\t\t{token: \"text\", regex: \"^\\\\t\", next: \"sn-start\"},\n\t\t\t{token:\"invalid\", regex: /^ \\s*/},\n            {token:\"comment\", regex: /^#.*/},\n            {token:\"constant.language.escape\", regex: \"^regex \", next: \"regex\"},\n            {token:\"constant.language.escape\", regex: \"^(trigger|endTrigger|name|snippet|guard|endGuard|tabTrigger|key)\\\\b\"}\n        ],\n\t\t\"regex\" : [\n\t\t\t{token:\"text\", regex: \"\\\\.\"},\n\t\t\t{token:\"keyword\", regex: \"/\"},\n\t\t\t{token:\"empty\", regex: \"$\", next: \"start\"}\n\t\t]\n    };\n\tthis.embedRules(SnippetHighlightRules, \"sn-\", [\n\t\t{token: \"text\", regex: \"^\\\\t\", next: \"sn-start\"},\n\t\t{onMatch: function(value, state, stack) {\n\t\t\tstack.splice(stack.length);\n\t\t\treturn this.tokenName;\n\t\t}, tokenName: \"text\", regex: \"^(?!\\t)\", next: \"start\"}\n\t]);\n\t\n};\n\noop.inherits(SnippetGroupHighlightRules, TextHighlightRules);\n\nexports.SnippetGroupHighlightRules = SnippetGroupHighlightRules;\n\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = SnippetGroupHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.$indentWithTabs = true;\n    this.lineCommentStart = \"#\";\n    this.$id = \"ace/mode/snippets\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n\n});\n"
  },
  {
    "path": "lib/ace/mode/soy_template.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlMode = require(\"./html\").Mode;\nvar SoyTemplateHighlightRules = require(\"./soy_template_highlight_rules\").SoyTemplateHighlightRules;\n\nvar Mode = function() {\n    HtmlMode.call(this);\n    this.HighlightRules = SoyTemplateHighlightRules;\n};\noop.inherits(Mode, HtmlMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    this.$id = \"ace/mode/soy_template\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});"
  },
  {
    "path": "lib/ace/mode/soy_template_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/* This file was autogenerated from tm bundles\\SoyTemplate\\Syntaxes\\SoyTemplate.tmLanguage (uuid: ) */\n/****************************************************************************************\n * IT MIGHT NOT BE PERFECT ...But it's a good start from an existing *.tmlanguage file. *\n * fileTypes                                                                            *\n ****************************************************************************************/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\n\nvar SoyTemplateHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    var soyRules = { start: \n       [ { include: '#template' },\n         { include: '#if' },\n         { include: '#comment-line' },\n         { include: '#comment-block' },\n         { include: '#comment-doc' },\n         { include: '#call' },\n         { include: '#css' },\n         { include: '#param' },\n         { include: '#print' },\n         { include: '#msg' },\n         { include: '#for' },\n         { include: '#foreach' },\n         { include: '#switch' },\n         { include: '#tag' },\n         { include: 'text.html.basic' } ],\n      '#call': \n       [ { token: \n            [ 'punctuation.definition.tag.begin.soy',\n              'meta.tag.call.soy' ],\n           regex: '(\\\\{/?)(\\\\s*)(?=call|delcall)',\n           push: \n            [ { token: 'punctuation.definition.tag.end.soy',\n                regex: '\\\\}',\n                next: 'pop' },\n              { include: '#string-quoted-single' },\n              { include: '#string-quoted-double' },\n              { token: ['entity.name.tag.soy', 'variable.parameter.soy'],\n                regex: '(call|delcall)(\\\\s+[\\\\.\\\\w]+)'},\n              { token: \n                 [ 'entity.other.attribute-name.soy',\n                   'text',\n                   'keyword.operator.soy' ],\n                regex: '\\\\b(data)(\\\\s*)(=)' },\n              { defaultToken: 'meta.tag.call.soy' } ] } ],\n      '#comment-line': \n       [ { token: \n            [ 'comment.line.double-slash.soy',\n              'comment.line.double-slash.soy' ],\n           regex: '(//)(.*$)' } ],\n      '#comment-block': \n       [ { token: 'punctuation.definition.comment.begin.soy',\n           regex: '/\\\\*(?!\\\\*)',\n           push: \n            [ { token: 'punctuation.definition.comment.end.soy',\n                regex: '\\\\*/',\n                next: 'pop' },\n              { defaultToken: 'comment.block.soy' } ] } ],\n      '#comment-doc': \n       [ { token: 'punctuation.definition.comment.begin.soy',\n           regex: '/\\\\*\\\\*(?!/)',\n           push: \n            [ { token: 'punctuation.definition.comment.end.soy',\n                regex: '\\\\*/',\n                next: 'pop' },\n              { token: [ 'support.type.soy', 'text', 'variable.parameter.soy' ],\n                regex: '(@param|@param\\\\?)(\\\\s+)(\\\\w+)' },\n              { defaultToken: 'comment.block.documentation.soy' } ] } ],\n      '#css': \n       [ { token: \n            [ 'punctuation.definition.tag.begin.soy',\n              'meta.tag.css.soy',\n              'entity.name.tag.soy' ],\n           regex: '(\\\\{/?)(\\\\s*)(css)\\\\b',\n           push: \n            [ { token: 'punctuation.definition.tag.end.soy',\n                regex: '\\\\}',\n                next: 'pop' },\n              { token: 'support.constant.soy',\n                regex: '\\\\b(?:LITERAL|REFERENCE|BACKEND_SPECIFIC|GOOG)\\\\b' },\n              { defaultToken: 'meta.tag.css.soy' } ] } ],\n      '#for': \n       [ { token: \n            [ 'punctuation.definition.tag.begin.soy',\n              'meta.tag.for.soy',\n              'entity.name.tag.soy' ],\n           regex: '(\\\\{/?)(\\\\s*)(for)\\\\b',\n           push: \n            [ { token: 'punctuation.definition.tag.end.soy',\n                regex: '\\\\}',\n                next: 'pop' },\n              { token: 'keyword.operator.soy', regex: '\\\\bin\\\\b' },\n              { token: 'support.function.soy', regex: '\\\\brange\\\\b' },\n              { include: '#variable' },\n              { include: '#number' },\n              { include: '#primitive' },\n              { defaultToken: 'meta.tag.for.soy' } ] } ],\n      '#foreach': \n       [ { token: \n            [ 'punctuation.definition.tag.begin.soy',\n              'meta.tag.foreach.soy',\n              'entity.name.tag.soy' ],\n           regex: '(\\\\{/?)(\\\\s*)(foreach)\\\\b',\n           push: \n            [ { token: 'punctuation.definition.tag.end.soy',\n                regex: '\\\\}',\n                next: 'pop' },\n              { token: 'keyword.operator.soy', regex: '\\\\bin\\\\b' },\n              { include: '#variable' },\n              { defaultToken: 'meta.tag.foreach.soy' } ] } ],\n      '#function': \n       [ { token: 'support.function.soy',\n           regex: '\\\\b(?:isFirst|isLast|index|hasData|length|keys|round|floor|ceiling|min|max|randomInt)\\\\b' } ],\n      '#if': \n       [ { token: \n            [ 'punctuation.definition.tag.begin.soy',\n              'meta.tag.if.soy',\n              'entity.name.tag.soy' ],\n           regex: '(\\\\{/?)(\\\\s*)(if|elseif)\\\\b',\n           push: \n            [ { token: 'punctuation.definition.tag.end.soy',\n                regex: '\\\\}',\n                next: 'pop' },\n              { include: '#variable' },\n              { include: '#operator' },\n              { include: '#function' },\n              { include: '#string-quoted-single' },\n              { include: '#string-quoted-double' },\n              { defaultToken: 'meta.tag.if.soy' } ] } ],\n      '#namespace': \n       [ { token: [ 'entity.name.tag.soy', 'text', 'variable.parameter.soy' ],\n           regex: '(namespace|delpackage)(\\\\s+)([\\\\w\\\\.]+)' } ],\n      '#number': [ { token: 'constant.numeric', regex: '[\\\\d]+' } ],\n      '#operator': \n       [ { token: 'keyword.operator.soy',\n           regex: '==|!=|\\\\band\\\\b|\\\\bor\\\\b|\\\\bnot\\\\b|-|\\\\+|/|\\\\?:' } ],\n      '#param': \n       [ { token: \n            [ 'punctuation.definition.tag.begin.soy',\n              'meta.tag.param.soy',\n              'entity.name.tag.soy' ],\n           regex: '(\\\\{/?)(\\\\s*)(param)',\n           push: \n            [ { token: 'punctuation.definition.tag.end.soy',\n                regex: '\\\\}',\n                next: 'pop' },\n              { include: '#variable' },\n              { token: \n                 [ 'entity.other.attribute-name.soy',\n                   'text',\n                   'keyword.operator.soy' ],\n                regex: '\\\\b([\\\\w]+)(\\\\s*)((?::)?)' },\n              { defaultToken: 'meta.tag.param.soy' } ] } ],\n      '#primitive': \n       [ { token: 'constant.language.soy',\n           regex: '\\\\b(?:null|false|true)\\\\b' } ],\n      '#msg': \n       [ { token: \n            [ 'punctuation.definition.tag.begin.soy',\n              'meta.tag.msg.soy',\n              'entity.name.tag.soy' ],\n           regex: '(\\\\{/?)(\\\\s*)(msg)\\\\b',\n           push: \n            [ { token: 'punctuation.definition.tag.end.soy',\n                regex: '\\\\}',\n                next: 'pop' },\n              { include: '#string-quoted-single' },\n              { include: '#string-quoted-double' },\n              { token: \n                 [ 'entity.other.attribute-name.soy',\n                   'text',\n                   'keyword.operator.soy' ],\n                regex: '\\\\b(meaning|desc)(\\\\s*)(=)' },\n              { defaultToken: 'meta.tag.msg.soy' } ] } ],\n      '#print': \n       [ { token: \n            [ 'punctuation.definition.tag.begin.soy',\n              'meta.tag.print.soy',\n              'entity.name.tag.soy' ],\n           regex: '(\\\\{/?)(\\\\s*)(print)\\\\b',\n           push: \n            [ { token: 'punctuation.definition.tag.end.soy',\n                regex: '\\\\}',\n                next: 'pop' },\n              { include: '#variable' },\n              { include: '#print-parameter' },\n              { include: '#number' },\n              { include: '#primitive' },\n              { include: '#attribute-lookup' },\n              { defaultToken: 'meta.tag.print.soy' } ] } ],\n      '#print-parameter': \n       [ { token: 'keyword.operator.soy', regex: '\\\\|' },\n         { token: 'variable.parameter.soy',\n           regex: 'noAutoescape|id|escapeHtml|escapeJs|insertWorkBreaks|truncate' } ],\n      '#special-character': \n       [ { token: 'support.constant.soy',\n           regex: '\\\\bsp\\\\b|\\\\bnil\\\\b|\\\\\\\\r|\\\\\\\\n|\\\\\\\\t|\\\\blb\\\\b|\\\\brb\\\\b' } ],\n      '#string-quoted-double': [ { token: 'string.quoted.double', regex: '\"[^\"]*\"' } ],\n      '#string-quoted-single': [ { token: 'string.quoted.single', regex: '\\'[^\\']*\\'' } ],\n      '#switch': \n       [ { token: \n            [ 'punctuation.definition.tag.begin.soy',\n              'meta.tag.switch.soy',\n              'entity.name.tag.soy' ],\n           regex: '(\\\\{/?)(\\\\s*)(switch|case)\\\\b',\n           push: \n            [ { token: 'punctuation.definition.tag.end.soy',\n                regex: '\\\\}',\n                next: 'pop' },\n              { include: '#variable' },\n              { include: '#function' },\n              { include: '#number' },\n              { include: '#string-quoted-single' },\n              { include: '#string-quoted-double' },\n              { defaultToken: 'meta.tag.switch.soy' } ] } ],\n      '#attribute-lookup': \n       [ { token: 'punctuation.definition.attribute-lookup.begin.soy',\n           regex: '\\\\[',\n           push: \n            [ { token: 'punctuation.definition.attribute-lookup.end.soy',\n                regex: '\\\\]',\n                next: 'pop' },\n              { include: '#variable' },\n              { include: '#function' },\n              { include: '#operator' },\n              { include: '#number' },\n              { include: '#primitive' },\n              { include: '#string-quoted-single' },\n              { include: '#string-quoted-double' } ] } ],\n      '#tag': \n       [ { token: 'punctuation.definition.tag.begin.soy',\n           regex: '\\\\{',\n           push: \n            [ { token: 'punctuation.definition.tag.end.soy',\n                regex: '\\\\}',\n                next: 'pop' },\n              { include: '#namespace' },\n              { include: '#variable' },\n              { include: '#special-character' },\n              { include: '#tag-simple' },\n              { include: '#function' },\n              { include: '#operator' },\n              { include: '#attribute-lookup' },\n              { include: '#number' },\n              { include: '#primitive' },\n              { include: '#print-parameter' } ] } ],\n      '#tag-simple': \n       [ { token: 'entity.name.tag.soy',\n           regex: '{{\\\\s*(?:literal|else|ifempty|default)\\\\s*(?=\\\\})'} ],\n      '#template': \n       [ { token: \n            [ 'punctuation.definition.tag.begin.soy',\n              'meta.tag.template.soy' ],\n           regex: '(\\\\{/?)(\\\\s*)(?=template|deltemplate)',\n           push: \n            [ { token: 'punctuation.definition.tag.end.soy',\n                regex: '\\\\}',\n                next: 'pop' },\n              { token: ['entity.name.tag.soy', 'text', 'entity.name.function.soy' ],\n                regex: '(template|deltemplate)(\\\\s+)([\\\\.\\\\w]+)',\n                originalRegex: '(?<=template|deltemplate)\\\\s+([\\\\.\\\\w]+)' },\n              { token: \n                 [ 'entity.other.attribute-name.soy',\n                   'text',\n                   'keyword.operator.soy',\n                   'text',\n                   'string.quoted.double.soy' ],\n                regex: '\\\\b(private)(\\\\s*)(=)(\\\\s*)(\"true\"|\"false\")' },\n              { token: \n                 [ 'entity.other.attribute-name.soy',\n                   'text',\n                   'keyword.operator.soy',\n                   'text',\n                   'string.quoted.single.soy' ],\n                regex: '\\\\b(private)(\\\\s*)(=)(\\\\s*)(\\'true\\'|\\'false\\')' },\n              { token: \n                 [ 'entity.other.attribute-name.soy',\n                   'text',\n                   'keyword.operator.soy',\n                   'text',\n                   'string.quoted.double.soy' ],\n                regex: '\\\\b(autoescape)(\\\\s*)(=)(\\\\s*)(\"true\"|\"false\"|\"contextual\")' },\n              { token: \n                 [ 'entity.other.attribute-name.soy',\n                   'text',\n                   'keyword.operator.soy',\n                   'text',\n                   'string.quoted.single.soy' ],\n                regex: '\\\\b(autoescape)(\\\\s*)(=)(\\\\s*)(\\'true\\'|\\'false\\'|\\'contextual\\')' },\n              { defaultToken: 'meta.tag.template.soy' } ] } ],\n      '#variable': [ { token: 'variable.other.soy', regex: '\\\\$[\\\\w\\\\.]+' } ] };\n    \n    \n    for (var i in soyRules) {\n        if (this.$rules[i]) {\n            this.$rules[i].unshift.apply(this.$rules[i], soyRules[i]);\n        } else {\n            this.$rules[i] = soyRules[i];\n        }\n    }\n    \n    this.normalizeRules();\n};\n\nSoyTemplateHighlightRules.metaData = { comment: 'SoyTemplate',\n      fileTypes: [ 'soy' ],\n      firstLineMatch: '\\\\{\\\\s*namespace\\\\b',\n      foldingStartMarker: '\\\\{\\\\s*template\\\\s+[^\\\\}]*\\\\}',\n      foldingStopMarker: '\\\\{\\\\s*/\\\\s*template\\\\s*\\\\}',\n      name: 'SoyTemplate',\n      scopeName: 'source.soy' };\n\n\noop.inherits(SoyTemplateHighlightRules, HtmlHighlightRules);\n\nexports.SoyTemplateHighlightRules = SoyTemplateHighlightRules;\n});"
  },
  {
    "path": "lib/ace/mode/space.js",
    "content": "\ndefine(function(require, exports, module) {\n\"use strict\";\nvar oop = require(\"../lib/oop\");\n// defines the parent mode\nvar TextMode = require(\"./text\").Mode;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\n// defines the language specific highlighters and folding rules\nvar SpaceHighlightRules = require(\"./space_highlight_rules\").SpaceHighlightRules;\nvar Mode = function() {\n    // set everything up\n    this.HighlightRules = SpaceHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function() {\n    \n    this.$id = \"ace/mode/space\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/space_highlight_rules.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar SpaceHighlightRules = function() {\n\n    // Todo: support multiline values that escape the newline with spaces.\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"empty_line\",\n                regex : / */,\n                next : \"key\"\n            },\n            {\n                token : \"empty_line\",\n                regex : /$/,\n                next : \"key\"\n            }\n        ],\n        \"key\" : [\n            {\n                token : \"variable\",\n                regex : /\\S+/\n            },\n            {\n                token : \"empty_line\",\n                regex : /$/,\n                next : \"start\"\n            },{\n                token : \"keyword.operator\",\n                regex : / /,\n                next  : \"value\"\n            }\n        ],\n        \"value\" : [\n            {\n                token : \"keyword.operator\",\n                regex : /$/,\n                next  : \"start\"\n            },\n            {\n                token : \"string\",\n                regex : /[^$]/\n            }\n        ]\n    };\n    \n};\n\noop.inherits(SpaceHighlightRules, TextHighlightRules);\n\nexports.SpaceHighlightRules = SpaceHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/sparql.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar SPARQLHighlightRules = require(\"./sparql_highlight_rules\").SPARQLHighlightRules;\n// TODO: pick appropriate fold mode\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = SPARQLHighlightRules;\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    // this.lineCommentStart = \"\"#\"\";\n    // Extra logic goes here.\n    this.$id = \"ace/mode/sparql\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});"
  },
  {
    "path": "lib/ace/mode/sparql_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/* This file was autogenerated from sparql.tmLanguage (uuid: ) */\n/****************************************************************************************\n * IT MIGHT NOT BE PERFECT ...But it's a good start from an existing *.tmlanguage file. *\n * fileTypes                                                                            *\n ****************************************************************************************/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar SPARQLHighlightRules = function() {\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = {\n        start: [{\n            include: \"#comments\"\n        }, {\n            include: \"#strings\"\n        }, {\n            include: \"#string-language-suffixes\"\n        }, {\n            include: \"#string-datatype-suffixes\"\n        }, {\n            include: \"#logic-operators\"\n        }, {\n            include: \"#relative-urls\"\n        }, {\n            include: \"#xml-schema-types\"\n        }, {\n            include: \"#rdf-schema-types\"\n        }, {\n            include: \"#owl-types\"\n        }, {\n            include: \"#qnames\"\n        }, {\n            include: \"#keywords\"\n        }, {\n            include: \"#built-in-functions\"\n        }, {\n            include: \"#variables\"\n        }, {\n            include: \"#boolean-literal\"\n        }, {\n            include: \"#punctuation-operators\"\n        }],\n        \"#boolean-literal\": [{\n            token: \"constant.language.boolean.sparql\",\n            regex: /true|false/\n        }],\n        \"#built-in-functions\": [{\n            token: \"support.function.sparql\",\n            regex: /[Aa][Bb][Ss]|[Aa][Vv][Gg]|[Bb][Nn][Oo][Dd][Ee]|[Bb][Oo][Uu][Nn][Dd]|[Cc][Ee][Ii][Ll]|[Cc][Oo][Aa][Ll][Ee][Ss][Cc][Ee]|[Cc][Oo][Nn][Cc][Aa][Tt]|[Cc][Oo][Nn][Tt][Aa][Ii][Nn][Ss]|[Cc][Oo][Uu][Nn][Tt]|[Dd][Aa][Tt][Aa][Tt][Yy][Pp][Ee]|[Dd][Aa][Yy]|[Ee][Nn][Cc][Oo][Dd][Ee]_[Ff][Oo][Rr]_[Uu][Rr][Ii]|[Ee][Xx][Ii][Ss][Tt][Ss]|[Ff][Ll][Oo][Oo][Rr]|[Gg][Rr][Oo][Uu][Pp]_[Cc][Oo][Nn][Cc][Aa][Tt]|[Hh][Oo][Uu][Rr][Ss]|[Ii][Ff]|[Ii][Rr][Ii]|[Ii][Ss][Bb][Ll][Aa][Nn][Kk]|[Ii][Ss][Ii][Rr][Ii]|[Ii][Ss][Ll][Ii][Tt][Ee][Rr][Aa][Ll]|[Ii][Ss][Nn][Uu][Mm][Ee][Rr][Ii][Cc]|[Ii][Ss][Uu][Rr][Ii]|[Ll][Aa][Nn][Gg]|[Ll][Aa][Nn][Gg][Mm][Aa][Tt][Cc][Hh][Ee][Ss]|[Ll][Cc][Aa][Ss][Ee]|[Mm][Aa][Xx]|[Mm][Dd]5|[Mm][Ii][Nn]|[Mm][Ii][Nn][Uu][Tt][Ee][Ss]|[Mm][Oo][Nn][Tt][Hh]|[Nn][Oo][Ww]|[Rr][Aa][Nn][Dd]|[Rr][Ee][Gg][Ee][Xx]|[Rr][Ee][Pp][Ll][Aa][Cc][Ee]|[Rr][Oo][Uu][Nn][Dd]|[Ss][Aa][Mm][Ee][Tt][Ee][Rr][Mm]|[Ss][Aa][Mm][Pp][Ll][Ee]|[Ss][Ee][Cc][Oo][Nn][Dd][Ss]|[Ss][Ee][Pp][Aa][Rr][Aa][Tt][Oo][Rr]|[Ss][Hh][Aa](?:1|256|384|512)|[Ss][Tt][Rr]|[Ss][Tt][Rr][Aa][Ff][Tt][Ee][Rr]|[Ss][Tt][Rr][Bb][Ee][Ff][Oo][Rr][Ee]|[Ss][Tt][Rr][Dd][Tt]|[Ss][Tt][Rr][Ee][Nn][Dd][Ss]|[Ss][Tt][Rr][Ll][Aa][Nn][Gg]|[Ss][Tt][Rr][Ll][Ee][Nn]|[Ss][Tt][Rr][Ss][Tt][Aa][Rr][Tt][Ss]|[Ss][Tt][Rr][Uu][Uu][Ii][Dd]|[Ss][Uu][Bb][Ss][Tt][Rr]|[Ss][Uu][Mm]|[Tt][Ii][Mm][Ee][Zz][Oo][Nn][Ee]|[Tt][Zz]|[Uu][Cc][Aa][Ss][Ee]|[Uu][Rr][Ii]|[Uu][Uu][Ii][Dd]|[Yy][Ee][Aa][Rr]/\n        }],\n        \"#comments\": [{\n            token: [\n                \"punctuation.definition.comment.sparql\",\n                \"comment.line.hash.sparql\"\n            ],\n            regex: /(#)(.*$)/\n        }],\n        \"#keywords\": [{\n            token: \"keyword.other.sparql\",\n            regex: /[Aa][Dd][Dd]|[Aa][Ll][Ll]|[Aa][Ss]|[As][Ss][Cc]|[Aa][Ss][Kk]|[Bb][Aa][Ss][Ee]|[Bb][Ii][Nn][Dd]|[Bb][Yy]|[Cc][Ll][Ee][Aa][Rr]|[Cc][Oo][Nn][Ss][Tt][Rr][Uu][Cc][Tt]|[Cc][Oo][Pp][Yy]|[Cc][Rr][Ee][Aa][Tt][Ee]|[Dd][Aa][Tt][Aa]|[Dd][Ee][Ff][Aa][Uu][Ll][Tt]|[Dd][Ee][Ll][Ee][Tt][Ee]|[Dd][Ee][Sc][Cc]|[Dd][Ee][Ss][Cc][Rr][Ii][Bb][Ee]|[Dd][Ii][Ss][Tt][Ii][Nn][Cc][Tt]|[Dd][Rr][Oo][Pp]|[Ff][Ii][Ll][Tt][Ee][Rr]|[Ff][Rr][Oo][Mm]|[Gg][Rr][Aa][Pp][Hh]|[Gg][Rr][Oo][Uu][Pp]|[Hh][Aa][Vv][Ii][Nn][Gg]|[Ii][Nn][Ss][Ee][Rr][Tt]|[Ll][Ii][Mm][Ii][Tt]|[Ll][Oo][Aa][Dd]|[Mm][Ii][Nn][Uu][Ss]|[Mm][Oo][Vv][Ee]|[Nn][Aa][Mm][Ee][Dd]|[Oo][Ff][Ff][Ss][Ee][Tt]|[Oo][Pp][Tt][Ii][Oo][Nn][Aa][Ll]|[Oo][Rr][Dd][Ee][Rr]|[Pp][Rr][Ee][Ff][Ii][Xx]|[Rr][Ee][Dd][Uu][Cc][Ee][Dd]|[Ss][Ee][Ll][Ee][Cc][Tt]|[Ss][Ee][Pp][Aa][Rr][Aa][Tt][Oo][Rr]|[Ss][Ee][Rr][Vv][Ii][Cc][Ee]|[Ss][Ii][Ll][Ee][Nn][Tt]|[Tt][Oo]|[Uu][Nn][Dd][Ee][Ff]|[Uu][Nn][Ii][Oo][Nn]|[Uu][Ss][Ii][Nn][Gg]|[Vv][Aa][Ll][Uu][Ee][Ss]|[Ww][He][Ee][Rr][Ee]|[Ww][Ii][Tt][Hh]/\n        }],\n        \"#logic-operators\": [{\n            token: \"keyword.operator.logical.sparql\",\n            regex: /\\|\\||&&|=|!=|<|>|<=|>=|(?:^|!?\\s)IN(?:!?\\s|$)|(?:^|!?\\s)NOT(?:!?\\s|$)|-|\\+|\\*|\\/|\\!/\n        }],\n        \"#owl-types\": [{\n            token: \"support.type.datatype.owl.sparql\",\n            regex: /owl:[a-zA-Z]+/\n        }],\n        \"#punctuation-operators\": [{\n            token: \"keyword.operator.punctuation.sparql\",\n            regex: /;|,|\\.|\\(|\\)|\\{|\\}|\\|/\n        }],\n        \"#qnames\": [{\n            token: \"entity.name.other.qname.sparql\",\n            regex: /(?:[a-zA-Z][-_a-zA-Z0-9]*)?:(?:[_a-zA-Z][-_a-zA-Z0-9]*)?/\n        }],\n        \"#rdf-schema-types\": [{\n            token: \"support.type.datatype.rdf.schema.sparql\",\n            regex: /rdfs?:[a-zA-Z]+|(?:^|\\s)a(?:\\s|$)/\n        }],\n        \"#relative-urls\": [{\n            token: \"string.quoted.other.relative.url.sparql\",\n            regex: /</,\n            push: [{\n                token: \"string.quoted.other.relative.url.sparql\",\n                regex: />/,\n                next: \"pop\"\n            }, {\n                defaultToken: \"string.quoted.other.relative.url.sparql\"\n            }]\n        }],\n        \"#string-datatype-suffixes\": [{\n            token: \"keyword.operator.datatype.suffix.sparql\",\n            regex: /\\^\\^/\n        }],\n        \"#string-language-suffixes\": [{\n            token: [\n                \"keyword.operator.language.suffix.sparql\",\n                \"constant.language.suffix.sparql\"\n            ],\n            regex: /(?!\")(@)([a-z]+(?:\\-[a-z0-9]+)*)/\n        }],\n        \"#strings\": [{\n            token: \"string.quoted.triple.sparql\",\n            regex: /\"\"\"/,\n            push: [{\n                token: \"string.quoted.triple.sparql\",\n                regex: /\"\"\"/,\n                next: \"pop\"\n            }, {\n                defaultToken: \"string.quoted.triple.sparql\"\n            }]\n        }, {\n            token: \"string.quoted.double.sparql\",\n            regex: /\"/,\n            push: [{\n                token: \"string.quoted.double.sparql\",\n                regex: /\"/,\n                next: \"pop\"\n            }, {\n                token: \"invalid.string.newline\",\n                regex: /$/\n            }, {\n                token: \"constant.character.escape.sparql\",\n                regex: /\\\\./\n            }, {\n                defaultToken: \"string.quoted.double.sparql\"\n            }]\n        }],\n        \"#variables\": [{\n            token: \"variable.other.sparql\",\n            regex: /(?:\\?|\\$)[-_a-zA-Z0-9]+/\n        }],\n        \"#xml-schema-types\": [{\n            token: \"support.type.datatype.schema.sparql\",\n            regex: /xsd?:[a-z][a-zA-Z]+/\n        }]\n    };\n    \n    this.normalizeRules();\n};\n\nSPARQLHighlightRules.metaData = {\n    fileTypes: [\"rq\", \"sparql\"],\n    name: \"SPARQL\",\n    scopeName: \"source.sparql\"\n};\n\n\noop.inherits(SPARQLHighlightRules, TextHighlightRules);\n\nexports.SPARQLHighlightRules = SPARQLHighlightRules;\n});"
  },
  {
    "path": "lib/ace/mode/sql.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar SqlHighlightRules = require(\"./sql_highlight_rules\").SqlHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = SqlHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"--\";\n\n    this.$id = \"ace/mode/sql\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n"
  },
  {
    "path": "lib/ace/mode/sql_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar SqlHighlightRules = function() {\n\n    var keywords = (\n        \"select|insert|update|delete|from|where|and|or|group|by|order|limit|offset|having|as|case|\" +\n        \"when|else|end|type|left|right|join|on|outer|desc|asc|union|create|table|primary|key|if|\" +\n        \"foreign|not|references|default|null|inner|cross|natural|database|drop|grant\"\n    );\n\n    var builtinConstants = (\n        \"true|false\"\n    );\n\n    var builtinFunctions = (\n        \"avg|count|first|last|max|min|sum|ucase|lcase|mid|len|round|rank|now|format|\" + \n        \"coalesce|ifnull|isnull|nvl\"\n    );\n\n    var dataTypes = (\n        \"int|numeric|decimal|date|varchar|char|bigint|float|double|bit|binary|text|set|timestamp|\" +\n        \"money|real|number|integer\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": builtinFunctions,\n        \"keyword\": keywords,\n        \"constant.language\": builtinConstants,\n        \"storage.type\": dataTypes\n    }, \"identifier\", true);\n\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment\",\n            regex : \"--.*$\"\n        },  {\n            token : \"comment\",\n            start : \"/\\\\*\",\n            end : \"\\\\*/\"\n        }, {\n            token : \"string\",           // \" string\n            regex : '\".*?\"'\n        }, {\n            token : \"string\",           // ' string\n            regex : \"'.*?'\"\n        }, {\n            token : \"string\",           // ` string (apache drill)\n            regex : \"`.*?`\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|%|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[\\\\(]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\)]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+\"\n        } ]\n    };\n    this.normalizeRules();\n};\n\noop.inherits(SqlHighlightRules, TextHighlightRules);\n\nexports.SqlHighlightRules = SqlHighlightRules;\n});\n\n"
  },
  {
    "path": "lib/ace/mode/sqlserver.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar SqlServerHighlightRules = require(\"./sqlserver_highlight_rules\").SqlHighlightRules;\nvar SqlServerFoldMode = require(\"./folding/sqlserver\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = SqlServerHighlightRules;\n    this.foldingRules = new SqlServerFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"--\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    \n    /**\n     * Override keyword completions using list created in highlight rules\n     */\n    this.getCompletions = function(state, session, pos, prefix) {\n        return session.$mode.$highlightRules.completions;\n    };\n    \n    this.$id = \"ace/mode/sql\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n"
  },
  {
    "path": "lib/ace/mode/sqlserver_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar SqlServerHighlightRules = function() {\n    /**\n     * Transact-SQL Syntax Conventions: https://msdn.microsoft.com/en-us/library/ms177563.aspx\n     * Goal: make this imitate SSMS (SQL Server Managment Studio)\n     */\n\n    // https://msdn.microsoft.com/en-us/library/ms189773.aspx\n    var logicalOperators = \"ALL|AND|ANY|BETWEEN|EXISTS|IN|LIKE|NOT|OR|SOME\";\n    logicalOperators += \"|NULL|IS|APPLY|INNER|OUTER|LEFT|RIGHT|JOIN|CROSS\"; //SSMS colors these gray too\n    //note: manually removed LEFT and RIGHT from built in functions below to color it same way SSMS does\n    \n\n    var builtinFunctions = (\n        /* https://msdn.microsoft.com/en-us/library/ms187957.aspx */\n        \"OPENDATASOURCE|OPENQUERY|OPENROWSET|OPENXML|\" +\n        /* https://msdn.microsoft.com/en-us/library/ms173454.aspx */\n        \"AVG|CHECKSUM_AGG|COUNT|COUNT_BIG|GROUPING|GROUPING_ID|MAX|MIN|STDEV|STDEVP|SUM|VAR|VARP|\" +\n        /* https://msdn.microsoft.com/en-us/library/ms189798.aspx */\n        \"DENSE_RANK|NTILE|RANK|ROW_NUMBER\" +\n        /* https://msdn.microsoft.com/en-us/library/ms173823.aspx */\n        \"@@DATEFIRST|@@DBTS|@@LANGID|@@LANGUAGE|@@LOCK_TIMEOUT|@@MAX_CONNECTIONS|@@MAX_PRECISION|@@NESTLEVEL|@@OPTIONS|@@REMSERVER|@@SERVERNAME|@@SERVICENAME|@@SPID|@@TEXTSIZE|@@VERSION|\" +\n        /* https://msdn.microsoft.com/en-us/library/hh231076.aspx */\n        \"CAST|CONVERT|PARSE|TRY_CAST|TRY_CONVERT|TRY_PARSE\" +\n        /* https://msdn.microsoft.com/en-us/library/ms186285.aspx */\n        \"@@CURSOR_ROWS|@@FETCH_STATUS|CURSOR_STATUS|\" +\n        /* https://msdn.microsoft.com/en-us/library/ms186724.aspx */\n        \"@@DATEFIRST|@@LANGUAGE|CURRENT_TIMESTAMP|DATEADD|DATEDIFF|DATEFROMPARTS|DATENAME|DATEPART|DATETIME2FROMPARTS|DATETIMEFROMPARTS|DATETIMEOFFSETFROMPARTS|DAY|EOMONTH|GETDATE|GETUTCDATE|ISDATE|MONTH|SET DATEFIRST|SET DATEFORMAT|SET LANGUAGE|SMALLDATETIMEFROMPARTS|SP_HELPLANGUAGE|SWITCHOFFSET|SYSDATETIME|SYSDATETIMEOFFSET|SYSUTCDATETIME|TIMEFROMPARTS|TODATETIMEOFFSET|YEAR|\" +\n        /* https://msdn.microsoft.com/en-us/library/hh213226.aspx */\n        \"CHOOSE|IIF|\" +\n        /* https://msdn.microsoft.com/en-us/library/ms177516.aspx */\n        \"ABS|ACOS|ASIN|ATAN|ATN2|CEILING|COS|COT|DEGREES|EXP|FLOOR|LOG|LOG10|PI|POWER|RADIANS|RAND|ROUND|SIGN|SIN|SQRT|SQUARE|TAN|\" +\n        /* https://msdn.microsoft.com/en-us/library/ms187812.aspx */\n        \"@@PROCID|APPLOCK_MODE|APPLOCK_TEST|APP_NAME|ASSEMBLYPROPERTY|COLUMNPROPERTY|COL_LENGTH|COL_NAME|DATABASEPROPERTYEX|DATABASE_PRINCIPAL_ID|DB_ID|DB_NAME|FILEGROUPPROPERTY|FILEGROUP_ID|FILEGROUP_NAME|FILEPROPERTY|FILE_ID|FILE_IDEX|FILE_NAME|FULLTEXTCATALOGPROPERTY|FULLTEXTSERVICEPROPERTY|INDEXKEY_PROPERTY|INDEXPROPERTY|INDEX_COL|OBJECTPROPERTY|OBJECTPROPERTYEX|OBJECT_DEFINITION|OBJECT_ID|OBJECT_NAME|OBJECT_SCHEMA_NAME|ORIGINAL_DB_NAME|PARSENAME|SCHEMA_ID|SCHEMA_NAME|SCOPE_IDENTITY|SERVERPROPERTY|STATS_DATE|TYPEPROPERTY|TYPE_ID|TYPE_NAME|\" +\n        /* https://msdn.microsoft.com/en-us/library/ms186236.aspx */\n        \"CERTENCODED|CERTPRIVATEKEY|CURRENT_USER|DATABASE_PRINCIPAL_ID|HAS_PERMS_BY_NAME|IS_MEMBER|IS_ROLEMEMBER|IS_SRVROLEMEMBER|ORIGINAL_LOGIN|PERMISSIONS|PWDCOMPARE|PWDENCRYPT|SCHEMA_ID|SCHEMA_NAME|SESSION_USER|SUSER_ID|SUSER_NAME|SUSER_SID|SUSER_SNAME|SYS.FN_BUILTIN_PERMISSIONS|SYS.FN_GET_AUDIT_FILE|SYS.FN_MY_PERMISSIONS|SYSTEM_USER|USER_ID|USER_NAME|\" +\n        /* https://msdn.microsoft.com/en-us/library/ms181984.aspx */\n        \"ASCII|CHAR|CHARINDEX|CONCAT|DIFFERENCE|FORMAT|LEN|LOWER|LTRIM|NCHAR|PATINDEX|QUOTENAME|REPLACE|REPLICATE|REVERSE|RTRIM|SOUNDEX|SPACE|STR|STUFF|SUBSTRING|UNICODE|UPPER|\" +\n        /* https://msdn.microsoft.com/en-us/library/ms187786.aspx */\n        \"$PARTITION|@@ERROR|@@IDENTITY|@@PACK_RECEIVED|@@ROWCOUNT|@@TRANCOUNT|BINARY_CHECKSUM|CHECKSUM|CONNECTIONPROPERTY|CONTEXT_INFO|CURRENT_REQUEST_ID|ERROR_LINE|ERROR_MESSAGE|ERROR_NUMBER|ERROR_PROCEDURE|ERROR_SEVERITY|ERROR_STATE|FORMATMESSAGE|GETANSINULL|GET_FILESTREAM_TRANSACTION_CONTEXT|HOST_ID|HOST_NAME|ISNULL|ISNUMERIC|MIN_ACTIVE_ROWVERSION|NEWID|NEWSEQUENTIALID|ROWCOUNT_BIG|XACT_STATE|\" +\n        /* https://msdn.microsoft.com/en-us/library/ms177520.aspx */\n        \"@@CONNECTIONS|@@CPU_BUSY|@@IDLE|@@IO_BUSY|@@PACKET_ERRORS|@@PACK_RECEIVED|@@PACK_SENT|@@TIMETICKS|@@TOTAL_ERRORS|@@TOTAL_READ|@@TOTAL_WRITE|FN_VIRTUALFILESTATS|\" +\n        /* https://msdn.microsoft.com/en-us/library/ms188353.aspx */\n        \"PATINDEX|TEXTPTR|TEXTVALID|\" +\n        /* other */\n        \"COALESCE|NULLIF\"\n    );\n    \n\n    // https://msdn.microsoft.com/en-us/library/ms187752.aspx\n    var dataTypes = (\"BIGINT|BINARY|BIT|CHAR|CURSOR|DATE|DATETIME|DATETIME2|DATETIMEOFFSET|DECIMAL|FLOAT|HIERARCHYID|IMAGE|INTEGER|INT|MONEY|NCHAR|NTEXT|NUMERIC|NVARCHAR|REAL|SMALLDATETIME|SMALLINT|SMALLMONEY|SQL_VARIANT|TABLE|TEXT|TIME|TIMESTAMP|TINYINT|UNIQUEIDENTIFIER|VARBINARY|VARCHAR|XML\");\n    \n    \n    //https://msdn.microsoft.com/en-us/library/ms176007.aspx (these are lower case!)\n    var builtInStoredProcedures = \"sp_addextendedproc|sp_addextendedproperty|sp_addmessage|sp_addtype|sp_addumpdevice|sp_add_data_file_recover_suspect_db|sp_add_log_file_recover_suspect_db|sp_altermessage|sp_attach_db|sp_attach_single_file_db|sp_autostats|sp_bindefault|sp_bindrule|sp_bindsession|sp_certify_removable|sp_clean_db_file_free_space|sp_clean_db_free_space|sp_configure|sp_control_plan_guide|sp_createstats|sp_create_plan_guide|sp_create_plan_guide_from_handle|sp_create_removable|sp_cycle_errorlog|sp_datatype_info|sp_dbcmptlevel|sp_dbmmonitoraddmonitoring|sp_dbmmonitorchangealert|sp_dbmmonitorchangemonitoring|sp_dbmmonitordropalert|sp_dbmmonitordropmonitoring|sp_dbmmonitorhelpalert|sp_dbmmonitorhelpmonitoring|sp_dbmmonitorresults|sp_db_increased_partitions|sp_delete_backuphistory|sp_depends|sp_describe_first_result_set|sp_describe_undeclared_parameters|sp_detach_db|sp_dropdevice|sp_dropextendedproc|sp_dropextendedproperty|sp_dropmessage|sp_droptype|sp_execute|sp_executesql|sp_getapplock|sp_getbindtoken|sp_help|sp_helpconstraint|sp_helpdb|sp_helpdevice|sp_helpextendedproc|sp_helpfile|sp_helpfilegroup|sp_helpindex|sp_helplanguage|sp_helpserver|sp_helpsort|sp_helpstats|sp_helptext|sp_helptrigger|sp_indexoption|sp_invalidate_textptr|sp_lock|sp_monitor|sp_prepare|sp_prepexec|sp_prepexecrpc|sp_procoption|sp_recompile|sp_refreshview|sp_releaseapplock|sp_rename|sp_renamedb|sp_resetstatus|sp_sequence_get_range|sp_serveroption|sp_setnetname|sp_settriggerorder|sp_spaceused|sp_tableoption|sp_unbindefault|sp_unbindrule|sp_unprepare|sp_updateextendedproperty|sp_updatestats|sp_validname|sp_who|sys.sp_merge_xtp_checkpoint_files|sys.sp_xtp_bind_db_resource_pool|sys.sp_xtp_checkpoint_force_garbage_collection|sys.sp_xtp_control_proc_exec_stats|sys.sp_xtp_control_query_exec_stats|sys.sp_xtp_unbind_db_resource_pool\";\n    \n    \n    // https://msdn.microsoft.com/en-us/library/ms189822.aspx\n    var keywords = \"ABSOLUTE|ACTION|ADA|ADD|ADMIN|AFTER|AGGREGATE|ALIAS|ALL|ALLOCATE|ALTER|AND|ANY|ARE|ARRAY|AS|ASC|ASENSITIVE|ASSERTION|ASYMMETRIC|AT|ATOMIC|AUTHORIZATION|BACKUP|BEFORE|BEGIN|BETWEEN|BIT_LENGTH|BLOB|BOOLEAN|BOTH|BREADTH|BREAK|BROWSE|BULK|BY|CALL|CALLED|CARDINALITY|CASCADE|CASCADED|CASE|CATALOG|CHARACTER|CHARACTER_LENGTH|CHAR_LENGTH|CHECK|CHECKPOINT|CLASS|CLOB|CLOSE|CLUSTERED|COALESCE|COLLATE|COLLATION|COLLECT|COLUMN|COMMIT|COMPLETION|COMPUTE|CONDITION|CONNECT|CONNECTION|CONSTRAINT|CONSTRAINTS|CONSTRUCTOR|CONTAINS|CONTAINSTABLE|CONTINUE|CORR|CORRESPONDING|COVAR_POP|COVAR_SAMP|CREATE|CROSS|CUBE|CUME_DIST|CURRENT|CURRENT_CATALOG|CURRENT_DATE|CURRENT_DEFAULT_TRANSFORM_GROUP|CURRENT_PATH|CURRENT_ROLE|CURRENT_SCHEMA|CURRENT_TIME|CURRENT_TRANSFORM_GROUP_FOR_TYPE|CYCLE|DATA|DATABASE|DBCC|DEALLOCATE|DEC|DECLARE|DEFAULT|DEFERRABLE|DEFERRED|DELETE|DENY|DEPTH|DEREF|DESC|DESCRIBE|DESCRIPTOR|DESTROY|DESTRUCTOR|DETERMINISTIC|DIAGNOSTICS|DICTIONARY|DISCONNECT|DISK|DISTINCT|DISTRIBUTED|DOMAIN|DOUBLE|DROP|DUMP|DYNAMIC|EACH|ELEMENT|ELSE|END|END-EXEC|EQUALS|ERRLVL|ESCAPE|EVERY|EXCEPT|EXCEPTION|EXEC|EXECUTE|EXISTS|EXIT|EXTERNAL|EXTRACT|FETCH|FILE|FILLFACTOR|FILTER|FIRST|FOR|FOREIGN|FORTRAN|FOUND|FREE|FREETEXT|FREETEXTTABLE|FROM|FULL|FULLTEXTTABLE|FUNCTION|FUSION|GENERAL|GET|GLOBAL|GO|GOTO|GRANT|GROUP|HAVING|HOLD|HOLDLOCK|HOST|HOUR|IDENTITY|IDENTITYCOL|IDENTITY_INSERT|IF|IGNORE|IMMEDIATE|IN|INCLUDE|INDEX|INDICATOR|INITIALIZE|INITIALLY|INNER|INOUT|INPUT|INSENSITIVE|INSERT|INTEGER|INTERSECT|INTERSECTION|INTERVAL|INTO|IS|ISOLATION|ITERATE|JOIN|KEY|KILL|LANGUAGE|LARGE|LAST|LATERAL|LEADING|LESS|LEVEL|LIKE|LIKE_REGEX|LIMIT|LINENO|LN|LOAD|LOCAL|LOCALTIME|LOCALTIMESTAMP|LOCATOR|MAP|MATCH|MEMBER|MERGE|METHOD|MINUTE|MOD|MODIFIES|MODIFY|MODULE|MULTISET|NAMES|NATIONAL|NATURAL|NCLOB|NEW|NEXT|NO|NOCHECK|NONCLUSTERED|NONE|NORMALIZE|NOT|NULL|NULLIF|OBJECT|OCCURRENCES_REGEX|OCTET_LENGTH|OF|OFF|OFFSETS|OLD|ON|ONLY|OPEN|OPERATION|OPTION|OR|ORDER|ORDINALITY|OUT|OUTER|OUTPUT|OVER|OVERLAPS|OVERLAY|PAD|PARAMETER|PARAMETERS|PARTIAL|PARTITION|PASCAL|PATH|PERCENT|PERCENTILE_CONT|PERCENTILE_DISC|PERCENT_RANK|PIVOT|PLAN|POSITION|POSITION_REGEX|POSTFIX|PRECISION|PREFIX|PREORDER|PREPARE|PRESERVE|PRIMARY|PRINT|PRIOR|PRIVILEGES|PROC|PROCEDURE|PUBLIC|RAISERROR|RANGE|READ|READS|READTEXT|RECONFIGURE|RECURSIVE|REF|REFERENCES|REFERENCING|REGR_AVGX|REGR_AVGY|REGR_COUNT|REGR_INTERCEPT|REGR_R2|REGR_SLOPE|REGR_SXX|REGR_SXY|REGR_SYY|RELATIVE|RELEASE|REPLICATION|RESTORE|RESTRICT|RESULT|RETURN|RETURNS|REVERT|REVOKE|ROLE|ROLLBACK|ROLLUP|ROUTINE|ROW|ROWCOUNT|ROWGUIDCOL|ROWS|RULE|SAVE|SAVEPOINT|SCHEMA|SCOPE|SCROLL|SEARCH|SECOND|SECTION|SECURITYAUDIT|SELECT|SEMANTICKEYPHRASETABLE|SEMANTICSIMILARITYDETAILSTABLE|SEMANTICSIMILARITYTABLE|SENSITIVE|SEQUENCE|SESSION|SET|SETS|SETUSER|SHUTDOWN|SIMILAR|SIZE|SOME|SPECIFIC|SPECIFICTYPE|SQL|SQLCA|SQLCODE|SQLERROR|SQLEXCEPTION|SQLSTATE|SQLWARNING|START|STATE|STATEMENT|STATIC|STATISTICS|STDDEV_POP|STDDEV_SAMP|STRUCTURE|SUBMULTISET|SUBSTRING_REGEX|SYMMETRIC|SYSTEM|TABLESAMPLE|TEMPORARY|TERMINATE|TEXTSIZE|THAN|THEN|TIMEZONE_HOUR|TIMEZONE_MINUTE|TO|TOP|TRAILING|TRAN|TRANSACTION|TRANSLATE|TRANSLATE_REGEX|TRANSLATION|TREAT|TRIGGER|TRIM|TRUNCATE|TSEQUAL|UESCAPE|UNDER|UNION|UNIQUE|UNKNOWN|UNNEST|UNPIVOT|UPDATE|UPDATETEXT|USAGE|USE|USER|USING|VALUE|VALUES|VARIABLE|VARYING|VAR_POP|VAR_SAMP|VIEW|WAITFOR|WHEN|WHENEVER|WHERE|WHILE|WIDTH_BUCKET|WINDOW|WITH|WITHIN|WITHIN GROUP|WITHOUT|WORK|WRITE|WRITETEXT|XMLAGG|XMLATTRIBUTES|XMLBINARY|XMLCAST|XMLCOMMENT|XMLCONCAT|XMLDOCUMENT|XMLELEMENT|XMLEXISTS|XMLFOREST|XMLITERATE|XMLNAMESPACES|XMLPARSE|XMLPI|XMLQUERY|XMLSERIALIZE|XMLTABLE|XMLTEXT|XMLVALIDATE|ZONE\";\n    \n    \n    // Microsoft's keyword list is missing a lot of things that are located on various other pages\n    // https://msdn.microsoft.com/en-us/library/ms187373.aspx, https://msdn.microsoft.com/en-us/library/ms181714.aspx\n    keywords += \"|KEEPIDENTITY|KEEPDEFAULTS|IGNORE_CONSTRAINTS|IGNORE_TRIGGERS|XLOCK|FORCESCAN|FORCESEEK|HOLDLOCK|NOLOCK|NOWAIT|PAGLOCK|READCOMMITTED|READCOMMITTEDLOCK|READPAST|READUNCOMMITTED|REPEATABLEREAD|ROWLOCK|SERIALIZABLE|SNAPSHOT|SPATIAL_WINDOW_MAX_CELLS|TABLOCK|TABLOCKX|UPDLOCK|XLOCK|IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX|EXPAND|VIEWS|FAST|FORCE|KEEP|KEEPFIXED|MAXDOP|MAXRECURSION|OPTIMIZE|PARAMETERIZATION|SIMPLE|FORCED|RECOMPILE|ROBUST|PLAN|SPATIAL_WINDOW_MAX_CELLS|NOEXPAND|HINT\";\n    // https://msdn.microsoft.com/en-us/library/ms173815.aspx\n    keywords += \"|LOOP|HASH|MERGE|REMOTE\";\n    // https://msdn.microsoft.com/en-us/library/ms175976.aspx\n    keywords += \"|TRY|CATCH|THROW\";\n    // highlighted words in SSMS that I'm not even sure where they come from\n    keywords += \"|TYPE\";\n    \n    \n    //remove specific built in types from keyword list\n    keywords = keywords.split('|');\n    keywords = keywords.filter(function(value, index, self) {\n        return logicalOperators.split('|').indexOf(value) === -1 && builtinFunctions.split('|').indexOf(value) === -1 && dataTypes.split('|').indexOf(value) === -1;\n    });\n    keywords = keywords.sort().join('|');\n    \n    \n    var keywordMapper = this.createKeywordMapper({\n        \"constant.language\": logicalOperators,\n        \"storage.type\": dataTypes,\n        \"support.function\": builtinFunctions,\n        \"support.storedprocedure\": builtInStoredProcedures,\n        \"keyword\": keywords\n    }, \"identifier\", true);\n    \n    \n    //https://msdn.microsoft.com/en-us/library/ms190356.aspx\n    var setStatements = \"SET ANSI_DEFAULTS|SET ANSI_NULLS|SET ANSI_NULL_DFLT_OFF|SET ANSI_NULL_DFLT_ON|SET ANSI_PADDING|SET ANSI_WARNINGS|SET ARITHABORT|SET ARITHIGNORE|SET CONCAT_NULL_YIELDS_NULL|SET CURSOR_CLOSE_ON_COMMIT|SET DATEFIRST|SET DATEFORMAT|SET DEADLOCK_PRIORITY|SET FIPS_FLAGGER|SET FMTONLY|SET FORCEPLAN|SET IDENTITY_INSERT|SET IMPLICIT_TRANSACTIONS|SET LANGUAGE|SET LOCK_TIMEOUT|SET NOCOUNT|SET NOEXEC|SET NUMERIC_ROUNDABORT|SET OFFSETS|SET PARSEONLY|SET QUERY_GOVERNOR_COST_LIMIT|SET QUOTED_IDENTIFIER|SET REMOTE_PROC_TRANSACTIONS|SET ROWCOUNT|SET SHOWPLAN_ALL|SET SHOWPLAN_TEXT|SET SHOWPLAN_XML|SET STATISTICS IO|SET STATISTICS PROFILE|SET STATISTICS TIME|SET STATISTICS XML|SET TEXTSIZE|SET XACT_ABORT\".split('|');\n    var isolationLevels = \"READ UNCOMMITTED|READ COMMITTED|REPEATABLE READ|SNAPSHOP|SERIALIZABLE\".split('|');\n    for (var i = 0; i < isolationLevels.length; i++) {\n        setStatements.push('SET TRANSACTION ISOLATION LEVEL ' + isolationLevels[i]);\n    }\n    \n    \n    this.$rules = {\n        start: [{\n            token: \"string.start\",\n            regex: \"'\",\n            next: [{\n                token: \"constant.language.escape\",\n                regex: /''/\n            }, {\n                token: \"string.end\",\n                next: \"start\",\n                regex: \"'\"\n            }, {\n                defaultToken: \"string\"\n            }]\n        },\n        DocCommentHighlightRules.getStartRule(\"doc-start\"), {\n            token: \"comment\",\n            regex: \"--.*$\"\n        }, {\n            token: \"comment\",\n            start: \"/\\\\*\",\n            end: \"\\\\*/\"\n        }, {\n            token: \"constant.numeric\", // float\n            regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n        }, {\n            token: keywordMapper,\n            regex: \"@{0,2}[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b(?!])\" //up to 2 @symbols for some built in functions\n        }, {\n            token: \"constant.class\",\n            regex: \"@@?[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            //https://msdn.microsoft.com/en-us/library/ms174986.aspx\n            token: \"keyword.operator\",\n            regex: \"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|%|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=|\\\\*\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"[\\\\(]\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"[\\\\)]\"\n        }, {\n            token: \"punctuation\",\n            regex: \",|;\"\n        }, {\n            token: \"text\",\n            regex: \"\\\\s+\"\n        }],\n        comment: [\n        DocCommentHighlightRules.getTagRule(), {\n            token: \"comment\",\n            regex: \"\\\\*\\\\/\",\n            next: \"no_regex\"\n        }, {\n            defaultToken: \"comment\",\n            caseInsensitive: true\n        }]\n    };\n    \n    //add each set statment as regex at top of rules so that they are processed first because they require multiple words\n    //note: this makes the statements not match if they are not upper case.. which is not ideal but I don't know of an easy way to fix this\n    for (var i = 0; i < setStatements.length; i++) {\n        this.$rules.start.unshift({\n            token: \"set.statement\",\n            regex: setStatements[i]\n        });\n    }\n    \n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"start\")]);\n    this.normalizeRules();\n    \n    \n    //prepare custom keyword completions used by mode to override default completor\n    //this allows for custom 'meta' and proper case of completions\n    var completions = [];\n    var addCompletions = function(arr, meta) {\n        arr.forEach(function(v) {\n            completions.push({\n                name: v,\n                value: v,\n                score: 0,\n                meta: meta\n            });\n        });\n    };\n    addCompletions(builtInStoredProcedures.split('|'), 'procedure');\n    addCompletions(logicalOperators.split('|'), 'operator');\n    addCompletions(builtinFunctions.split('|'), 'function');\n    addCompletions(dataTypes.split('|'), 'type');\n    addCompletions(setStatements, 'statement');\n    addCompletions(keywords.split('|'), 'keyword');\n    \n    this.completions = completions;\n};\n\noop.inherits(SqlServerHighlightRules, TextHighlightRules);\n\nexports.SqlHighlightRules = SqlServerHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/stylus.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n *\n * Contributor(s):\n * \n *\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar StylusHighlightRules = require(\"./stylus_highlight_rules\").StylusHighlightRules;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = StylusHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    \n    this.$id = \"ace/mode/stylus\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});"
  },
  {
    "path": "lib/ace/mode/stylus_highlight_rules.js",
    "content": "/*\n  THIS FILE WAS AUTOGENERATED BY Stylus.tmlanguage (UUID: 60519324-6A3A-4382-9E0B-546993A3869A) */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CssHighlightRules = require(\"./css_highlight_rules\");\n\nvar StylusHighlightRules = function() {\n\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.type\": CssHighlightRules.supportType,\n        \"support.function\": CssHighlightRules.supportFunction,\n        \"support.constant\": CssHighlightRules.supportConstant,\n        \"support.constant.color\": CssHighlightRules.supportConstantColor,\n        \"support.constant.fonts\": CssHighlightRules.supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n    start: [\n        {\n            token : \"comment\",\n            regex : /\\/\\/.*$/\n        },\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next : \"comment\"\n        },\n        {\n            token: [\"entity.name.function.stylus\", \"text\"],\n            regex: \"^([-a-zA-Z_][-\\\\w]*)?(\\\\()\"\n        },\n        {\n            token: [\"entity.other.attribute-name.class.stylus\"],\n            regex: \"\\\\.-?[_a-zA-Z]+[_a-zA-Z0-9-]*\"\n        },\n        {\n            token: [\"entity.language.stylus\"],\n            regex: \"^ *&\"\n        },\n        {\n            token: [\"variable.language.stylus\"],\n            regex: \"(arguments)\"\n        },\n        {\n            token: [\"keyword.stylus\"],\n            regex: \"@[-\\\\w]+\"\n        },\n        {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : CssHighlightRules.pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : CssHighlightRules.pseudoClasses\n        }, \n        {\n            token: [\"entity.name.tag.stylus\"],\n            regex: \"(?:\\\\b)(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|datalist|dd|del|details|dfn|dialog|div|dl|dt|em|eventsource|fieldset|figure|figcaption|footer|form|frame|frameset|(?:h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|label|legend|li|link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|samp|script|section|select|small|span|strike|strong|style|sub|summary|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)(?:\\\\b)\"\n        },\n        {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, \n        {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, \n        {\n            token: [\"punctuation.definition.entity.stylus\", \"entity.other.attribute-name.id.stylus\"],\n            regex: \"(#)([a-zA-Z][a-zA-Z0-9_-]*)\"\n        },\n        {\n            token: \"meta.vendor-prefix.stylus\",\n            regex: \"-webkit-|-moz\\\\-|-ms-|-o-\"\n        },\n        {\n            token: \"keyword.control.stylus\",\n            regex: \"(?:!important|for|in|return|true|false|null|if|else|unless|return)\\\\b\"\n        },\n        {\n            token: \"keyword.operator.stylus\",\n            regex: \"!|~|\\\\+|-|(?:\\\\*)?\\\\*|\\\\/|%|(?:\\\\.)\\\\.\\\\.|<|>|(?:=|:|\\\\?|\\\\+|-|\\\\*|\\\\/|%|<|>)?=|!=\"\n        },\n        {\n            token: \"keyword.operator.stylus\",\n            regex: \"(?:in|is(?:nt)?|not)\\\\b\"\n        },\n        {\n            token : \"string\",\n            regex : \"'(?=.)\",\n            next  : \"qstring\"\n        }, {\n            token : \"string\",\n            regex : '\"(?=.)',\n            next  : \"qqstring\"\n        }, \n        {\n            token : \"constant.numeric\",\n            regex : CssHighlightRules.numRe\n        }, \n        {\n            token : \"keyword\",\n            regex : \"(?:ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\\\\b\"\n        }, \n        {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }\n    ],\n    \"comment\" : [\n        {\n            token : \"comment\", // closing comment\n            regex : \"\\\\*\\\\/\",\n            next : \"start\"\n        }, {\n            defaultToken : \"comment\"\n        }\n    ],\n    \"qqstring\" : [\n        {\n            token : \"string\",\n            regex : '[^\"\\\\\\\\]+'\n        }, \n        {\n            token : \"string\",\n            regex : \"\\\\\\\\$\",\n            next  : \"qqstring\"\n        }, \n        {\n            token : \"string\",\n            regex : '\"|$',\n            next  : \"start\"\n        }\n    ],\n    \"qstring\" : [\n        {\n            token : \"string\",\n            regex : \"[^'\\\\\\\\]+\"\n        }, \n        {\n            token : \"string\",\n            regex : \"\\\\\\\\$\",\n            next  : \"qstring\"\n        }, \n        {\n            token : \"string\",\n            regex : \"'|$\",\n            next  : \"start\"\n        }\n    ]\n};\n\n};\n\noop.inherits(StylusHighlightRules, TextHighlightRules);\n\nexports.StylusHighlightRules = StylusHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/svg.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar XmlMode = require(\"./xml\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar SvgHighlightRules = require(\"./svg_highlight_rules\").SvgHighlightRules;\nvar MixedFoldMode = require(\"./folding/mixed\").FoldMode;\nvar XmlFoldMode = require(\"./folding/xml\").FoldMode;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    XmlMode.call(this);\n    \n    this.HighlightRules = SvgHighlightRules;\n    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode\n    });\n    \n    this.foldingRules = new MixedFoldMode(new XmlFoldMode(), {\n        \"js-\": new CStyleFoldMode()\n    });\n};\n\noop.inherits(Mode, XmlMode);\n\n(function() {\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n    \n\n    this.$id = \"ace/mode/svg\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/svg_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar SvgHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.embedTagRules(JavaScriptHighlightRules, \"js-\", \"script\");\n\n    this.normalizeRules();\n};\n\noop.inherits(SvgHighlightRules, XmlHighlightRules);\n\nexports.SvgHighlightRules = SvgHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/swift.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar HighlightRules = require(\"./swift_highlight_rules\").HighlightRules;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\n// TODO: pick appropriate fold mode\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = HighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = new CstyleBehaviour();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\", nestable: true};\n    \n    this.$id = \"ace/mode/swift\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});"
  },
  {
    "path": "lib/ace/mode/swift_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar SwiftHighlightRules = function() {\n   var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"\",\n        \"keyword\": \"__COLUMN__|__FILE__|__FUNCTION__|__LINE__\"\n            + \"|as|associativity|break|case|class|continue|default|deinit|didSet\"\n            + \"|do|dynamicType|else|enum|extension|fallthrough|for|func|get|if|import\"\n            + \"|in|infix|init|inout|is|left|let|let|mutating|new|none|nonmutating\"\n            + \"|operator|override|postfix|precedence|prefix|protocol|return|right\"\n            + \"|safe|Self|self|set|struct|subscript|switch|Type|typealias\"\n            + \"|unowned|unsafe|var|weak|where|while|willSet\"\n            + \"|convenience|dynamic|final|infix|lazy|mutating|nonmutating|optional|override|postfix\"\n            + \"|prefix|required|static|guard|defer\",\n        \"storage.type\": \"bool|double|Double\"\n            + \"|extension|float|Float|int|Int|private|public|string|String\",\n        \"constant.language\":\n            \"false|Infinity|NaN|nil|no|null|null|off|on|super|this|true|undefined|yes\",\n        \"support.function\":\n            \"\"\n    }, \"identifier\");\n    \n    function string(start, options) {\n        var nestable = options.nestable || options.interpolation;\n        var interpStart = options.interpolation && options.interpolation.nextState || \"start\";\n        var mainRule = {\n            regex: start + (options.multiline ? \"\" : \"(?=.)\"),\n            token: \"string.start\"\n        };\n        var nextState = [\n            options.escape && {\n                regex: options.escape,\n                token: \"character.escape\"\n            },\n            options.interpolation && {\n                token : \"paren.quasi.start\",\n                regex : lang.escapeRegExp(options.interpolation.lead + options.interpolation.open),\n                push  : interpStart\n            },\n            options.error && {\n                regex: options.error,\n                token: \"error.invalid\"\n            }, \n            {\n                regex: start + (options.multiline ? \"\" : \"|$\"),\n                token: \"string.end\",\n                next: nestable ? \"pop\" : \"start\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ].filter(Boolean);\n        \n        if (nestable)\n            mainRule.push = nextState;\n        else\n            mainRule.next = nextState;\n        \n        if (!options.interpolation)\n            return mainRule;\n        \n        var open = options.interpolation.open;\n        var close = options.interpolation.close;\n        var counter = {\n            regex: \"[\" + lang.escapeRegExp(open + close) + \"]\",\n            onMatch: function(val, state, stack) {\n                this.next = val == open ? this.nextState : \"\";\n                if (val == open && stack.length) {\n                    stack.unshift(\"start\", state);\n                    return \"paren\";\n                }\n                if (val == close && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == open ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: interpStart\n        }; \n        return [counter, mainRule];\n    }\n    \n    function comments() {\n        return [{\n                token : \"comment\",\n                regex : \"\\\\/\\\\/(?=.)\",\n                next : [\n                    DocCommentHighlightRules.getTagRule(),\n                    {token : \"comment\", regex : \"$|^\", next: \"start\"},\n                    {defaultToken : \"comment\", caseInsensitive: true}\n                ]\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment.start\",\n                regex : /\\/\\*/,\n                stateName: \"nested_comment\",\n                push : [\n                    DocCommentHighlightRules.getTagRule(),\n                    {token : \"comment.start\", regex : /\\/\\*/, push: \"nested_comment\"},\n                    {token : \"comment.end\", regex : \"\\\\*\\\\/\", next : \"pop\"},\n                    {defaultToken : \"comment\", caseInsensitive: true}\n                ]\n            }\n        ];\n    }\n    \n\n    this.$rules = {\n        start: [\n            string('\"', {\n                escape: /\\\\(?:[0\\\\tnr\"']|u{[a-fA-F1-9]{0,8}})/,\n                interpolation: {lead: \"\\\\\", open: \"(\", close: \")\"},\n                error: /\\\\./,\n                multiline: false\n            }),\n            comments(),\n            {\n                 regex: /@[a-zA-Z_$][a-zA-Z_$\\d\\u0080-\\ufffe]*/,\n                 token: \"variable.parameter\"\n            },\n            {\n                regex: /[a-zA-Z_$][a-zA-Z_$\\d\\u0080-\\ufffe]*/,\n                token: keywordMapper\n            },  \n            {\n                token : \"constant.numeric\", \n                regex : /[+-]?(?:0(?:b[01]+|o[0-7]+|x[\\da-fA-F])|\\d+(?:(?:\\.\\d*)?(?:[PpEe][+-]?\\d+)?)\\b)/\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            } \n            \n        ]\n    };\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n    \n    this.normalizeRules();\n};\n\n\noop.inherits(SwiftHighlightRules, TextHighlightRules);\n\nexports.HighlightRules = SwiftHighlightRules;\n});"
  },
  {
    "path": "lib/ace/mode/tcl.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar TclHighlightRules = require(\"./tcl_highlight_rules\").TclHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\n\nvar Mode = function() {\n    this.HighlightRules = TclHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.foldingRules = new CStyleFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"#\";\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n        \n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/tcl\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/tcl_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar TclHighlightRules = function() {\n\n    //TODO var builtinFunctions = \"\";\n\n    this.$rules = {\n        \"start\" : [\n           {\n                token : \"comment\",\n                regex : \"#.*\\\\\\\\$\",\n                next  : \"commentfollow\"\n            }, {\n                token : \"comment\",\n                regex : \"#.*$\"\n            }, {\n                token : \"support.function\",\n                regex : '[\\\\\\\\]$',\n                next  : \"splitlineStart\"\n            }, {\n                token : \"text\",\n                regex : /\\\\(?:[\"{}\\[\\]$\\\\])/\n            }, {\n                token : \"text\", // last value before command\n                regex : '^|[^{][;][^}]|[/\\r/]',\n                next  : \"commandItem\"\n            }, {\n                token : \"string\", // single line\n                regex : '[ ]*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // multi line \"\"\" string start\n                regex : '[ ]*[\"]',\n                next  : \"qqstring\"\n            }, {\n                token : \"variable.instance\",\n                regex : \"[$]\",\n                next  : \"variable\"\n            }, {\n                token : \"support.function\",\n                regex : \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|{\\\\*}|;|::\"\n            }, {\n                token : \"identifier\",\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[{]\",\n                next  : \"commandItem\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[(]\"\n            },  {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"commandItem\" : [\n            {\n                token : \"comment\",\n                regex : \"#.*\\\\\\\\$\",\n                next  : \"commentfollow\"\n            }, {\n                token : \"comment\",\n                regex : \"#.*$\",\n                next  : \"start\"\n            }, {\n                token : \"string\", // single line\n                regex : '[ ]*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"variable.instance\", \n                regex : \"[$]\",\n                next  : \"variable\"\n            }, {\n                token : \"support.function\",\n                regex : \"(?:[:][:])[a-zA-Z0-9_/]+(?:[:][:])\",\n                next  : \"commandItem\"\n            }, {\n                token : \"support.function\",\n                regex : \"[a-zA-Z0-9_/]+(?:[:][:])\",\n                next  : \"commandItem\"\n            }, {\n                token : \"support.function\",\n                regex : \"(?:[:][:])\",\n                next  : \"commandItem\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"support.function\",\n                regex : \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|{\\\\*}|;|::\"\n            }, {\n                token : \"keyword\",\n                regex : \"[a-zA-Z0-9_/]+\",\n                next  : \"start\"\n            } ],\n        \"commentfollow\" : [ \n            {\n                token : \"comment\",\n                regex : \".*\\\\\\\\$\",\n                next  : \"commentfollow\"\n            }, {\n                token : \"comment\",\n                regex : '.+',\n                next  : \"start\"\n        } ],\n        \"splitlineStart\" : [ \n            {\n                token : \"text\",\n                regex : \"^.\",\n                next  : \"start\"\n            }],\n        \"variable\" : [ \n            {\n                token : \"variable.instance\", // variable tcl\n                regex : \"[a-zA-Z_\\\\d]+(?:[(][a-zA-Z_\\\\d]+[)])?\",\n                next  : \"start\"\n            }, {\n                token : \"variable.instance\", // variable tcl with braces\n                regex : \"{?[a-zA-Z_\\\\d]+}?\",\n                next  : \"start\"\n            }],  \n        \"qqstring\" : [ {\n            token : \"string\", // multi line \"\"\" string end\n            regex : '(?:[^\\\\\\\\]|\\\\\\\\.)*?[\"]',\n            next : \"start\"\n        }, {\n            token : \"string\",\n            regex : '.+'\n        } ]\n    };\n};\n\noop.inherits(TclHighlightRules, TextHighlightRules);\n\nexports.TclHighlightRules = TclHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/tex.js",
    "content": "/*\n * tex.js\n *\n * Copyright (C) 2009-11 by RStudio, Inc.\n *\n * The Initial Developer of the Original Code is\n * Ajax.org B.V.\n * Portions created by the Initial Developer are Copyright (C) 2010\n * the Initial Developer. All Rights Reserved.\n *\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n *\n */\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar TexHighlightRules = require(\"./tex_highlight_rules\").TexHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\n\nvar Mode = function(suppressHighlighting) {\n    if (suppressHighlighting)\n        this.HighlightRules = TextHighlightRules;\n    else\n        this.HighlightRules = TexHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n   this.lineCommentStart = \"%\";\n   this.getNextLineIndent = function(state, line, tab) {\n      return this.$getIndent(line);\n   };\n\n   this.allowAutoInsert = function() {\n      return false;\n   };\n    this.$id = \"ace/mode/tex\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/tex_highlight_rules.js",
    "content": "/*\n * tex_highlight_rules.js\n *\n * Copyright (C) 2009-11 by RStudio, Inc.\n *\n * The Initial Developer of the Original Code is\n * Ajax.org B.V.\n * Portions created by the Initial Developer are Copyright (C) 2010\n * the Initial Developer. All Rights Reserved.\n *\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n *\n */\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar TexHighlightRules = function(textClass) {\n\n    if (!textClass)\n        textClass = \"text\";\n\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"%.*$\"\n            }, {\n                token : textClass, // non-command\n                regex : \"\\\\\\\\[$&%#\\\\{\\\\}]\"\n            }, {\n                token : \"keyword\", // command\n                regex : \"\\\\\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\\\b\",\n               next : \"nospell\"\n            }, {\n                token : \"keyword\", // command\n                regex : \"\\\\\\\\(?:[a-zA-Z0-9]+|[^a-zA-Z0-9])\"\n            }, {\n               // Obviously these are neither keywords nor operators, but\n               // labelling them as such was the easiest way to get them\n               // to be colored distinctly from regular text\n               token : \"paren.keyword.operator\",\n                regex : \"[[({]\"\n            }, {\n               // Obviously these are neither keywords nor operators, but\n               // labelling them as such was the easiest way to get them\n               // to be colored distinctly from regular text\n               token : \"paren.keyword.operator\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : textClass,\n                regex : \"\\\\s+\"\n            }\n        ],\n        // This mode is necessary to prevent spell checking, but to keep the\n        // same syntax highlighting behavior. The list of commands comes from\n        // Texlipse.\n        \"nospell\" : [\n           {\n               token : \"comment\",\n               regex : \"%.*$\",\n               next : \"start\"\n           }, {\n               token : \"nospell.\" + textClass, // non-command\n               regex : \"\\\\\\\\[$&%#\\\\{\\\\}]\"\n           }, {\n               token : \"keyword\", // command\n               regex : \"\\\\\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\\\b\"\n           }, {\n               token : \"keyword\", // command\n               regex : \"\\\\\\\\(?:[a-zA-Z0-9]+|[^a-zA-Z0-9])\",\n               next : \"start\"\n           }, {\n               token : \"paren.keyword.operator\",\n               regex : \"[[({]\"\n           }, {\n               token : \"paren.keyword.operator\",\n               regex : \"[\\\\])]\"\n           }, {\n               token : \"paren.keyword.operator\",\n               regex : \"}\",\n               next : \"start\"\n           }, {\n               token : \"nospell.\" + textClass,\n               regex : \"\\\\s+\"\n           }, {\n               token : \"nospell.\" + textClass,\n               regex : \"\\\\w+\"\n           }\n        ]\n    };\n};\n\noop.inherits(TexHighlightRules, TextHighlightRules);\n\nexports.TexHighlightRules = TexHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/text.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar Tokenizer = require(\"../tokenizer\").Tokenizer;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar unicode = require(\"../unicode\");\nvar lang = require(\"../lib/lang\");\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar Range = require(\"../range\").Range;\n\nvar Mode = function() {\n    this.HighlightRules = TextHighlightRules;\n};\n\n(function() {\n    this.$defaultBehaviour = new CstyleBehaviour();\n\n    this.tokenRe = new RegExp(\"^[\" + unicode.wordChars + \"\\\\$_]+\", \"g\");\n\n    this.nonTokenRe = new RegExp(\"^(?:[^\" + unicode.wordChars + \"\\\\$_]|\\\\s])+\", \"g\");\n\n    this.getTokenizer = function() {\n        if (!this.$tokenizer) {\n            this.$highlightRules = this.$highlightRules || new this.HighlightRules(this.$highlightRuleConfig);\n            this.$tokenizer = new Tokenizer(this.$highlightRules.getRules());\n        }\n        return this.$tokenizer;\n    };\n\n    this.lineCommentStart = \"\";\n    this.blockComment = \"\";\n\n    this.toggleCommentLines = function(state, session, startRow, endRow) {\n        var doc = session.doc;\n\n        var ignoreBlankLines = true;\n        var shouldRemove = true;\n        var minIndent = Infinity;\n        var tabSize = session.getTabSize();\n        var insertAtTabStop = false;\n\n        if (!this.lineCommentStart) {\n            if (!this.blockComment)\n                return false;\n            var lineCommentStart = this.blockComment.start;\n            var lineCommentEnd = this.blockComment.end;\n            var regexpStart = new RegExp(\"^(\\\\s*)(?:\" + lang.escapeRegExp(lineCommentStart) + \")\");\n            var regexpEnd = new RegExp(\"(?:\" + lang.escapeRegExp(lineCommentEnd) + \")\\\\s*$\");\n\n            var comment = function(line, i) {\n                if (testRemove(line, i))\n                    return;\n                if (!ignoreBlankLines || /\\S/.test(line)) {\n                    doc.insertInLine({row: i, column: line.length}, lineCommentEnd);\n                    doc.insertInLine({row: i, column: minIndent}, lineCommentStart);\n                }\n            };\n\n            var uncomment = function(line, i) {\n                var m;\n                if (m = line.match(regexpEnd))\n                    doc.removeInLine(i, line.length - m[0].length, line.length);\n                if (m = line.match(regexpStart))\n                    doc.removeInLine(i, m[1].length, m[0].length);\n            };\n\n            var testRemove = function(line, row) {\n                if (regexpStart.test(line))\n                    return true;\n                var tokens = session.getTokens(row);\n                for (var i = 0; i < tokens.length; i++) {\n                    if (tokens[i].type === \"comment\")\n                        return true;\n                }\n            };\n        } else {\n            if (Array.isArray(this.lineCommentStart)) {\n                var regexpStart = this.lineCommentStart.map(lang.escapeRegExp).join(\"|\");\n                var lineCommentStart = this.lineCommentStart[0];\n            } else {\n                var regexpStart = lang.escapeRegExp(this.lineCommentStart);\n                var lineCommentStart = this.lineCommentStart;\n            }\n            regexpStart = new RegExp(\"^(\\\\s*)(?:\" + regexpStart + \") ?\");\n            \n            insertAtTabStop = session.getUseSoftTabs();\n\n            var uncomment = function(line, i) {\n                var m = line.match(regexpStart);\n                if (!m) return;\n                var start = m[1].length, end = m[0].length;\n                if (!shouldInsertSpace(line, start, end) && m[0][end - 1] == \" \")\n                    end--;\n                doc.removeInLine(i, start, end);\n            };\n            var commentWithSpace = lineCommentStart + \" \";\n            var comment = function(line, i) {\n                if (!ignoreBlankLines || /\\S/.test(line)) {\n                    if (shouldInsertSpace(line, minIndent, minIndent))\n                        doc.insertInLine({row: i, column: minIndent}, commentWithSpace);\n                    else\n                        doc.insertInLine({row: i, column: minIndent}, lineCommentStart);\n                }\n            };\n            var testRemove = function(line, i) {\n                return regexpStart.test(line);\n            };\n            \n            var shouldInsertSpace = function(line, before, after) {\n                var spaces = 0;\n                while (before-- && line.charAt(before) == \" \")\n                    spaces++;\n                if (spaces % tabSize != 0)\n                    return false;\n                var spaces = 0;\n                while (line.charAt(after++) == \" \")\n                    spaces++;\n                if (tabSize > 2)\n                    return spaces % tabSize != tabSize - 1;\n                else\n                    return spaces % tabSize == 0;\n            };\n        }\n\n        function iter(fun) {\n            for (var i = startRow; i <= endRow; i++)\n                fun(doc.getLine(i), i);\n        }\n\n\n        var minEmptyLength = Infinity;\n        iter(function(line, i) {\n            var indent = line.search(/\\S/);\n            if (indent !== -1) {\n                if (indent < minIndent)\n                    minIndent = indent;\n                if (shouldRemove && !testRemove(line, i))\n                    shouldRemove = false;\n            } else if (minEmptyLength > line.length) {\n                minEmptyLength = line.length;\n            }\n        });\n\n        if (minIndent == Infinity) {\n            minIndent = minEmptyLength;\n            ignoreBlankLines = false;\n            shouldRemove = false;\n        }\n\n        if (insertAtTabStop && minIndent % tabSize != 0)\n            minIndent = Math.floor(minIndent / tabSize) * tabSize;\n\n        iter(shouldRemove ? uncomment : comment);\n    };\n\n    this.toggleBlockComment = function(state, session, range, cursor) {\n        var comment = this.blockComment;\n        if (!comment)\n            return;\n        if (!comment.start && comment[0])\n            comment = comment[0];\n\n        var iterator = new TokenIterator(session, cursor.row, cursor.column);\n        var token = iterator.getCurrentToken();\n\n        var sel = session.selection;\n        var initialRange = session.selection.toOrientedRange();\n        var startRow, colDiff;\n\n        if (token && /comment/.test(token.type)) {\n            var startRange, endRange;\n            while (token && /comment/.test(token.type)) {\n                var i = token.value.indexOf(comment.start);\n                if (i != -1) {\n                    var row = iterator.getCurrentTokenRow();\n                    var column = iterator.getCurrentTokenColumn() + i;\n                    startRange = new Range(row, column, row, column + comment.start.length);\n                    break;\n                }\n                token = iterator.stepBackward();\n            }\n\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            while (token && /comment/.test(token.type)) {\n                var i = token.value.indexOf(comment.end);\n                if (i != -1) {\n                    var row = iterator.getCurrentTokenRow();\n                    var column = iterator.getCurrentTokenColumn() + i;\n                    endRange = new Range(row, column, row, column + comment.end.length);\n                    break;\n                }\n                token = iterator.stepForward();\n            }\n            if (endRange)\n                session.remove(endRange);\n            if (startRange) {\n                session.remove(startRange);\n                startRow = startRange.start.row;\n                colDiff = -comment.start.length;\n            }\n        } else {\n            colDiff = comment.start.length;\n            startRow = range.start.row;\n            session.insert(range.end, comment.end);\n            session.insert(range.start, comment.start);\n        }\n        // todo: selection should have ended up in the right place automatically!\n        if (initialRange.start.row == startRow)\n            initialRange.start.column += colDiff;\n        if (initialRange.end.row == startRow)\n            initialRange.end.column += colDiff;\n        session.selection.fromOrientedRange(initialRange);\n    };\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return false;\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n    this.createWorker = function(session) {\n        return null;\n    };\n\n    this.createModeDelegates = function (mapping) {\n        this.$embeds = [];\n        this.$modes = {};\n        for (var i in mapping) {\n            if (mapping[i]) {\n                this.$embeds.push(i);\n                this.$modes[i] = new mapping[i]();\n            }\n        }\n\n        var delegations = [\"toggleBlockComment\", \"toggleCommentLines\", \"getNextLineIndent\", \n            \"checkOutdent\", \"autoOutdent\", \"transformAction\", \"getCompletions\"];\n\n        for (var i = 0; i < delegations.length; i++) {\n            (function(scope) {\n              var functionName = delegations[i];\n              var defaultHandler = scope[functionName];\n              scope[delegations[i]] = function() {\n                  return this.$delegator(functionName, arguments, defaultHandler);\n              };\n            }(this));\n        }\n    };\n\n    this.$delegator = function(method, args, defaultHandler) {\n        var state = args[0];\n        if (typeof state != \"string\")\n            state = state[0];\n        for (var i = 0; i < this.$embeds.length; i++) {\n            if (!this.$modes[this.$embeds[i]]) continue;\n\n            var split = state.split(this.$embeds[i]);\n            if (!split[0] && split[1]) {\n                args[0] = split[1];\n                var mode = this.$modes[this.$embeds[i]];\n                return mode[method].apply(mode, args);\n            }\n        }\n        var ret = defaultHandler.apply(this, args);\n        return defaultHandler ? ret : undefined;\n    };\n\n    this.transformAction = function(state, action, editor, session, param) {\n        if (this.$behaviour) {\n            var behaviours = this.$behaviour.getBehaviours();\n            for (var key in behaviours) {\n                if (behaviours[key][action]) {\n                    var ret = behaviours[key][action].apply(this, arguments);\n                    if (ret) {\n                        return ret;\n                    }\n                }\n            }\n        }\n    };\n    \n    this.getKeywords = function(append) {\n        // this is for autocompletion to pick up regexp'ed keywords\n        if (!this.completionKeywords) {\n            var rules = this.$tokenizer.rules;\n            var completionKeywords = [];\n            for (var rule in rules) {\n                var ruleItr = rules[rule];\n                for (var r = 0, l = ruleItr.length; r < l; r++) {\n                    if (typeof ruleItr[r].token === \"string\") {\n                        if (/keyword|support|storage/.test(ruleItr[r].token))\n                            completionKeywords.push(ruleItr[r].regex);\n                    }\n                    else if (typeof ruleItr[r].token === \"object\") {\n                        for (var a = 0, aLength = ruleItr[r].token.length; a < aLength; a++) {    \n                            if (/keyword|support|storage/.test(ruleItr[r].token[a])) {\n                                // drop surrounding parens\n                                var rule = ruleItr[r].regex.match(/\\(.+?\\)/g)[a];\n                                completionKeywords.push(rule.substr(1, rule.length - 2));\n                            }\n                        }\n                    }\n                }\n            }\n            this.completionKeywords = completionKeywords;\n        }\n        // this is for highlighting embed rules, like HAML/Ruby or Obj-C/C\n        if (!append)\n            return this.$keywordList;\n        return completionKeywords.concat(this.$keywordList || []);\n    };\n    \n    this.$createKeywordList = function() {\n        if (!this.$highlightRules)\n            this.getTokenizer();\n        return this.$keywordList = this.$highlightRules.$keywordList || [];\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var keywords = this.$keywordList || this.$createKeywordList();\n        return keywords.map(function(word) {\n            return {\n                name: word,\n                value: word,\n                score: 0,\n                meta: \"keyword\"\n            };\n        });\n    };\n\n    this.$id = \"ace/mode/text\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/text_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar lang = require(\"../lib/lang\");\n\nvar TextHighlightRules = function() {\n\n    // regexp must not have capturing parentheses\n    // regexps are ordered -> the first match is used\n\n    this.$rules = {\n        \"start\" : [{\n            token : \"empty_line\",\n            regex : '^$'\n        }, {\n            defaultToken : \"text\"\n        }]\n    };\n};\n\n(function() {\n\n    this.addRules = function(rules, prefix) {\n        if (!prefix) {\n            for (var key in rules)\n                this.$rules[key] = rules[key];\n            return;\n        }\n        for (var key in rules) {\n            var state = rules[key];\n            for (var i = 0; i < state.length; i++) {\n                var rule = state[i];\n                if (rule.next || rule.onMatch) {\n                    if (typeof rule.next == \"string\") {\n                        if (rule.next.indexOf(prefix) !== 0)\n                            rule.next = prefix + rule.next;\n                    }\n                    if (rule.nextState && rule.nextState.indexOf(prefix) !== 0)\n                        rule.nextState = prefix + rule.nextState;\n                }\n            }\n            this.$rules[prefix + key] = state;\n        }\n    };\n\n    this.getRules = function() {\n        return this.$rules;\n    };\n\n    this.embedRules = function (HighlightRules, prefix, escapeRules, states, append) {\n        var embedRules = typeof HighlightRules == \"function\"\n            ? new HighlightRules().getRules()\n            : HighlightRules;\n        if (states) {\n            for (var i = 0; i < states.length; i++)\n                states[i] = prefix + states[i];\n        } else {\n            states = [];\n            for (var key in embedRules)\n                states.push(prefix + key);\n        }\n\n        this.addRules(embedRules, prefix);\n\n        if (escapeRules) {\n            var addRules = Array.prototype[append ? \"push\" : \"unshift\"];\n            for (var i = 0; i < states.length; i++)\n                addRules.apply(this.$rules[states[i]], lang.deepCopy(escapeRules));\n        }\n\n        if (!this.$embeds)\n            this.$embeds = [];\n        this.$embeds.push(prefix);\n    };\n\n    this.getEmbeds = function() {\n        return this.$embeds;\n    };\n\n    var pushState = function(currentState, stack) {\n        if (currentState != \"start\" || stack.length)\n            stack.unshift(this.nextState, currentState);\n        return this.nextState;\n    };\n    var popState = function(currentState, stack) {\n        // if (stack[0] === currentState)\n        stack.shift();\n        return stack.shift() || \"start\";\n    };\n\n    this.normalizeRules = function() {\n        var id = 0;\n        var rules = this.$rules;\n        function processState(key) {\n            var state = rules[key];\n            state.processed = true;\n            for (var i = 0; i < state.length; i++) {\n                var rule = state[i];\n                var toInsert = null;\n                if (Array.isArray(rule)) {\n                    toInsert = rule;\n                    rule = {};\n                }\n                if (!rule.regex && rule.start) {\n                    rule.regex = rule.start;\n                    if (!rule.next)\n                        rule.next = [];\n                    rule.next.push({\n                        defaultToken: rule.token\n                    }, {\n                        token: rule.token + \".end\",\n                        regex: rule.end || rule.start,\n                        next: \"pop\"\n                    });\n                    rule.token = rule.token + \".start\";\n                    rule.push = true;\n                }\n                var next = rule.next || rule.push;\n                if (next && Array.isArray(next)) {\n                    var stateName = rule.stateName;\n                    if (!stateName)  {\n                        stateName = rule.token;\n                        if (typeof stateName != \"string\")\n                            stateName = stateName[0] || \"\";\n                        if (rules[stateName])\n                            stateName += id++;\n                    }\n                    rules[stateName] = next;\n                    rule.next = stateName;\n                    processState(stateName);\n                } else if (next == \"pop\") {\n                    rule.next = popState;\n                }\n\n                if (rule.push) {\n                    rule.nextState = rule.next || rule.push;\n                    rule.next = pushState;\n                    delete rule.push;\n                }\n\n                if (rule.rules) {\n                    for (var r in rule.rules) {\n                        if (rules[r]) {\n                            if (rules[r].push)\n                                rules[r].push.apply(rules[r], rule.rules[r]);\n                        } else {\n                            rules[r] = rule.rules[r];\n                        }\n                    }\n                }\n                var includeName = typeof rule == \"string\" ? rule : rule.include;\n                if (includeName) {\n                    if (Array.isArray(includeName))\n                        toInsert = includeName.map(function(x) { return rules[x]; });\n                    else\n                        toInsert = rules[includeName];\n                }\n\n                if (toInsert) {\n                    var args = [i, 1].concat(toInsert);\n                    if (rule.noEscape)\n                        args = args.filter(function(x) {return !x.next;});\n                    state.splice.apply(state, args);\n                    // skip included rules since they are already processed\n                    //i += args.length - 3;\n                    i--;\n                }\n                \n                if (rule.keywordMap) {\n                    rule.token = this.createKeywordMapper(\n                        rule.keywordMap, rule.defaultToken || \"text\", rule.caseInsensitive\n                    );\n                    delete rule.defaultToken;\n                }\n            }\n        }\n        Object.keys(rules).forEach(processState, this);\n    };\n\n    this.createKeywordMapper = function(map, defaultToken, ignoreCase, splitChar) {\n        var keywords = Object.create(null);\n        Object.keys(map).forEach(function(className) {\n            var a = map[className];\n            if (ignoreCase)\n                a = a.toLowerCase();\n            var list = a.split(splitChar || \"|\");\n            for (var i = list.length; i--; )\n                keywords[list[i]] = className;\n        });\n        // in old versions of opera keywords[\"__proto__\"] sets prototype\n        // even on objects with __proto__=null\n        if (Object.getPrototypeOf(keywords)) {\n            keywords.__proto__ = null;\n        }\n        this.$keywordList = Object.keys(keywords);\n        map = null;\n        return ignoreCase\n            ? function(value) {return keywords[value.toLowerCase()] || defaultToken; }\n            : function(value) {return keywords[value] || defaultToken; };\n    };\n\n    this.getKeywords = function() {\n        return this.$keywords;\n    };\n\n}).call(TextHighlightRules.prototype);\n\nexports.TextHighlightRules = TextHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/text_test.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\nif (typeof process !== \"undefined\") {\n    require(\"amd-loader\");\n}\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar EditSession = require(\"../edit_session\").EditSession;\nvar TextMode = require(\"./text\").Mode;\nvar assert = require(\"../test/assertions\");\n\nmodule.exports = {\n    setUp : function() {\n        this.mode = new TextMode();\n    },\n\n    \"test: toggle comment lines should not do anything\" : function() {\n        var session = new EditSession([\"  abc\", \"cde\", \"fg\"]);\n\n        this.mode.toggleCommentLines(\"start\", session, 0, 1);\n        assert.equal([\"  abc\", \"cde\", \"fg\"].join(\"\\n\"), session.toString());\n    },\n\n\n    \"test: lines should be indented\" : function() {\n        assert.equal(\"   \", this.mode.getNextLineIndent(\"start\", \"   abc\", \"  \"));\n    }\n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main) {\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n}\n"
  },
  {
    "path": "lib/ace/mode/textile.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar TextileHighlightRules = require(\"./textile_highlight_rules\").TextileHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\n\nvar Mode = function() {\n    this.HighlightRules = TextileHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.type = \"text\";\n    this.getNextLineIndent = function(state, line, tab) {\n        if (state == \"intag\")\n            return tab;\n        \n        return \"\";\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    \n    this.$id = \"ace/mode/textile\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n"
  },
  {
    "path": "lib/ace/mode/textile_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar TextileHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [\n            {\n                token : function(value) {\n                    if (value.charAt(0) == \"h\")\n                        return \"markup.heading.\" + value.charAt(1);\n                    else\n                        return \"markup.heading\";\n                },\n                regex : \"h1|h2|h3|h4|h5|h6|bq|p|bc|pre\",\n                next  : \"blocktag\"\n            },\n            {\n                token : \"keyword\",\n                regex : \"[\\\\*]+|[#]+\"\n            },\n            {\n                token : \"text\",\n                regex : \".+\"\n            }\n        ],\n        \"blocktag\" : [\n            {\n                token : \"keyword\",\n                regex : \"\\\\. \",\n                next  : \"start\"\n            },\n            {\n                token : \"keyword\",\n                regex : \"\\\\(\",\n                next  : \"blocktagproperties\"\n            }\n        ],\n        \"blocktagproperties\" : [\n            {\n                token : \"keyword\",\n                regex : \"\\\\)\",\n                next  : \"blocktag\"\n            },\n            {\n                token : \"string\",\n                regex : \"[a-zA-Z0-9\\\\-_]+\"\n            },\n            {\n                token : \"keyword\",\n                regex : \"#\"\n            }\n        ]\n    };\n};\n\noop.inherits(TextileHighlightRules, TextHighlightRules);\n\nexports.TextileHighlightRules = TextileHighlightRules;\n\n});\n"
  },
  {
    "path": "lib/ace/mode/toml.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2013, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n *\n * Contributor(s):\n *\n * Garen J. Torikian\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar TomlHighlightRules = require(\"./toml_highlight_rules\").TomlHighlightRules;\nvar FoldMode = require(\"./folding/ini\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = TomlHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"#\";\n    this.$id = \"ace/mode/toml\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});"
  },
  {
    "path": "lib/ace/mode/toml_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2013, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n *\n * Contributor(s):\n *\n * Garen J. Torikian\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar TomlHighlightRules = function() {\n    var keywordMapper = this.createKeywordMapper({\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n\n    var identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\";\n\n    this.$rules = {\n    \"start\": [\n        {\n            token: \"comment.toml\",\n            regex: /#.*$/\n        },\n        {\n            token : \"string\",\n            regex : '\"(?=.)',\n            next  : \"qqstring\"\n        },\n        {\n            token: [\"variable.keygroup.toml\"],\n            regex: \"(?:^\\\\s*)(\\\\[\\\\[([^\\\\]]+)\\\\]\\\\])\"\n        },\n        {\n            token: [\"variable.keygroup.toml\"],\n            regex: \"(?:^\\\\s*)(\\\\[([^\\\\]]+)\\\\])\"\n        },\n        {\n            token : keywordMapper,\n            regex : identifierRe\n        },\n        {\n           token : \"support.date.toml\",\n           regex: \"\\\\d{4}-\\\\d{2}-\\\\d{2}(T)\\\\d{2}:\\\\d{2}:\\\\d{2}(Z)\"\n        },\n        {\n           token: \"constant.numeric.toml\",\n           regex: \"-?\\\\d+(\\\\.?\\\\d+)?\"\n        }\n    ],\n    \"qqstring\" : [\n        {\n            token : \"string\",\n            regex : \"\\\\\\\\$\",\n            next  : \"qqstring\"\n        },\n        {\n            token : \"constant.language.escape\",\n            regex : '\\\\\\\\[0tnr\"\\\\\\\\]'\n        },\n        {\n            token : \"string\",\n            regex : '\"|$',\n            next  : \"start\"\n        },\n        {\n            defaultToken: \"string\"\n        }\n    ]\n    };\n\n};\n\noop.inherits(TomlHighlightRules, TextHighlightRules);\n\nexports.TomlHighlightRules = TomlHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/tsx.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar tsMode = require(\"./typescript\").Mode;\n\nvar Mode = function() {\n    tsMode.call(this);\n    this.$highlightRuleConfig = {jsx: true};\n};\noop.inherits(Mode, tsMode);\n\n(function() {\n    this.$id = \"ace/mode/tsx\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});"
  },
  {
    "path": "lib/ace/mode/turtle.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar TurtleHighlightRules = require(\"./turtle_highlight_rules\").TurtleHighlightRules;\n// TODO: pick appropriate fold mode\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = TurtleHighlightRules;\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    // this.lineCommentStart = \"\"#\"\";\n    // Extra logic goes here.\n    this.$id = \"ace/mode/turtle\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});"
  },
  {
    "path": "lib/ace/mode/turtle_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/* This file was autogenerated from turtle.tmLanguage (uuid: ) */\n/****************************************************************************************\n * IT MIGHT NOT BE PERFECT ...But it's a good start from an existing *.tmlanguage file. *\n * fileTypes                                                                            *\n ****************************************************************************************/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar TurtleHighlightRules = function() {\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = {\n        start: [{\n            include: \"#comments\"\n        }, {\n            include: \"#strings\"\n        }, {\n            include: \"#base-prefix-declarations\"\n        }, {\n            include: \"#string-language-suffixes\"\n        }, {\n            include: \"#string-datatype-suffixes\"\n        }, {\n            include: \"#relative-urls\"\n        }, {\n            include: \"#xml-schema-types\"\n        }, {\n            include: \"#rdf-schema-types\"\n        }, {\n            include: \"#owl-types\"\n        }, {\n            include: \"#qnames\"\n        }, {\n            include: \"#punctuation-operators\"\n        }],\n        \"#base-prefix-declarations\": [{\n            token: \"keyword.other.prefix.turtle\",\n            regex: /@(?:base|prefix)/\n        }],\n        \"#comments\": [{\n            token: [\n                \"punctuation.definition.comment.turtle\",\n                \"comment.line.hash.turtle\"\n            ],\n            regex: /(#)(.*$)/\n        }],\n        \"#owl-types\": [{\n            token: \"support.type.datatype.owl.turtle\",\n            regex: /owl:[a-zA-Z]+/\n        }],\n        \"#punctuation-operators\": [{\n            token: \"keyword.operator.punctuation.turtle\",\n            regex: /;|,|\\.|\\(|\\)|\\[|\\]/\n        }],\n        \"#qnames\": [{\n            token: \"entity.name.other.qname.turtle\",\n            regex: /(?:[a-zA-Z][-_a-zA-Z0-9]*)?:(?:[_a-zA-Z][-_a-zA-Z0-9]*)?/\n        }],\n        \"#rdf-schema-types\": [{\n            token: \"support.type.datatype.rdf.schema.turtle\",\n            regex: /rdfs?:[a-zA-Z]+|(?:^|\\s)a(?:\\s|$)/\n        }],\n        \"#relative-urls\": [{\n            token: \"string.quoted.other.relative.url.turtle\",\n            regex: /</,\n            push: [{\n                token: \"string.quoted.other.relative.url.turtle\",\n                regex: />/,\n                next: \"pop\"\n            }, {\n                defaultToken: \"string.quoted.other.relative.url.turtle\"\n            }]\n        }],\n        \"#string-datatype-suffixes\": [{\n            token: \"keyword.operator.datatype.suffix.turtle\",\n            regex: /\\^\\^/\n        }],\n        \"#string-language-suffixes\": [{\n            token: [\n                \"keyword.operator.language.suffix.turtle\",\n                \"constant.language.suffix.turtle\"\n            ],\n            regex: /(?!\")(@)([a-z]+(?:\\-[a-z0-9]+)*)/\n        }],\n        \"#strings\": [{\n            token: \"string.quoted.triple.turtle\",\n            regex: /\"\"\"/,\n            push: [{\n                token: \"string.quoted.triple.turtle\",\n                regex: /\"\"\"/,\n                next: \"pop\"\n            }, {\n                defaultToken: \"string.quoted.triple.turtle\"\n            }]\n        }, {\n            token: \"string.quoted.double.turtle\",\n            regex: /\"/,\n            push: [{\n                token: \"string.quoted.double.turtle\",\n                regex: /\"/,\n                next: \"pop\"\n            }, {\n                token: \"invalid.string.newline\",\n                regex: /$/\n            }, {\n                token: \"constant.character.escape.turtle\",\n                regex: /\\\\./\n            }, {\n                defaultToken: \"string.quoted.double.turtle\"\n            }]\n        }],\n        \"#xml-schema-types\": [{\n            token: \"support.type.datatype.xml.schema.turtle\",\n            regex: /xsd?:[a-z][a-zA-Z]+/\n        }]\n    };\n    \n    this.normalizeRules();\n};\n\nTurtleHighlightRules.metaData = {\n    fileTypes: [\"ttl\", \"nt\"],\n    name: \"Turtle\",\n    scopeName: \"source.turtle\"\n};\n\n\noop.inherits(TurtleHighlightRules, TextHighlightRules);\n\nexports.TurtleHighlightRules = TurtleHighlightRules;\n});"
  },
  {
    "path": "lib/ace/mode/twig.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2013, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlMode = require(\"./html\").Mode;\nvar TwigHighlightRules = require(\"./twig_highlight_rules\").TwigHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\n\nvar Mode = function() {\n    HtmlMode.call(this);\n    this.HighlightRules = TwigHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n};\noop.inherits(Mode, HtmlMode);\n\n(function() {\n    this.blockComment = {start: \"{#\", end: \"#}\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.$id = \"ace/mode/twig\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});"
  },
  {
    "path": "lib/ace/mode/twig_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2013, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar TwigHighlightRules = function() {\n    // inherit from html\n    HtmlHighlightRules.call(this);\n\n    var tags = \"autoescape|block|do|embed|extends|filter|flush|for|from|if|import|include|macro|sandbox|set|spaceless|use|verbatim\";\n    tags = tags + \"|end\" + tags.replace(/\\|/g, \"|end\");\n    var filters = \"abs|batch|capitalize|convert_encoding|date|date_modify|default|e|escape|first|format|join|json_encode|keys|last|length|lower|merge|nl2br|number_format|raw|replace|reverse|slice|sort|split|striptags|title|trim|upper|url_encode\";\n    var functions = \"attribute|constant|cycle|date|dump|parent|random|range|template_from_string\";\n    var tests = \"constant|divisibleby|sameas|defined|empty|even|iterable|odd\";\n    var constants = \"null|none|true|false\";\n    var operators = \"b-and|b-xor|b-or|in|is|and|or|not\";\n\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword.control.twig\": tags,\n        \"support.function.twig\": [filters, functions, tests].join(\"|\"),\n        \"keyword.operator.twig\":  operators,\n        \"constant.language.twig\": constants\n    }, \"identifier\");\n\n    // add twig start tags to the HTML start tags\n    for (var rule in this.$rules) {\n        this.$rules[rule].unshift({\n            token : \"variable.other.readwrite.local.twig\",\n            regex : \"\\\\{\\\\{-?\",\n            push : \"twig-start\"\n        }, {\n            token : \"meta.tag.twig\",\n            regex : \"\\\\{%-?\",\n            push : \"twig-start\"\n        }, {\n            token : \"comment.block.twig\",\n            regex : \"\\\\{#-?\",\n            push : \"twig-comment\"\n        });\n    }\n\n    // add twig closing comment to HTML comments\n    this.$rules[\"twig-comment\"] = [{\n        token : \"comment.block.twig\",\n        regex : \".*-?#\\\\}\",\n        next : \"pop\"\n    }];\n\n    this.$rules[\"twig-start\"] = [{\n        token : \"variable.other.readwrite.local.twig\",\n        regex : \"-?\\\\}\\\\}\",\n        next : \"pop\"\n    }, {\n        token : \"meta.tag.twig\",\n        regex : \"-?%\\\\}\",\n        next : \"pop\"\n    }, {\n        token : \"string\",\n        regex : \"'\",\n        next  : \"twig-qstring\"\n    }, {\n        token : \"string\",\n        regex : '\"',\n        next  : \"twig-qqstring\"\n    }, {\n        token : \"constant.numeric\", // hex\n        regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n    }, {\n        token : \"constant.numeric\", // float\n        regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n    }, {\n        token : \"constant.language.boolean\",\n        regex : \"(?:true|false)\\\\b\"\n    }, {\n        token : keywordMapper,\n        regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n    }, {\n        token : \"keyword.operator.assignment\",\n        regex : \"=|~\"\n    }, {\n        token : \"keyword.operator.comparison\",\n        regex : \"==|!=|<|>|>=|<=|===\"\n    }, {\n        token : \"keyword.operator.arithmetic\",\n        regex : \"\\\\+|-|/|%|//|\\\\*|\\\\*\\\\*\"\n    }, {\n        token : \"keyword.operator.other\",\n        regex : \"\\\\.\\\\.|\\\\|\"\n    }, {\n        token : \"punctuation.operator\",\n        regex : /\\?|:|,|;|\\./\n    }, {\n        token : \"paren.lparen\",\n        regex : /[\\[\\({]/\n    }, {\n        token : \"paren.rparen\",\n        regex : /[\\])}]/\n    }, {\n        token : \"text\",\n        regex : \"\\\\s+\"\n    } ];\n\n    this.$rules[\"twig-qqstring\"] = [{\n            token : \"constant.language.escape\",\n            regex : /\\\\[\\\\\"$#ntr]|#{[^\"}]*}/\n        }, {\n            token : \"string\",\n            regex : '\"',\n            next  : \"twig-start\"\n        }, {\n            defaultToken : \"string\"\n        }\n    ];\n\n    this.$rules[\"twig-qstring\"] = [{\n            token : \"constant.language.escape\",\n            regex : /\\\\[\\\\'ntr]}/\n        }, {\n            token : \"string\",\n            regex : \"'\",\n            next  : \"twig-start\"\n        }, {\n            defaultToken : \"string\"\n        }\n    ];\n\n    this.normalizeRules();\n};\n\noop.inherits(TwigHighlightRules, TextHighlightRules);\n\nexports.TwigHighlightRules = TwigHighlightRules;\n});"
  },
  {
    "path": "lib/ace/mode/typescript.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar jsMode = require(\"./javascript\").Mode;\nvar TypeScriptHighlightRules = require(\"./typescript_highlight_rules\").TypeScriptHighlightRules;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\n\nvar Mode = function() {\n    this.HighlightRules = TypeScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, jsMode);\n\n(function() {\n    this.createWorker = function(session) {\n        return null;\n    };\n    this.$id = \"ace/mode/typescript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});"
  },
  {
    "path": "lib/ace/mode/typescript_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE    \n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n *\n * Contributor(s):\n *\n * Garen J. Torikian <gjtorikian AT gmail DOT com>\n * \n *\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*\n  THIS FILE WAS AUTOGENERATED BY mode_highlight_rules.tmpl.js (UUID: 21e323af-f665-4161-96e7-5087d262557e) */\n\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\n\nvar TypeScriptHighlightRules = function(options) {\n\n    var tsRules =  [\n        // Match stuff like: module name {...}\n        {\n            token: [\"keyword.operator.ts\", \"text\", \"variable.parameter.function.ts\", \"text\"],\n            regex: \"\\\\b(module)(\\\\s*)([a-zA-Z0-9_?.$][\\\\w?.$]*)(\\\\s*\\\\{)\"\n        }, \n        // Match stuff like: super(argument, list)\n        {\n            token: [\"storage.type.variable.ts\", \"text\", \"keyword.other.ts\", \"text\"],\n            regex: \"(super)(\\\\s*\\\\()([a-zA-Z0-9,_?.$\\\\s]+\\\\s*)(\\\\))\"\n        },\n        // Match stuff like: function() {...}\n        {\n            token: [\"entity.name.function.ts\",\"paren.lparen\", \"paren.rparen\"],\n            regex: \"([a-zA-Z_?.$][\\\\w?.$]*)(\\\\()(\\\\))\"\n        },\n        // Match stuff like: (function: return type)\n        {\n            token: [\"variable.parameter.function.ts\", \"text\", \"variable.parameter.function.ts\"],\n            regex: \"([a-zA-Z0-9_?.$][\\\\w?.$]*)(\\\\s*:\\\\s*)([a-zA-Z0-9_?.$][\\\\w?.$]*)\"\n        },  \n        {\n            token: [\"keyword.operator.ts\"],\n            regex: \"(?:\\\\b(constructor|declare|interface|as|AS|public|private|class|extends|export|super)\\\\b)\"\n        }, \n        {\n            token: [\"storage.type.variable.ts\"],\n            regex: \"(?:\\\\b(this\\\\.|string\\\\b|bool\\\\b|number)\\\\b)\"\n        }, \n        {\n            token: [\"keyword.operator.ts\", \"storage.type.variable.ts\", \"keyword.operator.ts\", \"storage.type.variable.ts\"],\n            regex: \"(class)(\\\\s+[a-zA-Z0-9_?.$][\\\\w?.$]*\\\\s+)(extends)(\\\\s+[a-zA-Z0-9_?.$][\\\\w?.$]*\\\\s+)?\"\n        },\n        {\n            token: \"keyword\",\n            regex: \"(?:super|export|class|extends|import)\\\\b\"\n        }\n    ];\n\n    var JSRules = new JavaScriptHighlightRules({jsx: (options && options.jsx) == true}).getRules();\n    \n    JSRules.start = tsRules.concat(JSRules.start);\n    this.$rules = JSRules;\n};\n\noop.inherits(TypeScriptHighlightRules, JavaScriptHighlightRules);\n\nexports.TypeScriptHighlightRules = TypeScriptHighlightRules;\n});"
  },
  {
    "path": "lib/ace/mode/vala.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar Tokenizer = require(\"../tokenizer\").Tokenizer;\nvar ValaHighlightRules = require(\"./vala_highlight_rules\").ValaHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\n\nvar Mode = function() {\n    this.HighlightRules = ValaHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    // Extra logic goes here.\n    this.$id = \"ace/mode/vala\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});"
  },
  {
    "path": "lib/ace/mode/vala_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/* This file was autogenerated from https://raw.githubusercontent.com/technosophos/Vala-TMBundle/master/Syntaxes/Vala.tmLanguage (uuid: ) */\n/****************************************************************************************\n * IT MIGHT NOT BE PERFECT ...But it's a good start from an existing *.tmlanguage file. *\n * fileTypes                                                                            *\n ****************************************************************************************/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar ValaHighlightRules = function() {\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = { start: \n       [ { token: \n            [ 'meta.using.vala',\n              'keyword.other.using.vala',\n              'meta.using.vala',\n              'storage.modifier.using.vala',\n              'meta.using.vala',\n              'punctuation.terminator.vala' ],\n           regex: '^(\\\\s*)(using)\\\\b(?:(\\\\s*)([^ ;$]+)(\\\\s*)((?:;)?))?' },\n         { include: '#code' } ],\n      '#all-types': \n       [ { include: '#primitive-arrays' },\n         { include: '#primitive-types' },\n         { include: '#object-types' } ],\n      '#annotations': \n       [ { token: \n            [ 'storage.type.annotation.vala',\n              'punctuation.definition.annotation-arguments.begin.vala' ],\n           regex: '(@[^ (]+)(\\\\()',\n           push: \n            [ { token: 'punctuation.definition.annotation-arguments.end.vala',\n                regex: '\\\\)',\n                next: 'pop' },\n              { token: \n                 [ 'constant.other.key.vala',\n                   'text',\n                   'keyword.operator.assignment.vala' ],\n                regex: '(\\\\w*)(\\\\s*)(=)' },\n              { include: '#code' },\n              { token: 'punctuation.seperator.property.vala', regex: ',' },\n              { defaultToken: 'meta.declaration.annotation.vala' } ] },\n         { token: 'storage.type.annotation.vala', regex: '@\\\\w*' } ],\n      '#anonymous-classes-and-new': \n       [ { token: 'keyword.control.new.vala',\n           regex: '\\\\bnew\\\\b',\n           push_disabled: \n            [ { token: 'text',\n                regex: '(?<=\\\\)|\\\\])(?!\\\\s*{)|(?<=})|(?=;)',\n                TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n                originalRegex: '(?<=\\\\)|\\\\])(?!\\\\s*{)|(?<=})|(?=;)',\n                next: 'pop' },\n              { token: [ 'storage.type.vala', 'text' ],\n                regex: '(\\\\w+)(\\\\s*)(?=\\\\[)',\n                push: \n                 [ { token: 'text', regex: '}|(?=;|\\\\))', next: 'pop' },\n                   { token: 'text',\n                     regex: '\\\\[',\n                     push: \n                      [ { token: 'text', regex: '\\\\]', next: 'pop' },\n                        { include: '#code' } ] },\n                   { token: 'text',\n                     regex: '{',\n                     push: \n                      [ { token: 'text', regex: '(?=})', next: 'pop' },\n                        { include: '#code' } ] } ] },\n              { token: 'text',\n                regex: '(?=\\\\w.*\\\\()',\n                push: \n                 [ { token: 'text',\n                     regex: '(?<=\\\\))',\n                     TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n                     originalRegex: '(?<=\\\\))',\n                     next: 'pop' },\n                   { include: '#object-types' },\n                   { token: 'text',\n                     regex: '\\\\(',\n                     push: \n                      [ { token: 'text', regex: '\\\\)', next: 'pop' },\n                        { include: '#code' } ] } ] },\n              { token: 'meta.inner-class.vala',\n                regex: '{',\n                push: \n                 [ { token: 'meta.inner-class.vala', regex: '}', next: 'pop' },\n                   { include: '#class-body' },\n                   { defaultToken: 'meta.inner-class.vala' } ] } ] } ],\n      '#assertions': \n       [ { token: \n            [ 'keyword.control.assert.vala',\n              'meta.declaration.assertion.vala' ],\n           regex: '\\\\b(assert|requires|ensures)(\\\\s)',\n           push: \n            [ { token: 'meta.declaration.assertion.vala',\n                regex: '$',\n                next: 'pop' },\n              { token: 'keyword.operator.assert.expression-seperator.vala',\n                regex: ':' },\n              { include: '#code' },\n              { defaultToken: 'meta.declaration.assertion.vala' } ] } ],\n      '#class': \n       [ { token: 'meta.class.vala',\n           regex: '(?=\\\\w?[\\\\w\\\\s]*(?:class|(?:@)?interface|enum|struct|namespace)\\\\s+\\\\w+)',\n           push: \n            [ { token: 'paren.vala',\n                regex: '}',\n                next: 'pop' },\n              { include: '#storage-modifiers' },\n              { include: '#comments' },\n              { token: \n                 [ 'storage.modifier.vala',\n                   'meta.class.identifier.vala',\n                   'entity.name.type.class.vala' ],\n                regex: '(class|(?:@)?interface|enum|struct|namespace)(\\\\s+)([\\\\w\\\\.]+)' },\n              { token: 'storage.modifier.extends.vala',\n                regex: ':',\n                push: \n                 [ { token: 'meta.definition.class.inherited.classes.vala',\n                     regex: '(?={|,)',\n                     next: 'pop' },\n                   { include: '#object-types-inherited' },\n                   { include: '#comments' },\n                   { defaultToken: 'meta.definition.class.inherited.classes.vala' } ] },\n              { token: \n                 [ 'storage.modifier.implements.vala',\n                   'meta.definition.class.implemented.interfaces.vala' ],\n                regex: '(,)(\\\\s)',\n                push: \n                 [ { token: 'meta.definition.class.implemented.interfaces.vala',\n                     regex: '(?=\\\\{)',\n                     next: 'pop' },\n                   { include: '#object-types-inherited' },\n                   { include: '#comments' },\n                   { defaultToken: 'meta.definition.class.implemented.interfaces.vala' } ] },\n              { token: 'paren.vala',\n                regex: '{',\n                push: \n                 [ { token: 'paren.vala', regex: '(?=})', next: 'pop' },\n                   { include: '#class-body' },\n                   { defaultToken: 'meta.class.body.vala' } ] },\n              { defaultToken: 'meta.class.vala' } ],\n           comment: 'attempting to put namespace in here.' } ],\n      '#class-body': \n       [ { include: '#comments' },\n         { include: '#class' },\n         { include: '#enums' },\n         { include: '#methods' },\n         { include: '#annotations' },\n         { include: '#storage-modifiers' },\n         { include: '#code' } ],\n      '#code': \n       [ { include: '#comments' },\n         { include: '#class' },\n         { token: 'text',\n           regex: '{',\n           push: \n            [ { token: 'text', regex: '}', next: 'pop' },\n              { include: '#code' } ] },\n         { include: '#assertions' },\n         { include: '#parens' },\n         { include: '#constants-and-special-vars' },\n         { include: '#anonymous-classes-and-new' },\n         { include: '#keywords' },\n         { include: '#storage-modifiers' },\n         { include: '#strings' },\n         { include: '#all-types' } ],\n      '#comments': \n       [ { token: 'punctuation.definition.comment.vala',\n           regex: '/\\\\*\\\\*/' },\n         { include: 'text.html.javadoc' },\n         { include: '#comments-inline' } ],\n      '#comments-inline': \n       [ { token: 'punctuation.definition.comment.vala',\n           regex: '/\\\\*',\n           push: \n            [ { token: 'punctuation.definition.comment.vala',\n                regex: '\\\\*/',\n                next: 'pop' },\n              { defaultToken: 'comment.block.vala' } ] },\n         { token: \n            [ 'text',\n              'punctuation.definition.comment.vala',\n              'comment.line.double-slash.vala' ],\n           regex: '(\\\\s*)(//)(.*$)' } ],\n      '#constants-and-special-vars': \n       [ { token: 'constant.language.vala',\n           regex: '\\\\b(?:true|false|null)\\\\b' },\n         { token: 'variable.language.vala',\n           regex: '\\\\b(?:this|base)\\\\b' },\n         { token: 'constant.numeric.vala',\n           regex: '\\\\b(?:0(?:x|X)[0-9a-fA-F]*|(?:[0-9]+\\\\.?[0-9]*|\\\\.[0-9]+)(?:(?:e|E)(?:\\\\+|-)?[0-9]+)?)(?:[LlFfUuDd]|UL|ul)?\\\\b' },\n         { token: [ 'keyword.operator.dereference.vala', 'constant.other.vala' ],\n           regex: '((?:\\\\.)?)\\\\b([A-Z][A-Z0-9_]+)(?!<|\\\\.class|\\\\s*\\\\w+\\\\s*=)\\\\b' } ],\n      '#enums': \n       [ { token: 'text',\n           regex: '^(?=\\\\s*[A-Z0-9_]+\\\\s*(?:{|\\\\(|,))',\n           push: \n            [ { token: 'text', regex: '(?=;|})', next: 'pop' },\n              { token: 'constant.other.enum.vala',\n                regex: '\\\\w+',\n                push: \n                 [ { token: 'meta.enum.vala', regex: '(?=,|;|})', next: 'pop' },\n                   { include: '#parens' },\n                   { token: 'text',\n                     regex: '{',\n                     push: \n                      [ { token: 'text', regex: '}', next: 'pop' },\n                        { include: '#class-body' } ] },\n                   { defaultToken: 'meta.enum.vala' } ] } ] } ],\n      '#keywords': \n       [ { token: 'keyword.control.catch-exception.vala',\n           regex: '\\\\b(?:try|catch|finally|throw)\\\\b' },\n         { token: 'keyword.control.vala', regex: '\\\\?|:|\\\\?\\\\?' },\n         { token: 'keyword.control.vala',\n           regex: '\\\\b(?:return|break|case|continue|default|do|while|for|foreach|switch|if|else|in|yield|get|set|value)\\\\b' },\n         { token: 'keyword.operator.vala',\n           regex: '\\\\b(?:typeof|is|as)\\\\b' },\n         { token: 'keyword.operator.comparison.vala',\n           regex: '==|!=|<=|>=|<>|<|>' },\n         { token: 'keyword.operator.assignment.vala', regex: '=' },\n         { token: 'keyword.operator.increment-decrement.vala',\n           regex: '\\\\-\\\\-|\\\\+\\\\+' },\n         { token: 'keyword.operator.arithmetic.vala',\n           regex: '\\\\-|\\\\+|\\\\*|\\\\/|%' },\n         { token: 'keyword.operator.logical.vala', regex: '!|&&|\\\\|\\\\|' },\n         { token: 'keyword.operator.dereference.vala',\n           regex: '\\\\.(?=\\\\S)',\n           originalRegex: '(?<=\\\\S)\\\\.(?=\\\\S)' },\n         { token: 'punctuation.terminator.vala', regex: ';' },\n         { token: 'keyword.operator.ownership', regex: 'owned|unowned' } ],\n      '#methods': \n       [ { token: 'meta.method.vala',\n           regex: '(?!new)(?=\\\\w.*\\\\s+)(?=[^=]+\\\\()',\n           push: \n            [ { token: 'paren.vala', regex: '}|(?=;)', next: 'pop' },\n              { include: '#storage-modifiers' },\n              { token: [ 'entity.name.function.vala', 'meta.method.identifier.vala' ],\n                regex: '([\\\\~\\\\w\\\\.]+)(\\\\s*\\\\()',\n                push: \n                 [ { token: 'meta.method.identifier.vala',\n                     regex: '\\\\)',\n                     next: 'pop' },\n                   { include: '#parameters' },\n                   { defaultToken: 'meta.method.identifier.vala' } ] },\n              { token: 'meta.method.return-type.vala',\n                regex: '(?=\\\\w.*\\\\s+\\\\w+\\\\s*\\\\()',\n                push: \n                 [ { token: 'meta.method.return-type.vala',\n                     regex: '(?=\\\\w+\\\\s*\\\\()',\n                     next: 'pop' },\n                   { include: '#all-types' },\n                   { defaultToken: 'meta.method.return-type.vala' } ] },\n              { include: '#throws' },\n              { token: 'paren.vala',\n                regex: '{',\n                push: \n                 [ { token: 'paren.vala', regex: '(?=})', next: 'pop' },\n                   { include: '#code' },\n                   { defaultToken: 'meta.method.body.vala' } ] },\n              { defaultToken: 'meta.method.vala' } ] } ],\n      '#namespace': \n       [ { token: 'text',\n           regex: '^(?=\\\\s*[A-Z0-9_]+\\\\s*(?:{|\\\\(|,))',\n           push: \n            [ { token: 'text', regex: '(?=;|})', next: 'pop' },\n              { token: 'constant.other.namespace.vala',\n                regex: '\\\\w+',\n                push: \n                 [ { token: 'meta.namespace.vala', regex: '(?=,|;|})', next: 'pop' },\n                   { include: '#parens' },\n                   { token: 'text',\n                     regex: '{',\n                     push: \n                      [ { token: 'text', regex: '}', next: 'pop' },\n                        { include: '#code' } ] },\n                   { defaultToken: 'meta.namespace.vala' } ] } ],\n           comment: 'This is not quite right. See the class grammar right now' } ],\n      '#object-types': \n       [ { token: 'storage.type.generic.vala',\n           regex: '\\\\b(?:[a-z]\\\\w*\\\\.)*[A-Z]+\\\\w*<',\n           push: \n            [ { token: 'storage.type.generic.vala',\n                regex: '>|[^\\\\w\\\\s,\\\\?<\\\\[()\\\\]]',\n                TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n                originalRegex: '>|[^\\\\w\\\\s,\\\\?<\\\\[(?:[,]+)\\\\]]',\n                next: 'pop' },\n              { include: '#object-types' },\n              { token: 'storage.type.generic.vala',\n                regex: '<',\n                push: \n                 [ { token: 'storage.type.generic.vala',\n                     regex: '>|[^\\\\w\\\\s,\\\\[\\\\]<]',\n                     next: 'pop' },\n                   { defaultToken: 'storage.type.generic.vala' } ],\n                comment: 'This is just to support <>\\'s with no actual type prefix' },\n              { defaultToken: 'storage.type.generic.vala' } ] },\n         { token: 'storage.type.object.array.vala',\n           regex: '\\\\b(?:[a-z]\\\\w*\\\\.)*[A-Z]+\\\\w*(?=\\\\[)',\n           push: \n            [ { token: 'storage.type.object.array.vala',\n                regex: '(?=[^\\\\]\\\\s])',\n                next: 'pop' },\n              { token: 'text',\n                regex: '\\\\[',\n                push: \n                 [ { token: 'text', regex: '\\\\]', next: 'pop' },\n                   { include: '#code' } ] },\n              { defaultToken: 'storage.type.object.array.vala' } ] },\n         { token: \n            [ 'storage.type.vala',\n              'keyword.operator.dereference.vala',\n              'storage.type.vala' ],\n           regex: '\\\\b(?:([a-z]\\\\w*)(\\\\.))*([A-Z]+\\\\w*\\\\b)' } ],\n      '#object-types-inherited': \n       [ { token: 'entity.other.inherited-class.vala',\n           regex: '\\\\b(?:[a-z]\\\\w*\\\\.)*[A-Z]+\\\\w*<',\n           push: \n            [ { token: 'entity.other.inherited-class.vala',\n                regex: '>|[^\\\\w\\\\s,<]',\n                next: 'pop' },\n              { include: '#object-types' },\n              { token: 'storage.type.generic.vala',\n                regex: '<',\n                push: \n                 [ { token: 'storage.type.generic.vala',\n                     regex: '>|[^\\\\w\\\\s,<]',\n                     next: 'pop' },\n                   { defaultToken: 'storage.type.generic.vala' } ],\n                comment: 'This is just to support <>\\'s with no actual type prefix' },\n              { defaultToken: 'entity.other.inherited-class.vala' } ] },\n         { token: \n            [ 'entity.other.inherited-class.vala',\n              'keyword.operator.dereference.vala',\n              'entity.other.inherited-class.vala' ],\n           regex: '\\\\b(?:([a-z]\\\\w*)(\\\\.))*([A-Z]+\\\\w*)' } ],\n      '#parameters': \n       [ { token: 'storage.modifier.vala', regex: 'final' },\n         { include: '#primitive-arrays' },\n         { include: '#primitive-types' },\n         { include: '#object-types' },\n         { token: 'variable.parameter.vala', regex: '\\\\w+' } ],\n      '#parens': \n       [ { token: 'text',\n           regex: '\\\\(',\n           push: \n            [ { token: 'text', regex: '\\\\)', next: 'pop' },\n              { include: '#code' } ] } ],\n      '#primitive-arrays': \n       [ { token: 'storage.type.primitive.array.vala',\n           regex: '\\\\b(?:bool|byte|sbyte|char|decimal|double|float|int|uint|long|ulong|object|short|ushort|string|void|int8|int16|int32|int64|uint8|uint16|uint32|uint64)(?:\\\\[\\\\])*\\\\b' } ],\n      '#primitive-types': \n       [ { token: 'storage.type.primitive.vala',\n           regex: '\\\\b(?:var|bool|byte|sbyte|char|decimal|double|float|int|uint|long|ulong|object|short|ushort|string|void|signal|int8|int16|int32|int64|uint8|uint16|uint32|uint64)\\\\b',\n           comment: 'var is not really a primitive, but acts like one in most cases' } ],\n      '#storage-modifiers': \n       [ { token: 'storage.modifier.vala',\n           regex: '\\\\b(?:public|private|protected|internal|static|final|sealed|virtual|override|abstract|readonly|volatile|dynamic|async|unsafe|out|ref|weak|owned|unowned|const)\\\\b',\n           comment: 'Not sure about unsafe and readonly' } ],\n      '#strings': \n       [ { token: 'punctuation.definition.string.begin.vala',\n           regex: '@\"',\n           push: \n            [ { token: 'punctuation.definition.string.end.vala',\n                regex: '\"',\n                next: 'pop' },\n              { token: 'constant.character.escape.vala',\n                regex: '\\\\\\\\.|%[\\\\w\\\\.\\\\-]+|\\\\$(?:\\\\w+|\\\\([\\\\w\\\\s\\\\+\\\\-\\\\*\\\\/]+\\\\))' },\n              { defaultToken: 'string.quoted.interpolated.vala' } ] },\n         { token: 'punctuation.definition.string.begin.vala',\n           regex: '\"',\n           push: \n            [ { token: 'punctuation.definition.string.end.vala',\n                regex: '\"',\n                next: 'pop' },\n              { token: 'constant.character.escape.vala', regex: '\\\\\\\\.' },\n              { token: 'constant.character.escape.vala',\n                regex: '%[\\\\w\\\\.\\\\-]+' },\n              { defaultToken: 'string.quoted.double.vala' } ] },\n         { token: 'punctuation.definition.string.begin.vala',\n           regex: '\\'',\n           push: \n            [ { token: 'punctuation.definition.string.end.vala',\n                regex: '\\'',\n                next: 'pop' },\n              { token: 'constant.character.escape.vala', regex: '\\\\\\\\.' },\n              { defaultToken: 'string.quoted.single.vala' } ] },\n         { token: 'punctuation.definition.string.begin.vala',\n           regex: '\"\"\"',\n           push: \n            [ { token: 'punctuation.definition.string.end.vala',\n                regex: '\"\"\"',\n                next: 'pop' },\n              { token: 'constant.character.escape.vala',\n                regex: '%[\\\\w\\\\.\\\\-]+' },\n              { defaultToken: 'string.quoted.triple.vala' } ] } ],\n      '#throws': \n       [ { token: 'storage.modifier.vala',\n           regex: 'throws',\n           push: \n            [ { token: 'meta.throwables.vala', regex: '(?={|;)', next: 'pop' },\n              { include: '#object-types' },\n              { defaultToken: 'meta.throwables.vala' } ] } ],\n      '#values': \n       [ { include: '#strings' },\n         { include: '#object-types' },\n         { include: '#constants-and-special-vars' } ] };\n    \n    this.normalizeRules();\n};\n\nValaHighlightRules.metaData = { \n    comment: 'Based heavily on the Java bundle\\'s language syntax. TODO:\\n* Closures\\n* Delegates\\n* Properties: Better support for properties.\\n* Annotations\\n* Error domains\\n* Named arguments\\n* Array slicing, negative indexes, multidimensional\\n* construct blocks\\n* lock blocks?\\n* regex literals\\n* DocBlock syntax highlighting. (Currently importing javadoc)\\n* Folding rule for comments.\\n',\n      fileTypes: [ 'vala' ],\n      foldingStartMarker: '(\\\\{\\\\s*(//.*)?$|^\\\\s*// \\\\{\\\\{\\\\{)',\n      foldingStopMarker: '^\\\\s*(\\\\}|// \\\\}\\\\}\\\\}$)',\n      name: 'Vala',\n      scopeName: 'source.vala' };\n\n\noop.inherits(ValaHighlightRules, TextHighlightRules);\n\nexports.ValaHighlightRules = ValaHighlightRules;\n});"
  },
  {
    "path": "lib/ace/mode/vbscript.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n *\n * Contributor(s):\n * \n *\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar VBScriptHighlightRules = require(\"./vbscript_highlight_rules\").VBScriptHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = VBScriptHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n       \n    this.lineCommentStart = [\"'\", \"REM\"];\n    \n    this.$id = \"ace/mode/vbscript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});"
  },
  {
    "path": "lib/ace/mode/vbscript_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*\n  THIS FILE WAS AUTOGENERATED BY mode_highlight_rules.tmpl.js (UUID: 7F9C9343-D48E-4E7D-BFE8-F680714DCD3E) */\n\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar VBScriptHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword.control.asp\":  \"If|Then|Else|ElseIf|End|While|Wend|For|To|Each|Case|Select|Return\"\n            + \"|Continue|Do|Until|Loop|Next|With|Exit|Function|Property|Type|Enum|Sub|IIf\",\n        \"storage.type.asp\": \"Dim|Call|Class|Const|Dim|Redim|Set|Let|Get|New|Randomize|Option|Explicit\",\n        \"storage.modifier.asp\": \"Private|Public|Default\",\n        \"keyword.operator.asp\": \"Mod|And|Not|Or|Xor|as\",\n        \"constant.language.asp\": \"Empty|False|Nothing|Null|True\",\n        \"support.class.asp\": \"Application|ObjectContext|Request|Response|Server|Session\",\n        \"support.class.collection.asp\": \"Contents|StaticObjects|ClientCertificate|Cookies|Form|QueryString|ServerVariables\",\n        \"support.constant.asp\": \"TotalBytes|Buffer|CacheControl|Charset|ContentType|Expires|ExpiresAbsolute\"\n            + \"|IsClientConnected|PICS|Status|ScriptTimeout|CodePage|LCID|SessionID|Timeout\",\n        \"support.function.asp\": \"Lock|Unlock|SetAbort|SetComplete|BinaryRead|AddHeader|AppendToLog\"\n            + \"|BinaryWrite|Clear|Flush|Redirect|Write|CreateObject|HTMLEncode|MapPath|URLEncode|Abandon|Convert|Regex\",\n        \"support.function.event.asp\": \"Application_OnEnd|Application_OnStart\"\n            + \"|OnTransactionAbort|OnTransactionCommit|Session_OnEnd|Session_OnStart\",\n        \"support.function.vb.asp\": \"Array|Add|Asc|Atn|CBool|CByte|CCur|CDate|CDbl|Chr|CInt|CLng\"\n            + \"|Conversions|Cos|CreateObject|CSng|CStr|Date|DateAdd|DateDiff|DatePart|DateSerial\"\n            + \"|DateValue|Day|Derived|Math|Escape|Eval|Exists|Exp|Filter|FormatCurrency\"\n            + \"|FormatDateTime|FormatNumber|FormatPercent|GetLocale|GetObject|GetRef|Hex\"\n            + \"|Hour|InputBox|InStr|InStrRev|Int|Fix|IsArray|IsDate|IsEmpty|IsNull|IsNumeric\"\n            + \"|IsObject|Item|Items|Join|Keys|LBound|LCase|Left|Len|LoadPicture|Log|LTrim|RTrim\"\n            + \"|Trim|Maths|Mid|Minute|Month|MonthName|MsgBox|Now|Oct|Remove|RemoveAll|Replace\"\n            + \"|RGB|Right|Rnd|Round|ScriptEngine|ScriptEngineBuildVersion|ScriptEngineMajorVersion\"\n            + \"|ScriptEngineMinorVersion|Second|SetLocale|Sgn|Sin|Space|Split|Sqr|StrComp|String|StrReverse\"\n            + \"|Tan|Time|Timer|TimeSerial|TimeValue|TypeName|UBound|UCase|Unescape|VarType|Weekday|WeekdayName|Year\",\n        \"support.type.vb.asp\": \"vbtrue|vbfalse|vbcr|vbcrlf|vbformfeed|vblf|vbnewline|vbnullchar|vbnullstring|\"\n            + \"int32|vbtab|vbverticaltab|vbbinarycompare|vbtextcomparevbsunday|vbmonday|vbtuesday|vbwednesday\"\n            + \"|vbthursday|vbfriday|vbsaturday|vbusesystemdayofweek|vbfirstjan1|vbfirstfourdays|vbfirstfullweek\"\n            + \"|vbgeneraldate|vblongdate|vbshortdate|vblongtime|vbshorttime|vbobjecterror|vbEmpty|vbNull|vbInteger\"\n            + \"|vbLong|vbSingle|vbDouble|vbCurrency|vbDate|vbString|vbObject|vbError|vbBoolean|vbVariant\"\n            + \"|vbDataObject|vbDecimal|vbByte|vbArray\"\n    }, \"identifier\", true);\n\n    this.$rules = {\n    \"start\": [\n        {\n            token: [\n                \"meta.ending-space\"\n            ],\n            regex: \"$\"\n        },\n        {\n            token: [null],\n            regex: \"^(?=\\\\t)\",\n            next: \"state_3\"\n        },\n        {\n            token: [null],\n            regex: \"^(?= )\",\n            next: \"state_4\"\n        },\n        {\n            token: [\n                \"text\",\n                \"storage.type.function.asp\",\n                \"text\",\n                \"entity.name.function.asp\",\n                \"text\",\n                \"punctuation.definition.parameters.asp\",\n                \"variable.parameter.function.asp\",\n                \"punctuation.definition.parameters.asp\"\n            ],\n            regex: \"^(\\\\s*)(Function|Sub)(\\\\s+)([a-zA-Z_]\\\\w*)(\\\\s*)(\\\\()([^)]*)(\\\\))\"\n        },\n        {\n            token: \"punctuation.definition.comment.asp\",\n            regex: \"'|REM(?=\\\\s|$)\",\n            next: \"comment\",\n            caseInsensitive: true\n        },\n        {\n            token: \"storage.type.asp\",\n            regex: \"On Error Resume Next|On Error GoTo\",\n            caseInsensitive: true\n        },\n        {\n            token: \"punctuation.definition.string.begin.asp\",\n            regex: '\"',\n            next: \"string\"\n        },\n        {\n            token: [\n                \"punctuation.definition.variable.asp\"\n            ],\n            regex: \"(\\\\$)[a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*?\\\\b\\\\s*\"\n        },\n//        {\n//            token: [\n//                \"support.type.vb.asp\"\n//            ],\n//            regex: \"(?:(?<=as )(\\\\b[a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*?\\\\b))\", // ERROR: This contains a lookbehind, which JS does not support :(\"\n//        },\n        {\n            token: \"constant.numeric.asp\",\n            regex: \"-?\\\\b(?:(?:0(?:x|X)[0-9a-fA-F]*)|(?:(?:[0-9]+\\\\.?[0-9]*)|(?:\\\\.[0-9]+))(?:(?:e|E)(?:\\\\+|-)?[0-9]+)?)(?:L|l|UL|ul|u|U|F|f)?\\\\b\"\n        },\n        {\n            regex: \"\\\\w+\",\n            token: keywordMapper\n        },\n        {\n            token: [\"entity.name.function.asp\"],\n            regex: \"(?:(\\\\b[a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*?\\\\b)(?=\\\\(\\\\)?))\"\n        },\n//        {\n//            token: [\n//                \"variable.other.asp\"\n//            ],\n//            regex: \"(?:((?<=(\\\\+|=|-|\\\\&|\\\\\\\\|/|<|>|\\\\(|,))\\\\s*\\\\b([a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*?)\\\\b(?!(\\\\(|\\\\.))|\\\\b([a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*?)\\\\b(?=\\\\s*(\\\\+|=|-|\\\\&|\\\\\\\\|/|<|>|\\\\(|\\\\)))))\", // ERROR: This contains a lookbehind, which JS does not support :(\"\n//        },\n        {\n            token: [\"keyword.operator.asp\"],\n            regex: \"\\\\-|\\\\+|\\\\*\\\\/|\\\\>|\\\\<|\\\\=|\\\\&\"\n        }\n    ],\n    \"state_3\": [\n        {\n            token: [\n                \"meta.odd-tab.tabs\",\n                \"meta.even-tab.tabs\"\n            ],\n            regex: \"(\\\\t)(\\\\t)?\"\n        },\n        {\n            token: \"meta.leading-space\",\n            regex: \"(?=[^\\\\t])\",\n            next: \"start\"\n        },\n        {\n            token: \"meta.leading-space\",\n            regex: \".\",\n            next: \"state_3\"\n        }\n    ],\n    \"state_4\": [\n        {\n            token: [\"meta.odd-tab.spaces\", \"meta.even-tab.spaces\"],\n            regex: \"(  )(  )?\"\n        },\n        {\n            token: \"meta.leading-space\",\n            regex: \"(?=[^ ])\",\n            next: \"start\"\n        },\n        {\n            defaultToken: \"meta.leading-space\"\n        }\n    ],\n    \"comment\": [\n        {\n            token: \"comment.line.apostrophe.asp\",\n            regex: \"$|(?=(?:%>))\",\n            next: \"start\"\n        },\n        {\n            defaultToken: \"comment.line.apostrophe.asp\"\n        }\n    ],\n    \"string\": [\n        {\n            token: \"constant.character.escape.apostrophe.asp\",\n            regex: '\"\"'\n        },\n        {\n            token: \"string.quoted.double.asp\",\n            regex: '\"',\n            next: \"start\"\n        },\n        {\n            defaultToken: \"string.quoted.double.asp\"\n        }\n    ]\n};\n\n};\n\noop.inherits(VBScriptHighlightRules, TextHighlightRules);\n\nexports.VBScriptHighlightRules = VBScriptHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/velocity.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlMode = require(\"./html\").Mode;\nvar VelocityHighlightRules = require(\"./velocity_highlight_rules\").VelocityHighlightRules;\nvar FoldMode = require(\"./folding/velocity\").FoldMode;\n\nvar Mode = function() {\n    HtmlMode.call(this);\n    this.HighlightRules = VelocityHighlightRules;\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, HtmlMode);\n\n(function() {\n    this.lineCommentStart = \"##\";\n    this.blockComment = {start: \"#*\", end: \"*#\"};\n    this.$id = \"ace/mode/velocity\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});"
  },
  {
    "path": "lib/ace/mode/velocity_highlight_rules.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\n\nvar VelocityHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n\n    var builtinConstants = lang.arrayToMap(\n        ('true|false|null').split('|')\n    );\n\n    var builtinFunctions = lang.arrayToMap(\n        (\"_DateTool|_DisplayTool|_EscapeTool|_FieldTool|_MathTool|_NumberTool|_SerializerTool|_SortTool|_StringTool|_XPathTool\").split('|')\n    );\n\n    var builtinVariables = lang.arrayToMap(\n        ('$contentRoot|$foreach').split('|')\n    );\n\n    var keywords = lang.arrayToMap(\n        (\"#set|#macro|#include|#parse|\" +\n        \"#if|#elseif|#else|#foreach|\" +\n        \"#break|#end|#stop\"\n        ).split('|')\n    );\n\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules.start.push(\n        {\n            token : \"comment\",\n            regex : \"##.*$\"\n        },{\n            token : \"comment.block\", // multi line comment\n            regex : \"#\\\\*\",\n            next : \"vm_comment\"\n        }, {\n            token : \"string.regexp\",\n            regex : \"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"\n        }, {\n            token : \"string\", // single line\n            regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n        }, {\n            token : \"string\", // single line\n            regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n        }, {\n            token : \"constant.numeric\", // hex\n            regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n        }, {\n            token : \"constant.language.boolean\",\n            regex : \"(?:true|false)\\\\b\"\n        }, {\n            token : function(value) {\n                if (keywords.hasOwnProperty(value))\n                    return \"keyword\";\n                else if (builtinConstants.hasOwnProperty(value))\n                    return \"constant.language\";\n                else if (builtinVariables.hasOwnProperty(value))\n                    return \"variable.language\";\n                else if (builtinFunctions.hasOwnProperty(value) || builtinFunctions.hasOwnProperty(value.substring(1)))\n                    return \"support.function\";\n                else if (value == \"debugger\")\n                    return \"invalid.deprecated\";\n                else\n                    if(value.match(/^(\\$[a-zA-Z_][a-zA-Z0-9_]*)$/))\n                        return \"variable\";\n                    return \"identifier\";\n            },\n            // TODO: Unicode escape sequences\n            // TODO: Unicode identifiers\n            regex : \"[a-zA-Z$#][a-zA-Z0-9_]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"!|&|\\\\*|\\\\-|\\\\+|=|!=|<=|>=|<|>|&&|\\\\|\\\\|\"\n        }, {\n            token : \"lparen\",\n            regex : \"[[({]\"\n        }, {\n            token : \"rparen\",\n            regex : \"[\\\\])}]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+\"\n        }\n    );\n\n    this.$rules[\"vm_comment\"] = [\n        {\n            token : \"comment\", // closing comment\n            regex : \"\\\\*#|-->\",\n            next : \"start\"\n        }, {\n            defaultToken: \"comment\"\n        }\n    ];\n\n    this.$rules[\"vm_start\"] = [\n        {\n            token: \"variable\",\n            regex: \"}\",\n            next: \"pop\"\n        }, {\n            token : \"string.regexp\",\n            regex : \"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"\n        }, {\n            token : \"string\", // single line\n            regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n        }, {\n            token : \"string\", // single line\n            regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n        }, {\n            token : \"constant.numeric\", // hex\n            regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n        }, {\n            token : \"constant.language.boolean\",\n            regex : \"(?:true|false)\\\\b\"\n        }, {\n            token : function(value) {\n                if (keywords.hasOwnProperty(value))\n                    return \"keyword\";\n                else if (builtinConstants.hasOwnProperty(value))\n                    return \"constant.language\";\n                else if (builtinVariables.hasOwnProperty(value))\n                    return \"variable.language\";\n                else if (builtinFunctions.hasOwnProperty(value) || builtinFunctions.hasOwnProperty(value.substring(1)))\n                    return \"support.function\";\n                else if (value == \"debugger\")\n                    return \"invalid.deprecated\";\n                else\n                    if(value.match(/^(\\$[a-zA-Z_$][a-zA-Z0-9_]*)$/))\n                        return \"variable\";\n                    return \"identifier\";\n            },\n            // TODO: Unicode escape sequences\n            // TODO: Unicode identifiers\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"!|&|\\\\*|\\\\-|\\\\+|=|!=|<=|>=|<|>|&&|\\\\|\\\\|\"\n        }, {\n            token : \"lparen\",\n            regex : \"[[({]\"\n        }, {\n            token : \"rparen\",\n            regex : \"[\\\\])}]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+\"\n        }\n    ];\n\n    for (var i in this.$rules) {\n        this.$rules[i].unshift({\n            token: \"variable\",\n            regex: \"\\\\${\",\n            push: \"vm_start\"\n        });\n    }\n\n    this.normalizeRules();\n};\n\noop.inherits(VelocityHighlightRules, TextHighlightRules);\n\nexports.VelocityHighlightRules = VelocityHighlightRules;\n});"
  },
  {
    "path": "lib/ace/mode/verilog.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar VerilogHighlightRules = require(\"./verilog_highlight_rules\").VerilogHighlightRules;\nvar Range = require(\"../range\").Range;\n\nvar Mode = function() {\n    this.HighlightRules = VerilogHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.$id = \"ace/mode/verilog\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n"
  },
  {
    "path": "lib/ace/mode/verilog_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar VerilogHighlightRules = function() {\nvar keywords = \"always|and|assign|automatic|begin|buf|bufif0|bufif1|case|casex|casez|cell|cmos|config|\" +\n    \"deassign|default|defparam|design|disable|edge|else|end|endcase|endconfig|endfunction|endgenerate|endmodule|\" +\n    \"endprimitive|endspecify|endtable|endtask|event|for|force|forever|fork|function|generate|genvar|highz0|\" +\n    \"highz1|if|ifnone|incdir|include|initial|inout|input|instance|integer|join|large|liblist|library|localparam|\" +\n    \"macromodule|medium|module|nand|negedge|nmos|nor|noshowcancelled|not|notif0|notif1|or|output|parameter|pmos|\" +\n    \"posedge|primitive|pull0|pull1|pulldown|pullup|pulsestyle_onevent|pulsestyle_ondetect|rcmos|real|realtime|\" +\n    \"reg|release|repeat|rnmos|rpmos|rtran|rtranif0|rtranif1|scalared|showcancelled|signed|small|specify|specparam|\" +\n    \"strong0|strong1|supply0|supply1|table|task|time|tran|tranif0|tranif1|tri|tri0|tri1|triand|trior|trireg|\" +\n    \"unsigned|use|vectored|wait|wand|weak0|weak1|while|wire|wor|xnor|xor\" +\n    \"begin|bufif0|bufif1|case|casex|casez|config|else|end|endcase|endconfig|endfunction|\" +\n    \"endgenerate|endmodule|endprimitive|endspecify|endtable|endtask|for|forever|function|generate|if|ifnone|\" +\n    \"macromodule|module|primitive|repeat|specify|table|task|while\";\n\n    var builtinConstants = (\n        \"true|false|null\"\n    );\n\n    var builtinFunctions = (\n        \"count|min|max|avg|sum|rank|now|coalesce|main\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": builtinFunctions,\n        \"keyword\": keywords,\n        \"constant.language\": builtinConstants\n    }, \"identifier\", true);\n\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment\",\n            regex : \"//.*$\"\n        }, {\n            token : \"comment.start\",\n            regex : \"/\\\\*\",\n            next : [\n                { token : \"comment.end\", regex : \"\\\\*/\", next: \"start\" },\n                { defaultToken : \"comment\" }\n            ]\n        }, {\n            token : \"string\",           // \" string\n            regex : '\".*?\"'\n        }, {\n            token : \"string\",           // ' string\n            regex : \"'.*?'\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|%|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=\"\n        }, {\n            token : \"paren.lparen\",\n            regex : \"[\\\\(]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\)]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+\"\n        } ]\n    };\n    this.normalizeRules();\n};\n\noop.inherits(VerilogHighlightRules, TextHighlightRules);\n\nexports.VerilogHighlightRules = VerilogHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/vhdl.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2013, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar VHDLHighlightRules = require(\"./vhdl_highlight_rules\").VHDLHighlightRules;\n\nvar Mode = function() {\n    this.HighlightRules = VHDLHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"--\";\n\n    this.$id = \"ace/mode/vhdl\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n"
  },
  {
    "path": "lib/ace/mode/vhdl_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2013, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar VHDLHighlightRules = function() {\n\n\n    \n    var keywords = \"access|after|ailas|all|architecture|assert|attribute|\"+\n                   \"begin|block|buffer|bus|case|component|configuration|\"+\n                   \"disconnect|downto|else|elsif|end|entity|file|for|function|\"+\n                   \"generate|generic|guarded|if|impure|in|inertial|inout|is|\"+\n                   \"label|linkage|literal|loop|mapnew|next|of|on|open|\"+\n                   \"others|out|port|process|pure|range|record|reject|\"+\n                   \"report|return|select|shared|subtype|then|to|transport|\"+\n                   \"type|unaffected|united|until|wait|when|while|with\";\n    \n    var storageType = \"bit|bit_vector|boolean|character|integer|line|natural|\"+\n                      \"positive|real|register|severity|signal|signed|\"+\n                      \"std_logic|std_logic_vector|string||text|time|unsigned|\"+\n                      \"variable\";\n    \n    var storageModifiers = \"array|constant\";\n    \n    var keywordOperators = \"abs|and|mod|nand|nor|not|rem|rol|ror|sla|sll|sra\"+\n                           \"srl|xnor|xor\";\n    \n    var builtinConstants = (\n        \"true|false|null\"\n    );\n\n\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword.operator\": keywordOperators,\n        \"keyword\": keywords,\n        \"constant.language\": builtinConstants,\n        \"storage.modifier\": storageModifiers,\n        \"storage.type\": storageType\n    }, \"identifier\", true);\n\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment\",\n            regex : \"--.*$\"\n        }, {\n            token : \"string\",           // \" string\n            regex : '\".*?\"'\n        }, {\n            token : \"string\",           // ' string\n            regex : \"'.*?'\"\n        }, {\n            token : \"constant.numeric\", // float\n            regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n        }, {\n            token : \"keyword\", // pre-compiler directives\n            regex : \"\\\\s*(?:library|package|use)\\\\b\"\n        }, {\n            token : keywordMapper,\n            regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token : \"keyword.operator\",\n            regex : \"&|\\\\*|\\\\+|\\\\-|\\\\/|<|=|>|\\\\||=>|\\\\*\\\\*|:=|\\\\/=|>=|<=|<>\" \n        }, {\n              token : \"punctuation.operator\",\n              regex : \"\\\\'|\\\\:|\\\\,|\\\\;|\\\\.\"\n        },{\n            token : \"paren.lparen\",\n            regex : \"[[(]\"\n        }, {\n            token : \"paren.rparen\",\n            regex : \"[\\\\])]\"\n        }, {\n            token : \"text\",\n            regex : \"\\\\s+\"\n        } ]\n\n       \n    };\n};\n\noop.inherits(VHDLHighlightRules, TextHighlightRules);\n\nexports.VHDLHighlightRules = VHDLHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/wollok.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar WollokHighlightRules = require(\"./wollok_highlight_rules\").WollokHighlightRules;\n\nvar Mode = function() {\n    JavaScriptMode.call(this);\n    this.HighlightRules = WollokHighlightRules;\n};\noop.inherits(Mode, JavaScriptMode);\n\n(function() {\n    \n    this.createWorker = function(session) {\n        return null;\n    };\n\n    this.$id = \"ace/mode/wollok\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\n"
  },
  {
    "path": "lib/ace/mode/wollok_highlight_rules.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar WollokHighlightRules = function() {\n\n    // taken from http://download.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html\n    var keywords = (\n    \"test|describe|package|inherits|false|import|else|or|class|and|not|native|override|program|self|try|const|var|catch|object|super|throw|if|null|return|true|new|constructor|method|mixin\"\n    );\n\n    var buildinConstants = (\"null|assert|console\");\n\n    var langClasses = (\n        \"Object|Pair|String|Boolean|Number|Integer|Double|Collection|Set|List|Exception|Range\" +\n        \"|StackTraceElement\"\n    );\n\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"self\",\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants,\n        \"support.function\": langClasses\n    }, \"identifier\");\n\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : /0(?:[xX][0-9a-fA-F][0-9a-fA-F_]*|[bB][01][01_]*)[LlSsDdFfYy]?\\b/\n            }, {\n                token : \"constant.numeric\", // float\n                regex : /[+-]?\\d[\\d_]*(?:(?:\\.[\\d_]*)?(?:[eE][+-]?[\\d_]+)?)?[LlSsDdFfYy]?\\b/\n            }, {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false)\\\\b\"\n            }, {\n                token : keywordMapper,\n                // TODO: Unicode escape sequences\n                // TODO: Unicode identifiers\n                regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"===|&&|\\\\*=|\\\\.\\\\.|\\\\*\\\\*|#|!|%|\\\\*|\\\\?:|\\\\+|\\\\/|,|\\\\+=|\\\\-|\\\\.\\\\.<|!==|:|\\\\/=|\\\\?\\\\.|\\\\+\\\\+|>|=|<|>=|=>|==|\\\\]|\\\\[|\\\\-=|\\\\->|\\\\||\\\\-\\\\-|<>|!=|%=|\\\\|\"\n            }, {\n                token : \"lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \".*?\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                token : \"comment\", // comment spanning whole line\n                regex : \".+\"\n            }\n        ]\n    };\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n};\n\noop.inherits(WollokHighlightRules, TextHighlightRules);\n\nexports.WollokHighlightRules = WollokHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/xml/dom-parser.js",
    "content": "define(function(require, exports, module) {\n\t'use strict';\n\n\tvar XMLReader = require('./sax'),\n\t\tDOMImplementation = require('./dom');\n\nfunction DOMParser(options){\n\tthis.options = options ||{locator:{}};\n\t\n}\nDOMParser.prototype.parseFromString = function(source,mimeType){\t\n\tvar options = this.options;\n\tvar sax =  new XMLReader();\n\tvar domBuilder = options.domBuilder || new DOMHandler();//contentHandler and LexicalHandler\n\tvar errorHandler = options.errorHandler;\n\tvar locator = options.locator;\n\tvar defaultNSMap = options.xmlns||{};\n\tvar entityMap = {'lt':'<','gt':'>','amp':'&','quot':'\"','apos':\"'\"}\n\tif(locator){\n\t\tdomBuilder.setDocumentLocator(locator)\n\t}\n\t\n\tsax.errorHandler = buildErrorHandler(errorHandler,domBuilder,locator);\n\tsax.domBuilder = options.domBuilder || domBuilder;\n\tif(/\\/x?html?$/.test(mimeType)){\n\t\tentityMap.nbsp = '\\xa0';\n\t\tentityMap.copy = '\\xa9';\n\t\tdefaultNSMap['']= 'http://www.w3.org/1999/xhtml';\n\t}\n\tif(source){\n\t\tsax.parse(source,defaultNSMap,entityMap);\n\t}else{\n\t\tsax.errorHandler.error(\"invalid document source\");\n\t}\n\treturn domBuilder.document;\n}\nfunction buildErrorHandler(errorImpl,domBuilder,locator){\n\tif(!errorImpl){\n\t\tif(domBuilder instanceof DOMHandler){\n\t\t\treturn domBuilder;\n\t\t}\n\t\terrorImpl = domBuilder ;\n\t}\n\tvar errorHandler = {}\n\tvar isCallback = errorImpl instanceof Function;\n\tlocator = locator||{}\n\tfunction build(key){\n\t\tvar fn = errorImpl[key];\n\t\tif(!fn){\n\t\t\tif(isCallback){\n\t\t\t\tfn = errorImpl.length == 2?function(msg){errorImpl(key,msg)}:errorImpl;\n\t\t\t}else{\n\t\t\t\tvar i=arguments.length;\n\t\t\t\twhile(--i){\n\t\t\t\t\tif(fn = errorImpl[arguments[i]]){\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\terrorHandler[key] = fn && function(msg){\n\t\t\tfn(msg+_locator(locator), msg, locator);\n\t\t}||function(){};\n\t}\n\tbuild('warning','warn');\n\tbuild('error','warn','warning');\n\tbuild('fatalError','warn','warning','error');\n\treturn errorHandler;\n}\n/**\n * +ContentHandler+ErrorHandler\n * +LexicalHandler+EntityResolver2\n * -DeclHandler-DTDHandler \n * \n * DefaultHandler:EntityResolver, DTDHandler, ContentHandler, ErrorHandler\n * DefaultHandler2:DefaultHandler,LexicalHandler, DeclHandler, EntityResolver2\n * @link http://www.saxproject.org/apidoc/org/xml/sax/helpers/DefaultHandler.html\n */\nfunction DOMHandler() {\n    this.cdata = false;\n}\nfunction position(locator,node){\n\tnode.lineNumber = locator.lineNumber;\n\tnode.columnNumber = locator.columnNumber;\n}\n/**\n * @see org.xml.sax.ContentHandler#startDocument\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ContentHandler.html\n */ \nDOMHandler.prototype = {\n\tstartDocument : function() {\n    \tthis.document = new DOMImplementation().createDocument(null, null, null);\n    \tif (this.locator) {\n        \tthis.document.documentURI = this.locator.systemId;\n    \t}\n\t},\n\tstartElement:function(namespaceURI, localName, qName, attrs) {\n\t\tvar doc = this.document;\n\t    var el = doc.createElementNS(namespaceURI, qName||localName);\n\t    var len = attrs.length;\n\t    appendElement(this, el);\n\t    this.currentElement = el;\n\t    \n\t\tthis.locator && position(this.locator,el)\n\t    for (var i = 0 ; i < len; i++) {\n\t        var namespaceURI = attrs.getURI(i);\n\t        var value = attrs.getValue(i);\n\t        var qName = attrs.getQName(i);\n\t\t\tvar attr = doc.createAttributeNS(namespaceURI, qName);\n\t\t\tif( attr.getOffset){\n\t\t\t\tposition(attr.getOffset(1),attr)\n\t\t\t}\n\t\t\tattr.value = attr.nodeValue = value;\n\t\t\tel.setAttributeNode(attr)\n\t    }\n\t},\n\tendElement:function(namespaceURI, localName, qName) {\n\t\tvar current = this.currentElement\n\t    var tagName = current.tagName;\n\t    this.currentElement = current.parentNode;\n\t},\n\tstartPrefixMapping:function(prefix, uri) {\n\t},\n\tendPrefixMapping:function(prefix) {\n\t},\n\tprocessingInstruction:function(target, data) {\n\t    var ins = this.document.createProcessingInstruction(target, data);\n\t    this.locator && position(this.locator,ins)\n\t    appendElement(this, ins);\n\t},\n\tignorableWhitespace:function(ch, start, length) {\n\t},\n\tcharacters:function(chars, start, length) {\n\t\tchars = _toString.apply(this,arguments)\n\t\t//console.log(chars)\n\t\tif(this.currentElement && chars){\n\t\t\tif (this.cdata) {\n\t\t\t\tvar charNode = this.document.createCDATASection(chars);\n\t\t\t\tthis.currentElement.appendChild(charNode);\n\t\t\t} else {\n\t\t\t\tvar charNode = this.document.createTextNode(chars);\n\t\t\t\tthis.currentElement.appendChild(charNode);\n\t\t\t}\n\t\t\tthis.locator && position(this.locator,charNode)\n\t\t}\n\t},\n\tskippedEntity:function(name) {\n\t},\n\tendDocument:function() {\n\t\tthis.document.normalize();\n\t},\n\tsetDocumentLocator:function (locator) {\n\t    if(this.locator = locator){// && !('lineNumber' in locator)){\n\t    \tlocator.lineNumber = 0;\n\t    }\n\t},\n\t//LexicalHandler\n\tcomment:function(chars, start, length) {\n\t\tchars = _toString.apply(this,arguments)\n\t    var comm = this.document.createComment(chars);\n\t    this.locator && position(this.locator,comm)\n\t    appendElement(this, comm);\n\t},\n\t\n\tstartCDATA:function() {\n\t    //used in characters() methods\n\t    this.cdata = true;\n\t},\n\tendCDATA:function() {\n\t    this.cdata = false;\n\t},\n\t\n\tstartDTD:function(name, publicId, systemId) {\n\t\tvar impl = this.document.implementation;\n\t    if (impl && impl.createDocumentType) {\n\t        var dt = impl.createDocumentType(name, publicId, systemId);\n\t        this.locator && position(this.locator,dt)\n\t        appendElement(this, dt);\n\t    }\n\t},\n\t/**\n\t * @see org.xml.sax.ErrorHandler\n\t * @link http://www.saxproject.org/apidoc/org/xml/sax/ErrorHandler.html\n\t */\n\twarning:function(error) {\n\t\tconsole.warn(error,_locator(this.locator));\n\t},\n\terror:function(error) {\n\t\tconsole.error(error,_locator(this.locator));\n\t},\n\tfatalError:function(error) {\n\t\tconsole.error(error,_locator(this.locator));\n\t    throw error;\n\t}\n}\nfunction _locator(l){\n\tif(l){\n\t\treturn '\\n@'+(l.systemId ||'')+'#[line:'+l.lineNumber+',col:'+l.columnNumber+']'\n\t}\n}\nfunction _toString(chars,start,length){\n\tif(typeof chars == 'string'){\n\t\treturn chars.substr(start,length)\n\t}else{//java sax connect width xmldom on rhino(what about: \"? && !(chars instanceof String)\")\n\t\tif(chars.length >= start+length || start){\n\t\t\treturn new java.lang.String(chars,start,length)+'';\n\t\t}\n\t\treturn chars;\n\t}\n}\n\n/*\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/LexicalHandler.html\n * used method of org.xml.sax.ext.LexicalHandler:\n *  #comment(chars, start, length)\n *  #startCDATA()\n *  #endCDATA()\n *  #startDTD(name, publicId, systemId)\n *\n *\n * IGNORED method of org.xml.sax.ext.LexicalHandler:\n *  #endDTD()\n *  #startEntity(name)\n *  #endEntity(name)\n *\n *\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/DeclHandler.html\n * IGNORED method of org.xml.sax.ext.DeclHandler\n * \t#attributeDecl(eName, aName, type, mode, value)\n *  #elementDecl(name, model)\n *  #externalEntityDecl(name, publicId, systemId)\n *  #internalEntityDecl(name, value)\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/EntityResolver2.html\n * IGNORED method of org.xml.sax.EntityResolver2\n *  #resolveEntity(String name,String publicId,String baseURI,String systemId)\n *  #resolveEntity(publicId, systemId)\n *  #getExternalSubset(name, baseURI)\n * @link http://www.saxproject.org/apidoc/org/xml/sax/DTDHandler.html\n * IGNORED method of org.xml.sax.DTDHandler\n *  #notationDecl(name, publicId, systemId) {};\n *  #unparsedEntityDecl(name, publicId, systemId, notationName) {};\n */\n\"endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl\".replace(/\\w+/g,function(key){\n\tDOMHandler.prototype[key] = function(){return null}\n})\n\n/* Private static helpers treated below as private instance methods, so don't need to add these to the public API; we might use a Relator to also get rid of non-standard public properties */\nfunction appendElement (hander,node) {\n    if (!hander.currentElement) {\n        hander.document.appendChild(node);\n    } else {\n        hander.currentElement.appendChild(node);\n    }\n}//appendChild and setAttributeNS are preformance key\n\nreturn {\n\t\tDOMParser: DOMParser\n\t };\n});\n\n"
  },
  {
    "path": "lib/ace/mode/xml/dom.js",
    "content": "define(function(require, exports, module) {\n\n/*\n * DOM Level 2\n * Object DOMException\n * @see http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html\n */\n\nfunction copy(src,dest){\n\tfor(var p in src){\n\t\tdest[p] = src[p];\n\t}\n}\n/**\n^\\w+\\.prototype\\.([_\\w]+)\\s*=\\s*((?:.*\\{\\s*?[\\r\\n][\\s\\S]*?^})|\\S.*?(?=[;\\r\\n]));?\n^\\w+\\.prototype\\.([_\\w]+)\\s*=\\s*(\\S.*?(?=[;\\r\\n]));?\n */\nfunction _extends(Class,Super){\n\tvar pt = Class.prototype;\n\tif(Object.create){\n\t\tvar ppt = Object.create(Super.prototype)\n\t\tpt.__proto__ = ppt;\n\t}\n\tif(!(pt instanceof Super)){\n\t\tfunction t(){};\n\t\tt.prototype = Super.prototype;\n\t\tt = new t();\n\t\tcopy(pt,t);\n\t\tClass.prototype = pt = t;\n\t}\n\tif(pt.constructor != Class){\n\t\tif(typeof Class != 'function'){\n\t\t\tconsole.error(\"unknow Class:\"+Class)\n\t\t}\n\t\tpt.constructor = Class\n\t}\n}\nvar htmlns = 'http://www.w3.org/1999/xhtml' ;\n// Node Types\nvar NodeType = {}\nvar ELEMENT_NODE                = NodeType.ELEMENT_NODE                = 1;\nvar ATTRIBUTE_NODE              = NodeType.ATTRIBUTE_NODE              = 2;\nvar TEXT_NODE                   = NodeType.TEXT_NODE                   = 3;\nvar CDATA_SECTION_NODE          = NodeType.CDATA_SECTION_NODE          = 4;\nvar ENTITY_REFERENCE_NODE       = NodeType.ENTITY_REFERENCE_NODE       = 5;\nvar ENTITY_NODE                 = NodeType.ENTITY_NODE                 = 6;\nvar PROCESSING_INSTRUCTION_NODE = NodeType.PROCESSING_INSTRUCTION_NODE = 7;\nvar COMMENT_NODE                = NodeType.COMMENT_NODE                = 8;\nvar DOCUMENT_NODE               = NodeType.DOCUMENT_NODE               = 9;\nvar DOCUMENT_TYPE_NODE          = NodeType.DOCUMENT_TYPE_NODE          = 10;\nvar DOCUMENT_FRAGMENT_NODE      = NodeType.DOCUMENT_FRAGMENT_NODE      = 11;\nvar NOTATION_NODE               = NodeType.NOTATION_NODE               = 12;\n\n// ExceptionCode\nvar ExceptionCode = {}\nvar ExceptionMessage = {};\nvar INDEX_SIZE_ERR              = ExceptionCode.INDEX_SIZE_ERR              = ((ExceptionMessage[1]=\"Index size error\"),1);\nvar DOMSTRING_SIZE_ERR          = ExceptionCode.DOMSTRING_SIZE_ERR          = ((ExceptionMessage[2]=\"DOMString size error\"),2);\nvar HIERARCHY_REQUEST_ERR       = ExceptionCode.HIERARCHY_REQUEST_ERR       = ((ExceptionMessage[3]=\"Hierarchy request error\"),3);\nvar WRONG_DOCUMENT_ERR          = ExceptionCode.WRONG_DOCUMENT_ERR          = ((ExceptionMessage[4]=\"Wrong document\"),4);\nvar INVALID_CHARACTER_ERR       = ExceptionCode.INVALID_CHARACTER_ERR       = ((ExceptionMessage[5]=\"Invalid character\"),5);\nvar NO_DATA_ALLOWED_ERR         = ExceptionCode.NO_DATA_ALLOWED_ERR         = ((ExceptionMessage[6]=\"No data allowed\"),6);\nvar NO_MODIFICATION_ALLOWED_ERR = ExceptionCode.NO_MODIFICATION_ALLOWED_ERR = ((ExceptionMessage[7]=\"No modification allowed\"),7);\nvar NOT_FOUND_ERR               = ExceptionCode.NOT_FOUND_ERR               = ((ExceptionMessage[8]=\"Not found\"),8);\nvar NOT_SUPPORTED_ERR           = ExceptionCode.NOT_SUPPORTED_ERR           = ((ExceptionMessage[9]=\"Not supported\"),9);\nvar INUSE_ATTRIBUTE_ERR         = ExceptionCode.INUSE_ATTRIBUTE_ERR         = ((ExceptionMessage[10]=\"Attribute in use\"),10);\n//level2\nvar INVALID_STATE_ERR        \t= ExceptionCode.INVALID_STATE_ERR        \t= ((ExceptionMessage[11]=\"Invalid state\"),11);\nvar SYNTAX_ERR               \t= ExceptionCode.SYNTAX_ERR               \t= ((ExceptionMessage[12]=\"Syntax error\"),12);\nvar INVALID_MODIFICATION_ERR \t= ExceptionCode.INVALID_MODIFICATION_ERR \t= ((ExceptionMessage[13]=\"Invalid modification\"),13);\nvar NAMESPACE_ERR            \t= ExceptionCode.NAMESPACE_ERR           \t= ((ExceptionMessage[14]=\"Invalid namespace\"),14);\nvar INVALID_ACCESS_ERR       \t= ExceptionCode.INVALID_ACCESS_ERR      \t= ((ExceptionMessage[15]=\"Invalid access\"),15);\n\n\nfunction DOMException(code, message) {\n\tif(message instanceof Error){\n\t\tvar error = message;\n\t}else{\n\t\terror = this;\n\t\tError.call(this, ExceptionMessage[code]);\n\t\tthis.message = ExceptionMessage[code];\n\t\tif(Error.captureStackTrace) Error.captureStackTrace(this, DOMException);\n\t}\n\terror.code = code;\n\tif(message) this.message = this.message + \": \" + message;\n\treturn error;\n};\nDOMException.prototype = Error.prototype;\ncopy(ExceptionCode,DOMException)\n/**\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-536297177\n * The NodeList interface provides the abstraction of an ordered collection of nodes, without defining or constraining how this collection is implemented. NodeList objects in the DOM are live.\n * The items in the NodeList are accessible via an integral index, starting from 0.\n */\nfunction NodeList() {\n};\nNodeList.prototype = {\n\t/**\n\t * The number of nodes in the list. The range of valid child node indices is 0 to length-1 inclusive.\n\t * @standard level1\n\t */\n\tlength:0, \n\t/**\n\t * Returns the indexth item in the collection. If index is greater than or equal to the number of nodes in the list, this returns null.\n\t * @standard level1\n\t * @param index  unsigned long \n\t *   Index into the collection.\n\t * @return Node\n\t * \tThe node at the indexth position in the NodeList, or null if that is not a valid index. \n\t */\n\titem: function(index) {\n\t\treturn this[index] || null;\n\t}\n};\nfunction LiveNodeList(node,refresh){\n\tthis._node = node;\n\tthis._refresh = refresh\n\t_updateLiveList(this);\n}\nfunction _updateLiveList(list){\n\tvar inc = list._node._inc || list._node.ownerDocument._inc;\n\tif(list._inc != inc){\n\t\tvar ls = list._refresh(list._node);\n\t\t//console.log(ls.length)\n\t\t__set__(list,'length',ls.length);\n\t\tcopy(ls,list);\n\t\tlist._inc = inc;\n\t}\n}\nLiveNodeList.prototype.item = function(i){\n\t_updateLiveList(this);\n\treturn this[i];\n}\n\n_extends(LiveNodeList,NodeList);\n/**\n * \n * Objects implementing the NamedNodeMap interface are used to represent collections of nodes that can be accessed by name. Note that NamedNodeMap does not inherit from NodeList; NamedNodeMaps are not maintained in any particular order. Objects contained in an object implementing NamedNodeMap may also be accessed by an ordinal index, but this is simply to allow convenient enumeration of the contents of a NamedNodeMap, and does not imply that the DOM specifies an order to these Nodes.\n * NamedNodeMap objects in the DOM are live.\n * used for attributes or DocumentType entities \n */\nfunction NamedNodeMap() {\n};\n\nfunction _findNodeIndex(list,node){\n\tvar i = list.length;\n\twhile(i--){\n\t\tif(list[i] === node){return i}\n\t}\n}\n\nfunction _addNamedNode(el,list,newAttr,oldAttr){\n\tif(oldAttr){\n\t\tlist[_findNodeIndex(list,oldAttr)] = newAttr;\n\t}else{\n\t\tlist[list.length++] = newAttr;\n\t}\n\tif(el){\n\t\tnewAttr.ownerElement = el;\n\t\tvar doc = el.ownerDocument;\n\t\tif(doc){\n\t\t\toldAttr && _onRemoveAttribute(doc,el,oldAttr);\n\t\t\t_onAddAttribute(doc,el,newAttr);\n\t\t}\n\t}\n}\nfunction _removeNamedNode(el,list,attr){\n\tvar i = _findNodeIndex(list,attr);\n\tif(i>=0){\n\t\tvar lastIndex = list.length-1\n\t\twhile(i<lastIndex){\n\t\t\tlist[i] = list[++i]\n\t\t}\n\t\tlist.length = lastIndex;\n\t\tif(el){\n\t\t\tvar doc = el.ownerDocument;\n\t\t\tif(doc){\n\t\t\t\t_onRemoveAttribute(doc,el,attr);\n\t\t\t\tattr.ownerElement = null;\n\t\t\t}\n\t\t}\n\t}else{\n\t\tthrow new DOMException(NOT_FOUND_ERR,new Error())\n\t}\n}\nNamedNodeMap.prototype = {\n\tlength:0,\n\titem:NodeList.prototype.item,\n\tgetNamedItem: function(key) {\n//\t\tif(key.indexOf(':')>0 || key == 'xmlns'){\n//\t\t\treturn null;\n//\t\t}\n\t\tvar i = this.length;\n\t\twhile(i--){\n\t\t\tvar attr = this[i];\n\t\t\tif(attr.nodeName == key){\n\t\t\t\treturn attr;\n\t\t\t}\n\t\t}\n\t},\n\tsetNamedItem: function(attr) {\n\t\tvar el = attr.ownerElement;\n\t\tif(el && el!=this._ownerElement){\n\t\t\tthrow new DOMException(INUSE_ATTRIBUTE_ERR);\n\t\t}\n\t\tvar oldAttr = this.getNamedItem(attr.nodeName);\n\t\t_addNamedNode(this._ownerElement,this,attr,oldAttr);\n\t\treturn oldAttr;\n\t},\n\t/* returns Node */\n\tsetNamedItemNS: function(attr) {// raises: WRONG_DOCUMENT_ERR,NO_MODIFICATION_ALLOWED_ERR,INUSE_ATTRIBUTE_ERR\n\t\tvar el = attr.ownerElement, oldAttr;\n\t\tif(el && el!=this._ownerElement){\n\t\t\tthrow new DOMException(INUSE_ATTRIBUTE_ERR);\n\t\t}\n\t\toldAttr = this.getNamedItemNS(attr.namespaceURI,attr.localName);\n\t\t_addNamedNode(this._ownerElement,this,attr,oldAttr);\n\t\treturn oldAttr;\n\t},\n\n\t/* returns Node */\n\tremoveNamedItem: function(key) {\n\t\tvar attr = this.getNamedItem(key);\n\t\t_removeNamedNode(this._ownerElement,this,attr);\n\t\treturn attr;\n\t\t\n\t\t\n\t},// raises: NOT_FOUND_ERR,NO_MODIFICATION_ALLOWED_ERR\n\t\n\t//for level2\n\tremoveNamedItemNS:function(namespaceURI,localName){\n\t\tvar attr = this.getNamedItemNS(namespaceURI,localName);\n\t\t_removeNamedNode(this._ownerElement,this,attr);\n\t\treturn attr;\n\t},\n\tgetNamedItemNS: function(namespaceURI, localName) {\n\t\tvar i = this.length;\n\t\twhile(i--){\n\t\t\tvar node = this[i];\n\t\t\tif(node.localName == localName && node.namespaceURI == namespaceURI){\n\t\t\t\treturn node;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n};\n/**\n * @see http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-102161490\n */\nfunction DOMImplementation(/* Object */ features) {\n\tthis._features = {};\n\tif (features) {\n\t\tfor (var feature in features) {\n\t\t\t this._features = features[feature];\n\t\t}\n\t}\n};\n\nDOMImplementation.prototype = {\n\thasFeature: function(/* string */ feature, /* string */ version) {\n\t\tvar versions = this._features[feature.toLowerCase()];\n\t\tif (versions && (!version || version in versions)) {\n\t\t\treturn true;\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t},\n\t// Introduced in DOM Level 2:\n\tcreateDocument:function(namespaceURI,  qualifiedName, doctype){// raises:INVALID_CHARACTER_ERR,NAMESPACE_ERR,WRONG_DOCUMENT_ERR\n\t\tvar doc = new Document();\n\t\tdoc.implementation = this;\n\t\tdoc.childNodes = new NodeList();\n\t\tdoc.doctype = doctype;\n\t\tif(doctype){\n\t\t\tdoc.appendChild(doctype);\n\t\t}\n\t\tif(qualifiedName){\n\t\t\tvar root = doc.createElementNS(namespaceURI,qualifiedName);\n\t\t\tdoc.appendChild(root);\n\t\t}\n\t\treturn doc;\n\t},\n\t// Introduced in DOM Level 2:\n\tcreateDocumentType:function(qualifiedName, publicId, systemId){// raises:INVALID_CHARACTER_ERR,NAMESPACE_ERR\n\t\tvar node = new DocumentType();\n\t\tnode.name = qualifiedName;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.publicId = publicId;\n\t\tnode.systemId = systemId;\n\t\t// Introduced in DOM Level 2:\n\t\t//readonly attribute DOMString        internalSubset;\n\t\t\n\t\t//TODO:..\n\t\t//  readonly attribute NamedNodeMap     entities;\n\t\t//  readonly attribute NamedNodeMap     notations;\n\t\treturn node;\n\t}\n};\n\n\n/**\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247\n */\n\nfunction Node() {\n};\n\nNode.prototype = {\n\tfirstChild : null,\n\tlastChild : null,\n\tpreviousSibling : null,\n\tnextSibling : null,\n\tattributes : null,\n\tparentNode : null,\n\tchildNodes : null,\n\townerDocument : null,\n\tnodeValue : null,\n\tnamespaceURI : null,\n\tprefix : null,\n\tlocalName : null,\n\t// Modified in DOM Level 2:\n\tinsertBefore:function(newChild, refChild){//raises \n\t\treturn _insertBefore(this,newChild,refChild);\n\t},\n\treplaceChild:function(newChild, oldChild){//raises \n\t\tthis.insertBefore(newChild,oldChild);\n\t\tif(oldChild){\n\t\t\tthis.removeChild(oldChild);\n\t\t}\n\t},\n\tremoveChild:function(oldChild){\n\t\treturn _removeChild(this,oldChild);\n\t},\n\tappendChild:function(newChild){\n\t\treturn this.insertBefore(newChild,null);\n\t},\n\thasChildNodes:function(){\n\t\treturn this.firstChild != null;\n\t},\n\tcloneNode:function(deep){\n\t\treturn cloneNode(this.ownerDocument||this,this,deep);\n\t},\n\t// Modified in DOM Level 2:\n\tnormalize:function(){\n\t\tvar child = this.firstChild;\n\t\twhile(child){\n\t\t\tvar next = child.nextSibling;\n\t\t\tif(next && next.nodeType == TEXT_NODE && child.nodeType == TEXT_NODE){\n\t\t\t\tthis.removeChild(next);\n\t\t\t\tchild.appendData(next.data);\n\t\t\t}else{\n\t\t\t\tchild.normalize();\n\t\t\t\tchild = next;\n\t\t\t}\n\t\t}\n\t},\n  \t// Introduced in DOM Level 2:\n\tisSupported:function(feature, version){\n\t\treturn this.ownerDocument.implementation.hasFeature(feature,version);\n\t},\n    // Introduced in DOM Level 2:\n    hasAttributes:function(){\n    \treturn this.attributes.length>0;\n    },\n    lookupPrefix:function(namespaceURI){\n    \tvar el = this;\n    \twhile(el){\n    \t\tvar map = el._nsMap;\n    \t\t//console.dir(map)\n    \t\tif(map){\n    \t\t\tfor(var n in map){\n    \t\t\t\tif(map[n] == namespaceURI){\n    \t\t\t\t\treturn n;\n    \t\t\t\t}\n    \t\t\t}\n    \t\t}\n    \t\tel = el.nodeType == 2?el.ownerDocument : el.parentNode;\n    \t}\n    \treturn null;\n    },\n    // Introduced in DOM Level 3:\n    lookupNamespaceURI:function(prefix){\n    \tvar el = this;\n    \twhile(el){\n    \t\tvar map = el._nsMap;\n    \t\t//console.dir(map)\n    \t\tif(map){\n    \t\t\tif(prefix in map){\n    \t\t\t\treturn map[prefix] ;\n    \t\t\t}\n    \t\t}\n    \t\tel = el.nodeType == 2?el.ownerDocument : el.parentNode;\n    \t}\n    \treturn null;\n    },\n    // Introduced in DOM Level 3:\n    isDefaultNamespace:function(namespaceURI){\n    \tvar prefix = this.lookupPrefix(namespaceURI);\n    \treturn prefix == null;\n    }\n};\n\n\nfunction _xmlEncoder(c){\n\treturn c == '<' && '&lt;' ||\n         c == '>' && '&gt;' ||\n         c == '&' && '&amp;' ||\n         c == '\"' && '&quot;' ||\n         '&#'+c.charCodeAt()+';'\n}\n\n\ncopy(NodeType,Node);\ncopy(NodeType,Node.prototype);\n\n/**\n * @param callback return true for continue,false for break\n * @return boolean true: break visit;\n */\nfunction _visitNode(node,callback){\n\tif(callback(node)){\n\t\treturn true;\n\t}\n\tif(node = node.firstChild){\n\t\tdo{\n\t\t\tif(_visitNode(node,callback)){return true}\n        }while(node=node.nextSibling)\n    }\n}\n\n\n\nfunction Document(){\n}\nfunction _onAddAttribute(doc,el,newAttr){\n\tdoc && doc._inc++;\n\tvar ns = newAttr.namespaceURI ;\n\tif(ns == 'http://www.w3.org/2000/xmlns/'){\n\t\t//update namespace\n\t\tel._nsMap[newAttr.prefix?newAttr.localName:''] = newAttr.value\n\t}\n}\nfunction _onRemoveAttribute(doc,el,newAttr,remove){\n\tdoc && doc._inc++;\n\tvar ns = newAttr.namespaceURI ;\n\tif(ns == 'http://www.w3.org/2000/xmlns/'){\n\t\t//update namespace\n\t\tdelete el._nsMap[newAttr.prefix?newAttr.localName:'']\n\t}\n}\nfunction _onUpdateChild(doc,el,newChild){\n\tif(doc && doc._inc){\n\t\tdoc._inc++;\n\t\t//update childNodes\n\t\tvar cs = el.childNodes;\n\t\tif(newChild){\n\t\t\tcs[cs.length++] = newChild;\n\t\t}else{\n\t\t\t//console.log(1)\n\t\t\tvar child = el.firstChild;\n\t\t\tvar i = 0;\n\t\t\twhile(child){\n\t\t\t\tcs[i++] = child;\n\t\t\t\tchild =child.nextSibling;\n\t\t\t}\n\t\t\tcs.length = i;\n\t\t}\n\t}\n}\n\n/**\n * attributes;\n * children;\n * \n * writeable properties:\n * nodeValue,Attr:value,CharacterData:data\n * prefix\n */\nfunction _removeChild(parentNode,child){\n\tvar previous = child.previousSibling;\n\tvar next = child.nextSibling;\n\tif(previous){\n\t\tprevious.nextSibling = next;\n\t}else{\n\t\tparentNode.firstChild = next\n\t}\n\tif(next){\n\t\tnext.previousSibling = previous;\n\t}else{\n\t\tparentNode.lastChild = previous;\n\t}\n\t_onUpdateChild(parentNode.ownerDocument,parentNode);\n\treturn child;\n}\n/**\n * preformance key(refChild == null)\n */\nfunction _insertBefore(parentNode,newChild,nextChild){\n\tvar cp = newChild.parentNode;\n\tif(cp){\n\t\tcp.removeChild(newChild);//remove and update\n\t}\n\tif(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){\n\t\tvar newFirst = newChild.firstChild;\n\t\tif (newFirst == null) {\n\t\t\treturn newChild;\n\t\t}\n\t\tvar newLast = newChild.lastChild;\n\t}else{\n\t\tnewFirst = newLast = newChild;\n\t}\n\tvar pre = nextChild ? nextChild.previousSibling : parentNode.lastChild;\n\n\tnewFirst.previousSibling = pre;\n\tnewLast.nextSibling = nextChild;\n\t\n\t\n\tif(pre){\n\t\tpre.nextSibling = newFirst;\n\t}else{\n\t\tparentNode.firstChild = newFirst;\n\t}\n\tif(nextChild == null){\n\t\tparentNode.lastChild = newLast;\n\t}else{\n\t\tnextChild.previousSibling = newLast;\n\t}\n\tdo{\n\t\tnewFirst.parentNode = parentNode;\n\t}while(newFirst !== newLast && (newFirst= newFirst.nextSibling))\n\t_onUpdateChild(parentNode.ownerDocument||parentNode,parentNode);\n\t//console.log(parentNode.lastChild.nextSibling == null)\n\tif (newChild.nodeType == DOCUMENT_FRAGMENT_NODE) {\n\t\tnewChild.firstChild = newChild.lastChild = null;\n\t}\n\treturn newChild;\n}\nfunction _appendSingleChild(parentNode,newChild){\n\tvar cp = newChild.parentNode;\n\tif(cp){\n\t\tvar pre = parentNode.lastChild;\n\t\tcp.removeChild(newChild);//remove and update\n\t\tvar pre = parentNode.lastChild;\n\t}\n\tvar pre = parentNode.lastChild;\n\tnewChild.parentNode = parentNode;\n\tnewChild.previousSibling = pre;\n\tnewChild.nextSibling = null;\n\tif(pre){\n\t\tpre.nextSibling = newChild;\n\t}else{\n\t\tparentNode.firstChild = newChild;\n\t}\n\tparentNode.lastChild = newChild;\n\t_onUpdateChild(parentNode.ownerDocument,parentNode,newChild);\n\treturn newChild;\n\t//console.log(\"__aa\",parentNode.lastChild.nextSibling == null)\n}\nDocument.prototype = {\n\t//implementation : null,\n\tnodeName :  '#document',\n\tnodeType :  DOCUMENT_NODE,\n\tdoctype :  null,\n\tdocumentElement :  null,\n\t_inc : 1,\n\t\n\tinsertBefore :  function(newChild, refChild){//raises \n\t\tif(newChild.nodeType == DOCUMENT_FRAGMENT_NODE){\n\t\t\tvar child = newChild.firstChild;\n\t\t\twhile(child){\n\t\t\t\tvar next = child.nextSibling;\n\t\t\t\tthis.insertBefore(child,refChild);\n\t\t\t\tchild = next;\n\t\t\t}\n\t\t\treturn newChild;\n\t\t}\n\t\tif(this.documentElement == null && newChild.nodeType == 1){\n\t\t\tthis.documentElement = newChild;\n\t\t}\n\t\t\n\t\treturn _insertBefore(this,newChild,refChild),(newChild.ownerDocument = this),newChild;\n\t},\n\tremoveChild :  function(oldChild){\n\t\tif(this.documentElement == oldChild){\n\t\t\tthis.documentElement = null;\n\t\t}\n\t\treturn _removeChild(this,oldChild);\n\t},\n\t// Introduced in DOM Level 2:\n\timportNode : function(importedNode,deep){\n\t\treturn importNode(this,importedNode,deep);\n\t},\n\t// Introduced in DOM Level 2:\n\tgetElementById :\tfunction(id){\n\t\tvar rtv = null;\n\t\t_visitNode(this.documentElement,function(node){\n\t\t\tif(node.nodeType == 1){\n\t\t\t\tif(node.getAttribute('id') == id){\n\t\t\t\t\trtv = node;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t\treturn rtv;\n\t},\n\t\n\t//document factory method:\n\tcreateElement :\tfunction(tagName){\n\t\tvar node = new Element();\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = tagName;\n\t\tnode.tagName = tagName;\n\t\tnode.childNodes = new NodeList();\n\t\tvar attrs\t= node.attributes = new NamedNodeMap();\n\t\tattrs._ownerElement = node;\n\t\treturn node;\n\t},\n\tcreateDocumentFragment :\tfunction(){\n\t\tvar node = new DocumentFragment();\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\treturn node;\n\t},\n\tcreateTextNode :\tfunction(data){\n\t\tvar node = new Text();\n\t\tnode.ownerDocument = this;\n\t\tnode.appendData(data)\n\t\treturn node;\n\t},\n\tcreateComment :\tfunction(data){\n\t\tvar node = new Comment();\n\t\tnode.ownerDocument = this;\n\t\tnode.appendData(data)\n\t\treturn node;\n\t},\n\tcreateCDATASection :\tfunction(data){\n\t\tvar node = new CDATASection();\n\t\tnode.ownerDocument = this;\n\t\tnode.appendData(data)\n\t\treturn node;\n\t},\n\tcreateProcessingInstruction :\tfunction(target,data){\n\t\tvar node = new ProcessingInstruction();\n\t\tnode.ownerDocument = this;\n\t\tnode.tagName = node.target = target;\n\t\tnode.nodeValue= node.data = data;\n\t\treturn node;\n\t},\n\tcreateAttribute :\tfunction(name){\n\t\tvar node = new Attr();\n\t\tnode.ownerDocument\t= this;\n\t\tnode.name = name;\n\t\tnode.nodeName\t= name;\n\t\tnode.localName = name;\n\t\tnode.specified = true;\n\t\treturn node;\n\t},\n\tcreateEntityReference :\tfunction(name){\n\t\tvar node = new EntityReference();\n\t\tnode.ownerDocument\t= this;\n\t\tnode.nodeName\t= name;\n\t\treturn node;\n\t},\n\t// Introduced in DOM Level 2:\n\tcreateElementNS :\tfunction(namespaceURI,qualifiedName){\n\t\tvar node = new Element();\n\t\tvar pl = qualifiedName.split(':');\n\t\tvar attrs\t= node.attributes = new NamedNodeMap();\n\t\tnode.childNodes = new NodeList();\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.tagName = qualifiedName;\n\t\tnode.namespaceURI = namespaceURI;\n\t\tif(pl.length == 2){\n\t\t\tnode.prefix = pl[0];\n\t\t\tnode.localName = pl[1];\n\t\t}else{\n\t\t\t//el.prefix = null;\n\t\t\tnode.localName = qualifiedName;\n\t\t}\n\t\tattrs._ownerElement = node;\n\t\treturn node;\n\t},\n\t// Introduced in DOM Level 2:\n\tcreateAttributeNS :\tfunction(namespaceURI,qualifiedName){\n\t\tvar node = new Attr();\n\t\tvar pl = qualifiedName.split(':');\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.name = qualifiedName;\n\t\tnode.namespaceURI = namespaceURI;\n\t\tnode.specified = true;\n\t\tif(pl.length == 2){\n\t\t\tnode.prefix = pl[0];\n\t\t\tnode.localName = pl[1];\n\t\t}else{\n\t\t\t//el.prefix = null;\n\t\t\tnode.localName = qualifiedName;\n\t\t}\n\t\treturn node;\n\t}\n};\n_extends(Document,Node);\n\n\nfunction Element() {\n\tthis._nsMap = {};\n};\nElement.prototype = {\n\tnodeType : ELEMENT_NODE,\n\thasAttribute : function(name){\n\t\treturn this.getAttributeNode(name)!=null;\n\t},\n\tgetAttribute : function(name){\n\t\tvar attr = this.getAttributeNode(name);\n\t\treturn attr && attr.value || '';\n\t},\n\tgetAttributeNode : function(name){\n\t\treturn this.attributes.getNamedItem(name);\n\t},\n\tsetAttribute : function(name, value){\n\t\tvar attr = this.ownerDocument.createAttribute(name);\n\t\tattr.value = attr.nodeValue = \"\" + value;\n\t\tthis.setAttributeNode(attr)\n\t},\n\tremoveAttribute : function(name){\n\t\tvar attr = this.getAttributeNode(name)\n\t\tattr && this.removeAttributeNode(attr);\n\t},\n\t\n\t//four real opeartion method\n\tappendChild:function(newChild){\n\t\tif(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){\n\t\t\treturn this.insertBefore(newChild,null);\n\t\t}else{\n\t\t\treturn _appendSingleChild(this,newChild);\n\t\t}\n\t},\n\tsetAttributeNode : function(newAttr){\n\t\treturn this.attributes.setNamedItem(newAttr);\n\t},\n\tsetAttributeNodeNS : function(newAttr){\n\t\treturn this.attributes.setNamedItemNS(newAttr);\n\t},\n\tremoveAttributeNode : function(oldAttr){\n\t\treturn this.attributes.removeNamedItem(oldAttr.nodeName);\n\t},\n\t//get real attribute name,and remove it by removeAttributeNode\n\tremoveAttributeNS : function(namespaceURI, localName){\n\t\tvar old = this.getAttributeNodeNS(namespaceURI, localName);\n\t\told && this.removeAttributeNode(old);\n\t},\n\t\n\thasAttributeNS : function(namespaceURI, localName){\n\t\treturn this.getAttributeNodeNS(namespaceURI, localName)!=null;\n\t},\n\tgetAttributeNS : function(namespaceURI, localName){\n\t\tvar attr = this.getAttributeNodeNS(namespaceURI, localName);\n\t\treturn attr && attr.value || '';\n\t},\n\tsetAttributeNS : function(namespaceURI, qualifiedName, value){\n\t\tvar attr = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName);\n\t\tattr.value = attr.nodeValue = \"\" + value;\n\t\tthis.setAttributeNode(attr)\n\t},\n\tgetAttributeNodeNS : function(namespaceURI, localName){\n\t\treturn this.attributes.getNamedItemNS(namespaceURI, localName);\n\t},\n\t\n\tgetElementsByTagName : function(tagName){\n\t\treturn new LiveNodeList(this,function(base){\n\t\t\tvar ls = [];\n\t\t\t_visitNode(base,function(node){\n\t\t\t\tif(node !== base && node.nodeType == ELEMENT_NODE && (tagName === '*' || node.tagName == tagName)){\n\t\t\t\t\tls.push(node);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn ls;\n\t\t});\n\t},\n\tgetElementsByTagNameNS : function(namespaceURI, localName){\n\t\treturn new LiveNodeList(this,function(base){\n\t\t\tvar ls = [];\n\t\t\t_visitNode(base,function(node){\n\t\t\t\tif(node !== base && node.nodeType === ELEMENT_NODE && (namespaceURI === '*' || node.namespaceURI === namespaceURI) && (localName === '*' || node.localName == localName)){\n\t\t\t\t\tls.push(node);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn ls;\n\t\t});\n\t}\n};\nDocument.prototype.getElementsByTagName = Element.prototype.getElementsByTagName;\nDocument.prototype.getElementsByTagNameNS = Element.prototype.getElementsByTagNameNS;\n\n\n_extends(Element,Node);\nfunction Attr() {\n};\nAttr.prototype.nodeType = ATTRIBUTE_NODE;\n_extends(Attr,Node);\n\n\nfunction CharacterData() {\n};\nCharacterData.prototype = {\n\tdata : '',\n\tsubstringData : function(offset, count) {\n\t\treturn this.data.substring(offset, offset+count);\n\t},\n\tappendData: function(text) {\n\t\ttext = this.data+text;\n\t\tthis.nodeValue = this.data = text;\n\t\tthis.length = text.length;\n\t},\n\tinsertData: function(offset,text) {\n\t\tthis.replaceData(offset,0,text);\n\t\n\t},\n\tappendChild:function(newChild){\n\t\t//if(!(newChild instanceof CharacterData)){\n\t\t\tthrow new Error(ExceptionMessage[3])\n\t\t//}\n\t\treturn Node.prototype.appendChild.apply(this,arguments)\n\t},\n\tdeleteData: function(offset, count) {\n\t\tthis.replaceData(offset,count,\"\");\n\t},\n\treplaceData: function(offset, count, text) {\n\t\tvar start = this.data.substring(0,offset);\n\t\tvar end = this.data.substring(offset+count);\n\t\ttext = start + text + end;\n\t\tthis.nodeValue = this.data = text;\n\t\tthis.length = text.length;\n\t}\n}\n_extends(CharacterData,Node);\nfunction Text() {\n};\nText.prototype = {\n\tnodeName : \"#text\",\n\tnodeType : TEXT_NODE,\n\tsplitText : function(offset) {\n\t\tvar text = this.data;\n\t\tvar newText = text.substring(offset);\n\t\ttext = text.substring(0, offset);\n\t\tthis.data = this.nodeValue = text;\n\t\tthis.length = text.length;\n\t\tvar newNode = this.ownerDocument.createTextNode(newText);\n\t\tif(this.parentNode){\n\t\t\tthis.parentNode.insertBefore(newNode, this.nextSibling);\n\t\t}\n\t\treturn newNode;\n\t}\n}\n_extends(Text,CharacterData);\nfunction Comment() {\n};\nComment.prototype = {\n\tnodeName : \"#comment\",\n\tnodeType : COMMENT_NODE\n}\n_extends(Comment,CharacterData);\n\nfunction CDATASection() {\n};\nCDATASection.prototype = {\n\tnodeName : \"#cdata-section\",\n\tnodeType : CDATA_SECTION_NODE\n}\n_extends(CDATASection,CharacterData);\n\n\nfunction DocumentType() {\n};\nDocumentType.prototype.nodeType = DOCUMENT_TYPE_NODE;\n_extends(DocumentType,Node);\n\nfunction Notation() {\n};\nNotation.prototype.nodeType = NOTATION_NODE;\n_extends(Notation,Node);\n\nfunction Entity() {\n};\nEntity.prototype.nodeType = ENTITY_NODE;\n_extends(Entity,Node);\n\nfunction EntityReference() {\n};\nEntityReference.prototype.nodeType = ENTITY_REFERENCE_NODE;\n_extends(EntityReference,Node);\n\nfunction DocumentFragment() {\n};\nDocumentFragment.prototype.nodeName =\t\"#document-fragment\";\nDocumentFragment.prototype.nodeType =\tDOCUMENT_FRAGMENT_NODE;\n_extends(DocumentFragment,Node);\n\n\nfunction ProcessingInstruction() {\n}\nProcessingInstruction.prototype.nodeType = PROCESSING_INSTRUCTION_NODE;\n_extends(ProcessingInstruction,Node);\nfunction XMLSerializer(){}\nXMLSerializer.prototype.serializeToString = function(node){\n\tvar buf = [];\n\tserializeToString(node,buf);\n\treturn buf.join('');\n}\nNode.prototype.toString =function(){\n\treturn XMLSerializer.prototype.serializeToString(this);\n}\nfunction serializeToString(node,buf){\n\tswitch(node.nodeType){\n\tcase ELEMENT_NODE:\n\t\tvar attrs = node.attributes;\n\t\tvar len = attrs.length;\n\t\tvar child = node.firstChild;\n\t\tvar nodeName = node.tagName;\n\t\tvar isHTML = htmlns === node.namespaceURI\n\t\tbuf.push('<',nodeName);\n\t\tfor(var i=0;i<len;i++){\n\t\t\tserializeToString(attrs.item(i),buf);\n\t\t}\n\t\tif(child || isHTML && !/^(?:meta|link|img|br|hr|input|button)$/i.test(nodeName)){\n\t\t\tbuf.push('>');\n\t\t\t//if is cdata child node\n\t\t\tif(isHTML && /^script$/i.test(nodeName)){\n\t\t\t\tif(child){\n\t\t\t\t\tbuf.push(child.data);\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\twhile(child){\n\t\t\t\t\tserializeToString(child,buf);\n\t\t\t\t\tchild = child.nextSibling;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbuf.push('</',nodeName,'>');\n\t\t}else{\n\t\t\tbuf.push('/>');\n\t\t}\n\t\treturn;\n\tcase DOCUMENT_NODE:\n\tcase DOCUMENT_FRAGMENT_NODE:\n\t\tvar child = node.firstChild;\n\t\twhile(child){\n\t\t\tserializeToString(child,buf);\n\t\t\tchild = child.nextSibling;\n\t\t}\n\t\treturn;\n\tcase ATTRIBUTE_NODE:\n\t\treturn buf.push(' ',node.name,'=\"',node.value.replace(/[<&\"]/g,_xmlEncoder),'\"');\n\tcase TEXT_NODE:\n\t\treturn buf.push(node.data.replace(/[<&]/g,_xmlEncoder));\n\tcase CDATA_SECTION_NODE:\n\t\treturn buf.push( '<![CDATA[',node.data,']]>');\n\tcase COMMENT_NODE:\n\t\treturn buf.push( \"<!--\",node.data,\"-->\");\n\tcase DOCUMENT_TYPE_NODE:\n\t\tvar pubid = node.publicId;\n\t\tvar sysid = node.systemId;\n\t\tbuf.push('<!DOCTYPE ',node.name);\n\t\tif(pubid){\n\t\t\tbuf.push(' PUBLIC \"',pubid);\n\t\t\tif (sysid && sysid!='.') {\n\t\t\t\tbuf.push( '\" \"',sysid);\n\t\t\t}\n\t\t\tbuf.push('\">');\n\t\t}else if(sysid && sysid!='.'){\n\t\t\tbuf.push(' SYSTEM \"',sysid,'\">');\n\t\t}else{\n\t\t\tvar sub = node.internalSubset;\n\t\t\tif(sub){\n\t\t\t\tbuf.push(\" [\",sub,\"]\");\n\t\t\t}\n\t\t\tbuf.push(\">\");\n\t\t}\n\t\treturn;\n\tcase PROCESSING_INSTRUCTION_NODE:\n\t\treturn buf.push( \"<?\",node.target,\" \",node.data,\"?>\");\n\tcase ENTITY_REFERENCE_NODE:\n\t\treturn buf.push( '&',node.nodeName,';');\n\t//case ENTITY_NODE:\n\t//case NOTATION_NODE:\n\tdefault:\n\t\tbuf.push('??',node.nodeName);\n\t}\n}\nfunction importNode(doc,node,deep){\n\tvar node2;\n\tswitch (node.nodeType) {\n\tcase ELEMENT_NODE:\n\t\tnode2 = node.cloneNode(false);\n\t\tnode2.ownerDocument = doc;\n\t\t//var attrs = node2.attributes;\n\t\t//var len = attrs.length;\n\t\t//for(var i=0;i<len;i++){\n\t\t\t//node2.setAttributeNodeNS(importNode(doc,attrs.item(i),deep));\n\t\t//}\n\tcase DOCUMENT_FRAGMENT_NODE:\n\t\tbreak;\n\tcase ATTRIBUTE_NODE:\n\t\tdeep = true;\n\t\tbreak;\n\t//case ENTITY_REFERENCE_NODE:\n\t//case PROCESSING_INSTRUCTION_NODE:\n\t////case TEXT_NODE:\n\t//case CDATA_SECTION_NODE:\n\t//case COMMENT_NODE:\n\t//\tdeep = false;\n\t//\tbreak;\n\t//case DOCUMENT_NODE:\n\t//case DOCUMENT_TYPE_NODE:\n\t//cannot be imported.\n\t//case ENTITY_NODE:\n\t//case NOTATION_NODE：\n\t//can not hit in level3\n\t//default:throw e;\n\t}\n\tif(!node2){\n\t\tnode2 = node.cloneNode(false);//false\n\t}\n\tnode2.ownerDocument = doc;\n\tnode2.parentNode = null;\n\tif(deep){\n\t\tvar child = node.firstChild;\n\t\twhile(child){\n\t\t\tnode2.appendChild(importNode(doc,child,deep));\n\t\t\tchild = child.nextSibling;\n\t\t}\n\t}\n\treturn node2;\n}\n//\n//var _relationMap = {firstChild:1,lastChild:1,previousSibling:1,nextSibling:1,\n//\t\t\t\t\tattributes:1,childNodes:1,parentNode:1,documentElement:1,doctype,};\nfunction cloneNode(doc,node,deep){\n\tvar node2 = new node.constructor();\n\tfor(var n in node){\n\t\tvar v = node[n];\n\t\tif(typeof v != 'object' ){\n\t\t\tif(v != node2[n]){\n\t\t\t\tnode2[n] = v;\n\t\t\t}\n\t\t}\n\t}\n\tif(node.childNodes){\n\t\tnode2.childNodes = new NodeList();\n\t}\n\tnode2.ownerDocument = doc;\n\tswitch (node2.nodeType) {\n\tcase ELEMENT_NODE:\n\t\tvar attrs\t= node.attributes;\n\t\tvar attrs2\t= node2.attributes = new NamedNodeMap();\n\t\tvar len = attrs.length\n\t\tattrs2._ownerElement = node2;\n\t\tfor(var i=0;i<len;i++){\n\t\t\tnode2.setAttributeNode(cloneNode(doc,attrs.item(i),true));\n\t\t}\n\t\tbreak;;\n\tcase ATTRIBUTE_NODE:\n\t\tdeep = true;\n\t}\n\tif(deep){\n\t\tvar child = node.firstChild;\n\t\twhile(child){\n\t\t\tnode2.appendChild(cloneNode(doc,child,deep));\n\t\t\tchild = child.nextSibling;\n\t\t}\n\t}\n\treturn node2;\n}\n\nfunction __set__(object,key,value){\n\tobject[key] = value\n}\n//do dynamic\ntry{\n\tif(Object.defineProperty){\n\t\tObject.defineProperty(LiveNodeList.prototype,'length',{\n\t\t\tget:function(){\n\t\t\t\t_updateLiveList(this);\n\t\t\t\treturn this.$$length;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(Node.prototype,'textContent',{\n\t\t\tget:function(){\n\t\t\t\treturn getTextContent(this);\n\t\t\t},\n\t\t\tset:function(data){\n\t\t\t\tswitch(this.nodeType){\n\t\t\t\tcase 1:\n\t\t\t\tcase 11:\n\t\t\t\t\twhile(this.firstChild){\n\t\t\t\t\t\tthis.removeChild(this.firstChild);\n\t\t\t\t\t}\n\t\t\t\t\tif(data || String(data)){\n\t\t\t\t\t\tthis.appendChild(this.ownerDocument.createTextNode(data));\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\t//TODO:\n\t\t\t\t\tthis.data = data;\n\t\t\t\t\tthis.value = value;\n\t\t\t\t\tthis.nodeValue = data;\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t\t\n\t\tfunction getTextContent(node){\n\t\t\tswitch(node.nodeType){\n\t\t\tcase 1:\n\t\t\tcase 11:\n\t\t\t\tvar buf = [];\n\t\t\t\tnode = node.firstChild;\n\t\t\t\twhile(node){\n\t\t\t\t\tif(node.nodeType!==7 && node.nodeType !==8){\n\t\t\t\t\t\tbuf.push(getTextContent(node));\n\t\t\t\t\t}\n\t\t\t\t\tnode = node.nextSibling;\n\t\t\t\t}\n\t\t\t\treturn buf.join('');\n\t\t\tdefault:\n\t\t\t\treturn node.nodeValue;\n\t\t\t}\n\t\t}\n\t\t__set__ = function(object,key,value){\n\t\t\t//console.log(value)\n\t\t\tobject['$$'+key] = value\n\t\t}\n\t}\n}catch(e){//ie8\n}\n\nreturn DOMImplementation;\n});\n"
  },
  {
    "path": "lib/ace/mode/xml/sax.js",
    "content": "define(function(require, exports, module) {\n\n//[4]   \tNameStartChar\t   ::=   \t\":\" | [A-Z] | \"_\" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]\n//[4a]   \tNameChar\t   ::=   \tNameStartChar | \"-\" | \".\" | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]\n//[5]   \tName\t   ::=   \tNameStartChar (NameChar)*\nvar nameStartChar = /[A-Z_a-z\\xC0-\\xD6\\xD8-\\xF6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]///\\u10000-\\uEFFFF\nvar nameChar = new RegExp(\"[\\\\-\\\\.0-9\"+nameStartChar.source.slice(1,-1)+\"\\u00B7\\u0300-\\u036F\\\\ux203F-\\u2040]\");\nvar tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\\:'+nameStartChar.source+nameChar.source+'*)?$');\n//var tagNamePattern = /^[a-zA-Z_][\\w\\-\\.]*(?:\\:[a-zA-Z_][\\w\\-\\.]*)?$/\n//var handlers = 'resolveEntity,getExternalSubset,characters,endDocument,endElement,endPrefixMapping,ignorableWhitespace,processingInstruction,setDocumentLocator,skippedEntity,startDocument,startElement,startPrefixMapping,notationDecl,unparsedEntityDecl,error,fatalError,warning,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,comment,endCDATA,endDTD,endEntity,startCDATA,startDTD,startEntity'.split(',')\n\n//S_TAG,\tS_ATTR,\tS_EQ,\tS_V\n//S_ATTR_S,\tS_E,\tS_S,\tS_C\nvar S_TAG = 0;//tag name offerring\nvar S_ATTR = 1;//attr name offerring \nvar S_ATTR_S=2;//attr name end and space offer\nvar S_EQ = 3;//=space?\nvar S_V = 4;//attr value(no quot value only)\nvar S_E = 5;//attr value end and no space(quot end)\nvar S_S = 6;//(attr value end || tag end ) && (space offer)\nvar S_C = 7;//closed el<el />\n\nfunction XMLReader(){\n\t\n}\n\nXMLReader.prototype = {\n\tparse:function(source,defaultNSMap,entityMap){\n\t\tvar domBuilder = this.domBuilder;\n\t\tdomBuilder.startDocument();\n\t\t_copy(defaultNSMap ,defaultNSMap = {})\n\t\tparse(source,defaultNSMap,entityMap,\n\t\t\t\tdomBuilder,this.errorHandler);\n\t\tdomBuilder.endDocument();\n\t}\n}\nfunction parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){\n  function fixedFromCharCode(code) {\n\t\t// String.prototype.fromCharCode does not supports\n\t\t// > 2 bytes unicode chars directly\n\t\tif (code > 0xffff) {\n\t\t\tcode -= 0x10000;\n\t\t\tvar surrogate1 = 0xd800 + (code >> 10)\n\t\t\t\t, surrogate2 = 0xdc00 + (code & 0x3ff);\n\n\t\t\treturn String.fromCharCode(surrogate1, surrogate2);\n\t\t} else {\n\t\t\treturn String.fromCharCode(code);\n\t\t}\n\t}\n\tfunction entityReplacer(a){\n\t\tvar k = a.slice(1,-1);\n\t\tif(k in entityMap){\n\t\t\treturn entityMap[k]; \n\t\t}else if(k.charAt(0) === '#'){\n\t\t\treturn fixedFromCharCode(parseInt(k.substr(1).replace('x','0x')))\n\t\t}else{\n\t\t\terrorHandler.error('entity not found:'+a);\n\t\t\treturn a;\n\t\t}\n\t}\n\tfunction appendText(end){//has some bugs\n\t\tvar xt = source.substring(start,end).replace(/&#?\\w+;/g,entityReplacer);\n\t\tlocator&&position(start);\n\t\tdomBuilder.characters(xt,0,end-start);\n\t\tstart = end\n\t}\n\tfunction position(start,m){\n\t\twhile(start>=endPos && (m = linePattern.exec(source))){\n\t\t\tstartPos = m.index;\n\t\t\tendPos = startPos + m[0].length;\n\t\t\tlocator.lineNumber++;\n\t\t\t//console.log('line++:',locator,startPos,endPos)\n\t\t}\n\t\tlocator.columnNumber = start-startPos+1;\n\t}\n\tvar startPos = 0;\n\tvar endPos = 0;\n\tvar linePattern = /.+(?:\\r\\n?|\\n)|.*$/g\n\tvar locator = domBuilder.locator;\n\t\n\tvar parseStack = [{currentNSMap:defaultNSMapCopy}]\n\tvar closeMap = {};\n\tvar start = 0;\n\twhile(true){\n\t\tvar i = source.indexOf('<',start);\n\t\tif(i<0){\n\t\t\tif(!source.substr(start).match(/^\\s*$/)){\n\t\t\t\tvar doc = domBuilder.document;\n    \t\t\tvar text = doc.createTextNode(source.substr(start));\n    \t\t\tdoc.appendChild(text);\n    \t\t\tdomBuilder.currentElement = text;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif(i>start){\n\t\t\tappendText(i);\n\t\t}\n\t\tswitch(source.charAt(i+1)){\n\t\tcase '/':\n\t\t\tvar end = source.indexOf('>',i+3);\n\t\t\tvar tagName = source.substring(i+2,end);\n\t\t\tvar config;\n\t\t\tif (parseStack.length > 1) {\n\t\t\t\tconfig = parseStack.pop();\n\t\t\t} else {\n\t\t\t\terrorHandler.fatalError(\"end tag name not found for: \"+tagName);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tvar localNSMap = config.localNSMap;\n\t\t\t\n\t        if(config.tagName != tagName){\n\t            errorHandler.fatalError(\"end tag name: \" + tagName + \" does not match the current start tagName: \"+config.tagName );\n\t        }\n\t\t\tdomBuilder.endElement(config.uri,config.localName,tagName);\n\t\t\tif(localNSMap){\n\t\t\t\tfor(var prefix in localNSMap){\n\t\t\t\t\tdomBuilder.endPrefixMapping(prefix) ;\n\t\t\t\t}\n\t\t\t}\n\t\t\tend++;\n\t\t\tbreak;\n\t\t\t// end elment\n\t\tcase '?':// <?...?>\n\t\t\tlocator&&position(i);\n\t\t\tend = parseInstruction(source,i,domBuilder);\n\t\t\tbreak;\n\t\tcase '!':// <!doctype,<![CDATA,<!--\n\t\t\tlocator&&position(i);\n\t\t\tend = parseDCC(source,i,domBuilder,errorHandler);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\ttry{\n\t\t\t\tlocator&&position(i);\n\t\t\t\t\n\t\t\t\tvar el = new ElementAttributes();\n\t\t\t\t\n\t\t\t\t//elStartEnd\n\t\t\t\tvar end = parseElementStartPart(source,i,el,entityReplacer,errorHandler);\n\t\t\t\tvar len = el.length;\n\t\t\t\t//position fixed\n\t\t\t\tif(len && locator){\n\t\t\t\t\tvar backup = copyLocator(locator,{});\n\t\t\t\t\tfor(var i = 0;i<len;i++){\n\t\t\t\t\t\tvar a = el[i];\n\t\t\t\t\t\tposition(a.offset);\n\t\t\t\t\t\ta.offset = copyLocator(locator,{});\n\t\t\t\t\t}\n\t\t\t\t\tcopyLocator(backup,locator);\n\t\t\t\t}\n\t\t\t\tif(!el.closed && fixSelfClosed(source,end,el.tagName,closeMap)){\n\t\t\t\t\tel.closed = true;\n\t\t\t\t\tif(!entityMap.nbsp){\n\t\t\t\t\t\terrorHandler.warning('unclosed xml attribute');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tappendElement(el,domBuilder,parseStack);\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tif(el.uri === 'http://www.w3.org/1999/xhtml' && !el.closed){\n\t\t\t\t\tend = parseHtmlSpecialContent(source,end,el.tagName,entityReplacer,domBuilder)\n\t\t\t\t}else{\n\t\t\t\t\tend++;\n\t\t\t\t}\n\t\t\t}catch(e){\n\t\t\t\terrorHandler.error('element parse error: '+e);\n\t\t\t\tend = -1;\n\t\t\t}\n\n\t\t}\n\t\tif(end<0){\n\t\t\t//TODO: 这里有可能sax回退，有位置错误风险\n\t\t\tappendText(i+1);\n\t\t}else{\n\t\t\tstart = end;\n\t\t}\n\t}\n}\nfunction copyLocator(f,t){\n\tt.lineNumber = f.lineNumber;\n\tt.columnNumber = f.columnNumber;\n\treturn t;\n\t\n}\n\n/**\n * @see #appendElement(source,elStartEnd,el,selfClosed,entityReplacer,domBuilder,parseStack);\n * @return end of the elementStartPart(end of elementEndPart for selfClosed el)\n */\nfunction parseElementStartPart(source,start,el,entityReplacer,errorHandler){\n\tvar attrName;\n\tvar value;\n\tvar p = ++start;\n\tvar s = S_TAG;//status\n\twhile(true){\n\t\tvar c = source.charAt(p);\n\t\tswitch(c){\n\t\tcase '=':\n\t\t\tif(s === S_ATTR){//attrName\n\t\t\t\tattrName = source.slice(start,p);\n\t\t\t\ts = S_EQ;\n\t\t\t}else if(s === S_ATTR_S){\n\t\t\t\ts = S_EQ;\n\t\t\t}else{\n\t\t\t\t//fatalError: equal must after attrName or space after attrName\n\t\t\t\tthrow new Error('attribute equal must after attrName');\n\t\t\t}\n\t\t\tbreak;\n\t\tcase '\\'':\n\t\tcase '\"':\n\t\t\tif(s === S_EQ){//equal\n\t\t\t\tstart = p+1;\n\t\t\t\tp = source.indexOf(c,start)\n\t\t\t\tif(p>0){\n\t\t\t\t\tvalue = source.slice(start,p).replace(/&#?\\w+;/g,entityReplacer);\n\t\t\t\t\tel.add(attrName,value,start-1);\n\t\t\t\t\ts = S_E;\n\t\t\t\t}else{\n\t\t\t\t\t//fatalError: no end quot match\n\t\t\t\t\tthrow new Error('attribute value no end \\''+c+'\\' match');\n\t\t\t\t}\n\t\t\t}else if(s == S_V){\n\t\t\t\tvalue = source.slice(start,p).replace(/&#?\\w+;/g,entityReplacer);\n\t\t\t\t//console.log(attrName,value,start,p)\n\t\t\t\tel.add(attrName,value,start);\n\t\t\t\t//console.dir(el)\n\t\t\t\terrorHandler.warning('attribute \"'+attrName+'\" missed start quot('+c+')!!');\n\t\t\t\tstart = p+1;\n\t\t\t\ts = S_E\n\t\t\t}else{\n\t\t\t\t//fatalError: no equal before\n\t\t\t\tthrow new Error('attribute value must after \"=\"');\n\t\t\t}\n\t\t\tbreak;\n\t\tcase '/':\n\t\t\tswitch(s){\n\t\t\tcase S_TAG:\n\t\t\t\tel.setTagName(source.slice(start,p));\n\t\t\tcase S_E:\n\t\t\tcase S_S:\n\t\t\tcase S_C:\n\t\t\t\ts = S_C;\n\t\t\t\tel.closed = true;\n\t\t\tcase S_V:\n\t\t\tcase S_ATTR:\n\t\t\tcase S_ATTR_S:\n\t\t\t\tbreak;\n\t\t\t//case S_EQ:\n\t\t\tdefault:\n\t\t\t\tthrow new Error(\"attribute invalid close char('/')\")\n\t\t\t}\n\t\t\tbreak;\n\t\tcase ''://end document\n\t\t\t//throw new Error('unexpected end of input')\n\t\t\terrorHandler.error('unexpected end of input');\n\t\tcase '>':\n\t\t\tswitch(s){\n\t\t\tcase S_TAG:\n\t\t\t\tel.setTagName(source.slice(start,p));\n\t\t\tcase S_E:\n\t\t\tcase S_S:\n\t\t\tcase S_C:\n\t\t\t\tbreak;//normal\n\t\t\tcase S_V://Compatible state\n\t\t\tcase S_ATTR:\n\t\t\t\tvalue = source.slice(start,p);\n\t\t\t\tif(value.slice(-1) === '/'){\n\t\t\t\t\tel.closed  = true;\n\t\t\t\t\tvalue = value.slice(0,-1)\n\t\t\t\t}\n\t\t\tcase S_ATTR_S:\n\t\t\t\tif(s === S_ATTR_S){\n\t\t\t\t\tvalue = attrName;\n\t\t\t\t}\n\t\t\t\tif(s == S_V){\n\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed quot(\")!!');\n\t\t\t\t\tel.add(attrName,value.replace(/&#?\\w+;/g,entityReplacer),start)\n\t\t\t\t}else{\n\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed value!! \"'+value+'\" instead!!')\n\t\t\t\t\tel.add(value,value,start)\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase S_EQ:\n\t\t\t\tthrow new Error('attribute value missed!!');\n\t\t\t}\n//\t\t\tconsole.log(tagName,tagNamePattern,tagNamePattern.test(tagName))\n\t\t\treturn p;\n\t\t/*xml space '\\x20' | #x9 | #xD | #xA; */\n\t\tcase '\\u0080':\n\t\t\tc = ' ';\n\t\tdefault:\n\t\t\tif(c<= ' '){//space\n\t\t\t\tswitch(s){\n\t\t\t\tcase S_TAG:\n\t\t\t\t\tel.setTagName(source.slice(start,p));//tagName\n\t\t\t\t\ts = S_S;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR:\n\t\t\t\t\tattrName = source.slice(start,p)\n\t\t\t\t\ts = S_ATTR_S;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_V:\n\t\t\t\t\tvar value = source.slice(start,p).replace(/&#?\\w+;/g,entityReplacer);\n\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed quot(\")!!');\n\t\t\t\t\tel.add(attrName,value,start)\n\t\t\t\tcase S_E:\n\t\t\t\t\ts = S_S;\n\t\t\t\t\tbreak;\n\t\t\t\t//case S_S:\n\t\t\t\t//case S_EQ:\n\t\t\t\t//case S_ATTR_S:\n\t\t\t\t//\tvoid();break;\n\t\t\t\t//case S_C:\n\t\t\t\t\t//ignore warning\n\t\t\t\t}\n\t\t\t}else{//not space\n//S_TAG,\tS_ATTR,\tS_EQ,\tS_V\n//S_ATTR_S,\tS_E,\tS_S,\tS_C\n\t\t\t\tswitch(s){\n\t\t\t\t//case S_TAG:void();break;\n\t\t\t\t//case S_ATTR:void();break;\n\t\t\t\t//case S_V:void();break;\n\t\t\t\tcase S_ATTR_S:\n\t\t\t\t\terrorHandler.warning('attribute \"'+attrName+'\" missed value!! \"'+attrName+'\" instead!!')\n\t\t\t\t\tel.add(attrName,attrName,start);\n\t\t\t\t\tstart = p;\n\t\t\t\t\ts = S_ATTR;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_E:\n\t\t\t\t\terrorHandler.warning('attribute space is required\"'+attrName+'\"!!')\n\t\t\t\tcase S_S:\n\t\t\t\t\ts = S_ATTR;\n\t\t\t\t\tstart = p;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_EQ:\n\t\t\t\t\ts = S_V;\n\t\t\t\t\tstart = p;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_C:\n\t\t\t\t\tthrow new Error(\"elements closed character '/' and '>' must be connected to\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tp++;\n\t}\n}\n/**\n * @return end of the elementStartPart(end of elementEndPart for selfClosed el)\n */\nfunction appendElement(el,domBuilder,parseStack){\n\tvar tagName = el.tagName;\n\tvar localNSMap = null;\n\tvar currentNSMap = parseStack[parseStack.length-1].currentNSMap;\n\tvar i = el.length;\n\twhile(i--){\n\t\tvar a = el[i];\n\t\tvar qName = a.qName;\n\t\tvar value = a.value;\n\t\tvar nsp = qName.indexOf(':');\n\t\tif(nsp>0){\n\t\t\tvar prefix = a.prefix = qName.slice(0,nsp);\n\t\t\tvar localName = qName.slice(nsp+1);\n\t\t\tvar nsPrefix = prefix === 'xmlns' && localName\n\t\t}else{\n\t\t\tlocalName = qName;\n\t\t\tprefix = null\n\t\t\tnsPrefix = qName === 'xmlns' && ''\n\t\t}\n\t\t//can not set prefix,because prefix !== ''\n\t\ta.localName = localName ;\n\t\t//prefix == null for no ns prefix attribute \n\t\tif(nsPrefix !== false){//hack!!\n\t\t\tif(localNSMap == null){\n\t\t\t\tlocalNSMap = {}\n\t\t\t\t//console.log(currentNSMap,0)\n\t\t\t\t_copy(currentNSMap,currentNSMap={})\n\t\t\t\t//console.log(currentNSMap,1)\n\t\t\t}\n\t\t\tcurrentNSMap[nsPrefix] = localNSMap[nsPrefix] = value;\n\t\t\ta.uri = 'http://www.w3.org/2000/xmlns/'\n\t\t\tdomBuilder.startPrefixMapping(nsPrefix, value) \n\t\t}\n\t}\n\tvar i = el.length;\n\twhile(i--){\n\t\ta = el[i];\n\t\tvar prefix = a.prefix;\n\t\tif(prefix){//no prefix attribute has no namespace\n\t\t\tif(prefix === 'xml'){\n\t\t\t\ta.uri = 'http://www.w3.org/XML/1998/namespace';\n\t\t\t}if(prefix !== 'xmlns'){\n\t\t\t\ta.uri = currentNSMap[prefix]\n\t\t\t\t\n\t\t\t\t//{console.log('###'+a.qName,domBuilder.locator.systemId+'',currentNSMap,a.uri)}\n\t\t\t}\n\t\t}\n\t}\n\tvar nsp = tagName.indexOf(':');\n\tif(nsp>0){\n\t\tprefix = el.prefix = tagName.slice(0,nsp);\n\t\tlocalName = el.localName = tagName.slice(nsp+1);\n\t}else{\n\t\tprefix = null;//important!!\n\t\tlocalName = el.localName = tagName;\n\t}\n\t//no prefix element has default namespace\n\tvar ns = el.uri = currentNSMap[prefix || ''];\n\tdomBuilder.startElement(ns,localName,tagName,el);\n\t//endPrefixMapping and startPrefixMapping have not any help for dom builder\n\t//localNSMap = null\n\tif(el.closed){\n\t\tdomBuilder.endElement(ns,localName,tagName);\n\t\tif(localNSMap){\n\t\t\tfor(prefix in localNSMap){\n\t\t\t\tdomBuilder.endPrefixMapping(prefix) \n\t\t\t}\n\t\t}\n\t}else{\n\t\tel.currentNSMap = currentNSMap;\n\t\tel.localNSMap = localNSMap;\n\t\tparseStack.push(el);\n\t}\n}\nfunction parseHtmlSpecialContent(source,elStartEnd,tagName,entityReplacer,domBuilder){\n\tif(/^(?:script|textarea)$/i.test(tagName)){\n\t\tvar elEndStart =  source.indexOf('</'+tagName+'>',elStartEnd);\n\t\tvar text = source.substring(elStartEnd+1,elEndStart);\n\t\tif(/[&<]/.test(text)){\n\t\t\tif(/^script$/i.test(tagName)){\n\t\t\t\t//if(!/\\]\\]>/.test(text)){\n\t\t\t\t\t//lexHandler.startCDATA();\n\t\t\t\t\tdomBuilder.characters(text,0,text.length);\n\t\t\t\t\t//lexHandler.endCDATA();\n\t\t\t\t\treturn elEndStart;\n\t\t\t\t//}\n\t\t\t}//}else{//text area\n\t\t\t\ttext = text.replace(/&#?\\w+;/g,entityReplacer);\n\t\t\t\tdomBuilder.characters(text,0,text.length);\n\t\t\t\treturn elEndStart;\n\t\t\t//}\n\t\t\t\n\t\t}\n\t}\n\treturn elStartEnd+1;\n}\nfunction fixSelfClosed(source,elStartEnd,tagName,closeMap){\n\t//if(tagName in closeMap){\n\tvar pos = closeMap[tagName];\n\tif(pos == null){\n\t\t//console.log(tagName)\n\t\tpos = closeMap[tagName] = source.lastIndexOf('</'+tagName+'>')\n\t}\n\treturn pos<elStartEnd;\n\t//} \n}\nfunction _copy(source,target){\n\tfor(var n in source){target[n] = source[n]}\n}\nfunction parseDCC(source,start,domBuilder,errorHandler){//sure start with '<!'\n\tvar next= source.charAt(start+2)\n\tswitch(next){\n\tcase '-':\n\t\tif(source.charAt(start + 3) === '-'){\n\t\t\tvar end = source.indexOf('-->',start+4);\n\t\t\t//append comment source.substring(4,end)//<!--\n\t\t\tif(end>start){\n\t\t\t\tdomBuilder.comment(source,start+4,end-start-4);\n\t\t\t\treturn end+3;\n\t\t\t}else{\n\t\t\t\terrorHandler.error(\"Unclosed comment\");\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}else{\n\t\t\t//error\n\t\t\treturn -1;\n\t\t}\n\tdefault:\n\t\tif(source.substr(start+3,6) == 'CDATA['){\n\t\t\tvar end = source.indexOf(']]>',start+9);\n\t\t\tdomBuilder.startCDATA();\n\t\t\tdomBuilder.characters(source,start+9,end-start-9);\n\t\t\tdomBuilder.endCDATA() \n\t\t\treturn end+3;\n\t\t}\n\t\t//<!DOCTYPE\n\t\t//startDTD(java.lang.String name, java.lang.String publicId, java.lang.String systemId) \n\t\tvar matchs = split(source,start);\n\t\tvar len = matchs.length;\n\t\tif(len>1 && /!doctype/i.test(matchs[0][0])){\n\t\t\tvar name = matchs[1][0];\n\t\t\tvar pubid = len>3 && /^public$/i.test(matchs[2][0]) && matchs[3][0]\n\t\t\tvar sysid = len>4 && matchs[4][0];\n\t\t\tvar lastMatch = matchs[len-1]\n\t\t\tdomBuilder.startDTD(name,pubid && pubid.replace(/^(['\"])(.*?)\\1$/,'$2'),\n\t\t\t\t\tsysid && sysid.replace(/^(['\"])(.*?)\\1$/,'$2'));\n\t\t\tdomBuilder.endDTD();\n\t\t\t\n\t\t\treturn lastMatch.index+lastMatch[0].length\n\t\t}\n\t}\n\treturn -1;\n}\n\n\n\nfunction parseInstruction(source,start,domBuilder){\n\tvar end = source.indexOf('?>',start);\n\tif(end){\n\t\tvar match = source.substring(start,end).match(/^<\\?(\\S*)\\s*([\\s\\S]*?)\\s*$/);\n\t\tif(match){\n\t\t\tvar len = match[0].length;\n\t\t\tdomBuilder.processingInstruction(match[1], match[2]) ;\n\t\t\treturn end+2;\n\t\t}else{//error\n\t\t\treturn -1;\n\t\t}\n\t}\n\treturn -1;\n}\n\n/**\n * @param source\n */\nfunction ElementAttributes(source){\n\t\n}\nElementAttributes.prototype = {\n\tsetTagName:function(tagName){\n\t\tif(!tagNamePattern.test(tagName)){\n\t\t\tthrow new Error('invalid tagName:'+tagName)\n\t\t}\n\t\tthis.tagName = tagName\n\t},\n\tadd:function(qName,value,offset){\n\t\tif(!tagNamePattern.test(qName)){\n\t\t\tthrow new Error('invalid attribute:'+qName)\n\t\t}\n\t\tthis[this.length++] = {qName:qName,value:value,offset:offset}\n\t},\n\tlength:0,\n\tgetLocalName:function(i){return this[i].localName},\n\tgetOffset:function(i){return this[i].offset},\n\tgetQName:function(i){return this[i].qName},\n\tgetURI:function(i){return this[i].uri},\n\tgetValue:function(i){return this[i].value}\n//\t,getIndex:function(uri, localName)){\n//\t\tif(localName){\n//\t\t\t\n//\t\t}else{\n//\t\t\tvar qName = uri\n//\t\t}\n//\t},\n//\tgetValue:function(){return this.getValue(this.getIndex.apply(this,arguments))},\n//\tgetType:function(uri,localName){}\n//\tgetType:function(i){},\n}\n\n\n\n\nfunction _set_proto_(thiz,parent){\n\tthiz.__proto__ = parent;\n\treturn thiz;\n}\nif(!(_set_proto_({},_set_proto_.prototype) instanceof _set_proto_)){\n\t_set_proto_ = function(thiz,parent){\n\t\tfunction p(){};\n\t\tp.prototype = parent;\n\t\tp = new p();\n\t\tfor(parent in thiz){\n\t\t\tp[parent] = thiz[parent];\n\t\t}\n\t\treturn p;\n\t}\n}\n\nfunction split(source,start){\n\tvar match;\n\tvar buf = [];\n\tvar reg = /'[^']+'|\"[^\"]+\"|[^\\s<>\\/=]+=?|(\\/?\\s*>|<)/g;\n\treg.lastIndex = start;\n\treg.exec(source);//skip <\n\twhile(match = reg.exec(source)){\n\t\tbuf.push(match);\n\t\tif(match[1])return buf;\n\t}\n}\n\nreturn XMLReader;\n});\n\n\n"
  },
  {
    "path": "lib/ace/mode/xml.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar XmlFoldMode = require(\"./folding/xml\").FoldMode;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\n\nvar Mode = function() {\n   this.HighlightRules = XmlHighlightRules;\n   this.$behaviour = new XmlBehaviour();\n   this.foldingRules = new XmlFoldMode();\n};\n\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.voidElements = lang.arrayToMap([]);\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/xml_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n    \n    this.$id = \"ace/mode/xml\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/xml_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    // http://www.w3.org/TR/REC-xml/#NT-NameChar\n    // NameStartChar\t   ::=   \t\":\" | [A-Z] | \"_\" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]\n    // NameChar\t   ::=   \tNameStartChar | \"-\" | \".\" | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        processing_instruction : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        // for doctype and processing instructions\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n\n        // for doctype and processing instructions\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : tagRegex\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ];\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/mode/xml_test.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\nif (typeof process !== \"undefined\") {\n    require(\"amd-loader\");\n}\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar EditSession = require(\"../edit_session\").EditSession;\nvar Tokenizer = require(\"../tokenizer\").Tokenizer;\nvar XmlMode = require(\"./xml\").Mode;\nvar assert = require(\"../test/assertions\");\n\nmodule.exports = {\n    setUp : function() {\n        this.mode = new XmlMode();\n    },\n\n    \"test: getTokenizer() (smoke test)\" : function() {\n        var tokenizer = this.mode.getTokenizer();\n\n        assert.ok(tokenizer instanceof Tokenizer);\n\n        var tokens = tokenizer.getLineTokens(\"<juhu>\", \"start\").tokens;\n        assert.equal(\"meta.tag.punctuation.tag-open.xml\", tokens[0].type);\n    },\n\n    \"test: toggle comment lines should not do anything\" : function() {\n        var session = new EditSession([\"    abc\", \"  cde\", \"fg\"]);\n\n        this.mode.toggleCommentLines(\"start\", session, 0, 1);\n        assert.equal([\"  <!--  abc-->\", \"  <!--cde-->\", \"fg\"].join(\"\\n\"), session.toString());\n    },\n\n    \"test: next line indent should be the same as the current line indent\" : function() {\n        assert.equal(\"     \", this.mode.getNextLineIndent(\"start\", \"     abc\"));\n        assert.equal(\"\", this.mode.getNextLineIndent(\"start\", \"abc\"));\n        assert.equal(\"\\t\", this.mode.getNextLineIndent(\"start\", \"\\tabc\"));\n    }\n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main) {\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n}\n"
  },
  {
    "path": "lib/ace/mode/xml_worker.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar Mirror = require(\"../worker/mirror\").Mirror;\nvar DOMParser = require(\"./xml/dom-parser\").DOMParser;\n\nvar Worker = exports.Worker = function(sender) {\n    Mirror.call(this, sender);\n    this.setTimeout(400);\n    this.context = null;\n};\n\noop.inherits(Worker, Mirror);\n\n(function() {\n\n    this.setOptions = function(options) {\n        this.context = options.context;\n    };\n\n    this.onUpdate = function() {\n        var value = this.doc.getValue();\n        if (!value)\n            return;\n        var parser = new DOMParser();\n        var errors = [];\n        parser.options.errorHandler = {\n            fatalError: function(fullMsg, errorMsg, locator) {\n                errors.push({\n                    row: locator.lineNumber,\n                    column: locator.columnNumber,\n                    text: errorMsg,\n                    type: \"error\"\n                });\n            },\n            error: function(fullMsg, errorMsg, locator) {\n                errors.push({\n                    row: locator.lineNumber,\n                    column: locator.columnNumber,\n                    text: errorMsg,\n                    type: \"error\"\n                });\n            },\n            warning: function(fullMsg, errorMsg, locator) {\n                errors.push({\n                    row: locator.lineNumber,\n                    column: locator.columnNumber,\n                    text: errorMsg,\n                    type: \"warning\"\n                });\n            }\n        };\n        \n        parser.parseFromString(value);\n        this.sender.emit(\"error\", errors);\n    };\n\n}).call(Worker.prototype);\n\n});\n"
  },
  {
    "path": "lib/ace/mode/xquery/Readme.md",
    "content": "This files are build from [xqlint](https://github.com/wcandillon/xqlint) (using the `grunt ace_build`)\n"
  },
  {
    "path": "lib/ace/mode/xquery/jsoniq_lexer.js",
    "content": "define(function(require, exports, module) {\nmodule.exports = (function outer (modules, cache, entry) {\n    var previousRequire = typeof require == \"function\" && require;\n    function newRequire(name, jumped){\n        if(!cache[name]) {\n            if(!modules[name]) {\n                var currentRequire = typeof require == \"function\" && require;\n                if (!jumped && currentRequire) return currentRequire(name, true);\n                if (previousRequire) return previousRequire(name, true);\n                var err = new Error('Cannot find module \\'' + name + '\\'');\n                err.code = 'MODULE_NOT_FOUND';\n                throw err;\n            }\n            var m = cache[name] = {exports:{}};\n            modules[name][0].call(m.exports, function(x){\n                var id = modules[name][1][x];\n                return newRequire(id ? id : x);\n            },m,m.exports,outer,modules,cache,entry);\n        }\n        return cache[name].exports;\n    }\n    for(var i=0;i<entry.length;i++) newRequire(entry[i]);\n    return newRequire(entry[0]);\n})\n({\"/node_modules/xqlint/lib/lexers/JSONiqTokenizer.js\":[function(_dereq_,module,exports){\n// This file was generated on Thu Jul 24, 2014 15:01 (UTC+01) by REx v5.30 which is Copyright (c) 1979-2014 by Gunther Rademacher <grd@gmx.net>\n// REx command line: JSONiqTokenizer.ebnf -ll 2 -backtrack -tree -javascript -a xqlint\n\n                                                            // line 2 \"JSONiqTokenizer.ebnf\"\n                                                            var JSONiqTokenizer = exports.JSONiqTokenizer = function JSONiqTokenizer(string, parsingEventHandler)\n                                                            {\n                                                              init(string, parsingEventHandler);\n                                                            // line 9 \"JSONiqTokenizer.js\"\n  var self = this;\n\n  this.ParseException = function(b, e, s, o, x)\n  {\n    var\n      begin = b,\n      end = e,\n      state = s,\n      offending = o,\n      expected = x;\n\n    this.getBegin = function() {return begin;};\n    this.getEnd = function() {return end;};\n    this.getState = function() {return state;};\n    this.getExpected = function() {return expected;};\n    this.getOffending = function() {return offending;};\n\n    this.getMessage = function()\n    {\n      return offending < 0 ? \"lexical analysis failed\" : \"syntax error\";\n    };\n  };\n\n  function init(string, parsingEventHandler)\n  {\n    eventHandler = parsingEventHandler;\n    input = string;\n    size = string.length;\n    reset(0, 0, 0);\n  }\n\n  this.getInput = function()\n  {\n    return input;\n  };\n\n  function reset(l, b, e)\n  {\n            b0 = b; e0 = b;\n    l1 = l; b1 = b; e1 = e;\n    end = e;\n    eventHandler.reset(input);\n  }\n\n  this.getOffendingToken = function(e)\n  {\n    var o = e.getOffending();\n    return o >= 0 ? JSONiqTokenizer.TOKEN[o] : null;\n  };\n\n  this.getExpectedTokenSet = function(e)\n  {\n    var expected;\n    if (e.getExpected() < 0)\n    {\n      expected = JSONiqTokenizer.getTokenSet(- e.getState());\n    }\n    else\n    {\n      expected = [JSONiqTokenizer.TOKEN[e.getExpected()]];\n    }\n    return expected;\n  };\n\n  this.getErrorMessage = function(e)\n  {\n    var tokenSet = this.getExpectedTokenSet(e);\n    var found = this.getOffendingToken(e);\n    var prefix = input.substring(0, e.getBegin());\n    var lines = prefix.split(\"\\n\");\n    var line = lines.length;\n    var column = lines[line - 1].length + 1;\n    var size = e.getEnd() - e.getBegin();\n    return e.getMessage()\n         + (found == null ? \"\" : \", found \" + found)\n         + \"\\nwhile expecting \"\n         + (tokenSet.length == 1 ? tokenSet[0] : (\"[\" + tokenSet.join(\", \") + \"]\"))\n         + \"\\n\"\n         + (size == 0 || found != null ? \"\" : \"after successfully scanning \" + size + \" characters beginning \")\n         + \"at line \" + line + \", column \" + column + \":\\n...\"\n         + input.substring(e.getBegin(), Math.min(input.length, e.getBegin() + 64))\n         + \"...\";\n  };\n\n  this.parse_start = function()\n  {\n    eventHandler.startNonterminal(\"start\", e0);\n    lookahead1W(14);                // ModuleDecl | Annotation | OptionDecl | Operator | Variable | Tag | AttrTest |\n                                    // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // S^WS | EOF | '!' | '\"' | '$$' | \"'\" | '(' | '(#' | '(:' | '(:~' | ')' | ',' |\n                                    // '.' | '/' | ':' | ';' | '<!--' | '<![CDATA[' | '<?' | '[' | ']' | 'after' |\n                                    // 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'as' | 'ascending' |\n                                    // 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' |\n                                    // 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'last' |\n                                    // 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' |\n                                    // 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'only' | 'option' |\n                                    // 'or' | 'order' | 'ordered' | 'ordering' | 'parent' | 'preceding' |\n                                    // 'preceding-sibling' | 'processing-instruction' | 'rename' | 'replace' |\n                                    // 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'switch' | 'text' | 'to' | 'treat' | 'try' |\n                                    // 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // 'xquery' | '{' | '|' | '}'\n    switch (l1)\n    {\n    case 58:                        // '<![CDATA['\n      shift(58);                    // '<![CDATA['\n      break;\n    case 57:                        // '<!--'\n      shift(57);                    // '<!--'\n      break;\n    case 59:                        // '<?'\n      shift(59);                    // '<?'\n      break;\n    case 43:                        // '(#'\n      shift(43);                    // '(#'\n      break;\n    case 45:                        // '(:~'\n      shift(45);                    // '(:~'\n      break;\n    case 44:                        // '(:'\n      shift(44);                    // '(:'\n      break;\n    case 37:                        // '\"'\n      shift(37);                    // '\"'\n      break;\n    case 41:                        // \"'\"\n      shift(41);                    // \"'\"\n      break;\n    case 277:                       // '}'\n      shift(277);                   // '}'\n      break;\n    case 274:                       // '{'\n      shift(274);                   // '{'\n      break;\n    case 42:                        // '('\n      shift(42);                    // '('\n      break;\n    case 46:                        // ')'\n      shift(46);                    // ')'\n      break;\n    case 52:                        // '/'\n      shift(52);                    // '/'\n      break;\n    case 65:                        // '['\n      shift(65);                    // '['\n      break;\n    case 66:                        // ']'\n      shift(66);                    // ']'\n      break;\n    case 49:                        // ','\n      shift(49);                    // ','\n      break;\n    case 51:                        // '.'\n      shift(51);                    // '.'\n      break;\n    case 56:                        // ';'\n      shift(56);                    // ';'\n      break;\n    case 54:                        // ':'\n      shift(54);                    // ':'\n      break;\n    case 36:                        // '!'\n      shift(36);                    // '!'\n      break;\n    case 276:                       // '|'\n      shift(276);                   // '|'\n      break;\n    case 40:                        // '$$'\n      shift(40);                    // '$$'\n      break;\n    case 5:                         // Annotation\n      shift(5);                     // Annotation\n      break;\n    case 4:                         // ModuleDecl\n      shift(4);                     // ModuleDecl\n      break;\n    case 6:                         // OptionDecl\n      shift(6);                     // OptionDecl\n      break;\n    case 15:                        // AttrTest\n      shift(15);                    // AttrTest\n      break;\n    case 16:                        // Wildcard\n      shift(16);                    // Wildcard\n      break;\n    case 18:                        // IntegerLiteral\n      shift(18);                    // IntegerLiteral\n      break;\n    case 19:                        // DecimalLiteral\n      shift(19);                    // DecimalLiteral\n      break;\n    case 20:                        // DoubleLiteral\n      shift(20);                    // DoubleLiteral\n      break;\n    case 8:                         // Variable\n      shift(8);                     // Variable\n      break;\n    case 9:                         // Tag\n      shift(9);                     // Tag\n      break;\n    case 7:                         // Operator\n      shift(7);                     // Operator\n      break;\n    case 35:                        // EOF\n      shift(35);                    // EOF\n      break;\n    default:\n      parse_EQName();\n    }\n    eventHandler.endNonterminal(\"start\", e0);\n  };\n\n  this.parse_StartTag = function()\n  {\n    eventHandler.startNonterminal(\"StartTag\", e0);\n    lookahead1W(8);                 // QName | S^WS | EOF | '\"' | \"'\" | '/>' | '=' | '>'\n    switch (l1)\n    {\n    case 61:                        // '>'\n      shift(61);                    // '>'\n      break;\n    case 53:                        // '/>'\n      shift(53);                    // '/>'\n      break;\n    case 29:                        // QName\n      shift(29);                    // QName\n      break;\n    case 60:                        // '='\n      shift(60);                    // '='\n      break;\n    case 37:                        // '\"'\n      shift(37);                    // '\"'\n      break;\n    case 41:                        // \"'\"\n      shift(41);                    // \"'\"\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"StartTag\", e0);\n  };\n\n  this.parse_TagContent = function()\n  {\n    eventHandler.startNonterminal(\"TagContent\", e0);\n    lookahead1(11);                 // Tag | EndTag | PredefinedEntityRef | ElementContentChar | CharRef | EOF |\n                                    // '<!--' | '<![CDATA[' | '{' | '{{' | '}}'\n    switch (l1)\n    {\n    case 25:                        // ElementContentChar\n      shift(25);                    // ElementContentChar\n      break;\n    case 9:                         // Tag\n      shift(9);                     // Tag\n      break;\n    case 10:                        // EndTag\n      shift(10);                    // EndTag\n      break;\n    case 58:                        // '<![CDATA['\n      shift(58);                    // '<![CDATA['\n      break;\n    case 57:                        // '<!--'\n      shift(57);                    // '<!--'\n      break;\n    case 21:                        // PredefinedEntityRef\n      shift(21);                    // PredefinedEntityRef\n      break;\n    case 31:                        // CharRef\n      shift(31);                    // CharRef\n      break;\n    case 275:                       // '{{'\n      shift(275);                   // '{{'\n      break;\n    case 278:                       // '}}'\n      shift(278);                   // '}}'\n      break;\n    case 274:                       // '{'\n      shift(274);                   // '{'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"TagContent\", e0);\n  };\n\n  this.parse_AposAttr = function()\n  {\n    eventHandler.startNonterminal(\"AposAttr\", e0);\n    lookahead1(10);                 // PredefinedEntityRef | EscapeApos | AposAttrContentChar | CharRef | EOF | \"'\" |\n                                    // '{' | '{{' | '}}'\n    switch (l1)\n    {\n    case 23:                        // EscapeApos\n      shift(23);                    // EscapeApos\n      break;\n    case 27:                        // AposAttrContentChar\n      shift(27);                    // AposAttrContentChar\n      break;\n    case 21:                        // PredefinedEntityRef\n      shift(21);                    // PredefinedEntityRef\n      break;\n    case 31:                        // CharRef\n      shift(31);                    // CharRef\n      break;\n    case 275:                       // '{{'\n      shift(275);                   // '{{'\n      break;\n    case 278:                       // '}}'\n      shift(278);                   // '}}'\n      break;\n    case 274:                       // '{'\n      shift(274);                   // '{'\n      break;\n    case 41:                        // \"'\"\n      shift(41);                    // \"'\"\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"AposAttr\", e0);\n  };\n\n  this.parse_QuotAttr = function()\n  {\n    eventHandler.startNonterminal(\"QuotAttr\", e0);\n    lookahead1(9);                  // PredefinedEntityRef | EscapeQuot | QuotAttrContentChar | CharRef | EOF | '\"' |\n                                    // '{' | '{{' | '}}'\n    switch (l1)\n    {\n    case 22:                        // EscapeQuot\n      shift(22);                    // EscapeQuot\n      break;\n    case 26:                        // QuotAttrContentChar\n      shift(26);                    // QuotAttrContentChar\n      break;\n    case 21:                        // PredefinedEntityRef\n      shift(21);                    // PredefinedEntityRef\n      break;\n    case 31:                        // CharRef\n      shift(31);                    // CharRef\n      break;\n    case 275:                       // '{{'\n      shift(275);                   // '{{'\n      break;\n    case 278:                       // '}}'\n      shift(278);                   // '}}'\n      break;\n    case 274:                       // '{'\n      shift(274);                   // '{'\n      break;\n    case 37:                        // '\"'\n      shift(37);                    // '\"'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"QuotAttr\", e0);\n  };\n\n  this.parse_CData = function()\n  {\n    eventHandler.startNonterminal(\"CData\", e0);\n    lookahead1(1);                  // CDataSectionContents | EOF | ']]>'\n    switch (l1)\n    {\n    case 14:                        // CDataSectionContents\n      shift(14);                    // CDataSectionContents\n      break;\n    case 67:                        // ']]>'\n      shift(67);                    // ']]>'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"CData\", e0);\n  };\n\n  this.parse_XMLComment = function()\n  {\n    eventHandler.startNonterminal(\"XMLComment\", e0);\n    lookahead1(0);                  // DirCommentContents | EOF | '-->'\n    switch (l1)\n    {\n    case 12:                        // DirCommentContents\n      shift(12);                    // DirCommentContents\n      break;\n    case 50:                        // '-->'\n      shift(50);                    // '-->'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"XMLComment\", e0);\n  };\n\n  this.parse_PI = function()\n  {\n    eventHandler.startNonterminal(\"PI\", e0);\n    lookahead1(3);                  // DirPIContents | EOF | '?' | '?>'\n    switch (l1)\n    {\n    case 13:                        // DirPIContents\n      shift(13);                    // DirPIContents\n      break;\n    case 62:                        // '?'\n      shift(62);                    // '?'\n      break;\n    case 63:                        // '?>'\n      shift(63);                    // '?>'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"PI\", e0);\n  };\n\n  this.parse_Pragma = function()\n  {\n    eventHandler.startNonterminal(\"Pragma\", e0);\n    lookahead1(2);                  // PragmaContents | EOF | '#' | '#)'\n    switch (l1)\n    {\n    case 11:                        // PragmaContents\n      shift(11);                    // PragmaContents\n      break;\n    case 38:                        // '#'\n      shift(38);                    // '#'\n      break;\n    case 39:                        // '#)'\n      shift(39);                    // '#)'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"Pragma\", e0);\n  };\n\n  this.parse_Comment = function()\n  {\n    eventHandler.startNonterminal(\"Comment\", e0);\n    lookahead1(4);                  // CommentContents | EOF | '(:' | ':)'\n    switch (l1)\n    {\n    case 55:                        // ':)'\n      shift(55);                    // ':)'\n      break;\n    case 44:                        // '(:'\n      shift(44);                    // '(:'\n      break;\n    case 32:                        // CommentContents\n      shift(32);                    // CommentContents\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"Comment\", e0);\n  };\n\n  this.parse_CommentDoc = function()\n  {\n    eventHandler.startNonterminal(\"CommentDoc\", e0);\n    lookahead1(6);                  // DocTag | DocCommentContents | EOF | '(:' | ':)'\n    switch (l1)\n    {\n    case 33:                        // DocTag\n      shift(33);                    // DocTag\n      break;\n    case 34:                        // DocCommentContents\n      shift(34);                    // DocCommentContents\n      break;\n    case 55:                        // ':)'\n      shift(55);                    // ':)'\n      break;\n    case 44:                        // '(:'\n      shift(44);                    // '(:'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"CommentDoc\", e0);\n  };\n\n  this.parse_QuotString = function()\n  {\n    eventHandler.startNonterminal(\"QuotString\", e0);\n    lookahead1(5);                  // JSONChar | JSONCharRef | JSONPredefinedCharRef | EOF | '\"'\n    switch (l1)\n    {\n    case 3:                         // JSONPredefinedCharRef\n      shift(3);                     // JSONPredefinedCharRef\n      break;\n    case 2:                         // JSONCharRef\n      shift(2);                     // JSONCharRef\n      break;\n    case 1:                         // JSONChar\n      shift(1);                     // JSONChar\n      break;\n    case 37:                        // '\"'\n      shift(37);                    // '\"'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"QuotString\", e0);\n  };\n\n  this.parse_AposString = function()\n  {\n    eventHandler.startNonterminal(\"AposString\", e0);\n    lookahead1(7);                  // PredefinedEntityRef | EscapeApos | AposChar | CharRef | EOF | \"'\"\n    switch (l1)\n    {\n    case 21:                        // PredefinedEntityRef\n      shift(21);                    // PredefinedEntityRef\n      break;\n    case 31:                        // CharRef\n      shift(31);                    // CharRef\n      break;\n    case 23:                        // EscapeApos\n      shift(23);                    // EscapeApos\n      break;\n    case 24:                        // AposChar\n      shift(24);                    // AposChar\n      break;\n    case 41:                        // \"'\"\n      shift(41);                    // \"'\"\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"AposString\", e0);\n  };\n\n  this.parse_Prefix = function()\n  {\n    eventHandler.startNonterminal(\"Prefix\", e0);\n    lookahead1W(13);                // NCName^Token | S^WS | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'first' | 'following' | 'following-sibling' | 'for' |\n                                    // 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' |\n                                    // 'in' | 'index' | 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' |\n                                    // 'is' | 'item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'switch' | 'text' | 'to' | 'treat' | 'try' |\n                                    // 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // 'xquery'\n    whitespace();\n    parse_NCName();\n    eventHandler.endNonterminal(\"Prefix\", e0);\n  };\n\n  this.parse__EQName = function()\n  {\n    eventHandler.startNonterminal(\"_EQName\", e0);\n    lookahead1W(12);                // EQName^Token | S^WS | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'first' | 'following' | 'following-sibling' | 'for' |\n                                    // 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' |\n                                    // 'in' | 'index' | 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' |\n                                    // 'is' | 'item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'switch' | 'text' | 'to' | 'treat' | 'try' |\n                                    // 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // 'xquery'\n    whitespace();\n    parse_EQName();\n    eventHandler.endNonterminal(\"_EQName\", e0);\n  };\n\n  function parse_EQName()\n  {\n    eventHandler.startNonterminal(\"EQName\", e0);\n    switch (l1)\n    {\n    case 80:                        // 'attribute'\n      shift(80);                    // 'attribute'\n      break;\n    case 94:                        // 'comment'\n      shift(94);                    // 'comment'\n      break;\n    case 118:                       // 'document-node'\n      shift(118);                   // 'document-node'\n      break;\n    case 119:                       // 'element'\n      shift(119);                   // 'element'\n      break;\n    case 122:                       // 'empty-sequence'\n      shift(122);                   // 'empty-sequence'\n      break;\n    case 143:                       // 'function'\n      shift(143);                   // 'function'\n      break;\n    case 150:                       // 'if'\n      shift(150);                   // 'if'\n      break;\n    case 163:                       // 'item'\n      shift(163);                   // 'item'\n      break;\n    case 183:                       // 'namespace-node'\n      shift(183);                   // 'namespace-node'\n      break;\n    case 189:                       // 'node'\n      shift(189);                   // 'node'\n      break;\n    case 214:                       // 'processing-instruction'\n      shift(214);                   // 'processing-instruction'\n      break;\n    case 224:                       // 'schema-attribute'\n      shift(224);                   // 'schema-attribute'\n      break;\n    case 225:                       // 'schema-element'\n      shift(225);                   // 'schema-element'\n      break;\n    case 241:                       // 'switch'\n      shift(241);                   // 'switch'\n      break;\n    case 242:                       // 'text'\n      shift(242);                   // 'text'\n      break;\n    case 251:                       // 'typeswitch'\n      shift(251);                   // 'typeswitch'\n      break;\n    default:\n      parse_FunctionName();\n    }\n    eventHandler.endNonterminal(\"EQName\", e0);\n  }\n\n  function parse_FunctionName()\n  {\n    eventHandler.startNonterminal(\"FunctionName\", e0);\n    switch (l1)\n    {\n    case 17:                        // EQName^Token\n      shift(17);                    // EQName^Token\n      break;\n    case 68:                        // 'after'\n      shift(68);                    // 'after'\n      break;\n    case 71:                        // 'ancestor'\n      shift(71);                    // 'ancestor'\n      break;\n    case 72:                        // 'ancestor-or-self'\n      shift(72);                    // 'ancestor-or-self'\n      break;\n    case 73:                        // 'and'\n      shift(73);                    // 'and'\n      break;\n    case 77:                        // 'as'\n      shift(77);                    // 'as'\n      break;\n    case 78:                        // 'ascending'\n      shift(78);                    // 'ascending'\n      break;\n    case 82:                        // 'before'\n      shift(82);                    // 'before'\n      break;\n    case 86:                        // 'case'\n      shift(86);                    // 'case'\n      break;\n    case 87:                        // 'cast'\n      shift(87);                    // 'cast'\n      break;\n    case 88:                        // 'castable'\n      shift(88);                    // 'castable'\n      break;\n    case 91:                        // 'child'\n      shift(91);                    // 'child'\n      break;\n    case 92:                        // 'collation'\n      shift(92);                    // 'collation'\n      break;\n    case 101:                       // 'copy'\n      shift(101);                   // 'copy'\n      break;\n    case 103:                       // 'count'\n      shift(103);                   // 'count'\n      break;\n    case 106:                       // 'declare'\n      shift(106);                   // 'declare'\n      break;\n    case 107:                       // 'default'\n      shift(107);                   // 'default'\n      break;\n    case 108:                       // 'delete'\n      shift(108);                   // 'delete'\n      break;\n    case 109:                       // 'descendant'\n      shift(109);                   // 'descendant'\n      break;\n    case 110:                       // 'descendant-or-self'\n      shift(110);                   // 'descendant-or-self'\n      break;\n    case 111:                       // 'descending'\n      shift(111);                   // 'descending'\n      break;\n    case 116:                       // 'div'\n      shift(116);                   // 'div'\n      break;\n    case 117:                       // 'document'\n      shift(117);                   // 'document'\n      break;\n    case 120:                       // 'else'\n      shift(120);                   // 'else'\n      break;\n    case 121:                       // 'empty'\n      shift(121);                   // 'empty'\n      break;\n    case 124:                       // 'end'\n      shift(124);                   // 'end'\n      break;\n    case 126:                       // 'eq'\n      shift(126);                   // 'eq'\n      break;\n    case 127:                       // 'every'\n      shift(127);                   // 'every'\n      break;\n    case 129:                       // 'except'\n      shift(129);                   // 'except'\n      break;\n    case 132:                       // 'first'\n      shift(132);                   // 'first'\n      break;\n    case 133:                       // 'following'\n      shift(133);                   // 'following'\n      break;\n    case 134:                       // 'following-sibling'\n      shift(134);                   // 'following-sibling'\n      break;\n    case 135:                       // 'for'\n      shift(135);                   // 'for'\n      break;\n    case 144:                       // 'ge'\n      shift(144);                   // 'ge'\n      break;\n    case 146:                       // 'group'\n      shift(146);                   // 'group'\n      break;\n    case 148:                       // 'gt'\n      shift(148);                   // 'gt'\n      break;\n    case 149:                       // 'idiv'\n      shift(149);                   // 'idiv'\n      break;\n    case 151:                       // 'import'\n      shift(151);                   // 'import'\n      break;\n    case 157:                       // 'insert'\n      shift(157);                   // 'insert'\n      break;\n    case 158:                       // 'instance'\n      shift(158);                   // 'instance'\n      break;\n    case 160:                       // 'intersect'\n      shift(160);                   // 'intersect'\n      break;\n    case 161:                       // 'into'\n      shift(161);                   // 'into'\n      break;\n    case 162:                       // 'is'\n      shift(162);                   // 'is'\n      break;\n    case 168:                       // 'last'\n      shift(168);                   // 'last'\n      break;\n    case 170:                       // 'le'\n      shift(170);                   // 'le'\n      break;\n    case 172:                       // 'let'\n      shift(172);                   // 'let'\n      break;\n    case 176:                       // 'lt'\n      shift(176);                   // 'lt'\n      break;\n    case 178:                       // 'mod'\n      shift(178);                   // 'mod'\n      break;\n    case 179:                       // 'modify'\n      shift(179);                   // 'modify'\n      break;\n    case 180:                       // 'module'\n      shift(180);                   // 'module'\n      break;\n    case 182:                       // 'namespace'\n      shift(182);                   // 'namespace'\n      break;\n    case 184:                       // 'ne'\n      shift(184);                   // 'ne'\n      break;\n    case 196:                       // 'only'\n      shift(196);                   // 'only'\n      break;\n    case 198:                       // 'or'\n      shift(198);                   // 'or'\n      break;\n    case 199:                       // 'order'\n      shift(199);                   // 'order'\n      break;\n    case 200:                       // 'ordered'\n      shift(200);                   // 'ordered'\n      break;\n    case 204:                       // 'parent'\n      shift(204);                   // 'parent'\n      break;\n    case 210:                       // 'preceding'\n      shift(210);                   // 'preceding'\n      break;\n    case 211:                       // 'preceding-sibling'\n      shift(211);                   // 'preceding-sibling'\n      break;\n    case 216:                       // 'rename'\n      shift(216);                   // 'rename'\n      break;\n    case 217:                       // 'replace'\n      shift(217);                   // 'replace'\n      break;\n    case 218:                       // 'return'\n      shift(218);                   // 'return'\n      break;\n    case 222:                       // 'satisfies'\n      shift(222);                   // 'satisfies'\n      break;\n    case 227:                       // 'self'\n      shift(227);                   // 'self'\n      break;\n    case 233:                       // 'some'\n      shift(233);                   // 'some'\n      break;\n    case 234:                       // 'stable'\n      shift(234);                   // 'stable'\n      break;\n    case 235:                       // 'start'\n      shift(235);                   // 'start'\n      break;\n    case 246:                       // 'to'\n      shift(246);                   // 'to'\n      break;\n    case 247:                       // 'treat'\n      shift(247);                   // 'treat'\n      break;\n    case 248:                       // 'try'\n      shift(248);                   // 'try'\n      break;\n    case 252:                       // 'union'\n      shift(252);                   // 'union'\n      break;\n    case 254:                       // 'unordered'\n      shift(254);                   // 'unordered'\n      break;\n    case 258:                       // 'validate'\n      shift(258);                   // 'validate'\n      break;\n    case 264:                       // 'where'\n      shift(264);                   // 'where'\n      break;\n    case 268:                       // 'with'\n      shift(268);                   // 'with'\n      break;\n    case 272:                       // 'xquery'\n      shift(272);                   // 'xquery'\n      break;\n    case 70:                        // 'allowing'\n      shift(70);                    // 'allowing'\n      break;\n    case 79:                        // 'at'\n      shift(79);                    // 'at'\n      break;\n    case 81:                        // 'base-uri'\n      shift(81);                    // 'base-uri'\n      break;\n    case 83:                        // 'boundary-space'\n      shift(83);                    // 'boundary-space'\n      break;\n    case 84:                        // 'break'\n      shift(84);                    // 'break'\n      break;\n    case 89:                        // 'catch'\n      shift(89);                    // 'catch'\n      break;\n    case 96:                        // 'construction'\n      shift(96);                    // 'construction'\n      break;\n    case 99:                        // 'context'\n      shift(99);                    // 'context'\n      break;\n    case 100:                       // 'continue'\n      shift(100);                   // 'continue'\n      break;\n    case 102:                       // 'copy-namespaces'\n      shift(102);                   // 'copy-namespaces'\n      break;\n    case 104:                       // 'decimal-format'\n      shift(104);                   // 'decimal-format'\n      break;\n    case 123:                       // 'encoding'\n      shift(123);                   // 'encoding'\n      break;\n    case 130:                       // 'exit'\n      shift(130);                   // 'exit'\n      break;\n    case 131:                       // 'external'\n      shift(131);                   // 'external'\n      break;\n    case 139:                       // 'ft-option'\n      shift(139);                   // 'ft-option'\n      break;\n    case 152:                       // 'in'\n      shift(152);                   // 'in'\n      break;\n    case 153:                       // 'index'\n      shift(153);                   // 'index'\n      break;\n    case 159:                       // 'integrity'\n      shift(159);                   // 'integrity'\n      break;\n    case 169:                       // 'lax'\n      shift(169);                   // 'lax'\n      break;\n    case 190:                       // 'nodes'\n      shift(190);                   // 'nodes'\n      break;\n    case 197:                       // 'option'\n      shift(197);                   // 'option'\n      break;\n    case 201:                       // 'ordering'\n      shift(201);                   // 'ordering'\n      break;\n    case 220:                       // 'revalidation'\n      shift(220);                   // 'revalidation'\n      break;\n    case 223:                       // 'schema'\n      shift(223);                   // 'schema'\n      break;\n    case 226:                       // 'score'\n      shift(226);                   // 'score'\n      break;\n    case 232:                       // 'sliding'\n      shift(232);                   // 'sliding'\n      break;\n    case 238:                       // 'strict'\n      shift(238);                   // 'strict'\n      break;\n    case 249:                       // 'tumbling'\n      shift(249);                   // 'tumbling'\n      break;\n    case 250:                       // 'type'\n      shift(250);                   // 'type'\n      break;\n    case 255:                       // 'updating'\n      shift(255);                   // 'updating'\n      break;\n    case 259:                       // 'value'\n      shift(259);                   // 'value'\n      break;\n    case 260:                       // 'variable'\n      shift(260);                   // 'variable'\n      break;\n    case 261:                       // 'version'\n      shift(261);                   // 'version'\n      break;\n    case 265:                       // 'while'\n      shift(265);                   // 'while'\n      break;\n    case 95:                        // 'constraint'\n      shift(95);                    // 'constraint'\n      break;\n    case 174:                       // 'loop'\n      shift(174);                   // 'loop'\n      break;\n    default:\n      shift(219);                   // 'returning'\n    }\n    eventHandler.endNonterminal(\"FunctionName\", e0);\n  }\n\n  function parse_NCName()\n  {\n    eventHandler.startNonterminal(\"NCName\", e0);\n    switch (l1)\n    {\n    case 28:                        // NCName^Token\n      shift(28);                    // NCName^Token\n      break;\n    case 68:                        // 'after'\n      shift(68);                    // 'after'\n      break;\n    case 73:                        // 'and'\n      shift(73);                    // 'and'\n      break;\n    case 77:                        // 'as'\n      shift(77);                    // 'as'\n      break;\n    case 78:                        // 'ascending'\n      shift(78);                    // 'ascending'\n      break;\n    case 82:                        // 'before'\n      shift(82);                    // 'before'\n      break;\n    case 86:                        // 'case'\n      shift(86);                    // 'case'\n      break;\n    case 87:                        // 'cast'\n      shift(87);                    // 'cast'\n      break;\n    case 88:                        // 'castable'\n      shift(88);                    // 'castable'\n      break;\n    case 92:                        // 'collation'\n      shift(92);                    // 'collation'\n      break;\n    case 103:                       // 'count'\n      shift(103);                   // 'count'\n      break;\n    case 107:                       // 'default'\n      shift(107);                   // 'default'\n      break;\n    case 111:                       // 'descending'\n      shift(111);                   // 'descending'\n      break;\n    case 116:                       // 'div'\n      shift(116);                   // 'div'\n      break;\n    case 120:                       // 'else'\n      shift(120);                   // 'else'\n      break;\n    case 121:                       // 'empty'\n      shift(121);                   // 'empty'\n      break;\n    case 124:                       // 'end'\n      shift(124);                   // 'end'\n      break;\n    case 126:                       // 'eq'\n      shift(126);                   // 'eq'\n      break;\n    case 129:                       // 'except'\n      shift(129);                   // 'except'\n      break;\n    case 135:                       // 'for'\n      shift(135);                   // 'for'\n      break;\n    case 144:                       // 'ge'\n      shift(144);                   // 'ge'\n      break;\n    case 146:                       // 'group'\n      shift(146);                   // 'group'\n      break;\n    case 148:                       // 'gt'\n      shift(148);                   // 'gt'\n      break;\n    case 149:                       // 'idiv'\n      shift(149);                   // 'idiv'\n      break;\n    case 158:                       // 'instance'\n      shift(158);                   // 'instance'\n      break;\n    case 160:                       // 'intersect'\n      shift(160);                   // 'intersect'\n      break;\n    case 161:                       // 'into'\n      shift(161);                   // 'into'\n      break;\n    case 162:                       // 'is'\n      shift(162);                   // 'is'\n      break;\n    case 170:                       // 'le'\n      shift(170);                   // 'le'\n      break;\n    case 172:                       // 'let'\n      shift(172);                   // 'let'\n      break;\n    case 176:                       // 'lt'\n      shift(176);                   // 'lt'\n      break;\n    case 178:                       // 'mod'\n      shift(178);                   // 'mod'\n      break;\n    case 179:                       // 'modify'\n      shift(179);                   // 'modify'\n      break;\n    case 184:                       // 'ne'\n      shift(184);                   // 'ne'\n      break;\n    case 196:                       // 'only'\n      shift(196);                   // 'only'\n      break;\n    case 198:                       // 'or'\n      shift(198);                   // 'or'\n      break;\n    case 199:                       // 'order'\n      shift(199);                   // 'order'\n      break;\n    case 218:                       // 'return'\n      shift(218);                   // 'return'\n      break;\n    case 222:                       // 'satisfies'\n      shift(222);                   // 'satisfies'\n      break;\n    case 234:                       // 'stable'\n      shift(234);                   // 'stable'\n      break;\n    case 235:                       // 'start'\n      shift(235);                   // 'start'\n      break;\n    case 246:                       // 'to'\n      shift(246);                   // 'to'\n      break;\n    case 247:                       // 'treat'\n      shift(247);                   // 'treat'\n      break;\n    case 252:                       // 'union'\n      shift(252);                   // 'union'\n      break;\n    case 264:                       // 'where'\n      shift(264);                   // 'where'\n      break;\n    case 268:                       // 'with'\n      shift(268);                   // 'with'\n      break;\n    case 71:                        // 'ancestor'\n      shift(71);                    // 'ancestor'\n      break;\n    case 72:                        // 'ancestor-or-self'\n      shift(72);                    // 'ancestor-or-self'\n      break;\n    case 80:                        // 'attribute'\n      shift(80);                    // 'attribute'\n      break;\n    case 91:                        // 'child'\n      shift(91);                    // 'child'\n      break;\n    case 94:                        // 'comment'\n      shift(94);                    // 'comment'\n      break;\n    case 101:                       // 'copy'\n      shift(101);                   // 'copy'\n      break;\n    case 106:                       // 'declare'\n      shift(106);                   // 'declare'\n      break;\n    case 108:                       // 'delete'\n      shift(108);                   // 'delete'\n      break;\n    case 109:                       // 'descendant'\n      shift(109);                   // 'descendant'\n      break;\n    case 110:                       // 'descendant-or-self'\n      shift(110);                   // 'descendant-or-self'\n      break;\n    case 117:                       // 'document'\n      shift(117);                   // 'document'\n      break;\n    case 118:                       // 'document-node'\n      shift(118);                   // 'document-node'\n      break;\n    case 119:                       // 'element'\n      shift(119);                   // 'element'\n      break;\n    case 122:                       // 'empty-sequence'\n      shift(122);                   // 'empty-sequence'\n      break;\n    case 127:                       // 'every'\n      shift(127);                   // 'every'\n      break;\n    case 132:                       // 'first'\n      shift(132);                   // 'first'\n      break;\n    case 133:                       // 'following'\n      shift(133);                   // 'following'\n      break;\n    case 134:                       // 'following-sibling'\n      shift(134);                   // 'following-sibling'\n      break;\n    case 143:                       // 'function'\n      shift(143);                   // 'function'\n      break;\n    case 150:                       // 'if'\n      shift(150);                   // 'if'\n      break;\n    case 151:                       // 'import'\n      shift(151);                   // 'import'\n      break;\n    case 157:                       // 'insert'\n      shift(157);                   // 'insert'\n      break;\n    case 163:                       // 'item'\n      shift(163);                   // 'item'\n      break;\n    case 168:                       // 'last'\n      shift(168);                   // 'last'\n      break;\n    case 180:                       // 'module'\n      shift(180);                   // 'module'\n      break;\n    case 182:                       // 'namespace'\n      shift(182);                   // 'namespace'\n      break;\n    case 183:                       // 'namespace-node'\n      shift(183);                   // 'namespace-node'\n      break;\n    case 189:                       // 'node'\n      shift(189);                   // 'node'\n      break;\n    case 200:                       // 'ordered'\n      shift(200);                   // 'ordered'\n      break;\n    case 204:                       // 'parent'\n      shift(204);                   // 'parent'\n      break;\n    case 210:                       // 'preceding'\n      shift(210);                   // 'preceding'\n      break;\n    case 211:                       // 'preceding-sibling'\n      shift(211);                   // 'preceding-sibling'\n      break;\n    case 214:                       // 'processing-instruction'\n      shift(214);                   // 'processing-instruction'\n      break;\n    case 216:                       // 'rename'\n      shift(216);                   // 'rename'\n      break;\n    case 217:                       // 'replace'\n      shift(217);                   // 'replace'\n      break;\n    case 224:                       // 'schema-attribute'\n      shift(224);                   // 'schema-attribute'\n      break;\n    case 225:                       // 'schema-element'\n      shift(225);                   // 'schema-element'\n      break;\n    case 227:                       // 'self'\n      shift(227);                   // 'self'\n      break;\n    case 233:                       // 'some'\n      shift(233);                   // 'some'\n      break;\n    case 241:                       // 'switch'\n      shift(241);                   // 'switch'\n      break;\n    case 242:                       // 'text'\n      shift(242);                   // 'text'\n      break;\n    case 248:                       // 'try'\n      shift(248);                   // 'try'\n      break;\n    case 251:                       // 'typeswitch'\n      shift(251);                   // 'typeswitch'\n      break;\n    case 254:                       // 'unordered'\n      shift(254);                   // 'unordered'\n      break;\n    case 258:                       // 'validate'\n      shift(258);                   // 'validate'\n      break;\n    case 260:                       // 'variable'\n      shift(260);                   // 'variable'\n      break;\n    case 272:                       // 'xquery'\n      shift(272);                   // 'xquery'\n      break;\n    case 70:                        // 'allowing'\n      shift(70);                    // 'allowing'\n      break;\n    case 79:                        // 'at'\n      shift(79);                    // 'at'\n      break;\n    case 81:                        // 'base-uri'\n      shift(81);                    // 'base-uri'\n      break;\n    case 83:                        // 'boundary-space'\n      shift(83);                    // 'boundary-space'\n      break;\n    case 84:                        // 'break'\n      shift(84);                    // 'break'\n      break;\n    case 89:                        // 'catch'\n      shift(89);                    // 'catch'\n      break;\n    case 96:                        // 'construction'\n      shift(96);                    // 'construction'\n      break;\n    case 99:                        // 'context'\n      shift(99);                    // 'context'\n      break;\n    case 100:                       // 'continue'\n      shift(100);                   // 'continue'\n      break;\n    case 102:                       // 'copy-namespaces'\n      shift(102);                   // 'copy-namespaces'\n      break;\n    case 104:                       // 'decimal-format'\n      shift(104);                   // 'decimal-format'\n      break;\n    case 123:                       // 'encoding'\n      shift(123);                   // 'encoding'\n      break;\n    case 130:                       // 'exit'\n      shift(130);                   // 'exit'\n      break;\n    case 131:                       // 'external'\n      shift(131);                   // 'external'\n      break;\n    case 139:                       // 'ft-option'\n      shift(139);                   // 'ft-option'\n      break;\n    case 152:                       // 'in'\n      shift(152);                   // 'in'\n      break;\n    case 153:                       // 'index'\n      shift(153);                   // 'index'\n      break;\n    case 159:                       // 'integrity'\n      shift(159);                   // 'integrity'\n      break;\n    case 169:                       // 'lax'\n      shift(169);                   // 'lax'\n      break;\n    case 190:                       // 'nodes'\n      shift(190);                   // 'nodes'\n      break;\n    case 197:                       // 'option'\n      shift(197);                   // 'option'\n      break;\n    case 201:                       // 'ordering'\n      shift(201);                   // 'ordering'\n      break;\n    case 220:                       // 'revalidation'\n      shift(220);                   // 'revalidation'\n      break;\n    case 223:                       // 'schema'\n      shift(223);                   // 'schema'\n      break;\n    case 226:                       // 'score'\n      shift(226);                   // 'score'\n      break;\n    case 232:                       // 'sliding'\n      shift(232);                   // 'sliding'\n      break;\n    case 238:                       // 'strict'\n      shift(238);                   // 'strict'\n      break;\n    case 249:                       // 'tumbling'\n      shift(249);                   // 'tumbling'\n      break;\n    case 250:                       // 'type'\n      shift(250);                   // 'type'\n      break;\n    case 255:                       // 'updating'\n      shift(255);                   // 'updating'\n      break;\n    case 259:                       // 'value'\n      shift(259);                   // 'value'\n      break;\n    case 261:                       // 'version'\n      shift(261);                   // 'version'\n      break;\n    case 265:                       // 'while'\n      shift(265);                   // 'while'\n      break;\n    case 95:                        // 'constraint'\n      shift(95);                    // 'constraint'\n      break;\n    case 174:                       // 'loop'\n      shift(174);                   // 'loop'\n      break;\n    default:\n      shift(219);                   // 'returning'\n    }\n    eventHandler.endNonterminal(\"NCName\", e0);\n  }\n\n  function shift(t)\n  {\n    if (l1 == t)\n    {\n      whitespace();\n      eventHandler.terminal(JSONiqTokenizer.TOKEN[l1], b1, e1 > size ? size : e1);\n      b0 = b1; e0 = e1; l1 = 0;\n    }\n    else\n    {\n      error(b1, e1, 0, l1, t);\n    }\n  }\n\n  function whitespace()\n  {\n    if (e0 != b1)\n    {\n      b0 = e0;\n      e0 = b1;\n      eventHandler.whitespace(b0, e0);\n    }\n  }\n\n  function matchW(set)\n  {\n    var code;\n    for (;;)\n    {\n      code = match(set);\n      if (code != 30)               // S^WS\n      {\n        break;\n      }\n    }\n    return code;\n  }\n\n  function lookahead1W(set)\n  {\n    if (l1 == 0)\n    {\n      l1 = matchW(set);\n      b1 = begin;\n      e1 = end;\n    }\n  }\n\n  function lookahead1(set)\n  {\n    if (l1 == 0)\n    {\n      l1 = match(set);\n      b1 = begin;\n      e1 = end;\n    }\n  }\n\n  function error(b, e, s, l, t)\n  {\n    throw new self.ParseException(b, e, s, l, t);\n  }\n\n  var lk, b0, e0;\n  var l1, b1, e1;\n  var eventHandler;\n\n  var input;\n  var size;\n  var begin;\n  var end;\n\n  function match(tokenSetId)\n  {\n    var nonbmp = false;\n    begin = end;\n    var current = end;\n    var result = JSONiqTokenizer.INITIAL[tokenSetId];\n    var state = 0;\n\n    for (var code = result & 4095; code != 0; )\n    {\n      var charclass;\n      var c0 = current < size ? input.charCodeAt(current) : 0;\n      ++current;\n      if (c0 < 0x80)\n      {\n        charclass = JSONiqTokenizer.MAP0[c0];\n      }\n      else if (c0 < 0xd800)\n      {\n        var c1 = c0 >> 4;\n        charclass = JSONiqTokenizer.MAP1[(c0 & 15) + JSONiqTokenizer.MAP1[(c1 & 31) + JSONiqTokenizer.MAP1[c1 >> 5]]];\n      }\n      else\n      {\n        if (c0 < 0xdc00)\n        {\n          var c1 = current < size ? input.charCodeAt(current) : 0;\n          if (c1 >= 0xdc00 && c1 < 0xe000)\n          {\n            ++current;\n            c0 = ((c0 & 0x3ff) << 10) + (c1 & 0x3ff) + 0x10000;\n            nonbmp = true;\n          }\n        }\n        var lo = 0, hi = 5;\n        for (var m = 3; ; m = (hi + lo) >> 1)\n        {\n          if (JSONiqTokenizer.MAP2[m] > c0) hi = m - 1;\n          else if (JSONiqTokenizer.MAP2[6 + m] < c0) lo = m + 1;\n          else {charclass = JSONiqTokenizer.MAP2[12 + m]; break;}\n          if (lo > hi) {charclass = 0; break;}\n        }\n      }\n\n      state = code;\n      var i0 = (charclass << 12) + code - 1;\n      code = JSONiqTokenizer.TRANSITION[(i0 & 15) + JSONiqTokenizer.TRANSITION[i0 >> 4]];\n\n      if (code > 4095)\n      {\n        result = code;\n        code &= 4095;\n        end = current;\n      }\n    }\n\n    result >>= 12;\n    if (result == 0)\n    {\n      end = current - 1;\n      var c1 = end < size ? input.charCodeAt(end) : 0;\n      if (c1 >= 0xdc00 && c1 < 0xe000) --end;\n      return error(begin, end, state, -1, -1);\n    }\n\n    if (nonbmp)\n    {\n      for (var i = result >> 9; i > 0; --i)\n      {\n        --end;\n        var c1 = end < size ? input.charCodeAt(end) : 0;\n        if (c1 >= 0xdc00 && c1 < 0xe000) --end;\n      }\n    }\n    else\n    {\n      end -= result >> 9;\n    }\n\n    return (result & 511) - 1;\n  }\n}\n\nJSONiqTokenizer.getTokenSet = function(tokenSetId)\n{\n  var set = [];\n  var s = tokenSetId < 0 ? - tokenSetId : INITIAL[tokenSetId] & 4095;\n  for (var i = 0; i < 279; i += 32)\n  {\n    var j = i;\n    var i0 = (i >> 5) * 2066 + s - 1;\n    var i1 = i0 >> 2;\n    var i2 = i1 >> 2;\n    var f = JSONiqTokenizer.EXPECTED[(i0 & 3) + JSONiqTokenizer.EXPECTED[(i1 & 3) + JSONiqTokenizer.EXPECTED[(i2 & 3) + JSONiqTokenizer.EXPECTED[i2 >> 2]]]];\n    for ( ; f != 0; f >>>= 1, ++j)\n    {\n      if ((f & 1) != 0)\n      {\n        set.push(JSONiqTokenizer.TOKEN[j]);\n      }\n    }\n  }\n  return set;\n};\n\nJSONiqTokenizer.MAP0 =\n[\n  /*   0 */ 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5,\n  /*  36 */ 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 20, 21, 22, 23, 24,\n  /*  64 */ 25, 26, 27, 28, 29, 30, 27, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 31, 31, 33, 31, 31, 31, 31, 31, 31,\n  /*  91 */ 34, 35, 36, 37, 31, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 31, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,\n  /* 118 */ 58, 59, 60, 61, 31, 62, 63, 64, 65, 37\n];\n\nJSONiqTokenizer.MAP1 =\n[\n  /*   0 */ 108, 124, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 156, 181, 181, 181, 181,\n  /*  21 */ 181, 214, 215, 213, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214,\n  /*  42 */ 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214,\n  /*  63 */ 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214,\n  /*  84 */ 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214,\n  /* 105 */ 214, 214, 214, 247, 261, 277, 293, 309, 347, 363, 379, 416, 416, 416, 408, 331, 323, 331, 323, 331, 331,\n  /* 126 */ 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 433, 433, 433, 433, 433, 433, 433,\n  /* 147 */ 316, 331, 331, 331, 331, 331, 331, 331, 331, 394, 416, 416, 417, 415, 416, 416, 331, 331, 331, 331, 331,\n  /* 168 */ 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 416, 416, 416, 416, 416, 416, 416, 416,\n  /* 189 */ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,\n  /* 210 */ 416, 416, 416, 330, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331,\n  /* 231 */ 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 416, 67, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 256 */ 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,\n  /* 290 */ 15, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 27, 31,\n  /* 317 */ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 37, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,\n  /* 344 */ 31, 31, 31, 31, 32, 31, 31, 33, 31, 31, 31, 31, 31, 31, 34, 35, 36, 37, 31, 37, 38, 39, 40, 41, 42, 43, 44,\n  /* 371 */ 45, 46, 31, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 31, 62, 63, 64, 65, 37, 37, 37, 37,\n  /* 398 */ 37, 37, 37, 37, 37, 37, 37, 37, 31, 31, 37, 37, 37, 37, 37, 37, 37, 66, 37, 37, 37, 37, 37, 37, 37, 37, 37,\n  /* 425 */ 37, 37, 37, 37, 37, 37, 37, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66\n];\n\nJSONiqTokenizer.MAP2 =\n[\n  /*  0 */ 57344, 63744, 64976, 65008, 65536, 983040, 63743, 64975, 65007, 65533, 983039, 1114111, 37, 31, 37, 31, 31,\n  /* 17 */ 37\n];\n\nJSONiqTokenizer.INITIAL =\n[\n  /*  0 */ 1, 2, 49155, 57348, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15\n];\n\nJSONiqTokenizer.TRANSITION =\n[\n  /*     0 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*    15 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*    30 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*    45 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*    60 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*    75 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*    90 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   105 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   120 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   135 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   150 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   165 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   180 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   195 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   210 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   225 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   240 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   255 */ 19058, 17408, 19288, 17439, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486,\n  /*   270 */ 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 22126, 17990, 18622, 19411, 20306, 17996, 17689,\n  /*   285 */ 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17672, 18921, 19514, 17705,\n  /*   300 */ 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 19469, 17878,\n  /*   315 */ 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102,\n  /*   330 */ 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 36919, 18234, 18262, 18278, 18294,\n  /*   345 */ 18320, 18336, 18361, 18397, 18419, 18432, 18304, 18448, 18485, 18523, 18553, 18583, 18599, 18638, 18497,\n  /*   360 */ 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450,\n  /*   375 */ 22022, 18765, 18825, 18841, 18871, 18906, 18944, 18960, 18976, 19041, 19056, 19058, 19058, 19058, 19058,\n  /*   390 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   405 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   420 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   435 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   450 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   465 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   480 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   495 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   510 */ 19058, 19058, 19074, 36169, 17439, 36866, 17466, 36890, 36866, 22314, 19105, 22987, 17556, 17575, 22288,\n  /*   525 */ 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 22126, 17990, 18622, 19411, 20306, 17996,\n  /*   540 */ 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17672, 18921, 19514,\n  /*   555 */ 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 19469,\n  /*   570 */ 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928,\n  /*   585 */ 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 36919, 18234, 18262, 18278,\n  /*   600 */ 18294, 18320, 18336, 18361, 18397, 18419, 18432, 18304, 18448, 18485, 18523, 18553, 18583, 18599, 18638,\n  /*   615 */ 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838,\n  /*   630 */ 17450, 22022, 18765, 18825, 18841, 18871, 18906, 18944, 18960, 18976, 19041, 19056, 19058, 19058, 19058,\n  /*   645 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   660 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   675 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   690 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   705 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   720 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   735 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   750 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   765 */ 19058, 19058, 19058, 22182, 19288, 19121, 36866, 17466, 18345, 36866, 21991, 22971, 22987, 17556, 17575,\n  /*   780 */ 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306,\n  /*   795 */ 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921,\n  /*   810 */ 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008,\n  /*   825 */ 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906,\n  /*   840 */ 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262,\n  /*   855 */ 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149,\n  /*   870 */ 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054,\n  /*   885 */ 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058,\n  /*   900 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   915 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   930 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   945 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   960 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   975 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   990 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1005 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1020 */ 19058, 19058, 19058, 19058, 19273, 19552, 19304, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556,\n  /*  1035 */ 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411,\n  /*  1050 */ 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862,\n  /*  1065 */ 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712,\n  /*  1080 */ 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890,\n  /*  1095 */ 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935,\n  /*  1110 */ 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583,\n  /*  1125 */ 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915,\n  /*  1140 */ 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058,\n  /*  1155 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1170 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1185 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1200 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1215 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1230 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1245 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1260 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1275 */ 19058, 19058, 19058, 19058, 19058, 19332, 17423, 19363, 36866, 17466, 17537, 36866, 21991, 22971, 22987,\n  /*  1290 */ 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 18614, 18622,\n  /*  1305 */ 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 19391, 36867, 19404, 20299, 36866, 17647,\n  /*  1320 */ 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 19427, 18403, 18928, 19521,\n  /*  1335 */ 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884,\n  /*  1350 */ 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134,\n  /*  1365 */ 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553,\n  /*  1380 */ 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906,\n  /*  1395 */ 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056,\n  /*  1410 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1425 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1440 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1455 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1470 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1485 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1500 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1515 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1530 */ 19058, 19058, 19058, 19058, 19058, 19058, 36154, 19288, 19457, 36866, 17466, 17740, 36866, 21991, 22971,\n  /*  1545 */ 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990,\n  /*  1560 */ 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866,\n  /*  1575 */ 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928,\n  /*  1590 */ 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218,\n  /*  1605 */ 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026,\n  /*  1620 */ 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523,\n  /*  1635 */ 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026,\n  /*  1650 */ 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041,\n  /*  1665 */ 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1680 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1695 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1710 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1725 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1740 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1755 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1770 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1785 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22780, 19288, 19457, 36866, 17466, 36890, 36866, 21991,\n  /*  1800 */ 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462,\n  /*  1815 */ 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299,\n  /*  1830 */ 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403,\n  /*  1845 */ 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064,\n  /*  1860 */ 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010,\n  /*  1875 */ 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485,\n  /*  1890 */ 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681,\n  /*  1905 */ 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976,\n  /*  1920 */ 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1935 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1950 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1965 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1980 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1995 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2010 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2025 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2040 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22375, 22197, 18469, 36866, 17466, 36890, 36866,\n  /*  2055 */ 21991, 24018, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 21331, 22984, 17553, 17572, 22285,\n  /*  2070 */ 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 19485, 19501, 36867, 19404,\n  /*  2085 */ 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854,\n  /*  2100 */ 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381,\n  /*  2115 */ 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214,\n  /*  2130 */ 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448,\n  /*  2145 */ 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737,\n  /*  2160 */ 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257,\n  /*  2175 */ 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2190 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2205 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2220 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2235 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2250 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2265 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2280 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2295 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19537, 22390, 19568, 36866, 17466, 36890,\n  /*  2310 */ 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572,\n  /*  2325 */ 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867,\n  /*  2340 */ 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825,\n  /*  2355 */ 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012,\n  /*  2370 */ 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166,\n  /*  2385 */ 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304,\n  /*  2400 */ 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712,\n  /*  2415 */ 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241,\n  /*  2430 */ 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2445 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2460 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2475 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2490 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2505 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2520 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2535 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2550 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19596, 19611, 19457, 36866, 17466,\n  /*  2565 */ 36890, 36866, 18246, 19627, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553,\n  /*  2580 */ 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083,\n  /*  2595 */ 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800,\n  /*  2610 */ 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960,\n  /*  2625 */ 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150,\n  /*  2640 */ 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096,\n  /*  2655 */ 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164,\n  /*  2670 */ 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906,\n  /*  2685 */ 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2700 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2715 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2730 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2745 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2760 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2775 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2790 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2805 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22242, 20553, 19457, 36866,\n  /*  2820 */ 17466, 36890, 36866, 18648, 30477, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984,\n  /*  2835 */ 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619,\n  /*  2850 */ 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784,\n  /*  2865 */ 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178,\n  /*  2880 */ 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493,\n  /*  2895 */ 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274,\n  /*  2910 */ 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696,\n  /*  2925 */ 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871,\n  /*  2940 */ 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2955 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2970 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2985 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3000 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3015 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3030 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3045 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3060 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36472, 19288, 19457,\n  /*  3075 */ 36866, 17466, 17809, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 21770,\n  /*  3090 */ 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468,\n  /*  3105 */ 17619, 19643, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756,\n  /*  3120 */ 17784, 17800, 17825, 19672, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944,\n  /*  3135 */ 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963,\n  /*  3150 */ 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397,\n  /*  3165 */ 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507,\n  /*  3180 */ 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841,\n  /*  3195 */ 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3210 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3225 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3240 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3255 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3270 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3285 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3300 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3315 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 20538, 19288,\n  /*  3330 */ 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373,\n  /*  3345 */ 17975, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896,\n  /*  3360 */ 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728,\n  /*  3375 */ 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922,\n  /*  3390 */ 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931,\n  /*  3405 */ 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361,\n  /*  3420 */ 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680,\n  /*  3435 */ 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225,\n  /*  3450 */ 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3465 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3480 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3495 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3510 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3525 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3540 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3555 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3570 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22345,\n  /*  3585 */ 19288, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525,\n  /*  3600 */ 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591,\n  /*  3615 */ 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017,\n  /*  3630 */ 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900,\n  /*  3645 */ 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130,\n  /*  3660 */ 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336,\n  /*  3675 */ 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664,\n  /*  3690 */ 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765,\n  /*  3705 */ 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3720 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3735 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3750 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3765 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3780 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3795 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3810 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3825 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3840 */ 19726, 19742, 21529, 24035, 23112, 26225, 23511, 27749, 27397, 24035, 34360, 24035, 24036, 23114, 35166,\n  /*  3855 */ 23114, 23114, 19758, 23511, 35247, 23511, 23511, 28447, 19803, 24035, 24035, 24035, 24035, 26576, 23114,\n  /*  3870 */ 23114, 23114, 23114, 24254, 19821, 23511, 23511, 23511, 23511, 23512, 19441, 36539, 24035, 24035, 24035,\n  /*  3885 */ 24035, 19846, 19869, 23114, 23114, 23114, 28618, 32187, 19892, 23511, 23511, 23511, 34585, 20402, 36647,\n  /*  3900 */ 24035, 24035, 24036, 23114, 33757, 23114, 23114, 23029, 20271, 23511, 27070, 23511, 23511, 30562, 24035,\n  /*  3915 */ 24035, 29274, 26576, 23114, 23114, 31118, 23036, 29695, 23511, 23511, 32431, 23634, 30821, 24035, 23110,\n  /*  3930 */ 19913, 23114, 23467, 31261, 23261, 34299, 19932, 24035, 32609, 19965, 35389, 19984, 27689, 19830, 29391,\n  /*  3945 */ 29337, 20041, 22643, 35619, 33728, 20062, 20121, 20166, 35100, 26145, 20211, 23008, 19876, 20208, 20227,\n  /*  3960 */ 25670, 20132, 26578, 27685, 20141, 20243, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058,\n  /*  3975 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3990 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4005 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4020 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4035 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4050 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4065 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4080 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4095 */ 19058, 36094, 19288, 19457, 36866, 17466, 21724, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486,\n  /*  4110 */ 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689,\n  /*  4125 */ 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705,\n  /*  4140 */ 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878,\n  /*  4155 */ 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102,\n  /*  4170 */ 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294,\n  /*  4185 */ 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497,\n  /*  4200 */ 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450,\n  /*  4215 */ 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058,\n  /*  4230 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4245 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4260 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4275 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4290 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4305 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4320 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4335 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4350 */ 19058, 19058, 22735, 19552, 20287, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288,\n  /*  4365 */ 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996,\n  /*  4380 */ 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514,\n  /*  4395 */ 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024,\n  /*  4410 */ 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928,\n  /*  4425 */ 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278,\n  /*  4440 */ 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638,\n  /*  4455 */ 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838,\n  /*  4470 */ 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058,\n  /*  4485 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4500 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4515 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4530 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4545 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4560 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4575 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4590 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4605 */ 19058, 19058, 19058, 22750, 19288, 21529, 24035, 23112, 28056, 23511, 29483, 28756, 24035, 24035, 24035,\n  /*  4620 */ 24036, 23114, 23114, 23114, 23114, 20327, 23511, 23511, 23511, 23511, 31156, 19803, 24035, 24035, 24035,\n  /*  4635 */ 24035, 26576, 23114, 23114, 23114, 23114, 24254, 20371, 23511, 23511, 23511, 23511, 27443, 20395, 24035,\n  /*  4650 */ 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 29457, 29700, 23511, 23511, 23511, 23511,\n  /*  4665 */ 33444, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 28350, 20421, 23511, 23511, 23511,\n  /*  4680 */ 23511, 25645, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 20447, 20475, 23511, 23511, 23511, 23634,\n  /*  4695 */ 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078,\n  /*  4710 */ 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008,\n  /*  4725 */ 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058,\n  /*  4740 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4755 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4770 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4785 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4800 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4815 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4830 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4845 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4860 */ 19058, 19058, 19058, 19058, 20523, 22257, 20569, 20783, 21715, 17603, 20699, 20837, 20614, 20630, 21149,\n  /*  4875 */ 20670, 21405, 17486, 17509, 17525, 18373, 19179, 20695, 20716, 20732, 20755, 19194, 18042, 21641, 20592,\n  /*  4890 */ 20779, 20598, 21412, 17470, 17591, 20896, 17468, 17619, 20799, 20700, 21031, 20744, 20699, 20828, 18075,\n  /*  4905 */ 21259, 20581, 20853, 18048, 20868, 20884, 17756, 17784, 17800, 17825, 17854, 21171, 21200, 20931, 20947,\n  /*  4920 */ 21378, 20955, 20971, 18086, 20645, 21002, 20986, 18178, 17960, 18012, 18381, 18064, 29176, 21044, 21438,\n  /*  4935 */ 21018, 21122, 21393, 21060, 21844, 21094, 20654, 17493, 18150, 18166, 18214, 25967, 20763, 21799, 21110,\n  /*  4950 */ 21830, 21138, 21246, 21301, 18336, 18361, 21165, 21187, 20812, 21216, 21232, 21287, 21317, 18553, 21347,\n  /*  4965 */ 21363, 21428, 21454, 21271, 21483, 21499, 21515, 21575, 21467, 18712, 21591, 21633, 21078, 18189, 18198,\n  /*  4980 */ 20679, 21657, 21701, 21074, 21687, 21740, 21756, 21786, 21815, 21860, 21876, 21892, 21946, 21962, 19058,\n  /*  4995 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5010 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5025 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5040 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5055 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5070 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5085 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5100 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5115 */ 19058, 19058, 19058, 19058, 19058, 36457, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987,\n  /*  5130 */ 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 36813, 17990, 18622,\n  /*  5145 */ 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647,\n  /*  5160 */ 21981, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521,\n  /*  5175 */ 17712, 37008, 22151, 22007, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 27898, 17884,\n  /*  5190 */ 18890, 17906, 17928, 22042, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 22070, 22112, 25026, 18134,\n  /*  5205 */ 36935, 18262, 18278, 18294, 18320, 18336, 18361, 22142, 18274, 22096, 18304, 18448, 18485, 18523, 18553,\n  /*  5220 */ 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906,\n  /*  5235 */ 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056,\n  /*  5250 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5265 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5280 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5295 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5310 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5325 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5340 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5355 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5370 */ 19058, 19058, 19058, 19058, 19058, 19058, 36109, 19288, 18469, 36866, 17466, 36890, 36866, 21991, 22971,\n  /*  5385 */ 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990,\n  /*  5400 */ 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866,\n  /*  5415 */ 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928,\n  /*  5430 */ 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218,\n  /*  5445 */ 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026,\n  /*  5460 */ 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523,\n  /*  5475 */ 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026,\n  /*  5490 */ 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041,\n  /*  5505 */ 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5520 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5535 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5550 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5565 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5580 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5595 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5610 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5625 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22167, 19288, 19457, 36866, 17466, 17768, 36866, 21991,\n  /*  5640 */ 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462,\n  /*  5655 */ 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299,\n  /*  5670 */ 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403,\n  /*  5685 */ 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064,\n  /*  5700 */ 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010,\n  /*  5715 */ 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485,\n  /*  5730 */ 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681,\n  /*  5745 */ 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976,\n  /*  5760 */ 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5775 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5790 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5805 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5820 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5835 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5850 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5865 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5880 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22227, 36487, 22273, 36866, 17466, 36890, 36866,\n  /*  5895 */ 19316, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285,\n  /*  5910 */ 18749, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404,\n  /*  5925 */ 20299, 36866, 17647, 22304, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854,\n  /*  5940 */ 18403, 18928, 19521, 17712, 37008, 19580, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381,\n  /*  5955 */ 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214,\n  /*  5970 */ 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448,\n  /*  5985 */ 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737,\n  /*  6000 */ 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257,\n  /*  6015 */ 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6030 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6045 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6060 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6075 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6090 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6105 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6120 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6135 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22330, 19089, 19457, 36866, 17466, 18721,\n  /*  6150 */ 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572,\n  /*  6165 */ 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867,\n  /*  6180 */ 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825,\n  /*  6195 */ 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012,\n  /*  6210 */ 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166,\n  /*  6225 */ 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304,\n  /*  6240 */ 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712,\n  /*  6255 */ 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241,\n  /*  6270 */ 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6285 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6300 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6315 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6330 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6345 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6360 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6375 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6390 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22765, 19347, 19457, 36866, 17466,\n  /*  6405 */ 36890, 36866, 18114, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553,\n  /*  6420 */ 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083,\n  /*  6435 */ 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800,\n  /*  6450 */ 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960,\n  /*  6465 */ 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150,\n  /*  6480 */ 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096,\n  /*  6495 */ 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164,\n  /*  6510 */ 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906,\n  /*  6525 */ 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6540 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6555 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6570 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6585 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6600 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6615 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6630 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6645 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035,\n  /*  6660 */ 23112, 32618, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511,\n  /*  6675 */ 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811,\n  /*  6690 */ 22468, 23511, 23511, 23511, 23511, 27443, 22493, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114,\n  /*  6705 */ 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34541, 20402, 24035, 24035, 24035, 24036, 23114,\n  /*  6720 */ 23114, 23114, 23114, 23029, 22839, 23511, 23511, 23511, 23511, 25645, 24035, 24035, 24035, 26576, 23114,\n  /*  6735 */ 23114, 23114, 32683, 22516, 23511, 23511, 23511, 22540, 24035, 24035, 23110, 23114, 23114, 20499, 23511,\n  /*  6750 */ 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266,\n  /*  6765 */ 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685,\n  /*  6780 */ 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6795 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6810 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6825 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6840 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6855 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6870 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6885 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6900 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605,\n  /*  6915 */ 24035, 23112, 32618, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420,\n  /*  6930 */ 23511, 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114,\n  /*  6945 */ 33811, 22468, 23511, 23511, 23511, 23511, 27443, 22493, 24035, 24035, 24035, 24035, 24035, 23113, 23114,\n  /*  6960 */ 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34564, 20402, 24035, 24035, 24035, 24036,\n  /*  6975 */ 23114, 23114, 23114, 23114, 23029, 22839, 23511, 23511, 23511, 23511, 25645, 24035, 24035, 24035, 26576,\n  /*  6990 */ 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499,\n  /*  7005 */ 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741,\n  /*  7020 */ 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578,\n  /*  7035 */ 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7050 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7065 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7080 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7095 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7110 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7125 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7140 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7155 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288,\n  /*  7170 */ 21605, 24035, 23112, 32618, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114,\n  /*  7185 */ 22420, 23511, 23511, 23511, 23511, 29908, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114,\n  /*  7200 */ 23114, 33811, 22468, 23511, 23511, 23511, 23511, 27443, 22493, 24035, 24035, 24035, 24035, 24035, 23113,\n  /*  7215 */ 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34564, 20402, 24035, 24035, 24035,\n  /*  7230 */ 24036, 23114, 23114, 23114, 23114, 23029, 22839, 23511, 23511, 23511, 23511, 25645, 24035, 24035, 24035,\n  /*  7245 */ 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114,\n  /*  7260 */ 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872,\n  /*  7275 */ 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132,\n  /*  7290 */ 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7305 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7320 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7335 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7350 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7365 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7380 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7395 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7410 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079,\n  /*  7425 */ 19288, 21605, 24035, 23112, 32618, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114,\n  /*  7440 */ 23114, 22420, 23511, 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114,\n  /*  7455 */ 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 27443, 22561, 24035, 24035, 24035, 24035, 24035,\n  /*  7470 */ 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34564, 20402, 24035, 24035,\n  /*  7485 */ 24035, 24036, 23114, 23114, 23114, 23114, 23029, 22839, 23511, 23511, 23511, 23511, 25645, 24035, 24035,\n  /*  7500 */ 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114,\n  /*  7515 */ 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112,\n  /*  7530 */ 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046,\n  /*  7545 */ 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7560 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7575 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7590 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7605 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7620 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7635 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7650 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7665 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7680 */ 36079, 19288, 21605, 24035, 23112, 23837, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114,\n  /*  7695 */ 23114, 23114, 22584, 23511, 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 24035, 26576, 23114,\n  /*  7710 */ 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 27443, 22493, 24035, 24035, 24035, 24035,\n  /*  7725 */ 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34564, 20402, 24035,\n  /*  7740 */ 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 22839, 23511, 23511, 23511, 23511, 25645, 24035,\n  /*  7755 */ 24035, 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110,\n  /*  7770 */ 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035,\n  /*  7785 */ 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007,\n  /*  7800 */ 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058,\n  /*  7815 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7830 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7845 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7860 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7875 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7890 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7905 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7920 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7935 */ 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 31507, 29939, 24035, 24035, 24035, 24036, 23114,\n  /*  7950 */ 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 19803, 24035, 24035, 24035, 24035, 26576,\n  /*  7965 */ 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 24694, 24035, 24035, 24035,\n  /*  7980 */ 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34585, 20402,\n  /*  7995 */ 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562,\n  /*  8010 */ 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035,\n  /*  8025 */ 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830,\n  /*  8040 */ 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208,\n  /*  8055 */ 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058,\n  /*  8070 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8085 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8100 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8115 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8130 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8145 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8160 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8175 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8190 */ 19058, 19058, 36442, 19288, 21605, 24035, 23112, 28137, 23511, 31507, 29939, 24035, 24035, 24035, 24036,\n  /*  8205 */ 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 19803, 24035, 24035, 24035, 24035,\n  /*  8220 */ 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 24694, 24035, 24035,\n  /*  8235 */ 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34585,\n  /*  8250 */ 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511,\n  /*  8265 */ 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035,\n  /*  8280 */ 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689,\n  /*  8295 */ 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876,\n  /*  8310 */ 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058,\n  /*  8325 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8340 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8355 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8370 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8385 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8400 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8415 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8430 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8445 */ 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 31507, 29939, 24035, 24035, 24035,\n  /*  8460 */ 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 19803, 24035, 24035, 24035,\n  /*  8475 */ 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 24694, 24035,\n  /*  8490 */ 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511,\n  /*  8505 */ 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511,\n  /*  8520 */ 23511, 31568, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634,\n  /*  8535 */ 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078,\n  /*  8550 */ 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008,\n  /*  8565 */ 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058,\n  /*  8580 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8595 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8610 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8625 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8640 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8655 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8670 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8685 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8700 */ 19058, 19058, 19058, 19058, 22690, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 27584, 22987, 17556,\n  /*  8715 */ 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411,\n  /*  8730 */ 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862,\n  /*  8745 */ 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712,\n  /*  8760 */ 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890,\n  /*  8775 */ 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935,\n  /*  8790 */ 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 22659, 18448, 18485, 18523, 18553, 18583,\n  /*  8805 */ 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915,\n  /*  8820 */ 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058,\n  /*  8835 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8850 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8865 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8880 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8895 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8910 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8925 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8940 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8955 */ 19058, 19058, 19058, 19058, 19058, 22360, 19552, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987,\n  /*  8970 */ 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622,\n  /*  8985 */ 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647,\n  /*  9000 */ 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521,\n  /*  9015 */ 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884,\n  /*  9030 */ 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134,\n  /*  9045 */ 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553,\n  /*  9060 */ 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906,\n  /*  9075 */ 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056,\n  /*  9090 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9105 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9120 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9135 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9150 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9165 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9180 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9195 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9210 */ 19058, 19058, 19058, 19058, 19058, 19058, 22675, 22811, 19457, 36866, 17466, 36890, 36866, 19133, 22971,\n  /*  9225 */ 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 22827, 17990,\n  /*  9240 */ 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866,\n  /*  9255 */ 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928,\n  /*  9270 */ 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218,\n  /*  9285 */ 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026,\n  /*  9300 */ 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523,\n  /*  9315 */ 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026,\n  /*  9330 */ 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041,\n  /*  9345 */ 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9360 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9375 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9390 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9405 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9420 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9435 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9450 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9465 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36139, 19288, 19457, 36866, 17466, 36890, 36866, 21991,\n  /*  9480 */ 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462,\n  /*  9495 */ 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299,\n  /*  9510 */ 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403,\n  /*  9525 */ 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064,\n  /*  9540 */ 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010,\n  /*  9555 */ 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485,\n  /*  9570 */ 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681,\n  /*  9585 */ 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976,\n  /*  9600 */ 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9615 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9630 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9645 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9660 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9675 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9690 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9705 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9720 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36064, 19288, 22865, 22881, 32031, 22897, 22913,\n  /*  9735 */ 22956, 29939, 24035, 24035, 24035, 23003, 23114, 23114, 23114, 23024, 22420, 23511, 23511, 23511, 23052,\n  /*  9750 */ 29116, 23073, 29268, 24035, 25563, 26915, 23106, 23131, 23114, 23114, 23159, 23181, 23197, 23248, 23511,\n  /*  9765 */ 23511, 23282, 23305, 22493, 32364, 24035, 33472, 30138, 26325, 31770, 33508, 27345, 33667, 23114, 23321,\n  /*  9780 */ 23473, 23351, 35793, 36576, 23511, 23375, 22500, 24145, 24035, 29197, 20192, 24533, 23440, 23114, 19017,\n  /*  9795 */ 23459, 22839, 23489, 23510, 23511, 33563, 23528, 32076, 25389, 24035, 26576, 23561, 23583, 23114, 32683,\n  /*  9810 */ 22516, 23622, 23655, 23511, 23634, 35456, 37144, 23110, 23683, 34153, 20499, 32513, 25824, 23705, 24035,\n  /*  9825 */ 24035, 23111, 23114, 19874, 27078, 33263, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243,\n  /*  9840 */ 20507, 32241, 20150, 31862, 27464, 35108, 23727, 23007, 35895, 34953, 26578, 27685, 20141, 24569, 31691,\n  /*  9855 */ 19787, 33967, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9870 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9885 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9900 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9915 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9930 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9945 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9960 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9975 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36427, 19552, 21605, 24035, 23112, 32618,\n  /*  9990 */ 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511,\n  /* 10005 */ 23511, 29116, 19803, 24035, 24035, 24035, 27027, 26576, 23114, 23114, 23114, 31471, 23756, 22468, 23511,\n  /* 10020 */ 23511, 23511, 34687, 23772, 22493, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114,\n  /* 10035 */ 28618, 29700, 23511, 23511, 23511, 23511, 34564, 23788, 24035, 24035, 24035, 21559, 23828, 23114, 23114,\n  /* 10050 */ 23114, 25086, 22839, 23853, 23511, 23511, 23511, 23876, 24035, 24035, 24035, 26576, 23114, 23114, 23114,\n  /* 10065 */ 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628,\n  /* 10080 */ 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114,\n  /* 10095 */ 30243, 19829, 26577, 26597, 20211, 31761, 23909, 23953, 23007, 20046, 20132, 26578, 27685, 20141, 24569,\n  /* 10110 */ 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10125 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10140 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10155 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10170 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10185 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10200 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10215 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10230 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36049, 19288, 21605, 30825, 23112,\n  /* 10245 */ 23987, 23511, 24003, 31001, 27617, 24034, 24035, 24036, 24052, 24089, 23114, 23114, 22420, 24109, 24168,\n  /* 10260 */ 23511, 23511, 29116, 24188, 27609, 20017, 29516, 24035, 26576, 24222, 19968, 23114, 24252, 33811, 22468,\n  /* 10275 */ 24270, 33587, 23511, 24320, 27443, 22493, 24035, 24035, 24035, 24035, 24339, 23113, 23114, 23114, 23114,\n  /* 10290 */ 28128, 28618, 29700, 23511, 23511, 23511, 28276, 34564, 20402, 24035, 24035, 32929, 24036, 23114, 23114,\n  /* 10305 */ 23114, 24357, 23029, 22839, 23511, 23511, 23511, 24377, 25645, 24035, 34112, 24035, 26576, 23114, 26643,\n  /* 10320 */ 23114, 32683, 22516, 23511, 25638, 23511, 23711, 24035, 24395, 27809, 23114, 24414, 20499, 24432, 30917,\n  /* 10335 */ 23628, 24035, 30680, 23111, 23114, 30233, 27078, 25748, 24452, 24035, 23112, 19872, 27741, 23266, 24036,\n  /* 10350 */ 23114, 24475, 19829, 26577, 26597, 26154, 24519, 24556, 24596, 23007, 20046, 20132, 26578, 24634, 20141,\n  /* 10365 */ 24569, 31691, 24679, 24727, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10380 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10395 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10410 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10425 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10440 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10455 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10470 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10485 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36412, 19288, 21605, 19943,\n  /* 10500 */ 34861, 32618, 26027, 29483, 32016, 32050, 36233, 24776, 35574, 24801, 24819, 32671, 31289, 22420, 24868,\n  /* 10515 */ 24886, 20087, 26849, 29116, 19803, 24035, 24035, 24035, 36228, 26576, 23114, 23114, 23114, 24981, 33811,\n  /* 10530 */ 22468, 23511, 23511, 23511, 29028, 27443, 22493, 24923, 27965, 24035, 24035, 32797, 24946, 23443, 23114,\n  /* 10545 */ 23114, 29636, 24997, 22849, 28252, 23511, 23511, 23511, 25042, 25110, 24035, 24035, 34085, 24036, 25133,\n  /* 10560 */ 23114, 23114, 25152, 23029, 22839, 25169, 23511, 36764, 23511, 25645, 30403, 24035, 25186, 26576, 31806,\n  /* 10575 */ 24093, 25212, 32683, 22516, 32713, 26245, 34293, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511,\n  /* 10590 */ 23261, 23628, 24035, 32406, 23111, 23114, 28676, 30944, 27689, 25234, 24035, 23112, 19872, 37063, 23266,\n  /* 10605 */ 24036, 23114, 30243, 20379, 26100, 29218, 20211, 30105, 25257, 25284, 23007, 20046, 20132, 26578, 27685,\n  /* 10620 */ 20141, 24569, 24834, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10635 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10650 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10665 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10680 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10695 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10710 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10725 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10740 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36034, 19288, 21671,\n  /* 10755 */ 25314, 25072, 25330, 25346, 25362, 29939, 29951, 35288, 29984, 23812, 27216, 25405, 25424, 30456, 22584,\n  /* 10770 */ 26292, 25461, 25480, 31592, 29116, 25516, 34963, 25545, 27007, 25579, 33937, 25614, 25661, 25686, 34872,\n  /* 10785 */ 25702, 25718, 25734, 25769, 25795, 25811, 25840, 22493, 26533, 25856, 24035, 25876, 30763, 27481, 25909,\n  /* 10800 */ 23114, 28987, 25936, 25954, 29700, 25983, 23511, 31412, 26043, 26063, 22568, 29241, 29592, 26116, 31216,\n  /* 10815 */ 35383, 26170, 34783, 26194, 26221, 22839, 26241, 26261, 22477, 26283, 26308, 27306, 31035, 24655, 26576,\n  /* 10830 */ 29854, 33386, 26341, 32683, 22516, 32153, 30926, 26361, 19996, 26381, 35463, 26397, 26424, 34646, 26478,\n  /* 10845 */ 35605, 31386, 26494, 35567, 31964, 22940, 23689, 25218, 30309, 32289, 19830, 33605, 23112, 32109, 27733,\n  /* 10860 */ 27084, 24496, 35886, 35221, 26525, 36602, 26549, 26558, 26574, 26594, 26613, 26629, 26666, 26700, 26578,\n  /* 10875 */ 27685, 23740, 24285, 31691, 26733, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10890 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10905 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10920 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10935 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10950 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10965 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10980 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10995 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36397, 19552,\n  /* 11010 */ 18991, 25887, 28117, 32618, 26776, 29483, 29939, 26802, 24035, 24035, 24036, 28664, 23114, 23114, 23114,\n  /* 11025 */ 22420, 30297, 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 25559, 26576, 23114, 23114, 23114,\n  /* 11040 */ 30525, 33811, 22468, 23511, 23511, 23511, 28725, 27443, 22493, 24035, 24035, 27249, 24035, 24035, 23113,\n  /* 11055 */ 23114, 23114, 26827, 23114, 28618, 29700, 23511, 23511, 26845, 23511, 34564, 20402, 24035, 24035, 26979,\n  /* 11070 */ 24036, 23114, 23114, 23114, 24974, 23029, 22839, 23511, 23511, 23511, 26865, 25645, 24035, 24035, 24035,\n  /* 11085 */ 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114,\n  /* 11100 */ 20499, 23511, 23261, 23628, 33305, 24035, 25598, 23114, 19874, 34253, 27689, 19830, 24035, 23112, 19872,\n  /* 11115 */ 27741, 23266, 24036, 23114, 26886, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132,\n  /* 11130 */ 26578, 27685, 26931, 24569, 26439, 26947, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11145 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11160 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11175 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11190 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11205 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11220 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11235 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11250 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36019,\n  /* 11265 */ 19288, 26995, 24035, 23112, 32618, 23511, 31507, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114,\n  /* 11280 */ 23114, 22420, 23511, 23511, 23511, 23511, 28306, 27043, 24035, 24035, 24035, 24035, 26576, 23114, 23114,\n  /* 11295 */ 23114, 23114, 33811, 27061, 23511, 23511, 23511, 23511, 23512, 24694, 24035, 24035, 29978, 24035, 24035,\n  /* 11310 */ 23113, 23114, 33114, 23114, 23114, 30010, 29700, 23511, 35913, 23511, 23511, 34585, 20402, 24035, 24035,\n  /* 11325 */ 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035,\n  /* 11340 */ 27155, 26576, 23114, 23114, 30447, 23036, 29695, 23511, 23511, 30935, 20099, 24152, 25529, 27100, 34461,\n  /* 11355 */ 27121, 22625, 29156, 26009, 27137, 30422, 31903, 31655, 28870, 27171, 32439, 31731, 19830, 27232, 22612,\n  /* 11370 */ 27265, 26786, 25494, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046,\n  /* 11385 */ 20132, 26578, 27685, 20141, 20342, 27288, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11400 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11415 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11430 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11445 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11460 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11475 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11490 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11505 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11520 */ 36079, 19288, 21605, 27322, 27339, 28020, 27361, 27382, 29939, 24035, 24035, 32581, 24036, 23114, 23114,\n  /* 11535 */ 23114, 27425, 22420, 23511, 23511, 23511, 27442, 28306, 19803, 24035, 24035, 24035, 24035, 26710, 23114,\n  /* 11550 */ 23114, 23114, 23114, 32261, 22468, 23511, 23511, 23511, 23511, 35719, 24694, 29510, 24035, 24035, 24035,\n  /* 11565 */ 24035, 26717, 23114, 23114, 23114, 23114, 28618, 32217, 23511, 23511, 23511, 23511, 34585, 20402, 24035,\n  /* 11580 */ 24035, 24035, 27459, 23114, 23114, 23114, 36252, 23029, 20271, 23511, 23511, 23511, 28840, 30562, 24035,\n  /* 11595 */ 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110,\n  /* 11610 */ 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035,\n  /* 11625 */ 27480, 34483, 28401, 29761, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007,\n  /* 11640 */ 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058,\n  /* 11655 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11670 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11685 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11700 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11715 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11730 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11745 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11760 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11775 */ 19058, 36382, 19288, 21605, 27497, 27517, 28504, 28898, 27569, 29939, 29401, 27600, 27323, 27633, 19025,\n  /* 11790 */ 27662, 23114, 27705, 22420, 20483, 27721, 23511, 27765, 28306, 19803, 23540, 24035, 24610, 27781, 27805,\n  /* 11805 */ 26650, 23114, 28573, 32990, 25920, 22468, 26870, 23511, 26684, 34262, 34737, 25057, 34622, 24035, 24035,\n  /* 11820 */ 23971, 24206, 27825, 27847, 23114, 23114, 27865, 27885, 35766, 27914, 23511, 23511, 32766, 32844, 27934,\n  /* 11835 */ 28795, 26909, 27955, 26092, 27988, 25445, 28005, 28036, 28052, 21965, 23511, 32196, 19897, 28072, 28102,\n  /* 11850 */ 36534, 21541, 23801, 28153, 28180, 28197, 28221, 23036, 32695, 28251, 28268, 28292, 23667, 34825, 23930,\n  /* 11865 */ 24580, 28322, 28344, 31627, 28366, 25996, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 35625,\n  /* 11880 */ 33477, 33359, 27674, 28393, 33992, 24036, 23114, 30243, 19829, 28417, 28433, 28463, 23008, 19876, 20208,\n  /* 11895 */ 23007, 20046, 20132, 28489, 28520, 20141, 24569, 31691, 19787, 28550, 20268, 19058, 19058, 19058, 19058,\n  /* 11910 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11925 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11940 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11955 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11970 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11985 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12000 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12015 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12030 */ 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 31507, 29939, 24035, 24035, 24035, 24036,\n  /* 12045 */ 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 19803, 24035, 24035, 24035, 24035,\n  /* 12060 */ 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 24694, 28589, 24035,\n  /* 12075 */ 24035, 24035, 24035, 28608, 23114, 23114, 23114, 23114, 28618, 20431, 23511, 23511, 23511, 23511, 34585,\n  /* 12090 */ 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511,\n  /* 12105 */ 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035,\n  /* 12120 */ 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689,\n  /* 12135 */ 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876,\n  /* 12150 */ 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058,\n  /* 12165 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12180 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12195 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12210 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12225 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12240 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12255 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12270 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12285 */ 19058, 19058, 19058, 36004, 19288, 28634, 31951, 28565, 28702, 28718, 28741, 32544, 20175, 28792, 32086,\n  /* 12300 */ 20105, 28811, 29059, 29862, 28856, 22420, 28886, 30354, 23359, 28922, 28306, 28952, 23888, 26320, 36506,\n  /* 12315 */ 24035, 29331, 28968, 36609, 23114, 29003, 31661, 27061, 30649, 27366, 23511, 29023, 27918, 24694, 24035,\n  /* 12330 */ 24035, 23893, 33094, 30867, 23113, 23114, 23114, 29044, 34184, 30010, 29700, 23511, 23511, 29081, 29102,\n  /* 12345 */ 34585, 20402, 27789, 24035, 24035, 24036, 23114, 29132, 23114, 23114, 23029, 20271, 23511, 29153, 23511,\n  /* 12360 */ 23511, 30562, 30174, 24035, 24035, 27409, 25438, 23114, 23114, 29172, 36668, 31332, 23511, 23511, 29192,\n  /* 12375 */ 30144, 24035, 23110, 30203, 23114, 23467, 31544, 23261, 23628, 24035, 22545, 23111, 23114, 29213, 27078,\n  /* 12390 */ 27689, 29234, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 29257, 23008,\n  /* 12405 */ 19876, 20208, 28768, 29290, 29320, 34776, 29353, 20141, 22435, 29378, 19787, 29304, 20268, 19058, 19058,\n  /* 12420 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12435 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12450 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12465 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12480 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12495 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12510 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12525 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12540 */ 19058, 19058, 19058, 19058, 36367, 19288, 21605, 34616, 19006, 32618, 31497, 31507, 36216, 20184, 24035,\n  /* 12555 */ 34393, 29424, 34668, 23114, 34900, 29447, 22420, 30360, 23511, 37089, 29473, 28306, 19803, 29499, 24398,\n  /* 12570 */ 24035, 24035, 26576, 31799, 29532, 29550, 23114, 33811, 22468, 32298, 29571, 31184, 23511, 23512, 37127,\n  /* 12585 */ 36628, 29589, 24035, 24135, 24035, 23113, 29608, 23114, 27831, 29634, 28618, 29652, 30037, 23511, 24172,\n  /* 12600 */ 29671, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 29555, 29690, 23511, 23511,\n  /* 12615 */ 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511,\n  /* 12630 */ 23634, 29719, 24035, 23110, 29738, 23114, 23467, 34035, 29756, 23628, 24035, 24035, 23111, 23114, 19874,\n  /* 12645 */ 27078, 27689, 19830, 24035, 23112, 19872, 27741, 29777, 34364, 28181, 30243, 29799, 31920, 27272, 27185,\n  /* 12660 */ 23008, 31126, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29828, 20268, 19058,\n  /* 12675 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12690 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12705 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12720 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12735 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12750 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12765 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12780 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12795 */ 19058, 19058, 19058, 19058, 19058, 35989, 19552, 19687, 35139, 28649, 29878, 29894, 29924, 29939, 23224,\n  /* 12810 */ 23085, 31969, 24036, 35173, 24752, 24803, 23114, 22420, 31190, 30318, 24870, 23511, 28306, 29967, 23967,\n  /* 12825 */ 24035, 24035, 24035, 26576, 30000, 23114, 23114, 23114, 33811, 22468, 30026, 23511, 23511, 23511, 23512,\n  /* 12840 */ 26078, 24035, 24035, 24035, 30053, 37137, 30071, 23114, 23114, 33368, 25136, 28618, 30723, 23511, 23511,\n  /* 12855 */ 37096, 31356, 34585, 20402, 30092, 30127, 30160, 24036, 35740, 30219, 24960, 30259, 23029, 20271, 34042,\n  /* 12870 */ 30285, 30342, 30376, 23289, 30055, 30400, 30419, 30438, 32640, 33532, 33514, 30472, 18792, 26267, 24323,\n  /* 12885 */ 23057, 30493, 23639, 20008, 30196, 33188, 30517, 20075, 23511, 30541, 23628, 30578, 33928, 28776, 30594,\n  /* 12900 */ 19874, 30610, 30637, 19830, 30677, 27646, 19872, 25779, 23266, 23232, 35016, 30243, 30696, 29812, 30712,\n  /* 12915 */ 30746, 27206, 30779, 30807, 23007, 33395, 20132, 26578, 27685, 31703, 22928, 31691, 19787, 31079, 20268,\n  /* 12930 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12945 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12960 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12975 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12990 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13005 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13020 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13035 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13050 */ 19058, 19058, 19058, 19058, 19058, 19058, 36352, 19288, 23335, 30841, 26131, 30888, 30904, 30986, 29939,\n  /* 13065 */ 24035, 24704, 31017, 20025, 23114, 26178, 31051, 31095, 22420, 23511, 22524, 31142, 31172, 28534, 31206,\n  /* 13080 */ 35497, 25196, 24035, 28592, 24503, 23114, 31239, 31285, 23114, 31305, 31321, 31355, 31372, 31407, 23511,\n  /* 13095 */ 30556, 24694, 24035, 27501, 19805, 24035, 24035, 23113, 23114, 31428, 24066, 23114, 28618, 29700, 23511,\n  /* 13110 */ 31837, 18809, 23511, 34585, 31448, 24035, 24035, 24035, 23090, 23114, 23114, 23114, 23114, 31619, 35038,\n  /* 13125 */ 23511, 23511, 23511, 23511, 33714, 24035, 33085, 24035, 29431, 23114, 31467, 23114, 23143, 31487, 23511,\n  /* 13140 */ 31523, 23511, 35195, 36783, 24035, 30111, 23567, 23114, 23467, 31543, 31560, 23628, 24035, 24035, 23111,\n  /* 13155 */ 23114, 19874, 30953, 31584, 34508, 24035, 31608, 26345, 37055, 23266, 31643, 31677, 31719, 31747, 31786,\n  /* 13170 */ 31822, 26898, 23008, 19876, 31859, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 31878, 31936,\n  /* 13185 */ 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13200 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13215 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13230 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13245 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13260 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13275 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13290 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13305 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 35974, 19288, 21605, 27972, 35663, 31985, 29655, 32001,\n  /* 13320 */ 36715, 24785, 25893, 23545, 31912, 19853, 19916, 25938, 24540, 22420, 31843, 29674, 29573, 32735, 28936,\n  /* 13335 */ 19803, 24035, 24035, 32047, 24035, 26576, 23114, 23114, 27544, 23114, 33811, 22468, 23511, 23511, 32161,\n  /* 13350 */ 23511, 23512, 32066, 24035, 33313, 24035, 24035, 24035, 23113, 27426, 32102, 23114, 23114, 28618, 32125,\n  /* 13365 */ 23511, 32144, 23511, 23511, 33569, 20402, 24035, 27045, 24035, 24036, 23114, 23114, 28328, 23114, 30076,\n  /* 13380 */ 32177, 23511, 23511, 30384, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23595, 32212,\n  /* 13395 */ 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035,\n  /* 13410 */ 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 22635, 25753, 32233, 32257, 32277, 19829,\n  /* 13425 */ 26577, 26597, 20211, 23008, 19876, 32322, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787,\n  /* 13440 */ 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13455 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13470 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13485 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13500 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13515 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13530 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13545 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13560 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 32352, 35285, 32380, 34196, 33016,\n  /* 13575 */ 30661, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511,\n  /* 13590 */ 28306, 32404, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 32422, 23511, 23511,\n  /* 13605 */ 23511, 23511, 23512, 24694, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 30269,\n  /* 13620 */ 29700, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114,\n  /* 13635 */ 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036,\n  /* 13650 */ 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 19949,\n  /* 13665 */ 24035, 23111, 32455, 19874, 31269, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243,\n  /* 13680 */ 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691,\n  /* 13695 */ 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13710 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13725 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13740 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13755 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13770 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13785 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13800 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13815 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36337, 19552, 19209, 21617, 26509, 32475,\n  /* 13830 */ 32491, 32529, 29939, 24035, 32578, 25241, 32597, 23114, 32634, 29007, 32656, 22420, 23511, 32729, 26365,\n  /* 13845 */ 32751, 28306, 32788, 32882, 24035, 24035, 32813, 36727, 23114, 33182, 23114, 27553, 33235, 32829, 23511,\n  /* 13860 */ 32706, 23511, 28906, 28377, 26962, 32881, 32904, 32898, 32920, 24035, 32953, 23114, 32977, 26408, 23114,\n  /* 13875 */ 28164, 33006, 23511, 33039, 35774, 23511, 32306, 20402, 33076, 30872, 24035, 24036, 25408, 33110, 28979,\n  /* 13890 */ 23114, 23029, 20271, 35835, 33130, 33054, 23511, 30562, 33148, 24035, 24035, 33167, 23114, 23114, 33775,\n  /* 13905 */ 23036, 20459, 23511, 23511, 25464, 24646, 24035, 24035, 22446, 23114, 23114, 25627, 23511, 23261, 23628,\n  /* 13920 */ 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 31391, 33204, 33220,\n  /* 13935 */ 33251, 33287, 26577, 26597, 20211, 33329, 19876, 33345, 23007, 20046, 20132, 26578, 27685, 28473, 22599,\n  /* 13950 */ 31691, 33411, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13965 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13980 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13995 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14010 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14025 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14040 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14055 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14070 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 35959, 19288, 21907, 27243, 29843,\n  /* 14085 */ 32618, 33427, 31507, 29939, 33460, 34090, 24035, 24036, 33493, 24416, 33530, 23114, 22420, 33548, 24379,\n  /* 14100 */ 33585, 23511, 28306, 19803, 33603, 24202, 24035, 24035, 25593, 33749, 28205, 23114, 23114, 32388, 22468,\n  /* 14115 */ 33853, 33060, 23511, 23511, 31339, 33621, 24035, 24035, 34397, 24618, 30757, 33663, 23114, 23114, 33683,\n  /* 14130 */ 35684, 28618, 26678, 23511, 23511, 32506, 33699, 34585, 20402, 24035, 32562, 26973, 24036, 23114, 23114,\n  /* 14145 */ 33377, 33773, 23029, 20271, 23511, 23511, 30621, 23511, 23860, 24035, 33791, 21553, 26576, 36558, 23114,\n  /* 14160 */ 33809, 23036, 32857, 26047, 23511, 33827, 23634, 24035, 24035, 23110, 23114, 23114, 31252, 23511, 33845,\n  /* 14175 */ 23628, 24035, 24459, 23111, 23114, 33869, 27078, 30791, 29783, 24035, 24742, 19872, 33895, 23266, 26462,\n  /* 14190 */ 19710, 33879, 33919, 26577, 26597, 24123, 24930, 21930, 20208, 30501, 33953, 25268, 20252, 33983, 20141,\n  /* 14205 */ 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14220 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14235 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14250 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14265 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14280 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14295 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14310 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14325 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36322, 19552, 23390, 33634,\n  /* 14340 */ 35154, 34008, 34024, 34058, 35544, 34106, 34128, 26811, 33151, 34144, 34169, 34212, 23114, 34228, 34244,\n  /* 14355 */ 34278, 34315, 23511, 34331, 34347, 34380, 34413, 24035, 24663, 26576, 34429, 34453, 34477, 29534, 33811,\n  /* 14370 */ 22468, 34499, 34524, 34557, 25170, 34580, 35436, 23937, 34601, 24035, 24341, 26453, 23113, 34638, 34662,\n  /* 14385 */ 23114, 24236, 28618, 34684, 34703, 34729, 23511, 35352, 34753, 34799, 24035, 34815, 32558, 34848, 34888,\n  /* 14400 */ 35814, 34923, 23165, 29137, 23606, 30326, 30730, 34939, 33023, 30562, 36848, 34979, 24035, 24847, 34996,\n  /* 14415 */ 23114, 23114, 35032, 29695, 35054, 23511, 23511, 35091, 33296, 35124, 24296, 28235, 24361, 36276, 32772,\n  /* 14430 */ 35067, 35189, 27301, 30855, 24852, 22452, 35211, 35237, 35316, 25500, 35270, 23405, 24304, 35304, 29362,\n  /* 14445 */ 24036, 23114, 35332, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 35368, 28823, 23920, 32336, 35405,\n  /* 14460 */ 20141, 24569, 31691, 35421, 35479, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14475 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14490 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14505 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14520 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14535 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14550 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14565 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14580 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 35944, 22795, 21605,\n  /* 14595 */ 33647, 35877, 35513, 30962, 35529, 34073, 35557, 24035, 24035, 20405, 31107, 23114, 23114, 23114, 35590,\n  /* 14610 */ 34713, 23511, 23511, 23511, 35641, 19803, 29408, 32937, 25298, 24035, 35657, 23115, 27849, 24760, 35679,\n  /* 14625 */ 26205, 22468, 23511, 35700, 24907, 24901, 35075, 31893, 34980, 24035, 24035, 24035, 24035, 23113, 35009,\n  /* 14640 */ 23114, 23114, 23114, 28618, 35716, 30970, 23511, 23511, 23511, 34585, 23215, 24035, 24035, 24035, 24036,\n  /* 14655 */ 35735, 23114, 23114, 23114, 27105, 35756, 35790, 23511, 23511, 23511, 35254, 35446, 24035, 24035, 31223,\n  /* 14670 */ 35809, 23114, 23114, 23036, 36825, 35830, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467,\n  /* 14685 */ 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 31031, 20355, 19872, 33903,\n  /* 14700 */ 23266, 24036, 23114, 28686, 19829, 26577, 26597, 20211, 23008, 23424, 20208, 24711, 31065, 24486, 26578,\n  /* 14715 */ 27685, 20141, 19773, 35851, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14730 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14745 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14760 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14775 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14790 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14805 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14820 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14835 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36307, 19288,\n  /* 14850 */ 21605, 35494, 19702, 32618, 33437, 31507, 29939, 25117, 24035, 27939, 24036, 27869, 23114, 26829, 23114,\n  /* 14865 */ 22420, 23494, 23511, 33132, 23511, 28306, 19803, 24035, 34832, 24035, 24035, 26576, 23114, 25153, 23114,\n  /* 14880 */ 23114, 33811, 22468, 23511, 23511, 35911, 23511, 23512, 24694, 24035, 24035, 24035, 24035, 24035, 23113,\n  /* 14895 */ 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035,\n  /* 14910 */ 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035,\n  /* 14925 */ 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114,\n  /* 14940 */ 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872,\n  /* 14955 */ 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132,\n  /* 14970 */ 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14985 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15000 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15015 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15030 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15045 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15060 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15075 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15090 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 35929,\n  /* 15105 */ 19288, 21605, 25860, 23112, 36185, 23511, 36201, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114,\n  /* 15120 */ 23114, 22420, 23511, 23511, 23511, 23511, 28306, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114,\n  /* 15135 */ 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 26748, 24035, 24035, 24035, 24035, 24035,\n  /* 15150 */ 36249, 23114, 23114, 23114, 23114, 28618, 28835, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 27151,\n  /* 15165 */ 24035, 26760, 23114, 27989, 23114, 23114, 36268, 20271, 23511, 24436, 23511, 29703, 30562, 24035, 24035,\n  /* 15180 */ 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114,\n  /* 15195 */ 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112,\n  /* 15210 */ 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046,\n  /* 15225 */ 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15240 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15255 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15270 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15285 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15300 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15315 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15330 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15345 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15360 */ 36292, 19288, 21605, 36503, 21922, 32618, 34534, 31507, 36522, 24035, 33793, 24035, 35864, 23114, 23114,\n  /* 15375 */ 36555, 23417, 22420, 23511, 23511, 36574, 26020, 28306, 19803, 24035, 24035, 24035, 24035, 26576, 23114,\n  /* 15390 */ 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 36592, 24035, 24035, 36625, 24035,\n  /* 15405 */ 24035, 23113, 23114, 32961, 23114, 23114, 29618, 29700, 23511, 29086, 23511, 23511, 34585, 20402, 36644,\n  /* 15420 */ 24035, 24035, 24036, 29740, 23114, 23114, 23114, 29065, 36663, 31527, 23511, 23511, 23511, 30562, 24035,\n  /* 15435 */ 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110,\n  /* 15450 */ 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035,\n  /* 15465 */ 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007,\n  /* 15480 */ 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058,\n  /* 15495 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15510 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15525 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15540 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15555 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15570 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15585 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15600 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15615 */ 19058, 36079, 19288, 21605, 31451, 23112, 36684, 23511, 36700, 29939, 24035, 24035, 24035, 30185, 23114,\n  /* 15630 */ 23114, 23114, 27526, 22420, 23511, 23511, 23511, 32865, 28306, 19803, 36743, 24035, 27017, 24035, 26576,\n  /* 15645 */ 27535, 23114, 31432, 23114, 33811, 22468, 33271, 23511, 32128, 23511, 23512, 24694, 24035, 27196, 24035,\n  /* 15660 */ 24035, 24035, 23113, 32459, 23114, 23114, 23114, 28618, 29700, 33829, 36762, 23511, 23511, 34585, 20402,\n  /* 15675 */ 24035, 36746, 24035, 29722, 23114, 23114, 34437, 23114, 34907, 20271, 23511, 23511, 18801, 23511, 23206,\n  /* 15690 */ 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 36837, 24035, 24035,\n  /* 15705 */ 33739, 23114, 23114, 25094, 23511, 23261, 23628, 24035, 36780, 23111, 24073, 19874, 27078, 35344, 19830,\n  /* 15720 */ 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208,\n  /* 15735 */ 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058,\n  /* 15750 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15765 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15780 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15795 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15810 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15825 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15840 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15855 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15870 */ 19058, 19058, 22720, 19288, 36799, 36866, 17466, 36890, 36864, 21991, 22211, 22987, 17556, 17575, 22288,\n  /* 15885 */ 17486, 17509, 17525, 18373, 17631, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996,\n  /* 15900 */ 17689, 17470, 17591, 20896, 17468, 36883, 36906, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514,\n  /* 15915 */ 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024,\n  /* 15930 */ 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928,\n  /* 15945 */ 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278,\n  /* 15960 */ 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638,\n  /* 15975 */ 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838,\n  /* 15990 */ 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058,\n  /* 16005 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16020 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16035 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16050 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16065 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16080 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16095 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16110 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16125 */ 19058, 19058, 19058, 22705, 19288, 19457, 36866, 17466, 36890, 36866, 19375, 22971, 22987, 17556, 17575,\n  /* 16140 */ 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306,\n  /* 16155 */ 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921,\n  /* 16170 */ 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008,\n  /* 16185 */ 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906,\n  /* 16200 */ 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262,\n  /* 16215 */ 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149,\n  /* 16230 */ 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054,\n  /* 16245 */ 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058,\n  /* 16260 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16275 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16290 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16305 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16320 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16335 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16350 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16365 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16380 */ 19058, 19058, 19058, 19058, 36124, 19288, 36951, 36866, 17466, 36890, 36866, 21991, 22404, 22987, 17556,\n  /* 16395 */ 17575, 22288, 17486, 17509, 17525, 18373, 18567, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411,\n  /* 16410 */ 20306, 17996, 17689, 17470, 17591, 20896, 17468, 36979, 36995, 36867, 19404, 20299, 36866, 17647, 17862,\n  /* 16425 */ 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712,\n  /* 16440 */ 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890,\n  /* 16455 */ 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935,\n  /* 16470 */ 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583,\n  /* 16485 */ 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915,\n  /* 16500 */ 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058,\n  /* 16515 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16530 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16545 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16560 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16575 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16590 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16605 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16620 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16635 */ 19058, 19058, 19058, 19058, 19058, 36139, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987,\n  /* 16650 */ 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18027, 22984, 17553, 17572, 22285, 18462, 17990, 18622,\n  /* 16665 */ 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647,\n  /* 16680 */ 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521,\n  /* 16695 */ 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884,\n  /* 16710 */ 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134,\n  /* 16725 */ 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553,\n  /* 16740 */ 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906,\n  /* 16755 */ 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056,\n  /* 16770 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16785 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16800 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16815 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16830 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16845 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16860 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16875 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16890 */ 19058, 19058, 19058, 19058, 19058, 19058, 36139, 19288, 21529, 24035, 23112, 23033, 23511, 31507, 25377,\n  /* 16905 */ 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 37040, 23511, 23511, 23511, 23511, 28086, 19803,\n  /* 16920 */ 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 24254, 37079, 23511, 23511, 23511, 23511,\n  /* 16935 */ 23512, 34766, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511,\n  /* 16950 */ 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271,\n  /* 16965 */ 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511,\n  /* 16980 */ 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111,\n  /* 16995 */ 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577,\n  /* 17010 */ 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304,\n  /* 17025 */ 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 17040 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 17055 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 17070 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 17085 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 17100 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 17115 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 17130 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 17145 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 37112, 37160, 18469, 36866, 17466, 36890, 36866, 17656,\n  /* 17160 */ 37174, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18537, 22984, 17553, 17572, 22285, 18780,\n  /* 17175 */ 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 36883, 36906, 36867, 19404, 20299,\n  /* 17190 */ 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403,\n  /* 17205 */ 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064,\n  /* 17220 */ 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010,\n  /* 17235 */ 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485,\n  /* 17250 */ 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681,\n  /* 17265 */ 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976,\n  /* 17280 */ 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 17295 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 17310 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 17325 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 17340 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 17355 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 17370 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 17385 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 17400 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 53264, 18, 49172, 57366, 24, 8192, 28, 102432,\n  /* 17416 */ 127011, 110630, 114730, 106539, 127011, 127011, 127011, 53264, 18, 18, 0, 0, 57366, 0, 24, 24, 24, 0, 28,\n  /* 17435 */ 28, 28, 28, 102432, 0, 0, 127011, 0, 2220032, 110630, 0, 0, 0, 114730, 106539, 0, 2170880, 2170880,\n  /* 17453 */ 2170880, 2170880, 0, 0, 0, 2170880, 2170880, 2170880, 3002368, 2170880, 2170880, 2170880, 2170880,\n  /* 17466 */ 2170880, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936,\n  /* 17477 */ 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2576384, 2215936, 2215936, 2215936,\n  /* 17488 */ 2416640, 2424832, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936,\n  /* 17499 */ 2215936, 2215936, 2215936, 2543616, 2215936, 2215936, 2215936, 2215936, 2215936, 2629632, 2215936,\n  /* 17510 */ 2617344, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2691072, 2215936, 2707456, 2215936,\n  /* 17521 */ 2715648, 2215936, 2723840, 2764800, 2215936, 2215936, 2797568, 2215936, 2822144, 2215936, 2215936,\n  /* 17532 */ 2854912, 2215936, 2215936, 2215936, 2912256, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936,\n  /* 17543 */ 2215936, 0, 0, 0, 180224, 0, 0, 2174976, 0, 0, 2170880, 2617344, 2170880, 2170880, 2170880, 2170880,\n  /* 17559 */ 2170880, 2170880, 2691072, 2170880, 2707456, 2170880, 2715648, 2170880, 2723840, 2764800, 2170880,\n  /* 17570 */ 2170880, 2797568, 2170880, 2170880, 2797568, 2170880, 2822144, 2170880, 2170880, 2854912, 2170880,\n  /* 17581 */ 2170880, 2170880, 2912256, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936,\n  /* 17592 */ 2215936, 2215936, 2215936, 2609152, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2654208,\n  /* 17603 */ 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 184599, 280, 0, 2174976, 0, 0,\n  /* 17619 */ 2215936, 3117056, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936,\n  /* 17630 */ 2215936, 2215936, 2215936, 0, 544, 0, 546, 0, 0, 2179072, 0, 0, 0, 552, 0, 0, 2170880, 2170880, 2170880,\n  /* 17649 */ 3117056, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880,\n  /* 17660 */ 2170880, 2170880, 0, 0, 0, 2158592, 2158592, 2232320, 2232320, 0, 2240512, 2240512, 0, 0, 0, 644, 0, 0, 0,\n  /* 17679 */ 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3129344, 2170880, 2170880, 2170880,\n  /* 17692 */ 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2215936, 2400256, 2215936, 2215936,\n  /* 17703 */ 2215936, 2215936, 2711552, 2170880, 2170880, 2170880, 2170880, 2170880, 2760704, 2768896, 2789376,\n  /* 17714 */ 2813952, 2170880, 2170880, 2170880, 2875392, 2904064, 2170880, 2170880, 2170880, 2170880, 2170880,\n  /* 17725 */ 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936,\n  /* 17736 */ 2215936, 2215936, 2453504, 2457600, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0,\n  /* 17748 */ 167936, 0, 0, 0, 0, 2174976, 0, 0, 2215936, 2215936, 2514944, 2215936, 2215936, 2215936, 2215936, 2215936,\n  /* 17764 */ 2215936, 2215936, 2215936, 2592768, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 32768,\n  /* 17776 */ 0, 0, 0, 0, 0, 2174976, 32768, 0, 2633728, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2711552,\n  /* 17792 */ 2215936, 2215936, 2215936, 2215936, 2215936, 2760704, 2768896, 2789376, 2813952, 2215936, 2215936,\n  /* 17803 */ 2215936, 2875392, 2904064, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936,\n  /* 17814 */ 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2174976, 0, 65819, 2215936, 2215936, 3031040, 2215936, 3055616,\n  /* 17830 */ 2215936, 2215936, 2215936, 2215936, 3092480, 2215936, 2215936, 3125248, 2215936, 2215936, 2215936,\n  /* 17841 */ 2215936, 2215936, 2215936, 3002368, 2215936, 2215936, 2170880, 2170880, 2494464, 2170880, 2170880, 0, 0,\n  /* 17854 */ 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3198976, 2215936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 17872 */ 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 0, 0, 2379776, 2170880, 2170880, 2170880,\n  /* 17885 */ 2170880, 2170880, 2170880, 2170880, 2445312, 2170880, 2465792, 2473984, 2170880, 2170880, 2170880,\n  /* 17896 */ 2170880, 2170880, 2170880, 2523136, 2170880, 2170880, 2641920, 2170880, 2170880, 2170880, 2699264,\n  /* 17907 */ 2170880, 2727936, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2879488, 2170880,\n  /* 17918 */ 2916352, 2170880, 2170880, 2170880, 2879488, 2170880, 2916352, 2170880, 2170880, 2170880, 2170880,\n  /* 17929 */ 2170880, 2170880, 2170880, 2170880, 2170880, 3026944, 2170880, 2170880, 3063808, 2170880, 2170880,\n  /* 17940 */ 3112960, 2170880, 2170880, 3133440, 2170880, 2170880, 3112960, 2170880, 2170880, 3133440, 2170880,\n  /* 17951 */ 2170880, 2170880, 3162112, 2170880, 2170880, 3182592, 3186688, 2170880, 2379776, 2215936, 2523136,\n  /* 17962 */ 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2596864, 2215936, 2621440, 2215936,\n  /* 17973 */ 2215936, 2641920, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2179072, 548, 0, 0, 0, 0, 287, 2170880, 0, 2170880,\n  /* 17993 */ 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880,\n  /* 18004 */ 2170880, 2170880, 2170880, 3117056, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2699264,\n  /* 18015 */ 2215936, 2727936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2879488, 2215936,\n  /* 18026 */ 2916352, 2215936, 2215936, 0, 0, 0, 0, 188416, 0, 2179072, 0, 0, 0, 0, 0, 287, 2170880, 0, 2171019,\n  /* 18045 */ 2171019, 2171019, 2400395, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019,\n  /* 18056 */ 2171019, 2171019, 2171019, 3031179, 2171019, 3055755, 2171019, 2171019, 2215936, 3133440, 2215936,\n  /* 18067 */ 2215936, 2215936, 3162112, 2215936, 2215936, 3182592, 3186688, 2215936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 18085 */ 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2523275, 2171019, 2171019, 2171019, 2171019,\n  /* 18096 */ 2171019, 2171019, 2171019, 2597003, 2171019, 2621579, 2170880, 2170880, 2170880, 3162112, 2170880,\n  /* 18107 */ 2170880, 3182592, 3186688, 2170880, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0,\n  /* 18121 */ 53264, 0, 18, 18, 24, 24, 0, 4337664, 28, 2170880, 2170880, 2170880, 2629632, 2170880, 2170880, 2170880,\n  /* 18137 */ 2170880, 2719744, 2744320, 2170880, 2170880, 2170880, 2834432, 2838528, 2170880, 2908160, 2170880,\n  /* 18148 */ 2170880, 2936832, 2215936, 2215936, 2215936, 2215936, 2719744, 2744320, 2215936, 2215936, 2215936,\n  /* 18159 */ 2834432, 2838528, 2215936, 2908160, 2215936, 2215936, 2936832, 2215936, 2215936, 2985984, 2215936,\n  /* 18170 */ 2994176, 2215936, 2215936, 3014656, 2215936, 3059712, 3076096, 3088384, 2215936, 2215936, 2215936,\n  /* 18181 */ 2215936, 2215936, 2215936, 2215936, 2445312, 2215936, 2465792, 2473984, 2215936, 2215936, 2215936,\n  /* 18192 */ 2215936, 2215936, 2215936, 2171166, 2171166, 2171166, 2171166, 2171166, 0, 0, 0, 2171166, 2171166,\n  /* 18205 */ 2171166, 2171166, 2171166, 2171166, 2171019, 2171019, 2494603, 2171019, 2171019, 2215936, 2215936,\n  /* 18216 */ 2215936, 3215360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2379776, 2170880, 2170880, 2170880, 2170880,\n  /* 18236 */ 2985984, 2170880, 2994176, 2170880, 2170880, 3016168, 2170880, 3059712, 3076096, 3088384, 2170880,\n  /* 18247 */ 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 0, 18, 18, 124, 124, 0, 128, 128, 2170880, 2170880,\n  /* 18264 */ 2170880, 3215360, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2486272,\n  /* 18276 */ 2170880, 2170880, 2506752, 2170880, 2170880, 2170880, 2535424, 2539520, 2170880, 2170880, 2588672,\n  /* 18287 */ 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2920448,\n  /* 18298 */ 2170880, 2170880, 2170880, 2990080, 2170880, 2170880, 2170880, 2170880, 3051520, 2170880, 2170880,\n  /* 18309 */ 2170880, 2170880, 2170880, 2170880, 3170304, 0, 2387968, 2392064, 2170880, 2170880, 2433024, 2170880,\n  /* 18321 */ 2170880, 2170880, 3170304, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936,\n  /* 18332 */ 2486272, 2215936, 2215936, 2506752, 2215936, 2215936, 2215936, 2535424, 2539520, 2215936, 2215936,\n  /* 18343 */ 2588672, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 0, 0, 0,\n  /* 18358 */ 2174976, 136, 0, 2215936, 2215936, 2920448, 2215936, 2215936, 2215936, 2990080, 2215936, 2215936, 2215936,\n  /* 18371 */ 2215936, 3051520, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3108864, 2215936,\n  /* 18382 */ 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3026944, 2215936, 2215936, 3063808,\n  /* 18393 */ 2215936, 2215936, 3112960, 2215936, 2215936, 2215936, 3170304, 0, 0, 0, 0, 0, 0, 2170880, 2170880,\n  /* 18408 */ 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2453504, 2457600, 2170880, 2170880,\n  /* 18419 */ 2170880, 2486272, 2170880, 2170880, 2506752, 2170880, 2170880, 2170880, 2537049, 2539520, 2170880,\n  /* 18430 */ 2170880, 2588672, 2170880, 2170880, 2170880, 1508, 2170880, 2170880, 2170880, 1512, 2170880, 2920448,\n  /* 18442 */ 2170880, 2170880, 2170880, 2990080, 2170880, 2170880, 2170880, 2461696, 2170880, 2170880, 2170880,\n  /* 18453 */ 2510848, 2170880, 2170880, 2170880, 2170880, 2580480, 2170880, 2605056, 2637824, 2170880, 2170880, 18, 0,\n  /* 18466 */ 0, 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2686976, 2748416,\n  /* 18487 */ 2170880, 2170880, 2170880, 2924544, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880,\n  /* 18498 */ 3121152, 2170880, 2170880, 3145728, 3158016, 3166208, 2170880, 2420736, 2428928, 2170880, 2478080,\n  /* 18509 */ 2170880, 2170880, 2170880, 2170880, 0, 0, 2170880, 2170880, 2170880, 2170880, 2646016, 2670592, 0, 0,\n  /* 18523 */ 3145728, 3158016, 3166208, 2387968, 2392064, 2215936, 2215936, 2433024, 2215936, 2461696, 2215936,\n  /* 18534 */ 2215936, 2215936, 2510848, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2179072, 0, 0, 0, 0, 0, 0, 2170880,\n  /* 18553 */ 2215936, 2215936, 2580480, 2215936, 2605056, 2637824, 2215936, 2215936, 2686976, 2748416, 2215936,\n  /* 18564 */ 2215936, 2215936, 2924544, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2179072, 0, 0, 0, 0, 0, 286, 2170880,\n  /* 18583 */ 2215936, 2215936, 2215936, 2215936, 2215936, 3121152, 2215936, 2215936, 3145728, 3158016, 3166208,\n  /* 18594 */ 2387968, 2392064, 2170880, 2170880, 2433024, 2170880, 2461696, 2170880, 2170880, 2170880, 2510848,\n  /* 18605 */ 2170880, 2170880, 1625, 2170880, 2170880, 2580480, 2170880, 2605056, 2637824, 2170880, 647, 2170880,\n  /* 18617 */ 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880,\n  /* 18628 */ 2170880, 2170880, 2576384, 2170880, 2170880, 2170880, 2170880, 2170880, 2609152, 2170880, 2170880,\n  /* 18639 */ 2686976, 0, 0, 2748416, 2170880, 2170880, 0, 2170880, 2924544, 2170880, 2170880, 2170880, 2170880,\n  /* 18652 */ 2170880, 2170880, 0, 53264, 0, 18, 18, 24, 0, 0, 28, 28, 2170880, 3141632, 2215936, 2420736, 2428928,\n  /* 18669 */ 2215936, 2478080, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2646016,\n  /* 18680 */ 2670592, 2752512, 2756608, 2846720, 2961408, 2215936, 2998272, 2215936, 3010560, 2215936, 2215936,\n  /* 18691 */ 2215936, 3141632, 2170880, 2420736, 2428928, 2752512, 2756608, 0, 2846720, 2961408, 2170880, 2998272,\n  /* 18703 */ 2170880, 3010560, 2170880, 2170880, 2170880, 3141632, 2170880, 2170880, 2490368, 2215936, 2490368,\n  /* 18714 */ 2215936, 2215936, 2215936, 2547712, 2555904, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936,\n  /* 18725 */ 2215936, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2174976, 245760, 0, 3129344, 2170880, 2170880, 2490368,\n  /* 18741 */ 2170880, 2170880, 2170880, 0, 0, 2547712, 2555904, 2170880, 2170880, 2170880, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 18760 */ 2220032, 0, 0, 45056, 0, 2584576, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2170880,\n  /* 18774 */ 2170880, 2170880, 2170880, 0, 0, 0, 2170880, 2170880, 2158592, 0, 0, 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 0,\n  /* 18795 */ 0, 0, 0, 0, 0, 1482, 97, 97, 97, 97, 97, 97, 97, 1354, 97, 97, 97, 97, 97, 97, 97, 97, 1148, 97, 97, 97,\n  /* 18821 */ 97, 97, 97, 97, 2584576, 2170880, 2170880, 1512, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880,\n  /* 18836 */ 2441216, 2170880, 2527232, 2170880, 2600960, 2170880, 2850816, 2170880, 2170880, 2170880, 3022848,\n  /* 18847 */ 2215936, 2441216, 2215936, 2527232, 2215936, 2600960, 2215936, 2850816, 2215936, 2215936, 0, 0, 0, 0, 0,\n  /* 18862 */ 0, 2179072, 0, 0, 0, 0, 0, 287, 2170880, 2215936, 3022848, 2170880, 2441216, 2170880, 2527232, 0, 0,\n  /* 18879 */ 2170880, 2600960, 2170880, 0, 2850816, 2170880, 2170880, 2170880, 2170880, 2170880, 2523136, 2170880,\n  /* 18891 */ 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2596864, 2170880, 2621440, 2170880, 2170880,\n  /* 18902 */ 2641920, 2170880, 2170880, 2170880, 3022848, 2170880, 2519040, 2170880, 2170880, 2170880, 2170880,\n  /* 18913 */ 2170880, 2215936, 2519040, 2215936, 2215936, 2215936, 2215936, 2215936, 2170880, 2170880, 2170880,\n  /* 18924 */ 2453504, 2457600, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2514944, 2170880, 2170880,\n  /* 18935 */ 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2592768, 2170880, 2170880, 2519040, 0, 2024,\n  /* 18947 */ 2170880, 2170880, 0, 2170880, 2170880, 2170880, 2396160, 2170880, 2170880, 2170880, 2170880, 3018752,\n  /* 18959 */ 2396160, 2215936, 2215936, 2215936, 2215936, 3018752, 2396160, 0, 2024, 2170880, 2170880, 2170880,\n  /* 18971 */ 2170880, 3018752, 2170880, 2650112, 2965504, 2170880, 2215936, 2650112, 2965504, 2215936, 0, 0, 2170880,\n  /* 18984 */ 2650112, 2965504, 2170880, 2551808, 2170880, 2551808, 2215936, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730,\n  /* 19001 */ 106539, 41098, 45, 45, 141, 45, 45, 67, 67, 67, 67, 67, 224, 67, 67, 238, 67, 67, 67, 67, 67, 67, 67,\n  /* 19024 */ 1288, 67, 67, 67, 67, 67, 67, 67, 67, 67, 469, 67, 67, 67, 67, 67, 67, 0, 2551808, 2170880, 2170880,\n  /* 19045 */ 2215936, 0, 2170880, 2170880, 2215936, 0, 2170880, 2170880, 2215936, 0, 2170880, 2977792, 2977792, 0, 0,\n  /* 19060 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53264, 18, 49172, 57366, 24, 8192, 29, 102432, 127011, 110630,\n  /* 19084 */ 114730, 106539, 127011, 127011, 127011, 53264, 18, 18, 49172, 0, 0, 0, 24, 24, 24, 0, 28, 28, 28, 28,\n  /* 19104 */ 102432, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 2170880, 2170880, 2170880, 2416640, 0, 0, 0, 0, 2220032,\n  /* 19126 */ 110630, 0, 0, 0, 114730, 106539, 136, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 0,\n  /* 19142 */ 4256099, 4256099, 24, 24, 0, 28, 28, 2170880, 2461696, 2170880, 2170880, 2170880, 2510848, 2170880,\n  /* 19156 */ 2170880, 0, 2170880, 2170880, 2580480, 2170880, 2605056, 2637824, 2170880, 2170880, 2170880, 2547712,\n  /* 19168 */ 2555904, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3129344,\n  /* 19179 */ 2215936, 2215936, 543, 543, 545, 545, 0, 0, 2179072, 0, 550, 551, 551, 0, 287, 2171166, 2171166, 18, 0, 0,\n  /* 19199 */ 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 645, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45,\n  /* 19224 */ 149, 2584576, 2170880, 2170880, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2441216,\n  /* 19237 */ 2170880, 2527232, 2170880, 2600960, 2519040, 0, 0, 2170880, 2170880, 0, 2170880, 2170880, 2170880,\n  /* 19250 */ 2396160, 2170880, 2170880, 2170880, 2170880, 3018752, 2396160, 2215936, 2215936, 2215936, 2215936,\n  /* 19261 */ 3018752, 2396160, 0, 0, 2170880, 2170880, 2170880, 2170880, 3018752, 2170880, 2650112, 2965504, 53264, 18,\n  /* 19275 */ 49172, 57366, 24, 155648, 28, 102432, 155648, 155687, 114730, 106539, 0, 0, 155648, 53264, 18, 18, 49172,\n  /* 19292 */ 0, 57366, 0, 24, 24, 24, 0, 28, 28, 28, 28, 102432, 0, 0, 0, 0, 2220032, 0, 94208, 0, 0, 114730, 106539,\n  /* 19315 */ 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 208896, 18, 278528, 24, 24, 0, 28, 28,\n  /* 19332 */ 53264, 18, 159765, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 0, 53264, 18, 18, 49172,\n  /* 19351 */ 0, 57366, 0, 24, 24, 24, 0, 28, 139394, 28, 28, 102432, 131, 0, 0, 0, 2220032, 110630, 0, 0, 0, 114730,\n  /* 19373 */ 106539, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 32768, 53264, 0, 18, 18, 24, 24, 0, 28,\n  /* 19390 */ 28, 0, 546, 0, 0, 2183168, 0, 0, 552, 832, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880,\n  /* 19407 */ 2170880, 2170880, 2609152, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2654208, 2170880,\n  /* 19418 */ 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936,\n  /* 19429 */ 2215936, 2215936, 2215936, 2215936, 3198976, 2215936, 0, 1084, 0, 1088, 0, 1092, 0, 0, 0, 0, 0, 41606, 0,\n  /* 19448 */ 0, 0, 0, 45, 45, 45, 45, 45, 937, 0, 0, 0, 0, 2220032, 110630, 0, 0, 0, 114730, 106539, 0, 2170880,\n  /* 19470 */ 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3198976, 2170880, 0, 0, 644, 0, 0, 0,\n  /* 19485 */ 2215936, 3117056, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936,\n  /* 19496 */ 2215936, 2215936, 2215936, 0, 826, 0, 828, 0, 0, 2183168, 0, 0, 830, 0, 2170880, 2170880, 2170880,\n  /* 19513 */ 2400256, 2170880, 2170880, 2170880, 2170880, 2592768, 2170880, 2170880, 2170880, 2170880, 2633728,\n  /* 19524 */ 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2711552, 2170880, 2170880, 2170880, 2170880,\n  /* 19535 */ 2170880, 2760704, 53264, 18, 49172, 57366, 24, 8192, 28, 172066, 172032, 110630, 172066, 106539, 0, 0,\n  /* 19551 */ 172032, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 16384, 28, 28, 28, 28, 102432, 0, 98304, 0, 0,\n  /* 19572 */ 2220032, 110630, 0, 0, 0, 0, 106539, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880,\n  /* 19587 */ 2170880, 3198976, 2170880, 0, 0, 45056, 0, 0, 0, 53264, 18, 49172, 57366, 25, 8192, 30, 102432, 0, 110630,\n  /* 19606 */ 114730, 106539, 0, 0, 176219, 53264, 18, 18, 49172, 0, 57366, 0, 124, 124, 124, 0, 128, 128, 128, 128,\n  /* 19626 */ 102432, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 2170880, 2170880, 2170880, 2416640, 0, 546, 0, 0, 2183168,\n  /* 19648 */ 0, 65536, 552, 0, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 2646016,\n  /* 19661 */ 2670592, 2752512, 2756608, 2846720, 2961408, 2170880, 2998272, 2170880, 3010560, 2170880, 2170880,\n  /* 19672 */ 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3198976, 2215936, 0, 0, 0, 0, 0, 0, 65536, 0, 0, 0,\n  /* 19690 */ 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 143, 45, 45, 67, 67, 67, 67, 67, 227, 67, 67, 67,\n  /* 19713 */ 67, 67, 67, 67, 67, 67, 1824, 67, 1826, 67, 67, 67, 67, 17, 18, 49172, 57366, 24, 8192, 28, 102432, 0,\n  /* 19735 */ 110630, 114730, 106539, 0, 0, 32768, 120, 121, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 0, 28, 28, 28, 28,\n  /* 19757 */ 102432, 67, 67, 37139, 37139, 24853, 24853, 0, 0, 2179072, 548, 0, 65820, 65820, 0, 287, 97, 0, 0, 97, 97,\n  /* 19778 */ 0, 97, 97, 97, 45, 45, 45, 45, 2033, 45, 67, 67, 67, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 369, 0,\n  /* 19805 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 978, 0, 546, 70179, 0, 2183168, 0, 0, 552, 0,\n  /* 19830 */ 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1013, 67, 67, 67,\n  /* 19856 */ 67, 67, 67, 67, 67, 67, 67, 473, 67, 67, 67, 67, 483, 67, 67, 1025, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 19881 */ 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 1119, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 19907 */ 97, 97, 1359, 97, 97, 97, 67, 67, 1584, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 497, 67, 67,\n  /* 19932 */ 1659, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1667, 45, 45, 45, 45, 45, 169, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 19957 */ 45, 45, 45, 1668, 45, 45, 45, 45, 67, 67, 1694, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 774,\n  /* 19982 */ 67, 67, 1713, 97, 97, 97, 97, 97, 97, 97, 0, 97, 97, 1723, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45,\n  /* 20007 */ 1538, 45, 45, 45, 45, 45, 1559, 45, 45, 1561, 45, 45, 45, 45, 45, 45, 45, 687, 45, 45, 45, 45, 45, 45, 45,\n  /* 20032 */ 45, 448, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1771, 1772, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97,\n  /* 20057 */ 97, 0, 0, 0, 97, 67, 67, 67, 67, 67, 1821, 67, 67, 67, 67, 67, 67, 1827, 67, 67, 67, 0, 0, 0, 0, 0, 0, 97,\n  /* 20085 */ 97, 1614, 97, 97, 97, 97, 97, 603, 97, 97, 605, 97, 97, 608, 97, 97, 97, 97, 0, 1532, 45, 45, 45, 45, 45,\n  /* 20110 */ 45, 45, 45, 45, 45, 450, 45, 45, 45, 45, 67, 67, 97, 97, 97, 97, 97, 97, 0, 0, 1839, 97, 97, 97, 97, 0, 0,\n  /* 20137 */ 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 97, 1883, 97, 1885, 97, 0,\n  /* 20162 */ 1888, 0, 97, 97, 0, 97, 97, 1848, 97, 97, 97, 97, 1852, 45, 45, 45, 45, 45, 45, 45, 384, 391, 45, 45, 45,\n  /* 20187 */ 45, 45, 45, 45, 385, 45, 45, 45, 45, 45, 45, 45, 45, 1237, 45, 45, 45, 45, 45, 45, 67, 0, 97, 97, 97, 97,\n  /* 20213 */ 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 1951, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67,\n  /* 20240 */ 67, 67, 1963, 97, 2023, 0, 97, 97, 0, 97, 97, 97, 45, 45, 45, 45, 45, 45, 67, 67, 1994, 67, 1995, 67, 67,\n  /* 20265 */ 67, 67, 67, 67, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 0, 0, 0, 0, 2220032, 110630, 0,\n  /* 20294 */ 0, 0, 114730, 106539, 137, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2793472,\n  /* 20307 */ 2805760, 2170880, 2830336, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880,\n  /* 20318 */ 2170880, 2170880, 2170880, 2170880, 3031040, 2170880, 3055616, 2170880, 2170880, 67, 67, 37139, 37139,\n  /* 20331 */ 24853, 24853, 0, 0, 281, 549, 0, 65820, 65820, 0, 287, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 45, 2031,\n  /* 20354 */ 2032, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1769, 67, 0, 546, 70179, 549, 549, 0, 0,\n  /* 20378 */ 552, 0, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1858, 45, 641, 0, 0, 0, 0, 41606, 926, 0, 0,\n  /* 20404 */ 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 456, 67, 0, 0, 0, 1313, 0, 0, 0, 1096, 1319, 0,\n  /* 20431 */ 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1110, 97, 97, 97, 97, 67, 67, 67, 67, 1301, 1476, 0, 0, 0, 0,\n  /* 20457 */ 1307, 1478, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 1486, 97, 1487, 97, 1313, 1480, 0, 0, 0, 0, 1319, 0,\n  /* 20483 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 566, 97, 97, 97, 97, 97, 97, 67, 67, 67, 1476, 0, 1478, 0, 1480, 0,\n  /* 20508 */ 97, 97, 97, 97, 97, 97, 97, 45, 1853, 45, 1855, 45, 45, 45, 45, 53264, 18, 49172, 57366, 26, 8192, 31,\n  /* 20530 */ 102432, 0, 110630, 114730, 106539, 0, 0, 225368, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630,\n  /* 20548 */ 114730, 106539, 0, 0, 32768, 53264, 18, 18, 49172, 163840, 57366, 0, 24, 24, 229376, 0, 28, 28, 28,\n  /* 20567 */ 229376, 102432, 0, 0, 0, 0, 2220167, 110630, 0, 0, 0, 114730, 106539, 0, 2171019, 2171019, 2171019,\n  /* 20584 */ 2171019, 2592907, 2171019, 2171019, 2171019, 2171019, 2633867, 2171019, 2171019, 2171019, 2171019,\n  /* 20595 */ 2171019, 2171019, 2654347, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019,\n  /* 20606 */ 2171019, 2171019, 2171019, 3117195, 2171019, 2171019, 2171019, 2171019, 2240641, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 20623 */ 368, 0, 140, 2171019, 2171019, 2171019, 2416779, 2424971, 2171019, 2171019, 2171019, 2171019, 2171019,\n  /* 20636 */ 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2617483, 2171019, 2171019,\n  /* 20647 */ 2642059, 2171019, 2171019, 2171019, 2699403, 2171019, 2728075, 2171019, 2171019, 2171019, 2171019,\n  /* 20658 */ 2171019, 2171019, 2171019, 3215499, 2215936, 2215936, 2215936, 2215936, 2215936, 2437120, 2215936,\n  /* 20669 */ 2215936, 2171019, 2822283, 2171019, 2171019, 2855051, 2171019, 2171019, 2171019, 2912395, 2171019,\n  /* 20680 */ 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3002507, 2171019, 2171019, 2215936, 2215936,\n  /* 20691 */ 2494464, 2215936, 2215936, 2215936, 2171166, 2171166, 2416926, 2425118, 2171166, 2171166, 2171166,\n  /* 20702 */ 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166,\n  /* 20713 */ 2171166, 2171166, 2576670, 2171166, 2617630, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166,\n  /* 20724 */ 2691358, 2171166, 2707742, 2171166, 2715934, 2171166, 2724126, 2765086, 2171166, 2171166, 2797854,\n  /* 20735 */ 2171166, 2822430, 2171166, 2171166, 2855198, 2171166, 2171166, 2171166, 2912542, 2171166, 2171166,\n  /* 20746 */ 2171166, 2171166, 2171166, 2171166, 2171166, 2793758, 2806046, 2171166, 2830622, 2171166, 2171166,\n  /* 20757 */ 2171166, 2171166, 2171166, 2171166, 2171166, 3109150, 2171166, 2171166, 2171166, 2171166, 2171166,\n  /* 20768 */ 2171166, 2171166, 2171166, 2171166, 2543902, 2171166, 2171166, 2171166, 2171166, 2171166, 2629918,\n  /* 20779 */ 2793611, 2805899, 2171019, 2830475, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019,\n  /* 20790 */ 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 0, 546, 0, 0, 2183168, 0,\n  /* 20805 */ 0, 552, 0, 2171166, 2171166, 2171166, 2400542, 2171166, 2171166, 2171166, 0, 2171166, 2171166, 2171166, 0,\n  /* 20820 */ 2171166, 2920734, 2171166, 2171166, 2171166, 2990366, 2171166, 2171166, 2171166, 2171166, 3117342,\n  /* 20831 */ 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166,\n  /* 20842 */ 2171166, 0, 53264, 0, 18, 18, 4329472, 2232445, 0, 2240641, 4337664, 2711691, 2171019, 2171019, 2171019,\n  /* 20857 */ 2171019, 2171019, 2760843, 2769035, 2789515, 2814091, 2171019, 2171019, 2171019, 2875531, 2904203,\n  /* 20868 */ 2171019, 2171019, 3092619, 2171019, 2171019, 3125387, 2171019, 2171019, 2171019, 2171019, 2171019,\n  /* 20879 */ 2171019, 2171019, 2171019, 2171019, 3199115, 2171019, 2215936, 2215936, 2215936, 2215936, 2215936,\n  /* 20890 */ 2215936, 2215936, 2215936, 2215936, 2453504, 2457600, 2215936, 2215936, 2215936, 2215936, 2215936,\n  /* 20901 */ 2215936, 2793472, 2805760, 2215936, 2830336, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936,\n  /* 20912 */ 2170880, 2170880, 2170880, 2170880, 2170880, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880,\n  /* 20925 */ 2170880, 2170880, 2170880, 2494464, 2170880, 2170880, 2171166, 2171166, 2634014, 2171166, 2171166,\n  /* 20936 */ 2171166, 2171166, 2171166, 2171166, 2711838, 2171166, 2171166, 2171166, 2171166, 2171166, 2760990,\n  /* 20947 */ 2769182, 2789662, 2814238, 2171166, 2171166, 2171166, 2875678, 2904350, 2171166, 2171166, 2171166,\n  /* 20958 */ 2171166, 2171166, 2171166, 2171166, 2171166, 3199262, 2171166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2379915,\n  /* 20975 */ 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2445451, 2171019, 2465931, 2474123,\n  /* 20986 */ 2171019, 2171019, 3113099, 2171019, 2171019, 3133579, 2171019, 2171019, 2171019, 3162251, 2171019,\n  /* 20997 */ 2171019, 3182731, 3186827, 2171019, 2379776, 2879627, 2171019, 2916491, 2171019, 2171019, 2171019,\n  /* 21008 */ 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3027083, 2171019, 2171019, 3063947, 2699550,\n  /* 21019 */ 2171166, 2728222, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2879774, 2171166,\n  /* 21030 */ 2916638, 2171166, 2171166, 2171166, 2171166, 2171166, 2609438, 2171166, 2171166, 2171166, 2171166,\n  /* 21041 */ 2171166, 2171166, 2654494, 2171166, 2171166, 2171166, 2171166, 2171166, 2445598, 2171166, 2466078,\n  /* 21052 */ 2474270, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2523422, 2171019, 2437259, 2171019,\n  /* 21063 */ 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2543755,\n  /* 21074 */ 2171019, 2171019, 2171019, 2584715, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019,\n  /* 21085 */ 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2908299, 2171019,\n  /* 21096 */ 2171019, 2936971, 2171019, 2171019, 2986123, 2171019, 2994315, 2171019, 2171019, 3014795, 2171019,\n  /* 21107 */ 3059851, 3076235, 3088523, 2171166, 2171166, 2986270, 2171166, 2994462, 2171166, 2171166, 3014942,\n  /* 21118 */ 2171166, 3059998, 3076382, 3088670, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 3027230,\n  /* 21129 */ 2171166, 2171166, 3064094, 2171166, 2171166, 3113246, 2171166, 2171166, 3133726, 2506891, 2171019,\n  /* 21140 */ 2171019, 2171019, 2535563, 2539659, 2171019, 2171019, 2588811, 2171019, 2171019, 2171019, 2171019,\n  /* 21151 */ 2171019, 2171019, 2171019, 2691211, 2171019, 2707595, 2171019, 2715787, 2171019, 2723979, 2764939,\n  /* 21162 */ 2171019, 2171019, 2797707, 2215936, 2215936, 3170304, 0, 0, 0, 0, 0, 0, 2171166, 2171166, 2171166,\n  /* 21177 */ 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2453790, 2457886, 2171166, 2171166, 2171166,\n  /* 21188 */ 2486558, 2171166, 2171166, 2507038, 2171166, 2171166, 2171166, 2535710, 2539806, 2171166, 2171166,\n  /* 21199 */ 2588958, 2171166, 2171166, 2171166, 2171166, 2515230, 2171166, 2171166, 2171166, 2171166, 2171166,\n  /* 21210 */ 2171166, 2171166, 2171166, 2593054, 2171166, 2171166, 2171166, 2171166, 3051806, 2171166, 2171166,\n  /* 21221 */ 2171166, 2171166, 2171166, 2171166, 3170590, 0, 2388107, 2392203, 2171019, 2171019, 2433163, 2171019,\n  /* 21233 */ 2461835, 2171019, 2171019, 2171019, 2510987, 2171019, 2171019, 2171019, 2171019, 2580619, 2171019,\n  /* 21244 */ 2605195, 2637963, 2171019, 2171019, 2171019, 2920587, 2171019, 2171019, 2171019, 2990219, 2171019,\n  /* 21255 */ 2171019, 2171019, 2171019, 3051659, 2171019, 2171019, 2171019, 2453643, 2457739, 2171019, 2171019,\n  /* 21266 */ 2171019, 2171019, 2171019, 2171019, 2515083, 2171019, 2171019, 2171019, 2171019, 2646155, 2670731,\n  /* 21277 */ 2752651, 2756747, 2846859, 2961547, 2171019, 2998411, 2171019, 3010699, 2171019, 2171019, 2687115,\n  /* 21288 */ 2748555, 2171019, 2171019, 2171019, 2924683, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019,\n  /* 21299 */ 2171019, 3121291, 2171019, 2171019, 2171019, 3170443, 2215936, 2215936, 2215936, 2215936, 2215936,\n  /* 21310 */ 2215936, 2215936, 2215936, 2486272, 2215936, 2215936, 2506752, 3145867, 3158155, 3166347, 2387968,\n  /* 21321 */ 2392064, 2215936, 2215936, 2433024, 2215936, 2461696, 2215936, 2215936, 2215936, 2510848, 2215936,\n  /* 21332 */ 2215936, 0, 0, 0, 0, 0, 0, 2179072, 0, 0, 0, 0, 0, 553, 2170880, 2215936, 2215936, 2215936, 2215936,\n  /* 21351 */ 2215936, 3121152, 2215936, 2215936, 3145728, 3158016, 3166208, 2388254, 2392350, 2171166, 2171166,\n  /* 21362 */ 2433310, 2171166, 2461982, 2171166, 2171166, 2171166, 2511134, 2171166, 2171166, 0, 2171166, 2171166,\n  /* 21374 */ 2580766, 2171166, 2605342, 2638110, 2171166, 2171166, 2171166, 2171166, 3031326, 2171166, 3055902,\n  /* 21385 */ 2171166, 2171166, 2171166, 2171166, 3092766, 2171166, 2171166, 3125534, 2171166, 2171166, 2171166,\n  /* 21396 */ 3162398, 2171166, 2171166, 3182878, 3186974, 2171166, 0, 0, 0, 2171019, 2171019, 2171019, 2171019,\n  /* 21409 */ 3109003, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019,\n  /* 21420 */ 2215936, 2215936, 2215936, 2400256, 2215936, 2215936, 2215936, 2215936, 2171166, 2687262, 0, 0, 2748702,\n  /* 21433 */ 2171166, 2171166, 0, 2171166, 2924830, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166,\n  /* 21445 */ 2597150, 2171166, 2621726, 2171166, 2171166, 2642206, 2171166, 2171166, 2171166, 2171166, 3121438,\n  /* 21456 */ 2171166, 2171166, 3146014, 3158302, 3166494, 2171019, 2420875, 2429067, 2171019, 2478219, 2171019,\n  /* 21467 */ 2171019, 2171019, 2171019, 2547851, 2556043, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019,\n  /* 21478 */ 2171019, 2171019, 2171019, 3129483, 2215936, 2171019, 3141771, 2215936, 2420736, 2428928, 2215936,\n  /* 21489 */ 2478080, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2646016, 2670592,\n  /* 21500 */ 2752512, 2756608, 2846720, 2961408, 2215936, 2998272, 2215936, 3010560, 2215936, 2215936, 2215936,\n  /* 21511 */ 3141632, 2171166, 2421022, 2429214, 2171166, 2478366, 2171166, 2171166, 2171166, 2171166, 0, 0, 2171166,\n  /* 21524 */ 2171166, 2171166, 2171166, 2646302, 2670878, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 0, 45, 45,\n  /* 21543 */ 45, 45, 45, 1405, 1406, 45, 45, 45, 45, 1409, 45, 45, 45, 45, 45, 1415, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 21567 */ 45, 45, 1238, 45, 45, 45, 45, 67, 2752798, 2756894, 0, 2847006, 2961694, 2171166, 2998558, 2171166,\n  /* 21583 */ 3010846, 2171166, 2171166, 2171166, 3141918, 2171019, 2171019, 2490507, 3129344, 2171166, 2171166,\n  /* 21594 */ 2490654, 2171166, 2171166, 2171166, 0, 0, 2547998, 2556190, 2171166, 2171166, 2171166, 0, 0, 0, 0, 37,\n  /* 21610 */ 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45, 45, 167, 45, 45, 45, 45, 185, 187, 45, 45, 198, 45,\n  /* 21632 */ 45, 0, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 3129630, 2171019, 2171019, 2171019, 2171019,\n  /* 21645 */ 2171019, 2171019, 2171019, 2171019, 2576523, 2171019, 2171019, 2171019, 2171019, 2171019, 2609291,\n  /* 21656 */ 2171019, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3002368, 2215936, 2215936, 2171166,\n  /* 21667 */ 2171166, 2494750, 2171166, 2171166, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45,\n  /* 21686 */ 147, 2584576, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2171166, 2171166, 2171166,\n  /* 21698 */ 2171166, 0, 0, 0, 2171166, 2171166, 2171166, 2171166, 0, 0, 0, 2171166, 2171166, 2171166, 3002654,\n  /* 21713 */ 2171166, 2171166, 2171019, 2171019, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936,\n  /* 21724 */ 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2175257, 0, 0, 2584862,\n  /* 21741 */ 2171166, 2171166, 0, 0, 2171166, 2171166, 2171166, 2171166, 2171166, 2171019, 2441355, 2171019, 2527371,\n  /* 21754 */ 2171019, 2601099, 2171019, 2850955, 2171019, 2171019, 2171019, 3022987, 2215936, 2441216, 2215936,\n  /* 21765 */ 2527232, 2215936, 2600960, 2215936, 2850816, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2179072, 0, 0, 0, 0,\n  /* 21783 */ 69632, 287, 2170880, 2215936, 3022848, 2171166, 2441502, 2171166, 2527518, 0, 0, 2171166, 2601246,\n  /* 21796 */ 2171166, 0, 2851102, 2171166, 2171166, 2171166, 2171166, 2720030, 2744606, 2171166, 2171166, 2171166,\n  /* 21808 */ 2834718, 2838814, 2171166, 2908446, 2171166, 2171166, 2937118, 3023134, 2171019, 2519179, 2171019,\n  /* 21819 */ 2171019, 2171019, 2171019, 2171019, 2215936, 2519040, 2215936, 2215936, 2215936, 2215936, 2215936,\n  /* 21830 */ 2171166, 2171166, 2171166, 3215646, 0, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019,\n  /* 21842 */ 2171019, 2486411, 2171019, 2171019, 2171019, 2629771, 2171019, 2171019, 2171019, 2171019, 2719883,\n  /* 21853 */ 2744459, 2171019, 2171019, 2171019, 2834571, 2838667, 2171019, 2519326, 0, 0, 2171166, 2171166, 0,\n  /* 21866 */ 2171166, 2171166, 2171166, 2396299, 2171019, 2171019, 2171019, 2171019, 3018891, 2396160, 2215936,\n  /* 21877 */ 2215936, 2215936, 2215936, 3018752, 2396446, 0, 0, 2171166, 2171166, 2171166, 2171166, 3019038, 2171019,\n  /* 21890 */ 2650251, 2965643, 2171019, 2215936, 2650112, 2965504, 2215936, 0, 0, 2171166, 2650398, 2965790, 2171166,\n  /* 21903 */ 2551947, 2171019, 2551808, 2215936, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 144,\n  /* 21922 */ 45, 45, 67, 67, 67, 67, 67, 228, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1929, 97, 97, 97, 97, 0, 0, 0,\n  /* 21947 */ 2552094, 2171166, 2171019, 2215936, 0, 2171166, 2171019, 2215936, 0, 2171166, 2171019, 2215936, 0,\n  /* 21960 */ 2171166, 2977931, 2977792, 2978078, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 1321, 97, 131072, 0, 0,\n  /* 21984 */ 0, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 0, 18, 18, 24, 24, 0,\n  /* 22005 */ 28, 28, 0, 140, 0, 2379776, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2445312,\n  /* 22019 */ 2170880, 2465792, 2473984, 2170880, 2170880, 2170880, 2584576, 2170880, 2170880, 2170880, 2170880,\n  /* 22030 */ 2170880, 2170880, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936,\n  /* 22041 */ 2215936, 2170880, 2170880, 2170880, 3162112, 2170880, 2170880, 3182592, 3186688, 2170880, 0, 140, 0,\n  /* 22054 */ 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3002368, 2170880, 2170880, 2215936,\n  /* 22065 */ 2215936, 2494464, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3215360, 544, 0, 0, 0, 544, 0,\n  /* 22080 */ 546, 0, 0, 0, 546, 0, 0, 2183168, 0, 0, 552, 0, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880,\n  /* 22098 */ 2170880, 0, 2170880, 2170880, 2170880, 0, 2170880, 2920448, 2170880, 2170880, 2170880, 2990080, 2170880,\n  /* 22111 */ 2170880, 552, 0, 0, 0, 552, 0, 287, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2437120, 2170880,\n  /* 22127 */ 2170880, 18, 0, 0, 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 644, 0, 2215936, 2215936, 3170304, 544, 0, 546, 0,\n  /* 22149 */ 552, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3198976, 2170880, 0, 0, 0,\n  /* 22164 */ 140, 0, 0, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 249856, 110630, 114730, 106539, 0, 0, 32768,\n  /* 22182 */ 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 151640, 53264, 18, 18,\n  /* 22200 */ 49172, 0, 57366, 0, 24, 24, 24, 0, 28, 28, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2170880, 2170880,\n  /* 22225 */ 2170880, 2416640, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 253952, 110630, 114730, 106539, 0, 0,\n  /* 22241 */ 32856, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 192512, 53264, 18,\n  /* 22259 */ 18, 49172, 0, 57366, 0, 2232445, 184320, 2232445, 0, 2240641, 2240641, 184320, 2240641, 102432, 0, 0, 0,\n  /* 22276 */ 221184, 2220032, 110630, 0, 0, 0, 114730, 106539, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880,\n  /* 22291 */ 2170880, 3108864, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880,\n  /* 22302 */ 2170880, 2215936, 0, 0, 0, 45056, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880,\n  /* 22320 */ 0, 53264, 0, 18, 18, 24, 24, 0, 127, 127, 53264, 18, 49172, 258071, 24, 8192, 28, 102432, 0, 110630,\n  /* 22340 */ 114730, 106539, 0, 0, 32768, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0,\n  /* 22358 */ 0, 204800, 53264, 18, 49172, 57366, 24, 27, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 0, 53264, 18,\n  /* 22377 */ 49172, 57366, 24, 8192, 28, 33, 0, 33, 33, 33, 0, 0, 0, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24,\n  /* 22400 */ 16384, 28, 28, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 2170880, 2170880, 2170880, 2416640, 67, 67,\n  /* 22422 */ 37139, 37139, 24853, 24853, 0, 70179, 0, 0, 0, 65820, 65820, 369, 287, 97, 0, 0, 97, 97, 0, 97, 97, 97,\n  /* 22444 */ 45, 2030, 45, 45, 45, 45, 67, 1573, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1699, 67, 67, 67, 67,\n  /* 22468 */ 25403, 546, 70179, 0, 0, 66365, 66365, 552, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1355, 97, 97, 97, 1358, 97,\n  /* 22491 */ 97, 97, 641, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 1187, 45, 45, 45, 45, 45, 0,\n  /* 22517 */ 1480, 0, 0, 0, 0, 1319, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 592, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 22543 */ 97, 1531, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1680, 45, 45, 45, 641, 0, 924, 0, 925, 41606, 0,\n  /* 22568 */ 0, 0, 0, 45, 45, 45, 45, 45, 45, 1186, 45, 45, 45, 45, 45, 45, 67, 67, 37139, 37139, 24853, 24853, 0,\n  /* 22591 */ 70179, 282, 0, 0, 65820, 65820, 369, 287, 97, 0, 0, 97, 97, 0, 97, 2028, 97, 45, 45, 45, 45, 45, 45, 67,\n  /* 22615 */ 67, 67, 67, 67, 67, 67, 67, 67, 67, 1767, 67, 67, 67, 0, 0, 0, 0, 0, 0, 1612, 97, 97, 97, 97, 97, 97, 0,\n  /* 22642 */ 1785, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 1790, 97, 0, 0, 2170880, 2170880, 3051520, 2170880,\n  /* 22663 */ 2170880, 2170880, 2170880, 2170880, 2170880, 3170304, 241664, 2387968, 2392064, 2170880, 2170880, 2433024,\n  /* 22675 */ 53264, 19, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 274432, 53264, 18, 49172,\n  /* 22693 */ 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 270336, 53264, 18, 49172, 57366, 24, 8192,\n  /* 22711 */ 28, 102432, 0, 110630, 114730, 106539, 0, 0, 1134711, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0,\n  /* 22729 */ 1126440, 1126440, 1126440, 0, 0, 1126400, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 36, 110630,\n  /* 22745 */ 114730, 106539, 0, 0, 217088, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0,\n  /* 22763 */ 0, 94, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 96, 53264, 18,\n  /* 22782 */ 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 24666, 53264, 18, 18, 49172, 0,\n  /* 22800 */ 57366, 0, 24, 24, 24, 126, 28, 28, 28, 28, 102432, 53264, 122, 123, 49172, 0, 57366, 0, 24, 24, 24, 0, 28,\n  /* 22823 */ 28, 28, 28, 102432, 2170880, 2170880, 4256099, 0, 0, 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 22847 */ 1319, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1109, 97, 97, 97, 97, 1113, 132, 0, 0, 0, 37, 110630, 0, 0,\n  /* 22873 */ 0, 114730, 106539, 41098, 45, 45, 45, 146, 150, 45, 45, 45, 45, 45, 175, 45, 180, 45, 186, 45, 189, 45,\n  /* 22895 */ 45, 203, 67, 256, 67, 67, 270, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 97, 293, 297,\n  /* 22918 */ 97, 97, 97, 97, 97, 322, 97, 327, 97, 333, 97, 0, 0, 97, 2026, 0, 2027, 97, 97, 45, 45, 45, 45, 45, 45,\n  /* 22943 */ 67, 67, 67, 1685, 67, 67, 67, 67, 67, 67, 67, 1690, 67, 336, 97, 97, 350, 97, 97, 0, 53264, 0, 18, 18, 24,\n  /* 22968 */ 24, 356, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 2170880, 2170880, 2170880, 2416640, 2424832, 2170880,\n  /* 22989 */ 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880,\n  /* 23000 */ 2170880, 2617344, 2170880, 45, 439, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67,\n  /* 23022 */ 67, 67, 67, 67, 67, 67, 525, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 23051 */ 0, 97, 97, 97, 97, 622, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1524, 97, 97, 1527, 369, 648, 45,\n  /* 23076 */ 45, 45, 45, 45, 45, 45, 45, 45, 659, 45, 45, 45, 45, 408, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 23101 */ 1239, 45, 45, 45, 67, 729, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 23127 */ 67, 67, 67, 762, 67, 746, 67, 67, 67, 67, 67, 67, 67, 67, 67, 759, 67, 67, 67, 67, 0, 0, 0, 1477, 0, 1086,\n  /* 23153 */ 0, 0, 0, 1479, 0, 1090, 67, 67, 796, 67, 67, 799, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1291,\n  /* 23178 */ 67, 67, 67, 811, 67, 67, 67, 67, 67, 816, 67, 67, 67, 67, 67, 67, 67, 37689, 544, 25403, 546, 70179, 0, 0,\n  /* 23202 */ 66365, 66365, 552, 833, 97, 97, 97, 97, 97, 97, 97, 97, 1380, 0, 0, 0, 45, 45, 45, 45, 45, 1185, 45, 45,\n  /* 23226 */ 45, 45, 45, 45, 45, 386, 45, 45, 45, 45, 45, 45, 45, 45, 1810, 45, 45, 45, 45, 45, 45, 67, 97, 97, 844,\n  /* 23251 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 857, 97, 97, 97, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 23278 */ 97, 45, 45, 45, 97, 97, 97, 894, 97, 97, 897, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 1382, 45, 45,\n  /* 23304 */ 45, 97, 909, 97, 97, 97, 97, 97, 914, 97, 97, 97, 97, 97, 97, 97, 923, 67, 67, 1079, 67, 67, 67, 67, 67,\n  /* 23329 */ 37689, 1085, 25403, 1089, 66365, 1093, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45,\n  /* 23350 */ 148, 1114, 97, 97, 97, 97, 97, 97, 1122, 97, 97, 97, 97, 97, 97, 97, 97, 97, 606, 97, 97, 97, 97, 97, 97,\n  /* 23375 */ 97, 97, 97, 97, 1173, 97, 97, 97, 97, 97, 12288, 0, 925, 0, 1179, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730,\n  /* 23400 */ 106539, 41098, 45, 45, 145, 45, 45, 67, 67, 67, 67, 67, 1762, 67, 67, 67, 1766, 67, 67, 67, 67, 67, 67,\n  /* 23423 */ 528, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 1934, 67, 67, 1255, 67, 67, 67, 67, 67,\n  /* 23448 */ 67, 67, 67, 67, 67, 67, 67, 67, 1035, 67, 67, 67, 67, 67, 67, 1297, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0,\n  /* 23475 */ 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1111, 97, 97, 97, 97, 97, 97, 1327, 97, 97, 97, 97, 97, 97, 97,\n  /* 23501 */ 97, 97, 97, 97, 97, 33344, 97, 97, 97, 1335, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 23526 */ 97, 0, 97, 97, 1377, 97, 97, 97, 97, 97, 97, 0, 1179, 0, 45, 45, 45, 45, 670, 45, 45, 45, 45, 45, 45, 45,\n  /* 23552 */ 45, 45, 45, 45, 430, 45, 45, 45, 45, 67, 67, 1438, 67, 67, 1442, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 23577 */ 67, 67, 1592, 67, 67, 67, 1451, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1458, 67, 67, 67, 67, 0, 0, 1305,\n  /* 23602 */ 0, 0, 0, 0, 0, 1311, 0, 0, 0, 1317, 0, 0, 0, 0, 0, 0, 0, 97, 97, 1322, 97, 97, 1491, 97, 97, 1495, 97, 97,\n  /* 23630 */ 97, 97, 97, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1551, 45, 1553, 45,\n  /* 23655 */ 1504, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1513, 97, 97, 97, 97, 0, 45, 45, 45, 45, 1536, 45, 45, 45,\n  /* 23680 */ 45, 1540, 45, 67, 67, 67, 67, 67, 1585, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1700, 67, 67, 67,\n  /* 23705 */ 97, 1648, 97, 97, 97, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1541, 0, 97, 97, 97,\n  /* 23731 */ 97, 0, 1940, 0, 97, 97, 97, 97, 97, 97, 45, 45, 2011, 45, 45, 45, 2015, 67, 67, 2017, 67, 67, 67, 2021,\n  /* 23755 */ 97, 67, 67, 812, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 544, 97, 97, 97, 910, 97, 97, 97, 97,\n  /* 23780 */ 97, 97, 97, 97, 97, 97, 97, 923, 0, 0, 0, 45, 45, 45, 45, 1184, 45, 45, 45, 45, 1188, 45, 45, 45, 45,\n  /* 23805 */ 1414, 45, 45, 45, 1417, 45, 1419, 45, 45, 45, 45, 45, 443, 45, 45, 45, 45, 45, 45, 453, 45, 45, 67, 67,\n  /* 23829 */ 67, 67, 1244, 67, 67, 67, 67, 1248, 67, 67, 67, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 282, 41098,\n  /* 23852 */ 65820, 97, 1324, 97, 97, 97, 97, 1328, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 930, 45, 45, 45, 45, 97,\n  /* 23877 */ 97, 97, 97, 1378, 97, 97, 97, 97, 0, 1179, 0, 45, 45, 45, 45, 671, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 23903 */ 45, 975, 45, 45, 45, 45, 67, 67, 1923, 67, 1925, 67, 67, 1927, 67, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97,\n  /* 23928 */ 97, 1985, 45, 45, 45, 45, 45, 45, 1560, 45, 45, 45, 45, 45, 45, 45, 45, 45, 946, 45, 45, 950, 45, 45, 45,\n  /* 23953 */ 0, 97, 97, 97, 1939, 0, 0, 0, 97, 1943, 97, 97, 1945, 97, 45, 45, 45, 669, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 23979 */ 45, 45, 45, 45, 990, 45, 45, 45, 67, 257, 67, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820,\n  /* 24003 */ 337, 97, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 356, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 370,\n  /* 24030 */ 2170880, 2170880, 2170880, 2416640, 401, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 24051 */ 67, 67, 459, 461, 67, 67, 67, 67, 67, 67, 67, 67, 475, 67, 480, 67, 67, 67, 67, 67, 67, 1054, 67, 67, 67,\n  /* 24076 */ 67, 67, 67, 67, 67, 67, 67, 1698, 67, 67, 67, 67, 67, 484, 67, 67, 487, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 24101 */ 67, 67, 67, 67, 67, 1459, 67, 67, 97, 556, 558, 97, 97, 97, 97, 97, 97, 97, 97, 572, 97, 577, 97, 97, 0,\n  /* 24126 */ 0, 1896, 97, 97, 97, 97, 97, 97, 1903, 45, 45, 45, 45, 983, 45, 45, 45, 45, 988, 45, 45, 45, 45, 45, 45,\n  /* 24151 */ 1195, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1549, 45, 45, 45, 45, 45, 581, 97, 97, 584, 97, 97, 97, 97,\n  /* 24176 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 1153, 97, 97, 369, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 662,\n  /* 24202 */ 45, 45, 45, 684, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1004, 45, 45, 45, 67, 67, 67, 749, 67,\n  /* 24227 */ 67, 67, 67, 67, 67, 67, 67, 67, 761, 67, 67, 67, 67, 67, 67, 1068, 67, 67, 67, 1071, 67, 67, 67, 67, 1076,\n  /* 24252 */ 794, 795, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 544, 97, 97, 97, 97, 847, 97, 97, 97,\n  /* 24278 */ 97, 97, 97, 97, 97, 97, 859, 97, 0, 0, 2025, 97, 20480, 97, 97, 2029, 45, 45, 45, 45, 45, 45, 67, 67, 67,\n  /* 24303 */ 1575, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1775, 67, 67, 67, 97, 97, 97, 97, 892, 893, 97, 97, 97, 97, 97,\n  /* 24328 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 1515, 97, 993, 994, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 24353 */ 45, 45, 45, 992, 67, 67, 67, 1284, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1607, 67, 67, 97,\n  /* 24378 */ 1364, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 596, 97, 45, 1556, 1557, 45, 45, 45, 45, 45,\n  /* 24403 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 696, 45, 1596, 1597, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 24428 */ 67, 67, 499, 67, 97, 97, 97, 1621, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1346, 97, 97, 97,\n  /* 24453 */ 97, 1740, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1678, 45, 45, 45, 45, 45, 67, 97, 97,\n  /* 24478 */ 97, 97, 97, 97, 1836, 0, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 1984, 97, 45, 45, 45, 45, 45, 45, 1808, 45,\n  /* 24504 */ 45, 45, 45, 45, 45, 45, 45, 67, 739, 67, 67, 67, 67, 67, 744, 45, 45, 1909, 45, 45, 45, 45, 45, 45, 45,\n  /* 24529 */ 67, 1917, 67, 1918, 67, 67, 67, 67, 67, 67, 1247, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 532, 67, 67, 67,\n  /* 24554 */ 67, 67, 67, 1922, 67, 67, 67, 67, 67, 67, 67, 97, 1930, 97, 1931, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 45,\n  /* 24580 */ 45, 45, 45, 45, 67, 67, 67, 67, 1576, 67, 67, 67, 67, 1580, 67, 67, 0, 97, 97, 1938, 97, 0, 0, 0, 97, 97,\n  /* 24606 */ 97, 97, 97, 97, 45, 45, 45, 699, 45, 45, 45, 704, 45, 45, 45, 45, 45, 45, 45, 45, 987, 45, 45, 45, 45, 45,\n  /* 24632 */ 45, 45, 67, 67, 97, 97, 97, 97, 0, 0, 97, 97, 97, 2006, 97, 97, 97, 97, 0, 45, 1533, 45, 45, 45, 45, 45,\n  /* 24658 */ 45, 45, 45, 45, 1416, 45, 45, 45, 45, 45, 45, 45, 45, 722, 723, 45, 45, 45, 45, 45, 45, 2045, 67, 67, 67,\n  /* 24683 */ 2047, 0, 0, 97, 97, 97, 2051, 45, 45, 67, 67, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45,\n  /* 24710 */ 409, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1957, 45, 67, 67, 67, 67, 67, 1836, 97, 97, 45, 67, 0, 97, 45,\n  /* 24735 */ 67, 0, 97, 45, 67, 0, 97, 45, 45, 67, 67, 67, 1761, 67, 67, 67, 1764, 67, 67, 67, 67, 67, 67, 67, 494, 67,\n  /* 24761 */ 67, 67, 67, 67, 67, 67, 67, 67, 787, 67, 67, 67, 67, 67, 67, 45, 45, 420, 45, 45, 422, 45, 45, 425, 45,\n  /* 24786 */ 45, 45, 45, 45, 45, 45, 387, 45, 45, 45, 45, 397, 45, 45, 45, 67, 460, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 24812 */ 67, 67, 67, 67, 67, 515, 67, 485, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 498, 67, 67, 67, 67,\n  /* 24838 */ 67, 97, 0, 2039, 97, 97, 97, 97, 97, 45, 45, 45, 45, 1426, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 24864 */ 1689, 67, 67, 67, 97, 557, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 612, 97, 582, 97, 97,\n  /* 24889 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 595, 97, 97, 97, 97, 97, 896, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 24915 */ 97, 97, 885, 97, 97, 97, 97, 97, 45, 939, 45, 45, 45, 45, 943, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 24940 */ 1916, 67, 67, 67, 67, 67, 45, 67, 67, 67, 67, 67, 67, 67, 1015, 67, 67, 67, 67, 1019, 67, 67, 67, 67, 67,\n  /* 24965 */ 67, 1271, 67, 67, 67, 67, 67, 67, 1277, 67, 67, 67, 67, 67, 67, 1287, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 24990 */ 67, 804, 67, 67, 67, 67, 67, 1077, 67, 67, 67, 67, 67, 67, 67, 37689, 0, 25403, 0, 66365, 0, 0, 0, 0, 0,\n  /* 25015 */ 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2437120, 2170880, 2170880, 2170880, 2170880,\n  /* 25028 */ 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2543616, 2170880, 2170880, 2170880,\n  /* 25039 */ 2170880, 2170880, 2629632, 1169, 97, 1171, 97, 97, 97, 97, 97, 97, 97, 12288, 0, 925, 0, 1179, 0, 0, 0, 0,\n  /* 25061 */ 925, 41606, 0, 0, 0, 0, 45, 45, 45, 45, 936, 45, 45, 67, 67, 214, 67, 220, 67, 67, 233, 67, 243, 67, 248,\n  /* 25086 */ 67, 67, 67, 67, 67, 67, 1298, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 1617, 97, 0, 0, 0, 45,\n  /* 25114 */ 45, 45, 1183, 45, 45, 45, 45, 45, 45, 45, 45, 45, 393, 45, 45, 45, 45, 45, 45, 67, 67, 1243, 67, 67, 67,\n  /* 25139 */ 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1074, 67, 67, 1281, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 25164 */ 67, 67, 67, 67, 776, 1323, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 907, 45, 1412, 45,\n  /* 25189 */ 45, 45, 45, 45, 45, 45, 1418, 45, 45, 45, 45, 45, 45, 686, 45, 45, 45, 690, 45, 45, 695, 45, 45, 67, 67,\n  /* 25214 */ 67, 67, 67, 1465, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 1712, 97, 97, 97, 97, 1741, 97,\n  /* 25239 */ 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 426, 45, 45, 45, 45, 45, 45, 67, 67, 67, 1924, 67, 67, 67, 67,\n  /* 25265 */ 67, 97, 97, 97, 97, 97, 0, 0, 97, 97, 1983, 97, 97, 45, 45, 1987, 45, 1988, 45, 0, 97, 97, 97, 97, 0, 0,\n  /* 25291 */ 0, 1942, 97, 97, 97, 97, 97, 45, 45, 45, 700, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 711, 45, 45, 153,\n  /* 25316 */ 45, 45, 166, 45, 176, 45, 181, 45, 45, 188, 191, 196, 45, 204, 255, 258, 263, 67, 271, 67, 67, 0, 37139,\n  /* 25339 */ 24853, 0, 0, 0, 282, 41098, 65820, 97, 97, 97, 294, 97, 300, 97, 97, 313, 97, 323, 97, 328, 97, 97, 335,\n  /* 25362 */ 338, 343, 97, 351, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 356, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 41098, 0,\n  /* 25388 */ 140, 45, 45, 45, 45, 1404, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1411, 67, 67, 486, 67, 67, 67, 67, 67,\n  /* 25413 */ 67, 67, 67, 67, 67, 67, 67, 67, 1251, 67, 67, 501, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 513,\n  /* 25438 */ 67, 67, 67, 67, 67, 67, 1443, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1263, 67, 67, 67, 67, 67, 97, 97,\n  /* 25463 */ 583, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1526, 97, 598, 97, 97, 97, 97, 97, 97, 97,\n  /* 25488 */ 97, 97, 97, 97, 97, 610, 97, 97, 0, 97, 97, 1796, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 1744,\n  /* 25513 */ 45, 45, 45, 369, 0, 651, 45, 653, 45, 654, 45, 656, 45, 45, 45, 660, 45, 45, 45, 45, 1558, 45, 45, 45, 45,\n  /* 25538 */ 45, 45, 45, 45, 1566, 45, 45, 681, 45, 683, 45, 45, 45, 45, 45, 45, 45, 45, 691, 692, 694, 45, 45, 45,\n  /* 25562 */ 716, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 709, 45, 45, 712, 45, 714, 45, 45, 45, 718, 45, 45,\n  /* 25587 */ 45, 45, 45, 45, 45, 726, 45, 45, 45, 733, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 25613 */ 1691, 67, 67, 747, 67, 67, 67, 67, 67, 67, 67, 67, 67, 760, 67, 67, 67, 0, 0, 0, 0, 0, 0, 97, 1613, 97,\n  /* 25639 */ 97, 97, 97, 97, 97, 1509, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 1179, 0, 45, 45, 45, 45, 67, 764, 67, 67,\n  /* 25665 */ 67, 67, 768, 67, 770, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 0, 1977, 67, 778, 779, 781,\n  /* 25690 */ 67, 67, 67, 67, 67, 67, 788, 789, 67, 67, 792, 793, 67, 67, 67, 813, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 25715 */ 824, 37689, 544, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 0, 836, 97, 838, 97, 839, 97, 841, 97, 97,\n  /* 25736 */ 97, 845, 97, 97, 97, 97, 97, 97, 97, 97, 97, 858, 97, 97, 0, 1728, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97,\n  /* 25762 */ 97, 97, 97, 97, 45, 1802, 45, 97, 97, 862, 97, 97, 97, 97, 866, 97, 868, 97, 97, 97, 97, 97, 97, 0, 0, 97,\n  /* 25788 */ 97, 1788, 97, 97, 97, 0, 0, 97, 97, 876, 877, 879, 97, 97, 97, 97, 97, 97, 886, 887, 97, 97, 890, 891, 97,\n  /* 25813 */ 97, 97, 97, 97, 97, 97, 899, 97, 97, 97, 903, 97, 97, 97, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97,\n  /* 25839 */ 1646, 97, 97, 97, 97, 911, 97, 97, 97, 97, 97, 97, 97, 97, 97, 922, 923, 45, 955, 45, 957, 45, 45, 45, 45,\n  /* 25864 */ 45, 45, 45, 45, 45, 45, 45, 45, 195, 45, 45, 45, 45, 45, 981, 982, 45, 45, 45, 45, 45, 45, 989, 45, 45,\n  /* 25889 */ 45, 45, 45, 170, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 411, 45, 45, 45, 45, 45, 67, 1023, 67, 67, 67,\n  /* 25914 */ 67, 67, 67, 1031, 67, 1033, 67, 67, 67, 67, 67, 67, 67, 817, 819, 67, 67, 67, 67, 67, 37689, 544, 67,\n  /* 25937 */ 1065, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 516, 67, 67, 1078, 67, 67, 1081, 1082, 67,\n  /* 25961 */ 67, 37689, 0, 25403, 0, 66365, 0, 0, 0, 0, 0, 0, 0, 0, 2171166, 2171166, 2171166, 2171166, 2171166,\n  /* 25980 */ 2437406, 2171166, 2171166, 97, 1115, 97, 1117, 97, 97, 97, 97, 97, 97, 1125, 97, 1127, 97, 97, 97, 0, 97,\n  /* 26001 */ 97, 97, 0, 97, 97, 97, 97, 1644, 97, 97, 97, 0, 97, 97, 97, 0, 97, 97, 1642, 97, 97, 97, 97, 97, 97, 625,\n  /* 26027 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 316, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1159, 97, 97, 97, 97, 97, 97,\n  /* 26053 */ 97, 97, 97, 97, 97, 97, 97, 1502, 97, 97, 97, 97, 97, 1172, 97, 97, 1175, 1176, 97, 97, 12288, 0, 925, 0,\n  /* 26077 */ 1179, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 45, 45, 935, 45, 45, 45, 1233, 45, 45, 45, 1236, 45, 45, 45,\n  /* 26103 */ 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1873, 67, 67, 45, 45, 1218, 45, 45, 45, 1223, 45, 45, 45, 45, 45,\n  /* 26128 */ 45, 45, 1230, 45, 45, 67, 67, 215, 219, 222, 67, 230, 67, 67, 244, 246, 249, 67, 67, 67, 67, 67, 67, 1882,\n  /* 26152 */ 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 1904, 45, 1905, 45, 67, 67, 67, 67, 67, 1258, 67,\n  /* 26177 */ 1260, 67, 67, 67, 67, 67, 67, 67, 67, 67, 495, 67, 67, 67, 67, 67, 67, 67, 67, 1283, 67, 67, 67, 67, 67,\n  /* 26202 */ 67, 67, 1290, 67, 67, 67, 67, 67, 67, 67, 818, 67, 67, 67, 67, 67, 67, 37689, 544, 67, 67, 1295, 67, 67,\n  /* 26226 */ 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 2174976, 0, 0, 97, 97, 97, 1326, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 26253 */ 97, 97, 97, 97, 97, 1514, 97, 97, 97, 97, 97, 1338, 97, 1340, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 26278 */ 1500, 97, 97, 1503, 97, 1363, 97, 97, 97, 97, 97, 97, 97, 1370, 97, 97, 97, 97, 97, 97, 97, 563, 97, 97,\n  /* 26302 */ 97, 97, 97, 97, 578, 97, 1375, 97, 97, 97, 97, 97, 97, 97, 97, 0, 1179, 0, 45, 45, 45, 45, 685, 45, 45,\n  /* 26327 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 1003, 45, 45, 45, 45, 67, 67, 67, 1463, 67, 67, 67, 67, 67, 67, 67,\n  /* 26352 */ 67, 67, 67, 67, 67, 67, 1778, 97, 97, 97, 97, 97, 1518, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 26377 */ 609, 97, 97, 97, 45, 1542, 45, 45, 45, 45, 45, 45, 45, 1548, 45, 45, 45, 45, 45, 1554, 45, 1570, 1571, 45,\n  /* 26401 */ 67, 67, 67, 67, 67, 67, 1578, 67, 67, 67, 67, 67, 67, 67, 1055, 67, 67, 67, 67, 67, 1061, 67, 67, 1582,\n  /* 26425 */ 67, 67, 67, 67, 67, 67, 67, 1588, 67, 67, 67, 67, 67, 1594, 67, 67, 67, 67, 67, 97, 2038, 0, 97, 97, 97,\n  /* 26450 */ 97, 97, 2044, 45, 45, 45, 995, 45, 45, 45, 45, 1000, 45, 45, 45, 45, 45, 45, 45, 1809, 45, 1811, 45, 45,\n  /* 26474 */ 45, 45, 45, 67, 1610, 1611, 67, 1476, 0, 1478, 0, 1480, 0, 97, 97, 97, 97, 97, 97, 1618, 1647, 1649, 97,\n  /* 26497 */ 97, 97, 1652, 97, 1654, 1655, 97, 0, 45, 45, 45, 1658, 45, 45, 67, 67, 216, 67, 67, 67, 67, 234, 67, 67,\n  /* 26521 */ 67, 67, 252, 254, 1845, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 945, 45, 947, 45, 45,\n  /* 26546 */ 45, 45, 45, 67, 67, 67, 67, 67, 1881, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 1902, 45, 45, 45,\n  /* 26572 */ 45, 45, 45, 1908, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1921, 67, 67,\n  /* 26597 */ 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 0, 97, 1937, 97, 97, 1940, 0, 0, 97, 97, 97,\n  /* 26624 */ 97, 97, 97, 1947, 1948, 1949, 45, 45, 45, 1952, 45, 1954, 45, 45, 45, 45, 1959, 1960, 1961, 67, 67, 67,\n  /* 26646 */ 67, 67, 67, 1455, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 757, 67, 67, 67, 67, 67, 67, 1964, 67, 1966, 67,\n  /* 26671 */ 67, 67, 67, 1971, 1972, 1973, 97, 0, 0, 0, 97, 97, 1104, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 884, 97,\n  /* 26696 */ 97, 97, 889, 97, 97, 1978, 97, 0, 0, 1981, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 736, 45, 67, 67, 67,\n  /* 26721 */ 67, 67, 67, 67, 67, 67, 67, 67, 1018, 67, 67, 67, 45, 67, 67, 67, 67, 0, 2049, 97, 97, 97, 97, 45, 45, 67,\n  /* 26747 */ 67, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 933, 45, 45, 45, 45, 1234, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 26774 */ 45, 67, 97, 97, 288, 97, 97, 97, 97, 97, 97, 317, 97, 97, 97, 97, 97, 97, 0, 0, 97, 1787, 97, 97, 97, 97,\n  /* 26800 */ 0, 0, 45, 45, 378, 45, 45, 45, 45, 45, 390, 45, 45, 45, 45, 45, 45, 45, 424, 45, 45, 45, 431, 433, 45, 45,\n  /* 26826 */ 45, 67, 1050, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 518, 67, 97, 97, 97, 1144, 97, 97,\n  /* 26851 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 632, 97, 97, 97, 97, 97, 97, 97, 1367, 97, 97, 97, 97, 97, 97, 97,\n  /* 26877 */ 97, 97, 97, 97, 855, 97, 97, 97, 97, 67, 97, 97, 97, 97, 97, 97, 1837, 0, 97, 97, 97, 97, 97, 0, 0, 0,\n  /* 26903 */ 1897, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 1208, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 724, 45, 45,\n  /* 26928 */ 45, 45, 45, 97, 2010, 45, 45, 45, 45, 45, 45, 2016, 67, 67, 67, 67, 67, 67, 2022, 45, 2046, 67, 67, 67, 0,\n  /* 26953 */ 0, 2050, 97, 97, 97, 45, 45, 67, 67, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 932, 45, 45, 45, 45, 45, 1222,\n  /* 26979 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1227, 45, 45, 45, 45, 45, 133, 0, 0, 0, 37, 110630, 0, 0, 0,\n  /* 27004 */ 114730, 106539, 41098, 45, 45, 45, 45, 701, 702, 45, 45, 705, 706, 45, 45, 45, 45, 45, 45, 703, 45, 45,\n  /* 27026 */ 45, 45, 45, 45, 45, 45, 45, 719, 45, 45, 45, 45, 45, 725, 45, 45, 45, 369, 649, 45, 45, 45, 45, 45, 45,\n  /* 27051 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 1216, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 834, 97, 97, 97, 97,\n  /* 27074 */ 97, 97, 97, 1342, 97, 97, 97, 97, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 1799, 97, 97, 45, 45, 45,\n  /* 27100 */ 1569, 45, 45, 45, 1572, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 1306, 0, 67, 67, 67, 1598,\n  /* 27125 */ 67, 67, 67, 67, 67, 67, 67, 67, 1606, 67, 67, 1609, 97, 97, 97, 1650, 97, 97, 1653, 97, 97, 97, 0, 45, 45,\n  /* 27150 */ 1657, 45, 45, 45, 1206, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1421, 45, 45, 45, 1703, 67, 67,\n  /* 27174 */ 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 1711, 97, 97, 0, 1895, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45,\n  /* 27200 */ 45, 958, 45, 960, 45, 45, 45, 45, 45, 45, 45, 45, 1913, 45, 45, 1915, 67, 67, 67, 67, 67, 67, 67, 466, 67,\n  /* 27225 */ 67, 67, 67, 67, 67, 481, 67, 45, 1749, 45, 45, 45, 45, 45, 45, 45, 45, 1755, 45, 45, 45, 45, 45, 173, 45,\n  /* 27250 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 974, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1773, 67, 67, 67, 67, 67,\n  /* 27276 */ 67, 67, 97, 97, 97, 97, 1886, 0, 0, 0, 97, 97, 67, 2035, 2036, 67, 67, 97, 0, 0, 97, 2041, 2042, 97, 97,\n  /* 27301 */ 45, 45, 45, 45, 1662, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1397, 45, 45, 45, 45, 151, 45, 45, 45,\n  /* 27326 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 437, 205, 45, 67, 67, 67, 218, 67, 67, 67, 67, 67, 67, 67,\n  /* 27352 */ 67, 67, 67, 67, 1047, 67, 67, 67, 67, 97, 97, 97, 97, 298, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 27377 */ 870, 97, 97, 97, 97, 97, 97, 97, 97, 352, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 0, 0, 0, 0, 0, 0,\n  /* 27404 */ 365, 0, 41098, 0, 140, 45, 45, 45, 45, 45, 1427, 45, 45, 67, 67, 67, 67, 67, 67, 67, 1435, 520, 67, 67,\n  /* 27428 */ 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1037, 617, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 27454 */ 97, 97, 97, 97, 923, 45, 1232, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1919,\n  /* 27479 */ 67, 1759, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1021, 45, 154, 45, 162, 45, 45, 45,\n  /* 27504 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 964, 45, 45, 45, 206, 45, 67, 67, 67, 67, 221, 67, 229, 67, 67, 67,\n  /* 27529 */ 67, 67, 67, 67, 67, 530, 67, 67, 67, 67, 67, 67, 67, 67, 755, 67, 67, 67, 67, 67, 67, 67, 67, 785, 67, 67,\n  /* 27555 */ 67, 67, 67, 67, 67, 67, 802, 67, 67, 67, 807, 67, 67, 67, 97, 97, 97, 97, 353, 97, 0, 53264, 0, 18, 18,\n  /* 27580 */ 24, 24, 0, 28, 28, 0, 0, 0, 0, 0, 0, 366, 0, 0, 0, 140, 2170880, 2170880, 2170880, 2416640, 402, 45, 45,\n  /* 27603 */ 45, 45, 45, 45, 45, 410, 45, 45, 45, 45, 45, 45, 45, 674, 45, 45, 45, 45, 45, 45, 45, 45, 389, 45, 394,\n  /* 27628 */ 45, 45, 398, 45, 45, 45, 45, 441, 45, 45, 45, 45, 45, 447, 45, 45, 45, 454, 45, 45, 67, 67, 67, 67, 67,\n  /* 27653 */ 67, 67, 67, 67, 67, 67, 1768, 67, 67, 67, 67, 67, 488, 67, 67, 67, 67, 67, 67, 67, 496, 67, 67, 67, 67,\n  /* 27678 */ 67, 67, 67, 1774, 67, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 27705 */ 67, 67, 523, 67, 67, 527, 67, 67, 67, 67, 67, 533, 67, 67, 67, 540, 97, 97, 97, 585, 97, 97, 97, 97, 97,\n  /* 27730 */ 97, 97, 593, 97, 97, 97, 97, 97, 97, 1784, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0,\n  /* 27757 */ 0, 18, 18, 24, 24, 0, 28, 28, 97, 97, 620, 97, 97, 624, 97, 97, 97, 97, 97, 630, 97, 97, 97, 637, 713, 45,\n  /* 27783 */ 45, 45, 45, 45, 45, 721, 45, 45, 45, 45, 45, 45, 45, 45, 1197, 45, 45, 45, 45, 45, 45, 45, 45, 730, 732,\n  /* 27808 */ 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1581, 67, 45, 67, 67, 67, 67, 1012, 67, 67,\n  /* 27833 */ 67, 67, 67, 67, 67, 67, 67, 67, 67, 1059, 67, 67, 67, 67, 67, 1024, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 27858 */ 67, 67, 67, 67, 67, 775, 67, 67, 67, 67, 1066, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 479, 67,\n  /* 27883 */ 67, 67, 67, 67, 67, 1080, 67, 67, 67, 67, 37689, 0, 25403, 0, 66365, 0, 0, 0, 0, 0, 0, 0, 287, 0, 0, 0,\n  /* 27909 */ 287, 0, 2379776, 2170880, 2170880, 97, 97, 97, 1118, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 920,\n  /* 27931 */ 97, 97, 0, 0, 0, 0, 45, 1181, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 432, 45, 45, 45, 45, 45, 45,\n  /* 27957 */ 1219, 45, 45, 45, 45, 45, 45, 1226, 45, 45, 45, 45, 45, 45, 959, 45, 45, 45, 45, 45, 45, 45, 45, 45, 184,\n  /* 27982 */ 45, 45, 45, 45, 202, 45, 1241, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1266, 67, 1268,\n  /* 28007 */ 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1279, 67, 67, 67, 67, 67, 272, 67, 0, 37139, 24853, 0, 0,\n  /* 28032 */ 0, 0, 41098, 65820, 67, 67, 67, 67, 67, 1286, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1293, 67, 67, 67, 1296,\n  /* 28056 */ 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 281, 94, 0, 0, 97, 97, 97, 1366, 97, 97, 97, 97, 97, 97, 97,\n  /* 28083 */ 97, 97, 1373, 97, 97, 18, 0, 139621, 0, 0, 0, 0, 0, 0, 364, 0, 0, 367, 0, 97, 1376, 97, 97, 97, 97, 97,\n  /* 28109 */ 97, 97, 0, 0, 0, 45, 45, 1384, 45, 45, 67, 208, 67, 67, 67, 67, 67, 67, 237, 67, 67, 67, 67, 67, 67, 67,\n  /* 28135 */ 1069, 1070, 67, 67, 67, 67, 67, 67, 67, 0, 37140, 24854, 0, 0, 0, 0, 41098, 65821, 45, 1423, 45, 45, 45,\n  /* 28158 */ 45, 45, 45, 67, 67, 1431, 67, 67, 67, 67, 67, 67, 67, 1083, 37689, 0, 25403, 0, 66365, 0, 0, 0, 1436, 67,\n  /* 28182 */ 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1830, 67, 1452, 1453, 67, 67, 67, 67, 1456, 67,\n  /* 28206 */ 67, 67, 67, 67, 67, 67, 67, 67, 771, 67, 67, 67, 67, 67, 67, 1461, 67, 67, 67, 1464, 67, 1466, 67, 67, 67,\n  /* 28231 */ 67, 67, 67, 1470, 67, 67, 67, 67, 67, 67, 1587, 67, 67, 67, 67, 67, 67, 67, 67, 1595, 1489, 97, 97, 97,\n  /* 28255 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1129, 97, 1505, 1506, 97, 97, 97, 97, 1510, 97, 97, 97,\n  /* 28279 */ 97, 97, 97, 97, 97, 97, 1163, 1164, 97, 97, 97, 97, 97, 1516, 97, 97, 97, 1519, 97, 1521, 97, 97, 97, 97,\n  /* 28303 */ 97, 97, 1525, 97, 97, 18, 0, 139621, 0, 0, 0, 0, 0, 0, 364, 0, 0, 367, 41606, 67, 67, 67, 67, 67, 1586,\n  /* 28328 */ 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1276, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1600, 67, 67, 67,\n  /* 28353 */ 67, 67, 67, 67, 67, 67, 67, 67, 1301, 0, 0, 0, 1307, 97, 97, 1620, 97, 97, 97, 97, 97, 97, 97, 1627, 97,\n  /* 28378 */ 97, 97, 97, 97, 97, 913, 97, 97, 97, 97, 919, 97, 97, 97, 0, 97, 97, 97, 1781, 97, 97, 0, 0, 97, 97, 97,\n  /* 28404 */ 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 1792, 1860, 45, 1862, 1863, 45, 1865, 45, 67, 67, 67, 67, 67,\n  /* 28429 */ 67, 67, 67, 1875, 67, 1877, 1878, 67, 1880, 67, 97, 97, 97, 97, 97, 1887, 0, 1889, 97, 97, 18, 0, 139621,\n  /* 28452 */ 0, 0, 0, 0, 0, 0, 364, 237568, 0, 367, 0, 97, 1893, 0, 0, 0, 97, 1898, 1899, 97, 1901, 97, 45, 45, 45, 45,\n  /* 28478 */ 45, 2014, 45, 67, 67, 67, 67, 67, 2020, 67, 97, 1989, 45, 1990, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1996,\n  /* 28502 */ 67, 1997, 67, 67, 67, 67, 67, 273, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 67, 67, 97, 97, 97, 97,\n  /* 28526 */ 0, 0, 97, 97, 2005, 0, 97, 2007, 97, 97, 18, 0, 139621, 0, 0, 0, 642, 0, 133, 364, 0, 0, 367, 41606, 0,\n  /* 28551 */ 97, 97, 2056, 2057, 0, 2059, 45, 67, 0, 97, 45, 67, 0, 97, 45, 45, 67, 209, 67, 67, 67, 223, 67, 67, 67,\n  /* 28576 */ 67, 67, 67, 67, 67, 67, 786, 67, 67, 67, 791, 67, 67, 45, 45, 940, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 28602 */ 45, 45, 45, 45, 727, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 1016, 67, 67, 67, 67, 67, 67, 67, 67, 37689,\n  /* 28627 */ 0, 25403, 0, 66365, 0, 0, 0, 133, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 142, 45,\n  /* 28650 */ 45, 67, 210, 67, 67, 67, 225, 67, 67, 239, 67, 67, 67, 250, 67, 67, 67, 67, 67, 464, 67, 67, 67, 67, 67,\n  /* 28675 */ 476, 67, 67, 67, 67, 67, 67, 67, 1709, 67, 67, 67, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 1843,\n  /* 28701 */ 0, 67, 259, 67, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 289, 97, 97, 97, 303,\n  /* 28725 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 901, 97, 97, 97, 97, 97, 339, 97, 97, 97, 97, 97, 0, 53264, 0, 18,\n  /* 28751 */ 18, 24, 24, 0, 28, 28, 0, 358, 0, 0, 0, 0, 0, 0, 41098, 0, 140, 45, 45, 45, 45, 45, 1953, 45, 1955, 45,\n  /* 28777 */ 45, 45, 67, 67, 67, 67, 67, 67, 67, 1687, 1688, 67, 67, 67, 67, 45, 45, 405, 45, 45, 45, 45, 45, 45, 45,\n  /* 28802 */ 45, 45, 45, 45, 45, 45, 45, 1203, 45, 458, 67, 67, 67, 67, 67, 67, 67, 67, 67, 470, 477, 67, 67, 67, 67,\n  /* 28827 */ 67, 67, 67, 1970, 97, 97, 97, 1974, 0, 0, 0, 97, 1103, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1372,\n  /* 28852 */ 97, 97, 97, 97, 67, 522, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 536, 67, 67, 67, 67, 67, 67, 1696,\n  /* 28877 */ 67, 67, 67, 67, 67, 67, 67, 1701, 67, 555, 97, 97, 97, 97, 97, 97, 97, 97, 97, 567, 574, 97, 97, 97, 97,\n  /* 28902 */ 97, 301, 97, 309, 97, 97, 97, 97, 97, 97, 97, 97, 97, 900, 97, 97, 97, 905, 97, 97, 97, 619, 97, 97, 97,\n  /* 28927 */ 97, 97, 97, 97, 97, 97, 97, 97, 633, 97, 97, 18, 0, 139621, 0, 0, 362, 0, 0, 0, 364, 0, 0, 367, 41606,\n  /* 28952 */ 369, 649, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 663, 664, 67, 67, 67, 67, 750, 751, 67, 67, 67,\n  /* 28977 */ 67, 758, 67, 67, 67, 67, 67, 67, 67, 1272, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1057, 1058, 67, 67, 67, 67,\n  /* 29002 */ 67, 67, 67, 67, 797, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 512, 67, 67, 67, 97, 97, 97, 97, 895,\n  /* 29028 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 902, 97, 97, 97, 97, 67, 67, 1051, 67, 67, 67, 67, 67, 67, 67,\n  /* 29054 */ 67, 67, 67, 67, 1062, 67, 67, 67, 67, 67, 491, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1302, 0, 0, 0,\n  /* 29080 */ 1308, 97, 97, 97, 97, 1145, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1139, 97, 97, 97, 97, 1156, 97,\n  /* 29104 */ 97, 97, 97, 97, 97, 1161, 97, 97, 97, 97, 97, 1166, 97, 97, 18, 640, 139621, 0, 641, 0, 0, 0, 0, 364, 0,\n  /* 29129 */ 0, 367, 41606, 67, 67, 67, 67, 1257, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 1305, 0, 0, 97, 97,\n  /* 29155 */ 1337, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1630, 97, 67, 1474, 67, 67, 0, 0, 0, 0, 0,\n  /* 29181 */ 0, 0, 0, 0, 0, 0, 0, 0, 2380062, 2171166, 2171166, 97, 1529, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 29205 */ 45, 45, 45, 1228, 45, 45, 45, 45, 67, 67, 67, 67, 1707, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0,\n  /* 29231 */ 0, 97, 1891, 1739, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1198, 45, 1200, 45, 45, 45,\n  /* 29256 */ 45, 97, 97, 1894, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 672, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 29282 */ 45, 45, 45, 1420, 45, 45, 45, 45, 67, 67, 1965, 67, 1967, 67, 67, 67, 97, 97, 97, 97, 0, 1976, 0, 97, 97,\n  /* 29307 */ 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 97, 97, 1979, 0, 0, 97, 1982, 97, 97, 97, 1986, 45, 45,\n  /* 29333 */ 45, 45, 45, 735, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1770, 67, 67, 2000, 97, 97,\n  /* 29358 */ 97, 2002, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 1798, 97, 97, 97, 45, 45, 45, 2034, 67, 67, 67, 67,\n  /* 29383 */ 97, 0, 0, 2040, 97, 97, 97, 97, 45, 45, 45, 45, 1752, 45, 45, 45, 1753, 1754, 45, 45, 45, 45, 45, 45, 383,\n  /* 29408 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 675, 45, 45, 45, 45, 45, 45, 438, 45, 45, 45, 45, 45, 445, 45, 45, 45,\n  /* 29434 */ 45, 45, 45, 45, 45, 67, 1430, 67, 67, 67, 67, 67, 67, 67, 67, 67, 524, 67, 67, 67, 67, 67, 531, 67, 67,\n  /* 29459 */ 67, 67, 67, 67, 67, 67, 37689, 0, 25403, 0, 66365, 0, 0, 1096, 97, 97, 97, 621, 97, 97, 97, 97, 97, 628,\n  /* 29483 */ 97, 97, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 356, 28, 28, 665, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 29509 */ 676, 45, 45, 45, 45, 45, 942, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 707, 708, 45, 45, 45, 45, 763, 67,\n  /* 29534 */ 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 809, 810, 67, 67, 67, 67, 783, 67, 67, 67, 67, 67,\n  /* 29560 */ 67, 67, 67, 67, 67, 67, 0, 1303, 0, 0, 0, 97, 861, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 29587 */ 613, 97, 45, 45, 956, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1215, 45, 67, 67, 67, 67,\n  /* 29612 */ 1027, 67, 67, 67, 67, 1032, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 0, 25403, 0, 66365, 0, 0, 1097, 1064,\n  /* 29635 */ 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1075, 67, 1098, 0, 0, 97, 97, 97, 97, 97, 97,\n  /* 29661 */ 97, 97, 97, 97, 97, 97, 97, 331, 97, 97, 97, 97, 1158, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 29687 */ 594, 97, 97, 1309, 0, 0, 0, 1315, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 29715 */ 97, 97, 1374, 97, 45, 45, 1543, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1240, 67, 67,\n  /* 29739 */ 1583, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1252, 67, 97, 97, 97, 1635, 97, 97, 97, 0,\n  /* 29764 */ 97, 97, 97, 97, 97, 97, 97, 97, 1800, 97, 45, 45, 45, 97, 97, 1793, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 29789 */ 97, 45, 45, 45, 1743, 45, 45, 45, 1746, 45, 0, 97, 97, 97, 97, 97, 1851, 97, 45, 45, 45, 45, 1856, 45, 45,\n  /* 29814 */ 45, 45, 1864, 45, 45, 67, 67, 1869, 67, 67, 67, 67, 1874, 67, 0, 97, 97, 45, 67, 2058, 97, 45, 67, 0, 97,\n  /* 29839 */ 45, 67, 0, 97, 45, 45, 67, 211, 67, 67, 67, 67, 67, 67, 240, 67, 67, 67, 67, 67, 67, 67, 1444, 67, 67, 67,\n  /* 29865 */ 67, 67, 67, 67, 67, 67, 509, 67, 67, 67, 67, 67, 67, 67, 67, 67, 268, 67, 67, 67, 0, 37139, 24853, 0, 0,\n  /* 29890 */ 0, 0, 41098, 65820, 97, 97, 290, 97, 97, 97, 305, 97, 97, 319, 97, 97, 97, 330, 97, 97, 18, 640, 139621,\n  /* 29913 */ 0, 641, 0, 0, 0, 0, 364, 0, 643, 367, 41606, 97, 97, 348, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28,\n  /* 29939 */ 28, 139621, 0, 0, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 45, 45, 45, 380, 45, 45, 45, 45, 45, 45, 395,\n  /* 29963 */ 45, 45, 45, 400, 369, 0, 45, 45, 45, 45, 45, 45, 45, 45, 658, 45, 45, 45, 45, 45, 972, 45, 45, 45, 45, 45,\n  /* 29989 */ 45, 45, 45, 45, 45, 427, 45, 45, 45, 45, 45, 745, 67, 67, 67, 67, 67, 67, 67, 67, 756, 67, 67, 67, 67, 67,\n  /* 30015 */ 67, 67, 67, 37689, 1086, 25403, 1090, 66365, 1094, 0, 0, 97, 843, 97, 97, 97, 97, 97, 97, 97, 97, 854, 97,\n  /* 30038 */ 97, 97, 97, 97, 97, 1121, 97, 97, 97, 97, 1126, 97, 97, 97, 97, 45, 980, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 30063 */ 45, 45, 45, 45, 45, 45, 45, 1400, 45, 67, 67, 67, 1011, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0,\n  /* 30088 */ 1304, 0, 0, 0, 1190, 45, 45, 1193, 1194, 45, 45, 45, 45, 45, 1199, 45, 1201, 45, 45, 45, 45, 1911, 45, 45,\n  /* 30112 */ 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 1579, 67, 67, 67, 67, 45, 1205, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 30137 */ 1211, 45, 45, 45, 45, 45, 984, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1550, 45, 45, 45, 45, 45, 1217,\n  /* 30162 */ 45, 45, 45, 45, 45, 45, 1225, 45, 45, 45, 45, 1229, 45, 45, 45, 1388, 45, 45, 45, 45, 45, 45, 1396, 45,\n  /* 30186 */ 45, 45, 45, 45, 444, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 1574, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 30212 */ 67, 1590, 67, 67, 67, 67, 67, 1254, 67, 67, 67, 67, 67, 1259, 67, 1261, 67, 67, 67, 67, 1265, 67, 67, 67,\n  /* 30236 */ 67, 67, 67, 1708, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 67, 67, 67, 67,\n  /* 30263 */ 1285, 67, 67, 67, 67, 1289, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 1087, 25403, 1091, 66365, 1095, 0, 0,\n  /* 30285 */ 97, 97, 97, 97, 1339, 97, 1341, 97, 97, 97, 97, 1345, 97, 97, 97, 97, 97, 561, 97, 97, 97, 97, 97, 573,\n  /* 30309 */ 97, 97, 97, 97, 97, 97, 1717, 97, 0, 97, 97, 97, 97, 97, 97, 97, 591, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 30335 */ 1329, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1351, 97, 97, 97, 97, 97, 97, 1357, 97, 97, 97, 97, 97, 588,\n  /* 30360 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 568, 97, 97, 97, 97, 97, 97, 97, 1365, 97, 97, 97, 97, 1369, 97,\n  /* 30385 */ 97, 97, 97, 97, 97, 97, 97, 97, 1356, 97, 97, 97, 97, 97, 97, 45, 45, 1403, 45, 45, 45, 45, 45, 45, 45,\n  /* 30410 */ 45, 45, 45, 45, 45, 45, 45, 1399, 45, 45, 45, 1413, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 30435 */ 45, 1669, 45, 1422, 45, 45, 1425, 45, 45, 1428, 45, 1429, 67, 67, 67, 67, 67, 67, 67, 67, 1468, 67, 67,\n  /* 30458 */ 67, 67, 67, 67, 67, 67, 529, 67, 67, 67, 67, 67, 67, 539, 67, 67, 1475, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 30486 */ 0, 0, 140, 2170880, 2170880, 2170880, 2416640, 97, 97, 1530, 97, 0, 45, 45, 1534, 45, 45, 45, 45, 45, 45,\n  /* 30507 */ 45, 45, 1956, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1599, 67, 67, 1601, 67, 67, 67, 67, 67, 67, 67,\n  /* 30532 */ 67, 67, 803, 67, 67, 67, 67, 67, 67, 1632, 97, 1634, 0, 97, 97, 97, 1640, 97, 97, 97, 1643, 97, 97, 1645,\n  /* 30556 */ 97, 97, 97, 97, 97, 912, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 45, 45, 45, 1660, 1661,\n  /* 30582 */ 45, 45, 45, 45, 1665, 1666, 45, 45, 45, 45, 45, 1670, 1692, 1693, 67, 67, 67, 67, 67, 1697, 67, 67, 67,\n  /* 30605 */ 67, 67, 67, 67, 1702, 97, 97, 1714, 1715, 97, 97, 97, 97, 0, 1721, 1722, 97, 97, 97, 97, 97, 97, 1353, 97,\n  /* 30629 */ 97, 97, 97, 97, 97, 97, 97, 1362, 1726, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 1734, 97, 97, 97, 97, 97,\n  /* 30654 */ 848, 849, 97, 97, 97, 97, 856, 97, 97, 97, 97, 97, 354, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 45, 45,\n  /* 30679 */ 1750, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1681, 45, 0, 1846, 97, 97, 97, 97, 97, 97,\n  /* 30704 */ 45, 45, 1854, 45, 45, 45, 45, 1859, 67, 67, 67, 1879, 67, 67, 97, 97, 1884, 97, 97, 0, 0, 0, 97, 97, 97,\n  /* 30729 */ 1105, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1344, 97, 97, 97, 1347, 97, 1892, 97, 0, 0, 0, 97, 97, 97,\n  /* 30754 */ 1900, 97, 97, 45, 45, 45, 45, 45, 997, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1002, 45, 45, 1005, 1006,\n  /* 30778 */ 45, 67, 67, 67, 67, 67, 1926, 67, 67, 1928, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97,\n  /* 30804 */ 97, 1737, 97, 0, 97, 97, 97, 97, 0, 0, 0, 97, 97, 1944, 97, 97, 1946, 45, 45, 45, 1544, 45, 45, 45, 45,\n  /* 30829 */ 45, 45, 45, 45, 45, 45, 45, 45, 190, 45, 45, 45, 152, 155, 45, 163, 45, 45, 177, 179, 182, 45, 45, 45,\n  /* 30853 */ 193, 197, 45, 45, 45, 1672, 45, 45, 45, 45, 45, 1677, 45, 1679, 45, 45, 45, 45, 996, 45, 45, 45, 45, 45,\n  /* 30877 */ 45, 45, 45, 45, 45, 45, 1212, 45, 45, 45, 45, 67, 260, 264, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0,\n  /* 30902 */ 41098, 65820, 97, 97, 97, 295, 299, 302, 97, 310, 97, 97, 324, 326, 329, 97, 97, 97, 0, 97, 97, 1639, 0,\n  /* 30925 */ 1641, 97, 97, 97, 97, 97, 97, 97, 97, 1511, 97, 97, 97, 97, 97, 97, 97, 97, 1523, 97, 97, 97, 97, 97, 97,\n  /* 30950 */ 97, 97, 1719, 97, 97, 97, 97, 97, 97, 97, 97, 1720, 97, 97, 97, 97, 97, 97, 97, 312, 97, 97, 97, 97, 97,\n  /* 30975 */ 97, 97, 97, 1123, 97, 97, 97, 97, 97, 97, 97, 340, 344, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0,\n  /* 31000 */ 28, 28, 139621, 0, 0, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 45, 373, 375, 419, 45, 45, 45, 45, 45, 45,\n  /* 31024 */ 45, 45, 45, 428, 45, 45, 435, 45, 45, 45, 1751, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1410, 45,\n  /* 31049 */ 45, 45, 67, 67, 67, 505, 67, 67, 67, 67, 67, 67, 67, 67, 67, 514, 67, 67, 67, 67, 67, 67, 1969, 67, 97,\n  /* 31074 */ 97, 97, 97, 0, 0, 0, 97, 97, 45, 67, 0, 97, 45, 67, 0, 97, 2064, 2065, 0, 2066, 45, 521, 67, 67, 67, 67,\n  /* 31100 */ 67, 67, 67, 67, 67, 67, 534, 67, 67, 67, 67, 67, 67, 465, 67, 67, 67, 474, 67, 67, 67, 67, 67, 67, 67,\n  /* 31125 */ 1467, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 1933, 0, 97, 97, 97, 602, 97, 97, 97, 97,\n  /* 31150 */ 97, 97, 97, 97, 97, 611, 97, 97, 18, 640, 139621, 358, 641, 0, 0, 0, 0, 364, 0, 0, 367, 0, 618, 97, 97,\n  /* 31175 */ 97, 97, 97, 97, 97, 97, 97, 97, 631, 97, 97, 97, 97, 97, 881, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 569,\n  /* 31201 */ 97, 97, 97, 97, 97, 369, 0, 45, 652, 45, 45, 45, 45, 45, 657, 45, 45, 45, 45, 45, 45, 1235, 45, 45, 45,\n  /* 31226 */ 45, 45, 45, 45, 45, 67, 67, 67, 1432, 67, 67, 67, 67, 67, 67, 67, 766, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 31251 */ 773, 67, 67, 67, 0, 1305, 0, 1311, 0, 1317, 97, 97, 97, 97, 97, 97, 97, 1624, 97, 97, 97, 97, 97, 97, 97,\n  /* 31276 */ 97, 0, 97, 97, 97, 1724, 97, 97, 97, 777, 67, 67, 782, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 31301 */ 535, 67, 67, 67, 67, 67, 67, 67, 814, 67, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 544, 25403, 546, 70179,\n  /* 31324 */ 0, 0, 66365, 66365, 552, 0, 97, 837, 97, 97, 97, 97, 97, 97, 1496, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 31349 */ 918, 97, 97, 97, 97, 0, 842, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1168, 97, 97, 97,\n  /* 31375 */ 97, 864, 97, 97, 97, 97, 97, 97, 97, 97, 871, 97, 97, 97, 0, 1637, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97,\n  /* 31401 */ 97, 97, 97, 1801, 45, 45, 97, 875, 97, 97, 880, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1151, 1152,\n  /* 31425 */ 97, 97, 97, 67, 67, 67, 1040, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 790, 67, 67, 67, 1180, 0,\n  /* 31450 */ 649, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 200, 45, 45, 67, 67, 67, 1454, 67, 67, 67, 67,\n  /* 31475 */ 67, 67, 67, 67, 67, 67, 67, 67, 806, 67, 67, 67, 0, 0, 0, 1481, 0, 1094, 0, 0, 97, 1483, 97, 97, 97, 97,\n  /* 31501 */ 97, 97, 304, 97, 97, 318, 97, 97, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 97, 97, 97,\n  /* 31526 */ 1507, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1332, 97, 97, 97, 1619, 97, 97, 97, 97, 97, 97, 97,\n  /* 31551 */ 97, 97, 97, 97, 97, 97, 97, 97, 1631, 97, 1633, 97, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 31577 */ 1381, 0, 0, 45, 45, 45, 45, 97, 97, 1727, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 626, 97, 97,\n  /* 31603 */ 97, 97, 97, 97, 636, 45, 45, 1760, 67, 67, 67, 67, 67, 67, 67, 1765, 67, 67, 67, 67, 67, 67, 67, 1299, 67,\n  /* 31628 */ 67, 67, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 1616, 97, 97, 1803, 45, 45, 45, 45, 1807, 45, 45, 45, 45, 45,\n  /* 31654 */ 1813, 45, 45, 45, 67, 67, 1684, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 822, 67, 67, 37689, 544, 67,\n  /* 31678 */ 67, 1818, 67, 67, 67, 67, 1822, 67, 67, 67, 67, 67, 1828, 67, 67, 67, 67, 67, 97, 0, 0, 97, 97, 97, 97,\n  /* 31703 */ 97, 45, 45, 45, 2012, 2013, 45, 45, 67, 67, 67, 2018, 2019, 67, 67, 97, 67, 97, 97, 97, 1833, 97, 97, 0,\n  /* 31727 */ 0, 97, 97, 1840, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 1733, 97, 1735, 97, 97, 97, 0, 97, 97, 97, 1849, 97,\n  /* 31753 */ 97, 97, 45, 45, 45, 45, 45, 1857, 45, 45, 45, 1910, 45, 1912, 45, 45, 1914, 45, 67, 67, 67, 67, 67, 67,\n  /* 31777 */ 67, 67, 67, 67, 1017, 67, 67, 1020, 67, 45, 1861, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1872, 67, 67,\n  /* 31801 */ 67, 67, 67, 67, 752, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1446, 67, 67, 67, 67, 67, 1876, 67, 67, 67,\n  /* 31826 */ 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 1890, 97, 97, 97, 97, 97, 1134, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 31852 */ 97, 570, 97, 97, 97, 97, 580, 1935, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 1906,\n  /* 31878 */ 45, 67, 67, 67, 67, 2048, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 931, 45, 45,\n  /* 31905 */ 45, 45, 45, 45, 1674, 45, 1676, 45, 45, 45, 45, 45, 45, 45, 446, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67,\n  /* 31930 */ 67, 1871, 67, 67, 67, 67, 0, 97, 97, 45, 67, 0, 97, 2060, 2061, 0, 2063, 45, 67, 0, 97, 45, 45, 156, 45,\n  /* 31955 */ 45, 45, 45, 45, 45, 45, 45, 45, 192, 45, 45, 45, 45, 1673, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 31980 */ 429, 45, 45, 45, 45, 67, 67, 67, 269, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 349,\n  /* 32004 */ 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 0, 0, 0, 364, 0, 367, 41098, 369, 140, 45,\n  /* 32029 */ 45, 374, 45, 45, 67, 67, 213, 217, 67, 67, 67, 67, 67, 242, 67, 247, 67, 253, 45, 45, 698, 45, 45, 45, 45,\n  /* 32054 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 399, 45, 45, 0, 0, 0, 0, 925, 41606, 0, 929, 0, 0, 45, 45, 45, 45, 45,\n  /* 32081 */ 45, 1391, 45, 45, 1395, 45, 45, 45, 45, 45, 45, 423, 45, 45, 45, 45, 45, 45, 45, 436, 45, 67, 67, 67, 67,\n  /* 32106 */ 1041, 67, 1043, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1776, 67, 67, 97, 97, 97, 1099, 0, 0, 97, 97, 97,\n  /* 32131 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 888, 97, 97, 97, 1131, 97, 97, 97, 97, 1135, 97, 1137, 97, 97, 97,\n  /* 32156 */ 97, 97, 97, 97, 1497, 97, 97, 97, 97, 97, 97, 97, 97, 97, 883, 97, 97, 97, 97, 97, 97, 1310, 0, 0, 0,\n  /* 32181 */ 1316, 0, 0, 0, 0, 1100, 0, 0, 0, 97, 97, 97, 97, 97, 1107, 97, 97, 97, 97, 97, 97, 97, 97, 1343, 97, 97,\n  /* 32207 */ 97, 97, 97, 97, 1348, 0, 0, 1317, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1112, 97, 45,\n  /* 32234 */ 1804, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1868, 67, 1870, 67, 67, 67, 67, 67, 1817,\n  /* 32258 */ 67, 67, 1819, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 823, 67, 37689, 544, 67, 97, 1832, 97, 97,\n  /* 32282 */ 1834, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 0, 1732, 97, 97, 97, 97, 97, 97, 97, 850, 97, 97,\n  /* 32308 */ 97, 97, 97, 97, 97, 97, 97, 1177, 0, 0, 925, 0, 0, 0, 0, 97, 97, 97, 97, 0, 0, 1941, 97, 97, 97, 97, 97,\n  /* 32335 */ 97, 45, 45, 45, 1991, 1992, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1998, 134, 0, 0, 0, 37, 110630, 0, 0,\n  /* 32360 */ 0, 114730, 106539, 41098, 45, 45, 45, 45, 941, 45, 45, 944, 45, 45, 45, 45, 45, 45, 952, 45, 45, 207, 67,\n  /* 32383 */ 67, 67, 67, 67, 226, 67, 67, 67, 67, 67, 67, 67, 67, 67, 820, 67, 67, 67, 67, 37689, 544, 369, 650, 45,\n  /* 32407 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1682, 25403, 546, 70179, 0, 0, 66365, 66365, 552,\n  /* 32430 */ 835, 97, 97, 97, 97, 97, 97, 97, 1522, 97, 97, 97, 97, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 1725,\n  /* 32455 */ 67, 67, 67, 1695, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1034, 67, 1036, 67, 67, 67, 265, 67, 67,\n  /* 32480 */ 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 97, 296, 97, 97, 97, 97, 314, 97, 97, 97, 97,\n  /* 32504 */ 332, 334, 97, 97, 97, 97, 97, 1146, 1147, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1626, 97, 97, 97, 97,\n  /* 32528 */ 97, 97, 345, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 0, 0, 0, 364, 0, 367,\n  /* 32553 */ 41098, 369, 140, 45, 372, 45, 45, 45, 1220, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1213, 45, 45,\n  /* 32577 */ 45, 45, 404, 406, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 434, 45, 45, 45, 440, 45, 45, 45,\n  /* 32602 */ 45, 45, 45, 45, 45, 451, 452, 45, 45, 45, 67, 1683, 67, 67, 67, 1686, 67, 67, 67, 67, 67, 67, 67, 0,\n  /* 32626 */ 37139, 24853, 0, 0, 0, 0, 41098, 65820, 67, 67, 67, 67, 490, 492, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 32650 */ 67, 1447, 67, 67, 1450, 67, 67, 67, 67, 67, 526, 67, 67, 67, 67, 67, 67, 67, 67, 537, 538, 67, 67, 67, 67,\n  /* 32675 */ 67, 506, 67, 67, 508, 67, 67, 511, 67, 67, 67, 67, 0, 1476, 0, 0, 0, 0, 0, 1478, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 32703 */ 97, 97, 1484, 97, 97, 97, 97, 97, 97, 865, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1499, 97, 97, 97, 97,\n  /* 32728 */ 97, 97, 97, 97, 97, 587, 589, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 629, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 32754 */ 97, 623, 97, 97, 97, 97, 97, 97, 97, 97, 634, 635, 97, 97, 97, 97, 97, 1160, 97, 97, 97, 97, 97, 97, 97,\n  /* 32779 */ 97, 97, 97, 97, 1628, 97, 97, 97, 97, 369, 0, 45, 45, 45, 45, 45, 655, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 32804 */ 999, 45, 1001, 45, 45, 45, 45, 45, 45, 45, 45, 715, 45, 45, 45, 720, 45, 45, 45, 45, 45, 45, 45, 45, 728,\n  /* 32829 */ 25403, 546, 70179, 0, 0, 66365, 66365, 552, 0, 97, 97, 97, 97, 97, 840, 97, 97, 97, 97, 97, 1174, 97, 97,\n  /* 32852 */ 97, 97, 0, 0, 925, 0, 0, 0, 0, 0, 0, 0, 1100, 97, 97, 97, 97, 97, 97, 97, 97, 627, 97, 97, 97, 97, 97, 97,\n  /* 32880 */ 97, 938, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 680, 45, 968, 45, 970, 45, 973, 45,\n  /* 32905 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 962, 45, 45, 45, 45, 45, 979, 45, 45, 45, 45, 45, 985, 45, 45, 45, 45,\n  /* 32931 */ 45, 45, 45, 45, 45, 1224, 45, 45, 45, 45, 45, 45, 45, 45, 688, 45, 45, 45, 45, 45, 45, 45, 1007, 1008, 67,\n  /* 32956 */ 67, 67, 67, 67, 1014, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1045, 67, 67, 67, 67, 67, 67, 67, 1038, 67, 67,\n  /* 32981 */ 67, 67, 67, 67, 1044, 67, 1046, 67, 1049, 67, 67, 67, 67, 67, 67, 800, 67, 67, 67, 67, 67, 67, 808, 67,\n  /* 33005 */ 67, 0, 0, 0, 1102, 97, 97, 97, 97, 97, 1108, 97, 97, 97, 97, 97, 97, 306, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 33031 */ 97, 97, 1371, 97, 97, 97, 97, 97, 97, 97, 97, 1132, 97, 97, 97, 97, 97, 97, 1138, 97, 1140, 97, 1143, 97,\n  /* 33055 */ 97, 97, 97, 97, 1352, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 869, 97, 97, 97, 97, 97, 45, 1191, 45, 45,\n  /* 33080 */ 45, 45, 45, 1196, 45, 45, 45, 45, 45, 45, 45, 45, 1407, 45, 45, 45, 45, 45, 45, 45, 45, 986, 45, 45, 45,\n  /* 33105 */ 45, 45, 45, 991, 45, 67, 67, 67, 1256, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1048, 67, 67, 67,\n  /* 33130 */ 97, 1336, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 615, 97, 1386, 45, 1387, 45, 45, 45, 45,\n  /* 33155 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 455, 45, 457, 45, 45, 1424, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1433,\n  /* 33180 */ 67, 1434, 67, 67, 67, 67, 67, 767, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1591, 67, 1593, 67, 67, 45,\n  /* 33205 */ 45, 1805, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1814, 45, 45, 1816, 67, 67, 67, 67, 1820, 67, 67, 67, 67,\n  /* 33229 */ 67, 67, 67, 67, 67, 1829, 67, 67, 67, 67, 67, 815, 67, 67, 67, 67, 821, 67, 67, 67, 37689, 544, 67, 1831,\n  /* 33253 */ 97, 97, 97, 97, 1835, 0, 0, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 1731, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 33279 */ 97, 853, 97, 97, 97, 97, 97, 97, 0, 97, 97, 97, 97, 1850, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 1547,\n  /* 33304 */ 45, 45, 45, 45, 45, 45, 45, 45, 1664, 45, 45, 45, 45, 45, 45, 45, 45, 961, 45, 45, 45, 45, 965, 45, 967,\n  /* 33329 */ 1907, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1920, 0, 1936, 97, 97, 97, 0, 0, 0, 97, 97,\n  /* 33355 */ 97, 97, 97, 97, 45, 45, 67, 67, 67, 67, 67, 67, 1763, 67, 67, 67, 67, 67, 67, 67, 67, 1056, 67, 67, 67,\n  /* 33380 */ 67, 67, 67, 67, 67, 1273, 67, 67, 67, 67, 67, 67, 67, 67, 1457, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97,\n  /* 33405 */ 97, 97, 0, 0, 28672, 97, 45, 67, 67, 67, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 2054, 97, 97, 291, 97,\n  /* 33431 */ 97, 97, 97, 97, 97, 320, 97, 97, 97, 97, 97, 97, 307, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 12288, 0,\n  /* 33456 */ 925, 926, 1179, 0, 45, 377, 45, 45, 45, 381, 45, 45, 392, 45, 45, 396, 45, 45, 45, 45, 971, 45, 45, 45,\n  /* 33480 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 1756, 45, 45, 45, 67, 67, 67, 67, 463, 67, 67, 67, 467, 67, 67, 478,\n  /* 33505 */ 67, 67, 482, 67, 67, 67, 67, 67, 1028, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1469, 67, 67, 1472,\n  /* 33530 */ 67, 502, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1460, 67, 97, 97, 97, 97, 560, 97, 97,\n  /* 33555 */ 97, 564, 97, 97, 575, 97, 97, 579, 97, 97, 97, 97, 97, 1368, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0,\n  /* 33581 */ 925, 0, 0, 930, 97, 599, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 872, 97, 45, 666, 45, 45,\n  /* 33607 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1758, 0, 362, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 45,\n  /* 33633 */ 934, 45, 45, 45, 164, 168, 174, 178, 45, 45, 45, 45, 45, 194, 45, 45, 45, 165, 45, 45, 45, 45, 45, 45, 45,\n  /* 33658 */ 45, 45, 199, 45, 45, 45, 67, 67, 1010, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1060, 67, 67, 67,\n  /* 33683 */ 67, 67, 67, 1052, 1053, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1063, 97, 1157, 97, 97, 97, 97, 97, 97,\n  /* 33707 */ 97, 97, 97, 97, 97, 97, 1167, 97, 97, 97, 97, 97, 1379, 97, 97, 97, 0, 0, 0, 45, 1383, 45, 45, 45, 1806,\n  /* 33732 */ 45, 45, 45, 45, 45, 45, 1812, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1577, 67, 67, 67, 67, 67, 67, 67, 753,\n  /* 33757 */ 67, 67, 67, 67, 67, 67, 67, 67, 67, 1262, 67, 67, 67, 67, 67, 67, 67, 1282, 67, 67, 67, 67, 67, 67, 67,\n  /* 33782 */ 67, 67, 67, 67, 67, 67, 67, 1471, 67, 45, 1402, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 33807 */ 417, 45, 67, 1462, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 544, 97, 1517, 97, 97,\n  /* 33831 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1128, 97, 97, 97, 97, 1636, 97, 97, 97, 0, 97, 97, 97, 97,\n  /* 33857 */ 97, 97, 97, 97, 851, 97, 97, 97, 97, 97, 97, 97, 67, 67, 1705, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97,\n  /* 33883 */ 97, 97, 97, 0, 0, 97, 97, 97, 97, 1842, 0, 0, 1779, 97, 97, 97, 1782, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0,\n  /* 33910 */ 0, 97, 97, 97, 1789, 97, 97, 0, 0, 0, 97, 1847, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 1675,\n  /* 33936 */ 45, 45, 45, 45, 45, 45, 45, 45, 737, 738, 67, 740, 67, 741, 67, 743, 67, 67, 67, 67, 67, 67, 1968, 67, 67,\n  /* 33961 */ 97, 97, 97, 97, 0, 0, 0, 97, 97, 45, 67, 0, 97, 45, 67, 2062, 97, 45, 67, 0, 97, 45, 67, 67, 97, 97, 2001,\n  /* 33988 */ 97, 0, 0, 2004, 97, 97, 0, 97, 97, 97, 97, 1797, 97, 97, 97, 97, 97, 45, 45, 45, 67, 261, 67, 67, 67, 67,\n  /* 34014 */ 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 292, 97, 97, 97, 97, 311, 315, 321, 325, 97, 97,\n  /* 34037 */ 97, 97, 97, 97, 1623, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1330, 97, 97, 1333, 1334, 97, 341, 97, 97,\n  /* 34061 */ 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 0, 0, 363, 364, 0, 367, 41098, 369, 140,\n  /* 34085 */ 45, 45, 45, 45, 1221, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 413, 45, 45, 416, 45, 376, 45, 45, 45,\n  /* 34110 */ 45, 382, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1408, 45, 45, 45, 45, 45, 403, 45, 45, 45, 45, 45, 45,\n  /* 34135 */ 45, 45, 45, 45, 414, 45, 45, 45, 418, 67, 67, 67, 462, 67, 67, 67, 67, 468, 67, 67, 67, 67, 67, 67, 67,\n  /* 34160 */ 67, 1602, 67, 1604, 67, 67, 67, 67, 67, 67, 67, 67, 489, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 500, 67,\n  /* 34185 */ 67, 67, 67, 67, 1067, 67, 67, 67, 67, 67, 1072, 67, 67, 67, 67, 67, 67, 274, 0, 37139, 24853, 0, 0, 0, 0,\n  /* 34210 */ 41098, 65820, 67, 67, 504, 67, 67, 67, 67, 67, 67, 67, 510, 67, 67, 67, 517, 519, 541, 67, 37139, 37139,\n  /* 34232 */ 24853, 24853, 0, 70179, 0, 0, 0, 65820, 65820, 369, 287, 554, 97, 97, 97, 559, 97, 97, 97, 97, 565, 97,\n  /* 34254 */ 97, 97, 97, 97, 97, 97, 1718, 0, 97, 97, 97, 97, 97, 97, 97, 898, 97, 97, 97, 97, 97, 97, 906, 97, 97, 97,\n  /* 34280 */ 97, 586, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 597, 97, 97, 97, 97, 97, 1520, 97, 97, 97, 97, 97, 97,\n  /* 34305 */ 97, 97, 97, 97, 0, 45, 1656, 45, 45, 45, 97, 97, 601, 97, 97, 97, 97, 97, 97, 97, 607, 97, 97, 97, 614,\n  /* 34330 */ 616, 638, 97, 18, 0, 139621, 0, 0, 0, 0, 0, 0, 364, 0, 0, 367, 41606, 369, 0, 45, 45, 45, 45, 45, 45, 45,\n  /* 34356 */ 45, 45, 45, 661, 45, 45, 45, 407, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1815, 45, 67, 45,\n  /* 34381 */ 667, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 678, 45, 45, 45, 421, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 34407 */ 45, 45, 976, 977, 45, 45, 45, 682, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 693, 45, 45, 697, 67, 67, 748,\n  /* 34432 */ 67, 67, 67, 67, 754, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1274, 67, 67, 67, 67, 67, 67, 67, 67, 765, 67,\n  /* 34457 */ 67, 67, 67, 769, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1589, 67, 67, 67, 67, 67, 67, 67, 67, 780, 67, 67,\n  /* 34482 */ 784, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1777, 67, 97, 97, 97, 97, 97, 97, 846, 97, 97, 97, 97,\n  /* 34507 */ 852, 97, 97, 97, 97, 97, 97, 97, 1742, 45, 45, 45, 45, 45, 45, 45, 1747, 97, 97, 97, 863, 97, 97, 97, 97,\n  /* 34532 */ 867, 97, 97, 97, 97, 97, 97, 97, 308, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 12288, 1178, 925, 0, 1179,\n  /* 34556 */ 0, 97, 97, 97, 878, 97, 97, 882, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 12288, 0, 925, 0, 1179, 0, 908,\n  /* 34581 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 925, 0, 0, 0, 954, 45, 45, 45, 45, 45, 45,\n  /* 34608 */ 45, 45, 45, 45, 963, 45, 45, 966, 45, 45, 157, 45, 45, 171, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 948,\n  /* 34633 */ 45, 45, 45, 45, 45, 1022, 67, 67, 1026, 67, 67, 67, 1030, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1603, 1605,\n  /* 34657 */ 67, 67, 67, 1608, 67, 67, 67, 1039, 67, 67, 1042, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 471, 67, 67, 67,\n  /* 34682 */ 67, 67, 0, 1100, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 904, 97, 97, 97, 97, 1116, 97, 97,\n  /* 34708 */ 1120, 97, 97, 97, 1124, 97, 97, 97, 97, 97, 97, 562, 97, 97, 97, 571, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 34733 */ 1133, 97, 97, 1136, 97, 97, 97, 97, 97, 97, 97, 97, 915, 917, 97, 97, 97, 97, 97, 0, 97, 1170, 97, 97, 97,\n  /* 34758 */ 97, 97, 97, 97, 97, 0, 0, 925, 0, 0, 0, 0, 0, 41606, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 1993, 67, 67, 67,\n  /* 34786 */ 67, 67, 67, 67, 67, 67, 67, 1275, 67, 67, 67, 1278, 67, 0, 0, 0, 45, 45, 1182, 45, 45, 45, 45, 45, 45, 45,\n  /* 34812 */ 45, 45, 1189, 1204, 45, 45, 45, 1207, 45, 45, 1209, 45, 1210, 45, 45, 45, 45, 45, 45, 1546, 45, 45, 45,\n  /* 34835 */ 45, 45, 45, 45, 45, 45, 689, 45, 45, 45, 45, 45, 45, 1231, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 34861 */ 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 236, 67, 67, 67, 67, 67, 67, 67, 801, 67, 67, 67, 805, 67, 67, 67,\n  /* 34887 */ 67, 67, 1242, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1249, 67, 67, 67, 67, 67, 67, 507, 67, 67, 67, 67, 67,\n  /* 34912 */ 67, 67, 67, 67, 67, 1300, 0, 0, 0, 0, 0, 1267, 67, 67, 1269, 67, 1270, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 34938 */ 1280, 97, 1349, 97, 1350, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1360, 97, 97, 97, 0, 1980, 97, 97, 97, 97,\n  /* 34962 */ 97, 45, 45, 45, 45, 45, 45, 673, 45, 45, 45, 45, 677, 45, 45, 45, 45, 1401, 45, 45, 45, 45, 45, 45, 45,\n  /* 34987 */ 45, 45, 45, 45, 45, 45, 45, 45, 953, 67, 1437, 67, 1440, 67, 67, 67, 67, 1445, 67, 67, 67, 1448, 67, 67,\n  /* 35011 */ 67, 67, 67, 67, 1029, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1825, 67, 67, 67, 67, 67, 1473, 67, 67, 67,\n  /* 35036 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1320, 0, 834, 97, 97, 97, 97, 1490, 97, 1493, 97, 97, 97, 97, 1498,\n  /* 35063 */ 97, 97, 97, 1501, 97, 97, 97, 0, 97, 1638, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 916, 97, 97, 97, 97, 97,\n  /* 35089 */ 97, 0, 1528, 97, 97, 97, 0, 45, 45, 45, 1535, 45, 45, 45, 45, 45, 45, 45, 1867, 67, 67, 67, 67, 67, 67,\n  /* 35114 */ 67, 67, 67, 97, 97, 97, 97, 1932, 0, 0, 1555, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1567,\n  /* 35139 */ 45, 45, 158, 45, 45, 172, 45, 45, 45, 183, 45, 45, 45, 45, 201, 45, 45, 67, 212, 67, 67, 67, 67, 231, 235,\n  /* 35164 */ 241, 245, 67, 67, 67, 67, 67, 67, 493, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 472, 67, 67, 67, 67, 67,\n  /* 35189 */ 97, 97, 97, 97, 1651, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 1539, 45, 45, 45, 67, 1704, 67,\n  /* 35214 */ 1706, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 1841, 97, 0, 1844, 97, 97, 97,\n  /* 35240 */ 97, 1716, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 590, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45,\n  /* 35267 */ 45, 45, 1385, 1748, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1757, 45, 45, 159, 45, 45, 45, 45,\n  /* 35292 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 415, 45, 45, 97, 97, 1780, 97, 97, 97, 0, 0, 1786, 97, 97, 97, 97, 97,\n  /* 35318 */ 0, 0, 97, 97, 1730, 0, 97, 97, 97, 97, 97, 1736, 97, 1738, 67, 97, 97, 97, 97, 97, 97, 0, 1838, 97, 97,\n  /* 35343 */ 97, 97, 97, 0, 0, 97, 1729, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1162, 97, 97, 97, 1165, 97, 97, 97, 45,\n  /* 35369 */ 1950, 45, 45, 45, 45, 45, 45, 45, 45, 1958, 67, 67, 67, 1962, 67, 67, 67, 67, 67, 1246, 67, 67, 67, 67,\n  /* 35393 */ 67, 67, 67, 67, 67, 67, 67, 97, 1710, 97, 97, 97, 1999, 67, 97, 97, 97, 97, 0, 2003, 97, 97, 97, 0, 97,\n  /* 35418 */ 97, 2008, 2009, 45, 67, 67, 67, 67, 0, 0, 97, 97, 97, 97, 45, 2052, 67, 2053, 0, 0, 0, 0, 925, 41606, 0,\n  /* 35443 */ 0, 930, 0, 45, 45, 45, 45, 45, 45, 1392, 45, 1394, 45, 45, 45, 45, 45, 45, 45, 1545, 45, 45, 45, 45, 45,\n  /* 35468 */ 45, 45, 45, 45, 45, 1563, 1565, 45, 45, 45, 1568, 0, 97, 2055, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67,\n  /* 35492 */ 28672, 97, 45, 45, 160, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 679, 45, 45, 67, 67, 266, 67,\n  /* 35517 */ 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 346, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24,\n  /* 35541 */ 24, 0, 28, 28, 139621, 0, 0, 362, 0, 364, 0, 367, 41098, 369, 140, 371, 45, 45, 45, 379, 45, 45, 45, 388,\n  /* 35565 */ 45, 45, 45, 45, 45, 45, 45, 45, 1663, 45, 45, 45, 45, 45, 45, 45, 45, 45, 449, 45, 45, 45, 45, 45, 67, 67,\n  /* 35591 */ 542, 37139, 37139, 24853, 24853, 0, 70179, 0, 0, 0, 65820, 65820, 369, 287, 97, 97, 97, 97, 97, 1622, 97,\n  /* 35612 */ 97, 97, 97, 97, 97, 97, 1629, 97, 97, 0, 1794, 1795, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45,\n  /* 35637 */ 45, 1745, 45, 45, 97, 639, 18, 0, 139621, 0, 0, 0, 0, 0, 0, 364, 0, 0, 367, 41606, 45, 731, 45, 45, 45,\n  /* 35662 */ 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 251, 67, 67, 67, 67, 67, 798, 67, 67, 67, 67,\n  /* 35688 */ 67, 67, 67, 67, 67, 67, 67, 67, 1073, 67, 67, 67, 860, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 35714 */ 97, 873, 0, 0, 1101, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 921, 97, 0, 67, 67, 67, 67, 1245,\n  /* 35740 */ 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1250, 67, 67, 1253, 0, 0, 1312, 0, 0, 0, 1318, 0, 0, 0, 0,\n  /* 35767 */ 0, 0, 97, 97, 97, 97, 1106, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1149, 97, 97, 97, 97, 97, 1155, 97, 97,\n  /* 35792 */ 1325, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1141, 97, 97, 67, 67, 1439, 67, 1441, 67, 67,\n  /* 35816 */ 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1264, 67, 67, 67, 97, 97, 1492, 97, 1494, 97, 97, 97, 97, 97, 97,\n  /* 35841 */ 97, 97, 97, 97, 97, 1331, 97, 97, 97, 97, 67, 67, 67, 2037, 67, 97, 0, 0, 97, 97, 97, 2043, 97, 45, 45,\n  /* 35866 */ 45, 442, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 232, 67, 67, 67, 67, 67, 67,\n  /* 35892 */ 67, 67, 1823, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1975, 0, 0, 97, 874, 97, 97, 97, 97, 97, 97,\n  /* 35918 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 1142, 97, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630,\n  /* 35939 */ 114730, 106539, 65, 86, 117, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539,\n  /* 35956 */ 63, 84, 115, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 61, 82, 113,\n  /* 35974 */ 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 59, 80, 111, 53264, 18, 49172,\n  /* 35992 */ 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 57, 78, 109, 53264, 18, 49172, 57366, 24, 8192,\n  /* 36010 */ 28, 102432, 37, 110630, 114730, 106539, 55, 76, 107, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37,\n  /* 36028 */ 110630, 114730, 106539, 53, 74, 105, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730,\n  /* 36045 */ 106539, 51, 72, 103, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 49, 70,\n  /* 36063 */ 101, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 47, 68, 99, 53264, 18,\n  /* 36081 */ 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 45, 67, 97, 53264, 18, 49172, 57366, 24,\n  /* 36099 */ 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 213085, 53264, 18, 49172, 57366, 24, 8192, 28, 102432,\n  /* 36117 */ 0, 0, 0, 44, 0, 0, 32863, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 41, 41, 41, 0, 0, 1138688,\n  /* 36139 */ 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 0, 53264, 18, 49172,\n  /* 36157 */ 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 89, 53264, 18, 18, 49172, 0, 57366, 0, 24,\n  /* 36177 */ 24, 24, 0, 127, 127, 127, 127, 102432, 67, 262, 67, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098,\n  /* 36200 */ 65820, 342, 97, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 360, 0, 0, 364, 0, 367,\n  /* 36225 */ 41098, 369, 140, 45, 45, 45, 45, 717, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 412, 45, 45, 45, 45, 45,\n  /* 36250 */ 67, 1009, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1292, 67, 67, 1294, 67, 67, 67, 67, 67, 67,\n  /* 36275 */ 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 97, 97, 97, 1615, 97, 97, 97, 53264, 18, 49172, 57366, 24, 8192, 28,\n  /* 36299 */ 102432, 37, 110630, 114730, 106539, 66, 87, 118, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37,\n  /* 36316 */ 110630, 114730, 106539, 64, 85, 116, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730,\n  /* 36333 */ 106539, 62, 83, 114, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 60, 81,\n  /* 36351 */ 112, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 58, 79, 110, 53264, 18,\n  /* 36369 */ 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 56, 77, 108, 53264, 18, 49172, 57366, 24,\n  /* 36387 */ 8192, 28, 102432, 37, 110630, 114730, 106539, 54, 75, 106, 53264, 18, 49172, 57366, 24, 8192, 28, 102432,\n  /* 36405 */ 37, 110630, 114730, 106539, 52, 73, 104, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630,\n  /* 36422 */ 114730, 106539, 50, 71, 102, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539,\n  /* 36439 */ 48, 69, 100, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 46, 67, 98, 53264,\n  /* 36458 */ 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 233472, 53264, 18, 49172, 57366,\n  /* 36476 */ 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 69724, 53264, 18, 18, 49172, 0, 57366, 262144, 24,\n  /* 36495 */ 24, 24, 0, 28, 28, 28, 28, 102432, 45, 45, 161, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 710,\n  /* 36520 */ 45, 45, 28, 139621, 359, 0, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 45, 45, 45, 1389, 45, 45, 45, 45, 45,\n  /* 36544 */ 45, 45, 45, 45, 45, 45, 949, 45, 45, 45, 45, 67, 503, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 36570 */ 67, 1449, 67, 67, 97, 600, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1154, 97, 0, 0, 0, 0,\n  /* 36596 */ 925, 41606, 927, 0, 0, 0, 45, 45, 45, 45, 45, 45, 1866, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 772, 67,\n  /* 36621 */ 67, 67, 67, 67, 45, 45, 969, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 951, 45, 45, 45, 45,\n  /* 36646 */ 1192, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1202, 45, 45, 0, 0, 0, 1314, 0, 0, 0, 0, 0, 0,\n  /* 36673 */ 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1488, 67, 67, 267, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0,\n  /* 36698 */ 41098, 65820, 97, 347, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 361, 0, 0, 364,\n  /* 36722 */ 0, 367, 41098, 369, 140, 45, 45, 45, 45, 734, 45, 45, 45, 67, 67, 67, 67, 67, 742, 67, 67, 45, 45, 668,\n  /* 36746 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1214, 45, 45, 1130, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 36771 */ 97, 97, 97, 97, 97, 97, 97, 1361, 97, 45, 45, 1671, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 36796 */ 1552, 45, 45, 0, 0, 0, 0, 2220032, 0, 0, 1130496, 0, 0, 0, 0, 2170880, 2171020, 2170880, 2170880, 18, 0,\n  /* 36817 */ 0, 131072, 0, 0, 0, 90112, 0, 2220032, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 1485, 97, 97, 97, 97, 0, 45,\n  /* 36843 */ 45, 45, 45, 45, 1537, 45, 45, 45, 45, 45, 1390, 45, 1393, 45, 45, 45, 45, 1398, 45, 45, 45, 2170880,\n  /* 36865 */ 2171167, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880,\n  /* 36876 */ 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2576384, 2215936, 3117056, 2215936, 2215936,\n  /* 36887 */ 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 0, 0,\n  /* 36902 */ 0, 2174976, 0, 0, 0, 0, 0, 0, 2183168, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880,\n  /* 36921 */ 2170880, 2170880, 2721252, 2744320, 2170880, 2170880, 2170880, 2834432, 2840040, 2170880, 2908160,\n  /* 36932 */ 2170880, 2170880, 2936832, 2170880, 2170880, 2985984, 2170880, 2994176, 2170880, 2170880, 3014656,\n  /* 36943 */ 2170880, 3059712, 3076096, 3088384, 2170880, 2170880, 2170880, 2170880, 0, 0, 0, 0, 2220032, 0, 0, 0,\n  /* 36959 */ 1142784, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3215360, 2215936,\n  /* 36972 */ 2215936, 2215936, 2215936, 2215936, 2437120, 2215936, 2215936, 2215936, 3117056, 2215936, 2215936,\n  /* 36983 */ 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 543, 0, 545,\n  /* 36997 */ 0, 0, 2183168, 0, 0, 831, 0, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880,\n  /* 37012 */ 3031040, 2170880, 3055616, 2170880, 2170880, 2170880, 2170880, 3092480, 2170880, 2170880, 3125248,\n  /* 37023 */ 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3198976, 2170880, 0, 0,\n  /* 37036 */ 0, 0, 0, 0, 67, 67, 37139, 37139, 24853, 24853, 0, 0, 0, 0, 0, 65820, 65820, 0, 287, 97, 97, 97, 97, 97,\n  /* 37060 */ 1783, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 1791, 0, 0, 546, 70179, 0, 0, 0, 0, 552,\n  /* 37087 */ 0, 97, 97, 97, 97, 97, 97, 97, 604, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1150, 97, 97, 97, 97, 97,\n  /* 37112 */ 147456, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 0, 0,\n  /* 37126 */ 147456, 0, 0, 0, 0, 925, 41606, 0, 928, 0, 0, 45, 45, 45, 45, 45, 45, 998, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 37152 */ 45, 1562, 45, 1564, 45, 45, 45, 45, 0, 2158592, 2158592, 0, 0, 0, 0, 2232320, 2232320, 2232320, 0,\n  /* 37171 */ 2240512, 2240512, 2240512, 2240512, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2416640\n];\n\nJSONiqTokenizer.EXPECTED =\n[\n  /*    0 */ 291, 300, 304, 341, 315, 309, 305, 295, 319, 323, 327, 329, 296, 333, 337, 339, 342, 346, 350, 294, 356,\n  /*   21 */ 360, 312, 367, 352, 371, 363, 375, 379, 383, 387, 391, 395, 726, 399, 405, 518, 684, 405, 405, 405, 405,\n  /*   42 */ 808, 405, 405, 405, 512, 405, 405, 405, 431, 405, 405, 406, 405, 405, 404, 405, 405, 405, 405, 405, 405,\n  /*   63 */ 405, 908, 631, 410, 415, 405, 414, 419, 608, 405, 429, 602, 405, 435, 443, 405, 441, 641, 478, 405, 447,\n  /*   84 */ 451, 450, 456, 643, 461, 460, 762, 679, 465, 469, 741, 473, 477, 482, 486, 492, 932, 931, 523, 498, 504,\n  /*  105 */ 720, 405, 510, 596, 405, 516, 941, 580, 522, 929, 527, 590, 589, 897, 939, 534, 538, 547, 551, 555, 559,\n  /*  126 */ 563, 567, 571, 969, 575, 708, 690, 689, 579, 584, 634, 405, 594, 731, 405, 600, 882, 405, 606, 895, 786,\n  /*  147 */ 452, 612, 405, 615, 620, 876, 624, 628, 638, 647, 651, 655, 659, 663, 667, 676, 683, 688, 695, 694, 791,\n  /*  168 */ 405, 699, 437, 405, 706, 714, 405, 712, 825, 870, 405, 718, 724, 769, 768, 823, 730, 735, 745, 751, 422,\n  /*  189 */ 755, 759, 425, 766, 902, 810, 587, 775, 888, 887, 405, 773, 992, 405, 779, 962, 405, 785, 781, 986, 790,\n  /*  210 */ 795, 797, 506, 500, 499, 801, 805, 814, 820, 829, 833, 837, 841, 845, 849, 853, 857, 861, 616, 865, 869,\n  /*  231 */ 868, 488, 405, 874, 816, 405, 880, 738, 405, 886, 892, 543, 405, 901, 906, 913, 912, 918, 494, 541, 922,\n  /*  252 */ 926, 936, 945, 949, 953, 957, 530, 966, 973, 960, 702, 701, 405, 979, 981, 405, 985, 747, 405, 990, 998,\n  /*  273 */ 914, 405, 996, 1004, 672, 975, 974, 1014, 1002, 1008, 670, 1012, 405, 405, 405, 405, 405, 401, 1018, 1022,\n  /*  293 */ 1026, 1106, 1071, 1111, 1111, 1111, 1082, 1145, 1030, 1101, 1034, 1038, 1106, 1106, 1106, 1106, 1046, 1206,\n  /*  311 */ 1052, 1106, 1072, 1111, 1111, 1042, 1134, 1065, 1111, 1112, 1056, 1160, 1207, 1062, 1204, 1208, 1069, 1106,\n  /*  329 */ 1106, 1106, 1076, 1111, 1207, 1161, 1122, 1205, 1064, 1094, 1106, 1106, 1107, 1111, 1111, 1111, 1078, 1086,\n  /*  347 */ 1207, 1092, 1098, 1046, 1058, 1106, 1106, 1110, 1111, 1111, 1116, 1120, 1161, 1126, 1202, 1104, 1106, 1145,\n  /*  365 */ 1146, 1129, 1138, 1088, 1151, 1048, 1157, 1153, 1132, 1141, 1165, 1107, 1111, 1172, 1179, 1109, 1183, 1175,\n  /*  383 */ 1143, 1147, 1187, 1108, 1191, 1195, 1144, 1199, 1168, 1212, 1216, 1220, 1224, 1228, 1232, 1236, 1557, 1247,\n  /*  401 */ 1241, 1241, 1038, 1434, 1241, 1241, 1241, 1241, 1254, 1275, 1617, 1241, 1280, 1287, 1241, 1241, 1241, 1287,\n  /*  419 */ 1241, 2114, 1291, 1241, 1243, 1241, 2049, 1824, 2094, 2095, 1520, 1309, 1241, 1241, 1302, 1241, 1321, 1311,\n  /*  437 */ 1241, 1241, 1313, 1778, 1325, 1336, 1241, 1241, 1325, 1330, 1353, 1241, 1241, 1695, 1354, 1241, 1241, 1241,\n  /*  455 */ 1294, 1686, 1331, 1241, 1696, 1368, 1241, 1338, 1370, 1241, 1392, 1399, 1364, 2017, 1406, 2016, 1405, 1716,\n  /*  473 */ 1406, 1407, 1422, 1417, 1421, 1241, 1241, 1241, 1349, 1426, 1241, 1774, 1756, 1241, 1773, 1241, 1241, 1345,\n  /*  491 */ 1964, 1812, 1432, 1241, 1241, 1345, 1993, 1459, 1241, 1241, 1241, 1395, 1848, 1767, 1465, 1241, 1241, 1394,\n  /*  509 */ 1847, 1242, 1477, 1241, 1241, 1428, 1241, 1445, 1492, 1241, 1241, 1438, 1241, 1499, 1241, 1241, 1241, 1455,\n  /*  527 */ 1241, 1818, 1448, 1241, 1250, 1241, 2026, 1623, 1449, 1241, 1612, 1616, 1241, 1614, 1241, 1257, 1241, 1241,\n  /*  545 */ 1985, 1292, 1586, 1512, 1241, 1517, 2050, 1526, 1674, 1519, 1524, 1647, 2051, 1532, 1537, 1551, 1544, 1550,\n  /*  563 */ 1555, 1561, 1571, 1578, 1584, 1590, 1591, 1653, 1595, 1602, 1606, 1610, 1634, 1628, 1640, 1633, 1645, 1241,\n  /*  581 */ 1241, 1241, 1469, 1241, 1970, 1651, 1241, 1270, 1241, 1241, 1819, 1449, 1241, 1293, 1664, 1241, 1241, 1481,\n  /*  599 */ 1485, 1574, 1672, 1241, 1241, 1513, 1317, 1487, 1684, 1241, 1241, 1533, 1299, 1694, 1241, 1241, 1295, 1241,\n  /*  617 */ 1241, 1241, 1546, 1700, 1241, 1241, 1707, 1241, 1713, 1241, 1849, 1715, 1241, 1720, 1241, 1276, 1267, 1241,\n  /*  635 */ 1241, 2107, 1657, 1864, 1241, 1881, 1241, 1326, 1292, 1241, 1685, 1358, 1724, 1338, 1241, 1363, 1362, 1342,\n  /*  653 */ 1340, 1361, 1339, 1833, 1372, 1360, 1833, 1833, 1342, 1343, 1835, 1341, 1731, 1738, 1344, 1241, 1745, 1241,\n  /*  671 */ 1379, 1241, 1241, 2092, 1241, 1388, 1761, 1754, 1241, 1386, 1241, 1400, 1760, 1241, 1241, 1241, 1598, 1734,\n  /*  689 */ 1241, 1241, 1241, 1635, 1645, 1241, 1780, 1766, 1241, 1241, 1332, 1771, 1241, 1241, 1629, 2079, 1241, 1242,\n  /*  707 */ 1784, 1241, 1241, 1680, 1639, 2063, 1790, 1241, 1241, 1741, 1241, 1241, 1800, 1241, 1241, 1762, 1473, 1241,\n  /*  725 */ 1806, 1241, 1241, 1786, 1240, 1709, 1241, 1241, 1241, 1668, 1811, 1241, 1940, 1241, 1401, 1974, 1241, 1408,\n  /*  743 */ 1413, 1382, 1241, 1816, 1241, 1241, 1802, 2086, 1811, 1241, 1817, 1945, 1823, 2095, 2095, 2047, 2094, 2046,\n  /*  761 */ 2080, 1241, 1409, 1312, 1376, 2096, 2048, 1241, 1241, 1807, 1241, 1241, 1241, 2035, 1241, 1241, 1828, 1241,\n  /*  779 */ 2057, 2061, 1241, 1241, 1843, 1241, 2059, 1241, 1241, 1241, 1690, 1847, 1241, 1241, 1241, 1703, 2102, 1848,\n  /*  797 */ 1241, 1241, 1853, 1292, 1848, 1241, 2016, 1857, 1241, 2002, 1868, 1241, 1436, 1241, 1241, 1271, 1305, 1241,\n  /*  815 */ 1874, 1241, 1241, 1884, 2037, 1892, 1241, 1890, 1241, 1461, 1241, 1241, 1795, 1241, 1241, 1891, 1241, 1878,\n  /*  833 */ 1241, 1888, 1241, 1888, 1905, 1896, 2087, 1912, 1903, 1241, 1911, 1906, 1916, 1905, 2027, 1863, 1925, 2088,\n  /*  851 */ 1859, 1861, 1922, 1927, 1931, 1935, 1494, 1241, 1241, 1918, 1907, 1939, 1917, 1944, 1949, 1241, 1241, 1451,\n  /*  869 */ 1955, 1241, 1241, 1241, 1796, 1727, 2061, 1241, 1241, 1899, 1241, 1660, 1968, 1241, 1241, 1951, 1678, 1978,\n  /*  887 */ 1241, 1241, 1241, 1839, 1241, 1241, 1984, 1982, 1241, 1488, 1241, 1241, 1624, 1450, 1989, 1241, 1241, 1241,\n  /*  905 */ 1870, 1995, 1292, 1241, 1241, 1958, 1261, 1241, 1996, 1241, 1241, 1241, 2039, 2008, 1241, 1241, 1750, 2000,\n  /*  923 */ 1241, 1256, 2001, 1960, 1241, 1564, 1241, 1504, 1241, 1241, 1442, 1241, 1241, 1564, 1528, 1263, 1241, 1508,\n  /*  941 */ 1241, 1241, 1468, 1498, 2006, 1540, 2015, 1539, 2014, 1748, 2013, 1539, 1831, 2014, 2012, 1500, 1567, 2022,\n  /*  959 */ 2021, 1241, 1580, 1241, 1241, 2033, 2037, 1791, 2045, 2031, 1241, 1621, 1241, 1641, 2044, 1241, 1241, 1241,\n  /*  977 */ 2093, 1241, 1241, 2055, 1241, 1241, 2067, 1241, 1283, 1241, 1241, 1241, 2101, 2071, 1241, 1241, 1241, 2073,\n  /*  995 */ 1848, 2040, 1241, 1241, 1241, 2077, 1241, 1241, 2106, 1241, 1241, 2084, 1241, 2111, 1241, 1241, 1381, 1380,\n  /* 1013 */ 1241, 1241, 1241, 2100, 1241, 2129, 2118, 2122, 2126, 2197, 2133, 3010, 2825, 2145, 2698, 2156, 2226, 2160,\n  /* 1031 */ 2161, 2165, 2174, 2293, 2194, 2630, 2201, 2203, 2152, 3019, 2226, 2263, 2209, 2213, 2218, 2269, 2292, 2269,\n  /* 1049 */ 2269, 2184, 2226, 2238, 2148, 2151, 3017, 2245, 2214, 2269, 2269, 2185, 2226, 2292, 2269, 2291, 2269, 2269,\n  /* 1067 */ 2269, 2292, 2205, 3019, 2226, 2226, 2160, 2160, 2160, 2261, 2160, 2160, 2160, 2262, 2276, 2160, 2160, 2277,\n  /* 1085 */ 2216, 2283, 2216, 2269, 2269, 2268, 2269, 2267, 2269, 2269, 2269, 2271, 2568, 2292, 2269, 2293, 2269, 2182,\n  /* 1103 */ 2190, 2269, 2186, 2226, 2226, 2226, 2226, 2227, 2160, 2160, 2160, 2160, 2263, 2160, 2275, 2277, 2282, 2215,\n  /* 1121 */ 2217, 2269, 2269, 2291, 2269, 2269, 2293, 2291, 2269, 2220, 2269, 2295, 2294, 2269, 2269, 2305, 2233, 2262,\n  /* 1139 */ 2278, 2218, 2269, 2234, 2226, 2226, 2228, 2160, 2160, 2160, 2289, 2220, 2294, 2294, 2269, 2269, 2304, 2269,\n  /* 1157 */ 2160, 2160, 2287, 2269, 2269, 2305, 2269, 2269, 2312, 2269, 2269, 2225, 2226, 2160, 2287, 2289, 2219, 2304,\n  /* 1175 */ 2295, 2314, 2234, 2226, 2314, 2269, 2226, 2226, 2160, 2288, 2219, 2222, 2304, 2296, 2269, 2224, 2160, 2160,\n  /* 1193 */ 2269, 2302, 2294, 2314, 2224, 2226, 2288, 2220, 2294, 2269, 2290, 2269, 2269, 2293, 2269, 2269, 2269, 2269,\n  /* 1211 */ 2270, 2221, 2313, 2225, 2227, 2160, 2300, 2269, 2225, 2261, 2309, 2234, 2229, 2223, 2318, 2318, 2318, 2328,\n  /* 1229 */ 2336, 2340, 2344, 2350, 2637, 2712, 2358, 2362, 2372, 2135, 2378, 2398, 2135, 2135, 2135, 2135, 2136, 2417,\n  /* 1247 */ 2241, 2135, 2378, 2135, 2135, 2980, 2984, 2135, 3006, 2135, 2135, 2135, 2945, 2931, 2425, 2400, 2135, 2135,\n  /* 1265 */ 2135, 2954, 2135, 2481, 2433, 2135, 2135, 2988, 2824, 2135, 2135, 2482, 2434, 2135, 2135, 2440, 2445, 2452,\n  /* 1283 */ 2135, 2135, 2998, 3002, 2961, 2441, 2446, 2453, 2463, 2974, 2135, 2135, 2135, 2140, 2642, 2709, 2459, 2470,\n  /* 1301 */ 2465, 2135, 2135, 3005, 2135, 2135, 2987, 2823, 2458, 2469, 2464, 2975, 2135, 2135, 2135, 2353, 2488, 2447,\n  /* 1319 */ 2324, 2974, 2135, 2409, 2459, 2448, 2135, 2961, 2487, 2446, 2476, 2323, 2973, 2135, 2135, 2135, 2354, 2476,\n  /* 1337 */ 2974, 2135, 2135, 2135, 2957, 2135, 2135, 2960, 2135, 2135, 2135, 2363, 2409, 2459, 2474, 2465, 2487, 2571,\n  /* 1355 */ 2973, 2135, 2135, 2168, 2973, 2135, 2135, 2135, 2959, 2135, 2135, 2135, 2506, 2135, 2957, 2488, 2170, 2135,\n  /* 1373 */ 2135, 2135, 2960, 2135, 2818, 2493, 2135, 2135, 3033, 2135, 2135, 2135, 2934, 2819, 2494, 2135, 2135, 2135,\n  /* 1391 */ 2976, 2780, 2499, 2135, 2135, 2135, 3000, 2968, 2135, 2935, 2135, 2135, 2135, 2364, 2507, 2135, 2135, 2934,\n  /* 1409 */ 2135, 2135, 2780, 2492, 2507, 2135, 2135, 2506, 2780, 2135, 2135, 2782, 2780, 2135, 2782, 2135, 2783, 2374,\n  /* 1427 */ 2514, 2135, 2135, 2135, 3007, 2530, 2974, 2135, 2135, 2135, 3008, 2135, 2135, 2134, 2135, 2526, 2531, 2975,\n  /* 1445 */ 2135, 2135, 3042, 2581, 2575, 2956, 2135, 2135, 2135, 2394, 2135, 2508, 2535, 2840, 2844, 2495, 2135, 2135,\n  /* 1463 */ 2136, 2684, 2537, 2842, 2846, 2135, 2136, 2561, 2581, 2551, 2536, 2841, 2845, 2975, 3043, 2582, 2843, 2555,\n  /* 1481 */ 2135, 3040, 3044, 2538, 2844, 2975, 2135, 2135, 2253, 2644, 2672, 2542, 2554, 2135, 2135, 2346, 2873, 2551,\n  /* 1499 */ 2555, 2135, 2135, 2135, 2381, 2559, 2565, 2538, 2553, 2135, 2560, 2914, 2576, 2590, 2135, 2135, 2135, 2408,\n  /* 1517 */ 2136, 2596, 2624, 2135, 2135, 2135, 2409, 2135, 2618, 2597, 3008, 2135, 2135, 2380, 2956, 2601, 2135, 2135,\n  /* 1535 */ 2135, 2410, 2620, 2624, 2135, 2136, 2383, 2135, 2135, 2783, 2623, 2135, 2135, 2393, 2888, 2136, 2621, 3008,\n  /* 1553 */ 2135, 2618, 2618, 2622, 2135, 2135, 2405, 2414, 2619, 2384, 2624, 2135, 2136, 2950, 2135, 2138, 2135, 2139,\n  /* 1571 */ 2135, 2604, 2623, 2135, 2140, 2878, 2665, 2957, 2622, 2135, 2135, 2428, 2762, 2606, 2612, 2135, 2135, 2501,\n  /* 1589 */ 2586, 2604, 3038, 2135, 2604, 3036, 2387, 2958, 2386, 2135, 2141, 2135, 2421, 2387, 2385, 2135, 2385, 2384,\n  /* 1607 */ 2384, 2135, 2386, 2628, 2384, 2135, 2135, 2501, 2596, 2591, 2135, 2135, 2135, 2400, 2135, 2634, 2135, 2135,\n  /* 1625 */ 2559, 2580, 2575, 2648, 2135, 2135, 2135, 2429, 2649, 2135, 2135, 2135, 2435, 2654, 2658, 2135, 2135, 2135,\n  /* 1643 */ 2436, 2649, 2178, 2659, 2135, 2135, 2595, 2601, 2669, 2677, 2135, 2135, 2616, 2957, 2879, 2665, 2691, 2135,\n  /* 1661 */ 2363, 2367, 2900, 2878, 2664, 2690, 2975, 2877, 2643, 2670, 2974, 2671, 2975, 2135, 2135, 2619, 2608, 2669,\n  /* 1679 */ 2673, 2135, 2135, 2653, 2177, 2672, 2135, 2135, 2135, 2486, 2168, 2251, 2255, 2695, 2974, 2709, 2135, 2135,\n  /* 1697 */ 2135, 2487, 2169, 2399, 2716, 2975, 2135, 2363, 2770, 2776, 2640, 2717, 2135, 2135, 2729, 2135, 2135, 2641,\n  /* 1715 */ 2718, 2135, 2135, 2135, 2505, 2135, 2640, 2257, 2974, 2135, 2727, 2975, 2135, 2365, 2332, 2895, 2957, 2135,\n  /* 1733 */ 2959, 2135, 2365, 2749, 2754, 2959, 2958, 2958, 2135, 2380, 2793, 2799, 2135, 2735, 2738, 2135, 2381, 2135,\n  /* 1751 */ 2135, 2940, 2974, 2135, 2744, 2135, 2135, 2739, 2519, 2976, 2745, 2135, 2135, 2135, 2509, 2755, 2135, 2135,\n  /* 1769 */ 2135, 2510, 2772, 2778, 2135, 2135, 2740, 2520, 2135, 2771, 2777, 2135, 2135, 2759, 2750, 2792, 2798, 2135,\n  /* 1787 */ 2135, 2781, 2392, 2779, 2135, 2135, 2135, 2521, 2135, 2679, 2248, 2135, 2135, 2681, 2480, 2135, 2135, 2786,\n  /* 1805 */ 3000, 2135, 2679, 2683, 2135, 2135, 2416, 2135, 2135, 2135, 2525, 2135, 2730, 2135, 2135, 2135, 2560, 2581,\n  /* 1823 */ 2135, 2805, 2135, 2135, 2804, 2962, 2832, 2974, 2135, 2382, 2135, 2135, 2958, 2135, 2135, 2960, 2135, 2829,\n  /* 1841 */ 2833, 2975, 2961, 2965, 2969, 2973, 2968, 2972, 2135, 2135, 2135, 2641, 2135, 2515, 2966, 2970, 2851, 2478,\n  /* 1859 */ 2135, 2135, 2808, 2135, 2809, 2135, 2135, 2135, 2722, 2852, 2479, 2135, 2135, 2815, 2135, 2135, 2766, 2853,\n  /* 1877 */ 2480, 2135, 2857, 2479, 2135, 2388, 2723, 2135, 2364, 2331, 2894, 2858, 2480, 2135, 2135, 2850, 2478, 2135,\n  /* 1895 */ 2135, 2135, 2806, 2864, 2135, 2399, 2256, 2974, 2865, 2135, 2135, 2862, 2135, 2135, 2135, 2685, 2807, 2865,\n  /* 1913 */ 2135, 2135, 2807, 2863, 2135, 2135, 2135, 2686, 2884, 2807, 2135, 2809, 2807, 2135, 2135, 2807, 2806, 2705,\n  /* 1931 */ 2810, 2808, 2700, 2869, 2702, 2702, 2702, 2704, 2883, 2135, 2135, 2135, 2730, 2884, 2135, 2135, 2135, 2731,\n  /* 1949 */ 2321, 2546, 2135, 2135, 2876, 2255, 2889, 2322, 2547, 2135, 2401, 2135, 2135, 2135, 2949, 2367, 2893, 2544,\n  /* 1967 */ 2973, 2906, 2973, 2135, 2135, 2877, 2663, 2368, 2901, 2907, 2974, 2366, 2899, 2905, 2972, 2920, 2974, 2135,\n  /* 1985 */ 2135, 2911, 2900, 2920, 2363, 2913, 2918, 2465, 2941, 2975, 2135, 2135, 2924, 2928, 2974, 2945, 2931, 2135,\n  /* 2003 */ 2135, 2135, 2765, 2136, 2955, 2135, 2135, 2939, 2931, 2380, 2135, 2135, 2380, 2135, 2135, 2135, 2780, 2507,\n  /* 2021 */ 2137, 2135, 2137, 2135, 2139, 2135, 2806, 2810, 2135, 2135, 2135, 2992, 2135, 2135, 2962, 2966, 2970, 2974,\n  /* 2039 */ 2135, 2135, 2787, 3014, 2135, 2521, 2993, 2135, 2135, 2135, 2803, 2135, 2135, 2135, 2618, 2607, 2997, 3001,\n  /* 2057 */ 2135, 2135, 2963, 2967, 2971, 2975, 2135, 2135, 2791, 2797, 2135, 3009, 2999, 3003, 2787, 3001, 2135, 2135,\n  /* 2075 */ 2964, 2968, 2785, 2999, 3003, 2135, 2135, 2135, 2804, 2785, 2999, 3004, 2135, 2135, 2135, 2807, 2135, 2135,\n  /* 2093 */ 3023, 2135, 2135, 2135, 2811, 2135, 2135, 3027, 2135, 2135, 2135, 2837, 2968, 3028, 2135, 2135, 2135, 2875,\n  /* 2111 */ 2135, 2784, 3029, 2135, 2408, 2457, 2446, 0, 14, 0, -2120220672, 1610612736, -2074083328, -2002780160,\n  /* 2125 */ -2111830528, 1073872896, 1342177280, 1075807216, 4096, 16384, 2048, 8192, 0, 8192, 0, 0, 0, 0, 1, 0, 0, 0,\n  /* 2143 */ 2, 0, -2145386496, 8388608, 1073741824, 0, 0x80000000, 0x80000000, 2097152, 2097152, 2097152, 536870912, 0,\n  /* 2156 */ 0, 134217728, 33554432, 1536, 268435456, 268435456, 268435456, 268435456, 128, 256, 32, 0, 65536, 131072,\n  /* 2170 */ 524288, 16777216, 268435456, 0x80000000, 1572864, 1835008, 640, 32768, 65536, 262144, 1048576, 2097152,\n  /* 2182 */ 196608, 196800, 196608, 196608, 0, 131072, 131072, 131072, 196608, 196624, 196608, 196624, 196608, 196608,\n  /* 2196 */ 128, 4096, 16384, 16384, 2048, 0, 4, 0, 0, 0x80000000, 2097152, 0, 1024, 32, 32, 0, 65536, 1572864,\n  /* 2214 */ 1048576, 32768, 32768, 32768, 32768, 196608, 196608, 196608, 64, 64, 196608, 196608, 131072, 131072,\n  /* 2228 */ 131072, 131072, 268435456, 268435456, 64, 196736, 196608, 196608, 196608, 131072, 196608, 196608, 16384, 4,\n  /* 2242 */ 4, 4, 2, 32, 32, 65536, 1048576, 12582912, 1073741824, 0, 0, 2, 8, 16, 96, 2048, 32768, 0, 0, 131072,\n  /* 2262 */ 268435456, 268435456, 268435456, 256, 256, 196608, 196672, 196608, 196608, 196608, 196608, 4, 0, 256, 256,\n  /* 2277 */ 256, 256, 32, 32, 32768, 32, 32, 32, 32, 32768, 268435456, 268435456, 268435456, 196608, 196608, 196608,\n  /* 2293 */ 196624, 196608, 196608, 196608, 16, 16, 16, 268435456, 196608, 64, 64, 64, 196608, 196608, 196608, 196672,\n  /* 2309 */ 268435456, 64, 64, 196608, 196608, 16, 196608, 196608, 196608, 268435456, 64, 196608, 131072, 262144,\n  /* 2323 */ 4194304, 25165824, 33554432, 134217728, 268435456, 268435456, 196608, 262152, 8, 256, 512, 3072, 16384,\n  /* 2336 */ 200, -1073741816, 8392713, 40, 8392718, 520, 807404072, 40, 520, 100663304, 0, 0, -540651761, -540651761,\n  /* 2350 */ 257589048, 0, 262144, 0, 0, 3, 8, 256, 0, 4, 6, 4100, 8388612, 0, 0, 0, 3, 4, 8, 256, 512, 1024, 0,\n  /* 2373 */ 2097152, 0, 0, -537854471, -537854471, 0, 100663296, 0, 0, 1, 2, 0, 0, 0, 16384, 0, 0, 0, 96, 14336, 0, 0,\n  /* 2395 */ 0, 7, 8, 234881024, 0, 0, 0, 8, 0, 0, 0, 0, 262144, 0, 0, 16, 64, 384, 512, 0, 1, 1, 0, 12582912, 0, 0, 0,\n  /* 2422 */ 0, 33554432, 67108864, -606084144, -606084144, -606084138, 0, 0, 28, 32, 768, 1966080, -608174080, 0, 0, 0,\n  /* 2438 */ 14, 35056, 16, 64, 896, 24576, 98304, 98304, 131072, 262144, 524288, 1048576, 4194304, 25165824, 1048576,\n  /* 2453 */ 62914560, 134217728, -805306368, 0, 384, 512, 16384, 65536, 131072, 262144, 29360128, 33554432, 134217728,\n  /* 2466 */ 268435456, 1073741824, 0x80000000, 262144, 524288, 1048576, 29360128, 33554432, 524288, 1048576, 16777216,\n  /* 2477 */ 33554432, 134217728, 268435456, 1073741824, 0, 0, 0, 123856, 1966080, 0, 64, 384, 16384, 65536, 131072,\n  /* 2492 */ 16384, 65536, 524288, 268435456, 0x80000000, 0, 0, 524288, 0x80000000, 0, 0, 1, 16, 0, 256, 524288, 0, 0,\n  /* 2510 */ 0, 25, 96, 128, -537854471, 0, 0, 0, 32, 7404800, -545259520, 0, 0, 0, 60, 0, 249, 64768, 1048576, 6291456,\n  /* 2530 */ 6291456, 25165824, 100663296, 402653184, 1073741824, 96, 128, 1280, 2048, 4096, 57344, 6291456, 57344,\n  /* 2543 */ 6291456, 8388608, 16777216, 33554432, 201326592, 1342177280, 0x80000000, 0, 57344, 6291456, 8388608,\n  /* 2554 */ 100663296, 134217728, 0x80000000, 0, 0, 0, 1, 8, 16, 64, 128, 64, 128, 256, 1024, 131072, 131072, 131072,\n  /* 2572 */ 262144, 524288, 16777216, 57344, 6291456, 8388608, 67108864, 134217728, 64, 256, 1024, 2048, 4096, 57344,\n  /* 2586 */ 64, 256, 0, 24576, 32768, 6291456, 67108864, 134217728, 0, 1, 64, 256, 24576, 32768, 4194304, 32768,\n  /* 2602 */ 4194304, 67108864, 0, 0, 64, 256, 0, 0, 24576, 32768, 0, 16384, 4194304, 67108864, 64, 16384, 0, 0, 1, 64,\n  /* 2622 */ 256, 16384, 4194304, 67108864, 0, 0, 0, 16384, 0, 16384, 16384, 0, -470447874, -470447874, -470447874, 0,\n  /* 2638 */ 0, 128, 0, 0, 8, 96, 2048, 32768, 262144, 8388608, 35056, 1376256, -471859200, 0, 0, 14, 16, 224, 2048,\n  /* 2657 */ 32768, 2097152, 4194304, 8388608, -486539264, 0, 96, 128, 2048, 32768, 262144, 2097152, 262144, 2097152,\n  /* 2671 */ 8388608, 33554432, 536870912, 1073741824, 0x80000000, 0, 1610612736, 0x80000000, 0, 0, 1, 524288, 1048576,\n  /* 2684 */ 12582912, 0, 0, 0, 151311, 264503296, 2097152, 8388608, 33554432, 1610612736, 0x80000000, 262144, 8388608,\n  /* 2697 */ 33554432, 536870912, 67108864, 4194304, 0, 4194304, 0, 4194304, 4194304, 0, 0, 524288, 8388608, 536870912,\n  /* 2711 */ 1073741824, 0x80000000, 1, 4097, 8388609, 96, 2048, 32768, 1073741824, 0x80000000, 0, 96, 2048,\n  /* 2724 */ 0x80000000, 0, 0, 96, 2048, 0, 0, 1, 12582912, 0, 0, 0, 0, 1641895695, 1641895695, 0, 0, 0, 249, 7404800,\n  /* 2744 */ 15, 87808, 1835008, 1639972864, 0, 768, 5120, 16384, 65536, 1835008, 1835008, 12582912, 16777216,\n  /* 2757 */ 1610612736, 0, 3, 4, 8, 768, 4096, 65536, 0, 0, 256, 512, 786432, 8, 256, 512, 4096, 16384, 1835008, 16384,\n  /* 2777 */ 1835008, 12582912, 1610612736, 0, 0, 0, 256, 0, 0, 0, 4, 8, 16, 32, 1, 2, 8, 256, 16384, 524288, 16384,\n  /* 2798 */ 524288, 1048576, 12582912, 1610612736, 0, 0, 0, 8388608, 0, 0, 0, 524288, 4194304, 0, 0, 0, 8388608,\n  /* 2815 */ -548662288, -548662288, -548662288, 0, 0, 256, 16384, 65536, 520093696, -1073741824, 0, 0, 0, 16777216, 0,\n  /* 2830 */ 16, 32, 960, 4096, 4980736, 520093696, 1073741824, 0, 32, 896, 4096, 57344, 1048576, 6291456, 8388608,\n  /* 2845 */ 16777216, 100663296, 134217728, 268435456, 0x80000000, 0, 512, 786432, 4194304, 33554432, 134217728,\n  /* 2856 */ 268435456, 0, 786432, 4194304, 134217728, 268435456, 0, 524288, 4194304, 268435456, 0, 0, 0, 0, 0, 4194304,\n  /* 2872 */ 4194304, -540651761, 0, 0, 0, 2, 4, 8, 16, 96, 128, 264503296, -805306368, 0, 0, 0, 8, 256, 512, 19456,\n  /* 2892 */ 131072, 3072, 16384, 131072, 262144, 8388608, 16777216, 512, 1024, 2048, 16384, 131072, 262144, 131072,\n  /* 2906 */ 262144, 8388608, 33554432, 201326592, 268435456, 0, 3, 4, 256, 1024, 2048, 57344, 16384, 131072, 8388608,\n  /* 2921 */ 33554432, 134217728, 268435456, 0, 3, 256, 1024, 16384, 131072, 33554432, 134217728, 1073741824,\n  /* 2933 */ 0x80000000, 0, 0, 256, 524288, 0x80000000, 0, 3, 256, 33554432, 134217728, 1073741824, 0, 1, 2, 33554432,\n  /* 2949 */ 1, 2, 134217728, 1073741824, 0, 1, 2, 134217728, 0, 0, 0, 64, 0, 0, 0, 16, 32, 896, 4096, 786432, 4194304,\n  /* 2970 */ 16777216, 33554432, 201326592, 268435456, 1073741824, 0x80000000, 0, 0, 0, 15, 0, 4980736, 4980736,\n  /* 2983 */ 4980736, 70460, 70460, 3478332, 0, 0, 1008, 4984832, 520093696, 60, 4864, 65536, 0, 0, 0, 12, 16, 32, 256,\n  /* 3002 */ 512, 4096, 65536, 0, 0, 0, 67108864, 0, 0, 0, 12, 0, 256, 512, 65536, 0, 0, 1024, 512, 131072, 131072, 4,\n  /* 3024 */ 16, 32, 65536, 0, 4, 16, 32, 0, 0, 0, 4, 16, 0, 0, 16384, 67108864, 0, 0, 1, 24, 96, 128, 256, 1024\n];\n\nJSONiqTokenizer.TOKEN =\n[\n  \"(0)\",\n  \"JSONChar\",\n  \"JSONCharRef\",\n  \"JSONPredefinedCharRef\",\n  \"ModuleDecl\",\n  \"Annotation\",\n  \"OptionDecl\",\n  \"Operator\",\n  \"Variable\",\n  \"Tag\",\n  \"EndTag\",\n  \"PragmaContents\",\n  \"DirCommentContents\",\n  \"DirPIContents\",\n  \"CDataSectionContents\",\n  \"AttrTest\",\n  \"Wildcard\",\n  \"EQName\",\n  \"IntegerLiteral\",\n  \"DecimalLiteral\",\n  \"DoubleLiteral\",\n  \"PredefinedEntityRef\",\n  \"'\\\"\\\"'\",\n  \"EscapeApos\",\n  \"AposChar\",\n  \"ElementContentChar\",\n  \"QuotAttrContentChar\",\n  \"AposAttrContentChar\",\n  \"NCName\",\n  \"QName\",\n  \"S\",\n  \"CharRef\",\n  \"CommentContents\",\n  \"DocTag\",\n  \"DocCommentContents\",\n  \"EOF\",\n  \"'!'\",\n  \"'\\\"'\",\n  \"'#'\",\n  \"'#)'\",\n  \"'$$'\",\n  \"''''\",\n  \"'('\",\n  \"'(#'\",\n  \"'(:'\",\n  \"'(:~'\",\n  \"')'\",\n  \"'*'\",\n  \"'*'\",\n  \"','\",\n  \"'-->'\",\n  \"'.'\",\n  \"'/'\",\n  \"'/>'\",\n  \"':'\",\n  \"':)'\",\n  \"';'\",\n  \"'<!--'\",\n  \"'<![CDATA['\",\n  \"'<?'\",\n  \"'='\",\n  \"'>'\",\n  \"'?'\",\n  \"'?>'\",\n  \"'NaN'\",\n  \"'['\",\n  \"']'\",\n  \"']]>'\",\n  \"'after'\",\n  \"'all'\",\n  \"'allowing'\",\n  \"'ancestor'\",\n  \"'ancestor-or-self'\",\n  \"'and'\",\n  \"'any'\",\n  \"'append'\",\n  \"'array'\",\n  \"'as'\",\n  \"'ascending'\",\n  \"'at'\",\n  \"'attribute'\",\n  \"'base-uri'\",\n  \"'before'\",\n  \"'boundary-space'\",\n  \"'break'\",\n  \"'by'\",\n  \"'case'\",\n  \"'cast'\",\n  \"'castable'\",\n  \"'catch'\",\n  \"'check'\",\n  \"'child'\",\n  \"'collation'\",\n  \"'collection'\",\n  \"'comment'\",\n  \"'constraint'\",\n  \"'construction'\",\n  \"'contains'\",\n  \"'content'\",\n  \"'context'\",\n  \"'continue'\",\n  \"'copy'\",\n  \"'copy-namespaces'\",\n  \"'count'\",\n  \"'decimal-format'\",\n  \"'decimal-separator'\",\n  \"'declare'\",\n  \"'default'\",\n  \"'delete'\",\n  \"'descendant'\",\n  \"'descendant-or-self'\",\n  \"'descending'\",\n  \"'diacritics'\",\n  \"'different'\",\n  \"'digit'\",\n  \"'distance'\",\n  \"'div'\",\n  \"'document'\",\n  \"'document-node'\",\n  \"'element'\",\n  \"'else'\",\n  \"'empty'\",\n  \"'empty-sequence'\",\n  \"'encoding'\",\n  \"'end'\",\n  \"'entire'\",\n  \"'eq'\",\n  \"'every'\",\n  \"'exactly'\",\n  \"'except'\",\n  \"'exit'\",\n  \"'external'\",\n  \"'first'\",\n  \"'following'\",\n  \"'following-sibling'\",\n  \"'for'\",\n  \"'foreach'\",\n  \"'foreign'\",\n  \"'from'\",\n  \"'ft-option'\",\n  \"'ftand'\",\n  \"'ftnot'\",\n  \"'ftor'\",\n  \"'function'\",\n  \"'ge'\",\n  \"'greatest'\",\n  \"'group'\",\n  \"'grouping-separator'\",\n  \"'gt'\",\n  \"'idiv'\",\n  \"'if'\",\n  \"'import'\",\n  \"'in'\",\n  \"'index'\",\n  \"'infinity'\",\n  \"'inherit'\",\n  \"'insensitive'\",\n  \"'insert'\",\n  \"'instance'\",\n  \"'integrity'\",\n  \"'intersect'\",\n  \"'into'\",\n  \"'is'\",\n  \"'item'\",\n  \"'json'\",\n  \"'json-item'\",\n  \"'key'\",\n  \"'language'\",\n  \"'last'\",\n  \"'lax'\",\n  \"'le'\",\n  \"'least'\",\n  \"'let'\",\n  \"'levels'\",\n  \"'loop'\",\n  \"'lowercase'\",\n  \"'lt'\",\n  \"'minus-sign'\",\n  \"'mod'\",\n  \"'modify'\",\n  \"'module'\",\n  \"'most'\",\n  \"'namespace'\",\n  \"'namespace-node'\",\n  \"'ne'\",\n  \"'next'\",\n  \"'no'\",\n  \"'no-inherit'\",\n  \"'no-preserve'\",\n  \"'node'\",\n  \"'nodes'\",\n  \"'not'\",\n  \"'object'\",\n  \"'occurs'\",\n  \"'of'\",\n  \"'on'\",\n  \"'only'\",\n  \"'option'\",\n  \"'or'\",\n  \"'order'\",\n  \"'ordered'\",\n  \"'ordering'\",\n  \"'paragraph'\",\n  \"'paragraphs'\",\n  \"'parent'\",\n  \"'pattern-separator'\",\n  \"'per-mille'\",\n  \"'percent'\",\n  \"'phrase'\",\n  \"'position'\",\n  \"'preceding'\",\n  \"'preceding-sibling'\",\n  \"'preserve'\",\n  \"'previous'\",\n  \"'processing-instruction'\",\n  \"'relationship'\",\n  \"'rename'\",\n  \"'replace'\",\n  \"'return'\",\n  \"'returning'\",\n  \"'revalidation'\",\n  \"'same'\",\n  \"'satisfies'\",\n  \"'schema'\",\n  \"'schema-attribute'\",\n  \"'schema-element'\",\n  \"'score'\",\n  \"'self'\",\n  \"'sensitive'\",\n  \"'sentence'\",\n  \"'sentences'\",\n  \"'skip'\",\n  \"'sliding'\",\n  \"'some'\",\n  \"'stable'\",\n  \"'start'\",\n  \"'stemming'\",\n  \"'stop'\",\n  \"'strict'\",\n  \"'strip'\",\n  \"'structured-item'\",\n  \"'switch'\",\n  \"'text'\",\n  \"'then'\",\n  \"'thesaurus'\",\n  \"'times'\",\n  \"'to'\",\n  \"'treat'\",\n  \"'try'\",\n  \"'tumbling'\",\n  \"'type'\",\n  \"'typeswitch'\",\n  \"'union'\",\n  \"'unique'\",\n  \"'unordered'\",\n  \"'updating'\",\n  \"'uppercase'\",\n  \"'using'\",\n  \"'validate'\",\n  \"'value'\",\n  \"'variable'\",\n  \"'version'\",\n  \"'weight'\",\n  \"'when'\",\n  \"'where'\",\n  \"'while'\",\n  \"'wildcards'\",\n  \"'window'\",\n  \"'with'\",\n  \"'without'\",\n  \"'word'\",\n  \"'words'\",\n  \"'xquery'\",\n  \"'zero-digit'\",\n  \"'{'\",\n  \"'{{'\",\n  \"'|'\",\n  \"'}'\",\n  \"'}}'\"\n];\n\n// End\n\n},{}],\"/node_modules/xqlint/lib/lexers/jsoniq_lexer.js\":[function(_dereq_,module,exports){\n'use strict';\n\nvar JSONiqTokenizer = _dereq_('./JSONiqTokenizer').JSONiqTokenizer;\nvar Lexer = _dereq_('./lexer').Lexer;\n\nvar keys = 'NaN|after|allowing|ancestor|ancestor-or-self|and|append|array|as|ascending|at|attribute|base-uri|before|boundary-space|break|by|case|cast|castable|catch|child|collation|comment|constraint|construction|contains|context|continue|copy|copy-namespaces|count|decimal-format|decimal-separator|declare|default|delete|descendant|descendant-or-self|descending|digit|div|document|document-node|element|else|empty|empty-sequence|encoding|end|eq|every|except|exit|external|false|first|following|following-sibling|for|from|ft-option|function|ge|greatest|group|grouping-separator|gt|idiv|if|import|in|index|infinity|insert|instance|integrity|intersect|into|is|item|json|json-item|jsoniq|last|lax|le|least|let|loop|lt|minus-sign|mod|modify|module|namespace|namespace-node|ne|next|node|nodes|not|null|object|of|only|option|or|order|ordered|ordering|paragraphs|parent|pattern-separator|per-mille|percent|preceding|preceding-sibling|previous|processing-instruction|rename|replace|return|returning|revalidation|satisfies|schema|schema-attribute|schema-element|score|select|self|sentences|sliding|some|stable|start|strict|switch|text|then|times|to|treat|true|try|tumbling|type|typeswitch|union|unordered|updating|validate|value|variable|version|when|where|while|window|with|words|xquery|zero-digit'.split('|');\nvar keywords = keys.map(function(val) { return { name: '\\'' + val + '\\'', token: 'keyword' }; });\nvar ncnames = keys.map(function(val) { return { name: '\\'' + val + '\\'', token: 'text', next: function(stack){ stack.pop(); } }; });\n\nvar cdata = 'constant.language';\nvar number = 'constant';\nvar xmlcomment = 'comment';\nvar pi = 'xml-pe';\nvar pragma = 'constant.buildin';\nvar n = function(name){\n    return '\\'' + name + '\\'';\n};\nvar Rules = {\n    start: [\n        { name: n('(#'), token: pragma, next: function(stack){ stack.push('Pragma'); } },\n        { name: n('(:'), token: 'comment', next: function(stack){ stack.push('Comment'); } },\n        { name: n('(:~'), token: 'comment.doc', next: function(stack){ stack.push('CommentDoc'); } },\n        { name: n('<!--'), token: xmlcomment, next: function(stack){ stack.push('XMLComment'); } },\n        { name: n('<?'), token: pi, next: function(stack) { stack.push('PI'); } },\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.push('AposString'); } },\n        { name: n('\"'), token: 'string', next: function(stack){ stack.push('QuotString'); } },\n        { name: 'Annotation', token: 'support.function' },\n        { name: 'ModuleDecl', token: 'keyword', next: function(stack){ stack.push('Prefix'); } },\n        { name: 'OptionDecl', token: 'keyword', next: function(stack){ stack.push('_EQName'); } },\n        { name: 'AttrTest', token: 'support.type' },\n        { name: 'Variable', token: 'variable' },\n        { name: n('<![CDATA['), token: cdata, next: function(stack){ stack.push('CData'); } },\n        { name: 'IntegerLiteral', token: number },\n        { name: 'DecimalLiteral', token: number },\n        { name: 'DoubleLiteral', token: number },\n        { name: 'Operator', token: 'keyword.operator' },\n        { name: 'EQName', token: function(val) { return keys.indexOf(val) !== -1 ? 'keyword' : 'support.function'; } },\n        { name: n('('), token: 'lparen' },\n        { name: n(')'), token: 'rparen' },\n        { name: 'Tag', token: 'meta.tag', next: function(stack){ stack.push('StartTag'); } },\n        { name: n('}'), token: 'text', next: function(stack){ if(stack.length > 1) { stack.pop(); } } },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } } //, next: function(stack){ if(stack.length > 1) { stack.pop(); } } }\n    ].concat(keywords),\n    _EQName: [\n        { name: 'EQName', token: 'text', next: function(stack) { stack.pop(); } }\n    ].concat(ncnames),\n    Prefix: [\n        { name: 'NCName', token: 'text', next: function(stack) { stack.pop(); } }\n    ].concat(ncnames),\n    StartTag: [\n        { name: n('>'), token: 'meta.tag', next: function(stack){ stack.push('TagContent'); } },\n        { name: 'QName', token: 'entity.other.attribute-name' },\n        { name: n('='), token: 'text' },\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.push('AposAttr'); } },\n        { name: n('\"'), token: 'string', next: function(stack){ stack.push('QuotAttr'); } },\n        { name: n('/>'), token: 'meta.tag.r', next: function(stack){ stack.pop(); } }\n    ],\n    TagContent: [\n        { name: 'ElementContentChar', token: 'text' },\n        { name: n('<![CDATA['), token: cdata, next: function(stack){ stack.push('CData'); } },\n        { name: n('<!--'), token: xmlcomment, next: function(stack){ stack.push('XMLComment'); } },\n        { name: 'Tag', token: 'meta.tag', next: function(stack){ stack.push('StartTag'); } },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: n('{{'), token: 'text' },\n        { name: n('}}'), token: 'text' },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } },\n        { name: 'EndTag', token: 'meta.tag', next: function(stack){ stack.pop(); stack.pop(); } }\n    ],\n    AposAttr: [\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'EscapeApos', token: 'constant.language.escape' },\n        { name: 'AposAttrContentChar', token: 'string' },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: n('{{'), token: 'string' },\n        { name: n('}}'), token: 'string' },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } }\n    ],\n    QuotAttr: [\n        { name: n('\\\"'), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'EscapeQuot', token: 'constant.language.escape' },\n        { name: 'QuotAttrContentChar', token: 'string' },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: n('{{'), token: 'string' },\n        { name: n('}}'), token: 'string' },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } }\n    ],\n    Pragma: [\n        { name: 'PragmaContents', token: pragma },\n        { name: n('#'), token: pragma },\n        { name: n('#)'), token: pragma, next: function(stack){ stack.pop(); } }\n    ],\n    Comment: [\n        { name: 'CommentContents', token: 'comment' },\n        { name: n('(:'), token: 'comment', next: function(stack){ stack.push('Comment'); } },\n        { name: n(':)'), token: 'comment', next: function(stack){ stack.pop(); } }\n    ],\n    CommentDoc: [\n        { name: 'DocCommentContents', token: 'comment.doc' },\n        { name: 'DocTag', token: 'comment.doc.tag' },\n        { name: n('(:'), token: 'comment.doc', next: function(stack){ stack.push('CommentDoc'); } },\n        { name: n(':)'), token: 'comment.doc', next: function(stack){ stack.pop(); } }\n    ],\n    XMLComment: [\n        { name: 'DirCommentContents', token: xmlcomment },\n        { name: n('-->'), token: xmlcomment, next: function(stack){ stack.pop(); } }\n    ],\n    CData: [\n        { name: 'CDataSectionContents', token: cdata },\n        { name: n(']]>'), token: cdata, next: function(stack){ stack.pop(); } }\n    ],\n    PI: [\n        { name: 'DirPIContents', token: pi },\n        { name: n('?'), token: pi },\n        { name: n('?>'), token: pi, next: function(stack){ stack.pop(); } }\n    ],\n    AposString: [\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: 'EscapeApos', token: 'constant.language.escape' },\n        { name: 'AposChar', token: 'string' }\n    ],\n    QuotString: [\n        { name: n('\"'), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'JSONPredefinedCharRef', token: 'constant.language.escape' },\n        { name: 'JSONCharRef', token: 'constant.language.escape' },\n        { name: 'JSONChar', token: 'string' }\n    ]\n};\n    \nexports.JSONiqLexer = function(){ return new Lexer(JSONiqTokenizer, Rules); };\n},{\"./JSONiqTokenizer\":\"/node_modules/xqlint/lib/lexers/JSONiqTokenizer.js\",\"./lexer\":\"/node_modules/xqlint/lib/lexers/lexer.js\"}],\"/node_modules/xqlint/lib/lexers/lexer.js\":[function(_dereq_,module,exports){\n'use strict';\n\nvar TokenHandler = function(code) {\n    var input = code;\n    this.tokens = [];\n \n    this.reset = function() {\n        input = input;\n        this.tokens = [];\n    };\n    \n    this.startNonterminal = function() {};\n    this.endNonterminal = function() {};\n\n    this.terminal = function(name, begin, end) {\n        this.tokens.push({\n            name: name,\n            value: input.substring(begin, end)\n        });\n    };\n\n    this.whitespace = function(begin, end) {\n        this.tokens.push({\n            name: 'WS',\n            value: input.substring(begin, end)\n        });\n    };\n};\n\nexports.Lexer = function(Tokenizer, Rules) {\n\n    this.tokens = [];\n  \n    this.getLineTokens = function(line, state) {\n        state = (state === 'start' || !state) ? '[\"start\"]' : state;\n        var stack = JSON.parse(state);\n        var h = new TokenHandler(line);\n        var tokenizer = new Tokenizer(line, h);\n        var tokens = [];\n    \n        while(true) {\n            var currentState = stack[stack.length - 1];\n            try {\n                h.tokens = [];\n                tokenizer['parse_' + currentState]();\n                var info = null;\n        \n                if(h.tokens.length > 1 && h.tokens[0].name === 'WS') {\n                    tokens.push({\n                        type: 'text',\n                        value: h.tokens[0].value\n                    });\n                    h.tokens.splice(0, 1);\n                }\n        \n                var token = h.tokens[0];\n                var rules  = Rules[currentState];\n                for(var k = 0; k < rules.length; k++) {\n                    var rule = Rules[currentState][k];\n                    if((typeof(rule.name) === 'function' && rule.name(token)) || rule.name === token.name) {\n                        info = rule;\n                        break;\n                    }\n                }\n        \n                if(token.name === 'EOF') { break; }\n                if(token.value === '') { throw 'Encountered empty string lexical rule.'; }\n        \n                tokens.push({\n                    type: info === null ? 'text' : (typeof(info.token) === 'function' ? info.token(token.value) : info.token),\n                    value: token.value\n                });\n        \n                if(info && info.next) {\n                    info.next(stack);\n                }\n      \n            } catch(e) {\n                if(e instanceof tokenizer.ParseException) {\n                    var index = 0;\n                    for(var i=0; i < tokens.length; i++) {\n                        index += tokens[i].value.length;\n                    }\n                    tokens.push({ type: 'text', value: line.substring(index) });\n                    return {\n                        tokens: tokens,\n                        state: JSON.stringify(['start'])\n                    };\n                } else {\n                    throw e;\n                }\n            }\n        }\n\n        return {\n            tokens: tokens,\n            state: JSON.stringify(stack)\n        };\n    };\n};\n},{}]},{},[\"/node_modules/xqlint/lib/lexers/jsoniq_lexer.js\"]);\n\n});"
  },
  {
    "path": "lib/ace/mode/xquery/xqlint.js",
    "content": "define(function(require, exports, module) {\nmodule.exports = (function outer (modules, cache, entry) {\n    var previousRequire = typeof require == \"function\" && require;\n    function newRequire(name, jumped){\n        if(!cache[name]) {\n            if(!modules[name]) {\n                var currentRequire = typeof require == \"function\" && require;\n                if (!jumped && currentRequire) return currentRequire(name, true);\n                if (previousRequire) return previousRequire(name, true);\n                var err = new Error('Cannot find module \\'' + name + '\\'');\n                err.code = 'MODULE_NOT_FOUND';\n                throw err;\n            }\n            var m = cache[name] = {exports:{}};\n            modules[name][0].call(m.exports, function(x){\n                var id = modules[name][1][x];\n                return newRequire(id ? id : x);\n            },m,m.exports,outer,modules,cache,entry);\n        }\n        return cache[name].exports;\n    }\n    for(var i=0;i<entry.length;i++) newRequire(entry[i]);\n    return newRequire(entry[0]);\n})\n({\"/node_modules/xqlint/lib/compiler/errors.js\":[function(_dereq_,module,exports){\n'use strict';\n\nvar init = function(that, code, message, pos, type){\n    if(!code) {\n        throw new Error(type + ' code is missing.');\n    }\n    \n    if(!message) {\n        throw new Error(type + ' message is missing.');\n    }\n    \n    if(!pos) {\n        throw new Error(type + ' position is missing.');\n    }\n\n    that.getCode = function(){\n        return code;\n    };\n    \n    that.getMessage = function(){\n        return message;\n    };\n\n    that.getPos = function(){\n        return pos;\n    };\n};\n\nvar StaticError = {};\nvar StaticWarning = {};\nStaticError.prototype = new Error();\nStaticWarning.prototype = new Error();\n\nexports.StaticError = StaticError.prototype.constructor = function(code, message, pos) {\n    init(this, code, message, pos, 'Error');\n};\n\nexports.StaticWarning = StaticWarning.prototype.constructor = function(code, message, pos) {\n    init(this, code, message, pos, 'Warning');\n};\n},{}],\"/node_modules/xqlint/lib/compiler/handlers.js\":[function(_dereq_,module,exports){\n'use strict';\n\nvar TreeOps = _dereq_('../tree_ops').TreeOps;\nvar Errors = _dereq_('./errors');\nvar StaticWarning = Errors.StaticWarning;\n\n//\n// Prolog Handlers\n//\nexports.ModuleDecl = function(translator, rootSctx, node){\n    var prefix = '';\n    return {\n        NCName: function(ncname){\n            prefix = TreeOps.flatten(ncname);\n        },\n\n        URILiteral: function(uri) {\n            uri = TreeOps.flatten(uri);\n            uri = uri.substring(1, uri.length - 1);\n            translator.apply(function(){\n                rootSctx.moduleNamespace = uri;\n                rootSctx.addNamespace(uri, prefix, node.pos, 'moduleDecl');\n            });\n        }\n    };\n};\n\nexports.ModuleImport = function(translator, rootSctx, node) {\n    var prefix = '';\n    var moduleURI;\n    //location hints\n\n    return {\n        NCName: function(ncname){\n            prefix = TreeOps.flatten(ncname);\n        },\n\n        URILiteral: function(uri) {\n            if(moduleURI !== undefined) {\n                //location hints\n                return;\n            }\n            uri = TreeOps.flatten(uri);\n            uri = uri.substring(1, uri.length - 1);\n            moduleURI = uri;\n            translator.apply(function(){\n                rootSctx.importModule(uri, prefix, node.pos);\n            });\n        }\n    };\n};\n\nexports.SchemaImport = function(translator, rootSctx, node) {\n    var prefix = '';\n    var schemaURI;\n    \n    return {\n        SchemaPrefix: function(schemaPrefix) {\n            var SchemaPrefixHandler = function () {\n                this.NCName = function (ncname) {\n                    prefix = TreeOps.flatten(ncname);\n                };\n            };\n            translator.visitChildren(schemaPrefix, new SchemaPrefixHandler());\n        },\n\n        URILiteral: function(uri) {\n            if(schemaURI !== undefined) {\n                //location hints\n                return;\n            }\n            uri = TreeOps.flatten(uri);\n            uri = uri.substring(1, uri.length - 1);\n            schemaURI = uri;\n            translator.apply(function(){\n                rootSctx.addNamespace(uri, prefix, node.pos, 'schema');\n            });\n        }\n    };\n};\n\nexports.DefaultNamespaceDecl = function(translator, rootSctx, node) {\n    var fn = false;\n    var ns = '';\n\n    return {\n        TOKEN: function(token){\n            fn = fn ? true : (token.value === 'function');\n        },\n        URILiteral: function(uri){\n            ns = TreeOps.flatten(uri);\n            ns = ns.substring(1, ns.length - 1);\n            if(!fn) {\n                translator.apply(function(){\n                    throw new StaticWarning('W06', 'Avoid default element namespace declarations.', node.pos);\n                });\n                rootSctx.defaultElementNamespace = ns;\n            } else {\n                rootSctx.defaultFunctionNamespace = ns;\n            }\n        }\n    };\n};\n\nexports.NamespaceDecl = function(translator, rootSctx, node) {\n    var prefix = '';\n    return {\n        NCName: function(ncname) {\n            prefix = TreeOps.flatten(ncname);\n        },\n        URILiteral: function(uri) {\n            uri = TreeOps.flatten(uri);\n            uri = uri.substring(1, uri.length - 1);\n            translator.apply(function(){\n                rootSctx.addNamespace(uri, prefix, node.pos, 'declare');\n            });\n        }\n    };\n};\n\n//\n//\n//\nexports.VarHandler = function(translator, sctx, node){\n    var EQNameHandler = function(eqname){\n        var value = TreeOps.flatten(eqname);\n        translator.apply(function(){\n            var qname = sctx.resolveQName(value, eqname.pos);\n            sctx.addVariable(qname, node.name, eqname.pos);\n        });\n    };\n    return {\n        ExprSingle: function(){ return true; },\n        VarValue: function(){ return true; },\n        VarDefaultValue: function(){ return true; },\n        VarName: EQNameHandler,\n        EQName: EQNameHandler\n    };\n};\n\nexports.VarRefHandler = function(translator, sctx, node){\n    return {\n        VarName: function(eqname){\n            var value = TreeOps.flatten(eqname);\n            translator.apply(function(){\n                var qname = sctx.resolveQName(value, node.pos);\n                if(qname.uri !== '') {\n                    sctx.root.namespaces[qname.uri].used = true;\n                }\n                sctx.addVarRef(qname, eqname.pos);\n            });\n        }\n    };\n};\n/*\nexports.FunctionCallHandler = function(translator, sctx, node, arity){\n    return {\n        EQName: function(eqname){\n            var value = TreeOps.flatten(eqname);\n            translator.apply(function(){\n                var qname = sctx.resolveQName(value, node.pos);\n                if(qname.uri !== '') {\n                    sctx.root.namespaces[qname.uri].used = true;\n                }\n                sctx.addFunctionCall(qname, arity, eqname.pos);\n            });\n        }\n    };\n};\n*/\n},{\"../tree_ops\":\"/node_modules/xqlint/lib/tree_ops.js\",\"./errors\":\"/node_modules/xqlint/lib/compiler/errors.js\"}],\"/node_modules/xqlint/lib/compiler/schema_built-in_types.js\":[function(_dereq_,module,exports){\n'use strict';\n\n/**\n * http://www.w3.org/TR/xpath-functions/#constructor-functions-for-xsd-types\n */\nexports.getSchemaBuiltinTypes = function(){\n    var ns = 'http://www.w3.org/2001/XMLSchema';\n    var SchemaBuiltinTypes = {};\n    SchemaBuiltinTypes[ns] = {\n        variables: {},\n        functions: {}\n    };\n    SchemaBuiltinTypes[ns].functions[ns + '#string#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'string', arity: 1, eqname: { uri: ns, name: 'string' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#boolean#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'boolean', arity: 1, eqname: { uri: ns, name: 'boolean' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#decimal#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'decimal', arity: 1, eqname: { uri: ns, name: 'decimal' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#float#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'float', arity: 1, eqname: { uri: ns, name: 'float' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#double#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'double', arity: 1, eqname: { uri: ns, name: 'double' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#duration#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'duration', arity: 1, eqname: { uri: ns, name: 'duration' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#dateTime#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'dateTime', arity: 1, eqname: { uri: ns, name: 'dateTime' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#time#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'time', arity: 1, eqname: { uri: ns, name: 'time' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#date#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'date', arity: 1, eqname: { uri: ns, name: 'date' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#gYearMonth#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'gYearMonth', arity: 1, eqname: { uri: ns, name: 'gYearMonth' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#gYear#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'gYear', arity: 1, eqname: { uri: ns, name: 'gYear' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#gMonthDay#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'gMonthDay', arity: 1, eqname: { uri: ns, name: 'gMonthDay' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#gDay#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'gDay', arity: 1, eqname: { uri: ns, name: 'gDay' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#gMonth#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'gMonth', arity: 1, eqname: { uri: ns, name: 'gMonth' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#hexBinary#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'hexBinary', arity: 1, eqname: { uri: ns, name: 'hexBinary' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#base64Binary#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'base64Binary', arity: 1, eqname: { uri: ns, name: 'base64Binary' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#anyURI#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'anyURI', arity: 1, eqname: { uri: ns, name: 'anyURI' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#QName#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'QName', arity: 1, eqname: { uri: ns, name: 'QName' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#normalizedString#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'normalizedString', arity: 1, eqname: { uri: ns, name: 'normalizedString' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#token#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'token', arity: 1, eqname: { uri: ns, name: 'token' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#language#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'language', arity: 1, eqname: { uri: ns, name: 'language' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#NMTOKEN#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'NMTOKEN', arity: 1, eqname: { uri: ns, name: 'NMTOKEN' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#Name#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'Name', arity: 1, eqname: { uri: ns, name: 'Name' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#NCName#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'NCName', arity: 1, eqname: { uri: ns, name: 'NCName' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#ID#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'ID', arity: 1, eqname: { uri: ns, name: 'ID' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#IDREF#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'IDREF', arity: 1, eqname: { uri: ns, name: 'IDREF' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#ENTITY#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'ENTITY', arity: 1, eqname: { uri: ns, name: 'ENTITY' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#integer#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'integer', arity: 1, eqname: { uri: ns, name: 'integer' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#nonPositiveInteger#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'nonPositiveInteger', arity: 1, eqname: { uri: ns, name: 'nonPositiveInteger' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#negativeInteger#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'negativeInteger', arity: 1, eqname: { uri: ns, name: 'negativeInteger' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#long#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'long', arity: 1, eqname: { uri: ns, name: 'long' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#int#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'int', arity: 1, eqname: { uri: ns, name: 'int' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#short#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'short', arity: 1, eqname: { uri: ns, name: 'short' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#byte#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'byte', arity: 1, eqname: { uri: ns, name: 'byte' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#nonNegativeInteger#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'nonNegativeInteger', arity: 1, eqname: { uri: ns, name: 'nonNegativeInteger' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#unsignedLong#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'unsignedLong', arity: 1, eqname: { uri: ns, name: 'unsignedLong' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#unsignedInt#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'unsignedInt', arity: 1, eqname: { uri: ns, name: 'unsignedInt' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#unsignedShort#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'unsignedShort', arity: 1, eqname: { uri: ns, name: 'unsignedShort' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#unsignedByte#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'unsignedByte', arity: 1, eqname: { uri: ns, name: 'unsignedByte' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#positiveInteger#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'positiveInteger', arity: 1, eqname: { uri: ns, name: 'positiveInteger' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#yearMonthDuration#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'yearMonthDuration', arity: 1, eqname: { uri: ns, name: 'yearMonthDuration' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#dayTimeDuration#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'dayTimeDuration', arity: 1, eqname: { uri: ns, name: 'dayTimeDuration' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#untypedAtomic#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'untypedAtomic', arity: 1, eqname: { uri: ns, name: 'untypedAtomic' } };\n    return SchemaBuiltinTypes;\n};\n},{}],\"/node_modules/xqlint/lib/compiler/static_context.js\":[function(_dereq_,module,exports){\nexports.StaticContext = function (parent, pos) {\n    'use strict';\n    \n    var TreeOps = _dereq_('../tree_ops').TreeOps;\n    \n    var Errors = _dereq_('./errors');\n    var StaticError = Errors.StaticError;\n    var StaticWarning = Errors.StaticWarning;\n    \n    var getSchemaBuiltinTypes = _dereq_('./schema_built-in_types').getSchemaBuiltinTypes;\n    \n    var emptyPos = { sl:0, sc: 0, el: 0, ec: 0 };\n    var namespaces = {};\n    \n    var getVarKey = function(qname) {\n        return qname.uri + '#' + qname.name;\n    };\n\n    var getFnKey = function(qname, arity) {\n        return getVarKey(qname) + '#' + arity;\n    };\n\n    if(!parent) {\n        namespaces['http://jsoniq.org/functions'] = {\n            prefixes: ['jn'],\n            pos: emptyPos,\n            type: 'module',\n            override: true\n        };\n        namespaces['http://www.28msec.com/modules/collections'] = {\n            prefixes: ['db'],\n            pos: emptyPos,\n            type: 'module',\n            override: true\n        };\n        namespaces['http://www.28msec.com/modules/store'] = {\n            prefixes: ['store'],\n            pos: emptyPos,\n            type: 'module',\n            override: true\n        };\n        namespaces['http://jsoniq.org/function-library'] = {\n            prefixes: ['libjn'],\n            pos: emptyPos,\n            type: 'module',\n            override: true\n        };\n        //namespaces['http://www.28msec.com/modules/mongodb/types'] = {\n        //    prefix: 'ms',\n        //    pos: emptyPos,\n        //    type: 'module',\n        //    override: true\n        //};\n        namespaces['http://www.w3.org/2005/xpath-functions'] = {\n            prefixes: ['fn'],\n            pos: emptyPos,\n            type: 'module',\n            override: true\n        };\n        namespaces['http://www.w3.org/2005/xquery-local-functions'] = {\n            prefixes: ['local'],\n            pos: emptyPos,\n            type: 'declare',\n            override: true\n        };\n        namespaces['http://www.w3.org/2001/XMLSchema-instance'] = {\n            prefixes: ['xsi'],\n            pos: emptyPos,\n            type: 'declare'\n        };\n        namespaces['http://www.w3.org/2001/XMLSchema'] = {\n            prefixes: ['xs'],\n            pos: emptyPos,\n            type: 'declare'\n        };\n        namespaces['http://www.w3.org/XML/1998/namespace'] = {\n            prefixes: ['xml'],\n            pos: emptyPos,\n            type: 'declare'\n        };\n        namespaces['http://zorba.io/annotations'] = {\n            prefixes: ['an'],\n            pos: emptyPos,\n            type: 'declare',\n            override: true\n        };\n        namespaces['http://www.28msec.com/annotations/rest'] = {\n            prefixes: ['rest'],\n            pos: emptyPos,\n            type: 'declare',\n            override: true\n        };\n        namespaces['http://www.w3.org/2005/xqt-errors'] = {\n            prefixes: ['err'],\n            pos: emptyPos,\n            type: 'declare',\n            override: true\n        };\n        namespaces['http://zorba.io/errors'] = {\n            prefixes: ['zerr'],\n            pos: emptyPos,\n            type: 'declare',\n            override: true\n        };\n    }\n\n    var s = {\n        parent: parent,\n        children: [],\n        pos: pos,\n        setModuleResolver: function(resolver){\n            this.root.moduleResolver = resolver;\n            return this;\n        },\n        setModules: function(index){\n            if(this !== this.root){\n                throw new Error('setModules() not invoked from the root static context.');\n            }\n            this.moduleResolver = function(uri){\n                return index[uri];\n            };\n            var that = this;\n            Object.keys(this.namespaces).forEach(function(uri){\n                var ns = that.namespaces[uri];\n                if(ns.type === 'module') {\n                    var mod = that.moduleResolver(uri);\n                    if(mod.variables) {\n                        TreeOps.concat(that.variables, mod.variables);\n                    }\n                    if(mod.functions) {\n                        TreeOps.concat(that.functions, mod.functions);\n                    }\n                }\n            });\n            return this;\n        },\n        setModulesFromXQDoc: function(xqdoc){\n            if(this !== this.root){\n                throw new Error('setModulesFromXQDoc() not invoked from the root static context.');\n            }\n            //We throw away all the unnecessary xqdoc information\n            var index = {};\n            Object.keys(xqdoc).forEach(function(uri) {\n                var mod = xqdoc[uri];\n                var variables = {};\n                var functions = {};\n                mod.functions.forEach(function(fn){\n                    functions[uri + '#' + fn.name + '#' + fn.arity] = {\n                        params: [],\n                        annotations: [],\n                        name: fn.name,\n                        arity: fn.arity,\n                        eqname: { uri: uri, name: fn.name }\n                    };\n                    fn.parameters.forEach(function(param){\n                        functions[uri + '#' + fn.name + '#' + fn.arity].params.push('$' + param.name);\n                    });\n                });\n                mod.variables.forEach(function(variable){\n                    var name = variable.name.substring(variable.name.indexOf(':') + 1);\n                    variables[uri + '#' + name] = { type: 'VarDecl', annotations: [], eqname: { uri: uri, name: name } };\n                });\n                index[uri] = {\n                    variables: variables,\n                    functions: functions\n                };\n            });\n            this.root.moduleResolver = function(uri){\n                return index[uri];\n            };\n            var that = this;\n            Object.keys(this.namespaces).forEach(function(uri){\n                var ns = that.namespaces[uri];\n                if(ns.type === 'module') {\n                    var mod = that.moduleResolver(uri);\n                    if(mod.variables) {\n                        TreeOps.concat(that.variables, mod.variables);\n                    }\n                    if(mod.functions) {\n                        TreeOps.concat(that.functions, mod.functions);\n                    }\n                }\n            });\n            return this;\n        },\n        moduleNamespace: '',\n        description: '',\n        defaultFunctionNamespace: 'http://www.w3.org/2005/xpath-functions',\n        defaultFunctionNamespaces: [\n            'http://www.28msec.com/modules/collections',\n            'http://www.28msec.com/modules/store',\n            'http://jsoniq.org/functions',\n            'http://jsoniq.org/function-library',\n            'http://www.w3.org/2001/XMLSchema' //Built-in type constructors\n        ],\n        defaultElementNamespace: '',\n        namespaces: namespaces,\n        availableModuleNamespaces: [],\n        importModule: function(uri, prefix, pos) {\n            if(this !== this.root){\n                throw new Error('Function not invoked from the root static context.');\n            }\n            this.addNamespace(uri, prefix, pos, 'module');\n            if(this.moduleResolver) {\n                try {\n                    var mod = this.moduleResolver(uri, []);\n                    if(mod.variables) {\n                        TreeOps.concat(this.variables, mod.variables);\n                    }\n                    if(mod.functions) {\n                        TreeOps.concat(this.functions, mod.functions);\n                    }\n                } catch(e) {\n                    throw new StaticError('XQST0059', 'module \"' + uri + '\" not found', pos);\n                }\n            }\n            return this;\n        },\n\n        getAvailableModuleNamespaces: function(){\n            return this.root.availableModuleNamespaces;\n        },\n\n        getPrefixesByNamespace: function(uri){\n            return this.root.namespaces[uri].prefixes;\n        },\n\n        addNamespace: function (uri, prefix, pos, type) {\n            if(prefix === '' && type === 'module') {\n                throw new StaticWarning('W01', 'Avoid this type of import. Use import module namespace instead', pos);\n            }\n            //Check for empty target namespace\n            if (uri === '') {\n                throw new StaticError('XQST0088', 'empty target namespace in module import or module declaration', pos);\n            }\n\n            //Check for duplicate target namespace\n            var namespace = this.getNamespace(uri);\n            if (namespace && namespace.type === type && type !== 'declare' && !namespace.override) {\n                throw new StaticError('XQST0047', '\"' + uri + '\": duplicate target namespace', pos);\n            }\n\n            //Check for duplicate prefix\n            namespace = this.getNamespaceByPrefix(prefix);\n            if (namespace && !namespace.override) {\n                throw new StaticError('XQST0033', '\"' + prefix + '\": namespace prefix already bound to \"' + namespace.uri + '\"', pos);\n            }\n\n            namespace = this.namespaces[uri];\n            var prefixes = [prefix];\n            if(namespace) {\n                prefixes = prefixes.concat(this.namespaces[uri].prefixes);\n            }\n            this.namespaces[uri] = {\n                prefixes: prefixes,\n                pos: pos,\n                type: type\n            };\n\n            if (namespace) {\n                throw new StaticWarning('W02', '\"' + uri + '\" already bound to the \"' + namespace.prefixes.join(', ') + '\" prefix', pos);\n            }\n\n        },\n\n        getNamespaces: function(){\n            return this.root.namespaces;\n        },\n        \n        getNamespace: function (uri) {\n            var that = this;\n            while (that) {\n                var namespace = that.namespaces[uri];\n                if (namespace) {\n                    return namespace;\n                }\n                that = that.parent;\n            }\n\n        },\n\n        getNamespaceByPrefix: function (prefix) {\n            var found = [];\n            var handler = function (uri) {\n                var namespace = that.namespaces[uri];\n                if (namespace.prefixes.indexOf(prefix) !== -1) {\n                    namespace.uri = uri;\n                    found.push(namespace);\n                }\n            };\n            var that = this;\n            while (that) {\n                Object.keys(that.namespaces).forEach(handler);\n                that = that.parent;\n            }\n            var result;\n            found.forEach(function(ns){\n                if(ns.type === 'moduleDecl') {\n                    result = ns;\n                }\n            });\n            if(result) {\n                return result;\n            } else {\n                return found[0];\n            }\n        },\n        \n        resolveQName: function(value, pos){\n            var qname = {\n                uri: '',\n                prefix: '',\n                name: ''\n            };\n            var idx;\n            if (value.substring(0, 2) === 'Q{') {\n                idx = value.indexOf('}');\n                qname.uri = value.substring(2, idx);\n                qname.name = value.substring(idx + 1);\n            } else {\n                idx = value.indexOf(':');\n                qname.prefix = value.substring(0, idx);\n                var namespace = this.getNamespaceByPrefix(qname.prefix);\n                if(!namespace && qname.prefix !== '' && ['fn', 'jn'].indexOf(qname.prefix) === -1) {\n                    throw new StaticError('XPST0081', '\"' + qname.prefix + '\": can not expand prefix of lexical QName to namespace URI', pos);\n                }\n                if(namespace) {\n                    qname.uri = namespace.uri;\n                }\n                qname.name = value.substring(idx + 1);\n            }\n            return qname;\n        },\n        \n        variables: {},\n        varRefs: {},\n        functionCalls: {},\n    \n        addVariable: function(qname, type, pos){\n            if(\n                type === 'VarDecl' && this.moduleNamespace !== '' &&\n                !(this.moduleNamespace === qname.uri || qname.uri === '')\n            ) {\n                throw new StaticError('XQST0048', '\"' + qname.prefix + ':' + qname.name + '\": Qname not library namespace', pos);\n            }\n            var key = getVarKey(qname);\n            if(type === 'VarDecl' && this.variables[key]) {\n                throw new StaticError('XQST0049', '\"' + qname.name + '\": duplicate variable declaration', pos);\n            }\n            this.variables[key] = {\n                type: type,\n                pos: pos,\n                qname: qname,\n                annotations: {}\n            };\n            return this;\n        },\n        \n        getVariables: function(){\n            var variables = {};\n            var that = this;\n            var handler = function(key){\n                if(!variables[key]){\n                    variables[key] = that.variables[key];\n                }\n            };\n            while(that){\n                Object.keys(that.variables).forEach(handler);\n                that = that.parent;\n            }\n            return variables;\n        },\n        \n        getVariable: function(qname) {\n            var key = getVarKey(qname);\n            var that = this;\n            while(that) {\n                if(that.variables[key]) {\n                    return that.variables[key];\n                }\n                that = that.parent;\n            }\n        },\n        \n        addVarRef: function(qname, pos){\n            var varDecl = this.getVariable(qname);\n            //If no moduleResolver is available, then only resolve 'local' variables\n            if(!varDecl && (qname.uri === '' || this.root.moduleResolver)) {\n                throw new StaticError('XPST0008', '\"' + qname.name + '\": undeclared variable', pos);\n            }\n            var key = getVarKey(qname);\n            this.varRefs[key] = true;\n        },\n        \n        addFunctionCall: function(qname, arity, pos){\n            var fn = this.getFunction(qname, arity);\n            if(!fn && (qname.uri === 'http://www.w3.org/2005/xquery-local-functions' || this.root.moduleResolver)){\n                //Is it concat? (variadic)\n                if((qname.uri === 'http://www.w3.org/2005/xpath-functions' ||\n                    (qname.uri === '' && this.root.defaultFunctionNamespaces.concat(this.root.defaultFunctionNamespace).indexOf('http://www.w3.org/2005/xpath-functions') !== -1)) && qname.name === 'concat') {\n                    //do nothing\n                } else if(!fn){\n                    throw new StaticError('XPST0008', '\"' + qname.name + '#' + arity + '\": undeclared function', pos);\n                }\n            }\n            var key = getFnKey(qname, arity);\n            this.functionCalls[key] = true;\n        },\n        \n        functions: getSchemaBuiltinTypes()['http://www.w3.org/2001/XMLSchema'].functions,\n        //functions: {},\n\n        getFunctions: function(){\n            return this.root.functions;\n        },\n        \n        getFunction: function(qname, arity){\n            var key = getFnKey(qname, arity);\n            var fn;\n            if(qname.uri === '') {\n                var that = this;\n                this.root.defaultFunctionNamespaces.concat([this.root.defaultFunctionNamespace]).forEach(function(defaultFunctionNamespace){\n                    if(!fn){\n                        fn = that.getFunction({ uri: defaultFunctionNamespace, prefix: qname.prefix, name: qname.name }, arity);\n                    } else {\n                        return false;\n                    }\n                });\n                return fn;\n            } else {\n                return this.root.functions[key];\n            }\n        },\n        \n        addFunction: function(qname, pos, params) {\n            if(this !== this.root){\n                throw new Error('addFunction() not invoked from the root static context.');\n            }\n            var arity = params.length;\n            if(\n                this.moduleNamespace !== '' &&\n                !(this.moduleNamespace === qname.uri || (qname.uri === '' && this.defaultFunctionNamespace === this.moduleNamespace))\n            ) {\n                throw new StaticError('XQST0048', '\"' + qname.prefix + ':' + qname.name + '\": Qname not library namespace', pos);\n            }\n            var key = getFnKey(qname, arity);\n            if(this.functions[key]) {\n                throw new StaticError('XQST0034', '\"' + qname.name + '\": duplicate function declaration', pos);\n            }\n            this.functions[key] = {\n                pos: pos,\n                params: params\n            };\n            return this;\n        }\n        \n    };\n    s.root = parent ? parent.root : s;\n    return s;\n};\n\n},{\"../tree_ops\":\"/node_modules/xqlint/lib/tree_ops.js\",\"./errors\":\"/node_modules/xqlint/lib/compiler/errors.js\",\"./schema_built-in_types\":\"/node_modules/xqlint/lib/compiler/schema_built-in_types.js\"}],\"/node_modules/xqlint/lib/compiler/translator.js\":[function(_dereq_,module,exports){\nexports.Translator = function(rootStcx, ast){\n    'use strict';\n\n    var Errors = _dereq_('./errors');\n    var StaticError = Errors.StaticError;\n    var StaticWarning = Errors.StaticWarning;\n    \n    var TreeOps = _dereq_('../tree_ops').TreeOps;\n    var StaticContext = _dereq_('./static_context').StaticContext;\n    var Handlers = _dereq_('./handlers');\n    \n    var get = function(node, path){\n        var result = [];\n        if(path.length === 0){\n            return node;\n        }\n        node.children.forEach(function(child){\n            if(child.name === path[0] && path.length > 1) {\n                result = get(child, path.slice(1));\n            } else if(child.name === path[0]) {\n                result.push(child);\n            }\n        });\n        return result;\n    };\n    \n    var markers = [];\n    this.apply = function(fn) {\n        try {\n            fn();\n        } catch(e) {\n            if(e instanceof StaticError) {\n                addStaticError(e);\n            } else if(e instanceof StaticWarning) {\n                addWarning(e.getCode(), e.getMessage(), e.getPos());\n            } else {\n                throw e;\n            }\n        }\n    };\n\n    var addStaticError = function(e){\n        markers.push({\n            pos: e.getPos(),\n            type: 'error',\n            level: 'error',\n            message: '[' + e.getCode() + '] ' + e.getMessage()\n        });\n    };\n    \n    var addWarning = function(code, message, pos) {\n        markers.push({\n            pos: pos,\n            type: 'warning',\n            level: 'warning',\n            message: '[' + code + '] ' + message\n        });\n    };\n    \n    this.getMarkers = function(){\n        return markers;\n    };\n\n    var translator = this;\n\n    rootStcx.pos = ast.pos;\n    var sctx = rootStcx;\n    var pushSctx = function(pos){\n        sctx = new StaticContext(sctx, pos);\n        sctx.parent.children.push(sctx);\n    };\n    \n    var popSctx = function(pos){\n        if (pos !== undefined) {\n            sctx.pos.el = pos.el;\n            sctx.pos.ec = pos.ec;\n        }\n\n        Object.keys(sctx.varRefs).forEach(function(key){\n            if(!sctx.variables[key]) {\n                sctx.parent.varRefs[key] = true;\n            }\n        });\n        Object.keys(sctx.variables).forEach(function(key){\n            if(!sctx.varRefs[key] && sctx.variables[key].type !== 'GroupingVariable' && sctx.variables[key].type !== 'CatchVar') {\n                addWarning('W03', 'Unused variable \"$' + sctx.variables[key].qname.name + '\"', sctx.variables[key].pos);\n            }\n        });\n        \n        sctx = sctx.parent;\n    };\n    \n    this.visitOnly = function(node, names) {\n        node.children.forEach(function(child){\n            if (names.indexOf(child.name) !== -1){\n                translator.visit(child);\n            }\n        });\n    };\n    \n    this.getFirstChild = function(node, name) {\n        var result;\n        node.children.forEach(function(child){\n            if(child.name === name && result === undefined){\n                result = child;\n            }\n        });\n        return result;\n    };\n\n    this.XQuery = function(node) {\n        rootStcx.description = node.comment ? node.comment.description : undefined;\n    };\n    \n    this.ModuleDecl = function(node){\n        this.visitChildren(node, Handlers.ModuleDecl(translator, rootStcx, node));\n        return true;\n    };\n    \n    this.Prolog = function(node){\n        //Visit first part of the prolog\n        this.visitOnly(node, ['DefaultNamespaceDecl', 'Setter', 'NamespaceDecl', 'Import']);\n        //Get the Index of variable and function Declarations\n        ast.index.forEach(function(node){\n            if(node.name === 'VarDecl') {\n                node.children.forEach(function(child){\n                    if(child.name === 'VarName') {\n                        translator.apply(function(){\n                            var value = TreeOps.flatten(child);\n                            var qname = rootStcx.resolveQName(value, child.pos);\n                            rootStcx.addVariable(qname, node.name, child.pos);\n                        });\n                    }\n                });\n            } else if(node.name === 'FunctionDecl') {\n                var qname, pos, params = [];\n                node.children.forEach(function(child){\n                    if(child.name === 'EQName') {\n                        qname = child;\n                        pos = child.pos;\n                    } else if(child.name === 'ParamList'){\n                        child.children.forEach(function(c){\n                            if(c.name === 'Param') {\n                                params.push(TreeOps.flatten(c));\n                            }\n                        });\n                    }\n                });\n                translator.apply(function(){\n                    qname = TreeOps.flatten(qname);\n                    qname = rootStcx.resolveQName(qname, pos);\n                    rootStcx.addFunction(qname, pos, params);\n                });\n            }\n        });\n        //Visit second part of the prolog\n        this.visitOnly(node, ['ContextItemDecl', 'AnnotatedDecl', 'OptionDecl']);\n        return true;\n    };\n    \n    this.ModuleImport = function (node) {\n        this.visitChildren(node, Handlers.ModuleImport(translator, rootStcx, node));\n        return true;\n    };\n    \n    this.SchemaImport = function (node) {\n        this.visitChildren(node, Handlers.SchemaImport(translator, rootStcx, node));\n        return true;\n    };\n    \n    this.DefaultNamespaceDecl = function(node){\n        this.visitChildren(node, Handlers.DefaultNamespaceDecl(translator, rootStcx, node));\n        return true;\n    };\n    \n    this.NamespaceDecl = function (node) {\n        this.visitChildren(node, Handlers.NamespaceDecl(translator, rootStcx, node));\n        return true;\n    };\n    \n    var annotations = {};\n    this.AnnotatedDecl = function(node) {\n        annotations = {};\n        this.visitChildren(node, Handlers.NamespaceDecl(translator, rootStcx, node));\n        return true;\n    };\n    \n    this.CompatibilityAnnotation = function(){\n        annotations['http://www.w3.org/2012/xquery#updating'] = [];\n        return true;\n    };\n    \n    this.Annotation = function(node){\n        this.visitChildren(node, {\n            EQName: function(eqname){\n                var value = TreeOps.flatten(eqname);\n                translator.apply(function(){\n                    var qname = sctx.resolveQName(value, eqname.pos);\n                    annotations[qname.uri + '#' + qname.name] = [];\n                });\n            }\n        });\n        return true;\n    };\n    \n    this.VarDecl = function(node){\n        //var typeDecl = get(node, ['TypeDeclaration']);\n        //if(!typeDecl){\n        //    addWarning('W05', 'Untyped module variable', node.pos);\n        //}\n        try {\n            var varname = translator.getFirstChild(node, 'VarName');\n            var value = TreeOps.flatten(varname);\n            var qname = sctx.resolveQName(value, varname.pos);\n            var variable = rootStcx.getVariable(qname);\n            if(variable) {\n                variable.annotations = annotations;\n                variable.description = node.getParent.comment ? node.getParent.comment.description : undefined;\n                variable.type = TreeOps.flatten(get(node, ['TypeDeclaration'])[0]).substring(2).trim();\n                var last = variable.type.substring(variable.type.length - 1);\n                if(last === '?') {\n                    variable.occurrence = 0;\n                    variable.type = variable.type.substring(0, variable.type.length - 1);\n                } else if(last === '*') {\n                    variable.occurrence = -1;\n                    variable.type = variable.type.substring(0, variable.type.length - 1);\n                } else if(last === '+') {\n                    variable.occurrence = 2;\n                    variable.type = variable.type.substring(0, variable.type.length - 1);\n                } else {\n                    variable.occurrence = 1;\n                }\n            }\n        } catch(e) {\n            //ignore resolution exceptions\n        }\n        this.visitOnly(node, ['ExprSingle', 'VarValue', 'VarDefaultValue']);\n        return true;\n    };\n    \n    this.FunctionDecl = function(node) {\n        //var updateAn = get(node, ['CompatibilityAnnotation'])[0];\n        //console.log(updateAn);\n        var isUpdating = annotations['http://www.w3.org/2012/xquery#updating'] !== undefined;\n        var typeDecl = get(node, ['ReturnType'])[0];\n        var name = get(node, ['EQName'])[0];\n        if(!typeDecl && !isUpdating){\n            addWarning('W05', 'Untyped return value', name.pos);\n        }\n        /*\n        this.visitChildren(node, {\n            EQName: function(fnname){\n                var value = TreeOps.flatten(fnname);\n                var qname = sctx.resolveQName(value, fnname.pos);\n                var fn = rootStcx.getFunction(qname, arity);\n                fn.annotations = annotations;\n                return true;\n            }\n        });  \n        */\n        var isExternal = false;\n        node.children.forEach(function(child){\n            if(child.name === 'TOKEN' && child.value === 'external') {\n                isExternal = true;\n                return false;\n            }\n        });\n        if(!isExternal) {\n            pushSctx(node.pos);\n            this.visitChildren(node);\n            popSctx();\n        }\n        return true;\n    };\n    \n    this.VarRef = function(node) {\n        this.visitChildren(node, Handlers.VarRefHandler(translator, sctx, node));\n        return true;\n    };\n    \n    this.Param = function(node){\n        var typeDecl = get(node, ['TypeDeclaration'])[0];\n        if(!typeDecl){\n            addWarning('W05', 'Untyped function parameter', node.pos);\n        }\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        return true;\n    };\n    \n    this.InlineFunctionExpr\t= function(node) {\n        pushSctx(node.pos);\n        this.visitChildren(node);\n        popSctx();\n        return true;\n    };\n    \n    //Scripting\n    var statementCount = [];\n    var handleStatements = function(node) {\n        pushSctx(node.pos);\n        statementCount.push(0);\n        translator.visitChildren(node);\n        for (var i = 1; i <= statementCount[statementCount.length - 1]; i++) {\n            popSctx(node.pos);\n        }\n        statementCount.pop();\n        popSctx();\n    };\n\n    this.StatementsAndOptionalExpr = function (node) {\n        handleStatements(node);\n        return true;\n    };\n\n    this.StatementsAndExpr = function (node) {\n        handleStatements(node);\n        return true;\n    };\n\n    this.BlockStatement = function (node) {\n        handleStatements(node);\n        return true;\n    };\n    \n    this.VarDeclStatement = function(node){\n        pushSctx(node.pos);\n        statementCount[statementCount.length - 1]++;\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        //return true;\n    };\n    \n    //FLWOR Expressions\n    var clauses = [];\n    this.FLWORExpr = this.FLWORStatement = function (node) {\n        pushSctx(node.pos);\n        clauses.push(0);\n        this.visitChildren(node);\n        for(var i=1; i <= clauses[clauses.length - 1]; i++) {\n            popSctx(node.pos);\n        }\n        clauses.pop();\n        popSctx();\n        return true;\n    };\n    \n    //this.ReturnClause = function(node){\n        //var expr = get(['ExprSingle', 'FLWORExpr']);\n    //    console.log(astAsXML(node));\n    //};\n    \n    this.ForBinding = function (node) {\n        this.visitOnly(node, ['ExprSingle', 'VarValue', 'VarDefaultValue']);\n        pushSctx(node.pos);\n        clauses[clauses.length - 1]++;\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        return true;\n    };\n    \n    this.LetBinding = function(node){\n        this.visitOnly(node, ['ExprSingle', 'VarValue', 'VarDefaultValue']);\n        pushSctx(node.pos);\n        clauses[clauses.length - 1]++;\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        return true;\n    };\n\n    this.GroupingSpec = function(node){\n        var isVarDecl = false;\n        node.children.forEach(function(child){\n            if(child.value === ':=') {\n                isVarDecl = true;\n                return false;\n            }\n        });\n        if(isVarDecl) {\n            var groupingVariable = node.children[0];\n            this.visitOnly(node, ['ExprSingle', 'VarValue', 'VarDefaultValue']);\n            pushSctx(node.pos);\n            clauses[clauses.length - 1]++;\n            this.visitChildren(groupingVariable, Handlers.VarHandler(translator, sctx, groupingVariable));\n            return true;\n        } else {\n            \n        }\n    };\n    \n    this.TumblingWindowClause = function (node) {\n        this.visitOnly(node, ['ExprSingle']);\n        pushSctx(node.pos);\n        clauses[clauses.length - 1]++;\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        this.visitOnly(node, ['WindowStartCondition', 'WindowEndCondition']);\n        return true;\n    };\n\n    this.WindowVars = function (node) {\n        pushSctx(node.pos);\n        clauses[clauses.length - 1]++;\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        return true;\n    };\n\n    this.SlidingWindowClause = function (node) {\n        this.visitOnly(node, ['ExprSingle', 'VarValue', 'VarDefaultValue']);\n        pushSctx(node.pos);\n        clauses[clauses.length - 1]++;\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        this.visitOnly(node, ['WindowStartCondition', 'WindowEndCondition']);\n        return true;\n    };\n\n    this.PositionalVar = function (node) {\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        return true;\n    };\n\n    this.PositionalVar = function (node) {\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        return true;\n    };\n\n    this.CurrentItem = function (node) {\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        return true;\n    };\n\n    this.PreviousItem = function (node) {\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        return true;\n    };\n\n    this.NextItem = function (node) {\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        return true;\n    };\n\n    this.CountClause = function (node) {\n        pushSctx(node.pos);\n        clauses[clauses.length - 1]++;\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        return true;\n    };\n\n    //SwitchExpr ::= 'switch' '(' Expr ')' SwitchCaseClause+ 'default' 'return' ExprSingle\n    //SwitchCaseClause ::= ( 'case' SwitchCaseOperand )+ 'return' ExprSingle\n    //SwitchCaseOperand ::= ExprSingle\n    /*\n    this.SwitchCaseClause = function(node){\n        pushSctx(node.pos);\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        this.visitOnly(node, ['ExprSingle']);\n        popSctx();\n        return true;\n    };\n     */\n\n    this.CaseClause = function(node) {\n        pushSctx(node.pos);\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        this.visitOnly(node, ['ExprSingle']);\n        popSctx();\n        return true;\n    };\n\n    //TransformExpr ::= 'copy' TransformSpec ( ',' TransformSpec )* 'modify' ExprSingle 'return' ExprSingle\n    //TransformSpec ::= '$' VarName ':=' ExprSingle\n    var copies = [];\n    this.TransformExpr = function (node) {\n        pushSctx(node.pos);\n        copies.push(0);\n        this.visitChildren(node);\n        for(var i=1; i <= copies[copies.length - 1]; i++) {\n            popSctx(node.pos);\n        }\n        copies.pop();\n        popSctx();\n        return true;\n    };\n    \n    this.TransformSpec = function(node) {\n        this.visitOnly(node, ['ExprSingle']);\n        pushSctx(node.pos);\n        copies[copies.length-1] += 1;\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        return true;\n    };\n\n    //QuantifiedExpr ::= ( 'some' | 'every' ) QuantifiedVarDecl ( ',' QuantifiedVarDecl )* 'satisfies' ExprSingle\n    //QuantifiedVarDecl ::= '$' VarName TypeDeclaration? 'in' ExprSingle\n    var quantifiedDecls = [];\n    this.QuantifiedExpr = function (node) {\n        pushSctx(node.pos);\n        quantifiedDecls.push(0);\n        this.visitChildren(node);\n        for(var i=1; i <= quantifiedDecls[quantifiedDecls.length - 1]; i++) {\n            popSctx(node.pos);\n        }\n        quantifiedDecls.pop();\n        popSctx();\n        return true;\n    };\n    \n    this.QuantifiedVarDecl = function(node) {\n        this.visitOnly(node, ['ExprSingle']);\n        pushSctx(node.pos);\n        quantifiedDecls[quantifiedDecls.length - 1]++;\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        return true;\n    };\n    \n    this.FunctionCall = function(node){\n        this.visitOnly(node, ['ArgumentList']);\n        var name = translator.getFirstChild(node, 'EQName');\n        var eqname = TreeOps.flatten(name);\n        var arity = get(node, ['ArgumentList', 'Argument']).length;\n        translator.apply(function(){\n            var qname = sctx.resolveQName(eqname, node.pos);\n            try {\n                if(qname.uri !== '') {\n                    sctx.root.namespaces[qname.uri].used = true;\n                }\n            } catch(e){\n                //We ignore exceptions here to avoid duplicate markers\n            }\n            sctx.addFunctionCall(qname, arity, name.pos);\n        });\n        return true;\n    };\n    \n    this.TryClause = function(node){\n        pushSctx(node.pos);\n        this.visitChildren(node);\n        popSctx();\n        return true;\n    };\n    \n    this.CatchClause = function(node){\n        pushSctx(node.pos);\n        var prefix = 'err';\n        var uri = 'http://www.w3.org/2005/xqt-errors';\n        var emptyPos = { sl: 0, sc: 0, el: 0, ec: 0 };\n        sctx.addVariable({ prefix: prefix, uri: uri, name: 'code' }, 'CatchVar', emptyPos);\n        sctx.addVariable({ prefix: prefix, uri: uri, name: 'description' }, 'CatchVar', emptyPos);\n        sctx.addVariable({ prefix: prefix, uri: uri, name: 'value' }, 'CatchVar', emptyPos);\n        sctx.addVariable({ prefix: prefix, uri: uri, name: 'module' }, 'CatchVar', emptyPos);\n        sctx.addVariable({ prefix: prefix, uri: uri, name: 'line-number' }, 'CatchVar', emptyPos);\n        sctx.addVariable({ prefix: prefix, uri: uri, name: 'column-number' }, 'CatchVar', emptyPos);\n        sctx.addVariable({ prefix: prefix, uri: uri, name: 'additional' }, 'CatchVar', emptyPos);\n        this.visitChildren(node);\n        popSctx();\n        return true;\n    };\n\n    this.Pragma = function(node){\n        var qname = TreeOps.flatten(get(node, ['EQName'])[0]);\n        qname = rootStcx.resolveQName(qname, node);\n        var value = TreeOps.flatten(get(node, ['PragmaContents'])[0]);\n        if (qname.name === 'xqlint' && qname.uri === 'http://xqlint.io') {\n            pushSctx(node.pos);\n            var commands = value.match(/[a-zA-Z]+\\(([^)]+)\\)/g);\n            commands.forEach(function (command) {\n                var name = command.substring(0, command.indexOf('('));\n                var args = command.substring(0, command.length - 1).substring(command.indexOf('(') + 1).split(',').map(function (val) {\n                    return val.trim();\n                });\n                if (name === 'varrefs') {\n                    args.forEach(function (arg) {\n                        var qname = sctx.resolveQName(arg.substring(1), node.pos);\n                        if (qname.uri !== '') {\n                            sctx.root.namespaces[qname.uri].used = true;\n                        }\n                        sctx.addVarRef(qname, node.pos);\n                    });\n                }\n            });\n            this.visitChildren(node);\n            popSctx();\n            return true;\n        }\n    };\n\n    this.visit = function (node) {\n        var name = node.name;\n        var skip = false;\n\n        if (typeof this[name] === 'function') {\n            skip = this[name](node) === true;\n        }\n\n        if (!skip) {\n            this.visitChildren(node);\n        }\n    };\n\n    this.visitChildren = function (node, handler) {\n        for (var i = 0; i < node.children.length; i++) {\n            var child = node.children[i];\n            if (handler !== undefined && typeof handler[child.name] === 'function') {\n                handler[child.name](child);\n            } else {\n                this.visit(child);\n            }\n        }\n    };\n\n    this.visit(ast);\n    Object.keys(rootStcx.variables).forEach(function(key){\n        if(!rootStcx.varRefs[key] && (rootStcx.variables[key].annotations['http://www.w3.org/2005/xpath-functions#private'] || rootStcx.moduleNamespace === '') && rootStcx.variables[key].pos) {\n            addWarning('W03', 'Unused variable \"' + rootStcx.variables[key].qname.name + '\"', rootStcx.variables[key].pos);\n        }\n    });\n    Object.keys(rootStcx.namespaces).forEach(function(uri){\n        var namespace = rootStcx.namespaces[uri];\n        if(namespace.used === undefined && !namespace.override && namespace.type === 'module') {\n            addWarning('W04', 'Unused module \"' + uri + '\"', namespace.pos);\n        }\n    });\n};\n\n},{\"../tree_ops\":\"/node_modules/xqlint/lib/tree_ops.js\",\"./errors\":\"/node_modules/xqlint/lib/compiler/errors.js\",\"./handlers\":\"/node_modules/xqlint/lib/compiler/handlers.js\",\"./static_context\":\"/node_modules/xqlint/lib/compiler/static_context.js\"}],\"/node_modules/xqlint/lib/completion/completer.js\":[function(_dereq_,module,exports){\n'use strict';\n\nvar TreeOps = _dereq_('../tree_ops').TreeOps;\n\nvar ID_REGEX = /[a-zA-Z_0-9\\$]/;\n\nfunction retrievePrecedingIdentifier(text, pos, regex) {\n    regex = regex || ID_REGEX;\n    var buf = [];\n    for (var i = pos-1; i >= 0; i--) {\n        if (regex.test(text[i])) {\n            buf.push(text[i]);\n        } else {\n            break;\n        }\n    }\n    return buf.reverse().join('');\n}\n\n/*\nfunction retrieveFollowingIdentifier(text, pos, regex) {\n    regex = regex || ID_REGEX;\n    var buf = [];\n    for (var i = pos; i < text.length; i++) {\n        if (regex.test(text[i])) {\n            buf.push(text[i]);\n        } else {\n            break;\n        }\n    }\n    return buf;\n}\n*/\n\nfunction prefixBinarySearch(items, prefix) {\n    var startIndex = 0;\n    var stopIndex = items.length - 1;\n    var middle = Math.floor((stopIndex + startIndex) / 2);\n    \n    while (stopIndex > startIndex && middle >= 0 && items[middle].indexOf(prefix) !== 0) {\n        if (prefix < items[middle]) {\n            stopIndex = middle - 1;\n        } else if (prefix > items[middle]) {\n            startIndex = middle + 1;\n        }\n        middle = Math.floor((stopIndex + startIndex) / 2);\n    }\n    while (middle > 0 && items[middle-1].indexOf(prefix) === 0) {\n        middle--;\n    }\n    return middle >= 0 ? middle : 0; // ensure we're not returning a negative index\n}\n\nvar uriRegex = /[a-zA-Z_0-9\\/\\.:\\-#]/;\nvar char = '-._A-Za-z0-9:\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02ff\\u0300-\\u037D\\u037F-\\u1FFF\\u200C\\u200D\\u203f\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD';\nvar nameChar = '[' + char + ']';\nvar varChar = '[' + char + '\\\\$]';\nvar nameCharRegExp = new RegExp(nameChar);\nvar varCharRegExp = new RegExp(varChar);\n\nvar varDeclLabels = {\n    'LetBinding': 'Let binding',\n    'Param': 'Function parameter',\n    'QuantifiedExpr': 'Quantified expression binding',\n    'VarDeclStatement': 'Local variable',\n    'ForBinding': 'For binding',\n    'TumblingWindowClause': 'Tumbling window binding',\n    'WindowVars': 'Window variable',\n    'SlidingWindowClause': 'Sliding window binding',\n    'PositionalVar': 'Positional variable',\n    'CurrentItem': 'Current item',\n    'PreviousItem': 'Previous item',\n    'NextItem': 'Next item',\n    'CountClause': 'Count binding',\n    'GroupingVariable': 'Grouping variable',\n    'VarDecl': 'Module variable'\n};\n\nvar findCompletions = function(prefix, allIdentifiers) {\n    allIdentifiers.sort();\n    var startIdx = prefixBinarySearch(allIdentifiers, prefix);\n    var matches = [];\n    for (var i = startIdx; i < allIdentifiers.length && allIdentifiers[i].indexOf(prefix) === 0; i++) {\n        matches.push(allIdentifiers[i]);\n    }\n    return matches;\n};\n\n\nvar completePrefix = function(identifier, pos, sctx){\n    var idx = identifier.indexOf(':');\n    if(idx === -1) {\n        var prefixes = [];\n        var namespaces = sctx.getNamespaces();\n        Object.keys(namespaces).forEach(function(key){\n            if(namespaces[key].type === 'module' || key === 'http://www.w3.org/2005/xquery-local-functions') {\n                prefixes.push(namespaces[key].prefixes[0]);\n            }\n        });\n        var matches = findCompletions(identifier, prefixes);\n        var match = function(name) {\n            return {\n                name: name + ':',\n                value: name + ':',\n                meta: 'prefix'\n            };\n        };\n        return matches.map(match);\n    } else {\n        return [];\n    }\n};\n\nvar completeFunction = function(identifier, pos, sctx){\n    var names = [];\n    var snippets = {};\n    var functions = sctx.getFunctions();\n    var uri = '';\n    var prefix = '';\n    var name = identifier;\n    var idx = identifier.indexOf(':');\n    var defaultNamespace = false;\n    if(idx !== -1){\n        prefix = identifier.substring(0, idx);\n        name = identifier.substring(idx + 1);\n        var ns = sctx.getNamespaceByPrefix(prefix);\n        if(ns){\n            uri = sctx.getNamespaceByPrefix(prefix).uri;\n        }\n    } else {\n        defaultNamespace = true;\n        uri = sctx.root.defaultFunctionNamespace;\n    }\n    Object.keys(functions).forEach(function(key){\n        var fn = functions[key];\n        var ns = key.substring(0, key.indexOf('#'));\n        var name = key.substring(key.indexOf('#') + 1);\n        name = name.substring(0, name.indexOf('#'));\n        if(ns !== uri) {\n            return;\n        }\n        if(!defaultNamespace){\n            name = sctx.getNamespaces()[ns].prefixes[0] + ':' + name;\n        }\n        name += '(';\n        var snippet = name;\n        snippet += fn.params.map(function(param, index){\n            return '${' + (index + 1) + ':\\\\' + param.split(' ')[0] + '}';\n        }).join(', ');\n        name += fn.params.join(', ');\n        name += ')';\n        snippet += ')';\n        names.push(name);\n        snippets[name] = snippet;\n    });\n    var matches = findCompletions(identifier, names);\n    var match = function(name) {\n        return {\n            //doc:\n            //docUrl:\n            name: name,\n            value: name,\n            meta: 'function',\n            priority: 4,\n            identifierRegex: nameCharRegExp,\n            snippet: snippets[name]\n        };\n    };\n    return matches.map(match);\n};\n\nvar completeVariable = function(identifier, pos, sctx){\n    var uri = '';\n    var prefix = '';\n    var idx = identifier.indexOf(':');\n    //Does the identifier has a prefix?\n    if(idx !== -1){\n        prefix = identifier.substring(0, idx);\n        uri = sctx.getNamespaceByPrefix(prefix).uri;\n    }\n    var decls = sctx.getVariables();\n    var names = [];\n    var types = {};\n    Object.keys(decls).forEach(function(key){\n        var i = key.indexOf('#');\n        var ns = key.substring(0, i);\n        var name = key.substring(i+1);\n        if(ns !== ''){\n            names.push(sctx.getPrefixesByNamespace(ns)[0] + ':' + name);\n            types[sctx.getPrefixesByNamespace(ns)[0] + ':' + name] = decls[key].type;\n        } else {\n            names.push(name);\n            types[name] = decls[key].type;\n        }\n    });\n    \n    var matches = findCompletions(identifier, names);\n    var match = function(name) {\n        return {\n            //doc\n            //docUrl\n            name: '$' + name,\n            value: '$' + name,\n            meta: varDeclLabels[types[name]],\n            priority: 4,\n            identifierRegex: varCharRegExp\n        };\n    };\n    return matches.map(match);\n};\n\nvar completeExpr = function(line, pos, sctx){\n    var identifier = retrievePrecedingIdentifier(line, pos.col, nameCharRegExp);\n    var before = line.substring(0, pos.col - (identifier.length === 0 ? 0 : identifier.length));\n    var isVar = before[before.length - 1] === '$';\n    if(isVar) {\n        return completeVariable(identifier, pos, sctx);\n    } else if(identifier !== '') {\n        return completeFunction(identifier, pos, sctx).concat(completePrefix(identifier, pos, sctx));\n    } else {\n        return completeVariable(identifier, pos, sctx).concat(completeFunction(identifier, pos, sctx)).concat(completePrefix(identifier, pos, sctx));\n    }\n};\n\nvar completeModuleUri = function(line, pos, sctx){\n    var identifier = retrievePrecedingIdentifier(line, pos.col, uriRegex);\n    var matches = findCompletions(identifier, sctx.getAvailableModuleNamespaces());\n    var match = function(uri) {\n        return {\n            //doc: \n            //docUrl:\n            name: uri,\n            value: uri,\n            meta: 'module',\n            priority: 4,\n            identifierRegex: uriRegex\n        };\n    };\n    return matches.map(match);\n};\n\nexports.complete = function(source, ast, rootSctx, pos){\n    var line = source.split('\\n')[pos.line];\n    var node = TreeOps.findNode(ast, pos);\n    var sctx = TreeOps.findNode(rootSctx, pos);\n    sctx = sctx ? sctx : rootSctx;\n    if(node && node.name === 'URILiteral' && node.getParent && node.getParent.name === 'ModuleImport'){\n        return completeModuleUri(line, pos, sctx);\n    } else {\n        return completeExpr(line, pos, sctx);\n    }\n};\n\n},{\"../tree_ops\":\"/node_modules/xqlint/lib/tree_ops.js\"}],\"/node_modules/xqlint/lib/formatter/style_checker.js\":[function(_dereq_,module,exports){\nexports.StyleChecker = function (ast, source) {\n    'use strict';\n\n    //var TreeOps = require('../tree_ops').TreeOps;\n    /*\n    var tokens = [];\n    function getTokenList(node){\n        if(node.name === 'TOKEN'){\n            tokens.push(node);\n        }\n        if(node.children){\n            node.children.forEach(function(child){\n                getTokenList(child);\n            });\n        }\n    };\n    getTokenList(ast);\n    */\n\n    var tab = '    ';\n    var markers = [];\n    \n    this.getMarkers = function(){\n        return markers;\n    };\n\n    this.WS = function(node) {\n        var lines = node.value.split('\\n');\n        lines.forEach(function(line, index){\n            var isFirst = index === 0;\n            var isLast  = index === (lines.length - 1);\n\n            if(/\\r$/.test(line)) {\n                markers.push({\n                    pos: {\n                        sl: node.pos.sl + index,\n                        el: node.pos.sl + index,\n                        sc: line.length - 1,\n                        ec: line.length\n                    },\n                    type: 'warning',\n                    level: 'warning',\n                    message: '[SW01] Detected CRLF'\n                });\n            }\n            \n            var match = line.match(/\\t+/);\n            if(match !== null){\n                markers.push({\n                    pos: {\n                        sl: node.pos.sl + index,\n                        el: node.pos.sl + index,\n                        sc: match.index,\n                        ec: match.index + match[0].length\n                    },\n                    type: 'warning',\n                    level: 'warning',\n                    message: '[SW02] Tabs detected'\n                });\n            }\n\n            if((!isFirst) && isLast){\n                match = line.match(/^\\ +/);\n                if(match !== null) {\n                    var mod = match[0].length % tab.length;\n                    if(mod !== 0) {\n                        markers.push({\n                            pos: {\n                                sl: node.pos.sl + index,\n                                el: node.pos.sl + index,\n                                sc: match.index,\n                                ec: match.index + match[0].length\n                            },\n                            type: 'warning',\n                            level: 'warning',\n                            message: '[SW03] Unexcepted indentation of ' + match[0].length\n                        });\n                    }\n                }\n            }\n        });\n        return true;\n    };\n    \n    this.visit = function (node, index) {\n        var name = node.name;\n        var skip = false;\n\n        if (typeof this[name] === 'function') {\n            skip = this[name](node, index) === true;\n        }\n\n        if (!skip) {\n            this.visitChildren(node);\n        }\n    };\n\n    this.visitChildren = function (node, handler) {\n        for (var i = 0; i < node.children.length; i++) {\n            var child = node.children[i];\n            if (handler !== undefined && typeof handler[child.name] === 'function') {\n                handler[child.name](child);\n            } else {\n                this.visit(child);\n            }\n        }\n    };\n\n    source.split('\\n').forEach(function(line, index){\n        var match = line.match(/\\ +$/);\n        if(match){\n            markers.push({\n                pos: {\n                    sl: index,\n                    el: index,\n                    sc: match.index,\n                    ec: match.index + match[0].length\n                },\n                type: 'warning',\n                level: 'warning',\n                message: '[SW04] Trailing whitespace'\n            });\n        }\n    });\n    this.visit(ast);\n};\n},{}],\"/node_modules/xqlint/lib/lexers/JSONiqTokenizer.js\":[function(_dereq_,module,exports){\n// This file was generated on Thu Jul 24, 2014 15:01 (UTC+01) by REx v5.30 which is Copyright (c) 1979-2014 by Gunther Rademacher <grd@gmx.net>\n// REx command line: JSONiqTokenizer.ebnf -ll 2 -backtrack -tree -javascript -a xqlint\n\n                                                            // line 2 \"JSONiqTokenizer.ebnf\"\n                                                            var JSONiqTokenizer = exports.JSONiqTokenizer = function JSONiqTokenizer(string, parsingEventHandler)\n                                                            {\n                                                              init(string, parsingEventHandler);\n                                                            // line 9 \"JSONiqTokenizer.js\"\n  var self = this;\n\n  this.ParseException = function(b, e, s, o, x)\n  {\n    var\n      begin = b,\n      end = e,\n      state = s,\n      offending = o,\n      expected = x;\n\n    this.getBegin = function() {return begin;};\n    this.getEnd = function() {return end;};\n    this.getState = function() {return state;};\n    this.getExpected = function() {return expected;};\n    this.getOffending = function() {return offending;};\n\n    this.getMessage = function()\n    {\n      return offending < 0 ? \"lexical analysis failed\" : \"syntax error\";\n    };\n  };\n\n  function init(string, parsingEventHandler)\n  {\n    eventHandler = parsingEventHandler;\n    input = string;\n    size = string.length;\n    reset(0, 0, 0);\n  }\n\n  this.getInput = function()\n  {\n    return input;\n  };\n\n  function reset(l, b, e)\n  {\n            b0 = b; e0 = b;\n    l1 = l; b1 = b; e1 = e;\n    end = e;\n    eventHandler.reset(input);\n  }\n\n  this.getOffendingToken = function(e)\n  {\n    var o = e.getOffending();\n    return o >= 0 ? JSONiqTokenizer.TOKEN[o] : null;\n  };\n\n  this.getExpectedTokenSet = function(e)\n  {\n    var expected;\n    if (e.getExpected() < 0)\n    {\n      expected = JSONiqTokenizer.getTokenSet(- e.getState());\n    }\n    else\n    {\n      expected = [JSONiqTokenizer.TOKEN[e.getExpected()]];\n    }\n    return expected;\n  };\n\n  this.getErrorMessage = function(e)\n  {\n    var tokenSet = this.getExpectedTokenSet(e);\n    var found = this.getOffendingToken(e);\n    var prefix = input.substring(0, e.getBegin());\n    var lines = prefix.split(\"\\n\");\n    var line = lines.length;\n    var column = lines[line - 1].length + 1;\n    var size = e.getEnd() - e.getBegin();\n    return e.getMessage()\n         + (found == null ? \"\" : \", found \" + found)\n         + \"\\nwhile expecting \"\n         + (tokenSet.length == 1 ? tokenSet[0] : (\"[\" + tokenSet.join(\", \") + \"]\"))\n         + \"\\n\"\n         + (size == 0 || found != null ? \"\" : \"after successfully scanning \" + size + \" characters beginning \")\n         + \"at line \" + line + \", column \" + column + \":\\n...\"\n         + input.substring(e.getBegin(), Math.min(input.length, e.getBegin() + 64))\n         + \"...\";\n  };\n\n  this.parse_start = function()\n  {\n    eventHandler.startNonterminal(\"start\", e0);\n    lookahead1W(14);                // ModuleDecl | Annotation | OptionDecl | Operator | Variable | Tag | AttrTest |\n                                    // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // S^WS | EOF | '!' | '\"' | '$$' | \"'\" | '(' | '(#' | '(:' | '(:~' | ')' | ',' |\n                                    // '.' | '/' | ':' | ';' | '<!--' | '<![CDATA[' | '<?' | '[' | ']' | 'after' |\n                                    // 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'as' | 'ascending' |\n                                    // 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' |\n                                    // 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'last' |\n                                    // 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' |\n                                    // 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'only' | 'option' |\n                                    // 'or' | 'order' | 'ordered' | 'ordering' | 'parent' | 'preceding' |\n                                    // 'preceding-sibling' | 'processing-instruction' | 'rename' | 'replace' |\n                                    // 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'switch' | 'text' | 'to' | 'treat' | 'try' |\n                                    // 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // 'xquery' | '{' | '|' | '}'\n    switch (l1)\n    {\n    case 58:                        // '<![CDATA['\n      shift(58);                    // '<![CDATA['\n      break;\n    case 57:                        // '<!--'\n      shift(57);                    // '<!--'\n      break;\n    case 59:                        // '<?'\n      shift(59);                    // '<?'\n      break;\n    case 43:                        // '(#'\n      shift(43);                    // '(#'\n      break;\n    case 45:                        // '(:~'\n      shift(45);                    // '(:~'\n      break;\n    case 44:                        // '(:'\n      shift(44);                    // '(:'\n      break;\n    case 37:                        // '\"'\n      shift(37);                    // '\"'\n      break;\n    case 41:                        // \"'\"\n      shift(41);                    // \"'\"\n      break;\n    case 277:                       // '}'\n      shift(277);                   // '}'\n      break;\n    case 274:                       // '{'\n      shift(274);                   // '{'\n      break;\n    case 42:                        // '('\n      shift(42);                    // '('\n      break;\n    case 46:                        // ')'\n      shift(46);                    // ')'\n      break;\n    case 52:                        // '/'\n      shift(52);                    // '/'\n      break;\n    case 65:                        // '['\n      shift(65);                    // '['\n      break;\n    case 66:                        // ']'\n      shift(66);                    // ']'\n      break;\n    case 49:                        // ','\n      shift(49);                    // ','\n      break;\n    case 51:                        // '.'\n      shift(51);                    // '.'\n      break;\n    case 56:                        // ';'\n      shift(56);                    // ';'\n      break;\n    case 54:                        // ':'\n      shift(54);                    // ':'\n      break;\n    case 36:                        // '!'\n      shift(36);                    // '!'\n      break;\n    case 276:                       // '|'\n      shift(276);                   // '|'\n      break;\n    case 40:                        // '$$'\n      shift(40);                    // '$$'\n      break;\n    case 5:                         // Annotation\n      shift(5);                     // Annotation\n      break;\n    case 4:                         // ModuleDecl\n      shift(4);                     // ModuleDecl\n      break;\n    case 6:                         // OptionDecl\n      shift(6);                     // OptionDecl\n      break;\n    case 15:                        // AttrTest\n      shift(15);                    // AttrTest\n      break;\n    case 16:                        // Wildcard\n      shift(16);                    // Wildcard\n      break;\n    case 18:                        // IntegerLiteral\n      shift(18);                    // IntegerLiteral\n      break;\n    case 19:                        // DecimalLiteral\n      shift(19);                    // DecimalLiteral\n      break;\n    case 20:                        // DoubleLiteral\n      shift(20);                    // DoubleLiteral\n      break;\n    case 8:                         // Variable\n      shift(8);                     // Variable\n      break;\n    case 9:                         // Tag\n      shift(9);                     // Tag\n      break;\n    case 7:                         // Operator\n      shift(7);                     // Operator\n      break;\n    case 35:                        // EOF\n      shift(35);                    // EOF\n      break;\n    default:\n      parse_EQName();\n    }\n    eventHandler.endNonterminal(\"start\", e0);\n  };\n\n  this.parse_StartTag = function()\n  {\n    eventHandler.startNonterminal(\"StartTag\", e0);\n    lookahead1W(8);                 // QName | S^WS | EOF | '\"' | \"'\" | '/>' | '=' | '>'\n    switch (l1)\n    {\n    case 61:                        // '>'\n      shift(61);                    // '>'\n      break;\n    case 53:                        // '/>'\n      shift(53);                    // '/>'\n      break;\n    case 29:                        // QName\n      shift(29);                    // QName\n      break;\n    case 60:                        // '='\n      shift(60);                    // '='\n      break;\n    case 37:                        // '\"'\n      shift(37);                    // '\"'\n      break;\n    case 41:                        // \"'\"\n      shift(41);                    // \"'\"\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"StartTag\", e0);\n  };\n\n  this.parse_TagContent = function()\n  {\n    eventHandler.startNonterminal(\"TagContent\", e0);\n    lookahead1(11);                 // Tag | EndTag | PredefinedEntityRef | ElementContentChar | CharRef | EOF |\n                                    // '<!--' | '<![CDATA[' | '{' | '{{' | '}}'\n    switch (l1)\n    {\n    case 25:                        // ElementContentChar\n      shift(25);                    // ElementContentChar\n      break;\n    case 9:                         // Tag\n      shift(9);                     // Tag\n      break;\n    case 10:                        // EndTag\n      shift(10);                    // EndTag\n      break;\n    case 58:                        // '<![CDATA['\n      shift(58);                    // '<![CDATA['\n      break;\n    case 57:                        // '<!--'\n      shift(57);                    // '<!--'\n      break;\n    case 21:                        // PredefinedEntityRef\n      shift(21);                    // PredefinedEntityRef\n      break;\n    case 31:                        // CharRef\n      shift(31);                    // CharRef\n      break;\n    case 275:                       // '{{'\n      shift(275);                   // '{{'\n      break;\n    case 278:                       // '}}'\n      shift(278);                   // '}}'\n      break;\n    case 274:                       // '{'\n      shift(274);                   // '{'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"TagContent\", e0);\n  };\n\n  this.parse_AposAttr = function()\n  {\n    eventHandler.startNonterminal(\"AposAttr\", e0);\n    lookahead1(10);                 // PredefinedEntityRef | EscapeApos | AposAttrContentChar | CharRef | EOF | \"'\" |\n                                    // '{' | '{{' | '}}'\n    switch (l1)\n    {\n    case 23:                        // EscapeApos\n      shift(23);                    // EscapeApos\n      break;\n    case 27:                        // AposAttrContentChar\n      shift(27);                    // AposAttrContentChar\n      break;\n    case 21:                        // PredefinedEntityRef\n      shift(21);                    // PredefinedEntityRef\n      break;\n    case 31:                        // CharRef\n      shift(31);                    // CharRef\n      break;\n    case 275:                       // '{{'\n      shift(275);                   // '{{'\n      break;\n    case 278:                       // '}}'\n      shift(278);                   // '}}'\n      break;\n    case 274:                       // '{'\n      shift(274);                   // '{'\n      break;\n    case 41:                        // \"'\"\n      shift(41);                    // \"'\"\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"AposAttr\", e0);\n  };\n\n  this.parse_QuotAttr = function()\n  {\n    eventHandler.startNonterminal(\"QuotAttr\", e0);\n    lookahead1(9);                  // PredefinedEntityRef | EscapeQuot | QuotAttrContentChar | CharRef | EOF | '\"' |\n                                    // '{' | '{{' | '}}'\n    switch (l1)\n    {\n    case 22:                        // EscapeQuot\n      shift(22);                    // EscapeQuot\n      break;\n    case 26:                        // QuotAttrContentChar\n      shift(26);                    // QuotAttrContentChar\n      break;\n    case 21:                        // PredefinedEntityRef\n      shift(21);                    // PredefinedEntityRef\n      break;\n    case 31:                        // CharRef\n      shift(31);                    // CharRef\n      break;\n    case 275:                       // '{{'\n      shift(275);                   // '{{'\n      break;\n    case 278:                       // '}}'\n      shift(278);                   // '}}'\n      break;\n    case 274:                       // '{'\n      shift(274);                   // '{'\n      break;\n    case 37:                        // '\"'\n      shift(37);                    // '\"'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"QuotAttr\", e0);\n  };\n\n  this.parse_CData = function()\n  {\n    eventHandler.startNonterminal(\"CData\", e0);\n    lookahead1(1);                  // CDataSectionContents | EOF | ']]>'\n    switch (l1)\n    {\n    case 14:                        // CDataSectionContents\n      shift(14);                    // CDataSectionContents\n      break;\n    case 67:                        // ']]>'\n      shift(67);                    // ']]>'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"CData\", e0);\n  };\n\n  this.parse_XMLComment = function()\n  {\n    eventHandler.startNonterminal(\"XMLComment\", e0);\n    lookahead1(0);                  // DirCommentContents | EOF | '-->'\n    switch (l1)\n    {\n    case 12:                        // DirCommentContents\n      shift(12);                    // DirCommentContents\n      break;\n    case 50:                        // '-->'\n      shift(50);                    // '-->'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"XMLComment\", e0);\n  };\n\n  this.parse_PI = function()\n  {\n    eventHandler.startNonterminal(\"PI\", e0);\n    lookahead1(3);                  // DirPIContents | EOF | '?' | '?>'\n    switch (l1)\n    {\n    case 13:                        // DirPIContents\n      shift(13);                    // DirPIContents\n      break;\n    case 62:                        // '?'\n      shift(62);                    // '?'\n      break;\n    case 63:                        // '?>'\n      shift(63);                    // '?>'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"PI\", e0);\n  };\n\n  this.parse_Pragma = function()\n  {\n    eventHandler.startNonterminal(\"Pragma\", e0);\n    lookahead1(2);                  // PragmaContents | EOF | '#' | '#)'\n    switch (l1)\n    {\n    case 11:                        // PragmaContents\n      shift(11);                    // PragmaContents\n      break;\n    case 38:                        // '#'\n      shift(38);                    // '#'\n      break;\n    case 39:                        // '#)'\n      shift(39);                    // '#)'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"Pragma\", e0);\n  };\n\n  this.parse_Comment = function()\n  {\n    eventHandler.startNonterminal(\"Comment\", e0);\n    lookahead1(4);                  // CommentContents | EOF | '(:' | ':)'\n    switch (l1)\n    {\n    case 55:                        // ':)'\n      shift(55);                    // ':)'\n      break;\n    case 44:                        // '(:'\n      shift(44);                    // '(:'\n      break;\n    case 32:                        // CommentContents\n      shift(32);                    // CommentContents\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"Comment\", e0);\n  };\n\n  this.parse_CommentDoc = function()\n  {\n    eventHandler.startNonterminal(\"CommentDoc\", e0);\n    lookahead1(6);                  // DocTag | DocCommentContents | EOF | '(:' | ':)'\n    switch (l1)\n    {\n    case 33:                        // DocTag\n      shift(33);                    // DocTag\n      break;\n    case 34:                        // DocCommentContents\n      shift(34);                    // DocCommentContents\n      break;\n    case 55:                        // ':)'\n      shift(55);                    // ':)'\n      break;\n    case 44:                        // '(:'\n      shift(44);                    // '(:'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"CommentDoc\", e0);\n  };\n\n  this.parse_QuotString = function()\n  {\n    eventHandler.startNonterminal(\"QuotString\", e0);\n    lookahead1(5);                  // JSONChar | JSONCharRef | JSONPredefinedCharRef | EOF | '\"'\n    switch (l1)\n    {\n    case 3:                         // JSONPredefinedCharRef\n      shift(3);                     // JSONPredefinedCharRef\n      break;\n    case 2:                         // JSONCharRef\n      shift(2);                     // JSONCharRef\n      break;\n    case 1:                         // JSONChar\n      shift(1);                     // JSONChar\n      break;\n    case 37:                        // '\"'\n      shift(37);                    // '\"'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"QuotString\", e0);\n  };\n\n  this.parse_AposString = function()\n  {\n    eventHandler.startNonterminal(\"AposString\", e0);\n    lookahead1(7);                  // PredefinedEntityRef | EscapeApos | AposChar | CharRef | EOF | \"'\"\n    switch (l1)\n    {\n    case 21:                        // PredefinedEntityRef\n      shift(21);                    // PredefinedEntityRef\n      break;\n    case 31:                        // CharRef\n      shift(31);                    // CharRef\n      break;\n    case 23:                        // EscapeApos\n      shift(23);                    // EscapeApos\n      break;\n    case 24:                        // AposChar\n      shift(24);                    // AposChar\n      break;\n    case 41:                        // \"'\"\n      shift(41);                    // \"'\"\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"AposString\", e0);\n  };\n\n  this.parse_Prefix = function()\n  {\n    eventHandler.startNonterminal(\"Prefix\", e0);\n    lookahead1W(13);                // NCName^Token | S^WS | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'first' | 'following' | 'following-sibling' | 'for' |\n                                    // 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' |\n                                    // 'in' | 'index' | 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' |\n                                    // 'is' | 'item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'switch' | 'text' | 'to' | 'treat' | 'try' |\n                                    // 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // 'xquery'\n    whitespace();\n    parse_NCName();\n    eventHandler.endNonterminal(\"Prefix\", e0);\n  };\n\n  this.parse__EQName = function()\n  {\n    eventHandler.startNonterminal(\"_EQName\", e0);\n    lookahead1W(12);                // EQName^Token | S^WS | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'first' | 'following' | 'following-sibling' | 'for' |\n                                    // 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' |\n                                    // 'in' | 'index' | 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' |\n                                    // 'is' | 'item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'switch' | 'text' | 'to' | 'treat' | 'try' |\n                                    // 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // 'xquery'\n    whitespace();\n    parse_EQName();\n    eventHandler.endNonterminal(\"_EQName\", e0);\n  };\n\n  function parse_EQName()\n  {\n    eventHandler.startNonterminal(\"EQName\", e0);\n    switch (l1)\n    {\n    case 80:                        // 'attribute'\n      shift(80);                    // 'attribute'\n      break;\n    case 94:                        // 'comment'\n      shift(94);                    // 'comment'\n      break;\n    case 118:                       // 'document-node'\n      shift(118);                   // 'document-node'\n      break;\n    case 119:                       // 'element'\n      shift(119);                   // 'element'\n      break;\n    case 122:                       // 'empty-sequence'\n      shift(122);                   // 'empty-sequence'\n      break;\n    case 143:                       // 'function'\n      shift(143);                   // 'function'\n      break;\n    case 150:                       // 'if'\n      shift(150);                   // 'if'\n      break;\n    case 163:                       // 'item'\n      shift(163);                   // 'item'\n      break;\n    case 183:                       // 'namespace-node'\n      shift(183);                   // 'namespace-node'\n      break;\n    case 189:                       // 'node'\n      shift(189);                   // 'node'\n      break;\n    case 214:                       // 'processing-instruction'\n      shift(214);                   // 'processing-instruction'\n      break;\n    case 224:                       // 'schema-attribute'\n      shift(224);                   // 'schema-attribute'\n      break;\n    case 225:                       // 'schema-element'\n      shift(225);                   // 'schema-element'\n      break;\n    case 241:                       // 'switch'\n      shift(241);                   // 'switch'\n      break;\n    case 242:                       // 'text'\n      shift(242);                   // 'text'\n      break;\n    case 251:                       // 'typeswitch'\n      shift(251);                   // 'typeswitch'\n      break;\n    default:\n      parse_FunctionName();\n    }\n    eventHandler.endNonterminal(\"EQName\", e0);\n  }\n\n  function parse_FunctionName()\n  {\n    eventHandler.startNonterminal(\"FunctionName\", e0);\n    switch (l1)\n    {\n    case 17:                        // EQName^Token\n      shift(17);                    // EQName^Token\n      break;\n    case 68:                        // 'after'\n      shift(68);                    // 'after'\n      break;\n    case 71:                        // 'ancestor'\n      shift(71);                    // 'ancestor'\n      break;\n    case 72:                        // 'ancestor-or-self'\n      shift(72);                    // 'ancestor-or-self'\n      break;\n    case 73:                        // 'and'\n      shift(73);                    // 'and'\n      break;\n    case 77:                        // 'as'\n      shift(77);                    // 'as'\n      break;\n    case 78:                        // 'ascending'\n      shift(78);                    // 'ascending'\n      break;\n    case 82:                        // 'before'\n      shift(82);                    // 'before'\n      break;\n    case 86:                        // 'case'\n      shift(86);                    // 'case'\n      break;\n    case 87:                        // 'cast'\n      shift(87);                    // 'cast'\n      break;\n    case 88:                        // 'castable'\n      shift(88);                    // 'castable'\n      break;\n    case 91:                        // 'child'\n      shift(91);                    // 'child'\n      break;\n    case 92:                        // 'collation'\n      shift(92);                    // 'collation'\n      break;\n    case 101:                       // 'copy'\n      shift(101);                   // 'copy'\n      break;\n    case 103:                       // 'count'\n      shift(103);                   // 'count'\n      break;\n    case 106:                       // 'declare'\n      shift(106);                   // 'declare'\n      break;\n    case 107:                       // 'default'\n      shift(107);                   // 'default'\n      break;\n    case 108:                       // 'delete'\n      shift(108);                   // 'delete'\n      break;\n    case 109:                       // 'descendant'\n      shift(109);                   // 'descendant'\n      break;\n    case 110:                       // 'descendant-or-self'\n      shift(110);                   // 'descendant-or-self'\n      break;\n    case 111:                       // 'descending'\n      shift(111);                   // 'descending'\n      break;\n    case 116:                       // 'div'\n      shift(116);                   // 'div'\n      break;\n    case 117:                       // 'document'\n      shift(117);                   // 'document'\n      break;\n    case 120:                       // 'else'\n      shift(120);                   // 'else'\n      break;\n    case 121:                       // 'empty'\n      shift(121);                   // 'empty'\n      break;\n    case 124:                       // 'end'\n      shift(124);                   // 'end'\n      break;\n    case 126:                       // 'eq'\n      shift(126);                   // 'eq'\n      break;\n    case 127:                       // 'every'\n      shift(127);                   // 'every'\n      break;\n    case 129:                       // 'except'\n      shift(129);                   // 'except'\n      break;\n    case 132:                       // 'first'\n      shift(132);                   // 'first'\n      break;\n    case 133:                       // 'following'\n      shift(133);                   // 'following'\n      break;\n    case 134:                       // 'following-sibling'\n      shift(134);                   // 'following-sibling'\n      break;\n    case 135:                       // 'for'\n      shift(135);                   // 'for'\n      break;\n    case 144:                       // 'ge'\n      shift(144);                   // 'ge'\n      break;\n    case 146:                       // 'group'\n      shift(146);                   // 'group'\n      break;\n    case 148:                       // 'gt'\n      shift(148);                   // 'gt'\n      break;\n    case 149:                       // 'idiv'\n      shift(149);                   // 'idiv'\n      break;\n    case 151:                       // 'import'\n      shift(151);                   // 'import'\n      break;\n    case 157:                       // 'insert'\n      shift(157);                   // 'insert'\n      break;\n    case 158:                       // 'instance'\n      shift(158);                   // 'instance'\n      break;\n    case 160:                       // 'intersect'\n      shift(160);                   // 'intersect'\n      break;\n    case 161:                       // 'into'\n      shift(161);                   // 'into'\n      break;\n    case 162:                       // 'is'\n      shift(162);                   // 'is'\n      break;\n    case 168:                       // 'last'\n      shift(168);                   // 'last'\n      break;\n    case 170:                       // 'le'\n      shift(170);                   // 'le'\n      break;\n    case 172:                       // 'let'\n      shift(172);                   // 'let'\n      break;\n    case 176:                       // 'lt'\n      shift(176);                   // 'lt'\n      break;\n    case 178:                       // 'mod'\n      shift(178);                   // 'mod'\n      break;\n    case 179:                       // 'modify'\n      shift(179);                   // 'modify'\n      break;\n    case 180:                       // 'module'\n      shift(180);                   // 'module'\n      break;\n    case 182:                       // 'namespace'\n      shift(182);                   // 'namespace'\n      break;\n    case 184:                       // 'ne'\n      shift(184);                   // 'ne'\n      break;\n    case 196:                       // 'only'\n      shift(196);                   // 'only'\n      break;\n    case 198:                       // 'or'\n      shift(198);                   // 'or'\n      break;\n    case 199:                       // 'order'\n      shift(199);                   // 'order'\n      break;\n    case 200:                       // 'ordered'\n      shift(200);                   // 'ordered'\n      break;\n    case 204:                       // 'parent'\n      shift(204);                   // 'parent'\n      break;\n    case 210:                       // 'preceding'\n      shift(210);                   // 'preceding'\n      break;\n    case 211:                       // 'preceding-sibling'\n      shift(211);                   // 'preceding-sibling'\n      break;\n    case 216:                       // 'rename'\n      shift(216);                   // 'rename'\n      break;\n    case 217:                       // 'replace'\n      shift(217);                   // 'replace'\n      break;\n    case 218:                       // 'return'\n      shift(218);                   // 'return'\n      break;\n    case 222:                       // 'satisfies'\n      shift(222);                   // 'satisfies'\n      break;\n    case 227:                       // 'self'\n      shift(227);                   // 'self'\n      break;\n    case 233:                       // 'some'\n      shift(233);                   // 'some'\n      break;\n    case 234:                       // 'stable'\n      shift(234);                   // 'stable'\n      break;\n    case 235:                       // 'start'\n      shift(235);                   // 'start'\n      break;\n    case 246:                       // 'to'\n      shift(246);                   // 'to'\n      break;\n    case 247:                       // 'treat'\n      shift(247);                   // 'treat'\n      break;\n    case 248:                       // 'try'\n      shift(248);                   // 'try'\n      break;\n    case 252:                       // 'union'\n      shift(252);                   // 'union'\n      break;\n    case 254:                       // 'unordered'\n      shift(254);                   // 'unordered'\n      break;\n    case 258:                       // 'validate'\n      shift(258);                   // 'validate'\n      break;\n    case 264:                       // 'where'\n      shift(264);                   // 'where'\n      break;\n    case 268:                       // 'with'\n      shift(268);                   // 'with'\n      break;\n    case 272:                       // 'xquery'\n      shift(272);                   // 'xquery'\n      break;\n    case 70:                        // 'allowing'\n      shift(70);                    // 'allowing'\n      break;\n    case 79:                        // 'at'\n      shift(79);                    // 'at'\n      break;\n    case 81:                        // 'base-uri'\n      shift(81);                    // 'base-uri'\n      break;\n    case 83:                        // 'boundary-space'\n      shift(83);                    // 'boundary-space'\n      break;\n    case 84:                        // 'break'\n      shift(84);                    // 'break'\n      break;\n    case 89:                        // 'catch'\n      shift(89);                    // 'catch'\n      break;\n    case 96:                        // 'construction'\n      shift(96);                    // 'construction'\n      break;\n    case 99:                        // 'context'\n      shift(99);                    // 'context'\n      break;\n    case 100:                       // 'continue'\n      shift(100);                   // 'continue'\n      break;\n    case 102:                       // 'copy-namespaces'\n      shift(102);                   // 'copy-namespaces'\n      break;\n    case 104:                       // 'decimal-format'\n      shift(104);                   // 'decimal-format'\n      break;\n    case 123:                       // 'encoding'\n      shift(123);                   // 'encoding'\n      break;\n    case 130:                       // 'exit'\n      shift(130);                   // 'exit'\n      break;\n    case 131:                       // 'external'\n      shift(131);                   // 'external'\n      break;\n    case 139:                       // 'ft-option'\n      shift(139);                   // 'ft-option'\n      break;\n    case 152:                       // 'in'\n      shift(152);                   // 'in'\n      break;\n    case 153:                       // 'index'\n      shift(153);                   // 'index'\n      break;\n    case 159:                       // 'integrity'\n      shift(159);                   // 'integrity'\n      break;\n    case 169:                       // 'lax'\n      shift(169);                   // 'lax'\n      break;\n    case 190:                       // 'nodes'\n      shift(190);                   // 'nodes'\n      break;\n    case 197:                       // 'option'\n      shift(197);                   // 'option'\n      break;\n    case 201:                       // 'ordering'\n      shift(201);                   // 'ordering'\n      break;\n    case 220:                       // 'revalidation'\n      shift(220);                   // 'revalidation'\n      break;\n    case 223:                       // 'schema'\n      shift(223);                   // 'schema'\n      break;\n    case 226:                       // 'score'\n      shift(226);                   // 'score'\n      break;\n    case 232:                       // 'sliding'\n      shift(232);                   // 'sliding'\n      break;\n    case 238:                       // 'strict'\n      shift(238);                   // 'strict'\n      break;\n    case 249:                       // 'tumbling'\n      shift(249);                   // 'tumbling'\n      break;\n    case 250:                       // 'type'\n      shift(250);                   // 'type'\n      break;\n    case 255:                       // 'updating'\n      shift(255);                   // 'updating'\n      break;\n    case 259:                       // 'value'\n      shift(259);                   // 'value'\n      break;\n    case 260:                       // 'variable'\n      shift(260);                   // 'variable'\n      break;\n    case 261:                       // 'version'\n      shift(261);                   // 'version'\n      break;\n    case 265:                       // 'while'\n      shift(265);                   // 'while'\n      break;\n    case 95:                        // 'constraint'\n      shift(95);                    // 'constraint'\n      break;\n    case 174:                       // 'loop'\n      shift(174);                   // 'loop'\n      break;\n    default:\n      shift(219);                   // 'returning'\n    }\n    eventHandler.endNonterminal(\"FunctionName\", e0);\n  }\n\n  function parse_NCName()\n  {\n    eventHandler.startNonterminal(\"NCName\", e0);\n    switch (l1)\n    {\n    case 28:                        // NCName^Token\n      shift(28);                    // NCName^Token\n      break;\n    case 68:                        // 'after'\n      shift(68);                    // 'after'\n      break;\n    case 73:                        // 'and'\n      shift(73);                    // 'and'\n      break;\n    case 77:                        // 'as'\n      shift(77);                    // 'as'\n      break;\n    case 78:                        // 'ascending'\n      shift(78);                    // 'ascending'\n      break;\n    case 82:                        // 'before'\n      shift(82);                    // 'before'\n      break;\n    case 86:                        // 'case'\n      shift(86);                    // 'case'\n      break;\n    case 87:                        // 'cast'\n      shift(87);                    // 'cast'\n      break;\n    case 88:                        // 'castable'\n      shift(88);                    // 'castable'\n      break;\n    case 92:                        // 'collation'\n      shift(92);                    // 'collation'\n      break;\n    case 103:                       // 'count'\n      shift(103);                   // 'count'\n      break;\n    case 107:                       // 'default'\n      shift(107);                   // 'default'\n      break;\n    case 111:                       // 'descending'\n      shift(111);                   // 'descending'\n      break;\n    case 116:                       // 'div'\n      shift(116);                   // 'div'\n      break;\n    case 120:                       // 'else'\n      shift(120);                   // 'else'\n      break;\n    case 121:                       // 'empty'\n      shift(121);                   // 'empty'\n      break;\n    case 124:                       // 'end'\n      shift(124);                   // 'end'\n      break;\n    case 126:                       // 'eq'\n      shift(126);                   // 'eq'\n      break;\n    case 129:                       // 'except'\n      shift(129);                   // 'except'\n      break;\n    case 135:                       // 'for'\n      shift(135);                   // 'for'\n      break;\n    case 144:                       // 'ge'\n      shift(144);                   // 'ge'\n      break;\n    case 146:                       // 'group'\n      shift(146);                   // 'group'\n      break;\n    case 148:                       // 'gt'\n      shift(148);                   // 'gt'\n      break;\n    case 149:                       // 'idiv'\n      shift(149);                   // 'idiv'\n      break;\n    case 158:                       // 'instance'\n      shift(158);                   // 'instance'\n      break;\n    case 160:                       // 'intersect'\n      shift(160);                   // 'intersect'\n      break;\n    case 161:                       // 'into'\n      shift(161);                   // 'into'\n      break;\n    case 162:                       // 'is'\n      shift(162);                   // 'is'\n      break;\n    case 170:                       // 'le'\n      shift(170);                   // 'le'\n      break;\n    case 172:                       // 'let'\n      shift(172);                   // 'let'\n      break;\n    case 176:                       // 'lt'\n      shift(176);                   // 'lt'\n      break;\n    case 178:                       // 'mod'\n      shift(178);                   // 'mod'\n      break;\n    case 179:                       // 'modify'\n      shift(179);                   // 'modify'\n      break;\n    case 184:                       // 'ne'\n      shift(184);                   // 'ne'\n      break;\n    case 196:                       // 'only'\n      shift(196);                   // 'only'\n      break;\n    case 198:                       // 'or'\n      shift(198);                   // 'or'\n      break;\n    case 199:                       // 'order'\n      shift(199);                   // 'order'\n      break;\n    case 218:                       // 'return'\n      shift(218);                   // 'return'\n      break;\n    case 222:                       // 'satisfies'\n      shift(222);                   // 'satisfies'\n      break;\n    case 234:                       // 'stable'\n      shift(234);                   // 'stable'\n      break;\n    case 235:                       // 'start'\n      shift(235);                   // 'start'\n      break;\n    case 246:                       // 'to'\n      shift(246);                   // 'to'\n      break;\n    case 247:                       // 'treat'\n      shift(247);                   // 'treat'\n      break;\n    case 252:                       // 'union'\n      shift(252);                   // 'union'\n      break;\n    case 264:                       // 'where'\n      shift(264);                   // 'where'\n      break;\n    case 268:                       // 'with'\n      shift(268);                   // 'with'\n      break;\n    case 71:                        // 'ancestor'\n      shift(71);                    // 'ancestor'\n      break;\n    case 72:                        // 'ancestor-or-self'\n      shift(72);                    // 'ancestor-or-self'\n      break;\n    case 80:                        // 'attribute'\n      shift(80);                    // 'attribute'\n      break;\n    case 91:                        // 'child'\n      shift(91);                    // 'child'\n      break;\n    case 94:                        // 'comment'\n      shift(94);                    // 'comment'\n      break;\n    case 101:                       // 'copy'\n      shift(101);                   // 'copy'\n      break;\n    case 106:                       // 'declare'\n      shift(106);                   // 'declare'\n      break;\n    case 108:                       // 'delete'\n      shift(108);                   // 'delete'\n      break;\n    case 109:                       // 'descendant'\n      shift(109);                   // 'descendant'\n      break;\n    case 110:                       // 'descendant-or-self'\n      shift(110);                   // 'descendant-or-self'\n      break;\n    case 117:                       // 'document'\n      shift(117);                   // 'document'\n      break;\n    case 118:                       // 'document-node'\n      shift(118);                   // 'document-node'\n      break;\n    case 119:                       // 'element'\n      shift(119);                   // 'element'\n      break;\n    case 122:                       // 'empty-sequence'\n      shift(122);                   // 'empty-sequence'\n      break;\n    case 127:                       // 'every'\n      shift(127);                   // 'every'\n      break;\n    case 132:                       // 'first'\n      shift(132);                   // 'first'\n      break;\n    case 133:                       // 'following'\n      shift(133);                   // 'following'\n      break;\n    case 134:                       // 'following-sibling'\n      shift(134);                   // 'following-sibling'\n      break;\n    case 143:                       // 'function'\n      shift(143);                   // 'function'\n      break;\n    case 150:                       // 'if'\n      shift(150);                   // 'if'\n      break;\n    case 151:                       // 'import'\n      shift(151);                   // 'import'\n      break;\n    case 157:                       // 'insert'\n      shift(157);                   // 'insert'\n      break;\n    case 163:                       // 'item'\n      shift(163);                   // 'item'\n      break;\n    case 168:                       // 'last'\n      shift(168);                   // 'last'\n      break;\n    case 180:                       // 'module'\n      shift(180);                   // 'module'\n      break;\n    case 182:                       // 'namespace'\n      shift(182);                   // 'namespace'\n      break;\n    case 183:                       // 'namespace-node'\n      shift(183);                   // 'namespace-node'\n      break;\n    case 189:                       // 'node'\n      shift(189);                   // 'node'\n      break;\n    case 200:                       // 'ordered'\n      shift(200);                   // 'ordered'\n      break;\n    case 204:                       // 'parent'\n      shift(204);                   // 'parent'\n      break;\n    case 210:                       // 'preceding'\n      shift(210);                   // 'preceding'\n      break;\n    case 211:                       // 'preceding-sibling'\n      shift(211);                   // 'preceding-sibling'\n      break;\n    case 214:                       // 'processing-instruction'\n      shift(214);                   // 'processing-instruction'\n      break;\n    case 216:                       // 'rename'\n      shift(216);                   // 'rename'\n      break;\n    case 217:                       // 'replace'\n      shift(217);                   // 'replace'\n      break;\n    case 224:                       // 'schema-attribute'\n      shift(224);                   // 'schema-attribute'\n      break;\n    case 225:                       // 'schema-element'\n      shift(225);                   // 'schema-element'\n      break;\n    case 227:                       // 'self'\n      shift(227);                   // 'self'\n      break;\n    case 233:                       // 'some'\n      shift(233);                   // 'some'\n      break;\n    case 241:                       // 'switch'\n      shift(241);                   // 'switch'\n      break;\n    case 242:                       // 'text'\n      shift(242);                   // 'text'\n      break;\n    case 248:                       // 'try'\n      shift(248);                   // 'try'\n      break;\n    case 251:                       // 'typeswitch'\n      shift(251);                   // 'typeswitch'\n      break;\n    case 254:                       // 'unordered'\n      shift(254);                   // 'unordered'\n      break;\n    case 258:                       // 'validate'\n      shift(258);                   // 'validate'\n      break;\n    case 260:                       // 'variable'\n      shift(260);                   // 'variable'\n      break;\n    case 272:                       // 'xquery'\n      shift(272);                   // 'xquery'\n      break;\n    case 70:                        // 'allowing'\n      shift(70);                    // 'allowing'\n      break;\n    case 79:                        // 'at'\n      shift(79);                    // 'at'\n      break;\n    case 81:                        // 'base-uri'\n      shift(81);                    // 'base-uri'\n      break;\n    case 83:                        // 'boundary-space'\n      shift(83);                    // 'boundary-space'\n      break;\n    case 84:                        // 'break'\n      shift(84);                    // 'break'\n      break;\n    case 89:                        // 'catch'\n      shift(89);                    // 'catch'\n      break;\n    case 96:                        // 'construction'\n      shift(96);                    // 'construction'\n      break;\n    case 99:                        // 'context'\n      shift(99);                    // 'context'\n      break;\n    case 100:                       // 'continue'\n      shift(100);                   // 'continue'\n      break;\n    case 102:                       // 'copy-namespaces'\n      shift(102);                   // 'copy-namespaces'\n      break;\n    case 104:                       // 'decimal-format'\n      shift(104);                   // 'decimal-format'\n      break;\n    case 123:                       // 'encoding'\n      shift(123);                   // 'encoding'\n      break;\n    case 130:                       // 'exit'\n      shift(130);                   // 'exit'\n      break;\n    case 131:                       // 'external'\n      shift(131);                   // 'external'\n      break;\n    case 139:                       // 'ft-option'\n      shift(139);                   // 'ft-option'\n      break;\n    case 152:                       // 'in'\n      shift(152);                   // 'in'\n      break;\n    case 153:                       // 'index'\n      shift(153);                   // 'index'\n      break;\n    case 159:                       // 'integrity'\n      shift(159);                   // 'integrity'\n      break;\n    case 169:                       // 'lax'\n      shift(169);                   // 'lax'\n      break;\n    case 190:                       // 'nodes'\n      shift(190);                   // 'nodes'\n      break;\n    case 197:                       // 'option'\n      shift(197);                   // 'option'\n      break;\n    case 201:                       // 'ordering'\n      shift(201);                   // 'ordering'\n      break;\n    case 220:                       // 'revalidation'\n      shift(220);                   // 'revalidation'\n      break;\n    case 223:                       // 'schema'\n      shift(223);                   // 'schema'\n      break;\n    case 226:                       // 'score'\n      shift(226);                   // 'score'\n      break;\n    case 232:                       // 'sliding'\n      shift(232);                   // 'sliding'\n      break;\n    case 238:                       // 'strict'\n      shift(238);                   // 'strict'\n      break;\n    case 249:                       // 'tumbling'\n      shift(249);                   // 'tumbling'\n      break;\n    case 250:                       // 'type'\n      shift(250);                   // 'type'\n      break;\n    case 255:                       // 'updating'\n      shift(255);                   // 'updating'\n      break;\n    case 259:                       // 'value'\n      shift(259);                   // 'value'\n      break;\n    case 261:                       // 'version'\n      shift(261);                   // 'version'\n      break;\n    case 265:                       // 'while'\n      shift(265);                   // 'while'\n      break;\n    case 95:                        // 'constraint'\n      shift(95);                    // 'constraint'\n      break;\n    case 174:                       // 'loop'\n      shift(174);                   // 'loop'\n      break;\n    default:\n      shift(219);                   // 'returning'\n    }\n    eventHandler.endNonterminal(\"NCName\", e0);\n  }\n\n  function shift(t)\n  {\n    if (l1 == t)\n    {\n      whitespace();\n      eventHandler.terminal(JSONiqTokenizer.TOKEN[l1], b1, e1 > size ? size : e1);\n      b0 = b1; e0 = e1; l1 = 0;\n    }\n    else\n    {\n      error(b1, e1, 0, l1, t);\n    }\n  }\n\n  function whitespace()\n  {\n    if (e0 != b1)\n    {\n      b0 = e0;\n      e0 = b1;\n      eventHandler.whitespace(b0, e0);\n    }\n  }\n\n  function matchW(set)\n  {\n    var code;\n    for (;;)\n    {\n      code = match(set);\n      if (code != 30)               // S^WS\n      {\n        break;\n      }\n    }\n    return code;\n  }\n\n  function lookahead1W(set)\n  {\n    if (l1 == 0)\n    {\n      l1 = matchW(set);\n      b1 = begin;\n      e1 = end;\n    }\n  }\n\n  function lookahead1(set)\n  {\n    if (l1 == 0)\n    {\n      l1 = match(set);\n      b1 = begin;\n      e1 = end;\n    }\n  }\n\n  function error(b, e, s, l, t)\n  {\n    throw new self.ParseException(b, e, s, l, t);\n  }\n\n  var lk, b0, e0;\n  var l1, b1, e1;\n  var eventHandler;\n\n  var input;\n  var size;\n  var begin;\n  var end;\n\n  function match(tokenSetId)\n  {\n    var nonbmp = false;\n    begin = end;\n    var current = end;\n    var result = JSONiqTokenizer.INITIAL[tokenSetId];\n    var state = 0;\n\n    for (var code = result & 4095; code != 0; )\n    {\n      var charclass;\n      var c0 = current < size ? input.charCodeAt(current) : 0;\n      ++current;\n      if (c0 < 0x80)\n      {\n        charclass = JSONiqTokenizer.MAP0[c0];\n      }\n      else if (c0 < 0xd800)\n      {\n        var c1 = c0 >> 4;\n        charclass = JSONiqTokenizer.MAP1[(c0 & 15) + JSONiqTokenizer.MAP1[(c1 & 31) + JSONiqTokenizer.MAP1[c1 >> 5]]];\n      }\n      else\n      {\n        if (c0 < 0xdc00)\n        {\n          var c1 = current < size ? input.charCodeAt(current) : 0;\n          if (c1 >= 0xdc00 && c1 < 0xe000)\n          {\n            ++current;\n            c0 = ((c0 & 0x3ff) << 10) + (c1 & 0x3ff) + 0x10000;\n            nonbmp = true;\n          }\n        }\n        var lo = 0, hi = 5;\n        for (var m = 3; ; m = (hi + lo) >> 1)\n        {\n          if (JSONiqTokenizer.MAP2[m] > c0) hi = m - 1;\n          else if (JSONiqTokenizer.MAP2[6 + m] < c0) lo = m + 1;\n          else {charclass = JSONiqTokenizer.MAP2[12 + m]; break;}\n          if (lo > hi) {charclass = 0; break;}\n        }\n      }\n\n      state = code;\n      var i0 = (charclass << 12) + code - 1;\n      code = JSONiqTokenizer.TRANSITION[(i0 & 15) + JSONiqTokenizer.TRANSITION[i0 >> 4]];\n\n      if (code > 4095)\n      {\n        result = code;\n        code &= 4095;\n        end = current;\n      }\n    }\n\n    result >>= 12;\n    if (result == 0)\n    {\n      end = current - 1;\n      var c1 = end < size ? input.charCodeAt(end) : 0;\n      if (c1 >= 0xdc00 && c1 < 0xe000) --end;\n      return error(begin, end, state, -1, -1);\n    }\n\n    if (nonbmp)\n    {\n      for (var i = result >> 9; i > 0; --i)\n      {\n        --end;\n        var c1 = end < size ? input.charCodeAt(end) : 0;\n        if (c1 >= 0xdc00 && c1 < 0xe000) --end;\n      }\n    }\n    else\n    {\n      end -= result >> 9;\n    }\n\n    return (result & 511) - 1;\n  }\n}\n\nJSONiqTokenizer.getTokenSet = function(tokenSetId)\n{\n  var set = [];\n  var s = tokenSetId < 0 ? - tokenSetId : INITIAL[tokenSetId] & 4095;\n  for (var i = 0; i < 279; i += 32)\n  {\n    var j = i;\n    var i0 = (i >> 5) * 2066 + s - 1;\n    var i1 = i0 >> 2;\n    var i2 = i1 >> 2;\n    var f = JSONiqTokenizer.EXPECTED[(i0 & 3) + JSONiqTokenizer.EXPECTED[(i1 & 3) + JSONiqTokenizer.EXPECTED[(i2 & 3) + JSONiqTokenizer.EXPECTED[i2 >> 2]]]];\n    for ( ; f != 0; f >>>= 1, ++j)\n    {\n      if ((f & 1) != 0)\n      {\n        set.push(JSONiqTokenizer.TOKEN[j]);\n      }\n    }\n  }\n  return set;\n};\n\nJSONiqTokenizer.MAP0 =\n[\n  /*   0 */ 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5,\n  /*  36 */ 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 20, 21, 22, 23, 24,\n  /*  64 */ 25, 26, 27, 28, 29, 30, 27, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 31, 31, 33, 31, 31, 31, 31, 31, 31,\n  /*  91 */ 34, 35, 36, 37, 31, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 31, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,\n  /* 118 */ 58, 59, 60, 61, 31, 62, 63, 64, 65, 37\n];\n\nJSONiqTokenizer.MAP1 =\n[\n  /*   0 */ 108, 124, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 156, 181, 181, 181, 181,\n  /*  21 */ 181, 214, 215, 213, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214,\n  /*  42 */ 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214,\n  /*  63 */ 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214,\n  /*  84 */ 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214,\n  /* 105 */ 214, 214, 214, 247, 261, 277, 293, 309, 347, 363, 379, 416, 416, 416, 408, 331, 323, 331, 323, 331, 331,\n  /* 126 */ 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 433, 433, 433, 433, 433, 433, 433,\n  /* 147 */ 316, 331, 331, 331, 331, 331, 331, 331, 331, 394, 416, 416, 417, 415, 416, 416, 331, 331, 331, 331, 331,\n  /* 168 */ 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 416, 416, 416, 416, 416, 416, 416, 416,\n  /* 189 */ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,\n  /* 210 */ 416, 416, 416, 330, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331,\n  /* 231 */ 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 416, 67, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 256 */ 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,\n  /* 290 */ 15, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 27, 31,\n  /* 317 */ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 37, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,\n  /* 344 */ 31, 31, 31, 31, 32, 31, 31, 33, 31, 31, 31, 31, 31, 31, 34, 35, 36, 37, 31, 37, 38, 39, 40, 41, 42, 43, 44,\n  /* 371 */ 45, 46, 31, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 31, 62, 63, 64, 65, 37, 37, 37, 37,\n  /* 398 */ 37, 37, 37, 37, 37, 37, 37, 37, 31, 31, 37, 37, 37, 37, 37, 37, 37, 66, 37, 37, 37, 37, 37, 37, 37, 37, 37,\n  /* 425 */ 37, 37, 37, 37, 37, 37, 37, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66\n];\n\nJSONiqTokenizer.MAP2 =\n[\n  /*  0 */ 57344, 63744, 64976, 65008, 65536, 983040, 63743, 64975, 65007, 65533, 983039, 1114111, 37, 31, 37, 31, 31,\n  /* 17 */ 37\n];\n\nJSONiqTokenizer.INITIAL =\n[\n  /*  0 */ 1, 2, 49155, 57348, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15\n];\n\nJSONiqTokenizer.TRANSITION =\n[\n  /*     0 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*    15 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*    30 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*    45 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*    60 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*    75 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*    90 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   105 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   120 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   135 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   150 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   165 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   180 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   195 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   210 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   225 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   240 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   255 */ 19058, 17408, 19288, 17439, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486,\n  /*   270 */ 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 22126, 17990, 18622, 19411, 20306, 17996, 17689,\n  /*   285 */ 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17672, 18921, 19514, 17705,\n  /*   300 */ 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 19469, 17878,\n  /*   315 */ 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102,\n  /*   330 */ 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 36919, 18234, 18262, 18278, 18294,\n  /*   345 */ 18320, 18336, 18361, 18397, 18419, 18432, 18304, 18448, 18485, 18523, 18553, 18583, 18599, 18638, 18497,\n  /*   360 */ 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450,\n  /*   375 */ 22022, 18765, 18825, 18841, 18871, 18906, 18944, 18960, 18976, 19041, 19056, 19058, 19058, 19058, 19058,\n  /*   390 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   405 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   420 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   435 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   450 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   465 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   480 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   495 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   510 */ 19058, 19058, 19074, 36169, 17439, 36866, 17466, 36890, 36866, 22314, 19105, 22987, 17556, 17575, 22288,\n  /*   525 */ 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 22126, 17990, 18622, 19411, 20306, 17996,\n  /*   540 */ 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17672, 18921, 19514,\n  /*   555 */ 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 19469,\n  /*   570 */ 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928,\n  /*   585 */ 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 36919, 18234, 18262, 18278,\n  /*   600 */ 18294, 18320, 18336, 18361, 18397, 18419, 18432, 18304, 18448, 18485, 18523, 18553, 18583, 18599, 18638,\n  /*   615 */ 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838,\n  /*   630 */ 17450, 22022, 18765, 18825, 18841, 18871, 18906, 18944, 18960, 18976, 19041, 19056, 19058, 19058, 19058,\n  /*   645 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   660 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   675 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   690 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   705 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   720 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   735 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   750 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   765 */ 19058, 19058, 19058, 22182, 19288, 19121, 36866, 17466, 18345, 36866, 21991, 22971, 22987, 17556, 17575,\n  /*   780 */ 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306,\n  /*   795 */ 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921,\n  /*   810 */ 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008,\n  /*   825 */ 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906,\n  /*   840 */ 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262,\n  /*   855 */ 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149,\n  /*   870 */ 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054,\n  /*   885 */ 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058,\n  /*   900 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   915 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   930 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   945 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   960 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   975 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*   990 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1005 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1020 */ 19058, 19058, 19058, 19058, 19273, 19552, 19304, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556,\n  /*  1035 */ 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411,\n  /*  1050 */ 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862,\n  /*  1065 */ 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712,\n  /*  1080 */ 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890,\n  /*  1095 */ 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935,\n  /*  1110 */ 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583,\n  /*  1125 */ 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915,\n  /*  1140 */ 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058,\n  /*  1155 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1170 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1185 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1200 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1215 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1230 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1245 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1260 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1275 */ 19058, 19058, 19058, 19058, 19058, 19332, 17423, 19363, 36866, 17466, 17537, 36866, 21991, 22971, 22987,\n  /*  1290 */ 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 18614, 18622,\n  /*  1305 */ 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 19391, 36867, 19404, 20299, 36866, 17647,\n  /*  1320 */ 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 19427, 18403, 18928, 19521,\n  /*  1335 */ 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884,\n  /*  1350 */ 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134,\n  /*  1365 */ 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553,\n  /*  1380 */ 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906,\n  /*  1395 */ 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056,\n  /*  1410 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1425 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1440 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1455 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1470 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1485 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1500 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1515 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1530 */ 19058, 19058, 19058, 19058, 19058, 19058, 36154, 19288, 19457, 36866, 17466, 17740, 36866, 21991, 22971,\n  /*  1545 */ 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990,\n  /*  1560 */ 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866,\n  /*  1575 */ 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928,\n  /*  1590 */ 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218,\n  /*  1605 */ 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026,\n  /*  1620 */ 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523,\n  /*  1635 */ 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026,\n  /*  1650 */ 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041,\n  /*  1665 */ 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1680 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1695 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1710 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1725 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1740 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1755 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1770 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1785 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22780, 19288, 19457, 36866, 17466, 36890, 36866, 21991,\n  /*  1800 */ 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462,\n  /*  1815 */ 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299,\n  /*  1830 */ 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403,\n  /*  1845 */ 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064,\n  /*  1860 */ 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010,\n  /*  1875 */ 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485,\n  /*  1890 */ 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681,\n  /*  1905 */ 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976,\n  /*  1920 */ 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1935 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1950 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1965 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1980 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  1995 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2010 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2025 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2040 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22375, 22197, 18469, 36866, 17466, 36890, 36866,\n  /*  2055 */ 21991, 24018, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 21331, 22984, 17553, 17572, 22285,\n  /*  2070 */ 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 19485, 19501, 36867, 19404,\n  /*  2085 */ 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854,\n  /*  2100 */ 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381,\n  /*  2115 */ 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214,\n  /*  2130 */ 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448,\n  /*  2145 */ 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737,\n  /*  2160 */ 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257,\n  /*  2175 */ 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2190 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2205 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2220 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2235 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2250 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2265 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2280 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2295 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19537, 22390, 19568, 36866, 17466, 36890,\n  /*  2310 */ 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572,\n  /*  2325 */ 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867,\n  /*  2340 */ 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825,\n  /*  2355 */ 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012,\n  /*  2370 */ 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166,\n  /*  2385 */ 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304,\n  /*  2400 */ 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712,\n  /*  2415 */ 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241,\n  /*  2430 */ 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2445 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2460 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2475 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2490 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2505 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2520 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2535 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2550 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19596, 19611, 19457, 36866, 17466,\n  /*  2565 */ 36890, 36866, 18246, 19627, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553,\n  /*  2580 */ 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083,\n  /*  2595 */ 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800,\n  /*  2610 */ 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960,\n  /*  2625 */ 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150,\n  /*  2640 */ 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096,\n  /*  2655 */ 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164,\n  /*  2670 */ 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906,\n  /*  2685 */ 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2700 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2715 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2730 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2745 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2760 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2775 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2790 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2805 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22242, 20553, 19457, 36866,\n  /*  2820 */ 17466, 36890, 36866, 18648, 30477, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984,\n  /*  2835 */ 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619,\n  /*  2850 */ 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784,\n  /*  2865 */ 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178,\n  /*  2880 */ 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493,\n  /*  2895 */ 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274,\n  /*  2910 */ 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696,\n  /*  2925 */ 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871,\n  /*  2940 */ 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2955 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2970 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  2985 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3000 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3015 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3030 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3045 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3060 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36472, 19288, 19457,\n  /*  3075 */ 36866, 17466, 17809, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 21770,\n  /*  3090 */ 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468,\n  /*  3105 */ 17619, 19643, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756,\n  /*  3120 */ 17784, 17800, 17825, 19672, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944,\n  /*  3135 */ 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963,\n  /*  3150 */ 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397,\n  /*  3165 */ 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507,\n  /*  3180 */ 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841,\n  /*  3195 */ 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3210 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3225 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3240 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3255 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3270 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3285 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3300 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3315 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 20538, 19288,\n  /*  3330 */ 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373,\n  /*  3345 */ 17975, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896,\n  /*  3360 */ 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728,\n  /*  3375 */ 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922,\n  /*  3390 */ 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931,\n  /*  3405 */ 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361,\n  /*  3420 */ 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680,\n  /*  3435 */ 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225,\n  /*  3450 */ 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3465 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3480 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3495 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3510 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3525 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3540 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3555 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3570 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22345,\n  /*  3585 */ 19288, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525,\n  /*  3600 */ 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591,\n  /*  3615 */ 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017,\n  /*  3630 */ 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900,\n  /*  3645 */ 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130,\n  /*  3660 */ 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336,\n  /*  3675 */ 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664,\n  /*  3690 */ 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765,\n  /*  3705 */ 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3720 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3735 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3750 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3765 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3780 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3795 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3810 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3825 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3840 */ 19726, 19742, 21529, 24035, 23112, 26225, 23511, 27749, 27397, 24035, 34360, 24035, 24036, 23114, 35166,\n  /*  3855 */ 23114, 23114, 19758, 23511, 35247, 23511, 23511, 28447, 19803, 24035, 24035, 24035, 24035, 26576, 23114,\n  /*  3870 */ 23114, 23114, 23114, 24254, 19821, 23511, 23511, 23511, 23511, 23512, 19441, 36539, 24035, 24035, 24035,\n  /*  3885 */ 24035, 19846, 19869, 23114, 23114, 23114, 28618, 32187, 19892, 23511, 23511, 23511, 34585, 20402, 36647,\n  /*  3900 */ 24035, 24035, 24036, 23114, 33757, 23114, 23114, 23029, 20271, 23511, 27070, 23511, 23511, 30562, 24035,\n  /*  3915 */ 24035, 29274, 26576, 23114, 23114, 31118, 23036, 29695, 23511, 23511, 32431, 23634, 30821, 24035, 23110,\n  /*  3930 */ 19913, 23114, 23467, 31261, 23261, 34299, 19932, 24035, 32609, 19965, 35389, 19984, 27689, 19830, 29391,\n  /*  3945 */ 29337, 20041, 22643, 35619, 33728, 20062, 20121, 20166, 35100, 26145, 20211, 23008, 19876, 20208, 20227,\n  /*  3960 */ 25670, 20132, 26578, 27685, 20141, 20243, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058,\n  /*  3975 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  3990 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4005 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4020 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4035 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4050 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4065 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4080 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4095 */ 19058, 36094, 19288, 19457, 36866, 17466, 21724, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486,\n  /*  4110 */ 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689,\n  /*  4125 */ 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705,\n  /*  4140 */ 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878,\n  /*  4155 */ 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102,\n  /*  4170 */ 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294,\n  /*  4185 */ 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497,\n  /*  4200 */ 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450,\n  /*  4215 */ 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058,\n  /*  4230 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4245 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4260 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4275 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4290 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4305 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4320 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4335 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4350 */ 19058, 19058, 22735, 19552, 20287, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288,\n  /*  4365 */ 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996,\n  /*  4380 */ 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514,\n  /*  4395 */ 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024,\n  /*  4410 */ 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928,\n  /*  4425 */ 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278,\n  /*  4440 */ 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638,\n  /*  4455 */ 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838,\n  /*  4470 */ 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058,\n  /*  4485 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4500 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4515 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4530 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4545 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4560 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4575 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4590 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4605 */ 19058, 19058, 19058, 22750, 19288, 21529, 24035, 23112, 28056, 23511, 29483, 28756, 24035, 24035, 24035,\n  /*  4620 */ 24036, 23114, 23114, 23114, 23114, 20327, 23511, 23511, 23511, 23511, 31156, 19803, 24035, 24035, 24035,\n  /*  4635 */ 24035, 26576, 23114, 23114, 23114, 23114, 24254, 20371, 23511, 23511, 23511, 23511, 27443, 20395, 24035,\n  /*  4650 */ 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 29457, 29700, 23511, 23511, 23511, 23511,\n  /*  4665 */ 33444, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 28350, 20421, 23511, 23511, 23511,\n  /*  4680 */ 23511, 25645, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 20447, 20475, 23511, 23511, 23511, 23634,\n  /*  4695 */ 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078,\n  /*  4710 */ 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008,\n  /*  4725 */ 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058,\n  /*  4740 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4755 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4770 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4785 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4800 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4815 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4830 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4845 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  4860 */ 19058, 19058, 19058, 19058, 20523, 22257, 20569, 20783, 21715, 17603, 20699, 20837, 20614, 20630, 21149,\n  /*  4875 */ 20670, 21405, 17486, 17509, 17525, 18373, 19179, 20695, 20716, 20732, 20755, 19194, 18042, 21641, 20592,\n  /*  4890 */ 20779, 20598, 21412, 17470, 17591, 20896, 17468, 17619, 20799, 20700, 21031, 20744, 20699, 20828, 18075,\n  /*  4905 */ 21259, 20581, 20853, 18048, 20868, 20884, 17756, 17784, 17800, 17825, 17854, 21171, 21200, 20931, 20947,\n  /*  4920 */ 21378, 20955, 20971, 18086, 20645, 21002, 20986, 18178, 17960, 18012, 18381, 18064, 29176, 21044, 21438,\n  /*  4935 */ 21018, 21122, 21393, 21060, 21844, 21094, 20654, 17493, 18150, 18166, 18214, 25967, 20763, 21799, 21110,\n  /*  4950 */ 21830, 21138, 21246, 21301, 18336, 18361, 21165, 21187, 20812, 21216, 21232, 21287, 21317, 18553, 21347,\n  /*  4965 */ 21363, 21428, 21454, 21271, 21483, 21499, 21515, 21575, 21467, 18712, 21591, 21633, 21078, 18189, 18198,\n  /*  4980 */ 20679, 21657, 21701, 21074, 21687, 21740, 21756, 21786, 21815, 21860, 21876, 21892, 21946, 21962, 19058,\n  /*  4995 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5010 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5025 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5040 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5055 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5070 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5085 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5100 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5115 */ 19058, 19058, 19058, 19058, 19058, 36457, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987,\n  /*  5130 */ 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 36813, 17990, 18622,\n  /*  5145 */ 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647,\n  /*  5160 */ 21981, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521,\n  /*  5175 */ 17712, 37008, 22151, 22007, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 27898, 17884,\n  /*  5190 */ 18890, 17906, 17928, 22042, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 22070, 22112, 25026, 18134,\n  /*  5205 */ 36935, 18262, 18278, 18294, 18320, 18336, 18361, 22142, 18274, 22096, 18304, 18448, 18485, 18523, 18553,\n  /*  5220 */ 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906,\n  /*  5235 */ 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056,\n  /*  5250 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5265 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5280 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5295 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5310 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5325 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5340 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5355 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5370 */ 19058, 19058, 19058, 19058, 19058, 19058, 36109, 19288, 18469, 36866, 17466, 36890, 36866, 21991, 22971,\n  /*  5385 */ 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990,\n  /*  5400 */ 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866,\n  /*  5415 */ 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928,\n  /*  5430 */ 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218,\n  /*  5445 */ 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026,\n  /*  5460 */ 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523,\n  /*  5475 */ 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026,\n  /*  5490 */ 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041,\n  /*  5505 */ 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5520 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5535 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5550 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5565 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5580 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5595 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5610 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5625 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22167, 19288, 19457, 36866, 17466, 17768, 36866, 21991,\n  /*  5640 */ 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462,\n  /*  5655 */ 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299,\n  /*  5670 */ 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403,\n  /*  5685 */ 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064,\n  /*  5700 */ 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010,\n  /*  5715 */ 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485,\n  /*  5730 */ 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681,\n  /*  5745 */ 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976,\n  /*  5760 */ 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5775 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5790 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5805 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5820 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5835 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5850 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5865 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  5880 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22227, 36487, 22273, 36866, 17466, 36890, 36866,\n  /*  5895 */ 19316, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285,\n  /*  5910 */ 18749, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404,\n  /*  5925 */ 20299, 36866, 17647, 22304, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854,\n  /*  5940 */ 18403, 18928, 19521, 17712, 37008, 19580, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381,\n  /*  5955 */ 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214,\n  /*  5970 */ 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448,\n  /*  5985 */ 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737,\n  /*  6000 */ 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257,\n  /*  6015 */ 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6030 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6045 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6060 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6075 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6090 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6105 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6120 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6135 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22330, 19089, 19457, 36866, 17466, 18721,\n  /*  6150 */ 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572,\n  /*  6165 */ 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867,\n  /*  6180 */ 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825,\n  /*  6195 */ 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012,\n  /*  6210 */ 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166,\n  /*  6225 */ 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304,\n  /*  6240 */ 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712,\n  /*  6255 */ 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241,\n  /*  6270 */ 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6285 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6300 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6315 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6330 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6345 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6360 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6375 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6390 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22765, 19347, 19457, 36866, 17466,\n  /*  6405 */ 36890, 36866, 18114, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553,\n  /*  6420 */ 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083,\n  /*  6435 */ 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800,\n  /*  6450 */ 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960,\n  /*  6465 */ 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150,\n  /*  6480 */ 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096,\n  /*  6495 */ 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164,\n  /*  6510 */ 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906,\n  /*  6525 */ 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6540 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6555 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6570 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6585 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6600 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6615 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6630 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6645 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035,\n  /*  6660 */ 23112, 32618, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511,\n  /*  6675 */ 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811,\n  /*  6690 */ 22468, 23511, 23511, 23511, 23511, 27443, 22493, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114,\n  /*  6705 */ 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34541, 20402, 24035, 24035, 24035, 24036, 23114,\n  /*  6720 */ 23114, 23114, 23114, 23029, 22839, 23511, 23511, 23511, 23511, 25645, 24035, 24035, 24035, 26576, 23114,\n  /*  6735 */ 23114, 23114, 32683, 22516, 23511, 23511, 23511, 22540, 24035, 24035, 23110, 23114, 23114, 20499, 23511,\n  /*  6750 */ 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266,\n  /*  6765 */ 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685,\n  /*  6780 */ 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6795 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6810 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6825 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6840 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6855 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6870 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6885 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  6900 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605,\n  /*  6915 */ 24035, 23112, 32618, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420,\n  /*  6930 */ 23511, 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114,\n  /*  6945 */ 33811, 22468, 23511, 23511, 23511, 23511, 27443, 22493, 24035, 24035, 24035, 24035, 24035, 23113, 23114,\n  /*  6960 */ 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34564, 20402, 24035, 24035, 24035, 24036,\n  /*  6975 */ 23114, 23114, 23114, 23114, 23029, 22839, 23511, 23511, 23511, 23511, 25645, 24035, 24035, 24035, 26576,\n  /*  6990 */ 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499,\n  /*  7005 */ 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741,\n  /*  7020 */ 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578,\n  /*  7035 */ 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7050 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7065 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7080 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7095 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7110 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7125 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7140 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7155 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288,\n  /*  7170 */ 21605, 24035, 23112, 32618, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114,\n  /*  7185 */ 22420, 23511, 23511, 23511, 23511, 29908, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114,\n  /*  7200 */ 23114, 33811, 22468, 23511, 23511, 23511, 23511, 27443, 22493, 24035, 24035, 24035, 24035, 24035, 23113,\n  /*  7215 */ 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34564, 20402, 24035, 24035, 24035,\n  /*  7230 */ 24036, 23114, 23114, 23114, 23114, 23029, 22839, 23511, 23511, 23511, 23511, 25645, 24035, 24035, 24035,\n  /*  7245 */ 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114,\n  /*  7260 */ 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872,\n  /*  7275 */ 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132,\n  /*  7290 */ 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7305 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7320 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7335 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7350 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7365 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7380 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7395 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7410 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079,\n  /*  7425 */ 19288, 21605, 24035, 23112, 32618, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114,\n  /*  7440 */ 23114, 22420, 23511, 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114,\n  /*  7455 */ 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 27443, 22561, 24035, 24035, 24035, 24035, 24035,\n  /*  7470 */ 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34564, 20402, 24035, 24035,\n  /*  7485 */ 24035, 24036, 23114, 23114, 23114, 23114, 23029, 22839, 23511, 23511, 23511, 23511, 25645, 24035, 24035,\n  /*  7500 */ 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114,\n  /*  7515 */ 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112,\n  /*  7530 */ 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046,\n  /*  7545 */ 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7560 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7575 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7590 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7605 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7620 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7635 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7650 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7665 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7680 */ 36079, 19288, 21605, 24035, 23112, 23837, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114,\n  /*  7695 */ 23114, 23114, 22584, 23511, 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 24035, 26576, 23114,\n  /*  7710 */ 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 27443, 22493, 24035, 24035, 24035, 24035,\n  /*  7725 */ 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34564, 20402, 24035,\n  /*  7740 */ 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 22839, 23511, 23511, 23511, 23511, 25645, 24035,\n  /*  7755 */ 24035, 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110,\n  /*  7770 */ 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035,\n  /*  7785 */ 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007,\n  /*  7800 */ 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058,\n  /*  7815 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7830 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7845 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7860 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7875 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7890 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7905 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7920 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  7935 */ 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 31507, 29939, 24035, 24035, 24035, 24036, 23114,\n  /*  7950 */ 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 19803, 24035, 24035, 24035, 24035, 26576,\n  /*  7965 */ 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 24694, 24035, 24035, 24035,\n  /*  7980 */ 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34585, 20402,\n  /*  7995 */ 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562,\n  /*  8010 */ 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035,\n  /*  8025 */ 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830,\n  /*  8040 */ 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208,\n  /*  8055 */ 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058,\n  /*  8070 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8085 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8100 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8115 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8130 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8145 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8160 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8175 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8190 */ 19058, 19058, 36442, 19288, 21605, 24035, 23112, 28137, 23511, 31507, 29939, 24035, 24035, 24035, 24036,\n  /*  8205 */ 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 19803, 24035, 24035, 24035, 24035,\n  /*  8220 */ 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 24694, 24035, 24035,\n  /*  8235 */ 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34585,\n  /*  8250 */ 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511,\n  /*  8265 */ 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035,\n  /*  8280 */ 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689,\n  /*  8295 */ 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876,\n  /*  8310 */ 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058,\n  /*  8325 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8340 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8355 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8370 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8385 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8400 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8415 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8430 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8445 */ 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 31507, 29939, 24035, 24035, 24035,\n  /*  8460 */ 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 19803, 24035, 24035, 24035,\n  /*  8475 */ 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 24694, 24035,\n  /*  8490 */ 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511,\n  /*  8505 */ 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511,\n  /*  8520 */ 23511, 31568, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634,\n  /*  8535 */ 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078,\n  /*  8550 */ 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008,\n  /*  8565 */ 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058,\n  /*  8580 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8595 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8610 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8625 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8640 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8655 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8670 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8685 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8700 */ 19058, 19058, 19058, 19058, 22690, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 27584, 22987, 17556,\n  /*  8715 */ 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411,\n  /*  8730 */ 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862,\n  /*  8745 */ 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712,\n  /*  8760 */ 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890,\n  /*  8775 */ 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935,\n  /*  8790 */ 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 22659, 18448, 18485, 18523, 18553, 18583,\n  /*  8805 */ 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915,\n  /*  8820 */ 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058,\n  /*  8835 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8850 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8865 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8880 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8895 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8910 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8925 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8940 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  8955 */ 19058, 19058, 19058, 19058, 19058, 22360, 19552, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987,\n  /*  8970 */ 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622,\n  /*  8985 */ 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647,\n  /*  9000 */ 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521,\n  /*  9015 */ 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884,\n  /*  9030 */ 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134,\n  /*  9045 */ 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553,\n  /*  9060 */ 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906,\n  /*  9075 */ 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056,\n  /*  9090 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9105 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9120 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9135 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9150 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9165 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9180 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9195 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9210 */ 19058, 19058, 19058, 19058, 19058, 19058, 22675, 22811, 19457, 36866, 17466, 36890, 36866, 19133, 22971,\n  /*  9225 */ 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 22827, 17990,\n  /*  9240 */ 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866,\n  /*  9255 */ 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928,\n  /*  9270 */ 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218,\n  /*  9285 */ 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026,\n  /*  9300 */ 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523,\n  /*  9315 */ 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026,\n  /*  9330 */ 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041,\n  /*  9345 */ 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9360 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9375 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9390 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9405 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9420 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9435 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9450 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9465 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36139, 19288, 19457, 36866, 17466, 36890, 36866, 21991,\n  /*  9480 */ 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462,\n  /*  9495 */ 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299,\n  /*  9510 */ 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403,\n  /*  9525 */ 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064,\n  /*  9540 */ 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010,\n  /*  9555 */ 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485,\n  /*  9570 */ 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681,\n  /*  9585 */ 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976,\n  /*  9600 */ 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9615 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9630 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9645 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9660 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9675 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9690 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9705 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9720 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36064, 19288, 22865, 22881, 32031, 22897, 22913,\n  /*  9735 */ 22956, 29939, 24035, 24035, 24035, 23003, 23114, 23114, 23114, 23024, 22420, 23511, 23511, 23511, 23052,\n  /*  9750 */ 29116, 23073, 29268, 24035, 25563, 26915, 23106, 23131, 23114, 23114, 23159, 23181, 23197, 23248, 23511,\n  /*  9765 */ 23511, 23282, 23305, 22493, 32364, 24035, 33472, 30138, 26325, 31770, 33508, 27345, 33667, 23114, 23321,\n  /*  9780 */ 23473, 23351, 35793, 36576, 23511, 23375, 22500, 24145, 24035, 29197, 20192, 24533, 23440, 23114, 19017,\n  /*  9795 */ 23459, 22839, 23489, 23510, 23511, 33563, 23528, 32076, 25389, 24035, 26576, 23561, 23583, 23114, 32683,\n  /*  9810 */ 22516, 23622, 23655, 23511, 23634, 35456, 37144, 23110, 23683, 34153, 20499, 32513, 25824, 23705, 24035,\n  /*  9825 */ 24035, 23111, 23114, 19874, 27078, 33263, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243,\n  /*  9840 */ 20507, 32241, 20150, 31862, 27464, 35108, 23727, 23007, 35895, 34953, 26578, 27685, 20141, 24569, 31691,\n  /*  9855 */ 19787, 33967, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9870 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9885 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9900 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9915 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9930 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9945 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9960 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /*  9975 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36427, 19552, 21605, 24035, 23112, 32618,\n  /*  9990 */ 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511,\n  /* 10005 */ 23511, 29116, 19803, 24035, 24035, 24035, 27027, 26576, 23114, 23114, 23114, 31471, 23756, 22468, 23511,\n  /* 10020 */ 23511, 23511, 34687, 23772, 22493, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114,\n  /* 10035 */ 28618, 29700, 23511, 23511, 23511, 23511, 34564, 23788, 24035, 24035, 24035, 21559, 23828, 23114, 23114,\n  /* 10050 */ 23114, 25086, 22839, 23853, 23511, 23511, 23511, 23876, 24035, 24035, 24035, 26576, 23114, 23114, 23114,\n  /* 10065 */ 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628,\n  /* 10080 */ 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114,\n  /* 10095 */ 30243, 19829, 26577, 26597, 20211, 31761, 23909, 23953, 23007, 20046, 20132, 26578, 27685, 20141, 24569,\n  /* 10110 */ 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10125 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10140 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10155 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10170 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10185 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10200 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10215 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10230 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36049, 19288, 21605, 30825, 23112,\n  /* 10245 */ 23987, 23511, 24003, 31001, 27617, 24034, 24035, 24036, 24052, 24089, 23114, 23114, 22420, 24109, 24168,\n  /* 10260 */ 23511, 23511, 29116, 24188, 27609, 20017, 29516, 24035, 26576, 24222, 19968, 23114, 24252, 33811, 22468,\n  /* 10275 */ 24270, 33587, 23511, 24320, 27443, 22493, 24035, 24035, 24035, 24035, 24339, 23113, 23114, 23114, 23114,\n  /* 10290 */ 28128, 28618, 29700, 23511, 23511, 23511, 28276, 34564, 20402, 24035, 24035, 32929, 24036, 23114, 23114,\n  /* 10305 */ 23114, 24357, 23029, 22839, 23511, 23511, 23511, 24377, 25645, 24035, 34112, 24035, 26576, 23114, 26643,\n  /* 10320 */ 23114, 32683, 22516, 23511, 25638, 23511, 23711, 24035, 24395, 27809, 23114, 24414, 20499, 24432, 30917,\n  /* 10335 */ 23628, 24035, 30680, 23111, 23114, 30233, 27078, 25748, 24452, 24035, 23112, 19872, 27741, 23266, 24036,\n  /* 10350 */ 23114, 24475, 19829, 26577, 26597, 26154, 24519, 24556, 24596, 23007, 20046, 20132, 26578, 24634, 20141,\n  /* 10365 */ 24569, 31691, 24679, 24727, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10380 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10395 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10410 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10425 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10440 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10455 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10470 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10485 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36412, 19288, 21605, 19943,\n  /* 10500 */ 34861, 32618, 26027, 29483, 32016, 32050, 36233, 24776, 35574, 24801, 24819, 32671, 31289, 22420, 24868,\n  /* 10515 */ 24886, 20087, 26849, 29116, 19803, 24035, 24035, 24035, 36228, 26576, 23114, 23114, 23114, 24981, 33811,\n  /* 10530 */ 22468, 23511, 23511, 23511, 29028, 27443, 22493, 24923, 27965, 24035, 24035, 32797, 24946, 23443, 23114,\n  /* 10545 */ 23114, 29636, 24997, 22849, 28252, 23511, 23511, 23511, 25042, 25110, 24035, 24035, 34085, 24036, 25133,\n  /* 10560 */ 23114, 23114, 25152, 23029, 22839, 25169, 23511, 36764, 23511, 25645, 30403, 24035, 25186, 26576, 31806,\n  /* 10575 */ 24093, 25212, 32683, 22516, 32713, 26245, 34293, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511,\n  /* 10590 */ 23261, 23628, 24035, 32406, 23111, 23114, 28676, 30944, 27689, 25234, 24035, 23112, 19872, 37063, 23266,\n  /* 10605 */ 24036, 23114, 30243, 20379, 26100, 29218, 20211, 30105, 25257, 25284, 23007, 20046, 20132, 26578, 27685,\n  /* 10620 */ 20141, 24569, 24834, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10635 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10650 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10665 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10680 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10695 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10710 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10725 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10740 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36034, 19288, 21671,\n  /* 10755 */ 25314, 25072, 25330, 25346, 25362, 29939, 29951, 35288, 29984, 23812, 27216, 25405, 25424, 30456, 22584,\n  /* 10770 */ 26292, 25461, 25480, 31592, 29116, 25516, 34963, 25545, 27007, 25579, 33937, 25614, 25661, 25686, 34872,\n  /* 10785 */ 25702, 25718, 25734, 25769, 25795, 25811, 25840, 22493, 26533, 25856, 24035, 25876, 30763, 27481, 25909,\n  /* 10800 */ 23114, 28987, 25936, 25954, 29700, 25983, 23511, 31412, 26043, 26063, 22568, 29241, 29592, 26116, 31216,\n  /* 10815 */ 35383, 26170, 34783, 26194, 26221, 22839, 26241, 26261, 22477, 26283, 26308, 27306, 31035, 24655, 26576,\n  /* 10830 */ 29854, 33386, 26341, 32683, 22516, 32153, 30926, 26361, 19996, 26381, 35463, 26397, 26424, 34646, 26478,\n  /* 10845 */ 35605, 31386, 26494, 35567, 31964, 22940, 23689, 25218, 30309, 32289, 19830, 33605, 23112, 32109, 27733,\n  /* 10860 */ 27084, 24496, 35886, 35221, 26525, 36602, 26549, 26558, 26574, 26594, 26613, 26629, 26666, 26700, 26578,\n  /* 10875 */ 27685, 23740, 24285, 31691, 26733, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10890 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10905 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10920 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10935 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10950 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10965 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10980 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 10995 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36397, 19552,\n  /* 11010 */ 18991, 25887, 28117, 32618, 26776, 29483, 29939, 26802, 24035, 24035, 24036, 28664, 23114, 23114, 23114,\n  /* 11025 */ 22420, 30297, 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 25559, 26576, 23114, 23114, 23114,\n  /* 11040 */ 30525, 33811, 22468, 23511, 23511, 23511, 28725, 27443, 22493, 24035, 24035, 27249, 24035, 24035, 23113,\n  /* 11055 */ 23114, 23114, 26827, 23114, 28618, 29700, 23511, 23511, 26845, 23511, 34564, 20402, 24035, 24035, 26979,\n  /* 11070 */ 24036, 23114, 23114, 23114, 24974, 23029, 22839, 23511, 23511, 23511, 26865, 25645, 24035, 24035, 24035,\n  /* 11085 */ 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114,\n  /* 11100 */ 20499, 23511, 23261, 23628, 33305, 24035, 25598, 23114, 19874, 34253, 27689, 19830, 24035, 23112, 19872,\n  /* 11115 */ 27741, 23266, 24036, 23114, 26886, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132,\n  /* 11130 */ 26578, 27685, 26931, 24569, 26439, 26947, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11145 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11160 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11175 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11190 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11205 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11220 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11235 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11250 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36019,\n  /* 11265 */ 19288, 26995, 24035, 23112, 32618, 23511, 31507, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114,\n  /* 11280 */ 23114, 22420, 23511, 23511, 23511, 23511, 28306, 27043, 24035, 24035, 24035, 24035, 26576, 23114, 23114,\n  /* 11295 */ 23114, 23114, 33811, 27061, 23511, 23511, 23511, 23511, 23512, 24694, 24035, 24035, 29978, 24035, 24035,\n  /* 11310 */ 23113, 23114, 33114, 23114, 23114, 30010, 29700, 23511, 35913, 23511, 23511, 34585, 20402, 24035, 24035,\n  /* 11325 */ 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035,\n  /* 11340 */ 27155, 26576, 23114, 23114, 30447, 23036, 29695, 23511, 23511, 30935, 20099, 24152, 25529, 27100, 34461,\n  /* 11355 */ 27121, 22625, 29156, 26009, 27137, 30422, 31903, 31655, 28870, 27171, 32439, 31731, 19830, 27232, 22612,\n  /* 11370 */ 27265, 26786, 25494, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046,\n  /* 11385 */ 20132, 26578, 27685, 20141, 20342, 27288, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11400 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11415 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11430 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11445 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11460 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11475 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11490 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11505 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11520 */ 36079, 19288, 21605, 27322, 27339, 28020, 27361, 27382, 29939, 24035, 24035, 32581, 24036, 23114, 23114,\n  /* 11535 */ 23114, 27425, 22420, 23511, 23511, 23511, 27442, 28306, 19803, 24035, 24035, 24035, 24035, 26710, 23114,\n  /* 11550 */ 23114, 23114, 23114, 32261, 22468, 23511, 23511, 23511, 23511, 35719, 24694, 29510, 24035, 24035, 24035,\n  /* 11565 */ 24035, 26717, 23114, 23114, 23114, 23114, 28618, 32217, 23511, 23511, 23511, 23511, 34585, 20402, 24035,\n  /* 11580 */ 24035, 24035, 27459, 23114, 23114, 23114, 36252, 23029, 20271, 23511, 23511, 23511, 28840, 30562, 24035,\n  /* 11595 */ 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110,\n  /* 11610 */ 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035,\n  /* 11625 */ 27480, 34483, 28401, 29761, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007,\n  /* 11640 */ 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058,\n  /* 11655 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11670 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11685 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11700 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11715 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11730 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11745 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11760 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11775 */ 19058, 36382, 19288, 21605, 27497, 27517, 28504, 28898, 27569, 29939, 29401, 27600, 27323, 27633, 19025,\n  /* 11790 */ 27662, 23114, 27705, 22420, 20483, 27721, 23511, 27765, 28306, 19803, 23540, 24035, 24610, 27781, 27805,\n  /* 11805 */ 26650, 23114, 28573, 32990, 25920, 22468, 26870, 23511, 26684, 34262, 34737, 25057, 34622, 24035, 24035,\n  /* 11820 */ 23971, 24206, 27825, 27847, 23114, 23114, 27865, 27885, 35766, 27914, 23511, 23511, 32766, 32844, 27934,\n  /* 11835 */ 28795, 26909, 27955, 26092, 27988, 25445, 28005, 28036, 28052, 21965, 23511, 32196, 19897, 28072, 28102,\n  /* 11850 */ 36534, 21541, 23801, 28153, 28180, 28197, 28221, 23036, 32695, 28251, 28268, 28292, 23667, 34825, 23930,\n  /* 11865 */ 24580, 28322, 28344, 31627, 28366, 25996, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 35625,\n  /* 11880 */ 33477, 33359, 27674, 28393, 33992, 24036, 23114, 30243, 19829, 28417, 28433, 28463, 23008, 19876, 20208,\n  /* 11895 */ 23007, 20046, 20132, 28489, 28520, 20141, 24569, 31691, 19787, 28550, 20268, 19058, 19058, 19058, 19058,\n  /* 11910 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11925 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11940 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11955 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11970 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 11985 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12000 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12015 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12030 */ 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 31507, 29939, 24035, 24035, 24035, 24036,\n  /* 12045 */ 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 19803, 24035, 24035, 24035, 24035,\n  /* 12060 */ 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 24694, 28589, 24035,\n  /* 12075 */ 24035, 24035, 24035, 28608, 23114, 23114, 23114, 23114, 28618, 20431, 23511, 23511, 23511, 23511, 34585,\n  /* 12090 */ 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511,\n  /* 12105 */ 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035,\n  /* 12120 */ 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689,\n  /* 12135 */ 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876,\n  /* 12150 */ 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058,\n  /* 12165 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12180 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12195 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12210 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12225 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12240 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12255 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12270 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12285 */ 19058, 19058, 19058, 36004, 19288, 28634, 31951, 28565, 28702, 28718, 28741, 32544, 20175, 28792, 32086,\n  /* 12300 */ 20105, 28811, 29059, 29862, 28856, 22420, 28886, 30354, 23359, 28922, 28306, 28952, 23888, 26320, 36506,\n  /* 12315 */ 24035, 29331, 28968, 36609, 23114, 29003, 31661, 27061, 30649, 27366, 23511, 29023, 27918, 24694, 24035,\n  /* 12330 */ 24035, 23893, 33094, 30867, 23113, 23114, 23114, 29044, 34184, 30010, 29700, 23511, 23511, 29081, 29102,\n  /* 12345 */ 34585, 20402, 27789, 24035, 24035, 24036, 23114, 29132, 23114, 23114, 23029, 20271, 23511, 29153, 23511,\n  /* 12360 */ 23511, 30562, 30174, 24035, 24035, 27409, 25438, 23114, 23114, 29172, 36668, 31332, 23511, 23511, 29192,\n  /* 12375 */ 30144, 24035, 23110, 30203, 23114, 23467, 31544, 23261, 23628, 24035, 22545, 23111, 23114, 29213, 27078,\n  /* 12390 */ 27689, 29234, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 29257, 23008,\n  /* 12405 */ 19876, 20208, 28768, 29290, 29320, 34776, 29353, 20141, 22435, 29378, 19787, 29304, 20268, 19058, 19058,\n  /* 12420 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12435 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12450 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12465 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12480 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12495 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12510 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12525 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12540 */ 19058, 19058, 19058, 19058, 36367, 19288, 21605, 34616, 19006, 32618, 31497, 31507, 36216, 20184, 24035,\n  /* 12555 */ 34393, 29424, 34668, 23114, 34900, 29447, 22420, 30360, 23511, 37089, 29473, 28306, 19803, 29499, 24398,\n  /* 12570 */ 24035, 24035, 26576, 31799, 29532, 29550, 23114, 33811, 22468, 32298, 29571, 31184, 23511, 23512, 37127,\n  /* 12585 */ 36628, 29589, 24035, 24135, 24035, 23113, 29608, 23114, 27831, 29634, 28618, 29652, 30037, 23511, 24172,\n  /* 12600 */ 29671, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 29555, 29690, 23511, 23511,\n  /* 12615 */ 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511,\n  /* 12630 */ 23634, 29719, 24035, 23110, 29738, 23114, 23467, 34035, 29756, 23628, 24035, 24035, 23111, 23114, 19874,\n  /* 12645 */ 27078, 27689, 19830, 24035, 23112, 19872, 27741, 29777, 34364, 28181, 30243, 29799, 31920, 27272, 27185,\n  /* 12660 */ 23008, 31126, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29828, 20268, 19058,\n  /* 12675 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12690 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12705 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12720 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12735 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12750 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12765 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12780 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12795 */ 19058, 19058, 19058, 19058, 19058, 35989, 19552, 19687, 35139, 28649, 29878, 29894, 29924, 29939, 23224,\n  /* 12810 */ 23085, 31969, 24036, 35173, 24752, 24803, 23114, 22420, 31190, 30318, 24870, 23511, 28306, 29967, 23967,\n  /* 12825 */ 24035, 24035, 24035, 26576, 30000, 23114, 23114, 23114, 33811, 22468, 30026, 23511, 23511, 23511, 23512,\n  /* 12840 */ 26078, 24035, 24035, 24035, 30053, 37137, 30071, 23114, 23114, 33368, 25136, 28618, 30723, 23511, 23511,\n  /* 12855 */ 37096, 31356, 34585, 20402, 30092, 30127, 30160, 24036, 35740, 30219, 24960, 30259, 23029, 20271, 34042,\n  /* 12870 */ 30285, 30342, 30376, 23289, 30055, 30400, 30419, 30438, 32640, 33532, 33514, 30472, 18792, 26267, 24323,\n  /* 12885 */ 23057, 30493, 23639, 20008, 30196, 33188, 30517, 20075, 23511, 30541, 23628, 30578, 33928, 28776, 30594,\n  /* 12900 */ 19874, 30610, 30637, 19830, 30677, 27646, 19872, 25779, 23266, 23232, 35016, 30243, 30696, 29812, 30712,\n  /* 12915 */ 30746, 27206, 30779, 30807, 23007, 33395, 20132, 26578, 27685, 31703, 22928, 31691, 19787, 31079, 20268,\n  /* 12930 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12945 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12960 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12975 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 12990 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13005 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13020 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13035 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13050 */ 19058, 19058, 19058, 19058, 19058, 19058, 36352, 19288, 23335, 30841, 26131, 30888, 30904, 30986, 29939,\n  /* 13065 */ 24035, 24704, 31017, 20025, 23114, 26178, 31051, 31095, 22420, 23511, 22524, 31142, 31172, 28534, 31206,\n  /* 13080 */ 35497, 25196, 24035, 28592, 24503, 23114, 31239, 31285, 23114, 31305, 31321, 31355, 31372, 31407, 23511,\n  /* 13095 */ 30556, 24694, 24035, 27501, 19805, 24035, 24035, 23113, 23114, 31428, 24066, 23114, 28618, 29700, 23511,\n  /* 13110 */ 31837, 18809, 23511, 34585, 31448, 24035, 24035, 24035, 23090, 23114, 23114, 23114, 23114, 31619, 35038,\n  /* 13125 */ 23511, 23511, 23511, 23511, 33714, 24035, 33085, 24035, 29431, 23114, 31467, 23114, 23143, 31487, 23511,\n  /* 13140 */ 31523, 23511, 35195, 36783, 24035, 30111, 23567, 23114, 23467, 31543, 31560, 23628, 24035, 24035, 23111,\n  /* 13155 */ 23114, 19874, 30953, 31584, 34508, 24035, 31608, 26345, 37055, 23266, 31643, 31677, 31719, 31747, 31786,\n  /* 13170 */ 31822, 26898, 23008, 19876, 31859, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 31878, 31936,\n  /* 13185 */ 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13200 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13215 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13230 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13245 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13260 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13275 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13290 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13305 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 35974, 19288, 21605, 27972, 35663, 31985, 29655, 32001,\n  /* 13320 */ 36715, 24785, 25893, 23545, 31912, 19853, 19916, 25938, 24540, 22420, 31843, 29674, 29573, 32735, 28936,\n  /* 13335 */ 19803, 24035, 24035, 32047, 24035, 26576, 23114, 23114, 27544, 23114, 33811, 22468, 23511, 23511, 32161,\n  /* 13350 */ 23511, 23512, 32066, 24035, 33313, 24035, 24035, 24035, 23113, 27426, 32102, 23114, 23114, 28618, 32125,\n  /* 13365 */ 23511, 32144, 23511, 23511, 33569, 20402, 24035, 27045, 24035, 24036, 23114, 23114, 28328, 23114, 30076,\n  /* 13380 */ 32177, 23511, 23511, 30384, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23595, 32212,\n  /* 13395 */ 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035,\n  /* 13410 */ 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 22635, 25753, 32233, 32257, 32277, 19829,\n  /* 13425 */ 26577, 26597, 20211, 23008, 19876, 32322, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787,\n  /* 13440 */ 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13455 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13470 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13485 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13500 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13515 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13530 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13545 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13560 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 32352, 35285, 32380, 34196, 33016,\n  /* 13575 */ 30661, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511,\n  /* 13590 */ 28306, 32404, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 32422, 23511, 23511,\n  /* 13605 */ 23511, 23511, 23512, 24694, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 30269,\n  /* 13620 */ 29700, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114,\n  /* 13635 */ 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036,\n  /* 13650 */ 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 19949,\n  /* 13665 */ 24035, 23111, 32455, 19874, 31269, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243,\n  /* 13680 */ 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691,\n  /* 13695 */ 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13710 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13725 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13740 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13755 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13770 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13785 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13800 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13815 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36337, 19552, 19209, 21617, 26509, 32475,\n  /* 13830 */ 32491, 32529, 29939, 24035, 32578, 25241, 32597, 23114, 32634, 29007, 32656, 22420, 23511, 32729, 26365,\n  /* 13845 */ 32751, 28306, 32788, 32882, 24035, 24035, 32813, 36727, 23114, 33182, 23114, 27553, 33235, 32829, 23511,\n  /* 13860 */ 32706, 23511, 28906, 28377, 26962, 32881, 32904, 32898, 32920, 24035, 32953, 23114, 32977, 26408, 23114,\n  /* 13875 */ 28164, 33006, 23511, 33039, 35774, 23511, 32306, 20402, 33076, 30872, 24035, 24036, 25408, 33110, 28979,\n  /* 13890 */ 23114, 23029, 20271, 35835, 33130, 33054, 23511, 30562, 33148, 24035, 24035, 33167, 23114, 23114, 33775,\n  /* 13905 */ 23036, 20459, 23511, 23511, 25464, 24646, 24035, 24035, 22446, 23114, 23114, 25627, 23511, 23261, 23628,\n  /* 13920 */ 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 31391, 33204, 33220,\n  /* 13935 */ 33251, 33287, 26577, 26597, 20211, 33329, 19876, 33345, 23007, 20046, 20132, 26578, 27685, 28473, 22599,\n  /* 13950 */ 31691, 33411, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13965 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13980 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 13995 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14010 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14025 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14040 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14055 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14070 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 35959, 19288, 21907, 27243, 29843,\n  /* 14085 */ 32618, 33427, 31507, 29939, 33460, 34090, 24035, 24036, 33493, 24416, 33530, 23114, 22420, 33548, 24379,\n  /* 14100 */ 33585, 23511, 28306, 19803, 33603, 24202, 24035, 24035, 25593, 33749, 28205, 23114, 23114, 32388, 22468,\n  /* 14115 */ 33853, 33060, 23511, 23511, 31339, 33621, 24035, 24035, 34397, 24618, 30757, 33663, 23114, 23114, 33683,\n  /* 14130 */ 35684, 28618, 26678, 23511, 23511, 32506, 33699, 34585, 20402, 24035, 32562, 26973, 24036, 23114, 23114,\n  /* 14145 */ 33377, 33773, 23029, 20271, 23511, 23511, 30621, 23511, 23860, 24035, 33791, 21553, 26576, 36558, 23114,\n  /* 14160 */ 33809, 23036, 32857, 26047, 23511, 33827, 23634, 24035, 24035, 23110, 23114, 23114, 31252, 23511, 33845,\n  /* 14175 */ 23628, 24035, 24459, 23111, 23114, 33869, 27078, 30791, 29783, 24035, 24742, 19872, 33895, 23266, 26462,\n  /* 14190 */ 19710, 33879, 33919, 26577, 26597, 24123, 24930, 21930, 20208, 30501, 33953, 25268, 20252, 33983, 20141,\n  /* 14205 */ 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14220 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14235 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14250 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14265 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14280 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14295 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14310 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14325 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36322, 19552, 23390, 33634,\n  /* 14340 */ 35154, 34008, 34024, 34058, 35544, 34106, 34128, 26811, 33151, 34144, 34169, 34212, 23114, 34228, 34244,\n  /* 14355 */ 34278, 34315, 23511, 34331, 34347, 34380, 34413, 24035, 24663, 26576, 34429, 34453, 34477, 29534, 33811,\n  /* 14370 */ 22468, 34499, 34524, 34557, 25170, 34580, 35436, 23937, 34601, 24035, 24341, 26453, 23113, 34638, 34662,\n  /* 14385 */ 23114, 24236, 28618, 34684, 34703, 34729, 23511, 35352, 34753, 34799, 24035, 34815, 32558, 34848, 34888,\n  /* 14400 */ 35814, 34923, 23165, 29137, 23606, 30326, 30730, 34939, 33023, 30562, 36848, 34979, 24035, 24847, 34996,\n  /* 14415 */ 23114, 23114, 35032, 29695, 35054, 23511, 23511, 35091, 33296, 35124, 24296, 28235, 24361, 36276, 32772,\n  /* 14430 */ 35067, 35189, 27301, 30855, 24852, 22452, 35211, 35237, 35316, 25500, 35270, 23405, 24304, 35304, 29362,\n  /* 14445 */ 24036, 23114, 35332, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 35368, 28823, 23920, 32336, 35405,\n  /* 14460 */ 20141, 24569, 31691, 35421, 35479, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14475 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14490 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14505 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14520 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14535 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14550 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14565 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14580 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 35944, 22795, 21605,\n  /* 14595 */ 33647, 35877, 35513, 30962, 35529, 34073, 35557, 24035, 24035, 20405, 31107, 23114, 23114, 23114, 35590,\n  /* 14610 */ 34713, 23511, 23511, 23511, 35641, 19803, 29408, 32937, 25298, 24035, 35657, 23115, 27849, 24760, 35679,\n  /* 14625 */ 26205, 22468, 23511, 35700, 24907, 24901, 35075, 31893, 34980, 24035, 24035, 24035, 24035, 23113, 35009,\n  /* 14640 */ 23114, 23114, 23114, 28618, 35716, 30970, 23511, 23511, 23511, 34585, 23215, 24035, 24035, 24035, 24036,\n  /* 14655 */ 35735, 23114, 23114, 23114, 27105, 35756, 35790, 23511, 23511, 23511, 35254, 35446, 24035, 24035, 31223,\n  /* 14670 */ 35809, 23114, 23114, 23036, 36825, 35830, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467,\n  /* 14685 */ 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 31031, 20355, 19872, 33903,\n  /* 14700 */ 23266, 24036, 23114, 28686, 19829, 26577, 26597, 20211, 23008, 23424, 20208, 24711, 31065, 24486, 26578,\n  /* 14715 */ 27685, 20141, 19773, 35851, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14730 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14745 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14760 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14775 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14790 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14805 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14820 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14835 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36307, 19288,\n  /* 14850 */ 21605, 35494, 19702, 32618, 33437, 31507, 29939, 25117, 24035, 27939, 24036, 27869, 23114, 26829, 23114,\n  /* 14865 */ 22420, 23494, 23511, 33132, 23511, 28306, 19803, 24035, 34832, 24035, 24035, 26576, 23114, 25153, 23114,\n  /* 14880 */ 23114, 33811, 22468, 23511, 23511, 35911, 23511, 23512, 24694, 24035, 24035, 24035, 24035, 24035, 23113,\n  /* 14895 */ 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035,\n  /* 14910 */ 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035,\n  /* 14925 */ 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114,\n  /* 14940 */ 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872,\n  /* 14955 */ 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132,\n  /* 14970 */ 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 14985 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15000 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15015 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15030 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15045 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15060 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15075 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15090 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 35929,\n  /* 15105 */ 19288, 21605, 25860, 23112, 36185, 23511, 36201, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114,\n  /* 15120 */ 23114, 22420, 23511, 23511, 23511, 23511, 28306, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114,\n  /* 15135 */ 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 26748, 24035, 24035, 24035, 24035, 24035,\n  /* 15150 */ 36249, 23114, 23114, 23114, 23114, 28618, 28835, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 27151,\n  /* 15165 */ 24035, 26760, 23114, 27989, 23114, 23114, 36268, 20271, 23511, 24436, 23511, 29703, 30562, 24035, 24035,\n  /* 15180 */ 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114,\n  /* 15195 */ 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112,\n  /* 15210 */ 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046,\n  /* 15225 */ 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15240 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15255 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15270 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15285 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15300 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15315 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15330 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15345 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15360 */ 36292, 19288, 21605, 36503, 21922, 32618, 34534, 31507, 36522, 24035, 33793, 24035, 35864, 23114, 23114,\n  /* 15375 */ 36555, 23417, 22420, 23511, 23511, 36574, 26020, 28306, 19803, 24035, 24035, 24035, 24035, 26576, 23114,\n  /* 15390 */ 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 36592, 24035, 24035, 36625, 24035,\n  /* 15405 */ 24035, 23113, 23114, 32961, 23114, 23114, 29618, 29700, 23511, 29086, 23511, 23511, 34585, 20402, 36644,\n  /* 15420 */ 24035, 24035, 24036, 29740, 23114, 23114, 23114, 29065, 36663, 31527, 23511, 23511, 23511, 30562, 24035,\n  /* 15435 */ 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110,\n  /* 15450 */ 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035,\n  /* 15465 */ 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007,\n  /* 15480 */ 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058,\n  /* 15495 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15510 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15525 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15540 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15555 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15570 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15585 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15600 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15615 */ 19058, 36079, 19288, 21605, 31451, 23112, 36684, 23511, 36700, 29939, 24035, 24035, 24035, 30185, 23114,\n  /* 15630 */ 23114, 23114, 27526, 22420, 23511, 23511, 23511, 32865, 28306, 19803, 36743, 24035, 27017, 24035, 26576,\n  /* 15645 */ 27535, 23114, 31432, 23114, 33811, 22468, 33271, 23511, 32128, 23511, 23512, 24694, 24035, 27196, 24035,\n  /* 15660 */ 24035, 24035, 23113, 32459, 23114, 23114, 23114, 28618, 29700, 33829, 36762, 23511, 23511, 34585, 20402,\n  /* 15675 */ 24035, 36746, 24035, 29722, 23114, 23114, 34437, 23114, 34907, 20271, 23511, 23511, 18801, 23511, 23206,\n  /* 15690 */ 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 36837, 24035, 24035,\n  /* 15705 */ 33739, 23114, 23114, 25094, 23511, 23261, 23628, 24035, 36780, 23111, 24073, 19874, 27078, 35344, 19830,\n  /* 15720 */ 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208,\n  /* 15735 */ 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058,\n  /* 15750 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15765 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15780 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15795 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15810 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15825 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15840 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15855 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 15870 */ 19058, 19058, 22720, 19288, 36799, 36866, 17466, 36890, 36864, 21991, 22211, 22987, 17556, 17575, 22288,\n  /* 15885 */ 17486, 17509, 17525, 18373, 17631, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996,\n  /* 15900 */ 17689, 17470, 17591, 20896, 17468, 36883, 36906, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514,\n  /* 15915 */ 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024,\n  /* 15930 */ 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928,\n  /* 15945 */ 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278,\n  /* 15960 */ 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638,\n  /* 15975 */ 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838,\n  /* 15990 */ 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058,\n  /* 16005 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16020 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16035 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16050 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16065 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16080 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16095 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16110 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16125 */ 19058, 19058, 19058, 22705, 19288, 19457, 36866, 17466, 36890, 36866, 19375, 22971, 22987, 17556, 17575,\n  /* 16140 */ 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306,\n  /* 16155 */ 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921,\n  /* 16170 */ 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008,\n  /* 16185 */ 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906,\n  /* 16200 */ 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262,\n  /* 16215 */ 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149,\n  /* 16230 */ 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054,\n  /* 16245 */ 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058,\n  /* 16260 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16275 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16290 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16305 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16320 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16335 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16350 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16365 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16380 */ 19058, 19058, 19058, 19058, 36124, 19288, 36951, 36866, 17466, 36890, 36866, 21991, 22404, 22987, 17556,\n  /* 16395 */ 17575, 22288, 17486, 17509, 17525, 18373, 18567, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411,\n  /* 16410 */ 20306, 17996, 17689, 17470, 17591, 20896, 17468, 36979, 36995, 36867, 19404, 20299, 36866, 17647, 17862,\n  /* 16425 */ 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712,\n  /* 16440 */ 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890,\n  /* 16455 */ 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935,\n  /* 16470 */ 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583,\n  /* 16485 */ 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915,\n  /* 16500 */ 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058,\n  /* 16515 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16530 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16545 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16560 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16575 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16590 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16605 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16620 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16635 */ 19058, 19058, 19058, 19058, 19058, 36139, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987,\n  /* 16650 */ 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18027, 22984, 17553, 17572, 22285, 18462, 17990, 18622,\n  /* 16665 */ 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647,\n  /* 16680 */ 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521,\n  /* 16695 */ 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884,\n  /* 16710 */ 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134,\n  /* 16725 */ 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553,\n  /* 16740 */ 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906,\n  /* 16755 */ 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056,\n  /* 16770 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16785 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16800 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16815 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16830 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16845 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16860 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16875 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 16890 */ 19058, 19058, 19058, 19058, 19058, 19058, 36139, 19288, 21529, 24035, 23112, 23033, 23511, 31507, 25377,\n  /* 16905 */ 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 37040, 23511, 23511, 23511, 23511, 28086, 19803,\n  /* 16920 */ 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 24254, 37079, 23511, 23511, 23511, 23511,\n  /* 16935 */ 23512, 34766, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511,\n  /* 16950 */ 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271,\n  /* 16965 */ 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511,\n  /* 16980 */ 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111,\n  /* 16995 */ 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577,\n  /* 17010 */ 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304,\n  /* 17025 */ 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 17040 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 17055 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 17070 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 17085 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 17100 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 17115 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 17130 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 17145 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 37112, 37160, 18469, 36866, 17466, 36890, 36866, 17656,\n  /* 17160 */ 37174, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18537, 22984, 17553, 17572, 22285, 18780,\n  /* 17175 */ 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 36883, 36906, 36867, 19404, 20299,\n  /* 17190 */ 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403,\n  /* 17205 */ 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064,\n  /* 17220 */ 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010,\n  /* 17235 */ 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485,\n  /* 17250 */ 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681,\n  /* 17265 */ 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976,\n  /* 17280 */ 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 17295 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 17310 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 17325 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 17340 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 17355 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 17370 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 17385 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058,\n  /* 17400 */ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 53264, 18, 49172, 57366, 24, 8192, 28, 102432,\n  /* 17416 */ 127011, 110630, 114730, 106539, 127011, 127011, 127011, 53264, 18, 18, 0, 0, 57366, 0, 24, 24, 24, 0, 28,\n  /* 17435 */ 28, 28, 28, 102432, 0, 0, 127011, 0, 2220032, 110630, 0, 0, 0, 114730, 106539, 0, 2170880, 2170880,\n  /* 17453 */ 2170880, 2170880, 0, 0, 0, 2170880, 2170880, 2170880, 3002368, 2170880, 2170880, 2170880, 2170880,\n  /* 17466 */ 2170880, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936,\n  /* 17477 */ 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2576384, 2215936, 2215936, 2215936,\n  /* 17488 */ 2416640, 2424832, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936,\n  /* 17499 */ 2215936, 2215936, 2215936, 2543616, 2215936, 2215936, 2215936, 2215936, 2215936, 2629632, 2215936,\n  /* 17510 */ 2617344, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2691072, 2215936, 2707456, 2215936,\n  /* 17521 */ 2715648, 2215936, 2723840, 2764800, 2215936, 2215936, 2797568, 2215936, 2822144, 2215936, 2215936,\n  /* 17532 */ 2854912, 2215936, 2215936, 2215936, 2912256, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936,\n  /* 17543 */ 2215936, 0, 0, 0, 180224, 0, 0, 2174976, 0, 0, 2170880, 2617344, 2170880, 2170880, 2170880, 2170880,\n  /* 17559 */ 2170880, 2170880, 2691072, 2170880, 2707456, 2170880, 2715648, 2170880, 2723840, 2764800, 2170880,\n  /* 17570 */ 2170880, 2797568, 2170880, 2170880, 2797568, 2170880, 2822144, 2170880, 2170880, 2854912, 2170880,\n  /* 17581 */ 2170880, 2170880, 2912256, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936,\n  /* 17592 */ 2215936, 2215936, 2215936, 2609152, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2654208,\n  /* 17603 */ 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 184599, 280, 0, 2174976, 0, 0,\n  /* 17619 */ 2215936, 3117056, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936,\n  /* 17630 */ 2215936, 2215936, 2215936, 0, 544, 0, 546, 0, 0, 2179072, 0, 0, 0, 552, 0, 0, 2170880, 2170880, 2170880,\n  /* 17649 */ 3117056, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880,\n  /* 17660 */ 2170880, 2170880, 0, 0, 0, 2158592, 2158592, 2232320, 2232320, 0, 2240512, 2240512, 0, 0, 0, 644, 0, 0, 0,\n  /* 17679 */ 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3129344, 2170880, 2170880, 2170880,\n  /* 17692 */ 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2215936, 2400256, 2215936, 2215936,\n  /* 17703 */ 2215936, 2215936, 2711552, 2170880, 2170880, 2170880, 2170880, 2170880, 2760704, 2768896, 2789376,\n  /* 17714 */ 2813952, 2170880, 2170880, 2170880, 2875392, 2904064, 2170880, 2170880, 2170880, 2170880, 2170880,\n  /* 17725 */ 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936,\n  /* 17736 */ 2215936, 2215936, 2453504, 2457600, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0,\n  /* 17748 */ 167936, 0, 0, 0, 0, 2174976, 0, 0, 2215936, 2215936, 2514944, 2215936, 2215936, 2215936, 2215936, 2215936,\n  /* 17764 */ 2215936, 2215936, 2215936, 2592768, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 32768,\n  /* 17776 */ 0, 0, 0, 0, 0, 2174976, 32768, 0, 2633728, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2711552,\n  /* 17792 */ 2215936, 2215936, 2215936, 2215936, 2215936, 2760704, 2768896, 2789376, 2813952, 2215936, 2215936,\n  /* 17803 */ 2215936, 2875392, 2904064, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936,\n  /* 17814 */ 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2174976, 0, 65819, 2215936, 2215936, 3031040, 2215936, 3055616,\n  /* 17830 */ 2215936, 2215936, 2215936, 2215936, 3092480, 2215936, 2215936, 3125248, 2215936, 2215936, 2215936,\n  /* 17841 */ 2215936, 2215936, 2215936, 3002368, 2215936, 2215936, 2170880, 2170880, 2494464, 2170880, 2170880, 0, 0,\n  /* 17854 */ 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3198976, 2215936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 17872 */ 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 0, 0, 2379776, 2170880, 2170880, 2170880,\n  /* 17885 */ 2170880, 2170880, 2170880, 2170880, 2445312, 2170880, 2465792, 2473984, 2170880, 2170880, 2170880,\n  /* 17896 */ 2170880, 2170880, 2170880, 2523136, 2170880, 2170880, 2641920, 2170880, 2170880, 2170880, 2699264,\n  /* 17907 */ 2170880, 2727936, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2879488, 2170880,\n  /* 17918 */ 2916352, 2170880, 2170880, 2170880, 2879488, 2170880, 2916352, 2170880, 2170880, 2170880, 2170880,\n  /* 17929 */ 2170880, 2170880, 2170880, 2170880, 2170880, 3026944, 2170880, 2170880, 3063808, 2170880, 2170880,\n  /* 17940 */ 3112960, 2170880, 2170880, 3133440, 2170880, 2170880, 3112960, 2170880, 2170880, 3133440, 2170880,\n  /* 17951 */ 2170880, 2170880, 3162112, 2170880, 2170880, 3182592, 3186688, 2170880, 2379776, 2215936, 2523136,\n  /* 17962 */ 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2596864, 2215936, 2621440, 2215936,\n  /* 17973 */ 2215936, 2641920, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2179072, 548, 0, 0, 0, 0, 287, 2170880, 0, 2170880,\n  /* 17993 */ 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880,\n  /* 18004 */ 2170880, 2170880, 2170880, 3117056, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2699264,\n  /* 18015 */ 2215936, 2727936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2879488, 2215936,\n  /* 18026 */ 2916352, 2215936, 2215936, 0, 0, 0, 0, 188416, 0, 2179072, 0, 0, 0, 0, 0, 287, 2170880, 0, 2171019,\n  /* 18045 */ 2171019, 2171019, 2400395, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019,\n  /* 18056 */ 2171019, 2171019, 2171019, 3031179, 2171019, 3055755, 2171019, 2171019, 2215936, 3133440, 2215936,\n  /* 18067 */ 2215936, 2215936, 3162112, 2215936, 2215936, 3182592, 3186688, 2215936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 18085 */ 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2523275, 2171019, 2171019, 2171019, 2171019,\n  /* 18096 */ 2171019, 2171019, 2171019, 2597003, 2171019, 2621579, 2170880, 2170880, 2170880, 3162112, 2170880,\n  /* 18107 */ 2170880, 3182592, 3186688, 2170880, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0,\n  /* 18121 */ 53264, 0, 18, 18, 24, 24, 0, 4337664, 28, 2170880, 2170880, 2170880, 2629632, 2170880, 2170880, 2170880,\n  /* 18137 */ 2170880, 2719744, 2744320, 2170880, 2170880, 2170880, 2834432, 2838528, 2170880, 2908160, 2170880,\n  /* 18148 */ 2170880, 2936832, 2215936, 2215936, 2215936, 2215936, 2719744, 2744320, 2215936, 2215936, 2215936,\n  /* 18159 */ 2834432, 2838528, 2215936, 2908160, 2215936, 2215936, 2936832, 2215936, 2215936, 2985984, 2215936,\n  /* 18170 */ 2994176, 2215936, 2215936, 3014656, 2215936, 3059712, 3076096, 3088384, 2215936, 2215936, 2215936,\n  /* 18181 */ 2215936, 2215936, 2215936, 2215936, 2445312, 2215936, 2465792, 2473984, 2215936, 2215936, 2215936,\n  /* 18192 */ 2215936, 2215936, 2215936, 2171166, 2171166, 2171166, 2171166, 2171166, 0, 0, 0, 2171166, 2171166,\n  /* 18205 */ 2171166, 2171166, 2171166, 2171166, 2171019, 2171019, 2494603, 2171019, 2171019, 2215936, 2215936,\n  /* 18216 */ 2215936, 3215360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2379776, 2170880, 2170880, 2170880, 2170880,\n  /* 18236 */ 2985984, 2170880, 2994176, 2170880, 2170880, 3016168, 2170880, 3059712, 3076096, 3088384, 2170880,\n  /* 18247 */ 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 0, 18, 18, 124, 124, 0, 128, 128, 2170880, 2170880,\n  /* 18264 */ 2170880, 3215360, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2486272,\n  /* 18276 */ 2170880, 2170880, 2506752, 2170880, 2170880, 2170880, 2535424, 2539520, 2170880, 2170880, 2588672,\n  /* 18287 */ 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2920448,\n  /* 18298 */ 2170880, 2170880, 2170880, 2990080, 2170880, 2170880, 2170880, 2170880, 3051520, 2170880, 2170880,\n  /* 18309 */ 2170880, 2170880, 2170880, 2170880, 3170304, 0, 2387968, 2392064, 2170880, 2170880, 2433024, 2170880,\n  /* 18321 */ 2170880, 2170880, 3170304, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936,\n  /* 18332 */ 2486272, 2215936, 2215936, 2506752, 2215936, 2215936, 2215936, 2535424, 2539520, 2215936, 2215936,\n  /* 18343 */ 2588672, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 0, 0, 0,\n  /* 18358 */ 2174976, 136, 0, 2215936, 2215936, 2920448, 2215936, 2215936, 2215936, 2990080, 2215936, 2215936, 2215936,\n  /* 18371 */ 2215936, 3051520, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3108864, 2215936,\n  /* 18382 */ 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3026944, 2215936, 2215936, 3063808,\n  /* 18393 */ 2215936, 2215936, 3112960, 2215936, 2215936, 2215936, 3170304, 0, 0, 0, 0, 0, 0, 2170880, 2170880,\n  /* 18408 */ 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2453504, 2457600, 2170880, 2170880,\n  /* 18419 */ 2170880, 2486272, 2170880, 2170880, 2506752, 2170880, 2170880, 2170880, 2537049, 2539520, 2170880,\n  /* 18430 */ 2170880, 2588672, 2170880, 2170880, 2170880, 1508, 2170880, 2170880, 2170880, 1512, 2170880, 2920448,\n  /* 18442 */ 2170880, 2170880, 2170880, 2990080, 2170880, 2170880, 2170880, 2461696, 2170880, 2170880, 2170880,\n  /* 18453 */ 2510848, 2170880, 2170880, 2170880, 2170880, 2580480, 2170880, 2605056, 2637824, 2170880, 2170880, 18, 0,\n  /* 18466 */ 0, 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2686976, 2748416,\n  /* 18487 */ 2170880, 2170880, 2170880, 2924544, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880,\n  /* 18498 */ 3121152, 2170880, 2170880, 3145728, 3158016, 3166208, 2170880, 2420736, 2428928, 2170880, 2478080,\n  /* 18509 */ 2170880, 2170880, 2170880, 2170880, 0, 0, 2170880, 2170880, 2170880, 2170880, 2646016, 2670592, 0, 0,\n  /* 18523 */ 3145728, 3158016, 3166208, 2387968, 2392064, 2215936, 2215936, 2433024, 2215936, 2461696, 2215936,\n  /* 18534 */ 2215936, 2215936, 2510848, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2179072, 0, 0, 0, 0, 0, 0, 2170880,\n  /* 18553 */ 2215936, 2215936, 2580480, 2215936, 2605056, 2637824, 2215936, 2215936, 2686976, 2748416, 2215936,\n  /* 18564 */ 2215936, 2215936, 2924544, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2179072, 0, 0, 0, 0, 0, 286, 2170880,\n  /* 18583 */ 2215936, 2215936, 2215936, 2215936, 2215936, 3121152, 2215936, 2215936, 3145728, 3158016, 3166208,\n  /* 18594 */ 2387968, 2392064, 2170880, 2170880, 2433024, 2170880, 2461696, 2170880, 2170880, 2170880, 2510848,\n  /* 18605 */ 2170880, 2170880, 1625, 2170880, 2170880, 2580480, 2170880, 2605056, 2637824, 2170880, 647, 2170880,\n  /* 18617 */ 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880,\n  /* 18628 */ 2170880, 2170880, 2576384, 2170880, 2170880, 2170880, 2170880, 2170880, 2609152, 2170880, 2170880,\n  /* 18639 */ 2686976, 0, 0, 2748416, 2170880, 2170880, 0, 2170880, 2924544, 2170880, 2170880, 2170880, 2170880,\n  /* 18652 */ 2170880, 2170880, 0, 53264, 0, 18, 18, 24, 0, 0, 28, 28, 2170880, 3141632, 2215936, 2420736, 2428928,\n  /* 18669 */ 2215936, 2478080, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2646016,\n  /* 18680 */ 2670592, 2752512, 2756608, 2846720, 2961408, 2215936, 2998272, 2215936, 3010560, 2215936, 2215936,\n  /* 18691 */ 2215936, 3141632, 2170880, 2420736, 2428928, 2752512, 2756608, 0, 2846720, 2961408, 2170880, 2998272,\n  /* 18703 */ 2170880, 3010560, 2170880, 2170880, 2170880, 3141632, 2170880, 2170880, 2490368, 2215936, 2490368,\n  /* 18714 */ 2215936, 2215936, 2215936, 2547712, 2555904, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936,\n  /* 18725 */ 2215936, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2174976, 245760, 0, 3129344, 2170880, 2170880, 2490368,\n  /* 18741 */ 2170880, 2170880, 2170880, 0, 0, 2547712, 2555904, 2170880, 2170880, 2170880, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 18760 */ 2220032, 0, 0, 45056, 0, 2584576, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2170880,\n  /* 18774 */ 2170880, 2170880, 2170880, 0, 0, 0, 2170880, 2170880, 2158592, 0, 0, 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 0,\n  /* 18795 */ 0, 0, 0, 0, 0, 1482, 97, 97, 97, 97, 97, 97, 97, 1354, 97, 97, 97, 97, 97, 97, 97, 97, 1148, 97, 97, 97,\n  /* 18821 */ 97, 97, 97, 97, 2584576, 2170880, 2170880, 1512, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880,\n  /* 18836 */ 2441216, 2170880, 2527232, 2170880, 2600960, 2170880, 2850816, 2170880, 2170880, 2170880, 3022848,\n  /* 18847 */ 2215936, 2441216, 2215936, 2527232, 2215936, 2600960, 2215936, 2850816, 2215936, 2215936, 0, 0, 0, 0, 0,\n  /* 18862 */ 0, 2179072, 0, 0, 0, 0, 0, 287, 2170880, 2215936, 3022848, 2170880, 2441216, 2170880, 2527232, 0, 0,\n  /* 18879 */ 2170880, 2600960, 2170880, 0, 2850816, 2170880, 2170880, 2170880, 2170880, 2170880, 2523136, 2170880,\n  /* 18891 */ 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2596864, 2170880, 2621440, 2170880, 2170880,\n  /* 18902 */ 2641920, 2170880, 2170880, 2170880, 3022848, 2170880, 2519040, 2170880, 2170880, 2170880, 2170880,\n  /* 18913 */ 2170880, 2215936, 2519040, 2215936, 2215936, 2215936, 2215936, 2215936, 2170880, 2170880, 2170880,\n  /* 18924 */ 2453504, 2457600, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2514944, 2170880, 2170880,\n  /* 18935 */ 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2592768, 2170880, 2170880, 2519040, 0, 2024,\n  /* 18947 */ 2170880, 2170880, 0, 2170880, 2170880, 2170880, 2396160, 2170880, 2170880, 2170880, 2170880, 3018752,\n  /* 18959 */ 2396160, 2215936, 2215936, 2215936, 2215936, 3018752, 2396160, 0, 2024, 2170880, 2170880, 2170880,\n  /* 18971 */ 2170880, 3018752, 2170880, 2650112, 2965504, 2170880, 2215936, 2650112, 2965504, 2215936, 0, 0, 2170880,\n  /* 18984 */ 2650112, 2965504, 2170880, 2551808, 2170880, 2551808, 2215936, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730,\n  /* 19001 */ 106539, 41098, 45, 45, 141, 45, 45, 67, 67, 67, 67, 67, 224, 67, 67, 238, 67, 67, 67, 67, 67, 67, 67,\n  /* 19024 */ 1288, 67, 67, 67, 67, 67, 67, 67, 67, 67, 469, 67, 67, 67, 67, 67, 67, 0, 2551808, 2170880, 2170880,\n  /* 19045 */ 2215936, 0, 2170880, 2170880, 2215936, 0, 2170880, 2170880, 2215936, 0, 2170880, 2977792, 2977792, 0, 0,\n  /* 19060 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53264, 18, 49172, 57366, 24, 8192, 29, 102432, 127011, 110630,\n  /* 19084 */ 114730, 106539, 127011, 127011, 127011, 53264, 18, 18, 49172, 0, 0, 0, 24, 24, 24, 0, 28, 28, 28, 28,\n  /* 19104 */ 102432, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 2170880, 2170880, 2170880, 2416640, 0, 0, 0, 0, 2220032,\n  /* 19126 */ 110630, 0, 0, 0, 114730, 106539, 136, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 0,\n  /* 19142 */ 4256099, 4256099, 24, 24, 0, 28, 28, 2170880, 2461696, 2170880, 2170880, 2170880, 2510848, 2170880,\n  /* 19156 */ 2170880, 0, 2170880, 2170880, 2580480, 2170880, 2605056, 2637824, 2170880, 2170880, 2170880, 2547712,\n  /* 19168 */ 2555904, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3129344,\n  /* 19179 */ 2215936, 2215936, 543, 543, 545, 545, 0, 0, 2179072, 0, 550, 551, 551, 0, 287, 2171166, 2171166, 18, 0, 0,\n  /* 19199 */ 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 645, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45,\n  /* 19224 */ 149, 2584576, 2170880, 2170880, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2441216,\n  /* 19237 */ 2170880, 2527232, 2170880, 2600960, 2519040, 0, 0, 2170880, 2170880, 0, 2170880, 2170880, 2170880,\n  /* 19250 */ 2396160, 2170880, 2170880, 2170880, 2170880, 3018752, 2396160, 2215936, 2215936, 2215936, 2215936,\n  /* 19261 */ 3018752, 2396160, 0, 0, 2170880, 2170880, 2170880, 2170880, 3018752, 2170880, 2650112, 2965504, 53264, 18,\n  /* 19275 */ 49172, 57366, 24, 155648, 28, 102432, 155648, 155687, 114730, 106539, 0, 0, 155648, 53264, 18, 18, 49172,\n  /* 19292 */ 0, 57366, 0, 24, 24, 24, 0, 28, 28, 28, 28, 102432, 0, 0, 0, 0, 2220032, 0, 94208, 0, 0, 114730, 106539,\n  /* 19315 */ 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 208896, 18, 278528, 24, 24, 0, 28, 28,\n  /* 19332 */ 53264, 18, 159765, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 0, 53264, 18, 18, 49172,\n  /* 19351 */ 0, 57366, 0, 24, 24, 24, 0, 28, 139394, 28, 28, 102432, 131, 0, 0, 0, 2220032, 110630, 0, 0, 0, 114730,\n  /* 19373 */ 106539, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 32768, 53264, 0, 18, 18, 24, 24, 0, 28,\n  /* 19390 */ 28, 0, 546, 0, 0, 2183168, 0, 0, 552, 832, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880,\n  /* 19407 */ 2170880, 2170880, 2609152, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2654208, 2170880,\n  /* 19418 */ 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936,\n  /* 19429 */ 2215936, 2215936, 2215936, 2215936, 3198976, 2215936, 0, 1084, 0, 1088, 0, 1092, 0, 0, 0, 0, 0, 41606, 0,\n  /* 19448 */ 0, 0, 0, 45, 45, 45, 45, 45, 937, 0, 0, 0, 0, 2220032, 110630, 0, 0, 0, 114730, 106539, 0, 2170880,\n  /* 19470 */ 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3198976, 2170880, 0, 0, 644, 0, 0, 0,\n  /* 19485 */ 2215936, 3117056, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936,\n  /* 19496 */ 2215936, 2215936, 2215936, 0, 826, 0, 828, 0, 0, 2183168, 0, 0, 830, 0, 2170880, 2170880, 2170880,\n  /* 19513 */ 2400256, 2170880, 2170880, 2170880, 2170880, 2592768, 2170880, 2170880, 2170880, 2170880, 2633728,\n  /* 19524 */ 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2711552, 2170880, 2170880, 2170880, 2170880,\n  /* 19535 */ 2170880, 2760704, 53264, 18, 49172, 57366, 24, 8192, 28, 172066, 172032, 110630, 172066, 106539, 0, 0,\n  /* 19551 */ 172032, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 16384, 28, 28, 28, 28, 102432, 0, 98304, 0, 0,\n  /* 19572 */ 2220032, 110630, 0, 0, 0, 0, 106539, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880,\n  /* 19587 */ 2170880, 3198976, 2170880, 0, 0, 45056, 0, 0, 0, 53264, 18, 49172, 57366, 25, 8192, 30, 102432, 0, 110630,\n  /* 19606 */ 114730, 106539, 0, 0, 176219, 53264, 18, 18, 49172, 0, 57366, 0, 124, 124, 124, 0, 128, 128, 128, 128,\n  /* 19626 */ 102432, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 2170880, 2170880, 2170880, 2416640, 0, 546, 0, 0, 2183168,\n  /* 19648 */ 0, 65536, 552, 0, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 2646016,\n  /* 19661 */ 2670592, 2752512, 2756608, 2846720, 2961408, 2170880, 2998272, 2170880, 3010560, 2170880, 2170880,\n  /* 19672 */ 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3198976, 2215936, 0, 0, 0, 0, 0, 0, 65536, 0, 0, 0,\n  /* 19690 */ 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 143, 45, 45, 67, 67, 67, 67, 67, 227, 67, 67, 67,\n  /* 19713 */ 67, 67, 67, 67, 67, 67, 1824, 67, 1826, 67, 67, 67, 67, 17, 18, 49172, 57366, 24, 8192, 28, 102432, 0,\n  /* 19735 */ 110630, 114730, 106539, 0, 0, 32768, 120, 121, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 0, 28, 28, 28, 28,\n  /* 19757 */ 102432, 67, 67, 37139, 37139, 24853, 24853, 0, 0, 2179072, 548, 0, 65820, 65820, 0, 287, 97, 0, 0, 97, 97,\n  /* 19778 */ 0, 97, 97, 97, 45, 45, 45, 45, 2033, 45, 67, 67, 67, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 369, 0,\n  /* 19805 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 978, 0, 546, 70179, 0, 2183168, 0, 0, 552, 0,\n  /* 19830 */ 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1013, 67, 67, 67,\n  /* 19856 */ 67, 67, 67, 67, 67, 67, 67, 473, 67, 67, 67, 67, 483, 67, 67, 1025, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 19881 */ 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 1119, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 19907 */ 97, 97, 1359, 97, 97, 97, 67, 67, 1584, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 497, 67, 67,\n  /* 19932 */ 1659, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1667, 45, 45, 45, 45, 45, 169, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 19957 */ 45, 45, 45, 1668, 45, 45, 45, 45, 67, 67, 1694, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 774,\n  /* 19982 */ 67, 67, 1713, 97, 97, 97, 97, 97, 97, 97, 0, 97, 97, 1723, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45,\n  /* 20007 */ 1538, 45, 45, 45, 45, 45, 1559, 45, 45, 1561, 45, 45, 45, 45, 45, 45, 45, 687, 45, 45, 45, 45, 45, 45, 45,\n  /* 20032 */ 45, 448, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1771, 1772, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97,\n  /* 20057 */ 97, 0, 0, 0, 97, 67, 67, 67, 67, 67, 1821, 67, 67, 67, 67, 67, 67, 1827, 67, 67, 67, 0, 0, 0, 0, 0, 0, 97,\n  /* 20085 */ 97, 1614, 97, 97, 97, 97, 97, 603, 97, 97, 605, 97, 97, 608, 97, 97, 97, 97, 0, 1532, 45, 45, 45, 45, 45,\n  /* 20110 */ 45, 45, 45, 45, 45, 450, 45, 45, 45, 45, 67, 67, 97, 97, 97, 97, 97, 97, 0, 0, 1839, 97, 97, 97, 97, 0, 0,\n  /* 20137 */ 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 97, 1883, 97, 1885, 97, 0,\n  /* 20162 */ 1888, 0, 97, 97, 0, 97, 97, 1848, 97, 97, 97, 97, 1852, 45, 45, 45, 45, 45, 45, 45, 384, 391, 45, 45, 45,\n  /* 20187 */ 45, 45, 45, 45, 385, 45, 45, 45, 45, 45, 45, 45, 45, 1237, 45, 45, 45, 45, 45, 45, 67, 0, 97, 97, 97, 97,\n  /* 20213 */ 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 1951, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67,\n  /* 20240 */ 67, 67, 1963, 97, 2023, 0, 97, 97, 0, 97, 97, 97, 45, 45, 45, 45, 45, 45, 67, 67, 1994, 67, 1995, 67, 67,\n  /* 20265 */ 67, 67, 67, 67, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 0, 0, 0, 0, 2220032, 110630, 0,\n  /* 20294 */ 0, 0, 114730, 106539, 137, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2793472,\n  /* 20307 */ 2805760, 2170880, 2830336, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880,\n  /* 20318 */ 2170880, 2170880, 2170880, 2170880, 3031040, 2170880, 3055616, 2170880, 2170880, 67, 67, 37139, 37139,\n  /* 20331 */ 24853, 24853, 0, 0, 281, 549, 0, 65820, 65820, 0, 287, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 45, 2031,\n  /* 20354 */ 2032, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1769, 67, 0, 546, 70179, 549, 549, 0, 0,\n  /* 20378 */ 552, 0, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1858, 45, 641, 0, 0, 0, 0, 41606, 926, 0, 0,\n  /* 20404 */ 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 456, 67, 0, 0, 0, 1313, 0, 0, 0, 1096, 1319, 0,\n  /* 20431 */ 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1110, 97, 97, 97, 97, 67, 67, 67, 67, 1301, 1476, 0, 0, 0, 0,\n  /* 20457 */ 1307, 1478, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 1486, 97, 1487, 97, 1313, 1480, 0, 0, 0, 0, 1319, 0,\n  /* 20483 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 566, 97, 97, 97, 97, 97, 97, 67, 67, 67, 1476, 0, 1478, 0, 1480, 0,\n  /* 20508 */ 97, 97, 97, 97, 97, 97, 97, 45, 1853, 45, 1855, 45, 45, 45, 45, 53264, 18, 49172, 57366, 26, 8192, 31,\n  /* 20530 */ 102432, 0, 110630, 114730, 106539, 0, 0, 225368, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630,\n  /* 20548 */ 114730, 106539, 0, 0, 32768, 53264, 18, 18, 49172, 163840, 57366, 0, 24, 24, 229376, 0, 28, 28, 28,\n  /* 20567 */ 229376, 102432, 0, 0, 0, 0, 2220167, 110630, 0, 0, 0, 114730, 106539, 0, 2171019, 2171019, 2171019,\n  /* 20584 */ 2171019, 2592907, 2171019, 2171019, 2171019, 2171019, 2633867, 2171019, 2171019, 2171019, 2171019,\n  /* 20595 */ 2171019, 2171019, 2654347, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019,\n  /* 20606 */ 2171019, 2171019, 2171019, 3117195, 2171019, 2171019, 2171019, 2171019, 2240641, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 20623 */ 368, 0, 140, 2171019, 2171019, 2171019, 2416779, 2424971, 2171019, 2171019, 2171019, 2171019, 2171019,\n  /* 20636 */ 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2617483, 2171019, 2171019,\n  /* 20647 */ 2642059, 2171019, 2171019, 2171019, 2699403, 2171019, 2728075, 2171019, 2171019, 2171019, 2171019,\n  /* 20658 */ 2171019, 2171019, 2171019, 3215499, 2215936, 2215936, 2215936, 2215936, 2215936, 2437120, 2215936,\n  /* 20669 */ 2215936, 2171019, 2822283, 2171019, 2171019, 2855051, 2171019, 2171019, 2171019, 2912395, 2171019,\n  /* 20680 */ 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3002507, 2171019, 2171019, 2215936, 2215936,\n  /* 20691 */ 2494464, 2215936, 2215936, 2215936, 2171166, 2171166, 2416926, 2425118, 2171166, 2171166, 2171166,\n  /* 20702 */ 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166,\n  /* 20713 */ 2171166, 2171166, 2576670, 2171166, 2617630, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166,\n  /* 20724 */ 2691358, 2171166, 2707742, 2171166, 2715934, 2171166, 2724126, 2765086, 2171166, 2171166, 2797854,\n  /* 20735 */ 2171166, 2822430, 2171166, 2171166, 2855198, 2171166, 2171166, 2171166, 2912542, 2171166, 2171166,\n  /* 20746 */ 2171166, 2171166, 2171166, 2171166, 2171166, 2793758, 2806046, 2171166, 2830622, 2171166, 2171166,\n  /* 20757 */ 2171166, 2171166, 2171166, 2171166, 2171166, 3109150, 2171166, 2171166, 2171166, 2171166, 2171166,\n  /* 20768 */ 2171166, 2171166, 2171166, 2171166, 2543902, 2171166, 2171166, 2171166, 2171166, 2171166, 2629918,\n  /* 20779 */ 2793611, 2805899, 2171019, 2830475, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019,\n  /* 20790 */ 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 0, 546, 0, 0, 2183168, 0,\n  /* 20805 */ 0, 552, 0, 2171166, 2171166, 2171166, 2400542, 2171166, 2171166, 2171166, 0, 2171166, 2171166, 2171166, 0,\n  /* 20820 */ 2171166, 2920734, 2171166, 2171166, 2171166, 2990366, 2171166, 2171166, 2171166, 2171166, 3117342,\n  /* 20831 */ 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166,\n  /* 20842 */ 2171166, 0, 53264, 0, 18, 18, 4329472, 2232445, 0, 2240641, 4337664, 2711691, 2171019, 2171019, 2171019,\n  /* 20857 */ 2171019, 2171019, 2760843, 2769035, 2789515, 2814091, 2171019, 2171019, 2171019, 2875531, 2904203,\n  /* 20868 */ 2171019, 2171019, 3092619, 2171019, 2171019, 3125387, 2171019, 2171019, 2171019, 2171019, 2171019,\n  /* 20879 */ 2171019, 2171019, 2171019, 2171019, 3199115, 2171019, 2215936, 2215936, 2215936, 2215936, 2215936,\n  /* 20890 */ 2215936, 2215936, 2215936, 2215936, 2453504, 2457600, 2215936, 2215936, 2215936, 2215936, 2215936,\n  /* 20901 */ 2215936, 2793472, 2805760, 2215936, 2830336, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936,\n  /* 20912 */ 2170880, 2170880, 2170880, 2170880, 2170880, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880,\n  /* 20925 */ 2170880, 2170880, 2170880, 2494464, 2170880, 2170880, 2171166, 2171166, 2634014, 2171166, 2171166,\n  /* 20936 */ 2171166, 2171166, 2171166, 2171166, 2711838, 2171166, 2171166, 2171166, 2171166, 2171166, 2760990,\n  /* 20947 */ 2769182, 2789662, 2814238, 2171166, 2171166, 2171166, 2875678, 2904350, 2171166, 2171166, 2171166,\n  /* 20958 */ 2171166, 2171166, 2171166, 2171166, 2171166, 3199262, 2171166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2379915,\n  /* 20975 */ 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2445451, 2171019, 2465931, 2474123,\n  /* 20986 */ 2171019, 2171019, 3113099, 2171019, 2171019, 3133579, 2171019, 2171019, 2171019, 3162251, 2171019,\n  /* 20997 */ 2171019, 3182731, 3186827, 2171019, 2379776, 2879627, 2171019, 2916491, 2171019, 2171019, 2171019,\n  /* 21008 */ 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3027083, 2171019, 2171019, 3063947, 2699550,\n  /* 21019 */ 2171166, 2728222, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2879774, 2171166,\n  /* 21030 */ 2916638, 2171166, 2171166, 2171166, 2171166, 2171166, 2609438, 2171166, 2171166, 2171166, 2171166,\n  /* 21041 */ 2171166, 2171166, 2654494, 2171166, 2171166, 2171166, 2171166, 2171166, 2445598, 2171166, 2466078,\n  /* 21052 */ 2474270, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2523422, 2171019, 2437259, 2171019,\n  /* 21063 */ 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2543755,\n  /* 21074 */ 2171019, 2171019, 2171019, 2584715, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019,\n  /* 21085 */ 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2908299, 2171019,\n  /* 21096 */ 2171019, 2936971, 2171019, 2171019, 2986123, 2171019, 2994315, 2171019, 2171019, 3014795, 2171019,\n  /* 21107 */ 3059851, 3076235, 3088523, 2171166, 2171166, 2986270, 2171166, 2994462, 2171166, 2171166, 3014942,\n  /* 21118 */ 2171166, 3059998, 3076382, 3088670, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 3027230,\n  /* 21129 */ 2171166, 2171166, 3064094, 2171166, 2171166, 3113246, 2171166, 2171166, 3133726, 2506891, 2171019,\n  /* 21140 */ 2171019, 2171019, 2535563, 2539659, 2171019, 2171019, 2588811, 2171019, 2171019, 2171019, 2171019,\n  /* 21151 */ 2171019, 2171019, 2171019, 2691211, 2171019, 2707595, 2171019, 2715787, 2171019, 2723979, 2764939,\n  /* 21162 */ 2171019, 2171019, 2797707, 2215936, 2215936, 3170304, 0, 0, 0, 0, 0, 0, 2171166, 2171166, 2171166,\n  /* 21177 */ 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2453790, 2457886, 2171166, 2171166, 2171166,\n  /* 21188 */ 2486558, 2171166, 2171166, 2507038, 2171166, 2171166, 2171166, 2535710, 2539806, 2171166, 2171166,\n  /* 21199 */ 2588958, 2171166, 2171166, 2171166, 2171166, 2515230, 2171166, 2171166, 2171166, 2171166, 2171166,\n  /* 21210 */ 2171166, 2171166, 2171166, 2593054, 2171166, 2171166, 2171166, 2171166, 3051806, 2171166, 2171166,\n  /* 21221 */ 2171166, 2171166, 2171166, 2171166, 3170590, 0, 2388107, 2392203, 2171019, 2171019, 2433163, 2171019,\n  /* 21233 */ 2461835, 2171019, 2171019, 2171019, 2510987, 2171019, 2171019, 2171019, 2171019, 2580619, 2171019,\n  /* 21244 */ 2605195, 2637963, 2171019, 2171019, 2171019, 2920587, 2171019, 2171019, 2171019, 2990219, 2171019,\n  /* 21255 */ 2171019, 2171019, 2171019, 3051659, 2171019, 2171019, 2171019, 2453643, 2457739, 2171019, 2171019,\n  /* 21266 */ 2171019, 2171019, 2171019, 2171019, 2515083, 2171019, 2171019, 2171019, 2171019, 2646155, 2670731,\n  /* 21277 */ 2752651, 2756747, 2846859, 2961547, 2171019, 2998411, 2171019, 3010699, 2171019, 2171019, 2687115,\n  /* 21288 */ 2748555, 2171019, 2171019, 2171019, 2924683, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019,\n  /* 21299 */ 2171019, 3121291, 2171019, 2171019, 2171019, 3170443, 2215936, 2215936, 2215936, 2215936, 2215936,\n  /* 21310 */ 2215936, 2215936, 2215936, 2486272, 2215936, 2215936, 2506752, 3145867, 3158155, 3166347, 2387968,\n  /* 21321 */ 2392064, 2215936, 2215936, 2433024, 2215936, 2461696, 2215936, 2215936, 2215936, 2510848, 2215936,\n  /* 21332 */ 2215936, 0, 0, 0, 0, 0, 0, 2179072, 0, 0, 0, 0, 0, 553, 2170880, 2215936, 2215936, 2215936, 2215936,\n  /* 21351 */ 2215936, 3121152, 2215936, 2215936, 3145728, 3158016, 3166208, 2388254, 2392350, 2171166, 2171166,\n  /* 21362 */ 2433310, 2171166, 2461982, 2171166, 2171166, 2171166, 2511134, 2171166, 2171166, 0, 2171166, 2171166,\n  /* 21374 */ 2580766, 2171166, 2605342, 2638110, 2171166, 2171166, 2171166, 2171166, 3031326, 2171166, 3055902,\n  /* 21385 */ 2171166, 2171166, 2171166, 2171166, 3092766, 2171166, 2171166, 3125534, 2171166, 2171166, 2171166,\n  /* 21396 */ 3162398, 2171166, 2171166, 3182878, 3186974, 2171166, 0, 0, 0, 2171019, 2171019, 2171019, 2171019,\n  /* 21409 */ 3109003, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019,\n  /* 21420 */ 2215936, 2215936, 2215936, 2400256, 2215936, 2215936, 2215936, 2215936, 2171166, 2687262, 0, 0, 2748702,\n  /* 21433 */ 2171166, 2171166, 0, 2171166, 2924830, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166,\n  /* 21445 */ 2597150, 2171166, 2621726, 2171166, 2171166, 2642206, 2171166, 2171166, 2171166, 2171166, 3121438,\n  /* 21456 */ 2171166, 2171166, 3146014, 3158302, 3166494, 2171019, 2420875, 2429067, 2171019, 2478219, 2171019,\n  /* 21467 */ 2171019, 2171019, 2171019, 2547851, 2556043, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019,\n  /* 21478 */ 2171019, 2171019, 2171019, 3129483, 2215936, 2171019, 3141771, 2215936, 2420736, 2428928, 2215936,\n  /* 21489 */ 2478080, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2646016, 2670592,\n  /* 21500 */ 2752512, 2756608, 2846720, 2961408, 2215936, 2998272, 2215936, 3010560, 2215936, 2215936, 2215936,\n  /* 21511 */ 3141632, 2171166, 2421022, 2429214, 2171166, 2478366, 2171166, 2171166, 2171166, 2171166, 0, 0, 2171166,\n  /* 21524 */ 2171166, 2171166, 2171166, 2646302, 2670878, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 0, 45, 45,\n  /* 21543 */ 45, 45, 45, 1405, 1406, 45, 45, 45, 45, 1409, 45, 45, 45, 45, 45, 1415, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 21567 */ 45, 45, 1238, 45, 45, 45, 45, 67, 2752798, 2756894, 0, 2847006, 2961694, 2171166, 2998558, 2171166,\n  /* 21583 */ 3010846, 2171166, 2171166, 2171166, 3141918, 2171019, 2171019, 2490507, 3129344, 2171166, 2171166,\n  /* 21594 */ 2490654, 2171166, 2171166, 2171166, 0, 0, 2547998, 2556190, 2171166, 2171166, 2171166, 0, 0, 0, 0, 37,\n  /* 21610 */ 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45, 45, 167, 45, 45, 45, 45, 185, 187, 45, 45, 198, 45,\n  /* 21632 */ 45, 0, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 3129630, 2171019, 2171019, 2171019, 2171019,\n  /* 21645 */ 2171019, 2171019, 2171019, 2171019, 2576523, 2171019, 2171019, 2171019, 2171019, 2171019, 2609291,\n  /* 21656 */ 2171019, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3002368, 2215936, 2215936, 2171166,\n  /* 21667 */ 2171166, 2494750, 2171166, 2171166, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45,\n  /* 21686 */ 147, 2584576, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2171166, 2171166, 2171166,\n  /* 21698 */ 2171166, 0, 0, 0, 2171166, 2171166, 2171166, 2171166, 0, 0, 0, 2171166, 2171166, 2171166, 3002654,\n  /* 21713 */ 2171166, 2171166, 2171019, 2171019, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936,\n  /* 21724 */ 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2175257, 0, 0, 2584862,\n  /* 21741 */ 2171166, 2171166, 0, 0, 2171166, 2171166, 2171166, 2171166, 2171166, 2171019, 2441355, 2171019, 2527371,\n  /* 21754 */ 2171019, 2601099, 2171019, 2850955, 2171019, 2171019, 2171019, 3022987, 2215936, 2441216, 2215936,\n  /* 21765 */ 2527232, 2215936, 2600960, 2215936, 2850816, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2179072, 0, 0, 0, 0,\n  /* 21783 */ 69632, 287, 2170880, 2215936, 3022848, 2171166, 2441502, 2171166, 2527518, 0, 0, 2171166, 2601246,\n  /* 21796 */ 2171166, 0, 2851102, 2171166, 2171166, 2171166, 2171166, 2720030, 2744606, 2171166, 2171166, 2171166,\n  /* 21808 */ 2834718, 2838814, 2171166, 2908446, 2171166, 2171166, 2937118, 3023134, 2171019, 2519179, 2171019,\n  /* 21819 */ 2171019, 2171019, 2171019, 2171019, 2215936, 2519040, 2215936, 2215936, 2215936, 2215936, 2215936,\n  /* 21830 */ 2171166, 2171166, 2171166, 3215646, 0, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019,\n  /* 21842 */ 2171019, 2486411, 2171019, 2171019, 2171019, 2629771, 2171019, 2171019, 2171019, 2171019, 2719883,\n  /* 21853 */ 2744459, 2171019, 2171019, 2171019, 2834571, 2838667, 2171019, 2519326, 0, 0, 2171166, 2171166, 0,\n  /* 21866 */ 2171166, 2171166, 2171166, 2396299, 2171019, 2171019, 2171019, 2171019, 3018891, 2396160, 2215936,\n  /* 21877 */ 2215936, 2215936, 2215936, 3018752, 2396446, 0, 0, 2171166, 2171166, 2171166, 2171166, 3019038, 2171019,\n  /* 21890 */ 2650251, 2965643, 2171019, 2215936, 2650112, 2965504, 2215936, 0, 0, 2171166, 2650398, 2965790, 2171166,\n  /* 21903 */ 2551947, 2171019, 2551808, 2215936, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 144,\n  /* 21922 */ 45, 45, 67, 67, 67, 67, 67, 228, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1929, 97, 97, 97, 97, 0, 0, 0,\n  /* 21947 */ 2552094, 2171166, 2171019, 2215936, 0, 2171166, 2171019, 2215936, 0, 2171166, 2171019, 2215936, 0,\n  /* 21960 */ 2171166, 2977931, 2977792, 2978078, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 1321, 97, 131072, 0, 0,\n  /* 21984 */ 0, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 0, 18, 18, 24, 24, 0,\n  /* 22005 */ 28, 28, 0, 140, 0, 2379776, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2445312,\n  /* 22019 */ 2170880, 2465792, 2473984, 2170880, 2170880, 2170880, 2584576, 2170880, 2170880, 2170880, 2170880,\n  /* 22030 */ 2170880, 2170880, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936,\n  /* 22041 */ 2215936, 2170880, 2170880, 2170880, 3162112, 2170880, 2170880, 3182592, 3186688, 2170880, 0, 140, 0,\n  /* 22054 */ 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3002368, 2170880, 2170880, 2215936,\n  /* 22065 */ 2215936, 2494464, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3215360, 544, 0, 0, 0, 544, 0,\n  /* 22080 */ 546, 0, 0, 0, 546, 0, 0, 2183168, 0, 0, 552, 0, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880,\n  /* 22098 */ 2170880, 0, 2170880, 2170880, 2170880, 0, 2170880, 2920448, 2170880, 2170880, 2170880, 2990080, 2170880,\n  /* 22111 */ 2170880, 552, 0, 0, 0, 552, 0, 287, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2437120, 2170880,\n  /* 22127 */ 2170880, 18, 0, 0, 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 644, 0, 2215936, 2215936, 3170304, 544, 0, 546, 0,\n  /* 22149 */ 552, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3198976, 2170880, 0, 0, 0,\n  /* 22164 */ 140, 0, 0, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 249856, 110630, 114730, 106539, 0, 0, 32768,\n  /* 22182 */ 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 151640, 53264, 18, 18,\n  /* 22200 */ 49172, 0, 57366, 0, 24, 24, 24, 0, 28, 28, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2170880, 2170880,\n  /* 22225 */ 2170880, 2416640, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 253952, 110630, 114730, 106539, 0, 0,\n  /* 22241 */ 32856, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 192512, 53264, 18,\n  /* 22259 */ 18, 49172, 0, 57366, 0, 2232445, 184320, 2232445, 0, 2240641, 2240641, 184320, 2240641, 102432, 0, 0, 0,\n  /* 22276 */ 221184, 2220032, 110630, 0, 0, 0, 114730, 106539, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880,\n  /* 22291 */ 2170880, 3108864, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880,\n  /* 22302 */ 2170880, 2215936, 0, 0, 0, 45056, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880,\n  /* 22320 */ 0, 53264, 0, 18, 18, 24, 24, 0, 127, 127, 53264, 18, 49172, 258071, 24, 8192, 28, 102432, 0, 110630,\n  /* 22340 */ 114730, 106539, 0, 0, 32768, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0,\n  /* 22358 */ 0, 204800, 53264, 18, 49172, 57366, 24, 27, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 0, 53264, 18,\n  /* 22377 */ 49172, 57366, 24, 8192, 28, 33, 0, 33, 33, 33, 0, 0, 0, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24,\n  /* 22400 */ 16384, 28, 28, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 2170880, 2170880, 2170880, 2416640, 67, 67,\n  /* 22422 */ 37139, 37139, 24853, 24853, 0, 70179, 0, 0, 0, 65820, 65820, 369, 287, 97, 0, 0, 97, 97, 0, 97, 97, 97,\n  /* 22444 */ 45, 2030, 45, 45, 45, 45, 67, 1573, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1699, 67, 67, 67, 67,\n  /* 22468 */ 25403, 546, 70179, 0, 0, 66365, 66365, 552, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1355, 97, 97, 97, 1358, 97,\n  /* 22491 */ 97, 97, 641, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 1187, 45, 45, 45, 45, 45, 0,\n  /* 22517 */ 1480, 0, 0, 0, 0, 1319, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 592, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 22543 */ 97, 1531, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1680, 45, 45, 45, 641, 0, 924, 0, 925, 41606, 0,\n  /* 22568 */ 0, 0, 0, 45, 45, 45, 45, 45, 45, 1186, 45, 45, 45, 45, 45, 45, 67, 67, 37139, 37139, 24853, 24853, 0,\n  /* 22591 */ 70179, 282, 0, 0, 65820, 65820, 369, 287, 97, 0, 0, 97, 97, 0, 97, 2028, 97, 45, 45, 45, 45, 45, 45, 67,\n  /* 22615 */ 67, 67, 67, 67, 67, 67, 67, 67, 67, 1767, 67, 67, 67, 0, 0, 0, 0, 0, 0, 1612, 97, 97, 97, 97, 97, 97, 0,\n  /* 22642 */ 1785, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 1790, 97, 0, 0, 2170880, 2170880, 3051520, 2170880,\n  /* 22663 */ 2170880, 2170880, 2170880, 2170880, 2170880, 3170304, 241664, 2387968, 2392064, 2170880, 2170880, 2433024,\n  /* 22675 */ 53264, 19, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 274432, 53264, 18, 49172,\n  /* 22693 */ 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 270336, 53264, 18, 49172, 57366, 24, 8192,\n  /* 22711 */ 28, 102432, 0, 110630, 114730, 106539, 0, 0, 1134711, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0,\n  /* 22729 */ 1126440, 1126440, 1126440, 0, 0, 1126400, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 36, 110630,\n  /* 22745 */ 114730, 106539, 0, 0, 217088, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0,\n  /* 22763 */ 0, 94, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 96, 53264, 18,\n  /* 22782 */ 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 24666, 53264, 18, 18, 49172, 0,\n  /* 22800 */ 57366, 0, 24, 24, 24, 126, 28, 28, 28, 28, 102432, 53264, 122, 123, 49172, 0, 57366, 0, 24, 24, 24, 0, 28,\n  /* 22823 */ 28, 28, 28, 102432, 2170880, 2170880, 4256099, 0, 0, 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 22847 */ 1319, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1109, 97, 97, 97, 97, 1113, 132, 0, 0, 0, 37, 110630, 0, 0,\n  /* 22873 */ 0, 114730, 106539, 41098, 45, 45, 45, 146, 150, 45, 45, 45, 45, 45, 175, 45, 180, 45, 186, 45, 189, 45,\n  /* 22895 */ 45, 203, 67, 256, 67, 67, 270, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 97, 293, 297,\n  /* 22918 */ 97, 97, 97, 97, 97, 322, 97, 327, 97, 333, 97, 0, 0, 97, 2026, 0, 2027, 97, 97, 45, 45, 45, 45, 45, 45,\n  /* 22943 */ 67, 67, 67, 1685, 67, 67, 67, 67, 67, 67, 67, 1690, 67, 336, 97, 97, 350, 97, 97, 0, 53264, 0, 18, 18, 24,\n  /* 22968 */ 24, 356, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 2170880, 2170880, 2170880, 2416640, 2424832, 2170880,\n  /* 22989 */ 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880,\n  /* 23000 */ 2170880, 2617344, 2170880, 45, 439, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67,\n  /* 23022 */ 67, 67, 67, 67, 67, 67, 525, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 23051 */ 0, 97, 97, 97, 97, 622, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1524, 97, 97, 1527, 369, 648, 45,\n  /* 23076 */ 45, 45, 45, 45, 45, 45, 45, 45, 659, 45, 45, 45, 45, 408, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 23101 */ 1239, 45, 45, 45, 67, 729, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 23127 */ 67, 67, 67, 762, 67, 746, 67, 67, 67, 67, 67, 67, 67, 67, 67, 759, 67, 67, 67, 67, 0, 0, 0, 1477, 0, 1086,\n  /* 23153 */ 0, 0, 0, 1479, 0, 1090, 67, 67, 796, 67, 67, 799, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1291,\n  /* 23178 */ 67, 67, 67, 811, 67, 67, 67, 67, 67, 816, 67, 67, 67, 67, 67, 67, 67, 37689, 544, 25403, 546, 70179, 0, 0,\n  /* 23202 */ 66365, 66365, 552, 833, 97, 97, 97, 97, 97, 97, 97, 97, 1380, 0, 0, 0, 45, 45, 45, 45, 45, 1185, 45, 45,\n  /* 23226 */ 45, 45, 45, 45, 45, 386, 45, 45, 45, 45, 45, 45, 45, 45, 1810, 45, 45, 45, 45, 45, 45, 67, 97, 97, 844,\n  /* 23251 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 857, 97, 97, 97, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 23278 */ 97, 45, 45, 45, 97, 97, 97, 894, 97, 97, 897, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 1382, 45, 45,\n  /* 23304 */ 45, 97, 909, 97, 97, 97, 97, 97, 914, 97, 97, 97, 97, 97, 97, 97, 923, 67, 67, 1079, 67, 67, 67, 67, 67,\n  /* 23329 */ 37689, 1085, 25403, 1089, 66365, 1093, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45,\n  /* 23350 */ 148, 1114, 97, 97, 97, 97, 97, 97, 1122, 97, 97, 97, 97, 97, 97, 97, 97, 97, 606, 97, 97, 97, 97, 97, 97,\n  /* 23375 */ 97, 97, 97, 97, 1173, 97, 97, 97, 97, 97, 12288, 0, 925, 0, 1179, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730,\n  /* 23400 */ 106539, 41098, 45, 45, 145, 45, 45, 67, 67, 67, 67, 67, 1762, 67, 67, 67, 1766, 67, 67, 67, 67, 67, 67,\n  /* 23423 */ 528, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 1934, 67, 67, 1255, 67, 67, 67, 67, 67,\n  /* 23448 */ 67, 67, 67, 67, 67, 67, 67, 67, 1035, 67, 67, 67, 67, 67, 67, 1297, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0,\n  /* 23475 */ 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1111, 97, 97, 97, 97, 97, 97, 1327, 97, 97, 97, 97, 97, 97, 97,\n  /* 23501 */ 97, 97, 97, 97, 97, 33344, 97, 97, 97, 1335, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 23526 */ 97, 0, 97, 97, 1377, 97, 97, 97, 97, 97, 97, 0, 1179, 0, 45, 45, 45, 45, 670, 45, 45, 45, 45, 45, 45, 45,\n  /* 23552 */ 45, 45, 45, 45, 430, 45, 45, 45, 45, 67, 67, 1438, 67, 67, 1442, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 23577 */ 67, 67, 1592, 67, 67, 67, 1451, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1458, 67, 67, 67, 67, 0, 0, 1305,\n  /* 23602 */ 0, 0, 0, 0, 0, 1311, 0, 0, 0, 1317, 0, 0, 0, 0, 0, 0, 0, 97, 97, 1322, 97, 97, 1491, 97, 97, 1495, 97, 97,\n  /* 23630 */ 97, 97, 97, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1551, 45, 1553, 45,\n  /* 23655 */ 1504, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1513, 97, 97, 97, 97, 0, 45, 45, 45, 45, 1536, 45, 45, 45,\n  /* 23680 */ 45, 1540, 45, 67, 67, 67, 67, 67, 1585, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1700, 67, 67, 67,\n  /* 23705 */ 97, 1648, 97, 97, 97, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1541, 0, 97, 97, 97,\n  /* 23731 */ 97, 0, 1940, 0, 97, 97, 97, 97, 97, 97, 45, 45, 2011, 45, 45, 45, 2015, 67, 67, 2017, 67, 67, 67, 2021,\n  /* 23755 */ 97, 67, 67, 812, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 544, 97, 97, 97, 910, 97, 97, 97, 97,\n  /* 23780 */ 97, 97, 97, 97, 97, 97, 97, 923, 0, 0, 0, 45, 45, 45, 45, 1184, 45, 45, 45, 45, 1188, 45, 45, 45, 45,\n  /* 23805 */ 1414, 45, 45, 45, 1417, 45, 1419, 45, 45, 45, 45, 45, 443, 45, 45, 45, 45, 45, 45, 453, 45, 45, 67, 67,\n  /* 23829 */ 67, 67, 1244, 67, 67, 67, 67, 1248, 67, 67, 67, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 282, 41098,\n  /* 23852 */ 65820, 97, 1324, 97, 97, 97, 97, 1328, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 930, 45, 45, 45, 45, 97,\n  /* 23877 */ 97, 97, 97, 1378, 97, 97, 97, 97, 0, 1179, 0, 45, 45, 45, 45, 671, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 23903 */ 45, 975, 45, 45, 45, 45, 67, 67, 1923, 67, 1925, 67, 67, 1927, 67, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97,\n  /* 23928 */ 97, 1985, 45, 45, 45, 45, 45, 45, 1560, 45, 45, 45, 45, 45, 45, 45, 45, 45, 946, 45, 45, 950, 45, 45, 45,\n  /* 23953 */ 0, 97, 97, 97, 1939, 0, 0, 0, 97, 1943, 97, 97, 1945, 97, 45, 45, 45, 669, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 23979 */ 45, 45, 45, 45, 990, 45, 45, 45, 67, 257, 67, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820,\n  /* 24003 */ 337, 97, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 356, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 370,\n  /* 24030 */ 2170880, 2170880, 2170880, 2416640, 401, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 24051 */ 67, 67, 459, 461, 67, 67, 67, 67, 67, 67, 67, 67, 475, 67, 480, 67, 67, 67, 67, 67, 67, 1054, 67, 67, 67,\n  /* 24076 */ 67, 67, 67, 67, 67, 67, 67, 1698, 67, 67, 67, 67, 67, 484, 67, 67, 487, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 24101 */ 67, 67, 67, 67, 67, 1459, 67, 67, 97, 556, 558, 97, 97, 97, 97, 97, 97, 97, 97, 572, 97, 577, 97, 97, 0,\n  /* 24126 */ 0, 1896, 97, 97, 97, 97, 97, 97, 1903, 45, 45, 45, 45, 983, 45, 45, 45, 45, 988, 45, 45, 45, 45, 45, 45,\n  /* 24151 */ 1195, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1549, 45, 45, 45, 45, 45, 581, 97, 97, 584, 97, 97, 97, 97,\n  /* 24176 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 1153, 97, 97, 369, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 662,\n  /* 24202 */ 45, 45, 45, 684, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1004, 45, 45, 45, 67, 67, 67, 749, 67,\n  /* 24227 */ 67, 67, 67, 67, 67, 67, 67, 67, 761, 67, 67, 67, 67, 67, 67, 1068, 67, 67, 67, 1071, 67, 67, 67, 67, 1076,\n  /* 24252 */ 794, 795, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 544, 97, 97, 97, 97, 847, 97, 97, 97,\n  /* 24278 */ 97, 97, 97, 97, 97, 97, 859, 97, 0, 0, 2025, 97, 20480, 97, 97, 2029, 45, 45, 45, 45, 45, 45, 67, 67, 67,\n  /* 24303 */ 1575, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1775, 67, 67, 67, 97, 97, 97, 97, 892, 893, 97, 97, 97, 97, 97,\n  /* 24328 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 1515, 97, 993, 994, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 24353 */ 45, 45, 45, 992, 67, 67, 67, 1284, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1607, 67, 67, 97,\n  /* 24378 */ 1364, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 596, 97, 45, 1556, 1557, 45, 45, 45, 45, 45,\n  /* 24403 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 696, 45, 1596, 1597, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 24428 */ 67, 67, 499, 67, 97, 97, 97, 1621, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1346, 97, 97, 97,\n  /* 24453 */ 97, 1740, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1678, 45, 45, 45, 45, 45, 67, 97, 97,\n  /* 24478 */ 97, 97, 97, 97, 1836, 0, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 1984, 97, 45, 45, 45, 45, 45, 45, 1808, 45,\n  /* 24504 */ 45, 45, 45, 45, 45, 45, 45, 67, 739, 67, 67, 67, 67, 67, 744, 45, 45, 1909, 45, 45, 45, 45, 45, 45, 45,\n  /* 24529 */ 67, 1917, 67, 1918, 67, 67, 67, 67, 67, 67, 1247, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 532, 67, 67, 67,\n  /* 24554 */ 67, 67, 67, 1922, 67, 67, 67, 67, 67, 67, 67, 97, 1930, 97, 1931, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 45,\n  /* 24580 */ 45, 45, 45, 45, 67, 67, 67, 67, 1576, 67, 67, 67, 67, 1580, 67, 67, 0, 97, 97, 1938, 97, 0, 0, 0, 97, 97,\n  /* 24606 */ 97, 97, 97, 97, 45, 45, 45, 699, 45, 45, 45, 704, 45, 45, 45, 45, 45, 45, 45, 45, 987, 45, 45, 45, 45, 45,\n  /* 24632 */ 45, 45, 67, 67, 97, 97, 97, 97, 0, 0, 97, 97, 97, 2006, 97, 97, 97, 97, 0, 45, 1533, 45, 45, 45, 45, 45,\n  /* 24658 */ 45, 45, 45, 45, 1416, 45, 45, 45, 45, 45, 45, 45, 45, 722, 723, 45, 45, 45, 45, 45, 45, 2045, 67, 67, 67,\n  /* 24683 */ 2047, 0, 0, 97, 97, 97, 2051, 45, 45, 67, 67, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45,\n  /* 24710 */ 409, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1957, 45, 67, 67, 67, 67, 67, 1836, 97, 97, 45, 67, 0, 97, 45,\n  /* 24735 */ 67, 0, 97, 45, 67, 0, 97, 45, 45, 67, 67, 67, 1761, 67, 67, 67, 1764, 67, 67, 67, 67, 67, 67, 67, 494, 67,\n  /* 24761 */ 67, 67, 67, 67, 67, 67, 67, 67, 787, 67, 67, 67, 67, 67, 67, 45, 45, 420, 45, 45, 422, 45, 45, 425, 45,\n  /* 24786 */ 45, 45, 45, 45, 45, 45, 387, 45, 45, 45, 45, 397, 45, 45, 45, 67, 460, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 24812 */ 67, 67, 67, 67, 67, 515, 67, 485, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 498, 67, 67, 67, 67,\n  /* 24838 */ 67, 97, 0, 2039, 97, 97, 97, 97, 97, 45, 45, 45, 45, 1426, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 24864 */ 1689, 67, 67, 67, 97, 557, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 612, 97, 582, 97, 97,\n  /* 24889 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 595, 97, 97, 97, 97, 97, 896, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 24915 */ 97, 97, 885, 97, 97, 97, 97, 97, 45, 939, 45, 45, 45, 45, 943, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 24940 */ 1916, 67, 67, 67, 67, 67, 45, 67, 67, 67, 67, 67, 67, 67, 1015, 67, 67, 67, 67, 1019, 67, 67, 67, 67, 67,\n  /* 24965 */ 67, 1271, 67, 67, 67, 67, 67, 67, 1277, 67, 67, 67, 67, 67, 67, 1287, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 24990 */ 67, 804, 67, 67, 67, 67, 67, 1077, 67, 67, 67, 67, 67, 67, 67, 37689, 0, 25403, 0, 66365, 0, 0, 0, 0, 0,\n  /* 25015 */ 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2437120, 2170880, 2170880, 2170880, 2170880,\n  /* 25028 */ 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2543616, 2170880, 2170880, 2170880,\n  /* 25039 */ 2170880, 2170880, 2629632, 1169, 97, 1171, 97, 97, 97, 97, 97, 97, 97, 12288, 0, 925, 0, 1179, 0, 0, 0, 0,\n  /* 25061 */ 925, 41606, 0, 0, 0, 0, 45, 45, 45, 45, 936, 45, 45, 67, 67, 214, 67, 220, 67, 67, 233, 67, 243, 67, 248,\n  /* 25086 */ 67, 67, 67, 67, 67, 67, 1298, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 1617, 97, 0, 0, 0, 45,\n  /* 25114 */ 45, 45, 1183, 45, 45, 45, 45, 45, 45, 45, 45, 45, 393, 45, 45, 45, 45, 45, 45, 67, 67, 1243, 67, 67, 67,\n  /* 25139 */ 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1074, 67, 67, 1281, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 25164 */ 67, 67, 67, 67, 776, 1323, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 907, 45, 1412, 45,\n  /* 25189 */ 45, 45, 45, 45, 45, 45, 1418, 45, 45, 45, 45, 45, 45, 686, 45, 45, 45, 690, 45, 45, 695, 45, 45, 67, 67,\n  /* 25214 */ 67, 67, 67, 1465, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 1712, 97, 97, 97, 97, 1741, 97,\n  /* 25239 */ 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 426, 45, 45, 45, 45, 45, 45, 67, 67, 67, 1924, 67, 67, 67, 67,\n  /* 25265 */ 67, 97, 97, 97, 97, 97, 0, 0, 97, 97, 1983, 97, 97, 45, 45, 1987, 45, 1988, 45, 0, 97, 97, 97, 97, 0, 0,\n  /* 25291 */ 0, 1942, 97, 97, 97, 97, 97, 45, 45, 45, 700, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 711, 45, 45, 153,\n  /* 25316 */ 45, 45, 166, 45, 176, 45, 181, 45, 45, 188, 191, 196, 45, 204, 255, 258, 263, 67, 271, 67, 67, 0, 37139,\n  /* 25339 */ 24853, 0, 0, 0, 282, 41098, 65820, 97, 97, 97, 294, 97, 300, 97, 97, 313, 97, 323, 97, 328, 97, 97, 335,\n  /* 25362 */ 338, 343, 97, 351, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 356, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 41098, 0,\n  /* 25388 */ 140, 45, 45, 45, 45, 1404, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1411, 67, 67, 486, 67, 67, 67, 67, 67,\n  /* 25413 */ 67, 67, 67, 67, 67, 67, 67, 67, 1251, 67, 67, 501, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 513,\n  /* 25438 */ 67, 67, 67, 67, 67, 67, 1443, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1263, 67, 67, 67, 67, 67, 97, 97,\n  /* 25463 */ 583, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1526, 97, 598, 97, 97, 97, 97, 97, 97, 97,\n  /* 25488 */ 97, 97, 97, 97, 97, 610, 97, 97, 0, 97, 97, 1796, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 1744,\n  /* 25513 */ 45, 45, 45, 369, 0, 651, 45, 653, 45, 654, 45, 656, 45, 45, 45, 660, 45, 45, 45, 45, 1558, 45, 45, 45, 45,\n  /* 25538 */ 45, 45, 45, 45, 1566, 45, 45, 681, 45, 683, 45, 45, 45, 45, 45, 45, 45, 45, 691, 692, 694, 45, 45, 45,\n  /* 25562 */ 716, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 709, 45, 45, 712, 45, 714, 45, 45, 45, 718, 45, 45,\n  /* 25587 */ 45, 45, 45, 45, 45, 726, 45, 45, 45, 733, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 25613 */ 1691, 67, 67, 747, 67, 67, 67, 67, 67, 67, 67, 67, 67, 760, 67, 67, 67, 0, 0, 0, 0, 0, 0, 97, 1613, 97,\n  /* 25639 */ 97, 97, 97, 97, 97, 1509, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 1179, 0, 45, 45, 45, 45, 67, 764, 67, 67,\n  /* 25665 */ 67, 67, 768, 67, 770, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 0, 1977, 67, 778, 779, 781,\n  /* 25690 */ 67, 67, 67, 67, 67, 67, 788, 789, 67, 67, 792, 793, 67, 67, 67, 813, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 25715 */ 824, 37689, 544, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 0, 836, 97, 838, 97, 839, 97, 841, 97, 97,\n  /* 25736 */ 97, 845, 97, 97, 97, 97, 97, 97, 97, 97, 97, 858, 97, 97, 0, 1728, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97,\n  /* 25762 */ 97, 97, 97, 97, 45, 1802, 45, 97, 97, 862, 97, 97, 97, 97, 866, 97, 868, 97, 97, 97, 97, 97, 97, 0, 0, 97,\n  /* 25788 */ 97, 1788, 97, 97, 97, 0, 0, 97, 97, 876, 877, 879, 97, 97, 97, 97, 97, 97, 886, 887, 97, 97, 890, 891, 97,\n  /* 25813 */ 97, 97, 97, 97, 97, 97, 899, 97, 97, 97, 903, 97, 97, 97, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97,\n  /* 25839 */ 1646, 97, 97, 97, 97, 911, 97, 97, 97, 97, 97, 97, 97, 97, 97, 922, 923, 45, 955, 45, 957, 45, 45, 45, 45,\n  /* 25864 */ 45, 45, 45, 45, 45, 45, 45, 45, 195, 45, 45, 45, 45, 45, 981, 982, 45, 45, 45, 45, 45, 45, 989, 45, 45,\n  /* 25889 */ 45, 45, 45, 170, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 411, 45, 45, 45, 45, 45, 67, 1023, 67, 67, 67,\n  /* 25914 */ 67, 67, 67, 1031, 67, 1033, 67, 67, 67, 67, 67, 67, 67, 817, 819, 67, 67, 67, 67, 67, 37689, 544, 67,\n  /* 25937 */ 1065, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 516, 67, 67, 1078, 67, 67, 1081, 1082, 67,\n  /* 25961 */ 67, 37689, 0, 25403, 0, 66365, 0, 0, 0, 0, 0, 0, 0, 0, 2171166, 2171166, 2171166, 2171166, 2171166,\n  /* 25980 */ 2437406, 2171166, 2171166, 97, 1115, 97, 1117, 97, 97, 97, 97, 97, 97, 1125, 97, 1127, 97, 97, 97, 0, 97,\n  /* 26001 */ 97, 97, 0, 97, 97, 97, 97, 1644, 97, 97, 97, 0, 97, 97, 97, 0, 97, 97, 1642, 97, 97, 97, 97, 97, 97, 625,\n  /* 26027 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 316, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1159, 97, 97, 97, 97, 97, 97,\n  /* 26053 */ 97, 97, 97, 97, 97, 97, 97, 1502, 97, 97, 97, 97, 97, 1172, 97, 97, 1175, 1176, 97, 97, 12288, 0, 925, 0,\n  /* 26077 */ 1179, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 45, 45, 935, 45, 45, 45, 1233, 45, 45, 45, 1236, 45, 45, 45,\n  /* 26103 */ 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1873, 67, 67, 45, 45, 1218, 45, 45, 45, 1223, 45, 45, 45, 45, 45,\n  /* 26128 */ 45, 45, 1230, 45, 45, 67, 67, 215, 219, 222, 67, 230, 67, 67, 244, 246, 249, 67, 67, 67, 67, 67, 67, 1882,\n  /* 26152 */ 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 1904, 45, 1905, 45, 67, 67, 67, 67, 67, 1258, 67,\n  /* 26177 */ 1260, 67, 67, 67, 67, 67, 67, 67, 67, 67, 495, 67, 67, 67, 67, 67, 67, 67, 67, 1283, 67, 67, 67, 67, 67,\n  /* 26202 */ 67, 67, 1290, 67, 67, 67, 67, 67, 67, 67, 818, 67, 67, 67, 67, 67, 67, 37689, 544, 67, 67, 1295, 67, 67,\n  /* 26226 */ 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 2174976, 0, 0, 97, 97, 97, 1326, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 26253 */ 97, 97, 97, 97, 97, 1514, 97, 97, 97, 97, 97, 1338, 97, 1340, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 26278 */ 1500, 97, 97, 1503, 97, 1363, 97, 97, 97, 97, 97, 97, 97, 1370, 97, 97, 97, 97, 97, 97, 97, 563, 97, 97,\n  /* 26302 */ 97, 97, 97, 97, 578, 97, 1375, 97, 97, 97, 97, 97, 97, 97, 97, 0, 1179, 0, 45, 45, 45, 45, 685, 45, 45,\n  /* 26327 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 1003, 45, 45, 45, 45, 67, 67, 67, 1463, 67, 67, 67, 67, 67, 67, 67,\n  /* 26352 */ 67, 67, 67, 67, 67, 67, 1778, 97, 97, 97, 97, 97, 1518, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 26377 */ 609, 97, 97, 97, 45, 1542, 45, 45, 45, 45, 45, 45, 45, 1548, 45, 45, 45, 45, 45, 1554, 45, 1570, 1571, 45,\n  /* 26401 */ 67, 67, 67, 67, 67, 67, 1578, 67, 67, 67, 67, 67, 67, 67, 1055, 67, 67, 67, 67, 67, 1061, 67, 67, 1582,\n  /* 26425 */ 67, 67, 67, 67, 67, 67, 67, 1588, 67, 67, 67, 67, 67, 1594, 67, 67, 67, 67, 67, 97, 2038, 0, 97, 97, 97,\n  /* 26450 */ 97, 97, 2044, 45, 45, 45, 995, 45, 45, 45, 45, 1000, 45, 45, 45, 45, 45, 45, 45, 1809, 45, 1811, 45, 45,\n  /* 26474 */ 45, 45, 45, 67, 1610, 1611, 67, 1476, 0, 1478, 0, 1480, 0, 97, 97, 97, 97, 97, 97, 1618, 1647, 1649, 97,\n  /* 26497 */ 97, 97, 1652, 97, 1654, 1655, 97, 0, 45, 45, 45, 1658, 45, 45, 67, 67, 216, 67, 67, 67, 67, 234, 67, 67,\n  /* 26521 */ 67, 67, 252, 254, 1845, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 945, 45, 947, 45, 45,\n  /* 26546 */ 45, 45, 45, 67, 67, 67, 67, 67, 1881, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 1902, 45, 45, 45,\n  /* 26572 */ 45, 45, 45, 1908, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1921, 67, 67,\n  /* 26597 */ 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 0, 97, 1937, 97, 97, 1940, 0, 0, 97, 97, 97,\n  /* 26624 */ 97, 97, 97, 1947, 1948, 1949, 45, 45, 45, 1952, 45, 1954, 45, 45, 45, 45, 1959, 1960, 1961, 67, 67, 67,\n  /* 26646 */ 67, 67, 67, 1455, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 757, 67, 67, 67, 67, 67, 67, 1964, 67, 1966, 67,\n  /* 26671 */ 67, 67, 67, 1971, 1972, 1973, 97, 0, 0, 0, 97, 97, 1104, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 884, 97,\n  /* 26696 */ 97, 97, 889, 97, 97, 1978, 97, 0, 0, 1981, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 736, 45, 67, 67, 67,\n  /* 26721 */ 67, 67, 67, 67, 67, 67, 67, 67, 1018, 67, 67, 67, 45, 67, 67, 67, 67, 0, 2049, 97, 97, 97, 97, 45, 45, 67,\n  /* 26747 */ 67, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 933, 45, 45, 45, 45, 1234, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 26774 */ 45, 67, 97, 97, 288, 97, 97, 97, 97, 97, 97, 317, 97, 97, 97, 97, 97, 97, 0, 0, 97, 1787, 97, 97, 97, 97,\n  /* 26800 */ 0, 0, 45, 45, 378, 45, 45, 45, 45, 45, 390, 45, 45, 45, 45, 45, 45, 45, 424, 45, 45, 45, 431, 433, 45, 45,\n  /* 26826 */ 45, 67, 1050, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 518, 67, 97, 97, 97, 1144, 97, 97,\n  /* 26851 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 632, 97, 97, 97, 97, 97, 97, 97, 1367, 97, 97, 97, 97, 97, 97, 97,\n  /* 26877 */ 97, 97, 97, 97, 855, 97, 97, 97, 97, 67, 97, 97, 97, 97, 97, 97, 1837, 0, 97, 97, 97, 97, 97, 0, 0, 0,\n  /* 26903 */ 1897, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 1208, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 724, 45, 45,\n  /* 26928 */ 45, 45, 45, 97, 2010, 45, 45, 45, 45, 45, 45, 2016, 67, 67, 67, 67, 67, 67, 2022, 45, 2046, 67, 67, 67, 0,\n  /* 26953 */ 0, 2050, 97, 97, 97, 45, 45, 67, 67, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 932, 45, 45, 45, 45, 45, 1222,\n  /* 26979 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1227, 45, 45, 45, 45, 45, 133, 0, 0, 0, 37, 110630, 0, 0, 0,\n  /* 27004 */ 114730, 106539, 41098, 45, 45, 45, 45, 701, 702, 45, 45, 705, 706, 45, 45, 45, 45, 45, 45, 703, 45, 45,\n  /* 27026 */ 45, 45, 45, 45, 45, 45, 45, 719, 45, 45, 45, 45, 45, 725, 45, 45, 45, 369, 649, 45, 45, 45, 45, 45, 45,\n  /* 27051 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 1216, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 834, 97, 97, 97, 97,\n  /* 27074 */ 97, 97, 97, 1342, 97, 97, 97, 97, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 1799, 97, 97, 45, 45, 45,\n  /* 27100 */ 1569, 45, 45, 45, 1572, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 1306, 0, 67, 67, 67, 1598,\n  /* 27125 */ 67, 67, 67, 67, 67, 67, 67, 67, 1606, 67, 67, 1609, 97, 97, 97, 1650, 97, 97, 1653, 97, 97, 97, 0, 45, 45,\n  /* 27150 */ 1657, 45, 45, 45, 1206, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1421, 45, 45, 45, 1703, 67, 67,\n  /* 27174 */ 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 1711, 97, 97, 0, 1895, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45,\n  /* 27200 */ 45, 958, 45, 960, 45, 45, 45, 45, 45, 45, 45, 45, 1913, 45, 45, 1915, 67, 67, 67, 67, 67, 67, 67, 466, 67,\n  /* 27225 */ 67, 67, 67, 67, 67, 481, 67, 45, 1749, 45, 45, 45, 45, 45, 45, 45, 45, 1755, 45, 45, 45, 45, 45, 173, 45,\n  /* 27250 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 974, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1773, 67, 67, 67, 67, 67,\n  /* 27276 */ 67, 67, 97, 97, 97, 97, 1886, 0, 0, 0, 97, 97, 67, 2035, 2036, 67, 67, 97, 0, 0, 97, 2041, 2042, 97, 97,\n  /* 27301 */ 45, 45, 45, 45, 1662, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1397, 45, 45, 45, 45, 151, 45, 45, 45,\n  /* 27326 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 437, 205, 45, 67, 67, 67, 218, 67, 67, 67, 67, 67, 67, 67,\n  /* 27352 */ 67, 67, 67, 67, 1047, 67, 67, 67, 67, 97, 97, 97, 97, 298, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 27377 */ 870, 97, 97, 97, 97, 97, 97, 97, 97, 352, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 0, 0, 0, 0, 0, 0,\n  /* 27404 */ 365, 0, 41098, 0, 140, 45, 45, 45, 45, 45, 1427, 45, 45, 67, 67, 67, 67, 67, 67, 67, 1435, 520, 67, 67,\n  /* 27428 */ 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1037, 617, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 27454 */ 97, 97, 97, 97, 923, 45, 1232, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1919,\n  /* 27479 */ 67, 1759, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1021, 45, 154, 45, 162, 45, 45, 45,\n  /* 27504 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 964, 45, 45, 45, 206, 45, 67, 67, 67, 67, 221, 67, 229, 67, 67, 67,\n  /* 27529 */ 67, 67, 67, 67, 67, 530, 67, 67, 67, 67, 67, 67, 67, 67, 755, 67, 67, 67, 67, 67, 67, 67, 67, 785, 67, 67,\n  /* 27555 */ 67, 67, 67, 67, 67, 67, 802, 67, 67, 67, 807, 67, 67, 67, 97, 97, 97, 97, 353, 97, 0, 53264, 0, 18, 18,\n  /* 27580 */ 24, 24, 0, 28, 28, 0, 0, 0, 0, 0, 0, 366, 0, 0, 0, 140, 2170880, 2170880, 2170880, 2416640, 402, 45, 45,\n  /* 27603 */ 45, 45, 45, 45, 45, 410, 45, 45, 45, 45, 45, 45, 45, 674, 45, 45, 45, 45, 45, 45, 45, 45, 389, 45, 394,\n  /* 27628 */ 45, 45, 398, 45, 45, 45, 45, 441, 45, 45, 45, 45, 45, 447, 45, 45, 45, 454, 45, 45, 67, 67, 67, 67, 67,\n  /* 27653 */ 67, 67, 67, 67, 67, 67, 1768, 67, 67, 67, 67, 67, 488, 67, 67, 67, 67, 67, 67, 67, 496, 67, 67, 67, 67,\n  /* 27678 */ 67, 67, 67, 1774, 67, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 27705 */ 67, 67, 523, 67, 67, 527, 67, 67, 67, 67, 67, 533, 67, 67, 67, 540, 97, 97, 97, 585, 97, 97, 97, 97, 97,\n  /* 27730 */ 97, 97, 593, 97, 97, 97, 97, 97, 97, 1784, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0,\n  /* 27757 */ 0, 18, 18, 24, 24, 0, 28, 28, 97, 97, 620, 97, 97, 624, 97, 97, 97, 97, 97, 630, 97, 97, 97, 637, 713, 45,\n  /* 27783 */ 45, 45, 45, 45, 45, 721, 45, 45, 45, 45, 45, 45, 45, 45, 1197, 45, 45, 45, 45, 45, 45, 45, 45, 730, 732,\n  /* 27808 */ 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1581, 67, 45, 67, 67, 67, 67, 1012, 67, 67,\n  /* 27833 */ 67, 67, 67, 67, 67, 67, 67, 67, 67, 1059, 67, 67, 67, 67, 67, 1024, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 27858 */ 67, 67, 67, 67, 67, 775, 67, 67, 67, 67, 1066, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 479, 67,\n  /* 27883 */ 67, 67, 67, 67, 67, 1080, 67, 67, 67, 67, 37689, 0, 25403, 0, 66365, 0, 0, 0, 0, 0, 0, 0, 287, 0, 0, 0,\n  /* 27909 */ 287, 0, 2379776, 2170880, 2170880, 97, 97, 97, 1118, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 920,\n  /* 27931 */ 97, 97, 0, 0, 0, 0, 45, 1181, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 432, 45, 45, 45, 45, 45, 45,\n  /* 27957 */ 1219, 45, 45, 45, 45, 45, 45, 1226, 45, 45, 45, 45, 45, 45, 959, 45, 45, 45, 45, 45, 45, 45, 45, 45, 184,\n  /* 27982 */ 45, 45, 45, 45, 202, 45, 1241, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1266, 67, 1268,\n  /* 28007 */ 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1279, 67, 67, 67, 67, 67, 272, 67, 0, 37139, 24853, 0, 0,\n  /* 28032 */ 0, 0, 41098, 65820, 67, 67, 67, 67, 67, 1286, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1293, 67, 67, 67, 1296,\n  /* 28056 */ 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 281, 94, 0, 0, 97, 97, 97, 1366, 97, 97, 97, 97, 97, 97, 97,\n  /* 28083 */ 97, 97, 1373, 97, 97, 18, 0, 139621, 0, 0, 0, 0, 0, 0, 364, 0, 0, 367, 0, 97, 1376, 97, 97, 97, 97, 97,\n  /* 28109 */ 97, 97, 0, 0, 0, 45, 45, 1384, 45, 45, 67, 208, 67, 67, 67, 67, 67, 67, 237, 67, 67, 67, 67, 67, 67, 67,\n  /* 28135 */ 1069, 1070, 67, 67, 67, 67, 67, 67, 67, 0, 37140, 24854, 0, 0, 0, 0, 41098, 65821, 45, 1423, 45, 45, 45,\n  /* 28158 */ 45, 45, 45, 67, 67, 1431, 67, 67, 67, 67, 67, 67, 67, 1083, 37689, 0, 25403, 0, 66365, 0, 0, 0, 1436, 67,\n  /* 28182 */ 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1830, 67, 1452, 1453, 67, 67, 67, 67, 1456, 67,\n  /* 28206 */ 67, 67, 67, 67, 67, 67, 67, 67, 771, 67, 67, 67, 67, 67, 67, 1461, 67, 67, 67, 1464, 67, 1466, 67, 67, 67,\n  /* 28231 */ 67, 67, 67, 1470, 67, 67, 67, 67, 67, 67, 1587, 67, 67, 67, 67, 67, 67, 67, 67, 1595, 1489, 97, 97, 97,\n  /* 28255 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1129, 97, 1505, 1506, 97, 97, 97, 97, 1510, 97, 97, 97,\n  /* 28279 */ 97, 97, 97, 97, 97, 97, 1163, 1164, 97, 97, 97, 97, 97, 1516, 97, 97, 97, 1519, 97, 1521, 97, 97, 97, 97,\n  /* 28303 */ 97, 97, 1525, 97, 97, 18, 0, 139621, 0, 0, 0, 0, 0, 0, 364, 0, 0, 367, 41606, 67, 67, 67, 67, 67, 1586,\n  /* 28328 */ 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1276, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1600, 67, 67, 67,\n  /* 28353 */ 67, 67, 67, 67, 67, 67, 67, 67, 1301, 0, 0, 0, 1307, 97, 97, 1620, 97, 97, 97, 97, 97, 97, 97, 1627, 97,\n  /* 28378 */ 97, 97, 97, 97, 97, 913, 97, 97, 97, 97, 919, 97, 97, 97, 0, 97, 97, 97, 1781, 97, 97, 0, 0, 97, 97, 97,\n  /* 28404 */ 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 1792, 1860, 45, 1862, 1863, 45, 1865, 45, 67, 67, 67, 67, 67,\n  /* 28429 */ 67, 67, 67, 1875, 67, 1877, 1878, 67, 1880, 67, 97, 97, 97, 97, 97, 1887, 0, 1889, 97, 97, 18, 0, 139621,\n  /* 28452 */ 0, 0, 0, 0, 0, 0, 364, 237568, 0, 367, 0, 97, 1893, 0, 0, 0, 97, 1898, 1899, 97, 1901, 97, 45, 45, 45, 45,\n  /* 28478 */ 45, 2014, 45, 67, 67, 67, 67, 67, 2020, 67, 97, 1989, 45, 1990, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1996,\n  /* 28502 */ 67, 1997, 67, 67, 67, 67, 67, 273, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 67, 67, 97, 97, 97, 97,\n  /* 28526 */ 0, 0, 97, 97, 2005, 0, 97, 2007, 97, 97, 18, 0, 139621, 0, 0, 0, 642, 0, 133, 364, 0, 0, 367, 41606, 0,\n  /* 28551 */ 97, 97, 2056, 2057, 0, 2059, 45, 67, 0, 97, 45, 67, 0, 97, 45, 45, 67, 209, 67, 67, 67, 223, 67, 67, 67,\n  /* 28576 */ 67, 67, 67, 67, 67, 67, 786, 67, 67, 67, 791, 67, 67, 45, 45, 940, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 28602 */ 45, 45, 45, 45, 727, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 1016, 67, 67, 67, 67, 67, 67, 67, 67, 37689,\n  /* 28627 */ 0, 25403, 0, 66365, 0, 0, 0, 133, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 142, 45,\n  /* 28650 */ 45, 67, 210, 67, 67, 67, 225, 67, 67, 239, 67, 67, 67, 250, 67, 67, 67, 67, 67, 464, 67, 67, 67, 67, 67,\n  /* 28675 */ 476, 67, 67, 67, 67, 67, 67, 67, 1709, 67, 67, 67, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 1843,\n  /* 28701 */ 0, 67, 259, 67, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 289, 97, 97, 97, 303,\n  /* 28725 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 901, 97, 97, 97, 97, 97, 339, 97, 97, 97, 97, 97, 0, 53264, 0, 18,\n  /* 28751 */ 18, 24, 24, 0, 28, 28, 0, 358, 0, 0, 0, 0, 0, 0, 41098, 0, 140, 45, 45, 45, 45, 45, 1953, 45, 1955, 45,\n  /* 28777 */ 45, 45, 67, 67, 67, 67, 67, 67, 67, 1687, 1688, 67, 67, 67, 67, 45, 45, 405, 45, 45, 45, 45, 45, 45, 45,\n  /* 28802 */ 45, 45, 45, 45, 45, 45, 45, 1203, 45, 458, 67, 67, 67, 67, 67, 67, 67, 67, 67, 470, 477, 67, 67, 67, 67,\n  /* 28827 */ 67, 67, 67, 1970, 97, 97, 97, 1974, 0, 0, 0, 97, 1103, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1372,\n  /* 28852 */ 97, 97, 97, 97, 67, 522, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 536, 67, 67, 67, 67, 67, 67, 1696,\n  /* 28877 */ 67, 67, 67, 67, 67, 67, 67, 1701, 67, 555, 97, 97, 97, 97, 97, 97, 97, 97, 97, 567, 574, 97, 97, 97, 97,\n  /* 28902 */ 97, 301, 97, 309, 97, 97, 97, 97, 97, 97, 97, 97, 97, 900, 97, 97, 97, 905, 97, 97, 97, 619, 97, 97, 97,\n  /* 28927 */ 97, 97, 97, 97, 97, 97, 97, 97, 633, 97, 97, 18, 0, 139621, 0, 0, 362, 0, 0, 0, 364, 0, 0, 367, 41606,\n  /* 28952 */ 369, 649, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 663, 664, 67, 67, 67, 67, 750, 751, 67, 67, 67,\n  /* 28977 */ 67, 758, 67, 67, 67, 67, 67, 67, 67, 1272, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1057, 1058, 67, 67, 67, 67,\n  /* 29002 */ 67, 67, 67, 67, 797, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 512, 67, 67, 67, 97, 97, 97, 97, 895,\n  /* 29028 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 902, 97, 97, 97, 97, 67, 67, 1051, 67, 67, 67, 67, 67, 67, 67,\n  /* 29054 */ 67, 67, 67, 67, 1062, 67, 67, 67, 67, 67, 491, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1302, 0, 0, 0,\n  /* 29080 */ 1308, 97, 97, 97, 97, 1145, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1139, 97, 97, 97, 97, 1156, 97,\n  /* 29104 */ 97, 97, 97, 97, 97, 1161, 97, 97, 97, 97, 97, 1166, 97, 97, 18, 640, 139621, 0, 641, 0, 0, 0, 0, 364, 0,\n  /* 29129 */ 0, 367, 41606, 67, 67, 67, 67, 1257, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 1305, 0, 0, 97, 97,\n  /* 29155 */ 1337, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1630, 97, 67, 1474, 67, 67, 0, 0, 0, 0, 0,\n  /* 29181 */ 0, 0, 0, 0, 0, 0, 0, 0, 2380062, 2171166, 2171166, 97, 1529, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 29205 */ 45, 45, 45, 1228, 45, 45, 45, 45, 67, 67, 67, 67, 1707, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0,\n  /* 29231 */ 0, 97, 1891, 1739, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1198, 45, 1200, 45, 45, 45,\n  /* 29256 */ 45, 97, 97, 1894, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 672, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 29282 */ 45, 45, 45, 1420, 45, 45, 45, 45, 67, 67, 1965, 67, 1967, 67, 67, 67, 97, 97, 97, 97, 0, 1976, 0, 97, 97,\n  /* 29307 */ 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 97, 97, 1979, 0, 0, 97, 1982, 97, 97, 97, 1986, 45, 45,\n  /* 29333 */ 45, 45, 45, 735, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1770, 67, 67, 2000, 97, 97,\n  /* 29358 */ 97, 2002, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 1798, 97, 97, 97, 45, 45, 45, 2034, 67, 67, 67, 67,\n  /* 29383 */ 97, 0, 0, 2040, 97, 97, 97, 97, 45, 45, 45, 45, 1752, 45, 45, 45, 1753, 1754, 45, 45, 45, 45, 45, 45, 383,\n  /* 29408 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 675, 45, 45, 45, 45, 45, 45, 438, 45, 45, 45, 45, 45, 445, 45, 45, 45,\n  /* 29434 */ 45, 45, 45, 45, 45, 67, 1430, 67, 67, 67, 67, 67, 67, 67, 67, 67, 524, 67, 67, 67, 67, 67, 531, 67, 67,\n  /* 29459 */ 67, 67, 67, 67, 67, 67, 37689, 0, 25403, 0, 66365, 0, 0, 1096, 97, 97, 97, 621, 97, 97, 97, 97, 97, 628,\n  /* 29483 */ 97, 97, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 356, 28, 28, 665, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 29509 */ 676, 45, 45, 45, 45, 45, 942, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 707, 708, 45, 45, 45, 45, 763, 67,\n  /* 29534 */ 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 809, 810, 67, 67, 67, 67, 783, 67, 67, 67, 67, 67,\n  /* 29560 */ 67, 67, 67, 67, 67, 67, 0, 1303, 0, 0, 0, 97, 861, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 29587 */ 613, 97, 45, 45, 956, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1215, 45, 67, 67, 67, 67,\n  /* 29612 */ 1027, 67, 67, 67, 67, 1032, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 0, 25403, 0, 66365, 0, 0, 1097, 1064,\n  /* 29635 */ 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1075, 67, 1098, 0, 0, 97, 97, 97, 97, 97, 97,\n  /* 29661 */ 97, 97, 97, 97, 97, 97, 97, 331, 97, 97, 97, 97, 1158, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 29687 */ 594, 97, 97, 1309, 0, 0, 0, 1315, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 29715 */ 97, 97, 1374, 97, 45, 45, 1543, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1240, 67, 67,\n  /* 29739 */ 1583, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1252, 67, 97, 97, 97, 1635, 97, 97, 97, 0,\n  /* 29764 */ 97, 97, 97, 97, 97, 97, 97, 97, 1800, 97, 45, 45, 45, 97, 97, 1793, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 29789 */ 97, 45, 45, 45, 1743, 45, 45, 45, 1746, 45, 0, 97, 97, 97, 97, 97, 1851, 97, 45, 45, 45, 45, 1856, 45, 45,\n  /* 29814 */ 45, 45, 1864, 45, 45, 67, 67, 1869, 67, 67, 67, 67, 1874, 67, 0, 97, 97, 45, 67, 2058, 97, 45, 67, 0, 97,\n  /* 29839 */ 45, 67, 0, 97, 45, 45, 67, 211, 67, 67, 67, 67, 67, 67, 240, 67, 67, 67, 67, 67, 67, 67, 1444, 67, 67, 67,\n  /* 29865 */ 67, 67, 67, 67, 67, 67, 509, 67, 67, 67, 67, 67, 67, 67, 67, 67, 268, 67, 67, 67, 0, 37139, 24853, 0, 0,\n  /* 29890 */ 0, 0, 41098, 65820, 97, 97, 290, 97, 97, 97, 305, 97, 97, 319, 97, 97, 97, 330, 97, 97, 18, 640, 139621,\n  /* 29913 */ 0, 641, 0, 0, 0, 0, 364, 0, 643, 367, 41606, 97, 97, 348, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28,\n  /* 29939 */ 28, 139621, 0, 0, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 45, 45, 45, 380, 45, 45, 45, 45, 45, 45, 395,\n  /* 29963 */ 45, 45, 45, 400, 369, 0, 45, 45, 45, 45, 45, 45, 45, 45, 658, 45, 45, 45, 45, 45, 972, 45, 45, 45, 45, 45,\n  /* 29989 */ 45, 45, 45, 45, 45, 427, 45, 45, 45, 45, 45, 745, 67, 67, 67, 67, 67, 67, 67, 67, 756, 67, 67, 67, 67, 67,\n  /* 30015 */ 67, 67, 67, 37689, 1086, 25403, 1090, 66365, 1094, 0, 0, 97, 843, 97, 97, 97, 97, 97, 97, 97, 97, 854, 97,\n  /* 30038 */ 97, 97, 97, 97, 97, 1121, 97, 97, 97, 97, 1126, 97, 97, 97, 97, 45, 980, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 30063 */ 45, 45, 45, 45, 45, 45, 45, 1400, 45, 67, 67, 67, 1011, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0,\n  /* 30088 */ 1304, 0, 0, 0, 1190, 45, 45, 1193, 1194, 45, 45, 45, 45, 45, 1199, 45, 1201, 45, 45, 45, 45, 1911, 45, 45,\n  /* 30112 */ 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 1579, 67, 67, 67, 67, 45, 1205, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 30137 */ 1211, 45, 45, 45, 45, 45, 984, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1550, 45, 45, 45, 45, 45, 1217,\n  /* 30162 */ 45, 45, 45, 45, 45, 45, 1225, 45, 45, 45, 45, 1229, 45, 45, 45, 1388, 45, 45, 45, 45, 45, 45, 1396, 45,\n  /* 30186 */ 45, 45, 45, 45, 444, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 1574, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 30212 */ 67, 1590, 67, 67, 67, 67, 67, 1254, 67, 67, 67, 67, 67, 1259, 67, 1261, 67, 67, 67, 67, 1265, 67, 67, 67,\n  /* 30236 */ 67, 67, 67, 1708, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 67, 67, 67, 67,\n  /* 30263 */ 1285, 67, 67, 67, 67, 1289, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 1087, 25403, 1091, 66365, 1095, 0, 0,\n  /* 30285 */ 97, 97, 97, 97, 1339, 97, 1341, 97, 97, 97, 97, 1345, 97, 97, 97, 97, 97, 561, 97, 97, 97, 97, 97, 573,\n  /* 30309 */ 97, 97, 97, 97, 97, 97, 1717, 97, 0, 97, 97, 97, 97, 97, 97, 97, 591, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 30335 */ 1329, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1351, 97, 97, 97, 97, 97, 97, 1357, 97, 97, 97, 97, 97, 588,\n  /* 30360 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 568, 97, 97, 97, 97, 97, 97, 97, 1365, 97, 97, 97, 97, 1369, 97,\n  /* 30385 */ 97, 97, 97, 97, 97, 97, 97, 97, 1356, 97, 97, 97, 97, 97, 97, 45, 45, 1403, 45, 45, 45, 45, 45, 45, 45,\n  /* 30410 */ 45, 45, 45, 45, 45, 45, 45, 1399, 45, 45, 45, 1413, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 30435 */ 45, 1669, 45, 1422, 45, 45, 1425, 45, 45, 1428, 45, 1429, 67, 67, 67, 67, 67, 67, 67, 67, 1468, 67, 67,\n  /* 30458 */ 67, 67, 67, 67, 67, 67, 529, 67, 67, 67, 67, 67, 67, 539, 67, 67, 1475, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 30486 */ 0, 0, 140, 2170880, 2170880, 2170880, 2416640, 97, 97, 1530, 97, 0, 45, 45, 1534, 45, 45, 45, 45, 45, 45,\n  /* 30507 */ 45, 45, 1956, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1599, 67, 67, 1601, 67, 67, 67, 67, 67, 67, 67,\n  /* 30532 */ 67, 67, 803, 67, 67, 67, 67, 67, 67, 1632, 97, 1634, 0, 97, 97, 97, 1640, 97, 97, 97, 1643, 97, 97, 1645,\n  /* 30556 */ 97, 97, 97, 97, 97, 912, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 45, 45, 45, 1660, 1661,\n  /* 30582 */ 45, 45, 45, 45, 1665, 1666, 45, 45, 45, 45, 45, 1670, 1692, 1693, 67, 67, 67, 67, 67, 1697, 67, 67, 67,\n  /* 30605 */ 67, 67, 67, 67, 1702, 97, 97, 1714, 1715, 97, 97, 97, 97, 0, 1721, 1722, 97, 97, 97, 97, 97, 97, 1353, 97,\n  /* 30629 */ 97, 97, 97, 97, 97, 97, 97, 1362, 1726, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 1734, 97, 97, 97, 97, 97,\n  /* 30654 */ 848, 849, 97, 97, 97, 97, 856, 97, 97, 97, 97, 97, 354, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 45, 45,\n  /* 30679 */ 1750, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1681, 45, 0, 1846, 97, 97, 97, 97, 97, 97,\n  /* 30704 */ 45, 45, 1854, 45, 45, 45, 45, 1859, 67, 67, 67, 1879, 67, 67, 97, 97, 1884, 97, 97, 0, 0, 0, 97, 97, 97,\n  /* 30729 */ 1105, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1344, 97, 97, 97, 1347, 97, 1892, 97, 0, 0, 0, 97, 97, 97,\n  /* 30754 */ 1900, 97, 97, 45, 45, 45, 45, 45, 997, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1002, 45, 45, 1005, 1006,\n  /* 30778 */ 45, 67, 67, 67, 67, 67, 1926, 67, 67, 1928, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97,\n  /* 30804 */ 97, 1737, 97, 0, 97, 97, 97, 97, 0, 0, 0, 97, 97, 1944, 97, 97, 1946, 45, 45, 45, 1544, 45, 45, 45, 45,\n  /* 30829 */ 45, 45, 45, 45, 45, 45, 45, 45, 190, 45, 45, 45, 152, 155, 45, 163, 45, 45, 177, 179, 182, 45, 45, 45,\n  /* 30853 */ 193, 197, 45, 45, 45, 1672, 45, 45, 45, 45, 45, 1677, 45, 1679, 45, 45, 45, 45, 996, 45, 45, 45, 45, 45,\n  /* 30877 */ 45, 45, 45, 45, 45, 45, 1212, 45, 45, 45, 45, 67, 260, 264, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0,\n  /* 30902 */ 41098, 65820, 97, 97, 97, 295, 299, 302, 97, 310, 97, 97, 324, 326, 329, 97, 97, 97, 0, 97, 97, 1639, 0,\n  /* 30925 */ 1641, 97, 97, 97, 97, 97, 97, 97, 97, 1511, 97, 97, 97, 97, 97, 97, 97, 97, 1523, 97, 97, 97, 97, 97, 97,\n  /* 30950 */ 97, 97, 1719, 97, 97, 97, 97, 97, 97, 97, 97, 1720, 97, 97, 97, 97, 97, 97, 97, 312, 97, 97, 97, 97, 97,\n  /* 30975 */ 97, 97, 97, 1123, 97, 97, 97, 97, 97, 97, 97, 340, 344, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0,\n  /* 31000 */ 28, 28, 139621, 0, 0, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 45, 373, 375, 419, 45, 45, 45, 45, 45, 45,\n  /* 31024 */ 45, 45, 45, 428, 45, 45, 435, 45, 45, 45, 1751, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1410, 45,\n  /* 31049 */ 45, 45, 67, 67, 67, 505, 67, 67, 67, 67, 67, 67, 67, 67, 67, 514, 67, 67, 67, 67, 67, 67, 1969, 67, 97,\n  /* 31074 */ 97, 97, 97, 0, 0, 0, 97, 97, 45, 67, 0, 97, 45, 67, 0, 97, 2064, 2065, 0, 2066, 45, 521, 67, 67, 67, 67,\n  /* 31100 */ 67, 67, 67, 67, 67, 67, 534, 67, 67, 67, 67, 67, 67, 465, 67, 67, 67, 474, 67, 67, 67, 67, 67, 67, 67,\n  /* 31125 */ 1467, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 1933, 0, 97, 97, 97, 602, 97, 97, 97, 97,\n  /* 31150 */ 97, 97, 97, 97, 97, 611, 97, 97, 18, 640, 139621, 358, 641, 0, 0, 0, 0, 364, 0, 0, 367, 0, 618, 97, 97,\n  /* 31175 */ 97, 97, 97, 97, 97, 97, 97, 97, 631, 97, 97, 97, 97, 97, 881, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 569,\n  /* 31201 */ 97, 97, 97, 97, 97, 369, 0, 45, 652, 45, 45, 45, 45, 45, 657, 45, 45, 45, 45, 45, 45, 1235, 45, 45, 45,\n  /* 31226 */ 45, 45, 45, 45, 45, 67, 67, 67, 1432, 67, 67, 67, 67, 67, 67, 67, 766, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 31251 */ 773, 67, 67, 67, 0, 1305, 0, 1311, 0, 1317, 97, 97, 97, 97, 97, 97, 97, 1624, 97, 97, 97, 97, 97, 97, 97,\n  /* 31276 */ 97, 0, 97, 97, 97, 1724, 97, 97, 97, 777, 67, 67, 782, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 31301 */ 535, 67, 67, 67, 67, 67, 67, 67, 814, 67, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 544, 25403, 546, 70179,\n  /* 31324 */ 0, 0, 66365, 66365, 552, 0, 97, 837, 97, 97, 97, 97, 97, 97, 1496, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 31349 */ 918, 97, 97, 97, 97, 0, 842, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1168, 97, 97, 97,\n  /* 31375 */ 97, 864, 97, 97, 97, 97, 97, 97, 97, 97, 871, 97, 97, 97, 0, 1637, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97,\n  /* 31401 */ 97, 97, 97, 1801, 45, 45, 97, 875, 97, 97, 880, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1151, 1152,\n  /* 31425 */ 97, 97, 97, 67, 67, 67, 1040, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 790, 67, 67, 67, 1180, 0,\n  /* 31450 */ 649, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 200, 45, 45, 67, 67, 67, 1454, 67, 67, 67, 67,\n  /* 31475 */ 67, 67, 67, 67, 67, 67, 67, 67, 806, 67, 67, 67, 0, 0, 0, 1481, 0, 1094, 0, 0, 97, 1483, 97, 97, 97, 97,\n  /* 31501 */ 97, 97, 304, 97, 97, 318, 97, 97, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 97, 97, 97,\n  /* 31526 */ 1507, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1332, 97, 97, 97, 1619, 97, 97, 97, 97, 97, 97, 97,\n  /* 31551 */ 97, 97, 97, 97, 97, 97, 97, 97, 1631, 97, 1633, 97, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 31577 */ 1381, 0, 0, 45, 45, 45, 45, 97, 97, 1727, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 626, 97, 97,\n  /* 31603 */ 97, 97, 97, 97, 636, 45, 45, 1760, 67, 67, 67, 67, 67, 67, 67, 1765, 67, 67, 67, 67, 67, 67, 67, 1299, 67,\n  /* 31628 */ 67, 67, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 1616, 97, 97, 1803, 45, 45, 45, 45, 1807, 45, 45, 45, 45, 45,\n  /* 31654 */ 1813, 45, 45, 45, 67, 67, 1684, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 822, 67, 67, 37689, 544, 67,\n  /* 31678 */ 67, 1818, 67, 67, 67, 67, 1822, 67, 67, 67, 67, 67, 1828, 67, 67, 67, 67, 67, 97, 0, 0, 97, 97, 97, 97,\n  /* 31703 */ 97, 45, 45, 45, 2012, 2013, 45, 45, 67, 67, 67, 2018, 2019, 67, 67, 97, 67, 97, 97, 97, 1833, 97, 97, 0,\n  /* 31727 */ 0, 97, 97, 1840, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 1733, 97, 1735, 97, 97, 97, 0, 97, 97, 97, 1849, 97,\n  /* 31753 */ 97, 97, 45, 45, 45, 45, 45, 1857, 45, 45, 45, 1910, 45, 1912, 45, 45, 1914, 45, 67, 67, 67, 67, 67, 67,\n  /* 31777 */ 67, 67, 67, 67, 1017, 67, 67, 1020, 67, 45, 1861, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1872, 67, 67,\n  /* 31801 */ 67, 67, 67, 67, 752, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1446, 67, 67, 67, 67, 67, 1876, 67, 67, 67,\n  /* 31826 */ 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 1890, 97, 97, 97, 97, 97, 1134, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 31852 */ 97, 570, 97, 97, 97, 97, 580, 1935, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 1906,\n  /* 31878 */ 45, 67, 67, 67, 67, 2048, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 931, 45, 45,\n  /* 31905 */ 45, 45, 45, 45, 1674, 45, 1676, 45, 45, 45, 45, 45, 45, 45, 446, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67,\n  /* 31930 */ 67, 1871, 67, 67, 67, 67, 0, 97, 97, 45, 67, 0, 97, 2060, 2061, 0, 2063, 45, 67, 0, 97, 45, 45, 156, 45,\n  /* 31955 */ 45, 45, 45, 45, 45, 45, 45, 45, 192, 45, 45, 45, 45, 1673, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 31980 */ 429, 45, 45, 45, 45, 67, 67, 67, 269, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 349,\n  /* 32004 */ 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 0, 0, 0, 364, 0, 367, 41098, 369, 140, 45,\n  /* 32029 */ 45, 374, 45, 45, 67, 67, 213, 217, 67, 67, 67, 67, 67, 242, 67, 247, 67, 253, 45, 45, 698, 45, 45, 45, 45,\n  /* 32054 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 399, 45, 45, 0, 0, 0, 0, 925, 41606, 0, 929, 0, 0, 45, 45, 45, 45, 45,\n  /* 32081 */ 45, 1391, 45, 45, 1395, 45, 45, 45, 45, 45, 45, 423, 45, 45, 45, 45, 45, 45, 45, 436, 45, 67, 67, 67, 67,\n  /* 32106 */ 1041, 67, 1043, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1776, 67, 67, 97, 97, 97, 1099, 0, 0, 97, 97, 97,\n  /* 32131 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 888, 97, 97, 97, 1131, 97, 97, 97, 97, 1135, 97, 1137, 97, 97, 97,\n  /* 32156 */ 97, 97, 97, 97, 1497, 97, 97, 97, 97, 97, 97, 97, 97, 97, 883, 97, 97, 97, 97, 97, 97, 1310, 0, 0, 0,\n  /* 32181 */ 1316, 0, 0, 0, 0, 1100, 0, 0, 0, 97, 97, 97, 97, 97, 1107, 97, 97, 97, 97, 97, 97, 97, 97, 1343, 97, 97,\n  /* 32207 */ 97, 97, 97, 97, 1348, 0, 0, 1317, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1112, 97, 45,\n  /* 32234 */ 1804, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1868, 67, 1870, 67, 67, 67, 67, 67, 1817,\n  /* 32258 */ 67, 67, 1819, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 823, 67, 37689, 544, 67, 97, 1832, 97, 97,\n  /* 32282 */ 1834, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 0, 1732, 97, 97, 97, 97, 97, 97, 97, 850, 97, 97,\n  /* 32308 */ 97, 97, 97, 97, 97, 97, 97, 1177, 0, 0, 925, 0, 0, 0, 0, 97, 97, 97, 97, 0, 0, 1941, 97, 97, 97, 97, 97,\n  /* 32335 */ 97, 45, 45, 45, 1991, 1992, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1998, 134, 0, 0, 0, 37, 110630, 0, 0,\n  /* 32360 */ 0, 114730, 106539, 41098, 45, 45, 45, 45, 941, 45, 45, 944, 45, 45, 45, 45, 45, 45, 952, 45, 45, 207, 67,\n  /* 32383 */ 67, 67, 67, 67, 226, 67, 67, 67, 67, 67, 67, 67, 67, 67, 820, 67, 67, 67, 67, 37689, 544, 369, 650, 45,\n  /* 32407 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1682, 25403, 546, 70179, 0, 0, 66365, 66365, 552,\n  /* 32430 */ 835, 97, 97, 97, 97, 97, 97, 97, 1522, 97, 97, 97, 97, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 1725,\n  /* 32455 */ 67, 67, 67, 1695, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1034, 67, 1036, 67, 67, 67, 265, 67, 67,\n  /* 32480 */ 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 97, 296, 97, 97, 97, 97, 314, 97, 97, 97, 97,\n  /* 32504 */ 332, 334, 97, 97, 97, 97, 97, 1146, 1147, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1626, 97, 97, 97, 97,\n  /* 32528 */ 97, 97, 345, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 0, 0, 0, 364, 0, 367,\n  /* 32553 */ 41098, 369, 140, 45, 372, 45, 45, 45, 1220, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1213, 45, 45,\n  /* 32577 */ 45, 45, 404, 406, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 434, 45, 45, 45, 440, 45, 45, 45,\n  /* 32602 */ 45, 45, 45, 45, 45, 451, 452, 45, 45, 45, 67, 1683, 67, 67, 67, 1686, 67, 67, 67, 67, 67, 67, 67, 0,\n  /* 32626 */ 37139, 24853, 0, 0, 0, 0, 41098, 65820, 67, 67, 67, 67, 490, 492, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 32650 */ 67, 1447, 67, 67, 1450, 67, 67, 67, 67, 67, 526, 67, 67, 67, 67, 67, 67, 67, 67, 537, 538, 67, 67, 67, 67,\n  /* 32675 */ 67, 506, 67, 67, 508, 67, 67, 511, 67, 67, 67, 67, 0, 1476, 0, 0, 0, 0, 0, 1478, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 32703 */ 97, 97, 1484, 97, 97, 97, 97, 97, 97, 865, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1499, 97, 97, 97, 97,\n  /* 32728 */ 97, 97, 97, 97, 97, 587, 589, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 629, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 32754 */ 97, 623, 97, 97, 97, 97, 97, 97, 97, 97, 634, 635, 97, 97, 97, 97, 97, 1160, 97, 97, 97, 97, 97, 97, 97,\n  /* 32779 */ 97, 97, 97, 97, 1628, 97, 97, 97, 97, 369, 0, 45, 45, 45, 45, 45, 655, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 32804 */ 999, 45, 1001, 45, 45, 45, 45, 45, 45, 45, 45, 715, 45, 45, 45, 720, 45, 45, 45, 45, 45, 45, 45, 45, 728,\n  /* 32829 */ 25403, 546, 70179, 0, 0, 66365, 66365, 552, 0, 97, 97, 97, 97, 97, 840, 97, 97, 97, 97, 97, 1174, 97, 97,\n  /* 32852 */ 97, 97, 0, 0, 925, 0, 0, 0, 0, 0, 0, 0, 1100, 97, 97, 97, 97, 97, 97, 97, 97, 627, 97, 97, 97, 97, 97, 97,\n  /* 32880 */ 97, 938, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 680, 45, 968, 45, 970, 45, 973, 45,\n  /* 32905 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 962, 45, 45, 45, 45, 45, 979, 45, 45, 45, 45, 45, 985, 45, 45, 45, 45,\n  /* 32931 */ 45, 45, 45, 45, 45, 1224, 45, 45, 45, 45, 45, 45, 45, 45, 688, 45, 45, 45, 45, 45, 45, 45, 1007, 1008, 67,\n  /* 32956 */ 67, 67, 67, 67, 1014, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1045, 67, 67, 67, 67, 67, 67, 67, 1038, 67, 67,\n  /* 32981 */ 67, 67, 67, 67, 1044, 67, 1046, 67, 1049, 67, 67, 67, 67, 67, 67, 800, 67, 67, 67, 67, 67, 67, 808, 67,\n  /* 33005 */ 67, 0, 0, 0, 1102, 97, 97, 97, 97, 97, 1108, 97, 97, 97, 97, 97, 97, 306, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 33031 */ 97, 97, 1371, 97, 97, 97, 97, 97, 97, 97, 97, 1132, 97, 97, 97, 97, 97, 97, 1138, 97, 1140, 97, 1143, 97,\n  /* 33055 */ 97, 97, 97, 97, 1352, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 869, 97, 97, 97, 97, 97, 45, 1191, 45, 45,\n  /* 33080 */ 45, 45, 45, 1196, 45, 45, 45, 45, 45, 45, 45, 45, 1407, 45, 45, 45, 45, 45, 45, 45, 45, 986, 45, 45, 45,\n  /* 33105 */ 45, 45, 45, 991, 45, 67, 67, 67, 1256, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1048, 67, 67, 67,\n  /* 33130 */ 97, 1336, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 615, 97, 1386, 45, 1387, 45, 45, 45, 45,\n  /* 33155 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 455, 45, 457, 45, 45, 1424, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1433,\n  /* 33180 */ 67, 1434, 67, 67, 67, 67, 67, 767, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1591, 67, 1593, 67, 67, 45,\n  /* 33205 */ 45, 1805, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1814, 45, 45, 1816, 67, 67, 67, 67, 1820, 67, 67, 67, 67,\n  /* 33229 */ 67, 67, 67, 67, 67, 1829, 67, 67, 67, 67, 67, 815, 67, 67, 67, 67, 821, 67, 67, 67, 37689, 544, 67, 1831,\n  /* 33253 */ 97, 97, 97, 97, 1835, 0, 0, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 1731, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 33279 */ 97, 853, 97, 97, 97, 97, 97, 97, 0, 97, 97, 97, 97, 1850, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 1547,\n  /* 33304 */ 45, 45, 45, 45, 45, 45, 45, 45, 1664, 45, 45, 45, 45, 45, 45, 45, 45, 961, 45, 45, 45, 45, 965, 45, 967,\n  /* 33329 */ 1907, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1920, 0, 1936, 97, 97, 97, 0, 0, 0, 97, 97,\n  /* 33355 */ 97, 97, 97, 97, 45, 45, 67, 67, 67, 67, 67, 67, 1763, 67, 67, 67, 67, 67, 67, 67, 67, 1056, 67, 67, 67,\n  /* 33380 */ 67, 67, 67, 67, 67, 1273, 67, 67, 67, 67, 67, 67, 67, 67, 1457, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97,\n  /* 33405 */ 97, 97, 0, 0, 28672, 97, 45, 67, 67, 67, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 2054, 97, 97, 291, 97,\n  /* 33431 */ 97, 97, 97, 97, 97, 320, 97, 97, 97, 97, 97, 97, 307, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 12288, 0,\n  /* 33456 */ 925, 926, 1179, 0, 45, 377, 45, 45, 45, 381, 45, 45, 392, 45, 45, 396, 45, 45, 45, 45, 971, 45, 45, 45,\n  /* 33480 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 1756, 45, 45, 45, 67, 67, 67, 67, 463, 67, 67, 67, 467, 67, 67, 478,\n  /* 33505 */ 67, 67, 482, 67, 67, 67, 67, 67, 1028, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1469, 67, 67, 1472,\n  /* 33530 */ 67, 502, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1460, 67, 97, 97, 97, 97, 560, 97, 97,\n  /* 33555 */ 97, 564, 97, 97, 575, 97, 97, 579, 97, 97, 97, 97, 97, 1368, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0,\n  /* 33581 */ 925, 0, 0, 930, 97, 599, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 872, 97, 45, 666, 45, 45,\n  /* 33607 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1758, 0, 362, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 45,\n  /* 33633 */ 934, 45, 45, 45, 164, 168, 174, 178, 45, 45, 45, 45, 45, 194, 45, 45, 45, 165, 45, 45, 45, 45, 45, 45, 45,\n  /* 33658 */ 45, 45, 199, 45, 45, 45, 67, 67, 1010, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1060, 67, 67, 67,\n  /* 33683 */ 67, 67, 67, 1052, 1053, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1063, 97, 1157, 97, 97, 97, 97, 97, 97,\n  /* 33707 */ 97, 97, 97, 97, 97, 97, 1167, 97, 97, 97, 97, 97, 1379, 97, 97, 97, 0, 0, 0, 45, 1383, 45, 45, 45, 1806,\n  /* 33732 */ 45, 45, 45, 45, 45, 45, 1812, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1577, 67, 67, 67, 67, 67, 67, 67, 753,\n  /* 33757 */ 67, 67, 67, 67, 67, 67, 67, 67, 67, 1262, 67, 67, 67, 67, 67, 67, 67, 1282, 67, 67, 67, 67, 67, 67, 67,\n  /* 33782 */ 67, 67, 67, 67, 67, 67, 67, 1471, 67, 45, 1402, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 33807 */ 417, 45, 67, 1462, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 544, 97, 1517, 97, 97,\n  /* 33831 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1128, 97, 97, 97, 97, 1636, 97, 97, 97, 0, 97, 97, 97, 97,\n  /* 33857 */ 97, 97, 97, 97, 851, 97, 97, 97, 97, 97, 97, 97, 67, 67, 1705, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97,\n  /* 33883 */ 97, 97, 97, 0, 0, 97, 97, 97, 97, 1842, 0, 0, 1779, 97, 97, 97, 1782, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0,\n  /* 33910 */ 0, 97, 97, 97, 1789, 97, 97, 0, 0, 0, 97, 1847, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 1675,\n  /* 33936 */ 45, 45, 45, 45, 45, 45, 45, 45, 737, 738, 67, 740, 67, 741, 67, 743, 67, 67, 67, 67, 67, 67, 1968, 67, 67,\n  /* 33961 */ 97, 97, 97, 97, 0, 0, 0, 97, 97, 45, 67, 0, 97, 45, 67, 2062, 97, 45, 67, 0, 97, 45, 67, 67, 97, 97, 2001,\n  /* 33988 */ 97, 0, 0, 2004, 97, 97, 0, 97, 97, 97, 97, 1797, 97, 97, 97, 97, 97, 45, 45, 45, 67, 261, 67, 67, 67, 67,\n  /* 34014 */ 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 292, 97, 97, 97, 97, 311, 315, 321, 325, 97, 97,\n  /* 34037 */ 97, 97, 97, 97, 1623, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1330, 97, 97, 1333, 1334, 97, 341, 97, 97,\n  /* 34061 */ 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 0, 0, 363, 364, 0, 367, 41098, 369, 140,\n  /* 34085 */ 45, 45, 45, 45, 1221, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 413, 45, 45, 416, 45, 376, 45, 45, 45,\n  /* 34110 */ 45, 382, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1408, 45, 45, 45, 45, 45, 403, 45, 45, 45, 45, 45, 45,\n  /* 34135 */ 45, 45, 45, 45, 414, 45, 45, 45, 418, 67, 67, 67, 462, 67, 67, 67, 67, 468, 67, 67, 67, 67, 67, 67, 67,\n  /* 34160 */ 67, 1602, 67, 1604, 67, 67, 67, 67, 67, 67, 67, 67, 489, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 500, 67,\n  /* 34185 */ 67, 67, 67, 67, 1067, 67, 67, 67, 67, 67, 1072, 67, 67, 67, 67, 67, 67, 274, 0, 37139, 24853, 0, 0, 0, 0,\n  /* 34210 */ 41098, 65820, 67, 67, 504, 67, 67, 67, 67, 67, 67, 67, 510, 67, 67, 67, 517, 519, 541, 67, 37139, 37139,\n  /* 34232 */ 24853, 24853, 0, 70179, 0, 0, 0, 65820, 65820, 369, 287, 554, 97, 97, 97, 559, 97, 97, 97, 97, 565, 97,\n  /* 34254 */ 97, 97, 97, 97, 97, 97, 1718, 0, 97, 97, 97, 97, 97, 97, 97, 898, 97, 97, 97, 97, 97, 97, 906, 97, 97, 97,\n  /* 34280 */ 97, 586, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 597, 97, 97, 97, 97, 97, 1520, 97, 97, 97, 97, 97, 97,\n  /* 34305 */ 97, 97, 97, 97, 0, 45, 1656, 45, 45, 45, 97, 97, 601, 97, 97, 97, 97, 97, 97, 97, 607, 97, 97, 97, 614,\n  /* 34330 */ 616, 638, 97, 18, 0, 139621, 0, 0, 0, 0, 0, 0, 364, 0, 0, 367, 41606, 369, 0, 45, 45, 45, 45, 45, 45, 45,\n  /* 34356 */ 45, 45, 45, 661, 45, 45, 45, 407, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1815, 45, 67, 45,\n  /* 34381 */ 667, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 678, 45, 45, 45, 421, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 34407 */ 45, 45, 976, 977, 45, 45, 45, 682, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 693, 45, 45, 697, 67, 67, 748,\n  /* 34432 */ 67, 67, 67, 67, 754, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1274, 67, 67, 67, 67, 67, 67, 67, 67, 765, 67,\n  /* 34457 */ 67, 67, 67, 769, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1589, 67, 67, 67, 67, 67, 67, 67, 67, 780, 67, 67,\n  /* 34482 */ 784, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1777, 67, 97, 97, 97, 97, 97, 97, 846, 97, 97, 97, 97,\n  /* 34507 */ 852, 97, 97, 97, 97, 97, 97, 97, 1742, 45, 45, 45, 45, 45, 45, 45, 1747, 97, 97, 97, 863, 97, 97, 97, 97,\n  /* 34532 */ 867, 97, 97, 97, 97, 97, 97, 97, 308, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 12288, 1178, 925, 0, 1179,\n  /* 34556 */ 0, 97, 97, 97, 878, 97, 97, 882, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 12288, 0, 925, 0, 1179, 0, 908,\n  /* 34581 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 925, 0, 0, 0, 954, 45, 45, 45, 45, 45, 45,\n  /* 34608 */ 45, 45, 45, 45, 963, 45, 45, 966, 45, 45, 157, 45, 45, 171, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 948,\n  /* 34633 */ 45, 45, 45, 45, 45, 1022, 67, 67, 1026, 67, 67, 67, 1030, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1603, 1605,\n  /* 34657 */ 67, 67, 67, 1608, 67, 67, 67, 1039, 67, 67, 1042, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 471, 67, 67, 67,\n  /* 34682 */ 67, 67, 0, 1100, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 904, 97, 97, 97, 97, 1116, 97, 97,\n  /* 34708 */ 1120, 97, 97, 97, 1124, 97, 97, 97, 97, 97, 97, 562, 97, 97, 97, 571, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 34733 */ 1133, 97, 97, 1136, 97, 97, 97, 97, 97, 97, 97, 97, 915, 917, 97, 97, 97, 97, 97, 0, 97, 1170, 97, 97, 97,\n  /* 34758 */ 97, 97, 97, 97, 97, 0, 0, 925, 0, 0, 0, 0, 0, 41606, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 1993, 67, 67, 67,\n  /* 34786 */ 67, 67, 67, 67, 67, 67, 67, 1275, 67, 67, 67, 1278, 67, 0, 0, 0, 45, 45, 1182, 45, 45, 45, 45, 45, 45, 45,\n  /* 34812 */ 45, 45, 1189, 1204, 45, 45, 45, 1207, 45, 45, 1209, 45, 1210, 45, 45, 45, 45, 45, 45, 1546, 45, 45, 45,\n  /* 34835 */ 45, 45, 45, 45, 45, 45, 689, 45, 45, 45, 45, 45, 45, 1231, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 34861 */ 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 236, 67, 67, 67, 67, 67, 67, 67, 801, 67, 67, 67, 805, 67, 67, 67,\n  /* 34887 */ 67, 67, 1242, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1249, 67, 67, 67, 67, 67, 67, 507, 67, 67, 67, 67, 67,\n  /* 34912 */ 67, 67, 67, 67, 67, 1300, 0, 0, 0, 0, 0, 1267, 67, 67, 1269, 67, 1270, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 34938 */ 1280, 97, 1349, 97, 1350, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1360, 97, 97, 97, 0, 1980, 97, 97, 97, 97,\n  /* 34962 */ 97, 45, 45, 45, 45, 45, 45, 673, 45, 45, 45, 45, 677, 45, 45, 45, 45, 1401, 45, 45, 45, 45, 45, 45, 45,\n  /* 34987 */ 45, 45, 45, 45, 45, 45, 45, 45, 953, 67, 1437, 67, 1440, 67, 67, 67, 67, 1445, 67, 67, 67, 1448, 67, 67,\n  /* 35011 */ 67, 67, 67, 67, 1029, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1825, 67, 67, 67, 67, 67, 1473, 67, 67, 67,\n  /* 35036 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1320, 0, 834, 97, 97, 97, 97, 1490, 97, 1493, 97, 97, 97, 97, 1498,\n  /* 35063 */ 97, 97, 97, 1501, 97, 97, 97, 0, 97, 1638, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 916, 97, 97, 97, 97, 97,\n  /* 35089 */ 97, 0, 1528, 97, 97, 97, 0, 45, 45, 45, 1535, 45, 45, 45, 45, 45, 45, 45, 1867, 67, 67, 67, 67, 67, 67,\n  /* 35114 */ 67, 67, 67, 97, 97, 97, 97, 1932, 0, 0, 1555, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1567,\n  /* 35139 */ 45, 45, 158, 45, 45, 172, 45, 45, 45, 183, 45, 45, 45, 45, 201, 45, 45, 67, 212, 67, 67, 67, 67, 231, 235,\n  /* 35164 */ 241, 245, 67, 67, 67, 67, 67, 67, 493, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 472, 67, 67, 67, 67, 67,\n  /* 35189 */ 97, 97, 97, 97, 1651, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 1539, 45, 45, 45, 67, 1704, 67,\n  /* 35214 */ 1706, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 1841, 97, 0, 1844, 97, 97, 97,\n  /* 35240 */ 97, 1716, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 590, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45,\n  /* 35267 */ 45, 45, 1385, 1748, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1757, 45, 45, 159, 45, 45, 45, 45,\n  /* 35292 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 415, 45, 45, 97, 97, 1780, 97, 97, 97, 0, 0, 1786, 97, 97, 97, 97, 97,\n  /* 35318 */ 0, 0, 97, 97, 1730, 0, 97, 97, 97, 97, 97, 1736, 97, 1738, 67, 97, 97, 97, 97, 97, 97, 0, 1838, 97, 97,\n  /* 35343 */ 97, 97, 97, 0, 0, 97, 1729, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1162, 97, 97, 97, 1165, 97, 97, 97, 45,\n  /* 35369 */ 1950, 45, 45, 45, 45, 45, 45, 45, 45, 1958, 67, 67, 67, 1962, 67, 67, 67, 67, 67, 1246, 67, 67, 67, 67,\n  /* 35393 */ 67, 67, 67, 67, 67, 67, 67, 97, 1710, 97, 97, 97, 1999, 67, 97, 97, 97, 97, 0, 2003, 97, 97, 97, 0, 97,\n  /* 35418 */ 97, 2008, 2009, 45, 67, 67, 67, 67, 0, 0, 97, 97, 97, 97, 45, 2052, 67, 2053, 0, 0, 0, 0, 925, 41606, 0,\n  /* 35443 */ 0, 930, 0, 45, 45, 45, 45, 45, 45, 1392, 45, 1394, 45, 45, 45, 45, 45, 45, 45, 1545, 45, 45, 45, 45, 45,\n  /* 35468 */ 45, 45, 45, 45, 45, 1563, 1565, 45, 45, 45, 1568, 0, 97, 2055, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67,\n  /* 35492 */ 28672, 97, 45, 45, 160, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 679, 45, 45, 67, 67, 266, 67,\n  /* 35517 */ 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 346, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24,\n  /* 35541 */ 24, 0, 28, 28, 139621, 0, 0, 362, 0, 364, 0, 367, 41098, 369, 140, 371, 45, 45, 45, 379, 45, 45, 45, 388,\n  /* 35565 */ 45, 45, 45, 45, 45, 45, 45, 45, 1663, 45, 45, 45, 45, 45, 45, 45, 45, 45, 449, 45, 45, 45, 45, 45, 67, 67,\n  /* 35591 */ 542, 37139, 37139, 24853, 24853, 0, 70179, 0, 0, 0, 65820, 65820, 369, 287, 97, 97, 97, 97, 97, 1622, 97,\n  /* 35612 */ 97, 97, 97, 97, 97, 97, 1629, 97, 97, 0, 1794, 1795, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45,\n  /* 35637 */ 45, 1745, 45, 45, 97, 639, 18, 0, 139621, 0, 0, 0, 0, 0, 0, 364, 0, 0, 367, 41606, 45, 731, 45, 45, 45,\n  /* 35662 */ 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 251, 67, 67, 67, 67, 67, 798, 67, 67, 67, 67,\n  /* 35688 */ 67, 67, 67, 67, 67, 67, 67, 67, 1073, 67, 67, 67, 860, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 35714 */ 97, 873, 0, 0, 1101, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 921, 97, 0, 67, 67, 67, 67, 1245,\n  /* 35740 */ 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1250, 67, 67, 1253, 0, 0, 1312, 0, 0, 0, 1318, 0, 0, 0, 0,\n  /* 35767 */ 0, 0, 97, 97, 97, 97, 1106, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1149, 97, 97, 97, 97, 97, 1155, 97, 97,\n  /* 35792 */ 1325, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1141, 97, 97, 67, 67, 1439, 67, 1441, 67, 67,\n  /* 35816 */ 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1264, 67, 67, 67, 97, 97, 1492, 97, 1494, 97, 97, 97, 97, 97, 97,\n  /* 35841 */ 97, 97, 97, 97, 97, 1331, 97, 97, 97, 97, 67, 67, 67, 2037, 67, 97, 0, 0, 97, 97, 97, 2043, 97, 45, 45,\n  /* 35866 */ 45, 442, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 232, 67, 67, 67, 67, 67, 67,\n  /* 35892 */ 67, 67, 1823, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1975, 0, 0, 97, 874, 97, 97, 97, 97, 97, 97,\n  /* 35918 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 1142, 97, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630,\n  /* 35939 */ 114730, 106539, 65, 86, 117, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539,\n  /* 35956 */ 63, 84, 115, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 61, 82, 113,\n  /* 35974 */ 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 59, 80, 111, 53264, 18, 49172,\n  /* 35992 */ 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 57, 78, 109, 53264, 18, 49172, 57366, 24, 8192,\n  /* 36010 */ 28, 102432, 37, 110630, 114730, 106539, 55, 76, 107, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37,\n  /* 36028 */ 110630, 114730, 106539, 53, 74, 105, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730,\n  /* 36045 */ 106539, 51, 72, 103, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 49, 70,\n  /* 36063 */ 101, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 47, 68, 99, 53264, 18,\n  /* 36081 */ 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 45, 67, 97, 53264, 18, 49172, 57366, 24,\n  /* 36099 */ 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 213085, 53264, 18, 49172, 57366, 24, 8192, 28, 102432,\n  /* 36117 */ 0, 0, 0, 44, 0, 0, 32863, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 41, 41, 41, 0, 0, 1138688,\n  /* 36139 */ 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 0, 53264, 18, 49172,\n  /* 36157 */ 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 89, 53264, 18, 18, 49172, 0, 57366, 0, 24,\n  /* 36177 */ 24, 24, 0, 127, 127, 127, 127, 102432, 67, 262, 67, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098,\n  /* 36200 */ 65820, 342, 97, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 360, 0, 0, 364, 0, 367,\n  /* 36225 */ 41098, 369, 140, 45, 45, 45, 45, 717, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 412, 45, 45, 45, 45, 45,\n  /* 36250 */ 67, 1009, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1292, 67, 67, 1294, 67, 67, 67, 67, 67, 67,\n  /* 36275 */ 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 97, 97, 97, 1615, 97, 97, 97, 53264, 18, 49172, 57366, 24, 8192, 28,\n  /* 36299 */ 102432, 37, 110630, 114730, 106539, 66, 87, 118, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37,\n  /* 36316 */ 110630, 114730, 106539, 64, 85, 116, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730,\n  /* 36333 */ 106539, 62, 83, 114, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 60, 81,\n  /* 36351 */ 112, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 58, 79, 110, 53264, 18,\n  /* 36369 */ 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 56, 77, 108, 53264, 18, 49172, 57366, 24,\n  /* 36387 */ 8192, 28, 102432, 37, 110630, 114730, 106539, 54, 75, 106, 53264, 18, 49172, 57366, 24, 8192, 28, 102432,\n  /* 36405 */ 37, 110630, 114730, 106539, 52, 73, 104, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630,\n  /* 36422 */ 114730, 106539, 50, 71, 102, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539,\n  /* 36439 */ 48, 69, 100, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 46, 67, 98, 53264,\n  /* 36458 */ 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 233472, 53264, 18, 49172, 57366,\n  /* 36476 */ 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 69724, 53264, 18, 18, 49172, 0, 57366, 262144, 24,\n  /* 36495 */ 24, 24, 0, 28, 28, 28, 28, 102432, 45, 45, 161, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 710,\n  /* 36520 */ 45, 45, 28, 139621, 359, 0, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 45, 45, 45, 1389, 45, 45, 45, 45, 45,\n  /* 36544 */ 45, 45, 45, 45, 45, 45, 949, 45, 45, 45, 45, 67, 503, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 36570 */ 67, 1449, 67, 67, 97, 600, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1154, 97, 0, 0, 0, 0,\n  /* 36596 */ 925, 41606, 927, 0, 0, 0, 45, 45, 45, 45, 45, 45, 1866, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 772, 67,\n  /* 36621 */ 67, 67, 67, 67, 45, 45, 969, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 951, 45, 45, 45, 45,\n  /* 36646 */ 1192, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1202, 45, 45, 0, 0, 0, 1314, 0, 0, 0, 0, 0, 0,\n  /* 36673 */ 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1488, 67, 67, 267, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0,\n  /* 36698 */ 41098, 65820, 97, 347, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 361, 0, 0, 364,\n  /* 36722 */ 0, 367, 41098, 369, 140, 45, 45, 45, 45, 734, 45, 45, 45, 67, 67, 67, 67, 67, 742, 67, 67, 45, 45, 668,\n  /* 36746 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1214, 45, 45, 1130, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 36771 */ 97, 97, 97, 97, 97, 97, 97, 1361, 97, 45, 45, 1671, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 36796 */ 1552, 45, 45, 0, 0, 0, 0, 2220032, 0, 0, 1130496, 0, 0, 0, 0, 2170880, 2171020, 2170880, 2170880, 18, 0,\n  /* 36817 */ 0, 131072, 0, 0, 0, 90112, 0, 2220032, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 1485, 97, 97, 97, 97, 0, 45,\n  /* 36843 */ 45, 45, 45, 45, 1537, 45, 45, 45, 45, 45, 1390, 45, 1393, 45, 45, 45, 45, 1398, 45, 45, 45, 2170880,\n  /* 36865 */ 2171167, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880,\n  /* 36876 */ 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2576384, 2215936, 3117056, 2215936, 2215936,\n  /* 36887 */ 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 0, 0,\n  /* 36902 */ 0, 2174976, 0, 0, 0, 0, 0, 0, 2183168, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880,\n  /* 36921 */ 2170880, 2170880, 2721252, 2744320, 2170880, 2170880, 2170880, 2834432, 2840040, 2170880, 2908160,\n  /* 36932 */ 2170880, 2170880, 2936832, 2170880, 2170880, 2985984, 2170880, 2994176, 2170880, 2170880, 3014656,\n  /* 36943 */ 2170880, 3059712, 3076096, 3088384, 2170880, 2170880, 2170880, 2170880, 0, 0, 0, 0, 2220032, 0, 0, 0,\n  /* 36959 */ 1142784, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3215360, 2215936,\n  /* 36972 */ 2215936, 2215936, 2215936, 2215936, 2437120, 2215936, 2215936, 2215936, 3117056, 2215936, 2215936,\n  /* 36983 */ 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 543, 0, 545,\n  /* 36997 */ 0, 0, 2183168, 0, 0, 831, 0, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880,\n  /* 37012 */ 3031040, 2170880, 3055616, 2170880, 2170880, 2170880, 2170880, 3092480, 2170880, 2170880, 3125248,\n  /* 37023 */ 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3198976, 2170880, 0, 0,\n  /* 37036 */ 0, 0, 0, 0, 67, 67, 37139, 37139, 24853, 24853, 0, 0, 0, 0, 0, 65820, 65820, 0, 287, 97, 97, 97, 97, 97,\n  /* 37060 */ 1783, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 1791, 0, 0, 546, 70179, 0, 0, 0, 0, 552,\n  /* 37087 */ 0, 97, 97, 97, 97, 97, 97, 97, 604, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1150, 97, 97, 97, 97, 97,\n  /* 37112 */ 147456, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 0, 0,\n  /* 37126 */ 147456, 0, 0, 0, 0, 925, 41606, 0, 928, 0, 0, 45, 45, 45, 45, 45, 45, 998, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 37152 */ 45, 1562, 45, 1564, 45, 45, 45, 45, 0, 2158592, 2158592, 0, 0, 0, 0, 2232320, 2232320, 2232320, 0,\n  /* 37171 */ 2240512, 2240512, 2240512, 2240512, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2416640\n];\n\nJSONiqTokenizer.EXPECTED =\n[\n  /*    0 */ 291, 300, 304, 341, 315, 309, 305, 295, 319, 323, 327, 329, 296, 333, 337, 339, 342, 346, 350, 294, 356,\n  /*   21 */ 360, 312, 367, 352, 371, 363, 375, 379, 383, 387, 391, 395, 726, 399, 405, 518, 684, 405, 405, 405, 405,\n  /*   42 */ 808, 405, 405, 405, 512, 405, 405, 405, 431, 405, 405, 406, 405, 405, 404, 405, 405, 405, 405, 405, 405,\n  /*   63 */ 405, 908, 631, 410, 415, 405, 414, 419, 608, 405, 429, 602, 405, 435, 443, 405, 441, 641, 478, 405, 447,\n  /*   84 */ 451, 450, 456, 643, 461, 460, 762, 679, 465, 469, 741, 473, 477, 482, 486, 492, 932, 931, 523, 498, 504,\n  /*  105 */ 720, 405, 510, 596, 405, 516, 941, 580, 522, 929, 527, 590, 589, 897, 939, 534, 538, 547, 551, 555, 559,\n  /*  126 */ 563, 567, 571, 969, 575, 708, 690, 689, 579, 584, 634, 405, 594, 731, 405, 600, 882, 405, 606, 895, 786,\n  /*  147 */ 452, 612, 405, 615, 620, 876, 624, 628, 638, 647, 651, 655, 659, 663, 667, 676, 683, 688, 695, 694, 791,\n  /*  168 */ 405, 699, 437, 405, 706, 714, 405, 712, 825, 870, 405, 718, 724, 769, 768, 823, 730, 735, 745, 751, 422,\n  /*  189 */ 755, 759, 425, 766, 902, 810, 587, 775, 888, 887, 405, 773, 992, 405, 779, 962, 405, 785, 781, 986, 790,\n  /*  210 */ 795, 797, 506, 500, 499, 801, 805, 814, 820, 829, 833, 837, 841, 845, 849, 853, 857, 861, 616, 865, 869,\n  /*  231 */ 868, 488, 405, 874, 816, 405, 880, 738, 405, 886, 892, 543, 405, 901, 906, 913, 912, 918, 494, 541, 922,\n  /*  252 */ 926, 936, 945, 949, 953, 957, 530, 966, 973, 960, 702, 701, 405, 979, 981, 405, 985, 747, 405, 990, 998,\n  /*  273 */ 914, 405, 996, 1004, 672, 975, 974, 1014, 1002, 1008, 670, 1012, 405, 405, 405, 405, 405, 401, 1018, 1022,\n  /*  293 */ 1026, 1106, 1071, 1111, 1111, 1111, 1082, 1145, 1030, 1101, 1034, 1038, 1106, 1106, 1106, 1106, 1046, 1206,\n  /*  311 */ 1052, 1106, 1072, 1111, 1111, 1042, 1134, 1065, 1111, 1112, 1056, 1160, 1207, 1062, 1204, 1208, 1069, 1106,\n  /*  329 */ 1106, 1106, 1076, 1111, 1207, 1161, 1122, 1205, 1064, 1094, 1106, 1106, 1107, 1111, 1111, 1111, 1078, 1086,\n  /*  347 */ 1207, 1092, 1098, 1046, 1058, 1106, 1106, 1110, 1111, 1111, 1116, 1120, 1161, 1126, 1202, 1104, 1106, 1145,\n  /*  365 */ 1146, 1129, 1138, 1088, 1151, 1048, 1157, 1153, 1132, 1141, 1165, 1107, 1111, 1172, 1179, 1109, 1183, 1175,\n  /*  383 */ 1143, 1147, 1187, 1108, 1191, 1195, 1144, 1199, 1168, 1212, 1216, 1220, 1224, 1228, 1232, 1236, 1557, 1247,\n  /*  401 */ 1241, 1241, 1038, 1434, 1241, 1241, 1241, 1241, 1254, 1275, 1617, 1241, 1280, 1287, 1241, 1241, 1241, 1287,\n  /*  419 */ 1241, 2114, 1291, 1241, 1243, 1241, 2049, 1824, 2094, 2095, 1520, 1309, 1241, 1241, 1302, 1241, 1321, 1311,\n  /*  437 */ 1241, 1241, 1313, 1778, 1325, 1336, 1241, 1241, 1325, 1330, 1353, 1241, 1241, 1695, 1354, 1241, 1241, 1241,\n  /*  455 */ 1294, 1686, 1331, 1241, 1696, 1368, 1241, 1338, 1370, 1241, 1392, 1399, 1364, 2017, 1406, 2016, 1405, 1716,\n  /*  473 */ 1406, 1407, 1422, 1417, 1421, 1241, 1241, 1241, 1349, 1426, 1241, 1774, 1756, 1241, 1773, 1241, 1241, 1345,\n  /*  491 */ 1964, 1812, 1432, 1241, 1241, 1345, 1993, 1459, 1241, 1241, 1241, 1395, 1848, 1767, 1465, 1241, 1241, 1394,\n  /*  509 */ 1847, 1242, 1477, 1241, 1241, 1428, 1241, 1445, 1492, 1241, 1241, 1438, 1241, 1499, 1241, 1241, 1241, 1455,\n  /*  527 */ 1241, 1818, 1448, 1241, 1250, 1241, 2026, 1623, 1449, 1241, 1612, 1616, 1241, 1614, 1241, 1257, 1241, 1241,\n  /*  545 */ 1985, 1292, 1586, 1512, 1241, 1517, 2050, 1526, 1674, 1519, 1524, 1647, 2051, 1532, 1537, 1551, 1544, 1550,\n  /*  563 */ 1555, 1561, 1571, 1578, 1584, 1590, 1591, 1653, 1595, 1602, 1606, 1610, 1634, 1628, 1640, 1633, 1645, 1241,\n  /*  581 */ 1241, 1241, 1469, 1241, 1970, 1651, 1241, 1270, 1241, 1241, 1819, 1449, 1241, 1293, 1664, 1241, 1241, 1481,\n  /*  599 */ 1485, 1574, 1672, 1241, 1241, 1513, 1317, 1487, 1684, 1241, 1241, 1533, 1299, 1694, 1241, 1241, 1295, 1241,\n  /*  617 */ 1241, 1241, 1546, 1700, 1241, 1241, 1707, 1241, 1713, 1241, 1849, 1715, 1241, 1720, 1241, 1276, 1267, 1241,\n  /*  635 */ 1241, 2107, 1657, 1864, 1241, 1881, 1241, 1326, 1292, 1241, 1685, 1358, 1724, 1338, 1241, 1363, 1362, 1342,\n  /*  653 */ 1340, 1361, 1339, 1833, 1372, 1360, 1833, 1833, 1342, 1343, 1835, 1341, 1731, 1738, 1344, 1241, 1745, 1241,\n  /*  671 */ 1379, 1241, 1241, 2092, 1241, 1388, 1761, 1754, 1241, 1386, 1241, 1400, 1760, 1241, 1241, 1241, 1598, 1734,\n  /*  689 */ 1241, 1241, 1241, 1635, 1645, 1241, 1780, 1766, 1241, 1241, 1332, 1771, 1241, 1241, 1629, 2079, 1241, 1242,\n  /*  707 */ 1784, 1241, 1241, 1680, 1639, 2063, 1790, 1241, 1241, 1741, 1241, 1241, 1800, 1241, 1241, 1762, 1473, 1241,\n  /*  725 */ 1806, 1241, 1241, 1786, 1240, 1709, 1241, 1241, 1241, 1668, 1811, 1241, 1940, 1241, 1401, 1974, 1241, 1408,\n  /*  743 */ 1413, 1382, 1241, 1816, 1241, 1241, 1802, 2086, 1811, 1241, 1817, 1945, 1823, 2095, 2095, 2047, 2094, 2046,\n  /*  761 */ 2080, 1241, 1409, 1312, 1376, 2096, 2048, 1241, 1241, 1807, 1241, 1241, 1241, 2035, 1241, 1241, 1828, 1241,\n  /*  779 */ 2057, 2061, 1241, 1241, 1843, 1241, 2059, 1241, 1241, 1241, 1690, 1847, 1241, 1241, 1241, 1703, 2102, 1848,\n  /*  797 */ 1241, 1241, 1853, 1292, 1848, 1241, 2016, 1857, 1241, 2002, 1868, 1241, 1436, 1241, 1241, 1271, 1305, 1241,\n  /*  815 */ 1874, 1241, 1241, 1884, 2037, 1892, 1241, 1890, 1241, 1461, 1241, 1241, 1795, 1241, 1241, 1891, 1241, 1878,\n  /*  833 */ 1241, 1888, 1241, 1888, 1905, 1896, 2087, 1912, 1903, 1241, 1911, 1906, 1916, 1905, 2027, 1863, 1925, 2088,\n  /*  851 */ 1859, 1861, 1922, 1927, 1931, 1935, 1494, 1241, 1241, 1918, 1907, 1939, 1917, 1944, 1949, 1241, 1241, 1451,\n  /*  869 */ 1955, 1241, 1241, 1241, 1796, 1727, 2061, 1241, 1241, 1899, 1241, 1660, 1968, 1241, 1241, 1951, 1678, 1978,\n  /*  887 */ 1241, 1241, 1241, 1839, 1241, 1241, 1984, 1982, 1241, 1488, 1241, 1241, 1624, 1450, 1989, 1241, 1241, 1241,\n  /*  905 */ 1870, 1995, 1292, 1241, 1241, 1958, 1261, 1241, 1996, 1241, 1241, 1241, 2039, 2008, 1241, 1241, 1750, 2000,\n  /*  923 */ 1241, 1256, 2001, 1960, 1241, 1564, 1241, 1504, 1241, 1241, 1442, 1241, 1241, 1564, 1528, 1263, 1241, 1508,\n  /*  941 */ 1241, 1241, 1468, 1498, 2006, 1540, 2015, 1539, 2014, 1748, 2013, 1539, 1831, 2014, 2012, 1500, 1567, 2022,\n  /*  959 */ 2021, 1241, 1580, 1241, 1241, 2033, 2037, 1791, 2045, 2031, 1241, 1621, 1241, 1641, 2044, 1241, 1241, 1241,\n  /*  977 */ 2093, 1241, 1241, 2055, 1241, 1241, 2067, 1241, 1283, 1241, 1241, 1241, 2101, 2071, 1241, 1241, 1241, 2073,\n  /*  995 */ 1848, 2040, 1241, 1241, 1241, 2077, 1241, 1241, 2106, 1241, 1241, 2084, 1241, 2111, 1241, 1241, 1381, 1380,\n  /* 1013 */ 1241, 1241, 1241, 2100, 1241, 2129, 2118, 2122, 2126, 2197, 2133, 3010, 2825, 2145, 2698, 2156, 2226, 2160,\n  /* 1031 */ 2161, 2165, 2174, 2293, 2194, 2630, 2201, 2203, 2152, 3019, 2226, 2263, 2209, 2213, 2218, 2269, 2292, 2269,\n  /* 1049 */ 2269, 2184, 2226, 2238, 2148, 2151, 3017, 2245, 2214, 2269, 2269, 2185, 2226, 2292, 2269, 2291, 2269, 2269,\n  /* 1067 */ 2269, 2292, 2205, 3019, 2226, 2226, 2160, 2160, 2160, 2261, 2160, 2160, 2160, 2262, 2276, 2160, 2160, 2277,\n  /* 1085 */ 2216, 2283, 2216, 2269, 2269, 2268, 2269, 2267, 2269, 2269, 2269, 2271, 2568, 2292, 2269, 2293, 2269, 2182,\n  /* 1103 */ 2190, 2269, 2186, 2226, 2226, 2226, 2226, 2227, 2160, 2160, 2160, 2160, 2263, 2160, 2275, 2277, 2282, 2215,\n  /* 1121 */ 2217, 2269, 2269, 2291, 2269, 2269, 2293, 2291, 2269, 2220, 2269, 2295, 2294, 2269, 2269, 2305, 2233, 2262,\n  /* 1139 */ 2278, 2218, 2269, 2234, 2226, 2226, 2228, 2160, 2160, 2160, 2289, 2220, 2294, 2294, 2269, 2269, 2304, 2269,\n  /* 1157 */ 2160, 2160, 2287, 2269, 2269, 2305, 2269, 2269, 2312, 2269, 2269, 2225, 2226, 2160, 2287, 2289, 2219, 2304,\n  /* 1175 */ 2295, 2314, 2234, 2226, 2314, 2269, 2226, 2226, 2160, 2288, 2219, 2222, 2304, 2296, 2269, 2224, 2160, 2160,\n  /* 1193 */ 2269, 2302, 2294, 2314, 2224, 2226, 2288, 2220, 2294, 2269, 2290, 2269, 2269, 2293, 2269, 2269, 2269, 2269,\n  /* 1211 */ 2270, 2221, 2313, 2225, 2227, 2160, 2300, 2269, 2225, 2261, 2309, 2234, 2229, 2223, 2318, 2318, 2318, 2328,\n  /* 1229 */ 2336, 2340, 2344, 2350, 2637, 2712, 2358, 2362, 2372, 2135, 2378, 2398, 2135, 2135, 2135, 2135, 2136, 2417,\n  /* 1247 */ 2241, 2135, 2378, 2135, 2135, 2980, 2984, 2135, 3006, 2135, 2135, 2135, 2945, 2931, 2425, 2400, 2135, 2135,\n  /* 1265 */ 2135, 2954, 2135, 2481, 2433, 2135, 2135, 2988, 2824, 2135, 2135, 2482, 2434, 2135, 2135, 2440, 2445, 2452,\n  /* 1283 */ 2135, 2135, 2998, 3002, 2961, 2441, 2446, 2453, 2463, 2974, 2135, 2135, 2135, 2140, 2642, 2709, 2459, 2470,\n  /* 1301 */ 2465, 2135, 2135, 3005, 2135, 2135, 2987, 2823, 2458, 2469, 2464, 2975, 2135, 2135, 2135, 2353, 2488, 2447,\n  /* 1319 */ 2324, 2974, 2135, 2409, 2459, 2448, 2135, 2961, 2487, 2446, 2476, 2323, 2973, 2135, 2135, 2135, 2354, 2476,\n  /* 1337 */ 2974, 2135, 2135, 2135, 2957, 2135, 2135, 2960, 2135, 2135, 2135, 2363, 2409, 2459, 2474, 2465, 2487, 2571,\n  /* 1355 */ 2973, 2135, 2135, 2168, 2973, 2135, 2135, 2135, 2959, 2135, 2135, 2135, 2506, 2135, 2957, 2488, 2170, 2135,\n  /* 1373 */ 2135, 2135, 2960, 2135, 2818, 2493, 2135, 2135, 3033, 2135, 2135, 2135, 2934, 2819, 2494, 2135, 2135, 2135,\n  /* 1391 */ 2976, 2780, 2499, 2135, 2135, 2135, 3000, 2968, 2135, 2935, 2135, 2135, 2135, 2364, 2507, 2135, 2135, 2934,\n  /* 1409 */ 2135, 2135, 2780, 2492, 2507, 2135, 2135, 2506, 2780, 2135, 2135, 2782, 2780, 2135, 2782, 2135, 2783, 2374,\n  /* 1427 */ 2514, 2135, 2135, 2135, 3007, 2530, 2974, 2135, 2135, 2135, 3008, 2135, 2135, 2134, 2135, 2526, 2531, 2975,\n  /* 1445 */ 2135, 2135, 3042, 2581, 2575, 2956, 2135, 2135, 2135, 2394, 2135, 2508, 2535, 2840, 2844, 2495, 2135, 2135,\n  /* 1463 */ 2136, 2684, 2537, 2842, 2846, 2135, 2136, 2561, 2581, 2551, 2536, 2841, 2845, 2975, 3043, 2582, 2843, 2555,\n  /* 1481 */ 2135, 3040, 3044, 2538, 2844, 2975, 2135, 2135, 2253, 2644, 2672, 2542, 2554, 2135, 2135, 2346, 2873, 2551,\n  /* 1499 */ 2555, 2135, 2135, 2135, 2381, 2559, 2565, 2538, 2553, 2135, 2560, 2914, 2576, 2590, 2135, 2135, 2135, 2408,\n  /* 1517 */ 2136, 2596, 2624, 2135, 2135, 2135, 2409, 2135, 2618, 2597, 3008, 2135, 2135, 2380, 2956, 2601, 2135, 2135,\n  /* 1535 */ 2135, 2410, 2620, 2624, 2135, 2136, 2383, 2135, 2135, 2783, 2623, 2135, 2135, 2393, 2888, 2136, 2621, 3008,\n  /* 1553 */ 2135, 2618, 2618, 2622, 2135, 2135, 2405, 2414, 2619, 2384, 2624, 2135, 2136, 2950, 2135, 2138, 2135, 2139,\n  /* 1571 */ 2135, 2604, 2623, 2135, 2140, 2878, 2665, 2957, 2622, 2135, 2135, 2428, 2762, 2606, 2612, 2135, 2135, 2501,\n  /* 1589 */ 2586, 2604, 3038, 2135, 2604, 3036, 2387, 2958, 2386, 2135, 2141, 2135, 2421, 2387, 2385, 2135, 2385, 2384,\n  /* 1607 */ 2384, 2135, 2386, 2628, 2384, 2135, 2135, 2501, 2596, 2591, 2135, 2135, 2135, 2400, 2135, 2634, 2135, 2135,\n  /* 1625 */ 2559, 2580, 2575, 2648, 2135, 2135, 2135, 2429, 2649, 2135, 2135, 2135, 2435, 2654, 2658, 2135, 2135, 2135,\n  /* 1643 */ 2436, 2649, 2178, 2659, 2135, 2135, 2595, 2601, 2669, 2677, 2135, 2135, 2616, 2957, 2879, 2665, 2691, 2135,\n  /* 1661 */ 2363, 2367, 2900, 2878, 2664, 2690, 2975, 2877, 2643, 2670, 2974, 2671, 2975, 2135, 2135, 2619, 2608, 2669,\n  /* 1679 */ 2673, 2135, 2135, 2653, 2177, 2672, 2135, 2135, 2135, 2486, 2168, 2251, 2255, 2695, 2974, 2709, 2135, 2135,\n  /* 1697 */ 2135, 2487, 2169, 2399, 2716, 2975, 2135, 2363, 2770, 2776, 2640, 2717, 2135, 2135, 2729, 2135, 2135, 2641,\n  /* 1715 */ 2718, 2135, 2135, 2135, 2505, 2135, 2640, 2257, 2974, 2135, 2727, 2975, 2135, 2365, 2332, 2895, 2957, 2135,\n  /* 1733 */ 2959, 2135, 2365, 2749, 2754, 2959, 2958, 2958, 2135, 2380, 2793, 2799, 2135, 2735, 2738, 2135, 2381, 2135,\n  /* 1751 */ 2135, 2940, 2974, 2135, 2744, 2135, 2135, 2739, 2519, 2976, 2745, 2135, 2135, 2135, 2509, 2755, 2135, 2135,\n  /* 1769 */ 2135, 2510, 2772, 2778, 2135, 2135, 2740, 2520, 2135, 2771, 2777, 2135, 2135, 2759, 2750, 2792, 2798, 2135,\n  /* 1787 */ 2135, 2781, 2392, 2779, 2135, 2135, 2135, 2521, 2135, 2679, 2248, 2135, 2135, 2681, 2480, 2135, 2135, 2786,\n  /* 1805 */ 3000, 2135, 2679, 2683, 2135, 2135, 2416, 2135, 2135, 2135, 2525, 2135, 2730, 2135, 2135, 2135, 2560, 2581,\n  /* 1823 */ 2135, 2805, 2135, 2135, 2804, 2962, 2832, 2974, 2135, 2382, 2135, 2135, 2958, 2135, 2135, 2960, 2135, 2829,\n  /* 1841 */ 2833, 2975, 2961, 2965, 2969, 2973, 2968, 2972, 2135, 2135, 2135, 2641, 2135, 2515, 2966, 2970, 2851, 2478,\n  /* 1859 */ 2135, 2135, 2808, 2135, 2809, 2135, 2135, 2135, 2722, 2852, 2479, 2135, 2135, 2815, 2135, 2135, 2766, 2853,\n  /* 1877 */ 2480, 2135, 2857, 2479, 2135, 2388, 2723, 2135, 2364, 2331, 2894, 2858, 2480, 2135, 2135, 2850, 2478, 2135,\n  /* 1895 */ 2135, 2135, 2806, 2864, 2135, 2399, 2256, 2974, 2865, 2135, 2135, 2862, 2135, 2135, 2135, 2685, 2807, 2865,\n  /* 1913 */ 2135, 2135, 2807, 2863, 2135, 2135, 2135, 2686, 2884, 2807, 2135, 2809, 2807, 2135, 2135, 2807, 2806, 2705,\n  /* 1931 */ 2810, 2808, 2700, 2869, 2702, 2702, 2702, 2704, 2883, 2135, 2135, 2135, 2730, 2884, 2135, 2135, 2135, 2731,\n  /* 1949 */ 2321, 2546, 2135, 2135, 2876, 2255, 2889, 2322, 2547, 2135, 2401, 2135, 2135, 2135, 2949, 2367, 2893, 2544,\n  /* 1967 */ 2973, 2906, 2973, 2135, 2135, 2877, 2663, 2368, 2901, 2907, 2974, 2366, 2899, 2905, 2972, 2920, 2974, 2135,\n  /* 1985 */ 2135, 2911, 2900, 2920, 2363, 2913, 2918, 2465, 2941, 2975, 2135, 2135, 2924, 2928, 2974, 2945, 2931, 2135,\n  /* 2003 */ 2135, 2135, 2765, 2136, 2955, 2135, 2135, 2939, 2931, 2380, 2135, 2135, 2380, 2135, 2135, 2135, 2780, 2507,\n  /* 2021 */ 2137, 2135, 2137, 2135, 2139, 2135, 2806, 2810, 2135, 2135, 2135, 2992, 2135, 2135, 2962, 2966, 2970, 2974,\n  /* 2039 */ 2135, 2135, 2787, 3014, 2135, 2521, 2993, 2135, 2135, 2135, 2803, 2135, 2135, 2135, 2618, 2607, 2997, 3001,\n  /* 2057 */ 2135, 2135, 2963, 2967, 2971, 2975, 2135, 2135, 2791, 2797, 2135, 3009, 2999, 3003, 2787, 3001, 2135, 2135,\n  /* 2075 */ 2964, 2968, 2785, 2999, 3003, 2135, 2135, 2135, 2804, 2785, 2999, 3004, 2135, 2135, 2135, 2807, 2135, 2135,\n  /* 2093 */ 3023, 2135, 2135, 2135, 2811, 2135, 2135, 3027, 2135, 2135, 2135, 2837, 2968, 3028, 2135, 2135, 2135, 2875,\n  /* 2111 */ 2135, 2784, 3029, 2135, 2408, 2457, 2446, 0, 14, 0, -2120220672, 1610612736, -2074083328, -2002780160,\n  /* 2125 */ -2111830528, 1073872896, 1342177280, 1075807216, 4096, 16384, 2048, 8192, 0, 8192, 0, 0, 0, 0, 1, 0, 0, 0,\n  /* 2143 */ 2, 0, -2145386496, 8388608, 1073741824, 0, 0x80000000, 0x80000000, 2097152, 2097152, 2097152, 536870912, 0,\n  /* 2156 */ 0, 134217728, 33554432, 1536, 268435456, 268435456, 268435456, 268435456, 128, 256, 32, 0, 65536, 131072,\n  /* 2170 */ 524288, 16777216, 268435456, 0x80000000, 1572864, 1835008, 640, 32768, 65536, 262144, 1048576, 2097152,\n  /* 2182 */ 196608, 196800, 196608, 196608, 0, 131072, 131072, 131072, 196608, 196624, 196608, 196624, 196608, 196608,\n  /* 2196 */ 128, 4096, 16384, 16384, 2048, 0, 4, 0, 0, 0x80000000, 2097152, 0, 1024, 32, 32, 0, 65536, 1572864,\n  /* 2214 */ 1048576, 32768, 32768, 32768, 32768, 196608, 196608, 196608, 64, 64, 196608, 196608, 131072, 131072,\n  /* 2228 */ 131072, 131072, 268435456, 268435456, 64, 196736, 196608, 196608, 196608, 131072, 196608, 196608, 16384, 4,\n  /* 2242 */ 4, 4, 2, 32, 32, 65536, 1048576, 12582912, 1073741824, 0, 0, 2, 8, 16, 96, 2048, 32768, 0, 0, 131072,\n  /* 2262 */ 268435456, 268435456, 268435456, 256, 256, 196608, 196672, 196608, 196608, 196608, 196608, 4, 0, 256, 256,\n  /* 2277 */ 256, 256, 32, 32, 32768, 32, 32, 32, 32, 32768, 268435456, 268435456, 268435456, 196608, 196608, 196608,\n  /* 2293 */ 196624, 196608, 196608, 196608, 16, 16, 16, 268435456, 196608, 64, 64, 64, 196608, 196608, 196608, 196672,\n  /* 2309 */ 268435456, 64, 64, 196608, 196608, 16, 196608, 196608, 196608, 268435456, 64, 196608, 131072, 262144,\n  /* 2323 */ 4194304, 25165824, 33554432, 134217728, 268435456, 268435456, 196608, 262152, 8, 256, 512, 3072, 16384,\n  /* 2336 */ 200, -1073741816, 8392713, 40, 8392718, 520, 807404072, 40, 520, 100663304, 0, 0, -540651761, -540651761,\n  /* 2350 */ 257589048, 0, 262144, 0, 0, 3, 8, 256, 0, 4, 6, 4100, 8388612, 0, 0, 0, 3, 4, 8, 256, 512, 1024, 0,\n  /* 2373 */ 2097152, 0, 0, -537854471, -537854471, 0, 100663296, 0, 0, 1, 2, 0, 0, 0, 16384, 0, 0, 0, 96, 14336, 0, 0,\n  /* 2395 */ 0, 7, 8, 234881024, 0, 0, 0, 8, 0, 0, 0, 0, 262144, 0, 0, 16, 64, 384, 512, 0, 1, 1, 0, 12582912, 0, 0, 0,\n  /* 2422 */ 0, 33554432, 67108864, -606084144, -606084144, -606084138, 0, 0, 28, 32, 768, 1966080, -608174080, 0, 0, 0,\n  /* 2438 */ 14, 35056, 16, 64, 896, 24576, 98304, 98304, 131072, 262144, 524288, 1048576, 4194304, 25165824, 1048576,\n  /* 2453 */ 62914560, 134217728, -805306368, 0, 384, 512, 16384, 65536, 131072, 262144, 29360128, 33554432, 134217728,\n  /* 2466 */ 268435456, 1073741824, 0x80000000, 262144, 524288, 1048576, 29360128, 33554432, 524288, 1048576, 16777216,\n  /* 2477 */ 33554432, 134217728, 268435456, 1073741824, 0, 0, 0, 123856, 1966080, 0, 64, 384, 16384, 65536, 131072,\n  /* 2492 */ 16384, 65536, 524288, 268435456, 0x80000000, 0, 0, 524288, 0x80000000, 0, 0, 1, 16, 0, 256, 524288, 0, 0,\n  /* 2510 */ 0, 25, 96, 128, -537854471, 0, 0, 0, 32, 7404800, -545259520, 0, 0, 0, 60, 0, 249, 64768, 1048576, 6291456,\n  /* 2530 */ 6291456, 25165824, 100663296, 402653184, 1073741824, 96, 128, 1280, 2048, 4096, 57344, 6291456, 57344,\n  /* 2543 */ 6291456, 8388608, 16777216, 33554432, 201326592, 1342177280, 0x80000000, 0, 57344, 6291456, 8388608,\n  /* 2554 */ 100663296, 134217728, 0x80000000, 0, 0, 0, 1, 8, 16, 64, 128, 64, 128, 256, 1024, 131072, 131072, 131072,\n  /* 2572 */ 262144, 524288, 16777216, 57344, 6291456, 8388608, 67108864, 134217728, 64, 256, 1024, 2048, 4096, 57344,\n  /* 2586 */ 64, 256, 0, 24576, 32768, 6291456, 67108864, 134217728, 0, 1, 64, 256, 24576, 32768, 4194304, 32768,\n  /* 2602 */ 4194304, 67108864, 0, 0, 64, 256, 0, 0, 24576, 32768, 0, 16384, 4194304, 67108864, 64, 16384, 0, 0, 1, 64,\n  /* 2622 */ 256, 16384, 4194304, 67108864, 0, 0, 0, 16384, 0, 16384, 16384, 0, -470447874, -470447874, -470447874, 0,\n  /* 2638 */ 0, 128, 0, 0, 8, 96, 2048, 32768, 262144, 8388608, 35056, 1376256, -471859200, 0, 0, 14, 16, 224, 2048,\n  /* 2657 */ 32768, 2097152, 4194304, 8388608, -486539264, 0, 96, 128, 2048, 32768, 262144, 2097152, 262144, 2097152,\n  /* 2671 */ 8388608, 33554432, 536870912, 1073741824, 0x80000000, 0, 1610612736, 0x80000000, 0, 0, 1, 524288, 1048576,\n  /* 2684 */ 12582912, 0, 0, 0, 151311, 264503296, 2097152, 8388608, 33554432, 1610612736, 0x80000000, 262144, 8388608,\n  /* 2697 */ 33554432, 536870912, 67108864, 4194304, 0, 4194304, 0, 4194304, 4194304, 0, 0, 524288, 8388608, 536870912,\n  /* 2711 */ 1073741824, 0x80000000, 1, 4097, 8388609, 96, 2048, 32768, 1073741824, 0x80000000, 0, 96, 2048,\n  /* 2724 */ 0x80000000, 0, 0, 96, 2048, 0, 0, 1, 12582912, 0, 0, 0, 0, 1641895695, 1641895695, 0, 0, 0, 249, 7404800,\n  /* 2744 */ 15, 87808, 1835008, 1639972864, 0, 768, 5120, 16384, 65536, 1835008, 1835008, 12582912, 16777216,\n  /* 2757 */ 1610612736, 0, 3, 4, 8, 768, 4096, 65536, 0, 0, 256, 512, 786432, 8, 256, 512, 4096, 16384, 1835008, 16384,\n  /* 2777 */ 1835008, 12582912, 1610612736, 0, 0, 0, 256, 0, 0, 0, 4, 8, 16, 32, 1, 2, 8, 256, 16384, 524288, 16384,\n  /* 2798 */ 524288, 1048576, 12582912, 1610612736, 0, 0, 0, 8388608, 0, 0, 0, 524288, 4194304, 0, 0, 0, 8388608,\n  /* 2815 */ -548662288, -548662288, -548662288, 0, 0, 256, 16384, 65536, 520093696, -1073741824, 0, 0, 0, 16777216, 0,\n  /* 2830 */ 16, 32, 960, 4096, 4980736, 520093696, 1073741824, 0, 32, 896, 4096, 57344, 1048576, 6291456, 8388608,\n  /* 2845 */ 16777216, 100663296, 134217728, 268435456, 0x80000000, 0, 512, 786432, 4194304, 33554432, 134217728,\n  /* 2856 */ 268435456, 0, 786432, 4194304, 134217728, 268435456, 0, 524288, 4194304, 268435456, 0, 0, 0, 0, 0, 4194304,\n  /* 2872 */ 4194304, -540651761, 0, 0, 0, 2, 4, 8, 16, 96, 128, 264503296, -805306368, 0, 0, 0, 8, 256, 512, 19456,\n  /* 2892 */ 131072, 3072, 16384, 131072, 262144, 8388608, 16777216, 512, 1024, 2048, 16384, 131072, 262144, 131072,\n  /* 2906 */ 262144, 8388608, 33554432, 201326592, 268435456, 0, 3, 4, 256, 1024, 2048, 57344, 16384, 131072, 8388608,\n  /* 2921 */ 33554432, 134217728, 268435456, 0, 3, 256, 1024, 16384, 131072, 33554432, 134217728, 1073741824,\n  /* 2933 */ 0x80000000, 0, 0, 256, 524288, 0x80000000, 0, 3, 256, 33554432, 134217728, 1073741824, 0, 1, 2, 33554432,\n  /* 2949 */ 1, 2, 134217728, 1073741824, 0, 1, 2, 134217728, 0, 0, 0, 64, 0, 0, 0, 16, 32, 896, 4096, 786432, 4194304,\n  /* 2970 */ 16777216, 33554432, 201326592, 268435456, 1073741824, 0x80000000, 0, 0, 0, 15, 0, 4980736, 4980736,\n  /* 2983 */ 4980736, 70460, 70460, 3478332, 0, 0, 1008, 4984832, 520093696, 60, 4864, 65536, 0, 0, 0, 12, 16, 32, 256,\n  /* 3002 */ 512, 4096, 65536, 0, 0, 0, 67108864, 0, 0, 0, 12, 0, 256, 512, 65536, 0, 0, 1024, 512, 131072, 131072, 4,\n  /* 3024 */ 16, 32, 65536, 0, 4, 16, 32, 0, 0, 0, 4, 16, 0, 0, 16384, 67108864, 0, 0, 1, 24, 96, 128, 256, 1024\n];\n\nJSONiqTokenizer.TOKEN =\n[\n  \"(0)\",\n  \"JSONChar\",\n  \"JSONCharRef\",\n  \"JSONPredefinedCharRef\",\n  \"ModuleDecl\",\n  \"Annotation\",\n  \"OptionDecl\",\n  \"Operator\",\n  \"Variable\",\n  \"Tag\",\n  \"EndTag\",\n  \"PragmaContents\",\n  \"DirCommentContents\",\n  \"DirPIContents\",\n  \"CDataSectionContents\",\n  \"AttrTest\",\n  \"Wildcard\",\n  \"EQName\",\n  \"IntegerLiteral\",\n  \"DecimalLiteral\",\n  \"DoubleLiteral\",\n  \"PredefinedEntityRef\",\n  \"'\\\"\\\"'\",\n  \"EscapeApos\",\n  \"AposChar\",\n  \"ElementContentChar\",\n  \"QuotAttrContentChar\",\n  \"AposAttrContentChar\",\n  \"NCName\",\n  \"QName\",\n  \"S\",\n  \"CharRef\",\n  \"CommentContents\",\n  \"DocTag\",\n  \"DocCommentContents\",\n  \"EOF\",\n  \"'!'\",\n  \"'\\\"'\",\n  \"'#'\",\n  \"'#)'\",\n  \"'$$'\",\n  \"''''\",\n  \"'('\",\n  \"'(#'\",\n  \"'(:'\",\n  \"'(:~'\",\n  \"')'\",\n  \"'*'\",\n  \"'*'\",\n  \"','\",\n  \"'-->'\",\n  \"'.'\",\n  \"'/'\",\n  \"'/>'\",\n  \"':'\",\n  \"':)'\",\n  \"';'\",\n  \"'<!--'\",\n  \"'<![CDATA['\",\n  \"'<?'\",\n  \"'='\",\n  \"'>'\",\n  \"'?'\",\n  \"'?>'\",\n  \"'NaN'\",\n  \"'['\",\n  \"']'\",\n  \"']]>'\",\n  \"'after'\",\n  \"'all'\",\n  \"'allowing'\",\n  \"'ancestor'\",\n  \"'ancestor-or-self'\",\n  \"'and'\",\n  \"'any'\",\n  \"'append'\",\n  \"'array'\",\n  \"'as'\",\n  \"'ascending'\",\n  \"'at'\",\n  \"'attribute'\",\n  \"'base-uri'\",\n  \"'before'\",\n  \"'boundary-space'\",\n  \"'break'\",\n  \"'by'\",\n  \"'case'\",\n  \"'cast'\",\n  \"'castable'\",\n  \"'catch'\",\n  \"'check'\",\n  \"'child'\",\n  \"'collation'\",\n  \"'collection'\",\n  \"'comment'\",\n  \"'constraint'\",\n  \"'construction'\",\n  \"'contains'\",\n  \"'content'\",\n  \"'context'\",\n  \"'continue'\",\n  \"'copy'\",\n  \"'copy-namespaces'\",\n  \"'count'\",\n  \"'decimal-format'\",\n  \"'decimal-separator'\",\n  \"'declare'\",\n  \"'default'\",\n  \"'delete'\",\n  \"'descendant'\",\n  \"'descendant-or-self'\",\n  \"'descending'\",\n  \"'diacritics'\",\n  \"'different'\",\n  \"'digit'\",\n  \"'distance'\",\n  \"'div'\",\n  \"'document'\",\n  \"'document-node'\",\n  \"'element'\",\n  \"'else'\",\n  \"'empty'\",\n  \"'empty-sequence'\",\n  \"'encoding'\",\n  \"'end'\",\n  \"'entire'\",\n  \"'eq'\",\n  \"'every'\",\n  \"'exactly'\",\n  \"'except'\",\n  \"'exit'\",\n  \"'external'\",\n  \"'first'\",\n  \"'following'\",\n  \"'following-sibling'\",\n  \"'for'\",\n  \"'foreach'\",\n  \"'foreign'\",\n  \"'from'\",\n  \"'ft-option'\",\n  \"'ftand'\",\n  \"'ftnot'\",\n  \"'ftor'\",\n  \"'function'\",\n  \"'ge'\",\n  \"'greatest'\",\n  \"'group'\",\n  \"'grouping-separator'\",\n  \"'gt'\",\n  \"'idiv'\",\n  \"'if'\",\n  \"'import'\",\n  \"'in'\",\n  \"'index'\",\n  \"'infinity'\",\n  \"'inherit'\",\n  \"'insensitive'\",\n  \"'insert'\",\n  \"'instance'\",\n  \"'integrity'\",\n  \"'intersect'\",\n  \"'into'\",\n  \"'is'\",\n  \"'item'\",\n  \"'json'\",\n  \"'json-item'\",\n  \"'key'\",\n  \"'language'\",\n  \"'last'\",\n  \"'lax'\",\n  \"'le'\",\n  \"'least'\",\n  \"'let'\",\n  \"'levels'\",\n  \"'loop'\",\n  \"'lowercase'\",\n  \"'lt'\",\n  \"'minus-sign'\",\n  \"'mod'\",\n  \"'modify'\",\n  \"'module'\",\n  \"'most'\",\n  \"'namespace'\",\n  \"'namespace-node'\",\n  \"'ne'\",\n  \"'next'\",\n  \"'no'\",\n  \"'no-inherit'\",\n  \"'no-preserve'\",\n  \"'node'\",\n  \"'nodes'\",\n  \"'not'\",\n  \"'object'\",\n  \"'occurs'\",\n  \"'of'\",\n  \"'on'\",\n  \"'only'\",\n  \"'option'\",\n  \"'or'\",\n  \"'order'\",\n  \"'ordered'\",\n  \"'ordering'\",\n  \"'paragraph'\",\n  \"'paragraphs'\",\n  \"'parent'\",\n  \"'pattern-separator'\",\n  \"'per-mille'\",\n  \"'percent'\",\n  \"'phrase'\",\n  \"'position'\",\n  \"'preceding'\",\n  \"'preceding-sibling'\",\n  \"'preserve'\",\n  \"'previous'\",\n  \"'processing-instruction'\",\n  \"'relationship'\",\n  \"'rename'\",\n  \"'replace'\",\n  \"'return'\",\n  \"'returning'\",\n  \"'revalidation'\",\n  \"'same'\",\n  \"'satisfies'\",\n  \"'schema'\",\n  \"'schema-attribute'\",\n  \"'schema-element'\",\n  \"'score'\",\n  \"'self'\",\n  \"'sensitive'\",\n  \"'sentence'\",\n  \"'sentences'\",\n  \"'skip'\",\n  \"'sliding'\",\n  \"'some'\",\n  \"'stable'\",\n  \"'start'\",\n  \"'stemming'\",\n  \"'stop'\",\n  \"'strict'\",\n  \"'strip'\",\n  \"'structured-item'\",\n  \"'switch'\",\n  \"'text'\",\n  \"'then'\",\n  \"'thesaurus'\",\n  \"'times'\",\n  \"'to'\",\n  \"'treat'\",\n  \"'try'\",\n  \"'tumbling'\",\n  \"'type'\",\n  \"'typeswitch'\",\n  \"'union'\",\n  \"'unique'\",\n  \"'unordered'\",\n  \"'updating'\",\n  \"'uppercase'\",\n  \"'using'\",\n  \"'validate'\",\n  \"'value'\",\n  \"'variable'\",\n  \"'version'\",\n  \"'weight'\",\n  \"'when'\",\n  \"'where'\",\n  \"'while'\",\n  \"'wildcards'\",\n  \"'window'\",\n  \"'with'\",\n  \"'without'\",\n  \"'word'\",\n  \"'words'\",\n  \"'xquery'\",\n  \"'zero-digit'\",\n  \"'{'\",\n  \"'{{'\",\n  \"'|'\",\n  \"'}'\",\n  \"'}}'\"\n];\n\n// End\n\n},{}],\"/node_modules/xqlint/lib/lexers/XQueryTokenizer.js\":[function(_dereq_,module,exports){\n// This file was generated on Thu Jul 24, 2014 15:01 (UTC+01) by REx v5.30 which is Copyright (c) 1979-2014 by Gunther Rademacher <grd@gmx.net>\n// REx command line: XQueryTokenizer.ebnf -ll 2 -backtrack -tree -javascript -a xqlint\n\n                                                            // line 2 \"XQueryTokenizer.ebnf\"\n                                                            var XQueryTokenizer = exports.XQueryTokenizer = function XQueryTokenizer(string, parsingEventHandler)\n                                                            {\n                                                              init(string, parsingEventHandler);\n                                                            // line 9 \"XQueryTokenizer.js\"\n  var self = this;\n\n  this.ParseException = function(b, e, s, o, x)\n  {\n    var\n      begin = b,\n      end = e,\n      state = s,\n      offending = o,\n      expected = x;\n\n    this.getBegin = function() {return begin;};\n    this.getEnd = function() {return end;};\n    this.getState = function() {return state;};\n    this.getExpected = function() {return expected;};\n    this.getOffending = function() {return offending;};\n\n    this.getMessage = function()\n    {\n      return offending < 0 ? \"lexical analysis failed\" : \"syntax error\";\n    };\n  };\n\n  function init(string, parsingEventHandler)\n  {\n    eventHandler = parsingEventHandler;\n    input = string;\n    size = string.length;\n    reset(0, 0, 0);\n  }\n\n  this.getInput = function()\n  {\n    return input;\n  };\n\n  function reset(l, b, e)\n  {\n            b0 = b; e0 = b;\n    l1 = l; b1 = b; e1 = e;\n    end = e;\n    eventHandler.reset(input);\n  }\n\n  this.getOffendingToken = function(e)\n  {\n    var o = e.getOffending();\n    return o >= 0 ? XQueryTokenizer.TOKEN[o] : null;\n  };\n\n  this.getExpectedTokenSet = function(e)\n  {\n    var expected;\n    if (e.getExpected() < 0)\n    {\n      expected = XQueryTokenizer.getTokenSet(- e.getState());\n    }\n    else\n    {\n      expected = [XQueryTokenizer.TOKEN[e.getExpected()]];\n    }\n    return expected;\n  };\n\n  this.getErrorMessage = function(e)\n  {\n    var tokenSet = this.getExpectedTokenSet(e);\n    var found = this.getOffendingToken(e);\n    var prefix = input.substring(0, e.getBegin());\n    var lines = prefix.split(\"\\n\");\n    var line = lines.length;\n    var column = lines[line - 1].length + 1;\n    var size = e.getEnd() - e.getBegin();\n    return e.getMessage()\n         + (found == null ? \"\" : \", found \" + found)\n         + \"\\nwhile expecting \"\n         + (tokenSet.length == 1 ? tokenSet[0] : (\"[\" + tokenSet.join(\", \") + \"]\"))\n         + \"\\n\"\n         + (size == 0 || found != null ? \"\" : \"after successfully scanning \" + size + \" characters beginning \")\n         + \"at line \" + line + \", column \" + column + \":\\n...\"\n         + input.substring(e.getBegin(), Math.min(input.length, e.getBegin() + 64))\n         + \"...\";\n  };\n\n  this.parse_start = function()\n  {\n    eventHandler.startNonterminal(\"start\", e0);\n    lookahead1W(14);                // ModuleDecl | Annotation | OptionDecl | Operator | Variable | Tag | AttrTest |\n                                    // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // S^WS | EOF | '!' | '\"' | \"'\" | '(' | '(#' | '(:' | '(:~' | ')' | ',' | '.' |\n                                    // '/' | ':' | ';' | '<!--' | '<![CDATA[' | '<?' | '[' | ']' | 'after' |\n                                    // 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'as' | 'ascending' |\n                                    // 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' |\n                                    // 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'last' |\n                                    // 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' |\n                                    // 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'only' | 'option' |\n                                    // 'or' | 'order' | 'ordered' | 'ordering' | 'parent' | 'preceding' |\n                                    // 'preceding-sibling' | 'processing-instruction' | 'rename' | 'replace' |\n                                    // 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'switch' | 'text' | 'to' | 'treat' | 'try' |\n                                    // 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // 'xquery' | '{' | '|' | '}'\n    switch (l1)\n    {\n    case 55:                        // '<![CDATA['\n      shift(55);                    // '<![CDATA['\n      break;\n    case 54:                        // '<!--'\n      shift(54);                    // '<!--'\n      break;\n    case 56:                        // '<?'\n      shift(56);                    // '<?'\n      break;\n    case 40:                        // '(#'\n      shift(40);                    // '(#'\n      break;\n    case 42:                        // '(:~'\n      shift(42);                    // '(:~'\n      break;\n    case 41:                        // '(:'\n      shift(41);                    // '(:'\n      break;\n    case 35:                        // '\"'\n      shift(35);                    // '\"'\n      break;\n    case 38:                        // \"'\"\n      shift(38);                    // \"'\"\n      break;\n    case 274:                       // '}'\n      shift(274);                   // '}'\n      break;\n    case 271:                       // '{'\n      shift(271);                   // '{'\n      break;\n    case 39:                        // '('\n      shift(39);                    // '('\n      break;\n    case 43:                        // ')'\n      shift(43);                    // ')'\n      break;\n    case 49:                        // '/'\n      shift(49);                    // '/'\n      break;\n    case 62:                        // '['\n      shift(62);                    // '['\n      break;\n    case 63:                        // ']'\n      shift(63);                    // ']'\n      break;\n    case 46:                        // ','\n      shift(46);                    // ','\n      break;\n    case 48:                        // '.'\n      shift(48);                    // '.'\n      break;\n    case 53:                        // ';'\n      shift(53);                    // ';'\n      break;\n    case 51:                        // ':'\n      shift(51);                    // ':'\n      break;\n    case 34:                        // '!'\n      shift(34);                    // '!'\n      break;\n    case 273:                       // '|'\n      shift(273);                   // '|'\n      break;\n    case 2:                         // Annotation\n      shift(2);                     // Annotation\n      break;\n    case 1:                         // ModuleDecl\n      shift(1);                     // ModuleDecl\n      break;\n    case 3:                         // OptionDecl\n      shift(3);                     // OptionDecl\n      break;\n    case 12:                        // AttrTest\n      shift(12);                    // AttrTest\n      break;\n    case 13:                        // Wildcard\n      shift(13);                    // Wildcard\n      break;\n    case 15:                        // IntegerLiteral\n      shift(15);                    // IntegerLiteral\n      break;\n    case 16:                        // DecimalLiteral\n      shift(16);                    // DecimalLiteral\n      break;\n    case 17:                        // DoubleLiteral\n      shift(17);                    // DoubleLiteral\n      break;\n    case 5:                         // Variable\n      shift(5);                     // Variable\n      break;\n    case 6:                         // Tag\n      shift(6);                     // Tag\n      break;\n    case 4:                         // Operator\n      shift(4);                     // Operator\n      break;\n    case 33:                        // EOF\n      shift(33);                    // EOF\n      break;\n    default:\n      parse_EQName();\n    }\n    eventHandler.endNonterminal(\"start\", e0);\n  };\n\n  this.parse_StartTag = function()\n  {\n    eventHandler.startNonterminal(\"StartTag\", e0);\n    lookahead1W(8);                 // QName | S^WS | EOF | '\"' | \"'\" | '/>' | '=' | '>'\n    switch (l1)\n    {\n    case 58:                        // '>'\n      shift(58);                    // '>'\n      break;\n    case 50:                        // '/>'\n      shift(50);                    // '/>'\n      break;\n    case 27:                        // QName\n      shift(27);                    // QName\n      break;\n    case 57:                        // '='\n      shift(57);                    // '='\n      break;\n    case 35:                        // '\"'\n      shift(35);                    // '\"'\n      break;\n    case 38:                        // \"'\"\n      shift(38);                    // \"'\"\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"StartTag\", e0);\n  };\n\n  this.parse_TagContent = function()\n  {\n    eventHandler.startNonterminal(\"TagContent\", e0);\n    lookahead1(11);                 // Tag | EndTag | PredefinedEntityRef | ElementContentChar | CharRef | EOF |\n                                    // '<!--' | '<![CDATA[' | '{' | '{{' | '}}'\n    switch (l1)\n    {\n    case 23:                        // ElementContentChar\n      shift(23);                    // ElementContentChar\n      break;\n    case 6:                         // Tag\n      shift(6);                     // Tag\n      break;\n    case 7:                         // EndTag\n      shift(7);                     // EndTag\n      break;\n    case 55:                        // '<![CDATA['\n      shift(55);                    // '<![CDATA['\n      break;\n    case 54:                        // '<!--'\n      shift(54);                    // '<!--'\n      break;\n    case 18:                        // PredefinedEntityRef\n      shift(18);                    // PredefinedEntityRef\n      break;\n    case 29:                        // CharRef\n      shift(29);                    // CharRef\n      break;\n    case 272:                       // '{{'\n      shift(272);                   // '{{'\n      break;\n    case 275:                       // '}}'\n      shift(275);                   // '}}'\n      break;\n    case 271:                       // '{'\n      shift(271);                   // '{'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"TagContent\", e0);\n  };\n\n  this.parse_AposAttr = function()\n  {\n    eventHandler.startNonterminal(\"AposAttr\", e0);\n    lookahead1(10);                 // PredefinedEntityRef | EscapeApos | AposAttrContentChar | CharRef | EOF | \"'\" |\n                                    // '{' | '{{' | '}}'\n    switch (l1)\n    {\n    case 20:                        // EscapeApos\n      shift(20);                    // EscapeApos\n      break;\n    case 25:                        // AposAttrContentChar\n      shift(25);                    // AposAttrContentChar\n      break;\n    case 18:                        // PredefinedEntityRef\n      shift(18);                    // PredefinedEntityRef\n      break;\n    case 29:                        // CharRef\n      shift(29);                    // CharRef\n      break;\n    case 272:                       // '{{'\n      shift(272);                   // '{{'\n      break;\n    case 275:                       // '}}'\n      shift(275);                   // '}}'\n      break;\n    case 271:                       // '{'\n      shift(271);                   // '{'\n      break;\n    case 38:                        // \"'\"\n      shift(38);                    // \"'\"\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"AposAttr\", e0);\n  };\n\n  this.parse_QuotAttr = function()\n  {\n    eventHandler.startNonterminal(\"QuotAttr\", e0);\n    lookahead1(9);                  // PredefinedEntityRef | EscapeQuot | QuotAttrContentChar | CharRef | EOF | '\"' |\n                                    // '{' | '{{' | '}}'\n    switch (l1)\n    {\n    case 19:                        // EscapeQuot\n      shift(19);                    // EscapeQuot\n      break;\n    case 24:                        // QuotAttrContentChar\n      shift(24);                    // QuotAttrContentChar\n      break;\n    case 18:                        // PredefinedEntityRef\n      shift(18);                    // PredefinedEntityRef\n      break;\n    case 29:                        // CharRef\n      shift(29);                    // CharRef\n      break;\n    case 272:                       // '{{'\n      shift(272);                   // '{{'\n      break;\n    case 275:                       // '}}'\n      shift(275);                   // '}}'\n      break;\n    case 271:                       // '{'\n      shift(271);                   // '{'\n      break;\n    case 35:                        // '\"'\n      shift(35);                    // '\"'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"QuotAttr\", e0);\n  };\n\n  this.parse_CData = function()\n  {\n    eventHandler.startNonterminal(\"CData\", e0);\n    lookahead1(1);                  // CDataSectionContents | EOF | ']]>'\n    switch (l1)\n    {\n    case 11:                        // CDataSectionContents\n      shift(11);                    // CDataSectionContents\n      break;\n    case 64:                        // ']]>'\n      shift(64);                    // ']]>'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"CData\", e0);\n  };\n\n  this.parse_XMLComment = function()\n  {\n    eventHandler.startNonterminal(\"XMLComment\", e0);\n    lookahead1(0);                  // DirCommentContents | EOF | '-->'\n    switch (l1)\n    {\n    case 9:                         // DirCommentContents\n      shift(9);                     // DirCommentContents\n      break;\n    case 47:                        // '-->'\n      shift(47);                    // '-->'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"XMLComment\", e0);\n  };\n\n  this.parse_PI = function()\n  {\n    eventHandler.startNonterminal(\"PI\", e0);\n    lookahead1(3);                  // DirPIContents | EOF | '?' | '?>'\n    switch (l1)\n    {\n    case 10:                        // DirPIContents\n      shift(10);                    // DirPIContents\n      break;\n    case 59:                        // '?'\n      shift(59);                    // '?'\n      break;\n    case 60:                        // '?>'\n      shift(60);                    // '?>'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"PI\", e0);\n  };\n\n  this.parse_Pragma = function()\n  {\n    eventHandler.startNonterminal(\"Pragma\", e0);\n    lookahead1(2);                  // PragmaContents | EOF | '#' | '#)'\n    switch (l1)\n    {\n    case 8:                         // PragmaContents\n      shift(8);                     // PragmaContents\n      break;\n    case 36:                        // '#'\n      shift(36);                    // '#'\n      break;\n    case 37:                        // '#)'\n      shift(37);                    // '#)'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"Pragma\", e0);\n  };\n\n  this.parse_Comment = function()\n  {\n    eventHandler.startNonterminal(\"Comment\", e0);\n    lookahead1(4);                  // CommentContents | EOF | '(:' | ':)'\n    switch (l1)\n    {\n    case 52:                        // ':)'\n      shift(52);                    // ':)'\n      break;\n    case 41:                        // '(:'\n      shift(41);                    // '(:'\n      break;\n    case 30:                        // CommentContents\n      shift(30);                    // CommentContents\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"Comment\", e0);\n  };\n\n  this.parse_CommentDoc = function()\n  {\n    eventHandler.startNonterminal(\"CommentDoc\", e0);\n    lookahead1(5);                  // DocTag | DocCommentContents | EOF | '(:' | ':)'\n    switch (l1)\n    {\n    case 31:                        // DocTag\n      shift(31);                    // DocTag\n      break;\n    case 32:                        // DocCommentContents\n      shift(32);                    // DocCommentContents\n      break;\n    case 52:                        // ':)'\n      shift(52);                    // ':)'\n      break;\n    case 41:                        // '(:'\n      shift(41);                    // '(:'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"CommentDoc\", e0);\n  };\n\n  this.parse_QuotString = function()\n  {\n    eventHandler.startNonterminal(\"QuotString\", e0);\n    lookahead1(6);                  // PredefinedEntityRef | EscapeQuot | QuotChar | CharRef | EOF | '\"'\n    switch (l1)\n    {\n    case 18:                        // PredefinedEntityRef\n      shift(18);                    // PredefinedEntityRef\n      break;\n    case 29:                        // CharRef\n      shift(29);                    // CharRef\n      break;\n    case 19:                        // EscapeQuot\n      shift(19);                    // EscapeQuot\n      break;\n    case 21:                        // QuotChar\n      shift(21);                    // QuotChar\n      break;\n    case 35:                        // '\"'\n      shift(35);                    // '\"'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"QuotString\", e0);\n  };\n\n  this.parse_AposString = function()\n  {\n    eventHandler.startNonterminal(\"AposString\", e0);\n    lookahead1(7);                  // PredefinedEntityRef | EscapeApos | AposChar | CharRef | EOF | \"'\"\n    switch (l1)\n    {\n    case 18:                        // PredefinedEntityRef\n      shift(18);                    // PredefinedEntityRef\n      break;\n    case 29:                        // CharRef\n      shift(29);                    // CharRef\n      break;\n    case 20:                        // EscapeApos\n      shift(20);                    // EscapeApos\n      break;\n    case 22:                        // AposChar\n      shift(22);                    // AposChar\n      break;\n    case 38:                        // \"'\"\n      shift(38);                    // \"'\"\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"AposString\", e0);\n  };\n\n  this.parse_Prefix = function()\n  {\n    eventHandler.startNonterminal(\"Prefix\", e0);\n    lookahead1W(13);                // NCName^Token | S^WS | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'first' | 'following' | 'following-sibling' | 'for' |\n                                    // 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' |\n                                    // 'in' | 'index' | 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' |\n                                    // 'is' | 'item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'switch' | 'text' | 'to' | 'treat' | 'try' |\n                                    // 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // 'xquery'\n    whitespace();\n    parse_NCName();\n    eventHandler.endNonterminal(\"Prefix\", e0);\n  };\n\n  this.parse__EQName = function()\n  {\n    eventHandler.startNonterminal(\"_EQName\", e0);\n    lookahead1W(12);                // EQName^Token | S^WS | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'first' | 'following' | 'following-sibling' | 'for' |\n                                    // 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' |\n                                    // 'in' | 'index' | 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' |\n                                    // 'is' | 'item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'switch' | 'text' | 'to' | 'treat' | 'try' |\n                                    // 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // 'xquery'\n    whitespace();\n    parse_EQName();\n    eventHandler.endNonterminal(\"_EQName\", e0);\n  };\n\n  function parse_EQName()\n  {\n    eventHandler.startNonterminal(\"EQName\", e0);\n    switch (l1)\n    {\n    case 77:                        // 'attribute'\n      shift(77);                    // 'attribute'\n      break;\n    case 91:                        // 'comment'\n      shift(91);                    // 'comment'\n      break;\n    case 115:                       // 'document-node'\n      shift(115);                   // 'document-node'\n      break;\n    case 116:                       // 'element'\n      shift(116);                   // 'element'\n      break;\n    case 119:                       // 'empty-sequence'\n      shift(119);                   // 'empty-sequence'\n      break;\n    case 140:                       // 'function'\n      shift(140);                   // 'function'\n      break;\n    case 147:                       // 'if'\n      shift(147);                   // 'if'\n      break;\n    case 160:                       // 'item'\n      shift(160);                   // 'item'\n      break;\n    case 180:                       // 'namespace-node'\n      shift(180);                   // 'namespace-node'\n      break;\n    case 186:                       // 'node'\n      shift(186);                   // 'node'\n      break;\n    case 211:                       // 'processing-instruction'\n      shift(211);                   // 'processing-instruction'\n      break;\n    case 221:                       // 'schema-attribute'\n      shift(221);                   // 'schema-attribute'\n      break;\n    case 222:                       // 'schema-element'\n      shift(222);                   // 'schema-element'\n      break;\n    case 238:                       // 'switch'\n      shift(238);                   // 'switch'\n      break;\n    case 239:                       // 'text'\n      shift(239);                   // 'text'\n      break;\n    case 248:                       // 'typeswitch'\n      shift(248);                   // 'typeswitch'\n      break;\n    default:\n      parse_FunctionName();\n    }\n    eventHandler.endNonterminal(\"EQName\", e0);\n  }\n\n  function parse_FunctionName()\n  {\n    eventHandler.startNonterminal(\"FunctionName\", e0);\n    switch (l1)\n    {\n    case 14:                        // EQName^Token\n      shift(14);                    // EQName^Token\n      break;\n    case 65:                        // 'after'\n      shift(65);                    // 'after'\n      break;\n    case 68:                        // 'ancestor'\n      shift(68);                    // 'ancestor'\n      break;\n    case 69:                        // 'ancestor-or-self'\n      shift(69);                    // 'ancestor-or-self'\n      break;\n    case 70:                        // 'and'\n      shift(70);                    // 'and'\n      break;\n    case 74:                        // 'as'\n      shift(74);                    // 'as'\n      break;\n    case 75:                        // 'ascending'\n      shift(75);                    // 'ascending'\n      break;\n    case 79:                        // 'before'\n      shift(79);                    // 'before'\n      break;\n    case 83:                        // 'case'\n      shift(83);                    // 'case'\n      break;\n    case 84:                        // 'cast'\n      shift(84);                    // 'cast'\n      break;\n    case 85:                        // 'castable'\n      shift(85);                    // 'castable'\n      break;\n    case 88:                        // 'child'\n      shift(88);                    // 'child'\n      break;\n    case 89:                        // 'collation'\n      shift(89);                    // 'collation'\n      break;\n    case 98:                        // 'copy'\n      shift(98);                    // 'copy'\n      break;\n    case 100:                       // 'count'\n      shift(100);                   // 'count'\n      break;\n    case 103:                       // 'declare'\n      shift(103);                   // 'declare'\n      break;\n    case 104:                       // 'default'\n      shift(104);                   // 'default'\n      break;\n    case 105:                       // 'delete'\n      shift(105);                   // 'delete'\n      break;\n    case 106:                       // 'descendant'\n      shift(106);                   // 'descendant'\n      break;\n    case 107:                       // 'descendant-or-self'\n      shift(107);                   // 'descendant-or-self'\n      break;\n    case 108:                       // 'descending'\n      shift(108);                   // 'descending'\n      break;\n    case 113:                       // 'div'\n      shift(113);                   // 'div'\n      break;\n    case 114:                       // 'document'\n      shift(114);                   // 'document'\n      break;\n    case 117:                       // 'else'\n      shift(117);                   // 'else'\n      break;\n    case 118:                       // 'empty'\n      shift(118);                   // 'empty'\n      break;\n    case 121:                       // 'end'\n      shift(121);                   // 'end'\n      break;\n    case 123:                       // 'eq'\n      shift(123);                   // 'eq'\n      break;\n    case 124:                       // 'every'\n      shift(124);                   // 'every'\n      break;\n    case 126:                       // 'except'\n      shift(126);                   // 'except'\n      break;\n    case 129:                       // 'first'\n      shift(129);                   // 'first'\n      break;\n    case 130:                       // 'following'\n      shift(130);                   // 'following'\n      break;\n    case 131:                       // 'following-sibling'\n      shift(131);                   // 'following-sibling'\n      break;\n    case 132:                       // 'for'\n      shift(132);                   // 'for'\n      break;\n    case 141:                       // 'ge'\n      shift(141);                   // 'ge'\n      break;\n    case 143:                       // 'group'\n      shift(143);                   // 'group'\n      break;\n    case 145:                       // 'gt'\n      shift(145);                   // 'gt'\n      break;\n    case 146:                       // 'idiv'\n      shift(146);                   // 'idiv'\n      break;\n    case 148:                       // 'import'\n      shift(148);                   // 'import'\n      break;\n    case 154:                       // 'insert'\n      shift(154);                   // 'insert'\n      break;\n    case 155:                       // 'instance'\n      shift(155);                   // 'instance'\n      break;\n    case 157:                       // 'intersect'\n      shift(157);                   // 'intersect'\n      break;\n    case 158:                       // 'into'\n      shift(158);                   // 'into'\n      break;\n    case 159:                       // 'is'\n      shift(159);                   // 'is'\n      break;\n    case 165:                       // 'last'\n      shift(165);                   // 'last'\n      break;\n    case 167:                       // 'le'\n      shift(167);                   // 'le'\n      break;\n    case 169:                       // 'let'\n      shift(169);                   // 'let'\n      break;\n    case 173:                       // 'lt'\n      shift(173);                   // 'lt'\n      break;\n    case 175:                       // 'mod'\n      shift(175);                   // 'mod'\n      break;\n    case 176:                       // 'modify'\n      shift(176);                   // 'modify'\n      break;\n    case 177:                       // 'module'\n      shift(177);                   // 'module'\n      break;\n    case 179:                       // 'namespace'\n      shift(179);                   // 'namespace'\n      break;\n    case 181:                       // 'ne'\n      shift(181);                   // 'ne'\n      break;\n    case 193:                       // 'only'\n      shift(193);                   // 'only'\n      break;\n    case 195:                       // 'or'\n      shift(195);                   // 'or'\n      break;\n    case 196:                       // 'order'\n      shift(196);                   // 'order'\n      break;\n    case 197:                       // 'ordered'\n      shift(197);                   // 'ordered'\n      break;\n    case 201:                       // 'parent'\n      shift(201);                   // 'parent'\n      break;\n    case 207:                       // 'preceding'\n      shift(207);                   // 'preceding'\n      break;\n    case 208:                       // 'preceding-sibling'\n      shift(208);                   // 'preceding-sibling'\n      break;\n    case 213:                       // 'rename'\n      shift(213);                   // 'rename'\n      break;\n    case 214:                       // 'replace'\n      shift(214);                   // 'replace'\n      break;\n    case 215:                       // 'return'\n      shift(215);                   // 'return'\n      break;\n    case 219:                       // 'satisfies'\n      shift(219);                   // 'satisfies'\n      break;\n    case 224:                       // 'self'\n      shift(224);                   // 'self'\n      break;\n    case 230:                       // 'some'\n      shift(230);                   // 'some'\n      break;\n    case 231:                       // 'stable'\n      shift(231);                   // 'stable'\n      break;\n    case 232:                       // 'start'\n      shift(232);                   // 'start'\n      break;\n    case 243:                       // 'to'\n      shift(243);                   // 'to'\n      break;\n    case 244:                       // 'treat'\n      shift(244);                   // 'treat'\n      break;\n    case 245:                       // 'try'\n      shift(245);                   // 'try'\n      break;\n    case 249:                       // 'union'\n      shift(249);                   // 'union'\n      break;\n    case 251:                       // 'unordered'\n      shift(251);                   // 'unordered'\n      break;\n    case 255:                       // 'validate'\n      shift(255);                   // 'validate'\n      break;\n    case 261:                       // 'where'\n      shift(261);                   // 'where'\n      break;\n    case 265:                       // 'with'\n      shift(265);                   // 'with'\n      break;\n    case 269:                       // 'xquery'\n      shift(269);                   // 'xquery'\n      break;\n    case 67:                        // 'allowing'\n      shift(67);                    // 'allowing'\n      break;\n    case 76:                        // 'at'\n      shift(76);                    // 'at'\n      break;\n    case 78:                        // 'base-uri'\n      shift(78);                    // 'base-uri'\n      break;\n    case 80:                        // 'boundary-space'\n      shift(80);                    // 'boundary-space'\n      break;\n    case 81:                        // 'break'\n      shift(81);                    // 'break'\n      break;\n    case 86:                        // 'catch'\n      shift(86);                    // 'catch'\n      break;\n    case 93:                        // 'construction'\n      shift(93);                    // 'construction'\n      break;\n    case 96:                        // 'context'\n      shift(96);                    // 'context'\n      break;\n    case 97:                        // 'continue'\n      shift(97);                    // 'continue'\n      break;\n    case 99:                        // 'copy-namespaces'\n      shift(99);                    // 'copy-namespaces'\n      break;\n    case 101:                       // 'decimal-format'\n      shift(101);                   // 'decimal-format'\n      break;\n    case 120:                       // 'encoding'\n      shift(120);                   // 'encoding'\n      break;\n    case 127:                       // 'exit'\n      shift(127);                   // 'exit'\n      break;\n    case 128:                       // 'external'\n      shift(128);                   // 'external'\n      break;\n    case 136:                       // 'ft-option'\n      shift(136);                   // 'ft-option'\n      break;\n    case 149:                       // 'in'\n      shift(149);                   // 'in'\n      break;\n    case 150:                       // 'index'\n      shift(150);                   // 'index'\n      break;\n    case 156:                       // 'integrity'\n      shift(156);                   // 'integrity'\n      break;\n    case 166:                       // 'lax'\n      shift(166);                   // 'lax'\n      break;\n    case 187:                       // 'nodes'\n      shift(187);                   // 'nodes'\n      break;\n    case 194:                       // 'option'\n      shift(194);                   // 'option'\n      break;\n    case 198:                       // 'ordering'\n      shift(198);                   // 'ordering'\n      break;\n    case 217:                       // 'revalidation'\n      shift(217);                   // 'revalidation'\n      break;\n    case 220:                       // 'schema'\n      shift(220);                   // 'schema'\n      break;\n    case 223:                       // 'score'\n      shift(223);                   // 'score'\n      break;\n    case 229:                       // 'sliding'\n      shift(229);                   // 'sliding'\n      break;\n    case 235:                       // 'strict'\n      shift(235);                   // 'strict'\n      break;\n    case 246:                       // 'tumbling'\n      shift(246);                   // 'tumbling'\n      break;\n    case 247:                       // 'type'\n      shift(247);                   // 'type'\n      break;\n    case 252:                       // 'updating'\n      shift(252);                   // 'updating'\n      break;\n    case 256:                       // 'value'\n      shift(256);                   // 'value'\n      break;\n    case 257:                       // 'variable'\n      shift(257);                   // 'variable'\n      break;\n    case 258:                       // 'version'\n      shift(258);                   // 'version'\n      break;\n    case 262:                       // 'while'\n      shift(262);                   // 'while'\n      break;\n    case 92:                        // 'constraint'\n      shift(92);                    // 'constraint'\n      break;\n    case 171:                       // 'loop'\n      shift(171);                   // 'loop'\n      break;\n    default:\n      shift(216);                   // 'returning'\n    }\n    eventHandler.endNonterminal(\"FunctionName\", e0);\n  }\n\n  function parse_NCName()\n  {\n    eventHandler.startNonterminal(\"NCName\", e0);\n    switch (l1)\n    {\n    case 26:                        // NCName^Token\n      shift(26);                    // NCName^Token\n      break;\n    case 65:                        // 'after'\n      shift(65);                    // 'after'\n      break;\n    case 70:                        // 'and'\n      shift(70);                    // 'and'\n      break;\n    case 74:                        // 'as'\n      shift(74);                    // 'as'\n      break;\n    case 75:                        // 'ascending'\n      shift(75);                    // 'ascending'\n      break;\n    case 79:                        // 'before'\n      shift(79);                    // 'before'\n      break;\n    case 83:                        // 'case'\n      shift(83);                    // 'case'\n      break;\n    case 84:                        // 'cast'\n      shift(84);                    // 'cast'\n      break;\n    case 85:                        // 'castable'\n      shift(85);                    // 'castable'\n      break;\n    case 89:                        // 'collation'\n      shift(89);                    // 'collation'\n      break;\n    case 100:                       // 'count'\n      shift(100);                   // 'count'\n      break;\n    case 104:                       // 'default'\n      shift(104);                   // 'default'\n      break;\n    case 108:                       // 'descending'\n      shift(108);                   // 'descending'\n      break;\n    case 113:                       // 'div'\n      shift(113);                   // 'div'\n      break;\n    case 117:                       // 'else'\n      shift(117);                   // 'else'\n      break;\n    case 118:                       // 'empty'\n      shift(118);                   // 'empty'\n      break;\n    case 121:                       // 'end'\n      shift(121);                   // 'end'\n      break;\n    case 123:                       // 'eq'\n      shift(123);                   // 'eq'\n      break;\n    case 126:                       // 'except'\n      shift(126);                   // 'except'\n      break;\n    case 132:                       // 'for'\n      shift(132);                   // 'for'\n      break;\n    case 141:                       // 'ge'\n      shift(141);                   // 'ge'\n      break;\n    case 143:                       // 'group'\n      shift(143);                   // 'group'\n      break;\n    case 145:                       // 'gt'\n      shift(145);                   // 'gt'\n      break;\n    case 146:                       // 'idiv'\n      shift(146);                   // 'idiv'\n      break;\n    case 155:                       // 'instance'\n      shift(155);                   // 'instance'\n      break;\n    case 157:                       // 'intersect'\n      shift(157);                   // 'intersect'\n      break;\n    case 158:                       // 'into'\n      shift(158);                   // 'into'\n      break;\n    case 159:                       // 'is'\n      shift(159);                   // 'is'\n      break;\n    case 167:                       // 'le'\n      shift(167);                   // 'le'\n      break;\n    case 169:                       // 'let'\n      shift(169);                   // 'let'\n      break;\n    case 173:                       // 'lt'\n      shift(173);                   // 'lt'\n      break;\n    case 175:                       // 'mod'\n      shift(175);                   // 'mod'\n      break;\n    case 176:                       // 'modify'\n      shift(176);                   // 'modify'\n      break;\n    case 181:                       // 'ne'\n      shift(181);                   // 'ne'\n      break;\n    case 193:                       // 'only'\n      shift(193);                   // 'only'\n      break;\n    case 195:                       // 'or'\n      shift(195);                   // 'or'\n      break;\n    case 196:                       // 'order'\n      shift(196);                   // 'order'\n      break;\n    case 215:                       // 'return'\n      shift(215);                   // 'return'\n      break;\n    case 219:                       // 'satisfies'\n      shift(219);                   // 'satisfies'\n      break;\n    case 231:                       // 'stable'\n      shift(231);                   // 'stable'\n      break;\n    case 232:                       // 'start'\n      shift(232);                   // 'start'\n      break;\n    case 243:                       // 'to'\n      shift(243);                   // 'to'\n      break;\n    case 244:                       // 'treat'\n      shift(244);                   // 'treat'\n      break;\n    case 249:                       // 'union'\n      shift(249);                   // 'union'\n      break;\n    case 261:                       // 'where'\n      shift(261);                   // 'where'\n      break;\n    case 265:                       // 'with'\n      shift(265);                   // 'with'\n      break;\n    case 68:                        // 'ancestor'\n      shift(68);                    // 'ancestor'\n      break;\n    case 69:                        // 'ancestor-or-self'\n      shift(69);                    // 'ancestor-or-self'\n      break;\n    case 77:                        // 'attribute'\n      shift(77);                    // 'attribute'\n      break;\n    case 88:                        // 'child'\n      shift(88);                    // 'child'\n      break;\n    case 91:                        // 'comment'\n      shift(91);                    // 'comment'\n      break;\n    case 98:                        // 'copy'\n      shift(98);                    // 'copy'\n      break;\n    case 103:                       // 'declare'\n      shift(103);                   // 'declare'\n      break;\n    case 105:                       // 'delete'\n      shift(105);                   // 'delete'\n      break;\n    case 106:                       // 'descendant'\n      shift(106);                   // 'descendant'\n      break;\n    case 107:                       // 'descendant-or-self'\n      shift(107);                   // 'descendant-or-self'\n      break;\n    case 114:                       // 'document'\n      shift(114);                   // 'document'\n      break;\n    case 115:                       // 'document-node'\n      shift(115);                   // 'document-node'\n      break;\n    case 116:                       // 'element'\n      shift(116);                   // 'element'\n      break;\n    case 119:                       // 'empty-sequence'\n      shift(119);                   // 'empty-sequence'\n      break;\n    case 124:                       // 'every'\n      shift(124);                   // 'every'\n      break;\n    case 129:                       // 'first'\n      shift(129);                   // 'first'\n      break;\n    case 130:                       // 'following'\n      shift(130);                   // 'following'\n      break;\n    case 131:                       // 'following-sibling'\n      shift(131);                   // 'following-sibling'\n      break;\n    case 140:                       // 'function'\n      shift(140);                   // 'function'\n      break;\n    case 147:                       // 'if'\n      shift(147);                   // 'if'\n      break;\n    case 148:                       // 'import'\n      shift(148);                   // 'import'\n      break;\n    case 154:                       // 'insert'\n      shift(154);                   // 'insert'\n      break;\n    case 160:                       // 'item'\n      shift(160);                   // 'item'\n      break;\n    case 165:                       // 'last'\n      shift(165);                   // 'last'\n      break;\n    case 177:                       // 'module'\n      shift(177);                   // 'module'\n      break;\n    case 179:                       // 'namespace'\n      shift(179);                   // 'namespace'\n      break;\n    case 180:                       // 'namespace-node'\n      shift(180);                   // 'namespace-node'\n      break;\n    case 186:                       // 'node'\n      shift(186);                   // 'node'\n      break;\n    case 197:                       // 'ordered'\n      shift(197);                   // 'ordered'\n      break;\n    case 201:                       // 'parent'\n      shift(201);                   // 'parent'\n      break;\n    case 207:                       // 'preceding'\n      shift(207);                   // 'preceding'\n      break;\n    case 208:                       // 'preceding-sibling'\n      shift(208);                   // 'preceding-sibling'\n      break;\n    case 211:                       // 'processing-instruction'\n      shift(211);                   // 'processing-instruction'\n      break;\n    case 213:                       // 'rename'\n      shift(213);                   // 'rename'\n      break;\n    case 214:                       // 'replace'\n      shift(214);                   // 'replace'\n      break;\n    case 221:                       // 'schema-attribute'\n      shift(221);                   // 'schema-attribute'\n      break;\n    case 222:                       // 'schema-element'\n      shift(222);                   // 'schema-element'\n      break;\n    case 224:                       // 'self'\n      shift(224);                   // 'self'\n      break;\n    case 230:                       // 'some'\n      shift(230);                   // 'some'\n      break;\n    case 238:                       // 'switch'\n      shift(238);                   // 'switch'\n      break;\n    case 239:                       // 'text'\n      shift(239);                   // 'text'\n      break;\n    case 245:                       // 'try'\n      shift(245);                   // 'try'\n      break;\n    case 248:                       // 'typeswitch'\n      shift(248);                   // 'typeswitch'\n      break;\n    case 251:                       // 'unordered'\n      shift(251);                   // 'unordered'\n      break;\n    case 255:                       // 'validate'\n      shift(255);                   // 'validate'\n      break;\n    case 257:                       // 'variable'\n      shift(257);                   // 'variable'\n      break;\n    case 269:                       // 'xquery'\n      shift(269);                   // 'xquery'\n      break;\n    case 67:                        // 'allowing'\n      shift(67);                    // 'allowing'\n      break;\n    case 76:                        // 'at'\n      shift(76);                    // 'at'\n      break;\n    case 78:                        // 'base-uri'\n      shift(78);                    // 'base-uri'\n      break;\n    case 80:                        // 'boundary-space'\n      shift(80);                    // 'boundary-space'\n      break;\n    case 81:                        // 'break'\n      shift(81);                    // 'break'\n      break;\n    case 86:                        // 'catch'\n      shift(86);                    // 'catch'\n      break;\n    case 93:                        // 'construction'\n      shift(93);                    // 'construction'\n      break;\n    case 96:                        // 'context'\n      shift(96);                    // 'context'\n      break;\n    case 97:                        // 'continue'\n      shift(97);                    // 'continue'\n      break;\n    case 99:                        // 'copy-namespaces'\n      shift(99);                    // 'copy-namespaces'\n      break;\n    case 101:                       // 'decimal-format'\n      shift(101);                   // 'decimal-format'\n      break;\n    case 120:                       // 'encoding'\n      shift(120);                   // 'encoding'\n      break;\n    case 127:                       // 'exit'\n      shift(127);                   // 'exit'\n      break;\n    case 128:                       // 'external'\n      shift(128);                   // 'external'\n      break;\n    case 136:                       // 'ft-option'\n      shift(136);                   // 'ft-option'\n      break;\n    case 149:                       // 'in'\n      shift(149);                   // 'in'\n      break;\n    case 150:                       // 'index'\n      shift(150);                   // 'index'\n      break;\n    case 156:                       // 'integrity'\n      shift(156);                   // 'integrity'\n      break;\n    case 166:                       // 'lax'\n      shift(166);                   // 'lax'\n      break;\n    case 187:                       // 'nodes'\n      shift(187);                   // 'nodes'\n      break;\n    case 194:                       // 'option'\n      shift(194);                   // 'option'\n      break;\n    case 198:                       // 'ordering'\n      shift(198);                   // 'ordering'\n      break;\n    case 217:                       // 'revalidation'\n      shift(217);                   // 'revalidation'\n      break;\n    case 220:                       // 'schema'\n      shift(220);                   // 'schema'\n      break;\n    case 223:                       // 'score'\n      shift(223);                   // 'score'\n      break;\n    case 229:                       // 'sliding'\n      shift(229);                   // 'sliding'\n      break;\n    case 235:                       // 'strict'\n      shift(235);                   // 'strict'\n      break;\n    case 246:                       // 'tumbling'\n      shift(246);                   // 'tumbling'\n      break;\n    case 247:                       // 'type'\n      shift(247);                   // 'type'\n      break;\n    case 252:                       // 'updating'\n      shift(252);                   // 'updating'\n      break;\n    case 256:                       // 'value'\n      shift(256);                   // 'value'\n      break;\n    case 258:                       // 'version'\n      shift(258);                   // 'version'\n      break;\n    case 262:                       // 'while'\n      shift(262);                   // 'while'\n      break;\n    case 92:                        // 'constraint'\n      shift(92);                    // 'constraint'\n      break;\n    case 171:                       // 'loop'\n      shift(171);                   // 'loop'\n      break;\n    default:\n      shift(216);                   // 'returning'\n    }\n    eventHandler.endNonterminal(\"NCName\", e0);\n  }\n\n  function shift(t)\n  {\n    if (l1 == t)\n    {\n      whitespace();\n      eventHandler.terminal(XQueryTokenizer.TOKEN[l1], b1, e1 > size ? size : e1);\n      b0 = b1; e0 = e1; l1 = 0;\n    }\n    else\n    {\n      error(b1, e1, 0, l1, t);\n    }\n  }\n\n  function whitespace()\n  {\n    if (e0 != b1)\n    {\n      b0 = e0;\n      e0 = b1;\n      eventHandler.whitespace(b0, e0);\n    }\n  }\n\n  function matchW(set)\n  {\n    var code;\n    for (;;)\n    {\n      code = match(set);\n      if (code != 28)               // S^WS\n      {\n        break;\n      }\n    }\n    return code;\n  }\n\n  function lookahead1W(set)\n  {\n    if (l1 == 0)\n    {\n      l1 = matchW(set);\n      b1 = begin;\n      e1 = end;\n    }\n  }\n\n  function lookahead1(set)\n  {\n    if (l1 == 0)\n    {\n      l1 = match(set);\n      b1 = begin;\n      e1 = end;\n    }\n  }\n\n  function error(b, e, s, l, t)\n  {\n    throw new self.ParseException(b, e, s, l, t);\n  }\n\n  var lk, b0, e0;\n  var l1, b1, e1;\n  var eventHandler;\n\n  var input;\n  var size;\n  var begin;\n  var end;\n\n  function match(tokenSetId)\n  {\n    var nonbmp = false;\n    begin = end;\n    var current = end;\n    var result = XQueryTokenizer.INITIAL[tokenSetId];\n    var state = 0;\n\n    for (var code = result & 4095; code != 0; )\n    {\n      var charclass;\n      var c0 = current < size ? input.charCodeAt(current) : 0;\n      ++current;\n      if (c0 < 0x80)\n      {\n        charclass = XQueryTokenizer.MAP0[c0];\n      }\n      else if (c0 < 0xd800)\n      {\n        var c1 = c0 >> 4;\n        charclass = XQueryTokenizer.MAP1[(c0 & 15) + XQueryTokenizer.MAP1[(c1 & 31) + XQueryTokenizer.MAP1[c1 >> 5]]];\n      }\n      else\n      {\n        if (c0 < 0xdc00)\n        {\n          var c1 = current < size ? input.charCodeAt(current) : 0;\n          if (c1 >= 0xdc00 && c1 < 0xe000)\n          {\n            ++current;\n            c0 = ((c0 & 0x3ff) << 10) + (c1 & 0x3ff) + 0x10000;\n            nonbmp = true;\n          }\n        }\n        var lo = 0, hi = 5;\n        for (var m = 3; ; m = (hi + lo) >> 1)\n        {\n          if (XQueryTokenizer.MAP2[m] > c0) hi = m - 1;\n          else if (XQueryTokenizer.MAP2[6 + m] < c0) lo = m + 1;\n          else {charclass = XQueryTokenizer.MAP2[12 + m]; break;}\n          if (lo > hi) {charclass = 0; break;}\n        }\n      }\n\n      state = code;\n      var i0 = (charclass << 12) + code - 1;\n      code = XQueryTokenizer.TRANSITION[(i0 & 15) + XQueryTokenizer.TRANSITION[i0 >> 4]];\n\n      if (code > 4095)\n      {\n        result = code;\n        code &= 4095;\n        end = current;\n      }\n    }\n\n    result >>= 12;\n    if (result == 0)\n    {\n      end = current - 1;\n      var c1 = end < size ? input.charCodeAt(end) : 0;\n      if (c1 >= 0xdc00 && c1 < 0xe000) --end;\n      return error(begin, end, state, -1, -1);\n    }\n\n    if (nonbmp)\n    {\n      for (var i = result >> 9; i > 0; --i)\n      {\n        --end;\n        var c1 = end < size ? input.charCodeAt(end) : 0;\n        if (c1 >= 0xdc00 && c1 < 0xe000) --end;\n      }\n    }\n    else\n    {\n      end -= result >> 9;\n    }\n\n    return (result & 511) - 1;\n  }\n}\n\nXQueryTokenizer.getTokenSet = function(tokenSetId)\n{\n  var set = [];\n  var s = tokenSetId < 0 ? - tokenSetId : INITIAL[tokenSetId] & 4095;\n  for (var i = 0; i < 276; i += 32)\n  {\n    var j = i;\n    var i0 = (i >> 5) * 2062 + s - 1;\n    var i1 = i0 >> 2;\n    var i2 = i1 >> 2;\n    var f = XQueryTokenizer.EXPECTED[(i0 & 3) + XQueryTokenizer.EXPECTED[(i1 & 3) + XQueryTokenizer.EXPECTED[(i2 & 3) + XQueryTokenizer.EXPECTED[i2 >> 2]]]];\n    for ( ; f != 0; f >>>= 1, ++j)\n    {\n      if ((f & 1) != 0)\n      {\n        set.push(XQueryTokenizer.TOKEN[j]);\n      }\n    }\n  }\n  return set;\n};\n\nXQueryTokenizer.MAP0 =\n[\n  /*   0 */ 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5,\n  /*  36 */ 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 20, 21, 22, 23, 24,\n  /*  64 */ 25, 26, 27, 28, 29, 30, 27, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 31, 31, 33, 31, 31, 31, 31, 31, 31,\n  /*  91 */ 34, 35, 36, 35, 31, 35, 37, 38, 39, 40, 41, 42, 43, 44, 45, 31, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,\n  /* 118 */ 57, 58, 59, 60, 31, 61, 62, 63, 64, 35\n];\n\nXQueryTokenizer.MAP1 =\n[\n  /*   0 */ 108, 124, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 156, 181, 181, 181, 181,\n  /*  21 */ 181, 214, 215, 213, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214,\n  /*  42 */ 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214,\n  /*  63 */ 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214,\n  /*  84 */ 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214,\n  /* 105 */ 214, 214, 214, 247, 261, 277, 293, 309, 347, 363, 379, 416, 416, 416, 408, 331, 323, 331, 323, 331, 331,\n  /* 126 */ 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 433, 433, 433, 433, 433, 433, 433,\n  /* 147 */ 316, 331, 331, 331, 331, 331, 331, 331, 331, 394, 416, 416, 417, 415, 416, 416, 331, 331, 331, 331, 331,\n  /* 168 */ 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 416, 416, 416, 416, 416, 416, 416, 416,\n  /* 189 */ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,\n  /* 210 */ 416, 416, 416, 330, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331,\n  /* 231 */ 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 416, 66, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 256 */ 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,\n  /* 290 */ 15, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 27, 31,\n  /* 317 */ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 35, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,\n  /* 344 */ 31, 31, 31, 31, 32, 31, 31, 33, 31, 31, 31, 31, 31, 31, 34, 35, 36, 35, 31, 35, 37, 38, 39, 40, 41, 42, 43,\n  /* 371 */ 44, 45, 31, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 31, 61, 62, 63, 64, 35, 35, 35, 35,\n  /* 398 */ 35, 35, 35, 35, 35, 35, 35, 35, 31, 31, 35, 35, 35, 35, 35, 35, 35, 65, 35, 35, 35, 35, 35, 35, 35, 35, 35,\n  /* 425 */ 35, 35, 35, 35, 35, 35, 35, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65\n];\n\nXQueryTokenizer.MAP2 =\n[\n  /*  0 */ 57344, 63744, 64976, 65008, 65536, 983040, 63743, 64975, 65007, 65533, 983039, 1114111, 35, 31, 35, 31, 31,\n  /* 17 */ 35\n];\n\nXQueryTokenizer.INITIAL =\n[\n  /*  0 */ 1, 2, 36867, 45060, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15\n];\n\nXQueryTokenizer.TRANSITION =\n[\n  /*     0 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*    15 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*    30 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*    45 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*    60 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*    75 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*    90 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   105 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   120 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   135 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   150 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   165 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   180 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   195 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   210 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   225 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   240 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   255 */ 17590, 22908, 18836, 17152, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189,\n  /*   270 */ 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 17365, 21880, 18649, 18665, 19006, 17265, 22033,\n  /*   285 */ 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 17470, 17497, 17520, 17251,\n  /*   300 */ 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 18157, 21940,\n  /*   315 */ 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531,\n  /*   330 */ 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 17848, 17880, 18731, 17918, 36551,\n  /*   345 */ 17292, 17934, 17979, 18727, 18023, 36545, 18621, 18039, 18056, 18072, 18117, 18143, 18173, 18052, 18209,\n  /*   360 */ 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816,\n  /*   375 */ 32961, 17687, 18805, 18421, 18437, 18101, 17393, 18489, 18505, 18535, 17590, 17590, 17590, 17590, 17590,\n  /*   390 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   405 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   420 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   435 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   450 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   465 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   480 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   495 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   510 */ 17590, 17590, 18579, 21711, 17152, 19008, 19233, 20367, 19008, 28684, 30763, 36437, 17330, 17349, 18921,\n  /*   525 */ 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 17365, 21880, 18649, 18665, 19006, 17265,\n  /*   540 */ 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 17470, 17497, 17520,\n  /*   555 */ 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 18157,\n  /*   570 */ 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223,\n  /*   585 */ 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 17848, 17880, 18731, 17918,\n  /*   600 */ 36551, 17292, 17934, 17979, 18727, 18023, 36545, 18621, 18039, 18056, 18072, 18117, 18143, 18173, 18052,\n  /*   615 */ 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392,\n  /*   630 */ 17816, 32961, 17687, 18805, 18421, 18437, 18101, 17393, 18489, 18505, 18535, 17590, 17590, 17590, 17590,\n  /*   645 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   660 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   675 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   690 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   705 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   720 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   735 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   750 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   765 */ 17590, 17590, 17590, 20116, 18836, 18637, 19008, 19233, 21267, 19008, 17173, 30763, 36437, 17330, 17349,\n  /*   780 */ 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006,\n  /*   795 */ 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497,\n  /*   810 */ 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418,\n  /*   825 */ 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473,\n  /*   840 */ 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731,\n  /*   855 */ 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706,\n  /*   870 */ 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642,\n  /*   885 */ 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590,\n  /*   900 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   915 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   930 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   945 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   960 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   975 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   990 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1005 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1020 */ 17590, 17590, 17590, 17590, 18763, 18778, 18794, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330,\n  /*  1035 */ 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665,\n  /*  1050 */ 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952,\n  /*  1065 */ 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258,\n  /*  1080 */ 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617,\n  /*  1095 */ 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864,\n  /*  1110 */ 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143,\n  /*  1125 */ 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163,\n  /*  1140 */ 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590,\n  /*  1155 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1170 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1185 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1200 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1215 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1230 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1245 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1260 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1275 */ 17590, 17590, 17590, 17590, 17590, 18821, 22923, 18906, 19008, 19233, 17431, 19008, 17173, 30763, 36437,\n  /*  1290 */ 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18937, 21880, 18649,\n  /*  1305 */ 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 19054, 17311, 18658, 18999, 19008, 17447,\n  /*  1320 */ 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 18953, 21887, 17504, 17527,\n  /*  1335 */ 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946,\n  /*  1350 */ 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156,\n  /*  1365 */ 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117,\n  /*  1380 */ 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796,\n  /*  1395 */ 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590,\n  /*  1410 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1425 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1440 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1455 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1470 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1485 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1500 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1515 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1530 */ 17590, 17590, 17590, 17590, 17590, 17590, 21843, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763,\n  /*  1545 */ 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880,\n  /*  1560 */ 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008,\n  /*  1575 */ 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504,\n  /*  1590 */ 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737,\n  /*  1605 */ 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481,\n  /*  1620 */ 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072,\n  /*  1635 */ 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232,\n  /*  1650 */ 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535,\n  /*  1665 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1680 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1695 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1710 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1725 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1740 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1755 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1770 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1785 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21696, 18836, 18987, 19008, 19233, 20367, 19008, 17173,\n  /*  1800 */ 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452,\n  /*  1815 */ 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999,\n  /*  1830 */ 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887,\n  /*  1845 */ 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730,\n  /*  1860 */ 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620,\n  /*  1875 */ 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056,\n  /*  1890 */ 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403,\n  /*  1905 */ 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505,\n  /*  1920 */ 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1935 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1950 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1965 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1980 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1995 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2010 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2025 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2040 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22429, 20131, 18720, 19008, 19233, 20367, 19008,\n  /*  2055 */ 17173, 23559, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 18087, 17308, 17327, 17346, 18918,\n  /*  2070 */ 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 21242, 19111, 17311, 18658,\n  /*  2085 */ 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585,\n  /*  2100 */ 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176,\n  /*  2115 */ 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590,\n  /*  2130 */ 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039,\n  /*  2145 */ 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807,\n  /*  2160 */ 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747,\n  /*  2175 */ 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2190 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2205 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2220 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2235 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2250 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2265 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2280 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2295 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 19024, 18836, 18609, 19008, 19233, 20367,\n  /*  2310 */ 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346,\n  /*  2325 */ 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311,\n  /*  2340 */ 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559,\n  /*  2355 */ 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703,\n  /*  2370 */ 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832,\n  /*  2385 */ 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621,\n  /*  2400 */ 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376,\n  /*  2415 */ 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393,\n  /*  2430 */ 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2445 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2460 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2475 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2490 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2505 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2520 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2535 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2550 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 19081, 22444, 18987, 19008, 19233,\n  /*  2565 */ 20367, 19008, 19065, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327,\n  /*  2580 */ 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873,\n  /*  2595 */ 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543,\n  /*  2610 */ 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190,\n  /*  2625 */ 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753,\n  /*  2640 */ 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405,\n  /*  2655 */ 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312,\n  /*  2670 */ 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519,\n  /*  2685 */ 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2700 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2715 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2730 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2745 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2760 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2775 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2790 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2805 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21992, 22007, 18987, 19008,\n  /*  2820 */ 19233, 20367, 19008, 18690, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308,\n  /*  2835 */ 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127,\n  /*  2850 */ 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326,\n  /*  2865 */ 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661,\n  /*  2880 */ 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675,\n  /*  2895 */ 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681,\n  /*  2910 */ 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296,\n  /*  2925 */ 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437,\n  /*  2940 */ 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2955 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2970 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2985 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3000 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3015 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3030 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3045 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3060 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22414, 18836, 18987,\n  /*  3075 */ 19008, 19233, 30651, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 19138,\n  /*  3090 */ 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192,\n  /*  3105 */ 18127, 19280, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714,\n  /*  3120 */ 18326, 17543, 17559, 19172, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633,\n  /*  3135 */ 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892,\n  /*  3150 */ 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727,\n  /*  3165 */ 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963,\n  /*  3180 */ 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421,\n  /*  3195 */ 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3210 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3225 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3240 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3255 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3270 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3285 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3300 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3315 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21783, 18836,\n  /*  3330 */ 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355,\n  /*  3345 */ 19218, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535,\n  /*  3360 */ 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682,\n  /*  3375 */ 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217,\n  /*  3390 */ 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860,\n  /*  3405 */ 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979,\n  /*  3420 */ 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266,\n  /*  3435 */ 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805,\n  /*  3450 */ 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3465 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3480 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3495 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3510 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3525 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3540 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3555 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3570 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21651,\n  /*  3585 */ 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281,\n  /*  3600 */ 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421,\n  /*  3615 */ 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782,\n  /*  3630 */ 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467,\n  /*  3645 */ 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152,\n  /*  3660 */ 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934,\n  /*  3675 */ 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239,\n  /*  3690 */ 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645,\n  /*  3705 */ 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3720 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3735 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3750 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3765 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3780 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3795 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3810 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3825 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3840 */ 19249, 19265, 19307, 18888, 27857, 30536, 24401, 31444, 23357, 18888, 19351, 18888, 18890, 27211, 19370,\n  /*  3855 */ 27211, 27211, 19392, 24401, 31911, 24401, 24401, 25467, 18888, 18888, 18888, 18888, 18888, 25783, 27211,\n  /*  3870 */ 27211, 27211, 27211, 28537, 19440, 24401, 24401, 24401, 24401, 24036, 17994, 24060, 18888, 18888, 18888,\n  /*  3885 */ 18890, 19468, 27211, 27211, 27211, 27211, 19484, 35367, 19520, 24401, 24401, 24401, 19628, 18888, 29855,\n  /*  3900 */ 18888, 18888, 23086, 27211, 19538, 27211, 27211, 30756, 24012, 24401, 19560, 24401, 24401, 26750, 18888,\n  /*  3915 */ 18888, 19327, 27855, 27211, 27211, 19580, 17590, 24017, 24401, 24401, 19600, 25665, 18888, 18888, 28518,\n  /*  3930 */ 27211, 27212, 24016, 19620, 19868, 28435, 25722, 18889, 19644, 27211, 32888, 35852, 19868, 31018, 19694,\n  /*  3945 */ 19376, 19717, 22215, 19735, 22098, 19751, 35203, 19776, 19797, 19817, 19840, 25783, 31738, 24135, 19701,\n  /*  3960 */ 19856, 31015, 23516, 31008, 28311, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3975 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3990 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4005 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4020 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4035 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4050 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4065 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4080 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4095 */ 17590, 21768, 18836, 19307, 18888, 27857, 27904, 24401, 29183, 28015, 18888, 18888, 18888, 18890, 27211,\n  /*  4110 */ 27211, 27211, 27211, 19888, 24401, 24401, 24401, 24401, 22953, 18888, 18888, 18888, 18888, 18888, 25783,\n  /*  4125 */ 27211, 27211, 27211, 27211, 28537, 19440, 24401, 24401, 24401, 24401, 24036, 18881, 18888, 18888, 18888,\n  /*  4140 */ 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888,\n  /*  4155 */ 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750,\n  /*  4170 */ 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888,\n  /*  4185 */ 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018,\n  /*  4200 */ 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837,\n  /*  4215 */ 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590,\n  /*  4230 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4245 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4260 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4275 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4290 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4305 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4320 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4335 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4350 */ 17590, 17590, 22399, 18836, 19918, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921,\n  /*  4365 */ 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265,\n  /*  4380 */ 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520,\n  /*  4395 */ 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915,\n  /*  4410 */ 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223,\n  /*  4425 */ 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918,\n  /*  4440 */ 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052,\n  /*  4455 */ 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392,\n  /*  4470 */ 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590,\n  /*  4485 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4500 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4515 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4530 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4545 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4560 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4575 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4590 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4605 */ 17590, 17590, 17590, 21666, 18836, 19307, 18888, 27857, 27525, 24401, 29183, 21467, 18888, 18888, 18888,\n  /*  4620 */ 18890, 27211, 27211, 27211, 27211, 19946, 24401, 24401, 24401, 24401, 32382, 18888, 18888, 18888, 18888,\n  /*  4635 */ 18888, 25783, 27211, 27211, 27211, 27211, 28537, 19998, 24401, 24401, 24401, 24401, 31500, 18467, 18888,\n  /*  4650 */ 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 20021, 24401, 24401, 24401, 24401, 24401,\n  /*  4665 */ 34271, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 32926, 29908, 24401, 24401, 24401,\n  /*  4680 */ 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 20050, 22968, 24401, 24401, 24401, 18887,\n  /*  4695 */ 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889,\n  /*  4710 */ 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783,\n  /*  4725 */ 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590,\n  /*  4740 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4755 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4770 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4785 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4800 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4815 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4830 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4845 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4860 */ 17590, 17590, 17590, 17590, 20101, 19039, 20191, 20412, 20903, 17569, 20309, 20872, 25633, 20623, 20505,\n  /*  4875 */ 20218, 20242, 17189, 17208, 17281, 20355, 20265, 20306, 20328, 20383, 22490, 20796, 20619, 21354, 20654,\n  /*  4890 */ 20410, 20956, 21232, 20765, 17421, 20535, 17192, 18127, 22459, 20312, 25531, 22470, 20309, 20428, 18964,\n  /*  4905 */ 20466, 20491, 21342, 21070, 20521, 20682, 17714, 18326, 17543, 17559, 17585, 22497, 20559, 19504, 20279,\n  /*  4920 */ 20575, 20290, 20475, 20604, 20639, 20226, 20670, 17661, 21190, 17703, 21176, 17730, 19494, 20698, 20711,\n  /*  4935 */ 22480, 21046, 21116, 18971, 21130, 20727, 20755, 17675, 17753, 17832, 17590, 25518, 20394, 20781, 20831,\n  /*  4950 */ 20202, 20847, 21401, 17292, 17934, 17979, 18549, 20863, 20588, 25542, 20888, 20919, 18072, 18117, 20935,\n  /*  4965 */ 20972, 21032, 21062, 21086, 18239, 21102, 18563, 21146, 21162, 21206, 18351, 20949, 20902, 18340, 21222,\n  /*  4980 */ 21258, 21283, 18360, 20249, 17405, 21295, 21311, 21327, 20739, 20343, 21370, 21386, 21417, 17590, 17590,\n  /*  4995 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5010 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5025 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5040 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5055 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5070 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5085 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5100 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5115 */ 17590, 17590, 17590, 17590, 17590, 21977, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437,\n  /*  5130 */ 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 21452, 21880, 18649,\n  /*  5145 */ 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 21504,\n  /*  5160 */ 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527,\n  /*  5175 */ 17258, 36418, 36501, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 28674, 21946,\n  /*  5190 */ 17617, 36473, 18223, 17237, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 21575, 21534, 17481, 19156,\n  /*  5205 */ 17864, 18731, 17918, 36551, 17292, 17934, 21560, 30628, 18681, 18405, 18621, 18039, 18056, 18072, 18117,\n  /*  5220 */ 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796,\n  /*  5235 */ 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590,\n  /*  5250 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5265 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5280 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5295 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5310 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5325 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5340 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5355 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5370 */ 17590, 17590, 17590, 17590, 17590, 17590, 21798, 18836, 21612, 19008, 19233, 20367, 19008, 17173, 30763,\n  /*  5385 */ 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880,\n  /*  5400 */ 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008,\n  /*  5415 */ 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504,\n  /*  5430 */ 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737,\n  /*  5445 */ 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481,\n  /*  5460 */ 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072,\n  /*  5475 */ 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232,\n  /*  5490 */ 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535,\n  /*  5505 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5520 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5535 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5550 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5565 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5580 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5595 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5610 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5625 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21636, 18836, 18987, 19008, 19233, 17902, 19008, 17173,\n  /*  5640 */ 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452,\n  /*  5655 */ 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999,\n  /*  5670 */ 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887,\n  /*  5685 */ 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730,\n  /*  5700 */ 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620,\n  /*  5715 */ 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056,\n  /*  5730 */ 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403,\n  /*  5745 */ 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505,\n  /*  5760 */ 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5775 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5790 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5805 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5820 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5835 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5850 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5865 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5880 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21753, 19096, 21903, 19008, 19233, 20367, 19008,\n  /*  5895 */ 19291, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918,\n  /*  5910 */ 17379, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658,\n  /*  5925 */ 18999, 19008, 17447, 21931, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585,\n  /*  5940 */ 21887, 17504, 17527, 17258, 36418, 18280, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176,\n  /*  5955 */ 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590,\n  /*  5970 */ 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039,\n  /*  5985 */ 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807,\n  /*  6000 */ 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747,\n  /*  6015 */ 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6030 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6045 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6060 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6075 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6090 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6105 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6120 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6135 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21962, 18594, 18987, 19008, 19233, 22043,\n  /*  6150 */ 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346,\n  /*  6165 */ 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311,\n  /*  6180 */ 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559,\n  /*  6195 */ 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703,\n  /*  6210 */ 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832,\n  /*  6225 */ 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621,\n  /*  6240 */ 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376,\n  /*  6255 */ 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393,\n  /*  6270 */ 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6285 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6300 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6315 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6330 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6345 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6360 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6375 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6390 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21681, 21858, 18987, 19008, 19233,\n  /*  6405 */ 20367, 19008, 21544, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327,\n  /*  6420 */ 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873,\n  /*  6435 */ 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543,\n  /*  6450 */ 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190,\n  /*  6465 */ 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753,\n  /*  6480 */ 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405,\n  /*  6495 */ 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312,\n  /*  6510 */ 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519,\n  /*  6525 */ 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6540 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6555 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6570 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6585 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6600 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6615 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6630 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6645 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888,\n  /*  6660 */ 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401,\n  /*  6675 */ 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072,\n  /*  6690 */ 22164, 24401, 24401, 24401, 24401, 31500, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211,\n  /*  6705 */ 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 32319, 18888, 18888, 18888, 18888, 23086, 27211,\n  /*  6720 */ 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211,\n  /*  6735 */ 27211, 27211, 22187, 22968, 24401, 24401, 24401, 22231, 18888, 18888, 27211, 27211, 35779, 20080, 24402,\n  /*  6750 */ 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447,\n  /*  6765 */ 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008,\n  /*  6780 */ 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6795 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6810 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6825 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6840 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6855 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6870 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6885 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6900 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059,\n  /*  6915 */ 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121,\n  /*  6930 */ 24401, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211,\n  /*  6945 */ 35072, 22164, 24401, 24401, 24401, 24401, 31500, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211,\n  /*  6960 */ 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 18888, 18888, 18888, 18888, 23086,\n  /*  6975 */ 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855,\n  /*  6990 */ 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080,\n  /*  7005 */ 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406,\n  /*  7020 */ 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516,\n  /*  7035 */ 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7050 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7065 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7080 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7095 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7110 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7125 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7140 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7155 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836,\n  /*  7170 */ 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211,\n  /*  7185 */ 22121, 24401, 24401, 24401, 24401, 31678, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211,\n  /*  7200 */ 27211, 35072, 22164, 24401, 24401, 24401, 24401, 31500, 31693, 18888, 18888, 18888, 18888, 18890, 27211,\n  /*  7215 */ 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 18888, 18888, 18888, 18888,\n  /*  7230 */ 23086, 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888,\n  /*  7245 */ 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779,\n  /*  7260 */ 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833,\n  /*  7275 */ 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015,\n  /*  7290 */ 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7305 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7320 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7335 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7350 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7365 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7380 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7395 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7410 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339,\n  /*  7425 */ 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211,\n  /*  7440 */ 27211, 22121, 24401, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211,\n  /*  7455 */ 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 33588, 31693, 18888, 18888, 18888, 18888, 18890,\n  /*  7470 */ 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 18888, 18888, 18888,\n  /*  7485 */ 18888, 23086, 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888,\n  /*  7500 */ 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211,\n  /*  7515 */ 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211,\n  /*  7530 */ 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760,\n  /*  7545 */ 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7560 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7575 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7590 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7605 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7620 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7635 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7650 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7665 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7680 */ 22339, 18836, 22059, 18888, 27857, 35019, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211,\n  /*  7695 */ 27211, 27211, 22248, 24401, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 18888, 25783, 27211,\n  /*  7710 */ 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 31500, 31693, 18888, 18888, 18888, 18888,\n  /*  7725 */ 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 18888, 18888,\n  /*  7740 */ 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888,\n  /*  7755 */ 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211,\n  /*  7770 */ 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890,\n  /*  7785 */ 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782,\n  /*  7800 */ 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7815 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7830 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7845 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7860 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7875 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7890 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7905 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7920 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7935 */ 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211,\n  /*  7950 */ 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 25783,\n  /*  7965 */ 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 31693, 18888, 18888, 18888,\n  /*  7980 */ 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888,\n  /*  7995 */ 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750,\n  /*  8010 */ 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888,\n  /*  8025 */ 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018,\n  /*  8040 */ 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837,\n  /*  8055 */ 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590,\n  /*  8070 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8085 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8100 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8115 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8130 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8145 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8160 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8175 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8190 */ 17590, 17590, 22324, 18836, 22059, 18888, 27857, 30501, 24401, 29183, 22087, 18888, 18888, 18888, 18890,\n  /*  8205 */ 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888,\n  /*  8220 */ 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 31693, 18888, 18888,\n  /*  8235 */ 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628,\n  /*  8250 */ 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401,\n  /*  8265 */ 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888,\n  /*  8280 */ 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868,\n  /*  8295 */ 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738,\n  /*  8310 */ 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590,\n  /*  8325 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8340 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8355 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8370 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8385 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8400 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8415 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8430 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8445 */ 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888,\n  /*  8460 */ 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888,\n  /*  8475 */ 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 31693, 18888,\n  /*  8490 */ 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401,\n  /*  8505 */ 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401,\n  /*  8520 */ 24401, 34365, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887,\n  /*  8535 */ 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889,\n  /*  8550 */ 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783,\n  /*  8565 */ 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590,\n  /*  8580 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8595 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8610 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8625 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8640 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8655 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8670 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8685 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8700 */ 17590, 17590, 17590, 17590, 22354, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 27086, 36437, 17330,\n  /*  8715 */ 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665,\n  /*  8730 */ 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952,\n  /*  8745 */ 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258,\n  /*  8760 */ 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617,\n  /*  8775 */ 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864,\n  /*  8790 */ 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 19930, 18039, 18056, 18072, 18117, 18143,\n  /*  8805 */ 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163,\n  /*  8820 */ 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590,\n  /*  8835 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8850 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8865 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8880 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8895 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8910 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8925 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8940 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8955 */ 17590, 17590, 17590, 17590, 17590, 21828, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437,\n  /*  8970 */ 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649,\n  /*  8985 */ 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447,\n  /*  9000 */ 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527,\n  /*  9015 */ 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946,\n  /*  9030 */ 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156,\n  /*  9045 */ 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117,\n  /*  9060 */ 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796,\n  /*  9075 */ 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590,\n  /*  9090 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9105 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9120 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9135 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9150 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9165 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9180 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9195 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9210 */ 17590, 17590, 17590, 17590, 17590, 17590, 22309, 22513, 18987, 19008, 19233, 20367, 19008, 19122, 30763,\n  /*  9225 */ 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 22544, 21880,\n  /*  9240 */ 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008,\n  /*  9255 */ 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504,\n  /*  9270 */ 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737,\n  /*  9285 */ 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481,\n  /*  9300 */ 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072,\n  /*  9315 */ 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232,\n  /*  9330 */ 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535,\n  /*  9345 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9360 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9375 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9390 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9405 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9420 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9435 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9450 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9465 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22608, 18836, 22988, 23004, 27585, 23020, 23036, 23067,\n  /*  9480 */ 22087, 18888, 18888, 18888, 23083, 27211, 27211, 27211, 23102, 22121, 24401, 24401, 24401, 23122, 31386,\n  /*  9495 */ 26154, 19674, 18888, 28119, 28232, 19424, 23705, 27211, 27211, 23142, 23173, 23189, 23212, 24401, 24401,\n  /*  9510 */ 23246, 34427, 31693, 23262, 18888, 23290, 23308, 27783, 27620, 23327, 35263, 35107, 33383, 23346, 18193,\n  /*  9525 */ 23393, 32748, 23968, 24401, 23414, 35153, 23463, 18888, 33913, 23442, 23482, 27211, 27211, 23532, 23552,\n  /*  9540 */ 21431, 23575, 24401, 24401, 23604, 26095, 23635, 23657, 18888, 33482, 23685, 33251, 27211, 22187, 18851,\n  /*  9555 */ 23721, 35536, 24401, 18887, 23750, 32641, 27211, 23769, 23787, 20080, 33012, 24384, 25659, 18888, 18889,\n  /*  9570 */ 27211, 27211, 19719, 23889, 23803, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 28224,\n  /*  9585 */ 31826, 23823, 26917, 34978, 23850, 26493, 25782, 23878, 23914, 23516, 31008, 22105, 19419, 27963, 19659,\n  /*  9600 */ 29781, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9615 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9630 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9645 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9660 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9675 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9690 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9705 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9720 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22623, 18836, 22059, 18888, 27857, 34097, 24401,\n  /*  9735 */ 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401,\n  /*  9750 */ 30613, 18888, 18888, 18888, 18888, 28909, 25783, 27211, 27211, 27211, 34048, 23933, 22164, 24401, 24401,\n  /*  9765 */ 24401, 28409, 23949, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484,\n  /*  9780 */ 24401, 24401, 24401, 24401, 24401, 31181, 26583, 18888, 18888, 18888, 35585, 23984, 27211, 27211, 27211,\n  /*  9795 */ 24005, 22201, 24033, 24401, 24401, 24401, 24052, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187,\n  /*  9810 */ 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888,\n  /*  9825 */ 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828,\n  /*  9840 */ 31017, 27856, 31741, 26496, 24076, 24126, 24151, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963,\n  /*  9855 */ 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9870 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9885 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9900 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9915 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9930 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9945 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9960 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9975 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22638, 18836, 22059, 19678, 27857, 24185,\n  /*  9990 */ 24401, 24201, 24217, 26592, 18888, 18888, 18890, 24252, 24268, 27211, 27211, 22121, 24287, 24303, 24401,\n  /* 10005 */ 24401, 30613, 19781, 35432, 36007, 32649, 18888, 25783, 24322, 28966, 23771, 27211, 35072, 22164, 24358,\n  /* 10020 */ 32106, 26829, 24400, 31500, 31693, 18888, 18888, 18888, 24801, 18890, 27211, 27211, 27211, 27211, 24418,\n  /* 10035 */ 19484, 24401, 24401, 24401, 24401, 20167, 31181, 18888, 18888, 18888, 27833, 23086, 27211, 27211, 33540,\n  /* 10050 */ 27211, 30756, 21431, 24401, 24401, 22972, 24401, 26095, 18888, 36131, 18888, 27855, 27211, 24440, 27211,\n  /* 10065 */ 22187, 22968, 24401, 24459, 24401, 31699, 28454, 18888, 34528, 34570, 35779, 24478, 24402, 24494, 25659,\n  /* 10080 */ 18888, 36228, 27211, 27211, 24515, 30981, 23734, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330,\n  /* 10095 */ 24538, 31017, 27856, 31741, 30059, 23377, 24563, 19837, 25782, 19760, 31015, 23516, 25374, 22105, 19419,\n  /* 10110 */ 29793, 24579, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10125 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10140 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10155 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10170 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10185 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10200 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10215 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10230 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22653, 18836, 22059, 25756, 19982,\n  /* 10245 */ 34097, 23196, 29183, 24614, 24110, 23641, 24673, 26103, 24697, 24443, 24713, 28558, 22121, 24748, 24462,\n  /* 10260 */ 24764, 23398, 30613, 18888, 18888, 18888, 18888, 24798, 25783, 27211, 27211, 27211, 34232, 35072, 22164,\n  /* 10275 */ 24401, 24401, 24401, 33302, 31500, 22559, 24106, 24232, 18888, 18888, 34970, 24817, 30411, 27211, 27211,\n  /* 10290 */ 32484, 19484, 29750, 35127, 24401, 24401, 19872, 31181, 24852, 18888, 18888, 24871, 29221, 27211, 27211,\n  /* 10305 */ 32072, 27211, 30756, 34441, 24401, 24401, 31571, 24401, 26095, 33141, 27802, 27011, 27855, 25295, 25607,\n  /* 10320 */ 24888, 22187, 22968, 19195, 34593, 24906, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868,\n  /* 10335 */ 25659, 18888, 33663, 27211, 27211, 24924, 24947, 23588, 31018, 18890, 27211, 31833, 22135, 19447, 23086,\n  /* 10350 */ 23330, 19828, 30904, 31042, 24972, 19840, 25000, 31738, 30898, 25782, 19760, 31015, 23516, 31008, 22105,\n  /* 10365 */ 19419, 25016, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10380 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10395 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10410 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10425 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10440 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10455 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10470 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10485 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22668, 18836, 25041, 25057,\n  /* 10500 */ 31320, 25073, 25089, 25105, 22087, 34796, 24236, 36138, 34870, 34125, 25121, 23106, 35497, 22248, 36613,\n  /* 10515 */ 25137, 30671, 27365, 30613, 25153, 26447, 25199, 25233, 22574, 23274, 25249, 25265, 25281, 25318, 25344,\n  /* 10530 */ 25360, 25400, 25428, 25452, 26731, 25504, 31693, 23669, 25558, 27407, 25575, 28599, 25934, 25599, 27211,\n  /* 10545 */ 28180, 27304, 25623, 25839, 25649, 24401, 34820, 25681, 25698, 22586, 27775, 30190, 25745, 25778, 25799,\n  /* 10560 */ 25817, 28995, 33569, 30756, 21518, 33443, 25837, 25855, 25893, 26095, 31254, 26677, 30136, 27855, 25930,\n  /* 10575 */ 25950, 27211, 22187, 22968, 25966, 25986, 24401, 23428, 27763, 36330, 26959, 26002, 26029, 26045, 26085,\n  /* 10590 */ 26119, 26170, 26203, 26222, 26239, 30527, 26372, 26274, 28404, 31018, 33757, 27211, 34262, 26316, 36729,\n  /* 10605 */ 26345, 26366, 35337, 31017, 26388, 26407, 30954, 26350, 33861, 26434, 26463, 26479, 26512, 23516, 33189,\n  /* 10620 */ 26531, 26547, 27963, 31293, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10635 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10650 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10665 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10680 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10695 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10710 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10725 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10740 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22683, 18836, 26568,\n  /* 10755 */ 26181, 26608, 34097, 26643, 29183, 22087, 26669, 18888, 18888, 18890, 26693, 27211, 27211, 27211, 22121,\n  /* 10770 */ 26720, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 26774, 25783, 27211, 27211, 27211, 26619,\n  /* 10785 */ 35072, 22164, 24401, 24401, 24401, 21596, 31500, 31693, 18888, 18888, 33978, 18888, 18890, 27211, 27211,\n  /* 10800 */ 25801, 27211, 27211, 19484, 24401, 24401, 24401, 26792, 24401, 31181, 18888, 18888, 18888, 35464, 23086,\n  /* 10815 */ 27211, 27211, 27211, 26809, 30756, 21431, 24401, 24401, 24401, 26828, 26095, 18888, 18888, 18888, 27855,\n  /* 10830 */ 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080,\n  /* 10845 */ 24402, 19868, 25659, 31948, 18889, 35707, 27211, 19719, 26845, 19868, 31018, 18890, 27211, 31833, 19406,\n  /* 10860 */ 19447, 23086, 23330, 26905, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516,\n  /* 10875 */ 24984, 31088, 19419, 26945, 27651, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10890 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10905 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10920 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10935 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10950 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10965 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10980 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10995 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22698, 18836,\n  /* 11010 */ 26999, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211,\n  /* 11025 */ 22121, 24401, 24401, 24401, 24401, 23051, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211,\n  /* 11040 */ 27211, 35072, 27033, 24401, 24401, 24401, 24401, 24036, 31693, 18888, 18888, 27056, 18888, 18890, 27211,\n  /* 11055 */ 27211, 30320, 27211, 27211, 27075, 24401, 24401, 29032, 24401, 24401, 19628, 18888, 18888, 18888, 18888,\n  /* 11070 */ 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 33986,\n  /* 11085 */ 27855, 27211, 27211, 27102, 17590, 24017, 24401, 24401, 27123, 27144, 36254, 27162, 27210, 27228, 28500,\n  /* 11100 */ 18187, 34842, 33426, 27244, 35980, 27277, 27302, 27320, 36048, 34013, 20999, 31882, 21478, 27895, 27356,\n  /* 11115 */ 30287, 27381, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015,\n  /* 11130 */ 23516, 31008, 22105, 26329, 30087, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11145 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11160 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11175 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11190 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11205 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11220 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11235 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11250 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339,\n  /* 11265 */ 18836, 22059, 27406, 27423, 27445, 35294, 27461, 22087, 18888, 18888, 30140, 18890, 27211, 27211, 27989,\n  /* 11280 */ 27211, 22121, 24401, 24401, 25682, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 34042, 27211, 27211,\n  /* 11295 */ 27211, 27211, 29700, 22164, 24401, 24401, 24401, 24401, 27128, 31693, 27477, 18888, 18888, 18888, 18890,\n  /* 11310 */ 27194, 27211, 27211, 27211, 27211, 19484, 35299, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888,\n  /* 11325 */ 27059, 23086, 27211, 27211, 27211, 33366, 30756, 24012, 24401, 24401, 24401, 35044, 26750, 18888, 18888,\n  /* 11340 */ 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211,\n  /* 11355 */ 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 20815, 27211,\n  /* 11370 */ 30818, 19960, 33969, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760,\n  /* 11385 */ 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11400 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11415 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11430 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11445 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11460 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11475 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11490 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11505 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11520 */ 22713, 18836, 22059, 27496, 27516, 27541, 35231, 27557, 22087, 29662, 26292, 23292, 27573, 24836, 27601,\n  /* 11535 */ 27211, 27636, 22121, 35544, 27686, 24401, 27721, 18866, 18888, 27799, 18888, 27818, 22071, 27853, 32260,\n  /* 11550 */ 27211, 26013, 27873, 27920, 22164, 29419, 24401, 29946, 33413, 26742, 27751, 26881, 18888, 18888, 27261,\n  /* 11565 */ 36776, 27936, 27211, 27211, 27211, 27988, 28005, 28031, 28052, 24401, 24401, 28069, 28088, 28135, 25488,\n  /* 11580 */ 28152, 26069, 28167, 27211, 28340, 24657, 28196, 30756, 31523, 24401, 28212, 34176, 36174, 24956, 28248,\n  /* 11595 */ 28266, 28290, 21488, 33077, 28327, 28356, 17590, 20986, 23126, 28391, 28425, 28102, 28451, 28470, 28490,\n  /* 11610 */ 28516, 28534, 20034, 33728, 25868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 30241, 28274,\n  /* 11625 */ 28553, 28574, 19406, 28590, 23086, 23330, 19828, 19452, 28615, 28660, 26147, 25783, 31738, 19837, 25782,\n  /* 11640 */ 19760, 29613, 35958, 29276, 22105, 19419, 27963, 23157, 28700, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11655 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11670 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11685 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11700 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11715 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11730 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11745 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11760 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11775 */ 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211,\n  /* 11790 */ 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 25783,\n  /* 11805 */ 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 22528, 18888, 18888, 18888,\n  /* 11820 */ 18888, 18890, 27333, 27211, 27211, 27211, 27211, 19484, 30853, 24401, 24401, 24401, 24401, 19628, 18888,\n  /* 11835 */ 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750,\n  /* 11850 */ 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888,\n  /* 11865 */ 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018,\n  /* 11880 */ 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837,\n  /* 11895 */ 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590,\n  /* 11910 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11925 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11940 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11955 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11970 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11985 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12000 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12015 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12030 */ 17590, 17590, 22728, 18836, 28747, 28782, 28817, 28841, 28857, 28880, 28896, 24161, 28943, 32011, 36261,\n  /* 12045 */ 27340, 28961, 29492, 28982, 29011, 24522, 29027, 25436, 29048, 23051, 27500, 29090, 29110, 30713, 18888,\n  /* 12060 */ 23512, 29130, 25183, 27211, 29155, 28927, 27033, 29173, 23230, 24401, 29199, 35373, 31693, 18888, 18888,\n  /* 12075 */ 25583, 32629, 29218, 27211, 27211, 31461, 30692, 29237, 27075, 24401, 24401, 24401, 29262, 29302, 19628,\n  /* 12090 */ 18888, 34329, 18888, 18888, 23086, 27211, 29329, 27211, 27211, 30756, 24012, 35933, 24401, 24401, 24401,\n  /* 12105 */ 27705, 31612, 18888, 18888, 29346, 29374, 27211, 35650, 17590, 21436, 29393, 24401, 25970, 18887, 33895,\n  /* 12120 */ 18888, 27211, 32528, 27212, 24016, 32769, 19868, 25659, 18888, 26889, 27211, 27211, 29412, 23889, 24371,\n  /* 12135 */ 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31768, 19840, 25783, 31738,\n  /* 12150 */ 19837, 29435, 29508, 31102, 29550, 29606, 22105, 30300, 29462, 19659, 27951, 17590, 17590, 17590, 17590,\n  /* 12165 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12180 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12195 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12210 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12225 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12240 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12255 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12270 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12285 */ 17590, 17590, 17590, 22743, 18836, 22059, 29629, 29473, 34097, 33285, 29183, 29651, 27254, 18888, 29678,\n  /* 12300 */ 33329, 32535, 27211, 29694, 29716, 22121, 19202, 24401, 32742, 29741, 18866, 26776, 33921, 28474, 18888,\n  /* 12315 */ 18888, 25783, 29766, 27211, 29809, 27211, 35072, 22164, 35825, 24401, 29828, 24401, 24036, 36769, 25217,\n  /* 12330 */ 18888, 18888, 29848, 18890, 27211, 29871, 27211, 26258, 27211, 29894, 24401, 29929, 24401, 36587, 24401,\n  /* 12345 */ 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 29725, 29962, 24401, 24401, 24401,\n  /* 12360 */ 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18473,\n  /* 12375 */ 18888, 18888, 19584, 27211, 27212, 24016, 29982, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889,\n  /* 12390 */ 19868, 31018, 18890, 27211, 31833, 19902, 19447, 32052, 19544, 19828, 29998, 30097, 30031, 19840, 25783,\n  /* 12405 */ 30047, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 30075, 17590, 17590, 17590,\n  /* 12420 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12435 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12450 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12465 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12480 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12495 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12510 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12525 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12540 */ 17590, 17590, 17590, 17590, 22758, 18836, 30121, 30156, 30206, 30257, 30273, 30336, 22087, 35624, 32837,\n  /* 12555 */ 25762, 18890, 29878, 34934, 26812, 27211, 22121, 24931, 23223, 29202, 24401, 18866, 34373, 30352, 18888,\n  /* 12570 */ 18888, 18888, 23447, 24828, 27211, 27211, 27211, 35072, 30370, 35052, 24401, 24401, 24401, 24036, 29523,\n  /* 12585 */ 18888, 18888, 27146, 18888, 31308, 30386, 27211, 27211, 30405, 30558, 19484, 30427, 24401, 24401, 29938,\n  /* 12600 */ 35686, 19628, 28766, 30447, 34506, 35614, 23086, 28731, 30482, 30517, 30552, 30756, 24012, 20156, 30574,\n  /* 12615 */ 30598, 30667, 26283, 33464, 28945, 27670, 30687, 32915, 33504, 25328, 17590, 23963, 20450, 33837, 21016,\n  /* 12630 */ 32397, 26300, 30708, 30729, 27885, 30748, 21588, 36373, 30779, 26653, 24628, 33220, 32514, 30806, 31835,\n  /* 12645 */ 25412, 25906, 26515, 18890, 28825, 31833, 26133, 19447, 28304, 31730, 23834, 26057, 30869, 30885, 32181,\n  /* 12660 */ 30920, 30942, 32797, 25782, 30970, 31015, 23516, 31008, 30997, 31034, 27963, 19659, 29450, 17590, 17590,\n  /* 12675 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12690 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12705 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12720 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12735 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12750 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12765 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12780 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12795 */ 17590, 17590, 17590, 17590, 17590, 22773, 18836, 31058, 31074, 32463, 31125, 31141, 31197, 22087, 18888,\n  /* 12810 */ 29534, 35471, 36738, 27211, 24342, 31213, 24424, 22121, 24401, 20175, 31229, 31917, 27736, 31245, 34334,\n  /* 12825 */ 27175, 18888, 29094, 27286, 27211, 31278, 31336, 27211, 31355, 31371, 24401, 31402, 31418, 24401, 31437,\n  /* 12840 */ 31693, 18888, 31619, 32841, 18888, 18890, 27211, 27211, 31460, 31477, 27211, 19484, 24401, 24401, 31497,\n  /* 12855 */ 36581, 24401, 33020, 18888, 18888, 18888, 18888, 30007, 27211, 27211, 27211, 27211, 31516, 32310, 24401,\n  /* 12870 */ 24401, 24401, 24401, 31539, 18888, 28762, 18888, 24651, 35740, 27211, 27211, 28644, 31565, 35796, 24401,\n  /* 12885 */ 24401, 19318, 32188, 18888, 24334, 28366, 27212, 29966, 29832, 19868, 25659, 18888, 18889, 27211, 27211,\n  /* 12900 */ 19719, 31587, 19868, 31635, 32435, 33693, 30105, 31663, 20005, 31715, 31757, 31784, 31812, 30015, 31851,\n  /* 12915 */ 31878, 25783, 31898, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 31933, 30221, 17590,\n  /* 12930 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12945 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12960 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12975 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12990 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13005 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13020 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13035 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13050 */ 17590, 17590, 17590, 17590, 17590, 17590, 22788, 18836, 22059, 25729, 30466, 31968, 24306, 31984, 32000,\n  /* 13065 */ 32807, 35160, 27017, 29590, 34941, 19801, 29377, 33700, 22121, 27040, 30431, 29396, 28864, 29565, 18888,\n  /* 13080 */ 18888, 18888, 32027, 18888, 25783, 27211, 27211, 23698, 27211, 35072, 22164, 24401, 24401, 30845, 24401,\n  /* 13095 */ 24036, 32045, 18888, 26929, 18888, 18888, 18890, 27211, 31481, 32068, 27211, 27211, 32088, 24401, 33058,\n  /* 13110 */ 32122, 24401, 24401, 33736, 18888, 18888, 33162, 18888, 23086, 27211, 27211, 29484, 27211, 28375, 32144,\n  /* 13125 */ 24401, 24401, 33831, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 36704, 24017, 24401,\n  /* 13140 */ 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211,\n  /* 13155 */ 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 33107, 22171, 33224, 24271, 32169, 31017, 27856,\n  /* 13170 */ 31741, 19840, 25783, 31738, 30234, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951,\n  /* 13185 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13200 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13215 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13230 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13245 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13260 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13275 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13290 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13305 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 32204, 32232, 32252, 32677, 33295, 29074,\n  /* 13320 */ 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 23619,\n  /* 13335 */ 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 32276, 24401, 24401, 24401,\n  /* 13350 */ 24401, 24036, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 32299, 24401,\n  /* 13365 */ 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756,\n  /* 13380 */ 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017,\n  /* 13395 */ 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 33886, 18889,\n  /* 13410 */ 36065, 27211, 19719, 35326, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017,\n  /* 13425 */ 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659,\n  /* 13440 */ 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13455 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13470 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13485 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13500 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13515 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13530 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13545 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13560 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22803, 18836, 32335, 31647, 34666, 32351, 32367,\n  /* 13575 */ 32417, 22087, 18888, 32433, 19335, 32451, 27211, 32479, 27107, 32500, 22121, 24401, 32551, 20085, 32572,\n  /* 13590 */ 18866, 22287, 23753, 18888, 18888, 32602, 32665, 27211, 32693, 27211, 26972, 32713, 32729, 24401, 32764,\n  /* 13605 */ 24401, 25877, 32785, 34768, 18888, 27390, 32823, 24594, 24855, 32857, 24890, 32878, 32904, 27211, 32942,\n  /* 13620 */ 32977, 24401, 33000, 29313, 24401, 30790, 26206, 27666, 33904, 18888, 23086, 36353, 27211, 33036, 27211,\n  /* 13635 */ 30756, 24012, 32153, 24401, 33056, 24401, 35861, 18888, 18888, 30354, 27972, 27211, 27211, 33800, 17590,\n  /* 13650 */ 20145, 24401, 24401, 34638, 20811, 18888, 18888, 33074, 27211, 27212, 36167, 24402, 19868, 25659, 18888,\n  /* 13665 */ 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 34616, 24169, 33093, 33123,\n  /* 13680 */ 33157, 27856, 31741, 23862, 26552, 34302, 19837, 25782, 19760, 31015, 23516, 31008, 33178, 19973, 27963,\n  /* 13695 */ 23497, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13710 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13725 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13740 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13755 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13770 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13785 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13800 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13815 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22818, 18836, 33205, 28113, 33240, 34097,\n  /* 13830 */ 33275, 29183, 22087, 33318, 35438, 18888, 18890, 33345, 26391, 33382, 27211, 22121, 33399, 28072, 33442,\n  /* 13845 */ 24401, 18866, 22232, 18888, 33459, 18888, 18888, 33480, 33498, 25175, 27211, 27211, 26704, 22164, 24775,\n  /* 13860 */ 35239, 24401, 24401, 25914, 29580, 18888, 18888, 31109, 25211, 33520, 33539, 27211, 27211, 33556, 36284,\n  /* 13875 */ 19484, 33585, 24401, 24401, 33604, 32556, 19628, 18888, 18888, 31262, 33658, 23086, 27211, 27211, 33679,\n  /* 13890 */ 27211, 30756, 24012, 24401, 24401, 33716, 24401, 26854, 27480, 18888, 33752, 27855, 33259, 34701, 27211,\n  /* 13905 */ 17590, 32102, 24782, 23807, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 33773, 36105, 19868, 25659,\n  /* 13920 */ 18888, 23368, 27211, 29157, 19719, 23889, 34454, 29286, 18890, 33794, 25302, 33816, 19447, 34079, 33853,\n  /* 13935 */ 31862, 31017, 27856, 31741, 33877, 28920, 33937, 19837, 30461, 34002, 22276, 36041, 34029, 22105, 19419,\n  /* 13950 */ 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13965 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13980 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13995 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14010 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14025 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14040 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14055 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14070 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22833, 18836, 34064, 32616, 34113,\n  /* 14085 */ 34141, 34157, 34192, 34208, 32216, 36013, 31549, 31952, 34224, 34248, 34287, 29330, 34350, 34389, 34413,\n  /* 14100 */ 34481, 26793, 18866, 26187, 29635, 22293, 18888, 36654, 25783, 34522, 34544, 34566, 25821, 35072, 22164,\n  /* 14115 */ 34586, 34609, 34632, 19604, 24036, 36644, 36674, 24681, 18888, 32401, 34654, 31339, 34682, 34698, 27211,\n  /* 14130 */ 34717, 34753, 28053, 34812, 34836, 24401, 33619, 19628, 34858, 32236, 34906, 24598, 33523, 27612, 34890,\n  /* 14145 */ 34922, 24732, 29246, 36717, 33634, 34465, 32984, 34168, 26750, 34957, 18888, 18888, 34994, 35010, 27211,\n  /* 14160 */ 33040, 17590, 29913, 35035, 24401, 36304, 25482, 30171, 35883, 35068, 35088, 26627, 20441, 31173, 35123,\n  /* 14175 */ 35143, 35176, 24640, 30492, 29358, 19719, 35192, 35219, 25384, 28801, 35255, 35279, 32586, 34496, 23086,\n  /* 14190 */ 23330, 29061, 31017, 27856, 31741, 19840, 25783, 31738, 24547, 25164, 35315, 31796, 35353, 34316, 22105,\n  /* 14205 */ 19419, 27963, 24091, 28630, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14220 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14235 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14250 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14265 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14280 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14295 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14310 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14325 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22848, 18836, 22059, 34782,\n  /* 14340 */ 34088, 35389, 21008, 35405, 35421, 35454, 18888, 18888, 23466, 35487, 27211, 27211, 27211, 35513, 31154,\n  /* 14355 */ 24401, 24401, 24401, 35560, 18888, 26863, 36664, 35601, 24872, 25783, 30389, 23536, 26250, 35647, 35666,\n  /* 14370 */ 22164, 19522, 19564, 30582, 35682, 27697, 35575, 29114, 18888, 18888, 18888, 18890, 27211, 35702, 27211,\n  /* 14385 */ 27211, 27211, 35723, 24401, 35527, 24401, 24401, 24401, 19628, 30184, 18888, 18888, 18888, 23086, 35739,\n  /* 14400 */ 27211, 27211, 27211, 29139, 22938, 24401, 24401, 24401, 24401, 23898, 35756, 18888, 18888, 25025, 35778,\n  /* 14415 */ 27211, 27211, 17590, 20064, 35795, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402,\n  /* 14430 */ 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 23917, 18890, 34550, 31833, 22262, 19447,\n  /* 14445 */ 23086, 23330, 26418, 31017, 27856, 31741, 19840, 25783, 35812, 19837, 27187, 35841, 33135, 23516, 31008,\n  /* 14460 */ 22105, 22148, 28712, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14475 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14490 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14505 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14520 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14535 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14550 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14565 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14580 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22863, 18836, 22059,\n  /* 14595 */ 35877, 28723, 34097, 31164, 29183, 22087, 26758, 18888, 22592, 18890, 23989, 27211, 29812, 27211, 22121,\n  /* 14610 */ 33778, 24401, 31421, 24401, 18866, 18888, 18888, 26872, 18888, 18888, 25783, 27211, 30732, 27211, 27211,\n  /* 14625 */ 35072, 22164, 24401, 24908, 24401, 24401, 24036, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211,\n  /* 14640 */ 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086,\n  /* 14655 */ 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855,\n  /* 14670 */ 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016,\n  /* 14685 */ 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406,\n  /* 14700 */ 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516,\n  /* 14715 */ 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14730 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14745 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14760 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14775 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14790 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14805 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14820 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14835 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22878, 18836,\n  /* 14850 */ 22059, 27837, 27857, 35899, 24401, 35915, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211,\n  /* 14865 */ 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211,\n  /* 14880 */ 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 31602, 18888, 18888, 18888, 18888, 26223, 27211,\n  /* 14895 */ 27211, 27211, 27211, 27211, 19484, 35931, 24401, 24401, 24401, 24401, 19628, 18888, 28136, 18888, 18888,\n  /* 14910 */ 35949, 27211, 32862, 27211, 32697, 30756, 24012, 24401, 32283, 24401, 32128, 26750, 18888, 18888, 18888,\n  /* 14925 */ 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212,\n  /* 14940 */ 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833,\n  /* 14955 */ 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015,\n  /* 14970 */ 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14985 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15000 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15015 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15030 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15045 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15060 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15075 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15090 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22893,\n  /* 15105 */ 18836, 22059, 35974, 34882, 34097, 33960, 29183, 35996, 18888, 23311, 18888, 36029, 27211, 27211, 36064,\n  /* 15120 */ 36081, 22121, 24401, 24401, 36104, 33950, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211,\n  /* 15135 */ 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 36121, 18888, 25559, 18888, 18888, 18890,\n  /* 15150 */ 27211, 27211, 30313, 27211, 27211, 36154, 24401, 24401, 34397, 24401, 24401, 19628, 28250, 18888, 18888,\n  /* 15165 */ 18888, 23086, 30926, 27211, 27211, 27211, 26983, 24012, 33642, 24401, 24401, 24401, 26750, 18888, 18888,\n  /* 15180 */ 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211,\n  /* 15195 */ 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211,\n  /* 15210 */ 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760,\n  /* 15225 */ 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15240 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15255 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15270 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15285 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15300 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15315 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15330 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15345 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15360 */ 22339, 18836, 22059, 19354, 27857, 36190, 24401, 36206, 22087, 18888, 18888, 18888, 18007, 27211, 27211,\n  /* 15375 */ 27211, 24724, 22121, 24401, 24401, 24401, 30827, 18866, 18888, 36222, 18888, 28795, 18888, 25783, 35100,\n  /* 15390 */ 27211, 27429, 27211, 35072, 22164, 30836, 24401, 24499, 24401, 24036, 31693, 18888, 36244, 18888, 18888,\n  /* 15405 */ 18890, 27211, 36088, 27211, 27211, 27211, 19484, 24401, 28036, 24401, 24401, 24401, 19628, 18888, 18888,\n  /* 15420 */ 35631, 18888, 35762, 27211, 27211, 36277, 27211, 34730, 24012, 24401, 24401, 36300, 24401, 36320, 18888,\n  /* 15435 */ 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 25712, 18888, 18888, 36346,\n  /* 15450 */ 27211, 27212, 19184, 24402, 19868, 25659, 32029, 18889, 27211, 33359, 19719, 23889, 36369, 31018, 18890,\n  /* 15465 */ 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782,\n  /* 15480 */ 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15495 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15510 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15525 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15540 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15555 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15570 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15585 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15600 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15615 */ 17590, 22384, 18836, 36389, 19008, 19233, 20367, 36434, 17173, 17595, 36437, 17330, 17349, 18921, 17189,\n  /* 15630 */ 17208, 17281, 20355, 36453, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033,\n  /* 15645 */ 20765, 17421, 20535, 17192, 20362, 21726, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251,\n  /* 15660 */ 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940,\n  /* 15675 */ 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531,\n  /* 15690 */ 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551,\n  /* 15705 */ 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209,\n  /* 15720 */ 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816,\n  /* 15735 */ 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590,\n  /* 15750 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15765 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15780 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15795 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15810 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15825 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15840 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15855 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15870 */ 17590, 17590, 22369, 18836, 18987, 19008, 19233, 20367, 19008, 21737, 30763, 36437, 17330, 17349, 18921,\n  /* 15885 */ 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265,\n  /* 15900 */ 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520,\n  /* 15915 */ 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915,\n  /* 15930 */ 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223,\n  /* 15945 */ 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918,\n  /* 15960 */ 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052,\n  /* 15975 */ 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392,\n  /* 15990 */ 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590,\n  /* 16005 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16020 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16035 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16050 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16065 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16080 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16095 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16110 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16125 */ 17590, 17590, 17590, 21813, 18836, 36489, 19008, 19233, 20367, 19008, 17173, 17737, 36437, 17330, 17349,\n  /* 16140 */ 18921, 17189, 17208, 17281, 20355, 17768, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006,\n  /* 16155 */ 17265, 22033, 20765, 17421, 20535, 17192, 20543, 22022, 17311, 18658, 18999, 19008, 17447, 32952, 17497,\n  /* 16170 */ 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418,\n  /* 16185 */ 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473,\n  /* 16200 */ 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731,\n  /* 16215 */ 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706,\n  /* 16230 */ 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642,\n  /* 16245 */ 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590,\n  /* 16260 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16275 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16290 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16305 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16320 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16335 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16350 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16365 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16380 */ 17590, 17590, 17590, 17590, 21828, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330,\n  /* 16395 */ 17349, 18921, 17189, 17208, 17281, 20355, 36517, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665,\n  /* 16410 */ 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952,\n  /* 16425 */ 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258,\n  /* 16440 */ 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617,\n  /* 16455 */ 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864,\n  /* 16470 */ 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143,\n  /* 16485 */ 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163,\n  /* 16500 */ 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590,\n  /* 16515 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16530 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16545 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16560 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16575 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16590 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16605 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16620 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16635 */ 17590, 17590, 17590, 17590, 17590, 21828, 18836, 19307, 18888, 27857, 30756, 24401, 29183, 28015, 18888,\n  /* 16650 */ 18888, 18888, 18890, 27211, 27211, 27211, 27211, 36567, 24401, 24401, 24401, 24401, 22953, 18888, 18888,\n  /* 16665 */ 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 28537, 36603, 24401, 24401, 24401, 24401, 24036,\n  /* 16680 */ 18881, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401,\n  /* 16695 */ 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401,\n  /* 16710 */ 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401,\n  /* 16725 */ 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211,\n  /* 16740 */ 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741,\n  /* 16755 */ 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590,\n  /* 16770 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16785 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16800 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16815 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16830 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16845 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16860 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16875 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16890 */ 17590, 17590, 17590, 17590, 17590, 17590, 36629, 36690, 18720, 19008, 19233, 20367, 19008, 17454, 17595,\n  /* 16905 */ 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17223, 17308, 17327, 17346, 18918, 36754, 21880,\n  /* 16920 */ 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 20362, 21726, 17311, 18658, 18999, 19008,\n  /* 16935 */ 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504,\n  /* 16950 */ 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737,\n  /* 16965 */ 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481,\n  /* 16980 */ 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072,\n  /* 16995 */ 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232,\n  /* 17010 */ 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535,\n  /* 17025 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 17040 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 17055 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 17070 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 17085 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 17100 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 17115 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 17130 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 17145 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 0, 94242, 0, 118820, 0, 2211840, 102439, 0, 0, 106538,\n  /* 17162 */ 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2482176, 2158592,\n  /* 17174 */ 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 2207744, 2404352,\n  /* 17191 */ 2412544, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744,\n  /* 17202 */ 2207744, 2207744, 2207744, 2207744, 2207744, 3104768, 2605056, 2207744, 2207744, 2207744, 2207744,\n  /* 17213 */ 2207744, 2207744, 2678784, 2207744, 2695168, 2207744, 2703360, 2207744, 2711552, 2752512, 2207744, 0, 0,\n  /* 17226 */ 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 3170304, 3174400, 2158592, 0, 139, 0, 2158592,\n  /* 17246 */ 2158592, 2158592, 2158592, 2158592, 2424832, 2158592, 2158592, 2158592, 2748416, 2756608, 2777088,\n  /* 17257 */ 2801664, 2158592, 2158592, 2158592, 2863104, 2891776, 2158592, 2158592, 2158592, 2158592, 2158592,\n  /* 17268 */ 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3104768, 2158592, 2158592, 2158592, 2158592,\n  /* 17279 */ 2158592, 2158592, 2207744, 2785280, 2207744, 2809856, 2207744, 2207744, 2842624, 2207744, 2207744,\n  /* 17290 */ 2207744, 2899968, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2473984,\n  /* 17301 */ 2207744, 2207744, 2494464, 2207744, 2207744, 2207744, 2523136, 2158592, 2404352, 2412544, 2158592,\n  /* 17312 */ 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592,\n  /* 17323 */ 2158592, 2564096, 2158592, 2158592, 2605056, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592,\n  /* 17334 */ 2678784, 2158592, 2695168, 2158592, 2703360, 2158592, 2711552, 2752512, 2158592, 2158592, 2785280,\n  /* 17345 */ 2158592, 2158592, 2785280, 2158592, 2809856, 2158592, 2158592, 2842624, 2158592, 2158592, 2158592,\n  /* 17356 */ 2899968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 18, 0, 0, 0, 0,\n  /* 17371 */ 0, 0, 0, 2211840, 0, 0, 641, 0, 2158592, 0, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 32768, 0, 2158592, 0,\n  /* 17395 */ 2158592, 2158592, 2158592, 2383872, 2158592, 2158592, 2158592, 2158592, 3006464, 2383872, 2207744,\n  /* 17406 */ 2207744, 2207744, 2207744, 2158877, 2158877, 2158877, 2158877, 0, 0, 0, 2158877, 2572573, 2158877,\n  /* 17419 */ 2158877, 0, 2207744, 2207744, 2596864, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2641920,\n  /* 17431 */ 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 167936, 0, 0, 2162688, 0, 0,\n  /* 17447 */ 3104768, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592,\n  /* 17458 */ 2158592, 2158592, 0, 0, 0, 2146304, 2146304, 2224128, 2224128, 2232320, 2232320, 2232320, 641, 0, 0, 0, 0,\n  /* 17475 */ 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2531328, 2158592,\n  /* 17488 */ 2158592, 2158592, 2158592, 2158592, 2617344, 2158592, 2158592, 2158592, 2158592, 2441216, 2445312,\n  /* 17499 */ 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2502656, 2158592, 2158592, 2158592, 2158592,\n  /* 17510 */ 2158592, 2158592, 2158592, 2158592, 2580480, 2158592, 2158592, 2158592, 2158592, 2621440, 2158592,\n  /* 17521 */ 2580480, 2158592, 2158592, 2158592, 2158592, 2621440, 2158592, 2158592, 2158592, 2158592, 2158592,\n  /* 17532 */ 2158592, 2699264, 2158592, 2158592, 2158592, 2158592, 2158592, 2748416, 2756608, 2777088, 2801664,\n  /* 17543 */ 2207744, 2863104, 2891776, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744,\n  /* 17554 */ 2207744, 2207744, 2207744, 2207744, 3018752, 2207744, 3043328, 2207744, 2207744, 2207744, 2207744,\n  /* 17565 */ 3080192, 2207744, 2207744, 3112960, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0,\n  /* 17578 */ 0, 172310, 279, 0, 2162688, 0, 0, 2207744, 2207744, 2207744, 3186688, 2207744, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 17599 */ 0, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2404352, 2412544, 2158592, 2510848, 2158592, 2158592,\n  /* 17615 */ 2158592, 2158592, 2158592, 2158592, 2158592, 2584576, 2158592, 2609152, 2158592, 2158592, 2629632,\n  /* 17626 */ 2158592, 2158592, 2158592, 2686976, 2158592, 2715648, 2158592, 2158592, 3121152, 2158592, 2158592,\n  /* 17637 */ 2158592, 3149824, 2158592, 2158592, 3170304, 3174400, 2158592, 2367488, 2207744, 2207744, 2207744,\n  /* 17648 */ 2207744, 2158592, 2158592, 2158592, 2158592, 0, 0, 0, 2158592, 2572288, 2158592, 2158592, 0, 2207744,\n  /* 17662 */ 2207744, 2207744, 2433024, 2207744, 2453504, 2461696, 2207744, 2207744, 2207744, 2207744, 2207744,\n  /* 17673 */ 2207744, 2510848, 2207744, 2207744, 2207744, 2207744, 2207744, 2531328, 2207744, 2207744, 2207744,\n  /* 17684 */ 2207744, 2207744, 2617344, 2207744, 2207744, 2207744, 2207744, 2158592, 2158592, 2158592, 2158592, 0, 0,\n  /* 17697 */ 0, 2158592, 2572288, 2158592, 2158592, 1508, 2715648, 2207744, 2207744, 2207744, 2207744, 2207744,\n  /* 17709 */ 2207744, 2207744, 2867200, 2207744, 2904064, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744,\n  /* 17720 */ 2207744, 2207744, 2580480, 2207744, 2207744, 2207744, 2207744, 2621440, 2207744, 2207744, 2207744,\n  /* 17731 */ 3149824, 2207744, 2207744, 3170304, 3174400, 2207744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 2158592, 2158592,\n  /* 17750 */ 2158592, 2404352, 2412544, 2707456, 2732032, 2207744, 2207744, 2207744, 2822144, 2826240, 2207744,\n  /* 17761 */ 2895872, 2207744, 2207744, 2924544, 2207744, 2207744, 2973696, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0,\n  /* 17778 */ 0, 0, 0, 285, 2158592, 2158592, 3112960, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592,\n  /* 17792 */ 2158592, 2158592, 3186688, 2158592, 2207744, 2207744, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 0,\n  /* 17805 */ 0, 2158592, 2158592, 2158592, 2158592, 0, 0, 2535424, 2543616, 2158592, 2158592, 2158592, 0, 0, 0,\n  /* 17820 */ 2158592, 2158592, 2158592, 2990080, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592,\n  /* 17831 */ 2572288, 2981888, 2207744, 2207744, 3002368, 2207744, 3047424, 3063808, 3076096, 2207744, 2207744,\n  /* 17842 */ 2207744, 2207744, 2207744, 2207744, 2207744, 3203072, 2708960, 2732032, 2158592, 2158592, 2158592,\n  /* 17853 */ 2822144, 2827748, 2158592, 2895872, 2158592, 2158592, 2924544, 2158592, 2158592, 2973696, 2158592,\n  /* 17864 */ 2981888, 2158592, 2158592, 3002368, 2158592, 3047424, 3063808, 3076096, 2158592, 2158592, 2158592,\n  /* 17875 */ 2158592, 2158592, 2158592, 2158592, 3203072, 2981888, 2158592, 2158592, 3003876, 2158592, 3047424,\n  /* 17886 */ 3063808, 3076096, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3203072, 2207744,\n  /* 17897 */ 2207744, 2207744, 2207744, 2207744, 2424832, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744,\n  /* 17908 */ 2207744, 20480, 0, 0, 0, 0, 0, 2162688, 20480, 0, 2523136, 2527232, 2158592, 2158592, 2576384, 2158592,\n  /* 17924 */ 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2908160, 2527232,\n  /* 17935 */ 2207744, 2207744, 2576384, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744,\n  /* 17946 */ 2207744, 2207744, 2908160, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 0, 286, 2158592, 2158592, 0, 0,\n  /* 17967 */ 2158592, 2158592, 2158592, 2158592, 2633728, 2658304, 0, 0, 2740224, 2744320, 0, 2834432, 2207744,\n  /* 17980 */ 2207744, 2977792, 2207744, 2207744, 2207744, 2207744, 3039232, 2207744, 2207744, 2207744, 2207744,\n  /* 17991 */ 2207744, 2207744, 3158016, 0, 0, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 933, 45, 45, 45, 45, 442, 45, 45,\n  /* 18014 */ 45, 45, 45, 45, 45, 45, 45, 67, 67, 2494464, 2158592, 2158592, 2158592, 2524757, 2527232, 2158592,\n  /* 18030 */ 2158592, 2576384, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 1504, 2158592, 2498560, 2158592,\n  /* 18042 */ 2158592, 2158592, 2158592, 2568192, 2158592, 2592768, 2625536, 2158592, 2158592, 2674688, 2736128,\n  /* 18053 */ 2158592, 2158592, 0, 2158592, 2912256, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592,\n  /* 18065 */ 3108864, 2158592, 2158592, 3133440, 3145728, 3153920, 2375680, 2379776, 2207744, 2207744, 2420736,\n  /* 18076 */ 2207744, 2449408, 2207744, 2207744, 2207744, 2498560, 2207744, 2207744, 2207744, 2207744, 2568192,\n  /* 18087 */ 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 0, 551, 2158592, 2158592, 2158592, 2158592, 2207744,\n  /* 18106 */ 2506752, 2207744, 2207744, 2207744, 2207744, 2207744, 2158592, 2506752, 0, 2020, 2158592, 2592768,\n  /* 18118 */ 2625536, 2207744, 2207744, 2674688, 2736128, 2207744, 2207744, 2207744, 2912256, 2207744, 2207744,\n  /* 18129 */ 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 542, 0, 544,\n  /* 18143 */ 2207744, 3108864, 2207744, 2207744, 3133440, 3145728, 3153920, 2375680, 2379776, 2158592, 2158592,\n  /* 18154 */ 2420736, 2158592, 2449408, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 0, 641, 0, 0, 0,\n  /* 18169 */ 0, 0, 0, 2367488, 2158592, 2498560, 2158592, 2158592, 1621, 2158592, 2158592, 2568192, 2158592, 2592768,\n  /* 18183 */ 2625536, 2158592, 2158592, 2674688, 0, 0, 0, 0, 0, 1608, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1107, 97,\n  /* 18205 */ 97, 1110, 97, 97, 3133440, 3145728, 3153920, 2158592, 2408448, 2416640, 2158592, 2465792, 2158592,\n  /* 18218 */ 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3014656, 2158592, 2158592, 3051520,\n  /* 18229 */ 2158592, 2158592, 3100672, 2158592, 2158592, 3121152, 2158592, 2158592, 2158592, 3149824, 2416640,\n  /* 18240 */ 2207744, 2465792, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2633728,\n  /* 18251 */ 2658304, 2740224, 2744320, 2834432, 2949120, 2158592, 2985984, 2158592, 2998272, 2158592, 2158592,\n  /* 18262 */ 2158592, 3129344, 2207744, 2408448, 2949120, 2207744, 2985984, 2207744, 2998272, 2207744, 2207744,\n  /* 18273 */ 2207744, 3129344, 2158592, 2408448, 2416640, 2158592, 2465792, 2158592, 2158592, 2158592, 2158592,\n  /* 18284 */ 2158592, 3186688, 2158592, 0, 32768, 0, 0, 0, 0, 0, 0, 2367488, 2949120, 2158592, 2985984, 2158592,\n  /* 18300 */ 2998272, 2158592, 2158592, 2158592, 3129344, 2158592, 2158592, 2478080, 2158592, 2158592, 2158592,\n  /* 18311 */ 2535424, 2543616, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592,\n  /* 18322 */ 3117056, 2207744, 2207744, 2478080, 2207744, 2207744, 2207744, 2207744, 2699264, 2207744, 2207744,\n  /* 18333 */ 2207744, 2207744, 2207744, 2748416, 2756608, 2777088, 2801664, 2207744, 2207744, 2158877, 2158877,\n  /* 18344 */ 2158877, 2158877, 2158877, 0, 0, 0, 2158877, 2158877, 2158877, 2158877, 0, 0, 2535709, 2543901, 2158877,\n  /* 18359 */ 2158877, 2158877, 0, 0, 0, 2158877, 2158877, 2158877, 2990365, 2158877, 2158877, 2158730, 2158730,\n  /* 18372 */ 2158730, 2158730, 2158730, 2572426, 2207744, 2535424, 2543616, 2207744, 2207744, 2207744, 2207744,\n  /* 18383 */ 2207744, 2207744, 2207744, 2207744, 2207744, 3117056, 2158592, 2158592, 2478080, 2207744, 2207744,\n  /* 18394 */ 2990080, 2207744, 2207744, 2158592, 2158592, 2482176, 2158592, 2158592, 0, 0, 0, 2158592, 2158592,\n  /* 18407 */ 2158592, 0, 2158592, 2908160, 2158592, 2158592, 2158592, 2977792, 2158592, 2158592, 2158592, 2158592,\n  /* 18419 */ 3039232, 2158592, 2158592, 3010560, 2207744, 2428928, 2207744, 2514944, 2207744, 2588672, 2207744,\n  /* 18430 */ 2838528, 2207744, 2207744, 2207744, 3010560, 2158592, 2428928, 2158592, 2514944, 0, 0, 2158592, 2588672,\n  /* 18443 */ 2158592, 0, 2838528, 2158592, 2158592, 2158592, 3010560, 2158592, 2506752, 2158592, 18, 0, 0, 0, 0, 0, 0,\n  /* 18460 */ 0, 2211840, 0, 0, 0, 0, 2158592, 0, 0, 29315, 922, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 18485 */ 45, 45, 1539, 45, 3006464, 2383872, 0, 2020, 2158592, 2158592, 2158592, 2158592, 3006464, 2158592,\n  /* 18499 */ 2637824, 2953216, 2158592, 2207744, 2637824, 2953216, 2207744, 0, 0, 2158592, 2637824, 2953216, 2158592,\n  /* 18512 */ 2539520, 2158592, 2539520, 2207744, 0, 0, 2539520, 2158592, 2158592, 2158592, 2158592, 2207744, 2506752,\n  /* 18525 */ 2207744, 2207744, 2207744, 2207744, 2207744, 2158592, 2506752, 0, 0, 2158592, 2207744, 0, 2158592,\n  /* 18538 */ 2158592, 2207744, 0, 2158592, 2158592, 2207744, 0, 2158592, 2965504, 2965504, 2965504, 0, 0, 0, 0, 0,\n  /* 18554 */ 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2474269, 2158877, 2158877, 0, 0,\n  /* 18567 */ 2158877, 2158877, 2158877, 2158877, 2634013, 2658589, 0, 0, 2740509, 2744605, 0, 2834717, 40976, 18,\n  /* 18581 */ 36884, 45078, 24, 28, 90143, 94242, 118820, 102439, 106538, 98347, 118820, 118820, 118820, 40976, 18, 18,\n  /* 18597 */ 36884, 0, 0, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 86016, 0, 0, 2211840, 102439, 0, 0, 0, 98347, 0,\n  /* 18621 */ 2158592, 2158592, 2158592, 2158592, 2158592, 3158016, 0, 2375680, 2379776, 2158592, 2158592, 2420736,\n  /* 18633 */ 2158592, 2449408, 2158592, 2158592, 0, 94242, 0, 0, 0, 2211840, 102439, 0, 0, 106538, 98347, 135, 2158592,\n  /* 18650 */ 2158592, 2158592, 2158592, 2158592, 2158592, 2564096, 2158592, 2158592, 2158592, 2158592, 2158592,\n  /* 18661 */ 2596864, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2641920, 2158592, 2158592, 2158592,\n  /* 18672 */ 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2781184, 2793472, 2494464, 2158592,\n  /* 18683 */ 2158592, 2158592, 2523136, 2527232, 2158592, 2158592, 2576384, 2158592, 2158592, 2158592, 2158592,\n  /* 18694 */ 2158592, 2158592, 0, 40976, 0, 18, 18, 24, 0, 27, 27, 0, 2158592, 2498560, 2158592, 2158592, 0, 2158592,\n  /* 18712 */ 2158592, 2568192, 2158592, 2592768, 2625536, 2158592, 2158592, 2674688, 0, 0, 0, 0, 0, 2211840, 0, 0, 0,\n  /* 18729 */ 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2473984, 2158592,\n  /* 18742 */ 2158592, 2494464, 2158592, 2158592, 2158592, 3006464, 2383872, 0, 0, 2158592, 2158592, 2158592, 2158592,\n  /* 18755 */ 3006464, 2158592, 2637824, 2953216, 2158592, 2207744, 2637824, 2953216, 40976, 18, 36884, 45078, 24, 27,\n  /* 18769 */ 147488, 94242, 147456, 147488, 106538, 98347, 0, 0, 147456, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24,\n  /* 18788 */ 27, 27, 27, 27, 0, 81920, 0, 94242, 0, 0, 0, 2211840, 0, 0, 0, 106538, 98347, 0, 2158592, 2158592,\n  /* 18808 */ 2158592, 2158592, 2158592, 2158592, 2428928, 2158592, 2514944, 2158592, 2588672, 2158592, 2838528,\n  /* 18819 */ 2158592, 2158592, 40976, 18, 151573, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 0,\n  /* 18836 */ 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 1315, 0, 97, 97, 97, 97, 97,\n  /* 18860 */ 97, 97, 97, 97, 97, 1487, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 0, 29315, 0, 0,\n  /* 18886 */ 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 130, 94242, 0, 0, 0,\n  /* 18911 */ 2211840, 102439, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3096576,\n  /* 18925 */ 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2207744,\n  /* 18936 */ 2207744, 2158592, 18, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 2158592, 644, 2207744, 2207744, 2207744,\n  /* 18956 */ 3186688, 2207744, 0, 1080, 0, 1084, 0, 1088, 0, 0, 0, 0, 0, 0, 0, 2158730, 2158730, 2158730, 2158730,\n  /* 18975 */ 2158730, 2158730, 2158730, 2158730, 2158730, 2531466, 2158730, 2158730, 2158730, 2158730, 2158730,\n  /* 18986 */ 2617482, 0, 94242, 0, 0, 0, 2211840, 102439, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592,\n  /* 19003 */ 2158592, 2781184, 2793472, 2158592, 2818048, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592,\n  /* 19014 */ 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 40976, 18,\n  /* 19026 */ 36884, 45078, 24, 27, 90143, 159779, 159744, 102439, 159779, 98347, 0, 0, 159744, 40976, 18, 18, 36884, 0,\n  /* 19044 */ 45078, 0, 2224253, 172032, 2224253, 2232448, 2232448, 172032, 2232448, 90143, 0, 0, 2170880, 0, 0, 550,\n  /* 19060 */ 829, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976,\n  /* 19073 */ 0, 18, 18, 124, 124, 127, 127, 127, 40976, 18, 36884, 45078, 25, 29, 90143, 94242, 0, 102439, 106538,\n  /* 19092 */ 98347, 0, 0, 163931, 40976, 18, 18, 36884, 0, 45078, 249856, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0,\n  /* 19113 */ 2170880, 0, 0, 827, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592,\n  /* 19127 */ 2158592, 0, 40976, 0, 4243810, 4243810, 24, 24, 27, 27, 27, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0,\n  /* 19149 */ 0, 57344, 286, 2158592, 2158592, 2158592, 2158592, 2707456, 2732032, 2158592, 2158592, 2158592, 2822144,\n  /* 19162 */ 2826240, 2158592, 2895872, 2158592, 2158592, 2924544, 2158592, 2158592, 2973696, 2158592, 2207744,\n  /* 19173 */ 2207744, 2207744, 3186688, 2207744, 0, 0, 0, 0, 0, 0, 53248, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 1613, 97,\n  /* 19196 */ 97, 97, 97, 97, 97, 1495, 97, 97, 97, 97, 97, 97, 97, 97, 97, 566, 97, 97, 97, 97, 97, 97, 2207744, 0, 0,\n  /* 19221 */ 0, 0, 0, 0, 2166784, 546, 0, 0, 0, 0, 286, 2158592, 2158592, 2158592, 2207744, 2207744, 2207744, 2207744,\n  /* 19239 */ 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 17, 18, 36884,\n  /* 19252 */ 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 20480, 120, 121, 18, 18, 36884, 0, 45078, 0,\n  /* 19272 */ 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 2170880, 0, 53248, 550, 0, 2158592, 2158592, 2158592, 2387968,\n  /* 19291 */ 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 196608, 18, 266240, 24, 24, 27, 27, 27, 0,\n  /* 19308 */ 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 0, 45, 45, 45, 45, 45, 45, 45, 1535, 45, 45, 45, 45, 45,\n  /* 19332 */ 45, 45, 1416, 45, 45, 45, 45, 45, 45, 45, 45, 424, 45, 45, 45, 45, 45, 45, 45, 45, 45, 405, 45, 45, 45,\n  /* 19357 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 199, 45, 45, 67, 67, 67, 67, 67, 491, 67, 67, 67, 67, 67, 67, 67,\n  /* 19383 */ 67, 67, 67, 67, 1766, 67, 67, 67, 1767, 67, 24850, 24850, 12564, 12564, 0, 0, 2166784, 546, 0, 53531,\n  /* 19403 */ 53531, 0, 286, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 45, 45, 45, 45, 45,\n  /* 19430 */ 67, 67, 67, 67, 67, 67, 67, 67, 67, 743, 57889, 0, 2170880, 0, 0, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 19455 */ 97, 45, 45, 45, 45, 45, 45, 45, 45, 1856, 45, 1858, 1859, 67, 67, 67, 1009, 67, 67, 67, 67, 67, 67, 67,\n  /* 19479 */ 67, 67, 67, 67, 1021, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2367773,\n  /* 19504 */ 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2699549, 2158877, 2158877, 2158877, 2158877,\n  /* 19515 */ 2158877, 2748701, 2756893, 2777373, 2801949, 97, 1115, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 19535 */ 97, 857, 97, 67, 67, 67, 67, 67, 1258, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1826, 67, 97, 97, 97,\n  /* 19560 */ 97, 97, 97, 1338, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 870, 97, 97, 67, 67, 67, 1463, 67,\n  /* 19585 */ 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1579, 67, 67, 97, 97, 97, 1518, 97, 97, 97, 97, 97, 97,\n  /* 19610 */ 97, 97, 97, 97, 97, 97, 97, 904, 905, 97, 97, 97, 97, 1620, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0,\n  /* 19636 */ 921, 0, 0, 0, 0, 0, 0, 45, 1679, 67, 67, 67, 1682, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1690, 67, 0, 0, 97,\n  /* 19663 */ 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 45, 45, 45, 669, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 19690 */ 189, 45, 45, 45, 1748, 45, 45, 45, 1749, 1750, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1959, 67,\n  /* 19714 */ 67, 67, 67, 1768, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1791, 97, 97, 97,\n  /* 19739 */ 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1802, 67, 1817, 67, 67, 67, 67, 67, 67, 1823, 67, 67, 67, 67,\n  /* 19764 */ 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 97, 1848, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 19791 */ 45, 659, 45, 45, 45, 45, 45, 45, 45, 1863, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 495, 67, 67,\n  /* 19816 */ 67, 67, 67, 1878, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97,\n  /* 19844 */ 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 0, 1973, 97, 97, 97,\n  /* 19871 */ 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1165, 97, 1167, 67, 24850, 24850, 12564, 12564, 0,\n  /* 19894 */ 0, 2166784, 0, 0, 53531, 53531, 0, 286, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 1789, 97, 0,\n  /* 19919 */ 94242, 0, 0, 0, 2211840, 102439, 0, 0, 106538, 98347, 136, 2158592, 2158592, 2158592, 2158592, 2158592,\n  /* 19935 */ 3158016, 229376, 2375680, 2379776, 2158592, 2158592, 2420736, 2158592, 2449408, 2158592, 2158592, 67,\n  /* 19947 */ 24850, 24850, 12564, 12564, 0, 0, 280, 547, 0, 53531, 53531, 0, 286, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97,\n  /* 19970 */ 0, 1788, 97, 97, 0, 97, 2024, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 235, 67, 67, 67,\n  /* 19996 */ 67, 67, 57889, 547, 547, 0, 0, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 1799, 45, 45, 45,\n  /* 20021 */ 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 1092, 0, 0, 0, 0, 0, 97, 97, 97, 97, 1612, 97, 97,\n  /* 20046 */ 97, 97, 1616, 97, 1297, 1472, 0, 0, 0, 0, 1303, 1474, 0, 0, 0, 0, 1309, 1476, 0, 0, 0, 0, 97, 97, 97,\n  /* 20071 */ 1481, 97, 97, 97, 97, 97, 97, 1488, 97, 0, 1474, 0, 1476, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 20096 */ 607, 97, 97, 97, 97, 40976, 18, 36884, 45078, 26, 30, 90143, 94242, 0, 102439, 106538, 98347, 0, 0,\n  /* 20115 */ 213080, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 143448, 40976, 18,\n  /* 20133 */ 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 0, 0, 0, 0, 97, 97, 97, 97, 1482, 97, 1483, 97, 97,\n  /* 20158 */ 97, 97, 97, 97, 1326, 97, 97, 1329, 1330, 97, 97, 97, 97, 97, 97, 1159, 1160, 97, 97, 97, 97, 97, 97, 97,\n  /* 20182 */ 97, 590, 97, 97, 97, 97, 97, 97, 97, 0, 94242, 0, 0, 0, 2211974, 102439, 0, 0, 106538, 98347, 0, 2158730,\n  /* 20204 */ 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2474122, 2158730, 2158730, 2494602,\n  /* 20215 */ 2158730, 2158730, 2158730, 2809994, 2158730, 2158730, 2842762, 2158730, 2158730, 2158730, 2900106,\n  /* 20226 */ 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3014794, 2158730, 2158730,\n  /* 20237 */ 3051658, 2158730, 2158730, 3100810, 2158730, 2158730, 2158730, 2158730, 3096714, 2158730, 2158730,\n  /* 20248 */ 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2207744, 2207744, 2207744,\n  /* 20259 */ 2207744, 2207744, 2572288, 2207744, 2207744, 2207744, 2207744, 541, 541, 543, 543, 0, 0, 2166784, 0, 548,\n  /* 20275 */ 549, 549, 0, 286, 2158877, 2158877, 2158877, 2863389, 2892061, 2158877, 2158877, 2158877, 2158877,\n  /* 20288 */ 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 3186973, 2158877, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 20305 */ 2367626, 2158877, 2404637, 2412829, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877,\n  /* 20316 */ 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2564381, 2158877,\n  /* 20327 */ 2158877, 2605341, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2679069, 2158877, 2695453,\n  /* 20338 */ 2158877, 2703645, 2158877, 2711837, 2752797, 2158877, 0, 2158877, 2158877, 2158877, 2384010, 2158730,\n  /* 20350 */ 2158730, 2158730, 2158730, 3006602, 2383872, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744,\n  /* 20361 */ 3096576, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744,\n  /* 20372 */ 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162688, 0, 0, 2158877, 2785565, 2158877, 2810141, 2158877, 2158877,\n  /* 20389 */ 2842909, 2158877, 2158877, 2158877, 2900253, 2158877, 2158877, 2158877, 2158877, 2158877, 2531613,\n  /* 20400 */ 2158877, 2158877, 2158877, 2158877, 2158877, 2617629, 2158877, 2158877, 2158877, 2158877, 2158730,\n  /* 20411 */ 2818186, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730,\n  /* 20422 */ 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3105053, 2158877, 2158877, 2158877, 2158877,\n  /* 20433 */ 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 0, 0, 0, 0, 0, 97, 97, 97, 1611,\n  /* 20450 */ 97, 97, 97, 97, 97, 97, 97, 1496, 97, 97, 1499, 97, 97, 97, 97, 97, 2441354, 2445450, 2158730, 2158730,\n  /* 20470 */ 2158730, 2158730, 2158730, 2158730, 2502794, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730,\n  /* 20481 */ 2158730, 2433162, 2158730, 2453642, 2461834, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730,\n  /* 20492 */ 2580618, 2158730, 2158730, 2158730, 2158730, 2621578, 2158730, 2158730, 2158730, 2158730, 2158730,\n  /* 20503 */ 2158730, 2699402, 2158730, 2158730, 2158730, 2158730, 2678922, 2158730, 2695306, 2158730, 2703498,\n  /* 20514 */ 2158730, 2711690, 2752650, 2158730, 2158730, 2785418, 2158730, 2158730, 2158730, 3113098, 2158730,\n  /* 20525 */ 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3186826, 2158730, 2207744,\n  /* 20536 */ 2207744, 2207744, 2207744, 2781184, 2793472, 2207744, 2818048, 2207744, 2207744, 2207744, 2207744,\n  /* 20547 */ 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 541, 0, 543, 2158877, 2502941,\n  /* 20561 */ 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2580765, 2158877, 2158877,\n  /* 20572 */ 2158877, 2158877, 2621725, 2158877, 3019037, 2158877, 3043613, 2158877, 2158877, 2158877, 2158877,\n  /* 20583 */ 3080477, 2158877, 2158877, 3113245, 2158877, 2158877, 2158877, 2158877, 0, 2158877, 2908445, 2158877,\n  /* 20595 */ 2158877, 2158877, 2978077, 2158877, 2158877, 2158877, 2158877, 3039517, 2158877, 2158730, 2510986,\n  /* 20606 */ 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2584714, 2158730, 2609290, 2158730,\n  /* 20617 */ 2158730, 2629770, 2158730, 2158730, 2158730, 2388106, 2158730, 2158730, 2158730, 2158730, 2158730,\n  /* 20628 */ 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2605194, 2158730, 2158730,\n  /* 20639 */ 2158730, 2158730, 2687114, 2158730, 2715786, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730,\n  /* 20650 */ 2158730, 2867338, 2158730, 2904202, 2158730, 2158730, 2158730, 2642058, 2158730, 2158730, 2158730,\n  /* 20661 */ 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2781322, 2793610, 2158730, 3121290,\n  /* 20672 */ 2158730, 2158730, 2158730, 3149962, 2158730, 2158730, 3170442, 3174538, 2158730, 2367488, 2207744,\n  /* 20683 */ 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2441216, 2445312, 2207744, 2207744, 2207744,\n  /* 20694 */ 2207744, 2207744, 2207744, 2502656, 2158877, 2433309, 2158877, 2453789, 2461981, 2158877, 2158877,\n  /* 20705 */ 2158877, 2158877, 2158877, 2158877, 2511133, 2158877, 2158877, 2158877, 2158877, 2584861, 2158877,\n  /* 20716 */ 2609437, 2158877, 2158877, 2629917, 2158877, 2158877, 2158877, 2687261, 2158877, 2715933, 2158877,\n  /* 20727 */ 2158730, 2158730, 2973834, 2158730, 2982026, 2158730, 2158730, 3002506, 2158730, 3047562, 3063946,\n  /* 20738 */ 3076234, 2158730, 2158730, 2158730, 2158730, 2207744, 2506752, 2207744, 2207744, 2207744, 2207744,\n  /* 20749 */ 2207744, 2158877, 2507037, 0, 0, 2158877, 2158730, 2158730, 2158730, 3203210, 2207744, 2207744, 2207744,\n  /* 20762 */ 2207744, 2207744, 2424832, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744,\n  /* 20773 */ 2207744, 2207744, 2207744, 2207744, 2564096, 2207744, 2207744, 2207744, 2707741, 2732317, 2158877,\n  /* 20784 */ 2158877, 2158877, 2822429, 2826525, 2158877, 2896157, 2158877, 2158877, 2924829, 2158877, 2158877,\n  /* 20795 */ 2973981, 2158877, 18, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 642, 0, 2158592, 0, 45, 1529, 45, 45, 45, 45,\n  /* 20818 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 1755, 45, 67, 67, 2982173, 2158877, 2158877, 3002653, 2158877,\n  /* 20836 */ 3047709, 3064093, 3076381, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 3203357,\n  /* 20847 */ 2523274, 2527370, 2158730, 2158730, 2576522, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730,\n  /* 20858 */ 2158730, 2158730, 2158730, 2158730, 2908298, 2494749, 2158877, 2158877, 2158877, 2523421, 2527517,\n  /* 20869 */ 2158877, 2158877, 2576669, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 0, 40976, 0, 18, 18,\n  /* 20883 */ 4321280, 2224253, 2232448, 4329472, 2232448, 2158730, 2498698, 2158730, 2158730, 2158730, 2158730,\n  /* 20894 */ 2568330, 2158730, 2592906, 2625674, 2158730, 2158730, 2674826, 2736266, 2158730, 2158730, 2158730,\n  /* 20905 */ 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744,\n  /* 20916 */ 2207744, 2207744, 2207744, 2158730, 2912394, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730,\n  /* 20927 */ 2158730, 3109002, 2158730, 2158730, 3133578, 3145866, 3154058, 2375680, 2207744, 3108864, 2207744,\n  /* 20938 */ 2207744, 3133440, 3145728, 3153920, 2375965, 2380061, 2158877, 2158877, 2421021, 2158877, 2449693,\n  /* 20949 */ 2158877, 2158877, 2158877, 3117341, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730,\n  /* 20960 */ 2158730, 2158730, 2158730, 2158730, 2158730, 3104906, 2158730, 2158730, 2158730, 2158730, 2158730,\n  /* 20971 */ 2158730, 2158877, 2498845, 2158877, 2158877, 0, 2158877, 2158877, 2568477, 2158877, 2593053, 2625821,\n  /* 20983 */ 2158877, 2158877, 2674973, 0, 0, 0, 0, 97, 97, 1480, 97, 97, 97, 97, 97, 1485, 97, 97, 97, 0, 97, 97,\n  /* 21005 */ 1729, 97, 1731, 97, 97, 97, 97, 97, 97, 97, 311, 97, 97, 97, 97, 97, 97, 97, 97, 1520, 97, 97, 1523, 97,\n  /* 21029 */ 97, 1526, 97, 2736413, 2158877, 2158877, 0, 2158877, 2912541, 2158877, 2158877, 2158877, 2158877, 2158877,\n  /* 21043 */ 2158877, 2158877, 3109149, 2158877, 2158877, 3014941, 2158877, 2158877, 3051805, 2158877, 2158877,\n  /* 21054 */ 3100957, 2158877, 2158877, 3121437, 2158877, 2158877, 2158877, 3150109, 3133725, 3146013, 3154205,\n  /* 21065 */ 2158730, 2408586, 2416778, 2158730, 2465930, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730,\n  /* 21076 */ 2158730, 2158730, 3018890, 2158730, 3043466, 2158730, 2158730, 2158730, 2158730, 3080330, 2633866,\n  /* 21087 */ 2658442, 2740362, 2744458, 2834570, 2949258, 2158730, 2986122, 2158730, 2998410, 2158730, 2158730,\n  /* 21098 */ 2158730, 3129482, 2207744, 2408448, 2949120, 2207744, 2985984, 2207744, 2998272, 2207744, 2207744,\n  /* 21109 */ 2207744, 3129344, 2158877, 2408733, 2416925, 2158877, 2466077, 2158877, 2158877, 3170589, 3174685,\n  /* 21120 */ 2158877, 0, 0, 0, 2158730, 2158730, 2158730, 2158730, 2158730, 2424970, 2158730, 2158730, 2158730,\n  /* 21133 */ 2158730, 2707594, 2732170, 2158730, 2158730, 2158730, 2822282, 2826378, 2158730, 2896010, 2158730,\n  /* 21144 */ 2158730, 2924682, 2949405, 2158877, 2986269, 2158877, 2998557, 2158877, 2158877, 2158877, 3129629,\n  /* 21155 */ 2158730, 2158730, 2478218, 2158730, 2158730, 2158730, 2535562, 2543754, 2158730, 2158730, 2158730,\n  /* 21166 */ 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3117194, 2207744, 2207744, 2478080, 2207744,\n  /* 21177 */ 2207744, 2207744, 2207744, 3014656, 2207744, 2207744, 3051520, 2207744, 2207744, 3100672, 2207744,\n  /* 21188 */ 2207744, 3121152, 2207744, 2207744, 2207744, 2207744, 2207744, 2584576, 2207744, 2609152, 2207744,\n  /* 21199 */ 2207744, 2629632, 2207744, 2207744, 2207744, 2686976, 2207744, 2207744, 2535424, 2543616, 2207744,\n  /* 21210 */ 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3117056, 2158877, 2158877,\n  /* 21221 */ 2478365, 0, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158730, 2158730, 2482314, 2158730,\n  /* 21233 */ 2158730, 2158730, 2158730, 2158730, 2158730, 2207744, 2207744, 2207744, 2387968, 2207744, 2207744,\n  /* 21244 */ 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 823, 0, 825,\n  /* 21258 */ 2158730, 2158730, 2158730, 2990218, 2158730, 2158730, 2207744, 2207744, 2482176, 2207744, 2207744,\n  /* 21269 */ 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162688, 135, 0, 2207744, 2207744, 2990080,\n  /* 21286 */ 2207744, 2207744, 2158877, 2158877, 2482461, 2158877, 2158877, 0, 0, 0, 2158877, 2158877, 2158877,\n  /* 21299 */ 2158877, 2158877, 2158730, 2429066, 2158730, 2515082, 2158730, 2588810, 2158730, 2838666, 2158730,\n  /* 21310 */ 2158730, 2158730, 3010698, 2207744, 2428928, 2207744, 2514944, 2207744, 2588672, 2207744, 2838528,\n  /* 21321 */ 2207744, 2207744, 2207744, 3010560, 2158877, 2429213, 2158877, 2515229, 0, 0, 2158877, 2588957, 2158877,\n  /* 21334 */ 0, 2838813, 2158877, 2158877, 2158877, 3010845, 2158730, 2506890, 2158730, 2158730, 2158730, 2748554,\n  /* 21346 */ 2756746, 2777226, 2801802, 2158730, 2158730, 2158730, 2863242, 2891914, 2158730, 2158730, 2158730,\n  /* 21357 */ 2158730, 2158730, 2158730, 2564234, 2158730, 2158730, 2158730, 2158730, 2158730, 2597002, 2158730,\n  /* 21368 */ 2158730, 2158730, 3006464, 2384157, 0, 0, 2158877, 2158877, 2158877, 2158877, 3006749, 2158730, 2637962,\n  /* 21381 */ 2953354, 2158730, 2207744, 2637824, 2953216, 2207744, 0, 0, 2158877, 2638109, 2953501, 2158877, 2539658,\n  /* 21394 */ 2158730, 2539520, 2207744, 0, 0, 2539805, 2158877, 2158730, 2158730, 2158730, 2977930, 2158730, 2158730,\n  /* 21407 */ 2158730, 2158730, 3039370, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3158154, 2207744, 0,\n  /* 21419 */ 2158877, 2158730, 2207744, 0, 2158877, 2158730, 2207744, 0, 2158877, 2965642, 2965504, 2965789, 0, 0, 0,\n  /* 21434 */ 0, 1315, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1484, 97, 97, 97, 97, 2158592, 18, 0, 122880, 0, 0, 0,\n  /* 21459 */ 77824, 0, 2211840, 0, 0, 0, 0, 2158592, 0, 356, 0, 0, 0, 0, 0, 0, 28809, 0, 139, 45, 45, 45, 45, 45, 45,\n  /* 21484 */ 1751, 45, 45, 45, 45, 45, 45, 45, 67, 67, 1427, 67, 67, 67, 67, 67, 1432, 67, 67, 67, 3104768, 2158592,\n  /* 21506 */ 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 122880,\n  /* 21518 */ 0, 0, 0, 0, 1315, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 1322, 550, 0, 286, 0, 2158592, 2158592, 2158592,\n  /* 21541 */ 2158592, 2158592, 2424832, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 24,\n  /* 21556 */ 24, 4329472, 27, 27, 2207744, 2207744, 2977792, 2207744, 2207744, 2207744, 2207744, 3039232, 2207744,\n  /* 21569 */ 2207744, 2207744, 2207744, 2207744, 2207744, 3158016, 542, 0, 0, 0, 542, 0, 544, 0, 0, 0, 544, 0, 550, 0,\n  /* 21589 */ 0, 0, 0, 0, 97, 97, 1610, 97, 97, 97, 97, 97, 97, 97, 97, 898, 97, 97, 97, 97, 97, 97, 97, 0, 94242, 0, 0,\n  /* 21616 */ 0, 2211840, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2424832, 2158592, 2158592,\n  /* 21632 */ 2158592, 2158592, 2158592, 2158592, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 237568, 102439, 106538,\n  /* 21647 */ 98347, 0, 0, 20480, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 192512,\n  /* 21666 */ 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 94, 40976, 18, 36884,\n  /* 21684 */ 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 96, 40976, 18, 36884, 45078, 24, 27, 90143,\n  /* 21703 */ 94242, 0, 102439, 106538, 98347, 0, 0, 12378, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 126, 126,\n  /* 21723 */ 126, 126, 90143, 0, 0, 2170880, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592,\n  /* 21740 */ 2158592, 2158592, 2158592, 20480, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 40976, 18, 36884, 45078, 24, 27,\n  /* 21759 */ 90143, 94242, 241664, 102439, 106538, 98347, 0, 0, 20568, 40976, 18, 36884, 45078, 24, 27, 90143, 94242,\n  /* 21776 */ 0, 102439, 106538, 98347, 0, 0, 200797, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538,\n  /* 21794 */ 98347, 0, 0, 20480, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 0, 0, 44, 0, 0, 20575, 40976, 18,\n  /* 21815 */ 36884, 45078, 24, 27, 90143, 94242, 0, 41, 41, 41, 0, 0, 1126400, 40976, 18, 36884, 45078, 24, 27, 90143,\n  /* 21835 */ 94242, 0, 102439, 106538, 98347, 0, 0, 0, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439,\n  /* 21853 */ 106538, 98347, 0, 0, 89, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 131201, 27, 27, 90143, 0, 0,\n  /* 21875 */ 2170880, 0, 0, 550, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592,\n  /* 21889 */ 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2441216, 2445312, 2158592, 2158592,\n  /* 21900 */ 2158592, 2158592, 2158592, 0, 94242, 0, 0, 208896, 2211840, 102439, 0, 0, 106538, 98347, 0, 2158592,\n  /* 21916 */ 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 0, 0, 0, 0, 0, 0, 0, 0, 2367488, 32768, 0, 0, 0, 0,\n  /* 21936 */ 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2433024, 2158592,\n  /* 21949 */ 2453504, 2461696, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2510848, 2158592, 2158592,\n  /* 21960 */ 2158592, 2158592, 40976, 18, 36884, 245783, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 20480,\n  /* 21977 */ 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 221184, 40976, 18, 36884,\n  /* 21995 */ 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 180224, 40976, 18, 18, 36884, 155648, 45078,\n  /* 22013 */ 0, 24, 24, 217088, 27, 27, 27, 217088, 90143, 0, 0, 2170880, 0, 0, 828, 0, 2158592, 2158592, 2158592,\n  /* 22032 */ 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2207744, 2207744, 2207744, 2387968,\n  /* 22043 */ 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162688, 233472, 0, 0,\n  /* 22060 */ 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 45, 45, 718, 45, 45, 45, 45, 45, 45,\n  /* 22083 */ 45, 45, 45, 727, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 45, 1808, 45, 45,\n  /* 22107 */ 45, 45, 67, 67, 67, 67, 67, 67, 67, 97, 97, 0, 0, 97, 67, 24850, 24850, 12564, 12564, 0, 57889, 0, 0, 0,\n  /* 22131 */ 53531, 53531, 367, 286, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 1787, 0, 97, 97, 0, 97, 97, 97, 45, 45, 45,\n  /* 22156 */ 45, 2029, 45, 67, 67, 67, 67, 2033, 57889, 0, 0, 54074, 54074, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 22180 */ 45, 1798, 45, 45, 1800, 45, 45, 0, 1472, 0, 0, 0, 0, 0, 1474, 0, 0, 0, 0, 0, 1476, 0, 0, 0, 0, 1315, 0, 0,\n  /* 22208 */ 0, 0, 97, 97, 97, 97, 1320, 97, 97, 0, 0, 97, 97, 97, 97, 1786, 97, 0, 0, 97, 97, 0, 1790, 1527, 45, 45,\n  /* 22234 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 663, 67, 24850, 24850, 12564, 12564, 0, 57889, 281, 0,\n  /* 22257 */ 0, 53531, 53531, 367, 286, 97, 97, 0, 0, 97, 97, 97, 1785, 97, 97, 0, 0, 97, 97, 0, 97, 97, 1979, 97, 97,\n  /* 22282 */ 45, 45, 1983, 45, 1984, 45, 45, 45, 45, 45, 652, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 690, 45, 45, 694,\n  /* 22307 */ 45, 45, 40976, 19, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 262144, 40976, 18,\n  /* 22326 */ 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 46, 67, 98, 40976, 18, 36884, 45078, 24,\n  /* 22344 */ 27, 90143, 94242, 38, 102439, 106538, 98347, 45, 67, 97, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0,\n  /* 22363 */ 102439, 106538, 98347, 0, 0, 258048, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538,\n  /* 22380 */ 98347, 0, 0, 1122423, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 1114152, 1114152, 1114152, 0, 0,\n  /* 22398 */ 1114112, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 37, 102439, 106538, 98347, 0, 0, 204800, 40976,\n  /* 22415 */ 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 57436, 40976, 18, 36884, 45078,\n  /* 22433 */ 24, 27, 33, 33, 0, 33, 33, 33, 0, 0, 0, 40976, 18, 18, 36884, 0, 45078, 0, 124, 124, 124, 127, 127, 127,\n  /* 22457 */ 127, 90143, 0, 0, 2170880, 0, 0, 550, 0, 2158877, 2158877, 2158877, 2388253, 2158877, 2158877, 2158877,\n  /* 22473 */ 2158877, 2158877, 2781469, 2793757, 2158877, 2818333, 2158877, 2158877, 2158877, 2158877, 2158877,\n  /* 22484 */ 2158877, 2158877, 2867485, 2158877, 2904349, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877,\n  /* 22495 */ 2158877, 3096861, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877,\n  /* 22506 */ 2441501, 2445597, 2158877, 2158877, 2158877, 2158877, 2158877, 40976, 122, 123, 36884, 0, 45078, 0, 24,\n  /* 22521 */ 24, 24, 27, 27, 27, 27, 90143, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 936, 2158592,\n  /* 22545 */ 4243810, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 2158592, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45,\n  /* 22571 */ 45, 45, 935, 45, 45, 45, 715, 45, 45, 45, 45, 45, 45, 45, 723, 45, 45, 45, 45, 45, 1182, 45, 45, 45, 45,\n  /* 22596 */ 45, 45, 45, 45, 45, 45, 430, 45, 45, 45, 45, 45, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38,\n  /* 22617 */ 102439, 106538, 98347, 47, 68, 99, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538,\n  /* 22634 */ 98347, 48, 69, 100, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 49, 70, 101,\n  /* 22653 */ 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 50, 71, 102, 40976, 18, 36884,\n  /* 22671 */ 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 51, 72, 103, 40976, 18, 36884, 45078, 24, 27,\n  /* 22689 */ 90143, 94242, 38, 102439, 106538, 98347, 52, 73, 104, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38,\n  /* 22707 */ 102439, 106538, 98347, 53, 74, 105, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538,\n  /* 22724 */ 98347, 54, 75, 106, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 55, 76, 107,\n  /* 22743 */ 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 56, 77, 108, 40976, 18, 36884,\n  /* 22761 */ 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 57, 78, 109, 40976, 18, 36884, 45078, 24, 27,\n  /* 22779 */ 90143, 94242, 38, 102439, 106538, 98347, 58, 79, 110, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38,\n  /* 22797 */ 102439, 106538, 98347, 59, 80, 111, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538,\n  /* 22814 */ 98347, 60, 81, 112, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 61, 82, 113,\n  /* 22833 */ 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 62, 83, 114, 40976, 18, 36884,\n  /* 22851 */ 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 63, 84, 115, 40976, 18, 36884, 45078, 24, 27,\n  /* 22869 */ 90143, 94242, 38, 102439, 106538, 98347, 64, 85, 116, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38,\n  /* 22887 */ 102439, 106538, 98347, 65, 86, 117, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538,\n  /* 22904 */ 98347, 66, 87, 118, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 118820, 102439, 106538, 98347, 118820,\n  /* 22921 */ 118820, 118820, 40976, 18, 18, 0, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 1314, 0, 0, 0, 0,\n  /* 22945 */ 0, 0, 97, 97, 97, 97, 97, 1321, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 0, 367, 0, 0, 1315, 0,\n  /* 22972 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1360, 97, 97, 131, 94242, 0, 0, 0, 38, 102439, 0, 0,\n  /* 22997 */ 106538, 98347, 28809, 45, 45, 45, 145, 149, 45, 45, 45, 45, 45, 174, 45, 179, 45, 185, 45, 188, 45, 45,\n  /* 23019 */ 202, 67, 255, 67, 67, 269, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 292, 296, 97,\n  /* 23042 */ 97, 97, 97, 97, 321, 97, 326, 97, 332, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 646,\n  /* 23067 */ 335, 97, 97, 349, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 437, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 23092 */ 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 523, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 23118 */ 511, 67, 67, 67, 97, 97, 97, 620, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1501, 1502, 97, 793,\n  /* 23143 */ 67, 67, 796, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 808, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0,\n  /* 23170 */ 97, 97, 2052, 67, 67, 67, 67, 813, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 57889, 0, 0, 54074,\n  /* 23193 */ 54074, 550, 830, 97, 97, 97, 97, 97, 97, 97, 97, 97, 315, 97, 97, 97, 97, 97, 97, 841, 97, 97, 97, 97, 97,\n  /* 23218 */ 97, 97, 97, 97, 854, 97, 97, 97, 97, 97, 97, 589, 97, 97, 97, 97, 97, 97, 97, 97, 97, 867, 97, 97, 97, 97,\n  /* 23244 */ 97, 97, 97, 891, 97, 97, 894, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 906, 45, 937, 45, 45, 940, 45, 45,\n  /* 23269 */ 45, 45, 45, 45, 948, 45, 45, 45, 45, 45, 734, 735, 67, 737, 67, 738, 67, 740, 67, 67, 67, 45, 967, 45, 45,\n  /* 23294 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 435, 45, 45, 45, 980, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 23320 */ 45, 45, 45, 45, 415, 45, 45, 67, 67, 1024, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97,\n  /* 23346 */ 67, 67, 67, 67, 67, 25398, 1081, 13112, 1085, 54074, 1089, 0, 0, 0, 0, 0, 0, 363, 0, 28809, 0, 139, 45,\n  /* 23369 */ 45, 45, 45, 45, 45, 1674, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1913, 67, 1914, 67, 67, 67, 1918, 67, 67,\n  /* 23393 */ 97, 97, 97, 97, 1118, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 630, 97, 97, 97, 97, 97, 1169, 97, 97,\n  /* 23418 */ 97, 97, 97, 0, 921, 0, 1175, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 1534, 45, 45, 45, 45, 45, 1538, 45, 45,\n  /* 23444 */ 45, 45, 1233, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 742, 67, 45, 45, 1191, 45, 45, 45,\n  /* 23469 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 454, 67, 67, 67, 67, 1243, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 23495 */ 67, 1251, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 2050, 0, 97, 97, 45, 45, 45, 732, 45, 45, 67, 67, 67,\n  /* 23521 */ 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 67, 67, 67, 1284, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 23547 */ 67, 772, 67, 67, 67, 1293, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 368, 2158592, 2158592,\n  /* 23572 */ 2158592, 2404352, 2412544, 1323, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1331, 97, 97, 97, 0, 97, 97,\n  /* 23594 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 1737, 97, 1364, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1373,\n  /* 23619 */ 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 647, 45, 45, 1387, 45, 45, 1391, 45, 45, 45,\n  /* 23644 */ 45, 45, 45, 45, 45, 45, 45, 410, 45, 45, 45, 45, 45, 1400, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1407,\n  /* 23669 */ 45, 45, 45, 45, 45, 941, 45, 943, 45, 45, 45, 45, 45, 45, 951, 45, 67, 1438, 67, 67, 67, 67, 67, 67, 67,\n  /* 23694 */ 67, 67, 67, 1447, 67, 67, 67, 67, 67, 67, 782, 67, 67, 67, 67, 67, 67, 67, 67, 67, 756, 67, 67, 67, 67,\n  /* 23719 */ 67, 67, 97, 1491, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1500, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97,\n  /* 23745 */ 97, 97, 97, 1736, 97, 45, 45, 1541, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 677, 45, 45, 67,\n  /* 23770 */ 1581, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 791, 792, 67, 67, 67, 67, 1598, 67, 1600,\n  /* 23794 */ 67, 67, 67, 67, 67, 67, 67, 67, 1472, 97, 97, 97, 1727, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 23819 */ 97, 1513, 97, 97, 67, 67, 97, 1879, 97, 1881, 97, 0, 1884, 0, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 0,\n  /* 23845 */ 0, 0, 1842, 97, 97, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1928, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45,\n  /* 23872 */ 45, 45, 1903, 45, 45, 45, 67, 67, 67, 67, 97, 97, 97, 97, 1971, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 97,\n  /* 23898 */ 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 1381, 45, 45, 45, 45, 1976, 97, 97, 97, 97, 97, 45, 45, 45, 45,\n  /* 23924 */ 45, 45, 45, 45, 45, 45, 45, 45, 1747, 809, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112,\n  /* 23948 */ 544, 97, 907, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 638, 0, 0, 0, 0, 1478, 97, 97, 97, 97, 97, 97,\n  /* 23974 */ 97, 97, 97, 97, 97, 1150, 97, 97, 97, 97, 67, 67, 67, 67, 1244, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 23999 */ 67, 477, 67, 67, 67, 67, 67, 67, 1294, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97,\n  /* 24027 */ 97, 97, 97, 97, 97, 97, 97, 97, 1324, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 1374,\n  /* 24053 */ 97, 97, 97, 97, 0, 1175, 0, 45, 45, 45, 45, 45, 45, 45, 45, 945, 45, 45, 45, 45, 45, 45, 45, 45, 1908, 45,\n  /* 24079 */ 45, 1910, 45, 67, 67, 67, 67, 67, 67, 67, 67, 1919, 67, 0, 0, 97, 97, 97, 97, 45, 2048, 67, 2049, 0, 0,\n  /* 24104 */ 97, 2051, 45, 45, 45, 939, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 397, 45, 45, 45, 1921, 67, 67,\n  /* 24129 */ 1923, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 1947, 45, 1935, 0, 0, 0,\n  /* 24155 */ 97, 1939, 97, 97, 1941, 97, 45, 45, 45, 45, 45, 45, 382, 389, 45, 45, 45, 45, 45, 45, 45, 45, 1810, 45,\n  /* 24179 */ 45, 1812, 67, 67, 67, 67, 67, 256, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 336, 97,\n  /* 24203 */ 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139,\n  /* 24228 */ 45, 45, 371, 373, 45, 45, 45, 955, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 413, 45, 45, 45, 457,\n  /* 24253 */ 459, 67, 67, 67, 67, 67, 67, 67, 67, 473, 67, 478, 67, 67, 482, 67, 67, 485, 67, 67, 67, 67, 67, 67, 67,\n  /* 24278 */ 67, 67, 67, 67, 67, 67, 97, 1828, 97, 554, 556, 97, 97, 97, 97, 97, 97, 97, 97, 570, 97, 575, 97, 97, 579,\n  /* 24303 */ 97, 97, 582, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 330, 97, 97, 67, 746, 67, 67, 67, 67, 67,\n  /* 24329 */ 67, 67, 67, 67, 758, 67, 67, 67, 67, 67, 67, 67, 1575, 67, 67, 67, 67, 67, 67, 67, 67, 493, 67, 67, 67,\n  /* 24354 */ 67, 67, 67, 67, 97, 97, 844, 97, 97, 97, 97, 97, 97, 97, 97, 97, 856, 97, 97, 97, 0, 97, 97, 97, 97, 97,\n  /* 24380 */ 97, 97, 97, 1735, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 1642, 97, 1644, 97, 97, 890, 97, 97, 97, 97,\n  /* 24405 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 67, 67, 67, 67, 1065, 1066, 67, 67, 67, 67, 67, 67, 67,\n  /* 24431 */ 67, 67, 67, 532, 67, 67, 67, 67, 67, 67, 67, 1451, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 24456 */ 496, 67, 67, 97, 97, 1505, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 593, 97, 97, 0, 1474, 0,\n  /* 24481 */ 1476, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1617, 97, 97, 1635, 0, 1637, 97, 97, 97, 97, 97, 97, 97,\n  /* 24506 */ 97, 97, 97, 97, 885, 97, 97, 97, 97, 67, 67, 1704, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 24531 */ 565, 572, 97, 97, 97, 97, 97, 97, 97, 97, 1832, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97,\n  /* 24557 */ 45, 45, 45, 1946, 45, 45, 67, 67, 67, 67, 67, 97, 1926, 97, 1927, 97, 0, 0, 0, 97, 97, 1934, 2043, 0, 0,\n  /* 24582 */ 97, 97, 97, 2047, 45, 45, 67, 67, 0, 1832, 97, 97, 45, 45, 45, 981, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 24607 */ 45, 45, 45, 1227, 45, 45, 45, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 372, 45, 45, 45,\n  /* 24631 */ 45, 1661, 1662, 45, 45, 45, 45, 45, 1666, 45, 45, 45, 45, 45, 1673, 45, 1675, 45, 45, 45, 45, 45, 45, 45,\n  /* 24655 */ 67, 1426, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1275, 67, 67, 67, 67, 67, 45, 418, 45, 45, 420, 45, 45,\n  /* 24680 */ 423, 45, 45, 45, 45, 45, 45, 45, 45, 959, 45, 45, 962, 45, 45, 45, 45, 458, 67, 67, 67, 67, 67, 67, 67,\n  /* 24705 */ 67, 67, 67, 67, 67, 67, 67, 483, 67, 67, 67, 67, 504, 67, 67, 506, 67, 67, 509, 67, 67, 67, 67, 67, 67,\n  /* 24730 */ 67, 528, 67, 67, 67, 67, 67, 67, 67, 67, 1287, 67, 67, 67, 67, 67, 67, 67, 555, 97, 97, 97, 97, 97, 97,\n  /* 24755 */ 97, 97, 97, 97, 97, 97, 97, 97, 580, 97, 97, 97, 97, 601, 97, 97, 603, 97, 97, 606, 97, 97, 97, 97, 97,\n  /* 24780 */ 97, 848, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1498, 97, 97, 97, 97, 97, 97, 45, 45, 714, 45, 45, 45, 45,\n  /* 24805 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 989, 990, 45, 67, 67, 67, 67, 67, 1011, 67, 67, 67, 67, 1015, 67, 67,\n  /* 24830 */ 67, 67, 67, 67, 67, 753, 67, 67, 67, 67, 67, 67, 67, 67, 467, 67, 67, 67, 67, 67, 67, 67, 45, 45, 1179,\n  /* 24855 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1003, 1004, 67, 1217, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 24880 */ 45, 45, 45, 45, 45, 45, 45, 728, 67, 1461, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1034,\n  /* 24905 */ 67, 97, 1516, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 871, 97, 67, 67, 67, 1705, 67, 67,\n  /* 24930 */ 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 567, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1715, 97, 97, 97, 97,\n  /* 24956 */ 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 1380, 45, 45, 45, 45, 45, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97,\n  /* 24983 */ 1887, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 2006, 45, 45, 1907, 45, 45, 45, 45, 45, 67, 67, 67,\n  /* 25009 */ 67, 67, 67, 67, 67, 67, 1920, 67, 97, 0, 2035, 97, 97, 97, 97, 97, 45, 45, 45, 45, 67, 67, 67, 1428, 67,\n  /* 25034 */ 67, 67, 67, 67, 67, 1435, 67, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 146,\n  /* 25057 */ 45, 152, 45, 45, 165, 45, 175, 45, 180, 45, 45, 187, 190, 195, 45, 203, 254, 257, 262, 67, 270, 67, 67, 0,\n  /* 25081 */ 24850, 12564, 0, 0, 0, 281, 28809, 53531, 97, 97, 97, 293, 97, 299, 97, 97, 312, 97, 322, 97, 327, 97, 97,\n  /* 25104 */ 334, 337, 342, 97, 350, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 67, 484, 67, 67, 67, 67, 67, 67,\n  /* 25129 */ 67, 67, 67, 67, 67, 67, 67, 499, 97, 581, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 596, 648,\n  /* 25154 */ 45, 650, 45, 651, 45, 653, 45, 45, 45, 657, 45, 45, 45, 45, 45, 45, 1954, 67, 67, 67, 1958, 67, 67, 67,\n  /* 25178 */ 67, 67, 67, 67, 768, 67, 67, 67, 67, 67, 67, 67, 67, 769, 67, 67, 67, 67, 67, 67, 67, 680, 45, 45, 45, 45,\n  /* 25204 */ 45, 45, 45, 45, 688, 689, 691, 45, 45, 45, 45, 45, 983, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 947, 45,\n  /* 25229 */ 45, 45, 45, 952, 45, 45, 698, 699, 45, 45, 702, 703, 45, 45, 45, 45, 45, 45, 45, 711, 744, 67, 67, 67, 67,\n  /* 25254 */ 67, 67, 67, 67, 67, 757, 67, 67, 67, 67, 761, 67, 67, 67, 67, 765, 67, 767, 67, 67, 67, 67, 67, 67, 67,\n  /* 25279 */ 67, 775, 776, 778, 67, 67, 67, 67, 67, 67, 785, 786, 67, 67, 789, 790, 67, 67, 67, 67, 67, 67, 1442, 67,\n  /* 25303 */ 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 1775, 97, 97, 97, 67, 67, 67, 67, 67, 798, 67, 67, 67, 802,\n  /* 25328 */ 67, 67, 67, 67, 67, 67, 67, 67, 1465, 67, 67, 1468, 67, 67, 1471, 67, 67, 810, 67, 67, 67, 67, 67, 67, 67,\n  /* 25353 */ 67, 67, 821, 25398, 542, 13112, 544, 57889, 0, 0, 54074, 54074, 550, 0, 833, 97, 835, 97, 836, 97, 838,\n  /* 25374 */ 97, 97, 0, 0, 97, 97, 97, 2002, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 1740, 45, 45, 45, 1744, 45, 45,\n  /* 25399 */ 45, 97, 842, 97, 97, 97, 97, 97, 97, 97, 97, 97, 855, 97, 97, 97, 97, 0, 1717, 1718, 97, 97, 97, 97, 97,\n  /* 25424 */ 1722, 97, 0, 0, 859, 97, 97, 97, 97, 863, 97, 865, 97, 97, 97, 97, 97, 97, 97, 97, 604, 97, 97, 97, 97,\n  /* 25449 */ 97, 97, 97, 873, 874, 876, 97, 97, 97, 97, 97, 97, 883, 884, 97, 97, 887, 888, 97, 18, 131427, 0, 0, 0, 0,\n  /* 25474 */ 0, 0, 362, 225280, 0, 365, 0, 367, 0, 45, 45, 45, 1531, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1199,\n  /* 25499 */ 45, 45, 45, 45, 45, 97, 97, 908, 97, 97, 97, 97, 97, 97, 97, 97, 97, 919, 638, 0, 0, 0, 0, 2158877,\n  /* 25523 */ 2158877, 2158877, 2158877, 2158877, 2425117, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877,\n  /* 25534 */ 2597149, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2642205, 2158877, 2158877, 2158877,\n  /* 25545 */ 2158877, 2158877, 3158301, 0, 2375818, 2379914, 2158730, 2158730, 2420874, 2158730, 2449546, 2158730,\n  /* 25557 */ 2158730, 953, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 965, 978, 45, 45, 45, 45, 45,\n  /* 25581 */ 45, 985, 45, 45, 45, 45, 45, 45, 45, 45, 971, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1027, 67,\n  /* 25606 */ 1029, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1455, 67, 67, 67, 67, 67, 67, 67, 1077, 1078, 67, 67, 25398, 0,\n  /* 25630 */ 13112, 0, 54074, 0, 0, 0, 0, 0, 0, 0, 0, 366, 0, 139, 2158730, 2158730, 2158730, 2404490, 2412682, 1113,\n  /* 25650 */ 97, 97, 97, 97, 97, 97, 1121, 97, 1123, 97, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 25676 */ 45, 45, 45, 45, 1540, 1155, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 615, 1168, 97, 97,\n  /* 25701 */ 1171, 1172, 97, 97, 0, 921, 0, 1175, 0, 0, 0, 0, 45, 45, 45, 45, 45, 1533, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 25727 */ 45, 1663, 45, 45, 45, 45, 45, 45, 45, 45, 45, 183, 45, 45, 45, 45, 201, 45, 45, 45, 1219, 45, 45, 45, 45,\n  /* 25752 */ 45, 45, 45, 1226, 45, 45, 45, 45, 45, 168, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 427, 45, 45, 45, 45,\n  /* 25777 */ 45, 45, 45, 1231, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1242, 67,\n  /* 25802 */ 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1046, 67, 67, 1254, 67, 1256, 67, 67, 67, 67, 67, 67,\n  /* 25827 */ 67, 67, 67, 67, 67, 67, 806, 807, 67, 67, 97, 1336, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 25852 */ 97, 1111, 97, 97, 97, 97, 97, 1351, 97, 97, 97, 1354, 97, 97, 97, 1359, 97, 97, 97, 0, 97, 97, 97, 97,\n  /* 25876 */ 1640, 97, 97, 97, 97, 97, 97, 97, 897, 97, 97, 97, 902, 97, 97, 97, 97, 97, 97, 97, 97, 1366, 97, 97, 97,\n  /* 25901 */ 97, 97, 97, 97, 1371, 97, 97, 97, 0, 97, 97, 97, 1730, 97, 97, 97, 97, 97, 97, 97, 97, 915, 97, 97, 97,\n  /* 25926 */ 97, 0, 360, 0, 67, 67, 67, 1440, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1017, 67, 1019, 67, 67,\n  /* 25951 */ 67, 67, 67, 1453, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1459, 97, 97, 97, 1493, 97, 97, 97, 97, 97, 97,\n  /* 25976 */ 97, 97, 97, 97, 97, 97, 97, 1525, 97, 97, 97, 97, 97, 97, 1507, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 26001 */ 1514, 67, 67, 67, 67, 1584, 67, 67, 67, 67, 67, 1590, 67, 67, 67, 67, 67, 67, 67, 783, 67, 67, 67, 788,\n  /* 26025 */ 67, 67, 67, 67, 67, 67, 67, 67, 67, 1599, 1601, 67, 67, 67, 1604, 67, 1606, 1607, 67, 1472, 0, 1474, 0,\n  /* 26048 */ 1476, 0, 97, 97, 97, 97, 97, 97, 1614, 97, 97, 97, 97, 45, 45, 1850, 45, 45, 45, 45, 1855, 45, 45, 45, 45,\n  /* 26073 */ 45, 1222, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1229, 97, 1618, 97, 97, 97, 97, 97, 97, 97, 1625, 97, 97,\n  /* 26097 */ 97, 97, 97, 0, 1175, 0, 45, 45, 45, 45, 45, 45, 45, 45, 447, 45, 45, 45, 45, 45, 67, 67, 1633, 97, 97, 0,\n  /* 26123 */ 97, 97, 97, 97, 97, 97, 97, 97, 1643, 1645, 97, 97, 0, 0, 97, 97, 1784, 97, 97, 97, 0, 0, 97, 97, 0, 97,\n  /* 26149 */ 1894, 1895, 97, 1897, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 656, 45, 45, 45, 45, 45, 45, 97, 1648, 97,\n  /* 26173 */ 1650, 1651, 97, 0, 45, 45, 45, 1654, 45, 45, 45, 45, 45, 169, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 658,\n  /* 26198 */ 45, 45, 45, 45, 664, 45, 45, 1659, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1187, 45, 45, 1669,\n  /* 26223 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1005, 67, 67, 1681, 67, 67, 67, 67, 67, 67,\n  /* 26248 */ 67, 1686, 67, 67, 67, 67, 67, 67, 67, 784, 67, 67, 67, 67, 67, 67, 67, 67, 1055, 67, 67, 67, 67, 1060, 67,\n  /* 26273 */ 67, 97, 97, 1713, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 1378, 45, 45, 45, 45, 45, 45, 45,\n  /* 26299 */ 408, 45, 45, 45, 45, 45, 45, 45, 45, 1547, 45, 1549, 45, 45, 45, 45, 45, 97, 97, 1780, 0, 97, 97, 97, 97,\n  /* 26324 */ 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 45, 2027, 2028, 45, 45, 67, 67, 2031, 2032, 67, 45, 45, 1804, 45,\n  /* 26349 */ 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1917, 67, 67, 67, 67, 67, 67, 67, 1819, 67, 67, 67,\n  /* 26374 */ 67, 67, 67, 67, 67, 97, 97, 97, 1708, 97, 97, 97, 97, 97, 45, 45, 1862, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 26399 */ 67, 67, 67, 67, 67, 497, 67, 67, 67, 1877, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 0, 97, 97, 97,\n  /* 26426 */ 97, 97, 1839, 0, 0, 97, 97, 97, 97, 1936, 0, 0, 97, 97, 97, 97, 97, 97, 1943, 1944, 1945, 45, 45, 45, 45,\n  /* 26451 */ 670, 45, 45, 45, 45, 674, 45, 45, 45, 45, 678, 45, 1948, 45, 1950, 45, 45, 45, 45, 1955, 1956, 1957, 67,\n  /* 26474 */ 67, 67, 1960, 67, 1962, 67, 67, 67, 67, 1967, 1968, 1969, 97, 0, 0, 0, 97, 97, 1974, 97, 0, 1936, 0, 97,\n  /* 26498 */ 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 1906, 0, 1977, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45,\n  /* 26524 */ 45, 45, 45, 45, 45, 1746, 45, 45, 45, 45, 2011, 67, 67, 2013, 67, 67, 67, 2017, 97, 97, 0, 0, 2021, 97,\n  /* 26548 */ 8192, 97, 97, 2025, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1916, 67, 67, 67, 67, 0, 94242, 0, 0, 0,\n  /* 26573 */ 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 140, 45, 45, 45, 1180, 45, 45, 45, 45, 1184, 45, 45, 45,\n  /* 26595 */ 45, 45, 45, 45, 387, 45, 392, 45, 45, 396, 45, 45, 399, 45, 45, 67, 207, 67, 67, 67, 67, 67, 67, 236, 67,\n  /* 26620 */ 67, 67, 67, 67, 67, 67, 800, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1603, 67, 67, 67, 67, 67, 0, 97, 97, 287,\n  /* 26646 */ 97, 97, 97, 97, 97, 97, 316, 97, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 1656, 1657, 45, 376,\n  /* 26671 */ 45, 45, 45, 45, 45, 388, 45, 45, 45, 45, 45, 45, 45, 45, 1406, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67,\n  /* 26697 */ 462, 67, 67, 67, 67, 67, 474, 67, 67, 67, 67, 67, 67, 67, 817, 67, 67, 67, 67, 25398, 542, 13112, 544, 97,\n  /* 26721 */ 97, 97, 97, 559, 97, 97, 97, 97, 97, 571, 97, 97, 97, 97, 97, 97, 896, 97, 97, 97, 900, 97, 97, 97, 97,\n  /* 26746 */ 97, 97, 912, 914, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 391, 45, 45, 45, 45, 45,\n  /* 26772 */ 45, 45, 45, 713, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 662, 45, 1140, 97, 97, 97, 97,\n  /* 26797 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 636, 67, 67, 1283, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 26823 */ 67, 67, 513, 67, 67, 1363, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 889, 97, 97, 97,\n  /* 26848 */ 1714, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 926, 45, 45, 45, 45, 45, 45, 45, 45, 672, 45, 45, 45,\n  /* 26874 */ 45, 45, 45, 45, 45, 686, 45, 45, 45, 45, 45, 45, 45, 45, 944, 45, 45, 45, 45, 45, 45, 45, 45, 1676, 45,\n  /* 26899 */ 45, 45, 45, 45, 45, 67, 97, 97, 97, 1833, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45,\n  /* 26926 */ 45, 45, 1902, 45, 45, 45, 45, 45, 957, 45, 45, 45, 45, 961, 45, 963, 45, 45, 45, 67, 97, 2034, 0, 97, 97,\n  /* 26951 */ 97, 97, 97, 2040, 45, 45, 45, 2042, 67, 67, 67, 67, 67, 67, 1574, 67, 67, 67, 67, 67, 1578, 67, 67, 67,\n  /* 26975 */ 67, 67, 67, 799, 67, 67, 67, 804, 67, 67, 67, 67, 67, 67, 67, 1298, 0, 0, 0, 1304, 0, 0, 0, 1310, 132,\n  /* 27000 */ 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 45, 45, 1414, 45, 45, 45, 45, 45, 45,\n  /* 27023 */ 45, 45, 45, 45, 428, 45, 45, 45, 45, 45, 57889, 0, 0, 54074, 54074, 550, 831, 97, 97, 97, 97, 97, 97, 97,\n  /* 27047 */ 97, 97, 568, 97, 97, 97, 97, 578, 97, 45, 45, 968, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 27072 */ 1228, 45, 45, 67, 67, 67, 67, 67, 25398, 1082, 13112, 1086, 54074, 1090, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0,\n  /* 27096 */ 139, 2158592, 2158592, 2158592, 2404352, 2412544, 67, 67, 67, 67, 1464, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 27115 */ 67, 67, 67, 510, 67, 67, 67, 67, 97, 97, 97, 97, 1519, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 918,\n  /* 27140 */ 97, 0, 0, 0, 0, 1528, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 976, 45, 1554, 45, 45, 45,\n  /* 27166 */ 45, 45, 45, 45, 45, 1562, 45, 45, 1565, 45, 45, 45, 45, 683, 45, 45, 45, 687, 45, 45, 692, 45, 45, 45, 45,\n  /* 27191 */ 45, 1953, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1014, 67, 67, 67, 67, 67, 67, 1568, 67, 67, 67, 67, 67,\n  /* 27216 */ 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 67, 67, 67, 67, 67, 1585, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 27242 */ 67, 1594, 97, 97, 1649, 97, 97, 97, 0, 45, 45, 1653, 45, 45, 45, 45, 45, 45, 383, 45, 45, 45, 45, 45, 45,\n  /* 27267 */ 45, 45, 45, 986, 45, 45, 45, 45, 45, 45, 45, 45, 1670, 45, 1672, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 27292 */ 67, 736, 67, 67, 67, 67, 67, 741, 67, 67, 67, 1680, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 27317 */ 67, 1074, 67, 67, 67, 1692, 67, 67, 67, 67, 67, 67, 67, 1697, 67, 1699, 67, 67, 67, 67, 67, 67, 1012, 67,\n  /* 27341 */ 67, 67, 67, 67, 67, 67, 67, 67, 468, 475, 67, 67, 67, 67, 67, 67, 1769, 67, 67, 67, 67, 67, 67, 67, 97,\n  /* 27366 */ 97, 97, 97, 97, 97, 97, 624, 97, 97, 97, 97, 97, 97, 634, 97, 97, 1792, 97, 97, 97, 97, 97, 97, 97, 45,\n  /* 27391 */ 45, 45, 45, 45, 45, 45, 958, 45, 45, 45, 45, 45, 45, 964, 45, 150, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 27417 */ 45, 45, 45, 45, 45, 977, 204, 45, 67, 67, 67, 217, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 787, 67, 67,\n  /* 27442 */ 67, 67, 67, 67, 67, 67, 67, 67, 271, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 97, 351,\n  /* 27466 */ 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 45, 45, 938, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 27492 */ 45, 1398, 45, 45, 45, 153, 45, 161, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 660, 661, 45, 45, 205,\n  /* 27517 */ 45, 67, 67, 67, 67, 220, 67, 228, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 280, 94, 0, 0, 67, 67, 67,\n  /* 27544 */ 67, 67, 272, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 97, 352, 97, 0, 40976, 0, 18, 18,\n  /* 27568 */ 24, 24, 27, 27, 27, 45, 439, 45, 45, 45, 45, 45, 445, 45, 45, 45, 452, 45, 45, 67, 67, 212, 216, 67, 67,\n  /* 27593 */ 67, 67, 67, 241, 67, 246, 67, 252, 67, 67, 486, 67, 67, 67, 67, 67, 67, 67, 494, 67, 67, 67, 67, 67, 67,\n  /* 27618 */ 67, 1245, 67, 67, 67, 67, 67, 67, 67, 67, 1013, 67, 67, 1016, 67, 67, 67, 67, 67, 521, 67, 67, 525, 67,\n  /* 27642 */ 67, 67, 67, 67, 531, 67, 67, 67, 538, 67, 0, 0, 2046, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 45, 45,\n  /* 27668 */ 45, 1192, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1418, 45, 45, 1421, 97, 97, 583, 97, 97, 97, 97,\n  /* 27693 */ 97, 97, 97, 591, 97, 97, 97, 97, 97, 97, 913, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45,\n  /* 27720 */ 1384, 97, 618, 97, 97, 622, 97, 97, 97, 97, 97, 628, 97, 97, 97, 635, 97, 18, 131427, 0, 0, 0, 639, 0,\n  /* 27744 */ 132, 362, 0, 0, 365, 29315, 367, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 932, 45, 45, 45, 45, 45, 1544,\n  /* 27769 */ 45, 45, 45, 45, 45, 1550, 45, 45, 45, 45, 45, 1194, 45, 1196, 45, 45, 45, 45, 45, 45, 45, 45, 999, 45, 45,\n  /* 27794 */ 45, 45, 45, 67, 67, 45, 45, 667, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1408, 45, 45, 45,\n  /* 27819 */ 696, 45, 45, 45, 701, 45, 45, 45, 45, 45, 45, 45, 45, 710, 45, 45, 45, 1220, 45, 45, 45, 45, 45, 45, 45,\n  /* 27844 */ 45, 45, 45, 45, 45, 194, 45, 45, 45, 729, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 27870 */ 67, 67, 67, 67, 67, 67, 67, 797, 67, 67, 67, 67, 67, 67, 805, 67, 67, 67, 67, 67, 67, 67, 1587, 67, 1589,\n  /* 27895 */ 67, 67, 67, 67, 67, 67, 67, 67, 1763, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 2162968, 0, 0, 67, 67,\n  /* 27922 */ 67, 67, 67, 814, 816, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 67, 67, 1008, 67, 67, 67, 67, 67, 67,\n  /* 27945 */ 67, 67, 67, 67, 67, 1020, 67, 0, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 97, 0, 0, 97, 97, 97, 97, 97,\n  /* 27972 */ 45, 45, 45, 45, 67, 67, 67, 67, 1429, 67, 1430, 67, 67, 67, 67, 67, 1062, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 27997 */ 67, 67, 67, 67, 67, 67, 67, 518, 1076, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 28023 */ 28809, 0, 139, 45, 45, 45, 45, 45, 97, 97, 97, 97, 1102, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1124,\n  /* 28048 */ 97, 1126, 97, 97, 1114, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1112, 97, 97, 1156,\n  /* 28072 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 594, 97, 97, 97, 97, 1170, 97, 97, 97, 97, 0, 921, 0,\n  /* 28098 */ 0, 0, 0, 0, 0, 45, 45, 45, 45, 1532, 45, 45, 45, 45, 1536, 45, 45, 45, 45, 45, 172, 45, 45, 45, 45, 45,\n  /* 28124 */ 45, 45, 45, 45, 45, 706, 45, 45, 709, 45, 45, 1177, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 28149 */ 45, 45, 1202, 45, 1204, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1215, 45, 45, 45, 1232, 45, 45,\n  /* 28173 */ 45, 45, 45, 45, 45, 67, 1237, 67, 67, 67, 67, 67, 67, 1053, 1054, 67, 67, 67, 67, 67, 67, 1061, 67, 67,\n  /* 28197 */ 1282, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1289, 67, 67, 67, 1292, 97, 97, 97, 97, 1339, 97, 97, 97, 97,\n  /* 28221 */ 97, 97, 1344, 97, 97, 97, 97, 45, 1849, 45, 1851, 45, 45, 45, 45, 45, 45, 45, 45, 721, 45, 45, 45, 45, 45,\n  /* 28246 */ 726, 45, 1385, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1188, 45, 45, 1401, 1402, 45,\n  /* 28270 */ 45, 45, 45, 1405, 45, 45, 45, 45, 45, 45, 45, 45, 1752, 45, 45, 45, 45, 45, 67, 67, 1410, 45, 45, 45,\n  /* 28294 */ 1413, 45, 1415, 45, 45, 45, 45, 45, 45, 1419, 45, 45, 45, 45, 1806, 45, 45, 45, 45, 45, 45, 67, 67, 67,\n  /* 28318 */ 67, 67, 67, 67, 97, 97, 2019, 0, 97, 67, 67, 67, 1452, 67, 67, 67, 67, 67, 67, 67, 67, 1457, 67, 67, 67,\n  /* 28343 */ 67, 67, 67, 1259, 67, 67, 67, 67, 67, 67, 1264, 67, 67, 1460, 67, 1462, 67, 67, 67, 67, 67, 67, 1466, 67,\n  /* 28367 */ 67, 67, 67, 67, 67, 67, 67, 1588, 67, 67, 67, 67, 67, 67, 67, 0, 1300, 0, 0, 0, 1306, 0, 0, 0, 97, 97, 97,\n  /* 28394 */ 1506, 97, 97, 97, 97, 97, 97, 97, 97, 1512, 97, 97, 97, 0, 1728, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 28419 */ 97, 901, 97, 97, 97, 97, 1515, 97, 1517, 97, 97, 97, 97, 97, 97, 1521, 97, 97, 97, 97, 97, 97, 0, 45,\n  /* 28443 */ 1652, 45, 45, 45, 1655, 45, 45, 45, 45, 45, 1542, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 28467 */ 1552, 1553, 45, 45, 45, 1556, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 693, 45, 45, 45, 67, 67,\n  /* 28492 */ 67, 67, 1572, 67, 67, 67, 67, 1576, 67, 67, 67, 67, 67, 67, 67, 67, 1602, 67, 67, 1605, 67, 67, 67, 0, 67,\n  /* 28517 */ 1582, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1580, 67, 67, 1596, 67, 67, 67, 67, 67, 67,\n  /* 28542 */ 67, 67, 67, 67, 67, 67, 67, 0, 542, 0, 544, 67, 67, 67, 67, 1759, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 28568 */ 67, 533, 67, 67, 67, 67, 67, 67, 67, 1770, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 1777, 97, 97, 97,\n  /* 28593 */ 1793, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 998, 45, 45, 1001, 1002, 45, 45, 67, 67, 45, 1861,\n  /* 28617 */ 45, 67, 67, 67, 67, 67, 67, 67, 67, 1871, 67, 1873, 1874, 67, 0, 97, 45, 67, 0, 97, 45, 67, 16384, 97, 45,\n  /* 28642 */ 67, 97, 0, 0, 0, 1473, 0, 1082, 0, 0, 0, 1475, 0, 1086, 0, 0, 0, 1477, 1876, 67, 97, 97, 97, 97, 97, 1883,\n  /* 28668 */ 0, 1885, 97, 97, 97, 1889, 0, 0, 0, 286, 0, 0, 0, 286, 0, 2367488, 2158592, 2158592, 2158592, 2158592,\n  /* 28688 */ 2158592, 2158592, 0, 40976, 0, 18, 18, 24, 24, 126, 126, 126, 2053, 0, 2055, 45, 67, 0, 97, 45, 67, 0, 97,\n  /* 28711 */ 45, 67, 97, 0, 0, 97, 97, 97, 2039, 97, 45, 45, 45, 45, 67, 67, 67, 67, 67, 226, 67, 67, 67, 67, 67, 67,\n  /* 28737 */ 67, 67, 1246, 67, 67, 1249, 1250, 67, 67, 67, 132, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809,\n  /* 28759 */ 45, 45, 141, 45, 45, 45, 1403, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1186, 45, 45, 1189, 45, 45,\n  /* 28784 */ 155, 45, 45, 45, 45, 45, 45, 45, 45, 45, 191, 45, 45, 45, 45, 700, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 28810 */ 45, 1753, 45, 45, 45, 67, 67, 45, 45, 67, 208, 67, 67, 67, 222, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1764,\n  /* 28835 */ 67, 67, 67, 67, 67, 67, 67, 258, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97,\n  /* 28859 */ 288, 97, 97, 97, 302, 97, 97, 97, 97, 97, 97, 97, 97, 97, 627, 97, 97, 97, 97, 97, 97, 338, 97, 97, 97,\n  /* 28884 */ 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45,\n  /* 28908 */ 370, 45, 45, 45, 45, 716, 45, 45, 45, 45, 45, 722, 45, 45, 45, 45, 45, 45, 1912, 67, 67, 67, 67, 67, 67,\n  /* 28933 */ 67, 67, 67, 819, 67, 67, 25398, 542, 13112, 544, 45, 403, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 28957 */ 45, 45, 1409, 45, 67, 67, 67, 67, 489, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 771, 67, 67, 67, 67,\n  /* 28982 */ 520, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 534, 67, 67, 67, 67, 67, 67, 1271, 67, 67, 67, 1274, 67,\n  /* 29007 */ 67, 67, 1279, 67, 67, 24850, 24850, 12564, 12564, 0, 57889, 0, 0, 0, 53531, 53531, 367, 286, 97, 553, 97,\n  /* 29028 */ 97, 97, 97, 586, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1138, 97, 97, 97, 97, 617, 97, 97, 97, 97,\n  /* 29053 */ 97, 97, 97, 97, 97, 97, 97, 631, 97, 97, 97, 0, 1834, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97,\n  /* 29079 */ 353, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 45, 45, 668, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 29105 */ 45, 724, 45, 45, 45, 45, 45, 682, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 949, 45, 45, 45, 67,\n  /* 29131 */ 67, 747, 748, 67, 67, 67, 67, 755, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 1302, 0, 0, 0, 1308, 0, 67, 794,\n  /* 29157 */ 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1701, 67, 97, 97, 97, 845, 846, 97, 97, 97, 97,\n  /* 29182 */ 853, 97, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 97, 97, 892, 97, 97, 97, 97, 97, 97,\n  /* 29208 */ 97, 97, 97, 97, 97, 97, 97, 610, 97, 97, 45, 992, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67,\n  /* 29234 */ 67, 1239, 67, 67, 67, 1063, 67, 67, 67, 67, 67, 1068, 67, 67, 67, 67, 67, 67, 67, 0, 0, 1301, 0, 0, 0,\n  /* 29259 */ 1307, 0, 0, 97, 1141, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1152, 97, 97, 0, 0, 97, 97, 2001, 0, 97,\n  /* 29285 */ 2003, 97, 97, 97, 45, 45, 45, 1739, 45, 45, 45, 1742, 45, 45, 45, 45, 45, 97, 97, 97, 97, 1157, 97, 97,\n  /* 29309 */ 97, 97, 97, 1162, 97, 97, 97, 97, 97, 97, 1145, 97, 97, 97, 97, 97, 1151, 97, 97, 97, 1253, 67, 67, 67,\n  /* 29333 */ 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 539, 45, 1423, 45, 45, 67, 67, 67, 67, 67, 67, 67, 1431,\n  /* 29358 */ 67, 67, 67, 67, 67, 67, 67, 1695, 67, 67, 67, 67, 67, 1700, 67, 1702, 67, 67, 1439, 67, 67, 67, 67, 67,\n  /* 29382 */ 67, 67, 67, 67, 67, 67, 67, 67, 514, 67, 67, 97, 97, 1492, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 29408 */ 97, 611, 97, 97, 1703, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 852, 97, 97, 97, 97,\n  /* 29433 */ 97, 97, 45, 1949, 45, 1951, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 1961, 67, 0, 97, 45, 67, 0, 97, 2060,\n  /* 29458 */ 2061, 0, 2062, 45, 67, 97, 0, 0, 2036, 97, 97, 97, 97, 45, 45, 45, 45, 67, 67, 67, 67, 67, 223, 67, 67,\n  /* 29483 */ 237, 67, 67, 67, 67, 67, 67, 67, 1272, 67, 67, 67, 67, 67, 67, 67, 67, 507, 67, 67, 67, 67, 67, 67, 67,\n  /* 29508 */ 1963, 67, 67, 67, 97, 97, 97, 97, 0, 1972, 0, 97, 97, 97, 1975, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45,\n  /* 29533 */ 931, 45, 45, 45, 45, 45, 407, 45, 45, 45, 45, 45, 45, 45, 45, 45, 417, 45, 45, 1989, 67, 67, 67, 67, 67,\n  /* 29558 */ 67, 67, 67, 67, 67, 67, 1996, 97, 18, 131427, 0, 0, 360, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 921,\n  /* 29582 */ 29315, 0, 0, 0, 0, 45, 45, 930, 45, 45, 45, 45, 45, 45, 444, 45, 45, 45, 45, 45, 45, 45, 67, 67, 97, 97,\n  /* 29608 */ 1998, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1985, 45, 1986, 45, 45, 45, 156, 45,\n  /* 29633 */ 45, 170, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 675, 45, 45, 45, 45, 679, 131427, 0, 358, 0, 0, 362, 0,\n  /* 29658 */ 365, 28809, 367, 139, 45, 45, 45, 45, 45, 381, 45, 45, 45, 45, 45, 45, 45, 45, 45, 400, 45, 45, 419, 45,\n  /* 29682 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 436, 67, 67, 67, 67, 67, 505, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 29708 */ 67, 67, 820, 67, 25398, 542, 13112, 544, 67, 67, 522, 67, 67, 67, 67, 67, 529, 67, 67, 67, 67, 67, 67, 67,\n  /* 29732 */ 0, 1299, 0, 0, 0, 1305, 0, 0, 0, 97, 97, 619, 97, 97, 97, 97, 97, 626, 97, 97, 97, 97, 97, 97, 97, 1105,\n  /* 29758 */ 97, 97, 97, 97, 1109, 97, 97, 97, 67, 67, 67, 67, 749, 67, 67, 67, 67, 67, 67, 67, 67, 67, 760, 67, 0, 97,\n  /* 29784 */ 45, 67, 2058, 97, 45, 67, 0, 97, 45, 67, 97, 0, 0, 97, 97, 97, 97, 97, 45, 45, 45, 2041, 67, 67, 67, 67,\n  /* 29810 */ 67, 780, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 516, 67, 67, 97, 97, 97, 878, 97, 97, 97, 97,\n  /* 29836 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 1629, 97, 0, 45, 979, 45, 45, 45, 45, 984, 45, 45, 45, 45, 45, 45, 45,\n  /* 29862 */ 45, 45, 1198, 45, 45, 45, 45, 45, 45, 67, 1023, 67, 67, 67, 67, 1028, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 29887 */ 470, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 1094, 0, 0, 0, 1092,\n  /* 29912 */ 1315, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1486, 97, 1489, 97, 97, 97, 1117, 97, 97, 97, 97,\n  /* 29937 */ 1122, 97, 97, 97, 97, 97, 97, 97, 1146, 97, 97, 97, 97, 97, 97, 97, 97, 881, 97, 97, 97, 886, 97, 97, 97,\n  /* 29962 */ 1311, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1615, 97, 97, 97, 97, 97, 1619, 97, 97, 97, 97,\n  /* 29989 */ 97, 97, 97, 97, 97, 97, 97, 97, 1631, 97, 97, 1847, 97, 45, 45, 45, 45, 1852, 45, 45, 45, 45, 45, 45, 45,\n  /* 30014 */ 1235, 45, 45, 45, 67, 67, 67, 67, 67, 1868, 67, 67, 67, 1872, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1882, 0,\n  /* 30039 */ 0, 0, 97, 97, 97, 97, 0, 1891, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 1929, 0, 0, 97, 97, 97, 97, 97, 97,\n  /* 30066 */ 45, 1900, 45, 1901, 45, 45, 45, 1905, 45, 67, 2054, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 97, 0, 0,\n  /* 30091 */ 97, 2037, 2038, 97, 97, 45, 45, 45, 45, 67, 67, 67, 67, 1867, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1774,\n  /* 30115 */ 97, 97, 97, 97, 97, 97, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 142, 45, 45,\n  /* 30138 */ 45, 1412, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 432, 45, 45, 45, 45, 45, 157, 45, 45, 171, 45,\n  /* 30163 */ 45, 45, 182, 45, 45, 45, 45, 200, 45, 45, 45, 1543, 45, 45, 45, 45, 45, 45, 45, 45, 1551, 45, 45, 45, 45,\n  /* 30188 */ 1181, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1211, 45, 45, 45, 1214, 45, 45, 45, 67, 209, 67, 67, 67,\n  /* 30213 */ 224, 67, 67, 238, 67, 67, 67, 249, 67, 0, 97, 2056, 2057, 0, 2059, 45, 67, 0, 97, 45, 67, 97, 0, 0, 1937,\n  /* 30238 */ 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1741, 45, 45, 45, 45, 45, 45, 67, 67, 67, 267, 67, 67, 67,\n  /* 30264 */ 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 289, 97, 97, 97, 304, 97, 97, 318, 97, 97, 97, 329, 97,\n  /* 30288 */ 97, 0, 0, 97, 1783, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 2026, 45, 45, 45, 45, 67, 2030, 67,\n  /* 30314 */ 67, 67, 67, 67, 67, 1041, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1044, 67, 67, 67, 67, 67, 67, 97, 97, 347,\n  /* 30339 */ 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 45, 666, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 30365 */ 45, 45, 45, 1420, 45, 57889, 0, 0, 54074, 54074, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 840, 67, 1007,\n  /* 30388 */ 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 759, 67, 67, 67, 67, 67, 67, 67, 1052, 67, 67, 67,\n  /* 30414 */ 67, 67, 67, 67, 67, 67, 67, 1031, 67, 67, 67, 67, 67, 97, 97, 97, 1101, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 30439 */ 97, 97, 97, 97, 592, 97, 97, 97, 1190, 45, 45, 45, 45, 45, 1195, 45, 1197, 45, 45, 45, 45, 1201, 45, 45,\n  /* 30463 */ 45, 45, 1952, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 250, 67, 67, 67, 1255, 67, 1257, 67,\n  /* 30488 */ 67, 67, 67, 1261, 67, 67, 67, 67, 67, 67, 67, 67, 1685, 67, 67, 67, 67, 67, 67, 67, 0, 24851, 12565, 0, 0,\n  /* 30513 */ 0, 0, 28809, 53532, 67, 67, 1267, 67, 67, 67, 67, 67, 67, 1273, 67, 67, 67, 67, 67, 67, 67, 67, 1696, 67,\n  /* 30537 */ 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 2162688, 0, 0, 1281, 67, 67, 67, 67, 1285, 67, 67, 67, 67, 67,\n  /* 30563 */ 67, 67, 67, 67, 67, 1070, 67, 67, 67, 67, 67, 1335, 97, 1337, 97, 97, 97, 97, 1341, 97, 97, 97, 97, 97,\n  /* 30587 */ 97, 97, 97, 882, 97, 97, 97, 97, 97, 97, 97, 1347, 97, 97, 97, 97, 97, 97, 1353, 97, 97, 97, 97, 97, 97,\n  /* 30612 */ 1361, 97, 18, 131427, 0, 638, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 544, 0, 550, 0, 2158592, 2158592,\n  /* 30635 */ 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2473984, 2158592, 2158592, 2158592, 2990080,\n  /* 30646 */ 2158592, 2158592, 2207744, 2207744, 2482176, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744,\n  /* 30657 */ 2207744, 0, 0, 0, 0, 0, 0, 2162688, 0, 53530, 97, 97, 97, 1365, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 30681 */ 97, 97, 608, 97, 97, 97, 45, 45, 1424, 45, 1425, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1058, 67, 67,\n  /* 30706 */ 67, 67, 45, 1555, 45, 45, 1557, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 707, 45, 45, 45, 45, 67, 67,\n  /* 30731 */ 1570, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 773, 67, 67, 1595, 67, 67, 1597, 67, 67, 67, 67,\n  /* 30756 */ 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 2158592, 2158592, 2158592, 2404352,\n  /* 30778 */ 2412544, 97, 97, 97, 1636, 97, 97, 97, 1639, 97, 97, 1641, 97, 97, 97, 97, 97, 97, 1173, 0, 921, 0, 0, 0,\n  /* 30802 */ 0, 0, 0, 45, 67, 67, 67, 1693, 67, 67, 67, 67, 67, 67, 67, 1698, 67, 67, 67, 67, 67, 67, 67, 1773, 67, 97,\n  /* 30828 */ 97, 97, 97, 97, 97, 97, 625, 97, 97, 97, 97, 97, 97, 97, 97, 850, 97, 97, 97, 97, 97, 97, 97, 97, 880, 97,\n  /* 30854 */ 97, 97, 97, 97, 97, 97, 97, 1106, 97, 97, 97, 97, 97, 97, 97, 1860, 45, 45, 67, 67, 1865, 67, 67, 67, 67,\n  /* 30879 */ 1870, 67, 67, 67, 67, 1875, 67, 67, 97, 97, 1880, 97, 97, 0, 0, 0, 97, 97, 1888, 97, 0, 0, 0, 1938, 97,\n  /* 30904 */ 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1854, 45, 45, 45, 45, 45, 45, 45, 1909, 45, 45, 1911, 67, 67, 67,\n  /* 30929 */ 67, 67, 67, 67, 67, 67, 67, 1248, 67, 67, 67, 67, 67, 67, 1922, 67, 67, 1924, 97, 97, 97, 97, 97, 0, 0, 0,\n  /* 30955 */ 97, 97, 97, 97, 97, 1898, 45, 45, 45, 45, 45, 45, 1904, 45, 45, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0,\n  /* 30980 */ 16384, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 1724, 2008, 2009, 45, 45, 67, 67, 67,\n  /* 31004 */ 2014, 2015, 67, 67, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 31030 */ 45, 45, 45, 45, 2022, 0, 2023, 97, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1869, 67, 67, 67,\n  /* 31055 */ 67, 67, 67, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 147, 151, 154, 45, 162,\n  /* 31078 */ 45, 45, 176, 178, 181, 45, 45, 45, 192, 196, 45, 45, 45, 45, 2012, 67, 67, 67, 67, 67, 67, 2018, 97, 0, 0,\n  /* 31103 */ 97, 1978, 97, 97, 97, 1982, 45, 45, 45, 45, 45, 45, 45, 45, 45, 972, 973, 45, 45, 45, 45, 45, 67, 259,\n  /* 31127 */ 263, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 294, 298, 301, 97, 309, 97,\n  /* 31150 */ 97, 323, 325, 328, 97, 97, 97, 97, 97, 560, 97, 97, 97, 569, 97, 97, 97, 97, 97, 97, 306, 97, 97, 97, 97,\n  /* 31175 */ 97, 97, 97, 97, 97, 1624, 97, 97, 97, 97, 97, 97, 97, 0, 921, 0, 1175, 0, 0, 0, 0, 45, 339, 343, 97, 97,\n  /* 31201 */ 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 67, 67, 503, 67, 67, 67, 67, 67, 67, 67, 67, 67, 512, 67,\n  /* 31227 */ 67, 519, 97, 97, 600, 97, 97, 97, 97, 97, 97, 97, 97, 97, 609, 97, 97, 616, 45, 649, 45, 45, 45, 45, 45,\n  /* 31252 */ 654, 45, 45, 45, 45, 45, 45, 45, 45, 1393, 45, 45, 45, 45, 45, 45, 45, 45, 1209, 45, 45, 45, 45, 45, 45,\n  /* 31277 */ 45, 67, 763, 67, 67, 67, 67, 67, 67, 67, 67, 770, 67, 67, 67, 774, 67, 0, 2045, 97, 97, 97, 97, 45, 45,\n  /* 31302 */ 67, 67, 0, 0, 97, 97, 45, 45, 45, 994, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 213, 67, 219, 67,\n  /* 31328 */ 67, 232, 67, 242, 67, 247, 67, 67, 67, 779, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1018,\n  /* 31353 */ 67, 67, 67, 67, 811, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 57889, 0, 0, 54074,\n  /* 31375 */ 54074, 550, 0, 97, 834, 97, 97, 97, 97, 97, 839, 97, 18, 131427, 0, 638, 0, 0, 0, 0, 362, 0, 0, 365,\n  /* 31399 */ 29315, 367, 645, 97, 97, 861, 97, 97, 97, 97, 97, 97, 97, 97, 868, 97, 97, 97, 872, 97, 97, 877, 97, 97,\n  /* 31423 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 613, 97, 97, 97, 97, 97, 909, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 31449 */ 97, 0, 0, 0, 18, 18, 24, 24, 27, 27, 27, 1036, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 31476 */ 1047, 67, 67, 67, 1050, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1033, 67, 67, 67, 97, 97, 1130,\n  /* 31500 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 638, 0, 0, 67, 67, 67, 1295, 67, 67, 67, 0, 0, 0, 0,\n  /* 31527 */ 0, 0, 0, 0, 0, 97, 1317, 97, 97, 97, 97, 97, 97, 1375, 97, 97, 97, 0, 0, 0, 45, 1379, 45, 45, 45, 45, 45,\n  /* 31554 */ 45, 422, 45, 45, 45, 429, 431, 45, 45, 45, 45, 0, 1090, 0, 0, 97, 1479, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 31579 */ 97, 97, 1357, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1716, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1723, 0, 921,\n  /* 31604 */ 29315, 0, 0, 0, 0, 45, 929, 45, 45, 45, 45, 45, 45, 45, 1392, 45, 45, 45, 45, 45, 45, 45, 45, 45, 960, 45,\n  /* 31630 */ 45, 45, 45, 45, 45, 97, 97, 97, 1738, 45, 45, 45, 45, 45, 45, 45, 1743, 45, 45, 45, 45, 166, 45, 45, 45,\n  /* 31655 */ 45, 184, 186, 45, 45, 197, 45, 45, 97, 1779, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 18,\n  /* 31680 */ 131427, 0, 638, 0, 0, 0, 0, 362, 0, 640, 365, 29315, 367, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45,\n  /* 31705 */ 45, 45, 45, 45, 45, 1537, 45, 45, 45, 45, 45, 1803, 45, 45, 45, 45, 45, 1809, 45, 45, 45, 67, 67, 67,\n  /* 31729 */ 1814, 67, 67, 67, 67, 67, 67, 1821, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97,\n  /* 31755 */ 0, 0, 67, 67, 67, 1818, 67, 67, 67, 67, 67, 1824, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97,\n  /* 31782 */ 1890, 0, 1829, 97, 97, 0, 0, 97, 97, 1836, 97, 97, 0, 0, 0, 97, 97, 97, 97, 1981, 45, 45, 45, 45, 45, 45,\n  /* 31808 */ 45, 45, 45, 1987, 1845, 97, 97, 97, 45, 45, 45, 45, 45, 1853, 45, 45, 45, 1857, 45, 45, 45, 67, 1864, 67,\n  /* 31832 */ 1866, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 1710, 1711, 67, 67, 97, 97, 97, 97,\n  /* 31857 */ 97, 0, 0, 0, 1886, 97, 97, 97, 0, 0, 97, 97, 97, 97, 1838, 0, 0, 0, 97, 1843, 97, 0, 1893, 97, 97, 97, 97,\n  /* 31884 */ 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1745, 45, 45, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0,\n  /* 31910 */ 1931, 97, 97, 97, 97, 97, 588, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 629, 97, 97, 97, 97, 97, 67, 2044,\n  /* 31935 */ 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 45, 45, 45, 1660, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 31962 */ 45, 45, 453, 45, 455, 67, 67, 67, 67, 268, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97,\n  /* 31986 */ 348, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 359, 0, 0, 362, 0, 365, 28809, 367,\n  /* 32010 */ 139, 45, 45, 45, 45, 45, 421, 45, 45, 45, 45, 45, 45, 45, 434, 45, 45, 695, 45, 45, 45, 45, 45, 45, 45,\n  /* 32035 */ 45, 45, 45, 45, 45, 45, 45, 45, 1667, 45, 0, 921, 29315, 0, 925, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 32061 */ 1811, 45, 67, 67, 67, 67, 67, 67, 1037, 67, 1039, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1277,\n  /* 32085 */ 67, 67, 67, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 1095, 0, 0, 0, 1096, 97, 97, 97, 97,\n  /* 32110 */ 97, 97, 97, 97, 97, 97, 97, 97, 869, 97, 97, 97, 97, 97, 97, 1131, 97, 1133, 97, 97, 97, 97, 97, 97, 97,\n  /* 32135 */ 97, 97, 97, 1370, 97, 97, 97, 97, 97, 1312, 0, 0, 0, 0, 1096, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1327,\n  /* 32161 */ 97, 97, 97, 97, 97, 1332, 97, 97, 97, 1830, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 1896, 97,\n  /* 32187 */ 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1548, 45, 45, 45, 45, 45, 45, 133, 94242, 0, 0, 0, 38, 102439, 0,\n  /* 32212 */ 0, 106538, 98347, 28809, 45, 45, 45, 45, 380, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 401, 45, 45, 158,\n  /* 32235 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1200, 45, 45, 45, 45, 206, 67, 67, 67, 67, 67, 225,\n  /* 32260 */ 67, 67, 67, 67, 67, 67, 67, 67, 754, 67, 67, 67, 67, 67, 67, 67, 57889, 0, 0, 54074, 54074, 550, 832, 97,\n  /* 32284 */ 97, 97, 97, 97, 97, 97, 97, 97, 1342, 97, 97, 97, 97, 97, 97, 67, 67, 67, 67, 67, 25398, 1083, 13112,\n  /* 32307 */ 1087, 54074, 1091, 0, 0, 0, 0, 0, 0, 1316, 0, 831, 97, 97, 97, 97, 97, 97, 97, 1174, 921, 0, 1175, 0, 0,\n  /* 32332 */ 0, 0, 45, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 148, 67, 67, 264, 67, 67,\n  /* 32356 */ 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 295, 97, 97, 97, 97, 313, 97, 97, 97, 97,\n  /* 32380 */ 331, 333, 97, 18, 131427, 356, 638, 0, 0, 0, 0, 362, 0, 0, 365, 0, 367, 0, 45, 45, 1530, 45, 45, 45, 45,\n  /* 32405 */ 45, 45, 45, 45, 45, 45, 45, 45, 988, 45, 45, 45, 97, 344, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27,\n  /* 32431 */ 27, 27, 402, 404, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1756, 67, 438, 45, 45, 45, 45,\n  /* 32456 */ 45, 45, 45, 45, 449, 450, 45, 45, 45, 67, 67, 214, 218, 221, 67, 229, 67, 67, 243, 245, 248, 67, 67, 67,\n  /* 32480 */ 67, 67, 488, 490, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1071, 67, 1073, 67, 67, 67, 67, 67, 524, 67,\n  /* 32505 */ 67, 67, 67, 67, 67, 67, 67, 535, 536, 67, 67, 67, 67, 67, 67, 1683, 1684, 67, 67, 67, 67, 1688, 1689, 67,\n  /* 32529 */ 67, 67, 67, 67, 67, 1586, 67, 67, 67, 67, 67, 67, 67, 67, 67, 469, 67, 67, 67, 67, 67, 67, 97, 97, 97,\n  /* 32554 */ 585, 587, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1163, 97, 97, 97, 97, 97, 97, 97, 621, 97, 97, 97,\n  /* 32579 */ 97, 97, 97, 97, 97, 632, 633, 97, 97, 0, 0, 1782, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 712, 45, 45,\n  /* 32605 */ 45, 717, 45, 45, 45, 45, 45, 45, 45, 45, 725, 45, 45, 45, 163, 167, 173, 177, 45, 45, 45, 45, 45, 193, 45,\n  /* 32630 */ 45, 45, 45, 982, 45, 45, 45, 45, 45, 45, 987, 45, 45, 45, 45, 45, 1558, 45, 1560, 45, 45, 45, 45, 45, 45,\n  /* 32655 */ 45, 45, 704, 705, 45, 45, 45, 45, 45, 45, 45, 45, 731, 45, 45, 45, 67, 67, 67, 67, 67, 739, 67, 67, 67,\n  /* 32680 */ 67, 67, 67, 273, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 67, 67, 67, 764, 67, 67, 67, 67, 67, 67, 67,\n  /* 32704 */ 67, 67, 67, 67, 67, 1290, 67, 67, 67, 67, 67, 67, 812, 67, 67, 67, 67, 818, 67, 67, 67, 25398, 542, 13112,\n  /* 32728 */ 544, 57889, 0, 0, 54074, 54074, 550, 0, 97, 97, 97, 97, 97, 837, 97, 97, 97, 97, 97, 602, 97, 97, 97, 97,\n  /* 32752 */ 97, 97, 97, 97, 97, 97, 1137, 97, 97, 97, 97, 97, 97, 97, 97, 97, 862, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 32778 */ 97, 97, 1627, 97, 97, 97, 0, 97, 97, 97, 97, 910, 97, 97, 97, 97, 916, 97, 97, 97, 0, 0, 0, 97, 97, 1940,\n  /* 32804 */ 97, 97, 1942, 45, 45, 45, 45, 45, 45, 385, 45, 45, 45, 45, 395, 45, 45, 45, 45, 966, 45, 969, 45, 45, 45,\n  /* 32829 */ 45, 45, 45, 45, 45, 45, 45, 975, 45, 45, 45, 406, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 974, 45,\n  /* 32855 */ 45, 45, 67, 67, 67, 67, 1010, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1262, 67, 67, 67, 67, 67, 67,\n  /* 32880 */ 67, 67, 67, 1040, 67, 1042, 67, 1045, 67, 67, 67, 67, 67, 67, 67, 97, 1706, 97, 97, 97, 1709, 97, 97, 97,\n  /* 32904 */ 67, 67, 67, 67, 1051, 67, 67, 67, 67, 67, 1057, 67, 67, 67, 67, 67, 67, 67, 1443, 67, 67, 1446, 67, 67,\n  /* 32928 */ 67, 67, 67, 67, 67, 1297, 0, 0, 0, 1303, 0, 0, 0, 1309, 67, 67, 67, 67, 1079, 25398, 0, 13112, 0, 54074,\n  /* 32952 */ 0, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592,\n  /* 32968 */ 2207744, 2207744, 2207744, 2207744, 2207744, 2572288, 2207744, 2207744, 2207744, 1098, 97, 97, 97, 97, 97,\n  /* 32983 */ 1104, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1356, 97, 97, 97, 97, 97, 97, 1128, 97, 97, 97, 97, 97, 97,\n  /* 33007 */ 1134, 97, 1136, 97, 1139, 97, 97, 97, 97, 97, 97, 1622, 97, 97, 97, 97, 97, 97, 97, 97, 0, 921, 0, 0, 0,\n  /* 33032 */ 1176, 0, 646, 45, 67, 67, 67, 1268, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1469, 67, 67, 67, 97,\n  /* 33057 */ 1348, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1127, 97, 67, 1569, 67, 67, 67, 67, 67, 67,\n  /* 33082 */ 67, 67, 67, 67, 67, 67, 67, 67, 1448, 1449, 67, 1816, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1825, 67, 67,\n  /* 33106 */ 1827, 97, 97, 0, 1781, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 1831, 0, 0, 97, 97, 97, 97,\n  /* 33132 */ 97, 0, 0, 0, 97, 97, 97, 1980, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1395, 45, 45, 45, 45, 45, 97,\n  /* 33158 */ 1846, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1212, 45, 45, 45, 45, 45, 45, 2010, 45, 67,\n  /* 33183 */ 67, 67, 67, 67, 2016, 67, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 45, 45, 2007, 0, 94242, 0, 0,\n  /* 33209 */ 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 143, 45, 45, 45, 1671, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 33232 */ 45, 45, 45, 67, 1813, 67, 67, 1815, 45, 45, 67, 210, 67, 67, 67, 67, 67, 67, 239, 67, 67, 67, 67, 67, 67,\n  /* 33257 */ 67, 1454, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1445, 67, 67, 67, 67, 67, 67, 97, 97, 290, 97, 97, 97, 97,\n  /* 33282 */ 97, 97, 319, 97, 97, 97, 97, 97, 97, 303, 97, 97, 317, 97, 97, 97, 97, 97, 97, 305, 97, 97, 97, 97, 97,\n  /* 33307 */ 97, 97, 97, 97, 899, 97, 97, 97, 97, 97, 97, 375, 45, 45, 45, 379, 45, 45, 390, 45, 45, 394, 45, 45, 45,\n  /* 33332 */ 45, 45, 443, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 461, 67, 67, 67, 465, 67, 67, 476, 67,\n  /* 33357 */ 67, 480, 67, 67, 67, 67, 67, 67, 1694, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1288, 67, 67, 67, 67, 67, 67,\n  /* 33382 */ 500, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1075, 97, 97, 97, 558, 97, 97, 97, 562,\n  /* 33407 */ 97, 97, 573, 97, 97, 577, 97, 97, 97, 97, 97, 895, 97, 97, 97, 97, 97, 97, 903, 97, 97, 97, 0, 97, 97,\n  /* 33432 */ 1638, 97, 97, 97, 97, 97, 97, 97, 97, 1646, 597, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 33457 */ 97, 1334, 45, 681, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1396, 45, 45, 1399, 45, 45,\n  /* 33481 */ 730, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1434, 67, 67, 67, 67, 67, 67, 750, 67, 67,\n  /* 33506 */ 67, 67, 67, 67, 67, 67, 67, 67, 1456, 67, 67, 67, 67, 67, 45, 45, 993, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 33532 */ 45, 45, 67, 67, 1238, 67, 67, 1006, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1280,\n  /* 33556 */ 1048, 1049, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1059, 67, 67, 67, 67, 67, 67, 1286, 67, 67, 67, 67,\n  /* 33580 */ 67, 67, 67, 1291, 67, 97, 97, 1100, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 638, 0, 920, 97,\n  /* 33605 */ 97, 1142, 1143, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1153, 97, 97, 97, 97, 97, 1158, 97, 97, 97, 1161,\n  /* 33629 */ 97, 97, 97, 97, 1166, 97, 97, 97, 97, 97, 1325, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1328, 97, 97, 97,\n  /* 33654 */ 97, 97, 97, 97, 45, 1218, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1678, 45, 45, 45, 67,\n  /* 33679 */ 67, 67, 67, 67, 1269, 67, 67, 67, 67, 67, 67, 67, 67, 1278, 67, 67, 67, 67, 67, 67, 1761, 67, 67, 67, 67,\n  /* 33704 */ 67, 67, 67, 67, 67, 530, 67, 67, 67, 67, 67, 67, 97, 97, 1349, 97, 97, 97, 97, 97, 97, 97, 97, 1358, 97,\n  /* 33729 */ 97, 97, 97, 97, 97, 1623, 97, 97, 97, 97, 97, 97, 97, 97, 0, 921, 0, 0, 926, 0, 0, 0, 45, 45, 1411, 45,\n  /* 33755 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1754, 45, 45, 67, 67, 1301, 0, 1307, 0, 1313, 97, 97,\n  /* 33780 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 21054, 97, 97, 97, 97, 67, 1757, 67, 67, 67, 1760, 67, 67, 67, 67, 67,\n  /* 33805 */ 67, 67, 67, 67, 67, 1467, 67, 67, 67, 67, 67, 1778, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97,\n  /* 33832 */ 97, 97, 97, 97, 1352, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1511, 97, 97, 97, 97, 97, 67, 67, 67, 67,\n  /* 33857 */ 67, 1820, 67, 1822, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 1933, 97, 1892, 97, 97, 97, 97,\n  /* 33882 */ 97, 97, 1899, 45, 45, 45, 45, 45, 45, 45, 45, 1664, 45, 45, 45, 45, 45, 45, 45, 45, 1546, 45, 45, 45, 45,\n  /* 33907 */ 45, 45, 45, 45, 1208, 45, 45, 45, 45, 45, 45, 45, 45, 1224, 45, 45, 45, 45, 45, 45, 45, 45, 673, 45, 45,\n  /* 33932 */ 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1925, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 623, 97, 97,\n  /* 33958 */ 97, 97, 97, 97, 97, 97, 97, 97, 307, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1796, 97, 45, 45, 45, 45, 45, 45,\n  /* 33984 */ 45, 970, 45, 45, 45, 45, 45, 45, 45, 45, 1417, 45, 45, 45, 45, 45, 45, 45, 67, 1964, 67, 67, 97, 97, 97,\n  /* 34009 */ 97, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 1721, 97, 97, 0, 0, 1997, 97, 0, 0, 2000, 97, 97,\n  /* 34036 */ 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 733, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 803, 67, 67, 67,\n  /* 34062 */ 67, 67, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 144, 45, 45, 45, 1805, 45,\n  /* 34084 */ 1807, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 231, 67, 67, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0,\n  /* 34109 */ 0, 0, 28809, 53531, 45, 45, 67, 211, 67, 67, 67, 67, 230, 234, 240, 244, 67, 67, 67, 67, 67, 67, 464, 67,\n  /* 34133 */ 67, 67, 67, 67, 67, 479, 67, 67, 67, 260, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531,\n  /* 34157 */ 97, 97, 291, 97, 97, 97, 97, 310, 314, 320, 324, 97, 97, 97, 97, 97, 97, 1367, 97, 97, 97, 97, 97, 97, 97,\n  /* 34182 */ 97, 97, 1355, 97, 97, 97, 97, 97, 97, 1362, 340, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27,\n  /* 34207 */ 27, 131427, 0, 0, 360, 0, 362, 0, 365, 28809, 367, 139, 369, 45, 45, 45, 374, 67, 67, 460, 67, 67, 67, 67,\n  /* 34231 */ 466, 67, 67, 67, 67, 67, 67, 67, 67, 801, 67, 67, 67, 67, 67, 67, 67, 67, 67, 487, 67, 67, 67, 67, 67, 67,\n  /* 34257 */ 67, 67, 67, 67, 498, 67, 67, 67, 67, 67, 67, 1772, 67, 67, 97, 97, 97, 97, 97, 97, 97, 0, 921, 922, 1175,\n  /* 34282 */ 0, 0, 0, 0, 45, 67, 502, 67, 67, 67, 67, 67, 67, 67, 508, 67, 67, 67, 515, 517, 67, 67, 67, 67, 67, 97,\n  /* 34308 */ 97, 97, 97, 97, 0, 0, 0, 1932, 97, 97, 0, 1999, 97, 97, 97, 0, 97, 97, 2004, 2005, 97, 45, 45, 45, 45,\n  /* 34333 */ 1193, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 676, 45, 45, 45, 45, 67, 24850, 24850, 12564, 12564, 0,\n  /* 34356 */ 57889, 0, 0, 0, 53531, 53531, 367, 286, 552, 97, 97, 97, 97, 97, 1377, 0, 0, 45, 45, 45, 45, 45, 45, 45,\n  /* 34380 */ 45, 655, 45, 45, 45, 45, 45, 45, 45, 97, 97, 557, 97, 97, 97, 97, 563, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 34405 */ 1135, 97, 97, 97, 97, 97, 97, 97, 97, 97, 584, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 595, 97, 97, 97,\n  /* 34430 */ 97, 97, 911, 97, 97, 97, 97, 97, 97, 97, 638, 0, 0, 0, 0, 1315, 0, 0, 0, 0, 97, 97, 97, 1319, 97, 97, 97,\n  /* 34457 */ 0, 97, 97, 97, 97, 97, 97, 1733, 97, 97, 97, 97, 97, 97, 1340, 97, 97, 97, 1343, 97, 97, 1345, 97, 1346,\n  /* 34481 */ 97, 599, 97, 97, 97, 97, 97, 97, 97, 605, 97, 97, 97, 612, 614, 97, 97, 97, 97, 97, 1794, 97, 97, 97, 45,\n  /* 34506 */ 45, 45, 45, 45, 45, 45, 1207, 45, 45, 45, 45, 45, 45, 1213, 45, 45, 745, 67, 67, 67, 67, 751, 67, 67, 67,\n  /* 34531 */ 67, 67, 67, 67, 67, 67, 67, 1577, 67, 67, 67, 67, 67, 762, 67, 67, 67, 67, 766, 67, 67, 67, 67, 67, 67,\n  /* 34556 */ 67, 67, 67, 67, 1765, 67, 67, 67, 67, 67, 777, 67, 67, 781, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 34581 */ 67, 1592, 1593, 67, 67, 97, 843, 97, 97, 97, 97, 849, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1510, 97, 97,\n  /* 34605 */ 97, 97, 97, 97, 97, 860, 97, 97, 97, 97, 864, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1797, 45, 45, 45, 45,\n  /* 34630 */ 1801, 45, 97, 875, 97, 97, 879, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1522, 97, 97, 97, 97, 97, 991,\n  /* 34655 */ 45, 45, 45, 45, 996, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 215, 67, 67, 67, 67, 233, 67, 67, 67, 67,\n  /* 34680 */ 251, 253, 1022, 67, 67, 67, 1026, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1035, 67, 67, 1038, 67, 67, 67,\n  /* 34704 */ 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1458, 67, 67, 67, 67, 67, 1064, 67, 67, 67, 1067, 67, 67, 67, 67,\n  /* 34729 */ 1072, 67, 67, 67, 67, 67, 67, 1296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2367488, 2158592, 2158592, 2158592,\n  /* 34750 */ 2158592, 2158592, 2158592, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 1096, 0, 921, 29315,\n  /* 34771 */ 0, 0, 0, 0, 928, 45, 45, 45, 45, 45, 934, 45, 45, 45, 164, 45, 45, 45, 45, 45, 45, 45, 45, 45, 198, 45,\n  /* 34797 */ 45, 45, 378, 45, 45, 45, 45, 45, 45, 393, 45, 45, 45, 398, 45, 97, 97, 1116, 97, 97, 97, 1120, 97, 97, 97,\n  /* 34822 */ 97, 97, 97, 97, 97, 97, 1147, 1148, 97, 97, 97, 97, 97, 97, 97, 1129, 97, 97, 1132, 97, 97, 97, 97, 97,\n  /* 34846 */ 97, 97, 97, 97, 97, 97, 1626, 97, 97, 97, 97, 0, 45, 1178, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1185, 45,\n  /* 34871 */ 45, 45, 45, 441, 45, 45, 45, 45, 45, 45, 451, 45, 45, 67, 67, 67, 67, 67, 227, 67, 67, 67, 67, 67, 67, 67,\n  /* 34897 */ 67, 1260, 67, 67, 67, 1263, 67, 67, 1265, 1203, 45, 45, 1205, 45, 1206, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 34920 */ 45, 1216, 67, 1266, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1276, 67, 67, 67, 67, 67, 67, 492, 67, 67, 67, 67,\n  /* 34945 */ 67, 67, 67, 67, 67, 471, 67, 67, 67, 67, 481, 67, 45, 1386, 45, 1389, 45, 45, 45, 45, 1394, 45, 45, 45,\n  /* 34969 */ 1397, 45, 45, 45, 45, 995, 45, 997, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1915, 67, 67, 67, 67, 67,\n  /* 34994 */ 1422, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1433, 67, 1436, 67, 67, 67, 67, 1441, 67, 67, 67,\n  /* 35018 */ 1444, 67, 67, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 281, 28809, 53531, 97, 97, 97, 97, 1494, 97,\n  /* 35041 */ 97, 97, 1497, 97, 97, 97, 97, 97, 97, 97, 1368, 97, 97, 97, 97, 97, 97, 97, 97, 851, 97, 97, 97, 97, 97,\n  /* 35066 */ 97, 97, 67, 67, 67, 1571, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 67, 67,\n  /* 35090 */ 1583, 67, 67, 67, 67, 67, 67, 67, 67, 1591, 67, 67, 67, 67, 67, 67, 752, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 35115 */ 67, 1056, 67, 67, 67, 67, 67, 67, 97, 1634, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1125,\n  /* 35140 */ 97, 97, 97, 1647, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1183, 45, 45, 45, 45, 45, 45,\n  /* 35166 */ 45, 45, 45, 409, 45, 45, 45, 45, 45, 45, 1658, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 35191 */ 1668, 1712, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 1835, 97, 97, 97, 97, 0, 0, 0, 97,\n  /* 35217 */ 97, 1844, 97, 97, 1726, 0, 97, 97, 97, 97, 97, 1732, 97, 1734, 97, 97, 97, 97, 97, 300, 97, 308, 97, 97,\n  /* 35241 */ 97, 97, 97, 97, 97, 97, 866, 97, 97, 97, 97, 97, 97, 97, 67, 67, 67, 1758, 67, 67, 67, 1762, 67, 67, 67,\n  /* 35266 */ 67, 67, 67, 67, 67, 1043, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1771, 67, 67, 67, 97, 97, 97,\n  /* 35291 */ 97, 97, 1776, 97, 97, 97, 97, 297, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1108, 97, 97, 97, 97, 67,\n  /* 35316 */ 67, 67, 1966, 97, 97, 97, 1970, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 1720, 97, 97, 97, 97, 97, 0, 0,\n  /* 35342 */ 97, 97, 97, 1837, 97, 0, 1840, 1841, 97, 97, 97, 1988, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1994, 1995,\n  /* 35366 */ 67, 97, 97, 97, 97, 97, 1103, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 917, 97, 97, 0, 0, 0, 67, 67, 265,\n  /* 35392 */ 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 345, 97, 97, 97, 97, 0, 40976, 0, 18, 18,\n  /* 35416 */ 24, 24, 27, 27, 27, 131427, 0, 0, 0, 361, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 671, 45, 45,\n  /* 35440 */ 45, 45, 45, 45, 45, 45, 45, 45, 411, 45, 45, 414, 45, 45, 45, 45, 377, 45, 45, 45, 386, 45, 45, 45, 45,\n  /* 35465 */ 45, 45, 45, 45, 45, 1223, 45, 45, 45, 45, 45, 45, 45, 45, 45, 426, 45, 45, 433, 45, 45, 45, 67, 67, 67,\n  /* 35490 */ 67, 67, 463, 67, 67, 67, 472, 67, 67, 67, 67, 67, 67, 67, 527, 67, 67, 67, 67, 67, 67, 537, 67, 540,\n  /* 35514 */ 24850, 24850, 12564, 12564, 0, 57889, 0, 0, 0, 53531, 53531, 367, 286, 97, 97, 97, 97, 97, 1119, 97, 97,\n  /* 35535 */ 97, 97, 97, 97, 97, 97, 97, 97, 1509, 97, 97, 97, 97, 97, 97, 97, 97, 564, 97, 97, 97, 97, 97, 97, 97,\n  /* 35560 */ 637, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 921, 29315, 0, 0, 0, 927, 45, 45, 45,\n  /* 35585 */ 45, 45, 45, 45, 45, 45, 1234, 45, 45, 45, 45, 67, 67, 67, 67, 1240, 45, 697, 45, 45, 45, 45, 45, 45, 45,\n  /* 35610 */ 45, 45, 45, 708, 45, 45, 45, 45, 1221, 45, 45, 45, 45, 1225, 45, 45, 45, 45, 45, 45, 384, 45, 45, 45, 45,\n  /* 35635 */ 45, 45, 45, 45, 45, 1210, 45, 45, 45, 45, 45, 45, 67, 67, 795, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 35661 */ 67, 67, 1470, 67, 67, 67, 67, 67, 67, 67, 815, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 97, 97, 97,\n  /* 35685 */ 893, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1164, 97, 97, 97, 67, 67, 67, 1025, 67, 67, 67, 67,\n  /* 35710 */ 67, 67, 67, 67, 67, 67, 67, 67, 1687, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0,\n  /* 35735 */ 0, 0, 0, 1097, 1241, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1450, 45, 45, 1388, 45,\n  /* 35760 */ 1390, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1236, 67, 67, 67, 67, 67, 1437, 67, 67, 67, 67, 67, 67,\n  /* 35785 */ 67, 67, 67, 67, 67, 67, 67, 67, 67, 1472, 1490, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 35810 */ 97, 1503, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 1930, 0, 97, 97, 97, 97, 97, 847, 97, 97, 97, 97, 97,\n  /* 35836 */ 97, 97, 97, 97, 858, 67, 67, 1965, 67, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 1719, 97, 97,\n  /* 35862 */ 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 45, 1382, 45, 1383, 45, 45, 45, 159, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 35888 */ 45, 45, 45, 45, 45, 1563, 45, 45, 45, 45, 45, 67, 261, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0,\n  /* 35913 */ 28809, 53531, 341, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 97, 1099, 97, 97, 97, 97,\n  /* 35937 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1333, 97, 1230, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67,\n  /* 35962 */ 67, 67, 67, 67, 1992, 67, 1993, 67, 67, 67, 97, 97, 45, 45, 160, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 35987 */ 45, 45, 45, 1665, 45, 45, 45, 45, 45, 131427, 357, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45,\n  /* 36011 */ 45, 684, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 412, 45, 45, 45, 416, 45, 45, 45, 440, 45, 45, 45, 45,\n  /* 36036 */ 45, 45, 45, 45, 45, 45, 45, 67, 67, 1990, 67, 1991, 67, 67, 67, 67, 67, 67, 67, 97, 97, 1707, 97, 97, 97,\n  /* 36061 */ 97, 97, 97, 501, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1691, 67, 67, 67, 67, 67,\n  /* 36086 */ 526, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1030, 67, 1032, 67, 67, 67, 67, 598, 97, 97, 97, 97, 97, 97,\n  /* 36111 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 1632, 0, 921, 29315, 923, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 36137 */ 1404, 45, 45, 45, 45, 45, 45, 45, 45, 45, 425, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 25398, 0,\n  /* 36161 */ 13112, 0, 54074, 0, 0, 1093, 0, 0, 0, 0, 0, 97, 1609, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1369, 97, 97,\n  /* 36186 */ 97, 1372, 97, 97, 67, 67, 266, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 346, 97, 97,\n  /* 36210 */ 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 665, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 36236 */ 45, 45, 1677, 45, 45, 45, 45, 67, 45, 45, 954, 45, 956, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1545,\n  /* 36261 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 448, 45, 45, 45, 45, 67, 456, 67, 67, 67, 67, 67, 1270, 67, 67, 67,\n  /* 36286 */ 67, 67, 67, 67, 67, 67, 67, 1069, 67, 67, 67, 67, 67, 67, 97, 97, 97, 1350, 97, 97, 97, 97, 97, 97, 97,\n  /* 36311 */ 97, 97, 97, 97, 97, 1524, 97, 97, 97, 97, 97, 97, 97, 1376, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 1559,\n  /* 36337 */ 1561, 45, 45, 45, 1564, 45, 1566, 1567, 45, 67, 67, 67, 67, 67, 1573, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 36361 */ 67, 1247, 67, 67, 67, 67, 67, 1252, 97, 1725, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1628,\n  /* 36386 */ 97, 1630, 0, 0, 94242, 0, 0, 0, 2211840, 0, 1118208, 0, 0, 0, 0, 2158592, 2158731, 2158592, 2158592,\n  /* 36405 */ 2158592, 3117056, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592,\n  /* 36416 */ 2158592, 2158592, 2158592, 3018752, 2158592, 3043328, 2158592, 2158592, 2158592, 2158592, 3080192,\n  /* 36427 */ 2158592, 2158592, 3112960, 2158592, 2158592, 2158592, 2158592, 2158592, 2158878, 2158592, 2158592,\n  /* 36438 */ 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592,\n  /* 36449 */ 2158592, 2605056, 2158592, 2158592, 2207744, 0, 542, 0, 544, 0, 0, 2166784, 0, 0, 0, 550, 0, 0, 2158592,\n  /* 36468 */ 2158592, 2686976, 2158592, 2715648, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592,\n  /* 36479 */ 2867200, 2158592, 2904064, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 94242, 0, 0,\n  /* 36493 */ 0, 2211840, 0, 0, 1130496, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 0, 0,\n  /* 36510 */ 139, 0, 0, 0, 139, 0, 2367488, 2207744, 0, 0, 0, 0, 176128, 0, 2166784, 0, 0, 0, 0, 0, 286, 2158592,\n  /* 36532 */ 2158592, 3170304, 3174400, 2158592, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2424832,\n  /* 36545 */ 2158592, 2158592, 2158592, 1508, 2158592, 2908160, 2158592, 2158592, 2158592, 2977792, 2158592, 2158592,\n  /* 36557 */ 2158592, 2158592, 3039232, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3158016, 67, 24850,\n  /* 36569 */ 24850, 12564, 12564, 0, 0, 0, 0, 0, 53531, 53531, 0, 286, 97, 97, 97, 97, 97, 1144, 97, 97, 97, 97, 97,\n  /* 36592 */ 97, 97, 97, 97, 97, 1149, 97, 97, 97, 97, 1154, 57889, 0, 0, 0, 0, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 36618 */ 97, 561, 97, 97, 97, 97, 97, 97, 576, 97, 97, 139264, 139264, 139264, 139264, 139264, 139264, 139264,\n  /* 36636 */ 139264, 139264, 139264, 139264, 139264, 0, 0, 139264, 0, 921, 29315, 0, 0, 926, 0, 45, 45, 45, 45, 45, 45,\n  /* 36657 */ 45, 45, 45, 719, 720, 45, 45, 45, 45, 45, 45, 45, 45, 685, 45, 45, 45, 45, 45, 45, 45, 45, 45, 942, 45,\n  /* 36682 */ 45, 946, 45, 45, 45, 950, 45, 45, 0, 2146304, 2146304, 0, 0, 0, 0, 2224128, 2224128, 2224128, 2232320,\n  /* 36701 */ 2232320, 2232320, 2232320, 0, 0, 1301, 0, 0, 0, 0, 0, 1307, 0, 0, 0, 0, 0, 1313, 0, 0, 0, 0, 0, 0, 0, 97,\n  /* 36727 */ 97, 1318, 97, 97, 97, 97, 97, 97, 1795, 97, 97, 45, 45, 45, 45, 45, 45, 45, 446, 45, 45, 45, 45, 45, 45,\n  /* 36752 */ 67, 67, 2158592, 2146304, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 2158592, 0, 921, 29315, 0, 924, 0, 0,\n  /* 36776 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 1000, 45, 45, 45, 45, 67, 67\n];\n\nXQueryTokenizer.EXPECTED =\n[\n  /*    0 */ 290, 300, 304, 353, 296, 309, 305, 319, 315, 324, 328, 352, 354, 334, 338, 330, 320, 345, 349, 293, 358,\n  /*   21 */ 362, 341, 366, 312, 370, 374, 378, 382, 386, 390, 394, 398, 737, 402, 634, 439, 604, 634, 634, 634, 634,\n  /*   42 */ 408, 634, 634, 634, 404, 634, 634, 634, 457, 634, 634, 963, 634, 634, 413, 634, 634, 634, 634, 634, 634,\n  /*   63 */ 634, 663, 418, 422, 903, 902, 426, 431, 548, 634, 437, 521, 919, 443, 615, 409, 449, 455, 624, 731, 751,\n  /*   84 */ 634, 461, 465, 672, 470, 469, 474, 481, 485, 477, 489, 493, 629, 542, 497, 505, 603, 602, 991, 648, 510,\n  /*  105 */ 804, 634, 515, 958, 526, 525, 530, 768, 634, 546, 552, 711, 710, 593, 558, 562, 618, 566, 570, 574, 578,\n  /*  126 */ 582, 586, 590, 608, 612, 660, 822, 821, 634, 622, 596, 444, 628, 533, 724, 633, 640, 653, 647, 652, 536,\n  /*  147 */ 1008, 451, 450, 445, 657, 670, 676, 685, 689, 693, 697, 701, 704, 707, 715, 719, 798, 815, 634, 723, 762,\n  /*  168 */ 996, 634, 728, 969, 730, 735, 908, 634, 741, 679, 889, 511, 747, 634, 750, 755, 499, 666, 499, 501, 759,\n  /*  189 */ 772, 776, 780, 634, 787, 784, 797, 802, 809, 808, 427, 814, 1006, 517, 634, 519, 853, 634, 813, 850, 793,\n  /*  210 */ 634, 819, 826, 833, 832, 837, 843, 847, 857, 861, 863, 867, 871, 875, 879, 883, 643, 887, 539, 980, 979,\n  /*  231 */ 634, 893, 944, 634, 900, 896, 634, 907, 933, 506, 912, 917, 828, 433, 636, 635, 554, 961, 923, 930, 927,\n  /*  252 */ 937, 941, 634, 634, 634, 974, 948, 952, 985, 913, 968, 967, 743, 634, 973, 839, 634, 978, 599, 634, 984,\n  /*  273 */ 989, 765, 444, 995, 1000, 634, 1003, 790, 955, 1012, 681, 634, 634, 634, 634, 634, 414, 1016, 1020, 1024,\n  /*  293 */ 1085, 1027, 1090, 1090, 1046, 1080, 1137, 1108, 1215, 1049, 1032, 1039, 1085, 1085, 1085, 1085, 1058, 1062,\n  /*  311 */ 1068, 1085, 1086, 1090, 1090, 1091, 1072, 1064, 1107, 1090, 1090, 1090, 1118, 1123, 1138, 1078, 1074, 1084,\n  /*  329 */ 1085, 1085, 1085, 1087, 1090, 1062, 1052, 1060, 1114, 1062, 1104, 1085, 1085, 1090, 1090, 1028, 1122, 1063,\n  /*  347 */ 1128, 1139, 1127, 1158, 1085, 1085, 1151, 1090, 1090, 1090, 1095, 1090, 1132, 1073, 1136, 1143, 1061, 1150,\n  /*  365 */ 1085, 1155, 1098, 1101, 1146, 1162, 1169, 1101, 1185, 1151, 1090, 1110, 1173, 1054, 1087, 1109, 1177, 1165,\n  /*  383 */ 1089, 1204, 1184, 1107, 1189, 1193, 1088, 1197, 1180, 1201, 1208, 1042, 1212, 1219, 1223, 1227, 1231, 1235,\n  /*  401 */ 1245, 1777, 1527, 1686, 1686, 1238, 1686, 1254, 1686, 1686, 1686, 1294, 1669, 1686, 1686, 1686, 1322, 1625,\n  /*  419 */ 1534, 1268, 1624, 1275, 1281, 1443, 1292, 1300, 1686, 1686, 1686, 1350, 1826, 1306, 1686, 1686, 1240, 2032,\n  /*  437 */ 1317, 1321, 1686, 1686, 1253, 1686, 1326, 1686, 1686, 1686, 1418, 1709, 1446, 1686, 1686, 1686, 1492, 1686,\n  /*  455 */ 1295, 1447, 1686, 1686, 1258, 1686, 1736, 1686, 1686, 1520, 1355, 1686, 1288, 1348, 1361, 1686, 1359, 1686,\n  /*  473 */ 1364, 1498, 1368, 1302, 1362, 1381, 1389, 1395, 1486, 1686, 1371, 1377, 1370, 1686, 1375, 1382, 1384, 1402,\n  /*  491 */ 1408, 1385, 1383, 1619, 1413, 1423, 1428, 1433, 1686, 1686, 1270, 1686, 1338, 1686, 1440, 1686, 1686, 1686,\n  /*  509 */ 1499, 1465, 1686, 1686, 1686, 1639, 1473, 1884, 1686, 1686, 1293, 1864, 1686, 1686, 1296, 1321, 1483, 1686,\n  /*  527 */ 1686, 1686, 1646, 1686, 1748, 1496, 1686, 1418, 1675, 1686, 1418, 1702, 1686, 1418, 1981, 1686, 1429, 1409,\n  /*  545 */ 1427, 1504, 1692, 1686, 1686, 1313, 1448, 1651, 1508, 1686, 1686, 1340, 1686, 1903, 1686, 1686, 1435, 1513,\n  /*  563 */ 1686, 1283, 1287, 1519, 1686, 1524, 1363, 1568, 1938, 1539, 1566, 1579, 1479, 1533, 1538, 1553, 1544, 1552,\n  /*  581 */ 1557, 1563, 1574, 1557, 1583, 1589, 1590, 1759, 1594, 1603, 1607, 1611, 1686, 1436, 1514, 1686, 1434, 1656,\n  /*  599 */ 1686, 1434, 1680, 1686, 1453, 1686, 1686, 1686, 1559, 1617, 1686, 1770, 1418, 1623, 1769, 1629, 1686, 1515,\n  /*  617 */ 1335, 1686, 1285, 1686, 1671, 1921, 1650, 1686, 1686, 1344, 1308, 1666, 1686, 1686, 1686, 1659, 1685, 1686,\n  /*  635 */ 1686, 1686, 1686, 1241, 1686, 1686, 1844, 1691, 1686, 1630, 1977, 1970, 1362, 1686, 1686, 1686, 1693, 1698,\n  /*  653 */ 1686, 1686, 1686, 1697, 1686, 1764, 1715, 1686, 1634, 1638, 1686, 1599, 1585, 1686, 1271, 1686, 1269, 1686,\n  /*  671 */ 1721, 1686, 1686, 1354, 1686, 1801, 1686, 1799, 1686, 1640, 1686, 1686, 1461, 1686, 1686, 1732, 1686, 1944,\n  /*  689 */ 1686, 1740, 1686, 1746, 1415, 1396, 1686, 1598, 1547, 1417, 1597, 1416, 1577, 1546, 1397, 1577, 1547, 1548,\n  /*  707 */ 1570, 1398, 1753, 1686, 1652, 1509, 1686, 1686, 1686, 1757, 1686, 1419, 1686, 1763, 1418, 1768, 1781, 1686,\n  /*  725 */ 1686, 1686, 1705, 1686, 2048, 1792, 1686, 1686, 1686, 1735, 1686, 1797, 1686, 1686, 1404, 1686, 1639, 1815,\n  /*  743 */ 1686, 1686, 1418, 2017, 1820, 1686, 1686, 1803, 1686, 1686, 1686, 1736, 1489, 1686, 1686, 1825, 1338, 1260,\n  /*  761 */ 1263, 1686, 1686, 1785, 1686, 1686, 1728, 1686, 1686, 1749, 1497, 1830, 1830, 1262, 1248, 1261, 1329, 1260,\n  /*  779 */ 1264, 1329, 1248, 1249, 1259, 1540, 1849, 1842, 1686, 1686, 1835, 1686, 1686, 1816, 1686, 1686, 1831, 1882,\n  /*  797 */ 1848, 1686, 1686, 1686, 1774, 2071, 1854, 1686, 1686, 1469, 1884, 1686, 1821, 1859, 1686, 1686, 1350, 1883,\n  /*  815 */ 1686, 1686, 1686, 1781, 1391, 1875, 1686, 1686, 1613, 1644, 1686, 1686, 1889, 1686, 1686, 1662, 1884, 1686,\n  /*  833 */ 1885, 1890, 1686, 1686, 1686, 1894, 1686, 1686, 1678, 1686, 1907, 1686, 1686, 1529, 1914, 1686, 1838, 1686,\n  /*  851 */ 1686, 1881, 1686, 1686, 1872, 1876, 1836, 1919, 1686, 1837, 1692, 1910, 1686, 1925, 1928, 1742, 1686, 1811,\n  /*  869 */ 1811, 1930, 1810, 1929, 1935, 1928, 1900, 1942, 1867, 1868, 1931, 1035, 1788, 1948, 1952, 1956, 1960, 1964,\n  /*  887 */ 1686, 1976, 1686, 1686, 1686, 2065, 1686, 1992, 2037, 1686, 1686, 1998, 2009, 1972, 2002, 1686, 1686, 1686,\n  /*  905 */ 2077, 1300, 2023, 1686, 1686, 1686, 1807, 2031, 1686, 1686, 1686, 1860, 1500, 2032, 1686, 1686, 1686, 2083,\n  /*  923 */ 1686, 2036, 1686, 1277, 1276, 2042, 1877, 1686, 1686, 2041, 1686, 1686, 2027, 2037, 2012, 1686, 2012, 1855,\n  /*  941 */ 1850, 1686, 2046, 1686, 1686, 2054, 1996, 1686, 1897, 1309, 2059, 2052, 1686, 2058, 1686, 1686, 2081, 1686,\n  /*  959 */ 1717, 1477, 1686, 1331, 1686, 1686, 1687, 1686, 1860, 1681, 1686, 1686, 1686, 1966, 1724, 1686, 1686, 1686,\n  /*  977 */ 1984, 2015, 1686, 1686, 1686, 1988, 1686, 2063, 1686, 1686, 1686, 2005, 1686, 1727, 1686, 1686, 1711, 1457,\n  /*  995 */ 2069, 1686, 1686, 1686, 2019, 2075, 1686, 1686, 1915, 1686, 1686, 1793, 1874, 1686, 1686, 1491, 1362, 1449,\n  /* 1013 */ 1686, 1686, 1460, 2098, 2087, 2091, 2095, 2184, 2102, 2113, 2780, 2117, 2134, 2142, 2281, 2146, 2146, 2146,\n  /* 1031 */ 2304, 2296, 2181, 2639, 2591, 2872, 2592, 2873, 2313, 2195, 2200, 2281, 2146, 2273, 2226, 2204, 2152, 2219,\n  /* 1049 */ 2276, 2167, 2177, 2276, 2235, 2276, 2276, 2230, 2281, 2276, 2296, 2276, 2293, 2276, 2276, 2276, 2276, 2234,\n  /* 1067 */ 2276, 2311, 2314, 2210, 2199, 2217, 2222, 2276, 2276, 2276, 2240, 2276, 2294, 2276, 2276, 2173, 2276, 2198,\n  /* 1085 */ 2281, 2281, 2281, 2281, 2282, 2146, 2146, 2146, 2146, 2205, 2146, 2204, 2248, 2276, 2235, 2276, 2297, 2276,\n  /* 1103 */ 2276, 2276, 2277, 2256, 2281, 2283, 2146, 2146, 2146, 2275, 2276, 2295, 2276, 2276, 2293, 2146, 2304, 2264,\n  /* 1121 */ 2269, 2221, 2276, 2276, 2276, 2293, 2295, 2276, 2276, 2276, 2295, 2263, 2205, 2268, 2220, 2172, 2276, 2276,\n  /* 1139 */ 2276, 2296, 2276, 2276, 2296, 2294, 2276, 2276, 2278, 2281, 2281, 2280, 2281, 2281, 2281, 2283, 2206, 2223,\n  /* 1157 */ 2276, 2276, 2279, 2281, 2281, 2146, 2273, 2276, 2276, 2281, 2281, 2281, 2276, 2292, 2276, 2298, 2225, 2276,\n  /* 1175 */ 2298, 2169, 2224, 2292, 2298, 2171, 2229, 2281, 2281, 2171, 2236, 2281, 2281, 2281, 2146, 2275, 2225, 2292,\n  /* 1193 */ 2299, 2276, 2229, 2281, 2146, 2276, 2290, 2297, 2283, 2146, 2146, 2274, 2224, 2227, 2298, 2225, 2297, 2276,\n  /* 1211 */ 2230, 2170, 2230, 2282, 2146, 2147, 2151, 2156, 2288, 2276, 2230, 2303, 2308, 2236, 2284, 2228, 2318, 2318,\n  /* 1229 */ 2318, 2326, 2335, 2339, 2343, 2349, 2416, 2693, 2357, 2592, 2109, 2592, 2592, 2162, 2943, 2823, 2646, 2592,\n  /* 1247 */ 2361, 2592, 2122, 2592, 2592, 2122, 2470, 2592, 2592, 2592, 2109, 2107, 2592, 2592, 2592, 2123, 2592, 2592,\n  /* 1265 */ 2592, 2125, 2592, 2413, 2592, 2592, 2592, 2127, 2592, 2592, 2414, 2592, 2592, 2592, 2130, 2952, 2592, 2594,\n  /* 1283 */ 2592, 2592, 2212, 2609, 2252, 2592, 2592, 2592, 2446, 2434, 2592, 2592, 2592, 2212, 2446, 2450, 2456, 2431,\n  /* 1301 */ 2435, 2592, 2592, 2243, 2478, 2448, 2439, 2946, 2592, 2592, 2592, 2368, 2809, 2813, 2450, 2441, 2212, 2812,\n  /* 1319 */ 2449, 2440, 2947, 2592, 2592, 2592, 2345, 2451, 2457, 2948, 2592, 2124, 2592, 2592, 2650, 2823, 2449, 2455,\n  /* 1337 */ 2946, 2592, 2128, 2592, 2592, 2649, 2952, 2592, 2810, 2448, 2461, 2991, 2467, 2592, 2592, 2329, 2817, 2474,\n  /* 1355 */ 2990, 2466, 2592, 2592, 2373, 2447, 2992, 2469, 2592, 2592, 2592, 2373, 2447, 2477, 2468, 2592, 2592, 2353,\n  /* 1373 */ 2469, 2592, 2495, 2592, 2592, 2415, 2483, 2592, 2415, 2496, 2592, 2592, 2352, 2592, 2592, 2352, 2352, 2469,\n  /* 1391 */ 2592, 2592, 2363, 2331, 2494, 2592, 2592, 2592, 2375, 2592, 2375, 2415, 2504, 2592, 2592, 2367, 2372, 2503,\n  /* 1409 */ 2592, 2592, 2592, 2389, 2418, 2415, 2592, 2592, 2373, 2592, 2592, 2592, 2593, 2732, 2417, 2415, 2592, 2417,\n  /* 1427 */ 2520, 2592, 2592, 2592, 2390, 2521, 2521, 2592, 2592, 2592, 2401, 2599, 2585, 2526, 2531, 2120, 2592, 2212,\n  /* 1445 */ 2426, 2450, 2463, 2948, 2592, 2592, 2592, 2213, 2389, 2527, 2532, 2121, 2542, 2551, 2105, 2592, 2213, 2592,\n  /* 1463 */ 2592, 2592, 2558, 2538, 2544, 2553, 2557, 2537, 2543, 2552, 2421, 2572, 2576, 2546, 2543, 2547, 2592, 2592,\n  /* 1481 */ 2373, 2615, 2575, 2545, 2105, 2592, 2244, 2479, 2592, 2129, 2592, 2592, 2628, 2690, 2469, 2562, 2566, 2592,\n  /* 1499 */ 2592, 2592, 2415, 2928, 2934, 2401, 2570, 2574, 2564, 2572, 2585, 2590, 2592, 2592, 2585, 2965, 2592, 2592,\n  /* 1517 */ 2592, 2445, 2251, 2592, 2592, 2592, 2474, 2592, 2609, 2892, 2592, 2362, 2592, 2592, 2138, 2851, 2159, 2592,\n  /* 1535 */ 2592, 2592, 2509, 2888, 2892, 2592, 2592, 2592, 2490, 2418, 2891, 2592, 2592, 2376, 2592, 2592, 2374, 2592,\n  /* 1553 */ 2889, 2388, 2592, 2373, 2373, 2890, 2592, 2592, 2387, 2592, 2887, 2505, 2892, 2592, 2373, 2610, 2388, 2592,\n  /* 1571 */ 2592, 2376, 2373, 2592, 2887, 2891, 2592, 2374, 2592, 2592, 2608, 2159, 2614, 2620, 2592, 2592, 2394, 2594,\n  /* 1589 */ 2887, 2399, 2592, 2887, 2397, 2508, 2374, 2507, 2592, 2375, 2592, 2592, 2592, 2595, 2508, 2506, 2592, 2506,\n  /* 1607 */ 2505, 2505, 2592, 2507, 2637, 2505, 2592, 2592, 2401, 2661, 2592, 2643, 2592, 2592, 2417, 2592, 2655, 2592,\n  /* 1625 */ 2592, 2592, 2510, 2414, 2656, 2592, 2592, 2592, 2516, 2592, 2593, 2660, 2665, 2880, 2592, 2592, 2592, 2522,\n  /* 1643 */ 2767, 2666, 2881, 2592, 2592, 2420, 2571, 2696, 2592, 2592, 2592, 2580, 2572, 2686, 2632, 2698, 2592, 2383,\n  /* 1661 */ 2514, 2592, 2163, 2932, 2465, 2685, 2631, 2697, 2592, 2388, 2592, 2592, 2212, 2604, 2671, 2632, 2678, 2592,\n  /* 1679 */ 2401, 2405, 2409, 2592, 2592, 2592, 2679, 2592, 2592, 2592, 2592, 2108, 2677, 2591, 2592, 2592, 2592, 2419,\n  /* 1697 */ 2592, 2683, 2187, 2191, 2469, 2671, 2189, 2467, 2592, 2401, 2629, 2633, 2702, 2468, 2592, 2592, 2421, 2536,\n  /* 1715 */ 2703, 2469, 2592, 2592, 2422, 2573, 2593, 2672, 2467, 2592, 2402, 2406, 2592, 2402, 2979, 2592, 2592, 2626,\n  /* 1733 */ 2673, 2467, 2592, 2446, 2259, 2947, 2592, 2377, 2709, 2592, 2592, 2522, 2862, 2713, 2468, 2592, 2592, 2581,\n  /* 1751 */ 2572, 2562, 2374, 2374, 2592, 2376, 2721, 2724, 2592, 2592, 2624, 2373, 2731, 2592, 2592, 2592, 2626, 2732,\n  /* 1769 */ 2592, 2592, 2592, 2755, 2656, 2726, 2736, 2741, 2592, 2486, 2593, 2381, 2592, 2727, 2737, 2742, 2715, 2747,\n  /* 1787 */ 2753, 2592, 2498, 2469, 2873, 2743, 2592, 2592, 2592, 2791, 2759, 2763, 2592, 2592, 2627, 2704, 2592, 2592,\n  /* 1805 */ 2522, 2789, 2593, 2761, 2753, 2592, 2498, 2863, 2592, 2592, 2767, 2592, 2592, 2592, 2792, 2789, 2592, 2592,\n  /* 1823 */ 2592, 2803, 2126, 2592, 2592, 2592, 2811, 2122, 2592, 2592, 2592, 2834, 2777, 2592, 2592, 2592, 2848, 2936,\n  /* 1841 */ 2591, 2489, 2797, 2592, 2592, 2670, 2631, 2490, 2798, 2592, 2592, 2592, 2963, 2807, 2592, 2592, 2592, 2965,\n  /* 1859 */ 2838, 2592, 2592, 2592, 2975, 2330, 2818, 2829, 2592, 2498, 2939, 2592, 2498, 2592, 2791, 2331, 2819, 2830,\n  /* 1877 */ 2592, 2592, 2592, 2982, 2834, 2817, 2828, 2106, 2592, 2592, 2592, 2405, 2405, 2817, 2828, 2592, 2592, 2415,\n  /* 1895 */ 2849, 2842, 2592, 2522, 2773, 2592, 2522, 2868, 2592, 2580, 2600, 2586, 2137, 2850, 2843, 2592, 2592, 2855,\n  /* 1913 */ 2937, 2844, 2592, 2592, 2592, 2987, 2936, 2591, 2592, 2592, 2684, 2630, 2592, 2856, 2938, 2592, 2592, 2860,\n  /* 1931 */ 2939, 2592, 2592, 2872, 2592, 2861, 2591, 2592, 2592, 2887, 2616, 2592, 2867, 2592, 2592, 2708, 2592, 2498,\n  /* 1949 */ 2469, 2498, 2497, 2785, 2773, 2499, 2783, 2770, 2877, 2877, 2877, 2772, 2592, 2592, 2345, 2885, 2592, 2592,\n  /* 1967 */ 2592, 2715, 2762, 2515, 2896, 2592, 2592, 2715, 2917, 2516, 2897, 2592, 2592, 2592, 2901, 2906, 2911, 2592,\n  /* 1985 */ 2592, 2956, 2960, 2715, 2902, 2907, 2912, 2593, 2916, 2920, 2820, 2922, 2822, 2592, 2592, 2715, 2927, 2921,\n  /* 2003 */ 2821, 2106, 2592, 2592, 2974, 2408, 2321, 2821, 2106, 2592, 2592, 2983, 2592, 2593, 2404, 2408, 2592, 2592,\n  /* 2021 */ 2717, 2749, 2716, 2928, 2322, 2822, 2593, 2926, 2919, 2820, 2934, 2823, 2592, 2592, 2592, 2651, 2824, 2592,\n  /* 2039 */ 2592, 2592, 2130, 2952, 2592, 2592, 2592, 2592, 2964, 2592, 2592, 2716, 2748, 2592, 2969, 2592, 2592, 2716,\n  /* 2057 */ 2918, 2368, 2970, 2592, 2592, 2592, 2403, 2407, 2592, 2592, 2787, 2211, 2404, 2409, 2592, 2592, 2802, 2837,\n  /* 2075 */ 2987, 2592, 2592, 2592, 2809, 2427, 2592, 2793, 2592, 2592, 2809, 2447, 1073741824, 0x80000000, 539754496,\n  /* 2090 */ 542375936, 402653184, 554434560, 571736064, 545521856, 268451840, 335544320, 268693630, 512, 2048, 256,\n  /* 2101 */ 1024, 0, 1024, 0, 1073741824, 0x80000000, 0, 0, 0, 8388608, 0, 0, 1073741824, 1073741824, 0, 0x80000000,\n  /* 2117 */ 537133056, 4194304, 1048576, 268435456, -1073741824, 0, 0, 0, 1048576, 0, 0, 0, 1572864, 0, 0, 0, 4194304,\n  /* 2134 */ 0, 134217728, 16777216, 0, 0, 32, 64, 98304, 0, 33554432, 8388608, 192, 67108864, 67108864, 67108864,\n  /* 2149 */ 67108864, 16, 32, 4, 0, 8192, 196608, 196608, 229376, 80, 4096, 524288, 8388608, 0, 0, 32, 128, 256, 24576,\n  /* 2168 */ 24600, 24576, 24576, 2, 24576, 24576, 24576, 24584, 24592, 24576, 24578, 24576, 24578, 24576, 24576, 16,\n  /* 2184 */ 512, 2048, 2048, 256, 4096, 32768, 1048576, 4194304, 67108864, 134217728, 268435456, 262144, 134217728, 0,\n  /* 2198 */ 128, 128, 64, 16384, 16384, 16384, 67108864, 32, 32, 4, 4, 4096, 262144, 134217728, 0, 0, 0, 2, 0, 8192,\n  /* 2218 */ 131072, 131072, 4096, 4096, 4096, 4096, 24576, 24576, 24576, 8, 8, 24576, 24576, 16384, 16384, 16384,\n  /* 2234 */ 24576, 24584, 24576, 24576, 24576, 16384, 24576, 536870912, 262144, 0, 0, 32, 2048, 8192, 4, 4096, 4096,\n  /* 2251 */ 4096, 786432, 8388608, 16777216, 0, 128, 16384, 16384, 16384, 32768, 65536, 2097152, 32, 32, 32, 32, 4, 4,\n  /* 2269 */ 4, 4, 4, 4096, 67108864, 67108864, 67108864, 24576, 24576, 24576, 24576, 0, 16384, 16384, 16384, 16384,\n  /* 2285 */ 67108864, 67108864, 8, 67108864, 24576, 8, 8, 8, 24576, 24576, 24576, 24578, 24576, 24576, 24576, 2, 2, 2,\n  /* 2303 */ 16384, 67108864, 67108864, 67108864, 32, 67108864, 8, 8, 24576, 2048, 0x80000000, 536870912, 262144,\n  /* 2316 */ 262144, 262144, 67108864, 8, 24576, 16384, 32768, 1048576, 4194304, 25165824, 67108864, 24576, 32770, 2, 4,\n  /* 2331 */ 112, 512, 98304, 524288, 50, 402653186, 1049090, 1049091, 10, 66, 100925514, 10, 66, 12582914, 0, 0,\n  /* 2347 */ -1678194207, -1678194207, -1041543218, 0, 32768, 0, 0, 32, 65536, 268435456, 1, 1, 513, 1048577, 0,\n  /* 2362 */ 12582912, 0, 0, 0, 4, 1792, 0, 0, 0, 7, 29360128, 0, 0, 0, 8, 0, 0, 0, 12, 1, 1, 0, 0, -604102721,\n  /* 2386 */ -604102721, 4194304, 8388608, 0, 0, 0, 31, 925600, 997981306, 997981306, 997981306, 0, 0, 2048, 8388608, 0,\n  /* 2402 */ 0, 1, 2, 4, 32, 64, 512, 8192, 0, 0, 0, 245760, 997720064, 0, 0, 0, 32, 0, 0, 0, 3, 12, 16, 32, 8, 112,\n  /* 2428 */ 3072, 12288, 16384, 32768, 65536, 131072, 7864320, 16777216, 973078528, 0, 0, 65536, 131072, 3670016,\n  /* 2442 */ 4194304, 16777216, 33554432, 2, 8, 48, 2048, 8192, 16384, 32768, 65536, 131072, 524288, 131072, 524288,\n  /* 2457 */ 3145728, 4194304, 16777216, 33554432, 65536, 131072, 2097152, 4194304, 16777216, 33554432, 134217728,\n  /* 2468 */ 268435456, 536870912, 0, 0, 0, 1024, 0, 8, 48, 2048, 8192, 65536, 33554432, 268435456, 536870912, 65536,\n  /* 2484 */ 268435456, 536870912, 0, 0, 32768, 0, 0, 126, 623104, 65011712, 0, 32, 65536, 536870912, 0, 0, 65536,\n  /* 2501 */ 524288, 0, 32, 65536, 0, 0, 0, 2048, 0, 0, 0, 15482, 245760, -604102721, 0, 0, 0, 18913, 33062912, 925600,\n  /* 2521 */ -605028352, 0, 0, 0, 65536, 31, 8096, 131072, 786432, 3145728, 3145728, 12582912, 50331648, 134217728,\n  /* 2535 */ 268435456, 160, 256, 512, 7168, 131072, 786432, 131072, 786432, 1048576, 2097152, 12582912, 16777216,\n  /* 2548 */ 268435456, 1073741824, 0x80000000, 12582912, 16777216, 33554432, 268435456, 1073741824, 0x80000000, 3, 12,\n  /* 2559 */ 16, 160, 256, 7168, 786432, 1048576, 12582912, 16777216, 268435456, 1073741824, 0, 8, 16, 32, 128, 256,\n  /* 2575 */ 512, 7168, 786432, 1048576, 2097152, 0, 1, 2, 8, 16, 7168, 786432, 1048576, 8388608, 16777216, 16777216,\n  /* 2591 */ 1073741824, 0, 0, 0, 0, 1, 0, 0, 8, 32, 128, 256, 7168, 8, 32, 0, 3072, 0, 8, 32, 3072, 4096, 524288, 8,\n  /* 2615 */ 32, 0, 0, 3072, 4096, 0, 2048, 524288, 8388608, 8, 2048, 0, 0, 1, 12, 256, 4096, 32768, 262144, 1048576,\n  /* 2635 */ 4194304, 67108864, 0, 2048, 0, 2048, 2048, 1073741824, -58805985, -58805985, -58805985, 0, 0, 262144, 0, 0,\n  /* 2651 */ 32, 4194304, 16777216, 134217728, 4382, 172032, -58982400, 0, 0, 2, 28, 256, 4096, 8192, 8192, 32768,\n  /* 2667 */ 131072, 262144, 524288, 1, 2, 12, 256, 4096, 0, 0, 4194304, 67108864, 134217728, 805306368, 1073741824, 0,\n  /* 2683 */ 0, 1, 2, 12, 16, 256, 4096, 1048576, 67108864, 134217728, 268435456, 0, 512, 1048576, 4194304, 201326592,\n  /* 2699 */ 1879048192, 0, 0, 12, 256, 4096, 134217728, 268435456, 536870912, 12, 256, 268435456, 536870912, 0, 12,\n  /* 2714 */ 256, 0, 0, 1, 32, 64, 512, 0, 0, 205236961, 205236961, 0, 0, 0, 1, 96, 640, 1, 10976, 229376, 204996608, 0,\n  /* 2736 */ 640, 2048, 8192, 229376, 1572864, 1572864, 2097152, 201326592, 0, 0, 0, 64, 512, 2048, 229376, 1572864,\n  /* 2752 */ 201326592, 1572864, 201326592, 0, 0, 1, 4382, 0, 1, 32, 2048, 65536, 131072, 1572864, 201326592, 131072,\n  /* 2768 */ 1572864, 134217728, 0, 0, 524288, 524288, 0, 0, 0, -68582786, -68582786, -68582786, 0, 0, 2097152, 524288,\n  /* 2784 */ 0, 524288, 0, 0, 65536, 131072, 1572864, 0, 0, 2, 4, 0, 0, 65011712, -134217728, 0, 0, 0, 0, 2, 4, 120,\n  /* 2806 */ 512, -268435456, 0, 0, 0, 2, 8, 48, 64, 2048, 8192, 98304, 524288, 2097152, 4194304, 25165824, 33554432,\n  /* 2823 */ 134217728, 268435456, 0x80000000, 0, 0, 25165824, 33554432, 134217728, 1879048192, 0x80000000, 0, 0, 4,\n  /* 2836 */ 112, 512, 622592, 65011712, 134217728, -268435456, 16777216, 33554432, 134217728, 1610612736, 0, 0, 0, 64,\n  /* 2850 */ 98304, 524288, 4194304, 16777216, 33554432, 0, 98304, 524288, 16777216, 33554432, 0, 65536, 524288,\n  /* 2863 */ 33554432, 536870912, 1073741824, 0, 65536, 524288, 536870912, 1073741824, 0, 0, 65536, 524288, 536870912,\n  /* 2876 */ 0, 524288, 0, 524288, 524288, 1048576, 2086666240, 0x80000000, 0, -1678194207, 0, 0, 0, 8, 32, 2048,\n  /* 2892 */ 524288, 8388608, 0, 0, 33062912, 436207616, 0x80000000, 0, 0, 32, 64, 2432, 16384, 32768, 32768, 524288,\n  /* 2908 */ 3145728, 4194304, 25165824, 25165824, 167772160, 268435456, 0x80000000, 0, 32, 64, 384, 2048, 16384, 32768,\n  /* 2922 */ 1048576, 2097152, 4194304, 25165824, 32, 64, 128, 256, 2048, 16384, 2048, 16384, 1048576, 4194304,\n  /* 2936 */ 16777216, 33554432, 134217728, 536870912, 1073741824, 0, 0, 2048, 16384, 4194304, 16777216, 33554432,\n  /* 2948 */ 134217728, 805306368, 0, 0, 16777216, 134217728, 268435456, 0x80000000, 0, 622592, 622592, 622592, 8807,\n  /* 2961 */ 8807, 434791, 0, 0, 16777216, 0, 0, 0, 7, 608, 8192, 0, 0, 0, 3, 4, 96, 512, 32, 64, 8192, 0, 0, 16777216,\n  /* 2985 */ 134217728, 0, 0, 2, 4, 8192, 16384, 65536, 2097152, 33554432, 268435456\n];\n\nXQueryTokenizer.TOKEN =\n[\n  \"(0)\",\n  \"ModuleDecl\",\n  \"Annotation\",\n  \"OptionDecl\",\n  \"Operator\",\n  \"Variable\",\n  \"Tag\",\n  \"EndTag\",\n  \"PragmaContents\",\n  \"DirCommentContents\",\n  \"DirPIContents\",\n  \"CDataSectionContents\",\n  \"AttrTest\",\n  \"Wildcard\",\n  \"EQName\",\n  \"IntegerLiteral\",\n  \"DecimalLiteral\",\n  \"DoubleLiteral\",\n  \"PredefinedEntityRef\",\n  \"'\\\"\\\"'\",\n  \"EscapeApos\",\n  \"QuotChar\",\n  \"AposChar\",\n  \"ElementContentChar\",\n  \"QuotAttrContentChar\",\n  \"AposAttrContentChar\",\n  \"NCName\",\n  \"QName\",\n  \"S\",\n  \"CharRef\",\n  \"CommentContents\",\n  \"DocTag\",\n  \"DocCommentContents\",\n  \"EOF\",\n  \"'!'\",\n  \"'\\\"'\",\n  \"'#'\",\n  \"'#)'\",\n  \"''''\",\n  \"'('\",\n  \"'(#'\",\n  \"'(:'\",\n  \"'(:~'\",\n  \"')'\",\n  \"'*'\",\n  \"'*'\",\n  \"','\",\n  \"'-->'\",\n  \"'.'\",\n  \"'/'\",\n  \"'/>'\",\n  \"':'\",\n  \"':)'\",\n  \"';'\",\n  \"'<!--'\",\n  \"'<![CDATA['\",\n  \"'<?'\",\n  \"'='\",\n  \"'>'\",\n  \"'?'\",\n  \"'?>'\",\n  \"'NaN'\",\n  \"'['\",\n  \"']'\",\n  \"']]>'\",\n  \"'after'\",\n  \"'all'\",\n  \"'allowing'\",\n  \"'ancestor'\",\n  \"'ancestor-or-self'\",\n  \"'and'\",\n  \"'any'\",\n  \"'append'\",\n  \"'array'\",\n  \"'as'\",\n  \"'ascending'\",\n  \"'at'\",\n  \"'attribute'\",\n  \"'base-uri'\",\n  \"'before'\",\n  \"'boundary-space'\",\n  \"'break'\",\n  \"'by'\",\n  \"'case'\",\n  \"'cast'\",\n  \"'castable'\",\n  \"'catch'\",\n  \"'check'\",\n  \"'child'\",\n  \"'collation'\",\n  \"'collection'\",\n  \"'comment'\",\n  \"'constraint'\",\n  \"'construction'\",\n  \"'contains'\",\n  \"'content'\",\n  \"'context'\",\n  \"'continue'\",\n  \"'copy'\",\n  \"'copy-namespaces'\",\n  \"'count'\",\n  \"'decimal-format'\",\n  \"'decimal-separator'\",\n  \"'declare'\",\n  \"'default'\",\n  \"'delete'\",\n  \"'descendant'\",\n  \"'descendant-or-self'\",\n  \"'descending'\",\n  \"'diacritics'\",\n  \"'different'\",\n  \"'digit'\",\n  \"'distance'\",\n  \"'div'\",\n  \"'document'\",\n  \"'document-node'\",\n  \"'element'\",\n  \"'else'\",\n  \"'empty'\",\n  \"'empty-sequence'\",\n  \"'encoding'\",\n  \"'end'\",\n  \"'entire'\",\n  \"'eq'\",\n  \"'every'\",\n  \"'exactly'\",\n  \"'except'\",\n  \"'exit'\",\n  \"'external'\",\n  \"'first'\",\n  \"'following'\",\n  \"'following-sibling'\",\n  \"'for'\",\n  \"'foreach'\",\n  \"'foreign'\",\n  \"'from'\",\n  \"'ft-option'\",\n  \"'ftand'\",\n  \"'ftnot'\",\n  \"'ftor'\",\n  \"'function'\",\n  \"'ge'\",\n  \"'greatest'\",\n  \"'group'\",\n  \"'grouping-separator'\",\n  \"'gt'\",\n  \"'idiv'\",\n  \"'if'\",\n  \"'import'\",\n  \"'in'\",\n  \"'index'\",\n  \"'infinity'\",\n  \"'inherit'\",\n  \"'insensitive'\",\n  \"'insert'\",\n  \"'instance'\",\n  \"'integrity'\",\n  \"'intersect'\",\n  \"'into'\",\n  \"'is'\",\n  \"'item'\",\n  \"'json'\",\n  \"'json-item'\",\n  \"'key'\",\n  \"'language'\",\n  \"'last'\",\n  \"'lax'\",\n  \"'le'\",\n  \"'least'\",\n  \"'let'\",\n  \"'levels'\",\n  \"'loop'\",\n  \"'lowercase'\",\n  \"'lt'\",\n  \"'minus-sign'\",\n  \"'mod'\",\n  \"'modify'\",\n  \"'module'\",\n  \"'most'\",\n  \"'namespace'\",\n  \"'namespace-node'\",\n  \"'ne'\",\n  \"'next'\",\n  \"'no'\",\n  \"'no-inherit'\",\n  \"'no-preserve'\",\n  \"'node'\",\n  \"'nodes'\",\n  \"'not'\",\n  \"'object'\",\n  \"'occurs'\",\n  \"'of'\",\n  \"'on'\",\n  \"'only'\",\n  \"'option'\",\n  \"'or'\",\n  \"'order'\",\n  \"'ordered'\",\n  \"'ordering'\",\n  \"'paragraph'\",\n  \"'paragraphs'\",\n  \"'parent'\",\n  \"'pattern-separator'\",\n  \"'per-mille'\",\n  \"'percent'\",\n  \"'phrase'\",\n  \"'position'\",\n  \"'preceding'\",\n  \"'preceding-sibling'\",\n  \"'preserve'\",\n  \"'previous'\",\n  \"'processing-instruction'\",\n  \"'relationship'\",\n  \"'rename'\",\n  \"'replace'\",\n  \"'return'\",\n  \"'returning'\",\n  \"'revalidation'\",\n  \"'same'\",\n  \"'satisfies'\",\n  \"'schema'\",\n  \"'schema-attribute'\",\n  \"'schema-element'\",\n  \"'score'\",\n  \"'self'\",\n  \"'sensitive'\",\n  \"'sentence'\",\n  \"'sentences'\",\n  \"'skip'\",\n  \"'sliding'\",\n  \"'some'\",\n  \"'stable'\",\n  \"'start'\",\n  \"'stemming'\",\n  \"'stop'\",\n  \"'strict'\",\n  \"'strip'\",\n  \"'structured-item'\",\n  \"'switch'\",\n  \"'text'\",\n  \"'then'\",\n  \"'thesaurus'\",\n  \"'times'\",\n  \"'to'\",\n  \"'treat'\",\n  \"'try'\",\n  \"'tumbling'\",\n  \"'type'\",\n  \"'typeswitch'\",\n  \"'union'\",\n  \"'unique'\",\n  \"'unordered'\",\n  \"'updating'\",\n  \"'uppercase'\",\n  \"'using'\",\n  \"'validate'\",\n  \"'value'\",\n  \"'variable'\",\n  \"'version'\",\n  \"'weight'\",\n  \"'when'\",\n  \"'where'\",\n  \"'while'\",\n  \"'wildcards'\",\n  \"'window'\",\n  \"'with'\",\n  \"'without'\",\n  \"'word'\",\n  \"'words'\",\n  \"'xquery'\",\n  \"'zero-digit'\",\n  \"'{'\",\n  \"'{{'\",\n  \"'|'\",\n  \"'}'\",\n  \"'}}'\"\n];\n\n// End\n\n},{}],\"/node_modules/xqlint/lib/lexers/jsoniq_lexer.js\":[function(_dereq_,module,exports){\n'use strict';\n\nvar JSONiqTokenizer = _dereq_('./JSONiqTokenizer').JSONiqTokenizer;\nvar Lexer = _dereq_('./lexer').Lexer;\n\nvar keys = 'NaN|after|allowing|ancestor|ancestor-or-self|and|append|array|as|ascending|at|attribute|base-uri|before|boundary-space|break|by|case|cast|castable|catch|child|collation|comment|constraint|construction|contains|context|continue|copy|copy-namespaces|count|decimal-format|decimal-separator|declare|default|delete|descendant|descendant-or-self|descending|digit|div|document|document-node|element|else|empty|empty-sequence|encoding|end|eq|every|except|exit|external|false|first|following|following-sibling|for|from|ft-option|function|ge|greatest|group|grouping-separator|gt|idiv|if|import|in|index|infinity|insert|instance|integrity|intersect|into|is|item|json|json-item|jsoniq|last|lax|le|least|let|loop|lt|minus-sign|mod|modify|module|namespace|namespace-node|ne|next|node|nodes|not|null|object|of|only|option|or|order|ordered|ordering|paragraphs|parent|pattern-separator|per-mille|percent|preceding|preceding-sibling|previous|processing-instruction|rename|replace|return|returning|revalidation|satisfies|schema|schema-attribute|schema-element|score|select|self|sentences|sliding|some|stable|start|strict|switch|text|then|times|to|treat|true|try|tumbling|type|typeswitch|union|unordered|updating|validate|value|variable|version|when|where|while|window|with|words|xquery|zero-digit'.split('|');\nvar keywords = keys.map(function(val) { return { name: '\\'' + val + '\\'', token: 'keyword' }; });\nvar ncnames = keys.map(function(val) { return { name: '\\'' + val + '\\'', token: 'text', next: function(stack){ stack.pop(); } }; });\n\nvar cdata = 'constant.language';\nvar number = 'constant';\nvar xmlcomment = 'comment';\nvar pi = 'xml-pe';\nvar pragma = 'constant.buildin';\nvar n = function(name){\n    return '\\'' + name + '\\'';\n};\nvar Rules = {\n    start: [\n        { name: n('(#'), token: pragma, next: function(stack){ stack.push('Pragma'); } },\n        { name: n('(:'), token: 'comment', next: function(stack){ stack.push('Comment'); } },\n        { name: n('(:~'), token: 'comment.doc', next: function(stack){ stack.push('CommentDoc'); } },\n        { name: n('<!--'), token: xmlcomment, next: function(stack){ stack.push('XMLComment'); } },\n        { name: n('<?'), token: pi, next: function(stack) { stack.push('PI'); } },\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.push('AposString'); } },\n        { name: n('\"'), token: 'string', next: function(stack){ stack.push('QuotString'); } },\n        { name: 'Annotation', token: 'support.function' },\n        { name: 'ModuleDecl', token: 'keyword', next: function(stack){ stack.push('Prefix'); } },\n        { name: 'OptionDecl', token: 'keyword', next: function(stack){ stack.push('_EQName'); } },\n        { name: 'AttrTest', token: 'support.type' },\n        { name: 'Variable', token: 'variable' },\n        { name: n('<![CDATA['), token: cdata, next: function(stack){ stack.push('CData'); } },\n        { name: 'IntegerLiteral', token: number },\n        { name: 'DecimalLiteral', token: number },\n        { name: 'DoubleLiteral', token: number },\n        { name: 'Operator', token: 'keyword.operator' },\n        { name: 'EQName', token: function(val) { return keys.indexOf(val) !== -1 ? 'keyword' : 'support.function'; } },\n        { name: n('('), token: 'lparen' },\n        { name: n(')'), token: 'rparen' },\n        { name: 'Tag', token: 'meta.tag', next: function(stack){ stack.push('StartTag'); } },\n        { name: n('}'), token: 'text', next: function(stack){ if(stack.length > 1) { stack.pop(); } } },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } } //, next: function(stack){ if(stack.length > 1) { stack.pop(); } } }\n    ].concat(keywords),\n    _EQName: [\n        { name: 'EQName', token: 'text', next: function(stack) { stack.pop(); } }\n    ].concat(ncnames),\n    Prefix: [\n        { name: 'NCName', token: 'text', next: function(stack) { stack.pop(); } }\n    ].concat(ncnames),\n    StartTag: [\n        { name: n('>'), token: 'meta.tag', next: function(stack){ stack.push('TagContent'); } },\n        { name: 'QName', token: 'entity.other.attribute-name' },\n        { name: n('='), token: 'text' },\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.push('AposAttr'); } },\n        { name: n('\"'), token: 'string', next: function(stack){ stack.push('QuotAttr'); } },\n        { name: n('/>'), token: 'meta.tag.r', next: function(stack){ stack.pop(); } }\n    ],\n    TagContent: [\n        { name: 'ElementContentChar', token: 'text' },\n        { name: n('<![CDATA['), token: cdata, next: function(stack){ stack.push('CData'); } },\n        { name: n('<!--'), token: xmlcomment, next: function(stack){ stack.push('XMLComment'); } },\n        { name: 'Tag', token: 'meta.tag', next: function(stack){ stack.push('StartTag'); } },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: n('{{'), token: 'text' },\n        { name: n('}}'), token: 'text' },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } },\n        { name: 'EndTag', token: 'meta.tag', next: function(stack){ stack.pop(); stack.pop(); } }\n    ],\n    AposAttr: [\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'EscapeApos', token: 'constant.language.escape' },\n        { name: 'AposAttrContentChar', token: 'string' },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: n('{{'), token: 'string' },\n        { name: n('}}'), token: 'string' },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } }\n    ],\n    QuotAttr: [\n        { name: n('\\\"'), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'EscapeQuot', token: 'constant.language.escape' },\n        { name: 'QuotAttrContentChar', token: 'string' },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: n('{{'), token: 'string' },\n        { name: n('}}'), token: 'string' },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } }\n    ],\n    Pragma: [\n        { name: 'PragmaContents', token: pragma },\n        { name: n('#'), token: pragma },\n        { name: n('#)'), token: pragma, next: function(stack){ stack.pop(); } }\n    ],\n    Comment: [\n        { name: 'CommentContents', token: 'comment' },\n        { name: n('(:'), token: 'comment', next: function(stack){ stack.push('Comment'); } },\n        { name: n(':)'), token: 'comment', next: function(stack){ stack.pop(); } }\n    ],\n    CommentDoc: [\n        { name: 'DocCommentContents', token: 'comment.doc' },\n        { name: 'DocTag', token: 'comment.doc.tag' },\n        { name: n('(:'), token: 'comment.doc', next: function(stack){ stack.push('CommentDoc'); } },\n        { name: n(':)'), token: 'comment.doc', next: function(stack){ stack.pop(); } }\n    ],\n    XMLComment: [\n        { name: 'DirCommentContents', token: xmlcomment },\n        { name: n('-->'), token: xmlcomment, next: function(stack){ stack.pop(); } }\n    ],\n    CData: [\n        { name: 'CDataSectionContents', token: cdata },\n        { name: n(']]>'), token: cdata, next: function(stack){ stack.pop(); } }\n    ],\n    PI: [\n        { name: 'DirPIContents', token: pi },\n        { name: n('?'), token: pi },\n        { name: n('?>'), token: pi, next: function(stack){ stack.pop(); } }\n    ],\n    AposString: [\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: 'EscapeApos', token: 'constant.language.escape' },\n        { name: 'AposChar', token: 'string' }\n    ],\n    QuotString: [\n        { name: n('\"'), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'JSONPredefinedCharRef', token: 'constant.language.escape' },\n        { name: 'JSONCharRef', token: 'constant.language.escape' },\n        { name: 'JSONChar', token: 'string' }\n    ]\n};\n    \nexports.JSONiqLexer = function(){ return new Lexer(JSONiqTokenizer, Rules); };\n},{\"./JSONiqTokenizer\":\"/node_modules/xqlint/lib/lexers/JSONiqTokenizer.js\",\"./lexer\":\"/node_modules/xqlint/lib/lexers/lexer.js\"}],\"/node_modules/xqlint/lib/lexers/lexer.js\":[function(_dereq_,module,exports){\n'use strict';\n\nvar TokenHandler = function(code) {\n    var input = code;\n    this.tokens = [];\n \n    this.reset = function() {\n        input = input;\n        this.tokens = [];\n    };\n    \n    this.startNonterminal = function() {};\n    this.endNonterminal = function() {};\n\n    this.terminal = function(name, begin, end) {\n        this.tokens.push({\n            name: name,\n            value: input.substring(begin, end)\n        });\n    };\n\n    this.whitespace = function(begin, end) {\n        this.tokens.push({\n            name: 'WS',\n            value: input.substring(begin, end)\n        });\n    };\n};\n\nexports.Lexer = function(Tokenizer, Rules) {\n\n    this.tokens = [];\n  \n    this.getLineTokens = function(line, state) {\n        state = (state === 'start' || !state) ? '[\"start\"]' : state;\n        var stack = JSON.parse(state);\n        var h = new TokenHandler(line);\n        var tokenizer = new Tokenizer(line, h);\n        var tokens = [];\n    \n        while(true) {\n            var currentState = stack[stack.length - 1];\n            try {\n                h.tokens = [];\n                tokenizer['parse_' + currentState]();\n                var info = null;\n        \n                if(h.tokens.length > 1 && h.tokens[0].name === 'WS') {\n                    tokens.push({\n                        type: 'text',\n                        value: h.tokens[0].value\n                    });\n                    h.tokens.splice(0, 1);\n                }\n        \n                var token = h.tokens[0];\n                var rules  = Rules[currentState];\n                for(var k = 0; k < rules.length; k++) {\n                    var rule = Rules[currentState][k];\n                    if((typeof(rule.name) === 'function' && rule.name(token)) || rule.name === token.name) {\n                        info = rule;\n                        break;\n                    }\n                }\n        \n                if(token.name === 'EOF') { break; }\n                if(token.value === '') { throw 'Encountered empty string lexical rule.'; }\n        \n                tokens.push({\n                    type: info === null ? 'text' : (typeof(info.token) === 'function' ? info.token(token.value) : info.token),\n                    value: token.value\n                });\n        \n                if(info && info.next) {\n                    info.next(stack);\n                }\n      \n            } catch(e) {\n                if(e instanceof tokenizer.ParseException) {\n                    var index = 0;\n                    for(var i=0; i < tokens.length; i++) {\n                        index += tokens[i].value.length;\n                    }\n                    tokens.push({ type: 'text', value: line.substring(index) });\n                    return {\n                        tokens: tokens,\n                        state: JSON.stringify(['start'])\n                    };\n                } else {\n                    throw e;\n                }\n            }\n        }\n\n        return {\n            tokens: tokens,\n            state: JSON.stringify(stack)\n        };\n    };\n};\n},{}],\"/node_modules/xqlint/lib/lexers/xquery_lexer.js\":[function(_dereq_,module,exports){\n'use strict';\n\nvar XQueryTokenizer = _dereq_('./XQueryTokenizer').XQueryTokenizer;\nvar Lexer = _dereq_('./lexer').Lexer;\n\nvar keys = 'after|ancestor|ancestor-or-self|and|as|ascending|attribute|before|case|cast|castable|child|collation|comment|copy|count|declare|default|delete|descendant|descendant-or-self|descending|div|document|document-node|element|else|empty|empty-sequence|end|eq|every|except|first|following|following-sibling|for|function|ge|group|gt|idiv|if|import|insert|instance|intersect|into|is|item|last|le|let|lt|mod|modify|module|namespace|namespace-node|ne|node|only|or|order|ordered|parent|preceding|preceding-sibling|processing-instruction|rename|replace|return|satisfies|schema-attribute|schema-element|self|some|stable|start|switch|text|to|treat|try|typeswitch|union|unordered|validate|where|with|xquery|contains|paragraphs|sentences|times|words|by|collectionreturn|variable|version|option|when|encoding|toswitch|catch|tumbling|sliding|window|at|using|stemming|collection|schema|while|on|nodes|index|external|then|in|updating|value|of|containsbreak|loop|continue|exit|returning|append|json|position|strict'.split('|');\n\nvar keywords = keys.map(function(val) { return { name: '\\'' + val + '\\'', token: 'keyword' }; });\nvar ncnames = keys.map(function(val) { return { name: '\\'' + val + '\\'', token: 'text', next: function(stack){ stack.pop(); } }; });\n\nvar cdata = 'constant.language';\nvar number = 'constant';\nvar xmlcomment = 'comment';\nvar pi = 'xml-pe';\nvar pragma = 'constant.buildin';\nvar n = function(name){\n    return '\\'' + name + '\\'';\n};\nvar Rules = {\n    start: [\n        { name: n('(#'), token: pragma, next: function(stack){ stack.push('Pragma'); } },\n        { name: n('(:'), token: 'comment', next: function(stack){ stack.push('Comment'); } },\n        { name: n('(:~'), token: 'comment.doc', next: function(stack){ stack.push('CommentDoc'); } },\n        { name: n('<!--'), token: xmlcomment, next: function(stack){ stack.push('XMLComment'); } },\n        { name: n('<?'), token: pi, next: function(stack) { stack.push('PI'); } },\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.push('AposString'); } },\n        { name: n('\"'), token: 'string', next: function(stack){ stack.push('QuotString'); } },\n        { name: 'Annotation', token: 'support.function' },\n        { name: 'ModuleDecl', token: 'keyword', next: function(stack){ stack.push('Prefix'); } },\n        { name: 'OptionDecl', token: 'keyword', next: function(stack){ stack.push('_EQName'); } },\n        { name: 'AttrTest', token: 'support.type' },\n        { name: 'Variable', token: 'variable' },\n        { name: n('<![CDATA['), token: cdata, next: function(stack){ stack.push('CData'); } },\n        { name: 'IntegerLiteral', token: number },\n        { name: 'DecimalLiteral', token: number },\n        { name: 'DoubleLiteral', token: number },\n        { name: 'Operator', token: 'keyword.operator' },\n        { name: 'EQName', token: function(val) { return keys.indexOf(val) !== -1 ? 'keyword' : 'support.function'; } },\n        { name: n('('), token: 'lparen' },\n        { name: n(')'), token: 'rparen' },\n        { name: 'Tag', token: 'meta.tag', next: function(stack){ stack.push('StartTag'); } },\n        { name: n('}'), token: 'text', next: function(stack){ if(stack.length > 1) { stack.pop(); } } },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } } //, next: function(stack){ if(stack.length > 1) { stack.pop(); } } }\n    ].concat(keywords),\n    _EQName: [\n        { name: 'EQName', token: 'text', next: function(stack) { stack.pop(); } }\n    ].concat(ncnames),\n    Prefix: [\n        { name: 'NCName', token: 'text', next: function(stack) { stack.pop(); } }\n    ].concat(ncnames),\n    StartTag: [\n        { name: n('>'), token: 'meta.tag', next: function(stack){ stack.push('TagContent'); } },\n        { name: 'QName', token: 'entity.other.attribute-name' },\n        { name: n('='), token: 'text' },\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.push('AposAttr'); } },\n        { name: n('\"'), token: 'string', next: function(stack){ stack.push('QuotAttr'); } },\n        { name: n('/>'), token: 'meta.tag.r', next: function(stack){ stack.pop(); } }\n    ],\n    TagContent: [\n        { name: 'ElementContentChar', token: 'text' },\n        { name: n('<![CDATA['), token: cdata, next: function(stack){ stack.push('CData'); } },\n        { name: n('<!--'), token: xmlcomment, next: function(stack){ stack.push('XMLComment'); } },\n        { name: 'Tag', token: 'meta.tag', next: function(stack){ stack.push('StartTag'); } },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: n('{{'), token: 'text' },\n        { name: n('}}'), token: 'text' },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } },\n        { name: 'EndTag', token: 'meta.tag', next: function(stack){ stack.pop(); stack.pop(); } }\n    ],\n    AposAttr: [\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'EscapeApos', token: 'constant.language.escape' },\n        { name: 'AposAttrContentChar', token: 'string' },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: n('{{'), token: 'string' },\n        { name: n('}}'), token: 'string' },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } }\n    ],\n    QuotAttr: [\n        { name: n('\\\"'), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'EscapeQuot', token: 'constant.language.escape' },\n        { name: 'QuotAttrContentChar', token: 'string' },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: n('{{'), token: 'string' },\n        { name: n('}}'), token: 'string' },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } }\n    ],\n    Pragma: [\n        { name: 'PragmaContents', token: pragma },\n        { name: n('#'), token: pragma },\n        { name: n('#)'), token: pragma, next: function(stack){ stack.pop(); } }\n    ],\n    Comment: [\n        { name: 'CommentContents', token: 'comment' },\n        { name: n('(:'), token: 'comment', next: function(stack){ stack.push('Comment'); } },\n        { name: n(':)'), token: 'comment', next: function(stack){ stack.pop(); } }\n    ],\n    CommentDoc: [\n        { name: 'DocCommentContents', token: 'comment.doc' },\n        { name: 'DocTag', token: 'comment.doc.tag' },\n        { name: n('(:'), token: 'comment.doc', next: function(stack){ stack.push('CommentDoc'); } },\n        { name: n(':)'), token: 'comment.doc', next: function(stack){ stack.pop(); } }\n    ],\n    XMLComment: [\n        { name: 'DirCommentContents', token: xmlcomment },\n        { name: n('-->'), token: xmlcomment, next: function(stack){ stack.pop(); } }\n    ],\n    CData: [\n        { name: 'CDataSectionContents', token: cdata },\n        { name: n(']]>'), token: cdata, next: function(stack){ stack.pop(); } }\n    ],\n    PI: [\n        { name: 'DirPIContents', token: pi },\n        { name: n('?'), token: pi },\n        { name: n('?>'), token: pi, next: function(stack){ stack.pop(); } }\n    ],\n    AposString: [\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: 'EscapeApos', token: 'constant.language.escape' },\n        { name: 'AposChar', token: 'string' }\n    ],\n    QuotString: [\n        { name: n('\"'), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: 'EscapeQuot', token: 'constant.language.escape' },\n        { name: 'QuotChar', token: 'string' }\n    ]\n};\n    \nexports.XQueryLexer = function(){ return new Lexer(XQueryTokenizer, Rules); };\n},{\"./XQueryTokenizer\":\"/node_modules/xqlint/lib/lexers/XQueryTokenizer.js\",\"./lexer\":\"/node_modules/xqlint/lib/lexers/lexer.js\"}],\"/node_modules/xqlint/lib/parsers/JSONParseTreeHandler.js\":[function(_dereq_,module,exports){\nexports.JSONParseTreeHandler = function (code) {\n\t'use strict';\n\n    //List of Nodes to be indexed\n    var toBeIndex = ['VarDecl', 'FunctionDecl'];\n    \n    //List of nodes that are not targeted by the parse tree size optimization.\n    var list = [\n        'OrExpr', 'AndExpr', 'ComparisonExpr', 'StringConcatExpr', 'RangeExpr',\n        'AdditiveExpr', 'MultiplicativeExpr',\n        'UnionExpr', 'IntersectExceptExpr', 'InstanceofExpr', 'TreatExpr', 'CastableExpr', 'CastExpr', 'UnaryExpr', 'ValueExpr',\n        'FTContainsExpr', 'SimpleMapExpr', 'PathExpr', 'RelativePathExpr', 'PostfixExpr', 'StepExpr'\n    ];\n\n    var ast = null;\n    var ptr = null;\n    var remains = code;\n    var cursor = 0;\n    var lineCursor = 0;\n    var line = 0;\n    //var col = 0;\n\n    function createNode(name) {\n        return {\n            name: name,\n            children: [],\n            getParent: null,\n            pos: {\n                sl: 0,\n                sc: 0,\n                el: 0,\n                ec: 0\n            }\n        };\n    }\n\n    function pushNode(name) { //begin\n        var node = createNode(name);\n        if (ast === null) {\n            ast = node;\n            ast.index = [];\n            ptr = node;\n        } else {\n            node.getParent = ptr;\n            ptr.children.push(node);\n            ptr = ptr.children[ptr.children.length - 1];\n        }\n    }\n\n    function popNode() {\n\n        if (ptr.children.length > 0) {\n            var s = ptr.children[0];\n            var e = null;\n            //We want to skip empty non terminals. For instance:\n            // [108] AxisStep ::= (ReverseStep | ForwardStep) PredicateList\n            // [120] PredicateList ::= Predicate*\n            for (var i = ptr.children.length - 1; i >= 0; i--) {\n                e = ptr.children[i];\n                if (e.pos.el !== 0 || e.pos.ec !== 0) {\n                    break;\n                }\n            }\n            ptr.pos.sl = s.pos.sl;\n            ptr.pos.sc = s.pos.sc;\n            ptr.pos.el = e.pos.el;\n            ptr.pos.ec = e.pos.ec;\n        }\n\n        //Normalize EQName && FunctionName\n        if (ptr.name === 'FunctionName') {\n            ptr.name = 'EQName';\n        }\n        if (ptr.name === 'EQName' && ptr.value === undefined) {\n            ptr.value = ptr.children[0].value;\n            ptr.children.pop();\n        }\n    \n        if(toBeIndex.indexOf(ptr.name) !== -1) {\n            ast.index.push(ptr);\n        }\n    \n        if (ptr.getParent !== null) {\n            ptr = ptr.getParent;\n            //for(var i in ptr.children) {\n            //delete ptr.children[i].getParent;\n            //}\n        } else {\n            //delete ptr.getParent;\n        }\n\n        //Parse tree size optimization\n        if (ptr.children.length > 0) {\n            var lastChild = ptr.children[ptr.children.length - 1];\n            if (lastChild.children.length === 1 && list.indexOf(lastChild.name) !== -1) {\n                ptr.children[ptr.children.length - 1] = lastChild.children[0];\n            }\n        }\n    }\n\n    this.closeParseTree = function () {\n        while (ptr.getParent !== null) {\n            popNode();\n        }\n        popNode();\n    };\n\n    this.peek = function () {\n        return ptr;\n    };\n\n    this.getParseTree = function () {\n        return ast;\n    };\n\n    this.reset = function () {}; //input\n\n    this.startNonterminal = function (name, begin) {\n        pushNode(name, begin);\n    };\n\n    this.endNonterminal = function () {//name, end\n        popNode();\n    };\n\n    this.terminal = function (name, begin, end) {\n        name = (name.substring(0, 1) === '\\'' && name.substring(name.length - 1) === '\\'') ? 'TOKEN' : name;\n        pushNode(name, begin);\n        setValue(ptr, begin, end);\n        popNode();\n    };\n\n    this.whitespace = function (begin, end) {\n        var name = 'WS';\n        pushNode(name, begin);\n        setValue(ptr, begin, end);\n        popNode();\n    };\n\n    function setValue(node, begin, end) {\n\n        var e = end - cursor;\n        ptr.value = remains.substring(0, e);\n        remains = remains.substring(e);\n        cursor = end;\n\n        var sl = line;\n        var sc = lineCursor;\n        var el = sl + ptr.value.split('\\n').length - 1;\n        var lastIdx = ptr.value.lastIndexOf('\\n');\n        var ec = lastIdx === -1 ? sc + ptr.value.length : ptr.value.substring(lastIdx + 1).length;\n        //      ec = ec === 0 ? 0 : ec - 1;\n\n        line = el;\n        //lineCursor = ec === 0 ? 0 : ec;\n        lineCursor = ec;\n\n        ptr.pos.sl = sl;\n        ptr.pos.sc = sc;\n        ptr.pos.el = el;\n        ptr.pos.ec = ec;\n    }\n};\n\n},{}],\"/node_modules/xqlint/lib/parsers/JSONiqParser.js\":[function(_dereq_,module,exports){\n// This file was generated on Fri Apr 10, 2015 00:54 (UTC+01) by REx v5.33 which is Copyright (c) 1979-2015 by Gunther Rademacher <grd@gmx.net>\n// REx command line: JSONiqParser.ebnf -ll 2 -backtrack -tree -javascript -a xqlint\n\n                                                            // line 2 \"JSONiqParser.ebnf\"\n                                                            var JSONiqParser = exports.JSONiqParser = function JSONiqParser(string, parsingEventHandler)\n                                                            {\n                                                              init(string, parsingEventHandler);\n                                                            // line 9 \"JSONiqParser.js\"\n  var self = this;\n\n  this.ParseException = function(b, e, s, o, x)\n  {\n    var\n      begin = b,\n      end = e,\n      state = s,\n      offending = o,\n      expected = x;\n\n    this.getBegin = function() {return begin;};\n    this.getEnd = function() {return end;};\n    this.getState = function() {return state;};\n    this.getExpected = function() {return expected;};\n    this.getOffending = function() {return offending;};\n\n    this.getMessage = function()\n    {\n      return offending < 0 ? \"lexical analysis failed\" : \"syntax error\";\n    };\n  };\n\n  function init(string, parsingEventHandler)\n  {\n    eventHandler = parsingEventHandler;\n    input = string;\n    size = string.length;\n    reset(0, 0, 0);\n  }\n\n  this.getInput = function()\n  {\n    return input;\n  };\n\n  function reset(l, b, e)\n  {\n            b0 = b; e0 = b;\n    l1 = l; b1 = b; e1 = e;\n    l2 = 0;\n    end = e;\n    ex = -1;\n    memo = {};\n    eventHandler.reset(input);\n  }\n\n  this.getOffendingToken = function(e)\n  {\n    var o = e.getOffending();\n    return o >= 0 ? JSONiqParser.TOKEN[o] : null;\n  };\n\n  this.getExpectedTokenSet = function(e)\n  {\n    var expected;\n    if (e.getExpected() < 0)\n    {\n      expected = JSONiqParser.getTokenSet(- e.getState());\n    }\n    else\n    {\n      expected = [JSONiqParser.TOKEN[e.getExpected()]];\n    }\n    return expected;\n  };\n\n  this.getErrorMessage = function(e)\n  {\n    var tokenSet = this.getExpectedTokenSet(e);\n    var found = this.getOffendingToken(e);\n    var prefix = input.substring(0, e.getBegin());\n    var lines = prefix.split(\"\\n\");\n    var line = lines.length;\n    var column = lines[line - 1].length + 1;\n    var size = e.getEnd() - e.getBegin();\n    return e.getMessage()\n         + (found == null ? \"\" : \", found \" + found)\n         + \"\\nwhile expecting \"\n         + (tokenSet.length == 1 ? tokenSet[0] : (\"[\" + tokenSet.join(\", \") + \"]\"))\n         + \"\\n\"\n         + (size == 0 || found != null ? \"\" : \"after successfully scanning \" + size + \" characters beginning \")\n         + \"at line \" + line + \", column \" + column + \":\\n...\"\n         + input.substring(e.getBegin(), Math.min(input.length, e.getBegin() + 64))\n         + \"...\";\n  };\n\n  this.parse_XQuery = function()\n  {\n    eventHandler.startNonterminal(\"XQuery\", e0);\n    lookahead1W(277);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | EOF | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' |\n                                    // ';' | '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_Module();\n    shift(25);                      // EOF\n    eventHandler.endNonterminal(\"XQuery\", e0);\n  };\n\n  function parse_Module()\n  {\n    eventHandler.startNonterminal(\"Module\", e0);\n    switch (l1)\n    {\n    case 170:                       // 'jsoniq'\n      lookahead2W(168);             // S^WS | '#' | '(' | '(:' | 'encoding' | 'version'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 64682                 // 'jsoniq' 'encoding'\n     || lk == 137898)               // 'jsoniq' 'version'\n    {\n      parse_VersionDecl();\n    }\n    lookahead1W(277);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | EOF | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' |\n                                    // ';' | '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    switch (l1)\n    {\n    case 185:                       // 'module'\n      lookahead2W(146);             // S^WS | '#' | '(' | '(:' | 'namespace'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 95929:                     // 'module' 'namespace'\n      whitespace();\n      parse_LibraryModule();\n      break;\n    default:\n      whitespace();\n      parse_MainModule();\n    }\n    eventHandler.endNonterminal(\"Module\", e0);\n  }\n\n  function parse_VersionDecl()\n  {\n    eventHandler.startNonterminal(\"VersionDecl\", e0);\n    shift(170);                     // 'jsoniq'\n    lookahead1W(120);               // S^WS | '(:' | 'encoding' | 'version'\n    switch (l1)\n    {\n    case 126:                       // 'encoding'\n      shift(126);                   // 'encoding'\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shift(11);                    // StringLiteral\n      break;\n    default:\n      shift(269);                   // 'version'\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shift(11);                    // StringLiteral\n      lookahead1W(113);             // S^WS | '(:' | ';' | 'encoding'\n      if (l1 == 126)                // 'encoding'\n      {\n        shift(126);                 // 'encoding'\n        lookahead1W(17);            // StringLiteral | S^WS | '(:'\n        shift(11);                  // StringLiteral\n      }\n    }\n    lookahead1W(29);                // S^WS | '(:' | ';'\n    whitespace();\n    parse_Separator();\n    eventHandler.endNonterminal(\"VersionDecl\", e0);\n  }\n\n  function parse_LibraryModule()\n  {\n    eventHandler.startNonterminal(\"LibraryModule\", e0);\n    parse_ModuleDecl();\n    lookahead1W(142);               // S^WS | EOF | '(:' | 'declare' | 'import'\n    whitespace();\n    parse_Prolog();\n    eventHandler.endNonterminal(\"LibraryModule\", e0);\n  }\n\n  function parse_ModuleDecl()\n  {\n    eventHandler.startNonterminal(\"ModuleDecl\", e0);\n    shift(185);                     // 'module'\n    lookahead1W(64);                // S^WS | '(:' | 'namespace'\n    shift(187);                     // 'namespace'\n    lookahead1W(239);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' |\n                                    // 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with'\n    whitespace();\n    parse_NCName();\n    lookahead1W(30);                // S^WS | '(:' | '='\n    shift(61);                      // '='\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    lookahead1W(29);                // S^WS | '(:' | ';'\n    whitespace();\n    parse_Separator();\n    eventHandler.endNonterminal(\"ModuleDecl\", e0);\n  }\n\n  function parse_Prolog()\n  {\n    eventHandler.startNonterminal(\"Prolog\", e0);\n    for (;;)\n    {\n      lookahead1W(277);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | EOF | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' |\n                                    // ';' | '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      switch (l1)\n      {\n      case 109:                     // 'declare'\n        lookahead2W(206);           // S^WS | '#' | '%' | '(' | '(:' | 'base-uri' | 'boundary-space' | 'collection' |\n                                    // 'construction' | 'context' | 'copy-namespaces' | 'decimal-format' | 'default' |\n                                    // 'ft-option' | 'function' | 'index' | 'integrity' | 'namespace' | 'option' |\n                                    // 'ordering' | 'revalidation' | 'updating' | 'variable'\n        break;\n      case 155:                     // 'import'\n        lookahead2W(169);           // S^WS | '#' | '(' | '(:' | 'module' | 'schema'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 43117               // 'declare' 'base-uri'\n       && lk != 44141               // 'declare' 'boundary-space'\n       && lk != 50797               // 'declare' 'construction'\n       && lk != 53869               // 'declare' 'copy-namespaces'\n       && lk != 54893               // 'declare' 'decimal-format'\n       && lk != 56429               // 'declare' 'default'\n       && lk != 73325               // 'declare' 'ft-option'\n       && lk != 94875               // 'import' 'module'\n       && lk != 95853               // 'declare' 'namespace'\n       && lk != 106093              // 'declare' 'ordering'\n       && lk != 115821              // 'declare' 'revalidation'\n       && lk != 117403)             // 'import' 'schema'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 109:                     // 'declare'\n        lookahead2W(200);           // S^WS | '(:' | 'base-uri' | 'boundary-space' | 'construction' |\n                                    // 'copy-namespaces' | 'decimal-format' | 'default' | 'ft-option' | 'namespace' |\n                                    // 'ordering' | 'revalidation'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 56429)              // 'declare' 'default'\n      {\n        lk = memoized(0, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            try_DefaultNamespaceDecl();\n            lk = -1;\n          }\n          catch (p1A)\n          {\n            lk = -2;\n          }\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(0, e0, lk);\n        }\n      }\n      switch (lk)\n      {\n      case -1:\n        whitespace();\n        parse_DefaultNamespaceDecl();\n        break;\n      case 95853:                   // 'declare' 'namespace'\n        whitespace();\n        parse_NamespaceDecl();\n        break;\n      case 155:                     // 'import'\n        whitespace();\n        parse_Import();\n        break;\n      case 73325:                   // 'declare' 'ft-option'\n        whitespace();\n        parse_FTOptionDecl();\n        break;\n      default:\n        whitespace();\n        parse_Setter();\n      }\n      lookahead1W(29);              // S^WS | '(:' | ';'\n      whitespace();\n      parse_Separator();\n    }\n    for (;;)\n    {\n      lookahead1W(277);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | EOF | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' |\n                                    // ';' | '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      switch (l1)\n      {\n      case 109:                     // 'declare'\n        lookahead2W(201);           // S^WS | '#' | '%' | '(' | '(:' | 'collection' | 'context' | 'function' | 'index' |\n                                    // 'integrity' | 'option' | 'updating' | 'variable'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 17005               // 'declare' '%'\n       && lk != 49261               // 'declare' 'collection'\n       && lk != 52333               // 'declare' 'context'\n       && lk != 75373               // 'declare' 'function'\n       && lk != 80493               // 'declare' 'index'\n       && lk != 83565               // 'declare' 'integrity'\n       && lk != 104045              // 'declare' 'option'\n       && lk != 134765              // 'declare' 'updating'\n       && lk != 137325)             // 'declare' 'variable'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 109:                     // 'declare'\n        lookahead2W(197);           // S^WS | '%' | '(:' | 'collection' | 'context' | 'function' | 'index' |\n                                    // 'integrity' | 'option' | 'updating' | 'variable'\n        break;\n      default:\n        lk = l1;\n      }\n      switch (lk)\n      {\n      case 52333:                   // 'declare' 'context'\n        whitespace();\n        parse_ContextItemDecl();\n        break;\n      case 104045:                  // 'declare' 'option'\n        whitespace();\n        parse_OptionDecl();\n        break;\n      default:\n        whitespace();\n        parse_AnnotatedDecl();\n      }\n      lookahead1W(29);              // S^WS | '(:' | ';'\n      whitespace();\n      parse_Separator();\n    }\n    eventHandler.endNonterminal(\"Prolog\", e0);\n  }\n\n  function parse_Separator()\n  {\n    eventHandler.startNonterminal(\"Separator\", e0);\n    shift(54);                      // ';'\n    eventHandler.endNonterminal(\"Separator\", e0);\n  }\n\n  function parse_Setter()\n  {\n    eventHandler.startNonterminal(\"Setter\", e0);\n    switch (l1)\n    {\n    case 109:                       // 'declare'\n      lookahead2W(194);             // S^WS | '(:' | 'base-uri' | 'boundary-space' | 'construction' |\n                                    // 'copy-namespaces' | 'decimal-format' | 'default' | 'ordering' | 'revalidation'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 56429)                // 'declare' 'default'\n    {\n      lk = memoized(1, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_DefaultCollationDecl();\n          lk = -2;\n        }\n        catch (p2A)\n        {\n          try\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            try_EmptyOrderDecl();\n            lk = -6;\n          }\n          catch (p6A)\n          {\n            lk = -9;\n          }\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(1, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case 44141:                     // 'declare' 'boundary-space'\n      parse_BoundarySpaceDecl();\n      break;\n    case -2:\n      parse_DefaultCollationDecl();\n      break;\n    case 43117:                     // 'declare' 'base-uri'\n      parse_BaseURIDecl();\n      break;\n    case 50797:                     // 'declare' 'construction'\n      parse_ConstructionDecl();\n      break;\n    case 106093:                    // 'declare' 'ordering'\n      parse_OrderingModeDecl();\n      break;\n    case -6:\n      parse_EmptyOrderDecl();\n      break;\n    case 115821:                    // 'declare' 'revalidation'\n      parse_RevalidationDecl();\n      break;\n    case 53869:                     // 'declare' 'copy-namespaces'\n      parse_CopyNamespacesDecl();\n      break;\n    default:\n      parse_DecimalFormatDecl();\n    }\n    eventHandler.endNonterminal(\"Setter\", e0);\n  }\n\n  function parse_BoundarySpaceDecl()\n  {\n    eventHandler.startNonterminal(\"BoundarySpaceDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(36);                // S^WS | '(:' | 'boundary-space'\n    shift(86);                      // 'boundary-space'\n    lookahead1W(137);               // S^WS | '(:' | 'preserve' | 'strip'\n    switch (l1)\n    {\n    case 218:                       // 'preserve'\n      shift(218);                   // 'preserve'\n      break;\n    default:\n      shift(246);                   // 'strip'\n    }\n    eventHandler.endNonterminal(\"BoundarySpaceDecl\", e0);\n  }\n\n  function parse_DefaultCollationDecl()\n  {\n    eventHandler.startNonterminal(\"DefaultCollationDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(49);                // S^WS | '(:' | 'default'\n    shift(110);                     // 'default'\n    lookahead1W(41);                // S^WS | '(:' | 'collation'\n    shift(95);                      // 'collation'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    eventHandler.endNonterminal(\"DefaultCollationDecl\", e0);\n  }\n\n  function try_DefaultCollationDecl()\n  {\n    shiftT(109);                    // 'declare'\n    lookahead1W(49);                // S^WS | '(:' | 'default'\n    shiftT(110);                    // 'default'\n    lookahead1W(41);                // S^WS | '(:' | 'collation'\n    shiftT(95);                     // 'collation'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shiftT(7);                      // URILiteral\n  }\n\n  function parse_BaseURIDecl()\n  {\n    eventHandler.startNonterminal(\"BaseURIDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(35);                // S^WS | '(:' | 'base-uri'\n    shift(84);                      // 'base-uri'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    eventHandler.endNonterminal(\"BaseURIDecl\", e0);\n  }\n\n  function parse_ConstructionDecl()\n  {\n    eventHandler.startNonterminal(\"ConstructionDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(44);                // S^WS | '(:' | 'construction'\n    shift(99);                      // 'construction'\n    lookahead1W(137);               // S^WS | '(:' | 'preserve' | 'strip'\n    switch (l1)\n    {\n    case 246:                       // 'strip'\n      shift(246);                   // 'strip'\n      break;\n    default:\n      shift(218);                   // 'preserve'\n    }\n    eventHandler.endNonterminal(\"ConstructionDecl\", e0);\n  }\n\n  function parse_OrderingModeDecl()\n  {\n    eventHandler.startNonterminal(\"OrderingModeDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(71);                // S^WS | '(:' | 'ordering'\n    shift(207);                     // 'ordering'\n    lookahead1W(135);               // S^WS | '(:' | 'ordered' | 'unordered'\n    switch (l1)\n    {\n    case 206:                       // 'ordered'\n      shift(206);                   // 'ordered'\n      break;\n    default:\n      shift(262);                   // 'unordered'\n    }\n    eventHandler.endNonterminal(\"OrderingModeDecl\", e0);\n  }\n\n  function parse_EmptyOrderDecl()\n  {\n    eventHandler.startNonterminal(\"EmptyOrderDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(49);                // S^WS | '(:' | 'default'\n    shift(110);                     // 'default'\n    lookahead1W(70);                // S^WS | '(:' | 'order'\n    shift(205);                     // 'order'\n    lookahead1W(52);                // S^WS | '(:' | 'empty'\n    shift(124);                     // 'empty'\n    lookahead1W(125);               // S^WS | '(:' | 'greatest' | 'least'\n    switch (l1)\n    {\n    case 149:                       // 'greatest'\n      shift(149);                   // 'greatest'\n      break;\n    default:\n      shift(176);                   // 'least'\n    }\n    eventHandler.endNonterminal(\"EmptyOrderDecl\", e0);\n  }\n\n  function try_EmptyOrderDecl()\n  {\n    shiftT(109);                    // 'declare'\n    lookahead1W(49);                // S^WS | '(:' | 'default'\n    shiftT(110);                    // 'default'\n    lookahead1W(70);                // S^WS | '(:' | 'order'\n    shiftT(205);                    // 'order'\n    lookahead1W(52);                // S^WS | '(:' | 'empty'\n    shiftT(124);                    // 'empty'\n    lookahead1W(125);               // S^WS | '(:' | 'greatest' | 'least'\n    switch (l1)\n    {\n    case 149:                       // 'greatest'\n      shiftT(149);                  // 'greatest'\n      break;\n    default:\n      shiftT(176);                  // 'least'\n    }\n  }\n\n  function parse_CopyNamespacesDecl()\n  {\n    eventHandler.startNonterminal(\"CopyNamespacesDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(47);                // S^WS | '(:' | 'copy-namespaces'\n    shift(105);                     // 'copy-namespaces'\n    lookahead1W(132);               // S^WS | '(:' | 'no-preserve' | 'preserve'\n    whitespace();\n    parse_PreserveMode();\n    lookahead1W(25);                // S^WS | '(:' | ','\n    shift(42);                      // ','\n    lookahead1W(127);               // S^WS | '(:' | 'inherit' | 'no-inherit'\n    whitespace();\n    parse_InheritMode();\n    eventHandler.endNonterminal(\"CopyNamespacesDecl\", e0);\n  }\n\n  function parse_PreserveMode()\n  {\n    eventHandler.startNonterminal(\"PreserveMode\", e0);\n    switch (l1)\n    {\n    case 218:                       // 'preserve'\n      shift(218);                   // 'preserve'\n      break;\n    default:\n      shift(193);                   // 'no-preserve'\n    }\n    eventHandler.endNonterminal(\"PreserveMode\", e0);\n  }\n\n  function parse_InheritMode()\n  {\n    eventHandler.startNonterminal(\"InheritMode\", e0);\n    switch (l1)\n    {\n    case 159:                       // 'inherit'\n      shift(159);                   // 'inherit'\n      break;\n    default:\n      shift(192);                   // 'no-inherit'\n    }\n    eventHandler.endNonterminal(\"InheritMode\", e0);\n  }\n\n  function parse_DecimalFormatDecl()\n  {\n    eventHandler.startNonterminal(\"DecimalFormatDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(118);               // S^WS | '(:' | 'decimal-format' | 'default'\n    switch (l1)\n    {\n    case 107:                       // 'decimal-format'\n      shift(107);                   // 'decimal-format'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n      whitespace();\n      parse_EQName();\n      break;\n    default:\n      shift(110);                   // 'default'\n      lookahead1W(48);              // S^WS | '(:' | 'decimal-format'\n      shift(107);                   // 'decimal-format'\n    }\n    for (;;)\n    {\n      lookahead1W(203);             // S^WS | '(:' | ';' | 'NaN' | 'decimal-separator' | 'digit' |\n                                    // 'grouping-separator' | 'infinity' | 'minus-sign' | 'pattern-separator' |\n                                    // 'per-mille' | 'percent' | 'zero-digit'\n      if (l1 == 54)                 // ';'\n      {\n        break;\n      }\n      whitespace();\n      parse_DFPropertyName();\n      lookahead1W(30);              // S^WS | '(:' | '='\n      shift(61);                    // '='\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shift(11);                    // StringLiteral\n    }\n    eventHandler.endNonterminal(\"DecimalFormatDecl\", e0);\n  }\n\n  function parse_DFPropertyName()\n  {\n    eventHandler.startNonterminal(\"DFPropertyName\", e0);\n    switch (l1)\n    {\n    case 108:                       // 'decimal-separator'\n      shift(108);                   // 'decimal-separator'\n      break;\n    case 151:                       // 'grouping-separator'\n      shift(151);                   // 'grouping-separator'\n      break;\n    case 158:                       // 'infinity'\n      shift(158);                   // 'infinity'\n      break;\n    case 182:                       // 'minus-sign'\n      shift(182);                   // 'minus-sign'\n      break;\n    case 68:                        // 'NaN'\n      shift(68);                    // 'NaN'\n      break;\n    case 213:                       // 'percent'\n      shift(213);                   // 'percent'\n      break;\n    case 212:                       // 'per-mille'\n      shift(212);                   // 'per-mille'\n      break;\n    case 280:                       // 'zero-digit'\n      shift(280);                   // 'zero-digit'\n      break;\n    case 117:                       // 'digit'\n      shift(117);                   // 'digit'\n      break;\n    default:\n      shift(211);                   // 'pattern-separator'\n    }\n    eventHandler.endNonterminal(\"DFPropertyName\", e0);\n  }\n\n  function parse_Import()\n  {\n    eventHandler.startNonterminal(\"Import\", e0);\n    switch (l1)\n    {\n    case 155:                       // 'import'\n      lookahead2W(130);             // S^WS | '(:' | 'module' | 'schema'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 117403:                    // 'import' 'schema'\n      parse_SchemaImport();\n      break;\n    default:\n      parse_ModuleImport();\n    }\n    eventHandler.endNonterminal(\"Import\", e0);\n  }\n\n  function parse_SchemaImport()\n  {\n    eventHandler.startNonterminal(\"SchemaImport\", e0);\n    shift(155);                     // 'import'\n    lookahead1W(76);                // S^WS | '(:' | 'schema'\n    shift(229);                     // 'schema'\n    lookahead1W(141);               // URILiteral | S^WS | '(:' | 'default' | 'namespace'\n    if (l1 != 7)                    // URILiteral\n    {\n      whitespace();\n      parse_SchemaPrefix();\n    }\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    lookahead1W(112);               // S^WS | '(:' | ';' | 'at'\n    if (l1 == 82)                   // 'at'\n    {\n      shift(82);                    // 'at'\n      lookahead1W(15);              // URILiteral | S^WS | '(:'\n      shift(7);                     // URILiteral\n      for (;;)\n      {\n        lookahead1W(107);           // S^WS | '(:' | ',' | ';'\n        if (l1 != 42)               // ','\n        {\n          break;\n        }\n        shift(42);                  // ','\n        lookahead1W(15);            // URILiteral | S^WS | '(:'\n        shift(7);                   // URILiteral\n      }\n    }\n    eventHandler.endNonterminal(\"SchemaImport\", e0);\n  }\n\n  function parse_SchemaPrefix()\n  {\n    eventHandler.startNonterminal(\"SchemaPrefix\", e0);\n    switch (l1)\n    {\n    case 187:                       // 'namespace'\n      shift(187);                   // 'namespace'\n      lookahead1W(239);             // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' |\n                                    // 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with'\n      whitespace();\n      parse_NCName();\n      lookahead1W(30);              // S^WS | '(:' | '='\n      shift(61);                    // '='\n      break;\n    default:\n      shift(110);                   // 'default'\n      lookahead1W(50);              // S^WS | '(:' | 'element'\n      shift(122);                   // 'element'\n      lookahead1W(64);              // S^WS | '(:' | 'namespace'\n      shift(187);                   // 'namespace'\n    }\n    eventHandler.endNonterminal(\"SchemaPrefix\", e0);\n  }\n\n  function parse_ModuleImport()\n  {\n    eventHandler.startNonterminal(\"ModuleImport\", e0);\n    shift(155);                     // 'import'\n    lookahead1W(63);                // S^WS | '(:' | 'module'\n    shift(185);                     // 'module'\n    lookahead1W(93);                // URILiteral | S^WS | '(:' | 'namespace'\n    if (l1 == 187)                  // 'namespace'\n    {\n      shift(187);                   // 'namespace'\n      lookahead1W(239);             // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' |\n                                    // 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with'\n      whitespace();\n      parse_NCName();\n      lookahead1W(30);              // S^WS | '(:' | '='\n      shift(61);                    // '='\n    }\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    lookahead1W(112);               // S^WS | '(:' | ';' | 'at'\n    if (l1 == 82)                   // 'at'\n    {\n      shift(82);                    // 'at'\n      lookahead1W(15);              // URILiteral | S^WS | '(:'\n      shift(7);                     // URILiteral\n      for (;;)\n      {\n        lookahead1W(107);           // S^WS | '(:' | ',' | ';'\n        if (l1 != 42)               // ','\n        {\n          break;\n        }\n        shift(42);                  // ','\n        lookahead1W(15);            // URILiteral | S^WS | '(:'\n        shift(7);                   // URILiteral\n      }\n    }\n    eventHandler.endNonterminal(\"ModuleImport\", e0);\n  }\n\n  function parse_NamespaceDecl()\n  {\n    eventHandler.startNonterminal(\"NamespaceDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(64);                // S^WS | '(:' | 'namespace'\n    shift(187);                     // 'namespace'\n    lookahead1W(239);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' |\n                                    // 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with'\n    whitespace();\n    parse_NCName();\n    lookahead1W(30);                // S^WS | '(:' | '='\n    shift(61);                      // '='\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    eventHandler.endNonterminal(\"NamespaceDecl\", e0);\n  }\n\n  function parse_DefaultNamespaceDecl()\n  {\n    eventHandler.startNonterminal(\"DefaultNamespaceDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(49);                // S^WS | '(:' | 'default'\n    shift(110);                     // 'default'\n    lookahead1W(119);               // S^WS | '(:' | 'element' | 'function'\n    switch (l1)\n    {\n    case 122:                       // 'element'\n      shift(122);                   // 'element'\n      break;\n    default:\n      shift(147);                   // 'function'\n    }\n    lookahead1W(64);                // S^WS | '(:' | 'namespace'\n    shift(187);                     // 'namespace'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    eventHandler.endNonterminal(\"DefaultNamespaceDecl\", e0);\n  }\n\n  function try_DefaultNamespaceDecl()\n  {\n    shiftT(109);                    // 'declare'\n    lookahead1W(49);                // S^WS | '(:' | 'default'\n    shiftT(110);                    // 'default'\n    lookahead1W(119);               // S^WS | '(:' | 'element' | 'function'\n    switch (l1)\n    {\n    case 122:                       // 'element'\n      shiftT(122);                  // 'element'\n      break;\n    default:\n      shiftT(147);                  // 'function'\n    }\n    lookahead1W(64);                // S^WS | '(:' | 'namespace'\n    shiftT(187);                    // 'namespace'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shiftT(7);                      // URILiteral\n  }\n\n  function parse_FTOptionDecl()\n  {\n    eventHandler.startNonterminal(\"FTOptionDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(55);                // S^WS | '(:' | 'ft-option'\n    shift(143);                     // 'ft-option'\n    lookahead1W(84);                // S^WS | '(:' | 'using'\n    whitespace();\n    parse_FTMatchOptions();\n    eventHandler.endNonterminal(\"FTOptionDecl\", e0);\n  }\n\n  function parse_AnnotatedDecl()\n  {\n    eventHandler.startNonterminal(\"AnnotatedDecl\", e0);\n    shift(109);                     // 'declare'\n    for (;;)\n    {\n      lookahead1W(192);             // S^WS | '%' | '(:' | 'collection' | 'function' | 'index' | 'integrity' |\n                                    // 'updating' | 'variable'\n      if (l1 != 33                  // '%'\n       && l1 != 263)                // 'updating'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 263:                     // 'updating'\n        whitespace();\n        parse_CompatibilityAnnotation();\n        break;\n      default:\n        whitespace();\n        parse_Annotation();\n      }\n    }\n    switch (l1)\n    {\n    case 268:                       // 'variable'\n      whitespace();\n      parse_VarDecl();\n      break;\n    case 147:                       // 'function'\n      whitespace();\n      parse_FunctionDecl();\n      break;\n    case 96:                        // 'collection'\n      whitespace();\n      parse_CollectionDecl();\n      break;\n    case 157:                       // 'index'\n      whitespace();\n      parse_IndexDecl();\n      break;\n    default:\n      whitespace();\n      parse_ICDecl();\n    }\n    eventHandler.endNonterminal(\"AnnotatedDecl\", e0);\n  }\n\n  function parse_CompatibilityAnnotation()\n  {\n    eventHandler.startNonterminal(\"CompatibilityAnnotation\", e0);\n    shift(263);                     // 'updating'\n    eventHandler.endNonterminal(\"CompatibilityAnnotation\", e0);\n  }\n\n  function parse_Annotation()\n  {\n    eventHandler.startNonterminal(\"Annotation\", e0);\n    shift(33);                      // '%'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    whitespace();\n    parse_EQName();\n    lookahead1W(193);               // S^WS | '%' | '(' | '(:' | 'collection' | 'function' | 'index' | 'integrity' |\n                                    // 'updating' | 'variable'\n    if (l1 == 35)                   // '('\n    {\n      shift(35);                    // '('\n      lookahead1W(190);             // IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral | S^WS | '(:' |\n                                    // 'false' | 'null' | 'true'\n      whitespace();\n      parse_Literal();\n      for (;;)\n      {\n        lookahead1W(105);           // S^WS | '(:' | ')' | ','\n        if (l1 != 42)               // ','\n        {\n          break;\n        }\n        shift(42);                  // ','\n        lookahead1W(190);           // IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral | S^WS | '(:' |\n                                    // 'false' | 'null' | 'true'\n        whitespace();\n        parse_Literal();\n      }\n      shift(38);                    // ')'\n    }\n    eventHandler.endNonterminal(\"Annotation\", e0);\n  }\n\n  function try_Annotation()\n  {\n    shiftT(33);                     // '%'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    try_EQName();\n    lookahead1W(193);               // S^WS | '%' | '(' | '(:' | 'collection' | 'function' | 'index' | 'integrity' |\n                                    // 'updating' | 'variable'\n    if (l1 == 35)                   // '('\n    {\n      shiftT(35);                   // '('\n      lookahead1W(190);             // IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral | S^WS | '(:' |\n                                    // 'false' | 'null' | 'true'\n      try_Literal();\n      for (;;)\n      {\n        lookahead1W(105);           // S^WS | '(:' | ')' | ','\n        if (l1 != 42)               // ','\n        {\n          break;\n        }\n        shiftT(42);                 // ','\n        lookahead1W(190);           // IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral | S^WS | '(:' |\n                                    // 'false' | 'null' | 'true'\n        try_Literal();\n      }\n      shiftT(38);                   // ')'\n    }\n  }\n\n  function parse_VarDecl()\n  {\n    eventHandler.startNonterminal(\"VarDecl\", e0);\n    shift(268);                     // 'variable'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    whitespace();\n    parse_VarName();\n    lookahead1W(157);               // S^WS | '(:' | ':=' | 'as' | 'external'\n    if (l1 == 80)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    lookahead1W(110);               // S^WS | '(:' | ':=' | 'external'\n    switch (l1)\n    {\n    case 53:                        // ':='\n      shift(53);                    // ':='\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      whitespace();\n      parse_VarValue();\n      break;\n    default:\n      shift(134);                   // 'external'\n      lookahead1W(108);             // S^WS | '(:' | ':=' | ';'\n      if (l1 == 53)                 // ':='\n      {\n        shift(53);                  // ':='\n        lookahead1W(266);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n        whitespace();\n        parse_VarDefaultValue();\n      }\n    }\n    eventHandler.endNonterminal(\"VarDecl\", e0);\n  }\n\n  function parse_VarValue()\n  {\n    eventHandler.startNonterminal(\"VarValue\", e0);\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"VarValue\", e0);\n  }\n\n  function parse_VarDefaultValue()\n  {\n    eventHandler.startNonterminal(\"VarDefaultValue\", e0);\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"VarDefaultValue\", e0);\n  }\n\n  function parse_ContextItemDecl()\n  {\n    eventHandler.startNonterminal(\"ContextItemDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(46);                // S^WS | '(:' | 'context'\n    shift(102);                     // 'context'\n    lookahead1W(58);                // S^WS | '(:' | 'item'\n    shift(167);                     // 'item'\n    lookahead1W(157);               // S^WS | '(:' | ':=' | 'as' | 'external'\n    if (l1 == 80)                   // 'as'\n    {\n      shift(80);                    // 'as'\n      lookahead1W(253);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n      whitespace();\n      parse_ItemType();\n    }\n    lookahead1W(110);               // S^WS | '(:' | ':=' | 'external'\n    switch (l1)\n    {\n    case 53:                        // ':='\n      shift(53);                    // ':='\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      whitespace();\n      parse_VarValue();\n      break;\n    default:\n      shift(134);                   // 'external'\n      lookahead1W(108);             // S^WS | '(:' | ':=' | ';'\n      if (l1 == 53)                 // ':='\n      {\n        shift(53);                  // ':='\n        lookahead1W(266);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n        whitespace();\n        parse_VarDefaultValue();\n      }\n    }\n    eventHandler.endNonterminal(\"ContextItemDecl\", e0);\n  }\n\n  function parse_ParamList()\n  {\n    eventHandler.startNonterminal(\"ParamList\", e0);\n    parse_Param();\n    for (;;)\n    {\n      lookahead1W(105);             // S^WS | '(:' | ')' | ','\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shift(42);                    // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      whitespace();\n      parse_Param();\n    }\n    eventHandler.endNonterminal(\"ParamList\", e0);\n  }\n\n  function try_ParamList()\n  {\n    try_Param();\n    for (;;)\n    {\n      lookahead1W(105);             // S^WS | '(:' | ')' | ','\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shiftT(42);                   // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      try_Param();\n    }\n  }\n\n  function parse_Param()\n  {\n    eventHandler.startNonterminal(\"Param\", e0);\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    whitespace();\n    parse_EQName();\n    lookahead1W(153);               // S^WS | '(:' | ')' | ',' | 'as'\n    if (l1 == 80)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    eventHandler.endNonterminal(\"Param\", e0);\n  }\n\n  function try_Param()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    try_EQName();\n    lookahead1W(153);               // S^WS | '(:' | ')' | ',' | 'as'\n    if (l1 == 80)                   // 'as'\n    {\n      try_TypeDeclaration();\n    }\n  }\n\n  function parse_FunctionBody()\n  {\n    eventHandler.startNonterminal(\"FunctionBody\", e0);\n    parse_EnclosedExpr();\n    eventHandler.endNonterminal(\"FunctionBody\", e0);\n  }\n\n  function try_FunctionBody()\n  {\n    try_EnclosedExpr();\n  }\n\n  function parse_EnclosedExpr()\n  {\n    eventHandler.startNonterminal(\"EnclosedExpr\", e0);\n    shift(281);                     // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_Expr();\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"EnclosedExpr\", e0);\n  }\n\n  function try_EnclosedExpr()\n  {\n    shiftT(281);                    // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_Expr();\n    shiftT(287);                    // '}'\n  }\n\n  function parse_OptionDecl()\n  {\n    eventHandler.startNonterminal(\"OptionDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(69);                // S^WS | '(:' | 'option'\n    shift(203);                     // 'option'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    whitespace();\n    parse_EQName();\n    lookahead1W(17);                // StringLiteral | S^WS | '(:'\n    shift(11);                      // StringLiteral\n    eventHandler.endNonterminal(\"OptionDecl\", e0);\n  }\n\n  function parse_Expr()\n  {\n    eventHandler.startNonterminal(\"Expr\", e0);\n    parse_ExprSingle();\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shift(42);                    // ','\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      whitespace();\n      parse_ExprSingle();\n    }\n    eventHandler.endNonterminal(\"Expr\", e0);\n  }\n\n  function try_Expr()\n  {\n    try_ExprSingle();\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shiftT(42);                   // ','\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      try_ExprSingle();\n    }\n  }\n\n  function parse_FLWORExpr()\n  {\n    eventHandler.startNonterminal(\"FLWORExpr\", e0);\n    parse_InitialClause();\n    for (;;)\n    {\n      lookahead1W(195);             // S^WS | '(:' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' | 'stable' |\n                                    // 'where'\n      if (l1 == 224)                // 'return'\n      {\n        break;\n      }\n      whitespace();\n      parse_IntermediateClause();\n    }\n    whitespace();\n    parse_ReturnClause();\n    eventHandler.endNonterminal(\"FLWORExpr\", e0);\n  }\n\n  function try_FLWORExpr()\n  {\n    try_InitialClause();\n    for (;;)\n    {\n      lookahead1W(195);             // S^WS | '(:' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' | 'stable' |\n                                    // 'where'\n      if (l1 == 224)                // 'return'\n      {\n        break;\n      }\n      try_IntermediateClause();\n    }\n    try_ReturnClause();\n  }\n\n  function parse_InitialClause()\n  {\n    eventHandler.startNonterminal(\"InitialClause\", e0);\n    switch (l1)\n    {\n    case 139:                       // 'for'\n      lookahead2W(151);             // S^WS | '$' | '(:' | 'sliding' | 'tumbling'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 16011:                     // 'for' '$'\n      parse_ForClause();\n      break;\n    case 177:                       // 'let'\n      parse_LetClause();\n      break;\n    default:\n      parse_WindowClause();\n    }\n    eventHandler.endNonterminal(\"InitialClause\", e0);\n  }\n\n  function try_InitialClause()\n  {\n    switch (l1)\n    {\n    case 139:                       // 'for'\n      lookahead2W(151);             // S^WS | '$' | '(:' | 'sliding' | 'tumbling'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 16011:                     // 'for' '$'\n      try_ForClause();\n      break;\n    case 177:                       // 'let'\n      try_LetClause();\n      break;\n    default:\n      try_WindowClause();\n    }\n  }\n\n  function parse_IntermediateClause()\n  {\n    eventHandler.startNonterminal(\"IntermediateClause\", e0);\n    switch (l1)\n    {\n    case 139:                       // 'for'\n    case 177:                       // 'let'\n      parse_InitialClause();\n      break;\n    case 272:                       // 'where'\n      parse_WhereClause();\n      break;\n    case 150:                       // 'group'\n      parse_GroupByClause();\n      break;\n    case 106:                       // 'count'\n      parse_CountClause();\n      break;\n    default:\n      parse_OrderByClause();\n    }\n    eventHandler.endNonterminal(\"IntermediateClause\", e0);\n  }\n\n  function try_IntermediateClause()\n  {\n    switch (l1)\n    {\n    case 139:                       // 'for'\n    case 177:                       // 'let'\n      try_InitialClause();\n      break;\n    case 272:                       // 'where'\n      try_WhereClause();\n      break;\n    case 150:                       // 'group'\n      try_GroupByClause();\n      break;\n    case 106:                       // 'count'\n      try_CountClause();\n      break;\n    default:\n      try_OrderByClause();\n    }\n  }\n\n  function parse_ForClause()\n  {\n    eventHandler.startNonterminal(\"ForClause\", e0);\n    shift(139);                     // 'for'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    whitespace();\n    parse_ForBinding();\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shift(42);                    // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      whitespace();\n      parse_ForBinding();\n    }\n    eventHandler.endNonterminal(\"ForClause\", e0);\n  }\n\n  function try_ForClause()\n  {\n    shiftT(139);                    // 'for'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    try_ForBinding();\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shiftT(42);                   // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      try_ForBinding();\n    }\n  }\n\n  function parse_ForBinding()\n  {\n    eventHandler.startNonterminal(\"ForBinding\", e0);\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    whitespace();\n    parse_VarName();\n    lookahead1W(182);               // S^WS | '(:' | 'allowing' | 'as' | 'at' | 'in' | 'score'\n    if (l1 == 80)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    lookahead1W(173);               // S^WS | '(:' | 'allowing' | 'at' | 'in' | 'score'\n    if (l1 == 73)                   // 'allowing'\n    {\n      whitespace();\n      parse_AllowingEmpty();\n    }\n    lookahead1W(160);               // S^WS | '(:' | 'at' | 'in' | 'score'\n    if (l1 == 82)                   // 'at'\n    {\n      whitespace();\n      parse_PositionalVar();\n    }\n    lookahead1W(126);               // S^WS | '(:' | 'in' | 'score'\n    if (l1 == 232)                  // 'score'\n    {\n      whitespace();\n      parse_FTScoreVar();\n    }\n    lookahead1W(56);                // S^WS | '(:' | 'in'\n    shift(156);                     // 'in'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"ForBinding\", e0);\n  }\n\n  function try_ForBinding()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    try_VarName();\n    lookahead1W(182);               // S^WS | '(:' | 'allowing' | 'as' | 'at' | 'in' | 'score'\n    if (l1 == 80)                   // 'as'\n    {\n      try_TypeDeclaration();\n    }\n    lookahead1W(173);               // S^WS | '(:' | 'allowing' | 'at' | 'in' | 'score'\n    if (l1 == 73)                   // 'allowing'\n    {\n      try_AllowingEmpty();\n    }\n    lookahead1W(160);               // S^WS | '(:' | 'at' | 'in' | 'score'\n    if (l1 == 82)                   // 'at'\n    {\n      try_PositionalVar();\n    }\n    lookahead1W(126);               // S^WS | '(:' | 'in' | 'score'\n    if (l1 == 232)                  // 'score'\n    {\n      try_FTScoreVar();\n    }\n    lookahead1W(56);                // S^WS | '(:' | 'in'\n    shiftT(156);                    // 'in'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_ExprSingle();\n  }\n\n  function parse_AllowingEmpty()\n  {\n    eventHandler.startNonterminal(\"AllowingEmpty\", e0);\n    shift(73);                      // 'allowing'\n    lookahead1W(52);                // S^WS | '(:' | 'empty'\n    shift(124);                     // 'empty'\n    eventHandler.endNonterminal(\"AllowingEmpty\", e0);\n  }\n\n  function try_AllowingEmpty()\n  {\n    shiftT(73);                     // 'allowing'\n    lookahead1W(52);                // S^WS | '(:' | 'empty'\n    shiftT(124);                    // 'empty'\n  }\n\n  function parse_PositionalVar()\n  {\n    eventHandler.startNonterminal(\"PositionalVar\", e0);\n    shift(82);                      // 'at'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    whitespace();\n    parse_VarName();\n    eventHandler.endNonterminal(\"PositionalVar\", e0);\n  }\n\n  function try_PositionalVar()\n  {\n    shiftT(82);                     // 'at'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    try_VarName();\n  }\n\n  function parse_FTScoreVar()\n  {\n    eventHandler.startNonterminal(\"FTScoreVar\", e0);\n    shift(232);                     // 'score'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    whitespace();\n    parse_VarName();\n    eventHandler.endNonterminal(\"FTScoreVar\", e0);\n  }\n\n  function try_FTScoreVar()\n  {\n    shiftT(232);                    // 'score'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    try_VarName();\n  }\n\n  function parse_LetClause()\n  {\n    eventHandler.startNonterminal(\"LetClause\", e0);\n    shift(177);                     // 'let'\n    lookahead1W(100);               // S^WS | '$' | '(:' | 'score'\n    whitespace();\n    parse_LetBinding();\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shift(42);                    // ','\n      lookahead1W(100);             // S^WS | '$' | '(:' | 'score'\n      whitespace();\n      parse_LetBinding();\n    }\n    eventHandler.endNonterminal(\"LetClause\", e0);\n  }\n\n  function try_LetClause()\n  {\n    shiftT(177);                    // 'let'\n    lookahead1W(100);               // S^WS | '$' | '(:' | 'score'\n    try_LetBinding();\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shiftT(42);                   // ','\n      lookahead1W(100);             // S^WS | '$' | '(:' | 'score'\n      try_LetBinding();\n    }\n  }\n\n  function parse_LetBinding()\n  {\n    eventHandler.startNonterminal(\"LetBinding\", e0);\n    switch (l1)\n    {\n    case 31:                        // '$'\n      shift(31);                    // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n      whitespace();\n      parse_VarName();\n      lookahead1W(109);             // S^WS | '(:' | ':=' | 'as'\n      if (l1 == 80)                 // 'as'\n      {\n        whitespace();\n        parse_TypeDeclaration();\n      }\n      break;\n    default:\n      parse_FTScoreVar();\n    }\n    lookahead1W(28);                // S^WS | '(:' | ':='\n    shift(53);                      // ':='\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"LetBinding\", e0);\n  }\n\n  function try_LetBinding()\n  {\n    switch (l1)\n    {\n    case 31:                        // '$'\n      shiftT(31);                   // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n      try_VarName();\n      lookahead1W(109);             // S^WS | '(:' | ':=' | 'as'\n      if (l1 == 80)                 // 'as'\n      {\n        try_TypeDeclaration();\n      }\n      break;\n    default:\n      try_FTScoreVar();\n    }\n    lookahead1W(28);                // S^WS | '(:' | ':='\n    shiftT(53);                     // ':='\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_ExprSingle();\n  }\n\n  function parse_WindowClause()\n  {\n    eventHandler.startNonterminal(\"WindowClause\", e0);\n    shift(139);                     // 'for'\n    lookahead1W(139);               // S^WS | '(:' | 'sliding' | 'tumbling'\n    switch (l1)\n    {\n    case 257:                       // 'tumbling'\n      whitespace();\n      parse_TumblingWindowClause();\n      break;\n    default:\n      whitespace();\n      parse_SlidingWindowClause();\n    }\n    eventHandler.endNonterminal(\"WindowClause\", e0);\n  }\n\n  function try_WindowClause()\n  {\n    shiftT(139);                    // 'for'\n    lookahead1W(139);               // S^WS | '(:' | 'sliding' | 'tumbling'\n    switch (l1)\n    {\n    case 257:                       // 'tumbling'\n      try_TumblingWindowClause();\n      break;\n    default:\n      try_SlidingWindowClause();\n    }\n  }\n\n  function parse_TumblingWindowClause()\n  {\n    eventHandler.startNonterminal(\"TumblingWindowClause\", e0);\n    shift(257);                     // 'tumbling'\n    lookahead1W(88);                // S^WS | '(:' | 'window'\n    shift(275);                     // 'window'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    whitespace();\n    parse_VarName();\n    lookahead1W(114);               // S^WS | '(:' | 'as' | 'in'\n    if (l1 == 80)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    lookahead1W(56);                // S^WS | '(:' | 'in'\n    shift(156);                     // 'in'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    whitespace();\n    parse_WindowStartCondition();\n    if (l1 == 127                   // 'end'\n     || l1 == 202)                  // 'only'\n    {\n      whitespace();\n      parse_WindowEndCondition();\n    }\n    eventHandler.endNonterminal(\"TumblingWindowClause\", e0);\n  }\n\n  function try_TumblingWindowClause()\n  {\n    shiftT(257);                    // 'tumbling'\n    lookahead1W(88);                // S^WS | '(:' | 'window'\n    shiftT(275);                    // 'window'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    try_VarName();\n    lookahead1W(114);               // S^WS | '(:' | 'as' | 'in'\n    if (l1 == 80)                   // 'as'\n    {\n      try_TypeDeclaration();\n    }\n    lookahead1W(56);                // S^WS | '(:' | 'in'\n    shiftT(156);                    // 'in'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_ExprSingle();\n    try_WindowStartCondition();\n    if (l1 == 127                   // 'end'\n     || l1 == 202)                  // 'only'\n    {\n      try_WindowEndCondition();\n    }\n  }\n\n  function parse_SlidingWindowClause()\n  {\n    eventHandler.startNonterminal(\"SlidingWindowClause\", e0);\n    shift(239);                     // 'sliding'\n    lookahead1W(88);                // S^WS | '(:' | 'window'\n    shift(275);                     // 'window'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    whitespace();\n    parse_VarName();\n    lookahead1W(114);               // S^WS | '(:' | 'as' | 'in'\n    if (l1 == 80)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    lookahead1W(56);                // S^WS | '(:' | 'in'\n    shift(156);                     // 'in'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    whitespace();\n    parse_WindowStartCondition();\n    whitespace();\n    parse_WindowEndCondition();\n    eventHandler.endNonterminal(\"SlidingWindowClause\", e0);\n  }\n\n  function try_SlidingWindowClause()\n  {\n    shiftT(239);                    // 'sliding'\n    lookahead1W(88);                // S^WS | '(:' | 'window'\n    shiftT(275);                    // 'window'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    try_VarName();\n    lookahead1W(114);               // S^WS | '(:' | 'as' | 'in'\n    if (l1 == 80)                   // 'as'\n    {\n      try_TypeDeclaration();\n    }\n    lookahead1W(56);                // S^WS | '(:' | 'in'\n    shiftT(156);                    // 'in'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_ExprSingle();\n    try_WindowStartCondition();\n    try_WindowEndCondition();\n  }\n\n  function parse_WindowStartCondition()\n  {\n    eventHandler.startNonterminal(\"WindowStartCondition\", e0);\n    shift(242);                     // 'start'\n    lookahead1W(181);               // S^WS | '$' | '(:' | 'at' | 'next' | 'previous' | 'when'\n    whitespace();\n    parse_WindowVars();\n    lookahead1W(86);                // S^WS | '(:' | 'when'\n    shift(271);                     // 'when'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"WindowStartCondition\", e0);\n  }\n\n  function try_WindowStartCondition()\n  {\n    shiftT(242);                    // 'start'\n    lookahead1W(181);               // S^WS | '$' | '(:' | 'at' | 'next' | 'previous' | 'when'\n    try_WindowVars();\n    lookahead1W(86);                // S^WS | '(:' | 'when'\n    shiftT(271);                    // 'when'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_ExprSingle();\n  }\n\n  function parse_WindowEndCondition()\n  {\n    eventHandler.startNonterminal(\"WindowEndCondition\", e0);\n    if (l1 == 202)                  // 'only'\n    {\n      shift(202);                   // 'only'\n    }\n    lookahead1W(53);                // S^WS | '(:' | 'end'\n    shift(127);                     // 'end'\n    lookahead1W(181);               // S^WS | '$' | '(:' | 'at' | 'next' | 'previous' | 'when'\n    whitespace();\n    parse_WindowVars();\n    lookahead1W(86);                // S^WS | '(:' | 'when'\n    shift(271);                     // 'when'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"WindowEndCondition\", e0);\n  }\n\n  function try_WindowEndCondition()\n  {\n    if (l1 == 202)                  // 'only'\n    {\n      shiftT(202);                  // 'only'\n    }\n    lookahead1W(53);                // S^WS | '(:' | 'end'\n    shiftT(127);                    // 'end'\n    lookahead1W(181);               // S^WS | '$' | '(:' | 'at' | 'next' | 'previous' | 'when'\n    try_WindowVars();\n    lookahead1W(86);                // S^WS | '(:' | 'when'\n    shiftT(271);                    // 'when'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_ExprSingle();\n  }\n\n  function parse_WindowVars()\n  {\n    eventHandler.startNonterminal(\"WindowVars\", e0);\n    if (l1 == 31)                   // '$'\n    {\n      shift(31);                    // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n      whitespace();\n      parse_CurrentItem();\n    }\n    lookahead1W(174);               // S^WS | '(:' | 'at' | 'next' | 'previous' | 'when'\n    if (l1 == 82)                   // 'at'\n    {\n      whitespace();\n      parse_PositionalVar();\n    }\n    lookahead1W(163);               // S^WS | '(:' | 'next' | 'previous' | 'when'\n    if (l1 == 219)                  // 'previous'\n    {\n      shift(219);                   // 'previous'\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      shift(31);                    // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n      whitespace();\n      parse_PreviousItem();\n    }\n    lookahead1W(131);               // S^WS | '(:' | 'next' | 'when'\n    if (l1 == 190)                  // 'next'\n    {\n      shift(190);                   // 'next'\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      shift(31);                    // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n      whitespace();\n      parse_NextItem();\n    }\n    eventHandler.endNonterminal(\"WindowVars\", e0);\n  }\n\n  function try_WindowVars()\n  {\n    if (l1 == 31)                   // '$'\n    {\n      shiftT(31);                   // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n      try_CurrentItem();\n    }\n    lookahead1W(174);               // S^WS | '(:' | 'at' | 'next' | 'previous' | 'when'\n    if (l1 == 82)                   // 'at'\n    {\n      try_PositionalVar();\n    }\n    lookahead1W(163);               // S^WS | '(:' | 'next' | 'previous' | 'when'\n    if (l1 == 219)                  // 'previous'\n    {\n      shiftT(219);                  // 'previous'\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      shiftT(31);                   // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n      try_PreviousItem();\n    }\n    lookahead1W(131);               // S^WS | '(:' | 'next' | 'when'\n    if (l1 == 190)                  // 'next'\n    {\n      shiftT(190);                  // 'next'\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      shiftT(31);                   // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n      try_NextItem();\n    }\n  }\n\n  function parse_CurrentItem()\n  {\n    eventHandler.startNonterminal(\"CurrentItem\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"CurrentItem\", e0);\n  }\n\n  function try_CurrentItem()\n  {\n    try_EQName();\n  }\n\n  function parse_PreviousItem()\n  {\n    eventHandler.startNonterminal(\"PreviousItem\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"PreviousItem\", e0);\n  }\n\n  function try_PreviousItem()\n  {\n    try_EQName();\n  }\n\n  function parse_NextItem()\n  {\n    eventHandler.startNonterminal(\"NextItem\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"NextItem\", e0);\n  }\n\n  function try_NextItem()\n  {\n    try_EQName();\n  }\n\n  function parse_CountClause()\n  {\n    eventHandler.startNonterminal(\"CountClause\", e0);\n    shift(106);                     // 'count'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    whitespace();\n    parse_VarName();\n    eventHandler.endNonterminal(\"CountClause\", e0);\n  }\n\n  function try_CountClause()\n  {\n    shiftT(106);                    // 'count'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    try_VarName();\n  }\n\n  function parse_WhereClause()\n  {\n    eventHandler.startNonterminal(\"WhereClause\", e0);\n    shift(272);                     // 'where'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"WhereClause\", e0);\n  }\n\n  function try_WhereClause()\n  {\n    shiftT(272);                    // 'where'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_ExprSingle();\n  }\n\n  function parse_GroupByClause()\n  {\n    eventHandler.startNonterminal(\"GroupByClause\", e0);\n    shift(150);                     // 'group'\n    lookahead1W(37);                // S^WS | '(:' | 'by'\n    shift(88);                      // 'by'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_GroupingSpecList();\n    eventHandler.endNonterminal(\"GroupByClause\", e0);\n  }\n\n  function try_GroupByClause()\n  {\n    shiftT(150);                    // 'group'\n    lookahead1W(37);                // S^WS | '(:' | 'by'\n    shiftT(88);                     // 'by'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_GroupingSpecList();\n  }\n\n  function parse_GroupingSpecList()\n  {\n    eventHandler.startNonterminal(\"GroupingSpecList\", e0);\n    parse_GroupingSpec();\n    for (;;)\n    {\n      lookahead1W(198);             // S^WS | '(:' | ',' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' |\n                                    // 'stable' | 'where'\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shift(42);                    // ','\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      whitespace();\n      parse_GroupingSpec();\n    }\n    eventHandler.endNonterminal(\"GroupingSpecList\", e0);\n  }\n\n  function try_GroupingSpecList()\n  {\n    try_GroupingSpec();\n    for (;;)\n    {\n      lookahead1W(198);             // S^WS | '(:' | ',' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' |\n                                    // 'stable' | 'where'\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shiftT(42);                   // ','\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      try_GroupingSpec();\n    }\n  }\n\n  function parse_GroupingSpec()\n  {\n    eventHandler.startNonterminal(\"GroupingSpec\", e0);\n    switch (l1)\n    {\n    case 31:                        // '$'\n      lookahead2W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 3103                  // '$' EQName^Token\n     || lk == 36383                 // '$' 'after'\n     || lk == 37407                 // '$' 'allowing'\n     || lk == 37919                 // '$' 'ancestor'\n     || lk == 38431                 // '$' 'ancestor-or-self'\n     || lk == 38943                 // '$' 'and'\n     || lk == 39967                 // '$' 'append'\n     || lk == 40479                 // '$' 'array'\n     || lk == 40991                 // '$' 'as'\n     || lk == 41503                 // '$' 'ascending'\n     || lk == 42015                 // '$' 'at'\n     || lk == 42527                 // '$' 'attribute'\n     || lk == 43039                 // '$' 'base-uri'\n     || lk == 43551                 // '$' 'before'\n     || lk == 44063                 // '$' 'boundary-space'\n     || lk == 44575                 // '$' 'break'\n     || lk == 45599                 // '$' 'case'\n     || lk == 46111                 // '$' 'cast'\n     || lk == 46623                 // '$' 'castable'\n     || lk == 47135                 // '$' 'catch'\n     || lk == 48159                 // '$' 'child'\n     || lk == 48671                 // '$' 'collation'\n     || lk == 49695                 // '$' 'comment'\n     || lk == 50207                 // '$' 'constraint'\n     || lk == 50719                 // '$' 'construction'\n     || lk == 52255                 // '$' 'context'\n     || lk == 52767                 // '$' 'continue'\n     || lk == 53279                 // '$' 'copy'\n     || lk == 53791                 // '$' 'copy-namespaces'\n     || lk == 54303                 // '$' 'count'\n     || lk == 54815                 // '$' 'decimal-format'\n     || lk == 55839                 // '$' 'declare'\n     || lk == 56351                 // '$' 'default'\n     || lk == 56863                 // '$' 'delete'\n     || lk == 57375                 // '$' 'descendant'\n     || lk == 57887                 // '$' 'descendant-or-self'\n     || lk == 58399                 // '$' 'descending'\n     || lk == 60959                 // '$' 'div'\n     || lk == 61471                 // '$' 'document'\n     || lk == 61983                 // '$' 'document-node'\n     || lk == 62495                 // '$' 'element'\n     || lk == 63007                 // '$' 'else'\n     || lk == 63519                 // '$' 'empty'\n     || lk == 64031                 // '$' 'empty-sequence'\n     || lk == 64543                 // '$' 'encoding'\n     || lk == 65055                 // '$' 'end'\n     || lk == 66079                 // '$' 'eq'\n     || lk == 66591                 // '$' 'every'\n     || lk == 67615                 // '$' 'except'\n     || lk == 68127                 // '$' 'exit'\n     || lk == 68639                 // '$' 'external'\n     || lk == 69151                 // '$' 'false'\n     || lk == 69663                 // '$' 'first'\n     || lk == 70175                 // '$' 'following'\n     || lk == 70687                 // '$' 'following-sibling'\n     || lk == 71199                 // '$' 'for'\n     || lk == 72735                 // '$' 'from'\n     || lk == 73247                 // '$' 'ft-option'\n     || lk == 75295                 // '$' 'function'\n     || lk == 75807                 // '$' 'ge'\n     || lk == 76831                 // '$' 'group'\n     || lk == 77855                 // '$' 'gt'\n     || lk == 78367                 // '$' 'idiv'\n     || lk == 78879                 // '$' 'if'\n     || lk == 79391                 // '$' 'import'\n     || lk == 79903                 // '$' 'in'\n     || lk == 80415                 // '$' 'index'\n     || lk == 82463                 // '$' 'insert'\n     || lk == 82975                 // '$' 'instance'\n     || lk == 83487                 // '$' 'integrity'\n     || lk == 83999                 // '$' 'intersect'\n     || lk == 84511                 // '$' 'into'\n     || lk == 85023                 // '$' 'is'\n     || lk == 85535                 // '$' 'item'\n     || lk == 86047                 // '$' 'json'\n     || lk == 86559                 // '$' 'json-item'\n     || lk == 87071                 // '$' 'jsoniq'\n     || lk == 88607                 // '$' 'last'\n     || lk == 89119                 // '$' 'lax'\n     || lk == 89631                 // '$' 'le'\n     || lk == 90655                 // '$' 'let'\n     || lk == 91679                 // '$' 'loop'\n     || lk == 92703                 // '$' 'lt'\n     || lk == 93727                 // '$' 'mod'\n     || lk == 94239                 // '$' 'modify'\n     || lk == 94751                 // '$' 'module'\n     || lk == 95775                 // '$' 'namespace'\n     || lk == 96287                 // '$' 'namespace-node'\n     || lk == 96799                 // '$' 'ne'\n     || lk == 99359                 // '$' 'node'\n     || lk == 99871                 // '$' 'nodes'\n     || lk == 100895                // '$' 'null'\n     || lk == 101407                // '$' 'object'\n     || lk == 103455                // '$' 'only'\n     || lk == 103967                // '$' 'option'\n     || lk == 104479                // '$' 'or'\n     || lk == 104991                // '$' 'order'\n     || lk == 105503                // '$' 'ordered'\n     || lk == 106015                // '$' 'ordering'\n     || lk == 107551                // '$' 'parent'\n     || lk == 110623                // '$' 'preceding'\n     || lk == 111135                // '$' 'preceding-sibling'\n     || lk == 112671                // '$' 'processing-instruction'\n     || lk == 113695                // '$' 'rename'\n     || lk == 114207                // '$' 'replace'\n     || lk == 114719                // '$' 'return'\n     || lk == 115231                // '$' 'returning'\n     || lk == 115743                // '$' 'revalidation'\n     || lk == 116767                // '$' 'satisfies'\n     || lk == 117279                // '$' 'schema'\n     || lk == 117791                // '$' 'schema-attribute'\n     || lk == 118303                // '$' 'schema-element'\n     || lk == 118815                // '$' 'score'\n     || lk == 119327                // '$' 'select'\n     || lk == 119839                // '$' 'self'\n     || lk == 122399                // '$' 'sliding'\n     || lk == 122911                // '$' 'some'\n     || lk == 123423                // '$' 'stable'\n     || lk == 123935                // '$' 'start'\n     || lk == 125471                // '$' 'strict'\n     || lk == 126495                // '$' 'structured-item'\n     || lk == 127007                // '$' 'switch'\n     || lk == 127519                // '$' 'text'\n     || lk == 129567                // '$' 'to'\n     || lk == 130079                // '$' 'treat'\n     || lk == 130591                // '$' 'true'\n     || lk == 131103                // '$' 'try'\n     || lk == 131615                // '$' 'tumbling'\n     || lk == 132127                // '$' 'type'\n     || lk == 132639                // '$' 'typeswitch'\n     || lk == 133151                // '$' 'union'\n     || lk == 134175                // '$' 'unordered'\n     || lk == 134687                // '$' 'updating'\n     || lk == 136223                // '$' 'validate'\n     || lk == 136735                // '$' 'value'\n     || lk == 137247                // '$' 'variable'\n     || lk == 137759                // '$' 'version'\n     || lk == 139295                // '$' 'where'\n     || lk == 139807                // '$' 'while'\n     || lk == 141343)               // '$' 'with'\n    {\n      lk = memoized(2, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_GroupingVariable();\n          lookahead1W(205);         // S^WS | '(:' | ',' | ':=' | 'as' | 'collation' | 'count' | 'for' | 'group' |\n                                    // 'let' | 'order' | 'return' | 'stable' | 'where'\n          if (l1 == 53              // ':='\n           || l1 == 80)             // 'as'\n          {\n            if (l1 == 80)           // 'as'\n            {\n              try_TypeDeclaration();\n            }\n            lookahead1W(28);        // S^WS | '(:' | ':='\n            shiftT(53);             // ':='\n            lookahead1W(266);       // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n            try_ExprSingle();\n          }\n          if (l1 == 95)             // 'collation'\n          {\n            shiftT(95);             // 'collation'\n            lookahead1W(15);        // URILiteral | S^WS | '(:'\n            shiftT(7);              // URILiteral\n          }\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(2, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      parse_GroupingVariable();\n      lookahead1W(205);             // S^WS | '(:' | ',' | ':=' | 'as' | 'collation' | 'count' | 'for' | 'group' |\n                                    // 'let' | 'order' | 'return' | 'stable' | 'where'\n      if (l1 == 53                  // ':='\n       || l1 == 80)                 // 'as'\n      {\n        if (l1 == 80)               // 'as'\n        {\n          whitespace();\n          parse_TypeDeclaration();\n        }\n        lookahead1W(28);            // S^WS | '(:' | ':='\n        shift(53);                  // ':='\n        lookahead1W(266);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n        whitespace();\n        parse_ExprSingle();\n      }\n      if (l1 == 95)                 // 'collation'\n      {\n        shift(95);                  // 'collation'\n        lookahead1W(15);            // URILiteral | S^WS | '(:'\n        shift(7);                   // URILiteral\n      }\n      break;\n    default:\n      parse_ExprSingle();\n    }\n    eventHandler.endNonterminal(\"GroupingSpec\", e0);\n  }\n\n  function try_GroupingSpec()\n  {\n    switch (l1)\n    {\n    case 31:                        // '$'\n      lookahead2W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 3103                  // '$' EQName^Token\n     || lk == 36383                 // '$' 'after'\n     || lk == 37407                 // '$' 'allowing'\n     || lk == 37919                 // '$' 'ancestor'\n     || lk == 38431                 // '$' 'ancestor-or-self'\n     || lk == 38943                 // '$' 'and'\n     || lk == 39967                 // '$' 'append'\n     || lk == 40479                 // '$' 'array'\n     || lk == 40991                 // '$' 'as'\n     || lk == 41503                 // '$' 'ascending'\n     || lk == 42015                 // '$' 'at'\n     || lk == 42527                 // '$' 'attribute'\n     || lk == 43039                 // '$' 'base-uri'\n     || lk == 43551                 // '$' 'before'\n     || lk == 44063                 // '$' 'boundary-space'\n     || lk == 44575                 // '$' 'break'\n     || lk == 45599                 // '$' 'case'\n     || lk == 46111                 // '$' 'cast'\n     || lk == 46623                 // '$' 'castable'\n     || lk == 47135                 // '$' 'catch'\n     || lk == 48159                 // '$' 'child'\n     || lk == 48671                 // '$' 'collation'\n     || lk == 49695                 // '$' 'comment'\n     || lk == 50207                 // '$' 'constraint'\n     || lk == 50719                 // '$' 'construction'\n     || lk == 52255                 // '$' 'context'\n     || lk == 52767                 // '$' 'continue'\n     || lk == 53279                 // '$' 'copy'\n     || lk == 53791                 // '$' 'copy-namespaces'\n     || lk == 54303                 // '$' 'count'\n     || lk == 54815                 // '$' 'decimal-format'\n     || lk == 55839                 // '$' 'declare'\n     || lk == 56351                 // '$' 'default'\n     || lk == 56863                 // '$' 'delete'\n     || lk == 57375                 // '$' 'descendant'\n     || lk == 57887                 // '$' 'descendant-or-self'\n     || lk == 58399                 // '$' 'descending'\n     || lk == 60959                 // '$' 'div'\n     || lk == 61471                 // '$' 'document'\n     || lk == 61983                 // '$' 'document-node'\n     || lk == 62495                 // '$' 'element'\n     || lk == 63007                 // '$' 'else'\n     || lk == 63519                 // '$' 'empty'\n     || lk == 64031                 // '$' 'empty-sequence'\n     || lk == 64543                 // '$' 'encoding'\n     || lk == 65055                 // '$' 'end'\n     || lk == 66079                 // '$' 'eq'\n     || lk == 66591                 // '$' 'every'\n     || lk == 67615                 // '$' 'except'\n     || lk == 68127                 // '$' 'exit'\n     || lk == 68639                 // '$' 'external'\n     || lk == 69151                 // '$' 'false'\n     || lk == 69663                 // '$' 'first'\n     || lk == 70175                 // '$' 'following'\n     || lk == 70687                 // '$' 'following-sibling'\n     || lk == 71199                 // '$' 'for'\n     || lk == 72735                 // '$' 'from'\n     || lk == 73247                 // '$' 'ft-option'\n     || lk == 75295                 // '$' 'function'\n     || lk == 75807                 // '$' 'ge'\n     || lk == 76831                 // '$' 'group'\n     || lk == 77855                 // '$' 'gt'\n     || lk == 78367                 // '$' 'idiv'\n     || lk == 78879                 // '$' 'if'\n     || lk == 79391                 // '$' 'import'\n     || lk == 79903                 // '$' 'in'\n     || lk == 80415                 // '$' 'index'\n     || lk == 82463                 // '$' 'insert'\n     || lk == 82975                 // '$' 'instance'\n     || lk == 83487                 // '$' 'integrity'\n     || lk == 83999                 // '$' 'intersect'\n     || lk == 84511                 // '$' 'into'\n     || lk == 85023                 // '$' 'is'\n     || lk == 85535                 // '$' 'item'\n     || lk == 86047                 // '$' 'json'\n     || lk == 86559                 // '$' 'json-item'\n     || lk == 87071                 // '$' 'jsoniq'\n     || lk == 88607                 // '$' 'last'\n     || lk == 89119                 // '$' 'lax'\n     || lk == 89631                 // '$' 'le'\n     || lk == 90655                 // '$' 'let'\n     || lk == 91679                 // '$' 'loop'\n     || lk == 92703                 // '$' 'lt'\n     || lk == 93727                 // '$' 'mod'\n     || lk == 94239                 // '$' 'modify'\n     || lk == 94751                 // '$' 'module'\n     || lk == 95775                 // '$' 'namespace'\n     || lk == 96287                 // '$' 'namespace-node'\n     || lk == 96799                 // '$' 'ne'\n     || lk == 99359                 // '$' 'node'\n     || lk == 99871                 // '$' 'nodes'\n     || lk == 100895                // '$' 'null'\n     || lk == 101407                // '$' 'object'\n     || lk == 103455                // '$' 'only'\n     || lk == 103967                // '$' 'option'\n     || lk == 104479                // '$' 'or'\n     || lk == 104991                // '$' 'order'\n     || lk == 105503                // '$' 'ordered'\n     || lk == 106015                // '$' 'ordering'\n     || lk == 107551                // '$' 'parent'\n     || lk == 110623                // '$' 'preceding'\n     || lk == 111135                // '$' 'preceding-sibling'\n     || lk == 112671                // '$' 'processing-instruction'\n     || lk == 113695                // '$' 'rename'\n     || lk == 114207                // '$' 'replace'\n     || lk == 114719                // '$' 'return'\n     || lk == 115231                // '$' 'returning'\n     || lk == 115743                // '$' 'revalidation'\n     || lk == 116767                // '$' 'satisfies'\n     || lk == 117279                // '$' 'schema'\n     || lk == 117791                // '$' 'schema-attribute'\n     || lk == 118303                // '$' 'schema-element'\n     || lk == 118815                // '$' 'score'\n     || lk == 119327                // '$' 'select'\n     || lk == 119839                // '$' 'self'\n     || lk == 122399                // '$' 'sliding'\n     || lk == 122911                // '$' 'some'\n     || lk == 123423                // '$' 'stable'\n     || lk == 123935                // '$' 'start'\n     || lk == 125471                // '$' 'strict'\n     || lk == 126495                // '$' 'structured-item'\n     || lk == 127007                // '$' 'switch'\n     || lk == 127519                // '$' 'text'\n     || lk == 129567                // '$' 'to'\n     || lk == 130079                // '$' 'treat'\n     || lk == 130591                // '$' 'true'\n     || lk == 131103                // '$' 'try'\n     || lk == 131615                // '$' 'tumbling'\n     || lk == 132127                // '$' 'type'\n     || lk == 132639                // '$' 'typeswitch'\n     || lk == 133151                // '$' 'union'\n     || lk == 134175                // '$' 'unordered'\n     || lk == 134687                // '$' 'updating'\n     || lk == 136223                // '$' 'validate'\n     || lk == 136735                // '$' 'value'\n     || lk == 137247                // '$' 'variable'\n     || lk == 137759                // '$' 'version'\n     || lk == 139295                // '$' 'where'\n     || lk == 139807                // '$' 'while'\n     || lk == 141343)               // '$' 'with'\n    {\n      lk = memoized(2, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_GroupingVariable();\n          lookahead1W(205);         // S^WS | '(:' | ',' | ':=' | 'as' | 'collation' | 'count' | 'for' | 'group' |\n                                    // 'let' | 'order' | 'return' | 'stable' | 'where'\n          if (l1 == 53              // ':='\n           || l1 == 80)             // 'as'\n          {\n            if (l1 == 80)           // 'as'\n            {\n              try_TypeDeclaration();\n            }\n            lookahead1W(28);        // S^WS | '(:' | ':='\n            shiftT(53);             // ':='\n            lookahead1W(266);       // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n            try_ExprSingle();\n          }\n          if (l1 == 95)             // 'collation'\n          {\n            shiftT(95);             // 'collation'\n            lookahead1W(15);        // URILiteral | S^WS | '(:'\n            shiftT(7);              // URILiteral\n          }\n          memoize(2, e0A, -1);\n          lk = -3;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(2, e0A, -2);\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      try_GroupingVariable();\n      lookahead1W(205);             // S^WS | '(:' | ',' | ':=' | 'as' | 'collation' | 'count' | 'for' | 'group' |\n                                    // 'let' | 'order' | 'return' | 'stable' | 'where'\n      if (l1 == 53                  // ':='\n       || l1 == 80)                 // 'as'\n      {\n        if (l1 == 80)               // 'as'\n        {\n          try_TypeDeclaration();\n        }\n        lookahead1W(28);            // S^WS | '(:' | ':='\n        shiftT(53);                 // ':='\n        lookahead1W(266);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n        try_ExprSingle();\n      }\n      if (l1 == 95)                 // 'collation'\n      {\n        shiftT(95);                 // 'collation'\n        lookahead1W(15);            // URILiteral | S^WS | '(:'\n        shiftT(7);                  // URILiteral\n      }\n      break;\n    case -3:\n      break;\n    default:\n      try_ExprSingle();\n    }\n  }\n\n  function parse_GroupingVariable()\n  {\n    eventHandler.startNonterminal(\"GroupingVariable\", e0);\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    whitespace();\n    parse_VarName();\n    eventHandler.endNonterminal(\"GroupingVariable\", e0);\n  }\n\n  function try_GroupingVariable()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    try_VarName();\n  }\n\n  function parse_OrderByClause()\n  {\n    eventHandler.startNonterminal(\"OrderByClause\", e0);\n    switch (l1)\n    {\n    case 205:                       // 'order'\n      shift(205);                   // 'order'\n      lookahead1W(37);              // S^WS | '(:' | 'by'\n      shift(88);                    // 'by'\n      break;\n    default:\n      shift(241);                   // 'stable'\n      lookahead1W(70);              // S^WS | '(:' | 'order'\n      shift(205);                   // 'order'\n      lookahead1W(37);              // S^WS | '(:' | 'by'\n      shift(88);                    // 'by'\n    }\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_OrderSpecList();\n    eventHandler.endNonterminal(\"OrderByClause\", e0);\n  }\n\n  function try_OrderByClause()\n  {\n    switch (l1)\n    {\n    case 205:                       // 'order'\n      shiftT(205);                  // 'order'\n      lookahead1W(37);              // S^WS | '(:' | 'by'\n      shiftT(88);                   // 'by'\n      break;\n    default:\n      shiftT(241);                  // 'stable'\n      lookahead1W(70);              // S^WS | '(:' | 'order'\n      shiftT(205);                  // 'order'\n      lookahead1W(37);              // S^WS | '(:' | 'by'\n      shiftT(88);                   // 'by'\n    }\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_OrderSpecList();\n  }\n\n  function parse_OrderSpecList()\n  {\n    eventHandler.startNonterminal(\"OrderSpecList\", e0);\n    parse_OrderSpec();\n    for (;;)\n    {\n      lookahead1W(198);             // S^WS | '(:' | ',' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' |\n                                    // 'stable' | 'where'\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shift(42);                    // ','\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      whitespace();\n      parse_OrderSpec();\n    }\n    eventHandler.endNonterminal(\"OrderSpecList\", e0);\n  }\n\n  function try_OrderSpecList()\n  {\n    try_OrderSpec();\n    for (;;)\n    {\n      lookahead1W(198);             // S^WS | '(:' | ',' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' |\n                                    // 'stable' | 'where'\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shiftT(42);                   // ','\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      try_OrderSpec();\n    }\n  }\n\n  function parse_OrderSpec()\n  {\n    eventHandler.startNonterminal(\"OrderSpec\", e0);\n    parse_ExprSingle();\n    whitespace();\n    parse_OrderModifier();\n    eventHandler.endNonterminal(\"OrderSpec\", e0);\n  }\n\n  function try_OrderSpec()\n  {\n    try_ExprSingle();\n    try_OrderModifier();\n  }\n\n  function parse_OrderModifier()\n  {\n    eventHandler.startNonterminal(\"OrderModifier\", e0);\n    if (l1 == 81                    // 'ascending'\n     || l1 == 114)                  // 'descending'\n    {\n      switch (l1)\n      {\n      case 81:                      // 'ascending'\n        shift(81);                  // 'ascending'\n        break;\n      default:\n        shift(114);                 // 'descending'\n      }\n    }\n    lookahead1W(202);               // S^WS | '(:' | ',' | 'collation' | 'count' | 'empty' | 'for' | 'group' | 'let' |\n                                    // 'order' | 'return' | 'stable' | 'where'\n    if (l1 == 124)                  // 'empty'\n    {\n      shift(124);                   // 'empty'\n      lookahead1W(125);             // S^WS | '(:' | 'greatest' | 'least'\n      switch (l1)\n      {\n      case 149:                     // 'greatest'\n        shift(149);                 // 'greatest'\n        break;\n      default:\n        shift(176);                 // 'least'\n      }\n    }\n    lookahead1W(199);               // S^WS | '(:' | ',' | 'collation' | 'count' | 'for' | 'group' | 'let' | 'order' |\n                                    // 'return' | 'stable' | 'where'\n    if (l1 == 95)                   // 'collation'\n    {\n      shift(95);                    // 'collation'\n      lookahead1W(15);              // URILiteral | S^WS | '(:'\n      shift(7);                     // URILiteral\n    }\n    eventHandler.endNonterminal(\"OrderModifier\", e0);\n  }\n\n  function try_OrderModifier()\n  {\n    if (l1 == 81                    // 'ascending'\n     || l1 == 114)                  // 'descending'\n    {\n      switch (l1)\n      {\n      case 81:                      // 'ascending'\n        shiftT(81);                 // 'ascending'\n        break;\n      default:\n        shiftT(114);                // 'descending'\n      }\n    }\n    lookahead1W(202);               // S^WS | '(:' | ',' | 'collation' | 'count' | 'empty' | 'for' | 'group' | 'let' |\n                                    // 'order' | 'return' | 'stable' | 'where'\n    if (l1 == 124)                  // 'empty'\n    {\n      shiftT(124);                  // 'empty'\n      lookahead1W(125);             // S^WS | '(:' | 'greatest' | 'least'\n      switch (l1)\n      {\n      case 149:                     // 'greatest'\n        shiftT(149);                // 'greatest'\n        break;\n      default:\n        shiftT(176);                // 'least'\n      }\n    }\n    lookahead1W(199);               // S^WS | '(:' | ',' | 'collation' | 'count' | 'for' | 'group' | 'let' | 'order' |\n                                    // 'return' | 'stable' | 'where'\n    if (l1 == 95)                   // 'collation'\n    {\n      shiftT(95);                   // 'collation'\n      lookahead1W(15);              // URILiteral | S^WS | '(:'\n      shiftT(7);                    // URILiteral\n    }\n  }\n\n  function parse_ReturnClause()\n  {\n    eventHandler.startNonterminal(\"ReturnClause\", e0);\n    shift(224);                     // 'return'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"ReturnClause\", e0);\n  }\n\n  function try_ReturnClause()\n  {\n    shiftT(224);                    // 'return'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_ExprSingle();\n  }\n\n  function parse_QuantifiedExpr()\n  {\n    eventHandler.startNonterminal(\"QuantifiedExpr\", e0);\n    switch (l1)\n    {\n    case 240:                       // 'some'\n      shift(240);                   // 'some'\n      break;\n    default:\n      shift(130);                   // 'every'\n    }\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    whitespace();\n    parse_QuantifiedVarDecl();\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shift(42);                    // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      whitespace();\n      parse_QuantifiedVarDecl();\n    }\n    shift(228);                     // 'satisfies'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"QuantifiedExpr\", e0);\n  }\n\n  function try_QuantifiedExpr()\n  {\n    switch (l1)\n    {\n    case 240:                       // 'some'\n      shiftT(240);                  // 'some'\n      break;\n    default:\n      shiftT(130);                  // 'every'\n    }\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    try_QuantifiedVarDecl();\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shiftT(42);                   // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      try_QuantifiedVarDecl();\n    }\n    shiftT(228);                    // 'satisfies'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_ExprSingle();\n  }\n\n  function parse_QuantifiedVarDecl()\n  {\n    eventHandler.startNonterminal(\"QuantifiedVarDecl\", e0);\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    whitespace();\n    parse_VarName();\n    lookahead1W(114);               // S^WS | '(:' | 'as' | 'in'\n    if (l1 == 80)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    lookahead1W(56);                // S^WS | '(:' | 'in'\n    shift(156);                     // 'in'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"QuantifiedVarDecl\", e0);\n  }\n\n  function try_QuantifiedVarDecl()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    try_VarName();\n    lookahead1W(114);               // S^WS | '(:' | 'as' | 'in'\n    if (l1 == 80)                   // 'as'\n    {\n      try_TypeDeclaration();\n    }\n    lookahead1W(56);                // S^WS | '(:' | 'in'\n    shiftT(156);                    // 'in'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_ExprSingle();\n  }\n\n  function parse_SwitchExpr()\n  {\n    eventHandler.startNonterminal(\"SwitchExpr\", e0);\n    shift(248);                     // 'switch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_Expr();\n    shift(38);                      // ')'\n    for (;;)\n    {\n      lookahead1W(38);              // S^WS | '(:' | 'case'\n      whitespace();\n      parse_SwitchCaseClause();\n      if (l1 != 89)                 // 'case'\n      {\n        break;\n      }\n    }\n    shift(110);                     // 'default'\n    lookahead1W(73);                // S^WS | '(:' | 'return'\n    shift(224);                     // 'return'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"SwitchExpr\", e0);\n  }\n\n  function try_SwitchExpr()\n  {\n    shiftT(248);                    // 'switch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_Expr();\n    shiftT(38);                     // ')'\n    for (;;)\n    {\n      lookahead1W(38);              // S^WS | '(:' | 'case'\n      try_SwitchCaseClause();\n      if (l1 != 89)                 // 'case'\n      {\n        break;\n      }\n    }\n    shiftT(110);                    // 'default'\n    lookahead1W(73);                // S^WS | '(:' | 'return'\n    shiftT(224);                    // 'return'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_ExprSingle();\n  }\n\n  function parse_SwitchCaseClause()\n  {\n    eventHandler.startNonterminal(\"SwitchCaseClause\", e0);\n    for (;;)\n    {\n      shift(89);                    // 'case'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      whitespace();\n      parse_SwitchCaseOperand();\n      if (l1 != 89)                 // 'case'\n      {\n        break;\n      }\n    }\n    shift(224);                     // 'return'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"SwitchCaseClause\", e0);\n  }\n\n  function try_SwitchCaseClause()\n  {\n    for (;;)\n    {\n      shiftT(89);                   // 'case'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      try_SwitchCaseOperand();\n      if (l1 != 89)                 // 'case'\n      {\n        break;\n      }\n    }\n    shiftT(224);                    // 'return'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_ExprSingle();\n  }\n\n  function parse_SwitchCaseOperand()\n  {\n    eventHandler.startNonterminal(\"SwitchCaseOperand\", e0);\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"SwitchCaseOperand\", e0);\n  }\n\n  function try_SwitchCaseOperand()\n  {\n    try_ExprSingle();\n  }\n\n  function parse_TypeswitchExpr()\n  {\n    eventHandler.startNonterminal(\"TypeswitchExpr\", e0);\n    shift(259);                     // 'typeswitch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_Expr();\n    shift(38);                      // ')'\n    for (;;)\n    {\n      lookahead1W(38);              // S^WS | '(:' | 'case'\n      whitespace();\n      parse_CaseClause();\n      if (l1 != 89)                 // 'case'\n      {\n        break;\n      }\n    }\n    shift(110);                     // 'default'\n    lookahead1W(99);                // S^WS | '$' | '(:' | 'return'\n    if (l1 == 31)                   // '$'\n    {\n      shift(31);                    // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n      whitespace();\n      parse_VarName();\n    }\n    lookahead1W(73);                // S^WS | '(:' | 'return'\n    shift(224);                     // 'return'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"TypeswitchExpr\", e0);\n  }\n\n  function try_TypeswitchExpr()\n  {\n    shiftT(259);                    // 'typeswitch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_Expr();\n    shiftT(38);                     // ')'\n    for (;;)\n    {\n      lookahead1W(38);              // S^WS | '(:' | 'case'\n      try_CaseClause();\n      if (l1 != 89)                 // 'case'\n      {\n        break;\n      }\n    }\n    shiftT(110);                    // 'default'\n    lookahead1W(99);                // S^WS | '$' | '(:' | 'return'\n    if (l1 == 31)                   // '$'\n    {\n      shiftT(31);                   // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n      try_VarName();\n    }\n    lookahead1W(73);                // S^WS | '(:' | 'return'\n    shiftT(224);                    // 'return'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_ExprSingle();\n  }\n\n  function parse_CaseClause()\n  {\n    eventHandler.startNonterminal(\"CaseClause\", e0);\n    shift(89);                      // 'case'\n    lookahead1W(257);               // EQName^Token | S^WS | '$' | '%' | '(' | '(:' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    if (l1 == 31)                   // '$'\n    {\n      shift(31);                    // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n      whitespace();\n      parse_VarName();\n      lookahead1W(33);              // S^WS | '(:' | 'as'\n      shift(80);                    // 'as'\n    }\n    lookahead1W(253);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    whitespace();\n    parse_SequenceTypeUnion();\n    shift(224);                     // 'return'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"CaseClause\", e0);\n  }\n\n  function try_CaseClause()\n  {\n    shiftT(89);                     // 'case'\n    lookahead1W(257);               // EQName^Token | S^WS | '$' | '%' | '(' | '(:' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    if (l1 == 31)                   // '$'\n    {\n      shiftT(31);                   // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n      try_VarName();\n      lookahead1W(33);              // S^WS | '(:' | 'as'\n      shiftT(80);                   // 'as'\n    }\n    lookahead1W(253);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    try_SequenceTypeUnion();\n    shiftT(224);                    // 'return'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_ExprSingle();\n  }\n\n  function parse_SequenceTypeUnion()\n  {\n    eventHandler.startNonterminal(\"SequenceTypeUnion\", e0);\n    parse_SequenceType();\n    for (;;)\n    {\n      lookahead1W(138);             // S^WS | '(:' | 'return' | '|'\n      if (l1 != 284)                // '|'\n      {\n        break;\n      }\n      shift(284);                   // '|'\n      lookahead1W(253);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n      whitespace();\n      parse_SequenceType();\n    }\n    eventHandler.endNonterminal(\"SequenceTypeUnion\", e0);\n  }\n\n  function try_SequenceTypeUnion()\n  {\n    try_SequenceType();\n    for (;;)\n    {\n      lookahead1W(138);             // S^WS | '(:' | 'return' | '|'\n      if (l1 != 284)                // '|'\n      {\n        break;\n      }\n      shiftT(284);                  // '|'\n      lookahead1W(253);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n      try_SequenceType();\n    }\n  }\n\n  function parse_IfExpr()\n  {\n    eventHandler.startNonterminal(\"IfExpr\", e0);\n    shift(154);                     // 'if'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_Expr();\n    shift(38);                      // ')'\n    lookahead1W(80);                // S^WS | '(:' | 'then'\n    shift(250);                     // 'then'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    shift(123);                     // 'else'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"IfExpr\", e0);\n  }\n\n  function try_IfExpr()\n  {\n    shiftT(154);                    // 'if'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_Expr();\n    shiftT(38);                     // ')'\n    lookahead1W(80);                // S^WS | '(:' | 'then'\n    shiftT(250);                    // 'then'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_ExprSingle();\n    shiftT(123);                    // 'else'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_ExprSingle();\n  }\n\n  function parse_TryCatchExpr()\n  {\n    eventHandler.startNonterminal(\"TryCatchExpr\", e0);\n    parse_TryClause();\n    for (;;)\n    {\n      lookahead1W(39);              // S^WS | '(:' | 'catch'\n      whitespace();\n      parse_CatchClause();\n      lookahead1W(207);             // S^WS | EOF | '(:' | ')' | ',' | ':' | ';' | ']' | 'after' | 'as' | 'ascending' |\n                                    // 'at' | 'before' | 'case' | 'catch' | 'collation' | 'count' | 'default' |\n                                    // 'descending' | 'else' | 'empty' | 'end' | 'for' | 'group' | 'into' | 'let' |\n                                    // 'modify' | 'only' | 'order' | 'return' | 'satisfies' | 'stable' | 'start' |\n                                    // 'where' | 'with' | '|}' | '}'\n      if (l1 != 92)                 // 'catch'\n      {\n        break;\n      }\n    }\n    eventHandler.endNonterminal(\"TryCatchExpr\", e0);\n  }\n\n  function try_TryCatchExpr()\n  {\n    try_TryClause();\n    for (;;)\n    {\n      lookahead1W(39);              // S^WS | '(:' | 'catch'\n      try_CatchClause();\n      lookahead1W(207);             // S^WS | EOF | '(:' | ')' | ',' | ':' | ';' | ']' | 'after' | 'as' | 'ascending' |\n                                    // 'at' | 'before' | 'case' | 'catch' | 'collation' | 'count' | 'default' |\n                                    // 'descending' | 'else' | 'empty' | 'end' | 'for' | 'group' | 'into' | 'let' |\n                                    // 'modify' | 'only' | 'order' | 'return' | 'satisfies' | 'stable' | 'start' |\n                                    // 'where' | 'with' | '|}' | '}'\n      if (l1 != 92)                 // 'catch'\n      {\n        break;\n      }\n    }\n  }\n\n  function parse_TryClause()\n  {\n    eventHandler.startNonterminal(\"TryClause\", e0);\n    shift(256);                     // 'try'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shift(281);                     // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_TryTargetExpr();\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"TryClause\", e0);\n  }\n\n  function try_TryClause()\n  {\n    shiftT(256);                    // 'try'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shiftT(281);                    // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_TryTargetExpr();\n    shiftT(287);                    // '}'\n  }\n\n  function parse_TryTargetExpr()\n  {\n    eventHandler.startNonterminal(\"TryTargetExpr\", e0);\n    parse_Expr();\n    eventHandler.endNonterminal(\"TryTargetExpr\", e0);\n  }\n\n  function try_TryTargetExpr()\n  {\n    try_Expr();\n  }\n\n  function parse_CatchClause()\n  {\n    eventHandler.startNonterminal(\"CatchClause\", e0);\n    shift(92);                      // 'catch'\n    lookahead1W(248);               // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    whitespace();\n    parse_CatchErrorList();\n    shift(281);                     // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_Expr();\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"CatchClause\", e0);\n  }\n\n  function try_CatchClause()\n  {\n    shiftT(92);                     // 'catch'\n    lookahead1W(248);               // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    try_CatchErrorList();\n    shiftT(281);                    // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_Expr();\n    shiftT(287);                    // '}'\n  }\n\n  function parse_CatchErrorList()\n  {\n    eventHandler.startNonterminal(\"CatchErrorList\", e0);\n    parse_NameTest();\n    for (;;)\n    {\n      lookahead1W(140);             // S^WS | '(:' | '{' | '|'\n      if (l1 != 284)                // '|'\n      {\n        break;\n      }\n      shift(284);                   // '|'\n      lookahead1W(248);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n      whitespace();\n      parse_NameTest();\n    }\n    eventHandler.endNonterminal(\"CatchErrorList\", e0);\n  }\n\n  function try_CatchErrorList()\n  {\n    try_NameTest();\n    for (;;)\n    {\n      lookahead1W(140);             // S^WS | '(:' | '{' | '|'\n      if (l1 != 284)                // '|'\n      {\n        break;\n      }\n      shiftT(284);                  // '|'\n      lookahead1W(248);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n      try_NameTest();\n    }\n  }\n\n  function parse_OrExpr()\n  {\n    eventHandler.startNonterminal(\"OrExpr\", e0);\n    parse_AndExpr();\n    for (;;)\n    {\n      if (l1 != 204)                // 'or'\n      {\n        break;\n      }\n      shift(204);                   // 'or'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      whitespace();\n      parse_AndExpr();\n    }\n    eventHandler.endNonterminal(\"OrExpr\", e0);\n  }\n\n  function try_OrExpr()\n  {\n    try_AndExpr();\n    for (;;)\n    {\n      if (l1 != 204)                // 'or'\n      {\n        break;\n      }\n      shiftT(204);                  // 'or'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      try_AndExpr();\n    }\n  }\n\n  function parse_AndExpr()\n  {\n    eventHandler.startNonterminal(\"AndExpr\", e0);\n    parse_NotExpr();\n    for (;;)\n    {\n      if (l1 != 76)                 // 'and'\n      {\n        break;\n      }\n      shift(76);                    // 'and'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      whitespace();\n      parse_NotExpr();\n    }\n    eventHandler.endNonterminal(\"AndExpr\", e0);\n  }\n\n  function try_AndExpr()\n  {\n    try_NotExpr();\n    for (;;)\n    {\n      if (l1 != 76)                 // 'and'\n      {\n        break;\n      }\n      shiftT(76);                   // 'and'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      try_NotExpr();\n    }\n  }\n\n  function parse_NotExpr()\n  {\n    eventHandler.startNonterminal(\"NotExpr\", e0);\n    if (l1 == 196)                  // 'not'\n    {\n      shift(196);                   // 'not'\n    }\n    lookahead1W(265);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'structured-item' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' |\n                                    // 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' | 'value' |\n                                    // 'variable' | 'version' | 'where' | 'while' | 'with' | '{' | '{|'\n    whitespace();\n    parse_ComparisonExpr();\n    eventHandler.endNonterminal(\"NotExpr\", e0);\n  }\n\n  function try_NotExpr()\n  {\n    if (l1 == 196)                  // 'not'\n    {\n      shiftT(196);                  // 'not'\n    }\n    lookahead1W(265);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'structured-item' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' |\n                                    // 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' | 'value' |\n                                    // 'variable' | 'version' | 'where' | 'while' | 'with' | '{' | '{|'\n    try_ComparisonExpr();\n  }\n\n  function parse_ComparisonExpr()\n  {\n    eventHandler.startNonterminal(\"ComparisonExpr\", e0);\n    parse_FTContainsExpr();\n    if (l1 == 27                    // '!='\n     || l1 == 55                    // '<'\n     || l1 == 58                    // '<<'\n     || l1 == 59                    // '<='\n     || l1 == 61                    // '='\n     || l1 == 62                    // '>'\n     || l1 == 63                    // '>='\n     || l1 == 64                    // '>>'\n     || l1 == 129                   // 'eq'\n     || l1 == 148                   // 'ge'\n     || l1 == 152                   // 'gt'\n     || l1 == 166                   // 'is'\n     || l1 == 175                   // 'le'\n     || l1 == 181                   // 'lt'\n     || l1 == 189)                  // 'ne'\n    {\n      switch (l1)\n      {\n      case 129:                     // 'eq'\n      case 148:                     // 'ge'\n      case 152:                     // 'gt'\n      case 175:                     // 'le'\n      case 181:                     // 'lt'\n      case 189:                     // 'ne'\n        whitespace();\n        parse_ValueComp();\n        break;\n      case 58:                      // '<<'\n      case 64:                      // '>>'\n      case 166:                     // 'is'\n        whitespace();\n        parse_NodeComp();\n        break;\n      default:\n        whitespace();\n        parse_GeneralComp();\n      }\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'structured-item' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' |\n                                    // 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' | 'value' |\n                                    // 'variable' | 'version' | 'where' | 'while' | 'with' | '{' | '{|'\n      whitespace();\n      parse_FTContainsExpr();\n    }\n    eventHandler.endNonterminal(\"ComparisonExpr\", e0);\n  }\n\n  function try_ComparisonExpr()\n  {\n    try_FTContainsExpr();\n    if (l1 == 27                    // '!='\n     || l1 == 55                    // '<'\n     || l1 == 58                    // '<<'\n     || l1 == 59                    // '<='\n     || l1 == 61                    // '='\n     || l1 == 62                    // '>'\n     || l1 == 63                    // '>='\n     || l1 == 64                    // '>>'\n     || l1 == 129                   // 'eq'\n     || l1 == 148                   // 'ge'\n     || l1 == 152                   // 'gt'\n     || l1 == 166                   // 'is'\n     || l1 == 175                   // 'le'\n     || l1 == 181                   // 'lt'\n     || l1 == 189)                  // 'ne'\n    {\n      switch (l1)\n      {\n      case 129:                     // 'eq'\n      case 148:                     // 'ge'\n      case 152:                     // 'gt'\n      case 175:                     // 'le'\n      case 181:                     // 'lt'\n      case 189:                     // 'ne'\n        try_ValueComp();\n        break;\n      case 58:                      // '<<'\n      case 64:                      // '>>'\n      case 166:                     // 'is'\n        try_NodeComp();\n        break;\n      default:\n        try_GeneralComp();\n      }\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'structured-item' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' |\n                                    // 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' | 'value' |\n                                    // 'variable' | 'version' | 'where' | 'while' | 'with' | '{' | '{|'\n      try_FTContainsExpr();\n    }\n  }\n\n  function parse_FTContainsExpr()\n  {\n    eventHandler.startNonterminal(\"FTContainsExpr\", e0);\n    parse_StringConcatExpr();\n    if (l1 == 100)                  // 'contains'\n    {\n      shift(100);                   // 'contains'\n      lookahead1W(79);              // S^WS | '(:' | 'text'\n      shift(249);                   // 'text'\n      lookahead1W(177);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      whitespace();\n      parse_FTSelection();\n      if (l1 == 277)                // 'without'\n      {\n        whitespace();\n        parse_FTIgnoreOption();\n      }\n    }\n    eventHandler.endNonterminal(\"FTContainsExpr\", e0);\n  }\n\n  function try_FTContainsExpr()\n  {\n    try_StringConcatExpr();\n    if (l1 == 100)                  // 'contains'\n    {\n      shiftT(100);                  // 'contains'\n      lookahead1W(79);              // S^WS | '(:' | 'text'\n      shiftT(249);                  // 'text'\n      lookahead1W(177);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      try_FTSelection();\n      if (l1 == 277)                // 'without'\n      {\n        try_FTIgnoreOption();\n      }\n    }\n  }\n\n  function parse_StringConcatExpr()\n  {\n    eventHandler.startNonterminal(\"StringConcatExpr\", e0);\n    parse_RangeExpr();\n    for (;;)\n    {\n      if (l1 != 285)                // '||'\n      {\n        break;\n      }\n      shift(285);                   // '||'\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'structured-item' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' |\n                                    // 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' | 'value' |\n                                    // 'variable' | 'version' | 'where' | 'while' | 'with' | '{' | '{|'\n      whitespace();\n      parse_RangeExpr();\n    }\n    eventHandler.endNonterminal(\"StringConcatExpr\", e0);\n  }\n\n  function try_StringConcatExpr()\n  {\n    try_RangeExpr();\n    for (;;)\n    {\n      if (l1 != 285)                // '||'\n      {\n        break;\n      }\n      shiftT(285);                  // '||'\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'structured-item' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' |\n                                    // 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' | 'value' |\n                                    // 'variable' | 'version' | 'where' | 'while' | 'with' | '{' | '{|'\n      try_RangeExpr();\n    }\n  }\n\n  function parse_RangeExpr()\n  {\n    eventHandler.startNonterminal(\"RangeExpr\", e0);\n    parse_AdditiveExpr();\n    if (l1 == 253)                  // 'to'\n    {\n      shift(253);                   // 'to'\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'structured-item' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' |\n                                    // 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' | 'value' |\n                                    // 'variable' | 'version' | 'where' | 'while' | 'with' | '{' | '{|'\n      whitespace();\n      parse_AdditiveExpr();\n    }\n    eventHandler.endNonterminal(\"RangeExpr\", e0);\n  }\n\n  function try_RangeExpr()\n  {\n    try_AdditiveExpr();\n    if (l1 == 253)                  // 'to'\n    {\n      shiftT(253);                  // 'to'\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'structured-item' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' |\n                                    // 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' | 'value' |\n                                    // 'variable' | 'version' | 'where' | 'while' | 'with' | '{' | '{|'\n      try_AdditiveExpr();\n    }\n  }\n\n  function parse_AdditiveExpr()\n  {\n    eventHandler.startNonterminal(\"AdditiveExpr\", e0);\n    parse_MultiplicativeExpr();\n    for (;;)\n    {\n      if (l1 != 41                  // '+'\n       && l1 != 43)                 // '-'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 41:                      // '+'\n        shift(41);                  // '+'\n        break;\n      default:\n        shift(43);                  // '-'\n      }\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'structured-item' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' |\n                                    // 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' | 'value' |\n                                    // 'variable' | 'version' | 'where' | 'while' | 'with' | '{' | '{|'\n      whitespace();\n      parse_MultiplicativeExpr();\n    }\n    eventHandler.endNonterminal(\"AdditiveExpr\", e0);\n  }\n\n  function try_AdditiveExpr()\n  {\n    try_MultiplicativeExpr();\n    for (;;)\n    {\n      if (l1 != 41                  // '+'\n       && l1 != 43)                 // '-'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 41:                      // '+'\n        shiftT(41);                 // '+'\n        break;\n      default:\n        shiftT(43);                 // '-'\n      }\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'structured-item' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' |\n                                    // 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' | 'value' |\n                                    // 'variable' | 'version' | 'where' | 'while' | 'with' | '{' | '{|'\n      try_MultiplicativeExpr();\n    }\n  }\n\n  function parse_MultiplicativeExpr()\n  {\n    eventHandler.startNonterminal(\"MultiplicativeExpr\", e0);\n    parse_UnionExpr();\n    for (;;)\n    {\n      if (l1 != 39                  // '*'\n       && l1 != 119                 // 'div'\n       && l1 != 153                 // 'idiv'\n       && l1 != 183)                // 'mod'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 39:                      // '*'\n        shift(39);                  // '*'\n        break;\n      case 119:                     // 'div'\n        shift(119);                 // 'div'\n        break;\n      case 153:                     // 'idiv'\n        shift(153);                 // 'idiv'\n        break;\n      default:\n        shift(183);                 // 'mod'\n      }\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'structured-item' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' |\n                                    // 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' | 'value' |\n                                    // 'variable' | 'version' | 'where' | 'while' | 'with' | '{' | '{|'\n      whitespace();\n      parse_UnionExpr();\n    }\n    eventHandler.endNonterminal(\"MultiplicativeExpr\", e0);\n  }\n\n  function try_MultiplicativeExpr()\n  {\n    try_UnionExpr();\n    for (;;)\n    {\n      if (l1 != 39                  // '*'\n       && l1 != 119                 // 'div'\n       && l1 != 153                 // 'idiv'\n       && l1 != 183)                // 'mod'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 39:                      // '*'\n        shiftT(39);                 // '*'\n        break;\n      case 119:                     // 'div'\n        shiftT(119);                // 'div'\n        break;\n      case 153:                     // 'idiv'\n        shiftT(153);                // 'idiv'\n        break;\n      default:\n        shiftT(183);                // 'mod'\n      }\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'structured-item' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' |\n                                    // 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' | 'value' |\n                                    // 'variable' | 'version' | 'where' | 'while' | 'with' | '{' | '{|'\n      try_UnionExpr();\n    }\n  }\n\n  function parse_UnionExpr()\n  {\n    eventHandler.startNonterminal(\"UnionExpr\", e0);\n    parse_IntersectExceptExpr();\n    for (;;)\n    {\n      if (l1 != 260                 // 'union'\n       && l1 != 284)                // '|'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 260:                     // 'union'\n        shift(260);                 // 'union'\n        break;\n      default:\n        shift(284);                 // '|'\n      }\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'structured-item' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' |\n                                    // 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' | 'value' |\n                                    // 'variable' | 'version' | 'where' | 'while' | 'with' | '{' | '{|'\n      whitespace();\n      parse_IntersectExceptExpr();\n    }\n    eventHandler.endNonterminal(\"UnionExpr\", e0);\n  }\n\n  function try_UnionExpr()\n  {\n    try_IntersectExceptExpr();\n    for (;;)\n    {\n      if (l1 != 260                 // 'union'\n       && l1 != 284)                // '|'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 260:                     // 'union'\n        shiftT(260);                // 'union'\n        break;\n      default:\n        shiftT(284);                // '|'\n      }\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'structured-item' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' |\n                                    // 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' | 'value' |\n                                    // 'variable' | 'version' | 'where' | 'while' | 'with' | '{' | '{|'\n      try_IntersectExceptExpr();\n    }\n  }\n\n  function parse_IntersectExceptExpr()\n  {\n    eventHandler.startNonterminal(\"IntersectExceptExpr\", e0);\n    parse_InstanceofExpr();\n    for (;;)\n    {\n      lookahead1W(221);             // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n                                    // '<=' | '=' | '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' |\n                                    // 'at' | 'before' | 'case' | 'collation' | 'contains' | 'count' | 'default' |\n                                    // 'descending' | 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' |\n                                    // 'ge' | 'group' | 'gt' | 'idiv' | 'intersect' | 'into' | 'is' | 'le' | 'let' |\n                                    // 'lt' | 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' |\n                                    // 'return' | 'satisfies' | 'sentences' | 'stable' | 'start' | 'times' | 'to' |\n                                    // 'union' | 'where' | 'with' | 'words' | '|' | '||' | '|}' | '}'\n      if (l1 != 132                 // 'except'\n       && l1 != 164)                // 'intersect'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 164:                     // 'intersect'\n        shift(164);                 // 'intersect'\n        break;\n      default:\n        shift(132);                 // 'except'\n      }\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'structured-item' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' |\n                                    // 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' | 'value' |\n                                    // 'variable' | 'version' | 'where' | 'while' | 'with' | '{' | '{|'\n      whitespace();\n      parse_InstanceofExpr();\n    }\n    eventHandler.endNonterminal(\"IntersectExceptExpr\", e0);\n  }\n\n  function try_IntersectExceptExpr()\n  {\n    try_InstanceofExpr();\n    for (;;)\n    {\n      lookahead1W(221);             // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n                                    // '<=' | '=' | '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' |\n                                    // 'at' | 'before' | 'case' | 'collation' | 'contains' | 'count' | 'default' |\n                                    // 'descending' | 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' |\n                                    // 'ge' | 'group' | 'gt' | 'idiv' | 'intersect' | 'into' | 'is' | 'le' | 'let' |\n                                    // 'lt' | 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' |\n                                    // 'return' | 'satisfies' | 'sentences' | 'stable' | 'start' | 'times' | 'to' |\n                                    // 'union' | 'where' | 'with' | 'words' | '|' | '||' | '|}' | '}'\n      if (l1 != 132                 // 'except'\n       && l1 != 164)                // 'intersect'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 164:                     // 'intersect'\n        shiftT(164);                // 'intersect'\n        break;\n      default:\n        shiftT(132);                // 'except'\n      }\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'structured-item' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' |\n                                    // 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' | 'value' |\n                                    // 'variable' | 'version' | 'where' | 'while' | 'with' | '{' | '{|'\n      try_InstanceofExpr();\n    }\n  }\n\n  function parse_InstanceofExpr()\n  {\n    eventHandler.startNonterminal(\"InstanceofExpr\", e0);\n    parse_TreatExpr();\n    lookahead1W(222);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n                                    // '<=' | '=' | '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' |\n                                    // 'at' | 'before' | 'case' | 'collation' | 'contains' | 'count' | 'default' |\n                                    // 'descending' | 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' |\n                                    // 'ge' | 'group' | 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' |\n                                    // 'le' | 'let' | 'lt' | 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' |\n                                    // 'paragraphs' | 'return' | 'satisfies' | 'sentences' | 'stable' | 'start' |\n                                    // 'times' | 'to' | 'union' | 'where' | 'with' | 'words' | '|' | '||' | '|}' | '}'\n    if (l1 == 162)                  // 'instance'\n    {\n      shift(162);                   // 'instance'\n      lookahead1W(67);              // S^WS | '(:' | 'of'\n      shift(200);                   // 'of'\n      lookahead1W(253);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n      whitespace();\n      parse_SequenceType();\n    }\n    eventHandler.endNonterminal(\"InstanceofExpr\", e0);\n  }\n\n  function try_InstanceofExpr()\n  {\n    try_TreatExpr();\n    lookahead1W(222);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n                                    // '<=' | '=' | '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' |\n                                    // 'at' | 'before' | 'case' | 'collation' | 'contains' | 'count' | 'default' |\n                                    // 'descending' | 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' |\n                                    // 'ge' | 'group' | 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' |\n                                    // 'le' | 'let' | 'lt' | 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' |\n                                    // 'paragraphs' | 'return' | 'satisfies' | 'sentences' | 'stable' | 'start' |\n                                    // 'times' | 'to' | 'union' | 'where' | 'with' | 'words' | '|' | '||' | '|}' | '}'\n    if (l1 == 162)                  // 'instance'\n    {\n      shiftT(162);                  // 'instance'\n      lookahead1W(67);              // S^WS | '(:' | 'of'\n      shiftT(200);                  // 'of'\n      lookahead1W(253);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n      try_SequenceType();\n    }\n  }\n\n  function parse_TreatExpr()\n  {\n    eventHandler.startNonterminal(\"TreatExpr\", e0);\n    parse_CastableExpr();\n    lookahead1W(223);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n                                    // '<=' | '=' | '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' |\n                                    // 'at' | 'before' | 'case' | 'collation' | 'contains' | 'count' | 'default' |\n                                    // 'descending' | 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' |\n                                    // 'ge' | 'group' | 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' |\n                                    // 'le' | 'let' | 'lt' | 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' |\n                                    // 'paragraphs' | 'return' | 'satisfies' | 'sentences' | 'stable' | 'start' |\n                                    // 'times' | 'to' | 'treat' | 'union' | 'where' | 'with' | 'words' | '|' | '||' |\n                                    // '|}' | '}'\n    if (l1 == 254)                  // 'treat'\n    {\n      shift(254);                   // 'treat'\n      lookahead1W(33);              // S^WS | '(:' | 'as'\n      shift(80);                    // 'as'\n      lookahead1W(253);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n      whitespace();\n      parse_SequenceType();\n    }\n    eventHandler.endNonterminal(\"TreatExpr\", e0);\n  }\n\n  function try_TreatExpr()\n  {\n    try_CastableExpr();\n    lookahead1W(223);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n                                    // '<=' | '=' | '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' |\n                                    // 'at' | 'before' | 'case' | 'collation' | 'contains' | 'count' | 'default' |\n                                    // 'descending' | 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' |\n                                    // 'ge' | 'group' | 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' |\n                                    // 'le' | 'let' | 'lt' | 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' |\n                                    // 'paragraphs' | 'return' | 'satisfies' | 'sentences' | 'stable' | 'start' |\n                                    // 'times' | 'to' | 'treat' | 'union' | 'where' | 'with' | 'words' | '|' | '||' |\n                                    // '|}' | '}'\n    if (l1 == 254)                  // 'treat'\n    {\n      shiftT(254);                  // 'treat'\n      lookahead1W(33);              // S^WS | '(:' | 'as'\n      shiftT(80);                   // 'as'\n      lookahead1W(253);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n      try_SequenceType();\n    }\n  }\n\n  function parse_CastableExpr()\n  {\n    eventHandler.startNonterminal(\"CastableExpr\", e0);\n    parse_CastExpr();\n    lookahead1W(224);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n                                    // '<=' | '=' | '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' |\n                                    // 'at' | 'before' | 'case' | 'castable' | 'collation' | 'contains' | 'count' |\n                                    // 'default' | 'descending' | 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' |\n                                    // 'for' | 'ge' | 'group' | 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' |\n                                    // 'is' | 'le' | 'let' | 'lt' | 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' |\n                                    // 'paragraphs' | 'return' | 'satisfies' | 'sentences' | 'stable' | 'start' |\n                                    // 'times' | 'to' | 'treat' | 'union' | 'where' | 'with' | 'words' | '|' | '||' |\n                                    // '|}' | '}'\n    if (l1 == 91)                   // 'castable'\n    {\n      shift(91);                    // 'castable'\n      lookahead1W(33);              // S^WS | '(:' | 'as'\n      shift(80);                    // 'as'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n      whitespace();\n      parse_SingleType();\n    }\n    eventHandler.endNonterminal(\"CastableExpr\", e0);\n  }\n\n  function try_CastableExpr()\n  {\n    try_CastExpr();\n    lookahead1W(224);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n                                    // '<=' | '=' | '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' |\n                                    // 'at' | 'before' | 'case' | 'castable' | 'collation' | 'contains' | 'count' |\n                                    // 'default' | 'descending' | 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' |\n                                    // 'for' | 'ge' | 'group' | 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' |\n                                    // 'is' | 'le' | 'let' | 'lt' | 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' |\n                                    // 'paragraphs' | 'return' | 'satisfies' | 'sentences' | 'stable' | 'start' |\n                                    // 'times' | 'to' | 'treat' | 'union' | 'where' | 'with' | 'words' | '|' | '||' |\n                                    // '|}' | '}'\n    if (l1 == 91)                   // 'castable'\n    {\n      shiftT(91);                   // 'castable'\n      lookahead1W(33);              // S^WS | '(:' | 'as'\n      shiftT(80);                   // 'as'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n      try_SingleType();\n    }\n  }\n\n  function parse_CastExpr()\n  {\n    eventHandler.startNonterminal(\"CastExpr\", e0);\n    parse_UnaryExpr();\n    lookahead1W(226);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n                                    // '<=' | '=' | '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' |\n                                    // 'at' | 'before' | 'case' | 'cast' | 'castable' | 'collation' | 'contains' |\n                                    // 'count' | 'default' | 'descending' | 'div' | 'else' | 'empty' | 'end' | 'eq' |\n                                    // 'except' | 'for' | 'ge' | 'group' | 'gt' | 'idiv' | 'instance' | 'intersect' |\n                                    // 'into' | 'is' | 'le' | 'let' | 'lt' | 'mod' | 'modify' | 'ne' | 'only' | 'or' |\n                                    // 'order' | 'paragraphs' | 'return' | 'satisfies' | 'sentences' | 'stable' |\n                                    // 'start' | 'times' | 'to' | 'treat' | 'union' | 'where' | 'with' | 'words' | '|' |\n                                    // '||' | '|}' | '}'\n    if (l1 == 90)                   // 'cast'\n    {\n      shift(90);                    // 'cast'\n      lookahead1W(33);              // S^WS | '(:' | 'as'\n      shift(80);                    // 'as'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n      whitespace();\n      parse_SingleType();\n    }\n    eventHandler.endNonterminal(\"CastExpr\", e0);\n  }\n\n  function try_CastExpr()\n  {\n    try_UnaryExpr();\n    lookahead1W(226);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n                                    // '<=' | '=' | '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' |\n                                    // 'at' | 'before' | 'case' | 'cast' | 'castable' | 'collation' | 'contains' |\n                                    // 'count' | 'default' | 'descending' | 'div' | 'else' | 'empty' | 'end' | 'eq' |\n                                    // 'except' | 'for' | 'ge' | 'group' | 'gt' | 'idiv' | 'instance' | 'intersect' |\n                                    // 'into' | 'is' | 'le' | 'let' | 'lt' | 'mod' | 'modify' | 'ne' | 'only' | 'or' |\n                                    // 'order' | 'paragraphs' | 'return' | 'satisfies' | 'sentences' | 'stable' |\n                                    // 'start' | 'times' | 'to' | 'treat' | 'union' | 'where' | 'with' | 'words' | '|' |\n                                    // '||' | '|}' | '}'\n    if (l1 == 90)                   // 'cast'\n    {\n      shiftT(90);                   // 'cast'\n      lookahead1W(33);              // S^WS | '(:' | 'as'\n      shiftT(80);                   // 'as'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n      try_SingleType();\n    }\n  }\n\n  function parse_UnaryExpr()\n  {\n    eventHandler.startNonterminal(\"UnaryExpr\", e0);\n    for (;;)\n    {\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'structured-item' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' |\n                                    // 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' | 'value' |\n                                    // 'variable' | 'version' | 'where' | 'while' | 'with' | '{' | '{|'\n      if (l1 != 41                  // '+'\n       && l1 != 43)                 // '-'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 43:                      // '-'\n        shift(43);                  // '-'\n        break;\n      default:\n        shift(41);                  // '+'\n      }\n    }\n    whitespace();\n    parse_ValueExpr();\n    eventHandler.endNonterminal(\"UnaryExpr\", e0);\n  }\n\n  function try_UnaryExpr()\n  {\n    for (;;)\n    {\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'structured-item' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' |\n                                    // 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' | 'value' |\n                                    // 'variable' | 'version' | 'where' | 'while' | 'with' | '{' | '{|'\n      if (l1 != 41                  // '+'\n       && l1 != 43)                 // '-'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 43:                      // '-'\n        shiftT(43);                 // '-'\n        break;\n      default:\n        shiftT(41);                 // '+'\n      }\n    }\n    try_ValueExpr();\n  }\n\n  function parse_ValueExpr()\n  {\n    eventHandler.startNonterminal(\"ValueExpr\", e0);\n    switch (l1)\n    {\n    case 266:                       // 'validate'\n      lookahead2W(188);             // S^WS | '#' | '(' | '(:' | 'lax' | 'strict' | 'type' | '{'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 89354:                     // 'validate' 'lax'\n    case 125706:                    // 'validate' 'strict'\n    case 132362:                    // 'validate' 'type'\n    case 144138:                    // 'validate' '{'\n      parse_ValidateExpr();\n      break;\n    case 36:                        // '(#'\n      parse_ExtensionExpr();\n      break;\n    default:\n      parse_SimpleMapExpr();\n    }\n    eventHandler.endNonterminal(\"ValueExpr\", e0);\n  }\n\n  function try_ValueExpr()\n  {\n    switch (l1)\n    {\n    case 266:                       // 'validate'\n      lookahead2W(188);             // S^WS | '#' | '(' | '(:' | 'lax' | 'strict' | 'type' | '{'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 89354:                     // 'validate' 'lax'\n    case 125706:                    // 'validate' 'strict'\n    case 132362:                    // 'validate' 'type'\n    case 144138:                    // 'validate' '{'\n      try_ValidateExpr();\n      break;\n    case 36:                        // '(#'\n      try_ExtensionExpr();\n      break;\n    default:\n      try_SimpleMapExpr();\n    }\n  }\n\n  function parse_SimpleMapExpr()\n  {\n    eventHandler.startNonterminal(\"SimpleMapExpr\", e0);\n    parse_PathExpr();\n    for (;;)\n    {\n      if (l1 != 26)                 // '!'\n      {\n        break;\n      }\n      shift(26);                    // '!'\n      lookahead1W(262);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(:' | '/' | '//' | '<' | '<!--' | '<?' | '[' |\n                                    // 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' |\n                                    // 'array' | 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'false' | 'first' | 'following' | 'following-sibling' |\n                                    // 'for' | 'from' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' |\n                                    // 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'json-item' | 'jsoniq' | 'last' |\n                                    // 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' |\n                                    // 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' | 'sliding' |\n                                    // 'some' | 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' |\n                                    // 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | '{' | '{|'\n      whitespace();\n      parse_PathExpr();\n    }\n    eventHandler.endNonterminal(\"SimpleMapExpr\", e0);\n  }\n\n  function try_SimpleMapExpr()\n  {\n    try_PathExpr();\n    for (;;)\n    {\n      if (l1 != 26)                 // '!'\n      {\n        break;\n      }\n      shiftT(26);                   // '!'\n      lookahead1W(262);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(:' | '/' | '//' | '<' | '<!--' | '<?' | '[' |\n                                    // 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' |\n                                    // 'array' | 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'false' | 'first' | 'following' | 'following-sibling' |\n                                    // 'for' | 'from' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' |\n                                    // 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'json-item' | 'jsoniq' | 'last' |\n                                    // 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' |\n                                    // 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' | 'sliding' |\n                                    // 'some' | 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' |\n                                    // 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | '{' | '{|'\n      try_PathExpr();\n    }\n  }\n\n  function parse_GeneralComp()\n  {\n    eventHandler.startNonterminal(\"GeneralComp\", e0);\n    switch (l1)\n    {\n    case 61:                        // '='\n      shift(61);                    // '='\n      break;\n    case 27:                        // '!='\n      shift(27);                    // '!='\n      break;\n    case 55:                        // '<'\n      shift(55);                    // '<'\n      break;\n    case 59:                        // '<='\n      shift(59);                    // '<='\n      break;\n    case 62:                        // '>'\n      shift(62);                    // '>'\n      break;\n    default:\n      shift(63);                    // '>='\n    }\n    eventHandler.endNonterminal(\"GeneralComp\", e0);\n  }\n\n  function try_GeneralComp()\n  {\n    switch (l1)\n    {\n    case 61:                        // '='\n      shiftT(61);                   // '='\n      break;\n    case 27:                        // '!='\n      shiftT(27);                   // '!='\n      break;\n    case 55:                        // '<'\n      shiftT(55);                   // '<'\n      break;\n    case 59:                        // '<='\n      shiftT(59);                   // '<='\n      break;\n    case 62:                        // '>'\n      shiftT(62);                   // '>'\n      break;\n    default:\n      shiftT(63);                   // '>='\n    }\n  }\n\n  function parse_ValueComp()\n  {\n    eventHandler.startNonterminal(\"ValueComp\", e0);\n    switch (l1)\n    {\n    case 129:                       // 'eq'\n      shift(129);                   // 'eq'\n      break;\n    case 189:                       // 'ne'\n      shift(189);                   // 'ne'\n      break;\n    case 181:                       // 'lt'\n      shift(181);                   // 'lt'\n      break;\n    case 175:                       // 'le'\n      shift(175);                   // 'le'\n      break;\n    case 152:                       // 'gt'\n      shift(152);                   // 'gt'\n      break;\n    default:\n      shift(148);                   // 'ge'\n    }\n    eventHandler.endNonterminal(\"ValueComp\", e0);\n  }\n\n  function try_ValueComp()\n  {\n    switch (l1)\n    {\n    case 129:                       // 'eq'\n      shiftT(129);                  // 'eq'\n      break;\n    case 189:                       // 'ne'\n      shiftT(189);                  // 'ne'\n      break;\n    case 181:                       // 'lt'\n      shiftT(181);                  // 'lt'\n      break;\n    case 175:                       // 'le'\n      shiftT(175);                  // 'le'\n      break;\n    case 152:                       // 'gt'\n      shiftT(152);                  // 'gt'\n      break;\n    default:\n      shiftT(148);                  // 'ge'\n    }\n  }\n\n  function parse_NodeComp()\n  {\n    eventHandler.startNonterminal(\"NodeComp\", e0);\n    switch (l1)\n    {\n    case 166:                       // 'is'\n      shift(166);                   // 'is'\n      break;\n    case 58:                        // '<<'\n      shift(58);                    // '<<'\n      break;\n    default:\n      shift(64);                    // '>>'\n    }\n    eventHandler.endNonterminal(\"NodeComp\", e0);\n  }\n\n  function try_NodeComp()\n  {\n    switch (l1)\n    {\n    case 166:                       // 'is'\n      shiftT(166);                  // 'is'\n      break;\n    case 58:                        // '<<'\n      shiftT(58);                   // '<<'\n      break;\n    default:\n      shiftT(64);                   // '>>'\n    }\n  }\n\n  function parse_ValidateExpr()\n  {\n    eventHandler.startNonterminal(\"ValidateExpr\", e0);\n    shift(266);                     // 'validate'\n    lookahead1W(175);               // S^WS | '(:' | 'lax' | 'strict' | 'type' | '{'\n    if (l1 != 281)                  // '{'\n    {\n      switch (l1)\n      {\n      case 258:                     // 'type'\n        shift(258);                 // 'type'\n        lookahead1W(245);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n        whitespace();\n        parse_TypeName();\n        break;\n      default:\n        whitespace();\n        parse_ValidationMode();\n      }\n    }\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shift(281);                     // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_Expr();\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"ValidateExpr\", e0);\n  }\n\n  function try_ValidateExpr()\n  {\n    shiftT(266);                    // 'validate'\n    lookahead1W(175);               // S^WS | '(:' | 'lax' | 'strict' | 'type' | '{'\n    if (l1 != 281)                  // '{'\n    {\n      switch (l1)\n      {\n      case 258:                     // 'type'\n        shiftT(258);                // 'type'\n        lookahead1W(245);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n        try_TypeName();\n        break;\n      default:\n        try_ValidationMode();\n      }\n    }\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shiftT(281);                    // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_Expr();\n    shiftT(287);                    // '}'\n  }\n\n  function parse_ValidationMode()\n  {\n    eventHandler.startNonterminal(\"ValidationMode\", e0);\n    switch (l1)\n    {\n    case 174:                       // 'lax'\n      shift(174);                   // 'lax'\n      break;\n    default:\n      shift(245);                   // 'strict'\n    }\n    eventHandler.endNonterminal(\"ValidationMode\", e0);\n  }\n\n  function try_ValidationMode()\n  {\n    switch (l1)\n    {\n    case 174:                       // 'lax'\n      shiftT(174);                  // 'lax'\n      break;\n    default:\n      shiftT(245);                  // 'strict'\n    }\n  }\n\n  function parse_ExtensionExpr()\n  {\n    eventHandler.startNonterminal(\"ExtensionExpr\", e0);\n    for (;;)\n    {\n      whitespace();\n      parse_Pragma();\n      lookahead1W(104);             // S^WS | '(#' | '(:' | '{'\n      if (l1 != 36)                 // '(#'\n      {\n        break;\n      }\n    }\n    shift(281);                     // '{'\n    lookahead1W(274);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|' | '}'\n    if (l1 != 287)                  // '}'\n    {\n      whitespace();\n      parse_Expr();\n    }\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"ExtensionExpr\", e0);\n  }\n\n  function try_ExtensionExpr()\n  {\n    for (;;)\n    {\n      try_Pragma();\n      lookahead1W(104);             // S^WS | '(#' | '(:' | '{'\n      if (l1 != 36)                 // '(#'\n      {\n        break;\n      }\n    }\n    shiftT(281);                    // '{'\n    lookahead1W(274);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|' | '}'\n    if (l1 != 287)                  // '}'\n    {\n      try_Expr();\n    }\n    shiftT(287);                    // '}'\n  }\n\n  function parse_Pragma()\n  {\n    eventHandler.startNonterminal(\"Pragma\", e0);\n    shift(36);                      // '(#'\n    lookahead1(242);                // EQName^Token | S | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'structured-item' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' |\n                                    // 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' | 'value' |\n                                    // 'variable' | 'version' | 'where' | 'while' | 'with'\n    if (l1 == 21)                   // S\n    {\n      shift(21);                    // S\n    }\n    parse_EQName();\n    lookahead1(10);                 // S | '#)'\n    if (l1 == 21)                   // S\n    {\n      shift(21);                    // S\n      lookahead1(0);                // PragmaContents\n      shift(1);                     // PragmaContents\n    }\n    lookahead1(5);                  // '#)'\n    shift(30);                      // '#)'\n    eventHandler.endNonterminal(\"Pragma\", e0);\n  }\n\n  function try_Pragma()\n  {\n    shiftT(36);                     // '(#'\n    lookahead1(242);                // EQName^Token | S | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'structured-item' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' |\n                                    // 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' | 'value' |\n                                    // 'variable' | 'version' | 'where' | 'while' | 'with'\n    if (l1 == 21)                   // S\n    {\n      shiftT(21);                   // S\n    }\n    try_EQName();\n    lookahead1(10);                 // S | '#)'\n    if (l1 == 21)                   // S\n    {\n      shiftT(21);                   // S\n      lookahead1(0);                // PragmaContents\n      shiftT(1);                    // PragmaContents\n    }\n    lookahead1(5);                  // '#)'\n    shiftT(30);                     // '#)'\n  }\n\n  function parse_PathExpr()\n  {\n    eventHandler.startNonterminal(\"PathExpr\", e0);\n    switch (l1)\n    {\n    case 47:                        // '/'\n      shift(47);                    // '/'\n      lookahead1W(288);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | EOF | '!' | '!=' | '$' | '$$' | '%' | '(' | '(:' | ')' | '*' | '+' | ',' |\n                                    // '-' | ':' | ';' | '<' | '<!--' | '<<' | '<=' | '<?' | '=' | '>' | '>=' | '>>' |\n                                    // '[' | ']' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' |\n                                    // 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' |\n                                    // 'before' | 'boundary-space' | 'break' | 'by' | 'case' | 'cast' | 'castable' |\n                                    // 'catch' | 'child' | 'collation' | 'comment' | 'constraint' | 'construction' |\n                                    // 'contains' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'paragraphs' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sentences' | 'sliding' | 'some' | 'stable' |\n                                    // 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'times' | 'to' |\n                                    // 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | 'words' | '{' | '{|' | '|' | '||' | '|}' | '}'\n      switch (l1)\n      {\n      case 25:                      // EOF\n      case 26:                      // '!'\n      case 27:                      // '!='\n      case 38:                      // ')'\n      case 39:                      // '*'\n      case 41:                      // '+'\n      case 42:                      // ','\n      case 43:                      // '-'\n      case 50:                      // ':'\n      case 54:                      // ';'\n      case 58:                      // '<<'\n      case 59:                      // '<='\n      case 61:                      // '='\n      case 62:                      // '>'\n      case 63:                      // '>='\n      case 64:                      // '>>'\n      case 70:                      // ']'\n      case 88:                      // 'by'\n      case 100:                     // 'contains'\n      case 209:                     // 'paragraphs'\n      case 237:                     // 'sentences'\n      case 252:                     // 'times'\n      case 279:                     // 'words'\n      case 284:                     // '|'\n      case 285:                     // '||'\n      case 286:                     // '|}'\n      case 287:                     // '}'\n        break;\n      default:\n        whitespace();\n        parse_RelativePathExpr();\n      }\n      break;\n    case 48:                        // '//'\n      shift(48);                    // '//'\n      lookahead1W(259);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(:' | '<' | '<!--' | '<?' | '[' | 'after' |\n                                    // 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' |\n                                    // 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'false' | 'first' | 'following' | 'following-sibling' |\n                                    // 'for' | 'from' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' |\n                                    // 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'json-item' | 'jsoniq' | 'last' |\n                                    // 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' |\n                                    // 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' | 'sliding' |\n                                    // 'some' | 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' |\n                                    // 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | '{' | '{|'\n      whitespace();\n      parse_RelativePathExpr();\n      break;\n    default:\n      parse_RelativePathExpr();\n    }\n    eventHandler.endNonterminal(\"PathExpr\", e0);\n  }\n\n  function try_PathExpr()\n  {\n    switch (l1)\n    {\n    case 47:                        // '/'\n      shiftT(47);                   // '/'\n      lookahead1W(288);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | EOF | '!' | '!=' | '$' | '$$' | '%' | '(' | '(:' | ')' | '*' | '+' | ',' |\n                                    // '-' | ':' | ';' | '<' | '<!--' | '<<' | '<=' | '<?' | '=' | '>' | '>=' | '>>' |\n                                    // '[' | ']' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' |\n                                    // 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' |\n                                    // 'before' | 'boundary-space' | 'break' | 'by' | 'case' | 'cast' | 'castable' |\n                                    // 'catch' | 'child' | 'collation' | 'comment' | 'constraint' | 'construction' |\n                                    // 'contains' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'paragraphs' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sentences' | 'sliding' | 'some' | 'stable' |\n                                    // 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'times' | 'to' |\n                                    // 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | 'words' | '{' | '{|' | '|' | '||' | '|}' | '}'\n      switch (l1)\n      {\n      case 25:                      // EOF\n      case 26:                      // '!'\n      case 27:                      // '!='\n      case 38:                      // ')'\n      case 39:                      // '*'\n      case 41:                      // '+'\n      case 42:                      // ','\n      case 43:                      // '-'\n      case 50:                      // ':'\n      case 54:                      // ';'\n      case 58:                      // '<<'\n      case 59:                      // '<='\n      case 61:                      // '='\n      case 62:                      // '>'\n      case 63:                      // '>='\n      case 64:                      // '>>'\n      case 70:                      // ']'\n      case 88:                      // 'by'\n      case 100:                     // 'contains'\n      case 209:                     // 'paragraphs'\n      case 237:                     // 'sentences'\n      case 252:                     // 'times'\n      case 279:                     // 'words'\n      case 284:                     // '|'\n      case 285:                     // '||'\n      case 286:                     // '|}'\n      case 287:                     // '}'\n        break;\n      default:\n        try_RelativePathExpr();\n      }\n      break;\n    case 48:                        // '//'\n      shiftT(48);                   // '//'\n      lookahead1W(259);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(:' | '<' | '<!--' | '<?' | '[' | 'after' |\n                                    // 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' |\n                                    // 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'false' | 'first' | 'following' | 'following-sibling' |\n                                    // 'for' | 'from' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' |\n                                    // 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'json-item' | 'jsoniq' | 'last' |\n                                    // 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' |\n                                    // 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' | 'sliding' |\n                                    // 'some' | 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' |\n                                    // 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | '{' | '{|'\n      try_RelativePathExpr();\n      break;\n    default:\n      try_RelativePathExpr();\n    }\n  }\n\n  function parse_RelativePathExpr()\n  {\n    eventHandler.startNonterminal(\"RelativePathExpr\", e0);\n    parse_PostfixExpr();\n    for (;;)\n    {\n      switch (l1)\n      {\n      case 26:                      // '!'\n        lookahead2W(264);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '$$' | '%' | '(' | '(:' | '..' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 25                  // EOF\n       && lk != 27                  // '!='\n       && lk != 38                  // ')'\n       && lk != 39                  // '*'\n       && lk != 41                  // '+'\n       && lk != 42                  // ','\n       && lk != 43                  // '-'\n       && lk != 47                  // '/'\n       && lk != 48                  // '//'\n       && lk != 50                  // ':'\n       && lk != 54                  // ';'\n       && lk != 55                  // '<'\n       && lk != 58                  // '<<'\n       && lk != 59                  // '<='\n       && lk != 61                  // '='\n       && lk != 62                  // '>'\n       && lk != 63                  // '>='\n       && lk != 64                  // '>>'\n       && lk != 70                  // ']'\n       && lk != 71                  // 'after'\n       && lk != 76                  // 'and'\n       && lk != 80                  // 'as'\n       && lk != 81                  // 'ascending'\n       && lk != 82                  // 'at'\n       && lk != 85                  // 'before'\n       && lk != 88                  // 'by'\n       && lk != 89                  // 'case'\n       && lk != 90                  // 'cast'\n       && lk != 91                  // 'castable'\n       && lk != 95                  // 'collation'\n       && lk != 100                 // 'contains'\n       && lk != 106                 // 'count'\n       && lk != 110                 // 'default'\n       && lk != 114                 // 'descending'\n       && lk != 119                 // 'div'\n       && lk != 123                 // 'else'\n       && lk != 124                 // 'empty'\n       && lk != 127                 // 'end'\n       && lk != 129                 // 'eq'\n       && lk != 132                 // 'except'\n       && lk != 139                 // 'for'\n       && lk != 148                 // 'ge'\n       && lk != 150                 // 'group'\n       && lk != 152                 // 'gt'\n       && lk != 153                 // 'idiv'\n       && lk != 162                 // 'instance'\n       && lk != 164                 // 'intersect'\n       && lk != 165                 // 'into'\n       && lk != 166                 // 'is'\n       && lk != 175                 // 'le'\n       && lk != 177                 // 'let'\n       && lk != 181                 // 'lt'\n       && lk != 183                 // 'mod'\n       && lk != 184                 // 'modify'\n       && lk != 189                 // 'ne'\n       && lk != 202                 // 'only'\n       && lk != 204                 // 'or'\n       && lk != 205                 // 'order'\n       && lk != 209                 // 'paragraphs'\n       && lk != 224                 // 'return'\n       && lk != 228                 // 'satisfies'\n       && lk != 237                 // 'sentences'\n       && lk != 241                 // 'stable'\n       && lk != 242                 // 'start'\n       && lk != 252                 // 'times'\n       && lk != 253                 // 'to'\n       && lk != 254                 // 'treat'\n       && lk != 260                 // 'union'\n       && lk != 272                 // 'where'\n       && lk != 276                 // 'with'\n       && lk != 279                 // 'words'\n       && lk != 284                 // '|'\n       && lk != 285                 // '||'\n       && lk != 286                 // '|}'\n       && lk != 287                 // '}'\n       && lk != 2586                // '!' Wildcard\n       && lk != 23578               // '!' '..'\n       && lk != 24090               // '!' '/'\n       && lk != 24602               // '!' '//'\n       && lk != 34330)              // '!' '@'\n      {\n        lk = memoized(3, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            switch (l1)\n            {\n            case 47:                // '/'\n              shiftT(47);           // '/'\n              break;\n            case 48:                // '//'\n              shiftT(48);           // '//'\n              break;\n            default:\n              shiftT(26);           // '!'\n            }\n            lookahead1W(263);       // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '$$' | '%' | '(' | '(:' | '..' | '<' | '<!--' |\n                                    // '<?' | '@' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'structured-item' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' |\n                                    // 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' | 'value' |\n                                    // 'variable' | 'version' | 'where' | 'while' | 'with' | '{' | '{|'\n            try_StepExpr();\n            lk = -1;\n          }\n          catch (p1A)\n          {\n            lk = -2;\n          }\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(3, e0, lk);\n        }\n      }\n      if (lk != -1\n       && lk != 47                  // '/'\n       && lk != 48                  // '//'\n       && lk != 2586                // '!' Wildcard\n       && lk != 23578               // '!' '..'\n       && lk != 34330)              // '!' '@'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 47:                      // '/'\n        shift(47);                  // '/'\n        break;\n      case 48:                      // '//'\n        shift(48);                  // '//'\n        break;\n      default:\n        shift(26);                  // '!'\n      }\n      lookahead1W(263);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '$$' | '%' | '(' | '(:' | '..' | '<' | '<!--' |\n                                    // '<?' | '@' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'structured-item' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' |\n                                    // 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' | 'value' |\n                                    // 'variable' | 'version' | 'where' | 'while' | 'with' | '{' | '{|'\n      whitespace();\n      parse_StepExpr();\n    }\n    eventHandler.endNonterminal(\"RelativePathExpr\", e0);\n  }\n\n  function try_RelativePathExpr()\n  {\n    try_PostfixExpr();\n    for (;;)\n    {\n      switch (l1)\n      {\n      case 26:                      // '!'\n        lookahead2W(264);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '$$' | '%' | '(' | '(:' | '..' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 25                  // EOF\n       && lk != 27                  // '!='\n       && lk != 38                  // ')'\n       && lk != 39                  // '*'\n       && lk != 41                  // '+'\n       && lk != 42                  // ','\n       && lk != 43                  // '-'\n       && lk != 47                  // '/'\n       && lk != 48                  // '//'\n       && lk != 50                  // ':'\n       && lk != 54                  // ';'\n       && lk != 55                  // '<'\n       && lk != 58                  // '<<'\n       && lk != 59                  // '<='\n       && lk != 61                  // '='\n       && lk != 62                  // '>'\n       && lk != 63                  // '>='\n       && lk != 64                  // '>>'\n       && lk != 70                  // ']'\n       && lk != 71                  // 'after'\n       && lk != 76                  // 'and'\n       && lk != 80                  // 'as'\n       && lk != 81                  // 'ascending'\n       && lk != 82                  // 'at'\n       && lk != 85                  // 'before'\n       && lk != 88                  // 'by'\n       && lk != 89                  // 'case'\n       && lk != 90                  // 'cast'\n       && lk != 91                  // 'castable'\n       && lk != 95                  // 'collation'\n       && lk != 100                 // 'contains'\n       && lk != 106                 // 'count'\n       && lk != 110                 // 'default'\n       && lk != 114                 // 'descending'\n       && lk != 119                 // 'div'\n       && lk != 123                 // 'else'\n       && lk != 124                 // 'empty'\n       && lk != 127                 // 'end'\n       && lk != 129                 // 'eq'\n       && lk != 132                 // 'except'\n       && lk != 139                 // 'for'\n       && lk != 148                 // 'ge'\n       && lk != 150                 // 'group'\n       && lk != 152                 // 'gt'\n       && lk != 153                 // 'idiv'\n       && lk != 162                 // 'instance'\n       && lk != 164                 // 'intersect'\n       && lk != 165                 // 'into'\n       && lk != 166                 // 'is'\n       && lk != 175                 // 'le'\n       && lk != 177                 // 'let'\n       && lk != 181                 // 'lt'\n       && lk != 183                 // 'mod'\n       && lk != 184                 // 'modify'\n       && lk != 189                 // 'ne'\n       && lk != 202                 // 'only'\n       && lk != 204                 // 'or'\n       && lk != 205                 // 'order'\n       && lk != 209                 // 'paragraphs'\n       && lk != 224                 // 'return'\n       && lk != 228                 // 'satisfies'\n       && lk != 237                 // 'sentences'\n       && lk != 241                 // 'stable'\n       && lk != 242                 // 'start'\n       && lk != 252                 // 'times'\n       && lk != 253                 // 'to'\n       && lk != 254                 // 'treat'\n       && lk != 260                 // 'union'\n       && lk != 272                 // 'where'\n       && lk != 276                 // 'with'\n       && lk != 279                 // 'words'\n       && lk != 284                 // '|'\n       && lk != 285                 // '||'\n       && lk != 286                 // '|}'\n       && lk != 287                 // '}'\n       && lk != 2586                // '!' Wildcard\n       && lk != 23578               // '!' '..'\n       && lk != 24090               // '!' '/'\n       && lk != 24602               // '!' '//'\n       && lk != 34330)              // '!' '@'\n      {\n        lk = memoized(3, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            switch (l1)\n            {\n            case 47:                // '/'\n              shiftT(47);           // '/'\n              break;\n            case 48:                // '//'\n              shiftT(48);           // '//'\n              break;\n            default:\n              shiftT(26);           // '!'\n            }\n            lookahead1W(263);       // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '$$' | '%' | '(' | '(:' | '..' | '<' | '<!--' |\n                                    // '<?' | '@' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'structured-item' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' |\n                                    // 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' | 'value' |\n                                    // 'variable' | 'version' | 'where' | 'while' | 'with' | '{' | '{|'\n            try_StepExpr();\n            memoize(3, e0A, -1);\n            continue;\n          }\n          catch (p1A)\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            memoize(3, e0A, -2);\n            break;\n          }\n        }\n      }\n      if (lk != -1\n       && lk != 47                  // '/'\n       && lk != 48                  // '//'\n       && lk != 2586                // '!' Wildcard\n       && lk != 23578               // '!' '..'\n       && lk != 34330)              // '!' '@'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 47:                      // '/'\n        shiftT(47);                 // '/'\n        break;\n      case 48:                      // '//'\n        shiftT(48);                 // '//'\n        break;\n      default:\n        shiftT(26);                 // '!'\n      }\n      lookahead1W(263);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '$$' | '%' | '(' | '(:' | '..' | '<' | '<!--' |\n                                    // '<?' | '@' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'structured-item' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' |\n                                    // 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' | 'value' |\n                                    // 'variable' | 'version' | 'where' | 'while' | 'with' | '{' | '{|'\n      try_StepExpr();\n    }\n  }\n\n  function parse_StepExpr()\n  {\n    eventHandler.startNonterminal(\"StepExpr\", e0);\n    switch (l1)\n    {\n    case 83:                        // 'attribute'\n      lookahead2W(287);             // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |\n                                    // ',' | '-' | '/' | '//' | ':' | '::' | ';' | '<' | '<<' | '<=' | '=' | '>' |\n                                    // '>=' | '>>' | '[' | ']' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'by' |\n                                    // 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'contains' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'paragraphs' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sentences' | 'sliding' | 'some' | 'stable' |\n                                    // 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'times' | 'to' |\n                                    // 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | 'words' | '{' | '|' | '||' | '|}' | '}'\n      break;\n    case 122:                       // 'element'\n      lookahead2W(286);             // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |\n                                    // ',' | '-' | '/' | '//' | ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' |\n                                    // '>>' | '[' | ']' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'by' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'contains' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'paragraphs' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sentences' | 'sliding' | 'some' | 'stable' |\n                                    // 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'times' | 'to' |\n                                    // 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | 'words' | '{' | '|' | '||' | '|}' | '}'\n      break;\n    case 187:                       // 'namespace'\n    case 220:                       // 'processing-instruction'\n      lookahead2W(284);             // NCName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |\n                                    // ',' | '-' | '/' | '//' | ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' |\n                                    // '>>' | '[' | ']' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' |\n                                    // 'before' | 'boundary-space' | 'break' | 'by' | 'case' | 'cast' | 'castable' |\n                                    // 'catch' | 'child' | 'collation' | 'comment' | 'constraint' | 'construction' |\n                                    // 'contains' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' |\n                                    // 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'paragraphs' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sentences' | 'sliding' | 'some' | 'stable' |\n                                    // 'start' | 'strict' | 'switch' | 'text' | 'times' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // 'words' | '{' | '|' | '||' | '|}' | '}'\n      break;\n    case 135:                       // 'false'\n    case 197:                       // 'null'\n    case 255:                       // 'true'\n      lookahead2W(236);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '.' |\n                                    // '/' | '//' | ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' |\n                                    // ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'by' | 'case' |\n                                    // 'cast' | 'castable' | 'collation' | 'contains' | 'count' | 'default' |\n                                    // 'descending' | 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' |\n                                    // 'ge' | 'group' | 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' |\n                                    // 'le' | 'let' | 'lt' | 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' |\n                                    // 'paragraphs' | 'return' | 'satisfies' | 'sentences' | 'stable' | 'start' |\n                                    // 'times' | 'to' | 'treat' | 'union' | 'where' | 'with' | 'words' | '|' | '||' |\n                                    // '|}' | '}'\n      break;\n    case 97:                        // 'comment'\n    case 120:                       // 'document'\n    case 206:                       // 'ordered'\n    case 249:                       // 'text'\n    case 262:                       // 'unordered'\n      lookahead2W(238);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n                                    // '//' | ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' |\n                                    // 'after' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'by' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'sentences' | 'stable' | 'start' | 'times' | 'to' | 'treat' |\n                                    // 'union' | 'where' | 'with' | 'words' | '{' | '|' | '||' | '|}' | '}'\n      break;\n    case 79:                        // 'array'\n    case 125:                       // 'empty-sequence'\n    case 154:                       // 'if'\n    case 167:                       // 'item'\n    case 169:                       // 'json-item'\n    case 247:                       // 'structured-item'\n    case 248:                       // 'switch'\n    case 259:                       // 'typeswitch'\n      lookahead2W(229);             // S^WS | EOF | '!' | '!=' | '#' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n                                    // ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' | 'after' |\n                                    // 'and' | 'as' | 'ascending' | 'at' | 'before' | 'by' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'sentences' | 'stable' | 'start' | 'times' | 'to' | 'treat' |\n                                    // 'union' | 'where' | 'with' | 'words' | '|' | '||' | '|}' | '}'\n      break;\n    case 74:                        // 'ancestor'\n    case 75:                        // 'ancestor-or-self'\n    case 94:                        // 'child'\n    case 112:                       // 'descendant'\n    case 113:                       // 'descendant-or-self'\n    case 137:                       // 'following'\n    case 138:                       // 'following-sibling'\n    case 210:                       // 'parent'\n    case 216:                       // 'preceding'\n    case 217:                       // 'preceding-sibling'\n    case 234:                       // 'self'\n      lookahead2W(237);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n                                    // '//' | ':' | '::' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' |\n                                    // ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'by' | 'case' |\n                                    // 'cast' | 'castable' | 'collation' | 'contains' | 'count' | 'default' |\n                                    // 'descending' | 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' |\n                                    // 'ge' | 'group' | 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' |\n                                    // 'le' | 'let' | 'lt' | 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' |\n                                    // 'paragraphs' | 'return' | 'satisfies' | 'sentences' | 'stable' | 'start' |\n                                    // 'times' | 'to' | 'treat' | 'union' | 'where' | 'with' | 'words' | '|' | '||' |\n                                    // '|}' | '}'\n      break;\n    case 6:                         // EQName^Token\n    case 71:                        // 'after'\n    case 73:                        // 'allowing'\n    case 76:                        // 'and'\n    case 78:                        // 'append'\n    case 80:                        // 'as'\n    case 81:                        // 'ascending'\n    case 82:                        // 'at'\n    case 84:                        // 'base-uri'\n    case 85:                        // 'before'\n    case 86:                        // 'boundary-space'\n    case 87:                        // 'break'\n    case 89:                        // 'case'\n    case 90:                        // 'cast'\n    case 91:                        // 'castable'\n    case 92:                        // 'catch'\n    case 95:                        // 'collation'\n    case 98:                        // 'constraint'\n    case 99:                        // 'construction'\n    case 102:                       // 'context'\n    case 103:                       // 'continue'\n    case 104:                       // 'copy'\n    case 105:                       // 'copy-namespaces'\n    case 106:                       // 'count'\n    case 107:                       // 'decimal-format'\n    case 109:                       // 'declare'\n    case 110:                       // 'default'\n    case 111:                       // 'delete'\n    case 114:                       // 'descending'\n    case 119:                       // 'div'\n    case 121:                       // 'document-node'\n    case 123:                       // 'else'\n    case 124:                       // 'empty'\n    case 126:                       // 'encoding'\n    case 127:                       // 'end'\n    case 129:                       // 'eq'\n    case 130:                       // 'every'\n    case 132:                       // 'except'\n    case 133:                       // 'exit'\n    case 134:                       // 'external'\n    case 136:                       // 'first'\n    case 139:                       // 'for'\n    case 142:                       // 'from'\n    case 143:                       // 'ft-option'\n    case 147:                       // 'function'\n    case 148:                       // 'ge'\n    case 150:                       // 'group'\n    case 152:                       // 'gt'\n    case 153:                       // 'idiv'\n    case 155:                       // 'import'\n    case 156:                       // 'in'\n    case 157:                       // 'index'\n    case 161:                       // 'insert'\n    case 162:                       // 'instance'\n    case 163:                       // 'integrity'\n    case 164:                       // 'intersect'\n    case 165:                       // 'into'\n    case 166:                       // 'is'\n    case 168:                       // 'json'\n    case 170:                       // 'jsoniq'\n    case 173:                       // 'last'\n    case 174:                       // 'lax'\n    case 175:                       // 'le'\n    case 177:                       // 'let'\n    case 179:                       // 'loop'\n    case 181:                       // 'lt'\n    case 183:                       // 'mod'\n    case 184:                       // 'modify'\n    case 185:                       // 'module'\n    case 188:                       // 'namespace-node'\n    case 189:                       // 'ne'\n    case 194:                       // 'node'\n    case 195:                       // 'nodes'\n    case 198:                       // 'object'\n    case 202:                       // 'only'\n    case 203:                       // 'option'\n    case 204:                       // 'or'\n    case 205:                       // 'order'\n    case 207:                       // 'ordering'\n    case 222:                       // 'rename'\n    case 223:                       // 'replace'\n    case 224:                       // 'return'\n    case 225:                       // 'returning'\n    case 226:                       // 'revalidation'\n    case 228:                       // 'satisfies'\n    case 229:                       // 'schema'\n    case 230:                       // 'schema-attribute'\n    case 231:                       // 'schema-element'\n    case 232:                       // 'score'\n    case 233:                       // 'select'\n    case 239:                       // 'sliding'\n    case 240:                       // 'some'\n    case 241:                       // 'stable'\n    case 242:                       // 'start'\n    case 245:                       // 'strict'\n    case 253:                       // 'to'\n    case 254:                       // 'treat'\n    case 256:                       // 'try'\n    case 257:                       // 'tumbling'\n    case 258:                       // 'type'\n    case 260:                       // 'union'\n    case 263:                       // 'updating'\n    case 266:                       // 'validate'\n    case 267:                       // 'value'\n    case 268:                       // 'variable'\n    case 269:                       // 'version'\n    case 272:                       // 'where'\n    case 273:                       // 'while'\n    case 276:                       // 'with'\n      lookahead2W(233);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n                                    // '//' | ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' |\n                                    // 'after' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'by' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'sentences' | 'stable' | 'start' | 'times' | 'to' | 'treat' |\n                                    // 'union' | 'where' | 'with' | 'words' | '|' | '||' | '|}' | '}'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 12935                 // 'false' EOF\n     || lk == 12997                 // 'null' EOF\n     || lk == 13055                 // 'true' EOF\n     || lk == 13447                 // 'false' '!'\n     || lk == 13509                 // 'null' '!'\n     || lk == 13567                 // 'true' '!'\n     || lk == 13959                 // 'false' '!='\n     || lk == 14021                 // 'null' '!='\n     || lk == 14079                 // 'true' '!='\n     || lk == 19591                 // 'false' ')'\n     || lk == 19653                 // 'null' ')'\n     || lk == 19711                 // 'true' ')'\n     || lk == 20103                 // 'false' '*'\n     || lk == 20165                 // 'null' '*'\n     || lk == 20223                 // 'true' '*'\n     || lk == 21127                 // 'false' '+'\n     || lk == 21189                 // 'null' '+'\n     || lk == 21247                 // 'true' '+'\n     || lk == 21639                 // 'false' ','\n     || lk == 21701                 // 'null' ','\n     || lk == 21759                 // 'true' ','\n     || lk == 22151                 // 'false' '-'\n     || lk == 22213                 // 'null' '-'\n     || lk == 22271                 // 'true' '-'\n     || lk == 24199                 // 'false' '/'\n     || lk == 24261                 // 'null' '/'\n     || lk == 24319                 // 'true' '/'\n     || lk == 24711                 // 'false' '//'\n     || lk == 24773                 // 'null' '//'\n     || lk == 24831                 // 'true' '//'\n     || lk == 25735                 // 'false' ':'\n     || lk == 25797                 // 'null' ':'\n     || lk == 25855                 // 'true' ':'\n     || lk == 27783                 // 'false' ';'\n     || lk == 27845                 // 'null' ';'\n     || lk == 27903                 // 'true' ';'\n     || lk == 28295                 // 'false' '<'\n     || lk == 28357                 // 'null' '<'\n     || lk == 28415                 // 'true' '<'\n     || lk == 29831                 // 'false' '<<'\n     || lk == 29893                 // 'null' '<<'\n     || lk == 29951                 // 'true' '<<'\n     || lk == 30343                 // 'false' '<='\n     || lk == 30405                 // 'null' '<='\n     || lk == 30463                 // 'true' '<='\n     || lk == 31367                 // 'false' '='\n     || lk == 31429                 // 'null' '='\n     || lk == 31487                 // 'true' '='\n     || lk == 31879                 // 'false' '>'\n     || lk == 31941                 // 'null' '>'\n     || lk == 31999                 // 'true' '>'\n     || lk == 32391                 // 'false' '>='\n     || lk == 32453                 // 'null' '>='\n     || lk == 32511                 // 'true' '>='\n     || lk == 32903                 // 'false' '>>'\n     || lk == 32965                 // 'null' '>>'\n     || lk == 33023                 // 'true' '>>'\n     || lk == 35463                 // 'false' '['\n     || lk == 35525                 // 'null' '['\n     || lk == 35583                 // 'true' '['\n     || lk == 35975                 // 'false' ']'\n     || lk == 36037                 // 'null' ']'\n     || lk == 36095                 // 'true' ']'\n     || lk == 36435                 // 'attribute' 'after'\n     || lk == 36474                 // 'element' 'after'\n     || lk == 36487                 // 'false' 'after'\n     || lk == 36539                 // 'namespace' 'after'\n     || lk == 36549                 // 'null' 'after'\n     || lk == 36572                 // 'processing-instruction' 'after'\n     || lk == 36607                 // 'true' 'after'\n     || lk == 38995                 // 'attribute' 'and'\n     || lk == 39034                 // 'element' 'and'\n     || lk == 39047                 // 'false' 'and'\n     || lk == 39099                 // 'namespace' 'and'\n     || lk == 39109                 // 'null' 'and'\n     || lk == 39132                 // 'processing-instruction' 'and'\n     || lk == 39167                 // 'true' 'and'\n     || lk == 41043                 // 'attribute' 'as'\n     || lk == 41082                 // 'element' 'as'\n     || lk == 41095                 // 'false' 'as'\n     || lk == 41147                 // 'namespace' 'as'\n     || lk == 41157                 // 'null' 'as'\n     || lk == 41180                 // 'processing-instruction' 'as'\n     || lk == 41215                 // 'true' 'as'\n     || lk == 41555                 // 'attribute' 'ascending'\n     || lk == 41594                 // 'element' 'ascending'\n     || lk == 41607                 // 'false' 'ascending'\n     || lk == 41659                 // 'namespace' 'ascending'\n     || lk == 41669                 // 'null' 'ascending'\n     || lk == 41692                 // 'processing-instruction' 'ascending'\n     || lk == 41727                 // 'true' 'ascending'\n     || lk == 42067                 // 'attribute' 'at'\n     || lk == 42106                 // 'element' 'at'\n     || lk == 42119                 // 'false' 'at'\n     || lk == 42171                 // 'namespace' 'at'\n     || lk == 42181                 // 'null' 'at'\n     || lk == 42204                 // 'processing-instruction' 'at'\n     || lk == 42239                 // 'true' 'at'\n     || lk == 43603                 // 'attribute' 'before'\n     || lk == 43642                 // 'element' 'before'\n     || lk == 43655                 // 'false' 'before'\n     || lk == 43707                 // 'namespace' 'before'\n     || lk == 43717                 // 'null' 'before'\n     || lk == 43740                 // 'processing-instruction' 'before'\n     || lk == 43775                 // 'true' 'before'\n     || lk == 45191                 // 'false' 'by'\n     || lk == 45253                 // 'null' 'by'\n     || lk == 45311                 // 'true' 'by'\n     || lk == 45651                 // 'attribute' 'case'\n     || lk == 45690                 // 'element' 'case'\n     || lk == 45703                 // 'false' 'case'\n     || lk == 45755                 // 'namespace' 'case'\n     || lk == 45765                 // 'null' 'case'\n     || lk == 45788                 // 'processing-instruction' 'case'\n     || lk == 45823                 // 'true' 'case'\n     || lk == 46163                 // 'attribute' 'cast'\n     || lk == 46202                 // 'element' 'cast'\n     || lk == 46215                 // 'false' 'cast'\n     || lk == 46267                 // 'namespace' 'cast'\n     || lk == 46277                 // 'null' 'cast'\n     || lk == 46300                 // 'processing-instruction' 'cast'\n     || lk == 46335                 // 'true' 'cast'\n     || lk == 46675                 // 'attribute' 'castable'\n     || lk == 46714                 // 'element' 'castable'\n     || lk == 46727                 // 'false' 'castable'\n     || lk == 46779                 // 'namespace' 'castable'\n     || lk == 46789                 // 'null' 'castable'\n     || lk == 46812                 // 'processing-instruction' 'castable'\n     || lk == 46847                 // 'true' 'castable'\n     || lk == 48723                 // 'attribute' 'collation'\n     || lk == 48762                 // 'element' 'collation'\n     || lk == 48775                 // 'false' 'collation'\n     || lk == 48827                 // 'namespace' 'collation'\n     || lk == 48837                 // 'null' 'collation'\n     || lk == 48860                 // 'processing-instruction' 'collation'\n     || lk == 48895                 // 'true' 'collation'\n     || lk == 51335                 // 'false' 'contains'\n     || lk == 51397                 // 'null' 'contains'\n     || lk == 51455                 // 'true' 'contains'\n     || lk == 54355                 // 'attribute' 'count'\n     || lk == 54394                 // 'element' 'count'\n     || lk == 54407                 // 'false' 'count'\n     || lk == 54459                 // 'namespace' 'count'\n     || lk == 54469                 // 'null' 'count'\n     || lk == 54492                 // 'processing-instruction' 'count'\n     || lk == 54527                 // 'true' 'count'\n     || lk == 56403                 // 'attribute' 'default'\n     || lk == 56442                 // 'element' 'default'\n     || lk == 56455                 // 'false' 'default'\n     || lk == 56507                 // 'namespace' 'default'\n     || lk == 56517                 // 'null' 'default'\n     || lk == 56540                 // 'processing-instruction' 'default'\n     || lk == 56575                 // 'true' 'default'\n     || lk == 58451                 // 'attribute' 'descending'\n     || lk == 58490                 // 'element' 'descending'\n     || lk == 58503                 // 'false' 'descending'\n     || lk == 58555                 // 'namespace' 'descending'\n     || lk == 58565                 // 'null' 'descending'\n     || lk == 58588                 // 'processing-instruction' 'descending'\n     || lk == 58623                 // 'true' 'descending'\n     || lk == 61011                 // 'attribute' 'div'\n     || lk == 61050                 // 'element' 'div'\n     || lk == 61063                 // 'false' 'div'\n     || lk == 61115                 // 'namespace' 'div'\n     || lk == 61125                 // 'null' 'div'\n     || lk == 61148                 // 'processing-instruction' 'div'\n     || lk == 61183                 // 'true' 'div'\n     || lk == 63059                 // 'attribute' 'else'\n     || lk == 63098                 // 'element' 'else'\n     || lk == 63111                 // 'false' 'else'\n     || lk == 63163                 // 'namespace' 'else'\n     || lk == 63173                 // 'null' 'else'\n     || lk == 63196                 // 'processing-instruction' 'else'\n     || lk == 63231                 // 'true' 'else'\n     || lk == 63571                 // 'attribute' 'empty'\n     || lk == 63610                 // 'element' 'empty'\n     || lk == 63623                 // 'false' 'empty'\n     || lk == 63675                 // 'namespace' 'empty'\n     || lk == 63685                 // 'null' 'empty'\n     || lk == 63708                 // 'processing-instruction' 'empty'\n     || lk == 63743                 // 'true' 'empty'\n     || lk == 65107                 // 'attribute' 'end'\n     || lk == 65146                 // 'element' 'end'\n     || lk == 65159                 // 'false' 'end'\n     || lk == 65211                 // 'namespace' 'end'\n     || lk == 65221                 // 'null' 'end'\n     || lk == 65244                 // 'processing-instruction' 'end'\n     || lk == 65279                 // 'true' 'end'\n     || lk == 66131                 // 'attribute' 'eq'\n     || lk == 66170                 // 'element' 'eq'\n     || lk == 66183                 // 'false' 'eq'\n     || lk == 66235                 // 'namespace' 'eq'\n     || lk == 66245                 // 'null' 'eq'\n     || lk == 66268                 // 'processing-instruction' 'eq'\n     || lk == 66303                 // 'true' 'eq'\n     || lk == 67667                 // 'attribute' 'except'\n     || lk == 67706                 // 'element' 'except'\n     || lk == 67719                 // 'false' 'except'\n     || lk == 67771                 // 'namespace' 'except'\n     || lk == 67781                 // 'null' 'except'\n     || lk == 67804                 // 'processing-instruction' 'except'\n     || lk == 67839                 // 'true' 'except'\n     || lk == 71251                 // 'attribute' 'for'\n     || lk == 71290                 // 'element' 'for'\n     || lk == 71303                 // 'false' 'for'\n     || lk == 71355                 // 'namespace' 'for'\n     || lk == 71365                 // 'null' 'for'\n     || lk == 71388                 // 'processing-instruction' 'for'\n     || lk == 71423                 // 'true' 'for'\n     || lk == 75859                 // 'attribute' 'ge'\n     || lk == 75898                 // 'element' 'ge'\n     || lk == 75911                 // 'false' 'ge'\n     || lk == 75963                 // 'namespace' 'ge'\n     || lk == 75973                 // 'null' 'ge'\n     || lk == 75996                 // 'processing-instruction' 'ge'\n     || lk == 76031                 // 'true' 'ge'\n     || lk == 76883                 // 'attribute' 'group'\n     || lk == 76922                 // 'element' 'group'\n     || lk == 76935                 // 'false' 'group'\n     || lk == 76987                 // 'namespace' 'group'\n     || lk == 76997                 // 'null' 'group'\n     || lk == 77020                 // 'processing-instruction' 'group'\n     || lk == 77055                 // 'true' 'group'\n     || lk == 77907                 // 'attribute' 'gt'\n     || lk == 77946                 // 'element' 'gt'\n     || lk == 77959                 // 'false' 'gt'\n     || lk == 78011                 // 'namespace' 'gt'\n     || lk == 78021                 // 'null' 'gt'\n     || lk == 78044                 // 'processing-instruction' 'gt'\n     || lk == 78079                 // 'true' 'gt'\n     || lk == 78419                 // 'attribute' 'idiv'\n     || lk == 78458                 // 'element' 'idiv'\n     || lk == 78471                 // 'false' 'idiv'\n     || lk == 78523                 // 'namespace' 'idiv'\n     || lk == 78533                 // 'null' 'idiv'\n     || lk == 78556                 // 'processing-instruction' 'idiv'\n     || lk == 78591                 // 'true' 'idiv'\n     || lk == 83027                 // 'attribute' 'instance'\n     || lk == 83066                 // 'element' 'instance'\n     || lk == 83079                 // 'false' 'instance'\n     || lk == 83131                 // 'namespace' 'instance'\n     || lk == 83141                 // 'null' 'instance'\n     || lk == 83164                 // 'processing-instruction' 'instance'\n     || lk == 83199                 // 'true' 'instance'\n     || lk == 84051                 // 'attribute' 'intersect'\n     || lk == 84090                 // 'element' 'intersect'\n     || lk == 84103                 // 'false' 'intersect'\n     || lk == 84155                 // 'namespace' 'intersect'\n     || lk == 84165                 // 'null' 'intersect'\n     || lk == 84188                 // 'processing-instruction' 'intersect'\n     || lk == 84223                 // 'true' 'intersect'\n     || lk == 84563                 // 'attribute' 'into'\n     || lk == 84602                 // 'element' 'into'\n     || lk == 84615                 // 'false' 'into'\n     || lk == 84667                 // 'namespace' 'into'\n     || lk == 84677                 // 'null' 'into'\n     || lk == 84700                 // 'processing-instruction' 'into'\n     || lk == 84735                 // 'true' 'into'\n     || lk == 85075                 // 'attribute' 'is'\n     || lk == 85114                 // 'element' 'is'\n     || lk == 85127                 // 'false' 'is'\n     || lk == 85179                 // 'namespace' 'is'\n     || lk == 85189                 // 'null' 'is'\n     || lk == 85212                 // 'processing-instruction' 'is'\n     || lk == 85247                 // 'true' 'is'\n     || lk == 89683                 // 'attribute' 'le'\n     || lk == 89722                 // 'element' 'le'\n     || lk == 89735                 // 'false' 'le'\n     || lk == 89787                 // 'namespace' 'le'\n     || lk == 89797                 // 'null' 'le'\n     || lk == 89820                 // 'processing-instruction' 'le'\n     || lk == 89855                 // 'true' 'le'\n     || lk == 90707                 // 'attribute' 'let'\n     || lk == 90746                 // 'element' 'let'\n     || lk == 90759                 // 'false' 'let'\n     || lk == 90811                 // 'namespace' 'let'\n     || lk == 90821                 // 'null' 'let'\n     || lk == 90844                 // 'processing-instruction' 'let'\n     || lk == 90879                 // 'true' 'let'\n     || lk == 92755                 // 'attribute' 'lt'\n     || lk == 92794                 // 'element' 'lt'\n     || lk == 92807                 // 'false' 'lt'\n     || lk == 92859                 // 'namespace' 'lt'\n     || lk == 92869                 // 'null' 'lt'\n     || lk == 92892                 // 'processing-instruction' 'lt'\n     || lk == 92927                 // 'true' 'lt'\n     || lk == 93779                 // 'attribute' 'mod'\n     || lk == 93818                 // 'element' 'mod'\n     || lk == 93831                 // 'false' 'mod'\n     || lk == 93883                 // 'namespace' 'mod'\n     || lk == 93893                 // 'null' 'mod'\n     || lk == 93916                 // 'processing-instruction' 'mod'\n     || lk == 93951                 // 'true' 'mod'\n     || lk == 94291                 // 'attribute' 'modify'\n     || lk == 94330                 // 'element' 'modify'\n     || lk == 94343                 // 'false' 'modify'\n     || lk == 94395                 // 'namespace' 'modify'\n     || lk == 94405                 // 'null' 'modify'\n     || lk == 94428                 // 'processing-instruction' 'modify'\n     || lk == 94463                 // 'true' 'modify'\n     || lk == 96851                 // 'attribute' 'ne'\n     || lk == 96890                 // 'element' 'ne'\n     || lk == 96903                 // 'false' 'ne'\n     || lk == 96955                 // 'namespace' 'ne'\n     || lk == 96965                 // 'null' 'ne'\n     || lk == 96988                 // 'processing-instruction' 'ne'\n     || lk == 97023                 // 'true' 'ne'\n     || lk == 103507                // 'attribute' 'only'\n     || lk == 103546                // 'element' 'only'\n     || lk == 103559                // 'false' 'only'\n     || lk == 103611                // 'namespace' 'only'\n     || lk == 103621                // 'null' 'only'\n     || lk == 103644                // 'processing-instruction' 'only'\n     || lk == 103679                // 'true' 'only'\n     || lk == 104531                // 'attribute' 'or'\n     || lk == 104570                // 'element' 'or'\n     || lk == 104583                // 'false' 'or'\n     || lk == 104635                // 'namespace' 'or'\n     || lk == 104645                // 'null' 'or'\n     || lk == 104668                // 'processing-instruction' 'or'\n     || lk == 104703                // 'true' 'or'\n     || lk == 105043                // 'attribute' 'order'\n     || lk == 105082                // 'element' 'order'\n     || lk == 105095                // 'false' 'order'\n     || lk == 105147                // 'namespace' 'order'\n     || lk == 105157                // 'null' 'order'\n     || lk == 105180                // 'processing-instruction' 'order'\n     || lk == 105215                // 'true' 'order'\n     || lk == 107143                // 'false' 'paragraphs'\n     || lk == 107205                // 'null' 'paragraphs'\n     || lk == 107263                // 'true' 'paragraphs'\n     || lk == 114771                // 'attribute' 'return'\n     || lk == 114810                // 'element' 'return'\n     || lk == 114823                // 'false' 'return'\n     || lk == 114875                // 'namespace' 'return'\n     || lk == 114885                // 'null' 'return'\n     || lk == 114908                // 'processing-instruction' 'return'\n     || lk == 114943                // 'true' 'return'\n     || lk == 116819                // 'attribute' 'satisfies'\n     || lk == 116858                // 'element' 'satisfies'\n     || lk == 116871                // 'false' 'satisfies'\n     || lk == 116923                // 'namespace' 'satisfies'\n     || lk == 116933                // 'null' 'satisfies'\n     || lk == 116956                // 'processing-instruction' 'satisfies'\n     || lk == 116991                // 'true' 'satisfies'\n     || lk == 121479                // 'false' 'sentences'\n     || lk == 121541                // 'null' 'sentences'\n     || lk == 121599                // 'true' 'sentences'\n     || lk == 123475                // 'attribute' 'stable'\n     || lk == 123514                // 'element' 'stable'\n     || lk == 123527                // 'false' 'stable'\n     || lk == 123579                // 'namespace' 'stable'\n     || lk == 123589                // 'null' 'stable'\n     || lk == 123612                // 'processing-instruction' 'stable'\n     || lk == 123647                // 'true' 'stable'\n     || lk == 123987                // 'attribute' 'start'\n     || lk == 124026                // 'element' 'start'\n     || lk == 124039                // 'false' 'start'\n     || lk == 124091                // 'namespace' 'start'\n     || lk == 124101                // 'null' 'start'\n     || lk == 124124                // 'processing-instruction' 'start'\n     || lk == 124159                // 'true' 'start'\n     || lk == 129159                // 'false' 'times'\n     || lk == 129221                // 'null' 'times'\n     || lk == 129279                // 'true' 'times'\n     || lk == 129619                // 'attribute' 'to'\n     || lk == 129658                // 'element' 'to'\n     || lk == 129671                // 'false' 'to'\n     || lk == 129723                // 'namespace' 'to'\n     || lk == 129733                // 'null' 'to'\n     || lk == 129756                // 'processing-instruction' 'to'\n     || lk == 129791                // 'true' 'to'\n     || lk == 130131                // 'attribute' 'treat'\n     || lk == 130170                // 'element' 'treat'\n     || lk == 130183                // 'false' 'treat'\n     || lk == 130235                // 'namespace' 'treat'\n     || lk == 130245                // 'null' 'treat'\n     || lk == 130268                // 'processing-instruction' 'treat'\n     || lk == 130303                // 'true' 'treat'\n     || lk == 133203                // 'attribute' 'union'\n     || lk == 133242                // 'element' 'union'\n     || lk == 133255                // 'false' 'union'\n     || lk == 133307                // 'namespace' 'union'\n     || lk == 133317                // 'null' 'union'\n     || lk == 133340                // 'processing-instruction' 'union'\n     || lk == 133375                // 'true' 'union'\n     || lk == 139347                // 'attribute' 'where'\n     || lk == 139386                // 'element' 'where'\n     || lk == 139399                // 'false' 'where'\n     || lk == 139451                // 'namespace' 'where'\n     || lk == 139461                // 'null' 'where'\n     || lk == 139484                // 'processing-instruction' 'where'\n     || lk == 139519                // 'true' 'where'\n     || lk == 141395                // 'attribute' 'with'\n     || lk == 141434                // 'element' 'with'\n     || lk == 141447                // 'false' 'with'\n     || lk == 141499                // 'namespace' 'with'\n     || lk == 141509                // 'null' 'with'\n     || lk == 141532                // 'processing-instruction' 'with'\n     || lk == 141567                // 'true' 'with'\n     || lk == 142983                // 'false' 'words'\n     || lk == 143045                // 'null' 'words'\n     || lk == 143103                // 'true' 'words'\n     || lk == 145543                // 'false' '|'\n     || lk == 145605                // 'null' '|'\n     || lk == 145663                // 'true' '|'\n     || lk == 146055                // 'false' '||'\n     || lk == 146117                // 'null' '||'\n     || lk == 146175                // 'true' '||'\n     || lk == 146567                // 'false' '|}'\n     || lk == 146629                // 'null' '|}'\n     || lk == 146687                // 'true' '|}'\n     || lk == 147079                // 'false' '}'\n     || lk == 147141                // 'null' '}'\n     || lk == 147199)               // 'true' '}'\n    {\n      lk = memoized(4, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_PostfixExpr();\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(4, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n    case 8:                         // IntegerLiteral\n    case 9:                         // DecimalLiteral\n    case 10:                        // DoubleLiteral\n    case 11:                        // StringLiteral\n    case 31:                        // '$'\n    case 32:                        // '$$'\n    case 33:                        // '%'\n    case 35:                        // '('\n    case 55:                        // '<'\n    case 56:                        // '<!--'\n    case 60:                        // '<?'\n    case 69:                        // '['\n    case 281:                       // '{'\n    case 283:                       // '{|'\n    case 3155:                      // 'attribute' EQName^Token\n    case 3194:                      // 'element' EQName^Token\n    case 9915:                      // 'namespace' NCName^Token\n    case 9948:                      // 'processing-instruction' NCName^Token\n    case 14854:                     // EQName^Token '#'\n    case 14919:                     // 'after' '#'\n    case 14921:                     // 'allowing' '#'\n    case 14922:                     // 'ancestor' '#'\n    case 14923:                     // 'ancestor-or-self' '#'\n    case 14924:                     // 'and' '#'\n    case 14926:                     // 'append' '#'\n    case 14927:                     // 'array' '#'\n    case 14928:                     // 'as' '#'\n    case 14929:                     // 'ascending' '#'\n    case 14930:                     // 'at' '#'\n    case 14931:                     // 'attribute' '#'\n    case 14932:                     // 'base-uri' '#'\n    case 14933:                     // 'before' '#'\n    case 14934:                     // 'boundary-space' '#'\n    case 14935:                     // 'break' '#'\n    case 14937:                     // 'case' '#'\n    case 14938:                     // 'cast' '#'\n    case 14939:                     // 'castable' '#'\n    case 14940:                     // 'catch' '#'\n    case 14942:                     // 'child' '#'\n    case 14943:                     // 'collation' '#'\n    case 14945:                     // 'comment' '#'\n    case 14946:                     // 'constraint' '#'\n    case 14947:                     // 'construction' '#'\n    case 14950:                     // 'context' '#'\n    case 14951:                     // 'continue' '#'\n    case 14952:                     // 'copy' '#'\n    case 14953:                     // 'copy-namespaces' '#'\n    case 14954:                     // 'count' '#'\n    case 14955:                     // 'decimal-format' '#'\n    case 14957:                     // 'declare' '#'\n    case 14958:                     // 'default' '#'\n    case 14959:                     // 'delete' '#'\n    case 14960:                     // 'descendant' '#'\n    case 14961:                     // 'descendant-or-self' '#'\n    case 14962:                     // 'descending' '#'\n    case 14967:                     // 'div' '#'\n    case 14968:                     // 'document' '#'\n    case 14969:                     // 'document-node' '#'\n    case 14970:                     // 'element' '#'\n    case 14971:                     // 'else' '#'\n    case 14972:                     // 'empty' '#'\n    case 14973:                     // 'empty-sequence' '#'\n    case 14974:                     // 'encoding' '#'\n    case 14975:                     // 'end' '#'\n    case 14977:                     // 'eq' '#'\n    case 14978:                     // 'every' '#'\n    case 14980:                     // 'except' '#'\n    case 14981:                     // 'exit' '#'\n    case 14982:                     // 'external' '#'\n    case 14983:                     // 'false' '#'\n    case 14984:                     // 'first' '#'\n    case 14985:                     // 'following' '#'\n    case 14986:                     // 'following-sibling' '#'\n    case 14987:                     // 'for' '#'\n    case 14990:                     // 'from' '#'\n    case 14991:                     // 'ft-option' '#'\n    case 14995:                     // 'function' '#'\n    case 14996:                     // 'ge' '#'\n    case 14998:                     // 'group' '#'\n    case 15000:                     // 'gt' '#'\n    case 15001:                     // 'idiv' '#'\n    case 15002:                     // 'if' '#'\n    case 15003:                     // 'import' '#'\n    case 15004:                     // 'in' '#'\n    case 15005:                     // 'index' '#'\n    case 15009:                     // 'insert' '#'\n    case 15010:                     // 'instance' '#'\n    case 15011:                     // 'integrity' '#'\n    case 15012:                     // 'intersect' '#'\n    case 15013:                     // 'into' '#'\n    case 15014:                     // 'is' '#'\n    case 15015:                     // 'item' '#'\n    case 15016:                     // 'json' '#'\n    case 15017:                     // 'json-item' '#'\n    case 15018:                     // 'jsoniq' '#'\n    case 15021:                     // 'last' '#'\n    case 15022:                     // 'lax' '#'\n    case 15023:                     // 'le' '#'\n    case 15025:                     // 'let' '#'\n    case 15027:                     // 'loop' '#'\n    case 15029:                     // 'lt' '#'\n    case 15031:                     // 'mod' '#'\n    case 15032:                     // 'modify' '#'\n    case 15033:                     // 'module' '#'\n    case 15035:                     // 'namespace' '#'\n    case 15036:                     // 'namespace-node' '#'\n    case 15037:                     // 'ne' '#'\n    case 15042:                     // 'node' '#'\n    case 15043:                     // 'nodes' '#'\n    case 15045:                     // 'null' '#'\n    case 15046:                     // 'object' '#'\n    case 15050:                     // 'only' '#'\n    case 15051:                     // 'option' '#'\n    case 15052:                     // 'or' '#'\n    case 15053:                     // 'order' '#'\n    case 15054:                     // 'ordered' '#'\n    case 15055:                     // 'ordering' '#'\n    case 15058:                     // 'parent' '#'\n    case 15064:                     // 'preceding' '#'\n    case 15065:                     // 'preceding-sibling' '#'\n    case 15068:                     // 'processing-instruction' '#'\n    case 15070:                     // 'rename' '#'\n    case 15071:                     // 'replace' '#'\n    case 15072:                     // 'return' '#'\n    case 15073:                     // 'returning' '#'\n    case 15074:                     // 'revalidation' '#'\n    case 15076:                     // 'satisfies' '#'\n    case 15077:                     // 'schema' '#'\n    case 15078:                     // 'schema-attribute' '#'\n    case 15079:                     // 'schema-element' '#'\n    case 15080:                     // 'score' '#'\n    case 15081:                     // 'select' '#'\n    case 15082:                     // 'self' '#'\n    case 15087:                     // 'sliding' '#'\n    case 15088:                     // 'some' '#'\n    case 15089:                     // 'stable' '#'\n    case 15090:                     // 'start' '#'\n    case 15093:                     // 'strict' '#'\n    case 15095:                     // 'structured-item' '#'\n    case 15096:                     // 'switch' '#'\n    case 15097:                     // 'text' '#'\n    case 15101:                     // 'to' '#'\n    case 15102:                     // 'treat' '#'\n    case 15103:                     // 'true' '#'\n    case 15104:                     // 'try' '#'\n    case 15105:                     // 'tumbling' '#'\n    case 15106:                     // 'type' '#'\n    case 15107:                     // 'typeswitch' '#'\n    case 15108:                     // 'union' '#'\n    case 15110:                     // 'unordered' '#'\n    case 15111:                     // 'updating' '#'\n    case 15114:                     // 'validate' '#'\n    case 15115:                     // 'value' '#'\n    case 15116:                     // 'variable' '#'\n    case 15117:                     // 'version' '#'\n    case 15120:                     // 'where' '#'\n    case 15121:                     // 'while' '#'\n    case 15124:                     // 'with' '#'\n    case 17926:                     // EQName^Token '('\n    case 17991:                     // 'after' '('\n    case 17993:                     // 'allowing' '('\n    case 17994:                     // 'ancestor' '('\n    case 17995:                     // 'ancestor-or-self' '('\n    case 17996:                     // 'and' '('\n    case 17998:                     // 'append' '('\n    case 18000:                     // 'as' '('\n    case 18001:                     // 'ascending' '('\n    case 18002:                     // 'at' '('\n    case 18004:                     // 'base-uri' '('\n    case 18005:                     // 'before' '('\n    case 18006:                     // 'boundary-space' '('\n    case 18007:                     // 'break' '('\n    case 18009:                     // 'case' '('\n    case 18010:                     // 'cast' '('\n    case 18011:                     // 'castable' '('\n    case 18012:                     // 'catch' '('\n    case 18014:                     // 'child' '('\n    case 18015:                     // 'collation' '('\n    case 18018:                     // 'constraint' '('\n    case 18019:                     // 'construction' '('\n    case 18022:                     // 'context' '('\n    case 18023:                     // 'continue' '('\n    case 18024:                     // 'copy' '('\n    case 18025:                     // 'copy-namespaces' '('\n    case 18026:                     // 'count' '('\n    case 18027:                     // 'decimal-format' '('\n    case 18029:                     // 'declare' '('\n    case 18030:                     // 'default' '('\n    case 18031:                     // 'delete' '('\n    case 18032:                     // 'descendant' '('\n    case 18033:                     // 'descendant-or-self' '('\n    case 18034:                     // 'descending' '('\n    case 18039:                     // 'div' '('\n    case 18040:                     // 'document' '('\n    case 18043:                     // 'else' '('\n    case 18044:                     // 'empty' '('\n    case 18046:                     // 'encoding' '('\n    case 18047:                     // 'end' '('\n    case 18049:                     // 'eq' '('\n    case 18050:                     // 'every' '('\n    case 18052:                     // 'except' '('\n    case 18053:                     // 'exit' '('\n    case 18054:                     // 'external' '('\n    case 18055:                     // 'false' '('\n    case 18056:                     // 'first' '('\n    case 18057:                     // 'following' '('\n    case 18058:                     // 'following-sibling' '('\n    case 18059:                     // 'for' '('\n    case 18062:                     // 'from' '('\n    case 18063:                     // 'ft-option' '('\n    case 18067:                     // 'function' '('\n    case 18068:                     // 'ge' '('\n    case 18070:                     // 'group' '('\n    case 18072:                     // 'gt' '('\n    case 18073:                     // 'idiv' '('\n    case 18075:                     // 'import' '('\n    case 18076:                     // 'in' '('\n    case 18077:                     // 'index' '('\n    case 18081:                     // 'insert' '('\n    case 18082:                     // 'instance' '('\n    case 18083:                     // 'integrity' '('\n    case 18084:                     // 'intersect' '('\n    case 18085:                     // 'into' '('\n    case 18086:                     // 'is' '('\n    case 18088:                     // 'json' '('\n    case 18090:                     // 'jsoniq' '('\n    case 18093:                     // 'last' '('\n    case 18094:                     // 'lax' '('\n    case 18095:                     // 'le' '('\n    case 18097:                     // 'let' '('\n    case 18099:                     // 'loop' '('\n    case 18101:                     // 'lt' '('\n    case 18103:                     // 'mod' '('\n    case 18104:                     // 'modify' '('\n    case 18105:                     // 'module' '('\n    case 18107:                     // 'namespace' '('\n    case 18109:                     // 'ne' '('\n    case 18115:                     // 'nodes' '('\n    case 18117:                     // 'null' '('\n    case 18118:                     // 'object' '('\n    case 18122:                     // 'only' '('\n    case 18123:                     // 'option' '('\n    case 18124:                     // 'or' '('\n    case 18125:                     // 'order' '('\n    case 18126:                     // 'ordered' '('\n    case 18127:                     // 'ordering' '('\n    case 18130:                     // 'parent' '('\n    case 18136:                     // 'preceding' '('\n    case 18137:                     // 'preceding-sibling' '('\n    case 18142:                     // 'rename' '('\n    case 18143:                     // 'replace' '('\n    case 18144:                     // 'return' '('\n    case 18145:                     // 'returning' '('\n    case 18146:                     // 'revalidation' '('\n    case 18148:                     // 'satisfies' '('\n    case 18149:                     // 'schema' '('\n    case 18152:                     // 'score' '('\n    case 18153:                     // 'select' '('\n    case 18154:                     // 'self' '('\n    case 18159:                     // 'sliding' '('\n    case 18160:                     // 'some' '('\n    case 18161:                     // 'stable' '('\n    case 18162:                     // 'start' '('\n    case 18165:                     // 'strict' '('\n    case 18173:                     // 'to' '('\n    case 18174:                     // 'treat' '('\n    case 18175:                     // 'true' '('\n    case 18176:                     // 'try' '('\n    case 18177:                     // 'tumbling' '('\n    case 18178:                     // 'type' '('\n    case 18180:                     // 'union' '('\n    case 18182:                     // 'unordered' '('\n    case 18183:                     // 'updating' '('\n    case 18186:                     // 'validate' '('\n    case 18187:                     // 'value' '('\n    case 18188:                     // 'variable' '('\n    case 18189:                     // 'version' '('\n    case 18192:                     // 'where' '('\n    case 18193:                     // 'while' '('\n    case 18196:                     // 'with' '('\n    case 23175:                     // 'false' '.'\n    case 23237:                     // 'null' '.'\n    case 23295:                     // 'true' '.'\n    case 37459:                     // 'attribute' 'allowing'\n    case 37498:                     // 'element' 'allowing'\n    case 37563:                     // 'namespace' 'allowing'\n    case 37596:                     // 'processing-instruction' 'allowing'\n    case 37971:                     // 'attribute' 'ancestor'\n    case 38010:                     // 'element' 'ancestor'\n    case 38075:                     // 'namespace' 'ancestor'\n    case 38108:                     // 'processing-instruction' 'ancestor'\n    case 38483:                     // 'attribute' 'ancestor-or-self'\n    case 38522:                     // 'element' 'ancestor-or-self'\n    case 38587:                     // 'namespace' 'ancestor-or-self'\n    case 38620:                     // 'processing-instruction' 'ancestor-or-self'\n    case 40019:                     // 'attribute' 'append'\n    case 40058:                     // 'element' 'append'\n    case 40123:                     // 'namespace' 'append'\n    case 40156:                     // 'processing-instruction' 'append'\n    case 40531:                     // 'attribute' 'array'\n    case 40570:                     // 'element' 'array'\n    case 42579:                     // 'attribute' 'attribute'\n    case 42618:                     // 'element' 'attribute'\n    case 42683:                     // 'namespace' 'attribute'\n    case 42716:                     // 'processing-instruction' 'attribute'\n    case 43091:                     // 'attribute' 'base-uri'\n    case 43130:                     // 'element' 'base-uri'\n    case 43195:                     // 'namespace' 'base-uri'\n    case 43228:                     // 'processing-instruction' 'base-uri'\n    case 44115:                     // 'attribute' 'boundary-space'\n    case 44154:                     // 'element' 'boundary-space'\n    case 44219:                     // 'namespace' 'boundary-space'\n    case 44252:                     // 'processing-instruction' 'boundary-space'\n    case 44627:                     // 'attribute' 'break'\n    case 44666:                     // 'element' 'break'\n    case 44731:                     // 'namespace' 'break'\n    case 44764:                     // 'processing-instruction' 'break'\n    case 47187:                     // 'attribute' 'catch'\n    case 47226:                     // 'element' 'catch'\n    case 47291:                     // 'namespace' 'catch'\n    case 47324:                     // 'processing-instruction' 'catch'\n    case 48211:                     // 'attribute' 'child'\n    case 48250:                     // 'element' 'child'\n    case 48315:                     // 'namespace' 'child'\n    case 48348:                     // 'processing-instruction' 'child'\n    case 49747:                     // 'attribute' 'comment'\n    case 49786:                     // 'element' 'comment'\n    case 49851:                     // 'namespace' 'comment'\n    case 49884:                     // 'processing-instruction' 'comment'\n    case 50259:                     // 'attribute' 'constraint'\n    case 50298:                     // 'element' 'constraint'\n    case 50363:                     // 'namespace' 'constraint'\n    case 50396:                     // 'processing-instruction' 'constraint'\n    case 50771:                     // 'attribute' 'construction'\n    case 50810:                     // 'element' 'construction'\n    case 50875:                     // 'namespace' 'construction'\n    case 50908:                     // 'processing-instruction' 'construction'\n    case 52307:                     // 'attribute' 'context'\n    case 52346:                     // 'element' 'context'\n    case 52411:                     // 'namespace' 'context'\n    case 52444:                     // 'processing-instruction' 'context'\n    case 52819:                     // 'attribute' 'continue'\n    case 52858:                     // 'element' 'continue'\n    case 52923:                     // 'namespace' 'continue'\n    case 52956:                     // 'processing-instruction' 'continue'\n    case 53331:                     // 'attribute' 'copy'\n    case 53370:                     // 'element' 'copy'\n    case 53435:                     // 'namespace' 'copy'\n    case 53468:                     // 'processing-instruction' 'copy'\n    case 53843:                     // 'attribute' 'copy-namespaces'\n    case 53882:                     // 'element' 'copy-namespaces'\n    case 53947:                     // 'namespace' 'copy-namespaces'\n    case 53980:                     // 'processing-instruction' 'copy-namespaces'\n    case 54867:                     // 'attribute' 'decimal-format'\n    case 54906:                     // 'element' 'decimal-format'\n    case 54971:                     // 'namespace' 'decimal-format'\n    case 55004:                     // 'processing-instruction' 'decimal-format'\n    case 55891:                     // 'attribute' 'declare'\n    case 55930:                     // 'element' 'declare'\n    case 55995:                     // 'namespace' 'declare'\n    case 56028:                     // 'processing-instruction' 'declare'\n    case 56915:                     // 'attribute' 'delete'\n    case 56954:                     // 'element' 'delete'\n    case 57019:                     // 'namespace' 'delete'\n    case 57052:                     // 'processing-instruction' 'delete'\n    case 57427:                     // 'attribute' 'descendant'\n    case 57466:                     // 'element' 'descendant'\n    case 57531:                     // 'namespace' 'descendant'\n    case 57564:                     // 'processing-instruction' 'descendant'\n    case 57939:                     // 'attribute' 'descendant-or-self'\n    case 57978:                     // 'element' 'descendant-or-self'\n    case 58043:                     // 'namespace' 'descendant-or-self'\n    case 58076:                     // 'processing-instruction' 'descendant-or-self'\n    case 61523:                     // 'attribute' 'document'\n    case 61562:                     // 'element' 'document'\n    case 61627:                     // 'namespace' 'document'\n    case 61660:                     // 'processing-instruction' 'document'\n    case 62035:                     // 'attribute' 'document-node'\n    case 62074:                     // 'element' 'document-node'\n    case 62139:                     // 'namespace' 'document-node'\n    case 62172:                     // 'processing-instruction' 'document-node'\n    case 62547:                     // 'attribute' 'element'\n    case 62586:                     // 'element' 'element'\n    case 62651:                     // 'namespace' 'element'\n    case 62684:                     // 'processing-instruction' 'element'\n    case 64083:                     // 'attribute' 'empty-sequence'\n    case 64122:                     // 'element' 'empty-sequence'\n    case 64187:                     // 'namespace' 'empty-sequence'\n    case 64220:                     // 'processing-instruction' 'empty-sequence'\n    case 64595:                     // 'attribute' 'encoding'\n    case 64634:                     // 'element' 'encoding'\n    case 64699:                     // 'namespace' 'encoding'\n    case 64732:                     // 'processing-instruction' 'encoding'\n    case 66643:                     // 'attribute' 'every'\n    case 66682:                     // 'element' 'every'\n    case 66747:                     // 'namespace' 'every'\n    case 66780:                     // 'processing-instruction' 'every'\n    case 68179:                     // 'attribute' 'exit'\n    case 68218:                     // 'element' 'exit'\n    case 68283:                     // 'namespace' 'exit'\n    case 68316:                     // 'processing-instruction' 'exit'\n    case 68691:                     // 'attribute' 'external'\n    case 68730:                     // 'element' 'external'\n    case 68795:                     // 'namespace' 'external'\n    case 68828:                     // 'processing-instruction' 'external'\n    case 69203:                     // 'attribute' 'false'\n    case 69242:                     // 'element' 'false'\n    case 69307:                     // 'namespace' 'false'\n    case 69340:                     // 'processing-instruction' 'false'\n    case 69715:                     // 'attribute' 'first'\n    case 69754:                     // 'element' 'first'\n    case 69819:                     // 'namespace' 'first'\n    case 69852:                     // 'processing-instruction' 'first'\n    case 70227:                     // 'attribute' 'following'\n    case 70266:                     // 'element' 'following'\n    case 70331:                     // 'namespace' 'following'\n    case 70364:                     // 'processing-instruction' 'following'\n    case 70739:                     // 'attribute' 'following-sibling'\n    case 70778:                     // 'element' 'following-sibling'\n    case 70843:                     // 'namespace' 'following-sibling'\n    case 70876:                     // 'processing-instruction' 'following-sibling'\n    case 72787:                     // 'attribute' 'from'\n    case 72826:                     // 'element' 'from'\n    case 72891:                     // 'namespace' 'from'\n    case 72924:                     // 'processing-instruction' 'from'\n    case 73299:                     // 'attribute' 'ft-option'\n    case 73338:                     // 'element' 'ft-option'\n    case 73403:                     // 'namespace' 'ft-option'\n    case 73436:                     // 'processing-instruction' 'ft-option'\n    case 75347:                     // 'attribute' 'function'\n    case 75386:                     // 'element' 'function'\n    case 75451:                     // 'namespace' 'function'\n    case 75484:                     // 'processing-instruction' 'function'\n    case 78931:                     // 'attribute' 'if'\n    case 78970:                     // 'element' 'if'\n    case 79035:                     // 'namespace' 'if'\n    case 79068:                     // 'processing-instruction' 'if'\n    case 79443:                     // 'attribute' 'import'\n    case 79482:                     // 'element' 'import'\n    case 79547:                     // 'namespace' 'import'\n    case 79580:                     // 'processing-instruction' 'import'\n    case 79955:                     // 'attribute' 'in'\n    case 79994:                     // 'element' 'in'\n    case 80059:                     // 'namespace' 'in'\n    case 80092:                     // 'processing-instruction' 'in'\n    case 80467:                     // 'attribute' 'index'\n    case 80506:                     // 'element' 'index'\n    case 80571:                     // 'namespace' 'index'\n    case 80604:                     // 'processing-instruction' 'index'\n    case 82515:                     // 'attribute' 'insert'\n    case 82554:                     // 'element' 'insert'\n    case 82619:                     // 'namespace' 'insert'\n    case 82652:                     // 'processing-instruction' 'insert'\n    case 83539:                     // 'attribute' 'integrity'\n    case 83578:                     // 'element' 'integrity'\n    case 83643:                     // 'namespace' 'integrity'\n    case 83676:                     // 'processing-instruction' 'integrity'\n    case 85587:                     // 'attribute' 'item'\n    case 85626:                     // 'element' 'item'\n    case 85691:                     // 'namespace' 'item'\n    case 85724:                     // 'processing-instruction' 'item'\n    case 86099:                     // 'attribute' 'json'\n    case 86138:                     // 'element' 'json'\n    case 86203:                     // 'namespace' 'json'\n    case 86236:                     // 'processing-instruction' 'json'\n    case 86611:                     // 'attribute' 'json-item'\n    case 86650:                     // 'element' 'json-item'\n    case 87123:                     // 'attribute' 'jsoniq'\n    case 87162:                     // 'element' 'jsoniq'\n    case 87227:                     // 'namespace' 'jsoniq'\n    case 87260:                     // 'processing-instruction' 'jsoniq'\n    case 88659:                     // 'attribute' 'last'\n    case 88698:                     // 'element' 'last'\n    case 88763:                     // 'namespace' 'last'\n    case 88796:                     // 'processing-instruction' 'last'\n    case 89171:                     // 'attribute' 'lax'\n    case 89210:                     // 'element' 'lax'\n    case 89275:                     // 'namespace' 'lax'\n    case 89308:                     // 'processing-instruction' 'lax'\n    case 91731:                     // 'attribute' 'loop'\n    case 91770:                     // 'element' 'loop'\n    case 91835:                     // 'namespace' 'loop'\n    case 91868:                     // 'processing-instruction' 'loop'\n    case 94803:                     // 'attribute' 'module'\n    case 94842:                     // 'element' 'module'\n    case 94907:                     // 'namespace' 'module'\n    case 94940:                     // 'processing-instruction' 'module'\n    case 95827:                     // 'attribute' 'namespace'\n    case 95866:                     // 'element' 'namespace'\n    case 95931:                     // 'namespace' 'namespace'\n    case 95964:                     // 'processing-instruction' 'namespace'\n    case 96339:                     // 'attribute' 'namespace-node'\n    case 96378:                     // 'element' 'namespace-node'\n    case 96443:                     // 'namespace' 'namespace-node'\n    case 96476:                     // 'processing-instruction' 'namespace-node'\n    case 99411:                     // 'attribute' 'node'\n    case 99450:                     // 'element' 'node'\n    case 99515:                     // 'namespace' 'node'\n    case 99548:                     // 'processing-instruction' 'node'\n    case 99923:                     // 'attribute' 'nodes'\n    case 99962:                     // 'element' 'nodes'\n    case 100027:                    // 'namespace' 'nodes'\n    case 100060:                    // 'processing-instruction' 'nodes'\n    case 100947:                    // 'attribute' 'null'\n    case 100986:                    // 'element' 'null'\n    case 101051:                    // 'namespace' 'null'\n    case 101084:                    // 'processing-instruction' 'null'\n    case 101459:                    // 'attribute' 'object'\n    case 101498:                    // 'element' 'object'\n    case 101563:                    // 'namespace' 'object'\n    case 101596:                    // 'processing-instruction' 'object'\n    case 104019:                    // 'attribute' 'option'\n    case 104058:                    // 'element' 'option'\n    case 104123:                    // 'namespace' 'option'\n    case 104156:                    // 'processing-instruction' 'option'\n    case 105555:                    // 'attribute' 'ordered'\n    case 105594:                    // 'element' 'ordered'\n    case 105659:                    // 'namespace' 'ordered'\n    case 105692:                    // 'processing-instruction' 'ordered'\n    case 106067:                    // 'attribute' 'ordering'\n    case 106106:                    // 'element' 'ordering'\n    case 106171:                    // 'namespace' 'ordering'\n    case 106204:                    // 'processing-instruction' 'ordering'\n    case 107603:                    // 'attribute' 'parent'\n    case 107642:                    // 'element' 'parent'\n    case 107707:                    // 'namespace' 'parent'\n    case 107740:                    // 'processing-instruction' 'parent'\n    case 110675:                    // 'attribute' 'preceding'\n    case 110714:                    // 'element' 'preceding'\n    case 110779:                    // 'namespace' 'preceding'\n    case 110812:                    // 'processing-instruction' 'preceding'\n    case 111187:                    // 'attribute' 'preceding-sibling'\n    case 111226:                    // 'element' 'preceding-sibling'\n    case 111291:                    // 'namespace' 'preceding-sibling'\n    case 111324:                    // 'processing-instruction' 'preceding-sibling'\n    case 112723:                    // 'attribute' 'processing-instruction'\n    case 112762:                    // 'element' 'processing-instruction'\n    case 112827:                    // 'namespace' 'processing-instruction'\n    case 112860:                    // 'processing-instruction' 'processing-instruction'\n    case 113747:                    // 'attribute' 'rename'\n    case 113786:                    // 'element' 'rename'\n    case 113851:                    // 'namespace' 'rename'\n    case 113884:                    // 'processing-instruction' 'rename'\n    case 114259:                    // 'attribute' 'replace'\n    case 114298:                    // 'element' 'replace'\n    case 114363:                    // 'namespace' 'replace'\n    case 114396:                    // 'processing-instruction' 'replace'\n    case 115283:                    // 'attribute' 'returning'\n    case 115322:                    // 'element' 'returning'\n    case 115387:                    // 'namespace' 'returning'\n    case 115420:                    // 'processing-instruction' 'returning'\n    case 115795:                    // 'attribute' 'revalidation'\n    case 115834:                    // 'element' 'revalidation'\n    case 115899:                    // 'namespace' 'revalidation'\n    case 115932:                    // 'processing-instruction' 'revalidation'\n    case 117331:                    // 'attribute' 'schema'\n    case 117370:                    // 'element' 'schema'\n    case 117435:                    // 'namespace' 'schema'\n    case 117468:                    // 'processing-instruction' 'schema'\n    case 117843:                    // 'attribute' 'schema-attribute'\n    case 117882:                    // 'element' 'schema-attribute'\n    case 117947:                    // 'namespace' 'schema-attribute'\n    case 117980:                    // 'processing-instruction' 'schema-attribute'\n    case 118355:                    // 'attribute' 'schema-element'\n    case 118394:                    // 'element' 'schema-element'\n    case 118459:                    // 'namespace' 'schema-element'\n    case 118492:                    // 'processing-instruction' 'schema-element'\n    case 118867:                    // 'attribute' 'score'\n    case 118906:                    // 'element' 'score'\n    case 118971:                    // 'namespace' 'score'\n    case 119004:                    // 'processing-instruction' 'score'\n    case 119379:                    // 'attribute' 'select'\n    case 119418:                    // 'element' 'select'\n    case 119483:                    // 'namespace' 'select'\n    case 119516:                    // 'processing-instruction' 'select'\n    case 119891:                    // 'attribute' 'self'\n    case 119930:                    // 'element' 'self'\n    case 119995:                    // 'namespace' 'self'\n    case 120028:                    // 'processing-instruction' 'self'\n    case 122451:                    // 'attribute' 'sliding'\n    case 122490:                    // 'element' 'sliding'\n    case 122555:                    // 'namespace' 'sliding'\n    case 122588:                    // 'processing-instruction' 'sliding'\n    case 122963:                    // 'attribute' 'some'\n    case 123002:                    // 'element' 'some'\n    case 123067:                    // 'namespace' 'some'\n    case 123100:                    // 'processing-instruction' 'some'\n    case 125523:                    // 'attribute' 'strict'\n    case 125562:                    // 'element' 'strict'\n    case 125627:                    // 'namespace' 'strict'\n    case 125660:                    // 'processing-instruction' 'strict'\n    case 126547:                    // 'attribute' 'structured-item'\n    case 126586:                    // 'element' 'structured-item'\n    case 127059:                    // 'attribute' 'switch'\n    case 127098:                    // 'element' 'switch'\n    case 127163:                    // 'namespace' 'switch'\n    case 127196:                    // 'processing-instruction' 'switch'\n    case 127571:                    // 'attribute' 'text'\n    case 127610:                    // 'element' 'text'\n    case 127675:                    // 'namespace' 'text'\n    case 127708:                    // 'processing-instruction' 'text'\n    case 130643:                    // 'attribute' 'true'\n    case 130682:                    // 'element' 'true'\n    case 130747:                    // 'namespace' 'true'\n    case 130780:                    // 'processing-instruction' 'true'\n    case 131155:                    // 'attribute' 'try'\n    case 131194:                    // 'element' 'try'\n    case 131259:                    // 'namespace' 'try'\n    case 131292:                    // 'processing-instruction' 'try'\n    case 131667:                    // 'attribute' 'tumbling'\n    case 131706:                    // 'element' 'tumbling'\n    case 131771:                    // 'namespace' 'tumbling'\n    case 131804:                    // 'processing-instruction' 'tumbling'\n    case 132179:                    // 'attribute' 'type'\n    case 132218:                    // 'element' 'type'\n    case 132283:                    // 'namespace' 'type'\n    case 132316:                    // 'processing-instruction' 'type'\n    case 132691:                    // 'attribute' 'typeswitch'\n    case 132730:                    // 'element' 'typeswitch'\n    case 132795:                    // 'namespace' 'typeswitch'\n    case 132828:                    // 'processing-instruction' 'typeswitch'\n    case 134227:                    // 'attribute' 'unordered'\n    case 134266:                    // 'element' 'unordered'\n    case 134331:                    // 'namespace' 'unordered'\n    case 134364:                    // 'processing-instruction' 'unordered'\n    case 134739:                    // 'attribute' 'updating'\n    case 134778:                    // 'element' 'updating'\n    case 134843:                    // 'namespace' 'updating'\n    case 134876:                    // 'processing-instruction' 'updating'\n    case 136275:                    // 'attribute' 'validate'\n    case 136314:                    // 'element' 'validate'\n    case 136379:                    // 'namespace' 'validate'\n    case 136412:                    // 'processing-instruction' 'validate'\n    case 136787:                    // 'attribute' 'value'\n    case 136826:                    // 'element' 'value'\n    case 136891:                    // 'namespace' 'value'\n    case 136924:                    // 'processing-instruction' 'value'\n    case 137299:                    // 'attribute' 'variable'\n    case 137338:                    // 'element' 'variable'\n    case 137403:                    // 'namespace' 'variable'\n    case 137436:                    // 'processing-instruction' 'variable'\n    case 137811:                    // 'attribute' 'version'\n    case 137850:                    // 'element' 'version'\n    case 137915:                    // 'namespace' 'version'\n    case 137948:                    // 'processing-instruction' 'version'\n    case 139859:                    // 'attribute' 'while'\n    case 139898:                    // 'element' 'while'\n    case 139963:                    // 'namespace' 'while'\n    case 139996:                    // 'processing-instruction' 'while'\n    case 143955:                    // 'attribute' '{'\n    case 143969:                    // 'comment' '{'\n    case 143992:                    // 'document' '{'\n    case 143994:                    // 'element' '{'\n    case 144059:                    // 'namespace' '{'\n    case 144078:                    // 'ordered' '{'\n    case 144092:                    // 'processing-instruction' '{'\n    case 144121:                    // 'text' '{'\n    case 144134:                    // 'unordered' '{'\n      parse_PostfixExpr();\n      break;\n    default:\n      parse_AxisStep();\n    }\n    eventHandler.endNonterminal(\"StepExpr\", e0);\n  }\n\n  function try_StepExpr()\n  {\n    switch (l1)\n    {\n    case 83:                        // 'attribute'\n      lookahead2W(287);             // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |\n                                    // ',' | '-' | '/' | '//' | ':' | '::' | ';' | '<' | '<<' | '<=' | '=' | '>' |\n                                    // '>=' | '>>' | '[' | ']' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'by' |\n                                    // 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'contains' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'paragraphs' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sentences' | 'sliding' | 'some' | 'stable' |\n                                    // 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'times' | 'to' |\n                                    // 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | 'words' | '{' | '|' | '||' | '|}' | '}'\n      break;\n    case 122:                       // 'element'\n      lookahead2W(286);             // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |\n                                    // ',' | '-' | '/' | '//' | ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' |\n                                    // '>>' | '[' | ']' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'by' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'contains' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'paragraphs' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sentences' | 'sliding' | 'some' | 'stable' |\n                                    // 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'times' | 'to' |\n                                    // 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | 'words' | '{' | '|' | '||' | '|}' | '}'\n      break;\n    case 187:                       // 'namespace'\n    case 220:                       // 'processing-instruction'\n      lookahead2W(284);             // NCName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |\n                                    // ',' | '-' | '/' | '//' | ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' |\n                                    // '>>' | '[' | ']' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' |\n                                    // 'before' | 'boundary-space' | 'break' | 'by' | 'case' | 'cast' | 'castable' |\n                                    // 'catch' | 'child' | 'collation' | 'comment' | 'constraint' | 'construction' |\n                                    // 'contains' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' |\n                                    // 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'paragraphs' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sentences' | 'sliding' | 'some' | 'stable' |\n                                    // 'start' | 'strict' | 'switch' | 'text' | 'times' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // 'words' | '{' | '|' | '||' | '|}' | '}'\n      break;\n    case 135:                       // 'false'\n    case 197:                       // 'null'\n    case 255:                       // 'true'\n      lookahead2W(236);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '.' |\n                                    // '/' | '//' | ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' |\n                                    // ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'by' | 'case' |\n                                    // 'cast' | 'castable' | 'collation' | 'contains' | 'count' | 'default' |\n                                    // 'descending' | 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' |\n                                    // 'ge' | 'group' | 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' |\n                                    // 'le' | 'let' | 'lt' | 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' |\n                                    // 'paragraphs' | 'return' | 'satisfies' | 'sentences' | 'stable' | 'start' |\n                                    // 'times' | 'to' | 'treat' | 'union' | 'where' | 'with' | 'words' | '|' | '||' |\n                                    // '|}' | '}'\n      break;\n    case 97:                        // 'comment'\n    case 120:                       // 'document'\n    case 206:                       // 'ordered'\n    case 249:                       // 'text'\n    case 262:                       // 'unordered'\n      lookahead2W(238);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n                                    // '//' | ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' |\n                                    // 'after' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'by' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'sentences' | 'stable' | 'start' | 'times' | 'to' | 'treat' |\n                                    // 'union' | 'where' | 'with' | 'words' | '{' | '|' | '||' | '|}' | '}'\n      break;\n    case 79:                        // 'array'\n    case 125:                       // 'empty-sequence'\n    case 154:                       // 'if'\n    case 167:                       // 'item'\n    case 169:                       // 'json-item'\n    case 247:                       // 'structured-item'\n    case 248:                       // 'switch'\n    case 259:                       // 'typeswitch'\n      lookahead2W(229);             // S^WS | EOF | '!' | '!=' | '#' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n                                    // ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' | 'after' |\n                                    // 'and' | 'as' | 'ascending' | 'at' | 'before' | 'by' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'sentences' | 'stable' | 'start' | 'times' | 'to' | 'treat' |\n                                    // 'union' | 'where' | 'with' | 'words' | '|' | '||' | '|}' | '}'\n      break;\n    case 74:                        // 'ancestor'\n    case 75:                        // 'ancestor-or-self'\n    case 94:                        // 'child'\n    case 112:                       // 'descendant'\n    case 113:                       // 'descendant-or-self'\n    case 137:                       // 'following'\n    case 138:                       // 'following-sibling'\n    case 210:                       // 'parent'\n    case 216:                       // 'preceding'\n    case 217:                       // 'preceding-sibling'\n    case 234:                       // 'self'\n      lookahead2W(237);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n                                    // '//' | ':' | '::' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' |\n                                    // ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'by' | 'case' |\n                                    // 'cast' | 'castable' | 'collation' | 'contains' | 'count' | 'default' |\n                                    // 'descending' | 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' |\n                                    // 'ge' | 'group' | 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' |\n                                    // 'le' | 'let' | 'lt' | 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' |\n                                    // 'paragraphs' | 'return' | 'satisfies' | 'sentences' | 'stable' | 'start' |\n                                    // 'times' | 'to' | 'treat' | 'union' | 'where' | 'with' | 'words' | '|' | '||' |\n                                    // '|}' | '}'\n      break;\n    case 6:                         // EQName^Token\n    case 71:                        // 'after'\n    case 73:                        // 'allowing'\n    case 76:                        // 'and'\n    case 78:                        // 'append'\n    case 80:                        // 'as'\n    case 81:                        // 'ascending'\n    case 82:                        // 'at'\n    case 84:                        // 'base-uri'\n    case 85:                        // 'before'\n    case 86:                        // 'boundary-space'\n    case 87:                        // 'break'\n    case 89:                        // 'case'\n    case 90:                        // 'cast'\n    case 91:                        // 'castable'\n    case 92:                        // 'catch'\n    case 95:                        // 'collation'\n    case 98:                        // 'constraint'\n    case 99:                        // 'construction'\n    case 102:                       // 'context'\n    case 103:                       // 'continue'\n    case 104:                       // 'copy'\n    case 105:                       // 'copy-namespaces'\n    case 106:                       // 'count'\n    case 107:                       // 'decimal-format'\n    case 109:                       // 'declare'\n    case 110:                       // 'default'\n    case 111:                       // 'delete'\n    case 114:                       // 'descending'\n    case 119:                       // 'div'\n    case 121:                       // 'document-node'\n    case 123:                       // 'else'\n    case 124:                       // 'empty'\n    case 126:                       // 'encoding'\n    case 127:                       // 'end'\n    case 129:                       // 'eq'\n    case 130:                       // 'every'\n    case 132:                       // 'except'\n    case 133:                       // 'exit'\n    case 134:                       // 'external'\n    case 136:                       // 'first'\n    case 139:                       // 'for'\n    case 142:                       // 'from'\n    case 143:                       // 'ft-option'\n    case 147:                       // 'function'\n    case 148:                       // 'ge'\n    case 150:                       // 'group'\n    case 152:                       // 'gt'\n    case 153:                       // 'idiv'\n    case 155:                       // 'import'\n    case 156:                       // 'in'\n    case 157:                       // 'index'\n    case 161:                       // 'insert'\n    case 162:                       // 'instance'\n    case 163:                       // 'integrity'\n    case 164:                       // 'intersect'\n    case 165:                       // 'into'\n    case 166:                       // 'is'\n    case 168:                       // 'json'\n    case 170:                       // 'jsoniq'\n    case 173:                       // 'last'\n    case 174:                       // 'lax'\n    case 175:                       // 'le'\n    case 177:                       // 'let'\n    case 179:                       // 'loop'\n    case 181:                       // 'lt'\n    case 183:                       // 'mod'\n    case 184:                       // 'modify'\n    case 185:                       // 'module'\n    case 188:                       // 'namespace-node'\n    case 189:                       // 'ne'\n    case 194:                       // 'node'\n    case 195:                       // 'nodes'\n    case 198:                       // 'object'\n    case 202:                       // 'only'\n    case 203:                       // 'option'\n    case 204:                       // 'or'\n    case 205:                       // 'order'\n    case 207:                       // 'ordering'\n    case 222:                       // 'rename'\n    case 223:                       // 'replace'\n    case 224:                       // 'return'\n    case 225:                       // 'returning'\n    case 226:                       // 'revalidation'\n    case 228:                       // 'satisfies'\n    case 229:                       // 'schema'\n    case 230:                       // 'schema-attribute'\n    case 231:                       // 'schema-element'\n    case 232:                       // 'score'\n    case 233:                       // 'select'\n    case 239:                       // 'sliding'\n    case 240:                       // 'some'\n    case 241:                       // 'stable'\n    case 242:                       // 'start'\n    case 245:                       // 'strict'\n    case 253:                       // 'to'\n    case 254:                       // 'treat'\n    case 256:                       // 'try'\n    case 257:                       // 'tumbling'\n    case 258:                       // 'type'\n    case 260:                       // 'union'\n    case 263:                       // 'updating'\n    case 266:                       // 'validate'\n    case 267:                       // 'value'\n    case 268:                       // 'variable'\n    case 269:                       // 'version'\n    case 272:                       // 'where'\n    case 273:                       // 'while'\n    case 276:                       // 'with'\n      lookahead2W(233);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n                                    // '//' | ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' |\n                                    // 'after' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'by' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'sentences' | 'stable' | 'start' | 'times' | 'to' | 'treat' |\n                                    // 'union' | 'where' | 'with' | 'words' | '|' | '||' | '|}' | '}'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 12935                 // 'false' EOF\n     || lk == 12997                 // 'null' EOF\n     || lk == 13055                 // 'true' EOF\n     || lk == 13447                 // 'false' '!'\n     || lk == 13509                 // 'null' '!'\n     || lk == 13567                 // 'true' '!'\n     || lk == 13959                 // 'false' '!='\n     || lk == 14021                 // 'null' '!='\n     || lk == 14079                 // 'true' '!='\n     || lk == 19591                 // 'false' ')'\n     || lk == 19653                 // 'null' ')'\n     || lk == 19711                 // 'true' ')'\n     || lk == 20103                 // 'false' '*'\n     || lk == 20165                 // 'null' '*'\n     || lk == 20223                 // 'true' '*'\n     || lk == 21127                 // 'false' '+'\n     || lk == 21189                 // 'null' '+'\n     || lk == 21247                 // 'true' '+'\n     || lk == 21639                 // 'false' ','\n     || lk == 21701                 // 'null' ','\n     || lk == 21759                 // 'true' ','\n     || lk == 22151                 // 'false' '-'\n     || lk == 22213                 // 'null' '-'\n     || lk == 22271                 // 'true' '-'\n     || lk == 24199                 // 'false' '/'\n     || lk == 24261                 // 'null' '/'\n     || lk == 24319                 // 'true' '/'\n     || lk == 24711                 // 'false' '//'\n     || lk == 24773                 // 'null' '//'\n     || lk == 24831                 // 'true' '//'\n     || lk == 25735                 // 'false' ':'\n     || lk == 25797                 // 'null' ':'\n     || lk == 25855                 // 'true' ':'\n     || lk == 27783                 // 'false' ';'\n     || lk == 27845                 // 'null' ';'\n     || lk == 27903                 // 'true' ';'\n     || lk == 28295                 // 'false' '<'\n     || lk == 28357                 // 'null' '<'\n     || lk == 28415                 // 'true' '<'\n     || lk == 29831                 // 'false' '<<'\n     || lk == 29893                 // 'null' '<<'\n     || lk == 29951                 // 'true' '<<'\n     || lk == 30343                 // 'false' '<='\n     || lk == 30405                 // 'null' '<='\n     || lk == 30463                 // 'true' '<='\n     || lk == 31367                 // 'false' '='\n     || lk == 31429                 // 'null' '='\n     || lk == 31487                 // 'true' '='\n     || lk == 31879                 // 'false' '>'\n     || lk == 31941                 // 'null' '>'\n     || lk == 31999                 // 'true' '>'\n     || lk == 32391                 // 'false' '>='\n     || lk == 32453                 // 'null' '>='\n     || lk == 32511                 // 'true' '>='\n     || lk == 32903                 // 'false' '>>'\n     || lk == 32965                 // 'null' '>>'\n     || lk == 33023                 // 'true' '>>'\n     || lk == 35463                 // 'false' '['\n     || lk == 35525                 // 'null' '['\n     || lk == 35583                 // 'true' '['\n     || lk == 35975                 // 'false' ']'\n     || lk == 36037                 // 'null' ']'\n     || lk == 36095                 // 'true' ']'\n     || lk == 36435                 // 'attribute' 'after'\n     || lk == 36474                 // 'element' 'after'\n     || lk == 36487                 // 'false' 'after'\n     || lk == 36539                 // 'namespace' 'after'\n     || lk == 36549                 // 'null' 'after'\n     || lk == 36572                 // 'processing-instruction' 'after'\n     || lk == 36607                 // 'true' 'after'\n     || lk == 38995                 // 'attribute' 'and'\n     || lk == 39034                 // 'element' 'and'\n     || lk == 39047                 // 'false' 'and'\n     || lk == 39099                 // 'namespace' 'and'\n     || lk == 39109                 // 'null' 'and'\n     || lk == 39132                 // 'processing-instruction' 'and'\n     || lk == 39167                 // 'true' 'and'\n     || lk == 41043                 // 'attribute' 'as'\n     || lk == 41082                 // 'element' 'as'\n     || lk == 41095                 // 'false' 'as'\n     || lk == 41147                 // 'namespace' 'as'\n     || lk == 41157                 // 'null' 'as'\n     || lk == 41180                 // 'processing-instruction' 'as'\n     || lk == 41215                 // 'true' 'as'\n     || lk == 41555                 // 'attribute' 'ascending'\n     || lk == 41594                 // 'element' 'ascending'\n     || lk == 41607                 // 'false' 'ascending'\n     || lk == 41659                 // 'namespace' 'ascending'\n     || lk == 41669                 // 'null' 'ascending'\n     || lk == 41692                 // 'processing-instruction' 'ascending'\n     || lk == 41727                 // 'true' 'ascending'\n     || lk == 42067                 // 'attribute' 'at'\n     || lk == 42106                 // 'element' 'at'\n     || lk == 42119                 // 'false' 'at'\n     || lk == 42171                 // 'namespace' 'at'\n     || lk == 42181                 // 'null' 'at'\n     || lk == 42204                 // 'processing-instruction' 'at'\n     || lk == 42239                 // 'true' 'at'\n     || lk == 43603                 // 'attribute' 'before'\n     || lk == 43642                 // 'element' 'before'\n     || lk == 43655                 // 'false' 'before'\n     || lk == 43707                 // 'namespace' 'before'\n     || lk == 43717                 // 'null' 'before'\n     || lk == 43740                 // 'processing-instruction' 'before'\n     || lk == 43775                 // 'true' 'before'\n     || lk == 45191                 // 'false' 'by'\n     || lk == 45253                 // 'null' 'by'\n     || lk == 45311                 // 'true' 'by'\n     || lk == 45651                 // 'attribute' 'case'\n     || lk == 45690                 // 'element' 'case'\n     || lk == 45703                 // 'false' 'case'\n     || lk == 45755                 // 'namespace' 'case'\n     || lk == 45765                 // 'null' 'case'\n     || lk == 45788                 // 'processing-instruction' 'case'\n     || lk == 45823                 // 'true' 'case'\n     || lk == 46163                 // 'attribute' 'cast'\n     || lk == 46202                 // 'element' 'cast'\n     || lk == 46215                 // 'false' 'cast'\n     || lk == 46267                 // 'namespace' 'cast'\n     || lk == 46277                 // 'null' 'cast'\n     || lk == 46300                 // 'processing-instruction' 'cast'\n     || lk == 46335                 // 'true' 'cast'\n     || lk == 46675                 // 'attribute' 'castable'\n     || lk == 46714                 // 'element' 'castable'\n     || lk == 46727                 // 'false' 'castable'\n     || lk == 46779                 // 'namespace' 'castable'\n     || lk == 46789                 // 'null' 'castable'\n     || lk == 46812                 // 'processing-instruction' 'castable'\n     || lk == 46847                 // 'true' 'castable'\n     || lk == 48723                 // 'attribute' 'collation'\n     || lk == 48762                 // 'element' 'collation'\n     || lk == 48775                 // 'false' 'collation'\n     || lk == 48827                 // 'namespace' 'collation'\n     || lk == 48837                 // 'null' 'collation'\n     || lk == 48860                 // 'processing-instruction' 'collation'\n     || lk == 48895                 // 'true' 'collation'\n     || lk == 51335                 // 'false' 'contains'\n     || lk == 51397                 // 'null' 'contains'\n     || lk == 51455                 // 'true' 'contains'\n     || lk == 54355                 // 'attribute' 'count'\n     || lk == 54394                 // 'element' 'count'\n     || lk == 54407                 // 'false' 'count'\n     || lk == 54459                 // 'namespace' 'count'\n     || lk == 54469                 // 'null' 'count'\n     || lk == 54492                 // 'processing-instruction' 'count'\n     || lk == 54527                 // 'true' 'count'\n     || lk == 56403                 // 'attribute' 'default'\n     || lk == 56442                 // 'element' 'default'\n     || lk == 56455                 // 'false' 'default'\n     || lk == 56507                 // 'namespace' 'default'\n     || lk == 56517                 // 'null' 'default'\n     || lk == 56540                 // 'processing-instruction' 'default'\n     || lk == 56575                 // 'true' 'default'\n     || lk == 58451                 // 'attribute' 'descending'\n     || lk == 58490                 // 'element' 'descending'\n     || lk == 58503                 // 'false' 'descending'\n     || lk == 58555                 // 'namespace' 'descending'\n     || lk == 58565                 // 'null' 'descending'\n     || lk == 58588                 // 'processing-instruction' 'descending'\n     || lk == 58623                 // 'true' 'descending'\n     || lk == 61011                 // 'attribute' 'div'\n     || lk == 61050                 // 'element' 'div'\n     || lk == 61063                 // 'false' 'div'\n     || lk == 61115                 // 'namespace' 'div'\n     || lk == 61125                 // 'null' 'div'\n     || lk == 61148                 // 'processing-instruction' 'div'\n     || lk == 61183                 // 'true' 'div'\n     || lk == 63059                 // 'attribute' 'else'\n     || lk == 63098                 // 'element' 'else'\n     || lk == 63111                 // 'false' 'else'\n     || lk == 63163                 // 'namespace' 'else'\n     || lk == 63173                 // 'null' 'else'\n     || lk == 63196                 // 'processing-instruction' 'else'\n     || lk == 63231                 // 'true' 'else'\n     || lk == 63571                 // 'attribute' 'empty'\n     || lk == 63610                 // 'element' 'empty'\n     || lk == 63623                 // 'false' 'empty'\n     || lk == 63675                 // 'namespace' 'empty'\n     || lk == 63685                 // 'null' 'empty'\n     || lk == 63708                 // 'processing-instruction' 'empty'\n     || lk == 63743                 // 'true' 'empty'\n     || lk == 65107                 // 'attribute' 'end'\n     || lk == 65146                 // 'element' 'end'\n     || lk == 65159                 // 'false' 'end'\n     || lk == 65211                 // 'namespace' 'end'\n     || lk == 65221                 // 'null' 'end'\n     || lk == 65244                 // 'processing-instruction' 'end'\n     || lk == 65279                 // 'true' 'end'\n     || lk == 66131                 // 'attribute' 'eq'\n     || lk == 66170                 // 'element' 'eq'\n     || lk == 66183                 // 'false' 'eq'\n     || lk == 66235                 // 'namespace' 'eq'\n     || lk == 66245                 // 'null' 'eq'\n     || lk == 66268                 // 'processing-instruction' 'eq'\n     || lk == 66303                 // 'true' 'eq'\n     || lk == 67667                 // 'attribute' 'except'\n     || lk == 67706                 // 'element' 'except'\n     || lk == 67719                 // 'false' 'except'\n     || lk == 67771                 // 'namespace' 'except'\n     || lk == 67781                 // 'null' 'except'\n     || lk == 67804                 // 'processing-instruction' 'except'\n     || lk == 67839                 // 'true' 'except'\n     || lk == 71251                 // 'attribute' 'for'\n     || lk == 71290                 // 'element' 'for'\n     || lk == 71303                 // 'false' 'for'\n     || lk == 71355                 // 'namespace' 'for'\n     || lk == 71365                 // 'null' 'for'\n     || lk == 71388                 // 'processing-instruction' 'for'\n     || lk == 71423                 // 'true' 'for'\n     || lk == 75859                 // 'attribute' 'ge'\n     || lk == 75898                 // 'element' 'ge'\n     || lk == 75911                 // 'false' 'ge'\n     || lk == 75963                 // 'namespace' 'ge'\n     || lk == 75973                 // 'null' 'ge'\n     || lk == 75996                 // 'processing-instruction' 'ge'\n     || lk == 76031                 // 'true' 'ge'\n     || lk == 76883                 // 'attribute' 'group'\n     || lk == 76922                 // 'element' 'group'\n     || lk == 76935                 // 'false' 'group'\n     || lk == 76987                 // 'namespace' 'group'\n     || lk == 76997                 // 'null' 'group'\n     || lk == 77020                 // 'processing-instruction' 'group'\n     || lk == 77055                 // 'true' 'group'\n     || lk == 77907                 // 'attribute' 'gt'\n     || lk == 77946                 // 'element' 'gt'\n     || lk == 77959                 // 'false' 'gt'\n     || lk == 78011                 // 'namespace' 'gt'\n     || lk == 78021                 // 'null' 'gt'\n     || lk == 78044                 // 'processing-instruction' 'gt'\n     || lk == 78079                 // 'true' 'gt'\n     || lk == 78419                 // 'attribute' 'idiv'\n     || lk == 78458                 // 'element' 'idiv'\n     || lk == 78471                 // 'false' 'idiv'\n     || lk == 78523                 // 'namespace' 'idiv'\n     || lk == 78533                 // 'null' 'idiv'\n     || lk == 78556                 // 'processing-instruction' 'idiv'\n     || lk == 78591                 // 'true' 'idiv'\n     || lk == 83027                 // 'attribute' 'instance'\n     || lk == 83066                 // 'element' 'instance'\n     || lk == 83079                 // 'false' 'instance'\n     || lk == 83131                 // 'namespace' 'instance'\n     || lk == 83141                 // 'null' 'instance'\n     || lk == 83164                 // 'processing-instruction' 'instance'\n     || lk == 83199                 // 'true' 'instance'\n     || lk == 84051                 // 'attribute' 'intersect'\n     || lk == 84090                 // 'element' 'intersect'\n     || lk == 84103                 // 'false' 'intersect'\n     || lk == 84155                 // 'namespace' 'intersect'\n     || lk == 84165                 // 'null' 'intersect'\n     || lk == 84188                 // 'processing-instruction' 'intersect'\n     || lk == 84223                 // 'true' 'intersect'\n     || lk == 84563                 // 'attribute' 'into'\n     || lk == 84602                 // 'element' 'into'\n     || lk == 84615                 // 'false' 'into'\n     || lk == 84667                 // 'namespace' 'into'\n     || lk == 84677                 // 'null' 'into'\n     || lk == 84700                 // 'processing-instruction' 'into'\n     || lk == 84735                 // 'true' 'into'\n     || lk == 85075                 // 'attribute' 'is'\n     || lk == 85114                 // 'element' 'is'\n     || lk == 85127                 // 'false' 'is'\n     || lk == 85179                 // 'namespace' 'is'\n     || lk == 85189                 // 'null' 'is'\n     || lk == 85212                 // 'processing-instruction' 'is'\n     || lk == 85247                 // 'true' 'is'\n     || lk == 89683                 // 'attribute' 'le'\n     || lk == 89722                 // 'element' 'le'\n     || lk == 89735                 // 'false' 'le'\n     || lk == 89787                 // 'namespace' 'le'\n     || lk == 89797                 // 'null' 'le'\n     || lk == 89820                 // 'processing-instruction' 'le'\n     || lk == 89855                 // 'true' 'le'\n     || lk == 90707                 // 'attribute' 'let'\n     || lk == 90746                 // 'element' 'let'\n     || lk == 90759                 // 'false' 'let'\n     || lk == 90811                 // 'namespace' 'let'\n     || lk == 90821                 // 'null' 'let'\n     || lk == 90844                 // 'processing-instruction' 'let'\n     || lk == 90879                 // 'true' 'let'\n     || lk == 92755                 // 'attribute' 'lt'\n     || lk == 92794                 // 'element' 'lt'\n     || lk == 92807                 // 'false' 'lt'\n     || lk == 92859                 // 'namespace' 'lt'\n     || lk == 92869                 // 'null' 'lt'\n     || lk == 92892                 // 'processing-instruction' 'lt'\n     || lk == 92927                 // 'true' 'lt'\n     || lk == 93779                 // 'attribute' 'mod'\n     || lk == 93818                 // 'element' 'mod'\n     || lk == 93831                 // 'false' 'mod'\n     || lk == 93883                 // 'namespace' 'mod'\n     || lk == 93893                 // 'null' 'mod'\n     || lk == 93916                 // 'processing-instruction' 'mod'\n     || lk == 93951                 // 'true' 'mod'\n     || lk == 94291                 // 'attribute' 'modify'\n     || lk == 94330                 // 'element' 'modify'\n     || lk == 94343                 // 'false' 'modify'\n     || lk == 94395                 // 'namespace' 'modify'\n     || lk == 94405                 // 'null' 'modify'\n     || lk == 94428                 // 'processing-instruction' 'modify'\n     || lk == 94463                 // 'true' 'modify'\n     || lk == 96851                 // 'attribute' 'ne'\n     || lk == 96890                 // 'element' 'ne'\n     || lk == 96903                 // 'false' 'ne'\n     || lk == 96955                 // 'namespace' 'ne'\n     || lk == 96965                 // 'null' 'ne'\n     || lk == 96988                 // 'processing-instruction' 'ne'\n     || lk == 97023                 // 'true' 'ne'\n     || lk == 103507                // 'attribute' 'only'\n     || lk == 103546                // 'element' 'only'\n     || lk == 103559                // 'false' 'only'\n     || lk == 103611                // 'namespace' 'only'\n     || lk == 103621                // 'null' 'only'\n     || lk == 103644                // 'processing-instruction' 'only'\n     || lk == 103679                // 'true' 'only'\n     || lk == 104531                // 'attribute' 'or'\n     || lk == 104570                // 'element' 'or'\n     || lk == 104583                // 'false' 'or'\n     || lk == 104635                // 'namespace' 'or'\n     || lk == 104645                // 'null' 'or'\n     || lk == 104668                // 'processing-instruction' 'or'\n     || lk == 104703                // 'true' 'or'\n     || lk == 105043                // 'attribute' 'order'\n     || lk == 105082                // 'element' 'order'\n     || lk == 105095                // 'false' 'order'\n     || lk == 105147                // 'namespace' 'order'\n     || lk == 105157                // 'null' 'order'\n     || lk == 105180                // 'processing-instruction' 'order'\n     || lk == 105215                // 'true' 'order'\n     || lk == 107143                // 'false' 'paragraphs'\n     || lk == 107205                // 'null' 'paragraphs'\n     || lk == 107263                // 'true' 'paragraphs'\n     || lk == 114771                // 'attribute' 'return'\n     || lk == 114810                // 'element' 'return'\n     || lk == 114823                // 'false' 'return'\n     || lk == 114875                // 'namespace' 'return'\n     || lk == 114885                // 'null' 'return'\n     || lk == 114908                // 'processing-instruction' 'return'\n     || lk == 114943                // 'true' 'return'\n     || lk == 116819                // 'attribute' 'satisfies'\n     || lk == 116858                // 'element' 'satisfies'\n     || lk == 116871                // 'false' 'satisfies'\n     || lk == 116923                // 'namespace' 'satisfies'\n     || lk == 116933                // 'null' 'satisfies'\n     || lk == 116956                // 'processing-instruction' 'satisfies'\n     || lk == 116991                // 'true' 'satisfies'\n     || lk == 121479                // 'false' 'sentences'\n     || lk == 121541                // 'null' 'sentences'\n     || lk == 121599                // 'true' 'sentences'\n     || lk == 123475                // 'attribute' 'stable'\n     || lk == 123514                // 'element' 'stable'\n     || lk == 123527                // 'false' 'stable'\n     || lk == 123579                // 'namespace' 'stable'\n     || lk == 123589                // 'null' 'stable'\n     || lk == 123612                // 'processing-instruction' 'stable'\n     || lk == 123647                // 'true' 'stable'\n     || lk == 123987                // 'attribute' 'start'\n     || lk == 124026                // 'element' 'start'\n     || lk == 124039                // 'false' 'start'\n     || lk == 124091                // 'namespace' 'start'\n     || lk == 124101                // 'null' 'start'\n     || lk == 124124                // 'processing-instruction' 'start'\n     || lk == 124159                // 'true' 'start'\n     || lk == 129159                // 'false' 'times'\n     || lk == 129221                // 'null' 'times'\n     || lk == 129279                // 'true' 'times'\n     || lk == 129619                // 'attribute' 'to'\n     || lk == 129658                // 'element' 'to'\n     || lk == 129671                // 'false' 'to'\n     || lk == 129723                // 'namespace' 'to'\n     || lk == 129733                // 'null' 'to'\n     || lk == 129756                // 'processing-instruction' 'to'\n     || lk == 129791                // 'true' 'to'\n     || lk == 130131                // 'attribute' 'treat'\n     || lk == 130170                // 'element' 'treat'\n     || lk == 130183                // 'false' 'treat'\n     || lk == 130235                // 'namespace' 'treat'\n     || lk == 130245                // 'null' 'treat'\n     || lk == 130268                // 'processing-instruction' 'treat'\n     || lk == 130303                // 'true' 'treat'\n     || lk == 133203                // 'attribute' 'union'\n     || lk == 133242                // 'element' 'union'\n     || lk == 133255                // 'false' 'union'\n     || lk == 133307                // 'namespace' 'union'\n     || lk == 133317                // 'null' 'union'\n     || lk == 133340                // 'processing-instruction' 'union'\n     || lk == 133375                // 'true' 'union'\n     || lk == 139347                // 'attribute' 'where'\n     || lk == 139386                // 'element' 'where'\n     || lk == 139399                // 'false' 'where'\n     || lk == 139451                // 'namespace' 'where'\n     || lk == 139461                // 'null' 'where'\n     || lk == 139484                // 'processing-instruction' 'where'\n     || lk == 139519                // 'true' 'where'\n     || lk == 141395                // 'attribute' 'with'\n     || lk == 141434                // 'element' 'with'\n     || lk == 141447                // 'false' 'with'\n     || lk == 141499                // 'namespace' 'with'\n     || lk == 141509                // 'null' 'with'\n     || lk == 141532                // 'processing-instruction' 'with'\n     || lk == 141567                // 'true' 'with'\n     || lk == 142983                // 'false' 'words'\n     || lk == 143045                // 'null' 'words'\n     || lk == 143103                // 'true' 'words'\n     || lk == 145543                // 'false' '|'\n     || lk == 145605                // 'null' '|'\n     || lk == 145663                // 'true' '|'\n     || lk == 146055                // 'false' '||'\n     || lk == 146117                // 'null' '||'\n     || lk == 146175                // 'true' '||'\n     || lk == 146567                // 'false' '|}'\n     || lk == 146629                // 'null' '|}'\n     || lk == 146687                // 'true' '|}'\n     || lk == 147079                // 'false' '}'\n     || lk == 147141                // 'null' '}'\n     || lk == 147199)               // 'true' '}'\n    {\n      lk = memoized(4, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_PostfixExpr();\n          memoize(4, e0A, -1);\n          lk = -3;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(4, e0A, -2);\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n    case 8:                         // IntegerLiteral\n    case 9:                         // DecimalLiteral\n    case 10:                        // DoubleLiteral\n    case 11:                        // StringLiteral\n    case 31:                        // '$'\n    case 32:                        // '$$'\n    case 33:                        // '%'\n    case 35:                        // '('\n    case 55:                        // '<'\n    case 56:                        // '<!--'\n    case 60:                        // '<?'\n    case 69:                        // '['\n    case 281:                       // '{'\n    case 283:                       // '{|'\n    case 3155:                      // 'attribute' EQName^Token\n    case 3194:                      // 'element' EQName^Token\n    case 9915:                      // 'namespace' NCName^Token\n    case 9948:                      // 'processing-instruction' NCName^Token\n    case 14854:                     // EQName^Token '#'\n    case 14919:                     // 'after' '#'\n    case 14921:                     // 'allowing' '#'\n    case 14922:                     // 'ancestor' '#'\n    case 14923:                     // 'ancestor-or-self' '#'\n    case 14924:                     // 'and' '#'\n    case 14926:                     // 'append' '#'\n    case 14927:                     // 'array' '#'\n    case 14928:                     // 'as' '#'\n    case 14929:                     // 'ascending' '#'\n    case 14930:                     // 'at' '#'\n    case 14931:                     // 'attribute' '#'\n    case 14932:                     // 'base-uri' '#'\n    case 14933:                     // 'before' '#'\n    case 14934:                     // 'boundary-space' '#'\n    case 14935:                     // 'break' '#'\n    case 14937:                     // 'case' '#'\n    case 14938:                     // 'cast' '#'\n    case 14939:                     // 'castable' '#'\n    case 14940:                     // 'catch' '#'\n    case 14942:                     // 'child' '#'\n    case 14943:                     // 'collation' '#'\n    case 14945:                     // 'comment' '#'\n    case 14946:                     // 'constraint' '#'\n    case 14947:                     // 'construction' '#'\n    case 14950:                     // 'context' '#'\n    case 14951:                     // 'continue' '#'\n    case 14952:                     // 'copy' '#'\n    case 14953:                     // 'copy-namespaces' '#'\n    case 14954:                     // 'count' '#'\n    case 14955:                     // 'decimal-format' '#'\n    case 14957:                     // 'declare' '#'\n    case 14958:                     // 'default' '#'\n    case 14959:                     // 'delete' '#'\n    case 14960:                     // 'descendant' '#'\n    case 14961:                     // 'descendant-or-self' '#'\n    case 14962:                     // 'descending' '#'\n    case 14967:                     // 'div' '#'\n    case 14968:                     // 'document' '#'\n    case 14969:                     // 'document-node' '#'\n    case 14970:                     // 'element' '#'\n    case 14971:                     // 'else' '#'\n    case 14972:                     // 'empty' '#'\n    case 14973:                     // 'empty-sequence' '#'\n    case 14974:                     // 'encoding' '#'\n    case 14975:                     // 'end' '#'\n    case 14977:                     // 'eq' '#'\n    case 14978:                     // 'every' '#'\n    case 14980:                     // 'except' '#'\n    case 14981:                     // 'exit' '#'\n    case 14982:                     // 'external' '#'\n    case 14983:                     // 'false' '#'\n    case 14984:                     // 'first' '#'\n    case 14985:                     // 'following' '#'\n    case 14986:                     // 'following-sibling' '#'\n    case 14987:                     // 'for' '#'\n    case 14990:                     // 'from' '#'\n    case 14991:                     // 'ft-option' '#'\n    case 14995:                     // 'function' '#'\n    case 14996:                     // 'ge' '#'\n    case 14998:                     // 'group' '#'\n    case 15000:                     // 'gt' '#'\n    case 15001:                     // 'idiv' '#'\n    case 15002:                     // 'if' '#'\n    case 15003:                     // 'import' '#'\n    case 15004:                     // 'in' '#'\n    case 15005:                     // 'index' '#'\n    case 15009:                     // 'insert' '#'\n    case 15010:                     // 'instance' '#'\n    case 15011:                     // 'integrity' '#'\n    case 15012:                     // 'intersect' '#'\n    case 15013:                     // 'into' '#'\n    case 15014:                     // 'is' '#'\n    case 15015:                     // 'item' '#'\n    case 15016:                     // 'json' '#'\n    case 15017:                     // 'json-item' '#'\n    case 15018:                     // 'jsoniq' '#'\n    case 15021:                     // 'last' '#'\n    case 15022:                     // 'lax' '#'\n    case 15023:                     // 'le' '#'\n    case 15025:                     // 'let' '#'\n    case 15027:                     // 'loop' '#'\n    case 15029:                     // 'lt' '#'\n    case 15031:                     // 'mod' '#'\n    case 15032:                     // 'modify' '#'\n    case 15033:                     // 'module' '#'\n    case 15035:                     // 'namespace' '#'\n    case 15036:                     // 'namespace-node' '#'\n    case 15037:                     // 'ne' '#'\n    case 15042:                     // 'node' '#'\n    case 15043:                     // 'nodes' '#'\n    case 15045:                     // 'null' '#'\n    case 15046:                     // 'object' '#'\n    case 15050:                     // 'only' '#'\n    case 15051:                     // 'option' '#'\n    case 15052:                     // 'or' '#'\n    case 15053:                     // 'order' '#'\n    case 15054:                     // 'ordered' '#'\n    case 15055:                     // 'ordering' '#'\n    case 15058:                     // 'parent' '#'\n    case 15064:                     // 'preceding' '#'\n    case 15065:                     // 'preceding-sibling' '#'\n    case 15068:                     // 'processing-instruction' '#'\n    case 15070:                     // 'rename' '#'\n    case 15071:                     // 'replace' '#'\n    case 15072:                     // 'return' '#'\n    case 15073:                     // 'returning' '#'\n    case 15074:                     // 'revalidation' '#'\n    case 15076:                     // 'satisfies' '#'\n    case 15077:                     // 'schema' '#'\n    case 15078:                     // 'schema-attribute' '#'\n    case 15079:                     // 'schema-element' '#'\n    case 15080:                     // 'score' '#'\n    case 15081:                     // 'select' '#'\n    case 15082:                     // 'self' '#'\n    case 15087:                     // 'sliding' '#'\n    case 15088:                     // 'some' '#'\n    case 15089:                     // 'stable' '#'\n    case 15090:                     // 'start' '#'\n    case 15093:                     // 'strict' '#'\n    case 15095:                     // 'structured-item' '#'\n    case 15096:                     // 'switch' '#'\n    case 15097:                     // 'text' '#'\n    case 15101:                     // 'to' '#'\n    case 15102:                     // 'treat' '#'\n    case 15103:                     // 'true' '#'\n    case 15104:                     // 'try' '#'\n    case 15105:                     // 'tumbling' '#'\n    case 15106:                     // 'type' '#'\n    case 15107:                     // 'typeswitch' '#'\n    case 15108:                     // 'union' '#'\n    case 15110:                     // 'unordered' '#'\n    case 15111:                     // 'updating' '#'\n    case 15114:                     // 'validate' '#'\n    case 15115:                     // 'value' '#'\n    case 15116:                     // 'variable' '#'\n    case 15117:                     // 'version' '#'\n    case 15120:                     // 'where' '#'\n    case 15121:                     // 'while' '#'\n    case 15124:                     // 'with' '#'\n    case 17926:                     // EQName^Token '('\n    case 17991:                     // 'after' '('\n    case 17993:                     // 'allowing' '('\n    case 17994:                     // 'ancestor' '('\n    case 17995:                     // 'ancestor-or-self' '('\n    case 17996:                     // 'and' '('\n    case 17998:                     // 'append' '('\n    case 18000:                     // 'as' '('\n    case 18001:                     // 'ascending' '('\n    case 18002:                     // 'at' '('\n    case 18004:                     // 'base-uri' '('\n    case 18005:                     // 'before' '('\n    case 18006:                     // 'boundary-space' '('\n    case 18007:                     // 'break' '('\n    case 18009:                     // 'case' '('\n    case 18010:                     // 'cast' '('\n    case 18011:                     // 'castable' '('\n    case 18012:                     // 'catch' '('\n    case 18014:                     // 'child' '('\n    case 18015:                     // 'collation' '('\n    case 18018:                     // 'constraint' '('\n    case 18019:                     // 'construction' '('\n    case 18022:                     // 'context' '('\n    case 18023:                     // 'continue' '('\n    case 18024:                     // 'copy' '('\n    case 18025:                     // 'copy-namespaces' '('\n    case 18026:                     // 'count' '('\n    case 18027:                     // 'decimal-format' '('\n    case 18029:                     // 'declare' '('\n    case 18030:                     // 'default' '('\n    case 18031:                     // 'delete' '('\n    case 18032:                     // 'descendant' '('\n    case 18033:                     // 'descendant-or-self' '('\n    case 18034:                     // 'descending' '('\n    case 18039:                     // 'div' '('\n    case 18040:                     // 'document' '('\n    case 18043:                     // 'else' '('\n    case 18044:                     // 'empty' '('\n    case 18046:                     // 'encoding' '('\n    case 18047:                     // 'end' '('\n    case 18049:                     // 'eq' '('\n    case 18050:                     // 'every' '('\n    case 18052:                     // 'except' '('\n    case 18053:                     // 'exit' '('\n    case 18054:                     // 'external' '('\n    case 18055:                     // 'false' '('\n    case 18056:                     // 'first' '('\n    case 18057:                     // 'following' '('\n    case 18058:                     // 'following-sibling' '('\n    case 18059:                     // 'for' '('\n    case 18062:                     // 'from' '('\n    case 18063:                     // 'ft-option' '('\n    case 18067:                     // 'function' '('\n    case 18068:                     // 'ge' '('\n    case 18070:                     // 'group' '('\n    case 18072:                     // 'gt' '('\n    case 18073:                     // 'idiv' '('\n    case 18075:                     // 'import' '('\n    case 18076:                     // 'in' '('\n    case 18077:                     // 'index' '('\n    case 18081:                     // 'insert' '('\n    case 18082:                     // 'instance' '('\n    case 18083:                     // 'integrity' '('\n    case 18084:                     // 'intersect' '('\n    case 18085:                     // 'into' '('\n    case 18086:                     // 'is' '('\n    case 18088:                     // 'json' '('\n    case 18090:                     // 'jsoniq' '('\n    case 18093:                     // 'last' '('\n    case 18094:                     // 'lax' '('\n    case 18095:                     // 'le' '('\n    case 18097:                     // 'let' '('\n    case 18099:                     // 'loop' '('\n    case 18101:                     // 'lt' '('\n    case 18103:                     // 'mod' '('\n    case 18104:                     // 'modify' '('\n    case 18105:                     // 'module' '('\n    case 18107:                     // 'namespace' '('\n    case 18109:                     // 'ne' '('\n    case 18115:                     // 'nodes' '('\n    case 18117:                     // 'null' '('\n    case 18118:                     // 'object' '('\n    case 18122:                     // 'only' '('\n    case 18123:                     // 'option' '('\n    case 18124:                     // 'or' '('\n    case 18125:                     // 'order' '('\n    case 18126:                     // 'ordered' '('\n    case 18127:                     // 'ordering' '('\n    case 18130:                     // 'parent' '('\n    case 18136:                     // 'preceding' '('\n    case 18137:                     // 'preceding-sibling' '('\n    case 18142:                     // 'rename' '('\n    case 18143:                     // 'replace' '('\n    case 18144:                     // 'return' '('\n    case 18145:                     // 'returning' '('\n    case 18146:                     // 'revalidation' '('\n    case 18148:                     // 'satisfies' '('\n    case 18149:                     // 'schema' '('\n    case 18152:                     // 'score' '('\n    case 18153:                     // 'select' '('\n    case 18154:                     // 'self' '('\n    case 18159:                     // 'sliding' '('\n    case 18160:                     // 'some' '('\n    case 18161:                     // 'stable' '('\n    case 18162:                     // 'start' '('\n    case 18165:                     // 'strict' '('\n    case 18173:                     // 'to' '('\n    case 18174:                     // 'treat' '('\n    case 18175:                     // 'true' '('\n    case 18176:                     // 'try' '('\n    case 18177:                     // 'tumbling' '('\n    case 18178:                     // 'type' '('\n    case 18180:                     // 'union' '('\n    case 18182:                     // 'unordered' '('\n    case 18183:                     // 'updating' '('\n    case 18186:                     // 'validate' '('\n    case 18187:                     // 'value' '('\n    case 18188:                     // 'variable' '('\n    case 18189:                     // 'version' '('\n    case 18192:                     // 'where' '('\n    case 18193:                     // 'while' '('\n    case 18196:                     // 'with' '('\n    case 23175:                     // 'false' '.'\n    case 23237:                     // 'null' '.'\n    case 23295:                     // 'true' '.'\n    case 37459:                     // 'attribute' 'allowing'\n    case 37498:                     // 'element' 'allowing'\n    case 37563:                     // 'namespace' 'allowing'\n    case 37596:                     // 'processing-instruction' 'allowing'\n    case 37971:                     // 'attribute' 'ancestor'\n    case 38010:                     // 'element' 'ancestor'\n    case 38075:                     // 'namespace' 'ancestor'\n    case 38108:                     // 'processing-instruction' 'ancestor'\n    case 38483:                     // 'attribute' 'ancestor-or-self'\n    case 38522:                     // 'element' 'ancestor-or-self'\n    case 38587:                     // 'namespace' 'ancestor-or-self'\n    case 38620:                     // 'processing-instruction' 'ancestor-or-self'\n    case 40019:                     // 'attribute' 'append'\n    case 40058:                     // 'element' 'append'\n    case 40123:                     // 'namespace' 'append'\n    case 40156:                     // 'processing-instruction' 'append'\n    case 40531:                     // 'attribute' 'array'\n    case 40570:                     // 'element' 'array'\n    case 42579:                     // 'attribute' 'attribute'\n    case 42618:                     // 'element' 'attribute'\n    case 42683:                     // 'namespace' 'attribute'\n    case 42716:                     // 'processing-instruction' 'attribute'\n    case 43091:                     // 'attribute' 'base-uri'\n    case 43130:                     // 'element' 'base-uri'\n    case 43195:                     // 'namespace' 'base-uri'\n    case 43228:                     // 'processing-instruction' 'base-uri'\n    case 44115:                     // 'attribute' 'boundary-space'\n    case 44154:                     // 'element' 'boundary-space'\n    case 44219:                     // 'namespace' 'boundary-space'\n    case 44252:                     // 'processing-instruction' 'boundary-space'\n    case 44627:                     // 'attribute' 'break'\n    case 44666:                     // 'element' 'break'\n    case 44731:                     // 'namespace' 'break'\n    case 44764:                     // 'processing-instruction' 'break'\n    case 47187:                     // 'attribute' 'catch'\n    case 47226:                     // 'element' 'catch'\n    case 47291:                     // 'namespace' 'catch'\n    case 47324:                     // 'processing-instruction' 'catch'\n    case 48211:                     // 'attribute' 'child'\n    case 48250:                     // 'element' 'child'\n    case 48315:                     // 'namespace' 'child'\n    case 48348:                     // 'processing-instruction' 'child'\n    case 49747:                     // 'attribute' 'comment'\n    case 49786:                     // 'element' 'comment'\n    case 49851:                     // 'namespace' 'comment'\n    case 49884:                     // 'processing-instruction' 'comment'\n    case 50259:                     // 'attribute' 'constraint'\n    case 50298:                     // 'element' 'constraint'\n    case 50363:                     // 'namespace' 'constraint'\n    case 50396:                     // 'processing-instruction' 'constraint'\n    case 50771:                     // 'attribute' 'construction'\n    case 50810:                     // 'element' 'construction'\n    case 50875:                     // 'namespace' 'construction'\n    case 50908:                     // 'processing-instruction' 'construction'\n    case 52307:                     // 'attribute' 'context'\n    case 52346:                     // 'element' 'context'\n    case 52411:                     // 'namespace' 'context'\n    case 52444:                     // 'processing-instruction' 'context'\n    case 52819:                     // 'attribute' 'continue'\n    case 52858:                     // 'element' 'continue'\n    case 52923:                     // 'namespace' 'continue'\n    case 52956:                     // 'processing-instruction' 'continue'\n    case 53331:                     // 'attribute' 'copy'\n    case 53370:                     // 'element' 'copy'\n    case 53435:                     // 'namespace' 'copy'\n    case 53468:                     // 'processing-instruction' 'copy'\n    case 53843:                     // 'attribute' 'copy-namespaces'\n    case 53882:                     // 'element' 'copy-namespaces'\n    case 53947:                     // 'namespace' 'copy-namespaces'\n    case 53980:                     // 'processing-instruction' 'copy-namespaces'\n    case 54867:                     // 'attribute' 'decimal-format'\n    case 54906:                     // 'element' 'decimal-format'\n    case 54971:                     // 'namespace' 'decimal-format'\n    case 55004:                     // 'processing-instruction' 'decimal-format'\n    case 55891:                     // 'attribute' 'declare'\n    case 55930:                     // 'element' 'declare'\n    case 55995:                     // 'namespace' 'declare'\n    case 56028:                     // 'processing-instruction' 'declare'\n    case 56915:                     // 'attribute' 'delete'\n    case 56954:                     // 'element' 'delete'\n    case 57019:                     // 'namespace' 'delete'\n    case 57052:                     // 'processing-instruction' 'delete'\n    case 57427:                     // 'attribute' 'descendant'\n    case 57466:                     // 'element' 'descendant'\n    case 57531:                     // 'namespace' 'descendant'\n    case 57564:                     // 'processing-instruction' 'descendant'\n    case 57939:                     // 'attribute' 'descendant-or-self'\n    case 57978:                     // 'element' 'descendant-or-self'\n    case 58043:                     // 'namespace' 'descendant-or-self'\n    case 58076:                     // 'processing-instruction' 'descendant-or-self'\n    case 61523:                     // 'attribute' 'document'\n    case 61562:                     // 'element' 'document'\n    case 61627:                     // 'namespace' 'document'\n    case 61660:                     // 'processing-instruction' 'document'\n    case 62035:                     // 'attribute' 'document-node'\n    case 62074:                     // 'element' 'document-node'\n    case 62139:                     // 'namespace' 'document-node'\n    case 62172:                     // 'processing-instruction' 'document-node'\n    case 62547:                     // 'attribute' 'element'\n    case 62586:                     // 'element' 'element'\n    case 62651:                     // 'namespace' 'element'\n    case 62684:                     // 'processing-instruction' 'element'\n    case 64083:                     // 'attribute' 'empty-sequence'\n    case 64122:                     // 'element' 'empty-sequence'\n    case 64187:                     // 'namespace' 'empty-sequence'\n    case 64220:                     // 'processing-instruction' 'empty-sequence'\n    case 64595:                     // 'attribute' 'encoding'\n    case 64634:                     // 'element' 'encoding'\n    case 64699:                     // 'namespace' 'encoding'\n    case 64732:                     // 'processing-instruction' 'encoding'\n    case 66643:                     // 'attribute' 'every'\n    case 66682:                     // 'element' 'every'\n    case 66747:                     // 'namespace' 'every'\n    case 66780:                     // 'processing-instruction' 'every'\n    case 68179:                     // 'attribute' 'exit'\n    case 68218:                     // 'element' 'exit'\n    case 68283:                     // 'namespace' 'exit'\n    case 68316:                     // 'processing-instruction' 'exit'\n    case 68691:                     // 'attribute' 'external'\n    case 68730:                     // 'element' 'external'\n    case 68795:                     // 'namespace' 'external'\n    case 68828:                     // 'processing-instruction' 'external'\n    case 69203:                     // 'attribute' 'false'\n    case 69242:                     // 'element' 'false'\n    case 69307:                     // 'namespace' 'false'\n    case 69340:                     // 'processing-instruction' 'false'\n    case 69715:                     // 'attribute' 'first'\n    case 69754:                     // 'element' 'first'\n    case 69819:                     // 'namespace' 'first'\n    case 69852:                     // 'processing-instruction' 'first'\n    case 70227:                     // 'attribute' 'following'\n    case 70266:                     // 'element' 'following'\n    case 70331:                     // 'namespace' 'following'\n    case 70364:                     // 'processing-instruction' 'following'\n    case 70739:                     // 'attribute' 'following-sibling'\n    case 70778:                     // 'element' 'following-sibling'\n    case 70843:                     // 'namespace' 'following-sibling'\n    case 70876:                     // 'processing-instruction' 'following-sibling'\n    case 72787:                     // 'attribute' 'from'\n    case 72826:                     // 'element' 'from'\n    case 72891:                     // 'namespace' 'from'\n    case 72924:                     // 'processing-instruction' 'from'\n    case 73299:                     // 'attribute' 'ft-option'\n    case 73338:                     // 'element' 'ft-option'\n    case 73403:                     // 'namespace' 'ft-option'\n    case 73436:                     // 'processing-instruction' 'ft-option'\n    case 75347:                     // 'attribute' 'function'\n    case 75386:                     // 'element' 'function'\n    case 75451:                     // 'namespace' 'function'\n    case 75484:                     // 'processing-instruction' 'function'\n    case 78931:                     // 'attribute' 'if'\n    case 78970:                     // 'element' 'if'\n    case 79035:                     // 'namespace' 'if'\n    case 79068:                     // 'processing-instruction' 'if'\n    case 79443:                     // 'attribute' 'import'\n    case 79482:                     // 'element' 'import'\n    case 79547:                     // 'namespace' 'import'\n    case 79580:                     // 'processing-instruction' 'import'\n    case 79955:                     // 'attribute' 'in'\n    case 79994:                     // 'element' 'in'\n    case 80059:                     // 'namespace' 'in'\n    case 80092:                     // 'processing-instruction' 'in'\n    case 80467:                     // 'attribute' 'index'\n    case 80506:                     // 'element' 'index'\n    case 80571:                     // 'namespace' 'index'\n    case 80604:                     // 'processing-instruction' 'index'\n    case 82515:                     // 'attribute' 'insert'\n    case 82554:                     // 'element' 'insert'\n    case 82619:                     // 'namespace' 'insert'\n    case 82652:                     // 'processing-instruction' 'insert'\n    case 83539:                     // 'attribute' 'integrity'\n    case 83578:                     // 'element' 'integrity'\n    case 83643:                     // 'namespace' 'integrity'\n    case 83676:                     // 'processing-instruction' 'integrity'\n    case 85587:                     // 'attribute' 'item'\n    case 85626:                     // 'element' 'item'\n    case 85691:                     // 'namespace' 'item'\n    case 85724:                     // 'processing-instruction' 'item'\n    case 86099:                     // 'attribute' 'json'\n    case 86138:                     // 'element' 'json'\n    case 86203:                     // 'namespace' 'json'\n    case 86236:                     // 'processing-instruction' 'json'\n    case 86611:                     // 'attribute' 'json-item'\n    case 86650:                     // 'element' 'json-item'\n    case 87123:                     // 'attribute' 'jsoniq'\n    case 87162:                     // 'element' 'jsoniq'\n    case 87227:                     // 'namespace' 'jsoniq'\n    case 87260:                     // 'processing-instruction' 'jsoniq'\n    case 88659:                     // 'attribute' 'last'\n    case 88698:                     // 'element' 'last'\n    case 88763:                     // 'namespace' 'last'\n    case 88796:                     // 'processing-instruction' 'last'\n    case 89171:                     // 'attribute' 'lax'\n    case 89210:                     // 'element' 'lax'\n    case 89275:                     // 'namespace' 'lax'\n    case 89308:                     // 'processing-instruction' 'lax'\n    case 91731:                     // 'attribute' 'loop'\n    case 91770:                     // 'element' 'loop'\n    case 91835:                     // 'namespace' 'loop'\n    case 91868:                     // 'processing-instruction' 'loop'\n    case 94803:                     // 'attribute' 'module'\n    case 94842:                     // 'element' 'module'\n    case 94907:                     // 'namespace' 'module'\n    case 94940:                     // 'processing-instruction' 'module'\n    case 95827:                     // 'attribute' 'namespace'\n    case 95866:                     // 'element' 'namespace'\n    case 95931:                     // 'namespace' 'namespace'\n    case 95964:                     // 'processing-instruction' 'namespace'\n    case 96339:                     // 'attribute' 'namespace-node'\n    case 96378:                     // 'element' 'namespace-node'\n    case 96443:                     // 'namespace' 'namespace-node'\n    case 96476:                     // 'processing-instruction' 'namespace-node'\n    case 99411:                     // 'attribute' 'node'\n    case 99450:                     // 'element' 'node'\n    case 99515:                     // 'namespace' 'node'\n    case 99548:                     // 'processing-instruction' 'node'\n    case 99923:                     // 'attribute' 'nodes'\n    case 99962:                     // 'element' 'nodes'\n    case 100027:                    // 'namespace' 'nodes'\n    case 100060:                    // 'processing-instruction' 'nodes'\n    case 100947:                    // 'attribute' 'null'\n    case 100986:                    // 'element' 'null'\n    case 101051:                    // 'namespace' 'null'\n    case 101084:                    // 'processing-instruction' 'null'\n    case 101459:                    // 'attribute' 'object'\n    case 101498:                    // 'element' 'object'\n    case 101563:                    // 'namespace' 'object'\n    case 101596:                    // 'processing-instruction' 'object'\n    case 104019:                    // 'attribute' 'option'\n    case 104058:                    // 'element' 'option'\n    case 104123:                    // 'namespace' 'option'\n    case 104156:                    // 'processing-instruction' 'option'\n    case 105555:                    // 'attribute' 'ordered'\n    case 105594:                    // 'element' 'ordered'\n    case 105659:                    // 'namespace' 'ordered'\n    case 105692:                    // 'processing-instruction' 'ordered'\n    case 106067:                    // 'attribute' 'ordering'\n    case 106106:                    // 'element' 'ordering'\n    case 106171:                    // 'namespace' 'ordering'\n    case 106204:                    // 'processing-instruction' 'ordering'\n    case 107603:                    // 'attribute' 'parent'\n    case 107642:                    // 'element' 'parent'\n    case 107707:                    // 'namespace' 'parent'\n    case 107740:                    // 'processing-instruction' 'parent'\n    case 110675:                    // 'attribute' 'preceding'\n    case 110714:                    // 'element' 'preceding'\n    case 110779:                    // 'namespace' 'preceding'\n    case 110812:                    // 'processing-instruction' 'preceding'\n    case 111187:                    // 'attribute' 'preceding-sibling'\n    case 111226:                    // 'element' 'preceding-sibling'\n    case 111291:                    // 'namespace' 'preceding-sibling'\n    case 111324:                    // 'processing-instruction' 'preceding-sibling'\n    case 112723:                    // 'attribute' 'processing-instruction'\n    case 112762:                    // 'element' 'processing-instruction'\n    case 112827:                    // 'namespace' 'processing-instruction'\n    case 112860:                    // 'processing-instruction' 'processing-instruction'\n    case 113747:                    // 'attribute' 'rename'\n    case 113786:                    // 'element' 'rename'\n    case 113851:                    // 'namespace' 'rename'\n    case 113884:                    // 'processing-instruction' 'rename'\n    case 114259:                    // 'attribute' 'replace'\n    case 114298:                    // 'element' 'replace'\n    case 114363:                    // 'namespace' 'replace'\n    case 114396:                    // 'processing-instruction' 'replace'\n    case 115283:                    // 'attribute' 'returning'\n    case 115322:                    // 'element' 'returning'\n    case 115387:                    // 'namespace' 'returning'\n    case 115420:                    // 'processing-instruction' 'returning'\n    case 115795:                    // 'attribute' 'revalidation'\n    case 115834:                    // 'element' 'revalidation'\n    case 115899:                    // 'namespace' 'revalidation'\n    case 115932:                    // 'processing-instruction' 'revalidation'\n    case 117331:                    // 'attribute' 'schema'\n    case 117370:                    // 'element' 'schema'\n    case 117435:                    // 'namespace' 'schema'\n    case 117468:                    // 'processing-instruction' 'schema'\n    case 117843:                    // 'attribute' 'schema-attribute'\n    case 117882:                    // 'element' 'schema-attribute'\n    case 117947:                    // 'namespace' 'schema-attribute'\n    case 117980:                    // 'processing-instruction' 'schema-attribute'\n    case 118355:                    // 'attribute' 'schema-element'\n    case 118394:                    // 'element' 'schema-element'\n    case 118459:                    // 'namespace' 'schema-element'\n    case 118492:                    // 'processing-instruction' 'schema-element'\n    case 118867:                    // 'attribute' 'score'\n    case 118906:                    // 'element' 'score'\n    case 118971:                    // 'namespace' 'score'\n    case 119004:                    // 'processing-instruction' 'score'\n    case 119379:                    // 'attribute' 'select'\n    case 119418:                    // 'element' 'select'\n    case 119483:                    // 'namespace' 'select'\n    case 119516:                    // 'processing-instruction' 'select'\n    case 119891:                    // 'attribute' 'self'\n    case 119930:                    // 'element' 'self'\n    case 119995:                    // 'namespace' 'self'\n    case 120028:                    // 'processing-instruction' 'self'\n    case 122451:                    // 'attribute' 'sliding'\n    case 122490:                    // 'element' 'sliding'\n    case 122555:                    // 'namespace' 'sliding'\n    case 122588:                    // 'processing-instruction' 'sliding'\n    case 122963:                    // 'attribute' 'some'\n    case 123002:                    // 'element' 'some'\n    case 123067:                    // 'namespace' 'some'\n    case 123100:                    // 'processing-instruction' 'some'\n    case 125523:                    // 'attribute' 'strict'\n    case 125562:                    // 'element' 'strict'\n    case 125627:                    // 'namespace' 'strict'\n    case 125660:                    // 'processing-instruction' 'strict'\n    case 126547:                    // 'attribute' 'structured-item'\n    case 126586:                    // 'element' 'structured-item'\n    case 127059:                    // 'attribute' 'switch'\n    case 127098:                    // 'element' 'switch'\n    case 127163:                    // 'namespace' 'switch'\n    case 127196:                    // 'processing-instruction' 'switch'\n    case 127571:                    // 'attribute' 'text'\n    case 127610:                    // 'element' 'text'\n    case 127675:                    // 'namespace' 'text'\n    case 127708:                    // 'processing-instruction' 'text'\n    case 130643:                    // 'attribute' 'true'\n    case 130682:                    // 'element' 'true'\n    case 130747:                    // 'namespace' 'true'\n    case 130780:                    // 'processing-instruction' 'true'\n    case 131155:                    // 'attribute' 'try'\n    case 131194:                    // 'element' 'try'\n    case 131259:                    // 'namespace' 'try'\n    case 131292:                    // 'processing-instruction' 'try'\n    case 131667:                    // 'attribute' 'tumbling'\n    case 131706:                    // 'element' 'tumbling'\n    case 131771:                    // 'namespace' 'tumbling'\n    case 131804:                    // 'processing-instruction' 'tumbling'\n    case 132179:                    // 'attribute' 'type'\n    case 132218:                    // 'element' 'type'\n    case 132283:                    // 'namespace' 'type'\n    case 132316:                    // 'processing-instruction' 'type'\n    case 132691:                    // 'attribute' 'typeswitch'\n    case 132730:                    // 'element' 'typeswitch'\n    case 132795:                    // 'namespace' 'typeswitch'\n    case 132828:                    // 'processing-instruction' 'typeswitch'\n    case 134227:                    // 'attribute' 'unordered'\n    case 134266:                    // 'element' 'unordered'\n    case 134331:                    // 'namespace' 'unordered'\n    case 134364:                    // 'processing-instruction' 'unordered'\n    case 134739:                    // 'attribute' 'updating'\n    case 134778:                    // 'element' 'updating'\n    case 134843:                    // 'namespace' 'updating'\n    case 134876:                    // 'processing-instruction' 'updating'\n    case 136275:                    // 'attribute' 'validate'\n    case 136314:                    // 'element' 'validate'\n    case 136379:                    // 'namespace' 'validate'\n    case 136412:                    // 'processing-instruction' 'validate'\n    case 136787:                    // 'attribute' 'value'\n    case 136826:                    // 'element' 'value'\n    case 136891:                    // 'namespace' 'value'\n    case 136924:                    // 'processing-instruction' 'value'\n    case 137299:                    // 'attribute' 'variable'\n    case 137338:                    // 'element' 'variable'\n    case 137403:                    // 'namespace' 'variable'\n    case 137436:                    // 'processing-instruction' 'variable'\n    case 137811:                    // 'attribute' 'version'\n    case 137850:                    // 'element' 'version'\n    case 137915:                    // 'namespace' 'version'\n    case 137948:                    // 'processing-instruction' 'version'\n    case 139859:                    // 'attribute' 'while'\n    case 139898:                    // 'element' 'while'\n    case 139963:                    // 'namespace' 'while'\n    case 139996:                    // 'processing-instruction' 'while'\n    case 143955:                    // 'attribute' '{'\n    case 143969:                    // 'comment' '{'\n    case 143992:                    // 'document' '{'\n    case 143994:                    // 'element' '{'\n    case 144059:                    // 'namespace' '{'\n    case 144078:                    // 'ordered' '{'\n    case 144092:                    // 'processing-instruction' '{'\n    case 144121:                    // 'text' '{'\n    case 144134:                    // 'unordered' '{'\n      try_PostfixExpr();\n      break;\n    case -3:\n      break;\n    default:\n      try_AxisStep();\n    }\n  }\n\n  function parse_AxisStep()\n  {\n    eventHandler.startNonterminal(\"AxisStep\", e0);\n    switch (l1)\n    {\n    case 74:                        // 'ancestor'\n    case 75:                        // 'ancestor-or-self'\n    case 210:                       // 'parent'\n    case 216:                       // 'preceding'\n    case 217:                       // 'preceding-sibling'\n      lookahead2W(231);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n                                    // '::' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' | 'after' |\n                                    // 'and' | 'as' | 'ascending' | 'at' | 'before' | 'by' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'sentences' | 'stable' | 'start' | 'times' | 'to' | 'treat' |\n                                    // 'union' | 'where' | 'with' | 'words' | '|' | '||' | '|}' | '}'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 46:                        // '..'\n    case 26698:                     // 'ancestor' '::'\n    case 26699:                     // 'ancestor-or-self' '::'\n    case 26834:                     // 'parent' '::'\n    case 26840:                     // 'preceding' '::'\n    case 26841:                     // 'preceding-sibling' '::'\n      parse_ReverseStep();\n      break;\n    default:\n      parse_ForwardStep();\n    }\n    lookahead1W(227);               // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n                                    // ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' | 'after' | 'and' |\n                                    // 'as' | 'ascending' | 'at' | 'before' | 'by' | 'case' | 'cast' | 'castable' |\n                                    // 'collation' | 'contains' | 'count' | 'default' | 'descending' | 'div' | 'else' |\n                                    // 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' | 'gt' | 'idiv' |\n                                    // 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' | 'mod' |\n                                    // 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'sentences' | 'stable' | 'start' | 'times' | 'to' | 'treat' |\n                                    // 'union' | 'where' | 'with' | 'words' | '|' | '||' | '|}' | '}'\n    whitespace();\n    parse_PredicateList();\n    eventHandler.endNonterminal(\"AxisStep\", e0);\n  }\n\n  function try_AxisStep()\n  {\n    switch (l1)\n    {\n    case 74:                        // 'ancestor'\n    case 75:                        // 'ancestor-or-self'\n    case 210:                       // 'parent'\n    case 216:                       // 'preceding'\n    case 217:                       // 'preceding-sibling'\n      lookahead2W(231);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n                                    // '::' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' | 'after' |\n                                    // 'and' | 'as' | 'ascending' | 'at' | 'before' | 'by' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'sentences' | 'stable' | 'start' | 'times' | 'to' | 'treat' |\n                                    // 'union' | 'where' | 'with' | 'words' | '|' | '||' | '|}' | '}'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 46:                        // '..'\n    case 26698:                     // 'ancestor' '::'\n    case 26699:                     // 'ancestor-or-self' '::'\n    case 26834:                     // 'parent' '::'\n    case 26840:                     // 'preceding' '::'\n    case 26841:                     // 'preceding-sibling' '::'\n      try_ReverseStep();\n      break;\n    default:\n      try_ForwardStep();\n    }\n    lookahead1W(227);               // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n                                    // ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' | 'after' | 'and' |\n                                    // 'as' | 'ascending' | 'at' | 'before' | 'by' | 'case' | 'cast' | 'castable' |\n                                    // 'collation' | 'contains' | 'count' | 'default' | 'descending' | 'div' | 'else' |\n                                    // 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' | 'gt' | 'idiv' |\n                                    // 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' | 'mod' |\n                                    // 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'sentences' | 'stable' | 'start' | 'times' | 'to' | 'treat' |\n                                    // 'union' | 'where' | 'with' | 'words' | '|' | '||' | '|}' | '}'\n    try_PredicateList();\n  }\n\n  function parse_ForwardStep()\n  {\n    eventHandler.startNonterminal(\"ForwardStep\", e0);\n    switch (l1)\n    {\n    case 83:                        // 'attribute'\n      lookahead2W(235);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n                                    // ':' | '::' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' |\n                                    // 'after' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'by' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'sentences' | 'stable' | 'start' | 'times' | 'to' | 'treat' |\n                                    // 'union' | 'where' | 'with' | 'words' | '|' | '||' | '|}' | '}'\n      break;\n    case 94:                        // 'child'\n    case 112:                       // 'descendant'\n    case 113:                       // 'descendant-or-self'\n    case 137:                       // 'following'\n    case 138:                       // 'following-sibling'\n    case 234:                       // 'self'\n      lookahead2W(231);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n                                    // '::' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' | 'after' |\n                                    // 'and' | 'as' | 'ascending' | 'at' | 'before' | 'by' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'sentences' | 'stable' | 'start' | 'times' | 'to' | 'treat' |\n                                    // 'union' | 'where' | 'with' | 'words' | '|' | '||' | '|}' | '}'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 26707:                     // 'attribute' '::'\n    case 26718:                     // 'child' '::'\n    case 26736:                     // 'descendant' '::'\n    case 26737:                     // 'descendant-or-self' '::'\n    case 26761:                     // 'following' '::'\n    case 26762:                     // 'following-sibling' '::'\n    case 26858:                     // 'self' '::'\n      parse_ForwardAxis();\n      lookahead1W(248);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n      whitespace();\n      parse_NodeTest();\n      break;\n    default:\n      parse_AbbrevForwardStep();\n    }\n    eventHandler.endNonterminal(\"ForwardStep\", e0);\n  }\n\n  function try_ForwardStep()\n  {\n    switch (l1)\n    {\n    case 83:                        // 'attribute'\n      lookahead2W(235);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n                                    // ':' | '::' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' |\n                                    // 'after' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'by' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'sentences' | 'stable' | 'start' | 'times' | 'to' | 'treat' |\n                                    // 'union' | 'where' | 'with' | 'words' | '|' | '||' | '|}' | '}'\n      break;\n    case 94:                        // 'child'\n    case 112:                       // 'descendant'\n    case 113:                       // 'descendant-or-self'\n    case 137:                       // 'following'\n    case 138:                       // 'following-sibling'\n    case 234:                       // 'self'\n      lookahead2W(231);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n                                    // '::' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' | 'after' |\n                                    // 'and' | 'as' | 'ascending' | 'at' | 'before' | 'by' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'sentences' | 'stable' | 'start' | 'times' | 'to' | 'treat' |\n                                    // 'union' | 'where' | 'with' | 'words' | '|' | '||' | '|}' | '}'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 26707:                     // 'attribute' '::'\n    case 26718:                     // 'child' '::'\n    case 26736:                     // 'descendant' '::'\n    case 26737:                     // 'descendant-or-self' '::'\n    case 26761:                     // 'following' '::'\n    case 26762:                     // 'following-sibling' '::'\n    case 26858:                     // 'self' '::'\n      try_ForwardAxis();\n      lookahead1W(248);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n      try_NodeTest();\n      break;\n    default:\n      try_AbbrevForwardStep();\n    }\n  }\n\n  function parse_ForwardAxis()\n  {\n    eventHandler.startNonterminal(\"ForwardAxis\", e0);\n    switch (l1)\n    {\n    case 94:                        // 'child'\n      shift(94);                    // 'child'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shift(52);                    // '::'\n      break;\n    case 112:                       // 'descendant'\n      shift(112);                   // 'descendant'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shift(52);                    // '::'\n      break;\n    case 83:                        // 'attribute'\n      shift(83);                    // 'attribute'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shift(52);                    // '::'\n      break;\n    case 234:                       // 'self'\n      shift(234);                   // 'self'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shift(52);                    // '::'\n      break;\n    case 113:                       // 'descendant-or-self'\n      shift(113);                   // 'descendant-or-self'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shift(52);                    // '::'\n      break;\n    case 138:                       // 'following-sibling'\n      shift(138);                   // 'following-sibling'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shift(52);                    // '::'\n      break;\n    default:\n      shift(137);                   // 'following'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shift(52);                    // '::'\n    }\n    eventHandler.endNonterminal(\"ForwardAxis\", e0);\n  }\n\n  function try_ForwardAxis()\n  {\n    switch (l1)\n    {\n    case 94:                        // 'child'\n      shiftT(94);                   // 'child'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shiftT(52);                   // '::'\n      break;\n    case 112:                       // 'descendant'\n      shiftT(112);                  // 'descendant'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shiftT(52);                   // '::'\n      break;\n    case 83:                        // 'attribute'\n      shiftT(83);                   // 'attribute'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shiftT(52);                   // '::'\n      break;\n    case 234:                       // 'self'\n      shiftT(234);                  // 'self'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shiftT(52);                   // '::'\n      break;\n    case 113:                       // 'descendant-or-self'\n      shiftT(113);                  // 'descendant-or-self'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shiftT(52);                   // '::'\n      break;\n    case 138:                       // 'following-sibling'\n      shiftT(138);                  // 'following-sibling'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shiftT(52);                   // '::'\n      break;\n    default:\n      shiftT(137);                  // 'following'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shiftT(52);                   // '::'\n    }\n  }\n\n  function parse_AbbrevForwardStep()\n  {\n    eventHandler.startNonterminal(\"AbbrevForwardStep\", e0);\n    if (l1 == 67)                   // '@'\n    {\n      shift(67);                    // '@'\n    }\n    lookahead1W(248);               // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    whitespace();\n    parse_NodeTest();\n    eventHandler.endNonterminal(\"AbbrevForwardStep\", e0);\n  }\n\n  function try_AbbrevForwardStep()\n  {\n    if (l1 == 67)                   // '@'\n    {\n      shiftT(67);                   // '@'\n    }\n    lookahead1W(248);               // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    try_NodeTest();\n  }\n\n  function parse_ReverseStep()\n  {\n    eventHandler.startNonterminal(\"ReverseStep\", e0);\n    switch (l1)\n    {\n    case 46:                        // '..'\n      parse_AbbrevReverseStep();\n      break;\n    default:\n      parse_ReverseAxis();\n      lookahead1W(248);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n      whitespace();\n      parse_NodeTest();\n    }\n    eventHandler.endNonterminal(\"ReverseStep\", e0);\n  }\n\n  function try_ReverseStep()\n  {\n    switch (l1)\n    {\n    case 46:                        // '..'\n      try_AbbrevReverseStep();\n      break;\n    default:\n      try_ReverseAxis();\n      lookahead1W(248);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n      try_NodeTest();\n    }\n  }\n\n  function parse_ReverseAxis()\n  {\n    eventHandler.startNonterminal(\"ReverseAxis\", e0);\n    switch (l1)\n    {\n    case 210:                       // 'parent'\n      shift(210);                   // 'parent'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shift(52);                    // '::'\n      break;\n    case 74:                        // 'ancestor'\n      shift(74);                    // 'ancestor'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shift(52);                    // '::'\n      break;\n    case 217:                       // 'preceding-sibling'\n      shift(217);                   // 'preceding-sibling'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shift(52);                    // '::'\n      break;\n    case 216:                       // 'preceding'\n      shift(216);                   // 'preceding'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shift(52);                    // '::'\n      break;\n    default:\n      shift(75);                    // 'ancestor-or-self'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shift(52);                    // '::'\n    }\n    eventHandler.endNonterminal(\"ReverseAxis\", e0);\n  }\n\n  function try_ReverseAxis()\n  {\n    switch (l1)\n    {\n    case 210:                       // 'parent'\n      shiftT(210);                  // 'parent'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shiftT(52);                   // '::'\n      break;\n    case 74:                        // 'ancestor'\n      shiftT(74);                   // 'ancestor'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shiftT(52);                   // '::'\n      break;\n    case 217:                       // 'preceding-sibling'\n      shiftT(217);                  // 'preceding-sibling'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shiftT(52);                   // '::'\n      break;\n    case 216:                       // 'preceding'\n      shiftT(216);                  // 'preceding'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shiftT(52);                   // '::'\n      break;\n    default:\n      shiftT(75);                   // 'ancestor-or-self'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shiftT(52);                   // '::'\n    }\n  }\n\n  function parse_AbbrevReverseStep()\n  {\n    eventHandler.startNonterminal(\"AbbrevReverseStep\", e0);\n    shift(46);                      // '..'\n    eventHandler.endNonterminal(\"AbbrevReverseStep\", e0);\n  }\n\n  function try_AbbrevReverseStep()\n  {\n    shiftT(46);                     // '..'\n  }\n\n  function parse_NodeTest()\n  {\n    eventHandler.startNonterminal(\"NodeTest\", e0);\n    switch (l1)\n    {\n    case 83:                        // 'attribute'\n    case 97:                        // 'comment'\n    case 121:                       // 'document-node'\n    case 122:                       // 'element'\n    case 188:                       // 'namespace-node'\n    case 194:                       // 'node'\n    case 220:                       // 'processing-instruction'\n    case 230:                       // 'schema-attribute'\n    case 231:                       // 'schema-element'\n    case 249:                       // 'text'\n      lookahead2W(230);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n                                    // ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' | 'after' |\n                                    // 'and' | 'as' | 'ascending' | 'at' | 'before' | 'by' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'sentences' | 'stable' | 'start' | 'times' | 'to' | 'treat' |\n                                    // 'union' | 'where' | 'with' | 'words' | '|' | '||' | '|}' | '}'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 18003:                     // 'attribute' '('\n    case 18017:                     // 'comment' '('\n    case 18041:                     // 'document-node' '('\n    case 18042:                     // 'element' '('\n    case 18108:                     // 'namespace-node' '('\n    case 18114:                     // 'node' '('\n    case 18140:                     // 'processing-instruction' '('\n    case 18150:                     // 'schema-attribute' '('\n    case 18151:                     // 'schema-element' '('\n    case 18169:                     // 'text' '('\n      parse_KindTest();\n      break;\n    default:\n      parse_NameTest();\n    }\n    eventHandler.endNonterminal(\"NodeTest\", e0);\n  }\n\n  function try_NodeTest()\n  {\n    switch (l1)\n    {\n    case 83:                        // 'attribute'\n    case 97:                        // 'comment'\n    case 121:                       // 'document-node'\n    case 122:                       // 'element'\n    case 188:                       // 'namespace-node'\n    case 194:                       // 'node'\n    case 220:                       // 'processing-instruction'\n    case 230:                       // 'schema-attribute'\n    case 231:                       // 'schema-element'\n    case 249:                       // 'text'\n      lookahead2W(230);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n                                    // ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' | 'after' |\n                                    // 'and' | 'as' | 'ascending' | 'at' | 'before' | 'by' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'sentences' | 'stable' | 'start' | 'times' | 'to' | 'treat' |\n                                    // 'union' | 'where' | 'with' | 'words' | '|' | '||' | '|}' | '}'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 18003:                     // 'attribute' '('\n    case 18017:                     // 'comment' '('\n    case 18041:                     // 'document-node' '('\n    case 18042:                     // 'element' '('\n    case 18108:                     // 'namespace-node' '('\n    case 18114:                     // 'node' '('\n    case 18140:                     // 'processing-instruction' '('\n    case 18150:                     // 'schema-attribute' '('\n    case 18151:                     // 'schema-element' '('\n    case 18169:                     // 'text' '('\n      try_KindTest();\n      break;\n    default:\n      try_NameTest();\n    }\n  }\n\n  function parse_NameTest()\n  {\n    eventHandler.startNonterminal(\"NameTest\", e0);\n    switch (l1)\n    {\n    case 5:                         // Wildcard\n      shift(5);                     // Wildcard\n      break;\n    default:\n      parse_EQName();\n    }\n    eventHandler.endNonterminal(\"NameTest\", e0);\n  }\n\n  function try_NameTest()\n  {\n    switch (l1)\n    {\n    case 5:                         // Wildcard\n      shiftT(5);                    // Wildcard\n      break;\n    default:\n      try_EQName();\n    }\n  }\n\n  function parse_PostfixExpr()\n  {\n    eventHandler.startNonterminal(\"PostfixExpr\", e0);\n    parse_PrimaryExpr();\n    for (;;)\n    {\n      lookahead1W(234);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '.' | '/' |\n                                    // '//' | ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' |\n                                    // 'after' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'by' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'sentences' | 'stable' | 'start' | 'times' | 'to' | 'treat' |\n                                    // 'union' | 'where' | 'with' | 'words' | '|' | '||' | '|}' | '}'\n      if (l1 != 35                  // '('\n       && l1 != 45                  // '.'\n       && l1 != 69)                 // '['\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 69:                      // '['\n        lookahead2W(272);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | ']' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 35397)              // '[' '['\n      {\n        lk = memoized(5, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            try_Predicate();\n            lk = -1;\n          }\n          catch (p1A)\n          {\n            lk = -4;\n          }\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(5, e0, lk);\n        }\n      }\n      switch (lk)\n      {\n      case 35:                      // '('\n        whitespace();\n        parse_ArgumentList();\n        break;\n      case 45:                      // '.'\n        whitespace();\n        parse_ObjectLookup();\n        break;\n      case -4:\n        whitespace();\n        parse_ArrayLookup();\n        break;\n      case 35909:                   // '[' ']'\n        whitespace();\n        parse_ArrayUnboxing();\n        break;\n      default:\n        whitespace();\n        parse_Predicate();\n      }\n    }\n    eventHandler.endNonterminal(\"PostfixExpr\", e0);\n  }\n\n  function try_PostfixExpr()\n  {\n    try_PrimaryExpr();\n    for (;;)\n    {\n      lookahead1W(234);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '.' | '/' |\n                                    // '//' | ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' |\n                                    // 'after' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'by' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'sentences' | 'stable' | 'start' | 'times' | 'to' | 'treat' |\n                                    // 'union' | 'where' | 'with' | 'words' | '|' | '||' | '|}' | '}'\n      if (l1 != 35                  // '('\n       && l1 != 45                  // '.'\n       && l1 != 69)                 // '['\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 69:                      // '['\n        lookahead2W(272);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | ']' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 35397)              // '[' '['\n      {\n        lk = memoized(5, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            try_Predicate();\n            memoize(5, e0A, -1);\n            lk = -6;\n          }\n          catch (p1A)\n          {\n            lk = -4;\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            memoize(5, e0A, -4);\n          }\n        }\n      }\n      switch (lk)\n      {\n      case 35:                      // '('\n        try_ArgumentList();\n        break;\n      case 45:                      // '.'\n        try_ObjectLookup();\n        break;\n      case -4:\n        try_ArrayLookup();\n        break;\n      case 35909:                   // '[' ']'\n        try_ArrayUnboxing();\n        break;\n      case -6:\n        break;\n      default:\n        try_Predicate();\n      }\n    }\n  }\n\n  function parse_ObjectLookup()\n  {\n    eventHandler.startNonterminal(\"ObjectLookup\", e0);\n    shift(45);                      // '.'\n    lookahead1W(250);               // StringLiteral | NCName^Token | S^WS | '$' | '$$' | '(' | '(:' | 'after' |\n                                    // 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with'\n    switch (l1)\n    {\n    case 11:                        // StringLiteral\n      shift(11);                    // StringLiteral\n      break;\n    case 35:                        // '('\n      whitespace();\n      parse_ParenthesizedExpr();\n      break;\n    case 31:                        // '$'\n      whitespace();\n      parse_VarRef();\n      break;\n    case 32:                        // '$$'\n      whitespace();\n      parse_ContextItemExpr();\n      break;\n    default:\n      whitespace();\n      parse_NCName();\n    }\n    eventHandler.endNonterminal(\"ObjectLookup\", e0);\n  }\n\n  function try_ObjectLookup()\n  {\n    shiftT(45);                     // '.'\n    lookahead1W(250);               // StringLiteral | NCName^Token | S^WS | '$' | '$$' | '(' | '(:' | 'after' |\n                                    // 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with'\n    switch (l1)\n    {\n    case 11:                        // StringLiteral\n      shiftT(11);                   // StringLiteral\n      break;\n    case 35:                        // '('\n      try_ParenthesizedExpr();\n      break;\n    case 31:                        // '$'\n      try_VarRef();\n      break;\n    case 32:                        // '$$'\n      try_ContextItemExpr();\n      break;\n    default:\n      try_NCName();\n    }\n  }\n\n  function parse_ArrayLookup()\n  {\n    eventHandler.startNonterminal(\"ArrayLookup\", e0);\n    shift(69);                      // '['\n    lookahead1W(31);                // S^WS | '(:' | '['\n    shift(69);                      // '['\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_Expr();\n    shift(70);                      // ']'\n    lookahead1W(32);                // S^WS | '(:' | ']'\n    shift(70);                      // ']'\n    eventHandler.endNonterminal(\"ArrayLookup\", e0);\n  }\n\n  function try_ArrayLookup()\n  {\n    shiftT(69);                     // '['\n    lookahead1W(31);                // S^WS | '(:' | '['\n    shiftT(69);                     // '['\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_Expr();\n    shiftT(70);                     // ']'\n    lookahead1W(32);                // S^WS | '(:' | ']'\n    shiftT(70);                     // ']'\n  }\n\n  function parse_ArrayUnboxing()\n  {\n    eventHandler.startNonterminal(\"ArrayUnboxing\", e0);\n    shift(69);                      // '['\n    lookahead1W(32);                // S^WS | '(:' | ']'\n    shift(70);                      // ']'\n    eventHandler.endNonterminal(\"ArrayUnboxing\", e0);\n  }\n\n  function try_ArrayUnboxing()\n  {\n    shiftT(69);                     // '['\n    lookahead1W(32);                // S^WS | '(:' | ']'\n    shiftT(70);                     // ']'\n  }\n\n  function parse_ArgumentList()\n  {\n    eventHandler.startNonterminal(\"ArgumentList\", e0);\n    shift(35);                      // '('\n    lookahead1W(279);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | ')' | '+' | '-' | '/' | '//' |\n                                    // '<' | '<!--' | '<?' | '?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    if (l1 != 38)                   // ')'\n    {\n      whitespace();\n      parse_Argument();\n      for (;;)\n      {\n        lookahead1W(105);           // S^WS | '(:' | ')' | ','\n        if (l1 != 42)               // ','\n        {\n          break;\n        }\n        shift(42);                  // ','\n        lookahead1W(271);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n        whitespace();\n        parse_Argument();\n      }\n    }\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"ArgumentList\", e0);\n  }\n\n  function try_ArgumentList()\n  {\n    shiftT(35);                     // '('\n    lookahead1W(279);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | ')' | '+' | '-' | '/' | '//' |\n                                    // '<' | '<!--' | '<?' | '?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    if (l1 != 38)                   // ')'\n    {\n      try_Argument();\n      for (;;)\n      {\n        lookahead1W(105);           // S^WS | '(:' | ')' | ','\n        if (l1 != 42)               // ','\n        {\n          break;\n        }\n        shiftT(42);                 // ','\n        lookahead1W(271);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n        try_Argument();\n      }\n    }\n    shiftT(38);                     // ')'\n  }\n\n  function parse_PredicateList()\n  {\n    eventHandler.startNonterminal(\"PredicateList\", e0);\n    for (;;)\n    {\n      lookahead1W(227);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n                                    // ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' | 'after' | 'and' |\n                                    // 'as' | 'ascending' | 'at' | 'before' | 'by' | 'case' | 'cast' | 'castable' |\n                                    // 'collation' | 'contains' | 'count' | 'default' | 'descending' | 'div' | 'else' |\n                                    // 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' | 'gt' | 'idiv' |\n                                    // 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' | 'mod' |\n                                    // 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'sentences' | 'stable' | 'start' | 'times' | 'to' | 'treat' |\n                                    // 'union' | 'where' | 'with' | 'words' | '|' | '||' | '|}' | '}'\n      if (l1 != 69)                 // '['\n      {\n        break;\n      }\n      whitespace();\n      parse_Predicate();\n    }\n    eventHandler.endNonterminal(\"PredicateList\", e0);\n  }\n\n  function try_PredicateList()\n  {\n    for (;;)\n    {\n      lookahead1W(227);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n                                    // ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' | 'after' | 'and' |\n                                    // 'as' | 'ascending' | 'at' | 'before' | 'by' | 'case' | 'cast' | 'castable' |\n                                    // 'collation' | 'contains' | 'count' | 'default' | 'descending' | 'div' | 'else' |\n                                    // 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' | 'gt' | 'idiv' |\n                                    // 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' | 'mod' |\n                                    // 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'sentences' | 'stable' | 'start' | 'times' | 'to' | 'treat' |\n                                    // 'union' | 'where' | 'with' | 'words' | '|' | '||' | '|}' | '}'\n      if (l1 != 69)                 // '['\n      {\n        break;\n      }\n      try_Predicate();\n    }\n  }\n\n  function parse_Predicate()\n  {\n    eventHandler.startNonterminal(\"Predicate\", e0);\n    shift(69);                      // '['\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_Expr();\n    shift(70);                      // ']'\n    eventHandler.endNonterminal(\"Predicate\", e0);\n  }\n\n  function try_Predicate()\n  {\n    shiftT(69);                     // '['\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_Expr();\n    shiftT(70);                     // ']'\n  }\n\n  function parse_Literal()\n  {\n    eventHandler.startNonterminal(\"Literal\", e0);\n    switch (l1)\n    {\n    case 11:                        // StringLiteral\n      shift(11);                    // StringLiteral\n      break;\n    case 135:                       // 'false'\n    case 255:                       // 'true'\n      parse_BooleanLiteral();\n      break;\n    case 197:                       // 'null'\n      parse_NullLiteral();\n      break;\n    default:\n      parse_NumericLiteral();\n    }\n    eventHandler.endNonterminal(\"Literal\", e0);\n  }\n\n  function try_Literal()\n  {\n    switch (l1)\n    {\n    case 11:                        // StringLiteral\n      shiftT(11);                   // StringLiteral\n      break;\n    case 135:                       // 'false'\n    case 255:                       // 'true'\n      try_BooleanLiteral();\n      break;\n    case 197:                       // 'null'\n      try_NullLiteral();\n      break;\n    default:\n      try_NumericLiteral();\n    }\n  }\n\n  function parse_BooleanLiteral()\n  {\n    eventHandler.startNonterminal(\"BooleanLiteral\", e0);\n    switch (l1)\n    {\n    case 255:                       // 'true'\n      shift(255);                   // 'true'\n      break;\n    default:\n      shift(135);                   // 'false'\n    }\n    eventHandler.endNonterminal(\"BooleanLiteral\", e0);\n  }\n\n  function try_BooleanLiteral()\n  {\n    switch (l1)\n    {\n    case 255:                       // 'true'\n      shiftT(255);                  // 'true'\n      break;\n    default:\n      shiftT(135);                  // 'false'\n    }\n  }\n\n  function parse_NullLiteral()\n  {\n    eventHandler.startNonterminal(\"NullLiteral\", e0);\n    shift(197);                     // 'null'\n    eventHandler.endNonterminal(\"NullLiteral\", e0);\n  }\n\n  function try_NullLiteral()\n  {\n    shiftT(197);                    // 'null'\n  }\n\n  function parse_NumericLiteral()\n  {\n    eventHandler.startNonterminal(\"NumericLiteral\", e0);\n    switch (l1)\n    {\n    case 8:                         // IntegerLiteral\n      shift(8);                     // IntegerLiteral\n      break;\n    case 9:                         // DecimalLiteral\n      shift(9);                     // DecimalLiteral\n      break;\n    default:\n      shift(10);                    // DoubleLiteral\n    }\n    eventHandler.endNonterminal(\"NumericLiteral\", e0);\n  }\n\n  function try_NumericLiteral()\n  {\n    switch (l1)\n    {\n    case 8:                         // IntegerLiteral\n      shiftT(8);                    // IntegerLiteral\n      break;\n    case 9:                         // DecimalLiteral\n      shiftT(9);                    // DecimalLiteral\n      break;\n    default:\n      shiftT(10);                   // DoubleLiteral\n    }\n  }\n\n  function parse_VarRef()\n  {\n    eventHandler.startNonterminal(\"VarRef\", e0);\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    whitespace();\n    parse_VarName();\n    eventHandler.endNonterminal(\"VarRef\", e0);\n  }\n\n  function try_VarRef()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    try_VarName();\n  }\n\n  function parse_VarName()\n  {\n    eventHandler.startNonterminal(\"VarName\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"VarName\", e0);\n  }\n\n  function try_VarName()\n  {\n    try_EQName();\n  }\n\n  function parse_ParenthesizedExpr()\n  {\n    eventHandler.startNonterminal(\"ParenthesizedExpr\", e0);\n    shift(35);                      // '('\n    lookahead1W(269);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | ')' | '+' | '-' | '/' | '//' |\n                                    // '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    if (l1 != 38)                   // ')'\n    {\n      whitespace();\n      parse_Expr();\n    }\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"ParenthesizedExpr\", e0);\n  }\n\n  function try_ParenthesizedExpr()\n  {\n    shiftT(35);                     // '('\n    lookahead1W(269);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | ')' | '+' | '-' | '/' | '//' |\n                                    // '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    if (l1 != 38)                   // ')'\n    {\n      try_Expr();\n    }\n    shiftT(38);                     // ')'\n  }\n\n  function parse_ContextItemExpr()\n  {\n    eventHandler.startNonterminal(\"ContextItemExpr\", e0);\n    shift(32);                      // '$$'\n    eventHandler.endNonterminal(\"ContextItemExpr\", e0);\n  }\n\n  function try_ContextItemExpr()\n  {\n    shiftT(32);                     // '$$'\n  }\n\n  function parse_OrderedExpr()\n  {\n    eventHandler.startNonterminal(\"OrderedExpr\", e0);\n    shift(206);                     // 'ordered'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shift(281);                     // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_Expr();\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"OrderedExpr\", e0);\n  }\n\n  function try_OrderedExpr()\n  {\n    shiftT(206);                    // 'ordered'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shiftT(281);                    // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_Expr();\n    shiftT(287);                    // '}'\n  }\n\n  function parse_UnorderedExpr()\n  {\n    eventHandler.startNonterminal(\"UnorderedExpr\", e0);\n    shift(262);                     // 'unordered'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shift(281);                     // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_Expr();\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"UnorderedExpr\", e0);\n  }\n\n  function try_UnorderedExpr()\n  {\n    shiftT(262);                    // 'unordered'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shiftT(281);                    // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_Expr();\n    shiftT(287);                    // '}'\n  }\n\n  function parse_FunctionCall()\n  {\n    eventHandler.startNonterminal(\"FunctionCall\", e0);\n    parse_FunctionName();\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    whitespace();\n    parse_ArgumentList();\n    eventHandler.endNonterminal(\"FunctionCall\", e0);\n  }\n\n  function try_FunctionCall()\n  {\n    try_FunctionName();\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    try_ArgumentList();\n  }\n\n  function parse_Argument()\n  {\n    eventHandler.startNonterminal(\"Argument\", e0);\n    switch (l1)\n    {\n    case 65:                        // '?'\n      parse_ArgumentPlaceholder();\n      break;\n    default:\n      parse_ExprSingle();\n    }\n    eventHandler.endNonterminal(\"Argument\", e0);\n  }\n\n  function try_Argument()\n  {\n    switch (l1)\n    {\n    case 65:                        // '?'\n      try_ArgumentPlaceholder();\n      break;\n    default:\n      try_ExprSingle();\n    }\n  }\n\n  function parse_ArgumentPlaceholder()\n  {\n    eventHandler.startNonterminal(\"ArgumentPlaceholder\", e0);\n    shift(65);                      // '?'\n    eventHandler.endNonterminal(\"ArgumentPlaceholder\", e0);\n  }\n\n  function try_ArgumentPlaceholder()\n  {\n    shiftT(65);                     // '?'\n  }\n\n  function parse_Constructor()\n  {\n    eventHandler.startNonterminal(\"Constructor\", e0);\n    switch (l1)\n    {\n    case 55:                        // '<'\n    case 56:                        // '<!--'\n    case 60:                        // '<?'\n      parse_DirectConstructor();\n      break;\n    default:\n      parse_ComputedConstructor();\n    }\n    eventHandler.endNonterminal(\"Constructor\", e0);\n  }\n\n  function try_Constructor()\n  {\n    switch (l1)\n    {\n    case 55:                        // '<'\n    case 56:                        // '<!--'\n    case 60:                        // '<?'\n      try_DirectConstructor();\n      break;\n    default:\n      try_ComputedConstructor();\n    }\n  }\n\n  function parse_DirectConstructor()\n  {\n    eventHandler.startNonterminal(\"DirectConstructor\", e0);\n    switch (l1)\n    {\n    case 55:                        // '<'\n      parse_DirElemConstructor();\n      break;\n    case 56:                        // '<!--'\n      parse_DirCommentConstructor();\n      break;\n    default:\n      parse_DirPIConstructor();\n    }\n    eventHandler.endNonterminal(\"DirectConstructor\", e0);\n  }\n\n  function try_DirectConstructor()\n  {\n    switch (l1)\n    {\n    case 55:                        // '<'\n      try_DirElemConstructor();\n      break;\n    case 56:                        // '<!--'\n      try_DirCommentConstructor();\n      break;\n    default:\n      try_DirPIConstructor();\n    }\n  }\n\n  function parse_DirElemConstructor()\n  {\n    eventHandler.startNonterminal(\"DirElemConstructor\", e0);\n    shift(55);                      // '<'\n    lookahead1(4);                  // QName\n    shift(20);                      // QName\n    parse_DirAttributeList();\n    switch (l1)\n    {\n    case 49:                        // '/>'\n      shift(49);                    // '/>'\n      break;\n    default:\n      shift(62);                    // '>'\n      for (;;)\n      {\n        lookahead1(196);            // CDataSection | PredefinedEntityRef | ElementContentChar | CharRef | '<' |\n                                    // '<!--' | '</' | '<?' | '{' | '{{' | '}}'\n        if (l1 == 57)               // '</'\n        {\n          break;\n        }\n        parse_DirElemContent();\n      }\n      shift(57);                    // '</'\n      lookahead1(4);                // QName\n      shift(20);                    // QName\n      lookahead1(12);               // S | '>'\n      if (l1 == 21)                 // S\n      {\n        shift(21);                  // S\n      }\n      lookahead1(8);                // '>'\n      shift(62);                    // '>'\n    }\n    eventHandler.endNonterminal(\"DirElemConstructor\", e0);\n  }\n\n  function try_DirElemConstructor()\n  {\n    shiftT(55);                     // '<'\n    lookahead1(4);                  // QName\n    shiftT(20);                     // QName\n    try_DirAttributeList();\n    switch (l1)\n    {\n    case 49:                        // '/>'\n      shiftT(49);                   // '/>'\n      break;\n    default:\n      shiftT(62);                   // '>'\n      for (;;)\n      {\n        lookahead1(196);            // CDataSection | PredefinedEntityRef | ElementContentChar | CharRef | '<' |\n                                    // '<!--' | '</' | '<?' | '{' | '{{' | '}}'\n        if (l1 == 57)               // '</'\n        {\n          break;\n        }\n        try_DirElemContent();\n      }\n      shiftT(57);                   // '</'\n      lookahead1(4);                // QName\n      shiftT(20);                   // QName\n      lookahead1(12);               // S | '>'\n      if (l1 == 21)                 // S\n      {\n        shiftT(21);                 // S\n      }\n      lookahead1(8);                // '>'\n      shiftT(62);                   // '>'\n    }\n  }\n\n  function parse_DirAttributeList()\n  {\n    eventHandler.startNonterminal(\"DirAttributeList\", e0);\n    for (;;)\n    {\n      lookahead1(19);               // S | '/>' | '>'\n      if (l1 != 21)                 // S\n      {\n        break;\n      }\n      shift(21);                    // S\n      lookahead1(94);               // QName | S | '/>' | '>'\n      if (l1 == 20)                 // QName\n      {\n        shift(20);                  // QName\n        lookahead1(11);             // S | '='\n        if (l1 == 21)               // S\n        {\n          shift(21);                // S\n        }\n        lookahead1(7);              // '='\n        shift(61);                  // '='\n        lookahead1(18);             // S | '\"' | \"'\"\n        if (l1 == 21)               // S\n        {\n          shift(21);                // S\n        }\n        parse_DirAttributeValue();\n      }\n    }\n    eventHandler.endNonterminal(\"DirAttributeList\", e0);\n  }\n\n  function try_DirAttributeList()\n  {\n    for (;;)\n    {\n      lookahead1(19);               // S | '/>' | '>'\n      if (l1 != 21)                 // S\n      {\n        break;\n      }\n      shiftT(21);                   // S\n      lookahead1(94);               // QName | S | '/>' | '>'\n      if (l1 == 20)                 // QName\n      {\n        shiftT(20);                 // QName\n        lookahead1(11);             // S | '='\n        if (l1 == 21)               // S\n        {\n          shiftT(21);               // S\n        }\n        lookahead1(7);              // '='\n        shiftT(61);                 // '='\n        lookahead1(18);             // S | '\"' | \"'\"\n        if (l1 == 21)               // S\n        {\n          shiftT(21);               // S\n        }\n        try_DirAttributeValue();\n      }\n    }\n  }\n\n  function parse_DirAttributeValue()\n  {\n    eventHandler.startNonterminal(\"DirAttributeValue\", e0);\n    lookahead1(14);                 // '\"' | \"'\"\n    switch (l1)\n    {\n    case 28:                        // '\"'\n      shift(28);                    // '\"'\n      for (;;)\n      {\n        lookahead1(185);            // PredefinedEntityRef | EscapeQuot | QuotAttrContentChar | CharRef | '\"' | '{' |\n                                    // '{{' | '}}'\n        if (l1 == 28)               // '\"'\n        {\n          break;\n        }\n        switch (l1)\n        {\n        case 13:                    // EscapeQuot\n          shift(13);                // EscapeQuot\n          break;\n        default:\n          parse_QuotAttrValueContent();\n        }\n      }\n      shift(28);                    // '\"'\n      break;\n    default:\n      shift(34);                    // \"'\"\n      for (;;)\n      {\n        lookahead1(186);            // PredefinedEntityRef | EscapeApos | AposAttrContentChar | CharRef | \"'\" | '{' |\n                                    // '{{' | '}}'\n        if (l1 == 34)               // \"'\"\n        {\n          break;\n        }\n        switch (l1)\n        {\n        case 14:                    // EscapeApos\n          shift(14);                // EscapeApos\n          break;\n        default:\n          parse_AposAttrValueContent();\n        }\n      }\n      shift(34);                    // \"'\"\n    }\n    eventHandler.endNonterminal(\"DirAttributeValue\", e0);\n  }\n\n  function try_DirAttributeValue()\n  {\n    lookahead1(14);                 // '\"' | \"'\"\n    switch (l1)\n    {\n    case 28:                        // '\"'\n      shiftT(28);                   // '\"'\n      for (;;)\n      {\n        lookahead1(185);            // PredefinedEntityRef | EscapeQuot | QuotAttrContentChar | CharRef | '\"' | '{' |\n                                    // '{{' | '}}'\n        if (l1 == 28)               // '\"'\n        {\n          break;\n        }\n        switch (l1)\n        {\n        case 13:                    // EscapeQuot\n          shiftT(13);               // EscapeQuot\n          break;\n        default:\n          try_QuotAttrValueContent();\n        }\n      }\n      shiftT(28);                   // '\"'\n      break;\n    default:\n      shiftT(34);                   // \"'\"\n      for (;;)\n      {\n        lookahead1(186);            // PredefinedEntityRef | EscapeApos | AposAttrContentChar | CharRef | \"'\" | '{' |\n                                    // '{{' | '}}'\n        if (l1 == 34)               // \"'\"\n        {\n          break;\n        }\n        switch (l1)\n        {\n        case 14:                    // EscapeApos\n          shiftT(14);               // EscapeApos\n          break;\n        default:\n          try_AposAttrValueContent();\n        }\n      }\n      shiftT(34);                   // \"'\"\n    }\n  }\n\n  function parse_QuotAttrValueContent()\n  {\n    eventHandler.startNonterminal(\"QuotAttrValueContent\", e0);\n    switch (l1)\n    {\n    case 16:                        // QuotAttrContentChar\n      shift(16);                    // QuotAttrContentChar\n      break;\n    default:\n      parse_CommonContent();\n    }\n    eventHandler.endNonterminal(\"QuotAttrValueContent\", e0);\n  }\n\n  function try_QuotAttrValueContent()\n  {\n    switch (l1)\n    {\n    case 16:                        // QuotAttrContentChar\n      shiftT(16);                   // QuotAttrContentChar\n      break;\n    default:\n      try_CommonContent();\n    }\n  }\n\n  function parse_AposAttrValueContent()\n  {\n    eventHandler.startNonterminal(\"AposAttrValueContent\", e0);\n    switch (l1)\n    {\n    case 17:                        // AposAttrContentChar\n      shift(17);                    // AposAttrContentChar\n      break;\n    default:\n      parse_CommonContent();\n    }\n    eventHandler.endNonterminal(\"AposAttrValueContent\", e0);\n  }\n\n  function try_AposAttrValueContent()\n  {\n    switch (l1)\n    {\n    case 17:                        // AposAttrContentChar\n      shiftT(17);                   // AposAttrContentChar\n      break;\n    default:\n      try_CommonContent();\n    }\n  }\n\n  function parse_DirElemContent()\n  {\n    eventHandler.startNonterminal(\"DirElemContent\", e0);\n    switch (l1)\n    {\n    case 55:                        // '<'\n    case 56:                        // '<!--'\n    case 60:                        // '<?'\n      parse_DirectConstructor();\n      break;\n    case 4:                         // CDataSection\n      shift(4);                     // CDataSection\n      break;\n    case 15:                        // ElementContentChar\n      shift(15);                    // ElementContentChar\n      break;\n    default:\n      parse_CommonContent();\n    }\n    eventHandler.endNonterminal(\"DirElemContent\", e0);\n  }\n\n  function try_DirElemContent()\n  {\n    switch (l1)\n    {\n    case 55:                        // '<'\n    case 56:                        // '<!--'\n    case 60:                        // '<?'\n      try_DirectConstructor();\n      break;\n    case 4:                         // CDataSection\n      shiftT(4);                    // CDataSection\n      break;\n    case 15:                        // ElementContentChar\n      shiftT(15);                   // ElementContentChar\n      break;\n    default:\n      try_CommonContent();\n    }\n  }\n\n  function parse_DirCommentConstructor()\n  {\n    eventHandler.startNonterminal(\"DirCommentConstructor\", e0);\n    shift(56);                      // '<!--'\n    lookahead1(1);                  // DirCommentContents\n    shift(2);                       // DirCommentContents\n    lookahead1(6);                  // '-->'\n    shift(44);                      // '-->'\n    eventHandler.endNonterminal(\"DirCommentConstructor\", e0);\n  }\n\n  function try_DirCommentConstructor()\n  {\n    shiftT(56);                     // '<!--'\n    lookahead1(1);                  // DirCommentContents\n    shiftT(2);                      // DirCommentContents\n    lookahead1(6);                  // '-->'\n    shiftT(44);                     // '-->'\n  }\n\n  function parse_DirPIConstructor()\n  {\n    eventHandler.startNonterminal(\"DirPIConstructor\", e0);\n    shift(60);                      // '<?'\n    lookahead1(3);                  // PITarget\n    shift(18);                      // PITarget\n    lookahead1(13);                 // S | '?>'\n    if (l1 == 21)                   // S\n    {\n      shift(21);                    // S\n      lookahead1(2);                // DirPIContents\n      shift(3);                     // DirPIContents\n    }\n    lookahead1(9);                  // '?>'\n    shift(66);                      // '?>'\n    eventHandler.endNonterminal(\"DirPIConstructor\", e0);\n  }\n\n  function try_DirPIConstructor()\n  {\n    shiftT(60);                     // '<?'\n    lookahead1(3);                  // PITarget\n    shiftT(18);                     // PITarget\n    lookahead1(13);                 // S | '?>'\n    if (l1 == 21)                   // S\n    {\n      shiftT(21);                   // S\n      lookahead1(2);                // DirPIContents\n      shiftT(3);                    // DirPIContents\n    }\n    lookahead1(9);                  // '?>'\n    shiftT(66);                     // '?>'\n  }\n\n  function parse_ComputedConstructor()\n  {\n    eventHandler.startNonterminal(\"ComputedConstructor\", e0);\n    switch (l1)\n    {\n    case 120:                       // 'document'\n      parse_CompDocConstructor();\n      break;\n    case 122:                       // 'element'\n      parse_CompElemConstructor();\n      break;\n    case 83:                        // 'attribute'\n      parse_CompAttrConstructor();\n      break;\n    case 187:                       // 'namespace'\n      parse_CompNamespaceConstructor();\n      break;\n    case 249:                       // 'text'\n      parse_CompTextConstructor();\n      break;\n    case 97:                        // 'comment'\n      parse_CompCommentConstructor();\n      break;\n    default:\n      parse_CompPIConstructor();\n    }\n    eventHandler.endNonterminal(\"ComputedConstructor\", e0);\n  }\n\n  function try_ComputedConstructor()\n  {\n    switch (l1)\n    {\n    case 120:                       // 'document'\n      try_CompDocConstructor();\n      break;\n    case 122:                       // 'element'\n      try_CompElemConstructor();\n      break;\n    case 83:                        // 'attribute'\n      try_CompAttrConstructor();\n      break;\n    case 187:                       // 'namespace'\n      try_CompNamespaceConstructor();\n      break;\n    case 249:                       // 'text'\n      try_CompTextConstructor();\n      break;\n    case 97:                        // 'comment'\n      try_CompCommentConstructor();\n      break;\n    default:\n      try_CompPIConstructor();\n    }\n  }\n\n  function parse_CompElemConstructor()\n  {\n    eventHandler.startNonterminal(\"CompElemConstructor\", e0);\n    shift(122);                     // 'element'\n    lookahead1W(249);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' | '{'\n    switch (l1)\n    {\n    case 281:                       // '{'\n      shift(281);                   // '{'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      whitespace();\n      parse_Expr();\n      shift(287);                   // '}'\n      break;\n    default:\n      whitespace();\n      parse_EQName();\n    }\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shift(281);                     // '{'\n    lookahead1W(280);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | ';' |\n                                    // '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|' | '}'\n    if (l1 != 287)                  // '}'\n    {\n      whitespace();\n      parse_ContentExpr();\n    }\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"CompElemConstructor\", e0);\n  }\n\n  function try_CompElemConstructor()\n  {\n    shiftT(122);                    // 'element'\n    lookahead1W(249);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' | '{'\n    switch (l1)\n    {\n    case 281:                       // '{'\n      shiftT(281);                  // '{'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      try_Expr();\n      shiftT(287);                  // '}'\n      break;\n    default:\n      try_EQName();\n    }\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shiftT(281);                    // '{'\n    lookahead1W(280);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | ';' |\n                                    // '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|' | '}'\n    if (l1 != 287)                  // '}'\n    {\n      try_ContentExpr();\n    }\n    shiftT(287);                    // '}'\n  }\n\n  function parse_CompNamespaceConstructor()\n  {\n    eventHandler.startNonterminal(\"CompNamespaceConstructor\", e0);\n    shift(187);                     // 'namespace'\n    lookahead1W(241);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' |\n                                    // 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | '{'\n    switch (l1)\n    {\n    case 281:                       // '{'\n      shift(281);                   // '{'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      whitespace();\n      parse_PrefixExpr();\n      shift(287);                   // '}'\n      break;\n    default:\n      whitespace();\n      parse_Prefix();\n    }\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shift(281);                     // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_URIExpr();\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"CompNamespaceConstructor\", e0);\n  }\n\n  function try_CompNamespaceConstructor()\n  {\n    shiftT(187);                    // 'namespace'\n    lookahead1W(241);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' |\n                                    // 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | '{'\n    switch (l1)\n    {\n    case 281:                       // '{'\n      shiftT(281);                  // '{'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      try_PrefixExpr();\n      shiftT(287);                  // '}'\n      break;\n    default:\n      try_Prefix();\n    }\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shiftT(281);                    // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_URIExpr();\n    shiftT(287);                    // '}'\n  }\n\n  function parse_Prefix()\n  {\n    eventHandler.startNonterminal(\"Prefix\", e0);\n    parse_NCName();\n    eventHandler.endNonterminal(\"Prefix\", e0);\n  }\n\n  function try_Prefix()\n  {\n    try_NCName();\n  }\n\n  function parse_PrefixExpr()\n  {\n    eventHandler.startNonterminal(\"PrefixExpr\", e0);\n    parse_Expr();\n    eventHandler.endNonterminal(\"PrefixExpr\", e0);\n  }\n\n  function try_PrefixExpr()\n  {\n    try_Expr();\n  }\n\n  function parse_URIExpr()\n  {\n    eventHandler.startNonterminal(\"URIExpr\", e0);\n    parse_Expr();\n    eventHandler.endNonterminal(\"URIExpr\", e0);\n  }\n\n  function try_URIExpr()\n  {\n    try_Expr();\n  }\n\n  function parse_FunctionItemExpr()\n  {\n    eventHandler.startNonterminal(\"FunctionItemExpr\", e0);\n    switch (l1)\n    {\n    case 147:                       // 'function'\n      lookahead2W(95);              // S^WS | '#' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 33:                        // '%'\n    case 18067:                     // 'function' '('\n      parse_InlineFunctionExpr();\n      break;\n    default:\n      parse_NamedFunctionRef();\n    }\n    eventHandler.endNonterminal(\"FunctionItemExpr\", e0);\n  }\n\n  function try_FunctionItemExpr()\n  {\n    switch (l1)\n    {\n    case 147:                       // 'function'\n      lookahead2W(95);              // S^WS | '#' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 33:                        // '%'\n    case 18067:                     // 'function' '('\n      try_InlineFunctionExpr();\n      break;\n    default:\n      try_NamedFunctionRef();\n    }\n  }\n\n  function parse_NamedFunctionRef()\n  {\n    eventHandler.startNonterminal(\"NamedFunctionRef\", e0);\n    parse_EQName();\n    lookahead1W(20);                // S^WS | '#' | '(:'\n    shift(29);                      // '#'\n    lookahead1W(16);                // IntegerLiteral | S^WS | '(:'\n    shift(8);                       // IntegerLiteral\n    eventHandler.endNonterminal(\"NamedFunctionRef\", e0);\n  }\n\n  function try_NamedFunctionRef()\n  {\n    try_EQName();\n    lookahead1W(20);                // S^WS | '#' | '(:'\n    shiftT(29);                     // '#'\n    lookahead1W(16);                // IntegerLiteral | S^WS | '(:'\n    shiftT(8);                      // IntegerLiteral\n  }\n\n  function parse_InlineFunctionExpr()\n  {\n    eventHandler.startNonterminal(\"InlineFunctionExpr\", e0);\n    for (;;)\n    {\n      lookahead1W(101);             // S^WS | '%' | '(:' | 'function'\n      if (l1 != 33)                 // '%'\n      {\n        break;\n      }\n      whitespace();\n      parse_Annotation();\n    }\n    shift(147);                     // 'function'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(98);                // S^WS | '$' | '(:' | ')'\n    if (l1 == 31)                   // '$'\n    {\n      whitespace();\n      parse_ParamList();\n    }\n    shift(38);                      // ')'\n    lookahead1W(115);               // S^WS | '(:' | 'as' | '{'\n    if (l1 == 80)                   // 'as'\n    {\n      shift(80);                    // 'as'\n      lookahead1W(253);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n      whitespace();\n      parse_SequenceType();\n    }\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    whitespace();\n    parse_FunctionBody();\n    eventHandler.endNonterminal(\"InlineFunctionExpr\", e0);\n  }\n\n  function try_InlineFunctionExpr()\n  {\n    for (;;)\n    {\n      lookahead1W(101);             // S^WS | '%' | '(:' | 'function'\n      if (l1 != 33)                 // '%'\n      {\n        break;\n      }\n      try_Annotation();\n    }\n    shiftT(147);                    // 'function'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(98);                // S^WS | '$' | '(:' | ')'\n    if (l1 == 31)                   // '$'\n    {\n      try_ParamList();\n    }\n    shiftT(38);                     // ')'\n    lookahead1W(115);               // S^WS | '(:' | 'as' | '{'\n    if (l1 == 80)                   // 'as'\n    {\n      shiftT(80);                   // 'as'\n      lookahead1W(253);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n      try_SequenceType();\n    }\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    try_FunctionBody();\n  }\n\n  function parse_SingleType()\n  {\n    eventHandler.startNonterminal(\"SingleType\", e0);\n    parse_SimpleTypeName();\n    lookahead1W(225);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n                                    // '<=' | '=' | '>' | '>=' | '>>' | '?' | ']' | 'after' | 'and' | 'as' |\n                                    // 'ascending' | 'at' | 'before' | 'case' | 'castable' | 'collation' | 'contains' |\n                                    // 'count' | 'default' | 'descending' | 'div' | 'else' | 'empty' | 'end' | 'eq' |\n                                    // 'except' | 'for' | 'ge' | 'group' | 'gt' | 'idiv' | 'instance' | 'intersect' |\n                                    // 'into' | 'is' | 'le' | 'let' | 'lt' | 'mod' | 'modify' | 'ne' | 'only' | 'or' |\n                                    // 'order' | 'paragraphs' | 'return' | 'satisfies' | 'sentences' | 'stable' |\n                                    // 'start' | 'times' | 'to' | 'treat' | 'union' | 'where' | 'with' | 'words' | '|' |\n                                    // '||' | '|}' | '}'\n    if (l1 == 65)                   // '?'\n    {\n      shift(65);                    // '?'\n    }\n    eventHandler.endNonterminal(\"SingleType\", e0);\n  }\n\n  function try_SingleType()\n  {\n    try_SimpleTypeName();\n    lookahead1W(225);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n                                    // '<=' | '=' | '>' | '>=' | '>>' | '?' | ']' | 'after' | 'and' | 'as' |\n                                    // 'ascending' | 'at' | 'before' | 'case' | 'castable' | 'collation' | 'contains' |\n                                    // 'count' | 'default' | 'descending' | 'div' | 'else' | 'empty' | 'end' | 'eq' |\n                                    // 'except' | 'for' | 'ge' | 'group' | 'gt' | 'idiv' | 'instance' | 'intersect' |\n                                    // 'into' | 'is' | 'le' | 'let' | 'lt' | 'mod' | 'modify' | 'ne' | 'only' | 'or' |\n                                    // 'order' | 'paragraphs' | 'return' | 'satisfies' | 'sentences' | 'stable' |\n                                    // 'start' | 'times' | 'to' | 'treat' | 'union' | 'where' | 'with' | 'words' | '|' |\n                                    // '||' | '|}' | '}'\n    if (l1 == 65)                   // '?'\n    {\n      shiftT(65);                   // '?'\n    }\n  }\n\n  function parse_TypeDeclaration()\n  {\n    eventHandler.startNonterminal(\"TypeDeclaration\", e0);\n    shift(80);                      // 'as'\n    lookahead1W(253);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    whitespace();\n    parse_SequenceType();\n    eventHandler.endNonterminal(\"TypeDeclaration\", e0);\n  }\n\n  function try_TypeDeclaration()\n  {\n    shiftT(80);                     // 'as'\n    lookahead1W(253);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    try_SequenceType();\n  }\n\n  function parse_SequenceType()\n  {\n    eventHandler.startNonterminal(\"SequenceType\", e0);\n    switch (l1)\n    {\n    case 35:                        // '('\n      lookahead2W(258);             // EQName^Token | S^WS | '%' | '(' | '(:' | ')' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n      break;\n    case 125:                       // 'empty-sequence'\n      lookahead2W(232);             // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n                                    // ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '?' | ']' | 'after' |\n                                    // 'allowing' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'case' |\n                                    // 'collation' | 'contains' | 'count' | 'default' | 'descending' | 'div' | 'else' |\n                                    // 'empty' | 'end' | 'eq' | 'except' | 'external' | 'for' | 'ge' | 'group' | 'gt' |\n                                    // 'idiv' | 'in' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'score' | 'sentences' | 'stable' | 'start' | 'times' | 'to' |\n                                    // 'union' | 'where' | 'with' | 'words' | '{' | '|' | '||' | '|}' | '}'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 18045:                     // 'empty-sequence' '('\n    case 19491:                     // '(' ')'\n      if (l1 == 125)                // 'empty-sequence'\n      {\n        shift(125);                 // 'empty-sequence'\n      }\n      lookahead1W(22);              // S^WS | '(' | '(:'\n      shift(35);                    // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shift(38);                    // ')'\n      break;\n    default:\n      parse_ItemType();\n      lookahead1W(228);             // S^WS | EOF | '!=' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' | ';' |\n                                    // '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '?' | ']' | 'after' | 'allowing' |\n                                    // 'and' | 'as' | 'ascending' | 'at' | 'before' | 'case' | 'collation' |\n                                    // 'contains' | 'count' | 'default' | 'descending' | 'div' | 'else' | 'empty' |\n                                    // 'end' | 'eq' | 'except' | 'external' | 'for' | 'ge' | 'group' | 'gt' | 'idiv' |\n                                    // 'in' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' | 'mod' |\n                                    // 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'score' | 'sentences' | 'stable' | 'start' | 'times' | 'to' |\n                                    // 'union' | 'where' | 'with' | 'words' | '{' | '|' | '||' | '|}' | '}'\n      switch (l1)\n      {\n      case 40:                      // '*'\n      case 41:                      // '+'\n      case 65:                      // '?'\n        whitespace();\n        parse_OccurrenceIndicator();\n        break;\n      default:\n        break;\n      }\n    }\n    eventHandler.endNonterminal(\"SequenceType\", e0);\n  }\n\n  function try_SequenceType()\n  {\n    switch (l1)\n    {\n    case 35:                        // '('\n      lookahead2W(258);             // EQName^Token | S^WS | '%' | '(' | '(:' | ')' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n      break;\n    case 125:                       // 'empty-sequence'\n      lookahead2W(232);             // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n                                    // ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '?' | ']' | 'after' |\n                                    // 'allowing' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'case' |\n                                    // 'collation' | 'contains' | 'count' | 'default' | 'descending' | 'div' | 'else' |\n                                    // 'empty' | 'end' | 'eq' | 'except' | 'external' | 'for' | 'ge' | 'group' | 'gt' |\n                                    // 'idiv' | 'in' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'score' | 'sentences' | 'stable' | 'start' | 'times' | 'to' |\n                                    // 'union' | 'where' | 'with' | 'words' | '{' | '|' | '||' | '|}' | '}'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 18045:                     // 'empty-sequence' '('\n    case 19491:                     // '(' ')'\n      if (l1 == 125)                // 'empty-sequence'\n      {\n        shiftT(125);                // 'empty-sequence'\n      }\n      lookahead1W(22);              // S^WS | '(' | '(:'\n      shiftT(35);                   // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shiftT(38);                   // ')'\n      break;\n    default:\n      try_ItemType();\n      lookahead1W(228);             // S^WS | EOF | '!=' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' | ';' |\n                                    // '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '?' | ']' | 'after' | 'allowing' |\n                                    // 'and' | 'as' | 'ascending' | 'at' | 'before' | 'case' | 'collation' |\n                                    // 'contains' | 'count' | 'default' | 'descending' | 'div' | 'else' | 'empty' |\n                                    // 'end' | 'eq' | 'except' | 'external' | 'for' | 'ge' | 'group' | 'gt' | 'idiv' |\n                                    // 'in' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' | 'mod' |\n                                    // 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'score' | 'sentences' | 'stable' | 'start' | 'times' | 'to' |\n                                    // 'union' | 'where' | 'with' | 'words' | '{' | '|' | '||' | '|}' | '}'\n      switch (l1)\n      {\n      case 40:                      // '*'\n      case 41:                      // '+'\n      case 65:                      // '?'\n        try_OccurrenceIndicator();\n        break;\n      default:\n        break;\n      }\n    }\n  }\n\n  function parse_OccurrenceIndicator()\n  {\n    eventHandler.startNonterminal(\"OccurrenceIndicator\", e0);\n    switch (l1)\n    {\n    case 65:                        // '?'\n      shift(65);                    // '?'\n      break;\n    case 40:                        // '*'\n      shift(40);                    // '*'\n      break;\n    default:\n      shift(41);                    // '+'\n    }\n    eventHandler.endNonterminal(\"OccurrenceIndicator\", e0);\n  }\n\n  function try_OccurrenceIndicator()\n  {\n    switch (l1)\n    {\n    case 65:                        // '?'\n      shiftT(65);                   // '?'\n      break;\n    case 40:                        // '*'\n      shiftT(40);                   // '*'\n      break;\n    default:\n      shiftT(41);                   // '+'\n    }\n  }\n\n  function parse_ItemType()\n  {\n    eventHandler.startNonterminal(\"ItemType\", e0);\n    switch (l1)\n    {\n    case 79:                        // 'array'\n    case 83:                        // 'attribute'\n    case 97:                        // 'comment'\n    case 121:                       // 'document-node'\n    case 122:                       // 'element'\n    case 147:                       // 'function'\n    case 167:                       // 'item'\n    case 169:                       // 'json-item'\n    case 188:                       // 'namespace-node'\n    case 194:                       // 'node'\n    case 198:                       // 'object'\n    case 220:                       // 'processing-instruction'\n    case 230:                       // 'schema-attribute'\n    case 231:                       // 'schema-element'\n    case 247:                       // 'structured-item'\n    case 249:                       // 'text'\n      lookahead2W(232);             // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n                                    // ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '?' | ']' | 'after' |\n                                    // 'allowing' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'case' |\n                                    // 'collation' | 'contains' | 'count' | 'default' | 'descending' | 'div' | 'else' |\n                                    // 'empty' | 'end' | 'eq' | 'except' | 'external' | 'for' | 'ge' | 'group' | 'gt' |\n                                    // 'idiv' | 'in' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'score' | 'sentences' | 'stable' | 'start' | 'times' | 'to' |\n                                    // 'union' | 'where' | 'with' | 'words' | '{' | '|' | '||' | '|}' | '}'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 12879                 // 'array' EOF\n     || lk == 12969                 // 'json-item' EOF\n     || lk == 12998                 // 'object' EOF\n     || lk == 13047                 // 'structured-item' EOF\n     || lk == 13903                 // 'array' '!='\n     || lk == 13993                 // 'json-item' '!='\n     || lk == 14022                 // 'object' '!='\n     || lk == 14071                 // 'structured-item' '!='\n     || lk == 19535                 // 'array' ')'\n     || lk == 19625                 // 'json-item' ')'\n     || lk == 19654                 // 'object' ')'\n     || lk == 19703                 // 'structured-item' ')'\n     || lk == 20047                 // 'array' '*'\n     || lk == 20137                 // 'json-item' '*'\n     || lk == 20166                 // 'object' '*'\n     || lk == 20215                 // 'structured-item' '*'\n     || lk == 20559                 // 'array' '*'\n     || lk == 20649                 // 'json-item' '*'\n     || lk == 20678                 // 'object' '*'\n     || lk == 20727                 // 'structured-item' '*'\n     || lk == 21071                 // 'array' '+'\n     || lk == 21161                 // 'json-item' '+'\n     || lk == 21190                 // 'object' '+'\n     || lk == 21239                 // 'structured-item' '+'\n     || lk == 21583                 // 'array' ','\n     || lk == 21673                 // 'json-item' ','\n     || lk == 21702                 // 'object' ','\n     || lk == 21751                 // 'structured-item' ','\n     || lk == 22095                 // 'array' '-'\n     || lk == 22185                 // 'json-item' '-'\n     || lk == 22214                 // 'object' '-'\n     || lk == 22263                 // 'structured-item' '-'\n     || lk == 25679                 // 'array' ':'\n     || lk == 25769                 // 'json-item' ':'\n     || lk == 25798                 // 'object' ':'\n     || lk == 25847                 // 'structured-item' ':'\n     || lk == 27215                 // 'array' ':='\n     || lk == 27305                 // 'json-item' ':='\n     || lk == 27334                 // 'object' ':='\n     || lk == 27383                 // 'structured-item' ':='\n     || lk == 27727                 // 'array' ';'\n     || lk == 27817                 // 'json-item' ';'\n     || lk == 27846                 // 'object' ';'\n     || lk == 27895                 // 'structured-item' ';'\n     || lk == 28239                 // 'array' '<'\n     || lk == 28329                 // 'json-item' '<'\n     || lk == 28358                 // 'object' '<'\n     || lk == 28407                 // 'structured-item' '<'\n     || lk == 29775                 // 'array' '<<'\n     || lk == 29865                 // 'json-item' '<<'\n     || lk == 29894                 // 'object' '<<'\n     || lk == 29943                 // 'structured-item' '<<'\n     || lk == 30287                 // 'array' '<='\n     || lk == 30377                 // 'json-item' '<='\n     || lk == 30406                 // 'object' '<='\n     || lk == 30455                 // 'structured-item' '<='\n     || lk == 31311                 // 'array' '='\n     || lk == 31401                 // 'json-item' '='\n     || lk == 31430                 // 'object' '='\n     || lk == 31479                 // 'structured-item' '='\n     || lk == 31823                 // 'array' '>'\n     || lk == 31913                 // 'json-item' '>'\n     || lk == 31942                 // 'object' '>'\n     || lk == 31991                 // 'structured-item' '>'\n     || lk == 32335                 // 'array' '>='\n     || lk == 32425                 // 'json-item' '>='\n     || lk == 32454                 // 'object' '>='\n     || lk == 32503                 // 'structured-item' '>='\n     || lk == 32847                 // 'array' '>>'\n     || lk == 32937                 // 'json-item' '>>'\n     || lk == 32966                 // 'object' '>>'\n     || lk == 33015                 // 'structured-item' '>>'\n     || lk == 33359                 // 'array' '?'\n     || lk == 33449                 // 'json-item' '?'\n     || lk == 33478                 // 'object' '?'\n     || lk == 33527                 // 'structured-item' '?'\n     || lk == 35919                 // 'array' ']'\n     || lk == 36009                 // 'json-item' ']'\n     || lk == 36038                 // 'object' ']'\n     || lk == 36087                 // 'structured-item' ']'\n     || lk == 36431                 // 'array' 'after'\n     || lk == 36521                 // 'json-item' 'after'\n     || lk == 36550                 // 'object' 'after'\n     || lk == 36599                 // 'structured-item' 'after'\n     || lk == 37455                 // 'array' 'allowing'\n     || lk == 37545                 // 'json-item' 'allowing'\n     || lk == 37574                 // 'object' 'allowing'\n     || lk == 37623                 // 'structured-item' 'allowing'\n     || lk == 38991                 // 'array' 'and'\n     || lk == 39081                 // 'json-item' 'and'\n     || lk == 39110                 // 'object' 'and'\n     || lk == 39159                 // 'structured-item' 'and'\n     || lk == 41039                 // 'array' 'as'\n     || lk == 41129                 // 'json-item' 'as'\n     || lk == 41158                 // 'object' 'as'\n     || lk == 41207                 // 'structured-item' 'as'\n     || lk == 41551                 // 'array' 'ascending'\n     || lk == 41641                 // 'json-item' 'ascending'\n     || lk == 41670                 // 'object' 'ascending'\n     || lk == 41719                 // 'structured-item' 'ascending'\n     || lk == 42063                 // 'array' 'at'\n     || lk == 42153                 // 'json-item' 'at'\n     || lk == 42182                 // 'object' 'at'\n     || lk == 42231                 // 'structured-item' 'at'\n     || lk == 43599                 // 'array' 'before'\n     || lk == 43689                 // 'json-item' 'before'\n     || lk == 43718                 // 'object' 'before'\n     || lk == 43767                 // 'structured-item' 'before'\n     || lk == 45647                 // 'array' 'case'\n     || lk == 45737                 // 'json-item' 'case'\n     || lk == 45766                 // 'object' 'case'\n     || lk == 45815                 // 'structured-item' 'case'\n     || lk == 48719                 // 'array' 'collation'\n     || lk == 48809                 // 'json-item' 'collation'\n     || lk == 48838                 // 'object' 'collation'\n     || lk == 48887                 // 'structured-item' 'collation'\n     || lk == 51279                 // 'array' 'contains'\n     || lk == 51369                 // 'json-item' 'contains'\n     || lk == 51398                 // 'object' 'contains'\n     || lk == 51447                 // 'structured-item' 'contains'\n     || lk == 54351                 // 'array' 'count'\n     || lk == 54441                 // 'json-item' 'count'\n     || lk == 54470                 // 'object' 'count'\n     || lk == 54519                 // 'structured-item' 'count'\n     || lk == 56399                 // 'array' 'default'\n     || lk == 56489                 // 'json-item' 'default'\n     || lk == 56518                 // 'object' 'default'\n     || lk == 56567                 // 'structured-item' 'default'\n     || lk == 58447                 // 'array' 'descending'\n     || lk == 58537                 // 'json-item' 'descending'\n     || lk == 58566                 // 'object' 'descending'\n     || lk == 58615                 // 'structured-item' 'descending'\n     || lk == 61007                 // 'array' 'div'\n     || lk == 61097                 // 'json-item' 'div'\n     || lk == 61126                 // 'object' 'div'\n     || lk == 61175                 // 'structured-item' 'div'\n     || lk == 63055                 // 'array' 'else'\n     || lk == 63145                 // 'json-item' 'else'\n     || lk == 63174                 // 'object' 'else'\n     || lk == 63223                 // 'structured-item' 'else'\n     || lk == 63567                 // 'array' 'empty'\n     || lk == 63657                 // 'json-item' 'empty'\n     || lk == 63686                 // 'object' 'empty'\n     || lk == 63735                 // 'structured-item' 'empty'\n     || lk == 65103                 // 'array' 'end'\n     || lk == 65193                 // 'json-item' 'end'\n     || lk == 65222                 // 'object' 'end'\n     || lk == 65271                 // 'structured-item' 'end'\n     || lk == 66127                 // 'array' 'eq'\n     || lk == 66217                 // 'json-item' 'eq'\n     || lk == 66246                 // 'object' 'eq'\n     || lk == 66295                 // 'structured-item' 'eq'\n     || lk == 67663                 // 'array' 'except'\n     || lk == 67753                 // 'json-item' 'except'\n     || lk == 67782                 // 'object' 'except'\n     || lk == 67831                 // 'structured-item' 'except'\n     || lk == 68687                 // 'array' 'external'\n     || lk == 68777                 // 'json-item' 'external'\n     || lk == 68806                 // 'object' 'external'\n     || lk == 68855                 // 'structured-item' 'external'\n     || lk == 71247                 // 'array' 'for'\n     || lk == 71337                 // 'json-item' 'for'\n     || lk == 71366                 // 'object' 'for'\n     || lk == 71415                 // 'structured-item' 'for'\n     || lk == 75855                 // 'array' 'ge'\n     || lk == 75945                 // 'json-item' 'ge'\n     || lk == 75974                 // 'object' 'ge'\n     || lk == 76023                 // 'structured-item' 'ge'\n     || lk == 76879                 // 'array' 'group'\n     || lk == 76969                 // 'json-item' 'group'\n     || lk == 76998                 // 'object' 'group'\n     || lk == 77047                 // 'structured-item' 'group'\n     || lk == 77903                 // 'array' 'gt'\n     || lk == 77993                 // 'json-item' 'gt'\n     || lk == 78022                 // 'object' 'gt'\n     || lk == 78071                 // 'structured-item' 'gt'\n     || lk == 78415                 // 'array' 'idiv'\n     || lk == 78505                 // 'json-item' 'idiv'\n     || lk == 78534                 // 'object' 'idiv'\n     || lk == 78583                 // 'structured-item' 'idiv'\n     || lk == 79951                 // 'array' 'in'\n     || lk == 80041                 // 'json-item' 'in'\n     || lk == 80070                 // 'object' 'in'\n     || lk == 80119                 // 'structured-item' 'in'\n     || lk == 83023                 // 'array' 'instance'\n     || lk == 83113                 // 'json-item' 'instance'\n     || lk == 83142                 // 'object' 'instance'\n     || lk == 83191                 // 'structured-item' 'instance'\n     || lk == 84047                 // 'array' 'intersect'\n     || lk == 84137                 // 'json-item' 'intersect'\n     || lk == 84166                 // 'object' 'intersect'\n     || lk == 84215                 // 'structured-item' 'intersect'\n     || lk == 84559                 // 'array' 'into'\n     || lk == 84649                 // 'json-item' 'into'\n     || lk == 84678                 // 'object' 'into'\n     || lk == 84727                 // 'structured-item' 'into'\n     || lk == 85071                 // 'array' 'is'\n     || lk == 85161                 // 'json-item' 'is'\n     || lk == 85190                 // 'object' 'is'\n     || lk == 85239                 // 'structured-item' 'is'\n     || lk == 89679                 // 'array' 'le'\n     || lk == 89769                 // 'json-item' 'le'\n     || lk == 89798                 // 'object' 'le'\n     || lk == 89847                 // 'structured-item' 'le'\n     || lk == 90703                 // 'array' 'let'\n     || lk == 90793                 // 'json-item' 'let'\n     || lk == 90822                 // 'object' 'let'\n     || lk == 90871                 // 'structured-item' 'let'\n     || lk == 92751                 // 'array' 'lt'\n     || lk == 92841                 // 'json-item' 'lt'\n     || lk == 92870                 // 'object' 'lt'\n     || lk == 92919                 // 'structured-item' 'lt'\n     || lk == 93775                 // 'array' 'mod'\n     || lk == 93865                 // 'json-item' 'mod'\n     || lk == 93894                 // 'object' 'mod'\n     || lk == 93943                 // 'structured-item' 'mod'\n     || lk == 94287                 // 'array' 'modify'\n     || lk == 94377                 // 'json-item' 'modify'\n     || lk == 94406                 // 'object' 'modify'\n     || lk == 94455                 // 'structured-item' 'modify'\n     || lk == 96847                 // 'array' 'ne'\n     || lk == 96937                 // 'json-item' 'ne'\n     || lk == 96966                 // 'object' 'ne'\n     || lk == 97015                 // 'structured-item' 'ne'\n     || lk == 103503                // 'array' 'only'\n     || lk == 103593                // 'json-item' 'only'\n     || lk == 103622                // 'object' 'only'\n     || lk == 103671                // 'structured-item' 'only'\n     || lk == 104527                // 'array' 'or'\n     || lk == 104617                // 'json-item' 'or'\n     || lk == 104646                // 'object' 'or'\n     || lk == 104695                // 'structured-item' 'or'\n     || lk == 105039                // 'array' 'order'\n     || lk == 105129                // 'json-item' 'order'\n     || lk == 105158                // 'object' 'order'\n     || lk == 105207                // 'structured-item' 'order'\n     || lk == 107087                // 'array' 'paragraphs'\n     || lk == 107177                // 'json-item' 'paragraphs'\n     || lk == 107206                // 'object' 'paragraphs'\n     || lk == 107255                // 'structured-item' 'paragraphs'\n     || lk == 114767                // 'array' 'return'\n     || lk == 114857                // 'json-item' 'return'\n     || lk == 114886                // 'object' 'return'\n     || lk == 114935                // 'structured-item' 'return'\n     || lk == 116815                // 'array' 'satisfies'\n     || lk == 116905                // 'json-item' 'satisfies'\n     || lk == 116934                // 'object' 'satisfies'\n     || lk == 116983                // 'structured-item' 'satisfies'\n     || lk == 118863                // 'array' 'score'\n     || lk == 118953                // 'json-item' 'score'\n     || lk == 118982                // 'object' 'score'\n     || lk == 119031                // 'structured-item' 'score'\n     || lk == 121423                // 'array' 'sentences'\n     || lk == 121513                // 'json-item' 'sentences'\n     || lk == 121542                // 'object' 'sentences'\n     || lk == 121591                // 'structured-item' 'sentences'\n     || lk == 123471                // 'array' 'stable'\n     || lk == 123561                // 'json-item' 'stable'\n     || lk == 123590                // 'object' 'stable'\n     || lk == 123639                // 'structured-item' 'stable'\n     || lk == 123983                // 'array' 'start'\n     || lk == 124073                // 'json-item' 'start'\n     || lk == 124102                // 'object' 'start'\n     || lk == 124151                // 'structured-item' 'start'\n     || lk == 129103                // 'array' 'times'\n     || lk == 129193                // 'json-item' 'times'\n     || lk == 129222                // 'object' 'times'\n     || lk == 129271                // 'structured-item' 'times'\n     || lk == 129615                // 'array' 'to'\n     || lk == 129705                // 'json-item' 'to'\n     || lk == 129734                // 'object' 'to'\n     || lk == 129783                // 'structured-item' 'to'\n     || lk == 133199                // 'array' 'union'\n     || lk == 133289                // 'json-item' 'union'\n     || lk == 133318                // 'object' 'union'\n     || lk == 133367                // 'structured-item' 'union'\n     || lk == 139343                // 'array' 'where'\n     || lk == 139433                // 'json-item' 'where'\n     || lk == 139462                // 'object' 'where'\n     || lk == 139511                // 'structured-item' 'where'\n     || lk == 141391                // 'array' 'with'\n     || lk == 141481                // 'json-item' 'with'\n     || lk == 141510                // 'object' 'with'\n     || lk == 141559                // 'structured-item' 'with'\n     || lk == 142927                // 'array' 'words'\n     || lk == 143017                // 'json-item' 'words'\n     || lk == 143046                // 'object' 'words'\n     || lk == 143095                // 'structured-item' 'words'\n     || lk == 143951                // 'array' '{'\n     || lk == 144041                // 'json-item' '{'\n     || lk == 144070                // 'object' '{'\n     || lk == 144119                // 'structured-item' '{'\n     || lk == 145487                // 'array' '|'\n     || lk == 145577                // 'json-item' '|'\n     || lk == 145606                // 'object' '|'\n     || lk == 145655                // 'structured-item' '|'\n     || lk == 145999                // 'array' '||'\n     || lk == 146089                // 'json-item' '||'\n     || lk == 146118                // 'object' '||'\n     || lk == 146167                // 'structured-item' '||'\n     || lk == 146511                // 'array' '|}'\n     || lk == 146601                // 'json-item' '|}'\n     || lk == 146630                // 'object' '|}'\n     || lk == 146679                // 'structured-item' '|}'\n     || lk == 147023                // 'array' '}'\n     || lk == 147113                // 'json-item' '}'\n     || lk == 147142                // 'object' '}'\n     || lk == 147191)               // 'structured-item' '}'\n    {\n      lk = memoized(6, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_AtomicOrUnionType();\n          lk = -4;\n        }\n        catch (p4A)\n        {\n          try\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            try_JSONTest();\n            lk = -6;\n          }\n          catch (p6A)\n          {\n            lk = -7;\n          }\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(6, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case 18003:                     // 'attribute' '('\n    case 18017:                     // 'comment' '('\n    case 18041:                     // 'document-node' '('\n    case 18042:                     // 'element' '('\n    case 18108:                     // 'namespace-node' '('\n    case 18114:                     // 'node' '('\n    case 18140:                     // 'processing-instruction' '('\n    case 18150:                     // 'schema-attribute' '('\n    case 18151:                     // 'schema-element' '('\n    case 18169:                     // 'text' '('\n      parse_KindTest();\n      break;\n    case 18087:                     // 'item' '('\n      shift(167);                   // 'item'\n      lookahead1W(22);              // S^WS | '(' | '(:'\n      shift(35);                    // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shift(38);                    // ')'\n      break;\n    case 33:                        // '%'\n    case 18067:                     // 'function' '('\n      parse_FunctionTest();\n      break;\n    case 35:                        // '('\n      parse_ParenthesizedItemType();\n      break;\n    case -6:\n    case 17999:                     // 'array' '('\n    case 18089:                     // 'json-item' '('\n    case 18118:                     // 'object' '('\n      parse_JSONTest();\n      break;\n    case -7:\n    case 18167:                     // 'structured-item' '('\n      parse_StructuredItemTest();\n      break;\n    default:\n      parse_AtomicOrUnionType();\n    }\n    eventHandler.endNonterminal(\"ItemType\", e0);\n  }\n\n  function try_ItemType()\n  {\n    switch (l1)\n    {\n    case 79:                        // 'array'\n    case 83:                        // 'attribute'\n    case 97:                        // 'comment'\n    case 121:                       // 'document-node'\n    case 122:                       // 'element'\n    case 147:                       // 'function'\n    case 167:                       // 'item'\n    case 169:                       // 'json-item'\n    case 188:                       // 'namespace-node'\n    case 194:                       // 'node'\n    case 198:                       // 'object'\n    case 220:                       // 'processing-instruction'\n    case 230:                       // 'schema-attribute'\n    case 231:                       // 'schema-element'\n    case 247:                       // 'structured-item'\n    case 249:                       // 'text'\n      lookahead2W(232);             // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n                                    // ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '?' | ']' | 'after' |\n                                    // 'allowing' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'case' |\n                                    // 'collation' | 'contains' | 'count' | 'default' | 'descending' | 'div' | 'else' |\n                                    // 'empty' | 'end' | 'eq' | 'except' | 'external' | 'for' | 'ge' | 'group' | 'gt' |\n                                    // 'idiv' | 'in' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'score' | 'sentences' | 'stable' | 'start' | 'times' | 'to' |\n                                    // 'union' | 'where' | 'with' | 'words' | '{' | '|' | '||' | '|}' | '}'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 12879                 // 'array' EOF\n     || lk == 12969                 // 'json-item' EOF\n     || lk == 12998                 // 'object' EOF\n     || lk == 13047                 // 'structured-item' EOF\n     || lk == 13903                 // 'array' '!='\n     || lk == 13993                 // 'json-item' '!='\n     || lk == 14022                 // 'object' '!='\n     || lk == 14071                 // 'structured-item' '!='\n     || lk == 19535                 // 'array' ')'\n     || lk == 19625                 // 'json-item' ')'\n     || lk == 19654                 // 'object' ')'\n     || lk == 19703                 // 'structured-item' ')'\n     || lk == 20047                 // 'array' '*'\n     || lk == 20137                 // 'json-item' '*'\n     || lk == 20166                 // 'object' '*'\n     || lk == 20215                 // 'structured-item' '*'\n     || lk == 20559                 // 'array' '*'\n     || lk == 20649                 // 'json-item' '*'\n     || lk == 20678                 // 'object' '*'\n     || lk == 20727                 // 'structured-item' '*'\n     || lk == 21071                 // 'array' '+'\n     || lk == 21161                 // 'json-item' '+'\n     || lk == 21190                 // 'object' '+'\n     || lk == 21239                 // 'structured-item' '+'\n     || lk == 21583                 // 'array' ','\n     || lk == 21673                 // 'json-item' ','\n     || lk == 21702                 // 'object' ','\n     || lk == 21751                 // 'structured-item' ','\n     || lk == 22095                 // 'array' '-'\n     || lk == 22185                 // 'json-item' '-'\n     || lk == 22214                 // 'object' '-'\n     || lk == 22263                 // 'structured-item' '-'\n     || lk == 25679                 // 'array' ':'\n     || lk == 25769                 // 'json-item' ':'\n     || lk == 25798                 // 'object' ':'\n     || lk == 25847                 // 'structured-item' ':'\n     || lk == 27215                 // 'array' ':='\n     || lk == 27305                 // 'json-item' ':='\n     || lk == 27334                 // 'object' ':='\n     || lk == 27383                 // 'structured-item' ':='\n     || lk == 27727                 // 'array' ';'\n     || lk == 27817                 // 'json-item' ';'\n     || lk == 27846                 // 'object' ';'\n     || lk == 27895                 // 'structured-item' ';'\n     || lk == 28239                 // 'array' '<'\n     || lk == 28329                 // 'json-item' '<'\n     || lk == 28358                 // 'object' '<'\n     || lk == 28407                 // 'structured-item' '<'\n     || lk == 29775                 // 'array' '<<'\n     || lk == 29865                 // 'json-item' '<<'\n     || lk == 29894                 // 'object' '<<'\n     || lk == 29943                 // 'structured-item' '<<'\n     || lk == 30287                 // 'array' '<='\n     || lk == 30377                 // 'json-item' '<='\n     || lk == 30406                 // 'object' '<='\n     || lk == 30455                 // 'structured-item' '<='\n     || lk == 31311                 // 'array' '='\n     || lk == 31401                 // 'json-item' '='\n     || lk == 31430                 // 'object' '='\n     || lk == 31479                 // 'structured-item' '='\n     || lk == 31823                 // 'array' '>'\n     || lk == 31913                 // 'json-item' '>'\n     || lk == 31942                 // 'object' '>'\n     || lk == 31991                 // 'structured-item' '>'\n     || lk == 32335                 // 'array' '>='\n     || lk == 32425                 // 'json-item' '>='\n     || lk == 32454                 // 'object' '>='\n     || lk == 32503                 // 'structured-item' '>='\n     || lk == 32847                 // 'array' '>>'\n     || lk == 32937                 // 'json-item' '>>'\n     || lk == 32966                 // 'object' '>>'\n     || lk == 33015                 // 'structured-item' '>>'\n     || lk == 33359                 // 'array' '?'\n     || lk == 33449                 // 'json-item' '?'\n     || lk == 33478                 // 'object' '?'\n     || lk == 33527                 // 'structured-item' '?'\n     || lk == 35919                 // 'array' ']'\n     || lk == 36009                 // 'json-item' ']'\n     || lk == 36038                 // 'object' ']'\n     || lk == 36087                 // 'structured-item' ']'\n     || lk == 36431                 // 'array' 'after'\n     || lk == 36521                 // 'json-item' 'after'\n     || lk == 36550                 // 'object' 'after'\n     || lk == 36599                 // 'structured-item' 'after'\n     || lk == 37455                 // 'array' 'allowing'\n     || lk == 37545                 // 'json-item' 'allowing'\n     || lk == 37574                 // 'object' 'allowing'\n     || lk == 37623                 // 'structured-item' 'allowing'\n     || lk == 38991                 // 'array' 'and'\n     || lk == 39081                 // 'json-item' 'and'\n     || lk == 39110                 // 'object' 'and'\n     || lk == 39159                 // 'structured-item' 'and'\n     || lk == 41039                 // 'array' 'as'\n     || lk == 41129                 // 'json-item' 'as'\n     || lk == 41158                 // 'object' 'as'\n     || lk == 41207                 // 'structured-item' 'as'\n     || lk == 41551                 // 'array' 'ascending'\n     || lk == 41641                 // 'json-item' 'ascending'\n     || lk == 41670                 // 'object' 'ascending'\n     || lk == 41719                 // 'structured-item' 'ascending'\n     || lk == 42063                 // 'array' 'at'\n     || lk == 42153                 // 'json-item' 'at'\n     || lk == 42182                 // 'object' 'at'\n     || lk == 42231                 // 'structured-item' 'at'\n     || lk == 43599                 // 'array' 'before'\n     || lk == 43689                 // 'json-item' 'before'\n     || lk == 43718                 // 'object' 'before'\n     || lk == 43767                 // 'structured-item' 'before'\n     || lk == 45647                 // 'array' 'case'\n     || lk == 45737                 // 'json-item' 'case'\n     || lk == 45766                 // 'object' 'case'\n     || lk == 45815                 // 'structured-item' 'case'\n     || lk == 48719                 // 'array' 'collation'\n     || lk == 48809                 // 'json-item' 'collation'\n     || lk == 48838                 // 'object' 'collation'\n     || lk == 48887                 // 'structured-item' 'collation'\n     || lk == 51279                 // 'array' 'contains'\n     || lk == 51369                 // 'json-item' 'contains'\n     || lk == 51398                 // 'object' 'contains'\n     || lk == 51447                 // 'structured-item' 'contains'\n     || lk == 54351                 // 'array' 'count'\n     || lk == 54441                 // 'json-item' 'count'\n     || lk == 54470                 // 'object' 'count'\n     || lk == 54519                 // 'structured-item' 'count'\n     || lk == 56399                 // 'array' 'default'\n     || lk == 56489                 // 'json-item' 'default'\n     || lk == 56518                 // 'object' 'default'\n     || lk == 56567                 // 'structured-item' 'default'\n     || lk == 58447                 // 'array' 'descending'\n     || lk == 58537                 // 'json-item' 'descending'\n     || lk == 58566                 // 'object' 'descending'\n     || lk == 58615                 // 'structured-item' 'descending'\n     || lk == 61007                 // 'array' 'div'\n     || lk == 61097                 // 'json-item' 'div'\n     || lk == 61126                 // 'object' 'div'\n     || lk == 61175                 // 'structured-item' 'div'\n     || lk == 63055                 // 'array' 'else'\n     || lk == 63145                 // 'json-item' 'else'\n     || lk == 63174                 // 'object' 'else'\n     || lk == 63223                 // 'structured-item' 'else'\n     || lk == 63567                 // 'array' 'empty'\n     || lk == 63657                 // 'json-item' 'empty'\n     || lk == 63686                 // 'object' 'empty'\n     || lk == 63735                 // 'structured-item' 'empty'\n     || lk == 65103                 // 'array' 'end'\n     || lk == 65193                 // 'json-item' 'end'\n     || lk == 65222                 // 'object' 'end'\n     || lk == 65271                 // 'structured-item' 'end'\n     || lk == 66127                 // 'array' 'eq'\n     || lk == 66217                 // 'json-item' 'eq'\n     || lk == 66246                 // 'object' 'eq'\n     || lk == 66295                 // 'structured-item' 'eq'\n     || lk == 67663                 // 'array' 'except'\n     || lk == 67753                 // 'json-item' 'except'\n     || lk == 67782                 // 'object' 'except'\n     || lk == 67831                 // 'structured-item' 'except'\n     || lk == 68687                 // 'array' 'external'\n     || lk == 68777                 // 'json-item' 'external'\n     || lk == 68806                 // 'object' 'external'\n     || lk == 68855                 // 'structured-item' 'external'\n     || lk == 71247                 // 'array' 'for'\n     || lk == 71337                 // 'json-item' 'for'\n     || lk == 71366                 // 'object' 'for'\n     || lk == 71415                 // 'structured-item' 'for'\n     || lk == 75855                 // 'array' 'ge'\n     || lk == 75945                 // 'json-item' 'ge'\n     || lk == 75974                 // 'object' 'ge'\n     || lk == 76023                 // 'structured-item' 'ge'\n     || lk == 76879                 // 'array' 'group'\n     || lk == 76969                 // 'json-item' 'group'\n     || lk == 76998                 // 'object' 'group'\n     || lk == 77047                 // 'structured-item' 'group'\n     || lk == 77903                 // 'array' 'gt'\n     || lk == 77993                 // 'json-item' 'gt'\n     || lk == 78022                 // 'object' 'gt'\n     || lk == 78071                 // 'structured-item' 'gt'\n     || lk == 78415                 // 'array' 'idiv'\n     || lk == 78505                 // 'json-item' 'idiv'\n     || lk == 78534                 // 'object' 'idiv'\n     || lk == 78583                 // 'structured-item' 'idiv'\n     || lk == 79951                 // 'array' 'in'\n     || lk == 80041                 // 'json-item' 'in'\n     || lk == 80070                 // 'object' 'in'\n     || lk == 80119                 // 'structured-item' 'in'\n     || lk == 83023                 // 'array' 'instance'\n     || lk == 83113                 // 'json-item' 'instance'\n     || lk == 83142                 // 'object' 'instance'\n     || lk == 83191                 // 'structured-item' 'instance'\n     || lk == 84047                 // 'array' 'intersect'\n     || lk == 84137                 // 'json-item' 'intersect'\n     || lk == 84166                 // 'object' 'intersect'\n     || lk == 84215                 // 'structured-item' 'intersect'\n     || lk == 84559                 // 'array' 'into'\n     || lk == 84649                 // 'json-item' 'into'\n     || lk == 84678                 // 'object' 'into'\n     || lk == 84727                 // 'structured-item' 'into'\n     || lk == 85071                 // 'array' 'is'\n     || lk == 85161                 // 'json-item' 'is'\n     || lk == 85190                 // 'object' 'is'\n     || lk == 85239                 // 'structured-item' 'is'\n     || lk == 89679                 // 'array' 'le'\n     || lk == 89769                 // 'json-item' 'le'\n     || lk == 89798                 // 'object' 'le'\n     || lk == 89847                 // 'structured-item' 'le'\n     || lk == 90703                 // 'array' 'let'\n     || lk == 90793                 // 'json-item' 'let'\n     || lk == 90822                 // 'object' 'let'\n     || lk == 90871                 // 'structured-item' 'let'\n     || lk == 92751                 // 'array' 'lt'\n     || lk == 92841                 // 'json-item' 'lt'\n     || lk == 92870                 // 'object' 'lt'\n     || lk == 92919                 // 'structured-item' 'lt'\n     || lk == 93775                 // 'array' 'mod'\n     || lk == 93865                 // 'json-item' 'mod'\n     || lk == 93894                 // 'object' 'mod'\n     || lk == 93943                 // 'structured-item' 'mod'\n     || lk == 94287                 // 'array' 'modify'\n     || lk == 94377                 // 'json-item' 'modify'\n     || lk == 94406                 // 'object' 'modify'\n     || lk == 94455                 // 'structured-item' 'modify'\n     || lk == 96847                 // 'array' 'ne'\n     || lk == 96937                 // 'json-item' 'ne'\n     || lk == 96966                 // 'object' 'ne'\n     || lk == 97015                 // 'structured-item' 'ne'\n     || lk == 103503                // 'array' 'only'\n     || lk == 103593                // 'json-item' 'only'\n     || lk == 103622                // 'object' 'only'\n     || lk == 103671                // 'structured-item' 'only'\n     || lk == 104527                // 'array' 'or'\n     || lk == 104617                // 'json-item' 'or'\n     || lk == 104646                // 'object' 'or'\n     || lk == 104695                // 'structured-item' 'or'\n     || lk == 105039                // 'array' 'order'\n     || lk == 105129                // 'json-item' 'order'\n     || lk == 105158                // 'object' 'order'\n     || lk == 105207                // 'structured-item' 'order'\n     || lk == 107087                // 'array' 'paragraphs'\n     || lk == 107177                // 'json-item' 'paragraphs'\n     || lk == 107206                // 'object' 'paragraphs'\n     || lk == 107255                // 'structured-item' 'paragraphs'\n     || lk == 114767                // 'array' 'return'\n     || lk == 114857                // 'json-item' 'return'\n     || lk == 114886                // 'object' 'return'\n     || lk == 114935                // 'structured-item' 'return'\n     || lk == 116815                // 'array' 'satisfies'\n     || lk == 116905                // 'json-item' 'satisfies'\n     || lk == 116934                // 'object' 'satisfies'\n     || lk == 116983                // 'structured-item' 'satisfies'\n     || lk == 118863                // 'array' 'score'\n     || lk == 118953                // 'json-item' 'score'\n     || lk == 118982                // 'object' 'score'\n     || lk == 119031                // 'structured-item' 'score'\n     || lk == 121423                // 'array' 'sentences'\n     || lk == 121513                // 'json-item' 'sentences'\n     || lk == 121542                // 'object' 'sentences'\n     || lk == 121591                // 'structured-item' 'sentences'\n     || lk == 123471                // 'array' 'stable'\n     || lk == 123561                // 'json-item' 'stable'\n     || lk == 123590                // 'object' 'stable'\n     || lk == 123639                // 'structured-item' 'stable'\n     || lk == 123983                // 'array' 'start'\n     || lk == 124073                // 'json-item' 'start'\n     || lk == 124102                // 'object' 'start'\n     || lk == 124151                // 'structured-item' 'start'\n     || lk == 129103                // 'array' 'times'\n     || lk == 129193                // 'json-item' 'times'\n     || lk == 129222                // 'object' 'times'\n     || lk == 129271                // 'structured-item' 'times'\n     || lk == 129615                // 'array' 'to'\n     || lk == 129705                // 'json-item' 'to'\n     || lk == 129734                // 'object' 'to'\n     || lk == 129783                // 'structured-item' 'to'\n     || lk == 133199                // 'array' 'union'\n     || lk == 133289                // 'json-item' 'union'\n     || lk == 133318                // 'object' 'union'\n     || lk == 133367                // 'structured-item' 'union'\n     || lk == 139343                // 'array' 'where'\n     || lk == 139433                // 'json-item' 'where'\n     || lk == 139462                // 'object' 'where'\n     || lk == 139511                // 'structured-item' 'where'\n     || lk == 141391                // 'array' 'with'\n     || lk == 141481                // 'json-item' 'with'\n     || lk == 141510                // 'object' 'with'\n     || lk == 141559                // 'structured-item' 'with'\n     || lk == 142927                // 'array' 'words'\n     || lk == 143017                // 'json-item' 'words'\n     || lk == 143046                // 'object' 'words'\n     || lk == 143095                // 'structured-item' 'words'\n     || lk == 143951                // 'array' '{'\n     || lk == 144041                // 'json-item' '{'\n     || lk == 144070                // 'object' '{'\n     || lk == 144119                // 'structured-item' '{'\n     || lk == 145487                // 'array' '|'\n     || lk == 145577                // 'json-item' '|'\n     || lk == 145606                // 'object' '|'\n     || lk == 145655                // 'structured-item' '|'\n     || lk == 145999                // 'array' '||'\n     || lk == 146089                // 'json-item' '||'\n     || lk == 146118                // 'object' '||'\n     || lk == 146167                // 'structured-item' '||'\n     || lk == 146511                // 'array' '|}'\n     || lk == 146601                // 'json-item' '|}'\n     || lk == 146630                // 'object' '|}'\n     || lk == 146679                // 'structured-item' '|}'\n     || lk == 147023                // 'array' '}'\n     || lk == 147113                // 'json-item' '}'\n     || lk == 147142                // 'object' '}'\n     || lk == 147191)               // 'structured-item' '}'\n    {\n      lk = memoized(6, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_AtomicOrUnionType();\n          memoize(6, e0A, -4);\n          lk = -8;\n        }\n        catch (p4A)\n        {\n          try\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            try_JSONTest();\n            memoize(6, e0A, -6);\n            lk = -8;\n          }\n          catch (p6A)\n          {\n            lk = -7;\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            memoize(6, e0A, -7);\n          }\n        }\n      }\n    }\n    switch (lk)\n    {\n    case 18003:                     // 'attribute' '('\n    case 18017:                     // 'comment' '('\n    case 18041:                     // 'document-node' '('\n    case 18042:                     // 'element' '('\n    case 18108:                     // 'namespace-node' '('\n    case 18114:                     // 'node' '('\n    case 18140:                     // 'processing-instruction' '('\n    case 18150:                     // 'schema-attribute' '('\n    case 18151:                     // 'schema-element' '('\n    case 18169:                     // 'text' '('\n      try_KindTest();\n      break;\n    case 18087:                     // 'item' '('\n      shiftT(167);                  // 'item'\n      lookahead1W(22);              // S^WS | '(' | '(:'\n      shiftT(35);                   // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shiftT(38);                   // ')'\n      break;\n    case 33:                        // '%'\n    case 18067:                     // 'function' '('\n      try_FunctionTest();\n      break;\n    case 35:                        // '('\n      try_ParenthesizedItemType();\n      break;\n    case -6:\n    case 17999:                     // 'array' '('\n    case 18089:                     // 'json-item' '('\n    case 18118:                     // 'object' '('\n      try_JSONTest();\n      break;\n    case -7:\n    case 18167:                     // 'structured-item' '('\n      try_StructuredItemTest();\n      break;\n    case -8:\n      break;\n    default:\n      try_AtomicOrUnionType();\n    }\n  }\n\n  function parse_JSONTest()\n  {\n    eventHandler.startNonterminal(\"JSONTest\", e0);\n    switch (l1)\n    {\n    case 169:                       // 'json-item'\n      parse_JSONItemTest();\n      break;\n    case 198:                       // 'object'\n      parse_JSONObjectTest();\n      break;\n    default:\n      parse_JSONArrayTest();\n    }\n    eventHandler.endNonterminal(\"JSONTest\", e0);\n  }\n\n  function try_JSONTest()\n  {\n    switch (l1)\n    {\n    case 169:                       // 'json-item'\n      try_JSONItemTest();\n      break;\n    case 198:                       // 'object'\n      try_JSONObjectTest();\n      break;\n    default:\n      try_JSONArrayTest();\n    }\n  }\n\n  function parse_StructuredItemTest()\n  {\n    eventHandler.startNonterminal(\"StructuredItemTest\", e0);\n    shift(247);                     // 'structured-item'\n    lookahead1W(232);               // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n                                    // ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '?' | ']' | 'after' |\n                                    // 'allowing' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'case' |\n                                    // 'collation' | 'contains' | 'count' | 'default' | 'descending' | 'div' | 'else' |\n                                    // 'empty' | 'end' | 'eq' | 'except' | 'external' | 'for' | 'ge' | 'group' | 'gt' |\n                                    // 'idiv' | 'in' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'score' | 'sentences' | 'stable' | 'start' | 'times' | 'to' |\n                                    // 'union' | 'where' | 'with' | 'words' | '{' | '|' | '||' | '|}' | '}'\n    if (l1 == 35)                   // '('\n    {\n      shift(35);                    // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shift(38);                    // ')'\n    }\n    eventHandler.endNonterminal(\"StructuredItemTest\", e0);\n  }\n\n  function try_StructuredItemTest()\n  {\n    shiftT(247);                    // 'structured-item'\n    lookahead1W(232);               // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n                                    // ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '?' | ']' | 'after' |\n                                    // 'allowing' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'case' |\n                                    // 'collation' | 'contains' | 'count' | 'default' | 'descending' | 'div' | 'else' |\n                                    // 'empty' | 'end' | 'eq' | 'except' | 'external' | 'for' | 'ge' | 'group' | 'gt' |\n                                    // 'idiv' | 'in' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'score' | 'sentences' | 'stable' | 'start' | 'times' | 'to' |\n                                    // 'union' | 'where' | 'with' | 'words' | '{' | '|' | '||' | '|}' | '}'\n    if (l1 == 35)                   // '('\n    {\n      shiftT(35);                   // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shiftT(38);                   // ')'\n    }\n  }\n\n  function parse_JSONItemTest()\n  {\n    eventHandler.startNonterminal(\"JSONItemTest\", e0);\n    shift(169);                     // 'json-item'\n    lookahead1W(232);               // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n                                    // ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '?' | ']' | 'after' |\n                                    // 'allowing' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'case' |\n                                    // 'collation' | 'contains' | 'count' | 'default' | 'descending' | 'div' | 'else' |\n                                    // 'empty' | 'end' | 'eq' | 'except' | 'external' | 'for' | 'ge' | 'group' | 'gt' |\n                                    // 'idiv' | 'in' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'score' | 'sentences' | 'stable' | 'start' | 'times' | 'to' |\n                                    // 'union' | 'where' | 'with' | 'words' | '{' | '|' | '||' | '|}' | '}'\n    if (l1 == 35)                   // '('\n    {\n      shift(35);                    // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shift(38);                    // ')'\n    }\n    eventHandler.endNonterminal(\"JSONItemTest\", e0);\n  }\n\n  function try_JSONItemTest()\n  {\n    shiftT(169);                    // 'json-item'\n    lookahead1W(232);               // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n                                    // ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '?' | ']' | 'after' |\n                                    // 'allowing' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'case' |\n                                    // 'collation' | 'contains' | 'count' | 'default' | 'descending' | 'div' | 'else' |\n                                    // 'empty' | 'end' | 'eq' | 'except' | 'external' | 'for' | 'ge' | 'group' | 'gt' |\n                                    // 'idiv' | 'in' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'score' | 'sentences' | 'stable' | 'start' | 'times' | 'to' |\n                                    // 'union' | 'where' | 'with' | 'words' | '{' | '|' | '||' | '|}' | '}'\n    if (l1 == 35)                   // '('\n    {\n      shiftT(35);                   // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shiftT(38);                   // ')'\n    }\n  }\n\n  function parse_JSONObjectTest()\n  {\n    eventHandler.startNonterminal(\"JSONObjectTest\", e0);\n    shift(198);                     // 'object'\n    lookahead1W(232);               // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n                                    // ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '?' | ']' | 'after' |\n                                    // 'allowing' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'case' |\n                                    // 'collation' | 'contains' | 'count' | 'default' | 'descending' | 'div' | 'else' |\n                                    // 'empty' | 'end' | 'eq' | 'except' | 'external' | 'for' | 'ge' | 'group' | 'gt' |\n                                    // 'idiv' | 'in' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'score' | 'sentences' | 'stable' | 'start' | 'times' | 'to' |\n                                    // 'union' | 'where' | 'with' | 'words' | '{' | '|' | '||' | '|}' | '}'\n    if (l1 == 35)                   // '('\n    {\n      shift(35);                    // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shift(38);                    // ')'\n    }\n    eventHandler.endNonterminal(\"JSONObjectTest\", e0);\n  }\n\n  function try_JSONObjectTest()\n  {\n    shiftT(198);                    // 'object'\n    lookahead1W(232);               // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n                                    // ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '?' | ']' | 'after' |\n                                    // 'allowing' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'case' |\n                                    // 'collation' | 'contains' | 'count' | 'default' | 'descending' | 'div' | 'else' |\n                                    // 'empty' | 'end' | 'eq' | 'except' | 'external' | 'for' | 'ge' | 'group' | 'gt' |\n                                    // 'idiv' | 'in' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'score' | 'sentences' | 'stable' | 'start' | 'times' | 'to' |\n                                    // 'union' | 'where' | 'with' | 'words' | '{' | '|' | '||' | '|}' | '}'\n    if (l1 == 35)                   // '('\n    {\n      shiftT(35);                   // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shiftT(38);                   // ')'\n    }\n  }\n\n  function parse_JSONArrayTest()\n  {\n    eventHandler.startNonterminal(\"JSONArrayTest\", e0);\n    shift(79);                      // 'array'\n    lookahead1W(232);               // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n                                    // ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '?' | ']' | 'after' |\n                                    // 'allowing' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'case' |\n                                    // 'collation' | 'contains' | 'count' | 'default' | 'descending' | 'div' | 'else' |\n                                    // 'empty' | 'end' | 'eq' | 'except' | 'external' | 'for' | 'ge' | 'group' | 'gt' |\n                                    // 'idiv' | 'in' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'score' | 'sentences' | 'stable' | 'start' | 'times' | 'to' |\n                                    // 'union' | 'where' | 'with' | 'words' | '{' | '|' | '||' | '|}' | '}'\n    if (l1 == 35)                   // '('\n    {\n      shift(35);                    // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shift(38);                    // ')'\n    }\n    eventHandler.endNonterminal(\"JSONArrayTest\", e0);\n  }\n\n  function try_JSONArrayTest()\n  {\n    shiftT(79);                     // 'array'\n    lookahead1W(232);               // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n                                    // ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '?' | ']' | 'after' |\n                                    // 'allowing' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'case' |\n                                    // 'collation' | 'contains' | 'count' | 'default' | 'descending' | 'div' | 'else' |\n                                    // 'empty' | 'end' | 'eq' | 'except' | 'external' | 'for' | 'ge' | 'group' | 'gt' |\n                                    // 'idiv' | 'in' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'score' | 'sentences' | 'stable' | 'start' | 'times' | 'to' |\n                                    // 'union' | 'where' | 'with' | 'words' | '{' | '|' | '||' | '|}' | '}'\n    if (l1 == 35)                   // '('\n    {\n      shiftT(35);                   // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shiftT(38);                   // ')'\n    }\n  }\n\n  function parse_AtomicOrUnionType()\n  {\n    eventHandler.startNonterminal(\"AtomicOrUnionType\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"AtomicOrUnionType\", e0);\n  }\n\n  function try_AtomicOrUnionType()\n  {\n    try_EQName();\n  }\n\n  function parse_KindTest()\n  {\n    eventHandler.startNonterminal(\"KindTest\", e0);\n    switch (l1)\n    {\n    case 121:                       // 'document-node'\n      parse_DocumentTest();\n      break;\n    case 122:                       // 'element'\n      parse_ElementTest();\n      break;\n    case 83:                        // 'attribute'\n      parse_AttributeTest();\n      break;\n    case 231:                       // 'schema-element'\n      parse_SchemaElementTest();\n      break;\n    case 230:                       // 'schema-attribute'\n      parse_SchemaAttributeTest();\n      break;\n    case 220:                       // 'processing-instruction'\n      parse_PITest();\n      break;\n    case 97:                        // 'comment'\n      parse_CommentTest();\n      break;\n    case 249:                       // 'text'\n      parse_TextTest();\n      break;\n    case 188:                       // 'namespace-node'\n      parse_NamespaceNodeTest();\n      break;\n    default:\n      parse_AnyKindTest();\n    }\n    eventHandler.endNonterminal(\"KindTest\", e0);\n  }\n\n  function try_KindTest()\n  {\n    switch (l1)\n    {\n    case 121:                       // 'document-node'\n      try_DocumentTest();\n      break;\n    case 122:                       // 'element'\n      try_ElementTest();\n      break;\n    case 83:                        // 'attribute'\n      try_AttributeTest();\n      break;\n    case 231:                       // 'schema-element'\n      try_SchemaElementTest();\n      break;\n    case 230:                       // 'schema-attribute'\n      try_SchemaAttributeTest();\n      break;\n    case 220:                       // 'processing-instruction'\n      try_PITest();\n      break;\n    case 97:                        // 'comment'\n      try_CommentTest();\n      break;\n    case 249:                       // 'text'\n      try_TextTest();\n      break;\n    case 188:                       // 'namespace-node'\n      try_NamespaceNodeTest();\n      break;\n    default:\n      try_AnyKindTest();\n    }\n  }\n\n  function parse_AnyKindTest()\n  {\n    eventHandler.startNonterminal(\"AnyKindTest\", e0);\n    shift(194);                     // 'node'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"AnyKindTest\", e0);\n  }\n\n  function try_AnyKindTest()\n  {\n    shiftT(194);                    // 'node'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(38);                     // ')'\n  }\n\n  function parse_DocumentTest()\n  {\n    eventHandler.startNonterminal(\"DocumentTest\", e0);\n    shift(121);                     // 'document-node'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(154);               // S^WS | '(:' | ')' | 'element' | 'schema-element'\n    if (l1 != 38)                   // ')'\n    {\n      switch (l1)\n      {\n      case 122:                     // 'element'\n        whitespace();\n        parse_ElementTest();\n        break;\n      default:\n        whitespace();\n        parse_SchemaElementTest();\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"DocumentTest\", e0);\n  }\n\n  function try_DocumentTest()\n  {\n    shiftT(121);                    // 'document-node'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(154);               // S^WS | '(:' | ')' | 'element' | 'schema-element'\n    if (l1 != 38)                   // ')'\n    {\n      switch (l1)\n      {\n      case 122:                     // 'element'\n        try_ElementTest();\n        break;\n      default:\n        try_SchemaElementTest();\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(38);                     // ')'\n  }\n\n  function parse_TextTest()\n  {\n    eventHandler.startNonterminal(\"TextTest\", e0);\n    shift(249);                     // 'text'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"TextTest\", e0);\n  }\n\n  function try_TextTest()\n  {\n    shiftT(249);                    // 'text'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(38);                     // ')'\n  }\n\n  function parse_CommentTest()\n  {\n    eventHandler.startNonterminal(\"CommentTest\", e0);\n    shift(97);                      // 'comment'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"CommentTest\", e0);\n  }\n\n  function try_CommentTest()\n  {\n    shiftT(97);                     // 'comment'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(38);                     // ')'\n  }\n\n  function parse_NamespaceNodeTest()\n  {\n    eventHandler.startNonterminal(\"NamespaceNodeTest\", e0);\n    shift(188);                     // 'namespace-node'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"NamespaceNodeTest\", e0);\n  }\n\n  function try_NamespaceNodeTest()\n  {\n    shiftT(188);                    // 'namespace-node'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(38);                     // ')'\n  }\n\n  function parse_PITest()\n  {\n    eventHandler.startNonterminal(\"PITest\", e0);\n    shift(220);                     // 'processing-instruction'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(243);               // StringLiteral | NCName^Token | S^WS | '(:' | ')' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with'\n    if (l1 != 38)                   // ')'\n    {\n      switch (l1)\n      {\n      case 11:                      // StringLiteral\n        shift(11);                  // StringLiteral\n        break;\n      default:\n        whitespace();\n        parse_NCName();\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"PITest\", e0);\n  }\n\n  function try_PITest()\n  {\n    shiftT(220);                    // 'processing-instruction'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(243);               // StringLiteral | NCName^Token | S^WS | '(:' | ')' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with'\n    if (l1 != 38)                   // ')'\n    {\n      switch (l1)\n      {\n      case 11:                      // StringLiteral\n        shiftT(11);                 // StringLiteral\n        break;\n      default:\n        try_NCName();\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(38);                     // ')'\n  }\n\n  function parse_AttributeTest()\n  {\n    eventHandler.startNonterminal(\"AttributeTest\", e0);\n    shift(83);                      // 'attribute'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | ')' | '*' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    if (l1 != 38)                   // ')'\n    {\n      whitespace();\n      parse_AttribNameOrWildcard();\n      lookahead1W(105);             // S^WS | '(:' | ')' | ','\n      if (l1 == 42)                 // ','\n      {\n        shift(42);                  // ','\n        lookahead1W(245);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n        whitespace();\n        parse_TypeName();\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"AttributeTest\", e0);\n  }\n\n  function try_AttributeTest()\n  {\n    shiftT(83);                     // 'attribute'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | ')' | '*' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    if (l1 != 38)                   // ')'\n    {\n      try_AttribNameOrWildcard();\n      lookahead1W(105);             // S^WS | '(:' | ')' | ','\n      if (l1 == 42)                 // ','\n      {\n        shiftT(42);                 // ','\n        lookahead1W(245);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n        try_TypeName();\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(38);                     // ')'\n  }\n\n  function parse_AttribNameOrWildcard()\n  {\n    eventHandler.startNonterminal(\"AttribNameOrWildcard\", e0);\n    switch (l1)\n    {\n    case 39:                        // '*'\n      shift(39);                    // '*'\n      break;\n    default:\n      parse_AttributeName();\n    }\n    eventHandler.endNonterminal(\"AttribNameOrWildcard\", e0);\n  }\n\n  function try_AttribNameOrWildcard()\n  {\n    switch (l1)\n    {\n    case 39:                        // '*'\n      shiftT(39);                   // '*'\n      break;\n    default:\n      try_AttributeName();\n    }\n  }\n\n  function parse_SchemaAttributeTest()\n  {\n    eventHandler.startNonterminal(\"SchemaAttributeTest\", e0);\n    shift(230);                     // 'schema-attribute'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    whitespace();\n    parse_AttributeDeclaration();\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"SchemaAttributeTest\", e0);\n  }\n\n  function try_SchemaAttributeTest()\n  {\n    shiftT(230);                    // 'schema-attribute'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    try_AttributeDeclaration();\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(38);                     // ')'\n  }\n\n  function parse_AttributeDeclaration()\n  {\n    eventHandler.startNonterminal(\"AttributeDeclaration\", e0);\n    parse_AttributeName();\n    eventHandler.endNonterminal(\"AttributeDeclaration\", e0);\n  }\n\n  function try_AttributeDeclaration()\n  {\n    try_AttributeName();\n  }\n\n  function parse_ElementTest()\n  {\n    eventHandler.startNonterminal(\"ElementTest\", e0);\n    shift(122);                     // 'element'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | ')' | '*' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    if (l1 != 38)                   // ')'\n    {\n      whitespace();\n      parse_ElementNameOrWildcard();\n      lookahead1W(105);             // S^WS | '(:' | ')' | ','\n      if (l1 == 42)                 // ','\n      {\n        shift(42);                  // ','\n        lookahead1W(245);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n        whitespace();\n        parse_TypeName();\n        lookahead1W(106);           // S^WS | '(:' | ')' | '?'\n        if (l1 == 65)               // '?'\n        {\n          shift(65);                // '?'\n        }\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"ElementTest\", e0);\n  }\n\n  function try_ElementTest()\n  {\n    shiftT(122);                    // 'element'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | ')' | '*' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    if (l1 != 38)                   // ')'\n    {\n      try_ElementNameOrWildcard();\n      lookahead1W(105);             // S^WS | '(:' | ')' | ','\n      if (l1 == 42)                 // ','\n      {\n        shiftT(42);                 // ','\n        lookahead1W(245);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n        try_TypeName();\n        lookahead1W(106);           // S^WS | '(:' | ')' | '?'\n        if (l1 == 65)               // '?'\n        {\n          shiftT(65);               // '?'\n        }\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(38);                     // ')'\n  }\n\n  function parse_ElementNameOrWildcard()\n  {\n    eventHandler.startNonterminal(\"ElementNameOrWildcard\", e0);\n    switch (l1)\n    {\n    case 39:                        // '*'\n      shift(39);                    // '*'\n      break;\n    default:\n      parse_ElementName();\n    }\n    eventHandler.endNonterminal(\"ElementNameOrWildcard\", e0);\n  }\n\n  function try_ElementNameOrWildcard()\n  {\n    switch (l1)\n    {\n    case 39:                        // '*'\n      shiftT(39);                   // '*'\n      break;\n    default:\n      try_ElementName();\n    }\n  }\n\n  function parse_SchemaElementTest()\n  {\n    eventHandler.startNonterminal(\"SchemaElementTest\", e0);\n    shift(231);                     // 'schema-element'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    whitespace();\n    parse_ElementDeclaration();\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"SchemaElementTest\", e0);\n  }\n\n  function try_SchemaElementTest()\n  {\n    shiftT(231);                    // 'schema-element'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    try_ElementDeclaration();\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(38);                     // ')'\n  }\n\n  function parse_ElementDeclaration()\n  {\n    eventHandler.startNonterminal(\"ElementDeclaration\", e0);\n    parse_ElementName();\n    eventHandler.endNonterminal(\"ElementDeclaration\", e0);\n  }\n\n  function try_ElementDeclaration()\n  {\n    try_ElementName();\n  }\n\n  function parse_AttributeName()\n  {\n    eventHandler.startNonterminal(\"AttributeName\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"AttributeName\", e0);\n  }\n\n  function try_AttributeName()\n  {\n    try_EQName();\n  }\n\n  function parse_ElementName()\n  {\n    eventHandler.startNonterminal(\"ElementName\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"ElementName\", e0);\n  }\n\n  function try_ElementName()\n  {\n    try_EQName();\n  }\n\n  function parse_SimpleTypeName()\n  {\n    eventHandler.startNonterminal(\"SimpleTypeName\", e0);\n    parse_TypeName();\n    eventHandler.endNonterminal(\"SimpleTypeName\", e0);\n  }\n\n  function try_SimpleTypeName()\n  {\n    try_TypeName();\n  }\n\n  function parse_TypeName()\n  {\n    eventHandler.startNonterminal(\"TypeName\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"TypeName\", e0);\n  }\n\n  function try_TypeName()\n  {\n    try_EQName();\n  }\n\n  function parse_FunctionTest()\n  {\n    eventHandler.startNonterminal(\"FunctionTest\", e0);\n    for (;;)\n    {\n      lookahead1W(101);             // S^WS | '%' | '(:' | 'function'\n      if (l1 != 33)                 // '%'\n      {\n        break;\n      }\n      whitespace();\n      parse_Annotation();\n    }\n    switch (l1)\n    {\n    case 147:                       // 'function'\n      lookahead2W(22);              // S^WS | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    lk = memoized(7, e0);\n    if (lk == 0)\n    {\n      var b0A = b0; var e0A = e0; var l1A = l1;\n      var b1A = b1; var e1A = e1; var l2A = l2;\n      var b2A = b2; var e2A = e2;\n      try\n      {\n        try_AnyFunctionTest();\n        lk = -1;\n      }\n      catch (p1A)\n      {\n        lk = -2;\n      }\n      b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n      b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n      b2 = b2A; e2 = e2A; end = e2A; }}\n      memoize(7, e0, lk);\n    }\n    switch (lk)\n    {\n    case -1:\n      whitespace();\n      parse_AnyFunctionTest();\n      break;\n    default:\n      whitespace();\n      parse_TypedFunctionTest();\n    }\n    eventHandler.endNonterminal(\"FunctionTest\", e0);\n  }\n\n  function try_FunctionTest()\n  {\n    for (;;)\n    {\n      lookahead1W(101);             // S^WS | '%' | '(:' | 'function'\n      if (l1 != 33)                 // '%'\n      {\n        break;\n      }\n      try_Annotation();\n    }\n    switch (l1)\n    {\n    case 147:                       // 'function'\n      lookahead2W(22);              // S^WS | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    lk = memoized(7, e0);\n    if (lk == 0)\n    {\n      var b0A = b0; var e0A = e0; var l1A = l1;\n      var b1A = b1; var e1A = e1; var l2A = l2;\n      var b2A = b2; var e2A = e2;\n      try\n      {\n        try_AnyFunctionTest();\n        memoize(7, e0A, -1);\n        lk = -3;\n      }\n      catch (p1A)\n      {\n        lk = -2;\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(7, e0A, -2);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      try_AnyFunctionTest();\n      break;\n    case -3:\n      break;\n    default:\n      try_TypedFunctionTest();\n    }\n  }\n\n  function parse_AnyFunctionTest()\n  {\n    eventHandler.startNonterminal(\"AnyFunctionTest\", e0);\n    shift(147);                     // 'function'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(24);                // S^WS | '(:' | '*'\n    shift(39);                      // '*'\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"AnyFunctionTest\", e0);\n  }\n\n  function try_AnyFunctionTest()\n  {\n    shiftT(147);                    // 'function'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(24);                // S^WS | '(:' | '*'\n    shiftT(39);                     // '*'\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(38);                     // ')'\n  }\n\n  function parse_TypedFunctionTest()\n  {\n    eventHandler.startNonterminal(\"TypedFunctionTest\", e0);\n    shift(147);                     // 'function'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(258);               // EQName^Token | S^WS | '%' | '(' | '(:' | ')' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    if (l1 != 38)                   // ')'\n    {\n      whitespace();\n      parse_SequenceType();\n      for (;;)\n      {\n        lookahead1W(105);           // S^WS | '(:' | ')' | ','\n        if (l1 != 42)               // ','\n        {\n          break;\n        }\n        shift(42);                  // ','\n        lookahead1W(253);           // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n        whitespace();\n        parse_SequenceType();\n      }\n    }\n    shift(38);                      // ')'\n    lookahead1W(33);                // S^WS | '(:' | 'as'\n    shift(80);                      // 'as'\n    lookahead1W(253);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    whitespace();\n    parse_SequenceType();\n    eventHandler.endNonterminal(\"TypedFunctionTest\", e0);\n  }\n\n  function try_TypedFunctionTest()\n  {\n    shiftT(147);                    // 'function'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(258);               // EQName^Token | S^WS | '%' | '(' | '(:' | ')' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    if (l1 != 38)                   // ')'\n    {\n      try_SequenceType();\n      for (;;)\n      {\n        lookahead1W(105);           // S^WS | '(:' | ')' | ','\n        if (l1 != 42)               // ','\n        {\n          break;\n        }\n        shiftT(42);                 // ','\n        lookahead1W(253);           // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n        try_SequenceType();\n      }\n    }\n    shiftT(38);                     // ')'\n    lookahead1W(33);                // S^WS | '(:' | 'as'\n    shiftT(80);                     // 'as'\n    lookahead1W(253);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    try_SequenceType();\n  }\n\n  function parse_ParenthesizedItemType()\n  {\n    eventHandler.startNonterminal(\"ParenthesizedItemType\", e0);\n    shift(35);                      // '('\n    lookahead1W(253);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    whitespace();\n    parse_ItemType();\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"ParenthesizedItemType\", e0);\n  }\n\n  function try_ParenthesizedItemType()\n  {\n    shiftT(35);                     // '('\n    lookahead1W(253);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    try_ItemType();\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(38);                     // ')'\n  }\n\n  function parse_RevalidationDecl()\n  {\n    eventHandler.startNonterminal(\"RevalidationDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(75);                // S^WS | '(:' | 'revalidation'\n    shift(226);                     // 'revalidation'\n    lookahead1W(162);               // S^WS | '(:' | 'lax' | 'skip' | 'strict'\n    switch (l1)\n    {\n    case 245:                       // 'strict'\n      shift(245);                   // 'strict'\n      break;\n    case 174:                       // 'lax'\n      shift(174);                   // 'lax'\n      break;\n    default:\n      shift(238);                   // 'skip'\n    }\n    eventHandler.endNonterminal(\"RevalidationDecl\", e0);\n  }\n\n  function parse_InsertExprTargetChoice()\n  {\n    eventHandler.startNonterminal(\"InsertExprTargetChoice\", e0);\n    switch (l1)\n    {\n    case 71:                        // 'after'\n      shift(71);                    // 'after'\n      break;\n    case 85:                        // 'before'\n      shift(85);                    // 'before'\n      break;\n    default:\n      if (l1 == 80)                 // 'as'\n      {\n        shift(80);                  // 'as'\n        lookahead1W(123);           // S^WS | '(:' | 'first' | 'last'\n        switch (l1)\n        {\n        case 136:                   // 'first'\n          shift(136);               // 'first'\n          break;\n        default:\n          shift(173);               // 'last'\n        }\n      }\n      lookahead1W(57);              // S^WS | '(:' | 'into'\n      shift(165);                   // 'into'\n    }\n    eventHandler.endNonterminal(\"InsertExprTargetChoice\", e0);\n  }\n\n  function try_InsertExprTargetChoice()\n  {\n    switch (l1)\n    {\n    case 71:                        // 'after'\n      shiftT(71);                   // 'after'\n      break;\n    case 85:                        // 'before'\n      shiftT(85);                   // 'before'\n      break;\n    default:\n      if (l1 == 80)                 // 'as'\n      {\n        shiftT(80);                 // 'as'\n        lookahead1W(123);           // S^WS | '(:' | 'first' | 'last'\n        switch (l1)\n        {\n        case 136:                   // 'first'\n          shiftT(136);              // 'first'\n          break;\n        default:\n          shiftT(173);              // 'last'\n        }\n      }\n      lookahead1W(57);              // S^WS | '(:' | 'into'\n      shiftT(165);                  // 'into'\n    }\n  }\n\n  function parse_InsertExpr()\n  {\n    eventHandler.startNonterminal(\"InsertExpr\", e0);\n    shift(161);                     // 'insert'\n    lookahead1W(133);               // S^WS | '(:' | 'node' | 'nodes'\n    switch (l1)\n    {\n    case 194:                       // 'node'\n      shift(194);                   // 'node'\n      break;\n    default:\n      shift(195);                   // 'nodes'\n    }\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_SourceExpr();\n    whitespace();\n    parse_InsertExprTargetChoice();\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_TargetExpr();\n    eventHandler.endNonterminal(\"InsertExpr\", e0);\n  }\n\n  function try_InsertExpr()\n  {\n    shiftT(161);                    // 'insert'\n    lookahead1W(133);               // S^WS | '(:' | 'node' | 'nodes'\n    switch (l1)\n    {\n    case 194:                       // 'node'\n      shiftT(194);                  // 'node'\n      break;\n    default:\n      shiftT(195);                  // 'nodes'\n    }\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_SourceExpr();\n    try_InsertExprTargetChoice();\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_TargetExpr();\n  }\n\n  function parse_DeleteExpr()\n  {\n    eventHandler.startNonterminal(\"DeleteExpr\", e0);\n    shift(111);                     // 'delete'\n    lookahead1W(133);               // S^WS | '(:' | 'node' | 'nodes'\n    switch (l1)\n    {\n    case 194:                       // 'node'\n      shift(194);                   // 'node'\n      break;\n    default:\n      shift(195);                   // 'nodes'\n    }\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_TargetExpr();\n    eventHandler.endNonterminal(\"DeleteExpr\", e0);\n  }\n\n  function try_DeleteExpr()\n  {\n    shiftT(111);                    // 'delete'\n    lookahead1W(133);               // S^WS | '(:' | 'node' | 'nodes'\n    switch (l1)\n    {\n    case 194:                       // 'node'\n      shiftT(194);                  // 'node'\n      break;\n    default:\n      shiftT(195);                  // 'nodes'\n    }\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_TargetExpr();\n  }\n\n  function parse_ReplaceExpr()\n  {\n    eventHandler.startNonterminal(\"ReplaceExpr\", e0);\n    shift(223);                     // 'replace'\n    lookahead1W(134);               // S^WS | '(:' | 'node' | 'value'\n    if (l1 == 267)                  // 'value'\n    {\n      shift(267);                   // 'value'\n      lookahead1W(67);              // S^WS | '(:' | 'of'\n      shift(200);                   // 'of'\n    }\n    lookahead1W(65);                // S^WS | '(:' | 'node'\n    shift(194);                     // 'node'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_TargetExpr();\n    shift(276);                     // 'with'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"ReplaceExpr\", e0);\n  }\n\n  function try_ReplaceExpr()\n  {\n    shiftT(223);                    // 'replace'\n    lookahead1W(134);               // S^WS | '(:' | 'node' | 'value'\n    if (l1 == 267)                  // 'value'\n    {\n      shiftT(267);                  // 'value'\n      lookahead1W(67);              // S^WS | '(:' | 'of'\n      shiftT(200);                  // 'of'\n    }\n    lookahead1W(65);                // S^WS | '(:' | 'node'\n    shiftT(194);                    // 'node'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_TargetExpr();\n    shiftT(276);                    // 'with'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_ExprSingle();\n  }\n\n  function parse_RenameExpr()\n  {\n    eventHandler.startNonterminal(\"RenameExpr\", e0);\n    shift(222);                     // 'rename'\n    lookahead1W(65);                // S^WS | '(:' | 'node'\n    shift(194);                     // 'node'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_TargetExpr();\n    shift(80);                      // 'as'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_NewNameExpr();\n    eventHandler.endNonterminal(\"RenameExpr\", e0);\n  }\n\n  function try_RenameExpr()\n  {\n    shiftT(222);                    // 'rename'\n    lookahead1W(65);                // S^WS | '(:' | 'node'\n    shiftT(194);                    // 'node'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_TargetExpr();\n    shiftT(80);                     // 'as'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_NewNameExpr();\n  }\n\n  function parse_SourceExpr()\n  {\n    eventHandler.startNonterminal(\"SourceExpr\", e0);\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"SourceExpr\", e0);\n  }\n\n  function try_SourceExpr()\n  {\n    try_ExprSingle();\n  }\n\n  function parse_TargetExpr()\n  {\n    eventHandler.startNonterminal(\"TargetExpr\", e0);\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"TargetExpr\", e0);\n  }\n\n  function try_TargetExpr()\n  {\n    try_ExprSingle();\n  }\n\n  function parse_NewNameExpr()\n  {\n    eventHandler.startNonterminal(\"NewNameExpr\", e0);\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"NewNameExpr\", e0);\n  }\n\n  function try_NewNameExpr()\n  {\n    try_ExprSingle();\n  }\n\n  function parse_TransformExpr()\n  {\n    eventHandler.startNonterminal(\"TransformExpr\", e0);\n    shift(104);                     // 'copy'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    whitespace();\n    parse_TransformSpec();\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shift(42);                    // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      whitespace();\n      parse_TransformSpec();\n    }\n    shift(184);                     // 'modify'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    shift(224);                     // 'return'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"TransformExpr\", e0);\n  }\n\n  function try_TransformExpr()\n  {\n    shiftT(104);                    // 'copy'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    try_TransformSpec();\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shiftT(42);                   // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      try_TransformSpec();\n    }\n    shiftT(184);                    // 'modify'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_ExprSingle();\n    shiftT(224);                    // 'return'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_ExprSingle();\n  }\n\n  function parse_TransformSpec()\n  {\n    eventHandler.startNonterminal(\"TransformSpec\", e0);\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    whitespace();\n    parse_VarName();\n    lookahead1W(28);                // S^WS | '(:' | ':='\n    shift(53);                      // ':='\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"TransformSpec\", e0);\n  }\n\n  function try_TransformSpec()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    try_VarName();\n    lookahead1W(28);                // S^WS | '(:' | ':='\n    shiftT(53);                     // ':='\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_ExprSingle();\n  }\n\n  function parse_FTSelection()\n  {\n    eventHandler.startNonterminal(\"FTSelection\", e0);\n    parse_FTOr();\n    for (;;)\n    {\n      lookahead1W(211);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n                                    // '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' |\n                                    // 'before' | 'case' | 'collation' | 'count' | 'default' | 'descending' |\n                                    // 'different' | 'distance' | 'else' | 'empty' | 'end' | 'entire' | 'eq' | 'for' |\n                                    // 'ge' | 'group' | 'gt' | 'into' | 'is' | 'le' | 'let' | 'lt' | 'modify' | 'ne' |\n                                    // 'only' | 'or' | 'order' | 'ordered' | 'return' | 'same' | 'satisfies' |\n                                    // 'stable' | 'start' | 'where' | 'window' | 'with' | 'without' | '|}' | '}'\n      switch (l1)\n      {\n      case 82:                      // 'at'\n        lookahead2W(161);           // S^WS | '(:' | 'end' | 'position' | 'start'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 116                 // 'different'\n       && lk != 118                 // 'distance'\n       && lk != 128                 // 'entire'\n       && lk != 206                 // 'ordered'\n       && lk != 227                 // 'same'\n       && lk != 275                 // 'window'\n       && lk != 65106               // 'at' 'end'\n       && lk != 123986)             // 'at' 'start'\n      {\n        break;\n      }\n      whitespace();\n      parse_FTPosFilter();\n    }\n    eventHandler.endNonterminal(\"FTSelection\", e0);\n  }\n\n  function try_FTSelection()\n  {\n    try_FTOr();\n    for (;;)\n    {\n      lookahead1W(211);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n                                    // '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' |\n                                    // 'before' | 'case' | 'collation' | 'count' | 'default' | 'descending' |\n                                    // 'different' | 'distance' | 'else' | 'empty' | 'end' | 'entire' | 'eq' | 'for' |\n                                    // 'ge' | 'group' | 'gt' | 'into' | 'is' | 'le' | 'let' | 'lt' | 'modify' | 'ne' |\n                                    // 'only' | 'or' | 'order' | 'ordered' | 'return' | 'same' | 'satisfies' |\n                                    // 'stable' | 'start' | 'where' | 'window' | 'with' | 'without' | '|}' | '}'\n      switch (l1)\n      {\n      case 82:                      // 'at'\n        lookahead2W(161);           // S^WS | '(:' | 'end' | 'position' | 'start'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 116                 // 'different'\n       && lk != 118                 // 'distance'\n       && lk != 128                 // 'entire'\n       && lk != 206                 // 'ordered'\n       && lk != 227                 // 'same'\n       && lk != 275                 // 'window'\n       && lk != 65106               // 'at' 'end'\n       && lk != 123986)             // 'at' 'start'\n      {\n        break;\n      }\n      try_FTPosFilter();\n    }\n  }\n\n  function parse_FTWeight()\n  {\n    eventHandler.startNonterminal(\"FTWeight\", e0);\n    shift(270);                     // 'weight'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shift(281);                     // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_Expr();\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"FTWeight\", e0);\n  }\n\n  function try_FTWeight()\n  {\n    shiftT(270);                    // 'weight'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shiftT(281);                    // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_Expr();\n    shiftT(287);                    // '}'\n  }\n\n  function parse_FTOr()\n  {\n    eventHandler.startNonterminal(\"FTOr\", e0);\n    parse_FTAnd();\n    for (;;)\n    {\n      if (l1 != 146)                // 'ftor'\n      {\n        break;\n      }\n      shift(146);                   // 'ftor'\n      lookahead1W(177);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      whitespace();\n      parse_FTAnd();\n    }\n    eventHandler.endNonterminal(\"FTOr\", e0);\n  }\n\n  function try_FTOr()\n  {\n    try_FTAnd();\n    for (;;)\n    {\n      if (l1 != 146)                // 'ftor'\n      {\n        break;\n      }\n      shiftT(146);                  // 'ftor'\n      lookahead1W(177);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      try_FTAnd();\n    }\n  }\n\n  function parse_FTAnd()\n  {\n    eventHandler.startNonterminal(\"FTAnd\", e0);\n    parse_FTMildNot();\n    for (;;)\n    {\n      if (l1 != 144)                // 'ftand'\n      {\n        break;\n      }\n      shift(144);                   // 'ftand'\n      lookahead1W(177);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      whitespace();\n      parse_FTMildNot();\n    }\n    eventHandler.endNonterminal(\"FTAnd\", e0);\n  }\n\n  function try_FTAnd()\n  {\n    try_FTMildNot();\n    for (;;)\n    {\n      if (l1 != 144)                // 'ftand'\n      {\n        break;\n      }\n      shiftT(144);                  // 'ftand'\n      lookahead1W(177);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      try_FTMildNot();\n    }\n  }\n\n  function parse_FTMildNot()\n  {\n    eventHandler.startNonterminal(\"FTMildNot\", e0);\n    parse_FTUnaryNot();\n    for (;;)\n    {\n      lookahead1W(212);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n                                    // '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' |\n                                    // 'before' | 'case' | 'collation' | 'count' | 'default' | 'descending' |\n                                    // 'different' | 'distance' | 'else' | 'empty' | 'end' | 'entire' | 'eq' | 'for' |\n                                    // 'ftand' | 'ftor' | 'ge' | 'group' | 'gt' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'modify' | 'ne' | 'not' | 'only' | 'or' | 'order' | 'ordered' | 'return' |\n                                    // 'same' | 'satisfies' | 'stable' | 'start' | 'where' | 'window' | 'with' |\n                                    // 'without' | '|}' | '}'\n      if (l1 != 196)                // 'not'\n      {\n        break;\n      }\n      shift(196);                   // 'not'\n      lookahead1W(56);              // S^WS | '(:' | 'in'\n      shift(156);                   // 'in'\n      lookahead1W(177);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      whitespace();\n      parse_FTUnaryNot();\n    }\n    eventHandler.endNonterminal(\"FTMildNot\", e0);\n  }\n\n  function try_FTMildNot()\n  {\n    try_FTUnaryNot();\n    for (;;)\n    {\n      lookahead1W(212);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n                                    // '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' |\n                                    // 'before' | 'case' | 'collation' | 'count' | 'default' | 'descending' |\n                                    // 'different' | 'distance' | 'else' | 'empty' | 'end' | 'entire' | 'eq' | 'for' |\n                                    // 'ftand' | 'ftor' | 'ge' | 'group' | 'gt' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'modify' | 'ne' | 'not' | 'only' | 'or' | 'order' | 'ordered' | 'return' |\n                                    // 'same' | 'satisfies' | 'stable' | 'start' | 'where' | 'window' | 'with' |\n                                    // 'without' | '|}' | '}'\n      if (l1 != 196)                // 'not'\n      {\n        break;\n      }\n      shiftT(196);                  // 'not'\n      lookahead1W(56);              // S^WS | '(:' | 'in'\n      shiftT(156);                  // 'in'\n      lookahead1W(177);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      try_FTUnaryNot();\n    }\n  }\n\n  function parse_FTUnaryNot()\n  {\n    eventHandler.startNonterminal(\"FTUnaryNot\", e0);\n    if (l1 == 145)                  // 'ftnot'\n    {\n      shift(145);                   // 'ftnot'\n    }\n    lookahead1W(164);               // StringLiteral | S^WS | '(' | '(#' | '(:' | '{'\n    whitespace();\n    parse_FTPrimaryWithOptions();\n    eventHandler.endNonterminal(\"FTUnaryNot\", e0);\n  }\n\n  function try_FTUnaryNot()\n  {\n    if (l1 == 145)                  // 'ftnot'\n    {\n      shiftT(145);                  // 'ftnot'\n    }\n    lookahead1W(164);               // StringLiteral | S^WS | '(' | '(#' | '(:' | '{'\n    try_FTPrimaryWithOptions();\n  }\n\n  function parse_FTPrimaryWithOptions()\n  {\n    eventHandler.startNonterminal(\"FTPrimaryWithOptions\", e0);\n    parse_FTPrimary();\n    lookahead1W(213);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n                                    // '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' |\n                                    // 'before' | 'case' | 'collation' | 'count' | 'default' | 'descending' |\n                                    // 'different' | 'distance' | 'else' | 'empty' | 'end' | 'entire' | 'eq' | 'for' |\n                                    // 'ftand' | 'ftor' | 'ge' | 'group' | 'gt' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'modify' | 'ne' | 'not' | 'only' | 'or' | 'order' | 'ordered' | 'return' |\n                                    // 'same' | 'satisfies' | 'stable' | 'start' | 'using' | 'weight' | 'where' |\n                                    // 'window' | 'with' | 'without' | '|}' | '}'\n    if (l1 == 265)                  // 'using'\n    {\n      whitespace();\n      parse_FTMatchOptions();\n    }\n    if (l1 == 270)                  // 'weight'\n    {\n      whitespace();\n      parse_FTWeight();\n    }\n    eventHandler.endNonterminal(\"FTPrimaryWithOptions\", e0);\n  }\n\n  function try_FTPrimaryWithOptions()\n  {\n    try_FTPrimary();\n    lookahead1W(213);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n                                    // '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' |\n                                    // 'before' | 'case' | 'collation' | 'count' | 'default' | 'descending' |\n                                    // 'different' | 'distance' | 'else' | 'empty' | 'end' | 'entire' | 'eq' | 'for' |\n                                    // 'ftand' | 'ftor' | 'ge' | 'group' | 'gt' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'modify' | 'ne' | 'not' | 'only' | 'or' | 'order' | 'ordered' | 'return' |\n                                    // 'same' | 'satisfies' | 'stable' | 'start' | 'using' | 'weight' | 'where' |\n                                    // 'window' | 'with' | 'without' | '|}' | '}'\n    if (l1 == 265)                  // 'using'\n    {\n      try_FTMatchOptions();\n    }\n    if (l1 == 270)                  // 'weight'\n    {\n      try_FTWeight();\n    }\n  }\n\n  function parse_FTPrimary()\n  {\n    eventHandler.startNonterminal(\"FTPrimary\", e0);\n    switch (l1)\n    {\n    case 35:                        // '('\n      shift(35);                    // '('\n      lookahead1W(177);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      whitespace();\n      parse_FTSelection();\n      shift(38);                    // ')'\n      break;\n    case 36:                        // '(#'\n      parse_FTExtensionSelection();\n      break;\n    default:\n      parse_FTWords();\n      lookahead1W(214);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n                                    // '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' |\n                                    // 'before' | 'case' | 'collation' | 'count' | 'default' | 'descending' |\n                                    // 'different' | 'distance' | 'else' | 'empty' | 'end' | 'entire' | 'eq' | 'for' |\n                                    // 'ftand' | 'ftor' | 'ge' | 'group' | 'gt' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'modify' | 'ne' | 'not' | 'occurs' | 'only' | 'or' | 'order' | 'ordered' |\n                                    // 'return' | 'same' | 'satisfies' | 'stable' | 'start' | 'using' | 'weight' |\n                                    // 'where' | 'window' | 'with' | 'without' | '|}' | '}'\n      if (l1 == 199)                // 'occurs'\n      {\n        whitespace();\n        parse_FTTimes();\n      }\n    }\n    eventHandler.endNonterminal(\"FTPrimary\", e0);\n  }\n\n  function try_FTPrimary()\n  {\n    switch (l1)\n    {\n    case 35:                        // '('\n      shiftT(35);                   // '('\n      lookahead1W(177);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      try_FTSelection();\n      shiftT(38);                   // ')'\n      break;\n    case 36:                        // '(#'\n      try_FTExtensionSelection();\n      break;\n    default:\n      try_FTWords();\n      lookahead1W(214);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n                                    // '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' |\n                                    // 'before' | 'case' | 'collation' | 'count' | 'default' | 'descending' |\n                                    // 'different' | 'distance' | 'else' | 'empty' | 'end' | 'entire' | 'eq' | 'for' |\n                                    // 'ftand' | 'ftor' | 'ge' | 'group' | 'gt' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'modify' | 'ne' | 'not' | 'occurs' | 'only' | 'or' | 'order' | 'ordered' |\n                                    // 'return' | 'same' | 'satisfies' | 'stable' | 'start' | 'using' | 'weight' |\n                                    // 'where' | 'window' | 'with' | 'without' | '|}' | '}'\n      if (l1 == 199)                // 'occurs'\n      {\n        try_FTTimes();\n      }\n    }\n  }\n\n  function parse_FTWords()\n  {\n    eventHandler.startNonterminal(\"FTWords\", e0);\n    parse_FTWordsValue();\n    lookahead1W(220);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n                                    // '>' | '>=' | '>>' | ']' | 'after' | 'all' | 'and' | 'any' | 'as' | 'ascending' |\n                                    // 'at' | 'before' | 'case' | 'collation' | 'count' | 'default' | 'descending' |\n                                    // 'different' | 'distance' | 'else' | 'empty' | 'end' | 'entire' | 'eq' | 'for' |\n                                    // 'ftand' | 'ftor' | 'ge' | 'group' | 'gt' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'modify' | 'ne' | 'not' | 'occurs' | 'only' | 'or' | 'order' | 'ordered' |\n                                    // 'phrase' | 'return' | 'same' | 'satisfies' | 'stable' | 'start' | 'using' |\n                                    // 'weight' | 'where' | 'window' | 'with' | 'without' | '|}' | '}'\n    if (l1 == 72                    // 'all'\n     || l1 == 77                    // 'any'\n     || l1 == 214)                  // 'phrase'\n    {\n      whitespace();\n      parse_FTAnyallOption();\n    }\n    eventHandler.endNonterminal(\"FTWords\", e0);\n  }\n\n  function try_FTWords()\n  {\n    try_FTWordsValue();\n    lookahead1W(220);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n                                    // '>' | '>=' | '>>' | ']' | 'after' | 'all' | 'and' | 'any' | 'as' | 'ascending' |\n                                    // 'at' | 'before' | 'case' | 'collation' | 'count' | 'default' | 'descending' |\n                                    // 'different' | 'distance' | 'else' | 'empty' | 'end' | 'entire' | 'eq' | 'for' |\n                                    // 'ftand' | 'ftor' | 'ge' | 'group' | 'gt' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'modify' | 'ne' | 'not' | 'occurs' | 'only' | 'or' | 'order' | 'ordered' |\n                                    // 'phrase' | 'return' | 'same' | 'satisfies' | 'stable' | 'start' | 'using' |\n                                    // 'weight' | 'where' | 'window' | 'with' | 'without' | '|}' | '}'\n    if (l1 == 72                    // 'all'\n     || l1 == 77                    // 'any'\n     || l1 == 214)                  // 'phrase'\n    {\n      try_FTAnyallOption();\n    }\n  }\n\n  function parse_FTWordsValue()\n  {\n    eventHandler.startNonterminal(\"FTWordsValue\", e0);\n    switch (l1)\n    {\n    case 11:                        // StringLiteral\n      shift(11);                    // StringLiteral\n      break;\n    default:\n      shift(281);                   // '{'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      whitespace();\n      parse_Expr();\n      shift(287);                   // '}'\n    }\n    eventHandler.endNonterminal(\"FTWordsValue\", e0);\n  }\n\n  function try_FTWordsValue()\n  {\n    switch (l1)\n    {\n    case 11:                        // StringLiteral\n      shiftT(11);                   // StringLiteral\n      break;\n    default:\n      shiftT(281);                  // '{'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      try_Expr();\n      shiftT(287);                  // '}'\n    }\n  }\n\n  function parse_FTExtensionSelection()\n  {\n    eventHandler.startNonterminal(\"FTExtensionSelection\", e0);\n    for (;;)\n    {\n      whitespace();\n      parse_Pragma();\n      lookahead1W(104);             // S^WS | '(#' | '(:' | '{'\n      if (l1 != 36)                 // '(#'\n      {\n        break;\n      }\n    }\n    shift(281);                     // '{'\n    lookahead1W(184);               // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{' | '}'\n    if (l1 != 287)                  // '}'\n    {\n      whitespace();\n      parse_FTSelection();\n    }\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"FTExtensionSelection\", e0);\n  }\n\n  function try_FTExtensionSelection()\n  {\n    for (;;)\n    {\n      try_Pragma();\n      lookahead1W(104);             // S^WS | '(#' | '(:' | '{'\n      if (l1 != 36)                 // '(#'\n      {\n        break;\n      }\n    }\n    shiftT(281);                    // '{'\n    lookahead1W(184);               // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{' | '}'\n    if (l1 != 287)                  // '}'\n    {\n      try_FTSelection();\n    }\n    shiftT(287);                    // '}'\n  }\n\n  function parse_FTAnyallOption()\n  {\n    eventHandler.startNonterminal(\"FTAnyallOption\", e0);\n    switch (l1)\n    {\n    case 77:                        // 'any'\n      shift(77);                    // 'any'\n      lookahead1W(217);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n                                    // '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' |\n                                    // 'before' | 'case' | 'collation' | 'count' | 'default' | 'descending' |\n                                    // 'different' | 'distance' | 'else' | 'empty' | 'end' | 'entire' | 'eq' | 'for' |\n                                    // 'ftand' | 'ftor' | 'ge' | 'group' | 'gt' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'modify' | 'ne' | 'not' | 'occurs' | 'only' | 'or' | 'order' | 'ordered' |\n                                    // 'return' | 'same' | 'satisfies' | 'stable' | 'start' | 'using' | 'weight' |\n                                    // 'where' | 'window' | 'with' | 'without' | 'word' | '|}' | '}'\n      if (l1 == 278)                // 'word'\n      {\n        shift(278);                 // 'word'\n      }\n      break;\n    case 72:                        // 'all'\n      shift(72);                    // 'all'\n      lookahead1W(218);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n                                    // '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' |\n                                    // 'before' | 'case' | 'collation' | 'count' | 'default' | 'descending' |\n                                    // 'different' | 'distance' | 'else' | 'empty' | 'end' | 'entire' | 'eq' | 'for' |\n                                    // 'ftand' | 'ftor' | 'ge' | 'group' | 'gt' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'modify' | 'ne' | 'not' | 'occurs' | 'only' | 'or' | 'order' | 'ordered' |\n                                    // 'return' | 'same' | 'satisfies' | 'stable' | 'start' | 'using' | 'weight' |\n                                    // 'where' | 'window' | 'with' | 'without' | 'words' | '|}' | '}'\n      if (l1 == 279)                // 'words'\n      {\n        shift(279);                 // 'words'\n      }\n      break;\n    default:\n      shift(214);                   // 'phrase'\n    }\n    eventHandler.endNonterminal(\"FTAnyallOption\", e0);\n  }\n\n  function try_FTAnyallOption()\n  {\n    switch (l1)\n    {\n    case 77:                        // 'any'\n      shiftT(77);                   // 'any'\n      lookahead1W(217);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n                                    // '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' |\n                                    // 'before' | 'case' | 'collation' | 'count' | 'default' | 'descending' |\n                                    // 'different' | 'distance' | 'else' | 'empty' | 'end' | 'entire' | 'eq' | 'for' |\n                                    // 'ftand' | 'ftor' | 'ge' | 'group' | 'gt' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'modify' | 'ne' | 'not' | 'occurs' | 'only' | 'or' | 'order' | 'ordered' |\n                                    // 'return' | 'same' | 'satisfies' | 'stable' | 'start' | 'using' | 'weight' |\n                                    // 'where' | 'window' | 'with' | 'without' | 'word' | '|}' | '}'\n      if (l1 == 278)                // 'word'\n      {\n        shiftT(278);                // 'word'\n      }\n      break;\n    case 72:                        // 'all'\n      shiftT(72);                   // 'all'\n      lookahead1W(218);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n                                    // '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' |\n                                    // 'before' | 'case' | 'collation' | 'count' | 'default' | 'descending' |\n                                    // 'different' | 'distance' | 'else' | 'empty' | 'end' | 'entire' | 'eq' | 'for' |\n                                    // 'ftand' | 'ftor' | 'ge' | 'group' | 'gt' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'modify' | 'ne' | 'not' | 'occurs' | 'only' | 'or' | 'order' | 'ordered' |\n                                    // 'return' | 'same' | 'satisfies' | 'stable' | 'start' | 'using' | 'weight' |\n                                    // 'where' | 'window' | 'with' | 'without' | 'words' | '|}' | '}'\n      if (l1 == 279)                // 'words'\n      {\n        shiftT(279);                // 'words'\n      }\n      break;\n    default:\n      shiftT(214);                  // 'phrase'\n    }\n  }\n\n  function parse_FTTimes()\n  {\n    eventHandler.startNonterminal(\"FTTimes\", e0);\n    shift(199);                     // 'occurs'\n    lookahead1W(159);               // S^WS | '(:' | 'at' | 'exactly' | 'from'\n    whitespace();\n    parse_FTRange();\n    shift(252);                     // 'times'\n    eventHandler.endNonterminal(\"FTTimes\", e0);\n  }\n\n  function try_FTTimes()\n  {\n    shiftT(199);                    // 'occurs'\n    lookahead1W(159);               // S^WS | '(:' | 'at' | 'exactly' | 'from'\n    try_FTRange();\n    shiftT(252);                    // 'times'\n  }\n\n  function parse_FTRange()\n  {\n    eventHandler.startNonterminal(\"FTRange\", e0);\n    switch (l1)\n    {\n    case 131:                       // 'exactly'\n      shift(131);                   // 'exactly'\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'structured-item' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' |\n                                    // 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' | 'value' |\n                                    // 'variable' | 'version' | 'where' | 'while' | 'with' | '{' | '{|'\n      whitespace();\n      parse_AdditiveExpr();\n      break;\n    case 82:                        // 'at'\n      shift(82);                    // 'at'\n      lookahead1W(129);             // S^WS | '(:' | 'least' | 'most'\n      switch (l1)\n      {\n      case 176:                     // 'least'\n        shift(176);                 // 'least'\n        lookahead1W(265);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'structured-item' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' |\n                                    // 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' | 'value' |\n                                    // 'variable' | 'version' | 'where' | 'while' | 'with' | '{' | '{|'\n        whitespace();\n        parse_AdditiveExpr();\n        break;\n      default:\n        shift(186);                 // 'most'\n        lookahead1W(265);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'structured-item' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' |\n                                    // 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' | 'value' |\n                                    // 'variable' | 'version' | 'where' | 'while' | 'with' | '{' | '{|'\n        whitespace();\n        parse_AdditiveExpr();\n      }\n      break;\n    default:\n      shift(142);                   // 'from'\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'structured-item' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' |\n                                    // 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' | 'value' |\n                                    // 'variable' | 'version' | 'where' | 'while' | 'with' | '{' | '{|'\n      whitespace();\n      parse_AdditiveExpr();\n      shift(253);                   // 'to'\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'structured-item' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' |\n                                    // 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' | 'value' |\n                                    // 'variable' | 'version' | 'where' | 'while' | 'with' | '{' | '{|'\n      whitespace();\n      parse_AdditiveExpr();\n    }\n    eventHandler.endNonterminal(\"FTRange\", e0);\n  }\n\n  function try_FTRange()\n  {\n    switch (l1)\n    {\n    case 131:                       // 'exactly'\n      shiftT(131);                  // 'exactly'\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'structured-item' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' |\n                                    // 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' | 'value' |\n                                    // 'variable' | 'version' | 'where' | 'while' | 'with' | '{' | '{|'\n      try_AdditiveExpr();\n      break;\n    case 82:                        // 'at'\n      shiftT(82);                   // 'at'\n      lookahead1W(129);             // S^WS | '(:' | 'least' | 'most'\n      switch (l1)\n      {\n      case 176:                     // 'least'\n        shiftT(176);                // 'least'\n        lookahead1W(265);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'structured-item' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' |\n                                    // 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' | 'value' |\n                                    // 'variable' | 'version' | 'where' | 'while' | 'with' | '{' | '{|'\n        try_AdditiveExpr();\n        break;\n      default:\n        shiftT(186);                // 'most'\n        lookahead1W(265);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'structured-item' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' |\n                                    // 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' | 'value' |\n                                    // 'variable' | 'version' | 'where' | 'while' | 'with' | '{' | '{|'\n        try_AdditiveExpr();\n      }\n      break;\n    default:\n      shiftT(142);                  // 'from'\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'structured-item' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' |\n                                    // 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' | 'value' |\n                                    // 'variable' | 'version' | 'where' | 'while' | 'with' | '{' | '{|'\n      try_AdditiveExpr();\n      shiftT(253);                  // 'to'\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'structured-item' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' |\n                                    // 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' | 'value' |\n                                    // 'variable' | 'version' | 'where' | 'while' | 'with' | '{' | '{|'\n      try_AdditiveExpr();\n    }\n  }\n\n  function parse_FTPosFilter()\n  {\n    eventHandler.startNonterminal(\"FTPosFilter\", e0);\n    switch (l1)\n    {\n    case 206:                       // 'ordered'\n      parse_FTOrder();\n      break;\n    case 275:                       // 'window'\n      parse_FTWindow();\n      break;\n    case 118:                       // 'distance'\n      parse_FTDistance();\n      break;\n    case 116:                       // 'different'\n    case 227:                       // 'same'\n      parse_FTScope();\n      break;\n    default:\n      parse_FTContent();\n    }\n    eventHandler.endNonterminal(\"FTPosFilter\", e0);\n  }\n\n  function try_FTPosFilter()\n  {\n    switch (l1)\n    {\n    case 206:                       // 'ordered'\n      try_FTOrder();\n      break;\n    case 275:                       // 'window'\n      try_FTWindow();\n      break;\n    case 118:                       // 'distance'\n      try_FTDistance();\n      break;\n    case 116:                       // 'different'\n    case 227:                       // 'same'\n      try_FTScope();\n      break;\n    default:\n      try_FTContent();\n    }\n  }\n\n  function parse_FTOrder()\n  {\n    eventHandler.startNonterminal(\"FTOrder\", e0);\n    shift(206);                     // 'ordered'\n    eventHandler.endNonterminal(\"FTOrder\", e0);\n  }\n\n  function try_FTOrder()\n  {\n    shiftT(206);                    // 'ordered'\n  }\n\n  function parse_FTWindow()\n  {\n    eventHandler.startNonterminal(\"FTWindow\", e0);\n    shift(275);                     // 'window'\n    lookahead1W(265);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'structured-item' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' |\n                                    // 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' | 'value' |\n                                    // 'variable' | 'version' | 'where' | 'while' | 'with' | '{' | '{|'\n    whitespace();\n    parse_AdditiveExpr();\n    whitespace();\n    parse_FTUnit();\n    eventHandler.endNonterminal(\"FTWindow\", e0);\n  }\n\n  function try_FTWindow()\n  {\n    shiftT(275);                    // 'window'\n    lookahead1W(265);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'structured-item' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' |\n                                    // 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' | 'value' |\n                                    // 'variable' | 'version' | 'where' | 'while' | 'with' | '{' | '{|'\n    try_AdditiveExpr();\n    try_FTUnit();\n  }\n\n  function parse_FTDistance()\n  {\n    eventHandler.startNonterminal(\"FTDistance\", e0);\n    shift(118);                     // 'distance'\n    lookahead1W(159);               // S^WS | '(:' | 'at' | 'exactly' | 'from'\n    whitespace();\n    parse_FTRange();\n    whitespace();\n    parse_FTUnit();\n    eventHandler.endNonterminal(\"FTDistance\", e0);\n  }\n\n  function try_FTDistance()\n  {\n    shiftT(118);                    // 'distance'\n    lookahead1W(159);               // S^WS | '(:' | 'at' | 'exactly' | 'from'\n    try_FTRange();\n    try_FTUnit();\n  }\n\n  function parse_FTUnit()\n  {\n    eventHandler.startNonterminal(\"FTUnit\", e0);\n    switch (l1)\n    {\n    case 279:                       // 'words'\n      shift(279);                   // 'words'\n      break;\n    case 237:                       // 'sentences'\n      shift(237);                   // 'sentences'\n      break;\n    default:\n      shift(209);                   // 'paragraphs'\n    }\n    eventHandler.endNonterminal(\"FTUnit\", e0);\n  }\n\n  function try_FTUnit()\n  {\n    switch (l1)\n    {\n    case 279:                       // 'words'\n      shiftT(279);                  // 'words'\n      break;\n    case 237:                       // 'sentences'\n      shiftT(237);                  // 'sentences'\n      break;\n    default:\n      shiftT(209);                  // 'paragraphs'\n    }\n  }\n\n  function parse_FTScope()\n  {\n    eventHandler.startNonterminal(\"FTScope\", e0);\n    switch (l1)\n    {\n    case 227:                       // 'same'\n      shift(227);                   // 'same'\n      break;\n    default:\n      shift(116);                   // 'different'\n    }\n    lookahead1W(136);               // S^WS | '(:' | 'paragraph' | 'sentence'\n    whitespace();\n    parse_FTBigUnit();\n    eventHandler.endNonterminal(\"FTScope\", e0);\n  }\n\n  function try_FTScope()\n  {\n    switch (l1)\n    {\n    case 227:                       // 'same'\n      shiftT(227);                  // 'same'\n      break;\n    default:\n      shiftT(116);                  // 'different'\n    }\n    lookahead1W(136);               // S^WS | '(:' | 'paragraph' | 'sentence'\n    try_FTBigUnit();\n  }\n\n  function parse_FTBigUnit()\n  {\n    eventHandler.startNonterminal(\"FTBigUnit\", e0);\n    switch (l1)\n    {\n    case 236:                       // 'sentence'\n      shift(236);                   // 'sentence'\n      break;\n    default:\n      shift(208);                   // 'paragraph'\n    }\n    eventHandler.endNonterminal(\"FTBigUnit\", e0);\n  }\n\n  function try_FTBigUnit()\n  {\n    switch (l1)\n    {\n    case 236:                       // 'sentence'\n      shiftT(236);                  // 'sentence'\n      break;\n    default:\n      shiftT(208);                  // 'paragraph'\n    }\n  }\n\n  function parse_FTContent()\n  {\n    eventHandler.startNonterminal(\"FTContent\", e0);\n    switch (l1)\n    {\n    case 82:                        // 'at'\n      shift(82);                    // 'at'\n      lookahead1W(121);             // S^WS | '(:' | 'end' | 'start'\n      switch (l1)\n      {\n      case 242:                     // 'start'\n        shift(242);                 // 'start'\n        break;\n      default:\n        shift(127);                 // 'end'\n      }\n      break;\n    default:\n      shift(128);                   // 'entire'\n      lookahead1W(45);              // S^WS | '(:' | 'content'\n      shift(101);                   // 'content'\n    }\n    eventHandler.endNonterminal(\"FTContent\", e0);\n  }\n\n  function try_FTContent()\n  {\n    switch (l1)\n    {\n    case 82:                        // 'at'\n      shiftT(82);                   // 'at'\n      lookahead1W(121);             // S^WS | '(:' | 'end' | 'start'\n      switch (l1)\n      {\n      case 242:                     // 'start'\n        shiftT(242);                // 'start'\n        break;\n      default:\n        shiftT(127);                // 'end'\n      }\n      break;\n    default:\n      shiftT(128);                  // 'entire'\n      lookahead1W(45);              // S^WS | '(:' | 'content'\n      shiftT(101);                  // 'content'\n    }\n  }\n\n  function parse_FTMatchOptions()\n  {\n    eventHandler.startNonterminal(\"FTMatchOptions\", e0);\n    for (;;)\n    {\n      shift(265);                   // 'using'\n      lookahead1W(204);             // S^WS | '(:' | 'case' | 'diacritics' | 'language' | 'lowercase' | 'no' |\n                                    // 'option' | 'stemming' | 'stop' | 'thesaurus' | 'uppercase' | 'wildcards'\n      whitespace();\n      parse_FTMatchOption();\n      lookahead1W(213);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n                                    // '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' |\n                                    // 'before' | 'case' | 'collation' | 'count' | 'default' | 'descending' |\n                                    // 'different' | 'distance' | 'else' | 'empty' | 'end' | 'entire' | 'eq' | 'for' |\n                                    // 'ftand' | 'ftor' | 'ge' | 'group' | 'gt' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'modify' | 'ne' | 'not' | 'only' | 'or' | 'order' | 'ordered' | 'return' |\n                                    // 'same' | 'satisfies' | 'stable' | 'start' | 'using' | 'weight' | 'where' |\n                                    // 'window' | 'with' | 'without' | '|}' | '}'\n      if (l1 != 265)                // 'using'\n      {\n        break;\n      }\n    }\n    eventHandler.endNonterminal(\"FTMatchOptions\", e0);\n  }\n\n  function try_FTMatchOptions()\n  {\n    for (;;)\n    {\n      shiftT(265);                  // 'using'\n      lookahead1W(204);             // S^WS | '(:' | 'case' | 'diacritics' | 'language' | 'lowercase' | 'no' |\n                                    // 'option' | 'stemming' | 'stop' | 'thesaurus' | 'uppercase' | 'wildcards'\n      try_FTMatchOption();\n      lookahead1W(213);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n                                    // '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' |\n                                    // 'before' | 'case' | 'collation' | 'count' | 'default' | 'descending' |\n                                    // 'different' | 'distance' | 'else' | 'empty' | 'end' | 'entire' | 'eq' | 'for' |\n                                    // 'ftand' | 'ftor' | 'ge' | 'group' | 'gt' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'modify' | 'ne' | 'not' | 'only' | 'or' | 'order' | 'ordered' | 'return' |\n                                    // 'same' | 'satisfies' | 'stable' | 'start' | 'using' | 'weight' | 'where' |\n                                    // 'window' | 'with' | 'without' | '|}' | '}'\n      if (l1 != 265)                // 'using'\n      {\n        break;\n      }\n    }\n  }\n\n  function parse_FTMatchOption()\n  {\n    eventHandler.startNonterminal(\"FTMatchOption\", e0);\n    switch (l1)\n    {\n    case 191:                       // 'no'\n      lookahead2W(176);             // S^WS | '(:' | 'stemming' | 'stop' | 'thesaurus' | 'wildcards'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 172:                       // 'language'\n      parse_FTLanguageOption();\n      break;\n    case 274:                       // 'wildcards'\n    case 140479:                    // 'no' 'wildcards'\n      parse_FTWildCardOption();\n      break;\n    case 251:                       // 'thesaurus'\n    case 128703:                    // 'no' 'thesaurus'\n      parse_FTThesaurusOption();\n      break;\n    case 243:                       // 'stemming'\n    case 124607:                    // 'no' 'stemming'\n      parse_FTStemOption();\n      break;\n    case 115:                       // 'diacritics'\n      parse_FTDiacriticsOption();\n      break;\n    case 244:                       // 'stop'\n    case 125119:                    // 'no' 'stop'\n      parse_FTStopWordOption();\n      break;\n    case 203:                       // 'option'\n      parse_FTExtensionOption();\n      break;\n    default:\n      parse_FTCaseOption();\n    }\n    eventHandler.endNonterminal(\"FTMatchOption\", e0);\n  }\n\n  function try_FTMatchOption()\n  {\n    switch (l1)\n    {\n    case 191:                       // 'no'\n      lookahead2W(176);             // S^WS | '(:' | 'stemming' | 'stop' | 'thesaurus' | 'wildcards'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 172:                       // 'language'\n      try_FTLanguageOption();\n      break;\n    case 274:                       // 'wildcards'\n    case 140479:                    // 'no' 'wildcards'\n      try_FTWildCardOption();\n      break;\n    case 251:                       // 'thesaurus'\n    case 128703:                    // 'no' 'thesaurus'\n      try_FTThesaurusOption();\n      break;\n    case 243:                       // 'stemming'\n    case 124607:                    // 'no' 'stemming'\n      try_FTStemOption();\n      break;\n    case 115:                       // 'diacritics'\n      try_FTDiacriticsOption();\n      break;\n    case 244:                       // 'stop'\n    case 125119:                    // 'no' 'stop'\n      try_FTStopWordOption();\n      break;\n    case 203:                       // 'option'\n      try_FTExtensionOption();\n      break;\n    default:\n      try_FTCaseOption();\n    }\n  }\n\n  function parse_FTCaseOption()\n  {\n    eventHandler.startNonterminal(\"FTCaseOption\", e0);\n    switch (l1)\n    {\n    case 89:                        // 'case'\n      shift(89);                    // 'case'\n      lookahead1W(128);             // S^WS | '(:' | 'insensitive' | 'sensitive'\n      switch (l1)\n      {\n      case 160:                     // 'insensitive'\n        shift(160);                 // 'insensitive'\n        break;\n      default:\n        shift(235);                 // 'sensitive'\n      }\n      break;\n    case 180:                       // 'lowercase'\n      shift(180);                   // 'lowercase'\n      break;\n    default:\n      shift(264);                   // 'uppercase'\n    }\n    eventHandler.endNonterminal(\"FTCaseOption\", e0);\n  }\n\n  function try_FTCaseOption()\n  {\n    switch (l1)\n    {\n    case 89:                        // 'case'\n      shiftT(89);                   // 'case'\n      lookahead1W(128);             // S^WS | '(:' | 'insensitive' | 'sensitive'\n      switch (l1)\n      {\n      case 160:                     // 'insensitive'\n        shiftT(160);                // 'insensitive'\n        break;\n      default:\n        shiftT(235);                // 'sensitive'\n      }\n      break;\n    case 180:                       // 'lowercase'\n      shiftT(180);                  // 'lowercase'\n      break;\n    default:\n      shiftT(264);                  // 'uppercase'\n    }\n  }\n\n  function parse_FTDiacriticsOption()\n  {\n    eventHandler.startNonterminal(\"FTDiacriticsOption\", e0);\n    shift(115);                     // 'diacritics'\n    lookahead1W(128);               // S^WS | '(:' | 'insensitive' | 'sensitive'\n    switch (l1)\n    {\n    case 160:                       // 'insensitive'\n      shift(160);                   // 'insensitive'\n      break;\n    default:\n      shift(235);                   // 'sensitive'\n    }\n    eventHandler.endNonterminal(\"FTDiacriticsOption\", e0);\n  }\n\n  function try_FTDiacriticsOption()\n  {\n    shiftT(115);                    // 'diacritics'\n    lookahead1W(128);               // S^WS | '(:' | 'insensitive' | 'sensitive'\n    switch (l1)\n    {\n    case 160:                       // 'insensitive'\n      shiftT(160);                  // 'insensitive'\n      break;\n    default:\n      shiftT(235);                  // 'sensitive'\n    }\n  }\n\n  function parse_FTStemOption()\n  {\n    eventHandler.startNonterminal(\"FTStemOption\", e0);\n    switch (l1)\n    {\n    case 243:                       // 'stemming'\n      shift(243);                   // 'stemming'\n      break;\n    default:\n      shift(191);                   // 'no'\n      lookahead1W(77);              // S^WS | '(:' | 'stemming'\n      shift(243);                   // 'stemming'\n    }\n    eventHandler.endNonterminal(\"FTStemOption\", e0);\n  }\n\n  function try_FTStemOption()\n  {\n    switch (l1)\n    {\n    case 243:                       // 'stemming'\n      shiftT(243);                  // 'stemming'\n      break;\n    default:\n      shiftT(191);                  // 'no'\n      lookahead1W(77);              // S^WS | '(:' | 'stemming'\n      shiftT(243);                  // 'stemming'\n    }\n  }\n\n  function parse_FTThesaurusOption()\n  {\n    eventHandler.startNonterminal(\"FTThesaurusOption\", e0);\n    switch (l1)\n    {\n    case 251:                       // 'thesaurus'\n      shift(251);                   // 'thesaurus'\n      lookahead1W(152);             // S^WS | '(' | '(:' | 'at' | 'default'\n      switch (l1)\n      {\n      case 82:                      // 'at'\n        whitespace();\n        parse_FTThesaurusID();\n        break;\n      case 110:                     // 'default'\n        shift(110);                 // 'default'\n        break;\n      default:\n        shift(35);                  // '('\n        lookahead1W(116);           // S^WS | '(:' | 'at' | 'default'\n        switch (l1)\n        {\n        case 82:                    // 'at'\n          whitespace();\n          parse_FTThesaurusID();\n          break;\n        default:\n          shift(110);               // 'default'\n        }\n        for (;;)\n        {\n          lookahead1W(105);         // S^WS | '(:' | ')' | ','\n          if (l1 != 42)             // ','\n          {\n            break;\n          }\n          shift(42);                // ','\n          lookahead1W(34);          // S^WS | '(:' | 'at'\n          whitespace();\n          parse_FTThesaurusID();\n        }\n        shift(38);                  // ')'\n      }\n      break;\n    default:\n      shift(191);                   // 'no'\n      lookahead1W(81);              // S^WS | '(:' | 'thesaurus'\n      shift(251);                   // 'thesaurus'\n    }\n    eventHandler.endNonterminal(\"FTThesaurusOption\", e0);\n  }\n\n  function try_FTThesaurusOption()\n  {\n    switch (l1)\n    {\n    case 251:                       // 'thesaurus'\n      shiftT(251);                  // 'thesaurus'\n      lookahead1W(152);             // S^WS | '(' | '(:' | 'at' | 'default'\n      switch (l1)\n      {\n      case 82:                      // 'at'\n        try_FTThesaurusID();\n        break;\n      case 110:                     // 'default'\n        shiftT(110);                // 'default'\n        break;\n      default:\n        shiftT(35);                 // '('\n        lookahead1W(116);           // S^WS | '(:' | 'at' | 'default'\n        switch (l1)\n        {\n        case 82:                    // 'at'\n          try_FTThesaurusID();\n          break;\n        default:\n          shiftT(110);              // 'default'\n        }\n        for (;;)\n        {\n          lookahead1W(105);         // S^WS | '(:' | ')' | ','\n          if (l1 != 42)             // ','\n          {\n            break;\n          }\n          shiftT(42);               // ','\n          lookahead1W(34);          // S^WS | '(:' | 'at'\n          try_FTThesaurusID();\n        }\n        shiftT(38);                 // ')'\n      }\n      break;\n    default:\n      shiftT(191);                  // 'no'\n      lookahead1W(81);              // S^WS | '(:' | 'thesaurus'\n      shiftT(251);                  // 'thesaurus'\n    }\n  }\n\n  function parse_FTThesaurusID()\n  {\n    eventHandler.startNonterminal(\"FTThesaurusID\", e0);\n    shift(82);                      // 'at'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    lookahead1W(219);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n                                    // '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' |\n                                    // 'before' | 'case' | 'collation' | 'count' | 'default' | 'descending' |\n                                    // 'different' | 'distance' | 'else' | 'empty' | 'end' | 'entire' | 'eq' |\n                                    // 'exactly' | 'for' | 'from' | 'ftand' | 'ftor' | 'ge' | 'group' | 'gt' | 'into' |\n                                    // 'is' | 'le' | 'let' | 'lt' | 'modify' | 'ne' | 'not' | 'only' | 'or' | 'order' |\n                                    // 'ordered' | 'relationship' | 'return' | 'same' | 'satisfies' | 'stable' |\n                                    // 'start' | 'using' | 'weight' | 'where' | 'window' | 'with' | 'without' | '|}' |\n                                    // '}'\n    if (l1 == 221)                  // 'relationship'\n    {\n      shift(221);                   // 'relationship'\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shift(11);                    // StringLiteral\n    }\n    lookahead1W(215);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n                                    // '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' |\n                                    // 'before' | 'case' | 'collation' | 'count' | 'default' | 'descending' |\n                                    // 'different' | 'distance' | 'else' | 'empty' | 'end' | 'entire' | 'eq' |\n                                    // 'exactly' | 'for' | 'from' | 'ftand' | 'ftor' | 'ge' | 'group' | 'gt' | 'into' |\n                                    // 'is' | 'le' | 'let' | 'lt' | 'modify' | 'ne' | 'not' | 'only' | 'or' | 'order' |\n                                    // 'ordered' | 'return' | 'same' | 'satisfies' | 'stable' | 'start' | 'using' |\n                                    // 'weight' | 'where' | 'window' | 'with' | 'without' | '|}' | '}'\n    switch (l1)\n    {\n    case 82:                        // 'at'\n      lookahead2W(183);             // S^WS | '(:' | 'end' | 'least' | 'most' | 'position' | 'start'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 131                   // 'exactly'\n     || lk == 142                   // 'from'\n     || lk == 90194                 // 'at' 'least'\n     || lk == 95314)                // 'at' 'most'\n    {\n      whitespace();\n      parse_FTLiteralRange();\n      lookahead1W(61);              // S^WS | '(:' | 'levels'\n      shift(178);                   // 'levels'\n    }\n    eventHandler.endNonterminal(\"FTThesaurusID\", e0);\n  }\n\n  function try_FTThesaurusID()\n  {\n    shiftT(82);                     // 'at'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shiftT(7);                      // URILiteral\n    lookahead1W(219);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n                                    // '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' |\n                                    // 'before' | 'case' | 'collation' | 'count' | 'default' | 'descending' |\n                                    // 'different' | 'distance' | 'else' | 'empty' | 'end' | 'entire' | 'eq' |\n                                    // 'exactly' | 'for' | 'from' | 'ftand' | 'ftor' | 'ge' | 'group' | 'gt' | 'into' |\n                                    // 'is' | 'le' | 'let' | 'lt' | 'modify' | 'ne' | 'not' | 'only' | 'or' | 'order' |\n                                    // 'ordered' | 'relationship' | 'return' | 'same' | 'satisfies' | 'stable' |\n                                    // 'start' | 'using' | 'weight' | 'where' | 'window' | 'with' | 'without' | '|}' |\n                                    // '}'\n    if (l1 == 221)                  // 'relationship'\n    {\n      shiftT(221);                  // 'relationship'\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shiftT(11);                   // StringLiteral\n    }\n    lookahead1W(215);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n                                    // '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' |\n                                    // 'before' | 'case' | 'collation' | 'count' | 'default' | 'descending' |\n                                    // 'different' | 'distance' | 'else' | 'empty' | 'end' | 'entire' | 'eq' |\n                                    // 'exactly' | 'for' | 'from' | 'ftand' | 'ftor' | 'ge' | 'group' | 'gt' | 'into' |\n                                    // 'is' | 'le' | 'let' | 'lt' | 'modify' | 'ne' | 'not' | 'only' | 'or' | 'order' |\n                                    // 'ordered' | 'return' | 'same' | 'satisfies' | 'stable' | 'start' | 'using' |\n                                    // 'weight' | 'where' | 'window' | 'with' | 'without' | '|}' | '}'\n    switch (l1)\n    {\n    case 82:                        // 'at'\n      lookahead2W(183);             // S^WS | '(:' | 'end' | 'least' | 'most' | 'position' | 'start'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 131                   // 'exactly'\n     || lk == 142                   // 'from'\n     || lk == 90194                 // 'at' 'least'\n     || lk == 95314)                // 'at' 'most'\n    {\n      try_FTLiteralRange();\n      lookahead1W(61);              // S^WS | '(:' | 'levels'\n      shiftT(178);                  // 'levels'\n    }\n  }\n\n  function parse_FTLiteralRange()\n  {\n    eventHandler.startNonterminal(\"FTLiteralRange\", e0);\n    switch (l1)\n    {\n    case 131:                       // 'exactly'\n      shift(131);                   // 'exactly'\n      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'\n      shift(8);                     // IntegerLiteral\n      break;\n    case 82:                        // 'at'\n      shift(82);                    // 'at'\n      lookahead1W(129);             // S^WS | '(:' | 'least' | 'most'\n      switch (l1)\n      {\n      case 176:                     // 'least'\n        shift(176);                 // 'least'\n        lookahead1W(16);            // IntegerLiteral | S^WS | '(:'\n        shift(8);                   // IntegerLiteral\n        break;\n      default:\n        shift(186);                 // 'most'\n        lookahead1W(16);            // IntegerLiteral | S^WS | '(:'\n        shift(8);                   // IntegerLiteral\n      }\n      break;\n    default:\n      shift(142);                   // 'from'\n      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'\n      shift(8);                     // IntegerLiteral\n      lookahead1W(82);              // S^WS | '(:' | 'to'\n      shift(253);                   // 'to'\n      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'\n      shift(8);                     // IntegerLiteral\n    }\n    eventHandler.endNonterminal(\"FTLiteralRange\", e0);\n  }\n\n  function try_FTLiteralRange()\n  {\n    switch (l1)\n    {\n    case 131:                       // 'exactly'\n      shiftT(131);                  // 'exactly'\n      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'\n      shiftT(8);                    // IntegerLiteral\n      break;\n    case 82:                        // 'at'\n      shiftT(82);                   // 'at'\n      lookahead1W(129);             // S^WS | '(:' | 'least' | 'most'\n      switch (l1)\n      {\n      case 176:                     // 'least'\n        shiftT(176);                // 'least'\n        lookahead1W(16);            // IntegerLiteral | S^WS | '(:'\n        shiftT(8);                  // IntegerLiteral\n        break;\n      default:\n        shiftT(186);                // 'most'\n        lookahead1W(16);            // IntegerLiteral | S^WS | '(:'\n        shiftT(8);                  // IntegerLiteral\n      }\n      break;\n    default:\n      shiftT(142);                  // 'from'\n      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'\n      shiftT(8);                    // IntegerLiteral\n      lookahead1W(82);              // S^WS | '(:' | 'to'\n      shiftT(253);                  // 'to'\n      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'\n      shiftT(8);                    // IntegerLiteral\n    }\n  }\n\n  function parse_FTStopWordOption()\n  {\n    eventHandler.startNonterminal(\"FTStopWordOption\", e0);\n    switch (l1)\n    {\n    case 244:                       // 'stop'\n      shift(244);                   // 'stop'\n      lookahead1W(89);              // S^WS | '(:' | 'words'\n      shift(279);                   // 'words'\n      lookahead1W(152);             // S^WS | '(' | '(:' | 'at' | 'default'\n      switch (l1)\n      {\n      case 110:                     // 'default'\n        shift(110);                 // 'default'\n        for (;;)\n        {\n          lookahead1W(216);         // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n                                    // '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' |\n                                    // 'before' | 'case' | 'collation' | 'count' | 'default' | 'descending' |\n                                    // 'different' | 'distance' | 'else' | 'empty' | 'end' | 'entire' | 'eq' |\n                                    // 'except' | 'for' | 'ftand' | 'ftor' | 'ge' | 'group' | 'gt' | 'into' | 'is' |\n                                    // 'le' | 'let' | 'lt' | 'modify' | 'ne' | 'not' | 'only' | 'or' | 'order' |\n                                    // 'ordered' | 'return' | 'same' | 'satisfies' | 'stable' | 'start' | 'union' |\n                                    // 'using' | 'weight' | 'where' | 'window' | 'with' | 'without' | '|}' | '}'\n          if (l1 != 132             // 'except'\n           && l1 != 260)            // 'union'\n          {\n            break;\n          }\n          whitespace();\n          parse_FTStopWordsInclExcl();\n        }\n        break;\n      default:\n        whitespace();\n        parse_FTStopWords();\n        for (;;)\n        {\n          lookahead1W(216);         // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n                                    // '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' |\n                                    // 'before' | 'case' | 'collation' | 'count' | 'default' | 'descending' |\n                                    // 'different' | 'distance' | 'else' | 'empty' | 'end' | 'entire' | 'eq' |\n                                    // 'except' | 'for' | 'ftand' | 'ftor' | 'ge' | 'group' | 'gt' | 'into' | 'is' |\n                                    // 'le' | 'let' | 'lt' | 'modify' | 'ne' | 'not' | 'only' | 'or' | 'order' |\n                                    // 'ordered' | 'return' | 'same' | 'satisfies' | 'stable' | 'start' | 'union' |\n                                    // 'using' | 'weight' | 'where' | 'window' | 'with' | 'without' | '|}' | '}'\n          if (l1 != 132             // 'except'\n           && l1 != 260)            // 'union'\n          {\n            break;\n          }\n          whitespace();\n          parse_FTStopWordsInclExcl();\n        }\n      }\n      break;\n    default:\n      shift(191);                   // 'no'\n      lookahead1W(78);              // S^WS | '(:' | 'stop'\n      shift(244);                   // 'stop'\n      lookahead1W(89);              // S^WS | '(:' | 'words'\n      shift(279);                   // 'words'\n    }\n    eventHandler.endNonterminal(\"FTStopWordOption\", e0);\n  }\n\n  function try_FTStopWordOption()\n  {\n    switch (l1)\n    {\n    case 244:                       // 'stop'\n      shiftT(244);                  // 'stop'\n      lookahead1W(89);              // S^WS | '(:' | 'words'\n      shiftT(279);                  // 'words'\n      lookahead1W(152);             // S^WS | '(' | '(:' | 'at' | 'default'\n      switch (l1)\n      {\n      case 110:                     // 'default'\n        shiftT(110);                // 'default'\n        for (;;)\n        {\n          lookahead1W(216);         // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n                                    // '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' |\n                                    // 'before' | 'case' | 'collation' | 'count' | 'default' | 'descending' |\n                                    // 'different' | 'distance' | 'else' | 'empty' | 'end' | 'entire' | 'eq' |\n                                    // 'except' | 'for' | 'ftand' | 'ftor' | 'ge' | 'group' | 'gt' | 'into' | 'is' |\n                                    // 'le' | 'let' | 'lt' | 'modify' | 'ne' | 'not' | 'only' | 'or' | 'order' |\n                                    // 'ordered' | 'return' | 'same' | 'satisfies' | 'stable' | 'start' | 'union' |\n                                    // 'using' | 'weight' | 'where' | 'window' | 'with' | 'without' | '|}' | '}'\n          if (l1 != 132             // 'except'\n           && l1 != 260)            // 'union'\n          {\n            break;\n          }\n          try_FTStopWordsInclExcl();\n        }\n        break;\n      default:\n        try_FTStopWords();\n        for (;;)\n        {\n          lookahead1W(216);         // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n                                    // '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' |\n                                    // 'before' | 'case' | 'collation' | 'count' | 'default' | 'descending' |\n                                    // 'different' | 'distance' | 'else' | 'empty' | 'end' | 'entire' | 'eq' |\n                                    // 'except' | 'for' | 'ftand' | 'ftor' | 'ge' | 'group' | 'gt' | 'into' | 'is' |\n                                    // 'le' | 'let' | 'lt' | 'modify' | 'ne' | 'not' | 'only' | 'or' | 'order' |\n                                    // 'ordered' | 'return' | 'same' | 'satisfies' | 'stable' | 'start' | 'union' |\n                                    // 'using' | 'weight' | 'where' | 'window' | 'with' | 'without' | '|}' | '}'\n          if (l1 != 132             // 'except'\n           && l1 != 260)            // 'union'\n          {\n            break;\n          }\n          try_FTStopWordsInclExcl();\n        }\n      }\n      break;\n    default:\n      shiftT(191);                  // 'no'\n      lookahead1W(78);              // S^WS | '(:' | 'stop'\n      shiftT(244);                  // 'stop'\n      lookahead1W(89);              // S^WS | '(:' | 'words'\n      shiftT(279);                  // 'words'\n    }\n  }\n\n  function parse_FTStopWords()\n  {\n    eventHandler.startNonterminal(\"FTStopWords\", e0);\n    switch (l1)\n    {\n    case 82:                        // 'at'\n      shift(82);                    // 'at'\n      lookahead1W(15);              // URILiteral | S^WS | '(:'\n      shift(7);                     // URILiteral\n      break;\n    default:\n      shift(35);                    // '('\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shift(11);                    // StringLiteral\n      for (;;)\n      {\n        lookahead1W(105);           // S^WS | '(:' | ')' | ','\n        if (l1 != 42)               // ','\n        {\n          break;\n        }\n        shift(42);                  // ','\n        lookahead1W(17);            // StringLiteral | S^WS | '(:'\n        shift(11);                  // StringLiteral\n      }\n      shift(38);                    // ')'\n    }\n    eventHandler.endNonterminal(\"FTStopWords\", e0);\n  }\n\n  function try_FTStopWords()\n  {\n    switch (l1)\n    {\n    case 82:                        // 'at'\n      shiftT(82);                   // 'at'\n      lookahead1W(15);              // URILiteral | S^WS | '(:'\n      shiftT(7);                    // URILiteral\n      break;\n    default:\n      shiftT(35);                   // '('\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shiftT(11);                   // StringLiteral\n      for (;;)\n      {\n        lookahead1W(105);           // S^WS | '(:' | ')' | ','\n        if (l1 != 42)               // ','\n        {\n          break;\n        }\n        shiftT(42);                 // ','\n        lookahead1W(17);            // StringLiteral | S^WS | '(:'\n        shiftT(11);                 // StringLiteral\n      }\n      shiftT(38);                   // ')'\n    }\n  }\n\n  function parse_FTStopWordsInclExcl()\n  {\n    eventHandler.startNonterminal(\"FTStopWordsInclExcl\", e0);\n    switch (l1)\n    {\n    case 260:                       // 'union'\n      shift(260);                   // 'union'\n      break;\n    default:\n      shift(132);                   // 'except'\n    }\n    lookahead1W(103);               // S^WS | '(' | '(:' | 'at'\n    whitespace();\n    parse_FTStopWords();\n    eventHandler.endNonterminal(\"FTStopWordsInclExcl\", e0);\n  }\n\n  function try_FTStopWordsInclExcl()\n  {\n    switch (l1)\n    {\n    case 260:                       // 'union'\n      shiftT(260);                  // 'union'\n      break;\n    default:\n      shiftT(132);                  // 'except'\n    }\n    lookahead1W(103);               // S^WS | '(' | '(:' | 'at'\n    try_FTStopWords();\n  }\n\n  function parse_FTLanguageOption()\n  {\n    eventHandler.startNonterminal(\"FTLanguageOption\", e0);\n    shift(172);                     // 'language'\n    lookahead1W(17);                // StringLiteral | S^WS | '(:'\n    shift(11);                      // StringLiteral\n    eventHandler.endNonterminal(\"FTLanguageOption\", e0);\n  }\n\n  function try_FTLanguageOption()\n  {\n    shiftT(172);                    // 'language'\n    lookahead1W(17);                // StringLiteral | S^WS | '(:'\n    shiftT(11);                     // StringLiteral\n  }\n\n  function parse_FTWildCardOption()\n  {\n    eventHandler.startNonterminal(\"FTWildCardOption\", e0);\n    switch (l1)\n    {\n    case 274:                       // 'wildcards'\n      shift(274);                   // 'wildcards'\n      break;\n    default:\n      shift(191);                   // 'no'\n      lookahead1W(87);              // S^WS | '(:' | 'wildcards'\n      shift(274);                   // 'wildcards'\n    }\n    eventHandler.endNonterminal(\"FTWildCardOption\", e0);\n  }\n\n  function try_FTWildCardOption()\n  {\n    switch (l1)\n    {\n    case 274:                       // 'wildcards'\n      shiftT(274);                  // 'wildcards'\n      break;\n    default:\n      shiftT(191);                  // 'no'\n      lookahead1W(87);              // S^WS | '(:' | 'wildcards'\n      shiftT(274);                  // 'wildcards'\n    }\n  }\n\n  function parse_FTExtensionOption()\n  {\n    eventHandler.startNonterminal(\"FTExtensionOption\", e0);\n    shift(203);                     // 'option'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    whitespace();\n    parse_EQName();\n    lookahead1W(17);                // StringLiteral | S^WS | '(:'\n    shift(11);                      // StringLiteral\n    eventHandler.endNonterminal(\"FTExtensionOption\", e0);\n  }\n\n  function try_FTExtensionOption()\n  {\n    shiftT(203);                    // 'option'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    try_EQName();\n    lookahead1W(17);                // StringLiteral | S^WS | '(:'\n    shiftT(11);                     // StringLiteral\n  }\n\n  function parse_FTIgnoreOption()\n  {\n    eventHandler.startNonterminal(\"FTIgnoreOption\", e0);\n    shift(277);                     // 'without'\n    lookahead1W(45);                // S^WS | '(:' | 'content'\n    shift(101);                     // 'content'\n    lookahead1W(265);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'structured-item' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' |\n                                    // 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' | 'value' |\n                                    // 'variable' | 'version' | 'where' | 'while' | 'with' | '{' | '{|'\n    whitespace();\n    parse_UnionExpr();\n    eventHandler.endNonterminal(\"FTIgnoreOption\", e0);\n  }\n\n  function try_FTIgnoreOption()\n  {\n    shiftT(277);                    // 'without'\n    lookahead1W(45);                // S^WS | '(:' | 'content'\n    shiftT(101);                    // 'content'\n    lookahead1W(265);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'structured-item' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' |\n                                    // 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' | 'value' |\n                                    // 'variable' | 'version' | 'where' | 'while' | 'with' | '{' | '{|'\n    try_UnionExpr();\n  }\n\n  function parse_CollectionDecl()\n  {\n    eventHandler.startNonterminal(\"CollectionDecl\", e0);\n    shift(96);                      // 'collection'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    whitespace();\n    parse_EQName();\n    lookahead1W(111);               // S^WS | '(:' | ';' | 'as'\n    if (l1 == 80)                   // 'as'\n    {\n      whitespace();\n      parse_CollectionTypeDecl();\n    }\n    eventHandler.endNonterminal(\"CollectionDecl\", e0);\n  }\n\n  function parse_CollectionTypeDecl()\n  {\n    eventHandler.startNonterminal(\"CollectionTypeDecl\", e0);\n    shift(80);                      // 'as'\n    lookahead1W(253);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    whitespace();\n    parse_ItemType();\n    lookahead1W(171);               // S^WS | '(:' | '*' | '+' | ';' | '?'\n    if (l1 != 54)                   // ';'\n    {\n      whitespace();\n      parse_OccurrenceIndicator();\n    }\n    eventHandler.endNonterminal(\"CollectionTypeDecl\", e0);\n  }\n\n  function parse_IndexName()\n  {\n    eventHandler.startNonterminal(\"IndexName\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"IndexName\", e0);\n  }\n\n  function parse_IndexDomainExpr()\n  {\n    eventHandler.startNonterminal(\"IndexDomainExpr\", e0);\n    parse_PathExpr();\n    eventHandler.endNonterminal(\"IndexDomainExpr\", e0);\n  }\n\n  function parse_IndexKeySpec()\n  {\n    eventHandler.startNonterminal(\"IndexKeySpec\", e0);\n    parse_IndexKeyExpr();\n    if (l1 == 80)                   // 'as'\n    {\n      whitespace();\n      parse_IndexKeyTypeDecl();\n    }\n    lookahead1W(156);               // S^WS | '(:' | ',' | ';' | 'collation'\n    if (l1 == 95)                   // 'collation'\n    {\n      whitespace();\n      parse_IndexKeyCollation();\n    }\n    eventHandler.endNonterminal(\"IndexKeySpec\", e0);\n  }\n\n  function parse_IndexKeyExpr()\n  {\n    eventHandler.startNonterminal(\"IndexKeyExpr\", e0);\n    parse_PathExpr();\n    eventHandler.endNonterminal(\"IndexKeyExpr\", e0);\n  }\n\n  function parse_IndexKeyTypeDecl()\n  {\n    eventHandler.startNonterminal(\"IndexKeyTypeDecl\", e0);\n    shift(80);                      // 'as'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    whitespace();\n    parse_AtomicType();\n    lookahead1W(189);               // S^WS | '(:' | '*' | '+' | ',' | ';' | '?' | 'collation'\n    if (l1 == 40                    // '*'\n     || l1 == 41                    // '+'\n     || l1 == 65)                   // '?'\n    {\n      whitespace();\n      parse_OccurrenceIndicator();\n    }\n    eventHandler.endNonterminal(\"IndexKeyTypeDecl\", e0);\n  }\n\n  function parse_AtomicType()\n  {\n    eventHandler.startNonterminal(\"AtomicType\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"AtomicType\", e0);\n  }\n\n  function parse_IndexKeyCollation()\n  {\n    eventHandler.startNonterminal(\"IndexKeyCollation\", e0);\n    shift(95);                      // 'collation'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    eventHandler.endNonterminal(\"IndexKeyCollation\", e0);\n  }\n\n  function parse_IndexDecl()\n  {\n    eventHandler.startNonterminal(\"IndexDecl\", e0);\n    shift(157);                     // 'index'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    whitespace();\n    parse_IndexName();\n    lookahead1W(68);                // S^WS | '(:' | 'on'\n    shift(201);                     // 'on'\n    lookahead1W(66);                // S^WS | '(:' | 'nodes'\n    shift(195);                     // 'nodes'\n    lookahead1W(262);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(:' | '/' | '//' | '<' | '<!--' | '<?' | '[' |\n                                    // 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' |\n                                    // 'array' | 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'false' | 'first' | 'following' | 'following-sibling' |\n                                    // 'for' | 'from' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' |\n                                    // 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'json-item' | 'jsoniq' | 'last' |\n                                    // 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' |\n                                    // 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' | 'sliding' |\n                                    // 'some' | 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' |\n                                    // 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | '{' | '{|'\n    whitespace();\n    parse_IndexDomainExpr();\n    shift(88);                      // 'by'\n    lookahead1W(262);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(:' | '/' | '//' | '<' | '<!--' | '<?' | '[' |\n                                    // 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' |\n                                    // 'array' | 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'false' | 'first' | 'following' | 'following-sibling' |\n                                    // 'for' | 'from' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' |\n                                    // 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'json-item' | 'jsoniq' | 'last' |\n                                    // 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' |\n                                    // 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' | 'sliding' |\n                                    // 'some' | 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' |\n                                    // 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | '{' | '{|'\n    whitespace();\n    parse_IndexKeySpec();\n    for (;;)\n    {\n      lookahead1W(107);             // S^WS | '(:' | ',' | ';'\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shift(42);                    // ','\n      lookahead1W(262);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(:' | '/' | '//' | '<' | '<!--' | '<?' | '[' |\n                                    // 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' |\n                                    // 'array' | 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'false' | 'first' | 'following' | 'following-sibling' |\n                                    // 'for' | 'from' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' |\n                                    // 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'json-item' | 'jsoniq' | 'last' |\n                                    // 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' |\n                                    // 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' | 'sliding' |\n                                    // 'some' | 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' |\n                                    // 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | '{' | '{|'\n      whitespace();\n      parse_IndexKeySpec();\n    }\n    eventHandler.endNonterminal(\"IndexDecl\", e0);\n  }\n\n  function parse_ICDecl()\n  {\n    eventHandler.startNonterminal(\"ICDecl\", e0);\n    shift(163);                     // 'integrity'\n    lookahead1W(43);                // S^WS | '(:' | 'constraint'\n    shift(98);                      // 'constraint'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    whitespace();\n    parse_EQName();\n    lookahead1W(124);               // S^WS | '(:' | 'foreign' | 'on'\n    switch (l1)\n    {\n    case 201:                       // 'on'\n      whitespace();\n      parse_ICCollection();\n      break;\n    default:\n      whitespace();\n      parse_ICForeignKey();\n    }\n    eventHandler.endNonterminal(\"ICDecl\", e0);\n  }\n\n  function parse_ICCollection()\n  {\n    eventHandler.startNonterminal(\"ICCollection\", e0);\n    shift(201);                     // 'on'\n    lookahead1W(42);                // S^WS | '(:' | 'collection'\n    shift(96);                      // 'collection'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    whitespace();\n    parse_EQName();\n    lookahead1W(150);               // S^WS | '$' | '(:' | 'foreach' | 'node'\n    switch (l1)\n    {\n    case 31:                        // '$'\n      whitespace();\n      parse_ICCollSequence();\n      break;\n    case 194:                       // 'node'\n      whitespace();\n      parse_ICCollSequenceUnique();\n      break;\n    default:\n      whitespace();\n      parse_ICCollNode();\n    }\n    eventHandler.endNonterminal(\"ICCollection\", e0);\n  }\n\n  function parse_ICCollSequence()\n  {\n    eventHandler.startNonterminal(\"ICCollSequence\", e0);\n    parse_VarRef();\n    lookahead1W(40);                // S^WS | '(:' | 'check'\n    shift(93);                      // 'check'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"ICCollSequence\", e0);\n  }\n\n  function parse_ICCollSequenceUnique()\n  {\n    eventHandler.startNonterminal(\"ICCollSequenceUnique\", e0);\n    shift(194);                     // 'node'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    whitespace();\n    parse_VarRef();\n    lookahead1W(40);                // S^WS | '(:' | 'check'\n    shift(93);                      // 'check'\n    lookahead1W(83);                // S^WS | '(:' | 'unique'\n    shift(261);                     // 'unique'\n    lookahead1W(60);                // S^WS | '(:' | 'key'\n    shift(171);                     // 'key'\n    lookahead1W(262);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(:' | '/' | '//' | '<' | '<!--' | '<?' | '[' |\n                                    // 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' |\n                                    // 'array' | 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'false' | 'first' | 'following' | 'following-sibling' |\n                                    // 'for' | 'from' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' |\n                                    // 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'json-item' | 'jsoniq' | 'last' |\n                                    // 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' |\n                                    // 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' | 'sliding' |\n                                    // 'some' | 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' |\n                                    // 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | '{' | '{|'\n    whitespace();\n    parse_PathExpr();\n    eventHandler.endNonterminal(\"ICCollSequenceUnique\", e0);\n  }\n\n  function parse_ICCollNode()\n  {\n    eventHandler.startNonterminal(\"ICCollNode\", e0);\n    shift(140);                     // 'foreach'\n    lookahead1W(65);                // S^WS | '(:' | 'node'\n    shift(194);                     // 'node'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    whitespace();\n    parse_VarRef();\n    lookahead1W(40);                // S^WS | '(:' | 'check'\n    shift(93);                      // 'check'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"ICCollNode\", e0);\n  }\n\n  function parse_ICForeignKey()\n  {\n    eventHandler.startNonterminal(\"ICForeignKey\", e0);\n    shift(141);                     // 'foreign'\n    lookahead1W(60);                // S^WS | '(:' | 'key'\n    shift(171);                     // 'key'\n    lookahead1W(54);                // S^WS | '(:' | 'from'\n    whitespace();\n    parse_ICForeignKeySource();\n    whitespace();\n    parse_ICForeignKeyTarget();\n    eventHandler.endNonterminal(\"ICForeignKey\", e0);\n  }\n\n  function parse_ICForeignKeySource()\n  {\n    eventHandler.startNonterminal(\"ICForeignKeySource\", e0);\n    shift(142);                     // 'from'\n    lookahead1W(42);                // S^WS | '(:' | 'collection'\n    whitespace();\n    parse_ICForeignKeyValues();\n    eventHandler.endNonterminal(\"ICForeignKeySource\", e0);\n  }\n\n  function parse_ICForeignKeyTarget()\n  {\n    eventHandler.startNonterminal(\"ICForeignKeyTarget\", e0);\n    shift(253);                     // 'to'\n    lookahead1W(42);                // S^WS | '(:' | 'collection'\n    whitespace();\n    parse_ICForeignKeyValues();\n    eventHandler.endNonterminal(\"ICForeignKeyTarget\", e0);\n  }\n\n  function parse_ICForeignKeyValues()\n  {\n    eventHandler.startNonterminal(\"ICForeignKeyValues\", e0);\n    shift(96);                      // 'collection'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    whitespace();\n    parse_EQName();\n    lookahead1W(65);                // S^WS | '(:' | 'node'\n    shift(194);                     // 'node'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    whitespace();\n    parse_VarRef();\n    lookahead1W(60);                // S^WS | '(:' | 'key'\n    shift(171);                     // 'key'\n    lookahead1W(262);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(:' | '/' | '//' | '<' | '<!--' | '<?' | '[' |\n                                    // 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' |\n                                    // 'array' | 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'false' | 'first' | 'following' | 'following-sibling' |\n                                    // 'for' | 'from' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' |\n                                    // 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'json-item' | 'jsoniq' | 'last' |\n                                    // 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' |\n                                    // 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' | 'sliding' |\n                                    // 'some' | 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' |\n                                    // 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | '{' | '{|'\n    whitespace();\n    parse_PathExpr();\n    eventHandler.endNonterminal(\"ICForeignKeyValues\", e0);\n  }\n\n  function try_Comment()\n  {\n    shiftT(37);                     // '(:'\n    for (;;)\n    {\n      lookahead1(92);               // CommentContents | '(:' | ':)'\n      if (l1 == 51)                 // ':)'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 24:                      // CommentContents\n        shiftT(24);                 // CommentContents\n        break;\n      default:\n        try_Comment();\n      }\n    }\n    shiftT(51);                     // ':)'\n  }\n\n  function try_Whitespace()\n  {\n    switch (l1)\n    {\n    case 22:                        // S^WS\n      shiftT(22);                   // S^WS\n      break;\n    default:\n      try_Comment();\n    }\n  }\n\n  function parse_EQName()\n  {\n    eventHandler.startNonterminal(\"EQName\", e0);\n    lookahead1(240);                // EQName^Token | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' |\n                                    // 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' |\n                                    // 'before' | 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' |\n                                    // 'child' | 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'false' | 'first' | 'following' | 'following-sibling' |\n                                    // 'for' | 'from' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' |\n                                    // 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'json-item' | 'jsoniq' | 'last' |\n                                    // 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' |\n                                    // 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' | 'sliding' |\n                                    // 'some' | 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' |\n                                    // 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with'\n    switch (l1)\n    {\n    case 83:                        // 'attribute'\n      shift(83);                    // 'attribute'\n      break;\n    case 97:                        // 'comment'\n      shift(97);                    // 'comment'\n      break;\n    case 121:                       // 'document-node'\n      shift(121);                   // 'document-node'\n      break;\n    case 122:                       // 'element'\n      shift(122);                   // 'element'\n      break;\n    case 125:                       // 'empty-sequence'\n      shift(125);                   // 'empty-sequence'\n      break;\n    case 147:                       // 'function'\n      shift(147);                   // 'function'\n      break;\n    case 154:                       // 'if'\n      shift(154);                   // 'if'\n      break;\n    case 167:                       // 'item'\n      shift(167);                   // 'item'\n      break;\n    case 188:                       // 'namespace-node'\n      shift(188);                   // 'namespace-node'\n      break;\n    case 194:                       // 'node'\n      shift(194);                   // 'node'\n      break;\n    case 220:                       // 'processing-instruction'\n      shift(220);                   // 'processing-instruction'\n      break;\n    case 230:                       // 'schema-attribute'\n      shift(230);                   // 'schema-attribute'\n      break;\n    case 231:                       // 'schema-element'\n      shift(231);                   // 'schema-element'\n      break;\n    case 248:                       // 'switch'\n      shift(248);                   // 'switch'\n      break;\n    case 249:                       // 'text'\n      shift(249);                   // 'text'\n      break;\n    case 259:                       // 'typeswitch'\n      shift(259);                   // 'typeswitch'\n      break;\n    case 79:                        // 'array'\n      shift(79);                    // 'array'\n      break;\n    case 169:                       // 'json-item'\n      shift(169);                   // 'json-item'\n      break;\n    case 247:                       // 'structured-item'\n      shift(247);                   // 'structured-item'\n      break;\n    default:\n      parse_FunctionName();\n    }\n    eventHandler.endNonterminal(\"EQName\", e0);\n  }\n\n  function try_EQName()\n  {\n    lookahead1(240);                // EQName^Token | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' |\n                                    // 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' |\n                                    // 'before' | 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' |\n                                    // 'child' | 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'false' | 'first' | 'following' | 'following-sibling' |\n                                    // 'for' | 'from' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' |\n                                    // 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'json-item' | 'jsoniq' | 'last' |\n                                    // 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' |\n                                    // 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' | 'sliding' |\n                                    // 'some' | 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' |\n                                    // 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with'\n    switch (l1)\n    {\n    case 83:                        // 'attribute'\n      shiftT(83);                   // 'attribute'\n      break;\n    case 97:                        // 'comment'\n      shiftT(97);                   // 'comment'\n      break;\n    case 121:                       // 'document-node'\n      shiftT(121);                  // 'document-node'\n      break;\n    case 122:                       // 'element'\n      shiftT(122);                  // 'element'\n      break;\n    case 125:                       // 'empty-sequence'\n      shiftT(125);                  // 'empty-sequence'\n      break;\n    case 147:                       // 'function'\n      shiftT(147);                  // 'function'\n      break;\n    case 154:                       // 'if'\n      shiftT(154);                  // 'if'\n      break;\n    case 167:                       // 'item'\n      shiftT(167);                  // 'item'\n      break;\n    case 188:                       // 'namespace-node'\n      shiftT(188);                  // 'namespace-node'\n      break;\n    case 194:                       // 'node'\n      shiftT(194);                  // 'node'\n      break;\n    case 220:                       // 'processing-instruction'\n      shiftT(220);                  // 'processing-instruction'\n      break;\n    case 230:                       // 'schema-attribute'\n      shiftT(230);                  // 'schema-attribute'\n      break;\n    case 231:                       // 'schema-element'\n      shiftT(231);                  // 'schema-element'\n      break;\n    case 248:                       // 'switch'\n      shiftT(248);                  // 'switch'\n      break;\n    case 249:                       // 'text'\n      shiftT(249);                  // 'text'\n      break;\n    case 259:                       // 'typeswitch'\n      shiftT(259);                  // 'typeswitch'\n      break;\n    case 79:                        // 'array'\n      shiftT(79);                   // 'array'\n      break;\n    case 169:                       // 'json-item'\n      shiftT(169);                  // 'json-item'\n      break;\n    case 247:                       // 'structured-item'\n      shiftT(247);                  // 'structured-item'\n      break;\n    default:\n      try_FunctionName();\n    }\n  }\n\n  function parse_FunctionName()\n  {\n    eventHandler.startNonterminal(\"FunctionName\", e0);\n    switch (l1)\n    {\n    case 6:                         // EQName^Token\n      shift(6);                     // EQName^Token\n      break;\n    case 71:                        // 'after'\n      shift(71);                    // 'after'\n      break;\n    case 74:                        // 'ancestor'\n      shift(74);                    // 'ancestor'\n      break;\n    case 75:                        // 'ancestor-or-self'\n      shift(75);                    // 'ancestor-or-self'\n      break;\n    case 76:                        // 'and'\n      shift(76);                    // 'and'\n      break;\n    case 80:                        // 'as'\n      shift(80);                    // 'as'\n      break;\n    case 81:                        // 'ascending'\n      shift(81);                    // 'ascending'\n      break;\n    case 85:                        // 'before'\n      shift(85);                    // 'before'\n      break;\n    case 89:                        // 'case'\n      shift(89);                    // 'case'\n      break;\n    case 90:                        // 'cast'\n      shift(90);                    // 'cast'\n      break;\n    case 91:                        // 'castable'\n      shift(91);                    // 'castable'\n      break;\n    case 94:                        // 'child'\n      shift(94);                    // 'child'\n      break;\n    case 95:                        // 'collation'\n      shift(95);                    // 'collation'\n      break;\n    case 104:                       // 'copy'\n      shift(104);                   // 'copy'\n      break;\n    case 106:                       // 'count'\n      shift(106);                   // 'count'\n      break;\n    case 109:                       // 'declare'\n      shift(109);                   // 'declare'\n      break;\n    case 110:                       // 'default'\n      shift(110);                   // 'default'\n      break;\n    case 111:                       // 'delete'\n      shift(111);                   // 'delete'\n      break;\n    case 112:                       // 'descendant'\n      shift(112);                   // 'descendant'\n      break;\n    case 113:                       // 'descendant-or-self'\n      shift(113);                   // 'descendant-or-self'\n      break;\n    case 114:                       // 'descending'\n      shift(114);                   // 'descending'\n      break;\n    case 119:                       // 'div'\n      shift(119);                   // 'div'\n      break;\n    case 120:                       // 'document'\n      shift(120);                   // 'document'\n      break;\n    case 123:                       // 'else'\n      shift(123);                   // 'else'\n      break;\n    case 124:                       // 'empty'\n      shift(124);                   // 'empty'\n      break;\n    case 127:                       // 'end'\n      shift(127);                   // 'end'\n      break;\n    case 129:                       // 'eq'\n      shift(129);                   // 'eq'\n      break;\n    case 130:                       // 'every'\n      shift(130);                   // 'every'\n      break;\n    case 132:                       // 'except'\n      shift(132);                   // 'except'\n      break;\n    case 136:                       // 'first'\n      shift(136);                   // 'first'\n      break;\n    case 137:                       // 'following'\n      shift(137);                   // 'following'\n      break;\n    case 138:                       // 'following-sibling'\n      shift(138);                   // 'following-sibling'\n      break;\n    case 139:                       // 'for'\n      shift(139);                   // 'for'\n      break;\n    case 148:                       // 'ge'\n      shift(148);                   // 'ge'\n      break;\n    case 150:                       // 'group'\n      shift(150);                   // 'group'\n      break;\n    case 152:                       // 'gt'\n      shift(152);                   // 'gt'\n      break;\n    case 153:                       // 'idiv'\n      shift(153);                   // 'idiv'\n      break;\n    case 155:                       // 'import'\n      shift(155);                   // 'import'\n      break;\n    case 161:                       // 'insert'\n      shift(161);                   // 'insert'\n      break;\n    case 162:                       // 'instance'\n      shift(162);                   // 'instance'\n      break;\n    case 164:                       // 'intersect'\n      shift(164);                   // 'intersect'\n      break;\n    case 165:                       // 'into'\n      shift(165);                   // 'into'\n      break;\n    case 166:                       // 'is'\n      shift(166);                   // 'is'\n      break;\n    case 173:                       // 'last'\n      shift(173);                   // 'last'\n      break;\n    case 175:                       // 'le'\n      shift(175);                   // 'le'\n      break;\n    case 177:                       // 'let'\n      shift(177);                   // 'let'\n      break;\n    case 181:                       // 'lt'\n      shift(181);                   // 'lt'\n      break;\n    case 183:                       // 'mod'\n      shift(183);                   // 'mod'\n      break;\n    case 184:                       // 'modify'\n      shift(184);                   // 'modify'\n      break;\n    case 185:                       // 'module'\n      shift(185);                   // 'module'\n      break;\n    case 187:                       // 'namespace'\n      shift(187);                   // 'namespace'\n      break;\n    case 189:                       // 'ne'\n      shift(189);                   // 'ne'\n      break;\n    case 202:                       // 'only'\n      shift(202);                   // 'only'\n      break;\n    case 204:                       // 'or'\n      shift(204);                   // 'or'\n      break;\n    case 205:                       // 'order'\n      shift(205);                   // 'order'\n      break;\n    case 206:                       // 'ordered'\n      shift(206);                   // 'ordered'\n      break;\n    case 210:                       // 'parent'\n      shift(210);                   // 'parent'\n      break;\n    case 216:                       // 'preceding'\n      shift(216);                   // 'preceding'\n      break;\n    case 217:                       // 'preceding-sibling'\n      shift(217);                   // 'preceding-sibling'\n      break;\n    case 222:                       // 'rename'\n      shift(222);                   // 'rename'\n      break;\n    case 223:                       // 'replace'\n      shift(223);                   // 'replace'\n      break;\n    case 224:                       // 'return'\n      shift(224);                   // 'return'\n      break;\n    case 228:                       // 'satisfies'\n      shift(228);                   // 'satisfies'\n      break;\n    case 234:                       // 'self'\n      shift(234);                   // 'self'\n      break;\n    case 240:                       // 'some'\n      shift(240);                   // 'some'\n      break;\n    case 241:                       // 'stable'\n      shift(241);                   // 'stable'\n      break;\n    case 242:                       // 'start'\n      shift(242);                   // 'start'\n      break;\n    case 253:                       // 'to'\n      shift(253);                   // 'to'\n      break;\n    case 254:                       // 'treat'\n      shift(254);                   // 'treat'\n      break;\n    case 256:                       // 'try'\n      shift(256);                   // 'try'\n      break;\n    case 260:                       // 'union'\n      shift(260);                   // 'union'\n      break;\n    case 262:                       // 'unordered'\n      shift(262);                   // 'unordered'\n      break;\n    case 266:                       // 'validate'\n      shift(266);                   // 'validate'\n      break;\n    case 272:                       // 'where'\n      shift(272);                   // 'where'\n      break;\n    case 276:                       // 'with'\n      shift(276);                   // 'with'\n      break;\n    case 170:                       // 'jsoniq'\n      shift(170);                   // 'jsoniq'\n      break;\n    case 73:                        // 'allowing'\n      shift(73);                    // 'allowing'\n      break;\n    case 82:                        // 'at'\n      shift(82);                    // 'at'\n      break;\n    case 84:                        // 'base-uri'\n      shift(84);                    // 'base-uri'\n      break;\n    case 86:                        // 'boundary-space'\n      shift(86);                    // 'boundary-space'\n      break;\n    case 87:                        // 'break'\n      shift(87);                    // 'break'\n      break;\n    case 92:                        // 'catch'\n      shift(92);                    // 'catch'\n      break;\n    case 99:                        // 'construction'\n      shift(99);                    // 'construction'\n      break;\n    case 102:                       // 'context'\n      shift(102);                   // 'context'\n      break;\n    case 103:                       // 'continue'\n      shift(103);                   // 'continue'\n      break;\n    case 105:                       // 'copy-namespaces'\n      shift(105);                   // 'copy-namespaces'\n      break;\n    case 107:                       // 'decimal-format'\n      shift(107);                   // 'decimal-format'\n      break;\n    case 126:                       // 'encoding'\n      shift(126);                   // 'encoding'\n      break;\n    case 133:                       // 'exit'\n      shift(133);                   // 'exit'\n      break;\n    case 134:                       // 'external'\n      shift(134);                   // 'external'\n      break;\n    case 143:                       // 'ft-option'\n      shift(143);                   // 'ft-option'\n      break;\n    case 156:                       // 'in'\n      shift(156);                   // 'in'\n      break;\n    case 157:                       // 'index'\n      shift(157);                   // 'index'\n      break;\n    case 163:                       // 'integrity'\n      shift(163);                   // 'integrity'\n      break;\n    case 174:                       // 'lax'\n      shift(174);                   // 'lax'\n      break;\n    case 195:                       // 'nodes'\n      shift(195);                   // 'nodes'\n      break;\n    case 203:                       // 'option'\n      shift(203);                   // 'option'\n      break;\n    case 207:                       // 'ordering'\n      shift(207);                   // 'ordering'\n      break;\n    case 226:                       // 'revalidation'\n      shift(226);                   // 'revalidation'\n      break;\n    case 229:                       // 'schema'\n      shift(229);                   // 'schema'\n      break;\n    case 232:                       // 'score'\n      shift(232);                   // 'score'\n      break;\n    case 239:                       // 'sliding'\n      shift(239);                   // 'sliding'\n      break;\n    case 245:                       // 'strict'\n      shift(245);                   // 'strict'\n      break;\n    case 257:                       // 'tumbling'\n      shift(257);                   // 'tumbling'\n      break;\n    case 258:                       // 'type'\n      shift(258);                   // 'type'\n      break;\n    case 263:                       // 'updating'\n      shift(263);                   // 'updating'\n      break;\n    case 267:                       // 'value'\n      shift(267);                   // 'value'\n      break;\n    case 268:                       // 'variable'\n      shift(268);                   // 'variable'\n      break;\n    case 269:                       // 'version'\n      shift(269);                   // 'version'\n      break;\n    case 273:                       // 'while'\n      shift(273);                   // 'while'\n      break;\n    case 98:                        // 'constraint'\n      shift(98);                    // 'constraint'\n      break;\n    case 179:                       // 'loop'\n      shift(179);                   // 'loop'\n      break;\n    case 225:                       // 'returning'\n      shift(225);                   // 'returning'\n      break;\n    case 78:                        // 'append'\n      shift(78);                    // 'append'\n      break;\n    case 135:                       // 'false'\n      shift(135);                   // 'false'\n      break;\n    case 142:                       // 'from'\n      shift(142);                   // 'from'\n      break;\n    case 197:                       // 'null'\n      shift(197);                   // 'null'\n      break;\n    case 168:                       // 'json'\n      shift(168);                   // 'json'\n      break;\n    case 198:                       // 'object'\n      shift(198);                   // 'object'\n      break;\n    case 233:                       // 'select'\n      shift(233);                   // 'select'\n      break;\n    default:\n      shift(255);                   // 'true'\n    }\n    eventHandler.endNonterminal(\"FunctionName\", e0);\n  }\n\n  function try_FunctionName()\n  {\n    switch (l1)\n    {\n    case 6:                         // EQName^Token\n      shiftT(6);                    // EQName^Token\n      break;\n    case 71:                        // 'after'\n      shiftT(71);                   // 'after'\n      break;\n    case 74:                        // 'ancestor'\n      shiftT(74);                   // 'ancestor'\n      break;\n    case 75:                        // 'ancestor-or-self'\n      shiftT(75);                   // 'ancestor-or-self'\n      break;\n    case 76:                        // 'and'\n      shiftT(76);                   // 'and'\n      break;\n    case 80:                        // 'as'\n      shiftT(80);                   // 'as'\n      break;\n    case 81:                        // 'ascending'\n      shiftT(81);                   // 'ascending'\n      break;\n    case 85:                        // 'before'\n      shiftT(85);                   // 'before'\n      break;\n    case 89:                        // 'case'\n      shiftT(89);                   // 'case'\n      break;\n    case 90:                        // 'cast'\n      shiftT(90);                   // 'cast'\n      break;\n    case 91:                        // 'castable'\n      shiftT(91);                   // 'castable'\n      break;\n    case 94:                        // 'child'\n      shiftT(94);                   // 'child'\n      break;\n    case 95:                        // 'collation'\n      shiftT(95);                   // 'collation'\n      break;\n    case 104:                       // 'copy'\n      shiftT(104);                  // 'copy'\n      break;\n    case 106:                       // 'count'\n      shiftT(106);                  // 'count'\n      break;\n    case 109:                       // 'declare'\n      shiftT(109);                  // 'declare'\n      break;\n    case 110:                       // 'default'\n      shiftT(110);                  // 'default'\n      break;\n    case 111:                       // 'delete'\n      shiftT(111);                  // 'delete'\n      break;\n    case 112:                       // 'descendant'\n      shiftT(112);                  // 'descendant'\n      break;\n    case 113:                       // 'descendant-or-self'\n      shiftT(113);                  // 'descendant-or-self'\n      break;\n    case 114:                       // 'descending'\n      shiftT(114);                  // 'descending'\n      break;\n    case 119:                       // 'div'\n      shiftT(119);                  // 'div'\n      break;\n    case 120:                       // 'document'\n      shiftT(120);                  // 'document'\n      break;\n    case 123:                       // 'else'\n      shiftT(123);                  // 'else'\n      break;\n    case 124:                       // 'empty'\n      shiftT(124);                  // 'empty'\n      break;\n    case 127:                       // 'end'\n      shiftT(127);                  // 'end'\n      break;\n    case 129:                       // 'eq'\n      shiftT(129);                  // 'eq'\n      break;\n    case 130:                       // 'every'\n      shiftT(130);                  // 'every'\n      break;\n    case 132:                       // 'except'\n      shiftT(132);                  // 'except'\n      break;\n    case 136:                       // 'first'\n      shiftT(136);                  // 'first'\n      break;\n    case 137:                       // 'following'\n      shiftT(137);                  // 'following'\n      break;\n    case 138:                       // 'following-sibling'\n      shiftT(138);                  // 'following-sibling'\n      break;\n    case 139:                       // 'for'\n      shiftT(139);                  // 'for'\n      break;\n    case 148:                       // 'ge'\n      shiftT(148);                  // 'ge'\n      break;\n    case 150:                       // 'group'\n      shiftT(150);                  // 'group'\n      break;\n    case 152:                       // 'gt'\n      shiftT(152);                  // 'gt'\n      break;\n    case 153:                       // 'idiv'\n      shiftT(153);                  // 'idiv'\n      break;\n    case 155:                       // 'import'\n      shiftT(155);                  // 'import'\n      break;\n    case 161:                       // 'insert'\n      shiftT(161);                  // 'insert'\n      break;\n    case 162:                       // 'instance'\n      shiftT(162);                  // 'instance'\n      break;\n    case 164:                       // 'intersect'\n      shiftT(164);                  // 'intersect'\n      break;\n    case 165:                       // 'into'\n      shiftT(165);                  // 'into'\n      break;\n    case 166:                       // 'is'\n      shiftT(166);                  // 'is'\n      break;\n    case 173:                       // 'last'\n      shiftT(173);                  // 'last'\n      break;\n    case 175:                       // 'le'\n      shiftT(175);                  // 'le'\n      break;\n    case 177:                       // 'let'\n      shiftT(177);                  // 'let'\n      break;\n    case 181:                       // 'lt'\n      shiftT(181);                  // 'lt'\n      break;\n    case 183:                       // 'mod'\n      shiftT(183);                  // 'mod'\n      break;\n    case 184:                       // 'modify'\n      shiftT(184);                  // 'modify'\n      break;\n    case 185:                       // 'module'\n      shiftT(185);                  // 'module'\n      break;\n    case 187:                       // 'namespace'\n      shiftT(187);                  // 'namespace'\n      break;\n    case 189:                       // 'ne'\n      shiftT(189);                  // 'ne'\n      break;\n    case 202:                       // 'only'\n      shiftT(202);                  // 'only'\n      break;\n    case 204:                       // 'or'\n      shiftT(204);                  // 'or'\n      break;\n    case 205:                       // 'order'\n      shiftT(205);                  // 'order'\n      break;\n    case 206:                       // 'ordered'\n      shiftT(206);                  // 'ordered'\n      break;\n    case 210:                       // 'parent'\n      shiftT(210);                  // 'parent'\n      break;\n    case 216:                       // 'preceding'\n      shiftT(216);                  // 'preceding'\n      break;\n    case 217:                       // 'preceding-sibling'\n      shiftT(217);                  // 'preceding-sibling'\n      break;\n    case 222:                       // 'rename'\n      shiftT(222);                  // 'rename'\n      break;\n    case 223:                       // 'replace'\n      shiftT(223);                  // 'replace'\n      break;\n    case 224:                       // 'return'\n      shiftT(224);                  // 'return'\n      break;\n    case 228:                       // 'satisfies'\n      shiftT(228);                  // 'satisfies'\n      break;\n    case 234:                       // 'self'\n      shiftT(234);                  // 'self'\n      break;\n    case 240:                       // 'some'\n      shiftT(240);                  // 'some'\n      break;\n    case 241:                       // 'stable'\n      shiftT(241);                  // 'stable'\n      break;\n    case 242:                       // 'start'\n      shiftT(242);                  // 'start'\n      break;\n    case 253:                       // 'to'\n      shiftT(253);                  // 'to'\n      break;\n    case 254:                       // 'treat'\n      shiftT(254);                  // 'treat'\n      break;\n    case 256:                       // 'try'\n      shiftT(256);                  // 'try'\n      break;\n    case 260:                       // 'union'\n      shiftT(260);                  // 'union'\n      break;\n    case 262:                       // 'unordered'\n      shiftT(262);                  // 'unordered'\n      break;\n    case 266:                       // 'validate'\n      shiftT(266);                  // 'validate'\n      break;\n    case 272:                       // 'where'\n      shiftT(272);                  // 'where'\n      break;\n    case 276:                       // 'with'\n      shiftT(276);                  // 'with'\n      break;\n    case 170:                       // 'jsoniq'\n      shiftT(170);                  // 'jsoniq'\n      break;\n    case 73:                        // 'allowing'\n      shiftT(73);                   // 'allowing'\n      break;\n    case 82:                        // 'at'\n      shiftT(82);                   // 'at'\n      break;\n    case 84:                        // 'base-uri'\n      shiftT(84);                   // 'base-uri'\n      break;\n    case 86:                        // 'boundary-space'\n      shiftT(86);                   // 'boundary-space'\n      break;\n    case 87:                        // 'break'\n      shiftT(87);                   // 'break'\n      break;\n    case 92:                        // 'catch'\n      shiftT(92);                   // 'catch'\n      break;\n    case 99:                        // 'construction'\n      shiftT(99);                   // 'construction'\n      break;\n    case 102:                       // 'context'\n      shiftT(102);                  // 'context'\n      break;\n    case 103:                       // 'continue'\n      shiftT(103);                  // 'continue'\n      break;\n    case 105:                       // 'copy-namespaces'\n      shiftT(105);                  // 'copy-namespaces'\n      break;\n    case 107:                       // 'decimal-format'\n      shiftT(107);                  // 'decimal-format'\n      break;\n    case 126:                       // 'encoding'\n      shiftT(126);                  // 'encoding'\n      break;\n    case 133:                       // 'exit'\n      shiftT(133);                  // 'exit'\n      break;\n    case 134:                       // 'external'\n      shiftT(134);                  // 'external'\n      break;\n    case 143:                       // 'ft-option'\n      shiftT(143);                  // 'ft-option'\n      break;\n    case 156:                       // 'in'\n      shiftT(156);                  // 'in'\n      break;\n    case 157:                       // 'index'\n      shiftT(157);                  // 'index'\n      break;\n    case 163:                       // 'integrity'\n      shiftT(163);                  // 'integrity'\n      break;\n    case 174:                       // 'lax'\n      shiftT(174);                  // 'lax'\n      break;\n    case 195:                       // 'nodes'\n      shiftT(195);                  // 'nodes'\n      break;\n    case 203:                       // 'option'\n      shiftT(203);                  // 'option'\n      break;\n    case 207:                       // 'ordering'\n      shiftT(207);                  // 'ordering'\n      break;\n    case 226:                       // 'revalidation'\n      shiftT(226);                  // 'revalidation'\n      break;\n    case 229:                       // 'schema'\n      shiftT(229);                  // 'schema'\n      break;\n    case 232:                       // 'score'\n      shiftT(232);                  // 'score'\n      break;\n    case 239:                       // 'sliding'\n      shiftT(239);                  // 'sliding'\n      break;\n    case 245:                       // 'strict'\n      shiftT(245);                  // 'strict'\n      break;\n    case 257:                       // 'tumbling'\n      shiftT(257);                  // 'tumbling'\n      break;\n    case 258:                       // 'type'\n      shiftT(258);                  // 'type'\n      break;\n    case 263:                       // 'updating'\n      shiftT(263);                  // 'updating'\n      break;\n    case 267:                       // 'value'\n      shiftT(267);                  // 'value'\n      break;\n    case 268:                       // 'variable'\n      shiftT(268);                  // 'variable'\n      break;\n    case 269:                       // 'version'\n      shiftT(269);                  // 'version'\n      break;\n    case 273:                       // 'while'\n      shiftT(273);                  // 'while'\n      break;\n    case 98:                        // 'constraint'\n      shiftT(98);                   // 'constraint'\n      break;\n    case 179:                       // 'loop'\n      shiftT(179);                  // 'loop'\n      break;\n    case 225:                       // 'returning'\n      shiftT(225);                  // 'returning'\n      break;\n    case 78:                        // 'append'\n      shiftT(78);                   // 'append'\n      break;\n    case 135:                       // 'false'\n      shiftT(135);                  // 'false'\n      break;\n    case 142:                       // 'from'\n      shiftT(142);                  // 'from'\n      break;\n    case 197:                       // 'null'\n      shiftT(197);                  // 'null'\n      break;\n    case 168:                       // 'json'\n      shiftT(168);                  // 'json'\n      break;\n    case 198:                       // 'object'\n      shiftT(198);                  // 'object'\n      break;\n    case 233:                       // 'select'\n      shiftT(233);                  // 'select'\n      break;\n    default:\n      shiftT(255);                  // 'true'\n    }\n  }\n\n  function parse_NCName()\n  {\n    eventHandler.startNonterminal(\"NCName\", e0);\n    switch (l1)\n    {\n    case 19:                        // NCName^Token\n      shift(19);                    // NCName^Token\n      break;\n    case 71:                        // 'after'\n      shift(71);                    // 'after'\n      break;\n    case 76:                        // 'and'\n      shift(76);                    // 'and'\n      break;\n    case 80:                        // 'as'\n      shift(80);                    // 'as'\n      break;\n    case 81:                        // 'ascending'\n      shift(81);                    // 'ascending'\n      break;\n    case 85:                        // 'before'\n      shift(85);                    // 'before'\n      break;\n    case 89:                        // 'case'\n      shift(89);                    // 'case'\n      break;\n    case 90:                        // 'cast'\n      shift(90);                    // 'cast'\n      break;\n    case 91:                        // 'castable'\n      shift(91);                    // 'castable'\n      break;\n    case 95:                        // 'collation'\n      shift(95);                    // 'collation'\n      break;\n    case 106:                       // 'count'\n      shift(106);                   // 'count'\n      break;\n    case 110:                       // 'default'\n      shift(110);                   // 'default'\n      break;\n    case 114:                       // 'descending'\n      shift(114);                   // 'descending'\n      break;\n    case 119:                       // 'div'\n      shift(119);                   // 'div'\n      break;\n    case 123:                       // 'else'\n      shift(123);                   // 'else'\n      break;\n    case 124:                       // 'empty'\n      shift(124);                   // 'empty'\n      break;\n    case 127:                       // 'end'\n      shift(127);                   // 'end'\n      break;\n    case 129:                       // 'eq'\n      shift(129);                   // 'eq'\n      break;\n    case 132:                       // 'except'\n      shift(132);                   // 'except'\n      break;\n    case 139:                       // 'for'\n      shift(139);                   // 'for'\n      break;\n    case 148:                       // 'ge'\n      shift(148);                   // 'ge'\n      break;\n    case 150:                       // 'group'\n      shift(150);                   // 'group'\n      break;\n    case 152:                       // 'gt'\n      shift(152);                   // 'gt'\n      break;\n    case 153:                       // 'idiv'\n      shift(153);                   // 'idiv'\n      break;\n    case 162:                       // 'instance'\n      shift(162);                   // 'instance'\n      break;\n    case 164:                       // 'intersect'\n      shift(164);                   // 'intersect'\n      break;\n    case 165:                       // 'into'\n      shift(165);                   // 'into'\n      break;\n    case 166:                       // 'is'\n      shift(166);                   // 'is'\n      break;\n    case 175:                       // 'le'\n      shift(175);                   // 'le'\n      break;\n    case 177:                       // 'let'\n      shift(177);                   // 'let'\n      break;\n    case 181:                       // 'lt'\n      shift(181);                   // 'lt'\n      break;\n    case 183:                       // 'mod'\n      shift(183);                   // 'mod'\n      break;\n    case 184:                       // 'modify'\n      shift(184);                   // 'modify'\n      break;\n    case 189:                       // 'ne'\n      shift(189);                   // 'ne'\n      break;\n    case 202:                       // 'only'\n      shift(202);                   // 'only'\n      break;\n    case 204:                       // 'or'\n      shift(204);                   // 'or'\n      break;\n    case 205:                       // 'order'\n      shift(205);                   // 'order'\n      break;\n    case 224:                       // 'return'\n      shift(224);                   // 'return'\n      break;\n    case 228:                       // 'satisfies'\n      shift(228);                   // 'satisfies'\n      break;\n    case 241:                       // 'stable'\n      shift(241);                   // 'stable'\n      break;\n    case 242:                       // 'start'\n      shift(242);                   // 'start'\n      break;\n    case 253:                       // 'to'\n      shift(253);                   // 'to'\n      break;\n    case 254:                       // 'treat'\n      shift(254);                   // 'treat'\n      break;\n    case 260:                       // 'union'\n      shift(260);                   // 'union'\n      break;\n    case 272:                       // 'where'\n      shift(272);                   // 'where'\n      break;\n    case 276:                       // 'with'\n      shift(276);                   // 'with'\n      break;\n    case 74:                        // 'ancestor'\n      shift(74);                    // 'ancestor'\n      break;\n    case 75:                        // 'ancestor-or-self'\n      shift(75);                    // 'ancestor-or-self'\n      break;\n    case 83:                        // 'attribute'\n      shift(83);                    // 'attribute'\n      break;\n    case 94:                        // 'child'\n      shift(94);                    // 'child'\n      break;\n    case 97:                        // 'comment'\n      shift(97);                    // 'comment'\n      break;\n    case 104:                       // 'copy'\n      shift(104);                   // 'copy'\n      break;\n    case 109:                       // 'declare'\n      shift(109);                   // 'declare'\n      break;\n    case 111:                       // 'delete'\n      shift(111);                   // 'delete'\n      break;\n    case 112:                       // 'descendant'\n      shift(112);                   // 'descendant'\n      break;\n    case 113:                       // 'descendant-or-self'\n      shift(113);                   // 'descendant-or-self'\n      break;\n    case 120:                       // 'document'\n      shift(120);                   // 'document'\n      break;\n    case 121:                       // 'document-node'\n      shift(121);                   // 'document-node'\n      break;\n    case 122:                       // 'element'\n      shift(122);                   // 'element'\n      break;\n    case 125:                       // 'empty-sequence'\n      shift(125);                   // 'empty-sequence'\n      break;\n    case 130:                       // 'every'\n      shift(130);                   // 'every'\n      break;\n    case 136:                       // 'first'\n      shift(136);                   // 'first'\n      break;\n    case 137:                       // 'following'\n      shift(137);                   // 'following'\n      break;\n    case 138:                       // 'following-sibling'\n      shift(138);                   // 'following-sibling'\n      break;\n    case 147:                       // 'function'\n      shift(147);                   // 'function'\n      break;\n    case 154:                       // 'if'\n      shift(154);                   // 'if'\n      break;\n    case 155:                       // 'import'\n      shift(155);                   // 'import'\n      break;\n    case 161:                       // 'insert'\n      shift(161);                   // 'insert'\n      break;\n    case 167:                       // 'item'\n      shift(167);                   // 'item'\n      break;\n    case 173:                       // 'last'\n      shift(173);                   // 'last'\n      break;\n    case 185:                       // 'module'\n      shift(185);                   // 'module'\n      break;\n    case 187:                       // 'namespace'\n      shift(187);                   // 'namespace'\n      break;\n    case 188:                       // 'namespace-node'\n      shift(188);                   // 'namespace-node'\n      break;\n    case 194:                       // 'node'\n      shift(194);                   // 'node'\n      break;\n    case 206:                       // 'ordered'\n      shift(206);                   // 'ordered'\n      break;\n    case 210:                       // 'parent'\n      shift(210);                   // 'parent'\n      break;\n    case 216:                       // 'preceding'\n      shift(216);                   // 'preceding'\n      break;\n    case 217:                       // 'preceding-sibling'\n      shift(217);                   // 'preceding-sibling'\n      break;\n    case 220:                       // 'processing-instruction'\n      shift(220);                   // 'processing-instruction'\n      break;\n    case 222:                       // 'rename'\n      shift(222);                   // 'rename'\n      break;\n    case 223:                       // 'replace'\n      shift(223);                   // 'replace'\n      break;\n    case 230:                       // 'schema-attribute'\n      shift(230);                   // 'schema-attribute'\n      break;\n    case 231:                       // 'schema-element'\n      shift(231);                   // 'schema-element'\n      break;\n    case 234:                       // 'self'\n      shift(234);                   // 'self'\n      break;\n    case 240:                       // 'some'\n      shift(240);                   // 'some'\n      break;\n    case 248:                       // 'switch'\n      shift(248);                   // 'switch'\n      break;\n    case 249:                       // 'text'\n      shift(249);                   // 'text'\n      break;\n    case 256:                       // 'try'\n      shift(256);                   // 'try'\n      break;\n    case 259:                       // 'typeswitch'\n      shift(259);                   // 'typeswitch'\n      break;\n    case 262:                       // 'unordered'\n      shift(262);                   // 'unordered'\n      break;\n    case 266:                       // 'validate'\n      shift(266);                   // 'validate'\n      break;\n    case 268:                       // 'variable'\n      shift(268);                   // 'variable'\n      break;\n    case 170:                       // 'jsoniq'\n      shift(170);                   // 'jsoniq'\n      break;\n    case 73:                        // 'allowing'\n      shift(73);                    // 'allowing'\n      break;\n    case 82:                        // 'at'\n      shift(82);                    // 'at'\n      break;\n    case 84:                        // 'base-uri'\n      shift(84);                    // 'base-uri'\n      break;\n    case 86:                        // 'boundary-space'\n      shift(86);                    // 'boundary-space'\n      break;\n    case 87:                        // 'break'\n      shift(87);                    // 'break'\n      break;\n    case 92:                        // 'catch'\n      shift(92);                    // 'catch'\n      break;\n    case 99:                        // 'construction'\n      shift(99);                    // 'construction'\n      break;\n    case 102:                       // 'context'\n      shift(102);                   // 'context'\n      break;\n    case 103:                       // 'continue'\n      shift(103);                   // 'continue'\n      break;\n    case 105:                       // 'copy-namespaces'\n      shift(105);                   // 'copy-namespaces'\n      break;\n    case 107:                       // 'decimal-format'\n      shift(107);                   // 'decimal-format'\n      break;\n    case 126:                       // 'encoding'\n      shift(126);                   // 'encoding'\n      break;\n    case 133:                       // 'exit'\n      shift(133);                   // 'exit'\n      break;\n    case 134:                       // 'external'\n      shift(134);                   // 'external'\n      break;\n    case 143:                       // 'ft-option'\n      shift(143);                   // 'ft-option'\n      break;\n    case 156:                       // 'in'\n      shift(156);                   // 'in'\n      break;\n    case 157:                       // 'index'\n      shift(157);                   // 'index'\n      break;\n    case 163:                       // 'integrity'\n      shift(163);                   // 'integrity'\n      break;\n    case 174:                       // 'lax'\n      shift(174);                   // 'lax'\n      break;\n    case 195:                       // 'nodes'\n      shift(195);                   // 'nodes'\n      break;\n    case 203:                       // 'option'\n      shift(203);                   // 'option'\n      break;\n    case 207:                       // 'ordering'\n      shift(207);                   // 'ordering'\n      break;\n    case 226:                       // 'revalidation'\n      shift(226);                   // 'revalidation'\n      break;\n    case 229:                       // 'schema'\n      shift(229);                   // 'schema'\n      break;\n    case 232:                       // 'score'\n      shift(232);                   // 'score'\n      break;\n    case 239:                       // 'sliding'\n      shift(239);                   // 'sliding'\n      break;\n    case 245:                       // 'strict'\n      shift(245);                   // 'strict'\n      break;\n    case 257:                       // 'tumbling'\n      shift(257);                   // 'tumbling'\n      break;\n    case 258:                       // 'type'\n      shift(258);                   // 'type'\n      break;\n    case 263:                       // 'updating'\n      shift(263);                   // 'updating'\n      break;\n    case 267:                       // 'value'\n      shift(267);                   // 'value'\n      break;\n    case 269:                       // 'version'\n      shift(269);                   // 'version'\n      break;\n    case 273:                       // 'while'\n      shift(273);                   // 'while'\n      break;\n    case 98:                        // 'constraint'\n      shift(98);                    // 'constraint'\n      break;\n    case 179:                       // 'loop'\n      shift(179);                   // 'loop'\n      break;\n    case 225:                       // 'returning'\n      shift(225);                   // 'returning'\n      break;\n    case 78:                        // 'append'\n      shift(78);                    // 'append'\n      break;\n    case 135:                       // 'false'\n      shift(135);                   // 'false'\n      break;\n    case 142:                       // 'from'\n      shift(142);                   // 'from'\n      break;\n    case 197:                       // 'null'\n      shift(197);                   // 'null'\n      break;\n    case 168:                       // 'json'\n      shift(168);                   // 'json'\n      break;\n    case 198:                       // 'object'\n      shift(198);                   // 'object'\n      break;\n    case 233:                       // 'select'\n      shift(233);                   // 'select'\n      break;\n    default:\n      shift(255);                   // 'true'\n    }\n    eventHandler.endNonterminal(\"NCName\", e0);\n  }\n\n  function try_NCName()\n  {\n    switch (l1)\n    {\n    case 19:                        // NCName^Token\n      shiftT(19);                   // NCName^Token\n      break;\n    case 71:                        // 'after'\n      shiftT(71);                   // 'after'\n      break;\n    case 76:                        // 'and'\n      shiftT(76);                   // 'and'\n      break;\n    case 80:                        // 'as'\n      shiftT(80);                   // 'as'\n      break;\n    case 81:                        // 'ascending'\n      shiftT(81);                   // 'ascending'\n      break;\n    case 85:                        // 'before'\n      shiftT(85);                   // 'before'\n      break;\n    case 89:                        // 'case'\n      shiftT(89);                   // 'case'\n      break;\n    case 90:                        // 'cast'\n      shiftT(90);                   // 'cast'\n      break;\n    case 91:                        // 'castable'\n      shiftT(91);                   // 'castable'\n      break;\n    case 95:                        // 'collation'\n      shiftT(95);                   // 'collation'\n      break;\n    case 106:                       // 'count'\n      shiftT(106);                  // 'count'\n      break;\n    case 110:                       // 'default'\n      shiftT(110);                  // 'default'\n      break;\n    case 114:                       // 'descending'\n      shiftT(114);                  // 'descending'\n      break;\n    case 119:                       // 'div'\n      shiftT(119);                  // 'div'\n      break;\n    case 123:                       // 'else'\n      shiftT(123);                  // 'else'\n      break;\n    case 124:                       // 'empty'\n      shiftT(124);                  // 'empty'\n      break;\n    case 127:                       // 'end'\n      shiftT(127);                  // 'end'\n      break;\n    case 129:                       // 'eq'\n      shiftT(129);                  // 'eq'\n      break;\n    case 132:                       // 'except'\n      shiftT(132);                  // 'except'\n      break;\n    case 139:                       // 'for'\n      shiftT(139);                  // 'for'\n      break;\n    case 148:                       // 'ge'\n      shiftT(148);                  // 'ge'\n      break;\n    case 150:                       // 'group'\n      shiftT(150);                  // 'group'\n      break;\n    case 152:                       // 'gt'\n      shiftT(152);                  // 'gt'\n      break;\n    case 153:                       // 'idiv'\n      shiftT(153);                  // 'idiv'\n      break;\n    case 162:                       // 'instance'\n      shiftT(162);                  // 'instance'\n      break;\n    case 164:                       // 'intersect'\n      shiftT(164);                  // 'intersect'\n      break;\n    case 165:                       // 'into'\n      shiftT(165);                  // 'into'\n      break;\n    case 166:                       // 'is'\n      shiftT(166);                  // 'is'\n      break;\n    case 175:                       // 'le'\n      shiftT(175);                  // 'le'\n      break;\n    case 177:                       // 'let'\n      shiftT(177);                  // 'let'\n      break;\n    case 181:                       // 'lt'\n      shiftT(181);                  // 'lt'\n      break;\n    case 183:                       // 'mod'\n      shiftT(183);                  // 'mod'\n      break;\n    case 184:                       // 'modify'\n      shiftT(184);                  // 'modify'\n      break;\n    case 189:                       // 'ne'\n      shiftT(189);                  // 'ne'\n      break;\n    case 202:                       // 'only'\n      shiftT(202);                  // 'only'\n      break;\n    case 204:                       // 'or'\n      shiftT(204);                  // 'or'\n      break;\n    case 205:                       // 'order'\n      shiftT(205);                  // 'order'\n      break;\n    case 224:                       // 'return'\n      shiftT(224);                  // 'return'\n      break;\n    case 228:                       // 'satisfies'\n      shiftT(228);                  // 'satisfies'\n      break;\n    case 241:                       // 'stable'\n      shiftT(241);                  // 'stable'\n      break;\n    case 242:                       // 'start'\n      shiftT(242);                  // 'start'\n      break;\n    case 253:                       // 'to'\n      shiftT(253);                  // 'to'\n      break;\n    case 254:                       // 'treat'\n      shiftT(254);                  // 'treat'\n      break;\n    case 260:                       // 'union'\n      shiftT(260);                  // 'union'\n      break;\n    case 272:                       // 'where'\n      shiftT(272);                  // 'where'\n      break;\n    case 276:                       // 'with'\n      shiftT(276);                  // 'with'\n      break;\n    case 74:                        // 'ancestor'\n      shiftT(74);                   // 'ancestor'\n      break;\n    case 75:                        // 'ancestor-or-self'\n      shiftT(75);                   // 'ancestor-or-self'\n      break;\n    case 83:                        // 'attribute'\n      shiftT(83);                   // 'attribute'\n      break;\n    case 94:                        // 'child'\n      shiftT(94);                   // 'child'\n      break;\n    case 97:                        // 'comment'\n      shiftT(97);                   // 'comment'\n      break;\n    case 104:                       // 'copy'\n      shiftT(104);                  // 'copy'\n      break;\n    case 109:                       // 'declare'\n      shiftT(109);                  // 'declare'\n      break;\n    case 111:                       // 'delete'\n      shiftT(111);                  // 'delete'\n      break;\n    case 112:                       // 'descendant'\n      shiftT(112);                  // 'descendant'\n      break;\n    case 113:                       // 'descendant-or-self'\n      shiftT(113);                  // 'descendant-or-self'\n      break;\n    case 120:                       // 'document'\n      shiftT(120);                  // 'document'\n      break;\n    case 121:                       // 'document-node'\n      shiftT(121);                  // 'document-node'\n      break;\n    case 122:                       // 'element'\n      shiftT(122);                  // 'element'\n      break;\n    case 125:                       // 'empty-sequence'\n      shiftT(125);                  // 'empty-sequence'\n      break;\n    case 130:                       // 'every'\n      shiftT(130);                  // 'every'\n      break;\n    case 136:                       // 'first'\n      shiftT(136);                  // 'first'\n      break;\n    case 137:                       // 'following'\n      shiftT(137);                  // 'following'\n      break;\n    case 138:                       // 'following-sibling'\n      shiftT(138);                  // 'following-sibling'\n      break;\n    case 147:                       // 'function'\n      shiftT(147);                  // 'function'\n      break;\n    case 154:                       // 'if'\n      shiftT(154);                  // 'if'\n      break;\n    case 155:                       // 'import'\n      shiftT(155);                  // 'import'\n      break;\n    case 161:                       // 'insert'\n      shiftT(161);                  // 'insert'\n      break;\n    case 167:                       // 'item'\n      shiftT(167);                  // 'item'\n      break;\n    case 173:                       // 'last'\n      shiftT(173);                  // 'last'\n      break;\n    case 185:                       // 'module'\n      shiftT(185);                  // 'module'\n      break;\n    case 187:                       // 'namespace'\n      shiftT(187);                  // 'namespace'\n      break;\n    case 188:                       // 'namespace-node'\n      shiftT(188);                  // 'namespace-node'\n      break;\n    case 194:                       // 'node'\n      shiftT(194);                  // 'node'\n      break;\n    case 206:                       // 'ordered'\n      shiftT(206);                  // 'ordered'\n      break;\n    case 210:                       // 'parent'\n      shiftT(210);                  // 'parent'\n      break;\n    case 216:                       // 'preceding'\n      shiftT(216);                  // 'preceding'\n      break;\n    case 217:                       // 'preceding-sibling'\n      shiftT(217);                  // 'preceding-sibling'\n      break;\n    case 220:                       // 'processing-instruction'\n      shiftT(220);                  // 'processing-instruction'\n      break;\n    case 222:                       // 'rename'\n      shiftT(222);                  // 'rename'\n      break;\n    case 223:                       // 'replace'\n      shiftT(223);                  // 'replace'\n      break;\n    case 230:                       // 'schema-attribute'\n      shiftT(230);                  // 'schema-attribute'\n      break;\n    case 231:                       // 'schema-element'\n      shiftT(231);                  // 'schema-element'\n      break;\n    case 234:                       // 'self'\n      shiftT(234);                  // 'self'\n      break;\n    case 240:                       // 'some'\n      shiftT(240);                  // 'some'\n      break;\n    case 248:                       // 'switch'\n      shiftT(248);                  // 'switch'\n      break;\n    case 249:                       // 'text'\n      shiftT(249);                  // 'text'\n      break;\n    case 256:                       // 'try'\n      shiftT(256);                  // 'try'\n      break;\n    case 259:                       // 'typeswitch'\n      shiftT(259);                  // 'typeswitch'\n      break;\n    case 262:                       // 'unordered'\n      shiftT(262);                  // 'unordered'\n      break;\n    case 266:                       // 'validate'\n      shiftT(266);                  // 'validate'\n      break;\n    case 268:                       // 'variable'\n      shiftT(268);                  // 'variable'\n      break;\n    case 170:                       // 'jsoniq'\n      shiftT(170);                  // 'jsoniq'\n      break;\n    case 73:                        // 'allowing'\n      shiftT(73);                   // 'allowing'\n      break;\n    case 82:                        // 'at'\n      shiftT(82);                   // 'at'\n      break;\n    case 84:                        // 'base-uri'\n      shiftT(84);                   // 'base-uri'\n      break;\n    case 86:                        // 'boundary-space'\n      shiftT(86);                   // 'boundary-space'\n      break;\n    case 87:                        // 'break'\n      shiftT(87);                   // 'break'\n      break;\n    case 92:                        // 'catch'\n      shiftT(92);                   // 'catch'\n      break;\n    case 99:                        // 'construction'\n      shiftT(99);                   // 'construction'\n      break;\n    case 102:                       // 'context'\n      shiftT(102);                  // 'context'\n      break;\n    case 103:                       // 'continue'\n      shiftT(103);                  // 'continue'\n      break;\n    case 105:                       // 'copy-namespaces'\n      shiftT(105);                  // 'copy-namespaces'\n      break;\n    case 107:                       // 'decimal-format'\n      shiftT(107);                  // 'decimal-format'\n      break;\n    case 126:                       // 'encoding'\n      shiftT(126);                  // 'encoding'\n      break;\n    case 133:                       // 'exit'\n      shiftT(133);                  // 'exit'\n      break;\n    case 134:                       // 'external'\n      shiftT(134);                  // 'external'\n      break;\n    case 143:                       // 'ft-option'\n      shiftT(143);                  // 'ft-option'\n      break;\n    case 156:                       // 'in'\n      shiftT(156);                  // 'in'\n      break;\n    case 157:                       // 'index'\n      shiftT(157);                  // 'index'\n      break;\n    case 163:                       // 'integrity'\n      shiftT(163);                  // 'integrity'\n      break;\n    case 174:                       // 'lax'\n      shiftT(174);                  // 'lax'\n      break;\n    case 195:                       // 'nodes'\n      shiftT(195);                  // 'nodes'\n      break;\n    case 203:                       // 'option'\n      shiftT(203);                  // 'option'\n      break;\n    case 207:                       // 'ordering'\n      shiftT(207);                  // 'ordering'\n      break;\n    case 226:                       // 'revalidation'\n      shiftT(226);                  // 'revalidation'\n      break;\n    case 229:                       // 'schema'\n      shiftT(229);                  // 'schema'\n      break;\n    case 232:                       // 'score'\n      shiftT(232);                  // 'score'\n      break;\n    case 239:                       // 'sliding'\n      shiftT(239);                  // 'sliding'\n      break;\n    case 245:                       // 'strict'\n      shiftT(245);                  // 'strict'\n      break;\n    case 257:                       // 'tumbling'\n      shiftT(257);                  // 'tumbling'\n      break;\n    case 258:                       // 'type'\n      shiftT(258);                  // 'type'\n      break;\n    case 263:                       // 'updating'\n      shiftT(263);                  // 'updating'\n      break;\n    case 267:                       // 'value'\n      shiftT(267);                  // 'value'\n      break;\n    case 269:                       // 'version'\n      shiftT(269);                  // 'version'\n      break;\n    case 273:                       // 'while'\n      shiftT(273);                  // 'while'\n      break;\n    case 98:                        // 'constraint'\n      shiftT(98);                   // 'constraint'\n      break;\n    case 179:                       // 'loop'\n      shiftT(179);                  // 'loop'\n      break;\n    case 225:                       // 'returning'\n      shiftT(225);                  // 'returning'\n      break;\n    case 78:                        // 'append'\n      shiftT(78);                   // 'append'\n      break;\n    case 135:                       // 'false'\n      shiftT(135);                  // 'false'\n      break;\n    case 142:                       // 'from'\n      shiftT(142);                  // 'from'\n      break;\n    case 197:                       // 'null'\n      shiftT(197);                  // 'null'\n      break;\n    case 168:                       // 'json'\n      shiftT(168);                  // 'json'\n      break;\n    case 198:                       // 'object'\n      shiftT(198);                  // 'object'\n      break;\n    case 233:                       // 'select'\n      shiftT(233);                  // 'select'\n      break;\n    default:\n      shiftT(255);                  // 'true'\n    }\n  }\n\n  function parse_MainModule()\n  {\n    eventHandler.startNonterminal(\"MainModule\", e0);\n    parse_Prolog();\n    whitespace();\n    parse_Program();\n    eventHandler.endNonterminal(\"MainModule\", e0);\n  }\n\n  function parse_Program()\n  {\n    eventHandler.startNonterminal(\"Program\", e0);\n    parse_StatementsAndOptionalExpr();\n    eventHandler.endNonterminal(\"Program\", e0);\n  }\n\n  function parse_Statements()\n  {\n    eventHandler.startNonterminal(\"Statements\", e0);\n    for (;;)\n    {\n      lookahead1W(283);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | EOF | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' |\n                                    // ';' | '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|' | '}'\n      switch (l1)\n      {\n      case 35:                      // '('\n        lookahead2W(269);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | ')' | '+' | '-' | '/' | '//' |\n                                    // '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n        break;\n      case 36:                      // '(#'\n        lookahead2(242);            // EQName^Token | S | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'structured-item' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' |\n                                    // 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' | 'value' |\n                                    // 'variable' | 'version' | 'where' | 'while' | 'with'\n        break;\n      case 47:                      // '/'\n        lookahead2W(285);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | EOF | '!' | '!=' | '$' | '$$' | '%' | '(' | '(:' | '*' | '+' | ',' | '-' |\n                                    // ';' | '<' | '<!--' | '<<' | '<=' | '<?' | '=' | '>' | '>=' | '>>' | '[' |\n                                    // 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' |\n                                    // 'array' | 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'contains' |\n                                    // 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'structured-item' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' |\n                                    // 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' | 'value' |\n                                    // 'variable' | 'version' | 'where' | 'while' | 'with' | '{' | '{|' | '|' | '||' |\n                                    // '}'\n        break;\n      case 48:                      // '//'\n        lookahead2W(259);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(:' | '<' | '<!--' | '<?' | '[' | 'after' |\n                                    // 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' |\n                                    // 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'false' | 'first' | 'following' | 'following-sibling' |\n                                    // 'for' | 'from' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' |\n                                    // 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'json-item' | 'jsoniq' | 'last' |\n                                    // 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' |\n                                    // 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' | 'sliding' |\n                                    // 'some' | 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' |\n                                    // 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | '{' | '{|'\n        break;\n      case 55:                      // '<'\n        lookahead2(4);              // QName\n        break;\n      case 56:                      // '<!--'\n        lookahead2(1);              // DirCommentContents\n        break;\n      case 60:                      // '<?'\n        lookahead2(3);              // PITarget\n        break;\n      case 69:                      // '['\n        lookahead2W(272);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | ']' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n        break;\n      case 78:                      // 'append'\n        lookahead2W(268);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '#' | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' |\n                                    // '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n        break;\n      case 133:                     // 'exit'\n        lookahead2W(147);           // S^WS | '#' | '(' | '(:' | 'returning'\n        break;\n      case 139:                     // 'for'\n        lookahead2W(179);           // S^WS | '#' | '$' | '(' | '(:' | 'sliding' | 'tumbling'\n        break;\n      case 161:                     // 'insert'\n        lookahead2W(275);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // NCName^Token | S^WS | '#' | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n        break;\n      case 177:                     // 'let'\n        lookahead2W(166);           // S^WS | '#' | '$' | '(' | '(:' | 'score'\n        break;\n      case 187:                     // 'namespace'\n        lookahead2W(246);           // NCName^Token | S^WS | '#' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' |\n                                    // 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | '{'\n        break;\n      case 220:                     // 'processing-instruction'\n        lookahead2W(244);           // NCName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' |\n                                    // 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | '{'\n        break;\n      case 223:                     // 'replace'\n        lookahead2W(170);           // S^WS | '#' | '(' | '(:' | 'node' | 'value'\n        break;\n      case 266:                     // 'validate'\n        lookahead2W(188);           // S^WS | '#' | '(' | '(:' | 'lax' | 'strict' | 'type' | '{'\n        break;\n      case 281:                     // '{'\n        lookahead2W(282);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // NCName^Token | S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' |\n                                    // '//' | ';' | '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|' | '}'\n        break;\n      case 283:                     // '{|'\n        lookahead2W(273);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|' | '|}'\n        break;\n      case 31:                      // '$'\n      case 33:                      // '%'\n        lookahead2W(245);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n        break;\n      case 83:                      // 'attribute'\n      case 122:                     // 'element'\n        lookahead2W(252);           // EQName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' | '{'\n        break;\n      case 87:                      // 'break'\n      case 103:                     // 'continue'\n        lookahead2W(145);           // S^WS | '#' | '(' | '(:' | 'loop'\n        break;\n      case 97:                      // 'comment'\n      case 249:                     // 'text'\n        lookahead2W(97);            // S^WS | '#' | '(:' | '{'\n        break;\n      case 111:                     // 'delete'\n      case 222:                     // 'rename'\n        lookahead2W(260);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '#' | '$' | '$$' | '%' | '(' | '(:' | '<' | '<!--' | '<?' | '[' |\n                                    // 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' |\n                                    // 'array' | 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'false' | 'first' | 'following' | 'following-sibling' |\n                                    // 'for' | 'from' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' |\n                                    // 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'json-item' | 'jsoniq' | 'last' |\n                                    // 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' |\n                                    // 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' | 'sliding' |\n                                    // 'some' | 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' |\n                                    // 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | '{' | '{|'\n        break;\n      case 41:                      // '+'\n      case 43:                      // '-'\n      case 196:                     // 'not'\n        lookahead2W(265);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'structured-item' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' |\n                                    // 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' | 'value' |\n                                    // 'variable' | 'version' | 'where' | 'while' | 'with' | '{' | '{|'\n        break;\n      case 135:                     // 'false'\n      case 197:                     // 'null'\n      case 255:                     // 'true'\n        lookahead2W(210);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '.' | '/' |\n                                    // '//' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' |\n                                    // 'castable' | 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' |\n                                    // 'instance' | 'intersect' | 'is' | 'le' | 'lt' | 'mod' | 'ne' | 'or' | 'to' |\n                                    // 'treat' | 'union' | '|' | '||' | '}'\n        break;\n      case 104:                     // 'copy'\n      case 130:                     // 'every'\n      case 240:                     // 'some'\n      case 268:                     // 'variable'\n        lookahead2W(143);           // S^WS | '#' | '$' | '(' | '(:'\n        break;\n      case 120:                     // 'document'\n      case 206:                     // 'ordered'\n      case 256:                     // 'try'\n      case 262:                     // 'unordered'\n        lookahead2W(148);           // S^WS | '#' | '(' | '(:' | '{'\n        break;\n      case 8:                       // IntegerLiteral\n      case 9:                       // DecimalLiteral\n      case 10:                      // DoubleLiteral\n      case 11:                      // StringLiteral\n      case 32:                      // '$$'\n        lookahead2W(209);           // S^WS | EOF | '!' | '!=' | '(' | '(:' | '*' | '+' | ',' | '-' | '.' | '/' | '//' |\n                                    // ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' |\n                                    // 'castable' | 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' |\n                                    // 'instance' | 'intersect' | 'is' | 'le' | 'lt' | 'mod' | 'ne' | 'or' | 'to' |\n                                    // 'treat' | 'union' | '|' | '||' | '}'\n        break;\n      case 79:                      // 'array'\n      case 121:                     // 'document-node'\n      case 125:                     // 'empty-sequence'\n      case 167:                     // 'item'\n      case 169:                     // 'json-item'\n      case 188:                     // 'namespace-node'\n      case 194:                     // 'node'\n      case 230:                     // 'schema-attribute'\n      case 231:                     // 'schema-element'\n      case 247:                     // 'structured-item'\n        lookahead2W(20);            // S^WS | '#' | '(:'\n        break;\n      case 6:                       // EQName^Token\n      case 71:                      // 'after'\n      case 73:                      // 'allowing'\n      case 74:                      // 'ancestor'\n      case 75:                      // 'ancestor-or-self'\n      case 76:                      // 'and'\n      case 80:                      // 'as'\n      case 81:                      // 'ascending'\n      case 82:                      // 'at'\n      case 84:                      // 'base-uri'\n      case 85:                      // 'before'\n      case 86:                      // 'boundary-space'\n      case 89:                      // 'case'\n      case 90:                      // 'cast'\n      case 91:                      // 'castable'\n      case 92:                      // 'catch'\n      case 94:                      // 'child'\n      case 95:                      // 'collation'\n      case 98:                      // 'constraint'\n      case 99:                      // 'construction'\n      case 102:                     // 'context'\n      case 105:                     // 'copy-namespaces'\n      case 106:                     // 'count'\n      case 107:                     // 'decimal-format'\n      case 109:                     // 'declare'\n      case 110:                     // 'default'\n      case 112:                     // 'descendant'\n      case 113:                     // 'descendant-or-self'\n      case 114:                     // 'descending'\n      case 119:                     // 'div'\n      case 123:                     // 'else'\n      case 124:                     // 'empty'\n      case 126:                     // 'encoding'\n      case 127:                     // 'end'\n      case 129:                     // 'eq'\n      case 132:                     // 'except'\n      case 134:                     // 'external'\n      case 136:                     // 'first'\n      case 137:                     // 'following'\n      case 138:                     // 'following-sibling'\n      case 142:                     // 'from'\n      case 143:                     // 'ft-option'\n      case 147:                     // 'function'\n      case 148:                     // 'ge'\n      case 150:                     // 'group'\n      case 152:                     // 'gt'\n      case 153:                     // 'idiv'\n      case 154:                     // 'if'\n      case 155:                     // 'import'\n      case 156:                     // 'in'\n      case 157:                     // 'index'\n      case 162:                     // 'instance'\n      case 163:                     // 'integrity'\n      case 164:                     // 'intersect'\n      case 165:                     // 'into'\n      case 166:                     // 'is'\n      case 168:                     // 'json'\n      case 170:                     // 'jsoniq'\n      case 173:                     // 'last'\n      case 174:                     // 'lax'\n      case 175:                     // 'le'\n      case 179:                     // 'loop'\n      case 181:                     // 'lt'\n      case 183:                     // 'mod'\n      case 184:                     // 'modify'\n      case 185:                     // 'module'\n      case 189:                     // 'ne'\n      case 195:                     // 'nodes'\n      case 198:                     // 'object'\n      case 202:                     // 'only'\n      case 203:                     // 'option'\n      case 204:                     // 'or'\n      case 205:                     // 'order'\n      case 207:                     // 'ordering'\n      case 210:                     // 'parent'\n      case 216:                     // 'preceding'\n      case 217:                     // 'preceding-sibling'\n      case 224:                     // 'return'\n      case 225:                     // 'returning'\n      case 226:                     // 'revalidation'\n      case 228:                     // 'satisfies'\n      case 229:                     // 'schema'\n      case 232:                     // 'score'\n      case 233:                     // 'select'\n      case 234:                     // 'self'\n      case 239:                     // 'sliding'\n      case 241:                     // 'stable'\n      case 242:                     // 'start'\n      case 245:                     // 'strict'\n      case 248:                     // 'switch'\n      case 253:                     // 'to'\n      case 254:                     // 'treat'\n      case 257:                     // 'tumbling'\n      case 258:                     // 'type'\n      case 259:                     // 'typeswitch'\n      case 260:                     // 'union'\n      case 263:                     // 'updating'\n      case 267:                     // 'value'\n      case 269:                     // 'version'\n      case 272:                     // 'where'\n      case 273:                     // 'while'\n      case 276:                     // 'with'\n        lookahead2W(95);            // S^WS | '#' | '(' | '(:'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 25                  // EOF\n       && lk != 54                  // ';'\n       && lk != 287                 // '}'\n       && lk != 12808               // IntegerLiteral EOF\n       && lk != 12809               // DecimalLiteral EOF\n       && lk != 12810               // DoubleLiteral EOF\n       && lk != 12811               // StringLiteral EOF\n       && lk != 12832               // '$$' EOF\n       && lk != 12847               // '/' EOF\n       && lk != 12935               // 'false' EOF\n       && lk != 12997               // 'null' EOF\n       && lk != 13055               // 'true' EOF\n       && lk != 16140               // 'variable' '$'\n       && lk != 21512               // IntegerLiteral ','\n       && lk != 21513               // DecimalLiteral ','\n       && lk != 21514               // DoubleLiteral ','\n       && lk != 21515               // StringLiteral ','\n       && lk != 21536               // '$$' ','\n       && lk != 21551               // '/' ','\n       && lk != 21639               // 'false' ','\n       && lk != 21701               // 'null' ','\n       && lk != 21759               // 'true' ','\n       && lk != 27656               // IntegerLiteral ';'\n       && lk != 27657               // DecimalLiteral ';'\n       && lk != 27658               // DoubleLiteral ';'\n       && lk != 27659               // StringLiteral ';'\n       && lk != 27680               // '$$' ';'\n       && lk != 27695               // '/' ';'\n       && lk != 27783               // 'false' ';'\n       && lk != 27845               // 'null' ';'\n       && lk != 27903               // 'true' ';'\n       && lk != 91735               // 'break' 'loop'\n       && lk != 91751               // 'continue' 'loop'\n       && lk != 115333              // 'exit' 'returning'\n       && lk != 146952              // IntegerLiteral '}'\n       && lk != 146953              // DecimalLiteral '}'\n       && lk != 146954              // DoubleLiteral '}'\n       && lk != 146955              // StringLiteral '}'\n       && lk != 146976              // '$$' '}'\n       && lk != 146991              // '/' '}'\n       && lk != 147079              // 'false' '}'\n       && lk != 147141              // 'null' '}'\n       && lk != 147199)             // 'true' '}'\n      {\n        lk = memoized(8, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            try_Statement();\n            lk = -1;\n          }\n          catch (p1A)\n          {\n            lk = -2;\n          }\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(8, e0, lk);\n        }\n      }\n      if (lk != -1\n       && lk != 54                  // ';'\n       && lk != 16140               // 'variable' '$'\n       && lk != 27656               // IntegerLiteral ';'\n       && lk != 27657               // DecimalLiteral ';'\n       && lk != 27658               // DoubleLiteral ';'\n       && lk != 27659               // StringLiteral ';'\n       && lk != 27680               // '$$' ';'\n       && lk != 27695               // '/' ';'\n       && lk != 27783               // 'false' ';'\n       && lk != 27845               // 'null' ';'\n       && lk != 27903               // 'true' ';'\n       && lk != 91735               // 'break' 'loop'\n       && lk != 91751               // 'continue' 'loop'\n       && lk != 115333)             // 'exit' 'returning'\n      {\n        break;\n      }\n      whitespace();\n      parse_Statement();\n    }\n    eventHandler.endNonterminal(\"Statements\", e0);\n  }\n\n  function try_Statements()\n  {\n    for (;;)\n    {\n      lookahead1W(283);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | EOF | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' |\n                                    // ';' | '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|' | '}'\n      switch (l1)\n      {\n      case 35:                      // '('\n        lookahead2W(269);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | ')' | '+' | '-' | '/' | '//' |\n                                    // '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n        break;\n      case 36:                      // '(#'\n        lookahead2(242);            // EQName^Token | S | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'structured-item' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' |\n                                    // 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' | 'value' |\n                                    // 'variable' | 'version' | 'where' | 'while' | 'with'\n        break;\n      case 47:                      // '/'\n        lookahead2W(285);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | EOF | '!' | '!=' | '$' | '$$' | '%' | '(' | '(:' | '*' | '+' | ',' | '-' |\n                                    // ';' | '<' | '<!--' | '<<' | '<=' | '<?' | '=' | '>' | '>=' | '>>' | '[' |\n                                    // 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' |\n                                    // 'array' | 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'contains' |\n                                    // 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'structured-item' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' |\n                                    // 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' | 'value' |\n                                    // 'variable' | 'version' | 'where' | 'while' | 'with' | '{' | '{|' | '|' | '||' |\n                                    // '}'\n        break;\n      case 48:                      // '//'\n        lookahead2W(259);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(:' | '<' | '<!--' | '<?' | '[' | 'after' |\n                                    // 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' |\n                                    // 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'false' | 'first' | 'following' | 'following-sibling' |\n                                    // 'for' | 'from' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' |\n                                    // 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'json-item' | 'jsoniq' | 'last' |\n                                    // 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' |\n                                    // 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' | 'sliding' |\n                                    // 'some' | 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' |\n                                    // 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | '{' | '{|'\n        break;\n      case 55:                      // '<'\n        lookahead2(4);              // QName\n        break;\n      case 56:                      // '<!--'\n        lookahead2(1);              // DirCommentContents\n        break;\n      case 60:                      // '<?'\n        lookahead2(3);              // PITarget\n        break;\n      case 69:                      // '['\n        lookahead2W(272);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | ']' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n        break;\n      case 78:                      // 'append'\n        lookahead2W(268);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '#' | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' |\n                                    // '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n        break;\n      case 133:                     // 'exit'\n        lookahead2W(147);           // S^WS | '#' | '(' | '(:' | 'returning'\n        break;\n      case 139:                     // 'for'\n        lookahead2W(179);           // S^WS | '#' | '$' | '(' | '(:' | 'sliding' | 'tumbling'\n        break;\n      case 161:                     // 'insert'\n        lookahead2W(275);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // NCName^Token | S^WS | '#' | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n        break;\n      case 177:                     // 'let'\n        lookahead2W(166);           // S^WS | '#' | '$' | '(' | '(:' | 'score'\n        break;\n      case 187:                     // 'namespace'\n        lookahead2W(246);           // NCName^Token | S^WS | '#' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' |\n                                    // 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | '{'\n        break;\n      case 220:                     // 'processing-instruction'\n        lookahead2W(244);           // NCName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' |\n                                    // 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | '{'\n        break;\n      case 223:                     // 'replace'\n        lookahead2W(170);           // S^WS | '#' | '(' | '(:' | 'node' | 'value'\n        break;\n      case 266:                     // 'validate'\n        lookahead2W(188);           // S^WS | '#' | '(' | '(:' | 'lax' | 'strict' | 'type' | '{'\n        break;\n      case 281:                     // '{'\n        lookahead2W(282);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // NCName^Token | S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' |\n                                    // '//' | ';' | '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|' | '}'\n        break;\n      case 283:                     // '{|'\n        lookahead2W(273);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|' | '|}'\n        break;\n      case 31:                      // '$'\n      case 33:                      // '%'\n        lookahead2W(245);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n        break;\n      case 83:                      // 'attribute'\n      case 122:                     // 'element'\n        lookahead2W(252);           // EQName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' | '{'\n        break;\n      case 87:                      // 'break'\n      case 103:                     // 'continue'\n        lookahead2W(145);           // S^WS | '#' | '(' | '(:' | 'loop'\n        break;\n      case 97:                      // 'comment'\n      case 249:                     // 'text'\n        lookahead2W(97);            // S^WS | '#' | '(:' | '{'\n        break;\n      case 111:                     // 'delete'\n      case 222:                     // 'rename'\n        lookahead2W(260);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '#' | '$' | '$$' | '%' | '(' | '(:' | '<' | '<!--' | '<?' | '[' |\n                                    // 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' |\n                                    // 'array' | 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'false' | 'first' | 'following' | 'following-sibling' |\n                                    // 'for' | 'from' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' |\n                                    // 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'json-item' | 'jsoniq' | 'last' |\n                                    // 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' |\n                                    // 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' | 'sliding' |\n                                    // 'some' | 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' |\n                                    // 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | '{' | '{|'\n        break;\n      case 41:                      // '+'\n      case 43:                      // '-'\n      case 196:                     // 'not'\n        lookahead2W(265);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'structured-item' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' |\n                                    // 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' | 'value' |\n                                    // 'variable' | 'version' | 'where' | 'while' | 'with' | '{' | '{|'\n        break;\n      case 135:                     // 'false'\n      case 197:                     // 'null'\n      case 255:                     // 'true'\n        lookahead2W(210);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '.' | '/' |\n                                    // '//' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' |\n                                    // 'castable' | 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' |\n                                    // 'instance' | 'intersect' | 'is' | 'le' | 'lt' | 'mod' | 'ne' | 'or' | 'to' |\n                                    // 'treat' | 'union' | '|' | '||' | '}'\n        break;\n      case 104:                     // 'copy'\n      case 130:                     // 'every'\n      case 240:                     // 'some'\n      case 268:                     // 'variable'\n        lookahead2W(143);           // S^WS | '#' | '$' | '(' | '(:'\n        break;\n      case 120:                     // 'document'\n      case 206:                     // 'ordered'\n      case 256:                     // 'try'\n      case 262:                     // 'unordered'\n        lookahead2W(148);           // S^WS | '#' | '(' | '(:' | '{'\n        break;\n      case 8:                       // IntegerLiteral\n      case 9:                       // DecimalLiteral\n      case 10:                      // DoubleLiteral\n      case 11:                      // StringLiteral\n      case 32:                      // '$$'\n        lookahead2W(209);           // S^WS | EOF | '!' | '!=' | '(' | '(:' | '*' | '+' | ',' | '-' | '.' | '/' | '//' |\n                                    // ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' |\n                                    // 'castable' | 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' |\n                                    // 'instance' | 'intersect' | 'is' | 'le' | 'lt' | 'mod' | 'ne' | 'or' | 'to' |\n                                    // 'treat' | 'union' | '|' | '||' | '}'\n        break;\n      case 79:                      // 'array'\n      case 121:                     // 'document-node'\n      case 125:                     // 'empty-sequence'\n      case 167:                     // 'item'\n      case 169:                     // 'json-item'\n      case 188:                     // 'namespace-node'\n      case 194:                     // 'node'\n      case 230:                     // 'schema-attribute'\n      case 231:                     // 'schema-element'\n      case 247:                     // 'structured-item'\n        lookahead2W(20);            // S^WS | '#' | '(:'\n        break;\n      case 6:                       // EQName^Token\n      case 71:                      // 'after'\n      case 73:                      // 'allowing'\n      case 74:                      // 'ancestor'\n      case 75:                      // 'ancestor-or-self'\n      case 76:                      // 'and'\n      case 80:                      // 'as'\n      case 81:                      // 'ascending'\n      case 82:                      // 'at'\n      case 84:                      // 'base-uri'\n      case 85:                      // 'before'\n      case 86:                      // 'boundary-space'\n      case 89:                      // 'case'\n      case 90:                      // 'cast'\n      case 91:                      // 'castable'\n      case 92:                      // 'catch'\n      case 94:                      // 'child'\n      case 95:                      // 'collation'\n      case 98:                      // 'constraint'\n      case 99:                      // 'construction'\n      case 102:                     // 'context'\n      case 105:                     // 'copy-namespaces'\n      case 106:                     // 'count'\n      case 107:                     // 'decimal-format'\n      case 109:                     // 'declare'\n      case 110:                     // 'default'\n      case 112:                     // 'descendant'\n      case 113:                     // 'descendant-or-self'\n      case 114:                     // 'descending'\n      case 119:                     // 'div'\n      case 123:                     // 'else'\n      case 124:                     // 'empty'\n      case 126:                     // 'encoding'\n      case 127:                     // 'end'\n      case 129:                     // 'eq'\n      case 132:                     // 'except'\n      case 134:                     // 'external'\n      case 136:                     // 'first'\n      case 137:                     // 'following'\n      case 138:                     // 'following-sibling'\n      case 142:                     // 'from'\n      case 143:                     // 'ft-option'\n      case 147:                     // 'function'\n      case 148:                     // 'ge'\n      case 150:                     // 'group'\n      case 152:                     // 'gt'\n      case 153:                     // 'idiv'\n      case 154:                     // 'if'\n      case 155:                     // 'import'\n      case 156:                     // 'in'\n      case 157:                     // 'index'\n      case 162:                     // 'instance'\n      case 163:                     // 'integrity'\n      case 164:                     // 'intersect'\n      case 165:                     // 'into'\n      case 166:                     // 'is'\n      case 168:                     // 'json'\n      case 170:                     // 'jsoniq'\n      case 173:                     // 'last'\n      case 174:                     // 'lax'\n      case 175:                     // 'le'\n      case 179:                     // 'loop'\n      case 181:                     // 'lt'\n      case 183:                     // 'mod'\n      case 184:                     // 'modify'\n      case 185:                     // 'module'\n      case 189:                     // 'ne'\n      case 195:                     // 'nodes'\n      case 198:                     // 'object'\n      case 202:                     // 'only'\n      case 203:                     // 'option'\n      case 204:                     // 'or'\n      case 205:                     // 'order'\n      case 207:                     // 'ordering'\n      case 210:                     // 'parent'\n      case 216:                     // 'preceding'\n      case 217:                     // 'preceding-sibling'\n      case 224:                     // 'return'\n      case 225:                     // 'returning'\n      case 226:                     // 'revalidation'\n      case 228:                     // 'satisfies'\n      case 229:                     // 'schema'\n      case 232:                     // 'score'\n      case 233:                     // 'select'\n      case 234:                     // 'self'\n      case 239:                     // 'sliding'\n      case 241:                     // 'stable'\n      case 242:                     // 'start'\n      case 245:                     // 'strict'\n      case 248:                     // 'switch'\n      case 253:                     // 'to'\n      case 254:                     // 'treat'\n      case 257:                     // 'tumbling'\n      case 258:                     // 'type'\n      case 259:                     // 'typeswitch'\n      case 260:                     // 'union'\n      case 263:                     // 'updating'\n      case 267:                     // 'value'\n      case 269:                     // 'version'\n      case 272:                     // 'where'\n      case 273:                     // 'while'\n      case 276:                     // 'with'\n        lookahead2W(95);            // S^WS | '#' | '(' | '(:'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 25                  // EOF\n       && lk != 54                  // ';'\n       && lk != 287                 // '}'\n       && lk != 12808               // IntegerLiteral EOF\n       && lk != 12809               // DecimalLiteral EOF\n       && lk != 12810               // DoubleLiteral EOF\n       && lk != 12811               // StringLiteral EOF\n       && lk != 12832               // '$$' EOF\n       && lk != 12847               // '/' EOF\n       && lk != 12935               // 'false' EOF\n       && lk != 12997               // 'null' EOF\n       && lk != 13055               // 'true' EOF\n       && lk != 16140               // 'variable' '$'\n       && lk != 21512               // IntegerLiteral ','\n       && lk != 21513               // DecimalLiteral ','\n       && lk != 21514               // DoubleLiteral ','\n       && lk != 21515               // StringLiteral ','\n       && lk != 21536               // '$$' ','\n       && lk != 21551               // '/' ','\n       && lk != 21639               // 'false' ','\n       && lk != 21701               // 'null' ','\n       && lk != 21759               // 'true' ','\n       && lk != 27656               // IntegerLiteral ';'\n       && lk != 27657               // DecimalLiteral ';'\n       && lk != 27658               // DoubleLiteral ';'\n       && lk != 27659               // StringLiteral ';'\n       && lk != 27680               // '$$' ';'\n       && lk != 27695               // '/' ';'\n       && lk != 27783               // 'false' ';'\n       && lk != 27845               // 'null' ';'\n       && lk != 27903               // 'true' ';'\n       && lk != 91735               // 'break' 'loop'\n       && lk != 91751               // 'continue' 'loop'\n       && lk != 115333              // 'exit' 'returning'\n       && lk != 146952              // IntegerLiteral '}'\n       && lk != 146953              // DecimalLiteral '}'\n       && lk != 146954              // DoubleLiteral '}'\n       && lk != 146955              // StringLiteral '}'\n       && lk != 146976              // '$$' '}'\n       && lk != 146991              // '/' '}'\n       && lk != 147079              // 'false' '}'\n       && lk != 147141              // 'null' '}'\n       && lk != 147199)             // 'true' '}'\n      {\n        lk = memoized(8, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            try_Statement();\n            memoize(8, e0A, -1);\n            continue;\n          }\n          catch (p1A)\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            memoize(8, e0A, -2);\n            break;\n          }\n        }\n      }\n      if (lk != -1\n       && lk != 54                  // ';'\n       && lk != 16140               // 'variable' '$'\n       && lk != 27656               // IntegerLiteral ';'\n       && lk != 27657               // DecimalLiteral ';'\n       && lk != 27658               // DoubleLiteral ';'\n       && lk != 27659               // StringLiteral ';'\n       && lk != 27680               // '$$' ';'\n       && lk != 27695               // '/' ';'\n       && lk != 27783               // 'false' ';'\n       && lk != 27845               // 'null' ';'\n       && lk != 27903               // 'true' ';'\n       && lk != 91735               // 'break' 'loop'\n       && lk != 91751               // 'continue' 'loop'\n       && lk != 115333)             // 'exit' 'returning'\n      {\n        break;\n      }\n      try_Statement();\n    }\n  }\n\n  function parse_StatementsAndExpr()\n  {\n    eventHandler.startNonterminal(\"StatementsAndExpr\", e0);\n    parse_Statements();\n    whitespace();\n    parse_Expr();\n    eventHandler.endNonterminal(\"StatementsAndExpr\", e0);\n  }\n\n  function try_StatementsAndExpr()\n  {\n    try_Statements();\n    try_Expr();\n  }\n\n  function parse_StatementsAndOptionalExpr()\n  {\n    eventHandler.startNonterminal(\"StatementsAndOptionalExpr\", e0);\n    parse_Statements();\n    if (l1 != 25                    // EOF\n     && l1 != 287)                  // '}'\n    {\n      whitespace();\n      parse_Expr();\n    }\n    eventHandler.endNonterminal(\"StatementsAndOptionalExpr\", e0);\n  }\n\n  function try_StatementsAndOptionalExpr()\n  {\n    try_Statements();\n    if (l1 != 25                    // EOF\n     && l1 != 287)                  // '}'\n    {\n      try_Expr();\n    }\n  }\n\n  function parse_Statement()\n  {\n    eventHandler.startNonterminal(\"Statement\", e0);\n    switch (l1)\n    {\n    case 133:                       // 'exit'\n      lookahead2W(147);             // S^WS | '#' | '(' | '(:' | 'returning'\n      break;\n    case 139:                       // 'for'\n      lookahead2W(179);             // S^WS | '#' | '$' | '(' | '(:' | 'sliding' | 'tumbling'\n      break;\n    case 177:                       // 'let'\n      lookahead2W(166);             // S^WS | '#' | '$' | '(' | '(:' | 'score'\n      break;\n    case 256:                       // 'try'\n      lookahead2W(148);             // S^WS | '#' | '(' | '(:' | '{'\n      break;\n    case 268:                       // 'variable'\n      lookahead2W(143);             // S^WS | '#' | '$' | '(' | '(:'\n      break;\n    case 281:                       // '{'\n      lookahead2W(282);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // NCName^Token | S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' |\n                                    // '//' | ';' | '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|' | '}'\n      break;\n    case 31:                        // '$'\n    case 33:                        // '%'\n      lookahead2W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n      break;\n    case 87:                        // 'break'\n    case 103:                       // 'continue'\n      lookahead2W(145);             // S^WS | '#' | '(' | '(:' | 'loop'\n      break;\n    case 154:                       // 'if'\n    case 248:                       // 'switch'\n    case 259:                       // 'typeswitch'\n    case 273:                       // 'while'\n      lookahead2W(95);              // S^WS | '#' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk != 6                     // EQName^Token\n     && lk != 8                     // IntegerLiteral\n     && lk != 9                     // DecimalLiteral\n     && lk != 10                    // DoubleLiteral\n     && lk != 11                    // StringLiteral\n     && lk != 32                    // '$$'\n     && lk != 35                    // '('\n     && lk != 36                    // '(#'\n     && lk != 41                    // '+'\n     && lk != 43                    // '-'\n     && lk != 47                    // '/'\n     && lk != 48                    // '//'\n     && lk != 54                    // ';'\n     && lk != 55                    // '<'\n     && lk != 56                    // '<!--'\n     && lk != 60                    // '<?'\n     && lk != 69                    // '['\n     && lk != 71                    // 'after'\n     && lk != 73                    // 'allowing'\n     && lk != 74                    // 'ancestor'\n     && lk != 75                    // 'ancestor-or-self'\n     && lk != 76                    // 'and'\n     && lk != 78                    // 'append'\n     && lk != 79                    // 'array'\n     && lk != 80                    // 'as'\n     && lk != 81                    // 'ascending'\n     && lk != 82                    // 'at'\n     && lk != 83                    // 'attribute'\n     && lk != 84                    // 'base-uri'\n     && lk != 85                    // 'before'\n     && lk != 86                    // 'boundary-space'\n     && lk != 89                    // 'case'\n     && lk != 90                    // 'cast'\n     && lk != 91                    // 'castable'\n     && lk != 92                    // 'catch'\n     && lk != 94                    // 'child'\n     && lk != 95                    // 'collation'\n     && lk != 97                    // 'comment'\n     && lk != 98                    // 'constraint'\n     && lk != 99                    // 'construction'\n     && lk != 102                   // 'context'\n     && lk != 104                   // 'copy'\n     && lk != 105                   // 'copy-namespaces'\n     && lk != 106                   // 'count'\n     && lk != 107                   // 'decimal-format'\n     && lk != 109                   // 'declare'\n     && lk != 110                   // 'default'\n     && lk != 111                   // 'delete'\n     && lk != 112                   // 'descendant'\n     && lk != 113                   // 'descendant-or-self'\n     && lk != 114                   // 'descending'\n     && lk != 119                   // 'div'\n     && lk != 120                   // 'document'\n     && lk != 121                   // 'document-node'\n     && lk != 122                   // 'element'\n     && lk != 123                   // 'else'\n     && lk != 124                   // 'empty'\n     && lk != 125                   // 'empty-sequence'\n     && lk != 126                   // 'encoding'\n     && lk != 127                   // 'end'\n     && lk != 129                   // 'eq'\n     && lk != 130                   // 'every'\n     && lk != 132                   // 'except'\n     && lk != 134                   // 'external'\n     && lk != 135                   // 'false'\n     && lk != 136                   // 'first'\n     && lk != 137                   // 'following'\n     && lk != 138                   // 'following-sibling'\n     && lk != 142                   // 'from'\n     && lk != 143                   // 'ft-option'\n     && lk != 147                   // 'function'\n     && lk != 148                   // 'ge'\n     && lk != 150                   // 'group'\n     && lk != 152                   // 'gt'\n     && lk != 153                   // 'idiv'\n     && lk != 155                   // 'import'\n     && lk != 156                   // 'in'\n     && lk != 157                   // 'index'\n     && lk != 161                   // 'insert'\n     && lk != 162                   // 'instance'\n     && lk != 163                   // 'integrity'\n     && lk != 164                   // 'intersect'\n     && lk != 165                   // 'into'\n     && lk != 166                   // 'is'\n     && lk != 167                   // 'item'\n     && lk != 168                   // 'json'\n     && lk != 169                   // 'json-item'\n     && lk != 170                   // 'jsoniq'\n     && lk != 173                   // 'last'\n     && lk != 174                   // 'lax'\n     && lk != 175                   // 'le'\n     && lk != 179                   // 'loop'\n     && lk != 181                   // 'lt'\n     && lk != 183                   // 'mod'\n     && lk != 184                   // 'modify'\n     && lk != 185                   // 'module'\n     && lk != 187                   // 'namespace'\n     && lk != 188                   // 'namespace-node'\n     && lk != 189                   // 'ne'\n     && lk != 194                   // 'node'\n     && lk != 195                   // 'nodes'\n     && lk != 196                   // 'not'\n     && lk != 197                   // 'null'\n     && lk != 198                   // 'object'\n     && lk != 202                   // 'only'\n     && lk != 203                   // 'option'\n     && lk != 204                   // 'or'\n     && lk != 205                   // 'order'\n     && lk != 206                   // 'ordered'\n     && lk != 207                   // 'ordering'\n     && lk != 210                   // 'parent'\n     && lk != 216                   // 'preceding'\n     && lk != 217                   // 'preceding-sibling'\n     && lk != 220                   // 'processing-instruction'\n     && lk != 222                   // 'rename'\n     && lk != 223                   // 'replace'\n     && lk != 224                   // 'return'\n     && lk != 225                   // 'returning'\n     && lk != 226                   // 'revalidation'\n     && lk != 228                   // 'satisfies'\n     && lk != 229                   // 'schema'\n     && lk != 230                   // 'schema-attribute'\n     && lk != 231                   // 'schema-element'\n     && lk != 232                   // 'score'\n     && lk != 233                   // 'select'\n     && lk != 234                   // 'self'\n     && lk != 239                   // 'sliding'\n     && lk != 240                   // 'some'\n     && lk != 241                   // 'stable'\n     && lk != 242                   // 'start'\n     && lk != 245                   // 'strict'\n     && lk != 247                   // 'structured-item'\n     && lk != 249                   // 'text'\n     && lk != 253                   // 'to'\n     && lk != 254                   // 'treat'\n     && lk != 255                   // 'true'\n     && lk != 257                   // 'tumbling'\n     && lk != 258                   // 'type'\n     && lk != 260                   // 'union'\n     && lk != 262                   // 'unordered'\n     && lk != 263                   // 'updating'\n     && lk != 266                   // 'validate'\n     && lk != 267                   // 'value'\n     && lk != 269                   // 'version'\n     && lk != 272                   // 'where'\n     && lk != 276                   // 'with'\n     && lk != 283                   // '{|'\n     && lk != 10009                 // '{' NCName^Token\n     && lk != 14935                 // 'break' '#'\n     && lk != 14951                 // 'continue' '#'\n     && lk != 14981                 // 'exit' '#'\n     && lk != 14987                 // 'for' '#'\n     && lk != 15002                 // 'if' '#'\n     && lk != 15025                 // 'let' '#'\n     && lk != 15096                 // 'switch' '#'\n     && lk != 15104                 // 'try' '#'\n     && lk != 15107                 // 'typeswitch' '#'\n     && lk != 15116                 // 'variable' '#'\n     && lk != 15121                 // 'while' '#'\n     && lk != 16011                 // 'for' '$'\n     && lk != 16049                 // 'let' '$'\n     && lk != 16140                 // 'variable' '$'\n     && lk != 18007                 // 'break' '('\n     && lk != 18023                 // 'continue' '('\n     && lk != 18053                 // 'exit' '('\n     && lk != 18059                 // 'for' '('\n     && lk != 18074                 // 'if' '('\n     && lk != 18097                 // 'let' '('\n     && lk != 18168                 // 'switch' '('\n     && lk != 18176                 // 'try' '('\n     && lk != 18179                 // 'typeswitch' '('\n     && lk != 18188                 // 'variable' '('\n     && lk != 91735                 // 'break' 'loop'\n     && lk != 91751                 // 'continue' 'loop'\n     && lk != 115333                // 'exit' 'returning'\n     && lk != 118961                // 'let' 'score'\n     && lk != 122507                // 'for' 'sliding'\n     && lk != 131723                // 'for' 'tumbling'\n     && lk != 144128                // 'try' '{'\n     && lk != 147225)               // '{' '}'\n    {\n      lk = memoized(9, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_ApplyStatement();\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          try\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            try_AssignStatement();\n            lk = -2;\n          }\n          catch (p2A)\n          {\n            try\n            {\n              b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n              b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n              b2 = b2A; e2 = e2A; end = e2A; }}\n              try_BlockStatement();\n              lk = -3;\n            }\n            catch (p3A)\n            {\n              try\n              {\n                b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                b2 = b2A; e2 = e2A; end = e2A; }}\n                try_VarDeclStatement();\n                lk = -12;\n              }\n              catch (p12A)\n              {\n                lk = -13;\n              }\n            }\n          }\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(9, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -2:\n      parse_AssignStatement();\n      break;\n    case -3:\n      parse_BlockStatement();\n      break;\n    case 91735:                     // 'break' 'loop'\n      parse_BreakStatement();\n      break;\n    case 91751:                     // 'continue' 'loop'\n      parse_ContinueStatement();\n      break;\n    case 115333:                    // 'exit' 'returning'\n      parse_ExitStatement();\n      break;\n    case 16011:                     // 'for' '$'\n    case 16049:                     // 'let' '$'\n    case 118961:                    // 'let' 'score'\n    case 122507:                    // 'for' 'sliding'\n    case 131723:                    // 'for' 'tumbling'\n      parse_FLWORStatement();\n      break;\n    case 18074:                     // 'if' '('\n      parse_IfStatement();\n      break;\n    case 18168:                     // 'switch' '('\n      parse_SwitchStatement();\n      break;\n    case 144128:                    // 'try' '{'\n      parse_TryCatchStatement();\n      break;\n    case 18179:                     // 'typeswitch' '('\n      parse_TypeswitchStatement();\n      break;\n    case -12:\n    case 16140:                     // 'variable' '$'\n      parse_VarDeclStatement();\n      break;\n    case -13:\n      parse_WhileStatement();\n      break;\n    case 54:                        // ';'\n      parse_VoidStatement();\n      break;\n    default:\n      parse_ApplyStatement();\n    }\n    eventHandler.endNonterminal(\"Statement\", e0);\n  }\n\n  function try_Statement()\n  {\n    switch (l1)\n    {\n    case 133:                       // 'exit'\n      lookahead2W(147);             // S^WS | '#' | '(' | '(:' | 'returning'\n      break;\n    case 139:                       // 'for'\n      lookahead2W(179);             // S^WS | '#' | '$' | '(' | '(:' | 'sliding' | 'tumbling'\n      break;\n    case 177:                       // 'let'\n      lookahead2W(166);             // S^WS | '#' | '$' | '(' | '(:' | 'score'\n      break;\n    case 256:                       // 'try'\n      lookahead2W(148);             // S^WS | '#' | '(' | '(:' | '{'\n      break;\n    case 268:                       // 'variable'\n      lookahead2W(143);             // S^WS | '#' | '$' | '(' | '(:'\n      break;\n    case 281:                       // '{'\n      lookahead2W(282);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // NCName^Token | S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' |\n                                    // '//' | ';' | '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|' | '}'\n      break;\n    case 31:                        // '$'\n    case 33:                        // '%'\n      lookahead2W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n      break;\n    case 87:                        // 'break'\n    case 103:                       // 'continue'\n      lookahead2W(145);             // S^WS | '#' | '(' | '(:' | 'loop'\n      break;\n    case 154:                       // 'if'\n    case 248:                       // 'switch'\n    case 259:                       // 'typeswitch'\n    case 273:                       // 'while'\n      lookahead2W(95);              // S^WS | '#' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk != 6                     // EQName^Token\n     && lk != 8                     // IntegerLiteral\n     && lk != 9                     // DecimalLiteral\n     && lk != 10                    // DoubleLiteral\n     && lk != 11                    // StringLiteral\n     && lk != 32                    // '$$'\n     && lk != 35                    // '('\n     && lk != 36                    // '(#'\n     && lk != 41                    // '+'\n     && lk != 43                    // '-'\n     && lk != 47                    // '/'\n     && lk != 48                    // '//'\n     && lk != 54                    // ';'\n     && lk != 55                    // '<'\n     && lk != 56                    // '<!--'\n     && lk != 60                    // '<?'\n     && lk != 69                    // '['\n     && lk != 71                    // 'after'\n     && lk != 73                    // 'allowing'\n     && lk != 74                    // 'ancestor'\n     && lk != 75                    // 'ancestor-or-self'\n     && lk != 76                    // 'and'\n     && lk != 78                    // 'append'\n     && lk != 79                    // 'array'\n     && lk != 80                    // 'as'\n     && lk != 81                    // 'ascending'\n     && lk != 82                    // 'at'\n     && lk != 83                    // 'attribute'\n     && lk != 84                    // 'base-uri'\n     && lk != 85                    // 'before'\n     && lk != 86                    // 'boundary-space'\n     && lk != 89                    // 'case'\n     && lk != 90                    // 'cast'\n     && lk != 91                    // 'castable'\n     && lk != 92                    // 'catch'\n     && lk != 94                    // 'child'\n     && lk != 95                    // 'collation'\n     && lk != 97                    // 'comment'\n     && lk != 98                    // 'constraint'\n     && lk != 99                    // 'construction'\n     && lk != 102                   // 'context'\n     && lk != 104                   // 'copy'\n     && lk != 105                   // 'copy-namespaces'\n     && lk != 106                   // 'count'\n     && lk != 107                   // 'decimal-format'\n     && lk != 109                   // 'declare'\n     && lk != 110                   // 'default'\n     && lk != 111                   // 'delete'\n     && lk != 112                   // 'descendant'\n     && lk != 113                   // 'descendant-or-self'\n     && lk != 114                   // 'descending'\n     && lk != 119                   // 'div'\n     && lk != 120                   // 'document'\n     && lk != 121                   // 'document-node'\n     && lk != 122                   // 'element'\n     && lk != 123                   // 'else'\n     && lk != 124                   // 'empty'\n     && lk != 125                   // 'empty-sequence'\n     && lk != 126                   // 'encoding'\n     && lk != 127                   // 'end'\n     && lk != 129                   // 'eq'\n     && lk != 130                   // 'every'\n     && lk != 132                   // 'except'\n     && lk != 134                   // 'external'\n     && lk != 135                   // 'false'\n     && lk != 136                   // 'first'\n     && lk != 137                   // 'following'\n     && lk != 138                   // 'following-sibling'\n     && lk != 142                   // 'from'\n     && lk != 143                   // 'ft-option'\n     && lk != 147                   // 'function'\n     && lk != 148                   // 'ge'\n     && lk != 150                   // 'group'\n     && lk != 152                   // 'gt'\n     && lk != 153                   // 'idiv'\n     && lk != 155                   // 'import'\n     && lk != 156                   // 'in'\n     && lk != 157                   // 'index'\n     && lk != 161                   // 'insert'\n     && lk != 162                   // 'instance'\n     && lk != 163                   // 'integrity'\n     && lk != 164                   // 'intersect'\n     && lk != 165                   // 'into'\n     && lk != 166                   // 'is'\n     && lk != 167                   // 'item'\n     && lk != 168                   // 'json'\n     && lk != 169                   // 'json-item'\n     && lk != 170                   // 'jsoniq'\n     && lk != 173                   // 'last'\n     && lk != 174                   // 'lax'\n     && lk != 175                   // 'le'\n     && lk != 179                   // 'loop'\n     && lk != 181                   // 'lt'\n     && lk != 183                   // 'mod'\n     && lk != 184                   // 'modify'\n     && lk != 185                   // 'module'\n     && lk != 187                   // 'namespace'\n     && lk != 188                   // 'namespace-node'\n     && lk != 189                   // 'ne'\n     && lk != 194                   // 'node'\n     && lk != 195                   // 'nodes'\n     && lk != 196                   // 'not'\n     && lk != 197                   // 'null'\n     && lk != 198                   // 'object'\n     && lk != 202                   // 'only'\n     && lk != 203                   // 'option'\n     && lk != 204                   // 'or'\n     && lk != 205                   // 'order'\n     && lk != 206                   // 'ordered'\n     && lk != 207                   // 'ordering'\n     && lk != 210                   // 'parent'\n     && lk != 216                   // 'preceding'\n     && lk != 217                   // 'preceding-sibling'\n     && lk != 220                   // 'processing-instruction'\n     && lk != 222                   // 'rename'\n     && lk != 223                   // 'replace'\n     && lk != 224                   // 'return'\n     && lk != 225                   // 'returning'\n     && lk != 226                   // 'revalidation'\n     && lk != 228                   // 'satisfies'\n     && lk != 229                   // 'schema'\n     && lk != 230                   // 'schema-attribute'\n     && lk != 231                   // 'schema-element'\n     && lk != 232                   // 'score'\n     && lk != 233                   // 'select'\n     && lk != 234                   // 'self'\n     && lk != 239                   // 'sliding'\n     && lk != 240                   // 'some'\n     && lk != 241                   // 'stable'\n     && lk != 242                   // 'start'\n     && lk != 245                   // 'strict'\n     && lk != 247                   // 'structured-item'\n     && lk != 249                   // 'text'\n     && lk != 253                   // 'to'\n     && lk != 254                   // 'treat'\n     && lk != 255                   // 'true'\n     && lk != 257                   // 'tumbling'\n     && lk != 258                   // 'type'\n     && lk != 260                   // 'union'\n     && lk != 262                   // 'unordered'\n     && lk != 263                   // 'updating'\n     && lk != 266                   // 'validate'\n     && lk != 267                   // 'value'\n     && lk != 269                   // 'version'\n     && lk != 272                   // 'where'\n     && lk != 276                   // 'with'\n     && lk != 283                   // '{|'\n     && lk != 10009                 // '{' NCName^Token\n     && lk != 14935                 // 'break' '#'\n     && lk != 14951                 // 'continue' '#'\n     && lk != 14981                 // 'exit' '#'\n     && lk != 14987                 // 'for' '#'\n     && lk != 15002                 // 'if' '#'\n     && lk != 15025                 // 'let' '#'\n     && lk != 15096                 // 'switch' '#'\n     && lk != 15104                 // 'try' '#'\n     && lk != 15107                 // 'typeswitch' '#'\n     && lk != 15116                 // 'variable' '#'\n     && lk != 15121                 // 'while' '#'\n     && lk != 16011                 // 'for' '$'\n     && lk != 16049                 // 'let' '$'\n     && lk != 16140                 // 'variable' '$'\n     && lk != 18007                 // 'break' '('\n     && lk != 18023                 // 'continue' '('\n     && lk != 18053                 // 'exit' '('\n     && lk != 18059                 // 'for' '('\n     && lk != 18074                 // 'if' '('\n     && lk != 18097                 // 'let' '('\n     && lk != 18168                 // 'switch' '('\n     && lk != 18176                 // 'try' '('\n     && lk != 18179                 // 'typeswitch' '('\n     && lk != 18188                 // 'variable' '('\n     && lk != 91735                 // 'break' 'loop'\n     && lk != 91751                 // 'continue' 'loop'\n     && lk != 115333                // 'exit' 'returning'\n     && lk != 118961                // 'let' 'score'\n     && lk != 122507                // 'for' 'sliding'\n     && lk != 131723                // 'for' 'tumbling'\n     && lk != 144128                // 'try' '{'\n     && lk != 147225)               // '{' '}'\n    {\n      lk = memoized(9, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_ApplyStatement();\n          memoize(9, e0A, -1);\n          lk = -15;\n        }\n        catch (p1A)\n        {\n          try\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            try_AssignStatement();\n            memoize(9, e0A, -2);\n            lk = -15;\n          }\n          catch (p2A)\n          {\n            try\n            {\n              b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n              b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n              b2 = b2A; e2 = e2A; end = e2A; }}\n              try_BlockStatement();\n              memoize(9, e0A, -3);\n              lk = -15;\n            }\n            catch (p3A)\n            {\n              try\n              {\n                b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                b2 = b2A; e2 = e2A; end = e2A; }}\n                try_VarDeclStatement();\n                memoize(9, e0A, -12);\n                lk = -15;\n              }\n              catch (p12A)\n              {\n                lk = -13;\n                b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                b2 = b2A; e2 = e2A; end = e2A; }}\n                memoize(9, e0A, -13);\n              }\n            }\n          }\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -2:\n      try_AssignStatement();\n      break;\n    case -3:\n      try_BlockStatement();\n      break;\n    case 91735:                     // 'break' 'loop'\n      try_BreakStatement();\n      break;\n    case 91751:                     // 'continue' 'loop'\n      try_ContinueStatement();\n      break;\n    case 115333:                    // 'exit' 'returning'\n      try_ExitStatement();\n      break;\n    case 16011:                     // 'for' '$'\n    case 16049:                     // 'let' '$'\n    case 118961:                    // 'let' 'score'\n    case 122507:                    // 'for' 'sliding'\n    case 131723:                    // 'for' 'tumbling'\n      try_FLWORStatement();\n      break;\n    case 18074:                     // 'if' '('\n      try_IfStatement();\n      break;\n    case 18168:                     // 'switch' '('\n      try_SwitchStatement();\n      break;\n    case 144128:                    // 'try' '{'\n      try_TryCatchStatement();\n      break;\n    case 18179:                     // 'typeswitch' '('\n      try_TypeswitchStatement();\n      break;\n    case -12:\n    case 16140:                     // 'variable' '$'\n      try_VarDeclStatement();\n      break;\n    case -13:\n      try_WhileStatement();\n      break;\n    case 54:                        // ';'\n      try_VoidStatement();\n      break;\n    case -15:\n      break;\n    default:\n      try_ApplyStatement();\n    }\n  }\n\n  function parse_ApplyStatement()\n  {\n    eventHandler.startNonterminal(\"ApplyStatement\", e0);\n    parse_ExprSimple();\n    shift(54);                      // ';'\n    eventHandler.endNonterminal(\"ApplyStatement\", e0);\n  }\n\n  function try_ApplyStatement()\n  {\n    try_ExprSimple();\n    shiftT(54);                     // ';'\n  }\n\n  function parse_AssignStatement()\n  {\n    eventHandler.startNonterminal(\"AssignStatement\", e0);\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    whitespace();\n    parse_VarName();\n    lookahead1W(28);                // S^WS | '(:' | ':='\n    shift(53);                      // ':='\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    shift(54);                      // ';'\n    eventHandler.endNonterminal(\"AssignStatement\", e0);\n  }\n\n  function try_AssignStatement()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    try_VarName();\n    lookahead1W(28);                // S^WS | '(:' | ':='\n    shiftT(53);                     // ':='\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_ExprSingle();\n    shiftT(54);                     // ';'\n  }\n\n  function parse_BlockStatement()\n  {\n    eventHandler.startNonterminal(\"BlockStatement\", e0);\n    shift(281);                     // '{'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | ';' |\n                                    // '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_Statement();\n    lookahead1W(280);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | ';' |\n                                    // '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|' | '}'\n    whitespace();\n    parse_Statements();\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"BlockStatement\", e0);\n  }\n\n  function try_BlockStatement()\n  {\n    shiftT(281);                    // '{'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | ';' |\n                                    // '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_Statement();\n    lookahead1W(280);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | ';' |\n                                    // '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|' | '}'\n    try_Statements();\n    shiftT(287);                    // '}'\n  }\n\n  function parse_BreakStatement()\n  {\n    eventHandler.startNonterminal(\"BreakStatement\", e0);\n    shift(87);                      // 'break'\n    lookahead1W(62);                // S^WS | '(:' | 'loop'\n    shift(179);                     // 'loop'\n    lookahead1W(29);                // S^WS | '(:' | ';'\n    shift(54);                      // ';'\n    eventHandler.endNonterminal(\"BreakStatement\", e0);\n  }\n\n  function try_BreakStatement()\n  {\n    shiftT(87);                     // 'break'\n    lookahead1W(62);                // S^WS | '(:' | 'loop'\n    shiftT(179);                    // 'loop'\n    lookahead1W(29);                // S^WS | '(:' | ';'\n    shiftT(54);                     // ';'\n  }\n\n  function parse_ContinueStatement()\n  {\n    eventHandler.startNonterminal(\"ContinueStatement\", e0);\n    shift(103);                     // 'continue'\n    lookahead1W(62);                // S^WS | '(:' | 'loop'\n    shift(179);                     // 'loop'\n    lookahead1W(29);                // S^WS | '(:' | ';'\n    shift(54);                      // ';'\n    eventHandler.endNonterminal(\"ContinueStatement\", e0);\n  }\n\n  function try_ContinueStatement()\n  {\n    shiftT(103);                    // 'continue'\n    lookahead1W(62);                // S^WS | '(:' | 'loop'\n    shiftT(179);                    // 'loop'\n    lookahead1W(29);                // S^WS | '(:' | ';'\n    shiftT(54);                     // ';'\n  }\n\n  function parse_ExitStatement()\n  {\n    eventHandler.startNonterminal(\"ExitStatement\", e0);\n    shift(133);                     // 'exit'\n    lookahead1W(74);                // S^WS | '(:' | 'returning'\n    shift(225);                     // 'returning'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    shift(54);                      // ';'\n    eventHandler.endNonterminal(\"ExitStatement\", e0);\n  }\n\n  function try_ExitStatement()\n  {\n    shiftT(133);                    // 'exit'\n    lookahead1W(74);                // S^WS | '(:' | 'returning'\n    shiftT(225);                    // 'returning'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_ExprSingle();\n    shiftT(54);                     // ';'\n  }\n\n  function parse_FLWORStatement()\n  {\n    eventHandler.startNonterminal(\"FLWORStatement\", e0);\n    parse_InitialClause();\n    for (;;)\n    {\n      lookahead1W(195);             // S^WS | '(:' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' | 'stable' |\n                                    // 'where'\n      if (l1 == 224)                // 'return'\n      {\n        break;\n      }\n      whitespace();\n      parse_IntermediateClause();\n    }\n    whitespace();\n    parse_ReturnStatement();\n    eventHandler.endNonterminal(\"FLWORStatement\", e0);\n  }\n\n  function try_FLWORStatement()\n  {\n    try_InitialClause();\n    for (;;)\n    {\n      lookahead1W(195);             // S^WS | '(:' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' | 'stable' |\n                                    // 'where'\n      if (l1 == 224)                // 'return'\n      {\n        break;\n      }\n      try_IntermediateClause();\n    }\n    try_ReturnStatement();\n  }\n\n  function parse_ReturnStatement()\n  {\n    eventHandler.startNonterminal(\"ReturnStatement\", e0);\n    shift(224);                     // 'return'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | ';' |\n                                    // '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"ReturnStatement\", e0);\n  }\n\n  function try_ReturnStatement()\n  {\n    shiftT(224);                    // 'return'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | ';' |\n                                    // '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_Statement();\n  }\n\n  function parse_IfStatement()\n  {\n    eventHandler.startNonterminal(\"IfStatement\", e0);\n    shift(154);                     // 'if'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_Expr();\n    shift(38);                      // ')'\n    lookahead1W(80);                // S^WS | '(:' | 'then'\n    shift(250);                     // 'then'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | ';' |\n                                    // '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_Statement();\n    lookahead1W(51);                // S^WS | '(:' | 'else'\n    shift(123);                     // 'else'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | ';' |\n                                    // '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"IfStatement\", e0);\n  }\n\n  function try_IfStatement()\n  {\n    shiftT(154);                    // 'if'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_Expr();\n    shiftT(38);                     // ')'\n    lookahead1W(80);                // S^WS | '(:' | 'then'\n    shiftT(250);                    // 'then'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | ';' |\n                                    // '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_Statement();\n    lookahead1W(51);                // S^WS | '(:' | 'else'\n    shiftT(123);                    // 'else'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | ';' |\n                                    // '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_Statement();\n  }\n\n  function parse_SwitchStatement()\n  {\n    eventHandler.startNonterminal(\"SwitchStatement\", e0);\n    shift(248);                     // 'switch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_Expr();\n    shift(38);                      // ')'\n    for (;;)\n    {\n      lookahead1W(38);              // S^WS | '(:' | 'case'\n      whitespace();\n      parse_SwitchCaseStatement();\n      lookahead1W(117);             // S^WS | '(:' | 'case' | 'default'\n      if (l1 != 89)                 // 'case'\n      {\n        break;\n      }\n    }\n    shift(110);                     // 'default'\n    lookahead1W(73);                // S^WS | '(:' | 'return'\n    shift(224);                     // 'return'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | ';' |\n                                    // '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"SwitchStatement\", e0);\n  }\n\n  function try_SwitchStatement()\n  {\n    shiftT(248);                    // 'switch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_Expr();\n    shiftT(38);                     // ')'\n    for (;;)\n    {\n      lookahead1W(38);              // S^WS | '(:' | 'case'\n      try_SwitchCaseStatement();\n      lookahead1W(117);             // S^WS | '(:' | 'case' | 'default'\n      if (l1 != 89)                 // 'case'\n      {\n        break;\n      }\n    }\n    shiftT(110);                    // 'default'\n    lookahead1W(73);                // S^WS | '(:' | 'return'\n    shiftT(224);                    // 'return'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | ';' |\n                                    // '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_Statement();\n  }\n\n  function parse_SwitchCaseStatement()\n  {\n    eventHandler.startNonterminal(\"SwitchCaseStatement\", e0);\n    for (;;)\n    {\n      shift(89);                    // 'case'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      whitespace();\n      parse_SwitchCaseOperand();\n      if (l1 != 89)                 // 'case'\n      {\n        break;\n      }\n    }\n    shift(224);                     // 'return'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | ';' |\n                                    // '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"SwitchCaseStatement\", e0);\n  }\n\n  function try_SwitchCaseStatement()\n  {\n    for (;;)\n    {\n      shiftT(89);                   // 'case'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      try_SwitchCaseOperand();\n      if (l1 != 89)                 // 'case'\n      {\n        break;\n      }\n    }\n    shiftT(224);                    // 'return'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | ';' |\n                                    // '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_Statement();\n  }\n\n  function parse_TryCatchStatement()\n  {\n    eventHandler.startNonterminal(\"TryCatchStatement\", e0);\n    shift(256);                     // 'try'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    whitespace();\n    parse_BlockStatement();\n    for (;;)\n    {\n      lookahead1W(39);              // S^WS | '(:' | 'catch'\n      shift(92);                    // 'catch'\n      lookahead1W(248);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n      whitespace();\n      parse_CatchErrorList();\n      whitespace();\n      parse_BlockStatement();\n      lookahead1W(283);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | EOF | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' |\n                                    // ';' | '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|' | '}'\n      switch (l1)\n      {\n      case 92:                      // 'catch'\n        lookahead2W(255);           // Wildcard | EQName^Token | S^WS | '#' | '(' | '(:' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 2652                // 'catch' Wildcard\n       && lk != 3164                // 'catch' EQName^Token\n       && lk != 36444               // 'catch' 'after'\n       && lk != 37468               // 'catch' 'allowing'\n       && lk != 37980               // 'catch' 'ancestor'\n       && lk != 38492               // 'catch' 'ancestor-or-self'\n       && lk != 39004               // 'catch' 'and'\n       && lk != 40028               // 'catch' 'append'\n       && lk != 40540               // 'catch' 'array'\n       && lk != 41052               // 'catch' 'as'\n       && lk != 41564               // 'catch' 'ascending'\n       && lk != 42076               // 'catch' 'at'\n       && lk != 42588               // 'catch' 'attribute'\n       && lk != 43100               // 'catch' 'base-uri'\n       && lk != 43612               // 'catch' 'before'\n       && lk != 44124               // 'catch' 'boundary-space'\n       && lk != 44636               // 'catch' 'break'\n       && lk != 45660               // 'catch' 'case'\n       && lk != 46172               // 'catch' 'cast'\n       && lk != 46684               // 'catch' 'castable'\n       && lk != 47196               // 'catch' 'catch'\n       && lk != 48220               // 'catch' 'child'\n       && lk != 48732               // 'catch' 'collation'\n       && lk != 49756               // 'catch' 'comment'\n       && lk != 50268               // 'catch' 'constraint'\n       && lk != 50780               // 'catch' 'construction'\n       && lk != 52316               // 'catch' 'context'\n       && lk != 52828               // 'catch' 'continue'\n       && lk != 53340               // 'catch' 'copy'\n       && lk != 53852               // 'catch' 'copy-namespaces'\n       && lk != 54364               // 'catch' 'count'\n       && lk != 54876               // 'catch' 'decimal-format'\n       && lk != 55900               // 'catch' 'declare'\n       && lk != 56412               // 'catch' 'default'\n       && lk != 56924               // 'catch' 'delete'\n       && lk != 57436               // 'catch' 'descendant'\n       && lk != 57948               // 'catch' 'descendant-or-self'\n       && lk != 58460               // 'catch' 'descending'\n       && lk != 61020               // 'catch' 'div'\n       && lk != 61532               // 'catch' 'document'\n       && lk != 62044               // 'catch' 'document-node'\n       && lk != 62556               // 'catch' 'element'\n       && lk != 63068               // 'catch' 'else'\n       && lk != 63580               // 'catch' 'empty'\n       && lk != 64092               // 'catch' 'empty-sequence'\n       && lk != 64604               // 'catch' 'encoding'\n       && lk != 65116               // 'catch' 'end'\n       && lk != 66140               // 'catch' 'eq'\n       && lk != 66652               // 'catch' 'every'\n       && lk != 67676               // 'catch' 'except'\n       && lk != 68188               // 'catch' 'exit'\n       && lk != 68700               // 'catch' 'external'\n       && lk != 69212               // 'catch' 'false'\n       && lk != 69724               // 'catch' 'first'\n       && lk != 70236               // 'catch' 'following'\n       && lk != 70748               // 'catch' 'following-sibling'\n       && lk != 71260               // 'catch' 'for'\n       && lk != 72796               // 'catch' 'from'\n       && lk != 73308               // 'catch' 'ft-option'\n       && lk != 75356               // 'catch' 'function'\n       && lk != 75868               // 'catch' 'ge'\n       && lk != 76892               // 'catch' 'group'\n       && lk != 77916               // 'catch' 'gt'\n       && lk != 78428               // 'catch' 'idiv'\n       && lk != 78940               // 'catch' 'if'\n       && lk != 79452               // 'catch' 'import'\n       && lk != 79964               // 'catch' 'in'\n       && lk != 80476               // 'catch' 'index'\n       && lk != 82524               // 'catch' 'insert'\n       && lk != 83036               // 'catch' 'instance'\n       && lk != 83548               // 'catch' 'integrity'\n       && lk != 84060               // 'catch' 'intersect'\n       && lk != 84572               // 'catch' 'into'\n       && lk != 85084               // 'catch' 'is'\n       && lk != 85596               // 'catch' 'item'\n       && lk != 86108               // 'catch' 'json'\n       && lk != 86620               // 'catch' 'json-item'\n       && lk != 87132               // 'catch' 'jsoniq'\n       && lk != 88668               // 'catch' 'last'\n       && lk != 89180               // 'catch' 'lax'\n       && lk != 89692               // 'catch' 'le'\n       && lk != 90716               // 'catch' 'let'\n       && lk != 91740               // 'catch' 'loop'\n       && lk != 92764               // 'catch' 'lt'\n       && lk != 93788               // 'catch' 'mod'\n       && lk != 94300               // 'catch' 'modify'\n       && lk != 94812               // 'catch' 'module'\n       && lk != 95836               // 'catch' 'namespace'\n       && lk != 96348               // 'catch' 'namespace-node'\n       && lk != 96860               // 'catch' 'ne'\n       && lk != 99420               // 'catch' 'node'\n       && lk != 99932               // 'catch' 'nodes'\n       && lk != 100956              // 'catch' 'null'\n       && lk != 101468              // 'catch' 'object'\n       && lk != 103516              // 'catch' 'only'\n       && lk != 104028              // 'catch' 'option'\n       && lk != 104540              // 'catch' 'or'\n       && lk != 105052              // 'catch' 'order'\n       && lk != 105564              // 'catch' 'ordered'\n       && lk != 106076              // 'catch' 'ordering'\n       && lk != 107612              // 'catch' 'parent'\n       && lk != 110684              // 'catch' 'preceding'\n       && lk != 111196              // 'catch' 'preceding-sibling'\n       && lk != 112732              // 'catch' 'processing-instruction'\n       && lk != 113756              // 'catch' 'rename'\n       && lk != 114268              // 'catch' 'replace'\n       && lk != 114780              // 'catch' 'return'\n       && lk != 115292              // 'catch' 'returning'\n       && lk != 115804              // 'catch' 'revalidation'\n       && lk != 116828              // 'catch' 'satisfies'\n       && lk != 117340              // 'catch' 'schema'\n       && lk != 117852              // 'catch' 'schema-attribute'\n       && lk != 118364              // 'catch' 'schema-element'\n       && lk != 118876              // 'catch' 'score'\n       && lk != 119388              // 'catch' 'select'\n       && lk != 119900              // 'catch' 'self'\n       && lk != 122460              // 'catch' 'sliding'\n       && lk != 122972              // 'catch' 'some'\n       && lk != 123484              // 'catch' 'stable'\n       && lk != 123996              // 'catch' 'start'\n       && lk != 125532              // 'catch' 'strict'\n       && lk != 126556              // 'catch' 'structured-item'\n       && lk != 127068              // 'catch' 'switch'\n       && lk != 127580              // 'catch' 'text'\n       && lk != 129628              // 'catch' 'to'\n       && lk != 130140              // 'catch' 'treat'\n       && lk != 130652              // 'catch' 'true'\n       && lk != 131164              // 'catch' 'try'\n       && lk != 131676              // 'catch' 'tumbling'\n       && lk != 132188              // 'catch' 'type'\n       && lk != 132700              // 'catch' 'typeswitch'\n       && lk != 133212              // 'catch' 'union'\n       && lk != 134236              // 'catch' 'unordered'\n       && lk != 134748              // 'catch' 'updating'\n       && lk != 136284              // 'catch' 'validate'\n       && lk != 136796              // 'catch' 'value'\n       && lk != 137308              // 'catch' 'variable'\n       && lk != 137820              // 'catch' 'version'\n       && lk != 139356              // 'catch' 'where'\n       && lk != 139868              // 'catch' 'while'\n       && lk != 141404)             // 'catch' 'with'\n      {\n        break;\n      }\n    }\n    eventHandler.endNonterminal(\"TryCatchStatement\", e0);\n  }\n\n  function try_TryCatchStatement()\n  {\n    shiftT(256);                    // 'try'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    try_BlockStatement();\n    for (;;)\n    {\n      lookahead1W(39);              // S^WS | '(:' | 'catch'\n      shiftT(92);                   // 'catch'\n      lookahead1W(248);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n      try_CatchErrorList();\n      try_BlockStatement();\n      lookahead1W(283);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | EOF | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' |\n                                    // ';' | '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|' | '}'\n      switch (l1)\n      {\n      case 92:                      // 'catch'\n        lookahead2W(255);           // Wildcard | EQName^Token | S^WS | '#' | '(' | '(:' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 2652                // 'catch' Wildcard\n       && lk != 3164                // 'catch' EQName^Token\n       && lk != 36444               // 'catch' 'after'\n       && lk != 37468               // 'catch' 'allowing'\n       && lk != 37980               // 'catch' 'ancestor'\n       && lk != 38492               // 'catch' 'ancestor-or-self'\n       && lk != 39004               // 'catch' 'and'\n       && lk != 40028               // 'catch' 'append'\n       && lk != 40540               // 'catch' 'array'\n       && lk != 41052               // 'catch' 'as'\n       && lk != 41564               // 'catch' 'ascending'\n       && lk != 42076               // 'catch' 'at'\n       && lk != 42588               // 'catch' 'attribute'\n       && lk != 43100               // 'catch' 'base-uri'\n       && lk != 43612               // 'catch' 'before'\n       && lk != 44124               // 'catch' 'boundary-space'\n       && lk != 44636               // 'catch' 'break'\n       && lk != 45660               // 'catch' 'case'\n       && lk != 46172               // 'catch' 'cast'\n       && lk != 46684               // 'catch' 'castable'\n       && lk != 47196               // 'catch' 'catch'\n       && lk != 48220               // 'catch' 'child'\n       && lk != 48732               // 'catch' 'collation'\n       && lk != 49756               // 'catch' 'comment'\n       && lk != 50268               // 'catch' 'constraint'\n       && lk != 50780               // 'catch' 'construction'\n       && lk != 52316               // 'catch' 'context'\n       && lk != 52828               // 'catch' 'continue'\n       && lk != 53340               // 'catch' 'copy'\n       && lk != 53852               // 'catch' 'copy-namespaces'\n       && lk != 54364               // 'catch' 'count'\n       && lk != 54876               // 'catch' 'decimal-format'\n       && lk != 55900               // 'catch' 'declare'\n       && lk != 56412               // 'catch' 'default'\n       && lk != 56924               // 'catch' 'delete'\n       && lk != 57436               // 'catch' 'descendant'\n       && lk != 57948               // 'catch' 'descendant-or-self'\n       && lk != 58460               // 'catch' 'descending'\n       && lk != 61020               // 'catch' 'div'\n       && lk != 61532               // 'catch' 'document'\n       && lk != 62044               // 'catch' 'document-node'\n       && lk != 62556               // 'catch' 'element'\n       && lk != 63068               // 'catch' 'else'\n       && lk != 63580               // 'catch' 'empty'\n       && lk != 64092               // 'catch' 'empty-sequence'\n       && lk != 64604               // 'catch' 'encoding'\n       && lk != 65116               // 'catch' 'end'\n       && lk != 66140               // 'catch' 'eq'\n       && lk != 66652               // 'catch' 'every'\n       && lk != 67676               // 'catch' 'except'\n       && lk != 68188               // 'catch' 'exit'\n       && lk != 68700               // 'catch' 'external'\n       && lk != 69212               // 'catch' 'false'\n       && lk != 69724               // 'catch' 'first'\n       && lk != 70236               // 'catch' 'following'\n       && lk != 70748               // 'catch' 'following-sibling'\n       && lk != 71260               // 'catch' 'for'\n       && lk != 72796               // 'catch' 'from'\n       && lk != 73308               // 'catch' 'ft-option'\n       && lk != 75356               // 'catch' 'function'\n       && lk != 75868               // 'catch' 'ge'\n       && lk != 76892               // 'catch' 'group'\n       && lk != 77916               // 'catch' 'gt'\n       && lk != 78428               // 'catch' 'idiv'\n       && lk != 78940               // 'catch' 'if'\n       && lk != 79452               // 'catch' 'import'\n       && lk != 79964               // 'catch' 'in'\n       && lk != 80476               // 'catch' 'index'\n       && lk != 82524               // 'catch' 'insert'\n       && lk != 83036               // 'catch' 'instance'\n       && lk != 83548               // 'catch' 'integrity'\n       && lk != 84060               // 'catch' 'intersect'\n       && lk != 84572               // 'catch' 'into'\n       && lk != 85084               // 'catch' 'is'\n       && lk != 85596               // 'catch' 'item'\n       && lk != 86108               // 'catch' 'json'\n       && lk != 86620               // 'catch' 'json-item'\n       && lk != 87132               // 'catch' 'jsoniq'\n       && lk != 88668               // 'catch' 'last'\n       && lk != 89180               // 'catch' 'lax'\n       && lk != 89692               // 'catch' 'le'\n       && lk != 90716               // 'catch' 'let'\n       && lk != 91740               // 'catch' 'loop'\n       && lk != 92764               // 'catch' 'lt'\n       && lk != 93788               // 'catch' 'mod'\n       && lk != 94300               // 'catch' 'modify'\n       && lk != 94812               // 'catch' 'module'\n       && lk != 95836               // 'catch' 'namespace'\n       && lk != 96348               // 'catch' 'namespace-node'\n       && lk != 96860               // 'catch' 'ne'\n       && lk != 99420               // 'catch' 'node'\n       && lk != 99932               // 'catch' 'nodes'\n       && lk != 100956              // 'catch' 'null'\n       && lk != 101468              // 'catch' 'object'\n       && lk != 103516              // 'catch' 'only'\n       && lk != 104028              // 'catch' 'option'\n       && lk != 104540              // 'catch' 'or'\n       && lk != 105052              // 'catch' 'order'\n       && lk != 105564              // 'catch' 'ordered'\n       && lk != 106076              // 'catch' 'ordering'\n       && lk != 107612              // 'catch' 'parent'\n       && lk != 110684              // 'catch' 'preceding'\n       && lk != 111196              // 'catch' 'preceding-sibling'\n       && lk != 112732              // 'catch' 'processing-instruction'\n       && lk != 113756              // 'catch' 'rename'\n       && lk != 114268              // 'catch' 'replace'\n       && lk != 114780              // 'catch' 'return'\n       && lk != 115292              // 'catch' 'returning'\n       && lk != 115804              // 'catch' 'revalidation'\n       && lk != 116828              // 'catch' 'satisfies'\n       && lk != 117340              // 'catch' 'schema'\n       && lk != 117852              // 'catch' 'schema-attribute'\n       && lk != 118364              // 'catch' 'schema-element'\n       && lk != 118876              // 'catch' 'score'\n       && lk != 119388              // 'catch' 'select'\n       && lk != 119900              // 'catch' 'self'\n       && lk != 122460              // 'catch' 'sliding'\n       && lk != 122972              // 'catch' 'some'\n       && lk != 123484              // 'catch' 'stable'\n       && lk != 123996              // 'catch' 'start'\n       && lk != 125532              // 'catch' 'strict'\n       && lk != 126556              // 'catch' 'structured-item'\n       && lk != 127068              // 'catch' 'switch'\n       && lk != 127580              // 'catch' 'text'\n       && lk != 129628              // 'catch' 'to'\n       && lk != 130140              // 'catch' 'treat'\n       && lk != 130652              // 'catch' 'true'\n       && lk != 131164              // 'catch' 'try'\n       && lk != 131676              // 'catch' 'tumbling'\n       && lk != 132188              // 'catch' 'type'\n       && lk != 132700              // 'catch' 'typeswitch'\n       && lk != 133212              // 'catch' 'union'\n       && lk != 134236              // 'catch' 'unordered'\n       && lk != 134748              // 'catch' 'updating'\n       && lk != 136284              // 'catch' 'validate'\n       && lk != 136796              // 'catch' 'value'\n       && lk != 137308              // 'catch' 'variable'\n       && lk != 137820              // 'catch' 'version'\n       && lk != 139356              // 'catch' 'where'\n       && lk != 139868              // 'catch' 'while'\n       && lk != 141404)             // 'catch' 'with'\n      {\n        break;\n      }\n    }\n  }\n\n  function parse_TypeswitchStatement()\n  {\n    eventHandler.startNonterminal(\"TypeswitchStatement\", e0);\n    shift(259);                     // 'typeswitch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_Expr();\n    shift(38);                      // ')'\n    for (;;)\n    {\n      lookahead1W(38);              // S^WS | '(:' | 'case'\n      whitespace();\n      parse_CaseStatement();\n      lookahead1W(117);             // S^WS | '(:' | 'case' | 'default'\n      if (l1 != 89)                 // 'case'\n      {\n        break;\n      }\n    }\n    shift(110);                     // 'default'\n    lookahead1W(99);                // S^WS | '$' | '(:' | 'return'\n    if (l1 == 31)                   // '$'\n    {\n      shift(31);                    // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n      whitespace();\n      parse_VarName();\n    }\n    lookahead1W(73);                // S^WS | '(:' | 'return'\n    shift(224);                     // 'return'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | ';' |\n                                    // '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"TypeswitchStatement\", e0);\n  }\n\n  function try_TypeswitchStatement()\n  {\n    shiftT(259);                    // 'typeswitch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_Expr();\n    shiftT(38);                     // ')'\n    for (;;)\n    {\n      lookahead1W(38);              // S^WS | '(:' | 'case'\n      try_CaseStatement();\n      lookahead1W(117);             // S^WS | '(:' | 'case' | 'default'\n      if (l1 != 89)                 // 'case'\n      {\n        break;\n      }\n    }\n    shiftT(110);                    // 'default'\n    lookahead1W(99);                // S^WS | '$' | '(:' | 'return'\n    if (l1 == 31)                   // '$'\n    {\n      shiftT(31);                   // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n      try_VarName();\n    }\n    lookahead1W(73);                // S^WS | '(:' | 'return'\n    shiftT(224);                    // 'return'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | ';' |\n                                    // '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_Statement();\n  }\n\n  function parse_CaseStatement()\n  {\n    eventHandler.startNonterminal(\"CaseStatement\", e0);\n    shift(89);                      // 'case'\n    lookahead1W(257);               // EQName^Token | S^WS | '$' | '%' | '(' | '(:' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    if (l1 == 31)                   // '$'\n    {\n      shift(31);                    // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n      whitespace();\n      parse_VarName();\n      lookahead1W(33);              // S^WS | '(:' | 'as'\n      shift(80);                    // 'as'\n    }\n    lookahead1W(253);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    whitespace();\n    parse_SequenceType();\n    lookahead1W(73);                // S^WS | '(:' | 'return'\n    shift(224);                     // 'return'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | ';' |\n                                    // '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"CaseStatement\", e0);\n  }\n\n  function try_CaseStatement()\n  {\n    shiftT(89);                     // 'case'\n    lookahead1W(257);               // EQName^Token | S^WS | '$' | '%' | '(' | '(:' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    if (l1 == 31)                   // '$'\n    {\n      shiftT(31);                   // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n      try_VarName();\n      lookahead1W(33);              // S^WS | '(:' | 'as'\n      shiftT(80);                   // 'as'\n    }\n    lookahead1W(253);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    try_SequenceType();\n    lookahead1W(73);                // S^WS | '(:' | 'return'\n    shiftT(224);                    // 'return'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | ';' |\n                                    // '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_Statement();\n  }\n\n  function parse_VarDeclStatement()\n  {\n    eventHandler.startNonterminal(\"VarDeclStatement\", e0);\n    for (;;)\n    {\n      lookahead1W(102);             // S^WS | '%' | '(:' | 'variable'\n      if (l1 != 33)                 // '%'\n      {\n        break;\n      }\n      whitespace();\n      parse_Annotation();\n    }\n    shift(268);                     // 'variable'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    whitespace();\n    parse_VarName();\n    lookahead1W(172);               // S^WS | '(:' | ',' | ':=' | ';' | 'as'\n    if (l1 == 80)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    lookahead1W(155);               // S^WS | '(:' | ',' | ':=' | ';'\n    if (l1 == 53)                   // ':='\n    {\n      shift(53);                    // ':='\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      whitespace();\n      parse_ExprSingle();\n    }\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shift(42);                    // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      shift(31);                    // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n      whitespace();\n      parse_VarName();\n      lookahead1W(172);             // S^WS | '(:' | ',' | ':=' | ';' | 'as'\n      if (l1 == 80)                 // 'as'\n      {\n        whitespace();\n        parse_TypeDeclaration();\n      }\n      lookahead1W(155);             // S^WS | '(:' | ',' | ':=' | ';'\n      if (l1 == 53)                 // ':='\n      {\n        shift(53);                  // ':='\n        lookahead1W(266);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n        whitespace();\n        parse_ExprSingle();\n      }\n    }\n    shift(54);                      // ';'\n    eventHandler.endNonterminal(\"VarDeclStatement\", e0);\n  }\n\n  function try_VarDeclStatement()\n  {\n    for (;;)\n    {\n      lookahead1W(102);             // S^WS | '%' | '(:' | 'variable'\n      if (l1 != 33)                 // '%'\n      {\n        break;\n      }\n      try_Annotation();\n    }\n    shiftT(268);                    // 'variable'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    try_VarName();\n    lookahead1W(172);               // S^WS | '(:' | ',' | ':=' | ';' | 'as'\n    if (l1 == 80)                   // 'as'\n    {\n      try_TypeDeclaration();\n    }\n    lookahead1W(155);               // S^WS | '(:' | ',' | ':=' | ';'\n    if (l1 == 53)                   // ':='\n    {\n      shiftT(53);                   // ':='\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      try_ExprSingle();\n    }\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shiftT(42);                   // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      shiftT(31);                   // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n      try_VarName();\n      lookahead1W(172);             // S^WS | '(:' | ',' | ':=' | ';' | 'as'\n      if (l1 == 80)                 // 'as'\n      {\n        try_TypeDeclaration();\n      }\n      lookahead1W(155);             // S^WS | '(:' | ',' | ':=' | ';'\n      if (l1 == 53)                 // ':='\n      {\n        shiftT(53);                 // ':='\n        lookahead1W(266);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n        try_ExprSingle();\n      }\n    }\n    shiftT(54);                     // ';'\n  }\n\n  function parse_WhileStatement()\n  {\n    eventHandler.startNonterminal(\"WhileStatement\", e0);\n    shift(273);                     // 'while'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_Expr();\n    shift(38);                      // ')'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | ';' |\n                                    // '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"WhileStatement\", e0);\n  }\n\n  function try_WhileStatement()\n  {\n    shiftT(273);                    // 'while'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_Expr();\n    shiftT(38);                     // ')'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | ';' |\n                                    // '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_Statement();\n  }\n\n  function parse_VoidStatement()\n  {\n    eventHandler.startNonterminal(\"VoidStatement\", e0);\n    shift(54);                      // ';'\n    eventHandler.endNonterminal(\"VoidStatement\", e0);\n  }\n\n  function try_VoidStatement()\n  {\n    shiftT(54);                     // ';'\n  }\n\n  function parse_ExprSingle()\n  {\n    eventHandler.startNonterminal(\"ExprSingle\", e0);\n    switch (l1)\n    {\n    case 139:                       // 'for'\n      lookahead2W(179);             // S^WS | '#' | '$' | '(' | '(:' | 'sliding' | 'tumbling'\n      break;\n    case 177:                       // 'let'\n      lookahead2W(166);             // S^WS | '#' | '$' | '(' | '(:' | 'score'\n      break;\n    case 256:                       // 'try'\n      lookahead2W(148);             // S^WS | '#' | '(' | '(:' | '{'\n      break;\n    case 154:                       // 'if'\n    case 248:                       // 'switch'\n    case 259:                       // 'typeswitch'\n      lookahead2W(95);              // S^WS | '#' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 16011:                     // 'for' '$'\n    case 16049:                     // 'let' '$'\n    case 118961:                    // 'let' 'score'\n    case 122507:                    // 'for' 'sliding'\n    case 131723:                    // 'for' 'tumbling'\n      parse_FLWORExpr();\n      break;\n    case 18074:                     // 'if' '('\n      parse_IfExpr();\n      break;\n    case 18168:                     // 'switch' '('\n      parse_SwitchExpr();\n      break;\n    case 144128:                    // 'try' '{'\n      parse_TryCatchExpr();\n      break;\n    case 18179:                     // 'typeswitch' '('\n      parse_TypeswitchExpr();\n      break;\n    default:\n      parse_ExprSimple();\n    }\n    eventHandler.endNonterminal(\"ExprSingle\", e0);\n  }\n\n  function try_ExprSingle()\n  {\n    switch (l1)\n    {\n    case 139:                       // 'for'\n      lookahead2W(179);             // S^WS | '#' | '$' | '(' | '(:' | 'sliding' | 'tumbling'\n      break;\n    case 177:                       // 'let'\n      lookahead2W(166);             // S^WS | '#' | '$' | '(' | '(:' | 'score'\n      break;\n    case 256:                       // 'try'\n      lookahead2W(148);             // S^WS | '#' | '(' | '(:' | '{'\n      break;\n    case 154:                       // 'if'\n    case 248:                       // 'switch'\n    case 259:                       // 'typeswitch'\n      lookahead2W(95);              // S^WS | '#' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 16011:                     // 'for' '$'\n    case 16049:                     // 'let' '$'\n    case 118961:                    // 'let' 'score'\n    case 122507:                    // 'for' 'sliding'\n    case 131723:                    // 'for' 'tumbling'\n      try_FLWORExpr();\n      break;\n    case 18074:                     // 'if' '('\n      try_IfExpr();\n      break;\n    case 18168:                     // 'switch' '('\n      try_SwitchExpr();\n      break;\n    case 144128:                    // 'try' '{'\n      try_TryCatchExpr();\n      break;\n    case 18179:                     // 'typeswitch' '('\n      try_TypeswitchExpr();\n      break;\n    default:\n      try_ExprSimple();\n    }\n  }\n\n  function parse_ExprSimple()\n  {\n    eventHandler.startNonterminal(\"ExprSimple\", e0);\n    switch (l1)\n    {\n    case 78:                        // 'append'\n      lookahead2W(268);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '#' | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' |\n                                    // '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      break;\n    case 161:                       // 'insert'\n      lookahead2W(275);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // NCName^Token | S^WS | '#' | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      break;\n    case 223:                       // 'replace'\n      lookahead2W(170);             // S^WS | '#' | '(' | '(:' | 'node' | 'value'\n      break;\n    case 111:                       // 'delete'\n    case 222:                       // 'rename'\n      lookahead2W(260);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '#' | '$' | '$$' | '%' | '(' | '(:' | '<' | '<!--' | '<?' | '[' |\n                                    // 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' |\n                                    // 'array' | 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'false' | 'first' | 'following' | 'following-sibling' |\n                                    // 'for' | 'from' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' |\n                                    // 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'json-item' | 'jsoniq' | 'last' |\n                                    // 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' |\n                                    // 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' | 'sliding' |\n                                    // 'some' | 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' |\n                                    // 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | '{' | '{|'\n      break;\n    case 104:                       // 'copy'\n    case 130:                       // 'every'\n    case 240:                       // 'some'\n      lookahead2W(143);             // S^WS | '#' | '$' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 17998                 // 'append' '('\n     || lk == 18031                 // 'delete' '('\n     || lk == 18081                 // 'insert' '('\n     || lk == 18142                 // 'rename' '('\n     || lk == 99439                 // 'delete' 'node'\n     || lk == 99489                 // 'insert' 'node'\n     || lk == 99550                 // 'rename' 'node'\n     || lk == 99951                 // 'delete' 'nodes'\n     || lk == 100001                // 'insert' 'nodes'\n     || lk == 136927)               // 'replace' 'value'\n    {\n      lk = memoized(10, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_OrExpr();\n          lk = -2;\n        }\n        catch (p2A)\n        {\n          try\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            try_InsertExpr();\n            lk = -3;\n          }\n          catch (p3A)\n          {\n            try\n            {\n              b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n              b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n              b2 = b2A; e2 = e2A; end = e2A; }}\n              try_DeleteExpr();\n              lk = -4;\n            }\n            catch (p4A)\n            {\n              try\n              {\n                b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                b2 = b2A; e2 = e2A; end = e2A; }}\n                try_RenameExpr();\n                lk = -5;\n              }\n              catch (p5A)\n              {\n                try\n                {\n                  b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                  b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                  b2 = b2A; e2 = e2A; end = e2A; }}\n                  try_ReplaceExpr();\n                  lk = -6;\n                }\n                catch (p6A)\n                {\n                  try\n                  {\n                    b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                    b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                    b2 = b2A; e2 = e2A; end = e2A; }}\n                    try_JSONDeleteExpr();\n                    lk = -8;\n                  }\n                  catch (p8A)\n                  {\n                    try\n                    {\n                      b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                      b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                      b2 = b2A; e2 = e2A; end = e2A; }}\n                      try_JSONInsertExpr();\n                      lk = -9;\n                    }\n                    catch (p9A)\n                    {\n                      try\n                      {\n                        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                        b2 = b2A; e2 = e2A; end = e2A; }}\n                        try_JSONRenameExpr();\n                        lk = -10;\n                      }\n                      catch (p10A)\n                      {\n                        try\n                        {\n                          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                          b2 = b2A; e2 = e2A; end = e2A; }}\n                          try_JSONReplaceExpr();\n                          lk = -11;\n                        }\n                        catch (p11A)\n                        {\n                          lk = -12;\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(10, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case 16002:                     // 'every' '$'\n    case 16112:                     // 'some' '$'\n      parse_QuantifiedExpr();\n      break;\n    case -3:\n      parse_InsertExpr();\n      break;\n    case -4:\n      parse_DeleteExpr();\n      break;\n    case -5:\n      parse_RenameExpr();\n      break;\n    case -6:\n    case 99551:                     // 'replace' 'node'\n      parse_ReplaceExpr();\n      break;\n    case 15976:                     // 'copy' '$'\n      parse_TransformExpr();\n      break;\n    case -8:\n    case 3183:                      // 'delete' EQName^Token\n    case 4207:                      // 'delete' IntegerLiteral\n    case 4719:                      // 'delete' DecimalLiteral\n    case 5231:                      // 'delete' DoubleLiteral\n    case 5743:                      // 'delete' StringLiteral\n    case 15983:                     // 'delete' '$'\n    case 16495:                     // 'delete' '$$'\n    case 17007:                     // 'delete' '%'\n    case 28271:                     // 'delete' '<'\n    case 28783:                     // 'delete' '<!--'\n    case 30831:                     // 'delete' '<?'\n    case 35439:                     // 'delete' '['\n    case 36463:                     // 'delete' 'after'\n    case 37487:                     // 'delete' 'allowing'\n    case 37999:                     // 'delete' 'ancestor'\n    case 38511:                     // 'delete' 'ancestor-or-self'\n    case 39023:                     // 'delete' 'and'\n    case 40047:                     // 'delete' 'append'\n    case 40559:                     // 'delete' 'array'\n    case 41071:                     // 'delete' 'as'\n    case 41583:                     // 'delete' 'ascending'\n    case 42095:                     // 'delete' 'at'\n    case 42607:                     // 'delete' 'attribute'\n    case 43119:                     // 'delete' 'base-uri'\n    case 43631:                     // 'delete' 'before'\n    case 44143:                     // 'delete' 'boundary-space'\n    case 44655:                     // 'delete' 'break'\n    case 45679:                     // 'delete' 'case'\n    case 46191:                     // 'delete' 'cast'\n    case 46703:                     // 'delete' 'castable'\n    case 47215:                     // 'delete' 'catch'\n    case 48239:                     // 'delete' 'child'\n    case 48751:                     // 'delete' 'collation'\n    case 49775:                     // 'delete' 'comment'\n    case 50287:                     // 'delete' 'constraint'\n    case 50799:                     // 'delete' 'construction'\n    case 52335:                     // 'delete' 'context'\n    case 52847:                     // 'delete' 'continue'\n    case 53359:                     // 'delete' 'copy'\n    case 53871:                     // 'delete' 'copy-namespaces'\n    case 54383:                     // 'delete' 'count'\n    case 54895:                     // 'delete' 'decimal-format'\n    case 55919:                     // 'delete' 'declare'\n    case 56431:                     // 'delete' 'default'\n    case 56943:                     // 'delete' 'delete'\n    case 57455:                     // 'delete' 'descendant'\n    case 57967:                     // 'delete' 'descendant-or-self'\n    case 58479:                     // 'delete' 'descending'\n    case 61039:                     // 'delete' 'div'\n    case 61551:                     // 'delete' 'document'\n    case 62063:                     // 'delete' 'document-node'\n    case 62575:                     // 'delete' 'element'\n    case 63087:                     // 'delete' 'else'\n    case 63599:                     // 'delete' 'empty'\n    case 64111:                     // 'delete' 'empty-sequence'\n    case 64623:                     // 'delete' 'encoding'\n    case 65135:                     // 'delete' 'end'\n    case 66159:                     // 'delete' 'eq'\n    case 66671:                     // 'delete' 'every'\n    case 67695:                     // 'delete' 'except'\n    case 68207:                     // 'delete' 'exit'\n    case 68719:                     // 'delete' 'external'\n    case 69231:                     // 'delete' 'false'\n    case 69743:                     // 'delete' 'first'\n    case 70255:                     // 'delete' 'following'\n    case 70767:                     // 'delete' 'following-sibling'\n    case 71279:                     // 'delete' 'for'\n    case 72815:                     // 'delete' 'from'\n    case 73327:                     // 'delete' 'ft-option'\n    case 75375:                     // 'delete' 'function'\n    case 75887:                     // 'delete' 'ge'\n    case 76911:                     // 'delete' 'group'\n    case 77935:                     // 'delete' 'gt'\n    case 78447:                     // 'delete' 'idiv'\n    case 78959:                     // 'delete' 'if'\n    case 79471:                     // 'delete' 'import'\n    case 79983:                     // 'delete' 'in'\n    case 80495:                     // 'delete' 'index'\n    case 82543:                     // 'delete' 'insert'\n    case 83055:                     // 'delete' 'instance'\n    case 83567:                     // 'delete' 'integrity'\n    case 84079:                     // 'delete' 'intersect'\n    case 84591:                     // 'delete' 'into'\n    case 85103:                     // 'delete' 'is'\n    case 85615:                     // 'delete' 'item'\n    case 86127:                     // 'delete' 'json'\n    case 86639:                     // 'delete' 'json-item'\n    case 87151:                     // 'delete' 'jsoniq'\n    case 88687:                     // 'delete' 'last'\n    case 89199:                     // 'delete' 'lax'\n    case 89711:                     // 'delete' 'le'\n    case 90735:                     // 'delete' 'let'\n    case 91759:                     // 'delete' 'loop'\n    case 92783:                     // 'delete' 'lt'\n    case 93807:                     // 'delete' 'mod'\n    case 94319:                     // 'delete' 'modify'\n    case 94831:                     // 'delete' 'module'\n    case 95855:                     // 'delete' 'namespace'\n    case 96367:                     // 'delete' 'namespace-node'\n    case 96879:                     // 'delete' 'ne'\n    case 100975:                    // 'delete' 'null'\n    case 101487:                    // 'delete' 'object'\n    case 103535:                    // 'delete' 'only'\n    case 104047:                    // 'delete' 'option'\n    case 104559:                    // 'delete' 'or'\n    case 105071:                    // 'delete' 'order'\n    case 105583:                    // 'delete' 'ordered'\n    case 106095:                    // 'delete' 'ordering'\n    case 107631:                    // 'delete' 'parent'\n    case 110703:                    // 'delete' 'preceding'\n    case 111215:                    // 'delete' 'preceding-sibling'\n    case 112751:                    // 'delete' 'processing-instruction'\n    case 113775:                    // 'delete' 'rename'\n    case 114287:                    // 'delete' 'replace'\n    case 114799:                    // 'delete' 'return'\n    case 115311:                    // 'delete' 'returning'\n    case 115823:                    // 'delete' 'revalidation'\n    case 116847:                    // 'delete' 'satisfies'\n    case 117359:                    // 'delete' 'schema'\n    case 117871:                    // 'delete' 'schema-attribute'\n    case 118383:                    // 'delete' 'schema-element'\n    case 118895:                    // 'delete' 'score'\n    case 119407:                    // 'delete' 'select'\n    case 119919:                    // 'delete' 'self'\n    case 122479:                    // 'delete' 'sliding'\n    case 122991:                    // 'delete' 'some'\n    case 123503:                    // 'delete' 'stable'\n    case 124015:                    // 'delete' 'start'\n    case 125551:                    // 'delete' 'strict'\n    case 126575:                    // 'delete' 'structured-item'\n    case 127087:                    // 'delete' 'switch'\n    case 127599:                    // 'delete' 'text'\n    case 129647:                    // 'delete' 'to'\n    case 130159:                    // 'delete' 'treat'\n    case 130671:                    // 'delete' 'true'\n    case 131183:                    // 'delete' 'try'\n    case 131695:                    // 'delete' 'tumbling'\n    case 132207:                    // 'delete' 'type'\n    case 132719:                    // 'delete' 'typeswitch'\n    case 133231:                    // 'delete' 'union'\n    case 134255:                    // 'delete' 'unordered'\n    case 134767:                    // 'delete' 'updating'\n    case 136303:                    // 'delete' 'validate'\n    case 136815:                    // 'delete' 'value'\n    case 137327:                    // 'delete' 'variable'\n    case 137839:                    // 'delete' 'version'\n    case 139375:                    // 'delete' 'where'\n    case 139887:                    // 'delete' 'while'\n    case 141423:                    // 'delete' 'with'\n    case 143983:                    // 'delete' '{'\n    case 145007:                    // 'delete' '{|'\n      parse_JSONDeleteExpr();\n      break;\n    case -9:\n    case 3233:                      // 'insert' EQName^Token\n    case 4257:                      // 'insert' IntegerLiteral\n    case 4769:                      // 'insert' DecimalLiteral\n    case 5281:                      // 'insert' DoubleLiteral\n    case 5793:                      // 'insert' StringLiteral\n    case 9889:                      // 'insert' NCName^Token\n    case 16033:                     // 'insert' '$'\n    case 16545:                     // 'insert' '$$'\n    case 17057:                     // 'insert' '%'\n    case 18593:                     // 'insert' '(#'\n    case 21153:                     // 'insert' '+'\n    case 22177:                     // 'insert' '-'\n    case 24225:                     // 'insert' '/'\n    case 24737:                     // 'insert' '//'\n    case 28321:                     // 'insert' '<'\n    case 28833:                     // 'insert' '<!--'\n    case 30881:                     // 'insert' '<?'\n    case 35489:                     // 'insert' '['\n    case 36513:                     // 'insert' 'after'\n    case 37537:                     // 'insert' 'allowing'\n    case 38049:                     // 'insert' 'ancestor'\n    case 38561:                     // 'insert' 'ancestor-or-self'\n    case 39073:                     // 'insert' 'and'\n    case 40097:                     // 'insert' 'append'\n    case 40609:                     // 'insert' 'array'\n    case 41121:                     // 'insert' 'as'\n    case 41633:                     // 'insert' 'ascending'\n    case 42145:                     // 'insert' 'at'\n    case 42657:                     // 'insert' 'attribute'\n    case 43169:                     // 'insert' 'base-uri'\n    case 43681:                     // 'insert' 'before'\n    case 44193:                     // 'insert' 'boundary-space'\n    case 44705:                     // 'insert' 'break'\n    case 45729:                     // 'insert' 'case'\n    case 46241:                     // 'insert' 'cast'\n    case 46753:                     // 'insert' 'castable'\n    case 47265:                     // 'insert' 'catch'\n    case 48289:                     // 'insert' 'child'\n    case 48801:                     // 'insert' 'collation'\n    case 49825:                     // 'insert' 'comment'\n    case 50337:                     // 'insert' 'constraint'\n    case 50849:                     // 'insert' 'construction'\n    case 52385:                     // 'insert' 'context'\n    case 52897:                     // 'insert' 'continue'\n    case 53409:                     // 'insert' 'copy'\n    case 53921:                     // 'insert' 'copy-namespaces'\n    case 54433:                     // 'insert' 'count'\n    case 54945:                     // 'insert' 'decimal-format'\n    case 55969:                     // 'insert' 'declare'\n    case 56481:                     // 'insert' 'default'\n    case 56993:                     // 'insert' 'delete'\n    case 57505:                     // 'insert' 'descendant'\n    case 58017:                     // 'insert' 'descendant-or-self'\n    case 58529:                     // 'insert' 'descending'\n    case 61089:                     // 'insert' 'div'\n    case 61601:                     // 'insert' 'document'\n    case 62113:                     // 'insert' 'document-node'\n    case 62625:                     // 'insert' 'element'\n    case 63137:                     // 'insert' 'else'\n    case 63649:                     // 'insert' 'empty'\n    case 64161:                     // 'insert' 'empty-sequence'\n    case 64673:                     // 'insert' 'encoding'\n    case 65185:                     // 'insert' 'end'\n    case 66209:                     // 'insert' 'eq'\n    case 66721:                     // 'insert' 'every'\n    case 67745:                     // 'insert' 'except'\n    case 68257:                     // 'insert' 'exit'\n    case 68769:                     // 'insert' 'external'\n    case 69281:                     // 'insert' 'false'\n    case 69793:                     // 'insert' 'first'\n    case 70305:                     // 'insert' 'following'\n    case 70817:                     // 'insert' 'following-sibling'\n    case 71329:                     // 'insert' 'for'\n    case 72865:                     // 'insert' 'from'\n    case 73377:                     // 'insert' 'ft-option'\n    case 75425:                     // 'insert' 'function'\n    case 75937:                     // 'insert' 'ge'\n    case 76961:                     // 'insert' 'group'\n    case 77985:                     // 'insert' 'gt'\n    case 78497:                     // 'insert' 'idiv'\n    case 79009:                     // 'insert' 'if'\n    case 79521:                     // 'insert' 'import'\n    case 80033:                     // 'insert' 'in'\n    case 80545:                     // 'insert' 'index'\n    case 82593:                     // 'insert' 'insert'\n    case 83105:                     // 'insert' 'instance'\n    case 83617:                     // 'insert' 'integrity'\n    case 84129:                     // 'insert' 'intersect'\n    case 84641:                     // 'insert' 'into'\n    case 85153:                     // 'insert' 'is'\n    case 85665:                     // 'insert' 'item'\n    case 86177:                     // 'insert' 'json'\n    case 86689:                     // 'insert' 'json-item'\n    case 87201:                     // 'insert' 'jsoniq'\n    case 88737:                     // 'insert' 'last'\n    case 89249:                     // 'insert' 'lax'\n    case 89761:                     // 'insert' 'le'\n    case 90785:                     // 'insert' 'let'\n    case 91809:                     // 'insert' 'loop'\n    case 92833:                     // 'insert' 'lt'\n    case 93857:                     // 'insert' 'mod'\n    case 94369:                     // 'insert' 'modify'\n    case 94881:                     // 'insert' 'module'\n    case 95905:                     // 'insert' 'namespace'\n    case 96417:                     // 'insert' 'namespace-node'\n    case 96929:                     // 'insert' 'ne'\n    case 100513:                    // 'insert' 'not'\n    case 101025:                    // 'insert' 'null'\n    case 101537:                    // 'insert' 'object'\n    case 103585:                    // 'insert' 'only'\n    case 104097:                    // 'insert' 'option'\n    case 104609:                    // 'insert' 'or'\n    case 105121:                    // 'insert' 'order'\n    case 105633:                    // 'insert' 'ordered'\n    case 106145:                    // 'insert' 'ordering'\n    case 107681:                    // 'insert' 'parent'\n    case 110753:                    // 'insert' 'preceding'\n    case 111265:                    // 'insert' 'preceding-sibling'\n    case 112801:                    // 'insert' 'processing-instruction'\n    case 113825:                    // 'insert' 'rename'\n    case 114337:                    // 'insert' 'replace'\n    case 114849:                    // 'insert' 'return'\n    case 115361:                    // 'insert' 'returning'\n    case 115873:                    // 'insert' 'revalidation'\n    case 116897:                    // 'insert' 'satisfies'\n    case 117409:                    // 'insert' 'schema'\n    case 117921:                    // 'insert' 'schema-attribute'\n    case 118433:                    // 'insert' 'schema-element'\n    case 118945:                    // 'insert' 'score'\n    case 119457:                    // 'insert' 'select'\n    case 119969:                    // 'insert' 'self'\n    case 122529:                    // 'insert' 'sliding'\n    case 123041:                    // 'insert' 'some'\n    case 123553:                    // 'insert' 'stable'\n    case 124065:                    // 'insert' 'start'\n    case 125601:                    // 'insert' 'strict'\n    case 126625:                    // 'insert' 'structured-item'\n    case 127137:                    // 'insert' 'switch'\n    case 127649:                    // 'insert' 'text'\n    case 129697:                    // 'insert' 'to'\n    case 130209:                    // 'insert' 'treat'\n    case 130721:                    // 'insert' 'true'\n    case 131233:                    // 'insert' 'try'\n    case 131745:                    // 'insert' 'tumbling'\n    case 132257:                    // 'insert' 'type'\n    case 132769:                    // 'insert' 'typeswitch'\n    case 133281:                    // 'insert' 'union'\n    case 134305:                    // 'insert' 'unordered'\n    case 134817:                    // 'insert' 'updating'\n    case 136353:                    // 'insert' 'validate'\n    case 136865:                    // 'insert' 'value'\n    case 137377:                    // 'insert' 'variable'\n    case 137889:                    // 'insert' 'version'\n    case 139425:                    // 'insert' 'where'\n    case 139937:                    // 'insert' 'while'\n    case 141473:                    // 'insert' 'with'\n    case 144033:                    // 'insert' '{'\n    case 145057:                    // 'insert' '{|'\n      parse_JSONInsertExpr();\n      break;\n    case -10:\n    case 3294:                      // 'rename' EQName^Token\n    case 4318:                      // 'rename' IntegerLiteral\n    case 4830:                      // 'rename' DecimalLiteral\n    case 5342:                      // 'rename' DoubleLiteral\n    case 5854:                      // 'rename' StringLiteral\n    case 16094:                     // 'rename' '$'\n    case 16606:                     // 'rename' '$$'\n    case 17118:                     // 'rename' '%'\n    case 28382:                     // 'rename' '<'\n    case 28894:                     // 'rename' '<!--'\n    case 30942:                     // 'rename' '<?'\n    case 35550:                     // 'rename' '['\n    case 36574:                     // 'rename' 'after'\n    case 37598:                     // 'rename' 'allowing'\n    case 38110:                     // 'rename' 'ancestor'\n    case 38622:                     // 'rename' 'ancestor-or-self'\n    case 39134:                     // 'rename' 'and'\n    case 40158:                     // 'rename' 'append'\n    case 40670:                     // 'rename' 'array'\n    case 41182:                     // 'rename' 'as'\n    case 41694:                     // 'rename' 'ascending'\n    case 42206:                     // 'rename' 'at'\n    case 42718:                     // 'rename' 'attribute'\n    case 43230:                     // 'rename' 'base-uri'\n    case 43742:                     // 'rename' 'before'\n    case 44254:                     // 'rename' 'boundary-space'\n    case 44766:                     // 'rename' 'break'\n    case 45790:                     // 'rename' 'case'\n    case 46302:                     // 'rename' 'cast'\n    case 46814:                     // 'rename' 'castable'\n    case 47326:                     // 'rename' 'catch'\n    case 48350:                     // 'rename' 'child'\n    case 48862:                     // 'rename' 'collation'\n    case 49886:                     // 'rename' 'comment'\n    case 50398:                     // 'rename' 'constraint'\n    case 50910:                     // 'rename' 'construction'\n    case 52446:                     // 'rename' 'context'\n    case 52958:                     // 'rename' 'continue'\n    case 53470:                     // 'rename' 'copy'\n    case 53982:                     // 'rename' 'copy-namespaces'\n    case 54494:                     // 'rename' 'count'\n    case 55006:                     // 'rename' 'decimal-format'\n    case 56030:                     // 'rename' 'declare'\n    case 56542:                     // 'rename' 'default'\n    case 57054:                     // 'rename' 'delete'\n    case 57566:                     // 'rename' 'descendant'\n    case 58078:                     // 'rename' 'descendant-or-self'\n    case 58590:                     // 'rename' 'descending'\n    case 61150:                     // 'rename' 'div'\n    case 61662:                     // 'rename' 'document'\n    case 62174:                     // 'rename' 'document-node'\n    case 62686:                     // 'rename' 'element'\n    case 63198:                     // 'rename' 'else'\n    case 63710:                     // 'rename' 'empty'\n    case 64222:                     // 'rename' 'empty-sequence'\n    case 64734:                     // 'rename' 'encoding'\n    case 65246:                     // 'rename' 'end'\n    case 66270:                     // 'rename' 'eq'\n    case 66782:                     // 'rename' 'every'\n    case 67806:                     // 'rename' 'except'\n    case 68318:                     // 'rename' 'exit'\n    case 68830:                     // 'rename' 'external'\n    case 69342:                     // 'rename' 'false'\n    case 69854:                     // 'rename' 'first'\n    case 70366:                     // 'rename' 'following'\n    case 70878:                     // 'rename' 'following-sibling'\n    case 71390:                     // 'rename' 'for'\n    case 72926:                     // 'rename' 'from'\n    case 73438:                     // 'rename' 'ft-option'\n    case 75486:                     // 'rename' 'function'\n    case 75998:                     // 'rename' 'ge'\n    case 77022:                     // 'rename' 'group'\n    case 78046:                     // 'rename' 'gt'\n    case 78558:                     // 'rename' 'idiv'\n    case 79070:                     // 'rename' 'if'\n    case 79582:                     // 'rename' 'import'\n    case 80094:                     // 'rename' 'in'\n    case 80606:                     // 'rename' 'index'\n    case 82654:                     // 'rename' 'insert'\n    case 83166:                     // 'rename' 'instance'\n    case 83678:                     // 'rename' 'integrity'\n    case 84190:                     // 'rename' 'intersect'\n    case 84702:                     // 'rename' 'into'\n    case 85214:                     // 'rename' 'is'\n    case 85726:                     // 'rename' 'item'\n    case 86238:                     // 'rename' 'json'\n    case 86750:                     // 'rename' 'json-item'\n    case 87262:                     // 'rename' 'jsoniq'\n    case 88798:                     // 'rename' 'last'\n    case 89310:                     // 'rename' 'lax'\n    case 89822:                     // 'rename' 'le'\n    case 90846:                     // 'rename' 'let'\n    case 91870:                     // 'rename' 'loop'\n    case 92894:                     // 'rename' 'lt'\n    case 93918:                     // 'rename' 'mod'\n    case 94430:                     // 'rename' 'modify'\n    case 94942:                     // 'rename' 'module'\n    case 95966:                     // 'rename' 'namespace'\n    case 96478:                     // 'rename' 'namespace-node'\n    case 96990:                     // 'rename' 'ne'\n    case 100062:                    // 'rename' 'nodes'\n    case 101086:                    // 'rename' 'null'\n    case 101598:                    // 'rename' 'object'\n    case 103646:                    // 'rename' 'only'\n    case 104158:                    // 'rename' 'option'\n    case 104670:                    // 'rename' 'or'\n    case 105182:                    // 'rename' 'order'\n    case 105694:                    // 'rename' 'ordered'\n    case 106206:                    // 'rename' 'ordering'\n    case 107742:                    // 'rename' 'parent'\n    case 110814:                    // 'rename' 'preceding'\n    case 111326:                    // 'rename' 'preceding-sibling'\n    case 112862:                    // 'rename' 'processing-instruction'\n    case 113886:                    // 'rename' 'rename'\n    case 114398:                    // 'rename' 'replace'\n    case 114910:                    // 'rename' 'return'\n    case 115422:                    // 'rename' 'returning'\n    case 115934:                    // 'rename' 'revalidation'\n    case 116958:                    // 'rename' 'satisfies'\n    case 117470:                    // 'rename' 'schema'\n    case 117982:                    // 'rename' 'schema-attribute'\n    case 118494:                    // 'rename' 'schema-element'\n    case 119006:                    // 'rename' 'score'\n    case 119518:                    // 'rename' 'select'\n    case 120030:                    // 'rename' 'self'\n    case 122590:                    // 'rename' 'sliding'\n    case 123102:                    // 'rename' 'some'\n    case 123614:                    // 'rename' 'stable'\n    case 124126:                    // 'rename' 'start'\n    case 125662:                    // 'rename' 'strict'\n    case 126686:                    // 'rename' 'structured-item'\n    case 127198:                    // 'rename' 'switch'\n    case 127710:                    // 'rename' 'text'\n    case 129758:                    // 'rename' 'to'\n    case 130270:                    // 'rename' 'treat'\n    case 130782:                    // 'rename' 'true'\n    case 131294:                    // 'rename' 'try'\n    case 131806:                    // 'rename' 'tumbling'\n    case 132318:                    // 'rename' 'type'\n    case 132830:                    // 'rename' 'typeswitch'\n    case 133342:                    // 'rename' 'union'\n    case 134366:                    // 'rename' 'unordered'\n    case 134878:                    // 'rename' 'updating'\n    case 136414:                    // 'rename' 'validate'\n    case 136926:                    // 'rename' 'value'\n    case 137438:                    // 'rename' 'variable'\n    case 137950:                    // 'rename' 'version'\n    case 139486:                    // 'rename' 'where'\n    case 139998:                    // 'rename' 'while'\n    case 141534:                    // 'rename' 'with'\n    case 144094:                    // 'rename' '{'\n    case 145118:                    // 'rename' '{|'\n      parse_JSONRenameExpr();\n      break;\n    case -11:\n      parse_JSONReplaceExpr();\n      break;\n    case -12:\n    case 3150:                      // 'append' EQName^Token\n    case 4174:                      // 'append' IntegerLiteral\n    case 4686:                      // 'append' DecimalLiteral\n    case 5198:                      // 'append' DoubleLiteral\n    case 5710:                      // 'append' StringLiteral\n    case 15950:                     // 'append' '$'\n    case 16462:                     // 'append' '$$'\n    case 16974:                     // 'append' '%'\n    case 18510:                     // 'append' '(#'\n    case 21070:                     // 'append' '+'\n    case 22094:                     // 'append' '-'\n    case 24142:                     // 'append' '/'\n    case 24654:                     // 'append' '//'\n    case 28238:                     // 'append' '<'\n    case 28750:                     // 'append' '<!--'\n    case 30798:                     // 'append' '<?'\n    case 35406:                     // 'append' '['\n    case 36430:                     // 'append' 'after'\n    case 37454:                     // 'append' 'allowing'\n    case 37966:                     // 'append' 'ancestor'\n    case 38478:                     // 'append' 'ancestor-or-self'\n    case 38990:                     // 'append' 'and'\n    case 40014:                     // 'append' 'append'\n    case 40526:                     // 'append' 'array'\n    case 41038:                     // 'append' 'as'\n    case 41550:                     // 'append' 'ascending'\n    case 42062:                     // 'append' 'at'\n    case 42574:                     // 'append' 'attribute'\n    case 43086:                     // 'append' 'base-uri'\n    case 43598:                     // 'append' 'before'\n    case 44110:                     // 'append' 'boundary-space'\n    case 44622:                     // 'append' 'break'\n    case 45646:                     // 'append' 'case'\n    case 46158:                     // 'append' 'cast'\n    case 46670:                     // 'append' 'castable'\n    case 47182:                     // 'append' 'catch'\n    case 48206:                     // 'append' 'child'\n    case 48718:                     // 'append' 'collation'\n    case 49742:                     // 'append' 'comment'\n    case 50254:                     // 'append' 'constraint'\n    case 50766:                     // 'append' 'construction'\n    case 52302:                     // 'append' 'context'\n    case 52814:                     // 'append' 'continue'\n    case 53326:                     // 'append' 'copy'\n    case 53838:                     // 'append' 'copy-namespaces'\n    case 54350:                     // 'append' 'count'\n    case 54862:                     // 'append' 'decimal-format'\n    case 55886:                     // 'append' 'declare'\n    case 56398:                     // 'append' 'default'\n    case 56910:                     // 'append' 'delete'\n    case 57422:                     // 'append' 'descendant'\n    case 57934:                     // 'append' 'descendant-or-self'\n    case 58446:                     // 'append' 'descending'\n    case 61006:                     // 'append' 'div'\n    case 61518:                     // 'append' 'document'\n    case 62030:                     // 'append' 'document-node'\n    case 62542:                     // 'append' 'element'\n    case 63054:                     // 'append' 'else'\n    case 63566:                     // 'append' 'empty'\n    case 64078:                     // 'append' 'empty-sequence'\n    case 64590:                     // 'append' 'encoding'\n    case 65102:                     // 'append' 'end'\n    case 66126:                     // 'append' 'eq'\n    case 66638:                     // 'append' 'every'\n    case 67662:                     // 'append' 'except'\n    case 68174:                     // 'append' 'exit'\n    case 68686:                     // 'append' 'external'\n    case 69198:                     // 'append' 'false'\n    case 69710:                     // 'append' 'first'\n    case 70222:                     // 'append' 'following'\n    case 70734:                     // 'append' 'following-sibling'\n    case 71246:                     // 'append' 'for'\n    case 72782:                     // 'append' 'from'\n    case 73294:                     // 'append' 'ft-option'\n    case 75342:                     // 'append' 'function'\n    case 75854:                     // 'append' 'ge'\n    case 76878:                     // 'append' 'group'\n    case 77902:                     // 'append' 'gt'\n    case 78414:                     // 'append' 'idiv'\n    case 78926:                     // 'append' 'if'\n    case 79438:                     // 'append' 'import'\n    case 79950:                     // 'append' 'in'\n    case 80462:                     // 'append' 'index'\n    case 82510:                     // 'append' 'insert'\n    case 83022:                     // 'append' 'instance'\n    case 83534:                     // 'append' 'integrity'\n    case 84046:                     // 'append' 'intersect'\n    case 84558:                     // 'append' 'into'\n    case 85070:                     // 'append' 'is'\n    case 85582:                     // 'append' 'item'\n    case 86094:                     // 'append' 'json'\n    case 86606:                     // 'append' 'json-item'\n    case 87118:                     // 'append' 'jsoniq'\n    case 88654:                     // 'append' 'last'\n    case 89166:                     // 'append' 'lax'\n    case 89678:                     // 'append' 'le'\n    case 90702:                     // 'append' 'let'\n    case 91726:                     // 'append' 'loop'\n    case 92750:                     // 'append' 'lt'\n    case 93774:                     // 'append' 'mod'\n    case 94286:                     // 'append' 'modify'\n    case 94798:                     // 'append' 'module'\n    case 95822:                     // 'append' 'namespace'\n    case 96334:                     // 'append' 'namespace-node'\n    case 96846:                     // 'append' 'ne'\n    case 99406:                     // 'append' 'node'\n    case 99918:                     // 'append' 'nodes'\n    case 100430:                    // 'append' 'not'\n    case 100942:                    // 'append' 'null'\n    case 101454:                    // 'append' 'object'\n    case 103502:                    // 'append' 'only'\n    case 104014:                    // 'append' 'option'\n    case 104526:                    // 'append' 'or'\n    case 105038:                    // 'append' 'order'\n    case 105550:                    // 'append' 'ordered'\n    case 106062:                    // 'append' 'ordering'\n    case 107598:                    // 'append' 'parent'\n    case 110670:                    // 'append' 'preceding'\n    case 111182:                    // 'append' 'preceding-sibling'\n    case 112718:                    // 'append' 'processing-instruction'\n    case 113742:                    // 'append' 'rename'\n    case 114254:                    // 'append' 'replace'\n    case 114766:                    // 'append' 'return'\n    case 115278:                    // 'append' 'returning'\n    case 115790:                    // 'append' 'revalidation'\n    case 116814:                    // 'append' 'satisfies'\n    case 117326:                    // 'append' 'schema'\n    case 117838:                    // 'append' 'schema-attribute'\n    case 118350:                    // 'append' 'schema-element'\n    case 118862:                    // 'append' 'score'\n    case 119374:                    // 'append' 'select'\n    case 119886:                    // 'append' 'self'\n    case 122446:                    // 'append' 'sliding'\n    case 122958:                    // 'append' 'some'\n    case 123470:                    // 'append' 'stable'\n    case 123982:                    // 'append' 'start'\n    case 125518:                    // 'append' 'strict'\n    case 126542:                    // 'append' 'structured-item'\n    case 127054:                    // 'append' 'switch'\n    case 127566:                    // 'append' 'text'\n    case 129614:                    // 'append' 'to'\n    case 130126:                    // 'append' 'treat'\n    case 130638:                    // 'append' 'true'\n    case 131150:                    // 'append' 'try'\n    case 131662:                    // 'append' 'tumbling'\n    case 132174:                    // 'append' 'type'\n    case 132686:                    // 'append' 'typeswitch'\n    case 133198:                    // 'append' 'union'\n    case 134222:                    // 'append' 'unordered'\n    case 134734:                    // 'append' 'updating'\n    case 136270:                    // 'append' 'validate'\n    case 136782:                    // 'append' 'value'\n    case 137294:                    // 'append' 'variable'\n    case 137806:                    // 'append' 'version'\n    case 139342:                    // 'append' 'where'\n    case 139854:                    // 'append' 'while'\n    case 141390:                    // 'append' 'with'\n    case 143950:                    // 'append' '{'\n    case 144974:                    // 'append' '{|'\n      parse_JSONAppendExpr();\n      break;\n    default:\n      parse_OrExpr();\n    }\n    eventHandler.endNonterminal(\"ExprSimple\", e0);\n  }\n\n  function try_ExprSimple()\n  {\n    switch (l1)\n    {\n    case 78:                        // 'append'\n      lookahead2W(268);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '#' | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' |\n                                    // '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      break;\n    case 161:                       // 'insert'\n      lookahead2W(275);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // NCName^Token | S^WS | '#' | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      break;\n    case 223:                       // 'replace'\n      lookahead2W(170);             // S^WS | '#' | '(' | '(:' | 'node' | 'value'\n      break;\n    case 111:                       // 'delete'\n    case 222:                       // 'rename'\n      lookahead2W(260);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '#' | '$' | '$$' | '%' | '(' | '(:' | '<' | '<!--' | '<?' | '[' |\n                                    // 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' |\n                                    // 'array' | 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'false' | 'first' | 'following' | 'following-sibling' |\n                                    // 'for' | 'from' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' |\n                                    // 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'json-item' | 'jsoniq' | 'last' |\n                                    // 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' |\n                                    // 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' | 'sliding' |\n                                    // 'some' | 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' |\n                                    // 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | '{' | '{|'\n      break;\n    case 104:                       // 'copy'\n    case 130:                       // 'every'\n    case 240:                       // 'some'\n      lookahead2W(143);             // S^WS | '#' | '$' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 17998                 // 'append' '('\n     || lk == 18031                 // 'delete' '('\n     || lk == 18081                 // 'insert' '('\n     || lk == 18142                 // 'rename' '('\n     || lk == 99439                 // 'delete' 'node'\n     || lk == 99489                 // 'insert' 'node'\n     || lk == 99550                 // 'rename' 'node'\n     || lk == 99951                 // 'delete' 'nodes'\n     || lk == 100001                // 'insert' 'nodes'\n     || lk == 136927)               // 'replace' 'value'\n    {\n      lk = memoized(10, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_OrExpr();\n          memoize(10, e0A, -2);\n          lk = -13;\n        }\n        catch (p2A)\n        {\n          try\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            try_InsertExpr();\n            memoize(10, e0A, -3);\n            lk = -13;\n          }\n          catch (p3A)\n          {\n            try\n            {\n              b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n              b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n              b2 = b2A; e2 = e2A; end = e2A; }}\n              try_DeleteExpr();\n              memoize(10, e0A, -4);\n              lk = -13;\n            }\n            catch (p4A)\n            {\n              try\n              {\n                b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                b2 = b2A; e2 = e2A; end = e2A; }}\n                try_RenameExpr();\n                memoize(10, e0A, -5);\n                lk = -13;\n              }\n              catch (p5A)\n              {\n                try\n                {\n                  b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                  b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                  b2 = b2A; e2 = e2A; end = e2A; }}\n                  try_ReplaceExpr();\n                  memoize(10, e0A, -6);\n                  lk = -13;\n                }\n                catch (p6A)\n                {\n                  try\n                  {\n                    b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                    b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                    b2 = b2A; e2 = e2A; end = e2A; }}\n                    try_JSONDeleteExpr();\n                    memoize(10, e0A, -8);\n                    lk = -13;\n                  }\n                  catch (p8A)\n                  {\n                    try\n                    {\n                      b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                      b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                      b2 = b2A; e2 = e2A; end = e2A; }}\n                      try_JSONInsertExpr();\n                      memoize(10, e0A, -9);\n                      lk = -13;\n                    }\n                    catch (p9A)\n                    {\n                      try\n                      {\n                        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                        b2 = b2A; e2 = e2A; end = e2A; }}\n                        try_JSONRenameExpr();\n                        memoize(10, e0A, -10);\n                        lk = -13;\n                      }\n                      catch (p10A)\n                      {\n                        try\n                        {\n                          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                          b2 = b2A; e2 = e2A; end = e2A; }}\n                          try_JSONReplaceExpr();\n                          memoize(10, e0A, -11);\n                          lk = -13;\n                        }\n                        catch (p11A)\n                        {\n                          lk = -12;\n                          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                          b2 = b2A; e2 = e2A; end = e2A; }}\n                          memoize(10, e0A, -12);\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n    switch (lk)\n    {\n    case 16002:                     // 'every' '$'\n    case 16112:                     // 'some' '$'\n      try_QuantifiedExpr();\n      break;\n    case -3:\n      try_InsertExpr();\n      break;\n    case -4:\n      try_DeleteExpr();\n      break;\n    case -5:\n      try_RenameExpr();\n      break;\n    case -6:\n    case 99551:                     // 'replace' 'node'\n      try_ReplaceExpr();\n      break;\n    case 15976:                     // 'copy' '$'\n      try_TransformExpr();\n      break;\n    case -8:\n    case 3183:                      // 'delete' EQName^Token\n    case 4207:                      // 'delete' IntegerLiteral\n    case 4719:                      // 'delete' DecimalLiteral\n    case 5231:                      // 'delete' DoubleLiteral\n    case 5743:                      // 'delete' StringLiteral\n    case 15983:                     // 'delete' '$'\n    case 16495:                     // 'delete' '$$'\n    case 17007:                     // 'delete' '%'\n    case 28271:                     // 'delete' '<'\n    case 28783:                     // 'delete' '<!--'\n    case 30831:                     // 'delete' '<?'\n    case 35439:                     // 'delete' '['\n    case 36463:                     // 'delete' 'after'\n    case 37487:                     // 'delete' 'allowing'\n    case 37999:                     // 'delete' 'ancestor'\n    case 38511:                     // 'delete' 'ancestor-or-self'\n    case 39023:                     // 'delete' 'and'\n    case 40047:                     // 'delete' 'append'\n    case 40559:                     // 'delete' 'array'\n    case 41071:                     // 'delete' 'as'\n    case 41583:                     // 'delete' 'ascending'\n    case 42095:                     // 'delete' 'at'\n    case 42607:                     // 'delete' 'attribute'\n    case 43119:                     // 'delete' 'base-uri'\n    case 43631:                     // 'delete' 'before'\n    case 44143:                     // 'delete' 'boundary-space'\n    case 44655:                     // 'delete' 'break'\n    case 45679:                     // 'delete' 'case'\n    case 46191:                     // 'delete' 'cast'\n    case 46703:                     // 'delete' 'castable'\n    case 47215:                     // 'delete' 'catch'\n    case 48239:                     // 'delete' 'child'\n    case 48751:                     // 'delete' 'collation'\n    case 49775:                     // 'delete' 'comment'\n    case 50287:                     // 'delete' 'constraint'\n    case 50799:                     // 'delete' 'construction'\n    case 52335:                     // 'delete' 'context'\n    case 52847:                     // 'delete' 'continue'\n    case 53359:                     // 'delete' 'copy'\n    case 53871:                     // 'delete' 'copy-namespaces'\n    case 54383:                     // 'delete' 'count'\n    case 54895:                     // 'delete' 'decimal-format'\n    case 55919:                     // 'delete' 'declare'\n    case 56431:                     // 'delete' 'default'\n    case 56943:                     // 'delete' 'delete'\n    case 57455:                     // 'delete' 'descendant'\n    case 57967:                     // 'delete' 'descendant-or-self'\n    case 58479:                     // 'delete' 'descending'\n    case 61039:                     // 'delete' 'div'\n    case 61551:                     // 'delete' 'document'\n    case 62063:                     // 'delete' 'document-node'\n    case 62575:                     // 'delete' 'element'\n    case 63087:                     // 'delete' 'else'\n    case 63599:                     // 'delete' 'empty'\n    case 64111:                     // 'delete' 'empty-sequence'\n    case 64623:                     // 'delete' 'encoding'\n    case 65135:                     // 'delete' 'end'\n    case 66159:                     // 'delete' 'eq'\n    case 66671:                     // 'delete' 'every'\n    case 67695:                     // 'delete' 'except'\n    case 68207:                     // 'delete' 'exit'\n    case 68719:                     // 'delete' 'external'\n    case 69231:                     // 'delete' 'false'\n    case 69743:                     // 'delete' 'first'\n    case 70255:                     // 'delete' 'following'\n    case 70767:                     // 'delete' 'following-sibling'\n    case 71279:                     // 'delete' 'for'\n    case 72815:                     // 'delete' 'from'\n    case 73327:                     // 'delete' 'ft-option'\n    case 75375:                     // 'delete' 'function'\n    case 75887:                     // 'delete' 'ge'\n    case 76911:                     // 'delete' 'group'\n    case 77935:                     // 'delete' 'gt'\n    case 78447:                     // 'delete' 'idiv'\n    case 78959:                     // 'delete' 'if'\n    case 79471:                     // 'delete' 'import'\n    case 79983:                     // 'delete' 'in'\n    case 80495:                     // 'delete' 'index'\n    case 82543:                     // 'delete' 'insert'\n    case 83055:                     // 'delete' 'instance'\n    case 83567:                     // 'delete' 'integrity'\n    case 84079:                     // 'delete' 'intersect'\n    case 84591:                     // 'delete' 'into'\n    case 85103:                     // 'delete' 'is'\n    case 85615:                     // 'delete' 'item'\n    case 86127:                     // 'delete' 'json'\n    case 86639:                     // 'delete' 'json-item'\n    case 87151:                     // 'delete' 'jsoniq'\n    case 88687:                     // 'delete' 'last'\n    case 89199:                     // 'delete' 'lax'\n    case 89711:                     // 'delete' 'le'\n    case 90735:                     // 'delete' 'let'\n    case 91759:                     // 'delete' 'loop'\n    case 92783:                     // 'delete' 'lt'\n    case 93807:                     // 'delete' 'mod'\n    case 94319:                     // 'delete' 'modify'\n    case 94831:                     // 'delete' 'module'\n    case 95855:                     // 'delete' 'namespace'\n    case 96367:                     // 'delete' 'namespace-node'\n    case 96879:                     // 'delete' 'ne'\n    case 100975:                    // 'delete' 'null'\n    case 101487:                    // 'delete' 'object'\n    case 103535:                    // 'delete' 'only'\n    case 104047:                    // 'delete' 'option'\n    case 104559:                    // 'delete' 'or'\n    case 105071:                    // 'delete' 'order'\n    case 105583:                    // 'delete' 'ordered'\n    case 106095:                    // 'delete' 'ordering'\n    case 107631:                    // 'delete' 'parent'\n    case 110703:                    // 'delete' 'preceding'\n    case 111215:                    // 'delete' 'preceding-sibling'\n    case 112751:                    // 'delete' 'processing-instruction'\n    case 113775:                    // 'delete' 'rename'\n    case 114287:                    // 'delete' 'replace'\n    case 114799:                    // 'delete' 'return'\n    case 115311:                    // 'delete' 'returning'\n    case 115823:                    // 'delete' 'revalidation'\n    case 116847:                    // 'delete' 'satisfies'\n    case 117359:                    // 'delete' 'schema'\n    case 117871:                    // 'delete' 'schema-attribute'\n    case 118383:                    // 'delete' 'schema-element'\n    case 118895:                    // 'delete' 'score'\n    case 119407:                    // 'delete' 'select'\n    case 119919:                    // 'delete' 'self'\n    case 122479:                    // 'delete' 'sliding'\n    case 122991:                    // 'delete' 'some'\n    case 123503:                    // 'delete' 'stable'\n    case 124015:                    // 'delete' 'start'\n    case 125551:                    // 'delete' 'strict'\n    case 126575:                    // 'delete' 'structured-item'\n    case 127087:                    // 'delete' 'switch'\n    case 127599:                    // 'delete' 'text'\n    case 129647:                    // 'delete' 'to'\n    case 130159:                    // 'delete' 'treat'\n    case 130671:                    // 'delete' 'true'\n    case 131183:                    // 'delete' 'try'\n    case 131695:                    // 'delete' 'tumbling'\n    case 132207:                    // 'delete' 'type'\n    case 132719:                    // 'delete' 'typeswitch'\n    case 133231:                    // 'delete' 'union'\n    case 134255:                    // 'delete' 'unordered'\n    case 134767:                    // 'delete' 'updating'\n    case 136303:                    // 'delete' 'validate'\n    case 136815:                    // 'delete' 'value'\n    case 137327:                    // 'delete' 'variable'\n    case 137839:                    // 'delete' 'version'\n    case 139375:                    // 'delete' 'where'\n    case 139887:                    // 'delete' 'while'\n    case 141423:                    // 'delete' 'with'\n    case 143983:                    // 'delete' '{'\n    case 145007:                    // 'delete' '{|'\n      try_JSONDeleteExpr();\n      break;\n    case -9:\n    case 3233:                      // 'insert' EQName^Token\n    case 4257:                      // 'insert' IntegerLiteral\n    case 4769:                      // 'insert' DecimalLiteral\n    case 5281:                      // 'insert' DoubleLiteral\n    case 5793:                      // 'insert' StringLiteral\n    case 9889:                      // 'insert' NCName^Token\n    case 16033:                     // 'insert' '$'\n    case 16545:                     // 'insert' '$$'\n    case 17057:                     // 'insert' '%'\n    case 18593:                     // 'insert' '(#'\n    case 21153:                     // 'insert' '+'\n    case 22177:                     // 'insert' '-'\n    case 24225:                     // 'insert' '/'\n    case 24737:                     // 'insert' '//'\n    case 28321:                     // 'insert' '<'\n    case 28833:                     // 'insert' '<!--'\n    case 30881:                     // 'insert' '<?'\n    case 35489:                     // 'insert' '['\n    case 36513:                     // 'insert' 'after'\n    case 37537:                     // 'insert' 'allowing'\n    case 38049:                     // 'insert' 'ancestor'\n    case 38561:                     // 'insert' 'ancestor-or-self'\n    case 39073:                     // 'insert' 'and'\n    case 40097:                     // 'insert' 'append'\n    case 40609:                     // 'insert' 'array'\n    case 41121:                     // 'insert' 'as'\n    case 41633:                     // 'insert' 'ascending'\n    case 42145:                     // 'insert' 'at'\n    case 42657:                     // 'insert' 'attribute'\n    case 43169:                     // 'insert' 'base-uri'\n    case 43681:                     // 'insert' 'before'\n    case 44193:                     // 'insert' 'boundary-space'\n    case 44705:                     // 'insert' 'break'\n    case 45729:                     // 'insert' 'case'\n    case 46241:                     // 'insert' 'cast'\n    case 46753:                     // 'insert' 'castable'\n    case 47265:                     // 'insert' 'catch'\n    case 48289:                     // 'insert' 'child'\n    case 48801:                     // 'insert' 'collation'\n    case 49825:                     // 'insert' 'comment'\n    case 50337:                     // 'insert' 'constraint'\n    case 50849:                     // 'insert' 'construction'\n    case 52385:                     // 'insert' 'context'\n    case 52897:                     // 'insert' 'continue'\n    case 53409:                     // 'insert' 'copy'\n    case 53921:                     // 'insert' 'copy-namespaces'\n    case 54433:                     // 'insert' 'count'\n    case 54945:                     // 'insert' 'decimal-format'\n    case 55969:                     // 'insert' 'declare'\n    case 56481:                     // 'insert' 'default'\n    case 56993:                     // 'insert' 'delete'\n    case 57505:                     // 'insert' 'descendant'\n    case 58017:                     // 'insert' 'descendant-or-self'\n    case 58529:                     // 'insert' 'descending'\n    case 61089:                     // 'insert' 'div'\n    case 61601:                     // 'insert' 'document'\n    case 62113:                     // 'insert' 'document-node'\n    case 62625:                     // 'insert' 'element'\n    case 63137:                     // 'insert' 'else'\n    case 63649:                     // 'insert' 'empty'\n    case 64161:                     // 'insert' 'empty-sequence'\n    case 64673:                     // 'insert' 'encoding'\n    case 65185:                     // 'insert' 'end'\n    case 66209:                     // 'insert' 'eq'\n    case 66721:                     // 'insert' 'every'\n    case 67745:                     // 'insert' 'except'\n    case 68257:                     // 'insert' 'exit'\n    case 68769:                     // 'insert' 'external'\n    case 69281:                     // 'insert' 'false'\n    case 69793:                     // 'insert' 'first'\n    case 70305:                     // 'insert' 'following'\n    case 70817:                     // 'insert' 'following-sibling'\n    case 71329:                     // 'insert' 'for'\n    case 72865:                     // 'insert' 'from'\n    case 73377:                     // 'insert' 'ft-option'\n    case 75425:                     // 'insert' 'function'\n    case 75937:                     // 'insert' 'ge'\n    case 76961:                     // 'insert' 'group'\n    case 77985:                     // 'insert' 'gt'\n    case 78497:                     // 'insert' 'idiv'\n    case 79009:                     // 'insert' 'if'\n    case 79521:                     // 'insert' 'import'\n    case 80033:                     // 'insert' 'in'\n    case 80545:                     // 'insert' 'index'\n    case 82593:                     // 'insert' 'insert'\n    case 83105:                     // 'insert' 'instance'\n    case 83617:                     // 'insert' 'integrity'\n    case 84129:                     // 'insert' 'intersect'\n    case 84641:                     // 'insert' 'into'\n    case 85153:                     // 'insert' 'is'\n    case 85665:                     // 'insert' 'item'\n    case 86177:                     // 'insert' 'json'\n    case 86689:                     // 'insert' 'json-item'\n    case 87201:                     // 'insert' 'jsoniq'\n    case 88737:                     // 'insert' 'last'\n    case 89249:                     // 'insert' 'lax'\n    case 89761:                     // 'insert' 'le'\n    case 90785:                     // 'insert' 'let'\n    case 91809:                     // 'insert' 'loop'\n    case 92833:                     // 'insert' 'lt'\n    case 93857:                     // 'insert' 'mod'\n    case 94369:                     // 'insert' 'modify'\n    case 94881:                     // 'insert' 'module'\n    case 95905:                     // 'insert' 'namespace'\n    case 96417:                     // 'insert' 'namespace-node'\n    case 96929:                     // 'insert' 'ne'\n    case 100513:                    // 'insert' 'not'\n    case 101025:                    // 'insert' 'null'\n    case 101537:                    // 'insert' 'object'\n    case 103585:                    // 'insert' 'only'\n    case 104097:                    // 'insert' 'option'\n    case 104609:                    // 'insert' 'or'\n    case 105121:                    // 'insert' 'order'\n    case 105633:                    // 'insert' 'ordered'\n    case 106145:                    // 'insert' 'ordering'\n    case 107681:                    // 'insert' 'parent'\n    case 110753:                    // 'insert' 'preceding'\n    case 111265:                    // 'insert' 'preceding-sibling'\n    case 112801:                    // 'insert' 'processing-instruction'\n    case 113825:                    // 'insert' 'rename'\n    case 114337:                    // 'insert' 'replace'\n    case 114849:                    // 'insert' 'return'\n    case 115361:                    // 'insert' 'returning'\n    case 115873:                    // 'insert' 'revalidation'\n    case 116897:                    // 'insert' 'satisfies'\n    case 117409:                    // 'insert' 'schema'\n    case 117921:                    // 'insert' 'schema-attribute'\n    case 118433:                    // 'insert' 'schema-element'\n    case 118945:                    // 'insert' 'score'\n    case 119457:                    // 'insert' 'select'\n    case 119969:                    // 'insert' 'self'\n    case 122529:                    // 'insert' 'sliding'\n    case 123041:                    // 'insert' 'some'\n    case 123553:                    // 'insert' 'stable'\n    case 124065:                    // 'insert' 'start'\n    case 125601:                    // 'insert' 'strict'\n    case 126625:                    // 'insert' 'structured-item'\n    case 127137:                    // 'insert' 'switch'\n    case 127649:                    // 'insert' 'text'\n    case 129697:                    // 'insert' 'to'\n    case 130209:                    // 'insert' 'treat'\n    case 130721:                    // 'insert' 'true'\n    case 131233:                    // 'insert' 'try'\n    case 131745:                    // 'insert' 'tumbling'\n    case 132257:                    // 'insert' 'type'\n    case 132769:                    // 'insert' 'typeswitch'\n    case 133281:                    // 'insert' 'union'\n    case 134305:                    // 'insert' 'unordered'\n    case 134817:                    // 'insert' 'updating'\n    case 136353:                    // 'insert' 'validate'\n    case 136865:                    // 'insert' 'value'\n    case 137377:                    // 'insert' 'variable'\n    case 137889:                    // 'insert' 'version'\n    case 139425:                    // 'insert' 'where'\n    case 139937:                    // 'insert' 'while'\n    case 141473:                    // 'insert' 'with'\n    case 144033:                    // 'insert' '{'\n    case 145057:                    // 'insert' '{|'\n      try_JSONInsertExpr();\n      break;\n    case -10:\n    case 3294:                      // 'rename' EQName^Token\n    case 4318:                      // 'rename' IntegerLiteral\n    case 4830:                      // 'rename' DecimalLiteral\n    case 5342:                      // 'rename' DoubleLiteral\n    case 5854:                      // 'rename' StringLiteral\n    case 16094:                     // 'rename' '$'\n    case 16606:                     // 'rename' '$$'\n    case 17118:                     // 'rename' '%'\n    case 28382:                     // 'rename' '<'\n    case 28894:                     // 'rename' '<!--'\n    case 30942:                     // 'rename' '<?'\n    case 35550:                     // 'rename' '['\n    case 36574:                     // 'rename' 'after'\n    case 37598:                     // 'rename' 'allowing'\n    case 38110:                     // 'rename' 'ancestor'\n    case 38622:                     // 'rename' 'ancestor-or-self'\n    case 39134:                     // 'rename' 'and'\n    case 40158:                     // 'rename' 'append'\n    case 40670:                     // 'rename' 'array'\n    case 41182:                     // 'rename' 'as'\n    case 41694:                     // 'rename' 'ascending'\n    case 42206:                     // 'rename' 'at'\n    case 42718:                     // 'rename' 'attribute'\n    case 43230:                     // 'rename' 'base-uri'\n    case 43742:                     // 'rename' 'before'\n    case 44254:                     // 'rename' 'boundary-space'\n    case 44766:                     // 'rename' 'break'\n    case 45790:                     // 'rename' 'case'\n    case 46302:                     // 'rename' 'cast'\n    case 46814:                     // 'rename' 'castable'\n    case 47326:                     // 'rename' 'catch'\n    case 48350:                     // 'rename' 'child'\n    case 48862:                     // 'rename' 'collation'\n    case 49886:                     // 'rename' 'comment'\n    case 50398:                     // 'rename' 'constraint'\n    case 50910:                     // 'rename' 'construction'\n    case 52446:                     // 'rename' 'context'\n    case 52958:                     // 'rename' 'continue'\n    case 53470:                     // 'rename' 'copy'\n    case 53982:                     // 'rename' 'copy-namespaces'\n    case 54494:                     // 'rename' 'count'\n    case 55006:                     // 'rename' 'decimal-format'\n    case 56030:                     // 'rename' 'declare'\n    case 56542:                     // 'rename' 'default'\n    case 57054:                     // 'rename' 'delete'\n    case 57566:                     // 'rename' 'descendant'\n    case 58078:                     // 'rename' 'descendant-or-self'\n    case 58590:                     // 'rename' 'descending'\n    case 61150:                     // 'rename' 'div'\n    case 61662:                     // 'rename' 'document'\n    case 62174:                     // 'rename' 'document-node'\n    case 62686:                     // 'rename' 'element'\n    case 63198:                     // 'rename' 'else'\n    case 63710:                     // 'rename' 'empty'\n    case 64222:                     // 'rename' 'empty-sequence'\n    case 64734:                     // 'rename' 'encoding'\n    case 65246:                     // 'rename' 'end'\n    case 66270:                     // 'rename' 'eq'\n    case 66782:                     // 'rename' 'every'\n    case 67806:                     // 'rename' 'except'\n    case 68318:                     // 'rename' 'exit'\n    case 68830:                     // 'rename' 'external'\n    case 69342:                     // 'rename' 'false'\n    case 69854:                     // 'rename' 'first'\n    case 70366:                     // 'rename' 'following'\n    case 70878:                     // 'rename' 'following-sibling'\n    case 71390:                     // 'rename' 'for'\n    case 72926:                     // 'rename' 'from'\n    case 73438:                     // 'rename' 'ft-option'\n    case 75486:                     // 'rename' 'function'\n    case 75998:                     // 'rename' 'ge'\n    case 77022:                     // 'rename' 'group'\n    case 78046:                     // 'rename' 'gt'\n    case 78558:                     // 'rename' 'idiv'\n    case 79070:                     // 'rename' 'if'\n    case 79582:                     // 'rename' 'import'\n    case 80094:                     // 'rename' 'in'\n    case 80606:                     // 'rename' 'index'\n    case 82654:                     // 'rename' 'insert'\n    case 83166:                     // 'rename' 'instance'\n    case 83678:                     // 'rename' 'integrity'\n    case 84190:                     // 'rename' 'intersect'\n    case 84702:                     // 'rename' 'into'\n    case 85214:                     // 'rename' 'is'\n    case 85726:                     // 'rename' 'item'\n    case 86238:                     // 'rename' 'json'\n    case 86750:                     // 'rename' 'json-item'\n    case 87262:                     // 'rename' 'jsoniq'\n    case 88798:                     // 'rename' 'last'\n    case 89310:                     // 'rename' 'lax'\n    case 89822:                     // 'rename' 'le'\n    case 90846:                     // 'rename' 'let'\n    case 91870:                     // 'rename' 'loop'\n    case 92894:                     // 'rename' 'lt'\n    case 93918:                     // 'rename' 'mod'\n    case 94430:                     // 'rename' 'modify'\n    case 94942:                     // 'rename' 'module'\n    case 95966:                     // 'rename' 'namespace'\n    case 96478:                     // 'rename' 'namespace-node'\n    case 96990:                     // 'rename' 'ne'\n    case 100062:                    // 'rename' 'nodes'\n    case 101086:                    // 'rename' 'null'\n    case 101598:                    // 'rename' 'object'\n    case 103646:                    // 'rename' 'only'\n    case 104158:                    // 'rename' 'option'\n    case 104670:                    // 'rename' 'or'\n    case 105182:                    // 'rename' 'order'\n    case 105694:                    // 'rename' 'ordered'\n    case 106206:                    // 'rename' 'ordering'\n    case 107742:                    // 'rename' 'parent'\n    case 110814:                    // 'rename' 'preceding'\n    case 111326:                    // 'rename' 'preceding-sibling'\n    case 112862:                    // 'rename' 'processing-instruction'\n    case 113886:                    // 'rename' 'rename'\n    case 114398:                    // 'rename' 'replace'\n    case 114910:                    // 'rename' 'return'\n    case 115422:                    // 'rename' 'returning'\n    case 115934:                    // 'rename' 'revalidation'\n    case 116958:                    // 'rename' 'satisfies'\n    case 117470:                    // 'rename' 'schema'\n    case 117982:                    // 'rename' 'schema-attribute'\n    case 118494:                    // 'rename' 'schema-element'\n    case 119006:                    // 'rename' 'score'\n    case 119518:                    // 'rename' 'select'\n    case 120030:                    // 'rename' 'self'\n    case 122590:                    // 'rename' 'sliding'\n    case 123102:                    // 'rename' 'some'\n    case 123614:                    // 'rename' 'stable'\n    case 124126:                    // 'rename' 'start'\n    case 125662:                    // 'rename' 'strict'\n    case 126686:                    // 'rename' 'structured-item'\n    case 127198:                    // 'rename' 'switch'\n    case 127710:                    // 'rename' 'text'\n    case 129758:                    // 'rename' 'to'\n    case 130270:                    // 'rename' 'treat'\n    case 130782:                    // 'rename' 'true'\n    case 131294:                    // 'rename' 'try'\n    case 131806:                    // 'rename' 'tumbling'\n    case 132318:                    // 'rename' 'type'\n    case 132830:                    // 'rename' 'typeswitch'\n    case 133342:                    // 'rename' 'union'\n    case 134366:                    // 'rename' 'unordered'\n    case 134878:                    // 'rename' 'updating'\n    case 136414:                    // 'rename' 'validate'\n    case 136926:                    // 'rename' 'value'\n    case 137438:                    // 'rename' 'variable'\n    case 137950:                    // 'rename' 'version'\n    case 139486:                    // 'rename' 'where'\n    case 139998:                    // 'rename' 'while'\n    case 141534:                    // 'rename' 'with'\n    case 144094:                    // 'rename' '{'\n    case 145118:                    // 'rename' '{|'\n      try_JSONRenameExpr();\n      break;\n    case -11:\n      try_JSONReplaceExpr();\n      break;\n    case -12:\n    case 3150:                      // 'append' EQName^Token\n    case 4174:                      // 'append' IntegerLiteral\n    case 4686:                      // 'append' DecimalLiteral\n    case 5198:                      // 'append' DoubleLiteral\n    case 5710:                      // 'append' StringLiteral\n    case 15950:                     // 'append' '$'\n    case 16462:                     // 'append' '$$'\n    case 16974:                     // 'append' '%'\n    case 18510:                     // 'append' '(#'\n    case 21070:                     // 'append' '+'\n    case 22094:                     // 'append' '-'\n    case 24142:                     // 'append' '/'\n    case 24654:                     // 'append' '//'\n    case 28238:                     // 'append' '<'\n    case 28750:                     // 'append' '<!--'\n    case 30798:                     // 'append' '<?'\n    case 35406:                     // 'append' '['\n    case 36430:                     // 'append' 'after'\n    case 37454:                     // 'append' 'allowing'\n    case 37966:                     // 'append' 'ancestor'\n    case 38478:                     // 'append' 'ancestor-or-self'\n    case 38990:                     // 'append' 'and'\n    case 40014:                     // 'append' 'append'\n    case 40526:                     // 'append' 'array'\n    case 41038:                     // 'append' 'as'\n    case 41550:                     // 'append' 'ascending'\n    case 42062:                     // 'append' 'at'\n    case 42574:                     // 'append' 'attribute'\n    case 43086:                     // 'append' 'base-uri'\n    case 43598:                     // 'append' 'before'\n    case 44110:                     // 'append' 'boundary-space'\n    case 44622:                     // 'append' 'break'\n    case 45646:                     // 'append' 'case'\n    case 46158:                     // 'append' 'cast'\n    case 46670:                     // 'append' 'castable'\n    case 47182:                     // 'append' 'catch'\n    case 48206:                     // 'append' 'child'\n    case 48718:                     // 'append' 'collation'\n    case 49742:                     // 'append' 'comment'\n    case 50254:                     // 'append' 'constraint'\n    case 50766:                     // 'append' 'construction'\n    case 52302:                     // 'append' 'context'\n    case 52814:                     // 'append' 'continue'\n    case 53326:                     // 'append' 'copy'\n    case 53838:                     // 'append' 'copy-namespaces'\n    case 54350:                     // 'append' 'count'\n    case 54862:                     // 'append' 'decimal-format'\n    case 55886:                     // 'append' 'declare'\n    case 56398:                     // 'append' 'default'\n    case 56910:                     // 'append' 'delete'\n    case 57422:                     // 'append' 'descendant'\n    case 57934:                     // 'append' 'descendant-or-self'\n    case 58446:                     // 'append' 'descending'\n    case 61006:                     // 'append' 'div'\n    case 61518:                     // 'append' 'document'\n    case 62030:                     // 'append' 'document-node'\n    case 62542:                     // 'append' 'element'\n    case 63054:                     // 'append' 'else'\n    case 63566:                     // 'append' 'empty'\n    case 64078:                     // 'append' 'empty-sequence'\n    case 64590:                     // 'append' 'encoding'\n    case 65102:                     // 'append' 'end'\n    case 66126:                     // 'append' 'eq'\n    case 66638:                     // 'append' 'every'\n    case 67662:                     // 'append' 'except'\n    case 68174:                     // 'append' 'exit'\n    case 68686:                     // 'append' 'external'\n    case 69198:                     // 'append' 'false'\n    case 69710:                     // 'append' 'first'\n    case 70222:                     // 'append' 'following'\n    case 70734:                     // 'append' 'following-sibling'\n    case 71246:                     // 'append' 'for'\n    case 72782:                     // 'append' 'from'\n    case 73294:                     // 'append' 'ft-option'\n    case 75342:                     // 'append' 'function'\n    case 75854:                     // 'append' 'ge'\n    case 76878:                     // 'append' 'group'\n    case 77902:                     // 'append' 'gt'\n    case 78414:                     // 'append' 'idiv'\n    case 78926:                     // 'append' 'if'\n    case 79438:                     // 'append' 'import'\n    case 79950:                     // 'append' 'in'\n    case 80462:                     // 'append' 'index'\n    case 82510:                     // 'append' 'insert'\n    case 83022:                     // 'append' 'instance'\n    case 83534:                     // 'append' 'integrity'\n    case 84046:                     // 'append' 'intersect'\n    case 84558:                     // 'append' 'into'\n    case 85070:                     // 'append' 'is'\n    case 85582:                     // 'append' 'item'\n    case 86094:                     // 'append' 'json'\n    case 86606:                     // 'append' 'json-item'\n    case 87118:                     // 'append' 'jsoniq'\n    case 88654:                     // 'append' 'last'\n    case 89166:                     // 'append' 'lax'\n    case 89678:                     // 'append' 'le'\n    case 90702:                     // 'append' 'let'\n    case 91726:                     // 'append' 'loop'\n    case 92750:                     // 'append' 'lt'\n    case 93774:                     // 'append' 'mod'\n    case 94286:                     // 'append' 'modify'\n    case 94798:                     // 'append' 'module'\n    case 95822:                     // 'append' 'namespace'\n    case 96334:                     // 'append' 'namespace-node'\n    case 96846:                     // 'append' 'ne'\n    case 99406:                     // 'append' 'node'\n    case 99918:                     // 'append' 'nodes'\n    case 100430:                    // 'append' 'not'\n    case 100942:                    // 'append' 'null'\n    case 101454:                    // 'append' 'object'\n    case 103502:                    // 'append' 'only'\n    case 104014:                    // 'append' 'option'\n    case 104526:                    // 'append' 'or'\n    case 105038:                    // 'append' 'order'\n    case 105550:                    // 'append' 'ordered'\n    case 106062:                    // 'append' 'ordering'\n    case 107598:                    // 'append' 'parent'\n    case 110670:                    // 'append' 'preceding'\n    case 111182:                    // 'append' 'preceding-sibling'\n    case 112718:                    // 'append' 'processing-instruction'\n    case 113742:                    // 'append' 'rename'\n    case 114254:                    // 'append' 'replace'\n    case 114766:                    // 'append' 'return'\n    case 115278:                    // 'append' 'returning'\n    case 115790:                    // 'append' 'revalidation'\n    case 116814:                    // 'append' 'satisfies'\n    case 117326:                    // 'append' 'schema'\n    case 117838:                    // 'append' 'schema-attribute'\n    case 118350:                    // 'append' 'schema-element'\n    case 118862:                    // 'append' 'score'\n    case 119374:                    // 'append' 'select'\n    case 119886:                    // 'append' 'self'\n    case 122446:                    // 'append' 'sliding'\n    case 122958:                    // 'append' 'some'\n    case 123470:                    // 'append' 'stable'\n    case 123982:                    // 'append' 'start'\n    case 125518:                    // 'append' 'strict'\n    case 126542:                    // 'append' 'structured-item'\n    case 127054:                    // 'append' 'switch'\n    case 127566:                    // 'append' 'text'\n    case 129614:                    // 'append' 'to'\n    case 130126:                    // 'append' 'treat'\n    case 130638:                    // 'append' 'true'\n    case 131150:                    // 'append' 'try'\n    case 131662:                    // 'append' 'tumbling'\n    case 132174:                    // 'append' 'type'\n    case 132686:                    // 'append' 'typeswitch'\n    case 133198:                    // 'append' 'union'\n    case 134222:                    // 'append' 'unordered'\n    case 134734:                    // 'append' 'updating'\n    case 136270:                    // 'append' 'validate'\n    case 136782:                    // 'append' 'value'\n    case 137294:                    // 'append' 'variable'\n    case 137806:                    // 'append' 'version'\n    case 139342:                    // 'append' 'where'\n    case 139854:                    // 'append' 'while'\n    case 141390:                    // 'append' 'with'\n    case 143950:                    // 'append' '{'\n    case 144974:                    // 'append' '{|'\n      try_JSONAppendExpr();\n      break;\n    case -13:\n      break;\n    default:\n      try_OrExpr();\n    }\n  }\n\n  function parse_JSONDeleteExpr()\n  {\n    eventHandler.startNonterminal(\"JSONDeleteExpr\", e0);\n    shift(111);                     // 'delete'\n    lookahead1W(259);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(:' | '<' | '<!--' | '<?' | '[' | 'after' |\n                                    // 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' |\n                                    // 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'false' | 'first' | 'following' | 'following-sibling' |\n                                    // 'for' | 'from' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' |\n                                    // 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'json-item' | 'jsoniq' | 'last' |\n                                    // 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' |\n                                    // 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' | 'sliding' |\n                                    // 'some' | 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' |\n                                    // 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | '{' | '{|'\n    switch (l1)\n    {\n    case 168:                       // 'json'\n      lookahead2W(260);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '#' | '$' | '$$' | '%' | '(' | '(:' | '<' | '<!--' | '<?' | '[' |\n                                    // 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' |\n                                    // 'array' | 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'false' | 'first' | 'following' | 'following-sibling' |\n                                    // 'for' | 'from' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' |\n                                    // 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'json-item' | 'jsoniq' | 'last' |\n                                    // 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' |\n                                    // 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' | 'sliding' |\n                                    // 'some' | 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' |\n                                    // 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | '{' | '{|'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 18088)                // 'json' '('\n    {\n      lk = memoized(11, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(168);              // 'json'\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(11, e0, lk);\n      }\n    }\n    if (lk == -1\n     || lk == 3240                  // 'json' EQName^Token\n     || lk == 4264                  // 'json' IntegerLiteral\n     || lk == 4776                  // 'json' DecimalLiteral\n     || lk == 5288                  // 'json' DoubleLiteral\n     || lk == 5800                  // 'json' StringLiteral\n     || lk == 16040                 // 'json' '$'\n     || lk == 16552                 // 'json' '$$'\n     || lk == 17064                 // 'json' '%'\n     || lk == 28328                 // 'json' '<'\n     || lk == 28840                 // 'json' '<!--'\n     || lk == 30888                 // 'json' '<?'\n     || lk == 35496                 // 'json' '['\n     || lk == 36520                 // 'json' 'after'\n     || lk == 37544                 // 'json' 'allowing'\n     || lk == 38056                 // 'json' 'ancestor'\n     || lk == 38568                 // 'json' 'ancestor-or-self'\n     || lk == 39080                 // 'json' 'and'\n     || lk == 40104                 // 'json' 'append'\n     || lk == 40616                 // 'json' 'array'\n     || lk == 41128                 // 'json' 'as'\n     || lk == 41640                 // 'json' 'ascending'\n     || lk == 42152                 // 'json' 'at'\n     || lk == 42664                 // 'json' 'attribute'\n     || lk == 43176                 // 'json' 'base-uri'\n     || lk == 43688                 // 'json' 'before'\n     || lk == 44200                 // 'json' 'boundary-space'\n     || lk == 44712                 // 'json' 'break'\n     || lk == 45736                 // 'json' 'case'\n     || lk == 46248                 // 'json' 'cast'\n     || lk == 46760                 // 'json' 'castable'\n     || lk == 47272                 // 'json' 'catch'\n     || lk == 48296                 // 'json' 'child'\n     || lk == 48808                 // 'json' 'collation'\n     || lk == 49832                 // 'json' 'comment'\n     || lk == 50344                 // 'json' 'constraint'\n     || lk == 50856                 // 'json' 'construction'\n     || lk == 52392                 // 'json' 'context'\n     || lk == 52904                 // 'json' 'continue'\n     || lk == 53416                 // 'json' 'copy'\n     || lk == 53928                 // 'json' 'copy-namespaces'\n     || lk == 54440                 // 'json' 'count'\n     || lk == 54952                 // 'json' 'decimal-format'\n     || lk == 55976                 // 'json' 'declare'\n     || lk == 56488                 // 'json' 'default'\n     || lk == 57000                 // 'json' 'delete'\n     || lk == 57512                 // 'json' 'descendant'\n     || lk == 58024                 // 'json' 'descendant-or-self'\n     || lk == 58536                 // 'json' 'descending'\n     || lk == 61096                 // 'json' 'div'\n     || lk == 61608                 // 'json' 'document'\n     || lk == 62120                 // 'json' 'document-node'\n     || lk == 62632                 // 'json' 'element'\n     || lk == 63144                 // 'json' 'else'\n     || lk == 63656                 // 'json' 'empty'\n     || lk == 64168                 // 'json' 'empty-sequence'\n     || lk == 64680                 // 'json' 'encoding'\n     || lk == 65192                 // 'json' 'end'\n     || lk == 66216                 // 'json' 'eq'\n     || lk == 66728                 // 'json' 'every'\n     || lk == 67752                 // 'json' 'except'\n     || lk == 68264                 // 'json' 'exit'\n     || lk == 68776                 // 'json' 'external'\n     || lk == 69288                 // 'json' 'false'\n     || lk == 69800                 // 'json' 'first'\n     || lk == 70312                 // 'json' 'following'\n     || lk == 70824                 // 'json' 'following-sibling'\n     || lk == 71336                 // 'json' 'for'\n     || lk == 72872                 // 'json' 'from'\n     || lk == 73384                 // 'json' 'ft-option'\n     || lk == 75432                 // 'json' 'function'\n     || lk == 75944                 // 'json' 'ge'\n     || lk == 76968                 // 'json' 'group'\n     || lk == 77992                 // 'json' 'gt'\n     || lk == 78504                 // 'json' 'idiv'\n     || lk == 79016                 // 'json' 'if'\n     || lk == 79528                 // 'json' 'import'\n     || lk == 80040                 // 'json' 'in'\n     || lk == 80552                 // 'json' 'index'\n     || lk == 82600                 // 'json' 'insert'\n     || lk == 83112                 // 'json' 'instance'\n     || lk == 83624                 // 'json' 'integrity'\n     || lk == 84136                 // 'json' 'intersect'\n     || lk == 84648                 // 'json' 'into'\n     || lk == 85160                 // 'json' 'is'\n     || lk == 85672                 // 'json' 'item'\n     || lk == 86184                 // 'json' 'json'\n     || lk == 86696                 // 'json' 'json-item'\n     || lk == 87208                 // 'json' 'jsoniq'\n     || lk == 88744                 // 'json' 'last'\n     || lk == 89256                 // 'json' 'lax'\n     || lk == 89768                 // 'json' 'le'\n     || lk == 90792                 // 'json' 'let'\n     || lk == 91816                 // 'json' 'loop'\n     || lk == 92840                 // 'json' 'lt'\n     || lk == 93864                 // 'json' 'mod'\n     || lk == 94376                 // 'json' 'modify'\n     || lk == 94888                 // 'json' 'module'\n     || lk == 95912                 // 'json' 'namespace'\n     || lk == 96424                 // 'json' 'namespace-node'\n     || lk == 96936                 // 'json' 'ne'\n     || lk == 99496                 // 'json' 'node'\n     || lk == 100008                // 'json' 'nodes'\n     || lk == 101032                // 'json' 'null'\n     || lk == 101544                // 'json' 'object'\n     || lk == 103592                // 'json' 'only'\n     || lk == 104104                // 'json' 'option'\n     || lk == 104616                // 'json' 'or'\n     || lk == 105128                // 'json' 'order'\n     || lk == 105640                // 'json' 'ordered'\n     || lk == 106152                // 'json' 'ordering'\n     || lk == 107688                // 'json' 'parent'\n     || lk == 110760                // 'json' 'preceding'\n     || lk == 111272                // 'json' 'preceding-sibling'\n     || lk == 112808                // 'json' 'processing-instruction'\n     || lk == 113832                // 'json' 'rename'\n     || lk == 114344                // 'json' 'replace'\n     || lk == 114856                // 'json' 'return'\n     || lk == 115368                // 'json' 'returning'\n     || lk == 115880                // 'json' 'revalidation'\n     || lk == 116904                // 'json' 'satisfies'\n     || lk == 117416                // 'json' 'schema'\n     || lk == 117928                // 'json' 'schema-attribute'\n     || lk == 118440                // 'json' 'schema-element'\n     || lk == 118952                // 'json' 'score'\n     || lk == 119464                // 'json' 'select'\n     || lk == 119976                // 'json' 'self'\n     || lk == 122536                // 'json' 'sliding'\n     || lk == 123048                // 'json' 'some'\n     || lk == 123560                // 'json' 'stable'\n     || lk == 124072                // 'json' 'start'\n     || lk == 125608                // 'json' 'strict'\n     || lk == 126632                // 'json' 'structured-item'\n     || lk == 127144                // 'json' 'switch'\n     || lk == 127656                // 'json' 'text'\n     || lk == 129704                // 'json' 'to'\n     || lk == 130216                // 'json' 'treat'\n     || lk == 130728                // 'json' 'true'\n     || lk == 131240                // 'json' 'try'\n     || lk == 131752                // 'json' 'tumbling'\n     || lk == 132264                // 'json' 'type'\n     || lk == 132776                // 'json' 'typeswitch'\n     || lk == 133288                // 'json' 'union'\n     || lk == 134312                // 'json' 'unordered'\n     || lk == 134824                // 'json' 'updating'\n     || lk == 136360                // 'json' 'validate'\n     || lk == 136872                // 'json' 'value'\n     || lk == 137384                // 'json' 'variable'\n     || lk == 137896                // 'json' 'version'\n     || lk == 139432                // 'json' 'where'\n     || lk == 139944                // 'json' 'while'\n     || lk == 141480                // 'json' 'with'\n     || lk == 144040                // 'json' '{'\n     || lk == 145064)               // 'json' '{|'\n    {\n      shift(168);                   // 'json'\n    }\n    lookahead1W(259);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(:' | '<' | '<!--' | '<?' | '[' | 'after' |\n                                    // 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' |\n                                    // 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'false' | 'first' | 'following' | 'following-sibling' |\n                                    // 'for' | 'from' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' |\n                                    // 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'json-item' | 'jsoniq' | 'last' |\n                                    // 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' |\n                                    // 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' | 'sliding' |\n                                    // 'some' | 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' |\n                                    // 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | '{' | '{|'\n    whitespace();\n    parse_PostfixExpr();\n    eventHandler.endNonterminal(\"JSONDeleteExpr\", e0);\n  }\n\n  function try_JSONDeleteExpr()\n  {\n    shiftT(111);                    // 'delete'\n    lookahead1W(259);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(:' | '<' | '<!--' | '<?' | '[' | 'after' |\n                                    // 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' |\n                                    // 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'false' | 'first' | 'following' | 'following-sibling' |\n                                    // 'for' | 'from' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' |\n                                    // 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'json-item' | 'jsoniq' | 'last' |\n                                    // 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' |\n                                    // 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' | 'sliding' |\n                                    // 'some' | 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' |\n                                    // 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | '{' | '{|'\n    switch (l1)\n    {\n    case 168:                       // 'json'\n      lookahead2W(260);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '#' | '$' | '$$' | '%' | '(' | '(:' | '<' | '<!--' | '<?' | '[' |\n                                    // 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' |\n                                    // 'array' | 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'false' | 'first' | 'following' | 'following-sibling' |\n                                    // 'for' | 'from' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' |\n                                    // 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'json-item' | 'jsoniq' | 'last' |\n                                    // 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' |\n                                    // 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' | 'sliding' |\n                                    // 'some' | 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' |\n                                    // 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | '{' | '{|'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 18088)                // 'json' '('\n    {\n      lk = memoized(11, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(168);              // 'json'\n          memoize(11, e0A, -1);\n        }\n        catch (p1A)\n        {\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(11, e0A, -2);\n        }\n        lk = -2;\n      }\n    }\n    if (lk == -1\n     || lk == 3240                  // 'json' EQName^Token\n     || lk == 4264                  // 'json' IntegerLiteral\n     || lk == 4776                  // 'json' DecimalLiteral\n     || lk == 5288                  // 'json' DoubleLiteral\n     || lk == 5800                  // 'json' StringLiteral\n     || lk == 16040                 // 'json' '$'\n     || lk == 16552                 // 'json' '$$'\n     || lk == 17064                 // 'json' '%'\n     || lk == 28328                 // 'json' '<'\n     || lk == 28840                 // 'json' '<!--'\n     || lk == 30888                 // 'json' '<?'\n     || lk == 35496                 // 'json' '['\n     || lk == 36520                 // 'json' 'after'\n     || lk == 37544                 // 'json' 'allowing'\n     || lk == 38056                 // 'json' 'ancestor'\n     || lk == 38568                 // 'json' 'ancestor-or-self'\n     || lk == 39080                 // 'json' 'and'\n     || lk == 40104                 // 'json' 'append'\n     || lk == 40616                 // 'json' 'array'\n     || lk == 41128                 // 'json' 'as'\n     || lk == 41640                 // 'json' 'ascending'\n     || lk == 42152                 // 'json' 'at'\n     || lk == 42664                 // 'json' 'attribute'\n     || lk == 43176                 // 'json' 'base-uri'\n     || lk == 43688                 // 'json' 'before'\n     || lk == 44200                 // 'json' 'boundary-space'\n     || lk == 44712                 // 'json' 'break'\n     || lk == 45736                 // 'json' 'case'\n     || lk == 46248                 // 'json' 'cast'\n     || lk == 46760                 // 'json' 'castable'\n     || lk == 47272                 // 'json' 'catch'\n     || lk == 48296                 // 'json' 'child'\n     || lk == 48808                 // 'json' 'collation'\n     || lk == 49832                 // 'json' 'comment'\n     || lk == 50344                 // 'json' 'constraint'\n     || lk == 50856                 // 'json' 'construction'\n     || lk == 52392                 // 'json' 'context'\n     || lk == 52904                 // 'json' 'continue'\n     || lk == 53416                 // 'json' 'copy'\n     || lk == 53928                 // 'json' 'copy-namespaces'\n     || lk == 54440                 // 'json' 'count'\n     || lk == 54952                 // 'json' 'decimal-format'\n     || lk == 55976                 // 'json' 'declare'\n     || lk == 56488                 // 'json' 'default'\n     || lk == 57000                 // 'json' 'delete'\n     || lk == 57512                 // 'json' 'descendant'\n     || lk == 58024                 // 'json' 'descendant-or-self'\n     || lk == 58536                 // 'json' 'descending'\n     || lk == 61096                 // 'json' 'div'\n     || lk == 61608                 // 'json' 'document'\n     || lk == 62120                 // 'json' 'document-node'\n     || lk == 62632                 // 'json' 'element'\n     || lk == 63144                 // 'json' 'else'\n     || lk == 63656                 // 'json' 'empty'\n     || lk == 64168                 // 'json' 'empty-sequence'\n     || lk == 64680                 // 'json' 'encoding'\n     || lk == 65192                 // 'json' 'end'\n     || lk == 66216                 // 'json' 'eq'\n     || lk == 66728                 // 'json' 'every'\n     || lk == 67752                 // 'json' 'except'\n     || lk == 68264                 // 'json' 'exit'\n     || lk == 68776                 // 'json' 'external'\n     || lk == 69288                 // 'json' 'false'\n     || lk == 69800                 // 'json' 'first'\n     || lk == 70312                 // 'json' 'following'\n     || lk == 70824                 // 'json' 'following-sibling'\n     || lk == 71336                 // 'json' 'for'\n     || lk == 72872                 // 'json' 'from'\n     || lk == 73384                 // 'json' 'ft-option'\n     || lk == 75432                 // 'json' 'function'\n     || lk == 75944                 // 'json' 'ge'\n     || lk == 76968                 // 'json' 'group'\n     || lk == 77992                 // 'json' 'gt'\n     || lk == 78504                 // 'json' 'idiv'\n     || lk == 79016                 // 'json' 'if'\n     || lk == 79528                 // 'json' 'import'\n     || lk == 80040                 // 'json' 'in'\n     || lk == 80552                 // 'json' 'index'\n     || lk == 82600                 // 'json' 'insert'\n     || lk == 83112                 // 'json' 'instance'\n     || lk == 83624                 // 'json' 'integrity'\n     || lk == 84136                 // 'json' 'intersect'\n     || lk == 84648                 // 'json' 'into'\n     || lk == 85160                 // 'json' 'is'\n     || lk == 85672                 // 'json' 'item'\n     || lk == 86184                 // 'json' 'json'\n     || lk == 86696                 // 'json' 'json-item'\n     || lk == 87208                 // 'json' 'jsoniq'\n     || lk == 88744                 // 'json' 'last'\n     || lk == 89256                 // 'json' 'lax'\n     || lk == 89768                 // 'json' 'le'\n     || lk == 90792                 // 'json' 'let'\n     || lk == 91816                 // 'json' 'loop'\n     || lk == 92840                 // 'json' 'lt'\n     || lk == 93864                 // 'json' 'mod'\n     || lk == 94376                 // 'json' 'modify'\n     || lk == 94888                 // 'json' 'module'\n     || lk == 95912                 // 'json' 'namespace'\n     || lk == 96424                 // 'json' 'namespace-node'\n     || lk == 96936                 // 'json' 'ne'\n     || lk == 99496                 // 'json' 'node'\n     || lk == 100008                // 'json' 'nodes'\n     || lk == 101032                // 'json' 'null'\n     || lk == 101544                // 'json' 'object'\n     || lk == 103592                // 'json' 'only'\n     || lk == 104104                // 'json' 'option'\n     || lk == 104616                // 'json' 'or'\n     || lk == 105128                // 'json' 'order'\n     || lk == 105640                // 'json' 'ordered'\n     || lk == 106152                // 'json' 'ordering'\n     || lk == 107688                // 'json' 'parent'\n     || lk == 110760                // 'json' 'preceding'\n     || lk == 111272                // 'json' 'preceding-sibling'\n     || lk == 112808                // 'json' 'processing-instruction'\n     || lk == 113832                // 'json' 'rename'\n     || lk == 114344                // 'json' 'replace'\n     || lk == 114856                // 'json' 'return'\n     || lk == 115368                // 'json' 'returning'\n     || lk == 115880                // 'json' 'revalidation'\n     || lk == 116904                // 'json' 'satisfies'\n     || lk == 117416                // 'json' 'schema'\n     || lk == 117928                // 'json' 'schema-attribute'\n     || lk == 118440                // 'json' 'schema-element'\n     || lk == 118952                // 'json' 'score'\n     || lk == 119464                // 'json' 'select'\n     || lk == 119976                // 'json' 'self'\n     || lk == 122536                // 'json' 'sliding'\n     || lk == 123048                // 'json' 'some'\n     || lk == 123560                // 'json' 'stable'\n     || lk == 124072                // 'json' 'start'\n     || lk == 125608                // 'json' 'strict'\n     || lk == 126632                // 'json' 'structured-item'\n     || lk == 127144                // 'json' 'switch'\n     || lk == 127656                // 'json' 'text'\n     || lk == 129704                // 'json' 'to'\n     || lk == 130216                // 'json' 'treat'\n     || lk == 130728                // 'json' 'true'\n     || lk == 131240                // 'json' 'try'\n     || lk == 131752                // 'json' 'tumbling'\n     || lk == 132264                // 'json' 'type'\n     || lk == 132776                // 'json' 'typeswitch'\n     || lk == 133288                // 'json' 'union'\n     || lk == 134312                // 'json' 'unordered'\n     || lk == 134824                // 'json' 'updating'\n     || lk == 136360                // 'json' 'validate'\n     || lk == 136872                // 'json' 'value'\n     || lk == 137384                // 'json' 'variable'\n     || lk == 137896                // 'json' 'version'\n     || lk == 139432                // 'json' 'where'\n     || lk == 139944                // 'json' 'while'\n     || lk == 141480                // 'json' 'with'\n     || lk == 144040                // 'json' '{'\n     || lk == 145064)               // 'json' '{|'\n    {\n      shiftT(168);                  // 'json'\n    }\n    lookahead1W(259);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(:' | '<' | '<!--' | '<?' | '[' | 'after' |\n                                    // 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' |\n                                    // 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'false' | 'first' | 'following' | 'following-sibling' |\n                                    // 'for' | 'from' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' |\n                                    // 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'json-item' | 'jsoniq' | 'last' |\n                                    // 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' |\n                                    // 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' | 'sliding' |\n                                    // 'some' | 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' |\n                                    // 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | '{' | '{|'\n    try_PostfixExpr();\n  }\n\n  function parse_JSONInsertExpr()\n  {\n    eventHandler.startNonterminal(\"JSONInsertExpr\", e0);\n    switch (l1)\n    {\n    case 161:                       // 'insert'\n      lookahead2W(267);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // NCName^Token | S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' |\n                                    // '//' | '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk != 9889)                 // 'insert' NCName^Token\n    {\n      lk = memoized(12, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(161);              // 'insert'\n          lookahead1W(266);         // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n          switch (l1)\n          {\n          case 168:                 // 'json'\n            lookahead2W(268);       // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '#' | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' |\n                                    // '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n            break;\n          default:\n            lk = l1;\n          }\n          if (lk == 18088)          // 'json' '('\n          {\n            lk = memoized(13, e0);\n            if (lk == 0)\n            {\n              var b0B = b0; var e0B = e0; var l1B = l1;\n              var b1B = b1; var e1B = e1; var l2B = l2;\n              var b2B = b2; var e2B = e2;\n              try\n              {\n                shiftT(168);        // 'json'\n                memoize(13, e0B, -1);\n              }\n              catch (p1B)\n              {\n                b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n                b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n                b2 = b2B; e2 = e2B; end = e2B; }}\n                memoize(13, e0B, -2);\n              }\n              lk = -2;\n            }\n          }\n          if (lk == -1\n           || lk == 3240            // 'json' EQName^Token\n           || lk == 4264            // 'json' IntegerLiteral\n           || lk == 4776            // 'json' DecimalLiteral\n           || lk == 5288            // 'json' DoubleLiteral\n           || lk == 5800            // 'json' StringLiteral\n           || lk == 16040           // 'json' '$'\n           || lk == 16552           // 'json' '$$'\n           || lk == 17064           // 'json' '%'\n           || lk == 18600           // 'json' '(#'\n           || lk == 21160           // 'json' '+'\n           || lk == 22184           // 'json' '-'\n           || lk == 24232           // 'json' '/'\n           || lk == 24744           // 'json' '//'\n           || lk == 28328           // 'json' '<'\n           || lk == 28840           // 'json' '<!--'\n           || lk == 30888           // 'json' '<?'\n           || lk == 35496           // 'json' '['\n           || lk == 36520           // 'json' 'after'\n           || lk == 37544           // 'json' 'allowing'\n           || lk == 38056           // 'json' 'ancestor'\n           || lk == 38568           // 'json' 'ancestor-or-self'\n           || lk == 39080           // 'json' 'and'\n           || lk == 40104           // 'json' 'append'\n           || lk == 40616           // 'json' 'array'\n           || lk == 41128           // 'json' 'as'\n           || lk == 41640           // 'json' 'ascending'\n           || lk == 42152           // 'json' 'at'\n           || lk == 42664           // 'json' 'attribute'\n           || lk == 43176           // 'json' 'base-uri'\n           || lk == 43688           // 'json' 'before'\n           || lk == 44200           // 'json' 'boundary-space'\n           || lk == 44712           // 'json' 'break'\n           || lk == 45736           // 'json' 'case'\n           || lk == 46248           // 'json' 'cast'\n           || lk == 46760           // 'json' 'castable'\n           || lk == 47272           // 'json' 'catch'\n           || lk == 48296           // 'json' 'child'\n           || lk == 48808           // 'json' 'collation'\n           || lk == 49832           // 'json' 'comment'\n           || lk == 50344           // 'json' 'constraint'\n           || lk == 50856           // 'json' 'construction'\n           || lk == 52392           // 'json' 'context'\n           || lk == 52904           // 'json' 'continue'\n           || lk == 53416           // 'json' 'copy'\n           || lk == 53928           // 'json' 'copy-namespaces'\n           || lk == 54440           // 'json' 'count'\n           || lk == 54952           // 'json' 'decimal-format'\n           || lk == 55976           // 'json' 'declare'\n           || lk == 56488           // 'json' 'default'\n           || lk == 57000           // 'json' 'delete'\n           || lk == 57512           // 'json' 'descendant'\n           || lk == 58024           // 'json' 'descendant-or-self'\n           || lk == 58536           // 'json' 'descending'\n           || lk == 61096           // 'json' 'div'\n           || lk == 61608           // 'json' 'document'\n           || lk == 62120           // 'json' 'document-node'\n           || lk == 62632           // 'json' 'element'\n           || lk == 63144           // 'json' 'else'\n           || lk == 63656           // 'json' 'empty'\n           || lk == 64168           // 'json' 'empty-sequence'\n           || lk == 64680           // 'json' 'encoding'\n           || lk == 65192           // 'json' 'end'\n           || lk == 66216           // 'json' 'eq'\n           || lk == 66728           // 'json' 'every'\n           || lk == 67752           // 'json' 'except'\n           || lk == 68264           // 'json' 'exit'\n           || lk == 68776           // 'json' 'external'\n           || lk == 69288           // 'json' 'false'\n           || lk == 69800           // 'json' 'first'\n           || lk == 70312           // 'json' 'following'\n           || lk == 70824           // 'json' 'following-sibling'\n           || lk == 71336           // 'json' 'for'\n           || lk == 72872           // 'json' 'from'\n           || lk == 73384           // 'json' 'ft-option'\n           || lk == 75432           // 'json' 'function'\n           || lk == 75944           // 'json' 'ge'\n           || lk == 76968           // 'json' 'group'\n           || lk == 77992           // 'json' 'gt'\n           || lk == 78504           // 'json' 'idiv'\n           || lk == 79016           // 'json' 'if'\n           || lk == 79528           // 'json' 'import'\n           || lk == 80040           // 'json' 'in'\n           || lk == 80552           // 'json' 'index'\n           || lk == 82600           // 'json' 'insert'\n           || lk == 83112           // 'json' 'instance'\n           || lk == 83624           // 'json' 'integrity'\n           || lk == 84136           // 'json' 'intersect'\n           || lk == 84648           // 'json' 'into'\n           || lk == 85160           // 'json' 'is'\n           || lk == 85672           // 'json' 'item'\n           || lk == 86184           // 'json' 'json'\n           || lk == 86696           // 'json' 'json-item'\n           || lk == 87208           // 'json' 'jsoniq'\n           || lk == 88744           // 'json' 'last'\n           || lk == 89256           // 'json' 'lax'\n           || lk == 89768           // 'json' 'le'\n           || lk == 90792           // 'json' 'let'\n           || lk == 91816           // 'json' 'loop'\n           || lk == 92840           // 'json' 'lt'\n           || lk == 93864           // 'json' 'mod'\n           || lk == 94376           // 'json' 'modify'\n           || lk == 94888           // 'json' 'module'\n           || lk == 95912           // 'json' 'namespace'\n           || lk == 96424           // 'json' 'namespace-node'\n           || lk == 96936           // 'json' 'ne'\n           || lk == 99496           // 'json' 'node'\n           || lk == 100008          // 'json' 'nodes'\n           || lk == 100520          // 'json' 'not'\n           || lk == 101032          // 'json' 'null'\n           || lk == 101544          // 'json' 'object'\n           || lk == 103592          // 'json' 'only'\n           || lk == 104104          // 'json' 'option'\n           || lk == 104616          // 'json' 'or'\n           || lk == 105128          // 'json' 'order'\n           || lk == 105640          // 'json' 'ordered'\n           || lk == 106152          // 'json' 'ordering'\n           || lk == 107688          // 'json' 'parent'\n           || lk == 110760          // 'json' 'preceding'\n           || lk == 111272          // 'json' 'preceding-sibling'\n           || lk == 112808          // 'json' 'processing-instruction'\n           || lk == 113832          // 'json' 'rename'\n           || lk == 114344          // 'json' 'replace'\n           || lk == 114856          // 'json' 'return'\n           || lk == 115368          // 'json' 'returning'\n           || lk == 115880          // 'json' 'revalidation'\n           || lk == 116904          // 'json' 'satisfies'\n           || lk == 117416          // 'json' 'schema'\n           || lk == 117928          // 'json' 'schema-attribute'\n           || lk == 118440          // 'json' 'schema-element'\n           || lk == 118952          // 'json' 'score'\n           || lk == 119464          // 'json' 'select'\n           || lk == 119976          // 'json' 'self'\n           || lk == 122536          // 'json' 'sliding'\n           || lk == 123048          // 'json' 'some'\n           || lk == 123560          // 'json' 'stable'\n           || lk == 124072          // 'json' 'start'\n           || lk == 125608          // 'json' 'strict'\n           || lk == 126632          // 'json' 'structured-item'\n           || lk == 127144          // 'json' 'switch'\n           || lk == 127656          // 'json' 'text'\n           || lk == 129704          // 'json' 'to'\n           || lk == 130216          // 'json' 'treat'\n           || lk == 130728          // 'json' 'true'\n           || lk == 131240          // 'json' 'try'\n           || lk == 131752          // 'json' 'tumbling'\n           || lk == 132264          // 'json' 'type'\n           || lk == 132776          // 'json' 'typeswitch'\n           || lk == 133288          // 'json' 'union'\n           || lk == 134312          // 'json' 'unordered'\n           || lk == 134824          // 'json' 'updating'\n           || lk == 136360          // 'json' 'validate'\n           || lk == 136872          // 'json' 'value'\n           || lk == 137384          // 'json' 'variable'\n           || lk == 137896          // 'json' 'version'\n           || lk == 139432          // 'json' 'where'\n           || lk == 139944          // 'json' 'while'\n           || lk == 141480          // 'json' 'with'\n           || lk == 144040          // 'json' '{'\n           || lk == 145064)         // 'json' '{|'\n          {\n            shiftT(168);            // 'json'\n          }\n          lookahead1W(266);         // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n          try_ExprSingle();\n          shiftT(165);              // 'into'\n          lookahead1W(266);         // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n          try_ExprSingle();\n          switch (l1)\n          {\n          case 82:                  // 'at'\n            lookahead2W(72);        // S^WS | '(:' | 'position'\n            break;\n          default:\n            lk = l1;\n          }\n          if (lk == 110162)         // 'at' 'position'\n          {\n            lk = memoized(14, e0);\n            if (lk == 0)\n            {\n              var b0B = b0; var e0B = e0; var l1B = l1;\n              var b1B = b1; var e1B = e1; var l2B = l2;\n              var b2B = b2; var e2B = e2;\n              try\n              {\n                shiftT(82);         // 'at'\n                lookahead1W(72);    // S^WS | '(:' | 'position'\n                shiftT(215);        // 'position'\n                lookahead1W(266);   // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n                try_ExprSingle();\n                memoize(14, e0B, -1);\n              }\n              catch (p1B)\n              {\n                b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n                b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n                b2 = b2B; e2 = e2B; end = e2B; }}\n                memoize(14, e0B, -2);\n              }\n              lk = -2;\n            }\n          }\n          if (lk == -1)\n          {\n            shiftT(82);             // 'at'\n            lookahead1W(72);        // S^WS | '(:' | 'position'\n            shiftT(215);            // 'position'\n            lookahead1W(266);       // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n            try_ExprSingle();\n          }\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(12, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      shift(161);                   // 'insert'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      switch (l1)\n      {\n      case 168:                     // 'json'\n        lookahead2W(268);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '#' | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' |\n                                    // '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 18088)              // 'json' '('\n      {\n        lk = memoized(13, e0);\n        if (lk == 0)\n        {\n          var b0B = b0; var e0B = e0; var l1B = l1;\n          var b1B = b1; var e1B = e1; var l2B = l2;\n          var b2B = b2; var e2B = e2;\n          try\n          {\n            shiftT(168);            // 'json'\n            lk = -1;\n          }\n          catch (p1B)\n          {\n            lk = -2;\n          }\n          b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n          b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n          b2 = b2B; e2 = e2B; end = e2B; }}\n          memoize(13, e0, lk);\n        }\n      }\n      if (lk == -1\n       || lk == 3240                // 'json' EQName^Token\n       || lk == 4264                // 'json' IntegerLiteral\n       || lk == 4776                // 'json' DecimalLiteral\n       || lk == 5288                // 'json' DoubleLiteral\n       || lk == 5800                // 'json' StringLiteral\n       || lk == 16040               // 'json' '$'\n       || lk == 16552               // 'json' '$$'\n       || lk == 17064               // 'json' '%'\n       || lk == 18600               // 'json' '(#'\n       || lk == 21160               // 'json' '+'\n       || lk == 22184               // 'json' '-'\n       || lk == 24232               // 'json' '/'\n       || lk == 24744               // 'json' '//'\n       || lk == 28328               // 'json' '<'\n       || lk == 28840               // 'json' '<!--'\n       || lk == 30888               // 'json' '<?'\n       || lk == 35496               // 'json' '['\n       || lk == 36520               // 'json' 'after'\n       || lk == 37544               // 'json' 'allowing'\n       || lk == 38056               // 'json' 'ancestor'\n       || lk == 38568               // 'json' 'ancestor-or-self'\n       || lk == 39080               // 'json' 'and'\n       || lk == 40104               // 'json' 'append'\n       || lk == 40616               // 'json' 'array'\n       || lk == 41128               // 'json' 'as'\n       || lk == 41640               // 'json' 'ascending'\n       || lk == 42152               // 'json' 'at'\n       || lk == 42664               // 'json' 'attribute'\n       || lk == 43176               // 'json' 'base-uri'\n       || lk == 43688               // 'json' 'before'\n       || lk == 44200               // 'json' 'boundary-space'\n       || lk == 44712               // 'json' 'break'\n       || lk == 45736               // 'json' 'case'\n       || lk == 46248               // 'json' 'cast'\n       || lk == 46760               // 'json' 'castable'\n       || lk == 47272               // 'json' 'catch'\n       || lk == 48296               // 'json' 'child'\n       || lk == 48808               // 'json' 'collation'\n       || lk == 49832               // 'json' 'comment'\n       || lk == 50344               // 'json' 'constraint'\n       || lk == 50856               // 'json' 'construction'\n       || lk == 52392               // 'json' 'context'\n       || lk == 52904               // 'json' 'continue'\n       || lk == 53416               // 'json' 'copy'\n       || lk == 53928               // 'json' 'copy-namespaces'\n       || lk == 54440               // 'json' 'count'\n       || lk == 54952               // 'json' 'decimal-format'\n       || lk == 55976               // 'json' 'declare'\n       || lk == 56488               // 'json' 'default'\n       || lk == 57000               // 'json' 'delete'\n       || lk == 57512               // 'json' 'descendant'\n       || lk == 58024               // 'json' 'descendant-or-self'\n       || lk == 58536               // 'json' 'descending'\n       || lk == 61096               // 'json' 'div'\n       || lk == 61608               // 'json' 'document'\n       || lk == 62120               // 'json' 'document-node'\n       || lk == 62632               // 'json' 'element'\n       || lk == 63144               // 'json' 'else'\n       || lk == 63656               // 'json' 'empty'\n       || lk == 64168               // 'json' 'empty-sequence'\n       || lk == 64680               // 'json' 'encoding'\n       || lk == 65192               // 'json' 'end'\n       || lk == 66216               // 'json' 'eq'\n       || lk == 66728               // 'json' 'every'\n       || lk == 67752               // 'json' 'except'\n       || lk == 68264               // 'json' 'exit'\n       || lk == 68776               // 'json' 'external'\n       || lk == 69288               // 'json' 'false'\n       || lk == 69800               // 'json' 'first'\n       || lk == 70312               // 'json' 'following'\n       || lk == 70824               // 'json' 'following-sibling'\n       || lk == 71336               // 'json' 'for'\n       || lk == 72872               // 'json' 'from'\n       || lk == 73384               // 'json' 'ft-option'\n       || lk == 75432               // 'json' 'function'\n       || lk == 75944               // 'json' 'ge'\n       || lk == 76968               // 'json' 'group'\n       || lk == 77992               // 'json' 'gt'\n       || lk == 78504               // 'json' 'idiv'\n       || lk == 79016               // 'json' 'if'\n       || lk == 79528               // 'json' 'import'\n       || lk == 80040               // 'json' 'in'\n       || lk == 80552               // 'json' 'index'\n       || lk == 82600               // 'json' 'insert'\n       || lk == 83112               // 'json' 'instance'\n       || lk == 83624               // 'json' 'integrity'\n       || lk == 84136               // 'json' 'intersect'\n       || lk == 84648               // 'json' 'into'\n       || lk == 85160               // 'json' 'is'\n       || lk == 85672               // 'json' 'item'\n       || lk == 86184               // 'json' 'json'\n       || lk == 86696               // 'json' 'json-item'\n       || lk == 87208               // 'json' 'jsoniq'\n       || lk == 88744               // 'json' 'last'\n       || lk == 89256               // 'json' 'lax'\n       || lk == 89768               // 'json' 'le'\n       || lk == 90792               // 'json' 'let'\n       || lk == 91816               // 'json' 'loop'\n       || lk == 92840               // 'json' 'lt'\n       || lk == 93864               // 'json' 'mod'\n       || lk == 94376               // 'json' 'modify'\n       || lk == 94888               // 'json' 'module'\n       || lk == 95912               // 'json' 'namespace'\n       || lk == 96424               // 'json' 'namespace-node'\n       || lk == 96936               // 'json' 'ne'\n       || lk == 99496               // 'json' 'node'\n       || lk == 100008              // 'json' 'nodes'\n       || lk == 100520              // 'json' 'not'\n       || lk == 101032              // 'json' 'null'\n       || lk == 101544              // 'json' 'object'\n       || lk == 103592              // 'json' 'only'\n       || lk == 104104              // 'json' 'option'\n       || lk == 104616              // 'json' 'or'\n       || lk == 105128              // 'json' 'order'\n       || lk == 105640              // 'json' 'ordered'\n       || lk == 106152              // 'json' 'ordering'\n       || lk == 107688              // 'json' 'parent'\n       || lk == 110760              // 'json' 'preceding'\n       || lk == 111272              // 'json' 'preceding-sibling'\n       || lk == 112808              // 'json' 'processing-instruction'\n       || lk == 113832              // 'json' 'rename'\n       || lk == 114344              // 'json' 'replace'\n       || lk == 114856              // 'json' 'return'\n       || lk == 115368              // 'json' 'returning'\n       || lk == 115880              // 'json' 'revalidation'\n       || lk == 116904              // 'json' 'satisfies'\n       || lk == 117416              // 'json' 'schema'\n       || lk == 117928              // 'json' 'schema-attribute'\n       || lk == 118440              // 'json' 'schema-element'\n       || lk == 118952              // 'json' 'score'\n       || lk == 119464              // 'json' 'select'\n       || lk == 119976              // 'json' 'self'\n       || lk == 122536              // 'json' 'sliding'\n       || lk == 123048              // 'json' 'some'\n       || lk == 123560              // 'json' 'stable'\n       || lk == 124072              // 'json' 'start'\n       || lk == 125608              // 'json' 'strict'\n       || lk == 126632              // 'json' 'structured-item'\n       || lk == 127144              // 'json' 'switch'\n       || lk == 127656              // 'json' 'text'\n       || lk == 129704              // 'json' 'to'\n       || lk == 130216              // 'json' 'treat'\n       || lk == 130728              // 'json' 'true'\n       || lk == 131240              // 'json' 'try'\n       || lk == 131752              // 'json' 'tumbling'\n       || lk == 132264              // 'json' 'type'\n       || lk == 132776              // 'json' 'typeswitch'\n       || lk == 133288              // 'json' 'union'\n       || lk == 134312              // 'json' 'unordered'\n       || lk == 134824              // 'json' 'updating'\n       || lk == 136360              // 'json' 'validate'\n       || lk == 136872              // 'json' 'value'\n       || lk == 137384              // 'json' 'variable'\n       || lk == 137896              // 'json' 'version'\n       || lk == 139432              // 'json' 'where'\n       || lk == 139944              // 'json' 'while'\n       || lk == 141480              // 'json' 'with'\n       || lk == 144040              // 'json' '{'\n       || lk == 145064)             // 'json' '{|'\n      {\n        shift(168);                 // 'json'\n      }\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      whitespace();\n      parse_ExprSingle();\n      shift(165);                   // 'into'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      whitespace();\n      parse_ExprSingle();\n      switch (l1)\n      {\n      case 82:                      // 'at'\n        lookahead2W(72);            // S^WS | '(:' | 'position'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 110162)             // 'at' 'position'\n      {\n        lk = memoized(14, e0);\n        if (lk == 0)\n        {\n          var b0B = b0; var e0B = e0; var l1B = l1;\n          var b1B = b1; var e1B = e1; var l2B = l2;\n          var b2B = b2; var e2B = e2;\n          try\n          {\n            shiftT(82);             // 'at'\n            lookahead1W(72);        // S^WS | '(:' | 'position'\n            shiftT(215);            // 'position'\n            lookahead1W(266);       // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n            try_ExprSingle();\n            lk = -1;\n          }\n          catch (p1B)\n          {\n            lk = -2;\n          }\n          b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n          b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n          b2 = b2B; e2 = e2B; end = e2B; }}\n          memoize(14, e0, lk);\n        }\n      }\n      if (lk == -1)\n      {\n        shift(82);                  // 'at'\n        lookahead1W(72);            // S^WS | '(:' | 'position'\n        shift(215);                 // 'position'\n        lookahead1W(266);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n        whitespace();\n        parse_ExprSingle();\n      }\n      break;\n    default:\n      shift(161);                   // 'insert'\n      lookahead1W(267);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // NCName^Token | S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' |\n                                    // '//' | '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      switch (l1)\n      {\n      case 168:                     // 'json'\n        lookahead2W(281);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // NCName^Token | S^WS | '#' | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' |\n                                    // '/' | '//' | ':' | '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 18088)              // 'json' '('\n      {\n        lk = memoized(15, e0);\n        if (lk == 0)\n        {\n          var b0B = b0; var e0B = e0; var l1B = l1;\n          var b1B = b1; var e1B = e1; var l2B = l2;\n          var b2B = b2; var e2B = e2;\n          try\n          {\n            shiftT(168);            // 'json'\n            lk = -1;\n          }\n          catch (p1B)\n          {\n            lk = -2;\n          }\n          b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n          b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n          b2 = b2B; e2 = e2B; end = e2B; }}\n          memoize(15, e0, lk);\n        }\n      }\n      if (lk == -1\n       || lk == 3240                // 'json' EQName^Token\n       || lk == 4264                // 'json' IntegerLiteral\n       || lk == 4776                // 'json' DecimalLiteral\n       || lk == 5288                // 'json' DoubleLiteral\n       || lk == 5800                // 'json' StringLiteral\n       || lk == 9896                // 'json' NCName^Token\n       || lk == 16040               // 'json' '$'\n       || lk == 16552               // 'json' '$$'\n       || lk == 17064               // 'json' '%'\n       || lk == 18600               // 'json' '(#'\n       || lk == 21160               // 'json' '+'\n       || lk == 22184               // 'json' '-'\n       || lk == 24232               // 'json' '/'\n       || lk == 24744               // 'json' '//'\n       || lk == 28328               // 'json' '<'\n       || lk == 28840               // 'json' '<!--'\n       || lk == 30888               // 'json' '<?'\n       || lk == 35496               // 'json' '['\n       || lk == 36520               // 'json' 'after'\n       || lk == 37544               // 'json' 'allowing'\n       || lk == 38056               // 'json' 'ancestor'\n       || lk == 38568               // 'json' 'ancestor-or-self'\n       || lk == 39080               // 'json' 'and'\n       || lk == 40104               // 'json' 'append'\n       || lk == 40616               // 'json' 'array'\n       || lk == 41128               // 'json' 'as'\n       || lk == 41640               // 'json' 'ascending'\n       || lk == 42152               // 'json' 'at'\n       || lk == 42664               // 'json' 'attribute'\n       || lk == 43176               // 'json' 'base-uri'\n       || lk == 43688               // 'json' 'before'\n       || lk == 44200               // 'json' 'boundary-space'\n       || lk == 44712               // 'json' 'break'\n       || lk == 45736               // 'json' 'case'\n       || lk == 46248               // 'json' 'cast'\n       || lk == 46760               // 'json' 'castable'\n       || lk == 47272               // 'json' 'catch'\n       || lk == 48296               // 'json' 'child'\n       || lk == 48808               // 'json' 'collation'\n       || lk == 49832               // 'json' 'comment'\n       || lk == 50344               // 'json' 'constraint'\n       || lk == 50856               // 'json' 'construction'\n       || lk == 52392               // 'json' 'context'\n       || lk == 52904               // 'json' 'continue'\n       || lk == 53416               // 'json' 'copy'\n       || lk == 53928               // 'json' 'copy-namespaces'\n       || lk == 54440               // 'json' 'count'\n       || lk == 54952               // 'json' 'decimal-format'\n       || lk == 55976               // 'json' 'declare'\n       || lk == 56488               // 'json' 'default'\n       || lk == 57000               // 'json' 'delete'\n       || lk == 57512               // 'json' 'descendant'\n       || lk == 58024               // 'json' 'descendant-or-self'\n       || lk == 58536               // 'json' 'descending'\n       || lk == 61096               // 'json' 'div'\n       || lk == 61608               // 'json' 'document'\n       || lk == 62120               // 'json' 'document-node'\n       || lk == 62632               // 'json' 'element'\n       || lk == 63144               // 'json' 'else'\n       || lk == 63656               // 'json' 'empty'\n       || lk == 64168               // 'json' 'empty-sequence'\n       || lk == 64680               // 'json' 'encoding'\n       || lk == 65192               // 'json' 'end'\n       || lk == 66216               // 'json' 'eq'\n       || lk == 66728               // 'json' 'every'\n       || lk == 67752               // 'json' 'except'\n       || lk == 68264               // 'json' 'exit'\n       || lk == 68776               // 'json' 'external'\n       || lk == 69288               // 'json' 'false'\n       || lk == 69800               // 'json' 'first'\n       || lk == 70312               // 'json' 'following'\n       || lk == 70824               // 'json' 'following-sibling'\n       || lk == 71336               // 'json' 'for'\n       || lk == 72872               // 'json' 'from'\n       || lk == 73384               // 'json' 'ft-option'\n       || lk == 75432               // 'json' 'function'\n       || lk == 75944               // 'json' 'ge'\n       || lk == 76968               // 'json' 'group'\n       || lk == 77992               // 'json' 'gt'\n       || lk == 78504               // 'json' 'idiv'\n       || lk == 79016               // 'json' 'if'\n       || lk == 79528               // 'json' 'import'\n       || lk == 80040               // 'json' 'in'\n       || lk == 80552               // 'json' 'index'\n       || lk == 82600               // 'json' 'insert'\n       || lk == 83112               // 'json' 'instance'\n       || lk == 83624               // 'json' 'integrity'\n       || lk == 84136               // 'json' 'intersect'\n       || lk == 84648               // 'json' 'into'\n       || lk == 85160               // 'json' 'is'\n       || lk == 85672               // 'json' 'item'\n       || lk == 86184               // 'json' 'json'\n       || lk == 86696               // 'json' 'json-item'\n       || lk == 87208               // 'json' 'jsoniq'\n       || lk == 88744               // 'json' 'last'\n       || lk == 89256               // 'json' 'lax'\n       || lk == 89768               // 'json' 'le'\n       || lk == 90792               // 'json' 'let'\n       || lk == 91816               // 'json' 'loop'\n       || lk == 92840               // 'json' 'lt'\n       || lk == 93864               // 'json' 'mod'\n       || lk == 94376               // 'json' 'modify'\n       || lk == 94888               // 'json' 'module'\n       || lk == 95912               // 'json' 'namespace'\n       || lk == 96424               // 'json' 'namespace-node'\n       || lk == 96936               // 'json' 'ne'\n       || lk == 99496               // 'json' 'node'\n       || lk == 100008              // 'json' 'nodes'\n       || lk == 100520              // 'json' 'not'\n       || lk == 101032              // 'json' 'null'\n       || lk == 101544              // 'json' 'object'\n       || lk == 103592              // 'json' 'only'\n       || lk == 104104              // 'json' 'option'\n       || lk == 104616              // 'json' 'or'\n       || lk == 105128              // 'json' 'order'\n       || lk == 105640              // 'json' 'ordered'\n       || lk == 106152              // 'json' 'ordering'\n       || lk == 107688              // 'json' 'parent'\n       || lk == 110760              // 'json' 'preceding'\n       || lk == 111272              // 'json' 'preceding-sibling'\n       || lk == 112808              // 'json' 'processing-instruction'\n       || lk == 113832              // 'json' 'rename'\n       || lk == 114344              // 'json' 'replace'\n       || lk == 114856              // 'json' 'return'\n       || lk == 115368              // 'json' 'returning'\n       || lk == 115880              // 'json' 'revalidation'\n       || lk == 116904              // 'json' 'satisfies'\n       || lk == 117416              // 'json' 'schema'\n       || lk == 117928              // 'json' 'schema-attribute'\n       || lk == 118440              // 'json' 'schema-element'\n       || lk == 118952              // 'json' 'score'\n       || lk == 119464              // 'json' 'select'\n       || lk == 119976              // 'json' 'self'\n       || lk == 122536              // 'json' 'sliding'\n       || lk == 123048              // 'json' 'some'\n       || lk == 123560              // 'json' 'stable'\n       || lk == 124072              // 'json' 'start'\n       || lk == 125608              // 'json' 'strict'\n       || lk == 126632              // 'json' 'structured-item'\n       || lk == 127144              // 'json' 'switch'\n       || lk == 127656              // 'json' 'text'\n       || lk == 129704              // 'json' 'to'\n       || lk == 130216              // 'json' 'treat'\n       || lk == 130728              // 'json' 'true'\n       || lk == 131240              // 'json' 'try'\n       || lk == 131752              // 'json' 'tumbling'\n       || lk == 132264              // 'json' 'type'\n       || lk == 132776              // 'json' 'typeswitch'\n       || lk == 133288              // 'json' 'union'\n       || lk == 134312              // 'json' 'unordered'\n       || lk == 134824              // 'json' 'updating'\n       || lk == 136360              // 'json' 'validate'\n       || lk == 136872              // 'json' 'value'\n       || lk == 137384              // 'json' 'variable'\n       || lk == 137896              // 'json' 'version'\n       || lk == 139432              // 'json' 'where'\n       || lk == 139944              // 'json' 'while'\n       || lk == 141480              // 'json' 'with'\n       || lk == 144040              // 'json' '{'\n       || lk == 145064)             // 'json' '{|'\n      {\n        shift(168);                 // 'json'\n      }\n      lookahead1W(267);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // NCName^Token | S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' |\n                                    // '//' | '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      whitespace();\n      parse_PairConstructorList();\n      shift(165);                   // 'into'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      whitespace();\n      parse_ExprSingle();\n    }\n    eventHandler.endNonterminal(\"JSONInsertExpr\", e0);\n  }\n\n  function try_JSONInsertExpr()\n  {\n    switch (l1)\n    {\n    case 161:                       // 'insert'\n      lookahead2W(267);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // NCName^Token | S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' |\n                                    // '//' | '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk != 9889)                 // 'insert' NCName^Token\n    {\n      lk = memoized(12, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(161);              // 'insert'\n          lookahead1W(266);         // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n          switch (l1)\n          {\n          case 168:                 // 'json'\n            lookahead2W(268);       // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '#' | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' |\n                                    // '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n            break;\n          default:\n            lk = l1;\n          }\n          if (lk == 18088)          // 'json' '('\n          {\n            lk = memoized(13, e0);\n            if (lk == 0)\n            {\n              var b0B = b0; var e0B = e0; var l1B = l1;\n              var b1B = b1; var e1B = e1; var l2B = l2;\n              var b2B = b2; var e2B = e2;\n              try\n              {\n                shiftT(168);        // 'json'\n                memoize(13, e0B, -1);\n              }\n              catch (p1B)\n              {\n                b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n                b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n                b2 = b2B; e2 = e2B; end = e2B; }}\n                memoize(13, e0B, -2);\n              }\n              lk = -2;\n            }\n          }\n          if (lk == -1\n           || lk == 3240            // 'json' EQName^Token\n           || lk == 4264            // 'json' IntegerLiteral\n           || lk == 4776            // 'json' DecimalLiteral\n           || lk == 5288            // 'json' DoubleLiteral\n           || lk == 5800            // 'json' StringLiteral\n           || lk == 16040           // 'json' '$'\n           || lk == 16552           // 'json' '$$'\n           || lk == 17064           // 'json' '%'\n           || lk == 18600           // 'json' '(#'\n           || lk == 21160           // 'json' '+'\n           || lk == 22184           // 'json' '-'\n           || lk == 24232           // 'json' '/'\n           || lk == 24744           // 'json' '//'\n           || lk == 28328           // 'json' '<'\n           || lk == 28840           // 'json' '<!--'\n           || lk == 30888           // 'json' '<?'\n           || lk == 35496           // 'json' '['\n           || lk == 36520           // 'json' 'after'\n           || lk == 37544           // 'json' 'allowing'\n           || lk == 38056           // 'json' 'ancestor'\n           || lk == 38568           // 'json' 'ancestor-or-self'\n           || lk == 39080           // 'json' 'and'\n           || lk == 40104           // 'json' 'append'\n           || lk == 40616           // 'json' 'array'\n           || lk == 41128           // 'json' 'as'\n           || lk == 41640           // 'json' 'ascending'\n           || lk == 42152           // 'json' 'at'\n           || lk == 42664           // 'json' 'attribute'\n           || lk == 43176           // 'json' 'base-uri'\n           || lk == 43688           // 'json' 'before'\n           || lk == 44200           // 'json' 'boundary-space'\n           || lk == 44712           // 'json' 'break'\n           || lk == 45736           // 'json' 'case'\n           || lk == 46248           // 'json' 'cast'\n           || lk == 46760           // 'json' 'castable'\n           || lk == 47272           // 'json' 'catch'\n           || lk == 48296           // 'json' 'child'\n           || lk == 48808           // 'json' 'collation'\n           || lk == 49832           // 'json' 'comment'\n           || lk == 50344           // 'json' 'constraint'\n           || lk == 50856           // 'json' 'construction'\n           || lk == 52392           // 'json' 'context'\n           || lk == 52904           // 'json' 'continue'\n           || lk == 53416           // 'json' 'copy'\n           || lk == 53928           // 'json' 'copy-namespaces'\n           || lk == 54440           // 'json' 'count'\n           || lk == 54952           // 'json' 'decimal-format'\n           || lk == 55976           // 'json' 'declare'\n           || lk == 56488           // 'json' 'default'\n           || lk == 57000           // 'json' 'delete'\n           || lk == 57512           // 'json' 'descendant'\n           || lk == 58024           // 'json' 'descendant-or-self'\n           || lk == 58536           // 'json' 'descending'\n           || lk == 61096           // 'json' 'div'\n           || lk == 61608           // 'json' 'document'\n           || lk == 62120           // 'json' 'document-node'\n           || lk == 62632           // 'json' 'element'\n           || lk == 63144           // 'json' 'else'\n           || lk == 63656           // 'json' 'empty'\n           || lk == 64168           // 'json' 'empty-sequence'\n           || lk == 64680           // 'json' 'encoding'\n           || lk == 65192           // 'json' 'end'\n           || lk == 66216           // 'json' 'eq'\n           || lk == 66728           // 'json' 'every'\n           || lk == 67752           // 'json' 'except'\n           || lk == 68264           // 'json' 'exit'\n           || lk == 68776           // 'json' 'external'\n           || lk == 69288           // 'json' 'false'\n           || lk == 69800           // 'json' 'first'\n           || lk == 70312           // 'json' 'following'\n           || lk == 70824           // 'json' 'following-sibling'\n           || lk == 71336           // 'json' 'for'\n           || lk == 72872           // 'json' 'from'\n           || lk == 73384           // 'json' 'ft-option'\n           || lk == 75432           // 'json' 'function'\n           || lk == 75944           // 'json' 'ge'\n           || lk == 76968           // 'json' 'group'\n           || lk == 77992           // 'json' 'gt'\n           || lk == 78504           // 'json' 'idiv'\n           || lk == 79016           // 'json' 'if'\n           || lk == 79528           // 'json' 'import'\n           || lk == 80040           // 'json' 'in'\n           || lk == 80552           // 'json' 'index'\n           || lk == 82600           // 'json' 'insert'\n           || lk == 83112           // 'json' 'instance'\n           || lk == 83624           // 'json' 'integrity'\n           || lk == 84136           // 'json' 'intersect'\n           || lk == 84648           // 'json' 'into'\n           || lk == 85160           // 'json' 'is'\n           || lk == 85672           // 'json' 'item'\n           || lk == 86184           // 'json' 'json'\n           || lk == 86696           // 'json' 'json-item'\n           || lk == 87208           // 'json' 'jsoniq'\n           || lk == 88744           // 'json' 'last'\n           || lk == 89256           // 'json' 'lax'\n           || lk == 89768           // 'json' 'le'\n           || lk == 90792           // 'json' 'let'\n           || lk == 91816           // 'json' 'loop'\n           || lk == 92840           // 'json' 'lt'\n           || lk == 93864           // 'json' 'mod'\n           || lk == 94376           // 'json' 'modify'\n           || lk == 94888           // 'json' 'module'\n           || lk == 95912           // 'json' 'namespace'\n           || lk == 96424           // 'json' 'namespace-node'\n           || lk == 96936           // 'json' 'ne'\n           || lk == 99496           // 'json' 'node'\n           || lk == 100008          // 'json' 'nodes'\n           || lk == 100520          // 'json' 'not'\n           || lk == 101032          // 'json' 'null'\n           || lk == 101544          // 'json' 'object'\n           || lk == 103592          // 'json' 'only'\n           || lk == 104104          // 'json' 'option'\n           || lk == 104616          // 'json' 'or'\n           || lk == 105128          // 'json' 'order'\n           || lk == 105640          // 'json' 'ordered'\n           || lk == 106152          // 'json' 'ordering'\n           || lk == 107688          // 'json' 'parent'\n           || lk == 110760          // 'json' 'preceding'\n           || lk == 111272          // 'json' 'preceding-sibling'\n           || lk == 112808          // 'json' 'processing-instruction'\n           || lk == 113832          // 'json' 'rename'\n           || lk == 114344          // 'json' 'replace'\n           || lk == 114856          // 'json' 'return'\n           || lk == 115368          // 'json' 'returning'\n           || lk == 115880          // 'json' 'revalidation'\n           || lk == 116904          // 'json' 'satisfies'\n           || lk == 117416          // 'json' 'schema'\n           || lk == 117928          // 'json' 'schema-attribute'\n           || lk == 118440          // 'json' 'schema-element'\n           || lk == 118952          // 'json' 'score'\n           || lk == 119464          // 'json' 'select'\n           || lk == 119976          // 'json' 'self'\n           || lk == 122536          // 'json' 'sliding'\n           || lk == 123048          // 'json' 'some'\n           || lk == 123560          // 'json' 'stable'\n           || lk == 124072          // 'json' 'start'\n           || lk == 125608          // 'json' 'strict'\n           || lk == 126632          // 'json' 'structured-item'\n           || lk == 127144          // 'json' 'switch'\n           || lk == 127656          // 'json' 'text'\n           || lk == 129704          // 'json' 'to'\n           || lk == 130216          // 'json' 'treat'\n           || lk == 130728          // 'json' 'true'\n           || lk == 131240          // 'json' 'try'\n           || lk == 131752          // 'json' 'tumbling'\n           || lk == 132264          // 'json' 'type'\n           || lk == 132776          // 'json' 'typeswitch'\n           || lk == 133288          // 'json' 'union'\n           || lk == 134312          // 'json' 'unordered'\n           || lk == 134824          // 'json' 'updating'\n           || lk == 136360          // 'json' 'validate'\n           || lk == 136872          // 'json' 'value'\n           || lk == 137384          // 'json' 'variable'\n           || lk == 137896          // 'json' 'version'\n           || lk == 139432          // 'json' 'where'\n           || lk == 139944          // 'json' 'while'\n           || lk == 141480          // 'json' 'with'\n           || lk == 144040          // 'json' '{'\n           || lk == 145064)         // 'json' '{|'\n          {\n            shiftT(168);            // 'json'\n          }\n          lookahead1W(266);         // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n          try_ExprSingle();\n          shiftT(165);              // 'into'\n          lookahead1W(266);         // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n          try_ExprSingle();\n          switch (l1)\n          {\n          case 82:                  // 'at'\n            lookahead2W(72);        // S^WS | '(:' | 'position'\n            break;\n          default:\n            lk = l1;\n          }\n          if (lk == 110162)         // 'at' 'position'\n          {\n            lk = memoized(14, e0);\n            if (lk == 0)\n            {\n              var b0B = b0; var e0B = e0; var l1B = l1;\n              var b1B = b1; var e1B = e1; var l2B = l2;\n              var b2B = b2; var e2B = e2;\n              try\n              {\n                shiftT(82);         // 'at'\n                lookahead1W(72);    // S^WS | '(:' | 'position'\n                shiftT(215);        // 'position'\n                lookahead1W(266);   // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n                try_ExprSingle();\n                memoize(14, e0B, -1);\n              }\n              catch (p1B)\n              {\n                b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n                b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n                b2 = b2B; e2 = e2B; end = e2B; }}\n                memoize(14, e0B, -2);\n              }\n              lk = -2;\n            }\n          }\n          if (lk == -1)\n          {\n            shiftT(82);             // 'at'\n            lookahead1W(72);        // S^WS | '(:' | 'position'\n            shiftT(215);            // 'position'\n            lookahead1W(266);       // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n            try_ExprSingle();\n          }\n          memoize(12, e0A, -1);\n          lk = -3;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(12, e0A, -2);\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      shiftT(161);                  // 'insert'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      switch (l1)\n      {\n      case 168:                     // 'json'\n        lookahead2W(268);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '#' | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' |\n                                    // '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 18088)              // 'json' '('\n      {\n        lk = memoized(13, e0);\n        if (lk == 0)\n        {\n          var b0B = b0; var e0B = e0; var l1B = l1;\n          var b1B = b1; var e1B = e1; var l2B = l2;\n          var b2B = b2; var e2B = e2;\n          try\n          {\n            shiftT(168);            // 'json'\n            memoize(13, e0B, -1);\n          }\n          catch (p1B)\n          {\n            b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n            b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n            b2 = b2B; e2 = e2B; end = e2B; }}\n            memoize(13, e0B, -2);\n          }\n          lk = -2;\n        }\n      }\n      if (lk == -1\n       || lk == 3240                // 'json' EQName^Token\n       || lk == 4264                // 'json' IntegerLiteral\n       || lk == 4776                // 'json' DecimalLiteral\n       || lk == 5288                // 'json' DoubleLiteral\n       || lk == 5800                // 'json' StringLiteral\n       || lk == 16040               // 'json' '$'\n       || lk == 16552               // 'json' '$$'\n       || lk == 17064               // 'json' '%'\n       || lk == 18600               // 'json' '(#'\n       || lk == 21160               // 'json' '+'\n       || lk == 22184               // 'json' '-'\n       || lk == 24232               // 'json' '/'\n       || lk == 24744               // 'json' '//'\n       || lk == 28328               // 'json' '<'\n       || lk == 28840               // 'json' '<!--'\n       || lk == 30888               // 'json' '<?'\n       || lk == 35496               // 'json' '['\n       || lk == 36520               // 'json' 'after'\n       || lk == 37544               // 'json' 'allowing'\n       || lk == 38056               // 'json' 'ancestor'\n       || lk == 38568               // 'json' 'ancestor-or-self'\n       || lk == 39080               // 'json' 'and'\n       || lk == 40104               // 'json' 'append'\n       || lk == 40616               // 'json' 'array'\n       || lk == 41128               // 'json' 'as'\n       || lk == 41640               // 'json' 'ascending'\n       || lk == 42152               // 'json' 'at'\n       || lk == 42664               // 'json' 'attribute'\n       || lk == 43176               // 'json' 'base-uri'\n       || lk == 43688               // 'json' 'before'\n       || lk == 44200               // 'json' 'boundary-space'\n       || lk == 44712               // 'json' 'break'\n       || lk == 45736               // 'json' 'case'\n       || lk == 46248               // 'json' 'cast'\n       || lk == 46760               // 'json' 'castable'\n       || lk == 47272               // 'json' 'catch'\n       || lk == 48296               // 'json' 'child'\n       || lk == 48808               // 'json' 'collation'\n       || lk == 49832               // 'json' 'comment'\n       || lk == 50344               // 'json' 'constraint'\n       || lk == 50856               // 'json' 'construction'\n       || lk == 52392               // 'json' 'context'\n       || lk == 52904               // 'json' 'continue'\n       || lk == 53416               // 'json' 'copy'\n       || lk == 53928               // 'json' 'copy-namespaces'\n       || lk == 54440               // 'json' 'count'\n       || lk == 54952               // 'json' 'decimal-format'\n       || lk == 55976               // 'json' 'declare'\n       || lk == 56488               // 'json' 'default'\n       || lk == 57000               // 'json' 'delete'\n       || lk == 57512               // 'json' 'descendant'\n       || lk == 58024               // 'json' 'descendant-or-self'\n       || lk == 58536               // 'json' 'descending'\n       || lk == 61096               // 'json' 'div'\n       || lk == 61608               // 'json' 'document'\n       || lk == 62120               // 'json' 'document-node'\n       || lk == 62632               // 'json' 'element'\n       || lk == 63144               // 'json' 'else'\n       || lk == 63656               // 'json' 'empty'\n       || lk == 64168               // 'json' 'empty-sequence'\n       || lk == 64680               // 'json' 'encoding'\n       || lk == 65192               // 'json' 'end'\n       || lk == 66216               // 'json' 'eq'\n       || lk == 66728               // 'json' 'every'\n       || lk == 67752               // 'json' 'except'\n       || lk == 68264               // 'json' 'exit'\n       || lk == 68776               // 'json' 'external'\n       || lk == 69288               // 'json' 'false'\n       || lk == 69800               // 'json' 'first'\n       || lk == 70312               // 'json' 'following'\n       || lk == 70824               // 'json' 'following-sibling'\n       || lk == 71336               // 'json' 'for'\n       || lk == 72872               // 'json' 'from'\n       || lk == 73384               // 'json' 'ft-option'\n       || lk == 75432               // 'json' 'function'\n       || lk == 75944               // 'json' 'ge'\n       || lk == 76968               // 'json' 'group'\n       || lk == 77992               // 'json' 'gt'\n       || lk == 78504               // 'json' 'idiv'\n       || lk == 79016               // 'json' 'if'\n       || lk == 79528               // 'json' 'import'\n       || lk == 80040               // 'json' 'in'\n       || lk == 80552               // 'json' 'index'\n       || lk == 82600               // 'json' 'insert'\n       || lk == 83112               // 'json' 'instance'\n       || lk == 83624               // 'json' 'integrity'\n       || lk == 84136               // 'json' 'intersect'\n       || lk == 84648               // 'json' 'into'\n       || lk == 85160               // 'json' 'is'\n       || lk == 85672               // 'json' 'item'\n       || lk == 86184               // 'json' 'json'\n       || lk == 86696               // 'json' 'json-item'\n       || lk == 87208               // 'json' 'jsoniq'\n       || lk == 88744               // 'json' 'last'\n       || lk == 89256               // 'json' 'lax'\n       || lk == 89768               // 'json' 'le'\n       || lk == 90792               // 'json' 'let'\n       || lk == 91816               // 'json' 'loop'\n       || lk == 92840               // 'json' 'lt'\n       || lk == 93864               // 'json' 'mod'\n       || lk == 94376               // 'json' 'modify'\n       || lk == 94888               // 'json' 'module'\n       || lk == 95912               // 'json' 'namespace'\n       || lk == 96424               // 'json' 'namespace-node'\n       || lk == 96936               // 'json' 'ne'\n       || lk == 99496               // 'json' 'node'\n       || lk == 100008              // 'json' 'nodes'\n       || lk == 100520              // 'json' 'not'\n       || lk == 101032              // 'json' 'null'\n       || lk == 101544              // 'json' 'object'\n       || lk == 103592              // 'json' 'only'\n       || lk == 104104              // 'json' 'option'\n       || lk == 104616              // 'json' 'or'\n       || lk == 105128              // 'json' 'order'\n       || lk == 105640              // 'json' 'ordered'\n       || lk == 106152              // 'json' 'ordering'\n       || lk == 107688              // 'json' 'parent'\n       || lk == 110760              // 'json' 'preceding'\n       || lk == 111272              // 'json' 'preceding-sibling'\n       || lk == 112808              // 'json' 'processing-instruction'\n       || lk == 113832              // 'json' 'rename'\n       || lk == 114344              // 'json' 'replace'\n       || lk == 114856              // 'json' 'return'\n       || lk == 115368              // 'json' 'returning'\n       || lk == 115880              // 'json' 'revalidation'\n       || lk == 116904              // 'json' 'satisfies'\n       || lk == 117416              // 'json' 'schema'\n       || lk == 117928              // 'json' 'schema-attribute'\n       || lk == 118440              // 'json' 'schema-element'\n       || lk == 118952              // 'json' 'score'\n       || lk == 119464              // 'json' 'select'\n       || lk == 119976              // 'json' 'self'\n       || lk == 122536              // 'json' 'sliding'\n       || lk == 123048              // 'json' 'some'\n       || lk == 123560              // 'json' 'stable'\n       || lk == 124072              // 'json' 'start'\n       || lk == 125608              // 'json' 'strict'\n       || lk == 126632              // 'json' 'structured-item'\n       || lk == 127144              // 'json' 'switch'\n       || lk == 127656              // 'json' 'text'\n       || lk == 129704              // 'json' 'to'\n       || lk == 130216              // 'json' 'treat'\n       || lk == 130728              // 'json' 'true'\n       || lk == 131240              // 'json' 'try'\n       || lk == 131752              // 'json' 'tumbling'\n       || lk == 132264              // 'json' 'type'\n       || lk == 132776              // 'json' 'typeswitch'\n       || lk == 133288              // 'json' 'union'\n       || lk == 134312              // 'json' 'unordered'\n       || lk == 134824              // 'json' 'updating'\n       || lk == 136360              // 'json' 'validate'\n       || lk == 136872              // 'json' 'value'\n       || lk == 137384              // 'json' 'variable'\n       || lk == 137896              // 'json' 'version'\n       || lk == 139432              // 'json' 'where'\n       || lk == 139944              // 'json' 'while'\n       || lk == 141480              // 'json' 'with'\n       || lk == 144040              // 'json' '{'\n       || lk == 145064)             // 'json' '{|'\n      {\n        shiftT(168);                // 'json'\n      }\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      try_ExprSingle();\n      shiftT(165);                  // 'into'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      try_ExprSingle();\n      switch (l1)\n      {\n      case 82:                      // 'at'\n        lookahead2W(72);            // S^WS | '(:' | 'position'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 110162)             // 'at' 'position'\n      {\n        lk = memoized(14, e0);\n        if (lk == 0)\n        {\n          var b0B = b0; var e0B = e0; var l1B = l1;\n          var b1B = b1; var e1B = e1; var l2B = l2;\n          var b2B = b2; var e2B = e2;\n          try\n          {\n            shiftT(82);             // 'at'\n            lookahead1W(72);        // S^WS | '(:' | 'position'\n            shiftT(215);            // 'position'\n            lookahead1W(266);       // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n            try_ExprSingle();\n            memoize(14, e0B, -1);\n          }\n          catch (p1B)\n          {\n            b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n            b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n            b2 = b2B; e2 = e2B; end = e2B; }}\n            memoize(14, e0B, -2);\n          }\n          lk = -2;\n        }\n      }\n      if (lk == -1)\n      {\n        shiftT(82);                 // 'at'\n        lookahead1W(72);            // S^WS | '(:' | 'position'\n        shiftT(215);                // 'position'\n        lookahead1W(266);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n        try_ExprSingle();\n      }\n      break;\n    case -3:\n      break;\n    default:\n      shiftT(161);                  // 'insert'\n      lookahead1W(267);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // NCName^Token | S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' |\n                                    // '//' | '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      switch (l1)\n      {\n      case 168:                     // 'json'\n        lookahead2W(281);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // NCName^Token | S^WS | '#' | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' |\n                                    // '/' | '//' | ':' | '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 18088)              // 'json' '('\n      {\n        lk = memoized(15, e0);\n        if (lk == 0)\n        {\n          var b0B = b0; var e0B = e0; var l1B = l1;\n          var b1B = b1; var e1B = e1; var l2B = l2;\n          var b2B = b2; var e2B = e2;\n          try\n          {\n            shiftT(168);            // 'json'\n            memoize(15, e0B, -1);\n          }\n          catch (p1B)\n          {\n            b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n            b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n            b2 = b2B; e2 = e2B; end = e2B; }}\n            memoize(15, e0B, -2);\n          }\n          lk = -2;\n        }\n      }\n      if (lk == -1\n       || lk == 3240                // 'json' EQName^Token\n       || lk == 4264                // 'json' IntegerLiteral\n       || lk == 4776                // 'json' DecimalLiteral\n       || lk == 5288                // 'json' DoubleLiteral\n       || lk == 5800                // 'json' StringLiteral\n       || lk == 9896                // 'json' NCName^Token\n       || lk == 16040               // 'json' '$'\n       || lk == 16552               // 'json' '$$'\n       || lk == 17064               // 'json' '%'\n       || lk == 18600               // 'json' '(#'\n       || lk == 21160               // 'json' '+'\n       || lk == 22184               // 'json' '-'\n       || lk == 24232               // 'json' '/'\n       || lk == 24744               // 'json' '//'\n       || lk == 28328               // 'json' '<'\n       || lk == 28840               // 'json' '<!--'\n       || lk == 30888               // 'json' '<?'\n       || lk == 35496               // 'json' '['\n       || lk == 36520               // 'json' 'after'\n       || lk == 37544               // 'json' 'allowing'\n       || lk == 38056               // 'json' 'ancestor'\n       || lk == 38568               // 'json' 'ancestor-or-self'\n       || lk == 39080               // 'json' 'and'\n       || lk == 40104               // 'json' 'append'\n       || lk == 40616               // 'json' 'array'\n       || lk == 41128               // 'json' 'as'\n       || lk == 41640               // 'json' 'ascending'\n       || lk == 42152               // 'json' 'at'\n       || lk == 42664               // 'json' 'attribute'\n       || lk == 43176               // 'json' 'base-uri'\n       || lk == 43688               // 'json' 'before'\n       || lk == 44200               // 'json' 'boundary-space'\n       || lk == 44712               // 'json' 'break'\n       || lk == 45736               // 'json' 'case'\n       || lk == 46248               // 'json' 'cast'\n       || lk == 46760               // 'json' 'castable'\n       || lk == 47272               // 'json' 'catch'\n       || lk == 48296               // 'json' 'child'\n       || lk == 48808               // 'json' 'collation'\n       || lk == 49832               // 'json' 'comment'\n       || lk == 50344               // 'json' 'constraint'\n       || lk == 50856               // 'json' 'construction'\n       || lk == 52392               // 'json' 'context'\n       || lk == 52904               // 'json' 'continue'\n       || lk == 53416               // 'json' 'copy'\n       || lk == 53928               // 'json' 'copy-namespaces'\n       || lk == 54440               // 'json' 'count'\n       || lk == 54952               // 'json' 'decimal-format'\n       || lk == 55976               // 'json' 'declare'\n       || lk == 56488               // 'json' 'default'\n       || lk == 57000               // 'json' 'delete'\n       || lk == 57512               // 'json' 'descendant'\n       || lk == 58024               // 'json' 'descendant-or-self'\n       || lk == 58536               // 'json' 'descending'\n       || lk == 61096               // 'json' 'div'\n       || lk == 61608               // 'json' 'document'\n       || lk == 62120               // 'json' 'document-node'\n       || lk == 62632               // 'json' 'element'\n       || lk == 63144               // 'json' 'else'\n       || lk == 63656               // 'json' 'empty'\n       || lk == 64168               // 'json' 'empty-sequence'\n       || lk == 64680               // 'json' 'encoding'\n       || lk == 65192               // 'json' 'end'\n       || lk == 66216               // 'json' 'eq'\n       || lk == 66728               // 'json' 'every'\n       || lk == 67752               // 'json' 'except'\n       || lk == 68264               // 'json' 'exit'\n       || lk == 68776               // 'json' 'external'\n       || lk == 69288               // 'json' 'false'\n       || lk == 69800               // 'json' 'first'\n       || lk == 70312               // 'json' 'following'\n       || lk == 70824               // 'json' 'following-sibling'\n       || lk == 71336               // 'json' 'for'\n       || lk == 72872               // 'json' 'from'\n       || lk == 73384               // 'json' 'ft-option'\n       || lk == 75432               // 'json' 'function'\n       || lk == 75944               // 'json' 'ge'\n       || lk == 76968               // 'json' 'group'\n       || lk == 77992               // 'json' 'gt'\n       || lk == 78504               // 'json' 'idiv'\n       || lk == 79016               // 'json' 'if'\n       || lk == 79528               // 'json' 'import'\n       || lk == 80040               // 'json' 'in'\n       || lk == 80552               // 'json' 'index'\n       || lk == 82600               // 'json' 'insert'\n       || lk == 83112               // 'json' 'instance'\n       || lk == 83624               // 'json' 'integrity'\n       || lk == 84136               // 'json' 'intersect'\n       || lk == 84648               // 'json' 'into'\n       || lk == 85160               // 'json' 'is'\n       || lk == 85672               // 'json' 'item'\n       || lk == 86184               // 'json' 'json'\n       || lk == 86696               // 'json' 'json-item'\n       || lk == 87208               // 'json' 'jsoniq'\n       || lk == 88744               // 'json' 'last'\n       || lk == 89256               // 'json' 'lax'\n       || lk == 89768               // 'json' 'le'\n       || lk == 90792               // 'json' 'let'\n       || lk == 91816               // 'json' 'loop'\n       || lk == 92840               // 'json' 'lt'\n       || lk == 93864               // 'json' 'mod'\n       || lk == 94376               // 'json' 'modify'\n       || lk == 94888               // 'json' 'module'\n       || lk == 95912               // 'json' 'namespace'\n       || lk == 96424               // 'json' 'namespace-node'\n       || lk == 96936               // 'json' 'ne'\n       || lk == 99496               // 'json' 'node'\n       || lk == 100008              // 'json' 'nodes'\n       || lk == 100520              // 'json' 'not'\n       || lk == 101032              // 'json' 'null'\n       || lk == 101544              // 'json' 'object'\n       || lk == 103592              // 'json' 'only'\n       || lk == 104104              // 'json' 'option'\n       || lk == 104616              // 'json' 'or'\n       || lk == 105128              // 'json' 'order'\n       || lk == 105640              // 'json' 'ordered'\n       || lk == 106152              // 'json' 'ordering'\n       || lk == 107688              // 'json' 'parent'\n       || lk == 110760              // 'json' 'preceding'\n       || lk == 111272              // 'json' 'preceding-sibling'\n       || lk == 112808              // 'json' 'processing-instruction'\n       || lk == 113832              // 'json' 'rename'\n       || lk == 114344              // 'json' 'replace'\n       || lk == 114856              // 'json' 'return'\n       || lk == 115368              // 'json' 'returning'\n       || lk == 115880              // 'json' 'revalidation'\n       || lk == 116904              // 'json' 'satisfies'\n       || lk == 117416              // 'json' 'schema'\n       || lk == 117928              // 'json' 'schema-attribute'\n       || lk == 118440              // 'json' 'schema-element'\n       || lk == 118952              // 'json' 'score'\n       || lk == 119464              // 'json' 'select'\n       || lk == 119976              // 'json' 'self'\n       || lk == 122536              // 'json' 'sliding'\n       || lk == 123048              // 'json' 'some'\n       || lk == 123560              // 'json' 'stable'\n       || lk == 124072              // 'json' 'start'\n       || lk == 125608              // 'json' 'strict'\n       || lk == 126632              // 'json' 'structured-item'\n       || lk == 127144              // 'json' 'switch'\n       || lk == 127656              // 'json' 'text'\n       || lk == 129704              // 'json' 'to'\n       || lk == 130216              // 'json' 'treat'\n       || lk == 130728              // 'json' 'true'\n       || lk == 131240              // 'json' 'try'\n       || lk == 131752              // 'json' 'tumbling'\n       || lk == 132264              // 'json' 'type'\n       || lk == 132776              // 'json' 'typeswitch'\n       || lk == 133288              // 'json' 'union'\n       || lk == 134312              // 'json' 'unordered'\n       || lk == 134824              // 'json' 'updating'\n       || lk == 136360              // 'json' 'validate'\n       || lk == 136872              // 'json' 'value'\n       || lk == 137384              // 'json' 'variable'\n       || lk == 137896              // 'json' 'version'\n       || lk == 139432              // 'json' 'where'\n       || lk == 139944              // 'json' 'while'\n       || lk == 141480              // 'json' 'with'\n       || lk == 144040              // 'json' '{'\n       || lk == 145064)             // 'json' '{|'\n      {\n        shiftT(168);                // 'json'\n      }\n      lookahead1W(267);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // NCName^Token | S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' |\n                                    // '//' | '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      try_PairConstructorList();\n      shiftT(165);                  // 'into'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      try_ExprSingle();\n    }\n  }\n\n  function parse_JSONRenameExpr()\n  {\n    eventHandler.startNonterminal(\"JSONRenameExpr\", e0);\n    shift(222);                     // 'rename'\n    lookahead1W(259);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(:' | '<' | '<!--' | '<?' | '[' | 'after' |\n                                    // 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' |\n                                    // 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'false' | 'first' | 'following' | 'following-sibling' |\n                                    // 'for' | 'from' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' |\n                                    // 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'json-item' | 'jsoniq' | 'last' |\n                                    // 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' |\n                                    // 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' | 'sliding' |\n                                    // 'some' | 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' |\n                                    // 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | '{' | '{|'\n    switch (l1)\n    {\n    case 168:                       // 'json'\n      lookahead2W(260);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '#' | '$' | '$$' | '%' | '(' | '(:' | '<' | '<!--' | '<?' | '[' |\n                                    // 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' |\n                                    // 'array' | 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'false' | 'first' | 'following' | 'following-sibling' |\n                                    // 'for' | 'from' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' |\n                                    // 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'json-item' | 'jsoniq' | 'last' |\n                                    // 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' |\n                                    // 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' | 'sliding' |\n                                    // 'some' | 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' |\n                                    // 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | '{' | '{|'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 18088)                // 'json' '('\n    {\n      lk = memoized(16, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(168);              // 'json'\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(16, e0, lk);\n      }\n    }\n    if (lk == -1\n     || lk == 3240                  // 'json' EQName^Token\n     || lk == 4264                  // 'json' IntegerLiteral\n     || lk == 4776                  // 'json' DecimalLiteral\n     || lk == 5288                  // 'json' DoubleLiteral\n     || lk == 5800                  // 'json' StringLiteral\n     || lk == 16040                 // 'json' '$'\n     || lk == 16552                 // 'json' '$$'\n     || lk == 17064                 // 'json' '%'\n     || lk == 28328                 // 'json' '<'\n     || lk == 28840                 // 'json' '<!--'\n     || lk == 30888                 // 'json' '<?'\n     || lk == 35496                 // 'json' '['\n     || lk == 36520                 // 'json' 'after'\n     || lk == 37544                 // 'json' 'allowing'\n     || lk == 38056                 // 'json' 'ancestor'\n     || lk == 38568                 // 'json' 'ancestor-or-self'\n     || lk == 39080                 // 'json' 'and'\n     || lk == 40104                 // 'json' 'append'\n     || lk == 40616                 // 'json' 'array'\n     || lk == 41128                 // 'json' 'as'\n     || lk == 41640                 // 'json' 'ascending'\n     || lk == 42152                 // 'json' 'at'\n     || lk == 42664                 // 'json' 'attribute'\n     || lk == 43176                 // 'json' 'base-uri'\n     || lk == 43688                 // 'json' 'before'\n     || lk == 44200                 // 'json' 'boundary-space'\n     || lk == 44712                 // 'json' 'break'\n     || lk == 45736                 // 'json' 'case'\n     || lk == 46248                 // 'json' 'cast'\n     || lk == 46760                 // 'json' 'castable'\n     || lk == 47272                 // 'json' 'catch'\n     || lk == 48296                 // 'json' 'child'\n     || lk == 48808                 // 'json' 'collation'\n     || lk == 49832                 // 'json' 'comment'\n     || lk == 50344                 // 'json' 'constraint'\n     || lk == 50856                 // 'json' 'construction'\n     || lk == 52392                 // 'json' 'context'\n     || lk == 52904                 // 'json' 'continue'\n     || lk == 53416                 // 'json' 'copy'\n     || lk == 53928                 // 'json' 'copy-namespaces'\n     || lk == 54440                 // 'json' 'count'\n     || lk == 54952                 // 'json' 'decimal-format'\n     || lk == 55976                 // 'json' 'declare'\n     || lk == 56488                 // 'json' 'default'\n     || lk == 57000                 // 'json' 'delete'\n     || lk == 57512                 // 'json' 'descendant'\n     || lk == 58024                 // 'json' 'descendant-or-self'\n     || lk == 58536                 // 'json' 'descending'\n     || lk == 61096                 // 'json' 'div'\n     || lk == 61608                 // 'json' 'document'\n     || lk == 62120                 // 'json' 'document-node'\n     || lk == 62632                 // 'json' 'element'\n     || lk == 63144                 // 'json' 'else'\n     || lk == 63656                 // 'json' 'empty'\n     || lk == 64168                 // 'json' 'empty-sequence'\n     || lk == 64680                 // 'json' 'encoding'\n     || lk == 65192                 // 'json' 'end'\n     || lk == 66216                 // 'json' 'eq'\n     || lk == 66728                 // 'json' 'every'\n     || lk == 67752                 // 'json' 'except'\n     || lk == 68264                 // 'json' 'exit'\n     || lk == 68776                 // 'json' 'external'\n     || lk == 69288                 // 'json' 'false'\n     || lk == 69800                 // 'json' 'first'\n     || lk == 70312                 // 'json' 'following'\n     || lk == 70824                 // 'json' 'following-sibling'\n     || lk == 71336                 // 'json' 'for'\n     || lk == 72872                 // 'json' 'from'\n     || lk == 73384                 // 'json' 'ft-option'\n     || lk == 75432                 // 'json' 'function'\n     || lk == 75944                 // 'json' 'ge'\n     || lk == 76968                 // 'json' 'group'\n     || lk == 77992                 // 'json' 'gt'\n     || lk == 78504                 // 'json' 'idiv'\n     || lk == 79016                 // 'json' 'if'\n     || lk == 79528                 // 'json' 'import'\n     || lk == 80040                 // 'json' 'in'\n     || lk == 80552                 // 'json' 'index'\n     || lk == 82600                 // 'json' 'insert'\n     || lk == 83112                 // 'json' 'instance'\n     || lk == 83624                 // 'json' 'integrity'\n     || lk == 84136                 // 'json' 'intersect'\n     || lk == 84648                 // 'json' 'into'\n     || lk == 85160                 // 'json' 'is'\n     || lk == 85672                 // 'json' 'item'\n     || lk == 86184                 // 'json' 'json'\n     || lk == 86696                 // 'json' 'json-item'\n     || lk == 87208                 // 'json' 'jsoniq'\n     || lk == 88744                 // 'json' 'last'\n     || lk == 89256                 // 'json' 'lax'\n     || lk == 89768                 // 'json' 'le'\n     || lk == 90792                 // 'json' 'let'\n     || lk == 91816                 // 'json' 'loop'\n     || lk == 92840                 // 'json' 'lt'\n     || lk == 93864                 // 'json' 'mod'\n     || lk == 94376                 // 'json' 'modify'\n     || lk == 94888                 // 'json' 'module'\n     || lk == 95912                 // 'json' 'namespace'\n     || lk == 96424                 // 'json' 'namespace-node'\n     || lk == 96936                 // 'json' 'ne'\n     || lk == 99496                 // 'json' 'node'\n     || lk == 100008                // 'json' 'nodes'\n     || lk == 101032                // 'json' 'null'\n     || lk == 101544                // 'json' 'object'\n     || lk == 103592                // 'json' 'only'\n     || lk == 104104                // 'json' 'option'\n     || lk == 104616                // 'json' 'or'\n     || lk == 105128                // 'json' 'order'\n     || lk == 105640                // 'json' 'ordered'\n     || lk == 106152                // 'json' 'ordering'\n     || lk == 107688                // 'json' 'parent'\n     || lk == 110760                // 'json' 'preceding'\n     || lk == 111272                // 'json' 'preceding-sibling'\n     || lk == 112808                // 'json' 'processing-instruction'\n     || lk == 113832                // 'json' 'rename'\n     || lk == 114344                // 'json' 'replace'\n     || lk == 114856                // 'json' 'return'\n     || lk == 115368                // 'json' 'returning'\n     || lk == 115880                // 'json' 'revalidation'\n     || lk == 116904                // 'json' 'satisfies'\n     || lk == 117416                // 'json' 'schema'\n     || lk == 117928                // 'json' 'schema-attribute'\n     || lk == 118440                // 'json' 'schema-element'\n     || lk == 118952                // 'json' 'score'\n     || lk == 119464                // 'json' 'select'\n     || lk == 119976                // 'json' 'self'\n     || lk == 122536                // 'json' 'sliding'\n     || lk == 123048                // 'json' 'some'\n     || lk == 123560                // 'json' 'stable'\n     || lk == 124072                // 'json' 'start'\n     || lk == 125608                // 'json' 'strict'\n     || lk == 126632                // 'json' 'structured-item'\n     || lk == 127144                // 'json' 'switch'\n     || lk == 127656                // 'json' 'text'\n     || lk == 129704                // 'json' 'to'\n     || lk == 130216                // 'json' 'treat'\n     || lk == 130728                // 'json' 'true'\n     || lk == 131240                // 'json' 'try'\n     || lk == 131752                // 'json' 'tumbling'\n     || lk == 132264                // 'json' 'type'\n     || lk == 132776                // 'json' 'typeswitch'\n     || lk == 133288                // 'json' 'union'\n     || lk == 134312                // 'json' 'unordered'\n     || lk == 134824                // 'json' 'updating'\n     || lk == 136360                // 'json' 'validate'\n     || lk == 136872                // 'json' 'value'\n     || lk == 137384                // 'json' 'variable'\n     || lk == 137896                // 'json' 'version'\n     || lk == 139432                // 'json' 'where'\n     || lk == 139944                // 'json' 'while'\n     || lk == 141480                // 'json' 'with'\n     || lk == 144040                // 'json' '{'\n     || lk == 145064)               // 'json' '{|'\n    {\n      shift(168);                   // 'json'\n    }\n    lookahead1W(259);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(:' | '<' | '<!--' | '<?' | '[' | 'after' |\n                                    // 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' |\n                                    // 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'false' | 'first' | 'following' | 'following-sibling' |\n                                    // 'for' | 'from' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' |\n                                    // 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'json-item' | 'jsoniq' | 'last' |\n                                    // 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' |\n                                    // 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' | 'sliding' |\n                                    // 'some' | 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' |\n                                    // 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | '{' | '{|'\n    whitespace();\n    parse_PostfixExpr();\n    shift(80);                      // 'as'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"JSONRenameExpr\", e0);\n  }\n\n  function try_JSONRenameExpr()\n  {\n    shiftT(222);                    // 'rename'\n    lookahead1W(259);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(:' | '<' | '<!--' | '<?' | '[' | 'after' |\n                                    // 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' |\n                                    // 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'false' | 'first' | 'following' | 'following-sibling' |\n                                    // 'for' | 'from' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' |\n                                    // 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'json-item' | 'jsoniq' | 'last' |\n                                    // 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' |\n                                    // 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' | 'sliding' |\n                                    // 'some' | 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' |\n                                    // 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | '{' | '{|'\n    switch (l1)\n    {\n    case 168:                       // 'json'\n      lookahead2W(260);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '#' | '$' | '$$' | '%' | '(' | '(:' | '<' | '<!--' | '<?' | '[' |\n                                    // 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' |\n                                    // 'array' | 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'false' | 'first' | 'following' | 'following-sibling' |\n                                    // 'for' | 'from' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' |\n                                    // 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'json-item' | 'jsoniq' | 'last' |\n                                    // 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' |\n                                    // 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' | 'sliding' |\n                                    // 'some' | 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' |\n                                    // 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | '{' | '{|'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 18088)                // 'json' '('\n    {\n      lk = memoized(16, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(168);              // 'json'\n          memoize(16, e0A, -1);\n        }\n        catch (p1A)\n        {\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(16, e0A, -2);\n        }\n        lk = -2;\n      }\n    }\n    if (lk == -1\n     || lk == 3240                  // 'json' EQName^Token\n     || lk == 4264                  // 'json' IntegerLiteral\n     || lk == 4776                  // 'json' DecimalLiteral\n     || lk == 5288                  // 'json' DoubleLiteral\n     || lk == 5800                  // 'json' StringLiteral\n     || lk == 16040                 // 'json' '$'\n     || lk == 16552                 // 'json' '$$'\n     || lk == 17064                 // 'json' '%'\n     || lk == 28328                 // 'json' '<'\n     || lk == 28840                 // 'json' '<!--'\n     || lk == 30888                 // 'json' '<?'\n     || lk == 35496                 // 'json' '['\n     || lk == 36520                 // 'json' 'after'\n     || lk == 37544                 // 'json' 'allowing'\n     || lk == 38056                 // 'json' 'ancestor'\n     || lk == 38568                 // 'json' 'ancestor-or-self'\n     || lk == 39080                 // 'json' 'and'\n     || lk == 40104                 // 'json' 'append'\n     || lk == 40616                 // 'json' 'array'\n     || lk == 41128                 // 'json' 'as'\n     || lk == 41640                 // 'json' 'ascending'\n     || lk == 42152                 // 'json' 'at'\n     || lk == 42664                 // 'json' 'attribute'\n     || lk == 43176                 // 'json' 'base-uri'\n     || lk == 43688                 // 'json' 'before'\n     || lk == 44200                 // 'json' 'boundary-space'\n     || lk == 44712                 // 'json' 'break'\n     || lk == 45736                 // 'json' 'case'\n     || lk == 46248                 // 'json' 'cast'\n     || lk == 46760                 // 'json' 'castable'\n     || lk == 47272                 // 'json' 'catch'\n     || lk == 48296                 // 'json' 'child'\n     || lk == 48808                 // 'json' 'collation'\n     || lk == 49832                 // 'json' 'comment'\n     || lk == 50344                 // 'json' 'constraint'\n     || lk == 50856                 // 'json' 'construction'\n     || lk == 52392                 // 'json' 'context'\n     || lk == 52904                 // 'json' 'continue'\n     || lk == 53416                 // 'json' 'copy'\n     || lk == 53928                 // 'json' 'copy-namespaces'\n     || lk == 54440                 // 'json' 'count'\n     || lk == 54952                 // 'json' 'decimal-format'\n     || lk == 55976                 // 'json' 'declare'\n     || lk == 56488                 // 'json' 'default'\n     || lk == 57000                 // 'json' 'delete'\n     || lk == 57512                 // 'json' 'descendant'\n     || lk == 58024                 // 'json' 'descendant-or-self'\n     || lk == 58536                 // 'json' 'descending'\n     || lk == 61096                 // 'json' 'div'\n     || lk == 61608                 // 'json' 'document'\n     || lk == 62120                 // 'json' 'document-node'\n     || lk == 62632                 // 'json' 'element'\n     || lk == 63144                 // 'json' 'else'\n     || lk == 63656                 // 'json' 'empty'\n     || lk == 64168                 // 'json' 'empty-sequence'\n     || lk == 64680                 // 'json' 'encoding'\n     || lk == 65192                 // 'json' 'end'\n     || lk == 66216                 // 'json' 'eq'\n     || lk == 66728                 // 'json' 'every'\n     || lk == 67752                 // 'json' 'except'\n     || lk == 68264                 // 'json' 'exit'\n     || lk == 68776                 // 'json' 'external'\n     || lk == 69288                 // 'json' 'false'\n     || lk == 69800                 // 'json' 'first'\n     || lk == 70312                 // 'json' 'following'\n     || lk == 70824                 // 'json' 'following-sibling'\n     || lk == 71336                 // 'json' 'for'\n     || lk == 72872                 // 'json' 'from'\n     || lk == 73384                 // 'json' 'ft-option'\n     || lk == 75432                 // 'json' 'function'\n     || lk == 75944                 // 'json' 'ge'\n     || lk == 76968                 // 'json' 'group'\n     || lk == 77992                 // 'json' 'gt'\n     || lk == 78504                 // 'json' 'idiv'\n     || lk == 79016                 // 'json' 'if'\n     || lk == 79528                 // 'json' 'import'\n     || lk == 80040                 // 'json' 'in'\n     || lk == 80552                 // 'json' 'index'\n     || lk == 82600                 // 'json' 'insert'\n     || lk == 83112                 // 'json' 'instance'\n     || lk == 83624                 // 'json' 'integrity'\n     || lk == 84136                 // 'json' 'intersect'\n     || lk == 84648                 // 'json' 'into'\n     || lk == 85160                 // 'json' 'is'\n     || lk == 85672                 // 'json' 'item'\n     || lk == 86184                 // 'json' 'json'\n     || lk == 86696                 // 'json' 'json-item'\n     || lk == 87208                 // 'json' 'jsoniq'\n     || lk == 88744                 // 'json' 'last'\n     || lk == 89256                 // 'json' 'lax'\n     || lk == 89768                 // 'json' 'le'\n     || lk == 90792                 // 'json' 'let'\n     || lk == 91816                 // 'json' 'loop'\n     || lk == 92840                 // 'json' 'lt'\n     || lk == 93864                 // 'json' 'mod'\n     || lk == 94376                 // 'json' 'modify'\n     || lk == 94888                 // 'json' 'module'\n     || lk == 95912                 // 'json' 'namespace'\n     || lk == 96424                 // 'json' 'namespace-node'\n     || lk == 96936                 // 'json' 'ne'\n     || lk == 99496                 // 'json' 'node'\n     || lk == 100008                // 'json' 'nodes'\n     || lk == 101032                // 'json' 'null'\n     || lk == 101544                // 'json' 'object'\n     || lk == 103592                // 'json' 'only'\n     || lk == 104104                // 'json' 'option'\n     || lk == 104616                // 'json' 'or'\n     || lk == 105128                // 'json' 'order'\n     || lk == 105640                // 'json' 'ordered'\n     || lk == 106152                // 'json' 'ordering'\n     || lk == 107688                // 'json' 'parent'\n     || lk == 110760                // 'json' 'preceding'\n     || lk == 111272                // 'json' 'preceding-sibling'\n     || lk == 112808                // 'json' 'processing-instruction'\n     || lk == 113832                // 'json' 'rename'\n     || lk == 114344                // 'json' 'replace'\n     || lk == 114856                // 'json' 'return'\n     || lk == 115368                // 'json' 'returning'\n     || lk == 115880                // 'json' 'revalidation'\n     || lk == 116904                // 'json' 'satisfies'\n     || lk == 117416                // 'json' 'schema'\n     || lk == 117928                // 'json' 'schema-attribute'\n     || lk == 118440                // 'json' 'schema-element'\n     || lk == 118952                // 'json' 'score'\n     || lk == 119464                // 'json' 'select'\n     || lk == 119976                // 'json' 'self'\n     || lk == 122536                // 'json' 'sliding'\n     || lk == 123048                // 'json' 'some'\n     || lk == 123560                // 'json' 'stable'\n     || lk == 124072                // 'json' 'start'\n     || lk == 125608                // 'json' 'strict'\n     || lk == 126632                // 'json' 'structured-item'\n     || lk == 127144                // 'json' 'switch'\n     || lk == 127656                // 'json' 'text'\n     || lk == 129704                // 'json' 'to'\n     || lk == 130216                // 'json' 'treat'\n     || lk == 130728                // 'json' 'true'\n     || lk == 131240                // 'json' 'try'\n     || lk == 131752                // 'json' 'tumbling'\n     || lk == 132264                // 'json' 'type'\n     || lk == 132776                // 'json' 'typeswitch'\n     || lk == 133288                // 'json' 'union'\n     || lk == 134312                // 'json' 'unordered'\n     || lk == 134824                // 'json' 'updating'\n     || lk == 136360                // 'json' 'validate'\n     || lk == 136872                // 'json' 'value'\n     || lk == 137384                // 'json' 'variable'\n     || lk == 137896                // 'json' 'version'\n     || lk == 139432                // 'json' 'where'\n     || lk == 139944                // 'json' 'while'\n     || lk == 141480                // 'json' 'with'\n     || lk == 144040                // 'json' '{'\n     || lk == 145064)               // 'json' '{|'\n    {\n      shiftT(168);                  // 'json'\n    }\n    lookahead1W(259);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(:' | '<' | '<!--' | '<?' | '[' | 'after' |\n                                    // 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' |\n                                    // 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'false' | 'first' | 'following' | 'following-sibling' |\n                                    // 'for' | 'from' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' |\n                                    // 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'json-item' | 'jsoniq' | 'last' |\n                                    // 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' |\n                                    // 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' | 'sliding' |\n                                    // 'some' | 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' |\n                                    // 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | '{' | '{|'\n    try_PostfixExpr();\n    shiftT(80);                     // 'as'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_ExprSingle();\n  }\n\n  function parse_JSONReplaceExpr()\n  {\n    eventHandler.startNonterminal(\"JSONReplaceExpr\", e0);\n    shift(223);                     // 'replace'\n    lookahead1W(85);                // S^WS | '(:' | 'value'\n    shift(267);                     // 'value'\n    lookahead1W(67);                // S^WS | '(:' | 'of'\n    shift(200);                     // 'of'\n    lookahead1W(59);                // S^WS | '(:' | 'json'\n    shift(168);                     // 'json'\n    lookahead1W(259);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(:' | '<' | '<!--' | '<?' | '[' | 'after' |\n                                    // 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' |\n                                    // 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'false' | 'first' | 'following' | 'following-sibling' |\n                                    // 'for' | 'from' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' |\n                                    // 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'json-item' | 'jsoniq' | 'last' |\n                                    // 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' |\n                                    // 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' | 'sliding' |\n                                    // 'some' | 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' |\n                                    // 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | '{' | '{|'\n    whitespace();\n    parse_PostfixExpr();\n    shift(276);                     // 'with'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"JSONReplaceExpr\", e0);\n  }\n\n  function try_JSONReplaceExpr()\n  {\n    shiftT(223);                    // 'replace'\n    lookahead1W(85);                // S^WS | '(:' | 'value'\n    shiftT(267);                    // 'value'\n    lookahead1W(67);                // S^WS | '(:' | 'of'\n    shiftT(200);                    // 'of'\n    lookahead1W(59);                // S^WS | '(:' | 'json'\n    shiftT(168);                    // 'json'\n    lookahead1W(259);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(:' | '<' | '<!--' | '<?' | '[' | 'after' |\n                                    // 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' |\n                                    // 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'false' | 'first' | 'following' | 'following-sibling' |\n                                    // 'for' | 'from' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' |\n                                    // 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'json-item' | 'jsoniq' | 'last' |\n                                    // 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' |\n                                    // 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' | 'sliding' |\n                                    // 'some' | 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' |\n                                    // 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | '{' | '{|'\n    try_PostfixExpr();\n    shiftT(276);                    // 'with'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_ExprSingle();\n  }\n\n  function parse_JSONAppendExpr()\n  {\n    eventHandler.startNonterminal(\"JSONAppendExpr\", e0);\n    shift(78);                      // 'append'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    switch (l1)\n    {\n    case 168:                       // 'json'\n      lookahead2W(268);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '#' | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' |\n                                    // '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 18088)                // 'json' '('\n    {\n      lk = memoized(17, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(168);              // 'json'\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(17, e0, lk);\n      }\n    }\n    if (lk == -1\n     || lk == 3240                  // 'json' EQName^Token\n     || lk == 4264                  // 'json' IntegerLiteral\n     || lk == 4776                  // 'json' DecimalLiteral\n     || lk == 5288                  // 'json' DoubleLiteral\n     || lk == 5800                  // 'json' StringLiteral\n     || lk == 16040                 // 'json' '$'\n     || lk == 16552                 // 'json' '$$'\n     || lk == 17064                 // 'json' '%'\n     || lk == 18600                 // 'json' '(#'\n     || lk == 21160                 // 'json' '+'\n     || lk == 22184                 // 'json' '-'\n     || lk == 24232                 // 'json' '/'\n     || lk == 24744                 // 'json' '//'\n     || lk == 28328                 // 'json' '<'\n     || lk == 28840                 // 'json' '<!--'\n     || lk == 30888                 // 'json' '<?'\n     || lk == 35496                 // 'json' '['\n     || lk == 36520                 // 'json' 'after'\n     || lk == 37544                 // 'json' 'allowing'\n     || lk == 38056                 // 'json' 'ancestor'\n     || lk == 38568                 // 'json' 'ancestor-or-self'\n     || lk == 39080                 // 'json' 'and'\n     || lk == 40104                 // 'json' 'append'\n     || lk == 40616                 // 'json' 'array'\n     || lk == 41128                 // 'json' 'as'\n     || lk == 41640                 // 'json' 'ascending'\n     || lk == 42152                 // 'json' 'at'\n     || lk == 42664                 // 'json' 'attribute'\n     || lk == 43176                 // 'json' 'base-uri'\n     || lk == 43688                 // 'json' 'before'\n     || lk == 44200                 // 'json' 'boundary-space'\n     || lk == 44712                 // 'json' 'break'\n     || lk == 45736                 // 'json' 'case'\n     || lk == 46248                 // 'json' 'cast'\n     || lk == 46760                 // 'json' 'castable'\n     || lk == 47272                 // 'json' 'catch'\n     || lk == 48296                 // 'json' 'child'\n     || lk == 48808                 // 'json' 'collation'\n     || lk == 49832                 // 'json' 'comment'\n     || lk == 50344                 // 'json' 'constraint'\n     || lk == 50856                 // 'json' 'construction'\n     || lk == 52392                 // 'json' 'context'\n     || lk == 52904                 // 'json' 'continue'\n     || lk == 53416                 // 'json' 'copy'\n     || lk == 53928                 // 'json' 'copy-namespaces'\n     || lk == 54440                 // 'json' 'count'\n     || lk == 54952                 // 'json' 'decimal-format'\n     || lk == 55976                 // 'json' 'declare'\n     || lk == 56488                 // 'json' 'default'\n     || lk == 57000                 // 'json' 'delete'\n     || lk == 57512                 // 'json' 'descendant'\n     || lk == 58024                 // 'json' 'descendant-or-self'\n     || lk == 58536                 // 'json' 'descending'\n     || lk == 61096                 // 'json' 'div'\n     || lk == 61608                 // 'json' 'document'\n     || lk == 62120                 // 'json' 'document-node'\n     || lk == 62632                 // 'json' 'element'\n     || lk == 63144                 // 'json' 'else'\n     || lk == 63656                 // 'json' 'empty'\n     || lk == 64168                 // 'json' 'empty-sequence'\n     || lk == 64680                 // 'json' 'encoding'\n     || lk == 65192                 // 'json' 'end'\n     || lk == 66216                 // 'json' 'eq'\n     || lk == 66728                 // 'json' 'every'\n     || lk == 67752                 // 'json' 'except'\n     || lk == 68264                 // 'json' 'exit'\n     || lk == 68776                 // 'json' 'external'\n     || lk == 69288                 // 'json' 'false'\n     || lk == 69800                 // 'json' 'first'\n     || lk == 70312                 // 'json' 'following'\n     || lk == 70824                 // 'json' 'following-sibling'\n     || lk == 71336                 // 'json' 'for'\n     || lk == 72872                 // 'json' 'from'\n     || lk == 73384                 // 'json' 'ft-option'\n     || lk == 75432                 // 'json' 'function'\n     || lk == 75944                 // 'json' 'ge'\n     || lk == 76968                 // 'json' 'group'\n     || lk == 77992                 // 'json' 'gt'\n     || lk == 78504                 // 'json' 'idiv'\n     || lk == 79016                 // 'json' 'if'\n     || lk == 79528                 // 'json' 'import'\n     || lk == 80040                 // 'json' 'in'\n     || lk == 80552                 // 'json' 'index'\n     || lk == 82600                 // 'json' 'insert'\n     || lk == 83112                 // 'json' 'instance'\n     || lk == 83624                 // 'json' 'integrity'\n     || lk == 84136                 // 'json' 'intersect'\n     || lk == 84648                 // 'json' 'into'\n     || lk == 85160                 // 'json' 'is'\n     || lk == 85672                 // 'json' 'item'\n     || lk == 86184                 // 'json' 'json'\n     || lk == 86696                 // 'json' 'json-item'\n     || lk == 87208                 // 'json' 'jsoniq'\n     || lk == 88744                 // 'json' 'last'\n     || lk == 89256                 // 'json' 'lax'\n     || lk == 89768                 // 'json' 'le'\n     || lk == 90792                 // 'json' 'let'\n     || lk == 91816                 // 'json' 'loop'\n     || lk == 92840                 // 'json' 'lt'\n     || lk == 93864                 // 'json' 'mod'\n     || lk == 94376                 // 'json' 'modify'\n     || lk == 94888                 // 'json' 'module'\n     || lk == 95912                 // 'json' 'namespace'\n     || lk == 96424                 // 'json' 'namespace-node'\n     || lk == 96936                 // 'json' 'ne'\n     || lk == 99496                 // 'json' 'node'\n     || lk == 100008                // 'json' 'nodes'\n     || lk == 100520                // 'json' 'not'\n     || lk == 101032                // 'json' 'null'\n     || lk == 101544                // 'json' 'object'\n     || lk == 103592                // 'json' 'only'\n     || lk == 104104                // 'json' 'option'\n     || lk == 104616                // 'json' 'or'\n     || lk == 105128                // 'json' 'order'\n     || lk == 105640                // 'json' 'ordered'\n     || lk == 106152                // 'json' 'ordering'\n     || lk == 107688                // 'json' 'parent'\n     || lk == 110760                // 'json' 'preceding'\n     || lk == 111272                // 'json' 'preceding-sibling'\n     || lk == 112808                // 'json' 'processing-instruction'\n     || lk == 113832                // 'json' 'rename'\n     || lk == 114344                // 'json' 'replace'\n     || lk == 114856                // 'json' 'return'\n     || lk == 115368                // 'json' 'returning'\n     || lk == 115880                // 'json' 'revalidation'\n     || lk == 116904                // 'json' 'satisfies'\n     || lk == 117416                // 'json' 'schema'\n     || lk == 117928                // 'json' 'schema-attribute'\n     || lk == 118440                // 'json' 'schema-element'\n     || lk == 118952                // 'json' 'score'\n     || lk == 119464                // 'json' 'select'\n     || lk == 119976                // 'json' 'self'\n     || lk == 122536                // 'json' 'sliding'\n     || lk == 123048                // 'json' 'some'\n     || lk == 123560                // 'json' 'stable'\n     || lk == 124072                // 'json' 'start'\n     || lk == 125608                // 'json' 'strict'\n     || lk == 126632                // 'json' 'structured-item'\n     || lk == 127144                // 'json' 'switch'\n     || lk == 127656                // 'json' 'text'\n     || lk == 129704                // 'json' 'to'\n     || lk == 130216                // 'json' 'treat'\n     || lk == 130728                // 'json' 'true'\n     || lk == 131240                // 'json' 'try'\n     || lk == 131752                // 'json' 'tumbling'\n     || lk == 132264                // 'json' 'type'\n     || lk == 132776                // 'json' 'typeswitch'\n     || lk == 133288                // 'json' 'union'\n     || lk == 134312                // 'json' 'unordered'\n     || lk == 134824                // 'json' 'updating'\n     || lk == 136360                // 'json' 'validate'\n     || lk == 136872                // 'json' 'value'\n     || lk == 137384                // 'json' 'variable'\n     || lk == 137896                // 'json' 'version'\n     || lk == 139432                // 'json' 'where'\n     || lk == 139944                // 'json' 'while'\n     || lk == 141480                // 'json' 'with'\n     || lk == 144040                // 'json' '{'\n     || lk == 145064)               // 'json' '{|'\n    {\n      shift(168);                   // 'json'\n    }\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    shift(165);                     // 'into'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"JSONAppendExpr\", e0);\n  }\n\n  function try_JSONAppendExpr()\n  {\n    shiftT(78);                     // 'append'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    switch (l1)\n    {\n    case 168:                       // 'json'\n      lookahead2W(268);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '#' | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' |\n                                    // '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 18088)                // 'json' '('\n    {\n      lk = memoized(17, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(168);              // 'json'\n          memoize(17, e0A, -1);\n        }\n        catch (p1A)\n        {\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(17, e0A, -2);\n        }\n        lk = -2;\n      }\n    }\n    if (lk == -1\n     || lk == 3240                  // 'json' EQName^Token\n     || lk == 4264                  // 'json' IntegerLiteral\n     || lk == 4776                  // 'json' DecimalLiteral\n     || lk == 5288                  // 'json' DoubleLiteral\n     || lk == 5800                  // 'json' StringLiteral\n     || lk == 16040                 // 'json' '$'\n     || lk == 16552                 // 'json' '$$'\n     || lk == 17064                 // 'json' '%'\n     || lk == 18600                 // 'json' '(#'\n     || lk == 21160                 // 'json' '+'\n     || lk == 22184                 // 'json' '-'\n     || lk == 24232                 // 'json' '/'\n     || lk == 24744                 // 'json' '//'\n     || lk == 28328                 // 'json' '<'\n     || lk == 28840                 // 'json' '<!--'\n     || lk == 30888                 // 'json' '<?'\n     || lk == 35496                 // 'json' '['\n     || lk == 36520                 // 'json' 'after'\n     || lk == 37544                 // 'json' 'allowing'\n     || lk == 38056                 // 'json' 'ancestor'\n     || lk == 38568                 // 'json' 'ancestor-or-self'\n     || lk == 39080                 // 'json' 'and'\n     || lk == 40104                 // 'json' 'append'\n     || lk == 40616                 // 'json' 'array'\n     || lk == 41128                 // 'json' 'as'\n     || lk == 41640                 // 'json' 'ascending'\n     || lk == 42152                 // 'json' 'at'\n     || lk == 42664                 // 'json' 'attribute'\n     || lk == 43176                 // 'json' 'base-uri'\n     || lk == 43688                 // 'json' 'before'\n     || lk == 44200                 // 'json' 'boundary-space'\n     || lk == 44712                 // 'json' 'break'\n     || lk == 45736                 // 'json' 'case'\n     || lk == 46248                 // 'json' 'cast'\n     || lk == 46760                 // 'json' 'castable'\n     || lk == 47272                 // 'json' 'catch'\n     || lk == 48296                 // 'json' 'child'\n     || lk == 48808                 // 'json' 'collation'\n     || lk == 49832                 // 'json' 'comment'\n     || lk == 50344                 // 'json' 'constraint'\n     || lk == 50856                 // 'json' 'construction'\n     || lk == 52392                 // 'json' 'context'\n     || lk == 52904                 // 'json' 'continue'\n     || lk == 53416                 // 'json' 'copy'\n     || lk == 53928                 // 'json' 'copy-namespaces'\n     || lk == 54440                 // 'json' 'count'\n     || lk == 54952                 // 'json' 'decimal-format'\n     || lk == 55976                 // 'json' 'declare'\n     || lk == 56488                 // 'json' 'default'\n     || lk == 57000                 // 'json' 'delete'\n     || lk == 57512                 // 'json' 'descendant'\n     || lk == 58024                 // 'json' 'descendant-or-self'\n     || lk == 58536                 // 'json' 'descending'\n     || lk == 61096                 // 'json' 'div'\n     || lk == 61608                 // 'json' 'document'\n     || lk == 62120                 // 'json' 'document-node'\n     || lk == 62632                 // 'json' 'element'\n     || lk == 63144                 // 'json' 'else'\n     || lk == 63656                 // 'json' 'empty'\n     || lk == 64168                 // 'json' 'empty-sequence'\n     || lk == 64680                 // 'json' 'encoding'\n     || lk == 65192                 // 'json' 'end'\n     || lk == 66216                 // 'json' 'eq'\n     || lk == 66728                 // 'json' 'every'\n     || lk == 67752                 // 'json' 'except'\n     || lk == 68264                 // 'json' 'exit'\n     || lk == 68776                 // 'json' 'external'\n     || lk == 69288                 // 'json' 'false'\n     || lk == 69800                 // 'json' 'first'\n     || lk == 70312                 // 'json' 'following'\n     || lk == 70824                 // 'json' 'following-sibling'\n     || lk == 71336                 // 'json' 'for'\n     || lk == 72872                 // 'json' 'from'\n     || lk == 73384                 // 'json' 'ft-option'\n     || lk == 75432                 // 'json' 'function'\n     || lk == 75944                 // 'json' 'ge'\n     || lk == 76968                 // 'json' 'group'\n     || lk == 77992                 // 'json' 'gt'\n     || lk == 78504                 // 'json' 'idiv'\n     || lk == 79016                 // 'json' 'if'\n     || lk == 79528                 // 'json' 'import'\n     || lk == 80040                 // 'json' 'in'\n     || lk == 80552                 // 'json' 'index'\n     || lk == 82600                 // 'json' 'insert'\n     || lk == 83112                 // 'json' 'instance'\n     || lk == 83624                 // 'json' 'integrity'\n     || lk == 84136                 // 'json' 'intersect'\n     || lk == 84648                 // 'json' 'into'\n     || lk == 85160                 // 'json' 'is'\n     || lk == 85672                 // 'json' 'item'\n     || lk == 86184                 // 'json' 'json'\n     || lk == 86696                 // 'json' 'json-item'\n     || lk == 87208                 // 'json' 'jsoniq'\n     || lk == 88744                 // 'json' 'last'\n     || lk == 89256                 // 'json' 'lax'\n     || lk == 89768                 // 'json' 'le'\n     || lk == 90792                 // 'json' 'let'\n     || lk == 91816                 // 'json' 'loop'\n     || lk == 92840                 // 'json' 'lt'\n     || lk == 93864                 // 'json' 'mod'\n     || lk == 94376                 // 'json' 'modify'\n     || lk == 94888                 // 'json' 'module'\n     || lk == 95912                 // 'json' 'namespace'\n     || lk == 96424                 // 'json' 'namespace-node'\n     || lk == 96936                 // 'json' 'ne'\n     || lk == 99496                 // 'json' 'node'\n     || lk == 100008                // 'json' 'nodes'\n     || lk == 100520                // 'json' 'not'\n     || lk == 101032                // 'json' 'null'\n     || lk == 101544                // 'json' 'object'\n     || lk == 103592                // 'json' 'only'\n     || lk == 104104                // 'json' 'option'\n     || lk == 104616                // 'json' 'or'\n     || lk == 105128                // 'json' 'order'\n     || lk == 105640                // 'json' 'ordered'\n     || lk == 106152                // 'json' 'ordering'\n     || lk == 107688                // 'json' 'parent'\n     || lk == 110760                // 'json' 'preceding'\n     || lk == 111272                // 'json' 'preceding-sibling'\n     || lk == 112808                // 'json' 'processing-instruction'\n     || lk == 113832                // 'json' 'rename'\n     || lk == 114344                // 'json' 'replace'\n     || lk == 114856                // 'json' 'return'\n     || lk == 115368                // 'json' 'returning'\n     || lk == 115880                // 'json' 'revalidation'\n     || lk == 116904                // 'json' 'satisfies'\n     || lk == 117416                // 'json' 'schema'\n     || lk == 117928                // 'json' 'schema-attribute'\n     || lk == 118440                // 'json' 'schema-element'\n     || lk == 118952                // 'json' 'score'\n     || lk == 119464                // 'json' 'select'\n     || lk == 119976                // 'json' 'self'\n     || lk == 122536                // 'json' 'sliding'\n     || lk == 123048                // 'json' 'some'\n     || lk == 123560                // 'json' 'stable'\n     || lk == 124072                // 'json' 'start'\n     || lk == 125608                // 'json' 'strict'\n     || lk == 126632                // 'json' 'structured-item'\n     || lk == 127144                // 'json' 'switch'\n     || lk == 127656                // 'json' 'text'\n     || lk == 129704                // 'json' 'to'\n     || lk == 130216                // 'json' 'treat'\n     || lk == 130728                // 'json' 'true'\n     || lk == 131240                // 'json' 'try'\n     || lk == 131752                // 'json' 'tumbling'\n     || lk == 132264                // 'json' 'type'\n     || lk == 132776                // 'json' 'typeswitch'\n     || lk == 133288                // 'json' 'union'\n     || lk == 134312                // 'json' 'unordered'\n     || lk == 134824                // 'json' 'updating'\n     || lk == 136360                // 'json' 'validate'\n     || lk == 136872                // 'json' 'value'\n     || lk == 137384                // 'json' 'variable'\n     || lk == 137896                // 'json' 'version'\n     || lk == 139432                // 'json' 'where'\n     || lk == 139944                // 'json' 'while'\n     || lk == 141480                // 'json' 'with'\n     || lk == 144040                // 'json' '{'\n     || lk == 145064)               // 'json' '{|'\n    {\n      shiftT(168);                  // 'json'\n    }\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_ExprSingle();\n    shiftT(165);                    // 'into'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_ExprSingle();\n  }\n\n  function parse_CommonContent()\n  {\n    eventHandler.startNonterminal(\"CommonContent\", e0);\n    switch (l1)\n    {\n    case 12:                        // PredefinedEntityRef\n      shift(12);                    // PredefinedEntityRef\n      break;\n    case 23:                        // CharRef\n      shift(23);                    // CharRef\n      break;\n    case 282:                       // '{{'\n      shift(282);                   // '{{'\n      break;\n    case 288:                       // '}}'\n      shift(288);                   // '}}'\n      break;\n    default:\n      parse_BlockExpr();\n    }\n    eventHandler.endNonterminal(\"CommonContent\", e0);\n  }\n\n  function try_CommonContent()\n  {\n    switch (l1)\n    {\n    case 12:                        // PredefinedEntityRef\n      shiftT(12);                   // PredefinedEntityRef\n      break;\n    case 23:                        // CharRef\n      shiftT(23);                   // CharRef\n      break;\n    case 282:                       // '{{'\n      shiftT(282);                  // '{{'\n      break;\n    case 288:                       // '}}'\n      shiftT(288);                  // '}}'\n      break;\n    default:\n      try_BlockExpr();\n    }\n  }\n\n  function parse_ContentExpr()\n  {\n    eventHandler.startNonterminal(\"ContentExpr\", e0);\n    parse_StatementsAndExpr();\n    eventHandler.endNonterminal(\"ContentExpr\", e0);\n  }\n\n  function try_ContentExpr()\n  {\n    try_StatementsAndExpr();\n  }\n\n  function parse_CompDocConstructor()\n  {\n    eventHandler.startNonterminal(\"CompDocConstructor\", e0);\n    shift(120);                     // 'document'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    whitespace();\n    parse_BlockExpr();\n    eventHandler.endNonterminal(\"CompDocConstructor\", e0);\n  }\n\n  function try_CompDocConstructor()\n  {\n    shiftT(120);                    // 'document'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    try_BlockExpr();\n  }\n\n  function parse_CompAttrConstructor()\n  {\n    eventHandler.startNonterminal(\"CompAttrConstructor\", e0);\n    shift(83);                      // 'attribute'\n    lookahead1W(249);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' | '{'\n    switch (l1)\n    {\n    case 281:                       // '{'\n      shift(281);                   // '{'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      whitespace();\n      parse_Expr();\n      shift(287);                   // '}'\n      break;\n    default:\n      whitespace();\n      parse_EQName();\n    }\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    switch (l1)\n    {\n    case 281:                       // '{'\n      lookahead2W(280);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | ';' |\n                                    // '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|' | '}'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 147225)               // '{' '}'\n    {\n      lk = memoized(18, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(281);              // '{'\n          lookahead1W(91);          // S^WS | '(:' | '}'\n          shiftT(287);              // '}'\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(18, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      shift(281);                   // '{'\n      lookahead1W(91);              // S^WS | '(:' | '}'\n      shift(287);                   // '}'\n      break;\n    default:\n      whitespace();\n      parse_BlockExpr();\n    }\n    eventHandler.endNonterminal(\"CompAttrConstructor\", e0);\n  }\n\n  function try_CompAttrConstructor()\n  {\n    shiftT(83);                     // 'attribute'\n    lookahead1W(249);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' | '{'\n    switch (l1)\n    {\n    case 281:                       // '{'\n      shiftT(281);                  // '{'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      try_Expr();\n      shiftT(287);                  // '}'\n      break;\n    default:\n      try_EQName();\n    }\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    switch (l1)\n    {\n    case 281:                       // '{'\n      lookahead2W(280);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | ';' |\n                                    // '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|' | '}'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 147225)               // '{' '}'\n    {\n      lk = memoized(18, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(281);              // '{'\n          lookahead1W(91);          // S^WS | '(:' | '}'\n          shiftT(287);              // '}'\n          memoize(18, e0A, -1);\n          lk = -3;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(18, e0A, -2);\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      shiftT(281);                  // '{'\n      lookahead1W(91);              // S^WS | '(:' | '}'\n      shiftT(287);                  // '}'\n      break;\n    case -3:\n      break;\n    default:\n      try_BlockExpr();\n    }\n  }\n\n  function parse_CompPIConstructor()\n  {\n    eventHandler.startNonterminal(\"CompPIConstructor\", e0);\n    shift(220);                     // 'processing-instruction'\n    lookahead1W(241);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' |\n                                    // 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | '{'\n    switch (l1)\n    {\n    case 281:                       // '{'\n      shift(281);                   // '{'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      whitespace();\n      parse_Expr();\n      shift(287);                   // '}'\n      break;\n    default:\n      whitespace();\n      parse_NCName();\n    }\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    switch (l1)\n    {\n    case 281:                       // '{'\n      lookahead2W(280);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | ';' |\n                                    // '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|' | '}'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 147225)               // '{' '}'\n    {\n      lk = memoized(19, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(281);              // '{'\n          lookahead1W(91);          // S^WS | '(:' | '}'\n          shiftT(287);              // '}'\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(19, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      shift(281);                   // '{'\n      lookahead1W(91);              // S^WS | '(:' | '}'\n      shift(287);                   // '}'\n      break;\n    default:\n      whitespace();\n      parse_BlockExpr();\n    }\n    eventHandler.endNonterminal(\"CompPIConstructor\", e0);\n  }\n\n  function try_CompPIConstructor()\n  {\n    shiftT(220);                    // 'processing-instruction'\n    lookahead1W(241);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' |\n                                    // 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | '{'\n    switch (l1)\n    {\n    case 281:                       // '{'\n      shiftT(281);                  // '{'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      try_Expr();\n      shiftT(287);                  // '}'\n      break;\n    default:\n      try_NCName();\n    }\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    switch (l1)\n    {\n    case 281:                       // '{'\n      lookahead2W(280);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | ';' |\n                                    // '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|' | '}'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 147225)               // '{' '}'\n    {\n      lk = memoized(19, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(281);              // '{'\n          lookahead1W(91);          // S^WS | '(:' | '}'\n          shiftT(287);              // '}'\n          memoize(19, e0A, -1);\n          lk = -3;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(19, e0A, -2);\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      shiftT(281);                  // '{'\n      lookahead1W(91);              // S^WS | '(:' | '}'\n      shiftT(287);                  // '}'\n      break;\n    case -3:\n      break;\n    default:\n      try_BlockExpr();\n    }\n  }\n\n  function parse_CompCommentConstructor()\n  {\n    eventHandler.startNonterminal(\"CompCommentConstructor\", e0);\n    shift(97);                      // 'comment'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    whitespace();\n    parse_BlockExpr();\n    eventHandler.endNonterminal(\"CompCommentConstructor\", e0);\n  }\n\n  function try_CompCommentConstructor()\n  {\n    shiftT(97);                     // 'comment'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    try_BlockExpr();\n  }\n\n  function parse_CompTextConstructor()\n  {\n    eventHandler.startNonterminal(\"CompTextConstructor\", e0);\n    shift(249);                     // 'text'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    whitespace();\n    parse_BlockExpr();\n    eventHandler.endNonterminal(\"CompTextConstructor\", e0);\n  }\n\n  function try_CompTextConstructor()\n  {\n    shiftT(249);                    // 'text'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    try_BlockExpr();\n  }\n\n  function parse_PrimaryExpr()\n  {\n    eventHandler.startNonterminal(\"PrimaryExpr\", e0);\n    switch (l1)\n    {\n    case 187:                       // 'namespace'\n      lookahead2W(246);             // NCName^Token | S^WS | '#' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' |\n                                    // 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | '{'\n      break;\n    case 220:                       // 'processing-instruction'\n      lookahead2W(244);             // NCName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' |\n                                    // 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | '{'\n      break;\n    case 281:                       // '{'\n      lookahead2W(282);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // NCName^Token | S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' |\n                                    // '//' | ';' | '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|' | '}'\n      break;\n    case 83:                        // 'attribute'\n    case 122:                       // 'element'\n      lookahead2W(252);             // EQName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' | '{'\n      break;\n    case 97:                        // 'comment'\n    case 249:                       // 'text'\n      lookahead2W(97);              // S^WS | '#' | '(:' | '{'\n      break;\n    case 120:                       // 'document'\n    case 206:                       // 'ordered'\n    case 262:                       // 'unordered'\n      lookahead2W(148);             // S^WS | '#' | '(' | '(:' | '{'\n      break;\n    case 135:                       // 'false'\n    case 197:                       // 'null'\n    case 255:                       // 'true'\n      lookahead2W(236);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '.' |\n                                    // '/' | '//' | ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' |\n                                    // ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'by' | 'case' |\n                                    // 'cast' | 'castable' | 'collation' | 'contains' | 'count' | 'default' |\n                                    // 'descending' | 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' |\n                                    // 'ge' | 'group' | 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' |\n                                    // 'le' | 'let' | 'lt' | 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' |\n                                    // 'paragraphs' | 'return' | 'satisfies' | 'sentences' | 'stable' | 'start' |\n                                    // 'times' | 'to' | 'treat' | 'union' | 'where' | 'with' | 'words' | '|' | '||' |\n                                    // '|}' | '}'\n      break;\n    case 6:                         // EQName^Token\n    case 71:                        // 'after'\n    case 73:                        // 'allowing'\n    case 74:                        // 'ancestor'\n    case 75:                        // 'ancestor-or-self'\n    case 76:                        // 'and'\n    case 78:                        // 'append'\n    case 80:                        // 'as'\n    case 81:                        // 'ascending'\n    case 82:                        // 'at'\n    case 84:                        // 'base-uri'\n    case 85:                        // 'before'\n    case 86:                        // 'boundary-space'\n    case 87:                        // 'break'\n    case 89:                        // 'case'\n    case 90:                        // 'cast'\n    case 91:                        // 'castable'\n    case 92:                        // 'catch'\n    case 94:                        // 'child'\n    case 95:                        // 'collation'\n    case 98:                        // 'constraint'\n    case 99:                        // 'construction'\n    case 102:                       // 'context'\n    case 103:                       // 'continue'\n    case 104:                       // 'copy'\n    case 105:                       // 'copy-namespaces'\n    case 106:                       // 'count'\n    case 107:                       // 'decimal-format'\n    case 109:                       // 'declare'\n    case 110:                       // 'default'\n    case 111:                       // 'delete'\n    case 112:                       // 'descendant'\n    case 113:                       // 'descendant-or-self'\n    case 114:                       // 'descending'\n    case 119:                       // 'div'\n    case 123:                       // 'else'\n    case 124:                       // 'empty'\n    case 126:                       // 'encoding'\n    case 127:                       // 'end'\n    case 129:                       // 'eq'\n    case 130:                       // 'every'\n    case 132:                       // 'except'\n    case 133:                       // 'exit'\n    case 134:                       // 'external'\n    case 136:                       // 'first'\n    case 137:                       // 'following'\n    case 138:                       // 'following-sibling'\n    case 139:                       // 'for'\n    case 142:                       // 'from'\n    case 143:                       // 'ft-option'\n    case 148:                       // 'ge'\n    case 150:                       // 'group'\n    case 152:                       // 'gt'\n    case 153:                       // 'idiv'\n    case 155:                       // 'import'\n    case 156:                       // 'in'\n    case 157:                       // 'index'\n    case 161:                       // 'insert'\n    case 162:                       // 'instance'\n    case 163:                       // 'integrity'\n    case 164:                       // 'intersect'\n    case 165:                       // 'into'\n    case 166:                       // 'is'\n    case 168:                       // 'json'\n    case 170:                       // 'jsoniq'\n    case 173:                       // 'last'\n    case 174:                       // 'lax'\n    case 175:                       // 'le'\n    case 177:                       // 'let'\n    case 179:                       // 'loop'\n    case 181:                       // 'lt'\n    case 183:                       // 'mod'\n    case 184:                       // 'modify'\n    case 185:                       // 'module'\n    case 189:                       // 'ne'\n    case 195:                       // 'nodes'\n    case 198:                       // 'object'\n    case 202:                       // 'only'\n    case 203:                       // 'option'\n    case 204:                       // 'or'\n    case 205:                       // 'order'\n    case 207:                       // 'ordering'\n    case 210:                       // 'parent'\n    case 216:                       // 'preceding'\n    case 217:                       // 'preceding-sibling'\n    case 222:                       // 'rename'\n    case 223:                       // 'replace'\n    case 224:                       // 'return'\n    case 225:                       // 'returning'\n    case 226:                       // 'revalidation'\n    case 228:                       // 'satisfies'\n    case 229:                       // 'schema'\n    case 232:                       // 'score'\n    case 233:                       // 'select'\n    case 234:                       // 'self'\n    case 239:                       // 'sliding'\n    case 240:                       // 'some'\n    case 241:                       // 'stable'\n    case 242:                       // 'start'\n    case 245:                       // 'strict'\n    case 253:                       // 'to'\n    case 254:                       // 'treat'\n    case 256:                       // 'try'\n    case 257:                       // 'tumbling'\n    case 258:                       // 'type'\n    case 260:                       // 'union'\n    case 263:                       // 'updating'\n    case 266:                       // 'validate'\n    case 267:                       // 'value'\n    case 268:                       // 'variable'\n    case 269:                       // 'version'\n    case 272:                       // 'where'\n    case 273:                       // 'while'\n    case 276:                       // 'with'\n      lookahead2W(95);              // S^WS | '#' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 3353                  // '{' EQName^Token\n     || lk == 4377                  // '{' IntegerLiteral\n     || lk == 4889                  // '{' DecimalLiteral\n     || lk == 5401                  // '{' DoubleLiteral\n     || lk == 5913                  // '{' StringLiteral\n     || lk == 16153                 // '{' '$'\n     || lk == 16665                 // '{' '$$'\n     || lk == 17177                 // '{' '%'\n     || lk == 18055                 // 'false' '('\n     || lk == 18117                 // 'null' '('\n     || lk == 18175                 // 'true' '('\n     || lk == 18201                 // '{' '('\n     || lk == 18713                 // '{' '(#'\n     || lk == 21273                 // '{' '+'\n     || lk == 22297                 // '{' '-'\n     || lk == 24345                 // '{' '/'\n     || lk == 24857                 // '{' '//'\n     || lk == 28441                 // '{' '<'\n     || lk == 28953                 // '{' '<!--'\n     || lk == 31001                 // '{' '<?'\n     || lk == 35609                 // '{' '['\n     || lk == 36633                 // '{' 'after'\n     || lk == 37657                 // '{' 'allowing'\n     || lk == 38169                 // '{' 'ancestor'\n     || lk == 38681                 // '{' 'ancestor-or-self'\n     || lk == 39193                 // '{' 'and'\n     || lk == 40217                 // '{' 'append'\n     || lk == 40729                 // '{' 'array'\n     || lk == 41241                 // '{' 'as'\n     || lk == 41753                 // '{' 'ascending'\n     || lk == 42265                 // '{' 'at'\n     || lk == 42777                 // '{' 'attribute'\n     || lk == 43289                 // '{' 'base-uri'\n     || lk == 43801                 // '{' 'before'\n     || lk == 44313                 // '{' 'boundary-space'\n     || lk == 44825                 // '{' 'break'\n     || lk == 45849                 // '{' 'case'\n     || lk == 46361                 // '{' 'cast'\n     || lk == 46873                 // '{' 'castable'\n     || lk == 47385                 // '{' 'catch'\n     || lk == 48409                 // '{' 'child'\n     || lk == 48921                 // '{' 'collation'\n     || lk == 49945                 // '{' 'comment'\n     || lk == 50457                 // '{' 'constraint'\n     || lk == 50969                 // '{' 'construction'\n     || lk == 52505                 // '{' 'context'\n     || lk == 53017                 // '{' 'continue'\n     || lk == 53529                 // '{' 'copy'\n     || lk == 54041                 // '{' 'copy-namespaces'\n     || lk == 54553                 // '{' 'count'\n     || lk == 55065                 // '{' 'decimal-format'\n     || lk == 56089                 // '{' 'declare'\n     || lk == 56601                 // '{' 'default'\n     || lk == 57113                 // '{' 'delete'\n     || lk == 57625                 // '{' 'descendant'\n     || lk == 58137                 // '{' 'descendant-or-self'\n     || lk == 58649                 // '{' 'descending'\n     || lk == 61209                 // '{' 'div'\n     || lk == 61721                 // '{' 'document'\n     || lk == 62233                 // '{' 'document-node'\n     || lk == 62745                 // '{' 'element'\n     || lk == 63257                 // '{' 'else'\n     || lk == 63769                 // '{' 'empty'\n     || lk == 64281                 // '{' 'empty-sequence'\n     || lk == 64793                 // '{' 'encoding'\n     || lk == 65305                 // '{' 'end'\n     || lk == 66329                 // '{' 'eq'\n     || lk == 66841                 // '{' 'every'\n     || lk == 67865                 // '{' 'except'\n     || lk == 68377                 // '{' 'exit'\n     || lk == 68889                 // '{' 'external'\n     || lk == 69401                 // '{' 'false'\n     || lk == 69913                 // '{' 'first'\n     || lk == 70425                 // '{' 'following'\n     || lk == 70937                 // '{' 'following-sibling'\n     || lk == 71449                 // '{' 'for'\n     || lk == 72985                 // '{' 'from'\n     || lk == 73497                 // '{' 'ft-option'\n     || lk == 75545                 // '{' 'function'\n     || lk == 76057                 // '{' 'ge'\n     || lk == 77081                 // '{' 'group'\n     || lk == 78105                 // '{' 'gt'\n     || lk == 78617                 // '{' 'idiv'\n     || lk == 79129                 // '{' 'if'\n     || lk == 79641                 // '{' 'import'\n     || lk == 80153                 // '{' 'in'\n     || lk == 80665                 // '{' 'index'\n     || lk == 82713                 // '{' 'insert'\n     || lk == 83225                 // '{' 'instance'\n     || lk == 83737                 // '{' 'integrity'\n     || lk == 84249                 // '{' 'intersect'\n     || lk == 84761                 // '{' 'into'\n     || lk == 85273                 // '{' 'is'\n     || lk == 85785                 // '{' 'item'\n     || lk == 86297                 // '{' 'json'\n     || lk == 86809                 // '{' 'json-item'\n     || lk == 87321                 // '{' 'jsoniq'\n     || lk == 88857                 // '{' 'last'\n     || lk == 89369                 // '{' 'lax'\n     || lk == 89881                 // '{' 'le'\n     || lk == 90905                 // '{' 'let'\n     || lk == 91929                 // '{' 'loop'\n     || lk == 92953                 // '{' 'lt'\n     || lk == 93977                 // '{' 'mod'\n     || lk == 94489                 // '{' 'modify'\n     || lk == 95001                 // '{' 'module'\n     || lk == 96025                 // '{' 'namespace'\n     || lk == 96537                 // '{' 'namespace-node'\n     || lk == 97049                 // '{' 'ne'\n     || lk == 99609                 // '{' 'node'\n     || lk == 100121                // '{' 'nodes'\n     || lk == 100633                // '{' 'not'\n     || lk == 101145                // '{' 'null'\n     || lk == 101657                // '{' 'object'\n     || lk == 103705                // '{' 'only'\n     || lk == 104217                // '{' 'option'\n     || lk == 104729                // '{' 'or'\n     || lk == 105241                // '{' 'order'\n     || lk == 105753                // '{' 'ordered'\n     || lk == 106265                // '{' 'ordering'\n     || lk == 107801                // '{' 'parent'\n     || lk == 110873                // '{' 'preceding'\n     || lk == 111385                // '{' 'preceding-sibling'\n     || lk == 112921                // '{' 'processing-instruction'\n     || lk == 113945                // '{' 'rename'\n     || lk == 114457                // '{' 'replace'\n     || lk == 114969                // '{' 'return'\n     || lk == 115481                // '{' 'returning'\n     || lk == 115993                // '{' 'revalidation'\n     || lk == 117017                // '{' 'satisfies'\n     || lk == 117529                // '{' 'schema'\n     || lk == 118041                // '{' 'schema-attribute'\n     || lk == 118553                // '{' 'schema-element'\n     || lk == 119065                // '{' 'score'\n     || lk == 119577                // '{' 'select'\n     || lk == 120089                // '{' 'self'\n     || lk == 122649                // '{' 'sliding'\n     || lk == 123161                // '{' 'some'\n     || lk == 123673                // '{' 'stable'\n     || lk == 124185                // '{' 'start'\n     || lk == 125721                // '{' 'strict'\n     || lk == 126745                // '{' 'structured-item'\n     || lk == 127257                // '{' 'switch'\n     || lk == 127769                // '{' 'text'\n     || lk == 129817                // '{' 'to'\n     || lk == 130329                // '{' 'treat'\n     || lk == 130841                // '{' 'true'\n     || lk == 131353                // '{' 'try'\n     || lk == 131865                // '{' 'tumbling'\n     || lk == 132377                // '{' 'type'\n     || lk == 132889                // '{' 'typeswitch'\n     || lk == 133401                // '{' 'union'\n     || lk == 134425                // '{' 'unordered'\n     || lk == 134937                // '{' 'updating'\n     || lk == 136473                // '{' 'validate'\n     || lk == 136985                // '{' 'value'\n     || lk == 137497                // '{' 'variable'\n     || lk == 138009                // '{' 'version'\n     || lk == 139545                // '{' 'where'\n     || lk == 140057                // '{' 'while'\n     || lk == 141593                // '{' 'with'\n     || lk == 144153                // '{' '{'\n     || lk == 145177                // '{' '{|'\n     || lk == 147225)               // '{' '}'\n    {\n      lk = memoized(20, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_Literal();\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          try\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            try_FunctionCall();\n            lk = -5;\n          }\n          catch (p5A)\n          {\n            try\n            {\n              b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n              b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n              b2 = b2A; e2 = e2A; end = e2A; }}\n              try_BlockExpr();\n              lk = -10;\n            }\n            catch (p10A)\n            {\n              lk = -11;\n            }\n          }\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(20, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n    case 8:                         // IntegerLiteral\n    case 9:                         // DecimalLiteral\n    case 10:                        // DoubleLiteral\n    case 11:                        // StringLiteral\n    case 12935:                     // 'false' EOF\n    case 12997:                     // 'null' EOF\n    case 13055:                     // 'true' EOF\n    case 13447:                     // 'false' '!'\n    case 13509:                     // 'null' '!'\n    case 13567:                     // 'true' '!'\n    case 13959:                     // 'false' '!='\n    case 14021:                     // 'null' '!='\n    case 14079:                     // 'true' '!='\n    case 19591:                     // 'false' ')'\n    case 19653:                     // 'null' ')'\n    case 19711:                     // 'true' ')'\n    case 20103:                     // 'false' '*'\n    case 20165:                     // 'null' '*'\n    case 20223:                     // 'true' '*'\n    case 21127:                     // 'false' '+'\n    case 21189:                     // 'null' '+'\n    case 21247:                     // 'true' '+'\n    case 21639:                     // 'false' ','\n    case 21701:                     // 'null' ','\n    case 21759:                     // 'true' ','\n    case 22151:                     // 'false' '-'\n    case 22213:                     // 'null' '-'\n    case 22271:                     // 'true' '-'\n    case 23175:                     // 'false' '.'\n    case 23237:                     // 'null' '.'\n    case 23295:                     // 'true' '.'\n    case 24199:                     // 'false' '/'\n    case 24261:                     // 'null' '/'\n    case 24319:                     // 'true' '/'\n    case 24711:                     // 'false' '//'\n    case 24773:                     // 'null' '//'\n    case 24831:                     // 'true' '//'\n    case 25735:                     // 'false' ':'\n    case 25797:                     // 'null' ':'\n    case 25855:                     // 'true' ':'\n    case 27783:                     // 'false' ';'\n    case 27845:                     // 'null' ';'\n    case 27903:                     // 'true' ';'\n    case 28295:                     // 'false' '<'\n    case 28357:                     // 'null' '<'\n    case 28415:                     // 'true' '<'\n    case 29831:                     // 'false' '<<'\n    case 29893:                     // 'null' '<<'\n    case 29951:                     // 'true' '<<'\n    case 30343:                     // 'false' '<='\n    case 30405:                     // 'null' '<='\n    case 30463:                     // 'true' '<='\n    case 31367:                     // 'false' '='\n    case 31429:                     // 'null' '='\n    case 31487:                     // 'true' '='\n    case 31879:                     // 'false' '>'\n    case 31941:                     // 'null' '>'\n    case 31999:                     // 'true' '>'\n    case 32391:                     // 'false' '>='\n    case 32453:                     // 'null' '>='\n    case 32511:                     // 'true' '>='\n    case 32903:                     // 'false' '>>'\n    case 32965:                     // 'null' '>>'\n    case 33023:                     // 'true' '>>'\n    case 35463:                     // 'false' '['\n    case 35525:                     // 'null' '['\n    case 35583:                     // 'true' '['\n    case 35975:                     // 'false' ']'\n    case 36037:                     // 'null' ']'\n    case 36095:                     // 'true' ']'\n    case 36487:                     // 'false' 'after'\n    case 36549:                     // 'null' 'after'\n    case 36607:                     // 'true' 'after'\n    case 39047:                     // 'false' 'and'\n    case 39109:                     // 'null' 'and'\n    case 39167:                     // 'true' 'and'\n    case 41095:                     // 'false' 'as'\n    case 41157:                     // 'null' 'as'\n    case 41215:                     // 'true' 'as'\n    case 41607:                     // 'false' 'ascending'\n    case 41669:                     // 'null' 'ascending'\n    case 41727:                     // 'true' 'ascending'\n    case 42119:                     // 'false' 'at'\n    case 42181:                     // 'null' 'at'\n    case 42239:                     // 'true' 'at'\n    case 43655:                     // 'false' 'before'\n    case 43717:                     // 'null' 'before'\n    case 43775:                     // 'true' 'before'\n    case 45191:                     // 'false' 'by'\n    case 45253:                     // 'null' 'by'\n    case 45311:                     // 'true' 'by'\n    case 45703:                     // 'false' 'case'\n    case 45765:                     // 'null' 'case'\n    case 45823:                     // 'true' 'case'\n    case 46215:                     // 'false' 'cast'\n    case 46277:                     // 'null' 'cast'\n    case 46335:                     // 'true' 'cast'\n    case 46727:                     // 'false' 'castable'\n    case 46789:                     // 'null' 'castable'\n    case 46847:                     // 'true' 'castable'\n    case 48775:                     // 'false' 'collation'\n    case 48837:                     // 'null' 'collation'\n    case 48895:                     // 'true' 'collation'\n    case 51335:                     // 'false' 'contains'\n    case 51397:                     // 'null' 'contains'\n    case 51455:                     // 'true' 'contains'\n    case 54407:                     // 'false' 'count'\n    case 54469:                     // 'null' 'count'\n    case 54527:                     // 'true' 'count'\n    case 56455:                     // 'false' 'default'\n    case 56517:                     // 'null' 'default'\n    case 56575:                     // 'true' 'default'\n    case 58503:                     // 'false' 'descending'\n    case 58565:                     // 'null' 'descending'\n    case 58623:                     // 'true' 'descending'\n    case 61063:                     // 'false' 'div'\n    case 61125:                     // 'null' 'div'\n    case 61183:                     // 'true' 'div'\n    case 63111:                     // 'false' 'else'\n    case 63173:                     // 'null' 'else'\n    case 63231:                     // 'true' 'else'\n    case 63623:                     // 'false' 'empty'\n    case 63685:                     // 'null' 'empty'\n    case 63743:                     // 'true' 'empty'\n    case 65159:                     // 'false' 'end'\n    case 65221:                     // 'null' 'end'\n    case 65279:                     // 'true' 'end'\n    case 66183:                     // 'false' 'eq'\n    case 66245:                     // 'null' 'eq'\n    case 66303:                     // 'true' 'eq'\n    case 67719:                     // 'false' 'except'\n    case 67781:                     // 'null' 'except'\n    case 67839:                     // 'true' 'except'\n    case 71303:                     // 'false' 'for'\n    case 71365:                     // 'null' 'for'\n    case 71423:                     // 'true' 'for'\n    case 75911:                     // 'false' 'ge'\n    case 75973:                     // 'null' 'ge'\n    case 76031:                     // 'true' 'ge'\n    case 76935:                     // 'false' 'group'\n    case 76997:                     // 'null' 'group'\n    case 77055:                     // 'true' 'group'\n    case 77959:                     // 'false' 'gt'\n    case 78021:                     // 'null' 'gt'\n    case 78079:                     // 'true' 'gt'\n    case 78471:                     // 'false' 'idiv'\n    case 78533:                     // 'null' 'idiv'\n    case 78591:                     // 'true' 'idiv'\n    case 83079:                     // 'false' 'instance'\n    case 83141:                     // 'null' 'instance'\n    case 83199:                     // 'true' 'instance'\n    case 84103:                     // 'false' 'intersect'\n    case 84165:                     // 'null' 'intersect'\n    case 84223:                     // 'true' 'intersect'\n    case 84615:                     // 'false' 'into'\n    case 84677:                     // 'null' 'into'\n    case 84735:                     // 'true' 'into'\n    case 85127:                     // 'false' 'is'\n    case 85189:                     // 'null' 'is'\n    case 85247:                     // 'true' 'is'\n    case 89735:                     // 'false' 'le'\n    case 89797:                     // 'null' 'le'\n    case 89855:                     // 'true' 'le'\n    case 90759:                     // 'false' 'let'\n    case 90821:                     // 'null' 'let'\n    case 90879:                     // 'true' 'let'\n    case 92807:                     // 'false' 'lt'\n    case 92869:                     // 'null' 'lt'\n    case 92927:                     // 'true' 'lt'\n    case 93831:                     // 'false' 'mod'\n    case 93893:                     // 'null' 'mod'\n    case 93951:                     // 'true' 'mod'\n    case 94343:                     // 'false' 'modify'\n    case 94405:                     // 'null' 'modify'\n    case 94463:                     // 'true' 'modify'\n    case 96903:                     // 'false' 'ne'\n    case 96965:                     // 'null' 'ne'\n    case 97023:                     // 'true' 'ne'\n    case 103559:                    // 'false' 'only'\n    case 103621:                    // 'null' 'only'\n    case 103679:                    // 'true' 'only'\n    case 104583:                    // 'false' 'or'\n    case 104645:                    // 'null' 'or'\n    case 104703:                    // 'true' 'or'\n    case 105095:                    // 'false' 'order'\n    case 105157:                    // 'null' 'order'\n    case 105215:                    // 'true' 'order'\n    case 107143:                    // 'false' 'paragraphs'\n    case 107205:                    // 'null' 'paragraphs'\n    case 107263:                    // 'true' 'paragraphs'\n    case 114823:                    // 'false' 'return'\n    case 114885:                    // 'null' 'return'\n    case 114943:                    // 'true' 'return'\n    case 116871:                    // 'false' 'satisfies'\n    case 116933:                    // 'null' 'satisfies'\n    case 116991:                    // 'true' 'satisfies'\n    case 121479:                    // 'false' 'sentences'\n    case 121541:                    // 'null' 'sentences'\n    case 121599:                    // 'true' 'sentences'\n    case 123527:                    // 'false' 'stable'\n    case 123589:                    // 'null' 'stable'\n    case 123647:                    // 'true' 'stable'\n    case 124039:                    // 'false' 'start'\n    case 124101:                    // 'null' 'start'\n    case 124159:                    // 'true' 'start'\n    case 129159:                    // 'false' 'times'\n    case 129221:                    // 'null' 'times'\n    case 129279:                    // 'true' 'times'\n    case 129671:                    // 'false' 'to'\n    case 129733:                    // 'null' 'to'\n    case 129791:                    // 'true' 'to'\n    case 130183:                    // 'false' 'treat'\n    case 130245:                    // 'null' 'treat'\n    case 130303:                    // 'true' 'treat'\n    case 133255:                    // 'false' 'union'\n    case 133317:                    // 'null' 'union'\n    case 133375:                    // 'true' 'union'\n    case 139399:                    // 'false' 'where'\n    case 139461:                    // 'null' 'where'\n    case 139519:                    // 'true' 'where'\n    case 141447:                    // 'false' 'with'\n    case 141509:                    // 'null' 'with'\n    case 141567:                    // 'true' 'with'\n    case 142983:                    // 'false' 'words'\n    case 143045:                    // 'null' 'words'\n    case 143103:                    // 'true' 'words'\n    case 145543:                    // 'false' '|'\n    case 145605:                    // 'null' '|'\n    case 145663:                    // 'true' '|'\n    case 146055:                    // 'false' '||'\n    case 146117:                    // 'null' '||'\n    case 146175:                    // 'true' '||'\n    case 146567:                    // 'false' '|}'\n    case 146629:                    // 'null' '|}'\n    case 146687:                    // 'true' '|}'\n    case 147079:                    // 'false' '}'\n    case 147141:                    // 'null' '}'\n    case 147199:                    // 'true' '}'\n      parse_Literal();\n      break;\n    case 31:                        // '$'\n      parse_VarRef();\n      break;\n    case 35:                        // '('\n      parse_ParenthesizedExpr();\n      break;\n    case 32:                        // '$$'\n      parse_ContextItemExpr();\n      break;\n    case -5:\n    case 17926:                     // EQName^Token '('\n    case 17991:                     // 'after' '('\n    case 17993:                     // 'allowing' '('\n    case 17994:                     // 'ancestor' '('\n    case 17995:                     // 'ancestor-or-self' '('\n    case 17996:                     // 'and' '('\n    case 17998:                     // 'append' '('\n    case 18000:                     // 'as' '('\n    case 18001:                     // 'ascending' '('\n    case 18002:                     // 'at' '('\n    case 18004:                     // 'base-uri' '('\n    case 18005:                     // 'before' '('\n    case 18006:                     // 'boundary-space' '('\n    case 18007:                     // 'break' '('\n    case 18009:                     // 'case' '('\n    case 18010:                     // 'cast' '('\n    case 18011:                     // 'castable' '('\n    case 18012:                     // 'catch' '('\n    case 18014:                     // 'child' '('\n    case 18015:                     // 'collation' '('\n    case 18018:                     // 'constraint' '('\n    case 18019:                     // 'construction' '('\n    case 18022:                     // 'context' '('\n    case 18023:                     // 'continue' '('\n    case 18024:                     // 'copy' '('\n    case 18025:                     // 'copy-namespaces' '('\n    case 18026:                     // 'count' '('\n    case 18027:                     // 'decimal-format' '('\n    case 18029:                     // 'declare' '('\n    case 18030:                     // 'default' '('\n    case 18031:                     // 'delete' '('\n    case 18032:                     // 'descendant' '('\n    case 18033:                     // 'descendant-or-self' '('\n    case 18034:                     // 'descending' '('\n    case 18039:                     // 'div' '('\n    case 18040:                     // 'document' '('\n    case 18043:                     // 'else' '('\n    case 18044:                     // 'empty' '('\n    case 18046:                     // 'encoding' '('\n    case 18047:                     // 'end' '('\n    case 18049:                     // 'eq' '('\n    case 18050:                     // 'every' '('\n    case 18052:                     // 'except' '('\n    case 18053:                     // 'exit' '('\n    case 18054:                     // 'external' '('\n    case 18056:                     // 'first' '('\n    case 18057:                     // 'following' '('\n    case 18058:                     // 'following-sibling' '('\n    case 18059:                     // 'for' '('\n    case 18062:                     // 'from' '('\n    case 18063:                     // 'ft-option' '('\n    case 18068:                     // 'ge' '('\n    case 18070:                     // 'group' '('\n    case 18072:                     // 'gt' '('\n    case 18073:                     // 'idiv' '('\n    case 18075:                     // 'import' '('\n    case 18076:                     // 'in' '('\n    case 18077:                     // 'index' '('\n    case 18081:                     // 'insert' '('\n    case 18082:                     // 'instance' '('\n    case 18083:                     // 'integrity' '('\n    case 18084:                     // 'intersect' '('\n    case 18085:                     // 'into' '('\n    case 18086:                     // 'is' '('\n    case 18088:                     // 'json' '('\n    case 18090:                     // 'jsoniq' '('\n    case 18093:                     // 'last' '('\n    case 18094:                     // 'lax' '('\n    case 18095:                     // 'le' '('\n    case 18097:                     // 'let' '('\n    case 18099:                     // 'loop' '('\n    case 18101:                     // 'lt' '('\n    case 18103:                     // 'mod' '('\n    case 18104:                     // 'modify' '('\n    case 18105:                     // 'module' '('\n    case 18107:                     // 'namespace' '('\n    case 18109:                     // 'ne' '('\n    case 18115:                     // 'nodes' '('\n    case 18118:                     // 'object' '('\n    case 18122:                     // 'only' '('\n    case 18123:                     // 'option' '('\n    case 18124:                     // 'or' '('\n    case 18125:                     // 'order' '('\n    case 18126:                     // 'ordered' '('\n    case 18127:                     // 'ordering' '('\n    case 18130:                     // 'parent' '('\n    case 18136:                     // 'preceding' '('\n    case 18137:                     // 'preceding-sibling' '('\n    case 18142:                     // 'rename' '('\n    case 18143:                     // 'replace' '('\n    case 18144:                     // 'return' '('\n    case 18145:                     // 'returning' '('\n    case 18146:                     // 'revalidation' '('\n    case 18148:                     // 'satisfies' '('\n    case 18149:                     // 'schema' '('\n    case 18152:                     // 'score' '('\n    case 18153:                     // 'select' '('\n    case 18154:                     // 'self' '('\n    case 18159:                     // 'sliding' '('\n    case 18160:                     // 'some' '('\n    case 18161:                     // 'stable' '('\n    case 18162:                     // 'start' '('\n    case 18165:                     // 'strict' '('\n    case 18173:                     // 'to' '('\n    case 18174:                     // 'treat' '('\n    case 18176:                     // 'try' '('\n    case 18177:                     // 'tumbling' '('\n    case 18178:                     // 'type' '('\n    case 18180:                     // 'union' '('\n    case 18182:                     // 'unordered' '('\n    case 18183:                     // 'updating' '('\n    case 18186:                     // 'validate' '('\n    case 18187:                     // 'value' '('\n    case 18188:                     // 'variable' '('\n    case 18189:                     // 'version' '('\n    case 18192:                     // 'where' '('\n    case 18193:                     // 'while' '('\n    case 18196:                     // 'with' '('\n      parse_FunctionCall();\n      break;\n    case 144078:                    // 'ordered' '{'\n      parse_OrderedExpr();\n      break;\n    case 144134:                    // 'unordered' '{'\n      parse_UnorderedExpr();\n      break;\n    case 33:                        // '%'\n    case 79:                        // 'array'\n    case 121:                       // 'document-node'\n    case 125:                       // 'empty-sequence'\n    case 147:                       // 'function'\n    case 154:                       // 'if'\n    case 167:                       // 'item'\n    case 169:                       // 'json-item'\n    case 188:                       // 'namespace-node'\n    case 194:                       // 'node'\n    case 230:                       // 'schema-attribute'\n    case 231:                       // 'schema-element'\n    case 247:                       // 'structured-item'\n    case 248:                       // 'switch'\n    case 259:                       // 'typeswitch'\n    case 14854:                     // EQName^Token '#'\n    case 14919:                     // 'after' '#'\n    case 14921:                     // 'allowing' '#'\n    case 14922:                     // 'ancestor' '#'\n    case 14923:                     // 'ancestor-or-self' '#'\n    case 14924:                     // 'and' '#'\n    case 14926:                     // 'append' '#'\n    case 14928:                     // 'as' '#'\n    case 14929:                     // 'ascending' '#'\n    case 14930:                     // 'at' '#'\n    case 14931:                     // 'attribute' '#'\n    case 14932:                     // 'base-uri' '#'\n    case 14933:                     // 'before' '#'\n    case 14934:                     // 'boundary-space' '#'\n    case 14935:                     // 'break' '#'\n    case 14937:                     // 'case' '#'\n    case 14938:                     // 'cast' '#'\n    case 14939:                     // 'castable' '#'\n    case 14940:                     // 'catch' '#'\n    case 14942:                     // 'child' '#'\n    case 14943:                     // 'collation' '#'\n    case 14945:                     // 'comment' '#'\n    case 14946:                     // 'constraint' '#'\n    case 14947:                     // 'construction' '#'\n    case 14950:                     // 'context' '#'\n    case 14951:                     // 'continue' '#'\n    case 14952:                     // 'copy' '#'\n    case 14953:                     // 'copy-namespaces' '#'\n    case 14954:                     // 'count' '#'\n    case 14955:                     // 'decimal-format' '#'\n    case 14957:                     // 'declare' '#'\n    case 14958:                     // 'default' '#'\n    case 14959:                     // 'delete' '#'\n    case 14960:                     // 'descendant' '#'\n    case 14961:                     // 'descendant-or-self' '#'\n    case 14962:                     // 'descending' '#'\n    case 14967:                     // 'div' '#'\n    case 14968:                     // 'document' '#'\n    case 14970:                     // 'element' '#'\n    case 14971:                     // 'else' '#'\n    case 14972:                     // 'empty' '#'\n    case 14974:                     // 'encoding' '#'\n    case 14975:                     // 'end' '#'\n    case 14977:                     // 'eq' '#'\n    case 14978:                     // 'every' '#'\n    case 14980:                     // 'except' '#'\n    case 14981:                     // 'exit' '#'\n    case 14982:                     // 'external' '#'\n    case 14983:                     // 'false' '#'\n    case 14984:                     // 'first' '#'\n    case 14985:                     // 'following' '#'\n    case 14986:                     // 'following-sibling' '#'\n    case 14987:                     // 'for' '#'\n    case 14990:                     // 'from' '#'\n    case 14991:                     // 'ft-option' '#'\n    case 14996:                     // 'ge' '#'\n    case 14998:                     // 'group' '#'\n    case 15000:                     // 'gt' '#'\n    case 15001:                     // 'idiv' '#'\n    case 15003:                     // 'import' '#'\n    case 15004:                     // 'in' '#'\n    case 15005:                     // 'index' '#'\n    case 15009:                     // 'insert' '#'\n    case 15010:                     // 'instance' '#'\n    case 15011:                     // 'integrity' '#'\n    case 15012:                     // 'intersect' '#'\n    case 15013:                     // 'into' '#'\n    case 15014:                     // 'is' '#'\n    case 15016:                     // 'json' '#'\n    case 15018:                     // 'jsoniq' '#'\n    case 15021:                     // 'last' '#'\n    case 15022:                     // 'lax' '#'\n    case 15023:                     // 'le' '#'\n    case 15025:                     // 'let' '#'\n    case 15027:                     // 'loop' '#'\n    case 15029:                     // 'lt' '#'\n    case 15031:                     // 'mod' '#'\n    case 15032:                     // 'modify' '#'\n    case 15033:                     // 'module' '#'\n    case 15035:                     // 'namespace' '#'\n    case 15037:                     // 'ne' '#'\n    case 15043:                     // 'nodes' '#'\n    case 15045:                     // 'null' '#'\n    case 15046:                     // 'object' '#'\n    case 15050:                     // 'only' '#'\n    case 15051:                     // 'option' '#'\n    case 15052:                     // 'or' '#'\n    case 15053:                     // 'order' '#'\n    case 15054:                     // 'ordered' '#'\n    case 15055:                     // 'ordering' '#'\n    case 15058:                     // 'parent' '#'\n    case 15064:                     // 'preceding' '#'\n    case 15065:                     // 'preceding-sibling' '#'\n    case 15068:                     // 'processing-instruction' '#'\n    case 15070:                     // 'rename' '#'\n    case 15071:                     // 'replace' '#'\n    case 15072:                     // 'return' '#'\n    case 15073:                     // 'returning' '#'\n    case 15074:                     // 'revalidation' '#'\n    case 15076:                     // 'satisfies' '#'\n    case 15077:                     // 'schema' '#'\n    case 15080:                     // 'score' '#'\n    case 15081:                     // 'select' '#'\n    case 15082:                     // 'self' '#'\n    case 15087:                     // 'sliding' '#'\n    case 15088:                     // 'some' '#'\n    case 15089:                     // 'stable' '#'\n    case 15090:                     // 'start' '#'\n    case 15093:                     // 'strict' '#'\n    case 15097:                     // 'text' '#'\n    case 15101:                     // 'to' '#'\n    case 15102:                     // 'treat' '#'\n    case 15103:                     // 'true' '#'\n    case 15104:                     // 'try' '#'\n    case 15105:                     // 'tumbling' '#'\n    case 15106:                     // 'type' '#'\n    case 15108:                     // 'union' '#'\n    case 15110:                     // 'unordered' '#'\n    case 15111:                     // 'updating' '#'\n    case 15114:                     // 'validate' '#'\n    case 15115:                     // 'value' '#'\n    case 15116:                     // 'variable' '#'\n    case 15117:                     // 'version' '#'\n    case 15120:                     // 'where' '#'\n    case 15121:                     // 'while' '#'\n    case 15124:                     // 'with' '#'\n      parse_FunctionItemExpr();\n      break;\n    case -10:\n    case 27929:                     // '{' ';'\n      parse_BlockExpr();\n      break;\n    case -11:\n    case 10009:                     // '{' NCName^Token\n      parse_ObjectConstructor();\n      break;\n    case 69:                        // '['\n      parse_ArrayConstructor();\n      break;\n    case 283:                       // '{|'\n      parse_JSONSimpleObjectUnion();\n      break;\n    default:\n      parse_Constructor();\n    }\n    eventHandler.endNonterminal(\"PrimaryExpr\", e0);\n  }\n\n  function try_PrimaryExpr()\n  {\n    switch (l1)\n    {\n    case 187:                       // 'namespace'\n      lookahead2W(246);             // NCName^Token | S^WS | '#' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' |\n                                    // 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | '{'\n      break;\n    case 220:                       // 'processing-instruction'\n      lookahead2W(244);             // NCName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' |\n                                    // 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | '{'\n      break;\n    case 281:                       // '{'\n      lookahead2W(282);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // NCName^Token | S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' |\n                                    // '//' | ';' | '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|' | '}'\n      break;\n    case 83:                        // 'attribute'\n    case 122:                       // 'element'\n      lookahead2W(252);             // EQName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' | '{'\n      break;\n    case 97:                        // 'comment'\n    case 249:                       // 'text'\n      lookahead2W(97);              // S^WS | '#' | '(:' | '{'\n      break;\n    case 120:                       // 'document'\n    case 206:                       // 'ordered'\n    case 262:                       // 'unordered'\n      lookahead2W(148);             // S^WS | '#' | '(' | '(:' | '{'\n      break;\n    case 135:                       // 'false'\n    case 197:                       // 'null'\n    case 255:                       // 'true'\n      lookahead2W(236);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '.' |\n                                    // '/' | '//' | ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' |\n                                    // ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'by' | 'case' |\n                                    // 'cast' | 'castable' | 'collation' | 'contains' | 'count' | 'default' |\n                                    // 'descending' | 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' |\n                                    // 'ge' | 'group' | 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' |\n                                    // 'le' | 'let' | 'lt' | 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' |\n                                    // 'paragraphs' | 'return' | 'satisfies' | 'sentences' | 'stable' | 'start' |\n                                    // 'times' | 'to' | 'treat' | 'union' | 'where' | 'with' | 'words' | '|' | '||' |\n                                    // '|}' | '}'\n      break;\n    case 6:                         // EQName^Token\n    case 71:                        // 'after'\n    case 73:                        // 'allowing'\n    case 74:                        // 'ancestor'\n    case 75:                        // 'ancestor-or-self'\n    case 76:                        // 'and'\n    case 78:                        // 'append'\n    case 80:                        // 'as'\n    case 81:                        // 'ascending'\n    case 82:                        // 'at'\n    case 84:                        // 'base-uri'\n    case 85:                        // 'before'\n    case 86:                        // 'boundary-space'\n    case 87:                        // 'break'\n    case 89:                        // 'case'\n    case 90:                        // 'cast'\n    case 91:                        // 'castable'\n    case 92:                        // 'catch'\n    case 94:                        // 'child'\n    case 95:                        // 'collation'\n    case 98:                        // 'constraint'\n    case 99:                        // 'construction'\n    case 102:                       // 'context'\n    case 103:                       // 'continue'\n    case 104:                       // 'copy'\n    case 105:                       // 'copy-namespaces'\n    case 106:                       // 'count'\n    case 107:                       // 'decimal-format'\n    case 109:                       // 'declare'\n    case 110:                       // 'default'\n    case 111:                       // 'delete'\n    case 112:                       // 'descendant'\n    case 113:                       // 'descendant-or-self'\n    case 114:                       // 'descending'\n    case 119:                       // 'div'\n    case 123:                       // 'else'\n    case 124:                       // 'empty'\n    case 126:                       // 'encoding'\n    case 127:                       // 'end'\n    case 129:                       // 'eq'\n    case 130:                       // 'every'\n    case 132:                       // 'except'\n    case 133:                       // 'exit'\n    case 134:                       // 'external'\n    case 136:                       // 'first'\n    case 137:                       // 'following'\n    case 138:                       // 'following-sibling'\n    case 139:                       // 'for'\n    case 142:                       // 'from'\n    case 143:                       // 'ft-option'\n    case 148:                       // 'ge'\n    case 150:                       // 'group'\n    case 152:                       // 'gt'\n    case 153:                       // 'idiv'\n    case 155:                       // 'import'\n    case 156:                       // 'in'\n    case 157:                       // 'index'\n    case 161:                       // 'insert'\n    case 162:                       // 'instance'\n    case 163:                       // 'integrity'\n    case 164:                       // 'intersect'\n    case 165:                       // 'into'\n    case 166:                       // 'is'\n    case 168:                       // 'json'\n    case 170:                       // 'jsoniq'\n    case 173:                       // 'last'\n    case 174:                       // 'lax'\n    case 175:                       // 'le'\n    case 177:                       // 'let'\n    case 179:                       // 'loop'\n    case 181:                       // 'lt'\n    case 183:                       // 'mod'\n    case 184:                       // 'modify'\n    case 185:                       // 'module'\n    case 189:                       // 'ne'\n    case 195:                       // 'nodes'\n    case 198:                       // 'object'\n    case 202:                       // 'only'\n    case 203:                       // 'option'\n    case 204:                       // 'or'\n    case 205:                       // 'order'\n    case 207:                       // 'ordering'\n    case 210:                       // 'parent'\n    case 216:                       // 'preceding'\n    case 217:                       // 'preceding-sibling'\n    case 222:                       // 'rename'\n    case 223:                       // 'replace'\n    case 224:                       // 'return'\n    case 225:                       // 'returning'\n    case 226:                       // 'revalidation'\n    case 228:                       // 'satisfies'\n    case 229:                       // 'schema'\n    case 232:                       // 'score'\n    case 233:                       // 'select'\n    case 234:                       // 'self'\n    case 239:                       // 'sliding'\n    case 240:                       // 'some'\n    case 241:                       // 'stable'\n    case 242:                       // 'start'\n    case 245:                       // 'strict'\n    case 253:                       // 'to'\n    case 254:                       // 'treat'\n    case 256:                       // 'try'\n    case 257:                       // 'tumbling'\n    case 258:                       // 'type'\n    case 260:                       // 'union'\n    case 263:                       // 'updating'\n    case 266:                       // 'validate'\n    case 267:                       // 'value'\n    case 268:                       // 'variable'\n    case 269:                       // 'version'\n    case 272:                       // 'where'\n    case 273:                       // 'while'\n    case 276:                       // 'with'\n      lookahead2W(95);              // S^WS | '#' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 3353                  // '{' EQName^Token\n     || lk == 4377                  // '{' IntegerLiteral\n     || lk == 4889                  // '{' DecimalLiteral\n     || lk == 5401                  // '{' DoubleLiteral\n     || lk == 5913                  // '{' StringLiteral\n     || lk == 16153                 // '{' '$'\n     || lk == 16665                 // '{' '$$'\n     || lk == 17177                 // '{' '%'\n     || lk == 18055                 // 'false' '('\n     || lk == 18117                 // 'null' '('\n     || lk == 18175                 // 'true' '('\n     || lk == 18201                 // '{' '('\n     || lk == 18713                 // '{' '(#'\n     || lk == 21273                 // '{' '+'\n     || lk == 22297                 // '{' '-'\n     || lk == 24345                 // '{' '/'\n     || lk == 24857                 // '{' '//'\n     || lk == 28441                 // '{' '<'\n     || lk == 28953                 // '{' '<!--'\n     || lk == 31001                 // '{' '<?'\n     || lk == 35609                 // '{' '['\n     || lk == 36633                 // '{' 'after'\n     || lk == 37657                 // '{' 'allowing'\n     || lk == 38169                 // '{' 'ancestor'\n     || lk == 38681                 // '{' 'ancestor-or-self'\n     || lk == 39193                 // '{' 'and'\n     || lk == 40217                 // '{' 'append'\n     || lk == 40729                 // '{' 'array'\n     || lk == 41241                 // '{' 'as'\n     || lk == 41753                 // '{' 'ascending'\n     || lk == 42265                 // '{' 'at'\n     || lk == 42777                 // '{' 'attribute'\n     || lk == 43289                 // '{' 'base-uri'\n     || lk == 43801                 // '{' 'before'\n     || lk == 44313                 // '{' 'boundary-space'\n     || lk == 44825                 // '{' 'break'\n     || lk == 45849                 // '{' 'case'\n     || lk == 46361                 // '{' 'cast'\n     || lk == 46873                 // '{' 'castable'\n     || lk == 47385                 // '{' 'catch'\n     || lk == 48409                 // '{' 'child'\n     || lk == 48921                 // '{' 'collation'\n     || lk == 49945                 // '{' 'comment'\n     || lk == 50457                 // '{' 'constraint'\n     || lk == 50969                 // '{' 'construction'\n     || lk == 52505                 // '{' 'context'\n     || lk == 53017                 // '{' 'continue'\n     || lk == 53529                 // '{' 'copy'\n     || lk == 54041                 // '{' 'copy-namespaces'\n     || lk == 54553                 // '{' 'count'\n     || lk == 55065                 // '{' 'decimal-format'\n     || lk == 56089                 // '{' 'declare'\n     || lk == 56601                 // '{' 'default'\n     || lk == 57113                 // '{' 'delete'\n     || lk == 57625                 // '{' 'descendant'\n     || lk == 58137                 // '{' 'descendant-or-self'\n     || lk == 58649                 // '{' 'descending'\n     || lk == 61209                 // '{' 'div'\n     || lk == 61721                 // '{' 'document'\n     || lk == 62233                 // '{' 'document-node'\n     || lk == 62745                 // '{' 'element'\n     || lk == 63257                 // '{' 'else'\n     || lk == 63769                 // '{' 'empty'\n     || lk == 64281                 // '{' 'empty-sequence'\n     || lk == 64793                 // '{' 'encoding'\n     || lk == 65305                 // '{' 'end'\n     || lk == 66329                 // '{' 'eq'\n     || lk == 66841                 // '{' 'every'\n     || lk == 67865                 // '{' 'except'\n     || lk == 68377                 // '{' 'exit'\n     || lk == 68889                 // '{' 'external'\n     || lk == 69401                 // '{' 'false'\n     || lk == 69913                 // '{' 'first'\n     || lk == 70425                 // '{' 'following'\n     || lk == 70937                 // '{' 'following-sibling'\n     || lk == 71449                 // '{' 'for'\n     || lk == 72985                 // '{' 'from'\n     || lk == 73497                 // '{' 'ft-option'\n     || lk == 75545                 // '{' 'function'\n     || lk == 76057                 // '{' 'ge'\n     || lk == 77081                 // '{' 'group'\n     || lk == 78105                 // '{' 'gt'\n     || lk == 78617                 // '{' 'idiv'\n     || lk == 79129                 // '{' 'if'\n     || lk == 79641                 // '{' 'import'\n     || lk == 80153                 // '{' 'in'\n     || lk == 80665                 // '{' 'index'\n     || lk == 82713                 // '{' 'insert'\n     || lk == 83225                 // '{' 'instance'\n     || lk == 83737                 // '{' 'integrity'\n     || lk == 84249                 // '{' 'intersect'\n     || lk == 84761                 // '{' 'into'\n     || lk == 85273                 // '{' 'is'\n     || lk == 85785                 // '{' 'item'\n     || lk == 86297                 // '{' 'json'\n     || lk == 86809                 // '{' 'json-item'\n     || lk == 87321                 // '{' 'jsoniq'\n     || lk == 88857                 // '{' 'last'\n     || lk == 89369                 // '{' 'lax'\n     || lk == 89881                 // '{' 'le'\n     || lk == 90905                 // '{' 'let'\n     || lk == 91929                 // '{' 'loop'\n     || lk == 92953                 // '{' 'lt'\n     || lk == 93977                 // '{' 'mod'\n     || lk == 94489                 // '{' 'modify'\n     || lk == 95001                 // '{' 'module'\n     || lk == 96025                 // '{' 'namespace'\n     || lk == 96537                 // '{' 'namespace-node'\n     || lk == 97049                 // '{' 'ne'\n     || lk == 99609                 // '{' 'node'\n     || lk == 100121                // '{' 'nodes'\n     || lk == 100633                // '{' 'not'\n     || lk == 101145                // '{' 'null'\n     || lk == 101657                // '{' 'object'\n     || lk == 103705                // '{' 'only'\n     || lk == 104217                // '{' 'option'\n     || lk == 104729                // '{' 'or'\n     || lk == 105241                // '{' 'order'\n     || lk == 105753                // '{' 'ordered'\n     || lk == 106265                // '{' 'ordering'\n     || lk == 107801                // '{' 'parent'\n     || lk == 110873                // '{' 'preceding'\n     || lk == 111385                // '{' 'preceding-sibling'\n     || lk == 112921                // '{' 'processing-instruction'\n     || lk == 113945                // '{' 'rename'\n     || lk == 114457                // '{' 'replace'\n     || lk == 114969                // '{' 'return'\n     || lk == 115481                // '{' 'returning'\n     || lk == 115993                // '{' 'revalidation'\n     || lk == 117017                // '{' 'satisfies'\n     || lk == 117529                // '{' 'schema'\n     || lk == 118041                // '{' 'schema-attribute'\n     || lk == 118553                // '{' 'schema-element'\n     || lk == 119065                // '{' 'score'\n     || lk == 119577                // '{' 'select'\n     || lk == 120089                // '{' 'self'\n     || lk == 122649                // '{' 'sliding'\n     || lk == 123161                // '{' 'some'\n     || lk == 123673                // '{' 'stable'\n     || lk == 124185                // '{' 'start'\n     || lk == 125721                // '{' 'strict'\n     || lk == 126745                // '{' 'structured-item'\n     || lk == 127257                // '{' 'switch'\n     || lk == 127769                // '{' 'text'\n     || lk == 129817                // '{' 'to'\n     || lk == 130329                // '{' 'treat'\n     || lk == 130841                // '{' 'true'\n     || lk == 131353                // '{' 'try'\n     || lk == 131865                // '{' 'tumbling'\n     || lk == 132377                // '{' 'type'\n     || lk == 132889                // '{' 'typeswitch'\n     || lk == 133401                // '{' 'union'\n     || lk == 134425                // '{' 'unordered'\n     || lk == 134937                // '{' 'updating'\n     || lk == 136473                // '{' 'validate'\n     || lk == 136985                // '{' 'value'\n     || lk == 137497                // '{' 'variable'\n     || lk == 138009                // '{' 'version'\n     || lk == 139545                // '{' 'where'\n     || lk == 140057                // '{' 'while'\n     || lk == 141593                // '{' 'with'\n     || lk == 144153                // '{' '{'\n     || lk == 145177                // '{' '{|'\n     || lk == 147225)               // '{' '}'\n    {\n      lk = memoized(20, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_Literal();\n          memoize(20, e0A, -1);\n          lk = -14;\n        }\n        catch (p1A)\n        {\n          try\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            try_FunctionCall();\n            memoize(20, e0A, -5);\n            lk = -14;\n          }\n          catch (p5A)\n          {\n            try\n            {\n              b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n              b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n              b2 = b2A; e2 = e2A; end = e2A; }}\n              try_BlockExpr();\n              memoize(20, e0A, -10);\n              lk = -14;\n            }\n            catch (p10A)\n            {\n              lk = -11;\n              b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n              b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n              b2 = b2A; e2 = e2A; end = e2A; }}\n              memoize(20, e0A, -11);\n            }\n          }\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n    case 8:                         // IntegerLiteral\n    case 9:                         // DecimalLiteral\n    case 10:                        // DoubleLiteral\n    case 11:                        // StringLiteral\n    case 12935:                     // 'false' EOF\n    case 12997:                     // 'null' EOF\n    case 13055:                     // 'true' EOF\n    case 13447:                     // 'false' '!'\n    case 13509:                     // 'null' '!'\n    case 13567:                     // 'true' '!'\n    case 13959:                     // 'false' '!='\n    case 14021:                     // 'null' '!='\n    case 14079:                     // 'true' '!='\n    case 19591:                     // 'false' ')'\n    case 19653:                     // 'null' ')'\n    case 19711:                     // 'true' ')'\n    case 20103:                     // 'false' '*'\n    case 20165:                     // 'null' '*'\n    case 20223:                     // 'true' '*'\n    case 21127:                     // 'false' '+'\n    case 21189:                     // 'null' '+'\n    case 21247:                     // 'true' '+'\n    case 21639:                     // 'false' ','\n    case 21701:                     // 'null' ','\n    case 21759:                     // 'true' ','\n    case 22151:                     // 'false' '-'\n    case 22213:                     // 'null' '-'\n    case 22271:                     // 'true' '-'\n    case 23175:                     // 'false' '.'\n    case 23237:                     // 'null' '.'\n    case 23295:                     // 'true' '.'\n    case 24199:                     // 'false' '/'\n    case 24261:                     // 'null' '/'\n    case 24319:                     // 'true' '/'\n    case 24711:                     // 'false' '//'\n    case 24773:                     // 'null' '//'\n    case 24831:                     // 'true' '//'\n    case 25735:                     // 'false' ':'\n    case 25797:                     // 'null' ':'\n    case 25855:                     // 'true' ':'\n    case 27783:                     // 'false' ';'\n    case 27845:                     // 'null' ';'\n    case 27903:                     // 'true' ';'\n    case 28295:                     // 'false' '<'\n    case 28357:                     // 'null' '<'\n    case 28415:                     // 'true' '<'\n    case 29831:                     // 'false' '<<'\n    case 29893:                     // 'null' '<<'\n    case 29951:                     // 'true' '<<'\n    case 30343:                     // 'false' '<='\n    case 30405:                     // 'null' '<='\n    case 30463:                     // 'true' '<='\n    case 31367:                     // 'false' '='\n    case 31429:                     // 'null' '='\n    case 31487:                     // 'true' '='\n    case 31879:                     // 'false' '>'\n    case 31941:                     // 'null' '>'\n    case 31999:                     // 'true' '>'\n    case 32391:                     // 'false' '>='\n    case 32453:                     // 'null' '>='\n    case 32511:                     // 'true' '>='\n    case 32903:                     // 'false' '>>'\n    case 32965:                     // 'null' '>>'\n    case 33023:                     // 'true' '>>'\n    case 35463:                     // 'false' '['\n    case 35525:                     // 'null' '['\n    case 35583:                     // 'true' '['\n    case 35975:                     // 'false' ']'\n    case 36037:                     // 'null' ']'\n    case 36095:                     // 'true' ']'\n    case 36487:                     // 'false' 'after'\n    case 36549:                     // 'null' 'after'\n    case 36607:                     // 'true' 'after'\n    case 39047:                     // 'false' 'and'\n    case 39109:                     // 'null' 'and'\n    case 39167:                     // 'true' 'and'\n    case 41095:                     // 'false' 'as'\n    case 41157:                     // 'null' 'as'\n    case 41215:                     // 'true' 'as'\n    case 41607:                     // 'false' 'ascending'\n    case 41669:                     // 'null' 'ascending'\n    case 41727:                     // 'true' 'ascending'\n    case 42119:                     // 'false' 'at'\n    case 42181:                     // 'null' 'at'\n    case 42239:                     // 'true' 'at'\n    case 43655:                     // 'false' 'before'\n    case 43717:                     // 'null' 'before'\n    case 43775:                     // 'true' 'before'\n    case 45191:                     // 'false' 'by'\n    case 45253:                     // 'null' 'by'\n    case 45311:                     // 'true' 'by'\n    case 45703:                     // 'false' 'case'\n    case 45765:                     // 'null' 'case'\n    case 45823:                     // 'true' 'case'\n    case 46215:                     // 'false' 'cast'\n    case 46277:                     // 'null' 'cast'\n    case 46335:                     // 'true' 'cast'\n    case 46727:                     // 'false' 'castable'\n    case 46789:                     // 'null' 'castable'\n    case 46847:                     // 'true' 'castable'\n    case 48775:                     // 'false' 'collation'\n    case 48837:                     // 'null' 'collation'\n    case 48895:                     // 'true' 'collation'\n    case 51335:                     // 'false' 'contains'\n    case 51397:                     // 'null' 'contains'\n    case 51455:                     // 'true' 'contains'\n    case 54407:                     // 'false' 'count'\n    case 54469:                     // 'null' 'count'\n    case 54527:                     // 'true' 'count'\n    case 56455:                     // 'false' 'default'\n    case 56517:                     // 'null' 'default'\n    case 56575:                     // 'true' 'default'\n    case 58503:                     // 'false' 'descending'\n    case 58565:                     // 'null' 'descending'\n    case 58623:                     // 'true' 'descending'\n    case 61063:                     // 'false' 'div'\n    case 61125:                     // 'null' 'div'\n    case 61183:                     // 'true' 'div'\n    case 63111:                     // 'false' 'else'\n    case 63173:                     // 'null' 'else'\n    case 63231:                     // 'true' 'else'\n    case 63623:                     // 'false' 'empty'\n    case 63685:                     // 'null' 'empty'\n    case 63743:                     // 'true' 'empty'\n    case 65159:                     // 'false' 'end'\n    case 65221:                     // 'null' 'end'\n    case 65279:                     // 'true' 'end'\n    case 66183:                     // 'false' 'eq'\n    case 66245:                     // 'null' 'eq'\n    case 66303:                     // 'true' 'eq'\n    case 67719:                     // 'false' 'except'\n    case 67781:                     // 'null' 'except'\n    case 67839:                     // 'true' 'except'\n    case 71303:                     // 'false' 'for'\n    case 71365:                     // 'null' 'for'\n    case 71423:                     // 'true' 'for'\n    case 75911:                     // 'false' 'ge'\n    case 75973:                     // 'null' 'ge'\n    case 76031:                     // 'true' 'ge'\n    case 76935:                     // 'false' 'group'\n    case 76997:                     // 'null' 'group'\n    case 77055:                     // 'true' 'group'\n    case 77959:                     // 'false' 'gt'\n    case 78021:                     // 'null' 'gt'\n    case 78079:                     // 'true' 'gt'\n    case 78471:                     // 'false' 'idiv'\n    case 78533:                     // 'null' 'idiv'\n    case 78591:                     // 'true' 'idiv'\n    case 83079:                     // 'false' 'instance'\n    case 83141:                     // 'null' 'instance'\n    case 83199:                     // 'true' 'instance'\n    case 84103:                     // 'false' 'intersect'\n    case 84165:                     // 'null' 'intersect'\n    case 84223:                     // 'true' 'intersect'\n    case 84615:                     // 'false' 'into'\n    case 84677:                     // 'null' 'into'\n    case 84735:                     // 'true' 'into'\n    case 85127:                     // 'false' 'is'\n    case 85189:                     // 'null' 'is'\n    case 85247:                     // 'true' 'is'\n    case 89735:                     // 'false' 'le'\n    case 89797:                     // 'null' 'le'\n    case 89855:                     // 'true' 'le'\n    case 90759:                     // 'false' 'let'\n    case 90821:                     // 'null' 'let'\n    case 90879:                     // 'true' 'let'\n    case 92807:                     // 'false' 'lt'\n    case 92869:                     // 'null' 'lt'\n    case 92927:                     // 'true' 'lt'\n    case 93831:                     // 'false' 'mod'\n    case 93893:                     // 'null' 'mod'\n    case 93951:                     // 'true' 'mod'\n    case 94343:                     // 'false' 'modify'\n    case 94405:                     // 'null' 'modify'\n    case 94463:                     // 'true' 'modify'\n    case 96903:                     // 'false' 'ne'\n    case 96965:                     // 'null' 'ne'\n    case 97023:                     // 'true' 'ne'\n    case 103559:                    // 'false' 'only'\n    case 103621:                    // 'null' 'only'\n    case 103679:                    // 'true' 'only'\n    case 104583:                    // 'false' 'or'\n    case 104645:                    // 'null' 'or'\n    case 104703:                    // 'true' 'or'\n    case 105095:                    // 'false' 'order'\n    case 105157:                    // 'null' 'order'\n    case 105215:                    // 'true' 'order'\n    case 107143:                    // 'false' 'paragraphs'\n    case 107205:                    // 'null' 'paragraphs'\n    case 107263:                    // 'true' 'paragraphs'\n    case 114823:                    // 'false' 'return'\n    case 114885:                    // 'null' 'return'\n    case 114943:                    // 'true' 'return'\n    case 116871:                    // 'false' 'satisfies'\n    case 116933:                    // 'null' 'satisfies'\n    case 116991:                    // 'true' 'satisfies'\n    case 121479:                    // 'false' 'sentences'\n    case 121541:                    // 'null' 'sentences'\n    case 121599:                    // 'true' 'sentences'\n    case 123527:                    // 'false' 'stable'\n    case 123589:                    // 'null' 'stable'\n    case 123647:                    // 'true' 'stable'\n    case 124039:                    // 'false' 'start'\n    case 124101:                    // 'null' 'start'\n    case 124159:                    // 'true' 'start'\n    case 129159:                    // 'false' 'times'\n    case 129221:                    // 'null' 'times'\n    case 129279:                    // 'true' 'times'\n    case 129671:                    // 'false' 'to'\n    case 129733:                    // 'null' 'to'\n    case 129791:                    // 'true' 'to'\n    case 130183:                    // 'false' 'treat'\n    case 130245:                    // 'null' 'treat'\n    case 130303:                    // 'true' 'treat'\n    case 133255:                    // 'false' 'union'\n    case 133317:                    // 'null' 'union'\n    case 133375:                    // 'true' 'union'\n    case 139399:                    // 'false' 'where'\n    case 139461:                    // 'null' 'where'\n    case 139519:                    // 'true' 'where'\n    case 141447:                    // 'false' 'with'\n    case 141509:                    // 'null' 'with'\n    case 141567:                    // 'true' 'with'\n    case 142983:                    // 'false' 'words'\n    case 143045:                    // 'null' 'words'\n    case 143103:                    // 'true' 'words'\n    case 145543:                    // 'false' '|'\n    case 145605:                    // 'null' '|'\n    case 145663:                    // 'true' '|'\n    case 146055:                    // 'false' '||'\n    case 146117:                    // 'null' '||'\n    case 146175:                    // 'true' '||'\n    case 146567:                    // 'false' '|}'\n    case 146629:                    // 'null' '|}'\n    case 146687:                    // 'true' '|}'\n    case 147079:                    // 'false' '}'\n    case 147141:                    // 'null' '}'\n    case 147199:                    // 'true' '}'\n      try_Literal();\n      break;\n    case 31:                        // '$'\n      try_VarRef();\n      break;\n    case 35:                        // '('\n      try_ParenthesizedExpr();\n      break;\n    case 32:                        // '$$'\n      try_ContextItemExpr();\n      break;\n    case -5:\n    case 17926:                     // EQName^Token '('\n    case 17991:                     // 'after' '('\n    case 17993:                     // 'allowing' '('\n    case 17994:                     // 'ancestor' '('\n    case 17995:                     // 'ancestor-or-self' '('\n    case 17996:                     // 'and' '('\n    case 17998:                     // 'append' '('\n    case 18000:                     // 'as' '('\n    case 18001:                     // 'ascending' '('\n    case 18002:                     // 'at' '('\n    case 18004:                     // 'base-uri' '('\n    case 18005:                     // 'before' '('\n    case 18006:                     // 'boundary-space' '('\n    case 18007:                     // 'break' '('\n    case 18009:                     // 'case' '('\n    case 18010:                     // 'cast' '('\n    case 18011:                     // 'castable' '('\n    case 18012:                     // 'catch' '('\n    case 18014:                     // 'child' '('\n    case 18015:                     // 'collation' '('\n    case 18018:                     // 'constraint' '('\n    case 18019:                     // 'construction' '('\n    case 18022:                     // 'context' '('\n    case 18023:                     // 'continue' '('\n    case 18024:                     // 'copy' '('\n    case 18025:                     // 'copy-namespaces' '('\n    case 18026:                     // 'count' '('\n    case 18027:                     // 'decimal-format' '('\n    case 18029:                     // 'declare' '('\n    case 18030:                     // 'default' '('\n    case 18031:                     // 'delete' '('\n    case 18032:                     // 'descendant' '('\n    case 18033:                     // 'descendant-or-self' '('\n    case 18034:                     // 'descending' '('\n    case 18039:                     // 'div' '('\n    case 18040:                     // 'document' '('\n    case 18043:                     // 'else' '('\n    case 18044:                     // 'empty' '('\n    case 18046:                     // 'encoding' '('\n    case 18047:                     // 'end' '('\n    case 18049:                     // 'eq' '('\n    case 18050:                     // 'every' '('\n    case 18052:                     // 'except' '('\n    case 18053:                     // 'exit' '('\n    case 18054:                     // 'external' '('\n    case 18056:                     // 'first' '('\n    case 18057:                     // 'following' '('\n    case 18058:                     // 'following-sibling' '('\n    case 18059:                     // 'for' '('\n    case 18062:                     // 'from' '('\n    case 18063:                     // 'ft-option' '('\n    case 18068:                     // 'ge' '('\n    case 18070:                     // 'group' '('\n    case 18072:                     // 'gt' '('\n    case 18073:                     // 'idiv' '('\n    case 18075:                     // 'import' '('\n    case 18076:                     // 'in' '('\n    case 18077:                     // 'index' '('\n    case 18081:                     // 'insert' '('\n    case 18082:                     // 'instance' '('\n    case 18083:                     // 'integrity' '('\n    case 18084:                     // 'intersect' '('\n    case 18085:                     // 'into' '('\n    case 18086:                     // 'is' '('\n    case 18088:                     // 'json' '('\n    case 18090:                     // 'jsoniq' '('\n    case 18093:                     // 'last' '('\n    case 18094:                     // 'lax' '('\n    case 18095:                     // 'le' '('\n    case 18097:                     // 'let' '('\n    case 18099:                     // 'loop' '('\n    case 18101:                     // 'lt' '('\n    case 18103:                     // 'mod' '('\n    case 18104:                     // 'modify' '('\n    case 18105:                     // 'module' '('\n    case 18107:                     // 'namespace' '('\n    case 18109:                     // 'ne' '('\n    case 18115:                     // 'nodes' '('\n    case 18118:                     // 'object' '('\n    case 18122:                     // 'only' '('\n    case 18123:                     // 'option' '('\n    case 18124:                     // 'or' '('\n    case 18125:                     // 'order' '('\n    case 18126:                     // 'ordered' '('\n    case 18127:                     // 'ordering' '('\n    case 18130:                     // 'parent' '('\n    case 18136:                     // 'preceding' '('\n    case 18137:                     // 'preceding-sibling' '('\n    case 18142:                     // 'rename' '('\n    case 18143:                     // 'replace' '('\n    case 18144:                     // 'return' '('\n    case 18145:                     // 'returning' '('\n    case 18146:                     // 'revalidation' '('\n    case 18148:                     // 'satisfies' '('\n    case 18149:                     // 'schema' '('\n    case 18152:                     // 'score' '('\n    case 18153:                     // 'select' '('\n    case 18154:                     // 'self' '('\n    case 18159:                     // 'sliding' '('\n    case 18160:                     // 'some' '('\n    case 18161:                     // 'stable' '('\n    case 18162:                     // 'start' '('\n    case 18165:                     // 'strict' '('\n    case 18173:                     // 'to' '('\n    case 18174:                     // 'treat' '('\n    case 18176:                     // 'try' '('\n    case 18177:                     // 'tumbling' '('\n    case 18178:                     // 'type' '('\n    case 18180:                     // 'union' '('\n    case 18182:                     // 'unordered' '('\n    case 18183:                     // 'updating' '('\n    case 18186:                     // 'validate' '('\n    case 18187:                     // 'value' '('\n    case 18188:                     // 'variable' '('\n    case 18189:                     // 'version' '('\n    case 18192:                     // 'where' '('\n    case 18193:                     // 'while' '('\n    case 18196:                     // 'with' '('\n      try_FunctionCall();\n      break;\n    case 144078:                    // 'ordered' '{'\n      try_OrderedExpr();\n      break;\n    case 144134:                    // 'unordered' '{'\n      try_UnorderedExpr();\n      break;\n    case 33:                        // '%'\n    case 79:                        // 'array'\n    case 121:                       // 'document-node'\n    case 125:                       // 'empty-sequence'\n    case 147:                       // 'function'\n    case 154:                       // 'if'\n    case 167:                       // 'item'\n    case 169:                       // 'json-item'\n    case 188:                       // 'namespace-node'\n    case 194:                       // 'node'\n    case 230:                       // 'schema-attribute'\n    case 231:                       // 'schema-element'\n    case 247:                       // 'structured-item'\n    case 248:                       // 'switch'\n    case 259:                       // 'typeswitch'\n    case 14854:                     // EQName^Token '#'\n    case 14919:                     // 'after' '#'\n    case 14921:                     // 'allowing' '#'\n    case 14922:                     // 'ancestor' '#'\n    case 14923:                     // 'ancestor-or-self' '#'\n    case 14924:                     // 'and' '#'\n    case 14926:                     // 'append' '#'\n    case 14928:                     // 'as' '#'\n    case 14929:                     // 'ascending' '#'\n    case 14930:                     // 'at' '#'\n    case 14931:                     // 'attribute' '#'\n    case 14932:                     // 'base-uri' '#'\n    case 14933:                     // 'before' '#'\n    case 14934:                     // 'boundary-space' '#'\n    case 14935:                     // 'break' '#'\n    case 14937:                     // 'case' '#'\n    case 14938:                     // 'cast' '#'\n    case 14939:                     // 'castable' '#'\n    case 14940:                     // 'catch' '#'\n    case 14942:                     // 'child' '#'\n    case 14943:                     // 'collation' '#'\n    case 14945:                     // 'comment' '#'\n    case 14946:                     // 'constraint' '#'\n    case 14947:                     // 'construction' '#'\n    case 14950:                     // 'context' '#'\n    case 14951:                     // 'continue' '#'\n    case 14952:                     // 'copy' '#'\n    case 14953:                     // 'copy-namespaces' '#'\n    case 14954:                     // 'count' '#'\n    case 14955:                     // 'decimal-format' '#'\n    case 14957:                     // 'declare' '#'\n    case 14958:                     // 'default' '#'\n    case 14959:                     // 'delete' '#'\n    case 14960:                     // 'descendant' '#'\n    case 14961:                     // 'descendant-or-self' '#'\n    case 14962:                     // 'descending' '#'\n    case 14967:                     // 'div' '#'\n    case 14968:                     // 'document' '#'\n    case 14970:                     // 'element' '#'\n    case 14971:                     // 'else' '#'\n    case 14972:                     // 'empty' '#'\n    case 14974:                     // 'encoding' '#'\n    case 14975:                     // 'end' '#'\n    case 14977:                     // 'eq' '#'\n    case 14978:                     // 'every' '#'\n    case 14980:                     // 'except' '#'\n    case 14981:                     // 'exit' '#'\n    case 14982:                     // 'external' '#'\n    case 14983:                     // 'false' '#'\n    case 14984:                     // 'first' '#'\n    case 14985:                     // 'following' '#'\n    case 14986:                     // 'following-sibling' '#'\n    case 14987:                     // 'for' '#'\n    case 14990:                     // 'from' '#'\n    case 14991:                     // 'ft-option' '#'\n    case 14996:                     // 'ge' '#'\n    case 14998:                     // 'group' '#'\n    case 15000:                     // 'gt' '#'\n    case 15001:                     // 'idiv' '#'\n    case 15003:                     // 'import' '#'\n    case 15004:                     // 'in' '#'\n    case 15005:                     // 'index' '#'\n    case 15009:                     // 'insert' '#'\n    case 15010:                     // 'instance' '#'\n    case 15011:                     // 'integrity' '#'\n    case 15012:                     // 'intersect' '#'\n    case 15013:                     // 'into' '#'\n    case 15014:                     // 'is' '#'\n    case 15016:                     // 'json' '#'\n    case 15018:                     // 'jsoniq' '#'\n    case 15021:                     // 'last' '#'\n    case 15022:                     // 'lax' '#'\n    case 15023:                     // 'le' '#'\n    case 15025:                     // 'let' '#'\n    case 15027:                     // 'loop' '#'\n    case 15029:                     // 'lt' '#'\n    case 15031:                     // 'mod' '#'\n    case 15032:                     // 'modify' '#'\n    case 15033:                     // 'module' '#'\n    case 15035:                     // 'namespace' '#'\n    case 15037:                     // 'ne' '#'\n    case 15043:                     // 'nodes' '#'\n    case 15045:                     // 'null' '#'\n    case 15046:                     // 'object' '#'\n    case 15050:                     // 'only' '#'\n    case 15051:                     // 'option' '#'\n    case 15052:                     // 'or' '#'\n    case 15053:                     // 'order' '#'\n    case 15054:                     // 'ordered' '#'\n    case 15055:                     // 'ordering' '#'\n    case 15058:                     // 'parent' '#'\n    case 15064:                     // 'preceding' '#'\n    case 15065:                     // 'preceding-sibling' '#'\n    case 15068:                     // 'processing-instruction' '#'\n    case 15070:                     // 'rename' '#'\n    case 15071:                     // 'replace' '#'\n    case 15072:                     // 'return' '#'\n    case 15073:                     // 'returning' '#'\n    case 15074:                     // 'revalidation' '#'\n    case 15076:                     // 'satisfies' '#'\n    case 15077:                     // 'schema' '#'\n    case 15080:                     // 'score' '#'\n    case 15081:                     // 'select' '#'\n    case 15082:                     // 'self' '#'\n    case 15087:                     // 'sliding' '#'\n    case 15088:                     // 'some' '#'\n    case 15089:                     // 'stable' '#'\n    case 15090:                     // 'start' '#'\n    case 15093:                     // 'strict' '#'\n    case 15097:                     // 'text' '#'\n    case 15101:                     // 'to' '#'\n    case 15102:                     // 'treat' '#'\n    case 15103:                     // 'true' '#'\n    case 15104:                     // 'try' '#'\n    case 15105:                     // 'tumbling' '#'\n    case 15106:                     // 'type' '#'\n    case 15108:                     // 'union' '#'\n    case 15110:                     // 'unordered' '#'\n    case 15111:                     // 'updating' '#'\n    case 15114:                     // 'validate' '#'\n    case 15115:                     // 'value' '#'\n    case 15116:                     // 'variable' '#'\n    case 15117:                     // 'version' '#'\n    case 15120:                     // 'where' '#'\n    case 15121:                     // 'while' '#'\n    case 15124:                     // 'with' '#'\n      try_FunctionItemExpr();\n      break;\n    case -10:\n    case 27929:                     // '{' ';'\n      try_BlockExpr();\n      break;\n    case -11:\n    case 10009:                     // '{' NCName^Token\n      try_ObjectConstructor();\n      break;\n    case 69:                        // '['\n      try_ArrayConstructor();\n      break;\n    case 283:                       // '{|'\n      try_JSONSimpleObjectUnion();\n      break;\n    case -14:\n      break;\n    default:\n      try_Constructor();\n    }\n  }\n\n  function parse_JSONSimpleObjectUnion()\n  {\n    eventHandler.startNonterminal(\"JSONSimpleObjectUnion\", e0);\n    shift(283);                     // '{|'\n    lookahead1W(273);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|' | '|}'\n    if (l1 != 286)                  // '|}'\n    {\n      whitespace();\n      parse_Expr();\n    }\n    shift(286);                     // '|}'\n    eventHandler.endNonterminal(\"JSONSimpleObjectUnion\", e0);\n  }\n\n  function try_JSONSimpleObjectUnion()\n  {\n    shiftT(283);                    // '{|'\n    lookahead1W(273);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|' | '|}'\n    if (l1 != 286)                  // '|}'\n    {\n      try_Expr();\n    }\n    shiftT(286);                    // '|}'\n  }\n\n  function parse_ObjectConstructor()\n  {\n    eventHandler.startNonterminal(\"ObjectConstructor\", e0);\n    shift(281);                     // '{'\n    lookahead1W(276);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // NCName^Token | S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' |\n                                    // '//' | '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|' | '}'\n    if (l1 != 287)                  // '}'\n    {\n      whitespace();\n      parse_PairConstructorList();\n    }\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"ObjectConstructor\", e0);\n  }\n\n  function try_ObjectConstructor()\n  {\n    shiftT(281);                    // '{'\n    lookahead1W(276);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // NCName^Token | S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' |\n                                    // '//' | '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|' | '}'\n    if (l1 != 287)                  // '}'\n    {\n      try_PairConstructorList();\n    }\n    shiftT(287);                    // '}'\n  }\n\n  function parse_PairConstructorList()\n  {\n    eventHandler.startNonterminal(\"PairConstructorList\", e0);\n    parse_PairConstructor();\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shift(42);                    // ','\n      lookahead1W(267);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // NCName^Token | S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' |\n                                    // '//' | '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      whitespace();\n      parse_PairConstructor();\n    }\n    eventHandler.endNonterminal(\"PairConstructorList\", e0);\n  }\n\n  function try_PairConstructorList()\n  {\n    try_PairConstructor();\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shiftT(42);                   // ','\n      lookahead1W(267);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // NCName^Token | S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' |\n                                    // '//' | '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      try_PairConstructor();\n    }\n  }\n\n  function parse_PairConstructor()\n  {\n    eventHandler.startNonterminal(\"PairConstructor\", e0);\n    switch (l1)\n    {\n    case 78:                        // 'append'\n      lookahead2W(278);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '#' | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' |\n                                    // ':' | '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      break;\n    case 139:                       // 'for'\n      lookahead2W(187);             // S^WS | '#' | '$' | '(' | '(:' | ':' | 'sliding' | 'tumbling'\n      break;\n    case 161:                       // 'insert'\n      lookahead2W(281);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // NCName^Token | S^WS | '#' | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' |\n                                    // '/' | '//' | ':' | '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      break;\n    case 177:                       // 'let'\n      lookahead2W(178);             // S^WS | '#' | '$' | '(' | '(:' | ':' | 'score'\n      break;\n    case 187:                       // 'namespace'\n      lookahead2W(251);             // NCName^Token | S^WS | '#' | '(' | '(:' | ':' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | '{'\n      break;\n    case 220:                       // 'processing-instruction'\n      lookahead2W(247);             // NCName^Token | S^WS | '#' | '(:' | ':' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' |\n                                    // 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | '{'\n      break;\n    case 223:                       // 'replace'\n      lookahead2W(180);             // S^WS | '#' | '(' | '(:' | ':' | 'node' | 'value'\n      break;\n    case 266:                       // 'validate'\n      lookahead2W(191);             // S^WS | '#' | '(' | '(:' | ':' | 'lax' | 'strict' | 'type' | '{'\n      break;\n    case 83:                        // 'attribute'\n    case 122:                       // 'element'\n      lookahead2W(256);             // EQName^Token | S^WS | '#' | '(:' | ':' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' | '{'\n      break;\n    case 97:                        // 'comment'\n    case 249:                       // 'text'\n      lookahead2W(149);             // S^WS | '#' | '(:' | ':' | '{'\n      break;\n    case 111:                       // 'delete'\n    case 222:                       // 'rename'\n      lookahead2W(261);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '#' | '$' | '$$' | '%' | '(' | '(:' | ':' | '<' | '<!--' | '<?' | '[' |\n                                    // 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' |\n                                    // 'array' | 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'false' | 'first' | 'following' | 'following-sibling' |\n                                    // 'for' | 'from' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' |\n                                    // 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'json-item' | 'jsoniq' | 'last' |\n                                    // 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' |\n                                    // 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' | 'sliding' |\n                                    // 'some' | 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' |\n                                    // 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | '{' | '{|'\n      break;\n    case 104:                       // 'copy'\n    case 130:                       // 'every'\n    case 240:                       // 'some'\n      lookahead2W(165);             // S^WS | '#' | '$' | '(' | '(:' | ':'\n      break;\n    case 135:                       // 'false'\n    case 197:                       // 'null'\n    case 255:                       // 'true'\n      lookahead2W(208);             // S^WS | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | '-' | '.' | '/' | '//' | ':' |\n                                    // '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' | 'castable' |\n                                    // 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' | 'instance' |\n                                    // 'intersect' | 'is' | 'le' | 'lt' | 'mod' | 'ne' | 'or' | 'to' | 'treat' |\n                                    // 'union' | '|' | '||'\n      break;\n    case 120:                       // 'document'\n    case 206:                       // 'ordered'\n    case 256:                       // 'try'\n    case 262:                       // 'unordered'\n      lookahead2W(167);             // S^WS | '#' | '(' | '(:' | ':' | '{'\n      break;\n    case 121:                       // 'document-node'\n    case 125:                       // 'empty-sequence'\n    case 167:                       // 'item'\n    case 188:                       // 'namespace-node'\n    case 194:                       // 'node'\n    case 230:                       // 'schema-attribute'\n    case 231:                       // 'schema-element'\n      lookahead2W(96);              // S^WS | '#' | '(:' | ':'\n      break;\n    case 71:                        // 'after'\n    case 73:                        // 'allowing'\n    case 74:                        // 'ancestor'\n    case 75:                        // 'ancestor-or-self'\n    case 76:                        // 'and'\n    case 80:                        // 'as'\n    case 81:                        // 'ascending'\n    case 82:                        // 'at'\n    case 84:                        // 'base-uri'\n    case 85:                        // 'before'\n    case 86:                        // 'boundary-space'\n    case 87:                        // 'break'\n    case 89:                        // 'case'\n    case 90:                        // 'cast'\n    case 91:                        // 'castable'\n    case 92:                        // 'catch'\n    case 94:                        // 'child'\n    case 95:                        // 'collation'\n    case 98:                        // 'constraint'\n    case 99:                        // 'construction'\n    case 102:                       // 'context'\n    case 103:                       // 'continue'\n    case 105:                       // 'copy-namespaces'\n    case 106:                       // 'count'\n    case 107:                       // 'decimal-format'\n    case 109:                       // 'declare'\n    case 110:                       // 'default'\n    case 112:                       // 'descendant'\n    case 113:                       // 'descendant-or-self'\n    case 114:                       // 'descending'\n    case 119:                       // 'div'\n    case 123:                       // 'else'\n    case 124:                       // 'empty'\n    case 126:                       // 'encoding'\n    case 127:                       // 'end'\n    case 129:                       // 'eq'\n    case 132:                       // 'except'\n    case 133:                       // 'exit'\n    case 134:                       // 'external'\n    case 136:                       // 'first'\n    case 137:                       // 'following'\n    case 138:                       // 'following-sibling'\n    case 142:                       // 'from'\n    case 143:                       // 'ft-option'\n    case 147:                       // 'function'\n    case 148:                       // 'ge'\n    case 150:                       // 'group'\n    case 152:                       // 'gt'\n    case 153:                       // 'idiv'\n    case 154:                       // 'if'\n    case 155:                       // 'import'\n    case 156:                       // 'in'\n    case 157:                       // 'index'\n    case 162:                       // 'instance'\n    case 163:                       // 'integrity'\n    case 164:                       // 'intersect'\n    case 165:                       // 'into'\n    case 166:                       // 'is'\n    case 168:                       // 'json'\n    case 170:                       // 'jsoniq'\n    case 173:                       // 'last'\n    case 174:                       // 'lax'\n    case 175:                       // 'le'\n    case 179:                       // 'loop'\n    case 181:                       // 'lt'\n    case 183:                       // 'mod'\n    case 184:                       // 'modify'\n    case 185:                       // 'module'\n    case 189:                       // 'ne'\n    case 195:                       // 'nodes'\n    case 198:                       // 'object'\n    case 202:                       // 'only'\n    case 203:                       // 'option'\n    case 204:                       // 'or'\n    case 205:                       // 'order'\n    case 207:                       // 'ordering'\n    case 210:                       // 'parent'\n    case 216:                       // 'preceding'\n    case 217:                       // 'preceding-sibling'\n    case 224:                       // 'return'\n    case 225:                       // 'returning'\n    case 226:                       // 'revalidation'\n    case 228:                       // 'satisfies'\n    case 229:                       // 'schema'\n    case 232:                       // 'score'\n    case 233:                       // 'select'\n    case 234:                       // 'self'\n    case 239:                       // 'sliding'\n    case 241:                       // 'stable'\n    case 242:                       // 'start'\n    case 245:                       // 'strict'\n    case 248:                       // 'switch'\n    case 253:                       // 'to'\n    case 254:                       // 'treat'\n    case 257:                       // 'tumbling'\n    case 258:                       // 'type'\n    case 259:                       // 'typeswitch'\n    case 260:                       // 'union'\n    case 263:                       // 'updating'\n    case 267:                       // 'value'\n    case 268:                       // 'variable'\n    case 269:                       // 'version'\n    case 272:                       // 'where'\n    case 273:                       // 'while'\n    case 276:                       // 'with'\n      lookahead2W(144);             // S^WS | '#' | '(' | '(:' | ':'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 25735                 // 'false' ':'\n     || lk == 25797                 // 'null' ':'\n     || lk == 25855)                // 'true' ':'\n    {\n      lk = memoized(21, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_ExprSingle();\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(21, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -2:\n    case 19:                        // NCName^Token\n    case 25671:                     // 'after' ':'\n    case 25673:                     // 'allowing' ':'\n    case 25674:                     // 'ancestor' ':'\n    case 25675:                     // 'ancestor-or-self' ':'\n    case 25676:                     // 'and' ':'\n    case 25678:                     // 'append' ':'\n    case 25680:                     // 'as' ':'\n    case 25681:                     // 'ascending' ':'\n    case 25682:                     // 'at' ':'\n    case 25683:                     // 'attribute' ':'\n    case 25684:                     // 'base-uri' ':'\n    case 25685:                     // 'before' ':'\n    case 25686:                     // 'boundary-space' ':'\n    case 25687:                     // 'break' ':'\n    case 25689:                     // 'case' ':'\n    case 25690:                     // 'cast' ':'\n    case 25691:                     // 'castable' ':'\n    case 25692:                     // 'catch' ':'\n    case 25694:                     // 'child' ':'\n    case 25695:                     // 'collation' ':'\n    case 25697:                     // 'comment' ':'\n    case 25698:                     // 'constraint' ':'\n    case 25699:                     // 'construction' ':'\n    case 25702:                     // 'context' ':'\n    case 25703:                     // 'continue' ':'\n    case 25704:                     // 'copy' ':'\n    case 25705:                     // 'copy-namespaces' ':'\n    case 25706:                     // 'count' ':'\n    case 25707:                     // 'decimal-format' ':'\n    case 25709:                     // 'declare' ':'\n    case 25710:                     // 'default' ':'\n    case 25711:                     // 'delete' ':'\n    case 25712:                     // 'descendant' ':'\n    case 25713:                     // 'descendant-or-self' ':'\n    case 25714:                     // 'descending' ':'\n    case 25719:                     // 'div' ':'\n    case 25720:                     // 'document' ':'\n    case 25721:                     // 'document-node' ':'\n    case 25722:                     // 'element' ':'\n    case 25723:                     // 'else' ':'\n    case 25724:                     // 'empty' ':'\n    case 25725:                     // 'empty-sequence' ':'\n    case 25726:                     // 'encoding' ':'\n    case 25727:                     // 'end' ':'\n    case 25729:                     // 'eq' ':'\n    case 25730:                     // 'every' ':'\n    case 25732:                     // 'except' ':'\n    case 25733:                     // 'exit' ':'\n    case 25734:                     // 'external' ':'\n    case 25736:                     // 'first' ':'\n    case 25737:                     // 'following' ':'\n    case 25738:                     // 'following-sibling' ':'\n    case 25739:                     // 'for' ':'\n    case 25742:                     // 'from' ':'\n    case 25743:                     // 'ft-option' ':'\n    case 25747:                     // 'function' ':'\n    case 25748:                     // 'ge' ':'\n    case 25750:                     // 'group' ':'\n    case 25752:                     // 'gt' ':'\n    case 25753:                     // 'idiv' ':'\n    case 25754:                     // 'if' ':'\n    case 25755:                     // 'import' ':'\n    case 25756:                     // 'in' ':'\n    case 25757:                     // 'index' ':'\n    case 25761:                     // 'insert' ':'\n    case 25762:                     // 'instance' ':'\n    case 25763:                     // 'integrity' ':'\n    case 25764:                     // 'intersect' ':'\n    case 25765:                     // 'into' ':'\n    case 25766:                     // 'is' ':'\n    case 25767:                     // 'item' ':'\n    case 25768:                     // 'json' ':'\n    case 25770:                     // 'jsoniq' ':'\n    case 25773:                     // 'last' ':'\n    case 25774:                     // 'lax' ':'\n    case 25775:                     // 'le' ':'\n    case 25777:                     // 'let' ':'\n    case 25779:                     // 'loop' ':'\n    case 25781:                     // 'lt' ':'\n    case 25783:                     // 'mod' ':'\n    case 25784:                     // 'modify' ':'\n    case 25785:                     // 'module' ':'\n    case 25787:                     // 'namespace' ':'\n    case 25788:                     // 'namespace-node' ':'\n    case 25789:                     // 'ne' ':'\n    case 25794:                     // 'node' ':'\n    case 25795:                     // 'nodes' ':'\n    case 25798:                     // 'object' ':'\n    case 25802:                     // 'only' ':'\n    case 25803:                     // 'option' ':'\n    case 25804:                     // 'or' ':'\n    case 25805:                     // 'order' ':'\n    case 25806:                     // 'ordered' ':'\n    case 25807:                     // 'ordering' ':'\n    case 25810:                     // 'parent' ':'\n    case 25816:                     // 'preceding' ':'\n    case 25817:                     // 'preceding-sibling' ':'\n    case 25820:                     // 'processing-instruction' ':'\n    case 25822:                     // 'rename' ':'\n    case 25823:                     // 'replace' ':'\n    case 25824:                     // 'return' ':'\n    case 25825:                     // 'returning' ':'\n    case 25826:                     // 'revalidation' ':'\n    case 25828:                     // 'satisfies' ':'\n    case 25829:                     // 'schema' ':'\n    case 25830:                     // 'schema-attribute' ':'\n    case 25831:                     // 'schema-element' ':'\n    case 25832:                     // 'score' ':'\n    case 25833:                     // 'select' ':'\n    case 25834:                     // 'self' ':'\n    case 25839:                     // 'sliding' ':'\n    case 25840:                     // 'some' ':'\n    case 25841:                     // 'stable' ':'\n    case 25842:                     // 'start' ':'\n    case 25845:                     // 'strict' ':'\n    case 25848:                     // 'switch' ':'\n    case 25849:                     // 'text' ':'\n    case 25853:                     // 'to' ':'\n    case 25854:                     // 'treat' ':'\n    case 25856:                     // 'try' ':'\n    case 25857:                     // 'tumbling' ':'\n    case 25858:                     // 'type' ':'\n    case 25859:                     // 'typeswitch' ':'\n    case 25860:                     // 'union' ':'\n    case 25862:                     // 'unordered' ':'\n    case 25863:                     // 'updating' ':'\n    case 25866:                     // 'validate' ':'\n    case 25867:                     // 'value' ':'\n    case 25868:                     // 'variable' ':'\n    case 25869:                     // 'version' ':'\n    case 25872:                     // 'where' ':'\n    case 25873:                     // 'while' ':'\n    case 25876:                     // 'with' ':'\n      parse_NCName();\n      break;\n    default:\n      parse_ExprSingle();\n    }\n    lookahead1W(26);                // S^WS | '(:' | ':'\n    shift(50);                      // ':'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"PairConstructor\", e0);\n  }\n\n  function try_PairConstructor()\n  {\n    switch (l1)\n    {\n    case 78:                        // 'append'\n      lookahead2W(278);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '#' | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' |\n                                    // ':' | '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      break;\n    case 139:                       // 'for'\n      lookahead2W(187);             // S^WS | '#' | '$' | '(' | '(:' | ':' | 'sliding' | 'tumbling'\n      break;\n    case 161:                       // 'insert'\n      lookahead2W(281);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // NCName^Token | S^WS | '#' | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' |\n                                    // '/' | '//' | ':' | '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n      break;\n    case 177:                       // 'let'\n      lookahead2W(178);             // S^WS | '#' | '$' | '(' | '(:' | ':' | 'score'\n      break;\n    case 187:                       // 'namespace'\n      lookahead2W(251);             // NCName^Token | S^WS | '#' | '(' | '(:' | ':' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | '{'\n      break;\n    case 220:                       // 'processing-instruction'\n      lookahead2W(247);             // NCName^Token | S^WS | '#' | '(:' | ':' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' |\n                                    // 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | '{'\n      break;\n    case 223:                       // 'replace'\n      lookahead2W(180);             // S^WS | '#' | '(' | '(:' | ':' | 'node' | 'value'\n      break;\n    case 266:                       // 'validate'\n      lookahead2W(191);             // S^WS | '#' | '(' | '(:' | ':' | 'lax' | 'strict' | 'type' | '{'\n      break;\n    case 83:                        // 'attribute'\n    case 122:                       // 'element'\n      lookahead2W(256);             // EQName^Token | S^WS | '#' | '(:' | ':' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' | '{'\n      break;\n    case 97:                        // 'comment'\n    case 249:                       // 'text'\n      lookahead2W(149);             // S^WS | '#' | '(:' | ':' | '{'\n      break;\n    case 111:                       // 'delete'\n    case 222:                       // 'rename'\n      lookahead2W(261);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '#' | '$' | '$$' | '%' | '(' | '(:' | ':' | '<' | '<!--' | '<?' | '[' |\n                                    // 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' |\n                                    // 'array' | 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'false' | 'first' | 'following' | 'following-sibling' |\n                                    // 'for' | 'from' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' |\n                                    // 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'json-item' | 'jsoniq' | 'last' |\n                                    // 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' |\n                                    // 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'null' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'select' | 'self' | 'sliding' |\n                                    // 'some' | 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' |\n                                    // 'to' | 'treat' | 'true' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | '{' | '{|'\n      break;\n    case 104:                       // 'copy'\n    case 130:                       // 'every'\n    case 240:                       // 'some'\n      lookahead2W(165);             // S^WS | '#' | '$' | '(' | '(:' | ':'\n      break;\n    case 135:                       // 'false'\n    case 197:                       // 'null'\n    case 255:                       // 'true'\n      lookahead2W(208);             // S^WS | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | '-' | '.' | '/' | '//' | ':' |\n                                    // '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' | 'castable' |\n                                    // 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' | 'instance' |\n                                    // 'intersect' | 'is' | 'le' | 'lt' | 'mod' | 'ne' | 'or' | 'to' | 'treat' |\n                                    // 'union' | '|' | '||'\n      break;\n    case 120:                       // 'document'\n    case 206:                       // 'ordered'\n    case 256:                       // 'try'\n    case 262:                       // 'unordered'\n      lookahead2W(167);             // S^WS | '#' | '(' | '(:' | ':' | '{'\n      break;\n    case 121:                       // 'document-node'\n    case 125:                       // 'empty-sequence'\n    case 167:                       // 'item'\n    case 188:                       // 'namespace-node'\n    case 194:                       // 'node'\n    case 230:                       // 'schema-attribute'\n    case 231:                       // 'schema-element'\n      lookahead2W(96);              // S^WS | '#' | '(:' | ':'\n      break;\n    case 71:                        // 'after'\n    case 73:                        // 'allowing'\n    case 74:                        // 'ancestor'\n    case 75:                        // 'ancestor-or-self'\n    case 76:                        // 'and'\n    case 80:                        // 'as'\n    case 81:                        // 'ascending'\n    case 82:                        // 'at'\n    case 84:                        // 'base-uri'\n    case 85:                        // 'before'\n    case 86:                        // 'boundary-space'\n    case 87:                        // 'break'\n    case 89:                        // 'case'\n    case 90:                        // 'cast'\n    case 91:                        // 'castable'\n    case 92:                        // 'catch'\n    case 94:                        // 'child'\n    case 95:                        // 'collation'\n    case 98:                        // 'constraint'\n    case 99:                        // 'construction'\n    case 102:                       // 'context'\n    case 103:                       // 'continue'\n    case 105:                       // 'copy-namespaces'\n    case 106:                       // 'count'\n    case 107:                       // 'decimal-format'\n    case 109:                       // 'declare'\n    case 110:                       // 'default'\n    case 112:                       // 'descendant'\n    case 113:                       // 'descendant-or-self'\n    case 114:                       // 'descending'\n    case 119:                       // 'div'\n    case 123:                       // 'else'\n    case 124:                       // 'empty'\n    case 126:                       // 'encoding'\n    case 127:                       // 'end'\n    case 129:                       // 'eq'\n    case 132:                       // 'except'\n    case 133:                       // 'exit'\n    case 134:                       // 'external'\n    case 136:                       // 'first'\n    case 137:                       // 'following'\n    case 138:                       // 'following-sibling'\n    case 142:                       // 'from'\n    case 143:                       // 'ft-option'\n    case 147:                       // 'function'\n    case 148:                       // 'ge'\n    case 150:                       // 'group'\n    case 152:                       // 'gt'\n    case 153:                       // 'idiv'\n    case 154:                       // 'if'\n    case 155:                       // 'import'\n    case 156:                       // 'in'\n    case 157:                       // 'index'\n    case 162:                       // 'instance'\n    case 163:                       // 'integrity'\n    case 164:                       // 'intersect'\n    case 165:                       // 'into'\n    case 166:                       // 'is'\n    case 168:                       // 'json'\n    case 170:                       // 'jsoniq'\n    case 173:                       // 'last'\n    case 174:                       // 'lax'\n    case 175:                       // 'le'\n    case 179:                       // 'loop'\n    case 181:                       // 'lt'\n    case 183:                       // 'mod'\n    case 184:                       // 'modify'\n    case 185:                       // 'module'\n    case 189:                       // 'ne'\n    case 195:                       // 'nodes'\n    case 198:                       // 'object'\n    case 202:                       // 'only'\n    case 203:                       // 'option'\n    case 204:                       // 'or'\n    case 205:                       // 'order'\n    case 207:                       // 'ordering'\n    case 210:                       // 'parent'\n    case 216:                       // 'preceding'\n    case 217:                       // 'preceding-sibling'\n    case 224:                       // 'return'\n    case 225:                       // 'returning'\n    case 226:                       // 'revalidation'\n    case 228:                       // 'satisfies'\n    case 229:                       // 'schema'\n    case 232:                       // 'score'\n    case 233:                       // 'select'\n    case 234:                       // 'self'\n    case 239:                       // 'sliding'\n    case 241:                       // 'stable'\n    case 242:                       // 'start'\n    case 245:                       // 'strict'\n    case 248:                       // 'switch'\n    case 253:                       // 'to'\n    case 254:                       // 'treat'\n    case 257:                       // 'tumbling'\n    case 258:                       // 'type'\n    case 259:                       // 'typeswitch'\n    case 260:                       // 'union'\n    case 263:                       // 'updating'\n    case 267:                       // 'value'\n    case 268:                       // 'variable'\n    case 269:                       // 'version'\n    case 272:                       // 'where'\n    case 273:                       // 'while'\n    case 276:                       // 'with'\n      lookahead2W(144);             // S^WS | '#' | '(' | '(:' | ':'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 25735                 // 'false' ':'\n     || lk == 25797                 // 'null' ':'\n     || lk == 25855)                // 'true' ':'\n    {\n      lk = memoized(21, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_ExprSingle();\n          memoize(21, e0A, -1);\n          lk = -3;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(21, e0A, -2);\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -2:\n    case 19:                        // NCName^Token\n    case 25671:                     // 'after' ':'\n    case 25673:                     // 'allowing' ':'\n    case 25674:                     // 'ancestor' ':'\n    case 25675:                     // 'ancestor-or-self' ':'\n    case 25676:                     // 'and' ':'\n    case 25678:                     // 'append' ':'\n    case 25680:                     // 'as' ':'\n    case 25681:                     // 'ascending' ':'\n    case 25682:                     // 'at' ':'\n    case 25683:                     // 'attribute' ':'\n    case 25684:                     // 'base-uri' ':'\n    case 25685:                     // 'before' ':'\n    case 25686:                     // 'boundary-space' ':'\n    case 25687:                     // 'break' ':'\n    case 25689:                     // 'case' ':'\n    case 25690:                     // 'cast' ':'\n    case 25691:                     // 'castable' ':'\n    case 25692:                     // 'catch' ':'\n    case 25694:                     // 'child' ':'\n    case 25695:                     // 'collation' ':'\n    case 25697:                     // 'comment' ':'\n    case 25698:                     // 'constraint' ':'\n    case 25699:                     // 'construction' ':'\n    case 25702:                     // 'context' ':'\n    case 25703:                     // 'continue' ':'\n    case 25704:                     // 'copy' ':'\n    case 25705:                     // 'copy-namespaces' ':'\n    case 25706:                     // 'count' ':'\n    case 25707:                     // 'decimal-format' ':'\n    case 25709:                     // 'declare' ':'\n    case 25710:                     // 'default' ':'\n    case 25711:                     // 'delete' ':'\n    case 25712:                     // 'descendant' ':'\n    case 25713:                     // 'descendant-or-self' ':'\n    case 25714:                     // 'descending' ':'\n    case 25719:                     // 'div' ':'\n    case 25720:                     // 'document' ':'\n    case 25721:                     // 'document-node' ':'\n    case 25722:                     // 'element' ':'\n    case 25723:                     // 'else' ':'\n    case 25724:                     // 'empty' ':'\n    case 25725:                     // 'empty-sequence' ':'\n    case 25726:                     // 'encoding' ':'\n    case 25727:                     // 'end' ':'\n    case 25729:                     // 'eq' ':'\n    case 25730:                     // 'every' ':'\n    case 25732:                     // 'except' ':'\n    case 25733:                     // 'exit' ':'\n    case 25734:                     // 'external' ':'\n    case 25736:                     // 'first' ':'\n    case 25737:                     // 'following' ':'\n    case 25738:                     // 'following-sibling' ':'\n    case 25739:                     // 'for' ':'\n    case 25742:                     // 'from' ':'\n    case 25743:                     // 'ft-option' ':'\n    case 25747:                     // 'function' ':'\n    case 25748:                     // 'ge' ':'\n    case 25750:                     // 'group' ':'\n    case 25752:                     // 'gt' ':'\n    case 25753:                     // 'idiv' ':'\n    case 25754:                     // 'if' ':'\n    case 25755:                     // 'import' ':'\n    case 25756:                     // 'in' ':'\n    case 25757:                     // 'index' ':'\n    case 25761:                     // 'insert' ':'\n    case 25762:                     // 'instance' ':'\n    case 25763:                     // 'integrity' ':'\n    case 25764:                     // 'intersect' ':'\n    case 25765:                     // 'into' ':'\n    case 25766:                     // 'is' ':'\n    case 25767:                     // 'item' ':'\n    case 25768:                     // 'json' ':'\n    case 25770:                     // 'jsoniq' ':'\n    case 25773:                     // 'last' ':'\n    case 25774:                     // 'lax' ':'\n    case 25775:                     // 'le' ':'\n    case 25777:                     // 'let' ':'\n    case 25779:                     // 'loop' ':'\n    case 25781:                     // 'lt' ':'\n    case 25783:                     // 'mod' ':'\n    case 25784:                     // 'modify' ':'\n    case 25785:                     // 'module' ':'\n    case 25787:                     // 'namespace' ':'\n    case 25788:                     // 'namespace-node' ':'\n    case 25789:                     // 'ne' ':'\n    case 25794:                     // 'node' ':'\n    case 25795:                     // 'nodes' ':'\n    case 25798:                     // 'object' ':'\n    case 25802:                     // 'only' ':'\n    case 25803:                     // 'option' ':'\n    case 25804:                     // 'or' ':'\n    case 25805:                     // 'order' ':'\n    case 25806:                     // 'ordered' ':'\n    case 25807:                     // 'ordering' ':'\n    case 25810:                     // 'parent' ':'\n    case 25816:                     // 'preceding' ':'\n    case 25817:                     // 'preceding-sibling' ':'\n    case 25820:                     // 'processing-instruction' ':'\n    case 25822:                     // 'rename' ':'\n    case 25823:                     // 'replace' ':'\n    case 25824:                     // 'return' ':'\n    case 25825:                     // 'returning' ':'\n    case 25826:                     // 'revalidation' ':'\n    case 25828:                     // 'satisfies' ':'\n    case 25829:                     // 'schema' ':'\n    case 25830:                     // 'schema-attribute' ':'\n    case 25831:                     // 'schema-element' ':'\n    case 25832:                     // 'score' ':'\n    case 25833:                     // 'select' ':'\n    case 25834:                     // 'self' ':'\n    case 25839:                     // 'sliding' ':'\n    case 25840:                     // 'some' ':'\n    case 25841:                     // 'stable' ':'\n    case 25842:                     // 'start' ':'\n    case 25845:                     // 'strict' ':'\n    case 25848:                     // 'switch' ':'\n    case 25849:                     // 'text' ':'\n    case 25853:                     // 'to' ':'\n    case 25854:                     // 'treat' ':'\n    case 25856:                     // 'try' ':'\n    case 25857:                     // 'tumbling' ':'\n    case 25858:                     // 'type' ':'\n    case 25859:                     // 'typeswitch' ':'\n    case 25860:                     // 'union' ':'\n    case 25862:                     // 'unordered' ':'\n    case 25863:                     // 'updating' ':'\n    case 25866:                     // 'validate' ':'\n    case 25867:                     // 'value' ':'\n    case 25868:                     // 'variable' ':'\n    case 25869:                     // 'version' ':'\n    case 25872:                     // 'where' ':'\n    case 25873:                     // 'while' ':'\n    case 25876:                     // 'with' ':'\n      try_NCName();\n      break;\n    case -3:\n      break;\n    default:\n      try_ExprSingle();\n    }\n    lookahead1W(26);                // S^WS | '(:' | ':'\n    shiftT(50);                     // ':'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'false' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'from' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    try_ExprSingle();\n  }\n\n  function parse_ArrayConstructor()\n  {\n    eventHandler.startNonterminal(\"ArrayConstructor\", e0);\n    shift(69);                      // '['\n    lookahead1W(272);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | ']' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    if (l1 != 70)                   // ']'\n    {\n      whitespace();\n      parse_Expr();\n    }\n    shift(70);                      // ']'\n    eventHandler.endNonterminal(\"ArrayConstructor\", e0);\n  }\n\n  function try_ArrayConstructor()\n  {\n    shiftT(69);                     // '['\n    lookahead1W(272);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '[' | ']' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|'\n    if (l1 != 70)                   // ']'\n    {\n      try_Expr();\n    }\n    shiftT(70);                     // ']'\n  }\n\n  function parse_BlockExpr()\n  {\n    eventHandler.startNonterminal(\"BlockExpr\", e0);\n    shift(281);                     // '{'\n    lookahead1W(280);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | ';' |\n                                    // '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|' | '}'\n    whitespace();\n    parse_StatementsAndOptionalExpr();\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"BlockExpr\", e0);\n  }\n\n  function try_BlockExpr()\n  {\n    shiftT(281);                    // '{'\n    lookahead1W(280);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | ';' |\n                                    // '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|' | '}'\n    try_StatementsAndOptionalExpr();\n    shiftT(287);                    // '}'\n  }\n\n  function parse_FunctionDecl()\n  {\n    eventHandler.startNonterminal(\"FunctionDecl\", e0);\n    shift(147);                     // 'function'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    whitespace();\n    parse_EQName();\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(98);                // S^WS | '$' | '(:' | ')'\n    if (l1 == 31)                   // '$'\n    {\n      whitespace();\n      parse_ParamList();\n    }\n    shift(38);                      // ')'\n    lookahead1W(158);               // S^WS | '(:' | 'as' | 'external' | '{'\n    if (l1 == 80)                   // 'as'\n    {\n      whitespace();\n      parse_ReturnType();\n    }\n    lookahead1W(122);               // S^WS | '(:' | 'external' | '{'\n    switch (l1)\n    {\n    case 281:                       // '{'\n      shift(281);                   // '{'\n      lookahead1W(280);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '$$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '/' | '//' | ';' |\n                                    // '<' | '<!--' | '<?' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'not' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // '{' | '{|' | '}'\n      whitespace();\n      parse_StatementsAndOptionalExpr();\n      shift(287);                   // '}'\n      break;\n    default:\n      shift(134);                   // 'external'\n    }\n    eventHandler.endNonterminal(\"FunctionDecl\", e0);\n  }\n\n  function parse_ReturnType()\n  {\n    eventHandler.startNonterminal(\"ReturnType\", e0);\n    shift(80);                      // 'as'\n    lookahead1W(253);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'false' |\n                                    // 'first' | 'following' | 'following-sibling' | 'for' | 'from' | 'ft-option' |\n                                    // 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' |\n                                    // 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' |\n                                    // 'json' | 'json-item' | 'jsoniq' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' |\n                                    // 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' |\n                                    // 'nodes' | 'null' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'select' | 'self' | 'sliding' | 'some' | 'stable' | 'start' |\n                                    // 'strict' | 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'true' |\n                                    // 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with'\n    whitespace();\n    parse_SequenceType();\n    eventHandler.endNonterminal(\"ReturnType\", e0);\n  }\n\n  function shift(t)\n  {\n    if (l1 == t)\n    {\n      whitespace();\n      eventHandler.terminal(JSONiqParser.TOKEN[l1], b1, e1 > size ? size : e1);\n      b0 = b1; e0 = e1; l1 = l2; if (l1 != 0) {\n      b1 = b2; e1 = e2; l2 = 0; }\n    }\n    else\n    {\n      error(b1, e1, 0, l1, t);\n    }\n  }\n\n  function shiftT(t)\n  {\n    if (l1 == t)\n    {\n      b0 = b1; e0 = e1; l1 = l2; if (l1 != 0) {\n      b1 = b2; e1 = e2; l2 = 0; }\n    }\n    else\n    {\n      error(b1, e1, 0, l1, t);\n    }\n  }\n\n  function skip(code)\n  {\n    var b0W = b0; var e0W = e0; var l1W = l1;\n    var b1W = b1; var e1W = e1;\n\n    l1 = code; b1 = begin; e1 = end;\n    l2 = 0;\n\n    try_Whitespace();\n\n    b0 = b0W; e0 = e0W; l1 = l1W; if (l1 != 0) {\n    b1 = b1W; e1 = e1W; }\n  }\n\n  function whitespace()\n  {\n    if (e0 != b1)\n    {\n      eventHandler.whitespace(e0, b1);\n      e0 = b1;\n    }\n  }\n\n  function matchW(set)\n  {\n    var code;\n    for (;;)\n    {\n      code = match(set);\n      if (code != 22)               // S^WS\n      {\n        if (code != 37)             // '(:'\n        {\n          break;\n        }\n        skip(code);\n      }\n    }\n    return code;\n  }\n\n  function lookahead1W(set)\n  {\n    if (l1 == 0)\n    {\n      l1 = matchW(set);\n      b1 = begin;\n      e1 = end;\n    }\n  }\n\n  function lookahead2W(set)\n  {\n    if (l2 == 0)\n    {\n      l2 = matchW(set);\n      b2 = begin;\n      e2 = end;\n    }\n    lk = (l2 << 9) | l1;\n  }\n\n  function lookahead1(set)\n  {\n    if (l1 == 0)\n    {\n      l1 = match(set);\n      b1 = begin;\n      e1 = end;\n    }\n  }\n\n  function lookahead2(set)\n  {\n    if (l2 == 0)\n    {\n      l2 = match(set);\n      b2 = begin;\n      e2 = end;\n    }\n    lk = (l2 << 9) | l1;\n  }\n\n  function error(b, e, s, l, t)\n  {\n    if (e >= ex)\n    {\n      bx = b;\n      ex = e;\n      sx = s;\n      lx = l;\n      tx = t;\n    }\n    throw new self.ParseException(bx, ex, sx, lx, tx);\n  }\n\n  var lk, b0, e0;\n  var l1, b1, e1;\n  var l2, b2, e2;\n  var bx, ex, sx, lx, tx;\n  var eventHandler;\n  var memo;\n\n  function memoize(i, e, v)\n  {\n    memo[(e << 5) + i] = v;\n  }\n\n  function memoized(i, e)\n  {\n    var v = memo[(e << 5) + i];\n    return typeof v != \"undefined\" ? v : 0;\n  }\n\n  var input;\n  var size;\n  var begin;\n  var end;\n\n  function match(tokenSetId)\n  {\n    var nonbmp = false;\n    begin = end;\n    var current = end;\n    var result = JSONiqParser.INITIAL[tokenSetId];\n    var state = 0;\n\n    for (var code = result & 8191; code != 0; )\n    {\n      var charclass;\n      var c0 = current < size ? input.charCodeAt(current) : 0;\n      ++current;\n      if (c0 < 0x80)\n      {\n        charclass = JSONiqParser.MAP0[c0];\n      }\n      else if (c0 < 0xd800)\n      {\n        var c1 = c0 >> 4;\n        charclass = JSONiqParser.MAP1[(c0 & 15) + JSONiqParser.MAP1[(c1 & 31) + JSONiqParser.MAP1[c1 >> 5]]];\n      }\n      else\n      {\n        if (c0 < 0xdc00)\n        {\n          var c1 = current < size ? input.charCodeAt(current) : 0;\n          if (c1 >= 0xdc00 && c1 < 0xe000)\n          {\n            ++current;\n            c0 = ((c0 & 0x3ff) << 10) + (c1 & 0x3ff) + 0x10000;\n            nonbmp = true;\n          }\n        }\n        var lo = 0, hi = 5;\n        for (var m = 3; ; m = (hi + lo) >> 1)\n        {\n          if (JSONiqParser.MAP2[m] > c0) hi = m - 1;\n          else if (JSONiqParser.MAP2[6 + m] < c0) lo = m + 1;\n          else {charclass = JSONiqParser.MAP2[12 + m]; break;}\n          if (lo > hi) {charclass = 0; break;}\n        }\n      }\n\n      state = code;\n      var i0 = (charclass << 13) + code - 1;\n      code = JSONiqParser.TRANSITION[(i0 & 31) + JSONiqParser.TRANSITION[i0 >> 5]];\n\n      if (code > 8191)\n      {\n        result = code;\n        code &= 8191;\n        end = current;\n      }\n    }\n\n    result >>= 13;\n    if (result == 0)\n    {\n      end = current - 1;\n      var c1 = end < size ? input.charCodeAt(end) : 0;\n      if (c1 >= 0xdc00 && c1 < 0xe000) --end;\n      return error(begin, end, state, -1, -1);\n    }\n\n    if (nonbmp)\n    {\n      for (var i = result >> 9; i > 0; --i)\n      {\n        --end;\n        var c1 = end < size ? input.charCodeAt(end) : 0;\n        if (c1 >= 0xdc00 && c1 < 0xe000) --end;\n      }\n    }\n    else\n    {\n      end -= result >> 9;\n    }\n\n    return (result & 511) - 1;\n  }\n}\n\nJSONiqParser.getTokenSet = function(tokenSetId)\n{\n  var set = [];\n  var s = tokenSetId < 0 ? - tokenSetId : JSONiqParser.INITIAL[tokenSetId] & 8191;\n  for (var i = 0; i < 289; i += 32)\n  {\n    var j = i;\n    var i0 = (i >> 5) * 4235 + s - 1;\n    var i1 = i0 >> 2;\n    var i2 = i1 >> 2;\n    var f = JSONiqParser.EXPECTED[(i0 & 3) + JSONiqParser.EXPECTED[(i1 & 3) + JSONiqParser.EXPECTED[(i2 & 15) + JSONiqParser.EXPECTED[i2 >> 4]]]];\n    for ( ; f != 0; f >>>= 1, ++j)\n    {\n      if ((f & 1) != 0)\n      {\n        set.push(JSONiqParser.TOKEN[j]);\n      }\n    }\n  }\n  return set;\n};\n\nJSONiqParser.MAP0 =\n[\n  /*   0 */ 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4,\n  /*  36 */ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 19, 20, 21, 22, 23,\n  /*  64 */ 24, 25, 26, 27, 28, 29, 26, 30, 30, 30, 30, 30, 31, 32, 33, 30, 30, 34, 30, 30, 35, 30, 30, 30, 36, 30, 30,\n  /*  91 */ 37, 38, 39, 40, 30, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,\n  /* 118 */ 62, 63, 64, 65, 66, 67, 68, 69, 40, 40\n];\n\nJSONiqParser.MAP1 =\n[\n  /*   0 */ 108, 124, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 156, 181, 181, 181, 181,\n  /*  21 */ 181, 214, 215, 213, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214,\n  /*  42 */ 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214,\n  /*  63 */ 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214,\n  /*  84 */ 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214,\n  /* 105 */ 214, 214, 214, 247, 261, 277, 293, 309, 355, 371, 387, 423, 423, 423, 415, 339, 331, 339, 331, 339, 339,\n  /* 126 */ 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 440, 440, 440, 440, 440, 440, 440,\n  /* 147 */ 324, 339, 339, 339, 339, 339, 339, 339, 339, 401, 423, 423, 424, 422, 423, 423, 339, 339, 339, 339, 339,\n  /* 168 */ 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 423, 423, 423, 423, 423, 423, 423, 423,\n  /* 189 */ 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423,\n  /* 210 */ 423, 423, 423, 338, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339,\n  /* 231 */ 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 423, 71, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 256 */ 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,\n  /* 290 */ 14, 15, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 26, 30,\n  /* 317 */ 30, 30, 30, 30, 31, 32, 33, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 40, 30, 30, 30, 30, 30,\n  /* 344 */ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 34, 30, 30, 35, 30, 30, 30, 36, 30, 30, 37, 38, 39, 40, 30,\n  /* 371 */ 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,\n  /* 398 */ 67, 68, 69, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 30, 30, 40, 40, 40, 40, 40, 40, 40, 70, 40, 40,\n  /* 425 */ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,\n  /* 452 */ 70, 70, 70, 70\n];\n\nJSONiqParser.MAP2 =\n[\n  /*  0 */ 57344, 63744, 64976, 65008, 65536, 983040, 63743, 64975, 65007, 65533, 983039, 1114111, 40, 30, 40, 30, 30,\n  /* 17 */ 40\n];\n\nJSONiqParser.INITIAL =\n[\n  /*   0 */ 1, 24578, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,\n  /*  28 */ 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,\n  /*  55 */ 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,\n  /*  82 */ 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107,\n  /* 107 */ 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,\n  /* 128 */ 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,\n  /* 149 */ 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170,\n  /* 170 */ 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,\n  /* 191 */ 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212,\n  /* 212 */ 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233,\n  /* 233 */ 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254,\n  /* 254 */ 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275,\n  /* 275 */ 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289\n];\n\nJSONiqParser.TRANSITION =\n[\n  /*     0 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*    15 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*    30 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*    45 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*    60 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*    75 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*    90 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*   105 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*   120 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*   135 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*   150 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*   165 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*   180 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*   195 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*   210 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*   225 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*   240 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*   255 */ 32640, 18432, 18508, 18512, 18508, 18508, 18471, 18503, 18452, 18508, 18544, 32640, 25253, 32640, 72986,\n  /*   270 */ 32640, 32640, 18907, 32640, 23058, 21807, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037,\n  /*   285 */ 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819,\n  /*   300 */ 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334,\n  /*   315 */ 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811,\n  /*   330 */ 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211,\n  /*   345 */ 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885,\n  /*   360 */ 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618,\n  /*   375 */ 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640,\n  /*   390 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*   405 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*   420 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*   435 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*   450 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*   465 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*   480 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*   495 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*   510 */ 32640, 32640, 22530, 32640, 61740, 32640, 32640, 53140, 22565, 22594, 54694, 22641, 32640, 25253, 32640,\n  /*   525 */ 22707, 32640, 32640, 18907, 32640, 40804, 19219, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959,\n  /*   540 */ 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134,\n  /*   555 */ 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014,\n  /*   570 */ 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735,\n  /*   585 */ 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138,\n  /*   600 */ 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853,\n  /*   615 */ 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484,\n  /*   630 */ 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487,\n  /*   645 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*   660 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*   675 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*   690 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*   705 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*   720 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*   735 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*   750 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*   765 */ 32640, 32640, 32640, 22757, 32640, 23442, 32640, 20728, 22822, 22912, 62853, 22949, 23023, 32640, 25253,\n  /*   780 */ 37379, 72986, 32640, 32640, 18907, 32640, 23058, 40482, 31154, 19779, 32640, 18612, 18649, 18757, 18789,\n  /*   795 */ 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458,\n  /*   810 */ 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244,\n  /*   825 */ 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661,\n  /*   840 */ 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090,\n  /*   855 */ 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870,\n  /*   870 */ 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431,\n  /*   885 */ 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459,\n  /*   900 */ 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*   915 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*   930 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*   945 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*   960 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*   975 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*   990 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  1005 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  1020 */ 32640, 32640, 32640, 32640, 23090, 32640, 70756, 57235, 23625, 57174, 23143, 53889, 57205, 23194, 32640,\n  /*  1035 */ 44590, 57237, 72986, 32640, 32640, 18907, 32640, 23058, 18925, 31154, 19779, 32640, 18612, 18649, 18757,\n  /*  1050 */ 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041,\n  /*  1065 */ 62458, 19134, 40819, 22132, 19073, 46732, 23294, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251,\n  /*  1080 */ 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422,\n  /*  1095 */ 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969,\n  /*  1110 */ 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821,\n  /*  1125 */ 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374,\n  /*  1140 */ 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427,\n  /*  1155 */ 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  1170 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  1185 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  1200 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  1215 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  1230 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  1245 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  1260 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  1275 */ 32640, 32640, 32640, 32640, 32640, 23361, 32640, 61740, 23437, 23807, 23824, 22912, 35136, 23474, 23607,\n  /*  1290 */ 32640, 25253, 32640, 72986, 32640, 32640, 18907, 32640, 40461, 21807, 31154, 19779, 32640, 18612, 18649,\n  /*  1305 */ 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179,\n  /*  1320 */ 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570,\n  /*  1335 */ 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629,\n  /*  1350 */ 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927,\n  /*  1365 */ 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774,\n  /*  1380 */ 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452,\n  /*  1395 */ 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281,\n  /*  1410 */ 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  1425 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  1440 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  1455 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  1470 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  1485 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  1500 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  1515 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  1530 */ 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32640, 61740, 57592, 32640, 53140, 23657, 43708, 23704,\n  /*  1545 */ 23789, 32640, 25253, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 21807, 31154, 19779, 32640, 18612,\n  /*  1560 */ 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875,\n  /*  1575 */ 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438,\n  /*  1590 */ 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359,\n  /*  1605 */ 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907,\n  /*  1620 */ 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709,\n  /*  1635 */ 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310,\n  /*  1650 */ 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249,\n  /*  1665 */ 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  1680 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  1695 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  1710 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  1725 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  1740 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  1755 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  1770 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  1785 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32640, 61740, 32640, 32640, 39259, 23856, 32640,\n  /*  1800 */ 32640, 23893, 32640, 25253, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 21807, 31154, 19779, 32640,\n  /*  1815 */ 18612, 18649, 18757, 18789, 18959, 73053, 22069, 23965, 22057, 18887, 18787, 18957, 18991, 36451, 32640,\n  /*  1830 */ 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822,\n  /*  1845 */ 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570,\n  /*  1860 */ 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058,\n  /*  1875 */ 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579,\n  /*  1890 */ 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186,\n  /*  1905 */ 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154,\n  /*  1920 */ 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  1935 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  1950 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  1965 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  1980 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  1995 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  2010 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  2025 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  2040 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 24031, 32640, 23861, 32640, 22776, 24082, 22912,\n  /*  2055 */ 56240, 24206, 24329, 32640, 25253, 32640, 24379, 32640, 32640, 18907, 32640, 23058, 57529, 31154, 19779,\n  /*  2070 */ 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451,\n  /*  2085 */ 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193,\n  /*  2100 */ 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534,\n  /*  2115 */ 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858,\n  /*  2130 */ 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291,\n  /*  2145 */ 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126,\n  /*  2160 */ 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101,\n  /*  2175 */ 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  2190 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  2205 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  2220 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  2235 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  2250 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  2265 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  2280 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  2295 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 24415, 24449, 24453, 24440, 24534, 24485,\n  /*  2310 */ 24515, 24566, 24596, 24628, 32640, 32105, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 21807, 31154,\n  /*  2325 */ 45903, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991,\n  /*  2340 */ 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106,\n  /*  2355 */ 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498,\n  /*  2370 */ 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026,\n  /*  2385 */ 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547,\n  /*  2400 */ 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084,\n  /*  2415 */ 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959,\n  /*  2430 */ 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  2445 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  2460 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  2475 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  2490 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  2505 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  2520 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  2535 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  2550 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 24678, 32640, 61740, 24746, 48361,\n  /*  2565 */ 53140, 24789, 24808, 24825, 24857, 32640, 27397, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 21807,\n  /*  2580 */ 31154, 45563, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957,\n  /*  2595 */ 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733,\n  /*  2610 */ 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119,\n  /*  2625 */ 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993,\n  /*  2640 */ 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488,\n  /*  2655 */ 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094,\n  /*  2670 */ 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899,\n  /*  2685 */ 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  2700 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  2715 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  2730 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  2745 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  2760 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  2775 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  2790 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  2805 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 24907, 32640, 61740, 32640,\n  /*  2820 */ 32640, 52064, 24984, 25013, 61799, 25045, 32640, 25253, 32640, 72986, 32640, 32640, 18907, 32640, 23058,\n  /*  2835 */ 21807, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 25095, 22057, 18887, 18787,\n  /*  2850 */ 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074,\n  /*  2865 */ 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538,\n  /*  2880 */ 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851,\n  /*  2895 */ 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518,\n  /*  2910 */ 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062,\n  /*  2925 */ 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839,\n  /*  2940 */ 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  2955 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  2970 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  2985 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  3000 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  3015 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  3030 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  3045 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  3060 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32640, 61740,\n  /*  3075 */ 32640, 32640, 54034, 25151, 25188, 25171, 25235, 32640, 25253, 32640, 72986, 32640, 32640, 18907, 32640,\n  /*  3090 */ 23058, 21807, 31154, 19779, 32640, 25302, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887,\n  /*  3105 */ 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342,\n  /*  3120 */ 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502,\n  /*  3135 */ 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019,\n  /*  3150 */ 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412,\n  /*  3165 */ 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030,\n  /*  3180 */ 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057,\n  /*  3195 */ 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640,\n  /*  3210 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  3225 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  3240 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  3255 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  3270 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  3285 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  3300 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  3315 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 25340, 32640,\n  /*  3330 */ 61740, 24702, 35413, 25353, 25385, 25402, 58363, 25449, 32640, 25253, 32640, 72986, 32640, 32640, 18907,\n  /*  3345 */ 32640, 23058, 21807, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057,\n  /*  3360 */ 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732,\n  /*  3375 */ 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470,\n  /*  3390 */ 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942,\n  /*  3405 */ 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521,\n  /*  3420 */ 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949,\n  /*  3435 */ 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802,\n  /*  3450 */ 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640,\n  /*  3465 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  3480 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  3495 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  3510 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  3525 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  3540 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  3555 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  3570 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 25499,\n  /*  3585 */ 32640, 61740, 32640, 32640, 53140, 25538, 25575, 25558, 25622, 32640, 25253, 32640, 72986, 32640, 32640,\n  /*  3600 */ 49347, 54782, 64809, 35297, 64457, 32024, 25672, 25724, 32640, 25308, 42746, 72012, 48724, 25775, 59604,\n  /*  3615 */ 63895, 70062, 53329, 26051, 44572, 32640, 32640, 53365, 69246, 32640, 64131, 72012, 72012, 25809, 25776,\n  /*  3630 */ 25776, 25844, 25983, 25984, 26051, 26051, 26018, 36217, 25878, 32640, 32640, 25912, 56403, 72012, 72012,\n  /*  3645 */ 47453, 69896, 25776, 64787, 25947, 25982, 26472, 26016, 26050, 68602, 32640, 32640, 21278, 65491, 41507,\n  /*  3660 */ 72012, 47768, 59999, 36922, 55439, 25983, 53287, 66001, 26051, 68608, 32640, 35129, 65495, 72012, 26084,\n  /*  3675 */ 25776, 26132, 25983, 66375, 26051, 26181, 26227, 36550, 62167, 71378, 26264, 56947, 53286, 26299, 56814,\n  /*  3690 */ 66968, 50229, 37146, 26336, 26407, 64681, 37193, 26609, 67516, 26450, 26504, 26590, 60773, 47253, 26654,\n  /*  3705 */ 26722, 26771, 49912, 26461, 51539, 26820, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640,\n  /*  3720 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  3735 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  3750 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  3765 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  3780 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  3795 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  3810 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  3825 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  3840 */ 22530, 32640, 61740, 32640, 32640, 29428, 26976, 69042, 27027, 27107, 32640, 25253, 32640, 27176, 32640,\n  /*  3855 */ 32640, 18907, 32640, 35800, 21807, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069,\n  /*  3870 */ 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341,\n  /*  3885 */ 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366,\n  /*  3900 */ 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878,\n  /*  3915 */ 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265,\n  /*  3930 */ 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789,\n  /*  3945 */ 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650,\n  /*  3960 */ 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640,\n  /*  3975 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  3990 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  4005 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  4020 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  4035 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  4050 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  4065 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  4080 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  4095 */ 32640, 27212, 32640, 18617, 32640, 32640, 53140, 27264, 27332, 41428, 27379, 32640, 25253, 32640, 27446,\n  /*  4110 */ 36386, 32640, 18907, 32640, 23058, 40482, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037,\n  /*  4125 */ 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819,\n  /*  4140 */ 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334,\n  /*  4155 */ 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811,\n  /*  4170 */ 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211,\n  /*  4185 */ 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885,\n  /*  4200 */ 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618,\n  /*  4215 */ 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640,\n  /*  4230 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  4245 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  4260 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  4275 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  4290 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  4305 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  4320 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  4335 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  4350 */ 32640, 32640, 27496, 32640, 61740, 32640, 32640, 45704, 22912, 32640, 27545, 27614, 32640, 25253, 32640,\n  /*  4365 */ 27679, 32640, 32640, 49347, 54782, 51035, 35297, 32640, 32024, 32640, 27715, 32640, 25308, 72012, 72012,\n  /*  4380 */ 48724, 25776, 59604, 25983, 61672, 26051, 26051, 49853, 32640, 32640, 70980, 32640, 32640, 64131, 72012,\n  /*  4395 */ 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 40010, 32640, 32640, 25692, 32640,\n  /*  4410 */ 68393, 72012, 72012, 27753, 25776, 25776, 39830, 25983, 25983, 39566, 26051, 26051, 43098, 32640, 32640,\n  /*  4425 */ 32640, 65491, 72012, 72012, 27795, 25776, 60349, 39842, 25983, 53287, 26051, 26051, 70527, 32640, 32640,\n  /*  4440 */ 65495, 72012, 46827, 25776, 55996, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955,\n  /*  4455 */ 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860,\n  /*  4470 */ 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933,\n  /*  4485 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  4500 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  4515 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  4530 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  4545 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  4560 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  4575 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  4590 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  4605 */ 32640, 32640, 32640, 27836, 32640, 26232, 27985, 34535, 60068, 27930, 27958, 60099, 28032, 32640, 32366,\n  /*  4620 */ 32640, 72986, 32640, 32640, 73079, 29194, 30273, 28620, 31154, 44986, 32640, 18612, 18649, 18757, 18789,\n  /*  4635 */ 18959, 32755, 28084, 30249, 28403, 29274, 28141, 28173, 28885, 36451, 32640, 24875, 69179, 19041, 62458,\n  /*  4650 */ 19134, 40819, 21681, 28259, 30189, 28317, 28376, 29214, 30382, 28201, 30288, 28732, 66570, 19251, 21244,\n  /*  4665 */ 41014, 19334, 19366, 19398, 28435, 28285, 28497, 28109, 28529, 28561, 28593, 28652, 28684, 28716, 19661,\n  /*  4680 */ 19735, 19811, 19878, 19910, 19942, 28764, 21709, 32781, 28826, 28935, 28991, 29023, 29361, 30055, 20090,\n  /*  4695 */ 20138, 20211, 20265, 29171, 28465, 29246, 28344, 29334, 29302, 29393, 20579, 20709, 20774, 29460, 29082,\n  /*  4710 */ 29111, 29139, 29492, 29611, 20949, 21030, 29555, 29643, 29675, 28857, 29707, 21310, 29804, 29832, 29864,\n  /*  4725 */ 29896, 29992, 30024, 30105, 30173, 28959, 30221, 29583, 29053, 28794, 28227, 30320, 30352, 29523, 30414,\n  /*  4740 */ 30442, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  4755 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  4770 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  4785 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  4800 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  4815 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  4830 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  4845 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  4860 */ 32640, 32640, 32640, 32640, 30485, 32640, 61740, 55714, 40332, 67370, 30532, 30549, 30500, 30596, 32640,\n  /*  4875 */ 25253, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 21807, 31154, 19779, 32640, 18612, 18649, 18757,\n  /*  4890 */ 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 25063, 69179, 19041,\n  /*  4905 */ 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 62487, 66570, 19251,\n  /*  4920 */ 64424, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 30661,\n  /*  4935 */ 19661, 19735, 19811, 19878, 19910, 19942, 30758, 30851, 33683, 30826, 30858, 20058, 19907, 21927, 19969,\n  /*  4950 */ 20090, 20138, 20211, 20265, 30890, 63521, 30967, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821,\n  /*  4965 */ 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374,\n  /*  4980 */ 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427,\n  /*  4995 */ 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  5010 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  5025 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  5040 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  5055 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  5070 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  5085 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  5100 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  5115 */ 32640, 32640, 32640, 32640, 32640, 22530, 32640, 61740, 32640, 32640, 32640, 31025, 31042, 31089, 31121,\n  /*  5130 */ 32640, 25253, 32640, 72986, 41921, 32640, 18907, 32640, 23058, 19161, 31154, 19779, 32640, 18612, 18649,\n  /*  5145 */ 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179,\n  /*  5160 */ 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570,\n  /*  5175 */ 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629,\n  /*  5190 */ 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927,\n  /*  5205 */ 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774,\n  /*  5220 */ 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452,\n  /*  5235 */ 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281,\n  /*  5250 */ 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  5265 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  5280 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  5295 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  5310 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  5325 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  5340 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  5355 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  5370 */ 32640, 32640, 32640, 32640, 32640, 32640, 31186, 32640, 61740, 32640, 32640, 53140, 31304, 31321, 61422,\n  /*  5385 */ 31368, 32640, 25253, 32640, 72986, 38336, 32640, 18907, 32640, 23058, 19597, 31154, 19779, 32640, 18612,\n  /*  5400 */ 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875,\n  /*  5415 */ 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438,\n  /*  5430 */ 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359,\n  /*  5445 */ 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907,\n  /*  5460 */ 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709,\n  /*  5475 */ 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310,\n  /*  5490 */ 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249,\n  /*  5505 */ 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  5520 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  5535 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  5550 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  5565 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  5580 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  5595 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  5610 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  5625 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31436, 32640, 22917, 32640, 32640, 53140, 31488, 31505,\n  /*  5640 */ 63455, 31552, 32640, 25253, 32640, 72986, 23911, 32640, 18907, 32640, 23058, 20233, 31154, 19779, 32640,\n  /*  5655 */ 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640,\n  /*  5670 */ 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822,\n  /*  5685 */ 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570,\n  /*  5700 */ 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058,\n  /*  5715 */ 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579,\n  /*  5730 */ 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186,\n  /*  5745 */ 21310, 21452, 21374, 21431, 21484, 21618, 21650, 31603, 21802, 23057, 21839, 21899, 21959, 22101, 21154,\n  /*  5760 */ 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  5775 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  5790 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  5805 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  5820 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  5835 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  5850 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  5865 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  5880 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31688, 32640, 61740, 27887, 32640, 57839, 22912,\n  /*  5895 */ 31734, 24347, 31775, 32640, 25253, 32640, 31840, 32640, 32640, 18907, 32640, 57508, 20515, 31154, 19779,\n  /*  5910 */ 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451,\n  /*  5925 */ 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193,\n  /*  5940 */ 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534,\n  /*  5955 */ 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858,\n  /*  5970 */ 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291,\n  /*  5985 */ 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126,\n  /*  6000 */ 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101,\n  /*  6015 */ 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  6030 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  6045 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  6060 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  6075 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  6090 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  6105 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  6120 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  6135 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32640, 61740, 32640, 32640, 53140,\n  /*  6150 */ 22912, 32640, 62571, 27379, 32640, 25253, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 21807, 31154,\n  /*  6165 */ 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991,\n  /*  6180 */ 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106,\n  /*  6195 */ 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498,\n  /*  6210 */ 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026,\n  /*  6225 */ 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547,\n  /*  6240 */ 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084,\n  /*  6255 */ 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959,\n  /*  6270 */ 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  6285 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  6300 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  6315 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  6330 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  6345 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  6360 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  6375 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  6390 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640,\n  /*  6405 */ 53140, 22912, 36567, 70299, 34240, 32640, 25253, 32640, 32640, 32640, 32640, 49347, 54782, 64809, 51195,\n  /*  6420 */ 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051,\n  /*  6435 */ 53000, 32640, 32640, 25682, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984,\n  /*  6450 */ 26051, 26051, 26018, 34467, 32640, 32640, 25692, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427,\n  /*  6465 */ 25983, 25983, 39566, 26051, 26051, 43098, 32640, 32640, 46497, 65491, 72012, 72012, 51277, 25776, 46932,\n  /*  6480 */ 39842, 25983, 53287, 26051, 26051, 70527, 32640, 32640, 65495, 72012, 46827, 25776, 55996, 25983, 53288,\n  /*  6495 */ 26051, 37187, 32640, 52315, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947,\n  /*  6510 */ 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461,\n  /*  6525 */ 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  6540 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  6555 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  6570 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  6585 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  6600 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  6615 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  6630 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  6645 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 32640,\n  /*  6660 */ 32640, 53140, 22912, 36567, 70299, 34240, 32640, 25253, 32640, 32640, 32640, 32640, 49347, 54782, 64809,\n  /*  6675 */ 51195, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051,\n  /*  6690 */ 26051, 53000, 32640, 32640, 25682, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983,\n  /*  6705 */ 25984, 26051, 26051, 26018, 34467, 32640, 32640, 25692, 32640, 68393, 72012, 72012, 33962, 25776, 25776,\n  /*  6720 */ 55427, 25983, 25983, 39566, 26051, 26051, 43098, 32640, 32640, 32640, 65491, 72012, 72012, 51277, 25776,\n  /*  6735 */ 46932, 39842, 25983, 53287, 26051, 26051, 70527, 32640, 32640, 65495, 72012, 46827, 25776, 55996, 25983,\n  /*  6750 */ 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381,\n  /*  6765 */ 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912,\n  /*  6780 */ 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  6795 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  6810 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  6825 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  6840 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  6855 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  6870 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  6885 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  6900 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814,\n  /*  6915 */ 32640, 32640, 53140, 22912, 36567, 70299, 34240, 32640, 25253, 32640, 32640, 32640, 32640, 49347, 54782,\n  /*  6930 */ 64809, 51195, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672,\n  /*  6945 */ 26051, 26051, 53000, 32640, 32640, 25682, 32497, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844,\n  /*  6960 */ 25983, 25984, 26051, 26051, 26018, 34467, 32640, 32640, 25692, 32640, 68393, 72012, 72012, 33962, 25776,\n  /*  6975 */ 25776, 55427, 25983, 25983, 39566, 26051, 26051, 43098, 32640, 32640, 32640, 65491, 72012, 72012, 51277,\n  /*  6990 */ 25776, 46932, 39842, 25983, 53287, 26051, 26051, 70527, 32640, 32640, 65495, 72012, 46827, 25776, 55996,\n  /*  7005 */ 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392,\n  /*  7020 */ 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861,\n  /*  7035 */ 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640,\n  /*  7050 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  7065 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  7080 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  7095 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  7110 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  7125 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  7140 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  7155 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640,\n  /*  7170 */ 72814, 32640, 32640, 53140, 22912, 36567, 70299, 34240, 32640, 25253, 32640, 32640, 32640, 32640, 49347,\n  /*  7185 */ 54782, 64809, 51195, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983,\n  /*  7200 */ 61672, 26051, 26051, 53000, 32640, 32640, 25682, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776,\n  /*  7215 */ 25844, 25983, 25984, 26051, 26051, 26018, 34467, 32640, 32640, 20179, 32640, 68393, 72012, 72012, 33962,\n  /*  7230 */ 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 43098, 32640, 32640, 32640, 65491, 72012, 72012,\n  /*  7245 */ 51277, 25776, 46932, 39842, 25983, 53287, 26051, 26051, 70527, 32640, 32640, 65495, 72012, 46827, 25776,\n  /*  7260 */ 55996, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640,\n  /*  7275 */ 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921,\n  /*  7290 */ 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640,\n  /*  7305 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  7320 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  7335 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  7350 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  7365 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  7380 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  7395 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  7410 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905,\n  /*  7425 */ 32640, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 34240, 32640, 25253, 32640, 31980, 32640, 32640,\n  /*  7440 */ 49347, 54782, 64809, 51195, 32640, 32024, 32640, 31979, 32640, 25308, 72012, 72012, 31942, 25776, 62010,\n  /*  7455 */ 25983, 61672, 26051, 26051, 53000, 32640, 32640, 25682, 32640, 32640, 64131, 72012, 72012, 25809, 25776,\n  /*  7470 */ 25776, 25844, 25983, 25984, 26051, 26051, 26018, 34467, 32640, 32640, 25692, 32640, 68393, 72012, 72012,\n  /*  7485 */ 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 43098, 32640, 32640, 32640, 65491, 72012,\n  /*  7500 */ 72012, 51277, 25776, 46932, 39842, 25983, 53287, 26051, 26051, 70527, 32640, 32640, 65495, 72012, 46827,\n  /*  7515 */ 25776, 55996, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302,\n  /*  7530 */ 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746,\n  /*  7545 */ 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640,\n  /*  7560 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  7575 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  7590 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  7605 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  7620 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  7635 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  7650 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  7665 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  7680 */ 31905, 32640, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 34240, 32640, 25253, 32640, 32640, 32640,\n  /*  7695 */ 32640, 49347, 54782, 64809, 51195, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 31942, 25776,\n  /*  7710 */ 62010, 25983, 61672, 26051, 26051, 44572, 32640, 32640, 32640, 32640, 32640, 64131, 72012, 72012, 25809,\n  /*  7725 */ 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 58552, 32640, 32640, 32640, 32640, 68393, 72012,\n  /*  7740 */ 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 68602, 32640, 32640, 32640, 65491,\n  /*  7755 */ 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051, 26051, 68608, 32640, 32640, 65495, 72012,\n  /*  7770 */ 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051,\n  /*  7785 */ 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146,\n  /*  7800 */ 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640,\n  /*  7815 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  7830 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  7845 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  7860 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  7875 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  7890 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  7905 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  7920 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  7935 */ 32640, 31905, 32640, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 34240, 32640, 25253, 32640, 32640,\n  /*  7950 */ 32640, 32640, 49347, 54782, 64809, 69771, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 31942,\n  /*  7965 */ 25776, 62010, 25983, 61672, 26051, 26051, 44572, 32640, 32640, 32640, 32640, 32640, 64131, 72012, 72012,\n  /*  7980 */ 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 58552, 32640, 32640, 32640, 32640, 68393,\n  /*  7995 */ 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 68602, 32640, 32640, 32640,\n  /*  8010 */ 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051, 26051, 68608, 32640, 32640, 65495,\n  /*  8025 */ 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286,\n  /*  8040 */ 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375,\n  /*  8055 */ 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640,\n  /*  8070 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  8085 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  8100 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  8115 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  8130 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  8145 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  8160 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  8175 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  8190 */ 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 41903, 32640, 25253, 32640,\n  /*  8205 */ 32640, 32640, 32640, 49347, 54782, 64809, 51195, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012,\n  /*  8220 */ 31942, 25776, 62010, 25983, 61672, 26051, 26051, 44572, 32640, 32640, 32640, 32640, 32640, 64131, 72012,\n  /*  8235 */ 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 58552, 32640, 32640, 32640, 32640,\n  /*  8250 */ 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 68602, 32640, 32640,\n  /*  8265 */ 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051, 26051, 68608, 32640, 32640,\n  /*  8280 */ 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955,\n  /*  8295 */ 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860,\n  /*  8310 */ 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933,\n  /*  8325 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  8340 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  8355 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  8370 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  8385 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  8400 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  8415 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  8430 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  8445 */ 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 32012, 36567, 70299, 34240, 32640, 25253,\n  /*  8460 */ 32640, 32640, 32640, 32640, 49347, 54782, 64809, 51195, 32640, 32024, 32640, 57111, 32640, 25308, 72012,\n  /*  8475 */ 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 44572, 32640, 32640, 32640, 32640, 32640, 64131,\n  /*  8490 */ 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 58552, 32640, 32640, 32640,\n  /*  8505 */ 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 68602, 32640,\n  /*  8520 */ 32640, 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051, 26051, 68608, 32640,\n  /*  8535 */ 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776,\n  /*  8550 */ 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860,\n  /*  8565 */ 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905,\n  /*  8580 */ 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  8595 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  8610 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  8625 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  8640 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  8655 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  8670 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  8685 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  8700 */ 32640, 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 22912, 27513, 32056, 32087, 32640,\n  /*  8715 */ 25253, 32640, 32640, 32640, 32640, 49347, 54782, 64809, 51195, 32640, 32024, 32640, 32640, 32640, 25308,\n  /*  8730 */ 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 44572, 32640, 32640, 32640, 32640, 32640,\n  /*  8745 */ 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 58552, 32640, 32640,\n  /*  8760 */ 32640, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 68602,\n  /*  8775 */ 32640, 32640, 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051, 26051, 68608,\n  /*  8790 */ 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378,\n  /*  8805 */ 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465,\n  /*  8820 */ 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815,\n  /*  8835 */ 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  8850 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  8865 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  8880 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  8895 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  8910 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  8925 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  8940 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  8955 */ 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 34240,\n  /*  8970 */ 32640, 25253, 32640, 32640, 32640, 32640, 49347, 54782, 64809, 51195, 32640, 32024, 32640, 32640, 32640,\n  /*  8985 */ 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 44572, 32640, 32640, 32640, 32640,\n  /*  9000 */ 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 58552, 32640,\n  /*  9015 */ 32640, 32640, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051,\n  /*  9030 */ 68602, 32640, 32640, 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051, 26051,\n  /*  9045 */ 68608, 32640, 31793, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131,\n  /*  9060 */ 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375,\n  /*  9075 */ 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535,\n  /*  9090 */ 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  9105 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  9120 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  9135 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  9150 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  9165 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  9180 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  9195 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  9210 */ 32640, 32640, 32640, 32640, 32640, 32640, 32154, 32640, 72814, 32640, 32640, 53140, 22912, 36567, 70299,\n  /*  9225 */ 34240, 32640, 25253, 32640, 32640, 32640, 32640, 49347, 54782, 64809, 51195, 32640, 32024, 32640, 32640,\n  /*  9240 */ 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 44572, 32640, 32640, 32640,\n  /*  9255 */ 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 58552,\n  /*  9270 */ 32640, 32640, 32640, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051,\n  /*  9285 */ 26051, 68602, 32640, 32640, 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051,\n  /*  9300 */ 26051, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640,\n  /*  9315 */ 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609,\n  /*  9330 */ 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716,\n  /*  9345 */ 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  9360 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  9375 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  9390 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  9405 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  9420 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  9435 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  9450 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  9465 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32191, 32640, 61740, 32640, 32640, 53140, 32266, 32219,\n  /*  9480 */ 32317, 32348, 32640, 25253, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 21807, 31154, 19779, 32640,\n  /*  9495 */ 32398, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640,\n  /*  9510 */ 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822,\n  /*  9525 */ 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570,\n  /*  9540 */ 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058,\n  /*  9555 */ 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579,\n  /*  9570 */ 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 32449, 21030, 21062, 21094, 21084, 21126, 21186,\n  /*  9585 */ 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154,\n  /*  9600 */ 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  9615 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  9630 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  9645 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  9660 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  9675 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  9690 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  9705 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  9720 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32640, 61740, 32640, 32640, 53140, 22912,\n  /*  9735 */ 32640, 32640, 32541, 32640, 25253, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 40482, 31154, 19779,\n  /*  9750 */ 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451,\n  /*  9765 */ 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193,\n  /*  9780 */ 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534,\n  /*  9795 */ 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858,\n  /*  9810 */ 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291,\n  /*  9825 */ 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126,\n  /*  9840 */ 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101,\n  /*  9855 */ 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  9870 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  9885 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  9900 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  9915 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  9930 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  9945 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  9960 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /*  9975 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32639, 61740, 32640, 32640, 53140,\n  /*  9990 */ 32606, 32625, 66147, 32673, 32640, 25253, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 21807, 31154,\n  /* 10005 */ 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991,\n  /* 10020 */ 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106,\n  /* 10035 */ 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498,\n  /* 10050 */ 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026,\n  /* 10065 */ 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547,\n  /* 10080 */ 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084,\n  /* 10095 */ 21126, 21186, 32724, 21452, 21374, 21431, 32813, 21618, 21650, 32920, 21802, 23057, 21839, 21899, 21959,\n  /* 10110 */ 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 10125 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 10140 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 10155 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 10170 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 10185 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 10200 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 10215 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 10230 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32640, 61740, 32640, 32640,\n  /* 10245 */ 53140, 22912, 32640, 32640, 27379, 32640, 25253, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 21807,\n  /* 10260 */ 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957,\n  /* 10275 */ 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733,\n  /* 10290 */ 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119,\n  /* 10305 */ 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993,\n  /* 10320 */ 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488,\n  /* 10335 */ 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094,\n  /* 10350 */ 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899,\n  /* 10365 */ 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 10380 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 10395 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 10410 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 10425 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 10440 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 10455 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 10470 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 10485 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 33014, 72814, 65242,\n  /* 10500 */ 23329, 65262, 33049, 33078, 33110, 33141, 72172, 33868, 38406, 33224, 33302, 35892, 33415, 33497, 33529,\n  /* 10515 */ 33657, 32640, 70241, 33715, 23262, 70547, 65483, 72012, 56115, 31942, 25776, 33771, 25983, 62395, 26051,\n  /* 10530 */ 60426, 53000, 43338, 33820, 20169, 33900, 28052, 33936, 72012, 34004, 34096, 25776, 69679, 34153, 25983,\n  /* 10545 */ 34209, 34305, 26051, 34381, 34413, 59316, 60982, 34567, 18580, 43988, 66280, 56105, 34613, 34671, 54769,\n  /* 10560 */ 57995, 34763, 50540, 69616, 34835, 44365, 69116, 72659, 27683, 51215, 45101, 34941, 55781, 57901, 25776,\n  /* 10575 */ 68182, 34981, 25983, 35037, 38017, 43551, 35100, 35168, 46148, 32692, 38542, 69316, 67857, 54357, 35200,\n  /* 10590 */ 37506, 35270, 39191, 36089, 32640, 37090, 24260, 50683, 56669, 60278, 35348, 46302, 32640, 68392, 71381,\n  /* 10605 */ 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 43929, 35445, 35530, 35582,\n  /* 10620 */ 50980, 66874, 47849, 48295, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 10635 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 10650 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 10665 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 10680 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 10695 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 10710 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 10725 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 10740 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 35651, 72814,\n  /* 10755 */ 32640, 32640, 53140, 35689, 35718, 35750, 35781, 32640, 25253, 32640, 32640, 32640, 32640, 42703, 63159,\n  /* 10770 */ 35832, 71490, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672,\n  /* 10785 */ 26051, 26051, 53000, 32640, 32640, 71083, 54414, 54421, 64131, 72012, 55872, 25809, 25776, 60149, 25844,\n  /* 10800 */ 25983, 63179, 26051, 26051, 34327, 34467, 32640, 32640, 25692, 32640, 68393, 72012, 72012, 33962, 25776,\n  /* 10815 */ 25776, 55427, 25983, 25983, 39566, 26051, 26051, 43098, 32640, 35952, 27144, 30726, 72012, 63213, 63138,\n  /* 10830 */ 25776, 69714, 35989, 25983, 42068, 36035, 26051, 36069, 32640, 32640, 65495, 72012, 46827, 25776, 55996,\n  /* 10845 */ 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392,\n  /* 10860 */ 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861,\n  /* 10875 */ 20456, 36134, 36191, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640,\n  /* 10890 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 10905 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 10920 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 10935 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 10950 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 10965 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 10980 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 10995 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 64516,\n  /* 11010 */ 72814, 48426, 59530, 63767, 36272, 36304, 36336, 36367, 32640, 36432, 25203, 32640, 32640, 41660, 37716,\n  /* 11025 */ 55922, 36483, 36530, 48415, 59494, 31702, 18855, 62820, 64973, 39682, 72012, 36599, 25776, 18725, 36659,\n  /* 11040 */ 69934, 36699, 26051, 52493, 36750, 23246, 55732, 34581, 32640, 18679, 55301, 36783, 36820, 35485, 36918,\n  /* 11055 */ 36954, 37494, 37030, 64702, 65892, 37178, 34467, 32640, 37225, 65319, 32640, 68393, 72012, 37261, 33962,\n  /* 11070 */ 25776, 37316, 55427, 25983, 39119, 39566, 26051, 49047, 43098, 37375, 42559, 23999, 65491, 72012, 48479,\n  /* 11085 */ 51277, 25776, 37411, 39842, 45287, 53287, 26051, 67220, 70527, 32640, 37538, 37571, 37131, 46827, 23541,\n  /* 11100 */ 55996, 67894, 53288, 53572, 47622, 37618, 25915, 66600, 37659, 46843, 32872, 37796, 37836, 46302, 47046,\n  /* 11115 */ 68392, 23524, 65621, 25983, 37889, 41315, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921,\n  /* 11130 */ 43861, 37927, 37988, 38060, 47849, 36159, 34716, 26535, 44815, 38151, 26933, 32640, 32640, 32640, 32640,\n  /* 11145 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 11160 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 11175 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 11190 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 11205 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 11220 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 11235 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 11250 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905,\n  /* 11265 */ 20106, 72814, 32509, 23162, 53140, 38224, 38253, 38285, 38316, 32640, 25253, 32640, 32640, 60657, 39330,\n  /* 11280 */ 34441, 50711, 54836, 51195, 33270, 38384, 46719, 22206, 33192, 38438, 72385, 38511, 38616, 40937, 20657,\n  /* 11295 */ 38673, 38705, 39528, 38892, 38940, 32640, 47380, 49323, 32640, 70823, 64131, 72012, 32968, 25809, 25776,\n  /* 11310 */ 45195, 25844, 25983, 46666, 26051, 26051, 58683, 38996, 32640, 59450, 25692, 27180, 22361, 39052, 64136,\n  /* 11325 */ 40912, 42209, 25776, 39090, 66443, 25983, 39151, 60300, 26051, 39223, 32640, 32640, 36102, 70444, 72012,\n  /* 11340 */ 71366, 65683, 25776, 39291, 39362, 35619, 34803, 26051, 43538, 70527, 72942, 37229, 65495, 39402, 46827,\n  /* 11355 */ 39434, 39492, 52767, 39560, 39598, 39731, 22659, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302,\n  /* 11370 */ 19837, 68392, 68106, 33972, 25983, 39769, 58918, 26609, 71375, 56493, 39511, 67952, 33375, 70146, 67746,\n  /* 11385 */ 39807, 39877, 27300, 39932, 39984, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640,\n  /* 11400 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 11415 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 11430 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 11445 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 11460 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 11475 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 11490 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 11505 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 11520 */ 31905, 22609, 72814, 27464, 30794, 40060, 40119, 40148, 40180, 40211, 40263, 40295, 40364, 40412, 40514,\n  /* 11535 */ 40546, 40606, 40667, 40699, 40731, 40783, 20976, 40854, 40994, 52527, 25308, 41046, 39699, 41078, 46357,\n  /* 11550 */ 49141, 41137, 44544, 41236, 41286, 41368, 47192, 41460, 41554, 41610, 40087, 41703, 41735, 41816, 41872,\n  /* 11565 */ 41968, 42030, 42100, 42250, 42282, 42373, 42458, 42490, 42522, 42554, 42591, 31571, 42679, 24113, 42735,\n  /* 11580 */ 42778, 42826, 42887, 59586, 42933, 43014, 20677, 52796, 43080, 37857, 50773, 19009, 50153, 72778, 68055,\n  /* 11595 */ 66201, 43130, 61992, 43205, 43285, 43380, 36003, 43457, 50341, 43583, 43639, 62580, 43704, 43740, 65764,\n  /* 11610 */ 46827, 43772, 55996, 43804, 43857, 43893, 43961, 72604, 44020, 44104, 67022, 44136, 44196, 44228, 44289,\n  /* 11625 */ 44397, 41399, 46788, 44452, 69369, 44513, 44648, 70208, 20438, 68896, 51376, 63626, 44257, 54317, 44622,\n  /* 11640 */ 67433, 55113, 55250, 49487, 51457, 67801, 44680, 44712, 34716, 38736, 44788, 26905, 26933, 32640, 32640,\n  /* 11655 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 11670 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 11685 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 11700 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 11715 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 11730 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 11745 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 11760 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 11775 */ 32640, 31905, 54076, 72814, 67462, 71804, 46979, 44874, 44903, 44935, 44966, 65157, 25253, 32640, 32640,\n  /* 11790 */ 45018, 45029, 45061, 36627, 47904, 71490, 70229, 49986, 32640, 30141, 65148, 45093, 45133, 72012, 45175,\n  /* 11805 */ 25776, 67154, 25983, 61672, 45240, 26051, 53000, 32640, 32640, 25682, 32640, 30614, 64131, 72012, 62187,\n  /* 11820 */ 25809, 25776, 34052, 25844, 25983, 58051, 26051, 26051, 68586, 34467, 32640, 32640, 25692, 49974, 68393,\n  /* 11835 */ 36788, 72012, 33962, 51715, 25776, 55427, 25983, 45283, 39566, 26051, 45319, 43098, 32640, 32640, 22533,\n  /* 11850 */ 65491, 72012, 65748, 51277, 25776, 40635, 39842, 48131, 53287, 26051, 72059, 70527, 32640, 32640, 65495,\n  /* 11865 */ 72012, 46827, 25776, 55996, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286,\n  /* 11880 */ 26051, 26195, 32640, 30913, 33383, 31947, 68516, 43425, 37193, 26609, 71375, 60465, 43860, 58860, 33375,\n  /* 11895 */ 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 38767, 44815, 45355, 26933, 32640,\n  /* 11910 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 11925 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 11940 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 11955 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 11970 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 11985 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 12000 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 12015 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 12030 */ 32640, 32640, 31905, 32640, 72814, 72990, 32640, 53140, 45461, 45480, 45512, 45543, 32640, 25253, 25880,\n  /* 12045 */ 32640, 32640, 32640, 49347, 54782, 64809, 65216, 32640, 32024, 32640, 29772, 32640, 25308, 72012, 72012,\n  /* 12060 */ 31942, 25776, 62010, 25983, 61672, 26051, 26051, 44572, 32640, 32640, 32640, 26944, 43348, 64131, 72012,\n  /* 12075 */ 72012, 45595, 25776, 25776, 45631, 25983, 25984, 26051, 26051, 26018, 58552, 32640, 45666, 62963, 32640,\n  /* 12090 */ 45736, 45143, 72012, 33962, 47777, 25776, 55427, 45634, 25983, 39566, 62106, 26051, 66507, 32640, 61374,\n  /* 12105 */ 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051, 26051, 68608, 32640, 45776,\n  /* 12120 */ 65495, 72012, 45833, 25776, 43236, 25983, 48970, 26051, 35378, 19759, 45883, 40885, 45935, 34121, 45988,\n  /* 12135 */ 46059, 68691, 46114, 46509, 48784, 46180, 46232, 52911, 56583, 46294, 61320, 46334, 46389, 52972, 46541,\n  /* 12150 */ 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 57068, 26905, 26933,\n  /* 12165 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 12180 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 12195 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 12210 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 12225 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 12240 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 12255 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 12270 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 12285 */ 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 37061, 32640, 46592,\n  /* 12300 */ 32640, 23927, 23933, 35920, 72528, 46641, 71255, 46698, 32640, 41638, 46765, 32640, 32640, 25308, 72012,\n  /* 12315 */ 32982, 31942, 25812, 62010, 25983, 52465, 26051, 62071, 44572, 32640, 32640, 32640, 32640, 46875, 64131,\n  /* 12330 */ 72012, 72012, 46928, 25776, 25777, 25844, 25983, 25846, 26051, 26051, 48238, 66922, 32640, 32640, 32640,\n  /* 12345 */ 58432, 34888, 72012, 72012, 24139, 25776, 25776, 64186, 25983, 25983, 64365, 26051, 26051, 68602, 32640,\n  /* 12360 */ 31139, 32640, 65491, 72012, 59125, 47768, 25776, 23575, 39842, 25983, 43409, 26051, 51585, 68608, 32640,\n  /* 12375 */ 40326, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776,\n  /* 12390 */ 29955, 53286, 26051, 46302, 23989, 59115, 71381, 31947, 25983, 51580, 26788, 46560, 61892, 58181, 67203,\n  /* 12405 */ 61301, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905,\n  /* 12420 */ 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 12435 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 12450 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 12465 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 12480 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 12495 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 12510 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 12525 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 12540 */ 32640, 32640, 32640, 32640, 31905, 48851, 72814, 23672, 46964, 47011, 47078, 47108, 47140, 47171, 32640,\n  /* 12555 */ 41336, 32640, 50620, 20998, 40574, 47224, 47285, 49169, 47359, 32640, 35316, 31404, 32640, 22498, 71540,\n  /* 12570 */ 47426, 22395, 47485, 41998, 47553, 68243, 35005, 43487, 49590, 47654, 45801, 22675, 32476, 32285, 47707,\n  /* 12585 */ 67491, 67589, 47739, 47809, 47521, 53771, 47881, 39370, 54202, 70106, 63727, 47936, 58552, 32640, 49793,\n  /* 12600 */ 48007, 32640, 65551, 71979, 37586, 48049, 48729, 71596, 33444, 48130, 48163, 50320, 48235, 48270, 34864,\n  /* 12615 */ 70560, 48327, 48393, 48458, 72887, 48523, 38468, 37956, 42313, 48632, 55501, 51516, 36886, 48664, 48761,\n  /* 12630 */ 48816, 50855, 27414, 41840, 48883, 63268, 48941, 45429, 49017, 55015, 49079, 32640, 22725, 23734, 49111,\n  /* 12645 */ 51113, 69533, 55593, 49224, 46302, 49298, 68392, 71381, 31947, 25983, 51580, 58698, 26609, 49388, 58232,\n  /* 12660 */ 70503, 49450, 42622, 70146, 67746, 49519, 60834, 49912, 26461, 39900, 47849, 56608, 49551, 26535, 44815,\n  /* 12675 */ 49622, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 12690 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 12705 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 12720 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 12735 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 12750 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 12765 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 12780 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 12795 */ 32640, 32640, 32640, 32640, 32640, 31905, 69860, 72814, 32640, 32640, 53140, 22912, 46609, 49741, 49772,\n  /* 12810 */ 32640, 25253, 32640, 32640, 32640, 32640, 49347, 54782, 64809, 51195, 32640, 32024, 32640, 32640, 32640,\n  /* 12825 */ 25308, 72012, 57444, 31942, 38479, 62010, 25983, 49825, 26051, 53559, 44572, 32640, 32640, 32640, 32640,\n  /* 12840 */ 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 58552, 32640,\n  /* 12855 */ 32640, 32640, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051,\n  /* 12870 */ 68602, 32640, 32640, 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051, 26051,\n  /* 12885 */ 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131,\n  /* 12900 */ 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375,\n  /* 12915 */ 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535,\n  /* 12930 */ 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 12945 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 12960 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 12975 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 12990 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 13005 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 13020 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 13035 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 13050 */ 32640, 32640, 32640, 32640, 32640, 32640, 31905, 59709, 72814, 32640, 32640, 53140, 22912, 36567, 70299,\n  /* 13065 */ 34240, 32640, 25253, 61385, 32640, 32640, 32640, 49347, 54782, 64809, 51195, 32640, 32024, 32640, 32640,\n  /* 13080 */ 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 44572, 32640, 32640, 32640,\n  /* 13095 */ 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 55063,\n  /* 13110 */ 32640, 32640, 32640, 32640, 51342, 72012, 72012, 34031, 25776, 25776, 21586, 25983, 25983, 37804, 26051,\n  /* 13125 */ 26051, 68602, 32640, 32640, 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051,\n  /* 13140 */ 26051, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640,\n  /* 13155 */ 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609,\n  /* 13170 */ 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716,\n  /* 13185 */ 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 13200 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 13215 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 13230 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 13245 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 13260 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 13275 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 13290 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 13305 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 52831, 72814, 72305, 49953, 50018, 50050, 50069,\n  /* 13320 */ 50101, 50132, 70815, 25253, 24050, 32640, 72261, 50206, 50261, 50293, 50389, 50456, 50572, 49266, 32159,\n  /* 13335 */ 46476, 50609, 46896, 49653, 37284, 50652, 61556, 51136, 34792, 50743, 43516, 41182, 50834, 50887, 32640,\n  /* 13350 */ 37764, 32640, 32640, 39657, 23757, 50924, 50956, 53683, 55377, 51012, 52437, 51082, 71275, 51168, 51247,\n  /* 13365 */ 58552, 31456, 32640, 51318, 32640, 68393, 71632, 34909, 33962, 25776, 51408, 55427, 25983, 51489, 51571,\n  /* 13380 */ 26051, 51617, 51676, 60646, 71309, 32640, 65491, 66269, 72012, 47768, 51714, 36922, 67551, 25983, 53287,\n  /* 13395 */ 50411, 26051, 51682, 70346, 19987, 51747, 72012, 24952, 25776, 68123, 51821, 47327, 51856, 50424, 31808,\n  /* 13410 */ 72723, 44072, 71378, 24163, 55203, 53286, 67732, 46302, 62840, 68392, 67136, 45208, 51824, 51580, 51892,\n  /* 13425 */ 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 49192, 51996, 52096,\n  /* 13440 */ 48579, 26535, 57041, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 13455 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 13470 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 13485 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 13500 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 13515 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 13530 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 13545 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 13560 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32641, 72814, 32640, 52167, 20380, 52202,\n  /* 13575 */ 52231, 52263, 52294, 52373, 25253, 38352, 32640, 52375, 52359, 29926, 52407, 61167, 51195, 57599, 32024,\n  /* 13590 */ 25590, 52525, 32640, 52559, 51778, 52613, 52685, 43173, 52736, 25950, 43825, 49580, 44319, 53632, 52043,\n  /* 13605 */ 52828, 32640, 32640, 32640, 58759, 38563, 72012, 52863, 54749, 25776, 52943, 55231, 25984, 38908, 53056,\n  /* 13620 */ 26018, 58552, 53105, 32640, 22853, 53172, 39020, 53205, 55838, 69472, 53239, 53488, 67539, 53276, 33788,\n  /* 13635 */ 39566, 53320, 63643, 68602, 32640, 32640, 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983,\n  /* 13650 */ 53287, 26051, 26051, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187,\n  /* 13665 */ 53361, 32640, 72366, 71378, 53397, 57660, 53286, 53431, 46302, 32640, 68392, 71381, 47833, 35238, 66390,\n  /* 13680 */ 37193, 26609, 71375, 60465, 43860, 63958, 50482, 38641, 53073, 53467, 53538, 49912, 26461, 39900, 47849,\n  /* 13695 */ 36159, 48078, 53604, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 13710 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 13725 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 13740 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 13755 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 13770 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 13785 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 13800 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 13815 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 53715, 36751, 53803, 53858,\n  /* 13830 */ 53921, 53950, 53982, 54013, 68341, 65423, 54066, 22337, 73196, 54108, 54140, 54172, 54234, 54389, 39321,\n  /* 13845 */ 25417, 42341, 50174, 54455, 44050, 56059, 66616, 54504, 54555, 45851, 57679, 42130, 56789, 64232, 60925,\n  /* 13860 */ 56829, 19692, 32640, 54689, 69055, 20609, 57455, 72012, 54726, 52653, 25776, 54814, 63908, 25984, 61227,\n  /* 13875 */ 36498, 26018, 58552, 32640, 47394, 24383, 68318, 72870, 72012, 54868, 18707, 25776, 69705, 54929, 25983,\n  /* 13890 */ 71927, 54995, 26051, 43915, 55047, 31632, 29738, 32574, 55095, 55145, 55282, 55174, 55347, 55409, 55471,\n  /* 13905 */ 55533, 55625, 55661, 26850, 67349, 33333, 55693, 55764, 55813, 55904, 55954, 45409, 55563, 59673, 58326,\n  /* 13920 */ 64010, 31239, 37627, 56028, 56147, 63574, 71739, 56202, 48600, 52021, 33017, 44420, 56272, 51439, 56304,\n  /* 13935 */ 26558, 56379, 49469, 56435, 56525, 55629, 58860, 53658, 56557, 38796, 56640, 56760, 53746, 56861, 56918,\n  /* 13950 */ 47849, 36159, 34716, 35068, 57014, 26905, 57100, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 13965 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 13980 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 13995 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 14010 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 14025 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 14040 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 14055 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 14070 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 57143, 60501, 46140,\n  /* 14085 */ 53140, 57269, 57298, 57330, 57361, 57393, 21867, 57487, 53826, 57561, 73137, 57631, 57725, 57757, 57818,\n  /* 14100 */ 64532, 33845, 25743, 28903, 32640, 30718, 48491, 57871, 57933, 57965, 50507, 34177, 46420, 65902, 58083,\n  /* 14115 */ 44572, 34502, 27347, 47675, 69192, 32417, 27057, 58115, 45744, 58167, 58213, 58473, 58264, 36980, 26375,\n  /* 14130 */ 58296, 44349, 69977, 37742, 31057, 58358, 32640, 35957, 68393, 49673, 58395, 33962, 23558, 65824, 55427,\n  /* 14145 */ 66456, 46015, 39566, 60313, 47611, 68602, 32640, 47038, 58431, 65491, 72012, 72012, 58464, 25776, 27804,\n  /* 14160 */ 58505, 25983, 57693, 26051, 26051, 58542, 33253, 32640, 51913, 22383, 49691, 64312, 64327, 50524, 46027,\n  /* 14175 */ 71028, 38028, 53132, 32640, 21514, 49356, 67641, 68454, 61634, 65986, 49249, 32640, 68392, 71381, 31947,\n  /* 14190 */ 25983, 51580, 39737, 67971, 58592, 35498, 68821, 42982, 65031, 58624, 58730, 58791, 58892, 49912, 26461,\n  /* 14205 */ 39900, 47849, 36159, 34716, 60897, 62262, 58971, 59003, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 14220 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 14235 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 14250 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 14265 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 14280 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 14295 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 14310 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 14325 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 53024, 32640,\n  /* 14340 */ 59046, 59088, 59157, 59186, 59218, 59249, 26690, 25253, 32640, 62512, 59314, 32640, 21399, 45956, 59348,\n  /* 14355 */ 59428, 60204, 32024, 59282, 59482, 59526, 27721, 62325, 42794, 59562, 37343, 41105, 59653, 46262, 57786,\n  /* 14370 */ 56728, 42158, 59014, 59705, 59741, 32640, 32640, 64131, 27582, 72012, 25809, 51286, 25776, 25844, 68525,\n  /* 14385 */ 25984, 26051, 69412, 26018, 38086, 59766, 53173, 30453, 31873, 68393, 59807, 72012, 38182, 56458, 25776,\n  /* 14400 */ 67880, 68261, 25983, 39566, 61247, 26051, 68602, 40380, 32640, 32640, 65491, 72012, 59857, 47966, 60005,\n  /* 14415 */ 45599, 39842, 71940, 53287, 26051, 59892, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983,\n  /* 14430 */ 53288, 26051, 37187, 71116, 32640, 59931, 71378, 25776, 29955, 53286, 26051, 56227, 32640, 68392, 71381,\n  /* 14445 */ 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 36718, 59969, 24280, 60037, 60131, 43861, 49912,\n  /* 14460 */ 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 14475 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 14490 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 14505 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 14520 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 14535 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 14550 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 14565 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 14580 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814,\n  /* 14595 */ 32640, 32640, 53140, 22912, 36567, 70299, 34240, 32640, 25253, 54423, 32640, 20742, 60181, 32843, 60251,\n  /* 14610 */ 67710, 54291, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672,\n  /* 14625 */ 26051, 26051, 44572, 32640, 29420, 32640, 32640, 32640, 64131, 72012, 72012, 60345, 25776, 25776, 60381,\n  /* 14640 */ 25983, 25984, 26051, 26051, 26018, 58552, 32640, 32640, 32640, 32640, 68393, 72012, 72012, 33962, 25776,\n  /* 14655 */ 25776, 55427, 25983, 25983, 39566, 26051, 26051, 68602, 32640, 32640, 32640, 65491, 53207, 72012, 47768,\n  /* 14670 */ 27763, 36922, 39842, 71874, 53287, 26051, 60418, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698,\n  /* 14685 */ 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 70720,\n  /* 14700 */ 71381, 60458, 35226, 48985, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861,\n  /* 14715 */ 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640,\n  /* 14730 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 14745 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 14760 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 14775 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 14790 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 14805 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 14820 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 14835 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640,\n  /* 14850 */ 36240, 60497, 23383, 53140, 60533, 60561, 60593, 60624, 23405, 25467, 22160, 33169, 60689, 60747, 60715,\n  /* 14865 */ 60805, 60866, 60957, 32640, 36400, 61023, 26995, 32640, 33355, 55315, 59825, 61082, 65831, 61145, 47313,\n  /* 14880 */ 61199, 61279, 67236, 61352, 32640, 30073, 61417, 71794, 61454, 22979, 61508, 38584, 61544, 61588, 56170,\n  /* 14895 */ 61624, 61666, 64623, 61704, 26051, 48694, 58552, 65333, 72472, 61736, 61772, 61831, 56082, 61881, 64292,\n  /* 14910 */ 46200, 55981, 63076, 32888, 56329, 36998, 50357, 58842, 68602, 61924, 31336, 31217, 32949, 61962, 72012,\n  /* 14925 */ 54897, 52135, 36922, 43253, 54949, 53287, 62059, 62103, 54635, 69791, 32640, 71552, 72012, 20633, 25776,\n  /* 14940 */ 66700, 25983, 70631, 26051, 43048, 60991, 32640, 27575, 38860, 26267, 35612, 71431, 26052, 46302, 39252,\n  /* 14955 */ 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 59396, 61050, 48909, 62138, 49921,\n  /* 14970 */ 43861, 50802, 44756, 26873, 47849, 36159, 34716, 33560, 62235, 62294, 26933, 32640, 32640, 32640, 32640,\n  /* 14985 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 15000 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 15015 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 15030 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 15045 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 15060 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 15075 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 15090 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905,\n  /* 15105 */ 32640, 69266, 62427, 62544, 62612, 62644, 62673, 62705, 62736, 31256, 49878, 31910, 32640, 62790, 62885,\n  /* 15120 */ 62917, 44164, 69556, 51644, 62949, 62995, 45696, 32640, 19278, 63027, 63108, 63211, 63245, 54342, 53506,\n  /* 15135 */ 63300, 61672, 63378, 63410, 44572, 63450, 21770, 63487, 58560, 32640, 57422, 68884, 61512, 63553, 47513,\n  /* 15150 */ 61592, 63606, 63675, 29960, 51050, 63717, 37895, 63759, 18562, 21217, 40028, 32560, 63799, 59860, 58135,\n  /* 15165 */ 43158, 25776, 63843, 70614, 25983, 63875, 63940, 26051, 63990, 64042, 64442, 21262, 32640, 64117, 58399,\n  /* 15180 */ 38848, 47768, 24174, 64168, 39842, 56347, 53287, 26051, 64218, 68608, 27898, 31520, 65495, 64264, 51931,\n  /* 15195 */ 42855, 67656, 26365, 64359, 39180, 64397, 32640, 22880, 64131, 71378, 25776, 29955, 53286, 26051, 56886,\n  /* 15210 */ 32234, 41489, 41766, 51964, 60386, 51580, 64489, 54657, 64564, 34064, 72128, 35550, 42184, 64655, 39628,\n  /* 15225 */ 49921, 43861, 62758, 40962, 68714, 54610, 64734, 36847, 26535, 44815, 26905, 26933, 32640, 32640, 32640,\n  /* 15240 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 15255 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 15270 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 15285 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 15300 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 15315 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 15330 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 15345 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 15360 */ 31905, 32640, 25270, 32640, 23111, 32122, 64856, 64887, 64919, 64950, 31389, 65005, 27232, 34519, 65063,\n  /* 15375 */ 65120, 65088, 61113, 65189, 65294, 65365, 65397, 32640, 65455, 65527, 65583, 65653, 65730, 65796, 42647,\n  /* 15390 */ 52704, 58025, 65863, 65934, 65966, 66033, 64072, 66099, 26683, 30564, 66131, 66179, 66246, 41522, 66312,\n  /* 15405 */ 64765, 26100, 66344, 66422, 62027, 63346, 66488, 48098, 66539, 38119, 40439, 30690, 24714, 66648, 46809,\n  /* 15420 */ 22991, 67082, 66680, 47975, 66732, 66764, 58510, 66819, 66851, 26304, 66906, 66954, 31272, 32640, 67000,\n  /* 15435 */ 67054, 67114, 21544, 34639, 21568, 67186, 67268, 67325, 67402, 54264, 43607, 48017, 34273, 42426, 67583,\n  /* 15450 */ 30935, 67621, 41784, 67688, 48203, 67778, 64824, 41671, 20315, 24236, 67833, 44481, 37470, 67926, 59378,\n  /* 15465 */ 68003, 32640, 68087, 68155, 34696, 68214, 39952, 68293, 68373, 68425, 68486, 66787, 35862, 33375, 70146,\n  /* 15480 */ 67746, 49921, 43861, 49912, 58817, 68777, 68557, 68640, 68746, 58655, 44815, 68853, 26933, 32640, 32640,\n  /* 15495 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 15510 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 15525 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 15540 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 15555 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 15570 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 15585 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 15600 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 15615 */ 32640, 31905, 32640, 64085, 32640, 48353, 53140, 68928, 68957, 68989, 69020, 32640, 27125, 27632, 30788,\n  /* 15630 */ 27143, 32640, 31656, 64595, 69087, 69148, 32640, 32024, 32640, 69224, 32640, 49895, 69298, 39058, 69348,\n  /* 15645 */ 25776, 49418, 25983, 70024, 69401, 45323, 46448, 24757, 70970, 32640, 27865, 31743, 52581, 61849, 69444,\n  /* 15660 */ 69504, 54523, 54583, 69588, 33465, 69648, 59899, 33588, 69746, 58552, 69823, 32640, 32640, 69855, 38964,\n  /* 15675 */ 72012, 72012, 65611, 69892, 25776, 72113, 69928, 25983, 39566, 69966, 26051, 41254, 35657, 32640, 32640,\n  /* 15690 */ 61476, 72012, 72012, 62354, 25776, 36922, 70009, 25983, 26418, 26051, 26051, 34349, 32640, 18845, 26622,\n  /* 15705 */ 72012, 27075, 25776, 39460, 70056, 67293, 70094, 41204, 31858, 32640, 64131, 71378, 25776, 29955, 53286,\n  /* 15720 */ 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 45386, 70138, 70178, 58860, 33375,\n  /* 15735 */ 70146, 67746, 49921, 43861, 49912, 26461, 46082, 68666, 70273, 34716, 26535, 44842, 26905, 26933, 32640,\n  /* 15750 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 15765 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 15780 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 15795 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 15810 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 15825 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 15840 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 15855 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 15870 */ 32640, 32640, 31905, 32640, 22217, 68030, 66060, 33739, 70331, 54472, 70378, 70409, 32640, 25253, 32640,\n  /* 15885 */ 32640, 32640, 32640, 19302, 70476, 56692, 51195, 59775, 43315, 32640, 32640, 27647, 25308, 37113, 62203,\n  /* 15900 */ 70592, 53244, 62010, 70663, 47583, 56714, 33625, 44572, 32640, 32640, 28000, 32640, 29763, 64131, 55855,\n  /* 15915 */ 72012, 25809, 51949, 25776, 25844, 56967, 25984, 26051, 33611, 26018, 58552, 32640, 32640, 32640, 32640,\n  /* 15930 */ 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 68602, 32640, 32640,\n  /* 15945 */ 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051, 26051, 68608, 50577, 32640,\n  /* 15960 */ 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 25506, 32640, 64131, 71378, 25776, 29955,\n  /* 15975 */ 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 70701, 71375, 60465, 43860, 58860,\n  /* 15990 */ 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933,\n  /* 16005 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 16020 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 16035 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 16050 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 16065 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 16080 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 16095 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 16110 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 16125 */ 32640, 32640, 32640, 31905, 32640, 59056, 32640, 70752, 70788, 70855, 70884, 70916, 70947, 32640, 25253,\n  /* 16140 */ 32640, 32640, 32640, 32640, 41578, 49709, 71012, 71060, 32640, 32024, 32640, 32640, 71115, 25308, 72012,\n  /* 16155 */ 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 44572, 32640, 32640, 32640, 32640, 32640, 64131,\n  /* 16170 */ 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 58552, 32640, 32640, 38108,\n  /* 16185 */ 32640, 24932, 72012, 72012, 52641, 25776, 25776, 71858, 25983, 25983, 43032, 26051, 26051, 68602, 32640,\n  /* 16200 */ 71148, 32640, 65491, 51789, 34949, 47768, 56478, 42901, 39842, 71181, 63325, 63418, 36037, 68608, 32640,\n  /* 16215 */ 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776,\n  /* 16230 */ 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860,\n  /* 16245 */ 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905,\n  /* 16260 */ 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 16275 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 16290 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 16305 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 16320 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 16335 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 16350 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 16365 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 16380 */ 32640, 32640, 32640, 32640, 32154, 32640, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 34240, 32640,\n  /* 16395 */ 25640, 43672, 32640, 22790, 58939, 37441, 71228, 41160, 51195, 32640, 22183, 71515, 71307, 32640, 25308,\n  /* 16410 */ 72012, 71341, 31942, 35465, 71413, 36667, 59621, 26051, 71463, 42401, 32640, 32640, 32640, 32640, 32640,\n  /* 16425 */ 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 58552, 32640, 32640,\n  /* 16440 */ 41936, 32640, 68393, 66214, 72012, 71584, 38192, 25776, 42053, 70669, 25983, 39566, 39775, 26051, 68602,\n  /* 16455 */ 35405, 32640, 32640, 65491, 71628, 72012, 48552, 25776, 36922, 26149, 25983, 53287, 71664, 26051, 68608,\n  /* 16470 */ 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378,\n  /* 16485 */ 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465,\n  /* 16500 */ 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815,\n  /* 16515 */ 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 16530 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 16545 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 16560 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 16575 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 16590 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 16605 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 16620 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 16635 */ 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 37690,\n  /* 16650 */ 32640, 25253, 66067, 32640, 32640, 32640, 71710, 26739, 42964, 71771, 20325, 32024, 32640, 32640, 32640,\n  /* 16665 */ 27283, 72012, 59937, 31942, 25776, 52893, 25983, 56982, 26051, 51860, 44572, 23321, 32640, 32640, 37539,\n  /* 16680 */ 32640, 38825, 72013, 72012, 71836, 53399, 25776, 71906, 39845, 25984, 71678, 53435, 26018, 58552, 30134,\n  /* 16695 */ 32640, 32640, 32640, 68393, 71972, 72012, 63054, 52123, 25776, 62376, 48188, 25983, 24297, 36872, 26051,\n  /* 16710 */ 68602, 32640, 32640, 33904, 65491, 72012, 72011, 47768, 42218, 36922, 39842, 71196, 53287, 26051, 72045,\n  /* 16725 */ 68608, 32640, 48843, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 45251, 32640, 34258, 23504,\n  /* 16740 */ 63811, 25776, 68806, 63685, 26051, 46302, 23041, 68392, 72091, 44738, 54963, 34731, 37193, 26609, 71375,\n  /* 16755 */ 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535,\n  /* 16770 */ 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 16785 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 16800 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 16815 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 16830 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 16845 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 16860 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 16875 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 16890 */ 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 72160, 36567, 70299,\n  /* 16905 */ 34240, 32640, 25253, 32640, 32640, 32640, 32640, 49347, 54782, 64809, 51195, 32640, 32024, 32640, 32640,\n  /* 16920 */ 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 44572, 32640, 32640, 32640,\n  /* 16935 */ 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 58552,\n  /* 16950 */ 32640, 32640, 32640, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051,\n  /* 16965 */ 26051, 68602, 32640, 32640, 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051,\n  /* 16980 */ 26051, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640,\n  /* 16995 */ 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609,\n  /* 17010 */ 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716,\n  /* 17025 */ 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 17040 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 17055 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 17070 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 17085 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 17100 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 17115 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 17130 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 17145 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32640, 72268, 72234, 40231, 72204, 72300, 72337,\n  /* 17160 */ 72417, 72449, 32640, 25253, 71149, 72986, 32640, 32640, 22011, 19703, 24646, 21807, 31154, 19779, 32640,\n  /* 17175 */ 18612, 18649, 18757, 18789, 18959, 21985, 22069, 72504, 22057, 18887, 18787, 18957, 18991, 36451, 32640,\n  /* 17190 */ 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822,\n  /* 17205 */ 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570,\n  /* 17220 */ 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058,\n  /* 17235 */ 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579,\n  /* 17250 */ 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186,\n  /* 17265 */ 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154,\n  /* 17280 */ 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 17295 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 17310 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 17325 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 17340 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 17355 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 17370 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 17385 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 17400 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32640, 61740, 32640, 70431, 53140, 72560,\n  /* 17415 */ 72589, 60219, 72636, 32640, 25253, 32640, 72986, 50892, 50890, 18907, 32640, 40751, 21807, 31154, 19779,\n  /* 17430 */ 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451,\n  /* 17445 */ 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193,\n  /* 17460 */ 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534,\n  /* 17475 */ 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858,\n  /* 17490 */ 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291,\n  /* 17505 */ 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126,\n  /* 17520 */ 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101,\n  /* 17535 */ 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 17550 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 17565 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 17580 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 17595 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 17610 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 17625 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 17640 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 17655 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32640, 61930, 32640, 32640, 19846,\n  /* 17670 */ 72691, 72708, 30629, 72755, 32640, 25253, 32640, 72810, 59270, 52170, 18907, 32640, 23058, 21807, 31154,\n  /* 17685 */ 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22311, 22069, 72846, 22057, 18887, 18787, 18957, 18991,\n  /* 17700 */ 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106,\n  /* 17715 */ 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498,\n  /* 17730 */ 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026,\n  /* 17745 */ 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547,\n  /* 17760 */ 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084,\n  /* 17775 */ 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959,\n  /* 17790 */ 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 17805 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 17820 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 17835 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 17850 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 17865 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 17880 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 17895 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 17910 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32640, 61740, 32640, 32640,\n  /* 17925 */ 53140, 22912, 32640, 32640, 72919, 32640, 25253, 32640, 32640, 32640, 32640, 49347, 54782, 64809, 35297,\n  /* 17940 */ 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 48724, 25776, 59604, 25983, 61672, 26051, 26051,\n  /* 17955 */ 44572, 32640, 32640, 32640, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984,\n  /* 17970 */ 26051, 26051, 26018, 58552, 32640, 32640, 32640, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427,\n  /* 17985 */ 25983, 25983, 39566, 26051, 26051, 68602, 32640, 32640, 32640, 65491, 72012, 72012, 47768, 25776, 36922,\n  /* 18000 */ 39842, 25983, 53287, 26051, 26051, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288,\n  /* 18015 */ 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947,\n  /* 18030 */ 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461,\n  /* 18045 */ 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 18060 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 18075 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 18090 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 18105 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 18120 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 18135 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 18150 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 18165 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 18180 */ 34485, 32640, 23212, 23229, 52327, 72974, 32640, 32640, 32640, 72986, 32640, 32640, 18907, 32640, 23058,\n  /* 18195 */ 21807, 31154, 43659, 32640, 18612, 18649, 18757, 18789, 18959, 21985, 22069, 72504, 22057, 18887, 18787,\n  /* 18210 */ 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074,\n  /* 18225 */ 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538,\n  /* 18240 */ 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851,\n  /* 18255 */ 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518,\n  /* 18270 */ 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062,\n  /* 18285 */ 21094, 21084, 21126, 21186, 73022, 21452, 21374, 21431, 73111, 21618, 21650, 73169, 21802, 23057, 21839,\n  /* 18300 */ 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 18315 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 18330 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 18345 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 18360 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 18375 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 18390 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 18405 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640,\n  /* 18420 */ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 1, 24578, 3, 0, 0, 0,\n  /* 18438 */ 0, 0, 0, 0, 180523, 180523, 180523, 180523, 0, 188716, 188716, 188716, 180523, 180523, 188716, 188716,\n  /* 18454 */ 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716,\n  /* 18467 */ 188716, 0, 188716, 180523, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716,\n  /* 18481 */ 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716,\n  /* 18494 */ 188716, 188716, 139264, 147456, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716,\n  /* 18507 */ 131072, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716,\n  /* 18520 */ 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716,\n  /* 18533 */ 188716, 188716, 188716, 188716, 188716, 188716, 188716, 367, 188716, 180523, 188716, 188716, 1, 24578, 3,\n  /* 18548 */ 0, 0, 4366336, 0, 0, 0, 180523, 188716, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 18573 */ 0, 0, 0, 0, 2289, 0, 2290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2368, 2369, 0, 0, 2371, 0, 0, 0,\n  /* 18603 */ 0, 2376, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4276224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 18635 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 307, 0, 0, 5767168, 0, 0, 0, 4857856, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 18665 */ 0, 0, 5259264, 0, 5414912, 5447680, 0, 0, 5562368, 5636096, 5685248, 0, 5750784, 5873664, 0, 0, 0, 0, 0,\n  /* 18684 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1877, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 18705 */ 521, 1889, 521, 521, 521, 521, 521, 521, 0, 0, 0, 0, 57886, 57886, 57886, 59821, 57886, 59823, 57886,\n  /* 18724 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 18739 */ 50657, 58754, 977, 57909, 57909, 58853, 57909, 57909, 58857, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 18754 */ 57909, 57909, 58871, 0, 0, 5636096, 5873664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5873664, 0, 0, 0,\n  /* 18779 */ 0, 0, 0, 0, 5480448, 4358144, 4358144, 4358144, 4358144, 4857856, 4874240, 4358144, 4358144, 4358144,\n  /* 18793 */ 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5259264,\n  /* 18804 */ 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5414912, 4358144, 5447680,\n  /* 18815 */ 4358144, 5464064, 4358144, 5480448, 5562368, 4358144, 0, 0, 0, 0, 6275072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 18836 */ 0, 977, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 18866 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5873664, 0, 0, 0, 0, 0, 0,\n  /* 18898 */ 0, 0, 0, 0, 0, 6275072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144,\n  /* 18920 */ 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144,\n  /* 18931 */ 4358144, 4358144, 4358144, 4358144, 4358144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1140, 0, 0, 1145, 0,\n  /* 18952 */ 4857856, 4874240, 0, 0, 4923392, 5562368, 4358144, 4358144, 4358144, 5636096, 4358144, 5685248, 4358144,\n  /* 18965 */ 4358144, 5750784, 4358144, 4358144, 4358144, 4358144, 4358144, 5873664, 4358144, 4358144, 4358144,\n  /* 18976 */ 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6275072, 4358144, 4358144,\n  /* 18987 */ 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4923392, 4358144,\n  /* 18998 */ 4358144, 4358144, 4358144, 4358144, 0, 4923392, 0, 0, 0, 0, 4366336, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 19021 */ 0, 0, 0, 2755, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2766, 0, 0, 0, 0, 0, 0, 4825088, 0, 0, 5177344, 0, 0,\n  /* 19050 */ 0, 0, 5701632, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5808128, 0, 0, 0, 0, 4792320, 4833280, 0, 0, 5701632, 0,\n  /* 19074 */ 5242880, 0, 0, 0, 0, 0, 0, 0, 5341184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5627904, 5652480, 0, 5701632,\n  /* 19099 */ 0, 0, 0, 0, 0, 0, 0, 4358144, 4358144, 4358144, 4825088, 4358144, 4358144, 4358144, 4358144, 4358144,\n  /* 19115 */ 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144,\n  /* 19126 */ 4358144, 4358144, 4358144, 4358144, 5177344, 4358144, 4358144, 4358144, 4358144, 4358144, 5242880,\n  /* 19137 */ 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5341184, 4358144, 4358144, 4358144,\n  /* 19148 */ 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5627904, 5652480,\n  /* 19159 */ 4358144, 5701632, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144,\n  /* 19170 */ 4358144, 4358144, 483328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 4923392,\n  /* 19193 */ 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5341184, 4358144, 4358144, 4358144, 4358144,\n  /* 19204 */ 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5627904, 5652480, 4358144,\n  /* 19215 */ 5701632, 4358144, 4358144, 5808128, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144,\n  /* 19226 */ 4358144, 4358144, 4358144, 4358144, 1051, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4857856, 4874240,\n  /* 19248 */ 0, 0, 4923392, 0, 0, 6422528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5619712, 0, 0, 0, 0, 0, 0, 0, 5726208,\n  /* 19274 */ 5758976, 0, 0, 5791744, 0, 0, 0, 0, 0, 0, 0, 1151, 1278, 0, 0, 0, 0, 0, 0, 1285, 0, 0, 0, 0, 0, 0, 0,\n  /* 19301 */ 1290, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 848, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 19325 */ 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 0, 6479872, 0, 0, 0, 0, 0, 0, 4358144, 4358144,\n  /* 19344 */ 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4931584, 4939776, 4358144,\n  /* 19355 */ 4358144, 4358144, 4358144, 4358144, 4358144, 5054464, 4358144, 4358144, 4358144, 4358144, 4358144,\n  /* 19366 */ 4358144, 4358144, 4358144, 5210112, 4358144, 4358144, 4358144, 4358144, 5292032, 4358144, 4358144,\n  /* 19377 */ 4358144, 4358144, 5365760, 4358144, 4358144, 4358144, 5455872, 4358144, 4358144, 4358144, 4358144,\n  /* 19388 */ 4358144, 5554176, 5570560, 5578752, 5619712, 5668864, 4358144, 4358144, 4358144, 5791744, 5816320,\n  /* 19399 */ 4358144, 5857280, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144,\n  /* 19410 */ 4358144, 4358144, 4358144, 4358144, 6119424, 4358144, 6168576, 4358144, 4358144, 4358144, 4358144,\n  /* 19421 */ 6242304, 4358144, 6291456, 4358144, 6316032, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144,\n  /* 19432 */ 4358144, 4358144, 4358144, 6463488, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 19449 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4931584, 0, 0, 0, 0, 0, 0, 0, 4358144, 4358144, 4358144, 4358144,\n  /* 19474 */ 4358144, 6463488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4931584, 4939776, 0, 0, 0, 0, 0, 0,\n  /* 19499 */ 5054464, 0, 0, 0, 0, 0, 0, 0, 0, 5210112, 0, 0, 0, 0, 5292032, 0, 0, 0, 0, 5365760, 0, 0, 0, 5455872, 0,\n  /* 19524 */ 0, 0, 0, 0, 5554176, 5570560, 5578752, 5619712, 5668864, 0, 5578752, 5619712, 5668864, 0, 0, 0, 5791744,\n  /* 19541 */ 5816320, 0, 5857280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6119424, 0, 6168576, 0, 0, 0, 0, 0, 6242304,\n  /* 19566 */ 0, 6291456, 0, 6316032, 0, 6291456, 0, 6316032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6463488, 4358144, 4358144,\n  /* 19586 */ 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4931584, 4939776,\n  /* 19597 */ 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 491520,\n  /* 19609 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 4923392, 5578752, 5619712, 5668864,\n  /* 19632 */ 4358144, 4358144, 4358144, 5791744, 5816320, 4358144, 5857280, 4358144, 4358144, 4358144, 4358144,\n  /* 19643 */ 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6119424, 4358144,\n  /* 19654 */ 6168576, 4358144, 4358144, 4358144, 4358144, 4358144, 6242304, 4956160, 4964352, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 19671 */ 0, 0, 5218304, 0, 0, 0, 0, 5799936, 0, 5881856, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6373376, 6389760, 0, 0, 0, 0,\n  /* 19696 */ 0, 1758, 0, 0, 1761, 0, 1763, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 977, 0, 0, 0,\n  /* 19728 */ 0, 0, 0, 0, 0, 0, 0, 0, 6488064, 6103040, 0, 0, 0, 0, 0, 6184960, 5316608, 0, 0, 5644288, 0, 0, 0, 0, 0,\n  /* 19753 */ 0, 0, 0, 0, 0, 6217728, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3384, 0, 0, 0, 3388, 0, 0, 0, 0, 0, 3394, 0, 0, 0, 0,\n  /* 19783 */ 0, 0, 0, 0, 0, 0, 0, 0, 6275072, 0, 0, 0, 0, 0, 0, 0, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 19813 */ 5390336, 5308416, 5488640, 0, 0, 5070848, 5431296, 0, 6430720, 0, 0, 5160960, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 19834 */ 0, 0, 4784128, 0, 0, 0, 0, 0, 0, 0, 0, 3623, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 19866 */ 0, 0, 0, 0, 2359296, 417, 417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6283264, 6332416, 0, 0, 0, 5881856, 0, 5382144,\n  /* 19890 */ 0, 0, 0, 0, 0, 0, 6266880, 4784128, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144,\n  /* 19905 */ 4358144, 4915200, 4358144, 4956160, 4972544, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144,\n  /* 19916 */ 5070848, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5218304, 4358144, 5267456,\n  /* 19927 */ 4358144, 4358144, 5308416, 5316608, 4358144, 4358144, 4358144, 5431296, 4358144, 5488640, 4358144,\n  /* 19938 */ 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5799936, 4358144, 4358144, 5881856,\n  /* 19949 */ 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6103040, 4358144,\n  /* 19960 */ 4358144, 4358144, 6184960, 4358144, 4358144, 6283264, 4358144, 4358144, 6332416, 4358144, 4358144,\n  /* 19971 */ 4358144, 6389760, 4358144, 4358144, 6430720, 6438912, 4358144, 4358144, 4358144, 6266880, 6488064, 0, 0,\n  /* 19984 */ 0, 6266880, 6488064, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3149, 0, 0, 0, 0, 3154, 0, 0, 0, 0, 0,\n  /* 20013 */ 0, 0, 0, 0, 0, 0, 4358144, 6430720, 6438912, 0, 0, 0, 0, 0, 0, 4784128, 0, 0, 0, 4849664, 0, 0, 0, 0, 0,\n  /* 20038 */ 4915200, 0, 4956160, 4972544, 0, 0, 0, 0, 0, 0, 5070848, 0, 0, 0, 0, 0, 0, 0, 5218304, 0, 0, 6103040, 0,\n  /* 20061 */ 0, 0, 6184960, 0, 0, 0, 6283264, 0, 0, 6332416, 0, 0, 0, 6389760, 0, 0, 6430720, 6438912, 4784128,\n  /* 20080 */ 4358144, 4358144, 4358144, 4849664, 4358144, 4358144, 4358144, 4358144, 4358144, 4915200, 0, 5660672,\n  /* 20092 */ 5718016, 0, 5865472, 0, 0, 6037504, 0, 0, 6078464, 0, 0, 6340608, 0, 6455296, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 20115 */ 0, 0, 0, 0, 0, 0, 0, 325, 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5472256, 0, 0, 0,\n  /* 20146 */ 6209536, 0, 0, 0, 0, 6176768, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4898816, 0, 5709824, 0, 0, 0, 0,\n  /* 20173 */ 0, 1790, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1806, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2348,\n  /* 20205 */ 0, 0, 0, 0, 0, 0, 0, 0, 5283840, 0, 0, 0, 0, 5251072, 0, 6414336, 5832704, 0, 5955584, 0, 0, 4358144,\n  /* 20227 */ 4358144, 4841472, 4358144, 4358144, 4358144, 4898816, 4358144, 4358144, 4358144, 4358144, 4358144,\n  /* 20238 */ 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 368640, 0, 0, 0, 0, 0, 0,\n  /* 20260 */ 4857856, 4874240, 0, 0, 4923392, 4358144, 5111808, 4358144, 4358144, 4358144, 4358144, 4358144, 5283840,\n  /* 20273 */ 4358144, 4358144, 4358144, 4358144, 5472256, 5521408, 4358144, 4358144, 4358144, 5595136, 5709824,\n  /* 20284 */ 5718016, 4358144, 5824512, 5865472, 4358144, 4358144, 5922816, 4358144, 4358144, 6021120, 4358144,\n  /* 20295 */ 6037504, 4358144, 4358144, 6078464, 6111232, 4358144, 6176768, 6209536, 4358144, 6234112, 4358144,\n  /* 20306 */ 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 20323 */ 0, 3408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1172, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 20356 */ 0, 4358144, 6078464, 6111232, 4358144, 6176768, 6209536, 6234112, 4358144, 4358144, 4358144, 4358144,\n  /* 20368 */ 4358144, 4358144, 4358144, 0, 0, 0, 0, 4841472, 0, 0, 0, 4898816, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 0, 0, 0,\n  /* 20393 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 388, 0, 139264, 147456, 0, 0, 0, 0, 0, 6037504, 0, 0, 6078464, 6111232, 0,\n  /* 20418 */ 6176768, 6209536, 0, 6234112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4841472, 0, 0, 0, 4898816, 0, 0, 0, 0, 0,\n  /* 20443 */ 0, 0, 0, 3773, 0, 3627, 3775, 0, 0, 3778, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521,\n  /* 20471 */ 521, 521, 521, 4024, 521, 4026, 521, 521, 4028, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0,\n  /* 20489 */ 6021120, 0, 6037504, 0, 0, 6078464, 6111232, 0, 6176768, 6209536, 0, 6234112, 0, 0, 0, 0, 0, 0, 0,\n  /* 20508 */ 4358144, 4358144, 4841472, 4358144, 4358144, 4358144, 4898816, 4358144, 4358144, 4358144, 4358144,\n  /* 20519 */ 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 499712, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 20539 */ 0, 0, 0, 4857856, 4874240, 0, 0, 4923392, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5111808,\n  /* 20554 */ 4358144, 4358144, 4358144, 4358144, 4358144, 5283840, 4358144, 4358144, 4358144, 4358144, 5472256,\n  /* 20565 */ 5521408, 4358144, 4358144, 4358144, 4358144, 5595136, 5709824, 5718016, 4358144, 5824512, 5865472,\n  /* 20576 */ 4358144, 4358144, 5922816, 0, 5029888, 5038080, 0, 0, 5103616, 5201920, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 20597 */ 0, 0, 6406144, 5357568, 0, 5505024, 0, 0, 0, 0, 0, 5890048, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521,\n  /* 20620 */ 521, 521, 521, 1873, 521, 521, 521, 521, 521, 521, 521, 521, 1884, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 20641 */ 521, 3216, 521, 521, 521, 521, 0, 0, 57886, 57886, 57886, 57886, 57886, 60569, 57886, 60570, 57886, 57886,\n  /* 20659 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58842, 57886, 57886, 57886, 57886, 50657, 58754, 977,\n  /* 20674 */ 57909, 57909, 58854, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 20689 */ 57909, 59962, 59963, 57909, 57909, 57909, 57909, 57909, 57909, 59970, 57909, 57909, 57909, 57909, 57909,\n  /* 20704 */ 57909, 57909, 57909, 57909, 57909, 0, 6160384, 0, 5095424, 5349376, 0, 5275648, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 20725 */ 0, 0, 5947392, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 20758 */ 0, 0, 0, 787, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6471680, 0, 0, 0, 4358144, 4358144, 4358144, 4358144,\n  /* 20783 */ 4358144, 4358144, 4358144, 4358144, 4997120, 4358144, 4358144, 5038080, 4358144, 4358144, 4358144,\n  /* 20794 */ 5095424, 5103616, 4358144, 4358144, 5201920, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144,\n  /* 20805 */ 4358144, 4358144, 4358144, 4358144, 4358144, 5890048, 4358144, 4358144, 4358144, 6029312, 4358144,\n  /* 20816 */ 4358144, 4358144, 4358144, 6160384, 4358144, 4358144, 4358144, 4358144, 5890048, 4358144, 4358144,\n  /* 20827 */ 4358144, 6029312, 4358144, 4358144, 4358144, 4358144, 6160384, 4358144, 4358144, 4358144, 4358144,\n  /* 20838 */ 4358144, 4358144, 6406144, 0, 0, 0, 0, 0, 0, 0, 0, 4997120, 0, 0, 5038080, 0, 0, 0, 0, 6406144, 0, 0, 0,\n  /* 20861 */ 0, 0, 0, 0, 0, 4997120, 0, 0, 5038080, 0, 0, 0, 5095424, 5103616, 0, 0, 5201920, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 20886 */ 0, 0, 0, 5890048, 0, 0, 0, 6029312, 0, 0, 0, 0, 6160384, 0, 0, 0, 0, 0, 0, 0, 6406144, 4358144, 4358144,\n  /* 20909 */ 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4997120, 4358144, 4358144, 4358144, 4358144,\n  /* 20920 */ 4358144, 4358144, 4358144, 6406144, 4358144, 4358144, 4358144, 0, 0, 0, 4890624, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 20939 */ 0, 5898240, 5963776, 0, 0, 6193152, 0, 0, 5406720, 6397952, 5300224, 5234688, 5423104, 0, 0, 0, 0,\n  /* 20956 */ 5988352, 0, 0, 6135808, 6307840, 0, 5996544, 4800512, 0, 6356992, 0, 0, 0, 5496832, 0, 0, 0, 0, 0,\n  /* 20975 */ 5611520, 0, 0, 0, 0, 0, 0, 0, 1187, 0, 0, 1190, 1191, 0, 0, 0, 0, 1195, 0, 0, 0, 367, 367, 0, 0, 0, 0, 0,\n  /* 21003 */ 0, 0, 0, 0, 0, 782, 0, 0, 0, 0, 0, 0, 0, 786, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 801, 4947968, 5021696,\n  /* 21032 */ 5529600, 0, 0, 5169152, 0, 0, 0, 4800512, 4808704, 4358144, 4358144, 4890624, 4358144, 4947968, 4358144,\n  /* 21047 */ 4358144, 4358144, 5046272, 4358144, 4358144, 4358144, 4358144, 5185536, 4358144, 5234688, 5300224,\n  /* 21058 */ 4358144, 4358144, 5406720, 5529600, 4358144, 4358144, 4358144, 5898240, 4358144, 4358144, 4358144,\n  /* 21069 */ 4358144, 4358144, 4358144, 4358144, 6307840, 4358144, 4358144, 6356992, 6381568, 6397952, 4800512,\n  /* 21080 */ 4808704, 0, 0, 4890624, 0, 4947968, 0, 0, 0, 5046272, 0, 0, 0, 0, 5185536, 0, 5234688, 5300224, 0, 0,\n  /* 21100 */ 5406720, 5529600, 0, 0, 0, 0, 5898240, 0, 0, 0, 0, 0, 0, 0, 0, 6307840, 0, 0, 6356992, 6381568, 6397952,\n  /* 21121 */ 4800512, 4808704, 0, 0, 4890624, 0, 0, 6356992, 6381568, 6397952, 4800512, 4808704, 4358144, 4358144,\n  /* 21135 */ 4890624, 4358144, 4947968, 4358144, 4358144, 4358144, 5046272, 4358144, 4358144, 4358144, 4358144,\n  /* 21146 */ 5185536, 4358144, 5234688, 5300224, 4358144, 4358144, 5406720, 5529600, 4358144, 4358144, 4358144,\n  /* 21157 */ 4358144, 4358144, 4358144, 4358144, 4907008, 0, 5079040, 6094848, 0, 0, 0, 4358144, 4907008, 4358144,\n  /* 21171 */ 5079040, 4358144, 5226496, 4358144, 5742592, 4358144, 4358144, 4358144, 6094848, 0, 4907008, 0, 5079040,\n  /* 21184 */ 0, 5226496, 5898240, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6307840,\n  /* 21196 */ 4358144, 4358144, 6356992, 6381568, 6397952, 5021696, 4358144, 4358144, 5021696, 0, 0, 0, 4980736, 0, 0,\n  /* 21211 */ 0, 0, 0, 5373952, 5734400, 6045696, 0, 0, 0, 0, 0, 2306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 21239 */ 0, 0, 0, 0, 2290, 0, 0, 0, 0, 0, 0, 0, 6152192, 0, 0, 0, 6316032, 0, 0, 0, 0, 5816320, 6291456, 0, 0, 0,\n  /* 21265 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2778, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2803, 0, 0, 0,\n  /* 21298 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6258688, 6447104, 0, 0, 6127616, 0, 6348800, 5906432, 0, 5537792,\n  /* 21320 */ 3627, 0, 0, 0, 0, 5939200, 0, 0, 5677056, 6365184, 4866048, 0, 6070272, 5545984, 5152768, 0, 0, 6144000,\n  /* 21338 */ 4358144, 4866048, 4882432, 4358144, 0, 0, 0, 0, 0, 4825088, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 21363 */ 0, 0, 0, 0, 0, 5177344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5324800, 5373952, 5537792, 5545984, 5586944, 5734400,\n  /* 21384 */ 5971968, 0, 6045696, 0, 6070272, 0, 0, 0, 0, 6348800, 0, 4866048, 4882432, 0, 4980736, 0, 0, 0, 0, 0, 0,\n  /* 21405 */ 0, 0, 521, 831, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 877, 521, 521, 521, 521, 895, 521,\n  /* 21427 */ 521, 57886, 57886, 58249, 0, 5324800, 5373952, 5537792, 5545984, 5586944, 5734400, 5971968, 0, 6045696, 0,\n  /* 21442 */ 6070272, 0, 0, 0, 0, 6348800, 4358144, 4866048, 4882432, 4358144, 4980736, 4358144, 4358144, 4358144,\n  /* 21456 */ 4358144, 4358144, 4358144, 4358144, 4358144, 5324800, 5373952, 5537792, 5545984, 5734400, 5971968,\n  /* 21467 */ 4358144, 6045696, 4358144, 6070272, 4358144, 4358144, 4358144, 6348800, 0, 4866048, 4882432, 0, 4980736,\n  /* 21480 */ 0, 0, 0, 0, 5537792, 5545984, 5586944, 5734400, 5971968, 4358144, 6045696, 4358144, 6070272, 4358144,\n  /* 21494 */ 4358144, 4358144, 4358144, 6348800, 4358144, 6144000, 0, 6144000, 0, 4988928, 5005312, 0, 0, 0, 0,\n  /* 21509 */ 5775360, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 3441, 521, 521, 521, 521, 521,\n  /* 21532 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3454, 521, 521, 521, 0, 0, 0, 0, 0, 0, 57886,\n  /* 21554 */ 57886, 60242, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60250, 57886,\n  /* 21569 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60293, 57886, 57886, 57886, 60296, 60297, 57886,\n  /* 21584 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 57909,\n  /* 21601 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59917, 57909, 57909, 57909, 57909, 57909,\n  /* 21616 */ 57909, 57909, 5693440, 0, 6496256, 5144576, 5136384, 0, 5914624, 4358144, 4358144, 5005312, 4358144,\n  /* 21629 */ 4358144, 4358144, 5120000, 5136384, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144,\n  /* 21640 */ 4358144, 4358144, 6324224, 0, 0, 5005312, 0, 0, 0, 5120000, 5136384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 21661 */ 6324224, 0, 0, 5005312, 0, 0, 0, 5120000, 5136384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6324224, 4358144, 0, 0,\n  /* 21684 */ 900, 900, 900, 4825988, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900,\n  /* 21704 */ 900, 900, 900, 900, 5178244, 900, 900, 900, 900, 900, 5219204, 900, 5268356, 900, 900, 5309316, 5317508,\n  /* 21721 */ 900, 900, 900, 5432196, 900, 5489540, 900, 900, 900, 900, 900, 900, 900, 900, 900, 5800836, 900, 900,\n  /* 21739 */ 5882756, 900, 4358144, 5005312, 4358144, 4358144, 4358144, 5120000, 5136384, 4358144, 4358144, 4358144,\n  /* 21751 */ 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6324224, 5914624, 5914624, 0, 0, 0, 0, 0,\n  /* 21766 */ 5513216, 5783552, 0, 3627, 0, 0, 0, 0, 0, 0, 1759, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1772, 0, 1774, 0,\n  /* 21793 */ 0, 0, 1778, 0, 0, 0, 1782, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144,\n  /* 21810 */ 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 21829 */ 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 4923392, 0, 5013504, 0, 0, 6053888, 0, 0, 0, 0, 6012928, 4358144,\n  /* 21850 */ 4358144, 5013504, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144,\n  /* 21861 */ 6053888, 4358144, 4358144, 0, 0, 5013504, 0, 0, 0, 0, 0, 0, 685, 0, 0, 0, 0, 0, 0, 692, 367, 367, 367, 0,\n  /* 21885 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 705, 0, 0, 0, 0, 0, 0, 0, 0, 6053888, 0, 0, 0, 0, 0, 5013504, 0, 0, 0, 0, 0,\n  /* 21916 */ 0, 0, 0, 0, 6053888, 0, 0, 0, 4358144, 4358144, 5013504, 4358144, 4358144, 4358144, 4358144, 4358144,\n  /* 21932 */ 4358144, 4358144, 5799936, 4358144, 4358144, 5881856, 4358144, 4358144, 4358144, 4358144, 4358144,\n  /* 21943 */ 4358144, 4358144, 4358144, 4358144, 6103040, 4358144, 4358144, 4358144, 6184960, 4358144, 4358144,\n  /* 21954 */ 4358144, 6283264, 4358144, 4358144, 6332416, 4358144, 4358144, 4358144, 4358144, 4358144, 6053888,\n  /* 21965 */ 4358144, 4358144, 4358144, 0, 0, 0, 0, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 5193728,\n  /* 21981 */ 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 0, 0, 0, 0, 0, 0, 4857856, 4874240, 0,\n  /* 21998 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5259264, 0, 0, 0, 0, 0, 0, 0, 0, 4358144, 4358144, 4358144, 4358144,\n  /* 22023 */ 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144,\n  /* 22034 */ 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 901, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 0, 0,\n  /* 22053 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5259264, 0, 0, 0, 0, 0, 0, 0, 0, 5414912, 0, 5447680, 0, 5464064, 0, 5480448,\n  /* 22078 */ 5562368, 0, 0, 0, 5636096, 0, 5685248, 0, 0, 5750784, 0, 0, 0, 0, 0, 5873664, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 22103 */ 5193728, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5193728, 0, 0, 0, 0, 0, 0, 0, 0, 4358144, 4358144,\n  /* 22128 */ 4358144, 4358144, 4358144, 5193728, 4358144, 0, 1959, 0, 0, 0, 4825088, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 22150 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5177344, 0, 0, 0, 0, 0, 0, 715, 0, 717, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 22182 */ 732, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 22214 */ 0, 1250, 1252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 367,\n  /* 22246 */ 0, 295, 0, 0, 5742592, 0, 0, 0, 6094848, 0, 0, 4907008, 0, 5079040, 0, 5226496, 0, 5742592, 0, 0, 0,\n  /* 22267 */ 6094848, 0, 4358144, 4907008, 4358144, 5079040, 4358144, 5226496, 4358144, 5742592, 4358144, 4358144,\n  /* 22279 */ 4358144, 6094848, 4358144, 5062656, 0, 0, 0, 4358144, 5062656, 4358144, 4358144, 4358144, 4358144,\n  /* 22292 */ 4358144, 0, 5062656, 0, 0, 0, 0, 0, 6225920, 0, 5062656, 0, 0, 0, 0, 0, 6225920, 4358144, 5062656,\n  /* 22311 */ 4358144, 4358144, 4358144, 0, 900, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 22336 */ 5259264, 0, 0, 0, 0, 0, 0, 0, 746, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 762, 0, 0, 0, 0, 0, 0, 0,\n  /* 22368 */ 0, 521, 521, 521, 521, 521, 521, 521, 521, 2396, 521, 521, 521, 521, 2400, 521, 521, 521, 521, 521, 521,\n  /* 22389 */ 521, 521, 521, 521, 521, 3199, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 22410 */ 521, 521, 521, 521, 521, 1390, 521, 521, 1394, 521, 521, 521, 521, 521, 1401, 521, 521, 4358144, 4358144,\n  /* 22429 */ 4358144, 6225920, 0, 0, 0, 4816896, 4358144, 4358144, 4358144, 4358144, 6086656, 4816896, 0, 0, 0, 0,\n  /* 22445 */ 6086656, 4816896, 0, 0, 0, 0, 6086656, 4816896, 4358144, 4358144, 4358144, 4358144, 6086656, 5087232, 0,\n  /* 22460 */ 5931008, 4358144, 5332992, 5980160, 4358144, 0, 5332992, 5980160, 0, 0, 5332992, 5980160, 0, 4358144,\n  /* 22474 */ 5332992, 5980160, 4358144, 5439488, 5128192, 4358144, 5128192, 0, 5128192, 0, 5128192, 4358144, 4358144,\n  /* 22487 */ 0, 0, 4358144, 4358144, 0, 0, 4358144, 6004736, 6004736, 6004736, 6004736, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 22508 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1289, 0, 0, 0, 0, 0, 0, 0, 0, 1294, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0,\n  /* 22540 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2816, 0, 0, 0, 0, 0, 131072, 0, 0, 0,\n  /* 22573 */ 0, 0, 0, 0, 0, 0, 0, 0, 221645, 221645, 221645, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461,\n  /* 22595 */ 461, 461, 221645, 461, 221645, 221645, 221645, 461, 221645, 221645, 221645, 221645, 221645, 221645, 0, 0,\n  /* 22611 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, 328, 329, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221645,\n  /* 22642 */ 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 22669 */ 0, 0, 0, 0, 0, 3390, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1769, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 22702 */ 1780, 0, 0, 0, 0, 0, 0, 0, 4268032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 755, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 22734 */ 0, 0, 0, 0, 0, 0, 3414, 0, 0, 0, 0, 3418, 0, 0, 0, 0, 3423, 0, 0, 0, 0, 0, 0, 1, 24578, 3, 0, 0, 0, 0, 0,\n  /* 22765 */ 0, 0, 0, 0, 0, 0, 237568, 301, 0, 305, 237568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, 0, 0,\n  /* 22795 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 788, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 305, 0, 0,\n  /* 22829 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 305, 0, 0, 0, 0, 0, 0, 305, 237982, 147456, 0, 0, 0, 305, 0, 0, 0, 0, 0,\n  /* 22858 */ 2334, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2349, 0, 0, 0, 0, 0, 0, 0, 3406, 0, 0,\n  /* 22890 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3420, 3421, 0, 0, 0, 0, 3426, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0,\n  /* 22921 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 516096, 0, 0, 0, 0, 305,\n  /* 22953 */ 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305,\n  /* 22974 */ 305, 305, 305, 0, 305, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 1870, 521, 521, 521, 521, 521, 521,\n  /* 22997 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2453, 521, 521, 521, 2456, 521, 521,\n  /* 23018 */ 521, 521, 521, 2461, 521, 305, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 65536, 302, 0, 4268032, 98304,\n  /* 23040 */ 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3626, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 23073 */ 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144,\n  /* 23084 */ 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4210978, 24578, 3, 0, 0, 296, 0, 0, 0, 0, 296, 0, 0,\n  /* 23103 */ 0, 0, 0, 0, 0, 0, 0, 245760, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 399, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 399,\n  /* 23135 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 245760, 0, 0, 0, 0, 245760, 0, 245760, 0, 245760,\n  /* 23162 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 326, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 23195 */ 4210978, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 23220 */ 0, 0, 0, 0, 0, 0, 0, 212992, 0, 212992, 212992, 212992, 212992, 212992, 212992, 212992, 212992, 212992,\n  /* 23238 */ 212992, 212992, 212992, 212992, 212992, 212992, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1768,\n  /* 23262 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1270, 0, 0,\n  /* 23295 */ 2059, 0, 0, 0, 4825088, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5177344, 0, 0, 0, 0,\n  /* 23325 */ 0, 0, 0, 1730, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 311, 310, 0, 0, 0,\n  /* 23358 */ 310, 310, 311, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262144, 0, 0, 0, 0, 0,\n  /* 23388 */ 0, 0, 0, 0, 0, 350, 0, 0, 0, 0, 0, 0, 0, 0, 351, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 657, 0, 0, 0, 0, 0,\n  /* 23421 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 673, 674, 0, 0, 0, 0, 0, 0, 262144, 262144, 262144, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 23450 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 301, 0, 0, 0, 262144, 0, 262731, 262731,\n  /* 23479 */ 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731,\n  /* 23492 */ 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 0, 262731, 0, 0, 0, 0, 0,\n  /* 23509 */ 521, 521, 521, 521, 521, 3439, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 23530 */ 521, 521, 521, 521, 521, 521, 3670, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 23548 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60591, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 23563 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59853, 57886, 57886, 57886, 57886,\n  /* 23578 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60298, 57886, 57886,\n  /* 23593 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 262731, 1, 24578, 3, 0,\n  /* 23612 */ 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 23640 */ 245760, 245760, 245760, 245760, 245760, 245760, 245760, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278528, 278528, 0,\n  /* 23660 */ 0, 131072, 278528, 0, 0, 0, 278528, 0, 0, 0, 0, 278528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 23689 */ 0, 333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 384, 0, 278528, 278528, 278528, 278528, 278528, 278528,\n  /* 23711 */ 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528,\n  /* 23724 */ 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 0, 278528, 0, 0, 0, 0, 0, 521, 521, 521,\n  /* 23742 */ 521, 3438, 521, 521, 521, 521, 3442, 521, 521, 521, 521, 521, 521, 521, 3448, 521, 521, 521, 521, 521,\n  /* 23762 */ 521, 521, 521, 521, 1901, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 23783 */ 521, 521, 521, 1921, 521, 521, 278528, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032,\n  /* 23805 */ 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262144, 0, 0, 0, 0, 0, 0, 262144, 262144, 0, 0, 0,\n  /* 23834 */ 0, 0, 0, 0, 0, 0, 0, 0, 262144, 262144, 0, 262144, 0, 0, 0, 139264, 147456, 262144, 0, 0, 0, 0, 0, 0, 0,\n  /* 23859 */ 0, 415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 302, 0,\n  /* 23892 */ 0, 0, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 631, 0, 4268032, 305, 634, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 23919 */ 0, 0, 0, 0, 0, 0, 0, 532480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 754, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 23952 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6275072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1506, 0, 0,\n  /* 23984 */ 0, 0, 0, 4857856, 4874240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3624, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 24014 */ 0, 0, 0, 0, 0, 0, 0, 0, 2810, 2811, 0, 0, 0, 0, 0, 0, 0, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 24045 */ 286720, 302, 0, 306, 286720, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 722, 0, 0, 0, 0, 0, 0, 0, 0, 0, 733,\n  /* 24074 */ 0, 0, 0, 0, 733, 0, 739, 0, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, 0,\n  /* 24106 */ 306, 139264, 287138, 0, 0, 0, 306, 0, 0, 0, 0, 0, 2386, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 24130 */ 521, 521, 521, 521, 521, 521, 2402, 521, 2404, 521, 521, 521, 521, 521, 521, 0, 0, 0, 0, 57886, 57886,\n  /* 24151 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59830, 57886, 57886, 57886,\n  /* 24166 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60836, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 24181 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60274,\n  /* 24196 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 306, 306, 306, 306, 306,\n  /* 24214 */ 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 0,\n  /* 24235 */ 306, 0, 0, 0, 0, 0, 521, 521, 521, 3437, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 24258 */ 521, 3449, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3464, 521, 3466, 521, 521, 521, 521, 521, 521,\n  /* 24278 */ 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909,\n  /* 24293 */ 61250, 57909, 57909, 61252, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 24308 */ 57909, 57909, 57909, 57936, 57936, 57936, 57936, 59994, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 24323 */ 57936, 57936, 57936, 57936, 57936, 57936, 306, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 66168, 0,\n  /* 24344 */ 4268032, 305, 98939, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540672, 0, 0, 0, 0, 0, 0, 0, 540672, 0,\n  /* 24372 */ 0, 0, 0, 0, 0, 0, 0, 0, 122880, 0, 4268032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 24404 */ 0, 0, 0, 0, 0, 0, 0, 0, 2352, 0, 0, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 303, 303, 303, 0, 0,\n  /* 24435 */ 303, 303, 295215, 303, 303, 303, 303, 303, 303, 303, 303, 303, 295215, 373, 303, 303, 303, 303, 303, 303,\n  /* 24455 */ 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303,\n  /* 24476 */ 303, 303, 303, 303, 303, 368, 303, 0, 295215, 303, 303, 303, 303, 295285, 295215, 295215, 295215, 295215,\n  /* 24494 */ 295215, 295215, 303, 303, 303, 303, 303, 303, 295285, 295215, 295215, 295215, 303, 303, 303, 295285,\n  /* 24510 */ 139264, 147456, 295215, 295215, 303, 303, 295215, 303, 303, 131072, 303, 303, 303, 303, 295215, 303, 303,\n  /* 24527 */ 303, 303, 295215, 303, 295215, 295215, 295215, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303,\n  /* 24546 */ 303, 303, 303, 295215, 295215, 295215, 295215, 295215, 295215, 303, 303, 303, 295215, 303, 303, 303, 303,\n  /* 24563 */ 303, 303, 303, 303, 303, 303, 303, 303, 303, 295215, 303, 295215, 295215, 295215, 295215, 295215, 295215,\n  /* 24580 */ 295215, 303, 0, 303, 0, 303, 303, 303, 295215, 303, 303, 303, 295215, 295215, 303, 295215, 303, 295215,\n  /* 24598 */ 295215, 295215, 295215, 295215, 295215, 295215, 295215, 295285, 295285, 295285, 295285, 295285, 295285,\n  /* 24611 */ 295285, 295285, 295285, 295285, 295285, 295285, 295285, 295285, 295285, 295285, 295285, 295285, 295285,\n  /* 24624 */ 295215, 295215, 295215, 295215, 295215, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032,\n  /* 24644 */ 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4358144, 4359045, 4358144, 4358144, 4358144,\n  /* 24666 */ 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144,\n  /* 24677 */ 4358144, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 319488, 0, 0, 0, 0, 0,\n  /* 24707 */ 0, 0, 0, 0, 352256, 0, 352256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2373, 0, 0,\n  /* 24738 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 319488, 0, 0, 0, 0, 0, 0, 319488, 319488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 24768 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1743, 0, 0, 0, 0, 0, 0, 0, 1751, 1752, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0,\n  /* 24799 */ 0, 0, 0, 0, 0, 319488, 0, 0, 0, 319488, 319488, 319488, 319488, 319488, 319488, 319488, 319488, 319488,\n  /* 24817 */ 319488, 319488, 319488, 319488, 319488, 319488, 0, 0, 0, 0, 319488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 319488,\n  /* 24839 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 319488, 0, 0, 0, 0, 319488, 0, 319488, 319488, 319488, 0, 24578, 3, 0, 0,\n  /* 24863 */ 4366336, 253952, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 24890 */ 5627904, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4284416, 0, 0, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 24920 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327680, 0, 0, 0, 0, 0, 0, 0, 0, 521, 2389, 521, 521, 521, 521, 521, 521,\n  /* 24948 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3219, 521, 0, 0, 57886,\n  /* 24969 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60571, 57886, 57886, 57886, 57886, 57886, 57886, 60579,\n  /* 24984 */ 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327680, 327680, 327680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 25013 */ 327680, 327680, 327680, 327680, 335872, 327680, 327680, 327680, 335872, 327680, 327680, 327680, 327680,\n  /* 25026 */ 327680, 327680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49716, 0, 0, 0, 0, 0, 327680, 49716, 327680, 1, 24578, 3, 0, 0,\n  /* 25051 */ 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 25078 */ 5627904, 0, 0, 0, 0, 0, 0, 196608, 0, 0, 0, 106496, 0, 0, 4284416, 0, 0, 0, 0, 0, 0, 6275072, 0, 0, 0, 0,\n  /* 25104 */ 0, 0, 0, 0, 0, 0, 49152, 977, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6463488, 0, 0,\n  /* 25131 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4931584, 4939776, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0,\n  /* 25161 */ 0, 0, 0, 0, 0, 0, 344064, 344064, 344064, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344064, 344064, 344064, 344064,\n  /* 25184 */ 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064,\n  /* 25197 */ 344064, 344064, 344064, 344064, 344064, 344064, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 727,\n  /* 25222 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344064, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0,\n  /* 25250 */ 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 25280 */ 0, 0, 0, 0, 0, 356, 357, 358, 359, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 295, 0, 0, 0, 0, 0, 4276224, 1245,\n  /* 25308 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521,\n  /* 25340 */ 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 352256, 0, 0, 0, 0, 0, 0,\n  /* 25372 */ 0, 0, 0, 0, 0, 0, 139264, 147456, 0, 0, 352256, 0, 0, 0, 0, 0, 0, 131072, 0, 352256, 352256, 0, 0, 352256,\n  /* 25396 */ 0, 0, 352256, 0, 352256, 0, 352256, 352256, 352256, 352256, 352256, 352256, 352256, 352256, 352256,\n  /* 25411 */ 352256, 352256, 352256, 352256, 352256, 352256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 25435 */ 1197, 0, 367, 367, 0, 1200, 0, 0, 0, 0, 0, 0, 0, 0, 352256, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0,\n  /* 25461 */ 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 367, 0, 0, 0, 0, 0, 0,\n  /* 25490 */ 0, 0, 0, 0, 0, 0, 706, 0, 0, 1, 291, 3, 0, 0, 0, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 25523 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3398, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 25554 */ 360448, 360448, 360448, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 360448, 360448, 360448, 360448, 360448, 360448,\n  /* 25573 */ 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448,\n  /* 25586 */ 360448, 360448, 360448, 360448, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1226, 0, 0, 0, 0, 0,\n  /* 25614 */ 0, 0, 0, 0, 0, 0, 0, 0, 360448, 1, 0, 3, 155941, 155941, 295, 0, 629, 0, 0, 0, 301, 302, 0, 4268032, 305,\n  /* 25639 */ 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 367, 0, 0, 0, 0, 698, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 25671 */ 0, 0, 0, 0, 0, 1212, 0, 0, 0, 0, 1217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 25704 */ 0, 1806, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4276224, 1245, 0, 0, 0, 0, 0,\n  /* 25735 */ 0, 0, 0, 0, 0, 0, 0, 1259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 25768 */ 0, 0, 0, 0, 0, 1188, 0, 58796, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 25786 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 25801 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59402, 521, 58754, 0, 57886, 57886, 57886, 57886, 57886,\n  /* 25817 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 25832 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58826, 57886, 57886, 50657, 0, 57909,\n  /* 25847 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 25862 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59502,\n  /* 25877 */ 57886, 0, 2281, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 25910 */ 739, 0, 0, 0, 2357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 25944 */ 0, 3428, 0, 57909, 59926, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 25960 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 25975 */ 57909, 57909, 57909, 57909, 58906, 57909, 57909, 59952, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 25990 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 26005 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57886, 57936, 60009, 57936, 57936,\n  /* 26020 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 26035 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521,\n  /* 26050 */ 60035, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 26065 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 26080 */ 57936, 57936, 57936, 60937, 521, 3212, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 0, 0,\n  /* 26100 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 26115 */ 57886, 59387, 59388, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 26130 */ 57886, 57886, 57886, 57886, 57886, 60604, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 26145 */ 57886, 57886, 57886, 57886, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 26161 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60320, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 26176 */ 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60702, 57936, 57936,\n  /* 26191 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886,\n  /* 26207 */ 57886, 0, 0, 0, 0, 0, 0, 0, 3612, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3381, 0, 0, 0, 0, 0, 0, 0,\n  /* 26239 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 369, 0, 0, 0, 57886, 57886, 60830, 57886,\n  /* 26268 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 26283 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60853, 57886,\n  /* 26298 */ 57886, 57936, 57936, 57936, 57936, 60914, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 26313 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 26328 */ 57936, 57936, 57936, 60057, 57936, 57936, 57936, 57936, 61027, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 26343 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 26358 */ 57886, 57886, 57886, 57886, 57886, 57909, 61045, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 26373 */ 57909, 60634, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 26388 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59493, 57909, 57909, 57909, 57909, 57909,\n  /* 26403 */ 57909, 57909, 57909, 57886, 61048, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61056,\n  /* 26418 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 26433 */ 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60378, 57936,\n  /* 26448 */ 57936, 57936, 57886, 57886, 57886, 57886, 61156, 57886, 57886, 57886, 57886, 61157, 61158, 57886, 57886,\n  /* 26463 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 26478 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 26493 */ 59997, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57909, 61175, 57909, 57909,\n  /* 26508 */ 57909, 57909, 61176, 61177, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936,\n  /* 26523 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61194, 57936, 0, 0, 0, 0,\n  /* 26540 */ 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909,\n  /* 26557 */ 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61078, 61079,\n  /* 26572 */ 57936, 57936, 57936, 57936, 61083, 61084, 57936, 57936, 57936, 57936, 57936, 61088, 57936, 57936, 57936,\n  /* 26587 */ 57936, 57936, 57936, 57936, 57936, 57936, 61195, 61196, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 26602 */ 57936, 57936, 521, 521, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 26630 */ 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 3177, 521, 521, 521, 521, 521, 521, 3184, 521, 3186, 521, 521,\n  /* 26653 */ 521, 57936, 57936, 57936, 57936, 57936, 61270, 57936, 57936, 57936, 57936, 57936, 57936, 61276, 57936,\n  /* 26668 */ 57936, 57936, 61280, 57936, 521, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 0, 1791, 0, 0, 0, 0,\n  /* 26694 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 672, 0, 0, 0, 0, 0, 0, 0, 3947, 521, 521,\n  /* 26726 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 61306, 57886, 57886, 57886, 57886, 57886,\n  /* 26744 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58312, 57886, 57886, 57886, 0,\n  /* 26759 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61322, 57909, 57909,\n  /* 26774 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61338, 57936,\n  /* 26789 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521,\n  /* 26804 */ 3759, 521, 57886, 61105, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57886, 61439, 57886, 57886, 57886, 57886,\n  /* 26826 */ 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 61452, 57909, 57909, 57909, 57909, 57909,\n  /* 26841 */ 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 61465, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 26856 */ 57936, 57936, 57936, 60413, 57936, 57936, 57936, 57936, 57936, 57936, 60421, 57936, 57936, 57936, 57936,\n  /* 26871 */ 57936, 60426, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 0, 4077, 0, 521,\n  /* 26890 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 0, 0, 521, 521, 521, 521,\n  /* 26911 */ 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 0, 521, 521, 57886,\n  /* 26927 */ 57886, 57909, 57909, 57936, 57936, 521, 57886, 57909, 57936, 521, 57886, 57909, 57936, 521, 57886, 57909,\n  /* 26943 */ 57936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1829, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 26976 */ 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 376832, 376832, 376832, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 27005 */ 0, 0, 0, 1254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1268, 1269, 0, 0, 0, 0, 0, 419, 419, 419, 419,\n  /* 27034 */ 590, 590, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419,\n  /* 27055 */ 0, 419, 0, 0, 0, 0, 0, 521, 1866, 521, 521, 521, 521, 521, 521, 1872, 521, 521, 521, 521, 521, 521, 521,\n  /* 27078 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 0, 0, 57886, 57886, 57886, 57886, 60568, 57886,\n  /* 27097 */ 57886, 57886, 57886, 57886, 57886, 60575, 57886, 60577, 57886, 57886, 419, 1, 24578, 3, 0, 0, 4366336, 0,\n  /* 27115 */ 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 367, 0,\n  /* 27143 */ 696, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2817, 0,\n  /* 27177 */ 0, 0, 4268773, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 27209 */ 2380, 0, 0, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 307, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 27241 */ 0, 0, 0, 721, 0, 0, 0, 0, 0, 0, 0, 0, 731, 0, 637, 731, 0, 735, 736, 637, 0, 0, 0, 0, 0, 0, 0, 131072, 0,\n  /* 27270 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 393678, 393678, 393678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1309, 0, 0,\n  /* 27299 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 4025, 521, 521, 521, 521,\n  /* 27324 */ 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 393678, 0, 393678, 393678, 393678, 0,\n  /* 27341 */ 393678, 393678, 393678, 393678, 393678, 393678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 27365 */ 1771, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0,\n  /* 27394 */ 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 425984, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 27423 */ 0, 0, 0, 0, 0, 0, 521, 521, 521, 3176, 521, 521, 521, 521, 521, 3181, 521, 521, 521, 521, 521, 521, 521,\n  /* 27446 */ 0, 0, 0, 4268032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 475136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 27478 */ 374, 0, 0, 375, 0, 0, 0, 0, 0, 327, 375, 330, 374, 0, 0, 0, 0, 0, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 27508 */ 0, 0, 0, 0, 304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 57887, 521, 57887, 521, 521, 57887,\n  /* 27535 */ 521, 521, 57910, 57887, 521, 521, 57887, 57887, 57887, 57910, 0, 0, 0, 420, 420, 420, 420, 420, 420, 420,\n  /* 27555 */ 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 0, 420, 0, 0, 0,\n  /* 27578 */ 0, 0, 521, 3435, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 27600 */ 521, 521, 521, 521, 521, 521, 521, 1916, 521, 521, 521, 521, 521, 521, 420, 1, 24578, 3, 155941, 155941,\n  /* 27620 */ 295, 0, 0, 0, 0, 0, 301, 302, 0, 304, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 723, 0, 0, 0, 0,\n  /* 27651 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1287, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 741, 420, 0,\n  /* 27684 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2791, 0, 0, 1239, 0,\n  /* 27717 */ 0, 0, 741, 1246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521,\n  /* 27749 */ 521, 521, 1322, 521, 521, 521, 521, 521, 521, 521, 2468, 0, 0, 0, 57886, 57886, 57886, 57886, 57886,\n  /* 27768 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 27783 */ 57886, 57886, 57886, 60276, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 521, 521, 521, 2468,\n  /* 27799 */ 2895, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 27816 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60305, 57886,\n  /* 27831 */ 57886, 0, 0, 0, 2963, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 27862 */ 417792, 308, 309, 0, 0, 0, 0, 0, 0, 1815, 0, 0, 0, 0, 0, 0, 0, 0, 1821, 0, 1823, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 27891 */ 0, 0, 0, 0, 0, 0, 540672, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3127, 0, 0, 0,\n  /* 27924 */ 0, 3132, 0, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 309, 0, 417792, 417792, 0, 0, 417792,\n  /* 27950 */ 417792, 417792, 417792, 417792, 417792, 417792, 417792, 417792, 417792, 417792, 417792, 417792, 418101,\n  /* 27963 */ 417792, 417792, 418100, 418101, 417792, 417792, 418100, 417792, 418100, 417792, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 27981 */ 417792, 0, 0, 0, 417792, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 309, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 28011 */ 0, 0, 0, 0, 0, 0, 0, 1802, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 417792, 1, 24578, 3, 0, 0, 4366964, 0,\n  /* 28040 */ 0, 0, 0, 0, 301, 302, 311296, 4268032, 305, 306, 0, 434176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1846, 0,\n  /* 28066 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1859, 0, 0, 1860, 0, 0, 900, 900, 5415812, 900, 5448580, 900, 5464964,\n  /* 28091 */ 900, 5481348, 5563268, 900, 900, 900, 5636996, 900, 5686148, 900, 900, 5751684, 900, 900, 900, 900, 900,\n  /* 28108 */ 5874564, 900, 900, 900, 900, 900, 900, 900, 900, 900, 6464388, 0, 0, 0, 0, 976, 976, 976, 976, 976, 976,\n  /* 28129 */ 976, 976, 976, 976, 976, 4932560, 4940752, 976, 976, 976, 976, 976, 4359044, 4858756, 4875140, 4359044,\n  /* 28145 */ 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044,\n  /* 28156 */ 4359044, 5260164, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 5415812,\n  /* 28167 */ 4359044, 5448580, 4359044, 5464964, 4359044, 5481348, 5563268, 4359044, 4359044, 4359044, 5636996,\n  /* 28178 */ 4359044, 5686148, 4359044, 4359044, 5751684, 4359044, 4359044, 4359044, 4359044, 4359044, 5874564,\n  /* 28189 */ 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044,\n  /* 28200 */ 6275972, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 5342084, 4359044, 4359044, 4359044,\n  /* 28211 */ 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 5628804, 5653380,\n  /* 28222 */ 4359044, 5702532, 4359044, 4359044, 5809028, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044,\n  /* 28233 */ 4359044, 4907008, 0, 5079040, 6094848, 0, 0, 0, 4358144, 4907008, 4358144, 5079040, 4358144, 5226496,\n  /* 28247 */ 4358144, 5742592, 4358144, 4358144, 4358144, 6094848, 900, 4907908, 900, 5079940, 900, 5227396, 900,\n  /* 28260 */ 5243780, 900, 900, 900, 900, 900, 900, 900, 5342084, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900,\n  /* 28279 */ 900, 900, 5628804, 5653380, 900, 5702532, 900, 900, 900, 900, 900, 900, 5211012, 900, 900, 900, 900,\n  /* 28296 */ 5292932, 900, 900, 900, 900, 5366660, 900, 900, 900, 5456772, 900, 900, 900, 900, 900, 5555076, 5571460,\n  /* 28313 */ 5579652, 5620612, 5669764, 900, 0, 0, 976, 976, 976, 4826064, 976, 976, 976, 976, 976, 976, 976, 976, 976,\n  /* 28332 */ 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 5178320, 976, 976, 976, 976, 976, 5112784, 976,\n  /* 28351 */ 976, 976, 976, 976, 5284816, 976, 976, 976, 976, 5473232, 5522384, 976, 976, 976, 976, 5596112, 5710800,\n  /* 28368 */ 5718992, 976, 5825488, 5866448, 976, 976, 5923792, 976, 5243856, 976, 976, 976, 976, 976, 976, 976,\n  /* 28384 */ 5342160, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 5628880, 5653456, 976, 5702608, 976,\n  /* 28402 */ 976, 976, 976, 976, 976, 976, 5260240, 976, 976, 976, 976, 976, 976, 976, 976, 5415888, 976, 5448656, 976,\n  /* 28421 */ 5465040, 976, 5481424, 5563344, 976, 976, 976, 5637072, 976, 5686224, 976, 976, 5751760, 976, 4358144,\n  /* 28436 */ 4358144, 4358144, 4358144, 4358144, 6463488, 0, 0, 0, 0, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900,\n  /* 28455 */ 900, 4932484, 4940676, 900, 900, 900, 900, 900, 900, 5055364, 900, 900, 5112708, 900, 900, 900, 900, 900,\n  /* 28473 */ 5284740, 900, 900, 900, 900, 5473156, 5522308, 900, 900, 900, 900, 5596036, 5710724, 5718916, 900,\n  /* 28488 */ 5825412, 5866372, 900, 900, 5923716, 900, 900, 6022020, 900, 900, 900, 5792644, 5817220, 900, 5858180,\n  /* 28503 */ 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 6120324, 900, 6169476, 900, 900, 900,\n  /* 28522 */ 900, 900, 6243204, 900, 6292356, 900, 6316932, 976, 5055440, 976, 976, 976, 976, 976, 976, 976, 976,\n  /* 28539 */ 5211088, 976, 976, 976, 976, 5293008, 976, 976, 976, 976, 5366736, 976, 976, 976, 5456848, 976, 976, 976,\n  /* 28557 */ 976, 976, 5555152, 5571536, 5579728, 5620688, 5669840, 976, 976, 976, 5792720, 5817296, 976, 5858256, 976,\n  /* 28572 */ 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 6120400, 976, 6169552, 976, 976, 976, 976,\n  /* 28591 */ 976, 6243280, 976, 6292432, 976, 6317008, 976, 976, 976, 976, 976, 976, 976, 976, 976, 6464464, 4359044,\n  /* 28608 */ 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4932484,\n  /* 28619 */ 4940676, 4359044, 4359044, 4359044, 4359044, 4359044, 4358144, 4358144, 4358144, 4358144, 4358144,\n  /* 28630 */ 4358144, 0, 900, 900, 900, 900, 900, 900, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 4923392,\n  /* 28652 */ 4359044, 5055364, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 5211012,\n  /* 28663 */ 4359044, 4359044, 4359044, 4359044, 5292932, 4359044, 4359044, 4359044, 4359044, 5366660, 4359044,\n  /* 28674 */ 4359044, 4359044, 5456772, 4359044, 4359044, 4359044, 4359044, 4359044, 5555076, 5571460, 5579652,\n  /* 28685 */ 5620612, 5669764, 4359044, 4359044, 4359044, 5792644, 5817220, 4359044, 5858180, 4359044, 4359044,\n  /* 28696 */ 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044,\n  /* 28707 */ 6120324, 4359044, 6169476, 4359044, 4359044, 4359044, 4359044, 4359044, 6243204, 4359044, 6292356,\n  /* 28718 */ 4359044, 6316932, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044,\n  /* 28729 */ 6464388, 4358144, 4358144, 4358144, 4358144, 4358144, 900, 900, 900, 900, 900, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 28749 */ 0, 0, 0, 0, 0, 0, 0, 4931584, 0, 0, 0, 0, 0, 0, 0, 4358144, 6430720, 6438912, 0, 0, 0, 0, 0, 0, 4785028,\n  /* 28774 */ 900, 900, 900, 4850564, 900, 900, 900, 900, 900, 4916100, 900, 4957060, 4973444, 900, 900, 900, 900, 900,\n  /* 28792 */ 900, 5071748, 900, 900, 5194628, 900, 900, 900, 900, 900, 900, 900, 900, 976, 976, 976, 976, 976, 5194704,\n  /* 28811 */ 976, 976, 976, 976, 976, 976, 976, 976, 4359044, 4359044, 4359044, 4359044, 4359044, 5194628, 4359044, 0,\n  /* 28827 */ 0, 4785104, 976, 976, 976, 4850640, 976, 976, 976, 976, 976, 4916176, 976, 4957136, 4973520, 976, 976,\n  /* 28844 */ 976, 976, 976, 976, 5071824, 976, 976, 976, 976, 976, 976, 976, 5219280, 976, 976, 6357968, 6382544,\n  /* 28861 */ 6398928, 4801412, 4809604, 4359044, 4359044, 4891524, 4359044, 4948868, 4359044, 4359044, 4359044,\n  /* 28872 */ 5047172, 4359044, 4359044, 4359044, 4359044, 5186436, 4359044, 5235588, 5301124, 4359044, 4359044,\n  /* 28883 */ 5407620, 5530500, 4359044, 4359044, 4359044, 4359044, 4359044, 4923392, 4358144, 4358144, 4358144,\n  /* 28894 */ 4358144, 4358144, 900, 4924292, 900, 900, 900, 900, 4366336, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 28917 */ 1255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1264, 0, 0, 0, 0, 0, 0, 0, 5268432, 976, 976, 5309392, 5317584, 976, 976,\n  /* 28942 */ 976, 5432272, 976, 5489616, 976, 976, 976, 976, 976, 976, 976, 976, 976, 5800912, 976, 976, 5882832, 976,\n  /* 28960 */ 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 4359044, 4359044, 4359044,\n  /* 28978 */ 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044,\n  /* 28989 */ 4359044, 4359044, 976, 6104016, 976, 976, 976, 6185936, 976, 976, 976, 6284240, 976, 976, 6333392, 976,\n  /* 29005 */ 976, 976, 6390736, 976, 976, 6431696, 6439888, 4785028, 4359044, 4359044, 4359044, 4850564, 4359044,\n  /* 29018 */ 4359044, 4359044, 4359044, 4359044, 4916100, 4359044, 4957060, 4973444, 4359044, 4359044, 4359044,\n  /* 29029 */ 4359044, 4359044, 4359044, 5071748, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044,\n  /* 29040 */ 5219204, 4359044, 5268356, 4359044, 4359044, 5309316, 5317508, 4359044, 4359044, 4359044, 5432196,\n  /* 29051 */ 4359044, 5489540, 4359044, 4359044, 4359044, 4359044, 4359044, 6054788, 4359044, 4359044, 4359044, 0, 0,\n  /* 29064 */ 0, 0, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 5193728, 4358144, 4358144, 4358144, 4358144,\n  /* 29079 */ 4358144, 4358144, 4358144, 900, 900, 900, 5096324, 5104516, 900, 900, 5202820, 900, 900, 900, 900, 900,\n  /* 29095 */ 900, 900, 900, 900, 900, 900, 5890948, 900, 900, 900, 6030212, 900, 900, 900, 900, 6161284, 900, 900, 900,\n  /* 29114 */ 900, 6407044, 976, 976, 976, 976, 976, 976, 976, 976, 4998096, 976, 976, 5039056, 976, 976, 976, 5096400,\n  /* 29132 */ 5104592, 976, 976, 5202896, 976, 976, 976, 976, 976, 976, 976, 5891024, 976, 976, 976, 6030288, 976, 976,\n  /* 29150 */ 976, 976, 6161360, 976, 976, 976, 976, 976, 976, 976, 6407120, 4359044, 4359044, 4359044, 4359044,\n  /* 29165 */ 4359044, 4359044, 4359044, 4359044, 4998020, 4359044, 4358144, 6078464, 6111232, 4358144, 6176768,\n  /* 29176 */ 6209536, 6234112, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 0, 900, 900, 4842372,\n  /* 29190 */ 900, 900, 900, 4899716, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900,\n  /* 29210 */ 900, 900, 900, 975, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976,\n  /* 29231 */ 976, 976, 6300624, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 5809028, 6038404, 900, 900,\n  /* 29249 */ 6079364, 6112132, 900, 6177668, 6210436, 900, 6235012, 900, 900, 900, 900, 900, 900, 900, 0, 0, 976, 976,\n  /* 29267 */ 4842448, 976, 976, 976, 4899792, 976, 976, 976, 976, 976, 976, 5874640, 976, 976, 976, 976, 976, 976, 976,\n  /* 29286 */ 976, 976, 976, 976, 6276048, 976, 976, 976, 976, 976, 976, 976, 976, 976, 0, 900, 4359044, 4359044,\n  /* 29304 */ 4359044, 4359044, 4359044, 4359044, 5112708, 4359044, 4359044, 4359044, 4359044, 4359044, 5284740,\n  /* 29315 */ 4359044, 4359044, 4359044, 4359044, 5473156, 5522308, 4359044, 4359044, 4359044, 4359044, 5596036,\n  /* 29326 */ 5710724, 5718916, 4359044, 5825412, 5866372, 4359044, 4359044, 5923716, 976, 6022096, 976, 6038480, 976,\n  /* 29339 */ 976, 6079440, 6112208, 976, 6177744, 6210512, 976, 6235088, 976, 976, 976, 976, 976, 976, 976, 4359044,\n  /* 29355 */ 4359044, 4842372, 4359044, 4359044, 4359044, 4899716, 4359044, 4359044, 4359044, 4359044, 4359044,\n  /* 29366 */ 4359044, 4359044, 5800836, 4359044, 4359044, 5882756, 4359044, 4359044, 4359044, 4359044, 4359044,\n  /* 29377 */ 4359044, 4359044, 4359044, 4359044, 6103940, 4359044, 4359044, 4359044, 6185860, 4359044, 4359044,\n  /* 29388 */ 4359044, 6284164, 4359044, 4359044, 6333316, 4359044, 4359044, 6022020, 4359044, 6038404, 4359044,\n  /* 29399 */ 4359044, 6079364, 6112132, 4359044, 6177668, 6210436, 4359044, 6235012, 4359044, 4359044, 4359044,\n  /* 29410 */ 4359044, 4359044, 4359044, 4359044, 4358144, 4358144, 4358144, 900, 900, 900, 0, 0, 0, 0, 0, 0, 0, 1760,\n  /* 29428 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139264, 147456, 0, 0, 0, 419,\n  /* 29459 */ 0, 4358144, 4358144, 4358144, 5890048, 4358144, 4358144, 4358144, 6029312, 4358144, 4358144, 4358144,\n  /* 29471 */ 4358144, 6160384, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6406144, 900, 900, 900, 900, 900,\n  /* 29485 */ 900, 900, 900, 4998020, 900, 900, 5038980, 4359044, 5038980, 4359044, 4359044, 4359044, 5096324, 5104516,\n  /* 29499 */ 4359044, 4359044, 5202820, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044,\n  /* 29510 */ 4359044, 4359044, 4359044, 5890948, 4359044, 4359044, 4359044, 6030212, 4359044, 4359044, 4359044,\n  /* 29521 */ 4359044, 6161284, 4359044, 4359044, 4359044, 6226820, 0, 0, 0, 4816896, 4358144, 4358144, 4358144,\n  /* 29534 */ 4358144, 6086656, 4817796, 900, 900, 900, 900, 6087556, 4817872, 976, 976, 976, 976, 6087632, 4817796,\n  /* 29549 */ 4359044, 4359044, 4359044, 4359044, 6087556, 5087232, 4358144, 4358144, 4358144, 5898240, 4358144,\n  /* 29560 */ 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6307840, 4358144, 4358144, 6356992, 6381568,\n  /* 29571 */ 6397952, 4801412, 4809604, 900, 900, 4891524, 900, 4948868, 900, 900, 900, 5047172, 900, 900, 900, 900,\n  /* 29587 */ 900, 6054788, 900, 900, 900, 976, 976, 5014480, 976, 976, 976, 976, 976, 976, 976, 976, 976, 6054864, 976,\n  /* 29606 */ 976, 976, 4359044, 4359044, 5014404, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 6407044,\n  /* 29618 */ 4358144, 4358144, 4358144, 900, 900, 900, 4890624, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5898240, 5963776, 0, 0,\n  /* 29638 */ 6193152, 0, 0, 5406720, 6397952, 5186436, 900, 5235588, 5301124, 900, 900, 5407620, 5530500, 900, 900,\n  /* 29653 */ 900, 900, 5899140, 900, 900, 900, 900, 900, 900, 900, 900, 6308740, 900, 900, 6357892, 6382468, 6398852,\n  /* 29670 */ 4801488, 4809680, 976, 976, 4891600, 976, 4948944, 976, 976, 976, 5047248, 976, 976, 976, 976, 5186512,\n  /* 29686 */ 976, 5235664, 5301200, 976, 976, 5407696, 5530576, 976, 976, 976, 976, 5899216, 976, 976, 976, 976, 976,\n  /* 29703 */ 976, 976, 976, 6308816, 5899140, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044,\n  /* 29716 */ 6308740, 4359044, 4359044, 6357892, 6382468, 6398852, 5021696, 4358144, 4358144, 5022596, 900, 900, 0,\n  /* 29729 */ 4980736, 0, 0, 0, 0, 0, 5373952, 5734400, 6045696, 0, 0, 0, 0, 0, 2771, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 29755 */ 0, 0, 0, 0, 0, 2785, 0, 2786, 0, 0, 0, 0, 0, 0, 0, 0, 1843, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 29787 */ 0, 0, 0, 0, 0, 0, 0, 0, 1263, 0, 0, 0, 0, 0, 0, 0, 0, 4980736, 4358144, 4358144, 4358144, 4358144,\n  /* 29809 */ 4358144, 4358144, 4358144, 4358144, 5324800, 5373952, 5537792, 5545984, 5734400, 5971968, 4358144,\n  /* 29820 */ 6045696, 4358144, 6070272, 4358144, 4358144, 4358144, 6348800, 900, 4866948, 4883332, 900, 4981636, 900,\n  /* 29833 */ 900, 900, 900, 5325700, 5374852, 5538692, 5546884, 5587844, 5735300, 5972868, 900, 6046596, 900, 6071172,\n  /* 29847 */ 900, 900, 900, 900, 6349700, 976, 4867024, 4883408, 976, 4981712, 976, 976, 976, 976, 976, 976, 976, 976,\n  /* 29865 */ 5325776, 5374928, 5538768, 5546960, 5587920, 5735376, 5972944, 976, 6046672, 976, 6071248, 976, 976, 976,\n  /* 29879 */ 976, 6349776, 4359044, 4866948, 4883332, 4359044, 4981636, 4359044, 4359044, 4359044, 4359044, 4359044,\n  /* 29891 */ 4359044, 4359044, 4359044, 5325700, 5374852, 5538692, 5546884, 5587844, 5735300, 5972868, 4359044,\n  /* 29902 */ 6046596, 4359044, 6071172, 4359044, 4359044, 4359044, 4359044, 6349700, 4358144, 6144000, 900, 6144900, 0,\n  /* 29915 */ 4988928, 5005312, 0, 0, 0, 0, 5775360, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 655, 0, 0, 521, 521, 521, 521, 521,\n  /* 29939 */ 845, 521, 521, 861, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886,\n  /* 29958 */ 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 29973 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59499,\n  /* 29988 */ 57909, 57909, 57909, 57886, 5693440, 0, 6496256, 5144576, 5136384, 0, 5914624, 4358144, 4358144, 5005312,\n  /* 30002 */ 4358144, 4358144, 4358144, 5120000, 5136384, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144,\n  /* 30013 */ 4358144, 4358144, 4358144, 6324224, 900, 900, 5006212, 900, 900, 900, 5120900, 5137284, 900, 900, 900,\n  /* 30028 */ 900, 900, 900, 900, 900, 900, 900, 6325124, 976, 976, 5006288, 976, 976, 976, 5120976, 5137360, 976, 976,\n  /* 30046 */ 976, 976, 976, 976, 976, 976, 976, 976, 6325200, 4359044, 4359044, 4359044, 6390660, 4359044, 4359044,\n  /* 30061 */ 6431620, 6439812, 4358144, 4358144, 4358144, 6266880, 6488064, 900, 900, 900, 6267780, 6488964, 0, 0, 0,\n  /* 30076 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1767, 0, 0, 0, 0, 0, 1773, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4359044,\n  /* 30106 */ 5006212, 4359044, 4359044, 4359044, 5120900, 5137284, 4359044, 4359044, 4359044, 4359044, 4359044,\n  /* 30117 */ 4359044, 4359044, 4359044, 4359044, 4359044, 6325124, 5914624, 5915524, 0, 0, 0, 0, 0, 5513216, 5783552,\n  /* 30132 */ 0, 3627, 0, 0, 0, 0, 0, 0, 2285, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 30165 */ 0, 1265, 0, 0, 0, 0, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144,\n  /* 30182 */ 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 900, 900, 900, 900, 900, 900, 900, 900,\n  /* 30197 */ 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 6300548, 900, 900, 900, 900, 900, 900, 900,\n  /* 30217 */ 900, 900, 900, 900, 0, 5013504, 0, 0, 6053888, 0, 0, 0, 0, 6012928, 4358144, 4358144, 5013504, 4358144,\n  /* 30235 */ 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6053888, 4358144, 4358144, 900,\n  /* 30247 */ 900, 5014404, 900, 900, 900, 900, 6275972, 900, 900, 900, 900, 900, 900, 900, 900, 900, 0, 0, 977, 976,\n  /* 30267 */ 976, 976, 976, 976, 4858832, 4875216, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 0, 0, 0, 0, 900,\n  /* 30288 */ 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044,\n  /* 30299 */ 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 6300548, 4359044, 4359044, 4359044,\n  /* 30310 */ 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4358144, 4358144, 900, 5743492,\n  /* 30322 */ 900, 900, 900, 6095748, 900, 976, 4907984, 976, 5080016, 976, 5227472, 976, 5743568, 976, 976, 976,\n  /* 30338 */ 6095824, 976, 4359044, 4907908, 4359044, 5079940, 4359044, 5227396, 4359044, 5743492, 4359044, 4359044,\n  /* 30350 */ 4359044, 6095748, 4359044, 5062656, 0, 0, 0, 4358144, 5062656, 4358144, 4358144, 4358144, 4358144,\n  /* 30363 */ 4358144, 900, 5063556, 900, 900, 900, 900, 900, 6226820, 976, 5063632, 976, 976, 976, 976, 976, 6226896,\n  /* 30380 */ 4359044, 5063556, 4359044, 4359044, 4359044, 4825988, 4359044, 4359044, 4359044, 4359044, 4359044,\n  /* 30391 */ 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044,\n  /* 30402 */ 4359044, 4359044, 4359044, 4359044, 5178244, 4359044, 4359044, 4359044, 4359044, 4359044, 5243780,\n  /* 30413 */ 4359044, 0, 5931008, 4358144, 5332992, 5980160, 4358144, 900, 5333892, 5981060, 900, 976, 5333968,\n  /* 30426 */ 5981136, 976, 4359044, 5333892, 5981060, 4359044, 5439488, 5128192, 4358144, 5129092, 900, 5129168, 976,\n  /* 30439 */ 5129092, 4359044, 4358144, 900, 976, 4359044, 4358144, 900, 976, 4359044, 6004736, 6005636, 6005712,\n  /* 30452 */ 6005636, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2345, 0, 0, 0, 0, 0, 2351, 0,\n  /* 30483 */ 0, 0, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450560,\n  /* 30515 */ 0, 0, 0, 0, 0, 0, 450560, 0, 0, 450560, 0, 450560, 450560, 450560, 450560, 450560, 450560, 0, 0, 0, 0,\n  /* 30536 */ 131072, 0, 0, 0, 0, 0, 0, 450560, 0, 0, 0, 450560, 0, 450560, 450560, 450560, 450560, 450560, 450560,\n  /* 30555 */ 450560, 450560, 450560, 450560, 450560, 450560, 450560, 450560, 450560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 30575 */ 0, 0, 0, 0, 0, 0, 0, 1824, 0, 0, 0, 0, 0, 0, 1729, 0, 0, 0, 0, 0, 0, 450560, 1, 24578, 3, 0, 0, 4366336,\n  /* 30603 */ 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1848, 0, 0, 0, 0,\n  /* 30633 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2359296, 0, 2359296, 0, 0, 0, 2359296, 0, 2359296, 2359296,\n  /* 30657 */ 2359296, 2359296, 2359296, 2359296, 4358144, 6291456, 4358144, 6316032, 4358144, 4358144, 4358144,\n  /* 30668 */ 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6463488, 4358144, 4358144, 4358144, 4358144,\n  /* 30679 */ 4358144, 0, 0, 0, 0, 0, 0, 302, 0, 0, 306, 0, 0, 0, 0, 0, 0, 2335, 0, 0, 0, 0, 0, 2339, 0, 0, 0, 0, 0, 0,\n  /* 30709 */ 0, 2343, 2344, 0, 0, 0, 0, 0, 2350, 0, 0, 0, 0, 0, 0, 1302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 30740 */ 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 2836, 521, 521, 521, 521, 2840, 521, 521, 4358144, 6430720,\n  /* 30760 */ 6438912, 901, 0, 0, 0, 901, 0, 4784128, 0, 0, 0, 4849664, 0, 0, 0, 0, 0, 4915200, 0, 4956160, 4972544, 0,\n  /* 30782 */ 0, 0, 0, 0, 0, 5070848, 0, 0, 0, 0, 0, 744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 30815 */ 0, 0, 0, 0, 0, 327, 0, 0, 374, 374, 404, 977, 0, 4784128, 0, 0, 0, 4849664, 0, 0, 0, 0, 0, 4915200, 0,\n  /* 30840 */ 4956160, 4972544, 0, 0, 0, 0, 0, 0, 5070848, 0, 0, 0, 0, 0, 0, 0, 5218304, 0, 5267456, 0, 0, 5308416,\n  /* 30862 */ 5316608, 0, 0, 0, 5431296, 0, 5488640, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5799936, 0, 0, 5881856, 0, 0, 0, 0, 0,\n  /* 30887 */ 0, 0, 0, 4358144, 6078464, 6111232, 4358144, 6176768, 6209536, 6234112, 4358144, 4358144, 4358144,\n  /* 30900 */ 4358144, 4358144, 4358144, 4358144, 901, 0, 0, 0, 4841472, 0, 0, 0, 4898816, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 30922 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3653, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 30943 */ 521, 521, 521, 3218, 521, 521, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 30961 */ 60573, 57886, 60576, 57886, 57886, 57886, 6037504, 0, 0, 6078464, 6111232, 0, 6176768, 6209536, 0,\n  /* 30976 */ 6234112, 0, 0, 0, 0, 0, 0, 0, 977, 0, 0, 0, 4841472, 0, 0, 0, 4898816, 0, 0, 0, 0, 0, 0, 0, 0, 6103040, 0,\n  /* 31003 */ 0, 0, 6184960, 0, 0, 0, 6283264, 0, 0, 6332416, 0, 0, 0, 6389760, 0, 0, 6430720, 6438912, 0, 0, 0, 0, 0,\n  /* 31026 */ 0, 0, 0, 459186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 459215, 459215, 459215, 459215, 459215, 459215, 459215,\n  /* 31048 */ 459215, 459215, 459215, 459215, 459215, 459215, 459215, 459215, 459215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 31068 */ 0, 0, 0, 0, 0, 0, 0, 2291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 459340, 459340, 459340, 459340,\n  /* 31096 */ 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340,\n  /* 31109 */ 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459215, 459372, 459215, 459215, 459372, 1,\n  /* 31123 */ 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 31150 */ 0, 0, 0, 2777, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5480448, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 31182 */ 0, 5840896, 5849088, 0, 1, 24578, 3, 0, 0, 0, 0, 507904, 0, 0, 0, 507904, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 31209 */ 0, 0, 0, 0, 0, 0, 0, 507904, 0, 0, 0, 0, 0, 2796, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2804, 0, 0, 0, 0, 0, 0,\n  /* 31241 */ 0, 0, 0, 0, 0, 0, 0, 0, 3385, 3386, 0, 0, 0, 0, 3391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, 0,\n  /* 31273 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2779, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2789, 0, 0, 0, 2793, 0,\n  /* 31305 */ 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 507904, 507904, 507904, 507904, 507904, 507904, 507904,\n  /* 31327 */ 507904, 507904, 507904, 507904, 507904, 507904, 507904, 507904, 507904, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 31347 */ 0, 0, 0, 0, 0, 0, 0, 2781, 0, 0, 2784, 0, 0, 0, 0, 2788, 0, 0, 0, 0, 0, 507904, 1, 24578, 3, 0, 0,\n  /* 31374 */ 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 442368, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 31400 */ 658, 0, 0, 661, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1225, 0, 0, 0, 0, 0, 0, 0, 1233, 0, 0,\n  /* 31432 */ 0, 0, 0, 0, 1, 24578, 3, 0, 0, 0, 0, 0, 516096, 0, 0, 0, 516096, 0, 0, 0, 0, 0, 0, 516096, 0, 0, 0, 0, 0,\n  /* 31461 */ 0, 0, 0, 0, 0, 0, 0, 2287, 0, 2288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 31492 */ 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 516560, 516560, 516560, 516560, 516560, 516560, 516560, 516560,\n  /* 31512 */ 516560, 516560, 516560, 516560, 516560, 516560, 516560, 516560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 31534 */ 0, 0, 0, 0, 3152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 516560, 1, 24578, 0, 0, 0, 4366336, 0, 0, 548864,\n  /* 31562 */ 0, 0, 301, 302, 0, 4268032, 305, 306, 409600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1806, 0, 2340, 0, 0,\n  /* 31589 */ 0, 0, 0, 0, 0, 0, 2347, 0, 0, 0, 0, 0, 0, 2354, 4358144, 5005312, 4358144, 4358144, 4358144, 5120000,\n  /* 31609 */ 5136384, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144,\n  /* 31620 */ 6324224, 5914624, 5914624, 0, 0, 0, 0, 0, 5513216, 5783552, 0, 40960, 0, 0, 0, 0, 0, 0, 2747, 0, 2749, 0,\n  /* 31642 */ 0, 2752, 0, 0, 0, 0, 0, 0, 2757, 0, 0, 0, 2760, 2761, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521,\n  /* 31669 */ 521, 855, 521, 521, 521, 521, 521, 874, 521, 521, 521, 521, 892, 521, 521, 521, 57886, 57886, 57886, 1,\n  /* 31689 */ 24578, 4227364, 0, 0, 0, 0, 0, 0, 298, 0, 0, 0, 298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 31720 */ 0, 1227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540672, 0, 0, 540672, 0, 0, 0, 540672, 0, 0, 0, 0, 0, 0,\n  /* 31749 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1857, 0, 0, 0, 0, 0, 0, 0, 0, 1, 24578, 4227364, 0,\n  /* 31780 */ 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3148,\n  /* 31808 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 31842 */ 0, 4268032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 499712, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3389,\n  /* 31873 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2370, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,\n  /* 31906 */ 24578, 3, 155941, 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 31938 */ 636, 0, 0, 0, 521, 521, 521, 58754, 901, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 31956 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 31971 */ 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 0, 0, 0, 0, 742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 31995 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 437, 0, 0, 0, 0,\n  /* 32028 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57887, 57887,\n  /* 32058 */ 57887, 57887, 57887, 57887, 57887, 57910, 57910, 57887, 57887, 57937, 57887, 57887, 57887, 57887, 57887,\n  /* 32073 */ 57887, 57887, 57937, 57937, 57887, 57887, 57887, 57887, 57937, 57937, 57887, 521, 57887, 57887, 57887, 1,\n  /* 32089 */ 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 32116 */ 0, 0, 0, 4399797, 4399797, 4399797, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 410, 358, 0, 0, 399, 0,\n  /* 32143 */ 0, 0, 0, 0, 139264, 147456, 399, 410, 0, 423, 410, 1, 24578, 3, 155942, 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 32169 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1236, 0, 0, 0, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 32202 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 573440, 0, 573440, 573440, 573440, 0, 573440,\n  /* 32229 */ 573440, 573440, 573440, 573440, 573440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3628, 0, 0,\n  /* 32255 */ 0, 3631, 0, 0, 0, 0, 0, 0, 0, 0, 3639, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 573440,\n  /* 32283 */ 573440, 573440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1819, 1820, 0, 1822, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 32312 */ 0, 0, 0, 1836, 0, 0, 0, 0, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440,\n  /* 32330 */ 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440,\n  /* 32343 */ 573440, 573440, 573440, 573440, 573440, 573440, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0,\n  /* 32363 */ 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4399798, 311296, 4399798, 0, 0, 0, 311296, 0,\n  /* 32388 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4276224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1260, 0, 0, 0,\n  /* 32420 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1847, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1738, 0, 5300224,\n  /* 32450 */ 5234688, 5423104, 0, 0, 0, 0, 5988352, 0, 0, 6135808, 6307840, 0, 5996544, 4800512, 0, 6356992, 3627, 0,\n  /* 32468 */ 0, 5496832, 0, 0, 0, 0, 0, 5611520, 0, 0, 0, 0, 0, 0, 0, 1792, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1801, 0, 0, 0,\n  /* 32497 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1818, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 326,\n  /* 32530 */ 326, 376, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 630, 302, 0, 4268032,\n  /* 32557 */ 633, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 32590 */ 0, 0, 0, 2806, 0, 0, 0, 0, 0, 0, 0, 0, 2814, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 32621 */ 581632, 0, 0, 0, 581632, 581632, 581632, 581632, 581632, 581632, 581632, 581632, 581632, 581632, 581632,\n  /* 32636 */ 581632, 581632, 581632, 581632, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 32665 */ 0, 0, 0, 0, 0, 0, 0, 340, 581632, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305,\n  /* 32690 */ 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3172, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 32717 */ 521, 3183, 521, 521, 3187, 521, 521, 6258688, 6447104, 0, 0, 6127616, 0, 6348800, 5906432, 0, 5537792,\n  /* 32734 */ 3774, 0, 0, 0, 0, 5939200, 0, 0, 5677056, 6365184, 4866048, 0, 6070272, 5545984, 5152768, 0, 0, 6144000,\n  /* 32752 */ 4358144, 4866048, 4882432, 4358144, 4358144, 4358144, 0, 901, 900, 900, 900, 900, 900, 4858756, 4875140,\n  /* 32767 */ 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 5260164, 900, 900, 900, 900, 900, 900,\n  /* 32787 */ 900, 900, 6103940, 900, 900, 900, 6185860, 900, 900, 900, 6284164, 900, 900, 6333316, 900, 900, 900,\n  /* 32804 */ 6390660, 900, 900, 6431620, 6439812, 0, 0, 0, 0, 5537792, 5545984, 5586944, 5734400, 5971968, 4358144,\n  /* 32819 */ 6045696, 4358144, 6070272, 4358144, 4358144, 4358144, 4358144, 6348800, 4358144, 6144000, 0, 6144000, 0,\n  /* 32832 */ 4988928, 5005312, 0, 0, 0, 0, 5775360, 0, 0, 0, 3869, 0, 0, 0, 0, 0, 787, 0, 0, 521, 521, 521, 521, 521,\n  /* 32856 */ 847, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886,\n  /* 32875 */ 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60869, 57909, 57909,\n  /* 32890 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59939,\n  /* 32905 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59946, 57909, 59948, 57909, 59951, 57909, 57909,\n  /* 32920 */ 4358144, 5005312, 4358144, 4358144, 4358144, 5120000, 5136384, 4358144, 4358144, 4358144, 4358144,\n  /* 32931 */ 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6324224, 5914624, 5914624, 0, 0, 0, 0, 0, 5513216,\n  /* 32946 */ 5783552, 0, 3869, 0, 0, 0, 0, 0, 0, 2822, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2830, 0, 0, 521, 521, 521, 521, 521,\n  /* 32973 */ 521, 521, 521, 521, 521, 521, 521, 521, 1938, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 32994 */ 521, 521, 521, 521, 521, 521, 1387, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 0,\n  /* 33015 */ 310, 311, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3638,\n  /* 33048 */ 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 310, 0, 451, 465, 465, 465, 478, 478, 478, 478, 478, 478,\n  /* 33074 */ 478, 478, 478, 499, 478, 478, 478, 478, 517, 478, 478, 478, 517, 478, 478, 478, 478, 478, 478, 522, 57888,\n  /* 33095 */ 522, 57888, 522, 522, 57888, 522, 522, 57911, 57888, 522, 522, 57888, 57888, 57888, 57911, 57888, 57888,\n  /* 33112 */ 57888, 57888, 57888, 57888, 57888, 57911, 57911, 57888, 57888, 57938, 57888, 57888, 57888, 57888, 57888,\n  /* 33127 */ 57888, 57888, 57938, 57938, 57888, 57888, 57888, 57888, 57938, 57938, 57888, 522, 57888, 57888, 57888, 1,\n  /* 33143 */ 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 638, 0, 0, 641,\n  /* 33168 */ 642, 0, 0, 0, 0, 0, 0, 745, 0, 0, 0, 0, 0, 0, 751, 0, 0, 0, 0, 0, 0, 0, 0, 761, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 33201 */ 1279, 0, 0, 0, 0, 1284, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1292, 0, 0, 0, 0, 0, 0, 0, 0, 743, 0, 0, 0, 0,\n  /* 33233 */ 638, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 758, 0, 0, 0, 0, 764, 0, 0, 768, 0, 0, 0, 0, 0, 0, 3115, 0, 0, 0, 0, 0,\n  /* 33265 */ 0, 0, 0, 0, 3121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1175, 0,\n  /* 33297 */ 1177, 1178, 0, 0, 0, 0, 0, 0, 0, 776, 0, 0, 0, 0, 780, 0, 0, 0, 0, 0, 0, 0, 784, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 33328 */ 0, 0, 0, 0, 641, 0, 0, 0, 0, 0, 3114, 0, 0, 0, 0, 0, 3118, 0, 0, 0, 0, 0, 0, 0, 3124, 3125, 3126, 0, 0, 0,\n  /* 33358 */ 0, 0, 0, 0, 0, 0, 0, 1306, 0, 0, 0, 1310, 0, 0, 0, 0, 1313, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521,\n  /* 33387 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 33406 */ 57886, 57886, 57886, 57886, 57886, 57886, 61024, 57886, 57886, 0, 824, 825, 0, 0, 0, 0, 780, 521, 521,\n  /* 33425 */ 834, 838, 521, 521, 850, 521, 521, 521, 866, 521, 871, 521, 879, 521, 882, 521, 521, 896, 521, 57886,\n  /* 33445 */ 57886, 57886, 57886, 57886, 57886, 59898, 57886, 57886, 57886, 0, 0, 0, 0, 57909, 57909, 57909, 57909,\n  /* 33462 */ 57909, 57909, 59913, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 33477 */ 59448, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59461, 57909, 57909,\n  /* 33492 */ 57909, 57909, 57909, 57909, 57909, 58253, 58257, 57886, 57886, 58269, 57886, 57886, 57886, 58285, 57886,\n  /* 33507 */ 58290, 57886, 58298, 57886, 58301, 57886, 57886, 58315, 57886, 0, 57909, 57909, 57909, 58329, 58333,\n  /* 33522 */ 57909, 57909, 58345, 57909, 57909, 57909, 58361, 57909, 58366, 57909, 58374, 57909, 58377, 57909, 57909,\n  /* 33537 */ 58391, 57909, 0, 0, 0, 0, 58290, 57936, 57936, 57936, 58404, 58408, 57936, 57936, 58420, 57936, 57936,\n  /* 33554 */ 57936, 58436, 57936, 58441, 57936, 58449, 57936, 0, 0, 0, 0, 521, 521, 521, 521, 521, 4172, 521, 57886,\n  /* 33573 */ 57886, 57886, 57886, 57886, 61522, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 61528, 57909, 57909,\n  /* 33588 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59544, 57936, 57936, 57936, 57936,\n  /* 33603 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59557, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 33618 */ 57936, 57936, 57936, 57936, 59545, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 33633 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59014, 57936, 57936, 57936, 57936,\n  /* 33648 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58452, 57936, 57936, 58466, 57936, 834,\n  /* 33663 */ 838, 1128, 882, 521, 521, 0, 58257, 58253, 58478, 58301, 57886, 57886, 155941, 1138, 0, 0, 1141, 0, 0,\n  /* 33682 */ 1146, 0, 0, 0, 0, 0, 0, 0, 0, 6103040, 0, 0, 0, 6184960, 0, 0, 0, 6283264, 0, 0, 6332416, 0, 0, 0,\n  /* 33706 */ 6389760, 0, 0, 6430720, 6438912, 977, 0, 0, 0, 0, 0, 1210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 33734 */ 0, 0, 0, 0, 1231, 0, 0, 0, 0, 0, 0, 0, 0, 377, 0, 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 139264,\n  /* 33765 */ 147456, 0, 0, 0, 0, 0, 57886, 58831, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 33783 */ 57886, 57886, 50657, 58754, 977, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 33798 */ 57909, 57909, 57909, 57909, 57909, 59964, 57909, 57909, 57909, 57909, 59969, 57909, 57909, 57909, 57909,\n  /* 33813 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 1753, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 33838 */ 0, 0, 0, 0, 0, 0, 1777, 0, 0, 0, 0, 0, 0, 0, 0, 1188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 1199, 0,\n  /* 33869 */ 0, 0, 0, 0, 0, 0, 0, 0, 688, 0, 0, 0, 0, 367, 367, 367, 0, 0, 697, 0, 0, 0, 0, 0, 0, 0, 704, 0, 0, 0, 0,\n  /* 33900 */ 0, 0, 0, 1813, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 33933 */ 2815, 0, 0, 1861, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1874, 521, 521, 521, 521,\n  /* 33956 */ 521, 521, 521, 521, 521, 1887, 521, 521, 521, 521, 521, 521, 0, 0, 0, 0, 57886, 57886, 57886, 57886,\n  /* 33976 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 33991 */ 57886, 57886, 57886, 57886, 61044, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 521, 521, 521,\n  /* 34007 */ 521, 521, 1929, 521, 521, 1932, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1945, 521, 521, 521,\n  /* 34027 */ 521, 521, 521, 1951, 521, 521, 521, 521, 521, 521, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 34047 */ 57886, 57886, 57886, 57886, 59828, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 34062 */ 57886, 59380, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 34077 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 61166, 57909, 57909, 57909, 61169,\n  /* 34092 */ 57909, 57909, 57909, 57909, 521, 58754, 1960, 57886, 57886, 57886, 57886, 57886, 59311, 57886, 57886,\n  /* 34107 */ 57886, 57886, 57886, 59317, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59330, 57886,\n  /* 34122 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60835, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 34137 */ 57886, 57886, 57886, 57886, 60845, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60854,\n  /* 34152 */ 57886, 50657, 2060, 57909, 57909, 57909, 57909, 57909, 59411, 57909, 57909, 57909, 57909, 57909, 59417,\n  /* 34167 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59430, 57909, 57909, 57909, 57909, 57909,\n  /* 34182 */ 57909, 57909, 57909, 57909, 57909, 57909, 58890, 57909, 57909, 57909, 58893, 57909, 57909, 57909, 57909,\n  /* 34197 */ 57909, 57909, 57909, 58900, 57909, 57909, 58904, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 34212 */ 59472, 57909, 57909, 59475, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59489,\n  /* 34227 */ 57909, 57909, 57909, 57909, 57909, 57909, 59495, 57909, 57909, 57909, 57909, 57909, 57909, 57886, 1,\n  /* 34242 */ 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 34269 */ 0, 0, 0, 3413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3151, 0, 0, 0, 3155, 0, 3157, 0, 0, 0,\n  /* 34300 */ 0, 0, 0, 0, 0, 57936, 57936, 57936, 57936, 57936, 59507, 57936, 57936, 57936, 57936, 57936, 59513, 57936,\n  /* 34318 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59526, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 34333 */ 57936, 57936, 57936, 57936, 57936, 57936, 59579, 57936, 57936, 57936, 57936, 57936, 57936, 59587, 57936,\n  /* 34348 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 57886, 57886,\n  /* 34364 */ 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 3105, 0, 0, 0, 0, 0, 0, 57936, 57936, 59568, 57936, 57936,\n  /* 34386 */ 59571, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59585, 57936, 57936, 57936,\n  /* 34401 */ 57936, 57936, 57936, 59591, 57936, 57936, 57936, 57936, 57936, 57936, 521, 2256, 521, 521, 521, 57886,\n  /* 34417 */ 59605, 57886, 57886, 57886, 2265, 0, 2266, 0, 0, 0, 0, 2268, 0, 2269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2275, 0,\n  /* 34442 */ 0, 0, 0, 0, 0, 791, 0, 521, 521, 521, 521, 521, 521, 521, 521, 859, 521, 521, 521, 521, 521, 521, 521,\n  /* 34465 */ 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 2265, 0, 2266, 0, 0, 0, 0, 2268, 0, 2269, 0,\n  /* 34486 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212992, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1737,\n  /* 34518 */ 1738, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 753, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 34551 */ 417792, 0, 0, 0, 0, 417792, 0, 0, 0, 0, 0, 309, 0, 309, 0, 0, 0, 0, 2331, 0, 2333, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 34580 */ 1806, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1826, 0, 1828, 0, 0, 0, 0, 0, 0, 0, 1835,\n  /* 34611 */ 0, 0, 521, 2464, 521, 521, 521, 521, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 34631 */ 57886, 57886, 57886, 57886, 59829, 57886, 57886, 59832, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 34646 */ 57886, 60265, 57886, 57886, 57886, 57886, 60268, 57886, 57886, 60270, 57886, 60271, 57886, 57886, 57886,\n  /* 34661 */ 57886, 57886, 57886, 57886, 57886, 57886, 60280, 57886, 57886, 60284, 59840, 57886, 57886, 57886, 57886,\n  /* 34676 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 34691 */ 57886, 57886, 57886, 57886, 59860, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61032,\n  /* 34706 */ 57886, 57886, 57886, 57886, 57886, 57886, 61038, 57886, 61040, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 34721 */ 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 34736 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 34751 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61089, 57936, 57936, 57936, 57909, 57909, 57909,\n  /* 34766 */ 57909, 59929, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 34781 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59949, 57909, 57909, 57909, 57909,\n  /* 34796 */ 57909, 57909, 57909, 57909, 58886, 57909, 58888, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 34811 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936,\n  /* 34826 */ 57936, 60375, 57936, 60376, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60012, 57936,\n  /* 34841 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 34856 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60032, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 34871 */ 57936, 57936, 57936, 60070, 57936, 57936, 57936, 2405, 521, 521, 521, 521, 59836, 57886, 57886, 57886,\n  /* 34887 */ 57886, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2399, 521, 521,\n  /* 34911 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 2446, 521, 521, 521, 521, 521, 521, 521, 2452, 521, 521, 521,\n  /* 34932 */ 521, 521, 521, 2457, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2847, 521, 521, 521, 521,\n  /* 34953 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 34974 */ 2889, 521, 521, 521, 521, 521, 521, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 34992 */ 60315, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60323, 57909, 57909,\n  /* 35007 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58924, 57909, 57909, 58928, 57909, 57909,\n  /* 35022 */ 57909, 57909, 57909, 58935, 57909, 57909, 57909, 58942, 57909, 0, 57886, 57936, 57936, 57936, 57936,\n  /* 35037 */ 60359, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 35052 */ 60370, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 35067 */ 60380, 57936, 0, 0, 0, 0, 521, 521, 521, 4170, 4171, 521, 521, 57886, 57886, 57886, 61520, 61521, 57886,\n  /* 35086 */ 57886, 57886, 57909, 57909, 57909, 61526, 61527, 57909, 57909, 57909, 57936, 57936, 57936, 61532, 57936,\n  /* 35101 */ 57936, 60435, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886,\n  /* 35117 */ 57886, 301, 305, 0, 0, 0, 0, 3104, 0, 0, 0, 3108, 0, 0, 0, 0, 0, 0, 3142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 35147 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262731, 0, 0, 0, 0, 0, 0, 0, 0, 3113, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 35180 */ 0, 0, 0, 0, 0, 0, 3123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3136, 57909, 60627, 57909, 57909, 57909,\n  /* 35205 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60636, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 35220 */ 57909, 57909, 57909, 57909, 57909, 60644, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 35235 */ 57909, 57909, 61057, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 35250 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61062, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 35265 */ 57909, 57909, 57909, 57909, 57909, 57936, 57936, 60676, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 35280 */ 57936, 57936, 57936, 60685, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 35295 */ 57936, 60693, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 0, 57886, 57886, 57886,\n  /* 35312 */ 57886, 57886, 57886, 155941, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1192, 1193, 0, 0, 0, 0, 0, 367, 367,\n  /* 35338 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60915, 57936, 57936, 57936,\n  /* 35359 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 35374 */ 57936, 60933, 57936, 60935, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60703, 57936,\n  /* 35389 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886,\n  /* 35405 */ 0, 0, 0, 0, 0, 0, 0, 2748, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 35438 */ 352256, 0, 352256, 352256, 0, 0, 0, 0, 521, 3948, 521, 3950, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 35459 */ 521, 521, 57886, 61307, 57886, 61309, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 35474 */ 57886, 57886, 57886, 58807, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 35489 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59347, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 35504 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61165,\n  /* 35519 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61170, 57909, 57909, 57909, 57909, 61323, 57909, 61325,\n  /* 35534 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 61339, 57936,\n  /* 35549 */ 61341, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 35564 */ 3859, 521, 61204, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 4012, 0, 0, 0, 4015, 0, 0,\n  /* 35592 */ 521, 521, 521, 521, 4020, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886,\n  /* 35611 */ 61377, 57886, 57886, 57886, 57886, 57886, 57909, 60861, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 35626 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 35641 */ 57909, 57909, 57909, 60352, 57909, 57909, 57909, 57909, 57909, 57909, 0, 0, 0, 312, 313, 314, 0, 0, 0, 0,\n  /* 35661 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2765, 0, 0, 0, 0, 0, 0, 426, 0,\n  /* 35693 */ 131072, 0, 0, 0, 426, 0, 0, 0, 0, 0, 426, 452, 0, 0, 0, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452,\n  /* 35718 */ 452, 452, 452, 516, 452, 516, 516, 516, 452, 516, 516, 516, 516, 516, 516, 523, 57889, 523, 57889, 523,\n  /* 35738 */ 523, 57889, 523, 523, 57912, 57889, 523, 523, 57889, 57889, 57889, 57912, 57889, 57889, 57889, 57889,\n  /* 35754 */ 57889, 57889, 57889, 57912, 57912, 57889, 57889, 57939, 57889, 57889, 57889, 57889, 57889, 57889, 57889,\n  /* 35769 */ 57939, 57939, 57889, 57889, 57889, 57889, 57939, 57939, 57889, 614, 57889, 57966, 57966, 1, 24578, 3,\n  /* 35785 */ 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 35813 */ 385024, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144,\n  /* 35825 */ 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 57909, 57909, 58370, 57909, 57909, 57909,\n  /* 35838 */ 57909, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 35855 */ 57936, 57936, 57936, 57936, 57936, 57936, 58445, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 35870 */ 57936, 61199, 57936, 57936, 57936, 57936, 521, 521, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3627,\n  /* 35892 */ 0, 0, 0, 0, 0, 805, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 641, 0, 0, 0, 0, 0, 820, 780, 0, 0, 0, 0, 0,\n  /* 35925 */ 0, 754, 0, 0, 754, 0, 0, 0, 0, 0, 754, 754, 0, 0, 815, 0, 0, 0, 0, 0, 0, 0, 0, 0, 754, 0, 0, 0, 0, 0, 0,\n  /* 35956 */ 2770, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2379, 0, 0, 0,\n  /* 35989 */ 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 60312, 57909, 57909, 57909, 57909, 60316, 57909, 57909,\n  /* 36005 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 36020 */ 57909, 60345, 57909, 57909, 57909, 57909, 60349, 57909, 57909, 57909, 60354, 57909, 57909, 57909, 57909,\n  /* 36035 */ 60381, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 36050 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 36065 */ 57936, 57936, 60432, 57936, 57936, 57936, 57936, 57936, 60436, 57936, 57936, 57936, 521, 521, 521, 521,\n  /* 36081 */ 521, 57886, 57886, 57886, 57886, 57886, 301, 305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3387, 0, 0, 0, 0, 0,\n  /* 36107 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2807, 0, 0, 0, 0, 0, 2812, 0, 0, 0, 0, 0, 57886, 61381,\n  /* 36136 */ 57886, 61383, 57886, 57886, 61385, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 36151 */ 61395, 57909, 61397, 57909, 57909, 61399, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 36166 */ 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886,\n  /* 36188 */ 57886, 57886, 57886, 57936, 61409, 57936, 61411, 57936, 57936, 61413, 57936, 57936, 0, 0, 0, 0, 0, 0, 0,\n  /* 36207 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 0, 0,\n  /* 36227 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2271, 0, 0, 0, 0, 0, 0, 0, 0, 0, 350, 351, 352, 0, 0, 0, 0, 0, 0, 0,\n  /* 36259 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 295, 0, 319, 319, 427, 428, 131072, 435, 428, 436, 427, 435, 436, 0,\n  /* 36284 */ 315, 436, 448, 453, 466, 466, 466, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 501, 501, 501, 514,\n  /* 36305 */ 514, 515, 515, 501, 515, 515, 515, 501, 515, 515, 515, 515, 515, 515, 524, 57890, 524, 57890, 524, 524,\n  /* 36325 */ 57890, 524, 524, 57913, 57890, 524, 524, 57890, 57890, 57890, 57913, 57890, 57890, 57890, 57890, 57890,\n  /* 36341 */ 57890, 57890, 57913, 57913, 57890, 57890, 57940, 57890, 57890, 57890, 57890, 57890, 57890, 57890, 57940,\n  /* 36356 */ 57940, 57890, 57890, 57890, 57890, 57940, 57940, 57890, 615, 57965, 57965, 57965, 1, 24578, 3, 155941,\n  /* 36372 */ 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 401408, 0,\n  /* 36401 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1198, 367, 367, 0, 0, 1201, 0, 0, 0, 1204, 0, 1206,\n  /* 36431 */ 0, 679, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 367, 695, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 36463 */ 0, 5242880, 0, 0, 0, 0, 0, 5603328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57909, 57909, 57909, 57909, 57909,\n  /* 36488 */ 58378, 57909, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 36505 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59553, 57936, 57936, 57936, 57936,\n  /* 36520 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58453, 57936, 57936, 57936, 57936,\n  /* 36535 */ 521, 521, 521, 883, 521, 521, 0, 57886, 57886, 57886, 58302, 57886, 57886, 155941, 1138, 0, 0, 0, 0, 0, 0,\n  /* 36556 */ 0, 0, 0, 0, 0, 0, 3411, 0, 0, 0, 3415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 57886, 521,\n  /* 36585 */ 57886, 521, 521, 57886, 521, 521, 57909, 57886, 521, 521, 57886, 57886, 57886, 57909, 521, 521, 521,\n  /* 36602 */ 58754, 901, 57886, 57886, 58758, 57886, 57886, 58762, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 36617 */ 57886, 58776, 57886, 58781, 57886, 57886, 58785, 57886, 57886, 58788, 57886, 57886, 57886, 57886, 57886,\n  /* 36632 */ 57886, 58279, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0,\n  /* 36647 */ 57909, 57909, 58322, 57909, 57909, 57909, 57909, 57909, 57909, 58355, 57909, 57909, 57909, 58876, 57909,\n  /* 36662 */ 57909, 58880, 57909, 57909, 58883, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 36677 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58902,\n  /* 36692 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 58951, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 36707 */ 57936, 57936, 58965, 57936, 58970, 57936, 57936, 58974, 57936, 57936, 58977, 57936, 57936, 57936, 57936,\n  /* 36722 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 57886, 57886, 3861, 0, 0,\n  /* 36739 */ 0, 3863, 0, 0, 0, 0, 0, 0, 3627, 3870, 0, 1723, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 36770 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 385, 521, 521, 521, 1927, 1928, 521, 521, 521, 521, 521, 521, 521,\n  /* 36795 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 36816 */ 2433, 521, 521, 521, 521, 58754, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 36833 */ 57886, 57886, 57886, 59320, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59332, 57886,\n  /* 36848 */ 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 61494, 57909, 61495, 57909, 57909, 57909, 57909,\n  /* 36863 */ 57909, 57909, 57909, 57909, 57936, 57936, 61502, 57936, 61503, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 36878 */ 57936, 57936, 57936, 57936, 57936, 60018, 57936, 60020, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 36893 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60396, 57936, 57936, 57936,\n  /* 36908 */ 57936, 57936, 57936, 57936, 60401, 57936, 57936, 57936, 57936, 57936, 57886, 57886, 59370, 59371, 57886,\n  /* 36923 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 36938 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 50657, 0,\n  /* 36956 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59420, 57909,\n  /* 36971 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59432, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 36986 */ 57909, 57909, 57909, 57909, 59446, 57909, 57909, 57909, 59450, 57909, 57909, 59455, 57909, 57909, 57909,\n  /* 37001 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59990, 57936, 57936, 57936,\n  /* 37016 */ 57936, 57936, 57936, 57936, 59998, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57909,\n  /* 37031 */ 59470, 59471, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 37046 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 37061 */ 57886, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 37087 */ 0, 0, 643, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 37111 */ 521, 3447, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1341, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 37132 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3200, 521, 521, 521, 521, 521, 521, 521,\n  /* 37153 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 61016, 57886, 57886, 57886, 61019, 57886, 57886,\n  /* 37171 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59566, 59567, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 37186 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 37201 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0,\n  /* 37221 */ 0, 0, 0, 0, 0, 0, 0, 2304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 37255 */ 0, 0, 0, 3162, 0, 0, 521, 2437, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2450,\n  /* 37277 */ 521, 521, 521, 521, 521, 2454, 2455, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1374, 521, 1376, 521,\n  /* 37297 */ 521, 521, 521, 521, 521, 521, 1389, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1404, 57886,\n  /* 37317 */ 57886, 57886, 57886, 59869, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 37332 */ 57886, 57886, 59882, 57886, 57886, 57886, 57886, 57886, 59886, 59887, 59888, 57886, 57886, 57886, 57886,\n  /* 37347 */ 57886, 57886, 57886, 58800, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 37362 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58822, 57886, 57886, 57886, 57886, 0, 0, 0, 2744,\n  /* 37379 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114688, 0, 0,\n  /* 37411 */ 57886, 57886, 57886, 60288, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 37426 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 2962, 0, 0,\n  /* 37443 */ 0, 0, 0, 826, 0, 0, 521, 521, 521, 521, 521, 849, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 37466 */ 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 60863, 57909, 57909, 57909,\n  /* 37482 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60875, 57909, 57909, 57909,\n  /* 37497 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59447, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 37512 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936,\n  /* 37527 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60672, 3137, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 37547 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1837, 0, 0, 0, 3166, 0, 0, 3169, 0,\n  /* 37579 */ 0, 0, 0, 0, 0, 0, 3173, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 37602 */ 521, 2451, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3379, 0, 0, 0, 0, 0, 0,\n  /* 37625 */ 0, 3383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3422, 0, 0, 0, 0, 0, 0,\n  /* 37658 */ 3429, 521, 3458, 3459, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 37678 */ 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60827, 57886, 1, 24578, 3,\n  /* 37694 */ 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 640, 0, 0, 0, 0, 0, 0,\n  /* 37722 */ 0, 695, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 883, 521, 521,\n  /* 37743 */ 521, 521, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 2267, 0, 1142, 0, 0, 0, 0, 2270, 0, 1147, 0, 0,\n  /* 37766 */ 0, 0, 0, 0, 0, 0, 0, 0, 1795, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1809, 57909,\n  /* 37797 */ 60884, 57909, 60886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 37812 */ 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 37827 */ 57936, 60000, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60911, 57936, 57936, 57936, 57936, 57936,\n  /* 37842 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60926, 57936, 60928,\n  /* 37857 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60045, 60046,\n  /* 37872 */ 57936, 57936, 57936, 57936, 57936, 57936, 60053, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 37887 */ 57936, 57936, 61072, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 37902 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 37917 */ 57936, 57936, 57936, 57936, 59595, 57936, 57936, 57936, 1881, 521, 4010, 0, 4011, 0, 0, 0, 0, 0, 0, 0,\n  /* 37937 */ 521, 4018, 521, 4019, 521, 521, 521, 4023, 521, 521, 521, 521, 521, 521, 521, 57886, 61375, 57886, 61376,\n  /* 37956 */ 57886, 57886, 57886, 57886, 57886, 57886, 60264, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60269,\n  /* 37971 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60275, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 37986 */ 60283, 57886, 61380, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 61389, 57909, 61390,\n  /* 38001 */ 57909, 57909, 57909, 61394, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 61403, 57936,\n  /* 38016 */ 61404, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60388, 57936, 57936, 57936,\n  /* 38031 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 38046 */ 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 3376, 0, 0, 61408, 57936, 57936, 57936,\n  /* 38064 */ 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 38086 */ 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 1710, 0, 0, 0, 0, 0, 0, 1717, 0, 0, 0, 0, 0, 0,\n  /* 38111 */ 0, 0, 0, 0, 0, 0, 0, 2338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2294, 0, 0, 0,\n  /* 38144 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 4213, 57886, 57886, 57886, 61559, 57909, 57909, 57909, 61561,\n  /* 38165 */ 57936, 57936, 57936, 61563, 0, 521, 521, 57886, 57886, 57909, 57909, 57936, 57936, 521, 57886, 57909,\n  /* 38181 */ 57936, 521, 521, 521, 521, 521, 521, 0, 2471, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 38199 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 38214 */ 59858, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 376, 0, 131072, 0, 0, 0, 376,\n  /* 38233 */ 0, 0, 438, 444, 0, 376, 454, 467, 467, 467, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 502, 502,\n  /* 38255 */ 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 525, 57891, 525, 57891, 525, 525, 57891,\n  /* 38275 */ 525, 525, 57914, 57891, 525, 525, 57891, 57891, 57891, 57914, 57891, 57891, 57891, 57891, 57891, 57891,\n  /* 38291 */ 57891, 57914, 57914, 57891, 57891, 57941, 57891, 57891, 57891, 57891, 57891, 57891, 57891, 57941, 57941,\n  /* 38306 */ 57891, 57891, 57891, 57891, 57941, 57941, 57891, 525, 57891, 57891, 57891, 1, 24578, 3, 155941, 155941,\n  /* 38322 */ 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229376, 0, 491520,\n  /* 38351 */ 524288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 725, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 38384 */ 1180, 1181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 38416 */ 719, 0, 0, 0, 0, 0, 0, 0, 0, 0, 729, 0, 0, 0, 0, 0, 0, 0, 0, 0, 738, 0, 0, 1166, 0, 1298, 0, 0, 0, 0, 0,\n  /* 38447 */ 0, 0, 0, 0, 1284, 0, 0, 0, 1312, 1180, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 1321, 521, 521, 521, 0, 0, 0, 0,\n  /* 38475 */ 0, 0, 57886, 60241, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 38491 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58814, 57886, 57886, 57886, 57886, 57886,\n  /* 38506 */ 57886, 57886, 57886, 57886, 57886, 521, 521, 521, 521, 521, 1371, 521, 521, 1373, 521, 521, 521, 521,\n  /* 38524 */ 1378, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1403, 521, 521, 521,\n  /* 38545 */ 521, 521, 521, 521, 521, 3196, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3203, 521, 521, 521,\n  /* 38566 */ 521, 521, 521, 521, 521, 521, 521, 521, 1902, 521, 521, 521, 521, 521, 521, 521, 521, 1913, 521, 521, 521,\n  /* 38587 */ 521, 521, 521, 521, 521, 521, 521, 521, 1935, 521, 521, 521, 1941, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 38608 */ 521, 1950, 521, 521, 521, 521, 1956, 521, 521, 521, 521, 58754, 901, 57886, 57886, 58759, 57886, 57886,\n  /* 38626 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58786,\n  /* 38641 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61247, 57886, 57886, 57909, 57909, 57909,\n  /* 38656 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61263, 57909,\n  /* 38671 */ 57909, 57936, 57909, 57909, 57909, 57909, 58881, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 38686 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58896, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 38701 */ 58905, 57909, 57909, 58907, 57909, 57909, 57909, 57909, 58912, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 38716 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58937, 57909, 57909, 57909, 57909,\n  /* 38731 */ 0, 58812, 57936, 57936, 58948, 57936, 0, 0, 0, 0, 521, 521, 4169, 521, 521, 521, 4173, 57886, 57886,\n  /* 38750 */ 61519, 57886, 57886, 57886, 61523, 57886, 57909, 57909, 61525, 57909, 57909, 57909, 61529, 57909, 57936,\n  /* 38765 */ 57936, 61531, 57936, 0, 0, 0, 0, 4168, 521, 521, 521, 521, 521, 521, 61518, 57886, 57886, 57886, 57886,\n  /* 38784 */ 57886, 57886, 57886, 61524, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61530, 57936, 57936, 57936,\n  /* 38799 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61274, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 38814 */ 521, 57886, 0, 3938, 0, 0, 3941, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 38838 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 1883, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2876, 521,\n  /* 38859 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 38880 */ 57886, 60819, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57936, 57936, 57936,\n  /* 38895 */ 57936, 57936, 57936, 57936, 58999, 57936, 57936, 59001, 57936, 57936, 57936, 57936, 59007, 57936, 57936,\n  /* 38910 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59519,\n  /* 38925 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59530, 57936, 57936, 57936, 57936, 57936,\n  /* 38940 */ 59032, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 38957 */ 1138, 1705, 0, 0, 0, 0, 1712, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 38982 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2410, 521, 521, 521, 2259, 57886, 57886,\n  /* 39001 */ 57886, 57886, 59608, 2265, 0, 2266, 0, 0, 0, 0, 2268, 0, 2269, 0, 0, 0, 0, 0, 2272, 0, 0, 0, 0, 0, 0, 0,\n  /* 39027 */ 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 39048 */ 2408, 521, 521, 521, 521, 521, 521, 521, 521, 2416, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 39069 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1397, 521, 521, 521, 521, 521,\n  /* 39090 */ 57886, 59893, 57886, 59895, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 57909, 57909, 57909,\n  /* 39107 */ 57909, 57909, 57909, 57909, 57909, 57909, 59916, 57909, 57909, 57909, 57909, 59920, 57909, 57909, 57909,\n  /* 39122 */ 57909, 57909, 57909, 57909, 57909, 59958, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 39137 */ 57909, 57909, 57909, 57909, 59971, 57909, 57909, 57909, 57909, 57909, 59975, 59976, 59977, 57909, 57909,\n  /* 39152 */ 57909, 57909, 57909, 57909, 59982, 57909, 59984, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936,\n  /* 39167 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59999, 57936, 57936, 57936, 57936, 60003, 57936, 57936,\n  /* 39182 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60683, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 39197 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 39212 */ 521, 3369, 521, 57886, 60716, 57886, 0, 0, 0, 0, 0, 57936, 57936, 57936, 57936, 57936, 60065, 57936,\n  /* 39230 */ 60067, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886,\n  /* 39246 */ 57886, 2739, 2266, 0, 2740, 2269, 0, 0, 0, 0, 0, 0, 3622, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 39275 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 415, 415, 0, 0, 0, 0, 0, 60285, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 39298 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 39313 */ 57886, 57886, 57886, 57886, 57886, 57886, 0, 2962, 0, 0, 0, 0, 0, 1156, 1157, 1158, 1159, 0, 0, 0, 0, 0,\n  /* 39335 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 791, 0, 0, 0, 0, 0, 0, 0, 791, 0, 0, 57909, 57909,\n  /* 39366 */ 57909, 60310, 57909, 60311, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 39381 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59460, 57909,\n  /* 39396 */ 57909, 57909, 57909, 57909, 59467, 57909, 521, 521, 3191, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 39414 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3204, 521, 521, 521, 521, 521, 521, 521, 3210,\n  /* 39434 */ 57886, 57886, 57886, 60582, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 39449 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60596, 57886, 57886, 57886, 57886,\n  /* 39464 */ 57886, 57886, 57886, 57886, 60606, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 57909,\n  /* 39480 */ 57909, 57909, 57909, 60617, 57909, 57909, 57909, 57909, 57909, 57909, 60624, 57909, 57886, 60602, 57886,\n  /* 39495 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 2962, 0,\n  /* 39511 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61182,\n  /* 39526 */ 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 39541 */ 57936, 57936, 58975, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 39556 */ 57936, 57936, 57936, 58990, 57909, 57909, 57909, 57909, 60651, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 39571 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 39586 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 39601 */ 57936, 57936, 57936, 57936, 60680, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 39616 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60694, 57936, 57936, 57936,\n  /* 39631 */ 57936, 57936, 57936, 57936, 57936, 57936, 61273, 57936, 61275, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 39646 */ 521, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 39672 */ 521, 521, 521, 1878, 1879, 521, 521, 521, 521, 1886, 521, 521, 521, 521, 521, 521, 521, 521, 1337, 521,\n  /* 39692 */ 1342, 521, 521, 1346, 521, 521, 1349, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 39712 */ 521, 521, 1380, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1396, 521, 521, 521, 521, 521, 57936,\n  /* 39732 */ 57936, 57936, 57936, 57936, 60700, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 39747 */ 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 3768, 0, 0, 0, 0,\n  /* 39769 */ 57909, 61073, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 39784 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 39799 */ 57936, 57936, 60030, 57936, 57936, 57936, 57936, 57936, 0, 521, 521, 521, 521, 521, 521, 3953, 521, 521,\n  /* 39817 */ 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 61312, 57886, 57886, 57886, 57886,\n  /* 39834 */ 57886, 57886, 57886, 57886, 57886, 57886, 2557, 0, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 39851 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 39866 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59466, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 39881 */ 57909, 57909, 61328, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936,\n  /* 39896 */ 57936, 57936, 57936, 61344, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 0,\n  /* 39914 */ 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886,\n  /* 39934 */ 61382, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 39949 */ 57909, 61396, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 39964 */ 57936, 57936, 61080, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 39979 */ 57936, 57936, 61090, 57936, 57936, 57936, 57936, 61410, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0,\n  /* 39996 */ 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886,\n  /* 40017 */ 57886, 2265, 1706, 2266, 0, 0, 0, 0, 2268, 1713, 2269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1243, 0,\n  /* 40044 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2353, 0, 0, 330, 0, 0, 0, 0, 0, 0, 375, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 40077 */ 0, 0, 0, 0, 0, 0, 330, 0, 139264, 147456, 0, 0, 0, 0, 0, 0, 0, 1842, 0, 0, 1845, 0, 0, 0, 0, 0, 0, 1851,\n  /* 40105 */ 1852, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1845, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 329, 0, 0, 0, 0, 455,\n  /* 40135 */ 468, 468, 468, 481, 481, 481, 481, 492, 494, 481, 481, 492, 481, 503, 503, 503, 503, 518, 503, 503, 503,\n  /* 40156 */ 518, 503, 503, 503, 503, 503, 503, 526, 57892, 526, 57892, 526, 526, 57892, 526, 526, 57915, 57892, 526,\n  /* 40175 */ 526, 57892, 57892, 57892, 57915, 57892, 57892, 57892, 57892, 57892, 57892, 57892, 57915, 57915, 57892,\n  /* 40190 */ 57892, 57942, 57892, 57892, 57892, 57892, 57892, 57892, 57892, 57942, 57942, 57892, 57892, 57892, 57892,\n  /* 40205 */ 57942, 57942, 57892, 526, 57892, 57892, 57892, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302,\n  /* 40225 */ 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2310144, 0, 0, 0, 0, 0, 0, 0, 2310144, 2310144,\n  /* 40253 */ 0, 0, 0, 0, 0, 0, 0, 0, 2310144, 0, 0, 0, 0, 0, 651, 652, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 663, 664, 0, 0, 0,\n  /* 40284 */ 0, 0, 0, 0, 0, 0, 0, 0, 676, 677, 678, 0, 0, 0, 682, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 367, 0, 0, 0,\n  /* 40315 */ 0, 0, 0, 700, 701, 0, 0, 0, 0, 0, 707, 0, 0, 0, 0, 0, 3141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 40347 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450560, 450560, 0, 0, 0, 0, 0, 711, 0, 713, 0, 0, 0, 0, 0, 0, 720, 0,\n  /* 40377 */ 0, 0, 724, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2756, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 40411 */ 0, 0, 0, 0, 742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 752, 0, 0, 0, 0, 0, 0, 759, 0, 0, 0, 765, 766, 0, 0, 0, 0,\n  /* 40443 */ 0, 0, 0, 2308, 0, 0, 0, 0, 2313, 2314, 0, 0, 2316, 2317, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 270336,\n  /* 40472 */ 0, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144,\n  /* 40486 */ 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 0, 0,\n  /* 40506 */ 305, 0, 0, 4857856, 4874240, 0, 0, 4923392, 0, 0, 0, 775, 0, 777, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 40533 */ 0, 789, 0, 794, 0, 797, 0, 0, 0, 0, 0, 0, 777, 0, 789, 0, 803, 0, 0, 0, 0, 797, 809, 0, 0, 0, 0, 0, 809,\n  /* 40562 */ 809, 812, 0, 0, 0, 777, 0, 0, 0, 0, 0, 821, 0, 0, 0, 0, 0, 0, 806, 0, 0, 806, 0, 0, 0, 0, 0, 806, 806, 0,\n  /* 40592 */ 0, 0, 0, 786, 0, 0, 0, 0, 0, 0, 822, 782, 0, 0, 0, 0, 0, 775, 0, 0, 0, 821, 521, 521, 835, 521, 841, 521,\n  /* 40620 */ 521, 856, 521, 521, 867, 521, 872, 521, 521, 881, 884, 889, 521, 897, 521, 57886, 57886, 57886, 57886,\n  /* 40639 */ 57886, 57886, 60291, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 40654 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 2962, 0, 0, 58254, 57886, 58260, 57886,\n  /* 40671 */ 57886, 58275, 57886, 57886, 58286, 57886, 58291, 57886, 57886, 58300, 58303, 58308, 57886, 58316, 57886,\n  /* 40686 */ 0, 57909, 57909, 57909, 58330, 57909, 58336, 57909, 57909, 58351, 57909, 57909, 58362, 57909, 58367,\n  /* 40701 */ 57909, 57909, 58376, 58379, 58384, 57909, 58392, 57909, 0, 0, 0, 0, 58291, 57936, 57936, 57936, 58405,\n  /* 40718 */ 57936, 58411, 57936, 57936, 58426, 57936, 57936, 58437, 57936, 58442, 57936, 57936, 58451, 58454, 58459,\n  /* 40733 */ 57936, 58467, 57936, 835, 521, 521, 1129, 889, 521, 0, 57886, 58254, 57886, 58479, 58308, 57886, 155941,\n  /* 40750 */ 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2326528, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144,\n  /* 40771 */ 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144,\n  /* 40782 */ 4358144, 0, 0, 1153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1163, 0, 0, 0, 0, 0, 0, 0, 1170, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 40812 */ 0, 0, 0, 1051, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144,\n  /* 40828 */ 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144,\n  /* 40839 */ 4358144, 6299648, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144,\n  /* 40850 */ 4358144, 4358144, 4358144, 4358144, 0, 1209, 0, 0, 0, 0, 0, 0, 0, 0, 1218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 40875 */ 0, 0, 0, 0, 0, 0, 1235, 0, 0, 1187, 0, 0, 0, 0, 0, 3434, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 40901 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3451, 521, 521, 521, 521, 521, 521, 0, 0, 0, 0, 57886,\n  /* 40923 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59827, 57886, 57886, 57886, 57886, 59831, 57886,\n  /* 40938 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58801, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 40953 */ 58810, 57886, 57886, 58812, 57886, 57886, 57886, 57886, 58817, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 40968 */ 57886, 57886, 57886, 61388, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 40983 */ 57909, 57909, 57909, 57909, 61402, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 742, 0, 0, 0, 0,\n  /* 41003 */ 0, 0, 0, 0, 0, 0, 0, 0, 1258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5857280, 0, 6463488, 4939776, 0,\n  /* 41031 */ 0, 5455872, 0, 0, 0, 0, 0, 0, 0, 0, 6062080, 6463488, 0, 5398528, 0, 521, 521, 521, 521, 1328, 521, 521,\n  /* 41053 */ 521, 521, 521, 521, 1343, 521, 521, 521, 1348, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 41074 */ 521, 521, 521, 1365, 521, 1407, 521, 58754, 901, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 41091 */ 57886, 57886, 58767, 57886, 57886, 57886, 57886, 57886, 57886, 58782, 57886, 57886, 57886, 58787, 57886,\n  /* 41106 */ 57886, 57886, 57886, 57886, 57886, 57886, 58839, 57886, 57886, 57886, 57886, 57886, 57886, 50657, 58754,\n  /* 41121 */ 977, 57909, 57909, 57909, 58855, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58869,\n  /* 41136 */ 57909, 57909, 57909, 58877, 57909, 57909, 57909, 58882, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 41151 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58899, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 41166 */ 57909, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 58419, 57936,\n  /* 41183 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59003, 57936, 59005, 57936, 57936,\n  /* 41198 */ 57936, 57936, 57936, 57936, 57936, 59018, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 41213 */ 57936, 57936, 57936, 60704, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886,\n  /* 41229 */ 57886, 57886, 0, 0, 0, 0, 0, 57936, 57936, 57936, 57936, 57936, 57936, 58956, 57936, 57936, 57936, 57936,\n  /* 41247 */ 57936, 57936, 58971, 57936, 57936, 57936, 58976, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 41262 */ 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 0,\n  /* 41279 */ 0, 0, 0, 0, 0, 2741, 0, 57936, 58993, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 41297 */ 57936, 57936, 57936, 57936, 57936, 57936, 59009, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 41312 */ 57936, 57936, 59025, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61101, 57936,\n  /* 41327 */ 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 690, 691, 0,\n  /* 41350 */ 367, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 703, 0, 0, 0, 0, 0, 57936, 57936, 57936, 59036, 57936, 521, 521,\n  /* 41375 */ 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 1138, 1705, 0, 0, 0, 0, 1712, 0, 0, 0, 0,\n  /* 41396 */ 1719, 0, 1721, 0, 0, 0, 0, 0, 3621, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3632, 0, 0, 0,\n  /* 41426 */ 3635, 3636, 0, 0, 0, 0, 0, 0, 393678, 0, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 393678,\n  /* 41444 */ 393678, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 0,\n  /* 41458 */ 393678, 393678, 0, 1754, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1770, 0, 0, 0, 0, 0, 1776, 0, 0,\n  /* 41486 */ 1779, 0, 1781, 0, 0, 0, 0, 0, 0, 3642, 0, 3644, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 41509 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2854, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 41530 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 1943, 1944, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 41551 */ 521, 521, 521, 0, 0, 1787, 1788, 0, 0, 0, 0, 0, 0, 0, 0, 1797, 1798, 0, 0, 0, 0, 0, 0, 1804, 0, 0, 1806,\n  /* 41578 */ 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 41602 */ 888, 521, 521, 521, 521, 57886, 57886, 57886, 1810, 1811, 1812, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 41627 */ 0, 0, 0, 0, 0, 0, 1830, 1831, 0, 1832, 1833, 0, 0, 0, 0, 0, 0, 1186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 41657 */ 0, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 810, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 41690 */ 0, 0, 0, 3395, 0, 0, 3397, 0, 0, 0, 0, 0, 0, 0, 0, 1863, 1721, 1721, 1865, 521, 1867, 521, 1868, 1869,\n  /* 41714 */ 521, 1871, 521, 521, 521, 1875, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1888, 521, 521, 521, 521,\n  /* 41734 */ 1892, 521, 521, 521, 521, 1896, 521, 1898, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1908, 1909,\n  /* 41754 */ 1911, 521, 521, 521, 521, 521, 521, 521, 1919, 1920, 521, 1922, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 41774 */ 3667, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 41791 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60611, 57886, 57886, 0, 0, 57909, 57909, 57909, 57909,\n  /* 41807 */ 57909, 57909, 57909, 57909, 57909, 57909, 60622, 57909, 60625, 521, 1925, 1926, 521, 521, 521, 521, 521,\n  /* 41824 */ 521, 521, 1934, 521, 1936, 521, 1939, 521, 521, 521, 521, 521, 1946, 521, 521, 1948, 521, 521, 521, 521,\n  /* 41844 */ 521, 521, 521, 521, 521, 3197, 3198, 521, 521, 521, 521, 3201, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 41864 */ 521, 521, 3206, 521, 521, 521, 3209, 521, 521, 58754, 0, 59307, 57886, 59309, 57886, 59310, 57886, 59312,\n  /* 41882 */ 57886, 59314, 57886, 57886, 57886, 59318, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 41897 */ 59331, 57886, 57886, 57886, 57886, 59335, 57886, 1, 24578, 3, 155941, 156275, 295, 0, 0, 0, 0, 0, 301,\n  /* 41916 */ 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 483328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 41948 */ 0, 0, 0, 0, 0, 0, 2341, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57886, 57886, 57886, 59339, 57886, 59341,\n  /* 41974 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59351, 59352, 59354, 57886, 57886,\n  /* 41989 */ 57886, 57886, 57886, 57886, 57886, 59362, 59363, 57886, 59365, 57886, 57886, 57886, 57886, 57886, 58799,\n  /* 42004 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 42019 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58829, 59368, 59369, 57886, 57886,\n  /* 42034 */ 57886, 57886, 57886, 57886, 57886, 59377, 57886, 59379, 57886, 59382, 57886, 57886, 57886, 57886, 57886,\n  /* 42049 */ 59390, 57886, 57886, 59392, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 2558, 0,\n  /* 42065 */ 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 42081 */ 57909, 57909, 57909, 57909, 60371, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 60377,\n  /* 42096 */ 57936, 57936, 57936, 57936, 50657, 0, 59407, 57909, 59409, 57909, 59410, 57909, 59412, 57909, 59414,\n  /* 42111 */ 57909, 57909, 57909, 59418, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59431, 57909,\n  /* 42126 */ 57909, 57909, 57909, 59435, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58916, 57909, 57909, 57909,\n  /* 42141 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 42156 */ 0, 57886, 57936, 57936, 57936, 57936, 57936, 521, 1335, 521, 521, 521, 521, 58774, 57886, 57886, 57886,\n  /* 42173 */ 57886, 57886, 1138, 0, 0, 1709, 0, 0, 0, 0, 1716, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521,\n  /* 42198 */ 521, 521, 521, 3882, 521, 3884, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 42216 */ 57886, 59847, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 42231 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60277, 57886, 57886, 57886,\n  /* 42246 */ 57886, 57886, 57886, 57886, 57909, 57909, 59439, 57909, 59441, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 42261 */ 57909, 57909, 57909, 57909, 59451, 59452, 59454, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59462,\n  /* 42276 */ 59463, 57909, 59465, 57909, 57909, 59468, 59469, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59477,\n  /* 42291 */ 57909, 59479, 57909, 59482, 57909, 57909, 57909, 57909, 57909, 59490, 57909, 57909, 59492, 57909, 57909,\n  /* 42306 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57886, 57886, 57886, 57886, 57886, 60290, 57886, 57886,\n  /* 42321 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60299, 57886, 57886, 57886, 60302, 57886,\n  /* 42336 */ 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 1214, 0, 0, 0, 0, 0, 0, 0, 0, 1223, 0, 0, 0, 0, 0, 0,\n  /* 42363 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1238, 59503, 57936, 59505, 57936, 59506, 57936, 59508, 57936, 59510, 57936,\n  /* 42383 */ 57936, 57936, 59514, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59527, 57936, 57936,\n  /* 42398 */ 57936, 57936, 59531, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886,\n  /* 42415 */ 57886, 57886, 57886, 1138, 0, 1707, 0, 0, 0, 0, 1714, 0, 0, 0, 0, 0, 0, 0, 0, 3170, 0, 0, 0, 0, 0, 0, 521,\n  /* 42442 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 3182, 521, 3185, 521, 521, 521, 521, 59535, 57936, 59537,\n  /* 42461 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59547, 59548, 59550, 57936, 57936,\n  /* 42476 */ 57936, 57936, 57936, 57936, 57936, 59558, 59559, 57936, 57936, 59561, 57936, 57936, 59564, 59565, 57936,\n  /* 42491 */ 57936, 57936, 57936, 57936, 57936, 57936, 59573, 57936, 59575, 57936, 59578, 57936, 57936, 57936, 57936,\n  /* 42506 */ 57936, 59586, 57936, 57936, 59588, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521,\n  /* 42521 */ 1926, 521, 2258, 521, 57886, 59369, 57886, 59607, 57886, 2265, 0, 2266, 0, 0, 0, 0, 2268, 0, 2269, 0, 0,\n  /* 42542 */ 0, 0, 0, 0, 0, 0, 0, 0, 2276, 0, 0, 2279, 2280, 0, 0, 0, 2284, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 42573 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2790, 0, 0, 0, 0, 2303, 0, 0, 0, 0, 2307, 0, 0, 0, 0, 0, 0, 0,\n  /* 42605 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2323, 0, 0, 0, 0, 2327, 0, 0, 0, 0, 0, 3873, 0, 521, 521, 521, 521, 521,\n  /* 42634 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 42653 */ 57886, 57886, 58803, 57886, 57886, 57886, 57886, 58808, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 42668 */ 57886, 57886, 58816, 57886, 57886, 57886, 58823, 58825, 57886, 57886, 57886, 0, 2356, 0, 0, 0, 0, 0, 0, 0,\n  /* 42688 */ 0, 2365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2375, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521,\n  /* 42717 */ 521, 521, 521, 521, 521, 521, 521, 875, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 2412, 521,\n  /* 42737 */ 2414, 521, 521, 521, 521, 521, 521, 521, 2420, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 42758 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 1357, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 42779 */ 521, 521, 521, 521, 521, 2441, 2442, 521, 521, 521, 521, 521, 521, 2449, 521, 521, 521, 521, 521, 521,\n  /* 42799 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1383, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 42820 */ 521, 521, 1400, 521, 521, 521, 2463, 521, 521, 2466, 2467, 521, 0, 0, 0, 0, 57886, 57886, 57886, 57886,\n  /* 42840 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59833, 57886, 59835,\n  /* 42855 */ 57886, 57886, 57886, 57886, 57886, 57886, 60585, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 42870 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60599,\n  /* 42885 */ 57886, 57886, 57886, 57886, 57886, 59843, 57886, 59845, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 42900 */ 59851, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 42915 */ 57886, 57886, 57886, 57886, 60300, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0,\n  /* 42932 */ 0, 57886, 57886, 57886, 57886, 59896, 57886, 57886, 59899, 59900, 57886, 0, 0, 0, 0, 57909, 57909, 57909,\n  /* 42950 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59922, 57909,\n  /* 42965 */ 57909, 57909, 57909, 57909, 57909, 58388, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 57936,\n  /* 42982 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521,\n  /* 42997 */ 521, 57886, 57886, 0, 0, 0, 3862, 0, 0, 3865, 0, 0, 0, 0, 3627, 0, 0, 59924, 57909, 57909, 57909, 57909,\n  /* 43019 */ 57909, 57909, 59932, 57909, 59934, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59940, 57909, 57909,\n  /* 43034 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 59991, 57936,\n  /* 43049 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 43064 */ 60707, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 60007, 57936, 57936,\n  /* 43083 */ 57936, 57936, 57936, 57936, 60015, 57936, 60017, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60023,\n  /* 43098 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521,\n  /* 43113 */ 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 2739, 2266, 0, 2740, 2269, 0, 0, 0, 521, 2868, 521,\n  /* 43133 */ 521, 521, 521, 2872, 521, 521, 521, 2877, 521, 521, 521, 521, 521, 521, 521, 521, 2885, 521, 521, 521,\n  /* 43153 */ 521, 521, 521, 521, 2890, 521, 521, 521, 521, 521, 521, 0, 0, 0, 0, 57886, 57886, 59820, 57886, 57886,\n  /* 43173 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 43188 */ 57886, 57886, 58811, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 43203 */ 57886, 57886, 57886, 60259, 57886, 60261, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 43218 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60278, 57886, 57886,\n  /* 43233 */ 57886, 57886, 60282, 57886, 57886, 57886, 57886, 57886, 60605, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 43248 */ 57886, 57886, 57886, 57886, 57886, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 43264 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60319, 57909, 57909, 57909, 57909, 57909, 60324, 57909,\n  /* 43279 */ 57909, 57909, 57909, 57909, 57909, 57909, 57886, 57886, 60287, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 43294 */ 57886, 57886, 60295, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60301, 57886, 57886, 57886,\n  /* 43309 */ 57886, 57886, 57886, 57886, 0, 2962, 0, 0, 0, 0, 0, 1185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367,\n  /* 43336 */ 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1732, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 43370 */ 0, 1856, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60314,\n  /* 43391 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 43406 */ 60326, 57909, 60328, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60365, 57909, 57909, 57909,\n  /* 43421 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 43436 */ 57936, 57936, 57936, 57936, 57936, 57936, 61082, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 43451 */ 57936, 57936, 57936, 57936, 57936, 57936, 57909, 57909, 57909, 57909, 60362, 57909, 57909, 57909, 57909,\n  /* 43466 */ 57909, 57909, 57909, 57909, 60368, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936,\n  /* 43481 */ 57936, 57936, 57936, 57936, 57936, 60379, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58959,\n  /* 43496 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58978, 57936, 57936, 57936, 57936, 57936,\n  /* 43511 */ 57936, 57936, 57936, 57936, 58988, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58960,\n  /* 43526 */ 58967, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58980, 57936, 58982, 57936, 57936, 57936,\n  /* 43541 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60417, 57936, 57936, 57936, 57936, 57936,\n  /* 43556 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60424,\n  /* 43571 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 43586 */ 57936, 57936, 60410, 57936, 57936, 57936, 57936, 60414, 57936, 57936, 57936, 60419, 57936, 57936, 57936,\n  /* 43601 */ 57936, 57936, 57936, 57936, 57936, 60427, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521,\n  /* 43616 */ 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 0, 3103, 0, 0, 3106, 3107, 0, 0, 3110,\n  /* 43638 */ 3111, 60433, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 57886, 57886,\n  /* 43654 */ 57886, 57886, 57886, 301, 305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6275072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 43682 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 728, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3140, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 43716 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278528, 0, 0, 0, 0, 0, 0, 3167, 3168, 0, 0,\n  /* 43748 */ 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3189,\n  /* 43772 */ 60580, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 43787 */ 57886, 57886, 60593, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 43802 */ 57886, 60600, 57909, 57909, 57909, 60629, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 43817 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60642, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 43832 */ 57909, 57909, 57909, 57909, 57909, 58925, 57909, 57909, 57909, 57909, 57909, 58933, 57909, 57909, 57909,\n  /* 43847 */ 57909, 57909, 57909, 57909, 0, 57886, 57936, 57936, 57936, 57936, 57909, 57909, 60649, 57909, 57909,\n  /* 43862 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 43877 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 43892 */ 57936, 57936, 57936, 57936, 57936, 60678, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 43907 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60691, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 43922 */ 57936, 57936, 57936, 57936, 57936, 60044, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 43937 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 57886, 3937, 0, 3939, 0, 0, 0,\n  /* 43955 */ 0, 0, 3627, 3943, 0, 3945, 57936, 57936, 57936, 60698, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 43972 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886,\n  /* 43988 */ 0, 0, 0, 0, 0, 0, 0, 2368, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2398, 521, 521, 2401,\n  /* 44011 */ 521, 521, 521, 521, 521, 521, 2409, 521, 521, 3403, 0, 0, 0, 0, 3405, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 44038 */ 0, 0, 0, 3419, 0, 0, 0, 0, 3424, 3425, 0, 3427, 0, 0, 0, 0, 0, 1197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1286, 0,\n  /* 44067 */ 0, 0, 0, 1314, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 44091 */ 521, 521, 521, 521, 521, 521, 521, 521, 3452, 521, 521, 521, 521, 3430, 0, 0, 0, 3433, 521, 521, 521, 521,\n  /* 44113 */ 521, 521, 3440, 521, 521, 521, 521, 521, 3444, 521, 521, 521, 521, 521, 521, 521, 3450, 521, 521, 521,\n  /* 44133 */ 521, 521, 3456, 60828, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60834, 57886, 57886, 57886, 57886,\n  /* 44149 */ 57886, 60840, 57886, 57886, 60843, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60850, 60852,\n  /* 44164 */ 57886, 57886, 57886, 57886, 57886, 57886, 58282, 58284, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 44179 */ 57886, 57886, 57886, 57886, 0, 57909, 57909, 58327, 57909, 57909, 57909, 57909, 57909, 57909, 58358,\n  /* 44194 */ 58360, 57909, 60856, 57886, 60858, 60859, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 60866, 57909,\n  /* 44209 */ 57909, 57909, 57909, 57909, 60870, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60876, 57909, 57909,\n  /* 44224 */ 57909, 57909, 57909, 60882, 57909, 57909, 60885, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 44239 */ 60892, 60894, 57909, 57909, 57909, 57909, 60898, 57909, 60900, 60901, 57909, 57936, 57936, 57936, 57936,\n  /* 44254 */ 57936, 57936, 60908, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61200, 57936,\n  /* 44269 */ 57936, 57936, 521, 521, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 3866, 3867, 0, 3627, 0, 3871, 57936, 57936,\n  /* 44291 */ 60912, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60918, 57936, 57936, 57936, 57936, 57936, 60924,\n  /* 44306 */ 57936, 57936, 60927, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60934, 60936, 57936, 57936,\n  /* 44321 */ 57936, 57936, 57936, 57936, 57936, 57936, 59000, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 44336 */ 57936, 57936, 57936, 57936, 57936, 57936, 59020, 57936, 57936, 57936, 57936, 57936, 59028, 57936, 57936,\n  /* 44351 */ 57936, 57936, 57936, 57936, 57936, 57936, 59542, 57936, 57936, 57936, 59546, 57936, 57936, 59551, 57936,\n  /* 44366 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 44381 */ 60048, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 44396 */ 57936, 57936, 57936, 60940, 57936, 60942, 60943, 57936, 521, 521, 3602, 57886, 57886, 60949, 0, 0, 0, 0,\n  /* 44414 */ 0, 0, 3611, 0, 0, 3614, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 3649, 3650, 521,\n  /* 44439 */ 521, 521, 521, 3654, 3655, 521, 521, 521, 521, 521, 3659, 521, 521, 521, 521, 3662, 521, 521, 521, 521,\n  /* 44459 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 61018, 57886, 57886, 57886, 57886,\n  /* 44477 */ 57886, 57886, 57886, 61023, 57886, 57886, 57886, 57886, 57886, 57886, 60833, 57886, 57886, 57886, 57886,\n  /* 44492 */ 57886, 57886, 57886, 57886, 60841, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 44507 */ 57886, 57886, 57886, 57886, 57886, 60855, 57909, 57909, 57909, 57909, 57909, 57909, 61052, 57909, 57909,\n  /* 44522 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61063, 57909, 57909,\n  /* 44537 */ 57909, 57909, 57909, 57909, 57909, 57909, 61071, 57909, 57909, 57909, 57909, 57909, 57909, 58914, 57909,\n  /* 44552 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58930, 57909, 57909, 57909, 57909, 57909,\n  /* 44567 */ 57909, 58941, 57909, 0, 57886, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 57886,\n  /* 44584 */ 57886, 57886, 57886, 57886, 57886, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 367, 0, 0, 0,\n  /* 44610 */ 303104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57886, 57886, 61240, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 44631 */ 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61256, 57909, 57909,\n  /* 44646 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 61076, 57936, 57936, 57936, 57936,\n  /* 44661 */ 57936, 57936, 57936, 61081, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 44676 */ 57936, 57936, 57936, 61092, 57886, 57886, 57886, 61440, 57886, 61442, 57886, 57886, 57886, 57886, 61447,\n  /* 44691 */ 61448, 61449, 61450, 57909, 57909, 57909, 61453, 57909, 61455, 57909, 57909, 57909, 57909, 61460, 61461,\n  /* 44706 */ 61462, 61463, 57936, 57936, 57936, 61466, 57936, 61468, 57936, 57936, 57936, 57936, 61473, 0, 0, 0, 0, 0,\n  /* 44724 */ 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886,\n  /* 44743 */ 57886, 57886, 57886, 61031, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 44758 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 61392, 57909, 57909,\n  /* 44773 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 61406, 57936,\n  /* 44788 */ 57936, 57936, 61535, 57936, 0, 0, 0, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886,\n  /* 44806 */ 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 521,\n  /* 44823 */ 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909,\n  /* 44839 */ 57909, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 521, 521, 521, 521, 4198, 521, 57886, 57886,\n  /* 44857 */ 57886, 57886, 61546, 57886, 57909, 57909, 57909, 57909, 61550, 57909, 57936, 57936, 57936, 57936, 61554,\n  /* 44872 */ 57936, 0, 371, 371, 0, 429, 131072, 371, 429, 429, 332, 371, 429, 0, 0, 429, 449, 429, 0, 0, 0, 429, 488,\n  /* 44895 */ 488, 488, 493, 488, 488, 488, 493, 488, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429,\n  /* 44916 */ 429, 429, 527, 57893, 527, 57893, 527, 527, 57893, 527, 527, 57916, 57893, 527, 527, 57893, 57893, 57893,\n  /* 44934 */ 57916, 57893, 57893, 57893, 57893, 57893, 57893, 57893, 57916, 57916, 57893, 57893, 57943, 57893, 57893,\n  /* 44949 */ 57893, 57893, 57893, 57893, 57893, 57943, 57943, 57893, 57893, 57893, 57893, 57943, 57943, 57893, 527,\n  /* 44964 */ 57893, 57893, 57893, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0,\n  /* 44987 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6275072, 0, 0, 0, 0, 0, 0, 0, 0, 4399798, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 45018 */ 0, 0, 773, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 773, 0, 0, 0, 0,\n  /* 45052 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 773, 0, 0, 0, 521, 828, 521, 521, 521, 521, 521, 521, 860, 521,\n  /* 45079 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 58246, 1295, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 45102 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 2839, 521,\n  /* 45130 */ 521, 521, 521, 521, 521, 1326, 521, 521, 521, 521, 521, 1338, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 45151 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2430, 521, 521, 521, 521, 521, 521,\n  /* 45172 */ 521, 521, 521, 521, 521, 521, 58754, 901, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58765,\n  /* 45189 */ 57886, 57886, 57886, 57886, 57886, 58777, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 45204 */ 57886, 57886, 57886, 59381, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 45219 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61041, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 45234 */ 57886, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 58954, 57936, 57936, 57936, 57936,\n  /* 45249 */ 57936, 58966, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 45264 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 3375, 0, 0,\n  /* 45282 */ 0, 57909, 57909, 57909, 59954, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 45297 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 45312 */ 57909, 57909, 57909, 60355, 57909, 57909, 57909, 57936, 57936, 57936, 60037, 57936, 57936, 57936, 57936,\n  /* 45327 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 45342 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59026, 57936, 57936, 57936, 0, 0, 4212,\n  /* 45358 */ 521, 521, 521, 61558, 57886, 57886, 57886, 61560, 57909, 57909, 57909, 61562, 57936, 57936, 57936, 0, 521,\n  /* 45375 */ 521, 57886, 57886, 57909, 57909, 57936, 57936, 521, 57886, 57909, 57936, 521, 521, 521, 521, 521, 521,\n  /* 45392 */ 521, 521, 3793, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886,\n  /* 45412 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60607, 57886, 57886, 60610, 57886, 57886, 60613, 0, 0,\n  /* 45428 */ 60614, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60637,\n  /* 45443 */ 60638, 57909, 57909, 57909, 57909, 60641, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 45458 */ 57909, 57909, 60647, 0, 0, 0, 430, 131072, 0, 430, 430, 0, 0, 430, 439, 0, 430, 0, 430, 469, 469, 469,\n  /* 45480 */ 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 528, 57894, 528, 57894, 528,\n  /* 45500 */ 528, 57894, 528, 528, 57917, 57894, 528, 528, 57894, 57894, 57894, 57917, 57894, 57894, 57894, 57894,\n  /* 45516 */ 57894, 57894, 57894, 57917, 57917, 57894, 57894, 57944, 57894, 57894, 57894, 57894, 57894, 57894, 57894,\n  /* 45531 */ 57944, 57944, 57894, 57894, 57894, 57894, 57944, 57944, 57894, 528, 57894, 57894, 57894, 1, 24578, 3,\n  /* 45547 */ 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 45575 */ 6275072, 0, 0, 0, 0, 0, 0, 0, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 58754, 1961, 57886, 57886, 57886,\n  /* 45601 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 45616 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 2561, 0, 50657, 2061,\n  /* 45633 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 45648 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 45663 */ 59950, 57909, 57909, 2302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 45693 */ 0, 0, 2326, 0, 0, 0, 0, 0, 1213, 0, 1215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 45725 */ 0, 0, 0, 0, 139264, 147456, 0, 0, 0, 420, 0, 0, 0, 0, 0, 2385, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521,\n  /* 45751 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1949, 521, 521, 521,\n  /* 45772 */ 521, 521, 521, 521, 0, 3138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3158, 0, 0,\n  /* 45803 */ 0, 0, 0, 0, 0, 0, 1731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1747, 0, 0, 1750, 0, 0, 521,\n  /* 45834 */ 521, 521, 3213, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 0, 0, 57886, 57886, 57886, 57886, 57886,\n  /* 45854 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 50657, 58754, 977, 57909,\n  /* 45869 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58868, 57909, 0, 0,\n  /* 45885 */ 3404, 0, 0, 0, 0, 0, 3407, 0, 3409, 0, 0, 3412, 0, 0, 0, 0, 0, 3417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 45915 */ 6275072, 0, 0, 0, 0, 0, 0, 0, 4399797, 4399797, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 3460,\n  /* 45940 */ 521, 521, 521, 521, 521, 521, 521, 521, 3468, 521, 521, 3471, 521, 521, 521, 60818, 57886, 57886, 57886,\n  /* 45959 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58296, 57886, 57886, 57886, 57886, 58314, 57886,\n  /* 45974 */ 57886, 0, 57909, 57909, 58325, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57886,\n  /* 45989 */ 60857, 57886, 57886, 57886, 60860, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 46004 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60877, 57909, 57909, 57909, 57909,\n  /* 46019 */ 57909, 57909, 57909, 57909, 57909, 57909, 59959, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 46034 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 60664,\n  /* 46049 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57909, 57909, 57909, 57909, 57909,\n  /* 46064 */ 60887, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60896, 57909, 57909, 60899, 57909,\n  /* 46079 */ 57909, 57909, 60902, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 0, 0, 0,\n  /* 46098 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 4089, 521, 57886, 57886, 57886, 60938, 57936,\n  /* 46116 */ 57936, 60941, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 46139 */ 3615, 0, 0, 0, 0, 0, 0, 0, 393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 46173 */ 3159, 3160, 0, 0, 0, 0, 0, 521, 521, 521, 521, 3663, 521, 3665, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 46195 */ 521, 521, 57886, 57886, 61017, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 46210 */ 57886, 57886, 59850, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59857, 57886, 59859, 57886,\n  /* 46225 */ 59862, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61029, 57886, 57886, 57886,\n  /* 46240 */ 57886, 57886, 57886, 57886, 57886, 61035, 57886, 61037, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 46255 */ 57886, 57886, 57886, 57886, 57909, 57909, 61046, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58917,\n  /* 46270 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58934, 57909, 57909, 57909,\n  /* 46285 */ 57909, 57909, 57909, 0, 57886, 57936, 57936, 57936, 58949, 57936, 61093, 57936, 61095, 57936, 57936,\n  /* 46300 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0,\n  /* 46317 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 3791, 521, 521, 521, 521,\n  /* 46345 */ 521, 521, 521, 521, 3797, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 46363 */ 57886, 57886, 57886, 57886, 58804, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 46378 */ 57886, 57886, 57886, 57886, 57886, 58819, 57886, 57886, 57886, 57886, 57886, 57886, 61153, 57886, 57886,\n  /* 46393 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61159, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 46408 */ 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61172, 57909, 57909, 57909,\n  /* 46423 */ 57909, 57909, 57909, 58915, 57909, 57909, 58922, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 46438 */ 57909, 57909, 58936, 57909, 57909, 57909, 57909, 57909, 0, 57886, 57936, 57936, 57936, 57936, 57936, 521,\n  /* 46454 */ 1336, 521, 521, 521, 521, 58775, 57886, 57886, 57886, 57886, 57886, 1138, 0, 0, 0, 0, 1711, 0, 0, 0, 0,\n  /* 46475 */ 1718, 0, 0, 0, 0, 0, 0, 1247, 1248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1155, 1154, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 46505 */ 0, 0, 0, 2799, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3630, 0, 0, 0, 0, 0, 0, 0,\n  /* 46538 */ 3637, 0, 0, 57936, 57936, 57936, 57936, 57936, 61197, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 46554 */ 57936, 521, 521, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 46583 */ 0, 0, 3782, 0, 0, 521, 521, 521, 521, 0, 0, 0, 0, 683, 684, 0, 0, 0, 0, 689, 0, 0, 0, 367, 367, 367, 0, 0,\n  /* 46611 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 530, 57896, 530, 57896, 530, 530, 57896, 530, 530, 57919, 57896,\n  /* 46635 */ 530, 530, 57896, 57896, 57896, 57919, 57886, 58258, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 46650 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58317, 0, 57909, 57909, 57909, 57909,\n  /* 46665 */ 58334, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59481, 57909, 57909,\n  /* 46680 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 46695 */ 57909, 57909, 57886, 57936, 57936, 57936, 57936, 58468, 521, 839, 521, 521, 521, 898, 0, 58258, 57886,\n  /* 46712 */ 57886, 57886, 57886, 58317, 155941, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1219, 1220, 0, 0, 0, 0, 0,\n  /* 46737 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6299648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5808128, 0, 0, 0,\n  /* 46768 */ 1211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521,\n  /* 46799 */ 521, 3647, 521, 521, 521, 521, 521, 521, 521, 3652, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 46820 */ 2421, 521, 521, 521, 2424, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 46841 */ 2895, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 46857 */ 57886, 57886, 60842, 57886, 60844, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 46872 */ 57886, 57886, 57886, 0, 0, 1839, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1853, 0, 0, 0, 0, 0, 0,\n  /* 46901 */ 0, 0, 0, 0, 0, 0, 1307, 1308, 0, 0, 1154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 1319, 521, 521, 521, 1958,\n  /* 46929 */ 58754, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 46944 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 46959 */ 57886, 0, 2962, 0, 0, 386, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 401, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 46991 */ 0, 0, 0, 0, 0, 412, 0, 0, 0, 0, 0, 0, 412, 139264, 147456, 0, 0, 0, 421, 0, 333, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 47020 */ 0, 0, 0, 0, 333, 0, 0, 0, 0, 0, 0, 0, 0, 333, 0, 0, 139264, 147456, 0, 0, 0, 0, 0, 0, 0, 2773, 0, 0, 0, 0,\n  /* 47050 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3634, 0, 0, 0, 0, 0, 0, 424, 424, 0, 0,\n  /* 47082 */ 131072, 424, 0, 0, 0, 424, 0, 440, 0, 0, 424, 334, 470, 470, 470, 483, 483, 483, 483, 483, 483, 483, 483,\n  /* 47105 */ 483, 483, 504, 512, 512, 512, 512, 519, 512, 512, 512, 519, 512, 512, 512, 512, 512, 512, 529, 57895, 529,\n  /* 47126 */ 57895, 529, 529, 57895, 529, 529, 57918, 57895, 529, 529, 57895, 57895, 57895, 57918, 57895, 57895, 57895,\n  /* 47143 */ 57895, 57895, 57895, 57895, 57918, 57918, 57895, 57895, 57945, 57895, 57895, 57895, 57895, 57895, 57895,\n  /* 47158 */ 57895, 57945, 57945, 57895, 57895, 57895, 57895, 57945, 57945, 57895, 529, 57895, 57895, 57895, 1, 24578,\n  /* 47174 */ 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 47203 */ 1734, 0, 0, 0, 0, 0, 0, 0, 0, 1741, 0, 0, 1744, 1745, 1746, 0, 1748, 1749, 0, 0, 0, 822, 0, 0, 0, 0, 0, 0,\n  /* 47231 */ 0, 521, 521, 521, 521, 842, 521, 851, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 47252 */ 899, 57886, 57886, 57886, 57886, 57886, 57886, 61244, 57886, 57886, 57886, 61248, 57886, 57909, 57909,\n  /* 47267 */ 57909, 57909, 57909, 57909, 61254, 57909, 57909, 57909, 57909, 57909, 57909, 61260, 57909, 57909, 57909,\n  /* 47282 */ 61264, 57909, 57936, 57886, 57886, 58261, 57886, 58270, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 47297 */ 57886, 57886, 57886, 57886, 57886, 57886, 58318, 0, 57909, 57909, 57909, 57909, 57909, 58337, 57909,\n  /* 47312 */ 58346, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58887, 58889, 57909, 57909, 57909,\n  /* 47327 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 47342 */ 57909, 57909, 57909, 60661, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60669, 57936,\n  /* 47357 */ 57936, 57936, 57936, 57936, 57936, 57936, 58469, 521, 521, 521, 521, 1130, 899, 0, 57886, 57886, 57886,\n  /* 47374 */ 57886, 58480, 58318, 155941, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1764, 1765, 1766, 0, 0, 0, 0, 0, 0,\n  /* 47400 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2319, 2320, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521,\n  /* 47430 */ 521, 521, 1331, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1350, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 47451 */ 521, 1360, 521, 521, 521, 521, 521, 521, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 47470 */ 59825, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59837, 57886, 57886,\n  /* 47485 */ 521, 1408, 521, 58754, 901, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 47501 */ 57886, 58770, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58789, 57886, 57886, 57886,\n  /* 47516 */ 57886, 57886, 57886, 59342, 59343, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 47531 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 47546 */ 59360, 57886, 57886, 57886, 57886, 57886, 59367, 57886, 57886, 58833, 57886, 57886, 57886, 57886, 57886,\n  /* 47561 */ 58840, 57886, 57886, 57886, 58847, 57886, 50657, 58754, 977, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 47576 */ 57909, 57909, 57909, 57909, 57909, 57909, 58865, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58919,\n  /* 47591 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 47606 */ 57909, 57909, 57909, 0, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 47621 */ 60042, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 47636 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 3370, 57886, 57886, 60717, 0, 0, 0, 0, 0,\n  /* 47654 */ 57936, 57936, 57936, 59037, 57936, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 47671 */ 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1796, 0, 0, 0, 0, 0, 0, 0, 1803, 0, 1805, 0, 0, 0, 1807,\n  /* 47701 */ 0, 739, 0, 0, 0, 0, 1838, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1850, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 47734 */ 0, 0, 0, 0, 1836, 1924, 521, 521, 521, 521, 521, 521, 521, 521, 1933, 521, 521, 521, 521, 521, 521, 1942,\n  /* 47756 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1952, 1954, 521, 521, 521, 0, 0, 0, 0, 0, 0, 57886,\n  /* 47778 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 47793 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59861, 57886, 57886, 57886, 57886, 57886,\n  /* 47808 */ 57886, 521, 58754, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 47824 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59328, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 47839 */ 57886, 57886, 57886, 57886, 61033, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 47854 */ 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 47869 */ 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 50657, 0, 57909,\n  /* 47884 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 47899 */ 57909, 57909, 57909, 57909, 59428, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 47914 */ 0, 0, 0, 0, 57886, 57936, 57936, 58397, 57936, 57936, 57936, 57936, 57936, 57936, 58430, 57936, 57936,\n  /* 47931 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59572, 57936, 57936, 57936,\n  /* 47946 */ 57936, 57936, 57936, 59581, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59592,\n  /* 47961 */ 59594, 57936, 57936, 57936, 57936, 521, 521, 521, 0, 0, 2472, 0, 0, 0, 57886, 57886, 57886, 57886, 57886,\n  /* 47980 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 47995 */ 57886, 57886, 57886, 59885, 57886, 57886, 57886, 57886, 59889, 57886, 57886, 57886, 2329, 0, 0, 0, 0, 0,\n  /* 48013 */ 0, 0, 0, 2337, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3128, 0, 0, 0, 0, 0,\n  /* 48046 */ 0, 0, 0, 521, 521, 2465, 521, 521, 521, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 59824,\n  /* 48066 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59836, 57886, 57886, 57886,\n  /* 48081 */ 57886, 57886, 57886, 61492, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 48096 */ 57909, 61500, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 48111 */ 57936, 59583, 59584, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 48126 */ 57936, 57936, 2255, 521, 59925, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 48141 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 48156 */ 57909, 57909, 57909, 57909, 57909, 57909, 60358, 59953, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 48171 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 48186 */ 57909, 59972, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59935, 57909,\n  /* 48201 */ 59937, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 48216 */ 57909, 57909, 57909, 57909, 60660, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 48231 */ 57936, 57936, 60671, 57936, 60008, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 48246 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 48261 */ 57936, 57936, 57936, 57936, 57936, 57936, 59598, 521, 521, 60036, 57936, 57936, 57936, 57936, 57936,\n  /* 48276 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 48291 */ 57936, 57936, 57936, 60055, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 0, 4132, 0, 521,\n  /* 48310 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0,\n  /* 48330 */ 2769, 0, 0, 2772, 0, 0, 0, 0, 0, 0, 2776, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2787, 0, 0, 0, 0, 0, 0, 0, 394,\n  /* 48361 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 319488, 319488, 0, 0, 0, 0, 0,\n  /* 48393 */ 0, 2795, 0, 0, 0, 0, 2797, 0, 0, 0, 0, 0, 0, 0, 2801, 2802, 0, 0, 2805, 0, 0, 2808, 0, 0, 0, 0, 0, 0, 0,\n  /* 48422 */ 0, 0, 0, 1161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 315, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 48456 */ 0, 0, 2818, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2828, 0, 0, 0, 0, 521, 2832, 521, 521, 521, 521, 521,\n  /* 48484 */ 521, 521, 521, 521, 521, 521, 2878, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 48505 */ 521, 521, 521, 521, 521, 521, 1356, 521, 521, 521, 1359, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 48526 */ 521, 521, 521, 2873, 521, 521, 521, 521, 521, 521, 2880, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 48547 */ 2888, 521, 521, 521, 2891, 521, 521, 521, 0, 0, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 48567 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60253, 57886, 57886, 57886,\n  /* 48582 */ 57886, 57886, 57886, 57886, 61493, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 48597 */ 57909, 57909, 61501, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 48612 */ 57936, 60921, 57936, 60923, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60930, 57936, 57936, 60932,\n  /* 48627 */ 57936, 57936, 57936, 57936, 57936, 0, 0, 57909, 60308, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 48643 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 48658 */ 57909, 57909, 57909, 57909, 57909, 60331, 57936, 57936, 60407, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 48673 */ 57936, 60415, 57936, 57936, 57936, 57936, 57936, 57936, 60422, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 48688 */ 57936, 57936, 57936, 57936, 57936, 60431, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59574,\n  /* 48703 */ 57936, 57936, 57936, 59580, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59590, 57936,\n  /* 48718 */ 57936, 57936, 57936, 59596, 57936, 57936, 521, 521, 521, 0, 901, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 48735 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 48750 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59864, 57886, 57886, 57886, 57936, 60434, 57936, 57936,\n  /* 48765 */ 57936, 57936, 57936, 57936, 3094, 521, 521, 521, 521, 60441, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 3102,\n  /* 48784 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 3646, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 48808 */ 521, 521, 521, 521, 3658, 521, 521, 521, 3112, 0, 0, 0, 0, 0, 0, 0, 3116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 48836 */ 0, 0, 0, 0, 0, 3130, 3131, 0, 0, 0, 0, 0, 0, 0, 3143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 48868 */ 0, 0, 0, 0, 0, 0, 0, 333, 334, 335, 0, 0, 0, 0, 0, 3211, 521, 521, 521, 521, 521, 521, 521, 3215, 521,\n  /* 48893 */ 521, 521, 521, 521, 0, 0, 57886, 57886, 57886, 60567, 57886, 57886, 57886, 57886, 57886, 60572, 57886,\n  /* 48910 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61246, 57886, 57886, 57886, 61249, 57909, 57909, 57909,\n  /* 48925 */ 57909, 61253, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61262, 57909, 57909, 57909,\n  /* 48940 */ 61265, 60601, 57886, 60603, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60608, 57886, 57886,\n  /* 48955 */ 57886, 57886, 57886, 0, 0, 57909, 57909, 57909, 60616, 57909, 57909, 57909, 57909, 57909, 60621, 57909,\n  /* 48971 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60654, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 48986 */ 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 49001 */ 57936, 57936, 57936, 57936, 57936, 61086, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 49016 */ 57936, 57909, 57909, 57909, 60650, 57909, 60652, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 49031 */ 60657, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 60665, 57936, 57936, 57936, 57936, 57936,\n  /* 49046 */ 60670, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60041, 57936, 57936, 57936, 57936, 57936,\n  /* 49061 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60054, 57936, 57936, 57936, 57936, 57936, 60058,\n  /* 49076 */ 60059, 60060, 57936, 60696, 57936, 57936, 57936, 60699, 57936, 60701, 57936, 57936, 57936, 57936, 57936,\n  /* 49091 */ 57936, 57936, 57936, 60706, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 3374,\n  /* 49107 */ 0, 0, 3377, 3378, 521, 521, 521, 521, 521, 521, 3462, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 49128 */ 521, 521, 521, 57886, 57886, 57886, 57886, 60822, 57886, 57886, 57886, 57886, 60826, 57886, 57886, 57886,\n  /* 49144 */ 57886, 57886, 58835, 57886, 57886, 57886, 57886, 57886, 57886, 58846, 57886, 50657, 58754, 977, 57909,\n  /* 49159 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58862, 57909, 57909, 57909, 57909, 57909,\n  /* 49174 */ 57909, 57909, 57909, 57909, 58394, 0, 0, 0, 0, 57886, 57936, 57936, 57936, 57936, 57936, 58412, 57936,\n  /* 49191 */ 58421, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521,\n  /* 49211 */ 521, 521, 521, 521, 4085, 521, 4087, 521, 521, 521, 57886, 57886, 57886, 57936, 57936, 57936, 57936,\n  /* 49228 */ 57936, 57936, 57936, 60916, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 49243 */ 57936, 57936, 57936, 57936, 57936, 60931, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521,\n  /* 49259 */ 57886, 57886, 57886, 0, 0, 0, 3608, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1194, 0, 1196, 0, 0, 367,\n  /* 49287 */ 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3619, 3620, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 49320 */ 0, 0, 3633, 0, 0, 0, 0, 0, 0, 0, 0, 1793, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1806, 0, 0, 0, 0, 0,\n  /* 49352 */ 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 49374 */ 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60825, 57886, 57886, 57886, 57886, 521, 521,\n  /* 49390 */ 3787, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3798, 521, 521, 521, 521, 521,\n  /* 49411 */ 57886, 57886, 57886, 57886, 57886, 57886, 61149, 57886, 57886, 57886, 57886, 57886, 58836, 57886, 57886,\n  /* 49426 */ 57886, 57886, 57886, 57886, 57886, 57886, 50657, 58754, 977, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 49441 */ 57909, 57909, 57909, 58861, 57909, 57909, 57909, 58870, 57909, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 49456 */ 57936, 61198, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 49477 */ 0, 0, 3627, 0, 0, 3777, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 4022, 521,\n  /* 49505 */ 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 61379, 0, 521, 521, 521, 521,\n  /* 49524 */ 521, 521, 521, 521, 3955, 521, 3957, 3958, 521, 3960, 521, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 49541 */ 57886, 57886, 61314, 57886, 61316, 61317, 57886, 61319, 57886, 61321, 61488, 57886, 61489, 57886, 57886,\n  /* 49556 */ 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 61496, 57909, 61497, 57909, 57909, 57909, 57909,\n  /* 49571 */ 57936, 57936, 57936, 57936, 57936, 57936, 61504, 57936, 61505, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 49586 */ 57936, 57936, 57936, 58961, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 49601 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59019, 57936, 57936, 59023,\n  /* 49616 */ 57936, 57936, 57936, 57936, 57936, 59030, 0, 0, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57909,\n  /* 49633 */ 57909, 57909, 57909, 57936, 57936, 57936, 57936, 0, 521, 521, 57886, 57886, 57909, 57909, 57936, 57936,\n  /* 49649 */ 4224, 61569, 61570, 61571, 521, 521, 521, 521, 521, 521, 521, 1332, 1339, 521, 521, 521, 521, 521, 521,\n  /* 49668 */ 521, 521, 1352, 521, 1354, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2422, 521, 521,\n  /* 49688 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 0, 0, 57886, 60566,\n  /* 49709 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58307,\n  /* 49724 */ 57886, 57886, 57886, 57886, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 49739 */ 57909, 57909, 57896, 57896, 57896, 57896, 57896, 57896, 57896, 57919, 57919, 57896, 57896, 57946, 57896,\n  /* 49754 */ 57896, 57896, 57896, 57896, 57896, 57896, 57946, 57946, 57896, 57896, 57896, 57896, 57946, 57946, 57896,\n  /* 49769 */ 530, 57896, 57896, 57896, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0,\n  /* 49792 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2312, 0, 0, 0, 2315, 0, 0, 0, 0, 0, 2321, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 49824 */ 0, 57909, 58909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 49839 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 57886, 57936,\n  /* 49854 */ 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 1138,\n  /* 49871 */ 1705, 1706, 0, 0, 0, 1712, 1713, 0, 0, 0, 0, 0, 0, 0, 0, 687, 0, 0, 0, 0, 0, 367, 367, 367, 0, 0, 0, 0, 0,\n  /* 49900 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521,\n  /* 49929 */ 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 49946 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 339,\n  /* 49971 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2366, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 50005 */ 0, 367, 367, 0, 0, 0, 0, 0, 1162, 0, 0, 0, 0, 0, 0, 405, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 405, 0, 0, 0,\n  /* 50037 */ 0, 0, 0, 0, 383, 0, 139264, 147456, 0, 405, 0, 0, 405, 0, 0, 0, 431, 131072, 0, 431, 431, 0, 0, 431, 0,\n  /* 50062 */ 445, 431, 0, 431, 471, 471, 471, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484,\n  /* 50083 */ 484, 531, 57897, 531, 57897, 531, 531, 57897, 531, 531, 57920, 57897, 531, 531, 57897, 57897, 57897,\n  /* 50100 */ 57920, 57897, 57897, 57897, 57897, 57897, 57897, 57897, 57920, 57920, 57897, 57897, 57947, 57897, 57897,\n  /* 50115 */ 57897, 57897, 57897, 57897, 57897, 57947, 57947, 57897, 57897, 57897, 57897, 57947, 57947, 57897, 531,\n  /* 50130 */ 57897, 57897, 57897, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0,\n  /* 50153 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2775, 0, 0, 0, 0, 0, 2780, 0, 2782, 2783, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 50184 */ 0, 1157, 0, 0, 0, 0, 0, 0, 0, 1159, 0, 0, 0, 0, 0, 0, 1266, 0, 0, 0, 0, 1271, 654, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 50215 */ 0, 0, 654, 0, 654, 0, 0, 0, 0, 813, 0, 0, 0, 654, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 3645, 521, 521, 521,\n  /* 50243 */ 3648, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3656, 521, 521, 521, 521, 521, 521, 521, 0, 0, 0, 0,\n  /* 50265 */ 733, 654, 0, 0, 521, 829, 521, 521, 521, 844, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 885, 521,\n  /* 50287 */ 521, 521, 521, 57886, 57886, 58247, 57886, 57886, 57886, 58263, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 50303 */ 57886, 57886, 57886, 57886, 58304, 57886, 57886, 57886, 57886, 0, 57909, 57909, 58323, 57909, 57909,\n  /* 50318 */ 57909, 58339, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59987, 57909, 57909,\n  /* 50333 */ 57909, 57936, 57936, 57936, 57936, 57936, 57936, 59996, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 50348 */ 57936, 57936, 57936, 57936, 57936, 57936, 60391, 57936, 60393, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 50363 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60022, 57936, 57936, 57936, 57936,\n  /* 50378 */ 57936, 57936, 57936, 57936, 60029, 57936, 60031, 57936, 60034, 57936, 57936, 57909, 57909, 57909, 57909,\n  /* 50393 */ 57909, 58380, 57909, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 58398, 57936, 57936, 57936,\n  /* 50410 */ 58414, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60390, 57936,\n  /* 50425 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 50440 */ 57936, 57936, 57936, 60710, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 58455, 57936, 57936,\n  /* 50459 */ 57936, 57936, 521, 521, 521, 885, 521, 521, 0, 57886, 57886, 57886, 58304, 57886, 57886, 293, 1138, 0, 0,\n  /* 50478 */ 1142, 0, 0, 1147, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 50502 */ 521, 521, 521, 3888, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58841, 57886, 57886,\n  /* 50518 */ 57886, 57886, 57886, 50657, 58754, 977, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 50533 */ 57909, 57909, 57909, 57909, 57909, 57909, 60639, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 50548 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59965, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 50563 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 0, 0, 1154, 1155, 0, 0, 0, 0, 0, 0, 0,\n  /* 50584 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3133, 0, 0, 0, 0, 0, 0, 1155, 0, 0, 0, 0,\n  /* 50617 */ 0, 0, 1280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 760, 0, 0, 763, 0, 0, 767, 0,\n  /* 50649 */ 0, 0, 0, 521, 521, 521, 58754, 901, 57886, 58757, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 50667 */ 57886, 57886, 57886, 58771, 58778, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58791, 57886,\n  /* 50682 */ 58793, 57886, 57886, 57886, 57886, 57886, 60831, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 50697 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60849, 57886, 60851, 57886,\n  /* 50712 */ 57886, 57886, 57886, 57886, 57886, 58278, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 50727 */ 57886, 57886, 57886, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58354, 57909,\n  /* 50742 */ 57909, 58908, 57909, 58910, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58923, 57909, 57909, 57909,\n  /* 50757 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58938, 57909, 57909, 57909, 0, 57886, 57936,\n  /* 50772 */ 58946, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60068, 57936, 57936, 60071, 60072, 57936,\n  /* 50787 */ 2404, 521, 2731, 521, 521, 59835, 57886, 60080, 57886, 57886, 2739, 2266, 0, 2740, 2269, 0, 0, 0, 0, 0, 0,\n  /* 50808 */ 4014, 0, 4016, 0, 521, 521, 521, 521, 521, 4021, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886,\n  /* 50828 */ 57886, 57886, 57886, 57886, 61378, 57886, 57936, 59033, 57936, 57936, 57936, 521, 1332, 521, 1389, 521,\n  /* 50844 */ 521, 58771, 57886, 57886, 58828, 57886, 57886, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3146, 0, 0,\n  /* 50869 */ 0, 0, 0, 0, 0, 0, 0, 0, 3156, 0, 0, 0, 0, 3161, 0, 0, 0, 3163, 0, 1724, 1725, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 50899 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2342912, 0, 0, 0, 521, 521, 521, 521, 521,\n  /* 50929 */ 521, 1930, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 50950 */ 521, 521, 521, 521, 521, 1957, 521, 58754, 1961, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 50967 */ 57886, 57886, 57886, 57886, 57886, 57886, 59321, 59322, 57886, 57886, 57886, 57886, 59329, 57886, 57886,\n  /* 50982 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 61391, 57909, 57909, 57909,\n  /* 50997 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 61405, 57936, 57936,\n  /* 51012 */ 50657, 2061, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 51027 */ 57909, 59421, 59422, 57909, 57909, 57909, 57909, 59429, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 51042 */ 57909, 57909, 57909, 0, 0, 0, 741, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 51059 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59520, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 51074 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57909, 57909, 57909, 57909, 59473, 57909, 57909,\n  /* 51089 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 51104 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59501, 57909, 57886, 57886, 57886, 57886, 57886, 60832,\n  /* 51119 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 51134 */ 57886, 60847, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58843, 57886, 57886,\n  /* 51149 */ 57886, 50657, 58754, 977, 57909, 58852, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 51164 */ 57909, 57909, 58866, 58873, 57936, 57936, 57936, 57936, 57936, 59540, 57936, 57936, 57936, 57936, 57936,\n  /* 51179 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 51194 */ 59560, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 0, 57886, 57886, 57886, 57886,\n  /* 51211 */ 57886, 57886, 155941, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2800, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2809, 0,\n  /* 51239 */ 0, 0, 0, 0, 0, 0, 0, 0, 57936, 57936, 57936, 59569, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 51258 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 51273 */ 57936, 57936, 59597, 57936, 521, 521, 521, 0, 2895, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 51292 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 51307 */ 57886, 57886, 57886, 59359, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 2330, 0, 0, 0, 0, 0, 0, 0,\n  /* 51327 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2346, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521,\n  /* 51357 */ 521, 521, 2397, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 0, 0, 57886, 57886,\n  /* 51378 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61162,\n  /* 51393 */ 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 51408 */ 59866, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59878,\n  /* 51423 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59884, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 51438 */ 59890, 57886, 57886, 57886, 57886, 57886, 61030, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 51453 */ 61036, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909,\n  /* 51468 */ 57909, 57909, 57909, 57909, 61393, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936,\n  /* 51483 */ 57936, 57936, 57936, 57936, 57936, 61407, 57909, 57909, 57909, 57909, 59955, 57909, 57909, 57909, 57909,\n  /* 51498 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59967, 57909, 57909, 57909, 57909, 57909,\n  /* 51513 */ 57909, 57909, 59973, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60366, 57909,\n  /* 51528 */ 57909, 57909, 60369, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 60373, 57936, 57936, 57936, 57936,\n  /* 51543 */ 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 4083, 521, 521, 521, 521, 521,\n  /* 51565 */ 521, 521, 521, 57886, 57886, 57886, 57909, 57909, 59979, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 51581 */ 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 51596 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 51611 */ 57936, 60430, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60038, 57936, 57936, 57936, 57936,\n  /* 51626 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60050, 57936, 57936, 57936, 57936, 57936,\n  /* 51641 */ 57936, 57936, 60056, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 0, 57886, 57886,\n  /* 51658 */ 57886, 57886, 57886, 57886, 155941, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1149, 0, 0, 57936, 57936, 60062,\n  /* 51679 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521,\n  /* 51695 */ 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3109, 0, 0, 60258, 57886, 57886,\n  /* 51717 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 51732 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59865,\n  /* 51747 */ 3164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 3180, 521, 521,\n  /* 51773 */ 521, 521, 521, 521, 3188, 521, 521, 521, 521, 521, 521, 521, 1333, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 51794 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2858, 521, 521, 521, 521,\n  /* 51815 */ 521, 521, 521, 521, 521, 521, 57909, 57909, 60628, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 51832 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 51847 */ 57909, 57909, 57909, 57909, 57909, 57909, 61070, 57909, 57909, 57936, 57936, 57936, 60677, 57936, 57936,\n  /* 51862 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 51877 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59027, 57936, 57936, 57936,\n  /* 51892 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61099, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 51907 */ 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3171, 0, 0, 0, 521, 3175, 521, 521,\n  /* 51932 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 0, 2472, 57886, 57886, 57886, 57886,\n  /* 51951 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59349, 57886, 57886,\n  /* 51966 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 51981 */ 61039, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909,\n  /* 51996 */ 57886, 57886, 57886, 57886, 61441, 57886, 61443, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909,\n  /* 52011 */ 57909, 57909, 57909, 61454, 57909, 61456, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936,\n  /* 52026 */ 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 3607, 0, 3609, 0, 0, 0, 3613, 0, 0, 0, 0, 0, 0, 0,\n  /* 52050 */ 0, 0, 0, 1733, 0, 0, 0, 1736, 0, 0, 1739, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 335872, 0, 0, 0, 0, 0,\n  /* 52081 */ 0, 0, 0, 0, 0, 0, 0, 0, 139264, 147456, 0, 0, 335872, 0, 0, 61467, 57936, 61469, 57936, 57936, 57936,\n  /* 52102 */ 57936, 0, 0, 0, 0, 0, 0, 0, 4134, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 61485, 57886,\n  /* 52124 */ 57886, 57886, 57886, 57886, 57886, 57886, 59846, 57886, 59848, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 52139 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 52154 */ 57886, 60273, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 388, 340, 0,\n  /* 52171 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2351104, 0, 0, 0,\n  /* 52204 */ 0, 0, 131072, 0, 0, 0, 0, 0, 0, 441, 0, 0, 0, 456, 472, 472, 472, 456, 456, 456, 456, 456, 456, 456, 456,\n  /* 52229 */ 456, 456, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 532, 57898, 532,\n  /* 52249 */ 57898, 532, 532, 57898, 532, 532, 57921, 57898, 532, 532, 57898, 57898, 57898, 57921, 57898, 57898, 57898,\n  /* 52266 */ 57898, 57898, 57898, 57898, 57921, 57921, 57898, 57898, 57948, 57898, 57898, 57898, 57898, 57898, 57898,\n  /* 52281 */ 57898, 57948, 57948, 57898, 57898, 57898, 57898, 57948, 57948, 57898, 532, 57898, 57898, 57898, 1, 24578,\n  /* 52297 */ 3, 155941, 156275, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 52326 */ 3410, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212992, 0, 0, 0, 0, 0, 212992,\n  /* 52355 */ 212992, 212992, 212992, 212992, 655, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 655, 0, 655, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 52381 */ 655, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57886, 57886, 57886,\n  /* 52410 */ 58264, 57886, 57886, 58280, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 52425 */ 57886, 0, 57909, 57909, 57909, 57909, 57909, 57909, 58340, 57909, 57909, 58356, 57909, 57909, 57909,\n  /* 52440 */ 57909, 57909, 57909, 57909, 59444, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 52455 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59464, 57909, 57909, 57909, 57909, 57909,\n  /* 52470 */ 57909, 57909, 57909, 57909, 58921, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 52485 */ 57909, 57909, 57909, 57909, 57909, 57909, 0, 57886, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521,\n  /* 52502 */ 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 1138, 1705, 0, 0, 0, 0, 1712, 0, 0, 0, 0, 0, 0, 0,\n  /* 52524 */ 1722, 0, 1241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 52557 */ 1293, 0, 0, 0, 0, 0, 1299, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1315, 0, 0, 0, 0, 0, 521, 521,\n  /* 52588 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 52609 */ 521, 1890, 521, 521, 521, 521, 521, 521, 521, 521, 1372, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 52630 */ 521, 521, 521, 521, 1391, 521, 521, 521, 521, 521, 1399, 521, 521, 521, 521, 521, 521, 0, 0, 0, 0, 57886,\n  /* 52652 */ 59819, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 52667 */ 57886, 57886, 57886, 57886, 57886, 57886, 59357, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 52682 */ 57886, 57886, 57886, 521, 521, 521, 58754, 901, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 52698 */ 57886, 57886, 57886, 57886, 57886, 58772, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 52713 */ 57886, 57886, 57886, 57886, 58848, 50657, 58754, 977, 58851, 57909, 57909, 57909, 57909, 57909, 58858,\n  /* 52728 */ 57909, 57909, 57909, 57909, 58864, 57909, 57909, 57909, 58830, 57886, 57886, 57886, 57886, 57886, 58838,\n  /* 52743 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 50657, 58754, 977, 57909, 57909, 57909, 57909, 57909,\n  /* 52758 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58867, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 52773 */ 60631, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 52788 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60645, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 52803 */ 57909, 59985, 57909, 57909, 59988, 59989, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 52818 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60005, 57936, 0, 0, 1755, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 52839 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 338, 339, 0, 521, 58754, 0, 57886, 57886,\n  /* 52868 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59323,\n  /* 52883 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59334, 57886, 57886, 57886, 57886, 57886,\n  /* 52898 */ 58837, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 50657, 58754, 977, 57909, 57909, 57909,\n  /* 52913 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61058, 57909, 57909,\n  /* 52928 */ 57909, 57909, 57909, 57909, 57909, 57909, 61064, 57909, 61066, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 52943 */ 50657, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 52958 */ 57909, 57909, 57909, 59423, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59434, 57909,\n  /* 52973 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61178, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 52988 */ 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61191, 57936, 57936, 57936,\n  /* 53003 */ 57936, 57936, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 1138, 1705, 0, 0, 0,\n  /* 53022 */ 0, 1712, 0, 0, 0, 0, 0, 0, 0, 0, 349, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0,\n  /* 53054 */ 295, 0, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59541, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 53070 */ 57936, 57936, 59552, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 53085 */ 57936, 57936, 57936, 61279, 57936, 57936, 521, 57886, 0, 0, 0, 3940, 0, 0, 0, 0, 3627, 0, 0, 0, 0, 0,\n  /* 53107 */ 2282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2298, 2299, 0, 0, 0, 0, 0, 0, 0,\n  /* 53139 */ 3382, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139264, 147456, 0, 0, 0,\n  /* 53170 */ 0, 0, 2355, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 53204 */ 2328, 521, 2413, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 53225 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2866, 57886, 57886, 57886, 57886, 59844,\n  /* 53244 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 53259 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58824, 57886, 57886,\n  /* 53274 */ 57886, 57886, 57909, 57909, 57909, 59928, 57909, 57909, 57909, 57909, 59933, 57909, 57909, 57909, 57909,\n  /* 53289 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 53304 */ 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 53319 */ 57936, 57936, 57936, 57936, 60011, 57936, 57936, 57936, 57936, 60016, 57936, 57936, 57936, 57936, 57936,\n  /* 53334 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 53349 */ 57936, 57936, 57936, 58985, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 3380, 0, 0,\n  /* 53367 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4284416, 0, 0, 57886,\n  /* 53398 */ 60829, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 53413 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 53428 */ 57886, 59366, 57886, 57936, 57936, 57936, 60913, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 53443 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 53458 */ 57936, 57936, 57936, 57936, 57936, 59562, 57936, 57936, 57936, 0, 521, 521, 521, 521, 3951, 521, 521, 521,\n  /* 53476 */ 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 61310, 57886, 57886, 57886, 57886, 57886,\n  /* 53493 */ 57886, 57886, 57886, 57886, 57886, 57886, 59875, 57886, 57886, 57886, 57886, 59880, 57886, 57886, 57886,\n  /* 53508 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 50657, 58754, 977,\n  /* 53523 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58859, 57909, 57909, 57909, 58863, 57909, 57909, 58874,\n  /* 53538 */ 57909, 57909, 57909, 57909, 61326, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 53553 */ 57909, 57936, 57936, 57936, 57936, 61342, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 53568 */ 57936, 57936, 57936, 59004, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 53583 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60689, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 53598 */ 57936, 57936, 57936, 57936, 57936, 57936, 61508, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 57886,\n  /* 53617 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 53632 */ 57936, 57936, 57936, 57936, 57936, 521, 1333, 521, 521, 1698, 521, 58772, 57886, 57886, 57886, 59047,\n  /* 53648 */ 57886, 1138, 0, 0, 1708, 0, 0, 0, 0, 1715, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 53673 */ 521, 521, 521, 3883, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 53691 */ 59344, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 53706 */ 57886, 57886, 57886, 57886, 57886, 59364, 57886, 57886, 57886, 341, 342, 343, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 53727 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 341, 295, 0, 0, 0, 0, 0, 4013, 0, 0, 0, 0, 521, 521,\n  /* 53758 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 4027, 521, 521, 4029, 57886, 57886, 57886, 57886, 57886,\n  /* 53776 */ 57886, 57886, 57886, 59376, 57886, 57886, 57886, 57886, 57886, 57886, 59385, 57886, 57886, 57886, 57886,\n  /* 53791 */ 57886, 57886, 57886, 57886, 57886, 57886, 59396, 59398, 57886, 57886, 57886, 57886, 0, 0, 0, 389, 390,\n  /* 53808 */ 392, 342, 0, 0, 0, 0, 0, 0, 341, 0, 0, 0, 0, 341, 0, 0, 0, 342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 639, 748, 749,\n  /* 53838 */ 750, 0, 0, 0, 0, 0, 756, 757, 0, 0, 0, 0, 0, 0, 0, 0, 769, 770, 0, 772, 0, 0, 0, 389, 0, 0, 0, 0, 0, 0,\n  /* 53868 */ 342, 0, 0, 0, 389, 0, 0, 0, 0, 0, 342, 389, 0, 0, 0, 139264, 147456, 0, 0, 0, 422, 0, 0, 0, 0, 0, 245760,\n  /* 53895 */ 0, 0, 0, 245760, 0, 0, 245760, 245760, 245760, 0, 0, 0, 0, 0, 245760, 0, 245760, 245760, 0, 0, 0, 245760,\n  /* 53917 */ 245760, 0, 0, 245760, 0, 0, 0, 0, 131072, 0, 0, 0, 341, 0, 0, 0, 446, 0, 341, 0, 473, 473, 473, 473, 489,\n  /* 53942 */ 489, 489, 489, 489, 489, 489, 489, 489, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473,\n  /* 53963 */ 473, 473, 533, 57899, 533, 57899, 533, 533, 57899, 533, 533, 57922, 57899, 533, 533, 57899, 57899, 57899,\n  /* 53981 */ 57922, 57899, 57899, 57899, 57899, 57899, 57899, 57899, 57922, 57922, 57899, 57935, 57949, 57935, 57935,\n  /* 53996 */ 57935, 57935, 57935, 57935, 57935, 57949, 57949, 57935, 57935, 57935, 57935, 57949, 57949, 57935, 533,\n  /* 54011 */ 57899, 57899, 57899, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0,\n  /* 54034 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344064, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139264, 147456, 0, 0,\n  /* 54063 */ 344064, 0, 0, 0, 710, 0, 0, 0, 0, 0, 0, 0, 718, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 54095 */ 0, 0, 0, 331, 332, 0, 0, 0, 0, 0, 0, 0, 0, 802, 0, 660, 0, 779, 0, 0, 0, 0, 0, 779, 802, 0, 802, 800, 0,\n  /* 54124 */ 0, 0, 814, 0, 0, 0, 656, 817, 0, 779, 0, 0, 0, 0, 0, 823, 0, 0, 0, 0, 783, 656, 827, 0, 521, 830, 521,\n  /* 54151 */ 521, 521, 846, 521, 521, 862, 521, 521, 521, 521, 876, 521, 521, 521, 521, 894, 521, 521, 57886, 57886,\n  /* 54171 */ 58248, 57886, 57886, 57886, 58265, 57886, 57886, 58281, 57886, 57886, 57886, 57886, 58295, 57886, 57886,\n  /* 54186 */ 57886, 57886, 58313, 57886, 57886, 0, 57909, 57909, 58324, 57909, 57909, 57909, 58341, 57909, 57909,\n  /* 54201 */ 58357, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59476, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 54216 */ 59485, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59496, 59498, 57909, 57909,\n  /* 54231 */ 57909, 57909, 57886, 57909, 57909, 58371, 57909, 57909, 57909, 57909, 58389, 57909, 57909, 0, 0, 0, 0,\n  /* 54248 */ 57886, 57936, 57936, 58399, 57936, 57936, 57936, 58416, 57936, 57936, 58432, 57936, 57936, 57936, 57936,\n  /* 54263 */ 58446, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60412, 57936, 57936, 60416, 57936, 57936,\n  /* 54278 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60425, 57936, 57936, 57936, 60428, 60429, 57936, 57936,\n  /* 54293 */ 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 0, 57886, 57886, 57886, 57886, 57886, 57886, 155941,\n  /* 54310 */ 1138, 0, 0, 1143, 0, 0, 1148, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3881, 521,\n  /* 54335 */ 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58802, 57886,\n  /* 54352 */ 57886, 57886, 58806, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 54367 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 2962, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 54383 */ 57909, 57909, 57909, 57909, 60623, 57909, 57936, 57936, 58464, 57936, 57936, 521, 521, 521, 521, 521, 521,\n  /* 54400 */ 0, 57886, 57886, 57886, 57886, 57886, 57886, 155941, 1138, 0, 301, 0, 0, 305, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 54422 */ 1816, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 740, 0, 0,\n  /* 54456 */ 0, 0, 1274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540,\n  /* 54488 */ 57906, 540, 57906, 540, 540, 57906, 540, 540, 57929, 57906, 540, 540, 57906, 57906, 57906, 57929, 521,\n  /* 54505 */ 521, 521, 58754, 901, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 54521 */ 57886, 58773, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 54536 */ 59348, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59361, 57886, 57886,\n  /* 54551 */ 57886, 57886, 57886, 57886, 57886, 58797, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 54566 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 54581 */ 57886, 58821, 57886, 57886, 57886, 57886, 57886, 57886, 59374, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 54596 */ 57886, 57886, 59386, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59397, 57886,\n  /* 54611 */ 57886, 57886, 57886, 57886, 57886, 57886, 61444, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909,\n  /* 54626 */ 57909, 57909, 57909, 57909, 57909, 61457, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 54641 */ 57936, 57936, 521, 3095, 521, 521, 521, 57886, 60442, 57886, 57886, 57886, 0, 0, 3100, 3101, 0, 0, 0, 0,\n  /* 54661 */ 0, 0, 0, 0, 0, 0, 3627, 0, 3776, 0, 0, 0, 0, 3780, 0, 0, 0, 0, 0, 0, 0, 0, 3783, 0, 521, 521, 521, 3785,\n  /* 54689 */ 0, 0, 0, 0, 1814, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 54722 */ 221645, 221645, 221645, 221645, 521, 58754, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 54737 */ 57886, 57886, 59316, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59327, 57886, 57886, 57886,\n  /* 54752 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59345, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 54767 */ 57886, 59356, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59876,\n  /* 54782 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 54797 */ 57886, 57886, 57886, 57886, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 54812 */ 57909, 57909, 50657, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59416,\n  /* 54827 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59427, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 54842 */ 57909, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 54859 */ 57936, 58429, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 2440, 521, 521,\n  /* 54876 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2459,\n  /* 54897 */ 521, 521, 521, 0, 0, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 54916 */ 57886, 57886, 57886, 57886, 57886, 57886, 60252, 57886, 57886, 57886, 57886, 57886, 60257, 59892, 57886,\n  /* 54931 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 57909, 57909, 57909, 59910, 57909,\n  /* 54948 */ 59912, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60340,\n  /* 54963 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 54978 */ 57909, 57909, 57909, 61060, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 54993 */ 57909, 57909, 57909, 57909, 57909, 57909, 59981, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 55008 */ 57909, 57936, 57936, 57936, 59993, 57936, 59995, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 55023 */ 57936, 57936, 57936, 57936, 57936, 57936, 60686, 60687, 57936, 57936, 57936, 57936, 60690, 57936, 57936,\n  /* 55038 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60064, 57936,\n  /* 55053 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 57886, 57886, 57886,\n  /* 55069 */ 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2274, 0, 0, 0, 0, 0, 0, 0, 2820, 0, 0,\n  /* 55100 */ 0, 0, 2823, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2831, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 55125 */ 521, 521, 521, 3961, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 55141 */ 57886, 57886, 61320, 57886, 521, 2842, 521, 521, 2845, 2846, 521, 521, 521, 521, 521, 2851, 521, 2853,\n  /* 55159 */ 521, 521, 521, 521, 2857, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2863, 521, 521, 521, 0, 0, 0, 0, 0,\n  /* 55182 */ 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 55197 */ 57886, 60251, 57886, 57886, 60254, 60255, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909,\n  /* 55212 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 55227 */ 57909, 57909, 57909, 60878, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59445, 57909,\n  /* 55242 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59456, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 55257 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61336, 57909, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 55272 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61352, 57936, 521, 521, 521, 521, 521, 2871, 521,\n  /* 55289 */ 521, 521, 521, 521, 521, 2879, 521, 521, 521, 521, 521, 2884, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 55310 */ 521, 521, 521, 521, 1904, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 55331 */ 521, 521, 1353, 1355, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 60260,\n  /* 55350 */ 57886, 60262, 57886, 57886, 57886, 57886, 60266, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 55365 */ 57886, 60272, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60281, 57886, 57886, 57886,\n  /* 55380 */ 57886, 57886, 59373, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 55395 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59401, 57886, 57886,\n  /* 55410 */ 57886, 57886, 57886, 60289, 57886, 57886, 57886, 57886, 57886, 60294, 57886, 57886, 57886, 57886, 57886,\n  /* 55425 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 57909,\n  /* 55442 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 55457 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60330, 57909, 0, 0,\n  /* 55473 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 55488 */ 60318, 57909, 57909, 60321, 60322, 57909, 57909, 57909, 57909, 57909, 60327, 57909, 60329, 57909, 57909,\n  /* 55503 */ 57909, 57909, 57909, 57909, 57909, 60336, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60342, 57909,\n  /* 55518 */ 57909, 57909, 57909, 57909, 57909, 57909, 60350, 57909, 57909, 57909, 57909, 57909, 57909, 60357, 57909,\n  /* 55533 */ 57909, 57909, 60333, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60339, 57909, 57909,\n  /* 55548 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60348, 57909, 57909, 57909, 57909, 57909, 57909, 60356,\n  /* 55563 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60632, 57909, 57909, 60635, 57909, 57909, 57909, 57909,\n  /* 55578 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60646,\n  /* 55593 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60889, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 55608 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 60906, 57936, 57936, 57936,\n  /* 55623 */ 57936, 60910, 57909, 57909, 57909, 60361, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 55638 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 55653 */ 57936, 57936, 57936, 57936, 61192, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60383, 57936, 57936,\n  /* 55668 */ 60386, 60387, 57936, 57936, 57936, 57936, 57936, 60392, 57936, 60394, 57936, 57936, 57936, 57936, 60398,\n  /* 55683 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60404, 0, 0, 3139, 0, 0, 0, 0, 0, 0, 0,\n  /* 55703 */ 3145, 0, 3147, 0, 0, 0, 3150, 0, 0, 3153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450560, 450560, 0, 0,\n  /* 55729 */ 450560, 450560, 450560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1799, 0, 0, 0, 0, 0, 0, 0, 0, 1806, 0,\n  /* 55757 */ 0, 0, 0, 0, 0, 0, 0, 0, 3165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3174, 521, 521, 521, 521, 521, 521,\n  /* 55786 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2882, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 55807 */ 521, 521, 521, 2892, 521, 521, 521, 521, 521, 3192, 521, 521, 3195, 521, 521, 521, 521, 521, 521, 521,\n  /* 55827 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3205, 521, 521, 521, 521, 521, 521, 521, 521, 2443, 521,\n  /* 55848 */ 521, 521, 521, 2448, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 55869 */ 521, 1906, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1940, 521, 521,\n  /* 55890 */ 521, 521, 521, 521, 1947, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 55911 */ 3214, 521, 521, 3217, 521, 521, 3220, 0, 0, 60565, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 55929 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58302, 57886, 57886, 57886, 57886, 0, 57909, 57909,\n  /* 55944 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57886, 57886, 57886, 57886, 60583,\n  /* 55959 */ 57886, 57886, 60586, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 55974 */ 57886, 57886, 57886, 57886, 57886, 57886, 60597, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59871,\n  /* 55989 */ 57886, 57886, 57886, 57886, 57886, 59877, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 56004 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 2962, 0, 57909, 57909, 57909, 57909, 57909,\n  /* 56020 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 0, 3431, 0, 0, 521, 521, 3436, 521, 521, 521,\n  /* 56039 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3453, 521, 3455, 521,\n  /* 56060 */ 521, 521, 521, 521, 521, 521, 1334, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 56081 */ 1358, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2419, 521, 521, 521, 521, 521, 521, 521, 521, 2426,\n  /* 56101 */ 521, 2428, 521, 2431, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2444, 521, 521, 521, 521, 521, 521,\n  /* 56121 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1392, 521, 521, 521, 521,\n  /* 56142 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3461, 521, 521, 3463, 521, 521, 521, 521, 521, 521, 521,\n  /* 56163 */ 521, 521, 521, 521, 57886, 57886, 60820, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 56179 */ 57886, 59378, 57886, 57886, 57886, 59384, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 56194 */ 59394, 57886, 57886, 57886, 57886, 59400, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 60888,\n  /* 56209 */ 57909, 57909, 60890, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 56224 */ 57936, 57936, 60904, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 3601, 521, 57886, 60948, 57886,\n  /* 56240 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, 521,\n  /* 56273 */ 521, 521, 521, 521, 3664, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886,\n  /* 56292 */ 57886, 57886, 57886, 57886, 61020, 61021, 57886, 57886, 57886, 57886, 61025, 61026, 57909, 57909, 61049,\n  /* 56307 */ 61050, 57909, 57909, 57909, 57909, 61054, 61055, 57909, 57909, 57909, 57909, 57909, 61059, 57909, 57909,\n  /* 56322 */ 57909, 57909, 57909, 57909, 57909, 57909, 61065, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 56337 */ 57909, 57909, 57909, 59960, 57909, 57909, 57909, 57909, 57909, 59966, 57909, 57909, 57909, 57909, 57909,\n  /* 56352 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60341, 57909, 57909, 57909, 57909, 57909,\n  /* 56367 */ 57909, 57909, 57909, 57909, 57909, 57909, 60353, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 61094,\n  /* 56382 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886,\n  /* 56398 */ 57886, 57886, 0, 0, 3764, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 2394, 521, 521, 521, 521,\n  /* 56422 */ 521, 521, 521, 521, 521, 521, 521, 2406, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3792,\n  /* 56443 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886,\n  /* 56462 */ 57886, 57886, 57886, 57886, 57886, 57886, 59849, 57886, 57886, 57886, 57886, 57886, 57886, 59854, 57886,\n  /* 56477 */ 59856, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60267, 57886,\n  /* 56492 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 56507 */ 57886, 57886, 57886, 61163, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 56522 */ 57909, 57909, 57909, 57886, 57886, 61154, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 56537 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 56552 */ 57909, 57909, 57909, 57909, 61173, 57886, 57886, 57886, 57886, 61242, 57886, 57886, 57886, 57886, 57886,\n  /* 56567 */ 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61258, 57909,\n  /* 56582 */ 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 61075, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 56597 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61087, 57936, 57936, 57936, 57936,\n  /* 56612 */ 57936, 57936, 57936, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 4137, 521, 4138, 521, 521, 521,\n  /* 56634 */ 57886, 57886, 57886, 57886, 57886, 57886, 0, 521, 521, 3949, 521, 521, 521, 521, 3954, 521, 521, 521, 521,\n  /* 56653 */ 3959, 521, 521, 57886, 57886, 61308, 57886, 57886, 57886, 57886, 61313, 57886, 57886, 57886, 57886, 61318,\n  /* 56669 */ 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 56684 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60873, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 56699 */ 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 58418, 57936, 57936,\n  /* 56716 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58969, 57936, 57936, 57936, 57936, 57936,\n  /* 56731 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 56746 */ 59012, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59029, 57936, 57909,\n  /* 56761 */ 57909, 61324, 57909, 57909, 57909, 57909, 61329, 57909, 57909, 57909, 57909, 61334, 57909, 57909, 57909,\n  /* 56776 */ 57936, 57936, 61340, 57936, 57936, 57936, 57936, 61345, 57936, 57936, 57936, 57936, 61350, 57936, 57936,\n  /* 56791 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58962, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 56806 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58986, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 56821 */ 521, 521, 521, 57886, 57886, 57886, 0, 3606, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1740,\n  /* 56848 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 61384, 57886, 57886, 61386, 57886,\n  /* 56870 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61398, 57909, 57909, 61400,\n  /* 56885 */ 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 3600, 521, 521, 60947, 57886, 57886, 0, 0, 0, 0,\n  /* 56903 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3617, 3618, 0, 0, 57936, 57936, 57936, 57936, 61412, 57936, 57936, 61414,\n  /* 56926 */ 57936, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886,\n  /* 56949 */ 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 56964 */ 57909, 57909, 60872, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 56979 */ 57909, 59449, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 56994 */ 57909, 57909, 57909, 57909, 57909, 58932, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0,\n  /* 57009 */ 57886, 57936, 57936, 57936, 57936, 61533, 57936, 57936, 57936, 0, 0, 0, 521, 521, 521, 521, 521, 521,\n  /* 57027 */ 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936,\n  /* 57042 */ 57936, 57936, 57936, 0, 0, 0, 521, 4195, 521, 521, 521, 521, 57886, 61543, 57886, 57886, 57886, 57886,\n  /* 57060 */ 57909, 61547, 57909, 57909, 57909, 57909, 57936, 61551, 57936, 57936, 57936, 57936, 0, 0, 0, 521, 521,\n  /* 57077 */ 4196, 4197, 521, 521, 57886, 57886, 61544, 61545, 57886, 57886, 57909, 57909, 61548, 61549, 57909, 57909,\n  /* 57093 */ 57936, 57936, 61552, 61553, 57936, 57936, 0, 57886, 57909, 57936, 4232, 61577, 61578, 61579, 521, 57886,\n  /* 57109 */ 57909, 57936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1261, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 57141 */ 0, 0, 0, 0, 0, 344, 345, 346, 347, 348, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367,\n  /* 57172 */ 0, 295, 0, 0, 0, 0, 0, 245760, 245760, 245760, 245760, 245760, 245760, 0, 0, 0, 0, 0, 0, 0, 245760,\n  /* 57193 */ 245760, 245760, 0, 0, 0, 0, 139264, 147456, 245760, 245760, 0, 0, 245760, 0, 0, 0, 245760, 245760, 0, 0,\n  /* 57213 */ 0, 0, 0, 0, 245760, 0, 0, 0, 0, 0, 0, 245760, 0, 0, 245760, 0, 0, 245760, 0, 0, 245760, 0, 245760, 245760,\n  /* 57237 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 737, 0, 0, 0,\n  /* 57271 */ 348, 347, 131072, 346, 347, 347, 348, 346, 347, 0, 346, 347, 450, 457, 474, 474, 474, 485, 485, 485, 491,\n  /* 57292 */ 485, 485, 491, 491, 485, 491, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506,\n  /* 57313 */ 534, 57900, 534, 57900, 534, 534, 57900, 534, 534, 57923, 57900, 534, 534, 57900, 57900, 57900, 57923,\n  /* 57330 */ 57900, 57900, 57900, 57900, 57900, 57900, 57900, 57923, 57923, 57900, 57900, 57950, 57900, 57900, 57900,\n  /* 57345 */ 57900, 57900, 57900, 57900, 57950, 57950, 57900, 57900, 57900, 57900, 57950, 57950, 57900, 534, 57900,\n  /* 57360 */ 57900, 57900, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0,\n  /* 57385 */ 639, 0, 0, 0, 0, 644, 645, 646, 647, 648, 649, 650, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 665, 666, 0,\n  /* 57414 */ 668, 669, 0, 0, 0, 0, 0, 675, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 57439 */ 521, 521, 521, 521, 1881, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1375, 521, 521, 521, 521, 521,\n  /* 57460 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1914, 521, 521, 521, 521,\n  /* 57481 */ 521, 521, 521, 521, 521, 521, 709, 0, 0, 712, 0, 714, 0, 716, 0, 0, 0, 0, 0, 0, 0, 0, 0, 726, 0, 0, 0, 0,\n  /* 57509 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 499712, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144,\n  /* 57529 */ 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 0,\n  /* 57542 */ 0, 0, 0, 0, 0, 0, 0, 0, 301, 0, 302, 305, 0, 306, 4857856, 4874240, 0, 0, 4923392, 0, 0, 0, 0, 757, 0, 0,\n  /* 57568 */ 778, 0, 0, 0, 0, 0, 0, 0, 0, 0, 785, 0, 0, 0, 0, 0, 796, 0, 0, 685, 0, 0, 0, 757, 0, 0, 0, 0, 0, 278528,\n  /* 57598 */ 278528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1176, 0, 0, 0, 0, 0,\n  /* 57631 */ 685, 816, 816, 0, 0, 0, 0, 0, 521, 521, 836, 840, 843, 521, 852, 521, 521, 521, 868, 870, 873, 521, 521,\n  /* 57654 */ 521, 886, 890, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 57671 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60871, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 57686 */ 57909, 57909, 57909, 57909, 57909, 57909, 58892, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 57701 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60372, 57909, 57909, 57936, 57936,\n  /* 57716 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58255, 58259, 58262, 57886, 58271, 57886,\n  /* 57731 */ 57886, 57886, 58287, 58289, 58292, 57886, 57886, 57886, 58305, 58309, 57886, 57886, 57886, 0, 57909,\n  /* 57746 */ 57909, 57909, 58331, 58335, 58338, 57909, 58347, 57909, 57909, 57909, 58363, 58365, 58368, 57909, 57909,\n  /* 57761 */ 57909, 58381, 58385, 57909, 57909, 57909, 0, 0, 0, 0, 58396, 57936, 57936, 57936, 58406, 58410, 58413,\n  /* 57778 */ 57936, 58422, 57936, 57936, 57936, 58438, 58440, 58443, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 57793 */ 57936, 57936, 58963, 57936, 57936, 57936, 57936, 58973, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 57808 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58989, 57936, 58456, 58460, 57936, 57936, 57936,\n  /* 57823 */ 836, 1127, 521, 886, 890, 1131, 0, 58476, 58255, 57886, 58305, 58309, 58481, 155941, 1138, 0, 0, 0, 0, 0,\n  /* 57843 */ 0, 0, 0, 0, 0, 0, 0, 540672, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139264, 147456, 0, 0, 540672, 0, 0,\n  /* 57871 */ 1366, 521, 521, 1370, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1381, 521, 521, 1388, 521,\n  /* 57891 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 1402, 521, 521, 521, 0, 2895, 0, 0, 0, 0, 57886, 57886,\n  /* 57912 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60248, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 57927 */ 57886, 57886, 57886, 57886, 60256, 57886, 521, 521, 521, 58754, 901, 57886, 57886, 57886, 57886, 57886,\n  /* 57943 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 57958 */ 57886, 57886, 57886, 57886, 57886, 57886, 58795, 57886, 57886, 57886, 58798, 57886, 57886, 57886, 57886,\n  /* 57973 */ 57886, 57886, 57886, 58805, 57886, 57886, 58809, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 57988 */ 57886, 57886, 57886, 58820, 57886, 57886, 58827, 57886, 57886, 57886, 57886, 57886, 59897, 57886, 57886,\n  /* 58003 */ 57886, 57886, 0, 0, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 58020 */ 57909, 59918, 57909, 57909, 59921, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58885, 57909, 57909,\n  /* 58035 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58898, 57909, 57909, 57909, 57909,\n  /* 58050 */ 58903, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59480, 57909, 57909, 57909,\n  /* 58065 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 58080 */ 57909, 57909, 57886, 57936, 57936, 58994, 57936, 57936, 58998, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 58095 */ 57936, 57936, 57936, 57936, 57936, 59010, 57936, 57936, 59017, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 58110 */ 57936, 57936, 57936, 57936, 59031, 521, 1894, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1903, 521,\n  /* 58129 */ 521, 521, 1907, 521, 521, 1912, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2447, 521,\n  /* 58149 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2458, 521, 521, 521, 521, 521, 58754, 0,\n  /* 58170 */ 57886, 59308, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59315, 57886, 57886, 57886, 57886, 57886,\n  /* 58185 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61164,\n  /* 58200 */ 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59337, 57886,\n  /* 58215 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59346, 57886, 57886, 57886, 59350, 57886,\n  /* 58230 */ 57886, 59355, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 58245 */ 61160, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 61168, 57909,\n  /* 58260 */ 57909, 57909, 57909, 57909, 50657, 0, 57909, 59408, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 58275 */ 59415, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 58290 */ 57909, 57909, 57909, 57909, 57909, 59437, 57936, 59504, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 58305 */ 59511, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 58320 */ 57936, 57936, 57936, 57936, 57936, 59533, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60681,\n  /* 58335 */ 57936, 57936, 60684, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 58350 */ 57936, 57936, 57936, 57936, 57936, 57936, 60695, 57936, 0, 0, 0, 0, 2305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 58374 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 352256, 352256, 352256, 352256, 521, 521, 521, 2438,\n  /* 58399 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 58420 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 2865, 521, 2794, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 58447 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2381, 2894, 521, 521, 0, 0, 0, 2896, 0, 1961, 57886,\n  /* 58474 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 58489 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59393, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 58504 */ 57886, 0, 2061, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 58520 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 58535 */ 57909, 57909, 59974, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 60437, 57936, 57936,\n  /* 58550 */ 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 58575 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1727, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 3789, 521, 521, 521, 521, 521,\n  /* 58602 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 61146, 57886, 57886, 57886, 57886, 57886,\n  /* 58621 */ 57886, 57886, 61151, 57886, 61239, 57886, 57886, 57886, 57886, 57886, 61245, 57886, 57886, 57886, 57886,\n  /* 58636 */ 57909, 57909, 57909, 61251, 57909, 57909, 57909, 57909, 61255, 57909, 57909, 57909, 57909, 57909, 61261,\n  /* 58651 */ 57909, 57909, 57909, 57909, 57936, 0, 0, 4166, 0, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886,\n  /* 58670 */ 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936,\n  /* 58685 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59577, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 58700 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521,\n  /* 58716 */ 57886, 57886, 57886, 0, 0, 0, 0, 3766, 0, 0, 0, 0, 0, 3769, 57936, 57936, 61267, 57936, 57936, 57936,\n  /* 58736 */ 57936, 61271, 57936, 57936, 57936, 57936, 57936, 61277, 57936, 57936, 57936, 57936, 521, 57886, 0, 0, 0,\n  /* 58753 */ 0, 0, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 58778 */ 521, 1880, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1891, 521, 0, 521, 521, 521, 521, 521, 3952, 521,\n  /* 58799 */ 521, 521, 3956, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 61311, 57886, 57886, 57886,\n  /* 58816 */ 61315, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61387, 57909, 57909, 57909, 57909, 57909,\n  /* 58831 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61401, 57936, 57936, 57936, 57936,\n  /* 58846 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60043, 57936, 57936, 57936, 57936, 57936, 60049, 57936,\n  /* 58861 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521,\n  /* 58876 */ 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 57909, 57909, 57909, 57909, 57909, 61327,\n  /* 58898 */ 57909, 57909, 57909, 61331, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936,\n  /* 58913 */ 61343, 57936, 57936, 57936, 61347, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 58928 */ 57936, 61102, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 58950 */ 728, 0, 788, 0, 0, 0, 0, 0, 0, 0, 0, 788, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 57886,\n  /* 58978 */ 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 0, 521, 521, 57886, 57886,\n  /* 58994 */ 57909, 57909, 57936, 57936, 521, 57886, 57909, 57936, 4228, 61573, 61574, 61575, 521, 57886, 57909, 57936,\n  /* 59010 */ 521, 57886, 57909, 57936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1742, 0, 0, 0, 0,\n  /* 59040 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 391, 0, 0, 0, 395, 391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 59073 */ 0, 0, 0, 0, 0, 363, 364, 365, 366, 0, 0, 367, 0, 295, 0, 0, 349, 0, 407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 59102 */ 407, 0, 0, 0, 0, 0, 0, 407, 0, 349, 0, 139264, 147456, 0, 0, 0, 0, 0, 0, 0, 3643, 0, 521, 521, 521, 521,\n  /* 59128 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2887, 521,\n  /* 59149 */ 521, 521, 521, 521, 521, 521, 521, 521, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 442, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 59177 */ 0, 0, 0, 0, 0, 0, 0, 0, 500, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507,\n  /* 59201 */ 535, 57901, 535, 57901, 535, 535, 57901, 535, 535, 57924, 57901, 535, 535, 57901, 57901, 57901, 57924,\n  /* 59218 */ 57901, 57901, 57901, 57901, 57901, 57901, 57901, 57924, 57924, 57901, 57901, 57951, 57901, 57901, 57901,\n  /* 59233 */ 57901, 57901, 57901, 57901, 57951, 57951, 57901, 57901, 57901, 57901, 57951, 57951, 57901, 616, 57901,\n  /* 59248 */ 57967, 57967, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0,\n  /* 59273 */ 0, 0, 0, 0, 0, 0, 0, 0, 2351104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1228, 0, 0,\n  /* 59305 */ 0, 0, 0, 0, 0, 0, 1237, 0, 0, 0, 672, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 59339 */ 0, 0, 0, 0, 0, 0, 0, 2300, 0, 57909, 57909, 58372, 57909, 57909, 57909, 57909, 58390, 57909, 57909, 0, 0,\n  /* 59360 */ 0, 0, 57886, 57936, 57936, 58400, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 59376 */ 57936, 58447, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60917, 57936, 57936, 57936, 57936,\n  /* 59391 */ 57936, 57936, 57936, 57936, 60925, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 59406 */ 57936, 57936, 57936, 57936, 521, 521, 57886, 57886, 0, 0, 0, 0, 0, 3864, 0, 0, 0, 0, 0, 3627, 0, 0, 57936,\n  /* 59429 */ 57936, 58465, 57936, 57936, 521, 521, 521, 521, 521, 521, 0, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 59446 */ 155941, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2311, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 59478 */ 2325, 0, 0, 0, 0, 1242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 59510 */ 0, 0, 0, 0, 367, 367, 0, 0, 0, 0, 1203, 1161, 0, 0, 0, 0, 0, 0, 1273, 1160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 59540 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 318, 0, 0, 0, 521, 521, 521, 58754, 901, 57886,\n  /* 59568 */ 57886, 57886, 58760, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58774, 57886, 57886,\n  /* 59583 */ 57886, 57886, 58784, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59873, 59874, 57886,\n  /* 59598 */ 57886, 57886, 57886, 57886, 57886, 59881, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 59613 */ 57886, 57886, 57886, 57886, 57886, 0, 0, 977, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 59629 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58929, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 59644 */ 57909, 57909, 57909, 0, 57886, 57936, 57936, 57936, 57936, 57909, 57909, 57909, 58879, 57909, 57909,\n  /* 59659 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58895, 57909,\n  /* 59674 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60656, 57909, 57909,\n  /* 59689 */ 60659, 57909, 57909, 60662, 60663, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 59704 */ 57936, 0, 0, 0, 1756, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 59737 */ 337, 0, 0, 0, 1785, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1800, 0, 0, 0, 0, 0, 0, 0, 1243, 0, 0, 0,\n  /* 59769 */ 0, 0, 0, 0, 0, 2286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1173, 0, 0, 0,\n  /* 59802 */ 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 2418, 521, 521, 521, 521, 521, 521, 2423, 521, 2425,\n  /* 59824 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1379, 521, 521, 521, 521, 521,\n  /* 59845 */ 521, 521, 1393, 521, 521, 521, 521, 521, 521, 521, 521, 1405, 521, 521, 2869, 521, 521, 521, 521, 521,\n  /* 59865 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 59886 */ 521, 521, 521, 521, 2435, 2436, 57936, 57936, 57936, 57936, 57936, 57936, 60411, 57936, 57936, 57936,\n  /* 59902 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 59917 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59529, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0,\n  /* 59934 */ 3432, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 59955 */ 521, 521, 521, 521, 521, 521, 521, 521, 1398, 521, 521, 521, 521, 521, 0, 3872, 0, 0, 0, 0, 0, 521, 3875,\n  /* 59978 */ 521, 521, 3877, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 61234, 57886,\n  /* 59997 */ 57886, 61236, 57886, 57886, 57886, 57886, 57886, 60263, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 60012 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 60027 */ 57886, 57886, 57886, 57886, 60279, 57886, 57886, 57886, 57886, 57886, 61266, 57936, 57936, 61268, 57936,\n  /* 60042 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 57886, 0,\n  /* 60058 */ 0, 0, 0, 0, 0, 0, 0, 3627, 0, 3944, 0, 0, 0, 0, 0, 417792, 0, 417792, 0, 0, 0, 0, 309, 0, 0, 0, 0, 0,\n  /* 60086 */ 417792, 0, 417792, 0, 0, 0, 0, 139264, 147456, 417792, 0, 0, 0, 417792, 0, 0, 0, 0, 417792, 0, 0, 0, 0, 0,\n  /* 60110 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 417792, 0, 0, 417792, 0, 0, 417792, 0, 417792, 418100, 3946, 521, 521,\n  /* 60134 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 60153 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59383, 57886, 57886, 57886, 57886,\n  /* 60168 */ 57886, 57886, 59391, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 787, 0, 0, 0,\n  /* 60185 */ 0, 0, 0, 0, 0, 0, 0, 787, 0, 787, 0, 0, 0, 0, 0, 0, 0, 0, 787, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1160, 0, 0, 0,\n  /* 60217 */ 0, 1165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 460, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2335231,\n  /* 60248 */ 2335197, 2335231, 2335231, 57886, 57886, 57886, 58266, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 60262 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 60277 */ 58342, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60891, 57909, 60893, 57909,\n  /* 60292 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 60307 */ 57936, 57936, 57936, 57936, 57936, 60019, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 60322 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60025, 57936, 57936, 57936, 57936,\n  /* 60337 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 58754, 1962, 57886, 57886, 57886, 57886,\n  /* 60352 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 60367 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 2557, 2962, 0, 0, 50657, 2062,\n  /* 60383 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 60398 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 60413 */ 61068, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 60408, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 60428 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 60443 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59021, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 60458 */ 57886, 61028, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 60473 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909,\n  /* 60488 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 0, 0, 350, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 60511 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 345, 0, 0, 0, 0, 0, 352, 350, 131072, 0, 350, 350,\n  /* 60541 */ 352, 0, 350, 0, 0, 350, 352, 350, 0, 0, 0, 350, 350, 350, 350, 350, 350, 350, 350, 498, 350, 350, 350,\n  /* 60564 */ 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 536, 57902, 536, 57902, 536, 536, 57902, 536,\n  /* 60584 */ 536, 57925, 57902, 536, 536, 57902, 57902, 57902, 57925, 57902, 57902, 57902, 57902, 57902, 57902, 57902,\n  /* 60600 */ 57925, 57925, 57902, 57902, 57952, 57902, 57902, 57902, 57902, 57902, 57902, 57902, 57952, 57952, 57902,\n  /* 60615 */ 57902, 57902, 57902, 57952, 57952, 57902, 536, 57902, 57902, 57902, 1, 24578, 3, 155941, 155941, 295, 0,\n  /* 60632 */ 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2751, 0, 0, 0, 0, 0, 0, 0,\n  /* 60664 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 791, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 674, 0, 0, 0, 0, 0, 0,\n  /* 60697 */ 673, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 798, 799, 0, 0, 0, 0, 0, 0, 0, 521, 521, 837, 521,\n  /* 60727 */ 521, 521, 853, 857, 521, 521, 521, 521, 521, 878, 880, 521, 521, 891, 521, 521, 521, 57886, 57886, 58250,\n  /* 60747 */ 0, 751, 0, 0, 804, 0, 0, 0, 0, 0, 804, 0, 657, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 819, 0, 0, 0, 0, 0, 0,\n  /* 60779 */ 0, 521, 521, 521, 521, 521, 521, 3879, 521, 521, 521, 521, 521, 521, 3885, 521, 521, 521, 521, 57886,\n  /* 60799 */ 57886, 57886, 57886, 57886, 57886, 61238, 58256, 57886, 57886, 57886, 58272, 58276, 57886, 57886, 57886,\n  /* 60814 */ 57886, 57886, 58297, 58299, 57886, 57886, 58310, 57886, 57886, 57886, 0, 57909, 57909, 58326, 58332,\n  /* 60829 */ 57909, 57909, 57909, 58348, 58352, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61330, 57909,\n  /* 60844 */ 61332, 61333, 57909, 61335, 57909, 61337, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61346,\n  /* 60859 */ 57936, 61348, 61349, 57936, 61351, 57936, 61353, 57909, 57909, 58373, 58375, 57909, 57909, 58386, 57909,\n  /* 60874 */ 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 58401, 58407, 57936, 57936, 57936, 58423, 58427, 57936,\n  /* 60891 */ 57936, 57936, 57936, 57936, 58448, 58450, 57936, 0, 4165, 0, 4167, 521, 521, 521, 521, 521, 521, 521,\n  /* 60909 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 60924 */ 57909, 57936, 57936, 57936, 57936, 57936, 521, 1695, 521, 1697, 521, 521, 59044, 57886, 57886, 59046,\n  /* 60940 */ 57886, 57886, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1720, 0, 0, 57936, 58461, 57936, 57936, 57936, 837,\n  /* 60963 */ 521, 880, 521, 891, 521, 0, 57886, 58256, 58299, 57886, 58310, 57886, 155941, 1138, 0, 301, 0, 0, 305, 0,\n  /* 60983 */ 0, 0, 0, 0, 0, 0, 0, 2309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3396,\n  /* 61016 */ 0, 0, 0, 0, 0, 0, 0, 1208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1222, 0, 1224, 0, 0, 0, 0, 1229, 0, 0,\n  /* 61047 */ 0, 0, 1234, 0, 0, 0, 0, 0, 0, 0, 3874, 521, 521, 521, 521, 3878, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 61071 */ 521, 3887, 521, 521, 61233, 57886, 57886, 57886, 57886, 61237, 57886, 1406, 521, 521, 58754, 901, 57886,\n  /* 61088 */ 57886, 57886, 57886, 58761, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 61103 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58792, 58794, 57886, 57886, 57886, 57886, 58273,\n  /* 61118 */ 58277, 58283, 57886, 58288, 57886, 57886, 57886, 57886, 57886, 58306, 57886, 57886, 57886, 57886, 0,\n  /* 61133 */ 57909, 57909, 58328, 57909, 57909, 57909, 57909, 58349, 58353, 58359, 57909, 58364, 57886, 58832, 57886,\n  /* 61148 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58844, 58845, 57886, 57886, 50657, 58754, 977, 57909,\n  /* 61163 */ 57909, 57909, 57909, 58856, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 0, 0,\n  /* 61180 */ 0, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 58415, 57936, 57936, 58431, 57936, 57936, 57936,\n  /* 61195 */ 57936, 57936, 57936, 57936, 57909, 57909, 57909, 57909, 57909, 58913, 57909, 57909, 57909, 57909, 57909,\n  /* 61210 */ 57909, 57909, 58927, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58939, 58940, 57909, 57909,\n  /* 61225 */ 0, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59512, 57936, 57936,\n  /* 61240 */ 57936, 57936, 57936, 57936, 57936, 57936, 59523, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 61255 */ 57936, 57936, 57936, 57936, 57936, 57936, 60021, 57936, 57936, 57936, 57936, 57936, 57936, 60026, 57936,\n  /* 61270 */ 60028, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58950, 57936, 57936, 57936, 57936, 57936,\n  /* 61285 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58981,\n  /* 61300 */ 58983, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61202, 57936,\n  /* 61315 */ 521, 521, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3781, 0, 0,\n  /* 61344 */ 0, 0, 0, 0, 521, 521, 521, 521, 57936, 59034, 59035, 57936, 57936, 521, 521, 1696, 521, 521, 1699, 57886,\n  /* 61364 */ 57886, 59045, 57886, 57886, 59048, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2774, 0, 0, 0, 0, 0, 0,\n  /* 61391 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 730, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1789, 0, 0, 0,\n  /* 61425 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 507904, 507904, 507904, 507904,\n  /* 61454 */ 0, 1773, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1855, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 61486 */ 2825, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 2837, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 61510 */ 521, 1895, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 61531 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1955, 521, 521, 521, 58754, 0, 57886, 57886, 57886,\n  /* 61550 */ 57886, 57886, 57886, 57886, 59313, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 61565 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58813, 57886, 58815, 57886,\n  /* 61580 */ 57886, 57886, 57886, 57886, 57886, 57886, 58828, 57886, 57886, 57886, 59338, 57886, 57886, 57886, 57886,\n  /* 61595 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 61610 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59399, 57886, 57886, 57886, 50657,\n  /* 61625 */ 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59413, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 61640 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 61655 */ 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60909, 57936, 57936, 57909, 59438, 57909, 57909,\n  /* 61670 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 61685 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 57886,\n  /* 61700 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59509, 57936, 57936, 57936,\n  /* 61715 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 61730 */ 57936, 57936, 57936, 57936, 57936, 59534, 0, 0, 0, 2332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 61756 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 0, 0, 0, 0, 0, 2358, 0, 2360, 2361, 2362, 0, 2364, 0, 0, 0, 0,\n  /* 61786 */ 0, 0, 0, 0, 0, 0, 2372, 0, 0, 0, 0, 2377, 2378, 0, 0, 0, 0, 0, 0, 0, 49716, 49716, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 61816 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327680, 327680, 327680, 327680, 2382, 0, 0, 0, 0, 0, 0, 0, 2388, 521,\n  /* 61841 */ 521, 521, 521, 521, 521, 2395, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 61862 */ 521, 1905, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1918, 521, 521, 521, 521, 521, 521, 521,\n  /* 61883 */ 521, 521, 2439, 521, 521, 521, 521, 521, 2445, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 61904 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 3801, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 61922 */ 57886, 57886, 0, 0, 0, 0, 2745, 2746, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 61953 */ 0, 0, 0, 0, 2359296, 367, 0, 0, 0, 521, 521, 2843, 521, 521, 521, 521, 521, 2848, 521, 521, 521, 521, 521,\n  /* 61976 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2864, 521, 521, 521, 0, 2895,\n  /* 61997 */ 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60247, 57886, 57886, 57886, 57886,\n  /* 62014 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 50657, 58754, 977, 57909, 57909,\n  /* 62029 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59487, 59488,\n  /* 62044 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57886,\n  /* 62059 */ 57936, 57936, 57936, 57936, 57936, 60384, 57936, 57936, 57936, 57936, 57936, 60389, 57936, 57936, 57936,\n  /* 62074 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 62089 */ 57936, 57936, 59016, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60405,\n  /* 62104 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 62119 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 62134 */ 57936, 60033, 57936, 57936, 57936, 57936, 57936, 57936, 61269, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 62149 */ 57936, 57936, 57936, 61278, 57936, 57936, 57936, 521, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 0, 0, 0,\n  /* 62172 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3446, 521, 521, 521, 521, 521, 521,\n  /* 62193 */ 521, 521, 521, 521, 521, 521, 1937, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 62214 */ 521, 521, 521, 521, 521, 1385, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 62235 */ 57936, 61534, 57936, 57936, 4192, 0, 4194, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886,\n  /* 62252 */ 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 0, 4193,\n  /* 62268 */ 0, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909,\n  /* 62285 */ 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 0, 4211, 0, 521, 521, 521, 521, 57886, 57886,\n  /* 62302 */ 57886, 57886, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 0, 521, 521, 57886, 57886, 57909,\n  /* 62318 */ 57909, 57936, 57936, 521, 57886, 57909, 57936, 521, 521, 521, 521, 521, 521, 521, 1335, 521, 521, 521,\n  /* 62336 */ 521, 1345, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1361, 521, 521, 521,\n  /* 62357 */ 0, 0, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60246, 57886, 57886, 57886, 57886,\n  /* 62375 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 57909, 57909,\n  /* 62392 */ 57909, 57909, 59911, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 62407 */ 57909, 58926, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0,\n  /* 62422 */ 57886, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 370, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 62450 */ 0, 0, 378, 0, 0, 0, 0, 370, 0, 0, 0, 0, 0, 4358144, 4358144, 4358144, 4825088, 4358144, 4358144, 4358144,\n  /* 62470 */ 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144,\n  /* 62481 */ 4358144, 4358144, 4358144, 4358144, 4358144, 5177344, 4358144, 4358144, 4358144, 0, 0, 0, 0, 0, 0, 302, 0,\n  /* 62498 */ 0, 0, 302, 0, 0, 306, 0, 0, 0, 306, 0, 0, 0, 4931584, 0, 0, 0, 0, 0, 0, 0, 0, 747, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 62529 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 771, 0, 387, 0, 353, 0, 0, 0, 0, 0, 396, 397, 0, 398, 0, 0, 0, 0,\n  /* 62560 */ 0, 0, 0, 0, 0, 0, 0, 398, 0, 0, 403, 0, 0, 0, 0, 0, 0, 0, 557056, 557056, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 62591 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3129, 0, 0, 0, 0, 0, 0, 0, 370, 378, 406, 0, 0, 0, 370, 0, 0, 353,\n  /* 62622 */ 0, 0, 0, 370, 0, 409, 411, 0, 370, 398, 0, 0, 370, 378, 0, 139264, 147456, 398, 409, 0, 0, 409, 0, 0, 0,\n  /* 62647 */ 432, 131072, 0, 432, 432, 0, 0, 432, 0, 411, 432, 0, 458, 0, 0, 0, 486, 486, 486, 486, 486, 486, 486, 486,\n  /* 62671 */ 486, 486, 508, 508, 508, 508, 520, 508, 508, 508, 520, 508, 508, 508, 508, 508, 508, 537, 57903, 537,\n  /* 62691 */ 57903, 537, 537, 57903, 537, 537, 57926, 57903, 537, 537, 57903, 57903, 57903, 57926, 57903, 57903, 57903,\n  /* 62708 */ 57903, 57903, 57903, 57903, 57926, 57926, 57903, 57903, 57953, 57903, 57903, 57903, 57903, 57903, 57903,\n  /* 62723 */ 57903, 57953, 57953, 57903, 57903, 57903, 57903, 57953, 57953, 57903, 617, 57903, 57968, 57968, 1, 24578,\n  /* 62739 */ 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 636, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 62767 */ 0, 4017, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 61374, 57886, 57886, 57886,\n  /* 62787 */ 57886, 57886, 57886, 0, 0, 774, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 793, 0, 0, 0, 0, 0,\n  /* 62817 */ 0, 0, 774, 0, 0, 0, 0, 0, 1276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 62850 */ 0, 0, 3625, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 305, 0, 0, 0, 0, 0, 0, 305, 0, 0, 0,\n  /* 62883 */ 0, 0, 0, 0, 793, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 687, 0, 0, 0, 774, 0, 0, 0, 0, 793, 0, 0, 0, 0, 0, 0, 0,\n  /* 62916 */ 793, 0, 0, 0, 0, 774, 0, 793, 0, 521, 832, 521, 521, 521, 521, 521, 521, 863, 865, 521, 521, 521, 521,\n  /* 62939 */ 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 58251, 1151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1164, 0,\n  /* 62964 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 62997 */ 1182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1207, 1296,\n  /* 63028 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1290, 1316, 1317, 0, 1290, 521, 521, 521,\n  /* 63057 */ 521, 521, 521, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 59822, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 63075 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 59907, 57909,\n  /* 63092 */ 57909, 57909, 57909, 57909, 57909, 57909, 59915, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 63107 */ 57909, 521, 1325, 521, 521, 521, 1329, 521, 521, 1340, 521, 521, 1344, 521, 521, 521, 521, 521, 521, 521,\n  /* 63127 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1363, 521, 521, 521, 0, 2895, 0, 0, 0, 0, 57886, 57886,\n  /* 63149 */ 57886, 57886, 57886, 57886, 60245, 57886, 57886, 57886, 57886, 60249, 57886, 57886, 57886, 57886, 57886,\n  /* 63164 */ 57886, 57886, 57886, 57886, 57886, 57886, 58294, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0,\n  /* 63179 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59483, 57909,\n  /* 63194 */ 57909, 57909, 57909, 57909, 57909, 59491, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 63209 */ 57909, 57886, 521, 1367, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 63229 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2893, 521, 521, 521, 58754,\n  /* 63249 */ 901, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58764, 57886, 57886, 57886, 58768, 57886, 57886,\n  /* 63264 */ 58779, 57886, 57886, 58783, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60588,\n  /* 63279 */ 60589, 57886, 57886, 57886, 57886, 60592, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 63294 */ 57886, 57886, 60598, 57886, 57886, 57886, 57909, 57909, 58878, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 63309 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58897, 57909, 57909, 57909,\n  /* 63324 */ 58901, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60367, 57909, 57909,\n  /* 63339 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 63354 */ 57936, 57936, 57936, 57936, 59515, 57936, 57936, 57936, 57936, 59521, 57936, 57936, 57936, 57936, 57936,\n  /* 63369 */ 57936, 57936, 57936, 57936, 57936, 59532, 57936, 57936, 57936, 57936, 57936, 57936, 58953, 57936, 57936,\n  /* 63384 */ 57936, 58957, 57936, 57936, 58968, 57936, 57936, 58972, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 63399 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58991, 57936, 57936, 57936, 58995,\n  /* 63414 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 63429 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60399, 57936,\n  /* 63444 */ 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 1726, 1727, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 63469 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 516560, 516560, 516560, 516560, 0, 1786, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 63497 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1808, 0, 0, 0, 0, 0, 5111808, 0, 0, 0, 0, 0,\n  /* 63529 */ 5283840, 0, 0, 0, 0, 5472256, 5521408, 0, 0, 0, 0, 5595136, 5709824, 5718016, 0, 5824512, 5865472, 0, 0,\n  /* 63548 */ 5922816, 0, 0, 6021120, 0, 521, 58754, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 63565 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59324, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 63580 */ 57886, 57886, 57886, 57886, 57886, 60837, 57886, 60839, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 63595 */ 60846, 57886, 57886, 60848, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 50657, 0, 57909, 57909,\n  /* 63610 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 63625 */ 59424, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61181,\n  /* 63640 */ 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 63655 */ 57936, 57936, 57936, 60047, 57936, 57936, 57936, 57936, 60052, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 63670 */ 57936, 57936, 57936, 57936, 57936, 57909, 57909, 57909, 57909, 57909, 59442, 59443, 57909, 57909, 57909,\n  /* 63685 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 63700 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 60907, 57936, 57936,\n  /* 63715 */ 57936, 57936, 57936, 57936, 57936, 59538, 59539, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 63730 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 63745 */ 57936, 57936, 57936, 57936, 59556, 57936, 57936, 57936, 57936, 57936, 57936, 59563, 57936, 57936, 521,\n  /* 63760 */ 521, 521, 59324, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 63787 */ 0, 0, 0, 0, 0, 139264, 147456, 0, 0, 318, 0, 0, 0, 0, 0, 2384, 0, 0, 2387, 0, 521, 521, 2390, 521, 521,\n  /* 63812 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886,\n  /* 63832 */ 57886, 57886, 57886, 57886, 60823, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59867, 59868, 57886,\n  /* 63847 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59879, 57886, 57886, 57886,\n  /* 63862 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59891, 57909, 57909,\n  /* 63877 */ 57909, 57909, 57909, 59956, 59957, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 63892 */ 57909, 57909, 59968, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 63907 */ 58891, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 63922 */ 57909, 57909, 57909, 57909, 57909, 59457, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 63937 */ 57909, 57909, 57909, 57909, 57909, 57909, 59980, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 63952 */ 57909, 57909, 57936, 57936, 59992, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 63967 */ 57936, 57936, 57936, 57936, 57936, 521, 521, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3868, 3627, 0, 0,\n  /* 63990 */ 57936, 57936, 57936, 57936, 57936, 60039, 60040, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 64005 */ 57936, 57936, 57936, 57936, 60051, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 64020 */ 57936, 57936, 57936, 57936, 60705, 57936, 57936, 60708, 57936, 57936, 60711, 3368, 521, 521, 60715, 57886,\n  /* 64036 */ 57886, 0, 0, 0, 0, 0, 57936, 57936, 57936, 60063, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 64054 */ 57936, 57936, 521, 521, 521, 2732, 2733, 57886, 57886, 57886, 60081, 60082, 0, 0, 1710, 0, 0, 1717, 0, 0,\n  /* 64074 */ 0, 0, 0, 1728, 1729, 0, 0, 0, 0, 0, 1735, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 360,\n  /* 64105 */ 361, 0, 0, 0, 0, 0, 0, 0, 367, 0, 295, 0, 0, 0, 0, 2821, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2827, 0, 0, 0, 0, 0,\n  /* 64136 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 64157 */ 521, 521, 521, 521, 521, 521, 521, 521, 2460, 521, 2462, 57886, 60286, 57886, 57886, 57886, 57886, 57886,\n  /* 64175 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 64190 */ 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 64207 */ 57909, 57909, 57909, 57909, 57909, 57909, 59919, 57909, 57909, 57909, 57909, 57936, 60406, 57936, 57936,\n  /* 64222 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60418, 57936, 57936, 57936, 57936, 57936,\n  /* 64237 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59011, 57936,\n  /* 64252 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521,\n  /* 64268 */ 521, 3194, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 64289 */ 521, 521, 3207, 521, 521, 521, 521, 521, 521, 0, 0, 0, 0, 59818, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 64309 */ 57886, 59826, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 64324 */ 60590, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 64339 */ 57886, 57886, 57886, 57886, 57886, 0, 0, 57909, 60615, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 64355 */ 57909, 57909, 57909, 57909, 60648, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 64370 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 64385 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60002, 57936, 57936, 57936, 57936, 57936, 60697, 57936,\n  /* 64400 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 64415 */ 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 6152192, 0, 0, 0, 6316032,\n  /* 64436 */ 0, 196608, 0, 0, 5816320, 6291456, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2754, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 64465 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57936, 57936, 57936, 57936,\n  /* 64493 */ 57936, 61097, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 3760, 57886, 57886,\n  /* 64509 */ 61106, 3763, 0, 0, 0, 0, 3767, 0, 0, 0, 0, 0, 0, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 0, 0,\n  /* 64534 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1167, 0, 0, 0, 0, 1171, 0, 0, 1174, 0, 0, 0, 0, 0, 0, 0, 521,\n  /* 64565 */ 521, 521, 3788, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 64586 */ 521, 57886, 57886, 57886, 61147, 57886, 57886, 57886, 61150, 57886, 57886, 57886, 57886, 58274, 57886,\n  /* 64601 */ 57886, 57886, 57886, 57886, 58293, 57886, 57886, 57886, 57886, 58311, 57886, 57886, 57886, 0, 57909,\n  /* 64616 */ 57909, 57909, 57909, 57909, 57909, 57909, 58350, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 64631 */ 57909, 59478, 57909, 57909, 57909, 59484, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 64646 */ 59494, 57909, 57909, 57909, 57909, 59500, 57909, 57909, 57886, 57886, 57886, 57886, 61241, 57886, 61243,\n  /* 64661 */ 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 64676 */ 57909, 61257, 57909, 61259, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 61074, 57936, 57936, 57936,\n  /* 64691 */ 61077, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61085, 57936, 57936, 57936, 57936,\n  /* 64706 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59516, 57936, 57936, 57936, 57936, 57936,\n  /* 64721 */ 57936, 57936, 57936, 57936, 59528, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 64736 */ 57936, 61470, 57936, 57936, 57936, 0, 4130, 0, 0, 0, 0, 0, 521, 521, 4135, 521, 4136, 521, 521, 521, 521,\n  /* 64757 */ 521, 521, 521, 57886, 57886, 61486, 57886, 61487, 57886, 57886, 57886, 57886, 59340, 57886, 57886, 57886,\n  /* 64773 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59353, 57886, 57886, 57886, 59358, 57886,\n  /* 64788 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 57909, 57909, 57909, 57909,\n  /* 64805 */ 57909, 57909, 57909, 59914, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 0, 0,\n  /* 64822 */ 0, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 64837 */ 57936, 57936, 57936, 57936, 57936, 60709, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0,\n  /* 64856 */ 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 358, 0, 0, 0, 475, 475, 475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 509,\n  /* 64886 */ 509, 513, 513, 513, 513, 509, 513, 513, 513, 509, 513, 513, 513, 513, 513, 513, 538, 57904, 538, 57904,\n  /* 64906 */ 538, 538, 57904, 538, 538, 57927, 57904, 538, 538, 57904, 57904, 57904, 57927, 57904, 57904, 57904, 57904,\n  /* 64923 */ 57904, 57904, 57904, 57927, 57927, 57904, 57904, 57954, 57904, 57904, 57904, 57904, 57904, 57904, 57904,\n  /* 64938 */ 57954, 57954, 57904, 57904, 57904, 57904, 57954, 57954, 57904, 618, 57904, 57969, 57969, 1, 24578, 3,\n  /* 64954 */ 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 637, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 64982 */ 1305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1288, 0, 521, 521, 1320, 521, 1323, 0, 680, 681, 0, 0,\n  /* 65010 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 702, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521,\n  /* 65041 */ 3876, 521, 521, 521, 521, 3880, 521, 521, 521, 521, 521, 3886, 521, 521, 521, 57886, 57886, 57886, 61235,\n  /* 65060 */ 57886, 57886, 57886, 658, 0, 637, 0, 0, 0, 0, 0, 0, 781, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 790, 0, 795, 0, 0,\n  /* 65088 */ 0, 0, 0, 0, 637, 0, 0, 781, 521, 833, 521, 521, 521, 521, 854, 858, 864, 521, 869, 521, 521, 521, 521,\n  /* 65111 */ 521, 887, 521, 521, 521, 521, 57886, 57886, 58252, 0, 790, 0, 795, 0, 781, 0, 807, 0, 0, 0, 0, 807, 0, 0,\n  /* 65135 */ 0, 0, 0, 637, 0, 0, 0, 0, 0, 0, 0, 0, 781, 0, 0, 0, 0, 0, 0, 1277, 0, 1162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 65167 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 670, 0, 0, 0, 0, 0, 0, 0, 0, 57909, 57909, 57909, 57909, 57909,\n  /* 65194 */ 58382, 57909, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 58403, 57936, 57936, 57936, 57936,\n  /* 65211 */ 58424, 58428, 58434, 57936, 58439, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 0,\n  /* 65228 */ 57886, 57886, 57886, 57886, 57886, 57886, 155941, 1138, 0, 0, 1142, 0, 0, 1147, 0, 0, 0, 0, 0, 0, 0, 311,\n  /* 65250 */ 0, 0, 0, 0, 0, 310, 0, 310, 311, 0, 310, 310, 311, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 310, 408, 311, 0, 0,\n  /* 65279 */ 0, 0, 0, 0, 311, 413, 0, 0, 139264, 147456, 0, 0, 0, 0, 0, 58457, 57936, 57936, 57936, 57936, 521, 521,\n  /* 65301 */ 521, 887, 521, 521, 0, 57886, 57886, 57886, 58306, 57886, 57886, 155941, 1138, 0, 301, 0, 0, 305, 0, 0, 0,\n  /* 65322 */ 0, 0, 0, 0, 0, 2336, 0, 0, 0, 0, 1806, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2292,\n  /* 65353 */ 2293, 0, 2295, 2296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 65384 */ 1169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1179, 0, 0, 0, 1183, 1184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 65415 */ 0, 0, 367, 367, 0, 0, 0, 1202, 0, 0, 0, 0, 0, 0, 0, 686, 0, 0, 0, 0, 0, 0, 367, 367, 367, 0, 0, 0, 0, 0,\n  /* 65445 */ 699, 0, 0, 0, 0, 0, 0, 0, 0, 708, 0, 0, 1243, 0, 0, 0, 0, 0, 0, 1251, 0, 0, 0, 0, 0, 1256, 0, 0, 0, 0, 0,\n  /* 65476 */ 0, 0, 0, 0, 0, 0, 1267, 0, 0, 0, 0, 0, 0, 1301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 65509 */ 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 0, 0, 0, 0, 1275,\n  /* 65532 */ 0, 0, 1152, 0, 0, 0, 1281, 0, 1283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1291, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521,\n  /* 65561 */ 521, 521, 521, 2393, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2405, 521, 521, 521, 521, 521,\n  /* 65582 */ 521, 0, 1297, 1256, 0, 1281, 1300, 0, 1303, 0, 0, 0, 1183, 0, 0, 0, 0, 1311, 0, 0, 0, 0, 0, 1311, 0, 0,\n  /* 65608 */ 1202, 1311, 1318, 521, 521, 521, 521, 521, 521, 0, 0, 0, 2473, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 65627 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 65642 */ 57886, 61043, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 1324, 521, 521, 521, 521,\n  /* 65658 */ 1330, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1351, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 65679 */ 521, 521, 521, 1364, 521, 521, 521, 0, 2895, 0, 0, 0, 0, 57886, 57886, 57886, 60243, 57886, 60244, 57886,\n  /* 65699 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 65714 */ 57886, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 65730 */ 521, 521, 1369, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1377, 521, 521, 521, 1384, 1386, 521, 521,\n  /* 65750 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2881, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 65771 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 3202, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 65792 */ 521, 3208, 521, 521, 521, 521, 1409, 58754, 901, 58756, 57886, 57886, 57886, 57886, 57886, 58763, 57886,\n  /* 65809 */ 57886, 57886, 57886, 58769, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58790,\n  /* 65824 */ 57886, 57886, 57886, 57886, 57886, 57886, 59870, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 65839 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 65854 */ 57886, 57886, 58818, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 58911, 57909, 57909,\n  /* 65869 */ 57909, 58918, 58920, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 65884 */ 57909, 57909, 57909, 57909, 58943, 0, 58944, 58945, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 65899 */ 57936, 57936, 59543, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 65914 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58984, 57936, 57936, 57936, 58987,\n  /* 65929 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58952, 57936, 57936, 57936, 57936, 58958, 57936, 57936,\n  /* 65944 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58979, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 65959 */ 57936, 57936, 57936, 57936, 57936, 57936, 58992, 57936, 57936, 57936, 57936, 58997, 57936, 57936, 57936,\n  /* 65974 */ 57936, 57936, 59002, 57936, 57936, 57936, 59006, 57936, 57936, 57936, 59013, 59015, 57936, 57936, 57936,\n  /* 65989 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60922, 57936, 57936, 57936,\n  /* 66004 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60395,\n  /* 66019 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 66034 */ 57936, 57936, 57936, 59038, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 1138,\n  /* 66051 */ 0, 0, 0, 1710, 0, 0, 0, 0, 1717, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 66084 */ 0, 0, 0, 0, 0, 0, 0, 0, 734, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1757, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 66118 */ 0, 0, 0, 1775, 0, 0, 0, 0, 0, 0, 0, 1783, 1784, 0, 0, 0, 0, 1840, 1841, 0, 0, 0, 1844, 0, 0, 0, 0, 0,\n  /* 66146 */ 1849, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 581632, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 581632, 0,\n  /* 66177 */ 581632, 581632, 0, 1862, 0, 1864, 1840, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1876, 521,\n  /* 66197 */ 521, 521, 521, 1882, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2850, 521, 2852, 521, 521, 521,\n  /* 66217 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2427, 521, 521, 521, 521,\n  /* 66238 */ 521, 521, 521, 521, 521, 521, 521, 521, 1893, 521, 521, 521, 521, 1897, 521, 521, 521, 521, 521, 521, 521,\n  /* 66259 */ 521, 521, 521, 521, 521, 1910, 521, 521, 521, 1915, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2849,\n  /* 66279 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 66300 */ 521, 2429, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 58754, 0, 57886, 57886, 57886, 57886,\n  /* 66319 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59319, 57886, 57886, 57886, 57886, 59325, 57886,\n  /* 66334 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59336, 50657, 0, 57909, 57909, 57909,\n  /* 66349 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59419, 57909, 57909, 57909, 57909, 59425,\n  /* 66364 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59436, 57909, 57909, 57909, 57909,\n  /* 66379 */ 57909, 57909, 60653, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 66394 */ 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 66409 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61091, 57936, 57909, 57909,\n  /* 66424 */ 57909, 59440, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59453,\n  /* 66439 */ 57909, 57909, 57909, 59458, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 66454 */ 57909, 59936, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 66469 */ 57909, 57909, 57909, 57909, 57909, 57909, 59942, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 66484 */ 57909, 57909, 57909, 57909, 57936, 59536, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 66499 */ 57936, 57936, 57936, 59549, 57936, 57936, 57936, 59554, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 66514 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 2730, 521, 521, 521, 57886, 60079, 57886, 57886,\n  /* 66530 */ 57886, 0, 0, 0, 0, 0, 0, 0, 0, 2257, 521, 521, 59604, 57886, 59606, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 66555 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2277, 2278, 0, 0, 0, 0, 0, 5210112, 0, 5365760, 0, 5554176,\n  /* 66580 */ 5570560, 5578752, 0, 5668864, 0, 0, 5791744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6201344, 6242304, 6250496, 0,\n  /* 66601 */ 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3443, 521, 521, 521, 521, 521, 521, 521,\n  /* 66623 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 1382, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 66644 */ 521, 521, 521, 521, 0, 0, 2383, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 66668 */ 521, 521, 521, 521, 2403, 521, 521, 2407, 521, 521, 521, 2411, 57886, 57886, 59842, 57886, 57886, 57886,\n  /* 66686 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59852, 57886, 57886, 57886, 59855, 57886, 57886,\n  /* 66701 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60609, 57886, 57886, 57886,\n  /* 66716 */ 57886, 0, 0, 57909, 57909, 57909, 57909, 57909, 60618, 57909, 60619, 57909, 57909, 57909, 57909, 57909,\n  /* 66732 */ 57886, 57886, 59894, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 2561, 0, 57909, 57909, 57909,\n  /* 66749 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59923,\n  /* 66764 */ 57909, 57909, 59927, 57909, 57909, 57909, 59931, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 66779 */ 57909, 57909, 57909, 59941, 57909, 57909, 57909, 59944, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 66794 */ 57909, 57909, 57909, 57909, 57909, 61180, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936,\n  /* 66809 */ 61186, 57936, 57936, 57936, 61190, 57936, 57936, 57936, 57936, 57936, 59978, 57909, 57909, 57909, 57909,\n  /* 66824 */ 57909, 59983, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 66839 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60006, 57936, 57936, 60010,\n  /* 66854 */ 57936, 57936, 57936, 60014, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 66869 */ 60024, 57936, 57936, 57936, 60027, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0,\n  /* 66886 */ 0, 4076, 0, 4078, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886,\n  /* 66906 */ 60061, 57936, 57936, 57936, 57936, 57936, 60066, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521,\n  /* 66921 */ 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 66947 */ 2273, 0, 0, 0, 0, 0, 0, 0, 0, 2743, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2753, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 66979 */ 0, 0, 0, 0, 0, 0, 0, 0, 3629, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2819, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 67012 */ 2826, 0, 0, 0, 0, 0, 0, 521, 521, 2833, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3465, 3467, 521,\n  /* 67035 */ 521, 521, 3470, 521, 3472, 3473, 521, 57886, 57886, 57886, 57886, 57886, 57886, 60824, 57886, 57886,\n  /* 67051 */ 57886, 57886, 57886, 2841, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 67071 */ 2856, 521, 521, 521, 521, 2859, 521, 521, 2861, 521, 2862, 521, 521, 521, 521, 521, 521, 0, 0, 2472, 0,\n  /* 67092 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 67107 */ 57886, 57886, 59834, 57886, 57886, 59838, 57886, 521, 521, 521, 521, 2870, 521, 521, 2874, 521, 521, 521,\n  /* 67125 */ 521, 521, 521, 521, 521, 521, 2883, 521, 521, 521, 2886, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 67146 */ 3669, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 67163 */ 57886, 57886, 57886, 57886, 57886, 50657, 58754, 977, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 67178 */ 57909, 58860, 57909, 57909, 57909, 57909, 57909, 58872, 0, 0, 57909, 57909, 60309, 57909, 57909, 57909,\n  /* 67194 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60317, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 67209 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61183, 57909, 57936, 57936, 57936, 57936,\n  /* 67224 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60420, 57936, 57936, 57936,\n  /* 67239 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59008, 57936,\n  /* 67254 */ 57936, 57936, 57936, 57936, 57936, 57936, 59022, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57909,\n  /* 67269 */ 60332, 57909, 57909, 57909, 57909, 60335, 57909, 57909, 60337, 57909, 60338, 57909, 57909, 57909, 57909,\n  /* 67284 */ 57909, 57909, 57909, 57909, 57909, 60347, 57909, 57909, 60351, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 67299 */ 57909, 57909, 57909, 57909, 57909, 60655, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936,\n  /* 67314 */ 57936, 57936, 57936, 60666, 57936, 57936, 57936, 57936, 57936, 57936, 60673, 57909, 57909, 60360, 57909,\n  /* 67329 */ 57909, 57909, 60363, 60364, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 67344 */ 57909, 57909, 57936, 57936, 60374, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 3096,\n  /* 67360 */ 521, 521, 57886, 57886, 60443, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450560, 450560, 0,\n  /* 67384 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139264, 147456, 0, 0, 450560, 0, 0, 57936, 57936, 57936, 60382, 57936,\n  /* 67407 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 67422 */ 60397, 57936, 57936, 57936, 57936, 60400, 57936, 57936, 60402, 57936, 60403, 57936, 57936, 57936, 57936,\n  /* 67437 */ 57936, 57936, 57936, 57936, 61272, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521,\n  /* 67452 */ 57886, 0, 0, 0, 0, 0, 0, 0, 3942, 3627, 0, 0, 0, 0, 0, 371, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 67483 */ 0, 0, 371, 0, 0, 0, 379, 381, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 67508 */ 521, 521, 521, 521, 521, 521, 521, 1885, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3794, 521, 521, 521,\n  /* 67529 */ 3795, 3796, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 67546 */ 57886, 57886, 57886, 0, 2559, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 67563 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60325, 57909,\n  /* 67578 */ 57909, 57909, 57909, 57909, 57909, 3190, 521, 521, 521, 3193, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 67597 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1917, 521, 521,\n  /* 67618 */ 521, 521, 521, 57886, 60581, 57886, 57886, 57886, 60584, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 67634 */ 57886, 57886, 57886, 57886, 57886, 60594, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 67649 */ 57886, 57886, 57886, 57886, 60838, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 67664 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 2561, 57909, 57909, 57909, 57909, 57909,\n  /* 67680 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60630, 57909, 57909,\n  /* 67695 */ 57909, 60633, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60643,\n  /* 67710 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936,\n  /* 67727 */ 57936, 57936, 57936, 57936, 58417, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 67742 */ 57936, 57936, 60920, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 67757 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 0, 60674,\n  /* 67779 */ 57936, 57936, 57936, 57936, 60679, 57936, 57936, 57936, 60682, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 67794 */ 57936, 57936, 57936, 57936, 57936, 57936, 60692, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 67809 */ 57936, 4072, 4073, 0, 0, 0, 0, 0, 4079, 4080, 4081, 521, 521, 521, 4084, 521, 4086, 521, 521, 521, 521,\n  /* 67830 */ 61435, 61436, 61437, 3457, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3469, 521,\n  /* 67849 */ 521, 521, 521, 521, 57886, 57886, 57886, 60821, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 67865 */ 57886, 60587, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60595,\n  /* 67880 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 2560, 0, 0, 57909, 57909, 57909,\n  /* 67897 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 67912 */ 60640, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60883,\n  /* 67927 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 67942 */ 60897, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 60905, 57936, 57936, 57936, 57936, 57936,\n  /* 67957 */ 57936, 57936, 57936, 57936, 57936, 57936, 61201, 57936, 57936, 521, 521, 57886, 57886, 0, 0, 0, 0, 0, 0,\n  /* 67976 */ 0, 0, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3784, 521, 521, 521, 57936, 60939,\n  /* 68005 */ 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 3610, 0, 0, 0, 0, 0,\n  /* 68027 */ 0, 0, 3616, 0, 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 377, 0, 0, 0, 0, 0,\n  /* 68060 */ 0, 0, 0, 2824, 2782, 0, 0, 0, 0, 0, 2829, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 2838, 521, 521, 521,\n  /* 68085 */ 521, 521, 0, 0, 0, 3640, 3641, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3651, 521, 521,\n  /* 68108 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3671, 521, 521, 521, 57886, 57886, 57886, 57886,\n  /* 68127 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60612, 57886, 0, 0, 57909,\n  /* 68143 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60620, 57909, 57909, 57909, 57909, 521, 3661, 521, 521,\n  /* 68159 */ 521, 521, 521, 3666, 521, 3668, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886,\n  /* 68177 */ 57886, 57886, 57886, 57886, 61022, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60292, 57886, 57886,\n  /* 68192 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60303, 57886, 57886,\n  /* 68207 */ 57886, 57886, 57886, 0, 2962, 0, 0, 57909, 57909, 57909, 57909, 61051, 57909, 57909, 57909, 57909, 57909,\n  /* 68224 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61061, 57909, 57909, 57909, 57909, 57909,\n  /* 68239 */ 57909, 61067, 57909, 61069, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58884, 57909, 57909, 57909,\n  /* 68254 */ 57909, 57909, 57909, 57909, 57909, 57909, 58894, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 68269 */ 57909, 57909, 57909, 57909, 57909, 57909, 59938, 57909, 57909, 57909, 57909, 57909, 57909, 59943, 57909,\n  /* 68284 */ 59945, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 61096, 57936,\n  /* 68299 */ 61098, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0,\n  /* 68316 */ 0, 3765, 0, 0, 0, 0, 0, 0, 0, 0, 2363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2374, 0, 0, 0, 0, 0, 0, 0,\n  /* 68348 */ 0, 0, 656, 0, 0, 659, 660, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 671, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3770, 0, 0, 0, 0,\n  /* 68380 */ 0, 0, 0, 3627, 0, 0, 0, 0, 0, 3779, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521,\n  /* 68408 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3786, 521, 521,\n  /* 68429 */ 521, 3790, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3799, 521, 521, 521, 57886,\n  /* 68449 */ 57886, 57886, 57886, 57886, 61148, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909,\n  /* 68464 */ 57909, 57909, 60867, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 68479 */ 57909, 57909, 57909, 57909, 60880, 57909, 57909, 61152, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 68494 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61161, 57886, 57886, 57886, 57886, 57909, 57909, 57909,\n  /* 68509 */ 57909, 57909, 61167, 57909, 57909, 57909, 61171, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61053,\n  /* 68524 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 68539 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59459, 57909, 57909, 57909, 57909, 57909,\n  /* 68554 */ 57909, 57909, 57909, 61438, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61446, 57886, 57909,\n  /* 68569 */ 57909, 57909, 61451, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61459, 57909, 57936, 57936,\n  /* 68584 */ 57936, 61464, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59576, 57936, 57936, 57936,\n  /* 68599 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 68614 */ 57936, 57936, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 68637 */ 0, 0, 0, 57936, 57936, 57936, 57936, 57936, 61472, 57936, 0, 0, 0, 0, 4131, 0, 4133, 521, 521, 521, 521,\n  /* 68658 */ 521, 521, 521, 521, 521, 4139, 4140, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61445,\n  /* 68675 */ 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61458, 57909,\n  /* 68690 */ 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60919, 57936, 57936,\n  /* 68705 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60929, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 68720 */ 57936, 57936, 57936, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 4088, 521,\n  /* 68742 */ 521, 57886, 57886, 57886, 57886, 57886, 57886, 61490, 61491, 57886, 57886, 57909, 57909, 57909, 57909,\n  /* 68757 */ 57909, 57909, 57909, 57909, 57909, 61498, 61499, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 68772 */ 57936, 57936, 57936, 61506, 61507, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61415, 0, 0,\n  /* 68788 */ 4074, 4075, 0, 0, 0, 521, 521, 521, 4082, 521, 521, 521, 521, 521, 521, 521, 521, 4090, 57886, 57886,\n  /* 68808 */ 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 60865, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 68823 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 68838 */ 61184, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61189, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 68853 */ 0, 0, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57936, 57936, 57936,\n  /* 68870 */ 57936, 0, 521, 4220, 57886, 61565, 57909, 61566, 57936, 61567, 521, 57886, 57909, 57936, 521, 521, 521,\n  /* 68887 */ 521, 521, 521, 521, 1899, 1900, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 68908 */ 521, 521, 521, 521, 521, 521, 521, 521, 3800, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 68926 */ 57886, 57886, 425, 425, 0, 0, 131072, 425, 0, 0, 0, 425, 0, 0, 447, 0, 425, 0, 476, 476, 476, 0, 0, 361,\n  /* 68950 */ 361, 361, 495, 361, 361, 361, 361, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476,\n  /* 68971 */ 476, 539, 57905, 539, 57905, 539, 539, 57905, 539, 539, 57928, 57905, 539, 539, 57905, 57905, 57905,\n  /* 68988 */ 57928, 57905, 57905, 57905, 57905, 57905, 57905, 57905, 57928, 57928, 57905, 57905, 57955, 57905, 57905,\n  /* 69003 */ 57905, 57905, 57905, 57905, 57905, 57955, 57955, 57905, 57905, 57905, 57905, 57955, 57955, 57905, 539,\n  /* 69018 */ 57905, 57905, 57905, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0,\n  /* 69041 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 376832, 0, 376832, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 69073 */ 0, 0, 1854, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57909, 58369, 57909, 57909, 57909, 57909, 58387, 57909,\n  /* 69095 */ 57909, 57909, 0, 0, 0, 0, 58293, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58425, 57936, 57936,\n  /* 69112 */ 57936, 57936, 57936, 58444, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60069, 57936,\n  /* 69127 */ 57936, 57936, 57936, 2729, 521, 521, 521, 521, 60078, 57886, 57886, 57886, 57886, 2739, 2266, 0, 2740,\n  /* 69144 */ 2269, 0, 0, 2742, 57936, 58462, 57936, 57936, 57936, 521, 521, 521, 521, 892, 521, 0, 57886, 57886, 57886,\n  /* 69163 */ 57886, 58311, 57886, 155941, 1138, 0, 1139, 0, 0, 1144, 0, 0, 0, 0, 0, 1150, 0, 0, 0, 0, 0, 5341184, 0,\n  /* 69186 */ 5652480, 0, 0, 0, 0, 4759552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1827, 0, 0, 0,\n  /* 69216 */ 0, 0, 0, 0, 1834, 0, 0, 0, 0, 0, 0, 1244, 0, 0, 0, 0, 1249, 0, 0, 0, 1253, 0, 0, 0, 0, 0, 0, 0, 1253, 0,\n  /* 69246 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 466944, 0, 0, 0, 0, 0, 0, 0, 0, 1825, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 69278 */ 353, 354, 355, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 295, 0, 521, 521, 521, 1327, 521, 521, 521,\n  /* 69305 */ 1336, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 69326 */ 521, 521, 521, 521, 2895, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 69343 */ 60574, 57886, 57886, 60578, 57886, 521, 521, 521, 58754, 901, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 69359 */ 57886, 57886, 57886, 58766, 57886, 57886, 57886, 58775, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 69374 */ 57886, 57886, 57886, 57886, 57886, 57886, 61034, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 69389 */ 61042, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 61047, 57909, 57936, 57936, 57936,\n  /* 69404 */ 57936, 57936, 58955, 57936, 57936, 57936, 58964, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 69419 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59555,\n  /* 69434 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 521,\n  /* 69451 */ 1931, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1953,\n  /* 69472 */ 521, 521, 521, 521, 521, 521, 0, 2470, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 69490 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59839, 521,\n  /* 69505 */ 58754, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 69520 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59333, 57886, 57886,\n  /* 69535 */ 57886, 57886, 57886, 57909, 57909, 57909, 57909, 60864, 57909, 57909, 57909, 57909, 60868, 57909, 57909,\n  /* 69550 */ 57909, 57909, 57909, 57909, 57909, 60874, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 69565 */ 57909, 0, 0, 0, 0, 57886, 57936, 57936, 58402, 57936, 57936, 57936, 57936, 57936, 57936, 58433, 58435,\n  /* 69582 */ 57936, 57936, 57936, 57936, 57936, 57936, 50657, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 69597 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 69612 */ 57909, 57909, 57909, 59433, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59986, 57909,\n  /* 69627 */ 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 69642 */ 60001, 57936, 57936, 60004, 57936, 57936, 57909, 57909, 57909, 57909, 57909, 59474, 57909, 57909, 57909,\n  /* 69657 */ 57909, 57909, 57909, 57909, 57909, 59486, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 69672 */ 57909, 59497, 57909, 57909, 57909, 57909, 57909, 57886, 57886, 57886, 57886, 59372, 57886, 57886, 59375,\n  /* 69687 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59389, 57886, 57886, 57886, 57886,\n  /* 69702 */ 57886, 57886, 59395, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59872, 57886, 57886, 57886,\n  /* 69717 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 69732 */ 57886, 57886, 57886, 57886, 57886, 57886, 60304, 57886, 57886, 57886, 0, 2962, 0, 0, 57936, 57936, 57936,\n  /* 69749 */ 57936, 59570, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59582, 57936, 57936, 57936, 57936,\n  /* 69764 */ 57936, 57936, 57936, 57936, 57936, 57936, 59593, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521,\n  /* 69780 */ 521, 521, 0, 57886, 57886, 57886, 57886, 57886, 57886, 293, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 69803 */ 3119, 0, 3120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3135, 0, 0, 0, 0, 2283, 0, 0, 0, 0, 0, 0, 0,\n  /* 69834 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2301, 0, 0, 0, 0, 2359, 0, 0, 0, 0, 0, 0, 0,\n  /* 69867 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 336, 0, 0, 0, 0, 57886, 59841, 57886, 57886,\n  /* 69896 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 69911 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59863, 57886,\n  /* 69926 */ 57886, 57886, 57909, 57909, 57909, 57909, 57909, 59930, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 69941 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 69956 */ 57909, 57909, 57909, 57909, 0, 57886, 57936, 57936, 58947, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 69971 */ 60013, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 69986 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59589, 57936, 57936,\n  /* 70001 */ 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 70018 */ 60313, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 70033 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58931, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 70048 */ 57909, 57909, 0, 57886, 57936, 57936, 57936, 57936, 60626, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 70063 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 70078 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 1259, 57886, 57936, 57936, 57936,\n  /* 70093 */ 57936, 57936, 60675, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 70108 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 70123 */ 57936, 57936, 57936, 59524, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 70138 */ 57886, 57886, 57886, 61155, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 70153 */ 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 70168 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 61174, 57909, 57909, 57909, 57909,\n  /* 70183 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936,\n  /* 70198 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61193, 57936, 57936, 57936, 57936, 57936,\n  /* 70213 */ 57936, 57936, 57936, 61100, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886,\n  /* 70229 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367,\n  /* 70262 */ 367, 0, 0, 0, 0, 0, 0, 0, 1205, 0, 0, 57936, 57936, 57936, 57936, 61471, 57936, 57936, 0, 0, 0, 0, 0, 0,\n  /* 70286 */ 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 70305 */ 57886, 57909, 57909, 57886, 57886, 57936, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57936, 57936,\n  /* 70320 */ 57886, 57886, 57886, 57886, 57936, 57936, 57886, 521, 57886, 57886, 57886, 372, 372, 0, 0, 131072, 372, 0,\n  /* 70338 */ 0, 0, 372, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3122, 0, 0, 0, 0, 0, 0, 0,\n  /* 70371 */ 0, 0, 0, 0, 0, 0, 0, 57906, 57906, 57906, 57906, 57906, 57906, 57906, 57929, 57929, 57906, 57906, 57956,\n  /* 70390 */ 57906, 57906, 57906, 57906, 57906, 57906, 57906, 57956, 57956, 57906, 57906, 57906, 57906, 57956, 57956,\n  /* 70405 */ 57906, 540, 57906, 57906, 57906, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305,\n  /* 70426 */ 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2334720, 0, 2334720, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 70457 */ 0, 0, 0, 0, 0, 0, 521, 521, 521, 2834, 2835, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886,\n  /* 70479 */ 58267, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 70494 */ 57886, 0, 57909, 57909, 57909, 57909, 57909, 57909, 58343, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 70509 */ 57909, 57909, 57909, 57909, 61179, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936,\n  /* 70524 */ 57936, 57936, 61187, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521,\n  /* 70540 */ 57886, 57886, 57886, 57886, 57886, 301, 305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1282, 0, 0, 0, 0, 0, 0,\n  /* 70566 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2758, 2759, 0, 0, 2762, 0, 2764, 0, 0, 0, 0, 0, 521, 521, 521,\n  /* 70595 */ 58754, 901, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 70610 */ 57886, 57886, 58780, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0,\n  /* 70627 */ 0, 57909, 57909, 59909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 70642 */ 57909, 57909, 57909, 57909, 60658, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 60667,\n  /* 70657 */ 57936, 60668, 57936, 57936, 57936, 57936, 58875, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 70672 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 70687 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59947, 57909, 57909, 57909, 57909, 57909, 0, 0, 0,\n  /* 70704 */ 3771, 0, 3772, 0, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521,\n  /* 70733 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3657, 521, 521, 521, 521, 521, 521, 0, 0, 0,\n  /* 70755 */ 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 0,\n  /* 70787 */ 245760, 0, 0, 0, 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 363, 0, 364, 0, 0, 0, 0, 363, 0, 0, 0, 139264, 147456,\n  /* 70815 */ 0, 0, 0, 0, 0, 0, 653, 654, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 70848 */ 1858, 0, 0, 0, 0, 0, 0, 0, 0, 0, 433, 131072, 0, 433, 433, 0, 0, 433, 0, 364, 433, 0, 459, 0, 0, 0, 487,\n  /* 70875 */ 487, 490, 490, 490, 490, 496, 497, 490, 490, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510,\n  /* 70896 */ 510, 510, 510, 541, 57907, 541, 57907, 541, 541, 57907, 541, 541, 57930, 57907, 541, 541, 57907, 57907,\n  /* 70914 */ 57907, 57930, 57907, 57907, 57907, 57907, 57907, 57907, 57907, 57930, 57930, 57907, 57907, 57957, 57907,\n  /* 70929 */ 57907, 57907, 57907, 57907, 57907, 57907, 57957, 57957, 57907, 57907, 57907, 57907, 57957, 57957, 57907,\n  /* 70944 */ 619, 57907, 57970, 57970, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0,\n  /* 70967 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1762, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 71001 */ 0, 1239, 1806, 0, 0, 0, 0, 1246, 1246, 0, 0, 57909, 57909, 57909, 57909, 57909, 58383, 57909, 57909,\n  /* 71020 */ 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 71037 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60688, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 71052 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58458, 57936, 57936, 57936, 57936, 521, 521, 521,\n  /* 71068 */ 888, 521, 521, 0, 57886, 57886, 57886, 58307, 57886, 57886, 155941, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 71091 */ 0, 1794, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1806, 0, 0, 0, 0, 0, 0, 0, 0, 1272, 0, 0, 0, 0, 0, 0, 0,\n  /* 71123 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3402, 2768, 0, 0, 0, 0, 0, 0, 0,\n  /* 71156 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2318336, 57909, 57909, 57909,\n  /* 71184 */ 57909, 57909, 60334, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 71199 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60344,\n  /* 71214 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57886,\n  /* 71229 */ 57886, 57886, 58268, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 71244 */ 57886, 57886, 57886, 0, 57909, 57909, 57909, 57909, 57909, 57909, 58344, 57909, 57909, 57909, 57909,\n  /* 71259 */ 57909, 57909, 57909, 57909, 57909, 58393, 0, 0, 0, 0, 57886, 57936, 57936, 57936, 57936, 58409, 57936,\n  /* 71276 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59517, 59518,\n  /* 71291 */ 57936, 57936, 57936, 57936, 59525, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 71306 */ 57936, 1240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 71339 */ 2792, 0, 521, 1368, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 71360 */ 521, 521, 521, 521, 521, 1395, 521, 521, 521, 521, 521, 521, 521, 521, 2875, 521, 521, 521, 521, 521, 521,\n  /* 71381 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886,\n  /* 71401 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 71416 */ 58834, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 50657, 58754, 977, 57909,\n  /* 71431 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60895,\n  /* 71446 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 60903, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 71461 */ 57936, 57936, 57936, 57936, 57936, 58996, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 71476 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59024, 57936,\n  /* 71491 */ 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 0, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 71508 */ 155941, 1138, 0, 301, 0, 0, 305, 0, 0, 0, 0, 0, 0, 0, 0, 1216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 71538 */ 0, 1232, 0, 0, 0, 0, 0, 0, 0, 0, 1304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521,\n  /* 71569 */ 521, 521, 521, 3178, 521, 3179, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 71590 */ 2469, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 71607 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59883, 57886, 57886, 57886, 57886, 57886,\n  /* 71622 */ 57886, 57886, 57886, 57886, 57886, 57886, 521, 521, 521, 2844, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 71640 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 71661 */ 2434, 521, 521, 57936, 57936, 57936, 57936, 57936, 57936, 60385, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 71677 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 71692 */ 57936, 57936, 57936, 57936, 59522, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 71707 */ 57936, 57936, 57936, 0, 0, 0, 640, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 71730 */ 521, 521, 521, 521, 521, 893, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 60862,\n  /* 71747 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 71762 */ 57909, 57909, 57909, 57909, 57909, 60879, 57909, 60881, 57909, 57936, 58463, 57936, 57936, 57936, 1126,\n  /* 71777 */ 521, 521, 521, 893, 521, 0, 57886, 58477, 57886, 57886, 58312, 57886, 155941, 1138, 0, 0, 0, 0, 0, 0, 0,\n  /* 71798 */ 0, 0, 0, 0, 0, 1817, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 402, 0, 0, 0, 0, 0,\n  /* 71832 */ 0, 0, 0, 331, 521, 58754, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 71850 */ 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59326, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 71865 */ 57886, 57886, 57886, 0, 0, 0, 0, 57909, 59908, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 71882 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60343, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 71897 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 50657, 0, 57909, 57909, 57909, 57909,\n  /* 71912 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59426,\n  /* 71927 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59961, 57909, 57909,\n  /* 71942 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 71957 */ 57909, 57909, 60346, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 71972 */ 521, 521, 521, 521, 2415, 521, 2417, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 71993 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2432, 521, 521, 521, 521, 521, 521, 2867, 521, 521,\n  /* 72014 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 72035 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 1923, 57936, 57936, 57936, 57936, 60409, 57936, 57936, 57936,\n  /* 72053 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936,\n  /* 72068 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60423, 57936, 57936, 57936, 57936, 57936,\n  /* 72083 */ 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 3660, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 72101 */ 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886,\n  /* 72118 */ 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 2562, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909,\n  /* 72135 */ 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 61185, 57936,\n  /* 72150 */ 57936, 57936, 61188, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0,\n  /* 72170 */ 0, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 72204 */ 0, 0, 0, 0, 2310144, 0, 0, 2310144, 0, 0, 0, 0, 0, 0, 0, 2310144, 0, 2310144, 0, 0, 0, 0, 0, 0, 2310144,\n  /* 72229 */ 2310560, 2310560, 0, 2310144, 0, 0, 2310144, 0, 0, 0, 0, 0, 0, 2310144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 72253 */ 2310144, 0, 0, 0, 0, 0, 0, 2310144, 0, 0, 0, 0, 0, 0, 654, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 72284 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2310144, 0, 367, 0, 0, 0, 0, 0, 0, 0, 2310560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 72315 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 380, 0, 383, 0, 0, 0, 0, 0, 0, 2310144, 0, 0, 0,\n  /* 72345 */ 2310144, 0, 0, 0, 0, 0, 2310144, 0, 0, 2310144, 0, 0, 2310144, 0, 2310144, 2310144, 0, 2310144, 0,\n  /* 72364 */ 2310144, 2310144, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3445,\n  /* 72385 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1347, 521, 521, 521, 521, 521, 521, 521,\n  /* 72406 */ 521, 521, 521, 521, 521, 521, 521, 521, 1362, 521, 521, 2310144, 0, 0, 2310733, 2310733, 2310733, 2310733,\n  /* 72424 */ 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733,\n  /* 72435 */ 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310144,\n  /* 72446 */ 2310733, 2310144, 2310144, 2310733, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305,\n  /* 72466 */ 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2310, 0, 0, 0, 0, 0, 0, 0, 0, 2318, 0, 0, 0, 0, 0, 2322, 0,\n  /* 72498 */ 0, 2324, 0, 0, 0, 0, 0, 0, 0, 0, 6275072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4857856,\n  /* 72527 */ 4874240, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 839, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 72550 */ 521, 521, 521, 521, 521, 521, 898, 57886, 57886, 57886, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 72575 */ 460, 2335197, 2335197, 2335197, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 2335231, 2335231,\n  /* 72591 */ 2335231, 2335231, 2335231, 2335231, 2335231, 2335231, 2335231, 2335231, 2335231, 2335231, 2335231,\n  /* 72602 */ 2335231, 2335231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3392, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 72631 */ 3399, 3400, 0, 3401, 0, 2335231, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305,\n  /* 72653 */ 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2750, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2763, 0,\n  /* 72686 */ 0, 0, 0, 0, 2767, 0, 0, 0, 0, 417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2359296, 0, 2359296, 2359296, 2359296,\n  /* 72711 */ 2359296, 2359296, 2359296, 2359296, 2359296, 2359296, 2359296, 2359296, 2359296, 2359296, 2359296,\n  /* 72722 */ 2359296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 72754 */ 0, 2359296, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0,\n  /* 72779 */ 0, 0, 0, 0, 0, 0, 0, 0, 2798, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2813, 0, 0, 0, 0,\n  /* 72810 */ 2367488, 0, 0, 4268032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 72841 */ 0, 367, 0, 295, 0, 0, 0, 0, 0, 6275072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 976, 0, 0, 0, 0, 0, 4857856,\n  /* 72869 */ 4874240, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 2391, 2392, 521, 521, 521, 521, 521, 521, 521, 521, 521,\n  /* 72892 */ 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2855, 521, 521, 521, 521, 521, 521, 521, 2860, 521, 521,\n  /* 72913 */ 521, 521, 521, 521, 521, 521, 0, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305,\n  /* 72936 */ 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 72970 */ 0, 3134, 0, 0, 212992, 0, 0, 0, 0, 0, 4366336, 0, 0, 0, 0, 0, 0, 0, 0, 4268032, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 72999 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 382, 0, 0, 6258688, 6447104, 0, 0, 6127616, 0,\n  /* 73028 */ 6348800, 5906432, 0, 5537792, 0, 0, 0, 0, 0, 5939200, 0, 0, 5677056, 6365184, 4866048, 0, 6070272,\n  /* 73045 */ 5545984, 5152768, 0, 0, 6144000, 4358144, 4866048, 4882432, 4358144, 4358144, 4358144, 0, 1411, 0, 0, 0,\n  /* 73061 */ 0, 0, 4857856, 4874240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5259264, 0, 0, 0, 0, 0, 0, 0, 0, 4358144,\n  /* 73088 */ 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144,\n  /* 73099 */ 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 900, 900, 900, 5537792,\n  /* 73112 */ 5545984, 5586944, 5734400, 5971968, 4358144, 6045696, 4358144, 6070272, 4358144, 4358144, 4358144,\n  /* 73123 */ 4358144, 6348800, 4358144, 6144000, 0, 6144000, 0, 4988928, 5005312, 0, 0, 0, 0, 5775360, 0, 0, 0, 0, 0,\n  /* 73142 */ 0, 0, 750, 808, 0, 0, 0, 750, 0, 0, 811, 692, 0, 0, 0, 816, 0, 0, 0, 818, 0, 0, 0, 685, 692, 0, 0,\n  /* 73169 */ 4358144, 5005312, 4358144, 4358144, 4358144, 5120000, 5136384, 4358144, 4358144, 4358144, 4358144,\n  /* 73180 */ 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6324224, 5914624, 5914624, 0, 0, 0, 0, 0, 5513216,\n  /* 73195 */ 5783552, 0, 0, 0, 0, 0, 0, 656, 0, 779, 0, 0, 0, 0, 0, 0, 0, 783, 0, 0, 0, 0, 792, 0, 0, 0, 0, 0, 800, 0,\n  /* 73225 */ 783, 0, 0\n];\n\nJSONiqParser.EXPECTED =\n[\n  /*    0 */ 166, 182, 211, 1104, 242, 1452, 1467, 273, 289, 712, 1117, 319, 349, 333, 365, 381, 397, 413, 195, 1866,\n  /*   20 */ 2240, 2243, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 429, 445, 461, 477, 2088,\n  /*   38 */ 226, 493, 2075, 939, 621, 523, 543, 1716, 559, 575, 591, 607, 1422, 650, 666, 1822, 697, 1565, 634, 728,\n  /*   58 */ 738, 754, 796, 812, 828, 844, 860, 876, 892, 908, 924, 955, 2180, 985, 681, 2211, 1015, 1044, 1028, 1060,\n  /*   78 */ 1090, 1133, 1320, 1149, 1165, 1551, 1181, 1197, 1213, 1229, 1259, 1904, 1365, 1375, 999, 969, 1762, 1289,\n  /*   96 */ 1305, 1336, 1351, 1488, 1391, 1407, 1504, 1623, 1520, 1536, 1581, 1273, 1610, 1639, 1655, 1671, 2118, 2149,\n  /*  114 */ 1687, 1703, 1437, 507, 1732, 1748, 1778, 1074, 780, 1809, 1838, 1854, 1890, 1920, 1936, 1952, 1968, 1984,\n  /*  132 */ 2000, 2016, 2032, 2061, 257, 2104, 303, 2045, 767, 1793, 1594, 2134, 1243, 2165, 2196, 2227, 2234, 1874,\n  /*  150 */ 1479, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 536, 2259, 2263,\n  /*  168 */ 2271, 2271, 2271, 2265, 2269, 2271, 2272, 2276, 2279, 2286, 2282, 2290, 2294, 2298, 2302, 2306, 2310, 2381,\n  /*  186 */ 2790, 2790, 4003, 4941, 2790, 2791, 2314, 3074, 2982, 2790, 2790, 2790, 2687, 2790, 5013, 2790, 2790, 2790,\n  /*  204 */ 2790, 2790, 2790, 2790, 2827, 2790, 2571, 3537, 4080, 2436, 2320, 2443, 2466, 2326, 2336, 2790, 2790, 2790,\n  /*  222 */ 2343, 2790, 2790, 2349, 3841, 2707, 2790, 2734, 2759, 2790, 2790, 2790, 2790, 4756, 2738, 2790, 2790, 2790,\n  /*  240 */ 2790, 4767, 2321, 2390, 2466, 2466, 2466, 2466, 2355, 2361, 2790, 2790, 2790, 2790, 2790, 2371, 4535, 2790,\n  /*  258 */ 2696, 4816, 2790, 2790, 2790, 2697, 4817, 2790, 2790, 2790, 4822, 4790, 2790, 2790, 3017, 3842, 2448, 2790,\n  /*  276 */ 2790, 3537, 4079, 4079, 4079, 4079, 4079, 4099, 2436, 2436, 2436, 2436, 2436, 2387, 2321, 2321, 2321, 2321,\n  /*  294 */ 2321, 2459, 2466, 2466, 2466, 2466, 2466, 2332, 2401, 2790, 2790, 2762, 4873, 2790, 2790, 2790, 2790, 2820,\n  /*  312 */ 4885, 2790, 2790, 2790, 2790, 3243, 4891, 3542, 4079, 4079, 4079, 4097, 2436, 2436, 2436, 2436, 2458, 2321,\n  /*  330 */ 2321, 2321, 2331, 2466, 2466, 2426, 2790, 2790, 3074, 4076, 4079, 4079, 2396, 2436, 2482, 2321, 2321, 2464,\n  /*  348 */ 2466, 2466, 2411, 2790, 2790, 4535, 2790, 4077, 4079, 4079, 2480, 2436, 2436, 2457, 2321, 2321, 2420, 2467,\n  /*  366 */ 2428, 2834, 3536, 4079, 2434, 2436, 2441, 2321, 2465, 2332, 2447, 4095, 4081, 2437, 2376, 2466, 2452, 4078,\n  /*  384 */ 2436, 2321, 2466, 4335, 4081, 2456, 2463, 2422, 4080, 2482, 2463, 2471, 4098, 2483, 2331, 2478, 2329, 2487,\n  /*  402 */ 2491, 2474, 2495, 2498, 2508, 2512, 2519, 2519, 2519, 2515, 2525, 2519, 2521, 2529, 2536, 2532, 2540, 2544,\n  /*  420 */ 2548, 2552, 2556, 2560, 4697, 2790, 2790, 2790, 4729, 2790, 4591, 2584, 2858, 2790, 2790, 2790, 3364, 2591,\n  /*  438 */ 2790, 3610, 2603, 2609, 2613, 2617, 2621, 2625, 2628, 2632, 2636, 4053, 2702, 2790, 2790, 2790, 2790, 3877,\n  /*  456 */ 2642, 2648, 2892, 4432, 2646, 2915, 2367, 2654, 3828, 2813, 2790, 2652, 3406, 2659, 2664, 2790, 2790, 2790,\n  /*  474 */ 2790, 2790, 2671, 4434, 2580, 4063, 2790, 2676, 2680, 2790, 2790, 2790, 3867, 2684, 2790, 2790, 2790, 3868,\n  /*  492 */ 2685, 2750, 2790, 2790, 2790, 2790, 2756, 2760, 2790, 2790, 2790, 2790, 2790, 2880, 2666, 2790, 2790, 2777,\n  /*  510 */ 4228, 3359, 2851, 4232, 4238, 2790, 4246, 4420, 4253, 3266, 4258, 4264, 3443, 2790, 4721, 2782, 2790, 2790,\n  /*  528 */ 2790, 3228, 3232, 2790, 2790, 2790, 2790, 4105, 2790, 2790, 2790, 2790, 2790, 2790, 3903, 3876, 2788, 4641,\n  /*  546 */ 2790, 2790, 2790, 3307, 2790, 2790, 2790, 4640, 2818, 2790, 2790, 3306, 2795, 2935, 2812, 2790, 2790, 2744,\n  /*  564 */ 2790, 3875, 3239, 2817, 2790, 4088, 2790, 2790, 2824, 2790, 3502, 2818, 2790, 3007, 2790, 3959, 3750, 2960,\n  /*  582 */ 2745, 3748, 2790, 4626, 2790, 4622, 2667, 2940, 2842, 3754, 2902, 4615, 2840, 3753, 3753, 3753, 4616, 2838,\n  /*  600 */ 4624, 4624, 3006, 3753, 2841, 2903, 2719, 3291, 3292, 3752, 2941, 2998, 3000, 2847, 2790, 2790, 2790, 2790,\n  /*  618 */ 2790, 3322, 3326, 2790, 2790, 2790, 3241, 4802, 2775, 4735, 2782, 2790, 2790, 2790, 4802, 3231, 2790, 2790,\n  /*  636 */ 2790, 2771, 4780, 3110, 4601, 2790, 3607, 2790, 3763, 3555, 2886, 2973, 2790, 3980, 2790, 3666, 2790, 4542,\n  /*  654 */ 2416, 2884, 2890, 2896, 2907, 4569, 2911, 2790, 2919, 5035, 2790, 2913, 2925, 2790, 4599, 2686, 2790, 3665,\n  /*  672 */ 2790, 4541, 3125, 4330, 4429, 2929, 2934, 2939, 3953, 2790, 2790, 4197, 3440, 2790, 2790, 2790, 2790, 4592,\n  /*  690 */ 3426, 2790, 2790, 2790, 2790, 2790, 4860, 2951, 2790, 3324, 2790, 2790, 3609, 3761, 2790, 4016, 2955, 2741,\n  /*  708 */ 2842, 2790, 4742, 2959, 2790, 2790, 4535, 2790, 2790, 4096, 4079, 4079, 4079, 4079, 2435, 2436, 2436, 2436,\n  /*  726 */ 2436, 2437, 2980, 2790, 2790, 2790, 2790, 2802, 2989, 2790, 2790, 2790, 2790, 2801, 2988, 2790, 2790, 2790,\n  /*  744 */ 4818, 4810, 3928, 2790, 3608, 3761, 2316, 2993, 3004, 2790, 3011, 3032, 2790, 2790, 2790, 4503, 3015, 2790,\n  /*  762 */ 2790, 2790, 2790, 3011, 3032, 2790, 2790, 2790, 2790, 2790, 3026, 4920, 2790, 2790, 2790, 2790, 3025, 4919,\n  /*  780 */ 2790, 2790, 2790, 2790, 2790, 4355, 3755, 4359, 2790, 2790, 3354, 3059, 4366, 4372, 4240, 2834, 4504, 3016,\n  /*  798 */ 2790, 2790, 3635, 3927, 3023, 3031, 4541, 3436, 3037, 3854, 3044, 2790, 2790, 3451, 3049, 2790, 2790, 3024,\n  /*  816 */ 3043, 2790, 2790, 2801, 3048, 2790, 2790, 3053, 3064, 3031, 4492, 3071, 2975, 3079, 2790, 3470, 3088, 2790,\n  /*  834 */ 3421, 3079, 2790, 2801, 3098, 2790, 4152, 3102, 3109, 2574, 3114, 3122, 2790, 4585, 3124, 2790, 3129, 2790,\n  /*  852 */ 4584, 3123, 2790, 4154, 3033, 3133, 4950, 3518, 3142, 4948, 4952, 3148, 2790, 4155, 3156, 3188, 3160, 3150,\n  /*  870 */ 4950, 3167, 3186, 3174, 3174, 3174, 3180, 3184, 3192, 3192, 3196, 3200, 3175, 3209, 3433, 3213, 3176, 3861,\n  /*  888 */ 3217, 3221, 4494, 3225, 3236, 3247, 2790, 2790, 2790, 2790, 3914, 2790, 2790, 3253, 3263, 3403, 3170, 3479,\n  /*  906 */ 3270, 3274, 3278, 3282, 3285, 3285, 3286, 2790, 2790, 3913, 2790, 3549, 3337, 3848, 3342, 3290, 3496, 2655,\n  /*  924 */ 3296, 3300, 3311, 3318, 4953, 3330, 4637, 2790, 3320, 2790, 2790, 3659, 2790, 2790, 3336, 2790, 2790, 4722,\n  /*  942 */ 2770, 2790, 2790, 2790, 2790, 4722, 2770, 2790, 2790, 2790, 2790, 2790, 4190, 3341, 3484, 3460, 3144, 3346,\n  /*  960 */ 3363, 3369, 2976, 3375, 2790, 2790, 2790, 3383, 3388, 2790, 2790, 2790, 3472, 2790, 2790, 2790, 4413, 2790,\n  /*  978 */ 4305, 3786, 4825, 2790, 2790, 2364, 2790, 3482, 3486, 2790, 3416, 3420, 2790, 4591, 3425, 2790, 2790, 2790,\n  /*  996 */ 2790, 2672, 3430, 2790, 2790, 2790, 3769, 2790, 2790, 2790, 2790, 3471, 3736, 2790, 2790, 2790, 2790, 3776,\n  /* 1014 */ 2790, 3469, 2790, 2790, 2790, 2790, 4198, 3468, 2790, 2790, 2790, 2790, 4198, 3468, 2790, 2790, 2790, 2790,\n  /* 1032 */ 2921, 3506, 2790, 2790, 2790, 4591, 3513, 2790, 2790, 2790, 3724, 2660, 2790, 4124, 3542, 3476, 3490, 3494,\n  /* 1050 */ 3634, 3500, 2790, 2921, 3506, 2790, 2790, 2790, 2790, 3512, 3517, 3522, 2833, 3204, 2790, 3527, 2790, 2790,\n  /* 1068 */ 2790, 4249, 2790, 2790, 2790, 3526, 2790, 2790, 2790, 3821, 2761, 2790, 2790, 2790, 2790, 4347, 2686, 2790,\n  /* 1086 */ 2790, 2790, 2790, 4351, 2790, 4248, 2790, 2790, 2790, 3531, 3517, 3412, 2790, 2790, 4987, 2790, 2790, 2563,\n  /* 1104 */ 2790, 2790, 2790, 4094, 4079, 4079, 4079, 4079, 2435, 2436, 2436, 2436, 2397, 2321, 2321, 2321, 2321, 2321,\n  /* 1122 */ 2464, 2466, 2466, 2466, 2466, 2393, 2405, 2790, 2790, 2833, 2790, 4987, 2790, 2790, 4422, 2790, 2790, 4126,\n  /* 1140 */ 4322, 3032, 2790, 4987, 2790, 3390, 4989, 2790, 2605, 2730, 2790, 3541, 3547, 4788, 3547, 2566, 2566, 2566,\n  /* 1158 */ 4894, 4014, 4014, 4014, 4788, 2832, 3553, 2315, 4875, 2567, 4015, 4896, 2830, 2899, 3559, 3560, 3564, 2790,\n  /* 1176 */ 2790, 2790, 2790, 2790, 3615, 3614, 2790, 2790, 4465, 3917, 2585, 3619, 3625, 3737, 4266, 4915, 3629, 3649,\n  /* 1194 */ 4306, 3633, 3639, 3647, 3653, 2790, 2790, 4691, 3658, 2790, 4464, 3916, 2790, 3663, 2722, 3670, 3674, 4193,\n  /* 1212 */ 4196, 2790, 3690, 2790, 2790, 2790, 2382, 3694, 2790, 2790, 2790, 2383, 3695, 2790, 2790, 2790, 2339, 3143,\n  /* 1230 */ 2790, 2790, 2790, 4517, 2790, 2965, 4474, 4719, 4065, 4703, 2578, 3699, 3704, 2790, 2790, 3118, 2790, 2790,\n  /* 1248 */ 2790, 4999, 2790, 4869, 4984, 5004, 2752, 2790, 2790, 3118, 2790, 4317, 3723, 2790, 2790, 2790, 2790, 4391,\n  /* 1266 */ 3711, 2790, 2790, 2790, 2790, 3716, 3847, 2790, 2790, 3259, 2790, 2790, 2790, 2790, 2790, 3258, 2783, 2790,\n  /* 1284 */ 2790, 2790, 2790, 3258, 2783, 3791, 2725, 2790, 3795, 2790, 2790, 3803, 2790, 2790, 3810, 2790, 2790, 2638,\n  /* 1302 */ 2790, 4782, 3202, 2716, 3818, 2790, 3795, 2790, 4584, 3812, 2790, 2351, 2790, 2790, 3811, 2790, 3825, 3838,\n  /* 1320 */ 2790, 2790, 4988, 2790, 3725, 4875, 2790, 2414, 2790, 3535, 4942, 2790, 2430, 2790, 4323, 4014, 3846, 3205,\n  /* 1338 */ 3847, 4039, 2790, 2713, 2790, 3852, 3683, 3067, 3104, 2790, 3685, 4305, 3685, 3915, 3915, 3105, 3683, 3683,\n  /* 1356 */ 3683, 3066, 3331, 3105, 3332, 3331, 3332, 3684, 3256, 2790, 2790, 3371, 3735, 2790, 2790, 2790, 2790, 3421,\n  /* 1374 */ 3742, 2790, 2790, 2790, 2790, 2790, 3741, 2790, 2790, 2790, 2790, 3746, 2790, 3759, 2703, 3621, 4113, 3881,\n  /* 1392 */ 3885, 3889, 3893, 3894, 3898, 3902, 2790, 2790, 3162, 2790, 2790, 3643, 2983, 4501, 4562, 3907, 3765, 4282,\n  /* 1410 */ 3921, 2790, 4554, 4022, 2790, 3925, 3932, 4556, 3936, 2790, 4242, 3941, 2790, 2855, 2784, 3943, 4375, 4402,\n  /* 1428 */ 2862, 2866, 2870, 2874, 2874, 2875, 2879, 2819, 3325, 2790, 2778, 2790, 4182, 4960, 4187, 2504, 5007, 4203,\n  /* 1446 */ 4207, 4211, 4215, 4219, 4222, 4224, 2790, 2790, 4077, 4079, 4079, 4079, 4079, 4079, 2396, 2436, 2436, 2436,\n  /* 1464 */ 2436, 2436, 2375, 2321, 2321, 2321, 2322, 2466, 2466, 2466, 2466, 2466, 2332, 2357, 2380, 2790, 2790, 2790,\n  /* 1482 */ 2790, 2790, 2790, 2790, 2790, 3204, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 3163, 2790, 2790, 2746,\n  /* 1500 */ 3858, 4848, 4930, 3872, 3642, 4579, 2727, 4118, 2315, 3764, 3947, 3951, 2790, 2790, 3814, 3957, 2790, 2790,\n  /* 1518 */ 2790, 3967, 3350, 2984, 2729, 3978, 3548, 3984, 3961, 2790, 2790, 3813, 3988, 2790, 2790, 2790, 2790, 3686,\n  /* 1536 */ 4027, 2790, 2790, 2790, 2790, 3257, 4051, 2790, 3074, 2790, 2790, 4299, 3993, 2790, 4007, 2790, 2984, 2790,\n  /* 1554 */ 3568, 3575, 4260, 3583, 3587, 3591, 3594, 3597, 3600, 3601, 3605, 2790, 2790, 2790, 4750, 2964, 2790, 2790,\n  /* 1572 */ 2790, 2790, 2969, 2761, 2790, 2790, 2790, 2790, 4743, 2790, 4834, 2790, 3348, 4604, 4013, 4070, 4311, 4020,\n  /* 1590 */ 2790, 2790, 2790, 4026, 2790, 2790, 2790, 2790, 3578, 4964, 2790, 2790, 2790, 2790, 4969, 2790, 2790, 2790,\n  /* 1608 */ 2790, 3579, 2790, 4031, 2790, 4037, 2790, 4043, 2789, 4333, 4571, 4021, 2790, 2790, 4362, 2790, 2790, 2790,\n  /* 1626 */ 2790, 3968, 4183, 2790, 2790, 4271, 3972, 4033, 2790, 2790, 4832, 2790, 2796, 2790, 4360, 3993, 2790, 2790,\n  /* 1644 */ 2790, 2790, 4049, 2790, 2790, 2790, 2790, 4361, 2761, 4510, 4241, 4057, 4254, 4773, 4069, 4439, 2790, 2790,\n  /* 1662 */ 4976, 2790, 2790, 2790, 4457, 2761, 2790, 2790, 4485, 3989, 2790, 2790, 4456, 4074, 3731, 4836, 4254, 4085,\n  /* 1680 */ 4092, 3707, 2790, 4060, 2790, 2790, 4060, 4147, 4132, 4140, 4134, 4843, 2501, 4130, 4921, 4921, 4921, 4291,\n  /* 1698 */ 4135, 4132, 4132, 4132, 4139, 4922, 4135, 4144, 4922, 4923, 4133, 4159, 4169, 4171, 4166, 4163, 4175, 4178,\n  /* 1716 */ 2790, 2790, 2790, 2800, 2790, 2746, 3958, 4087, 2818, 2790, 3314, 2806, 2790, 3502, 2818, 2790, 2790, 4270,\n  /* 1734 */ 3039, 4275, 2790, 2790, 2790, 4279, 3358, 2850, 4286, 4295, 2790, 3397, 3607, 4303, 4310, 2790, 2790, 4965,\n  /* 1752 */ 4315, 2790, 2790, 2790, 3378, 4321, 2790, 2790, 2790, 3379, 2790, 2790, 3472, 2790, 2790, 2790, 2345, 3847,\n  /* 1770 */ 2790, 2790, 3471, 3736, 2790, 4603, 2790, 4305, 2790, 4812, 4327, 4339, 2790, 2790, 3352, 3356, 2996, 4343,\n  /* 1788 */ 3937, 4297, 4995, 4476, 2843, 2790, 3025, 4927, 2790, 2790, 4934, 2406, 2599, 4938, 5023, 4946, 2790, 2790,\n  /* 1806 */ 2790, 2790, 4957, 4381, 4359, 2790, 2790, 2790, 3806, 4389, 2790, 2790, 2790, 2790, 3963, 4396, 2790, 2790,\n  /* 1824 */ 2790, 2946, 2790, 2790, 2790, 3712, 2947, 2790, 2790, 2790, 4234, 3973, 2790, 2790, 2790, 3962, 4395, 2790,\n  /* 1842 */ 2790, 2790, 2790, 3962, 4395, 3755, 4359, 2790, 3056, 3060, 4368, 3960, 4535, 4377, 2790, 2790, 2790, 2808,\n  /* 1860 */ 4400, 2790, 2790, 2790, 2790, 4406, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 4708, 2790, 2790, 2790, 2790,\n  /* 1878 */ 2790, 2790, 2790, 2790, 2790, 3152, 3203, 2790, 2790, 2790, 2790, 2790, 3963, 4411, 2790, 2790, 2790, 2807,\n  /* 1896 */ 4407, 4446, 2790, 4417, 2942, 4426, 3654, 3761, 2790, 2790, 3720, 2790, 2790, 2790, 2790, 2790, 3729, 2790,\n  /* 1914 */ 4472, 2790, 2586, 3787, 3138, 2790, 4862, 4438, 2790, 2790, 2807, 4451, 2790, 2790, 2790, 4443, 2790, 2790,\n  /* 1932 */ 2790, 4450, 4689, 3400, 2942, 4455, 4536, 4484, 2790, 4461, 2790, 2790, 4469, 2790, 2790, 4480, 2790, 2790,\n  /* 1950 */ 3779, 4523, 4489, 4498, 3654, 4483, 2790, 4508, 2790, 5040, 4002, 2790, 4514, 2790, 2790, 4521, 4525, 4529,\n  /* 1968 */ 4540, 4384, 4590, 4385, 2790, 4514, 2790, 4547, 4551, 2790, 3997, 4560, 4566, 3999, 4575, 3995, 4009, 4009,\n  /* 1986 */ 4009, 4583, 4589, 4001, 4001, 4596, 3680, 4608, 4879, 4613, 4620, 4609, 4877, 2407, 3782, 4792, 4793, 2790,\n  /* 2004 */ 2790, 2790, 2790, 2790, 2790, 2790, 3018, 4630, 4634, 4645, 4649, 4653, 4657, 4661, 4665, 4669, 4672, 4676,\n  /* 2022 */ 4679, 4683, 2790, 2790, 2790, 3017, 4695, 4542, 4761, 4701, 4577, 4906, 4707, 4712, 4716, 4727, 2790, 3832,\n  /* 2040 */ 2594, 3075, 4733, 3830, 4739, 2790, 2790, 2790, 3019, 4842, 2597, 4900, 4904, 4853, 4912, 2790, 2790, 2790,\n  /* 2058 */ 2790, 2790, 3027, 4747, 4754, 4760, 4765, 4771, 4777, 4786, 4797, 4801, 2790, 2790, 2790, 2790, 4807, 2790,\n  /* 2076 */ 2790, 3876, 4543, 4150, 2930, 2766, 2790, 2790, 2790, 2790, 2790, 4723, 2790, 2790, 2790, 2691, 2790, 2790,\n  /* 2094 */ 2790, 3094, 2695, 2701, 2790, 2790, 2790, 2790, 3508, 2790, 4840, 2406, 4847, 4803, 4111, 4852, 4857, 4914,\n  /* 2112 */ 2790, 2790, 2790, 2790, 2696, 4866, 2790, 2790, 3910, 2790, 2790, 4686, 4531, 4887, 3772, 3082, 3706, 2790,\n  /* 2130 */ 4289, 2790, 3974, 3915, 4973, 2790, 4980, 4984, 5018, 4907, 4994, 2790, 2790, 2801, 4830, 2790, 2790, 2790,\n  /* 2148 */ 5000, 2790, 3091, 2790, 2790, 4103, 4533, 4109, 3084, 2790, 4117, 4908, 2790, 3303, 2790, 4122, 3249, 2790,\n  /* 2166 */ 4999, 2790, 2790, 4828, 2790, 2790, 3571, 2790, 5011, 5017, 5022, 2790, 2790, 3799, 2790, 3384, 3389, 2790,\n  /* 2184 */ 2790, 5029, 3394, 2790, 2790, 2790, 2790, 4881, 2790, 3543, 3449, 3410, 3116, 5028, 2790, 3798, 2790, 2790,\n  /* 2202 */ 5027, 3365, 3864, 2790, 4990, 2790, 4045, 2790, 2710, 2790, 3447, 4603, 3455, 3459, 3700, 3677, 2790, 2790,\n  /* 2220 */ 3464, 2790, 2790, 2790, 2790, 2790, 4199, 5033, 3136, 2790, 4383, 5039, 2587, 3834, 2790, 2790, 2790, 2790,\n  /* 2238 */ 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2578, 2790, 2790, 2790, 2790, 2790,\n  /* 2256 */ 2790, 2790, 2790, 6090, 6563, 5044, 5057, 5054, 6594, 6596, 6596, 6596, 6591, 5074, 6595, 6596, 6596, 6596,\n  /* 2274 */ 6596, 5087, 5061, 5074, 6596, 6596, 5067, 5062, 6596, 5078, 5084, 5080, 5066, 6594, 6163, 5071, 5091, 5094,\n  /* 2292 */ 5094, 5094, 5095, 5099, 5099, 5103, 5107, 5114, 5111, 5118, 5122, 5134, 5137, 5129, 5130, 5127, 5125, 5141,\n  /* 2310 */ 5145, 6561, 6446, 5234, 5173, 5635, 5635, 5635, 5219, 5598, 5503, 5251, 5251, 5251, 5251, 5252, 5196, 5267,\n  /* 2328 */ 6248, 5502, 5251, 5251, 5196, 5196, 5196, 5266, 5202, 5212, 5632, 5635, 5050, 6519, 6509, 5635, 6818, 5635,\n  /* 2346 */ 5635, 5146, 5150, 6535, 5218, 5635, 5635, 5147, 5154, 5196, 5267, 5268, 5502, 5213, 5214, 5232, 5214, 5631,\n  /* 2364 */ 5635, 5146, 5151, 5635, 5155, 5619, 6297, 5635, 6532, 6536, 5244, 5250, 5251, 5251, 5251, 5295, 5631, 5633,\n  /* 2382 */ 5635, 5635, 5635, 5049, 6518, 5502, 5502, 5293, 5251, 5251, 5226, 5196, 5196, 6247, 5270, 5502, 5502, 5502,\n  /* 2400 */ 5504, 5268, 5502, 5214, 5633, 5282, 5635, 5635, 5635, 5273, 6084, 5196, 5267, 5271, 5635, 5166, 5635, 5635,\n  /* 2418 */ 5749, 5219, 5251, 5296, 5196, 5196, 5306, 5635, 5196, 5265, 5269, 5273, 5635, 5635, 5165, 5635, 6247, 5268,\n  /* 2436 */ 5502, 5502, 5502, 5502, 5251, 5502, 5251, 5251, 5251, 5186, 5193, 5272, 5635, 5635, 6261, 5635, 5298, 5635,\n  /* 2454 */ 5635, 6262, 5502, 5502, 5294, 5251, 5251, 5251, 5296, 5251, 5251, 5264, 5196, 5196, 5196, 5196, 5265, 5196,\n  /* 2472 */ 5197, 5635, 6245, 5269, 5293, 5296, 5306, 6246, 6247, 5502, 5502, 5502, 5292, 5251, 5251, 5196, 6255, 6247,\n  /* 2490 */ 5270, 5292, 5251, 5264, 5197, 5198, 5302, 5297, 5312, 5312, 5304, 5635, 5179, 5635, 5643, 5168, 5635, 6860,\n  /* 2508 */ 5329, 5590, 5333, 5336, 5339, 5343, 5362, 5419, 5347, 5351, 5404, 5419, 5419, 5419, 5419, 5368, 5384, 5393,\n  /* 2526 */ 5355, 5359, 5418, 5367, 5372, 5346, 5420, 5381, 5390, 5397, 5377, 5386, 5419, 5376, 5401, 5416, 5424, 5428,\n  /* 2544 */ 5430, 5430, 5434, 5436, 5440, 5473, 5444, 5446, 5365, 5407, 5450, 5454, 5458, 5466, 5464, 5466, 5462, 5470,\n  /* 2562 */ 5477, 5635, 5181, 6353, 5635, 5219, 5635, 5635, 5219, 5635, 7266, 5635, 5904, 5635, 6256, 6080, 5635, 6853,\n  /* 2580 */ 5635, 5635, 5169, 5672, 6820, 5635, 5635, 5635, 5275, 5635, 5635, 7112, 6346, 7172, 5635, 5220, 7282, 5635,\n  /* 2598 */ 5273, 5642, 5635, 5635, 6879, 5246, 5891, 5635, 5635, 5182, 6258, 5523, 6083, 6080, 5977, 6569, 5635, 6877,\n  /* 2616 */ 6875, 6150, 5527, 5530, 5531, 5535, 5538, 5542, 5547, 5545, 5551, 5553, 5554, 5558, 5561, 5569, 5562, 5566,\n  /* 2634 */ 5562, 5572, 5574, 5578, 5635, 6820, 6222, 5635, 5975, 5635, 5635, 6702, 6210, 5614, 5635, 5635, 5189, 5635,\n  /* 2652 */ 5635, 6773, 5656, 5635, 5635, 5635, 5307, 5668, 5635, 5635, 5635, 5315, 6779, 5662, 5666, 5635, 5635, 5635,\n  /* 2670 */ 5582, 5675, 5635, 5635, 5635, 5320, 5679, 6567, 5635, 5683, 5691, 5698, 5706, 5734, 5699, 5707, 6568, 5635,\n  /* 2688 */ 5635, 5635, 5491, 6736, 5694, 5700, 5708, 5162, 5635, 5635, 5635, 5513, 7310, 6318, 5664, 5635, 5635, 5635,\n  /* 2706 */ 5277, 5746, 5635, 5712, 5635, 5274, 5273, 5635, 5274, 6223, 5635, 5275, 5635, 6695, 5635, 5635, 6694, 5823,\n  /* 2724 */ 6568, 5635, 5322, 5635, 5635, 5910, 5635, 5635, 5635, 6618, 5236, 5635, 5717, 6739, 6745, 5731, 6568, 5635,\n  /* 2742 */ 5324, 5635, 6335, 5811, 5635, 5635, 5635, 5675, 5701, 5732, 5635, 5635, 5318, 5635, 5635, 6736, 6740, 6744,\n  /* 2760 */ 5730, 5734, 5635, 5635, 5635, 5514, 5768, 5701, 5775, 6568, 5776, 5635, 5635, 5635, 5615, 5747, 7254, 5635,\n  /* 2778 */ 5635, 5512, 6989, 5208, 6448, 5733, 5635, 5635, 5635, 5625, 5788, 7253, 5635, 5635, 5635, 5635, 5159, 5797,\n  /* 2796 */ 5635, 5635, 5635, 5638, 6319, 5635, 5635, 5635, 5640, 6027, 5799, 5635, 5635, 5635, 5646, 5650, 6805, 5635,\n  /* 2814 */ 5635, 5635, 5655, 5805, 5798, 5635, 5635, 5635, 5636, 5515, 5803, 6804, 6568, 5635, 5496, 5048, 5635, 5219,\n  /* 2832 */ 6618, 5635, 5635, 5635, 6260, 5635, 5583, 5635, 5635, 5819, 6695, 5635, 5635, 5635, 5724, 5819, 5635, 5821,\n  /* 2850 */ 5819, 5635, 5635, 6934, 6878, 5756, 5815, 5829, 5635, 5508, 5204, 5664, 5842, 5846, 5854, 5858, 5862, 5866,\n  /* 2868 */ 5866, 5868, 5870, 5870, 5870, 5870, 5874, 5874, 5874, 5874, 5877, 5879, 5635, 5635, 5635, 5738, 7116, 5885,\n  /* 2886 */ 5635, 6258, 6080, 5635, 5899, 5917, 5635, 5635, 5594, 5635, 5324, 5635, 5635, 6618, 5635, 6618, 5635, 5582,\n  /* 2904 */ 5635, 5635, 5819, 5921, 5635, 5635, 5487, 7303, 5485, 5635, 6834, 5635, 5635, 5612, 5635, 6832, 5932, 5635,\n  /* 2922 */ 5635, 5635, 7178, 5635, 6696, 5635, 5937, 5325, 5635, 5635, 5635, 5761, 5969, 5635, 5635, 5635, 5804, 5984,\n  /* 2940 */ 5635, 5635, 5635, 5819, 5635, 5850, 6339, 5992, 5606, 5635, 5635, 5635, 6696, 5635, 5938, 5635, 6256, 6930,\n  /* 2958 */ 6081, 6015, 5635, 5635, 5635, 5895, 6016, 5635, 5635, 5635, 5902, 5640, 5999, 6005, 6011, 6261, 5635, 6095,\n  /* 2976 */ 5635, 5635, 6088, 6289, 6037, 6042, 5635, 5635, 5635, 7255, 5635, 5635, 6027, 6032, 6038, 6043, 5635, 5635,\n  /* 2994 */ 6256, 5635, 6082, 5635, 5820, 5635, 5820, 5635, 5635, 5821, 6261, 6335, 6695, 5635, 5635, 6692, 6568, 5923,\n  /* 3012 */ 7028, 6032, 6058, 6033, 6059, 5635, 5635, 5635, 5908, 7128, 7132, 6613, 5635, 5635, 5635, 5923, 5517, 6786,\n  /* 3030 */ 6790, 5635, 6564, 5635, 5635, 5635, 5907, 6260, 6318, 5635, 5635, 5635, 7259, 6072, 6033, 6064, 5635, 5635,\n  /* 3048 */ 7027, 6032, 6063, 6564, 5635, 5635, 6260, 6261, 5636, 6988, 7255, 5678, 5635, 6082, 5635, 5821, 5945, 5412,\n  /* 3066 */ 5635, 5635, 5635, 7285, 5635, 5635, 6257, 6081, 6261, 5635, 5635, 5635, 5221, 6071, 6711, 6064, 5635, 5635,\n  /* 3084 */ 6838, 5635, 5589, 6617, 6072, 6712, 6065, 5635, 5635, 6844, 5635, 5635, 6851, 6568, 6070, 6710, 6063, 6564,\n  /* 3102 */ 5943, 6983, 5635, 5635, 5635, 7286, 5635, 5756, 5635, 5635, 5635, 5943, 6260, 6094, 5635, 5635, 5635, 7332,\n  /* 3120 */ 5720, 5635, 6821, 6073, 6109, 5635, 5635, 5635, 5956, 5635, 6099, 6107, 6066, 6256, 6081, 6337, 5635, 5635,\n  /* 3138 */ 6852, 5635, 5320, 5635, 6075, 6079, 5635, 5635, 5635, 5958, 5635, 6820, 7158, 6077, 5635, 5635, 5635, 7346,\n  /* 3156 */ 5635, 6131, 6821, 6074, 6076, 5635, 5635, 6820, 6708, 6127, 5635, 5635, 7156, 5634, 5905, 5635, 5228, 6053,\n  /* 3174 */ 5274, 6116, 6079, 5635, 6981, 6142, 7156, 5822, 5635, 7157, 6118, 5635, 5635, 6115, 6078, 5635, 5635, 6114,\n  /* 3192 */ 6078, 5635, 5635, 6115, 6078, 5635, 5674, 5285, 5674, 6117, 5635, 5635, 5636, 5635, 5635, 5635, 6221, 6118,\n  /* 3210 */ 5635, 5635, 6116, 6139, 6079, 5635, 6139, 7083, 5674, 6617, 7134, 5635, 7134, 5635, 7134, 5635, 6616, 6614,\n  /* 3228 */ 5635, 5635, 6878, 5764, 6744, 6449, 5734, 5635, 5287, 6614, 6614, 6614, 7253, 5635, 5674, 5635, 5635, 5512,\n  /* 3246 */ 5516, 5635, 6392, 6392, 5635, 5636, 5642, 6257, 5635, 6085, 7286, 5635, 5635, 5635, 6481, 6485, 5733, 6255,\n  /* 3264 */ 6840, 6147, 5635, 5635, 6940, 6946, 7286, 6617, 6879, 6154, 6160, 6167, 6156, 6171, 6175, 6179, 6183, 6184,\n  /* 3282 */ 6189, 6189, 6185, 6193, 6193, 6193, 6193, 6196, 7276, 5635, 5583, 5635, 5635, 5582, 6208, 5635, 5635, 6214,\n  /* 3300 */ 6197, 5278, 6228, 5635, 5635, 6975, 5635, 5635, 7001, 5769, 5797, 5308, 5635, 6961, 5635, 5635, 7001, 5770,\n  /* 3318 */ 6236, 5635, 5980, 6254, 5635, 5635, 5636, 5945, 5412, 5951, 5635, 5635, 6252, 5635, 5635, 5635, 6053, 5635,\n  /* 3336 */ 6255, 6086, 6855, 6868, 5635, 6399, 5635, 6614, 5635, 5635, 6273, 5635, 5635, 5638, 5964, 6676, 5635, 5635,\n  /* 3354 */ 5636, 6988, 6994, 5635, 5678, 5635, 6081, 5635, 5819, 5972, 5635, 5635, 5635, 6082, 6085, 5635, 6281, 5635,\n  /* 3372 */ 5635, 5640, 6573, 6802, 5206, 6295, 5635, 5635, 7007, 7016, 7041, 5635, 7144, 6290, 6803, 5207, 5207, 6296,\n  /* 3390 */ 5635, 5635, 5635, 6084, 6291, 5771, 6995, 5635, 5635, 7034, 5635, 5635, 7152, 5635, 5635, 7253, 5635, 5635,\n  /* 3408 */ 6954, 5657, 5635, 7252, 6400, 5635, 6670, 5635, 6259, 6209, 5635, 5639, 6347, 5635, 5635, 5635, 6088, 6309,\n  /* 3426 */ 6301, 6325, 6329, 5635, 6310, 6302, 6326, 6079, 5635, 6982, 5907, 5635, 6258, 6081, 6311, 6801, 6327, 5635,\n  /* 3444 */ 5635, 7257, 6960, 6255, 6086, 6856, 6869, 5635, 5635, 5640, 7027, 6400, 5635, 6735, 7277, 6693, 5635, 6671,\n  /* 3462 */ 5635, 5635, 5320, 6310, 6323, 6327, 6324, 6328, 5635, 5635, 5635, 6089, 5149, 5153, 6086, 6866, 6567, 5635,\n  /* 3480 */ 5635, 7287, 6616, 5635, 6879, 7278, 5582, 5635, 6769, 6564, 5635, 7252, 6400, 5288, 6079, 6695, 6669, 5635,\n  /* 3498 */ 5635, 6201, 5635, 6344, 5635, 5635, 5674, 5805, 6351, 6357, 5635, 5635, 5676, 5635, 6820, 7179, 6366, 6329,\n  /* 3516 */ 5635, 5260, 5635, 5635, 5635, 6122, 6399, 5635, 5635, 6671, 5635, 6259, 6365, 7255, 5635, 6021, 5635, 5635,\n  /* 3534 */ 5315, 5167, 5635, 5635, 5635, 6247, 6247, 6619, 5635, 5635, 5635, 6255, 6086, 5635, 6620, 5635, 5635, 5635,\n  /* 3552 */ 6256, 5219, 5635, 5635, 6619, 5904, 5748, 6771, 6620, 6618, 5635, 7096, 6618, 6618, 6618, 6770, 5901, 5511,\n  /* 3570 */ 6370, 5635, 5635, 7333, 5721, 5635, 7255, 7154, 5635, 5635, 7349, 5518, 7319, 6209, 6384, 5635, 6372, 5985,\n  /* 3588 */ 6719, 6390, 6396, 6404, 6408, 6411, 6413, 6417, 6418, 6418, 6422, 6424, 6425, 6429, 6429, 6429, 6429, 6430,\n  /* 3606 */ 6429, 5635, 5635, 5755, 5635, 5635, 5635, 5888, 5635, 6604, 7326, 5635, 5635, 5635, 6616, 5635, 6692, 5635,\n  /* 3624 */ 5824, 6457, 6568, 5635, 6852, 5635, 6948, 5635, 6949, 6455, 5635, 5635, 5635, 6261, 6260, 5635, 6462, 6456,\n  /* 3642 */ 5635, 5637, 5640, 6675, 7115, 5635, 6467, 5635, 5658, 6453, 5635, 6463, 5635, 5635, 5635, 6262, 7328, 5635,\n  /* 3660 */ 5635, 5635, 6267, 5277, 6615, 5635, 5635, 5755, 5818, 5635, 6819, 5635, 5635, 6494, 6473, 5635, 6477, 5635,\n  /* 3678 */ 5638, 6346, 5635, 5635, 7275, 5635, 5635, 7287, 5635, 5635, 5635, 6480, 5635, 6498, 6507, 6513, 6518, 6508,\n  /* 3696 */ 6514, 5635, 5635, 6523, 5635, 5635, 5635, 6315, 5635, 6540, 5635, 5635, 5783, 5635, 5635, 6554, 5635, 5635,\n  /* 3714 */ 5635, 6339, 5635, 6263, 6549, 6503, 5635, 6547, 5176, 6553, 5635, 5635, 5635, 6334, 5635, 6558, 7327, 5635,\n  /* 3732 */ 5635, 5784, 5635, 6578, 5153, 5635, 5635, 5635, 6439, 6088, 6574, 6579, 5154, 5635, 5635, 6583, 5635, 5635,\n  /* 3750 */ 5894, 5810, 5635, 5635, 5581, 5635, 5635, 5635, 5725, 6054, 5637, 5635, 5635, 5900, 5635, 5635, 5635, 5904,\n  /* 3768 */ 5635, 6088, 6588, 5153, 5635, 5638, 6826, 7252, 6088, 5148, 5152, 5635, 5640, 7087, 6772, 6084, 6772, 6084,\n  /* 3786 */ 5275, 5635, 6694, 5904, 6338, 5277, 6693, 5635, 5825, 5635, 6821, 6600, 5635, 5640, 7334, 5907, 5635, 5635,\n  /* 3804 */ 6822, 6224, 5635, 5644, 5648, 6102, 5635, 6821, 6223, 5635, 5635, 5635, 6479, 6762, 5824, 5635, 5321, 5635,\n  /* 3822 */ 5647, 7054, 7038, 5635, 7255, 5637, 5635, 5654, 5635, 5635, 5222, 7284, 5635, 5635, 5276, 5635, 5277, 6695,\n  /* 3840 */ 6337, 6260, 5635, 5635, 5635, 5256, 6220, 5154, 5635, 5635, 5635, 6399, 5638, 6692, 5635, 5635, 5923, 6072,\n  /* 3858 */ 5638, 7024, 6610, 5635, 5674, 6141, 5635, 5635, 6854, 5635, 5635, 6878, 5693, 5699, 7255, 6216, 6771, 5635,\n  /* 3876 */ 5677, 5635, 5635, 5635, 5587, 5911, 6624, 5628, 6630, 6638, 6641, 6645, 6648, 6656, 6656, 6656, 6656, 6651,\n  /* 3894 */ 6652, 6652, 6652, 6660, 6660, 6660, 6660, 6662, 6666, 5635, 5635, 5635, 6566, 6048, 5635, 5622, 5635, 5686,\n  /* 3912 */ 5838, 5635, 5686, 6053, 5635, 5635, 5635, 5985, 5635, 5589, 6694, 5939, 6617, 5912, 6686, 5635, 5635, 5944,\n  /* 3930 */ 5411, 6052, 6691, 5635, 5635, 6756, 6701, 5635, 5635, 5635, 6567, 6125, 6772, 5635, 5635, 5987, 5635, 5635,\n  /* 3948 */ 6723, 6729, 7278, 6695, 6734, 5635, 5635, 5991, 5605, 6749, 5635, 5635, 5635, 6615, 5635, 5635, 5635, 5645,\n  /* 3966 */ 5649, 5635, 6480, 6763, 6750, 5635, 6764, 5607, 5635, 5635, 5635, 5835, 5635, 6717, 5635, 5635, 6026, 6031,\n  /* 3984 */ 5608, 5635, 6730, 6143, 6483, 6487, 6568, 5635, 5635, 6486, 5734, 5635, 5635, 6133, 6881, 5635, 5635, 6133,\n  /* 4002 */ 7095, 5635, 5635, 5635, 6816, 6204, 6203, 5635, 5635, 6134, 6772, 5909, 5635, 5635, 5635, 6620, 5635, 5597,\n  /* 4020 */ 6879, 6795, 5635, 5635, 5635, 6685, 6480, 6484, 6488, 5635, 5635, 6616, 6615, 5635, 5635, 6204, 6202, 5274,\n  /* 4038 */ 6126, 5635, 5635, 6220, 6224, 7347, 6777, 5635, 5635, 6230, 5635, 5635, 6230, 6485, 5733, 5635, 5635, 6054,\n  /* 4056 */ 5204, 5635, 7269, 6772, 5635, 5687, 5952, 5635, 5713, 5635, 5635, 5276, 6615, 5635, 6277, 5635, 5635, 6619,\n  /* 4074 */ 6809, 5734, 5635, 5635, 6246, 6247, 6247, 6247, 6247, 5270, 5502, 7114, 5635, 7254, 5635, 5674, 5805, 5798,\n  /* 4092 */ 6276, 5748, 5635, 5635, 6255, 6247, 6247, 6247, 5269, 5502, 5502, 5835, 6053, 5635, 5635, 6318, 6568, 5635,\n  /* 4110 */ 7347, 7114, 5635, 5635, 6819, 5321, 5635, 6845, 5635, 5635, 5635, 6716, 5635, 6974, 5635, 5635, 6333, 5635,\n  /* 4128 */ 6256, 5317, 6285, 5635, 5635, 6966, 5635, 5635, 6965, 5635, 5635, 6257, 5635, 6961, 6053, 5635, 5635, 6967,\n  /* 4146 */ 5635, 6255, 5589, 6617, 5635, 5753, 5635, 5635, 5323, 5635, 6113, 5634, 5904, 5635, 6256, 6961, 6053, 6255,\n  /* 4164 */ 6965, 6965, 6965, 5635, 6967, 6965, 5635, 6965, 5635, 6258, 6967, 6965, 7286, 6269, 5741, 5741, 5741, 6053,\n  /* 4182 */ 6849, 5635, 5635, 5635, 6754, 5635, 7342, 6334, 5635, 5780, 6568, 5635, 5492, 6542, 6492, 5635, 5635, 5635,\n  /* 4200 */ 6307, 6311, 6324, 6936, 6083, 6873, 5319, 6886, 6892, 6890, 6896, 6900, 6900, 6902, 6908, 6906, 6906, 6908,\n  /* 4218 */ 6916, 6915, 6912, 6920, 6921, 6921, 6921, 6921, 6925, 6928, 5208, 5635, 5635, 6855, 6526, 6380, 5635, 5635,\n  /* 4236 */ 6340, 5993, 6565, 5635, 5635, 6617, 5635, 5635, 5635, 6706, 5635, 6239, 5635, 5635, 6364, 7154, 5635, 6242,\n  /* 4254 */ 5635, 5635, 5637, 5965, 5635, 6953, 5635, 5635, 6376, 5635, 5635, 6958, 5635, 5635, 6443, 5589, 7258, 5635,\n  /* 4272 */ 5635, 5635, 6760, 5635, 6971, 5635, 6979, 6987, 6993, 6329, 5635, 5832, 6260, 6680, 6878, 5791, 6543, 5635,\n  /* 4290 */ 5836, 5635, 5635, 6284, 5635, 5635, 6567, 5635, 6616, 5635, 5635, 6469, 6482, 6999, 5635, 5639, 5635, 5635,\n  /* 4308 */ 5635, 6461, 5725, 5635, 5635, 5635, 6768, 7012, 7040, 5635, 5635, 6547, 6501, 7041, 5635, 5635, 5635, 6769,\n  /* 4326 */ 5635, 7008, 7017, 7042, 5635, 5848, 5748, 6255, 5483, 5635, 5635, 6245, 6247, 5635, 7021, 5933, 6053, 5904,\n  /* 4344 */ 6935, 6879, 5792, 5644, 5648, 7055, 7046, 5645, 7052, 7056, 7047, 5646, 7053, 7057, 7048, 5724, 5635, 5635,\n  /* 4362 */ 5635, 6783, 6486, 5734, 5820, 5635, 5904, 6935, 6879, 5748, 6879, 5793, 5635, 6566, 5635, 5757, 5635, 5635,\n  /* 4380 */ 5724, 5756, 5635, 5277, 5635, 5635, 5635, 7176, 7094, 7061, 7048, 5635, 5635, 6548, 6502, 5649, 6103, 7067,\n  /* 4398 */ 7048, 5635, 7061, 6564, 5635, 5635, 6568, 5635, 5646, 5650, 7066, 7124, 5635, 7065, 7123, 5635, 5635, 6584,\n  /* 4416 */ 5635, 5635, 6987, 7154, 5635, 5881, 5635, 5635, 6365, 5635, 6878, 5318, 6615, 5635, 5899, 5962, 5635, 5602,\n  /* 4434 */ 5635, 5635, 5188, 5635, 7077, 5635, 5635, 5635, 6794, 5647, 7076, 7069, 5635, 5900, 6053, 5726, 5646, 7075,\n  /* 4452 */ 7068, 5635, 5635, 6879, 5635, 5635, 5635, 6799, 6809, 5635, 7176, 7081, 5635, 5901, 7114, 6434, 5635, 5635,\n  /* 4470 */ 7176, 7089, 5635, 5902, 5511, 6435, 5635, 5635, 5757, 5274, 5635, 6088, 7088, 5635, 5902, 5635, 5635, 5635,\n  /* 4488 */ 6800, 5635, 6088, 7154, 5635, 5903, 5635, 5906, 6616, 6614, 5820, 5904, 6880, 5635, 5908, 5635, 5635, 5924,\n  /* 4506 */ 7029, 6033, 5640, 7178, 5635, 5635, 6614, 5635, 5635, 6088, 7093, 5635, 5908, 6605, 7327, 7177, 7095, 5635,\n  /* 4524 */ 5901, 5902, 5635, 5640, 6218, 5821, 6880, 5635, 5635, 6615, 6616, 5635, 5635, 6259, 5635, 5635, 6259, 5635,\n  /* 4542 */ 5903, 5635, 5635, 5635, 5745, 5640, 7178, 6772, 5238, 5635, 7100, 6880, 5635, 5913, 6687, 5635, 6700, 5635,\n  /* 4560 */ 5635, 6135, 5635, 5635, 6681, 5635, 5635, 6820, 7094, 5635, 5928, 5635, 5635, 5608, 6878, 5635, 7100, 6881,\n  /* 4578 */ 5635, 7115, 5635, 5635, 7254, 7106, 5635, 5635, 5635, 6821, 6073, 6820, 7275, 5635, 5635, 5635, 6820, 6309,\n  /* 4596 */ 6133, 7095, 6880, 5635, 5943, 5410, 5949, 5635, 5635, 5635, 7252, 5635, 5635, 7120, 5635, 5635, 7273, 7120,\n  /* 4614 */ 6878, 5635, 5635, 6693, 5635, 5635, 5635, 7274, 5635, 5635, 6695, 5635, 5635, 5819, 5809, 5635, 7138, 5635,\n  /* 4632 */ 6963, 5905, 6209, 5635, 6961, 5635, 5979, 6253, 5635, 5635, 7002, 6744, 5798, 5240, 5635, 6021, 5499, 7109,\n  /* 4650 */ 5673, 5635, 7142, 5635, 6962, 6021, 6964, 6625, 6022, 7174, 7271, 7149, 7162, 7166, 7170, 7183, 7187, 7191,\n  /* 4668 */ 7194, 7202, 7197, 7198, 7206, 7208, 7212, 7218, 7217, 7213, 7222, 7232, 7232, 7225, 7231, 7227, 7236, 7240,\n  /* 4686 */ 5635, 5985, 5837, 5635, 5723, 5635, 5635, 6602, 6606, 7128, 7132, 5904, 5635, 5910, 5481, 7100, 7241, 5635,\n  /* 4704 */ 5635, 6695, 5824, 6360, 5635, 5635, 5635, 6853, 6259, 6079, 5635, 6529, 7245, 7247, 7251, 5635, 5986, 5635,\n  /* 4722 */ 5635, 5763, 6743, 5702, 5776, 5635, 7263, 5635, 5635, 6725, 5492, 7283, 7255, 5635, 5635, 6737, 5769, 7291,\n  /* 4740 */ 5635, 7292, 5635, 5997, 6003, 6009, 6015, 5635, 7296, 7130, 5635, 5998, 6004, 6010, 5907, 5903, 5635, 5635,\n  /* 4758 */ 6737, 6741, 5635, 6086, 5641, 5635, 5635, 5635, 7100, 5635, 5635, 6738, 6742, 6879, 5635, 7114, 5635, 7252,\n  /* 4776 */ 5635, 5635, 6853, 6855, 5635, 6020, 5635, 5635, 5635, 7254, 5635, 6337, 5635, 5635, 6770, 5635, 6772, 5635,\n  /* 4794 */ 6086, 6084, 5635, 5635, 6259, 5635, 7301, 6386, 5635, 5635, 5635, 6878, 5635, 5512, 7309, 6633, 5635, 6047,\n  /* 4812 */ 5635, 5635, 5635, 7256, 7310, 6634, 5635, 5635, 5635, 6882, 5635, 7307, 7311, 6338, 6853, 5320, 5635, 5640,\n  /* 4830 */ 7334, 5722, 5635, 5635, 6821, 6126, 5635, 5635, 6021, 6772, 7128, 7132, 5258, 5635, 5635, 5635, 6966, 5642,\n  /* 4848 */ 5635, 5635, 7101, 5635, 6850, 5635, 6336, 5635, 6260, 5635, 6261, 7102, 5985, 6334, 5635, 5635, 5644, 7073,\n  /* 4866 */ 7315, 7319, 6338, 5635, 6080, 5906, 5903, 7316, 6788, 5635, 5635, 6772, 5635, 6084, 7095, 5635, 5635, 5686,\n  /* 4884 */ 5635, 7317, 6789, 5635, 5635, 6813, 5635, 7318, 6790, 6770, 6769, 5635, 5635, 6619, 5635, 6769, 6820, 5635,\n  /* 4902 */ 5635, 6881, 7115, 5635, 6852, 6855, 5635, 5635, 5635, 6845, 5635, 6718, 6694, 5635, 5635, 5635, 6942, 6786,\n  /* 4920 */ 6790, 5635, 5635, 5635, 6967, 5635, 5635, 6786, 6790, 6770, 6769, 7254, 5635, 7101, 5635, 7297, 7132, 5258,\n  /* 4938 */ 7113, 5635, 5635, 6819, 5635, 5635, 5635, 5166, 6379, 5048, 5635, 5635, 6821, 6074, 6078, 5635, 5635, 5635,\n  /* 4956 */ 5978, 7350, 5519, 7320, 5635, 6081, 5678, 6626, 7319, 5635, 5635, 5635, 7006, 7348, 5517, 6786, 6617, 5635,\n  /* 4974 */ 6772, 6771, 5635, 6084, 6303, 6488, 5635, 7324, 5906, 5903, 5635, 6085, 5641, 5635, 6084, 6352, 5635, 5635,\n  /* 4992 */ 5635, 6231, 5047, 5635, 5635, 5635, 7033, 5635, 7348, 7335, 5903, 5635, 6879, 5635, 6851, 5678, 5909, 6855,\n  /* 5010 */ 6864, 5635, 7340, 5635, 5635, 6829, 5635, 6087, 5635, 6881, 5635, 6852, 6819, 6850, 5635, 5635, 6261, 7332,\n  /* 5028 */ 7336, 5635, 5635, 5635, 7145, 5635, 6232, 5635, 5635, 6833, 5635, 5274, 5635, 5635, 5635, 7177, 0, 0,\n  /* 5046 */ 1075838976, 2097152, 16384, 0, 0, 0, 62, 64, 4194560, 4196352, 270532608, 2097152, 2097152, 268435456,\n  /* 5060 */ 4194432, 541065216, 541065216, 541065216, 541065216, 4194304, 4194304, 4196352, -1606418432, -1606418432,\n  /* 5070 */ 541065216, 541065216, 4194304, 4198144, 541065216, 541065216, -2143289344, -2143289344, 8425488, 4194304,\n  /* 5080 */ 4194304, 4194304, 541065216, 37748736, 4194304, 541065216, 4194304, 4194304, 4194432, 37748736,\n  /* 5090 */ -1606418432, 742391808, 239075328, 775946240, 171966464, 171966464, 171966464, 171966464, 239075328,\n  /* 5099 */ 171966464, 775946240, 239075328, 239075328, 775946240, 775946240, 775946240, 4718592, 64, 4718592, 2097216,\n  /* 5110 */ 4720640, 4194400, 4194368, -2142763008, 541589504, 4194368, 541589504, 541589504, 541065280, 4194368,\n  /* 5120 */ 4194368, 541065312, 541065280, -2143289280, 4194368, -2143285440, -1605890240, -2142761152, -2109731008,\n  /* 5129 */ -1606414528, -2143285440, -2143285440, -2143285440, -1605890240, -1606414528, -1606414528, -2143285440,\n  /* 5137 */ -2143285408, -2143285440, -2143285440, -2142761152, 776470528, -1908404416, 775946304, 775946304,\n  /* 5145 */ -1908404416, 2, 4, 8, 16, 512, 1024, 16777216, 33554432, 402653184, 0, 0, 0, -1979711488, 0, 8192, 8392704,\n  /* 5162 */ 0, 0x80000000, 16777216, 0, 0, 1536, 32768, 0, 0, 128, 196608, 0, 16384, 1536, 1792, 8192, 16384, 131072,\n  /* 5180 */ 131072, 0, 0, 64, 1536, 32768, 96, 96, 0, 0, 0x80000000, 16, 0, 0, 1536, 64, 524352, 524352, 524352,\n  /* 5199 */ 524352, 0, 524288, 64, 64, 262144, 1048576, 4194304, 16777216, 33554432, 67108864, 134217728, 536870912, 0,\n  /* 5213 */ 128, 128, 128, 128, 2048, 1536, 1024, 0, 0, 0, 15, 208, 15360, 96, 96, 0, 64, 64, 16392, 64, 1048576, 128,\n  /* 5235 */ 128, 0, 256, 8192, 0, 8192, 0, 33554432, 0, 1024, 1024, 0, 0, 0x80000000, 65536, 32, 96, 96, 96, 96, 64, 0,\n  /* 5257 */ 8388608, 4096, 0, 0, 8192, 2097152, 0x80000000, 96, 524352, 524352, 524352, 524288, 524288, 524288, 64, 64,\n  /* 5273 */ 64, 0, 0, 0, 8, 0, 0, 0, 11, 64, 64, 128, 2048, 0, 4096, 0, 0, 131072, 128, 64, 64, 64, 96, 96, 96, 524352,\n  /* 5299 */ 524352, 524288, 64, 524288, 64, 64, 96, 524352, 0, 0, 0, 18, 33554432, 64, 96, 524352, 524288, 0, 64, 0,\n  /* 5319 */ 2097152, 0, 0, 4, 16, 0, 0, 16, 8388608, 0, 0, 4096, 536870912, 1073741824, 0, 4, 32, 32, 4, 1073872896,\n  /* 5339 */ 32, 40, 96, 160, 1056, 262176, 1048608, 2097184, 32, 32, 32, 524320, 32, 1073872896, 40, 262176, 1120, 96,\n  /* 5357 */ 4195360, 6291488, 2097184, 2097184, 4194336, 4194336, 536870944, 32, 32, 40, 262176, 32, 32, 40, 262184,\n  /* 5372 */ 1120, 96, 6292512, 4195360, 56, 262184, 40, 262184, 40, 0, 4, 262184, 40, 40, 40, 40, 4195104, 6292512,\n  /* 5390 */ 4196128, 32, 262184, 34, 34, 40, 48, 42, 32, 32, 327155712, 34, 1056, 1056, 32, 96, 32, 32, 41, 262184, 32,\n  /* 5411 */ 64, 512, 2048, 16384, 67108864, 42, 1056, 4194336, 32, 32, 32, 32, 56, 2098208, 42, 4457568, -326784344,\n  /* 5428 */ -322851160, -322851160, -322698144, -322698144, -322698144, -322698144, -322695456, -322695456, -322695456,\n  /* 5437 */ -322695456, -322597152, -320598176, -322597152, -322597144, -321548576, -320598168, -321548568, -322597144,\n  /* 5446 */ 32, 0, 96, 32, 42, 224, 40, 262176, 42, 106, 293601323, 293601323, 293863467, 293699627, 293617707,\n  /* 5461 */ 293716011, 297896507, 293964347, 293702267, 297896507, 293702203, 293702203, 293702203, 293702203,\n  /* 5470 */ 293964347, 297896507, 297896507, -322597144, -322588952, -321548568, -322588952, -37744981, -322597144,\n  /* 5479 */ -321548568, -37482773, 0, 131072, 1048576, 2097152, 0, 0, -1744830464, 0, -1744830464, 0, 318767104, 0, 0,\n  /* 5494 */ 0, 48, 0, 1, 285212672, 0, 0, 2048, 64, 64, 64, 64, 32, 96, 0, 32, 64, 65536, 0, 0, 1, 2, 12, 16, 64, 128,\n  /* 5520 */ 1024, 2048, 4096, 0, 2, 65536, 262656, 5242880, -1842937664, 201330721, 201330721, -2111369023,\n  /* 5532 */ -2111369023, -2111369023, -2111369023, -2111369023, -2111369023, -2111360575, -2111369023, -2111369023,\n  /* 5540 */ -1977151295, -1977151293, -1910042431, -1893265183, -2111368509, -1893265183, -1893265183, -1893265183,\n  /* 5548 */ -1893265183, -2111368509, -1893265183, -1893265183, -553689472, -553656704, -553689472, -553689472,\n  /* 5556 */ -553656704, -553656704, -553656704, -553656704, -553656704, -553656704, -553656672, -553656672, -553656672,\n  /* 5565 */ -553656672, -553656672, -553656670, -553656608, -553656672, -553656664, -553656664, -553656672, -553656670,\n  /* 5574 */ -553656672, -553656672, -536912159, -553656671, -536879391, -536879391, -536879391, 0, 0, 2048, 4194304, 0,\n  /* 5586 */ 0, 0, 262656, 0, 0, 0, 536870912, 1073741824, 458880, 2097152, -1845493760, 0, 0, 4096, 2097152, 0, 0, 1,\n  /* 5604 */ 4096, 201326592, 805306368, -1073741824, 0, 0, 0, 24576, 471424, 0, -2113929216, 0, 0, 0, 220, -1912602624,\n  /* 5620 */ 18874368, 463488, 0, 0, 9216, 0, 0, 16384, 8192, 8192, 32768, 2048, 2048, 2048, 2048, 0, 0, 0, 0, 1, 0, 0,\n  /* 5642 */ 0, 2, 0, 0, 0, 3, 4, 16, 224, 256, 512, 32768, 0, 1040000, 15728640, -570425344, 0, 0, 0, 254, 4194304,\n  /* 5663 */ 16777216, 33554432, 268435456, 536870912, 0x80000000, 0, 0, -570425344, 32505856, 2097152, 301989888, 0, 0,\n  /* 5676 */ 0, 512, 0, 0, 0, 256, 12288, 0, 167772160, 234881024, 0, 0, 16384, 32768, 50331648, 0, 128, 512, 7168,\n  /* 5695 */ 16384, 32768, 196608, 16384, 196608, 786432, 1048576, 2097152, 4194304, 8388608, 33554432, 2097152,\n  /* 5707 */ 4194304, 8388608, 503316480, 1073741824, 0x80000000, 0, 4096, 201326592, 0, 0, 0, 167772160, 234881024,\n  /* 5720 */ 128, 1024, 4096, 8192, 0, 0, 8192, 268435456, 0, 0, 4194304, 8388608, 234881024, 268435456, 1073741824,\n  /* 5735 */ 0x80000000, 0, 0, 1048576, 4194304, 33554432, 268435456, 268435456, 268435456, 268435456, 0, 128, 131072,\n  /* 5748 */ 2097152, 0, 0, 0, 520, 0, 201326592, 0, 0, 0, 1073741824, 0, 0, 0, 134217728, 128, 512, 3072, 16384, 32768,\n  /* 5768 */ 3072, 16384, 131072, 524288, 1048576, 4194304, 16777216, 33554432, 201326592, 268435456, 1073741824,\n  /* 5779 */ 0x80000000, 1048576, 4194304, 268435456, 536870912, 131072, 0, 0, 131072, 0, 131072, 2097152, 0, 0, 16384,\n  /* 5794 */ 2097152, 0, 0, 2097152, 4194304, 134217728, 0x80000000, 0, 0, 0, 512, 3072, 131072, 524288, 1048576,\n  /* 5809 */ 131072, 524288, 4194304, 0x80000000, 0, 0, 0, 16384, 16384, 18432, 0, 0, 0, 2048, 0, 0, 4096, 1048576, 0,\n  /* 5828 */ 0, 67108864, 1073741824, 0x80000000, 0, 0, 29696, 0, 0, 32768, 50331648, 268435456, 0x80000000, 0, 0, 1, 1,\n  /* 5845 */ 18952, 1024, 0, 65, 1024, 0, 4096, 32768, 0, 1024, 18952, 65, 268436480, 2101248, 524288, 1024, 19017,\n  /* 5862 */ -1744550912, 8388624, 8388624, 8388624, -1739308032, -1739308032, -1739308032, -1739308032, -1736162288,\n  /* 5871 */ -1736162288, -1736162288, -1736162288, -7868466, -7868466, -7868466, -7868466, -7868450, -7868450,\n  /* 5880 */ -7868450, 0, 0, 0, 1610612736, 1024, 0, 2101248, 0, 0, 262144, 65536, 262144, 262144, 0, 0, 2048, 131072,\n  /* 5898 */ 524288, 585, 0, 0, 0, 8192, 0, 0, 0, 4096, 0, 0, 0, 32, 0, 0, 0, 44, 64576, 0, 1024, 278528, -1744830464,\n  /* 5921 */ 5521408, -1744830464, 0, 0, 2, 12, 64, 0, 1040, 8667136, -1744830464, -67108864, 0, 0, 0, 9728, 0, 2014, 0,\n  /* 5940 */ 0, 0, 13312, 0, 1, 4, 8, 32, 64, 16384, 67108864, 134217728, 268435456, 0x80000000, 0, 0, 520, 1024, 0, 0,\n  /* 5960 */ 2, 16, 0, 278528, 0, 0, 2, 67108864, 16384, 0, 5242880, 0x80000000, 0, 0, 327680, 0, 0, 328192, 0, 0, 0,\n  /* 5981 */ 118, 577408, 22020096, 1040, 0, 0, 0, 16384, 0, 67108864, 1998, 518144, 8388608, 50331648, 201326592,\n  /* 5996 */ 805306368, 0, 2, 204, 768, 1024, 10240, 1024, 10240, 16384, 32768, 458752, 8388608, 458752, 8388608,\n  /* 6011 */ 50331648, 67108864, 134217728, 805306368, 134217728, 805306368, 1073741824, 0x80000000, 0, 220, 0, 0, 0,\n  /* 6024 */ 32768, 33554436, 2, 12, 192, 768, 1024, 1024, 2048, 8192, 16384, 32768, 458752, 32768, 458752, 50331648,\n  /* 6040 */ 67108864, 134217728, 134217728, 805306368, 1073741824, 0, 0, 208, 0, 0, 0, 34816, 67108864, 268435456, 0,\n  /* 6055 */ 0, 0, 65536, 458752, 50331648, 67108864, 805306368, 1073741824, 458752, 50331648, 67108864, 536870912,\n  /* 6067 */ 1073741824, 0, 0, 4, 8, 64, 128, 512, 2048, 196608, 262144, 33554432, 536870912, 0, 0, 0, 262144, 0, 0, 0,\n  /* 6087 */ 64, 0, 0, 2, 4, 8, 262144, 0, 1048576, 4194304, 0, 0, 4, 8, 128, 512, 1024, 32768, 65536, 131072, 2048,\n  /* 6108 */ 196608, 262144, 50331648, 536870912, 1073741824, 1, 4, 8, 512, 2048, 131072, 33554432, 536870912, 0, 0, 4,\n  /* 6124 */ 8, 512, 2048, 8192, 32768, 8388608, 0, 524288, 262144, 0, 0, 4, 64, 128, 8388608, 0, 512, 2048, 131072,\n  /* 6143 */ 536870912, 0, 0, 4194304, 8192, 2097152, 268435456, 0x80000000, 16, 33554432, -2147418112, 537395200,\n  /* 6155 */ 537395200, 0, 4196352, 537427968, 4196352, 0, 537395200, 4196352, 4196352, 276901888, 8540160, -1606418432,\n  /* 6167 */ 32768, 537395200, 4196352, 1082130432, 51380242, 51380242, 51380242, 22022147, 22349827, 22349827,\n  /* 6177 */ 22349827, 22366219, 22349843, 22349827, 22349827, 22366219, 22349827, 55576594, 55576594, 55576594,\n  /* 6187 */ 55576594, 1062785014, 324012114, 55576594, 55576594, 55576594, 1062785014, 1062785014, 1062785014,\n  /* 6196 */ 1062785014, 0, 0, 0, 329728, 557056, 0, 0, 0, 393216, 0, 0, 17825792, 33554432, 0, 0, 0, 462976, 3,\n  /* 6215 */ 22020096, 0, 0, 4, 134217728, 0, 0, 8, 16, 512, 402653184, 0, 0, 346112, 19, 0, 0, 8, 64, 0, 0, 0, 82,\n  /* 6238 */ 301989888, 0, 0, 393232, 0, 0, 393240, 0, 0, 524288, 524288, 524288, 524288, 0, 577408, 22020096,\n  /* 6254 */ 1040187392, 0, 0, 0, 524288, 0, 0, 0, 16, 0, 0, 0, 6, 16384, 32768, 268435456, 0, 268435456, 0, 1048576,\n  /* 6274 */ 16777216, 33554432, 0, 0, 524288, 1048576, 2097152, 0, 80, 268435456, 0, 0, 524288, 536870912, 0, 112, 128,\n  /* 6291 */ 256, 3584, 16384, 32768, 134217728, 805306368, 0, 0, 0, 1007232, 256, 1536, 2048, 16384, 32768, 262144, 0,\n  /* 6308 */ 4, 16, 32, 64, 128, 256, 1536, 0, 16, 33554432, 0, 0, 1048576, 4194304, 0x80000000, 1536, 16384, 32768,\n  /* 6326 */ 524288, 4194304, 33554432, 134217728, 536870912, 0, 0, 0, 32768, 0, 0, 0, 1048576, 0, 0, 0, 1998, 518144,\n  /* 6344 */ 1, 0, 0, 65536, 262144, 0, 0, 256, 1536, 32768, 524288, 0, 0, 4194304, 134217728, 536870912, 0, 0, 1114112,\n  /* 6363 */ 1073741824, 16, 64, 1536, 32768, 524288, 4194304, 67174400, 33554432, 1073741824, 0, 67174400, 0, 0, 16384,\n  /* 6378 */ 1073741824, 0, 0, 2097152, 0, 1572864, 0, 1073741824, 16384, 0, 4194304, 0, 8, 0, 131072, 0, 131072, 0, 8,\n  /* 6397 */ 131072, 131072, 134217728, 4096, 0, 8, 0, 8, 131072, 4194304, -2146430976, 131072, 134217736, 16908320,\n  /* 6411 */ 547389524, 547389524, 555909216, 555909216, 555909216, 555909216, 564297840, 564297844, 564297844,\n  /* 6420 */ 564297844, 564297844, 564297844, 564297844, 1001055742, 1001056254, 1001055742, 1001055742, 1001056254,\n  /* 6429 */ 1001056254, 1001056254, 1001056254, 1001056254, 1001055742, 1, 0, 67108864, 1073741824, 0, 84, 2129920,\n  /* 6441 */ 8388608, 536870912, 0, 96, 2260992, 0, 0, 2097152, 4194304, 8388608, 134217728, 268435456, 1280, 2809856,\n  /* 6455 */ 58720256, 939524096, 0, 0, 0, 1052672, 0, 254, 1792, 2809856, 58720256, 939524096, 0, 939524096, 0, 0, 12,\n  /* 6472 */ 16, 32768, 2097152, 8388608, 536870912, 0, 163840, 0, 0, 12, 32, 64, 1024, 2048, 57344, 262144, 50331648,\n  /* 6489 */ 268435456, 1073741824, 0x80000000, 0, 52, 0, 0, 20, 64, 62, 64, 128, 1280, 8192, 16384, 131072, 524288,\n  /* 6506 */ 58720256, 24576, 163840, 524288, 2097152, 58720256, 402653184, 58720256, 402653184, 536870912, 0, 0, 64,\n  /* 6519 */ 128, 1792, 24576, 163840, 4, 16, 8388608, 0, 0, 2113536, 0, 0, 3735552, 0, 0, 8388608, 8388608, 4096, 4096,\n  /* 6538 */ 4096, 4096, 0, 48, 25165824, 0, 0, 0, 1572864, 0, 6, 56, 128, 1792, 8192, 524288, 58720256, 402653184, 0,\n  /* 6557 */ 0, 32, 128, 256, 262144, 262144, 1048576, 1073741824, 0, 0, 0, 0x80000000, 0, 0, 0, -2147483646, 4, 24, 32,\n  /* 6576 */ 128, 1792, 1280, 8192, 524288, 16777216, 33554432, 0, 262144, 33554432, 134217728, 0, 8, 16, 1024,\n  /* 6591 */ 16777216, 4194432, 3145728, 541065216, -2143289344, 4194304, 4194304, 4194304, 4194304, 16, 402653184, 0,\n  /* 6603 */ 0, 32, 128, 256, 2048, 262144, 524288, 4, 16384, 65536, 67108864, 0, 0, 0, 131072, 0, 0, 0, 1024, 0, 0,\n  /* 6624 */ 32768, 8192, 0, 2048, 0, 32, 8192, 3670016, 2048, 8192, 196608, 1048576, 0, 0, 34816, 9216, 4096, 4096,\n  /* 6642 */ 29696, 29712, 29712, 29840, 29712, 29712, 29840, 536900624, 4224144, 144384, -754647956, -754647956,\n  /* 6654 */ -754647956, -754647956, 144384, 144384, 144384, 144384, -754647940, -754647940, -754647940, -754647940,\n  /* 6664 */ -754516884, -754647956, -754516884, -754516884, -754516884, 0, 0, 8388608, 1073741824, 0, 0, 67108864, 12,\n  /* 6677 */ 16384, 0, 65536, 29824, 0, 0, 0, 3670016, 44, 64576, 319029248, -1073741824, 0, 0, 60, 0, 0, 0, 4194304, 0,\n  /* 6697 */ 0, 0, 2014, 0, 319160320, 0, 0, 0, 5242880, 0, 4, 8, 256, 512, 2048, 8192, 16384, 458752, 50331648, 0,\n  /* 6717 */ 524288, 3145728, 0, 0, 16384, 8, 0, 28672, 0, 0, 32, 524288, 0, 16, 0, 128, 0, 12288, 131072, 0, 0, 128,\n  /* 6739 */ 512, 3072, 4096, 16384, 32768, 131072, 524288, 1048576, 2097152, 4194304, 262144, 318767104, -1073741824,\n  /* 6752 */ 0, 0, 0, 28, 0, 0, 60, 64576, 28, 32, 64, 1024, 2048, 61440, 262144, 318767104, 24576, 0, 0, 0, 8388608, 0,\n  /* 6774 */ 0, 0, 1040000, 67108864, 16384, 0, 65536, 262144, 1048576, 0, 8, 64, 2048, 4096, 8192, 65536, 131072,\n  /* 6791 */ 1048576, 0, 0, 128, 536870912, 4194304, 131072, 0, 0, 64, 2048, 16384, 32768, 524288, 1048576, 4194304,\n  /* 6807 */ 134217728, 0x80000000, 32768, 262144, 50331648, 268435456, 0, 32768, 8388608, 0, 0, 16777216, 16777216, 0,\n  /* 6821 */ 0, 0, 4, 8, 16, 2, 67108864, 0, 65536, 201326592, 0x80000000, 0, 0, 1998, 59238400, -67108864, 0, 524288,\n  /* 6839 */ 1048576, 0, 0, 64, 256, 32768, 50331648, 268435456, 0, 0, 1, 256, 0, 0, 0, 16777216, 0, 0, 256, 0, 8192, 0,\n  /* 6861 */ 256, 262144, 2113536, 2097152, 135790592, 0, 256, 8192, 2097152, 0, 0x80000000, 0, 32768, 2097152, 0,\n  /* 6876 */ 0x80000000, 5242880, 0, 0, 0, 128, 0, 0, 0, 208, 131073, 0, 0, 131073, 0, 135790592, 131073, 4, 0, 131073,\n  /* 6896 */ 393233, 1610612736, 1610612736, 1610612736, 393241, 393241, 393241, 393241, 805707793, 805707793,\n  /* 6906 */ 1879449617, 805708049, 1879449617, 1879449617, 1879449617, 1879449617, -483948553, -475559945, -475559945,\n  /* 6915 */ -483948553, -483948553, -475559945, -483948553, -475559945, -483948553, -475559945, -475559945, -475559945,\n  /* 6924 */ -475559945, -475559945, -215504905, -475559945, -207116297, -207116297, 0, 0, 72, 0, 4096, 4194304, 32768,\n  /* 6937 */ 0, 0, 256, 401424, 805306368, 0, 0, 112, 25165824, 0, 1879048192, 0, 0, 116, 0, 0, 401680, 0, 0, 0,\n  /* 6957 */ 32505856, 7, 19367920, -503316480, 0, 0, 0, 33554432, 0, 0, 33554432, 268435456, 0, 0, 0, 19376112,\n  /* 6973 */ -234881024, 0, 0, 50331648, 268435456, 0, 27764720, -234881024, 0, 0, 512, 2048, 0, 0, 1, 2, 4, 32, 524288,\n  /* 6992 */ 1048576, 524288, 1048576, 33554432, 67108864, 134217728, 805306368, 0, 24, 0, 0, 512, 3072, 16384, 0, 7,\n  /* 7008 */ 16, 480, 1536, 32768, 1536, 32768, 65536, 2490368, 32768, 65536, 10878976, 16777216, 33554432, 0, 9728,\n  /* 7023 */ 268435456, 0, 0, 67108866, 12, 64, 128, 512, 1024, 2048, 0, 16, 393216, 0, 0, 393216, 2097152, 16777216,\n  /* 7041 */ 33554432, 536870912, -1073741824, 0, 0, 10485760, 16777216, 33554432, 1073741824, 0x80000000, 0, 16, 224,\n  /* 7054 */ 256, 1536, 32768, 65536, 393216, 10485760, 16777216, 131072, 262144, 2097152, 16777216, 32768, 131072,\n  /* 7067 */ 262144, 2097152, 8388608, 16777216, 0, 0, 4, 16, 224, 512, 32768, 131072, 2097152, 16777216, 192, 32768, 0,\n  /* 7084 */ 0, 512, 4096, 4, 16, 192, 32768, 8388608, 0, 16, 64, 128, 8388608, 0, 0, 1024, 0, 4, 0, 0, 0, 3145728, 0,\n  /* 7107 */ 4, 128, 0, 0, 268435456, 2, 0, 0, 65536, 0, 0, 0, 65, 0, 64, 128, 8388608, 16777216, 1073741824, 0, 0, 512,\n  /* 7129 */ 2048, 32768, 262144, 524288, 8388608, 0, 0, 512, 131072, 524288, 8388608, 33554432, 0x80000000, 33554432,\n  /* 7143 */ 33554432, 0, 2, 4, 112, 128, -2113929216, 100663296, 100663296, 2, 4, 524288, 134217728, 0, 0, 8, 512,\n  /* 7160 */ 2048, 196608, 33554436, 0, 0, 33554436, 4224, 4224, 0, 65536, 100663296, 4224, 65536, 65536, 262144,\n  /* 7175 */ 33554432, 0, 2, 4, 16, 64, 128, 256, 0, 4224, 65536, 16777216, 262400, 65536, 4224, -1072627712, 805306384,\n  /* 7192 */ -1342177264, -1342177264, -1070006272, -1069989376, -1069989376, -1069989376, -258932720, -258932720,\n  /* 7200 */ -258932720, -258932720, -1069989360, -1065795072, -1061600768, -1069989376, -225378288, -258932720,\n  /* 7208 */ -258932720, -258932720, -225378288, 1260767, 1260767, 34815199, 1260767, 1260767, 1260767, 1260767,\n  /* 7218 */ 34815199, 1260767, 34815199, 34815199, 34815199, 1260767, 1260767, 169032927, 1242774751, -1978450721,\n  /* 7228 */ 169032927, -1978450721, -1978450721, -1978450721, 169032927, 169032927, 169032927, 169032927, -225231649,\n  /* 7237 */ -1173144353, -225231649, -225231649, -91013921, 0, 0, 0, 67108864, 0, 3751936, 0, 0, 528, 7946240,\n  /* 7251 */ 12140544, 0, 0, 0, 134217728, 0, 0, 0, 7, 27756528, -503316480, 0, 0, 9502720, 1610612736, 0, 0, 486539264,\n  /* 7269 */ 0, 0, 2048, 32768, 0, 0, 64, 128, 0, 0, 536870912, 0, 0, 208, 15360, 1245184, 0, 0, 0, 268435456, 0, 0, 0,\n  /* 7292 */ 15, 9633792, 0, 0, 0, 32, 512, 2048, 262144, 0, 3670016, 0, 0, 1040, 1040, 1, 2, 12, 80, 128, 7168, 8192,\n  /* 7314 */ 196608, 16, 64, 128, 3072, 4096, 8192, 65536, 131072, 0, 0, 32, 262144, 524288, 33554432, 134217728, 0, 0,\n  /* 7332 */ 0, 2, 8, 64, 128, 1024, 4096, 0, 0, 262144, 0, 4096, 4194304, 1, 1, 1, 0, 0, 2, 8, 16, 64\n];\n\nJSONiqParser.TOKEN =\n[\n  \"(0)\",\n  \"PragmaContents\",\n  \"DirCommentContents\",\n  \"DirPIContents\",\n  \"CDataSection\",\n  \"Wildcard\",\n  \"EQName\",\n  \"URILiteral\",\n  \"IntegerLiteral\",\n  \"DecimalLiteral\",\n  \"DoubleLiteral\",\n  \"StringLiteral\",\n  \"PredefinedEntityRef\",\n  \"'\\\"\\\"'\",\n  \"EscapeApos\",\n  \"ElementContentChar\",\n  \"QuotAttrContentChar\",\n  \"AposAttrContentChar\",\n  \"PITarget\",\n  \"NCName\",\n  \"QName\",\n  \"S\",\n  \"S\",\n  \"CharRef\",\n  \"CommentContents\",\n  \"EOF\",\n  \"'!'\",\n  \"'!='\",\n  \"'\\\"'\",\n  \"'#'\",\n  \"'#)'\",\n  \"'$'\",\n  \"'$$'\",\n  \"'%'\",\n  \"''''\",\n  \"'('\",\n  \"'(#'\",\n  \"'(:'\",\n  \"')'\",\n  \"'*'\",\n  \"'*'\",\n  \"'+'\",\n  \"','\",\n  \"'-'\",\n  \"'-->'\",\n  \"'.'\",\n  \"'..'\",\n  \"'/'\",\n  \"'//'\",\n  \"'/>'\",\n  \"':'\",\n  \"':)'\",\n  \"'::'\",\n  \"':='\",\n  \"';'\",\n  \"'<'\",\n  \"'<!--'\",\n  \"'</'\",\n  \"'<<'\",\n  \"'<='\",\n  \"'<?'\",\n  \"'='\",\n  \"'>'\",\n  \"'>='\",\n  \"'>>'\",\n  \"'?'\",\n  \"'?>'\",\n  \"'@'\",\n  \"'NaN'\",\n  \"'['\",\n  \"']'\",\n  \"'after'\",\n  \"'all'\",\n  \"'allowing'\",\n  \"'ancestor'\",\n  \"'ancestor-or-self'\",\n  \"'and'\",\n  \"'any'\",\n  \"'append'\",\n  \"'array'\",\n  \"'as'\",\n  \"'ascending'\",\n  \"'at'\",\n  \"'attribute'\",\n  \"'base-uri'\",\n  \"'before'\",\n  \"'boundary-space'\",\n  \"'break'\",\n  \"'by'\",\n  \"'case'\",\n  \"'cast'\",\n  \"'castable'\",\n  \"'catch'\",\n  \"'check'\",\n  \"'child'\",\n  \"'collation'\",\n  \"'collection'\",\n  \"'comment'\",\n  \"'constraint'\",\n  \"'construction'\",\n  \"'contains'\",\n  \"'content'\",\n  \"'context'\",\n  \"'continue'\",\n  \"'copy'\",\n  \"'copy-namespaces'\",\n  \"'count'\",\n  \"'decimal-format'\",\n  \"'decimal-separator'\",\n  \"'declare'\",\n  \"'default'\",\n  \"'delete'\",\n  \"'descendant'\",\n  \"'descendant-or-self'\",\n  \"'descending'\",\n  \"'diacritics'\",\n  \"'different'\",\n  \"'digit'\",\n  \"'distance'\",\n  \"'div'\",\n  \"'document'\",\n  \"'document-node'\",\n  \"'element'\",\n  \"'else'\",\n  \"'empty'\",\n  \"'empty-sequence'\",\n  \"'encoding'\",\n  \"'end'\",\n  \"'entire'\",\n  \"'eq'\",\n  \"'every'\",\n  \"'exactly'\",\n  \"'except'\",\n  \"'exit'\",\n  \"'external'\",\n  \"'false'\",\n  \"'first'\",\n  \"'following'\",\n  \"'following-sibling'\",\n  \"'for'\",\n  \"'foreach'\",\n  \"'foreign'\",\n  \"'from'\",\n  \"'ft-option'\",\n  \"'ftand'\",\n  \"'ftnot'\",\n  \"'ftor'\",\n  \"'function'\",\n  \"'ge'\",\n  \"'greatest'\",\n  \"'group'\",\n  \"'grouping-separator'\",\n  \"'gt'\",\n  \"'idiv'\",\n  \"'if'\",\n  \"'import'\",\n  \"'in'\",\n  \"'index'\",\n  \"'infinity'\",\n  \"'inherit'\",\n  \"'insensitive'\",\n  \"'insert'\",\n  \"'instance'\",\n  \"'integrity'\",\n  \"'intersect'\",\n  \"'into'\",\n  \"'is'\",\n  \"'item'\",\n  \"'json'\",\n  \"'json-item'\",\n  \"'jsoniq'\",\n  \"'key'\",\n  \"'language'\",\n  \"'last'\",\n  \"'lax'\",\n  \"'le'\",\n  \"'least'\",\n  \"'let'\",\n  \"'levels'\",\n  \"'loop'\",\n  \"'lowercase'\",\n  \"'lt'\",\n  \"'minus-sign'\",\n  \"'mod'\",\n  \"'modify'\",\n  \"'module'\",\n  \"'most'\",\n  \"'namespace'\",\n  \"'namespace-node'\",\n  \"'ne'\",\n  \"'next'\",\n  \"'no'\",\n  \"'no-inherit'\",\n  \"'no-preserve'\",\n  \"'node'\",\n  \"'nodes'\",\n  \"'not'\",\n  \"'null'\",\n  \"'object'\",\n  \"'occurs'\",\n  \"'of'\",\n  \"'on'\",\n  \"'only'\",\n  \"'option'\",\n  \"'or'\",\n  \"'order'\",\n  \"'ordered'\",\n  \"'ordering'\",\n  \"'paragraph'\",\n  \"'paragraphs'\",\n  \"'parent'\",\n  \"'pattern-separator'\",\n  \"'per-mille'\",\n  \"'percent'\",\n  \"'phrase'\",\n  \"'position'\",\n  \"'preceding'\",\n  \"'preceding-sibling'\",\n  \"'preserve'\",\n  \"'previous'\",\n  \"'processing-instruction'\",\n  \"'relationship'\",\n  \"'rename'\",\n  \"'replace'\",\n  \"'return'\",\n  \"'returning'\",\n  \"'revalidation'\",\n  \"'same'\",\n  \"'satisfies'\",\n  \"'schema'\",\n  \"'schema-attribute'\",\n  \"'schema-element'\",\n  \"'score'\",\n  \"'select'\",\n  \"'self'\",\n  \"'sensitive'\",\n  \"'sentence'\",\n  \"'sentences'\",\n  \"'skip'\",\n  \"'sliding'\",\n  \"'some'\",\n  \"'stable'\",\n  \"'start'\",\n  \"'stemming'\",\n  \"'stop'\",\n  \"'strict'\",\n  \"'strip'\",\n  \"'structured-item'\",\n  \"'switch'\",\n  \"'text'\",\n  \"'then'\",\n  \"'thesaurus'\",\n  \"'times'\",\n  \"'to'\",\n  \"'treat'\",\n  \"'true'\",\n  \"'try'\",\n  \"'tumbling'\",\n  \"'type'\",\n  \"'typeswitch'\",\n  \"'union'\",\n  \"'unique'\",\n  \"'unordered'\",\n  \"'updating'\",\n  \"'uppercase'\",\n  \"'using'\",\n  \"'validate'\",\n  \"'value'\",\n  \"'variable'\",\n  \"'version'\",\n  \"'weight'\",\n  \"'when'\",\n  \"'where'\",\n  \"'while'\",\n  \"'wildcards'\",\n  \"'window'\",\n  \"'with'\",\n  \"'without'\",\n  \"'word'\",\n  \"'words'\",\n  \"'zero-digit'\",\n  \"'{'\",\n  \"'{{'\",\n  \"'{|'\",\n  \"'|'\",\n  \"'||'\",\n  \"'|}'\",\n  \"'}'\",\n  \"'}}'\"\n];\n\n// End\n\n},{}],\"/node_modules/xqlint/lib/parsers/XQueryParser.js\":[function(_dereq_,module,exports){\n// This file was generated on Fri Apr 10, 2015 00:54 (UTC+01) by REx v5.33 which is Copyright (c) 1979-2015 by Gunther Rademacher <grd@gmx.net>\n// REx command line: XQueryParser.ebnf -ll 2 -backtrack -tree -javascript -a xqlint\n\n                                                            // line 2 \"XQueryParser.ebnf\"\n                                                            var XQueryParser = exports.XQueryParser = function XQueryParser(string, parsingEventHandler)\n                                                            {\n                                                              init(string, parsingEventHandler);\n                                                            // line 9 \"XQueryParser.js\"\n  var self = this;\n\n  this.ParseException = function(b, e, s, o, x)\n  {\n    var\n      begin = b,\n      end = e,\n      state = s,\n      offending = o,\n      expected = x;\n\n    this.getBegin = function() {return begin;};\n    this.getEnd = function() {return end;};\n    this.getState = function() {return state;};\n    this.getExpected = function() {return expected;};\n    this.getOffending = function() {return offending;};\n\n    this.getMessage = function()\n    {\n      return offending < 0 ? \"lexical analysis failed\" : \"syntax error\";\n    };\n  };\n\n  function init(string, parsingEventHandler)\n  {\n    eventHandler = parsingEventHandler;\n    input = string;\n    size = string.length;\n    reset(0, 0, 0);\n  }\n\n  this.getInput = function()\n  {\n    return input;\n  };\n\n  function reset(l, b, e)\n  {\n            b0 = b; e0 = b;\n    l1 = l; b1 = b; e1 = e;\n    l2 = 0;\n    end = e;\n    ex = -1;\n    memo = {};\n    eventHandler.reset(input);\n  }\n\n  this.getOffendingToken = function(e)\n  {\n    var o = e.getOffending();\n    return o >= 0 ? XQueryParser.TOKEN[o] : null;\n  };\n\n  this.getExpectedTokenSet = function(e)\n  {\n    var expected;\n    if (e.getExpected() < 0)\n    {\n      expected = XQueryParser.getTokenSet(- e.getState());\n    }\n    else\n    {\n      expected = [XQueryParser.TOKEN[e.getExpected()]];\n    }\n    return expected;\n  };\n\n  this.getErrorMessage = function(e)\n  {\n    var tokenSet = this.getExpectedTokenSet(e);\n    var found = this.getOffendingToken(e);\n    var prefix = input.substring(0, e.getBegin());\n    var lines = prefix.split(\"\\n\");\n    var line = lines.length;\n    var column = lines[line - 1].length + 1;\n    var size = e.getEnd() - e.getBegin();\n    return e.getMessage()\n         + (found == null ? \"\" : \", found \" + found)\n         + \"\\nwhile expecting \"\n         + (tokenSet.length == 1 ? tokenSet[0] : (\"[\" + tokenSet.join(\", \") + \"]\"))\n         + \"\\n\"\n         + (size == 0 || found != null ? \"\" : \"after successfully scanning \" + size + \" characters beginning \")\n         + \"at line \" + line + \", column \" + column + \":\\n...\"\n         + input.substring(e.getBegin(), Math.min(input.length, e.getBegin() + 64))\n         + \"...\";\n  };\n\n  this.parse_XQuery = function()\n  {\n    eventHandler.startNonterminal(\"XQuery\", e0);\n    lookahead1W(274);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | EOF | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' |\n                                    // '..' | '/' | '//' | ';' | '<' | '<!--' | '<?' | '@' | '[' | 'after' |\n                                    // 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' |\n                                    // 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'first' | 'following' | 'following-sibling' | 'for' |\n                                    // 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' |\n                                    // 'in' | 'index' | 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' |\n                                    // 'is' | 'item' | 'json' | 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' |\n                                    // 'lt' | 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' |\n                                    // 'node' | 'nodes' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'self' | 'sliding' | 'some' | 'stable' | 'start' | 'strict' |\n                                    // 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'try' | 'tumbling' |\n                                    // 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' |\n                                    // 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' | 'xquery' | '{' |\n                                    // '{|'\n    whitespace();\n    parse_Module();\n    shift(25);                      // EOF\n    eventHandler.endNonterminal(\"XQuery\", e0);\n  };\n\n  function parse_Module()\n  {\n    eventHandler.startNonterminal(\"Module\", e0);\n    switch (l1)\n    {\n    case 274:                       // 'xquery'\n      lookahead2W(198);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n                                    // ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' |\n                                    // 'castable' | 'contains' | 'div' | 'encoding' | 'eq' | 'except' | 'ge' | 'gt' |\n                                    // 'idiv' | 'instance' | 'intersect' | 'is' | 'le' | 'lt' | 'mod' | 'ne' | 'or' |\n                                    // 'to' | 'treat' | 'union' | 'version' | '|' | '||'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 64274                 // 'xquery' 'encoding'\n     || lk == 134930)               // 'xquery' 'version'\n    {\n      parse_VersionDecl();\n    }\n    lookahead1W(274);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | EOF | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' |\n                                    // '..' | '/' | '//' | ';' | '<' | '<!--' | '<?' | '@' | '[' | 'after' |\n                                    // 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' |\n                                    // 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'first' | 'following' | 'following-sibling' | 'for' |\n                                    // 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' |\n                                    // 'in' | 'index' | 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' |\n                                    // 'is' | 'item' | 'json' | 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' |\n                                    // 'lt' | 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' |\n                                    // 'node' | 'nodes' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'self' | 'sliding' | 'some' | 'stable' | 'start' | 'strict' |\n                                    // 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'try' | 'tumbling' |\n                                    // 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' |\n                                    // 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' | 'xquery' | '{' |\n                                    // '{|'\n    switch (l1)\n    {\n    case 182:                       // 'module'\n      lookahead2W(193);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n                                    // ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' |\n                                    // 'castable' | 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' |\n                                    // 'instance' | 'intersect' | 'is' | 'le' | 'lt' | 'mod' | 'namespace' | 'ne' |\n                                    // 'or' | 'to' | 'treat' | 'union' | '|' | '||'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 94390:                     // 'module' 'namespace'\n      whitespace();\n      parse_LibraryModule();\n      break;\n    default:\n      whitespace();\n      parse_MainModule();\n    }\n    eventHandler.endNonterminal(\"Module\", e0);\n  }\n\n  function parse_VersionDecl()\n  {\n    eventHandler.startNonterminal(\"VersionDecl\", e0);\n    shift(274);                     // 'xquery'\n    lookahead1W(116);               // S^WS | '(:' | 'encoding' | 'version'\n    switch (l1)\n    {\n    case 125:                       // 'encoding'\n      shift(125);                   // 'encoding'\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shift(11);                    // StringLiteral\n      break;\n    default:\n      shift(263);                   // 'version'\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shift(11);                    // StringLiteral\n      lookahead1W(109);             // S^WS | '(:' | ';' | 'encoding'\n      if (l1 == 125)                // 'encoding'\n      {\n        shift(125);                 // 'encoding'\n        lookahead1W(17);            // StringLiteral | S^WS | '(:'\n        shift(11);                  // StringLiteral\n      }\n    }\n    lookahead1W(28);                // S^WS | '(:' | ';'\n    whitespace();\n    parse_Separator();\n    eventHandler.endNonterminal(\"VersionDecl\", e0);\n  }\n\n  function parse_LibraryModule()\n  {\n    eventHandler.startNonterminal(\"LibraryModule\", e0);\n    parse_ModuleDecl();\n    lookahead1W(138);               // S^WS | EOF | '(:' | 'declare' | 'import'\n    whitespace();\n    parse_Prolog();\n    eventHandler.endNonterminal(\"LibraryModule\", e0);\n  }\n\n  function parse_ModuleDecl()\n  {\n    eventHandler.startNonterminal(\"ModuleDecl\", e0);\n    shift(182);                     // 'module'\n    lookahead1W(61);                // S^WS | '(:' | 'namespace'\n    shift(184);                     // 'namespace'\n    lookahead1W(248);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' |\n                                    // 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'last' | 'lax' | 'le' | 'let' |\n                                    // 'loop' | 'lt' | 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' |\n                                    // 'ne' | 'node' | 'nodes' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'self' | 'sliding' | 'some' | 'stable' | 'start' | 'strict' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' |\n                                    // 'union' | 'unordered' | 'updating' | 'validate' | 'value' | 'variable' |\n                                    // 'version' | 'where' | 'while' | 'with' | 'xquery'\n    whitespace();\n    parse_NCName();\n    lookahead1W(29);                // S^WS | '(:' | '='\n    shift(60);                      // '='\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    lookahead1W(28);                // S^WS | '(:' | ';'\n    whitespace();\n    parse_Separator();\n    eventHandler.endNonterminal(\"ModuleDecl\", e0);\n  }\n\n  function parse_Prolog()\n  {\n    eventHandler.startNonterminal(\"Prolog\", e0);\n    for (;;)\n    {\n      lookahead1W(274);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | EOF | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' |\n                                    // '..' | '/' | '//' | ';' | '<' | '<!--' | '<?' | '@' | '[' | 'after' |\n                                    // 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' |\n                                    // 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'first' | 'following' | 'following-sibling' | 'for' |\n                                    // 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' |\n                                    // 'in' | 'index' | 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' |\n                                    // 'is' | 'item' | 'json' | 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' |\n                                    // 'lt' | 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' |\n                                    // 'node' | 'nodes' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'self' | 'sliding' | 'some' | 'stable' | 'start' | 'strict' |\n                                    // 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'try' | 'tumbling' |\n                                    // 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' |\n                                    // 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' | 'xquery' | '{' |\n                                    // '{|'\n      switch (l1)\n      {\n      case 108:                     // 'declare'\n        lookahead2W(213);           // S^WS | EOF | '!' | '!=' | '#' | '%' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' |\n                                    // '//' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' |\n                                    // 'base-uri' | 'boundary-space' | 'cast' | 'castable' | 'collection' |\n                                    // 'construction' | 'contains' | 'context' | 'copy-namespaces' | 'decimal-format' |\n                                    // 'default' | 'div' | 'eq' | 'except' | 'ft-option' | 'function' | 'ge' | 'gt' |\n                                    // 'idiv' | 'index' | 'instance' | 'integrity' | 'intersect' | 'is' | 'le' | 'lt' |\n                                    // 'mod' | 'namespace' | 'ne' | 'option' | 'or' | 'ordering' | 'revalidation' |\n                                    // 'to' | 'treat' | 'union' | 'updating' | 'variable' | '|' | '||'\n        break;\n      case 153:                     // 'import'\n        lookahead2W(201);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n                                    // ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' |\n                                    // 'castable' | 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' |\n                                    // 'instance' | 'intersect' | 'is' | 'le' | 'lt' | 'mod' | 'module' | 'ne' | 'or' |\n                                    // 'schema' | 'to' | 'treat' | 'union' | '|' | '||'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 42604               // 'declare' 'base-uri'\n       && lk != 43628               // 'declare' 'boundary-space'\n       && lk != 50284               // 'declare' 'construction'\n       && lk != 53356               // 'declare' 'copy-namespaces'\n       && lk != 54380               // 'declare' 'decimal-format'\n       && lk != 55916               // 'declare' 'default'\n       && lk != 72300               // 'declare' 'ft-option'\n       && lk != 93337               // 'import' 'module'\n       && lk != 94316               // 'declare' 'namespace'\n       && lk != 104044              // 'declare' 'ordering'\n       && lk != 113772              // 'declare' 'revalidation'\n       && lk != 115353)             // 'import' 'schema'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 108:                     // 'declare'\n        lookahead2W(178);           // S^WS | '(:' | 'base-uri' | 'boundary-space' | 'construction' |\n                                    // 'copy-namespaces' | 'decimal-format' | 'default' | 'ft-option' | 'namespace' |\n                                    // 'ordering' | 'revalidation'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 55916)              // 'declare' 'default'\n      {\n        lk = memoized(0, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            try_DefaultNamespaceDecl();\n            lk = -1;\n          }\n          catch (p1A)\n          {\n            lk = -2;\n          }\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(0, e0, lk);\n        }\n      }\n      switch (lk)\n      {\n      case -1:\n        whitespace();\n        parse_DefaultNamespaceDecl();\n        break;\n      case 94316:                   // 'declare' 'namespace'\n        whitespace();\n        parse_NamespaceDecl();\n        break;\n      case 153:                     // 'import'\n        whitespace();\n        parse_Import();\n        break;\n      case 72300:                   // 'declare' 'ft-option'\n        whitespace();\n        parse_FTOptionDecl();\n        break;\n      default:\n        whitespace();\n        parse_Setter();\n      }\n      lookahead1W(28);              // S^WS | '(:' | ';'\n      whitespace();\n      parse_Separator();\n    }\n    for (;;)\n    {\n      lookahead1W(274);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | EOF | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' |\n                                    // '..' | '/' | '//' | ';' | '<' | '<!--' | '<?' | '@' | '[' | 'after' |\n                                    // 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' |\n                                    // 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'first' | 'following' | 'following-sibling' | 'for' |\n                                    // 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' |\n                                    // 'in' | 'index' | 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' |\n                                    // 'is' | 'item' | 'json' | 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' |\n                                    // 'lt' | 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' |\n                                    // 'node' | 'nodes' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'self' | 'sliding' | 'some' | 'stable' | 'start' | 'strict' |\n                                    // 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'try' | 'tumbling' |\n                                    // 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' |\n                                    // 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' | 'xquery' | '{' |\n                                    // '{|'\n      switch (l1)\n      {\n      case 108:                     // 'declare'\n        lookahead2W(210);           // S^WS | EOF | '!' | '!=' | '#' | '%' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' |\n                                    // '//' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' |\n                                    // 'castable' | 'collection' | 'contains' | 'context' | 'div' | 'eq' | 'except' |\n                                    // 'function' | 'ge' | 'gt' | 'idiv' | 'index' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'is' | 'le' | 'lt' | 'mod' | 'ne' | 'option' | 'or' | 'to' |\n                                    // 'treat' | 'union' | 'updating' | 'variable' | '|' | '||'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 16492               // 'declare' '%'\n       && lk != 48748               // 'declare' 'collection'\n       && lk != 51820               // 'declare' 'context'\n       && lk != 74348               // 'declare' 'function'\n       && lk != 79468               // 'declare' 'index'\n       && lk != 82540               // 'declare' 'integrity'\n       && lk != 101996              // 'declare' 'option'\n       && lk != 131692              // 'declare' 'updating'\n       && lk != 134252)             // 'declare' 'variable'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 108:                     // 'declare'\n        lookahead2W(175);           // S^WS | '%' | '(:' | 'collection' | 'context' | 'function' | 'index' |\n                                    // 'integrity' | 'option' | 'updating' | 'variable'\n        break;\n      default:\n        lk = l1;\n      }\n      switch (lk)\n      {\n      case 51820:                   // 'declare' 'context'\n        whitespace();\n        parse_ContextItemDecl();\n        break;\n      case 101996:                  // 'declare' 'option'\n        whitespace();\n        parse_OptionDecl();\n        break;\n      default:\n        whitespace();\n        parse_AnnotatedDecl();\n      }\n      lookahead1W(28);              // S^WS | '(:' | ';'\n      whitespace();\n      parse_Separator();\n    }\n    eventHandler.endNonterminal(\"Prolog\", e0);\n  }\n\n  function parse_Separator()\n  {\n    eventHandler.startNonterminal(\"Separator\", e0);\n    shift(53);                      // ';'\n    eventHandler.endNonterminal(\"Separator\", e0);\n  }\n\n  function parse_Setter()\n  {\n    eventHandler.startNonterminal(\"Setter\", e0);\n    switch (l1)\n    {\n    case 108:                       // 'declare'\n      lookahead2W(172);             // S^WS | '(:' | 'base-uri' | 'boundary-space' | 'construction' |\n                                    // 'copy-namespaces' | 'decimal-format' | 'default' | 'ordering' | 'revalidation'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 55916)                // 'declare' 'default'\n    {\n      lk = memoized(1, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_DefaultCollationDecl();\n          lk = -2;\n        }\n        catch (p2A)\n        {\n          try\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            try_EmptyOrderDecl();\n            lk = -6;\n          }\n          catch (p6A)\n          {\n            lk = -9;\n          }\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(1, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case 43628:                     // 'declare' 'boundary-space'\n      parse_BoundarySpaceDecl();\n      break;\n    case -2:\n      parse_DefaultCollationDecl();\n      break;\n    case 42604:                     // 'declare' 'base-uri'\n      parse_BaseURIDecl();\n      break;\n    case 50284:                     // 'declare' 'construction'\n      parse_ConstructionDecl();\n      break;\n    case 104044:                    // 'declare' 'ordering'\n      parse_OrderingModeDecl();\n      break;\n    case -6:\n      parse_EmptyOrderDecl();\n      break;\n    case 113772:                    // 'declare' 'revalidation'\n      parse_RevalidationDecl();\n      break;\n    case 53356:                     // 'declare' 'copy-namespaces'\n      parse_CopyNamespacesDecl();\n      break;\n    default:\n      parse_DecimalFormatDecl();\n    }\n    eventHandler.endNonterminal(\"Setter\", e0);\n  }\n\n  function parse_BoundarySpaceDecl()\n  {\n    eventHandler.startNonterminal(\"BoundarySpaceDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(33);                // S^WS | '(:' | 'boundary-space'\n    shift(85);                      // 'boundary-space'\n    lookahead1W(133);               // S^WS | '(:' | 'preserve' | 'strip'\n    switch (l1)\n    {\n    case 214:                       // 'preserve'\n      shift(214);                   // 'preserve'\n      break;\n    default:\n      shift(241);                   // 'strip'\n    }\n    eventHandler.endNonterminal(\"BoundarySpaceDecl\", e0);\n  }\n\n  function parse_DefaultCollationDecl()\n  {\n    eventHandler.startNonterminal(\"DefaultCollationDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(46);                // S^WS | '(:' | 'default'\n    shift(109);                     // 'default'\n    lookahead1W(38);                // S^WS | '(:' | 'collation'\n    shift(94);                      // 'collation'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    eventHandler.endNonterminal(\"DefaultCollationDecl\", e0);\n  }\n\n  function try_DefaultCollationDecl()\n  {\n    shiftT(108);                    // 'declare'\n    lookahead1W(46);                // S^WS | '(:' | 'default'\n    shiftT(109);                    // 'default'\n    lookahead1W(38);                // S^WS | '(:' | 'collation'\n    shiftT(94);                     // 'collation'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shiftT(7);                      // URILiteral\n  }\n\n  function parse_BaseURIDecl()\n  {\n    eventHandler.startNonterminal(\"BaseURIDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(32);                // S^WS | '(:' | 'base-uri'\n    shift(83);                      // 'base-uri'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    eventHandler.endNonterminal(\"BaseURIDecl\", e0);\n  }\n\n  function parse_ConstructionDecl()\n  {\n    eventHandler.startNonterminal(\"ConstructionDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(41);                // S^WS | '(:' | 'construction'\n    shift(98);                      // 'construction'\n    lookahead1W(133);               // S^WS | '(:' | 'preserve' | 'strip'\n    switch (l1)\n    {\n    case 241:                       // 'strip'\n      shift(241);                   // 'strip'\n      break;\n    default:\n      shift(214);                   // 'preserve'\n    }\n    eventHandler.endNonterminal(\"ConstructionDecl\", e0);\n  }\n\n  function parse_OrderingModeDecl()\n  {\n    eventHandler.startNonterminal(\"OrderingModeDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(68);                // S^WS | '(:' | 'ordering'\n    shift(203);                     // 'ordering'\n    lookahead1W(131);               // S^WS | '(:' | 'ordered' | 'unordered'\n    switch (l1)\n    {\n    case 202:                       // 'ordered'\n      shift(202);                   // 'ordered'\n      break;\n    default:\n      shift(256);                   // 'unordered'\n    }\n    eventHandler.endNonterminal(\"OrderingModeDecl\", e0);\n  }\n\n  function parse_EmptyOrderDecl()\n  {\n    eventHandler.startNonterminal(\"EmptyOrderDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(46);                // S^WS | '(:' | 'default'\n    shift(109);                     // 'default'\n    lookahead1W(67);                // S^WS | '(:' | 'order'\n    shift(201);                     // 'order'\n    lookahead1W(49);                // S^WS | '(:' | 'empty'\n    shift(123);                     // 'empty'\n    lookahead1W(121);               // S^WS | '(:' | 'greatest' | 'least'\n    switch (l1)\n    {\n    case 147:                       // 'greatest'\n      shift(147);                   // 'greatest'\n      break;\n    default:\n      shift(173);                   // 'least'\n    }\n    eventHandler.endNonterminal(\"EmptyOrderDecl\", e0);\n  }\n\n  function try_EmptyOrderDecl()\n  {\n    shiftT(108);                    // 'declare'\n    lookahead1W(46);                // S^WS | '(:' | 'default'\n    shiftT(109);                    // 'default'\n    lookahead1W(67);                // S^WS | '(:' | 'order'\n    shiftT(201);                    // 'order'\n    lookahead1W(49);                // S^WS | '(:' | 'empty'\n    shiftT(123);                    // 'empty'\n    lookahead1W(121);               // S^WS | '(:' | 'greatest' | 'least'\n    switch (l1)\n    {\n    case 147:                       // 'greatest'\n      shiftT(147);                  // 'greatest'\n      break;\n    default:\n      shiftT(173);                  // 'least'\n    }\n  }\n\n  function parse_CopyNamespacesDecl()\n  {\n    eventHandler.startNonterminal(\"CopyNamespacesDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(44);                // S^WS | '(:' | 'copy-namespaces'\n    shift(104);                     // 'copy-namespaces'\n    lookahead1W(128);               // S^WS | '(:' | 'no-preserve' | 'preserve'\n    whitespace();\n    parse_PreserveMode();\n    lookahead1W(25);                // S^WS | '(:' | ','\n    shift(41);                      // ','\n    lookahead1W(123);               // S^WS | '(:' | 'inherit' | 'no-inherit'\n    whitespace();\n    parse_InheritMode();\n    eventHandler.endNonterminal(\"CopyNamespacesDecl\", e0);\n  }\n\n  function parse_PreserveMode()\n  {\n    eventHandler.startNonterminal(\"PreserveMode\", e0);\n    switch (l1)\n    {\n    case 214:                       // 'preserve'\n      shift(214);                   // 'preserve'\n      break;\n    default:\n      shift(190);                   // 'no-preserve'\n    }\n    eventHandler.endNonterminal(\"PreserveMode\", e0);\n  }\n\n  function parse_InheritMode()\n  {\n    eventHandler.startNonterminal(\"InheritMode\", e0);\n    switch (l1)\n    {\n    case 157:                       // 'inherit'\n      shift(157);                   // 'inherit'\n      break;\n    default:\n      shift(189);                   // 'no-inherit'\n    }\n    eventHandler.endNonterminal(\"InheritMode\", e0);\n  }\n\n  function parse_DecimalFormatDecl()\n  {\n    eventHandler.startNonterminal(\"DecimalFormatDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(114);               // S^WS | '(:' | 'decimal-format' | 'default'\n    switch (l1)\n    {\n    case 106:                       // 'decimal-format'\n      shift(106);                   // 'decimal-format'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n      whitespace();\n      parse_EQName();\n      break;\n    default:\n      shift(109);                   // 'default'\n      lookahead1W(45);              // S^WS | '(:' | 'decimal-format'\n      shift(106);                   // 'decimal-format'\n    }\n    for (;;)\n    {\n      lookahead1W(180);             // S^WS | '(:' | ';' | 'NaN' | 'decimal-separator' | 'digit' |\n                                    // 'grouping-separator' | 'infinity' | 'minus-sign' | 'pattern-separator' |\n                                    // 'per-mille' | 'percent' | 'zero-digit'\n      if (l1 == 53)                 // ';'\n      {\n        break;\n      }\n      whitespace();\n      parse_DFPropertyName();\n      lookahead1W(29);              // S^WS | '(:' | '='\n      shift(60);                    // '='\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shift(11);                    // StringLiteral\n    }\n    eventHandler.endNonterminal(\"DecimalFormatDecl\", e0);\n  }\n\n  function parse_DFPropertyName()\n  {\n    eventHandler.startNonterminal(\"DFPropertyName\", e0);\n    switch (l1)\n    {\n    case 107:                       // 'decimal-separator'\n      shift(107);                   // 'decimal-separator'\n      break;\n    case 149:                       // 'grouping-separator'\n      shift(149);                   // 'grouping-separator'\n      break;\n    case 156:                       // 'infinity'\n      shift(156);                   // 'infinity'\n      break;\n    case 179:                       // 'minus-sign'\n      shift(179);                   // 'minus-sign'\n      break;\n    case 67:                        // 'NaN'\n      shift(67);                    // 'NaN'\n      break;\n    case 209:                       // 'percent'\n      shift(209);                   // 'percent'\n      break;\n    case 208:                       // 'per-mille'\n      shift(208);                   // 'per-mille'\n      break;\n    case 275:                       // 'zero-digit'\n      shift(275);                   // 'zero-digit'\n      break;\n    case 116:                       // 'digit'\n      shift(116);                   // 'digit'\n      break;\n    default:\n      shift(207);                   // 'pattern-separator'\n    }\n    eventHandler.endNonterminal(\"DFPropertyName\", e0);\n  }\n\n  function parse_Import()\n  {\n    eventHandler.startNonterminal(\"Import\", e0);\n    switch (l1)\n    {\n    case 153:                       // 'import'\n      lookahead2W(126);             // S^WS | '(:' | 'module' | 'schema'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 115353:                    // 'import' 'schema'\n      parse_SchemaImport();\n      break;\n    default:\n      parse_ModuleImport();\n    }\n    eventHandler.endNonterminal(\"Import\", e0);\n  }\n\n  function parse_SchemaImport()\n  {\n    eventHandler.startNonterminal(\"SchemaImport\", e0);\n    shift(153);                     // 'import'\n    lookahead1W(73);                // S^WS | '(:' | 'schema'\n    shift(225);                     // 'schema'\n    lookahead1W(137);               // URILiteral | S^WS | '(:' | 'default' | 'namespace'\n    if (l1 != 7)                    // URILiteral\n    {\n      whitespace();\n      parse_SchemaPrefix();\n    }\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    lookahead1W(108);               // S^WS | '(:' | ';' | 'at'\n    if (l1 == 81)                   // 'at'\n    {\n      shift(81);                    // 'at'\n      lookahead1W(15);              // URILiteral | S^WS | '(:'\n      shift(7);                     // URILiteral\n      for (;;)\n      {\n        lookahead1W(103);           // S^WS | '(:' | ',' | ';'\n        if (l1 != 41)               // ','\n        {\n          break;\n        }\n        shift(41);                  // ','\n        lookahead1W(15);            // URILiteral | S^WS | '(:'\n        shift(7);                   // URILiteral\n      }\n    }\n    eventHandler.endNonterminal(\"SchemaImport\", e0);\n  }\n\n  function parse_SchemaPrefix()\n  {\n    eventHandler.startNonterminal(\"SchemaPrefix\", e0);\n    switch (l1)\n    {\n    case 184:                       // 'namespace'\n      shift(184);                   // 'namespace'\n      lookahead1W(248);             // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' |\n                                    // 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'last' | 'lax' | 'le' | 'let' |\n                                    // 'loop' | 'lt' | 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' |\n                                    // 'ne' | 'node' | 'nodes' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'self' | 'sliding' | 'some' | 'stable' | 'start' | 'strict' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' |\n                                    // 'union' | 'unordered' | 'updating' | 'validate' | 'value' | 'variable' |\n                                    // 'version' | 'where' | 'while' | 'with' | 'xquery'\n      whitespace();\n      parse_NCName();\n      lookahead1W(29);              // S^WS | '(:' | '='\n      shift(60);                    // '='\n      break;\n    default:\n      shift(109);                   // 'default'\n      lookahead1W(47);              // S^WS | '(:' | 'element'\n      shift(121);                   // 'element'\n      lookahead1W(61);              // S^WS | '(:' | 'namespace'\n      shift(184);                   // 'namespace'\n    }\n    eventHandler.endNonterminal(\"SchemaPrefix\", e0);\n  }\n\n  function parse_ModuleImport()\n  {\n    eventHandler.startNonterminal(\"ModuleImport\", e0);\n    shift(153);                     // 'import'\n    lookahead1W(60);                // S^WS | '(:' | 'module'\n    shift(182);                     // 'module'\n    lookahead1W(90);                // URILiteral | S^WS | '(:' | 'namespace'\n    if (l1 == 184)                  // 'namespace'\n    {\n      shift(184);                   // 'namespace'\n      lookahead1W(248);             // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' |\n                                    // 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'last' | 'lax' | 'le' | 'let' |\n                                    // 'loop' | 'lt' | 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' |\n                                    // 'ne' | 'node' | 'nodes' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'self' | 'sliding' | 'some' | 'stable' | 'start' | 'strict' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' |\n                                    // 'union' | 'unordered' | 'updating' | 'validate' | 'value' | 'variable' |\n                                    // 'version' | 'where' | 'while' | 'with' | 'xquery'\n      whitespace();\n      parse_NCName();\n      lookahead1W(29);              // S^WS | '(:' | '='\n      shift(60);                    // '='\n    }\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    lookahead1W(108);               // S^WS | '(:' | ';' | 'at'\n    if (l1 == 81)                   // 'at'\n    {\n      shift(81);                    // 'at'\n      lookahead1W(15);              // URILiteral | S^WS | '(:'\n      shift(7);                     // URILiteral\n      for (;;)\n      {\n        lookahead1W(103);           // S^WS | '(:' | ',' | ';'\n        if (l1 != 41)               // ','\n        {\n          break;\n        }\n        shift(41);                  // ','\n        lookahead1W(15);            // URILiteral | S^WS | '(:'\n        shift(7);                   // URILiteral\n      }\n    }\n    eventHandler.endNonterminal(\"ModuleImport\", e0);\n  }\n\n  function parse_NamespaceDecl()\n  {\n    eventHandler.startNonterminal(\"NamespaceDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(61);                // S^WS | '(:' | 'namespace'\n    shift(184);                     // 'namespace'\n    lookahead1W(248);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' |\n                                    // 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'last' | 'lax' | 'le' | 'let' |\n                                    // 'loop' | 'lt' | 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' |\n                                    // 'ne' | 'node' | 'nodes' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'self' | 'sliding' | 'some' | 'stable' | 'start' | 'strict' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' |\n                                    // 'union' | 'unordered' | 'updating' | 'validate' | 'value' | 'variable' |\n                                    // 'version' | 'where' | 'while' | 'with' | 'xquery'\n    whitespace();\n    parse_NCName();\n    lookahead1W(29);                // S^WS | '(:' | '='\n    shift(60);                      // '='\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    eventHandler.endNonterminal(\"NamespaceDecl\", e0);\n  }\n\n  function parse_DefaultNamespaceDecl()\n  {\n    eventHandler.startNonterminal(\"DefaultNamespaceDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(46);                // S^WS | '(:' | 'default'\n    shift(109);                     // 'default'\n    lookahead1W(115);               // S^WS | '(:' | 'element' | 'function'\n    switch (l1)\n    {\n    case 121:                       // 'element'\n      shift(121);                   // 'element'\n      break;\n    default:\n      shift(145);                   // 'function'\n    }\n    lookahead1W(61);                // S^WS | '(:' | 'namespace'\n    shift(184);                     // 'namespace'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    eventHandler.endNonterminal(\"DefaultNamespaceDecl\", e0);\n  }\n\n  function try_DefaultNamespaceDecl()\n  {\n    shiftT(108);                    // 'declare'\n    lookahead1W(46);                // S^WS | '(:' | 'default'\n    shiftT(109);                    // 'default'\n    lookahead1W(115);               // S^WS | '(:' | 'element' | 'function'\n    switch (l1)\n    {\n    case 121:                       // 'element'\n      shiftT(121);                  // 'element'\n      break;\n    default:\n      shiftT(145);                  // 'function'\n    }\n    lookahead1W(61);                // S^WS | '(:' | 'namespace'\n    shiftT(184);                    // 'namespace'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shiftT(7);                      // URILiteral\n  }\n\n  function parse_FTOptionDecl()\n  {\n    eventHandler.startNonterminal(\"FTOptionDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(52);                // S^WS | '(:' | 'ft-option'\n    shift(141);                     // 'ft-option'\n    lookahead1W(81);                // S^WS | '(:' | 'using'\n    whitespace();\n    parse_FTMatchOptions();\n    eventHandler.endNonterminal(\"FTOptionDecl\", e0);\n  }\n\n  function parse_AnnotatedDecl()\n  {\n    eventHandler.startNonterminal(\"AnnotatedDecl\", e0);\n    shift(108);                     // 'declare'\n    for (;;)\n    {\n      lookahead1W(170);             // S^WS | '%' | '(:' | 'collection' | 'function' | 'index' | 'integrity' |\n                                    // 'updating' | 'variable'\n      if (l1 != 32                  // '%'\n       && l1 != 257)                // 'updating'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 257:                     // 'updating'\n        whitespace();\n        parse_CompatibilityAnnotation();\n        break;\n      default:\n        whitespace();\n        parse_Annotation();\n      }\n    }\n    switch (l1)\n    {\n    case 262:                       // 'variable'\n      whitespace();\n      parse_VarDecl();\n      break;\n    case 145:                       // 'function'\n      whitespace();\n      parse_FunctionDecl();\n      break;\n    case 95:                        // 'collection'\n      whitespace();\n      parse_CollectionDecl();\n      break;\n    case 155:                       // 'index'\n      whitespace();\n      parse_IndexDecl();\n      break;\n    default:\n      whitespace();\n      parse_ICDecl();\n    }\n    eventHandler.endNonterminal(\"AnnotatedDecl\", e0);\n  }\n\n  function parse_CompatibilityAnnotation()\n  {\n    eventHandler.startNonterminal(\"CompatibilityAnnotation\", e0);\n    shift(257);                     // 'updating'\n    eventHandler.endNonterminal(\"CompatibilityAnnotation\", e0);\n  }\n\n  function parse_Annotation()\n  {\n    eventHandler.startNonterminal(\"Annotation\", e0);\n    shift(32);                      // '%'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    whitespace();\n    parse_EQName();\n    lookahead1W(171);               // S^WS | '%' | '(' | '(:' | 'collection' | 'function' | 'index' | 'integrity' |\n                                    // 'updating' | 'variable'\n    if (l1 == 34)                   // '('\n    {\n      shift(34);                    // '('\n      lookahead1W(154);             // IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral | S^WS | '(:'\n      whitespace();\n      parse_Literal();\n      for (;;)\n      {\n        lookahead1W(101);           // S^WS | '(:' | ')' | ','\n        if (l1 != 41)               // ','\n        {\n          break;\n        }\n        shift(41);                  // ','\n        lookahead1W(154);           // IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral | S^WS | '(:'\n        whitespace();\n        parse_Literal();\n      }\n      shift(37);                    // ')'\n    }\n    eventHandler.endNonterminal(\"Annotation\", e0);\n  }\n\n  function try_Annotation()\n  {\n    shiftT(32);                     // '%'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    try_EQName();\n    lookahead1W(171);               // S^WS | '%' | '(' | '(:' | 'collection' | 'function' | 'index' | 'integrity' |\n                                    // 'updating' | 'variable'\n    if (l1 == 34)                   // '('\n    {\n      shiftT(34);                   // '('\n      lookahead1W(154);             // IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral | S^WS | '(:'\n      try_Literal();\n      for (;;)\n      {\n        lookahead1W(101);           // S^WS | '(:' | ')' | ','\n        if (l1 != 41)               // ','\n        {\n          break;\n        }\n        shiftT(41);                 // ','\n        lookahead1W(154);           // IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral | S^WS | '(:'\n        try_Literal();\n      }\n      shiftT(37);                   // ')'\n    }\n  }\n\n  function parse_VarDecl()\n  {\n    eventHandler.startNonterminal(\"VarDecl\", e0);\n    shift(262);                     // 'variable'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    whitespace();\n    parse_VarName();\n    lookahead1W(147);               // S^WS | '(:' | ':=' | 'as' | 'external'\n    if (l1 == 79)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    lookahead1W(106);               // S^WS | '(:' | ':=' | 'external'\n    switch (l1)\n    {\n    case 52:                        // ':='\n      shift(52);                    // ':='\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      whitespace();\n      parse_VarValue();\n      break;\n    default:\n      shift(133);                   // 'external'\n      lookahead1W(104);             // S^WS | '(:' | ':=' | ';'\n      if (l1 == 52)                 // ':='\n      {\n        shift(52);                  // ':='\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n        whitespace();\n        parse_VarDefaultValue();\n      }\n    }\n    eventHandler.endNonterminal(\"VarDecl\", e0);\n  }\n\n  function parse_VarValue()\n  {\n    eventHandler.startNonterminal(\"VarValue\", e0);\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"VarValue\", e0);\n  }\n\n  function parse_VarDefaultValue()\n  {\n    eventHandler.startNonterminal(\"VarDefaultValue\", e0);\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"VarDefaultValue\", e0);\n  }\n\n  function parse_ContextItemDecl()\n  {\n    eventHandler.startNonterminal(\"ContextItemDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(43);                // S^WS | '(:' | 'context'\n    shift(101);                     // 'context'\n    lookahead1W(55);                // S^WS | '(:' | 'item'\n    shift(165);                     // 'item'\n    lookahead1W(147);               // S^WS | '(:' | ':=' | 'as' | 'external'\n    if (l1 == 79)                   // 'as'\n    {\n      shift(79);                    // 'as'\n      lookahead1W(259);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n      whitespace();\n      parse_ItemType();\n    }\n    lookahead1W(106);               // S^WS | '(:' | ':=' | 'external'\n    switch (l1)\n    {\n    case 52:                        // ':='\n      shift(52);                    // ':='\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      whitespace();\n      parse_VarValue();\n      break;\n    default:\n      shift(133);                   // 'external'\n      lookahead1W(104);             // S^WS | '(:' | ':=' | ';'\n      if (l1 == 52)                 // ':='\n      {\n        shift(52);                  // ':='\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n        whitespace();\n        parse_VarDefaultValue();\n      }\n    }\n    eventHandler.endNonterminal(\"ContextItemDecl\", e0);\n  }\n\n  function parse_ParamList()\n  {\n    eventHandler.startNonterminal(\"ParamList\", e0);\n    parse_Param();\n    for (;;)\n    {\n      lookahead1W(101);             // S^WS | '(:' | ')' | ','\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shift(41);                    // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      whitespace();\n      parse_Param();\n    }\n    eventHandler.endNonterminal(\"ParamList\", e0);\n  }\n\n  function try_ParamList()\n  {\n    try_Param();\n    for (;;)\n    {\n      lookahead1W(101);             // S^WS | '(:' | ')' | ','\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shiftT(41);                   // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      try_Param();\n    }\n  }\n\n  function parse_Param()\n  {\n    eventHandler.startNonterminal(\"Param\", e0);\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    whitespace();\n    parse_EQName();\n    lookahead1W(143);               // S^WS | '(:' | ')' | ',' | 'as'\n    if (l1 == 79)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    eventHandler.endNonterminal(\"Param\", e0);\n  }\n\n  function try_Param()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    try_EQName();\n    lookahead1W(143);               // S^WS | '(:' | ')' | ',' | 'as'\n    if (l1 == 79)                   // 'as'\n    {\n      try_TypeDeclaration();\n    }\n  }\n\n  function parse_FunctionBody()\n  {\n    eventHandler.startNonterminal(\"FunctionBody\", e0);\n    parse_EnclosedExpr();\n    eventHandler.endNonterminal(\"FunctionBody\", e0);\n  }\n\n  function try_FunctionBody()\n  {\n    try_EnclosedExpr();\n  }\n\n  function parse_EnclosedExpr()\n  {\n    eventHandler.startNonterminal(\"EnclosedExpr\", e0);\n    shift(276);                     // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_Expr();\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"EnclosedExpr\", e0);\n  }\n\n  function try_EnclosedExpr()\n  {\n    shiftT(276);                    // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_Expr();\n    shiftT(282);                    // '}'\n  }\n\n  function parse_OptionDecl()\n  {\n    eventHandler.startNonterminal(\"OptionDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(66);                // S^WS | '(:' | 'option'\n    shift(199);                     // 'option'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    whitespace();\n    parse_EQName();\n    lookahead1W(17);                // StringLiteral | S^WS | '(:'\n    shift(11);                      // StringLiteral\n    eventHandler.endNonterminal(\"OptionDecl\", e0);\n  }\n\n  function parse_Expr()\n  {\n    eventHandler.startNonterminal(\"Expr\", e0);\n    parse_ExprSingle();\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shift(41);                    // ','\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      whitespace();\n      parse_ExprSingle();\n    }\n    eventHandler.endNonterminal(\"Expr\", e0);\n  }\n\n  function try_Expr()\n  {\n    try_ExprSingle();\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shiftT(41);                   // ','\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      try_ExprSingle();\n    }\n  }\n\n  function parse_FLWORExpr()\n  {\n    eventHandler.startNonterminal(\"FLWORExpr\", e0);\n    parse_InitialClause();\n    for (;;)\n    {\n      lookahead1W(173);             // S^WS | '(:' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' | 'stable' |\n                                    // 'where'\n      if (l1 == 220)                // 'return'\n      {\n        break;\n      }\n      whitespace();\n      parse_IntermediateClause();\n    }\n    whitespace();\n    parse_ReturnClause();\n    eventHandler.endNonterminal(\"FLWORExpr\", e0);\n  }\n\n  function try_FLWORExpr()\n  {\n    try_InitialClause();\n    for (;;)\n    {\n      lookahead1W(173);             // S^WS | '(:' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' | 'stable' |\n                                    // 'where'\n      if (l1 == 220)                // 'return'\n      {\n        break;\n      }\n      try_IntermediateClause();\n    }\n    try_ReturnClause();\n  }\n\n  function parse_InitialClause()\n  {\n    eventHandler.startNonterminal(\"InitialClause\", e0);\n    switch (l1)\n    {\n    case 137:                       // 'for'\n      lookahead2W(141);             // S^WS | '$' | '(:' | 'sliding' | 'tumbling'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 16009:                     // 'for' '$'\n      parse_ForClause();\n      break;\n    case 174:                       // 'let'\n      parse_LetClause();\n      break;\n    default:\n      parse_WindowClause();\n    }\n    eventHandler.endNonterminal(\"InitialClause\", e0);\n  }\n\n  function try_InitialClause()\n  {\n    switch (l1)\n    {\n    case 137:                       // 'for'\n      lookahead2W(141);             // S^WS | '$' | '(:' | 'sliding' | 'tumbling'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 16009:                     // 'for' '$'\n      try_ForClause();\n      break;\n    case 174:                       // 'let'\n      try_LetClause();\n      break;\n    default:\n      try_WindowClause();\n    }\n  }\n\n  function parse_IntermediateClause()\n  {\n    eventHandler.startNonterminal(\"IntermediateClause\", e0);\n    switch (l1)\n    {\n    case 137:                       // 'for'\n    case 174:                       // 'let'\n      parse_InitialClause();\n      break;\n    case 266:                       // 'where'\n      parse_WhereClause();\n      break;\n    case 148:                       // 'group'\n      parse_GroupByClause();\n      break;\n    case 105:                       // 'count'\n      parse_CountClause();\n      break;\n    default:\n      parse_OrderByClause();\n    }\n    eventHandler.endNonterminal(\"IntermediateClause\", e0);\n  }\n\n  function try_IntermediateClause()\n  {\n    switch (l1)\n    {\n    case 137:                       // 'for'\n    case 174:                       // 'let'\n      try_InitialClause();\n      break;\n    case 266:                       // 'where'\n      try_WhereClause();\n      break;\n    case 148:                       // 'group'\n      try_GroupByClause();\n      break;\n    case 105:                       // 'count'\n      try_CountClause();\n      break;\n    default:\n      try_OrderByClause();\n    }\n  }\n\n  function parse_ForClause()\n  {\n    eventHandler.startNonterminal(\"ForClause\", e0);\n    shift(137);                     // 'for'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    whitespace();\n    parse_ForBinding();\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shift(41);                    // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      whitespace();\n      parse_ForBinding();\n    }\n    eventHandler.endNonterminal(\"ForClause\", e0);\n  }\n\n  function try_ForClause()\n  {\n    shiftT(137);                    // 'for'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    try_ForBinding();\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shiftT(41);                   // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      try_ForBinding();\n    }\n  }\n\n  function parse_ForBinding()\n  {\n    eventHandler.startNonterminal(\"ForBinding\", e0);\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    whitespace();\n    parse_VarName();\n    lookahead1W(164);               // S^WS | '(:' | 'allowing' | 'as' | 'at' | 'in' | 'score'\n    if (l1 == 79)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    lookahead1W(158);               // S^WS | '(:' | 'allowing' | 'at' | 'in' | 'score'\n    if (l1 == 72)                   // 'allowing'\n    {\n      whitespace();\n      parse_AllowingEmpty();\n    }\n    lookahead1W(150);               // S^WS | '(:' | 'at' | 'in' | 'score'\n    if (l1 == 81)                   // 'at'\n    {\n      whitespace();\n      parse_PositionalVar();\n    }\n    lookahead1W(122);               // S^WS | '(:' | 'in' | 'score'\n    if (l1 == 228)                  // 'score'\n    {\n      whitespace();\n      parse_FTScoreVar();\n    }\n    lookahead1W(53);                // S^WS | '(:' | 'in'\n    shift(154);                     // 'in'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"ForBinding\", e0);\n  }\n\n  function try_ForBinding()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    try_VarName();\n    lookahead1W(164);               // S^WS | '(:' | 'allowing' | 'as' | 'at' | 'in' | 'score'\n    if (l1 == 79)                   // 'as'\n    {\n      try_TypeDeclaration();\n    }\n    lookahead1W(158);               // S^WS | '(:' | 'allowing' | 'at' | 'in' | 'score'\n    if (l1 == 72)                   // 'allowing'\n    {\n      try_AllowingEmpty();\n    }\n    lookahead1W(150);               // S^WS | '(:' | 'at' | 'in' | 'score'\n    if (l1 == 81)                   // 'at'\n    {\n      try_PositionalVar();\n    }\n    lookahead1W(122);               // S^WS | '(:' | 'in' | 'score'\n    if (l1 == 228)                  // 'score'\n    {\n      try_FTScoreVar();\n    }\n    lookahead1W(53);                // S^WS | '(:' | 'in'\n    shiftT(154);                    // 'in'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_ExprSingle();\n  }\n\n  function parse_AllowingEmpty()\n  {\n    eventHandler.startNonterminal(\"AllowingEmpty\", e0);\n    shift(72);                      // 'allowing'\n    lookahead1W(49);                // S^WS | '(:' | 'empty'\n    shift(123);                     // 'empty'\n    eventHandler.endNonterminal(\"AllowingEmpty\", e0);\n  }\n\n  function try_AllowingEmpty()\n  {\n    shiftT(72);                     // 'allowing'\n    lookahead1W(49);                // S^WS | '(:' | 'empty'\n    shiftT(123);                    // 'empty'\n  }\n\n  function parse_PositionalVar()\n  {\n    eventHandler.startNonterminal(\"PositionalVar\", e0);\n    shift(81);                      // 'at'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    whitespace();\n    parse_VarName();\n    eventHandler.endNonterminal(\"PositionalVar\", e0);\n  }\n\n  function try_PositionalVar()\n  {\n    shiftT(81);                     // 'at'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    try_VarName();\n  }\n\n  function parse_FTScoreVar()\n  {\n    eventHandler.startNonterminal(\"FTScoreVar\", e0);\n    shift(228);                     // 'score'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    whitespace();\n    parse_VarName();\n    eventHandler.endNonterminal(\"FTScoreVar\", e0);\n  }\n\n  function try_FTScoreVar()\n  {\n    shiftT(228);                    // 'score'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    try_VarName();\n  }\n\n  function parse_LetClause()\n  {\n    eventHandler.startNonterminal(\"LetClause\", e0);\n    shift(174);                     // 'let'\n    lookahead1W(96);                // S^WS | '$' | '(:' | 'score'\n    whitespace();\n    parse_LetBinding();\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shift(41);                    // ','\n      lookahead1W(96);              // S^WS | '$' | '(:' | 'score'\n      whitespace();\n      parse_LetBinding();\n    }\n    eventHandler.endNonterminal(\"LetClause\", e0);\n  }\n\n  function try_LetClause()\n  {\n    shiftT(174);                    // 'let'\n    lookahead1W(96);                // S^WS | '$' | '(:' | 'score'\n    try_LetBinding();\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shiftT(41);                   // ','\n      lookahead1W(96);              // S^WS | '$' | '(:' | 'score'\n      try_LetBinding();\n    }\n  }\n\n  function parse_LetBinding()\n  {\n    eventHandler.startNonterminal(\"LetBinding\", e0);\n    switch (l1)\n    {\n    case 31:                        // '$'\n      shift(31);                    // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n      whitespace();\n      parse_VarName();\n      lookahead1W(105);             // S^WS | '(:' | ':=' | 'as'\n      if (l1 == 79)                 // 'as'\n      {\n        whitespace();\n        parse_TypeDeclaration();\n      }\n      break;\n    default:\n      parse_FTScoreVar();\n    }\n    lookahead1W(27);                // S^WS | '(:' | ':='\n    shift(52);                      // ':='\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"LetBinding\", e0);\n  }\n\n  function try_LetBinding()\n  {\n    switch (l1)\n    {\n    case 31:                        // '$'\n      shiftT(31);                   // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n      try_VarName();\n      lookahead1W(105);             // S^WS | '(:' | ':=' | 'as'\n      if (l1 == 79)                 // 'as'\n      {\n        try_TypeDeclaration();\n      }\n      break;\n    default:\n      try_FTScoreVar();\n    }\n    lookahead1W(27);                // S^WS | '(:' | ':='\n    shiftT(52);                     // ':='\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_ExprSingle();\n  }\n\n  function parse_WindowClause()\n  {\n    eventHandler.startNonterminal(\"WindowClause\", e0);\n    shift(137);                     // 'for'\n    lookahead1W(135);               // S^WS | '(:' | 'sliding' | 'tumbling'\n    switch (l1)\n    {\n    case 251:                       // 'tumbling'\n      whitespace();\n      parse_TumblingWindowClause();\n      break;\n    default:\n      whitespace();\n      parse_SlidingWindowClause();\n    }\n    eventHandler.endNonterminal(\"WindowClause\", e0);\n  }\n\n  function try_WindowClause()\n  {\n    shiftT(137);                    // 'for'\n    lookahead1W(135);               // S^WS | '(:' | 'sliding' | 'tumbling'\n    switch (l1)\n    {\n    case 251:                       // 'tumbling'\n      try_TumblingWindowClause();\n      break;\n    default:\n      try_SlidingWindowClause();\n    }\n  }\n\n  function parse_TumblingWindowClause()\n  {\n    eventHandler.startNonterminal(\"TumblingWindowClause\", e0);\n    shift(251);                     // 'tumbling'\n    lookahead1W(85);                // S^WS | '(:' | 'window'\n    shift(269);                     // 'window'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    whitespace();\n    parse_VarName();\n    lookahead1W(110);               // S^WS | '(:' | 'as' | 'in'\n    if (l1 == 79)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    lookahead1W(53);                // S^WS | '(:' | 'in'\n    shift(154);                     // 'in'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    whitespace();\n    parse_WindowStartCondition();\n    if (l1 == 126                   // 'end'\n     || l1 == 198)                  // 'only'\n    {\n      whitespace();\n      parse_WindowEndCondition();\n    }\n    eventHandler.endNonterminal(\"TumblingWindowClause\", e0);\n  }\n\n  function try_TumblingWindowClause()\n  {\n    shiftT(251);                    // 'tumbling'\n    lookahead1W(85);                // S^WS | '(:' | 'window'\n    shiftT(269);                    // 'window'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    try_VarName();\n    lookahead1W(110);               // S^WS | '(:' | 'as' | 'in'\n    if (l1 == 79)                   // 'as'\n    {\n      try_TypeDeclaration();\n    }\n    lookahead1W(53);                // S^WS | '(:' | 'in'\n    shiftT(154);                    // 'in'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_ExprSingle();\n    try_WindowStartCondition();\n    if (l1 == 126                   // 'end'\n     || l1 == 198)                  // 'only'\n    {\n      try_WindowEndCondition();\n    }\n  }\n\n  function parse_SlidingWindowClause()\n  {\n    eventHandler.startNonterminal(\"SlidingWindowClause\", e0);\n    shift(234);                     // 'sliding'\n    lookahead1W(85);                // S^WS | '(:' | 'window'\n    shift(269);                     // 'window'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    whitespace();\n    parse_VarName();\n    lookahead1W(110);               // S^WS | '(:' | 'as' | 'in'\n    if (l1 == 79)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    lookahead1W(53);                // S^WS | '(:' | 'in'\n    shift(154);                     // 'in'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    whitespace();\n    parse_WindowStartCondition();\n    whitespace();\n    parse_WindowEndCondition();\n    eventHandler.endNonterminal(\"SlidingWindowClause\", e0);\n  }\n\n  function try_SlidingWindowClause()\n  {\n    shiftT(234);                    // 'sliding'\n    lookahead1W(85);                // S^WS | '(:' | 'window'\n    shiftT(269);                    // 'window'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    try_VarName();\n    lookahead1W(110);               // S^WS | '(:' | 'as' | 'in'\n    if (l1 == 79)                   // 'as'\n    {\n      try_TypeDeclaration();\n    }\n    lookahead1W(53);                // S^WS | '(:' | 'in'\n    shiftT(154);                    // 'in'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_ExprSingle();\n    try_WindowStartCondition();\n    try_WindowEndCondition();\n  }\n\n  function parse_WindowStartCondition()\n  {\n    eventHandler.startNonterminal(\"WindowStartCondition\", e0);\n    shift(237);                     // 'start'\n    lookahead1W(163);               // S^WS | '$' | '(:' | 'at' | 'next' | 'previous' | 'when'\n    whitespace();\n    parse_WindowVars();\n    lookahead1W(83);                // S^WS | '(:' | 'when'\n    shift(265);                     // 'when'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"WindowStartCondition\", e0);\n  }\n\n  function try_WindowStartCondition()\n  {\n    shiftT(237);                    // 'start'\n    lookahead1W(163);               // S^WS | '$' | '(:' | 'at' | 'next' | 'previous' | 'when'\n    try_WindowVars();\n    lookahead1W(83);                // S^WS | '(:' | 'when'\n    shiftT(265);                    // 'when'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_ExprSingle();\n  }\n\n  function parse_WindowEndCondition()\n  {\n    eventHandler.startNonterminal(\"WindowEndCondition\", e0);\n    if (l1 == 198)                  // 'only'\n    {\n      shift(198);                   // 'only'\n    }\n    lookahead1W(50);                // S^WS | '(:' | 'end'\n    shift(126);                     // 'end'\n    lookahead1W(163);               // S^WS | '$' | '(:' | 'at' | 'next' | 'previous' | 'when'\n    whitespace();\n    parse_WindowVars();\n    lookahead1W(83);                // S^WS | '(:' | 'when'\n    shift(265);                     // 'when'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"WindowEndCondition\", e0);\n  }\n\n  function try_WindowEndCondition()\n  {\n    if (l1 == 198)                  // 'only'\n    {\n      shiftT(198);                  // 'only'\n    }\n    lookahead1W(50);                // S^WS | '(:' | 'end'\n    shiftT(126);                    // 'end'\n    lookahead1W(163);               // S^WS | '$' | '(:' | 'at' | 'next' | 'previous' | 'when'\n    try_WindowVars();\n    lookahead1W(83);                // S^WS | '(:' | 'when'\n    shiftT(265);                    // 'when'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_ExprSingle();\n  }\n\n  function parse_WindowVars()\n  {\n    eventHandler.startNonterminal(\"WindowVars\", e0);\n    if (l1 == 31)                   // '$'\n    {\n      shift(31);                    // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n      whitespace();\n      parse_CurrentItem();\n    }\n    lookahead1W(159);               // S^WS | '(:' | 'at' | 'next' | 'previous' | 'when'\n    if (l1 == 81)                   // 'at'\n    {\n      whitespace();\n      parse_PositionalVar();\n    }\n    lookahead1W(153);               // S^WS | '(:' | 'next' | 'previous' | 'when'\n    if (l1 == 215)                  // 'previous'\n    {\n      shift(215);                   // 'previous'\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      shift(31);                    // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n      whitespace();\n      parse_PreviousItem();\n    }\n    lookahead1W(127);               // S^WS | '(:' | 'next' | 'when'\n    if (l1 == 187)                  // 'next'\n    {\n      shift(187);                   // 'next'\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      shift(31);                    // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n      whitespace();\n      parse_NextItem();\n    }\n    eventHandler.endNonterminal(\"WindowVars\", e0);\n  }\n\n  function try_WindowVars()\n  {\n    if (l1 == 31)                   // '$'\n    {\n      shiftT(31);                   // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n      try_CurrentItem();\n    }\n    lookahead1W(159);               // S^WS | '(:' | 'at' | 'next' | 'previous' | 'when'\n    if (l1 == 81)                   // 'at'\n    {\n      try_PositionalVar();\n    }\n    lookahead1W(153);               // S^WS | '(:' | 'next' | 'previous' | 'when'\n    if (l1 == 215)                  // 'previous'\n    {\n      shiftT(215);                  // 'previous'\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      shiftT(31);                   // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n      try_PreviousItem();\n    }\n    lookahead1W(127);               // S^WS | '(:' | 'next' | 'when'\n    if (l1 == 187)                  // 'next'\n    {\n      shiftT(187);                  // 'next'\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      shiftT(31);                   // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n      try_NextItem();\n    }\n  }\n\n  function parse_CurrentItem()\n  {\n    eventHandler.startNonterminal(\"CurrentItem\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"CurrentItem\", e0);\n  }\n\n  function try_CurrentItem()\n  {\n    try_EQName();\n  }\n\n  function parse_PreviousItem()\n  {\n    eventHandler.startNonterminal(\"PreviousItem\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"PreviousItem\", e0);\n  }\n\n  function try_PreviousItem()\n  {\n    try_EQName();\n  }\n\n  function parse_NextItem()\n  {\n    eventHandler.startNonterminal(\"NextItem\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"NextItem\", e0);\n  }\n\n  function try_NextItem()\n  {\n    try_EQName();\n  }\n\n  function parse_CountClause()\n  {\n    eventHandler.startNonterminal(\"CountClause\", e0);\n    shift(105);                     // 'count'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    whitespace();\n    parse_VarName();\n    eventHandler.endNonterminal(\"CountClause\", e0);\n  }\n\n  function try_CountClause()\n  {\n    shiftT(105);                    // 'count'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    try_VarName();\n  }\n\n  function parse_WhereClause()\n  {\n    eventHandler.startNonterminal(\"WhereClause\", e0);\n    shift(266);                     // 'where'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"WhereClause\", e0);\n  }\n\n  function try_WhereClause()\n  {\n    shiftT(266);                    // 'where'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_ExprSingle();\n  }\n\n  function parse_GroupByClause()\n  {\n    eventHandler.startNonterminal(\"GroupByClause\", e0);\n    shift(148);                     // 'group'\n    lookahead1W(34);                // S^WS | '(:' | 'by'\n    shift(87);                      // 'by'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_GroupingSpecList();\n    eventHandler.endNonterminal(\"GroupByClause\", e0);\n  }\n\n  function try_GroupByClause()\n  {\n    shiftT(148);                    // 'group'\n    lookahead1W(34);                // S^WS | '(:' | 'by'\n    shiftT(87);                     // 'by'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_GroupingSpecList();\n  }\n\n  function parse_GroupingSpecList()\n  {\n    eventHandler.startNonterminal(\"GroupingSpecList\", e0);\n    parse_GroupingSpec();\n    for (;;)\n    {\n      lookahead1W(176);             // S^WS | '(:' | ',' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' |\n                                    // 'stable' | 'where'\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shift(41);                    // ','\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      whitespace();\n      parse_GroupingSpec();\n    }\n    eventHandler.endNonterminal(\"GroupingSpecList\", e0);\n  }\n\n  function try_GroupingSpecList()\n  {\n    try_GroupingSpec();\n    for (;;)\n    {\n      lookahead1W(176);             // S^WS | '(:' | ',' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' |\n                                    // 'stable' | 'where'\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shiftT(41);                   // ','\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      try_GroupingSpec();\n    }\n  }\n\n  function parse_GroupingSpec()\n  {\n    eventHandler.startNonterminal(\"GroupingSpec\", e0);\n    switch (l1)\n    {\n    case 31:                        // '$'\n      lookahead2W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 3103                  // '$' EQName^Token\n     || lk == 35871                 // '$' 'after'\n     || lk == 36895                 // '$' 'allowing'\n     || lk == 37407                 // '$' 'ancestor'\n     || lk == 37919                 // '$' 'ancestor-or-self'\n     || lk == 38431                 // '$' 'and'\n     || lk == 39455                 // '$' 'append'\n     || lk == 39967                 // '$' 'array'\n     || lk == 40479                 // '$' 'as'\n     || lk == 40991                 // '$' 'ascending'\n     || lk == 41503                 // '$' 'at'\n     || lk == 42015                 // '$' 'attribute'\n     || lk == 42527                 // '$' 'base-uri'\n     || lk == 43039                 // '$' 'before'\n     || lk == 43551                 // '$' 'boundary-space'\n     || lk == 44063                 // '$' 'break'\n     || lk == 45087                 // '$' 'case'\n     || lk == 45599                 // '$' 'cast'\n     || lk == 46111                 // '$' 'castable'\n     || lk == 46623                 // '$' 'catch'\n     || lk == 47647                 // '$' 'child'\n     || lk == 48159                 // '$' 'collation'\n     || lk == 49183                 // '$' 'comment'\n     || lk == 49695                 // '$' 'constraint'\n     || lk == 50207                 // '$' 'construction'\n     || lk == 51743                 // '$' 'context'\n     || lk == 52255                 // '$' 'continue'\n     || lk == 52767                 // '$' 'copy'\n     || lk == 53279                 // '$' 'copy-namespaces'\n     || lk == 53791                 // '$' 'count'\n     || lk == 54303                 // '$' 'decimal-format'\n     || lk == 55327                 // '$' 'declare'\n     || lk == 55839                 // '$' 'default'\n     || lk == 56351                 // '$' 'delete'\n     || lk == 56863                 // '$' 'descendant'\n     || lk == 57375                 // '$' 'descendant-or-self'\n     || lk == 57887                 // '$' 'descending'\n     || lk == 60447                 // '$' 'div'\n     || lk == 60959                 // '$' 'document'\n     || lk == 61471                 // '$' 'document-node'\n     || lk == 61983                 // '$' 'element'\n     || lk == 62495                 // '$' 'else'\n     || lk == 63007                 // '$' 'empty'\n     || lk == 63519                 // '$' 'empty-sequence'\n     || lk == 64031                 // '$' 'encoding'\n     || lk == 64543                 // '$' 'end'\n     || lk == 65567                 // '$' 'eq'\n     || lk == 66079                 // '$' 'every'\n     || lk == 67103                 // '$' 'except'\n     || lk == 67615                 // '$' 'exit'\n     || lk == 68127                 // '$' 'external'\n     || lk == 68639                 // '$' 'first'\n     || lk == 69151                 // '$' 'following'\n     || lk == 69663                 // '$' 'following-sibling'\n     || lk == 70175                 // '$' 'for'\n     || lk == 72223                 // '$' 'ft-option'\n     || lk == 74271                 // '$' 'function'\n     || lk == 74783                 // '$' 'ge'\n     || lk == 75807                 // '$' 'group'\n     || lk == 76831                 // '$' 'gt'\n     || lk == 77343                 // '$' 'idiv'\n     || lk == 77855                 // '$' 'if'\n     || lk == 78367                 // '$' 'import'\n     || lk == 78879                 // '$' 'in'\n     || lk == 79391                 // '$' 'index'\n     || lk == 81439                 // '$' 'insert'\n     || lk == 81951                 // '$' 'instance'\n     || lk == 82463                 // '$' 'integrity'\n     || lk == 82975                 // '$' 'intersect'\n     || lk == 83487                 // '$' 'into'\n     || lk == 83999                 // '$' 'is'\n     || lk == 84511                 // '$' 'item'\n     || lk == 85023                 // '$' 'json'\n     || lk == 85535                 // '$' 'json-item'\n     || lk == 87071                 // '$' 'last'\n     || lk == 87583                 // '$' 'lax'\n     || lk == 88095                 // '$' 'le'\n     || lk == 89119                 // '$' 'let'\n     || lk == 90143                 // '$' 'loop'\n     || lk == 91167                 // '$' 'lt'\n     || lk == 92191                 // '$' 'mod'\n     || lk == 92703                 // '$' 'modify'\n     || lk == 93215                 // '$' 'module'\n     || lk == 94239                 // '$' 'namespace'\n     || lk == 94751                 // '$' 'namespace-node'\n     || lk == 95263                 // '$' 'ne'\n     || lk == 97823                 // '$' 'node'\n     || lk == 98335                 // '$' 'nodes'\n     || lk == 99359                 // '$' 'object'\n     || lk == 101407                // '$' 'only'\n     || lk == 101919                // '$' 'option'\n     || lk == 102431                // '$' 'or'\n     || lk == 102943                // '$' 'order'\n     || lk == 103455                // '$' 'ordered'\n     || lk == 103967                // '$' 'ordering'\n     || lk == 105503                // '$' 'parent'\n     || lk == 108575                // '$' 'preceding'\n     || lk == 109087                // '$' 'preceding-sibling'\n     || lk == 110623                // '$' 'processing-instruction'\n     || lk == 111647                // '$' 'rename'\n     || lk == 112159                // '$' 'replace'\n     || lk == 112671                // '$' 'return'\n     || lk == 113183                // '$' 'returning'\n     || lk == 113695                // '$' 'revalidation'\n     || lk == 114719                // '$' 'satisfies'\n     || lk == 115231                // '$' 'schema'\n     || lk == 115743                // '$' 'schema-attribute'\n     || lk == 116255                // '$' 'schema-element'\n     || lk == 116767                // '$' 'score'\n     || lk == 117279                // '$' 'self'\n     || lk == 119839                // '$' 'sliding'\n     || lk == 120351                // '$' 'some'\n     || lk == 120863                // '$' 'stable'\n     || lk == 121375                // '$' 'start'\n     || lk == 122911                // '$' 'strict'\n     || lk == 123935                // '$' 'structured-item'\n     || lk == 124447                // '$' 'switch'\n     || lk == 124959                // '$' 'text'\n     || lk == 127007                // '$' 'to'\n     || lk == 127519                // '$' 'treat'\n     || lk == 128031                // '$' 'try'\n     || lk == 128543                // '$' 'tumbling'\n     || lk == 129055                // '$' 'type'\n     || lk == 129567                // '$' 'typeswitch'\n     || lk == 130079                // '$' 'union'\n     || lk == 131103                // '$' 'unordered'\n     || lk == 131615                // '$' 'updating'\n     || lk == 133151                // '$' 'validate'\n     || lk == 133663                // '$' 'value'\n     || lk == 134175                // '$' 'variable'\n     || lk == 134687                // '$' 'version'\n     || lk == 136223                // '$' 'where'\n     || lk == 136735                // '$' 'while'\n     || lk == 138271                // '$' 'with'\n     || lk == 140319)               // '$' 'xquery'\n    {\n      lk = memoized(2, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_GroupingVariable();\n          lookahead1W(182);         // S^WS | '(:' | ',' | ':=' | 'as' | 'collation' | 'count' | 'for' | 'group' |\n                                    // 'let' | 'order' | 'return' | 'stable' | 'where'\n          if (l1 == 52              // ':='\n           || l1 == 79)             // 'as'\n          {\n            if (l1 == 79)           // 'as'\n            {\n              try_TypeDeclaration();\n            }\n            lookahead1W(27);        // S^WS | '(:' | ':='\n            shiftT(52);             // ':='\n            lookahead1W(266);       // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n            try_ExprSingle();\n          }\n          if (l1 == 94)             // 'collation'\n          {\n            shiftT(94);             // 'collation'\n            lookahead1W(15);        // URILiteral | S^WS | '(:'\n            shiftT(7);              // URILiteral\n          }\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(2, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      parse_GroupingVariable();\n      lookahead1W(182);             // S^WS | '(:' | ',' | ':=' | 'as' | 'collation' | 'count' | 'for' | 'group' |\n                                    // 'let' | 'order' | 'return' | 'stable' | 'where'\n      if (l1 == 52                  // ':='\n       || l1 == 79)                 // 'as'\n      {\n        if (l1 == 79)               // 'as'\n        {\n          whitespace();\n          parse_TypeDeclaration();\n        }\n        lookahead1W(27);            // S^WS | '(:' | ':='\n        shift(52);                  // ':='\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n        whitespace();\n        parse_ExprSingle();\n      }\n      if (l1 == 94)                 // 'collation'\n      {\n        shift(94);                  // 'collation'\n        lookahead1W(15);            // URILiteral | S^WS | '(:'\n        shift(7);                   // URILiteral\n      }\n      break;\n    default:\n      parse_ExprSingle();\n    }\n    eventHandler.endNonterminal(\"GroupingSpec\", e0);\n  }\n\n  function try_GroupingSpec()\n  {\n    switch (l1)\n    {\n    case 31:                        // '$'\n      lookahead2W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 3103                  // '$' EQName^Token\n     || lk == 35871                 // '$' 'after'\n     || lk == 36895                 // '$' 'allowing'\n     || lk == 37407                 // '$' 'ancestor'\n     || lk == 37919                 // '$' 'ancestor-or-self'\n     || lk == 38431                 // '$' 'and'\n     || lk == 39455                 // '$' 'append'\n     || lk == 39967                 // '$' 'array'\n     || lk == 40479                 // '$' 'as'\n     || lk == 40991                 // '$' 'ascending'\n     || lk == 41503                 // '$' 'at'\n     || lk == 42015                 // '$' 'attribute'\n     || lk == 42527                 // '$' 'base-uri'\n     || lk == 43039                 // '$' 'before'\n     || lk == 43551                 // '$' 'boundary-space'\n     || lk == 44063                 // '$' 'break'\n     || lk == 45087                 // '$' 'case'\n     || lk == 45599                 // '$' 'cast'\n     || lk == 46111                 // '$' 'castable'\n     || lk == 46623                 // '$' 'catch'\n     || lk == 47647                 // '$' 'child'\n     || lk == 48159                 // '$' 'collation'\n     || lk == 49183                 // '$' 'comment'\n     || lk == 49695                 // '$' 'constraint'\n     || lk == 50207                 // '$' 'construction'\n     || lk == 51743                 // '$' 'context'\n     || lk == 52255                 // '$' 'continue'\n     || lk == 52767                 // '$' 'copy'\n     || lk == 53279                 // '$' 'copy-namespaces'\n     || lk == 53791                 // '$' 'count'\n     || lk == 54303                 // '$' 'decimal-format'\n     || lk == 55327                 // '$' 'declare'\n     || lk == 55839                 // '$' 'default'\n     || lk == 56351                 // '$' 'delete'\n     || lk == 56863                 // '$' 'descendant'\n     || lk == 57375                 // '$' 'descendant-or-self'\n     || lk == 57887                 // '$' 'descending'\n     || lk == 60447                 // '$' 'div'\n     || lk == 60959                 // '$' 'document'\n     || lk == 61471                 // '$' 'document-node'\n     || lk == 61983                 // '$' 'element'\n     || lk == 62495                 // '$' 'else'\n     || lk == 63007                 // '$' 'empty'\n     || lk == 63519                 // '$' 'empty-sequence'\n     || lk == 64031                 // '$' 'encoding'\n     || lk == 64543                 // '$' 'end'\n     || lk == 65567                 // '$' 'eq'\n     || lk == 66079                 // '$' 'every'\n     || lk == 67103                 // '$' 'except'\n     || lk == 67615                 // '$' 'exit'\n     || lk == 68127                 // '$' 'external'\n     || lk == 68639                 // '$' 'first'\n     || lk == 69151                 // '$' 'following'\n     || lk == 69663                 // '$' 'following-sibling'\n     || lk == 70175                 // '$' 'for'\n     || lk == 72223                 // '$' 'ft-option'\n     || lk == 74271                 // '$' 'function'\n     || lk == 74783                 // '$' 'ge'\n     || lk == 75807                 // '$' 'group'\n     || lk == 76831                 // '$' 'gt'\n     || lk == 77343                 // '$' 'idiv'\n     || lk == 77855                 // '$' 'if'\n     || lk == 78367                 // '$' 'import'\n     || lk == 78879                 // '$' 'in'\n     || lk == 79391                 // '$' 'index'\n     || lk == 81439                 // '$' 'insert'\n     || lk == 81951                 // '$' 'instance'\n     || lk == 82463                 // '$' 'integrity'\n     || lk == 82975                 // '$' 'intersect'\n     || lk == 83487                 // '$' 'into'\n     || lk == 83999                 // '$' 'is'\n     || lk == 84511                 // '$' 'item'\n     || lk == 85023                 // '$' 'json'\n     || lk == 85535                 // '$' 'json-item'\n     || lk == 87071                 // '$' 'last'\n     || lk == 87583                 // '$' 'lax'\n     || lk == 88095                 // '$' 'le'\n     || lk == 89119                 // '$' 'let'\n     || lk == 90143                 // '$' 'loop'\n     || lk == 91167                 // '$' 'lt'\n     || lk == 92191                 // '$' 'mod'\n     || lk == 92703                 // '$' 'modify'\n     || lk == 93215                 // '$' 'module'\n     || lk == 94239                 // '$' 'namespace'\n     || lk == 94751                 // '$' 'namespace-node'\n     || lk == 95263                 // '$' 'ne'\n     || lk == 97823                 // '$' 'node'\n     || lk == 98335                 // '$' 'nodes'\n     || lk == 99359                 // '$' 'object'\n     || lk == 101407                // '$' 'only'\n     || lk == 101919                // '$' 'option'\n     || lk == 102431                // '$' 'or'\n     || lk == 102943                // '$' 'order'\n     || lk == 103455                // '$' 'ordered'\n     || lk == 103967                // '$' 'ordering'\n     || lk == 105503                // '$' 'parent'\n     || lk == 108575                // '$' 'preceding'\n     || lk == 109087                // '$' 'preceding-sibling'\n     || lk == 110623                // '$' 'processing-instruction'\n     || lk == 111647                // '$' 'rename'\n     || lk == 112159                // '$' 'replace'\n     || lk == 112671                // '$' 'return'\n     || lk == 113183                // '$' 'returning'\n     || lk == 113695                // '$' 'revalidation'\n     || lk == 114719                // '$' 'satisfies'\n     || lk == 115231                // '$' 'schema'\n     || lk == 115743                // '$' 'schema-attribute'\n     || lk == 116255                // '$' 'schema-element'\n     || lk == 116767                // '$' 'score'\n     || lk == 117279                // '$' 'self'\n     || lk == 119839                // '$' 'sliding'\n     || lk == 120351                // '$' 'some'\n     || lk == 120863                // '$' 'stable'\n     || lk == 121375                // '$' 'start'\n     || lk == 122911                // '$' 'strict'\n     || lk == 123935                // '$' 'structured-item'\n     || lk == 124447                // '$' 'switch'\n     || lk == 124959                // '$' 'text'\n     || lk == 127007                // '$' 'to'\n     || lk == 127519                // '$' 'treat'\n     || lk == 128031                // '$' 'try'\n     || lk == 128543                // '$' 'tumbling'\n     || lk == 129055                // '$' 'type'\n     || lk == 129567                // '$' 'typeswitch'\n     || lk == 130079                // '$' 'union'\n     || lk == 131103                // '$' 'unordered'\n     || lk == 131615                // '$' 'updating'\n     || lk == 133151                // '$' 'validate'\n     || lk == 133663                // '$' 'value'\n     || lk == 134175                // '$' 'variable'\n     || lk == 134687                // '$' 'version'\n     || lk == 136223                // '$' 'where'\n     || lk == 136735                // '$' 'while'\n     || lk == 138271                // '$' 'with'\n     || lk == 140319)               // '$' 'xquery'\n    {\n      lk = memoized(2, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_GroupingVariable();\n          lookahead1W(182);         // S^WS | '(:' | ',' | ':=' | 'as' | 'collation' | 'count' | 'for' | 'group' |\n                                    // 'let' | 'order' | 'return' | 'stable' | 'where'\n          if (l1 == 52              // ':='\n           || l1 == 79)             // 'as'\n          {\n            if (l1 == 79)           // 'as'\n            {\n              try_TypeDeclaration();\n            }\n            lookahead1W(27);        // S^WS | '(:' | ':='\n            shiftT(52);             // ':='\n            lookahead1W(266);       // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n            try_ExprSingle();\n          }\n          if (l1 == 94)             // 'collation'\n          {\n            shiftT(94);             // 'collation'\n            lookahead1W(15);        // URILiteral | S^WS | '(:'\n            shiftT(7);              // URILiteral\n          }\n          memoize(2, e0A, -1);\n          lk = -3;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(2, e0A, -2);\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      try_GroupingVariable();\n      lookahead1W(182);             // S^WS | '(:' | ',' | ':=' | 'as' | 'collation' | 'count' | 'for' | 'group' |\n                                    // 'let' | 'order' | 'return' | 'stable' | 'where'\n      if (l1 == 52                  // ':='\n       || l1 == 79)                 // 'as'\n      {\n        if (l1 == 79)               // 'as'\n        {\n          try_TypeDeclaration();\n        }\n        lookahead1W(27);            // S^WS | '(:' | ':='\n        shiftT(52);                 // ':='\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n        try_ExprSingle();\n      }\n      if (l1 == 94)                 // 'collation'\n      {\n        shiftT(94);                 // 'collation'\n        lookahead1W(15);            // URILiteral | S^WS | '(:'\n        shiftT(7);                  // URILiteral\n      }\n      break;\n    case -3:\n      break;\n    default:\n      try_ExprSingle();\n    }\n  }\n\n  function parse_GroupingVariable()\n  {\n    eventHandler.startNonterminal(\"GroupingVariable\", e0);\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    whitespace();\n    parse_VarName();\n    eventHandler.endNonterminal(\"GroupingVariable\", e0);\n  }\n\n  function try_GroupingVariable()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    try_VarName();\n  }\n\n  function parse_OrderByClause()\n  {\n    eventHandler.startNonterminal(\"OrderByClause\", e0);\n    switch (l1)\n    {\n    case 201:                       // 'order'\n      shift(201);                   // 'order'\n      lookahead1W(34);              // S^WS | '(:' | 'by'\n      shift(87);                    // 'by'\n      break;\n    default:\n      shift(236);                   // 'stable'\n      lookahead1W(67);              // S^WS | '(:' | 'order'\n      shift(201);                   // 'order'\n      lookahead1W(34);              // S^WS | '(:' | 'by'\n      shift(87);                    // 'by'\n    }\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_OrderSpecList();\n    eventHandler.endNonterminal(\"OrderByClause\", e0);\n  }\n\n  function try_OrderByClause()\n  {\n    switch (l1)\n    {\n    case 201:                       // 'order'\n      shiftT(201);                  // 'order'\n      lookahead1W(34);              // S^WS | '(:' | 'by'\n      shiftT(87);                   // 'by'\n      break;\n    default:\n      shiftT(236);                  // 'stable'\n      lookahead1W(67);              // S^WS | '(:' | 'order'\n      shiftT(201);                  // 'order'\n      lookahead1W(34);              // S^WS | '(:' | 'by'\n      shiftT(87);                   // 'by'\n    }\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_OrderSpecList();\n  }\n\n  function parse_OrderSpecList()\n  {\n    eventHandler.startNonterminal(\"OrderSpecList\", e0);\n    parse_OrderSpec();\n    for (;;)\n    {\n      lookahead1W(176);             // S^WS | '(:' | ',' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' |\n                                    // 'stable' | 'where'\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shift(41);                    // ','\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      whitespace();\n      parse_OrderSpec();\n    }\n    eventHandler.endNonterminal(\"OrderSpecList\", e0);\n  }\n\n  function try_OrderSpecList()\n  {\n    try_OrderSpec();\n    for (;;)\n    {\n      lookahead1W(176);             // S^WS | '(:' | ',' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' |\n                                    // 'stable' | 'where'\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shiftT(41);                   // ','\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      try_OrderSpec();\n    }\n  }\n\n  function parse_OrderSpec()\n  {\n    eventHandler.startNonterminal(\"OrderSpec\", e0);\n    parse_ExprSingle();\n    whitespace();\n    parse_OrderModifier();\n    eventHandler.endNonterminal(\"OrderSpec\", e0);\n  }\n\n  function try_OrderSpec()\n  {\n    try_ExprSingle();\n    try_OrderModifier();\n  }\n\n  function parse_OrderModifier()\n  {\n    eventHandler.startNonterminal(\"OrderModifier\", e0);\n    if (l1 == 80                    // 'ascending'\n     || l1 == 113)                  // 'descending'\n    {\n      switch (l1)\n      {\n      case 80:                      // 'ascending'\n        shift(80);                  // 'ascending'\n        break;\n      default:\n        shift(113);                 // 'descending'\n      }\n    }\n    lookahead1W(179);               // S^WS | '(:' | ',' | 'collation' | 'count' | 'empty' | 'for' | 'group' | 'let' |\n                                    // 'order' | 'return' | 'stable' | 'where'\n    if (l1 == 123)                  // 'empty'\n    {\n      shift(123);                   // 'empty'\n      lookahead1W(121);             // S^WS | '(:' | 'greatest' | 'least'\n      switch (l1)\n      {\n      case 147:                     // 'greatest'\n        shift(147);                 // 'greatest'\n        break;\n      default:\n        shift(173);                 // 'least'\n      }\n    }\n    lookahead1W(177);               // S^WS | '(:' | ',' | 'collation' | 'count' | 'for' | 'group' | 'let' | 'order' |\n                                    // 'return' | 'stable' | 'where'\n    if (l1 == 94)                   // 'collation'\n    {\n      shift(94);                    // 'collation'\n      lookahead1W(15);              // URILiteral | S^WS | '(:'\n      shift(7);                     // URILiteral\n    }\n    eventHandler.endNonterminal(\"OrderModifier\", e0);\n  }\n\n  function try_OrderModifier()\n  {\n    if (l1 == 80                    // 'ascending'\n     || l1 == 113)                  // 'descending'\n    {\n      switch (l1)\n      {\n      case 80:                      // 'ascending'\n        shiftT(80);                 // 'ascending'\n        break;\n      default:\n        shiftT(113);                // 'descending'\n      }\n    }\n    lookahead1W(179);               // S^WS | '(:' | ',' | 'collation' | 'count' | 'empty' | 'for' | 'group' | 'let' |\n                                    // 'order' | 'return' | 'stable' | 'where'\n    if (l1 == 123)                  // 'empty'\n    {\n      shiftT(123);                  // 'empty'\n      lookahead1W(121);             // S^WS | '(:' | 'greatest' | 'least'\n      switch (l1)\n      {\n      case 147:                     // 'greatest'\n        shiftT(147);                // 'greatest'\n        break;\n      default:\n        shiftT(173);                // 'least'\n      }\n    }\n    lookahead1W(177);               // S^WS | '(:' | ',' | 'collation' | 'count' | 'for' | 'group' | 'let' | 'order' |\n                                    // 'return' | 'stable' | 'where'\n    if (l1 == 94)                   // 'collation'\n    {\n      shiftT(94);                   // 'collation'\n      lookahead1W(15);              // URILiteral | S^WS | '(:'\n      shiftT(7);                    // URILiteral\n    }\n  }\n\n  function parse_ReturnClause()\n  {\n    eventHandler.startNonterminal(\"ReturnClause\", e0);\n    shift(220);                     // 'return'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"ReturnClause\", e0);\n  }\n\n  function try_ReturnClause()\n  {\n    shiftT(220);                    // 'return'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_ExprSingle();\n  }\n\n  function parse_QuantifiedExpr()\n  {\n    eventHandler.startNonterminal(\"QuantifiedExpr\", e0);\n    switch (l1)\n    {\n    case 235:                       // 'some'\n      shift(235);                   // 'some'\n      break;\n    default:\n      shift(129);                   // 'every'\n    }\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    whitespace();\n    parse_QuantifiedVarDecl();\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shift(41);                    // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      whitespace();\n      parse_QuantifiedVarDecl();\n    }\n    shift(224);                     // 'satisfies'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"QuantifiedExpr\", e0);\n  }\n\n  function try_QuantifiedExpr()\n  {\n    switch (l1)\n    {\n    case 235:                       // 'some'\n      shiftT(235);                  // 'some'\n      break;\n    default:\n      shiftT(129);                  // 'every'\n    }\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    try_QuantifiedVarDecl();\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shiftT(41);                   // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      try_QuantifiedVarDecl();\n    }\n    shiftT(224);                    // 'satisfies'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_ExprSingle();\n  }\n\n  function parse_QuantifiedVarDecl()\n  {\n    eventHandler.startNonterminal(\"QuantifiedVarDecl\", e0);\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    whitespace();\n    parse_VarName();\n    lookahead1W(110);               // S^WS | '(:' | 'as' | 'in'\n    if (l1 == 79)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    lookahead1W(53);                // S^WS | '(:' | 'in'\n    shift(154);                     // 'in'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"QuantifiedVarDecl\", e0);\n  }\n\n  function try_QuantifiedVarDecl()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    try_VarName();\n    lookahead1W(110);               // S^WS | '(:' | 'as' | 'in'\n    if (l1 == 79)                   // 'as'\n    {\n      try_TypeDeclaration();\n    }\n    lookahead1W(53);                // S^WS | '(:' | 'in'\n    shiftT(154);                    // 'in'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_ExprSingle();\n  }\n\n  function parse_SwitchExpr()\n  {\n    eventHandler.startNonterminal(\"SwitchExpr\", e0);\n    shift(243);                     // 'switch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_Expr();\n    shift(37);                      // ')'\n    for (;;)\n    {\n      lookahead1W(35);              // S^WS | '(:' | 'case'\n      whitespace();\n      parse_SwitchCaseClause();\n      if (l1 != 88)                 // 'case'\n      {\n        break;\n      }\n    }\n    shift(109);                     // 'default'\n    lookahead1W(70);                // S^WS | '(:' | 'return'\n    shift(220);                     // 'return'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"SwitchExpr\", e0);\n  }\n\n  function try_SwitchExpr()\n  {\n    shiftT(243);                    // 'switch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_Expr();\n    shiftT(37);                     // ')'\n    for (;;)\n    {\n      lookahead1W(35);              // S^WS | '(:' | 'case'\n      try_SwitchCaseClause();\n      if (l1 != 88)                 // 'case'\n      {\n        break;\n      }\n    }\n    shiftT(109);                    // 'default'\n    lookahead1W(70);                // S^WS | '(:' | 'return'\n    shiftT(220);                    // 'return'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_ExprSingle();\n  }\n\n  function parse_SwitchCaseClause()\n  {\n    eventHandler.startNonterminal(\"SwitchCaseClause\", e0);\n    for (;;)\n    {\n      shift(88);                    // 'case'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      whitespace();\n      parse_SwitchCaseOperand();\n      if (l1 != 88)                 // 'case'\n      {\n        break;\n      }\n    }\n    shift(220);                     // 'return'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"SwitchCaseClause\", e0);\n  }\n\n  function try_SwitchCaseClause()\n  {\n    for (;;)\n    {\n      shiftT(88);                   // 'case'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      try_SwitchCaseOperand();\n      if (l1 != 88)                 // 'case'\n      {\n        break;\n      }\n    }\n    shiftT(220);                    // 'return'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_ExprSingle();\n  }\n\n  function parse_SwitchCaseOperand()\n  {\n    eventHandler.startNonterminal(\"SwitchCaseOperand\", e0);\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"SwitchCaseOperand\", e0);\n  }\n\n  function try_SwitchCaseOperand()\n  {\n    try_ExprSingle();\n  }\n\n  function parse_TypeswitchExpr()\n  {\n    eventHandler.startNonterminal(\"TypeswitchExpr\", e0);\n    shift(253);                     // 'typeswitch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_Expr();\n    shift(37);                      // ')'\n    for (;;)\n    {\n      lookahead1W(35);              // S^WS | '(:' | 'case'\n      whitespace();\n      parse_CaseClause();\n      if (l1 != 88)                 // 'case'\n      {\n        break;\n      }\n    }\n    shift(109);                     // 'default'\n    lookahead1W(95);                // S^WS | '$' | '(:' | 'return'\n    if (l1 == 31)                   // '$'\n    {\n      shift(31);                    // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n      whitespace();\n      parse_VarName();\n    }\n    lookahead1W(70);                // S^WS | '(:' | 'return'\n    shift(220);                     // 'return'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"TypeswitchExpr\", e0);\n  }\n\n  function try_TypeswitchExpr()\n  {\n    shiftT(253);                    // 'typeswitch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_Expr();\n    shiftT(37);                     // ')'\n    for (;;)\n    {\n      lookahead1W(35);              // S^WS | '(:' | 'case'\n      try_CaseClause();\n      if (l1 != 88)                 // 'case'\n      {\n        break;\n      }\n    }\n    shiftT(109);                    // 'default'\n    lookahead1W(95);                // S^WS | '$' | '(:' | 'return'\n    if (l1 == 31)                   // '$'\n    {\n      shiftT(31);                   // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n      try_VarName();\n    }\n    lookahead1W(70);                // S^WS | '(:' | 'return'\n    shiftT(220);                    // 'return'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_ExprSingle();\n  }\n\n  function parse_CaseClause()\n  {\n    eventHandler.startNonterminal(\"CaseClause\", e0);\n    shift(88);                      // 'case'\n    lookahead1W(261);               // EQName^Token | S^WS | '$' | '%' | '(' | '(:' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    if (l1 == 31)                   // '$'\n    {\n      shift(31);                    // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n      whitespace();\n      parse_VarName();\n      lookahead1W(30);              // S^WS | '(:' | 'as'\n      shift(79);                    // 'as'\n    }\n    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    whitespace();\n    parse_SequenceTypeUnion();\n    shift(220);                     // 'return'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"CaseClause\", e0);\n  }\n\n  function try_CaseClause()\n  {\n    shiftT(88);                     // 'case'\n    lookahead1W(261);               // EQName^Token | S^WS | '$' | '%' | '(' | '(:' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    if (l1 == 31)                   // '$'\n    {\n      shiftT(31);                   // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n      try_VarName();\n      lookahead1W(30);              // S^WS | '(:' | 'as'\n      shiftT(79);                   // 'as'\n    }\n    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    try_SequenceTypeUnion();\n    shiftT(220);                    // 'return'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_ExprSingle();\n  }\n\n  function parse_SequenceTypeUnion()\n  {\n    eventHandler.startNonterminal(\"SequenceTypeUnion\", e0);\n    parse_SequenceType();\n    for (;;)\n    {\n      lookahead1W(134);             // S^WS | '(:' | 'return' | '|'\n      if (l1 != 279)                // '|'\n      {\n        break;\n      }\n      shift(279);                   // '|'\n      lookahead1W(259);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n      whitespace();\n      parse_SequenceType();\n    }\n    eventHandler.endNonterminal(\"SequenceTypeUnion\", e0);\n  }\n\n  function try_SequenceTypeUnion()\n  {\n    try_SequenceType();\n    for (;;)\n    {\n      lookahead1W(134);             // S^WS | '(:' | 'return' | '|'\n      if (l1 != 279)                // '|'\n      {\n        break;\n      }\n      shiftT(279);                  // '|'\n      lookahead1W(259);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n      try_SequenceType();\n    }\n  }\n\n  function parse_IfExpr()\n  {\n    eventHandler.startNonterminal(\"IfExpr\", e0);\n    shift(152);                     // 'if'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_Expr();\n    shift(37);                      // ')'\n    lookahead1W(77);                // S^WS | '(:' | 'then'\n    shift(245);                     // 'then'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    shift(122);                     // 'else'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"IfExpr\", e0);\n  }\n\n  function try_IfExpr()\n  {\n    shiftT(152);                    // 'if'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_Expr();\n    shiftT(37);                     // ')'\n    lookahead1W(77);                // S^WS | '(:' | 'then'\n    shiftT(245);                    // 'then'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_ExprSingle();\n    shiftT(122);                    // 'else'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_ExprSingle();\n  }\n\n  function parse_TryCatchExpr()\n  {\n    eventHandler.startNonterminal(\"TryCatchExpr\", e0);\n    parse_TryClause();\n    for (;;)\n    {\n      lookahead1W(36);              // S^WS | '(:' | 'catch'\n      whitespace();\n      parse_CatchClause();\n      lookahead1W(183);             // S^WS | EOF | '(:' | ')' | ',' | ':' | ';' | ']' | 'after' | 'as' | 'ascending' |\n                                    // 'at' | 'before' | 'case' | 'catch' | 'collation' | 'count' | 'default' |\n                                    // 'descending' | 'else' | 'empty' | 'end' | 'for' | 'group' | 'into' | 'let' |\n                                    // 'modify' | 'only' | 'order' | 'return' | 'satisfies' | 'stable' | 'start' |\n                                    // 'where' | 'with' | '|}' | '}'\n      if (l1 != 91)                 // 'catch'\n      {\n        break;\n      }\n    }\n    eventHandler.endNonterminal(\"TryCatchExpr\", e0);\n  }\n\n  function try_TryCatchExpr()\n  {\n    try_TryClause();\n    for (;;)\n    {\n      lookahead1W(36);              // S^WS | '(:' | 'catch'\n      try_CatchClause();\n      lookahead1W(183);             // S^WS | EOF | '(:' | ')' | ',' | ':' | ';' | ']' | 'after' | 'as' | 'ascending' |\n                                    // 'at' | 'before' | 'case' | 'catch' | 'collation' | 'count' | 'default' |\n                                    // 'descending' | 'else' | 'empty' | 'end' | 'for' | 'group' | 'into' | 'let' |\n                                    // 'modify' | 'only' | 'order' | 'return' | 'satisfies' | 'stable' | 'start' |\n                                    // 'where' | 'with' | '|}' | '}'\n      if (l1 != 91)                 // 'catch'\n      {\n        break;\n      }\n    }\n  }\n\n  function parse_TryClause()\n  {\n    eventHandler.startNonterminal(\"TryClause\", e0);\n    shift(250);                     // 'try'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shift(276);                     // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_TryTargetExpr();\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"TryClause\", e0);\n  }\n\n  function try_TryClause()\n  {\n    shiftT(250);                    // 'try'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shiftT(276);                    // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_TryTargetExpr();\n    shiftT(282);                    // '}'\n  }\n\n  function parse_TryTargetExpr()\n  {\n    eventHandler.startNonterminal(\"TryTargetExpr\", e0);\n    parse_Expr();\n    eventHandler.endNonterminal(\"TryTargetExpr\", e0);\n  }\n\n  function try_TryTargetExpr()\n  {\n    try_Expr();\n  }\n\n  function parse_CatchClause()\n  {\n    eventHandler.startNonterminal(\"CatchClause\", e0);\n    shift(91);                      // 'catch'\n    lookahead1W(256);               // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    whitespace();\n    parse_CatchErrorList();\n    shift(276);                     // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_Expr();\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"CatchClause\", e0);\n  }\n\n  function try_CatchClause()\n  {\n    shiftT(91);                     // 'catch'\n    lookahead1W(256);               // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    try_CatchErrorList();\n    shiftT(276);                    // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_Expr();\n    shiftT(282);                    // '}'\n  }\n\n  function parse_CatchErrorList()\n  {\n    eventHandler.startNonterminal(\"CatchErrorList\", e0);\n    parse_NameTest();\n    for (;;)\n    {\n      lookahead1W(136);             // S^WS | '(:' | '{' | '|'\n      if (l1 != 279)                // '|'\n      {\n        break;\n      }\n      shift(279);                   // '|'\n      lookahead1W(256);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n      whitespace();\n      parse_NameTest();\n    }\n    eventHandler.endNonterminal(\"CatchErrorList\", e0);\n  }\n\n  function try_CatchErrorList()\n  {\n    try_NameTest();\n    for (;;)\n    {\n      lookahead1W(136);             // S^WS | '(:' | '{' | '|'\n      if (l1 != 279)                // '|'\n      {\n        break;\n      }\n      shiftT(279);                  // '|'\n      lookahead1W(256);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n      try_NameTest();\n    }\n  }\n\n  function parse_OrExpr()\n  {\n    eventHandler.startNonterminal(\"OrExpr\", e0);\n    parse_AndExpr();\n    for (;;)\n    {\n      if (l1 != 200)                // 'or'\n      {\n        break;\n      }\n      shift(200);                   // 'or'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      whitespace();\n      parse_AndExpr();\n    }\n    eventHandler.endNonterminal(\"OrExpr\", e0);\n  }\n\n  function try_OrExpr()\n  {\n    try_AndExpr();\n    for (;;)\n    {\n      if (l1 != 200)                // 'or'\n      {\n        break;\n      }\n      shiftT(200);                  // 'or'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      try_AndExpr();\n    }\n  }\n\n  function parse_AndExpr()\n  {\n    eventHandler.startNonterminal(\"AndExpr\", e0);\n    parse_ComparisonExpr();\n    for (;;)\n    {\n      if (l1 != 75)                 // 'and'\n      {\n        break;\n      }\n      shift(75);                    // 'and'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      whitespace();\n      parse_ComparisonExpr();\n    }\n    eventHandler.endNonterminal(\"AndExpr\", e0);\n  }\n\n  function try_AndExpr()\n  {\n    try_ComparisonExpr();\n    for (;;)\n    {\n      if (l1 != 75)                 // 'and'\n      {\n        break;\n      }\n      shiftT(75);                   // 'and'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      try_ComparisonExpr();\n    }\n  }\n\n  function parse_ComparisonExpr()\n  {\n    eventHandler.startNonterminal(\"ComparisonExpr\", e0);\n    parse_FTContainsExpr();\n    if (l1 == 27                    // '!='\n     || l1 == 54                    // '<'\n     || l1 == 57                    // '<<'\n     || l1 == 58                    // '<='\n     || l1 == 60                    // '='\n     || l1 == 61                    // '>'\n     || l1 == 62                    // '>='\n     || l1 == 63                    // '>>'\n     || l1 == 128                   // 'eq'\n     || l1 == 146                   // 'ge'\n     || l1 == 150                   // 'gt'\n     || l1 == 164                   // 'is'\n     || l1 == 172                   // 'le'\n     || l1 == 178                   // 'lt'\n     || l1 == 186)                  // 'ne'\n    {\n      switch (l1)\n      {\n      case 128:                     // 'eq'\n      case 146:                     // 'ge'\n      case 150:                     // 'gt'\n      case 172:                     // 'le'\n      case 178:                     // 'lt'\n      case 186:                     // 'ne'\n        whitespace();\n        parse_ValueComp();\n        break;\n      case 57:                      // '<<'\n      case 63:                      // '>>'\n      case 164:                     // 'is'\n        whitespace();\n        parse_NodeComp();\n        break;\n      default:\n        whitespace();\n        parse_GeneralComp();\n      }\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      whitespace();\n      parse_FTContainsExpr();\n    }\n    eventHandler.endNonterminal(\"ComparisonExpr\", e0);\n  }\n\n  function try_ComparisonExpr()\n  {\n    try_FTContainsExpr();\n    if (l1 == 27                    // '!='\n     || l1 == 54                    // '<'\n     || l1 == 57                    // '<<'\n     || l1 == 58                    // '<='\n     || l1 == 60                    // '='\n     || l1 == 61                    // '>'\n     || l1 == 62                    // '>='\n     || l1 == 63                    // '>>'\n     || l1 == 128                   // 'eq'\n     || l1 == 146                   // 'ge'\n     || l1 == 150                   // 'gt'\n     || l1 == 164                   // 'is'\n     || l1 == 172                   // 'le'\n     || l1 == 178                   // 'lt'\n     || l1 == 186)                  // 'ne'\n    {\n      switch (l1)\n      {\n      case 128:                     // 'eq'\n      case 146:                     // 'ge'\n      case 150:                     // 'gt'\n      case 172:                     // 'le'\n      case 178:                     // 'lt'\n      case 186:                     // 'ne'\n        try_ValueComp();\n        break;\n      case 57:                      // '<<'\n      case 63:                      // '>>'\n      case 164:                     // 'is'\n        try_NodeComp();\n        break;\n      default:\n        try_GeneralComp();\n      }\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      try_FTContainsExpr();\n    }\n  }\n\n  function parse_FTContainsExpr()\n  {\n    eventHandler.startNonterminal(\"FTContainsExpr\", e0);\n    parse_StringConcatExpr();\n    if (l1 == 99)                   // 'contains'\n    {\n      shift(99);                    // 'contains'\n      lookahead1W(76);              // S^WS | '(:' | 'text'\n      shift(244);                   // 'text'\n      lookahead1W(162);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      whitespace();\n      parse_FTSelection();\n      if (l1 == 271)                // 'without'\n      {\n        whitespace();\n        parse_FTIgnoreOption();\n      }\n    }\n    eventHandler.endNonterminal(\"FTContainsExpr\", e0);\n  }\n\n  function try_FTContainsExpr()\n  {\n    try_StringConcatExpr();\n    if (l1 == 99)                   // 'contains'\n    {\n      shiftT(99);                   // 'contains'\n      lookahead1W(76);              // S^WS | '(:' | 'text'\n      shiftT(244);                  // 'text'\n      lookahead1W(162);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      try_FTSelection();\n      if (l1 == 271)                // 'without'\n      {\n        try_FTIgnoreOption();\n      }\n    }\n  }\n\n  function parse_StringConcatExpr()\n  {\n    eventHandler.startNonterminal(\"StringConcatExpr\", e0);\n    parse_RangeExpr();\n    for (;;)\n    {\n      if (l1 != 280)                // '||'\n      {\n        break;\n      }\n      shift(280);                   // '||'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      whitespace();\n      parse_RangeExpr();\n    }\n    eventHandler.endNonterminal(\"StringConcatExpr\", e0);\n  }\n\n  function try_StringConcatExpr()\n  {\n    try_RangeExpr();\n    for (;;)\n    {\n      if (l1 != 280)                // '||'\n      {\n        break;\n      }\n      shiftT(280);                  // '||'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      try_RangeExpr();\n    }\n  }\n\n  function parse_RangeExpr()\n  {\n    eventHandler.startNonterminal(\"RangeExpr\", e0);\n    parse_AdditiveExpr();\n    if (l1 == 248)                  // 'to'\n    {\n      shift(248);                   // 'to'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      whitespace();\n      parse_AdditiveExpr();\n    }\n    eventHandler.endNonterminal(\"RangeExpr\", e0);\n  }\n\n  function try_RangeExpr()\n  {\n    try_AdditiveExpr();\n    if (l1 == 248)                  // 'to'\n    {\n      shiftT(248);                  // 'to'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      try_AdditiveExpr();\n    }\n  }\n\n  function parse_AdditiveExpr()\n  {\n    eventHandler.startNonterminal(\"AdditiveExpr\", e0);\n    parse_MultiplicativeExpr();\n    for (;;)\n    {\n      if (l1 != 40                  // '+'\n       && l1 != 42)                 // '-'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 40:                      // '+'\n        shift(40);                  // '+'\n        break;\n      default:\n        shift(42);                  // '-'\n      }\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      whitespace();\n      parse_MultiplicativeExpr();\n    }\n    eventHandler.endNonterminal(\"AdditiveExpr\", e0);\n  }\n\n  function try_AdditiveExpr()\n  {\n    try_MultiplicativeExpr();\n    for (;;)\n    {\n      if (l1 != 40                  // '+'\n       && l1 != 42)                 // '-'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 40:                      // '+'\n        shiftT(40);                 // '+'\n        break;\n      default:\n        shiftT(42);                 // '-'\n      }\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      try_MultiplicativeExpr();\n    }\n  }\n\n  function parse_MultiplicativeExpr()\n  {\n    eventHandler.startNonterminal(\"MultiplicativeExpr\", e0);\n    parse_UnionExpr();\n    for (;;)\n    {\n      if (l1 != 38                  // '*'\n       && l1 != 118                 // 'div'\n       && l1 != 151                 // 'idiv'\n       && l1 != 180)                // 'mod'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 38:                      // '*'\n        shift(38);                  // '*'\n        break;\n      case 118:                     // 'div'\n        shift(118);                 // 'div'\n        break;\n      case 151:                     // 'idiv'\n        shift(151);                 // 'idiv'\n        break;\n      default:\n        shift(180);                 // 'mod'\n      }\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      whitespace();\n      parse_UnionExpr();\n    }\n    eventHandler.endNonterminal(\"MultiplicativeExpr\", e0);\n  }\n\n  function try_MultiplicativeExpr()\n  {\n    try_UnionExpr();\n    for (;;)\n    {\n      if (l1 != 38                  // '*'\n       && l1 != 118                 // 'div'\n       && l1 != 151                 // 'idiv'\n       && l1 != 180)                // 'mod'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 38:                      // '*'\n        shiftT(38);                 // '*'\n        break;\n      case 118:                     // 'div'\n        shiftT(118);                // 'div'\n        break;\n      case 151:                     // 'idiv'\n        shiftT(151);                // 'idiv'\n        break;\n      default:\n        shiftT(180);                // 'mod'\n      }\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      try_UnionExpr();\n    }\n  }\n\n  function parse_UnionExpr()\n  {\n    eventHandler.startNonterminal(\"UnionExpr\", e0);\n    parse_IntersectExceptExpr();\n    for (;;)\n    {\n      if (l1 != 254                 // 'union'\n       && l1 != 279)                // '|'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 254:                     // 'union'\n        shift(254);                 // 'union'\n        break;\n      default:\n        shift(279);                 // '|'\n      }\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      whitespace();\n      parse_IntersectExceptExpr();\n    }\n    eventHandler.endNonterminal(\"UnionExpr\", e0);\n  }\n\n  function try_UnionExpr()\n  {\n    try_IntersectExceptExpr();\n    for (;;)\n    {\n      if (l1 != 254                 // 'union'\n       && l1 != 279)                // '|'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 254:                     // 'union'\n        shiftT(254);                // 'union'\n        break;\n      default:\n        shiftT(279);                // '|'\n      }\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      try_IntersectExceptExpr();\n    }\n  }\n\n  function parse_IntersectExceptExpr()\n  {\n    eventHandler.startNonterminal(\"IntersectExceptExpr\", e0);\n    parse_InstanceofExpr();\n    for (;;)\n    {\n      lookahead1W(222);             // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n                                    // '<=' | '=' | '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' |\n                                    // 'at' | 'before' | 'case' | 'collation' | 'contains' | 'count' | 'default' |\n                                    // 'descending' | 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' |\n                                    // 'ge' | 'group' | 'gt' | 'idiv' | 'intersect' | 'into' | 'is' | 'le' | 'let' |\n                                    // 'lt' | 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' |\n                                    // 'return' | 'satisfies' | 'sentences' | 'stable' | 'start' | 'times' | 'to' |\n                                    // 'union' | 'where' | 'with' | 'words' | '|' | '||' | '|}' | '}'\n      if (l1 != 131                 // 'except'\n       && l1 != 162)                // 'intersect'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 162:                     // 'intersect'\n        shift(162);                 // 'intersect'\n        break;\n      default:\n        shift(131);                 // 'except'\n      }\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      whitespace();\n      parse_InstanceofExpr();\n    }\n    eventHandler.endNonterminal(\"IntersectExceptExpr\", e0);\n  }\n\n  function try_IntersectExceptExpr()\n  {\n    try_InstanceofExpr();\n    for (;;)\n    {\n      lookahead1W(222);             // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n                                    // '<=' | '=' | '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' |\n                                    // 'at' | 'before' | 'case' | 'collation' | 'contains' | 'count' | 'default' |\n                                    // 'descending' | 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' |\n                                    // 'ge' | 'group' | 'gt' | 'idiv' | 'intersect' | 'into' | 'is' | 'le' | 'let' |\n                                    // 'lt' | 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' |\n                                    // 'return' | 'satisfies' | 'sentences' | 'stable' | 'start' | 'times' | 'to' |\n                                    // 'union' | 'where' | 'with' | 'words' | '|' | '||' | '|}' | '}'\n      if (l1 != 131                 // 'except'\n       && l1 != 162)                // 'intersect'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 162:                     // 'intersect'\n        shiftT(162);                // 'intersect'\n        break;\n      default:\n        shiftT(131);                // 'except'\n      }\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      try_InstanceofExpr();\n    }\n  }\n\n  function parse_InstanceofExpr()\n  {\n    eventHandler.startNonterminal(\"InstanceofExpr\", e0);\n    parse_TreatExpr();\n    lookahead1W(223);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n                                    // '<=' | '=' | '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' |\n                                    // 'at' | 'before' | 'case' | 'collation' | 'contains' | 'count' | 'default' |\n                                    // 'descending' | 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' |\n                                    // 'ge' | 'group' | 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' |\n                                    // 'le' | 'let' | 'lt' | 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' |\n                                    // 'paragraphs' | 'return' | 'satisfies' | 'sentences' | 'stable' | 'start' |\n                                    // 'times' | 'to' | 'union' | 'where' | 'with' | 'words' | '|' | '||' | '|}' | '}'\n    if (l1 == 160)                  // 'instance'\n    {\n      shift(160);                   // 'instance'\n      lookahead1W(64);              // S^WS | '(:' | 'of'\n      shift(196);                   // 'of'\n      lookahead1W(259);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n      whitespace();\n      parse_SequenceType();\n    }\n    eventHandler.endNonterminal(\"InstanceofExpr\", e0);\n  }\n\n  function try_InstanceofExpr()\n  {\n    try_TreatExpr();\n    lookahead1W(223);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n                                    // '<=' | '=' | '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' |\n                                    // 'at' | 'before' | 'case' | 'collation' | 'contains' | 'count' | 'default' |\n                                    // 'descending' | 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' |\n                                    // 'ge' | 'group' | 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' |\n                                    // 'le' | 'let' | 'lt' | 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' |\n                                    // 'paragraphs' | 'return' | 'satisfies' | 'sentences' | 'stable' | 'start' |\n                                    // 'times' | 'to' | 'union' | 'where' | 'with' | 'words' | '|' | '||' | '|}' | '}'\n    if (l1 == 160)                  // 'instance'\n    {\n      shiftT(160);                  // 'instance'\n      lookahead1W(64);              // S^WS | '(:' | 'of'\n      shiftT(196);                  // 'of'\n      lookahead1W(259);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n      try_SequenceType();\n    }\n  }\n\n  function parse_TreatExpr()\n  {\n    eventHandler.startNonterminal(\"TreatExpr\", e0);\n    parse_CastableExpr();\n    lookahead1W(224);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n                                    // '<=' | '=' | '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' |\n                                    // 'at' | 'before' | 'case' | 'collation' | 'contains' | 'count' | 'default' |\n                                    // 'descending' | 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' |\n                                    // 'ge' | 'group' | 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' |\n                                    // 'le' | 'let' | 'lt' | 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' |\n                                    // 'paragraphs' | 'return' | 'satisfies' | 'sentences' | 'stable' | 'start' |\n                                    // 'times' | 'to' | 'treat' | 'union' | 'where' | 'with' | 'words' | '|' | '||' |\n                                    // '|}' | '}'\n    if (l1 == 249)                  // 'treat'\n    {\n      shift(249);                   // 'treat'\n      lookahead1W(30);              // S^WS | '(:' | 'as'\n      shift(79);                    // 'as'\n      lookahead1W(259);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n      whitespace();\n      parse_SequenceType();\n    }\n    eventHandler.endNonterminal(\"TreatExpr\", e0);\n  }\n\n  function try_TreatExpr()\n  {\n    try_CastableExpr();\n    lookahead1W(224);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n                                    // '<=' | '=' | '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' |\n                                    // 'at' | 'before' | 'case' | 'collation' | 'contains' | 'count' | 'default' |\n                                    // 'descending' | 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' |\n                                    // 'ge' | 'group' | 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' |\n                                    // 'le' | 'let' | 'lt' | 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' |\n                                    // 'paragraphs' | 'return' | 'satisfies' | 'sentences' | 'stable' | 'start' |\n                                    // 'times' | 'to' | 'treat' | 'union' | 'where' | 'with' | 'words' | '|' | '||' |\n                                    // '|}' | '}'\n    if (l1 == 249)                  // 'treat'\n    {\n      shiftT(249);                  // 'treat'\n      lookahead1W(30);              // S^WS | '(:' | 'as'\n      shiftT(79);                   // 'as'\n      lookahead1W(259);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n      try_SequenceType();\n    }\n  }\n\n  function parse_CastableExpr()\n  {\n    eventHandler.startNonterminal(\"CastableExpr\", e0);\n    parse_CastExpr();\n    lookahead1W(225);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n                                    // '<=' | '=' | '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' |\n                                    // 'at' | 'before' | 'case' | 'castable' | 'collation' | 'contains' | 'count' |\n                                    // 'default' | 'descending' | 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' |\n                                    // 'for' | 'ge' | 'group' | 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' |\n                                    // 'is' | 'le' | 'let' | 'lt' | 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' |\n                                    // 'paragraphs' | 'return' | 'satisfies' | 'sentences' | 'stable' | 'start' |\n                                    // 'times' | 'to' | 'treat' | 'union' | 'where' | 'with' | 'words' | '|' | '||' |\n                                    // '|}' | '}'\n    if (l1 == 90)                   // 'castable'\n    {\n      shift(90);                    // 'castable'\n      lookahead1W(30);              // S^WS | '(:' | 'as'\n      shift(79);                    // 'as'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n      whitespace();\n      parse_SingleType();\n    }\n    eventHandler.endNonterminal(\"CastableExpr\", e0);\n  }\n\n  function try_CastableExpr()\n  {\n    try_CastExpr();\n    lookahead1W(225);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n                                    // '<=' | '=' | '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' |\n                                    // 'at' | 'before' | 'case' | 'castable' | 'collation' | 'contains' | 'count' |\n                                    // 'default' | 'descending' | 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' |\n                                    // 'for' | 'ge' | 'group' | 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' |\n                                    // 'is' | 'le' | 'let' | 'lt' | 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' |\n                                    // 'paragraphs' | 'return' | 'satisfies' | 'sentences' | 'stable' | 'start' |\n                                    // 'times' | 'to' | 'treat' | 'union' | 'where' | 'with' | 'words' | '|' | '||' |\n                                    // '|}' | '}'\n    if (l1 == 90)                   // 'castable'\n    {\n      shiftT(90);                   // 'castable'\n      lookahead1W(30);              // S^WS | '(:' | 'as'\n      shiftT(79);                   // 'as'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n      try_SingleType();\n    }\n  }\n\n  function parse_CastExpr()\n  {\n    eventHandler.startNonterminal(\"CastExpr\", e0);\n    parse_UnaryExpr();\n    lookahead1W(227);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n                                    // '<=' | '=' | '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' |\n                                    // 'at' | 'before' | 'case' | 'cast' | 'castable' | 'collation' | 'contains' |\n                                    // 'count' | 'default' | 'descending' | 'div' | 'else' | 'empty' | 'end' | 'eq' |\n                                    // 'except' | 'for' | 'ge' | 'group' | 'gt' | 'idiv' | 'instance' | 'intersect' |\n                                    // 'into' | 'is' | 'le' | 'let' | 'lt' | 'mod' | 'modify' | 'ne' | 'only' | 'or' |\n                                    // 'order' | 'paragraphs' | 'return' | 'satisfies' | 'sentences' | 'stable' |\n                                    // 'start' | 'times' | 'to' | 'treat' | 'union' | 'where' | 'with' | 'words' | '|' |\n                                    // '||' | '|}' | '}'\n    if (l1 == 89)                   // 'cast'\n    {\n      shift(89);                    // 'cast'\n      lookahead1W(30);              // S^WS | '(:' | 'as'\n      shift(79);                    // 'as'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n      whitespace();\n      parse_SingleType();\n    }\n    eventHandler.endNonterminal(\"CastExpr\", e0);\n  }\n\n  function try_CastExpr()\n  {\n    try_UnaryExpr();\n    lookahead1W(227);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n                                    // '<=' | '=' | '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' |\n                                    // 'at' | 'before' | 'case' | 'cast' | 'castable' | 'collation' | 'contains' |\n                                    // 'count' | 'default' | 'descending' | 'div' | 'else' | 'empty' | 'end' | 'eq' |\n                                    // 'except' | 'for' | 'ge' | 'group' | 'gt' | 'idiv' | 'instance' | 'intersect' |\n                                    // 'into' | 'is' | 'le' | 'let' | 'lt' | 'mod' | 'modify' | 'ne' | 'only' | 'or' |\n                                    // 'order' | 'paragraphs' | 'return' | 'satisfies' | 'sentences' | 'stable' |\n                                    // 'start' | 'times' | 'to' | 'treat' | 'union' | 'where' | 'with' | 'words' | '|' |\n                                    // '||' | '|}' | '}'\n    if (l1 == 89)                   // 'cast'\n    {\n      shiftT(89);                   // 'cast'\n      lookahead1W(30);              // S^WS | '(:' | 'as'\n      shiftT(79);                   // 'as'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n      try_SingleType();\n    }\n  }\n\n  function parse_UnaryExpr()\n  {\n    eventHandler.startNonterminal(\"UnaryExpr\", e0);\n    for (;;)\n    {\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      if (l1 != 40                  // '+'\n       && l1 != 42)                 // '-'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 42:                      // '-'\n        shift(42);                  // '-'\n        break;\n      default:\n        shift(40);                  // '+'\n      }\n    }\n    whitespace();\n    parse_ValueExpr();\n    eventHandler.endNonterminal(\"UnaryExpr\", e0);\n  }\n\n  function try_UnaryExpr()\n  {\n    for (;;)\n    {\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      if (l1 != 40                  // '+'\n       && l1 != 42)                 // '-'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 42:                      // '-'\n        shiftT(42);                 // '-'\n        break;\n      default:\n        shiftT(40);                 // '+'\n      }\n    }\n    try_ValueExpr();\n  }\n\n  function parse_ValueExpr()\n  {\n    eventHandler.startNonterminal(\"ValueExpr\", e0);\n    switch (l1)\n    {\n    case 260:                       // 'validate'\n      lookahead2W(247);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n                                    // '//' | ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' |\n                                    // 'after' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'lax' | 'le' | 'let' |\n                                    // 'lt' | 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' |\n                                    // 'return' | 'satisfies' | 'sentences' | 'stable' | 'start' | 'strict' | 'times' |\n                                    // 'to' | 'treat' | 'type' | 'union' | 'where' | 'with' | 'words' | '{' | '|' |\n                                    // '||' | '|}' | '}'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 87812:                     // 'validate' 'lax'\n    case 123140:                    // 'validate' 'strict'\n    case 129284:                    // 'validate' 'type'\n    case 141572:                    // 'validate' '{'\n      parse_ValidateExpr();\n      break;\n    case 35:                        // '(#'\n      parse_ExtensionExpr();\n      break;\n    default:\n      parse_SimpleMapExpr();\n    }\n    eventHandler.endNonterminal(\"ValueExpr\", e0);\n  }\n\n  function try_ValueExpr()\n  {\n    switch (l1)\n    {\n    case 260:                       // 'validate'\n      lookahead2W(247);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n                                    // '//' | ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' |\n                                    // 'after' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'lax' | 'le' | 'let' |\n                                    // 'lt' | 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' |\n                                    // 'return' | 'satisfies' | 'sentences' | 'stable' | 'start' | 'strict' | 'times' |\n                                    // 'to' | 'treat' | 'type' | 'union' | 'where' | 'with' | 'words' | '{' | '|' |\n                                    // '||' | '|}' | '}'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 87812:                     // 'validate' 'lax'\n    case 123140:                    // 'validate' 'strict'\n    case 129284:                    // 'validate' 'type'\n    case 141572:                    // 'validate' '{'\n      try_ValidateExpr();\n      break;\n    case 35:                        // '(#'\n      try_ExtensionExpr();\n      break;\n    default:\n      try_SimpleMapExpr();\n    }\n  }\n\n  function parse_SimpleMapExpr()\n  {\n    eventHandler.startNonterminal(\"SimpleMapExpr\", e0);\n    parse_PathExpr();\n    for (;;)\n    {\n      if (l1 != 26)                 // '!'\n      {\n        break;\n      }\n      shift(26);                    // '!'\n      lookahead1W(265);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(:' | '.' | '..' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      whitespace();\n      parse_PathExpr();\n    }\n    eventHandler.endNonterminal(\"SimpleMapExpr\", e0);\n  }\n\n  function try_SimpleMapExpr()\n  {\n    try_PathExpr();\n    for (;;)\n    {\n      if (l1 != 26)                 // '!'\n      {\n        break;\n      }\n      shiftT(26);                   // '!'\n      lookahead1W(265);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(:' | '.' | '..' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      try_PathExpr();\n    }\n  }\n\n  function parse_GeneralComp()\n  {\n    eventHandler.startNonterminal(\"GeneralComp\", e0);\n    switch (l1)\n    {\n    case 60:                        // '='\n      shift(60);                    // '='\n      break;\n    case 27:                        // '!='\n      shift(27);                    // '!='\n      break;\n    case 54:                        // '<'\n      shift(54);                    // '<'\n      break;\n    case 58:                        // '<='\n      shift(58);                    // '<='\n      break;\n    case 61:                        // '>'\n      shift(61);                    // '>'\n      break;\n    default:\n      shift(62);                    // '>='\n    }\n    eventHandler.endNonterminal(\"GeneralComp\", e0);\n  }\n\n  function try_GeneralComp()\n  {\n    switch (l1)\n    {\n    case 60:                        // '='\n      shiftT(60);                   // '='\n      break;\n    case 27:                        // '!='\n      shiftT(27);                   // '!='\n      break;\n    case 54:                        // '<'\n      shiftT(54);                   // '<'\n      break;\n    case 58:                        // '<='\n      shiftT(58);                   // '<='\n      break;\n    case 61:                        // '>'\n      shiftT(61);                   // '>'\n      break;\n    default:\n      shiftT(62);                   // '>='\n    }\n  }\n\n  function parse_ValueComp()\n  {\n    eventHandler.startNonterminal(\"ValueComp\", e0);\n    switch (l1)\n    {\n    case 128:                       // 'eq'\n      shift(128);                   // 'eq'\n      break;\n    case 186:                       // 'ne'\n      shift(186);                   // 'ne'\n      break;\n    case 178:                       // 'lt'\n      shift(178);                   // 'lt'\n      break;\n    case 172:                       // 'le'\n      shift(172);                   // 'le'\n      break;\n    case 150:                       // 'gt'\n      shift(150);                   // 'gt'\n      break;\n    default:\n      shift(146);                   // 'ge'\n    }\n    eventHandler.endNonterminal(\"ValueComp\", e0);\n  }\n\n  function try_ValueComp()\n  {\n    switch (l1)\n    {\n    case 128:                       // 'eq'\n      shiftT(128);                  // 'eq'\n      break;\n    case 186:                       // 'ne'\n      shiftT(186);                  // 'ne'\n      break;\n    case 178:                       // 'lt'\n      shiftT(178);                  // 'lt'\n      break;\n    case 172:                       // 'le'\n      shiftT(172);                  // 'le'\n      break;\n    case 150:                       // 'gt'\n      shiftT(150);                  // 'gt'\n      break;\n    default:\n      shiftT(146);                  // 'ge'\n    }\n  }\n\n  function parse_NodeComp()\n  {\n    eventHandler.startNonterminal(\"NodeComp\", e0);\n    switch (l1)\n    {\n    case 164:                       // 'is'\n      shift(164);                   // 'is'\n      break;\n    case 57:                        // '<<'\n      shift(57);                    // '<<'\n      break;\n    default:\n      shift(63);                    // '>>'\n    }\n    eventHandler.endNonterminal(\"NodeComp\", e0);\n  }\n\n  function try_NodeComp()\n  {\n    switch (l1)\n    {\n    case 164:                       // 'is'\n      shiftT(164);                  // 'is'\n      break;\n    case 57:                        // '<<'\n      shiftT(57);                   // '<<'\n      break;\n    default:\n      shiftT(63);                   // '>>'\n    }\n  }\n\n  function parse_ValidateExpr()\n  {\n    eventHandler.startNonterminal(\"ValidateExpr\", e0);\n    shift(260);                     // 'validate'\n    lookahead1W(160);               // S^WS | '(:' | 'lax' | 'strict' | 'type' | '{'\n    if (l1 != 276)                  // '{'\n    {\n      switch (l1)\n      {\n      case 252:                     // 'type'\n        shift(252);                 // 'type'\n        lookahead1W(254);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n        whitespace();\n        parse_TypeName();\n        break;\n      default:\n        whitespace();\n        parse_ValidationMode();\n      }\n    }\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shift(276);                     // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_Expr();\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"ValidateExpr\", e0);\n  }\n\n  function try_ValidateExpr()\n  {\n    shiftT(260);                    // 'validate'\n    lookahead1W(160);               // S^WS | '(:' | 'lax' | 'strict' | 'type' | '{'\n    if (l1 != 276)                  // '{'\n    {\n      switch (l1)\n      {\n      case 252:                     // 'type'\n        shiftT(252);                // 'type'\n        lookahead1W(254);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n        try_TypeName();\n        break;\n      default:\n        try_ValidationMode();\n      }\n    }\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shiftT(276);                    // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_Expr();\n    shiftT(282);                    // '}'\n  }\n\n  function parse_ValidationMode()\n  {\n    eventHandler.startNonterminal(\"ValidationMode\", e0);\n    switch (l1)\n    {\n    case 171:                       // 'lax'\n      shift(171);                   // 'lax'\n      break;\n    default:\n      shift(240);                   // 'strict'\n    }\n    eventHandler.endNonterminal(\"ValidationMode\", e0);\n  }\n\n  function try_ValidationMode()\n  {\n    switch (l1)\n    {\n    case 171:                       // 'lax'\n      shiftT(171);                  // 'lax'\n      break;\n    default:\n      shiftT(240);                  // 'strict'\n    }\n  }\n\n  function parse_ExtensionExpr()\n  {\n    eventHandler.startNonterminal(\"ExtensionExpr\", e0);\n    for (;;)\n    {\n      whitespace();\n      parse_Pragma();\n      lookahead1W(100);             // S^WS | '(#' | '(:' | '{'\n      if (l1 != 35)                 // '(#'\n      {\n        break;\n      }\n    }\n    shift(276);                     // '{'\n    lookahead1W(273);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|' | '}'\n    if (l1 != 282)                  // '}'\n    {\n      whitespace();\n      parse_Expr();\n    }\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"ExtensionExpr\", e0);\n  }\n\n  function try_ExtensionExpr()\n  {\n    for (;;)\n    {\n      try_Pragma();\n      lookahead1W(100);             // S^WS | '(#' | '(:' | '{'\n      if (l1 != 35)                 // '(#'\n      {\n        break;\n      }\n    }\n    shiftT(276);                    // '{'\n    lookahead1W(273);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|' | '}'\n    if (l1 != 282)                  // '}'\n    {\n      try_Expr();\n    }\n    shiftT(282);                    // '}'\n  }\n\n  function parse_Pragma()\n  {\n    eventHandler.startNonterminal(\"Pragma\", e0);\n    shift(35);                      // '(#'\n    lookahead1(251);                // EQName^Token | S | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' |\n                                    // 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'json-item' | 'last' | 'lax' |\n                                    // 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' | 'namespace' |\n                                    // 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' | 'only' | 'option' |\n                                    // 'or' | 'order' | 'ordered' | 'ordering' | 'parent' | 'preceding' |\n                                    // 'preceding-sibling' | 'processing-instruction' | 'rename' | 'replace' |\n                                    // 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    if (l1 == 21)                   // S\n    {\n      shift(21);                    // S\n    }\n    parse_EQName();\n    lookahead1(10);                 // S | '#)'\n    if (l1 == 21)                   // S\n    {\n      shift(21);                    // S\n      lookahead1(0);                // PragmaContents\n      shift(1);                     // PragmaContents\n    }\n    lookahead1(5);                  // '#)'\n    shift(30);                      // '#)'\n    eventHandler.endNonterminal(\"Pragma\", e0);\n  }\n\n  function try_Pragma()\n  {\n    shiftT(35);                     // '(#'\n    lookahead1(251);                // EQName^Token | S | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' |\n                                    // 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'json-item' | 'last' | 'lax' |\n                                    // 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' | 'namespace' |\n                                    // 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' | 'only' | 'option' |\n                                    // 'or' | 'order' | 'ordered' | 'ordering' | 'parent' | 'preceding' |\n                                    // 'preceding-sibling' | 'processing-instruction' | 'rename' | 'replace' |\n                                    // 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    if (l1 == 21)                   // S\n    {\n      shiftT(21);                   // S\n    }\n    try_EQName();\n    lookahead1(10);                 // S | '#)'\n    if (l1 == 21)                   // S\n    {\n      shiftT(21);                   // S\n      lookahead1(0);                // PragmaContents\n      shiftT(1);                    // PragmaContents\n    }\n    lookahead1(5);                  // '#)'\n    shiftT(30);                     // '#)'\n  }\n\n  function parse_PathExpr()\n  {\n    eventHandler.startNonterminal(\"PathExpr\", e0);\n    switch (l1)\n    {\n    case 46:                        // '/'\n      shift(46);                    // '/'\n      lookahead1W(285);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | EOF | '!' | '!=' | '$' | '%' | '(' | '(:' | ')' | '*' |\n                                    // '+' | ',' | '-' | '.' | '..' | ':' | ';' | '<' | '<!--' | '<<' | '<=' | '<?' |\n                                    // '=' | '>' | '>=' | '>>' | '@' | '[' | ']' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'by' |\n                                    // 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'contains' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'paragraphs' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'self' |\n                                    // 'sentences' | 'sliding' | 'some' | 'stable' | 'start' | 'strict' |\n                                    // 'structured-item' | 'switch' | 'text' | 'times' | 'to' | 'treat' | 'try' |\n                                    // 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // 'words' | 'xquery' | '{' | '{|' | '|' | '||' | '|}' | '}'\n      switch (l1)\n      {\n      case 25:                      // EOF\n      case 26:                      // '!'\n      case 27:                      // '!='\n      case 37:                      // ')'\n      case 38:                      // '*'\n      case 40:                      // '+'\n      case 41:                      // ','\n      case 42:                      // '-'\n      case 49:                      // ':'\n      case 53:                      // ';'\n      case 57:                      // '<<'\n      case 58:                      // '<='\n      case 60:                      // '='\n      case 61:                      // '>'\n      case 62:                      // '>='\n      case 63:                      // '>>'\n      case 69:                      // ']'\n      case 87:                      // 'by'\n      case 99:                      // 'contains'\n      case 205:                     // 'paragraphs'\n      case 232:                     // 'sentences'\n      case 247:                     // 'times'\n      case 273:                     // 'words'\n      case 279:                     // '|'\n      case 280:                     // '||'\n      case 281:                     // '|}'\n      case 282:                     // '}'\n        break;\n      default:\n        whitespace();\n        parse_RelativePathExpr();\n      }\n      break;\n    case 47:                        // '//'\n      shift(47);                    // '//'\n      lookahead1W(264);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(:' | '.' | '..' | '<' | '<!--' |\n                                    // '<?' | '@' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' |\n                                    // 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'json-item' | 'last' | 'lax' |\n                                    // 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' | 'namespace' |\n                                    // 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' | 'only' | 'option' |\n                                    // 'or' | 'order' | 'ordered' | 'ordering' | 'parent' | 'preceding' |\n                                    // 'preceding-sibling' | 'processing-instruction' | 'rename' | 'replace' |\n                                    // 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      whitespace();\n      parse_RelativePathExpr();\n      break;\n    default:\n      parse_RelativePathExpr();\n    }\n    eventHandler.endNonterminal(\"PathExpr\", e0);\n  }\n\n  function try_PathExpr()\n  {\n    switch (l1)\n    {\n    case 46:                        // '/'\n      shiftT(46);                   // '/'\n      lookahead1W(285);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | EOF | '!' | '!=' | '$' | '%' | '(' | '(:' | ')' | '*' |\n                                    // '+' | ',' | '-' | '.' | '..' | ':' | ';' | '<' | '<!--' | '<<' | '<=' | '<?' |\n                                    // '=' | '>' | '>=' | '>>' | '@' | '[' | ']' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'by' |\n                                    // 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'contains' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'paragraphs' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'self' |\n                                    // 'sentences' | 'sliding' | 'some' | 'stable' | 'start' | 'strict' |\n                                    // 'structured-item' | 'switch' | 'text' | 'times' | 'to' | 'treat' | 'try' |\n                                    // 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // 'words' | 'xquery' | '{' | '{|' | '|' | '||' | '|}' | '}'\n      switch (l1)\n      {\n      case 25:                      // EOF\n      case 26:                      // '!'\n      case 27:                      // '!='\n      case 37:                      // ')'\n      case 38:                      // '*'\n      case 40:                      // '+'\n      case 41:                      // ','\n      case 42:                      // '-'\n      case 49:                      // ':'\n      case 53:                      // ';'\n      case 57:                      // '<<'\n      case 58:                      // '<='\n      case 60:                      // '='\n      case 61:                      // '>'\n      case 62:                      // '>='\n      case 63:                      // '>>'\n      case 69:                      // ']'\n      case 87:                      // 'by'\n      case 99:                      // 'contains'\n      case 205:                     // 'paragraphs'\n      case 232:                     // 'sentences'\n      case 247:                     // 'times'\n      case 273:                     // 'words'\n      case 279:                     // '|'\n      case 280:                     // '||'\n      case 281:                     // '|}'\n      case 282:                     // '}'\n        break;\n      default:\n        try_RelativePathExpr();\n      }\n      break;\n    case 47:                        // '//'\n      shiftT(47);                   // '//'\n      lookahead1W(264);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(:' | '.' | '..' | '<' | '<!--' |\n                                    // '<?' | '@' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' |\n                                    // 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'json-item' | 'last' | 'lax' |\n                                    // 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' | 'namespace' |\n                                    // 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' | 'only' | 'option' |\n                                    // 'or' | 'order' | 'ordered' | 'ordering' | 'parent' | 'preceding' |\n                                    // 'preceding-sibling' | 'processing-instruction' | 'rename' | 'replace' |\n                                    // 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      try_RelativePathExpr();\n      break;\n    default:\n      try_RelativePathExpr();\n    }\n  }\n\n  function parse_RelativePathExpr()\n  {\n    eventHandler.startNonterminal(\"RelativePathExpr\", e0);\n    parse_StepExpr();\n    for (;;)\n    {\n      switch (l1)\n      {\n      case 26:                      // '!'\n        lookahead2W(265);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(:' | '.' | '..' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 25                  // EOF\n       && lk != 27                  // '!='\n       && lk != 37                  // ')'\n       && lk != 38                  // '*'\n       && lk != 40                  // '+'\n       && lk != 41                  // ','\n       && lk != 42                  // '-'\n       && lk != 46                  // '/'\n       && lk != 47                  // '//'\n       && lk != 49                  // ':'\n       && lk != 53                  // ';'\n       && lk != 54                  // '<'\n       && lk != 57                  // '<<'\n       && lk != 58                  // '<='\n       && lk != 60                  // '='\n       && lk != 61                  // '>'\n       && lk != 62                  // '>='\n       && lk != 63                  // '>>'\n       && lk != 69                  // ']'\n       && lk != 70                  // 'after'\n       && lk != 75                  // 'and'\n       && lk != 79                  // 'as'\n       && lk != 80                  // 'ascending'\n       && lk != 81                  // 'at'\n       && lk != 84                  // 'before'\n       && lk != 87                  // 'by'\n       && lk != 88                  // 'case'\n       && lk != 89                  // 'cast'\n       && lk != 90                  // 'castable'\n       && lk != 94                  // 'collation'\n       && lk != 99                  // 'contains'\n       && lk != 105                 // 'count'\n       && lk != 109                 // 'default'\n       && lk != 113                 // 'descending'\n       && lk != 118                 // 'div'\n       && lk != 122                 // 'else'\n       && lk != 123                 // 'empty'\n       && lk != 126                 // 'end'\n       && lk != 128                 // 'eq'\n       && lk != 131                 // 'except'\n       && lk != 137                 // 'for'\n       && lk != 146                 // 'ge'\n       && lk != 148                 // 'group'\n       && lk != 150                 // 'gt'\n       && lk != 151                 // 'idiv'\n       && lk != 160                 // 'instance'\n       && lk != 162                 // 'intersect'\n       && lk != 163                 // 'into'\n       && lk != 164                 // 'is'\n       && lk != 172                 // 'le'\n       && lk != 174                 // 'let'\n       && lk != 178                 // 'lt'\n       && lk != 180                 // 'mod'\n       && lk != 181                 // 'modify'\n       && lk != 186                 // 'ne'\n       && lk != 198                 // 'only'\n       && lk != 200                 // 'or'\n       && lk != 201                 // 'order'\n       && lk != 205                 // 'paragraphs'\n       && lk != 220                 // 'return'\n       && lk != 224                 // 'satisfies'\n       && lk != 232                 // 'sentences'\n       && lk != 236                 // 'stable'\n       && lk != 237                 // 'start'\n       && lk != 247                 // 'times'\n       && lk != 248                 // 'to'\n       && lk != 249                 // 'treat'\n       && lk != 254                 // 'union'\n       && lk != 266                 // 'where'\n       && lk != 270                 // 'with'\n       && lk != 273                 // 'words'\n       && lk != 279                 // '|'\n       && lk != 280                 // '||'\n       && lk != 281                 // '|}'\n       && lk != 282                 // '}'\n       && lk != 23578               // '!' '/'\n       && lk != 24090)              // '!' '//'\n      {\n        lk = memoized(3, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            switch (l1)\n            {\n            case 46:                // '/'\n              shiftT(46);           // '/'\n              break;\n            case 47:                // '//'\n              shiftT(47);           // '//'\n              break;\n            default:\n              shiftT(26);           // '!'\n            }\n            lookahead1W(264);       // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(:' | '.' | '..' | '<' | '<!--' |\n                                    // '<?' | '@' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' |\n                                    // 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'json-item' | 'last' | 'lax' |\n                                    // 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' | 'namespace' |\n                                    // 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' | 'only' | 'option' |\n                                    // 'or' | 'order' | 'ordered' | 'ordering' | 'parent' | 'preceding' |\n                                    // 'preceding-sibling' | 'processing-instruction' | 'rename' | 'replace' |\n                                    // 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n            try_StepExpr();\n            lk = -1;\n          }\n          catch (p1A)\n          {\n            lk = -2;\n          }\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(3, e0, lk);\n        }\n      }\n      if (lk != -1\n       && lk != 46                  // '/'\n       && lk != 47)                 // '//'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 46:                      // '/'\n        shift(46);                  // '/'\n        break;\n      case 47:                      // '//'\n        shift(47);                  // '//'\n        break;\n      default:\n        shift(26);                  // '!'\n      }\n      lookahead1W(264);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(:' | '.' | '..' | '<' | '<!--' |\n                                    // '<?' | '@' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' |\n                                    // 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'json-item' | 'last' | 'lax' |\n                                    // 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' | 'namespace' |\n                                    // 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' | 'only' | 'option' |\n                                    // 'or' | 'order' | 'ordered' | 'ordering' | 'parent' | 'preceding' |\n                                    // 'preceding-sibling' | 'processing-instruction' | 'rename' | 'replace' |\n                                    // 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      whitespace();\n      parse_StepExpr();\n    }\n    eventHandler.endNonterminal(\"RelativePathExpr\", e0);\n  }\n\n  function try_RelativePathExpr()\n  {\n    try_StepExpr();\n    for (;;)\n    {\n      switch (l1)\n      {\n      case 26:                      // '!'\n        lookahead2W(265);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(:' | '.' | '..' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 25                  // EOF\n       && lk != 27                  // '!='\n       && lk != 37                  // ')'\n       && lk != 38                  // '*'\n       && lk != 40                  // '+'\n       && lk != 41                  // ','\n       && lk != 42                  // '-'\n       && lk != 46                  // '/'\n       && lk != 47                  // '//'\n       && lk != 49                  // ':'\n       && lk != 53                  // ';'\n       && lk != 54                  // '<'\n       && lk != 57                  // '<<'\n       && lk != 58                  // '<='\n       && lk != 60                  // '='\n       && lk != 61                  // '>'\n       && lk != 62                  // '>='\n       && lk != 63                  // '>>'\n       && lk != 69                  // ']'\n       && lk != 70                  // 'after'\n       && lk != 75                  // 'and'\n       && lk != 79                  // 'as'\n       && lk != 80                  // 'ascending'\n       && lk != 81                  // 'at'\n       && lk != 84                  // 'before'\n       && lk != 87                  // 'by'\n       && lk != 88                  // 'case'\n       && lk != 89                  // 'cast'\n       && lk != 90                  // 'castable'\n       && lk != 94                  // 'collation'\n       && lk != 99                  // 'contains'\n       && lk != 105                 // 'count'\n       && lk != 109                 // 'default'\n       && lk != 113                 // 'descending'\n       && lk != 118                 // 'div'\n       && lk != 122                 // 'else'\n       && lk != 123                 // 'empty'\n       && lk != 126                 // 'end'\n       && lk != 128                 // 'eq'\n       && lk != 131                 // 'except'\n       && lk != 137                 // 'for'\n       && lk != 146                 // 'ge'\n       && lk != 148                 // 'group'\n       && lk != 150                 // 'gt'\n       && lk != 151                 // 'idiv'\n       && lk != 160                 // 'instance'\n       && lk != 162                 // 'intersect'\n       && lk != 163                 // 'into'\n       && lk != 164                 // 'is'\n       && lk != 172                 // 'le'\n       && lk != 174                 // 'let'\n       && lk != 178                 // 'lt'\n       && lk != 180                 // 'mod'\n       && lk != 181                 // 'modify'\n       && lk != 186                 // 'ne'\n       && lk != 198                 // 'only'\n       && lk != 200                 // 'or'\n       && lk != 201                 // 'order'\n       && lk != 205                 // 'paragraphs'\n       && lk != 220                 // 'return'\n       && lk != 224                 // 'satisfies'\n       && lk != 232                 // 'sentences'\n       && lk != 236                 // 'stable'\n       && lk != 237                 // 'start'\n       && lk != 247                 // 'times'\n       && lk != 248                 // 'to'\n       && lk != 249                 // 'treat'\n       && lk != 254                 // 'union'\n       && lk != 266                 // 'where'\n       && lk != 270                 // 'with'\n       && lk != 273                 // 'words'\n       && lk != 279                 // '|'\n       && lk != 280                 // '||'\n       && lk != 281                 // '|}'\n       && lk != 282                 // '}'\n       && lk != 23578               // '!' '/'\n       && lk != 24090)              // '!' '//'\n      {\n        lk = memoized(3, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            switch (l1)\n            {\n            case 46:                // '/'\n              shiftT(46);           // '/'\n              break;\n            case 47:                // '//'\n              shiftT(47);           // '//'\n              break;\n            default:\n              shiftT(26);           // '!'\n            }\n            lookahead1W(264);       // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(:' | '.' | '..' | '<' | '<!--' |\n                                    // '<?' | '@' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' |\n                                    // 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'json-item' | 'last' | 'lax' |\n                                    // 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' | 'namespace' |\n                                    // 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' | 'only' | 'option' |\n                                    // 'or' | 'order' | 'ordered' | 'ordering' | 'parent' | 'preceding' |\n                                    // 'preceding-sibling' | 'processing-instruction' | 'rename' | 'replace' |\n                                    // 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n            try_StepExpr();\n            memoize(3, e0A, -1);\n            continue;\n          }\n          catch (p1A)\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            memoize(3, e0A, -2);\n            break;\n          }\n        }\n      }\n      if (lk != -1\n       && lk != 46                  // '/'\n       && lk != 47)                 // '//'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 46:                      // '/'\n        shiftT(46);                 // '/'\n        break;\n      case 47:                      // '//'\n        shiftT(47);                 // '//'\n        break;\n      default:\n        shiftT(26);                 // '!'\n      }\n      lookahead1W(264);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(:' | '.' | '..' | '<' | '<!--' |\n                                    // '<?' | '@' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' |\n                                    // 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'json-item' | 'last' | 'lax' |\n                                    // 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' | 'namespace' |\n                                    // 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' | 'only' | 'option' |\n                                    // 'or' | 'order' | 'ordered' | 'ordering' | 'parent' | 'preceding' |\n                                    // 'preceding-sibling' | 'processing-instruction' | 'rename' | 'replace' |\n                                    // 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      try_StepExpr();\n    }\n  }\n\n  function parse_StepExpr()\n  {\n    eventHandler.startNonterminal(\"StepExpr\", e0);\n    switch (l1)\n    {\n    case 82:                        // 'attribute'\n      lookahead2W(284);             // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |\n                                    // ',' | '-' | '/' | '//' | ':' | '::' | ';' | '<' | '<<' | '<=' | '=' | '>' |\n                                    // '>=' | '>>' | '[' | ']' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'by' |\n                                    // 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'contains' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'paragraphs' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'self' |\n                                    // 'sentences' | 'sliding' | 'some' | 'stable' | 'start' | 'strict' |\n                                    // 'structured-item' | 'switch' | 'text' | 'times' | 'to' | 'treat' | 'try' |\n                                    // 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // 'words' | 'xquery' | '{' | '|' | '||' | '|}' | '}'\n      break;\n    case 121:                       // 'element'\n      lookahead2W(282);             // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |\n                                    // ',' | '-' | '/' | '//' | ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' |\n                                    // '>>' | '[' | ']' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'by' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'contains' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'paragraphs' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'self' |\n                                    // 'sentences' | 'sliding' | 'some' | 'stable' | 'start' | 'strict' |\n                                    // 'structured-item' | 'switch' | 'text' | 'times' | 'to' | 'treat' | 'try' |\n                                    // 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // 'words' | 'xquery' | '{' | '|' | '||' | '|}' | '}'\n      break;\n    case 184:                       // 'namespace'\n    case 216:                       // 'processing-instruction'\n      lookahead2W(281);             // NCName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |\n                                    // ',' | '-' | '/' | '//' | ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' |\n                                    // '>>' | '[' | ']' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' |\n                                    // 'before' | 'boundary-space' | 'break' | 'by' | 'case' | 'cast' | 'castable' |\n                                    // 'catch' | 'child' | 'collation' | 'comment' | 'constraint' | 'construction' |\n                                    // 'contains' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' |\n                                    // 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'last' | 'lax' | 'le' | 'let' |\n                                    // 'loop' | 'lt' | 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' |\n                                    // 'ne' | 'node' | 'nodes' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'paragraphs' | 'parent' | 'preceding' |\n                                    // 'preceding-sibling' | 'processing-instruction' | 'rename' | 'replace' |\n                                    // 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sentences' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'switch' | 'text' |\n                                    // 'times' | 'to' | 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | 'words' | 'xquery' | '{' | '|' | '||' | '|}' | '}'\n      break;\n    case 96:                        // 'comment'\n    case 119:                       // 'document'\n    case 202:                       // 'ordered'\n    case 244:                       // 'text'\n    case 256:                       // 'unordered'\n      lookahead2W(246);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n                                    // '//' | ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' |\n                                    // 'after' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'by' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'sentences' | 'stable' | 'start' | 'times' | 'to' | 'treat' |\n                                    // 'union' | 'where' | 'with' | 'words' | '{' | '|' | '||' | '|}' | '}'\n      break;\n    case 78:                        // 'array'\n    case 124:                       // 'empty-sequence'\n    case 152:                       // 'if'\n    case 165:                       // 'item'\n    case 167:                       // 'json-item'\n    case 242:                       // 'structured-item'\n    case 243:                       // 'switch'\n    case 253:                       // 'typeswitch'\n      lookahead2W(239);             // S^WS | EOF | '!' | '!=' | '#' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n                                    // ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' | 'after' |\n                                    // 'and' | 'as' | 'ascending' | 'at' | 'before' | 'by' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'sentences' | 'stable' | 'start' | 'times' | 'to' | 'treat' |\n                                    // 'union' | 'where' | 'with' | 'words' | '|' | '||' | '|}' | '}'\n      break;\n    case 73:                        // 'ancestor'\n    case 74:                        // 'ancestor-or-self'\n    case 93:                        // 'child'\n    case 111:                       // 'descendant'\n    case 112:                       // 'descendant-or-self'\n    case 135:                       // 'following'\n    case 136:                       // 'following-sibling'\n    case 206:                       // 'parent'\n    case 212:                       // 'preceding'\n    case 213:                       // 'preceding-sibling'\n    case 229:                       // 'self'\n      lookahead2W(245);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n                                    // '//' | ':' | '::' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' |\n                                    // ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'by' | 'case' |\n                                    // 'cast' | 'castable' | 'collation' | 'contains' | 'count' | 'default' |\n                                    // 'descending' | 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' |\n                                    // 'ge' | 'group' | 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' |\n                                    // 'le' | 'let' | 'lt' | 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' |\n                                    // 'paragraphs' | 'return' | 'satisfies' | 'sentences' | 'stable' | 'start' |\n                                    // 'times' | 'to' | 'treat' | 'union' | 'where' | 'with' | 'words' | '|' | '||' |\n                                    // '|}' | '}'\n      break;\n    case 6:                         // EQName^Token\n    case 70:                        // 'after'\n    case 72:                        // 'allowing'\n    case 75:                        // 'and'\n    case 77:                        // 'append'\n    case 79:                        // 'as'\n    case 80:                        // 'ascending'\n    case 81:                        // 'at'\n    case 83:                        // 'base-uri'\n    case 84:                        // 'before'\n    case 85:                        // 'boundary-space'\n    case 86:                        // 'break'\n    case 88:                        // 'case'\n    case 89:                        // 'cast'\n    case 90:                        // 'castable'\n    case 91:                        // 'catch'\n    case 94:                        // 'collation'\n    case 97:                        // 'constraint'\n    case 98:                        // 'construction'\n    case 101:                       // 'context'\n    case 102:                       // 'continue'\n    case 103:                       // 'copy'\n    case 104:                       // 'copy-namespaces'\n    case 105:                       // 'count'\n    case 106:                       // 'decimal-format'\n    case 108:                       // 'declare'\n    case 109:                       // 'default'\n    case 110:                       // 'delete'\n    case 113:                       // 'descending'\n    case 118:                       // 'div'\n    case 120:                       // 'document-node'\n    case 122:                       // 'else'\n    case 123:                       // 'empty'\n    case 125:                       // 'encoding'\n    case 126:                       // 'end'\n    case 128:                       // 'eq'\n    case 129:                       // 'every'\n    case 131:                       // 'except'\n    case 132:                       // 'exit'\n    case 133:                       // 'external'\n    case 134:                       // 'first'\n    case 137:                       // 'for'\n    case 141:                       // 'ft-option'\n    case 145:                       // 'function'\n    case 146:                       // 'ge'\n    case 148:                       // 'group'\n    case 150:                       // 'gt'\n    case 151:                       // 'idiv'\n    case 153:                       // 'import'\n    case 154:                       // 'in'\n    case 155:                       // 'index'\n    case 159:                       // 'insert'\n    case 160:                       // 'instance'\n    case 161:                       // 'integrity'\n    case 162:                       // 'intersect'\n    case 163:                       // 'into'\n    case 164:                       // 'is'\n    case 166:                       // 'json'\n    case 170:                       // 'last'\n    case 171:                       // 'lax'\n    case 172:                       // 'le'\n    case 174:                       // 'let'\n    case 176:                       // 'loop'\n    case 178:                       // 'lt'\n    case 180:                       // 'mod'\n    case 181:                       // 'modify'\n    case 182:                       // 'module'\n    case 185:                       // 'namespace-node'\n    case 186:                       // 'ne'\n    case 191:                       // 'node'\n    case 192:                       // 'nodes'\n    case 194:                       // 'object'\n    case 198:                       // 'only'\n    case 199:                       // 'option'\n    case 200:                       // 'or'\n    case 201:                       // 'order'\n    case 203:                       // 'ordering'\n    case 218:                       // 'rename'\n    case 219:                       // 'replace'\n    case 220:                       // 'return'\n    case 221:                       // 'returning'\n    case 222:                       // 'revalidation'\n    case 224:                       // 'satisfies'\n    case 225:                       // 'schema'\n    case 226:                       // 'schema-attribute'\n    case 227:                       // 'schema-element'\n    case 228:                       // 'score'\n    case 234:                       // 'sliding'\n    case 235:                       // 'some'\n    case 236:                       // 'stable'\n    case 237:                       // 'start'\n    case 240:                       // 'strict'\n    case 248:                       // 'to'\n    case 249:                       // 'treat'\n    case 250:                       // 'try'\n    case 251:                       // 'tumbling'\n    case 252:                       // 'type'\n    case 254:                       // 'union'\n    case 257:                       // 'updating'\n    case 260:                       // 'validate'\n    case 261:                       // 'value'\n    case 262:                       // 'variable'\n    case 263:                       // 'version'\n    case 266:                       // 'where'\n    case 267:                       // 'while'\n    case 270:                       // 'with'\n    case 274:                       // 'xquery'\n      lookahead2W(243);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n                                    // '//' | ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' |\n                                    // 'after' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'by' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'sentences' | 'stable' | 'start' | 'times' | 'to' | 'treat' |\n                                    // 'union' | 'where' | 'with' | 'words' | '|' | '||' | '|}' | '}'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 35922                 // 'attribute' 'after'\n     || lk == 35961                 // 'element' 'after'\n     || lk == 36024                 // 'namespace' 'after'\n     || lk == 36056                 // 'processing-instruction' 'after'\n     || lk == 38482                 // 'attribute' 'and'\n     || lk == 38521                 // 'element' 'and'\n     || lk == 38584                 // 'namespace' 'and'\n     || lk == 38616                 // 'processing-instruction' 'and'\n     || lk == 40530                 // 'attribute' 'as'\n     || lk == 40569                 // 'element' 'as'\n     || lk == 40632                 // 'namespace' 'as'\n     || lk == 40664                 // 'processing-instruction' 'as'\n     || lk == 41042                 // 'attribute' 'ascending'\n     || lk == 41081                 // 'element' 'ascending'\n     || lk == 41144                 // 'namespace' 'ascending'\n     || lk == 41176                 // 'processing-instruction' 'ascending'\n     || lk == 41554                 // 'attribute' 'at'\n     || lk == 41593                 // 'element' 'at'\n     || lk == 41656                 // 'namespace' 'at'\n     || lk == 41688                 // 'processing-instruction' 'at'\n     || lk == 43090                 // 'attribute' 'before'\n     || lk == 43129                 // 'element' 'before'\n     || lk == 43192                 // 'namespace' 'before'\n     || lk == 43224                 // 'processing-instruction' 'before'\n     || lk == 45138                 // 'attribute' 'case'\n     || lk == 45177                 // 'element' 'case'\n     || lk == 45240                 // 'namespace' 'case'\n     || lk == 45272                 // 'processing-instruction' 'case'\n     || lk == 45650                 // 'attribute' 'cast'\n     || lk == 45689                 // 'element' 'cast'\n     || lk == 45752                 // 'namespace' 'cast'\n     || lk == 45784                 // 'processing-instruction' 'cast'\n     || lk == 46162                 // 'attribute' 'castable'\n     || lk == 46201                 // 'element' 'castable'\n     || lk == 46264                 // 'namespace' 'castable'\n     || lk == 46296                 // 'processing-instruction' 'castable'\n     || lk == 48210                 // 'attribute' 'collation'\n     || lk == 48249                 // 'element' 'collation'\n     || lk == 48312                 // 'namespace' 'collation'\n     || lk == 48344                 // 'processing-instruction' 'collation'\n     || lk == 53842                 // 'attribute' 'count'\n     || lk == 53881                 // 'element' 'count'\n     || lk == 53944                 // 'namespace' 'count'\n     || lk == 53976                 // 'processing-instruction' 'count'\n     || lk == 55890                 // 'attribute' 'default'\n     || lk == 55929                 // 'element' 'default'\n     || lk == 55992                 // 'namespace' 'default'\n     || lk == 56024                 // 'processing-instruction' 'default'\n     || lk == 57938                 // 'attribute' 'descending'\n     || lk == 57977                 // 'element' 'descending'\n     || lk == 58040                 // 'namespace' 'descending'\n     || lk == 58072                 // 'processing-instruction' 'descending'\n     || lk == 60498                 // 'attribute' 'div'\n     || lk == 60537                 // 'element' 'div'\n     || lk == 60600                 // 'namespace' 'div'\n     || lk == 60632                 // 'processing-instruction' 'div'\n     || lk == 62546                 // 'attribute' 'else'\n     || lk == 62585                 // 'element' 'else'\n     || lk == 62648                 // 'namespace' 'else'\n     || lk == 62680                 // 'processing-instruction' 'else'\n     || lk == 63058                 // 'attribute' 'empty'\n     || lk == 63097                 // 'element' 'empty'\n     || lk == 63160                 // 'namespace' 'empty'\n     || lk == 63192                 // 'processing-instruction' 'empty'\n     || lk == 64594                 // 'attribute' 'end'\n     || lk == 64633                 // 'element' 'end'\n     || lk == 64696                 // 'namespace' 'end'\n     || lk == 64728                 // 'processing-instruction' 'end'\n     || lk == 65618                 // 'attribute' 'eq'\n     || lk == 65657                 // 'element' 'eq'\n     || lk == 65720                 // 'namespace' 'eq'\n     || lk == 65752                 // 'processing-instruction' 'eq'\n     || lk == 67154                 // 'attribute' 'except'\n     || lk == 67193                 // 'element' 'except'\n     || lk == 67256                 // 'namespace' 'except'\n     || lk == 67288                 // 'processing-instruction' 'except'\n     || lk == 70226                 // 'attribute' 'for'\n     || lk == 70265                 // 'element' 'for'\n     || lk == 70328                 // 'namespace' 'for'\n     || lk == 70360                 // 'processing-instruction' 'for'\n     || lk == 74834                 // 'attribute' 'ge'\n     || lk == 74873                 // 'element' 'ge'\n     || lk == 74936                 // 'namespace' 'ge'\n     || lk == 74968                 // 'processing-instruction' 'ge'\n     || lk == 75858                 // 'attribute' 'group'\n     || lk == 75897                 // 'element' 'group'\n     || lk == 75960                 // 'namespace' 'group'\n     || lk == 75992                 // 'processing-instruction' 'group'\n     || lk == 76882                 // 'attribute' 'gt'\n     || lk == 76921                 // 'element' 'gt'\n     || lk == 76984                 // 'namespace' 'gt'\n     || lk == 77016                 // 'processing-instruction' 'gt'\n     || lk == 77394                 // 'attribute' 'idiv'\n     || lk == 77433                 // 'element' 'idiv'\n     || lk == 77496                 // 'namespace' 'idiv'\n     || lk == 77528                 // 'processing-instruction' 'idiv'\n     || lk == 82002                 // 'attribute' 'instance'\n     || lk == 82041                 // 'element' 'instance'\n     || lk == 82104                 // 'namespace' 'instance'\n     || lk == 82136                 // 'processing-instruction' 'instance'\n     || lk == 83026                 // 'attribute' 'intersect'\n     || lk == 83065                 // 'element' 'intersect'\n     || lk == 83128                 // 'namespace' 'intersect'\n     || lk == 83160                 // 'processing-instruction' 'intersect'\n     || lk == 83538                 // 'attribute' 'into'\n     || lk == 83577                 // 'element' 'into'\n     || lk == 83640                 // 'namespace' 'into'\n     || lk == 83672                 // 'processing-instruction' 'into'\n     || lk == 84050                 // 'attribute' 'is'\n     || lk == 84089                 // 'element' 'is'\n     || lk == 84152                 // 'namespace' 'is'\n     || lk == 84184                 // 'processing-instruction' 'is'\n     || lk == 88146                 // 'attribute' 'le'\n     || lk == 88185                 // 'element' 'le'\n     || lk == 88248                 // 'namespace' 'le'\n     || lk == 88280                 // 'processing-instruction' 'le'\n     || lk == 89170                 // 'attribute' 'let'\n     || lk == 89209                 // 'element' 'let'\n     || lk == 89272                 // 'namespace' 'let'\n     || lk == 89304                 // 'processing-instruction' 'let'\n     || lk == 91218                 // 'attribute' 'lt'\n     || lk == 91257                 // 'element' 'lt'\n     || lk == 91320                 // 'namespace' 'lt'\n     || lk == 91352                 // 'processing-instruction' 'lt'\n     || lk == 92242                 // 'attribute' 'mod'\n     || lk == 92281                 // 'element' 'mod'\n     || lk == 92344                 // 'namespace' 'mod'\n     || lk == 92376                 // 'processing-instruction' 'mod'\n     || lk == 92754                 // 'attribute' 'modify'\n     || lk == 92793                 // 'element' 'modify'\n     || lk == 92856                 // 'namespace' 'modify'\n     || lk == 92888                 // 'processing-instruction' 'modify'\n     || lk == 95314                 // 'attribute' 'ne'\n     || lk == 95353                 // 'element' 'ne'\n     || lk == 95416                 // 'namespace' 'ne'\n     || lk == 95448                 // 'processing-instruction' 'ne'\n     || lk == 101458                // 'attribute' 'only'\n     || lk == 101497                // 'element' 'only'\n     || lk == 101560                // 'namespace' 'only'\n     || lk == 101592                // 'processing-instruction' 'only'\n     || lk == 102482                // 'attribute' 'or'\n     || lk == 102521                // 'element' 'or'\n     || lk == 102584                // 'namespace' 'or'\n     || lk == 102616                // 'processing-instruction' 'or'\n     || lk == 102994                // 'attribute' 'order'\n     || lk == 103033                // 'element' 'order'\n     || lk == 103096                // 'namespace' 'order'\n     || lk == 103128                // 'processing-instruction' 'order'\n     || lk == 112722                // 'attribute' 'return'\n     || lk == 112761                // 'element' 'return'\n     || lk == 112824                // 'namespace' 'return'\n     || lk == 112856                // 'processing-instruction' 'return'\n     || lk == 114770                // 'attribute' 'satisfies'\n     || lk == 114809                // 'element' 'satisfies'\n     || lk == 114872                // 'namespace' 'satisfies'\n     || lk == 114904                // 'processing-instruction' 'satisfies'\n     || lk == 120914                // 'attribute' 'stable'\n     || lk == 120953                // 'element' 'stable'\n     || lk == 121016                // 'namespace' 'stable'\n     || lk == 121048                // 'processing-instruction' 'stable'\n     || lk == 121426                // 'attribute' 'start'\n     || lk == 121465                // 'element' 'start'\n     || lk == 121528                // 'namespace' 'start'\n     || lk == 121560                // 'processing-instruction' 'start'\n     || lk == 127058                // 'attribute' 'to'\n     || lk == 127097                // 'element' 'to'\n     || lk == 127160                // 'namespace' 'to'\n     || lk == 127192                // 'processing-instruction' 'to'\n     || lk == 127570                // 'attribute' 'treat'\n     || lk == 127609                // 'element' 'treat'\n     || lk == 127672                // 'namespace' 'treat'\n     || lk == 127704                // 'processing-instruction' 'treat'\n     || lk == 130130                // 'attribute' 'union'\n     || lk == 130169                // 'element' 'union'\n     || lk == 130232                // 'namespace' 'union'\n     || lk == 130264                // 'processing-instruction' 'union'\n     || lk == 136274                // 'attribute' 'where'\n     || lk == 136313                // 'element' 'where'\n     || lk == 136376                // 'namespace' 'where'\n     || lk == 136408                // 'processing-instruction' 'where'\n     || lk == 138322                // 'attribute' 'with'\n     || lk == 138361                // 'element' 'with'\n     || lk == 138424                // 'namespace' 'with'\n     || lk == 138456)               // 'processing-instruction' 'with'\n    {\n      lk = memoized(4, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_PostfixExpr();\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(4, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n    case 8:                         // IntegerLiteral\n    case 9:                         // DecimalLiteral\n    case 10:                        // DoubleLiteral\n    case 11:                        // StringLiteral\n    case 31:                        // '$'\n    case 32:                        // '%'\n    case 34:                        // '('\n    case 44:                        // '.'\n    case 54:                        // '<'\n    case 55:                        // '<!--'\n    case 59:                        // '<?'\n    case 68:                        // '['\n    case 276:                       // '{'\n    case 278:                       // '{|'\n    case 3154:                      // 'attribute' EQName^Token\n    case 3193:                      // 'element' EQName^Token\n    case 9912:                      // 'namespace' NCName^Token\n    case 9944:                      // 'processing-instruction' NCName^Token\n    case 14854:                     // EQName^Token '#'\n    case 14918:                     // 'after' '#'\n    case 14920:                     // 'allowing' '#'\n    case 14921:                     // 'ancestor' '#'\n    case 14922:                     // 'ancestor-or-self' '#'\n    case 14923:                     // 'and' '#'\n    case 14925:                     // 'append' '#'\n    case 14926:                     // 'array' '#'\n    case 14927:                     // 'as' '#'\n    case 14928:                     // 'ascending' '#'\n    case 14929:                     // 'at' '#'\n    case 14930:                     // 'attribute' '#'\n    case 14931:                     // 'base-uri' '#'\n    case 14932:                     // 'before' '#'\n    case 14933:                     // 'boundary-space' '#'\n    case 14934:                     // 'break' '#'\n    case 14936:                     // 'case' '#'\n    case 14937:                     // 'cast' '#'\n    case 14938:                     // 'castable' '#'\n    case 14939:                     // 'catch' '#'\n    case 14941:                     // 'child' '#'\n    case 14942:                     // 'collation' '#'\n    case 14944:                     // 'comment' '#'\n    case 14945:                     // 'constraint' '#'\n    case 14946:                     // 'construction' '#'\n    case 14949:                     // 'context' '#'\n    case 14950:                     // 'continue' '#'\n    case 14951:                     // 'copy' '#'\n    case 14952:                     // 'copy-namespaces' '#'\n    case 14953:                     // 'count' '#'\n    case 14954:                     // 'decimal-format' '#'\n    case 14956:                     // 'declare' '#'\n    case 14957:                     // 'default' '#'\n    case 14958:                     // 'delete' '#'\n    case 14959:                     // 'descendant' '#'\n    case 14960:                     // 'descendant-or-self' '#'\n    case 14961:                     // 'descending' '#'\n    case 14966:                     // 'div' '#'\n    case 14967:                     // 'document' '#'\n    case 14968:                     // 'document-node' '#'\n    case 14969:                     // 'element' '#'\n    case 14970:                     // 'else' '#'\n    case 14971:                     // 'empty' '#'\n    case 14972:                     // 'empty-sequence' '#'\n    case 14973:                     // 'encoding' '#'\n    case 14974:                     // 'end' '#'\n    case 14976:                     // 'eq' '#'\n    case 14977:                     // 'every' '#'\n    case 14979:                     // 'except' '#'\n    case 14980:                     // 'exit' '#'\n    case 14981:                     // 'external' '#'\n    case 14982:                     // 'first' '#'\n    case 14983:                     // 'following' '#'\n    case 14984:                     // 'following-sibling' '#'\n    case 14985:                     // 'for' '#'\n    case 14989:                     // 'ft-option' '#'\n    case 14993:                     // 'function' '#'\n    case 14994:                     // 'ge' '#'\n    case 14996:                     // 'group' '#'\n    case 14998:                     // 'gt' '#'\n    case 14999:                     // 'idiv' '#'\n    case 15000:                     // 'if' '#'\n    case 15001:                     // 'import' '#'\n    case 15002:                     // 'in' '#'\n    case 15003:                     // 'index' '#'\n    case 15007:                     // 'insert' '#'\n    case 15008:                     // 'instance' '#'\n    case 15009:                     // 'integrity' '#'\n    case 15010:                     // 'intersect' '#'\n    case 15011:                     // 'into' '#'\n    case 15012:                     // 'is' '#'\n    case 15013:                     // 'item' '#'\n    case 15014:                     // 'json' '#'\n    case 15015:                     // 'json-item' '#'\n    case 15018:                     // 'last' '#'\n    case 15019:                     // 'lax' '#'\n    case 15020:                     // 'le' '#'\n    case 15022:                     // 'let' '#'\n    case 15024:                     // 'loop' '#'\n    case 15026:                     // 'lt' '#'\n    case 15028:                     // 'mod' '#'\n    case 15029:                     // 'modify' '#'\n    case 15030:                     // 'module' '#'\n    case 15032:                     // 'namespace' '#'\n    case 15033:                     // 'namespace-node' '#'\n    case 15034:                     // 'ne' '#'\n    case 15039:                     // 'node' '#'\n    case 15040:                     // 'nodes' '#'\n    case 15042:                     // 'object' '#'\n    case 15046:                     // 'only' '#'\n    case 15047:                     // 'option' '#'\n    case 15048:                     // 'or' '#'\n    case 15049:                     // 'order' '#'\n    case 15050:                     // 'ordered' '#'\n    case 15051:                     // 'ordering' '#'\n    case 15054:                     // 'parent' '#'\n    case 15060:                     // 'preceding' '#'\n    case 15061:                     // 'preceding-sibling' '#'\n    case 15064:                     // 'processing-instruction' '#'\n    case 15066:                     // 'rename' '#'\n    case 15067:                     // 'replace' '#'\n    case 15068:                     // 'return' '#'\n    case 15069:                     // 'returning' '#'\n    case 15070:                     // 'revalidation' '#'\n    case 15072:                     // 'satisfies' '#'\n    case 15073:                     // 'schema' '#'\n    case 15074:                     // 'schema-attribute' '#'\n    case 15075:                     // 'schema-element' '#'\n    case 15076:                     // 'score' '#'\n    case 15077:                     // 'self' '#'\n    case 15082:                     // 'sliding' '#'\n    case 15083:                     // 'some' '#'\n    case 15084:                     // 'stable' '#'\n    case 15085:                     // 'start' '#'\n    case 15088:                     // 'strict' '#'\n    case 15090:                     // 'structured-item' '#'\n    case 15091:                     // 'switch' '#'\n    case 15092:                     // 'text' '#'\n    case 15096:                     // 'to' '#'\n    case 15097:                     // 'treat' '#'\n    case 15098:                     // 'try' '#'\n    case 15099:                     // 'tumbling' '#'\n    case 15100:                     // 'type' '#'\n    case 15101:                     // 'typeswitch' '#'\n    case 15102:                     // 'union' '#'\n    case 15104:                     // 'unordered' '#'\n    case 15105:                     // 'updating' '#'\n    case 15108:                     // 'validate' '#'\n    case 15109:                     // 'value' '#'\n    case 15110:                     // 'variable' '#'\n    case 15111:                     // 'version' '#'\n    case 15114:                     // 'where' '#'\n    case 15115:                     // 'while' '#'\n    case 15118:                     // 'with' '#'\n    case 15122:                     // 'xquery' '#'\n    case 17414:                     // EQName^Token '('\n    case 17478:                     // 'after' '('\n    case 17480:                     // 'allowing' '('\n    case 17481:                     // 'ancestor' '('\n    case 17482:                     // 'ancestor-or-self' '('\n    case 17483:                     // 'and' '('\n    case 17485:                     // 'append' '('\n    case 17487:                     // 'as' '('\n    case 17488:                     // 'ascending' '('\n    case 17489:                     // 'at' '('\n    case 17491:                     // 'base-uri' '('\n    case 17492:                     // 'before' '('\n    case 17493:                     // 'boundary-space' '('\n    case 17494:                     // 'break' '('\n    case 17496:                     // 'case' '('\n    case 17497:                     // 'cast' '('\n    case 17498:                     // 'castable' '('\n    case 17499:                     // 'catch' '('\n    case 17501:                     // 'child' '('\n    case 17502:                     // 'collation' '('\n    case 17505:                     // 'constraint' '('\n    case 17506:                     // 'construction' '('\n    case 17509:                     // 'context' '('\n    case 17510:                     // 'continue' '('\n    case 17511:                     // 'copy' '('\n    case 17512:                     // 'copy-namespaces' '('\n    case 17513:                     // 'count' '('\n    case 17514:                     // 'decimal-format' '('\n    case 17516:                     // 'declare' '('\n    case 17517:                     // 'default' '('\n    case 17518:                     // 'delete' '('\n    case 17519:                     // 'descendant' '('\n    case 17520:                     // 'descendant-or-self' '('\n    case 17521:                     // 'descending' '('\n    case 17526:                     // 'div' '('\n    case 17527:                     // 'document' '('\n    case 17530:                     // 'else' '('\n    case 17531:                     // 'empty' '('\n    case 17533:                     // 'encoding' '('\n    case 17534:                     // 'end' '('\n    case 17536:                     // 'eq' '('\n    case 17537:                     // 'every' '('\n    case 17539:                     // 'except' '('\n    case 17540:                     // 'exit' '('\n    case 17541:                     // 'external' '('\n    case 17542:                     // 'first' '('\n    case 17543:                     // 'following' '('\n    case 17544:                     // 'following-sibling' '('\n    case 17545:                     // 'for' '('\n    case 17549:                     // 'ft-option' '('\n    case 17553:                     // 'function' '('\n    case 17554:                     // 'ge' '('\n    case 17556:                     // 'group' '('\n    case 17558:                     // 'gt' '('\n    case 17559:                     // 'idiv' '('\n    case 17561:                     // 'import' '('\n    case 17562:                     // 'in' '('\n    case 17563:                     // 'index' '('\n    case 17567:                     // 'insert' '('\n    case 17568:                     // 'instance' '('\n    case 17569:                     // 'integrity' '('\n    case 17570:                     // 'intersect' '('\n    case 17571:                     // 'into' '('\n    case 17572:                     // 'is' '('\n    case 17574:                     // 'json' '('\n    case 17578:                     // 'last' '('\n    case 17579:                     // 'lax' '('\n    case 17580:                     // 'le' '('\n    case 17582:                     // 'let' '('\n    case 17584:                     // 'loop' '('\n    case 17586:                     // 'lt' '('\n    case 17588:                     // 'mod' '('\n    case 17589:                     // 'modify' '('\n    case 17590:                     // 'module' '('\n    case 17592:                     // 'namespace' '('\n    case 17594:                     // 'ne' '('\n    case 17600:                     // 'nodes' '('\n    case 17602:                     // 'object' '('\n    case 17606:                     // 'only' '('\n    case 17607:                     // 'option' '('\n    case 17608:                     // 'or' '('\n    case 17609:                     // 'order' '('\n    case 17610:                     // 'ordered' '('\n    case 17611:                     // 'ordering' '('\n    case 17614:                     // 'parent' '('\n    case 17620:                     // 'preceding' '('\n    case 17621:                     // 'preceding-sibling' '('\n    case 17626:                     // 'rename' '('\n    case 17627:                     // 'replace' '('\n    case 17628:                     // 'return' '('\n    case 17629:                     // 'returning' '('\n    case 17630:                     // 'revalidation' '('\n    case 17632:                     // 'satisfies' '('\n    case 17633:                     // 'schema' '('\n    case 17636:                     // 'score' '('\n    case 17637:                     // 'self' '('\n    case 17642:                     // 'sliding' '('\n    case 17643:                     // 'some' '('\n    case 17644:                     // 'stable' '('\n    case 17645:                     // 'start' '('\n    case 17648:                     // 'strict' '('\n    case 17656:                     // 'to' '('\n    case 17657:                     // 'treat' '('\n    case 17658:                     // 'try' '('\n    case 17659:                     // 'tumbling' '('\n    case 17660:                     // 'type' '('\n    case 17662:                     // 'union' '('\n    case 17664:                     // 'unordered' '('\n    case 17665:                     // 'updating' '('\n    case 17668:                     // 'validate' '('\n    case 17669:                     // 'value' '('\n    case 17670:                     // 'variable' '('\n    case 17671:                     // 'version' '('\n    case 17674:                     // 'where' '('\n    case 17675:                     // 'while' '('\n    case 17678:                     // 'with' '('\n    case 17682:                     // 'xquery' '('\n    case 36946:                     // 'attribute' 'allowing'\n    case 36985:                     // 'element' 'allowing'\n    case 37048:                     // 'namespace' 'allowing'\n    case 37080:                     // 'processing-instruction' 'allowing'\n    case 37458:                     // 'attribute' 'ancestor'\n    case 37497:                     // 'element' 'ancestor'\n    case 37560:                     // 'namespace' 'ancestor'\n    case 37592:                     // 'processing-instruction' 'ancestor'\n    case 37970:                     // 'attribute' 'ancestor-or-self'\n    case 38009:                     // 'element' 'ancestor-or-self'\n    case 38072:                     // 'namespace' 'ancestor-or-self'\n    case 38104:                     // 'processing-instruction' 'ancestor-or-self'\n    case 39506:                     // 'attribute' 'append'\n    case 39545:                     // 'element' 'append'\n    case 39608:                     // 'namespace' 'append'\n    case 39640:                     // 'processing-instruction' 'append'\n    case 40018:                     // 'attribute' 'array'\n    case 40057:                     // 'element' 'array'\n    case 42066:                     // 'attribute' 'attribute'\n    case 42105:                     // 'element' 'attribute'\n    case 42168:                     // 'namespace' 'attribute'\n    case 42200:                     // 'processing-instruction' 'attribute'\n    case 42578:                     // 'attribute' 'base-uri'\n    case 42617:                     // 'element' 'base-uri'\n    case 42680:                     // 'namespace' 'base-uri'\n    case 42712:                     // 'processing-instruction' 'base-uri'\n    case 43602:                     // 'attribute' 'boundary-space'\n    case 43641:                     // 'element' 'boundary-space'\n    case 43704:                     // 'namespace' 'boundary-space'\n    case 43736:                     // 'processing-instruction' 'boundary-space'\n    case 44114:                     // 'attribute' 'break'\n    case 44153:                     // 'element' 'break'\n    case 44216:                     // 'namespace' 'break'\n    case 44248:                     // 'processing-instruction' 'break'\n    case 46674:                     // 'attribute' 'catch'\n    case 46713:                     // 'element' 'catch'\n    case 46776:                     // 'namespace' 'catch'\n    case 46808:                     // 'processing-instruction' 'catch'\n    case 47698:                     // 'attribute' 'child'\n    case 47737:                     // 'element' 'child'\n    case 47800:                     // 'namespace' 'child'\n    case 47832:                     // 'processing-instruction' 'child'\n    case 49234:                     // 'attribute' 'comment'\n    case 49273:                     // 'element' 'comment'\n    case 49336:                     // 'namespace' 'comment'\n    case 49368:                     // 'processing-instruction' 'comment'\n    case 49746:                     // 'attribute' 'constraint'\n    case 49785:                     // 'element' 'constraint'\n    case 49848:                     // 'namespace' 'constraint'\n    case 49880:                     // 'processing-instruction' 'constraint'\n    case 50258:                     // 'attribute' 'construction'\n    case 50297:                     // 'element' 'construction'\n    case 50360:                     // 'namespace' 'construction'\n    case 50392:                     // 'processing-instruction' 'construction'\n    case 51794:                     // 'attribute' 'context'\n    case 51833:                     // 'element' 'context'\n    case 51896:                     // 'namespace' 'context'\n    case 51928:                     // 'processing-instruction' 'context'\n    case 52306:                     // 'attribute' 'continue'\n    case 52345:                     // 'element' 'continue'\n    case 52408:                     // 'namespace' 'continue'\n    case 52440:                     // 'processing-instruction' 'continue'\n    case 52818:                     // 'attribute' 'copy'\n    case 52857:                     // 'element' 'copy'\n    case 52920:                     // 'namespace' 'copy'\n    case 52952:                     // 'processing-instruction' 'copy'\n    case 53330:                     // 'attribute' 'copy-namespaces'\n    case 53369:                     // 'element' 'copy-namespaces'\n    case 53432:                     // 'namespace' 'copy-namespaces'\n    case 53464:                     // 'processing-instruction' 'copy-namespaces'\n    case 54354:                     // 'attribute' 'decimal-format'\n    case 54393:                     // 'element' 'decimal-format'\n    case 54456:                     // 'namespace' 'decimal-format'\n    case 54488:                     // 'processing-instruction' 'decimal-format'\n    case 55378:                     // 'attribute' 'declare'\n    case 55417:                     // 'element' 'declare'\n    case 55480:                     // 'namespace' 'declare'\n    case 55512:                     // 'processing-instruction' 'declare'\n    case 56402:                     // 'attribute' 'delete'\n    case 56441:                     // 'element' 'delete'\n    case 56504:                     // 'namespace' 'delete'\n    case 56536:                     // 'processing-instruction' 'delete'\n    case 56914:                     // 'attribute' 'descendant'\n    case 56953:                     // 'element' 'descendant'\n    case 57016:                     // 'namespace' 'descendant'\n    case 57048:                     // 'processing-instruction' 'descendant'\n    case 57426:                     // 'attribute' 'descendant-or-self'\n    case 57465:                     // 'element' 'descendant-or-self'\n    case 57528:                     // 'namespace' 'descendant-or-self'\n    case 57560:                     // 'processing-instruction' 'descendant-or-self'\n    case 61010:                     // 'attribute' 'document'\n    case 61049:                     // 'element' 'document'\n    case 61112:                     // 'namespace' 'document'\n    case 61144:                     // 'processing-instruction' 'document'\n    case 61522:                     // 'attribute' 'document-node'\n    case 61561:                     // 'element' 'document-node'\n    case 61624:                     // 'namespace' 'document-node'\n    case 61656:                     // 'processing-instruction' 'document-node'\n    case 62034:                     // 'attribute' 'element'\n    case 62073:                     // 'element' 'element'\n    case 62136:                     // 'namespace' 'element'\n    case 62168:                     // 'processing-instruction' 'element'\n    case 63570:                     // 'attribute' 'empty-sequence'\n    case 63609:                     // 'element' 'empty-sequence'\n    case 63672:                     // 'namespace' 'empty-sequence'\n    case 63704:                     // 'processing-instruction' 'empty-sequence'\n    case 64082:                     // 'attribute' 'encoding'\n    case 64121:                     // 'element' 'encoding'\n    case 64184:                     // 'namespace' 'encoding'\n    case 64216:                     // 'processing-instruction' 'encoding'\n    case 66130:                     // 'attribute' 'every'\n    case 66169:                     // 'element' 'every'\n    case 66232:                     // 'namespace' 'every'\n    case 66264:                     // 'processing-instruction' 'every'\n    case 67666:                     // 'attribute' 'exit'\n    case 67705:                     // 'element' 'exit'\n    case 67768:                     // 'namespace' 'exit'\n    case 67800:                     // 'processing-instruction' 'exit'\n    case 68178:                     // 'attribute' 'external'\n    case 68217:                     // 'element' 'external'\n    case 68280:                     // 'namespace' 'external'\n    case 68312:                     // 'processing-instruction' 'external'\n    case 68690:                     // 'attribute' 'first'\n    case 68729:                     // 'element' 'first'\n    case 68792:                     // 'namespace' 'first'\n    case 68824:                     // 'processing-instruction' 'first'\n    case 69202:                     // 'attribute' 'following'\n    case 69241:                     // 'element' 'following'\n    case 69304:                     // 'namespace' 'following'\n    case 69336:                     // 'processing-instruction' 'following'\n    case 69714:                     // 'attribute' 'following-sibling'\n    case 69753:                     // 'element' 'following-sibling'\n    case 69816:                     // 'namespace' 'following-sibling'\n    case 69848:                     // 'processing-instruction' 'following-sibling'\n    case 72274:                     // 'attribute' 'ft-option'\n    case 72313:                     // 'element' 'ft-option'\n    case 72376:                     // 'namespace' 'ft-option'\n    case 72408:                     // 'processing-instruction' 'ft-option'\n    case 74322:                     // 'attribute' 'function'\n    case 74361:                     // 'element' 'function'\n    case 74424:                     // 'namespace' 'function'\n    case 74456:                     // 'processing-instruction' 'function'\n    case 77906:                     // 'attribute' 'if'\n    case 77945:                     // 'element' 'if'\n    case 78008:                     // 'namespace' 'if'\n    case 78040:                     // 'processing-instruction' 'if'\n    case 78418:                     // 'attribute' 'import'\n    case 78457:                     // 'element' 'import'\n    case 78520:                     // 'namespace' 'import'\n    case 78552:                     // 'processing-instruction' 'import'\n    case 78930:                     // 'attribute' 'in'\n    case 78969:                     // 'element' 'in'\n    case 79032:                     // 'namespace' 'in'\n    case 79064:                     // 'processing-instruction' 'in'\n    case 79442:                     // 'attribute' 'index'\n    case 79481:                     // 'element' 'index'\n    case 79544:                     // 'namespace' 'index'\n    case 79576:                     // 'processing-instruction' 'index'\n    case 81490:                     // 'attribute' 'insert'\n    case 81529:                     // 'element' 'insert'\n    case 81592:                     // 'namespace' 'insert'\n    case 81624:                     // 'processing-instruction' 'insert'\n    case 82514:                     // 'attribute' 'integrity'\n    case 82553:                     // 'element' 'integrity'\n    case 82616:                     // 'namespace' 'integrity'\n    case 82648:                     // 'processing-instruction' 'integrity'\n    case 84562:                     // 'attribute' 'item'\n    case 84601:                     // 'element' 'item'\n    case 84664:                     // 'namespace' 'item'\n    case 84696:                     // 'processing-instruction' 'item'\n    case 85074:                     // 'attribute' 'json'\n    case 85113:                     // 'element' 'json'\n    case 85176:                     // 'namespace' 'json'\n    case 85208:                     // 'processing-instruction' 'json'\n    case 85586:                     // 'attribute' 'json-item'\n    case 85625:                     // 'element' 'json-item'\n    case 87122:                     // 'attribute' 'last'\n    case 87161:                     // 'element' 'last'\n    case 87224:                     // 'namespace' 'last'\n    case 87256:                     // 'processing-instruction' 'last'\n    case 87634:                     // 'attribute' 'lax'\n    case 87673:                     // 'element' 'lax'\n    case 87736:                     // 'namespace' 'lax'\n    case 87768:                     // 'processing-instruction' 'lax'\n    case 90194:                     // 'attribute' 'loop'\n    case 90233:                     // 'element' 'loop'\n    case 90296:                     // 'namespace' 'loop'\n    case 90328:                     // 'processing-instruction' 'loop'\n    case 93266:                     // 'attribute' 'module'\n    case 93305:                     // 'element' 'module'\n    case 93368:                     // 'namespace' 'module'\n    case 93400:                     // 'processing-instruction' 'module'\n    case 94290:                     // 'attribute' 'namespace'\n    case 94329:                     // 'element' 'namespace'\n    case 94392:                     // 'namespace' 'namespace'\n    case 94424:                     // 'processing-instruction' 'namespace'\n    case 94802:                     // 'attribute' 'namespace-node'\n    case 94841:                     // 'element' 'namespace-node'\n    case 94904:                     // 'namespace' 'namespace-node'\n    case 94936:                     // 'processing-instruction' 'namespace-node'\n    case 97874:                     // 'attribute' 'node'\n    case 97913:                     // 'element' 'node'\n    case 97976:                     // 'namespace' 'node'\n    case 98008:                     // 'processing-instruction' 'node'\n    case 98386:                     // 'attribute' 'nodes'\n    case 98425:                     // 'element' 'nodes'\n    case 98488:                     // 'namespace' 'nodes'\n    case 98520:                     // 'processing-instruction' 'nodes'\n    case 99410:                     // 'attribute' 'object'\n    case 99449:                     // 'element' 'object'\n    case 99512:                     // 'namespace' 'object'\n    case 99544:                     // 'processing-instruction' 'object'\n    case 101970:                    // 'attribute' 'option'\n    case 102009:                    // 'element' 'option'\n    case 102072:                    // 'namespace' 'option'\n    case 102104:                    // 'processing-instruction' 'option'\n    case 103506:                    // 'attribute' 'ordered'\n    case 103545:                    // 'element' 'ordered'\n    case 103608:                    // 'namespace' 'ordered'\n    case 103640:                    // 'processing-instruction' 'ordered'\n    case 104018:                    // 'attribute' 'ordering'\n    case 104057:                    // 'element' 'ordering'\n    case 104120:                    // 'namespace' 'ordering'\n    case 104152:                    // 'processing-instruction' 'ordering'\n    case 105554:                    // 'attribute' 'parent'\n    case 105593:                    // 'element' 'parent'\n    case 105656:                    // 'namespace' 'parent'\n    case 105688:                    // 'processing-instruction' 'parent'\n    case 108626:                    // 'attribute' 'preceding'\n    case 108665:                    // 'element' 'preceding'\n    case 108728:                    // 'namespace' 'preceding'\n    case 108760:                    // 'processing-instruction' 'preceding'\n    case 109138:                    // 'attribute' 'preceding-sibling'\n    case 109177:                    // 'element' 'preceding-sibling'\n    case 109240:                    // 'namespace' 'preceding-sibling'\n    case 109272:                    // 'processing-instruction' 'preceding-sibling'\n    case 110674:                    // 'attribute' 'processing-instruction'\n    case 110713:                    // 'element' 'processing-instruction'\n    case 110776:                    // 'namespace' 'processing-instruction'\n    case 110808:                    // 'processing-instruction' 'processing-instruction'\n    case 111698:                    // 'attribute' 'rename'\n    case 111737:                    // 'element' 'rename'\n    case 111800:                    // 'namespace' 'rename'\n    case 111832:                    // 'processing-instruction' 'rename'\n    case 112210:                    // 'attribute' 'replace'\n    case 112249:                    // 'element' 'replace'\n    case 112312:                    // 'namespace' 'replace'\n    case 112344:                    // 'processing-instruction' 'replace'\n    case 113234:                    // 'attribute' 'returning'\n    case 113273:                    // 'element' 'returning'\n    case 113336:                    // 'namespace' 'returning'\n    case 113368:                    // 'processing-instruction' 'returning'\n    case 113746:                    // 'attribute' 'revalidation'\n    case 113785:                    // 'element' 'revalidation'\n    case 113848:                    // 'namespace' 'revalidation'\n    case 113880:                    // 'processing-instruction' 'revalidation'\n    case 115282:                    // 'attribute' 'schema'\n    case 115321:                    // 'element' 'schema'\n    case 115384:                    // 'namespace' 'schema'\n    case 115416:                    // 'processing-instruction' 'schema'\n    case 115794:                    // 'attribute' 'schema-attribute'\n    case 115833:                    // 'element' 'schema-attribute'\n    case 115896:                    // 'namespace' 'schema-attribute'\n    case 115928:                    // 'processing-instruction' 'schema-attribute'\n    case 116306:                    // 'attribute' 'schema-element'\n    case 116345:                    // 'element' 'schema-element'\n    case 116408:                    // 'namespace' 'schema-element'\n    case 116440:                    // 'processing-instruction' 'schema-element'\n    case 116818:                    // 'attribute' 'score'\n    case 116857:                    // 'element' 'score'\n    case 116920:                    // 'namespace' 'score'\n    case 116952:                    // 'processing-instruction' 'score'\n    case 117330:                    // 'attribute' 'self'\n    case 117369:                    // 'element' 'self'\n    case 117432:                    // 'namespace' 'self'\n    case 117464:                    // 'processing-instruction' 'self'\n    case 119890:                    // 'attribute' 'sliding'\n    case 119929:                    // 'element' 'sliding'\n    case 119992:                    // 'namespace' 'sliding'\n    case 120024:                    // 'processing-instruction' 'sliding'\n    case 120402:                    // 'attribute' 'some'\n    case 120441:                    // 'element' 'some'\n    case 120504:                    // 'namespace' 'some'\n    case 120536:                    // 'processing-instruction' 'some'\n    case 122962:                    // 'attribute' 'strict'\n    case 123001:                    // 'element' 'strict'\n    case 123064:                    // 'namespace' 'strict'\n    case 123096:                    // 'processing-instruction' 'strict'\n    case 123986:                    // 'attribute' 'structured-item'\n    case 124025:                    // 'element' 'structured-item'\n    case 124498:                    // 'attribute' 'switch'\n    case 124537:                    // 'element' 'switch'\n    case 124600:                    // 'namespace' 'switch'\n    case 124632:                    // 'processing-instruction' 'switch'\n    case 125010:                    // 'attribute' 'text'\n    case 125049:                    // 'element' 'text'\n    case 125112:                    // 'namespace' 'text'\n    case 125144:                    // 'processing-instruction' 'text'\n    case 128082:                    // 'attribute' 'try'\n    case 128121:                    // 'element' 'try'\n    case 128184:                    // 'namespace' 'try'\n    case 128216:                    // 'processing-instruction' 'try'\n    case 128594:                    // 'attribute' 'tumbling'\n    case 128633:                    // 'element' 'tumbling'\n    case 128696:                    // 'namespace' 'tumbling'\n    case 128728:                    // 'processing-instruction' 'tumbling'\n    case 129106:                    // 'attribute' 'type'\n    case 129145:                    // 'element' 'type'\n    case 129208:                    // 'namespace' 'type'\n    case 129240:                    // 'processing-instruction' 'type'\n    case 129618:                    // 'attribute' 'typeswitch'\n    case 129657:                    // 'element' 'typeswitch'\n    case 129720:                    // 'namespace' 'typeswitch'\n    case 129752:                    // 'processing-instruction' 'typeswitch'\n    case 131154:                    // 'attribute' 'unordered'\n    case 131193:                    // 'element' 'unordered'\n    case 131256:                    // 'namespace' 'unordered'\n    case 131288:                    // 'processing-instruction' 'unordered'\n    case 131666:                    // 'attribute' 'updating'\n    case 131705:                    // 'element' 'updating'\n    case 131768:                    // 'namespace' 'updating'\n    case 131800:                    // 'processing-instruction' 'updating'\n    case 133202:                    // 'attribute' 'validate'\n    case 133241:                    // 'element' 'validate'\n    case 133304:                    // 'namespace' 'validate'\n    case 133336:                    // 'processing-instruction' 'validate'\n    case 133714:                    // 'attribute' 'value'\n    case 133753:                    // 'element' 'value'\n    case 133816:                    // 'namespace' 'value'\n    case 133848:                    // 'processing-instruction' 'value'\n    case 134226:                    // 'attribute' 'variable'\n    case 134265:                    // 'element' 'variable'\n    case 134328:                    // 'namespace' 'variable'\n    case 134360:                    // 'processing-instruction' 'variable'\n    case 134738:                    // 'attribute' 'version'\n    case 134777:                    // 'element' 'version'\n    case 134840:                    // 'namespace' 'version'\n    case 134872:                    // 'processing-instruction' 'version'\n    case 136786:                    // 'attribute' 'while'\n    case 136825:                    // 'element' 'while'\n    case 136888:                    // 'namespace' 'while'\n    case 136920:                    // 'processing-instruction' 'while'\n    case 140370:                    // 'attribute' 'xquery'\n    case 140409:                    // 'element' 'xquery'\n    case 140472:                    // 'namespace' 'xquery'\n    case 140504:                    // 'processing-instruction' 'xquery'\n    case 141394:                    // 'attribute' '{'\n    case 141408:                    // 'comment' '{'\n    case 141431:                    // 'document' '{'\n    case 141433:                    // 'element' '{'\n    case 141496:                    // 'namespace' '{'\n    case 141514:                    // 'ordered' '{'\n    case 141528:                    // 'processing-instruction' '{'\n    case 141556:                    // 'text' '{'\n    case 141568:                    // 'unordered' '{'\n      parse_PostfixExpr();\n      break;\n    default:\n      parse_AxisStep();\n    }\n    eventHandler.endNonterminal(\"StepExpr\", e0);\n  }\n\n  function try_StepExpr()\n  {\n    switch (l1)\n    {\n    case 82:                        // 'attribute'\n      lookahead2W(284);             // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |\n                                    // ',' | '-' | '/' | '//' | ':' | '::' | ';' | '<' | '<<' | '<=' | '=' | '>' |\n                                    // '>=' | '>>' | '[' | ']' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'by' |\n                                    // 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'contains' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'paragraphs' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'self' |\n                                    // 'sentences' | 'sliding' | 'some' | 'stable' | 'start' | 'strict' |\n                                    // 'structured-item' | 'switch' | 'text' | 'times' | 'to' | 'treat' | 'try' |\n                                    // 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // 'words' | 'xquery' | '{' | '|' | '||' | '|}' | '}'\n      break;\n    case 121:                       // 'element'\n      lookahead2W(282);             // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |\n                                    // ',' | '-' | '/' | '//' | ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' |\n                                    // '>>' | '[' | ']' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'by' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'contains' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'paragraphs' |\n                                    // 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' |\n                                    // 'rename' | 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' |\n                                    // 'schema' | 'schema-attribute' | 'schema-element' | 'score' | 'self' |\n                                    // 'sentences' | 'sliding' | 'some' | 'stable' | 'start' | 'strict' |\n                                    // 'structured-item' | 'switch' | 'text' | 'times' | 'to' | 'treat' | 'try' |\n                                    // 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // 'words' | 'xquery' | '{' | '|' | '||' | '|}' | '}'\n      break;\n    case 184:                       // 'namespace'\n    case 216:                       // 'processing-instruction'\n      lookahead2W(281);             // NCName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |\n                                    // ',' | '-' | '/' | '//' | ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' |\n                                    // '>>' | '[' | ']' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' |\n                                    // 'before' | 'boundary-space' | 'break' | 'by' | 'case' | 'cast' | 'castable' |\n                                    // 'catch' | 'child' | 'collation' | 'comment' | 'constraint' | 'construction' |\n                                    // 'contains' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' |\n                                    // 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'last' | 'lax' | 'le' | 'let' |\n                                    // 'loop' | 'lt' | 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' |\n                                    // 'ne' | 'node' | 'nodes' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'paragraphs' | 'parent' | 'preceding' |\n                                    // 'preceding-sibling' | 'processing-instruction' | 'rename' | 'replace' |\n                                    // 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sentences' |\n                                    // 'sliding' | 'some' | 'stable' | 'start' | 'strict' | 'switch' | 'text' |\n                                    // 'times' | 'to' | 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' |\n                                    // 'unordered' | 'updating' | 'validate' | 'value' | 'variable' | 'version' |\n                                    // 'where' | 'while' | 'with' | 'words' | 'xquery' | '{' | '|' | '||' | '|}' | '}'\n      break;\n    case 96:                        // 'comment'\n    case 119:                       // 'document'\n    case 202:                       // 'ordered'\n    case 244:                       // 'text'\n    case 256:                       // 'unordered'\n      lookahead2W(246);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n                                    // '//' | ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' |\n                                    // 'after' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'by' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'sentences' | 'stable' | 'start' | 'times' | 'to' | 'treat' |\n                                    // 'union' | 'where' | 'with' | 'words' | '{' | '|' | '||' | '|}' | '}'\n      break;\n    case 78:                        // 'array'\n    case 124:                       // 'empty-sequence'\n    case 152:                       // 'if'\n    case 165:                       // 'item'\n    case 167:                       // 'json-item'\n    case 242:                       // 'structured-item'\n    case 243:                       // 'switch'\n    case 253:                       // 'typeswitch'\n      lookahead2W(239);             // S^WS | EOF | '!' | '!=' | '#' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n                                    // ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' | 'after' |\n                                    // 'and' | 'as' | 'ascending' | 'at' | 'before' | 'by' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'sentences' | 'stable' | 'start' | 'times' | 'to' | 'treat' |\n                                    // 'union' | 'where' | 'with' | 'words' | '|' | '||' | '|}' | '}'\n      break;\n    case 73:                        // 'ancestor'\n    case 74:                        // 'ancestor-or-self'\n    case 93:                        // 'child'\n    case 111:                       // 'descendant'\n    case 112:                       // 'descendant-or-self'\n    case 135:                       // 'following'\n    case 136:                       // 'following-sibling'\n    case 206:                       // 'parent'\n    case 212:                       // 'preceding'\n    case 213:                       // 'preceding-sibling'\n    case 229:                       // 'self'\n      lookahead2W(245);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n                                    // '//' | ':' | '::' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' |\n                                    // ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'by' | 'case' |\n                                    // 'cast' | 'castable' | 'collation' | 'contains' | 'count' | 'default' |\n                                    // 'descending' | 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' |\n                                    // 'ge' | 'group' | 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' |\n                                    // 'le' | 'let' | 'lt' | 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' |\n                                    // 'paragraphs' | 'return' | 'satisfies' | 'sentences' | 'stable' | 'start' |\n                                    // 'times' | 'to' | 'treat' | 'union' | 'where' | 'with' | 'words' | '|' | '||' |\n                                    // '|}' | '}'\n      break;\n    case 6:                         // EQName^Token\n    case 70:                        // 'after'\n    case 72:                        // 'allowing'\n    case 75:                        // 'and'\n    case 77:                        // 'append'\n    case 79:                        // 'as'\n    case 80:                        // 'ascending'\n    case 81:                        // 'at'\n    case 83:                        // 'base-uri'\n    case 84:                        // 'before'\n    case 85:                        // 'boundary-space'\n    case 86:                        // 'break'\n    case 88:                        // 'case'\n    case 89:                        // 'cast'\n    case 90:                        // 'castable'\n    case 91:                        // 'catch'\n    case 94:                        // 'collation'\n    case 97:                        // 'constraint'\n    case 98:                        // 'construction'\n    case 101:                       // 'context'\n    case 102:                       // 'continue'\n    case 103:                       // 'copy'\n    case 104:                       // 'copy-namespaces'\n    case 105:                       // 'count'\n    case 106:                       // 'decimal-format'\n    case 108:                       // 'declare'\n    case 109:                       // 'default'\n    case 110:                       // 'delete'\n    case 113:                       // 'descending'\n    case 118:                       // 'div'\n    case 120:                       // 'document-node'\n    case 122:                       // 'else'\n    case 123:                       // 'empty'\n    case 125:                       // 'encoding'\n    case 126:                       // 'end'\n    case 128:                       // 'eq'\n    case 129:                       // 'every'\n    case 131:                       // 'except'\n    case 132:                       // 'exit'\n    case 133:                       // 'external'\n    case 134:                       // 'first'\n    case 137:                       // 'for'\n    case 141:                       // 'ft-option'\n    case 145:                       // 'function'\n    case 146:                       // 'ge'\n    case 148:                       // 'group'\n    case 150:                       // 'gt'\n    case 151:                       // 'idiv'\n    case 153:                       // 'import'\n    case 154:                       // 'in'\n    case 155:                       // 'index'\n    case 159:                       // 'insert'\n    case 160:                       // 'instance'\n    case 161:                       // 'integrity'\n    case 162:                       // 'intersect'\n    case 163:                       // 'into'\n    case 164:                       // 'is'\n    case 166:                       // 'json'\n    case 170:                       // 'last'\n    case 171:                       // 'lax'\n    case 172:                       // 'le'\n    case 174:                       // 'let'\n    case 176:                       // 'loop'\n    case 178:                       // 'lt'\n    case 180:                       // 'mod'\n    case 181:                       // 'modify'\n    case 182:                       // 'module'\n    case 185:                       // 'namespace-node'\n    case 186:                       // 'ne'\n    case 191:                       // 'node'\n    case 192:                       // 'nodes'\n    case 194:                       // 'object'\n    case 198:                       // 'only'\n    case 199:                       // 'option'\n    case 200:                       // 'or'\n    case 201:                       // 'order'\n    case 203:                       // 'ordering'\n    case 218:                       // 'rename'\n    case 219:                       // 'replace'\n    case 220:                       // 'return'\n    case 221:                       // 'returning'\n    case 222:                       // 'revalidation'\n    case 224:                       // 'satisfies'\n    case 225:                       // 'schema'\n    case 226:                       // 'schema-attribute'\n    case 227:                       // 'schema-element'\n    case 228:                       // 'score'\n    case 234:                       // 'sliding'\n    case 235:                       // 'some'\n    case 236:                       // 'stable'\n    case 237:                       // 'start'\n    case 240:                       // 'strict'\n    case 248:                       // 'to'\n    case 249:                       // 'treat'\n    case 250:                       // 'try'\n    case 251:                       // 'tumbling'\n    case 252:                       // 'type'\n    case 254:                       // 'union'\n    case 257:                       // 'updating'\n    case 260:                       // 'validate'\n    case 261:                       // 'value'\n    case 262:                       // 'variable'\n    case 263:                       // 'version'\n    case 266:                       // 'where'\n    case 267:                       // 'while'\n    case 270:                       // 'with'\n    case 274:                       // 'xquery'\n      lookahead2W(243);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n                                    // '//' | ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' |\n                                    // 'after' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'by' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'sentences' | 'stable' | 'start' | 'times' | 'to' | 'treat' |\n                                    // 'union' | 'where' | 'with' | 'words' | '|' | '||' | '|}' | '}'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 35922                 // 'attribute' 'after'\n     || lk == 35961                 // 'element' 'after'\n     || lk == 36024                 // 'namespace' 'after'\n     || lk == 36056                 // 'processing-instruction' 'after'\n     || lk == 38482                 // 'attribute' 'and'\n     || lk == 38521                 // 'element' 'and'\n     || lk == 38584                 // 'namespace' 'and'\n     || lk == 38616                 // 'processing-instruction' 'and'\n     || lk == 40530                 // 'attribute' 'as'\n     || lk == 40569                 // 'element' 'as'\n     || lk == 40632                 // 'namespace' 'as'\n     || lk == 40664                 // 'processing-instruction' 'as'\n     || lk == 41042                 // 'attribute' 'ascending'\n     || lk == 41081                 // 'element' 'ascending'\n     || lk == 41144                 // 'namespace' 'ascending'\n     || lk == 41176                 // 'processing-instruction' 'ascending'\n     || lk == 41554                 // 'attribute' 'at'\n     || lk == 41593                 // 'element' 'at'\n     || lk == 41656                 // 'namespace' 'at'\n     || lk == 41688                 // 'processing-instruction' 'at'\n     || lk == 43090                 // 'attribute' 'before'\n     || lk == 43129                 // 'element' 'before'\n     || lk == 43192                 // 'namespace' 'before'\n     || lk == 43224                 // 'processing-instruction' 'before'\n     || lk == 45138                 // 'attribute' 'case'\n     || lk == 45177                 // 'element' 'case'\n     || lk == 45240                 // 'namespace' 'case'\n     || lk == 45272                 // 'processing-instruction' 'case'\n     || lk == 45650                 // 'attribute' 'cast'\n     || lk == 45689                 // 'element' 'cast'\n     || lk == 45752                 // 'namespace' 'cast'\n     || lk == 45784                 // 'processing-instruction' 'cast'\n     || lk == 46162                 // 'attribute' 'castable'\n     || lk == 46201                 // 'element' 'castable'\n     || lk == 46264                 // 'namespace' 'castable'\n     || lk == 46296                 // 'processing-instruction' 'castable'\n     || lk == 48210                 // 'attribute' 'collation'\n     || lk == 48249                 // 'element' 'collation'\n     || lk == 48312                 // 'namespace' 'collation'\n     || lk == 48344                 // 'processing-instruction' 'collation'\n     || lk == 53842                 // 'attribute' 'count'\n     || lk == 53881                 // 'element' 'count'\n     || lk == 53944                 // 'namespace' 'count'\n     || lk == 53976                 // 'processing-instruction' 'count'\n     || lk == 55890                 // 'attribute' 'default'\n     || lk == 55929                 // 'element' 'default'\n     || lk == 55992                 // 'namespace' 'default'\n     || lk == 56024                 // 'processing-instruction' 'default'\n     || lk == 57938                 // 'attribute' 'descending'\n     || lk == 57977                 // 'element' 'descending'\n     || lk == 58040                 // 'namespace' 'descending'\n     || lk == 58072                 // 'processing-instruction' 'descending'\n     || lk == 60498                 // 'attribute' 'div'\n     || lk == 60537                 // 'element' 'div'\n     || lk == 60600                 // 'namespace' 'div'\n     || lk == 60632                 // 'processing-instruction' 'div'\n     || lk == 62546                 // 'attribute' 'else'\n     || lk == 62585                 // 'element' 'else'\n     || lk == 62648                 // 'namespace' 'else'\n     || lk == 62680                 // 'processing-instruction' 'else'\n     || lk == 63058                 // 'attribute' 'empty'\n     || lk == 63097                 // 'element' 'empty'\n     || lk == 63160                 // 'namespace' 'empty'\n     || lk == 63192                 // 'processing-instruction' 'empty'\n     || lk == 64594                 // 'attribute' 'end'\n     || lk == 64633                 // 'element' 'end'\n     || lk == 64696                 // 'namespace' 'end'\n     || lk == 64728                 // 'processing-instruction' 'end'\n     || lk == 65618                 // 'attribute' 'eq'\n     || lk == 65657                 // 'element' 'eq'\n     || lk == 65720                 // 'namespace' 'eq'\n     || lk == 65752                 // 'processing-instruction' 'eq'\n     || lk == 67154                 // 'attribute' 'except'\n     || lk == 67193                 // 'element' 'except'\n     || lk == 67256                 // 'namespace' 'except'\n     || lk == 67288                 // 'processing-instruction' 'except'\n     || lk == 70226                 // 'attribute' 'for'\n     || lk == 70265                 // 'element' 'for'\n     || lk == 70328                 // 'namespace' 'for'\n     || lk == 70360                 // 'processing-instruction' 'for'\n     || lk == 74834                 // 'attribute' 'ge'\n     || lk == 74873                 // 'element' 'ge'\n     || lk == 74936                 // 'namespace' 'ge'\n     || lk == 74968                 // 'processing-instruction' 'ge'\n     || lk == 75858                 // 'attribute' 'group'\n     || lk == 75897                 // 'element' 'group'\n     || lk == 75960                 // 'namespace' 'group'\n     || lk == 75992                 // 'processing-instruction' 'group'\n     || lk == 76882                 // 'attribute' 'gt'\n     || lk == 76921                 // 'element' 'gt'\n     || lk == 76984                 // 'namespace' 'gt'\n     || lk == 77016                 // 'processing-instruction' 'gt'\n     || lk == 77394                 // 'attribute' 'idiv'\n     || lk == 77433                 // 'element' 'idiv'\n     || lk == 77496                 // 'namespace' 'idiv'\n     || lk == 77528                 // 'processing-instruction' 'idiv'\n     || lk == 82002                 // 'attribute' 'instance'\n     || lk == 82041                 // 'element' 'instance'\n     || lk == 82104                 // 'namespace' 'instance'\n     || lk == 82136                 // 'processing-instruction' 'instance'\n     || lk == 83026                 // 'attribute' 'intersect'\n     || lk == 83065                 // 'element' 'intersect'\n     || lk == 83128                 // 'namespace' 'intersect'\n     || lk == 83160                 // 'processing-instruction' 'intersect'\n     || lk == 83538                 // 'attribute' 'into'\n     || lk == 83577                 // 'element' 'into'\n     || lk == 83640                 // 'namespace' 'into'\n     || lk == 83672                 // 'processing-instruction' 'into'\n     || lk == 84050                 // 'attribute' 'is'\n     || lk == 84089                 // 'element' 'is'\n     || lk == 84152                 // 'namespace' 'is'\n     || lk == 84184                 // 'processing-instruction' 'is'\n     || lk == 88146                 // 'attribute' 'le'\n     || lk == 88185                 // 'element' 'le'\n     || lk == 88248                 // 'namespace' 'le'\n     || lk == 88280                 // 'processing-instruction' 'le'\n     || lk == 89170                 // 'attribute' 'let'\n     || lk == 89209                 // 'element' 'let'\n     || lk == 89272                 // 'namespace' 'let'\n     || lk == 89304                 // 'processing-instruction' 'let'\n     || lk == 91218                 // 'attribute' 'lt'\n     || lk == 91257                 // 'element' 'lt'\n     || lk == 91320                 // 'namespace' 'lt'\n     || lk == 91352                 // 'processing-instruction' 'lt'\n     || lk == 92242                 // 'attribute' 'mod'\n     || lk == 92281                 // 'element' 'mod'\n     || lk == 92344                 // 'namespace' 'mod'\n     || lk == 92376                 // 'processing-instruction' 'mod'\n     || lk == 92754                 // 'attribute' 'modify'\n     || lk == 92793                 // 'element' 'modify'\n     || lk == 92856                 // 'namespace' 'modify'\n     || lk == 92888                 // 'processing-instruction' 'modify'\n     || lk == 95314                 // 'attribute' 'ne'\n     || lk == 95353                 // 'element' 'ne'\n     || lk == 95416                 // 'namespace' 'ne'\n     || lk == 95448                 // 'processing-instruction' 'ne'\n     || lk == 101458                // 'attribute' 'only'\n     || lk == 101497                // 'element' 'only'\n     || lk == 101560                // 'namespace' 'only'\n     || lk == 101592                // 'processing-instruction' 'only'\n     || lk == 102482                // 'attribute' 'or'\n     || lk == 102521                // 'element' 'or'\n     || lk == 102584                // 'namespace' 'or'\n     || lk == 102616                // 'processing-instruction' 'or'\n     || lk == 102994                // 'attribute' 'order'\n     || lk == 103033                // 'element' 'order'\n     || lk == 103096                // 'namespace' 'order'\n     || lk == 103128                // 'processing-instruction' 'order'\n     || lk == 112722                // 'attribute' 'return'\n     || lk == 112761                // 'element' 'return'\n     || lk == 112824                // 'namespace' 'return'\n     || lk == 112856                // 'processing-instruction' 'return'\n     || lk == 114770                // 'attribute' 'satisfies'\n     || lk == 114809                // 'element' 'satisfies'\n     || lk == 114872                // 'namespace' 'satisfies'\n     || lk == 114904                // 'processing-instruction' 'satisfies'\n     || lk == 120914                // 'attribute' 'stable'\n     || lk == 120953                // 'element' 'stable'\n     || lk == 121016                // 'namespace' 'stable'\n     || lk == 121048                // 'processing-instruction' 'stable'\n     || lk == 121426                // 'attribute' 'start'\n     || lk == 121465                // 'element' 'start'\n     || lk == 121528                // 'namespace' 'start'\n     || lk == 121560                // 'processing-instruction' 'start'\n     || lk == 127058                // 'attribute' 'to'\n     || lk == 127097                // 'element' 'to'\n     || lk == 127160                // 'namespace' 'to'\n     || lk == 127192                // 'processing-instruction' 'to'\n     || lk == 127570                // 'attribute' 'treat'\n     || lk == 127609                // 'element' 'treat'\n     || lk == 127672                // 'namespace' 'treat'\n     || lk == 127704                // 'processing-instruction' 'treat'\n     || lk == 130130                // 'attribute' 'union'\n     || lk == 130169                // 'element' 'union'\n     || lk == 130232                // 'namespace' 'union'\n     || lk == 130264                // 'processing-instruction' 'union'\n     || lk == 136274                // 'attribute' 'where'\n     || lk == 136313                // 'element' 'where'\n     || lk == 136376                // 'namespace' 'where'\n     || lk == 136408                // 'processing-instruction' 'where'\n     || lk == 138322                // 'attribute' 'with'\n     || lk == 138361                // 'element' 'with'\n     || lk == 138424                // 'namespace' 'with'\n     || lk == 138456)               // 'processing-instruction' 'with'\n    {\n      lk = memoized(4, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_PostfixExpr();\n          memoize(4, e0A, -1);\n          lk = -3;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(4, e0A, -2);\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n    case 8:                         // IntegerLiteral\n    case 9:                         // DecimalLiteral\n    case 10:                        // DoubleLiteral\n    case 11:                        // StringLiteral\n    case 31:                        // '$'\n    case 32:                        // '%'\n    case 34:                        // '('\n    case 44:                        // '.'\n    case 54:                        // '<'\n    case 55:                        // '<!--'\n    case 59:                        // '<?'\n    case 68:                        // '['\n    case 276:                       // '{'\n    case 278:                       // '{|'\n    case 3154:                      // 'attribute' EQName^Token\n    case 3193:                      // 'element' EQName^Token\n    case 9912:                      // 'namespace' NCName^Token\n    case 9944:                      // 'processing-instruction' NCName^Token\n    case 14854:                     // EQName^Token '#'\n    case 14918:                     // 'after' '#'\n    case 14920:                     // 'allowing' '#'\n    case 14921:                     // 'ancestor' '#'\n    case 14922:                     // 'ancestor-or-self' '#'\n    case 14923:                     // 'and' '#'\n    case 14925:                     // 'append' '#'\n    case 14926:                     // 'array' '#'\n    case 14927:                     // 'as' '#'\n    case 14928:                     // 'ascending' '#'\n    case 14929:                     // 'at' '#'\n    case 14930:                     // 'attribute' '#'\n    case 14931:                     // 'base-uri' '#'\n    case 14932:                     // 'before' '#'\n    case 14933:                     // 'boundary-space' '#'\n    case 14934:                     // 'break' '#'\n    case 14936:                     // 'case' '#'\n    case 14937:                     // 'cast' '#'\n    case 14938:                     // 'castable' '#'\n    case 14939:                     // 'catch' '#'\n    case 14941:                     // 'child' '#'\n    case 14942:                     // 'collation' '#'\n    case 14944:                     // 'comment' '#'\n    case 14945:                     // 'constraint' '#'\n    case 14946:                     // 'construction' '#'\n    case 14949:                     // 'context' '#'\n    case 14950:                     // 'continue' '#'\n    case 14951:                     // 'copy' '#'\n    case 14952:                     // 'copy-namespaces' '#'\n    case 14953:                     // 'count' '#'\n    case 14954:                     // 'decimal-format' '#'\n    case 14956:                     // 'declare' '#'\n    case 14957:                     // 'default' '#'\n    case 14958:                     // 'delete' '#'\n    case 14959:                     // 'descendant' '#'\n    case 14960:                     // 'descendant-or-self' '#'\n    case 14961:                     // 'descending' '#'\n    case 14966:                     // 'div' '#'\n    case 14967:                     // 'document' '#'\n    case 14968:                     // 'document-node' '#'\n    case 14969:                     // 'element' '#'\n    case 14970:                     // 'else' '#'\n    case 14971:                     // 'empty' '#'\n    case 14972:                     // 'empty-sequence' '#'\n    case 14973:                     // 'encoding' '#'\n    case 14974:                     // 'end' '#'\n    case 14976:                     // 'eq' '#'\n    case 14977:                     // 'every' '#'\n    case 14979:                     // 'except' '#'\n    case 14980:                     // 'exit' '#'\n    case 14981:                     // 'external' '#'\n    case 14982:                     // 'first' '#'\n    case 14983:                     // 'following' '#'\n    case 14984:                     // 'following-sibling' '#'\n    case 14985:                     // 'for' '#'\n    case 14989:                     // 'ft-option' '#'\n    case 14993:                     // 'function' '#'\n    case 14994:                     // 'ge' '#'\n    case 14996:                     // 'group' '#'\n    case 14998:                     // 'gt' '#'\n    case 14999:                     // 'idiv' '#'\n    case 15000:                     // 'if' '#'\n    case 15001:                     // 'import' '#'\n    case 15002:                     // 'in' '#'\n    case 15003:                     // 'index' '#'\n    case 15007:                     // 'insert' '#'\n    case 15008:                     // 'instance' '#'\n    case 15009:                     // 'integrity' '#'\n    case 15010:                     // 'intersect' '#'\n    case 15011:                     // 'into' '#'\n    case 15012:                     // 'is' '#'\n    case 15013:                     // 'item' '#'\n    case 15014:                     // 'json' '#'\n    case 15015:                     // 'json-item' '#'\n    case 15018:                     // 'last' '#'\n    case 15019:                     // 'lax' '#'\n    case 15020:                     // 'le' '#'\n    case 15022:                     // 'let' '#'\n    case 15024:                     // 'loop' '#'\n    case 15026:                     // 'lt' '#'\n    case 15028:                     // 'mod' '#'\n    case 15029:                     // 'modify' '#'\n    case 15030:                     // 'module' '#'\n    case 15032:                     // 'namespace' '#'\n    case 15033:                     // 'namespace-node' '#'\n    case 15034:                     // 'ne' '#'\n    case 15039:                     // 'node' '#'\n    case 15040:                     // 'nodes' '#'\n    case 15042:                     // 'object' '#'\n    case 15046:                     // 'only' '#'\n    case 15047:                     // 'option' '#'\n    case 15048:                     // 'or' '#'\n    case 15049:                     // 'order' '#'\n    case 15050:                     // 'ordered' '#'\n    case 15051:                     // 'ordering' '#'\n    case 15054:                     // 'parent' '#'\n    case 15060:                     // 'preceding' '#'\n    case 15061:                     // 'preceding-sibling' '#'\n    case 15064:                     // 'processing-instruction' '#'\n    case 15066:                     // 'rename' '#'\n    case 15067:                     // 'replace' '#'\n    case 15068:                     // 'return' '#'\n    case 15069:                     // 'returning' '#'\n    case 15070:                     // 'revalidation' '#'\n    case 15072:                     // 'satisfies' '#'\n    case 15073:                     // 'schema' '#'\n    case 15074:                     // 'schema-attribute' '#'\n    case 15075:                     // 'schema-element' '#'\n    case 15076:                     // 'score' '#'\n    case 15077:                     // 'self' '#'\n    case 15082:                     // 'sliding' '#'\n    case 15083:                     // 'some' '#'\n    case 15084:                     // 'stable' '#'\n    case 15085:                     // 'start' '#'\n    case 15088:                     // 'strict' '#'\n    case 15090:                     // 'structured-item' '#'\n    case 15091:                     // 'switch' '#'\n    case 15092:                     // 'text' '#'\n    case 15096:                     // 'to' '#'\n    case 15097:                     // 'treat' '#'\n    case 15098:                     // 'try' '#'\n    case 15099:                     // 'tumbling' '#'\n    case 15100:                     // 'type' '#'\n    case 15101:                     // 'typeswitch' '#'\n    case 15102:                     // 'union' '#'\n    case 15104:                     // 'unordered' '#'\n    case 15105:                     // 'updating' '#'\n    case 15108:                     // 'validate' '#'\n    case 15109:                     // 'value' '#'\n    case 15110:                     // 'variable' '#'\n    case 15111:                     // 'version' '#'\n    case 15114:                     // 'where' '#'\n    case 15115:                     // 'while' '#'\n    case 15118:                     // 'with' '#'\n    case 15122:                     // 'xquery' '#'\n    case 17414:                     // EQName^Token '('\n    case 17478:                     // 'after' '('\n    case 17480:                     // 'allowing' '('\n    case 17481:                     // 'ancestor' '('\n    case 17482:                     // 'ancestor-or-self' '('\n    case 17483:                     // 'and' '('\n    case 17485:                     // 'append' '('\n    case 17487:                     // 'as' '('\n    case 17488:                     // 'ascending' '('\n    case 17489:                     // 'at' '('\n    case 17491:                     // 'base-uri' '('\n    case 17492:                     // 'before' '('\n    case 17493:                     // 'boundary-space' '('\n    case 17494:                     // 'break' '('\n    case 17496:                     // 'case' '('\n    case 17497:                     // 'cast' '('\n    case 17498:                     // 'castable' '('\n    case 17499:                     // 'catch' '('\n    case 17501:                     // 'child' '('\n    case 17502:                     // 'collation' '('\n    case 17505:                     // 'constraint' '('\n    case 17506:                     // 'construction' '('\n    case 17509:                     // 'context' '('\n    case 17510:                     // 'continue' '('\n    case 17511:                     // 'copy' '('\n    case 17512:                     // 'copy-namespaces' '('\n    case 17513:                     // 'count' '('\n    case 17514:                     // 'decimal-format' '('\n    case 17516:                     // 'declare' '('\n    case 17517:                     // 'default' '('\n    case 17518:                     // 'delete' '('\n    case 17519:                     // 'descendant' '('\n    case 17520:                     // 'descendant-or-self' '('\n    case 17521:                     // 'descending' '('\n    case 17526:                     // 'div' '('\n    case 17527:                     // 'document' '('\n    case 17530:                     // 'else' '('\n    case 17531:                     // 'empty' '('\n    case 17533:                     // 'encoding' '('\n    case 17534:                     // 'end' '('\n    case 17536:                     // 'eq' '('\n    case 17537:                     // 'every' '('\n    case 17539:                     // 'except' '('\n    case 17540:                     // 'exit' '('\n    case 17541:                     // 'external' '('\n    case 17542:                     // 'first' '('\n    case 17543:                     // 'following' '('\n    case 17544:                     // 'following-sibling' '('\n    case 17545:                     // 'for' '('\n    case 17549:                     // 'ft-option' '('\n    case 17553:                     // 'function' '('\n    case 17554:                     // 'ge' '('\n    case 17556:                     // 'group' '('\n    case 17558:                     // 'gt' '('\n    case 17559:                     // 'idiv' '('\n    case 17561:                     // 'import' '('\n    case 17562:                     // 'in' '('\n    case 17563:                     // 'index' '('\n    case 17567:                     // 'insert' '('\n    case 17568:                     // 'instance' '('\n    case 17569:                     // 'integrity' '('\n    case 17570:                     // 'intersect' '('\n    case 17571:                     // 'into' '('\n    case 17572:                     // 'is' '('\n    case 17574:                     // 'json' '('\n    case 17578:                     // 'last' '('\n    case 17579:                     // 'lax' '('\n    case 17580:                     // 'le' '('\n    case 17582:                     // 'let' '('\n    case 17584:                     // 'loop' '('\n    case 17586:                     // 'lt' '('\n    case 17588:                     // 'mod' '('\n    case 17589:                     // 'modify' '('\n    case 17590:                     // 'module' '('\n    case 17592:                     // 'namespace' '('\n    case 17594:                     // 'ne' '('\n    case 17600:                     // 'nodes' '('\n    case 17602:                     // 'object' '('\n    case 17606:                     // 'only' '('\n    case 17607:                     // 'option' '('\n    case 17608:                     // 'or' '('\n    case 17609:                     // 'order' '('\n    case 17610:                     // 'ordered' '('\n    case 17611:                     // 'ordering' '('\n    case 17614:                     // 'parent' '('\n    case 17620:                     // 'preceding' '('\n    case 17621:                     // 'preceding-sibling' '('\n    case 17626:                     // 'rename' '('\n    case 17627:                     // 'replace' '('\n    case 17628:                     // 'return' '('\n    case 17629:                     // 'returning' '('\n    case 17630:                     // 'revalidation' '('\n    case 17632:                     // 'satisfies' '('\n    case 17633:                     // 'schema' '('\n    case 17636:                     // 'score' '('\n    case 17637:                     // 'self' '('\n    case 17642:                     // 'sliding' '('\n    case 17643:                     // 'some' '('\n    case 17644:                     // 'stable' '('\n    case 17645:                     // 'start' '('\n    case 17648:                     // 'strict' '('\n    case 17656:                     // 'to' '('\n    case 17657:                     // 'treat' '('\n    case 17658:                     // 'try' '('\n    case 17659:                     // 'tumbling' '('\n    case 17660:                     // 'type' '('\n    case 17662:                     // 'union' '('\n    case 17664:                     // 'unordered' '('\n    case 17665:                     // 'updating' '('\n    case 17668:                     // 'validate' '('\n    case 17669:                     // 'value' '('\n    case 17670:                     // 'variable' '('\n    case 17671:                     // 'version' '('\n    case 17674:                     // 'where' '('\n    case 17675:                     // 'while' '('\n    case 17678:                     // 'with' '('\n    case 17682:                     // 'xquery' '('\n    case 36946:                     // 'attribute' 'allowing'\n    case 36985:                     // 'element' 'allowing'\n    case 37048:                     // 'namespace' 'allowing'\n    case 37080:                     // 'processing-instruction' 'allowing'\n    case 37458:                     // 'attribute' 'ancestor'\n    case 37497:                     // 'element' 'ancestor'\n    case 37560:                     // 'namespace' 'ancestor'\n    case 37592:                     // 'processing-instruction' 'ancestor'\n    case 37970:                     // 'attribute' 'ancestor-or-self'\n    case 38009:                     // 'element' 'ancestor-or-self'\n    case 38072:                     // 'namespace' 'ancestor-or-self'\n    case 38104:                     // 'processing-instruction' 'ancestor-or-self'\n    case 39506:                     // 'attribute' 'append'\n    case 39545:                     // 'element' 'append'\n    case 39608:                     // 'namespace' 'append'\n    case 39640:                     // 'processing-instruction' 'append'\n    case 40018:                     // 'attribute' 'array'\n    case 40057:                     // 'element' 'array'\n    case 42066:                     // 'attribute' 'attribute'\n    case 42105:                     // 'element' 'attribute'\n    case 42168:                     // 'namespace' 'attribute'\n    case 42200:                     // 'processing-instruction' 'attribute'\n    case 42578:                     // 'attribute' 'base-uri'\n    case 42617:                     // 'element' 'base-uri'\n    case 42680:                     // 'namespace' 'base-uri'\n    case 42712:                     // 'processing-instruction' 'base-uri'\n    case 43602:                     // 'attribute' 'boundary-space'\n    case 43641:                     // 'element' 'boundary-space'\n    case 43704:                     // 'namespace' 'boundary-space'\n    case 43736:                     // 'processing-instruction' 'boundary-space'\n    case 44114:                     // 'attribute' 'break'\n    case 44153:                     // 'element' 'break'\n    case 44216:                     // 'namespace' 'break'\n    case 44248:                     // 'processing-instruction' 'break'\n    case 46674:                     // 'attribute' 'catch'\n    case 46713:                     // 'element' 'catch'\n    case 46776:                     // 'namespace' 'catch'\n    case 46808:                     // 'processing-instruction' 'catch'\n    case 47698:                     // 'attribute' 'child'\n    case 47737:                     // 'element' 'child'\n    case 47800:                     // 'namespace' 'child'\n    case 47832:                     // 'processing-instruction' 'child'\n    case 49234:                     // 'attribute' 'comment'\n    case 49273:                     // 'element' 'comment'\n    case 49336:                     // 'namespace' 'comment'\n    case 49368:                     // 'processing-instruction' 'comment'\n    case 49746:                     // 'attribute' 'constraint'\n    case 49785:                     // 'element' 'constraint'\n    case 49848:                     // 'namespace' 'constraint'\n    case 49880:                     // 'processing-instruction' 'constraint'\n    case 50258:                     // 'attribute' 'construction'\n    case 50297:                     // 'element' 'construction'\n    case 50360:                     // 'namespace' 'construction'\n    case 50392:                     // 'processing-instruction' 'construction'\n    case 51794:                     // 'attribute' 'context'\n    case 51833:                     // 'element' 'context'\n    case 51896:                     // 'namespace' 'context'\n    case 51928:                     // 'processing-instruction' 'context'\n    case 52306:                     // 'attribute' 'continue'\n    case 52345:                     // 'element' 'continue'\n    case 52408:                     // 'namespace' 'continue'\n    case 52440:                     // 'processing-instruction' 'continue'\n    case 52818:                     // 'attribute' 'copy'\n    case 52857:                     // 'element' 'copy'\n    case 52920:                     // 'namespace' 'copy'\n    case 52952:                     // 'processing-instruction' 'copy'\n    case 53330:                     // 'attribute' 'copy-namespaces'\n    case 53369:                     // 'element' 'copy-namespaces'\n    case 53432:                     // 'namespace' 'copy-namespaces'\n    case 53464:                     // 'processing-instruction' 'copy-namespaces'\n    case 54354:                     // 'attribute' 'decimal-format'\n    case 54393:                     // 'element' 'decimal-format'\n    case 54456:                     // 'namespace' 'decimal-format'\n    case 54488:                     // 'processing-instruction' 'decimal-format'\n    case 55378:                     // 'attribute' 'declare'\n    case 55417:                     // 'element' 'declare'\n    case 55480:                     // 'namespace' 'declare'\n    case 55512:                     // 'processing-instruction' 'declare'\n    case 56402:                     // 'attribute' 'delete'\n    case 56441:                     // 'element' 'delete'\n    case 56504:                     // 'namespace' 'delete'\n    case 56536:                     // 'processing-instruction' 'delete'\n    case 56914:                     // 'attribute' 'descendant'\n    case 56953:                     // 'element' 'descendant'\n    case 57016:                     // 'namespace' 'descendant'\n    case 57048:                     // 'processing-instruction' 'descendant'\n    case 57426:                     // 'attribute' 'descendant-or-self'\n    case 57465:                     // 'element' 'descendant-or-self'\n    case 57528:                     // 'namespace' 'descendant-or-self'\n    case 57560:                     // 'processing-instruction' 'descendant-or-self'\n    case 61010:                     // 'attribute' 'document'\n    case 61049:                     // 'element' 'document'\n    case 61112:                     // 'namespace' 'document'\n    case 61144:                     // 'processing-instruction' 'document'\n    case 61522:                     // 'attribute' 'document-node'\n    case 61561:                     // 'element' 'document-node'\n    case 61624:                     // 'namespace' 'document-node'\n    case 61656:                     // 'processing-instruction' 'document-node'\n    case 62034:                     // 'attribute' 'element'\n    case 62073:                     // 'element' 'element'\n    case 62136:                     // 'namespace' 'element'\n    case 62168:                     // 'processing-instruction' 'element'\n    case 63570:                     // 'attribute' 'empty-sequence'\n    case 63609:                     // 'element' 'empty-sequence'\n    case 63672:                     // 'namespace' 'empty-sequence'\n    case 63704:                     // 'processing-instruction' 'empty-sequence'\n    case 64082:                     // 'attribute' 'encoding'\n    case 64121:                     // 'element' 'encoding'\n    case 64184:                     // 'namespace' 'encoding'\n    case 64216:                     // 'processing-instruction' 'encoding'\n    case 66130:                     // 'attribute' 'every'\n    case 66169:                     // 'element' 'every'\n    case 66232:                     // 'namespace' 'every'\n    case 66264:                     // 'processing-instruction' 'every'\n    case 67666:                     // 'attribute' 'exit'\n    case 67705:                     // 'element' 'exit'\n    case 67768:                     // 'namespace' 'exit'\n    case 67800:                     // 'processing-instruction' 'exit'\n    case 68178:                     // 'attribute' 'external'\n    case 68217:                     // 'element' 'external'\n    case 68280:                     // 'namespace' 'external'\n    case 68312:                     // 'processing-instruction' 'external'\n    case 68690:                     // 'attribute' 'first'\n    case 68729:                     // 'element' 'first'\n    case 68792:                     // 'namespace' 'first'\n    case 68824:                     // 'processing-instruction' 'first'\n    case 69202:                     // 'attribute' 'following'\n    case 69241:                     // 'element' 'following'\n    case 69304:                     // 'namespace' 'following'\n    case 69336:                     // 'processing-instruction' 'following'\n    case 69714:                     // 'attribute' 'following-sibling'\n    case 69753:                     // 'element' 'following-sibling'\n    case 69816:                     // 'namespace' 'following-sibling'\n    case 69848:                     // 'processing-instruction' 'following-sibling'\n    case 72274:                     // 'attribute' 'ft-option'\n    case 72313:                     // 'element' 'ft-option'\n    case 72376:                     // 'namespace' 'ft-option'\n    case 72408:                     // 'processing-instruction' 'ft-option'\n    case 74322:                     // 'attribute' 'function'\n    case 74361:                     // 'element' 'function'\n    case 74424:                     // 'namespace' 'function'\n    case 74456:                     // 'processing-instruction' 'function'\n    case 77906:                     // 'attribute' 'if'\n    case 77945:                     // 'element' 'if'\n    case 78008:                     // 'namespace' 'if'\n    case 78040:                     // 'processing-instruction' 'if'\n    case 78418:                     // 'attribute' 'import'\n    case 78457:                     // 'element' 'import'\n    case 78520:                     // 'namespace' 'import'\n    case 78552:                     // 'processing-instruction' 'import'\n    case 78930:                     // 'attribute' 'in'\n    case 78969:                     // 'element' 'in'\n    case 79032:                     // 'namespace' 'in'\n    case 79064:                     // 'processing-instruction' 'in'\n    case 79442:                     // 'attribute' 'index'\n    case 79481:                     // 'element' 'index'\n    case 79544:                     // 'namespace' 'index'\n    case 79576:                     // 'processing-instruction' 'index'\n    case 81490:                     // 'attribute' 'insert'\n    case 81529:                     // 'element' 'insert'\n    case 81592:                     // 'namespace' 'insert'\n    case 81624:                     // 'processing-instruction' 'insert'\n    case 82514:                     // 'attribute' 'integrity'\n    case 82553:                     // 'element' 'integrity'\n    case 82616:                     // 'namespace' 'integrity'\n    case 82648:                     // 'processing-instruction' 'integrity'\n    case 84562:                     // 'attribute' 'item'\n    case 84601:                     // 'element' 'item'\n    case 84664:                     // 'namespace' 'item'\n    case 84696:                     // 'processing-instruction' 'item'\n    case 85074:                     // 'attribute' 'json'\n    case 85113:                     // 'element' 'json'\n    case 85176:                     // 'namespace' 'json'\n    case 85208:                     // 'processing-instruction' 'json'\n    case 85586:                     // 'attribute' 'json-item'\n    case 85625:                     // 'element' 'json-item'\n    case 87122:                     // 'attribute' 'last'\n    case 87161:                     // 'element' 'last'\n    case 87224:                     // 'namespace' 'last'\n    case 87256:                     // 'processing-instruction' 'last'\n    case 87634:                     // 'attribute' 'lax'\n    case 87673:                     // 'element' 'lax'\n    case 87736:                     // 'namespace' 'lax'\n    case 87768:                     // 'processing-instruction' 'lax'\n    case 90194:                     // 'attribute' 'loop'\n    case 90233:                     // 'element' 'loop'\n    case 90296:                     // 'namespace' 'loop'\n    case 90328:                     // 'processing-instruction' 'loop'\n    case 93266:                     // 'attribute' 'module'\n    case 93305:                     // 'element' 'module'\n    case 93368:                     // 'namespace' 'module'\n    case 93400:                     // 'processing-instruction' 'module'\n    case 94290:                     // 'attribute' 'namespace'\n    case 94329:                     // 'element' 'namespace'\n    case 94392:                     // 'namespace' 'namespace'\n    case 94424:                     // 'processing-instruction' 'namespace'\n    case 94802:                     // 'attribute' 'namespace-node'\n    case 94841:                     // 'element' 'namespace-node'\n    case 94904:                     // 'namespace' 'namespace-node'\n    case 94936:                     // 'processing-instruction' 'namespace-node'\n    case 97874:                     // 'attribute' 'node'\n    case 97913:                     // 'element' 'node'\n    case 97976:                     // 'namespace' 'node'\n    case 98008:                     // 'processing-instruction' 'node'\n    case 98386:                     // 'attribute' 'nodes'\n    case 98425:                     // 'element' 'nodes'\n    case 98488:                     // 'namespace' 'nodes'\n    case 98520:                     // 'processing-instruction' 'nodes'\n    case 99410:                     // 'attribute' 'object'\n    case 99449:                     // 'element' 'object'\n    case 99512:                     // 'namespace' 'object'\n    case 99544:                     // 'processing-instruction' 'object'\n    case 101970:                    // 'attribute' 'option'\n    case 102009:                    // 'element' 'option'\n    case 102072:                    // 'namespace' 'option'\n    case 102104:                    // 'processing-instruction' 'option'\n    case 103506:                    // 'attribute' 'ordered'\n    case 103545:                    // 'element' 'ordered'\n    case 103608:                    // 'namespace' 'ordered'\n    case 103640:                    // 'processing-instruction' 'ordered'\n    case 104018:                    // 'attribute' 'ordering'\n    case 104057:                    // 'element' 'ordering'\n    case 104120:                    // 'namespace' 'ordering'\n    case 104152:                    // 'processing-instruction' 'ordering'\n    case 105554:                    // 'attribute' 'parent'\n    case 105593:                    // 'element' 'parent'\n    case 105656:                    // 'namespace' 'parent'\n    case 105688:                    // 'processing-instruction' 'parent'\n    case 108626:                    // 'attribute' 'preceding'\n    case 108665:                    // 'element' 'preceding'\n    case 108728:                    // 'namespace' 'preceding'\n    case 108760:                    // 'processing-instruction' 'preceding'\n    case 109138:                    // 'attribute' 'preceding-sibling'\n    case 109177:                    // 'element' 'preceding-sibling'\n    case 109240:                    // 'namespace' 'preceding-sibling'\n    case 109272:                    // 'processing-instruction' 'preceding-sibling'\n    case 110674:                    // 'attribute' 'processing-instruction'\n    case 110713:                    // 'element' 'processing-instruction'\n    case 110776:                    // 'namespace' 'processing-instruction'\n    case 110808:                    // 'processing-instruction' 'processing-instruction'\n    case 111698:                    // 'attribute' 'rename'\n    case 111737:                    // 'element' 'rename'\n    case 111800:                    // 'namespace' 'rename'\n    case 111832:                    // 'processing-instruction' 'rename'\n    case 112210:                    // 'attribute' 'replace'\n    case 112249:                    // 'element' 'replace'\n    case 112312:                    // 'namespace' 'replace'\n    case 112344:                    // 'processing-instruction' 'replace'\n    case 113234:                    // 'attribute' 'returning'\n    case 113273:                    // 'element' 'returning'\n    case 113336:                    // 'namespace' 'returning'\n    case 113368:                    // 'processing-instruction' 'returning'\n    case 113746:                    // 'attribute' 'revalidation'\n    case 113785:                    // 'element' 'revalidation'\n    case 113848:                    // 'namespace' 'revalidation'\n    case 113880:                    // 'processing-instruction' 'revalidation'\n    case 115282:                    // 'attribute' 'schema'\n    case 115321:                    // 'element' 'schema'\n    case 115384:                    // 'namespace' 'schema'\n    case 115416:                    // 'processing-instruction' 'schema'\n    case 115794:                    // 'attribute' 'schema-attribute'\n    case 115833:                    // 'element' 'schema-attribute'\n    case 115896:                    // 'namespace' 'schema-attribute'\n    case 115928:                    // 'processing-instruction' 'schema-attribute'\n    case 116306:                    // 'attribute' 'schema-element'\n    case 116345:                    // 'element' 'schema-element'\n    case 116408:                    // 'namespace' 'schema-element'\n    case 116440:                    // 'processing-instruction' 'schema-element'\n    case 116818:                    // 'attribute' 'score'\n    case 116857:                    // 'element' 'score'\n    case 116920:                    // 'namespace' 'score'\n    case 116952:                    // 'processing-instruction' 'score'\n    case 117330:                    // 'attribute' 'self'\n    case 117369:                    // 'element' 'self'\n    case 117432:                    // 'namespace' 'self'\n    case 117464:                    // 'processing-instruction' 'self'\n    case 119890:                    // 'attribute' 'sliding'\n    case 119929:                    // 'element' 'sliding'\n    case 119992:                    // 'namespace' 'sliding'\n    case 120024:                    // 'processing-instruction' 'sliding'\n    case 120402:                    // 'attribute' 'some'\n    case 120441:                    // 'element' 'some'\n    case 120504:                    // 'namespace' 'some'\n    case 120536:                    // 'processing-instruction' 'some'\n    case 122962:                    // 'attribute' 'strict'\n    case 123001:                    // 'element' 'strict'\n    case 123064:                    // 'namespace' 'strict'\n    case 123096:                    // 'processing-instruction' 'strict'\n    case 123986:                    // 'attribute' 'structured-item'\n    case 124025:                    // 'element' 'structured-item'\n    case 124498:                    // 'attribute' 'switch'\n    case 124537:                    // 'element' 'switch'\n    case 124600:                    // 'namespace' 'switch'\n    case 124632:                    // 'processing-instruction' 'switch'\n    case 125010:                    // 'attribute' 'text'\n    case 125049:                    // 'element' 'text'\n    case 125112:                    // 'namespace' 'text'\n    case 125144:                    // 'processing-instruction' 'text'\n    case 128082:                    // 'attribute' 'try'\n    case 128121:                    // 'element' 'try'\n    case 128184:                    // 'namespace' 'try'\n    case 128216:                    // 'processing-instruction' 'try'\n    case 128594:                    // 'attribute' 'tumbling'\n    case 128633:                    // 'element' 'tumbling'\n    case 128696:                    // 'namespace' 'tumbling'\n    case 128728:                    // 'processing-instruction' 'tumbling'\n    case 129106:                    // 'attribute' 'type'\n    case 129145:                    // 'element' 'type'\n    case 129208:                    // 'namespace' 'type'\n    case 129240:                    // 'processing-instruction' 'type'\n    case 129618:                    // 'attribute' 'typeswitch'\n    case 129657:                    // 'element' 'typeswitch'\n    case 129720:                    // 'namespace' 'typeswitch'\n    case 129752:                    // 'processing-instruction' 'typeswitch'\n    case 131154:                    // 'attribute' 'unordered'\n    case 131193:                    // 'element' 'unordered'\n    case 131256:                    // 'namespace' 'unordered'\n    case 131288:                    // 'processing-instruction' 'unordered'\n    case 131666:                    // 'attribute' 'updating'\n    case 131705:                    // 'element' 'updating'\n    case 131768:                    // 'namespace' 'updating'\n    case 131800:                    // 'processing-instruction' 'updating'\n    case 133202:                    // 'attribute' 'validate'\n    case 133241:                    // 'element' 'validate'\n    case 133304:                    // 'namespace' 'validate'\n    case 133336:                    // 'processing-instruction' 'validate'\n    case 133714:                    // 'attribute' 'value'\n    case 133753:                    // 'element' 'value'\n    case 133816:                    // 'namespace' 'value'\n    case 133848:                    // 'processing-instruction' 'value'\n    case 134226:                    // 'attribute' 'variable'\n    case 134265:                    // 'element' 'variable'\n    case 134328:                    // 'namespace' 'variable'\n    case 134360:                    // 'processing-instruction' 'variable'\n    case 134738:                    // 'attribute' 'version'\n    case 134777:                    // 'element' 'version'\n    case 134840:                    // 'namespace' 'version'\n    case 134872:                    // 'processing-instruction' 'version'\n    case 136786:                    // 'attribute' 'while'\n    case 136825:                    // 'element' 'while'\n    case 136888:                    // 'namespace' 'while'\n    case 136920:                    // 'processing-instruction' 'while'\n    case 140370:                    // 'attribute' 'xquery'\n    case 140409:                    // 'element' 'xquery'\n    case 140472:                    // 'namespace' 'xquery'\n    case 140504:                    // 'processing-instruction' 'xquery'\n    case 141394:                    // 'attribute' '{'\n    case 141408:                    // 'comment' '{'\n    case 141431:                    // 'document' '{'\n    case 141433:                    // 'element' '{'\n    case 141496:                    // 'namespace' '{'\n    case 141514:                    // 'ordered' '{'\n    case 141528:                    // 'processing-instruction' '{'\n    case 141556:                    // 'text' '{'\n    case 141568:                    // 'unordered' '{'\n      try_PostfixExpr();\n      break;\n    case -3:\n      break;\n    default:\n      try_AxisStep();\n    }\n  }\n\n  function parse_AxisStep()\n  {\n    eventHandler.startNonterminal(\"AxisStep\", e0);\n    switch (l1)\n    {\n    case 73:                        // 'ancestor'\n    case 74:                        // 'ancestor-or-self'\n    case 206:                       // 'parent'\n    case 212:                       // 'preceding'\n    case 213:                       // 'preceding-sibling'\n      lookahead2W(241);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n                                    // '::' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' | 'after' |\n                                    // 'and' | 'as' | 'ascending' | 'at' | 'before' | 'by' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'sentences' | 'stable' | 'start' | 'times' | 'to' | 'treat' |\n                                    // 'union' | 'where' | 'with' | 'words' | '|' | '||' | '|}' | '}'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 45:                        // '..'\n    case 26185:                     // 'ancestor' '::'\n    case 26186:                     // 'ancestor-or-self' '::'\n    case 26318:                     // 'parent' '::'\n    case 26324:                     // 'preceding' '::'\n    case 26325:                     // 'preceding-sibling' '::'\n      parse_ReverseStep();\n      break;\n    default:\n      parse_ForwardStep();\n    }\n    lookahead1W(237);               // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n                                    // ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' | 'after' | 'and' |\n                                    // 'as' | 'ascending' | 'at' | 'before' | 'by' | 'case' | 'cast' | 'castable' |\n                                    // 'collation' | 'contains' | 'count' | 'default' | 'descending' | 'div' | 'else' |\n                                    // 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' | 'gt' | 'idiv' |\n                                    // 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' | 'mod' |\n                                    // 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'sentences' | 'stable' | 'start' | 'times' | 'to' | 'treat' |\n                                    // 'union' | 'where' | 'with' | 'words' | '|' | '||' | '|}' | '}'\n    whitespace();\n    parse_PredicateList();\n    eventHandler.endNonterminal(\"AxisStep\", e0);\n  }\n\n  function try_AxisStep()\n  {\n    switch (l1)\n    {\n    case 73:                        // 'ancestor'\n    case 74:                        // 'ancestor-or-self'\n    case 206:                       // 'parent'\n    case 212:                       // 'preceding'\n    case 213:                       // 'preceding-sibling'\n      lookahead2W(241);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n                                    // '::' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' | 'after' |\n                                    // 'and' | 'as' | 'ascending' | 'at' | 'before' | 'by' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'sentences' | 'stable' | 'start' | 'times' | 'to' | 'treat' |\n                                    // 'union' | 'where' | 'with' | 'words' | '|' | '||' | '|}' | '}'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 45:                        // '..'\n    case 26185:                     // 'ancestor' '::'\n    case 26186:                     // 'ancestor-or-self' '::'\n    case 26318:                     // 'parent' '::'\n    case 26324:                     // 'preceding' '::'\n    case 26325:                     // 'preceding-sibling' '::'\n      try_ReverseStep();\n      break;\n    default:\n      try_ForwardStep();\n    }\n    lookahead1W(237);               // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n                                    // ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' | 'after' | 'and' |\n                                    // 'as' | 'ascending' | 'at' | 'before' | 'by' | 'case' | 'cast' | 'castable' |\n                                    // 'collation' | 'contains' | 'count' | 'default' | 'descending' | 'div' | 'else' |\n                                    // 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' | 'gt' | 'idiv' |\n                                    // 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' | 'mod' |\n                                    // 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'sentences' | 'stable' | 'start' | 'times' | 'to' | 'treat' |\n                                    // 'union' | 'where' | 'with' | 'words' | '|' | '||' | '|}' | '}'\n    try_PredicateList();\n  }\n\n  function parse_ForwardStep()\n  {\n    eventHandler.startNonterminal(\"ForwardStep\", e0);\n    switch (l1)\n    {\n    case 82:                        // 'attribute'\n      lookahead2W(244);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n                                    // ':' | '::' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' |\n                                    // 'after' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'by' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'sentences' | 'stable' | 'start' | 'times' | 'to' | 'treat' |\n                                    // 'union' | 'where' | 'with' | 'words' | '|' | '||' | '|}' | '}'\n      break;\n    case 93:                        // 'child'\n    case 111:                       // 'descendant'\n    case 112:                       // 'descendant-or-self'\n    case 135:                       // 'following'\n    case 136:                       // 'following-sibling'\n    case 229:                       // 'self'\n      lookahead2W(241);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n                                    // '::' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' | 'after' |\n                                    // 'and' | 'as' | 'ascending' | 'at' | 'before' | 'by' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'sentences' | 'stable' | 'start' | 'times' | 'to' | 'treat' |\n                                    // 'union' | 'where' | 'with' | 'words' | '|' | '||' | '|}' | '}'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 26194:                     // 'attribute' '::'\n    case 26205:                     // 'child' '::'\n    case 26223:                     // 'descendant' '::'\n    case 26224:                     // 'descendant-or-self' '::'\n    case 26247:                     // 'following' '::'\n    case 26248:                     // 'following-sibling' '::'\n    case 26341:                     // 'self' '::'\n      parse_ForwardAxis();\n      lookahead1W(256);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n      whitespace();\n      parse_NodeTest();\n      break;\n    default:\n      parse_AbbrevForwardStep();\n    }\n    eventHandler.endNonterminal(\"ForwardStep\", e0);\n  }\n\n  function try_ForwardStep()\n  {\n    switch (l1)\n    {\n    case 82:                        // 'attribute'\n      lookahead2W(244);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n                                    // ':' | '::' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' |\n                                    // 'after' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'by' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'sentences' | 'stable' | 'start' | 'times' | 'to' | 'treat' |\n                                    // 'union' | 'where' | 'with' | 'words' | '|' | '||' | '|}' | '}'\n      break;\n    case 93:                        // 'child'\n    case 111:                       // 'descendant'\n    case 112:                       // 'descendant-or-self'\n    case 135:                       // 'following'\n    case 136:                       // 'following-sibling'\n    case 229:                       // 'self'\n      lookahead2W(241);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n                                    // '::' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' | 'after' |\n                                    // 'and' | 'as' | 'ascending' | 'at' | 'before' | 'by' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'sentences' | 'stable' | 'start' | 'times' | 'to' | 'treat' |\n                                    // 'union' | 'where' | 'with' | 'words' | '|' | '||' | '|}' | '}'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 26194:                     // 'attribute' '::'\n    case 26205:                     // 'child' '::'\n    case 26223:                     // 'descendant' '::'\n    case 26224:                     // 'descendant-or-self' '::'\n    case 26247:                     // 'following' '::'\n    case 26248:                     // 'following-sibling' '::'\n    case 26341:                     // 'self' '::'\n      try_ForwardAxis();\n      lookahead1W(256);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n      try_NodeTest();\n      break;\n    default:\n      try_AbbrevForwardStep();\n    }\n  }\n\n  function parse_ForwardAxis()\n  {\n    eventHandler.startNonterminal(\"ForwardAxis\", e0);\n    switch (l1)\n    {\n    case 93:                        // 'child'\n      shift(93);                    // 'child'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shift(51);                    // '::'\n      break;\n    case 111:                       // 'descendant'\n      shift(111);                   // 'descendant'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shift(51);                    // '::'\n      break;\n    case 82:                        // 'attribute'\n      shift(82);                    // 'attribute'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shift(51);                    // '::'\n      break;\n    case 229:                       // 'self'\n      shift(229);                   // 'self'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shift(51);                    // '::'\n      break;\n    case 112:                       // 'descendant-or-self'\n      shift(112);                   // 'descendant-or-self'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shift(51);                    // '::'\n      break;\n    case 136:                       // 'following-sibling'\n      shift(136);                   // 'following-sibling'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shift(51);                    // '::'\n      break;\n    default:\n      shift(135);                   // 'following'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shift(51);                    // '::'\n    }\n    eventHandler.endNonterminal(\"ForwardAxis\", e0);\n  }\n\n  function try_ForwardAxis()\n  {\n    switch (l1)\n    {\n    case 93:                        // 'child'\n      shiftT(93);                   // 'child'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shiftT(51);                   // '::'\n      break;\n    case 111:                       // 'descendant'\n      shiftT(111);                  // 'descendant'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shiftT(51);                   // '::'\n      break;\n    case 82:                        // 'attribute'\n      shiftT(82);                   // 'attribute'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shiftT(51);                   // '::'\n      break;\n    case 229:                       // 'self'\n      shiftT(229);                  // 'self'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shiftT(51);                   // '::'\n      break;\n    case 112:                       // 'descendant-or-self'\n      shiftT(112);                  // 'descendant-or-self'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shiftT(51);                   // '::'\n      break;\n    case 136:                       // 'following-sibling'\n      shiftT(136);                  // 'following-sibling'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shiftT(51);                   // '::'\n      break;\n    default:\n      shiftT(135);                  // 'following'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shiftT(51);                   // '::'\n    }\n  }\n\n  function parse_AbbrevForwardStep()\n  {\n    eventHandler.startNonterminal(\"AbbrevForwardStep\", e0);\n    if (l1 == 66)                   // '@'\n    {\n      shift(66);                    // '@'\n    }\n    lookahead1W(256);               // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    whitespace();\n    parse_NodeTest();\n    eventHandler.endNonterminal(\"AbbrevForwardStep\", e0);\n  }\n\n  function try_AbbrevForwardStep()\n  {\n    if (l1 == 66)                   // '@'\n    {\n      shiftT(66);                   // '@'\n    }\n    lookahead1W(256);               // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    try_NodeTest();\n  }\n\n  function parse_ReverseStep()\n  {\n    eventHandler.startNonterminal(\"ReverseStep\", e0);\n    switch (l1)\n    {\n    case 45:                        // '..'\n      parse_AbbrevReverseStep();\n      break;\n    default:\n      parse_ReverseAxis();\n      lookahead1W(256);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n      whitespace();\n      parse_NodeTest();\n    }\n    eventHandler.endNonterminal(\"ReverseStep\", e0);\n  }\n\n  function try_ReverseStep()\n  {\n    switch (l1)\n    {\n    case 45:                        // '..'\n      try_AbbrevReverseStep();\n      break;\n    default:\n      try_ReverseAxis();\n      lookahead1W(256);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n      try_NodeTest();\n    }\n  }\n\n  function parse_ReverseAxis()\n  {\n    eventHandler.startNonterminal(\"ReverseAxis\", e0);\n    switch (l1)\n    {\n    case 206:                       // 'parent'\n      shift(206);                   // 'parent'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shift(51);                    // '::'\n      break;\n    case 73:                        // 'ancestor'\n      shift(73);                    // 'ancestor'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shift(51);                    // '::'\n      break;\n    case 213:                       // 'preceding-sibling'\n      shift(213);                   // 'preceding-sibling'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shift(51);                    // '::'\n      break;\n    case 212:                       // 'preceding'\n      shift(212);                   // 'preceding'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shift(51);                    // '::'\n      break;\n    default:\n      shift(74);                    // 'ancestor-or-self'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shift(51);                    // '::'\n    }\n    eventHandler.endNonterminal(\"ReverseAxis\", e0);\n  }\n\n  function try_ReverseAxis()\n  {\n    switch (l1)\n    {\n    case 206:                       // 'parent'\n      shiftT(206);                  // 'parent'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shiftT(51);                   // '::'\n      break;\n    case 73:                        // 'ancestor'\n      shiftT(73);                   // 'ancestor'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shiftT(51);                   // '::'\n      break;\n    case 213:                       // 'preceding-sibling'\n      shiftT(213);                  // 'preceding-sibling'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shiftT(51);                   // '::'\n      break;\n    case 212:                       // 'preceding'\n      shiftT(212);                  // 'preceding'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shiftT(51);                   // '::'\n      break;\n    default:\n      shiftT(74);                   // 'ancestor-or-self'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shiftT(51);                   // '::'\n    }\n  }\n\n  function parse_AbbrevReverseStep()\n  {\n    eventHandler.startNonterminal(\"AbbrevReverseStep\", e0);\n    shift(45);                      // '..'\n    eventHandler.endNonterminal(\"AbbrevReverseStep\", e0);\n  }\n\n  function try_AbbrevReverseStep()\n  {\n    shiftT(45);                     // '..'\n  }\n\n  function parse_NodeTest()\n  {\n    eventHandler.startNonterminal(\"NodeTest\", e0);\n    switch (l1)\n    {\n    case 82:                        // 'attribute'\n    case 96:                        // 'comment'\n    case 120:                       // 'document-node'\n    case 121:                       // 'element'\n    case 185:                       // 'namespace-node'\n    case 191:                       // 'node'\n    case 216:                       // 'processing-instruction'\n    case 226:                       // 'schema-attribute'\n    case 227:                       // 'schema-element'\n    case 244:                       // 'text'\n      lookahead2W(240);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n                                    // ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' | 'after' |\n                                    // 'and' | 'as' | 'ascending' | 'at' | 'before' | 'by' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'sentences' | 'stable' | 'start' | 'times' | 'to' | 'treat' |\n                                    // 'union' | 'where' | 'with' | 'words' | '|' | '||' | '|}' | '}'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 17490:                     // 'attribute' '('\n    case 17504:                     // 'comment' '('\n    case 17528:                     // 'document-node' '('\n    case 17529:                     // 'element' '('\n    case 17593:                     // 'namespace-node' '('\n    case 17599:                     // 'node' '('\n    case 17624:                     // 'processing-instruction' '('\n    case 17634:                     // 'schema-attribute' '('\n    case 17635:                     // 'schema-element' '('\n    case 17652:                     // 'text' '('\n      parse_KindTest();\n      break;\n    default:\n      parse_NameTest();\n    }\n    eventHandler.endNonterminal(\"NodeTest\", e0);\n  }\n\n  function try_NodeTest()\n  {\n    switch (l1)\n    {\n    case 82:                        // 'attribute'\n    case 96:                        // 'comment'\n    case 120:                       // 'document-node'\n    case 121:                       // 'element'\n    case 185:                       // 'namespace-node'\n    case 191:                       // 'node'\n    case 216:                       // 'processing-instruction'\n    case 226:                       // 'schema-attribute'\n    case 227:                       // 'schema-element'\n    case 244:                       // 'text'\n      lookahead2W(240);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n                                    // ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' | 'after' |\n                                    // 'and' | 'as' | 'ascending' | 'at' | 'before' | 'by' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'sentences' | 'stable' | 'start' | 'times' | 'to' | 'treat' |\n                                    // 'union' | 'where' | 'with' | 'words' | '|' | '||' | '|}' | '}'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 17490:                     // 'attribute' '('\n    case 17504:                     // 'comment' '('\n    case 17528:                     // 'document-node' '('\n    case 17529:                     // 'element' '('\n    case 17593:                     // 'namespace-node' '('\n    case 17599:                     // 'node' '('\n    case 17624:                     // 'processing-instruction' '('\n    case 17634:                     // 'schema-attribute' '('\n    case 17635:                     // 'schema-element' '('\n    case 17652:                     // 'text' '('\n      try_KindTest();\n      break;\n    default:\n      try_NameTest();\n    }\n  }\n\n  function parse_NameTest()\n  {\n    eventHandler.startNonterminal(\"NameTest\", e0);\n    switch (l1)\n    {\n    case 5:                         // Wildcard\n      shift(5);                     // Wildcard\n      break;\n    default:\n      parse_EQName();\n    }\n    eventHandler.endNonterminal(\"NameTest\", e0);\n  }\n\n  function try_NameTest()\n  {\n    switch (l1)\n    {\n    case 5:                         // Wildcard\n      shiftT(5);                    // Wildcard\n      break;\n    default:\n      try_EQName();\n    }\n  }\n\n  function parse_PostfixExpr()\n  {\n    eventHandler.startNonterminal(\"PostfixExpr\", e0);\n    parse_PrimaryExpr();\n    for (;;)\n    {\n      lookahead1W(240);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n                                    // ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' | 'after' |\n                                    // 'and' | 'as' | 'ascending' | 'at' | 'before' | 'by' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'sentences' | 'stable' | 'start' | 'times' | 'to' | 'treat' |\n                                    // 'union' | 'where' | 'with' | 'words' | '|' | '||' | '|}' | '}'\n      if (l1 != 34                  // '('\n       && l1 != 68)                 // '['\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 68:                      // '['\n        whitespace();\n        parse_Predicate();\n        break;\n      default:\n        whitespace();\n        parse_ArgumentList();\n      }\n    }\n    eventHandler.endNonterminal(\"PostfixExpr\", e0);\n  }\n\n  function try_PostfixExpr()\n  {\n    try_PrimaryExpr();\n    for (;;)\n    {\n      lookahead1W(240);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n                                    // ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' | 'after' |\n                                    // 'and' | 'as' | 'ascending' | 'at' | 'before' | 'by' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'sentences' | 'stable' | 'start' | 'times' | 'to' | 'treat' |\n                                    // 'union' | 'where' | 'with' | 'words' | '|' | '||' | '|}' | '}'\n      if (l1 != 34                  // '('\n       && l1 != 68)                 // '['\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 68:                      // '['\n        try_Predicate();\n        break;\n      default:\n        try_ArgumentList();\n      }\n    }\n  }\n\n  function parse_ArgumentList()\n  {\n    eventHandler.startNonterminal(\"ArgumentList\", e0);\n    shift(34);                      // '('\n    lookahead1W(275);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | ')' | '+' | '-' | '.' |\n                                    // '..' | '/' | '//' | '<' | '<!--' | '<?' | '?' | '@' | '[' | 'after' |\n                                    // 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' |\n                                    // 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'first' | 'following' | 'following-sibling' | 'for' |\n                                    // 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' |\n                                    // 'in' | 'index' | 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' |\n                                    // 'is' | 'item' | 'json' | 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' |\n                                    // 'lt' | 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' |\n                                    // 'node' | 'nodes' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'self' | 'sliding' | 'some' | 'stable' | 'start' | 'strict' |\n                                    // 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'try' | 'tumbling' |\n                                    // 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' |\n                                    // 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' | 'xquery' | '{' |\n                                    // '{|'\n    if (l1 != 37)                   // ')'\n    {\n      whitespace();\n      parse_Argument();\n      for (;;)\n      {\n        lookahead1W(101);           // S^WS | '(:' | ')' | ','\n        if (l1 != 41)               // ','\n        {\n          break;\n        }\n        shift(41);                  // ','\n        lookahead1W(270);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n        whitespace();\n        parse_Argument();\n      }\n    }\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"ArgumentList\", e0);\n  }\n\n  function try_ArgumentList()\n  {\n    shiftT(34);                     // '('\n    lookahead1W(275);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | ')' | '+' | '-' | '.' |\n                                    // '..' | '/' | '//' | '<' | '<!--' | '<?' | '?' | '@' | '[' | 'after' |\n                                    // 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' |\n                                    // 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'first' | 'following' | 'following-sibling' | 'for' |\n                                    // 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' |\n                                    // 'in' | 'index' | 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' |\n                                    // 'is' | 'item' | 'json' | 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' |\n                                    // 'lt' | 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' |\n                                    // 'node' | 'nodes' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'self' | 'sliding' | 'some' | 'stable' | 'start' | 'strict' |\n                                    // 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'try' | 'tumbling' |\n                                    // 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' |\n                                    // 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' | 'xquery' | '{' |\n                                    // '{|'\n    if (l1 != 37)                   // ')'\n    {\n      try_Argument();\n      for (;;)\n      {\n        lookahead1W(101);           // S^WS | '(:' | ')' | ','\n        if (l1 != 41)               // ','\n        {\n          break;\n        }\n        shiftT(41);                 // ','\n        lookahead1W(270);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n        try_Argument();\n      }\n    }\n    shiftT(37);                     // ')'\n  }\n\n  function parse_PredicateList()\n  {\n    eventHandler.startNonterminal(\"PredicateList\", e0);\n    for (;;)\n    {\n      lookahead1W(237);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n                                    // ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' | 'after' | 'and' |\n                                    // 'as' | 'ascending' | 'at' | 'before' | 'by' | 'case' | 'cast' | 'castable' |\n                                    // 'collation' | 'contains' | 'count' | 'default' | 'descending' | 'div' | 'else' |\n                                    // 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' | 'gt' | 'idiv' |\n                                    // 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' | 'mod' |\n                                    // 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'sentences' | 'stable' | 'start' | 'times' | 'to' | 'treat' |\n                                    // 'union' | 'where' | 'with' | 'words' | '|' | '||' | '|}' | '}'\n      if (l1 != 68)                 // '['\n      {\n        break;\n      }\n      whitespace();\n      parse_Predicate();\n    }\n    eventHandler.endNonterminal(\"PredicateList\", e0);\n  }\n\n  function try_PredicateList()\n  {\n    for (;;)\n    {\n      lookahead1W(237);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n                                    // ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' | 'after' | 'and' |\n                                    // 'as' | 'ascending' | 'at' | 'before' | 'by' | 'case' | 'cast' | 'castable' |\n                                    // 'collation' | 'contains' | 'count' | 'default' | 'descending' | 'div' | 'else' |\n                                    // 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' | 'gt' | 'idiv' |\n                                    // 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' | 'mod' |\n                                    // 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'sentences' | 'stable' | 'start' | 'times' | 'to' | 'treat' |\n                                    // 'union' | 'where' | 'with' | 'words' | '|' | '||' | '|}' | '}'\n      if (l1 != 68)                 // '['\n      {\n        break;\n      }\n      try_Predicate();\n    }\n  }\n\n  function parse_Predicate()\n  {\n    eventHandler.startNonterminal(\"Predicate\", e0);\n    shift(68);                      // '['\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_Expr();\n    shift(69);                      // ']'\n    eventHandler.endNonterminal(\"Predicate\", e0);\n  }\n\n  function try_Predicate()\n  {\n    shiftT(68);                     // '['\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_Expr();\n    shiftT(69);                     // ']'\n  }\n\n  function parse_Literal()\n  {\n    eventHandler.startNonterminal(\"Literal\", e0);\n    switch (l1)\n    {\n    case 11:                        // StringLiteral\n      shift(11);                    // StringLiteral\n      break;\n    default:\n      parse_NumericLiteral();\n    }\n    eventHandler.endNonterminal(\"Literal\", e0);\n  }\n\n  function try_Literal()\n  {\n    switch (l1)\n    {\n    case 11:                        // StringLiteral\n      shiftT(11);                   // StringLiteral\n      break;\n    default:\n      try_NumericLiteral();\n    }\n  }\n\n  function parse_NumericLiteral()\n  {\n    eventHandler.startNonterminal(\"NumericLiteral\", e0);\n    switch (l1)\n    {\n    case 8:                         // IntegerLiteral\n      shift(8);                     // IntegerLiteral\n      break;\n    case 9:                         // DecimalLiteral\n      shift(9);                     // DecimalLiteral\n      break;\n    default:\n      shift(10);                    // DoubleLiteral\n    }\n    eventHandler.endNonterminal(\"NumericLiteral\", e0);\n  }\n\n  function try_NumericLiteral()\n  {\n    switch (l1)\n    {\n    case 8:                         // IntegerLiteral\n      shiftT(8);                    // IntegerLiteral\n      break;\n    case 9:                         // DecimalLiteral\n      shiftT(9);                    // DecimalLiteral\n      break;\n    default:\n      shiftT(10);                   // DoubleLiteral\n    }\n  }\n\n  function parse_VarRef()\n  {\n    eventHandler.startNonterminal(\"VarRef\", e0);\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    whitespace();\n    parse_VarName();\n    eventHandler.endNonterminal(\"VarRef\", e0);\n  }\n\n  function try_VarRef()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    try_VarName();\n  }\n\n  function parse_VarName()\n  {\n    eventHandler.startNonterminal(\"VarName\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"VarName\", e0);\n  }\n\n  function try_VarName()\n  {\n    try_EQName();\n  }\n\n  function parse_ParenthesizedExpr()\n  {\n    eventHandler.startNonterminal(\"ParenthesizedExpr\", e0);\n    shift(34);                      // '('\n    lookahead1W(268);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | ')' | '+' | '-' | '.' |\n                                    // '..' | '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    if (l1 != 37)                   // ')'\n    {\n      whitespace();\n      parse_Expr();\n    }\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"ParenthesizedExpr\", e0);\n  }\n\n  function try_ParenthesizedExpr()\n  {\n    shiftT(34);                     // '('\n    lookahead1W(268);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | ')' | '+' | '-' | '.' |\n                                    // '..' | '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    if (l1 != 37)                   // ')'\n    {\n      try_Expr();\n    }\n    shiftT(37);                     // ')'\n  }\n\n  function parse_ContextItemExpr()\n  {\n    eventHandler.startNonterminal(\"ContextItemExpr\", e0);\n    shift(44);                      // '.'\n    eventHandler.endNonterminal(\"ContextItemExpr\", e0);\n  }\n\n  function try_ContextItemExpr()\n  {\n    shiftT(44);                     // '.'\n  }\n\n  function parse_OrderedExpr()\n  {\n    eventHandler.startNonterminal(\"OrderedExpr\", e0);\n    shift(202);                     // 'ordered'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shift(276);                     // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_Expr();\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"OrderedExpr\", e0);\n  }\n\n  function try_OrderedExpr()\n  {\n    shiftT(202);                    // 'ordered'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shiftT(276);                    // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_Expr();\n    shiftT(282);                    // '}'\n  }\n\n  function parse_UnorderedExpr()\n  {\n    eventHandler.startNonterminal(\"UnorderedExpr\", e0);\n    shift(256);                     // 'unordered'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shift(276);                     // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_Expr();\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"UnorderedExpr\", e0);\n  }\n\n  function try_UnorderedExpr()\n  {\n    shiftT(256);                    // 'unordered'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shiftT(276);                    // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_Expr();\n    shiftT(282);                    // '}'\n  }\n\n  function parse_FunctionCall()\n  {\n    eventHandler.startNonterminal(\"FunctionCall\", e0);\n    parse_FunctionName();\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    whitespace();\n    parse_ArgumentList();\n    eventHandler.endNonterminal(\"FunctionCall\", e0);\n  }\n\n  function try_FunctionCall()\n  {\n    try_FunctionName();\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    try_ArgumentList();\n  }\n\n  function parse_Argument()\n  {\n    eventHandler.startNonterminal(\"Argument\", e0);\n    switch (l1)\n    {\n    case 64:                        // '?'\n      parse_ArgumentPlaceholder();\n      break;\n    default:\n      parse_ExprSingle();\n    }\n    eventHandler.endNonterminal(\"Argument\", e0);\n  }\n\n  function try_Argument()\n  {\n    switch (l1)\n    {\n    case 64:                        // '?'\n      try_ArgumentPlaceholder();\n      break;\n    default:\n      try_ExprSingle();\n    }\n  }\n\n  function parse_ArgumentPlaceholder()\n  {\n    eventHandler.startNonterminal(\"ArgumentPlaceholder\", e0);\n    shift(64);                      // '?'\n    eventHandler.endNonterminal(\"ArgumentPlaceholder\", e0);\n  }\n\n  function try_ArgumentPlaceholder()\n  {\n    shiftT(64);                     // '?'\n  }\n\n  function parse_Constructor()\n  {\n    eventHandler.startNonterminal(\"Constructor\", e0);\n    switch (l1)\n    {\n    case 54:                        // '<'\n    case 55:                        // '<!--'\n    case 59:                        // '<?'\n      parse_DirectConstructor();\n      break;\n    default:\n      parse_ComputedConstructor();\n    }\n    eventHandler.endNonterminal(\"Constructor\", e0);\n  }\n\n  function try_Constructor()\n  {\n    switch (l1)\n    {\n    case 54:                        // '<'\n    case 55:                        // '<!--'\n    case 59:                        // '<?'\n      try_DirectConstructor();\n      break;\n    default:\n      try_ComputedConstructor();\n    }\n  }\n\n  function parse_DirectConstructor()\n  {\n    eventHandler.startNonterminal(\"DirectConstructor\", e0);\n    switch (l1)\n    {\n    case 54:                        // '<'\n      parse_DirElemConstructor();\n      break;\n    case 55:                        // '<!--'\n      parse_DirCommentConstructor();\n      break;\n    default:\n      parse_DirPIConstructor();\n    }\n    eventHandler.endNonterminal(\"DirectConstructor\", e0);\n  }\n\n  function try_DirectConstructor()\n  {\n    switch (l1)\n    {\n    case 54:                        // '<'\n      try_DirElemConstructor();\n      break;\n    case 55:                        // '<!--'\n      try_DirCommentConstructor();\n      break;\n    default:\n      try_DirPIConstructor();\n    }\n  }\n\n  function parse_DirElemConstructor()\n  {\n    eventHandler.startNonterminal(\"DirElemConstructor\", e0);\n    shift(54);                      // '<'\n    lookahead1(4);                  // QName\n    shift(20);                      // QName\n    parse_DirAttributeList();\n    switch (l1)\n    {\n    case 48:                        // '/>'\n      shift(48);                    // '/>'\n      break;\n    default:\n      shift(61);                    // '>'\n      for (;;)\n      {\n        lookahead1(174);            // CDataSection | PredefinedEntityRef | ElementContentChar | CharRef | '<' |\n                                    // '<!--' | '</' | '<?' | '{' | '{{' | '}}'\n        if (l1 == 56)               // '</'\n        {\n          break;\n        }\n        parse_DirElemContent();\n      }\n      shift(56);                    // '</'\n      lookahead1(4);                // QName\n      shift(20);                    // QName\n      lookahead1(12);               // S | '>'\n      if (l1 == 21)                 // S\n      {\n        shift(21);                  // S\n      }\n      lookahead1(8);                // '>'\n      shift(61);                    // '>'\n    }\n    eventHandler.endNonterminal(\"DirElemConstructor\", e0);\n  }\n\n  function try_DirElemConstructor()\n  {\n    shiftT(54);                     // '<'\n    lookahead1(4);                  // QName\n    shiftT(20);                     // QName\n    try_DirAttributeList();\n    switch (l1)\n    {\n    case 48:                        // '/>'\n      shiftT(48);                   // '/>'\n      break;\n    default:\n      shiftT(61);                   // '>'\n      for (;;)\n      {\n        lookahead1(174);            // CDataSection | PredefinedEntityRef | ElementContentChar | CharRef | '<' |\n                                    // '<!--' | '</' | '<?' | '{' | '{{' | '}}'\n        if (l1 == 56)               // '</'\n        {\n          break;\n        }\n        try_DirElemContent();\n      }\n      shiftT(56);                   // '</'\n      lookahead1(4);                // QName\n      shiftT(20);                   // QName\n      lookahead1(12);               // S | '>'\n      if (l1 == 21)                 // S\n      {\n        shiftT(21);                 // S\n      }\n      lookahead1(8);                // '>'\n      shiftT(61);                   // '>'\n    }\n  }\n\n  function parse_DirAttributeList()\n  {\n    eventHandler.startNonterminal(\"DirAttributeList\", e0);\n    for (;;)\n    {\n      lookahead1(19);               // S | '/>' | '>'\n      if (l1 != 21)                 // S\n      {\n        break;\n      }\n      shift(21);                    // S\n      lookahead1(91);               // QName | S | '/>' | '>'\n      if (l1 == 20)                 // QName\n      {\n        shift(20);                  // QName\n        lookahead1(11);             // S | '='\n        if (l1 == 21)               // S\n        {\n          shift(21);                // S\n        }\n        lookahead1(7);              // '='\n        shift(60);                  // '='\n        lookahead1(18);             // S | '\"' | \"'\"\n        if (l1 == 21)               // S\n        {\n          shift(21);                // S\n        }\n        parse_DirAttributeValue();\n      }\n    }\n    eventHandler.endNonterminal(\"DirAttributeList\", e0);\n  }\n\n  function try_DirAttributeList()\n  {\n    for (;;)\n    {\n      lookahead1(19);               // S | '/>' | '>'\n      if (l1 != 21)                 // S\n      {\n        break;\n      }\n      shiftT(21);                   // S\n      lookahead1(91);               // QName | S | '/>' | '>'\n      if (l1 == 20)                 // QName\n      {\n        shiftT(20);                 // QName\n        lookahead1(11);             // S | '='\n        if (l1 == 21)               // S\n        {\n          shiftT(21);               // S\n        }\n        lookahead1(7);              // '='\n        shiftT(60);                 // '='\n        lookahead1(18);             // S | '\"' | \"'\"\n        if (l1 == 21)               // S\n        {\n          shiftT(21);               // S\n        }\n        try_DirAttributeValue();\n      }\n    }\n  }\n\n  function parse_DirAttributeValue()\n  {\n    eventHandler.startNonterminal(\"DirAttributeValue\", e0);\n    lookahead1(14);                 // '\"' | \"'\"\n    switch (l1)\n    {\n    case 28:                        // '\"'\n      shift(28);                    // '\"'\n      for (;;)\n      {\n        lookahead1(167);            // PredefinedEntityRef | EscapeQuot | QuotAttrContentChar | CharRef | '\"' | '{' |\n                                    // '{{' | '}}'\n        if (l1 == 28)               // '\"'\n        {\n          break;\n        }\n        switch (l1)\n        {\n        case 13:                    // EscapeQuot\n          shift(13);                // EscapeQuot\n          break;\n        default:\n          parse_QuotAttrValueContent();\n        }\n      }\n      shift(28);                    // '\"'\n      break;\n    default:\n      shift(33);                    // \"'\"\n      for (;;)\n      {\n        lookahead1(168);            // PredefinedEntityRef | EscapeApos | AposAttrContentChar | CharRef | \"'\" | '{' |\n                                    // '{{' | '}}'\n        if (l1 == 33)               // \"'\"\n        {\n          break;\n        }\n        switch (l1)\n        {\n        case 14:                    // EscapeApos\n          shift(14);                // EscapeApos\n          break;\n        default:\n          parse_AposAttrValueContent();\n        }\n      }\n      shift(33);                    // \"'\"\n    }\n    eventHandler.endNonterminal(\"DirAttributeValue\", e0);\n  }\n\n  function try_DirAttributeValue()\n  {\n    lookahead1(14);                 // '\"' | \"'\"\n    switch (l1)\n    {\n    case 28:                        // '\"'\n      shiftT(28);                   // '\"'\n      for (;;)\n      {\n        lookahead1(167);            // PredefinedEntityRef | EscapeQuot | QuotAttrContentChar | CharRef | '\"' | '{' |\n                                    // '{{' | '}}'\n        if (l1 == 28)               // '\"'\n        {\n          break;\n        }\n        switch (l1)\n        {\n        case 13:                    // EscapeQuot\n          shiftT(13);               // EscapeQuot\n          break;\n        default:\n          try_QuotAttrValueContent();\n        }\n      }\n      shiftT(28);                   // '\"'\n      break;\n    default:\n      shiftT(33);                   // \"'\"\n      for (;;)\n      {\n        lookahead1(168);            // PredefinedEntityRef | EscapeApos | AposAttrContentChar | CharRef | \"'\" | '{' |\n                                    // '{{' | '}}'\n        if (l1 == 33)               // \"'\"\n        {\n          break;\n        }\n        switch (l1)\n        {\n        case 14:                    // EscapeApos\n          shiftT(14);               // EscapeApos\n          break;\n        default:\n          try_AposAttrValueContent();\n        }\n      }\n      shiftT(33);                   // \"'\"\n    }\n  }\n\n  function parse_QuotAttrValueContent()\n  {\n    eventHandler.startNonterminal(\"QuotAttrValueContent\", e0);\n    switch (l1)\n    {\n    case 16:                        // QuotAttrContentChar\n      shift(16);                    // QuotAttrContentChar\n      break;\n    default:\n      parse_CommonContent();\n    }\n    eventHandler.endNonterminal(\"QuotAttrValueContent\", e0);\n  }\n\n  function try_QuotAttrValueContent()\n  {\n    switch (l1)\n    {\n    case 16:                        // QuotAttrContentChar\n      shiftT(16);                   // QuotAttrContentChar\n      break;\n    default:\n      try_CommonContent();\n    }\n  }\n\n  function parse_AposAttrValueContent()\n  {\n    eventHandler.startNonterminal(\"AposAttrValueContent\", e0);\n    switch (l1)\n    {\n    case 17:                        // AposAttrContentChar\n      shift(17);                    // AposAttrContentChar\n      break;\n    default:\n      parse_CommonContent();\n    }\n    eventHandler.endNonterminal(\"AposAttrValueContent\", e0);\n  }\n\n  function try_AposAttrValueContent()\n  {\n    switch (l1)\n    {\n    case 17:                        // AposAttrContentChar\n      shiftT(17);                   // AposAttrContentChar\n      break;\n    default:\n      try_CommonContent();\n    }\n  }\n\n  function parse_DirElemContent()\n  {\n    eventHandler.startNonterminal(\"DirElemContent\", e0);\n    switch (l1)\n    {\n    case 54:                        // '<'\n    case 55:                        // '<!--'\n    case 59:                        // '<?'\n      parse_DirectConstructor();\n      break;\n    case 4:                         // CDataSection\n      shift(4);                     // CDataSection\n      break;\n    case 15:                        // ElementContentChar\n      shift(15);                    // ElementContentChar\n      break;\n    default:\n      parse_CommonContent();\n    }\n    eventHandler.endNonterminal(\"DirElemContent\", e0);\n  }\n\n  function try_DirElemContent()\n  {\n    switch (l1)\n    {\n    case 54:                        // '<'\n    case 55:                        // '<!--'\n    case 59:                        // '<?'\n      try_DirectConstructor();\n      break;\n    case 4:                         // CDataSection\n      shiftT(4);                    // CDataSection\n      break;\n    case 15:                        // ElementContentChar\n      shiftT(15);                   // ElementContentChar\n      break;\n    default:\n      try_CommonContent();\n    }\n  }\n\n  function parse_DirCommentConstructor()\n  {\n    eventHandler.startNonterminal(\"DirCommentConstructor\", e0);\n    shift(55);                      // '<!--'\n    lookahead1(1);                  // DirCommentContents\n    shift(2);                       // DirCommentContents\n    lookahead1(6);                  // '-->'\n    shift(43);                      // '-->'\n    eventHandler.endNonterminal(\"DirCommentConstructor\", e0);\n  }\n\n  function try_DirCommentConstructor()\n  {\n    shiftT(55);                     // '<!--'\n    lookahead1(1);                  // DirCommentContents\n    shiftT(2);                      // DirCommentContents\n    lookahead1(6);                  // '-->'\n    shiftT(43);                     // '-->'\n  }\n\n  function parse_DirPIConstructor()\n  {\n    eventHandler.startNonterminal(\"DirPIConstructor\", e0);\n    shift(59);                      // '<?'\n    lookahead1(3);                  // PITarget\n    shift(18);                      // PITarget\n    lookahead1(13);                 // S | '?>'\n    if (l1 == 21)                   // S\n    {\n      shift(21);                    // S\n      lookahead1(2);                // DirPIContents\n      shift(3);                     // DirPIContents\n    }\n    lookahead1(9);                  // '?>'\n    shift(65);                      // '?>'\n    eventHandler.endNonterminal(\"DirPIConstructor\", e0);\n  }\n\n  function try_DirPIConstructor()\n  {\n    shiftT(59);                     // '<?'\n    lookahead1(3);                  // PITarget\n    shiftT(18);                     // PITarget\n    lookahead1(13);                 // S | '?>'\n    if (l1 == 21)                   // S\n    {\n      shiftT(21);                   // S\n      lookahead1(2);                // DirPIContents\n      shiftT(3);                    // DirPIContents\n    }\n    lookahead1(9);                  // '?>'\n    shiftT(65);                     // '?>'\n  }\n\n  function parse_ComputedConstructor()\n  {\n    eventHandler.startNonterminal(\"ComputedConstructor\", e0);\n    switch (l1)\n    {\n    case 119:                       // 'document'\n      parse_CompDocConstructor();\n      break;\n    case 121:                       // 'element'\n      parse_CompElemConstructor();\n      break;\n    case 82:                        // 'attribute'\n      parse_CompAttrConstructor();\n      break;\n    case 184:                       // 'namespace'\n      parse_CompNamespaceConstructor();\n      break;\n    case 244:                       // 'text'\n      parse_CompTextConstructor();\n      break;\n    case 96:                        // 'comment'\n      parse_CompCommentConstructor();\n      break;\n    default:\n      parse_CompPIConstructor();\n    }\n    eventHandler.endNonterminal(\"ComputedConstructor\", e0);\n  }\n\n  function try_ComputedConstructor()\n  {\n    switch (l1)\n    {\n    case 119:                       // 'document'\n      try_CompDocConstructor();\n      break;\n    case 121:                       // 'element'\n      try_CompElemConstructor();\n      break;\n    case 82:                        // 'attribute'\n      try_CompAttrConstructor();\n      break;\n    case 184:                       // 'namespace'\n      try_CompNamespaceConstructor();\n      break;\n    case 244:                       // 'text'\n      try_CompTextConstructor();\n      break;\n    case 96:                        // 'comment'\n      try_CompCommentConstructor();\n      break;\n    default:\n      try_CompPIConstructor();\n    }\n  }\n\n  function parse_CompElemConstructor()\n  {\n    eventHandler.startNonterminal(\"CompElemConstructor\", e0);\n    shift(121);                     // 'element'\n    lookahead1W(257);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{'\n    switch (l1)\n    {\n    case 276:                       // '{'\n      shift(276);                   // '{'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      whitespace();\n      parse_Expr();\n      shift(282);                   // '}'\n      break;\n    default:\n      whitespace();\n      parse_EQName();\n    }\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shift(276);                     // '{'\n    lookahead1W(276);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | ';' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|' | '}'\n    if (l1 != 282)                  // '}'\n    {\n      whitespace();\n      parse_ContentExpr();\n    }\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"CompElemConstructor\", e0);\n  }\n\n  function try_CompElemConstructor()\n  {\n    shiftT(121);                    // 'element'\n    lookahead1W(257);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{'\n    switch (l1)\n    {\n    case 276:                       // '{'\n      shiftT(276);                  // '{'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      try_Expr();\n      shiftT(282);                  // '}'\n      break;\n    default:\n      try_EQName();\n    }\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shiftT(276);                    // '{'\n    lookahead1W(276);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | ';' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|' | '}'\n    if (l1 != 282)                  // '}'\n    {\n      try_ContentExpr();\n    }\n    shiftT(282);                    // '}'\n  }\n\n  function parse_CompNamespaceConstructor()\n  {\n    eventHandler.startNonterminal(\"CompNamespaceConstructor\", e0);\n    shift(184);                     // 'namespace'\n    lookahead1W(250);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' |\n                                    // 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'last' | 'lax' | 'le' | 'let' |\n                                    // 'loop' | 'lt' | 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' |\n                                    // 'ne' | 'node' | 'nodes' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'self' | 'sliding' | 'some' | 'stable' | 'start' | 'strict' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' |\n                                    // 'union' | 'unordered' | 'updating' | 'validate' | 'value' | 'variable' |\n                                    // 'version' | 'where' | 'while' | 'with' | 'xquery' | '{'\n    switch (l1)\n    {\n    case 276:                       // '{'\n      shift(276);                   // '{'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      whitespace();\n      parse_PrefixExpr();\n      shift(282);                   // '}'\n      break;\n    default:\n      whitespace();\n      parse_Prefix();\n    }\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shift(276);                     // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_URIExpr();\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"CompNamespaceConstructor\", e0);\n  }\n\n  function try_CompNamespaceConstructor()\n  {\n    shiftT(184);                    // 'namespace'\n    lookahead1W(250);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' |\n                                    // 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'last' | 'lax' | 'le' | 'let' |\n                                    // 'loop' | 'lt' | 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' |\n                                    // 'ne' | 'node' | 'nodes' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'self' | 'sliding' | 'some' | 'stable' | 'start' | 'strict' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' |\n                                    // 'union' | 'unordered' | 'updating' | 'validate' | 'value' | 'variable' |\n                                    // 'version' | 'where' | 'while' | 'with' | 'xquery' | '{'\n    switch (l1)\n    {\n    case 276:                       // '{'\n      shiftT(276);                  // '{'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      try_PrefixExpr();\n      shiftT(282);                  // '}'\n      break;\n    default:\n      try_Prefix();\n    }\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shiftT(276);                    // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_URIExpr();\n    shiftT(282);                    // '}'\n  }\n\n  function parse_Prefix()\n  {\n    eventHandler.startNonterminal(\"Prefix\", e0);\n    parse_NCName();\n    eventHandler.endNonterminal(\"Prefix\", e0);\n  }\n\n  function try_Prefix()\n  {\n    try_NCName();\n  }\n\n  function parse_PrefixExpr()\n  {\n    eventHandler.startNonterminal(\"PrefixExpr\", e0);\n    parse_Expr();\n    eventHandler.endNonterminal(\"PrefixExpr\", e0);\n  }\n\n  function try_PrefixExpr()\n  {\n    try_Expr();\n  }\n\n  function parse_URIExpr()\n  {\n    eventHandler.startNonterminal(\"URIExpr\", e0);\n    parse_Expr();\n    eventHandler.endNonterminal(\"URIExpr\", e0);\n  }\n\n  function try_URIExpr()\n  {\n    try_Expr();\n  }\n\n  function parse_FunctionItemExpr()\n  {\n    eventHandler.startNonterminal(\"FunctionItemExpr\", e0);\n    switch (l1)\n    {\n    case 145:                       // 'function'\n      lookahead2W(92);              // S^WS | '#' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 32:                        // '%'\n    case 17553:                     // 'function' '('\n      parse_InlineFunctionExpr();\n      break;\n    default:\n      parse_NamedFunctionRef();\n    }\n    eventHandler.endNonterminal(\"FunctionItemExpr\", e0);\n  }\n\n  function try_FunctionItemExpr()\n  {\n    switch (l1)\n    {\n    case 145:                       // 'function'\n      lookahead2W(92);              // S^WS | '#' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 32:                        // '%'\n    case 17553:                     // 'function' '('\n      try_InlineFunctionExpr();\n      break;\n    default:\n      try_NamedFunctionRef();\n    }\n  }\n\n  function parse_NamedFunctionRef()\n  {\n    eventHandler.startNonterminal(\"NamedFunctionRef\", e0);\n    parse_EQName();\n    lookahead1W(20);                // S^WS | '#' | '(:'\n    shift(29);                      // '#'\n    lookahead1W(16);                // IntegerLiteral | S^WS | '(:'\n    shift(8);                       // IntegerLiteral\n    eventHandler.endNonterminal(\"NamedFunctionRef\", e0);\n  }\n\n  function try_NamedFunctionRef()\n  {\n    try_EQName();\n    lookahead1W(20);                // S^WS | '#' | '(:'\n    shiftT(29);                     // '#'\n    lookahead1W(16);                // IntegerLiteral | S^WS | '(:'\n    shiftT(8);                      // IntegerLiteral\n  }\n\n  function parse_InlineFunctionExpr()\n  {\n    eventHandler.startNonterminal(\"InlineFunctionExpr\", e0);\n    for (;;)\n    {\n      lookahead1W(97);              // S^WS | '%' | '(:' | 'function'\n      if (l1 != 32)                 // '%'\n      {\n        break;\n      }\n      whitespace();\n      parse_Annotation();\n    }\n    shift(145);                     // 'function'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(94);                // S^WS | '$' | '(:' | ')'\n    if (l1 == 31)                   // '$'\n    {\n      whitespace();\n      parse_ParamList();\n    }\n    shift(37);                      // ')'\n    lookahead1W(111);               // S^WS | '(:' | 'as' | '{'\n    if (l1 == 79)                   // 'as'\n    {\n      shift(79);                    // 'as'\n      lookahead1W(259);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n      whitespace();\n      parse_SequenceType();\n    }\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    whitespace();\n    parse_FunctionBody();\n    eventHandler.endNonterminal(\"InlineFunctionExpr\", e0);\n  }\n\n  function try_InlineFunctionExpr()\n  {\n    for (;;)\n    {\n      lookahead1W(97);              // S^WS | '%' | '(:' | 'function'\n      if (l1 != 32)                 // '%'\n      {\n        break;\n      }\n      try_Annotation();\n    }\n    shiftT(145);                    // 'function'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(94);                // S^WS | '$' | '(:' | ')'\n    if (l1 == 31)                   // '$'\n    {\n      try_ParamList();\n    }\n    shiftT(37);                     // ')'\n    lookahead1W(111);               // S^WS | '(:' | 'as' | '{'\n    if (l1 == 79)                   // 'as'\n    {\n      shiftT(79);                   // 'as'\n      lookahead1W(259);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n      try_SequenceType();\n    }\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    try_FunctionBody();\n  }\n\n  function parse_SingleType()\n  {\n    eventHandler.startNonterminal(\"SingleType\", e0);\n    parse_SimpleTypeName();\n    lookahead1W(226);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n                                    // '<=' | '=' | '>' | '>=' | '>>' | '?' | ']' | 'after' | 'and' | 'as' |\n                                    // 'ascending' | 'at' | 'before' | 'case' | 'castable' | 'collation' | 'contains' |\n                                    // 'count' | 'default' | 'descending' | 'div' | 'else' | 'empty' | 'end' | 'eq' |\n                                    // 'except' | 'for' | 'ge' | 'group' | 'gt' | 'idiv' | 'instance' | 'intersect' |\n                                    // 'into' | 'is' | 'le' | 'let' | 'lt' | 'mod' | 'modify' | 'ne' | 'only' | 'or' |\n                                    // 'order' | 'paragraphs' | 'return' | 'satisfies' | 'sentences' | 'stable' |\n                                    // 'start' | 'times' | 'to' | 'treat' | 'union' | 'where' | 'with' | 'words' | '|' |\n                                    // '||' | '|}' | '}'\n    if (l1 == 64)                   // '?'\n    {\n      shift(64);                    // '?'\n    }\n    eventHandler.endNonterminal(\"SingleType\", e0);\n  }\n\n  function try_SingleType()\n  {\n    try_SimpleTypeName();\n    lookahead1W(226);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n                                    // '<=' | '=' | '>' | '>=' | '>>' | '?' | ']' | 'after' | 'and' | 'as' |\n                                    // 'ascending' | 'at' | 'before' | 'case' | 'castable' | 'collation' | 'contains' |\n                                    // 'count' | 'default' | 'descending' | 'div' | 'else' | 'empty' | 'end' | 'eq' |\n                                    // 'except' | 'for' | 'ge' | 'group' | 'gt' | 'idiv' | 'instance' | 'intersect' |\n                                    // 'into' | 'is' | 'le' | 'let' | 'lt' | 'mod' | 'modify' | 'ne' | 'only' | 'or' |\n                                    // 'order' | 'paragraphs' | 'return' | 'satisfies' | 'sentences' | 'stable' |\n                                    // 'start' | 'times' | 'to' | 'treat' | 'union' | 'where' | 'with' | 'words' | '|' |\n                                    // '||' | '|}' | '}'\n    if (l1 == 64)                   // '?'\n    {\n      shiftT(64);                   // '?'\n    }\n  }\n\n  function parse_TypeDeclaration()\n  {\n    eventHandler.startNonterminal(\"TypeDeclaration\", e0);\n    shift(79);                      // 'as'\n    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    whitespace();\n    parse_SequenceType();\n    eventHandler.endNonterminal(\"TypeDeclaration\", e0);\n  }\n\n  function try_TypeDeclaration()\n  {\n    shiftT(79);                     // 'as'\n    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    try_SequenceType();\n  }\n\n  function parse_SequenceType()\n  {\n    eventHandler.startNonterminal(\"SequenceType\", e0);\n    switch (l1)\n    {\n    case 124:                       // 'empty-sequence'\n      lookahead2W(242);             // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n                                    // ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '?' | ']' | 'after' |\n                                    // 'allowing' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'case' |\n                                    // 'collation' | 'contains' | 'count' | 'default' | 'descending' | 'div' | 'else' |\n                                    // 'empty' | 'end' | 'eq' | 'except' | 'external' | 'for' | 'ge' | 'group' | 'gt' |\n                                    // 'idiv' | 'in' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'score' | 'sentences' | 'stable' | 'start' | 'times' | 'to' |\n                                    // 'union' | 'where' | 'with' | 'words' | '{' | '|' | '||' | '|}' | '}'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 17532:                     // 'empty-sequence' '('\n      shift(124);                   // 'empty-sequence'\n      lookahead1W(22);              // S^WS | '(' | '(:'\n      shift(34);                    // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shift(37);                    // ')'\n      break;\n    default:\n      parse_ItemType();\n      lookahead1W(238);             // S^WS | EOF | '!=' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' | ';' |\n                                    // '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '?' | ']' | 'after' | 'allowing' |\n                                    // 'and' | 'as' | 'ascending' | 'at' | 'before' | 'case' | 'collation' |\n                                    // 'contains' | 'count' | 'default' | 'descending' | 'div' | 'else' | 'empty' |\n                                    // 'end' | 'eq' | 'except' | 'external' | 'for' | 'ge' | 'group' | 'gt' | 'idiv' |\n                                    // 'in' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' | 'mod' |\n                                    // 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'score' | 'sentences' | 'stable' | 'start' | 'times' | 'to' |\n                                    // 'union' | 'where' | 'with' | 'words' | '{' | '|' | '||' | '|}' | '}'\n      switch (l1)\n      {\n      case 39:                      // '*'\n      case 40:                      // '+'\n      case 64:                      // '?'\n        whitespace();\n        parse_OccurrenceIndicator();\n        break;\n      default:\n        break;\n      }\n    }\n    eventHandler.endNonterminal(\"SequenceType\", e0);\n  }\n\n  function try_SequenceType()\n  {\n    switch (l1)\n    {\n    case 124:                       // 'empty-sequence'\n      lookahead2W(242);             // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n                                    // ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '?' | ']' | 'after' |\n                                    // 'allowing' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'case' |\n                                    // 'collation' | 'contains' | 'count' | 'default' | 'descending' | 'div' | 'else' |\n                                    // 'empty' | 'end' | 'eq' | 'except' | 'external' | 'for' | 'ge' | 'group' | 'gt' |\n                                    // 'idiv' | 'in' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'score' | 'sentences' | 'stable' | 'start' | 'times' | 'to' |\n                                    // 'union' | 'where' | 'with' | 'words' | '{' | '|' | '||' | '|}' | '}'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 17532:                     // 'empty-sequence' '('\n      shiftT(124);                  // 'empty-sequence'\n      lookahead1W(22);              // S^WS | '(' | '(:'\n      shiftT(34);                   // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shiftT(37);                   // ')'\n      break;\n    default:\n      try_ItemType();\n      lookahead1W(238);             // S^WS | EOF | '!=' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' | ';' |\n                                    // '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '?' | ']' | 'after' | 'allowing' |\n                                    // 'and' | 'as' | 'ascending' | 'at' | 'before' | 'case' | 'collation' |\n                                    // 'contains' | 'count' | 'default' | 'descending' | 'div' | 'else' | 'empty' |\n                                    // 'end' | 'eq' | 'except' | 'external' | 'for' | 'ge' | 'group' | 'gt' | 'idiv' |\n                                    // 'in' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' | 'mod' |\n                                    // 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'score' | 'sentences' | 'stable' | 'start' | 'times' | 'to' |\n                                    // 'union' | 'where' | 'with' | 'words' | '{' | '|' | '||' | '|}' | '}'\n      switch (l1)\n      {\n      case 39:                      // '*'\n      case 40:                      // '+'\n      case 64:                      // '?'\n        try_OccurrenceIndicator();\n        break;\n      default:\n        break;\n      }\n    }\n  }\n\n  function parse_OccurrenceIndicator()\n  {\n    eventHandler.startNonterminal(\"OccurrenceIndicator\", e0);\n    switch (l1)\n    {\n    case 64:                        // '?'\n      shift(64);                    // '?'\n      break;\n    case 39:                        // '*'\n      shift(39);                    // '*'\n      break;\n    default:\n      shift(40);                    // '+'\n    }\n    eventHandler.endNonterminal(\"OccurrenceIndicator\", e0);\n  }\n\n  function try_OccurrenceIndicator()\n  {\n    switch (l1)\n    {\n    case 64:                        // '?'\n      shiftT(64);                   // '?'\n      break;\n    case 39:                        // '*'\n      shiftT(39);                   // '*'\n      break;\n    default:\n      shiftT(40);                   // '+'\n    }\n  }\n\n  function parse_ItemType()\n  {\n    eventHandler.startNonterminal(\"ItemType\", e0);\n    switch (l1)\n    {\n    case 78:                        // 'array'\n    case 82:                        // 'attribute'\n    case 96:                        // 'comment'\n    case 120:                       // 'document-node'\n    case 121:                       // 'element'\n    case 145:                       // 'function'\n    case 165:                       // 'item'\n    case 167:                       // 'json-item'\n    case 185:                       // 'namespace-node'\n    case 191:                       // 'node'\n    case 194:                       // 'object'\n    case 216:                       // 'processing-instruction'\n    case 226:                       // 'schema-attribute'\n    case 227:                       // 'schema-element'\n    case 242:                       // 'structured-item'\n    case 244:                       // 'text'\n      lookahead2W(242);             // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n                                    // ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '?' | ']' | 'after' |\n                                    // 'allowing' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'case' |\n                                    // 'collation' | 'contains' | 'count' | 'default' | 'descending' | 'div' | 'else' |\n                                    // 'empty' | 'end' | 'eq' | 'except' | 'external' | 'for' | 'ge' | 'group' | 'gt' |\n                                    // 'idiv' | 'in' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'score' | 'sentences' | 'stable' | 'start' | 'times' | 'to' |\n                                    // 'union' | 'where' | 'with' | 'words' | '{' | '|' | '||' | '|}' | '}'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 17490:                     // 'attribute' '('\n    case 17504:                     // 'comment' '('\n    case 17528:                     // 'document-node' '('\n    case 17529:                     // 'element' '('\n    case 17593:                     // 'namespace-node' '('\n    case 17599:                     // 'node' '('\n    case 17624:                     // 'processing-instruction' '('\n    case 17634:                     // 'schema-attribute' '('\n    case 17635:                     // 'schema-element' '('\n    case 17652:                     // 'text' '('\n      parse_KindTest();\n      break;\n    case 17573:                     // 'item' '('\n      shift(165);                   // 'item'\n      lookahead1W(22);              // S^WS | '(' | '(:'\n      shift(34);                    // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shift(37);                    // ')'\n      break;\n    case 32:                        // '%'\n    case 17553:                     // 'function' '('\n      parse_FunctionTest();\n      break;\n    case 34:                        // '('\n      parse_ParenthesizedItemType();\n      break;\n    case 17486:                     // 'array' '('\n    case 17575:                     // 'json-item' '('\n    case 17602:                     // 'object' '('\n      parse_JSONTest();\n      break;\n    case 17650:                     // 'structured-item' '('\n      parse_StructuredItemTest();\n      break;\n    default:\n      parse_AtomicOrUnionType();\n    }\n    eventHandler.endNonterminal(\"ItemType\", e0);\n  }\n\n  function try_ItemType()\n  {\n    switch (l1)\n    {\n    case 78:                        // 'array'\n    case 82:                        // 'attribute'\n    case 96:                        // 'comment'\n    case 120:                       // 'document-node'\n    case 121:                       // 'element'\n    case 145:                       // 'function'\n    case 165:                       // 'item'\n    case 167:                       // 'json-item'\n    case 185:                       // 'namespace-node'\n    case 191:                       // 'node'\n    case 194:                       // 'object'\n    case 216:                       // 'processing-instruction'\n    case 226:                       // 'schema-attribute'\n    case 227:                       // 'schema-element'\n    case 242:                       // 'structured-item'\n    case 244:                       // 'text'\n      lookahead2W(242);             // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n                                    // ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '?' | ']' | 'after' |\n                                    // 'allowing' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'case' |\n                                    // 'collation' | 'contains' | 'count' | 'default' | 'descending' | 'div' | 'else' |\n                                    // 'empty' | 'end' | 'eq' | 'except' | 'external' | 'for' | 'ge' | 'group' | 'gt' |\n                                    // 'idiv' | 'in' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'paragraphs' | 'return' |\n                                    // 'satisfies' | 'score' | 'sentences' | 'stable' | 'start' | 'times' | 'to' |\n                                    // 'union' | 'where' | 'with' | 'words' | '{' | '|' | '||' | '|}' | '}'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 17490:                     // 'attribute' '('\n    case 17504:                     // 'comment' '('\n    case 17528:                     // 'document-node' '('\n    case 17529:                     // 'element' '('\n    case 17593:                     // 'namespace-node' '('\n    case 17599:                     // 'node' '('\n    case 17624:                     // 'processing-instruction' '('\n    case 17634:                     // 'schema-attribute' '('\n    case 17635:                     // 'schema-element' '('\n    case 17652:                     // 'text' '('\n      try_KindTest();\n      break;\n    case 17573:                     // 'item' '('\n      shiftT(165);                  // 'item'\n      lookahead1W(22);              // S^WS | '(' | '(:'\n      shiftT(34);                   // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shiftT(37);                   // ')'\n      break;\n    case 32:                        // '%'\n    case 17553:                     // 'function' '('\n      try_FunctionTest();\n      break;\n    case 34:                        // '('\n      try_ParenthesizedItemType();\n      break;\n    case 17486:                     // 'array' '('\n    case 17575:                     // 'json-item' '('\n    case 17602:                     // 'object' '('\n      try_JSONTest();\n      break;\n    case 17650:                     // 'structured-item' '('\n      try_StructuredItemTest();\n      break;\n    default:\n      try_AtomicOrUnionType();\n    }\n  }\n\n  function parse_JSONTest()\n  {\n    eventHandler.startNonterminal(\"JSONTest\", e0);\n    switch (l1)\n    {\n    case 167:                       // 'json-item'\n      parse_JSONItemTest();\n      break;\n    case 194:                       // 'object'\n      parse_JSONObjectTest();\n      break;\n    default:\n      parse_JSONArrayTest();\n    }\n    eventHandler.endNonterminal(\"JSONTest\", e0);\n  }\n\n  function try_JSONTest()\n  {\n    switch (l1)\n    {\n    case 167:                       // 'json-item'\n      try_JSONItemTest();\n      break;\n    case 194:                       // 'object'\n      try_JSONObjectTest();\n      break;\n    default:\n      try_JSONArrayTest();\n    }\n  }\n\n  function parse_StructuredItemTest()\n  {\n    eventHandler.startNonterminal(\"StructuredItemTest\", e0);\n    shift(242);                     // 'structured-item'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"StructuredItemTest\", e0);\n  }\n\n  function try_StructuredItemTest()\n  {\n    shiftT(242);                    // 'structured-item'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_JSONItemTest()\n  {\n    eventHandler.startNonterminal(\"JSONItemTest\", e0);\n    shift(167);                     // 'json-item'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"JSONItemTest\", e0);\n  }\n\n  function try_JSONItemTest()\n  {\n    shiftT(167);                    // 'json-item'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_JSONObjectTest()\n  {\n    eventHandler.startNonterminal(\"JSONObjectTest\", e0);\n    shift(194);                     // 'object'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"JSONObjectTest\", e0);\n  }\n\n  function try_JSONObjectTest()\n  {\n    shiftT(194);                    // 'object'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_JSONArrayTest()\n  {\n    eventHandler.startNonterminal(\"JSONArrayTest\", e0);\n    shift(78);                      // 'array'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"JSONArrayTest\", e0);\n  }\n\n  function try_JSONArrayTest()\n  {\n    shiftT(78);                     // 'array'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_AtomicOrUnionType()\n  {\n    eventHandler.startNonterminal(\"AtomicOrUnionType\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"AtomicOrUnionType\", e0);\n  }\n\n  function try_AtomicOrUnionType()\n  {\n    try_EQName();\n  }\n\n  function parse_KindTest()\n  {\n    eventHandler.startNonterminal(\"KindTest\", e0);\n    switch (l1)\n    {\n    case 120:                       // 'document-node'\n      parse_DocumentTest();\n      break;\n    case 121:                       // 'element'\n      parse_ElementTest();\n      break;\n    case 82:                        // 'attribute'\n      parse_AttributeTest();\n      break;\n    case 227:                       // 'schema-element'\n      parse_SchemaElementTest();\n      break;\n    case 226:                       // 'schema-attribute'\n      parse_SchemaAttributeTest();\n      break;\n    case 216:                       // 'processing-instruction'\n      parse_PITest();\n      break;\n    case 96:                        // 'comment'\n      parse_CommentTest();\n      break;\n    case 244:                       // 'text'\n      parse_TextTest();\n      break;\n    case 185:                       // 'namespace-node'\n      parse_NamespaceNodeTest();\n      break;\n    default:\n      parse_AnyKindTest();\n    }\n    eventHandler.endNonterminal(\"KindTest\", e0);\n  }\n\n  function try_KindTest()\n  {\n    switch (l1)\n    {\n    case 120:                       // 'document-node'\n      try_DocumentTest();\n      break;\n    case 121:                       // 'element'\n      try_ElementTest();\n      break;\n    case 82:                        // 'attribute'\n      try_AttributeTest();\n      break;\n    case 227:                       // 'schema-element'\n      try_SchemaElementTest();\n      break;\n    case 226:                       // 'schema-attribute'\n      try_SchemaAttributeTest();\n      break;\n    case 216:                       // 'processing-instruction'\n      try_PITest();\n      break;\n    case 96:                        // 'comment'\n      try_CommentTest();\n      break;\n    case 244:                       // 'text'\n      try_TextTest();\n      break;\n    case 185:                       // 'namespace-node'\n      try_NamespaceNodeTest();\n      break;\n    default:\n      try_AnyKindTest();\n    }\n  }\n\n  function parse_AnyKindTest()\n  {\n    eventHandler.startNonterminal(\"AnyKindTest\", e0);\n    shift(191);                     // 'node'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"AnyKindTest\", e0);\n  }\n\n  function try_AnyKindTest()\n  {\n    shiftT(191);                    // 'node'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_DocumentTest()\n  {\n    eventHandler.startNonterminal(\"DocumentTest\", e0);\n    shift(120);                     // 'document-node'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(144);               // S^WS | '(:' | ')' | 'element' | 'schema-element'\n    if (l1 != 37)                   // ')'\n    {\n      switch (l1)\n      {\n      case 121:                     // 'element'\n        whitespace();\n        parse_ElementTest();\n        break;\n      default:\n        whitespace();\n        parse_SchemaElementTest();\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"DocumentTest\", e0);\n  }\n\n  function try_DocumentTest()\n  {\n    shiftT(120);                    // 'document-node'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(144);               // S^WS | '(:' | ')' | 'element' | 'schema-element'\n    if (l1 != 37)                   // ')'\n    {\n      switch (l1)\n      {\n      case 121:                     // 'element'\n        try_ElementTest();\n        break;\n      default:\n        try_SchemaElementTest();\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_TextTest()\n  {\n    eventHandler.startNonterminal(\"TextTest\", e0);\n    shift(244);                     // 'text'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"TextTest\", e0);\n  }\n\n  function try_TextTest()\n  {\n    shiftT(244);                    // 'text'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_CommentTest()\n  {\n    eventHandler.startNonterminal(\"CommentTest\", e0);\n    shift(96);                      // 'comment'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"CommentTest\", e0);\n  }\n\n  function try_CommentTest()\n  {\n    shiftT(96);                     // 'comment'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_NamespaceNodeTest()\n  {\n    eventHandler.startNonterminal(\"NamespaceNodeTest\", e0);\n    shift(185);                     // 'namespace-node'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"NamespaceNodeTest\", e0);\n  }\n\n  function try_NamespaceNodeTest()\n  {\n    shiftT(185);                    // 'namespace-node'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_PITest()\n  {\n    eventHandler.startNonterminal(\"PITest\", e0);\n    shift(216);                     // 'processing-instruction'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(252);               // StringLiteral | NCName^Token | S^WS | '(:' | ')' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' |\n                                    // 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' | 'only' |\n                                    // 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' | 'preceding' |\n                                    // 'preceding-sibling' | 'processing-instruction' | 'rename' | 'replace' |\n                                    // 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'switch' | 'text' | 'to' | 'treat' | 'try' |\n                                    // 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // 'xquery'\n    if (l1 != 37)                   // ')'\n    {\n      switch (l1)\n      {\n      case 11:                      // StringLiteral\n        shift(11);                  // StringLiteral\n        break;\n      default:\n        whitespace();\n        parse_NCName();\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"PITest\", e0);\n  }\n\n  function try_PITest()\n  {\n    shiftT(216);                    // 'processing-instruction'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(252);               // StringLiteral | NCName^Token | S^WS | '(:' | ')' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' |\n                                    // 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' | 'only' |\n                                    // 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' | 'preceding' |\n                                    // 'preceding-sibling' | 'processing-instruction' | 'rename' | 'replace' |\n                                    // 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'switch' | 'text' | 'to' | 'treat' | 'try' |\n                                    // 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // 'xquery'\n    if (l1 != 37)                   // ')'\n    {\n      switch (l1)\n      {\n      case 11:                      // StringLiteral\n        shiftT(11);                 // StringLiteral\n        break;\n      default:\n        try_NCName();\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_AttributeTest()\n  {\n    eventHandler.startNonterminal(\"AttributeTest\", e0);\n    shift(82);                      // 'attribute'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(260);               // EQName^Token | S^WS | '(:' | ')' | '*' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    if (l1 != 37)                   // ')'\n    {\n      whitespace();\n      parse_AttribNameOrWildcard();\n      lookahead1W(101);             // S^WS | '(:' | ')' | ','\n      if (l1 == 41)                 // ','\n      {\n        shift(41);                  // ','\n        lookahead1W(254);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n        whitespace();\n        parse_TypeName();\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"AttributeTest\", e0);\n  }\n\n  function try_AttributeTest()\n  {\n    shiftT(82);                     // 'attribute'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(260);               // EQName^Token | S^WS | '(:' | ')' | '*' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    if (l1 != 37)                   // ')'\n    {\n      try_AttribNameOrWildcard();\n      lookahead1W(101);             // S^WS | '(:' | ')' | ','\n      if (l1 == 41)                 // ','\n      {\n        shiftT(41);                 // ','\n        lookahead1W(254);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n        try_TypeName();\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_AttribNameOrWildcard()\n  {\n    eventHandler.startNonterminal(\"AttribNameOrWildcard\", e0);\n    switch (l1)\n    {\n    case 38:                        // '*'\n      shift(38);                    // '*'\n      break;\n    default:\n      parse_AttributeName();\n    }\n    eventHandler.endNonterminal(\"AttribNameOrWildcard\", e0);\n  }\n\n  function try_AttribNameOrWildcard()\n  {\n    switch (l1)\n    {\n    case 38:                        // '*'\n      shiftT(38);                   // '*'\n      break;\n    default:\n      try_AttributeName();\n    }\n  }\n\n  function parse_SchemaAttributeTest()\n  {\n    eventHandler.startNonterminal(\"SchemaAttributeTest\", e0);\n    shift(226);                     // 'schema-attribute'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    whitespace();\n    parse_AttributeDeclaration();\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"SchemaAttributeTest\", e0);\n  }\n\n  function try_SchemaAttributeTest()\n  {\n    shiftT(226);                    // 'schema-attribute'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    try_AttributeDeclaration();\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_AttributeDeclaration()\n  {\n    eventHandler.startNonterminal(\"AttributeDeclaration\", e0);\n    parse_AttributeName();\n    eventHandler.endNonterminal(\"AttributeDeclaration\", e0);\n  }\n\n  function try_AttributeDeclaration()\n  {\n    try_AttributeName();\n  }\n\n  function parse_ElementTest()\n  {\n    eventHandler.startNonterminal(\"ElementTest\", e0);\n    shift(121);                     // 'element'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(260);               // EQName^Token | S^WS | '(:' | ')' | '*' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    if (l1 != 37)                   // ')'\n    {\n      whitespace();\n      parse_ElementNameOrWildcard();\n      lookahead1W(101);             // S^WS | '(:' | ')' | ','\n      if (l1 == 41)                 // ','\n      {\n        shift(41);                  // ','\n        lookahead1W(254);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n        whitespace();\n        parse_TypeName();\n        lookahead1W(102);           // S^WS | '(:' | ')' | '?'\n        if (l1 == 64)               // '?'\n        {\n          shift(64);                // '?'\n        }\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"ElementTest\", e0);\n  }\n\n  function try_ElementTest()\n  {\n    shiftT(121);                    // 'element'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(260);               // EQName^Token | S^WS | '(:' | ')' | '*' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    if (l1 != 37)                   // ')'\n    {\n      try_ElementNameOrWildcard();\n      lookahead1W(101);             // S^WS | '(:' | ')' | ','\n      if (l1 == 41)                 // ','\n      {\n        shiftT(41);                 // ','\n        lookahead1W(254);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n        try_TypeName();\n        lookahead1W(102);           // S^WS | '(:' | ')' | '?'\n        if (l1 == 64)               // '?'\n        {\n          shiftT(64);               // '?'\n        }\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_ElementNameOrWildcard()\n  {\n    eventHandler.startNonterminal(\"ElementNameOrWildcard\", e0);\n    switch (l1)\n    {\n    case 38:                        // '*'\n      shift(38);                    // '*'\n      break;\n    default:\n      parse_ElementName();\n    }\n    eventHandler.endNonterminal(\"ElementNameOrWildcard\", e0);\n  }\n\n  function try_ElementNameOrWildcard()\n  {\n    switch (l1)\n    {\n    case 38:                        // '*'\n      shiftT(38);                   // '*'\n      break;\n    default:\n      try_ElementName();\n    }\n  }\n\n  function parse_SchemaElementTest()\n  {\n    eventHandler.startNonterminal(\"SchemaElementTest\", e0);\n    shift(227);                     // 'schema-element'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    whitespace();\n    parse_ElementDeclaration();\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"SchemaElementTest\", e0);\n  }\n\n  function try_SchemaElementTest()\n  {\n    shiftT(227);                    // 'schema-element'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    try_ElementDeclaration();\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_ElementDeclaration()\n  {\n    eventHandler.startNonterminal(\"ElementDeclaration\", e0);\n    parse_ElementName();\n    eventHandler.endNonterminal(\"ElementDeclaration\", e0);\n  }\n\n  function try_ElementDeclaration()\n  {\n    try_ElementName();\n  }\n\n  function parse_AttributeName()\n  {\n    eventHandler.startNonterminal(\"AttributeName\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"AttributeName\", e0);\n  }\n\n  function try_AttributeName()\n  {\n    try_EQName();\n  }\n\n  function parse_ElementName()\n  {\n    eventHandler.startNonterminal(\"ElementName\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"ElementName\", e0);\n  }\n\n  function try_ElementName()\n  {\n    try_EQName();\n  }\n\n  function parse_SimpleTypeName()\n  {\n    eventHandler.startNonterminal(\"SimpleTypeName\", e0);\n    parse_TypeName();\n    eventHandler.endNonterminal(\"SimpleTypeName\", e0);\n  }\n\n  function try_SimpleTypeName()\n  {\n    try_TypeName();\n  }\n\n  function parse_TypeName()\n  {\n    eventHandler.startNonterminal(\"TypeName\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"TypeName\", e0);\n  }\n\n  function try_TypeName()\n  {\n    try_EQName();\n  }\n\n  function parse_FunctionTest()\n  {\n    eventHandler.startNonterminal(\"FunctionTest\", e0);\n    for (;;)\n    {\n      lookahead1W(97);              // S^WS | '%' | '(:' | 'function'\n      if (l1 != 32)                 // '%'\n      {\n        break;\n      }\n      whitespace();\n      parse_Annotation();\n    }\n    switch (l1)\n    {\n    case 145:                       // 'function'\n      lookahead2W(22);              // S^WS | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    lk = memoized(5, e0);\n    if (lk == 0)\n    {\n      var b0A = b0; var e0A = e0; var l1A = l1;\n      var b1A = b1; var e1A = e1; var l2A = l2;\n      var b2A = b2; var e2A = e2;\n      try\n      {\n        try_AnyFunctionTest();\n        lk = -1;\n      }\n      catch (p1A)\n      {\n        lk = -2;\n      }\n      b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n      b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n      b2 = b2A; e2 = e2A; end = e2A; }}\n      memoize(5, e0, lk);\n    }\n    switch (lk)\n    {\n    case -1:\n      whitespace();\n      parse_AnyFunctionTest();\n      break;\n    default:\n      whitespace();\n      parse_TypedFunctionTest();\n    }\n    eventHandler.endNonterminal(\"FunctionTest\", e0);\n  }\n\n  function try_FunctionTest()\n  {\n    for (;;)\n    {\n      lookahead1W(97);              // S^WS | '%' | '(:' | 'function'\n      if (l1 != 32)                 // '%'\n      {\n        break;\n      }\n      try_Annotation();\n    }\n    switch (l1)\n    {\n    case 145:                       // 'function'\n      lookahead2W(22);              // S^WS | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    lk = memoized(5, e0);\n    if (lk == 0)\n    {\n      var b0A = b0; var e0A = e0; var l1A = l1;\n      var b1A = b1; var e1A = e1; var l2A = l2;\n      var b2A = b2; var e2A = e2;\n      try\n      {\n        try_AnyFunctionTest();\n        memoize(5, e0A, -1);\n        lk = -3;\n      }\n      catch (p1A)\n      {\n        lk = -2;\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(5, e0A, -2);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      try_AnyFunctionTest();\n      break;\n    case -3:\n      break;\n    default:\n      try_TypedFunctionTest();\n    }\n  }\n\n  function parse_AnyFunctionTest()\n  {\n    eventHandler.startNonterminal(\"AnyFunctionTest\", e0);\n    shift(145);                     // 'function'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(24);                // S^WS | '(:' | '*'\n    shift(38);                      // '*'\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"AnyFunctionTest\", e0);\n  }\n\n  function try_AnyFunctionTest()\n  {\n    shiftT(145);                    // 'function'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(24);                // S^WS | '(:' | '*'\n    shiftT(38);                     // '*'\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_TypedFunctionTest()\n  {\n    eventHandler.startNonterminal(\"TypedFunctionTest\", e0);\n    shift(145);                     // 'function'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(262);               // EQName^Token | S^WS | '%' | '(' | '(:' | ')' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    if (l1 != 37)                   // ')'\n    {\n      whitespace();\n      parse_SequenceType();\n      for (;;)\n      {\n        lookahead1W(101);           // S^WS | '(:' | ')' | ','\n        if (l1 != 41)               // ','\n        {\n          break;\n        }\n        shift(41);                  // ','\n        lookahead1W(259);           // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n        whitespace();\n        parse_SequenceType();\n      }\n    }\n    shift(37);                      // ')'\n    lookahead1W(30);                // S^WS | '(:' | 'as'\n    shift(79);                      // 'as'\n    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    whitespace();\n    parse_SequenceType();\n    eventHandler.endNonterminal(\"TypedFunctionTest\", e0);\n  }\n\n  function try_TypedFunctionTest()\n  {\n    shiftT(145);                    // 'function'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(262);               // EQName^Token | S^WS | '%' | '(' | '(:' | ')' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    if (l1 != 37)                   // ')'\n    {\n      try_SequenceType();\n      for (;;)\n      {\n        lookahead1W(101);           // S^WS | '(:' | ')' | ','\n        if (l1 != 41)               // ','\n        {\n          break;\n        }\n        shiftT(41);                 // ','\n        lookahead1W(259);           // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n        try_SequenceType();\n      }\n    }\n    shiftT(37);                     // ')'\n    lookahead1W(30);                // S^WS | '(:' | 'as'\n    shiftT(79);                     // 'as'\n    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    try_SequenceType();\n  }\n\n  function parse_ParenthesizedItemType()\n  {\n    eventHandler.startNonterminal(\"ParenthesizedItemType\", e0);\n    shift(34);                      // '('\n    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    whitespace();\n    parse_ItemType();\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"ParenthesizedItemType\", e0);\n  }\n\n  function try_ParenthesizedItemType()\n  {\n    shiftT(34);                     // '('\n    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    try_ItemType();\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_RevalidationDecl()\n  {\n    eventHandler.startNonterminal(\"RevalidationDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(72);                // S^WS | '(:' | 'revalidation'\n    shift(222);                     // 'revalidation'\n    lookahead1W(152);               // S^WS | '(:' | 'lax' | 'skip' | 'strict'\n    switch (l1)\n    {\n    case 240:                       // 'strict'\n      shift(240);                   // 'strict'\n      break;\n    case 171:                       // 'lax'\n      shift(171);                   // 'lax'\n      break;\n    default:\n      shift(233);                   // 'skip'\n    }\n    eventHandler.endNonterminal(\"RevalidationDecl\", e0);\n  }\n\n  function parse_InsertExprTargetChoice()\n  {\n    eventHandler.startNonterminal(\"InsertExprTargetChoice\", e0);\n    switch (l1)\n    {\n    case 70:                        // 'after'\n      shift(70);                    // 'after'\n      break;\n    case 84:                        // 'before'\n      shift(84);                    // 'before'\n      break;\n    default:\n      if (l1 == 79)                 // 'as'\n      {\n        shift(79);                  // 'as'\n        lookahead1W(119);           // S^WS | '(:' | 'first' | 'last'\n        switch (l1)\n        {\n        case 134:                   // 'first'\n          shift(134);               // 'first'\n          break;\n        default:\n          shift(170);               // 'last'\n        }\n      }\n      lookahead1W(54);              // S^WS | '(:' | 'into'\n      shift(163);                   // 'into'\n    }\n    eventHandler.endNonterminal(\"InsertExprTargetChoice\", e0);\n  }\n\n  function try_InsertExprTargetChoice()\n  {\n    switch (l1)\n    {\n    case 70:                        // 'after'\n      shiftT(70);                   // 'after'\n      break;\n    case 84:                        // 'before'\n      shiftT(84);                   // 'before'\n      break;\n    default:\n      if (l1 == 79)                 // 'as'\n      {\n        shiftT(79);                 // 'as'\n        lookahead1W(119);           // S^WS | '(:' | 'first' | 'last'\n        switch (l1)\n        {\n        case 134:                   // 'first'\n          shiftT(134);              // 'first'\n          break;\n        default:\n          shiftT(170);              // 'last'\n        }\n      }\n      lookahead1W(54);              // S^WS | '(:' | 'into'\n      shiftT(163);                  // 'into'\n    }\n  }\n\n  function parse_InsertExpr()\n  {\n    eventHandler.startNonterminal(\"InsertExpr\", e0);\n    shift(159);                     // 'insert'\n    lookahead1W(129);               // S^WS | '(:' | 'node' | 'nodes'\n    switch (l1)\n    {\n    case 191:                       // 'node'\n      shift(191);                   // 'node'\n      break;\n    default:\n      shift(192);                   // 'nodes'\n    }\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_SourceExpr();\n    whitespace();\n    parse_InsertExprTargetChoice();\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_TargetExpr();\n    eventHandler.endNonterminal(\"InsertExpr\", e0);\n  }\n\n  function try_InsertExpr()\n  {\n    shiftT(159);                    // 'insert'\n    lookahead1W(129);               // S^WS | '(:' | 'node' | 'nodes'\n    switch (l1)\n    {\n    case 191:                       // 'node'\n      shiftT(191);                  // 'node'\n      break;\n    default:\n      shiftT(192);                  // 'nodes'\n    }\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_SourceExpr();\n    try_InsertExprTargetChoice();\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_TargetExpr();\n  }\n\n  function parse_DeleteExpr()\n  {\n    eventHandler.startNonterminal(\"DeleteExpr\", e0);\n    shift(110);                     // 'delete'\n    lookahead1W(129);               // S^WS | '(:' | 'node' | 'nodes'\n    switch (l1)\n    {\n    case 191:                       // 'node'\n      shift(191);                   // 'node'\n      break;\n    default:\n      shift(192);                   // 'nodes'\n    }\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_TargetExpr();\n    eventHandler.endNonterminal(\"DeleteExpr\", e0);\n  }\n\n  function try_DeleteExpr()\n  {\n    shiftT(110);                    // 'delete'\n    lookahead1W(129);               // S^WS | '(:' | 'node' | 'nodes'\n    switch (l1)\n    {\n    case 191:                       // 'node'\n      shiftT(191);                  // 'node'\n      break;\n    default:\n      shiftT(192);                  // 'nodes'\n    }\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_TargetExpr();\n  }\n\n  function parse_ReplaceExpr()\n  {\n    eventHandler.startNonterminal(\"ReplaceExpr\", e0);\n    shift(219);                     // 'replace'\n    lookahead1W(130);               // S^WS | '(:' | 'node' | 'value'\n    if (l1 == 261)                  // 'value'\n    {\n      shift(261);                   // 'value'\n      lookahead1W(64);              // S^WS | '(:' | 'of'\n      shift(196);                   // 'of'\n    }\n    lookahead1W(62);                // S^WS | '(:' | 'node'\n    shift(191);                     // 'node'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_TargetExpr();\n    shift(270);                     // 'with'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"ReplaceExpr\", e0);\n  }\n\n  function try_ReplaceExpr()\n  {\n    shiftT(219);                    // 'replace'\n    lookahead1W(130);               // S^WS | '(:' | 'node' | 'value'\n    if (l1 == 261)                  // 'value'\n    {\n      shiftT(261);                  // 'value'\n      lookahead1W(64);              // S^WS | '(:' | 'of'\n      shiftT(196);                  // 'of'\n    }\n    lookahead1W(62);                // S^WS | '(:' | 'node'\n    shiftT(191);                    // 'node'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_TargetExpr();\n    shiftT(270);                    // 'with'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_ExprSingle();\n  }\n\n  function parse_RenameExpr()\n  {\n    eventHandler.startNonterminal(\"RenameExpr\", e0);\n    shift(218);                     // 'rename'\n    lookahead1W(62);                // S^WS | '(:' | 'node'\n    shift(191);                     // 'node'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_TargetExpr();\n    shift(79);                      // 'as'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_NewNameExpr();\n    eventHandler.endNonterminal(\"RenameExpr\", e0);\n  }\n\n  function try_RenameExpr()\n  {\n    shiftT(218);                    // 'rename'\n    lookahead1W(62);                // S^WS | '(:' | 'node'\n    shiftT(191);                    // 'node'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_TargetExpr();\n    shiftT(79);                     // 'as'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_NewNameExpr();\n  }\n\n  function parse_SourceExpr()\n  {\n    eventHandler.startNonterminal(\"SourceExpr\", e0);\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"SourceExpr\", e0);\n  }\n\n  function try_SourceExpr()\n  {\n    try_ExprSingle();\n  }\n\n  function parse_TargetExpr()\n  {\n    eventHandler.startNonterminal(\"TargetExpr\", e0);\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"TargetExpr\", e0);\n  }\n\n  function try_TargetExpr()\n  {\n    try_ExprSingle();\n  }\n\n  function parse_NewNameExpr()\n  {\n    eventHandler.startNonterminal(\"NewNameExpr\", e0);\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"NewNameExpr\", e0);\n  }\n\n  function try_NewNameExpr()\n  {\n    try_ExprSingle();\n  }\n\n  function parse_TransformExpr()\n  {\n    eventHandler.startNonterminal(\"TransformExpr\", e0);\n    shift(103);                     // 'copy'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    whitespace();\n    parse_TransformSpec();\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shift(41);                    // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      whitespace();\n      parse_TransformSpec();\n    }\n    shift(181);                     // 'modify'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    shift(220);                     // 'return'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"TransformExpr\", e0);\n  }\n\n  function try_TransformExpr()\n  {\n    shiftT(103);                    // 'copy'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    try_TransformSpec();\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shiftT(41);                   // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      try_TransformSpec();\n    }\n    shiftT(181);                    // 'modify'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_ExprSingle();\n    shiftT(220);                    // 'return'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_ExprSingle();\n  }\n\n  function parse_TransformSpec()\n  {\n    eventHandler.startNonterminal(\"TransformSpec\", e0);\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    whitespace();\n    parse_VarName();\n    lookahead1W(27);                // S^WS | '(:' | ':='\n    shift(52);                      // ':='\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"TransformSpec\", e0);\n  }\n\n  function try_TransformSpec()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    try_VarName();\n    lookahead1W(27);                // S^WS | '(:' | ':='\n    shiftT(52);                     // ':='\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_ExprSingle();\n  }\n\n  function parse_FTSelection()\n  {\n    eventHandler.startNonterminal(\"FTSelection\", e0);\n    parse_FTOr();\n    for (;;)\n    {\n      lookahead1W(211);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n                                    // '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' |\n                                    // 'before' | 'case' | 'collation' | 'count' | 'default' | 'descending' |\n                                    // 'different' | 'distance' | 'else' | 'empty' | 'end' | 'entire' | 'eq' | 'for' |\n                                    // 'ge' | 'group' | 'gt' | 'into' | 'is' | 'le' | 'let' | 'lt' | 'modify' | 'ne' |\n                                    // 'only' | 'or' | 'order' | 'ordered' | 'return' | 'same' | 'satisfies' |\n                                    // 'stable' | 'start' | 'where' | 'window' | 'with' | 'without' | '|}' | '}'\n      switch (l1)\n      {\n      case 81:                      // 'at'\n        lookahead2W(151);           // S^WS | '(:' | 'end' | 'position' | 'start'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 115                 // 'different'\n       && lk != 117                 // 'distance'\n       && lk != 127                 // 'entire'\n       && lk != 202                 // 'ordered'\n       && lk != 223                 // 'same'\n       && lk != 269                 // 'window'\n       && lk != 64593               // 'at' 'end'\n       && lk != 121425)             // 'at' 'start'\n      {\n        break;\n      }\n      whitespace();\n      parse_FTPosFilter();\n    }\n    eventHandler.endNonterminal(\"FTSelection\", e0);\n  }\n\n  function try_FTSelection()\n  {\n    try_FTOr();\n    for (;;)\n    {\n      lookahead1W(211);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n                                    // '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' |\n                                    // 'before' | 'case' | 'collation' | 'count' | 'default' | 'descending' |\n                                    // 'different' | 'distance' | 'else' | 'empty' | 'end' | 'entire' | 'eq' | 'for' |\n                                    // 'ge' | 'group' | 'gt' | 'into' | 'is' | 'le' | 'let' | 'lt' | 'modify' | 'ne' |\n                                    // 'only' | 'or' | 'order' | 'ordered' | 'return' | 'same' | 'satisfies' |\n                                    // 'stable' | 'start' | 'where' | 'window' | 'with' | 'without' | '|}' | '}'\n      switch (l1)\n      {\n      case 81:                      // 'at'\n        lookahead2W(151);           // S^WS | '(:' | 'end' | 'position' | 'start'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 115                 // 'different'\n       && lk != 117                 // 'distance'\n       && lk != 127                 // 'entire'\n       && lk != 202                 // 'ordered'\n       && lk != 223                 // 'same'\n       && lk != 269                 // 'window'\n       && lk != 64593               // 'at' 'end'\n       && lk != 121425)             // 'at' 'start'\n      {\n        break;\n      }\n      try_FTPosFilter();\n    }\n  }\n\n  function parse_FTWeight()\n  {\n    eventHandler.startNonterminal(\"FTWeight\", e0);\n    shift(264);                     // 'weight'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shift(276);                     // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_Expr();\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"FTWeight\", e0);\n  }\n\n  function try_FTWeight()\n  {\n    shiftT(264);                    // 'weight'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shiftT(276);                    // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_Expr();\n    shiftT(282);                    // '}'\n  }\n\n  function parse_FTOr()\n  {\n    eventHandler.startNonterminal(\"FTOr\", e0);\n    parse_FTAnd();\n    for (;;)\n    {\n      if (l1 != 144)                // 'ftor'\n      {\n        break;\n      }\n      shift(144);                   // 'ftor'\n      lookahead1W(162);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      whitespace();\n      parse_FTAnd();\n    }\n    eventHandler.endNonterminal(\"FTOr\", e0);\n  }\n\n  function try_FTOr()\n  {\n    try_FTAnd();\n    for (;;)\n    {\n      if (l1 != 144)                // 'ftor'\n      {\n        break;\n      }\n      shiftT(144);                  // 'ftor'\n      lookahead1W(162);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      try_FTAnd();\n    }\n  }\n\n  function parse_FTAnd()\n  {\n    eventHandler.startNonterminal(\"FTAnd\", e0);\n    parse_FTMildNot();\n    for (;;)\n    {\n      if (l1 != 142)                // 'ftand'\n      {\n        break;\n      }\n      shift(142);                   // 'ftand'\n      lookahead1W(162);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      whitespace();\n      parse_FTMildNot();\n    }\n    eventHandler.endNonterminal(\"FTAnd\", e0);\n  }\n\n  function try_FTAnd()\n  {\n    try_FTMildNot();\n    for (;;)\n    {\n      if (l1 != 142)                // 'ftand'\n      {\n        break;\n      }\n      shiftT(142);                  // 'ftand'\n      lookahead1W(162);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      try_FTMildNot();\n    }\n  }\n\n  function parse_FTMildNot()\n  {\n    eventHandler.startNonterminal(\"FTMildNot\", e0);\n    parse_FTUnaryNot();\n    for (;;)\n    {\n      lookahead1W(212);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n                                    // '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' |\n                                    // 'before' | 'case' | 'collation' | 'count' | 'default' | 'descending' |\n                                    // 'different' | 'distance' | 'else' | 'empty' | 'end' | 'entire' | 'eq' | 'for' |\n                                    // 'ftand' | 'ftor' | 'ge' | 'group' | 'gt' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'modify' | 'ne' | 'not' | 'only' | 'or' | 'order' | 'ordered' | 'return' |\n                                    // 'same' | 'satisfies' | 'stable' | 'start' | 'where' | 'window' | 'with' |\n                                    // 'without' | '|}' | '}'\n      if (l1 != 193)                // 'not'\n      {\n        break;\n      }\n      shift(193);                   // 'not'\n      lookahead1W(53);              // S^WS | '(:' | 'in'\n      shift(154);                   // 'in'\n      lookahead1W(162);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      whitespace();\n      parse_FTUnaryNot();\n    }\n    eventHandler.endNonterminal(\"FTMildNot\", e0);\n  }\n\n  function try_FTMildNot()\n  {\n    try_FTUnaryNot();\n    for (;;)\n    {\n      lookahead1W(212);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n                                    // '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' |\n                                    // 'before' | 'case' | 'collation' | 'count' | 'default' | 'descending' |\n                                    // 'different' | 'distance' | 'else' | 'empty' | 'end' | 'entire' | 'eq' | 'for' |\n                                    // 'ftand' | 'ftor' | 'ge' | 'group' | 'gt' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'modify' | 'ne' | 'not' | 'only' | 'or' | 'order' | 'ordered' | 'return' |\n                                    // 'same' | 'satisfies' | 'stable' | 'start' | 'where' | 'window' | 'with' |\n                                    // 'without' | '|}' | '}'\n      if (l1 != 193)                // 'not'\n      {\n        break;\n      }\n      shiftT(193);                  // 'not'\n      lookahead1W(53);              // S^WS | '(:' | 'in'\n      shiftT(154);                  // 'in'\n      lookahead1W(162);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      try_FTUnaryNot();\n    }\n  }\n\n  function parse_FTUnaryNot()\n  {\n    eventHandler.startNonterminal(\"FTUnaryNot\", e0);\n    if (l1 == 143)                  // 'ftnot'\n    {\n      shift(143);                   // 'ftnot'\n    }\n    lookahead1W(155);               // StringLiteral | S^WS | '(' | '(#' | '(:' | '{'\n    whitespace();\n    parse_FTPrimaryWithOptions();\n    eventHandler.endNonterminal(\"FTUnaryNot\", e0);\n  }\n\n  function try_FTUnaryNot()\n  {\n    if (l1 == 143)                  // 'ftnot'\n    {\n      shiftT(143);                  // 'ftnot'\n    }\n    lookahead1W(155);               // StringLiteral | S^WS | '(' | '(#' | '(:' | '{'\n    try_FTPrimaryWithOptions();\n  }\n\n  function parse_FTPrimaryWithOptions()\n  {\n    eventHandler.startNonterminal(\"FTPrimaryWithOptions\", e0);\n    parse_FTPrimary();\n    lookahead1W(214);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n                                    // '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' |\n                                    // 'before' | 'case' | 'collation' | 'count' | 'default' | 'descending' |\n                                    // 'different' | 'distance' | 'else' | 'empty' | 'end' | 'entire' | 'eq' | 'for' |\n                                    // 'ftand' | 'ftor' | 'ge' | 'group' | 'gt' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'modify' | 'ne' | 'not' | 'only' | 'or' | 'order' | 'ordered' | 'return' |\n                                    // 'same' | 'satisfies' | 'stable' | 'start' | 'using' | 'weight' | 'where' |\n                                    // 'window' | 'with' | 'without' | '|}' | '}'\n    if (l1 == 259)                  // 'using'\n    {\n      whitespace();\n      parse_FTMatchOptions();\n    }\n    if (l1 == 264)                  // 'weight'\n    {\n      whitespace();\n      parse_FTWeight();\n    }\n    eventHandler.endNonterminal(\"FTPrimaryWithOptions\", e0);\n  }\n\n  function try_FTPrimaryWithOptions()\n  {\n    try_FTPrimary();\n    lookahead1W(214);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n                                    // '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' |\n                                    // 'before' | 'case' | 'collation' | 'count' | 'default' | 'descending' |\n                                    // 'different' | 'distance' | 'else' | 'empty' | 'end' | 'entire' | 'eq' | 'for' |\n                                    // 'ftand' | 'ftor' | 'ge' | 'group' | 'gt' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'modify' | 'ne' | 'not' | 'only' | 'or' | 'order' | 'ordered' | 'return' |\n                                    // 'same' | 'satisfies' | 'stable' | 'start' | 'using' | 'weight' | 'where' |\n                                    // 'window' | 'with' | 'without' | '|}' | '}'\n    if (l1 == 259)                  // 'using'\n    {\n      try_FTMatchOptions();\n    }\n    if (l1 == 264)                  // 'weight'\n    {\n      try_FTWeight();\n    }\n  }\n\n  function parse_FTPrimary()\n  {\n    eventHandler.startNonterminal(\"FTPrimary\", e0);\n    switch (l1)\n    {\n    case 34:                        // '('\n      shift(34);                    // '('\n      lookahead1W(162);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      whitespace();\n      parse_FTSelection();\n      shift(37);                    // ')'\n      break;\n    case 35:                        // '(#'\n      parse_FTExtensionSelection();\n      break;\n    default:\n      parse_FTWords();\n      lookahead1W(215);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n                                    // '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' |\n                                    // 'before' | 'case' | 'collation' | 'count' | 'default' | 'descending' |\n                                    // 'different' | 'distance' | 'else' | 'empty' | 'end' | 'entire' | 'eq' | 'for' |\n                                    // 'ftand' | 'ftor' | 'ge' | 'group' | 'gt' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'modify' | 'ne' | 'not' | 'occurs' | 'only' | 'or' | 'order' | 'ordered' |\n                                    // 'return' | 'same' | 'satisfies' | 'stable' | 'start' | 'using' | 'weight' |\n                                    // 'where' | 'window' | 'with' | 'without' | '|}' | '}'\n      if (l1 == 195)                // 'occurs'\n      {\n        whitespace();\n        parse_FTTimes();\n      }\n    }\n    eventHandler.endNonterminal(\"FTPrimary\", e0);\n  }\n\n  function try_FTPrimary()\n  {\n    switch (l1)\n    {\n    case 34:                        // '('\n      shiftT(34);                   // '('\n      lookahead1W(162);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      try_FTSelection();\n      shiftT(37);                   // ')'\n      break;\n    case 35:                        // '(#'\n      try_FTExtensionSelection();\n      break;\n    default:\n      try_FTWords();\n      lookahead1W(215);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n                                    // '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' |\n                                    // 'before' | 'case' | 'collation' | 'count' | 'default' | 'descending' |\n                                    // 'different' | 'distance' | 'else' | 'empty' | 'end' | 'entire' | 'eq' | 'for' |\n                                    // 'ftand' | 'ftor' | 'ge' | 'group' | 'gt' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'modify' | 'ne' | 'not' | 'occurs' | 'only' | 'or' | 'order' | 'ordered' |\n                                    // 'return' | 'same' | 'satisfies' | 'stable' | 'start' | 'using' | 'weight' |\n                                    // 'where' | 'window' | 'with' | 'without' | '|}' | '}'\n      if (l1 == 195)                // 'occurs'\n      {\n        try_FTTimes();\n      }\n    }\n  }\n\n  function parse_FTWords()\n  {\n    eventHandler.startNonterminal(\"FTWords\", e0);\n    parse_FTWordsValue();\n    lookahead1W(221);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n                                    // '>' | '>=' | '>>' | ']' | 'after' | 'all' | 'and' | 'any' | 'as' | 'ascending' |\n                                    // 'at' | 'before' | 'case' | 'collation' | 'count' | 'default' | 'descending' |\n                                    // 'different' | 'distance' | 'else' | 'empty' | 'end' | 'entire' | 'eq' | 'for' |\n                                    // 'ftand' | 'ftor' | 'ge' | 'group' | 'gt' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'modify' | 'ne' | 'not' | 'occurs' | 'only' | 'or' | 'order' | 'ordered' |\n                                    // 'phrase' | 'return' | 'same' | 'satisfies' | 'stable' | 'start' | 'using' |\n                                    // 'weight' | 'where' | 'window' | 'with' | 'without' | '|}' | '}'\n    if (l1 == 71                    // 'all'\n     || l1 == 76                    // 'any'\n     || l1 == 210)                  // 'phrase'\n    {\n      whitespace();\n      parse_FTAnyallOption();\n    }\n    eventHandler.endNonterminal(\"FTWords\", e0);\n  }\n\n  function try_FTWords()\n  {\n    try_FTWordsValue();\n    lookahead1W(221);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n                                    // '>' | '>=' | '>>' | ']' | 'after' | 'all' | 'and' | 'any' | 'as' | 'ascending' |\n                                    // 'at' | 'before' | 'case' | 'collation' | 'count' | 'default' | 'descending' |\n                                    // 'different' | 'distance' | 'else' | 'empty' | 'end' | 'entire' | 'eq' | 'for' |\n                                    // 'ftand' | 'ftor' | 'ge' | 'group' | 'gt' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'modify' | 'ne' | 'not' | 'occurs' | 'only' | 'or' | 'order' | 'ordered' |\n                                    // 'phrase' | 'return' | 'same' | 'satisfies' | 'stable' | 'start' | 'using' |\n                                    // 'weight' | 'where' | 'window' | 'with' | 'without' | '|}' | '}'\n    if (l1 == 71                    // 'all'\n     || l1 == 76                    // 'any'\n     || l1 == 210)                  // 'phrase'\n    {\n      try_FTAnyallOption();\n    }\n  }\n\n  function parse_FTWordsValue()\n  {\n    eventHandler.startNonterminal(\"FTWordsValue\", e0);\n    switch (l1)\n    {\n    case 11:                        // StringLiteral\n      shift(11);                    // StringLiteral\n      break;\n    default:\n      shift(276);                   // '{'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      whitespace();\n      parse_Expr();\n      shift(282);                   // '}'\n    }\n    eventHandler.endNonterminal(\"FTWordsValue\", e0);\n  }\n\n  function try_FTWordsValue()\n  {\n    switch (l1)\n    {\n    case 11:                        // StringLiteral\n      shiftT(11);                   // StringLiteral\n      break;\n    default:\n      shiftT(276);                  // '{'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      try_Expr();\n      shiftT(282);                  // '}'\n    }\n  }\n\n  function parse_FTExtensionSelection()\n  {\n    eventHandler.startNonterminal(\"FTExtensionSelection\", e0);\n    for (;;)\n    {\n      whitespace();\n      parse_Pragma();\n      lookahead1W(100);             // S^WS | '(#' | '(:' | '{'\n      if (l1 != 35)                 // '(#'\n      {\n        break;\n      }\n    }\n    shift(276);                     // '{'\n    lookahead1W(166);               // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{' | '}'\n    if (l1 != 282)                  // '}'\n    {\n      whitespace();\n      parse_FTSelection();\n    }\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"FTExtensionSelection\", e0);\n  }\n\n  function try_FTExtensionSelection()\n  {\n    for (;;)\n    {\n      try_Pragma();\n      lookahead1W(100);             // S^WS | '(#' | '(:' | '{'\n      if (l1 != 35)                 // '(#'\n      {\n        break;\n      }\n    }\n    shiftT(276);                    // '{'\n    lookahead1W(166);               // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{' | '}'\n    if (l1 != 282)                  // '}'\n    {\n      try_FTSelection();\n    }\n    shiftT(282);                    // '}'\n  }\n\n  function parse_FTAnyallOption()\n  {\n    eventHandler.startNonterminal(\"FTAnyallOption\", e0);\n    switch (l1)\n    {\n    case 76:                        // 'any'\n      shift(76);                    // 'any'\n      lookahead1W(218);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n                                    // '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' |\n                                    // 'before' | 'case' | 'collation' | 'count' | 'default' | 'descending' |\n                                    // 'different' | 'distance' | 'else' | 'empty' | 'end' | 'entire' | 'eq' | 'for' |\n                                    // 'ftand' | 'ftor' | 'ge' | 'group' | 'gt' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'modify' | 'ne' | 'not' | 'occurs' | 'only' | 'or' | 'order' | 'ordered' |\n                                    // 'return' | 'same' | 'satisfies' | 'stable' | 'start' | 'using' | 'weight' |\n                                    // 'where' | 'window' | 'with' | 'without' | 'word' | '|}' | '}'\n      if (l1 == 272)                // 'word'\n      {\n        shift(272);                 // 'word'\n      }\n      break;\n    case 71:                        // 'all'\n      shift(71);                    // 'all'\n      lookahead1W(219);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n                                    // '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' |\n                                    // 'before' | 'case' | 'collation' | 'count' | 'default' | 'descending' |\n                                    // 'different' | 'distance' | 'else' | 'empty' | 'end' | 'entire' | 'eq' | 'for' |\n                                    // 'ftand' | 'ftor' | 'ge' | 'group' | 'gt' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'modify' | 'ne' | 'not' | 'occurs' | 'only' | 'or' | 'order' | 'ordered' |\n                                    // 'return' | 'same' | 'satisfies' | 'stable' | 'start' | 'using' | 'weight' |\n                                    // 'where' | 'window' | 'with' | 'without' | 'words' | '|}' | '}'\n      if (l1 == 273)                // 'words'\n      {\n        shift(273);                 // 'words'\n      }\n      break;\n    default:\n      shift(210);                   // 'phrase'\n    }\n    eventHandler.endNonterminal(\"FTAnyallOption\", e0);\n  }\n\n  function try_FTAnyallOption()\n  {\n    switch (l1)\n    {\n    case 76:                        // 'any'\n      shiftT(76);                   // 'any'\n      lookahead1W(218);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n                                    // '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' |\n                                    // 'before' | 'case' | 'collation' | 'count' | 'default' | 'descending' |\n                                    // 'different' | 'distance' | 'else' | 'empty' | 'end' | 'entire' | 'eq' | 'for' |\n                                    // 'ftand' | 'ftor' | 'ge' | 'group' | 'gt' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'modify' | 'ne' | 'not' | 'occurs' | 'only' | 'or' | 'order' | 'ordered' |\n                                    // 'return' | 'same' | 'satisfies' | 'stable' | 'start' | 'using' | 'weight' |\n                                    // 'where' | 'window' | 'with' | 'without' | 'word' | '|}' | '}'\n      if (l1 == 272)                // 'word'\n      {\n        shiftT(272);                // 'word'\n      }\n      break;\n    case 71:                        // 'all'\n      shiftT(71);                   // 'all'\n      lookahead1W(219);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n                                    // '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' |\n                                    // 'before' | 'case' | 'collation' | 'count' | 'default' | 'descending' |\n                                    // 'different' | 'distance' | 'else' | 'empty' | 'end' | 'entire' | 'eq' | 'for' |\n                                    // 'ftand' | 'ftor' | 'ge' | 'group' | 'gt' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'modify' | 'ne' | 'not' | 'occurs' | 'only' | 'or' | 'order' | 'ordered' |\n                                    // 'return' | 'same' | 'satisfies' | 'stable' | 'start' | 'using' | 'weight' |\n                                    // 'where' | 'window' | 'with' | 'without' | 'words' | '|}' | '}'\n      if (l1 == 273)                // 'words'\n      {\n        shiftT(273);                // 'words'\n      }\n      break;\n    default:\n      shiftT(210);                  // 'phrase'\n    }\n  }\n\n  function parse_FTTimes()\n  {\n    eventHandler.startNonterminal(\"FTTimes\", e0);\n    shift(195);                     // 'occurs'\n    lookahead1W(149);               // S^WS | '(:' | 'at' | 'exactly' | 'from'\n    whitespace();\n    parse_FTRange();\n    shift(247);                     // 'times'\n    eventHandler.endNonterminal(\"FTTimes\", e0);\n  }\n\n  function try_FTTimes()\n  {\n    shiftT(195);                    // 'occurs'\n    lookahead1W(149);               // S^WS | '(:' | 'at' | 'exactly' | 'from'\n    try_FTRange();\n    shiftT(247);                    // 'times'\n  }\n\n  function parse_FTRange()\n  {\n    eventHandler.startNonterminal(\"FTRange\", e0);\n    switch (l1)\n    {\n    case 130:                       // 'exactly'\n      shift(130);                   // 'exactly'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      whitespace();\n      parse_AdditiveExpr();\n      break;\n    case 81:                        // 'at'\n      shift(81);                    // 'at'\n      lookahead1W(125);             // S^WS | '(:' | 'least' | 'most'\n      switch (l1)\n      {\n      case 173:                     // 'least'\n        shift(173);                 // 'least'\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n        whitespace();\n        parse_AdditiveExpr();\n        break;\n      default:\n        shift(183);                 // 'most'\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n        whitespace();\n        parse_AdditiveExpr();\n      }\n      break;\n    default:\n      shift(140);                   // 'from'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      whitespace();\n      parse_AdditiveExpr();\n      shift(248);                   // 'to'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      whitespace();\n      parse_AdditiveExpr();\n    }\n    eventHandler.endNonterminal(\"FTRange\", e0);\n  }\n\n  function try_FTRange()\n  {\n    switch (l1)\n    {\n    case 130:                       // 'exactly'\n      shiftT(130);                  // 'exactly'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      try_AdditiveExpr();\n      break;\n    case 81:                        // 'at'\n      shiftT(81);                   // 'at'\n      lookahead1W(125);             // S^WS | '(:' | 'least' | 'most'\n      switch (l1)\n      {\n      case 173:                     // 'least'\n        shiftT(173);                // 'least'\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n        try_AdditiveExpr();\n        break;\n      default:\n        shiftT(183);                // 'most'\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n        try_AdditiveExpr();\n      }\n      break;\n    default:\n      shiftT(140);                  // 'from'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      try_AdditiveExpr();\n      shiftT(248);                  // 'to'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      try_AdditiveExpr();\n    }\n  }\n\n  function parse_FTPosFilter()\n  {\n    eventHandler.startNonterminal(\"FTPosFilter\", e0);\n    switch (l1)\n    {\n    case 202:                       // 'ordered'\n      parse_FTOrder();\n      break;\n    case 269:                       // 'window'\n      parse_FTWindow();\n      break;\n    case 117:                       // 'distance'\n      parse_FTDistance();\n      break;\n    case 115:                       // 'different'\n    case 223:                       // 'same'\n      parse_FTScope();\n      break;\n    default:\n      parse_FTContent();\n    }\n    eventHandler.endNonterminal(\"FTPosFilter\", e0);\n  }\n\n  function try_FTPosFilter()\n  {\n    switch (l1)\n    {\n    case 202:                       // 'ordered'\n      try_FTOrder();\n      break;\n    case 269:                       // 'window'\n      try_FTWindow();\n      break;\n    case 117:                       // 'distance'\n      try_FTDistance();\n      break;\n    case 115:                       // 'different'\n    case 223:                       // 'same'\n      try_FTScope();\n      break;\n    default:\n      try_FTContent();\n    }\n  }\n\n  function parse_FTOrder()\n  {\n    eventHandler.startNonterminal(\"FTOrder\", e0);\n    shift(202);                     // 'ordered'\n    eventHandler.endNonterminal(\"FTOrder\", e0);\n  }\n\n  function try_FTOrder()\n  {\n    shiftT(202);                    // 'ordered'\n  }\n\n  function parse_FTWindow()\n  {\n    eventHandler.startNonterminal(\"FTWindow\", e0);\n    shift(269);                     // 'window'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_AdditiveExpr();\n    whitespace();\n    parse_FTUnit();\n    eventHandler.endNonterminal(\"FTWindow\", e0);\n  }\n\n  function try_FTWindow()\n  {\n    shiftT(269);                    // 'window'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_AdditiveExpr();\n    try_FTUnit();\n  }\n\n  function parse_FTDistance()\n  {\n    eventHandler.startNonterminal(\"FTDistance\", e0);\n    shift(117);                     // 'distance'\n    lookahead1W(149);               // S^WS | '(:' | 'at' | 'exactly' | 'from'\n    whitespace();\n    parse_FTRange();\n    whitespace();\n    parse_FTUnit();\n    eventHandler.endNonterminal(\"FTDistance\", e0);\n  }\n\n  function try_FTDistance()\n  {\n    shiftT(117);                    // 'distance'\n    lookahead1W(149);               // S^WS | '(:' | 'at' | 'exactly' | 'from'\n    try_FTRange();\n    try_FTUnit();\n  }\n\n  function parse_FTUnit()\n  {\n    eventHandler.startNonterminal(\"FTUnit\", e0);\n    switch (l1)\n    {\n    case 273:                       // 'words'\n      shift(273);                   // 'words'\n      break;\n    case 232:                       // 'sentences'\n      shift(232);                   // 'sentences'\n      break;\n    default:\n      shift(205);                   // 'paragraphs'\n    }\n    eventHandler.endNonterminal(\"FTUnit\", e0);\n  }\n\n  function try_FTUnit()\n  {\n    switch (l1)\n    {\n    case 273:                       // 'words'\n      shiftT(273);                  // 'words'\n      break;\n    case 232:                       // 'sentences'\n      shiftT(232);                  // 'sentences'\n      break;\n    default:\n      shiftT(205);                  // 'paragraphs'\n    }\n  }\n\n  function parse_FTScope()\n  {\n    eventHandler.startNonterminal(\"FTScope\", e0);\n    switch (l1)\n    {\n    case 223:                       // 'same'\n      shift(223);                   // 'same'\n      break;\n    default:\n      shift(115);                   // 'different'\n    }\n    lookahead1W(132);               // S^WS | '(:' | 'paragraph' | 'sentence'\n    whitespace();\n    parse_FTBigUnit();\n    eventHandler.endNonterminal(\"FTScope\", e0);\n  }\n\n  function try_FTScope()\n  {\n    switch (l1)\n    {\n    case 223:                       // 'same'\n      shiftT(223);                  // 'same'\n      break;\n    default:\n      shiftT(115);                  // 'different'\n    }\n    lookahead1W(132);               // S^WS | '(:' | 'paragraph' | 'sentence'\n    try_FTBigUnit();\n  }\n\n  function parse_FTBigUnit()\n  {\n    eventHandler.startNonterminal(\"FTBigUnit\", e0);\n    switch (l1)\n    {\n    case 231:                       // 'sentence'\n      shift(231);                   // 'sentence'\n      break;\n    default:\n      shift(204);                   // 'paragraph'\n    }\n    eventHandler.endNonterminal(\"FTBigUnit\", e0);\n  }\n\n  function try_FTBigUnit()\n  {\n    switch (l1)\n    {\n    case 231:                       // 'sentence'\n      shiftT(231);                  // 'sentence'\n      break;\n    default:\n      shiftT(204);                  // 'paragraph'\n    }\n  }\n\n  function parse_FTContent()\n  {\n    eventHandler.startNonterminal(\"FTContent\", e0);\n    switch (l1)\n    {\n    case 81:                        // 'at'\n      shift(81);                    // 'at'\n      lookahead1W(117);             // S^WS | '(:' | 'end' | 'start'\n      switch (l1)\n      {\n      case 237:                     // 'start'\n        shift(237);                 // 'start'\n        break;\n      default:\n        shift(126);                 // 'end'\n      }\n      break;\n    default:\n      shift(127);                   // 'entire'\n      lookahead1W(42);              // S^WS | '(:' | 'content'\n      shift(100);                   // 'content'\n    }\n    eventHandler.endNonterminal(\"FTContent\", e0);\n  }\n\n  function try_FTContent()\n  {\n    switch (l1)\n    {\n    case 81:                        // 'at'\n      shiftT(81);                   // 'at'\n      lookahead1W(117);             // S^WS | '(:' | 'end' | 'start'\n      switch (l1)\n      {\n      case 237:                     // 'start'\n        shiftT(237);                // 'start'\n        break;\n      default:\n        shiftT(126);                // 'end'\n      }\n      break;\n    default:\n      shiftT(127);                  // 'entire'\n      lookahead1W(42);              // S^WS | '(:' | 'content'\n      shiftT(100);                  // 'content'\n    }\n  }\n\n  function parse_FTMatchOptions()\n  {\n    eventHandler.startNonterminal(\"FTMatchOptions\", e0);\n    for (;;)\n    {\n      shift(259);                   // 'using'\n      lookahead1W(181);             // S^WS | '(:' | 'case' | 'diacritics' | 'language' | 'lowercase' | 'no' |\n                                    // 'option' | 'stemming' | 'stop' | 'thesaurus' | 'uppercase' | 'wildcards'\n      whitespace();\n      parse_FTMatchOption();\n      lookahead1W(214);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n                                    // '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' |\n                                    // 'before' | 'case' | 'collation' | 'count' | 'default' | 'descending' |\n                                    // 'different' | 'distance' | 'else' | 'empty' | 'end' | 'entire' | 'eq' | 'for' |\n                                    // 'ftand' | 'ftor' | 'ge' | 'group' | 'gt' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'modify' | 'ne' | 'not' | 'only' | 'or' | 'order' | 'ordered' | 'return' |\n                                    // 'same' | 'satisfies' | 'stable' | 'start' | 'using' | 'weight' | 'where' |\n                                    // 'window' | 'with' | 'without' | '|}' | '}'\n      if (l1 != 259)                // 'using'\n      {\n        break;\n      }\n    }\n    eventHandler.endNonterminal(\"FTMatchOptions\", e0);\n  }\n\n  function try_FTMatchOptions()\n  {\n    for (;;)\n    {\n      shiftT(259);                  // 'using'\n      lookahead1W(181);             // S^WS | '(:' | 'case' | 'diacritics' | 'language' | 'lowercase' | 'no' |\n                                    // 'option' | 'stemming' | 'stop' | 'thesaurus' | 'uppercase' | 'wildcards'\n      try_FTMatchOption();\n      lookahead1W(214);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n                                    // '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' |\n                                    // 'before' | 'case' | 'collation' | 'count' | 'default' | 'descending' |\n                                    // 'different' | 'distance' | 'else' | 'empty' | 'end' | 'entire' | 'eq' | 'for' |\n                                    // 'ftand' | 'ftor' | 'ge' | 'group' | 'gt' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'modify' | 'ne' | 'not' | 'only' | 'or' | 'order' | 'ordered' | 'return' |\n                                    // 'same' | 'satisfies' | 'stable' | 'start' | 'using' | 'weight' | 'where' |\n                                    // 'window' | 'with' | 'without' | '|}' | '}'\n      if (l1 != 259)                // 'using'\n      {\n        break;\n      }\n    }\n  }\n\n  function parse_FTMatchOption()\n  {\n    eventHandler.startNonterminal(\"FTMatchOption\", e0);\n    switch (l1)\n    {\n    case 188:                       // 'no'\n      lookahead2W(161);             // S^WS | '(:' | 'stemming' | 'stop' | 'thesaurus' | 'wildcards'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 169:                       // 'language'\n      parse_FTLanguageOption();\n      break;\n    case 268:                       // 'wildcards'\n    case 137404:                    // 'no' 'wildcards'\n      parse_FTWildCardOption();\n      break;\n    case 246:                       // 'thesaurus'\n    case 126140:                    // 'no' 'thesaurus'\n      parse_FTThesaurusOption();\n      break;\n    case 238:                       // 'stemming'\n    case 122044:                    // 'no' 'stemming'\n      parse_FTStemOption();\n      break;\n    case 114:                       // 'diacritics'\n      parse_FTDiacriticsOption();\n      break;\n    case 239:                       // 'stop'\n    case 122556:                    // 'no' 'stop'\n      parse_FTStopWordOption();\n      break;\n    case 199:                       // 'option'\n      parse_FTExtensionOption();\n      break;\n    default:\n      parse_FTCaseOption();\n    }\n    eventHandler.endNonterminal(\"FTMatchOption\", e0);\n  }\n\n  function try_FTMatchOption()\n  {\n    switch (l1)\n    {\n    case 188:                       // 'no'\n      lookahead2W(161);             // S^WS | '(:' | 'stemming' | 'stop' | 'thesaurus' | 'wildcards'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 169:                       // 'language'\n      try_FTLanguageOption();\n      break;\n    case 268:                       // 'wildcards'\n    case 137404:                    // 'no' 'wildcards'\n      try_FTWildCardOption();\n      break;\n    case 246:                       // 'thesaurus'\n    case 126140:                    // 'no' 'thesaurus'\n      try_FTThesaurusOption();\n      break;\n    case 238:                       // 'stemming'\n    case 122044:                    // 'no' 'stemming'\n      try_FTStemOption();\n      break;\n    case 114:                       // 'diacritics'\n      try_FTDiacriticsOption();\n      break;\n    case 239:                       // 'stop'\n    case 122556:                    // 'no' 'stop'\n      try_FTStopWordOption();\n      break;\n    case 199:                       // 'option'\n      try_FTExtensionOption();\n      break;\n    default:\n      try_FTCaseOption();\n    }\n  }\n\n  function parse_FTCaseOption()\n  {\n    eventHandler.startNonterminal(\"FTCaseOption\", e0);\n    switch (l1)\n    {\n    case 88:                        // 'case'\n      shift(88);                    // 'case'\n      lookahead1W(124);             // S^WS | '(:' | 'insensitive' | 'sensitive'\n      switch (l1)\n      {\n      case 158:                     // 'insensitive'\n        shift(158);                 // 'insensitive'\n        break;\n      default:\n        shift(230);                 // 'sensitive'\n      }\n      break;\n    case 177:                       // 'lowercase'\n      shift(177);                   // 'lowercase'\n      break;\n    default:\n      shift(258);                   // 'uppercase'\n    }\n    eventHandler.endNonterminal(\"FTCaseOption\", e0);\n  }\n\n  function try_FTCaseOption()\n  {\n    switch (l1)\n    {\n    case 88:                        // 'case'\n      shiftT(88);                   // 'case'\n      lookahead1W(124);             // S^WS | '(:' | 'insensitive' | 'sensitive'\n      switch (l1)\n      {\n      case 158:                     // 'insensitive'\n        shiftT(158);                // 'insensitive'\n        break;\n      default:\n        shiftT(230);                // 'sensitive'\n      }\n      break;\n    case 177:                       // 'lowercase'\n      shiftT(177);                  // 'lowercase'\n      break;\n    default:\n      shiftT(258);                  // 'uppercase'\n    }\n  }\n\n  function parse_FTDiacriticsOption()\n  {\n    eventHandler.startNonterminal(\"FTDiacriticsOption\", e0);\n    shift(114);                     // 'diacritics'\n    lookahead1W(124);               // S^WS | '(:' | 'insensitive' | 'sensitive'\n    switch (l1)\n    {\n    case 158:                       // 'insensitive'\n      shift(158);                   // 'insensitive'\n      break;\n    default:\n      shift(230);                   // 'sensitive'\n    }\n    eventHandler.endNonterminal(\"FTDiacriticsOption\", e0);\n  }\n\n  function try_FTDiacriticsOption()\n  {\n    shiftT(114);                    // 'diacritics'\n    lookahead1W(124);               // S^WS | '(:' | 'insensitive' | 'sensitive'\n    switch (l1)\n    {\n    case 158:                       // 'insensitive'\n      shiftT(158);                  // 'insensitive'\n      break;\n    default:\n      shiftT(230);                  // 'sensitive'\n    }\n  }\n\n  function parse_FTStemOption()\n  {\n    eventHandler.startNonterminal(\"FTStemOption\", e0);\n    switch (l1)\n    {\n    case 238:                       // 'stemming'\n      shift(238);                   // 'stemming'\n      break;\n    default:\n      shift(188);                   // 'no'\n      lookahead1W(74);              // S^WS | '(:' | 'stemming'\n      shift(238);                   // 'stemming'\n    }\n    eventHandler.endNonterminal(\"FTStemOption\", e0);\n  }\n\n  function try_FTStemOption()\n  {\n    switch (l1)\n    {\n    case 238:                       // 'stemming'\n      shiftT(238);                  // 'stemming'\n      break;\n    default:\n      shiftT(188);                  // 'no'\n      lookahead1W(74);              // S^WS | '(:' | 'stemming'\n      shiftT(238);                  // 'stemming'\n    }\n  }\n\n  function parse_FTThesaurusOption()\n  {\n    eventHandler.startNonterminal(\"FTThesaurusOption\", e0);\n    switch (l1)\n    {\n    case 246:                       // 'thesaurus'\n      shift(246);                   // 'thesaurus'\n      lookahead1W(142);             // S^WS | '(' | '(:' | 'at' | 'default'\n      switch (l1)\n      {\n      case 81:                      // 'at'\n        whitespace();\n        parse_FTThesaurusID();\n        break;\n      case 109:                     // 'default'\n        shift(109);                 // 'default'\n        break;\n      default:\n        shift(34);                  // '('\n        lookahead1W(112);           // S^WS | '(:' | 'at' | 'default'\n        switch (l1)\n        {\n        case 81:                    // 'at'\n          whitespace();\n          parse_FTThesaurusID();\n          break;\n        default:\n          shift(109);               // 'default'\n        }\n        for (;;)\n        {\n          lookahead1W(101);         // S^WS | '(:' | ')' | ','\n          if (l1 != 41)             // ','\n          {\n            break;\n          }\n          shift(41);                // ','\n          lookahead1W(31);          // S^WS | '(:' | 'at'\n          whitespace();\n          parse_FTThesaurusID();\n        }\n        shift(37);                  // ')'\n      }\n      break;\n    default:\n      shift(188);                   // 'no'\n      lookahead1W(78);              // S^WS | '(:' | 'thesaurus'\n      shift(246);                   // 'thesaurus'\n    }\n    eventHandler.endNonterminal(\"FTThesaurusOption\", e0);\n  }\n\n  function try_FTThesaurusOption()\n  {\n    switch (l1)\n    {\n    case 246:                       // 'thesaurus'\n      shiftT(246);                  // 'thesaurus'\n      lookahead1W(142);             // S^WS | '(' | '(:' | 'at' | 'default'\n      switch (l1)\n      {\n      case 81:                      // 'at'\n        try_FTThesaurusID();\n        break;\n      case 109:                     // 'default'\n        shiftT(109);                // 'default'\n        break;\n      default:\n        shiftT(34);                 // '('\n        lookahead1W(112);           // S^WS | '(:' | 'at' | 'default'\n        switch (l1)\n        {\n        case 81:                    // 'at'\n          try_FTThesaurusID();\n          break;\n        default:\n          shiftT(109);              // 'default'\n        }\n        for (;;)\n        {\n          lookahead1W(101);         // S^WS | '(:' | ')' | ','\n          if (l1 != 41)             // ','\n          {\n            break;\n          }\n          shiftT(41);               // ','\n          lookahead1W(31);          // S^WS | '(:' | 'at'\n          try_FTThesaurusID();\n        }\n        shiftT(37);                 // ')'\n      }\n      break;\n    default:\n      shiftT(188);                  // 'no'\n      lookahead1W(78);              // S^WS | '(:' | 'thesaurus'\n      shiftT(246);                  // 'thesaurus'\n    }\n  }\n\n  function parse_FTThesaurusID()\n  {\n    eventHandler.startNonterminal(\"FTThesaurusID\", e0);\n    shift(81);                      // 'at'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    lookahead1W(220);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n                                    // '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' |\n                                    // 'before' | 'case' | 'collation' | 'count' | 'default' | 'descending' |\n                                    // 'different' | 'distance' | 'else' | 'empty' | 'end' | 'entire' | 'eq' |\n                                    // 'exactly' | 'for' | 'from' | 'ftand' | 'ftor' | 'ge' | 'group' | 'gt' | 'into' |\n                                    // 'is' | 'le' | 'let' | 'lt' | 'modify' | 'ne' | 'not' | 'only' | 'or' | 'order' |\n                                    // 'ordered' | 'relationship' | 'return' | 'same' | 'satisfies' | 'stable' |\n                                    // 'start' | 'using' | 'weight' | 'where' | 'window' | 'with' | 'without' | '|}' |\n                                    // '}'\n    if (l1 == 217)                  // 'relationship'\n    {\n      shift(217);                   // 'relationship'\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shift(11);                    // StringLiteral\n    }\n    lookahead1W(216);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n                                    // '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' |\n                                    // 'before' | 'case' | 'collation' | 'count' | 'default' | 'descending' |\n                                    // 'different' | 'distance' | 'else' | 'empty' | 'end' | 'entire' | 'eq' |\n                                    // 'exactly' | 'for' | 'from' | 'ftand' | 'ftor' | 'ge' | 'group' | 'gt' | 'into' |\n                                    // 'is' | 'le' | 'let' | 'lt' | 'modify' | 'ne' | 'not' | 'only' | 'or' | 'order' |\n                                    // 'ordered' | 'return' | 'same' | 'satisfies' | 'stable' | 'start' | 'using' |\n                                    // 'weight' | 'where' | 'window' | 'with' | 'without' | '|}' | '}'\n    switch (l1)\n    {\n    case 81:                        // 'at'\n      lookahead2W(165);             // S^WS | '(:' | 'end' | 'least' | 'most' | 'position' | 'start'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 130                   // 'exactly'\n     || lk == 140                   // 'from'\n     || lk == 88657                 // 'at' 'least'\n     || lk == 93777)                // 'at' 'most'\n    {\n      whitespace();\n      parse_FTLiteralRange();\n      lookahead1W(58);              // S^WS | '(:' | 'levels'\n      shift(175);                   // 'levels'\n    }\n    eventHandler.endNonterminal(\"FTThesaurusID\", e0);\n  }\n\n  function try_FTThesaurusID()\n  {\n    shiftT(81);                     // 'at'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shiftT(7);                      // URILiteral\n    lookahead1W(220);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n                                    // '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' |\n                                    // 'before' | 'case' | 'collation' | 'count' | 'default' | 'descending' |\n                                    // 'different' | 'distance' | 'else' | 'empty' | 'end' | 'entire' | 'eq' |\n                                    // 'exactly' | 'for' | 'from' | 'ftand' | 'ftor' | 'ge' | 'group' | 'gt' | 'into' |\n                                    // 'is' | 'le' | 'let' | 'lt' | 'modify' | 'ne' | 'not' | 'only' | 'or' | 'order' |\n                                    // 'ordered' | 'relationship' | 'return' | 'same' | 'satisfies' | 'stable' |\n                                    // 'start' | 'using' | 'weight' | 'where' | 'window' | 'with' | 'without' | '|}' |\n                                    // '}'\n    if (l1 == 217)                  // 'relationship'\n    {\n      shiftT(217);                  // 'relationship'\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shiftT(11);                   // StringLiteral\n    }\n    lookahead1W(216);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n                                    // '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' |\n                                    // 'before' | 'case' | 'collation' | 'count' | 'default' | 'descending' |\n                                    // 'different' | 'distance' | 'else' | 'empty' | 'end' | 'entire' | 'eq' |\n                                    // 'exactly' | 'for' | 'from' | 'ftand' | 'ftor' | 'ge' | 'group' | 'gt' | 'into' |\n                                    // 'is' | 'le' | 'let' | 'lt' | 'modify' | 'ne' | 'not' | 'only' | 'or' | 'order' |\n                                    // 'ordered' | 'return' | 'same' | 'satisfies' | 'stable' | 'start' | 'using' |\n                                    // 'weight' | 'where' | 'window' | 'with' | 'without' | '|}' | '}'\n    switch (l1)\n    {\n    case 81:                        // 'at'\n      lookahead2W(165);             // S^WS | '(:' | 'end' | 'least' | 'most' | 'position' | 'start'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 130                   // 'exactly'\n     || lk == 140                   // 'from'\n     || lk == 88657                 // 'at' 'least'\n     || lk == 93777)                // 'at' 'most'\n    {\n      try_FTLiteralRange();\n      lookahead1W(58);              // S^WS | '(:' | 'levels'\n      shiftT(175);                  // 'levels'\n    }\n  }\n\n  function parse_FTLiteralRange()\n  {\n    eventHandler.startNonterminal(\"FTLiteralRange\", e0);\n    switch (l1)\n    {\n    case 130:                       // 'exactly'\n      shift(130);                   // 'exactly'\n      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'\n      shift(8);                     // IntegerLiteral\n      break;\n    case 81:                        // 'at'\n      shift(81);                    // 'at'\n      lookahead1W(125);             // S^WS | '(:' | 'least' | 'most'\n      switch (l1)\n      {\n      case 173:                     // 'least'\n        shift(173);                 // 'least'\n        lookahead1W(16);            // IntegerLiteral | S^WS | '(:'\n        shift(8);                   // IntegerLiteral\n        break;\n      default:\n        shift(183);                 // 'most'\n        lookahead1W(16);            // IntegerLiteral | S^WS | '(:'\n        shift(8);                   // IntegerLiteral\n      }\n      break;\n    default:\n      shift(140);                   // 'from'\n      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'\n      shift(8);                     // IntegerLiteral\n      lookahead1W(79);              // S^WS | '(:' | 'to'\n      shift(248);                   // 'to'\n      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'\n      shift(8);                     // IntegerLiteral\n    }\n    eventHandler.endNonterminal(\"FTLiteralRange\", e0);\n  }\n\n  function try_FTLiteralRange()\n  {\n    switch (l1)\n    {\n    case 130:                       // 'exactly'\n      shiftT(130);                  // 'exactly'\n      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'\n      shiftT(8);                    // IntegerLiteral\n      break;\n    case 81:                        // 'at'\n      shiftT(81);                   // 'at'\n      lookahead1W(125);             // S^WS | '(:' | 'least' | 'most'\n      switch (l1)\n      {\n      case 173:                     // 'least'\n        shiftT(173);                // 'least'\n        lookahead1W(16);            // IntegerLiteral | S^WS | '(:'\n        shiftT(8);                  // IntegerLiteral\n        break;\n      default:\n        shiftT(183);                // 'most'\n        lookahead1W(16);            // IntegerLiteral | S^WS | '(:'\n        shiftT(8);                  // IntegerLiteral\n      }\n      break;\n    default:\n      shiftT(140);                  // 'from'\n      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'\n      shiftT(8);                    // IntegerLiteral\n      lookahead1W(79);              // S^WS | '(:' | 'to'\n      shiftT(248);                  // 'to'\n      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'\n      shiftT(8);                    // IntegerLiteral\n    }\n  }\n\n  function parse_FTStopWordOption()\n  {\n    eventHandler.startNonterminal(\"FTStopWordOption\", e0);\n    switch (l1)\n    {\n    case 239:                       // 'stop'\n      shift(239);                   // 'stop'\n      lookahead1W(86);              // S^WS | '(:' | 'words'\n      shift(273);                   // 'words'\n      lookahead1W(142);             // S^WS | '(' | '(:' | 'at' | 'default'\n      switch (l1)\n      {\n      case 109:                     // 'default'\n        shift(109);                 // 'default'\n        for (;;)\n        {\n          lookahead1W(217);         // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n                                    // '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' |\n                                    // 'before' | 'case' | 'collation' | 'count' | 'default' | 'descending' |\n                                    // 'different' | 'distance' | 'else' | 'empty' | 'end' | 'entire' | 'eq' |\n                                    // 'except' | 'for' | 'ftand' | 'ftor' | 'ge' | 'group' | 'gt' | 'into' | 'is' |\n                                    // 'le' | 'let' | 'lt' | 'modify' | 'ne' | 'not' | 'only' | 'or' | 'order' |\n                                    // 'ordered' | 'return' | 'same' | 'satisfies' | 'stable' | 'start' | 'union' |\n                                    // 'using' | 'weight' | 'where' | 'window' | 'with' | 'without' | '|}' | '}'\n          if (l1 != 131             // 'except'\n           && l1 != 254)            // 'union'\n          {\n            break;\n          }\n          whitespace();\n          parse_FTStopWordsInclExcl();\n        }\n        break;\n      default:\n        whitespace();\n        parse_FTStopWords();\n        for (;;)\n        {\n          lookahead1W(217);         // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n                                    // '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' |\n                                    // 'before' | 'case' | 'collation' | 'count' | 'default' | 'descending' |\n                                    // 'different' | 'distance' | 'else' | 'empty' | 'end' | 'entire' | 'eq' |\n                                    // 'except' | 'for' | 'ftand' | 'ftor' | 'ge' | 'group' | 'gt' | 'into' | 'is' |\n                                    // 'le' | 'let' | 'lt' | 'modify' | 'ne' | 'not' | 'only' | 'or' | 'order' |\n                                    // 'ordered' | 'return' | 'same' | 'satisfies' | 'stable' | 'start' | 'union' |\n                                    // 'using' | 'weight' | 'where' | 'window' | 'with' | 'without' | '|}' | '}'\n          if (l1 != 131             // 'except'\n           && l1 != 254)            // 'union'\n          {\n            break;\n          }\n          whitespace();\n          parse_FTStopWordsInclExcl();\n        }\n      }\n      break;\n    default:\n      shift(188);                   // 'no'\n      lookahead1W(75);              // S^WS | '(:' | 'stop'\n      shift(239);                   // 'stop'\n      lookahead1W(86);              // S^WS | '(:' | 'words'\n      shift(273);                   // 'words'\n    }\n    eventHandler.endNonterminal(\"FTStopWordOption\", e0);\n  }\n\n  function try_FTStopWordOption()\n  {\n    switch (l1)\n    {\n    case 239:                       // 'stop'\n      shiftT(239);                  // 'stop'\n      lookahead1W(86);              // S^WS | '(:' | 'words'\n      shiftT(273);                  // 'words'\n      lookahead1W(142);             // S^WS | '(' | '(:' | 'at' | 'default'\n      switch (l1)\n      {\n      case 109:                     // 'default'\n        shiftT(109);                // 'default'\n        for (;;)\n        {\n          lookahead1W(217);         // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n                                    // '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' |\n                                    // 'before' | 'case' | 'collation' | 'count' | 'default' | 'descending' |\n                                    // 'different' | 'distance' | 'else' | 'empty' | 'end' | 'entire' | 'eq' |\n                                    // 'except' | 'for' | 'ftand' | 'ftor' | 'ge' | 'group' | 'gt' | 'into' | 'is' |\n                                    // 'le' | 'let' | 'lt' | 'modify' | 'ne' | 'not' | 'only' | 'or' | 'order' |\n                                    // 'ordered' | 'return' | 'same' | 'satisfies' | 'stable' | 'start' | 'union' |\n                                    // 'using' | 'weight' | 'where' | 'window' | 'with' | 'without' | '|}' | '}'\n          if (l1 != 131             // 'except'\n           && l1 != 254)            // 'union'\n          {\n            break;\n          }\n          try_FTStopWordsInclExcl();\n        }\n        break;\n      default:\n        try_FTStopWords();\n        for (;;)\n        {\n          lookahead1W(217);         // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n                                    // '>' | '>=' | '>>' | ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' |\n                                    // 'before' | 'case' | 'collation' | 'count' | 'default' | 'descending' |\n                                    // 'different' | 'distance' | 'else' | 'empty' | 'end' | 'entire' | 'eq' |\n                                    // 'except' | 'for' | 'ftand' | 'ftor' | 'ge' | 'group' | 'gt' | 'into' | 'is' |\n                                    // 'le' | 'let' | 'lt' | 'modify' | 'ne' | 'not' | 'only' | 'or' | 'order' |\n                                    // 'ordered' | 'return' | 'same' | 'satisfies' | 'stable' | 'start' | 'union' |\n                                    // 'using' | 'weight' | 'where' | 'window' | 'with' | 'without' | '|}' | '}'\n          if (l1 != 131             // 'except'\n           && l1 != 254)            // 'union'\n          {\n            break;\n          }\n          try_FTStopWordsInclExcl();\n        }\n      }\n      break;\n    default:\n      shiftT(188);                  // 'no'\n      lookahead1W(75);              // S^WS | '(:' | 'stop'\n      shiftT(239);                  // 'stop'\n      lookahead1W(86);              // S^WS | '(:' | 'words'\n      shiftT(273);                  // 'words'\n    }\n  }\n\n  function parse_FTStopWords()\n  {\n    eventHandler.startNonterminal(\"FTStopWords\", e0);\n    switch (l1)\n    {\n    case 81:                        // 'at'\n      shift(81);                    // 'at'\n      lookahead1W(15);              // URILiteral | S^WS | '(:'\n      shift(7);                     // URILiteral\n      break;\n    default:\n      shift(34);                    // '('\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shift(11);                    // StringLiteral\n      for (;;)\n      {\n        lookahead1W(101);           // S^WS | '(:' | ')' | ','\n        if (l1 != 41)               // ','\n        {\n          break;\n        }\n        shift(41);                  // ','\n        lookahead1W(17);            // StringLiteral | S^WS | '(:'\n        shift(11);                  // StringLiteral\n      }\n      shift(37);                    // ')'\n    }\n    eventHandler.endNonterminal(\"FTStopWords\", e0);\n  }\n\n  function try_FTStopWords()\n  {\n    switch (l1)\n    {\n    case 81:                        // 'at'\n      shiftT(81);                   // 'at'\n      lookahead1W(15);              // URILiteral | S^WS | '(:'\n      shiftT(7);                    // URILiteral\n      break;\n    default:\n      shiftT(34);                   // '('\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shiftT(11);                   // StringLiteral\n      for (;;)\n      {\n        lookahead1W(101);           // S^WS | '(:' | ')' | ','\n        if (l1 != 41)               // ','\n        {\n          break;\n        }\n        shiftT(41);                 // ','\n        lookahead1W(17);            // StringLiteral | S^WS | '(:'\n        shiftT(11);                 // StringLiteral\n      }\n      shiftT(37);                   // ')'\n    }\n  }\n\n  function parse_FTStopWordsInclExcl()\n  {\n    eventHandler.startNonterminal(\"FTStopWordsInclExcl\", e0);\n    switch (l1)\n    {\n    case 254:                       // 'union'\n      shift(254);                   // 'union'\n      break;\n    default:\n      shift(131);                   // 'except'\n    }\n    lookahead1W(99);                // S^WS | '(' | '(:' | 'at'\n    whitespace();\n    parse_FTStopWords();\n    eventHandler.endNonterminal(\"FTStopWordsInclExcl\", e0);\n  }\n\n  function try_FTStopWordsInclExcl()\n  {\n    switch (l1)\n    {\n    case 254:                       // 'union'\n      shiftT(254);                  // 'union'\n      break;\n    default:\n      shiftT(131);                  // 'except'\n    }\n    lookahead1W(99);                // S^WS | '(' | '(:' | 'at'\n    try_FTStopWords();\n  }\n\n  function parse_FTLanguageOption()\n  {\n    eventHandler.startNonterminal(\"FTLanguageOption\", e0);\n    shift(169);                     // 'language'\n    lookahead1W(17);                // StringLiteral | S^WS | '(:'\n    shift(11);                      // StringLiteral\n    eventHandler.endNonterminal(\"FTLanguageOption\", e0);\n  }\n\n  function try_FTLanguageOption()\n  {\n    shiftT(169);                    // 'language'\n    lookahead1W(17);                // StringLiteral | S^WS | '(:'\n    shiftT(11);                     // StringLiteral\n  }\n\n  function parse_FTWildCardOption()\n  {\n    eventHandler.startNonterminal(\"FTWildCardOption\", e0);\n    switch (l1)\n    {\n    case 268:                       // 'wildcards'\n      shift(268);                   // 'wildcards'\n      break;\n    default:\n      shift(188);                   // 'no'\n      lookahead1W(84);              // S^WS | '(:' | 'wildcards'\n      shift(268);                   // 'wildcards'\n    }\n    eventHandler.endNonterminal(\"FTWildCardOption\", e0);\n  }\n\n  function try_FTWildCardOption()\n  {\n    switch (l1)\n    {\n    case 268:                       // 'wildcards'\n      shiftT(268);                  // 'wildcards'\n      break;\n    default:\n      shiftT(188);                  // 'no'\n      lookahead1W(84);              // S^WS | '(:' | 'wildcards'\n      shiftT(268);                  // 'wildcards'\n    }\n  }\n\n  function parse_FTExtensionOption()\n  {\n    eventHandler.startNonterminal(\"FTExtensionOption\", e0);\n    shift(199);                     // 'option'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    whitespace();\n    parse_EQName();\n    lookahead1W(17);                // StringLiteral | S^WS | '(:'\n    shift(11);                      // StringLiteral\n    eventHandler.endNonterminal(\"FTExtensionOption\", e0);\n  }\n\n  function try_FTExtensionOption()\n  {\n    shiftT(199);                    // 'option'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    try_EQName();\n    lookahead1W(17);                // StringLiteral | S^WS | '(:'\n    shiftT(11);                     // StringLiteral\n  }\n\n  function parse_FTIgnoreOption()\n  {\n    eventHandler.startNonterminal(\"FTIgnoreOption\", e0);\n    shift(271);                     // 'without'\n    lookahead1W(42);                // S^WS | '(:' | 'content'\n    shift(100);                     // 'content'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_UnionExpr();\n    eventHandler.endNonterminal(\"FTIgnoreOption\", e0);\n  }\n\n  function try_FTIgnoreOption()\n  {\n    shiftT(271);                    // 'without'\n    lookahead1W(42);                // S^WS | '(:' | 'content'\n    shiftT(100);                    // 'content'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_UnionExpr();\n  }\n\n  function parse_CollectionDecl()\n  {\n    eventHandler.startNonterminal(\"CollectionDecl\", e0);\n    shift(95);                      // 'collection'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    whitespace();\n    parse_EQName();\n    lookahead1W(107);               // S^WS | '(:' | ';' | 'as'\n    if (l1 == 79)                   // 'as'\n    {\n      whitespace();\n      parse_CollectionTypeDecl();\n    }\n    eventHandler.endNonterminal(\"CollectionDecl\", e0);\n  }\n\n  function parse_CollectionTypeDecl()\n  {\n    eventHandler.startNonterminal(\"CollectionTypeDecl\", e0);\n    shift(79);                      // 'as'\n    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    whitespace();\n    parse_ItemType();\n    lookahead1W(156);               // S^WS | '(:' | '*' | '+' | ';' | '?'\n    if (l1 != 53)                   // ';'\n    {\n      whitespace();\n      parse_OccurrenceIndicator();\n    }\n    eventHandler.endNonterminal(\"CollectionTypeDecl\", e0);\n  }\n\n  function parse_IndexName()\n  {\n    eventHandler.startNonterminal(\"IndexName\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"IndexName\", e0);\n  }\n\n  function parse_IndexDomainExpr()\n  {\n    eventHandler.startNonterminal(\"IndexDomainExpr\", e0);\n    parse_PathExpr();\n    eventHandler.endNonterminal(\"IndexDomainExpr\", e0);\n  }\n\n  function parse_IndexKeySpec()\n  {\n    eventHandler.startNonterminal(\"IndexKeySpec\", e0);\n    parse_IndexKeyExpr();\n    if (l1 == 79)                   // 'as'\n    {\n      whitespace();\n      parse_IndexKeyTypeDecl();\n    }\n    lookahead1W(146);               // S^WS | '(:' | ',' | ';' | 'collation'\n    if (l1 == 94)                   // 'collation'\n    {\n      whitespace();\n      parse_IndexKeyCollation();\n    }\n    eventHandler.endNonterminal(\"IndexKeySpec\", e0);\n  }\n\n  function parse_IndexKeyExpr()\n  {\n    eventHandler.startNonterminal(\"IndexKeyExpr\", e0);\n    parse_PathExpr();\n    eventHandler.endNonterminal(\"IndexKeyExpr\", e0);\n  }\n\n  function parse_IndexKeyTypeDecl()\n  {\n    eventHandler.startNonterminal(\"IndexKeyTypeDecl\", e0);\n    shift(79);                      // 'as'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    whitespace();\n    parse_AtomicType();\n    lookahead1W(169);               // S^WS | '(:' | '*' | '+' | ',' | ';' | '?' | 'collation'\n    if (l1 == 39                    // '*'\n     || l1 == 40                    // '+'\n     || l1 == 64)                   // '?'\n    {\n      whitespace();\n      parse_OccurrenceIndicator();\n    }\n    eventHandler.endNonterminal(\"IndexKeyTypeDecl\", e0);\n  }\n\n  function parse_AtomicType()\n  {\n    eventHandler.startNonterminal(\"AtomicType\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"AtomicType\", e0);\n  }\n\n  function parse_IndexKeyCollation()\n  {\n    eventHandler.startNonterminal(\"IndexKeyCollation\", e0);\n    shift(94);                      // 'collation'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    eventHandler.endNonterminal(\"IndexKeyCollation\", e0);\n  }\n\n  function parse_IndexDecl()\n  {\n    eventHandler.startNonterminal(\"IndexDecl\", e0);\n    shift(155);                     // 'index'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    whitespace();\n    parse_IndexName();\n    lookahead1W(65);                // S^WS | '(:' | 'on'\n    shift(197);                     // 'on'\n    lookahead1W(63);                // S^WS | '(:' | 'nodes'\n    shift(192);                     // 'nodes'\n    lookahead1W(265);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(:' | '.' | '..' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_IndexDomainExpr();\n    shift(87);                      // 'by'\n    lookahead1W(265);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(:' | '.' | '..' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_IndexKeySpec();\n    for (;;)\n    {\n      lookahead1W(103);             // S^WS | '(:' | ',' | ';'\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shift(41);                    // ','\n      lookahead1W(265);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(:' | '.' | '..' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      whitespace();\n      parse_IndexKeySpec();\n    }\n    eventHandler.endNonterminal(\"IndexDecl\", e0);\n  }\n\n  function parse_ICDecl()\n  {\n    eventHandler.startNonterminal(\"ICDecl\", e0);\n    shift(161);                     // 'integrity'\n    lookahead1W(40);                // S^WS | '(:' | 'constraint'\n    shift(97);                      // 'constraint'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    whitespace();\n    parse_EQName();\n    lookahead1W(120);               // S^WS | '(:' | 'foreign' | 'on'\n    switch (l1)\n    {\n    case 197:                       // 'on'\n      whitespace();\n      parse_ICCollection();\n      break;\n    default:\n      whitespace();\n      parse_ICForeignKey();\n    }\n    eventHandler.endNonterminal(\"ICDecl\", e0);\n  }\n\n  function parse_ICCollection()\n  {\n    eventHandler.startNonterminal(\"ICCollection\", e0);\n    shift(197);                     // 'on'\n    lookahead1W(39);                // S^WS | '(:' | 'collection'\n    shift(95);                      // 'collection'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    whitespace();\n    parse_EQName();\n    lookahead1W(140);               // S^WS | '$' | '(:' | 'foreach' | 'node'\n    switch (l1)\n    {\n    case 31:                        // '$'\n      whitespace();\n      parse_ICCollSequence();\n      break;\n    case 191:                       // 'node'\n      whitespace();\n      parse_ICCollSequenceUnique();\n      break;\n    default:\n      whitespace();\n      parse_ICCollNode();\n    }\n    eventHandler.endNonterminal(\"ICCollection\", e0);\n  }\n\n  function parse_ICCollSequence()\n  {\n    eventHandler.startNonterminal(\"ICCollSequence\", e0);\n    parse_VarRef();\n    lookahead1W(37);                // S^WS | '(:' | 'check'\n    shift(92);                      // 'check'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"ICCollSequence\", e0);\n  }\n\n  function parse_ICCollSequenceUnique()\n  {\n    eventHandler.startNonterminal(\"ICCollSequenceUnique\", e0);\n    shift(191);                     // 'node'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    whitespace();\n    parse_VarRef();\n    lookahead1W(37);                // S^WS | '(:' | 'check'\n    shift(92);                      // 'check'\n    lookahead1W(80);                // S^WS | '(:' | 'unique'\n    shift(255);                     // 'unique'\n    lookahead1W(57);                // S^WS | '(:' | 'key'\n    shift(168);                     // 'key'\n    lookahead1W(265);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(:' | '.' | '..' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_PathExpr();\n    eventHandler.endNonterminal(\"ICCollSequenceUnique\", e0);\n  }\n\n  function parse_ICCollNode()\n  {\n    eventHandler.startNonterminal(\"ICCollNode\", e0);\n    shift(138);                     // 'foreach'\n    lookahead1W(62);                // S^WS | '(:' | 'node'\n    shift(191);                     // 'node'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    whitespace();\n    parse_VarRef();\n    lookahead1W(37);                // S^WS | '(:' | 'check'\n    shift(92);                      // 'check'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"ICCollNode\", e0);\n  }\n\n  function parse_ICForeignKey()\n  {\n    eventHandler.startNonterminal(\"ICForeignKey\", e0);\n    shift(139);                     // 'foreign'\n    lookahead1W(57);                // S^WS | '(:' | 'key'\n    shift(168);                     // 'key'\n    lookahead1W(51);                // S^WS | '(:' | 'from'\n    whitespace();\n    parse_ICForeignKeySource();\n    whitespace();\n    parse_ICForeignKeyTarget();\n    eventHandler.endNonterminal(\"ICForeignKey\", e0);\n  }\n\n  function parse_ICForeignKeySource()\n  {\n    eventHandler.startNonterminal(\"ICForeignKeySource\", e0);\n    shift(140);                     // 'from'\n    lookahead1W(39);                // S^WS | '(:' | 'collection'\n    whitespace();\n    parse_ICForeignKeyValues();\n    eventHandler.endNonterminal(\"ICForeignKeySource\", e0);\n  }\n\n  function parse_ICForeignKeyTarget()\n  {\n    eventHandler.startNonterminal(\"ICForeignKeyTarget\", e0);\n    shift(248);                     // 'to'\n    lookahead1W(39);                // S^WS | '(:' | 'collection'\n    whitespace();\n    parse_ICForeignKeyValues();\n    eventHandler.endNonterminal(\"ICForeignKeyTarget\", e0);\n  }\n\n  function parse_ICForeignKeyValues()\n  {\n    eventHandler.startNonterminal(\"ICForeignKeyValues\", e0);\n    shift(95);                      // 'collection'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    whitespace();\n    parse_EQName();\n    lookahead1W(62);                // S^WS | '(:' | 'node'\n    shift(191);                     // 'node'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    whitespace();\n    parse_VarRef();\n    lookahead1W(57);                // S^WS | '(:' | 'key'\n    shift(168);                     // 'key'\n    lookahead1W(265);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(:' | '.' | '..' | '/' | '//' | '<' |\n                                    // '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_PathExpr();\n    eventHandler.endNonterminal(\"ICForeignKeyValues\", e0);\n  }\n\n  function try_Comment()\n  {\n    shiftT(36);                     // '(:'\n    for (;;)\n    {\n      lookahead1(89);               // CommentContents | '(:' | ':)'\n      if (l1 == 50)                 // ':)'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 24:                      // CommentContents\n        shiftT(24);                 // CommentContents\n        break;\n      default:\n        try_Comment();\n      }\n    }\n    shiftT(50);                     // ':)'\n  }\n\n  function try_Whitespace()\n  {\n    switch (l1)\n    {\n    case 22:                        // S^WS\n      shiftT(22);                   // S^WS\n      break;\n    default:\n      try_Comment();\n    }\n  }\n\n  function parse_EQName()\n  {\n    eventHandler.startNonterminal(\"EQName\", e0);\n    lookahead1(249);                // EQName^Token | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' |\n                                    // 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' |\n                                    // 'before' | 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' |\n                                    // 'child' | 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'first' | 'following' | 'following-sibling' | 'for' |\n                                    // 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' |\n                                    // 'in' | 'index' | 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' |\n                                    // 'is' | 'item' | 'json' | 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' |\n                                    // 'lt' | 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' |\n                                    // 'node' | 'nodes' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'self' | 'sliding' | 'some' | 'stable' | 'start' | 'strict' |\n                                    // 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'try' | 'tumbling' |\n                                    // 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' |\n                                    // 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' | 'xquery'\n    switch (l1)\n    {\n    case 82:                        // 'attribute'\n      shift(82);                    // 'attribute'\n      break;\n    case 96:                        // 'comment'\n      shift(96);                    // 'comment'\n      break;\n    case 120:                       // 'document-node'\n      shift(120);                   // 'document-node'\n      break;\n    case 121:                       // 'element'\n      shift(121);                   // 'element'\n      break;\n    case 124:                       // 'empty-sequence'\n      shift(124);                   // 'empty-sequence'\n      break;\n    case 145:                       // 'function'\n      shift(145);                   // 'function'\n      break;\n    case 152:                       // 'if'\n      shift(152);                   // 'if'\n      break;\n    case 165:                       // 'item'\n      shift(165);                   // 'item'\n      break;\n    case 185:                       // 'namespace-node'\n      shift(185);                   // 'namespace-node'\n      break;\n    case 191:                       // 'node'\n      shift(191);                   // 'node'\n      break;\n    case 216:                       // 'processing-instruction'\n      shift(216);                   // 'processing-instruction'\n      break;\n    case 226:                       // 'schema-attribute'\n      shift(226);                   // 'schema-attribute'\n      break;\n    case 227:                       // 'schema-element'\n      shift(227);                   // 'schema-element'\n      break;\n    case 243:                       // 'switch'\n      shift(243);                   // 'switch'\n      break;\n    case 244:                       // 'text'\n      shift(244);                   // 'text'\n      break;\n    case 253:                       // 'typeswitch'\n      shift(253);                   // 'typeswitch'\n      break;\n    case 78:                        // 'array'\n      shift(78);                    // 'array'\n      break;\n    case 167:                       // 'json-item'\n      shift(167);                   // 'json-item'\n      break;\n    case 242:                       // 'structured-item'\n      shift(242);                   // 'structured-item'\n      break;\n    default:\n      parse_FunctionName();\n    }\n    eventHandler.endNonterminal(\"EQName\", e0);\n  }\n\n  function try_EQName()\n  {\n    lookahead1(249);                // EQName^Token | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' |\n                                    // 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' |\n                                    // 'before' | 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' |\n                                    // 'child' | 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'first' | 'following' | 'following-sibling' | 'for' |\n                                    // 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' |\n                                    // 'in' | 'index' | 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' |\n                                    // 'is' | 'item' | 'json' | 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' |\n                                    // 'lt' | 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' |\n                                    // 'node' | 'nodes' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'self' | 'sliding' | 'some' | 'stable' | 'start' | 'strict' |\n                                    // 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'try' | 'tumbling' |\n                                    // 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' |\n                                    // 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' | 'xquery'\n    switch (l1)\n    {\n    case 82:                        // 'attribute'\n      shiftT(82);                   // 'attribute'\n      break;\n    case 96:                        // 'comment'\n      shiftT(96);                   // 'comment'\n      break;\n    case 120:                       // 'document-node'\n      shiftT(120);                  // 'document-node'\n      break;\n    case 121:                       // 'element'\n      shiftT(121);                  // 'element'\n      break;\n    case 124:                       // 'empty-sequence'\n      shiftT(124);                  // 'empty-sequence'\n      break;\n    case 145:                       // 'function'\n      shiftT(145);                  // 'function'\n      break;\n    case 152:                       // 'if'\n      shiftT(152);                  // 'if'\n      break;\n    case 165:                       // 'item'\n      shiftT(165);                  // 'item'\n      break;\n    case 185:                       // 'namespace-node'\n      shiftT(185);                  // 'namespace-node'\n      break;\n    case 191:                       // 'node'\n      shiftT(191);                  // 'node'\n      break;\n    case 216:                       // 'processing-instruction'\n      shiftT(216);                  // 'processing-instruction'\n      break;\n    case 226:                       // 'schema-attribute'\n      shiftT(226);                  // 'schema-attribute'\n      break;\n    case 227:                       // 'schema-element'\n      shiftT(227);                  // 'schema-element'\n      break;\n    case 243:                       // 'switch'\n      shiftT(243);                  // 'switch'\n      break;\n    case 244:                       // 'text'\n      shiftT(244);                  // 'text'\n      break;\n    case 253:                       // 'typeswitch'\n      shiftT(253);                  // 'typeswitch'\n      break;\n    case 78:                        // 'array'\n      shiftT(78);                   // 'array'\n      break;\n    case 167:                       // 'json-item'\n      shiftT(167);                  // 'json-item'\n      break;\n    case 242:                       // 'structured-item'\n      shiftT(242);                  // 'structured-item'\n      break;\n    default:\n      try_FunctionName();\n    }\n  }\n\n  function parse_FunctionName()\n  {\n    eventHandler.startNonterminal(\"FunctionName\", e0);\n    switch (l1)\n    {\n    case 6:                         // EQName^Token\n      shift(6);                     // EQName^Token\n      break;\n    case 70:                        // 'after'\n      shift(70);                    // 'after'\n      break;\n    case 73:                        // 'ancestor'\n      shift(73);                    // 'ancestor'\n      break;\n    case 74:                        // 'ancestor-or-self'\n      shift(74);                    // 'ancestor-or-self'\n      break;\n    case 75:                        // 'and'\n      shift(75);                    // 'and'\n      break;\n    case 79:                        // 'as'\n      shift(79);                    // 'as'\n      break;\n    case 80:                        // 'ascending'\n      shift(80);                    // 'ascending'\n      break;\n    case 84:                        // 'before'\n      shift(84);                    // 'before'\n      break;\n    case 88:                        // 'case'\n      shift(88);                    // 'case'\n      break;\n    case 89:                        // 'cast'\n      shift(89);                    // 'cast'\n      break;\n    case 90:                        // 'castable'\n      shift(90);                    // 'castable'\n      break;\n    case 93:                        // 'child'\n      shift(93);                    // 'child'\n      break;\n    case 94:                        // 'collation'\n      shift(94);                    // 'collation'\n      break;\n    case 103:                       // 'copy'\n      shift(103);                   // 'copy'\n      break;\n    case 105:                       // 'count'\n      shift(105);                   // 'count'\n      break;\n    case 108:                       // 'declare'\n      shift(108);                   // 'declare'\n      break;\n    case 109:                       // 'default'\n      shift(109);                   // 'default'\n      break;\n    case 110:                       // 'delete'\n      shift(110);                   // 'delete'\n      break;\n    case 111:                       // 'descendant'\n      shift(111);                   // 'descendant'\n      break;\n    case 112:                       // 'descendant-or-self'\n      shift(112);                   // 'descendant-or-self'\n      break;\n    case 113:                       // 'descending'\n      shift(113);                   // 'descending'\n      break;\n    case 118:                       // 'div'\n      shift(118);                   // 'div'\n      break;\n    case 119:                       // 'document'\n      shift(119);                   // 'document'\n      break;\n    case 122:                       // 'else'\n      shift(122);                   // 'else'\n      break;\n    case 123:                       // 'empty'\n      shift(123);                   // 'empty'\n      break;\n    case 126:                       // 'end'\n      shift(126);                   // 'end'\n      break;\n    case 128:                       // 'eq'\n      shift(128);                   // 'eq'\n      break;\n    case 129:                       // 'every'\n      shift(129);                   // 'every'\n      break;\n    case 131:                       // 'except'\n      shift(131);                   // 'except'\n      break;\n    case 134:                       // 'first'\n      shift(134);                   // 'first'\n      break;\n    case 135:                       // 'following'\n      shift(135);                   // 'following'\n      break;\n    case 136:                       // 'following-sibling'\n      shift(136);                   // 'following-sibling'\n      break;\n    case 137:                       // 'for'\n      shift(137);                   // 'for'\n      break;\n    case 146:                       // 'ge'\n      shift(146);                   // 'ge'\n      break;\n    case 148:                       // 'group'\n      shift(148);                   // 'group'\n      break;\n    case 150:                       // 'gt'\n      shift(150);                   // 'gt'\n      break;\n    case 151:                       // 'idiv'\n      shift(151);                   // 'idiv'\n      break;\n    case 153:                       // 'import'\n      shift(153);                   // 'import'\n      break;\n    case 159:                       // 'insert'\n      shift(159);                   // 'insert'\n      break;\n    case 160:                       // 'instance'\n      shift(160);                   // 'instance'\n      break;\n    case 162:                       // 'intersect'\n      shift(162);                   // 'intersect'\n      break;\n    case 163:                       // 'into'\n      shift(163);                   // 'into'\n      break;\n    case 164:                       // 'is'\n      shift(164);                   // 'is'\n      break;\n    case 170:                       // 'last'\n      shift(170);                   // 'last'\n      break;\n    case 172:                       // 'le'\n      shift(172);                   // 'le'\n      break;\n    case 174:                       // 'let'\n      shift(174);                   // 'let'\n      break;\n    case 178:                       // 'lt'\n      shift(178);                   // 'lt'\n      break;\n    case 180:                       // 'mod'\n      shift(180);                   // 'mod'\n      break;\n    case 181:                       // 'modify'\n      shift(181);                   // 'modify'\n      break;\n    case 182:                       // 'module'\n      shift(182);                   // 'module'\n      break;\n    case 184:                       // 'namespace'\n      shift(184);                   // 'namespace'\n      break;\n    case 186:                       // 'ne'\n      shift(186);                   // 'ne'\n      break;\n    case 198:                       // 'only'\n      shift(198);                   // 'only'\n      break;\n    case 200:                       // 'or'\n      shift(200);                   // 'or'\n      break;\n    case 201:                       // 'order'\n      shift(201);                   // 'order'\n      break;\n    case 202:                       // 'ordered'\n      shift(202);                   // 'ordered'\n      break;\n    case 206:                       // 'parent'\n      shift(206);                   // 'parent'\n      break;\n    case 212:                       // 'preceding'\n      shift(212);                   // 'preceding'\n      break;\n    case 213:                       // 'preceding-sibling'\n      shift(213);                   // 'preceding-sibling'\n      break;\n    case 218:                       // 'rename'\n      shift(218);                   // 'rename'\n      break;\n    case 219:                       // 'replace'\n      shift(219);                   // 'replace'\n      break;\n    case 220:                       // 'return'\n      shift(220);                   // 'return'\n      break;\n    case 224:                       // 'satisfies'\n      shift(224);                   // 'satisfies'\n      break;\n    case 229:                       // 'self'\n      shift(229);                   // 'self'\n      break;\n    case 235:                       // 'some'\n      shift(235);                   // 'some'\n      break;\n    case 236:                       // 'stable'\n      shift(236);                   // 'stable'\n      break;\n    case 237:                       // 'start'\n      shift(237);                   // 'start'\n      break;\n    case 248:                       // 'to'\n      shift(248);                   // 'to'\n      break;\n    case 249:                       // 'treat'\n      shift(249);                   // 'treat'\n      break;\n    case 250:                       // 'try'\n      shift(250);                   // 'try'\n      break;\n    case 254:                       // 'union'\n      shift(254);                   // 'union'\n      break;\n    case 256:                       // 'unordered'\n      shift(256);                   // 'unordered'\n      break;\n    case 260:                       // 'validate'\n      shift(260);                   // 'validate'\n      break;\n    case 266:                       // 'where'\n      shift(266);                   // 'where'\n      break;\n    case 270:                       // 'with'\n      shift(270);                   // 'with'\n      break;\n    case 274:                       // 'xquery'\n      shift(274);                   // 'xquery'\n      break;\n    case 72:                        // 'allowing'\n      shift(72);                    // 'allowing'\n      break;\n    case 81:                        // 'at'\n      shift(81);                    // 'at'\n      break;\n    case 83:                        // 'base-uri'\n      shift(83);                    // 'base-uri'\n      break;\n    case 85:                        // 'boundary-space'\n      shift(85);                    // 'boundary-space'\n      break;\n    case 86:                        // 'break'\n      shift(86);                    // 'break'\n      break;\n    case 91:                        // 'catch'\n      shift(91);                    // 'catch'\n      break;\n    case 98:                        // 'construction'\n      shift(98);                    // 'construction'\n      break;\n    case 101:                       // 'context'\n      shift(101);                   // 'context'\n      break;\n    case 102:                       // 'continue'\n      shift(102);                   // 'continue'\n      break;\n    case 104:                       // 'copy-namespaces'\n      shift(104);                   // 'copy-namespaces'\n      break;\n    case 106:                       // 'decimal-format'\n      shift(106);                   // 'decimal-format'\n      break;\n    case 125:                       // 'encoding'\n      shift(125);                   // 'encoding'\n      break;\n    case 132:                       // 'exit'\n      shift(132);                   // 'exit'\n      break;\n    case 133:                       // 'external'\n      shift(133);                   // 'external'\n      break;\n    case 141:                       // 'ft-option'\n      shift(141);                   // 'ft-option'\n      break;\n    case 154:                       // 'in'\n      shift(154);                   // 'in'\n      break;\n    case 155:                       // 'index'\n      shift(155);                   // 'index'\n      break;\n    case 161:                       // 'integrity'\n      shift(161);                   // 'integrity'\n      break;\n    case 171:                       // 'lax'\n      shift(171);                   // 'lax'\n      break;\n    case 192:                       // 'nodes'\n      shift(192);                   // 'nodes'\n      break;\n    case 199:                       // 'option'\n      shift(199);                   // 'option'\n      break;\n    case 203:                       // 'ordering'\n      shift(203);                   // 'ordering'\n      break;\n    case 222:                       // 'revalidation'\n      shift(222);                   // 'revalidation'\n      break;\n    case 225:                       // 'schema'\n      shift(225);                   // 'schema'\n      break;\n    case 228:                       // 'score'\n      shift(228);                   // 'score'\n      break;\n    case 234:                       // 'sliding'\n      shift(234);                   // 'sliding'\n      break;\n    case 240:                       // 'strict'\n      shift(240);                   // 'strict'\n      break;\n    case 251:                       // 'tumbling'\n      shift(251);                   // 'tumbling'\n      break;\n    case 252:                       // 'type'\n      shift(252);                   // 'type'\n      break;\n    case 257:                       // 'updating'\n      shift(257);                   // 'updating'\n      break;\n    case 261:                       // 'value'\n      shift(261);                   // 'value'\n      break;\n    case 262:                       // 'variable'\n      shift(262);                   // 'variable'\n      break;\n    case 263:                       // 'version'\n      shift(263);                   // 'version'\n      break;\n    case 267:                       // 'while'\n      shift(267);                   // 'while'\n      break;\n    case 97:                        // 'constraint'\n      shift(97);                    // 'constraint'\n      break;\n    case 176:                       // 'loop'\n      shift(176);                   // 'loop'\n      break;\n    case 221:                       // 'returning'\n      shift(221);                   // 'returning'\n      break;\n    case 77:                        // 'append'\n      shift(77);                    // 'append'\n      break;\n    case 166:                       // 'json'\n      shift(166);                   // 'json'\n      break;\n    default:\n      shift(194);                   // 'object'\n    }\n    eventHandler.endNonterminal(\"FunctionName\", e0);\n  }\n\n  function try_FunctionName()\n  {\n    switch (l1)\n    {\n    case 6:                         // EQName^Token\n      shiftT(6);                    // EQName^Token\n      break;\n    case 70:                        // 'after'\n      shiftT(70);                   // 'after'\n      break;\n    case 73:                        // 'ancestor'\n      shiftT(73);                   // 'ancestor'\n      break;\n    case 74:                        // 'ancestor-or-self'\n      shiftT(74);                   // 'ancestor-or-self'\n      break;\n    case 75:                        // 'and'\n      shiftT(75);                   // 'and'\n      break;\n    case 79:                        // 'as'\n      shiftT(79);                   // 'as'\n      break;\n    case 80:                        // 'ascending'\n      shiftT(80);                   // 'ascending'\n      break;\n    case 84:                        // 'before'\n      shiftT(84);                   // 'before'\n      break;\n    case 88:                        // 'case'\n      shiftT(88);                   // 'case'\n      break;\n    case 89:                        // 'cast'\n      shiftT(89);                   // 'cast'\n      break;\n    case 90:                        // 'castable'\n      shiftT(90);                   // 'castable'\n      break;\n    case 93:                        // 'child'\n      shiftT(93);                   // 'child'\n      break;\n    case 94:                        // 'collation'\n      shiftT(94);                   // 'collation'\n      break;\n    case 103:                       // 'copy'\n      shiftT(103);                  // 'copy'\n      break;\n    case 105:                       // 'count'\n      shiftT(105);                  // 'count'\n      break;\n    case 108:                       // 'declare'\n      shiftT(108);                  // 'declare'\n      break;\n    case 109:                       // 'default'\n      shiftT(109);                  // 'default'\n      break;\n    case 110:                       // 'delete'\n      shiftT(110);                  // 'delete'\n      break;\n    case 111:                       // 'descendant'\n      shiftT(111);                  // 'descendant'\n      break;\n    case 112:                       // 'descendant-or-self'\n      shiftT(112);                  // 'descendant-or-self'\n      break;\n    case 113:                       // 'descending'\n      shiftT(113);                  // 'descending'\n      break;\n    case 118:                       // 'div'\n      shiftT(118);                  // 'div'\n      break;\n    case 119:                       // 'document'\n      shiftT(119);                  // 'document'\n      break;\n    case 122:                       // 'else'\n      shiftT(122);                  // 'else'\n      break;\n    case 123:                       // 'empty'\n      shiftT(123);                  // 'empty'\n      break;\n    case 126:                       // 'end'\n      shiftT(126);                  // 'end'\n      break;\n    case 128:                       // 'eq'\n      shiftT(128);                  // 'eq'\n      break;\n    case 129:                       // 'every'\n      shiftT(129);                  // 'every'\n      break;\n    case 131:                       // 'except'\n      shiftT(131);                  // 'except'\n      break;\n    case 134:                       // 'first'\n      shiftT(134);                  // 'first'\n      break;\n    case 135:                       // 'following'\n      shiftT(135);                  // 'following'\n      break;\n    case 136:                       // 'following-sibling'\n      shiftT(136);                  // 'following-sibling'\n      break;\n    case 137:                       // 'for'\n      shiftT(137);                  // 'for'\n      break;\n    case 146:                       // 'ge'\n      shiftT(146);                  // 'ge'\n      break;\n    case 148:                       // 'group'\n      shiftT(148);                  // 'group'\n      break;\n    case 150:                       // 'gt'\n      shiftT(150);                  // 'gt'\n      break;\n    case 151:                       // 'idiv'\n      shiftT(151);                  // 'idiv'\n      break;\n    case 153:                       // 'import'\n      shiftT(153);                  // 'import'\n      break;\n    case 159:                       // 'insert'\n      shiftT(159);                  // 'insert'\n      break;\n    case 160:                       // 'instance'\n      shiftT(160);                  // 'instance'\n      break;\n    case 162:                       // 'intersect'\n      shiftT(162);                  // 'intersect'\n      break;\n    case 163:                       // 'into'\n      shiftT(163);                  // 'into'\n      break;\n    case 164:                       // 'is'\n      shiftT(164);                  // 'is'\n      break;\n    case 170:                       // 'last'\n      shiftT(170);                  // 'last'\n      break;\n    case 172:                       // 'le'\n      shiftT(172);                  // 'le'\n      break;\n    case 174:                       // 'let'\n      shiftT(174);                  // 'let'\n      break;\n    case 178:                       // 'lt'\n      shiftT(178);                  // 'lt'\n      break;\n    case 180:                       // 'mod'\n      shiftT(180);                  // 'mod'\n      break;\n    case 181:                       // 'modify'\n      shiftT(181);                  // 'modify'\n      break;\n    case 182:                       // 'module'\n      shiftT(182);                  // 'module'\n      break;\n    case 184:                       // 'namespace'\n      shiftT(184);                  // 'namespace'\n      break;\n    case 186:                       // 'ne'\n      shiftT(186);                  // 'ne'\n      break;\n    case 198:                       // 'only'\n      shiftT(198);                  // 'only'\n      break;\n    case 200:                       // 'or'\n      shiftT(200);                  // 'or'\n      break;\n    case 201:                       // 'order'\n      shiftT(201);                  // 'order'\n      break;\n    case 202:                       // 'ordered'\n      shiftT(202);                  // 'ordered'\n      break;\n    case 206:                       // 'parent'\n      shiftT(206);                  // 'parent'\n      break;\n    case 212:                       // 'preceding'\n      shiftT(212);                  // 'preceding'\n      break;\n    case 213:                       // 'preceding-sibling'\n      shiftT(213);                  // 'preceding-sibling'\n      break;\n    case 218:                       // 'rename'\n      shiftT(218);                  // 'rename'\n      break;\n    case 219:                       // 'replace'\n      shiftT(219);                  // 'replace'\n      break;\n    case 220:                       // 'return'\n      shiftT(220);                  // 'return'\n      break;\n    case 224:                       // 'satisfies'\n      shiftT(224);                  // 'satisfies'\n      break;\n    case 229:                       // 'self'\n      shiftT(229);                  // 'self'\n      break;\n    case 235:                       // 'some'\n      shiftT(235);                  // 'some'\n      break;\n    case 236:                       // 'stable'\n      shiftT(236);                  // 'stable'\n      break;\n    case 237:                       // 'start'\n      shiftT(237);                  // 'start'\n      break;\n    case 248:                       // 'to'\n      shiftT(248);                  // 'to'\n      break;\n    case 249:                       // 'treat'\n      shiftT(249);                  // 'treat'\n      break;\n    case 250:                       // 'try'\n      shiftT(250);                  // 'try'\n      break;\n    case 254:                       // 'union'\n      shiftT(254);                  // 'union'\n      break;\n    case 256:                       // 'unordered'\n      shiftT(256);                  // 'unordered'\n      break;\n    case 260:                       // 'validate'\n      shiftT(260);                  // 'validate'\n      break;\n    case 266:                       // 'where'\n      shiftT(266);                  // 'where'\n      break;\n    case 270:                       // 'with'\n      shiftT(270);                  // 'with'\n      break;\n    case 274:                       // 'xquery'\n      shiftT(274);                  // 'xquery'\n      break;\n    case 72:                        // 'allowing'\n      shiftT(72);                   // 'allowing'\n      break;\n    case 81:                        // 'at'\n      shiftT(81);                   // 'at'\n      break;\n    case 83:                        // 'base-uri'\n      shiftT(83);                   // 'base-uri'\n      break;\n    case 85:                        // 'boundary-space'\n      shiftT(85);                   // 'boundary-space'\n      break;\n    case 86:                        // 'break'\n      shiftT(86);                   // 'break'\n      break;\n    case 91:                        // 'catch'\n      shiftT(91);                   // 'catch'\n      break;\n    case 98:                        // 'construction'\n      shiftT(98);                   // 'construction'\n      break;\n    case 101:                       // 'context'\n      shiftT(101);                  // 'context'\n      break;\n    case 102:                       // 'continue'\n      shiftT(102);                  // 'continue'\n      break;\n    case 104:                       // 'copy-namespaces'\n      shiftT(104);                  // 'copy-namespaces'\n      break;\n    case 106:                       // 'decimal-format'\n      shiftT(106);                  // 'decimal-format'\n      break;\n    case 125:                       // 'encoding'\n      shiftT(125);                  // 'encoding'\n      break;\n    case 132:                       // 'exit'\n      shiftT(132);                  // 'exit'\n      break;\n    case 133:                       // 'external'\n      shiftT(133);                  // 'external'\n      break;\n    case 141:                       // 'ft-option'\n      shiftT(141);                  // 'ft-option'\n      break;\n    case 154:                       // 'in'\n      shiftT(154);                  // 'in'\n      break;\n    case 155:                       // 'index'\n      shiftT(155);                  // 'index'\n      break;\n    case 161:                       // 'integrity'\n      shiftT(161);                  // 'integrity'\n      break;\n    case 171:                       // 'lax'\n      shiftT(171);                  // 'lax'\n      break;\n    case 192:                       // 'nodes'\n      shiftT(192);                  // 'nodes'\n      break;\n    case 199:                       // 'option'\n      shiftT(199);                  // 'option'\n      break;\n    case 203:                       // 'ordering'\n      shiftT(203);                  // 'ordering'\n      break;\n    case 222:                       // 'revalidation'\n      shiftT(222);                  // 'revalidation'\n      break;\n    case 225:                       // 'schema'\n      shiftT(225);                  // 'schema'\n      break;\n    case 228:                       // 'score'\n      shiftT(228);                  // 'score'\n      break;\n    case 234:                       // 'sliding'\n      shiftT(234);                  // 'sliding'\n      break;\n    case 240:                       // 'strict'\n      shiftT(240);                  // 'strict'\n      break;\n    case 251:                       // 'tumbling'\n      shiftT(251);                  // 'tumbling'\n      break;\n    case 252:                       // 'type'\n      shiftT(252);                  // 'type'\n      break;\n    case 257:                       // 'updating'\n      shiftT(257);                  // 'updating'\n      break;\n    case 261:                       // 'value'\n      shiftT(261);                  // 'value'\n      break;\n    case 262:                       // 'variable'\n      shiftT(262);                  // 'variable'\n      break;\n    case 263:                       // 'version'\n      shiftT(263);                  // 'version'\n      break;\n    case 267:                       // 'while'\n      shiftT(267);                  // 'while'\n      break;\n    case 97:                        // 'constraint'\n      shiftT(97);                   // 'constraint'\n      break;\n    case 176:                       // 'loop'\n      shiftT(176);                  // 'loop'\n      break;\n    case 221:                       // 'returning'\n      shiftT(221);                  // 'returning'\n      break;\n    case 77:                        // 'append'\n      shiftT(77);                   // 'append'\n      break;\n    case 166:                       // 'json'\n      shiftT(166);                  // 'json'\n      break;\n    default:\n      shiftT(194);                  // 'object'\n    }\n  }\n\n  function parse_NCName()\n  {\n    eventHandler.startNonterminal(\"NCName\", e0);\n    switch (l1)\n    {\n    case 19:                        // NCName^Token\n      shift(19);                    // NCName^Token\n      break;\n    case 70:                        // 'after'\n      shift(70);                    // 'after'\n      break;\n    case 75:                        // 'and'\n      shift(75);                    // 'and'\n      break;\n    case 79:                        // 'as'\n      shift(79);                    // 'as'\n      break;\n    case 80:                        // 'ascending'\n      shift(80);                    // 'ascending'\n      break;\n    case 84:                        // 'before'\n      shift(84);                    // 'before'\n      break;\n    case 88:                        // 'case'\n      shift(88);                    // 'case'\n      break;\n    case 89:                        // 'cast'\n      shift(89);                    // 'cast'\n      break;\n    case 90:                        // 'castable'\n      shift(90);                    // 'castable'\n      break;\n    case 94:                        // 'collation'\n      shift(94);                    // 'collation'\n      break;\n    case 105:                       // 'count'\n      shift(105);                   // 'count'\n      break;\n    case 109:                       // 'default'\n      shift(109);                   // 'default'\n      break;\n    case 113:                       // 'descending'\n      shift(113);                   // 'descending'\n      break;\n    case 118:                       // 'div'\n      shift(118);                   // 'div'\n      break;\n    case 122:                       // 'else'\n      shift(122);                   // 'else'\n      break;\n    case 123:                       // 'empty'\n      shift(123);                   // 'empty'\n      break;\n    case 126:                       // 'end'\n      shift(126);                   // 'end'\n      break;\n    case 128:                       // 'eq'\n      shift(128);                   // 'eq'\n      break;\n    case 131:                       // 'except'\n      shift(131);                   // 'except'\n      break;\n    case 137:                       // 'for'\n      shift(137);                   // 'for'\n      break;\n    case 146:                       // 'ge'\n      shift(146);                   // 'ge'\n      break;\n    case 148:                       // 'group'\n      shift(148);                   // 'group'\n      break;\n    case 150:                       // 'gt'\n      shift(150);                   // 'gt'\n      break;\n    case 151:                       // 'idiv'\n      shift(151);                   // 'idiv'\n      break;\n    case 160:                       // 'instance'\n      shift(160);                   // 'instance'\n      break;\n    case 162:                       // 'intersect'\n      shift(162);                   // 'intersect'\n      break;\n    case 163:                       // 'into'\n      shift(163);                   // 'into'\n      break;\n    case 164:                       // 'is'\n      shift(164);                   // 'is'\n      break;\n    case 172:                       // 'le'\n      shift(172);                   // 'le'\n      break;\n    case 174:                       // 'let'\n      shift(174);                   // 'let'\n      break;\n    case 178:                       // 'lt'\n      shift(178);                   // 'lt'\n      break;\n    case 180:                       // 'mod'\n      shift(180);                   // 'mod'\n      break;\n    case 181:                       // 'modify'\n      shift(181);                   // 'modify'\n      break;\n    case 186:                       // 'ne'\n      shift(186);                   // 'ne'\n      break;\n    case 198:                       // 'only'\n      shift(198);                   // 'only'\n      break;\n    case 200:                       // 'or'\n      shift(200);                   // 'or'\n      break;\n    case 201:                       // 'order'\n      shift(201);                   // 'order'\n      break;\n    case 220:                       // 'return'\n      shift(220);                   // 'return'\n      break;\n    case 224:                       // 'satisfies'\n      shift(224);                   // 'satisfies'\n      break;\n    case 236:                       // 'stable'\n      shift(236);                   // 'stable'\n      break;\n    case 237:                       // 'start'\n      shift(237);                   // 'start'\n      break;\n    case 248:                       // 'to'\n      shift(248);                   // 'to'\n      break;\n    case 249:                       // 'treat'\n      shift(249);                   // 'treat'\n      break;\n    case 254:                       // 'union'\n      shift(254);                   // 'union'\n      break;\n    case 266:                       // 'where'\n      shift(266);                   // 'where'\n      break;\n    case 270:                       // 'with'\n      shift(270);                   // 'with'\n      break;\n    case 73:                        // 'ancestor'\n      shift(73);                    // 'ancestor'\n      break;\n    case 74:                        // 'ancestor-or-self'\n      shift(74);                    // 'ancestor-or-self'\n      break;\n    case 82:                        // 'attribute'\n      shift(82);                    // 'attribute'\n      break;\n    case 93:                        // 'child'\n      shift(93);                    // 'child'\n      break;\n    case 96:                        // 'comment'\n      shift(96);                    // 'comment'\n      break;\n    case 103:                       // 'copy'\n      shift(103);                   // 'copy'\n      break;\n    case 108:                       // 'declare'\n      shift(108);                   // 'declare'\n      break;\n    case 110:                       // 'delete'\n      shift(110);                   // 'delete'\n      break;\n    case 111:                       // 'descendant'\n      shift(111);                   // 'descendant'\n      break;\n    case 112:                       // 'descendant-or-self'\n      shift(112);                   // 'descendant-or-self'\n      break;\n    case 119:                       // 'document'\n      shift(119);                   // 'document'\n      break;\n    case 120:                       // 'document-node'\n      shift(120);                   // 'document-node'\n      break;\n    case 121:                       // 'element'\n      shift(121);                   // 'element'\n      break;\n    case 124:                       // 'empty-sequence'\n      shift(124);                   // 'empty-sequence'\n      break;\n    case 129:                       // 'every'\n      shift(129);                   // 'every'\n      break;\n    case 134:                       // 'first'\n      shift(134);                   // 'first'\n      break;\n    case 135:                       // 'following'\n      shift(135);                   // 'following'\n      break;\n    case 136:                       // 'following-sibling'\n      shift(136);                   // 'following-sibling'\n      break;\n    case 145:                       // 'function'\n      shift(145);                   // 'function'\n      break;\n    case 152:                       // 'if'\n      shift(152);                   // 'if'\n      break;\n    case 153:                       // 'import'\n      shift(153);                   // 'import'\n      break;\n    case 159:                       // 'insert'\n      shift(159);                   // 'insert'\n      break;\n    case 165:                       // 'item'\n      shift(165);                   // 'item'\n      break;\n    case 170:                       // 'last'\n      shift(170);                   // 'last'\n      break;\n    case 182:                       // 'module'\n      shift(182);                   // 'module'\n      break;\n    case 184:                       // 'namespace'\n      shift(184);                   // 'namespace'\n      break;\n    case 185:                       // 'namespace-node'\n      shift(185);                   // 'namespace-node'\n      break;\n    case 191:                       // 'node'\n      shift(191);                   // 'node'\n      break;\n    case 202:                       // 'ordered'\n      shift(202);                   // 'ordered'\n      break;\n    case 206:                       // 'parent'\n      shift(206);                   // 'parent'\n      break;\n    case 212:                       // 'preceding'\n      shift(212);                   // 'preceding'\n      break;\n    case 213:                       // 'preceding-sibling'\n      shift(213);                   // 'preceding-sibling'\n      break;\n    case 216:                       // 'processing-instruction'\n      shift(216);                   // 'processing-instruction'\n      break;\n    case 218:                       // 'rename'\n      shift(218);                   // 'rename'\n      break;\n    case 219:                       // 'replace'\n      shift(219);                   // 'replace'\n      break;\n    case 226:                       // 'schema-attribute'\n      shift(226);                   // 'schema-attribute'\n      break;\n    case 227:                       // 'schema-element'\n      shift(227);                   // 'schema-element'\n      break;\n    case 229:                       // 'self'\n      shift(229);                   // 'self'\n      break;\n    case 235:                       // 'some'\n      shift(235);                   // 'some'\n      break;\n    case 243:                       // 'switch'\n      shift(243);                   // 'switch'\n      break;\n    case 244:                       // 'text'\n      shift(244);                   // 'text'\n      break;\n    case 250:                       // 'try'\n      shift(250);                   // 'try'\n      break;\n    case 253:                       // 'typeswitch'\n      shift(253);                   // 'typeswitch'\n      break;\n    case 256:                       // 'unordered'\n      shift(256);                   // 'unordered'\n      break;\n    case 260:                       // 'validate'\n      shift(260);                   // 'validate'\n      break;\n    case 262:                       // 'variable'\n      shift(262);                   // 'variable'\n      break;\n    case 274:                       // 'xquery'\n      shift(274);                   // 'xquery'\n      break;\n    case 72:                        // 'allowing'\n      shift(72);                    // 'allowing'\n      break;\n    case 81:                        // 'at'\n      shift(81);                    // 'at'\n      break;\n    case 83:                        // 'base-uri'\n      shift(83);                    // 'base-uri'\n      break;\n    case 85:                        // 'boundary-space'\n      shift(85);                    // 'boundary-space'\n      break;\n    case 86:                        // 'break'\n      shift(86);                    // 'break'\n      break;\n    case 91:                        // 'catch'\n      shift(91);                    // 'catch'\n      break;\n    case 98:                        // 'construction'\n      shift(98);                    // 'construction'\n      break;\n    case 101:                       // 'context'\n      shift(101);                   // 'context'\n      break;\n    case 102:                       // 'continue'\n      shift(102);                   // 'continue'\n      break;\n    case 104:                       // 'copy-namespaces'\n      shift(104);                   // 'copy-namespaces'\n      break;\n    case 106:                       // 'decimal-format'\n      shift(106);                   // 'decimal-format'\n      break;\n    case 125:                       // 'encoding'\n      shift(125);                   // 'encoding'\n      break;\n    case 132:                       // 'exit'\n      shift(132);                   // 'exit'\n      break;\n    case 133:                       // 'external'\n      shift(133);                   // 'external'\n      break;\n    case 141:                       // 'ft-option'\n      shift(141);                   // 'ft-option'\n      break;\n    case 154:                       // 'in'\n      shift(154);                   // 'in'\n      break;\n    case 155:                       // 'index'\n      shift(155);                   // 'index'\n      break;\n    case 161:                       // 'integrity'\n      shift(161);                   // 'integrity'\n      break;\n    case 171:                       // 'lax'\n      shift(171);                   // 'lax'\n      break;\n    case 192:                       // 'nodes'\n      shift(192);                   // 'nodes'\n      break;\n    case 199:                       // 'option'\n      shift(199);                   // 'option'\n      break;\n    case 203:                       // 'ordering'\n      shift(203);                   // 'ordering'\n      break;\n    case 222:                       // 'revalidation'\n      shift(222);                   // 'revalidation'\n      break;\n    case 225:                       // 'schema'\n      shift(225);                   // 'schema'\n      break;\n    case 228:                       // 'score'\n      shift(228);                   // 'score'\n      break;\n    case 234:                       // 'sliding'\n      shift(234);                   // 'sliding'\n      break;\n    case 240:                       // 'strict'\n      shift(240);                   // 'strict'\n      break;\n    case 251:                       // 'tumbling'\n      shift(251);                   // 'tumbling'\n      break;\n    case 252:                       // 'type'\n      shift(252);                   // 'type'\n      break;\n    case 257:                       // 'updating'\n      shift(257);                   // 'updating'\n      break;\n    case 261:                       // 'value'\n      shift(261);                   // 'value'\n      break;\n    case 263:                       // 'version'\n      shift(263);                   // 'version'\n      break;\n    case 267:                       // 'while'\n      shift(267);                   // 'while'\n      break;\n    case 97:                        // 'constraint'\n      shift(97);                    // 'constraint'\n      break;\n    case 176:                       // 'loop'\n      shift(176);                   // 'loop'\n      break;\n    case 221:                       // 'returning'\n      shift(221);                   // 'returning'\n      break;\n    case 77:                        // 'append'\n      shift(77);                    // 'append'\n      break;\n    case 166:                       // 'json'\n      shift(166);                   // 'json'\n      break;\n    default:\n      shift(194);                   // 'object'\n    }\n    eventHandler.endNonterminal(\"NCName\", e0);\n  }\n\n  function try_NCName()\n  {\n    switch (l1)\n    {\n    case 19:                        // NCName^Token\n      shiftT(19);                   // NCName^Token\n      break;\n    case 70:                        // 'after'\n      shiftT(70);                   // 'after'\n      break;\n    case 75:                        // 'and'\n      shiftT(75);                   // 'and'\n      break;\n    case 79:                        // 'as'\n      shiftT(79);                   // 'as'\n      break;\n    case 80:                        // 'ascending'\n      shiftT(80);                   // 'ascending'\n      break;\n    case 84:                        // 'before'\n      shiftT(84);                   // 'before'\n      break;\n    case 88:                        // 'case'\n      shiftT(88);                   // 'case'\n      break;\n    case 89:                        // 'cast'\n      shiftT(89);                   // 'cast'\n      break;\n    case 90:                        // 'castable'\n      shiftT(90);                   // 'castable'\n      break;\n    case 94:                        // 'collation'\n      shiftT(94);                   // 'collation'\n      break;\n    case 105:                       // 'count'\n      shiftT(105);                  // 'count'\n      break;\n    case 109:                       // 'default'\n      shiftT(109);                  // 'default'\n      break;\n    case 113:                       // 'descending'\n      shiftT(113);                  // 'descending'\n      break;\n    case 118:                       // 'div'\n      shiftT(118);                  // 'div'\n      break;\n    case 122:                       // 'else'\n      shiftT(122);                  // 'else'\n      break;\n    case 123:                       // 'empty'\n      shiftT(123);                  // 'empty'\n      break;\n    case 126:                       // 'end'\n      shiftT(126);                  // 'end'\n      break;\n    case 128:                       // 'eq'\n      shiftT(128);                  // 'eq'\n      break;\n    case 131:                       // 'except'\n      shiftT(131);                  // 'except'\n      break;\n    case 137:                       // 'for'\n      shiftT(137);                  // 'for'\n      break;\n    case 146:                       // 'ge'\n      shiftT(146);                  // 'ge'\n      break;\n    case 148:                       // 'group'\n      shiftT(148);                  // 'group'\n      break;\n    case 150:                       // 'gt'\n      shiftT(150);                  // 'gt'\n      break;\n    case 151:                       // 'idiv'\n      shiftT(151);                  // 'idiv'\n      break;\n    case 160:                       // 'instance'\n      shiftT(160);                  // 'instance'\n      break;\n    case 162:                       // 'intersect'\n      shiftT(162);                  // 'intersect'\n      break;\n    case 163:                       // 'into'\n      shiftT(163);                  // 'into'\n      break;\n    case 164:                       // 'is'\n      shiftT(164);                  // 'is'\n      break;\n    case 172:                       // 'le'\n      shiftT(172);                  // 'le'\n      break;\n    case 174:                       // 'let'\n      shiftT(174);                  // 'let'\n      break;\n    case 178:                       // 'lt'\n      shiftT(178);                  // 'lt'\n      break;\n    case 180:                       // 'mod'\n      shiftT(180);                  // 'mod'\n      break;\n    case 181:                       // 'modify'\n      shiftT(181);                  // 'modify'\n      break;\n    case 186:                       // 'ne'\n      shiftT(186);                  // 'ne'\n      break;\n    case 198:                       // 'only'\n      shiftT(198);                  // 'only'\n      break;\n    case 200:                       // 'or'\n      shiftT(200);                  // 'or'\n      break;\n    case 201:                       // 'order'\n      shiftT(201);                  // 'order'\n      break;\n    case 220:                       // 'return'\n      shiftT(220);                  // 'return'\n      break;\n    case 224:                       // 'satisfies'\n      shiftT(224);                  // 'satisfies'\n      break;\n    case 236:                       // 'stable'\n      shiftT(236);                  // 'stable'\n      break;\n    case 237:                       // 'start'\n      shiftT(237);                  // 'start'\n      break;\n    case 248:                       // 'to'\n      shiftT(248);                  // 'to'\n      break;\n    case 249:                       // 'treat'\n      shiftT(249);                  // 'treat'\n      break;\n    case 254:                       // 'union'\n      shiftT(254);                  // 'union'\n      break;\n    case 266:                       // 'where'\n      shiftT(266);                  // 'where'\n      break;\n    case 270:                       // 'with'\n      shiftT(270);                  // 'with'\n      break;\n    case 73:                        // 'ancestor'\n      shiftT(73);                   // 'ancestor'\n      break;\n    case 74:                        // 'ancestor-or-self'\n      shiftT(74);                   // 'ancestor-or-self'\n      break;\n    case 82:                        // 'attribute'\n      shiftT(82);                   // 'attribute'\n      break;\n    case 93:                        // 'child'\n      shiftT(93);                   // 'child'\n      break;\n    case 96:                        // 'comment'\n      shiftT(96);                   // 'comment'\n      break;\n    case 103:                       // 'copy'\n      shiftT(103);                  // 'copy'\n      break;\n    case 108:                       // 'declare'\n      shiftT(108);                  // 'declare'\n      break;\n    case 110:                       // 'delete'\n      shiftT(110);                  // 'delete'\n      break;\n    case 111:                       // 'descendant'\n      shiftT(111);                  // 'descendant'\n      break;\n    case 112:                       // 'descendant-or-self'\n      shiftT(112);                  // 'descendant-or-self'\n      break;\n    case 119:                       // 'document'\n      shiftT(119);                  // 'document'\n      break;\n    case 120:                       // 'document-node'\n      shiftT(120);                  // 'document-node'\n      break;\n    case 121:                       // 'element'\n      shiftT(121);                  // 'element'\n      break;\n    case 124:                       // 'empty-sequence'\n      shiftT(124);                  // 'empty-sequence'\n      break;\n    case 129:                       // 'every'\n      shiftT(129);                  // 'every'\n      break;\n    case 134:                       // 'first'\n      shiftT(134);                  // 'first'\n      break;\n    case 135:                       // 'following'\n      shiftT(135);                  // 'following'\n      break;\n    case 136:                       // 'following-sibling'\n      shiftT(136);                  // 'following-sibling'\n      break;\n    case 145:                       // 'function'\n      shiftT(145);                  // 'function'\n      break;\n    case 152:                       // 'if'\n      shiftT(152);                  // 'if'\n      break;\n    case 153:                       // 'import'\n      shiftT(153);                  // 'import'\n      break;\n    case 159:                       // 'insert'\n      shiftT(159);                  // 'insert'\n      break;\n    case 165:                       // 'item'\n      shiftT(165);                  // 'item'\n      break;\n    case 170:                       // 'last'\n      shiftT(170);                  // 'last'\n      break;\n    case 182:                       // 'module'\n      shiftT(182);                  // 'module'\n      break;\n    case 184:                       // 'namespace'\n      shiftT(184);                  // 'namespace'\n      break;\n    case 185:                       // 'namespace-node'\n      shiftT(185);                  // 'namespace-node'\n      break;\n    case 191:                       // 'node'\n      shiftT(191);                  // 'node'\n      break;\n    case 202:                       // 'ordered'\n      shiftT(202);                  // 'ordered'\n      break;\n    case 206:                       // 'parent'\n      shiftT(206);                  // 'parent'\n      break;\n    case 212:                       // 'preceding'\n      shiftT(212);                  // 'preceding'\n      break;\n    case 213:                       // 'preceding-sibling'\n      shiftT(213);                  // 'preceding-sibling'\n      break;\n    case 216:                       // 'processing-instruction'\n      shiftT(216);                  // 'processing-instruction'\n      break;\n    case 218:                       // 'rename'\n      shiftT(218);                  // 'rename'\n      break;\n    case 219:                       // 'replace'\n      shiftT(219);                  // 'replace'\n      break;\n    case 226:                       // 'schema-attribute'\n      shiftT(226);                  // 'schema-attribute'\n      break;\n    case 227:                       // 'schema-element'\n      shiftT(227);                  // 'schema-element'\n      break;\n    case 229:                       // 'self'\n      shiftT(229);                  // 'self'\n      break;\n    case 235:                       // 'some'\n      shiftT(235);                  // 'some'\n      break;\n    case 243:                       // 'switch'\n      shiftT(243);                  // 'switch'\n      break;\n    case 244:                       // 'text'\n      shiftT(244);                  // 'text'\n      break;\n    case 250:                       // 'try'\n      shiftT(250);                  // 'try'\n      break;\n    case 253:                       // 'typeswitch'\n      shiftT(253);                  // 'typeswitch'\n      break;\n    case 256:                       // 'unordered'\n      shiftT(256);                  // 'unordered'\n      break;\n    case 260:                       // 'validate'\n      shiftT(260);                  // 'validate'\n      break;\n    case 262:                       // 'variable'\n      shiftT(262);                  // 'variable'\n      break;\n    case 274:                       // 'xquery'\n      shiftT(274);                  // 'xquery'\n      break;\n    case 72:                        // 'allowing'\n      shiftT(72);                   // 'allowing'\n      break;\n    case 81:                        // 'at'\n      shiftT(81);                   // 'at'\n      break;\n    case 83:                        // 'base-uri'\n      shiftT(83);                   // 'base-uri'\n      break;\n    case 85:                        // 'boundary-space'\n      shiftT(85);                   // 'boundary-space'\n      break;\n    case 86:                        // 'break'\n      shiftT(86);                   // 'break'\n      break;\n    case 91:                        // 'catch'\n      shiftT(91);                   // 'catch'\n      break;\n    case 98:                        // 'construction'\n      shiftT(98);                   // 'construction'\n      break;\n    case 101:                       // 'context'\n      shiftT(101);                  // 'context'\n      break;\n    case 102:                       // 'continue'\n      shiftT(102);                  // 'continue'\n      break;\n    case 104:                       // 'copy-namespaces'\n      shiftT(104);                  // 'copy-namespaces'\n      break;\n    case 106:                       // 'decimal-format'\n      shiftT(106);                  // 'decimal-format'\n      break;\n    case 125:                       // 'encoding'\n      shiftT(125);                  // 'encoding'\n      break;\n    case 132:                       // 'exit'\n      shiftT(132);                  // 'exit'\n      break;\n    case 133:                       // 'external'\n      shiftT(133);                  // 'external'\n      break;\n    case 141:                       // 'ft-option'\n      shiftT(141);                  // 'ft-option'\n      break;\n    case 154:                       // 'in'\n      shiftT(154);                  // 'in'\n      break;\n    case 155:                       // 'index'\n      shiftT(155);                  // 'index'\n      break;\n    case 161:                       // 'integrity'\n      shiftT(161);                  // 'integrity'\n      break;\n    case 171:                       // 'lax'\n      shiftT(171);                  // 'lax'\n      break;\n    case 192:                       // 'nodes'\n      shiftT(192);                  // 'nodes'\n      break;\n    case 199:                       // 'option'\n      shiftT(199);                  // 'option'\n      break;\n    case 203:                       // 'ordering'\n      shiftT(203);                  // 'ordering'\n      break;\n    case 222:                       // 'revalidation'\n      shiftT(222);                  // 'revalidation'\n      break;\n    case 225:                       // 'schema'\n      shiftT(225);                  // 'schema'\n      break;\n    case 228:                       // 'score'\n      shiftT(228);                  // 'score'\n      break;\n    case 234:                       // 'sliding'\n      shiftT(234);                  // 'sliding'\n      break;\n    case 240:                       // 'strict'\n      shiftT(240);                  // 'strict'\n      break;\n    case 251:                       // 'tumbling'\n      shiftT(251);                  // 'tumbling'\n      break;\n    case 252:                       // 'type'\n      shiftT(252);                  // 'type'\n      break;\n    case 257:                       // 'updating'\n      shiftT(257);                  // 'updating'\n      break;\n    case 261:                       // 'value'\n      shiftT(261);                  // 'value'\n      break;\n    case 263:                       // 'version'\n      shiftT(263);                  // 'version'\n      break;\n    case 267:                       // 'while'\n      shiftT(267);                  // 'while'\n      break;\n    case 97:                        // 'constraint'\n      shiftT(97);                   // 'constraint'\n      break;\n    case 176:                       // 'loop'\n      shiftT(176);                  // 'loop'\n      break;\n    case 221:                       // 'returning'\n      shiftT(221);                  // 'returning'\n      break;\n    case 77:                        // 'append'\n      shiftT(77);                   // 'append'\n      break;\n    case 166:                       // 'json'\n      shiftT(166);                  // 'json'\n      break;\n    default:\n      shiftT(194);                  // 'object'\n    }\n  }\n\n  function parse_MainModule()\n  {\n    eventHandler.startNonterminal(\"MainModule\", e0);\n    parse_Prolog();\n    whitespace();\n    parse_Program();\n    eventHandler.endNonterminal(\"MainModule\", e0);\n  }\n\n  function parse_Program()\n  {\n    eventHandler.startNonterminal(\"Program\", e0);\n    parse_StatementsAndOptionalExpr();\n    eventHandler.endNonterminal(\"Program\", e0);\n  }\n\n  function parse_Statements()\n  {\n    eventHandler.startNonterminal(\"Statements\", e0);\n    for (;;)\n    {\n      lookahead1W(277);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | EOF | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' |\n                                    // '..' | '/' | '//' | ';' | '<' | '<!--' | '<?' | '@' | '[' | 'after' |\n                                    // 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' |\n                                    // 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'first' | 'following' | 'following-sibling' | 'for' |\n                                    // 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' |\n                                    // 'in' | 'index' | 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' |\n                                    // 'is' | 'item' | 'json' | 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' |\n                                    // 'lt' | 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' |\n                                    // 'node' | 'nodes' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'self' | 'sliding' | 'some' | 'stable' | 'start' | 'strict' |\n                                    // 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'try' | 'tumbling' |\n                                    // 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' |\n                                    // 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' | 'xquery' | '{' |\n                                    // '{|' | '}'\n      switch (l1)\n      {\n      case 34:                      // '('\n        lookahead2W(268);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | ')' | '+' | '-' | '.' |\n                                    // '..' | '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n        break;\n      case 35:                      // '(#'\n        lookahead2(251);            // EQName^Token | S | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' |\n                                    // 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'json-item' | 'last' | 'lax' |\n                                    // 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' | 'namespace' |\n                                    // 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' | 'only' | 'option' |\n                                    // 'or' | 'order' | 'ordered' | 'ordering' | 'parent' | 'preceding' |\n                                    // 'preceding-sibling' | 'processing-instruction' | 'rename' | 'replace' |\n                                    // 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n        break;\n      case 46:                      // '/'\n        lookahead2W(283);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | EOF | '!' | '!=' | '$' | '%' | '(' | '(:' | '*' | '+' |\n                                    // ',' | '-' | '.' | '..' | ';' | '<' | '<!--' | '<<' | '<=' | '<?' | '=' | '>' |\n                                    // '>=' | '>>' | '@' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'contains' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|' | '|' | '||' | '}'\n        break;\n      case 47:                      // '//'\n        lookahead2W(264);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(:' | '.' | '..' | '<' | '<!--' |\n                                    // '<?' | '@' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' |\n                                    // 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'json-item' | 'last' | 'lax' |\n                                    // 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' | 'namespace' |\n                                    // 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' | 'only' | 'option' |\n                                    // 'or' | 'order' | 'ordered' | 'ordering' | 'parent' | 'preceding' |\n                                    // 'preceding-sibling' | 'processing-instruction' | 'rename' | 'replace' |\n                                    // 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n        break;\n      case 54:                      // '<'\n        lookahead2(4);              // QName\n        break;\n      case 55:                      // '<!--'\n        lookahead2(1);              // DirCommentContents\n        break;\n      case 59:                      // '<?'\n        lookahead2(3);              // PITarget\n        break;\n      case 66:                      // '@'\n        lookahead2W(256);           // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n        break;\n      case 68:                      // '['\n        lookahead2W(271);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | ']' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n        break;\n      case 77:                      // 'append'\n        lookahead2W(199);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n                                    // ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' |\n                                    // 'castable' | 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' |\n                                    // 'instance' | 'intersect' | 'is' | 'json' | 'le' | 'lt' | 'mod' | 'ne' | 'or' |\n                                    // 'to' | 'treat' | 'union' | '|' | '||' | '}'\n        break;\n      case 82:                      // 'attribute'\n        lookahead2W(280);           // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' |\n                                    // '-' | '/' | '//' | '::' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' |\n                                    // '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' |\n                                    // 'array' | 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'contains' |\n                                    // 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' |\n                                    // 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'json-item' | 'last' | 'lax' |\n                                    // 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' | 'namespace' |\n                                    // 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' | 'only' | 'option' |\n                                    // 'or' | 'order' | 'ordered' | 'ordering' | 'parent' | 'preceding' |\n                                    // 'preceding-sibling' | 'processing-instruction' | 'rename' | 'replace' |\n                                    // 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '|' | '||' | '}'\n        break;\n      case 121:                     // 'element'\n        lookahead2W(279);           // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' |\n                                    // '-' | '/' | '//' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' |\n                                    // 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' |\n                                    // 'array' | 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'contains' |\n                                    // 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' |\n                                    // 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'json-item' | 'last' | 'lax' |\n                                    // 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' | 'namespace' |\n                                    // 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' | 'only' | 'option' |\n                                    // 'or' | 'order' | 'ordered' | 'ordering' | 'parent' | 'preceding' |\n                                    // 'preceding-sibling' | 'processing-instruction' | 'rename' | 'replace' |\n                                    // 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '|' | '||' | '}'\n        break;\n      case 132:                     // 'exit'\n        lookahead2W(202);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n                                    // ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' |\n                                    // 'castable' | 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' |\n                                    // 'instance' | 'intersect' | 'is' | 'le' | 'lt' | 'mod' | 'ne' | 'or' |\n                                    // 'returning' | 'to' | 'treat' | 'union' | '|' | '||' | '}'\n        break;\n      case 137:                     // 'for'\n        lookahead2W(207);           // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' |\n                                    // '//' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' |\n                                    // 'castable' | 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' |\n                                    // 'instance' | 'intersect' | 'is' | 'le' | 'lt' | 'mod' | 'ne' | 'or' | 'sliding' |\n                                    // 'to' | 'treat' | 'tumbling' | 'union' | '|' | '||' | '}'\n        break;\n      case 174:                     // 'let'\n        lookahead2W(204);           // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' |\n                                    // '//' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' |\n                                    // 'castable' | 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' |\n                                    // 'instance' | 'intersect' | 'is' | 'le' | 'lt' | 'mod' | 'ne' | 'or' | 'score' |\n                                    // 'to' | 'treat' | 'union' | '|' | '||' | '}'\n        break;\n      case 218:                     // 'rename'\n        lookahead2W(205);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n                                    // ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' |\n                                    // 'castable' | 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' |\n                                    // 'instance' | 'intersect' | 'is' | 'json' | 'le' | 'lt' | 'mod' | 'ne' | 'node' |\n                                    // 'or' | 'to' | 'treat' | 'union' | '|' | '||' | '}'\n        break;\n      case 219:                     // 'replace'\n        lookahead2W(206);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n                                    // ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' |\n                                    // 'castable' | 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' |\n                                    // 'instance' | 'intersect' | 'is' | 'le' | 'lt' | 'mod' | 'ne' | 'node' | 'or' |\n                                    // 'to' | 'treat' | 'union' | 'value' | '|' | '||' | '}'\n        break;\n      case 260:                     // 'validate'\n        lookahead2W(209);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n                                    // ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' |\n                                    // 'castable' | 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' |\n                                    // 'instance' | 'intersect' | 'is' | 'lax' | 'le' | 'lt' | 'mod' | 'ne' | 'or' |\n                                    // 'strict' | 'to' | 'treat' | 'type' | 'union' | '{' | '|' | '||' | '}'\n        break;\n      case 276:                     // '{'\n        lookahead2W(276);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | ';' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|' | '}'\n        break;\n      case 278:                     // '{|'\n        lookahead2W(272);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|' | '|}'\n        break;\n      case 5:                       // Wildcard\n      case 45:                      // '..'\n        lookahead2W(185);           // S^WS | EOF | '!' | '!=' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' | ';' | '<' |\n                                    // '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' | 'castable' |\n                                    // 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' | 'instance' |\n                                    // 'intersect' | 'is' | 'le' | 'lt' | 'mod' | 'ne' | 'or' | 'to' | 'treat' |\n                                    // 'union' | '|' | '||' | '}'\n        break;\n      case 31:                      // '$'\n      case 32:                      // '%'\n        lookahead2W(254);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n        break;\n      case 40:                      // '+'\n      case 42:                      // '-'\n        lookahead2W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n        break;\n      case 86:                      // 'break'\n      case 102:                     // 'continue'\n        lookahead2W(200);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n                                    // ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' |\n                                    // 'castable' | 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' |\n                                    // 'instance' | 'intersect' | 'is' | 'le' | 'loop' | 'lt' | 'mod' | 'ne' | 'or' |\n                                    // 'to' | 'treat' | 'union' | '|' | '||' | '}'\n        break;\n      case 110:                     // 'delete'\n      case 159:                     // 'insert'\n        lookahead2W(208);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n                                    // ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' |\n                                    // 'castable' | 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' |\n                                    // 'instance' | 'intersect' | 'is' | 'json' | 'le' | 'lt' | 'mod' | 'ne' | 'node' |\n                                    // 'nodes' | 'or' | 'to' | 'treat' | 'union' | '|' | '||' | '}'\n        break;\n      case 184:                     // 'namespace'\n      case 216:                     // 'processing-instruction'\n        lookahead2W(267);           // NCName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' |\n                                    // '-' | '/' | '//' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' |\n                                    // 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' |\n                                    // 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'contains' |\n                                    // 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' |\n                                    // 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'last' | 'lax' | 'le' | 'let' |\n                                    // 'loop' | 'lt' | 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' |\n                                    // 'ne' | 'node' | 'nodes' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'self' | 'sliding' | 'some' | 'stable' | 'start' | 'strict' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' |\n                                    // 'union' | 'unordered' | 'updating' | 'validate' | 'value' | 'variable' |\n                                    // 'version' | 'where' | 'while' | 'with' | 'xquery' | '{' | '|' | '||' | '}'\n        break;\n      case 103:                     // 'copy'\n      case 129:                     // 'every'\n      case 235:                     // 'some'\n      case 262:                     // 'variable'\n        lookahead2W(196);           // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' |\n                                    // '//' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' |\n                                    // 'castable' | 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' |\n                                    // 'instance' | 'intersect' | 'is' | 'le' | 'lt' | 'mod' | 'ne' | 'or' | 'to' |\n                                    // 'treat' | 'union' | '|' | '||' | '}'\n        break;\n      case 8:                       // IntegerLiteral\n      case 9:                       // DecimalLiteral\n      case 10:                      // DoubleLiteral\n      case 11:                      // StringLiteral\n      case 44:                      // '.'\n        lookahead2W(191);           // S^WS | EOF | '!' | '!=' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' | ';' |\n                                    // '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' | 'castable' |\n                                    // 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' | 'instance' |\n                                    // 'intersect' | 'is' | 'le' | 'lt' | 'mod' | 'ne' | 'or' | 'to' | 'treat' |\n                                    // 'union' | '|' | '||' | '}'\n        break;\n      case 78:                      // 'array'\n      case 124:                     // 'empty-sequence'\n      case 165:                     // 'item'\n      case 167:                     // 'json-item'\n      case 242:                     // 'structured-item'\n        lookahead2W(190);           // S^WS | EOF | '!' | '!=' | '#' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' | ';' |\n                                    // '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' | 'castable' |\n                                    // 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' | 'instance' |\n                                    // 'intersect' | 'is' | 'le' | 'lt' | 'mod' | 'ne' | 'or' | 'to' | 'treat' |\n                                    // 'union' | '|' | '||' | '}'\n        break;\n      case 96:                      // 'comment'\n      case 119:                     // 'document'\n      case 202:                     // 'ordered'\n      case 244:                     // 'text'\n      case 250:                     // 'try'\n      case 256:                     // 'unordered'\n        lookahead2W(203);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n                                    // ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' |\n                                    // 'castable' | 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' |\n                                    // 'instance' | 'intersect' | 'is' | 'le' | 'lt' | 'mod' | 'ne' | 'or' | 'to' |\n                                    // 'treat' | 'union' | '{' | '|' | '||' | '}'\n        break;\n      case 73:                      // 'ancestor'\n      case 74:                      // 'ancestor-or-self'\n      case 93:                      // 'child'\n      case 111:                     // 'descendant'\n      case 112:                     // 'descendant-or-self'\n      case 135:                     // 'following'\n      case 136:                     // 'following-sibling'\n      case 206:                     // 'parent'\n      case 212:                     // 'preceding'\n      case 213:                     // 'preceding-sibling'\n      case 229:                     // 'self'\n        lookahead2W(197);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n                                    // '::' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' |\n                                    // 'castable' | 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' |\n                                    // 'instance' | 'intersect' | 'is' | 'le' | 'lt' | 'mod' | 'ne' | 'or' | 'to' |\n                                    // 'treat' | 'union' | '|' | '||' | '}'\n        break;\n      case 6:                       // EQName^Token\n      case 70:                      // 'after'\n      case 72:                      // 'allowing'\n      case 75:                      // 'and'\n      case 79:                      // 'as'\n      case 80:                      // 'ascending'\n      case 81:                      // 'at'\n      case 83:                      // 'base-uri'\n      case 84:                      // 'before'\n      case 85:                      // 'boundary-space'\n      case 88:                      // 'case'\n      case 89:                      // 'cast'\n      case 90:                      // 'castable'\n      case 91:                      // 'catch'\n      case 94:                      // 'collation'\n      case 97:                      // 'constraint'\n      case 98:                      // 'construction'\n      case 101:                     // 'context'\n      case 104:                     // 'copy-namespaces'\n      case 105:                     // 'count'\n      case 106:                     // 'decimal-format'\n      case 108:                     // 'declare'\n      case 109:                     // 'default'\n      case 113:                     // 'descending'\n      case 118:                     // 'div'\n      case 120:                     // 'document-node'\n      case 122:                     // 'else'\n      case 123:                     // 'empty'\n      case 125:                     // 'encoding'\n      case 126:                     // 'end'\n      case 128:                     // 'eq'\n      case 131:                     // 'except'\n      case 133:                     // 'external'\n      case 134:                     // 'first'\n      case 141:                     // 'ft-option'\n      case 145:                     // 'function'\n      case 146:                     // 'ge'\n      case 148:                     // 'group'\n      case 150:                     // 'gt'\n      case 151:                     // 'idiv'\n      case 152:                     // 'if'\n      case 153:                     // 'import'\n      case 154:                     // 'in'\n      case 155:                     // 'index'\n      case 160:                     // 'instance'\n      case 161:                     // 'integrity'\n      case 162:                     // 'intersect'\n      case 163:                     // 'into'\n      case 164:                     // 'is'\n      case 166:                     // 'json'\n      case 170:                     // 'last'\n      case 171:                     // 'lax'\n      case 172:                     // 'le'\n      case 176:                     // 'loop'\n      case 178:                     // 'lt'\n      case 180:                     // 'mod'\n      case 181:                     // 'modify'\n      case 182:                     // 'module'\n      case 185:                     // 'namespace-node'\n      case 186:                     // 'ne'\n      case 191:                     // 'node'\n      case 192:                     // 'nodes'\n      case 194:                     // 'object'\n      case 198:                     // 'only'\n      case 199:                     // 'option'\n      case 200:                     // 'or'\n      case 201:                     // 'order'\n      case 203:                     // 'ordering'\n      case 220:                     // 'return'\n      case 221:                     // 'returning'\n      case 222:                     // 'revalidation'\n      case 224:                     // 'satisfies'\n      case 225:                     // 'schema'\n      case 226:                     // 'schema-attribute'\n      case 227:                     // 'schema-element'\n      case 228:                     // 'score'\n      case 234:                     // 'sliding'\n      case 236:                     // 'stable'\n      case 237:                     // 'start'\n      case 240:                     // 'strict'\n      case 243:                     // 'switch'\n      case 248:                     // 'to'\n      case 249:                     // 'treat'\n      case 251:                     // 'tumbling'\n      case 252:                     // 'type'\n      case 253:                     // 'typeswitch'\n      case 254:                     // 'union'\n      case 257:                     // 'updating'\n      case 261:                     // 'value'\n      case 263:                     // 'version'\n      case 266:                     // 'where'\n      case 267:                     // 'while'\n      case 270:                     // 'with'\n      case 274:                     // 'xquery'\n        lookahead2W(194);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n                                    // ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' |\n                                    // 'castable' | 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' |\n                                    // 'instance' | 'intersect' | 'is' | 'le' | 'lt' | 'mod' | 'ne' | 'or' | 'to' |\n                                    // 'treat' | 'union' | '|' | '||' | '}'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 25                  // EOF\n       && lk != 53                  // ';'\n       && lk != 282                 // '}'\n       && lk != 12805               // Wildcard EOF\n       && lk != 12806               // EQName^Token EOF\n       && lk != 12808               // IntegerLiteral EOF\n       && lk != 12809               // DecimalLiteral EOF\n       && lk != 12810               // DoubleLiteral EOF\n       && lk != 12811               // StringLiteral EOF\n       && lk != 12844               // '.' EOF\n       && lk != 12845               // '..' EOF\n       && lk != 12846               // '/' EOF\n       && lk != 12870               // 'after' EOF\n       && lk != 12872               // 'allowing' EOF\n       && lk != 12873               // 'ancestor' EOF\n       && lk != 12874               // 'ancestor-or-self' EOF\n       && lk != 12875               // 'and' EOF\n       && lk != 12877               // 'append' EOF\n       && lk != 12878               // 'array' EOF\n       && lk != 12879               // 'as' EOF\n       && lk != 12880               // 'ascending' EOF\n       && lk != 12881               // 'at' EOF\n       && lk != 12882               // 'attribute' EOF\n       && lk != 12883               // 'base-uri' EOF\n       && lk != 12884               // 'before' EOF\n       && lk != 12885               // 'boundary-space' EOF\n       && lk != 12886               // 'break' EOF\n       && lk != 12888               // 'case' EOF\n       && lk != 12889               // 'cast' EOF\n       && lk != 12890               // 'castable' EOF\n       && lk != 12891               // 'catch' EOF\n       && lk != 12893               // 'child' EOF\n       && lk != 12894               // 'collation' EOF\n       && lk != 12896               // 'comment' EOF\n       && lk != 12897               // 'constraint' EOF\n       && lk != 12898               // 'construction' EOF\n       && lk != 12901               // 'context' EOF\n       && lk != 12902               // 'continue' EOF\n       && lk != 12903               // 'copy' EOF\n       && lk != 12904               // 'copy-namespaces' EOF\n       && lk != 12905               // 'count' EOF\n       && lk != 12906               // 'decimal-format' EOF\n       && lk != 12908               // 'declare' EOF\n       && lk != 12909               // 'default' EOF\n       && lk != 12910               // 'delete' EOF\n       && lk != 12911               // 'descendant' EOF\n       && lk != 12912               // 'descendant-or-self' EOF\n       && lk != 12913               // 'descending' EOF\n       && lk != 12918               // 'div' EOF\n       && lk != 12919               // 'document' EOF\n       && lk != 12920               // 'document-node' EOF\n       && lk != 12921               // 'element' EOF\n       && lk != 12922               // 'else' EOF\n       && lk != 12923               // 'empty' EOF\n       && lk != 12924               // 'empty-sequence' EOF\n       && lk != 12925               // 'encoding' EOF\n       && lk != 12926               // 'end' EOF\n       && lk != 12928               // 'eq' EOF\n       && lk != 12929               // 'every' EOF\n       && lk != 12931               // 'except' EOF\n       && lk != 12932               // 'exit' EOF\n       && lk != 12933               // 'external' EOF\n       && lk != 12934               // 'first' EOF\n       && lk != 12935               // 'following' EOF\n       && lk != 12936               // 'following-sibling' EOF\n       && lk != 12937               // 'for' EOF\n       && lk != 12941               // 'ft-option' EOF\n       && lk != 12945               // 'function' EOF\n       && lk != 12946               // 'ge' EOF\n       && lk != 12948               // 'group' EOF\n       && lk != 12950               // 'gt' EOF\n       && lk != 12951               // 'idiv' EOF\n       && lk != 12952               // 'if' EOF\n       && lk != 12953               // 'import' EOF\n       && lk != 12954               // 'in' EOF\n       && lk != 12955               // 'index' EOF\n       && lk != 12959               // 'insert' EOF\n       && lk != 12960               // 'instance' EOF\n       && lk != 12961               // 'integrity' EOF\n       && lk != 12962               // 'intersect' EOF\n       && lk != 12963               // 'into' EOF\n       && lk != 12964               // 'is' EOF\n       && lk != 12965               // 'item' EOF\n       && lk != 12966               // 'json' EOF\n       && lk != 12967               // 'json-item' EOF\n       && lk != 12970               // 'last' EOF\n       && lk != 12971               // 'lax' EOF\n       && lk != 12972               // 'le' EOF\n       && lk != 12974               // 'let' EOF\n       && lk != 12976               // 'loop' EOF\n       && lk != 12978               // 'lt' EOF\n       && lk != 12980               // 'mod' EOF\n       && lk != 12981               // 'modify' EOF\n       && lk != 12982               // 'module' EOF\n       && lk != 12984               // 'namespace' EOF\n       && lk != 12985               // 'namespace-node' EOF\n       && lk != 12986               // 'ne' EOF\n       && lk != 12991               // 'node' EOF\n       && lk != 12992               // 'nodes' EOF\n       && lk != 12994               // 'object' EOF\n       && lk != 12998               // 'only' EOF\n       && lk != 12999               // 'option' EOF\n       && lk != 13000               // 'or' EOF\n       && lk != 13001               // 'order' EOF\n       && lk != 13002               // 'ordered' EOF\n       && lk != 13003               // 'ordering' EOF\n       && lk != 13006               // 'parent' EOF\n       && lk != 13012               // 'preceding' EOF\n       && lk != 13013               // 'preceding-sibling' EOF\n       && lk != 13016               // 'processing-instruction' EOF\n       && lk != 13018               // 'rename' EOF\n       && lk != 13019               // 'replace' EOF\n       && lk != 13020               // 'return' EOF\n       && lk != 13021               // 'returning' EOF\n       && lk != 13022               // 'revalidation' EOF\n       && lk != 13024               // 'satisfies' EOF\n       && lk != 13025               // 'schema' EOF\n       && lk != 13026               // 'schema-attribute' EOF\n       && lk != 13027               // 'schema-element' EOF\n       && lk != 13028               // 'score' EOF\n       && lk != 13029               // 'self' EOF\n       && lk != 13034               // 'sliding' EOF\n       && lk != 13035               // 'some' EOF\n       && lk != 13036               // 'stable' EOF\n       && lk != 13037               // 'start' EOF\n       && lk != 13040               // 'strict' EOF\n       && lk != 13042               // 'structured-item' EOF\n       && lk != 13043               // 'switch' EOF\n       && lk != 13044               // 'text' EOF\n       && lk != 13048               // 'to' EOF\n       && lk != 13049               // 'treat' EOF\n       && lk != 13050               // 'try' EOF\n       && lk != 13051               // 'tumbling' EOF\n       && lk != 13052               // 'type' EOF\n       && lk != 13053               // 'typeswitch' EOF\n       && lk != 13054               // 'union' EOF\n       && lk != 13056               // 'unordered' EOF\n       && lk != 13057               // 'updating' EOF\n       && lk != 13060               // 'validate' EOF\n       && lk != 13061               // 'value' EOF\n       && lk != 13062               // 'variable' EOF\n       && lk != 13063               // 'version' EOF\n       && lk != 13066               // 'where' EOF\n       && lk != 13067               // 'while' EOF\n       && lk != 13070               // 'with' EOF\n       && lk != 13074               // 'xquery' EOF\n       && lk != 16134               // 'variable' '$'\n       && lk != 20997               // Wildcard ','\n       && lk != 20998               // EQName^Token ','\n       && lk != 21000               // IntegerLiteral ','\n       && lk != 21001               // DecimalLiteral ','\n       && lk != 21002               // DoubleLiteral ','\n       && lk != 21003               // StringLiteral ','\n       && lk != 21036               // '.' ','\n       && lk != 21037               // '..' ','\n       && lk != 21038               // '/' ','\n       && lk != 21062               // 'after' ','\n       && lk != 21064               // 'allowing' ','\n       && lk != 21065               // 'ancestor' ','\n       && lk != 21066               // 'ancestor-or-self' ','\n       && lk != 21067               // 'and' ','\n       && lk != 21069               // 'append' ','\n       && lk != 21070               // 'array' ','\n       && lk != 21071               // 'as' ','\n       && lk != 21072               // 'ascending' ','\n       && lk != 21073               // 'at' ','\n       && lk != 21074               // 'attribute' ','\n       && lk != 21075               // 'base-uri' ','\n       && lk != 21076               // 'before' ','\n       && lk != 21077               // 'boundary-space' ','\n       && lk != 21078               // 'break' ','\n       && lk != 21080               // 'case' ','\n       && lk != 21081               // 'cast' ','\n       && lk != 21082               // 'castable' ','\n       && lk != 21083               // 'catch' ','\n       && lk != 21085               // 'child' ','\n       && lk != 21086               // 'collation' ','\n       && lk != 21088               // 'comment' ','\n       && lk != 21089               // 'constraint' ','\n       && lk != 21090               // 'construction' ','\n       && lk != 21093               // 'context' ','\n       && lk != 21094               // 'continue' ','\n       && lk != 21095               // 'copy' ','\n       && lk != 21096               // 'copy-namespaces' ','\n       && lk != 21097               // 'count' ','\n       && lk != 21098               // 'decimal-format' ','\n       && lk != 21100               // 'declare' ','\n       && lk != 21101               // 'default' ','\n       && lk != 21102               // 'delete' ','\n       && lk != 21103               // 'descendant' ','\n       && lk != 21104               // 'descendant-or-self' ','\n       && lk != 21105               // 'descending' ','\n       && lk != 21110               // 'div' ','\n       && lk != 21111               // 'document' ','\n       && lk != 21112               // 'document-node' ','\n       && lk != 21113               // 'element' ','\n       && lk != 21114               // 'else' ','\n       && lk != 21115               // 'empty' ','\n       && lk != 21116               // 'empty-sequence' ','\n       && lk != 21117               // 'encoding' ','\n       && lk != 21118               // 'end' ','\n       && lk != 21120               // 'eq' ','\n       && lk != 21121               // 'every' ','\n       && lk != 21123               // 'except' ','\n       && lk != 21124               // 'exit' ','\n       && lk != 21125               // 'external' ','\n       && lk != 21126               // 'first' ','\n       && lk != 21127               // 'following' ','\n       && lk != 21128               // 'following-sibling' ','\n       && lk != 21129               // 'for' ','\n       && lk != 21133               // 'ft-option' ','\n       && lk != 21137               // 'function' ','\n       && lk != 21138               // 'ge' ','\n       && lk != 21140               // 'group' ','\n       && lk != 21142               // 'gt' ','\n       && lk != 21143               // 'idiv' ','\n       && lk != 21144               // 'if' ','\n       && lk != 21145               // 'import' ','\n       && lk != 21146               // 'in' ','\n       && lk != 21147               // 'index' ','\n       && lk != 21151               // 'insert' ','\n       && lk != 21152               // 'instance' ','\n       && lk != 21153               // 'integrity' ','\n       && lk != 21154               // 'intersect' ','\n       && lk != 21155               // 'into' ','\n       && lk != 21156               // 'is' ','\n       && lk != 21157               // 'item' ','\n       && lk != 21158               // 'json' ','\n       && lk != 21159               // 'json-item' ','\n       && lk != 21162               // 'last' ','\n       && lk != 21163               // 'lax' ','\n       && lk != 21164               // 'le' ','\n       && lk != 21166               // 'let' ','\n       && lk != 21168               // 'loop' ','\n       && lk != 21170               // 'lt' ','\n       && lk != 21172               // 'mod' ','\n       && lk != 21173               // 'modify' ','\n       && lk != 21174               // 'module' ','\n       && lk != 21176               // 'namespace' ','\n       && lk != 21177               // 'namespace-node' ','\n       && lk != 21178               // 'ne' ','\n       && lk != 21183               // 'node' ','\n       && lk != 21184               // 'nodes' ','\n       && lk != 21186               // 'object' ','\n       && lk != 21190               // 'only' ','\n       && lk != 21191               // 'option' ','\n       && lk != 21192               // 'or' ','\n       && lk != 21193               // 'order' ','\n       && lk != 21194               // 'ordered' ','\n       && lk != 21195               // 'ordering' ','\n       && lk != 21198               // 'parent' ','\n       && lk != 21204               // 'preceding' ','\n       && lk != 21205               // 'preceding-sibling' ','\n       && lk != 21208               // 'processing-instruction' ','\n       && lk != 21210               // 'rename' ','\n       && lk != 21211               // 'replace' ','\n       && lk != 21212               // 'return' ','\n       && lk != 21213               // 'returning' ','\n       && lk != 21214               // 'revalidation' ','\n       && lk != 21216               // 'satisfies' ','\n       && lk != 21217               // 'schema' ','\n       && lk != 21218               // 'schema-attribute' ','\n       && lk != 21219               // 'schema-element' ','\n       && lk != 21220               // 'score' ','\n       && lk != 21221               // 'self' ','\n       && lk != 21226               // 'sliding' ','\n       && lk != 21227               // 'some' ','\n       && lk != 21228               // 'stable' ','\n       && lk != 21229               // 'start' ','\n       && lk != 21232               // 'strict' ','\n       && lk != 21234               // 'structured-item' ','\n       && lk != 21235               // 'switch' ','\n       && lk != 21236               // 'text' ','\n       && lk != 21240               // 'to' ','\n       && lk != 21241               // 'treat' ','\n       && lk != 21242               // 'try' ','\n       && lk != 21243               // 'tumbling' ','\n       && lk != 21244               // 'type' ','\n       && lk != 21245               // 'typeswitch' ','\n       && lk != 21246               // 'union' ','\n       && lk != 21248               // 'unordered' ','\n       && lk != 21249               // 'updating' ','\n       && lk != 21252               // 'validate' ','\n       && lk != 21253               // 'value' ','\n       && lk != 21254               // 'variable' ','\n       && lk != 21255               // 'version' ','\n       && lk != 21258               // 'where' ','\n       && lk != 21259               // 'while' ','\n       && lk != 21262               // 'with' ','\n       && lk != 21266               // 'xquery' ','\n       && lk != 27141               // Wildcard ';'\n       && lk != 27142               // EQName^Token ';'\n       && lk != 27144               // IntegerLiteral ';'\n       && lk != 27145               // DecimalLiteral ';'\n       && lk != 27146               // DoubleLiteral ';'\n       && lk != 27147               // StringLiteral ';'\n       && lk != 27180               // '.' ';'\n       && lk != 27181               // '..' ';'\n       && lk != 27182               // '/' ';'\n       && lk != 27206               // 'after' ';'\n       && lk != 27208               // 'allowing' ';'\n       && lk != 27209               // 'ancestor' ';'\n       && lk != 27210               // 'ancestor-or-self' ';'\n       && lk != 27211               // 'and' ';'\n       && lk != 27213               // 'append' ';'\n       && lk != 27214               // 'array' ';'\n       && lk != 27215               // 'as' ';'\n       && lk != 27216               // 'ascending' ';'\n       && lk != 27217               // 'at' ';'\n       && lk != 27218               // 'attribute' ';'\n       && lk != 27219               // 'base-uri' ';'\n       && lk != 27220               // 'before' ';'\n       && lk != 27221               // 'boundary-space' ';'\n       && lk != 27222               // 'break' ';'\n       && lk != 27224               // 'case' ';'\n       && lk != 27225               // 'cast' ';'\n       && lk != 27226               // 'castable' ';'\n       && lk != 27227               // 'catch' ';'\n       && lk != 27229               // 'child' ';'\n       && lk != 27230               // 'collation' ';'\n       && lk != 27232               // 'comment' ';'\n       && lk != 27233               // 'constraint' ';'\n       && lk != 27234               // 'construction' ';'\n       && lk != 27237               // 'context' ';'\n       && lk != 27238               // 'continue' ';'\n       && lk != 27239               // 'copy' ';'\n       && lk != 27240               // 'copy-namespaces' ';'\n       && lk != 27241               // 'count' ';'\n       && lk != 27242               // 'decimal-format' ';'\n       && lk != 27244               // 'declare' ';'\n       && lk != 27245               // 'default' ';'\n       && lk != 27246               // 'delete' ';'\n       && lk != 27247               // 'descendant' ';'\n       && lk != 27248               // 'descendant-or-self' ';'\n       && lk != 27249               // 'descending' ';'\n       && lk != 27254               // 'div' ';'\n       && lk != 27255               // 'document' ';'\n       && lk != 27256               // 'document-node' ';'\n       && lk != 27257               // 'element' ';'\n       && lk != 27258               // 'else' ';'\n       && lk != 27259               // 'empty' ';'\n       && lk != 27260               // 'empty-sequence' ';'\n       && lk != 27261               // 'encoding' ';'\n       && lk != 27262               // 'end' ';'\n       && lk != 27264               // 'eq' ';'\n       && lk != 27265               // 'every' ';'\n       && lk != 27267               // 'except' ';'\n       && lk != 27268               // 'exit' ';'\n       && lk != 27269               // 'external' ';'\n       && lk != 27270               // 'first' ';'\n       && lk != 27271               // 'following' ';'\n       && lk != 27272               // 'following-sibling' ';'\n       && lk != 27273               // 'for' ';'\n       && lk != 27277               // 'ft-option' ';'\n       && lk != 27281               // 'function' ';'\n       && lk != 27282               // 'ge' ';'\n       && lk != 27284               // 'group' ';'\n       && lk != 27286               // 'gt' ';'\n       && lk != 27287               // 'idiv' ';'\n       && lk != 27288               // 'if' ';'\n       && lk != 27289               // 'import' ';'\n       && lk != 27290               // 'in' ';'\n       && lk != 27291               // 'index' ';'\n       && lk != 27295               // 'insert' ';'\n       && lk != 27296               // 'instance' ';'\n       && lk != 27297               // 'integrity' ';'\n       && lk != 27298               // 'intersect' ';'\n       && lk != 27299               // 'into' ';'\n       && lk != 27300               // 'is' ';'\n       && lk != 27301               // 'item' ';'\n       && lk != 27302               // 'json' ';'\n       && lk != 27303               // 'json-item' ';'\n       && lk != 27306               // 'last' ';'\n       && lk != 27307               // 'lax' ';'\n       && lk != 27308               // 'le' ';'\n       && lk != 27310               // 'let' ';'\n       && lk != 27312               // 'loop' ';'\n       && lk != 27314               // 'lt' ';'\n       && lk != 27316               // 'mod' ';'\n       && lk != 27317               // 'modify' ';'\n       && lk != 27318               // 'module' ';'\n       && lk != 27320               // 'namespace' ';'\n       && lk != 27321               // 'namespace-node' ';'\n       && lk != 27322               // 'ne' ';'\n       && lk != 27327               // 'node' ';'\n       && lk != 27328               // 'nodes' ';'\n       && lk != 27330               // 'object' ';'\n       && lk != 27334               // 'only' ';'\n       && lk != 27335               // 'option' ';'\n       && lk != 27336               // 'or' ';'\n       && lk != 27337               // 'order' ';'\n       && lk != 27338               // 'ordered' ';'\n       && lk != 27339               // 'ordering' ';'\n       && lk != 27342               // 'parent' ';'\n       && lk != 27348               // 'preceding' ';'\n       && lk != 27349               // 'preceding-sibling' ';'\n       && lk != 27352               // 'processing-instruction' ';'\n       && lk != 27354               // 'rename' ';'\n       && lk != 27355               // 'replace' ';'\n       && lk != 27356               // 'return' ';'\n       && lk != 27357               // 'returning' ';'\n       && lk != 27358               // 'revalidation' ';'\n       && lk != 27360               // 'satisfies' ';'\n       && lk != 27361               // 'schema' ';'\n       && lk != 27362               // 'schema-attribute' ';'\n       && lk != 27363               // 'schema-element' ';'\n       && lk != 27364               // 'score' ';'\n       && lk != 27365               // 'self' ';'\n       && lk != 27370               // 'sliding' ';'\n       && lk != 27371               // 'some' ';'\n       && lk != 27372               // 'stable' ';'\n       && lk != 27373               // 'start' ';'\n       && lk != 27376               // 'strict' ';'\n       && lk != 27378               // 'structured-item' ';'\n       && lk != 27379               // 'switch' ';'\n       && lk != 27380               // 'text' ';'\n       && lk != 27384               // 'to' ';'\n       && lk != 27385               // 'treat' ';'\n       && lk != 27386               // 'try' ';'\n       && lk != 27387               // 'tumbling' ';'\n       && lk != 27388               // 'type' ';'\n       && lk != 27389               // 'typeswitch' ';'\n       && lk != 27390               // 'union' ';'\n       && lk != 27392               // 'unordered' ';'\n       && lk != 27393               // 'updating' ';'\n       && lk != 27396               // 'validate' ';'\n       && lk != 27397               // 'value' ';'\n       && lk != 27398               // 'variable' ';'\n       && lk != 27399               // 'version' ';'\n       && lk != 27402               // 'where' ';'\n       && lk != 27403               // 'while' ';'\n       && lk != 27406               // 'with' ';'\n       && lk != 27410               // 'xquery' ';'\n       && lk != 90198               // 'break' 'loop'\n       && lk != 90214               // 'continue' 'loop'\n       && lk != 113284              // 'exit' 'returning'\n       && lk != 144389              // Wildcard '}'\n       && lk != 144390              // EQName^Token '}'\n       && lk != 144392              // IntegerLiteral '}'\n       && lk != 144393              // DecimalLiteral '}'\n       && lk != 144394              // DoubleLiteral '}'\n       && lk != 144395              // StringLiteral '}'\n       && lk != 144428              // '.' '}'\n       && lk != 144429              // '..' '}'\n       && lk != 144430              // '/' '}'\n       && lk != 144454              // 'after' '}'\n       && lk != 144456              // 'allowing' '}'\n       && lk != 144457              // 'ancestor' '}'\n       && lk != 144458              // 'ancestor-or-self' '}'\n       && lk != 144459              // 'and' '}'\n       && lk != 144461              // 'append' '}'\n       && lk != 144462              // 'array' '}'\n       && lk != 144463              // 'as' '}'\n       && lk != 144464              // 'ascending' '}'\n       && lk != 144465              // 'at' '}'\n       && lk != 144466              // 'attribute' '}'\n       && lk != 144467              // 'base-uri' '}'\n       && lk != 144468              // 'before' '}'\n       && lk != 144469              // 'boundary-space' '}'\n       && lk != 144470              // 'break' '}'\n       && lk != 144472              // 'case' '}'\n       && lk != 144473              // 'cast' '}'\n       && lk != 144474              // 'castable' '}'\n       && lk != 144475              // 'catch' '}'\n       && lk != 144477              // 'child' '}'\n       && lk != 144478              // 'collation' '}'\n       && lk != 144480              // 'comment' '}'\n       && lk != 144481              // 'constraint' '}'\n       && lk != 144482              // 'construction' '}'\n       && lk != 144485              // 'context' '}'\n       && lk != 144486              // 'continue' '}'\n       && lk != 144487              // 'copy' '}'\n       && lk != 144488              // 'copy-namespaces' '}'\n       && lk != 144489              // 'count' '}'\n       && lk != 144490              // 'decimal-format' '}'\n       && lk != 144492              // 'declare' '}'\n       && lk != 144493              // 'default' '}'\n       && lk != 144494              // 'delete' '}'\n       && lk != 144495              // 'descendant' '}'\n       && lk != 144496              // 'descendant-or-self' '}'\n       && lk != 144497              // 'descending' '}'\n       && lk != 144502              // 'div' '}'\n       && lk != 144503              // 'document' '}'\n       && lk != 144504              // 'document-node' '}'\n       && lk != 144505              // 'element' '}'\n       && lk != 144506              // 'else' '}'\n       && lk != 144507              // 'empty' '}'\n       && lk != 144508              // 'empty-sequence' '}'\n       && lk != 144509              // 'encoding' '}'\n       && lk != 144510              // 'end' '}'\n       && lk != 144512              // 'eq' '}'\n       && lk != 144513              // 'every' '}'\n       && lk != 144515              // 'except' '}'\n       && lk != 144516              // 'exit' '}'\n       && lk != 144517              // 'external' '}'\n       && lk != 144518              // 'first' '}'\n       && lk != 144519              // 'following' '}'\n       && lk != 144520              // 'following-sibling' '}'\n       && lk != 144521              // 'for' '}'\n       && lk != 144525              // 'ft-option' '}'\n       && lk != 144529              // 'function' '}'\n       && lk != 144530              // 'ge' '}'\n       && lk != 144532              // 'group' '}'\n       && lk != 144534              // 'gt' '}'\n       && lk != 144535              // 'idiv' '}'\n       && lk != 144536              // 'if' '}'\n       && lk != 144537              // 'import' '}'\n       && lk != 144538              // 'in' '}'\n       && lk != 144539              // 'index' '}'\n       && lk != 144543              // 'insert' '}'\n       && lk != 144544              // 'instance' '}'\n       && lk != 144545              // 'integrity' '}'\n       && lk != 144546              // 'intersect' '}'\n       && lk != 144547              // 'into' '}'\n       && lk != 144548              // 'is' '}'\n       && lk != 144549              // 'item' '}'\n       && lk != 144550              // 'json' '}'\n       && lk != 144551              // 'json-item' '}'\n       && lk != 144554              // 'last' '}'\n       && lk != 144555              // 'lax' '}'\n       && lk != 144556              // 'le' '}'\n       && lk != 144558              // 'let' '}'\n       && lk != 144560              // 'loop' '}'\n       && lk != 144562              // 'lt' '}'\n       && lk != 144564              // 'mod' '}'\n       && lk != 144565              // 'modify' '}'\n       && lk != 144566              // 'module' '}'\n       && lk != 144568              // 'namespace' '}'\n       && lk != 144569              // 'namespace-node' '}'\n       && lk != 144570              // 'ne' '}'\n       && lk != 144575              // 'node' '}'\n       && lk != 144576              // 'nodes' '}'\n       && lk != 144578              // 'object' '}'\n       && lk != 144582              // 'only' '}'\n       && lk != 144583              // 'option' '}'\n       && lk != 144584              // 'or' '}'\n       && lk != 144585              // 'order' '}'\n       && lk != 144586              // 'ordered' '}'\n       && lk != 144587              // 'ordering' '}'\n       && lk != 144590              // 'parent' '}'\n       && lk != 144596              // 'preceding' '}'\n       && lk != 144597              // 'preceding-sibling' '}'\n       && lk != 144600              // 'processing-instruction' '}'\n       && lk != 144602              // 'rename' '}'\n       && lk != 144603              // 'replace' '}'\n       && lk != 144604              // 'return' '}'\n       && lk != 144605              // 'returning' '}'\n       && lk != 144606              // 'revalidation' '}'\n       && lk != 144608              // 'satisfies' '}'\n       && lk != 144609              // 'schema' '}'\n       && lk != 144610              // 'schema-attribute' '}'\n       && lk != 144611              // 'schema-element' '}'\n       && lk != 144612              // 'score' '}'\n       && lk != 144613              // 'self' '}'\n       && lk != 144618              // 'sliding' '}'\n       && lk != 144619              // 'some' '}'\n       && lk != 144620              // 'stable' '}'\n       && lk != 144621              // 'start' '}'\n       && lk != 144624              // 'strict' '}'\n       && lk != 144626              // 'structured-item' '}'\n       && lk != 144627              // 'switch' '}'\n       && lk != 144628              // 'text' '}'\n       && lk != 144632              // 'to' '}'\n       && lk != 144633              // 'treat' '}'\n       && lk != 144634              // 'try' '}'\n       && lk != 144635              // 'tumbling' '}'\n       && lk != 144636              // 'type' '}'\n       && lk != 144637              // 'typeswitch' '}'\n       && lk != 144638              // 'union' '}'\n       && lk != 144640              // 'unordered' '}'\n       && lk != 144641              // 'updating' '}'\n       && lk != 144644              // 'validate' '}'\n       && lk != 144645              // 'value' '}'\n       && lk != 144646              // 'variable' '}'\n       && lk != 144647              // 'version' '}'\n       && lk != 144650              // 'where' '}'\n       && lk != 144651              // 'while' '}'\n       && lk != 144654              // 'with' '}'\n       && lk != 144658)             // 'xquery' '}'\n      {\n        lk = memoized(6, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            try_Statement();\n            lk = -1;\n          }\n          catch (p1A)\n          {\n            lk = -2;\n          }\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(6, e0, lk);\n        }\n      }\n      if (lk != -1\n       && lk != 53                  // ';'\n       && lk != 16134               // 'variable' '$'\n       && lk != 27141               // Wildcard ';'\n       && lk != 27142               // EQName^Token ';'\n       && lk != 27144               // IntegerLiteral ';'\n       && lk != 27145               // DecimalLiteral ';'\n       && lk != 27146               // DoubleLiteral ';'\n       && lk != 27147               // StringLiteral ';'\n       && lk != 27180               // '.' ';'\n       && lk != 27181               // '..' ';'\n       && lk != 27182               // '/' ';'\n       && lk != 27206               // 'after' ';'\n       && lk != 27208               // 'allowing' ';'\n       && lk != 27209               // 'ancestor' ';'\n       && lk != 27210               // 'ancestor-or-self' ';'\n       && lk != 27211               // 'and' ';'\n       && lk != 27213               // 'append' ';'\n       && lk != 27214               // 'array' ';'\n       && lk != 27215               // 'as' ';'\n       && lk != 27216               // 'ascending' ';'\n       && lk != 27217               // 'at' ';'\n       && lk != 27218               // 'attribute' ';'\n       && lk != 27219               // 'base-uri' ';'\n       && lk != 27220               // 'before' ';'\n       && lk != 27221               // 'boundary-space' ';'\n       && lk != 27222               // 'break' ';'\n       && lk != 27224               // 'case' ';'\n       && lk != 27225               // 'cast' ';'\n       && lk != 27226               // 'castable' ';'\n       && lk != 27227               // 'catch' ';'\n       && lk != 27229               // 'child' ';'\n       && lk != 27230               // 'collation' ';'\n       && lk != 27232               // 'comment' ';'\n       && lk != 27233               // 'constraint' ';'\n       && lk != 27234               // 'construction' ';'\n       && lk != 27237               // 'context' ';'\n       && lk != 27238               // 'continue' ';'\n       && lk != 27239               // 'copy' ';'\n       && lk != 27240               // 'copy-namespaces' ';'\n       && lk != 27241               // 'count' ';'\n       && lk != 27242               // 'decimal-format' ';'\n       && lk != 27244               // 'declare' ';'\n       && lk != 27245               // 'default' ';'\n       && lk != 27246               // 'delete' ';'\n       && lk != 27247               // 'descendant' ';'\n       && lk != 27248               // 'descendant-or-self' ';'\n       && lk != 27249               // 'descending' ';'\n       && lk != 27254               // 'div' ';'\n       && lk != 27255               // 'document' ';'\n       && lk != 27256               // 'document-node' ';'\n       && lk != 27257               // 'element' ';'\n       && lk != 27258               // 'else' ';'\n       && lk != 27259               // 'empty' ';'\n       && lk != 27260               // 'empty-sequence' ';'\n       && lk != 27261               // 'encoding' ';'\n       && lk != 27262               // 'end' ';'\n       && lk != 27264               // 'eq' ';'\n       && lk != 27265               // 'every' ';'\n       && lk != 27267               // 'except' ';'\n       && lk != 27268               // 'exit' ';'\n       && lk != 27269               // 'external' ';'\n       && lk != 27270               // 'first' ';'\n       && lk != 27271               // 'following' ';'\n       && lk != 27272               // 'following-sibling' ';'\n       && lk != 27273               // 'for' ';'\n       && lk != 27277               // 'ft-option' ';'\n       && lk != 27281               // 'function' ';'\n       && lk != 27282               // 'ge' ';'\n       && lk != 27284               // 'group' ';'\n       && lk != 27286               // 'gt' ';'\n       && lk != 27287               // 'idiv' ';'\n       && lk != 27288               // 'if' ';'\n       && lk != 27289               // 'import' ';'\n       && lk != 27290               // 'in' ';'\n       && lk != 27291               // 'index' ';'\n       && lk != 27295               // 'insert' ';'\n       && lk != 27296               // 'instance' ';'\n       && lk != 27297               // 'integrity' ';'\n       && lk != 27298               // 'intersect' ';'\n       && lk != 27299               // 'into' ';'\n       && lk != 27300               // 'is' ';'\n       && lk != 27301               // 'item' ';'\n       && lk != 27302               // 'json' ';'\n       && lk != 27303               // 'json-item' ';'\n       && lk != 27306               // 'last' ';'\n       && lk != 27307               // 'lax' ';'\n       && lk != 27308               // 'le' ';'\n       && lk != 27310               // 'let' ';'\n       && lk != 27312               // 'loop' ';'\n       && lk != 27314               // 'lt' ';'\n       && lk != 27316               // 'mod' ';'\n       && lk != 27317               // 'modify' ';'\n       && lk != 27318               // 'module' ';'\n       && lk != 27320               // 'namespace' ';'\n       && lk != 27321               // 'namespace-node' ';'\n       && lk != 27322               // 'ne' ';'\n       && lk != 27327               // 'node' ';'\n       && lk != 27328               // 'nodes' ';'\n       && lk != 27330               // 'object' ';'\n       && lk != 27334               // 'only' ';'\n       && lk != 27335               // 'option' ';'\n       && lk != 27336               // 'or' ';'\n       && lk != 27337               // 'order' ';'\n       && lk != 27338               // 'ordered' ';'\n       && lk != 27339               // 'ordering' ';'\n       && lk != 27342               // 'parent' ';'\n       && lk != 27348               // 'preceding' ';'\n       && lk != 27349               // 'preceding-sibling' ';'\n       && lk != 27352               // 'processing-instruction' ';'\n       && lk != 27354               // 'rename' ';'\n       && lk != 27355               // 'replace' ';'\n       && lk != 27356               // 'return' ';'\n       && lk != 27357               // 'returning' ';'\n       && lk != 27358               // 'revalidation' ';'\n       && lk != 27360               // 'satisfies' ';'\n       && lk != 27361               // 'schema' ';'\n       && lk != 27362               // 'schema-attribute' ';'\n       && lk != 27363               // 'schema-element' ';'\n       && lk != 27364               // 'score' ';'\n       && lk != 27365               // 'self' ';'\n       && lk != 27370               // 'sliding' ';'\n       && lk != 27371               // 'some' ';'\n       && lk != 27372               // 'stable' ';'\n       && lk != 27373               // 'start' ';'\n       && lk != 27376               // 'strict' ';'\n       && lk != 27378               // 'structured-item' ';'\n       && lk != 27379               // 'switch' ';'\n       && lk != 27380               // 'text' ';'\n       && lk != 27384               // 'to' ';'\n       && lk != 27385               // 'treat' ';'\n       && lk != 27386               // 'try' ';'\n       && lk != 27387               // 'tumbling' ';'\n       && lk != 27388               // 'type' ';'\n       && lk != 27389               // 'typeswitch' ';'\n       && lk != 27390               // 'union' ';'\n       && lk != 27392               // 'unordered' ';'\n       && lk != 27393               // 'updating' ';'\n       && lk != 27396               // 'validate' ';'\n       && lk != 27397               // 'value' ';'\n       && lk != 27398               // 'variable' ';'\n       && lk != 27399               // 'version' ';'\n       && lk != 27402               // 'where' ';'\n       && lk != 27403               // 'while' ';'\n       && lk != 27406               // 'with' ';'\n       && lk != 27410               // 'xquery' ';'\n       && lk != 90198               // 'break' 'loop'\n       && lk != 90214               // 'continue' 'loop'\n       && lk != 113284)             // 'exit' 'returning'\n      {\n        break;\n      }\n      whitespace();\n      parse_Statement();\n    }\n    eventHandler.endNonterminal(\"Statements\", e0);\n  }\n\n  function try_Statements()\n  {\n    for (;;)\n    {\n      lookahead1W(277);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | EOF | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' |\n                                    // '..' | '/' | '//' | ';' | '<' | '<!--' | '<?' | '@' | '[' | 'after' |\n                                    // 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' |\n                                    // 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'first' | 'following' | 'following-sibling' | 'for' |\n                                    // 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' |\n                                    // 'in' | 'index' | 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' |\n                                    // 'is' | 'item' | 'json' | 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' |\n                                    // 'lt' | 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' |\n                                    // 'node' | 'nodes' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'self' | 'sliding' | 'some' | 'stable' | 'start' | 'strict' |\n                                    // 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'try' | 'tumbling' |\n                                    // 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' |\n                                    // 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' | 'xquery' | '{' |\n                                    // '{|' | '}'\n      switch (l1)\n      {\n      case 34:                      // '('\n        lookahead2W(268);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | ')' | '+' | '-' | '.' |\n                                    // '..' | '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n        break;\n      case 35:                      // '(#'\n        lookahead2(251);            // EQName^Token | S | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' |\n                                    // 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'json-item' | 'last' | 'lax' |\n                                    // 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' | 'namespace' |\n                                    // 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' | 'only' | 'option' |\n                                    // 'or' | 'order' | 'ordered' | 'ordering' | 'parent' | 'preceding' |\n                                    // 'preceding-sibling' | 'processing-instruction' | 'rename' | 'replace' |\n                                    // 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n        break;\n      case 46:                      // '/'\n        lookahead2W(283);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | EOF | '!' | '!=' | '$' | '%' | '(' | '(:' | '*' | '+' |\n                                    // ',' | '-' | '.' | '..' | ';' | '<' | '<!--' | '<<' | '<=' | '<?' | '=' | '>' |\n                                    // '>=' | '>>' | '@' | '[' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'contains' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|' | '|' | '||' | '}'\n        break;\n      case 47:                      // '//'\n        lookahead2W(264);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(:' | '.' | '..' | '<' | '<!--' |\n                                    // '<?' | '@' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' |\n                                    // 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'json-item' | 'last' | 'lax' |\n                                    // 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' | 'namespace' |\n                                    // 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' | 'only' | 'option' |\n                                    // 'or' | 'order' | 'ordered' | 'ordering' | 'parent' | 'preceding' |\n                                    // 'preceding-sibling' | 'processing-instruction' | 'rename' | 'replace' |\n                                    // 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n        break;\n      case 54:                      // '<'\n        lookahead2(4);              // QName\n        break;\n      case 55:                      // '<!--'\n        lookahead2(1);              // DirCommentContents\n        break;\n      case 59:                      // '<?'\n        lookahead2(3);              // PITarget\n        break;\n      case 66:                      // '@'\n        lookahead2W(256);           // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n        break;\n      case 68:                      // '['\n        lookahead2W(271);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | ']' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n        break;\n      case 77:                      // 'append'\n        lookahead2W(199);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n                                    // ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' |\n                                    // 'castable' | 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' |\n                                    // 'instance' | 'intersect' | 'is' | 'json' | 'le' | 'lt' | 'mod' | 'ne' | 'or' |\n                                    // 'to' | 'treat' | 'union' | '|' | '||' | '}'\n        break;\n      case 82:                      // 'attribute'\n        lookahead2W(280);           // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' |\n                                    // '-' | '/' | '//' | '::' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' |\n                                    // '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' |\n                                    // 'array' | 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'contains' |\n                                    // 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' |\n                                    // 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'json-item' | 'last' | 'lax' |\n                                    // 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' | 'namespace' |\n                                    // 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' | 'only' | 'option' |\n                                    // 'or' | 'order' | 'ordered' | 'ordering' | 'parent' | 'preceding' |\n                                    // 'preceding-sibling' | 'processing-instruction' | 'rename' | 'replace' |\n                                    // 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '|' | '||' | '}'\n        break;\n      case 121:                     // 'element'\n        lookahead2W(279);           // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' |\n                                    // '-' | '/' | '//' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' |\n                                    // 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' |\n                                    // 'array' | 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'contains' |\n                                    // 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' |\n                                    // 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'json-item' | 'last' | 'lax' |\n                                    // 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' | 'namespace' |\n                                    // 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' | 'only' | 'option' |\n                                    // 'or' | 'order' | 'ordered' | 'ordering' | 'parent' | 'preceding' |\n                                    // 'preceding-sibling' | 'processing-instruction' | 'rename' | 'replace' |\n                                    // 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '|' | '||' | '}'\n        break;\n      case 132:                     // 'exit'\n        lookahead2W(202);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n                                    // ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' |\n                                    // 'castable' | 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' |\n                                    // 'instance' | 'intersect' | 'is' | 'le' | 'lt' | 'mod' | 'ne' | 'or' |\n                                    // 'returning' | 'to' | 'treat' | 'union' | '|' | '||' | '}'\n        break;\n      case 137:                     // 'for'\n        lookahead2W(207);           // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' |\n                                    // '//' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' |\n                                    // 'castable' | 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' |\n                                    // 'instance' | 'intersect' | 'is' | 'le' | 'lt' | 'mod' | 'ne' | 'or' | 'sliding' |\n                                    // 'to' | 'treat' | 'tumbling' | 'union' | '|' | '||' | '}'\n        break;\n      case 174:                     // 'let'\n        lookahead2W(204);           // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' |\n                                    // '//' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' |\n                                    // 'castable' | 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' |\n                                    // 'instance' | 'intersect' | 'is' | 'le' | 'lt' | 'mod' | 'ne' | 'or' | 'score' |\n                                    // 'to' | 'treat' | 'union' | '|' | '||' | '}'\n        break;\n      case 218:                     // 'rename'\n        lookahead2W(205);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n                                    // ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' |\n                                    // 'castable' | 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' |\n                                    // 'instance' | 'intersect' | 'is' | 'json' | 'le' | 'lt' | 'mod' | 'ne' | 'node' |\n                                    // 'or' | 'to' | 'treat' | 'union' | '|' | '||' | '}'\n        break;\n      case 219:                     // 'replace'\n        lookahead2W(206);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n                                    // ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' |\n                                    // 'castable' | 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' |\n                                    // 'instance' | 'intersect' | 'is' | 'le' | 'lt' | 'mod' | 'ne' | 'node' | 'or' |\n                                    // 'to' | 'treat' | 'union' | 'value' | '|' | '||' | '}'\n        break;\n      case 260:                     // 'validate'\n        lookahead2W(209);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n                                    // ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' |\n                                    // 'castable' | 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' |\n                                    // 'instance' | 'intersect' | 'is' | 'lax' | 'le' | 'lt' | 'mod' | 'ne' | 'or' |\n                                    // 'strict' | 'to' | 'treat' | 'type' | 'union' | '{' | '|' | '||' | '}'\n        break;\n      case 276:                     // '{'\n        lookahead2W(276);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | ';' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|' | '}'\n        break;\n      case 278:                     // '{|'\n        lookahead2W(272);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|' | '|}'\n        break;\n      case 5:                       // Wildcard\n      case 45:                      // '..'\n        lookahead2W(185);           // S^WS | EOF | '!' | '!=' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' | ';' | '<' |\n                                    // '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' | 'castable' |\n                                    // 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' | 'instance' |\n                                    // 'intersect' | 'is' | 'le' | 'lt' | 'mod' | 'ne' | 'or' | 'to' | 'treat' |\n                                    // 'union' | '|' | '||' | '}'\n        break;\n      case 31:                      // '$'\n      case 32:                      // '%'\n        lookahead2W(254);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n        break;\n      case 40:                      // '+'\n      case 42:                      // '-'\n        lookahead2W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n        break;\n      case 86:                      // 'break'\n      case 102:                     // 'continue'\n        lookahead2W(200);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n                                    // ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' |\n                                    // 'castable' | 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' |\n                                    // 'instance' | 'intersect' | 'is' | 'le' | 'loop' | 'lt' | 'mod' | 'ne' | 'or' |\n                                    // 'to' | 'treat' | 'union' | '|' | '||' | '}'\n        break;\n      case 110:                     // 'delete'\n      case 159:                     // 'insert'\n        lookahead2W(208);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n                                    // ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' |\n                                    // 'castable' | 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' |\n                                    // 'instance' | 'intersect' | 'is' | 'json' | 'le' | 'lt' | 'mod' | 'ne' | 'node' |\n                                    // 'nodes' | 'or' | 'to' | 'treat' | 'union' | '|' | '||' | '}'\n        break;\n      case 184:                     // 'namespace'\n      case 216:                     // 'processing-instruction'\n        lookahead2W(267);           // NCName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' |\n                                    // '-' | '/' | '//' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' |\n                                    // 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' |\n                                    // 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'contains' |\n                                    // 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' |\n                                    // 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'last' | 'lax' | 'le' | 'let' |\n                                    // 'loop' | 'lt' | 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' |\n                                    // 'ne' | 'node' | 'nodes' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'self' | 'sliding' | 'some' | 'stable' | 'start' | 'strict' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' |\n                                    // 'union' | 'unordered' | 'updating' | 'validate' | 'value' | 'variable' |\n                                    // 'version' | 'where' | 'while' | 'with' | 'xquery' | '{' | '|' | '||' | '}'\n        break;\n      case 103:                     // 'copy'\n      case 129:                     // 'every'\n      case 235:                     // 'some'\n      case 262:                     // 'variable'\n        lookahead2W(196);           // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' |\n                                    // '//' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' |\n                                    // 'castable' | 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' |\n                                    // 'instance' | 'intersect' | 'is' | 'le' | 'lt' | 'mod' | 'ne' | 'or' | 'to' |\n                                    // 'treat' | 'union' | '|' | '||' | '}'\n        break;\n      case 8:                       // IntegerLiteral\n      case 9:                       // DecimalLiteral\n      case 10:                      // DoubleLiteral\n      case 11:                      // StringLiteral\n      case 44:                      // '.'\n        lookahead2W(191);           // S^WS | EOF | '!' | '!=' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' | ';' |\n                                    // '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' | 'castable' |\n                                    // 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' | 'instance' |\n                                    // 'intersect' | 'is' | 'le' | 'lt' | 'mod' | 'ne' | 'or' | 'to' | 'treat' |\n                                    // 'union' | '|' | '||' | '}'\n        break;\n      case 78:                      // 'array'\n      case 124:                     // 'empty-sequence'\n      case 165:                     // 'item'\n      case 167:                     // 'json-item'\n      case 242:                     // 'structured-item'\n        lookahead2W(190);           // S^WS | EOF | '!' | '!=' | '#' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' | ';' |\n                                    // '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' | 'castable' |\n                                    // 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' | 'instance' |\n                                    // 'intersect' | 'is' | 'le' | 'lt' | 'mod' | 'ne' | 'or' | 'to' | 'treat' |\n                                    // 'union' | '|' | '||' | '}'\n        break;\n      case 96:                      // 'comment'\n      case 119:                     // 'document'\n      case 202:                     // 'ordered'\n      case 244:                     // 'text'\n      case 250:                     // 'try'\n      case 256:                     // 'unordered'\n        lookahead2W(203);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n                                    // ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' |\n                                    // 'castable' | 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' |\n                                    // 'instance' | 'intersect' | 'is' | 'le' | 'lt' | 'mod' | 'ne' | 'or' | 'to' |\n                                    // 'treat' | 'union' | '{' | '|' | '||' | '}'\n        break;\n      case 73:                      // 'ancestor'\n      case 74:                      // 'ancestor-or-self'\n      case 93:                      // 'child'\n      case 111:                     // 'descendant'\n      case 112:                     // 'descendant-or-self'\n      case 135:                     // 'following'\n      case 136:                     // 'following-sibling'\n      case 206:                     // 'parent'\n      case 212:                     // 'preceding'\n      case 213:                     // 'preceding-sibling'\n      case 229:                     // 'self'\n        lookahead2W(197);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n                                    // '::' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' |\n                                    // 'castable' | 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' |\n                                    // 'instance' | 'intersect' | 'is' | 'le' | 'lt' | 'mod' | 'ne' | 'or' | 'to' |\n                                    // 'treat' | 'union' | '|' | '||' | '}'\n        break;\n      case 6:                       // EQName^Token\n      case 70:                      // 'after'\n      case 72:                      // 'allowing'\n      case 75:                      // 'and'\n      case 79:                      // 'as'\n      case 80:                      // 'ascending'\n      case 81:                      // 'at'\n      case 83:                      // 'base-uri'\n      case 84:                      // 'before'\n      case 85:                      // 'boundary-space'\n      case 88:                      // 'case'\n      case 89:                      // 'cast'\n      case 90:                      // 'castable'\n      case 91:                      // 'catch'\n      case 94:                      // 'collation'\n      case 97:                      // 'constraint'\n      case 98:                      // 'construction'\n      case 101:                     // 'context'\n      case 104:                     // 'copy-namespaces'\n      case 105:                     // 'count'\n      case 106:                     // 'decimal-format'\n      case 108:                     // 'declare'\n      case 109:                     // 'default'\n      case 113:                     // 'descending'\n      case 118:                     // 'div'\n      case 120:                     // 'document-node'\n      case 122:                     // 'else'\n      case 123:                     // 'empty'\n      case 125:                     // 'encoding'\n      case 126:                     // 'end'\n      case 128:                     // 'eq'\n      case 131:                     // 'except'\n      case 133:                     // 'external'\n      case 134:                     // 'first'\n      case 141:                     // 'ft-option'\n      case 145:                     // 'function'\n      case 146:                     // 'ge'\n      case 148:                     // 'group'\n      case 150:                     // 'gt'\n      case 151:                     // 'idiv'\n      case 152:                     // 'if'\n      case 153:                     // 'import'\n      case 154:                     // 'in'\n      case 155:                     // 'index'\n      case 160:                     // 'instance'\n      case 161:                     // 'integrity'\n      case 162:                     // 'intersect'\n      case 163:                     // 'into'\n      case 164:                     // 'is'\n      case 166:                     // 'json'\n      case 170:                     // 'last'\n      case 171:                     // 'lax'\n      case 172:                     // 'le'\n      case 176:                     // 'loop'\n      case 178:                     // 'lt'\n      case 180:                     // 'mod'\n      case 181:                     // 'modify'\n      case 182:                     // 'module'\n      case 185:                     // 'namespace-node'\n      case 186:                     // 'ne'\n      case 191:                     // 'node'\n      case 192:                     // 'nodes'\n      case 194:                     // 'object'\n      case 198:                     // 'only'\n      case 199:                     // 'option'\n      case 200:                     // 'or'\n      case 201:                     // 'order'\n      case 203:                     // 'ordering'\n      case 220:                     // 'return'\n      case 221:                     // 'returning'\n      case 222:                     // 'revalidation'\n      case 224:                     // 'satisfies'\n      case 225:                     // 'schema'\n      case 226:                     // 'schema-attribute'\n      case 227:                     // 'schema-element'\n      case 228:                     // 'score'\n      case 234:                     // 'sliding'\n      case 236:                     // 'stable'\n      case 237:                     // 'start'\n      case 240:                     // 'strict'\n      case 243:                     // 'switch'\n      case 248:                     // 'to'\n      case 249:                     // 'treat'\n      case 251:                     // 'tumbling'\n      case 252:                     // 'type'\n      case 253:                     // 'typeswitch'\n      case 254:                     // 'union'\n      case 257:                     // 'updating'\n      case 261:                     // 'value'\n      case 263:                     // 'version'\n      case 266:                     // 'where'\n      case 267:                     // 'while'\n      case 270:                     // 'with'\n      case 274:                     // 'xquery'\n        lookahead2W(194);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n                                    // ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' |\n                                    // 'castable' | 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' |\n                                    // 'instance' | 'intersect' | 'is' | 'le' | 'lt' | 'mod' | 'ne' | 'or' | 'to' |\n                                    // 'treat' | 'union' | '|' | '||' | '}'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 25                  // EOF\n       && lk != 53                  // ';'\n       && lk != 282                 // '}'\n       && lk != 12805               // Wildcard EOF\n       && lk != 12806               // EQName^Token EOF\n       && lk != 12808               // IntegerLiteral EOF\n       && lk != 12809               // DecimalLiteral EOF\n       && lk != 12810               // DoubleLiteral EOF\n       && lk != 12811               // StringLiteral EOF\n       && lk != 12844               // '.' EOF\n       && lk != 12845               // '..' EOF\n       && lk != 12846               // '/' EOF\n       && lk != 12870               // 'after' EOF\n       && lk != 12872               // 'allowing' EOF\n       && lk != 12873               // 'ancestor' EOF\n       && lk != 12874               // 'ancestor-or-self' EOF\n       && lk != 12875               // 'and' EOF\n       && lk != 12877               // 'append' EOF\n       && lk != 12878               // 'array' EOF\n       && lk != 12879               // 'as' EOF\n       && lk != 12880               // 'ascending' EOF\n       && lk != 12881               // 'at' EOF\n       && lk != 12882               // 'attribute' EOF\n       && lk != 12883               // 'base-uri' EOF\n       && lk != 12884               // 'before' EOF\n       && lk != 12885               // 'boundary-space' EOF\n       && lk != 12886               // 'break' EOF\n       && lk != 12888               // 'case' EOF\n       && lk != 12889               // 'cast' EOF\n       && lk != 12890               // 'castable' EOF\n       && lk != 12891               // 'catch' EOF\n       && lk != 12893               // 'child' EOF\n       && lk != 12894               // 'collation' EOF\n       && lk != 12896               // 'comment' EOF\n       && lk != 12897               // 'constraint' EOF\n       && lk != 12898               // 'construction' EOF\n       && lk != 12901               // 'context' EOF\n       && lk != 12902               // 'continue' EOF\n       && lk != 12903               // 'copy' EOF\n       && lk != 12904               // 'copy-namespaces' EOF\n       && lk != 12905               // 'count' EOF\n       && lk != 12906               // 'decimal-format' EOF\n       && lk != 12908               // 'declare' EOF\n       && lk != 12909               // 'default' EOF\n       && lk != 12910               // 'delete' EOF\n       && lk != 12911               // 'descendant' EOF\n       && lk != 12912               // 'descendant-or-self' EOF\n       && lk != 12913               // 'descending' EOF\n       && lk != 12918               // 'div' EOF\n       && lk != 12919               // 'document' EOF\n       && lk != 12920               // 'document-node' EOF\n       && lk != 12921               // 'element' EOF\n       && lk != 12922               // 'else' EOF\n       && lk != 12923               // 'empty' EOF\n       && lk != 12924               // 'empty-sequence' EOF\n       && lk != 12925               // 'encoding' EOF\n       && lk != 12926               // 'end' EOF\n       && lk != 12928               // 'eq' EOF\n       && lk != 12929               // 'every' EOF\n       && lk != 12931               // 'except' EOF\n       && lk != 12932               // 'exit' EOF\n       && lk != 12933               // 'external' EOF\n       && lk != 12934               // 'first' EOF\n       && lk != 12935               // 'following' EOF\n       && lk != 12936               // 'following-sibling' EOF\n       && lk != 12937               // 'for' EOF\n       && lk != 12941               // 'ft-option' EOF\n       && lk != 12945               // 'function' EOF\n       && lk != 12946               // 'ge' EOF\n       && lk != 12948               // 'group' EOF\n       && lk != 12950               // 'gt' EOF\n       && lk != 12951               // 'idiv' EOF\n       && lk != 12952               // 'if' EOF\n       && lk != 12953               // 'import' EOF\n       && lk != 12954               // 'in' EOF\n       && lk != 12955               // 'index' EOF\n       && lk != 12959               // 'insert' EOF\n       && lk != 12960               // 'instance' EOF\n       && lk != 12961               // 'integrity' EOF\n       && lk != 12962               // 'intersect' EOF\n       && lk != 12963               // 'into' EOF\n       && lk != 12964               // 'is' EOF\n       && lk != 12965               // 'item' EOF\n       && lk != 12966               // 'json' EOF\n       && lk != 12967               // 'json-item' EOF\n       && lk != 12970               // 'last' EOF\n       && lk != 12971               // 'lax' EOF\n       && lk != 12972               // 'le' EOF\n       && lk != 12974               // 'let' EOF\n       && lk != 12976               // 'loop' EOF\n       && lk != 12978               // 'lt' EOF\n       && lk != 12980               // 'mod' EOF\n       && lk != 12981               // 'modify' EOF\n       && lk != 12982               // 'module' EOF\n       && lk != 12984               // 'namespace' EOF\n       && lk != 12985               // 'namespace-node' EOF\n       && lk != 12986               // 'ne' EOF\n       && lk != 12991               // 'node' EOF\n       && lk != 12992               // 'nodes' EOF\n       && lk != 12994               // 'object' EOF\n       && lk != 12998               // 'only' EOF\n       && lk != 12999               // 'option' EOF\n       && lk != 13000               // 'or' EOF\n       && lk != 13001               // 'order' EOF\n       && lk != 13002               // 'ordered' EOF\n       && lk != 13003               // 'ordering' EOF\n       && lk != 13006               // 'parent' EOF\n       && lk != 13012               // 'preceding' EOF\n       && lk != 13013               // 'preceding-sibling' EOF\n       && lk != 13016               // 'processing-instruction' EOF\n       && lk != 13018               // 'rename' EOF\n       && lk != 13019               // 'replace' EOF\n       && lk != 13020               // 'return' EOF\n       && lk != 13021               // 'returning' EOF\n       && lk != 13022               // 'revalidation' EOF\n       && lk != 13024               // 'satisfies' EOF\n       && lk != 13025               // 'schema' EOF\n       && lk != 13026               // 'schema-attribute' EOF\n       && lk != 13027               // 'schema-element' EOF\n       && lk != 13028               // 'score' EOF\n       && lk != 13029               // 'self' EOF\n       && lk != 13034               // 'sliding' EOF\n       && lk != 13035               // 'some' EOF\n       && lk != 13036               // 'stable' EOF\n       && lk != 13037               // 'start' EOF\n       && lk != 13040               // 'strict' EOF\n       && lk != 13042               // 'structured-item' EOF\n       && lk != 13043               // 'switch' EOF\n       && lk != 13044               // 'text' EOF\n       && lk != 13048               // 'to' EOF\n       && lk != 13049               // 'treat' EOF\n       && lk != 13050               // 'try' EOF\n       && lk != 13051               // 'tumbling' EOF\n       && lk != 13052               // 'type' EOF\n       && lk != 13053               // 'typeswitch' EOF\n       && lk != 13054               // 'union' EOF\n       && lk != 13056               // 'unordered' EOF\n       && lk != 13057               // 'updating' EOF\n       && lk != 13060               // 'validate' EOF\n       && lk != 13061               // 'value' EOF\n       && lk != 13062               // 'variable' EOF\n       && lk != 13063               // 'version' EOF\n       && lk != 13066               // 'where' EOF\n       && lk != 13067               // 'while' EOF\n       && lk != 13070               // 'with' EOF\n       && lk != 13074               // 'xquery' EOF\n       && lk != 16134               // 'variable' '$'\n       && lk != 20997               // Wildcard ','\n       && lk != 20998               // EQName^Token ','\n       && lk != 21000               // IntegerLiteral ','\n       && lk != 21001               // DecimalLiteral ','\n       && lk != 21002               // DoubleLiteral ','\n       && lk != 21003               // StringLiteral ','\n       && lk != 21036               // '.' ','\n       && lk != 21037               // '..' ','\n       && lk != 21038               // '/' ','\n       && lk != 21062               // 'after' ','\n       && lk != 21064               // 'allowing' ','\n       && lk != 21065               // 'ancestor' ','\n       && lk != 21066               // 'ancestor-or-self' ','\n       && lk != 21067               // 'and' ','\n       && lk != 21069               // 'append' ','\n       && lk != 21070               // 'array' ','\n       && lk != 21071               // 'as' ','\n       && lk != 21072               // 'ascending' ','\n       && lk != 21073               // 'at' ','\n       && lk != 21074               // 'attribute' ','\n       && lk != 21075               // 'base-uri' ','\n       && lk != 21076               // 'before' ','\n       && lk != 21077               // 'boundary-space' ','\n       && lk != 21078               // 'break' ','\n       && lk != 21080               // 'case' ','\n       && lk != 21081               // 'cast' ','\n       && lk != 21082               // 'castable' ','\n       && lk != 21083               // 'catch' ','\n       && lk != 21085               // 'child' ','\n       && lk != 21086               // 'collation' ','\n       && lk != 21088               // 'comment' ','\n       && lk != 21089               // 'constraint' ','\n       && lk != 21090               // 'construction' ','\n       && lk != 21093               // 'context' ','\n       && lk != 21094               // 'continue' ','\n       && lk != 21095               // 'copy' ','\n       && lk != 21096               // 'copy-namespaces' ','\n       && lk != 21097               // 'count' ','\n       && lk != 21098               // 'decimal-format' ','\n       && lk != 21100               // 'declare' ','\n       && lk != 21101               // 'default' ','\n       && lk != 21102               // 'delete' ','\n       && lk != 21103               // 'descendant' ','\n       && lk != 21104               // 'descendant-or-self' ','\n       && lk != 21105               // 'descending' ','\n       && lk != 21110               // 'div' ','\n       && lk != 21111               // 'document' ','\n       && lk != 21112               // 'document-node' ','\n       && lk != 21113               // 'element' ','\n       && lk != 21114               // 'else' ','\n       && lk != 21115               // 'empty' ','\n       && lk != 21116               // 'empty-sequence' ','\n       && lk != 21117               // 'encoding' ','\n       && lk != 21118               // 'end' ','\n       && lk != 21120               // 'eq' ','\n       && lk != 21121               // 'every' ','\n       && lk != 21123               // 'except' ','\n       && lk != 21124               // 'exit' ','\n       && lk != 21125               // 'external' ','\n       && lk != 21126               // 'first' ','\n       && lk != 21127               // 'following' ','\n       && lk != 21128               // 'following-sibling' ','\n       && lk != 21129               // 'for' ','\n       && lk != 21133               // 'ft-option' ','\n       && lk != 21137               // 'function' ','\n       && lk != 21138               // 'ge' ','\n       && lk != 21140               // 'group' ','\n       && lk != 21142               // 'gt' ','\n       && lk != 21143               // 'idiv' ','\n       && lk != 21144               // 'if' ','\n       && lk != 21145               // 'import' ','\n       && lk != 21146               // 'in' ','\n       && lk != 21147               // 'index' ','\n       && lk != 21151               // 'insert' ','\n       && lk != 21152               // 'instance' ','\n       && lk != 21153               // 'integrity' ','\n       && lk != 21154               // 'intersect' ','\n       && lk != 21155               // 'into' ','\n       && lk != 21156               // 'is' ','\n       && lk != 21157               // 'item' ','\n       && lk != 21158               // 'json' ','\n       && lk != 21159               // 'json-item' ','\n       && lk != 21162               // 'last' ','\n       && lk != 21163               // 'lax' ','\n       && lk != 21164               // 'le' ','\n       && lk != 21166               // 'let' ','\n       && lk != 21168               // 'loop' ','\n       && lk != 21170               // 'lt' ','\n       && lk != 21172               // 'mod' ','\n       && lk != 21173               // 'modify' ','\n       && lk != 21174               // 'module' ','\n       && lk != 21176               // 'namespace' ','\n       && lk != 21177               // 'namespace-node' ','\n       && lk != 21178               // 'ne' ','\n       && lk != 21183               // 'node' ','\n       && lk != 21184               // 'nodes' ','\n       && lk != 21186               // 'object' ','\n       && lk != 21190               // 'only' ','\n       && lk != 21191               // 'option' ','\n       && lk != 21192               // 'or' ','\n       && lk != 21193               // 'order' ','\n       && lk != 21194               // 'ordered' ','\n       && lk != 21195               // 'ordering' ','\n       && lk != 21198               // 'parent' ','\n       && lk != 21204               // 'preceding' ','\n       && lk != 21205               // 'preceding-sibling' ','\n       && lk != 21208               // 'processing-instruction' ','\n       && lk != 21210               // 'rename' ','\n       && lk != 21211               // 'replace' ','\n       && lk != 21212               // 'return' ','\n       && lk != 21213               // 'returning' ','\n       && lk != 21214               // 'revalidation' ','\n       && lk != 21216               // 'satisfies' ','\n       && lk != 21217               // 'schema' ','\n       && lk != 21218               // 'schema-attribute' ','\n       && lk != 21219               // 'schema-element' ','\n       && lk != 21220               // 'score' ','\n       && lk != 21221               // 'self' ','\n       && lk != 21226               // 'sliding' ','\n       && lk != 21227               // 'some' ','\n       && lk != 21228               // 'stable' ','\n       && lk != 21229               // 'start' ','\n       && lk != 21232               // 'strict' ','\n       && lk != 21234               // 'structured-item' ','\n       && lk != 21235               // 'switch' ','\n       && lk != 21236               // 'text' ','\n       && lk != 21240               // 'to' ','\n       && lk != 21241               // 'treat' ','\n       && lk != 21242               // 'try' ','\n       && lk != 21243               // 'tumbling' ','\n       && lk != 21244               // 'type' ','\n       && lk != 21245               // 'typeswitch' ','\n       && lk != 21246               // 'union' ','\n       && lk != 21248               // 'unordered' ','\n       && lk != 21249               // 'updating' ','\n       && lk != 21252               // 'validate' ','\n       && lk != 21253               // 'value' ','\n       && lk != 21254               // 'variable' ','\n       && lk != 21255               // 'version' ','\n       && lk != 21258               // 'where' ','\n       && lk != 21259               // 'while' ','\n       && lk != 21262               // 'with' ','\n       && lk != 21266               // 'xquery' ','\n       && lk != 27141               // Wildcard ';'\n       && lk != 27142               // EQName^Token ';'\n       && lk != 27144               // IntegerLiteral ';'\n       && lk != 27145               // DecimalLiteral ';'\n       && lk != 27146               // DoubleLiteral ';'\n       && lk != 27147               // StringLiteral ';'\n       && lk != 27180               // '.' ';'\n       && lk != 27181               // '..' ';'\n       && lk != 27182               // '/' ';'\n       && lk != 27206               // 'after' ';'\n       && lk != 27208               // 'allowing' ';'\n       && lk != 27209               // 'ancestor' ';'\n       && lk != 27210               // 'ancestor-or-self' ';'\n       && lk != 27211               // 'and' ';'\n       && lk != 27213               // 'append' ';'\n       && lk != 27214               // 'array' ';'\n       && lk != 27215               // 'as' ';'\n       && lk != 27216               // 'ascending' ';'\n       && lk != 27217               // 'at' ';'\n       && lk != 27218               // 'attribute' ';'\n       && lk != 27219               // 'base-uri' ';'\n       && lk != 27220               // 'before' ';'\n       && lk != 27221               // 'boundary-space' ';'\n       && lk != 27222               // 'break' ';'\n       && lk != 27224               // 'case' ';'\n       && lk != 27225               // 'cast' ';'\n       && lk != 27226               // 'castable' ';'\n       && lk != 27227               // 'catch' ';'\n       && lk != 27229               // 'child' ';'\n       && lk != 27230               // 'collation' ';'\n       && lk != 27232               // 'comment' ';'\n       && lk != 27233               // 'constraint' ';'\n       && lk != 27234               // 'construction' ';'\n       && lk != 27237               // 'context' ';'\n       && lk != 27238               // 'continue' ';'\n       && lk != 27239               // 'copy' ';'\n       && lk != 27240               // 'copy-namespaces' ';'\n       && lk != 27241               // 'count' ';'\n       && lk != 27242               // 'decimal-format' ';'\n       && lk != 27244               // 'declare' ';'\n       && lk != 27245               // 'default' ';'\n       && lk != 27246               // 'delete' ';'\n       && lk != 27247               // 'descendant' ';'\n       && lk != 27248               // 'descendant-or-self' ';'\n       && lk != 27249               // 'descending' ';'\n       && lk != 27254               // 'div' ';'\n       && lk != 27255               // 'document' ';'\n       && lk != 27256               // 'document-node' ';'\n       && lk != 27257               // 'element' ';'\n       && lk != 27258               // 'else' ';'\n       && lk != 27259               // 'empty' ';'\n       && lk != 27260               // 'empty-sequence' ';'\n       && lk != 27261               // 'encoding' ';'\n       && lk != 27262               // 'end' ';'\n       && lk != 27264               // 'eq' ';'\n       && lk != 27265               // 'every' ';'\n       && lk != 27267               // 'except' ';'\n       && lk != 27268               // 'exit' ';'\n       && lk != 27269               // 'external' ';'\n       && lk != 27270               // 'first' ';'\n       && lk != 27271               // 'following' ';'\n       && lk != 27272               // 'following-sibling' ';'\n       && lk != 27273               // 'for' ';'\n       && lk != 27277               // 'ft-option' ';'\n       && lk != 27281               // 'function' ';'\n       && lk != 27282               // 'ge' ';'\n       && lk != 27284               // 'group' ';'\n       && lk != 27286               // 'gt' ';'\n       && lk != 27287               // 'idiv' ';'\n       && lk != 27288               // 'if' ';'\n       && lk != 27289               // 'import' ';'\n       && lk != 27290               // 'in' ';'\n       && lk != 27291               // 'index' ';'\n       && lk != 27295               // 'insert' ';'\n       && lk != 27296               // 'instance' ';'\n       && lk != 27297               // 'integrity' ';'\n       && lk != 27298               // 'intersect' ';'\n       && lk != 27299               // 'into' ';'\n       && lk != 27300               // 'is' ';'\n       && lk != 27301               // 'item' ';'\n       && lk != 27302               // 'json' ';'\n       && lk != 27303               // 'json-item' ';'\n       && lk != 27306               // 'last' ';'\n       && lk != 27307               // 'lax' ';'\n       && lk != 27308               // 'le' ';'\n       && lk != 27310               // 'let' ';'\n       && lk != 27312               // 'loop' ';'\n       && lk != 27314               // 'lt' ';'\n       && lk != 27316               // 'mod' ';'\n       && lk != 27317               // 'modify' ';'\n       && lk != 27318               // 'module' ';'\n       && lk != 27320               // 'namespace' ';'\n       && lk != 27321               // 'namespace-node' ';'\n       && lk != 27322               // 'ne' ';'\n       && lk != 27327               // 'node' ';'\n       && lk != 27328               // 'nodes' ';'\n       && lk != 27330               // 'object' ';'\n       && lk != 27334               // 'only' ';'\n       && lk != 27335               // 'option' ';'\n       && lk != 27336               // 'or' ';'\n       && lk != 27337               // 'order' ';'\n       && lk != 27338               // 'ordered' ';'\n       && lk != 27339               // 'ordering' ';'\n       && lk != 27342               // 'parent' ';'\n       && lk != 27348               // 'preceding' ';'\n       && lk != 27349               // 'preceding-sibling' ';'\n       && lk != 27352               // 'processing-instruction' ';'\n       && lk != 27354               // 'rename' ';'\n       && lk != 27355               // 'replace' ';'\n       && lk != 27356               // 'return' ';'\n       && lk != 27357               // 'returning' ';'\n       && lk != 27358               // 'revalidation' ';'\n       && lk != 27360               // 'satisfies' ';'\n       && lk != 27361               // 'schema' ';'\n       && lk != 27362               // 'schema-attribute' ';'\n       && lk != 27363               // 'schema-element' ';'\n       && lk != 27364               // 'score' ';'\n       && lk != 27365               // 'self' ';'\n       && lk != 27370               // 'sliding' ';'\n       && lk != 27371               // 'some' ';'\n       && lk != 27372               // 'stable' ';'\n       && lk != 27373               // 'start' ';'\n       && lk != 27376               // 'strict' ';'\n       && lk != 27378               // 'structured-item' ';'\n       && lk != 27379               // 'switch' ';'\n       && lk != 27380               // 'text' ';'\n       && lk != 27384               // 'to' ';'\n       && lk != 27385               // 'treat' ';'\n       && lk != 27386               // 'try' ';'\n       && lk != 27387               // 'tumbling' ';'\n       && lk != 27388               // 'type' ';'\n       && lk != 27389               // 'typeswitch' ';'\n       && lk != 27390               // 'union' ';'\n       && lk != 27392               // 'unordered' ';'\n       && lk != 27393               // 'updating' ';'\n       && lk != 27396               // 'validate' ';'\n       && lk != 27397               // 'value' ';'\n       && lk != 27398               // 'variable' ';'\n       && lk != 27399               // 'version' ';'\n       && lk != 27402               // 'where' ';'\n       && lk != 27403               // 'while' ';'\n       && lk != 27406               // 'with' ';'\n       && lk != 27410               // 'xquery' ';'\n       && lk != 90198               // 'break' 'loop'\n       && lk != 90214               // 'continue' 'loop'\n       && lk != 113284              // 'exit' 'returning'\n       && lk != 144389              // Wildcard '}'\n       && lk != 144390              // EQName^Token '}'\n       && lk != 144392              // IntegerLiteral '}'\n       && lk != 144393              // DecimalLiteral '}'\n       && lk != 144394              // DoubleLiteral '}'\n       && lk != 144395              // StringLiteral '}'\n       && lk != 144428              // '.' '}'\n       && lk != 144429              // '..' '}'\n       && lk != 144430              // '/' '}'\n       && lk != 144454              // 'after' '}'\n       && lk != 144456              // 'allowing' '}'\n       && lk != 144457              // 'ancestor' '}'\n       && lk != 144458              // 'ancestor-or-self' '}'\n       && lk != 144459              // 'and' '}'\n       && lk != 144461              // 'append' '}'\n       && lk != 144462              // 'array' '}'\n       && lk != 144463              // 'as' '}'\n       && lk != 144464              // 'ascending' '}'\n       && lk != 144465              // 'at' '}'\n       && lk != 144466              // 'attribute' '}'\n       && lk != 144467              // 'base-uri' '}'\n       && lk != 144468              // 'before' '}'\n       && lk != 144469              // 'boundary-space' '}'\n       && lk != 144470              // 'break' '}'\n       && lk != 144472              // 'case' '}'\n       && lk != 144473              // 'cast' '}'\n       && lk != 144474              // 'castable' '}'\n       && lk != 144475              // 'catch' '}'\n       && lk != 144477              // 'child' '}'\n       && lk != 144478              // 'collation' '}'\n       && lk != 144480              // 'comment' '}'\n       && lk != 144481              // 'constraint' '}'\n       && lk != 144482              // 'construction' '}'\n       && lk != 144485              // 'context' '}'\n       && lk != 144486              // 'continue' '}'\n       && lk != 144487              // 'copy' '}'\n       && lk != 144488              // 'copy-namespaces' '}'\n       && lk != 144489              // 'count' '}'\n       && lk != 144490              // 'decimal-format' '}'\n       && lk != 144492              // 'declare' '}'\n       && lk != 144493              // 'default' '}'\n       && lk != 144494              // 'delete' '}'\n       && lk != 144495              // 'descendant' '}'\n       && lk != 144496              // 'descendant-or-self' '}'\n       && lk != 144497              // 'descending' '}'\n       && lk != 144502              // 'div' '}'\n       && lk != 144503              // 'document' '}'\n       && lk != 144504              // 'document-node' '}'\n       && lk != 144505              // 'element' '}'\n       && lk != 144506              // 'else' '}'\n       && lk != 144507              // 'empty' '}'\n       && lk != 144508              // 'empty-sequence' '}'\n       && lk != 144509              // 'encoding' '}'\n       && lk != 144510              // 'end' '}'\n       && lk != 144512              // 'eq' '}'\n       && lk != 144513              // 'every' '}'\n       && lk != 144515              // 'except' '}'\n       && lk != 144516              // 'exit' '}'\n       && lk != 144517              // 'external' '}'\n       && lk != 144518              // 'first' '}'\n       && lk != 144519              // 'following' '}'\n       && lk != 144520              // 'following-sibling' '}'\n       && lk != 144521              // 'for' '}'\n       && lk != 144525              // 'ft-option' '}'\n       && lk != 144529              // 'function' '}'\n       && lk != 144530              // 'ge' '}'\n       && lk != 144532              // 'group' '}'\n       && lk != 144534              // 'gt' '}'\n       && lk != 144535              // 'idiv' '}'\n       && lk != 144536              // 'if' '}'\n       && lk != 144537              // 'import' '}'\n       && lk != 144538              // 'in' '}'\n       && lk != 144539              // 'index' '}'\n       && lk != 144543              // 'insert' '}'\n       && lk != 144544              // 'instance' '}'\n       && lk != 144545              // 'integrity' '}'\n       && lk != 144546              // 'intersect' '}'\n       && lk != 144547              // 'into' '}'\n       && lk != 144548              // 'is' '}'\n       && lk != 144549              // 'item' '}'\n       && lk != 144550              // 'json' '}'\n       && lk != 144551              // 'json-item' '}'\n       && lk != 144554              // 'last' '}'\n       && lk != 144555              // 'lax' '}'\n       && lk != 144556              // 'le' '}'\n       && lk != 144558              // 'let' '}'\n       && lk != 144560              // 'loop' '}'\n       && lk != 144562              // 'lt' '}'\n       && lk != 144564              // 'mod' '}'\n       && lk != 144565              // 'modify' '}'\n       && lk != 144566              // 'module' '}'\n       && lk != 144568              // 'namespace' '}'\n       && lk != 144569              // 'namespace-node' '}'\n       && lk != 144570              // 'ne' '}'\n       && lk != 144575              // 'node' '}'\n       && lk != 144576              // 'nodes' '}'\n       && lk != 144578              // 'object' '}'\n       && lk != 144582              // 'only' '}'\n       && lk != 144583              // 'option' '}'\n       && lk != 144584              // 'or' '}'\n       && lk != 144585              // 'order' '}'\n       && lk != 144586              // 'ordered' '}'\n       && lk != 144587              // 'ordering' '}'\n       && lk != 144590              // 'parent' '}'\n       && lk != 144596              // 'preceding' '}'\n       && lk != 144597              // 'preceding-sibling' '}'\n       && lk != 144600              // 'processing-instruction' '}'\n       && lk != 144602              // 'rename' '}'\n       && lk != 144603              // 'replace' '}'\n       && lk != 144604              // 'return' '}'\n       && lk != 144605              // 'returning' '}'\n       && lk != 144606              // 'revalidation' '}'\n       && lk != 144608              // 'satisfies' '}'\n       && lk != 144609              // 'schema' '}'\n       && lk != 144610              // 'schema-attribute' '}'\n       && lk != 144611              // 'schema-element' '}'\n       && lk != 144612              // 'score' '}'\n       && lk != 144613              // 'self' '}'\n       && lk != 144618              // 'sliding' '}'\n       && lk != 144619              // 'some' '}'\n       && lk != 144620              // 'stable' '}'\n       && lk != 144621              // 'start' '}'\n       && lk != 144624              // 'strict' '}'\n       && lk != 144626              // 'structured-item' '}'\n       && lk != 144627              // 'switch' '}'\n       && lk != 144628              // 'text' '}'\n       && lk != 144632              // 'to' '}'\n       && lk != 144633              // 'treat' '}'\n       && lk != 144634              // 'try' '}'\n       && lk != 144635              // 'tumbling' '}'\n       && lk != 144636              // 'type' '}'\n       && lk != 144637              // 'typeswitch' '}'\n       && lk != 144638              // 'union' '}'\n       && lk != 144640              // 'unordered' '}'\n       && lk != 144641              // 'updating' '}'\n       && lk != 144644              // 'validate' '}'\n       && lk != 144645              // 'value' '}'\n       && lk != 144646              // 'variable' '}'\n       && lk != 144647              // 'version' '}'\n       && lk != 144650              // 'where' '}'\n       && lk != 144651              // 'while' '}'\n       && lk != 144654              // 'with' '}'\n       && lk != 144658)             // 'xquery' '}'\n      {\n        lk = memoized(6, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            try_Statement();\n            memoize(6, e0A, -1);\n            continue;\n          }\n          catch (p1A)\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            memoize(6, e0A, -2);\n            break;\n          }\n        }\n      }\n      if (lk != -1\n       && lk != 53                  // ';'\n       && lk != 16134               // 'variable' '$'\n       && lk != 27141               // Wildcard ';'\n       && lk != 27142               // EQName^Token ';'\n       && lk != 27144               // IntegerLiteral ';'\n       && lk != 27145               // DecimalLiteral ';'\n       && lk != 27146               // DoubleLiteral ';'\n       && lk != 27147               // StringLiteral ';'\n       && lk != 27180               // '.' ';'\n       && lk != 27181               // '..' ';'\n       && lk != 27182               // '/' ';'\n       && lk != 27206               // 'after' ';'\n       && lk != 27208               // 'allowing' ';'\n       && lk != 27209               // 'ancestor' ';'\n       && lk != 27210               // 'ancestor-or-self' ';'\n       && lk != 27211               // 'and' ';'\n       && lk != 27213               // 'append' ';'\n       && lk != 27214               // 'array' ';'\n       && lk != 27215               // 'as' ';'\n       && lk != 27216               // 'ascending' ';'\n       && lk != 27217               // 'at' ';'\n       && lk != 27218               // 'attribute' ';'\n       && lk != 27219               // 'base-uri' ';'\n       && lk != 27220               // 'before' ';'\n       && lk != 27221               // 'boundary-space' ';'\n       && lk != 27222               // 'break' ';'\n       && lk != 27224               // 'case' ';'\n       && lk != 27225               // 'cast' ';'\n       && lk != 27226               // 'castable' ';'\n       && lk != 27227               // 'catch' ';'\n       && lk != 27229               // 'child' ';'\n       && lk != 27230               // 'collation' ';'\n       && lk != 27232               // 'comment' ';'\n       && lk != 27233               // 'constraint' ';'\n       && lk != 27234               // 'construction' ';'\n       && lk != 27237               // 'context' ';'\n       && lk != 27238               // 'continue' ';'\n       && lk != 27239               // 'copy' ';'\n       && lk != 27240               // 'copy-namespaces' ';'\n       && lk != 27241               // 'count' ';'\n       && lk != 27242               // 'decimal-format' ';'\n       && lk != 27244               // 'declare' ';'\n       && lk != 27245               // 'default' ';'\n       && lk != 27246               // 'delete' ';'\n       && lk != 27247               // 'descendant' ';'\n       && lk != 27248               // 'descendant-or-self' ';'\n       && lk != 27249               // 'descending' ';'\n       && lk != 27254               // 'div' ';'\n       && lk != 27255               // 'document' ';'\n       && lk != 27256               // 'document-node' ';'\n       && lk != 27257               // 'element' ';'\n       && lk != 27258               // 'else' ';'\n       && lk != 27259               // 'empty' ';'\n       && lk != 27260               // 'empty-sequence' ';'\n       && lk != 27261               // 'encoding' ';'\n       && lk != 27262               // 'end' ';'\n       && lk != 27264               // 'eq' ';'\n       && lk != 27265               // 'every' ';'\n       && lk != 27267               // 'except' ';'\n       && lk != 27268               // 'exit' ';'\n       && lk != 27269               // 'external' ';'\n       && lk != 27270               // 'first' ';'\n       && lk != 27271               // 'following' ';'\n       && lk != 27272               // 'following-sibling' ';'\n       && lk != 27273               // 'for' ';'\n       && lk != 27277               // 'ft-option' ';'\n       && lk != 27281               // 'function' ';'\n       && lk != 27282               // 'ge' ';'\n       && lk != 27284               // 'group' ';'\n       && lk != 27286               // 'gt' ';'\n       && lk != 27287               // 'idiv' ';'\n       && lk != 27288               // 'if' ';'\n       && lk != 27289               // 'import' ';'\n       && lk != 27290               // 'in' ';'\n       && lk != 27291               // 'index' ';'\n       && lk != 27295               // 'insert' ';'\n       && lk != 27296               // 'instance' ';'\n       && lk != 27297               // 'integrity' ';'\n       && lk != 27298               // 'intersect' ';'\n       && lk != 27299               // 'into' ';'\n       && lk != 27300               // 'is' ';'\n       && lk != 27301               // 'item' ';'\n       && lk != 27302               // 'json' ';'\n       && lk != 27303               // 'json-item' ';'\n       && lk != 27306               // 'last' ';'\n       && lk != 27307               // 'lax' ';'\n       && lk != 27308               // 'le' ';'\n       && lk != 27310               // 'let' ';'\n       && lk != 27312               // 'loop' ';'\n       && lk != 27314               // 'lt' ';'\n       && lk != 27316               // 'mod' ';'\n       && lk != 27317               // 'modify' ';'\n       && lk != 27318               // 'module' ';'\n       && lk != 27320               // 'namespace' ';'\n       && lk != 27321               // 'namespace-node' ';'\n       && lk != 27322               // 'ne' ';'\n       && lk != 27327               // 'node' ';'\n       && lk != 27328               // 'nodes' ';'\n       && lk != 27330               // 'object' ';'\n       && lk != 27334               // 'only' ';'\n       && lk != 27335               // 'option' ';'\n       && lk != 27336               // 'or' ';'\n       && lk != 27337               // 'order' ';'\n       && lk != 27338               // 'ordered' ';'\n       && lk != 27339               // 'ordering' ';'\n       && lk != 27342               // 'parent' ';'\n       && lk != 27348               // 'preceding' ';'\n       && lk != 27349               // 'preceding-sibling' ';'\n       && lk != 27352               // 'processing-instruction' ';'\n       && lk != 27354               // 'rename' ';'\n       && lk != 27355               // 'replace' ';'\n       && lk != 27356               // 'return' ';'\n       && lk != 27357               // 'returning' ';'\n       && lk != 27358               // 'revalidation' ';'\n       && lk != 27360               // 'satisfies' ';'\n       && lk != 27361               // 'schema' ';'\n       && lk != 27362               // 'schema-attribute' ';'\n       && lk != 27363               // 'schema-element' ';'\n       && lk != 27364               // 'score' ';'\n       && lk != 27365               // 'self' ';'\n       && lk != 27370               // 'sliding' ';'\n       && lk != 27371               // 'some' ';'\n       && lk != 27372               // 'stable' ';'\n       && lk != 27373               // 'start' ';'\n       && lk != 27376               // 'strict' ';'\n       && lk != 27378               // 'structured-item' ';'\n       && lk != 27379               // 'switch' ';'\n       && lk != 27380               // 'text' ';'\n       && lk != 27384               // 'to' ';'\n       && lk != 27385               // 'treat' ';'\n       && lk != 27386               // 'try' ';'\n       && lk != 27387               // 'tumbling' ';'\n       && lk != 27388               // 'type' ';'\n       && lk != 27389               // 'typeswitch' ';'\n       && lk != 27390               // 'union' ';'\n       && lk != 27392               // 'unordered' ';'\n       && lk != 27393               // 'updating' ';'\n       && lk != 27396               // 'validate' ';'\n       && lk != 27397               // 'value' ';'\n       && lk != 27398               // 'variable' ';'\n       && lk != 27399               // 'version' ';'\n       && lk != 27402               // 'where' ';'\n       && lk != 27403               // 'while' ';'\n       && lk != 27406               // 'with' ';'\n       && lk != 27410               // 'xquery' ';'\n       && lk != 90198               // 'break' 'loop'\n       && lk != 90214               // 'continue' 'loop'\n       && lk != 113284)             // 'exit' 'returning'\n      {\n        break;\n      }\n      try_Statement();\n    }\n  }\n\n  function parse_StatementsAndExpr()\n  {\n    eventHandler.startNonterminal(\"StatementsAndExpr\", e0);\n    parse_Statements();\n    whitespace();\n    parse_Expr();\n    eventHandler.endNonterminal(\"StatementsAndExpr\", e0);\n  }\n\n  function try_StatementsAndExpr()\n  {\n    try_Statements();\n    try_Expr();\n  }\n\n  function parse_StatementsAndOptionalExpr()\n  {\n    eventHandler.startNonterminal(\"StatementsAndOptionalExpr\", e0);\n    parse_Statements();\n    if (l1 != 25                    // EOF\n     && l1 != 282)                  // '}'\n    {\n      whitespace();\n      parse_Expr();\n    }\n    eventHandler.endNonterminal(\"StatementsAndOptionalExpr\", e0);\n  }\n\n  function try_StatementsAndOptionalExpr()\n  {\n    try_Statements();\n    if (l1 != 25                    // EOF\n     && l1 != 282)                  // '}'\n    {\n      try_Expr();\n    }\n  }\n\n  function parse_Statement()\n  {\n    eventHandler.startNonterminal(\"Statement\", e0);\n    switch (l1)\n    {\n    case 132:                       // 'exit'\n      lookahead2W(188);             // S^WS | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' | '<' |\n                                    // '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' | 'castable' |\n                                    // 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' | 'instance' |\n                                    // 'intersect' | 'is' | 'le' | 'lt' | 'mod' | 'ne' | 'or' | 'returning' | 'to' |\n                                    // 'treat' | 'union' | '|' | '||'\n      break;\n    case 137:                       // 'for'\n      lookahead2W(195);             // S^WS | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' |\n                                    // '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' | 'castable' |\n                                    // 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' | 'instance' |\n                                    // 'intersect' | 'is' | 'le' | 'lt' | 'mod' | 'ne' | 'or' | 'sliding' | 'to' |\n                                    // 'treat' | 'tumbling' | 'union' | '|' | '||'\n      break;\n    case 174:                       // 'let'\n      lookahead2W(192);             // S^WS | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' |\n                                    // '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' | 'castable' |\n                                    // 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' | 'instance' |\n                                    // 'intersect' | 'is' | 'le' | 'lt' | 'mod' | 'ne' | 'or' | 'score' | 'to' |\n                                    // 'treat' | 'union' | '|' | '||'\n      break;\n    case 250:                       // 'try'\n      lookahead2W(189);             // S^WS | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' | '<' |\n                                    // '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' | 'castable' |\n                                    // 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' | 'instance' |\n                                    // 'intersect' | 'is' | 'le' | 'lt' | 'mod' | 'ne' | 'or' | 'to' | 'treat' |\n                                    // 'union' | '{' | '|' | '||'\n      break;\n    case 262:                       // 'variable'\n      lookahead2W(186);             // S^WS | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' |\n                                    // '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' | 'castable' |\n                                    // 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' | 'instance' |\n                                    // 'intersect' | 'is' | 'le' | 'lt' | 'mod' | 'ne' | 'or' | 'to' | 'treat' |\n                                    // 'union' | '|' | '||'\n      break;\n    case 276:                       // '{'\n      lookahead2W(276);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | ';' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|' | '}'\n      break;\n    case 31:                        // '$'\n    case 32:                        // '%'\n      lookahead2W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n      break;\n    case 86:                        // 'break'\n    case 102:                       // 'continue'\n      lookahead2W(187);             // S^WS | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' | '<' |\n                                    // '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' | 'castable' |\n                                    // 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' | 'instance' |\n                                    // 'intersect' | 'is' | 'le' | 'loop' | 'lt' | 'mod' | 'ne' | 'or' | 'to' |\n                                    // 'treat' | 'union' | '|' | '||'\n      break;\n    case 152:                       // 'if'\n    case 243:                       // 'switch'\n    case 253:                       // 'typeswitch'\n    case 267:                       // 'while'\n      lookahead2W(184);             // S^WS | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' | '<' |\n                                    // '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' | 'castable' |\n                                    // 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' | 'instance' |\n                                    // 'intersect' | 'is' | 'le' | 'lt' | 'mod' | 'ne' | 'or' | 'to' | 'treat' |\n                                    // 'union' | '|' | '||'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 2836                  // '{' Wildcard\n     || lk == 3103                  // '$' EQName^Token\n     || lk == 3104                  // '%' EQName^Token\n     || lk == 3348                  // '{' EQName^Token\n     || lk == 4372                  // '{' IntegerLiteral\n     || lk == 4884                  // '{' DecimalLiteral\n     || lk == 5396                  // '{' DoubleLiteral\n     || lk == 5908                  // '{' StringLiteral\n     || lk == 16148                 // '{' '$'\n     || lk == 16660                 // '{' '%'\n     || lk == 17675                 // 'while' '('\n     || lk == 17684                 // '{' '('\n     || lk == 18196                 // '{' '(#'\n     || lk == 20756                 // '{' '+'\n     || lk == 21780                 // '{' '-'\n     || lk == 22804                 // '{' '.'\n     || lk == 23316                 // '{' '..'\n     || lk == 23828                 // '{' '/'\n     || lk == 24340                 // '{' '//'\n     || lk == 27412                 // '{' ';'\n     || lk == 27924                 // '{' '<'\n     || lk == 28436                 // '{' '<!--'\n     || lk == 30484                 // '{' '<?'\n     || lk == 34068                 // '{' '@'\n     || lk == 35092                 // '{' '['\n     || lk == 35871                 // '$' 'after'\n     || lk == 35872                 // '%' 'after'\n     || lk == 36116                 // '{' 'after'\n     || lk == 36895                 // '$' 'allowing'\n     || lk == 36896                 // '%' 'allowing'\n     || lk == 37140                 // '{' 'allowing'\n     || lk == 37407                 // '$' 'ancestor'\n     || lk == 37408                 // '%' 'ancestor'\n     || lk == 37652                 // '{' 'ancestor'\n     || lk == 37919                 // '$' 'ancestor-or-self'\n     || lk == 37920                 // '%' 'ancestor-or-self'\n     || lk == 38164                 // '{' 'ancestor-or-self'\n     || lk == 38431                 // '$' 'and'\n     || lk == 38432                 // '%' 'and'\n     || lk == 38676                 // '{' 'and'\n     || lk == 39455                 // '$' 'append'\n     || lk == 39456                 // '%' 'append'\n     || lk == 39700                 // '{' 'append'\n     || lk == 39967                 // '$' 'array'\n     || lk == 39968                 // '%' 'array'\n     || lk == 40212                 // '{' 'array'\n     || lk == 40479                 // '$' 'as'\n     || lk == 40480                 // '%' 'as'\n     || lk == 40724                 // '{' 'as'\n     || lk == 40991                 // '$' 'ascending'\n     || lk == 40992                 // '%' 'ascending'\n     || lk == 41236                 // '{' 'ascending'\n     || lk == 41503                 // '$' 'at'\n     || lk == 41504                 // '%' 'at'\n     || lk == 41748                 // '{' 'at'\n     || lk == 42015                 // '$' 'attribute'\n     || lk == 42016                 // '%' 'attribute'\n     || lk == 42260                 // '{' 'attribute'\n     || lk == 42527                 // '$' 'base-uri'\n     || lk == 42528                 // '%' 'base-uri'\n     || lk == 42772                 // '{' 'base-uri'\n     || lk == 43039                 // '$' 'before'\n     || lk == 43040                 // '%' 'before'\n     || lk == 43284                 // '{' 'before'\n     || lk == 43551                 // '$' 'boundary-space'\n     || lk == 43552                 // '%' 'boundary-space'\n     || lk == 43796                 // '{' 'boundary-space'\n     || lk == 44063                 // '$' 'break'\n     || lk == 44064                 // '%' 'break'\n     || lk == 44308                 // '{' 'break'\n     || lk == 45087                 // '$' 'case'\n     || lk == 45088                 // '%' 'case'\n     || lk == 45332                 // '{' 'case'\n     || lk == 45599                 // '$' 'cast'\n     || lk == 45600                 // '%' 'cast'\n     || lk == 45844                 // '{' 'cast'\n     || lk == 46111                 // '$' 'castable'\n     || lk == 46112                 // '%' 'castable'\n     || lk == 46356                 // '{' 'castable'\n     || lk == 46623                 // '$' 'catch'\n     || lk == 46624                 // '%' 'catch'\n     || lk == 46868                 // '{' 'catch'\n     || lk == 47647                 // '$' 'child'\n     || lk == 47648                 // '%' 'child'\n     || lk == 47892                 // '{' 'child'\n     || lk == 48159                 // '$' 'collation'\n     || lk == 48160                 // '%' 'collation'\n     || lk == 48404                 // '{' 'collation'\n     || lk == 49183                 // '$' 'comment'\n     || lk == 49184                 // '%' 'comment'\n     || lk == 49428                 // '{' 'comment'\n     || lk == 49695                 // '$' 'constraint'\n     || lk == 49696                 // '%' 'constraint'\n     || lk == 49940                 // '{' 'constraint'\n     || lk == 50207                 // '$' 'construction'\n     || lk == 50208                 // '%' 'construction'\n     || lk == 50452                 // '{' 'construction'\n     || lk == 51743                 // '$' 'context'\n     || lk == 51744                 // '%' 'context'\n     || lk == 51988                 // '{' 'context'\n     || lk == 52255                 // '$' 'continue'\n     || lk == 52256                 // '%' 'continue'\n     || lk == 52500                 // '{' 'continue'\n     || lk == 52767                 // '$' 'copy'\n     || lk == 52768                 // '%' 'copy'\n     || lk == 53012                 // '{' 'copy'\n     || lk == 53279                 // '$' 'copy-namespaces'\n     || lk == 53280                 // '%' 'copy-namespaces'\n     || lk == 53524                 // '{' 'copy-namespaces'\n     || lk == 53791                 // '$' 'count'\n     || lk == 53792                 // '%' 'count'\n     || lk == 54036                 // '{' 'count'\n     || lk == 54303                 // '$' 'decimal-format'\n     || lk == 54304                 // '%' 'decimal-format'\n     || lk == 54548                 // '{' 'decimal-format'\n     || lk == 55327                 // '$' 'declare'\n     || lk == 55328                 // '%' 'declare'\n     || lk == 55572                 // '{' 'declare'\n     || lk == 55839                 // '$' 'default'\n     || lk == 55840                 // '%' 'default'\n     || lk == 56084                 // '{' 'default'\n     || lk == 56351                 // '$' 'delete'\n     || lk == 56352                 // '%' 'delete'\n     || lk == 56596                 // '{' 'delete'\n     || lk == 56863                 // '$' 'descendant'\n     || lk == 56864                 // '%' 'descendant'\n     || lk == 57108                 // '{' 'descendant'\n     || lk == 57375                 // '$' 'descendant-or-self'\n     || lk == 57376                 // '%' 'descendant-or-self'\n     || lk == 57620                 // '{' 'descendant-or-self'\n     || lk == 57887                 // '$' 'descending'\n     || lk == 57888                 // '%' 'descending'\n     || lk == 58132                 // '{' 'descending'\n     || lk == 60447                 // '$' 'div'\n     || lk == 60448                 // '%' 'div'\n     || lk == 60692                 // '{' 'div'\n     || lk == 60959                 // '$' 'document'\n     || lk == 60960                 // '%' 'document'\n     || lk == 61204                 // '{' 'document'\n     || lk == 61471                 // '$' 'document-node'\n     || lk == 61472                 // '%' 'document-node'\n     || lk == 61716                 // '{' 'document-node'\n     || lk == 61983                 // '$' 'element'\n     || lk == 61984                 // '%' 'element'\n     || lk == 62228                 // '{' 'element'\n     || lk == 62495                 // '$' 'else'\n     || lk == 62496                 // '%' 'else'\n     || lk == 62740                 // '{' 'else'\n     || lk == 63007                 // '$' 'empty'\n     || lk == 63008                 // '%' 'empty'\n     || lk == 63252                 // '{' 'empty'\n     || lk == 63519                 // '$' 'empty-sequence'\n     || lk == 63520                 // '%' 'empty-sequence'\n     || lk == 63764                 // '{' 'empty-sequence'\n     || lk == 64031                 // '$' 'encoding'\n     || lk == 64032                 // '%' 'encoding'\n     || lk == 64276                 // '{' 'encoding'\n     || lk == 64543                 // '$' 'end'\n     || lk == 64544                 // '%' 'end'\n     || lk == 64788                 // '{' 'end'\n     || lk == 65567                 // '$' 'eq'\n     || lk == 65568                 // '%' 'eq'\n     || lk == 65812                 // '{' 'eq'\n     || lk == 66079                 // '$' 'every'\n     || lk == 66080                 // '%' 'every'\n     || lk == 66324                 // '{' 'every'\n     || lk == 67103                 // '$' 'except'\n     || lk == 67104                 // '%' 'except'\n     || lk == 67348                 // '{' 'except'\n     || lk == 67615                 // '$' 'exit'\n     || lk == 67616                 // '%' 'exit'\n     || lk == 67860                 // '{' 'exit'\n     || lk == 68127                 // '$' 'external'\n     || lk == 68128                 // '%' 'external'\n     || lk == 68372                 // '{' 'external'\n     || lk == 68639                 // '$' 'first'\n     || lk == 68640                 // '%' 'first'\n     || lk == 68884                 // '{' 'first'\n     || lk == 69151                 // '$' 'following'\n     || lk == 69152                 // '%' 'following'\n     || lk == 69396                 // '{' 'following'\n     || lk == 69663                 // '$' 'following-sibling'\n     || lk == 69664                 // '%' 'following-sibling'\n     || lk == 69908                 // '{' 'following-sibling'\n     || lk == 70175                 // '$' 'for'\n     || lk == 70176                 // '%' 'for'\n     || lk == 70420                 // '{' 'for'\n     || lk == 72223                 // '$' 'ft-option'\n     || lk == 72224                 // '%' 'ft-option'\n     || lk == 72468                 // '{' 'ft-option'\n     || lk == 74271                 // '$' 'function'\n     || lk == 74272                 // '%' 'function'\n     || lk == 74516                 // '{' 'function'\n     || lk == 74783                 // '$' 'ge'\n     || lk == 74784                 // '%' 'ge'\n     || lk == 75028                 // '{' 'ge'\n     || lk == 75807                 // '$' 'group'\n     || lk == 75808                 // '%' 'group'\n     || lk == 76052                 // '{' 'group'\n     || lk == 76831                 // '$' 'gt'\n     || lk == 76832                 // '%' 'gt'\n     || lk == 77076                 // '{' 'gt'\n     || lk == 77343                 // '$' 'idiv'\n     || lk == 77344                 // '%' 'idiv'\n     || lk == 77588                 // '{' 'idiv'\n     || lk == 77855                 // '$' 'if'\n     || lk == 77856                 // '%' 'if'\n     || lk == 78100                 // '{' 'if'\n     || lk == 78367                 // '$' 'import'\n     || lk == 78368                 // '%' 'import'\n     || lk == 78612                 // '{' 'import'\n     || lk == 78879                 // '$' 'in'\n     || lk == 78880                 // '%' 'in'\n     || lk == 79124                 // '{' 'in'\n     || lk == 79391                 // '$' 'index'\n     || lk == 79392                 // '%' 'index'\n     || lk == 79636                 // '{' 'index'\n     || lk == 81439                 // '$' 'insert'\n     || lk == 81440                 // '%' 'insert'\n     || lk == 81684                 // '{' 'insert'\n     || lk == 81951                 // '$' 'instance'\n     || lk == 81952                 // '%' 'instance'\n     || lk == 82196                 // '{' 'instance'\n     || lk == 82463                 // '$' 'integrity'\n     || lk == 82464                 // '%' 'integrity'\n     || lk == 82708                 // '{' 'integrity'\n     || lk == 82975                 // '$' 'intersect'\n     || lk == 82976                 // '%' 'intersect'\n     || lk == 83220                 // '{' 'intersect'\n     || lk == 83487                 // '$' 'into'\n     || lk == 83488                 // '%' 'into'\n     || lk == 83732                 // '{' 'into'\n     || lk == 83999                 // '$' 'is'\n     || lk == 84000                 // '%' 'is'\n     || lk == 84244                 // '{' 'is'\n     || lk == 84511                 // '$' 'item'\n     || lk == 84512                 // '%' 'item'\n     || lk == 84756                 // '{' 'item'\n     || lk == 85023                 // '$' 'json'\n     || lk == 85024                 // '%' 'json'\n     || lk == 85268                 // '{' 'json'\n     || lk == 85535                 // '$' 'json-item'\n     || lk == 85536                 // '%' 'json-item'\n     || lk == 85780                 // '{' 'json-item'\n     || lk == 87071                 // '$' 'last'\n     || lk == 87072                 // '%' 'last'\n     || lk == 87316                 // '{' 'last'\n     || lk == 87583                 // '$' 'lax'\n     || lk == 87584                 // '%' 'lax'\n     || lk == 87828                 // '{' 'lax'\n     || lk == 88095                 // '$' 'le'\n     || lk == 88096                 // '%' 'le'\n     || lk == 88340                 // '{' 'le'\n     || lk == 89119                 // '$' 'let'\n     || lk == 89120                 // '%' 'let'\n     || lk == 89364                 // '{' 'let'\n     || lk == 90143                 // '$' 'loop'\n     || lk == 90144                 // '%' 'loop'\n     || lk == 90388                 // '{' 'loop'\n     || lk == 91167                 // '$' 'lt'\n     || lk == 91168                 // '%' 'lt'\n     || lk == 91412                 // '{' 'lt'\n     || lk == 92191                 // '$' 'mod'\n     || lk == 92192                 // '%' 'mod'\n     || lk == 92436                 // '{' 'mod'\n     || lk == 92703                 // '$' 'modify'\n     || lk == 92704                 // '%' 'modify'\n     || lk == 92948                 // '{' 'modify'\n     || lk == 93215                 // '$' 'module'\n     || lk == 93216                 // '%' 'module'\n     || lk == 93460                 // '{' 'module'\n     || lk == 94239                 // '$' 'namespace'\n     || lk == 94240                 // '%' 'namespace'\n     || lk == 94484                 // '{' 'namespace'\n     || lk == 94751                 // '$' 'namespace-node'\n     || lk == 94752                 // '%' 'namespace-node'\n     || lk == 94996                 // '{' 'namespace-node'\n     || lk == 95263                 // '$' 'ne'\n     || lk == 95264                 // '%' 'ne'\n     || lk == 95508                 // '{' 'ne'\n     || lk == 97823                 // '$' 'node'\n     || lk == 97824                 // '%' 'node'\n     || lk == 98068                 // '{' 'node'\n     || lk == 98335                 // '$' 'nodes'\n     || lk == 98336                 // '%' 'nodes'\n     || lk == 98580                 // '{' 'nodes'\n     || lk == 99359                 // '$' 'object'\n     || lk == 99360                 // '%' 'object'\n     || lk == 99604                 // '{' 'object'\n     || lk == 101407                // '$' 'only'\n     || lk == 101408                // '%' 'only'\n     || lk == 101652                // '{' 'only'\n     || lk == 101919                // '$' 'option'\n     || lk == 101920                // '%' 'option'\n     || lk == 102164                // '{' 'option'\n     || lk == 102431                // '$' 'or'\n     || lk == 102432                // '%' 'or'\n     || lk == 102676                // '{' 'or'\n     || lk == 102943                // '$' 'order'\n     || lk == 102944                // '%' 'order'\n     || lk == 103188                // '{' 'order'\n     || lk == 103455                // '$' 'ordered'\n     || lk == 103456                // '%' 'ordered'\n     || lk == 103700                // '{' 'ordered'\n     || lk == 103967                // '$' 'ordering'\n     || lk == 103968                // '%' 'ordering'\n     || lk == 104212                // '{' 'ordering'\n     || lk == 105503                // '$' 'parent'\n     || lk == 105504                // '%' 'parent'\n     || lk == 105748                // '{' 'parent'\n     || lk == 108575                // '$' 'preceding'\n     || lk == 108576                // '%' 'preceding'\n     || lk == 108820                // '{' 'preceding'\n     || lk == 109087                // '$' 'preceding-sibling'\n     || lk == 109088                // '%' 'preceding-sibling'\n     || lk == 109332                // '{' 'preceding-sibling'\n     || lk == 110623                // '$' 'processing-instruction'\n     || lk == 110624                // '%' 'processing-instruction'\n     || lk == 110868                // '{' 'processing-instruction'\n     || lk == 111647                // '$' 'rename'\n     || lk == 111648                // '%' 'rename'\n     || lk == 111892                // '{' 'rename'\n     || lk == 112159                // '$' 'replace'\n     || lk == 112160                // '%' 'replace'\n     || lk == 112404                // '{' 'replace'\n     || lk == 112671                // '$' 'return'\n     || lk == 112672                // '%' 'return'\n     || lk == 112916                // '{' 'return'\n     || lk == 113183                // '$' 'returning'\n     || lk == 113184                // '%' 'returning'\n     || lk == 113428                // '{' 'returning'\n     || lk == 113695                // '$' 'revalidation'\n     || lk == 113696                // '%' 'revalidation'\n     || lk == 113940                // '{' 'revalidation'\n     || lk == 114719                // '$' 'satisfies'\n     || lk == 114720                // '%' 'satisfies'\n     || lk == 114964                // '{' 'satisfies'\n     || lk == 115231                // '$' 'schema'\n     || lk == 115232                // '%' 'schema'\n     || lk == 115476                // '{' 'schema'\n     || lk == 115743                // '$' 'schema-attribute'\n     || lk == 115744                // '%' 'schema-attribute'\n     || lk == 115988                // '{' 'schema-attribute'\n     || lk == 116255                // '$' 'schema-element'\n     || lk == 116256                // '%' 'schema-element'\n     || lk == 116500                // '{' 'schema-element'\n     || lk == 116767                // '$' 'score'\n     || lk == 116768                // '%' 'score'\n     || lk == 117012                // '{' 'score'\n     || lk == 117279                // '$' 'self'\n     || lk == 117280                // '%' 'self'\n     || lk == 117524                // '{' 'self'\n     || lk == 119839                // '$' 'sliding'\n     || lk == 119840                // '%' 'sliding'\n     || lk == 120084                // '{' 'sliding'\n     || lk == 120351                // '$' 'some'\n     || lk == 120352                // '%' 'some'\n     || lk == 120596                // '{' 'some'\n     || lk == 120863                // '$' 'stable'\n     || lk == 120864                // '%' 'stable'\n     || lk == 121108                // '{' 'stable'\n     || lk == 121375                // '$' 'start'\n     || lk == 121376                // '%' 'start'\n     || lk == 121620                // '{' 'start'\n     || lk == 122911                // '$' 'strict'\n     || lk == 122912                // '%' 'strict'\n     || lk == 123156                // '{' 'strict'\n     || lk == 123935                // '$' 'structured-item'\n     || lk == 123936                // '%' 'structured-item'\n     || lk == 124180                // '{' 'structured-item'\n     || lk == 124447                // '$' 'switch'\n     || lk == 124448                // '%' 'switch'\n     || lk == 124692                // '{' 'switch'\n     || lk == 124959                // '$' 'text'\n     || lk == 124960                // '%' 'text'\n     || lk == 125204                // '{' 'text'\n     || lk == 127007                // '$' 'to'\n     || lk == 127008                // '%' 'to'\n     || lk == 127252                // '{' 'to'\n     || lk == 127519                // '$' 'treat'\n     || lk == 127520                // '%' 'treat'\n     || lk == 127764                // '{' 'treat'\n     || lk == 128031                // '$' 'try'\n     || lk == 128032                // '%' 'try'\n     || lk == 128276                // '{' 'try'\n     || lk == 128543                // '$' 'tumbling'\n     || lk == 128544                // '%' 'tumbling'\n     || lk == 128788                // '{' 'tumbling'\n     || lk == 129055                // '$' 'type'\n     || lk == 129056                // '%' 'type'\n     || lk == 129300                // '{' 'type'\n     || lk == 129567                // '$' 'typeswitch'\n     || lk == 129568                // '%' 'typeswitch'\n     || lk == 129812                // '{' 'typeswitch'\n     || lk == 130079                // '$' 'union'\n     || lk == 130080                // '%' 'union'\n     || lk == 130324                // '{' 'union'\n     || lk == 131103                // '$' 'unordered'\n     || lk == 131104                // '%' 'unordered'\n     || lk == 131348                // '{' 'unordered'\n     || lk == 131615                // '$' 'updating'\n     || lk == 131616                // '%' 'updating'\n     || lk == 131860                // '{' 'updating'\n     || lk == 133151                // '$' 'validate'\n     || lk == 133152                // '%' 'validate'\n     || lk == 133396                // '{' 'validate'\n     || lk == 133663                // '$' 'value'\n     || lk == 133664                // '%' 'value'\n     || lk == 133908                // '{' 'value'\n     || lk == 134175                // '$' 'variable'\n     || lk == 134176                // '%' 'variable'\n     || lk == 134420                // '{' 'variable'\n     || lk == 134687                // '$' 'version'\n     || lk == 134688                // '%' 'version'\n     || lk == 134932                // '{' 'version'\n     || lk == 136223                // '$' 'where'\n     || lk == 136224                // '%' 'where'\n     || lk == 136468                // '{' 'where'\n     || lk == 136735                // '$' 'while'\n     || lk == 136736                // '%' 'while'\n     || lk == 136980                // '{' 'while'\n     || lk == 138271                // '$' 'with'\n     || lk == 138272                // '%' 'with'\n     || lk == 138516                // '{' 'with'\n     || lk == 140319                // '$' 'xquery'\n     || lk == 140320                // '%' 'xquery'\n     || lk == 140564                // '{' 'xquery'\n     || lk == 141588                // '{' '{'\n     || lk == 142612                // '{' '{|'\n     || lk == 144660)               // '{' '}'\n    {\n      lk = memoized(7, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_ApplyStatement();\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          try\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            try_AssignStatement();\n            lk = -2;\n          }\n          catch (p2A)\n          {\n            try\n            {\n              b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n              b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n              b2 = b2A; e2 = e2A; end = e2A; }}\n              try_BlockStatement();\n              lk = -3;\n            }\n            catch (p3A)\n            {\n              try\n              {\n                b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                b2 = b2A; e2 = e2A; end = e2A; }}\n                try_VarDeclStatement();\n                lk = -12;\n              }\n              catch (p12A)\n              {\n                lk = -13;\n              }\n            }\n          }\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(7, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -2:\n      parse_AssignStatement();\n      break;\n    case -3:\n      parse_BlockStatement();\n      break;\n    case 90198:                     // 'break' 'loop'\n      parse_BreakStatement();\n      break;\n    case 90214:                     // 'continue' 'loop'\n      parse_ContinueStatement();\n      break;\n    case 113284:                    // 'exit' 'returning'\n      parse_ExitStatement();\n      break;\n    case 16009:                     // 'for' '$'\n    case 16046:                     // 'let' '$'\n    case 116910:                    // 'let' 'score'\n    case 119945:                    // 'for' 'sliding'\n    case 128649:                    // 'for' 'tumbling'\n      parse_FLWORStatement();\n      break;\n    case 17560:                     // 'if' '('\n      parse_IfStatement();\n      break;\n    case 17651:                     // 'switch' '('\n      parse_SwitchStatement();\n      break;\n    case 141562:                    // 'try' '{'\n      parse_TryCatchStatement();\n      break;\n    case 17661:                     // 'typeswitch' '('\n      parse_TypeswitchStatement();\n      break;\n    case -12:\n    case 16134:                     // 'variable' '$'\n      parse_VarDeclStatement();\n      break;\n    case -13:\n      parse_WhileStatement();\n      break;\n    case 53:                        // ';'\n      parse_VoidStatement();\n      break;\n    default:\n      parse_ApplyStatement();\n    }\n    eventHandler.endNonterminal(\"Statement\", e0);\n  }\n\n  function try_Statement()\n  {\n    switch (l1)\n    {\n    case 132:                       // 'exit'\n      lookahead2W(188);             // S^WS | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' | '<' |\n                                    // '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' | 'castable' |\n                                    // 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' | 'instance' |\n                                    // 'intersect' | 'is' | 'le' | 'lt' | 'mod' | 'ne' | 'or' | 'returning' | 'to' |\n                                    // 'treat' | 'union' | '|' | '||'\n      break;\n    case 137:                       // 'for'\n      lookahead2W(195);             // S^WS | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' |\n                                    // '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' | 'castable' |\n                                    // 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' | 'instance' |\n                                    // 'intersect' | 'is' | 'le' | 'lt' | 'mod' | 'ne' | 'or' | 'sliding' | 'to' |\n                                    // 'treat' | 'tumbling' | 'union' | '|' | '||'\n      break;\n    case 174:                       // 'let'\n      lookahead2W(192);             // S^WS | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' |\n                                    // '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' | 'castable' |\n                                    // 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' | 'instance' |\n                                    // 'intersect' | 'is' | 'le' | 'lt' | 'mod' | 'ne' | 'or' | 'score' | 'to' |\n                                    // 'treat' | 'union' | '|' | '||'\n      break;\n    case 250:                       // 'try'\n      lookahead2W(189);             // S^WS | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' | '<' |\n                                    // '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' | 'castable' |\n                                    // 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' | 'instance' |\n                                    // 'intersect' | 'is' | 'le' | 'lt' | 'mod' | 'ne' | 'or' | 'to' | 'treat' |\n                                    // 'union' | '{' | '|' | '||'\n      break;\n    case 262:                       // 'variable'\n      lookahead2W(186);             // S^WS | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' |\n                                    // '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' | 'castable' |\n                                    // 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' | 'instance' |\n                                    // 'intersect' | 'is' | 'le' | 'lt' | 'mod' | 'ne' | 'or' | 'to' | 'treat' |\n                                    // 'union' | '|' | '||'\n      break;\n    case 276:                       // '{'\n      lookahead2W(276);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | ';' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|' | '}'\n      break;\n    case 31:                        // '$'\n    case 32:                        // '%'\n      lookahead2W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n      break;\n    case 86:                        // 'break'\n    case 102:                       // 'continue'\n      lookahead2W(187);             // S^WS | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' | '<' |\n                                    // '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' | 'castable' |\n                                    // 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' | 'instance' |\n                                    // 'intersect' | 'is' | 'le' | 'loop' | 'lt' | 'mod' | 'ne' | 'or' | 'to' |\n                                    // 'treat' | 'union' | '|' | '||'\n      break;\n    case 152:                       // 'if'\n    case 243:                       // 'switch'\n    case 253:                       // 'typeswitch'\n    case 267:                       // 'while'\n      lookahead2W(184);             // S^WS | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' | '<' |\n                                    // '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | 'and' | 'cast' | 'castable' |\n                                    // 'contains' | 'div' | 'eq' | 'except' | 'ge' | 'gt' | 'idiv' | 'instance' |\n                                    // 'intersect' | 'is' | 'le' | 'lt' | 'mod' | 'ne' | 'or' | 'to' | 'treat' |\n                                    // 'union' | '|' | '||'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 2836                  // '{' Wildcard\n     || lk == 3103                  // '$' EQName^Token\n     || lk == 3104                  // '%' EQName^Token\n     || lk == 3348                  // '{' EQName^Token\n     || lk == 4372                  // '{' IntegerLiteral\n     || lk == 4884                  // '{' DecimalLiteral\n     || lk == 5396                  // '{' DoubleLiteral\n     || lk == 5908                  // '{' StringLiteral\n     || lk == 16148                 // '{' '$'\n     || lk == 16660                 // '{' '%'\n     || lk == 17675                 // 'while' '('\n     || lk == 17684                 // '{' '('\n     || lk == 18196                 // '{' '(#'\n     || lk == 20756                 // '{' '+'\n     || lk == 21780                 // '{' '-'\n     || lk == 22804                 // '{' '.'\n     || lk == 23316                 // '{' '..'\n     || lk == 23828                 // '{' '/'\n     || lk == 24340                 // '{' '//'\n     || lk == 27412                 // '{' ';'\n     || lk == 27924                 // '{' '<'\n     || lk == 28436                 // '{' '<!--'\n     || lk == 30484                 // '{' '<?'\n     || lk == 34068                 // '{' '@'\n     || lk == 35092                 // '{' '['\n     || lk == 35871                 // '$' 'after'\n     || lk == 35872                 // '%' 'after'\n     || lk == 36116                 // '{' 'after'\n     || lk == 36895                 // '$' 'allowing'\n     || lk == 36896                 // '%' 'allowing'\n     || lk == 37140                 // '{' 'allowing'\n     || lk == 37407                 // '$' 'ancestor'\n     || lk == 37408                 // '%' 'ancestor'\n     || lk == 37652                 // '{' 'ancestor'\n     || lk == 37919                 // '$' 'ancestor-or-self'\n     || lk == 37920                 // '%' 'ancestor-or-self'\n     || lk == 38164                 // '{' 'ancestor-or-self'\n     || lk == 38431                 // '$' 'and'\n     || lk == 38432                 // '%' 'and'\n     || lk == 38676                 // '{' 'and'\n     || lk == 39455                 // '$' 'append'\n     || lk == 39456                 // '%' 'append'\n     || lk == 39700                 // '{' 'append'\n     || lk == 39967                 // '$' 'array'\n     || lk == 39968                 // '%' 'array'\n     || lk == 40212                 // '{' 'array'\n     || lk == 40479                 // '$' 'as'\n     || lk == 40480                 // '%' 'as'\n     || lk == 40724                 // '{' 'as'\n     || lk == 40991                 // '$' 'ascending'\n     || lk == 40992                 // '%' 'ascending'\n     || lk == 41236                 // '{' 'ascending'\n     || lk == 41503                 // '$' 'at'\n     || lk == 41504                 // '%' 'at'\n     || lk == 41748                 // '{' 'at'\n     || lk == 42015                 // '$' 'attribute'\n     || lk == 42016                 // '%' 'attribute'\n     || lk == 42260                 // '{' 'attribute'\n     || lk == 42527                 // '$' 'base-uri'\n     || lk == 42528                 // '%' 'base-uri'\n     || lk == 42772                 // '{' 'base-uri'\n     || lk == 43039                 // '$' 'before'\n     || lk == 43040                 // '%' 'before'\n     || lk == 43284                 // '{' 'before'\n     || lk == 43551                 // '$' 'boundary-space'\n     || lk == 43552                 // '%' 'boundary-space'\n     || lk == 43796                 // '{' 'boundary-space'\n     || lk == 44063                 // '$' 'break'\n     || lk == 44064                 // '%' 'break'\n     || lk == 44308                 // '{' 'break'\n     || lk == 45087                 // '$' 'case'\n     || lk == 45088                 // '%' 'case'\n     || lk == 45332                 // '{' 'case'\n     || lk == 45599                 // '$' 'cast'\n     || lk == 45600                 // '%' 'cast'\n     || lk == 45844                 // '{' 'cast'\n     || lk == 46111                 // '$' 'castable'\n     || lk == 46112                 // '%' 'castable'\n     || lk == 46356                 // '{' 'castable'\n     || lk == 46623                 // '$' 'catch'\n     || lk == 46624                 // '%' 'catch'\n     || lk == 46868                 // '{' 'catch'\n     || lk == 47647                 // '$' 'child'\n     || lk == 47648                 // '%' 'child'\n     || lk == 47892                 // '{' 'child'\n     || lk == 48159                 // '$' 'collation'\n     || lk == 48160                 // '%' 'collation'\n     || lk == 48404                 // '{' 'collation'\n     || lk == 49183                 // '$' 'comment'\n     || lk == 49184                 // '%' 'comment'\n     || lk == 49428                 // '{' 'comment'\n     || lk == 49695                 // '$' 'constraint'\n     || lk == 49696                 // '%' 'constraint'\n     || lk == 49940                 // '{' 'constraint'\n     || lk == 50207                 // '$' 'construction'\n     || lk == 50208                 // '%' 'construction'\n     || lk == 50452                 // '{' 'construction'\n     || lk == 51743                 // '$' 'context'\n     || lk == 51744                 // '%' 'context'\n     || lk == 51988                 // '{' 'context'\n     || lk == 52255                 // '$' 'continue'\n     || lk == 52256                 // '%' 'continue'\n     || lk == 52500                 // '{' 'continue'\n     || lk == 52767                 // '$' 'copy'\n     || lk == 52768                 // '%' 'copy'\n     || lk == 53012                 // '{' 'copy'\n     || lk == 53279                 // '$' 'copy-namespaces'\n     || lk == 53280                 // '%' 'copy-namespaces'\n     || lk == 53524                 // '{' 'copy-namespaces'\n     || lk == 53791                 // '$' 'count'\n     || lk == 53792                 // '%' 'count'\n     || lk == 54036                 // '{' 'count'\n     || lk == 54303                 // '$' 'decimal-format'\n     || lk == 54304                 // '%' 'decimal-format'\n     || lk == 54548                 // '{' 'decimal-format'\n     || lk == 55327                 // '$' 'declare'\n     || lk == 55328                 // '%' 'declare'\n     || lk == 55572                 // '{' 'declare'\n     || lk == 55839                 // '$' 'default'\n     || lk == 55840                 // '%' 'default'\n     || lk == 56084                 // '{' 'default'\n     || lk == 56351                 // '$' 'delete'\n     || lk == 56352                 // '%' 'delete'\n     || lk == 56596                 // '{' 'delete'\n     || lk == 56863                 // '$' 'descendant'\n     || lk == 56864                 // '%' 'descendant'\n     || lk == 57108                 // '{' 'descendant'\n     || lk == 57375                 // '$' 'descendant-or-self'\n     || lk == 57376                 // '%' 'descendant-or-self'\n     || lk == 57620                 // '{' 'descendant-or-self'\n     || lk == 57887                 // '$' 'descending'\n     || lk == 57888                 // '%' 'descending'\n     || lk == 58132                 // '{' 'descending'\n     || lk == 60447                 // '$' 'div'\n     || lk == 60448                 // '%' 'div'\n     || lk == 60692                 // '{' 'div'\n     || lk == 60959                 // '$' 'document'\n     || lk == 60960                 // '%' 'document'\n     || lk == 61204                 // '{' 'document'\n     || lk == 61471                 // '$' 'document-node'\n     || lk == 61472                 // '%' 'document-node'\n     || lk == 61716                 // '{' 'document-node'\n     || lk == 61983                 // '$' 'element'\n     || lk == 61984                 // '%' 'element'\n     || lk == 62228                 // '{' 'element'\n     || lk == 62495                 // '$' 'else'\n     || lk == 62496                 // '%' 'else'\n     || lk == 62740                 // '{' 'else'\n     || lk == 63007                 // '$' 'empty'\n     || lk == 63008                 // '%' 'empty'\n     || lk == 63252                 // '{' 'empty'\n     || lk == 63519                 // '$' 'empty-sequence'\n     || lk == 63520                 // '%' 'empty-sequence'\n     || lk == 63764                 // '{' 'empty-sequence'\n     || lk == 64031                 // '$' 'encoding'\n     || lk == 64032                 // '%' 'encoding'\n     || lk == 64276                 // '{' 'encoding'\n     || lk == 64543                 // '$' 'end'\n     || lk == 64544                 // '%' 'end'\n     || lk == 64788                 // '{' 'end'\n     || lk == 65567                 // '$' 'eq'\n     || lk == 65568                 // '%' 'eq'\n     || lk == 65812                 // '{' 'eq'\n     || lk == 66079                 // '$' 'every'\n     || lk == 66080                 // '%' 'every'\n     || lk == 66324                 // '{' 'every'\n     || lk == 67103                 // '$' 'except'\n     || lk == 67104                 // '%' 'except'\n     || lk == 67348                 // '{' 'except'\n     || lk == 67615                 // '$' 'exit'\n     || lk == 67616                 // '%' 'exit'\n     || lk == 67860                 // '{' 'exit'\n     || lk == 68127                 // '$' 'external'\n     || lk == 68128                 // '%' 'external'\n     || lk == 68372                 // '{' 'external'\n     || lk == 68639                 // '$' 'first'\n     || lk == 68640                 // '%' 'first'\n     || lk == 68884                 // '{' 'first'\n     || lk == 69151                 // '$' 'following'\n     || lk == 69152                 // '%' 'following'\n     || lk == 69396                 // '{' 'following'\n     || lk == 69663                 // '$' 'following-sibling'\n     || lk == 69664                 // '%' 'following-sibling'\n     || lk == 69908                 // '{' 'following-sibling'\n     || lk == 70175                 // '$' 'for'\n     || lk == 70176                 // '%' 'for'\n     || lk == 70420                 // '{' 'for'\n     || lk == 72223                 // '$' 'ft-option'\n     || lk == 72224                 // '%' 'ft-option'\n     || lk == 72468                 // '{' 'ft-option'\n     || lk == 74271                 // '$' 'function'\n     || lk == 74272                 // '%' 'function'\n     || lk == 74516                 // '{' 'function'\n     || lk == 74783                 // '$' 'ge'\n     || lk == 74784                 // '%' 'ge'\n     || lk == 75028                 // '{' 'ge'\n     || lk == 75807                 // '$' 'group'\n     || lk == 75808                 // '%' 'group'\n     || lk == 76052                 // '{' 'group'\n     || lk == 76831                 // '$' 'gt'\n     || lk == 76832                 // '%' 'gt'\n     || lk == 77076                 // '{' 'gt'\n     || lk == 77343                 // '$' 'idiv'\n     || lk == 77344                 // '%' 'idiv'\n     || lk == 77588                 // '{' 'idiv'\n     || lk == 77855                 // '$' 'if'\n     || lk == 77856                 // '%' 'if'\n     || lk == 78100                 // '{' 'if'\n     || lk == 78367                 // '$' 'import'\n     || lk == 78368                 // '%' 'import'\n     || lk == 78612                 // '{' 'import'\n     || lk == 78879                 // '$' 'in'\n     || lk == 78880                 // '%' 'in'\n     || lk == 79124                 // '{' 'in'\n     || lk == 79391                 // '$' 'index'\n     || lk == 79392                 // '%' 'index'\n     || lk == 79636                 // '{' 'index'\n     || lk == 81439                 // '$' 'insert'\n     || lk == 81440                 // '%' 'insert'\n     || lk == 81684                 // '{' 'insert'\n     || lk == 81951                 // '$' 'instance'\n     || lk == 81952                 // '%' 'instance'\n     || lk == 82196                 // '{' 'instance'\n     || lk == 82463                 // '$' 'integrity'\n     || lk == 82464                 // '%' 'integrity'\n     || lk == 82708                 // '{' 'integrity'\n     || lk == 82975                 // '$' 'intersect'\n     || lk == 82976                 // '%' 'intersect'\n     || lk == 83220                 // '{' 'intersect'\n     || lk == 83487                 // '$' 'into'\n     || lk == 83488                 // '%' 'into'\n     || lk == 83732                 // '{' 'into'\n     || lk == 83999                 // '$' 'is'\n     || lk == 84000                 // '%' 'is'\n     || lk == 84244                 // '{' 'is'\n     || lk == 84511                 // '$' 'item'\n     || lk == 84512                 // '%' 'item'\n     || lk == 84756                 // '{' 'item'\n     || lk == 85023                 // '$' 'json'\n     || lk == 85024                 // '%' 'json'\n     || lk == 85268                 // '{' 'json'\n     || lk == 85535                 // '$' 'json-item'\n     || lk == 85536                 // '%' 'json-item'\n     || lk == 85780                 // '{' 'json-item'\n     || lk == 87071                 // '$' 'last'\n     || lk == 87072                 // '%' 'last'\n     || lk == 87316                 // '{' 'last'\n     || lk == 87583                 // '$' 'lax'\n     || lk == 87584                 // '%' 'lax'\n     || lk == 87828                 // '{' 'lax'\n     || lk == 88095                 // '$' 'le'\n     || lk == 88096                 // '%' 'le'\n     || lk == 88340                 // '{' 'le'\n     || lk == 89119                 // '$' 'let'\n     || lk == 89120                 // '%' 'let'\n     || lk == 89364                 // '{' 'let'\n     || lk == 90143                 // '$' 'loop'\n     || lk == 90144                 // '%' 'loop'\n     || lk == 90388                 // '{' 'loop'\n     || lk == 91167                 // '$' 'lt'\n     || lk == 91168                 // '%' 'lt'\n     || lk == 91412                 // '{' 'lt'\n     || lk == 92191                 // '$' 'mod'\n     || lk == 92192                 // '%' 'mod'\n     || lk == 92436                 // '{' 'mod'\n     || lk == 92703                 // '$' 'modify'\n     || lk == 92704                 // '%' 'modify'\n     || lk == 92948                 // '{' 'modify'\n     || lk == 93215                 // '$' 'module'\n     || lk == 93216                 // '%' 'module'\n     || lk == 93460                 // '{' 'module'\n     || lk == 94239                 // '$' 'namespace'\n     || lk == 94240                 // '%' 'namespace'\n     || lk == 94484                 // '{' 'namespace'\n     || lk == 94751                 // '$' 'namespace-node'\n     || lk == 94752                 // '%' 'namespace-node'\n     || lk == 94996                 // '{' 'namespace-node'\n     || lk == 95263                 // '$' 'ne'\n     || lk == 95264                 // '%' 'ne'\n     || lk == 95508                 // '{' 'ne'\n     || lk == 97823                 // '$' 'node'\n     || lk == 97824                 // '%' 'node'\n     || lk == 98068                 // '{' 'node'\n     || lk == 98335                 // '$' 'nodes'\n     || lk == 98336                 // '%' 'nodes'\n     || lk == 98580                 // '{' 'nodes'\n     || lk == 99359                 // '$' 'object'\n     || lk == 99360                 // '%' 'object'\n     || lk == 99604                 // '{' 'object'\n     || lk == 101407                // '$' 'only'\n     || lk == 101408                // '%' 'only'\n     || lk == 101652                // '{' 'only'\n     || lk == 101919                // '$' 'option'\n     || lk == 101920                // '%' 'option'\n     || lk == 102164                // '{' 'option'\n     || lk == 102431                // '$' 'or'\n     || lk == 102432                // '%' 'or'\n     || lk == 102676                // '{' 'or'\n     || lk == 102943                // '$' 'order'\n     || lk == 102944                // '%' 'order'\n     || lk == 103188                // '{' 'order'\n     || lk == 103455                // '$' 'ordered'\n     || lk == 103456                // '%' 'ordered'\n     || lk == 103700                // '{' 'ordered'\n     || lk == 103967                // '$' 'ordering'\n     || lk == 103968                // '%' 'ordering'\n     || lk == 104212                // '{' 'ordering'\n     || lk == 105503                // '$' 'parent'\n     || lk == 105504                // '%' 'parent'\n     || lk == 105748                // '{' 'parent'\n     || lk == 108575                // '$' 'preceding'\n     || lk == 108576                // '%' 'preceding'\n     || lk == 108820                // '{' 'preceding'\n     || lk == 109087                // '$' 'preceding-sibling'\n     || lk == 109088                // '%' 'preceding-sibling'\n     || lk == 109332                // '{' 'preceding-sibling'\n     || lk == 110623                // '$' 'processing-instruction'\n     || lk == 110624                // '%' 'processing-instruction'\n     || lk == 110868                // '{' 'processing-instruction'\n     || lk == 111647                // '$' 'rename'\n     || lk == 111648                // '%' 'rename'\n     || lk == 111892                // '{' 'rename'\n     || lk == 112159                // '$' 'replace'\n     || lk == 112160                // '%' 'replace'\n     || lk == 112404                // '{' 'replace'\n     || lk == 112671                // '$' 'return'\n     || lk == 112672                // '%' 'return'\n     || lk == 112916                // '{' 'return'\n     || lk == 113183                // '$' 'returning'\n     || lk == 113184                // '%' 'returning'\n     || lk == 113428                // '{' 'returning'\n     || lk == 113695                // '$' 'revalidation'\n     || lk == 113696                // '%' 'revalidation'\n     || lk == 113940                // '{' 'revalidation'\n     || lk == 114719                // '$' 'satisfies'\n     || lk == 114720                // '%' 'satisfies'\n     || lk == 114964                // '{' 'satisfies'\n     || lk == 115231                // '$' 'schema'\n     || lk == 115232                // '%' 'schema'\n     || lk == 115476                // '{' 'schema'\n     || lk == 115743                // '$' 'schema-attribute'\n     || lk == 115744                // '%' 'schema-attribute'\n     || lk == 115988                // '{' 'schema-attribute'\n     || lk == 116255                // '$' 'schema-element'\n     || lk == 116256                // '%' 'schema-element'\n     || lk == 116500                // '{' 'schema-element'\n     || lk == 116767                // '$' 'score'\n     || lk == 116768                // '%' 'score'\n     || lk == 117012                // '{' 'score'\n     || lk == 117279                // '$' 'self'\n     || lk == 117280                // '%' 'self'\n     || lk == 117524                // '{' 'self'\n     || lk == 119839                // '$' 'sliding'\n     || lk == 119840                // '%' 'sliding'\n     || lk == 120084                // '{' 'sliding'\n     || lk == 120351                // '$' 'some'\n     || lk == 120352                // '%' 'some'\n     || lk == 120596                // '{' 'some'\n     || lk == 120863                // '$' 'stable'\n     || lk == 120864                // '%' 'stable'\n     || lk == 121108                // '{' 'stable'\n     || lk == 121375                // '$' 'start'\n     || lk == 121376                // '%' 'start'\n     || lk == 121620                // '{' 'start'\n     || lk == 122911                // '$' 'strict'\n     || lk == 122912                // '%' 'strict'\n     || lk == 123156                // '{' 'strict'\n     || lk == 123935                // '$' 'structured-item'\n     || lk == 123936                // '%' 'structured-item'\n     || lk == 124180                // '{' 'structured-item'\n     || lk == 124447                // '$' 'switch'\n     || lk == 124448                // '%' 'switch'\n     || lk == 124692                // '{' 'switch'\n     || lk == 124959                // '$' 'text'\n     || lk == 124960                // '%' 'text'\n     || lk == 125204                // '{' 'text'\n     || lk == 127007                // '$' 'to'\n     || lk == 127008                // '%' 'to'\n     || lk == 127252                // '{' 'to'\n     || lk == 127519                // '$' 'treat'\n     || lk == 127520                // '%' 'treat'\n     || lk == 127764                // '{' 'treat'\n     || lk == 128031                // '$' 'try'\n     || lk == 128032                // '%' 'try'\n     || lk == 128276                // '{' 'try'\n     || lk == 128543                // '$' 'tumbling'\n     || lk == 128544                // '%' 'tumbling'\n     || lk == 128788                // '{' 'tumbling'\n     || lk == 129055                // '$' 'type'\n     || lk == 129056                // '%' 'type'\n     || lk == 129300                // '{' 'type'\n     || lk == 129567                // '$' 'typeswitch'\n     || lk == 129568                // '%' 'typeswitch'\n     || lk == 129812                // '{' 'typeswitch'\n     || lk == 130079                // '$' 'union'\n     || lk == 130080                // '%' 'union'\n     || lk == 130324                // '{' 'union'\n     || lk == 131103                // '$' 'unordered'\n     || lk == 131104                // '%' 'unordered'\n     || lk == 131348                // '{' 'unordered'\n     || lk == 131615                // '$' 'updating'\n     || lk == 131616                // '%' 'updating'\n     || lk == 131860                // '{' 'updating'\n     || lk == 133151                // '$' 'validate'\n     || lk == 133152                // '%' 'validate'\n     || lk == 133396                // '{' 'validate'\n     || lk == 133663                // '$' 'value'\n     || lk == 133664                // '%' 'value'\n     || lk == 133908                // '{' 'value'\n     || lk == 134175                // '$' 'variable'\n     || lk == 134176                // '%' 'variable'\n     || lk == 134420                // '{' 'variable'\n     || lk == 134687                // '$' 'version'\n     || lk == 134688                // '%' 'version'\n     || lk == 134932                // '{' 'version'\n     || lk == 136223                // '$' 'where'\n     || lk == 136224                // '%' 'where'\n     || lk == 136468                // '{' 'where'\n     || lk == 136735                // '$' 'while'\n     || lk == 136736                // '%' 'while'\n     || lk == 136980                // '{' 'while'\n     || lk == 138271                // '$' 'with'\n     || lk == 138272                // '%' 'with'\n     || lk == 138516                // '{' 'with'\n     || lk == 140319                // '$' 'xquery'\n     || lk == 140320                // '%' 'xquery'\n     || lk == 140564                // '{' 'xquery'\n     || lk == 141588                // '{' '{'\n     || lk == 142612                // '{' '{|'\n     || lk == 144660)               // '{' '}'\n    {\n      lk = memoized(7, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_ApplyStatement();\n          memoize(7, e0A, -1);\n          lk = -15;\n        }\n        catch (p1A)\n        {\n          try\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            try_AssignStatement();\n            memoize(7, e0A, -2);\n            lk = -15;\n          }\n          catch (p2A)\n          {\n            try\n            {\n              b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n              b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n              b2 = b2A; e2 = e2A; end = e2A; }}\n              try_BlockStatement();\n              memoize(7, e0A, -3);\n              lk = -15;\n            }\n            catch (p3A)\n            {\n              try\n              {\n                b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                b2 = b2A; e2 = e2A; end = e2A; }}\n                try_VarDeclStatement();\n                memoize(7, e0A, -12);\n                lk = -15;\n              }\n              catch (p12A)\n              {\n                lk = -13;\n                b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                b2 = b2A; e2 = e2A; end = e2A; }}\n                memoize(7, e0A, -13);\n              }\n            }\n          }\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -2:\n      try_AssignStatement();\n      break;\n    case -3:\n      try_BlockStatement();\n      break;\n    case 90198:                     // 'break' 'loop'\n      try_BreakStatement();\n      break;\n    case 90214:                     // 'continue' 'loop'\n      try_ContinueStatement();\n      break;\n    case 113284:                    // 'exit' 'returning'\n      try_ExitStatement();\n      break;\n    case 16009:                     // 'for' '$'\n    case 16046:                     // 'let' '$'\n    case 116910:                    // 'let' 'score'\n    case 119945:                    // 'for' 'sliding'\n    case 128649:                    // 'for' 'tumbling'\n      try_FLWORStatement();\n      break;\n    case 17560:                     // 'if' '('\n      try_IfStatement();\n      break;\n    case 17651:                     // 'switch' '('\n      try_SwitchStatement();\n      break;\n    case 141562:                    // 'try' '{'\n      try_TryCatchStatement();\n      break;\n    case 17661:                     // 'typeswitch' '('\n      try_TypeswitchStatement();\n      break;\n    case -12:\n    case 16134:                     // 'variable' '$'\n      try_VarDeclStatement();\n      break;\n    case -13:\n      try_WhileStatement();\n      break;\n    case 53:                        // ';'\n      try_VoidStatement();\n      break;\n    case -15:\n      break;\n    default:\n      try_ApplyStatement();\n    }\n  }\n\n  function parse_ApplyStatement()\n  {\n    eventHandler.startNonterminal(\"ApplyStatement\", e0);\n    parse_ExprSimple();\n    shift(53);                      // ';'\n    eventHandler.endNonterminal(\"ApplyStatement\", e0);\n  }\n\n  function try_ApplyStatement()\n  {\n    try_ExprSimple();\n    shiftT(53);                     // ';'\n  }\n\n  function parse_AssignStatement()\n  {\n    eventHandler.startNonterminal(\"AssignStatement\", e0);\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    whitespace();\n    parse_VarName();\n    lookahead1W(27);                // S^WS | '(:' | ':='\n    shift(52);                      // ':='\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    shift(53);                      // ';'\n    eventHandler.endNonterminal(\"AssignStatement\", e0);\n  }\n\n  function try_AssignStatement()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    try_VarName();\n    lookahead1W(27);                // S^WS | '(:' | ':='\n    shiftT(52);                     // ':='\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_ExprSingle();\n    shiftT(53);                     // ';'\n  }\n\n  function parse_BlockStatement()\n  {\n    eventHandler.startNonterminal(\"BlockStatement\", e0);\n    shift(276);                     // '{'\n    lookahead1W(276);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | ';' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|' | '}'\n    whitespace();\n    parse_Statements();\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"BlockStatement\", e0);\n  }\n\n  function try_BlockStatement()\n  {\n    shiftT(276);                    // '{'\n    lookahead1W(276);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | ';' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|' | '}'\n    try_Statements();\n    shiftT(282);                    // '}'\n  }\n\n  function parse_BreakStatement()\n  {\n    eventHandler.startNonterminal(\"BreakStatement\", e0);\n    shift(86);                      // 'break'\n    lookahead1W(59);                // S^WS | '(:' | 'loop'\n    shift(176);                     // 'loop'\n    lookahead1W(28);                // S^WS | '(:' | ';'\n    shift(53);                      // ';'\n    eventHandler.endNonterminal(\"BreakStatement\", e0);\n  }\n\n  function try_BreakStatement()\n  {\n    shiftT(86);                     // 'break'\n    lookahead1W(59);                // S^WS | '(:' | 'loop'\n    shiftT(176);                    // 'loop'\n    lookahead1W(28);                // S^WS | '(:' | ';'\n    shiftT(53);                     // ';'\n  }\n\n  function parse_ContinueStatement()\n  {\n    eventHandler.startNonterminal(\"ContinueStatement\", e0);\n    shift(102);                     // 'continue'\n    lookahead1W(59);                // S^WS | '(:' | 'loop'\n    shift(176);                     // 'loop'\n    lookahead1W(28);                // S^WS | '(:' | ';'\n    shift(53);                      // ';'\n    eventHandler.endNonterminal(\"ContinueStatement\", e0);\n  }\n\n  function try_ContinueStatement()\n  {\n    shiftT(102);                    // 'continue'\n    lookahead1W(59);                // S^WS | '(:' | 'loop'\n    shiftT(176);                    // 'loop'\n    lookahead1W(28);                // S^WS | '(:' | ';'\n    shiftT(53);                     // ';'\n  }\n\n  function parse_ExitStatement()\n  {\n    eventHandler.startNonterminal(\"ExitStatement\", e0);\n    shift(132);                     // 'exit'\n    lookahead1W(71);                // S^WS | '(:' | 'returning'\n    shift(221);                     // 'returning'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    shift(53);                      // ';'\n    eventHandler.endNonterminal(\"ExitStatement\", e0);\n  }\n\n  function try_ExitStatement()\n  {\n    shiftT(132);                    // 'exit'\n    lookahead1W(71);                // S^WS | '(:' | 'returning'\n    shiftT(221);                    // 'returning'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_ExprSingle();\n    shiftT(53);                     // ';'\n  }\n\n  function parse_FLWORStatement()\n  {\n    eventHandler.startNonterminal(\"FLWORStatement\", e0);\n    parse_InitialClause();\n    for (;;)\n    {\n      lookahead1W(173);             // S^WS | '(:' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' | 'stable' |\n                                    // 'where'\n      if (l1 == 220)                // 'return'\n      {\n        break;\n      }\n      whitespace();\n      parse_IntermediateClause();\n    }\n    whitespace();\n    parse_ReturnStatement();\n    eventHandler.endNonterminal(\"FLWORStatement\", e0);\n  }\n\n  function try_FLWORStatement()\n  {\n    try_InitialClause();\n    for (;;)\n    {\n      lookahead1W(173);             // S^WS | '(:' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' | 'stable' |\n                                    // 'where'\n      if (l1 == 220)                // 'return'\n      {\n        break;\n      }\n      try_IntermediateClause();\n    }\n    try_ReturnStatement();\n  }\n\n  function parse_ReturnStatement()\n  {\n    eventHandler.startNonterminal(\"ReturnStatement\", e0);\n    shift(220);                     // 'return'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | ';' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"ReturnStatement\", e0);\n  }\n\n  function try_ReturnStatement()\n  {\n    shiftT(220);                    // 'return'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | ';' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_Statement();\n  }\n\n  function parse_IfStatement()\n  {\n    eventHandler.startNonterminal(\"IfStatement\", e0);\n    shift(152);                     // 'if'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_Expr();\n    shift(37);                      // ')'\n    lookahead1W(77);                // S^WS | '(:' | 'then'\n    shift(245);                     // 'then'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | ';' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_Statement();\n    lookahead1W(48);                // S^WS | '(:' | 'else'\n    shift(122);                     // 'else'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | ';' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"IfStatement\", e0);\n  }\n\n  function try_IfStatement()\n  {\n    shiftT(152);                    // 'if'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_Expr();\n    shiftT(37);                     // ')'\n    lookahead1W(77);                // S^WS | '(:' | 'then'\n    shiftT(245);                    // 'then'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | ';' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_Statement();\n    lookahead1W(48);                // S^WS | '(:' | 'else'\n    shiftT(122);                    // 'else'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | ';' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_Statement();\n  }\n\n  function parse_SwitchStatement()\n  {\n    eventHandler.startNonterminal(\"SwitchStatement\", e0);\n    shift(243);                     // 'switch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_Expr();\n    shift(37);                      // ')'\n    for (;;)\n    {\n      lookahead1W(35);              // S^WS | '(:' | 'case'\n      whitespace();\n      parse_SwitchCaseStatement();\n      lookahead1W(113);             // S^WS | '(:' | 'case' | 'default'\n      if (l1 != 88)                 // 'case'\n      {\n        break;\n      }\n    }\n    shift(109);                     // 'default'\n    lookahead1W(70);                // S^WS | '(:' | 'return'\n    shift(220);                     // 'return'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | ';' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"SwitchStatement\", e0);\n  }\n\n  function try_SwitchStatement()\n  {\n    shiftT(243);                    // 'switch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_Expr();\n    shiftT(37);                     // ')'\n    for (;;)\n    {\n      lookahead1W(35);              // S^WS | '(:' | 'case'\n      try_SwitchCaseStatement();\n      lookahead1W(113);             // S^WS | '(:' | 'case' | 'default'\n      if (l1 != 88)                 // 'case'\n      {\n        break;\n      }\n    }\n    shiftT(109);                    // 'default'\n    lookahead1W(70);                // S^WS | '(:' | 'return'\n    shiftT(220);                    // 'return'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | ';' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_Statement();\n  }\n\n  function parse_SwitchCaseStatement()\n  {\n    eventHandler.startNonterminal(\"SwitchCaseStatement\", e0);\n    for (;;)\n    {\n      shift(88);                    // 'case'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      whitespace();\n      parse_SwitchCaseOperand();\n      if (l1 != 88)                 // 'case'\n      {\n        break;\n      }\n    }\n    shift(220);                     // 'return'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | ';' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"SwitchCaseStatement\", e0);\n  }\n\n  function try_SwitchCaseStatement()\n  {\n    for (;;)\n    {\n      shiftT(88);                   // 'case'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      try_SwitchCaseOperand();\n      if (l1 != 88)                 // 'case'\n      {\n        break;\n      }\n    }\n    shiftT(220);                    // 'return'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | ';' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_Statement();\n  }\n\n  function parse_TryCatchStatement()\n  {\n    eventHandler.startNonterminal(\"TryCatchStatement\", e0);\n    shift(250);                     // 'try'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    whitespace();\n    parse_BlockStatement();\n    for (;;)\n    {\n      lookahead1W(36);              // S^WS | '(:' | 'catch'\n      shift(91);                    // 'catch'\n      lookahead1W(256);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n      whitespace();\n      parse_CatchErrorList();\n      whitespace();\n      parse_BlockStatement();\n      lookahead1W(277);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | EOF | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' |\n                                    // '..' | '/' | '//' | ';' | '<' | '<!--' | '<?' | '@' | '[' | 'after' |\n                                    // 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' |\n                                    // 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'first' | 'following' | 'following-sibling' | 'for' |\n                                    // 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' |\n                                    // 'in' | 'index' | 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' |\n                                    // 'is' | 'item' | 'json' | 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' |\n                                    // 'lt' | 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' |\n                                    // 'node' | 'nodes' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'self' | 'sliding' | 'some' | 'stable' | 'start' | 'strict' |\n                                    // 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'try' | 'tumbling' |\n                                    // 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' |\n                                    // 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' | 'xquery' | '{' |\n                                    // '{|' | '}'\n      switch (l1)\n      {\n      case 91:                      // 'catch'\n        lookahead2W(278);           // Wildcard | EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' |\n                                    // '+' | ',' | '-' | '/' | '//' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' |\n                                    // '>>' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' |\n                                    // 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' |\n                                    // 'before' | 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' |\n                                    // 'child' | 'collation' | 'comment' | 'constraint' | 'construction' | 'contains' |\n                                    // 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' |\n                                    // 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'json-item' | 'last' | 'lax' |\n                                    // 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' | 'namespace' |\n                                    // 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' | 'only' | 'option' |\n                                    // 'or' | 'order' | 'ordered' | 'ordering' | 'parent' | 'preceding' |\n                                    // 'preceding-sibling' | 'processing-instruction' | 'rename' | 'replace' |\n                                    // 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '|' | '||' | '}'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 38491               // 'catch' 'and'\n       || lk == 45659               // 'catch' 'cast'\n       || lk == 46171               // 'catch' 'castable'\n       || lk == 60507               // 'catch' 'div'\n       || lk == 65627               // 'catch' 'eq'\n       || lk == 67163               // 'catch' 'except'\n       || lk == 74843               // 'catch' 'ge'\n       || lk == 76891               // 'catch' 'gt'\n       || lk == 77403               // 'catch' 'idiv'\n       || lk == 82011               // 'catch' 'instance'\n       || lk == 83035               // 'catch' 'intersect'\n       || lk == 84059               // 'catch' 'is'\n       || lk == 88155               // 'catch' 'le'\n       || lk == 91227               // 'catch' 'lt'\n       || lk == 92251               // 'catch' 'mod'\n       || lk == 95323               // 'catch' 'ne'\n       || lk == 102491              // 'catch' 'or'\n       || lk == 127067              // 'catch' 'to'\n       || lk == 127579              // 'catch' 'treat'\n       || lk == 130139)             // 'catch' 'union'\n      {\n        lk = memoized(8, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            lookahead1W(36);        // S^WS | '(:' | 'catch'\n            shiftT(91);             // 'catch'\n            lookahead1W(256);       // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n            try_CatchErrorList();\n            try_BlockStatement();\n            lk = -1;\n          }\n          catch (p1A)\n          {\n            lk = -2;\n          }\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(8, e0, lk);\n        }\n      }\n      if (lk != -1\n       && lk != 2651                // 'catch' Wildcard\n       && lk != 3163                // 'catch' EQName^Token\n       && lk != 35931               // 'catch' 'after'\n       && lk != 36955               // 'catch' 'allowing'\n       && lk != 37467               // 'catch' 'ancestor'\n       && lk != 37979               // 'catch' 'ancestor-or-self'\n       && lk != 39515               // 'catch' 'append'\n       && lk != 40027               // 'catch' 'array'\n       && lk != 40539               // 'catch' 'as'\n       && lk != 41051               // 'catch' 'ascending'\n       && lk != 41563               // 'catch' 'at'\n       && lk != 42075               // 'catch' 'attribute'\n       && lk != 42587               // 'catch' 'base-uri'\n       && lk != 43099               // 'catch' 'before'\n       && lk != 43611               // 'catch' 'boundary-space'\n       && lk != 44123               // 'catch' 'break'\n       && lk != 45147               // 'catch' 'case'\n       && lk != 46683               // 'catch' 'catch'\n       && lk != 47707               // 'catch' 'child'\n       && lk != 48219               // 'catch' 'collation'\n       && lk != 49243               // 'catch' 'comment'\n       && lk != 49755               // 'catch' 'constraint'\n       && lk != 50267               // 'catch' 'construction'\n       && lk != 51803               // 'catch' 'context'\n       && lk != 52315               // 'catch' 'continue'\n       && lk != 52827               // 'catch' 'copy'\n       && lk != 53339               // 'catch' 'copy-namespaces'\n       && lk != 53851               // 'catch' 'count'\n       && lk != 54363               // 'catch' 'decimal-format'\n       && lk != 55387               // 'catch' 'declare'\n       && lk != 55899               // 'catch' 'default'\n       && lk != 56411               // 'catch' 'delete'\n       && lk != 56923               // 'catch' 'descendant'\n       && lk != 57435               // 'catch' 'descendant-or-self'\n       && lk != 57947               // 'catch' 'descending'\n       && lk != 61019               // 'catch' 'document'\n       && lk != 61531               // 'catch' 'document-node'\n       && lk != 62043               // 'catch' 'element'\n       && lk != 62555               // 'catch' 'else'\n       && lk != 63067               // 'catch' 'empty'\n       && lk != 63579               // 'catch' 'empty-sequence'\n       && lk != 64091               // 'catch' 'encoding'\n       && lk != 64603               // 'catch' 'end'\n       && lk != 66139               // 'catch' 'every'\n       && lk != 67675               // 'catch' 'exit'\n       && lk != 68187               // 'catch' 'external'\n       && lk != 68699               // 'catch' 'first'\n       && lk != 69211               // 'catch' 'following'\n       && lk != 69723               // 'catch' 'following-sibling'\n       && lk != 70235               // 'catch' 'for'\n       && lk != 72283               // 'catch' 'ft-option'\n       && lk != 74331               // 'catch' 'function'\n       && lk != 75867               // 'catch' 'group'\n       && lk != 77915               // 'catch' 'if'\n       && lk != 78427               // 'catch' 'import'\n       && lk != 78939               // 'catch' 'in'\n       && lk != 79451               // 'catch' 'index'\n       && lk != 81499               // 'catch' 'insert'\n       && lk != 82523               // 'catch' 'integrity'\n       && lk != 83547               // 'catch' 'into'\n       && lk != 84571               // 'catch' 'item'\n       && lk != 85083               // 'catch' 'json'\n       && lk != 85595               // 'catch' 'json-item'\n       && lk != 87131               // 'catch' 'last'\n       && lk != 87643               // 'catch' 'lax'\n       && lk != 89179               // 'catch' 'let'\n       && lk != 90203               // 'catch' 'loop'\n       && lk != 92763               // 'catch' 'modify'\n       && lk != 93275               // 'catch' 'module'\n       && lk != 94299               // 'catch' 'namespace'\n       && lk != 94811               // 'catch' 'namespace-node'\n       && lk != 97883               // 'catch' 'node'\n       && lk != 98395               // 'catch' 'nodes'\n       && lk != 99419               // 'catch' 'object'\n       && lk != 101467              // 'catch' 'only'\n       && lk != 101979              // 'catch' 'option'\n       && lk != 103003              // 'catch' 'order'\n       && lk != 103515              // 'catch' 'ordered'\n       && lk != 104027              // 'catch' 'ordering'\n       && lk != 105563              // 'catch' 'parent'\n       && lk != 108635              // 'catch' 'preceding'\n       && lk != 109147              // 'catch' 'preceding-sibling'\n       && lk != 110683              // 'catch' 'processing-instruction'\n       && lk != 111707              // 'catch' 'rename'\n       && lk != 112219              // 'catch' 'replace'\n       && lk != 112731              // 'catch' 'return'\n       && lk != 113243              // 'catch' 'returning'\n       && lk != 113755              // 'catch' 'revalidation'\n       && lk != 114779              // 'catch' 'satisfies'\n       && lk != 115291              // 'catch' 'schema'\n       && lk != 115803              // 'catch' 'schema-attribute'\n       && lk != 116315              // 'catch' 'schema-element'\n       && lk != 116827              // 'catch' 'score'\n       && lk != 117339              // 'catch' 'self'\n       && lk != 119899              // 'catch' 'sliding'\n       && lk != 120411              // 'catch' 'some'\n       && lk != 120923              // 'catch' 'stable'\n       && lk != 121435              // 'catch' 'start'\n       && lk != 122971              // 'catch' 'strict'\n       && lk != 123995              // 'catch' 'structured-item'\n       && lk != 124507              // 'catch' 'switch'\n       && lk != 125019              // 'catch' 'text'\n       && lk != 128091              // 'catch' 'try'\n       && lk != 128603              // 'catch' 'tumbling'\n       && lk != 129115              // 'catch' 'type'\n       && lk != 129627              // 'catch' 'typeswitch'\n       && lk != 131163              // 'catch' 'unordered'\n       && lk != 131675              // 'catch' 'updating'\n       && lk != 133211              // 'catch' 'validate'\n       && lk != 133723              // 'catch' 'value'\n       && lk != 134235              // 'catch' 'variable'\n       && lk != 134747              // 'catch' 'version'\n       && lk != 136283              // 'catch' 'where'\n       && lk != 136795              // 'catch' 'while'\n       && lk != 138331              // 'catch' 'with'\n       && lk != 140379)             // 'catch' 'xquery'\n      {\n        break;\n      }\n    }\n    eventHandler.endNonterminal(\"TryCatchStatement\", e0);\n  }\n\n  function try_TryCatchStatement()\n  {\n    shiftT(250);                    // 'try'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    try_BlockStatement();\n    lookahead1W(36);                // S^WS | '(:' | 'catch'\n    shiftT(91);                     // 'catch'\n    lookahead1W(256);               // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    try_CatchErrorList();\n    try_BlockStatement();\n    for (;;)\n    {\n      lookahead1W(277);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | EOF | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' |\n                                    // '..' | '/' | '//' | ';' | '<' | '<!--' | '<?' | '@' | '[' | 'after' |\n                                    // 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' |\n                                    // 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'first' | 'following' | 'following-sibling' | 'for' |\n                                    // 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' |\n                                    // 'in' | 'index' | 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' |\n                                    // 'is' | 'item' | 'json' | 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' |\n                                    // 'lt' | 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' |\n                                    // 'node' | 'nodes' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'self' | 'sliding' | 'some' | 'stable' | 'start' | 'strict' |\n                                    // 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'try' | 'tumbling' |\n                                    // 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' |\n                                    // 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' | 'xquery' | '{' |\n                                    // '{|' | '}'\n      switch (l1)\n      {\n      case 91:                      // 'catch'\n        lookahead2W(278);           // Wildcard | EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' |\n                                    // '+' | ',' | '-' | '/' | '//' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' |\n                                    // '>>' | '[' | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' |\n                                    // 'append' | 'array' | 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' |\n                                    // 'before' | 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' |\n                                    // 'child' | 'collation' | 'comment' | 'constraint' | 'construction' | 'contains' |\n                                    // 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' |\n                                    // 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'json-item' | 'last' | 'lax' |\n                                    // 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' | 'namespace' |\n                                    // 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' | 'only' | 'option' |\n                                    // 'or' | 'order' | 'ordered' | 'ordering' | 'parent' | 'preceding' |\n                                    // 'preceding-sibling' | 'processing-instruction' | 'rename' | 'replace' |\n                                    // 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '|' | '||' | '}'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 38491               // 'catch' 'and'\n       || lk == 45659               // 'catch' 'cast'\n       || lk == 46171               // 'catch' 'castable'\n       || lk == 60507               // 'catch' 'div'\n       || lk == 65627               // 'catch' 'eq'\n       || lk == 67163               // 'catch' 'except'\n       || lk == 74843               // 'catch' 'ge'\n       || lk == 76891               // 'catch' 'gt'\n       || lk == 77403               // 'catch' 'idiv'\n       || lk == 82011               // 'catch' 'instance'\n       || lk == 83035               // 'catch' 'intersect'\n       || lk == 84059               // 'catch' 'is'\n       || lk == 88155               // 'catch' 'le'\n       || lk == 91227               // 'catch' 'lt'\n       || lk == 92251               // 'catch' 'mod'\n       || lk == 95323               // 'catch' 'ne'\n       || lk == 102491              // 'catch' 'or'\n       || lk == 127067              // 'catch' 'to'\n       || lk == 127579              // 'catch' 'treat'\n       || lk == 130139)             // 'catch' 'union'\n      {\n        lk = memoized(8, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            lookahead1W(36);        // S^WS | '(:' | 'catch'\n            shiftT(91);             // 'catch'\n            lookahead1W(256);       // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n            try_CatchErrorList();\n            try_BlockStatement();\n            memoize(8, e0A, -1);\n            continue;\n          }\n          catch (p1A)\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            memoize(8, e0A, -2);\n            break;\n          }\n        }\n      }\n      if (lk != -1\n       && lk != 2651                // 'catch' Wildcard\n       && lk != 3163                // 'catch' EQName^Token\n       && lk != 35931               // 'catch' 'after'\n       && lk != 36955               // 'catch' 'allowing'\n       && lk != 37467               // 'catch' 'ancestor'\n       && lk != 37979               // 'catch' 'ancestor-or-self'\n       && lk != 39515               // 'catch' 'append'\n       && lk != 40027               // 'catch' 'array'\n       && lk != 40539               // 'catch' 'as'\n       && lk != 41051               // 'catch' 'ascending'\n       && lk != 41563               // 'catch' 'at'\n       && lk != 42075               // 'catch' 'attribute'\n       && lk != 42587               // 'catch' 'base-uri'\n       && lk != 43099               // 'catch' 'before'\n       && lk != 43611               // 'catch' 'boundary-space'\n       && lk != 44123               // 'catch' 'break'\n       && lk != 45147               // 'catch' 'case'\n       && lk != 46683               // 'catch' 'catch'\n       && lk != 47707               // 'catch' 'child'\n       && lk != 48219               // 'catch' 'collation'\n       && lk != 49243               // 'catch' 'comment'\n       && lk != 49755               // 'catch' 'constraint'\n       && lk != 50267               // 'catch' 'construction'\n       && lk != 51803               // 'catch' 'context'\n       && lk != 52315               // 'catch' 'continue'\n       && lk != 52827               // 'catch' 'copy'\n       && lk != 53339               // 'catch' 'copy-namespaces'\n       && lk != 53851               // 'catch' 'count'\n       && lk != 54363               // 'catch' 'decimal-format'\n       && lk != 55387               // 'catch' 'declare'\n       && lk != 55899               // 'catch' 'default'\n       && lk != 56411               // 'catch' 'delete'\n       && lk != 56923               // 'catch' 'descendant'\n       && lk != 57435               // 'catch' 'descendant-or-self'\n       && lk != 57947               // 'catch' 'descending'\n       && lk != 61019               // 'catch' 'document'\n       && lk != 61531               // 'catch' 'document-node'\n       && lk != 62043               // 'catch' 'element'\n       && lk != 62555               // 'catch' 'else'\n       && lk != 63067               // 'catch' 'empty'\n       && lk != 63579               // 'catch' 'empty-sequence'\n       && lk != 64091               // 'catch' 'encoding'\n       && lk != 64603               // 'catch' 'end'\n       && lk != 66139               // 'catch' 'every'\n       && lk != 67675               // 'catch' 'exit'\n       && lk != 68187               // 'catch' 'external'\n       && lk != 68699               // 'catch' 'first'\n       && lk != 69211               // 'catch' 'following'\n       && lk != 69723               // 'catch' 'following-sibling'\n       && lk != 70235               // 'catch' 'for'\n       && lk != 72283               // 'catch' 'ft-option'\n       && lk != 74331               // 'catch' 'function'\n       && lk != 75867               // 'catch' 'group'\n       && lk != 77915               // 'catch' 'if'\n       && lk != 78427               // 'catch' 'import'\n       && lk != 78939               // 'catch' 'in'\n       && lk != 79451               // 'catch' 'index'\n       && lk != 81499               // 'catch' 'insert'\n       && lk != 82523               // 'catch' 'integrity'\n       && lk != 83547               // 'catch' 'into'\n       && lk != 84571               // 'catch' 'item'\n       && lk != 85083               // 'catch' 'json'\n       && lk != 85595               // 'catch' 'json-item'\n       && lk != 87131               // 'catch' 'last'\n       && lk != 87643               // 'catch' 'lax'\n       && lk != 89179               // 'catch' 'let'\n       && lk != 90203               // 'catch' 'loop'\n       && lk != 92763               // 'catch' 'modify'\n       && lk != 93275               // 'catch' 'module'\n       && lk != 94299               // 'catch' 'namespace'\n       && lk != 94811               // 'catch' 'namespace-node'\n       && lk != 97883               // 'catch' 'node'\n       && lk != 98395               // 'catch' 'nodes'\n       && lk != 99419               // 'catch' 'object'\n       && lk != 101467              // 'catch' 'only'\n       && lk != 101979              // 'catch' 'option'\n       && lk != 103003              // 'catch' 'order'\n       && lk != 103515              // 'catch' 'ordered'\n       && lk != 104027              // 'catch' 'ordering'\n       && lk != 105563              // 'catch' 'parent'\n       && lk != 108635              // 'catch' 'preceding'\n       && lk != 109147              // 'catch' 'preceding-sibling'\n       && lk != 110683              // 'catch' 'processing-instruction'\n       && lk != 111707              // 'catch' 'rename'\n       && lk != 112219              // 'catch' 'replace'\n       && lk != 112731              // 'catch' 'return'\n       && lk != 113243              // 'catch' 'returning'\n       && lk != 113755              // 'catch' 'revalidation'\n       && lk != 114779              // 'catch' 'satisfies'\n       && lk != 115291              // 'catch' 'schema'\n       && lk != 115803              // 'catch' 'schema-attribute'\n       && lk != 116315              // 'catch' 'schema-element'\n       && lk != 116827              // 'catch' 'score'\n       && lk != 117339              // 'catch' 'self'\n       && lk != 119899              // 'catch' 'sliding'\n       && lk != 120411              // 'catch' 'some'\n       && lk != 120923              // 'catch' 'stable'\n       && lk != 121435              // 'catch' 'start'\n       && lk != 122971              // 'catch' 'strict'\n       && lk != 123995              // 'catch' 'structured-item'\n       && lk != 124507              // 'catch' 'switch'\n       && lk != 125019              // 'catch' 'text'\n       && lk != 128091              // 'catch' 'try'\n       && lk != 128603              // 'catch' 'tumbling'\n       && lk != 129115              // 'catch' 'type'\n       && lk != 129627              // 'catch' 'typeswitch'\n       && lk != 131163              // 'catch' 'unordered'\n       && lk != 131675              // 'catch' 'updating'\n       && lk != 133211              // 'catch' 'validate'\n       && lk != 133723              // 'catch' 'value'\n       && lk != 134235              // 'catch' 'variable'\n       && lk != 134747              // 'catch' 'version'\n       && lk != 136283              // 'catch' 'where'\n       && lk != 136795              // 'catch' 'while'\n       && lk != 138331              // 'catch' 'with'\n       && lk != 140379)             // 'catch' 'xquery'\n      {\n        break;\n      }\n      lookahead1W(36);              // S^WS | '(:' | 'catch'\n      shiftT(91);                   // 'catch'\n      lookahead1W(256);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n      try_CatchErrorList();\n      try_BlockStatement();\n    }\n  }\n\n  function parse_TypeswitchStatement()\n  {\n    eventHandler.startNonterminal(\"TypeswitchStatement\", e0);\n    shift(253);                     // 'typeswitch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_Expr();\n    shift(37);                      // ')'\n    for (;;)\n    {\n      lookahead1W(35);              // S^WS | '(:' | 'case'\n      whitespace();\n      parse_CaseStatement();\n      lookahead1W(113);             // S^WS | '(:' | 'case' | 'default'\n      if (l1 != 88)                 // 'case'\n      {\n        break;\n      }\n    }\n    shift(109);                     // 'default'\n    lookahead1W(95);                // S^WS | '$' | '(:' | 'return'\n    if (l1 == 31)                   // '$'\n    {\n      shift(31);                    // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n      whitespace();\n      parse_VarName();\n    }\n    lookahead1W(70);                // S^WS | '(:' | 'return'\n    shift(220);                     // 'return'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | ';' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"TypeswitchStatement\", e0);\n  }\n\n  function try_TypeswitchStatement()\n  {\n    shiftT(253);                    // 'typeswitch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_Expr();\n    shiftT(37);                     // ')'\n    for (;;)\n    {\n      lookahead1W(35);              // S^WS | '(:' | 'case'\n      try_CaseStatement();\n      lookahead1W(113);             // S^WS | '(:' | 'case' | 'default'\n      if (l1 != 88)                 // 'case'\n      {\n        break;\n      }\n    }\n    shiftT(109);                    // 'default'\n    lookahead1W(95);                // S^WS | '$' | '(:' | 'return'\n    if (l1 == 31)                   // '$'\n    {\n      shiftT(31);                   // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n      try_VarName();\n    }\n    lookahead1W(70);                // S^WS | '(:' | 'return'\n    shiftT(220);                    // 'return'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | ';' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_Statement();\n  }\n\n  function parse_CaseStatement()\n  {\n    eventHandler.startNonterminal(\"CaseStatement\", e0);\n    shift(88);                      // 'case'\n    lookahead1W(261);               // EQName^Token | S^WS | '$' | '%' | '(' | '(:' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    if (l1 == 31)                   // '$'\n    {\n      shift(31);                    // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n      whitespace();\n      parse_VarName();\n      lookahead1W(30);              // S^WS | '(:' | 'as'\n      shift(79);                    // 'as'\n    }\n    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    whitespace();\n    parse_SequenceType();\n    lookahead1W(70);                // S^WS | '(:' | 'return'\n    shift(220);                     // 'return'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | ';' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"CaseStatement\", e0);\n  }\n\n  function try_CaseStatement()\n  {\n    shiftT(88);                     // 'case'\n    lookahead1W(261);               // EQName^Token | S^WS | '$' | '%' | '(' | '(:' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    if (l1 == 31)                   // '$'\n    {\n      shiftT(31);                   // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n      try_VarName();\n      lookahead1W(30);              // S^WS | '(:' | 'as'\n      shiftT(79);                   // 'as'\n    }\n    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    try_SequenceType();\n    lookahead1W(70);                // S^WS | '(:' | 'return'\n    shiftT(220);                    // 'return'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | ';' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_Statement();\n  }\n\n  function parse_VarDeclStatement()\n  {\n    eventHandler.startNonterminal(\"VarDeclStatement\", e0);\n    for (;;)\n    {\n      lookahead1W(98);              // S^WS | '%' | '(:' | 'variable'\n      if (l1 != 32)                 // '%'\n      {\n        break;\n      }\n      whitespace();\n      parse_Annotation();\n    }\n    shift(262);                     // 'variable'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    whitespace();\n    parse_VarName();\n    lookahead1W(157);               // S^WS | '(:' | ',' | ':=' | ';' | 'as'\n    if (l1 == 79)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    lookahead1W(145);               // S^WS | '(:' | ',' | ':=' | ';'\n    if (l1 == 52)                   // ':='\n    {\n      shift(52);                    // ':='\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      whitespace();\n      parse_ExprSingle();\n    }\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shift(41);                    // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      shift(31);                    // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n      whitespace();\n      parse_VarName();\n      lookahead1W(157);             // S^WS | '(:' | ',' | ':=' | ';' | 'as'\n      if (l1 == 79)                 // 'as'\n      {\n        whitespace();\n        parse_TypeDeclaration();\n      }\n      lookahead1W(145);             // S^WS | '(:' | ',' | ':=' | ';'\n      if (l1 == 52)                 // ':='\n      {\n        shift(52);                  // ':='\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n        whitespace();\n        parse_ExprSingle();\n      }\n    }\n    shift(53);                      // ';'\n    eventHandler.endNonterminal(\"VarDeclStatement\", e0);\n  }\n\n  function try_VarDeclStatement()\n  {\n    for (;;)\n    {\n      lookahead1W(98);              // S^WS | '%' | '(:' | 'variable'\n      if (l1 != 32)                 // '%'\n      {\n        break;\n      }\n      try_Annotation();\n    }\n    shiftT(262);                    // 'variable'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    try_VarName();\n    lookahead1W(157);               // S^WS | '(:' | ',' | ':=' | ';' | 'as'\n    if (l1 == 79)                   // 'as'\n    {\n      try_TypeDeclaration();\n    }\n    lookahead1W(145);               // S^WS | '(:' | ',' | ':=' | ';'\n    if (l1 == 52)                   // ':='\n    {\n      shiftT(52);                   // ':='\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      try_ExprSingle();\n    }\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shiftT(41);                   // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      shiftT(31);                   // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n      try_VarName();\n      lookahead1W(157);             // S^WS | '(:' | ',' | ':=' | ';' | 'as'\n      if (l1 == 79)                 // 'as'\n      {\n        try_TypeDeclaration();\n      }\n      lookahead1W(145);             // S^WS | '(:' | ',' | ':=' | ';'\n      if (l1 == 52)                 // ':='\n      {\n        shiftT(52);                 // ':='\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n        try_ExprSingle();\n      }\n    }\n    shiftT(53);                     // ';'\n  }\n\n  function parse_WhileStatement()\n  {\n    eventHandler.startNonterminal(\"WhileStatement\", e0);\n    shift(267);                     // 'while'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_Expr();\n    shift(37);                      // ')'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | ';' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"WhileStatement\", e0);\n  }\n\n  function try_WhileStatement()\n  {\n    shiftT(267);                    // 'while'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_Expr();\n    shiftT(37);                     // ')'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | ';' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_Statement();\n  }\n\n  function parse_VoidStatement()\n  {\n    eventHandler.startNonterminal(\"VoidStatement\", e0);\n    shift(53);                      // ';'\n    eventHandler.endNonterminal(\"VoidStatement\", e0);\n  }\n\n  function try_VoidStatement()\n  {\n    shiftT(53);                     // ';'\n  }\n\n  function parse_ExprSingle()\n  {\n    eventHandler.startNonterminal(\"ExprSingle\", e0);\n    switch (l1)\n    {\n    case 137:                       // 'for'\n      lookahead2W(235);             // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' |\n                                    // '/' | '//' | ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' |\n                                    // ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'return' | 'satisfies' |\n                                    // 'sliding' | 'stable' | 'start' | 'to' | 'treat' | 'tumbling' | 'union' |\n                                    // 'where' | 'with' | '|' | '||' | '|}' | '}'\n      break;\n    case 174:                       // 'let'\n      lookahead2W(232);             // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' |\n                                    // '/' | '//' | ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' |\n                                    // ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'return' | 'satisfies' |\n                                    // 'score' | 'stable' | 'start' | 'to' | 'treat' | 'union' | 'where' | 'with' |\n                                    // '|' | '||' | '|}' | '}'\n      break;\n    case 250:                       // 'try'\n      lookahead2W(231);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n                                    // '//' | ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' |\n                                    // 'after' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'return' | 'satisfies' |\n                                    // 'stable' | 'start' | 'to' | 'treat' | 'union' | 'where' | 'with' | '{' | '|' |\n                                    // '||' | '|}' | '}'\n      break;\n    case 152:                       // 'if'\n    case 243:                       // 'switch'\n    case 253:                       // 'typeswitch'\n      lookahead2W(228);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n                                    // '//' | ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' |\n                                    // 'after' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'return' | 'satisfies' |\n                                    // 'stable' | 'start' | 'to' | 'treat' | 'union' | 'where' | 'with' | '|' | '||' |\n                                    // '|}' | '}'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 16009:                     // 'for' '$'\n    case 16046:                     // 'let' '$'\n    case 116910:                    // 'let' 'score'\n    case 119945:                    // 'for' 'sliding'\n    case 128649:                    // 'for' 'tumbling'\n      parse_FLWORExpr();\n      break;\n    case 17560:                     // 'if' '('\n      parse_IfExpr();\n      break;\n    case 17651:                     // 'switch' '('\n      parse_SwitchExpr();\n      break;\n    case 141562:                    // 'try' '{'\n      parse_TryCatchExpr();\n      break;\n    case 17661:                     // 'typeswitch' '('\n      parse_TypeswitchExpr();\n      break;\n    default:\n      parse_ExprSimple();\n    }\n    eventHandler.endNonterminal(\"ExprSingle\", e0);\n  }\n\n  function try_ExprSingle()\n  {\n    switch (l1)\n    {\n    case 137:                       // 'for'\n      lookahead2W(235);             // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' |\n                                    // '/' | '//' | ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' |\n                                    // ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'return' | 'satisfies' |\n                                    // 'sliding' | 'stable' | 'start' | 'to' | 'treat' | 'tumbling' | 'union' |\n                                    // 'where' | 'with' | '|' | '||' | '|}' | '}'\n      break;\n    case 174:                       // 'let'\n      lookahead2W(232);             // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' |\n                                    // '/' | '//' | ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' |\n                                    // ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'return' | 'satisfies' |\n                                    // 'score' | 'stable' | 'start' | 'to' | 'treat' | 'union' | 'where' | 'with' |\n                                    // '|' | '||' | '|}' | '}'\n      break;\n    case 250:                       // 'try'\n      lookahead2W(231);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n                                    // '//' | ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' |\n                                    // 'after' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'return' | 'satisfies' |\n                                    // 'stable' | 'start' | 'to' | 'treat' | 'union' | 'where' | 'with' | '{' | '|' |\n                                    // '||' | '|}' | '}'\n      break;\n    case 152:                       // 'if'\n    case 243:                       // 'switch'\n    case 253:                       // 'typeswitch'\n      lookahead2W(228);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n                                    // '//' | ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' |\n                                    // 'after' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'return' | 'satisfies' |\n                                    // 'stable' | 'start' | 'to' | 'treat' | 'union' | 'where' | 'with' | '|' | '||' |\n                                    // '|}' | '}'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 16009:                     // 'for' '$'\n    case 16046:                     // 'let' '$'\n    case 116910:                    // 'let' 'score'\n    case 119945:                    // 'for' 'sliding'\n    case 128649:                    // 'for' 'tumbling'\n      try_FLWORExpr();\n      break;\n    case 17560:                     // 'if' '('\n      try_IfExpr();\n      break;\n    case 17651:                     // 'switch' '('\n      try_SwitchExpr();\n      break;\n    case 141562:                    // 'try' '{'\n      try_TryCatchExpr();\n      break;\n    case 17661:                     // 'typeswitch' '('\n      try_TypeswitchExpr();\n      break;\n    default:\n      try_ExprSimple();\n    }\n  }\n\n  function parse_ExprSimple()\n  {\n    eventHandler.startNonterminal(\"ExprSimple\", e0);\n    switch (l1)\n    {\n    case 77:                        // 'append'\n      lookahead2W(230);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n                                    // '//' | ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' |\n                                    // 'after' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'json' | 'le' |\n                                    // 'let' | 'lt' | 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'return' |\n                                    // 'satisfies' | 'stable' | 'start' | 'to' | 'treat' | 'union' | 'where' | 'with' |\n                                    // '|' | '||' | '|}' | '}'\n      break;\n    case 218:                       // 'rename'\n      lookahead2W(233);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n                                    // '//' | ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' |\n                                    // 'after' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'json' | 'le' |\n                                    // 'let' | 'lt' | 'mod' | 'modify' | 'ne' | 'node' | 'only' | 'or' | 'order' |\n                                    // 'return' | 'satisfies' | 'stable' | 'start' | 'to' | 'treat' | 'union' |\n                                    // 'where' | 'with' | '|' | '||' | '|}' | '}'\n      break;\n    case 219:                       // 'replace'\n      lookahead2W(234);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n                                    // '//' | ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' |\n                                    // 'after' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'node' | 'only' | 'or' | 'order' | 'return' |\n                                    // 'satisfies' | 'stable' | 'start' | 'to' | 'treat' | 'union' | 'value' | 'where' |\n                                    // 'with' | '|' | '||' | '|}' | '}'\n      break;\n    case 110:                       // 'delete'\n    case 159:                       // 'insert'\n      lookahead2W(236);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n                                    // '//' | ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' |\n                                    // 'after' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'json' | 'le' |\n                                    // 'let' | 'lt' | 'mod' | 'modify' | 'ne' | 'node' | 'nodes' | 'only' | 'or' |\n                                    // 'order' | 'return' | 'satisfies' | 'stable' | 'start' | 'to' | 'treat' |\n                                    // 'union' | 'where' | 'with' | '|' | '||' | '|}' | '}'\n      break;\n    case 103:                       // 'copy'\n    case 129:                       // 'every'\n    case 235:                       // 'some'\n      lookahead2W(229);             // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' |\n                                    // '/' | '//' | ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' |\n                                    // ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'return' | 'satisfies' |\n                                    // 'stable' | 'start' | 'to' | 'treat' | 'union' | 'where' | 'with' | '|' | '||' |\n                                    // '|}' | '}'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 133851)               // 'replace' 'value'\n    {\n      lk = memoized(9, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_ReplaceExpr();\n          lk = -6;\n        }\n        catch (p6A)\n        {\n          lk = -11;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(9, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case 16001:                     // 'every' '$'\n    case 16107:                     // 'some' '$'\n      parse_QuantifiedExpr();\n      break;\n    case 97951:                     // 'insert' 'node'\n    case 98463:                     // 'insert' 'nodes'\n      parse_InsertExpr();\n      break;\n    case 97902:                     // 'delete' 'node'\n    case 98414:                     // 'delete' 'nodes'\n      parse_DeleteExpr();\n      break;\n    case 98010:                     // 'rename' 'node'\n      parse_RenameExpr();\n      break;\n    case -6:\n    case 98011:                     // 'replace' 'node'\n      parse_ReplaceExpr();\n      break;\n    case 15975:                     // 'copy' '$'\n      parse_TransformExpr();\n      break;\n    case 85102:                     // 'delete' 'json'\n      parse_JSONDeleteExpr();\n      break;\n    case 85151:                     // 'insert' 'json'\n      parse_JSONInsertExpr();\n      break;\n    case 85210:                     // 'rename' 'json'\n      parse_JSONRenameExpr();\n      break;\n    case -11:\n      parse_JSONReplaceExpr();\n      break;\n    case 85069:                     // 'append' 'json'\n      parse_JSONAppendExpr();\n      break;\n    default:\n      parse_OrExpr();\n    }\n    eventHandler.endNonterminal(\"ExprSimple\", e0);\n  }\n\n  function try_ExprSimple()\n  {\n    switch (l1)\n    {\n    case 77:                        // 'append'\n      lookahead2W(230);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n                                    // '//' | ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' |\n                                    // 'after' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'json' | 'le' |\n                                    // 'let' | 'lt' | 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'return' |\n                                    // 'satisfies' | 'stable' | 'start' | 'to' | 'treat' | 'union' | 'where' | 'with' |\n                                    // '|' | '||' | '|}' | '}'\n      break;\n    case 218:                       // 'rename'\n      lookahead2W(233);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n                                    // '//' | ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' |\n                                    // 'after' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'json' | 'le' |\n                                    // 'let' | 'lt' | 'mod' | 'modify' | 'ne' | 'node' | 'only' | 'or' | 'order' |\n                                    // 'return' | 'satisfies' | 'stable' | 'start' | 'to' | 'treat' | 'union' |\n                                    // 'where' | 'with' | '|' | '||' | '|}' | '}'\n      break;\n    case 219:                       // 'replace'\n      lookahead2W(234);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n                                    // '//' | ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' |\n                                    // 'after' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'node' | 'only' | 'or' | 'order' | 'return' |\n                                    // 'satisfies' | 'stable' | 'start' | 'to' | 'treat' | 'union' | 'value' | 'where' |\n                                    // 'with' | '|' | '||' | '|}' | '}'\n      break;\n    case 110:                       // 'delete'\n    case 159:                       // 'insert'\n      lookahead2W(236);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n                                    // '//' | ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' | ']' |\n                                    // 'after' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'json' | 'le' |\n                                    // 'let' | 'lt' | 'mod' | 'modify' | 'ne' | 'node' | 'nodes' | 'only' | 'or' |\n                                    // 'order' | 'return' | 'satisfies' | 'stable' | 'start' | 'to' | 'treat' |\n                                    // 'union' | 'where' | 'with' | '|' | '||' | '|}' | '}'\n      break;\n    case 103:                       // 'copy'\n    case 129:                       // 'every'\n    case 235:                       // 'some'\n      lookahead2W(229);             // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' |\n                                    // '/' | '//' | ':' | ';' | '<' | '<<' | '<=' | '=' | '>' | '>=' | '>>' | '[' |\n                                    // ']' | 'after' | 'and' | 'as' | 'ascending' | 'at' | 'before' | 'case' | 'cast' |\n                                    // 'castable' | 'collation' | 'contains' | 'count' | 'default' | 'descending' |\n                                    // 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' |\n                                    // 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' |\n                                    // 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'return' | 'satisfies' |\n                                    // 'stable' | 'start' | 'to' | 'treat' | 'union' | 'where' | 'with' | '|' | '||' |\n                                    // '|}' | '}'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 133851)               // 'replace' 'value'\n    {\n      lk = memoized(9, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_ReplaceExpr();\n          memoize(9, e0A, -6);\n          lk = -13;\n        }\n        catch (p6A)\n        {\n          lk = -11;\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(9, e0A, -11);\n        }\n      }\n    }\n    switch (lk)\n    {\n    case 16001:                     // 'every' '$'\n    case 16107:                     // 'some' '$'\n      try_QuantifiedExpr();\n      break;\n    case 97951:                     // 'insert' 'node'\n    case 98463:                     // 'insert' 'nodes'\n      try_InsertExpr();\n      break;\n    case 97902:                     // 'delete' 'node'\n    case 98414:                     // 'delete' 'nodes'\n      try_DeleteExpr();\n      break;\n    case 98010:                     // 'rename' 'node'\n      try_RenameExpr();\n      break;\n    case -6:\n    case 98011:                     // 'replace' 'node'\n      try_ReplaceExpr();\n      break;\n    case 15975:                     // 'copy' '$'\n      try_TransformExpr();\n      break;\n    case 85102:                     // 'delete' 'json'\n      try_JSONDeleteExpr();\n      break;\n    case 85151:                     // 'insert' 'json'\n      try_JSONInsertExpr();\n      break;\n    case 85210:                     // 'rename' 'json'\n      try_JSONRenameExpr();\n      break;\n    case -11:\n      try_JSONReplaceExpr();\n      break;\n    case 85069:                     // 'append' 'json'\n      try_JSONAppendExpr();\n      break;\n    case -13:\n      break;\n    default:\n      try_OrExpr();\n    }\n  }\n\n  function parse_JSONDeleteExpr()\n  {\n    eventHandler.startNonterminal(\"JSONDeleteExpr\", e0);\n    shift(110);                     // 'delete'\n    lookahead1W(56);                // S^WS | '(:' | 'json'\n    shift(166);                     // 'json'\n    lookahead1W(263);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '%' | '(' | '(:' | '.' | '<' | '<!--' | '<?' | '[' | 'after' |\n                                    // 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' |\n                                    // 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'first' | 'following' | 'following-sibling' | 'for' |\n                                    // 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' |\n                                    // 'in' | 'index' | 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' |\n                                    // 'is' | 'item' | 'json' | 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' |\n                                    // 'lt' | 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' |\n                                    // 'node' | 'nodes' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'self' | 'sliding' | 'some' | 'stable' | 'start' | 'strict' |\n                                    // 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'try' | 'tumbling' |\n                                    // 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' |\n                                    // 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' | 'xquery' | '{' |\n                                    // '{|'\n    whitespace();\n    parse_PostfixExpr();\n    eventHandler.endNonterminal(\"JSONDeleteExpr\", e0);\n  }\n\n  function try_JSONDeleteExpr()\n  {\n    shiftT(110);                    // 'delete'\n    lookahead1W(56);                // S^WS | '(:' | 'json'\n    shiftT(166);                    // 'json'\n    lookahead1W(263);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '%' | '(' | '(:' | '.' | '<' | '<!--' | '<?' | '[' | 'after' |\n                                    // 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' |\n                                    // 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'first' | 'following' | 'following-sibling' | 'for' |\n                                    // 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' |\n                                    // 'in' | 'index' | 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' |\n                                    // 'is' | 'item' | 'json' | 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' |\n                                    // 'lt' | 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' |\n                                    // 'node' | 'nodes' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'self' | 'sliding' | 'some' | 'stable' | 'start' | 'strict' |\n                                    // 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'try' | 'tumbling' |\n                                    // 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' |\n                                    // 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' | 'xquery' | '{' |\n                                    // '{|'\n    try_PostfixExpr();\n  }\n\n  function parse_JSONInsertExpr()\n  {\n    eventHandler.startNonterminal(\"JSONInsertExpr\", e0);\n    switch (l1)\n    {\n    case 159:                       // 'insert'\n      lookahead2W(56);              // S^WS | '(:' | 'json'\n      break;\n    default:\n      lk = l1;\n    }\n    lk = memoized(10, e0);\n    if (lk == 0)\n    {\n      var b0A = b0; var e0A = e0; var l1A = l1;\n      var b1A = b1; var e1A = e1; var l2A = l2;\n      var b2A = b2; var e2A = e2;\n      try\n      {\n        shiftT(159);                // 'insert'\n        lookahead1W(56);            // S^WS | '(:' | 'json'\n        shiftT(166);                // 'json'\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n        try_ExprSingle();\n        shiftT(163);                // 'into'\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n        try_ExprSingle();\n        switch (l1)\n        {\n        case 81:                    // 'at'\n          lookahead2W(69);          // S^WS | '(:' | 'position'\n          break;\n        default:\n          lk = l1;\n        }\n        if (lk == 108113)           // 'at' 'position'\n        {\n          lk = memoized(11, e0);\n          if (lk == 0)\n          {\n            var b0B = b0; var e0B = e0; var l1B = l1;\n            var b1B = b1; var e1B = e1; var l2B = l2;\n            var b2B = b2; var e2B = e2;\n            try\n            {\n              shiftT(81);           // 'at'\n              lookahead1W(69);      // S^WS | '(:' | 'position'\n              shiftT(211);          // 'position'\n              lookahead1W(266);     // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n              try_ExprSingle();\n              memoize(11, e0B, -1);\n            }\n            catch (p1B)\n            {\n              b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n              b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n              b2 = b2B; e2 = e2B; end = e2B; }}\n              memoize(11, e0B, -2);\n            }\n            lk = -2;\n          }\n        }\n        if (lk == -1)\n        {\n          shiftT(81);               // 'at'\n          lookahead1W(69);          // S^WS | '(:' | 'position'\n          shiftT(211);              // 'position'\n          lookahead1W(266);         // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n          try_ExprSingle();\n        }\n        lk = -1;\n      }\n      catch (p1A)\n      {\n        lk = -2;\n      }\n      b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n      b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n      b2 = b2A; e2 = e2A; end = e2A; }}\n      memoize(10, e0, lk);\n    }\n    switch (lk)\n    {\n    case -1:\n      shift(159);                   // 'insert'\n      lookahead1W(56);              // S^WS | '(:' | 'json'\n      shift(166);                   // 'json'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      whitespace();\n      parse_ExprSingle();\n      shift(163);                   // 'into'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      whitespace();\n      parse_ExprSingle();\n      switch (l1)\n      {\n      case 81:                      // 'at'\n        lookahead2W(69);            // S^WS | '(:' | 'position'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 108113)             // 'at' 'position'\n      {\n        lk = memoized(11, e0);\n        if (lk == 0)\n        {\n          var b0B = b0; var e0B = e0; var l1B = l1;\n          var b1B = b1; var e1B = e1; var l2B = l2;\n          var b2B = b2; var e2B = e2;\n          try\n          {\n            shiftT(81);             // 'at'\n            lookahead1W(69);        // S^WS | '(:' | 'position'\n            shiftT(211);            // 'position'\n            lookahead1W(266);       // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n            try_ExprSingle();\n            lk = -1;\n          }\n          catch (p1B)\n          {\n            lk = -2;\n          }\n          b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n          b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n          b2 = b2B; e2 = e2B; end = e2B; }}\n          memoize(11, e0, lk);\n        }\n      }\n      if (lk == -1)\n      {\n        shift(81);                  // 'at'\n        lookahead1W(69);            // S^WS | '(:' | 'position'\n        shift(211);                 // 'position'\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n        whitespace();\n        parse_ExprSingle();\n      }\n      break;\n    default:\n      shift(159);                   // 'insert'\n      lookahead1W(56);              // S^WS | '(:' | 'json'\n      shift(166);                   // 'json'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      whitespace();\n      parse_PairConstructorList();\n      shift(163);                   // 'into'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      whitespace();\n      parse_ExprSingle();\n    }\n    eventHandler.endNonterminal(\"JSONInsertExpr\", e0);\n  }\n\n  function try_JSONInsertExpr()\n  {\n    switch (l1)\n    {\n    case 159:                       // 'insert'\n      lookahead2W(56);              // S^WS | '(:' | 'json'\n      break;\n    default:\n      lk = l1;\n    }\n    lk = memoized(10, e0);\n    if (lk == 0)\n    {\n      var b0A = b0; var e0A = e0; var l1A = l1;\n      var b1A = b1; var e1A = e1; var l2A = l2;\n      var b2A = b2; var e2A = e2;\n      try\n      {\n        shiftT(159);                // 'insert'\n        lookahead1W(56);            // S^WS | '(:' | 'json'\n        shiftT(166);                // 'json'\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n        try_ExprSingle();\n        shiftT(163);                // 'into'\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n        try_ExprSingle();\n        switch (l1)\n        {\n        case 81:                    // 'at'\n          lookahead2W(69);          // S^WS | '(:' | 'position'\n          break;\n        default:\n          lk = l1;\n        }\n        if (lk == 108113)           // 'at' 'position'\n        {\n          lk = memoized(11, e0);\n          if (lk == 0)\n          {\n            var b0B = b0; var e0B = e0; var l1B = l1;\n            var b1B = b1; var e1B = e1; var l2B = l2;\n            var b2B = b2; var e2B = e2;\n            try\n            {\n              shiftT(81);           // 'at'\n              lookahead1W(69);      // S^WS | '(:' | 'position'\n              shiftT(211);          // 'position'\n              lookahead1W(266);     // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n              try_ExprSingle();\n              memoize(11, e0B, -1);\n            }\n            catch (p1B)\n            {\n              b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n              b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n              b2 = b2B; e2 = e2B; end = e2B; }}\n              memoize(11, e0B, -2);\n            }\n            lk = -2;\n          }\n        }\n        if (lk == -1)\n        {\n          shiftT(81);               // 'at'\n          lookahead1W(69);          // S^WS | '(:' | 'position'\n          shiftT(211);              // 'position'\n          lookahead1W(266);         // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n          try_ExprSingle();\n        }\n        memoize(10, e0A, -1);\n        lk = -3;\n      }\n      catch (p1A)\n      {\n        lk = -2;\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(10, e0A, -2);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      shiftT(159);                  // 'insert'\n      lookahead1W(56);              // S^WS | '(:' | 'json'\n      shiftT(166);                  // 'json'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      try_ExprSingle();\n      shiftT(163);                  // 'into'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      try_ExprSingle();\n      switch (l1)\n      {\n      case 81:                      // 'at'\n        lookahead2W(69);            // S^WS | '(:' | 'position'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 108113)             // 'at' 'position'\n      {\n        lk = memoized(11, e0);\n        if (lk == 0)\n        {\n          var b0B = b0; var e0B = e0; var l1B = l1;\n          var b1B = b1; var e1B = e1; var l2B = l2;\n          var b2B = b2; var e2B = e2;\n          try\n          {\n            shiftT(81);             // 'at'\n            lookahead1W(69);        // S^WS | '(:' | 'position'\n            shiftT(211);            // 'position'\n            lookahead1W(266);       // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n            try_ExprSingle();\n            memoize(11, e0B, -1);\n          }\n          catch (p1B)\n          {\n            b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n            b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n            b2 = b2B; e2 = e2B; end = e2B; }}\n            memoize(11, e0B, -2);\n          }\n          lk = -2;\n        }\n      }\n      if (lk == -1)\n      {\n        shiftT(81);                 // 'at'\n        lookahead1W(69);            // S^WS | '(:' | 'position'\n        shiftT(211);                // 'position'\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n        try_ExprSingle();\n      }\n      break;\n    case -3:\n      break;\n    default:\n      shiftT(159);                  // 'insert'\n      lookahead1W(56);              // S^WS | '(:' | 'json'\n      shiftT(166);                  // 'json'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      try_PairConstructorList();\n      shiftT(163);                  // 'into'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      try_ExprSingle();\n    }\n  }\n\n  function parse_JSONRenameExpr()\n  {\n    eventHandler.startNonterminal(\"JSONRenameExpr\", e0);\n    shift(218);                     // 'rename'\n    lookahead1W(56);                // S^WS | '(:' | 'json'\n    shift(166);                     // 'json'\n    lookahead1W(263);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '%' | '(' | '(:' | '.' | '<' | '<!--' | '<?' | '[' | 'after' |\n                                    // 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' |\n                                    // 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'first' | 'following' | 'following-sibling' | 'for' |\n                                    // 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' |\n                                    // 'in' | 'index' | 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' |\n                                    // 'is' | 'item' | 'json' | 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' |\n                                    // 'lt' | 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' |\n                                    // 'node' | 'nodes' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'self' | 'sliding' | 'some' | 'stable' | 'start' | 'strict' |\n                                    // 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'try' | 'tumbling' |\n                                    // 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' |\n                                    // 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' | 'xquery' | '{' |\n                                    // '{|'\n    whitespace();\n    parse_PostfixExpr();\n    shift(79);                      // 'as'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"JSONRenameExpr\", e0);\n  }\n\n  function try_JSONRenameExpr()\n  {\n    shiftT(218);                    // 'rename'\n    lookahead1W(56);                // S^WS | '(:' | 'json'\n    shiftT(166);                    // 'json'\n    lookahead1W(263);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '%' | '(' | '(:' | '.' | '<' | '<!--' | '<?' | '[' | 'after' |\n                                    // 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' |\n                                    // 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'first' | 'following' | 'following-sibling' | 'for' |\n                                    // 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' |\n                                    // 'in' | 'index' | 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' |\n                                    // 'is' | 'item' | 'json' | 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' |\n                                    // 'lt' | 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' |\n                                    // 'node' | 'nodes' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'self' | 'sliding' | 'some' | 'stable' | 'start' | 'strict' |\n                                    // 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'try' | 'tumbling' |\n                                    // 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' |\n                                    // 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' | 'xquery' | '{' |\n                                    // '{|'\n    try_PostfixExpr();\n    shiftT(79);                     // 'as'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_ExprSingle();\n  }\n\n  function parse_JSONReplaceExpr()\n  {\n    eventHandler.startNonterminal(\"JSONReplaceExpr\", e0);\n    shift(219);                     // 'replace'\n    lookahead1W(82);                // S^WS | '(:' | 'value'\n    shift(261);                     // 'value'\n    lookahead1W(64);                // S^WS | '(:' | 'of'\n    shift(196);                     // 'of'\n    lookahead1W(56);                // S^WS | '(:' | 'json'\n    shift(166);                     // 'json'\n    lookahead1W(263);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '%' | '(' | '(:' | '.' | '<' | '<!--' | '<?' | '[' | 'after' |\n                                    // 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' |\n                                    // 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'first' | 'following' | 'following-sibling' | 'for' |\n                                    // 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' |\n                                    // 'in' | 'index' | 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' |\n                                    // 'is' | 'item' | 'json' | 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' |\n                                    // 'lt' | 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' |\n                                    // 'node' | 'nodes' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'self' | 'sliding' | 'some' | 'stable' | 'start' | 'strict' |\n                                    // 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'try' | 'tumbling' |\n                                    // 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' |\n                                    // 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' | 'xquery' | '{' |\n                                    // '{|'\n    whitespace();\n    parse_PostfixExpr();\n    shift(270);                     // 'with'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"JSONReplaceExpr\", e0);\n  }\n\n  function try_JSONReplaceExpr()\n  {\n    shiftT(219);                    // 'replace'\n    lookahead1W(82);                // S^WS | '(:' | 'value'\n    shiftT(261);                    // 'value'\n    lookahead1W(64);                // S^WS | '(:' | 'of'\n    shiftT(196);                    // 'of'\n    lookahead1W(56);                // S^WS | '(:' | 'json'\n    shiftT(166);                    // 'json'\n    lookahead1W(263);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                                    // S^WS | '$' | '%' | '(' | '(:' | '.' | '<' | '<!--' | '<?' | '[' | 'after' |\n                                    // 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' |\n                                    // 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'first' | 'following' | 'following-sibling' | 'for' |\n                                    // 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' |\n                                    // 'in' | 'index' | 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' |\n                                    // 'is' | 'item' | 'json' | 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' |\n                                    // 'lt' | 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' |\n                                    // 'node' | 'nodes' | 'object' | 'only' | 'option' | 'or' | 'order' | 'ordered' |\n                                    // 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'self' | 'sliding' | 'some' | 'stable' | 'start' | 'strict' |\n                                    // 'structured-item' | 'switch' | 'text' | 'to' | 'treat' | 'try' | 'tumbling' |\n                                    // 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' | 'validate' |\n                                    // 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' | 'xquery' | '{' |\n                                    // '{|'\n    try_PostfixExpr();\n    shiftT(270);                    // 'with'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_ExprSingle();\n  }\n\n  function parse_JSONAppendExpr()\n  {\n    eventHandler.startNonterminal(\"JSONAppendExpr\", e0);\n    shift(77);                      // 'append'\n    lookahead1W(56);                // S^WS | '(:' | 'json'\n    shift(166);                     // 'json'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    shift(163);                     // 'into'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"JSONAppendExpr\", e0);\n  }\n\n  function try_JSONAppendExpr()\n  {\n    shiftT(77);                     // 'append'\n    lookahead1W(56);                // S^WS | '(:' | 'json'\n    shiftT(166);                    // 'json'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_ExprSingle();\n    shiftT(163);                    // 'into'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_ExprSingle();\n  }\n\n  function parse_CommonContent()\n  {\n    eventHandler.startNonterminal(\"CommonContent\", e0);\n    switch (l1)\n    {\n    case 12:                        // PredefinedEntityRef\n      shift(12);                    // PredefinedEntityRef\n      break;\n    case 23:                        // CharRef\n      shift(23);                    // CharRef\n      break;\n    case 277:                       // '{{'\n      shift(277);                   // '{{'\n      break;\n    case 283:                       // '}}'\n      shift(283);                   // '}}'\n      break;\n    default:\n      parse_BlockExpr();\n    }\n    eventHandler.endNonterminal(\"CommonContent\", e0);\n  }\n\n  function try_CommonContent()\n  {\n    switch (l1)\n    {\n    case 12:                        // PredefinedEntityRef\n      shiftT(12);                   // PredefinedEntityRef\n      break;\n    case 23:                        // CharRef\n      shiftT(23);                   // CharRef\n      break;\n    case 277:                       // '{{'\n      shiftT(277);                  // '{{'\n      break;\n    case 283:                       // '}}'\n      shiftT(283);                  // '}}'\n      break;\n    default:\n      try_BlockExpr();\n    }\n  }\n\n  function parse_ContentExpr()\n  {\n    eventHandler.startNonterminal(\"ContentExpr\", e0);\n    parse_StatementsAndExpr();\n    eventHandler.endNonterminal(\"ContentExpr\", e0);\n  }\n\n  function try_ContentExpr()\n  {\n    try_StatementsAndExpr();\n  }\n\n  function parse_CompDocConstructor()\n  {\n    eventHandler.startNonterminal(\"CompDocConstructor\", e0);\n    shift(119);                     // 'document'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    whitespace();\n    parse_BlockExpr();\n    eventHandler.endNonterminal(\"CompDocConstructor\", e0);\n  }\n\n  function try_CompDocConstructor()\n  {\n    shiftT(119);                    // 'document'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    try_BlockExpr();\n  }\n\n  function parse_CompAttrConstructor()\n  {\n    eventHandler.startNonterminal(\"CompAttrConstructor\", e0);\n    shift(82);                      // 'attribute'\n    lookahead1W(257);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{'\n    switch (l1)\n    {\n    case 276:                       // '{'\n      shift(276);                   // '{'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      whitespace();\n      parse_Expr();\n      shift(282);                   // '}'\n      break;\n    default:\n      whitespace();\n      parse_EQName();\n    }\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    switch (l1)\n    {\n    case 276:                       // '{'\n      lookahead2W(276);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | ';' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|' | '}'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 144660)               // '{' '}'\n    {\n      lk = memoized(12, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(276);              // '{'\n          lookahead1W(88);          // S^WS | '(:' | '}'\n          shiftT(282);              // '}'\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(12, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      shift(276);                   // '{'\n      lookahead1W(88);              // S^WS | '(:' | '}'\n      shift(282);                   // '}'\n      break;\n    default:\n      whitespace();\n      parse_BlockExpr();\n    }\n    eventHandler.endNonterminal(\"CompAttrConstructor\", e0);\n  }\n\n  function try_CompAttrConstructor()\n  {\n    shiftT(82);                     // 'attribute'\n    lookahead1W(257);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{'\n    switch (l1)\n    {\n    case 276:                       // '{'\n      shiftT(276);                  // '{'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      try_Expr();\n      shiftT(282);                  // '}'\n      break;\n    default:\n      try_EQName();\n    }\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    switch (l1)\n    {\n    case 276:                       // '{'\n      lookahead2W(276);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | ';' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|' | '}'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 144660)               // '{' '}'\n    {\n      lk = memoized(12, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(276);              // '{'\n          lookahead1W(88);          // S^WS | '(:' | '}'\n          shiftT(282);              // '}'\n          memoize(12, e0A, -1);\n          lk = -3;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(12, e0A, -2);\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      shiftT(276);                  // '{'\n      lookahead1W(88);              // S^WS | '(:' | '}'\n      shiftT(282);                  // '}'\n      break;\n    case -3:\n      break;\n    default:\n      try_BlockExpr();\n    }\n  }\n\n  function parse_CompPIConstructor()\n  {\n    eventHandler.startNonterminal(\"CompPIConstructor\", e0);\n    shift(216);                     // 'processing-instruction'\n    lookahead1W(250);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' |\n                                    // 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'last' | 'lax' | 'le' | 'let' |\n                                    // 'loop' | 'lt' | 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' |\n                                    // 'ne' | 'node' | 'nodes' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'self' | 'sliding' | 'some' | 'stable' | 'start' | 'strict' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' |\n                                    // 'union' | 'unordered' | 'updating' | 'validate' | 'value' | 'variable' |\n                                    // 'version' | 'where' | 'while' | 'with' | 'xquery' | '{'\n    switch (l1)\n    {\n    case 276:                       // '{'\n      shift(276);                   // '{'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      whitespace();\n      parse_Expr();\n      shift(282);                   // '}'\n      break;\n    default:\n      whitespace();\n      parse_NCName();\n    }\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    switch (l1)\n    {\n    case 276:                       // '{'\n      lookahead2W(276);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | ';' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|' | '}'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 144660)               // '{' '}'\n    {\n      lk = memoized(13, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(276);              // '{'\n          lookahead1W(88);          // S^WS | '(:' | '}'\n          shiftT(282);              // '}'\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(13, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      shift(276);                   // '{'\n      lookahead1W(88);              // S^WS | '(:' | '}'\n      shift(282);                   // '}'\n      break;\n    default:\n      whitespace();\n      parse_BlockExpr();\n    }\n    eventHandler.endNonterminal(\"CompPIConstructor\", e0);\n  }\n\n  function try_CompPIConstructor()\n  {\n    shiftT(216);                    // 'processing-instruction'\n    lookahead1W(250);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' |\n                                    // 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'last' | 'lax' | 'le' | 'let' |\n                                    // 'loop' | 'lt' | 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' |\n                                    // 'ne' | 'node' | 'nodes' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'self' | 'sliding' | 'some' | 'stable' | 'start' | 'strict' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' |\n                                    // 'union' | 'unordered' | 'updating' | 'validate' | 'value' | 'variable' |\n                                    // 'version' | 'where' | 'while' | 'with' | 'xquery' | '{'\n    switch (l1)\n    {\n    case 276:                       // '{'\n      shiftT(276);                  // '{'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      try_Expr();\n      shiftT(282);                  // '}'\n      break;\n    default:\n      try_NCName();\n    }\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    switch (l1)\n    {\n    case 276:                       // '{'\n      lookahead2W(276);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | ';' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|' | '}'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 144660)               // '{' '}'\n    {\n      lk = memoized(13, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(276);              // '{'\n          lookahead1W(88);          // S^WS | '(:' | '}'\n          shiftT(282);              // '}'\n          memoize(13, e0A, -1);\n          lk = -3;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(13, e0A, -2);\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      shiftT(276);                  // '{'\n      lookahead1W(88);              // S^WS | '(:' | '}'\n      shiftT(282);                  // '}'\n      break;\n    case -3:\n      break;\n    default:\n      try_BlockExpr();\n    }\n  }\n\n  function parse_CompCommentConstructor()\n  {\n    eventHandler.startNonterminal(\"CompCommentConstructor\", e0);\n    shift(96);                      // 'comment'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    whitespace();\n    parse_BlockExpr();\n    eventHandler.endNonterminal(\"CompCommentConstructor\", e0);\n  }\n\n  function try_CompCommentConstructor()\n  {\n    shiftT(96);                     // 'comment'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    try_BlockExpr();\n  }\n\n  function parse_CompTextConstructor()\n  {\n    eventHandler.startNonterminal(\"CompTextConstructor\", e0);\n    shift(244);                     // 'text'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    whitespace();\n    parse_BlockExpr();\n    eventHandler.endNonterminal(\"CompTextConstructor\", e0);\n  }\n\n  function try_CompTextConstructor()\n  {\n    shiftT(244);                    // 'text'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    try_BlockExpr();\n  }\n\n  function parse_PrimaryExpr()\n  {\n    eventHandler.startNonterminal(\"PrimaryExpr\", e0);\n    switch (l1)\n    {\n    case 184:                       // 'namespace'\n      lookahead2W(255);             // NCName^Token | S^WS | '#' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' |\n                                    // 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'last' | 'lax' | 'le' | 'let' |\n                                    // 'loop' | 'lt' | 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' |\n                                    // 'ne' | 'node' | 'nodes' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'self' | 'sliding' | 'some' | 'stable' | 'start' | 'strict' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' |\n                                    // 'union' | 'unordered' | 'updating' | 'validate' | 'value' | 'variable' |\n                                    // 'version' | 'where' | 'while' | 'with' | 'xquery' | '{'\n      break;\n    case 216:                       // 'processing-instruction'\n      lookahead2W(253);             // NCName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' |\n                                    // 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'last' | 'lax' | 'le' | 'let' |\n                                    // 'loop' | 'lt' | 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' |\n                                    // 'ne' | 'node' | 'nodes' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'self' | 'sliding' | 'some' | 'stable' | 'start' | 'strict' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' |\n                                    // 'union' | 'unordered' | 'updating' | 'validate' | 'value' | 'variable' |\n                                    // 'version' | 'where' | 'while' | 'with' | 'xquery' | '{'\n      break;\n    case 276:                       // '{'\n      lookahead2W(276);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | ';' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|' | '}'\n      break;\n    case 82:                        // 'attribute'\n    case 121:                       // 'element'\n      lookahead2W(258);             // EQName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{'\n      break;\n    case 96:                        // 'comment'\n    case 244:                       // 'text'\n      lookahead2W(93);              // S^WS | '#' | '(:' | '{'\n      break;\n    case 119:                       // 'document'\n    case 202:                       // 'ordered'\n    case 256:                       // 'unordered'\n      lookahead2W(139);             // S^WS | '#' | '(' | '(:' | '{'\n      break;\n    case 6:                         // EQName^Token\n    case 70:                        // 'after'\n    case 72:                        // 'allowing'\n    case 73:                        // 'ancestor'\n    case 74:                        // 'ancestor-or-self'\n    case 75:                        // 'and'\n    case 77:                        // 'append'\n    case 79:                        // 'as'\n    case 80:                        // 'ascending'\n    case 81:                        // 'at'\n    case 83:                        // 'base-uri'\n    case 84:                        // 'before'\n    case 85:                        // 'boundary-space'\n    case 86:                        // 'break'\n    case 88:                        // 'case'\n    case 89:                        // 'cast'\n    case 90:                        // 'castable'\n    case 91:                        // 'catch'\n    case 93:                        // 'child'\n    case 94:                        // 'collation'\n    case 97:                        // 'constraint'\n    case 98:                        // 'construction'\n    case 101:                       // 'context'\n    case 102:                       // 'continue'\n    case 103:                       // 'copy'\n    case 104:                       // 'copy-namespaces'\n    case 105:                       // 'count'\n    case 106:                       // 'decimal-format'\n    case 108:                       // 'declare'\n    case 109:                       // 'default'\n    case 110:                       // 'delete'\n    case 111:                       // 'descendant'\n    case 112:                       // 'descendant-or-self'\n    case 113:                       // 'descending'\n    case 118:                       // 'div'\n    case 122:                       // 'else'\n    case 123:                       // 'empty'\n    case 125:                       // 'encoding'\n    case 126:                       // 'end'\n    case 128:                       // 'eq'\n    case 129:                       // 'every'\n    case 131:                       // 'except'\n    case 132:                       // 'exit'\n    case 133:                       // 'external'\n    case 134:                       // 'first'\n    case 135:                       // 'following'\n    case 136:                       // 'following-sibling'\n    case 137:                       // 'for'\n    case 141:                       // 'ft-option'\n    case 146:                       // 'ge'\n    case 148:                       // 'group'\n    case 150:                       // 'gt'\n    case 151:                       // 'idiv'\n    case 153:                       // 'import'\n    case 154:                       // 'in'\n    case 155:                       // 'index'\n    case 159:                       // 'insert'\n    case 160:                       // 'instance'\n    case 161:                       // 'integrity'\n    case 162:                       // 'intersect'\n    case 163:                       // 'into'\n    case 164:                       // 'is'\n    case 166:                       // 'json'\n    case 170:                       // 'last'\n    case 171:                       // 'lax'\n    case 172:                       // 'le'\n    case 174:                       // 'let'\n    case 176:                       // 'loop'\n    case 178:                       // 'lt'\n    case 180:                       // 'mod'\n    case 181:                       // 'modify'\n    case 182:                       // 'module'\n    case 186:                       // 'ne'\n    case 192:                       // 'nodes'\n    case 194:                       // 'object'\n    case 198:                       // 'only'\n    case 199:                       // 'option'\n    case 200:                       // 'or'\n    case 201:                       // 'order'\n    case 203:                       // 'ordering'\n    case 206:                       // 'parent'\n    case 212:                       // 'preceding'\n    case 213:                       // 'preceding-sibling'\n    case 218:                       // 'rename'\n    case 219:                       // 'replace'\n    case 220:                       // 'return'\n    case 221:                       // 'returning'\n    case 222:                       // 'revalidation'\n    case 224:                       // 'satisfies'\n    case 225:                       // 'schema'\n    case 228:                       // 'score'\n    case 229:                       // 'self'\n    case 234:                       // 'sliding'\n    case 235:                       // 'some'\n    case 236:                       // 'stable'\n    case 237:                       // 'start'\n    case 240:                       // 'strict'\n    case 248:                       // 'to'\n    case 249:                       // 'treat'\n    case 250:                       // 'try'\n    case 251:                       // 'tumbling'\n    case 252:                       // 'type'\n    case 254:                       // 'union'\n    case 257:                       // 'updating'\n    case 260:                       // 'validate'\n    case 261:                       // 'value'\n    case 262:                       // 'variable'\n    case 263:                       // 'version'\n    case 266:                       // 'where'\n    case 267:                       // 'while'\n    case 270:                       // 'with'\n    case 274:                       // 'xquery'\n      lookahead2W(92);              // S^WS | '#' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 2836                  // '{' Wildcard\n     || lk == 3348                  // '{' EQName^Token\n     || lk == 4372                  // '{' IntegerLiteral\n     || lk == 4884                  // '{' DecimalLiteral\n     || lk == 5396                  // '{' DoubleLiteral\n     || lk == 5908                  // '{' StringLiteral\n     || lk == 16148                 // '{' '$'\n     || lk == 16660                 // '{' '%'\n     || lk == 17684                 // '{' '('\n     || lk == 18196                 // '{' '(#'\n     || lk == 20756                 // '{' '+'\n     || lk == 21780                 // '{' '-'\n     || lk == 22804                 // '{' '.'\n     || lk == 23316                 // '{' '..'\n     || lk == 23828                 // '{' '/'\n     || lk == 24340                 // '{' '//'\n     || lk == 27924                 // '{' '<'\n     || lk == 28436                 // '{' '<!--'\n     || lk == 30484                 // '{' '<?'\n     || lk == 34068                 // '{' '@'\n     || lk == 35092                 // '{' '['\n     || lk == 36116                 // '{' 'after'\n     || lk == 37140                 // '{' 'allowing'\n     || lk == 37652                 // '{' 'ancestor'\n     || lk == 38164                 // '{' 'ancestor-or-self'\n     || lk == 38676                 // '{' 'and'\n     || lk == 39700                 // '{' 'append'\n     || lk == 40212                 // '{' 'array'\n     || lk == 40724                 // '{' 'as'\n     || lk == 41236                 // '{' 'ascending'\n     || lk == 41748                 // '{' 'at'\n     || lk == 42260                 // '{' 'attribute'\n     || lk == 42772                 // '{' 'base-uri'\n     || lk == 43284                 // '{' 'before'\n     || lk == 43796                 // '{' 'boundary-space'\n     || lk == 44308                 // '{' 'break'\n     || lk == 45332                 // '{' 'case'\n     || lk == 45844                 // '{' 'cast'\n     || lk == 46356                 // '{' 'castable'\n     || lk == 46868                 // '{' 'catch'\n     || lk == 47892                 // '{' 'child'\n     || lk == 48404                 // '{' 'collation'\n     || lk == 49428                 // '{' 'comment'\n     || lk == 49940                 // '{' 'constraint'\n     || lk == 50452                 // '{' 'construction'\n     || lk == 51988                 // '{' 'context'\n     || lk == 52500                 // '{' 'continue'\n     || lk == 53012                 // '{' 'copy'\n     || lk == 53524                 // '{' 'copy-namespaces'\n     || lk == 54036                 // '{' 'count'\n     || lk == 54548                 // '{' 'decimal-format'\n     || lk == 55572                 // '{' 'declare'\n     || lk == 56084                 // '{' 'default'\n     || lk == 56596                 // '{' 'delete'\n     || lk == 57108                 // '{' 'descendant'\n     || lk == 57620                 // '{' 'descendant-or-self'\n     || lk == 58132                 // '{' 'descending'\n     || lk == 60692                 // '{' 'div'\n     || lk == 61204                 // '{' 'document'\n     || lk == 61716                 // '{' 'document-node'\n     || lk == 62228                 // '{' 'element'\n     || lk == 62740                 // '{' 'else'\n     || lk == 63252                 // '{' 'empty'\n     || lk == 63764                 // '{' 'empty-sequence'\n     || lk == 64276                 // '{' 'encoding'\n     || lk == 64788                 // '{' 'end'\n     || lk == 65812                 // '{' 'eq'\n     || lk == 66324                 // '{' 'every'\n     || lk == 67348                 // '{' 'except'\n     || lk == 67860                 // '{' 'exit'\n     || lk == 68372                 // '{' 'external'\n     || lk == 68884                 // '{' 'first'\n     || lk == 69396                 // '{' 'following'\n     || lk == 69908                 // '{' 'following-sibling'\n     || lk == 70420                 // '{' 'for'\n     || lk == 72468                 // '{' 'ft-option'\n     || lk == 74516                 // '{' 'function'\n     || lk == 75028                 // '{' 'ge'\n     || lk == 76052                 // '{' 'group'\n     || lk == 77076                 // '{' 'gt'\n     || lk == 77588                 // '{' 'idiv'\n     || lk == 78100                 // '{' 'if'\n     || lk == 78612                 // '{' 'import'\n     || lk == 79124                 // '{' 'in'\n     || lk == 79636                 // '{' 'index'\n     || lk == 81684                 // '{' 'insert'\n     || lk == 82196                 // '{' 'instance'\n     || lk == 82708                 // '{' 'integrity'\n     || lk == 83220                 // '{' 'intersect'\n     || lk == 83732                 // '{' 'into'\n     || lk == 84244                 // '{' 'is'\n     || lk == 84756                 // '{' 'item'\n     || lk == 85268                 // '{' 'json'\n     || lk == 85780                 // '{' 'json-item'\n     || lk == 87316                 // '{' 'last'\n     || lk == 87828                 // '{' 'lax'\n     || lk == 88340                 // '{' 'le'\n     || lk == 89364                 // '{' 'let'\n     || lk == 90388                 // '{' 'loop'\n     || lk == 91412                 // '{' 'lt'\n     || lk == 92436                 // '{' 'mod'\n     || lk == 92948                 // '{' 'modify'\n     || lk == 93460                 // '{' 'module'\n     || lk == 94484                 // '{' 'namespace'\n     || lk == 94996                 // '{' 'namespace-node'\n     || lk == 95508                 // '{' 'ne'\n     || lk == 98068                 // '{' 'node'\n     || lk == 98580                 // '{' 'nodes'\n     || lk == 99604                 // '{' 'object'\n     || lk == 101652                // '{' 'only'\n     || lk == 102164                // '{' 'option'\n     || lk == 102676                // '{' 'or'\n     || lk == 103188                // '{' 'order'\n     || lk == 103700                // '{' 'ordered'\n     || lk == 104212                // '{' 'ordering'\n     || lk == 105748                // '{' 'parent'\n     || lk == 108820                // '{' 'preceding'\n     || lk == 109332                // '{' 'preceding-sibling'\n     || lk == 110868                // '{' 'processing-instruction'\n     || lk == 111892                // '{' 'rename'\n     || lk == 112404                // '{' 'replace'\n     || lk == 112916                // '{' 'return'\n     || lk == 113428                // '{' 'returning'\n     || lk == 113940                // '{' 'revalidation'\n     || lk == 114964                // '{' 'satisfies'\n     || lk == 115476                // '{' 'schema'\n     || lk == 115988                // '{' 'schema-attribute'\n     || lk == 116500                // '{' 'schema-element'\n     || lk == 117012                // '{' 'score'\n     || lk == 117524                // '{' 'self'\n     || lk == 120084                // '{' 'sliding'\n     || lk == 120596                // '{' 'some'\n     || lk == 121108                // '{' 'stable'\n     || lk == 121620                // '{' 'start'\n     || lk == 123156                // '{' 'strict'\n     || lk == 124180                // '{' 'structured-item'\n     || lk == 124692                // '{' 'switch'\n     || lk == 125204                // '{' 'text'\n     || lk == 127252                // '{' 'to'\n     || lk == 127764                // '{' 'treat'\n     || lk == 128276                // '{' 'try'\n     || lk == 128788                // '{' 'tumbling'\n     || lk == 129300                // '{' 'type'\n     || lk == 129812                // '{' 'typeswitch'\n     || lk == 130324                // '{' 'union'\n     || lk == 131348                // '{' 'unordered'\n     || lk == 131860                // '{' 'updating'\n     || lk == 133396                // '{' 'validate'\n     || lk == 133908                // '{' 'value'\n     || lk == 134420                // '{' 'variable'\n     || lk == 134932                // '{' 'version'\n     || lk == 136468                // '{' 'where'\n     || lk == 136980                // '{' 'while'\n     || lk == 138516                // '{' 'with'\n     || lk == 140564                // '{' 'xquery'\n     || lk == 141588                // '{' '{'\n     || lk == 142612                // '{' '{|'\n     || lk == 144660)               // '{' '}'\n    {\n      lk = memoized(14, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_BlockExpr();\n          lk = -10;\n        }\n        catch (p10A)\n        {\n          lk = -11;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(14, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case 8:                         // IntegerLiteral\n    case 9:                         // DecimalLiteral\n    case 10:                        // DoubleLiteral\n    case 11:                        // StringLiteral\n      parse_Literal();\n      break;\n    case 31:                        // '$'\n      parse_VarRef();\n      break;\n    case 34:                        // '('\n      parse_ParenthesizedExpr();\n      break;\n    case 44:                        // '.'\n      parse_ContextItemExpr();\n      break;\n    case 17414:                     // EQName^Token '('\n    case 17478:                     // 'after' '('\n    case 17480:                     // 'allowing' '('\n    case 17481:                     // 'ancestor' '('\n    case 17482:                     // 'ancestor-or-self' '('\n    case 17483:                     // 'and' '('\n    case 17485:                     // 'append' '('\n    case 17487:                     // 'as' '('\n    case 17488:                     // 'ascending' '('\n    case 17489:                     // 'at' '('\n    case 17491:                     // 'base-uri' '('\n    case 17492:                     // 'before' '('\n    case 17493:                     // 'boundary-space' '('\n    case 17494:                     // 'break' '('\n    case 17496:                     // 'case' '('\n    case 17497:                     // 'cast' '('\n    case 17498:                     // 'castable' '('\n    case 17499:                     // 'catch' '('\n    case 17501:                     // 'child' '('\n    case 17502:                     // 'collation' '('\n    case 17505:                     // 'constraint' '('\n    case 17506:                     // 'construction' '('\n    case 17509:                     // 'context' '('\n    case 17510:                     // 'continue' '('\n    case 17511:                     // 'copy' '('\n    case 17512:                     // 'copy-namespaces' '('\n    case 17513:                     // 'count' '('\n    case 17514:                     // 'decimal-format' '('\n    case 17516:                     // 'declare' '('\n    case 17517:                     // 'default' '('\n    case 17518:                     // 'delete' '('\n    case 17519:                     // 'descendant' '('\n    case 17520:                     // 'descendant-or-self' '('\n    case 17521:                     // 'descending' '('\n    case 17526:                     // 'div' '('\n    case 17527:                     // 'document' '('\n    case 17530:                     // 'else' '('\n    case 17531:                     // 'empty' '('\n    case 17533:                     // 'encoding' '('\n    case 17534:                     // 'end' '('\n    case 17536:                     // 'eq' '('\n    case 17537:                     // 'every' '('\n    case 17539:                     // 'except' '('\n    case 17540:                     // 'exit' '('\n    case 17541:                     // 'external' '('\n    case 17542:                     // 'first' '('\n    case 17543:                     // 'following' '('\n    case 17544:                     // 'following-sibling' '('\n    case 17545:                     // 'for' '('\n    case 17549:                     // 'ft-option' '('\n    case 17554:                     // 'ge' '('\n    case 17556:                     // 'group' '('\n    case 17558:                     // 'gt' '('\n    case 17559:                     // 'idiv' '('\n    case 17561:                     // 'import' '('\n    case 17562:                     // 'in' '('\n    case 17563:                     // 'index' '('\n    case 17567:                     // 'insert' '('\n    case 17568:                     // 'instance' '('\n    case 17569:                     // 'integrity' '('\n    case 17570:                     // 'intersect' '('\n    case 17571:                     // 'into' '('\n    case 17572:                     // 'is' '('\n    case 17574:                     // 'json' '('\n    case 17578:                     // 'last' '('\n    case 17579:                     // 'lax' '('\n    case 17580:                     // 'le' '('\n    case 17582:                     // 'let' '('\n    case 17584:                     // 'loop' '('\n    case 17586:                     // 'lt' '('\n    case 17588:                     // 'mod' '('\n    case 17589:                     // 'modify' '('\n    case 17590:                     // 'module' '('\n    case 17592:                     // 'namespace' '('\n    case 17594:                     // 'ne' '('\n    case 17600:                     // 'nodes' '('\n    case 17602:                     // 'object' '('\n    case 17606:                     // 'only' '('\n    case 17607:                     // 'option' '('\n    case 17608:                     // 'or' '('\n    case 17609:                     // 'order' '('\n    case 17610:                     // 'ordered' '('\n    case 17611:                     // 'ordering' '('\n    case 17614:                     // 'parent' '('\n    case 17620:                     // 'preceding' '('\n    case 17621:                     // 'preceding-sibling' '('\n    case 17626:                     // 'rename' '('\n    case 17627:                     // 'replace' '('\n    case 17628:                     // 'return' '('\n    case 17629:                     // 'returning' '('\n    case 17630:                     // 'revalidation' '('\n    case 17632:                     // 'satisfies' '('\n    case 17633:                     // 'schema' '('\n    case 17636:                     // 'score' '('\n    case 17637:                     // 'self' '('\n    case 17642:                     // 'sliding' '('\n    case 17643:                     // 'some' '('\n    case 17644:                     // 'stable' '('\n    case 17645:                     // 'start' '('\n    case 17648:                     // 'strict' '('\n    case 17656:                     // 'to' '('\n    case 17657:                     // 'treat' '('\n    case 17658:                     // 'try' '('\n    case 17659:                     // 'tumbling' '('\n    case 17660:                     // 'type' '('\n    case 17662:                     // 'union' '('\n    case 17664:                     // 'unordered' '('\n    case 17665:                     // 'updating' '('\n    case 17668:                     // 'validate' '('\n    case 17669:                     // 'value' '('\n    case 17670:                     // 'variable' '('\n    case 17671:                     // 'version' '('\n    case 17674:                     // 'where' '('\n    case 17675:                     // 'while' '('\n    case 17678:                     // 'with' '('\n    case 17682:                     // 'xquery' '('\n      parse_FunctionCall();\n      break;\n    case 141514:                    // 'ordered' '{'\n      parse_OrderedExpr();\n      break;\n    case 141568:                    // 'unordered' '{'\n      parse_UnorderedExpr();\n      break;\n    case 32:                        // '%'\n    case 78:                        // 'array'\n    case 120:                       // 'document-node'\n    case 124:                       // 'empty-sequence'\n    case 145:                       // 'function'\n    case 152:                       // 'if'\n    case 165:                       // 'item'\n    case 167:                       // 'json-item'\n    case 185:                       // 'namespace-node'\n    case 191:                       // 'node'\n    case 226:                       // 'schema-attribute'\n    case 227:                       // 'schema-element'\n    case 242:                       // 'structured-item'\n    case 243:                       // 'switch'\n    case 253:                       // 'typeswitch'\n    case 14854:                     // EQName^Token '#'\n    case 14918:                     // 'after' '#'\n    case 14920:                     // 'allowing' '#'\n    case 14921:                     // 'ancestor' '#'\n    case 14922:                     // 'ancestor-or-self' '#'\n    case 14923:                     // 'and' '#'\n    case 14925:                     // 'append' '#'\n    case 14927:                     // 'as' '#'\n    case 14928:                     // 'ascending' '#'\n    case 14929:                     // 'at' '#'\n    case 14930:                     // 'attribute' '#'\n    case 14931:                     // 'base-uri' '#'\n    case 14932:                     // 'before' '#'\n    case 14933:                     // 'boundary-space' '#'\n    case 14934:                     // 'break' '#'\n    case 14936:                     // 'case' '#'\n    case 14937:                     // 'cast' '#'\n    case 14938:                     // 'castable' '#'\n    case 14939:                     // 'catch' '#'\n    case 14941:                     // 'child' '#'\n    case 14942:                     // 'collation' '#'\n    case 14944:                     // 'comment' '#'\n    case 14945:                     // 'constraint' '#'\n    case 14946:                     // 'construction' '#'\n    case 14949:                     // 'context' '#'\n    case 14950:                     // 'continue' '#'\n    case 14951:                     // 'copy' '#'\n    case 14952:                     // 'copy-namespaces' '#'\n    case 14953:                     // 'count' '#'\n    case 14954:                     // 'decimal-format' '#'\n    case 14956:                     // 'declare' '#'\n    case 14957:                     // 'default' '#'\n    case 14958:                     // 'delete' '#'\n    case 14959:                     // 'descendant' '#'\n    case 14960:                     // 'descendant-or-self' '#'\n    case 14961:                     // 'descending' '#'\n    case 14966:                     // 'div' '#'\n    case 14967:                     // 'document' '#'\n    case 14969:                     // 'element' '#'\n    case 14970:                     // 'else' '#'\n    case 14971:                     // 'empty' '#'\n    case 14973:                     // 'encoding' '#'\n    case 14974:                     // 'end' '#'\n    case 14976:                     // 'eq' '#'\n    case 14977:                     // 'every' '#'\n    case 14979:                     // 'except' '#'\n    case 14980:                     // 'exit' '#'\n    case 14981:                     // 'external' '#'\n    case 14982:                     // 'first' '#'\n    case 14983:                     // 'following' '#'\n    case 14984:                     // 'following-sibling' '#'\n    case 14985:                     // 'for' '#'\n    case 14989:                     // 'ft-option' '#'\n    case 14994:                     // 'ge' '#'\n    case 14996:                     // 'group' '#'\n    case 14998:                     // 'gt' '#'\n    case 14999:                     // 'idiv' '#'\n    case 15001:                     // 'import' '#'\n    case 15002:                     // 'in' '#'\n    case 15003:                     // 'index' '#'\n    case 15007:                     // 'insert' '#'\n    case 15008:                     // 'instance' '#'\n    case 15009:                     // 'integrity' '#'\n    case 15010:                     // 'intersect' '#'\n    case 15011:                     // 'into' '#'\n    case 15012:                     // 'is' '#'\n    case 15014:                     // 'json' '#'\n    case 15018:                     // 'last' '#'\n    case 15019:                     // 'lax' '#'\n    case 15020:                     // 'le' '#'\n    case 15022:                     // 'let' '#'\n    case 15024:                     // 'loop' '#'\n    case 15026:                     // 'lt' '#'\n    case 15028:                     // 'mod' '#'\n    case 15029:                     // 'modify' '#'\n    case 15030:                     // 'module' '#'\n    case 15032:                     // 'namespace' '#'\n    case 15034:                     // 'ne' '#'\n    case 15040:                     // 'nodes' '#'\n    case 15042:                     // 'object' '#'\n    case 15046:                     // 'only' '#'\n    case 15047:                     // 'option' '#'\n    case 15048:                     // 'or' '#'\n    case 15049:                     // 'order' '#'\n    case 15050:                     // 'ordered' '#'\n    case 15051:                     // 'ordering' '#'\n    case 15054:                     // 'parent' '#'\n    case 15060:                     // 'preceding' '#'\n    case 15061:                     // 'preceding-sibling' '#'\n    case 15064:                     // 'processing-instruction' '#'\n    case 15066:                     // 'rename' '#'\n    case 15067:                     // 'replace' '#'\n    case 15068:                     // 'return' '#'\n    case 15069:                     // 'returning' '#'\n    case 15070:                     // 'revalidation' '#'\n    case 15072:                     // 'satisfies' '#'\n    case 15073:                     // 'schema' '#'\n    case 15076:                     // 'score' '#'\n    case 15077:                     // 'self' '#'\n    case 15082:                     // 'sliding' '#'\n    case 15083:                     // 'some' '#'\n    case 15084:                     // 'stable' '#'\n    case 15085:                     // 'start' '#'\n    case 15088:                     // 'strict' '#'\n    case 15092:                     // 'text' '#'\n    case 15096:                     // 'to' '#'\n    case 15097:                     // 'treat' '#'\n    case 15098:                     // 'try' '#'\n    case 15099:                     // 'tumbling' '#'\n    case 15100:                     // 'type' '#'\n    case 15102:                     // 'union' '#'\n    case 15104:                     // 'unordered' '#'\n    case 15105:                     // 'updating' '#'\n    case 15108:                     // 'validate' '#'\n    case 15109:                     // 'value' '#'\n    case 15110:                     // 'variable' '#'\n    case 15111:                     // 'version' '#'\n    case 15114:                     // 'where' '#'\n    case 15115:                     // 'while' '#'\n    case 15118:                     // 'with' '#'\n    case 15122:                     // 'xquery' '#'\n      parse_FunctionItemExpr();\n      break;\n    case -10:\n    case 27412:                     // '{' ';'\n      parse_BlockExpr();\n      break;\n    case -11:\n      parse_ObjectConstructor();\n      break;\n    case 68:                        // '['\n      parse_ArrayConstructor();\n      break;\n    case 278:                       // '{|'\n      parse_JSONSimpleObjectUnion();\n      break;\n    default:\n      parse_Constructor();\n    }\n    eventHandler.endNonterminal(\"PrimaryExpr\", e0);\n  }\n\n  function try_PrimaryExpr()\n  {\n    switch (l1)\n    {\n    case 184:                       // 'namespace'\n      lookahead2W(255);             // NCName^Token | S^WS | '#' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' |\n                                    // 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'last' | 'lax' | 'le' | 'let' |\n                                    // 'loop' | 'lt' | 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' |\n                                    // 'ne' | 'node' | 'nodes' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'self' | 'sliding' | 'some' | 'stable' | 'start' | 'strict' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' |\n                                    // 'union' | 'unordered' | 'updating' | 'validate' | 'value' | 'variable' |\n                                    // 'version' | 'where' | 'while' | 'with' | 'xquery' | '{'\n      break;\n    case 216:                       // 'processing-instruction'\n      lookahead2W(253);             // NCName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'as' | 'ascending' | 'at' | 'attribute' |\n                                    // 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' | 'cast' |\n                                    // 'castable' | 'catch' | 'child' | 'collation' | 'comment' | 'constraint' |\n                                    // 'construction' | 'context' | 'continue' | 'copy' | 'copy-namespaces' | 'count' |\n                                    // 'decimal-format' | 'declare' | 'default' | 'delete' | 'descendant' |\n                                    // 'descendant-or-self' | 'descending' | 'div' | 'document' | 'document-node' |\n                                    // 'element' | 'else' | 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' |\n                                    // 'every' | 'except' | 'exit' | 'external' | 'first' | 'following' |\n                                    // 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' | 'group' | 'gt' |\n                                    // 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' | 'instance' | 'integrity' |\n                                    // 'intersect' | 'into' | 'is' | 'item' | 'json' | 'last' | 'lax' | 'le' | 'let' |\n                                    // 'loop' | 'lt' | 'mod' | 'modify' | 'module' | 'namespace' | 'namespace-node' |\n                                    // 'ne' | 'node' | 'nodes' | 'object' | 'only' | 'option' | 'or' | 'order' |\n                                    // 'ordered' | 'ordering' | 'parent' | 'preceding' | 'preceding-sibling' |\n                                    // 'processing-instruction' | 'rename' | 'replace' | 'return' | 'returning' |\n                                    // 'revalidation' | 'satisfies' | 'schema' | 'schema-attribute' | 'schema-element' |\n                                    // 'score' | 'self' | 'sliding' | 'some' | 'stable' | 'start' | 'strict' |\n                                    // 'switch' | 'text' | 'to' | 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' |\n                                    // 'union' | 'unordered' | 'updating' | 'validate' | 'value' | 'variable' |\n                                    // 'version' | 'where' | 'while' | 'with' | 'xquery' | '{'\n      break;\n    case 276:                       // '{'\n      lookahead2W(276);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | ';' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|' | '}'\n      break;\n    case 82:                        // 'attribute'\n    case 121:                       // 'element'\n      lookahead2W(258);             // EQName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{'\n      break;\n    case 96:                        // 'comment'\n    case 244:                       // 'text'\n      lookahead2W(93);              // S^WS | '#' | '(:' | '{'\n      break;\n    case 119:                       // 'document'\n    case 202:                       // 'ordered'\n    case 256:                       // 'unordered'\n      lookahead2W(139);             // S^WS | '#' | '(' | '(:' | '{'\n      break;\n    case 6:                         // EQName^Token\n    case 70:                        // 'after'\n    case 72:                        // 'allowing'\n    case 73:                        // 'ancestor'\n    case 74:                        // 'ancestor-or-self'\n    case 75:                        // 'and'\n    case 77:                        // 'append'\n    case 79:                        // 'as'\n    case 80:                        // 'ascending'\n    case 81:                        // 'at'\n    case 83:                        // 'base-uri'\n    case 84:                        // 'before'\n    case 85:                        // 'boundary-space'\n    case 86:                        // 'break'\n    case 88:                        // 'case'\n    case 89:                        // 'cast'\n    case 90:                        // 'castable'\n    case 91:                        // 'catch'\n    case 93:                        // 'child'\n    case 94:                        // 'collation'\n    case 97:                        // 'constraint'\n    case 98:                        // 'construction'\n    case 101:                       // 'context'\n    case 102:                       // 'continue'\n    case 103:                       // 'copy'\n    case 104:                       // 'copy-namespaces'\n    case 105:                       // 'count'\n    case 106:                       // 'decimal-format'\n    case 108:                       // 'declare'\n    case 109:                       // 'default'\n    case 110:                       // 'delete'\n    case 111:                       // 'descendant'\n    case 112:                       // 'descendant-or-self'\n    case 113:                       // 'descending'\n    case 118:                       // 'div'\n    case 122:                       // 'else'\n    case 123:                       // 'empty'\n    case 125:                       // 'encoding'\n    case 126:                       // 'end'\n    case 128:                       // 'eq'\n    case 129:                       // 'every'\n    case 131:                       // 'except'\n    case 132:                       // 'exit'\n    case 133:                       // 'external'\n    case 134:                       // 'first'\n    case 135:                       // 'following'\n    case 136:                       // 'following-sibling'\n    case 137:                       // 'for'\n    case 141:                       // 'ft-option'\n    case 146:                       // 'ge'\n    case 148:                       // 'group'\n    case 150:                       // 'gt'\n    case 151:                       // 'idiv'\n    case 153:                       // 'import'\n    case 154:                       // 'in'\n    case 155:                       // 'index'\n    case 159:                       // 'insert'\n    case 160:                       // 'instance'\n    case 161:                       // 'integrity'\n    case 162:                       // 'intersect'\n    case 163:                       // 'into'\n    case 164:                       // 'is'\n    case 166:                       // 'json'\n    case 170:                       // 'last'\n    case 171:                       // 'lax'\n    case 172:                       // 'le'\n    case 174:                       // 'let'\n    case 176:                       // 'loop'\n    case 178:                       // 'lt'\n    case 180:                       // 'mod'\n    case 181:                       // 'modify'\n    case 182:                       // 'module'\n    case 186:                       // 'ne'\n    case 192:                       // 'nodes'\n    case 194:                       // 'object'\n    case 198:                       // 'only'\n    case 199:                       // 'option'\n    case 200:                       // 'or'\n    case 201:                       // 'order'\n    case 203:                       // 'ordering'\n    case 206:                       // 'parent'\n    case 212:                       // 'preceding'\n    case 213:                       // 'preceding-sibling'\n    case 218:                       // 'rename'\n    case 219:                       // 'replace'\n    case 220:                       // 'return'\n    case 221:                       // 'returning'\n    case 222:                       // 'revalidation'\n    case 224:                       // 'satisfies'\n    case 225:                       // 'schema'\n    case 228:                       // 'score'\n    case 229:                       // 'self'\n    case 234:                       // 'sliding'\n    case 235:                       // 'some'\n    case 236:                       // 'stable'\n    case 237:                       // 'start'\n    case 240:                       // 'strict'\n    case 248:                       // 'to'\n    case 249:                       // 'treat'\n    case 250:                       // 'try'\n    case 251:                       // 'tumbling'\n    case 252:                       // 'type'\n    case 254:                       // 'union'\n    case 257:                       // 'updating'\n    case 260:                       // 'validate'\n    case 261:                       // 'value'\n    case 262:                       // 'variable'\n    case 263:                       // 'version'\n    case 266:                       // 'where'\n    case 267:                       // 'while'\n    case 270:                       // 'with'\n    case 274:                       // 'xquery'\n      lookahead2W(92);              // S^WS | '#' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 2836                  // '{' Wildcard\n     || lk == 3348                  // '{' EQName^Token\n     || lk == 4372                  // '{' IntegerLiteral\n     || lk == 4884                  // '{' DecimalLiteral\n     || lk == 5396                  // '{' DoubleLiteral\n     || lk == 5908                  // '{' StringLiteral\n     || lk == 16148                 // '{' '$'\n     || lk == 16660                 // '{' '%'\n     || lk == 17684                 // '{' '('\n     || lk == 18196                 // '{' '(#'\n     || lk == 20756                 // '{' '+'\n     || lk == 21780                 // '{' '-'\n     || lk == 22804                 // '{' '.'\n     || lk == 23316                 // '{' '..'\n     || lk == 23828                 // '{' '/'\n     || lk == 24340                 // '{' '//'\n     || lk == 27924                 // '{' '<'\n     || lk == 28436                 // '{' '<!--'\n     || lk == 30484                 // '{' '<?'\n     || lk == 34068                 // '{' '@'\n     || lk == 35092                 // '{' '['\n     || lk == 36116                 // '{' 'after'\n     || lk == 37140                 // '{' 'allowing'\n     || lk == 37652                 // '{' 'ancestor'\n     || lk == 38164                 // '{' 'ancestor-or-self'\n     || lk == 38676                 // '{' 'and'\n     || lk == 39700                 // '{' 'append'\n     || lk == 40212                 // '{' 'array'\n     || lk == 40724                 // '{' 'as'\n     || lk == 41236                 // '{' 'ascending'\n     || lk == 41748                 // '{' 'at'\n     || lk == 42260                 // '{' 'attribute'\n     || lk == 42772                 // '{' 'base-uri'\n     || lk == 43284                 // '{' 'before'\n     || lk == 43796                 // '{' 'boundary-space'\n     || lk == 44308                 // '{' 'break'\n     || lk == 45332                 // '{' 'case'\n     || lk == 45844                 // '{' 'cast'\n     || lk == 46356                 // '{' 'castable'\n     || lk == 46868                 // '{' 'catch'\n     || lk == 47892                 // '{' 'child'\n     || lk == 48404                 // '{' 'collation'\n     || lk == 49428                 // '{' 'comment'\n     || lk == 49940                 // '{' 'constraint'\n     || lk == 50452                 // '{' 'construction'\n     || lk == 51988                 // '{' 'context'\n     || lk == 52500                 // '{' 'continue'\n     || lk == 53012                 // '{' 'copy'\n     || lk == 53524                 // '{' 'copy-namespaces'\n     || lk == 54036                 // '{' 'count'\n     || lk == 54548                 // '{' 'decimal-format'\n     || lk == 55572                 // '{' 'declare'\n     || lk == 56084                 // '{' 'default'\n     || lk == 56596                 // '{' 'delete'\n     || lk == 57108                 // '{' 'descendant'\n     || lk == 57620                 // '{' 'descendant-or-self'\n     || lk == 58132                 // '{' 'descending'\n     || lk == 60692                 // '{' 'div'\n     || lk == 61204                 // '{' 'document'\n     || lk == 61716                 // '{' 'document-node'\n     || lk == 62228                 // '{' 'element'\n     || lk == 62740                 // '{' 'else'\n     || lk == 63252                 // '{' 'empty'\n     || lk == 63764                 // '{' 'empty-sequence'\n     || lk == 64276                 // '{' 'encoding'\n     || lk == 64788                 // '{' 'end'\n     || lk == 65812                 // '{' 'eq'\n     || lk == 66324                 // '{' 'every'\n     || lk == 67348                 // '{' 'except'\n     || lk == 67860                 // '{' 'exit'\n     || lk == 68372                 // '{' 'external'\n     || lk == 68884                 // '{' 'first'\n     || lk == 69396                 // '{' 'following'\n     || lk == 69908                 // '{' 'following-sibling'\n     || lk == 70420                 // '{' 'for'\n     || lk == 72468                 // '{' 'ft-option'\n     || lk == 74516                 // '{' 'function'\n     || lk == 75028                 // '{' 'ge'\n     || lk == 76052                 // '{' 'group'\n     || lk == 77076                 // '{' 'gt'\n     || lk == 77588                 // '{' 'idiv'\n     || lk == 78100                 // '{' 'if'\n     || lk == 78612                 // '{' 'import'\n     || lk == 79124                 // '{' 'in'\n     || lk == 79636                 // '{' 'index'\n     || lk == 81684                 // '{' 'insert'\n     || lk == 82196                 // '{' 'instance'\n     || lk == 82708                 // '{' 'integrity'\n     || lk == 83220                 // '{' 'intersect'\n     || lk == 83732                 // '{' 'into'\n     || lk == 84244                 // '{' 'is'\n     || lk == 84756                 // '{' 'item'\n     || lk == 85268                 // '{' 'json'\n     || lk == 85780                 // '{' 'json-item'\n     || lk == 87316                 // '{' 'last'\n     || lk == 87828                 // '{' 'lax'\n     || lk == 88340                 // '{' 'le'\n     || lk == 89364                 // '{' 'let'\n     || lk == 90388                 // '{' 'loop'\n     || lk == 91412                 // '{' 'lt'\n     || lk == 92436                 // '{' 'mod'\n     || lk == 92948                 // '{' 'modify'\n     || lk == 93460                 // '{' 'module'\n     || lk == 94484                 // '{' 'namespace'\n     || lk == 94996                 // '{' 'namespace-node'\n     || lk == 95508                 // '{' 'ne'\n     || lk == 98068                 // '{' 'node'\n     || lk == 98580                 // '{' 'nodes'\n     || lk == 99604                 // '{' 'object'\n     || lk == 101652                // '{' 'only'\n     || lk == 102164                // '{' 'option'\n     || lk == 102676                // '{' 'or'\n     || lk == 103188                // '{' 'order'\n     || lk == 103700                // '{' 'ordered'\n     || lk == 104212                // '{' 'ordering'\n     || lk == 105748                // '{' 'parent'\n     || lk == 108820                // '{' 'preceding'\n     || lk == 109332                // '{' 'preceding-sibling'\n     || lk == 110868                // '{' 'processing-instruction'\n     || lk == 111892                // '{' 'rename'\n     || lk == 112404                // '{' 'replace'\n     || lk == 112916                // '{' 'return'\n     || lk == 113428                // '{' 'returning'\n     || lk == 113940                // '{' 'revalidation'\n     || lk == 114964                // '{' 'satisfies'\n     || lk == 115476                // '{' 'schema'\n     || lk == 115988                // '{' 'schema-attribute'\n     || lk == 116500                // '{' 'schema-element'\n     || lk == 117012                // '{' 'score'\n     || lk == 117524                // '{' 'self'\n     || lk == 120084                // '{' 'sliding'\n     || lk == 120596                // '{' 'some'\n     || lk == 121108                // '{' 'stable'\n     || lk == 121620                // '{' 'start'\n     || lk == 123156                // '{' 'strict'\n     || lk == 124180                // '{' 'structured-item'\n     || lk == 124692                // '{' 'switch'\n     || lk == 125204                // '{' 'text'\n     || lk == 127252                // '{' 'to'\n     || lk == 127764                // '{' 'treat'\n     || lk == 128276                // '{' 'try'\n     || lk == 128788                // '{' 'tumbling'\n     || lk == 129300                // '{' 'type'\n     || lk == 129812                // '{' 'typeswitch'\n     || lk == 130324                // '{' 'union'\n     || lk == 131348                // '{' 'unordered'\n     || lk == 131860                // '{' 'updating'\n     || lk == 133396                // '{' 'validate'\n     || lk == 133908                // '{' 'value'\n     || lk == 134420                // '{' 'variable'\n     || lk == 134932                // '{' 'version'\n     || lk == 136468                // '{' 'where'\n     || lk == 136980                // '{' 'while'\n     || lk == 138516                // '{' 'with'\n     || lk == 140564                // '{' 'xquery'\n     || lk == 141588                // '{' '{'\n     || lk == 142612                // '{' '{|'\n     || lk == 144660)               // '{' '}'\n    {\n      lk = memoized(14, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_BlockExpr();\n          memoize(14, e0A, -10);\n          lk = -14;\n        }\n        catch (p10A)\n        {\n          lk = -11;\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(14, e0A, -11);\n        }\n      }\n    }\n    switch (lk)\n    {\n    case 8:                         // IntegerLiteral\n    case 9:                         // DecimalLiteral\n    case 10:                        // DoubleLiteral\n    case 11:                        // StringLiteral\n      try_Literal();\n      break;\n    case 31:                        // '$'\n      try_VarRef();\n      break;\n    case 34:                        // '('\n      try_ParenthesizedExpr();\n      break;\n    case 44:                        // '.'\n      try_ContextItemExpr();\n      break;\n    case 17414:                     // EQName^Token '('\n    case 17478:                     // 'after' '('\n    case 17480:                     // 'allowing' '('\n    case 17481:                     // 'ancestor' '('\n    case 17482:                     // 'ancestor-or-self' '('\n    case 17483:                     // 'and' '('\n    case 17485:                     // 'append' '('\n    case 17487:                     // 'as' '('\n    case 17488:                     // 'ascending' '('\n    case 17489:                     // 'at' '('\n    case 17491:                     // 'base-uri' '('\n    case 17492:                     // 'before' '('\n    case 17493:                     // 'boundary-space' '('\n    case 17494:                     // 'break' '('\n    case 17496:                     // 'case' '('\n    case 17497:                     // 'cast' '('\n    case 17498:                     // 'castable' '('\n    case 17499:                     // 'catch' '('\n    case 17501:                     // 'child' '('\n    case 17502:                     // 'collation' '('\n    case 17505:                     // 'constraint' '('\n    case 17506:                     // 'construction' '('\n    case 17509:                     // 'context' '('\n    case 17510:                     // 'continue' '('\n    case 17511:                     // 'copy' '('\n    case 17512:                     // 'copy-namespaces' '('\n    case 17513:                     // 'count' '('\n    case 17514:                     // 'decimal-format' '('\n    case 17516:                     // 'declare' '('\n    case 17517:                     // 'default' '('\n    case 17518:                     // 'delete' '('\n    case 17519:                     // 'descendant' '('\n    case 17520:                     // 'descendant-or-self' '('\n    case 17521:                     // 'descending' '('\n    case 17526:                     // 'div' '('\n    case 17527:                     // 'document' '('\n    case 17530:                     // 'else' '('\n    case 17531:                     // 'empty' '('\n    case 17533:                     // 'encoding' '('\n    case 17534:                     // 'end' '('\n    case 17536:                     // 'eq' '('\n    case 17537:                     // 'every' '('\n    case 17539:                     // 'except' '('\n    case 17540:                     // 'exit' '('\n    case 17541:                     // 'external' '('\n    case 17542:                     // 'first' '('\n    case 17543:                     // 'following' '('\n    case 17544:                     // 'following-sibling' '('\n    case 17545:                     // 'for' '('\n    case 17549:                     // 'ft-option' '('\n    case 17554:                     // 'ge' '('\n    case 17556:                     // 'group' '('\n    case 17558:                     // 'gt' '('\n    case 17559:                     // 'idiv' '('\n    case 17561:                     // 'import' '('\n    case 17562:                     // 'in' '('\n    case 17563:                     // 'index' '('\n    case 17567:                     // 'insert' '('\n    case 17568:                     // 'instance' '('\n    case 17569:                     // 'integrity' '('\n    case 17570:                     // 'intersect' '('\n    case 17571:                     // 'into' '('\n    case 17572:                     // 'is' '('\n    case 17574:                     // 'json' '('\n    case 17578:                     // 'last' '('\n    case 17579:                     // 'lax' '('\n    case 17580:                     // 'le' '('\n    case 17582:                     // 'let' '('\n    case 17584:                     // 'loop' '('\n    case 17586:                     // 'lt' '('\n    case 17588:                     // 'mod' '('\n    case 17589:                     // 'modify' '('\n    case 17590:                     // 'module' '('\n    case 17592:                     // 'namespace' '('\n    case 17594:                     // 'ne' '('\n    case 17600:                     // 'nodes' '('\n    case 17602:                     // 'object' '('\n    case 17606:                     // 'only' '('\n    case 17607:                     // 'option' '('\n    case 17608:                     // 'or' '('\n    case 17609:                     // 'order' '('\n    case 17610:                     // 'ordered' '('\n    case 17611:                     // 'ordering' '('\n    case 17614:                     // 'parent' '('\n    case 17620:                     // 'preceding' '('\n    case 17621:                     // 'preceding-sibling' '('\n    case 17626:                     // 'rename' '('\n    case 17627:                     // 'replace' '('\n    case 17628:                     // 'return' '('\n    case 17629:                     // 'returning' '('\n    case 17630:                     // 'revalidation' '('\n    case 17632:                     // 'satisfies' '('\n    case 17633:                     // 'schema' '('\n    case 17636:                     // 'score' '('\n    case 17637:                     // 'self' '('\n    case 17642:                     // 'sliding' '('\n    case 17643:                     // 'some' '('\n    case 17644:                     // 'stable' '('\n    case 17645:                     // 'start' '('\n    case 17648:                     // 'strict' '('\n    case 17656:                     // 'to' '('\n    case 17657:                     // 'treat' '('\n    case 17658:                     // 'try' '('\n    case 17659:                     // 'tumbling' '('\n    case 17660:                     // 'type' '('\n    case 17662:                     // 'union' '('\n    case 17664:                     // 'unordered' '('\n    case 17665:                     // 'updating' '('\n    case 17668:                     // 'validate' '('\n    case 17669:                     // 'value' '('\n    case 17670:                     // 'variable' '('\n    case 17671:                     // 'version' '('\n    case 17674:                     // 'where' '('\n    case 17675:                     // 'while' '('\n    case 17678:                     // 'with' '('\n    case 17682:                     // 'xquery' '('\n      try_FunctionCall();\n      break;\n    case 141514:                    // 'ordered' '{'\n      try_OrderedExpr();\n      break;\n    case 141568:                    // 'unordered' '{'\n      try_UnorderedExpr();\n      break;\n    case 32:                        // '%'\n    case 78:                        // 'array'\n    case 120:                       // 'document-node'\n    case 124:                       // 'empty-sequence'\n    case 145:                       // 'function'\n    case 152:                       // 'if'\n    case 165:                       // 'item'\n    case 167:                       // 'json-item'\n    case 185:                       // 'namespace-node'\n    case 191:                       // 'node'\n    case 226:                       // 'schema-attribute'\n    case 227:                       // 'schema-element'\n    case 242:                       // 'structured-item'\n    case 243:                       // 'switch'\n    case 253:                       // 'typeswitch'\n    case 14854:                     // EQName^Token '#'\n    case 14918:                     // 'after' '#'\n    case 14920:                     // 'allowing' '#'\n    case 14921:                     // 'ancestor' '#'\n    case 14922:                     // 'ancestor-or-self' '#'\n    case 14923:                     // 'and' '#'\n    case 14925:                     // 'append' '#'\n    case 14927:                     // 'as' '#'\n    case 14928:                     // 'ascending' '#'\n    case 14929:                     // 'at' '#'\n    case 14930:                     // 'attribute' '#'\n    case 14931:                     // 'base-uri' '#'\n    case 14932:                     // 'before' '#'\n    case 14933:                     // 'boundary-space' '#'\n    case 14934:                     // 'break' '#'\n    case 14936:                     // 'case' '#'\n    case 14937:                     // 'cast' '#'\n    case 14938:                     // 'castable' '#'\n    case 14939:                     // 'catch' '#'\n    case 14941:                     // 'child' '#'\n    case 14942:                     // 'collation' '#'\n    case 14944:                     // 'comment' '#'\n    case 14945:                     // 'constraint' '#'\n    case 14946:                     // 'construction' '#'\n    case 14949:                     // 'context' '#'\n    case 14950:                     // 'continue' '#'\n    case 14951:                     // 'copy' '#'\n    case 14952:                     // 'copy-namespaces' '#'\n    case 14953:                     // 'count' '#'\n    case 14954:                     // 'decimal-format' '#'\n    case 14956:                     // 'declare' '#'\n    case 14957:                     // 'default' '#'\n    case 14958:                     // 'delete' '#'\n    case 14959:                     // 'descendant' '#'\n    case 14960:                     // 'descendant-or-self' '#'\n    case 14961:                     // 'descending' '#'\n    case 14966:                     // 'div' '#'\n    case 14967:                     // 'document' '#'\n    case 14969:                     // 'element' '#'\n    case 14970:                     // 'else' '#'\n    case 14971:                     // 'empty' '#'\n    case 14973:                     // 'encoding' '#'\n    case 14974:                     // 'end' '#'\n    case 14976:                     // 'eq' '#'\n    case 14977:                     // 'every' '#'\n    case 14979:                     // 'except' '#'\n    case 14980:                     // 'exit' '#'\n    case 14981:                     // 'external' '#'\n    case 14982:                     // 'first' '#'\n    case 14983:                     // 'following' '#'\n    case 14984:                     // 'following-sibling' '#'\n    case 14985:                     // 'for' '#'\n    case 14989:                     // 'ft-option' '#'\n    case 14994:                     // 'ge' '#'\n    case 14996:                     // 'group' '#'\n    case 14998:                     // 'gt' '#'\n    case 14999:                     // 'idiv' '#'\n    case 15001:                     // 'import' '#'\n    case 15002:                     // 'in' '#'\n    case 15003:                     // 'index' '#'\n    case 15007:                     // 'insert' '#'\n    case 15008:                     // 'instance' '#'\n    case 15009:                     // 'integrity' '#'\n    case 15010:                     // 'intersect' '#'\n    case 15011:                     // 'into' '#'\n    case 15012:                     // 'is' '#'\n    case 15014:                     // 'json' '#'\n    case 15018:                     // 'last' '#'\n    case 15019:                     // 'lax' '#'\n    case 15020:                     // 'le' '#'\n    case 15022:                     // 'let' '#'\n    case 15024:                     // 'loop' '#'\n    case 15026:                     // 'lt' '#'\n    case 15028:                     // 'mod' '#'\n    case 15029:                     // 'modify' '#'\n    case 15030:                     // 'module' '#'\n    case 15032:                     // 'namespace' '#'\n    case 15034:                     // 'ne' '#'\n    case 15040:                     // 'nodes' '#'\n    case 15042:                     // 'object' '#'\n    case 15046:                     // 'only' '#'\n    case 15047:                     // 'option' '#'\n    case 15048:                     // 'or' '#'\n    case 15049:                     // 'order' '#'\n    case 15050:                     // 'ordered' '#'\n    case 15051:                     // 'ordering' '#'\n    case 15054:                     // 'parent' '#'\n    case 15060:                     // 'preceding' '#'\n    case 15061:                     // 'preceding-sibling' '#'\n    case 15064:                     // 'processing-instruction' '#'\n    case 15066:                     // 'rename' '#'\n    case 15067:                     // 'replace' '#'\n    case 15068:                     // 'return' '#'\n    case 15069:                     // 'returning' '#'\n    case 15070:                     // 'revalidation' '#'\n    case 15072:                     // 'satisfies' '#'\n    case 15073:                     // 'schema' '#'\n    case 15076:                     // 'score' '#'\n    case 15077:                     // 'self' '#'\n    case 15082:                     // 'sliding' '#'\n    case 15083:                     // 'some' '#'\n    case 15084:                     // 'stable' '#'\n    case 15085:                     // 'start' '#'\n    case 15088:                     // 'strict' '#'\n    case 15092:                     // 'text' '#'\n    case 15096:                     // 'to' '#'\n    case 15097:                     // 'treat' '#'\n    case 15098:                     // 'try' '#'\n    case 15099:                     // 'tumbling' '#'\n    case 15100:                     // 'type' '#'\n    case 15102:                     // 'union' '#'\n    case 15104:                     // 'unordered' '#'\n    case 15105:                     // 'updating' '#'\n    case 15108:                     // 'validate' '#'\n    case 15109:                     // 'value' '#'\n    case 15110:                     // 'variable' '#'\n    case 15111:                     // 'version' '#'\n    case 15114:                     // 'where' '#'\n    case 15115:                     // 'while' '#'\n    case 15118:                     // 'with' '#'\n    case 15122:                     // 'xquery' '#'\n      try_FunctionItemExpr();\n      break;\n    case -10:\n    case 27412:                     // '{' ';'\n      try_BlockExpr();\n      break;\n    case -11:\n      try_ObjectConstructor();\n      break;\n    case 68:                        // '['\n      try_ArrayConstructor();\n      break;\n    case 278:                       // '{|'\n      try_JSONSimpleObjectUnion();\n      break;\n    case -14:\n      break;\n    default:\n      try_Constructor();\n    }\n  }\n\n  function parse_JSONSimpleObjectUnion()\n  {\n    eventHandler.startNonterminal(\"JSONSimpleObjectUnion\", e0);\n    shift(278);                     // '{|'\n    lookahead1W(272);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|' | '|}'\n    if (l1 != 281)                  // '|}'\n    {\n      whitespace();\n      parse_Expr();\n    }\n    shift(281);                     // '|}'\n    eventHandler.endNonterminal(\"JSONSimpleObjectUnion\", e0);\n  }\n\n  function try_JSONSimpleObjectUnion()\n  {\n    shiftT(278);                    // '{|'\n    lookahead1W(272);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|' | '|}'\n    if (l1 != 281)                  // '|}'\n    {\n      try_Expr();\n    }\n    shiftT(281);                    // '|}'\n  }\n\n  function parse_ObjectConstructor()\n  {\n    eventHandler.startNonterminal(\"ObjectConstructor\", e0);\n    shift(276);                     // '{'\n    lookahead1W(273);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|' | '}'\n    if (l1 != 282)                  // '}'\n    {\n      whitespace();\n      parse_PairConstructorList();\n    }\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"ObjectConstructor\", e0);\n  }\n\n  function try_ObjectConstructor()\n  {\n    shiftT(276);                    // '{'\n    lookahead1W(273);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|' | '}'\n    if (l1 != 282)                  // '}'\n    {\n      try_PairConstructorList();\n    }\n    shiftT(282);                    // '}'\n  }\n\n  function parse_PairConstructorList()\n  {\n    eventHandler.startNonterminal(\"PairConstructorList\", e0);\n    parse_PairConstructor();\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shift(41);                    // ','\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      whitespace();\n      parse_PairConstructor();\n    }\n    eventHandler.endNonterminal(\"PairConstructorList\", e0);\n  }\n\n  function try_PairConstructorList()\n  {\n    try_PairConstructor();\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shiftT(41);                   // ','\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n      try_PairConstructor();\n    }\n  }\n\n  function parse_PairConstructor()\n  {\n    eventHandler.startNonterminal(\"PairConstructor\", e0);\n    parse_ExprSingle();\n    shift(49);                      // ':'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"PairConstructor\", e0);\n  }\n\n  function try_PairConstructor()\n  {\n    try_ExprSingle();\n    shiftT(49);                     // ':'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    try_ExprSingle();\n  }\n\n  function parse_ArrayConstructor()\n  {\n    eventHandler.startNonterminal(\"ArrayConstructor\", e0);\n    shift(68);                      // '['\n    lookahead1W(271);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | ']' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    if (l1 != 69)                   // ']'\n    {\n      whitespace();\n      parse_Expr();\n    }\n    shift(69);                      // ']'\n    eventHandler.endNonterminal(\"ArrayConstructor\", e0);\n  }\n\n  function try_ArrayConstructor()\n  {\n    shiftT(68);                     // '['\n    lookahead1W(271);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | '<' | '<!--' | '<?' | '@' | '[' | ']' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|'\n    if (l1 != 69)                   // ']'\n    {\n      try_Expr();\n    }\n    shiftT(69);                     // ']'\n  }\n\n  function parse_BlockExpr()\n  {\n    eventHandler.startNonterminal(\"BlockExpr\", e0);\n    shift(276);                     // '{'\n    lookahead1W(276);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | ';' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|' | '}'\n    whitespace();\n    parse_StatementsAndOptionalExpr();\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"BlockExpr\", e0);\n  }\n\n  function try_BlockExpr()\n  {\n    shiftT(276);                    // '{'\n    lookahead1W(276);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | ';' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|' | '}'\n    try_StatementsAndOptionalExpr();\n    shiftT(282);                    // '}'\n  }\n\n  function parse_FunctionDecl()\n  {\n    eventHandler.startNonterminal(\"FunctionDecl\", e0);\n    shift(145);                     // 'function'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    whitespace();\n    parse_EQName();\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(94);                // S^WS | '$' | '(:' | ')'\n    if (l1 == 31)                   // '$'\n    {\n      whitespace();\n      parse_ParamList();\n    }\n    shift(37);                      // ')'\n    lookahead1W(148);               // S^WS | '(:' | 'as' | 'external' | '{'\n    if (l1 == 79)                   // 'as'\n    {\n      whitespace();\n      parse_ReturnType();\n    }\n    lookahead1W(118);               // S^WS | '(:' | 'external' | '{'\n    switch (l1)\n    {\n    case 276:                       // '{'\n      shift(276);                   // '{'\n      lookahead1W(276);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // StringLiteral | S^WS | '$' | '%' | '(' | '(#' | '(:' | '+' | '-' | '.' | '..' |\n                                    // '/' | '//' | ';' | '<' | '<!--' | '<?' | '@' | '[' | 'after' | 'allowing' |\n                                    // 'ancestor' | 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' |\n                                    // 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' |\n                                    // 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' |\n                                    // 'comment' | 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery' | '{' | '{|' | '}'\n      whitespace();\n      parse_StatementsAndOptionalExpr();\n      shift(282);                   // '}'\n      break;\n    default:\n      shift(133);                   // 'external'\n    }\n    eventHandler.endNonterminal(\"FunctionDecl\", e0);\n  }\n\n  function parse_ReturnType()\n  {\n    eventHandler.startNonterminal(\"ReturnType\", e0);\n    shift(79);                      // 'as'\n    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n                                    // 'ancestor-or-self' | 'and' | 'append' | 'array' | 'as' | 'ascending' | 'at' |\n                                    // 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' | 'case' |\n                                    // 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'json' |\n                                    // 'json-item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' |\n                                    // 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'object' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'structured-item' | 'switch' | 'text' | 'to' |\n                                    // 'treat' | 'try' | 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' |\n                                    // 'updating' | 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' |\n                                    // 'with' | 'xquery'\n    whitespace();\n    parse_SequenceType();\n    eventHandler.endNonterminal(\"ReturnType\", e0);\n  }\n\n  function shift(t)\n  {\n    if (l1 == t)\n    {\n      whitespace();\n      eventHandler.terminal(XQueryParser.TOKEN[l1], b1, e1 > size ? size : e1);\n      b0 = b1; e0 = e1; l1 = l2; if (l1 != 0) {\n      b1 = b2; e1 = e2; l2 = 0; }\n    }\n    else\n    {\n      error(b1, e1, 0, l1, t);\n    }\n  }\n\n  function shiftT(t)\n  {\n    if (l1 == t)\n    {\n      b0 = b1; e0 = e1; l1 = l2; if (l1 != 0) {\n      b1 = b2; e1 = e2; l2 = 0; }\n    }\n    else\n    {\n      error(b1, e1, 0, l1, t);\n    }\n  }\n\n  function skip(code)\n  {\n    var b0W = b0; var e0W = e0; var l1W = l1;\n    var b1W = b1; var e1W = e1;\n\n    l1 = code; b1 = begin; e1 = end;\n    l2 = 0;\n\n    try_Whitespace();\n\n    b0 = b0W; e0 = e0W; l1 = l1W; if (l1 != 0) {\n    b1 = b1W; e1 = e1W; }\n  }\n\n  function whitespace()\n  {\n    if (e0 != b1)\n    {\n      eventHandler.whitespace(e0, b1);\n      e0 = b1;\n    }\n  }\n\n  function matchW(set)\n  {\n    var code;\n    for (;;)\n    {\n      code = match(set);\n      if (code != 22)               // S^WS\n      {\n        if (code != 36)             // '(:'\n        {\n          break;\n        }\n        skip(code);\n      }\n    }\n    return code;\n  }\n\n  function lookahead1W(set)\n  {\n    if (l1 == 0)\n    {\n      l1 = matchW(set);\n      b1 = begin;\n      e1 = end;\n    }\n  }\n\n  function lookahead2W(set)\n  {\n    if (l2 == 0)\n    {\n      l2 = matchW(set);\n      b2 = begin;\n      e2 = end;\n    }\n    lk = (l2 << 9) | l1;\n  }\n\n  function lookahead1(set)\n  {\n    if (l1 == 0)\n    {\n      l1 = match(set);\n      b1 = begin;\n      e1 = end;\n    }\n  }\n\n  function lookahead2(set)\n  {\n    if (l2 == 0)\n    {\n      l2 = match(set);\n      b2 = begin;\n      e2 = end;\n    }\n    lk = (l2 << 9) | l1;\n  }\n\n  function error(b, e, s, l, t)\n  {\n    if (e >= ex)\n    {\n      bx = b;\n      ex = e;\n      sx = s;\n      lx = l;\n      tx = t;\n    }\n    throw new self.ParseException(bx, ex, sx, lx, tx);\n  }\n\n  var lk, b0, e0;\n  var l1, b1, e1;\n  var l2, b2, e2;\n  var bx, ex, sx, lx, tx;\n  var eventHandler;\n  var memo;\n\n  function memoize(i, e, v)\n  {\n    memo[(e << 4) + i] = v;\n  }\n\n  function memoized(i, e)\n  {\n    var v = memo[(e << 4) + i];\n    return typeof v != \"undefined\" ? v : 0;\n  }\n\n  var input;\n  var size;\n  var begin;\n  var end;\n\n  function match(tokenSetId)\n  {\n    var nonbmp = false;\n    begin = end;\n    var current = end;\n    var result = XQueryParser.INITIAL[tokenSetId];\n    var state = 0;\n\n    for (var code = result & 4095; code != 0; )\n    {\n      var charclass;\n      var c0 = current < size ? input.charCodeAt(current) : 0;\n      ++current;\n      if (c0 < 0x80)\n      {\n        charclass = XQueryParser.MAP0[c0];\n      }\n      else if (c0 < 0xd800)\n      {\n        var c1 = c0 >> 4;\n        charclass = XQueryParser.MAP1[(c0 & 15) + XQueryParser.MAP1[(c1 & 31) + XQueryParser.MAP1[c1 >> 5]]];\n      }\n      else\n      {\n        if (c0 < 0xdc00)\n        {\n          var c1 = current < size ? input.charCodeAt(current) : 0;\n          if (c1 >= 0xdc00 && c1 < 0xe000)\n          {\n            ++current;\n            c0 = ((c0 & 0x3ff) << 10) + (c1 & 0x3ff) + 0x10000;\n            nonbmp = true;\n          }\n        }\n        var lo = 0, hi = 5;\n        for (var m = 3; ; m = (hi + lo) >> 1)\n        {\n          if (XQueryParser.MAP2[m] > c0) hi = m - 1;\n          else if (XQueryParser.MAP2[6 + m] < c0) lo = m + 1;\n          else {charclass = XQueryParser.MAP2[12 + m]; break;}\n          if (lo > hi) {charclass = 0; break;}\n        }\n      }\n\n      state = code;\n      var i0 = (charclass << 12) + code - 1;\n      code = XQueryParser.TRANSITION[(i0 & 15) + XQueryParser.TRANSITION[i0 >> 4]];\n\n      if (code > 4095)\n      {\n        result = code;\n        code &= 4095;\n        end = current;\n      }\n    }\n\n    result >>= 12;\n    if (result == 0)\n    {\n      end = current - 1;\n      var c1 = end < size ? input.charCodeAt(end) : 0;\n      if (c1 >= 0xdc00 && c1 < 0xe000) --end;\n      return error(begin, end, state, -1, -1);\n    }\n\n    if (nonbmp)\n    {\n      for (var i = result >> 9; i > 0; --i)\n      {\n        --end;\n        var c1 = end < size ? input.charCodeAt(end) : 0;\n        if (c1 >= 0xdc00 && c1 < 0xe000) --end;\n      }\n    }\n    else\n    {\n      end -= result >> 9;\n    }\n\n    return (result & 511) - 1;\n  }\n}\n\nXQueryParser.getTokenSet = function(tokenSetId)\n{\n  var set = [];\n  var s = tokenSetId < 0 ? - tokenSetId : XQueryParser.INITIAL[tokenSetId] & 4095;\n  for (var i = 0; i < 284; i += 32)\n  {\n    var j = i;\n    var i0 = (i >> 5) * 3612 + s - 1;\n    var i1 = i0 >> 2;\n    var i2 = i1 >> 2;\n    var f = XQueryParser.EXPECTED[(i0 & 3) + XQueryParser.EXPECTED[(i1 & 3) + XQueryParser.EXPECTED[(i2 & 15) + XQueryParser.EXPECTED[i2 >> 4]]]];\n    for ( ; f != 0; f >>>= 1, ++j)\n    {\n      if ((f & 1) != 0)\n      {\n        set.push(XQueryParser.TOKEN[j]);\n      }\n    }\n  }\n  return set;\n};\n\nXQueryParser.MAP0 =\n[\n  /*   0 */ 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4,\n  /*  36 */ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 19, 20, 21, 22, 23,\n  /*  64 */ 24, 25, 26, 27, 28, 29, 26, 30, 30, 30, 30, 30, 31, 32, 33, 30, 30, 34, 30, 30, 35, 30, 30, 30, 36, 30, 30,\n  /*  91 */ 37, 38, 39, 38, 30, 38, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,\n  /* 118 */ 61, 62, 63, 64, 65, 66, 67, 68, 38, 38\n];\n\nXQueryParser.MAP1 =\n[\n  /*   0 */ 108, 124, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 156, 181, 181, 181, 181,\n  /*  21 */ 181, 214, 215, 213, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214,\n  /*  42 */ 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214,\n  /*  63 */ 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214,\n  /*  84 */ 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214,\n  /* 105 */ 214, 214, 214, 247, 261, 277, 293, 309, 355, 371, 387, 423, 423, 423, 415, 339, 331, 339, 331, 339, 339,\n  /* 126 */ 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 440, 440, 440, 440, 440, 440, 440,\n  /* 147 */ 324, 339, 339, 339, 339, 339, 339, 339, 339, 401, 423, 423, 424, 422, 423, 423, 339, 339, 339, 339, 339,\n  /* 168 */ 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 423, 423, 423, 423, 423, 423, 423, 423,\n  /* 189 */ 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423,\n  /* 210 */ 423, 423, 423, 338, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339,\n  /* 231 */ 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 423, 70, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 256 */ 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,\n  /* 290 */ 14, 15, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 26, 30,\n  /* 317 */ 30, 30, 30, 30, 31, 32, 33, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 38, 30, 30, 30, 30, 30,\n  /* 344 */ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 34, 30, 30, 35, 30, 30, 30, 36, 30, 30, 37, 38, 39, 38, 30,\n  /* 371 */ 38, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,\n  /* 398 */ 66, 67, 68, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 30, 30, 38, 38, 38, 38, 38, 38, 38, 69, 38, 38,\n  /* 425 */ 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,\n  /* 452 */ 69, 69, 69, 69\n];\n\nXQueryParser.MAP2 =\n[\n  /*  0 */ 57344, 63744, 64976, 65008, 65536, 983040, 63743, 64975, 65007, 65533, 983039, 1114111, 38, 30, 38, 30, 30,\n  /* 17 */ 38\n];\n\nXQueryParser.INITIAL =\n[\n  /*   0 */ 1, 12290, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,\n  /*  28 */ 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,\n  /*  55 */ 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,\n  /*  82 */ 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107,\n  /* 107 */ 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,\n  /* 128 */ 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,\n  /* 149 */ 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170,\n  /* 170 */ 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,\n  /* 191 */ 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212,\n  /* 212 */ 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233,\n  /* 233 */ 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254,\n  /* 254 */ 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275,\n  /* 275 */ 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286\n];\n\nXQueryParser.TRANSITION =\n[\n  /*     0 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*    15 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*    30 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*    45 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*    60 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*    75 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*    90 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*   105 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*   120 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*   135 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*   150 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*   165 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*   180 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*   195 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*   210 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*   225 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*   240 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*   255 */ 38672, 25307, 18176, 18180, 18180, 18180, 18210, 18180, 18180, 18180, 18180, 18222, 18180, 18180, 18180,\n  /*   270 */ 18180, 18198, 18180, 18182, 18238, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 38672,\n  /*   285 */ 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 29641,\n  /*   300 */ 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503,\n  /*   315 */ 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609,\n  /*   330 */ 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835,\n  /*   345 */ 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672,\n  /*   360 */ 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248,\n  /*   375 */ 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393,\n  /*   390 */ 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647,\n  /*   405 */ 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983,\n  /*   420 */ 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132,\n  /*   435 */ 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374,\n  /*   450 */ 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608,\n  /*   465 */ 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755,\n  /*   480 */ 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*   495 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*   510 */ 38672, 38672, 20939, 38672, 38672, 38672, 38672, 30470, 38672, 38672, 38672, 38672, 42922, 38623, 20771,\n  /*   525 */ 20784, 20796, 20808, 43870, 38625, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 28718, 38672,\n  /*   540 */ 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19553, 19028, 45351, 38672, 18269, 42564,\n  /*   555 */ 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434,\n  /*   570 */ 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574,\n  /*   585 */ 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830,\n  /*   600 */ 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258,\n  /*   615 */ 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222,\n  /*   630 */ 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377,\n  /*   645 */ 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039,\n  /*   660 */ 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994,\n  /*   675 */ 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116,\n  /*   690 */ 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408,\n  /*   705 */ 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171,\n  /*   720 */ 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939,\n  /*   735 */ 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*   750 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*   765 */ 38672, 38672, 38672, 22954, 20869, 38672, 38672, 38672, 37958, 38672, 38672, 36976, 20909, 20888, 38672,\n  /*   780 */ 38672, 38672, 38672, 39926, 20282, 20925, 20958, 38672, 38672, 38672, 43215, 38672, 38672, 25928, 38672,\n  /*   795 */ 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 20997, 38672, 18269,\n  /*   810 */ 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406,\n  /*   825 */ 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672,\n  /*   840 */ 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810,\n  /*   855 */ 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894,\n  /*   870 */ 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185,\n  /*   885 */ 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187,\n  /*   900 */ 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624,\n  /*   915 */ 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976,\n  /*   930 */ 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160,\n  /*   945 */ 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386,\n  /*   960 */ 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589,\n  /*   975 */ 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448,\n  /*   990 */ 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  1005 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  1020 */ 38672, 38672, 38672, 38672, 21013, 21118, 38672, 38672, 38672, 24651, 38672, 38672, 44696, 38672, 42922,\n  /*  1035 */ 38824, 21095, 21058, 21048, 21080, 21111, 48022, 20832, 38672, 38672, 38672, 43215, 21139, 38672, 25530,\n  /*  1050 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 21157, 38672,\n  /*  1065 */ 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670,\n  /*  1080 */ 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672,\n  /*  1095 */ 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 18776, 18792, 20360,\n  /*  1110 */ 18810, 18830, 18835, 19257, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871,\n  /*  1125 */ 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154,\n  /*  1140 */ 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342,\n  /*  1155 */ 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898,\n  /*  1170 */ 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446,\n  /*  1185 */ 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105,\n  /*  1200 */ 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368,\n  /*  1215 */ 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592,\n  /*  1230 */ 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969,\n  /*  1245 */ 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  1260 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  1275 */ 38672, 38672, 38672, 38672, 38672, 20939, 38666, 38672, 38672, 38672, 21880, 38671, 38672, 36460, 38672,\n  /*  1290 */ 21173, 38661, 21224, 38672, 21231, 38672, 42738, 42750, 20832, 38672, 38672, 38672, 43215, 38672, 38672,\n  /*  1305 */ 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351,\n  /*  1320 */ 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462,\n  /*  1335 */ 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591,\n  /*  1350 */ 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792,\n  /*  1365 */ 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855,\n  /*  1380 */ 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934,\n  /*  1395 */ 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712,\n  /*  1410 */ 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931,\n  /*  1425 */ 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921,\n  /*  1440 */ 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679,\n  /*  1455 */ 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402,\n  /*  1470 */ 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548,\n  /*  1485 */ 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711,\n  /*  1500 */ 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  1515 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  1530 */ 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 30470, 21247, 38672, 38672,\n  /*  1545 */ 38672, 28875, 38672, 38672, 21266, 38672, 38672, 21288, 21300, 20832, 38672, 38672, 38672, 43215, 38672,\n  /*  1560 */ 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990,\n  /*  1575 */ 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422,\n  /*  1590 */ 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930,\n  /*  1605 */ 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849,\n  /*  1620 */ 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943,\n  /*  1635 */ 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726,\n  /*  1650 */ 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315,\n  /*  1665 */ 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601,\n  /*  1680 */ 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875,\n  /*  1695 */ 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039,\n  /*  1710 */ 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380,\n  /*  1725 */ 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532,\n  /*  1740 */ 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695,\n  /*  1755 */ 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  1770 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  1785 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 30470, 38672, 38672,\n  /*  1800 */ 38672, 38672, 31059, 38672, 38672, 38672, 38672, 38672, 38672, 24860, 21316, 38672, 38672, 38672, 43215,\n  /*  1815 */ 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418,\n  /*  1830 */ 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403,\n  /*  1845 */ 18422, 18462, 20670, 18988, 50434, 18503, 18525, 21353, 19412, 50440, 18509, 36003, 19232, 20563, 38672,\n  /*  1860 */ 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406,\n  /*  1875 */ 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554,\n  /*  1890 */ 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129,\n  /*  1905 */ 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299,\n  /*  1920 */ 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046,\n  /*  1935 */ 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859,\n  /*  1950 */ 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979,\n  /*  1965 */ 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337,\n  /*  1980 */ 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516,\n  /*  1995 */ 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954,\n  /*  2010 */ 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  2025 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  2040 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 24749, 21390, 38672, 38672, 38672, 23220, 38672,\n  /*  2055 */ 38672, 49687, 45814, 21411, 38672, 38672, 38672, 38672, 41859, 18366, 21448, 21478, 38672, 38672, 38672,\n  /*  2070 */ 43215, 38672, 38672, 50505, 21515, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998,\n  /*  2085 */ 19418, 35990, 46185, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387,\n  /*  2100 */ 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563,\n  /*  2115 */ 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769,\n  /*  2130 */ 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955,\n  /*  2145 */ 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103,\n  /*  2160 */ 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964,\n  /*  2175 */ 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631,\n  /*  2190 */ 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113,\n  /*  2205 */ 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515,\n  /*  2220 */ 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298,\n  /*  2235 */ 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500,\n  /*  2250 */ 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437,\n  /*  2265 */ 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  2280 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  2295 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 21462, 21573, 21537, 21537, 21537, 21580,\n  /*  2310 */ 21532, 21537, 21542, 21615, 21558, 21644, 21596, 21609, 21631, 21657, 21669, 21681, 20832, 38672, 38672,\n  /*  2325 */ 38672, 21337, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794,\n  /*  2340 */ 35998, 19418, 35990, 45351, 38672, 18269, 42564, 21697, 38672, 40144, 38672, 23032, 18306, 18356, 18382,\n  /*  2355 */ 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232,\n  /*  2370 */ 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745,\n  /*  2385 */ 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540,\n  /*  2400 */ 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169,\n  /*  2415 */ 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000,\n  /*  2430 */ 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905,\n  /*  2445 */ 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808,\n  /*  2460 */ 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010,\n  /*  2475 */ 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259,\n  /*  2490 */ 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424,\n  /*  2505 */ 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660,\n  /*  2520 */ 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672,\n  /*  2535 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  2550 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 30462, 38672, 38672, 38672,\n  /*  2565 */ 22025, 23251, 38672, 22249, 23257, 42922, 30462, 38672, 21719, 21725, 21741, 21766, 21750, 21795, 38672,\n  /*  2580 */ 38672, 38672, 46035, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958,\n  /*  2595 */ 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 30475, 38672, 40144, 38672, 23032, 18306, 18356,\n  /*  2610 */ 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003,\n  /*  2625 */ 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753,\n  /*  2640 */ 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839,\n  /*  2655 */ 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062,\n  /*  2670 */ 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273,\n  /*  2685 */ 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938,\n  /*  2700 */ 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771,\n  /*  2715 */ 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383,\n  /*  2730 */ 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223,\n  /*  2745 */ 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497,\n  /*  2760 */ 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945,\n  /*  2775 */ 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672,\n  /*  2790 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  2805 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 24785, 38672, 38672,\n  /*  2820 */ 38672, 30470, 38672, 38672, 38672, 37115, 50393, 21856, 21832, 21850, 21834, 21872, 21896, 21908, 20832,\n  /*  2835 */ 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953,\n  /*  2850 */ 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306,\n  /*  2865 */ 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 21924, 19412, 50440, 18509,\n  /*  2880 */ 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722,\n  /*  2895 */ 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794,\n  /*  2910 */ 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016,\n  /*  2925 */ 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222,\n  /*  2940 */ 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608,\n  /*  2955 */ 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745,\n  /*  2970 */ 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562,\n  /*  2985 */ 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207,\n  /*  3000 */ 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484,\n  /*  3015 */ 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143,\n  /*  3030 */ 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672,\n  /*  3045 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  3060 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672,\n  /*  3075 */ 38672, 38672, 30470, 38672, 38672, 38672, 37301, 25812, 27394, 21985, 22003, 21985, 22017, 27392, 21987,\n  /*  3090 */ 20832, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  3105 */ 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 42072, 38672, 23032,\n  /*  3120 */ 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440,\n  /*  3135 */ 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685,\n  /*  3150 */ 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814,\n  /*  3165 */ 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974,\n  /*  3180 */ 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185,\n  /*  3195 */ 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569,\n  /*  3210 */ 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792,\n  /*  3225 */ 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321,\n  /*  3240 */ 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479,\n  /*  3255 */ 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468,\n  /*  3270 */ 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629,\n  /*  3285 */ 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672,\n  /*  3300 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  3315 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 20981,\n  /*  3330 */ 38672, 38672, 38672, 30470, 24643, 38672, 48413, 22054, 26165, 22041, 22070, 22074, 22074, 22090, 20979,\n  /*  3345 */ 48442, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  3360 */ 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672,\n  /*  3375 */ 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412,\n  /*  3390 */ 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652,\n  /*  3405 */ 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364,\n  /*  3420 */ 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947,\n  /*  3435 */ 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154,\n  /*  3450 */ 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495,\n  /*  3465 */ 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722,\n  /*  3480 */ 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992,\n  /*  3495 */ 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176,\n  /*  3510 */ 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452,\n  /*  3525 */ 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487,\n  /*  3540 */ 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672,\n  /*  3555 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  3570 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22114,\n  /*  3585 */ 38672, 38672, 38672, 38672, 30470, 38672, 38672, 38672, 38672, 42922, 47221, 22137, 22155, 22137, 22169,\n  /*  3600 */ 47219, 22139, 22193, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672,\n  /*  3615 */ 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 22230, 38672, 22247, 38672, 29641, 22265, 42072,\n  /*  3630 */ 33771, 38672, 38672, 38672, 38672, 26929, 22475, 35267, 22475, 22475, 36544, 42277, 22411, 22411, 33858,\n  /*  3645 */ 26727, 37227, 26727, 26727, 35540, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 18609, 24891, 38672,\n  /*  3660 */ 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727,\n  /*  3675 */ 26727, 26727, 26727, 26727, 32919, 33803, 21432, 38031, 38672, 38672, 38672, 38672, 38672, 22291, 38672,\n  /*  3690 */ 26931, 22311, 22475, 22475, 22475, 22475, 33849, 22352, 22411, 35447, 22411, 22411, 33324, 22381, 26727,\n  /*  3705 */ 45449, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 30028, 38672, 38672, 22475, 36607, 22475,\n  /*  3720 */ 22475, 28015, 33854, 22411, 22410, 22411, 22411, 27851, 26727, 45441, 26727, 26727, 22521, 33795, 38672,\n  /*  3735 */ 38672, 22807, 38672, 38672, 28255, 22475, 22475, 38505, 29442, 22411, 22411, 34626, 26485, 26727, 26727,\n  /*  3750 */ 26860, 26998, 22647, 38672, 38672, 22428, 26931, 48359, 22475, 42142, 32794, 22411, 28347, 37402, 26727,\n  /*  3765 */ 22521, 32486, 38672, 18915, 38672, 22451, 22474, 36860, 37042, 22411, 22492, 22517, 22520, 26312, 34036,\n  /*  3780 */ 26929, 42625, 42144, 35207, 26975, 22537, 26310, 35759, 22589, 36765, 22624, 22640, 22663, 22685, 22706,\n  /*  3795 */ 39617, 42139, 28345, 26456, 39814, 47009, 22727, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863,\n  /*  3810 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  3825 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  3840 */ 20939, 38672, 38672, 38672, 38672, 30470, 38672, 38672, 38672, 23092, 42922, 38672, 38672, 38672, 38672,\n  /*  3855 */ 38672, 31140, 31152, 22751, 38672, 38672, 38672, 43215, 38672, 38672, 26131, 38672, 38672, 38672, 38672,\n  /*  3870 */ 38672, 38672, 38672, 28256, 42141, 22411, 26453, 27937, 27268, 22230, 38672, 38672, 38672, 29641, 38672,\n  /*  3885 */ 40144, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 36544, 22411, 22411, 22411,\n  /*  3900 */ 33858, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 18609, 38672,\n  /*  3915 */ 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334,\n  /*  3930 */ 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  3945 */ 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727,\n  /*  3960 */ 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475,\n  /*  3975 */ 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795,\n  /*  3990 */ 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727,\n  /*  4005 */ 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727,\n  /*  4020 */ 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312,\n  /*  4035 */ 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340,\n  /*  4050 */ 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905,\n  /*  4065 */ 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  4080 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  4095 */ 38672, 20939, 22803, 38672, 38672, 38672, 22886, 38672, 38672, 38672, 38672, 42922, 36439, 22823, 22844,\n  /*  4110 */ 22866, 22878, 36438, 22828, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 41329, 38672, 22902,\n  /*  4125 */ 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 29641,\n  /*  4140 */ 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503,\n  /*  4155 */ 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609,\n  /*  4170 */ 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835,\n  /*  4185 */ 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672,\n  /*  4200 */ 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248,\n  /*  4215 */ 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393,\n  /*  4230 */ 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647,\n  /*  4245 */ 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983,\n  /*  4260 */ 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132,\n  /*  4275 */ 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374,\n  /*  4290 */ 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608,\n  /*  4305 */ 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755,\n  /*  4320 */ 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  4335 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  4350 */ 38672, 38672, 20939, 22923, 38672, 38672, 38672, 30470, 38672, 38672, 38672, 23115, 42922, 38672, 38672,\n  /*  4365 */ 38672, 38672, 38672, 26339, 22940, 22970, 38672, 38672, 38672, 43215, 38672, 38672, 23007, 38672, 38672,\n  /*  4380 */ 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 47631, 27268, 22230, 38672, 38672, 38672,\n  /*  4395 */ 29641, 38672, 48650, 23029, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 36544, 22411,\n  /*  4410 */ 22411, 22411, 33858, 26727, 26727, 26727, 26727, 30990, 42723, 23085, 38672, 38672, 38672, 38672, 38672,\n  /*  4425 */ 23048, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411,\n  /*  4440 */ 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 23072, 23108, 38672, 38672, 38672, 38672, 38672,\n  /*  4455 */ 48411, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 46833, 22411, 22411, 22411, 22411, 22411,\n  /*  4470 */ 47864, 26727, 26727, 26727, 26727, 26727, 32918, 41804, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  4485 */ 22475, 22475, 22475, 22475, 43252, 33854, 22411, 22411, 22411, 22411, 48185, 26727, 26727, 26727, 26727,\n  /*  4500 */ 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 23131, 22411, 22411, 22411,\n  /*  4515 */ 36778, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411,\n  /*  4530 */ 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727,\n  /*  4545 */ 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196,\n  /*  4560 */ 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362,\n  /*  4575 */ 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  4590 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  4605 */ 38672, 38672, 38672, 20939, 18878, 38672, 38672, 38672, 35592, 32963, 38672, 38672, 23153, 42922, 37950,\n  /*  4620 */ 35335, 23190, 23196, 23212, 38672, 41919, 23236, 23274, 38672, 38672, 45078, 23291, 38672, 50505, 38672,\n  /*  4635 */ 38672, 38672, 38672, 38672, 38672, 38672, 18953, 25157, 23483, 23350, 24209, 23309, 45351, 38672, 18269,\n  /*  4650 */ 42564, 28228, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19821,\n  /*  4665 */ 23376, 23336, 23369, 23392, 24203, 23434, 23465, 24172, 23726, 19833, 38672, 46930, 18591, 38672, 38672,\n  /*  4680 */ 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 18729, 23481, 23642, 24581,\n  /*  4695 */ 23499, 23504, 24048, 23353, 23520, 23933, 23353, 24164, 23917, 24518, 37554, 48943, 18855, 18871, 18894,\n  /*  4710 */ 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 23536, 23854, 23815, 23561, 23577,\n  /*  4725 */ 23632, 24450, 24255, 23689, 23658, 23674, 23716, 23742, 24268, 30964, 19299, 19315, 28712, 19342, 25187,\n  /*  4740 */ 19377, 19393, 19434, 19464, 19495, 19569, 23773, 23804, 23842, 24040, 23870, 23886, 23449, 23700, 23902,\n  /*  4755 */ 23320, 23949, 23992, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 24027, 23545, 23592,\n  /*  4770 */ 24064, 24137, 24459, 24094, 24110, 23407, 20069, 47383, 20010, 46515, 35979, 20039, 20679, 24126, 24567,\n  /*  4785 */ 24482, 24153, 24188, 23616, 24225, 20191, 20207, 20223, 20259, 20298, 20337, 24284, 24078, 24374, 24300,\n  /*  4800 */ 24330, 24314, 23418, 20424, 20452, 20468, 24361, 23826, 23606, 24390, 24419, 20532, 24435, 24475, 24498,\n  /*  4815 */ 24628, 20608, 23750, 23928, 24403, 20644, 23757, 24508, 20660, 20054, 24345, 20695, 24537, 24597, 24613,\n  /*  4830 */ 24552, 23788, 24240, 23964, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  4845 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  4860 */ 38672, 38672, 38672, 38672, 20939, 39906, 38672, 38672, 38672, 30470, 24672, 38672, 38672, 24667, 26611,\n  /*  4875 */ 24688, 24695, 24695, 24695, 24711, 26910, 24735, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 50505,\n  /*  4890 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672,\n  /*  4905 */ 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670,\n  /*  4920 */ 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672,\n  /*  4935 */ 38672, 37574, 24765, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360,\n  /*  4950 */ 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 20739, 24828, 48943, 18855, 18871,\n  /*  4965 */ 18894, 40258, 24858, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154,\n  /*  4980 */ 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19087, 30964, 19299, 19315, 28712, 19342,\n  /*  4995 */ 25187, 19377, 19393, 19434, 19464, 19495, 24876, 24922, 24938, 19905, 19631, 19046, 24954, 24931, 19898,\n  /*  5010 */ 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 24970, 18446,\n  /*  5025 */ 19976, 19994, 19525, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105,\n  /*  5040 */ 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368,\n  /*  5055 */ 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592,\n  /*  5070 */ 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969,\n  /*  5085 */ 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  5100 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  5115 */ 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 30470, 38672, 38672, 38672, 38672,\n  /*  5130 */ 21250, 35576, 24999, 24999, 24999, 35584, 31668, 31680, 20832, 38672, 38672, 38672, 43215, 38672, 38672,\n  /*  5145 */ 50505, 38672, 38672, 25271, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 19887, 45351,\n  /*  5160 */ 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462,\n  /*  5175 */ 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591,\n  /*  5190 */ 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792,\n  /*  5205 */ 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855,\n  /*  5220 */ 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934,\n  /*  5235 */ 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712,\n  /*  5250 */ 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931,\n  /*  5265 */ 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921,\n  /*  5280 */ 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679,\n  /*  5295 */ 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402,\n  /*  5310 */ 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548,\n  /*  5325 */ 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711,\n  /*  5340 */ 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  5355 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  5370 */ 38672, 38672, 38672, 38672, 38672, 38672, 50381, 27744, 38672, 38672, 38672, 30470, 38672, 38672, 38672,\n  /*  5385 */ 38672, 42922, 40452, 25015, 25015, 25015, 25023, 27746, 40454, 20832, 25047, 38672, 38672, 43215, 38672,\n  /*  5400 */ 38672, 50505, 38672, 38672, 25065, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 20310,\n  /*  5415 */ 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422,\n  /*  5430 */ 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930,\n  /*  5445 */ 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849,\n  /*  5460 */ 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943,\n  /*  5475 */ 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726,\n  /*  5490 */ 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315,\n  /*  5505 */ 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601,\n  /*  5520 */ 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875,\n  /*  5535 */ 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039,\n  /*  5550 */ 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380,\n  /*  5565 */ 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532,\n  /*  5580 */ 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695,\n  /*  5595 */ 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  5610 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  5625 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 50286, 50295, 38672, 38672, 38672, 23056, 38672, 38672,\n  /*  5640 */ 38672, 38672, 42922, 44048, 25088, 25088, 25088, 25096, 46630, 44050, 25120, 38672, 38672, 38672, 43215,\n  /*  5655 */ 38672, 38672, 50505, 38672, 38672, 18699, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418,\n  /*  5670 */ 35990, 25136, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403,\n  /*  5685 */ 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672,\n  /*  5700 */ 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406,\n  /*  5715 */ 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554,\n  /*  5730 */ 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129,\n  /*  5745 */ 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299,\n  /*  5760 */ 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046,\n  /*  5775 */ 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859,\n  /*  5790 */ 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979,\n  /*  5805 */ 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337,\n  /*  5820 */ 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516,\n  /*  5835 */ 20532, 20548, 20592, 20589, 50171, 25152, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954,\n  /*  5850 */ 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  5865 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  5880 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25173, 38672, 38672, 38672, 38672, 30470, 25218,\n  /*  5895 */ 38672, 38672, 21395, 32346, 38672, 38672, 38672, 25210, 25237, 21393, 25221, 25256, 38672, 38672, 38672,\n  /*  5910 */ 43215, 38672, 38672, 50505, 22214, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998,\n  /*  5925 */ 19206, 20349, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387,\n  /*  5940 */ 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563,\n  /*  5955 */ 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769,\n  /*  5970 */ 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955,\n  /*  5985 */ 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103,\n  /*  6000 */ 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964,\n  /*  6015 */ 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631,\n  /*  6030 */ 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113,\n  /*  6045 */ 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515,\n  /*  6060 */ 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298,\n  /*  6075 */ 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500,\n  /*  6090 */ 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437,\n  /*  6105 */ 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  6120 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  6135 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 30470,\n  /*  6150 */ 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 38672, 41563, 25293, 20832, 38672, 38672,\n  /*  6165 */ 38672, 43215, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794,\n  /*  6180 */ 35998, 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382,\n  /*  6195 */ 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232,\n  /*  6210 */ 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745,\n  /*  6225 */ 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540,\n  /*  6240 */ 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169,\n  /*  6255 */ 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000,\n  /*  6270 */ 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905,\n  /*  6285 */ 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808,\n  /*  6300 */ 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010,\n  /*  6315 */ 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259,\n  /*  6330 */ 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424,\n  /*  6345 */ 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660,\n  /*  6360 */ 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672,\n  /*  6375 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  6390 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672,\n  /*  6405 */ 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 44448, 27298, 33333, 25344, 38672,\n  /*  6420 */ 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141,\n  /*  6435 */ 22411, 26453, 44280, 27268, 25375, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  6450 */ 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727,\n  /*  6465 */ 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 48405, 38672, 38672, 38672, 38672, 28258, 22475,\n  /*  6480 */ 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727,\n  /*  6495 */ 32919, 30349, 25414, 38672, 38672, 38672, 38672, 38672, 48411, 38672, 38672, 26931, 22475, 22475, 22475,\n  /*  6510 */ 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918,\n  /*  6525 */ 41804, 38672, 38672, 38672, 38672, 34976, 38672, 38672, 22475, 22475, 22475, 22475, 33754, 33854, 22411,\n  /*  6540 */ 22411, 22411, 22411, 31454, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672,\n  /*  6555 */ 28255, 22475, 22475, 22475, 23131, 22411, 22411, 22411, 36778, 26727, 26727, 26727, 26998, 46887, 38672,\n  /*  6570 */ 38672, 25437, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672,\n  /*  6585 */ 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411,\n  /*  6600 */ 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456,\n  /*  6615 */ 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672,\n  /*  6630 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  6645 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672,\n  /*  6660 */ 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 44448, 27298, 33333, 25344,\n  /*  6675 */ 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256,\n  /*  6690 */ 42141, 22411, 26453, 44280, 27268, 25375, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672,\n  /*  6705 */ 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727,\n  /*  6720 */ 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 48405, 38672, 38672, 38672, 38672, 28258,\n  /*  6735 */ 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727,\n  /*  6750 */ 26727, 32919, 30349, 25414, 38672, 38672, 38672, 38672, 38672, 48411, 38672, 38672, 26931, 22475, 22475,\n  /*  6765 */ 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727,\n  /*  6780 */ 32918, 41804, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 33754, 33854,\n  /*  6795 */ 22411, 22411, 22411, 22411, 31454, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672,\n  /*  6810 */ 38672, 28255, 22475, 22475, 22475, 23131, 22411, 22411, 22411, 36778, 26727, 26727, 26727, 26998, 46887,\n  /*  6825 */ 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672,\n  /*  6840 */ 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144,\n  /*  6855 */ 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345,\n  /*  6870 */ 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672,\n  /*  6885 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  6900 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672,\n  /*  6915 */ 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 44448, 27298, 33333,\n  /*  6930 */ 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  6945 */ 28256, 42141, 22411, 26453, 44280, 27268, 25375, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672,\n  /*  6960 */ 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727,\n  /*  6975 */ 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 48405, 30057, 38672, 38672, 38672,\n  /*  6990 */ 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727,\n  /*  7005 */ 26727, 26727, 32919, 30349, 25414, 38672, 38672, 38672, 38672, 38672, 48411, 38672, 38672, 26931, 22475,\n  /*  7020 */ 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727,\n  /*  7035 */ 26727, 32918, 41804, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 33754,\n  /*  7050 */ 33854, 22411, 22411, 22411, 22411, 31454, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672,\n  /*  7065 */ 38672, 38672, 28255, 22475, 22475, 22475, 23131, 22411, 22411, 22411, 36778, 26727, 26727, 26727, 26998,\n  /*  7080 */ 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313,\n  /*  7095 */ 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475,\n  /*  7110 */ 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139,\n  /*  7125 */ 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672,\n  /*  7140 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  7155 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672,\n  /*  7170 */ 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 44448, 27298,\n  /*  7185 */ 33333, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  7200 */ 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375, 38672, 38672, 38672, 29641, 38672, 38672, 38672,\n  /*  7215 */ 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727,\n  /*  7230 */ 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 48405, 38672, 38672, 38672,\n  /*  7245 */ 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727,\n  /*  7260 */ 26727, 26727, 26727, 32919, 30349, 25414, 38672, 38672, 38672, 38672, 38672, 25455, 38672, 38672, 26931,\n  /*  7275 */ 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727,\n  /*  7290 */ 26727, 26727, 32918, 41804, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475,\n  /*  7305 */ 33754, 33854, 22411, 22411, 22411, 22411, 31454, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672,\n  /*  7320 */ 38672, 38672, 38672, 28255, 22475, 22475, 22475, 23131, 22411, 22411, 22411, 36778, 26727, 26727, 26727,\n  /*  7335 */ 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521,\n  /*  7350 */ 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929,\n  /*  7365 */ 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617,\n  /*  7380 */ 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672,\n  /*  7395 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  7410 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323,\n  /*  7425 */ 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 44448,\n  /*  7440 */ 27298, 33333, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 40102, 38672, 38672, 38672, 38672, 38672,\n  /*  7455 */ 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375, 38672, 38672, 38672, 29641, 38672, 49130,\n  /*  7470 */ 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690,\n  /*  7485 */ 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 48405, 38672, 38672,\n  /*  7500 */ 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727,\n  /*  7515 */ 26727, 26727, 26727, 26727, 32919, 30349, 25414, 38672, 38672, 38672, 38672, 38672, 48411, 38672, 38672,\n  /*  7530 */ 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727,\n  /*  7545 */ 26727, 26727, 26727, 32918, 41804, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475,\n  /*  7560 */ 22475, 33754, 33854, 22411, 22411, 22411, 22411, 31454, 26727, 26727, 26727, 26727, 22521, 33795, 38672,\n  /*  7575 */ 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 23131, 22411, 22411, 22411, 36778, 26727, 26727,\n  /*  7590 */ 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727,\n  /*  7605 */ 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036,\n  /*  7620 */ 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976,\n  /*  7635 */ 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863,\n  /*  7650 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  7665 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  7680 */ 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672,\n  /*  7695 */ 44448, 27298, 33333, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  7710 */ 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375, 38672, 38672, 38672, 29641, 38672,\n  /*  7725 */ 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411,\n  /*  7740 */ 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  7755 */ 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334,\n  /*  7770 */ 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  7785 */ 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727,\n  /*  7800 */ 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475,\n  /*  7815 */ 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795,\n  /*  7830 */ 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727,\n  /*  7845 */ 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727,\n  /*  7860 */ 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312,\n  /*  7875 */ 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340,\n  /*  7890 */ 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905,\n  /*  7905 */ 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  7920 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  7935 */ 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672,\n  /*  7950 */ 38672, 44448, 27298, 33333, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  7965 */ 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25482, 38672, 38672, 38672, 29641,\n  /*  7980 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411,\n  /*  7995 */ 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  8010 */ 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411,\n  /*  8025 */ 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  8040 */ 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324,\n  /*  8055 */ 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475,\n  /*  8070 */ 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521,\n  /*  8085 */ 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485,\n  /*  8100 */ 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347,\n  /*  8115 */ 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520,\n  /*  8130 */ 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435,\n  /*  8145 */ 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357,\n  /*  8160 */ 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  8175 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  8190 */ 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672,\n  /*  8205 */ 38672, 38672, 44448, 27298, 33333, 25500, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672,\n  /*  8220 */ 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375, 38672, 38672, 38672,\n  /*  8235 */ 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411,\n  /*  8250 */ 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  8265 */ 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411,\n  /*  8280 */ 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  8295 */ 38672, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411,\n  /*  8310 */ 33324, 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  8325 */ 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727,\n  /*  8340 */ 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411,\n  /*  8355 */ 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411,\n  /*  8370 */ 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727,\n  /*  8385 */ 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196,\n  /*  8400 */ 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362,\n  /*  8415 */ 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  8430 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  8445 */ 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38220,\n  /*  8460 */ 38672, 38672, 38672, 44448, 27298, 33333, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672,\n  /*  8475 */ 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375, 38672, 38672,\n  /*  8490 */ 38672, 29641, 38672, 38672, 38672, 25563, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393,\n  /*  8505 */ 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672,\n  /*  8520 */ 38672, 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411,\n  /*  8535 */ 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672,\n  /*  8550 */ 38672, 38672, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411,\n  /*  8565 */ 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  8580 */ 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727,\n  /*  8595 */ 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411,\n  /*  8610 */ 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411,\n  /*  8625 */ 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977,\n  /*  8640 */ 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978,\n  /*  8655 */ 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538,\n  /*  8670 */ 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  8685 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  8700 */ 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922,\n  /*  8715 */ 38672, 38672, 38672, 38672, 28464, 25582, 25594, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672,\n  /*  8730 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375, 38672,\n  /*  8745 */ 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475,\n  /*  8760 */ 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672,\n  /*  8775 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411,\n  /*  8790 */ 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672,\n  /*  8805 */ 38672, 38672, 38672, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411,\n  /*  8820 */ 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672,\n  /*  8835 */ 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727,\n  /*  8850 */ 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411,\n  /*  8865 */ 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142,\n  /*  8880 */ 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411,\n  /*  8895 */ 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411,\n  /*  8910 */ 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459,\n  /*  8925 */ 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  8940 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  8955 */ 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672,\n  /*  8970 */ 42922, 38672, 38672, 38672, 38672, 44448, 27298, 33333, 25344, 38672, 38672, 38672, 43215, 38672, 38672,\n  /*  8985 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375,\n  /*  9000 */ 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475,\n  /*  9015 */ 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672,\n  /*  9030 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411,\n  /*  9045 */ 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672,\n  /*  9060 */ 38672, 38672, 38672, 38672, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411,\n  /*  9075 */ 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672,\n  /*  9090 */ 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727,\n  /*  9105 */ 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 21426, 38672, 28255, 22475, 22475, 22475, 29442,\n  /*  9120 */ 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475,\n  /*  9135 */ 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411,\n  /*  9150 */ 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476,\n  /*  9165 */ 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345,\n  /*  9180 */ 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  9195 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  9210 */ 38672, 38672, 38672, 38672, 38672, 38672, 25610, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672,\n  /*  9225 */ 38672, 42922, 38672, 38672, 38672, 38672, 44448, 27298, 33333, 25344, 38672, 38672, 38672, 43215, 38672,\n  /*  9240 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268,\n  /*  9255 */ 25375, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475,\n  /*  9270 */ 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672,\n  /*  9285 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786,\n  /*  9300 */ 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672,\n  /*  9315 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411,\n  /*  9330 */ 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672,\n  /*  9345 */ 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851,\n  /*  9360 */ 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475,\n  /*  9375 */ 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475,\n  /*  9390 */ 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143,\n  /*  9405 */ 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759,\n  /*  9420 */ 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257,\n  /*  9435 */ 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  9450 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  9465 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 30470, 38672, 38672,\n  /*  9480 */ 38672, 38672, 42922, 44752, 25631, 25649, 25671, 25683, 44753, 25633, 20832, 38672, 38672, 38672, 43215,\n  /*  9495 */ 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418,\n  /*  9510 */ 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 35735, 23032, 18306, 18356, 18382, 18387, 18403,\n  /*  9525 */ 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672,\n  /*  9540 */ 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406,\n  /*  9555 */ 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554,\n  /*  9570 */ 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129,\n  /*  9585 */ 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299,\n  /*  9600 */ 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046,\n  /*  9615 */ 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859,\n  /*  9630 */ 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979,\n  /*  9645 */ 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 25717, 20259, 20298, 20337,\n  /*  9660 */ 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516,\n  /*  9675 */ 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954,\n  /*  9690 */ 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  9705 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  9720 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 30470, 38672,\n  /*  9735 */ 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 38672, 38672, 24860, 20832, 38672, 38672, 38672,\n  /*  9750 */ 43215, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998,\n  /*  9765 */ 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387,\n  /*  9780 */ 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563,\n  /*  9795 */ 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769,\n  /*  9810 */ 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955,\n  /*  9825 */ 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103,\n  /*  9840 */ 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964,\n  /*  9855 */ 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631,\n  /*  9870 */ 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113,\n  /*  9885 */ 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515,\n  /*  9900 */ 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298,\n  /*  9915 */ 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500,\n  /*  9930 */ 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437,\n  /*  9945 */ 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  9960 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /*  9975 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 30470,\n  /*  9990 */ 38672, 38672, 38672, 38672, 42922, 31997, 38672, 25754, 25760, 25776, 23293, 41839, 20832, 38672, 38672,\n  /* 10005 */ 38672, 43215, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794,\n  /* 10020 */ 35998, 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382,\n  /* 10035 */ 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232,\n  /* 10050 */ 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745,\n  /* 10065 */ 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540,\n  /* 10080 */ 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169,\n  /* 10095 */ 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000,\n  /* 10110 */ 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905,\n  /* 10125 */ 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808,\n  /* 10140 */ 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010,\n  /* 10155 */ 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259,\n  /* 10170 */ 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 25800, 20452, 20468, 20484, 20497, 50424,\n  /* 10185 */ 20500, 20516, 25828, 20548, 20592, 20589, 50171, 25844, 19547, 18794, 18487, 20629, 20143, 19945, 20660,\n  /* 10200 */ 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672,\n  /* 10215 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 10230 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 25049, 38672, 38672, 38672,\n  /* 10245 */ 22098, 25865, 25896, 25377, 25881, 25913, 30410, 30418, 25964, 25978, 25990, 26006, 26018, 25344, 45647,\n  /* 10260 */ 38672, 26034, 48091, 26052, 33210, 26086, 26116, 26153, 26223, 35321, 26181, 25701, 26211, 26248, 26264,\n  /* 10275 */ 43583, 44602, 26280, 26296, 26329, 38672, 38672, 38672, 30176, 26355, 38925, 41958, 22850, 24803, 38672,\n  /* 10290 */ 44654, 30480, 22475, 22475, 22475, 36601, 25393, 22411, 22411, 43601, 22690, 26727, 26727, 26727, 39641,\n  /* 10305 */ 30990, 39463, 38672, 43148, 28319, 38672, 29724, 26374, 19326, 38672, 38672, 32428, 40296, 38574, 45608,\n  /* 10320 */ 22475, 22475, 26394, 26439, 26475, 26509, 22411, 37859, 28780, 26529, 38451, 26727, 26727, 43300, 45056,\n  /* 10335 */ 22573, 30349, 25414, 26545, 38672, 26563, 38672, 40287, 48411, 38672, 26599, 35364, 28653, 26627, 31403,\n  /* 10350 */ 45616, 49789, 33849, 44356, 22411, 30609, 28411, 41138, 33324, 35718, 26727, 47625, 44193, 29223, 41749,\n  /* 10365 */ 42781, 38094, 28940, 38672, 21816, 21032, 26644, 38672, 47420, 26664, 22475, 41307, 22336, 31195, 39296,\n  /* 10380 */ 22411, 22411, 26685, 31454, 47988, 26726, 26727, 30787, 32911, 36940, 26744, 38697, 46064, 38672, 26779,\n  /* 10395 */ 26799, 26821, 22787, 22475, 23131, 26837, 37515, 22411, 36778, 26853, 26876, 26727, 33519, 46887, 26926,\n  /* 10410 */ 38672, 38672, 26931, 37355, 35081, 26947, 38899, 38878, 26969, 48550, 26727, 26994, 26313, 38672, 38672,\n  /* 10425 */ 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411,\n  /* 10440 */ 26975, 26727, 26310, 35759, 22476, 22411, 26978, 38555, 27014, 22600, 47761, 48246, 27057, 27076, 27094,\n  /* 10455 */ 27113, 28343, 26456, 27133, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672,\n  /* 10470 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 10485 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 27153, 38672,\n  /* 10500 */ 38672, 22098, 38672, 38672, 38672, 38672, 39378, 27172, 38672, 27196, 27202, 27218, 27234, 27246, 25344,\n  /* 10515 */ 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256,\n  /* 10530 */ 27262, 42259, 26453, 27284, 27268, 25375, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672,\n  /* 10545 */ 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727,\n  /* 10560 */ 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 46100, 48405, 27326, 25277, 38672, 38672, 28258,\n  /* 10575 */ 22475, 22475, 22475, 37137, 27346, 22411, 22411, 22411, 22411, 39760, 37334, 26727, 26727, 26727, 26727,\n  /* 10590 */ 27410, 32919, 30349, 25414, 38672, 38672, 38672, 38672, 38672, 48411, 38672, 38672, 26931, 22475, 22475,\n  /* 10605 */ 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727,\n  /* 10620 */ 32918, 41804, 38672, 38672, 27435, 38672, 38672, 33108, 38672, 49441, 22475, 22475, 22475, 38002, 42895,\n  /* 10635 */ 22411, 22411, 22411, 22411, 27454, 27481, 26727, 26727, 26727, 43058, 33795, 38672, 38672, 38672, 38672,\n  /* 10650 */ 38672, 28255, 22475, 22475, 22475, 23131, 22411, 22411, 22411, 36778, 26727, 26727, 26727, 26998, 46887,\n  /* 10665 */ 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672,\n  /* 10680 */ 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144,\n  /* 10695 */ 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 46997, 37168,\n  /* 10710 */ 35831, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672,\n  /* 10725 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 10740 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 27504,\n  /* 10755 */ 38672, 38672, 22098, 38672, 27541, 38672, 27559, 23976, 27578, 27586, 27602, 27617, 27629, 27645, 27657,\n  /* 10770 */ 25344, 38672, 38672, 27676, 44992, 38672, 22924, 38672, 38672, 38672, 38672, 38672, 38672, 27673, 50511,\n  /* 10785 */ 27692, 47251, 26513, 26453, 41246, 27710, 25375, 29768, 38672, 38672, 32334, 38672, 27740, 38672, 27762,\n  /* 10800 */ 27784, 38672, 25948, 27789, 27805, 27821, 22475, 22475, 27840, 27878, 22411, 22411, 22690, 27915, 27931,\n  /* 10815 */ 26727, 26727, 30990, 39463, 44557, 38672, 38672, 44934, 38672, 38225, 48405, 33126, 27953, 38672, 38672,\n  /* 10830 */ 27694, 47073, 35424, 37245, 22475, 35786, 48497, 47338, 42686, 30280, 22411, 37334, 37394, 27977, 27995,\n  /* 10845 */ 43743, 26727, 32919, 30349, 25414, 38672, 38672, 24003, 38672, 30096, 48411, 38672, 38672, 26931, 22475,\n  /* 10860 */ 22475, 22475, 28013, 28031, 33849, 22411, 22411, 22411, 28053, 28070, 33324, 26727, 26727, 26727, 28092,\n  /* 10875 */ 28109, 32918, 41804, 28131, 38672, 38672, 49206, 38672, 28149, 38672, 22475, 22475, 22475, 22780, 33754,\n  /* 10890 */ 33854, 22411, 22411, 42031, 22411, 31454, 26727, 26727, 26727, 28171, 22521, 33795, 38672, 38672, 31346,\n  /* 10905 */ 38672, 46687, 21493, 22475, 28191, 22475, 23131, 22411, 30274, 22411, 36778, 26727, 35228, 26727, 31599,\n  /* 10920 */ 28213, 38672, 38672, 38672, 28250, 28274, 47411, 42142, 28296, 31494, 28347, 36728, 31954, 22521, 26313,\n  /* 10935 */ 38672, 38672, 28317, 27136, 22475, 28335, 22411, 36897, 26977, 26727, 22564, 26312, 34036, 26929, 22475,\n  /* 10950 */ 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 28363, 28379,\n  /* 10965 */ 28427, 28480, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 28504, 28863, 38672, 38672,\n  /* 10980 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 10995 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672,\n  /* 11010 */ 24521, 38672, 38672, 22098, 38672, 28530, 45484, 38672, 46575, 28549, 28557, 28573, 28587, 28595, 28611,\n  /* 11025 */ 28623, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 19750, 26547, 38672, 26546,\n  /* 11040 */ 19755, 28639, 42141, 48492, 27360, 44280, 27268, 25375, 29257, 27180, 28679, 29641, 21703, 38672, 25730,\n  /* 11055 */ 38672, 38083, 42329, 28697, 28734, 27137, 27824, 36531, 43498, 28750, 22608, 46434, 28774, 46408, 28796,\n  /* 11070 */ 28814, 28833, 26727, 28849, 39463, 38672, 38672, 38672, 25738, 38672, 29761, 48405, 38672, 38672, 38672,\n  /* 11085 */ 19698, 28258, 22475, 22475, 22475, 27023, 35786, 22411, 22411, 22411, 22411, 28891, 37334, 26727, 26727,\n  /* 11100 */ 26727, 26727, 28912, 43066, 28929, 28956, 38672, 38672, 33876, 38672, 28992, 48411, 38672, 38672, 29009,\n  /* 11115 */ 29030, 27032, 22475, 22475, 22669, 33849, 29109, 45393, 22411, 22411, 32729, 33324, 29133, 37067, 26727,\n  /* 11130 */ 26727, 34717, 32918, 41804, 38672, 38672, 38672, 38672, 38672, 29157, 38672, 29181, 22475, 22475, 29202,\n  /* 11145 */ 33754, 43112, 22411, 22411, 32083, 22411, 34472, 29222, 26727, 26727, 29239, 22521, 33795, 38672, 29256,\n  /* 11160 */ 29273, 38672, 29294, 28255, 32383, 27117, 29315, 23131, 44876, 34578, 42252, 36778, 44915, 26727, 29337,\n  /* 11175 */ 26998, 46887, 21810, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521,\n  /* 11190 */ 26313, 38672, 29370, 38672, 27136, 22475, 29387, 22411, 41041, 26977, 26727, 43751, 26312, 34036, 26929,\n  /* 11205 */ 22475, 42144, 22411, 29411, 29240, 26310, 35759, 22476, 22411, 26978, 48196, 29430, 26953, 38544, 39617,\n  /* 11220 */ 34809, 33567, 37775, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672,\n  /* 11235 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 11250 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323,\n  /* 11265 */ 38672, 38673, 29464, 38672, 22098, 22435, 29483, 38672, 29506, 26195, 29530, 29540, 29556, 29570, 29582,\n  /* 11280 */ 29598, 29610, 25344, 38672, 29626, 25072, 29668, 50094, 29711, 40102, 40331, 29748, 21064, 29784, 29812,\n  /* 11295 */ 29843, 29873, 29903, 29919, 29957, 26423, 29973, 30010, 25375, 30044, 30091, 38782, 30112, 30134, 26137,\n  /* 11310 */ 30161, 38672, 38672, 26583, 38672, 26929, 39099, 30212, 36878, 44806, 30228, 43650, 28758, 46842, 30244,\n  /* 11325 */ 46765, 30296, 30317, 30336, 30384, 39463, 20089, 31354, 30434, 38799, 41183, 30450, 30496, 38672, 30542,\n  /* 11340 */ 30564, 29278, 30580, 39823, 30631, 28663, 42103, 30647, 30685, 30712, 30766, 30811, 30837, 34161, 30878,\n  /* 11355 */ 30901, 34681, 30930, 30980, 31006, 31022, 25414, 31049, 38672, 18321, 49090, 31075, 31094, 31128, 34195,\n  /* 11370 */ 32584, 46802, 31168, 22475, 33645, 42347, 31190, 47486, 31211, 22411, 47598, 49959, 31232, 32841, 31257,\n  /* 11385 */ 26727, 39569, 42011, 31278, 31335, 49499, 35851, 39273, 31370, 43966, 34186, 21188, 33468, 37601, 29186,\n  /* 11400 */ 31389, 31426, 42239, 40895, 22411, 31442, 31481, 31454, 31519, 31539, 30795, 31561, 31595, 33795, 38672,\n  /* 11415 */ 48757, 39401, 38672, 30196, 28255, 39519, 43549, 31615, 23131, 34822, 47675, 31635, 36778, 22546, 47769,\n  /* 11430 */ 31572, 26998, 46887, 39201, 31656, 18290, 31696, 31734, 31750, 31772, 31808, 31845, 31869, 31903, 37385,\n  /* 11445 */ 31919, 31970, 26378, 18593, 32021, 48908, 39526, 44237, 32042, 32063, 32099, 48723, 41712, 26312, 41270,\n  /* 11460 */ 26929, 22475, 32144, 22411, 32167, 44894, 26310, 32185, 46276, 40692, 44326, 31465, 20435, 32208, 32228,\n  /* 11475 */ 32248, 32274, 32295, 32319, 32362, 32399, 32415, 28257, 28345, 26459, 32457, 32473, 36357, 34905, 28863,\n  /* 11490 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 11505 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 11520 */ 25323, 38672, 38672, 32509, 38672, 22098, 32530, 32548, 43771, 30190, 32600, 32630, 38672, 32616, 32654,\n  /* 11535 */ 32662, 32678, 32690, 25344, 38672, 38672, 48277, 43215, 38672, 38672, 38672, 38672, 29732, 38672, 38672,\n  /* 11550 */ 32706, 29731, 26036, 33631, 42208, 32724, 38438, 44280, 27268, 25375, 21272, 38672, 38672, 31985, 38672,\n  /* 11565 */ 38672, 38672, 26576, 32745, 36837, 38672, 26929, 32766, 22475, 22475, 22475, 32810, 32857, 22411, 22411,\n  /* 11580 */ 22690, 27419, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 48405, 38672,\n  /* 11595 */ 38672, 40108, 38672, 28258, 22475, 22475, 22475, 42113, 35786, 22411, 22411, 22411, 22411, 32877, 37334,\n  /* 11610 */ 26727, 26727, 26727, 26728, 26727, 32919, 30349, 25414, 38672, 38672, 38672, 38672, 38672, 48411, 32026,\n  /* 11625 */ 38672, 26931, 22475, 22475, 46869, 22475, 22475, 33849, 22411, 22411, 39678, 22411, 22411, 33324, 26727,\n  /* 11640 */ 26727, 41099, 26727, 26727, 32918, 41804, 38672, 38672, 38672, 38672, 38672, 30118, 38672, 22475, 22475,\n  /* 11655 */ 22475, 42121, 33754, 33854, 22411, 22411, 48685, 22411, 31454, 26727, 26727, 26727, 46758, 22521, 33795,\n  /* 11670 */ 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 23131, 22411, 22411, 22411, 36778, 26727,\n  /* 11685 */ 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727,\n  /* 11700 */ 26727, 22521, 36404, 38672, 38672, 38672, 44299, 22475, 42143, 31823, 22411, 32169, 26727, 22520, 26312,\n  /* 11715 */ 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340,\n  /* 11730 */ 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 27097, 32897, 36362, 47020, 32935,\n  /* 11745 */ 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 11760 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 11775 */ 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 25031, 38672, 38672, 43445, 32979, 32987, 33003,\n  /* 11790 */ 33009, 33025, 33041, 33053, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 29467, 38672, 38672, 38672,\n  /* 11805 */ 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 33069, 38672, 38672, 38672, 29641,\n  /* 11820 */ 38672, 38672, 38672, 33103, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411,\n  /* 11835 */ 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 11850 */ 38672, 33124, 38672, 18284, 28258, 22475, 22475, 22475, 22475, 40837, 22411, 22411, 22411, 22411, 22411,\n  /* 11865 */ 34394, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 33142, 38672, 33163, 42808,\n  /* 11880 */ 38672, 42803, 38566, 22475, 22475, 37994, 22475, 22475, 33849, 22411, 22411, 47479, 22411, 22411, 33324,\n  /* 11895 */ 26727, 26727, 31312, 26727, 26727, 41720, 33181, 38672, 38672, 34958, 38672, 38672, 38672, 38672, 22475,\n  /* 11910 */ 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521,\n  /* 11925 */ 33795, 38672, 38672, 34949, 49071, 38672, 28255, 22475, 22475, 29048, 29442, 22411, 22411, 43834, 26485,\n  /* 11940 */ 26727, 26727, 49882, 26998, 33184, 33200, 40222, 33234, 22991, 22475, 33277, 33313, 50063, 43479, 33349,\n  /* 11955 */ 26727, 33377, 32128, 26313, 33405, 26648, 22985, 33423, 33443, 35387, 48797, 34523, 33492, 40922, 33514,\n  /* 11970 */ 26312, 34036, 46959, 32375, 33535, 33554, 33575, 35236, 26310, 35759, 22476, 22411, 26978, 48196, 20435,\n  /* 11985 */ 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 28488, 33591,\n  /* 12000 */ 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 12015 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 12030 */ 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672,\n  /* 12045 */ 38672, 38672, 44448, 27298, 33333, 25344, 32005, 38672, 38672, 33617, 38672, 38672, 38672, 30064, 38672,\n  /* 12060 */ 30073, 38672, 30064, 33661, 30069, 38721, 42958, 22411, 33692, 33700, 33716, 25375, 38672, 38672, 25941,\n  /* 12075 */ 29641, 33732, 20082, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 33752, 25393, 22411,\n  /* 12090 */ 22411, 23137, 22690, 26727, 26727, 26727, 49362, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 12105 */ 38672, 38672, 25615, 38672, 33770, 28258, 22475, 22475, 22475, 22475, 40491, 22411, 22411, 22411, 22411,\n  /* 12120 */ 22411, 40736, 26727, 26727, 26727, 26727, 26727, 33787, 33803, 33407, 38672, 38672, 38672, 38672, 38672,\n  /* 12135 */ 38672, 38672, 38672, 33819, 48351, 22475, 22475, 22475, 22475, 33849, 46363, 22411, 22411, 22411, 22411,\n  /* 12150 */ 33324, 48523, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 48282, 38672, 38672, 38672, 38672,\n  /* 12165 */ 22475, 22475, 22475, 22475, 33840, 33854, 22411, 22411, 22411, 28403, 27851, 26727, 26727, 26727, 43360,\n  /* 12180 */ 22521, 33795, 38672, 38672, 42813, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411,\n  /* 12195 */ 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411,\n  /* 12210 */ 28347, 26727, 26727, 22521, 26313, 38672, 33874, 21141, 27136, 22475, 42143, 22411, 22411, 26977, 26727,\n  /* 12225 */ 22520, 33892, 34036, 21208, 22475, 46215, 22411, 33914, 26727, 33935, 35759, 22476, 22411, 26978, 48196,\n  /* 12240 */ 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362,\n  /* 12255 */ 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 12270 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 12285 */ 38672, 38672, 38672, 25323, 38672, 38672, 42795, 38672, 22098, 25439, 25194, 32493, 40646, 40656, 38304,\n  /* 12300 */ 38312, 33959, 33974, 33986, 34002, 34014, 25344, 38672, 38672, 38672, 49261, 33079, 38672, 38672, 23275,\n  /* 12315 */ 34030, 34052, 38672, 34078, 34127, 34177, 34211, 38408, 34239, 34258, 29354, 34285, 25375, 38672, 38672,\n  /* 12330 */ 36069, 29641, 38672, 34301, 38672, 38672, 38672, 34327, 24011, 26929, 47957, 34366, 22475, 34410, 34439,\n  /* 12345 */ 34460, 34488, 32881, 44853, 22711, 39788, 26727, 49664, 34508, 39463, 38672, 28969, 45656, 28681, 19706,\n  /* 12360 */ 18253, 38672, 26070, 26232, 47650, 46594, 28258, 42618, 22475, 45107, 34547, 44588, 22411, 34575, 22411,\n  /* 12375 */ 34594, 34618, 34642, 27997, 26727, 35481, 34668, 34697, 32919, 33803, 38672, 38672, 38672, 44387, 34733,\n  /* 12390 */ 34759, 38672, 38672, 38672, 26931, 34796, 22475, 22475, 22475, 34845, 34862, 31216, 22411, 22411, 37262,\n  /* 12405 */ 22411, 34878, 31262, 26727, 26727, 28913, 26727, 34894, 33802, 38672, 34931, 35005, 30145, 35033, 35049,\n  /* 12420 */ 30548, 35079, 26669, 35097, 35117, 35142, 44418, 22411, 35167, 35192, 43624, 31718, 26727, 43013, 39321,\n  /* 12435 */ 47169, 35252, 30750, 31033, 38672, 35289, 35307, 35357, 32192, 22475, 35380, 35403, 34559, 22411, 35440,\n  /* 12450 */ 35463, 30821, 35479, 35497, 35530, 35556, 35608, 38672, 38672, 24906, 47811, 35630, 37839, 28037, 35670,\n  /* 12465 */ 48379, 27078, 35705, 48704, 22521, 26313, 33898, 38672, 35734, 27136, 22475, 42143, 22411, 22411, 26977,\n  /* 12480 */ 26727, 22520, 28514, 35751, 26929, 35782, 35802, 36916, 32303, 49941, 26310, 49171, 22476, 22411, 26978,\n  /* 12495 */ 48196, 35867, 35883, 35899, 35915, 42139, 28345, 26456, 28257, 28343, 26456, 35951, 36348, 35941, 33538,\n  /* 12510 */ 36362, 36357, 34905, 35967, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 12525 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 12540 */ 38672, 38672, 38672, 38672, 25323, 38672, 38672, 33252, 38672, 22098, 38672, 38672, 38672, 38672, 42922,\n  /* 12555 */ 38672, 20573, 33260, 46302, 45557, 36019, 36031, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672,\n  /* 12570 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375, 38672,\n  /* 12585 */ 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 34780, 22475,\n  /* 12600 */ 25393, 22411, 22411, 36047, 22690, 26727, 26727, 36130, 26727, 30990, 39463, 38672, 38672, 38672, 38672,\n  /* 12615 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411,\n  /* 12630 */ 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672,\n  /* 12645 */ 38672, 38672, 38672, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411,\n  /* 12660 */ 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672,\n  /* 12675 */ 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727,\n  /* 12690 */ 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411,\n  /* 12705 */ 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142,\n  /* 12720 */ 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411,\n  /* 12735 */ 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411,\n  /* 12750 */ 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459,\n  /* 12765 */ 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 12780 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 12795 */ 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 20243, 38672, 22098, 38672, 38672, 38672, 38672,\n  /* 12810 */ 42922, 38672, 38672, 38672, 38672, 44448, 27298, 33333, 25344, 38672, 38672, 38672, 43215, 38672, 38672,\n  /* 12825 */ 36066, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375,\n  /* 12840 */ 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475,\n  /* 12855 */ 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672,\n  /* 12870 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411,\n  /* 12885 */ 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 45849, 38672, 38672,\n  /* 12900 */ 38672, 38672, 38672, 38672, 38672, 38672, 26931, 36085, 22475, 22475, 22475, 22475, 33849, 36106, 22411,\n  /* 12915 */ 22411, 22411, 22411, 33324, 36126, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672,\n  /* 12930 */ 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727,\n  /* 12945 */ 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442,\n  /* 12960 */ 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475,\n  /* 12975 */ 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411,\n  /* 12990 */ 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476,\n  /* 13005 */ 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345,\n  /* 13020 */ 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 13035 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 13050 */ 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 19729, 38672, 22098, 38672, 39473, 38672,\n  /* 13065 */ 44217, 36146, 36184, 36196, 36212, 36218, 36234, 36250, 36262, 25344, 38672, 36278, 38672, 43215, 38672,\n  /* 13080 */ 25421, 18575, 38672, 27438, 38672, 38672, 46139, 36299, 48111, 34141, 26409, 36335, 39145, 44169, 36378,\n  /* 13095 */ 36420, 36455, 38672, 29371, 36476, 38672, 27543, 38672, 36498, 35844, 31373, 34743, 36516, 40527, 36565,\n  /* 13110 */ 29321, 36586, 36623, 36646, 22411, 36676, 29093, 36714, 29346, 28817, 43388, 36750, 36802, 37724, 36836,\n  /* 13125 */ 38672, 38672, 38672, 26061, 38672, 38672, 38672, 38672, 38672, 28258, 36853, 42951, 22475, 36876, 38513,\n  /* 13140 */ 34492, 36894, 36913, 40984, 22411, 43282, 35514, 28798, 26727, 43717, 26727, 36932, 33803, 38672, 38672,\n  /* 13155 */ 36956, 38672, 38672, 18909, 32575, 38672, 38672, 26931, 22475, 22475, 41976, 35273, 36992, 33849, 22411,\n  /* 13170 */ 22411, 45307, 44424, 37025, 33324, 26727, 26727, 40875, 39885, 37058, 32918, 33802, 34967, 38672, 38672,\n  /* 13185 */ 32750, 38672, 38672, 38672, 22475, 38401, 22475, 22475, 28015, 33854, 34444, 22411, 22411, 22411, 27851,\n  /* 13200 */ 26727, 37091, 26727, 26727, 22521, 33795, 37110, 34940, 38672, 46173, 45770, 29014, 37131, 22475, 22475,\n  /* 13215 */ 37153, 29988, 22411, 22411, 37195, 37219, 26727, 26727, 36392, 46887, 38346, 38672, 39265, 26931, 22475,\n  /* 13230 */ 37243, 42142, 22411, 37261, 28347, 26727, 37278, 22521, 26313, 38672, 37296, 38672, 27136, 22475, 37317,\n  /* 13245 */ 22411, 48861, 26977, 26727, 48595, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759,\n  /* 13260 */ 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 35925, 29395, 39608, 37350,\n  /* 13275 */ 37371, 26459, 33538, 37783, 48331, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 13290 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 13305 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 41939, 38672, 22098, 38672, 25566,\n  /* 13320 */ 38672, 38672, 29887, 39046, 39054, 37418, 37432, 37440, 37456, 37468, 25500, 38672, 37493, 38672, 43215,\n  /* 13335 */ 38672, 28533, 38672, 38672, 27562, 38672, 38672, 37494, 37484, 23258, 20853, 42141, 37510, 47612, 44280,\n  /* 13350 */ 27268, 25375, 38672, 29490, 38672, 29641, 38672, 37531, 37550, 38672, 38672, 38672, 37570, 27517, 39732,\n  /* 13365 */ 22475, 40520, 37590, 25393, 37627, 22412, 37898, 37646, 31523, 26727, 48530, 31241, 31792, 37683, 37699,\n  /* 13380 */ 24812, 38672, 37723, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 37740, 22475, 37799, 22475,\n  /* 13395 */ 35786, 45030, 31853, 36110, 22411, 22411, 37334, 31545, 34712, 40790, 26727, 26727, 32919, 33803, 38672,\n  /* 13410 */ 21024, 48965, 38672, 38672, 33943, 28155, 37816, 38672, 26931, 46335, 37834, 22475, 27041, 22475, 34377,\n  /* 13425 */ 49011, 37855, 22411, 33297, 22411, 27890, 39339, 37875, 26727, 27899, 26727, 32918, 33802, 38672, 38672,\n  /* 13440 */ 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411,\n  /* 13455 */ 27851, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475,\n  /* 13470 */ 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 48203, 38672, 38672, 38672, 26931,\n  /* 13485 */ 29057, 22475, 42142, 32786, 22411, 28347, 22555, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475,\n  /* 13500 */ 42143, 22411, 37895, 26977, 49110, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310,\n  /* 13515 */ 37914, 31619, 41895, 26978, 37938, 37974, 41757, 45432, 39617, 42139, 28345, 26456, 28257, 28343, 26456,\n  /* 13530 */ 28257, 36549, 37075, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 13545 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 13560 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 25240, 38672, 24719, 38672,\n  /* 13575 */ 46651, 38018, 25104, 38054, 38118, 38157, 38142, 38161, 38126, 38177, 38189, 25344, 38672, 45759, 49561,\n  /* 13590 */ 49547, 38205, 49199, 38672, 38241, 38259, 34062, 38289, 38328, 38371, 38273, 38387, 38424, 38467, 39556,\n  /* 13605 */ 38529, 27268, 25375, 40213, 38672, 38672, 38590, 21779, 38672, 38614, 38641, 21123, 43234, 38689, 38713,\n  /* 13620 */ 41522, 39725, 26628, 22475, 25393, 38737, 22411, 29117, 22690, 32232, 31319, 26727, 38753, 34652, 38772,\n  /* 13635 */ 35341, 38672, 38798, 38815, 38672, 38672, 40618, 38672, 38672, 38672, 38840, 33601, 40485, 22475, 38858,\n  /* 13650 */ 22475, 35786, 47683, 38876, 40856, 22411, 22411, 37334, 32114, 26727, 42187, 26727, 26727, 32919, 33803,\n  /* 13665 */ 38672, 38672, 38672, 38672, 24776, 38672, 36500, 33087, 26755, 48300, 22475, 22475, 22475, 46796, 41600,\n  /* 13680 */ 49410, 22411, 22411, 22411, 38894, 29994, 47730, 26727, 26727, 26727, 46465, 44085, 32918, 33802, 38915,\n  /* 13695 */ 38949, 38972, 38992, 38672, 39015, 39031, 44824, 39070, 29039, 39086, 28015, 33854, 39115, 39131, 22365,\n  /* 13710 */ 39171, 27851, 40395, 48234, 48581, 49654, 22521, 39190, 33147, 39225, 26763, 39254, 38337, 41515, 31410,\n  /* 13725 */ 48668, 36570, 39289, 44624, 49920, 36050, 39312, 46490, 26727, 39337, 39355, 46887, 39394, 38672, 20942,\n  /* 13740 */ 22766, 22475, 39417, 21499, 22411, 39448, 25398, 26727, 39489, 22521, 47568, 38672, 38672, 46680, 45512,\n  /* 13755 */ 39505, 42143, 39542, 32076, 39585, 39633, 39657, 35567, 35614, 26929, 29075, 42144, 39674, 26975, 39694,\n  /* 13770 */ 26310, 35759, 35126, 47451, 29414, 27465, 39712, 39748, 39776, 39804, 46246, 41657, 47873, 28257, 28343,\n  /* 13785 */ 26456, 28257, 28345, 26459, 39839, 39865, 36357, 34905, 30398, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 13800 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 13815 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 39901, 22098,\n  /* 13830 */ 38672, 30368, 39922, 38672, 45211, 39942, 39950, 39966, 39980, 39988, 40004, 40016, 25344, 35063, 40032,\n  /* 13845 */ 40048, 40074, 25784, 40124, 38672, 40160, 20023, 50351, 40199, 40238, 40274, 40312, 49237, 40347, 40363,\n  /* 13860 */ 36660, 40411, 40427, 25375, 38672, 40443, 18661, 36161, 37534, 38672, 18669, 43864, 38672, 38672, 44690,\n  /* 13875 */ 26929, 22475, 37009, 40470, 40507, 25393, 22411, 40543, 31503, 45950, 26727, 47993, 40578, 40601, 30990,\n  /* 13890 */ 39463, 38672, 44715, 38672, 38672, 40617, 29165, 40634, 41441, 21201, 19353, 22907, 40672, 45368, 47429,\n  /* 13905 */ 22475, 22475, 40708, 37034, 28896, 40724, 22411, 47891, 41633, 40762, 35506, 40782, 26727, 47175, 32919,\n  /* 13920 */ 22394, 40806, 38672, 38654, 32566, 38672, 38672, 38672, 38672, 48740, 26931, 22475, 38860, 22475, 40833,\n  /* 13935 */ 22475, 33849, 22411, 41060, 22411, 40853, 22411, 33324, 26727, 38756, 26727, 40872, 26727, 32918, 33802,\n  /* 13950 */ 38672, 38672, 20973, 45998, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 22458, 40891, 22411, 22411,\n  /* 13965 */ 22411, 22411, 40911, 26727, 26727, 26727, 26727, 22501, 33795, 23174, 18332, 38672, 38672, 38672, 40938,\n  /* 13980 */ 22475, 40962, 22475, 40684, 22411, 40981, 22411, 31782, 26727, 49841, 26727, 26998, 28442, 38672, 38672,\n  /* 13995 */ 38672, 26931, 41000, 41019, 42142, 41039, 41057, 28347, 41076, 41095, 22521, 44039, 38672, 38672, 38672,\n  /* 14010 */ 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 34915, 34036, 27330, 41115, 29084, 41137, 35817,\n  /* 14025 */ 26727, 27724, 35759, 41154, 41218, 41701, 41262, 41286, 47258, 44155, 39617, 42139, 28345, 26456, 28257,\n  /* 14040 */ 28343, 26456, 28257, 28345, 28115, 33538, 27862, 36357, 34905, 46290, 38672, 38672, 38672, 38672, 38672,\n  /* 14055 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 14070 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 26904,\n  /* 14085 */ 22098, 38672, 38672, 41323, 22275, 41345, 40139, 38672, 26358, 41381, 41394, 41410, 41422, 25344, 38672,\n  /* 14100 */ 38672, 45842, 43215, 38672, 38672, 38672, 41438, 50256, 38672, 22231, 41440, 45848, 38672, 34773, 41457,\n  /* 14115 */ 34829, 39879, 41487, 27268, 25375, 38102, 38672, 38672, 29641, 38672, 41538, 41554, 33261, 38672, 38672,\n  /* 14130 */ 36430, 26929, 41579, 35101, 34846, 45533, 41616, 41649, 40556, 45401, 41673, 41736, 41773, 26727, 41789,\n  /* 14145 */ 40746, 42656, 41831, 38672, 41855, 41875, 32532, 32708, 46542, 38672, 38672, 38672, 38672, 28258, 22475,\n  /* 14160 */ 22475, 41594, 22475, 35786, 22411, 22411, 22411, 41893, 22411, 37334, 26727, 26727, 37094, 26727, 26727,\n  /* 14175 */ 32919, 27373, 41911, 29299, 38672, 38672, 38672, 41935, 25466, 38672, 41955, 26931, 22475, 41121, 41974,\n  /* 14190 */ 22475, 22475, 34152, 22411, 46370, 41992, 22411, 22411, 30778, 26727, 31887, 42009, 26727, 26727, 32918,\n  /* 14205 */ 33802, 38243, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 48461, 22475, 28015, 42027, 22411,\n  /* 14220 */ 22411, 42047, 22411, 37764, 26727, 26727, 48819, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672,\n  /* 14235 */ 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672,\n  /* 14250 */ 22208, 38672, 18340, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 28175, 42067, 38672, 38672,\n  /* 14265 */ 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411,\n  /* 14280 */ 26975, 26727, 30944, 42088, 42137, 42160, 42180, 48196, 42203, 28340, 26976, 39617, 42139, 28345, 26456,\n  /* 14295 */ 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672,\n  /* 14310 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 14325 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672,\n  /* 14340 */ 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 44448, 27298, 33333, 25344,\n  /* 14355 */ 38672, 38672, 38672, 43215, 38672, 38672, 31078, 38672, 38672, 32435, 32438, 32441, 42224, 25897, 46967,\n  /* 14370 */ 28280, 42275, 42293, 31579, 27268, 42319, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672,\n  /* 14385 */ 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727,\n  /* 14400 */ 26727, 30990, 39463, 38672, 38672, 38672, 46624, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258,\n  /* 14415 */ 22475, 22475, 22475, 22475, 41023, 22411, 22411, 22411, 22411, 22411, 42864, 26727, 26727, 26727, 26727,\n  /* 14430 */ 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26931, 22475, 22475,\n  /* 14445 */ 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727,\n  /* 14460 */ 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854,\n  /* 14475 */ 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672,\n  /* 14490 */ 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887,\n  /* 14505 */ 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672,\n  /* 14520 */ 38672, 38672, 27136, 42345, 42143, 29941, 22411, 26977, 42363, 22520, 26312, 34036, 26929, 22475, 42144,\n  /* 14535 */ 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345,\n  /* 14550 */ 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672,\n  /* 14565 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 14580 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672,\n  /* 14595 */ 38672, 44743, 22177, 38672, 38672, 27385, 38672, 45876, 42383, 22121, 42412, 42425, 42433, 42449, 42461,\n  /* 14610 */ 25344, 38672, 32955, 42527, 43215, 18706, 42477, 42499, 33244, 42519, 38672, 42543, 40174, 42559, 42580,\n  /* 14625 */ 42605, 42641, 42672, 40377, 42708, 42766, 25375, 38672, 38672, 38672, 42829, 42880, 42911, 43973, 27961,\n  /* 14640 */ 38672, 38672, 23013, 42938, 22475, 42974, 41003, 39432, 42995, 32861, 22411, 36698, 35176, 43029, 43292,\n  /* 14655 */ 26727, 43049, 43082, 43138, 38672, 38672, 38672, 25328, 43172, 43191, 38672, 43210, 28234, 38672, 43231,\n  /* 14670 */ 48341, 22475, 43250, 22475, 22325, 43268, 47118, 39174, 22411, 22411, 43316, 43332, 43358, 40585, 26727,\n  /* 14685 */ 37280, 43376, 43410, 33803, 38672, 38672, 41815, 45184, 39238, 30360, 38672, 43434, 50186, 43461, 43495,\n  /* 14700 */ 48777, 43514, 43538, 22475, 43573, 43599, 31640, 43617, 43640, 22411, 43666, 43692, 49367, 43710, 43733,\n  /* 14715 */ 26727, 47922, 33802, 43767, 38672, 38672, 43787, 43812, 38672, 43850, 50024, 43886, 43557, 22475, 28015,\n  /* 14730 */ 33854, 43908, 34242, 22411, 22411, 27851, 46470, 43935, 44079, 26727, 39658, 43953, 38672, 43989, 21331,\n  /* 14745 */ 38672, 38672, 33824, 22475, 22475, 49385, 34223, 22411, 22411, 22411, 44011, 26727, 26727, 26727, 44027,\n  /* 14760 */ 46887, 19958, 38672, 38672, 50007, 22475, 22475, 28197, 22411, 22411, 44066, 26727, 26727, 44101, 26313,\n  /* 14775 */ 20872, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475,\n  /* 14790 */ 42144, 22411, 26975, 26727, 26890, 47793, 44124, 44140, 44185, 44209, 20435, 28340, 26976, 33389, 44233,\n  /* 14805 */ 44253, 44277, 44296, 28343, 26456, 28257, 28345, 26459, 44315, 44342, 38482, 34905, 28863, 38672, 38672,\n  /* 14820 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 14835 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672,\n  /* 14850 */ 38672, 38672, 18636, 22098, 44386, 29857, 38069, 44372, 44403, 44440, 44464, 44480, 44494, 44510, 44526,\n  /* 14865 */ 44538, 25344, 44554, 46908, 38672, 40088, 38672, 38672, 41365, 38672, 43156, 26783, 26781, 47212, 47203,\n  /* 14880 */ 34311, 44573, 42979, 44618, 41232, 44280, 27268, 44640, 44676, 38672, 44712, 29827, 28456, 38672, 38672,\n  /* 14895 */ 38672, 44731, 44769, 38672, 40058, 44785, 40965, 44822, 22475, 44840, 44869, 48063, 22411, 22690, 39155,\n  /* 14910 */ 44892, 44910, 26727, 30990, 39463, 38672, 44931, 38672, 44950, 44971, 38672, 38672, 38672, 38672, 38672,\n  /* 14925 */ 44987, 28258, 45008, 41301, 22475, 22475, 37611, 28054, 22411, 45028, 22411, 22411, 45046, 30301, 30320,\n  /* 14940 */ 26727, 26727, 28093, 30742, 33803, 38672, 38672, 45072, 32638, 30075, 38672, 46548, 37818, 38672, 42396,\n  /* 14955 */ 22475, 22475, 47037, 45094, 33476, 49452, 22411, 22411, 49585, 32047, 36630, 35654, 26727, 26727, 39696,\n  /* 14970 */ 33919, 26493, 44108, 45157, 32514, 38672, 49604, 38672, 38672, 38672, 45200, 22475, 22475, 43892, 45227,\n  /* 14985 */ 28015, 33854, 22411, 41993, 40562, 22411, 27851, 26727, 26727, 32834, 45248, 22521, 33795, 38672, 22295,\n  /* 15000 */ 45267, 19361, 38672, 28255, 36090, 22475, 45286, 43473, 42051, 22411, 45304, 43005, 43694, 26727, 49877,\n  /* 15015 */ 26998, 46887, 38672, 50299, 46144, 45323, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 49054,\n  /* 15030 */ 26313, 45345, 36168, 40817, 45367, 22475, 45384, 22411, 30669, 26977, 26727, 45417, 45465, 36482, 45500,\n  /* 15045 */ 45528, 32279, 22411, 44261, 26727, 45549, 35759, 34423, 35689, 37179, 48196, 20435, 28340, 26976, 27310,\n  /* 15060 */ 33427, 47309, 26456, 32258, 46222, 29141, 45599, 45573, 45589, 33538, 36362, 36357, 34905, 28863, 38672,\n  /* 15075 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 15090 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323,\n  /* 15105 */ 38672, 38672, 38672, 42503, 22098, 38672, 38672, 19843, 38672, 45632, 29682, 29695, 45672, 45688, 45703,\n  /* 15120 */ 45719, 45731, 25344, 25697, 36820, 25484, 43215, 48936, 33218, 45747, 38933, 25691, 45794, 45830, 45905,\n  /* 15135 */ 45865, 45892, 45921, 30595, 45937, 41471, 45980, 45966, 25375, 45996, 46014, 46030, 34093, 38672, 38672,\n  /* 15150 */ 46051, 24794, 46090, 46124, 46160, 46201, 46238, 46262, 46318, 46334, 46351, 46386, 26710, 46424, 30615,\n  /* 15165 */ 39597, 40389, 46450, 46486, 30259, 41502, 46506, 46564, 38672, 46591, 46610, 46646, 38672, 45270, 33165,\n  /* 15180 */ 46667, 46703, 46719, 46781, 46818, 46866, 45012, 35786, 47344, 42692, 28076, 22411, 34531, 37334, 42303,\n  /* 15195 */ 43342, 43676, 26727, 37661, 41688, 46885, 38672, 46904, 39209, 44660, 46924, 28976, 46946, 38672, 30957,\n  /* 15210 */ 20847, 49903, 46983, 47036, 22475, 47053, 33288, 31829, 47089, 22411, 22411, 47105, 35219, 43394, 47140,\n  /* 15225 */ 26727, 26727, 47156, 32918, 33802, 47191, 38672, 41877, 37707, 38672, 50210, 38598, 47237, 45288, 47274,\n  /* 15240 */ 47290, 28015, 43827, 47306, 47325, 28394, 29934, 30696, 36786, 37667, 47360, 43033, 22521, 43418, 47376,\n  /* 15255 */ 50112, 38672, 38355, 49147, 28255, 47399, 22475, 22475, 47445, 47467, 34602, 22411, 47502, 47526, 50046,\n  /* 15270 */ 26727, 47556, 46887, 36283, 49516, 38672, 48840, 29206, 44799, 47584, 47703, 30662, 30727, 45251, 31880,\n  /* 15285 */ 34269, 39367, 47647, 38672, 49567, 38494, 40946, 47666, 47699, 47719, 39849, 48630, 47746, 32945, 47785,\n  /* 15300 */ 47809, 47827, 47850, 47889, 47907, 48880, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976,\n  /* 15315 */ 39617, 42139, 49752, 49772, 47949, 47973, 48009, 48038, 49034, 30862, 33538, 36362, 36357, 47933, 28863,\n  /* 15330 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 15345 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 15360 */ 25323, 38672, 38672, 38672, 38672, 48079, 38672, 38672, 48107, 38672, 19671, 30510, 30518, 48127, 30518,\n  /* 15375 */ 30526, 48143, 48155, 25344, 38672, 38672, 38672, 44955, 38672, 29647, 38672, 38672, 38672, 38672, 29652,\n  /* 15390 */ 46888, 38672, 38672, 45329, 35643, 48171, 30851, 45141, 48219, 48262, 38672, 38672, 38672, 29641, 38672,\n  /* 15405 */ 38672, 50200, 50208, 38672, 38672, 38672, 48298, 33458, 22475, 22475, 22475, 48316, 48375, 22411, 22411,\n  /* 15420 */ 28301, 37203, 26727, 26727, 26727, 30914, 41169, 48395, 38672, 34989, 34103, 38672, 38672, 38672, 48429,\n  /* 15435 */ 38672, 34985, 36969, 28258, 49732, 31174, 47066, 48458, 46734, 22411, 37326, 35682, 48477, 41625, 48513,\n  /* 15450 */ 26727, 48546, 48566, 33498, 48611, 32919, 33803, 38672, 32557, 38672, 48646, 38672, 38672, 38672, 19786,\n  /* 15465 */ 38672, 26931, 22475, 48666, 22475, 22475, 22475, 32777, 22411, 48684, 22411, 22411, 22411, 31945, 26727,\n  /* 15480 */ 48701, 26727, 26727, 26727, 32918, 33361, 38672, 45778, 38672, 38672, 38672, 38672, 41194, 35417, 22475,\n  /* 15495 */ 22475, 22475, 28015, 42844, 22411, 22411, 22411, 22411, 27851, 48720, 26727, 26727, 26727, 22521, 33795,\n  /* 15510 */ 48739, 38672, 38672, 48756, 38672, 35766, 48773, 22475, 22475, 45119, 48793, 22411, 42164, 43122, 48813,\n  /* 15525 */ 26727, 43937, 26998, 46887, 48835, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727,\n  /* 15540 */ 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312,\n  /* 15555 */ 34036, 26929, 43522, 42144, 48856, 26975, 48877, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340,\n  /* 15570 */ 26976, 39617, 42139, 28345, 26456, 20436, 32151, 30885, 28257, 28345, 26459, 33538, 22735, 48896, 34905,\n  /* 15585 */ 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 15600 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 15615 */ 38672, 25323, 38672, 38672, 38672, 38672, 48924, 48962, 36314, 45181, 38672, 50538, 38672, 45169, 48959,\n  /* 15630 */ 38038, 34111, 48981, 48993, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 15645 */ 38672, 38672, 38672, 38672, 27525, 42141, 49009, 31292, 44280, 27268, 25375, 38672, 36812, 40252, 29641,\n  /* 15660 */ 38672, 38672, 38672, 38672, 43194, 38672, 38672, 26929, 45232, 22475, 37800, 22475, 25393, 49027, 22411,\n  /* 15675 */ 46850, 22690, 27979, 26727, 26727, 49050, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 49070,\n  /* 15690 */ 38672, 38672, 49087, 38672, 28258, 22475, 49810, 22475, 22475, 35786, 22411, 22411, 34386, 22411, 22411,\n  /* 15705 */ 37334, 26727, 26727, 49106, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 15720 */ 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324,\n  /* 15735 */ 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475,\n  /* 15750 */ 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521,\n  /* 15765 */ 33795, 38672, 38672, 49126, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485,\n  /* 15780 */ 26727, 26727, 26727, 26998, 46887, 38672, 49146, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347,\n  /* 15795 */ 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520,\n  /* 15810 */ 26312, 49163, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435,\n  /* 15825 */ 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357,\n  /* 15840 */ 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 15855 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 15870 */ 38672, 38672, 25323, 38672, 38672, 38672, 38672, 49187, 38672, 21516, 38672, 20816, 49222, 49253, 38672,\n  /* 15885 */ 49277, 49291, 49304, 49320, 49332, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672,\n  /* 15900 */ 38672, 38672, 38672, 38672, 38672, 28256, 31934, 32212, 26453, 47540, 49348, 25375, 38672, 38672, 38672,\n  /* 15915 */ 29641, 38672, 38672, 38672, 43175, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411,\n  /* 15930 */ 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 15945 */ 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411,\n  /* 15960 */ 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 35291,\n  /* 15975 */ 38672, 38672, 38672, 36319, 22475, 22475, 22475, 22475, 22475, 31707, 22411, 22411, 22411, 22411, 22411,\n  /* 15990 */ 45130, 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38842, 38672, 38672, 38672, 38672, 38672,\n  /* 16005 */ 22475, 22475, 49383, 22475, 49401, 33854, 22411, 42856, 22411, 47124, 27851, 26727, 41079, 26727, 26727,\n  /* 16020 */ 49426, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411,\n  /* 16035 */ 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411,\n  /* 16050 */ 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727,\n  /* 16065 */ 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196,\n  /* 16080 */ 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362,\n  /* 16095 */ 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 16110 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 16125 */ 38672, 38672, 38672, 25610, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672,\n  /* 16140 */ 38672, 38672, 38672, 41202, 49468, 49480, 25344, 38672, 38672, 38672, 43215, 49496, 38672, 49515, 38672,\n  /* 16155 */ 38672, 46071, 46074, 38672, 49532, 28993, 37922, 42141, 49583, 32824, 44280, 27268, 25375, 38672, 38672,\n  /* 16170 */ 46108, 29641, 46524, 46533, 49601, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 49620, 37001, 25393,\n  /* 16185 */ 22411, 29448, 22411, 49639, 26727, 26727, 48625, 36734, 30990, 43097, 49680, 38672, 38672, 38672, 38672,\n  /* 16200 */ 38672, 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411,\n  /* 16215 */ 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672,\n  /* 16230 */ 38672, 49703, 38672, 38672, 26931, 22475, 22475, 49727, 22475, 22475, 48053, 22411, 22411, 49748, 22411,\n  /* 16245 */ 22411, 46748, 26727, 26727, 49768, 26727, 26727, 32918, 33802, 20903, 38672, 38672, 38672, 38672, 38672,\n  /* 16260 */ 38672, 22475, 49788, 22475, 22475, 28015, 33854, 26700, 22411, 22411, 22411, 27851, 42367, 26727, 26727,\n  /* 16275 */ 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411,\n  /* 16290 */ 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411,\n  /* 16305 */ 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977,\n  /* 16320 */ 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978,\n  /* 16335 */ 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538,\n  /* 16350 */ 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 16365 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 16380 */ 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922,\n  /* 16395 */ 38672, 38672, 38672, 38672, 44448, 27298, 33333, 25344, 45477, 38672, 38672, 43215, 38672, 38672, 49711,\n  /* 16410 */ 38672, 38672, 38672, 49707, 38672, 38672, 27156, 49805, 37753, 37630, 26453, 49986, 49826, 25375, 38672,\n  /* 16425 */ 20236, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 28133, 26929, 22475, 22475, 22475, 47834,\n  /* 16440 */ 25393, 22411, 22411, 22411, 49862, 26727, 26727, 26727, 37879, 30990, 39463, 38672, 45808, 38672, 38672,\n  /* 16455 */ 38672, 38672, 38672, 38672, 29514, 38672, 38672, 28258, 49898, 22475, 31756, 22475, 35786, 22411, 49919,\n  /* 16470 */ 22411, 36688, 22411, 37334, 40766, 26727, 26727, 49936, 26727, 32919, 33803, 38672, 25655, 38672, 38672,\n  /* 16485 */ 38672, 38672, 38672, 38672, 38672, 26931, 22475, 37984, 22475, 22475, 22475, 35151, 22411, 46398, 22411,\n  /* 16500 */ 22411, 22411, 43919, 26727, 31302, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672,\n  /* 16515 */ 38999, 38672, 22475, 22475, 26805, 22475, 49623, 33854, 22411, 22411, 49957, 22411, 49975, 26727, 26727,\n  /* 16530 */ 47510, 26727, 49846, 33795, 38672, 38672, 18612, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411,\n  /* 16545 */ 22411, 22411, 26485, 26727, 26727, 26727, 26998, 30025, 38672, 38672, 50002, 26931, 50023, 22475, 27060,\n  /* 16560 */ 22411, 22411, 28347, 50040, 26727, 22521, 26313, 38672, 40323, 38672, 27136, 29066, 42143, 22411, 50062,\n  /* 16575 */ 26977, 27488, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411,\n  /* 16590 */ 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459,\n  /* 16605 */ 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 16620 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 16635 */ 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672,\n  /* 16650 */ 42922, 41360, 38672, 38672, 38672, 44448, 27298, 33333, 25344, 38672, 38672, 38672, 43215, 38672, 38672,\n  /* 16665 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375,\n  /* 16680 */ 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475,\n  /* 16695 */ 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672,\n  /* 16710 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411,\n  /* 16725 */ 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672,\n  /* 16740 */ 38672, 38672, 38672, 38672, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411,\n  /* 16755 */ 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672,\n  /* 16770 */ 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727,\n  /* 16785 */ 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442,\n  /* 16800 */ 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475,\n  /* 16815 */ 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411,\n  /* 16830 */ 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476,\n  /* 16845 */ 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345,\n  /* 16860 */ 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 16875 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 16890 */ 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 34339, 19585, 19583, 40183,\n  /* 16905 */ 33676, 50079, 27766, 27768, 50110, 33673, 34350, 50128, 50140, 20832, 38672, 38672, 38672, 43215, 38672,\n  /* 16920 */ 38672, 25515, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 20613, 18794, 19200, 19418, 35990,\n  /* 16935 */ 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422,\n  /* 16950 */ 18462, 20670, 18475, 50434, 18503, 18525, 50156, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930,\n  /* 16965 */ 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849,\n  /* 16980 */ 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943,\n  /* 16995 */ 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726,\n  /* 17010 */ 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315,\n  /* 17025 */ 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601,\n  /* 17040 */ 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875,\n  /* 17055 */ 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039,\n  /* 17070 */ 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380,\n  /* 17085 */ 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532,\n  /* 17100 */ 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695,\n  /* 17115 */ 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 17130 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 17145 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 30470, 38672, 38672,\n  /* 17160 */ 20273, 38672, 42922, 31104, 31112, 50226, 50240, 50248, 42483, 50272, 20832, 38672, 38672, 38672, 43215,\n  /* 17175 */ 38672, 38672, 50505, 38672, 38672, 38672, 25547, 38672, 38672, 25544, 18953, 18958, 18794, 35998, 18531,\n  /* 17190 */ 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403,\n  /* 17205 */ 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672,\n  /* 17220 */ 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406,\n  /* 17235 */ 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554,\n  /* 17250 */ 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129,\n  /* 17265 */ 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299,\n  /* 17280 */ 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046,\n  /* 17295 */ 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859,\n  /* 17310 */ 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979,\n  /* 17325 */ 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337,\n  /* 17340 */ 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516,\n  /* 17355 */ 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954,\n  /* 17370 */ 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 17385 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 17400 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 42589, 38672,\n  /* 17415 */ 38672, 38672, 38672, 24842, 35017, 50315, 50319, 50335, 50343, 43995, 50367, 20832, 38672, 38672, 38672,\n  /* 17430 */ 43215, 38672, 38672, 25359, 38672, 38672, 23171, 38672, 38672, 38672, 23167, 18953, 18958, 18794, 35998,\n  /* 17445 */ 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387,\n  /* 17460 */ 18403, 18422, 18462, 20670, 19075, 50434, 18503, 18525, 50409, 19412, 50440, 18509, 36003, 19232, 20563,\n  /* 17475 */ 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769,\n  /* 17490 */ 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955,\n  /* 17505 */ 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103,\n  /* 17520 */ 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964,\n  /* 17535 */ 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631,\n  /* 17550 */ 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113,\n  /* 17565 */ 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515,\n  /* 17580 */ 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298,\n  /* 17595 */ 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500,\n  /* 17610 */ 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437,\n  /* 17625 */ 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 17640 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 17655 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 30470,\n  /* 17670 */ 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 38672, 38672, 24860, 25344, 38672, 38672,\n  /* 17685 */ 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411,\n  /* 17700 */ 26453, 44280, 27268, 22230, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 17715 */ 26929, 22475, 22475, 22475, 22475, 36544, 22411, 22411, 22411, 33858, 26727, 26727, 26727, 26727, 30990,\n  /* 17730 */ 39463, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475,\n  /* 17745 */ 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919,\n  /* 17760 */ 33803, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26931, 22475, 22475, 22475, 22475,\n  /* 17775 */ 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 33802,\n  /* 17790 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411,\n  /* 17805 */ 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255,\n  /* 17820 */ 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672,\n  /* 17835 */ 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672,\n  /* 17850 */ 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975,\n  /* 17865 */ 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257,\n  /* 17880 */ 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672,\n  /* 17895 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 17910 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 17925 */ 38672, 38672, 38672, 38956, 38672, 38672, 29796, 50456, 50460, 50460, 50482, 38955, 50476, 50498, 38672,\n  /* 17940 */ 38672, 38672, 38672, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958,\n  /* 17955 */ 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 38672, 38672, 40144, 38672, 23032, 18306, 18356,\n  /* 17970 */ 18382, 18387, 18403, 18422, 18462, 20670, 18475, 50434, 18503, 18525, 50156, 19412, 50440, 18509, 36003,\n  /* 17985 */ 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753,\n  /* 18000 */ 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839,\n  /* 18015 */ 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062,\n  /* 18030 */ 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273,\n  /* 18045 */ 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938,\n  /* 18060 */ 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771,\n  /* 18075 */ 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383,\n  /* 18090 */ 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223,\n  /* 18105 */ 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 50527, 20452, 20468, 20484, 20497,\n  /* 18120 */ 50424, 20500, 20516, 26100, 20548, 20592, 20589, 50171, 18953, 19547, 18794, 18487, 20629, 20143, 19945,\n  /* 18135 */ 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672,\n  /* 18150 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,\n  /* 18165 */ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 94505, 94505, 90408, 90408,\n  /* 18180 */ 94505, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 94505,\n  /* 18195 */ 94505, 1, 12290, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 0, 94505, 90408, 94505,\n  /* 18211 */ 94505, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 364, 94505, 90408, 94505, 94505, 94505, 94505,\n  /* 18226 */ 94505, 94505, 94505, 69632, 73728, 94505, 94505, 94505, 94505, 94505, 65536, 94505, 3, 0, 0, 2183168, 0,\n  /* 18243 */ 0, 0, 90408, 94505, 298, 299, 0, 2134016, 302, 303, 0, 0, 0, 0, 0, 1636, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1645,\n  /* 18269 */ 0, 0, 2732032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2904064, 2908160, 0, 0, 0, 0, 0, 1699, 0, 0, 0, 0, 0, 0, 0,\n  /* 18297 */ 0, 0, 0, 0, 2963, 0, 0, 0, 0, 0, 2424832, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2625536, 0, 0, 0, 0, 0,\n  /* 18326 */ 2045, 0, 0, 0, 0, 2049, 0, 0, 0, 0, 0, 0, 0, 2711, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2976, 0, 534, 534, 534, 534,\n  /* 18355 */ 534, 2699264, 2715648, 0, 0, 2772992, 2805760, 2830336, 0, 2863104, 2920448, 0, 0, 0, 0, 0, 0, 0, 303,\n  /* 18374 */ 303, 303, 303, 0, 303, 303, 303, 303, 0, 2805760, 2920448, 0, 0, 0, 0, 0, 2920448, 0, 0, 0, 0, 0, 0, 0,\n  /* 18398 */ 2732032, 0, 2179072, 2179072, 2179072, 2179072, 2424832, 2433024, 2179072, 2179072, 2179072, 2179072,\n  /* 18410 */ 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072,\n  /* 18421 */ 3125248, 2625536, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2699264, 2179072, 2715648,\n  /* 18432 */ 2179072, 2723840, 2179072, 2732032, 2772992, 2179072, 2125824, 2125824, 2125824, 2125824, 2125824,\n  /* 18443 */ 2592768, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824,\n  /* 18454 */ 2551808, 2125824, 2125824, 2125824, 2125824, 2125824, 2637824, 2125824, 2179072, 2179072, 2805760,\n  /* 18465 */ 2179072, 2830336, 2179072, 2179072, 2863104, 2179072, 2179072, 2179072, 2179072, 2920448, 2179072,\n  /* 18476 */ 2179072, 2179072, 0, 0, 2125824, 2125824, 2125824, 2125824, 2125824, 2424832, 2433024, 2125824, 2125824,\n  /* 18489 */ 2125824, 2125824, 0, 2502656, 0, 0, 3010560, 0, 0, 0, 0, 2990080, 2179072, 2179072, 2699264, 2125824,\n  /* 18505 */ 2715648, 2125824, 2723840, 2125824, 2732032, 2772992, 2125824, 2125824, 2125824, 2805760, 2125824,\n  /* 18516 */ 2830336, 2125824, 2125824, 2863104, 2125824, 2125824, 2125824, 2125824, 2920448, 2863104, 2125824,\n  /* 18527 */ 2125824, 2125824, 2125824, 2920448, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824,\n  /* 18538 */ 2125824, 2125824, 2125824, 0, 1142784, 0, 2179072, 2125824, 2125824, 2125824, 3117056, 2125824, 2125824,\n  /* 18551 */ 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 975, 2125824, 0, 0, 0, 0, 0,\n  /* 18568 */ 0, 2510848, 2514944, 0, 0, 2547712, 2596864, 0, 0, 0, 0, 0, 0, 735, 0, 0, 0, 0, 735, 0, 741, 0, 0, 0,\n  /* 18592 */ 2789376, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3137, 0, 0, 2142208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 18622 */ 0, 0, 0, 0, 2733, 0, 2662400, 0, 2813952, 0, 0, 0, 0, 2375680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 350, 351, 352,\n  /* 18648 */ 0, 0, 0, 0, 2584576, 0, 0, 0, 0, 2838528, 0, 0, 2838528, 0, 0, 0, 0, 0, 0, 0, 0, 1122, 0, 0, 0, 0, 0, 0,\n  /* 18676 */ 0, 0, 0, 0, 1186, 0, 0, 0, 0, 0, 0, 0, 2891776, 0, 0, 0, 0, 0, 2392064, 2412544, 0, 0, 2838528, 0, 0, 0,\n  /* 18702 */ 0, 0, 0, 262144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 706, 0, 0, 0, 0, 0, 0, 0, 0, 2179072, 2179072, 2179072,\n  /* 18728 */ 2408448, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072,\n  /* 18739 */ 2179072, 2179072, 2125824, 0, 2126724, 2126724, 2617344, 2179072, 2179072, 2179072, 2179072, 2179072,\n  /* 18751 */ 2179072, 2662400, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072,\n  /* 18762 */ 2179072, 2584576, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2801664,\n  /* 18773 */ 2813952, 2179072, 2838528, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072,\n  /* 18784 */ 2179072, 2179072, 2179072, 2179072, 2125824, 1798, 2125824, 2125824, 2125824, 2408448, 2125824, 2125824,\n  /* 18796 */ 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824,\n  /* 18807 */ 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2662400, 2125824, 2125824, 2125824, 2125824,\n  /* 18818 */ 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2801664, 2813952, 2125824, 2838528,\n  /* 18829 */ 2125824, 2813952, 2125824, 2838528, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824,\n  /* 18840 */ 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3125248, 2125824, 2125824, 2125824, 2125824,\n  /* 18851 */ 2125824, 2125824, 2125824, 2125824, 0, 2822144, 0, 0, 2883584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3080192,\n  /* 18871 */ 3100672, 3104768, 0, 0, 0, 0, 3186688, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 2797568,\n  /* 18897 */ 0, 0, 0, 0, 0, 0, 0, 2850816, 2867200, 0, 0, 2883584, 0, 0, 0, 0, 0, 2072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 18925 */ 0, 3134, 0, 0, 0, 0, 2465792, 0, 0, 2719744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3014656, 3207168, 0, 2691072,\n  /* 18949 */ 0, 0, 3215360, 0, 0, 0, 0, 0, 0, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072,\n  /* 18966 */ 2179072, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 2125824, 2179072, 2179072, 2179072,\n  /* 18977 */ 2179072, 2179072, 2461696, 2465792, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2523136,\n  /* 18988 */ 2179072, 2179072, 2179072, 0, 1342, 2125824, 2125824, 2125824, 2125824, 2125824, 2424832, 2433024,\n  /* 19000 */ 2125824, 2125824, 2125824, 2125824, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2473984, 2478080, 2179072, 2179072,\n  /* 19018 */ 2179072, 2179072, 2179072, 2179072, 2600960, 2179072, 2179072, 2179072, 2179072, 2641920, 2179072,\n  /* 19029 */ 2179072, 2179072, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 2125824, 1047, 2125824, 2125824,\n  /* 19041 */ 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3035136, 2125824, 2125824, 3072000, 2125824,\n  /* 19052 */ 2125824, 2125824, 3121152, 2125824, 2125824, 3141632, 2125824, 2125824, 2125824, 3170304, 2179072,\n  /* 19063 */ 2179072, 2719744, 2179072, 2179072, 2179072, 2179072, 2179072, 2768896, 2777088, 2781184, 2797568,\n  /* 19074 */ 2822144, 2179072, 2179072, 2179072, 0, 900, 2125824, 2125824, 2125824, 2125824, 2125824, 2424832, 2433024,\n  /* 19087 */ 2125824, 2125824, 2125824, 2125824, 298, 0, 299, 0, 302, 0, 303, 0, 0, 0, 2473984, 2478080, 2179072,\n  /* 19104 */ 3063808, 2179072, 2179072, 2179072, 2179072, 3100672, 2179072, 2179072, 3133440, 2179072, 2179072,\n  /* 19115 */ 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2551808, 2179072, 2179072, 2179072, 2179072,\n  /* 19126 */ 2179072, 2637824, 2179072, 2179072, 2179072, 2179072, 3207168, 2179072, 0, 0, 0, 0, 2125824, 2125824,\n  /* 19140 */ 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 2125824, 2125824, 2125824, 2408448, 2125824,\n  /* 19153 */ 2125824, 2125824, 2719744, 2125824, 2125824, 2125824, 2125824, 2125824, 2768896, 2777088, 2781184,\n  /* 19164 */ 2797568, 2822144, 2125824, 2125824, 2125824, 2883584, 2179072, 2912256, 2179072, 2179072, 2179072,\n  /* 19175 */ 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3039232, 2125824,\n  /* 19186 */ 2912256, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824,\n  /* 19197 */ 2125824, 2125824, 3039232, 2125824, 2125824, 0, 2125824, 2126799, 2125824, 2125824, 2125824, 2125824,\n  /* 19209 */ 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 245760, 0, 0, 2179072, 2125824, 2125824,\n  /* 19222 */ 3063808, 2125824, 2125824, 2125824, 2125824, 2125824, 3100672, 2125824, 2125824, 3133440, 2125824,\n  /* 19233 */ 2125824, 2125824, 2125824, 2125824, 2125824, 0, 2179072, 2125824, 2125824, 2457600, 2179072, 2179072,\n  /* 19245 */ 2179072, 2179072, 2457600, 2125824, 2125824, 2125824, 3207168, 2125824, 0, 0, 0, 0, 2125824, 2125824,\n  /* 19259 */ 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 1894, 2125824, 2125824, 2125824, 2408448,\n  /* 19271 */ 2125824, 2125824, 2125824, 2125824, 2125824, 3207168, 2125824, 2179072, 2125824, 2125824, 2179072,\n  /* 19282 */ 2179072, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 0, 2486272, 0, 0, 0, 0, 0, 2678784,\n  /* 19297 */ 2854912, 3006464, 0, 2924544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3162112, 3170304, 0, 0, 3219456, 3035136, 0, 0,\n  /* 19318 */ 0, 0, 0, 3072000, 2650112, 0, 0, 2809856, 0, 0, 0, 0, 0, 0, 0, 1650, 0, 0, 0, 0, 0, 0, 1654, 0, 2686976,\n  /* 19343 */ 2736128, 0, 0, 2531328, 2707456, 0, 3190784, 0, 0, 2576384, 0, 0, 0, 0, 0, 0, 0, 1688, 0, 0, 0, 0, 0, 0,\n  /* 19367 */ 0, 0, 0, 2742, 0, 0, 0, 0, 0, 0, 0, 3121152, 3141632, 0, 0, 0, 2924544, 0, 2682880, 0, 0, 0, 0, 0, 0,\n  /* 19392 */ 3112960, 2387968, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2453504,\n  /* 19403 */ 2179072, 2473984, 2482176, 2179072, 2179072, 2179072, 0, 901, 2125824, 2125824, 2125824, 2125824, 2125824,\n  /* 19416 */ 2424832, 2433024, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824,\n  /* 19427 */ 2125824, 0, 0, 0, 2179072, 2125824, 2125824, 2179072, 2179072, 2179072, 2531328, 2179072, 2179072,\n  /* 19440 */ 2179072, 2179072, 2179072, 2179072, 2179072, 2605056, 2179072, 2629632, 2179072, 2179072, 2179072,\n  /* 19451 */ 2179072, 2179072, 2125824, 2527232, 2125824, 2125824, 2125824, 2125824, 2125824, 3092480, 2125824,\n  /* 19462 */ 2527232, 2125824, 2650112, 2179072, 2179072, 2179072, 2707456, 2179072, 2736128, 2179072, 2179072,\n  /* 19473 */ 2179072, 2179072, 2179072, 2179072, 2179072, 2887680, 2179072, 2125824, 2125824, 2125824, 2125824,\n  /* 19484 */ 2441216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2932736, 2179072, 2924544, 2179072, 2179072, 2179072, 2179072,\n  /* 19501 */ 2179072, 2179072, 2179072, 2179072, 2179072, 3035136, 2179072, 2179072, 3072000, 2179072, 2125824,\n  /* 19512 */ 2658304, 2973696, 2125824, 2125824, 2658304, 2973696, 2125824, 2711552, 2560000, 2179072, 2560000,\n  /* 19523 */ 2125824, 2560000, 2125824, 2125824, 2125824, 2125824, 2125824, 3223552, 975, 0, 2125824, 2125824, 2416640,\n  /* 19536 */ 2125824, 2125824, 2125824, 2445312, 2125824, 2125824, 2125824, 2125824, 2179072, 2125824, 2125824,\n  /* 19547 */ 2179072, 2179072, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824,\n  /* 19558 */ 2125824, 2125824, 2125824, 2125824, 2125824, 1047, 0, 0, 2179072, 2125824, 2125824, 2179072, 3121152,\n  /* 19571 */ 2179072, 2179072, 3141632, 2179072, 2179072, 2179072, 3170304, 2179072, 2179072, 3190784, 3194880,\n  /* 19582 */ 2179072, 0, 0, 0, 0, 0, 0, 1134592, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1134592, 2125824, 2125824, 3190784,\n  /* 19604 */ 3194880, 2125824, 0, 0, 0, 0, 0, 0, 2387968, 2125824, 2125824, 2125824, 2420736, 2125824, 2125824,\n  /* 19619 */ 2125824, 2125824, 2125824, 2453504, 2125824, 2707456, 2125824, 2736128, 2125824, 2125824, 2125824,\n  /* 19630 */ 2125824, 2125824, 2125824, 2125824, 2125824, 2887680, 2125824, 2125824, 2924544, 2125824, 2125824,\n  /* 19641 */ 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3141632, 2125824, 2125824,\n  /* 19652 */ 2125824, 3170304, 2125824, 2125824, 3190784, 3194880, 2125824, 2179072, 2125824, 2125824, 2179072,\n  /* 19663 */ 2125824, 2125824, 2179072, 2125824, 2125824, 2985984, 2985984, 2985984, 0, 0, 0, 0, 0, 0, 0, 69632, 73728,\n  /* 19680 */ 0, 419, 419, 0, 0, 65536, 419, 2179072, 3112960, 3219456, 2125824, 2125824, 3112960, 3219456, 2125824,\n  /* 19695 */ 2125824, 3112960, 3219456, 0, 0, 0, 0, 0, 0, 0, 1701, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1624, 0, 0, 0, 0, 0, 0,\n  /* 19722 */ 0, 3022848, 0, 0, 3145728, 0, 3203072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 335, 336, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 19749 */ 3067904, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 787, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2445312, 0, 2842624, 0,\n  /* 19778 */ 0, 0, 2637824, 0, 0, 0, 0, 2621440, 0, 0, 0, 0, 0, 2100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2727936, 0, 0,\n  /* 19806 */ 0, 3084288, 3182592, 2899968, 0, 2961408, 0, 0, 2179072, 2179072, 2416640, 2179072, 2179072, 2179072,\n  /* 19820 */ 2445312, 2179072, 2179072, 2179072, 0, 901, 2126724, 2126724, 2126724, 2126724, 2126724, 2425732, 2433924,\n  /* 19833 */ 2126724, 2126724, 2126724, 2126724, 2458574, 2126798, 2126798, 2126798, 2126798, 2183168, 0, 0, 0, 0, 0,\n  /* 19848 */ 0, 0, 396, 0, 0, 0, 0, 0, 396, 0, 0, 2179072, 2179072, 2179072, 2727936, 2752512, 2179072, 2179072,\n  /* 19866 */ 2179072, 2842624, 2846720, 2179072, 2895872, 2916352, 2179072, 2179072, 2945024, 2179072, 2179072,\n  /* 19877 */ 2994176, 2179072, 3002368, 2179072, 2179072, 3022848, 2179072, 3067904, 3084288, 3096576, 2179072,\n  /* 19888 */ 2179072, 2179072, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 2125824, 237568, 2125824, 2125824,\n  /* 19900 */ 2125824, 2125824, 2125824, 2125824, 2125824, 2605056, 2125824, 2629632, 2125824, 2125824, 2650112,\n  /* 19911 */ 2125824, 2125824, 2125824, 2707456, 2125824, 2736128, 2125824, 2125824, 2125824, 2125824, 2179072,\n  /* 19922 */ 2179072, 2179072, 3223552, 0, 0, 2125824, 2125824, 2416640, 2125824, 2125824, 2125824, 2445312, 2125824,\n  /* 19935 */ 2125824, 2125824, 2125824, 2125824, 2600960, 2125824, 2125824, 2125824, 2125824, 2641920, 2125824,\n  /* 19946 */ 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3010560, 2125824, 2125824,\n  /* 19957 */ 2125824, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2940, 0, 2637824, 2125824, 2125824, 2125824, 2125824,\n  /* 19979 */ 2727936, 2752512, 2125824, 2125824, 2125824, 2125824, 2842624, 2846720, 2125824, 2895872, 2916352,\n  /* 19990 */ 2125824, 2125824, 2125824, 2125824, 2945024, 2125824, 2125824, 2994176, 2125824, 3002368, 2125824,\n  /* 20001 */ 2125824, 3022848, 2125824, 3067904, 3084288, 2125824, 3096576, 2125824, 2125824, 0, 0, 0, 2928640, 0, 0,\n  /* 20016 */ 0, 3059712, 0, 2543616, 2666496, 0, 2633728, 0, 0, 0, 0, 0, 0, 766, 767, 0, 0, 0, 754, 0, 0, 774, 0,\n  /* 20039 */ 2179072, 2179072, 2179072, 2494464, 2179072, 2179072, 2514944, 2179072, 2179072, 2179072, 2543616,\n  /* 20050 */ 2547712, 2179072, 2179072, 2596864, 2179072, 2126724, 2126724, 2126724, 2126724, 2126724, 2593668,\n  /* 20061 */ 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126798, 0, 0, 0, 0, 0, 0,\n  /* 20076 */ 2510848, 2514944, 0, 0, 2547712, 2596864, 0, 0, 0, 0, 0, 0, 1164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1564, 0,\n  /* 20101 */ 1566, 0, 0, 0, 2179072, 2179072, 3059712, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3178496,\n  /* 20115 */ 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2928640,\n  /* 20126 */ 2125824, 2125824, 2125824, 2998272, 2125824, 2125824, 2125824, 2125824, 3059712, 2125824, 2125824,\n  /* 20137 */ 2125824, 2125824, 2125824, 2125824, 2125824, 3178496, 2125824, 2125824, 2125824, 2125824, 2125824,\n  /* 20148 */ 2125824, 2125824, 2125824, 2125824, 3010560, 2125824, 2125824, 2125824, 2125824, 2125824, 2502656,\n  /* 20159 */ 2125824, 2125824, 2125824, 2494464, 2125824, 2125824, 2514944, 2125824, 2125824, 2125824, 2543616,\n  /* 20170 */ 2547712, 2125824, 2125824, 2596864, 2125824, 2125824, 2125824, 2125824, 2125824, 3059712, 2125824,\n  /* 20181 */ 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3178496, 2179072, 2125824, 2125824, 2179072,\n  /* 20192 */ 2126724, 2126724, 2126798, 2126798, 2441216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2932736, 2965504, 0, 0, 3076096,\n  /* 20211 */ 0, 0, 2695168, 3174400, 2646016, 2613248, 2703360, 0, 0, 0, 0, 2977792, 0, 0, 3047424, 3129344, 0,\n  /* 20228 */ 2981888, 2396160, 0, 3153920, 0, 0, 0, 2740224, 0, 0, 0, 0, 0, 0, 1106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 334, 0,\n  /* 20254 */ 0, 0, 0, 0, 0, 0, 0, 2793472, 0, 0, 0, 0, 0, 2469888, 2506752, 2756608, 0, 0, 2580480, 0, 0, 0, 0, 0, 0,\n  /* 20279 */ 1146880, 0, 1146880, 0, 0, 0, 0, 0, 0, 0, 302, 302, 302, 302, 0, 302, 302, 302, 302, 0, 2396160, 2400256,\n  /* 20301 */ 2179072, 2179072, 2441216, 2179072, 2469888, 2179072, 2179072, 2179072, 2519040, 2179072, 2179072,\n  /* 20312 */ 2179072, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 2125824, 241664, 2125824, 2125824, 2125824,\n  /* 20324 */ 2125824, 2125824, 2125824, 2125824, 3223552, 2179072, 2125824, 2125824, 2179072, 2179072, 2125824,\n  /* 20335 */ 2125824, 2125824, 2588672, 2179072, 2613248, 2646016, 2179072, 2179072, 2695168, 2756608, 2179072,\n  /* 20346 */ 2179072, 2179072, 2932736, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 2125824, 2125824,\n  /* 20357 */ 2125824, 2125824, 245760, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2584576, 2125824, 2125824,\n  /* 20369 */ 2125824, 2125824, 2125824, 2617344, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2662400,\n  /* 20380 */ 2179072, 2179072, 2179072, 3129344, 2179072, 2179072, 3153920, 3166208, 3174400, 2396160, 2400256,\n  /* 20391 */ 2125824, 2125824, 2441216, 2125824, 2469888, 2125824, 2125824, 2125824, 2519040, 2125824, 2125824,\n  /* 20402 */ 2125824, 2125824, 2125824, 2519040, 2125824, 2125824, 2125824, 2125824, 2588672, 2125824, 2613248,\n  /* 20413 */ 2646016, 2125824, 2125824, 2695168, 2756608, 2125824, 2125824, 2125824, 2125824, 2932736, 2125824, 0,\n  /* 20425 */ 3108864, 3198976, 0, 0, 3043328, 0, 3149824, 2936832, 0, 2760704, 3132, 0, 0, 0, 0, 534, 534, 534, 534,\n  /* 20444 */ 534, 534, 534, 534, 534, 534, 534, 3503, 2953216, 0, 0, 2826240, 3158016, 2428928, 0, 3018752, 2764800,\n  /* 20461 */ 2572288, 0, 0, 3051520, 2179072, 2428928, 2437120, 2179072, 2486272, 2179072, 2179072, 2179072, 2179072,\n  /* 20474 */ 2179072, 2179072, 2179072, 2179072, 2654208, 2678784, 2760704, 2764800, 2854912, 2969600, 2179072,\n  /* 20485 */ 3006464, 2179072, 3018752, 2179072, 2179072, 2179072, 3149824, 2125824, 2428928, 2437120, 2125824,\n  /* 20496 */ 2486272, 2125824, 2125824, 2125824, 2125824, 2125824, 2654208, 2678784, 2760704, 2764800, 2785280,\n  /* 20507 */ 2854912, 2969600, 2125824, 3006464, 2125824, 3018752, 2125824, 2125824, 2125824, 2125824, 3149824,\n  /* 20518 */ 2179072, 3051520, 2125824, 3051520, 2125824, 3051520, 0, 2490368, 2498560, 0, 0, 0, 0, 2875392, 0, 0, 0,\n  /* 20535 */ 3132, 0, 0, 2834432, 0, 3227648, 2568192, 2564096, 0, 2940928, 2179072, 2179072, 2498560, 2179072,\n  /* 20549 */ 2179072, 2179072, 2555904, 2564096, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072,\n  /* 20560 */ 2179072, 2179072, 3137536, 2125824, 2125824, 2125824, 2125824, 2457600, 2125824, 2125824, 2125824,\n  /* 20571 */ 2125824, 2183168, 0, 0, 0, 0, 0, 0, 0, 333, 0, 0, 0, 0, 0, 333, 0, 0, 2125824, 3137536, 2125824, 2125824,\n  /* 20593 */ 2498560, 2125824, 2125824, 2125824, 2555904, 2564096, 2125824, 2125824, 2125824, 2125824, 2125824,\n  /* 20604 */ 2125824, 2125824, 2125824, 2125824, 3132, 0, 0, 0, 0, 2179072, 2179072, 2179072, 2179072, 2179072,\n  /* 20618 */ 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 2126725, 2125824, 2125824, 2125824,\n  /* 20629 */ 2502656, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3010560,\n  /* 20640 */ 2179072, 2179072, 2125824, 2125824, 2502656, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072,\n  /* 20651 */ 2179072, 2179072, 2179072, 3010560, 2179072, 2179072, 2126724, 2126724, 2503556, 0, 0, 0, 0, 2179072,\n  /* 20665 */ 2179072, 2179072, 2179072, 2179072, 2592768, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072,\n  /* 20676 */ 2179072, 2179072, 3117056, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072,\n  /* 20687 */ 2179072, 2928640, 2179072, 2179072, 2179072, 2998272, 2179072, 2179072, 3031040, 0, 0, 0, 2179072,\n  /* 20700 */ 2449408, 2179072, 2535424, 2179072, 2609152, 2179072, 2859008, 2179072, 2179072, 2179072, 3031040,\n  /* 20711 */ 2125824, 2449408, 2125824, 2535424, 2125824, 2609152, 2125824, 2859008, 2125824, 2125824, 2125824,\n  /* 20722 */ 3031040, 2125824, 2125824, 2449408, 2125824, 2125824, 2125824, 2125824, 2461696, 2465792, 2125824,\n  /* 20733 */ 2125824, 2125824, 2125824, 2125824, 2125824, 2523136, 2125824, 2125824, 2125824, 298, 0, 0, 0, 298, 0,\n  /* 20748 */ 299, 0, 0, 0, 299, 0, 302, 2125824, 2125824, 2125824, 3026944, 2404352, 2125824, 2125824, 2125824,\n  /* 20763 */ 2125824, 3026944, 2539520, 0, 2949120, 2179072, 2658304, 2973696, 111044, 111044, 111044, 111044, 111044,\n  /* 20776 */ 111044, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 452, 452, 111044,\n  /* 20790 */ 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 111044, 111044, 111044, 111044, 111044, 111044, 111044,\n  /* 20807 */ 111044, 111044, 111044, 452, 111044, 111044, 111044, 111044, 111044, 0, 0, 0, 0, 0, 0, 0, 0, 0, 360, 0, 0,\n  /* 20828 */ 0, 0, 0, 360, 3, 0, 0, 2183168, 0, 0, 0, 0, 0, 298, 299, 0, 2134016, 302, 303, 0, 0, 0, 0, 0, 2124, 0, 0,\n  /* 20855 */ 0, 0, 0, 534, 534, 534, 534, 534, 847, 534, 534, 861, 534, 534, 0, 302, 118784, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 20881 */ 0, 0, 0, 0, 0, 3127, 0, 0, 0, 302, 0, 0, 0, 302, 119197, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 0, 2403,\n  /* 20909 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 302, 302, 0, 0, 0, 0, 302, 302, 302, 302, 302, 302, 0, 0, 0, 0, 0, 302, 0,\n  /* 20938 */ 302, 1, 12290, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2966, 0, 3, 0, 0, 2183168, 0, 0, 0, 0, 0,\n  /* 20967 */ 33396, 299, 0, 2134016, 49784, 303, 0, 0, 0, 0, 0, 2428, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172032, 0, 0, 0,\n  /* 20994 */ 0, 0, 0, 0, 0, 0, 298, 0, 0, 0, 302, 0, 0, 0, 2424832, 2433024, 0, 0, 2457600, 2105631, 12290, 3, 0, 0,\n  /* 21018 */ 293, 0, 0, 0, 0, 293, 0, 0, 0, 0, 0, 0, 0, 2024, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2455, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 21050 */ 0, 0, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 0, 0, 122880, 0, 0, 0, 0, 0,\n  /* 21069 */ 0, 0, 0, 0, 0, 0, 785, 0, 790, 0, 793, 0, 0, 0, 122880, 0, 122880, 122880, 122880, 0, 0, 0, 0, 0, 122880,\n  /* 21094 */ 0, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880,\n  /* 21108 */ 122880, 122880, 122880, 0, 0, 122880, 0, 0, 0, 0, 0, 0, 0, 0, 122880, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 21135 */ 1216, 0, 0, 0, 0, 147456, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3148, 0, 0, 0, 0, 1067, 1071, 0, 0,\n  /* 21165 */ 1075, 1079, 0, 2424832, 2433024, 0, 0, 2457600, 0, 0, 0, 131072, 0, 0, 0, 69632, 73728, 0, 0, 0, 0, 0,\n  /* 21187 */ 65536, 0, 0, 0, 0, 0, 2479, 2437, 0, 0, 0, 0, 0, 2484, 0, 0, 0, 0, 0, 0, 1675, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 21217 */ 0, 3260, 0, 0, 534, 534, 534, 131072, 0, 0, 131072, 131072, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 0, 131072, 0,\n  /* 21241 */ 0, 131072, 0, 0, 0, 0, 0, 135168, 135168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225708, 0, 0, 0,\n  /* 21268 */ 135168, 0, 0, 135168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1096, 0, 0, 0, 0, 0, 0, 0, 135168, 0, 135168,\n  /* 21294 */ 135168, 135168, 135168, 135168, 135168, 0, 135168, 135168, 135168, 135168, 135168, 135168, 0, 0, 0, 0, 0,\n  /* 21311 */ 135168, 0, 135168, 1, 12290, 3, 0, 0, 2183168, 0, 0, 0, 0, 0, 629, 630, 0, 2134016, 633, 634, 0, 0, 0, 0,\n  /* 21335 */ 0, 2725, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2200245, 2200245, 2200245, 0, 0, 2125824, 3117056, 2125824,\n  /* 21356 */ 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 1434, 2125824,\n  /* 21369 */ 2125824, 2125824, 2125824, 2932736, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824,\n  /* 21380 */ 2125824, 3129344, 2125824, 2125824, 3153920, 3166208, 3174400, 2506752, 2506752, 2506752, 0, 303, 139264,\n  /* 21393 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 266240, 0, 0, 0, 0, 0, 303, 0, 0, 0, 303, 69632, 139681, 0, 0,\n  /* 21422 */ 0, 0, 0, 65536, 0, 0, 0, 0, 0, 2738, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2013, 0, 0, 0, 0, 303, 303, 303,\n  /* 21451 */ 303, 303, 303, 0, 0, 0, 0, 0, 303, 0, 303, 1, 12290, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, 3, 0, 0,\n  /* 21481 */ 2183168, 0, 0, 0, 0, 0, 298, 33399, 0, 2134016, 302, 49787, 0, 0, 0, 0, 0, 2763, 534, 534, 534, 534, 534,\n  /* 21504 */ 534, 534, 534, 534, 534, 556, 556, 3020, 556, 556, 556, 61440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 21530 */ 0, 360, 300, 300, 300, 143660, 370, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,\n  /* 21551 */ 300, 300, 143660, 300, 300, 143660, 300, 300, 300, 143730, 300, 300, 300, 143730, 69632, 73728, 300, 300,\n  /* 21569 */ 143660, 300, 300, 65536, 300, 300, 0, 0, 300, 300, 143660, 300, 300, 300, 300, 300, 300, 300, 300, 300,\n  /* 21589 */ 365, 300, 0, 143660, 300, 300, 300, 143660, 143660, 143660, 143660, 143660, 143660, 143660, 143660,\n  /* 21604 */ 143660, 143660, 143660, 143660, 143660, 143660, 143660, 143660, 300, 300, 143660, 300, 300, 300, 300, 300,\n  /* 21620 */ 300, 300, 300, 300, 300, 300, 143730, 300, 300, 300, 300, 300, 300, 300, 300, 143660, 143660, 143660,\n  /* 21638 */ 143660, 143660, 143660, 143660, 143660, 143660, 300, 300, 300, 300, 300, 300, 300, 300, 143660, 300,\n  /* 21654 */ 143660, 143660, 143660, 143660, 300, 143660, 143660, 143660, 143660, 143660, 143660, 300, 0, 300, 0, 300,\n  /* 21670 */ 300, 300, 143660, 300, 143660, 143660, 143660, 143660, 143660, 143730, 143660, 143730, 143730, 143730,\n  /* 21684 */ 143730, 143730, 143730, 143660, 143660, 143660, 143660, 143660, 143660, 143660, 143660, 1, 12290, 0, 0, 0,\n  /* 21700 */ 0, 2200245, 2200245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1153, 1154, 0, 0, 0, 0, 0, 0, 155648, 155648, 0,\n  /* 21725 */ 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648,\n  /* 21738 */ 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 0, 0, 0, 0,\n  /* 21753 */ 155648, 0, 0, 0, 0, 0, 155648, 155648, 0, 155648, 155648, 0, 12290, 0, 0, 0, 0, 155648, 0, 155648, 0, 0,\n  /* 21775 */ 0, 0, 0, 155648, 0, 0, 0, 0, 0, 0, 1148, 0, 0, 0, 0, 0, 0, 0, 0, 1157, 3, 0, 0, 2183168, 126976, 0, 0, 0,\n  /* 21803 */ 0, 298, 299, 0, 2134016, 302, 303, 0, 0, 0, 0, 0, 2934, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2446, 0, 0, 0, 0,\n  /* 21832 */ 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744,\n  /* 21845 */ 159744, 159744, 159744, 163840, 159744, 159744, 159744, 159744, 0, 0, 159744, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 21864 */ 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 163840, 159744, 159744,\n  /* 21877 */ 159744, 159744, 159744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 131072, 131072, 25155, 0, 0, 0,\n  /* 21900 */ 159744, 0, 0, 0, 25155, 25155, 25155, 159744, 25155, 25155, 25155, 25155, 25155, 25155, 25155, 159744,\n  /* 21916 */ 159744, 159744, 159744, 25155, 159744, 25155, 1, 12290, 2125824, 3117056, 2125824, 2125824, 2125824,\n  /* 21929 */ 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 24576, 975, 2125824, 2125824, 2125824,\n  /* 21942 */ 2125824, 3092480, 0, 0, 0, 2404352, 2179072, 2179072, 2179072, 2179072, 3026944, 2404352, 2125824,\n  /* 21955 */ 2125824, 2125824, 2125824, 2592768, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824,\n  /* 21966 */ 2125824, 2449408, 0, 2535424, 2125824, 2609152, 2125824, 2859008, 2125824, 2125824, 2125824, 3031040,\n  /* 21978 */ 2125824, 2527232, 0, 0, 0, 2179072, 2527232, 167936, 167936, 167936, 167936, 167936, 167936, 167936,\n  /* 21992 */ 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 1, 12290, 167936, 167936, 167936,\n  /* 22006 */ 0, 0, 167936, 0, 0, 0, 0, 0, 0, 0, 0, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 0,\n  /* 22026 */ 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 155648, 0, 172032, 172032, 0, 172032, 0, 0, 172032, 172032, 0,\n  /* 22050 */ 172032, 0, 0, 0, 0, 172032, 172032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172032, 0, 0, 0, 172032, 172032, 0,\n  /* 22074 */ 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032,\n  /* 22087 */ 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 0, 0, 0, 0, 0, 0,\n  /* 22104 */ 0, 0, 0, 364, 0, 292, 0, 0, 0, 0, 1, 288, 3, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 348, 0, 0, 0, 0,\n  /* 22136 */ 0, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128,\n  /* 22150 */ 176128, 176128, 176128, 1, 0, 176128, 176128, 176128, 0, 0, 176128, 0, 0, 0, 0, 0, 0, 0, 0, 176128,\n  /* 22170 */ 176128, 176128, 176128, 176128, 176128, 176128, 176128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 292, 0, 0, 0,\n  /* 22192 */ 347, 3, 78114, 78114, 292, 0, 627, 0, 0, 0, 298, 299, 0, 2134016, 302, 303, 0, 0, 0, 0, 0, 2946, 0, 0, 0,\n  /* 22217 */ 0, 0, 0, 0, 0, 0, 0, 0, 245760, 0, 0, 0, 0, 78114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 672, 0,\n  /* 22248 */ 1102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 155648, 0, 0, 0, 0, 1146, 0, 0, 0, 0, 1151, 0, 0, 0, 0,\n  /* 22279 */ 0, 0, 0, 346, 0, 404, 0, 0, 0, 0, 0, 404, 0, 0, 0, 2098, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2717, 0,\n  /* 22310 */ 0, 534, 2135, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2147, 534, 534, 534, 534, 534, 534,\n  /* 22331 */ 1775, 534, 534, 534, 1780, 534, 534, 534, 534, 534, 534, 534, 2545, 534, 534, 534, 534, 534, 534, 0, 2549,\n  /* 22352 */ 2220, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2232, 556, 556, 556, 556, 556, 556, 2590,\n  /* 22372 */ 556, 556, 556, 556, 556, 556, 2598, 556, 556, 2307, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580,\n  /* 22393 */ 2319, 580, 580, 580, 0, 0, 0, 2006, 0, 1069, 0, 0, 0, 2008, 0, 1073, 0, 2573, 556, 556, 556, 556, 556,\n  /* 22416 */ 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1396, 0, 0, 2955, 0, 0, 0, 2959, 0, 0, 0, 0, 0, 0,\n  /* 22441 */ 0, 0, 0, 0, 371, 0, 0, 372, 0, 0, 0, 534, 3150, 534, 534, 534, 3153, 534, 534, 534, 534, 534, 534, 534,\n  /* 22465 */ 534, 534, 534, 2547, 534, 534, 534, 0, 0, 3161, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534,\n  /* 22486 */ 534, 534, 534, 534, 534, 556, 556, 556, 556, 580, 3206, 580, 580, 580, 3209, 580, 580, 580, 580, 580, 580,\n  /* 22507 */ 580, 580, 2679, 580, 580, 580, 534, 580, 556, 534, 580, 580, 3217, 580, 580, 580, 580, 580, 580, 580, 580,\n  /* 22528 */ 580, 580, 580, 580, 580, 534, 580, 556, 534, 580, 580, 3309, 580, 580, 580, 580, 3310, 3311, 580, 580,\n  /* 22548 */ 580, 580, 580, 580, 580, 580, 2875, 580, 580, 580, 580, 580, 580, 580, 580, 3071, 580, 580, 580, 580, 580,\n  /* 22569 */ 580, 580, 580, 3233, 580, 580, 580, 580, 534, 580, 556, 1993, 534, 534, 534, 1997, 556, 556, 556, 2001,\n  /* 22589 */ 534, 534, 534, 3339, 534, 534, 534, 534, 534, 534, 3345, 534, 534, 534, 534, 556, 3407, 556, 3409, 556,\n  /* 22609 */ 556, 556, 556, 556, 556, 556, 556, 1373, 556, 556, 556, 556, 556, 556, 556, 3364, 556, 580, 580, 580, 580,\n  /* 22630 */ 580, 580, 3370, 580, 580, 580, 580, 580, 580, 3376, 580, 580, 580, 3380, 580, 534, 556, 580, 0, 0, 0, 0,\n  /* 22652 */ 0, 0, 0, 0, 0, 2925, 0, 0, 0, 0, 0, 3132, 0, 0, 0, 0, 3391, 534, 534, 534, 534, 534, 534, 534, 534, 534,\n  /* 22678 */ 534, 534, 2198, 534, 2200, 534, 534, 534, 534, 534, 534, 3406, 556, 556, 556, 556, 556, 556, 556, 556,\n  /* 22698 */ 556, 556, 556, 556, 26009, 1341, 975, 580, 556, 556, 556, 556, 3422, 580, 580, 580, 580, 580, 580, 580,\n  /* 22718 */ 580, 580, 580, 580, 1449, 580, 580, 580, 580, 580, 580, 580, 3522, 580, 580, 580, 580, 580, 580, 580, 580,\n  /* 22739 */ 580, 0, 0, 0, 534, 534, 534, 534, 3585, 534, 556, 556, 3, 78114, 78114, 292, 0, 0, 0, 0, 0, 298, 299, 0,\n  /* 22763 */ 2134016, 302, 303, 0, 0, 0, 0, 0, 2973, 0, 0, 2975, 0, 0, 534, 534, 2980, 534, 534, 534, 534, 534, 534,\n  /* 22786 */ 2532, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2793, 534, 534, 534, 534, 534, 0, 0, 0, 304, 0, 0,\n  /* 22809 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2732, 0, 0, 192965, 192965, 192965, 192965, 192965, 192965, 192965,\n  /* 22830 */ 192965, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 0, 192965, 0, 1, 12290, 192965,\n  /* 22845 */ 192965, 192965, 0, 0, 192965, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1201, 0, 0, 0, 0, 0, 0, 0, 0, 192965,\n  /* 22871 */ 192965, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 0, 192965, 192965, 192965, 192965,\n  /* 22885 */ 192965, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 304, 0, 0, 0, 0, 0, 0, 0, 0, 196608, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 22916 */ 0, 0, 0, 1582, 0, 0, 0, 301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 727, 406, 406, 406, 406, 406,\n  /* 22945 */ 406, 0, 0, 0, 0, 0, 406, 0, 406, 1, 12290, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118784, 298, 3, 78114,\n  /* 22972 */ 78114, 292, 0, 0, 0, 0, 0, 298, 299, 0, 301, 302, 303, 0, 0, 0, 0, 0, 3142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 23001 */ 0, 2978, 534, 534, 534, 534, 0, 0, 0, 0, 733, 406, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1240, 0, 0, 0, 1244,\n  /* 23029 */ 0, 0, 1175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2871296, 0, 0, 1171, 1171, 0, 0, 0, 1175, 1650, 0,\n  /* 23057 */ 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 253952, 0, 0, 0, 0, 580, 580, 580, 1540, 2005, 0, 0, 0, 0, 1546, 2007, 0,\n  /* 23084 */ 0, 0, 0, 1552, 0, 0, 0, 1558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 405, 0, 0, 0, 0, 0, 2009, 0, 0, 0, 0, 1558,\n  /* 23114 */ 2011, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 406, 0, 0, 0, 0, 0, 534, 534, 534, 534, 2549, 0, 556, 556, 556, 556,\n  /* 23141 */ 556, 556, 556, 556, 556, 556, 1410, 556, 556, 556, 556, 556, 0, 306, 0, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 23166 */ 306, 0, 0, 0, 0, 0, 0, 1155072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2705, 0, 0, 0, 0, 0, 204800,\n  /* 23194 */ 204800, 0, 204800, 204800, 204800, 204800, 204800, 204800, 204800, 204800, 204800, 204800, 204800, 204800,\n  /* 23208 */ 204800, 204800, 205106, 204800, 204800, 205105, 205106, 204800, 205105, 205105, 204800, 204800, 0, 0, 0,\n  /* 23223 */ 0, 0, 0, 0, 0, 0, 364, 299, 0, 0, 0, 0, 0, 3, 0, 0, 2183794, 0, 0, 0, 0, 0, 298, 299, 151552, 2134016,\n  /* 23249 */ 302, 303, 0, 0, 0, 0, 0, 155648, 155648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 655, 212992, 0, 0,\n  /* 23277 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 757, 0, 151552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 23308 */ 286720, 2179072, 2179072, 2179072, 2179072, 2179072, 2126724, 2126724, 2126724, 2126724, 2126724, 0,\n  /* 23320 */ 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 3036110, 2126798, 2126798,\n  /* 23331 */ 3072974, 2126798, 2126798, 2126798, 3122126, 2700164, 2126724, 2716548, 2126724, 2724740, 2126724,\n  /* 23342 */ 2732932, 2773892, 2126724, 2126724, 2126724, 2806660, 2126724, 2831236, 2126724, 2126724, 973, 2126798,\n  /* 23354 */ 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798,\n  /* 23365 */ 2126798, 2126798, 2126798, 2126798, 2864004, 2126724, 2126724, 2126724, 2126724, 2921348, 2126724,\n  /* 23376 */ 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2626436, 2126724,\n  /* 23387 */ 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 3117956, 2126724, 2126724, 2126724, 2126724,\n  /* 23398 */ 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 0, 0, 975, 2126798, 2126798, 2126798, 2126798,\n  /* 23411 */ 2126798, 2126798, 2126798, 3224526, 2179072, 2126798, 2126724, 2179072, 2179072, 2126724, 2126724,\n  /* 23422 */ 2126798, 2126798, 0, 2486272, 0, 0, 0, 0, 0, 2678784, 2854912, 3006464, 2126798, 2126798, 2126798,\n  /* 23437 */ 2626510, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2700238, 2126798, 2716622, 2126798,\n  /* 23448 */ 2724814, 2126798, 2126798, 2126798, 2126798, 2126798, 2454478, 2126798, 2474958, 2483150, 2126798,\n  /* 23459 */ 2126798, 2126798, 2126798, 2126798, 2126798, 2532302, 2733006, 2773966, 2126798, 2126798, 2126798,\n  /* 23470 */ 2806734, 2126798, 2831310, 2126798, 2126798, 2864078, 2126798, 2126798, 2126798, 2126798, 2921422,\n  /* 23481 */ 2126724, 2409348, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724,\n  /* 23492 */ 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2814852, 2126724, 2839428, 2126724,\n  /* 23503 */ 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724,\n  /* 23514 */ 2126724, 3126148, 2126724, 2126724, 2126724, 2126724, 2126798, 2126798, 2585550, 2126798, 2126798,\n  /* 23525 */ 2126798, 2126798, 2126798, 2618318, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2663374,\n  /* 23536 */ 2179072, 2179072, 2179072, 3207168, 2179072, 0, 0, 0, 0, 2126724, 2126724, 2126724, 2126724, 2126724,\n  /* 23550 */ 2126724, 2126724, 2126724, 2552708, 2126724, 2126724, 2126724, 2126724, 2126724, 2638724, 2126724,\n  /* 23561 */ 2126724, 2720644, 2126724, 2126724, 2126724, 2126724, 2126724, 2769796, 2777988, 2782084, 2798468,\n  /* 23572 */ 2823044, 2126724, 2126724, 2126724, 2884484, 2126724, 2913156, 2126724, 2126724, 2126724, 2126724,\n  /* 23583 */ 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 3040132, 2126724, 2126724,\n  /* 23594 */ 2126724, 2728836, 2753412, 2126724, 2126724, 2126724, 2126724, 2843524, 2847620, 2126724, 2896772,\n  /* 23605 */ 2917252, 2126724, 2126724, 2126724, 2126724, 3150724, 2126798, 2429902, 2438094, 2126798, 2487246,\n  /* 23616 */ 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2929614,\n  /* 23627 */ 2126798, 2126798, 2126798, 2999246, 2126798, 3064708, 2126724, 2126724, 2126724, 2126724, 2126724,\n  /* 23638 */ 3101572, 2126724, 2126724, 3134340, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2585476,\n  /* 23649 */ 2126724, 2126724, 2126724, 2126724, 2126724, 2618244, 2126724, 2126724, 2126724, 2126798, 2720718,\n  /* 23660 */ 2126798, 2126798, 2126798, 2126798, 2126798, 2769870, 2778062, 2782158, 2798542, 2823118, 2126798,\n  /* 23671 */ 2126798, 2126798, 2884558, 2126798, 2913230, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798,\n  /* 23682 */ 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 3040206, 2126798, 2126798, 2126798, 2126798,\n  /* 23693 */ 2126798, 2601934, 2126798, 2126798, 2126798, 2126798, 2642894, 2126798, 2126798, 2126798, 2126798,\n  /* 23704 */ 2126798, 2126798, 2126798, 2606030, 2126798, 2630606, 2126798, 2126798, 2651086, 2126798, 2126798,\n  /* 23715 */ 2126798, 3064782, 2126798, 2126798, 2126798, 2126798, 2126798, 3101646, 2126798, 2126798, 3134414,\n  /* 23726 */ 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 0, 2179072, 2126798, 2126724, 2457600, 2179072,\n  /* 23738 */ 2179072, 2179072, 2179072, 2458500, 2126798, 2126798, 2126798, 3208142, 2126798, 2179072, 2126798,\n  /* 23749 */ 2126724, 2179072, 2179072, 2179072, 2179072, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724,\n  /* 23760 */ 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 3011460, 2126724, 2126724, 2126724, 2126798,\n  /* 23771 */ 2126798, 2503630, 0, 0, 0, 0, 2388868, 2126724, 2126724, 2126724, 2421636, 2126724, 2126724, 2126724,\n  /* 23785 */ 2126724, 2126724, 2454404, 2126724, 2126724, 2126724, 3027844, 2405326, 2126798, 2126798, 2126798,\n  /* 23796 */ 2126798, 3027918, 2539520, 0, 2949120, 2179072, 2658304, 2973696, 2474884, 2483076, 2126724, 2126724,\n  /* 23808 */ 2126724, 2126724, 2126724, 2126724, 2532228, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724,\n  /* 23819 */ 2126724, 2601860, 2126724, 2126724, 2126724, 2126724, 2642820, 2126724, 2126724, 2126724, 2126724,\n  /* 23830 */ 2126724, 2655108, 2679684, 2761604, 2765700, 2786180, 2855812, 2970500, 2126724, 3007364, 2126724,\n  /* 23841 */ 3019652, 2605956, 2126724, 2630532, 2126724, 2126724, 2651012, 2126724, 2126724, 2126724, 2708356,\n  /* 23852 */ 2126724, 2737028, 2126724, 2126724, 2126724, 2126724, 2462596, 2466692, 2126724, 2126724, 2126724,\n  /* 23863 */ 2126724, 2126724, 2126724, 2524036, 2126724, 2126724, 2126724, 2126724, 3036036, 2126724, 2126724,\n  /* 23874 */ 3072900, 2126724, 2126724, 2126724, 3122052, 2126724, 2126724, 3142532, 2126724, 2126724, 2126724,\n  /* 23885 */ 3171204, 2126724, 2126724, 3191684, 3195780, 2126724, 0, 0, 0, 0, 0, 0, 2388942, 2126798, 2126798,\n  /* 23900 */ 2126798, 2421710, 2708430, 2126798, 2737102, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798,\n  /* 23911 */ 2126798, 2126798, 2888654, 2126798, 2126798, 2925518, 2126798, 2126798, 2126798, 2126798, 2179072,\n  /* 23922 */ 2126798, 2126724, 2179072, 2179072, 2179072, 2179072, 2126724, 2126724, 2126724, 2126724, 2126798,\n  /* 23933 */ 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798,\n  /* 23944 */ 2802638, 2814926, 2126798, 2839502, 2126798, 2126798, 2126798, 3142606, 2126798, 2126798, 2126798,\n  /* 23955 */ 3171278, 2126798, 2126798, 3191758, 3195854, 2126798, 2179072, 2126798, 2126724, 2179072, 2126724,\n  /* 23966 */ 2126798, 2179072, 2126724, 2126798, 2179072, 2126724, 2126798, 2985984, 2986884, 2986958, 0, 0, 0, 0, 0,\n  /* 23981 */ 0, 0, 69632, 73728, 315, 316, 316, 421, 422, 65536, 429, 2179072, 3112960, 3219456, 2126724, 2126724,\n  /* 23997 */ 3113860, 3220356, 2126798, 2126798, 3113934, 3220430, 0, 0, 0, 0, 0, 0, 0, 2046, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 24019 */ 0, 1238, 0, 0, 0, 0, 0, 0, 2179072, 2179072, 2179072, 3223552, 0, 0, 2126724, 2126724, 2417540, 2126724,\n  /* 24037 */ 2126724, 2126724, 2446212, 2126724, 2126724, 2126724, 2126724, 2888580, 2126724, 2126724, 2925444,\n  /* 24048 */ 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 0, 0, 2126798, 2126798, 2126798,\n  /* 24061 */ 2409422, 2126798, 2126798, 2945924, 2126724, 2126724, 2995076, 2126724, 3003268, 2126724, 2126724,\n  /* 24072 */ 3023748, 2126724, 3068804, 3085188, 2126724, 3097476, 2126724, 2126724, 2126724, 2519940, 2126724,\n  /* 24083 */ 2126724, 2126724, 2126724, 2589572, 2126724, 2614148, 2646916, 2126724, 2126724, 2696068, 2757508,\n  /* 24094 */ 2638798, 2126798, 2126798, 2126798, 2126798, 2728910, 2753486, 2126798, 2126798, 2126798, 2126798,\n  /* 24105 */ 2843598, 2847694, 2126798, 2896846, 2917326, 2126798, 2126798, 2945998, 2126798, 2126798, 2995150,\n  /* 24116 */ 2126798, 3003342, 2126798, 2126798, 3023822, 2126798, 3068878, 3085262, 2126798, 3097550, 2179072,\n  /* 24127 */ 2179072, 3059712, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3178496, 2126724, 2126724,\n  /* 24138 */ 2126724, 2126724, 2126724, 2126724, 3224452, 0, 0, 2126798, 2126798, 2417614, 2126798, 2126798, 2126798,\n  /* 24151 */ 2446286, 2126798, 2126724, 2126724, 3060612, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724,\n  /* 24162 */ 2126724, 3179396, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 3126222, 2126798,\n  /* 24173 */ 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 3118030,\n  /* 24184 */ 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2495438, 2126798, 2126798, 2515918,\n  /* 24195 */ 2126798, 2126798, 2126798, 2544590, 2548686, 2126798, 2126798, 2597838, 2126798, 2126798, 2126798,\n  /* 24206 */ 2126798, 2425806, 2433998, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798,\n  /* 24217 */ 2126798, 2126798, 0, 0, 0, 2179072, 2126798, 2126724, 2126798, 2126798, 2126798, 3060686, 2126798,\n  /* 24230 */ 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 3179470, 2179072, 2126798, 2126724, 2179072,\n  /* 24241 */ 2126724, 2659204, 2974596, 2126724, 2126798, 2659278, 2974670, 2126798, 2711552, 2560000, 2179072,\n  /* 24252 */ 2560900, 2126724, 2560974, 2126798, 2126798, 2126798, 2126798, 2462670, 2466766, 2126798, 2126798,\n  /* 24263 */ 2126798, 2126798, 2126798, 2126798, 2524110, 2126798, 2126798, 2126798, 2126798, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 24280 */ 0, 0, 2473984, 2478080, 2179072, 2179072, 2179072, 3129344, 2179072, 2179072, 3153920, 3166208, 3174400,\n  /* 24293 */ 2397060, 2401156, 2126724, 2126724, 2442116, 2126724, 2470788, 3154820, 3167108, 3175300, 2397134,\n  /* 24304 */ 2401230, 2126798, 2126798, 2442190, 2126798, 2470862, 2126798, 2126798, 2126798, 2520014, 2126798,\n  /* 24315 */ 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 3130318, 2126798, 2126798, 3154894, 3167182,\n  /* 24326 */ 3175374, 2506752, 2507726, 2507652, 2126798, 2126798, 2589646, 2126798, 2614222, 2646990, 2126798,\n  /* 24337 */ 2126798, 2696142, 2757582, 2126798, 2126798, 2126798, 2126798, 2933710, 2126798, 2126798, 2126798,\n  /* 24348 */ 2126798, 2593742, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2449408, 0,\n  /* 24360 */ 2535424, 2179072, 3006464, 2179072, 3018752, 2179072, 2179072, 2179072, 3149824, 2126724, 2429828,\n  /* 24371 */ 2438020, 2126724, 2487172, 2126724, 2126724, 2126724, 2126724, 2933636, 2126724, 2126724, 2126724,\n  /* 24382 */ 2126724, 2126724, 2126724, 2126724, 2126724, 3130244, 2126724, 2126724, 2126798, 2126798, 2655182,\n  /* 24393 */ 2679758, 2761678, 2765774, 2786254, 2855886, 2970574, 2126798, 3007438, 2126798, 3019726, 2126798,\n  /* 24404 */ 2126798, 2126798, 2126798, 0, 2502656, 0, 0, 3010560, 0, 0, 0, 0, 2990080, 2179072, 2179072, 2126798,\n  /* 24420 */ 3150798, 2179072, 3051520, 2126724, 3052420, 2126798, 3052494, 0, 2490368, 2498560, 0, 0, 0, 0, 2875392,\n  /* 24435 */ 2179072, 2179072, 2179072, 2555904, 2564096, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072,\n  /* 24446 */ 2179072, 2179072, 2179072, 3137536, 2126724, 2126724, 2126724, 3208068, 2126724, 0, 0, 0, 0, 2126798,\n  /* 24460 */ 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2552782, 2126798,\n  /* 24471 */ 2126798, 2126798, 2126798, 2126798, 2126724, 2499460, 2126724, 2126724, 2126724, 2556804, 2564996,\n  /* 24482 */ 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2929540, 2126724,\n  /* 24493 */ 2126724, 2126724, 2999172, 2126724, 2126724, 2126724, 3138436, 2126798, 2126798, 2499534, 2126798,\n  /* 24504 */ 2126798, 2126798, 2556878, 2565070, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798,\n  /* 24515 */ 2126798, 2126798, 3011534, 2126798, 2126798, 2126798, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 322, 323, 0,\n  /* 24537 */ 2126724, 2450308, 2126724, 2536324, 2126724, 2610052, 2126724, 2859908, 2126724, 2126724, 2126724,\n  /* 24548 */ 3031940, 2126724, 2126798, 2450382, 2126798, 2126798, 2126798, 2126798, 3093454, 0, 0, 0, 2404352,\n  /* 24561 */ 2179072, 2179072, 2179072, 2179072, 3026944, 2405252, 2126724, 2126724, 2495364, 2126724, 2126724,\n  /* 24572 */ 2515844, 2126724, 2126724, 2126724, 2544516, 2548612, 2126724, 2126724, 2597764, 2126724, 2126724,\n  /* 24583 */ 2126724, 2663300, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724,\n  /* 24594 */ 2126724, 2126724, 2802564, 2536398, 2126798, 2610126, 2126798, 2859982, 2126798, 2126798, 2126798,\n  /* 24605 */ 3032014, 2126798, 2527232, 0, 0, 0, 2179072, 2527232, 2179072, 2179072, 2179072, 2179072, 2179072,\n  /* 24618 */ 2126724, 2528132, 2126724, 2126724, 2126724, 2126724, 2126724, 3093380, 2126798, 2528206, 2126798,\n  /* 24629 */ 2126798, 2126798, 2126798, 3138510, 2940928, 2941828, 2941902, 0, 0, 0, 0, 0, 2748416, 2879488, 0, 0, 0,\n  /* 24646 */ 0, 0, 172032, 0, 172032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 122880, 122880, 0, 0, 0, 221184, 221184, 0,\n  /* 24671 */ 0, 0, 0, 0, 0, 0, 0, 0, 221184, 221184, 0, 0, 221184, 221184, 221184, 0, 0, 0, 0, 0, 0, 221184, 0, 0,\n  /* 24695 */ 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184,\n  /* 24708 */ 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 0, 0, 0, 0, 0, 0,\n  /* 24725 */ 0, 0, 0, 364, 338, 292, 0, 0, 0, 0, 0, 0, 221184, 0, 221184, 221184, 221184, 221184, 221184, 221184,\n  /* 24745 */ 221184, 221184, 221184, 221184, 1, 12290, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139264, 299, 0, 0, 2142208,\n  /* 24768 */ 0, 0, 0, 98304, 0, 0, 0, 53248, 0, 0, 0, 0, 0, 0, 0, 2061, 2062, 0, 0, 0, 0, 0, 0, 0, 0, 159744, 0, 0, 0,\n  /* 24797 */ 0, 0, 0, 0, 0, 1198, 0, 0, 0, 0, 0, 0, 0, 0, 1212, 0, 0, 0, 0, 0, 0, 0, 0, 1578, 0, 0, 0, 577536, 0, 0,\n  /* 24827 */ 1583, 0, 0, 0, 302, 0, 303, 0, 0, 0, 303, 0, 0, 0, 2461696, 0, 0, 0, 0, 0, 0, 1159168, 416, 416, 0, 0, 0,\n  /* 24854 */ 0, 0, 416, 0, 0, 98304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 12290, 2179072, 3121152, 2179072,\n  /* 24879 */ 2179072, 3141632, 2179072, 2179072, 2179072, 3170304, 2179072, 2179072, 3190784, 3194880, 2179072, 901, 0,\n  /* 24892 */ 0, 0, 0, 0, 229376, 0, 0, 0, 0, 0, 0, 0, 0, 1666, 0, 0, 0, 0, 0, 2958, 0, 0, 0, 0, 2962, 0, 0, 0, 0, 2967,\n  /* 24922 */ 0, 0, 901, 0, 2387968, 2125824, 2125824, 2125824, 2420736, 2125824, 2125824, 2125824, 2125824, 2125824,\n  /* 24936 */ 2453504, 2125824, 2473984, 2482176, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2531328,\n  /* 24947 */ 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3190784, 3194880,\n  /* 24958 */ 2125824, 975, 0, 0, 0, 975, 0, 2387968, 2125824, 2125824, 2125824, 2420736, 2179072, 2179072, 2179072,\n  /* 24973 */ 3223552, 901, 0, 2125824, 2125824, 2416640, 2125824, 2125824, 2125824, 2445312, 2125824, 2125824, 2125824,\n  /* 24986 */ 2125824, 2125824, 3223552, 0, 0, 2125824, 2125824, 2416640, 2125824, 2125824, 2125824, 2445312, 2125824,\n  /* 24999 */ 225734, 225734, 225734, 225734, 225734, 225734, 225734, 225734, 225734, 225734, 225734, 225734, 225734,\n  /* 25012 */ 225734, 225734, 225734, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856,\n  /* 25025 */ 249856, 249856, 249856, 249856, 249856, 249856, 0, 0, 0, 0, 0, 0, 0, 0, 0, 379, 0, 0, 0, 0, 0, 0, 0,\n  /* 25048 */ 217088, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 307, 308, 0, 0, 0, 114688, 0, 241664, 258048, 0, 0, 0,\n  /* 25075 */ 0, 0, 0, 0, 0, 0, 0, 676, 677, 678, 0, 0, 0, 254407, 254407, 254407, 254407, 254407, 254407, 254407,\n  /* 25095 */ 254407, 254407, 254407, 254407, 254407, 254407, 254407, 254407, 254407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 386, 0,\n  /* 25115 */ 0, 0, 0, 0, 386, 0, 0, 0, 2183168, 0, 0, 270336, 0, 0, 298, 299, 0, 2134016, 302, 303, 200704, 0, 0,\n  /* 25138 */ 180224, 0, 0, 0, 0, 0, 0, 0, 0, 2424832, 2433024, 0, 0, 2457600, 20480, 0, 0, 0, 0, 2179072, 2179072,\n  /* 25159 */ 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2126724, 2126724,\n  /* 25170 */ 2126724, 2126724, 2126724, 1, 12290, 2113825, 0, 0, 0, 0, 0, 0, 295, 0, 0, 0, 295, 0, 0, 0, 0, 0, 0,\n  /* 25193 */ 2387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 330, 381, 383, 0, 0, 0, 0, 0, 266240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 25223 */ 0, 266240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 12290, 0, 0, 266240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 25253 */ 338, 339, 340, 2113825, 0, 0, 2183168, 0, 0, 0, 0, 0, 298, 299, 0, 2134016, 302, 303, 0, 0, 0, 0, 0,\n  /* 25276 */ 237568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1657, 0, 0, 0, 0, 274432, 274432, 274432, 274432, 274432, 274432,\n  /* 25299 */ 0, 0, 0, 0, 0, 274432, 0, 274432, 1, 12290, 3, 0, 0, 0, 0, 0, 0, 0, 90408, 90408, 90408, 90408, 0, 94505,\n  /* 25323 */ 1, 12290, 3, 78114, 292, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1611, 0, 0, 0, 3, 78114, 78114, 292, 0, 0, 0,\n  /* 25351 */ 0, 0, 298, 299, 0, 0, 302, 303, 0, 0, 0, 0, 0, 2134016, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1163264, 78114, 1066,\n  /* 25377 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 308, 307, 534, 534, 534, 1341, 901, 556, 556, 556, 556, 556,\n  /* 25403 */ 556, 556, 556, 556, 556, 556, 580, 580, 3062, 580, 580, 2009, 0, 0, 0, 0, 0, 2011, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 25429 */ 0, 0, 722, 0, 0, 0, 0, 0, 0, 2954, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 330, 0, 0, 1650, 0, 0, 0, 0,\n  /* 25461 */ 0, 0, 0, 0, 2089, 0, 0, 0, 0, 0, 0, 0, 2086, 0, 0, 0, 0, 0, 2092, 0, 0, 290, 1066, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 25492 */ 0, 0, 0, 0, 0, 0, 680, 681, 3, 78114, 78449, 292, 0, 0, 0, 0, 0, 298, 299, 0, 0, 302, 303, 0, 0, 0, 0, 0,\n  /* 25520 */ 2134016, 0, 0, 0, 0, 0, 0, 0, 0, 1138688, 0, 0, 0, 0, 0, 2134016, 0, 0, 0, 0, 0, 0, 0, 739, 0, 0, 0, 0, 0,\n  /* 25549 */ 0, 1150976, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 385,\n  /* 25580 */ 337, 0, 581, 557, 557, 557, 557, 557, 557, 557, 581, 581, 581, 534, 581, 581, 581, 581, 581, 581, 581,\n  /* 25601 */ 557, 557, 534, 557, 581, 557, 581, 1, 12290, 1, 12290, 3, 78115, 292, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 25627 */ 1680, 0, 0, 0, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624,\n  /* 25642 */ 282624, 282624, 282624, 282624, 282624, 1, 12290, 282624, 282624, 282624, 0, 0, 282624, 0, 0, 0, 0, 0, 0,\n  /* 25661 */ 0, 0, 0, 0, 0, 2027, 0, 0, 0, 0, 0, 0, 0, 0, 282624, 282624, 282624, 282624, 282624, 282624, 282624,\n  /* 25682 */ 282624, 282624, 282624, 0, 282624, 282624, 282624, 282624, 282624, 0, 0, 0, 0, 0, 0, 0, 0, 0, 637, 0, 0,\n  /* 25703 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 641, 0, 0, 0, 0, 0, 3047424, 3129344, 0, 2981888, 2396160, 0, 3153920, 3132,\n  /* 25727 */ 0, 0, 2740224, 0, 0, 0, 0, 0, 0, 1181, 1183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1608, 1609, 1610, 0, 0, 0, 0, 0,\n  /* 25755 */ 0, 0, 286720, 286720, 0, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720,\n  /* 25770 */ 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720,\n  /* 25783 */ 286720, 0, 0, 0, 0, 0, 0, 0, 0, 0, 705, 0, 0, 0, 709, 0, 0, 0, 3108864, 3198976, 0, 0, 3043328, 0,\n  /* 25807 */ 3149824, 2936832, 0, 2760704, 3252, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 167936, 0, 0, 0, 0, 65536, 0, 0, 0,\n  /* 25830 */ 0, 3329, 0, 0, 2834432, 0, 3227648, 2568192, 2564096, 0, 2940928, 2179072, 2179072, 2498560, 3329, 0, 0,\n  /* 25847 */ 0, 0, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072,\n  /* 25860 */ 2179072, 2125824, 0, 2125824, 2125824, 0, 0, 0, 308, 0, 0, 0, 0, 0, 307, 0, 307, 308, 0, 307, 307, 0, 0,\n  /* 25883 */ 0, 307, 307, 308, 308, 0, 0, 0, 0, 0, 0, 307, 407, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 783,\n  /* 25913 */ 0, 0, 0, 308, 412, 0, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 0, 2134016, 0, 0, 0, 0, 0, 0,\n  /* 25940 */ 57344, 0, 0, 0, 0, 0, 0, 1120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1239, 0, 0, 0, 0, 0, 456, 456, 456, 482, 482,\n  /* 25969 */ 456, 482, 482, 482, 482, 482, 482, 482, 507, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482,\n  /* 25990 */ 482, 482, 527, 482, 482, 482, 482, 482, 535, 558, 535, 558, 535, 535, 558, 535, 582, 558, 558, 558, 558,\n  /* 26011 */ 558, 558, 558, 582, 582, 582, 535, 582, 582, 582, 582, 582, 582, 582, 558, 558, 535, 558, 582, 558, 582,\n  /* 26032 */ 1, 12290, 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 769, 0, 697, 0, 0, 0, 0, 0, 0, 0, 704, 0, 0,\n  /* 26063 */ 0, 0, 0, 0, 0, 0, 1639, 0, 0, 0, 0, 0, 0, 0, 0, 1660, 1661, 0, 1663, 0, 0, 0, 0, 0, 729, 0, 0, 0, 0, 0, 0,\n  /* 26094 */ 0, 0, 0, 0, 0, 740, 0, 0, 0, 0, 0, 0, 2834432, 0, 3227648, 2568192, 2564096, 0, 2940928, 2179072, 2179072,\n  /* 26115 */ 2498560, 0, 0, 0, 638, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 755, 0, 0, 0, 0, 0, 2134749, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 26145 */ 0, 0, 0, 1169, 734, 0, 0, 0, 0, 0, 0, 761, 0, 0, 765, 0, 0, 0, 0, 772, 0, 0, 0, 0, 0, 0, 0, 69632, 73728,\n  /* 26174 */ 172032, 0, 0, 0, 0, 65536, 0, 0, 0, 641, 0, 0, 0, 0, 0, 0, 804, 0, 0, 0, 780, 0, 0, 0, 0, 0, 327, 0,\n  /* 26202 */ 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 821, 776, 0, 0, 0, 0, 0, 825, 826, 776, 776, 0, 0, 0, 0, 0,\n  /* 26229 */ 0, 0, 780, 0, 0, 0, 0, 0, 0, 0, 0, 1677, 0, 1679, 0, 0, 0, 0, 0, 0, 776, 729, 776, 0, 534, 534, 836, 840,\n  /* 26257 */ 534, 534, 534, 534, 534, 534, 866, 534, 871, 534, 878, 534, 881, 534, 534, 895, 534, 534, 556, 556, 556,\n  /* 26278 */ 909, 913, 1018, 580, 1025, 580, 1028, 580, 580, 1042, 580, 580, 0, 0, 0, 840, 987, 913, 836, 1052, 881,\n  /* 26299 */ 534, 534, 909, 1057, 954, 556, 556, 0, 983, 1062, 1028, 580, 580, 534, 534, 556, 556, 580, 580, 0, 0, 0,\n  /* 26321 */ 0, 0, 0, 0, 0, 0, 0, 0, 78114, 1066, 0, 0, 1068, 1072, 0, 0, 1076, 1080, 0, 0, 0, 0, 0, 0, 0, 406, 406,\n  /* 26348 */ 406, 406, 0, 406, 406, 406, 406, 0, 0, 1144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 508, 515, 515, 0, 0,\n  /* 26376 */ 0, 1634, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3126, 0, 0, 1769, 534, 534, 1772, 534, 534, 534, 534, 534,\n  /* 26403 */ 534, 534, 534, 534, 534, 1784, 534, 534, 534, 534, 534, 884, 534, 534, 534, 534, 534, 556, 556, 903, 556,\n  /* 26424 */ 556, 0, 580, 580, 580, 984, 580, 990, 580, 580, 1003, 580, 580, 1014, 580, 534, 534, 534, 534, 1789, 534,\n  /* 26445 */ 534, 534, 534, 534, 534, 534, 1341, 1799, 556, 556, 0, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580,\n  /* 26466 */ 580, 580, 580, 0, 0, 0, 0, 534, 534, 556, 556, 556, 1806, 556, 556, 556, 556, 556, 1812, 556, 556, 556,\n  /* 26488 */ 556, 556, 556, 0, 0, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2370, 580, 580, 580, 580, 580, 580, 556,\n  /* 26510 */ 556, 556, 1825, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 955, 556, 556, 556, 1885, 556,\n  /* 26531 */ 556, 556, 556, 556, 556, 556, 26009, 1895, 580, 580, 580, 580, 580, 1902, 2017, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 26555 */ 0, 0, 0, 0, 0, 0, 787, 0, 0, 0, 2042, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2051, 0, 0, 0, 0, 0, 0, 1196, 0, 0, 0, 0,\n  /* 26587 */ 0, 0, 0, 0, 0, 0, 1223, 0, 0, 0, 0, 0, 2109, 2110, 0, 0, 2112, 0, 0, 0, 2110, 0, 0, 2117, 0, 0, 0, 0, 0,\n  /* 26616 */ 0, 0, 69632, 73728, 221184, 0, 0, 0, 0, 65536, 0, 2150, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534,\n  /* 26638 */ 534, 534, 534, 534, 534, 1313, 0, 0, 0, 2464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3135, 0, 0, 534, 534,\n  /* 26666 */ 534, 534, 2502, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2510, 534, 534, 534, 2601,\n  /* 26686 */ 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2611, 556, 556, 556, 556, 556, 2563, 556,\n  /* 26707 */ 556, 556, 556, 556, 556, 556, 556, 556, 556, 1388, 556, 556, 556, 556, 1393, 556, 556, 556, 556, 2632,\n  /* 26727 */ 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1967, 0, 0, 0, 2698, 0, 0,\n  /* 26750 */ 0, 0, 0, 0, 2703, 0, 0, 0, 0, 0, 0, 0, 2115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2729, 0, 0, 0, 0, 0, 0, 2749,\n  /* 26780 */ 2750, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 789, 0, 0, 0, 0, 0, 0, 0, 2762, 0, 534, 534, 534, 534,\n  /* 26809 */ 534, 534, 534, 534, 534, 534, 534, 2521, 534, 534, 534, 534, 534, 2773, 534, 534, 2777, 534, 534, 534,\n  /* 26829 */ 534, 534, 534, 534, 534, 534, 534, 2786, 556, 2820, 556, 556, 2824, 556, 556, 556, 556, 556, 556, 556,\n  /* 26849 */ 556, 556, 556, 2833, 580, 580, 580, 2869, 580, 580, 2873, 580, 580, 580, 580, 580, 580, 580, 580, 580,\n  /* 26869 */ 580, 2899, 580, 580, 580, 580, 580, 580, 2882, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580,\n  /* 26889 */ 2890, 580, 580, 534, 534, 556, 556, 580, 580, 0, 0, 0, 0, 0, 3324, 0, 0, 0, 0, 0, 346, 0, 0, 0, 0, 0, 0,\n  /* 26916 */ 0, 0, 0, 0, 0, 221184, 0, 221184, 0, 0, 0, 0, 2931, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534,\n  /* 26945 */ 534, 534, 534, 3010, 534, 534, 534, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 556, 3412, 556, 556,\n  /* 26966 */ 556, 556, 556, 556, 3051, 556, 556, 556, 556, 556, 556, 556, 556, 556, 580, 580, 580, 580, 580, 580, 580,\n  /* 26987 */ 580, 580, 580, 580, 580, 580, 580, 3091, 580, 3093, 580, 580, 580, 580, 580, 580, 580, 580, 580, 534, 580,\n  /* 27008 */ 556, 534, 534, 556, 556, 580, 3132, 3387, 0, 3389, 0, 534, 3392, 534, 3394, 534, 534, 534, 534, 534, 534,\n  /* 27029 */ 534, 534, 1777, 534, 534, 534, 534, 534, 534, 534, 534, 2157, 534, 534, 534, 534, 534, 534, 534, 534,\n  /* 27049 */ 2182, 534, 534, 534, 534, 2187, 534, 534, 534, 534, 3448, 534, 534, 534, 534, 534, 534, 534, 534, 534,\n  /* 27069 */ 534, 556, 556, 556, 556, 556, 3023, 556, 3461, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 580,\n  /* 27090 */ 580, 580, 580, 3064, 580, 3475, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 0, 0, 0, 0, 3561,\n  /* 27112 */ 534, 0, 3490, 0, 3492, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2794, 534, 534, 0,\n  /* 27134 */ 0, 3533, 0, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1281, 309, 310,\n  /* 27155 */ 311, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 640, 0, 0, 0, 0, 420, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 27188 */ 0, 1109, 0, 1111, 1112, 0, 0, 0, 0, 0, 0, 443, 443, 420, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443,\n  /* 27212 */ 443, 443, 443, 526, 443, 526, 526, 526, 443, 526, 526, 526, 526, 443, 536, 559, 536, 559, 536, 536, 559,\n  /* 27233 */ 536, 583, 559, 559, 559, 559, 559, 559, 559, 583, 583, 583, 536, 583, 583, 583, 583, 583, 583, 583, 559,\n  /* 27254 */ 559, 609, 614, 583, 614, 620, 1, 12290, 534, 534, 874, 534, 534, 534, 534, 534, 534, 534, 534, 556, 556,\n  /* 27275 */ 556, 556, 556, 0, 580, 580, 580, 580, 580, 580, 1021, 580, 580, 580, 580, 580, 580, 580, 580, 0, 0, 0,\n  /* 27297 */ 534, 580, 556, 556, 556, 556, 556, 556, 556, 580, 580, 580, 534, 580, 580, 580, 580, 0, 0, 0, 0, 0, 0, 0,\n  /* 27321 */ 0, 0, 0, 3445, 534, 0, 0, 0, 1657, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3262, 534, 534, 1785, 534, 534,\n  /* 27349 */ 534, 534, 534, 534, 534, 534, 534, 534, 534, 1341, 0, 556, 556, 0, 580, 580, 580, 580, 580, 580, 580, 580,\n  /* 27371 */ 580, 1006, 580, 580, 580, 0, 0, 1544, 0, 0, 0, 0, 0, 1550, 0, 0, 0, 0, 0, 0, 347, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 27400 */ 0, 0, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 580, 580, 1970, 580, 580, 580, 580,\n  /* 27417 */ 580, 1977, 580, 580, 580, 580, 580, 580, 580, 1444, 580, 580, 580, 580, 580, 1456, 580, 580, 0, 0, 2425,\n  /* 27438 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 654, 0, 0, 2612, 556, 556, 556, 556, 0, 2615, 0, 0, 0, 0, 580, 580,\n  /* 27467 */ 580, 580, 580, 534, 556, 580, 0, 3382, 0, 0, 3385, 0, 0, 0, 580, 2621, 580, 580, 580, 580, 2625, 580, 580,\n  /* 27490 */ 580, 580, 580, 580, 580, 580, 580, 580, 3221, 580, 580, 580, 580, 580, 0, 0, 0, 312, 313, 314, 315, 316,\n  /* 27512 */ 317, 318, 319, 320, 321, 0, 0, 0, 0, 0, 0, 1249, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534, 534, 850, 534, 534,\n  /* 27538 */ 534, 534, 534, 0, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1172, 0, 0, 0, 315, 0, 0, 0, 0, 0, 0, 0,\n  /* 27569 */ 0, 0, 0, 0, 0, 0, 655, 0, 0, 422, 430, 421, 430, 0, 312, 430, 444, 457, 457, 457, 457, 457, 457, 457, 457,\n  /* 27594 */ 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 478, 483, 483, 494, 483, 483, 483, 483, 483, 483, 483,\n  /* 27615 */ 483, 509, 509, 522, 522, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 509, 523, 523, 523, 523,\n  /* 27636 */ 523, 537, 560, 537, 560, 537, 537, 560, 537, 584, 560, 560, 560, 560, 560, 560, 560, 584, 584, 584, 606,\n  /* 27657 */ 584, 584, 584, 584, 584, 584, 607, 608, 608, 606, 608, 607, 608, 607, 1, 12290, 0, 0, 811, 0, 0, 0, 0, 0,\n  /* 27681 */ 0, 0, 0, 0, 0, 0, 0, 0, 679, 0, 0, 0, 695, 0, 0, 0, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534,\n  /* 27708 */ 534, 1720, 534, 534, 882, 534, 534, 556, 556, 955, 556, 556, 0, 580, 580, 1029, 580, 580, 534, 534, 556,\n  /* 27729 */ 556, 580, 580, 0, 0, 0, 3322, 0, 0, 3325, 0, 0, 0, 0, 1161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249856,\n  /* 27758 */ 0, 0, 0, 0, 0, 0, 0, 1193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1134592, 0, 0, 0, 0, 0, 1206, 0, 0, 0,\n  /* 27789 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1218, 0, 0, 534, 534, 1254, 534, 1257, 534, 534, 534, 534, 534, 534, 534,\n  /* 27814 */ 534, 1271, 534, 1276, 534, 534, 1280, 534, 534, 1283, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534,\n  /* 27834 */ 534, 534, 534, 1294, 534, 534, 534, 534, 534, 1341, 901, 556, 556, 1345, 556, 556, 1349, 556, 556, 556,\n  /* 27854 */ 556, 556, 0, 0, 0, 0, 0, 0, 580, 580, 580, 580, 580, 0, 3580, 0, 534, 534, 534, 534, 534, 534, 556, 556,\n  /* 27878 */ 556, 556, 556, 1363, 556, 1368, 556, 556, 1372, 556, 556, 1375, 556, 556, 556, 556, 556, 0, 2296, 0, 0,\n  /* 27899 */ 580, 580, 580, 580, 580, 580, 580, 2355, 580, 580, 580, 580, 2360, 580, 580, 580, 580, 1437, 580, 580,\n  /* 27919 */ 1441, 580, 580, 580, 580, 580, 580, 580, 580, 1455, 580, 1460, 580, 580, 1464, 580, 580, 1467, 580, 580,\n  /* 27939 */ 580, 580, 580, 580, 580, 580, 580, 580, 0, 0, 188416, 534, 580, 556, 1669, 0, 0, 0, 0, 0, 0, 1676, 0, 0,\n  /* 27963 */ 0, 0, 0, 0, 0, 0, 0, 1199, 1200, 0, 0, 0, 0, 0, 580, 1923, 580, 580, 580, 580, 580, 580, 580, 580, 580,\n  /* 27988 */ 580, 580, 580, 580, 580, 1459, 580, 580, 1936, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580,\n  /* 28009 */ 580, 580, 1919, 580, 534, 2176, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 0,\n  /* 28030 */ 0, 534, 534, 534, 534, 2192, 2193, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 556, 556, 556, 556,\n  /* 28051 */ 3022, 556, 2262, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1819, 556,\n  /* 28071 */ 556, 556, 2278, 2279, 2280, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1846, 556, 556, 556, 1851,\n  /* 28091 */ 556, 2349, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1985, 580, 580, 580,\n  /* 28112 */ 2365, 2366, 2367, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 0, 3558, 0, 3560, 534, 534, 0, 2399,\n  /* 28133 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1243, 0, 0, 0, 0, 0, 2465, 2466, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 28165 */ 0, 2090, 0, 0, 0, 0, 580, 580, 580, 2663, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 534,\n  /* 28188 */ 580, 556, 3105, 534, 534, 534, 534, 534, 2790, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 556,\n  /* 28208 */ 3019, 556, 556, 556, 556, 2917, 0, 0, 0, 0, 0, 2923, 0, 0, 0, 0, 0, 0, 0, 2927, 0, 0, 0, 0, 0, 2200246, 0,\n  /* 28235 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1617, 0, 0, 0, 0, 0, 0, 0, 0, 2972, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534,\n  /* 28265 */ 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2987, 534, 534, 534, 534, 534, 534,\n  /* 28286 */ 534, 534, 534, 534, 899, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3027, 556, 556, 556, 556, 556, 556,\n  /* 28307 */ 556, 556, 556, 556, 556, 1432, 26009, 1341, 975, 580, 0, 3139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 28333 */ 1597, 0, 534, 534, 534, 534, 3175, 534, 534, 534, 534, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556,\n  /* 28354 */ 556, 556, 556, 556, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3438, 0, 3439, 0, 0, 0, 0, 0, 0, 0, 534,\n  /* 28378 */ 3446, 534, 3447, 534, 534, 534, 3451, 534, 534, 534, 534, 534, 534, 534, 556, 3459, 556, 556, 556, 556,\n  /* 28398 */ 556, 2589, 556, 556, 2593, 556, 556, 556, 556, 556, 556, 556, 2606, 556, 556, 556, 556, 556, 556, 556,\n  /* 28418 */ 556, 2269, 556, 556, 556, 556, 556, 556, 556, 3460, 556, 556, 556, 3464, 556, 556, 556, 556, 556, 556,\n  /* 28438 */ 556, 556, 580, 3473, 580, 0, 0, 2920, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2926, 0, 0, 0, 0, 0, 1147, 0, 1149, 0, 0,\n  /* 28466 */ 0, 0, 0, 0, 0, 0, 534, 557, 534, 557, 534, 534, 557, 534, 3474, 580, 580, 580, 3478, 580, 580, 580, 580,\n  /* 28489 */ 580, 580, 580, 580, 0, 0, 0, 534, 534, 3583, 3584, 534, 534, 556, 556, 3596, 556, 556, 556, 3598, 580,\n  /* 28510 */ 580, 580, 3600, 0, 534, 534, 556, 556, 580, 580, 0, 0, 0, 0, 3244, 0, 0, 0, 0, 0, 323, 323, 373, 0, 0, 0,\n  /* 28536 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 725, 0, 0, 0, 0, 373, 0, 432, 438, 0, 445, 458, 458, 458, 458, 458, 458,\n  /* 28563 */ 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 484, 484, 495, 484, 484, 484, 484, 484,\n  /* 28584 */ 484, 484, 484, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 538, 561,\n  /* 28605 */ 538, 561, 538, 538, 561, 538, 585, 561, 561, 561, 561, 561, 561, 561, 585, 585, 585, 538, 585, 585, 585,\n  /* 28626 */ 585, 585, 585, 585, 561, 561, 538, 561, 585, 561, 585, 1, 12290, 787, 0, 0, 0, 0, 534, 534, 534, 534, 534,\n  /* 28649 */ 534, 534, 534, 859, 534, 534, 534, 534, 534, 534, 2139, 534, 534, 2142, 534, 534, 534, 534, 534, 534, 534,\n  /* 28670 */ 1760, 1761, 1762, 534, 534, 1765, 1766, 534, 534, 1114, 1115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 28695 */ 1613, 0, 1100, 0, 1231, 0, 0, 0, 0, 0, 1115, 0, 0, 0, 0, 0, 1214, 0, 0, 0, 0, 0, 3088384, 0, 0, 0, 0, 0,\n  /* 28723 */ 0, 0, 0, 0, 0, 0, 752, 0, 0, 0, 0, 0, 0, 1246, 1114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 1255, 534, 534,\n  /* 28752 */ 534, 1341, 901, 556, 556, 1346, 556, 556, 556, 556, 556, 556, 556, 556, 1389, 556, 556, 556, 556, 556,\n  /* 28772 */ 556, 556, 556, 1397, 556, 556, 556, 1401, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1880, 556,\n  /* 28792 */ 556, 556, 556, 556, 580, 1438, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1934,\n  /* 28813 */ 580, 580, 580, 1465, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1491, 580, 580,\n  /* 28833 */ 1478, 580, 580, 580, 580, 580, 580, 580, 1487, 580, 580, 1489, 580, 580, 580, 1493, 1517, 580, 580, 580,\n  /* 28853 */ 580, 580, 0, 534, 580, 556, 534, 534, 534, 534, 534, 556, 580, 534, 556, 580, 534, 556, 580, 534, 556,\n  /* 28874 */ 580, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 135168, 135168, 0, 0, 65536, 135168, 556, 556, 556, 556, 1872,\n  /* 28896 */ 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1832, 556, 556, 556, 556, 1968, 580, 580, 580, 580,\n  /* 28917 */ 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2362, 580, 580, 2004, 0, 2005, 0, 0, 0, 0, 0, 2007,\n  /* 28940 */ 0, 0, 0, 0, 0, 0, 0, 2418, 0, 0, 0, 0, 0, 2422, 0, 0, 2009, 0, 0, 0, 0, 0, 2011, 0, 0, 0, 0, 0, 2014, 0,\n  /* 28970 */ 0, 0, 0, 0, 0, 1576, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2077, 0, 0, 0, 0, 0, 2067, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 29002 */ 0, 0, 0, 0, 0, 0, 827, 2121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534, 534, 534, 534, 534, 2770,\n  /* 29029 */ 534, 534, 534, 534, 2137, 534, 534, 534, 534, 2141, 534, 534, 534, 534, 534, 534, 534, 534, 2518, 534,\n  /* 29049 */ 534, 534, 534, 534, 534, 534, 534, 2803, 534, 534, 534, 534, 534, 534, 534, 534, 2989, 534, 534, 534, 534,\n  /* 29070 */ 534, 534, 534, 534, 3165, 534, 534, 534, 534, 534, 534, 534, 534, 3270, 534, 534, 534, 534, 534, 534, 534,\n  /* 29091 */ 534, 3280, 556, 556, 556, 556, 556, 556, 556, 1426, 556, 556, 556, 556, 26009, 1341, 975, 580, 556, 556,\n  /* 29111 */ 2222, 556, 556, 556, 556, 2226, 556, 556, 556, 556, 556, 556, 556, 556, 1405, 556, 556, 556, 556, 556,\n  /* 29131 */ 556, 556, 580, 580, 2309, 580, 580, 580, 580, 2313, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3527,\n  /* 29151 */ 580, 580, 580, 0, 3531, 0, 0, 2462, 0, 0, 0, 0, 0, 2467, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1640, 0, 0, 0, 0, 0,\n  /* 29180 */ 0, 534, 534, 534, 2489, 2490, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2522, 534, 534,\n  /* 29201 */ 534, 534, 534, 534, 2529, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2993, 534, 534,\n  /* 29222 */ 2620, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2376, 2660, 580, 580,\n  /* 29242 */ 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3316, 2707, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 29267 */ 0, 0, 0, 0, 0, 1100, 0, 0, 0, 0, 2724, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1686, 0, 0, 0, 0, 0, 0, 0,\n  /* 29298 */ 2752, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2028, 0, 0, 0, 534, 534, 534, 534, 534, 2800, 534, 534, 534,\n  /* 29324 */ 534, 534, 534, 534, 534, 534, 534, 1307, 534, 534, 534, 534, 534, 2891, 580, 580, 580, 580, 580, 580, 580,\n  /* 29345 */ 2897, 580, 580, 580, 580, 580, 580, 580, 1471, 580, 580, 580, 580, 580, 580, 580, 580, 1045, 580, 0, 0, 0,\n  /* 29367 */ 534, 580, 556, 3128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1128, 534, 534, 534, 534, 534, 3176,\n  /* 29393 */ 534, 534, 534, 556, 556, 556, 556, 556, 556, 556, 3511, 556, 3513, 556, 556, 556, 556, 580, 556, 556,\n  /* 29413 */ 3297, 556, 556, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3374, 580, 580, 3132, 0, 0, 0, 0,\n  /* 29435 */ 534, 534, 534, 534, 534, 534, 3397, 534, 534, 534, 534, 0, 0, 556, 556, 556, 556, 556, 556, 556, 556, 556,\n  /* 29457 */ 556, 1392, 556, 556, 556, 556, 556, 325, 326, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 741, 0, 0, 0, 0,\n  /* 29485 */ 0, 324, 372, 327, 371, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1110, 0, 0, 0, 0, 0, 324, 0, 0, 371, 371, 401, 0,\n  /* 29513 */ 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 446, 459, 459, 459, 459,\n  /* 29542 */ 459, 459, 459, 459, 472, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 485, 485, 459, 485,\n  /* 29563 */ 485, 500, 502, 485, 485, 500, 485, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511,\n  /* 29584 */ 528, 511, 511, 511, 511, 511, 539, 562, 539, 562, 539, 539, 562, 539, 586, 562, 562, 562, 562, 562, 562,\n  /* 29605 */ 562, 586, 586, 586, 539, 586, 586, 586, 586, 586, 586, 586, 562, 562, 539, 562, 586, 562, 586, 1, 12290,\n  /* 29626 */ 0, 651, 652, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 663, 664, 0, 0, 0, 0, 364, 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 29657 */ 0, 723, 0, 0, 0, 0, 0, 0, 0, 0, 0, 682, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 364, 364, 0, 0, 0, 0, 0, 355,\n  /* 29688 */ 0, 0, 466, 466, 466, 466, 466, 466, 466, 466, 471, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466,\n  /* 29710 */ 471, 0, 713, 0, 0, 0, 0, 0, 0, 720, 0, 0, 0, 724, 0, 0, 0, 0, 0, 0, 1621, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 29741 */ 769, 0, 0, 0, 0, 0, 0, 0, 0, 0, 762, 763, 0, 0, 0, 0, 0, 771, 0, 773, 0, 0, 0, 0, 0, 0, 1637, 0, 0, 0, 0,\n  /* 29772 */ 0, 0, 0, 0, 0, 0, 1095, 0, 0, 0, 0, 0, 0, 0, 0, 0, 790, 793, 0, 0, 0, 793, 793, 790, 0, 0, 0, 0, 0, 0, 0,\n  /* 29803 */ 106496, 0, 106496, 0, 0, 0, 0, 106496, 106496, 0, 0, 0, 773, 0, 785, 0, 802, 0, 0, 0, 0, 793, 0, 700, 0,\n  /* 29828 */ 0, 0, 0, 364, 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1141, 0, 810, 0, 0, 0, 0, 0, 810, 810, 813, 0, 0, 0, 773, 0,\n  /* 29858 */ 0, 0, 0, 0, 375, 0, 0, 0, 0, 367, 0, 384, 0, 350, 0, 0, 0, 0, 822, 0, 0, 0, 0, 0, 0, 0, 0, 0, 771, 0, 0,\n  /* 29889 */ 0, 0, 0, 385, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 822, 802, 822, 0, 534, 534, 837, 534, 843, 534,\n  /* 29914 */ 534, 856, 534, 534, 867, 534, 872, 534, 534, 880, 883, 888, 534, 896, 534, 534, 556, 556, 556, 910, 556,\n  /* 29935 */ 556, 556, 556, 556, 2604, 2605, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3189, 556, 556, 556, 556,\n  /* 29955 */ 556, 556, 916, 556, 556, 929, 556, 556, 940, 556, 945, 556, 556, 953, 956, 961, 556, 969, 1019, 580, 580,\n  /* 29976 */ 1027, 1030, 1035, 580, 1043, 580, 580, 0, 0, 0, 534, 580, 556, 556, 556, 556, 556, 2825, 556, 556, 556,\n  /* 29997 */ 556, 556, 556, 556, 556, 556, 556, 2284, 556, 556, 556, 556, 556, 837, 534, 1053, 888, 534, 910, 556,\n  /* 30017 */ 1058, 961, 556, 0, 984, 580, 1063, 1035, 580, 0, 2919, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2458, 0, 0,\n  /* 30044 */ 0, 0, 1087, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1097, 0, 0, 0, 0, 0, 0, 1659, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 751, 0,\n  /* 30076 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2032, 0, 0, 0, 0, 0, 1104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 30108 */ 2078, 0, 0, 0, 1129, 0, 0, 0, 364, 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2471, 0, 0, 0, 0, 0, 1143, 0, 0,\n  /* 30138 */ 0, 0, 0, 0, 0, 0, 1152, 0, 0, 0, 0, 0, 0, 0, 2442, 0, 0, 0, 0, 0, 0, 0, 2450, 1121, 0, 0, 0, 0, 0, 0, 0,\n  /* 30169 */ 0, 0, 0, 0, 0, 0, 1189, 0, 0, 0, 0, 364, 364, 0, 0, 0, 0, 0, 0, 0, 1139, 0, 0, 0, 0, 0, 328, 0, 0, 0, 0,\n  /* 30200 */ 0, 0, 0, 0, 0, 0, 0, 2757, 2758, 0, 0, 0, 534, 1282, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534,\n  /* 30224 */ 534, 534, 534, 1297, 1337, 534, 534, 1341, 901, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1354,\n  /* 30244 */ 556, 556, 1419, 556, 556, 556, 556, 556, 556, 1429, 556, 556, 26009, 1341, 975, 580, 580, 580, 580, 1523,\n  /* 30264 */ 580, 0, 534, 580, 556, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 2837, 556, 556, 556, 556, 556,\n  /* 30285 */ 556, 556, 556, 556, 556, 1862, 1863, 556, 556, 556, 556, 1461, 580, 580, 580, 1466, 580, 580, 580, 580,\n  /* 30305 */ 580, 580, 580, 580, 580, 580, 580, 1915, 580, 580, 580, 580, 580, 580, 1481, 580, 580, 580, 580, 580, 580,\n  /* 30326 */ 580, 580, 580, 580, 580, 580, 580, 1933, 580, 580, 580, 1495, 580, 580, 580, 580, 580, 580, 580, 580, 580,\n  /* 30347 */ 580, 1511, 580, 580, 580, 0, 2005, 0, 0, 0, 0, 0, 2007, 0, 0, 0, 0, 0, 0, 0, 2074, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 30376 */ 342, 0, 0, 0, 0, 0, 0, 0, 580, 580, 580, 1521, 580, 580, 0, 534, 580, 556, 534, 534, 534, 534, 534, 556,\n  /* 30400 */ 580, 534, 556, 580, 3610, 3611, 3612, 534, 556, 580, 0, 0, 0, 0, 0, 0, 307, 442, 456, 456, 456, 456, 456,\n  /* 30423 */ 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 0, 0, 1585, 0, 0, 1588, 1589, 1590, 0, 1592, 1593,\n  /* 30445 */ 0, 0, 0, 0, 1598, 1631, 1632, 0, 0, 0, 0, 0, 0, 0, 0, 1641, 1642, 0, 0, 0, 0, 0, 0, 0, 155648, 0, 0, 0, 0,\n  /* 30474 */ 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1212, 534, 534, 534, 0, 0, 0, 0, 1648, 0, 0, 1650,\n  /* 30504 */ 0, 0, 0, 0, 1652, 1653, 0, 0, 0, 0, 0, 441, 0, 0, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467,\n  /* 30529 */ 467, 467, 467, 467, 467, 552, 575, 552, 575, 552, 552, 575, 552, 0, 0, 1671, 1672, 1673, 1674, 0, 0, 0, 0,\n  /* 30552 */ 0, 0, 0, 0, 0, 0, 0, 2483, 0, 0, 0, 0, 0, 1683, 0, 0, 1686, 0, 0, 0, 0, 0, 1690, 0, 0, 0, 1694, 1695,\n  /* 30580 */ 1706, 1566, 1566, 1708, 534, 1710, 534, 1711, 1712, 534, 1714, 534, 534, 534, 1718, 534, 534, 534, 534,\n  /* 30599 */ 534, 886, 534, 534, 534, 534, 534, 556, 556, 908, 556, 556, 556, 556, 556, 2254, 556, 556, 556, 556, 556,\n  /* 30620 */ 556, 556, 556, 556, 556, 1431, 556, 26009, 1341, 975, 1435, 534, 534, 1739, 534, 1741, 534, 534, 534, 534,\n  /* 30640 */ 534, 534, 534, 534, 1749, 1750, 1752, 534, 1786, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1797, 1341,\n  /* 30660 */ 0, 1802, 556, 556, 556, 556, 556, 3041, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3200, 556, 556,\n  /* 30681 */ 556, 556, 556, 556, 1804, 556, 1805, 556, 1807, 556, 1809, 556, 556, 556, 1813, 556, 556, 556, 556, 556,\n  /* 30701 */ 0, 0, 0, 0, 0, 0, 580, 580, 2618, 580, 580, 556, 556, 556, 556, 1826, 556, 556, 556, 556, 1830, 556, 556,\n  /* 30724 */ 556, 556, 1834, 556, 556, 556, 556, 556, 3055, 556, 556, 556, 556, 556, 580, 580, 580, 3063, 580, 580,\n  /* 30744 */ 580, 580, 1724, 1915, 1819, 534, 534, 534, 534, 556, 556, 556, 556, 580, 580, 580, 580, 0, 0, 2692, 0, 0,\n  /* 30766 */ 1836, 556, 556, 556, 556, 556, 556, 556, 556, 1844, 1845, 1847, 556, 556, 556, 556, 556, 0, 2297, 0, 0,\n  /* 30787 */ 580, 580, 580, 580, 580, 580, 580, 2667, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2653, 580, 580, 580,\n  /* 30808 */ 580, 2657, 580, 556, 556, 556, 1855, 1856, 1857, 556, 556, 1860, 1861, 556, 556, 556, 556, 556, 556, 0, 0,\n  /* 30829 */ 580, 580, 580, 2862, 580, 580, 580, 580, 556, 1869, 556, 556, 556, 1873, 556, 556, 556, 556, 556, 556,\n  /* 30849 */ 556, 1882, 556, 556, 0, 580, 580, 580, 580, 580, 580, 580, 1002, 580, 580, 580, 580, 580, 580, 3555, 3556,\n  /* 30870 */ 580, 580, 0, 0, 3559, 0, 534, 534, 1903, 580, 1905, 580, 580, 580, 1909, 580, 580, 580, 580, 580, 580,\n  /* 30891 */ 580, 580, 580, 580, 3528, 580, 580, 0, 0, 0, 1922, 580, 580, 580, 580, 1926, 580, 580, 580, 580, 1930,\n  /* 30912 */ 580, 1932, 580, 580, 580, 580, 580, 1524, 0, 1270, 1454, 1362, 534, 534, 534, 534, 534, 556, 1952, 1953,\n  /* 30932 */ 580, 580, 1956, 1957, 580, 580, 580, 580, 580, 580, 580, 1965, 580, 580, 534, 534, 556, 556, 580, 580,\n  /* 30952 */ 3321, 0, 0, 0, 3323, 0, 0, 0, 0, 0, 0, 2114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2605056, 0, 0, 0, 0, 2887680,\n  /* 30980 */ 580, 1969, 580, 580, 580, 580, 580, 580, 580, 1978, 580, 580, 580, 580, 580, 580, 0, 534, 580, 556, 534,\n  /* 31001 */ 534, 534, 534, 534, 556, 580, 580, 580, 1989, 534, 580, 556, 1766, 534, 1995, 534, 1861, 556, 1999, 556,\n  /* 31021 */ 1957, 580, 2003, 580, 0, 2005, 0, 0, 0, 0, 0, 2007, 0, 0, 0, 0, 0, 0, 0, 2702, 0, 0, 0, 0, 0, 0, 0, 2706,\n  /* 31049 */ 0, 2018, 0, 0, 2021, 2022, 0, 0, 0, 2026, 0, 0, 0, 0, 0, 0, 0, 414, 414, 0, 0, 0, 0, 0, 414, 0, 0, 0,\n  /* 31077 */ 2069, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 742, 0, 0, 0, 1650, 0, 0, 0, 0, 0, 0, 0, 2088, 0, 0, 0, 0, 0,\n  /* 31109 */ 0, 0, 451, 1147348, 1147348, 1147348, 1147348, 1147348, 1147348, 1147348, 1147348, 1147348, 1147348,\n  /* 31122 */ 1147348, 1147348, 1147348, 1147348, 1147348, 1147348, 2095, 0, 2097, 0, 0, 0, 0, 0, 0, 0, 0, 2106, 0, 0,\n  /* 31142 */ 0, 0, 0, 0, 0, 184725, 184925, 184925, 184925, 0, 184925, 184925, 184925, 184925, 184925, 184925, 0, 0, 0,\n  /* 31161 */ 0, 0, 184925, 0, 184925, 1, 12290, 534, 534, 534, 2153, 534, 2155, 534, 534, 534, 534, 534, 534, 534, 534,\n  /* 31182 */ 534, 534, 1746, 534, 534, 534, 534, 534, 534, 2204, 2205, 534, 534, 0, 0, 0, 0, 556, 556, 556, 556, 556,\n  /* 31204 */ 556, 556, 556, 556, 2558, 556, 556, 556, 556, 2238, 556, 2240, 556, 556, 556, 556, 556, 556, 556, 556,\n  /* 31224 */ 556, 556, 556, 2231, 556, 556, 556, 556, 556, 2291, 2292, 556, 556, 0, 0, 0, 0, 580, 580, 580, 580, 580,\n  /* 31246 */ 580, 580, 1506, 580, 580, 580, 580, 580, 1513, 580, 580, 580, 580, 2325, 580, 2327, 580, 580, 580, 580,\n  /* 31266 */ 580, 580, 580, 580, 580, 580, 580, 2318, 580, 580, 580, 580, 580, 2378, 2379, 580, 580, 2145, 2317, 2230,\n  /* 31286 */ 534, 2385, 534, 534, 556, 2389, 556, 556, 0, 580, 580, 580, 580, 580, 580, 997, 580, 580, 580, 580, 580,\n  /* 31307 */ 580, 2328, 580, 2330, 580, 580, 580, 580, 580, 580, 580, 2342, 580, 580, 580, 580, 580, 580, 580, 580,\n  /* 31327 */ 580, 1474, 580, 580, 580, 580, 580, 580, 580, 2393, 580, 580, 2005, 0, 2007, 0, 2009, 0, 2011, 0, 0, 0, 0,\n  /* 31350 */ 0, 0, 0, 2727, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1579, 0, 0, 0, 0, 0, 0, 0, 2437, 2438, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 31381 */ 0, 0, 0, 0, 0, 1089, 0, 0, 534, 2526, 534, 534, 534, 2531, 534, 534, 534, 534, 534, 534, 534, 2538, 534,\n  /* 31404 */ 534, 534, 534, 534, 534, 2169, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2782, 534, 534, 2785,\n  /* 31424 */ 534, 534, 534, 534, 534, 534, 534, 2543, 534, 534, 534, 534, 534, 534, 534, 534, 0, 2549, 556, 556, 2587,\n  /* 31445 */ 556, 556, 556, 556, 2591, 556, 556, 556, 2596, 556, 556, 556, 556, 556, 0, 2615, 0, 0, 0, 0, 580, 580,\n  /* 31467 */ 580, 580, 580, 534, 556, 580, 0, 0, 0, 0, 0, 0, 0, 3386, 556, 556, 556, 2603, 556, 556, 556, 556, 556,\n  /* 31490 */ 556, 556, 556, 2609, 556, 556, 556, 556, 556, 556, 3042, 556, 3044, 556, 556, 556, 556, 556, 556, 556,\n  /* 31510 */ 1404, 556, 556, 1411, 556, 556, 556, 556, 556, 580, 580, 580, 2623, 580, 580, 580, 580, 580, 580, 580,\n  /* 31530 */ 580, 580, 580, 580, 580, 1451, 580, 580, 580, 580, 580, 580, 2635, 580, 2637, 580, 580, 580, 580, 580,\n  /* 31550 */ 580, 580, 580, 580, 580, 1914, 580, 580, 580, 580, 580, 580, 580, 2662, 580, 580, 580, 580, 580, 580, 580,\n  /* 31571 */ 2669, 580, 580, 580, 580, 580, 580, 2895, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1046, 0, 0, 0, 534,\n  /* 31593 */ 580, 556, 580, 580, 580, 2675, 580, 580, 580, 580, 580, 580, 580, 580, 534, 580, 556, 534, 2913, 556,\n  /* 31613 */ 2915, 580, 534, 534, 534, 2798, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3348,\n  /* 31633 */ 534, 556, 556, 556, 556, 556, 2846, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2245, 556, 556,\n  /* 31654 */ 556, 556, 0, 2943, 2944, 0, 2945, 0, 2947, 0, 0, 0, 0, 2949, 0, 0, 0, 0, 0, 0, 0, 225883, 225883, 225883,\n  /* 31678 */ 225883, 225734, 225883, 225883, 225883, 225883, 225883, 225883, 225734, 225734, 225734, 225734, 225734,\n  /* 31691 */ 225899, 225734, 225899, 1, 12290, 2968, 2969, 0, 2971, 0, 0, 2974, 0, 0, 0, 2977, 534, 534, 534, 534, 534,\n  /* 31712 */ 0, 0, 0, 0, 556, 2214, 556, 556, 556, 556, 556, 0, 0, 0, 0, 0, 0, 580, 2617, 580, 580, 580, 534, 2984,\n  /* 31736 */ 534, 534, 534, 534, 534, 2988, 534, 534, 534, 534, 534, 534, 534, 2994, 534, 534, 534, 534, 534, 3000,\n  /* 31756 */ 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1763, 534, 534, 534, 534, 534, 3009, 3011, 534, 534,\n  /* 31776 */ 534, 3014, 534, 3016, 3017, 534, 556, 556, 556, 556, 556, 556, 0, 0, 580, 2861, 580, 580, 580, 580, 580,\n  /* 31797 */ 580, 0, 1267, 1451, 1359, 534, 534, 534, 1530, 534, 556, 3024, 556, 556, 556, 556, 556, 3028, 556, 556,\n  /* 31817 */ 556, 556, 556, 556, 556, 3034, 556, 556, 556, 556, 556, 3185, 556, 556, 556, 556, 556, 556, 556, 556, 556,\n  /* 31838 */ 556, 2229, 556, 556, 2233, 556, 556, 556, 556, 556, 556, 3040, 556, 556, 3043, 556, 556, 556, 556, 556,\n  /* 31858 */ 556, 556, 556, 1829, 556, 556, 556, 556, 556, 556, 556, 3050, 3052, 556, 556, 556, 556, 3056, 556, 3058,\n  /* 31878 */ 3059, 556, 580, 580, 580, 580, 580, 580, 3083, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2331, 580,\n  /* 31898 */ 580, 580, 580, 2335, 580, 580, 3066, 580, 580, 580, 580, 580, 3070, 580, 580, 580, 580, 580, 580, 580,\n  /* 31918 */ 3076, 580, 3092, 3094, 580, 580, 580, 580, 3098, 580, 3100, 3101, 580, 534, 580, 556, 534, 534, 534, 534,\n  /* 31938 */ 534, 887, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 0, 0, 0, 2299, 580, 580, 580, 580, 580, 580,\n  /* 31960 */ 580, 3084, 580, 3086, 580, 580, 580, 580, 580, 580, 3106, 556, 3108, 580, 3110, 0, 0, 0, 0, 0, 0, 3116, 0,\n  /* 31983 */ 0, 3119, 0, 0, 0, 0, 364, 364, 0, 0, 0, 0, 0, 1096, 0, 0, 0, 0, 0, 0, 0, 286720, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 32013 */ 0, 643, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3140, 3141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2107, 0, 0, 0, 556,\n  /* 32043 */ 556, 556, 556, 3184, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2272, 556, 556, 556, 556, 556,\n  /* 32064 */ 556, 556, 3195, 556, 556, 556, 556, 556, 556, 556, 556, 3203, 556, 556, 556, 556, 556, 556, 3197, 556,\n  /* 32084 */ 556, 556, 556, 556, 556, 556, 556, 556, 2594, 556, 556, 556, 556, 556, 556, 556, 556, 556, 580, 580, 580,\n  /* 32105 */ 3208, 580, 580, 580, 580, 580, 580, 580, 3213, 580, 580, 580, 580, 1907, 580, 580, 580, 580, 580, 580,\n  /* 32125 */ 580, 580, 1918, 580, 580, 580, 580, 580, 3096, 580, 580, 3099, 580, 580, 580, 534, 580, 556, 534, 534,\n  /* 32145 */ 534, 534, 534, 534, 3278, 534, 534, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3515, 556, 556,\n  /* 32166 */ 580, 556, 3296, 556, 556, 556, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3214, 3326,\n  /* 32186 */ 3327, 0, 3132, 0, 3331, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 2766, 534, 534, 534, 534, 534, 2771, 534, 534,\n  /* 32210 */ 534, 3405, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 960, 556, 556, 556, 556, 556, 3420,\n  /* 32231 */ 556, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1452, 580, 580, 580, 580, 580, 3436, 580,\n  /* 32252 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3502, 534, 534, 534, 534,\n  /* 32277 */ 534, 3450, 534, 534, 534, 534, 534, 534, 534, 534, 556, 556, 556, 3281, 556, 556, 556, 3284, 556, 556,\n  /* 32297 */ 556, 3463, 556, 556, 556, 556, 556, 556, 556, 556, 556, 580, 580, 580, 580, 580, 580, 3302, 580, 580, 580,\n  /* 32318 */ 580, 580, 580, 580, 3477, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3486, 3487, 0, 0, 0, 0, 364, 364,\n  /* 32340 */ 0, 0, 0, 0, 1137, 1095, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 266240, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 0, 3493,\n  /* 32367 */ 3494, 3495, 534, 534, 534, 3498, 534, 3500, 534, 534, 534, 534, 534, 534, 534, 3269, 534, 534, 534, 534,\n  /* 32387 */ 534, 534, 534, 534, 534, 2781, 534, 534, 534, 534, 534, 534, 534, 3505, 3506, 3507, 556, 556, 556, 3510,\n  /* 32407 */ 556, 3512, 556, 556, 556, 556, 3517, 3518, 3519, 3520, 580, 580, 580, 3523, 580, 3525, 580, 580, 580, 580,\n  /* 32427 */ 3530, 0, 0, 0, 0, 0, 0, 1687, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 783, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3562,\n  /* 32458 */ 534, 534, 534, 3566, 556, 556, 3568, 556, 556, 556, 3572, 556, 580, 580, 3574, 580, 580, 580, 3578, 580,\n  /* 32478 */ 0, 0, 0, 534, 534, 534, 534, 534, 534, 556, 556, 580, 580, 0, 3111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 398, 0,\n  /* 32505 */ 0, 0, 0, 0, 0, 0, 0, 328, 329, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2409, 0, 0, 0, 0, 368, 0, 0, 0, 0, 0,\n  /* 32537 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1629, 0, 0, 0, 0, 368, 0, 0, 0, 376, 378, 0, 0, 0, 0, 0, 0, 0, 0, 2025, 0, 0,\n  /* 32568 */ 0, 0, 0, 0, 0, 0, 2047, 0, 0, 0, 0, 0, 0, 0, 0, 2087, 0, 0, 0, 0, 0, 0, 0, 0, 2127, 0, 0, 534, 534, 534,\n  /* 32598 */ 534, 534, 0, 0, 411, 0, 0, 0, 411, 69632, 73728, 0, 368, 368, 0, 423, 65536, 368, 0, 0, 368, 423, 492,\n  /* 32621 */ 496, 492, 492, 501, 492, 492, 492, 501, 492, 423, 423, 329, 423, 0, 0, 423, 423, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 32646 */ 0, 2048, 0, 0, 0, 0, 0, 0, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423,\n  /* 32670 */ 540, 563, 540, 563, 540, 540, 563, 540, 587, 563, 563, 563, 563, 563, 563, 563, 587, 587, 587, 540, 587,\n  /* 32691 */ 587, 587, 587, 587, 587, 587, 563, 563, 540, 563, 587, 563, 587, 1, 12290, 0, 769, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 32716 */ 0, 0, 0, 0, 0, 0, 1644, 0, 556, 556, 556, 556, 933, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556,\n  /* 32740 */ 2285, 556, 2287, 556, 556, 0, 0, 1207, 0, 1096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2447, 0, 0, 0, 534,\n  /* 32767 */ 534, 534, 534, 1260, 534, 534, 534, 534, 534, 1272, 534, 534, 534, 534, 534, 0, 0, 0, 2212, 556, 556, 556,\n  /* 32789 */ 556, 556, 556, 556, 3029, 556, 556, 556, 556, 556, 556, 556, 556, 3030, 556, 556, 556, 556, 556, 556, 556,\n  /* 32810 */ 534, 534, 534, 1341, 901, 556, 556, 556, 556, 556, 556, 556, 556, 1352, 556, 556, 0, 580, 580, 580, 580,\n  /* 32831 */ 580, 580, 998, 580, 580, 580, 580, 580, 580, 2650, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2315, 580,\n  /* 32852 */ 2317, 580, 580, 580, 580, 556, 556, 556, 1364, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556,\n  /* 32873 */ 1378, 1380, 556, 556, 556, 556, 556, 1871, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556,\n  /* 32893 */ 1413, 556, 556, 1417, 534, 534, 534, 534, 534, 3567, 556, 556, 556, 556, 556, 556, 556, 3573, 580, 580,\n  /* 32913 */ 580, 580, 580, 2677, 580, 580, 580, 580, 580, 580, 534, 580, 556, 534, 534, 534, 534, 556, 556, 556, 556,\n  /* 32934 */ 580, 534, 3597, 556, 556, 556, 3599, 580, 580, 580, 0, 534, 534, 556, 556, 580, 580, 0, 0, 0, 3243, 0, 0,\n  /* 32957 */ 0, 0, 0, 0, 0, 657, 0, 0, 0, 0, 0, 0, 0, 0, 306, 306, 306, 0, 0, 0, 0, 0, 424, 424, 0, 424, 433, 0, 424,\n  /* 32986 */ 424, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 486,\n  /* 33007 */ 486, 460, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486,\n  /* 33028 */ 486, 486, 486, 486, 486, 541, 564, 541, 564, 541, 541, 564, 541, 588, 564, 564, 564, 564, 564, 564, 564,\n  /* 33049 */ 588, 588, 588, 541, 588, 588, 588, 588, 588, 588, 588, 564, 564, 541, 564, 588, 564, 588, 1, 12290, 78114,\n  /* 33070 */ 1066, 0, 0, 1069, 1073, 0, 0, 1077, 1081, 0, 0, 0, 0, 0, 0, 0, 703, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2104, 0, 0,\n  /* 33099 */ 0, 0, 0, 0, 0, 0, 0, 0, 1194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2472, 0, 0, 0, 0, 1670, 0, 0, 0, 0, 0,\n  /* 33131 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1667, 0, 0, 0, 0, 0, 2044, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2704, 0, 0, 0,\n  /* 33163 */ 0, 2068, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1681, 1682, 2392, 580, 580, 580, 0, 0, 0, 0, 0, 0, 0,\n  /* 33192 */ 0, 0, 0, 0, 0, 0, 0, 2928, 0, 0, 0, 2932, 0, 0, 0, 0, 0, 2938, 0, 0, 0, 0, 0, 0, 0, 719, 0, 0, 0, 0, 0, 0,\n  /* 33224 */ 0, 0, 0, 721, 0, 0, 0, 0, 0, 0, 2953, 0, 0, 2956, 0, 0, 0, 0, 0, 2961, 0, 0, 0, 0, 0, 0, 0, 748, 0, 0, 0,\n  /* 33255 */ 0, 0, 0, 0, 0, 333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1204, 2995, 534, 534, 534, 534, 534, 534,\n  /* 33284 */ 534, 534, 534, 3004, 534, 534, 534, 534, 534, 0, 0, 2211, 0, 556, 556, 556, 556, 556, 556, 556, 2268, 556,\n  /* 33306 */ 556, 556, 556, 2273, 556, 556, 556, 534, 534, 534, 3012, 534, 534, 3015, 534, 534, 534, 3018, 556, 556,\n  /* 33326 */ 556, 556, 556, 0, 0, 0, 0, 580, 580, 580, 580, 580, 580, 580, 556, 556, 534, 556, 580, 556, 580, 1, 12290,\n  /* 33349 */ 556, 556, 556, 556, 3054, 556, 556, 3057, 556, 556, 556, 3060, 580, 580, 580, 580, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 33373 */ 2396, 0, 0, 0, 3077, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3087, 580, 580, 580, 580, 0, 0, 0,\n  /* 33396 */ 0, 0, 0, 3442, 0, 3444, 0, 534, 534, 0, 3120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2015, 0, 0, 534,\n  /* 33425 */ 534, 3151, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3458, 556, 556, 534, 534, 534,\n  /* 33446 */ 534, 3163, 534, 534, 534, 534, 534, 534, 534, 3168, 534, 3170, 534, 534, 534, 534, 534, 1261, 534, 534,\n  /* 33466 */ 534, 1270, 534, 534, 534, 534, 534, 534, 534, 2493, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2196,\n  /* 33486 */ 534, 534, 534, 534, 534, 534, 556, 556, 556, 580, 580, 3207, 580, 580, 580, 580, 580, 580, 580, 580, 580,\n  /* 33507 */ 580, 1962, 580, 580, 580, 580, 580, 580, 3227, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 534,\n  /* 33528 */ 580, 556, 2912, 534, 2914, 556, 2916, 3275, 534, 534, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556,\n  /* 33548 */ 556, 556, 556, 580, 580, 580, 556, 556, 3287, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3293, 556, 556,\n  /* 33569 */ 556, 556, 556, 556, 3466, 556, 556, 556, 556, 556, 556, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580,\n  /* 33590 */ 3306, 3587, 3588, 556, 556, 580, 580, 3591, 3592, 580, 580, 0, 0, 0, 534, 534, 534, 534, 534, 534, 534,\n  /* 33611 */ 534, 534, 1716, 534, 534, 534, 0, 683, 684, 0, 0, 0, 0, 689, 0, 0, 0, 364, 364, 364, 0, 0, 0, 0, 0, 534,\n  /* 33637 */ 830, 534, 534, 534, 534, 534, 534, 860, 534, 534, 534, 534, 534, 534, 2180, 2181, 534, 534, 534, 534, 534,\n  /* 33658 */ 534, 2188, 534, 0, 751, 0, 0, 0, 0, 0, 751, 751, 0, 0, 816, 0, 0, 0, 0, 0, 0, 0, 1134592, 0, 0, 0, 0, 0,\n  /* 33686 */ 0, 1134592, 0, 0, 0, 0, 970, 556, 0, 580, 580, 580, 580, 988, 580, 580, 580, 580, 580, 580, 580, 580,\n  /* 33708 */ 1044, 580, 0, 0, 0, 841, 988, 914, 534, 534, 534, 534, 897, 556, 556, 556, 556, 970, 0, 580, 580, 580,\n  /* 33730 */ 580, 1044, 0, 0, 0, 1145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2408448, 0, 0, 534, 1318, 534, 534, 534,\n  /* 33757 */ 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 0, 2549, 1696, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 33783 */ 0, 0, 0, 1190, 580, 580, 1988, 580, 534, 580, 556, 534, 534, 534, 534, 556, 556, 556, 556, 580, 580, 580,\n  /* 33805 */ 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2122, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534, 534,\n  /* 33835 */ 2768, 534, 2769, 534, 534, 2540, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 0, 0, 0,\n  /* 33857 */ 0, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 0, 0, 975, 580, 0, 3129, 0, 0, 0, 0, 0, 0,\n  /* 33882 */ 0, 0, 0, 0, 0, 0, 0, 0, 2053, 0, 3235, 534, 3237, 556, 3239, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3124,\n  /* 33910 */ 3125, 0, 0, 0, 556, 556, 556, 3298, 556, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2359, 580,\n  /* 33932 */ 580, 580, 580, 3317, 580, 534, 534, 556, 556, 580, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2076, 0, 0, 0, 0, 0, 0,\n  /* 33959 */ 461, 461, 479, 487, 487, 479, 487, 487, 487, 487, 487, 487, 487, 487, 512, 520, 520, 520, 520, 520, 520,\n  /* 33980 */ 520, 520, 520, 520, 520, 520, 520, 520, 529, 520, 520, 520, 520, 520, 542, 565, 542, 565, 542, 542, 565,\n  /* 34001 */ 542, 589, 565, 565, 565, 565, 565, 565, 565, 589, 589, 589, 542, 589, 589, 589, 589, 589, 589, 589, 565,\n  /* 34022 */ 565, 542, 565, 589, 565, 589, 1, 12290, 0, 0, 760, 0, 0, 764, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3132, 0, 0,\n  /* 34050 */ 0, 0, 0, 778, 0, 0, 0, 0, 0, 0, 0, 782, 0, 0, 0, 0, 0, 0, 0, 779, 0, 0, 0, 0, 788, 0, 0, 0, 0, 0, 0, 800,\n  /* 34082 */ 0, 0, 0, 0, 0, 0, 805, 0, 0, 0, 782, 0, 0, 0, 0, 364, 364, 0, 0, 0, 1136, 0, 0, 0, 0, 0, 0, 0, 1606, 0, 0,\n  /* 34113 */ 0, 0, 0, 0, 0, 0, 553, 576, 553, 576, 553, 553, 576, 553, 0, 805, 0, 0, 0, 0, 0, 805, 805, 0, 0, 0, 0,\n  /* 34140 */ 782, 0, 0, 0, 0, 0, 534, 831, 534, 534, 534, 846, 534, 534, 534, 534, 534, 0, 2210, 0, 0, 556, 556, 556,\n  /* 34164 */ 556, 556, 556, 556, 1893, 26009, 0, 1898, 580, 1900, 580, 1901, 580, 0, 0, 0, 0, 823, 778, 0, 0, 823, 0,\n  /* 34187 */ 0, 0, 0, 0, 0, 0, 0, 2468, 0, 0, 0, 0, 0, 0, 0, 0, 2022, 0, 2116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 823, 534,\n  /* 34217 */ 534, 534, 534, 844, 534, 852, 534, 534, 534, 534, 0, 0, 556, 556, 556, 556, 556, 2815, 556, 2816, 556,\n  /* 34238 */ 556, 917, 556, 925, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2583, 556, 971,\n  /* 34259 */ 556, 0, 580, 580, 580, 580, 580, 991, 580, 999, 580, 580, 580, 580, 580, 580, 3097, 580, 580, 580, 580,\n  /* 34280 */ 580, 534, 580, 556, 534, 534, 534, 534, 1054, 898, 556, 556, 556, 1059, 971, 0, 580, 580, 580, 1064, 1045,\n  /* 34301 */ 0, 1159, 0, 0, 0, 0, 0, 0, 0, 1167, 0, 0, 0, 0, 0, 0, 0, 789, 0, 0, 0, 0, 0, 0, 770, 0, 0, 0, 1219, 0, 0,\n  /* 34332 */ 0, 0, 0, 0, 0, 0, 1224, 0, 0, 0, 0, 0, 0, 0, 1134592, 0, 364, 0, 0, 0, 1134592, 0, 0, 0, 1134592, 1134592,\n  /* 34358 */ 0, 0, 1134592, 0, 0, 1134592, 0, 1134592, 534, 534, 1284, 534, 534, 534, 534, 534, 534, 534, 1292, 534,\n  /* 34378 */ 534, 534, 534, 534, 0, 2209, 0, 0, 556, 556, 556, 556, 556, 556, 556, 1842, 556, 556, 556, 556, 556, 556,\n  /* 34400 */ 556, 556, 26009, 1896, 580, 580, 580, 580, 580, 580, 534, 534, 534, 1321, 534, 534, 1325, 534, 534, 534,\n  /* 34420 */ 534, 534, 1331, 534, 534, 534, 534, 534, 534, 534, 3342, 534, 3344, 534, 534, 534, 534, 534, 556, 1338,\n  /* 34440 */ 534, 534, 1341, 901, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2568, 556, 556, 556, 556, 556,\n  /* 34461 */ 1357, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1376, 556, 556, 556, 556, 556, 0, 2615, 0, 0, 0, 0,\n  /* 34483 */ 580, 580, 580, 2619, 580, 556, 556, 556, 1384, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556,\n  /* 34504 */ 1816, 1817, 556, 556, 580, 580, 580, 1522, 580, 580, 0, 534, 580, 556, 534, 534, 534, 534, 534, 556, 556,\n  /* 34525 */ 556, 556, 556, 3196, 556, 3198, 556, 556, 556, 556, 556, 556, 556, 556, 1878, 1879, 556, 556, 556, 556,\n  /* 34545 */ 556, 556, 534, 534, 534, 534, 1773, 534, 534, 534, 534, 534, 534, 1781, 534, 534, 534, 534, 0, 0, 556,\n  /* 34566 */ 556, 556, 2813, 556, 556, 556, 556, 556, 2818, 556, 556, 1823, 556, 556, 556, 556, 556, 556, 556, 556,\n  /* 34586 */ 556, 556, 556, 556, 556, 556, 2842, 556, 556, 556, 1853, 556, 556, 556, 556, 1859, 556, 556, 556, 556,\n  /* 34606 */ 556, 556, 556, 556, 2840, 556, 556, 556, 556, 556, 556, 556, 1868, 556, 556, 556, 556, 556, 556, 1876,\n  /* 34626 */ 556, 556, 556, 556, 556, 556, 556, 556, 2850, 556, 556, 556, 556, 556, 556, 556, 556, 1886, 1888, 556,\n  /* 34646 */ 556, 556, 556, 556, 26009, 0, 580, 580, 580, 580, 580, 580, 0, 1525, 1526, 1527, 534, 534, 1529, 534, 534,\n  /* 34667 */ 556, 580, 580, 580, 1955, 580, 580, 580, 580, 580, 580, 580, 580, 1964, 580, 580, 580, 580, 580, 1940,\n  /* 34687 */ 1941, 1943, 580, 580, 580, 580, 580, 580, 580, 1951, 580, 580, 580, 1972, 580, 580, 580, 580, 580, 580,\n  /* 34707 */ 580, 580, 580, 1982, 1984, 580, 580, 580, 580, 1925, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580,\n  /* 34727 */ 580, 2372, 580, 2374, 580, 580, 0, 0, 0, 2057, 0, 0, 0, 0, 0, 2063, 0, 0, 0, 0, 0, 0, 0, 1089, 0, 0, 0, 0,\n  /* 34755 */ 1241, 1242, 0, 0, 0, 0, 0, 0, 2071, 0, 0, 0, 0, 0, 0, 0, 0, 2079, 0, 0, 0, 0, 0, 534, 833, 534, 534, 534,\n  /* 34783 */ 534, 534, 534, 534, 534, 534, 1306, 534, 534, 534, 534, 534, 534, 2134, 534, 534, 534, 534, 534, 534, 534,\n  /* 34804 */ 534, 534, 534, 534, 2146, 534, 534, 534, 534, 534, 534, 534, 3453, 534, 534, 534, 534, 534, 556, 556, 556,\n  /* 34825 */ 556, 556, 556, 2826, 556, 556, 556, 556, 556, 556, 556, 556, 556, 949, 556, 556, 556, 556, 967, 556, 2189,\n  /* 34846 */ 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1314, 2203, 534, 534, 534, 534,\n  /* 34867 */ 0, 0, 0, 0, 556, 556, 556, 556, 556, 556, 2219, 2290, 556, 556, 556, 556, 0, 0, 0, 0, 580, 580, 580, 580,\n  /* 34891 */ 580, 580, 2306, 2377, 580, 580, 580, 580, 2146, 2318, 2231, 534, 534, 534, 534, 556, 556, 556, 556, 580,\n  /* 34911 */ 580, 580, 580, 0, 534, 534, 556, 556, 580, 580, 0, 0, 0, 0, 0, 0, 3246, 0, 0, 0, 0, 0, 2413, 2414, 0, 0,\n  /* 34937 */ 2417, 0, 2419, 0, 0, 0, 0, 0, 0, 0, 0, 2712, 0, 0, 0, 0, 0, 0, 0, 0, 2728, 0, 0, 0, 0, 0, 0, 0, 0, 2429,\n  /* 34967 */ 0, 0, 0, 0, 0, 0, 0, 0, 2406, 0, 0, 0, 0, 0, 0, 0, 0, 2454, 0, 0, 0, 0, 0, 0, 0, 0, 1587, 0, 0, 0, 0, 0,\n  /* 34999 */ 0, 0, 1595, 1596, 0, 0, 0, 2424, 0, 0, 2427, 0, 0, 0, 0, 0, 0, 2431, 0, 0, 0, 0, 0, 0, 0, 1159168, 0,\n  /* 35026 */ 1159168, 0, 0, 0, 0, 1159168, 1159168, 0, 0, 0, 2452, 0, 0, 0, 0, 0, 0, 0, 2456, 2457, 0, 0, 2460, 0, 0,\n  /* 35051 */ 2463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2473, 0, 0, 0, 0, 0, 639, 0, 0, 0, 0, 644, 645, 646, 647, 648, 649,\n  /* 35079 */ 534, 2487, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3008, 534, 534, 534,\n  /* 35100 */ 2515, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1293, 534, 534, 534, 534, 2527, 534,\n  /* 35120 */ 534, 534, 534, 534, 534, 2534, 534, 534, 534, 534, 534, 534, 534, 534, 3343, 534, 534, 534, 534, 534, 534,\n  /* 35141 */ 556, 534, 534, 2541, 534, 534, 534, 2544, 534, 534, 534, 534, 534, 534, 534, 0, 0, 0, 0, 556, 556, 556,\n  /* 35163 */ 556, 2217, 556, 556, 556, 2574, 556, 556, 556, 556, 556, 556, 2579, 556, 556, 556, 556, 556, 556, 556,\n  /* 35183 */ 1427, 1428, 556, 556, 556, 26009, 1341, 975, 580, 2585, 556, 556, 556, 556, 556, 556, 2592, 556, 556, 556,\n  /* 35203 */ 556, 556, 556, 2599, 556, 556, 556, 556, 556, 3290, 556, 556, 556, 556, 3291, 3292, 556, 556, 556, 556,\n  /* 35223 */ 556, 0, 0, 2298, 0, 580, 580, 580, 580, 580, 580, 580, 2886, 580, 580, 580, 580, 580, 580, 580, 580, 580,\n  /* 35245 */ 3312, 580, 580, 580, 580, 580, 580, 2673, 580, 580, 580, 2676, 580, 580, 580, 580, 580, 580, 580, 2681,\n  /* 35265 */ 2682, 2683, 534, 534, 534, 534, 534, 1289, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2185,\n  /* 35285 */ 534, 534, 534, 534, 2720, 2721, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2080, 0, 0, 0, 2736, 0, 0, 0, 0,\n  /* 35314 */ 0, 0, 0, 0, 0, 0, 2746, 0, 0, 0, 0, 0, 667, 0, 0, 0, 0, 0, 729, 0, 780, 0, 0, 0, 0, 0, 305, 0, 0, 0, 0, 0,\n  /* 35346 */ 0, 0, 0, 0, 0, 0, 1565, 0, 0, 0, 0, 0, 0, 2751, 0, 0, 0, 2753, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2109, 534,\n  /* 35376 */ 534, 534, 534, 534, 2787, 2788, 534, 534, 534, 534, 2791, 534, 534, 534, 534, 534, 534, 534, 534, 534,\n  /* 35396 */ 556, 556, 3178, 556, 556, 556, 556, 2796, 534, 534, 534, 2799, 534, 2801, 534, 534, 534, 534, 534, 534,\n  /* 35416 */ 2805, 534, 534, 534, 534, 534, 534, 2492, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1745, 534, 534,\n  /* 35436 */ 534, 534, 534, 534, 2834, 2835, 556, 556, 556, 556, 2838, 556, 556, 556, 556, 556, 556, 556, 556, 556,\n  /* 35456 */ 2257, 556, 556, 556, 556, 556, 556, 556, 2844, 556, 556, 556, 2847, 556, 2849, 556, 556, 556, 556, 556,\n  /* 35476 */ 556, 556, 2854, 580, 2867, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1949,\n  /* 35496 */ 580, 580, 580, 2883, 2884, 580, 580, 580, 580, 2887, 580, 580, 580, 580, 580, 580, 580, 1928, 580, 580,\n  /* 35516 */ 580, 580, 580, 580, 580, 580, 1912, 1913, 580, 580, 580, 580, 1920, 580, 580, 580, 580, 2893, 580, 580,\n  /* 35536 */ 580, 2896, 580, 2898, 580, 580, 580, 580, 580, 580, 1190, 534, 580, 556, 534, 534, 534, 534, 534, 556,\n  /* 35556 */ 580, 2903, 580, 580, 580, 580, 580, 580, 534, 580, 556, 534, 534, 556, 556, 580, 580, 0, 0, 3242, 0, 0, 0,\n  /* 35579 */ 0, 0, 0, 0, 0, 225734, 225734, 225734, 225734, 225734, 225734, 225734, 225734, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 35601 */ 366, 0, 0, 0, 0, 0, 0, 580, 2918, 0, 0, 2921, 2922, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3132, 0, 0, 3255, 0,\n  /* 35630 */ 534, 534, 534, 534, 2986, 534, 534, 534, 534, 534, 534, 534, 2992, 534, 534, 534, 534, 534, 534, 891, 534,\n  /* 35651 */ 534, 534, 534, 556, 556, 556, 556, 556, 0, 0, 0, 0, 580, 580, 2302, 580, 580, 580, 580, 556, 556, 556,\n  /* 35673 */ 3026, 556, 556, 556, 556, 556, 556, 556, 3032, 556, 556, 556, 556, 556, 556, 1841, 556, 556, 556, 556,\n  /* 35693 */ 556, 556, 556, 556, 556, 3357, 556, 3359, 556, 556, 556, 556, 580, 580, 580, 580, 3068, 580, 580, 580,\n  /* 35713 */ 580, 580, 580, 580, 3074, 580, 580, 580, 580, 580, 2311, 580, 580, 2314, 580, 580, 580, 580, 580, 580,\n  /* 35733 */ 2322, 3138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1191, 3247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3132,\n  /* 35763 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534, 2767, 534, 534, 534, 534, 534, 534, 534, 534, 3265, 534,\n  /* 35787 */ 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1341, 0, 556, 556, 534, 534, 3276, 534, 534, 534,\n  /* 35808 */ 534, 534, 556, 556, 556, 556, 556, 556, 3283, 556, 556, 556, 556, 556, 3299, 580, 580, 580, 580, 580, 580,\n  /* 35829 */ 580, 3304, 580, 580, 580, 580, 580, 3479, 580, 3481, 580, 580, 3483, 580, 580, 0, 0, 0, 0, 0, 0, 1210, 0,\n  /* 35852 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 2421, 0, 0, 0, 0, 0, 3132, 0, 0, 0, 0, 534, 534, 534, 534, 534, 534, 534, 534,\n  /* 35880 */ 3399, 534, 3401, 3402, 534, 3404, 534, 556, 556, 556, 556, 556, 556, 556, 556, 3414, 556, 3416, 3417, 556,\n  /* 35900 */ 3419, 556, 3421, 580, 580, 580, 580, 580, 580, 580, 580, 3430, 580, 3432, 3433, 580, 3435, 580, 3437, 0,\n  /* 35920 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534, 534, 534, 534, 3499, 534, 3501, 534, 534, 580, 580, 580,\n  /* 35944 */ 3553, 580, 3554, 580, 580, 580, 580, 0, 0, 0, 0, 534, 534, 534, 534, 534, 534, 3538, 534, 3539, 534, 534,\n  /* 35966 */ 534, 3604, 3605, 3606, 534, 556, 580, 534, 556, 580, 534, 556, 580, 0, 0, 0, 0, 0, 0, 0, 3211264, 0, 0, 0,\n  /* 35990 */ 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 2125824,\n  /* 36002 */ 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824,\n  /* 36013 */ 2125824, 3117056, 2125824, 2125824, 2125824, 2125824, 590, 566, 566, 566, 566, 566, 566, 566, 590, 590,\n  /* 36029 */ 590, 543, 590, 590, 590, 590, 590, 590, 590, 566, 566, 543, 566, 590, 566, 590, 1, 12290, 556, 556, 1398,\n  /* 36050 */ 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2853, 556, 0, 0, 730, 0, 0, 0, 0, 0,\n  /* 36074 */ 0, 0, 0, 0, 0, 0, 0, 0, 1126, 1127, 0, 534, 534, 534, 534, 2138, 534, 534, 534, 534, 534, 534, 534, 534,\n  /* 36098 */ 534, 534, 534, 534, 2784, 534, 534, 534, 556, 556, 556, 2223, 556, 556, 556, 556, 556, 556, 556, 556, 556,\n  /* 36119 */ 556, 556, 556, 1849, 556, 556, 556, 580, 580, 580, 2310, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580,\n  /* 36140 */ 580, 580, 1490, 580, 580, 580, 402, 0, 0, 0, 0, 380, 0, 69632, 73728, 0, 0, 0, 0, 425, 65536, 0, 0, 0, 0,\n  /* 36165 */ 364, 364, 1133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3133, 0, 0, 0, 3136, 0, 425, 425, 0, 425, 0, 439, 425, 425,\n  /* 36192 */ 462, 462, 462, 469, 462, 462, 462, 462, 462, 462, 462, 462, 469, 462, 462, 462, 462, 462, 462, 462, 462,\n  /* 36213 */ 476, 462, 488, 488, 462, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488,\n  /* 36234 */ 488, 488, 488, 488, 488, 488, 488, 531, 544, 567, 544, 567, 544, 544, 567, 544, 591, 567, 567, 567, 567,\n  /* 36255 */ 567, 567, 567, 591, 591, 591, 544, 591, 591, 591, 591, 591, 591, 591, 567, 567, 544, 567, 591, 567, 591,\n  /* 36276 */ 1, 12290, 0, 0, 0, 653, 654, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2939, 0, 0, 2941, 0, 0, 0, 654, 0, 654,\n  /* 36305 */ 0, 0, 0, 0, 814, 0, 0, 0, 654, 0, 0, 0, 0, 374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 2130, 534, 534, 534,\n  /* 36335 */ 556, 919, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 957, 556, 556, 556, 556, 556, 556, 3545, 556,\n  /* 36356 */ 3546, 556, 556, 556, 556, 580, 580, 580, 580, 580, 580, 0, 0, 0, 534, 534, 534, 534, 534, 534, 556, 556,\n  /* 36378 */ 534, 534, 884, 534, 534, 556, 556, 957, 556, 556, 0, 580, 580, 1031, 580, 580, 580, 580, 580, 2907, 580,\n  /* 36399 */ 580, 534, 580, 556, 534, 534, 556, 556, 580, 580, 0, 0, 0, 0, 0, 0, 0, 3117, 0, 0, 0, 290, 1066, 0, 0,\n  /* 36424 */ 1069, 1073, 0, 0, 1077, 1081, 0, 0, 0, 0, 0, 0, 0, 1094, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192965, 192965,\n  /* 36449 */ 192965, 192965, 192965, 192965, 192965, 192965, 0, 0, 0, 1088, 1089, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 36472 */ 131072, 131072, 0, 0, 0, 1130, 0, 0, 364, 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3132, 0, 3254, 0, 0, 1089,\n  /* 36499 */ 1088, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2093, 0, 1088, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534,\n  /* 36530 */ 1253, 534, 534, 534, 534, 534, 1303, 534, 534, 1305, 534, 534, 534, 1309, 534, 534, 534, 0, 901, 556, 556,\n  /* 36551 */ 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3549, 580, 580, 580, 534, 534, 534, 534, 1287, 534, 534,\n  /* 36572 */ 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2804, 534, 534, 2807, 534, 534, 1320, 534, 534, 534,\n  /* 36592 */ 534, 534, 534, 534, 534, 534, 534, 534, 1334, 534, 534, 534, 534, 534, 1323, 534, 534, 534, 534, 534, 534,\n  /* 36613 */ 534, 534, 534, 534, 534, 2509, 534, 534, 534, 534, 534, 534, 534, 1341, 901, 556, 1344, 556, 556, 556,\n  /* 36633 */ 556, 556, 556, 556, 556, 556, 2283, 556, 556, 556, 556, 556, 556, 556, 556, 1358, 1365, 556, 556, 556,\n  /* 36653 */ 556, 556, 556, 556, 556, 556, 1379, 556, 556, 0, 580, 580, 580, 985, 989, 992, 580, 1000, 580, 580, 580,\n  /* 36674 */ 1015, 1017, 556, 556, 556, 1399, 556, 556, 556, 556, 556, 556, 556, 1412, 556, 556, 556, 556, 556, 556,\n  /* 36694 */ 1858, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1402, 556, 556, 556, 556, 556, 556, 556, 1416, 556,\n  /* 36714 */ 1436, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1450, 1457, 580, 580, 580, 580, 580, 3069,\n  /* 36734 */ 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1510, 580, 580, 580, 580, 580, 580, 1518, 580, 580, 580,\n  /* 36755 */ 580, 0, 1266, 1450, 1358, 534, 534, 1320, 534, 534, 556, 556, 556, 556, 556, 3354, 556, 556, 556, 556,\n  /* 36775 */ 556, 556, 3360, 556, 556, 556, 556, 556, 556, 2615, 0, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2626,\n  /* 36796 */ 580, 580, 580, 580, 580, 580, 556, 1412, 556, 556, 580, 580, 1504, 580, 580, 1066, 0, 0, 0, 0, 0, 0, 0,\n  /* 36819 */ 1107, 0, 0, 0, 0, 0, 0, 0, 0, 658, 0, 0, 661, 0, 0, 0, 0, 1570, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 36851 */ 0, 1228, 1721, 1722, 534, 534, 534, 534, 1729, 534, 534, 534, 534, 534, 534, 534, 534, 534, 556, 3177,\n  /* 36871 */ 556, 556, 556, 3180, 556, 534, 1770, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534,\n  /* 36892 */ 1311, 534, 556, 556, 1824, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3204,\n  /* 36912 */ 556, 556, 556, 1838, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3294, 556, 580,\n  /* 36933 */ 1987, 580, 580, 534, 580, 556, 534, 534, 534, 534, 556, 556, 556, 556, 580, 580, 580, 580, 0, 0, 0, 0,\n  /* 36955 */ 2694, 2029, 0, 2030, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2039, 0, 0, 0, 0, 0, 0, 1700, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 36985 */ 298, 0, 0, 0, 0, 0, 0, 534, 534, 2190, 534, 534, 534, 534, 534, 2195, 534, 534, 534, 534, 534, 534, 534,\n  /* 37008 */ 1326, 534, 534, 534, 534, 534, 534, 534, 534, 1291, 534, 534, 534, 534, 534, 534, 534, 556, 2276, 556,\n  /* 37028 */ 556, 556, 556, 556, 556, 2282, 556, 556, 556, 556, 556, 556, 556, 1810, 556, 556, 556, 556, 556, 556, 556,\n  /* 37049 */ 556, 3188, 556, 556, 556, 556, 556, 556, 556, 580, 2363, 580, 580, 580, 580, 580, 580, 2369, 580, 580,\n  /* 37069 */ 580, 580, 580, 580, 580, 2329, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3557, 0, 0, 0, 0, 534, 534,\n  /* 37091 */ 580, 580, 2634, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1948, 580, 580, 0, 0, 0,\n  /* 37113 */ 0, 2699, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163840, 0, 0, 0, 534, 534, 534, 534, 534, 2778, 534, 534,\n  /* 37139 */ 534, 534, 534, 534, 534, 534, 534, 534, 1779, 534, 534, 534, 534, 534, 534, 2809, 534, 534, 0, 0, 556,\n  /* 37160 */ 556, 556, 556, 556, 556, 556, 556, 2817, 556, 556, 556, 556, 556, 3465, 556, 3467, 556, 556, 3469, 556,\n  /* 37180 */ 556, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3373, 580, 3375, 580, 556, 556, 556, 2858, 556,\n  /* 37200 */ 556, 0, 0, 580, 580, 580, 580, 580, 580, 580, 580, 1445, 580, 580, 580, 1454, 580, 580, 580, 2866, 580,\n  /* 37221 */ 580, 580, 580, 580, 580, 2874, 580, 580, 580, 580, 580, 580, 580, 580, 1473, 580, 580, 580, 580, 580, 580,\n  /* 37242 */ 580, 534, 2996, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1767, 1768, 3036,\n  /* 37262 */ 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2275, 580, 3078, 580, 580, 580,\n  /* 37283 */ 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1966, 580, 0, 0, 0, 0, 3130, 0, 0, 0, 0, 0, 0, 0,\n  /* 37308 */ 0, 0, 0, 0, 0, 167936, 0, 0, 0, 534, 534, 3174, 534, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556,\n  /* 37331 */ 556, 556, 1828, 556, 556, 556, 556, 556, 556, 556, 556, 26009, 0, 580, 580, 580, 580, 580, 580, 0, 0, 0,\n  /* 37353 */ 0, 3535, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2991, 534, 534, 534, 3542, 556, 556,\n  /* 37374 */ 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3550, 580, 580, 580, 580, 580, 3082, 580, 580, 3085,\n  /* 37394 */ 580, 580, 580, 580, 580, 580, 580, 1911, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3072, 580, 580, 580,\n  /* 37415 */ 580, 580, 580, 463, 463, 463, 447, 447, 463, 447, 447, 447, 447, 447, 447, 447, 447, 513, 513, 513, 513,\n  /* 37436 */ 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 545, 568, 545, 568, 545, 545, 568, 545, 592,\n  /* 37457 */ 568, 568, 568, 568, 568, 568, 568, 592, 592, 592, 545, 592, 592, 592, 592, 592, 592, 592, 568, 568, 545,\n  /* 37478 */ 568, 592, 568, 592, 1, 12290, 0, 0, 0, 655, 0, 655, 0, 0, 0, 0, 0, 0, 0, 0, 655, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 37507 */ 0, 0, 0, 556, 920, 556, 556, 934, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2841, 556, 556,\n  /* 37529 */ 556, 556, 0, 0, 1160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1155, 0, 0, 0, 0, 0, 1177, 0, 0, 0, 0, 0, 0,\n  /* 37560 */ 0, 0, 0, 0, 0, 0, 0, 2461696, 0, 0, 0, 0, 0, 1232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2801664, 0, 0,\n  /* 37590 */ 534, 534, 534, 534, 1322, 534, 534, 534, 534, 534, 1329, 534, 534, 534, 534, 534, 534, 534, 2505, 534,\n  /* 37610 */ 2507, 534, 534, 534, 534, 534, 534, 534, 1793, 534, 534, 534, 534, 1341, 0, 556, 556, 556, 556, 1359, 556,\n  /* 37631 */ 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 965, 556, 556, 556, 556, 556, 1421, 556, 556,\n  /* 37652 */ 556, 556, 556, 556, 556, 556, 26009, 1341, 975, 580, 580, 580, 580, 1974, 1975, 580, 580, 580, 580, 580,\n  /* 37672 */ 580, 580, 580, 580, 580, 2641, 580, 580, 580, 2644, 580, 556, 556, 1534, 556, 580, 580, 580, 1538, 580,\n  /* 37692 */ 1066, 0, 1542, 0, 0, 0, 1548, 0, 0, 0, 1554, 0, 0, 0, 1560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2444, 0, 0, 0,\n  /* 37720 */ 2448, 0, 0, 1599, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1569, 534, 534, 1723, 534, 534, 534, 534,\n  /* 37747 */ 534, 534, 534, 534, 534, 1734, 534, 534, 534, 534, 534, 534, 892, 534, 534, 534, 534, 556, 556, 556, 556,\n  /* 37768 */ 556, 0, 0, 2298, 0, 0, 0, 580, 580, 580, 580, 580, 580, 3480, 580, 580, 580, 580, 580, 580, 0, 0, 0, 534,\n  /* 37792 */ 3582, 534, 534, 534, 534, 556, 3586, 1754, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534,\n  /* 37812 */ 534, 534, 534, 1316, 0, 2096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2108, 0, 534, 534, 534, 534, 2154,\n  /* 37839 */ 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3006, 534, 534, 534, 556, 556, 556, 2239, 556,\n  /* 37860 */ 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1864, 556, 556, 1867, 580, 580, 580, 2326, 580,\n  /* 37880 */ 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1512, 580, 580, 580, 556, 556, 3194, 556, 556, 556,\n  /* 37901 */ 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1414, 556, 556, 0, 0, 3328, 3132, 0, 0, 0, 0, 0, 0, 0,\n  /* 37925 */ 0, 0, 534, 534, 534, 534, 534, 851, 534, 534, 534, 534, 534, 580, 580, 3379, 580, 580, 534, 556, 580, 0,\n  /* 37947 */ 0, 0, 3384, 0, 0, 0, 0, 0, 0, 306, 204800, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 298, 0, 0, 0, 0, 0, 3132, 0, 0,\n  /* 37977 */ 0, 0, 534, 534, 534, 534, 3395, 534, 534, 534, 534, 534, 534, 534, 2156, 534, 2158, 534, 534, 534, 534,\n  /* 37998 */ 534, 534, 534, 2170, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2546, 534, 534, 534, 534, 0, 2549, 387,\n  /* 38019 */ 389, 339, 0, 0, 0, 0, 0, 0, 338, 0, 0, 339, 0, 0, 0, 0, 0, 0, 2023, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 359, 0,\n  /* 38050 */ 0, 0, 0, 0, 0, 0, 0, 386, 0, 0, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 393, 394, 0, 395, 0, 0,\n  /* 38079 */ 0, 0, 0, 395, 0, 0, 0, 0, 0, 1209, 0, 0, 0, 0, 1214, 0, 0, 0, 0, 0, 0, 0, 2405, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 38111 */ 1094, 0, 0, 0, 0, 1099, 0, 0, 0, 338, 0, 0, 440, 0, 0, 464, 464, 464, 464, 464, 464, 464, 464, 546, 569,\n  /* 38136 */ 546, 569, 546, 546, 569, 546, 475, 464, 464, 464, 493, 470, 493, 493, 493, 493, 493, 493, 493, 493, 464,\n  /* 38157 */ 464, 470, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 474, 474, 464, 475, 464, 464, 464, 593,\n  /* 38178 */ 569, 569, 569, 569, 569, 569, 569, 593, 593, 593, 546, 593, 593, 593, 593, 593, 593, 593, 569, 569, 546,\n  /* 38199 */ 569, 593, 569, 593, 1, 12290, 0, 0, 0, 699, 0, 0, 0, 0, 0, 0, 0, 0, 708, 0, 710, 0, 0, 0, 0, 431, 0, 0, 0,\n  /* 38228 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1643, 0, 0, 0, 0, 743, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2411, 0, 0,\n  /* 38260 */ 759, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 656, 0, 775, 0, 0, 0, 0, 0, 824, 0, 0, 0, 0, 0, 0, 779, 656, 0, 0,\n  /* 38291 */ 796, 0, 0, 0, 0, 699, 0, 0, 0, 0, 0, 0, 799, 0, 0, 0, 0, 434, 0, 0, 331, 461, 461, 461, 461, 461, 461,\n  /* 38318 */ 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 796, 779, 0, 0, 801, 0, 660, 0, 775, 0, 0, 0, 0, 0, 0,\n  /* 38343 */ 0, 0, 2755, 0, 0, 0, 0, 0, 0, 0, 0, 2937, 0, 0, 0, 0, 0, 0, 0, 0, 2741, 0, 0, 0, 2745, 0, 2747, 0, 0, 0,\n  /* 38373 */ 775, 801, 0, 801, 796, 0, 0, 0, 815, 0, 0, 0, 656, 818, 828, 0, 0, 0, 0, 534, 832, 534, 534, 534, 848,\n  /* 38398 */ 534, 534, 862, 534, 534, 534, 534, 534, 534, 2504, 534, 534, 534, 534, 534, 534, 534, 534, 534, 898, 534,\n  /* 38419 */ 556, 556, 556, 556, 556, 534, 534, 875, 534, 534, 534, 534, 893, 534, 534, 534, 556, 556, 904, 556, 556,\n  /* 38440 */ 0, 580, 580, 976, 580, 580, 580, 580, 580, 580, 1007, 580, 580, 580, 580, 580, 1908, 580, 580, 580, 580,\n  /* 38461 */ 580, 580, 580, 580, 580, 1921, 556, 921, 556, 556, 935, 556, 556, 556, 556, 948, 556, 556, 556, 556, 966,\n  /* 38482 */ 556, 556, 556, 556, 580, 580, 580, 580, 580, 580, 0, 3594, 0, 534, 534, 534, 534, 534, 534, 534, 534, 534,\n  /* 38504 */ 3156, 534, 534, 534, 534, 534, 534, 534, 2802, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1795, 534,\n  /* 38524 */ 534, 1341, 1800, 556, 556, 580, 1022, 580, 580, 580, 580, 1040, 580, 580, 580, 0, 0, 0, 534, 580, 556,\n  /* 38545 */ 556, 556, 556, 580, 580, 580, 580, 580, 580, 3428, 580, 580, 580, 580, 580, 534, 556, 580, 3381, 0, 3383,\n  /* 38566 */ 0, 0, 0, 0, 0, 0, 0, 2126, 0, 0, 0, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1717, 534, 534, 0,\n  /* 38591 */ 0, 1131, 0, 364, 364, 0, 1134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2481, 0, 0, 0, 0, 0, 0, 0, 1174, 0, 0, 0, 0, 0,\n  /* 38621 */ 0, 1091, 0, 0, 0, 0, 0, 0, 0, 0, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 1, 12290,\n  /* 38641 */ 1093, 0, 0, 0, 0, 0, 0, 1197, 0, 0, 0, 0, 1202, 0, 0, 0, 0, 0, 0, 2033, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 38671 */ 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 324, 0, 0, 0, 0, 1131, 0, 0, 1237, 0, 0, 0, 0, 0,\n  /* 38702 */ 0, 0, 0, 0, 2713, 0, 0, 0, 0, 0, 0, 1216, 0, 0, 0, 0, 1248, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 841, 534,\n  /* 38731 */ 534, 534, 534, 534, 534, 534, 556, 556, 1360, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556,\n  /* 38752 */ 1382, 580, 580, 1497, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2334, 580, 580,\n  /* 38772 */ 556, 1533, 556, 556, 580, 580, 1537, 580, 580, 1066, 0, 0, 0, 0, 0, 0, 0, 1121, 0, 0, 1124, 1125, 0, 0, 0,\n  /* 38797 */ 0, 1584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1614, 0, 0, 0, 1602, 0, 0, 1605, 0, 1607, 0, 0, 0,\n  /* 38827 */ 0, 0, 0, 0, 0, 122880, 0, 122880, 122880, 122880, 122880, 122880, 0, 0, 1697, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 38851 */ 0, 0, 0, 0, 0, 2423, 0, 534, 1755, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534,\n  /* 38874 */ 2162, 534, 556, 1822, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3049,\n  /* 38894 */ 556, 556, 556, 556, 2265, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3031, 556, 556, 556, 556,\n  /* 38915 */ 0, 0, 0, 0, 2402, 0, 2404, 0, 0, 2407, 0, 0, 0, 0, 0, 0, 0, 1165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 750, 0, 0, 0,\n  /* 38946 */ 0, 0, 0, 2412, 0, 0, 0, 2415, 2416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106496, 0, 0, 0, 0, 0, 0, 0, 0, 2426,\n  /* 38976 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2912256, 0, 3207168, 0, 0, 0, 0, 2440, 0, 2441, 0, 0, 0, 0, 0, 0,\n  /* 39005 */ 0, 0, 0, 0, 2470, 0, 0, 0, 0, 0, 2461, 0, 0, 0, 0, 0, 0, 0, 0, 2469, 0, 0, 0, 0, 0, 2475, 0, 0, 0, 0,\n  /* 39035 */ 2478, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2486, 0, 0, 0, 0, 435, 0, 0, 447, 463, 463, 463, 463, 463, 463, 463, 463,\n  /* 39062 */ 463, 473, 463, 463, 463, 463, 463, 463, 534, 2500, 2501, 534, 534, 534, 534, 534, 2506, 534, 2508, 534,\n  /* 39082 */ 534, 534, 534, 2512, 2525, 534, 534, 534, 534, 534, 534, 2533, 534, 534, 534, 534, 2537, 534, 534, 534,\n  /* 39102 */ 534, 534, 534, 1262, 534, 534, 534, 534, 534, 534, 1277, 534, 534, 556, 556, 556, 2561, 556, 556, 2564,\n  /* 39122 */ 2565, 556, 556, 556, 556, 556, 2570, 556, 2572, 556, 556, 556, 556, 2576, 556, 556, 556, 556, 556, 556,\n  /* 39142 */ 556, 556, 2582, 556, 556, 0, 580, 580, 977, 580, 580, 580, 993, 580, 580, 580, 580, 580, 580, 1443, 580,\n  /* 39163 */ 580, 580, 1447, 580, 580, 1458, 580, 580, 556, 556, 2602, 556, 556, 556, 556, 556, 556, 556, 556, 556,\n  /* 39183 */ 556, 556, 556, 556, 1833, 556, 556, 2685, 534, 534, 556, 2687, 556, 556, 580, 2689, 580, 580, 0, 0, 0, 0,\n  /* 39205 */ 0, 0, 0, 2936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2036, 0, 0, 0, 0, 0, 0, 0, 0, 2708, 0, 0, 0, 0, 0, 0, 0, 2714,\n  /* 39236 */ 2715, 2716, 0, 0, 0, 0, 0, 0, 2060, 0, 0, 0, 0, 0, 2064, 0, 0, 2066, 0, 2735, 0, 2737, 0, 0, 0, 2740, 0,\n  /* 39263 */ 0, 2743, 0, 0, 0, 0, 0, 0, 0, 2960, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2430, 0, 0, 0, 0, 0, 2435, 534, 534, 2810,\n  /* 39292 */ 534, 0, 0, 2811, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2566, 556, 556, 556, 556, 556, 556, 556,\n  /* 39313 */ 2856, 556, 556, 2859, 556, 0, 0, 2860, 580, 580, 580, 580, 580, 580, 580, 2651, 580, 580, 580, 580, 580,\n  /* 39334 */ 580, 2658, 580, 580, 2892, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2321,\n  /* 39354 */ 580, 2902, 580, 580, 2905, 580, 580, 2908, 580, 2909, 2910, 2911, 534, 534, 556, 556, 580, 580, 0, 0, 0,\n  /* 39375 */ 0, 0, 3115, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 0, 0, 420, 0, 65536, 0, 2929, 2930, 0, 0, 0, 0, 2935, 0,\n  /* 39402 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 2730, 0, 0, 0, 0, 0, 534, 534, 2997, 534, 2999, 534, 534, 534, 534, 534, 534,\n  /* 39428 */ 3005, 534, 534, 3007, 534, 534, 534, 534, 534, 1324, 534, 534, 534, 534, 534, 534, 534, 534, 1335, 1336,\n  /* 39448 */ 556, 3037, 556, 3039, 556, 556, 556, 556, 556, 556, 556, 3046, 556, 556, 3048, 556, 556, 556, 556, 580,\n  /* 39468 */ 580, 580, 580, 580, 1066, 0, 0, 0, 0, 0, 0, 0, 377, 0, 380, 0, 0, 0, 380, 0, 0, 580, 580, 3079, 580, 3081,\n  /* 39494 */ 580, 580, 580, 580, 580, 580, 580, 3088, 580, 580, 3090, 534, 534, 534, 534, 534, 3164, 534, 534, 534,\n  /* 39514 */ 534, 534, 534, 534, 3169, 534, 534, 534, 534, 534, 534, 2779, 534, 534, 534, 534, 534, 534, 534, 534, 534,\n  /* 39535 */ 534, 3167, 534, 534, 534, 534, 534, 3181, 3182, 556, 556, 556, 556, 3186, 3187, 556, 556, 556, 556, 556,\n  /* 39555 */ 3191, 556, 556, 0, 580, 580, 978, 580, 580, 580, 995, 580, 580, 1009, 580, 580, 580, 580, 580, 2353, 2354,\n  /* 39576 */ 580, 580, 580, 580, 580, 580, 2361, 580, 580, 556, 556, 556, 580, 580, 580, 580, 580, 580, 580, 3210,\n  /* 39596 */ 3211, 580, 580, 580, 580, 580, 1442, 580, 580, 580, 580, 1448, 580, 580, 580, 580, 580, 580, 3524, 580,\n  /* 39616 */ 3526, 580, 580, 580, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 3215, 3216, 580, 580, 580, 580, 580,\n  /* 39640 */ 3220, 580, 580, 580, 580, 580, 580, 580, 580, 1507, 580, 580, 580, 580, 580, 580, 580, 3226, 580, 580,\n  /* 39660 */ 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 534, 580, 556, 2684, 556, 556, 556, 3288, 556, 556, 556,\n  /* 39681 */ 556, 556, 556, 556, 556, 556, 556, 556, 556, 2258, 556, 556, 556, 3307, 580, 580, 580, 580, 580, 580, 580,\n  /* 39702 */ 580, 580, 580, 580, 580, 580, 580, 580, 2347, 2348, 3132, 0, 0, 0, 0, 534, 534, 3393, 534, 534, 534, 534,\n  /* 39724 */ 3398, 534, 534, 534, 534, 534, 534, 1290, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1267, 534, 534,\n  /* 39744 */ 534, 534, 534, 534, 534, 3403, 534, 534, 556, 556, 3408, 556, 556, 556, 556, 3413, 556, 556, 556, 556,\n  /* 39764 */ 556, 556, 1874, 556, 556, 556, 556, 556, 1881, 556, 556, 556, 3418, 556, 556, 556, 580, 580, 3424, 580,\n  /* 39784 */ 580, 580, 580, 3429, 580, 580, 580, 580, 580, 1468, 580, 580, 580, 580, 580, 580, 580, 1476, 580, 580,\n  /* 39804 */ 3434, 580, 580, 580, 0, 0, 0, 0, 0, 3441, 0, 0, 0, 0, 534, 534, 534, 534, 3497, 534, 534, 534, 534, 534,\n  /* 39828 */ 534, 534, 534, 1731, 534, 534, 534, 534, 1735, 534, 534, 534, 3563, 3564, 534, 534, 556, 556, 556, 3569,\n  /* 39848 */ 3570, 556, 556, 556, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3212, 580, 580, 580, 3575, 3576, 580,\n  /* 39868 */ 580, 580, 0, 0, 0, 534, 534, 534, 534, 534, 534, 556, 556, 0, 580, 580, 979, 580, 580, 580, 580, 580, 580,\n  /* 39891 */ 580, 580, 580, 580, 2358, 580, 580, 580, 580, 580, 341, 342, 343, 344, 345, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 39916 */ 0, 0, 221184, 0, 0, 0, 0, 0, 0, 390, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, 344, 344, 345, 344,\n  /* 39946 */ 0, 343, 344, 448, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465,\n  /* 39967 */ 465, 480, 489, 489, 497, 489, 499, 489, 489, 499, 499, 489, 499, 514, 514, 514, 514, 514, 514, 514, 514,\n  /* 39988 */ 514, 514, 514, 514, 514, 514, 514, 514, 547, 570, 547, 570, 547, 547, 570, 547, 594, 570, 570, 570, 570,\n  /* 40009 */ 570, 570, 570, 594, 594, 594, 547, 594, 594, 594, 594, 594, 594, 594, 570, 570, 547, 570, 594, 570, 594,\n  /* 40030 */ 1, 12290, 650, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 665, 666, 0, 668, 669, 0, 0, 0, 0, 0, 675, 0, 0,\n  /* 40060 */ 0, 0, 0, 0, 0, 1220, 1250, 1251, 0, 1220, 0, 534, 534, 534, 0, 0, 0, 685, 0, 0, 0, 0, 0, 0, 692, 364, 364,\n  /* 40087 */ 364, 0, 0, 0, 0, 0, 687, 0, 0, 0, 0, 0, 364, 364, 364, 0, 0, 0, 0, 0, 734, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 40118 */ 0, 1691, 0, 0, 0, 0, 712, 0, 714, 0, 716, 0, 0, 0, 0, 0, 0, 0, 0, 0, 726, 0, 0, 0, 0, 436, 0, 0, 0, 0, 0,\n  /* 40149 */ 0, 0, 0, 0, 0, 0, 0, 2138112, 0, 0, 0, 0, 0, 0, 639, 745, 746, 747, 0, 0, 0, 0, 0, 753, 754, 0, 0, 0, 0,\n  /* 40178 */ 0, 748, 0, 0, 803, 0, 0, 0, 0, 0, 0, 0, 0, 1134592, 0, 0, 1134592, 0, 0, 0, 0, 0, 685, 0, 0, 665, 0, 685,\n  /* 40206 */ 0, 797, 668, 716, 0, 685, 798, 0, 0, 0, 0, 0, 1090, 1091, 1092, 1093, 0, 0, 0, 0, 0, 0, 0, 0, 2948, 0, 0,\n  /* 40233 */ 0, 0, 0, 2951, 0, 0, 0, 754, 0, 0, 0, 0, 0, 0, 0, 0, 747, 807, 808, 0, 0, 0, 0, 0, 1119, 0, 0, 0, 0, 0, 0,\n  /* 40264 */ 0, 0, 0, 0, 0, 3055616, 0, 0, 0, 3133440, 0, 0, 0, 0, 747, 0, 0, 812, 692, 0, 0, 0, 817, 0, 0, 0, 0, 0, 0,\n  /* 40293 */ 2073, 0, 2075, 0, 0, 0, 0, 0, 0, 0, 0, 1702, 0, 0, 1703, 0, 0, 1704, 0, 819, 0, 0, 0, 685, 692, 0, 0, 685,\n  /* 40321 */ 817, 817, 0, 0, 0, 0, 0, 0, 0, 3131, 0, 0, 0, 0, 0, 0, 0, 0, 749, 0, 0, 0, 0, 0, 0, 756, 870, 873, 534,\n  /* 40350 */ 534, 534, 885, 889, 534, 534, 534, 534, 556, 556, 556, 911, 915, 918, 556, 926, 556, 556, 556, 941, 943,\n  /* 40371 */ 946, 556, 556, 556, 958, 962, 556, 556, 0, 580, 580, 980, 986, 580, 580, 580, 580, 1004, 580, 580, 580,\n  /* 40392 */ 580, 580, 1469, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2627, 580, 580, 2630, 2631, 580, 1020,\n  /* 40412 */ 580, 580, 580, 1032, 1036, 580, 580, 580, 580, 0, 0, 0, 1048, 1049, 1050, 838, 534, 885, 889, 1055, 911,\n  /* 40433 */ 556, 958, 962, 1060, 0, 985, 580, 1032, 1036, 1065, 1101, 0, 0, 0, 0, 1105, 0, 0, 1108, 0, 0, 0, 0, 0, 0,\n  /* 40458 */ 0, 0, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 1, 12290, 1298, 534, 534, 1302, 534,\n  /* 40475 */ 534, 534, 534, 534, 534, 534, 534, 534, 534, 1312, 534, 534, 534, 534, 534, 1727, 534, 534, 534, 534, 534,\n  /* 40496 */ 534, 534, 534, 534, 534, 1796, 534, 1341, 0, 556, 556, 534, 1319, 534, 534, 534, 534, 534, 534, 534, 534,\n  /* 40517 */ 534, 534, 1332, 534, 534, 534, 534, 534, 534, 1304, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1266,\n  /* 40537 */ 1273, 534, 534, 534, 534, 534, 556, 1383, 556, 556, 556, 556, 556, 556, 556, 1390, 556, 556, 1394, 556,\n  /* 40557 */ 556, 556, 556, 556, 1385, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2595, 556, 556, 556, 556, 556,\n  /* 40578 */ 580, 580, 580, 1482, 580, 580, 1486, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1929, 580, 580, 580,\n  /* 40598 */ 580, 580, 580, 580, 1496, 580, 580, 1503, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1516, 1615, 0,\n  /* 40619 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1655, 0, 0, 0, 1647, 0, 1649, 0, 0, 0, 1651, 0, 741, 0, 0, 0, 0,\n  /* 40650 */ 0, 0, 330, 0, 0, 0, 0, 0, 0, 0, 330, 0, 0, 69632, 73728, 0, 418, 418, 0, 0, 65536, 418, 0, 0, 0, 534,\n  /* 40676 */ 1709, 534, 534, 534, 534, 534, 534, 1715, 534, 534, 534, 534, 0, 0, 556, 2812, 556, 556, 556, 556, 556,\n  /* 40697 */ 556, 556, 556, 3356, 556, 556, 556, 556, 556, 556, 556, 534, 534, 1787, 534, 534, 534, 534, 534, 534, 534,\n  /* 40718 */ 534, 534, 1341, 0, 556, 1803, 556, 556, 556, 556, 1839, 556, 556, 556, 1843, 556, 556, 1848, 556, 556,\n  /* 40738 */ 556, 556, 556, 556, 1892, 556, 26009, 0, 580, 580, 580, 580, 580, 580, 0, 1269, 1453, 1361, 534, 534, 534,\n  /* 40759 */ 534, 534, 556, 580, 580, 580, 1906, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1917, 580,\n  /* 40780 */ 580, 580, 1935, 580, 580, 580, 1939, 580, 580, 1944, 580, 580, 580, 580, 580, 580, 580, 580, 1945, 580,\n  /* 40800 */ 580, 580, 580, 580, 580, 580, 0, 0, 2010, 0, 1077, 0, 0, 0, 2012, 0, 1081, 0, 0, 0, 0, 0, 0, 0, 3144, 0,\n  /* 40826 */ 0, 0, 0, 0, 0, 3147, 0, 534, 534, 534, 2177, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534,\n  /* 40849 */ 1341, 1800, 556, 556, 556, 556, 2263, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556,\n  /* 40869 */ 1850, 556, 556, 580, 580, 2350, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2346,\n  /* 40889 */ 580, 580, 0, 2550, 0, 1800, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2569, 556, 2571,\n  /* 40910 */ 556, 556, 2613, 556, 556, 556, 0, 0, 0, 2616, 0, 1896, 580, 580, 580, 580, 580, 580, 3219, 580, 580, 580,\n  /* 40932 */ 580, 580, 580, 580, 580, 3225, 0, 0, 2761, 0, 0, 0, 534, 2765, 534, 534, 534, 534, 534, 534, 534, 534,\n  /* 40954 */ 534, 3166, 534, 534, 534, 534, 534, 3171, 534, 534, 2789, 534, 534, 534, 534, 534, 534, 534, 534, 534,\n  /* 40974 */ 534, 534, 534, 534, 1295, 534, 534, 556, 556, 2836, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556,\n  /* 40995 */ 556, 556, 1865, 556, 556, 534, 534, 2985, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534,\n  /* 41016 */ 1310, 534, 534, 534, 534, 534, 2998, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1341,\n  /* 41036 */ 1801, 556, 556, 556, 3025, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556,\n  /* 41056 */ 3205, 556, 556, 3038, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2247, 556, 556,\n  /* 41076 */ 580, 580, 3067, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2643, 580, 580, 580, 580,\n  /* 41097 */ 580, 3080, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2345, 580, 580, 580, 534, 534, 534,\n  /* 41118 */ 534, 534, 3267, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2159, 534, 534, 534, 534, 2163, 3285,\n  /* 41138 */ 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2289, 3336, 534, 534, 534, 534,\n  /* 41159 */ 3340, 534, 534, 534, 534, 534, 3346, 534, 534, 534, 556, 556, 556, 556, 580, 580, 580, 580, 580, 1066, 0,\n  /* 41180 */ 0, 0, 1545, 0, 0, 0, 0, 0, 1620, 0, 0, 1623, 0, 1625, 0, 0, 0, 0, 0, 0, 0, 2480, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 41210 */ 555, 578, 555, 578, 555, 555, 578, 555, 556, 556, 3351, 556, 556, 556, 556, 3355, 556, 556, 556, 556, 556,\n  /* 41231 */ 3361, 556, 556, 0, 580, 580, 981, 580, 580, 580, 580, 580, 580, 1010, 1012, 580, 580, 580, 580, 1029, 580,\n  /* 41252 */ 580, 580, 580, 580, 0, 0, 0, 534, 580, 556, 3377, 580, 580, 580, 580, 534, 556, 580, 0, 0, 0, 0, 0, 0, 0,\n  /* 41277 */ 0, 0, 3251, 0, 3132, 3253, 0, 0, 3256, 3132, 0, 0, 0, 0, 534, 534, 534, 534, 534, 3396, 534, 534, 534,\n  /* 41300 */ 3400, 534, 534, 534, 534, 534, 1742, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2536, 534, 534,\n  /* 41320 */ 534, 534, 534, 388, 0, 0, 0, 392, 388, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233472, 0, 0, 0, 0, 0, 0, 0, 404,\n  /* 41349 */ 0, 346, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 437, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 636, 0,\n  /* 41378 */ 0, 0, 0, 515, 515, 515, 515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 515, 515, 515, 515, 515, 515, 515, 515, 548, 571,\n  /* 41404 */ 548, 571, 548, 548, 571, 548, 595, 571, 571, 571, 571, 571, 571, 571, 595, 595, 595, 548, 595, 595, 595,\n  /* 41425 */ 595, 595, 595, 595, 571, 571, 610, 615, 595, 615, 621, 1, 12290, 0, 0, 744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 41451 */ 0, 0, 0, 0, 0, 1668, 534, 534, 876, 534, 534, 534, 534, 894, 534, 534, 534, 556, 556, 905, 556, 556, 0,\n  /* 41474 */ 580, 580, 982, 580, 580, 580, 580, 1001, 1005, 1011, 580, 1016, 580, 580, 1023, 580, 580, 580, 580, 1041,\n  /* 41494 */ 580, 580, 580, 0, 0, 0, 534, 580, 556, 556, 556, 556, 580, 580, 580, 580, 580, 1066, 0, 0, 1544, 0, 0, 0,\n  /* 41518 */ 0, 0, 0, 2764, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1268, 534, 534, 534, 534, 534, 534, 0, 0, 0,\n  /* 41541 */ 0, 1162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1173, 0, 0, 0, 1178, 0, 0, 0, 0, 1094, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 41571 */ 274432, 274432, 274432, 0, 274432, 274432, 274432, 274432, 1256, 534, 534, 534, 534, 534, 534, 534, 534,\n  /* 41588 */ 1269, 534, 534, 534, 534, 1279, 534, 534, 534, 534, 534, 1757, 534, 534, 534, 534, 534, 534, 534, 534,\n  /* 41608 */ 534, 534, 2197, 534, 534, 534, 534, 534, 534, 534, 534, 1341, 901, 556, 556, 556, 1347, 556, 556, 556,\n  /* 41628 */ 556, 556, 556, 556, 1877, 556, 556, 556, 556, 556, 556, 556, 556, 26009, 0, 580, 1899, 580, 580, 580, 580,\n  /* 41649 */ 556, 556, 1361, 556, 556, 556, 556, 1371, 556, 556, 556, 556, 556, 556, 556, 556, 3468, 556, 556, 3470,\n  /* 41669 */ 556, 580, 580, 580, 556, 556, 556, 556, 1422, 556, 556, 556, 556, 556, 556, 556, 26009, 1341, 975, 580,\n  /* 41689 */ 580, 580, 580, 1990, 1991, 1992, 534, 1994, 534, 534, 556, 1998, 556, 556, 580, 580, 580, 3367, 580, 580,\n  /* 41709 */ 580, 580, 3371, 580, 580, 580, 580, 580, 580, 3232, 580, 580, 580, 580, 580, 580, 534, 580, 556, 2384,\n  /* 41729 */ 534, 534, 534, 2388, 556, 556, 556, 580, 580, 1439, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1453,\n  /* 41749 */ 580, 580, 580, 580, 580, 2381, 2382, 2383, 534, 534, 534, 534, 556, 556, 556, 556, 3410, 556, 556, 556,\n  /* 41769 */ 556, 556, 556, 556, 580, 1463, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1477, 580,\n  /* 41790 */ 580, 1498, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1514, 580, 580, 580, 580, 2005, 0, 2007,\n  /* 41811 */ 0, 2009, 0, 2011, 0, 0, 0, 0, 0, 0, 0, 2034, 2035, 0, 2037, 2038, 0, 0, 0, 0, 0, 0, 0, 1555, 0, 0, 0,\n  /* 41838 */ 1561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 286720, 286720, 0, 286720, 286720, 1, 12290, 0, 0, 0, 1586, 0, 0, 0, 0,\n  /* 41863 */ 0, 0, 0, 0, 0, 0, 0, 0, 303, 0, 0, 0, 0, 1600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2434, 0, 556,\n  /* 41894 */ 1852, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3363, 0, 1556, 0, 0, 0,\n  /* 41916 */ 0, 0, 1562, 0, 0, 0, 0, 0, 0, 0, 0, 305, 204800, 204800, 0, 205105, 204800, 1, 12290, 0, 0, 0, 2070, 0, 0,\n  /* 41941 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 337, 0, 0, 0, 0, 0, 2111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1188, 0, 0,\n  /* 41974 */ 534, 2165, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2173, 534, 2250, 556,\n  /* 41994 */ 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2584, 2337, 580, 580, 580, 580, 580,\n  /* 42015 */ 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2375, 580, 2211, 0, 0, 0, 556, 556, 556, 556, 556, 556,\n  /* 42037 */ 556, 556, 556, 556, 556, 556, 2597, 556, 556, 556, 556, 556, 556, 2588, 556, 556, 556, 556, 556, 556, 556,\n  /* 42058 */ 556, 556, 556, 556, 556, 2831, 556, 556, 556, 534, 3107, 556, 3109, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 42083 */ 0, 2138112, 1170, 0, 0, 0, 0, 0, 3132, 3330, 0, 0, 3332, 0, 0, 0, 0, 0, 534, 3335, 534, 534, 534, 534,\n  /* 42107 */ 534, 1774, 534, 534, 534, 1778, 534, 534, 534, 534, 534, 534, 534, 1776, 534, 534, 534, 534, 534, 534,\n  /* 42127 */ 534, 534, 534, 2535, 534, 534, 534, 534, 534, 534, 534, 3337, 534, 534, 534, 534, 534, 534, 534, 534, 534,\n  /* 42148 */ 534, 534, 534, 534, 556, 556, 556, 556, 556, 556, 556, 556, 3350, 556, 556, 3352, 556, 556, 556, 556, 556,\n  /* 42169 */ 556, 556, 556, 556, 556, 556, 556, 2852, 556, 556, 556, 556, 556, 580, 3366, 580, 580, 3368, 580, 580,\n  /* 42189 */ 580, 580, 580, 580, 580, 580, 580, 1946, 580, 580, 580, 580, 580, 580, 3132, 0, 3388, 0, 3390, 534, 534,\n  /* 42210 */ 534, 534, 534, 534, 534, 534, 534, 534, 534, 556, 556, 902, 556, 556, 0, 0, 0, 783, 0, 783, 0, 0, 0, 0, 0,\n  /* 42235 */ 0, 0, 0, 783, 0, 0, 0, 0, 556, 556, 556, 556, 556, 556, 556, 556, 2557, 556, 556, 556, 556, 556, 556,\n  /* 42258 */ 2848, 556, 556, 556, 556, 556, 556, 556, 556, 556, 947, 556, 556, 556, 556, 556, 556, 556, 922, 556, 556,\n  /* 42279 */ 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1381, 556, 556, 972, 0, 580, 580, 580, 580,\n  /* 42300 */ 580, 580, 996, 580, 580, 580, 580, 580, 580, 1910, 580, 580, 580, 580, 1916, 580, 580, 580, 580, 78114,\n  /* 42320 */ 1066, 0, 0, 1070, 1074, 0, 0, 1078, 1082, 0, 0, 0, 0, 0, 0, 0, 1222, 0, 0, 0, 0, 1225, 0, 1181, 0, 534,\n  /* 42346 */ 3162, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2201, 534, 580, 580, 580,\n  /* 42366 */ 3218, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2629, 580, 580, 580, 347, 347, 349, 347,\n  /* 42387 */ 0, 0, 347, 347, 0, 0, 0, 0, 348, 0, 0, 0, 0, 0, 0, 2125, 0, 0, 2128, 0, 534, 534, 2131, 534, 534, 0, 0, 0,\n  /* 42415 */ 347, 347, 349, 347, 347, 347, 347, 347, 347, 506, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347,\n  /* 42436 */ 347, 347, 347, 347, 347, 549, 572, 549, 572, 549, 549, 572, 549, 596, 572, 572, 572, 572, 572, 572, 572,\n  /* 42457 */ 596, 596, 596, 549, 596, 596, 596, 596, 596, 596, 596, 572, 572, 549, 572, 596, 572, 596, 1, 12290, 0, 0,\n  /* 42479 */ 0, 715, 0, 717, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1147348, 0, 0, 0, 0, 0, 0, 0, 732, 0, 0, 0, 0, 0, 0, 0,\n  /* 42510 */ 0, 0, 0, 0, 0, 353, 354, 355, 356, 758, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 673, 674, 0, 0, 0, 0, 0,\n  /* 42541 */ 0, 0, 794, 795, 0, 0, 0, 0, 795, 0, 0, 0, 0, 0, 795, 0, 0, 794, 809, 0, 803, 0, 657, 0, 0, 0, 0, 0, 0, 0,\n  /* 42571 */ 0, 0, 0, 0, 0, 3117056, 0, 0, 0, 0, 820, 0, 0, 0, 0, 0, 0, 795, 0, 0, 0, 0, 0, 0, 0, 0, 1159168, 364, 0,\n  /* 42600 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 795, 534, 534, 839, 534, 534, 534, 534, 857, 534, 534, 534, 534, 534, 534,\n  /* 42624 */ 1728, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3272, 534, 534, 534, 3273, 3274, 534, 534, 877,\n  /* 42644 */ 879, 534, 534, 890, 534, 534, 534, 534, 556, 556, 906, 912, 556, 556, 556, 556, 580, 580, 580, 580, 580,\n  /* 42665 */ 1066, 0, 1543, 0, 0, 0, 1549, 556, 556, 556, 930, 556, 556, 556, 556, 556, 950, 952, 556, 556, 963, 556,\n  /* 42687 */ 556, 556, 556, 556, 1840, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1831, 556, 556, 556, 556,\n  /* 42707 */ 1835, 580, 1024, 1026, 580, 580, 1037, 580, 580, 580, 580, 0, 0, 0, 534, 580, 556, 556, 556, 556, 580,\n  /* 42728 */ 580, 580, 580, 580, 1066, 1540, 0, 0, 0, 1546, 0, 0, 0, 0, 0, 131072, 0, 131072, 131072, 131072, 131072,\n  /* 42749 */ 0, 131072, 131072, 131072, 131072, 131072, 131072, 0, 0, 0, 0, 0, 131072, 0, 131072, 1, 12290, 839, 879,\n  /* 42768 */ 534, 890, 534, 912, 952, 556, 963, 556, 0, 986, 1026, 580, 1037, 580, 580, 580, 580, 2005, 0, 2007, 0,\n  /* 42789 */ 2009, 0, 2011, 0, 0, 2397, 0, 0, 0, 0, 0, 330, 331, 332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2083, 0, 0, 0, 0, 0,\n  /* 42818 */ 0, 0, 0, 0, 0, 0, 0, 2731, 0, 0, 0, 0, 0, 0, 1132, 364, 364, 0, 0, 1135, 0, 0, 0, 1138, 0, 1140, 0, 0, 0,\n  /* 42847 */ 0, 556, 556, 556, 556, 556, 556, 556, 2556, 556, 556, 556, 556, 556, 556, 2577, 556, 556, 556, 556, 556,\n  /* 42868 */ 556, 556, 556, 556, 26009, 1897, 580, 580, 580, 580, 580, 580, 1142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 42893 */ 0, 1156, 0, 0, 0, 0, 556, 556, 556, 556, 556, 556, 2555, 556, 556, 556, 556, 2559, 1158, 0, 0, 0, 0, 1163,\n  /* 42917 */ 0, 0, 0, 0, 1168, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 0, 1247, 0, 0, 0,\n  /* 42946 */ 0, 0, 0, 0, 1168, 534, 534, 534, 534, 534, 534, 1743, 534, 534, 534, 534, 534, 534, 534, 534, 534, 897,\n  /* 42968 */ 534, 556, 556, 556, 556, 914, 534, 534, 534, 1286, 1288, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534,\n  /* 42989 */ 534, 556, 556, 907, 556, 556, 534, 534, 534, 1341, 901, 556, 556, 556, 556, 1348, 556, 556, 556, 556, 556,\n  /* 43010 */ 556, 0, 2298, 580, 580, 580, 580, 580, 580, 580, 580, 2640, 580, 580, 580, 580, 580, 580, 2645, 580, 580,\n  /* 43031 */ 580, 1440, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2670, 2671, 580, 580, 1494, 580,\n  /* 43051 */ 580, 580, 580, 580, 580, 580, 1508, 580, 580, 580, 580, 580, 580, 580, 2678, 580, 580, 580, 580, 534, 580,\n  /* 43072 */ 556, 534, 534, 534, 1996, 556, 556, 556, 2000, 580, 580, 1519, 1520, 580, 580, 580, 0, 534, 580, 556, 534,\n  /* 43093 */ 1528, 534, 534, 1531, 556, 556, 556, 556, 580, 580, 580, 580, 580, 1066, 1541, 0, 0, 0, 1547, 0, 0, 0, 0,\n  /* 43116 */ 556, 556, 556, 2553, 556, 2554, 556, 556, 556, 556, 556, 556, 0, 0, 580, 580, 580, 580, 2863, 580, 580,\n  /* 43137 */ 580, 1532, 556, 556, 1535, 580, 1536, 580, 580, 1539, 1066, 0, 0, 0, 0, 0, 0, 0, 1577, 0, 0, 0, 0, 0, 0,\n  /* 43162 */ 0, 0, 0, 770, 0, 0, 0, 0, 0, 0, 0, 0, 1617, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1203, 0, 0, 0, 0, 1633,\n  /* 43194 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1217, 0, 0, 0, 0, 0, 0, 1658, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364,\n  /* 43227 */ 364, 364, 0, 0, 0, 0, 1698, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1226, 0, 0, 534, 1738, 534, 534, 534,\n  /* 43255 */ 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2207, 2549, 534, 534, 534, 1788, 534, 534, 534,\n  /* 43275 */ 534, 1794, 534, 534, 534, 1341, 0, 556, 556, 556, 556, 556, 1891, 556, 556, 26009, 1896, 580, 580, 580,\n  /* 43295 */ 580, 580, 580, 1470, 1472, 580, 580, 580, 580, 580, 580, 580, 580, 1960, 580, 580, 1963, 580, 580, 580,\n  /* 43315 */ 580, 556, 556, 1870, 556, 556, 556, 1875, 556, 556, 556, 556, 556, 556, 556, 556, 1884, 556, 556, 556,\n  /* 43335 */ 556, 1890, 556, 556, 556, 26009, 0, 580, 580, 580, 580, 580, 580, 1927, 580, 580, 580, 580, 1931, 580,\n  /* 43355 */ 580, 580, 580, 580, 1904, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2672, 580,\n  /* 43376 */ 580, 580, 1971, 580, 580, 580, 580, 580, 580, 580, 580, 1980, 580, 580, 580, 580, 580, 1504, 580, 580,\n  /* 43396 */ 580, 580, 580, 580, 580, 580, 580, 580, 2316, 580, 580, 2320, 580, 580, 1986, 580, 580, 580, 534, 580,\n  /* 43416 */ 556, 534, 534, 534, 534, 556, 556, 556, 556, 580, 580, 580, 580, 0, 0, 0, 2693, 0, 0, 0, 0, 0, 2099, 0,\n  /* 43440 */ 2101, 2102, 2103, 0, 2105, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 0, 0, 0, 424, 65536, 0, 0, 0, 0, 2123, 0,\n  /* 43466 */ 0, 0, 0, 0, 0, 0, 2129, 534, 534, 534, 534, 0, 2211, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556,\n  /* 43489 */ 3045, 556, 556, 556, 556, 556, 534, 534, 2136, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534,\n  /* 43510 */ 534, 1333, 534, 534, 534, 534, 534, 2166, 534, 2168, 534, 2171, 534, 534, 534, 534, 534, 534, 534, 534,\n  /* 43530 */ 534, 3271, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2178, 534, 534, 534, 534, 534, 2184, 534,\n  /* 43550 */ 534, 534, 534, 534, 534, 534, 2792, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2519, 534, 534, 534, 534,\n  /* 43571 */ 534, 534, 534, 534, 534, 534, 2206, 0, 0, 0, 0, 2213, 556, 556, 556, 556, 556, 556, 939, 556, 944, 556,\n  /* 43593 */ 951, 556, 954, 556, 556, 968, 556, 2221, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556,\n  /* 43614 */ 556, 1415, 556, 556, 556, 2251, 556, 2253, 556, 2256, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2607,\n  /* 43634 */ 556, 556, 556, 2610, 556, 556, 556, 556, 556, 2264, 556, 556, 556, 556, 556, 2270, 556, 556, 556, 556,\n  /* 43654 */ 556, 556, 1369, 556, 556, 556, 1374, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2293, 0, 0, 0, 0, 2300,\n  /* 43676 */ 580, 580, 580, 580, 580, 580, 1942, 580, 580, 580, 1947, 580, 580, 580, 580, 580, 580, 2308, 580, 580,\n  /* 43696 */ 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2880, 580, 580, 580, 2338, 580, 2340, 580,\n  /* 43716 */ 2343, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1961, 580, 580, 580, 580, 580, 580, 580, 580, 580,\n  /* 43736 */ 2351, 580, 580, 580, 580, 580, 2357, 580, 580, 580, 580, 580, 580, 1958, 1959, 580, 580, 580, 580, 580,\n  /* 43756 */ 580, 580, 580, 580, 3234, 580, 580, 580, 534, 580, 556, 0, 0, 2400, 2401, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 43782 */ 0, 399, 0, 0, 0, 2436, 0, 0, 2439, 0, 0, 0, 0, 2443, 0, 0, 0, 0, 0, 0, 0, 0, 2818048, 2846720, 0, 2916352,\n  /* 43808 */ 0, 0, 3002368, 0, 0, 0, 2451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2459, 0, 0, 0, 0, 556, 556, 2552, 556, 556,\n  /* 43836 */ 556, 556, 556, 556, 556, 556, 556, 2851, 556, 556, 556, 556, 556, 556, 0, 0, 0, 2477, 0, 0, 0, 0, 0, 0, 0,\n  /* 43861 */ 0, 0, 2485, 0, 0, 0, 0, 0, 1195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111044, 0, 0, 0, 0, 534, 534, 534, 534,\n  /* 43890 */ 534, 2503, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2520, 534, 534, 534, 534, 534, 556, 556, 556,\n  /* 43911 */ 556, 2562, 556, 556, 556, 556, 556, 2567, 556, 556, 556, 556, 556, 0, 0, 0, 0, 580, 580, 580, 580, 2304,\n  /* 43933 */ 580, 580, 580, 2633, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2901, 580, 534,\n  /* 43954 */ 534, 534, 2686, 556, 556, 556, 2688, 580, 580, 580, 2690, 2691, 0, 0, 0, 0, 0, 0, 2453, 0, 0, 0, 0, 0, 0,\n  /* 43979 */ 0, 0, 0, 0, 1185, 0, 0, 0, 0, 0, 0, 0, 0, 2709, 0, 2710, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1159168, 0, 0,\n  /* 44009 */ 0, 0, 2855, 556, 556, 556, 556, 556, 0, 0, 580, 580, 580, 580, 580, 2864, 580, 2865, 580, 580, 2904, 580,\n  /* 44031 */ 580, 580, 580, 580, 534, 580, 556, 534, 534, 556, 556, 580, 580, 0, 0, 0, 3113, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 44056 */ 254407, 254407, 254407, 254407, 254407, 254407, 254407, 254407, 1, 12290, 556, 556, 556, 3053, 556, 556,\n  /* 44072 */ 556, 556, 556, 556, 556, 580, 3061, 580, 580, 580, 580, 580, 2649, 580, 580, 580, 580, 580, 580, 580, 580,\n  /* 44093 */ 580, 580, 2371, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3095, 580, 580, 580, 580, 580, 580, 580, 534,\n  /* 44114 */ 580, 556, 534, 534, 2386, 2387, 556, 556, 2390, 2391, 534, 534, 3338, 534, 534, 534, 534, 534, 534, 534,\n  /* 44134 */ 534, 534, 3347, 534, 534, 3349, 556, 556, 556, 556, 3353, 556, 556, 556, 556, 556, 556, 556, 556, 556,\n  /* 44154 */ 3362, 556, 556, 556, 556, 580, 580, 580, 580, 580, 3427, 580, 580, 580, 3431, 580, 580, 580, 580, 1031,\n  /* 44174 */ 580, 580, 580, 580, 580, 0, 0, 0, 534, 580, 556, 556, 556, 3365, 580, 580, 580, 580, 3369, 580, 580, 580,\n  /* 44196 */ 580, 580, 580, 580, 580, 2356, 580, 580, 580, 580, 580, 580, 580, 580, 3378, 580, 580, 580, 534, 556, 580,\n  /* 44217 */ 0, 0, 0, 0, 0, 0, 0, 0, 402, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 3449, 534, 534, 534, 534, 534, 534, 534,\n  /* 44244 */ 534, 534, 556, 556, 556, 3179, 556, 556, 556, 556, 556, 3462, 556, 556, 556, 556, 556, 556, 556, 556, 556,\n  /* 44265 */ 556, 580, 580, 580, 3300, 580, 580, 580, 3303, 580, 580, 580, 580, 580, 3476, 580, 580, 580, 580, 580,\n  /* 44285 */ 580, 580, 580, 580, 580, 0, 0, 0, 534, 580, 556, 0, 0, 3491, 0, 534, 534, 534, 534, 534, 534, 534, 534,\n  /* 44308 */ 534, 534, 534, 534, 3158, 534, 534, 534, 534, 534, 3565, 534, 556, 556, 556, 556, 556, 3571, 556, 556,\n  /* 44328 */ 580, 580, 580, 580, 580, 580, 580, 580, 580, 3372, 580, 580, 580, 580, 580, 580, 3577, 580, 580, 3579, 0,\n  /* 44349 */ 3581, 534, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 2224, 556, 556, 2227, 556, 556, 556, 556,\n  /* 44369 */ 556, 556, 2235, 400, 0, 0, 0, 0, 0, 367, 375, 403, 0, 0, 0, 0, 0, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 44399 */ 0, 0, 0, 2054, 408, 410, 0, 0, 367, 375, 0, 69632, 73728, 0, 0, 0, 0, 426, 65536, 0, 0, 0, 0, 556, 2551,\n  /* 44424 */ 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2271, 556, 556, 556, 556, 556, 426, 426, 0, 426, 0, 410,\n  /* 44446 */ 426, 449, 0, 0, 0, 0, 0, 0, 0, 0, 534, 556, 534, 556, 534, 534, 556, 534, 367, 0, 0, 395, 0, 0, 0, 0, 0,\n  /* 44473 */ 350, 0, 0, 367, 0, 0, 395, 0, 408, 0, 490, 490, 0, 490, 490, 490, 490, 490, 490, 490, 490, 516, 516, 516,\n  /* 44497 */ 516, 449, 449, 449, 449, 524, 449, 449, 525, 449, 516, 530, 516, 516, 516, 530, 516, 516, 516, 516, 532,\n  /* 44518 */ 550, 573, 550, 573, 550, 550, 573, 550, 597, 573, 573, 573, 573, 573, 573, 573, 597, 597, 597, 550, 597,\n  /* 44539 */ 597, 597, 597, 597, 597, 597, 573, 573, 611, 616, 597, 616, 622, 1, 12290, 0, 0, 636, 0, 0, 0, 0, 0, 0, 0,\n  /* 44564 */ 0, 0, 0, 0, 0, 0, 1567, 1568, 0, 789, 0, 0, 0, 0, 534, 834, 534, 534, 534, 534, 534, 534, 863, 865, 534,\n  /* 44589 */ 534, 534, 534, 534, 1790, 1792, 534, 534, 534, 534, 534, 1341, 0, 556, 556, 0, 580, 580, 580, 983, 987,\n  /* 44610 */ 580, 580, 580, 580, 580, 580, 1013, 580, 556, 556, 556, 556, 936, 938, 556, 556, 556, 556, 556, 556, 556,\n  /* 44631 */ 556, 556, 556, 2829, 556, 556, 2832, 556, 556, 78114, 1066, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1083, 0, 0,\n  /* 44656 */ 0, 0, 0, 1234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2050, 0, 0, 0, 0, 1085, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 44688 */ 0, 1098, 0, 0, 0, 0, 0, 1235, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122880, 0, 0, 0, 0, 0, 0, 1116, 0, 0, 0, 0,\n  /* 44719 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1581, 1582, 0, 0, 0, 0, 1085, 1208, 0, 0, 0, 0, 0, 0, 1215, 0, 0, 0, 0, 0, 0,\n  /* 44749 */ 347, 348, 349, 0, 0, 0, 0, 0, 0, 0, 0, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624,\n  /* 44768 */ 282624, 0, 0, 0, 1220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1220, 1229, 534, 534, 534, 1259, 534, 534, 534, 1263,\n  /* 44793 */ 534, 534, 1274, 534, 534, 1278, 534, 534, 534, 534, 534, 534, 3001, 534, 534, 534, 534, 534, 534, 534,\n  /* 44813 */ 534, 534, 1327, 534, 534, 534, 534, 534, 534, 534, 1299, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534,\n  /* 44834 */ 534, 534, 534, 534, 2497, 534, 534, 534, 534, 1341, 901, 556, 556, 556, 556, 556, 556, 556, 1351, 556,\n  /* 44854 */ 556, 556, 556, 556, 1423, 556, 556, 556, 1430, 556, 556, 26009, 1341, 975, 580, 1355, 556, 556, 1366, 556,\n  /* 44874 */ 556, 1370, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2828, 556, 556, 556, 556, 556, 556, 1462, 580,\n  /* 44894 */ 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3315, 580, 1479, 580, 580, 580,\n  /* 44914 */ 1483, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2877, 580, 580, 580, 580, 0, 1571, 1572, 0,\n  /* 44935 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1612, 0, 0, 0, 0, 0, 0, 1603, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364,\n  /* 44967 */ 364, 364, 0, 696, 0, 1616, 0, 1618, 0, 0, 0, 1622, 0, 0, 0, 1626, 0, 0, 0, 1630, 0, 0, 0, 0, 1572, 0, 0,\n  /* 44994 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 364, 364, 695, 0, 534, 534, 534, 1724, 534, 534, 534, 534, 534, 534, 534,\n  /* 45019 */ 534, 534, 534, 534, 534, 1782, 1783, 534, 534, 556, 1837, 556, 556, 556, 556, 556, 556, 556, 556, 556,\n  /* 45039 */ 556, 556, 556, 556, 556, 1818, 556, 556, 556, 556, 1889, 556, 556, 556, 556, 26009, 0, 580, 580, 580, 580,\n  /* 45060 */ 580, 580, 1976, 580, 580, 580, 580, 580, 1981, 580, 580, 580, 0, 0, 0, 2031, 0, 2032, 0, 0, 0, 0, 0, 0, 0,\n  /* 45085 */ 0, 0, 0, 0, 2200246, 151552, 2200246, 0, 0, 2175, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534,\n  /* 45106 */ 2186, 534, 534, 534, 534, 534, 534, 1758, 534, 534, 534, 534, 1764, 534, 534, 534, 534, 0, 0, 556, 556,\n  /* 45127 */ 556, 556, 2814, 556, 556, 556, 556, 556, 0, 0, 0, 0, 580, 2301, 580, 580, 580, 580, 580, 1038, 580, 580,\n  /* 45149 */ 580, 580, 0, 0, 0, 534, 580, 556, 580, 580, 2394, 2395, 0, 1544, 0, 1550, 0, 1556, 0, 1562, 0, 0, 0, 0, 0,\n  /* 45174 */ 0, 374, 0, 0, 0, 0, 0, 0, 0, 359, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2052, 0, 0, 2476, 0, 0, 0, 0, 0,\n  /* 45206 */ 0, 0, 0, 0, 2482, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 0, 0, 345, 344, 65536, 343, 534, 534, 534, 534,\n  /* 45231 */ 2530, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1275, 534, 534, 534, 534, 580, 2661, 580,\n  /* 45251 */ 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3075, 580, 580, 0, 0, 2722, 0, 0, 0, 0,\n  /* 45274 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1665, 0, 0, 534, 2797, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534,\n  /* 45299 */ 534, 534, 534, 2511, 534, 556, 556, 2845, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556,\n  /* 45320 */ 2259, 556, 556, 0, 0, 2970, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534, 534, 534, 855, 534, 534, 534, 534,\n  /* 45345 */ 0, 0, 0, 0, 3122, 3123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2424832, 2433024, 0, 0, 2457600, 3149, 534, 534,\n  /* 45370 */ 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1737, 3172, 534, 534, 534, 534, 534, 534,\n  /* 45391 */ 534, 534, 556, 556, 556, 556, 556, 556, 556, 2242, 556, 556, 556, 556, 556, 556, 556, 556, 1406, 556, 556,\n  /* 45412 */ 556, 556, 556, 556, 556, 580, 580, 580, 3229, 580, 580, 580, 580, 580, 580, 580, 580, 580, 534, 580, 556,\n  /* 45433 */ 556, 556, 556, 580, 580, 580, 580, 3426, 580, 580, 580, 580, 580, 580, 580, 2639, 580, 580, 580, 580, 580,\n  /* 45454 */ 580, 580, 580, 580, 2344, 580, 580, 580, 580, 580, 580, 534, 3236, 556, 3238, 580, 3240, 3241, 0, 0, 0, 0,\n  /* 45476 */ 3245, 0, 0, 0, 0, 0, 0, 640, 0, 0, 0, 0, 0, 0, 0, 0, 0, 323, 397, 0, 0, 0, 323, 0, 0, 0, 3258, 0, 0, 0, 0,\n  /* 45507 */ 0, 0, 0, 0, 3261, 0, 534, 534, 534, 534, 534, 534, 534, 3154, 3155, 534, 534, 534, 534, 3159, 3160, 3263,\n  /* 45529 */ 534, 534, 534, 3266, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1330, 534, 534, 534, 534, 580,\n  /* 45550 */ 580, 3318, 534, 3319, 556, 3320, 580, 0, 0, 0, 0, 0, 0, 0, 0, 543, 566, 543, 566, 543, 543, 566, 543, 556,\n  /* 45574 */ 556, 3543, 556, 3544, 556, 556, 556, 556, 556, 556, 556, 556, 580, 580, 3551, 580, 3552, 580, 580, 580,\n  /* 45594 */ 580, 580, 580, 580, 580, 0, 0, 0, 0, 534, 534, 3536, 534, 3537, 534, 534, 534, 534, 534, 534, 534, 1730,\n  /* 45616 */ 534, 534, 534, 534, 534, 534, 534, 534, 534, 2183, 534, 534, 534, 534, 534, 534, 409, 355, 0, 0, 0, 0, 0,\n  /* 45639 */ 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 638, 0, 0, 641, 642, 0, 0, 0, 0, 0, 0, 0, 0, 1591, 0, 0,\n  /* 45667 */ 1594, 0, 0, 0, 0, 466, 477, 466, 0, 0, 466, 0, 0, 0, 0, 0, 0, 0, 0, 517, 517, 521, 521, 521, 521, 466,\n  /* 45693 */ 466, 466, 466, 466, 466, 466, 471, 466, 521, 517, 521, 521, 517, 521, 521, 521, 521, 533, 551, 574, 551,\n  /* 45714 */ 574, 551, 551, 574, 551, 598, 574, 574, 574, 574, 574, 574, 574, 598, 598, 598, 551, 598, 598, 598, 598,\n  /* 45735 */ 598, 598, 598, 574, 574, 612, 617, 598, 617, 623, 1, 12290, 0, 0, 731, 0, 0, 0, 637, 731, 0, 737, 738,\n  /* 45758 */ 637, 0, 0, 0, 0, 0, 0, 656, 0, 0, 659, 660, 0, 0, 0, 0, 0, 0, 0, 2754, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2420, 0,\n  /* 45789 */ 0, 0, 0, 0, 0, 777, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 786, 0, 791, 0, 0, 0, 0, 0, 1575, 0, 0, 0, 0, 0, 0, 0,\n  /* 45821 */ 0, 0, 0, 303, 303, 0, 0, 0, 0, 0, 0, 0, 0, 791, 0, 0, 0, 0, 0, 0, 791, 0, 0, 0, 0, 0, 0, 672, 0, 0, 0, 0,\n  /* 45853 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2016, 0, 0, 0, 0, 806, 0, 0, 0, 0, 0, 637, 0, 0, 0, 0, 0, 0, 0, 69632,\n  /* 45884 */ 73728, 0, 0, 0, 349, 347, 65536, 0, 0, 0, 0, 777, 0, 0, 0, 0, 0, 0, 0, 777, 777, 0, 637, 0, 0, 0, 786, 0,\n  /* 45912 */ 791, 0, 777, 0, 806, 0, 0, 0, 658, 0, 777, 791, 829, 0, 534, 835, 534, 534, 534, 534, 854, 858, 864, 534,\n  /* 45936 */ 869, 556, 556, 927, 931, 937, 556, 942, 556, 556, 556, 556, 556, 959, 556, 556, 556, 556, 556, 1424, 556,\n  /* 45957 */ 556, 556, 556, 556, 556, 26009, 1341, 975, 580, 534, 534, 886, 534, 534, 556, 556, 959, 556, 556, 0, 580,\n  /* 45978 */ 580, 1033, 580, 580, 580, 580, 1033, 580, 580, 580, 580, 580, 0, 0, 0, 534, 580, 556, 0, 1086, 0, 0, 0, 0,\n  /* 46002 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2449, 0, 0, 0, 0, 1103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1113, 0, 0, 0,\n  /* 46033 */ 1117, 1118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 364, 208896, 0, 0, 0, 0, 0, 0, 1179, 0, 1182, 0, 0, 0,\n  /* 46061 */ 0, 0, 1187, 0, 0, 0, 0, 0, 0, 2726, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 784, 0, 0, 0, 0, 0, 0, 0, 0, 1205, 0, 0,\n  /* 46093 */ 1086, 0, 0, 0, 1211, 0, 1213, 0, 0, 0, 0, 0, 0, 0, 1638, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1123, 0, 0, 0, 0, 0,\n  /* 46123 */ 0, 0, 0, 0, 1221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1227, 0, 0, 0, 0, 654, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 46156 */ 2964, 2965, 0, 0, 1230, 1187, 0, 1211, 1233, 0, 1236, 0, 0, 0, 0, 0, 1117, 0, 0, 0, 0, 0, 0, 2739, 0, 0,\n  /* 46182 */ 0, 0, 2744, 0, 0, 0, 0, 0, 0, 299, 0, 0, 0, 303, 2424832, 2433024, 0, 0, 2457600, 0, 1245, 0, 0, 0, 0, 0,\n  /* 46208 */ 1245, 0, 0, 1136, 1245, 0, 1252, 534, 534, 534, 534, 534, 534, 3279, 534, 556, 556, 556, 556, 556, 556,\n  /* 46229 */ 556, 556, 556, 556, 3514, 556, 556, 556, 580, 534, 534, 1258, 534, 534, 534, 534, 1264, 534, 534, 534,\n  /* 46249 */ 534, 534, 534, 534, 534, 534, 3455, 534, 534, 3457, 556, 556, 556, 534, 534, 1285, 534, 534, 534, 534,\n  /* 46269 */ 534, 534, 534, 534, 534, 534, 1296, 534, 534, 534, 534, 534, 534, 3341, 534, 534, 534, 534, 534, 534, 534,\n  /* 46290 */ 534, 556, 580, 3607, 3608, 3609, 534, 556, 580, 534, 556, 580, 0, 0, 0, 0, 0, 0, 333, 0, 0, 333, 0, 0,\n  /* 46314 */ 333, 0, 0, 0, 534, 534, 1301, 534, 534, 534, 534, 534, 534, 534, 534, 1308, 534, 534, 534, 1315, 1317,\n  /* 46335 */ 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2149, 534, 1339, 534, 1341,\n  /* 46355 */ 901, 1343, 556, 556, 556, 556, 556, 1350, 556, 556, 556, 556, 556, 556, 2225, 556, 556, 556, 556, 556,\n  /* 46375 */ 556, 556, 556, 556, 2244, 556, 556, 556, 556, 2248, 556, 1356, 556, 556, 556, 556, 556, 556, 556, 556,\n  /* 46395 */ 556, 556, 1377, 556, 556, 556, 556, 556, 556, 2241, 556, 2243, 556, 556, 556, 556, 556, 556, 556, 1425,\n  /* 46415 */ 556, 556, 556, 556, 556, 26009, 1341, 975, 580, 556, 556, 556, 556, 1400, 556, 556, 556, 1407, 1409, 556,\n  /* 46435 */ 556, 556, 556, 556, 556, 1386, 556, 556, 556, 556, 556, 556, 556, 1395, 556, 1480, 580, 580, 580, 580,\n  /* 46455 */ 1485, 580, 580, 580, 580, 580, 580, 580, 580, 1492, 580, 580, 580, 580, 2352, 580, 580, 580, 580, 580,\n  /* 46475 */ 580, 580, 580, 580, 580, 580, 2628, 580, 580, 580, 580, 580, 580, 1499, 1501, 580, 580, 580, 580, 580,\n  /* 46495 */ 580, 580, 580, 580, 580, 580, 580, 2878, 580, 580, 2881, 1550, 0, 0, 0, 1556, 0, 0, 0, 1562, 0, 0, 0, 0,\n  /* 46519 */ 0, 0, 0, 0, 2957312, 0, 0, 0, 0, 0, 0, 0, 0, 1150, 0, 0, 0, 0, 0, 0, 0, 0, 1166, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 46550 */ 1179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2094, 0, 0, 0, 1573, 1574, 0, 0, 0, 0, 0, 1580, 0, 0, 0, 0, 0,\n  /* 46580 */ 0, 0, 69632, 73728, 0, 0, 0, 373, 0, 65536, 0, 0, 0, 1601, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1677, 0,\n  /* 46609 */ 0, 0, 0, 0, 0, 1619, 0, 0, 0, 0, 0, 0, 0, 1627, 1628, 0, 0, 0, 0, 0, 1604, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 46640 */ 0, 254407, 0, 0, 0, 0, 0, 0, 0, 0, 1635, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 382, 0, 0, 0, 386, 0, 0, 0,\n  /* 46670 */ 1685, 0, 0, 0, 0, 0, 1689, 0, 0, 1692, 0, 0, 0, 0, 0, 0, 3143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2756, 0, 0,\n  /* 46700 */ 2759, 0, 0, 0, 0, 0, 0, 1689, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1705, 0, 1707, 1681, 534, 534, 534, 534, 534,\n  /* 46727 */ 534, 534, 534, 534, 534, 534, 1719, 534, 534, 534, 534, 534, 1791, 534, 534, 534, 534, 534, 534, 1341, 0,\n  /* 46748 */ 556, 556, 556, 556, 556, 2295, 0, 0, 0, 580, 580, 580, 580, 580, 580, 580, 2666, 580, 580, 580, 580, 580,\n  /* 46770 */ 580, 580, 580, 580, 1446, 580, 580, 580, 580, 580, 580, 534, 534, 534, 1725, 534, 534, 534, 534, 534, 534,\n  /* 46791 */ 534, 534, 534, 534, 1736, 534, 534, 534, 534, 534, 2179, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534,\n  /* 46812 */ 2143, 534, 2145, 534, 534, 534, 534, 534, 534, 1740, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534,\n  /* 46832 */ 1751, 534, 534, 534, 534, 534, 2207, 0, 0, 0, 556, 556, 556, 556, 556, 556, 556, 1403, 556, 556, 556, 556,\n  /* 46854 */ 556, 556, 556, 556, 1408, 556, 556, 556, 556, 556, 556, 556, 534, 534, 1756, 534, 534, 534, 534, 534, 534,\n  /* 46875 */ 534, 534, 534, 534, 534, 534, 534, 2172, 534, 534, 2002, 580, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 46901 */ 0, 0, 696, 0, 0, 2019, 2020, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, 0, 0, 2055, 2056, 0, 0, 2058,\n  /* 46929 */ 2059, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2617344, 0, 0, 0, 0, 2081, 0, 0, 0, 0, 2084, 2085, 0, 0, 0, 0, 0,\n  /* 46958 */ 2091, 0, 0, 0, 0, 0, 0, 3259, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534, 534, 849, 534, 534, 534, 534, 534,\n  /* 46983 */ 534, 534, 2152, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2161, 534, 534, 534, 534, 534, 534,\n  /* 47003 */ 3452, 534, 3454, 534, 534, 3456, 534, 556, 556, 556, 556, 3509, 556, 556, 556, 556, 556, 556, 556, 556,\n  /* 47023 */ 556, 580, 580, 580, 580, 580, 580, 0, 0, 0, 3595, 534, 534, 2164, 534, 534, 534, 534, 534, 534, 534, 534,\n  /* 47045 */ 534, 534, 534, 534, 534, 534, 534, 2174, 534, 534, 534, 2191, 534, 534, 534, 2194, 534, 534, 534, 534,\n  /* 47065 */ 2199, 534, 534, 534, 534, 534, 534, 1759, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1732, 534, 534,\n  /* 47085 */ 534, 534, 534, 534, 556, 2237, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2246, 556, 556, 2249,\n  /* 47105 */ 556, 556, 2277, 556, 556, 556, 556, 2281, 556, 556, 556, 556, 2286, 556, 556, 556, 556, 556, 1808, 556,\n  /* 47125 */ 556, 556, 556, 556, 556, 556, 556, 556, 556, 2608, 556, 556, 556, 556, 556, 580, 2324, 580, 580, 580, 580,\n  /* 47146 */ 580, 580, 580, 580, 580, 580, 2333, 580, 580, 2336, 580, 580, 2364, 580, 580, 580, 580, 2368, 580, 580,\n  /* 47166 */ 580, 580, 2373, 580, 580, 580, 580, 580, 2665, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1979,\n  /* 47186 */ 580, 580, 580, 580, 580, 2398, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2408, 0, 0, 0, 0, 0, 0, 687, 0, 0, 0, 770, 0,\n  /* 47215 */ 0, 0, 0, 789, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 176128, 176128, 176128, 176128, 176128, 176128, 176128,\n  /* 47236 */ 176128, 534, 534, 2488, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2496, 534, 534, 534, 534, 534,\n  /* 47256 */ 882, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 3411, 556, 556, 556, 3415, 556, 556, 534, 534,\n  /* 47276 */ 2514, 534, 534, 2516, 534, 2517, 534, 534, 534, 534, 534, 534, 534, 2524, 534, 534, 2528, 534, 534, 534,\n  /* 47296 */ 534, 534, 534, 534, 534, 534, 534, 534, 534, 2539, 556, 556, 2560, 556, 556, 556, 556, 556, 556, 556, 556,\n  /* 47317 */ 556, 556, 556, 556, 556, 3472, 580, 580, 556, 556, 556, 2575, 556, 556, 556, 2578, 556, 556, 2580, 556,\n  /* 47337 */ 2581, 556, 556, 556, 556, 556, 1827, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1814, 556, 556,\n  /* 47357 */ 556, 556, 1820, 580, 2646, 580, 2647, 580, 580, 580, 580, 580, 580, 580, 580, 2655, 580, 580, 2659, 0,\n  /* 47377 */ 2696, 2697, 0, 0, 2700, 2701, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3178496, 2670592, 0, 2744320, 0, 0, 2772, 534,\n  /* 47401 */ 2775, 534, 534, 534, 534, 2780, 534, 534, 534, 2783, 534, 534, 534, 534, 534, 534, 534, 3002, 3003, 534,\n  /* 47421 */ 534, 534, 534, 534, 534, 534, 534, 2494, 534, 534, 534, 534, 534, 534, 534, 534, 1744, 534, 534, 534,\n  /* 47441 */ 1748, 534, 534, 1753, 2808, 534, 534, 534, 0, 0, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3358,\n  /* 47462 */ 556, 556, 556, 556, 556, 2819, 556, 2822, 556, 556, 556, 556, 2827, 556, 556, 556, 2830, 556, 556, 556,\n  /* 47482 */ 556, 556, 556, 2255, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2228, 556, 2230, 556, 556, 556, 556,\n  /* 47502 */ 556, 556, 2857, 556, 556, 556, 0, 0, 580, 580, 580, 580, 580, 580, 580, 580, 2652, 580, 580, 580, 580,\n  /* 47523 */ 580, 580, 580, 580, 580, 2868, 580, 2871, 580, 580, 580, 580, 2876, 580, 580, 580, 2879, 580, 580, 580,\n  /* 47543 */ 580, 1034, 580, 580, 580, 580, 580, 0, 0, 0, 534, 580, 556, 580, 580, 580, 580, 2906, 580, 580, 580, 534,\n  /* 47565 */ 580, 556, 534, 534, 556, 556, 580, 580, 0, 0, 3112, 0, 3114, 0, 0, 0, 3118, 0, 0, 534, 534, 534, 534,\n  /* 47588 */ 3013, 534, 534, 534, 534, 534, 556, 556, 556, 3021, 556, 556, 556, 556, 556, 2266, 2267, 556, 556, 556,\n  /* 47608 */ 556, 556, 556, 2274, 556, 556, 0, 580, 580, 580, 580, 580, 580, 994, 580, 580, 1008, 580, 580, 580, 580,\n  /* 47629 */ 580, 2341, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 0, 0, 733, 534, 580, 556, 0, 0, 3121, 0, 0,\n  /* 47652 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1693, 0, 0, 534, 3173, 534, 534, 534, 534, 534, 534, 534, 556, 556, 556,\n  /* 47678 */ 556, 556, 556, 556, 2839, 556, 556, 556, 556, 556, 556, 556, 556, 1811, 556, 556, 556, 556, 556, 556, 556,\n  /* 47699 */ 556, 556, 3183, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3033, 556, 556, 556, 556,\n  /* 47720 */ 3193, 556, 556, 556, 556, 556, 556, 3199, 556, 3201, 556, 556, 556, 556, 556, 0, 0, 0, 0, 580, 580, 580,\n  /* 47742 */ 2303, 580, 2305, 580, 580, 580, 3228, 580, 3230, 580, 580, 580, 580, 580, 580, 580, 580, 534, 580, 556,\n  /* 47762 */ 556, 556, 556, 580, 3423, 580, 3425, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2888, 580, 580, 580,\n  /* 47782 */ 580, 580, 580, 0, 0, 0, 3248, 0, 0, 0, 0, 0, 0, 0, 3132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3334, 534, 534, 0,\n  /* 47810 */ 3257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534, 2982, 534, 534, 3264, 534, 534, 534, 3268, 534,\n  /* 47835 */ 534, 534, 534, 534, 534, 534, 534, 534, 1328, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3277, 534,\n  /* 47856 */ 534, 534, 556, 556, 556, 556, 556, 3282, 556, 556, 556, 556, 556, 2294, 0, 0, 0, 580, 580, 580, 580, 580,\n  /* 47878 */ 580, 580, 580, 3482, 580, 580, 3484, 580, 0, 0, 0, 556, 3286, 556, 556, 556, 556, 556, 556, 556, 556, 556,\n  /* 47900 */ 556, 556, 556, 556, 556, 1883, 556, 3295, 556, 556, 556, 556, 580, 580, 580, 580, 580, 3301, 580, 580,\n  /* 47920 */ 580, 3305, 580, 580, 580, 580, 2380, 534, 580, 556, 534, 534, 534, 534, 556, 556, 556, 556, 580, 580, 580,\n  /* 47941 */ 580, 0, 534, 3601, 556, 3602, 580, 3603, 3489, 0, 0, 0, 534, 534, 534, 3496, 534, 534, 534, 534, 534, 534,\n  /* 47963 */ 534, 534, 1265, 534, 534, 534, 534, 534, 534, 534, 3504, 556, 556, 556, 3508, 556, 556, 556, 556, 556,\n  /* 47983 */ 556, 556, 556, 3516, 556, 580, 580, 580, 580, 2624, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580,\n  /* 48004 */ 1475, 580, 580, 580, 580, 580, 580, 3521, 580, 580, 580, 580, 580, 580, 580, 580, 3529, 580, 0, 0, 0, 0,\n  /* 48026 */ 0, 0, 122880, 122880, 122880, 122880, 122880, 0, 122880, 0, 2105631, 12290, 0, 3532, 0, 3534, 534, 534,\n  /* 48044 */ 534, 534, 534, 534, 534, 534, 534, 3540, 3541, 534, 534, 534, 534, 534, 2208, 0, 0, 0, 556, 556, 556, 556,\n  /* 48066 */ 556, 556, 556, 1387, 556, 556, 556, 1391, 556, 556, 556, 556, 556, 357, 358, 0, 0, 0, 0, 0, 0, 0, 364, 0,\n  /* 48090 */ 292, 0, 0, 0, 0, 0, 0, 688, 0, 0, 0, 0, 364, 364, 364, 0, 0, 0, 0, 0, 391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 48121 */ 0, 0, 722, 0, 735, 654, 467, 467, 481, 0, 0, 481, 358, 358, 358, 503, 358, 358, 358, 358, 467, 467, 599,\n  /* 48144 */ 575, 575, 575, 575, 575, 575, 575, 599, 599, 599, 552, 599, 599, 599, 599, 599, 599, 599, 575, 575, 552,\n  /* 48165 */ 575, 599, 575, 599, 1, 12290, 556, 556, 928, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 964, 556,\n  /* 48186 */ 556, 556, 556, 556, 2294, 2615, 0, 0, 0, 0, 580, 580, 580, 580, 580, 534, 556, 580, 0, 0, 0, 0, 0, 0, 0,\n  /* 48211 */ 0, 2924, 0, 0, 0, 0, 0, 0, 534, 534, 534, 891, 534, 556, 556, 556, 964, 556, 0, 580, 580, 580, 1038, 580,\n  /* 48235 */ 580, 580, 580, 2636, 580, 2638, 580, 580, 580, 580, 2642, 580, 580, 580, 580, 0, 0, 0, 3440, 0, 0, 0,\n  /* 48257 */ 3443, 0, 0, 534, 534, 78114, 1066, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1084, 0, 0, 0, 0, 670, 0, 0, 0, 0,\n  /* 48286 */ 0, 0, 0, 0, 0, 0, 0, 0, 2432, 0, 0, 0, 1184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 2132,\n  /* 48315 */ 2133, 534, 534, 1340, 1341, 901, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1353, 556, 556, 556, 556,\n  /* 48335 */ 580, 3590, 580, 580, 580, 580, 0, 0, 0, 534, 534, 534, 534, 534, 534, 1713, 534, 534, 534, 534, 534, 534,\n  /* 48357 */ 534, 2140, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2990, 534, 534, 534, 534, 534, 534, 556, 556,\n  /* 48377 */ 1362, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3047, 556, 556, 556, 0, 1551, 0, 0,\n  /* 48399 */ 0, 1557, 0, 0, 0, 1563, 0, 0, 0, 0, 0, 0, 0, 1650, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172032, 0,\n  /* 48430 */ 1656, 0, 0, 0, 0, 0, 0, 0, 0, 1662, 0, 1664, 0, 0, 0, 0, 0, 0, 172032, 172032, 172032, 172032, 172032,\n  /* 48453 */ 172032, 172032, 172032, 1, 12290, 534, 534, 1771, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534,\n  /* 48472 */ 534, 534, 2523, 534, 534, 556, 556, 1854, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1866,\n  /* 48492 */ 556, 556, 556, 556, 932, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1815, 556, 556, 556, 556,\n  /* 48513 */ 556, 1887, 556, 556, 556, 556, 556, 556, 26009, 0, 580, 580, 580, 580, 580, 580, 2312, 580, 580, 580, 580,\n  /* 48534 */ 580, 580, 580, 580, 580, 1488, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1924, 580, 580, 580, 580, 580,\n  /* 48555 */ 580, 580, 580, 580, 580, 580, 580, 3073, 580, 580, 580, 580, 580, 1937, 580, 580, 580, 580, 580, 580, 580,\n  /* 48576 */ 580, 580, 580, 580, 1950, 580, 580, 580, 580, 2648, 580, 580, 580, 580, 580, 580, 580, 580, 2656, 580,\n  /* 48596 */ 580, 580, 580, 580, 3231, 580, 580, 580, 580, 580, 580, 580, 534, 580, 556, 580, 580, 580, 1973, 580, 580,\n  /* 48617 */ 580, 580, 580, 580, 580, 580, 580, 1983, 580, 580, 580, 580, 1484, 580, 580, 580, 580, 580, 580, 580, 580,\n  /* 48638 */ 580, 580, 580, 3222, 580, 580, 580, 580, 0, 0, 0, 2043, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 733, 1171, 0,\n  /* 48665 */ 0, 534, 2151, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2795, 534, 2236, 556,\n  /* 48686 */ 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2600, 2323, 580, 580, 580, 580, 580,\n  /* 48707 */ 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3089, 580, 580, 580, 580, 2622, 580, 580, 580, 580, 580,\n  /* 48728 */ 580, 580, 580, 580, 580, 580, 580, 580, 3224, 580, 580, 2695, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 48755 */ 2120, 2734, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2719, 534, 2774, 534, 2776, 534, 534, 534, 534,\n  /* 48781 */ 534, 534, 534, 534, 534, 534, 534, 534, 2160, 534, 534, 534, 556, 2821, 556, 2823, 556, 556, 556, 556,\n  /* 48801 */ 556, 556, 556, 556, 556, 556, 556, 556, 3190, 556, 556, 556, 580, 580, 580, 2870, 580, 2872, 580, 580,\n  /* 48821 */ 580, 580, 580, 580, 580, 580, 580, 580, 2654, 580, 580, 580, 580, 580, 0, 0, 0, 0, 2933, 0, 0, 0, 0, 0, 0,\n  /* 48846 */ 0, 0, 0, 0, 0, 534, 534, 534, 2981, 534, 556, 556, 556, 556, 3289, 556, 556, 556, 556, 556, 556, 556, 556,\n  /* 48869 */ 556, 556, 556, 3202, 556, 556, 556, 556, 580, 3308, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580,\n  /* 48890 */ 580, 580, 580, 3314, 580, 580, 556, 556, 3589, 556, 580, 580, 580, 580, 3593, 580, 0, 0, 0, 534, 534, 534,\n  /* 48912 */ 3152, 534, 534, 534, 534, 534, 534, 534, 3157, 534, 534, 534, 0, 0, 359, 0, 0, 0, 0, 0, 0, 364, 0, 292, 0,\n  /* 48937 */ 0, 0, 0, 0, 0, 702, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2600960, 0, 0, 2768896, 2777088, 2781184, 0, 0, 369, 0,\n  /* 48963 */ 0, 369, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2040, 2041, 0, 600, 576, 576, 576, 576, 576, 576, 576, 600,\n  /* 48990 */ 600, 600, 553, 600, 600, 600, 600, 600, 600, 600, 576, 576, 553, 576, 600, 576, 600, 1, 12290, 556, 923,\n  /* 49011 */ 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2234, 556, 556, 556, 556, 556, 1367,\n  /* 49032 */ 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3547, 3548, 556, 556, 580, 580, 580, 580, 580,\n  /* 49052 */ 1500, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3102, 3103, 3104, 534, 1646, 0, 0,\n  /* 49073 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2748, 0, 0, 1684, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2065, 0,\n  /* 49105 */ 0, 580, 580, 580, 1938, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3223, 580, 580, 580,\n  /* 49126 */ 0, 0, 0, 2723, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 734, 0, 0, 0, 2942, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 49159 */ 0, 0, 0, 2760, 0, 0, 0, 0, 3249, 0, 3250, 0, 0, 0, 0, 3132, 0, 0, 0, 0, 0, 0, 0, 3333, 0, 534, 534, 534,\n  /* 49187 */ 0, 0, 0, 360, 361, 362, 363, 0, 0, 364, 0, 292, 0, 0, 0, 0, 0, 0, 718, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2445,\n  /* 49217 */ 0, 0, 0, 0, 0, 0, 361, 0, 360, 0, 0, 0, 69632, 73728, 0, 0, 0, 0, 427, 65536, 0, 0, 0, 0, 685, 534, 534,\n  /* 49244 */ 838, 842, 845, 534, 853, 534, 534, 534, 868, 427, 427, 0, 427, 0, 361, 427, 450, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 49269 */ 690, 691, 0, 364, 364, 364, 0, 0, 0, 0, 0, 491, 491, 0, 498, 498, 498, 498, 504, 505, 498, 498, 518, 518,\n  /* 49293 */ 518, 518, 450, 450, 450, 450, 450, 450, 450, 450, 450, 518, 518, 518, 518, 518, 518, 518, 518, 554, 577,\n  /* 49314 */ 554, 577, 554, 554, 577, 554, 601, 577, 577, 577, 577, 577, 577, 577, 601, 601, 601, 554, 601, 601, 601,\n  /* 49335 */ 601, 601, 601, 601, 577, 577, 613, 618, 601, 618, 624, 1, 12290, 534, 534, 887, 534, 534, 556, 556, 960,\n  /* 49356 */ 556, 556, 0, 580, 580, 1034, 580, 580, 580, 580, 1502, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580,\n  /* 49377 */ 580, 2332, 580, 580, 580, 580, 534, 2513, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534,\n  /* 49398 */ 534, 2806, 534, 534, 534, 534, 2542, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 0, 0, 0, 0, 556,\n  /* 49420 */ 556, 556, 2216, 556, 2218, 556, 580, 2674, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 534, 580,\n  /* 49440 */ 556, 534, 534, 534, 534, 534, 2491, 534, 534, 534, 534, 2495, 534, 534, 534, 534, 534, 0, 0, 0, 0, 556,\n  /* 49462 */ 556, 2215, 556, 556, 556, 556, 602, 578, 578, 578, 578, 578, 578, 578, 602, 602, 602, 555, 602, 602, 602,\n  /* 49483 */ 602, 602, 602, 602, 578, 578, 555, 578, 602, 578, 602, 1, 12290, 0, 0, 698, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 49509 */ 0, 0, 0, 2410, 0, 0, 728, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2952, 0, 0, 0, 728, 0, 784, 0, 0,\n  /* 49540 */ 0, 0, 0, 0, 0, 0, 784, 0, 0, 0, 0, 686, 0, 0, 0, 0, 0, 0, 364, 364, 364, 0, 0, 0, 0, 0, 671, 0, 0, 0, 0,\n  /* 49571 */ 0, 0, 0, 0, 0, 0, 0, 3145, 3146, 0, 0, 0, 556, 924, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556,\n  /* 49596 */ 556, 556, 556, 2260, 2261, 0, 0, 1176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2433, 0, 0, 534, 1300, 534,\n  /* 49623 */ 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2548, 0, 0, 1418, 556, 556, 556, 556,\n  /* 49644 */ 556, 556, 556, 556, 556, 556, 556, 26009, 1341, 975, 580, 580, 580, 580, 2664, 580, 580, 580, 580, 2668,\n  /* 49664 */ 580, 580, 580, 580, 580, 580, 1505, 580, 580, 1509, 580, 580, 580, 580, 580, 1515, 0, 0, 1553, 0, 0, 0,\n  /* 49686 */ 1559, 0, 0, 0, 0, 0, 0, 0, 0, 0, 299, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2082, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 49719 */ 736, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534, 2167, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534,\n  /* 49743 */ 1733, 534, 534, 534, 534, 556, 556, 556, 2252, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556,\n  /* 49764 */ 3471, 580, 580, 580, 580, 580, 580, 2339, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580,\n  /* 49784 */ 3485, 0, 0, 3488, 2499, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2202,\n  /* 49805 */ 0, 0, 0, 0, 736, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1747, 534, 534, 534, 534, 1051,\n  /* 49827 */ 534, 534, 892, 534, 1056, 556, 556, 965, 556, 0, 1061, 580, 580, 1039, 580, 580, 580, 580, 2885, 580, 580,\n  /* 49848 */ 580, 580, 580, 580, 580, 580, 580, 580, 580, 2680, 534, 580, 556, 534, 556, 556, 1420, 556, 556, 556, 556,\n  /* 49869 */ 556, 556, 556, 556, 556, 26009, 1341, 975, 580, 580, 580, 580, 2894, 580, 580, 580, 580, 580, 580, 580,\n  /* 49889 */ 580, 580, 580, 580, 2900, 580, 580, 580, 580, 534, 534, 534, 534, 1726, 534, 534, 534, 534, 534, 534, 534,\n  /* 49910 */ 534, 534, 534, 534, 2144, 534, 534, 2148, 534, 1821, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556,\n  /* 49930 */ 556, 556, 556, 556, 556, 2843, 580, 580, 1954, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580,\n  /* 49951 */ 580, 3313, 580, 580, 580, 580, 556, 2586, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556,\n  /* 49972 */ 556, 2288, 556, 556, 556, 556, 556, 2614, 0, 0, 0, 0, 0, 0, 580, 580, 580, 580, 580, 1039, 580, 580, 580,\n  /* 49995 */ 580, 0, 0, 0, 534, 580, 556, 0, 0, 0, 0, 2957, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 2979, 534, 534, 534,\n  /* 50023 */ 2983, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2498, 3065, 580, 580,\n  /* 50043 */ 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2889, 580, 580, 580, 580, 580, 3192, 556,\n  /* 50064 */ 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3035, 1134592, 0, 1134592, 0, 0, 0,\n  /* 50085 */ 1134592, 1135007, 1135007, 0, 0, 0, 0, 0, 1135007, 0, 0, 0, 0, 700, 701, 0, 0, 0, 0, 0, 707, 0, 0, 0, 711,\n  /* 50110 */ 0, 1134592, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2718, 0, 0, 1134592, 1134592, 0, 0, 0, 0, 1135196,\n  /* 50136 */ 1135196, 1135196, 1135196, 1134592, 1135196, 1135196, 1135196, 1135196, 1135196, 1135196, 0, 1134592,\n  /* 50148 */ 1134592, 1134592, 1134592, 1135196, 1134592, 1135196, 1, 12290, 2125824, 3117056, 2125824, 2125824,\n  /* 50160 */ 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 0, 2125824, 2125824,\n  /* 50173 */ 2125824, 2125824, 3137536, 2940928, 2940928, 2940928, 0, 0, 0, 0, 0, 2748416, 2879488, 0, 0, 0, 0, 0,\n  /* 50191 */ 2113, 0, 0, 0, 2113, 0, 0, 2118, 2119, 0, 0, 0, 0, 0, 1180, 0, 0, 0, 1184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 50220 */ 0, 0, 0, 0, 2474, 0, 1147348, 1147348, 1147348, 451, 451, 1147348, 451, 451, 451, 451, 451, 451, 451, 451,\n  /* 50240 */ 1147399, 1147399, 1147399, 1147399, 1147399, 1147399, 1147399, 1147399, 1147399, 1147399, 1147399,\n  /* 50251 */ 1147399, 1147399, 1147399, 1147399, 1147399, 0, 0, 0, 0, 0, 0, 0, 0, 768, 0, 0, 0, 0, 0, 0, 0, 451, 0, 0,\n  /* 50275 */ 0, 0, 0, 1147348, 1147348, 1147348, 1147399, 1147399, 1147348, 1147399, 1147399, 1, 12290, 3, 0, 0, 0, 0,\n  /* 50293 */ 0, 253952, 0, 0, 0, 253952, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2950, 0, 0, 0, 0, 1159168, 0, 1159168,\n  /* 50320 */ 1159168, 0, 1159168, 1159168, 0, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168,\n  /* 50333 */ 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168,\n  /* 50344 */ 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 0, 0, 0, 0, 0, 0, 0, 0, 781, 0, 0, 0, 0, 0,\n  /* 50365 */ 792, 0, 0, 1159168, 0, 0, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168,\n  /* 50380 */ 1159168, 1, 12290, 3, 0, 0, 0, 0, 249856, 0, 0, 0, 249856, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 163840, 0,\n  /* 50404 */ 0, 0, 0, 65536, 0, 2125824, 3117056, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824,\n  /* 50418 */ 2125824, 2125824, 2125824, 0, 0, 974, 2125824, 2125824, 2125824, 2125824, 3149824, 2125824, 2428928,\n  /* 50431 */ 2437120, 2125824, 2486272, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824,\n  /* 50442 */ 2125824, 2625536, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2699264, 2125824, 2715648,\n  /* 50453 */ 2125824, 2723840, 2125824, 0, 106496, 106496, 0, 106496, 106496, 106496, 106496, 106496, 106496, 106496,\n  /* 50467 */ 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 0, 0, 106496, 0, 0, 106496,\n  /* 50482 */ 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2183168,\n  /* 50502 */ 0, 0, 0, 0, 0, 0, 0, 0, 2134016, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 695, 0, 0, 0, 0, 0, 3108864, 3198976, 0,\n  /* 50531 */ 0, 3043328, 0, 3149824, 2936832, 0, 2760704, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 369, 369, 0, 0, 65536,\n  /* 50553 */ 369\n];\n\nXQueryParser.EXPECTED =\n[\n  /*    0 */ 127, 143, 342, 950, 172, 201, 188, 217, 769, 963, 247, 263, 279, 295, 311, 327, 1395, 373, 1083, 374, 374,\n  /*   21 */ 374, 374, 374, 374, 374, 374, 374, 419, 391, 407, 466, 435, 589, 1682, 909, 574, 156, 1220, 451, 495, 511,\n  /*   42 */ 527, 543, 559, 634, 1096, 678, 694, 755, 649, 785, 801, 817, 833, 849, 865, 881, 897, 937, 979, 995, 1023,\n  /*   63 */ 1039, 1055, 479, 1112, 1128, 1473, 1144, 1160, 1206, 1236, 357, 662, 1266, 709, 1282, 1292, 1308, 1324,\n  /*   81 */ 1339, 1355, 1411, 1427, 1443, 618, 1459, 724, 1489, 604, 1518, 1528, 231, 1070, 1544, 1560, 1576, 1592,\n  /*   99 */ 1622, 1250, 1638, 1654, 1606, 921, 1670, 739, 1698, 1714, 1820, 1190, 1730, 1746, 1502, 1758, 1774, 1790,\n  /*  117 */ 1806, 1175, 1850, 1860, 1836, 1009, 1370, 1876, 1385, 375, 1892, 1896, 1903, 1903, 1903, 1898, 1902, 1903,\n  /*  135 */ 1910, 1907, 1914, 1918, 1922, 1926, 1929, 1933, 1937, 1941, 1945, 4040, 4040, 4040, 4106, 4040, 4040, 2020,\n  /*  153 */ 2279, 4040, 1949, 4040, 4040, 4040, 2429, 2379, 4040, 4040, 4040, 4040, 2438, 4040, 4040, 3112, 2651, 3443,\n  /*  171 */ 2444, 1955, 1984, 1994, 1998, 4040, 4040, 4040, 4040, 4040, 2017, 2042, 4040, 4040, 4040, 2024, 2285, 2030,\n  /*  189 */ 2034, 4040, 4040, 4040, 4040, 4040, 2041, 4040, 4040, 3002, 2285, 2285, 2285, 2285, 2285, 2111, 1988, 1988,\n  /*  207 */ 1988, 1988, 1988, 1990, 1955, 1955, 1955, 1955, 1955, 2101, 3099, 1988, 1988, 1988, 1988, 1988, 2120, 1955,\n  /*  225 */ 1955, 1955, 1955, 1955, 2046, 2055, 4040, 4040, 2212, 2349, 4040, 4040, 4040, 4137, 3441, 4040, 4040, 4040,\n  /*  243 */ 4040, 3531, 4040, 2745, 1988, 1988, 1988, 2066, 1955, 1955, 1955, 1957, 2073, 4040, 4040, 2473, 3002, 2285,\n  /*  261 */ 2285, 2026, 1988, 1988, 3101, 1955, 1955, 1956, 2072, 4040, 2471, 4040, 2284, 2285, 3098, 1988, 1988, 2078,\n  /*  279 */ 1955, 2068, 2129, 2446, 3554, 2285, 2112, 1988, 2120, 1955, 2083, 2281, 2286, 1988, 2067, 2089, 2095, 2113,\n  /*  297 */ 2049, 2107, 3097, 2114, 2079, 3096, 3100, 2079, 3096, 2114, 2051, 2118, 2126, 2135, 2139, 2143, 2156, 2160,\n  /*  315 */ 2170, 2170, 2170, 2163, 2167, 2170, 2173, 2177, 2181, 2185, 2189, 2193, 2197, 2201, 2205, 2209, 2216, 4040,\n  /*  333 */ 4040, 4040, 2131, 4040, 4040, 4040, 2220, 4040, 2226, 4040, 2283, 2287, 1988, 1954, 2122, 2098, 1961, 4040,\n  /*  351 */ 4040, 4040, 1970, 4040, 2474, 1980, 4040, 2321, 3139, 4040, 2440, 3145, 4427, 2277, 3219, 2796, 3151, 3505,\n  /*  369 */ 3155, 4040, 3263, 3161, 2906, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4040,\n  /*  387 */ 4040, 4040, 4040, 4041, 2255, 2259, 2262, 2266, 2270, 2274, 3465, 2291, 4040, 4040, 4040, 4040, 3213, 2296,\n  /*  405 */ 2312, 2303, 2396, 2240, 2243, 2309, 2316, 2320, 2649, 4006, 4040, 2726, 2326, 3670, 4040, 4040, 4040, 4040,\n  /*  423 */ 2231, 3466, 4040, 4040, 4040, 3429, 2237, 4040, 2618, 3123, 2249, 2253, 3877, 2348, 4040, 4040, 4013, 2355,\n  /*  441 */ 4040, 2359, 4040, 4040, 4040, 4040, 3173, 2321, 2227, 2367, 3192, 4040, 4040, 2459, 4040, 4040, 3192, 4040,\n  /*  459 */ 4040, 4348, 2989, 2882, 2918, 3129, 2349, 4040, 3014, 2311, 2670, 2331, 3577, 4417, 2336, 2379, 4040, 4040,\n  /*  477 */ 2549, 2340, 4040, 4040, 4040, 2984, 4040, 4040, 4040, 4040, 3591, 2979, 4040, 4040, 4040, 3390, 4180, 4419,\n  /*  495 */ 3131, 4040, 3190, 3194, 4040, 2950, 2989, 2918, 3210, 4040, 2469, 2788, 3212, 4040, 4005, 3283, 3279, 4282,\n  /*  513 */ 4040, 3281, 4226, 4226, 2601, 4283, 3283, 3283, 1966, 3282, 3279, 1966, 4227, 3283, 4191, 2462, 2478, 4040,\n  /*  531 */ 4040, 4040, 4040, 2588, 2522, 4040, 4040, 4040, 2007, 2858, 2484, 3025, 2492, 2495, 2498, 2502, 2503, 2507,\n  /*  549 */ 2511, 2515, 4040, 2521, 4040, 4040, 2526, 4040, 3968, 2913, 2541, 2545, 3867, 2553, 2563, 2574, 2578, 4040,\n  /*  567 */ 3387, 3385, 4040, 2582, 4040, 3458, 2587, 4040, 3120, 4040, 4040, 4040, 3174, 2074, 2409, 2537, 2432, 4040,\n  /*  585 */ 4040, 4040, 2536, 2416, 4040, 2373, 2377, 4040, 4040, 4040, 4040, 4255, 2378, 4040, 4040, 4040, 4040, 4256,\n  /*  603 */ 2379, 4040, 2838, 3503, 4040, 4040, 4040, 4040, 2839, 3504, 3974, 3509, 4040, 4040, 3730, 3536, 4040, 3349,\n  /*  621 */ 2906, 4040, 3326, 2556, 3181, 3383, 3394, 3403, 4040, 4397, 4040, 3553, 3551, 3545, 4040, 2668, 2912, 3478,\n  /*  639 */ 3399, 2548, 2592, 3456, 3471, 2600, 4040, 4040, 4040, 4242, 4040, 3147, 4040, 3818, 4040, 4037, 3923, 3990,\n  /*  657 */ 3561, 4003, 4040, 2655, 4039, 4040, 4040, 4040, 3167, 4040, 4040, 4040, 3331, 3171, 4040, 4040, 4040, 4040,\n  /*  675 */ 3632, 3179, 4040, 2638, 2611, 2615, 4040, 2388, 2622, 4040, 4040, 4040, 4040, 2389, 2349, 4040, 4040, 4040,\n  /*  693 */ 2397, 2390, 4040, 4040, 4040, 3141, 4040, 4040, 3846, 4040, 4040, 2630, 2517, 4070, 2637, 2412, 2989, 4040,\n  /*  711 */ 4040, 4040, 4040, 2344, 4040, 4040, 4040, 4040, 4040, 3269, 2989, 2380, 3207, 4040, 3463, 4040, 4040, 4040,\n  /*  729 */ 3861, 3470, 4040, 4040, 4040, 3475, 4040, 3482, 4040, 4040, 2631, 3905, 4040, 4040, 4040, 4040, 2631, 3905,\n  /*  747 */ 2424, 3909, 4040, 2152, 2595, 3785, 3915, 2631, 4365, 2642, 4040, 4040, 4040, 4040, 4085, 2646, 4040, 4040,\n  /*  765 */ 4040, 4040, 4085, 2646, 4040, 4040, 2464, 4040, 4040, 2285, 2285, 2285, 2285, 2025, 1988, 1988, 1988, 1988,\n  /*  783 */ 1988, 2120, 3610, 3833, 4040, 4040, 4040, 4365, 2656, 4040, 4040, 4040, 2660, 2665, 3980, 2516, 3196, 2674,\n  /*  801 */ 2678, 3830, 2685, 4040, 4040, 3830, 2685, 4040, 4040, 2299, 2690, 4040, 3184, 3458, 2004, 3969, 3197, 3312,\n  /*  819 */ 3251, 2696, 4040, 2037, 2690, 4040, 3251, 2696, 4040, 2702, 2709, 3195, 4000, 2713, 2717, 4040, 2715, 4040,\n  /*  837 */ 2679, 2723, 4040, 2730, 2734, 2739, 3644, 4040, 2705, 2583, 3646, 2583, 2749, 2753, 2704, 3203, 2944, 2566,\n  /*  855 */ 2570, 2956, 2945, 3843, 2568, 2568, 2761, 3815, 3641, 2765, 3607, 2769, 2773, 2775, 2779, 2783, 2787, 4040,\n  /*  873 */ 4040, 4040, 3316, 4040, 4040, 3564, 2792, 3570, 2800, 2804, 2808, 2810, 2814, 2818, 2821, 2823, 2824, 4040,\n  /*  891 */ 4040, 3315, 4040, 3428, 2828, 3896, 3248, 2833, 2843, 2434, 2453, 3918, 2849, 2907, 2853, 4040, 2150, 2148,\n  /*  909 */ 4040, 4040, 4040, 4040, 2405, 2349, 4040, 4040, 4040, 4040, 2405, 2349, 4040, 4040, 4040, 4040, 2362, 3442,\n  /*  927 */ 4040, 4040, 4040, 4040, 2363, 3773, 3950, 4040, 4040, 4040, 2857, 4040, 2559, 2968, 3853, 2862, 2937, 4379,\n  /*  945 */ 2869, 3988, 3295, 4040, 2873, 4040, 4040, 4040, 3554, 2285, 2285, 2285, 2285, 1987, 1988, 1988, 1988, 1989,\n  /*  963 */ 1955, 1955, 1955, 1955, 1956, 2103, 4040, 4040, 4040, 2472, 4040, 2109, 2285, 2285, 2285, 2113, 3527, 2877,\n  /*  981 */ 4040, 4040, 4040, 2886, 2890, 4040, 4040, 4040, 4040, 2980, 4040, 3336, 2829, 3897, 2895, 2899, 4040, 2911,\n  /*  999 */ 2917, 4040, 4040, 2922, 4040, 4040, 4040, 4040, 2844, 2923, 4040, 4040, 2626, 4289, 4040, 3453, 3038, 4353,\n  /* 1017 */ 4386, 3183, 4040, 4040, 4041, 4370, 4040, 4040, 2845, 2924, 4040, 4040, 4040, 4040, 4040, 2990, 4040, 2558,\n  /* 1035 */ 2928, 4420, 2935, 4040, 2943, 2949, 4040, 2970, 2954, 4040, 4040, 4040, 4040, 3855, 2960, 4040, 4040, 4040,\n  /* 1053 */ 4040, 3855, 2960, 4040, 4040, 4040, 4040, 3389, 4040, 2966, 3897, 2974, 2327, 4275, 4040, 3590, 2978, 4040,\n  /* 1071 */ 3535, 3379, 3488, 3521, 3230, 4040, 4040, 3540, 4040, 4040, 4040, 3439, 4040, 4040, 4040, 4364, 4040, 4040,\n  /* 1089 */ 4040, 4040, 4040, 4040, 4040, 4040, 4378, 4040, 4040, 4040, 2605, 4040, 4040, 2245, 4040, 4040, 3459, 4040,\n  /* 1107 */ 4040, 4038, 3923, 4040, 2013, 3616, 2411, 4040, 3631, 2988, 4040, 4040, 3631, 2988, 4040, 4040, 4040, 2994,\n  /* 1125 */ 4040, 4040, 2350, 4262, 2381, 3617, 4040, 4040, 4346, 4040, 4040, 3000, 4040, 4040, 4346, 4040, 2350, 4208,\n  /* 1143 */ 3615, 2881, 4040, 2795, 3174, 3112, 3180, 3024, 3111, 3180, 3180, 3933, 3014, 3113, 3113, 3006, 3181, 3014,\n  /* 1161 */ 3013, 3014, 3175, 4047, 3018, 3029, 3053, 4040, 4040, 4040, 4040, 3634, 4040, 4221, 4040, 3650, 4040, 4040,\n  /* 1179 */ 4040, 4040, 2631, 3651, 4040, 4040, 4040, 4040, 3648, 4287, 4291, 4040, 4010, 4017, 4303, 4022, 2632, 3182,\n  /* 1197 */ 4040, 4032, 4040, 1950, 4012, 4040, 2865, 4045, 4051, 3043, 3047, 4064, 3061, 3065, 3069, 3073, 3077, 3081,\n  /* 1215 */ 3105, 3084, 4040, 4040, 3633, 4040, 4040, 3443, 2444, 4040, 4040, 4040, 2450, 4040, 4040, 4040, 4349, 4040,\n  /* 1233 */ 4040, 3014, 3276, 2487, 2961, 2691, 4276, 3109, 1976, 3117, 3127, 3289, 3135, 3305, 4040, 3324, 3322, 4040,\n  /* 1251 */ 4040, 3734, 3779, 3739, 3744, 3969, 4040, 3748, 3754, 3761, 3943, 3887, 3765, 4057, 4040, 2488, 2962, 2692,\n  /* 1269 */ 3163, 3224, 3188, 3412, 4040, 4040, 2085, 3201, 4040, 4040, 4040, 4040, 2343, 3217, 3223, 3228, 4040, 4040,\n  /* 1287 */ 4040, 3234, 4040, 4040, 4040, 4040, 4040, 3238, 4040, 4040, 4040, 4040, 3422, 4040, 2529, 2686, 4354, 3245,\n  /* 1305 */ 4040, 4040, 4040, 4342, 4040, 4040, 4040, 4040, 1972, 4040, 4040, 4040, 4040, 4040, 3255, 4040, 4040, 4040,\n  /* 1323 */ 3423, 3952, 2686, 4355, 3261, 4040, 4040, 3267, 4040, 4040, 4040, 1974, 4040, 4040, 4040, 3273, 4040, 4220,\n  /* 1341 */ 3981, 2680, 4356, 3895, 4040, 3287, 4040, 4040, 3293, 4040, 4040, 2062, 4040, 4220, 3953, 3299, 2146, 4040,\n  /* 1359 */ 3303, 4040, 2607, 4040, 4040, 2061, 4040, 4248, 3309, 3894, 3498, 4040, 4360, 4040, 4040, 4040, 4369, 4040,\n  /* 1377 */ 4374, 3056, 4383, 3622, 4040, 4040, 4390, 4040, 4040, 4424, 2742, 4040, 2633, 4040, 3056, 4040, 3039, 3157,\n  /* 1395 */ 4040, 4040, 4040, 4040, 4040, 4040, 4040, 2455, 4325, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 3320, 4040,\n  /* 1413 */ 3330, 3911, 3335, 3629, 3588, 4213, 3943, 3587, 4213, 4213, 4040, 3341, 3589, 3589, 3628, 4214, 3341, 3340,\n  /* 1431 */ 3341, 3630, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 3836, 2349, 3347, 4040, 3354, 3001, 4080, 4404,\n  /* 1449 */ 3358, 3362, 3366, 3369, 3373, 3373, 3377, 4040, 4040, 3835, 4091, 3410, 4040, 4040, 3416, 4040, 4040, 3420,\n  /* 1467 */ 3427, 4040, 3433, 4040, 4331, 3447, 4040, 4040, 3797, 4040, 3795, 4040, 4040, 4345, 4040, 2350, 1964, 4040,\n  /* 1485 */ 2879, 4040, 3397, 4040, 2904, 4040, 3350, 3488, 4040, 3486, 2535, 3492, 3496, 4040, 4040, 4040, 3502, 4040,\n  /* 1503 */ 4040, 4040, 4127, 4028, 2010, 4131, 4141, 4145, 4149, 4153, 4157, 4161, 4165, 4169, 4173, 4134, 4377, 4293,\n  /* 1521 */ 2534, 3516, 4040, 4040, 4040, 2839, 3504, 4040, 4040, 4040, 4040, 2931, 3442, 4040, 3450, 4040, 2902, 4040,\n  /* 1539 */ 3799, 4363, 3520, 4196, 3525, 3406, 2349, 2757, 2305, 2996, 4393, 4347, 3544, 4040, 3549, 4040, 4040, 3549,\n  /* 1557 */ 4040, 4040, 3558, 2756, 2305, 4077, 4395, 3960, 4040, 3568, 4040, 3823, 2349, 4040, 3997, 3750, 3574, 3884,\n  /* 1575 */ 3961, 4269, 4040, 4270, 4040, 3581, 3944, 3585, 3595, 3931, 3600, 2001, 3930, 3604, 3604, 4211, 3614, 3932,\n  /* 1593 */ 3621, 3626, 3662, 3638, 3655, 3656, 3660, 3667, 3674, 3678, 3682, 3685, 4040, 4040, 4040, 3840, 2596, 3740,\n  /* 1611 */ 3850, 2668, 2332, 3343, 4040, 3859, 4040, 4040, 4040, 2233, 3865, 2891, 3735, 2465, 2351, 3690, 3698, 3874,\n  /* 1629 */ 3702, 3705, 3709, 3713, 3717, 3721, 3725, 3729, 4040, 2423, 2421, 3241, 3772, 4040, 4040, 2939, 3777, 3783,\n  /* 1647 */ 3789, 3793, 4136, 2698, 3342, 2633, 2425, 3803, 4040, 4040, 3808, 2349, 4040, 4040, 4186, 3812, 4040, 4040,\n  /* 1665 */ 4040, 3009, 3822, 3827, 4040, 3871, 2532, 4318, 3881, 4040, 3891, 3773, 4040, 4040, 4040, 4040, 3901, 4040,\n  /* 1683 */ 4040, 4040, 4040, 4040, 2385, 4040, 4040, 4040, 4040, 3014, 4040, 2394, 4040, 2401, 2379, 4035, 3922, 4040,\n  /* 1701 */ 4040, 2292, 3927, 4040, 4040, 4040, 4040, 3937, 4040, 4040, 4040, 4040, 2091, 3941, 3948, 4040, 3957, 3757,\n  /* 1719 */ 3966, 2835, 3112, 4040, 4040, 2222, 3979, 4040, 4040, 2719, 3973, 2632, 3183, 3021, 4040, 4055, 4040, 4061,\n  /* 1737 */ 2419, 4040, 3023, 4068, 4074, 4084, 4112, 4089, 4095, 3596, 4100, 4308, 4099, 4104, 4110, 4099, 4113, 4119,\n  /* 1755 */ 3257, 4117, 4123, 4040, 4040, 4040, 4040, 4177, 4184, 2836, 3686, 4190, 3693, 4195, 4200, 4410, 4205, 4218,\n  /* 1773 */ 4040, 3090, 2735, 4225, 3093, 4231, 4040, 4040, 4040, 3631, 4235, 2661, 4040, 2681, 4429, 2369, 4040, 4239,\n  /* 1791 */ 4040, 4040, 4040, 4040, 3804, 4246, 4040, 4040, 4040, 4252, 4040, 4040, 4040, 2631, 4260, 4266, 4040, 4040,\n  /* 1809 */ 4040, 4025, 4185, 2837, 2686, 2480, 4274, 4040, 4280, 4040, 4040, 4040, 4040, 4201, 3978, 4018, 4303, 3768,\n  /* 1827 */ 4040, 3050, 4040, 4040, 3985, 4040, 4040, 3994, 4040, 4322, 4385, 4329, 4040, 4040, 4040, 4040, 4335, 4040,\n  /* 1845 */ 4040, 4040, 4040, 3663, 4339, 4040, 4040, 4297, 4040, 3057, 3087, 4301, 3962, 3032, 4040, 4040, 4040, 4040,\n  /* 1863 */ 2624, 4307, 4040, 4040, 4040, 4040, 2624, 4312, 4315, 4040, 2322, 3436, 2837, 2058, 4040, 4040, 3035, 4040,\n  /* 1881 */ 4401, 4408, 3694, 4040, 4040, 3512, 4040, 2631, 4414, 4040, 3511, 4558, 4433, 6024, 6027, 4439, 4466, 4468,\n  /* 1899 */ 4468, 4446, 4455, 4467, 4468, 4468, 4468, 4468, 4468, 4468, 4473, 4468, 4468, 4463, 4457, 4459, 4479, 4477,\n  /* 1917 */ 4483, 4468, 4469, 4493, 4496, 4506, 4510, 4524, 4519, 4511, 4500, 4502, 4502, 4518, 4519, 4498, 4515, 4523,\n  /* 1935 */ 4528, 4532, 4536, 4539, 4547, 4546, 4543, 4551, 4554, 4556, 4566, 5097, 4574, 6086, 5003, 5101, 5101, 5101,\n  /* 1953 */ 4593, 4599, 4602, 4602, 4602, 4602, 4608, 4640, 4568, 4622, 4628, 5101, 4434, 5101, 5099, 5101, 6713, 5101,\n  /* 1971 */ 6256, 5101, 5101, 4584, 5992, 5101, 5101, 4729, 5101, 5473, 6277, 5101, 5007, 4602, 5693, 4609, 5696, 5699,\n  /* 1989 */ 5699, 5699, 5699, 4601, 4602, 5699, 4602, 4619, 4621, 4623, 4627, 6087, 5101, 4434, 6165, 6164, 5101, 5101,\n  /* 2007 */ 6380, 6242, 5096, 5101, 4576, 5101, 6463, 5101, 5101, 5635, 4488, 5366, 6275, 5101, 4581, 5101, 4590, 5411,\n  /* 2025 */ 5123, 5123, 5123, 5697, 5699, 4603, 4621, 4621, 4622, 4627, 4627, 4628, 5101, 4583, 5448, 6513, 5474, 5101,\n  /* 2043 */ 5008, 5101, 5101, 4602, 4632, 5123, 5699, 4602, 4602, 4602, 5704, 5121, 4602, 4621, 4627, 5101, 4583, 6563,\n  /* 2061 */ 5101, 4584, 6017, 5101, 5101, 5699, 5701, 4602, 4602, 4602, 4632, 4640, 5705, 5101, 5101, 5101, 4734, 5700,\n  /* 2079 */ 4602, 4602, 4602, 5705, 4643, 5701, 5101, 5101, 4824, 5651, 4602, 4650, 5101, 5101, 4824, 6512, 5010, 5695,\n  /* 2097 */ 5123, 5123, 5698, 5690, 4602, 4608, 5696, 5700, 5703, 5101, 4602, 5101, 5101, 5121, 5123, 5123, 5123, 5699,\n  /* 2115 */ 5699, 5699, 5702, 5123, 5698, 5699, 5702, 4602, 4602, 5704, 4607, 4602, 5705, 5123, 5697, 5704, 5101, 5101,\n  /* 2133 */ 4816, 4822, 5699, 4602, 5704, 5695, 5698, 5702, 5694, 5701, 4651, 4652, 4650, 5101, 4592, 5101, 5101, 5815,\n  /* 2151 */ 5567, 5101, 5101, 5106, 6519, 6761, 6550, 6560, 4662, 4695, 4656, 4660, 4693, 4666, 4673, 4670, 4680, 4684,\n  /* 2169 */ 4691, 4693, 4693, 4693, 4693, 4694, 4676, 4699, 4693, 4703, 4708, 4714, 4704, 4726, 4740, 4744, 4687, 4751,\n  /* 2187 */ 4753, 4748, 4787, 4789, 4789, 4791, 4757, 4759, 4761, 4763, 4776, 4776, 4770, 4767, 4774, 4717, 4675, 4710,\n  /* 2205 */ 4780, 4784, 4795, 4797, 4801, 4805, 4809, 5101, 4592, 6198, 6202, 4990, 5007, 5230, 6461, 5101, 6373, 5101,\n  /* 2223 */ 5101, 4824, 6698, 4831, 5101, 5101, 5101, 4736, 5108, 5108, 5101, 5101, 4826, 6485, 5490, 5979, 4838, 5101,\n  /* 2241 */ 4720, 4985, 5101, 4720, 5101, 5101, 4853, 5311, 4857, 5333, 4876, 4902, 4906, 4906, 4906, 4906, 4908, 4915,\n  /* 2259 */ 4917, 4912, 4921, 4925, 4928, 4931, 4934, 4939, 4938, 4943, 4944, 4959, 4949, 4948, 4953, 4956, 4963, 5101,\n  /* 2277 */ 5107, 5101, 4892, 5101, 5007, 5101, 5101, 5695, 5123, 5123, 5123, 5123, 5696, 5699, 5988, 5101, 5101, 5101,\n  /* 2295 */ 4825, 5300, 5101, 5608, 5101, 4811, 5449, 6426, 4969, 5101, 5101, 4988, 6219, 5101, 5018, 4987, 5101, 5101,\n  /* 2313 */ 4860, 5101, 5101, 4995, 5015, 5101, 6412, 5034, 5101, 5101, 5101, 4893, 6751, 6138, 5101, 5101, 5101, 4894,\n  /* 2331 */ 6729, 5101, 5101, 5101, 4965, 5055, 5068, 5081, 5086, 5091, 5076, 5095, 5101, 4824, 5933, 5929, 5376, 5087,\n  /* 2349 */ 4434, 5101, 5101, 5101, 4979, 5008, 6409, 5996, 5101, 5999, 5151, 5987, 5376, 5101, 4826, 6502, 6738, 6204,\n  /* 2367 */ 5101, 6730, 5101, 5101, 4891, 5101, 4570, 5101, 5115, 5127, 5074, 4442, 5096, 5101, 5101, 5101, 4975, 5538,\n  /* 2385 */ 5411, 5986, 5281, 5101, 4840, 5628, 5355, 5382, 4434, 4736, 5101, 4973, 5101, 5101, 5101, 4840, 5687, 5132,\n  /* 2403 */ 5075, 5140, 5890, 5072, 5076, 5141, 6462, 4888, 5101, 5101, 4895, 5101, 5343, 5073, 6582, 4451, 5101, 4894,\n  /* 2421 */ 5101, 5101, 6416, 5101, 5101, 5101, 6191, 5101, 5415, 5892, 5074, 6583, 5096, 5101, 5101, 4898, 5999, 5411,\n  /* 2439 */ 5280, 5101, 5101, 4974, 4978, 5134, 5157, 5101, 5101, 5007, 5101, 5132, 5075, 5159, 5101, 4897, 5101, 5871,\n  /* 2457 */ 4980, 5101, 5949, 5135, 5159, 5101, 4976, 5101, 5101, 5010, 5101, 5101, 5169, 4434, 5101, 5101, 5009, 5101,\n  /* 2475 */ 5101, 5101, 4613, 4614, 4975, 5101, 4614, 5101, 5411, 4978, 6164, 6391, 5101, 4977, 6380, 5395, 5376, 5188,\n  /* 2493 */ 4872, 5243, 5197, 5197, 5194, 5197, 5199, 5203, 5205, 5207, 5209, 5209, 5209, 5213, 5213, 5213, 5213, 5214,\n  /* 2511 */ 5213, 5213, 5215, 5219, 5221, 5101, 5101, 5101, 5036, 5101, 5059, 5063, 5372, 5101, 5101, 5101, 6378, 6010,\n  /* 2529 */ 5101, 4978, 6569, 5101, 4980, 5101, 5417, 5101, 5101, 5101, 5891, 5074, 5240, 5101, 5351, 6463, 5247, 5101,\n  /* 2547 */ 5101, 5257, 5101, 5101, 5101, 5068, 5263, 6448, 5875, 5101, 4981, 5101, 5101, 5876, 6281, 5416, 5275, 4435,\n  /* 2565 */ 5874, 5101, 4990, 6089, 5406, 5410, 5101, 5265, 5407, 5285, 5101, 5101, 5297, 6402, 5101, 5101, 5304, 5309,\n  /* 2583 */ 5101, 5101, 5101, 5057, 5371, 5101, 5101, 5101, 5059, 5330, 4833, 5427, 5101, 5010, 4978, 5101, 5415, 5358,\n  /* 2601 */ 5101, 5101, 5101, 5100, 5883, 5359, 5101, 5101, 5102, 6015, 4893, 5258, 5101, 5342, 5432, 5101, 5348, 5101,\n  /* 2619 */ 5024, 6570, 5977, 5382, 4434, 5101, 5101, 5102, 6113, 5726, 5101, 6379, 5101, 5101, 5101, 5102, 5101, 5101,\n  /* 2637 */ 6462, 5101, 4561, 5876, 5101, 6422, 6426, 5381, 6381, 6423, 6427, 5382, 5101, 5031, 5101, 5101, 4866, 4885,\n  /* 2655 */ 4811, 5438, 6425, 5399, 6381, 5479, 5101, 5101, 5101, 5104, 5106, 5060, 5064, 5101, 5035, 5101, 5101, 5051,\n  /* 2673 */ 5101, 5350, 5101, 5879, 4896, 5431, 5101, 5101, 5101, 5106, 5101, 4975, 5471, 5101, 5101, 5101, 5107, 6430,\n  /* 2691 */ 5101, 5101, 5101, 5108, 4890, 6429, 6381, 5101, 5101, 5102, 6446, 5479, 5101, 5101, 5453, 5269, 5410, 5101,\n  /* 2709 */ 4614, 5101, 5101, 6380, 5153, 5101, 5101, 5732, 5268, 5470, 5101, 5101, 5102, 6697, 5459, 5468, 6381, 5101,\n  /* 2727 */ 5041, 5046, 5045, 5478, 5101, 5101, 5453, 4614, 5101, 5101, 5101, 5111, 6088, 5350, 5877, 5413, 5538, 5101,\n  /* 2745 */ 5101, 5047, 5047, 5047, 5461, 5101, 6088, 6119, 5106, 5267, 5271, 5101, 5047, 6213, 5101, 5101, 5404, 4990,\n  /* 2763 */ 5404, 5408, 5404, 4990, 5404, 5962, 5423, 5961, 5101, 6084, 5423, 5233, 6104, 5101, 4990, 5232, 5230, 5101,\n  /* 2781 */ 5232, 4989, 5232, 5232, 5232, 5231, 6488, 5101, 5101, 5101, 5168, 5876, 5722, 5483, 4434, 5099, 5101, 5101,\n  /* 2799 */ 6498, 6279, 5487, 5101, 4886, 6166, 5489, 5856, 5494, 5500, 5498, 5504, 5504, 5504, 5504, 5506, 5513, 5510,\n  /* 2817 */ 5517, 5519, 5519, 5519, 5521, 5519, 5525, 5525, 5525, 5525, 5527, 6280, 5415, 5319, 5672, 5101, 5005, 6438,\n  /* 2835 */ 5101, 5101, 5103, 5101, 5101, 5101, 6361, 6199, 5571, 5101, 5101, 5101, 5176, 5626, 6498, 5551, 5101, 6442,\n  /* 2853 */ 5561, 5101, 5814, 5566, 5575, 5101, 5101, 5101, 5181, 6167, 5004, 6438, 5101, 5102, 6092, 6381, 5580, 5101,\n  /* 2871 */ 5101, 5004, 6127, 5600, 5863, 5606, 5862, 5605, 5101, 5101, 5235, 5101, 5101, 5101, 5424, 5102, 6128, 5601,\n  /* 2889 */ 5864, 5607, 5101, 5101, 5101, 5224, 5101, 6167, 5101, 5006, 6440, 5101, 5569, 5101, 5102, 6180, 5148, 5101,\n  /* 2907 */ 5101, 5996, 5101, 6283, 5464, 5101, 5101, 5101, 5228, 5101, 5620, 5101, 5101, 5101, 5232, 5176, 5626, 6753,\n  /* 2925 */ 5665, 5101, 5101, 5632, 5321, 4434, 5101, 5102, 6362, 6200, 5027, 5562, 5101, 5570, 5101, 5101, 5223, 5746,\n  /* 2943 */ 5463, 5101, 5101, 5101, 5266, 4989, 5621, 5101, 5101, 5101, 5278, 6754, 5666, 5101, 5101, 5265, 5407, 6755,\n  /* 2961 */ 5376, 5101, 5101, 4990, 5101, 5612, 5415, 5320, 6393, 5101, 5101, 5176, 5639, 5646, 4577, 5568, 5410, 5640,\n  /* 2979 */ 5664, 5101, 5101, 5101, 5293, 5175, 5639, 5663, 5376, 5659, 5376, 5101, 5101, 5101, 4980, 5657, 5676, 5101,\n  /* 2997 */ 5101, 5288, 5037, 5658, 5101, 5101, 5101, 5411, 5123, 5098, 5101, 5423, 5101, 5102, 6471, 6477, 5098, 5101,\n  /* 3015 */ 5424, 5101, 5101, 5426, 5098, 5424, 5101, 5102, 6558, 5101, 5101, 5101, 6393, 5101, 5426, 5424, 5568, 5424,\n  /* 3033 */ 5233, 5101, 5101, 5102, 6562, 5101, 5104, 5101, 5101, 5101, 4974, 6215, 5710, 4879, 5101, 6496, 5376, 5101,\n  /* 3051 */ 5105, 5101, 5424, 5424, 5099, 5101, 5105, 5101, 5101, 5101, 5720, 4722, 5730, 5742, 5751, 5757, 5766, 5764,\n  /* 3069 */ 5767, 5755, 5761, 5771, 5774, 5776, 5778, 5790, 5782, 5785, 5789, 5790, 5791, 5796, 5795, 5801, 5797, 5806,\n  /* 3087 */ 5101, 5108, 4976, 5101, 5110, 6702, 5101, 5111, 6707, 5101, 5123, 5123, 5123, 5698, 5699, 5699, 5700, 4602,\n  /* 3105 */ 5801, 5802, 5801, 5801, 4998, 5101, 5098, 5101, 5101, 5425, 5101, 5101, 5812, 5819, 5557, 5101, 5145, 5281,\n  /* 3123 */ 5101, 4844, 5876, 4852, 5595, 5101, 4888, 5101, 5950, 5136, 4434, 5101, 4615, 5101, 5101, 5823, 5848, 5941,\n  /* 3141 */ 5101, 5101, 5363, 5101, 5472, 5373, 5101, 5101, 5386, 5101, 5860, 4888, 5868, 5887, 5011, 5011, 5101, 5101,\n  /* 3159 */ 5414, 5101, 6528, 5376, 5101, 5101, 5414, 6347, 5545, 5908, 6527, 4732, 5904, 6529, 5101, 5101, 5423, 5101,\n  /* 3177 */ 5101, 5100, 5942, 5101, 5101, 5101, 5426, 5101, 5101, 5101, 5479, 5912, 5924, 5101, 5101, 5423, 5163, 5158,\n  /* 3195 */ 5101, 5101, 5101, 4989, 5101, 5350, 5929, 5376, 5101, 5101, 5454, 5270, 6215, 5393, 5374, 5101, 5168, 5173,\n  /* 3213 */ 5101, 5101, 5101, 5021, 5109, 5101, 5411, 5101, 5853, 5101, 6347, 5101, 5100, 5101, 5102, 5947, 5925, 5101,\n  /* 3231 */ 5101, 5530, 4980, 4811, 5650, 5954, 5376, 4812, 5959, 5955, 5101, 5184, 5539, 6436, 5879, 5098, 5102, 5538,\n  /* 3249 */ 5101, 6166, 5101, 5102, 5447, 5442, 4585, 5993, 5101, 5101, 5538, 6089, 5099, 4592, 5101, 5101, 5546, 5903,\n  /* 3267 */ 4584, 5993, 5101, 5101, 5649, 5940, 5102, 4586, 5994, 5101, 5231, 4887, 5101, 4974, 5100, 5101, 5101, 6712,\n  /* 3285 */ 5101, 5101, 4584, 5995, 5101, 5101, 5706, 5898, 4585, 5995, 5101, 5101, 5808, 5101, 5106, 5101, 5413, 6346,\n  /* 3303 */ 5102, 6004, 5101, 5101, 5833, 5840, 6392, 5107, 5412, 5876, 4894, 5152, 5101, 5035, 5576, 5101, 5101, 5106,\n  /* 3321 */ 6016, 5101, 5101, 5837, 5841, 5101, 5101, 5338, 5101, 6015, 5101, 5101, 5101, 5547, 5412, 5101, 5101, 5101,\n  /* 3339 */ 5612, 5101, 6161, 5101, 5101, 5101, 5679, 5101, 5101, 6367, 5101, 5101, 5842, 6096, 5101, 6282, 5101, 4486,\n  /* 3357 */ 6021, 6046, 6045, 6046, 6046, 6043, 6046, 6050, 6054, 6058, 6062, 6071, 6066, 6070, 6071, 6071, 6075, 6075,\n  /* 3375 */ 6075, 6075, 6078, 6082, 5101, 5101, 5842, 6097, 5103, 5234, 5101, 5101, 5880, 5305, 5101, 5101, 5047, 5101,\n  /* 3393 */ 5101, 6102, 5109, 6108, 5101, 5236, 5101, 5101, 5325, 5101, 6117, 5101, 6123, 5101, 5249, 6209, 6202, 5101,\n  /* 3411 */ 6493, 5101, 5101, 5897, 5101, 5101, 6142, 6181, 5096, 5843, 6097, 5101, 5101, 5966, 5101, 5101, 5996, 5101,\n  /* 3429 */ 5101, 5101, 5876, 5103, 6174, 5101, 5101, 5416, 5421, 5101, 5101, 5251, 6200, 6204, 5101, 5101, 5101, 5949,\n  /* 3447 */ 6147, 6152, 6000, 4980, 4980, 4980, 5101, 5292, 4635, 5101, 5299, 5101, 5101, 5058, 5062, 5371, 6361, 5737,\n  /* 3465 */ 5101, 5101, 5975, 4848, 5988, 6137, 5101, 5101, 5101, 5882, 5102, 5734, 5738, 5101, 5317, 6462, 5349, 6382,\n  /* 3483 */ 5101, 6160, 6159, 5101, 6173, 5101, 5101, 5999, 5101, 5101, 6667, 5106, 4894, 6247, 4978, 5101, 5101, 6004,\n  /* 3501 */ 5101, 6361, 6199, 6203, 5101, 5101, 5101, 5896, 6382, 6382, 5101, 5101, 6111, 5418, 5101, 5101, 6668, 4893,\n  /* 3519 */ 6186, 5101, 6769, 5879, 5101, 5101, 5529, 6188, 5101, 5101, 6126, 5599, 5102, 6197, 6201, 6205, 5419, 6182,\n  /* 3537 */ 4434, 5101, 5101, 6089, 5252, 6201, 6205, 5585, 5101, 5101, 5101, 6007, 6455, 4450, 5101, 5101, 6133, 5101,\n  /* 3555 */ 5101, 5101, 5695, 6454, 4449, 4434, 5101, 5350, 5101, 5878, 5101, 6280, 4886, 4988, 6229, 5101, 5101, 6162,\n  /* 3573 */ 4614, 5101, 6378, 4434, 5101, 5375, 5101, 4562, 6229, 5101, 4978, 6214, 6161, 4980, 5101, 5101, 6162, 5101,\n  /* 3591 */ 5101, 5101, 5655, 5640, 6234, 5101, 5101, 5101, 6089, 5101, 6258, 4434, 6240, 5101, 6258, 4434, 5101, 5404,\n  /* 3609 */ 5962, 5101, 5102, 5437, 6424, 6235, 5101, 5101, 5568, 5410, 5101, 5101, 6236, 5101, 6165, 5101, 5101, 5101,\n  /* 3627 */ 6259, 5101, 5101, 6164, 5101, 5101, 5101, 5648, 5849, 5942, 5101, 6260, 5101, 6165, 5101, 5405, 5409, 5101,\n  /* 3645 */ 5057, 5268, 5409, 5101, 5101, 5102, 6742, 5253, 5101, 5101, 5101, 6260, 5101, 5101, 6259, 5101, 6167, 6258,\n  /* 3663 */ 5101, 5101, 5101, 6112, 6259, 5101, 6259, 6165, 4847, 5987, 5376, 5568, 6497, 6259, 5568, 6497, 6168, 6257,\n  /* 3681 */ 6257, 6261, 6251, 6254, 6254, 5101, 5101, 5101, 6169, 5118, 5101, 5916, 5101, 5414, 5538, 5101, 5101, 5918,\n  /* 3699 */ 4896, 5553, 4884, 5037, 6272, 6287, 6305, 6299, 6305, 6303, 6299, 6309, 6293, 6290, 6295, 6322, 6313, 6327,\n  /* 3717 */ 6316, 6319, 6323, 6332, 6331, 6339, 6339, 6340, 6339, 6339, 6339, 6336, 6344, 5101, 5101, 5101, 6178, 5224,\n  /* 3735 */ 5747, 5376, 5101, 5101, 5415, 5101, 5101, 6351, 4893, 4893, 4882, 5230, 5001, 5101, 6372, 5101, 5101, 6214,\n  /* 3753 */ 4980, 5101, 6357, 5969, 5101, 5417, 5419, 6353, 6366, 4434, 5101, 6371, 6390, 6397, 6401, 5101, 5418, 4636,\n  /* 3771 */ 5647, 6434, 5101, 5101, 5101, 6192, 5943, 5101, 5008, 5101, 4978, 5101, 4979, 5101, 5416, 5101, 6351, 4893,\n  /* 3789 */ 5419, 6352, 4894, 6268, 6367, 5002, 5101, 5101, 6279, 5641, 5101, 5101, 5290, 5101, 6452, 5101, 5101, 5101,\n  /* 3807 */ 6223, 5101, 6470, 6459, 6480, 6475, 6479, 6205, 5101, 5423, 5407, 5101, 5057, 5061, 5390, 6481, 5101, 5101,\n  /* 3825 */ 5101, 6228, 5589, 5588, 5587, 5101, 5436, 5442, 6428, 5402, 5101, 5101, 5102, 6143, 6182, 5106, 5745, 6520,\n  /* 3843 */ 5101, 5455, 5409, 5101, 5057, 5061, 5370, 6267, 5101, 5410, 5101, 5535, 5101, 5101, 5177, 5640, 5423, 5999,\n  /* 3861 */ 5101, 5101, 6360, 5736, 6738, 6204, 5101, 5101, 6378, 5101, 5224, 5077, 5101, 5008, 6265, 5555, 5101, 5415,\n  /* 3879 */ 5070, 5082, 5622, 5101, 5101, 6278, 6165, 5233, 5101, 5377, 6377, 6386, 5103, 5101, 5679, 5101, 5538, 5101,\n  /* 3897 */ 5101, 5101, 5534, 5538, 4826, 5935, 6737, 6204, 4827, 5936, 6535, 6204, 6191, 6191, 5101, 5101, 6378, 6393,\n  /* 3915 */ 5232, 5101, 5036, 5101, 5543, 5259, 5326, 6190, 5101, 5101, 5101, 6278, 5443, 6506, 4434, 5101, 5568, 6236,\n  /* 3933 */ 5101, 5101, 5568, 5101, 5102, 6511, 5134, 6507, 5164, 4451, 5101, 5101, 6392, 5101, 6165, 5101, 6192, 6192,\n  /* 3951 */ 6192, 5101, 5101, 6378, 6392, 5101, 5101, 6517, 5376, 5101, 5583, 5101, 5101, 5101, 6011, 6524, 5101, 6278,\n  /* 3969 */ 5101, 5101, 5101, 5037, 6155, 5101, 5101, 5101, 6382, 6533, 6549, 5101, 5101, 5101, 6379, 6393, 5101, 6544,\n  /* 3987 */ 6381, 5101, 5593, 5101, 5101, 5229, 5634, 5101, 6676, 6549, 5101, 5616, 6230, 5101, 5351, 5877, 4895, 5411,\n  /* 4005 */ 5432, 5101, 5101, 5101, 5031, 5101, 6675, 6548, 5101, 5101, 5101, 6391, 5101, 6539, 5426, 5101, 5101, 5417,\n  /* 4023 */ 5920, 4896, 5101, 5648, 6722, 5416, 6462, 5101, 5562, 5101, 6554, 6381, 5101, 5680, 5101, 5101, 6381, 5101,\n  /* 4041 */ 5101, 5101, 5101, 4583, 5101, 6540, 5425, 5101, 5426, 5101, 5101, 6709, 5417, 4895, 5102, 4595, 5101, 5101,\n  /* 4059 */ 6406, 5101, 4594, 5403, 6540, 5101, 5714, 5003, 4991, 6090, 6568, 5101, 5101, 6464, 4988, 5101, 6091, 6381,\n  /* 4077 */ 5101, 5842, 5037, 5998, 5996, 5996, 5413, 4893, 5101, 5101, 5101, 6419, 5101, 6091, 5101, 5101, 6492, 6491,\n  /* 4095 */ 5101, 6091, 5101, 4895, 4561, 4896, 5101, 5101, 6090, 6089, 4896, 5101, 5101, 6494, 6256, 4559, 5101, 5101,\n  /* 4113 */ 6090, 5101, 5101, 6090, 4561, 6089, 4561, 5101, 6089, 4560, 5537, 6089, 5101, 5537, 6574, 6752, 4888, 4577,\n  /* 4131 */ 5716, 5997, 6579, 5101, 5844, 5037, 5101, 5101, 5101, 6196, 5101, 6462, 6465, 6463, 4869, 5826, 5829, 6587,\n  /* 4149 */ 4489, 4646, 6598, 6591, 6597, 6593, 6605, 6602, 6607, 6611, 6613, 6617, 6619, 6628, 6625, 6632, 6621, 6635,\n  /* 4167 */ 6639, 6640, 6644, 6647, 6654, 6653, 6651, 6658, 6661, 6665, 5101, 6574, 6723, 5101, 5876, 6281, 5670, 5418,\n  /* 4185 */ 5421, 5101, 5101, 5101, 6469, 5107, 5101, 4975, 5101, 4976, 6672, 5101, 5101, 5101, 6682, 6494, 5101, 5101,\n  /* 4203 */ 5101, 6695, 6680, 5313, 6686, 5101, 5877, 5684, 4434, 6246, 5101, 5101, 6163, 5101, 5101, 5101, 6692, 5101,\n  /* 4221 */ 5101, 6495, 5101, 5101, 6703, 5101, 5101, 5101, 6713, 5101, 5101, 6718, 6717, 4834, 6722, 5101, 5418, 5422,\n  /* 4239 */ 5101, 6727, 6734, 5101, 5881, 5357, 5337, 6746, 5101, 5101, 5101, 6495, 6378, 5101, 6222, 6745, 5101, 5889,\n  /* 4257 */ 5128, 5074, 4442, 6224, 6747, 5101, 5877, 5615, 5671, 5876, 5101, 5879, 5101, 5899, 6230, 5101, 5101, 6089,\n  /* 4275 */ 5101, 5101, 4892, 5101, 5412, 5002, 6734, 5101, 5101, 6711, 5101, 5101, 5253, 5101, 5877, 5877, 5877, 5101,\n  /* 4293 */ 5101, 5101, 6771, 5101, 5101, 6575, 5642, 4635, 5411, 6089, 5101, 4889, 5258, 5101, 5252, 4561, 5101, 5101,\n  /* 4311 */ 6090, 5252, 4561, 5876, 5876, 5101, 5101, 5101, 5914, 6353, 6148, 5106, 4974, 5101, 5101, 5972, 5101, 4989,\n  /* 4329 */ 5101, 6165, 5425, 5101, 6688, 5107, 5101, 6111, 5724, 6759, 5725, 4561, 5101, 5101, 5983, 5994, 5101, 5190,\n  /* 4347 */ 5879, 5101, 5101, 5101, 5344, 5376, 5106, 5101, 5101, 5413, 6463, 5879, 5102, 6775, 6767, 5101, 5101, 5997,\n  /* 4365 */ 5101, 5101, 5101, 4811, 4583, 6765, 5101, 5101, 5101, 5101, 6098, 5420, 5101, 5998, 5101, 5101, 5101, 4818,\n  /* 4383 */ 5109, 5101, 5413, 5537, 5101, 5101, 6165, 5101, 6111, 6564, 5101, 5998, 5101, 6769, 5101, 5101, 6132, 6137,\n  /* 4401 */ 5101, 6098, 5101, 5101, 6033, 6031, 6039, 5105, 5101, 5109, 5101, 4863, 5101, 6776, 5101, 5101, 5101, 6035,\n  /* 4419 */ 4434, 5101, 6161, 5536, 5101, 5036, 5102, 5101, 5101, 6088, 5101, 5101, 5412, 6089, 1048576, 1073741824, 0,\n  /* 4436 */ 0, 0, -872415232, 4194560, 4196352, 270532608, 2097152, 4194304, 117440512, 134217728, 4194304, 16777216,\n  /* 4448 */ 4194432, 3145728, 16777216, 134217728, 536870912, 1073741824, 0, 541065216, 541065216, -2143289344,\n  /* 4458 */ -2143289344, 4194304, 4194304, 4196352, -2143289344, 4194304, 4194432, 37748736, 541065216, -2143289344,\n  /* 4468 */ 4194304, 4194304, 4194304, 4194304, 37748736, 4194304, 4194304, 4198144, 4196352, 8540160, 4194304,\n  /* 4479 */ 4194304, 4194304, 4196352, 276901888, 4194304, 4194304, 8425488, 4194304, 1, 0, 1024, 1024, 0, 1024,\n  /* 4493 */ 742391808, 239075328, -1405091840, 742391808, 742391808, 775946240, 239075328, 171966464, 775946240,\n  /* 4502 */ 171966464, 171966464, 171966464, 171966464, -1405091840, 775946240, 775946240, -1405091840, -1371537408,\n  /* 4511 */ 775946240, 775946240, 775946240, 171966464, 239075328, 239075328, 171966464, 775946240, -1371537408,\n  /* 4520 */ 775946240, 775946240, -1371537408, 239075328, 775946240, 775946240, 775946240, 775946240, 4718592, 64,\n  /* 4530 */ 4718592, 2097216, 4720640, 541589504, 4194368, 541589504, 4194400, 4194368, 541065280, 4194368,\n  /* 4540 */ -2143289280, 4194368, -2143285440, -2143285408, -2143285408, -2109730976, -2143285408, -2143285408,\n  /* 4548 */ -2143285408, -2143285408, 776470528, -2143285408, -2109730976, 775946336, 775946304, 776470528, 775946304,\n  /* 4557 */ -1908404384, 2, 4, 8, 262144, 0, 0, 0, 0x80000000, 8, 262144, 262144, 1048576, 0, 128, 4096, 0, 4194304,\n  /* 4575 */ 128, 128, 0, 1048576, 0, 0, 1536, 1792, 0, 0, 1, 2, 4, 128, 2097152, 8192, 8392704, 0, 0, 1, 4, 8, 262144,\n  /* 4598 */ 536870912, 64, 64, 32, 96, 96, 96, 96, 128, 1536, 524288, 96, 64, 524288, 524288, 1536, 1024, 0, 0, 0, 29,\n  /* 4619 */ 96, 1048576, 128, 128, 128, 128, 2048, 2048, 2048, 2048, 2048, 2048, 0, 96, 524288, 96, 64, 0, 0, 128,\n  /* 4639 */ 1024, 524288, 64, 64, 96, 96, 524288, 524288, 4100, 1024, 100680704, 96, 524288, 64, 96, 524288, 64, 80,\n  /* 4657 */ 528, 524304, 1048592, 2097168, 268435472, 16, 16, 2, 536936448, 16, 262160, 16, 536936448, 16, 17, 17, 20,\n  /* 4674 */ 16, 48, 16, 16, 20, 560, 24, 560, 48, 2097680, 3145744, 1048592, 1048592, 2097168, 16, 1049104, 2228784,\n  /* 4691 */ 2097168, 2097168, 16, 16, 16, 16, 20, 48, 48, 3146256, 2097680, 1048592, 16, 16, 16, 28, 0, 2097552,\n  /* 4709 */ 3146256, 16, 16, 16, 21, 16, 16, 28, 16, 0, 16, 0, -2046820352, 0, 0, 2, 2, 2, 2098064, 17, 21, 266240,\n  /* 4731 */ 1048576, 67108864, 0x80000000, 0, 0, 64, 65536, 1048576, 0, 16, 16, 163577856, 17, 528, 528, 16, 528,\n  /* 4748 */ -161430188, -161429676, -161429676, -161430188, -161429680, -161430188, -161430188, -161429680, -161429676,\n  /* 4757 */ -161349072, -161429675, -161349072, -161349072, -161349072, -161349072, -161347728, -161347728, -161347728,\n  /* 4766 */ -161347728, -161298572, -160774288, -160299084, -161298572, -161298576, -160299088, -161298576, -160774284,\n  /* 4775 */ -160774284, -161298572, -161298572, -161298572, -161298572, 112, 21, 53, 146804757, 146812949, 146862101,\n  /* 4786 */ 146863389, -161429676, -160905388, -161429676, -161429676, -161429676, -161429676, -161429675, -161349072,\n  /* 4795 */ 146863421, 148960541, 146863389, 146863389, 148960541, 146863421, 148960541, 148960541, -161429740,\n  /* 4804 */ -161429676, -160905388, -161298572, -161298572, -18860267, -160774284, -18729163, 0, 0, 1, 6, 8, 16,\n  /* 4817 */ 262144, 0, 0, 1, 8, 0, 24, 0, 0, 1, 14, 16, 32, 1024, 32768, 100663296, -1073741824, 0, 0, 0, 150528,\n  /* 4838 */ 131072, 16777216, 0, 0, 1, 102, 1, 32768, 131328, 131072, 524288, 2097152, 8388608, 16777216, 164096, 0, 0,\n  /* 4855 */ 0, 1007, 0, 1073741825, 0x80000000, 0x80000000, 1073741824, 8, 0, 0, 58368, 0, 0, 65536, 1048576, 4096,\n  /* 4871 */ 1048576, 512, 512, 9476, 134218240, 0, 1073741824, 2621440, 1073741824, 0x80000000, 0x80000000, 0, 0,\n  /* 4884 */ 66048, 0, 0, 0, 67108864, 0, 0, 0, 16384, 0, 0, 0, 8, 0, 0, 0, 9, 4456448, 8, 16777216, 1073774592,\n  /* 4905 */ 1226014816, 100665360, 100665360, 100665360, 100665360, -2046818288, 1091799136, 1091799136, 1091803360,\n  /* 4914 */ 1091799136, 1091799136, -2044196848, 1091799136, 1091799136, 1091799136, 1091799136, 1091799136,\n  /* 4922 */ 1158908000, 1158908001, 1192462432, 1192462448, 1192462448, 1192462448, 1192462448, 1200851056, 1091799393,\n  /* 4931 */ 1200851056, 1200851056, 1091799393, 1200851056, 1200851056, 1200851056, 1192462448, 1870638912, 1870638912,\n  /* 4940 */ 1870655296, 1870638912, 1870655296, 1870655296, 1870655296, 1870655296, 1870655296, 1870655312, 1870655316,\n  /* 4949 */ 1870655316, 1870655316, 1870655317, 1870655348, 1870655316, 1870655316, 1870655312, 1870655312, 1879027568,\n  /* 4958 */ 1879043952, 1870655316, 1870655316, 1870655316, 1870638928, 1879043952, 1879043956, 0, 0, 1, 12288, 0,\n  /* 4970 */ 229440, 1048576, 1224736768, 100663296, 0, 0, 0, 1024, 0, 0, 8192, 0, 0, 0, 576, 0, 231488, 1090519040, 0,\n  /* 4989 */ 0, 0, 2048, 0, 0, 134217728, 0, 1157627904, 1191182336, 0, 0, 131584, 268435456, 49152, 0, 0, 0, 134217728,\n  /* 5007 */ 0, 0, 0, 16, 0, 0, 0, 13, 0, 9437184, 231744, 0, 0, 235712, 0, 0, 131328, 0, 0, 131072, 32768, 0, 0,\n  /* 5030 */ 134217728, 0, 520000, 7864320, 1862270976, 0, 0, 0, 4096, 0, 0, 0, 1862270976, 1862270976, 1862270976, 0,\n  /* 5046 */ 16252928, 0, 0, 0, 8192, 64, 98304, 1048576, 150994944, 83886080, 117440512, 0, 0, 2, 4, 16, 32, 256, 1024,\n  /* 5065 */ 8192, 33554432, 0, 0, 64, 256, 3584, 8192, 16384, 65536, 262144, 524288, 1048576, 2097152, 4194304,\n  /* 5080 */ 0x80000000, 8192, 98304, 393216, 524288, 1048576, 1048576, 2097152, 4194304, 251658240, 536870912, 8192,\n  /* 5092 */ 16384, 98304, 393216, 251658240, 536870912, 1073741824, 0, 0, 2097152, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0,\n  /* 5113 */ 3, 240, 0, 83886080, 117440512, 64, 0, 2, 0, 0, 524288, 524288, 524288, 524288, 256, 1536, 2048, 8192,\n  /* 5131 */ 16384, 256, 1536, 8192, 65536, 262144, 524288, 2097152, 67108864, 4194304, 16777216, 100663296, 134217728,\n  /* 5144 */ 536870912, 524288, 2097152, 134217728, 268435456, 536870912, 1073741824, 0, 0, 524288, 2097152, 0, 0,\n  /* 5157 */ 1048576, 2097152, 67108864, 1073741824, 0, 0, 1536, 65536, 262144, 524288, 33554432, 0, 1024, 65536,\n  /* 5171 */ 262144, 2097152, 2097152, 1073741824, 0, 0, 2, 8, 16, 32, 0, 8192, 4096, 0, 0, 605503, 1066401792, 9476,\n  /* 5189 */ 512, 0, 32, 384, 8192, 4194312, 4194312, 541065224, 4194312, 4194312, 4194312, 4194312, 4194344,\n  /* 5202 */ -869654016, -869654016, 4203820, -869654016, -869654016, -869654016, -869654016, 1279402504, 1279402504,\n  /* 5211 */ 1279402504, 1279402504, 2143549415, 2143549415, 2143549415, 2143549415, 2143549423, 2143549423, 2143549423,\n  /* 5220 */ 2143549423, 2143549423, 2143549423, 0, 0, 2, 16384, 32768, 260, 512, 0, 0, 0, 65536, 0, 0, 0, 384, 8192, 0,\n  /* 5240 */ 32, 512, 0, 1050624, 262144, 512, 1275208192, 139264, 1275068416, 0, 0, 4, 128, 1024, 2048, 16384, 262144,\n  /* 5257 */ 8, 4194304, 0, 0, 0, 82432, 0, 40, 0, 0, 4, 256, 1024, 98304, 131072, 16777216, 268435456, 0, 0, 300,\n  /* 5277 */ 4203520, 0, 0, 2097152, 1073741824, 0x80000000, 0, 0, 520, 4333568, 1275068416, 0, 0, 4194304, 1024, 0,\n  /* 5293 */ 4096, 8192, 0, 0, 0, 520, 520, 0, 0, 0, 164096, 999, 29619200, 2113929216, 0, 0, 0, 1007, 1007, 1007, 0, 0,\n  /* 5315 */ 8, 124160, 32, 512, 0, 2048, 524288, 0, 536870912, 0, 139264, 0, 0, 0, 139264, 0, 40, 0, 2621440, 0, 0,\n  /* 5336 */ 0x80000000, 1610612736, 0, 0, 0, 229376, 0, 40, 0, 524288, 2097152, 1073741824, 44, 0, 0, 0, 262144, 0, 0,\n  /* 5355 */ 16384, 229376, 4194304, 25165824, 100663296, 402653184, 1610612736, 0, 110, 110, 110, 0, 0, 8388608,\n  /* 5369 */ 8388608, 8192, 33554432, 67108864, 134217728, 1073741824, 0, 0x80000000, 0, 0, 0, 12545, 25165824,\n  /* 5382 */ 33554432, 67108864, 402653184, 536870912, 0, 104, 104, 104, 8192, 33554432, 134217728, 0, 0, 8388608,\n  /* 5396 */ 134217728, 1073741824, 0, 229376, 25165824, 33554432, 402653184, 536870912, 0, 0, 256, 1024, 65536,\n  /* 5409 */ 16777216, 268435456, 0, 0, 0, 524288, 0, 0, 0, 64, 0, 0, 0, 128, 0, 0, 0, 256, 0, 0, 0, 300, 524288,\n  /* 5432 */ 2097152, 0x80000000, 0, 0, 1, 6, 32, 64, 256, 512, 256, 1024, 4096, 8192, 65536, 2, 4, 32, 64, 256, 1024,\n  /* 5453 */ 0, 2, 4, 256, 1024, 65536, 4, 64, 256, 1024, 0, 0, 8, 8388608, 0, 98304, 131072, 25165824, 268435456,\n  /* 5472 */ 536870912, 0, 0, 8388608, 4096, 0, 0, 8, 8, 8, 0, 2048, 524288, 67108864, 536870912, 32, 4100, 67108864, 0,\n  /* 5491 */ 32768, 0, 32768, 0, 1049088, 0, 134348800, 270532608, 0, 1049088, 1049088, 8192, 1049088, 12845065,\n  /* 5505 */ 12845065, 12845065, 12845065, 147193865, 5505537, 5591557, 5587465, 5587457, 5587457, 147202057, 5587457,\n  /* 5516 */ 5587457, 5591557, 5587457, 13894153, 13894153, 13894153, 13894153, 81003049, 13894153, -1881791493,\n  /* 5526 */ -1881791493, -1881791493, -1881791493, 0, 0, 8, 33554432, 262144, 0, 33554432, 1024, 0, 4, 0, 0, 0, 867647,\n  /* 5543 */ 1, 5505024, 0, 0, 15, 16, 32, 192, 86528, 9, 0, 0, 16, 8192, 0, 0, 23, 0, 75497472, 0, 0, 0, 1048576,\n  /* 5566 */ 5505024, -1887436800, 0, 0, 0, 2097152, 268435456, 0, 0, 4096, 8192, 67108864, 0, 0, 262144, 4194304,\n  /* 5582 */ 8388608, 0, 0, 33554432, 8192, 0, 0, 288, 8388608, 0, 0, 0, 81920, 0, 0, 24, 282624, 64, 896, 8192, 131072,\n  /* 5603 */ 262144, 1048576, 16777216, 33554432, -1946157056, 0, 0, 0, 2621440, 0, 131072, 0, 32, 0, 0, 2048, 3145728,\n  /* 5620 */ 0, 16384, 65536, 0, 0, 268435456, 32, 64, 384, 512, 5120, 8192, 0, 64, 0, 2048, 1048576, 0, 0, 32, 64, 384,\n  /* 5642 */ 8192, 131072, 0, 0, 32768, 134217728, 0, 0, 8, 32, 64, 1024, 2048, 0, 2, 8, 32, 384, 8192, 131072,\n  /* 5662 */ 33554432, 131072, 1048576, 33554432, 134217728, 0x80000000, 0, 0, 2048, 524288, 536870912, 0, 1073741824,\n  /* 5675 */ 0, 131072, 33554432, 0x80000000, 0, 0, 33554432, 1073741824, 0, 32, 0, 524288, 0, 0, 67108864, 64, 64, 0,\n  /* 5693 */ 96, 96, 0, 524288, 524288, 524288, 64, 64, 64, 64, 96, 96, 96, 0, 0, 0, 28, 0, 8396800, 4194304, 134217728,\n  /* 5714 */ 2048, 134217728, 0, 0, 32, 1, 0, 8396800, 0, 0, 32, 64, 128, 1024, 2048, 262144, 0, 16384, 0, 2, 4, 64,\n  /* 5736 */ 128, 3840, 16384, 19922944, 2080374784, 0, 16384, 16384, 16777216, 16384, 32768, 1048576, 2097152, 4194304,\n  /* 5750 */ 16777216, 524288, 268567040, 16384, 2113544, 68489237, 72618005, 68423701, 68423701, 68423701, 68489237,\n  /* 5761 */ 68423701, -2079059883, -2079059947, 68423701, 85200917, 68423701, 68423701, 68423701, 68423701, 68423765,\n  /* 5771 */ -2079059883, 68425749, 68423703, 69488664, 85200919, 69488664, 69488664, 69488664, 69488664, 70537244,\n  /* 5781 */ 70537245, 70537245, 70537245, 70537309, 70537245, -2076946339, -2076946403, 70537245, -2076946339,\n  /* 5790 */ 70537245, 70537245, 70537245, 70537245, 70539293, -2022351745, -2022351745, -2022351617, -2022351745,\n  /* 5799 */ -2022351617, -2022351617, -2022351617, -2022351617, -2022351617, -2022351617, -2022351745, -2022351617,\n  /* 5807 */ -2022351617, 0, 0, 40, 67108864, 331776, 83886080, 0, 0, 59, 140224, 5505024, 5242880, -2080374784,\n  /* 5821 */ -2080374784, 268288, 29, 0, 284672, 0, 0, 68157440, 137363456, 0, 66, 66, 0, 63, 64, 351232, 63, 192,\n  /* 5839 */ 351232, 7340032, -2030043136, 0, 0, 0, 4194304, 1, 1024, 32, 64, 256, 32768, 65536, 512, 131072, 268435456,\n  /* 5856 */ 0, 0, 134348800, 134348800, 16, 4096, 262144, 1048576, 4194304, 8388608, 16777216, 33554432, 5242880, 0, 7,\n  /* 5871 */ 0, 0, 142606336, 0, -872415232, 0, 0, 0, 131072, 0, 0, 0, 999, 259072, 4194304, 25165824, 0, 20480, 0, 0,\n  /* 5891 */ 64, 256, 1536, 8192, 16384, 0, 12, 3145728, 0, 0, 0, 3145728, 64, 3072, 20480, 65536, 262144, 32, 192,\n  /* 5910 */ 3072, 20480, 4, 1048576, 0, 0, 128, 131072, 0, 134218752, 0, 0, 128, 134217728, 5242880, 0, 6, 0, 0, 16384,\n  /* 5930 */ 65536, 7340032, 50331648, 32, 192, 1024, 2048, 4096, 8192, 65536, 32768, 65536, 4194304, 16777216,\n  /* 5944 */ 0x80000000, 0, 0, 1, 4, 0, 0, 256, 1536, 65536, 65536, 2097152, 4194304, 50331648, 0x80000000, 32, 192,\n  /* 5961 */ 1024, 65536, 268435456, 0, 0, 32768, 4194304, 16777216, 0, 0, 184549376, 0, 0, 243269632, 0, 0, 32768,\n  /* 5978 */ 131072, 131072, 0, 32768, 32768, 1, 2, 4, 2097152, 16777216, 134217728, 268435456, 1073741824, 0x80000000,\n  /* 5992 */ 128, 2097152, 4194304, 50331648, 0, 0, 0, 8388608, 0, 0, 0, 768, 2, 4, 50331648, 0, 0, 536870912, 9216, 0,\n  /* 6012 */ 0, 0, 49152, 2, 4, 128, 50331648, 0, 0, 4096, 4194304, 268435456, 0, 0, 1075838976, 2097152, 2097152,\n  /* 6029 */ 268435456, 4194432, 268435968, 268435968, 1073743872, 268435968, 0, 128, 6144, 0, 229376, 128, 268435968,\n  /* 6042 */ 268436032, 256, 256, 536871168, 256, 256, 256, 256, 257, 256, 384, -1879046336, -1879046334, 1073744256,\n  /* 6056 */ -1879046334, -1879046326, -1879046334, -1879046334, -1879046326, -1879046326, -1845491902, -1878784182,\n  /* 6064 */ 268444480, 268444480, 268436288, 268436288, 268436288, 268436288, 268436289, 268444480, 268444480,\n  /* 6073 */ 268444480, 268444480, 2100318149, 2100318149, 2100318149, 2100318149, 2100326341, 2100326341, 2100318149,\n  /* 6082 */ 2100326341, 2100326341, 0, 0, 256, 2048, 2048, 0, 0, 0, 4, 8, 262144, 134217728, 1, 1024, 0, 4096, 0, 64,\n  /* 6102 */ 1856, 0x80000000, 0, 0, 256, 65536, 2432, 0, 1864, 0, 1, 2, 16, 32, 64, 0, 301989888, 0, 262144, 131072, 0,\n  /* 6123 */ 0, 832, 8192, 0, 1, 2, 56, 64, 896, 0, 1, 4036, 19939328, 2080374784, 2080374784, 0, 0, 0, 16252928, 1, 16,\n  /* 6144 */ 32, 128, 512, 2304, 0, 8, 0, 512, 301989888, 0, 0, 262144, 524288, 134217728, 536870912, 0, 24576, 0, 0, 0,\n  /* 6164 */ 33554432, 0, 0, 0, 32768, 0, 0, 2097152, 134217728, 0, 32768, 196608, 0, 0, 0, 1, 128, 512, 2048, 524288,\n  /* 6184 */ 268435456, 536870912, 0, 33554432, 262144, 8192, 0, 0, 256, 8388608, 0, 0, 1, 4, 128, 3584, 16384, 3145728,\n  /* 6202 */ 16777216, 67108864, 134217728, 805306368, 1073741824, 0, 0, 1024, 2048, 16384, 3145728, 0, 8192, 0, 8192,\n  /* 6217 */ 0, 536870912, 524288, 536870912, 1073741824, 0, 1, 2, 112, 128, 3072, 2048, 3145728, 16777216, 536870912,\n  /* 6232 */ 1073741824, 0, 0, 2097152, 16777216, 1073741824, 0, 0, 0, 8192, 8192, 8192, 9216, 33554432, 32768,\n  /* 6247 */ 33554432, 0, 0, 262144, 0, 16777216, 0, 16777216, 16777216, 16777216, 16777216, 0, 0, 2097152, 16777216, 0,\n  /* 6263 */ 0, 16777216, 268500992, 4243456, 0, 0, 512, 65536, 0, 4096, 4096, 0, 4096, 4096, 4096, 4096, 0, 0, 0, 32,\n  /* 6283 */ 0, 0, 0, 41, 0, 4243456, 4096, 12289, 1073754113, 12289, 12289, 1124073472, 12289, 12289, 1098920193,\n  /* 6298 */ 1098920193, 1124073488, 1124073472, 1124073472, 1258292224, 1124073472, 1124073474, 1124073472, 1124073472,\n  /* 6307 */ 1124073472, 1124073472, 1124073472, 1392574464, 1124073472, 12289, 1124085761, 1124085761, 1124085761,\n  /* 6316 */ 1124085761, 1132474625, 1098920209, 1132474625, 1132474625, 1098920209, 1132474625, 1132474625, 1132474625,\n  /* 6325 */ 1132474625, 1400975617, 1124085777, 1124085761, 1124085761, 1258304513, 2132360255, 2132360255, 2132622399,\n  /* 6334 */ 2132360255, 2132622399, 2132622399, 2140749119, 2141011263, 2132622399, 2132622399, 2132622399, 2132622399,\n  /* 6343 */ 2132360255, 2141011263, 2141011263, 0, 0, 512, 131072, 0, 128, 131072, 1024, 134217728, 0, 0, 0, 50331648,\n  /* 6359 */ 1073741824, 0, 1, 4, 64, 128, 3584, 318767104, 0, 0, 0, 268435456, 0, 12289, 0, 0, 0, 159383552, 25165824,\n  /* 6378 */ 0, 0, 0, 536870912, 0, 0, 0, 24576, 58720256, 0, 0, 12305, 13313, 0, 0, 0, 1073741824, 0, 0, 0, 12561, 0,\n  /* 6400 */ 78081, 327155712, 0, 0, 0, 1275068416, 0, 605247, 1058013184, 1073741824, 1073741824, 8388608, 0, 0,\n  /* 6414 */ 503616, 7864320, 867391, 1058013184, 1073741824, 0, 1, 6, 96, 384, 512, 1024, 4096, 8192, 16384, 229376,\n  /* 6430 */ 25165824, 33554432, 268435456, 536870912, 0, 867647, 1066401792, 0, 0, 0, 512, 1048576, 0, 0, 9, 8388608,\n  /* 6446 */ 12288, 0, 0, 0, 512, 2760704, 77824, 0, 0, 0, 1024, 2048, 3145728, 2048, 77824, 524288, 1048576, 0, 0, 0,\n  /* 6466 */ 512, 0, 1048576, 0, 1, 30, 32, 1024, 2048, 1024, 2048, 339968, 524288, 1048576, 16777216, 100663296,\n  /* 6482 */ 134217728, 805306368, 1073741824, 1024, 2048, 12288, 65536, 0, 65536, 0, 0, 19947520, 0, 0, 0, 16777216, 0,\n  /* 6499 */ 0, 0, 5, 1024, 2048, 12288, 327680, 524288, 33554432, 134217728, 536870912, 1073741824, 14, 16, 1024, 4096,\n  /* 6515 */ 8192, 229376, 0, 2, 16384, 4194304, 0x80000000, 0, 0, 0, 8, 0, 65536, 262144, 7340032, 50331648, 67108864,\n  /* 6532 */ 0x80000000, 4096, 65536, 262144, 524288, 1048576, 33554432, 256, 0, 256, 0, 256, 1, 12, 1024, 134217728,\n  /* 6548 */ 262144, 134217728, 536870912, 0, 0, 268435456, 1, 4, 8, 134217728, 4, 8, 536870912, 0, 2, 16, 64, 128, 0,\n  /* 6567 */ 0, 262144, 536870912, 0, 0, 1073741824, 32768, 0, 8, 32, 512, 4096, 9437184, 0, 0, 1048576, 2097152,\n  /* 6584 */ 4194304, 67108864, 134217728, 0, 1024, 137363456, 66, 25165824, 26214400, 92274688, 92274688, 25165952,\n  /* 6596 */ 92274688, 25165824, 25165824, 92274688, 25165824, 25165824, 92274688, 92274688, 92274720, 92274688,\n  /* 6606 */ 25165824, 92274688, 93323264, 25165890, 100721664, 100721664, 25165890, 100721928, 100721928, 100787464,\n  /* 6616 */ 100853000, 100721928, 100721928, 125977600, 125977600, 125977600, 125977600, 127026176, 125977600,\n  /* 6625 */ 125846528, 125846528, 125846560, 125846528, 125846528, 125846528, 126895104, 125846528, 125977600,\n  /* 6634 */ 127026176, 125977600, 125977600, 127026176, 127026176, 281843, 281843, 1330419, 281843, 1330419, 281843,\n  /* 6645 */ 1330419, 1330419, 281843, 281843, 281843, 5524723, 39079155, 72633587, 5524723, 5524723, 5524723, 5524723,\n  /* 6657 */ 93605107, 72633587, 72633587, 92556531, 93605107, 127290611, 127290611, 97799411, 127290611, 131484915, 0,\n  /* 6668 */ 0, 1536, 0x80000000, 0, 0, 17408, 33554432, 0, 1, 12, 1024, 262144, 0, 58624, 0, 0, 1536, 0, 189696, 0, 0,\n  /* 6689 */ 0, 1792, 0x80000000, 0, 148480, 50331648, 0, 1, 14, 1024, 4096, 65536, 524288, 240, 19456, 262144, 0, 0,\n  /* 6707 */ 19456, 262144, 0, 4194304, 0, 0, 1024, 2097152, 0, 0, 0, 150528, 0, 0, 0, 512, 4096, 8192, 131072, 0,\n  /* 6727 */ 57344, 0, 0, 0, 2048, 100663296, 0, 0, 256, 0, 65536, 524288, 1048576, 33554432, 67108864, 2, 48, 64, 128,\n  /* 6746 */ 3072, 16384, 262144, 0, 0, 32, 4096, 8192, 131072, 1048576, 8388608, 33554432, 134217728, 2048, 262144, 0,\n  /* 6762 */ 0, 2048, 268435456, 16, 64, 128, 262144, 0, 0, 32768, 65536, 131072, 0, 1, 2, 16, 64, 0\n];\n\nXQueryParser.TOKEN =\n[\n  \"(0)\",\n  \"PragmaContents\",\n  \"DirCommentContents\",\n  \"DirPIContents\",\n  \"CDataSection\",\n  \"Wildcard\",\n  \"EQName\",\n  \"URILiteral\",\n  \"IntegerLiteral\",\n  \"DecimalLiteral\",\n  \"DoubleLiteral\",\n  \"StringLiteral\",\n  \"PredefinedEntityRef\",\n  \"'\\\"\\\"'\",\n  \"EscapeApos\",\n  \"ElementContentChar\",\n  \"QuotAttrContentChar\",\n  \"AposAttrContentChar\",\n  \"PITarget\",\n  \"NCName\",\n  \"QName\",\n  \"S\",\n  \"S\",\n  \"CharRef\",\n  \"CommentContents\",\n  \"EOF\",\n  \"'!'\",\n  \"'!='\",\n  \"'\\\"'\",\n  \"'#'\",\n  \"'#)'\",\n  \"'$'\",\n  \"'%'\",\n  \"''''\",\n  \"'('\",\n  \"'(#'\",\n  \"'(:'\",\n  \"')'\",\n  \"'*'\",\n  \"'*'\",\n  \"'+'\",\n  \"','\",\n  \"'-'\",\n  \"'-->'\",\n  \"'.'\",\n  \"'..'\",\n  \"'/'\",\n  \"'//'\",\n  \"'/>'\",\n  \"':'\",\n  \"':)'\",\n  \"'::'\",\n  \"':='\",\n  \"';'\",\n  \"'<'\",\n  \"'<!--'\",\n  \"'</'\",\n  \"'<<'\",\n  \"'<='\",\n  \"'<?'\",\n  \"'='\",\n  \"'>'\",\n  \"'>='\",\n  \"'>>'\",\n  \"'?'\",\n  \"'?>'\",\n  \"'@'\",\n  \"'NaN'\",\n  \"'['\",\n  \"']'\",\n  \"'after'\",\n  \"'all'\",\n  \"'allowing'\",\n  \"'ancestor'\",\n  \"'ancestor-or-self'\",\n  \"'and'\",\n  \"'any'\",\n  \"'append'\",\n  \"'array'\",\n  \"'as'\",\n  \"'ascending'\",\n  \"'at'\",\n  \"'attribute'\",\n  \"'base-uri'\",\n  \"'before'\",\n  \"'boundary-space'\",\n  \"'break'\",\n  \"'by'\",\n  \"'case'\",\n  \"'cast'\",\n  \"'castable'\",\n  \"'catch'\",\n  \"'check'\",\n  \"'child'\",\n  \"'collation'\",\n  \"'collection'\",\n  \"'comment'\",\n  \"'constraint'\",\n  \"'construction'\",\n  \"'contains'\",\n  \"'content'\",\n  \"'context'\",\n  \"'continue'\",\n  \"'copy'\",\n  \"'copy-namespaces'\",\n  \"'count'\",\n  \"'decimal-format'\",\n  \"'decimal-separator'\",\n  \"'declare'\",\n  \"'default'\",\n  \"'delete'\",\n  \"'descendant'\",\n  \"'descendant-or-self'\",\n  \"'descending'\",\n  \"'diacritics'\",\n  \"'different'\",\n  \"'digit'\",\n  \"'distance'\",\n  \"'div'\",\n  \"'document'\",\n  \"'document-node'\",\n  \"'element'\",\n  \"'else'\",\n  \"'empty'\",\n  \"'empty-sequence'\",\n  \"'encoding'\",\n  \"'end'\",\n  \"'entire'\",\n  \"'eq'\",\n  \"'every'\",\n  \"'exactly'\",\n  \"'except'\",\n  \"'exit'\",\n  \"'external'\",\n  \"'first'\",\n  \"'following'\",\n  \"'following-sibling'\",\n  \"'for'\",\n  \"'foreach'\",\n  \"'foreign'\",\n  \"'from'\",\n  \"'ft-option'\",\n  \"'ftand'\",\n  \"'ftnot'\",\n  \"'ftor'\",\n  \"'function'\",\n  \"'ge'\",\n  \"'greatest'\",\n  \"'group'\",\n  \"'grouping-separator'\",\n  \"'gt'\",\n  \"'idiv'\",\n  \"'if'\",\n  \"'import'\",\n  \"'in'\",\n  \"'index'\",\n  \"'infinity'\",\n  \"'inherit'\",\n  \"'insensitive'\",\n  \"'insert'\",\n  \"'instance'\",\n  \"'integrity'\",\n  \"'intersect'\",\n  \"'into'\",\n  \"'is'\",\n  \"'item'\",\n  \"'json'\",\n  \"'json-item'\",\n  \"'key'\",\n  \"'language'\",\n  \"'last'\",\n  \"'lax'\",\n  \"'le'\",\n  \"'least'\",\n  \"'let'\",\n  \"'levels'\",\n  \"'loop'\",\n  \"'lowercase'\",\n  \"'lt'\",\n  \"'minus-sign'\",\n  \"'mod'\",\n  \"'modify'\",\n  \"'module'\",\n  \"'most'\",\n  \"'namespace'\",\n  \"'namespace-node'\",\n  \"'ne'\",\n  \"'next'\",\n  \"'no'\",\n  \"'no-inherit'\",\n  \"'no-preserve'\",\n  \"'node'\",\n  \"'nodes'\",\n  \"'not'\",\n  \"'object'\",\n  \"'occurs'\",\n  \"'of'\",\n  \"'on'\",\n  \"'only'\",\n  \"'option'\",\n  \"'or'\",\n  \"'order'\",\n  \"'ordered'\",\n  \"'ordering'\",\n  \"'paragraph'\",\n  \"'paragraphs'\",\n  \"'parent'\",\n  \"'pattern-separator'\",\n  \"'per-mille'\",\n  \"'percent'\",\n  \"'phrase'\",\n  \"'position'\",\n  \"'preceding'\",\n  \"'preceding-sibling'\",\n  \"'preserve'\",\n  \"'previous'\",\n  \"'processing-instruction'\",\n  \"'relationship'\",\n  \"'rename'\",\n  \"'replace'\",\n  \"'return'\",\n  \"'returning'\",\n  \"'revalidation'\",\n  \"'same'\",\n  \"'satisfies'\",\n  \"'schema'\",\n  \"'schema-attribute'\",\n  \"'schema-element'\",\n  \"'score'\",\n  \"'self'\",\n  \"'sensitive'\",\n  \"'sentence'\",\n  \"'sentences'\",\n  \"'skip'\",\n  \"'sliding'\",\n  \"'some'\",\n  \"'stable'\",\n  \"'start'\",\n  \"'stemming'\",\n  \"'stop'\",\n  \"'strict'\",\n  \"'strip'\",\n  \"'structured-item'\",\n  \"'switch'\",\n  \"'text'\",\n  \"'then'\",\n  \"'thesaurus'\",\n  \"'times'\",\n  \"'to'\",\n  \"'treat'\",\n  \"'try'\",\n  \"'tumbling'\",\n  \"'type'\",\n  \"'typeswitch'\",\n  \"'union'\",\n  \"'unique'\",\n  \"'unordered'\",\n  \"'updating'\",\n  \"'uppercase'\",\n  \"'using'\",\n  \"'validate'\",\n  \"'value'\",\n  \"'variable'\",\n  \"'version'\",\n  \"'weight'\",\n  \"'when'\",\n  \"'where'\",\n  \"'while'\",\n  \"'wildcards'\",\n  \"'window'\",\n  \"'with'\",\n  \"'without'\",\n  \"'word'\",\n  \"'words'\",\n  \"'xquery'\",\n  \"'zero-digit'\",\n  \"'{'\",\n  \"'{{'\",\n  \"'{|'\",\n  \"'|'\",\n  \"'||'\",\n  \"'|}'\",\n  \"'}'\",\n  \"'}}'\"\n];\n\n// End\n\n},{}],\"/node_modules/xqlint/lib/tree_ops.js\":[function(_dereq_,module,exports){\n'use strict';\n\nexports.TreeOps = {\n    flatten: function(node){\n        var that = this;\n        var value = '';\n        if(!node) {\n            throw new Error('Invalid node found');\n        } else if (node.value === undefined) {\n            node.children.forEach(function(child){\n                value += that.flatten(child);\n            });\n        } else {\n            value += node.value;\n        }\n        return value;\n    },\n    \n    concat: function(obj1, obj2, copy){\n        var result = copy ? {} : obj1;\n        if(copy){\n            Object.keys(obj1).forEach(function(key){\n                result[key] = obj1[key];\n            });\n        }\n        var keys = Object.keys(obj2);\n        keys.forEach(function(key){\n            result[key] = obj2[key];\n        });\n        return result;\n    },\n    \n    removeParentPtr: function(ast){\n        if(ast.getParent !== undefined) {\n            delete ast.getParent;\n        }\n        for(var i in ast.children) {\n            var child = ast.children[i];\n            this.removeParentPtr(child);\n        }\n    },\n    \n    inRange: function(p, pos, exclusive){\n        if(p && p.sl <= pos.line && pos.line <= p.el) {\n            if(p.sl < pos.line && pos.line < p.el) {\n                return true;\n            } else if(p.sl === pos.line && pos.line < p.el) {\n                return p.sc <= pos.col;\n            } else if(p.sl === pos.line && p.el === pos.line) {\n                return p.sc <= pos.col && pos.col <= p.ec + (exclusive ? 1 : 0);\n            } else if(p.sl < pos.line && p.el === pos.line) {\n                return pos.col <= p.ec + (exclusive ? 1 : 0);\n            }\n        }\n    },\n    \n    findNode: function(ast, pos) {\n        if(!ast) {\n            return;\n        }\n        var p = ast.pos;\n        if(this.inRange(p, pos) === true) {\n            for(var i in ast.children) {\n                var child = ast.children[i];\n                var n = this.findNode(child, pos);\n                if(n !== undefined) {\n                    return n;\n                }\n            }\n            return ast;\n        } else {\n            return;\n        }\n    },\n    \n    astAsXML: function(node, indent){\n        var result =  '';\n        indent = indent ? indent : '';\n        if(node.value) {\n            result += (indent + '<' + node.name + '>' + node.value + '</' + node.name + '>\\n');\n        }\n        result += indent + '<' + node.name + '>\\n';\n        var that = this;\n        node.children.forEach(function(child){\n            result += that.astAsXML(child, indent + '  ');\n        });\n        result += indent + '</' + node.name + '>\\n';\n        return result;\n    }\n};\n},{}],\"/node_modules/xqlint/lib/xqdoc/parse_comment.js\":[function(_dereq_,module,exports){\n'use strict';\n\nexports.parseComment = function(comment){\n    comment = comment.trim();\n    var isXQDoc = comment.substring(0, 3) === '(:~';\n    if(isXQDoc){\n        var lines = comment.split('\\n');\n        var ann = {\n            description: ''\n        };\n        lines.forEach(function(line, index){\n            if(index === 0) {\n                line = line.substring(3);\n            }\n            line = line.trim();\n            if(line[0] === ':') {\n                line = line.substring(1);\n            }\n            line = line.trim();\n            ann.description += ' ' + line;\n        });\n        ann.description = ann.description.trim();\n        ann.description = ann.description.substring(0, ann.description.length - 2).trim();\n        return ann;\n    }\n};\n},{}],\"/node_modules/xqlint/lib/xqdoc/xqdoc.js\":[function(_dereq_,module,exports){\nvar _ = _dereq_('lodash');\nvar parseComment = _dereq_('./parse_comment').parseComment;\n\nexports.XQDoc = function(ast){\n    'use strict';\n\n    var doc = {};\n\n    this.getDoc = function(){\n        return doc;\n    };\n\n    this.WS = function(node){\n        if(node.value.trim().substring(0, 3) === '(:~') {\n            node.getParent.comment = parseComment(node.value);\n        }\n    };\n\n    this.AnnotatedDecl = function(node){\n        this.visitChildren(node);\n        node.comment = node.getParent.comment;\n        node.getParent.comment = undefined;\n    };\n    \n    this.XQuery = function(node){\n        this.visitChildren(node);\n    };\n\n    this.getXQDoc = function(sctx){\n        var doc = {\n            moduleNamespace: sctx.moduleNamespace,\n            description: sctx.description,\n            variables: [],\n            functions: []\n        };\n\n        _.forEach(sctx.variables, function(variable){\n            var varDecl = _.cloneDeep(variable.qname);\n            varDecl.annotations = variable.annotations;\n            varDecl.description = variable.description;\n            varDecl.type = variable.type;\n            varDecl.occurrence = variable.occurrence;\n            doc.variables.push(varDecl);\n        });\n\n        _.forEach(sctx.functions, function(fn, key){\n            if(key.substring(0, 'http://www.w3.org/2001/XMLSchema#'.length) === 'http://www.w3.org/2001/XMLSchema#') {\n                return;\n            }\n\n            var tokens = key.split('#');\n            doc.functions.push({\n                name: tokens[0],\n                uri: tokens[1],\n                params: fn.params\n            });\n        });\n\n        return doc;\n    };\n\n    this.visit = function (node) {\n        var name = node.name;\n        var skip = false;\n\n        if (typeof this[name] === 'function') {\n            skip = this[name](node) === true;\n        }\n\n        if (!skip) {\n            this.visitChildren(node);\n        }\n    };\n\n    this.visitChildren = function (node, handler) {\n        for (var i = 0; i < node.children.length; i++) {\n            var child = node.children[i];\n            if (handler !== undefined && typeof handler[child.name] === 'function') {\n                handler[child.name](child);\n            } else {\n                this.visit(child);\n            }\n        }\n    };\n\n    this.visit(ast);\n};\n\n},{\"./parse_comment\":\"/node_modules/xqlint/lib/xqdoc/parse_comment.js\",\"lodash\":\"/node_modules/xqlint/node_modules/lodash/index.js\"}],\"/node_modules/xqlint/lib/xqlint.js\":[function(_dereq_,module,exports){\n'use strict';\n\nvar _ = _dereq_('lodash');\n\nvar JSONiqParser = _dereq_('./parsers/JSONiqParser').JSONiqParser;\nvar XQueryParser = _dereq_('./parsers/XQueryParser').XQueryParser;\nvar JSONParseTreeHandler = _dereq_('./parsers/JSONParseTreeHandler').JSONParseTreeHandler;\nvar Translator = _dereq_('./compiler/translator').Translator;\nvar StyleChecker = _dereq_('./formatter/style_checker').StyleChecker;\nvar XQDoc = _dereq_('./xqdoc/xqdoc').XQDoc;\nvar completer = _dereq_('../lib/completion/completer');\nvar TreeOps = _dereq_('./tree_ops').TreeOps;\n\nvar createStaticContext = exports.createStaticContext = function(){\n    var StaticContext = _dereq_('./compiler/static_context').StaticContext;\n    return new StaticContext();\n};\n\nvar convertPosition = function (code, begin, end) {\n    var before = code.substring(0, begin);\n    var after = code.substring(0, end);\n    var startline = before.split('\\n').length;\n    var startcolumn = begin - before.lastIndexOf('\\n');\n    var endline = after.split('\\n').length;\n    var endcolumn = end - after.lastIndexOf('\\n');\n    var pos = {\n        sl: startline - 1,\n        sc: startcolumn - 1,\n        el: endline - 1,\n        ec: endcolumn - 1\n    };\n    return pos;\n};\n\nexports.JSONiqLexer = _dereq_('./lexers/jsoniq_lexer').JSONiqLexer;\nexports.XQueryLexer = _dereq_('./lexers/xquery_lexer').XQueryLexer;\nexports.XQLint = function (source, opts) {\n\n    //ACE editor worker hack\n    if(_.defaults) {\n        opts = _.defaults(opts ? opts : {}, { styleCheck: false });\n    }\n\n    var ast, xqdoc;\n    var sctx = opts.staticContext ? opts.staticContext : createStaticContext();\n\n    this.getAST = function () {\n        return ast;\n    };\n    \n    this.printAST = function () {\n        return TreeOps.astAsXML(ast, '  ');\n    };\n\n    this.getXQDoc = function () {\n        return xqdoc.getXQDoc(sctx);\n    };\n\n    var markers = [];\n    this.getMarkers = function () {\n        return markers;\n    };\n    \n    this.getMarkers = function(type){\n        var m = [];\n        markers.forEach(function(marker){\n            if(marker.type === type || type === undefined){\n                m.push(marker);\n            }\n        });\n        return m;\n    };\n\n    this.getErrors = function(){\n        return this.getMarkers('error');\n    };\n\n    this.getWarnings = function(){\n        return this.getMarkers('warning');\n    };\n    \n    this.getCompletions = function(pos){\n        return completer.complete(source, ast, sctx, pos);\n    };\n\n    var syntaxError = false;\n    this.hasSyntaxError = function () {\n        return syntaxError;\n    };\n\n    var file = opts.fileName ? opts.fileName : '';\n    var isJSONiq = ((file.substring(file.length - '.jq'.length).indexOf('.jq') !== -1) && source.indexOf('xquery version') !== 0) || source.indexOf('jsoniq version') === 0;\n    var h = new JSONParseTreeHandler(source);\n    var parser = isJSONiq ? new JSONiqParser(source, h) : new XQueryParser(source, h);\n    try {\n        parser.parse_XQuery();\n    } catch (e) {\n        if (e instanceof parser.ParseException) {\n            syntaxError = true;\n            h.closeParseTree();\n            var pos = convertPosition(source, e.getBegin(), e.getEnd());\n            var message = parser.getErrorMessage(e);\n            if (pos.sc === pos.ec) {\n                pos.ec++;\n            }\n            markers.push({\n                pos: pos,\n                type: 'error',\n                level: 'error',\n                message: message\n            });\n        } else {\n            throw e;\n        }\n    }\n    ast = h.getParseTree();\n    if(opts.styleCheck) {\n        markers = markers.concat(new StyleChecker(ast, source).getMarkers());\n    }\n    xqdoc = new XQDoc(ast);\n    var translator = new Translator(sctx, ast);\n    markers = markers.concat(translator.getMarkers());\n};\n\n},{\"../lib/completion/completer\":\"/node_modules/xqlint/lib/completion/completer.js\",\"./compiler/static_context\":\"/node_modules/xqlint/lib/compiler/static_context.js\",\"./compiler/translator\":\"/node_modules/xqlint/lib/compiler/translator.js\",\"./formatter/style_checker\":\"/node_modules/xqlint/lib/formatter/style_checker.js\",\"./lexers/jsoniq_lexer\":\"/node_modules/xqlint/lib/lexers/jsoniq_lexer.js\",\"./lexers/xquery_lexer\":\"/node_modules/xqlint/lib/lexers/xquery_lexer.js\",\"./parsers/JSONParseTreeHandler\":\"/node_modules/xqlint/lib/parsers/JSONParseTreeHandler.js\",\"./parsers/JSONiqParser\":\"/node_modules/xqlint/lib/parsers/JSONiqParser.js\",\"./parsers/XQueryParser\":\"/node_modules/xqlint/lib/parsers/XQueryParser.js\",\"./tree_ops\":\"/node_modules/xqlint/lib/tree_ops.js\",\"./xqdoc/xqdoc\":\"/node_modules/xqlint/lib/xqdoc/xqdoc.js\",\"lodash\":\"/node_modules/xqlint/node_modules/lodash/index.js\"}],\"/node_modules/xqlint/node_modules/lodash/index.js\":[function(_dereq_,module,exports){\n(function (global){\n/**\n * @license\n * lodash 3.10.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern -d -o ./index.js`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n;(function() {\n\n  /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n  var undefined;\n\n  /** Used as the semantic version number. */\n  var VERSION = '3.10.1';\n\n  /** Used to compose bitmasks for wrapper metadata. */\n  var BIND_FLAG = 1,\n      BIND_KEY_FLAG = 2,\n      CURRY_BOUND_FLAG = 4,\n      CURRY_FLAG = 8,\n      CURRY_RIGHT_FLAG = 16,\n      PARTIAL_FLAG = 32,\n      PARTIAL_RIGHT_FLAG = 64,\n      ARY_FLAG = 128,\n      REARG_FLAG = 256;\n\n  /** Used as default options for `_.trunc`. */\n  var DEFAULT_TRUNC_LENGTH = 30,\n      DEFAULT_TRUNC_OMISSION = '...';\n\n  /** Used to detect when a function becomes hot. */\n  var HOT_COUNT = 150,\n      HOT_SPAN = 16;\n\n  /** Used as the size to enable large array optimizations. */\n  var LARGE_ARRAY_SIZE = 200;\n\n  /** Used to indicate the type of lazy iteratees. */\n  var LAZY_FILTER_FLAG = 1,\n      LAZY_MAP_FLAG = 2;\n\n  /** Used as the `TypeError` message for \"Functions\" methods. */\n  var FUNC_ERROR_TEXT = 'Expected a function';\n\n  /** Used as the internal argument placeholder. */\n  var PLACEHOLDER = '__lodash_placeholder__';\n\n  /** `Object#toString` result references. */\n  var argsTag = '[object Arguments]',\n      arrayTag = '[object Array]',\n      boolTag = '[object Boolean]',\n      dateTag = '[object Date]',\n      errorTag = '[object Error]',\n      funcTag = '[object Function]',\n      mapTag = '[object Map]',\n      numberTag = '[object Number]',\n      objectTag = '[object Object]',\n      regexpTag = '[object RegExp]',\n      setTag = '[object Set]',\n      stringTag = '[object String]',\n      weakMapTag = '[object WeakMap]';\n\n  var arrayBufferTag = '[object ArrayBuffer]',\n      float32Tag = '[object Float32Array]',\n      float64Tag = '[object Float64Array]',\n      int8Tag = '[object Int8Array]',\n      int16Tag = '[object Int16Array]',\n      int32Tag = '[object Int32Array]',\n      uint8Tag = '[object Uint8Array]',\n      uint8ClampedTag = '[object Uint8ClampedArray]',\n      uint16Tag = '[object Uint16Array]',\n      uint32Tag = '[object Uint32Array]';\n\n  /** Used to match empty string literals in compiled template source. */\n  var reEmptyStringLeading = /\\b__p \\+= '';/g,\n      reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n      reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n  /** Used to match HTML entities and HTML characters. */\n  var reEscapedHtml = /&(?:amp|lt|gt|quot|#39|#96);/g,\n      reUnescapedHtml = /[&<>\"'`]/g,\n      reHasEscapedHtml = RegExp(reEscapedHtml.source),\n      reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n  /** Used to match template delimiters. */\n  var reEscape = /<%-([\\s\\S]+?)%>/g,\n      reEvaluate = /<%([\\s\\S]+?)%>/g,\n      reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n  /** Used to match property names within property paths. */\n  var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\n\\\\]|\\\\.)*?\\1)\\]/,\n      reIsPlainProp = /^\\w*$/,\n      rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\n\\\\]|\\\\.)*?)\\2)\\]/g;\n\n  /**\n   * Used to match `RegExp` [syntax characters](http://ecma-international.org/ecma-262/6.0/#sec-patterns)\n   * and those outlined by [`EscapeRegExpPattern`](http://ecma-international.org/ecma-262/6.0/#sec-escaperegexppattern).\n   */\n  var reRegExpChars = /^[:!,]|[\\\\^$.*+?()[\\]{}|\\/]|(^[0-9a-fA-Fnrtuvx])|([\\n\\r\\u2028\\u2029])/g,\n      reHasRegExpChars = RegExp(reRegExpChars.source);\n\n  /** Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). */\n  var reComboMark = /[\\u0300-\\u036f\\ufe20-\\ufe23]/g;\n\n  /** Used to match backslashes in property paths. */\n  var reEscapeChar = /\\\\(\\\\)?/g;\n\n  /** Used to match [ES template delimiters](http://ecma-international.org/ecma-262/6.0/#sec-template-literal-lexical-components). */\n  var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n  /** Used to match `RegExp` flags from their coerced string values. */\n  var reFlags = /\\w*$/;\n\n  /** Used to detect hexadecimal string values. */\n  var reHasHexPrefix = /^0[xX]/;\n\n  /** Used to detect host constructors (Safari > 5). */\n  var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n  /** Used to detect unsigned integer values. */\n  var reIsUint = /^\\d+$/;\n\n  /** Used to match latin-1 supplementary letters (excluding mathematical operators). */\n  var reLatin1 = /[\\xc0-\\xd6\\xd8-\\xde\\xdf-\\xf6\\xf8-\\xff]/g;\n\n  /** Used to ensure capturing order of template delimiters. */\n  var reNoMatch = /($^)/;\n\n  /** Used to match unescaped characters in compiled string literals. */\n  var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n  /** Used to match words to create compound words. */\n  var reWords = (function() {\n    var upper = '[A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde]',\n        lower = '[a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff]+';\n\n    return RegExp(upper + '+(?=' + upper + lower + ')|' + upper + '?' + lower + '|' + upper + '+|[0-9]+', 'g');\n  }());\n\n  /** Used to assign default `context` object properties. */\n  var contextProps = [\n    'Array', 'ArrayBuffer', 'Date', 'Error', 'Float32Array', 'Float64Array',\n    'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Math', 'Number',\n    'Object', 'RegExp', 'Set', 'String', '_', 'clearTimeout', 'isFinite',\n    'parseFloat', 'parseInt', 'setTimeout', 'TypeError', 'Uint8Array',\n    'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap'\n  ];\n\n  /** Used to make template sourceURLs easier to identify. */\n  var templateCounter = -1;\n\n  /** Used to identify `toStringTag` values of typed arrays. */\n  var typedArrayTags = {};\n  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n  typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n  typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n  typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n  typedArrayTags[uint32Tag] = true;\n  typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n  typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n  typedArrayTags[dateTag] = typedArrayTags[errorTag] =\n  typedArrayTags[funcTag] = typedArrayTags[mapTag] =\n  typedArrayTags[numberTag] = typedArrayTags[objectTag] =\n  typedArrayTags[regexpTag] = typedArrayTags[setTag] =\n  typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;\n\n  /** Used to identify `toStringTag` values supported by `_.clone`. */\n  var cloneableTags = {};\n  cloneableTags[argsTag] = cloneableTags[arrayTag] =\n  cloneableTags[arrayBufferTag] = cloneableTags[boolTag] =\n  cloneableTags[dateTag] = cloneableTags[float32Tag] =\n  cloneableTags[float64Tag] = cloneableTags[int8Tag] =\n  cloneableTags[int16Tag] = cloneableTags[int32Tag] =\n  cloneableTags[numberTag] = cloneableTags[objectTag] =\n  cloneableTags[regexpTag] = cloneableTags[stringTag] =\n  cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n  cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n  cloneableTags[errorTag] = cloneableTags[funcTag] =\n  cloneableTags[mapTag] = cloneableTags[setTag] =\n  cloneableTags[weakMapTag] = false;\n\n  /** Used to map latin-1 supplementary letters to basic latin letters. */\n  var deburredLetters = {\n    '\\xc0': 'A',  '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n    '\\xe0': 'a',  '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n    '\\xc7': 'C',  '\\xe7': 'c',\n    '\\xd0': 'D',  '\\xf0': 'd',\n    '\\xc8': 'E',  '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n    '\\xe8': 'e',  '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n    '\\xcC': 'I',  '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n    '\\xeC': 'i',  '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n    '\\xd1': 'N',  '\\xf1': 'n',\n    '\\xd2': 'O',  '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n    '\\xf2': 'o',  '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n    '\\xd9': 'U',  '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n    '\\xf9': 'u',  '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n    '\\xdd': 'Y',  '\\xfd': 'y', '\\xff': 'y',\n    '\\xc6': 'Ae', '\\xe6': 'ae',\n    '\\xde': 'Th', '\\xfe': 'th',\n    '\\xdf': 'ss'\n  };\n\n  /** Used to map characters to HTML entities. */\n  var htmlEscapes = {\n    '&': '&amp;',\n    '<': '&lt;',\n    '>': '&gt;',\n    '\"': '&quot;',\n    \"'\": '&#39;',\n    '`': '&#96;'\n  };\n\n  /** Used to map HTML entities to characters. */\n  var htmlUnescapes = {\n    '&amp;': '&',\n    '&lt;': '<',\n    '&gt;': '>',\n    '&quot;': '\"',\n    '&#39;': \"'\",\n    '&#96;': '`'\n  };\n\n  /** Used to determine if values are of the language type `Object`. */\n  var objectTypes = {\n    'function': true,\n    'object': true\n  };\n\n  /** Used to escape characters for inclusion in compiled regexes. */\n  var regexpEscapes = {\n    '0': 'x30', '1': 'x31', '2': 'x32', '3': 'x33', '4': 'x34',\n    '5': 'x35', '6': 'x36', '7': 'x37', '8': 'x38', '9': 'x39',\n    'A': 'x41', 'B': 'x42', 'C': 'x43', 'D': 'x44', 'E': 'x45', 'F': 'x46',\n    'a': 'x61', 'b': 'x62', 'c': 'x63', 'd': 'x64', 'e': 'x65', 'f': 'x66',\n    'n': 'x6e', 'r': 'x72', 't': 'x74', 'u': 'x75', 'v': 'x76', 'x': 'x78'\n  };\n\n  /** Used to escape characters for inclusion in compiled string literals. */\n  var stringEscapes = {\n    '\\\\': '\\\\',\n    \"'\": \"'\",\n    '\\n': 'n',\n    '\\r': 'r',\n    '\\u2028': 'u2028',\n    '\\u2029': 'u2029'\n  };\n\n  /** Detect free variable `exports`. */\n  var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n\n  /** Detect free variable `module`. */\n  var freeModule = objectTypes[typeof module] && module && !module.nodeType && module;\n\n  /** Detect free variable `global` from Node.js. */\n  var freeGlobal = freeExports && freeModule && typeof global == 'object' && global && global.Object && global;\n\n  /** Detect free variable `self`. */\n  var freeSelf = objectTypes[typeof self] && self && self.Object && self;\n\n  /** Detect free variable `window`. */\n  var freeWindow = objectTypes[typeof window] && window && window.Object && window;\n\n  /** Detect the popular CommonJS extension `module.exports`. */\n  var moduleExports = freeModule && freeModule.exports === freeExports && freeExports;\n\n  /**\n   * Used as a reference to the global object.\n   *\n   * The `this` value is used if it's the global object to avoid Greasemonkey's\n   * restricted `window` object, otherwise the `window` object is used.\n   */\n  var root = freeGlobal || ((freeWindow !== (this && this.window)) && freeWindow) || freeSelf || this;\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * The base implementation of `compareAscending` which compares values and\n   * sorts them in ascending order without guaranteeing a stable sort.\n   *\n   * @private\n   * @param {*} value The value to compare.\n   * @param {*} other The other value to compare.\n   * @returns {number} Returns the sort order indicator for `value`.\n   */\n  function baseCompareAscending(value, other) {\n    if (value !== other) {\n      var valIsNull = value === null,\n          valIsUndef = value === undefined,\n          valIsReflexive = value === value;\n\n      var othIsNull = other === null,\n          othIsUndef = other === undefined,\n          othIsReflexive = other === other;\n\n      if ((value > other && !othIsNull) || !valIsReflexive ||\n          (valIsNull && !othIsUndef && othIsReflexive) ||\n          (valIsUndef && othIsReflexive)) {\n        return 1;\n      }\n      if ((value < other && !valIsNull) || !othIsReflexive ||\n          (othIsNull && !valIsUndef && valIsReflexive) ||\n          (othIsUndef && valIsReflexive)) {\n        return -1;\n      }\n    }\n    return 0;\n  }\n\n  /**\n   * The base implementation of `_.findIndex` and `_.findLastIndex` without\n   * support for callback shorthands and `this` binding.\n   *\n   * @private\n   * @param {Array} array The array to search.\n   * @param {Function} predicate The function invoked per iteration.\n   * @param {boolean} [fromRight] Specify iterating from right to left.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseFindIndex(array, predicate, fromRight) {\n    var length = array.length,\n        index = fromRight ? length : -1;\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (predicate(array[index], index, array)) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * The base implementation of `_.indexOf` without support for binary searches.\n   *\n   * @private\n   * @param {Array} array The array to search.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseIndexOf(array, value, fromIndex) {\n    if (value !== value) {\n      return indexOfNaN(array, fromIndex);\n    }\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * The base implementation of `_.isFunction` without support for environments\n   * with incorrect `typeof` results.\n   *\n   * @private\n   * @param {*} value The value to check.\n   * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n   */\n  function baseIsFunction(value) {\n    // Avoid a Chakra JIT bug in compatibility modes of IE 11.\n    // See https://github.com/jashkenas/underscore/issues/1621 for more details.\n    return typeof value == 'function' || false;\n  }\n\n  /**\n   * Converts `value` to a string if it's not one. An empty string is returned\n   * for `null` or `undefined` values.\n   *\n   * @private\n   * @param {*} value The value to process.\n   * @returns {string} Returns the string.\n   */\n  function baseToString(value) {\n    return value == null ? '' : (value + '');\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimLeft` to get the index of the first character\n   * of `string` that is not found in `chars`.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @param {string} chars The characters to find.\n   * @returns {number} Returns the index of the first character not found in `chars`.\n   */\n  function charsLeftIndex(string, chars) {\n    var index = -1,\n        length = string.length;\n\n    while (++index < length && chars.indexOf(string.charAt(index)) > -1) {}\n    return index;\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimRight` to get the index of the last character\n   * of `string` that is not found in `chars`.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @param {string} chars The characters to find.\n   * @returns {number} Returns the index of the last character not found in `chars`.\n   */\n  function charsRightIndex(string, chars) {\n    var index = string.length;\n\n    while (index-- && chars.indexOf(string.charAt(index)) > -1) {}\n    return index;\n  }\n\n  /**\n   * Used by `_.sortBy` to compare transformed elements of a collection and stable\n   * sort them in ascending order.\n   *\n   * @private\n   * @param {Object} object The object to compare.\n   * @param {Object} other The other object to compare.\n   * @returns {number} Returns the sort order indicator for `object`.\n   */\n  function compareAscending(object, other) {\n    return baseCompareAscending(object.criteria, other.criteria) || (object.index - other.index);\n  }\n\n  /**\n   * Used by `_.sortByOrder` to compare multiple properties of a value to another\n   * and stable sort them.\n   *\n   * If `orders` is unspecified, all valuess are sorted in ascending order. Otherwise,\n   * a value is sorted in ascending order if its corresponding order is \"asc\", and\n   * descending if \"desc\".\n   *\n   * @private\n   * @param {Object} object The object to compare.\n   * @param {Object} other The other object to compare.\n   * @param {boolean[]} orders The order to sort by for each property.\n   * @returns {number} Returns the sort order indicator for `object`.\n   */\n  function compareMultiple(object, other, orders) {\n    var index = -1,\n        objCriteria = object.criteria,\n        othCriteria = other.criteria,\n        length = objCriteria.length,\n        ordersLength = orders.length;\n\n    while (++index < length) {\n      var result = baseCompareAscending(objCriteria[index], othCriteria[index]);\n      if (result) {\n        if (index >= ordersLength) {\n          return result;\n        }\n        var order = orders[index];\n        return result * ((order === 'asc' || order === true) ? 1 : -1);\n      }\n    }\n    // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n    // that causes it, under certain circumstances, to provide the same value for\n    // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n    // for more details.\n    //\n    // This also ensures a stable sort in V8 and other engines.\n    // See https://code.google.com/p/v8/issues/detail?id=90 for more details.\n    return object.index - other.index;\n  }\n\n  /**\n   * Used by `_.deburr` to convert latin-1 supplementary letters to basic latin letters.\n   *\n   * @private\n   * @param {string} letter The matched letter to deburr.\n   * @returns {string} Returns the deburred letter.\n   */\n  function deburrLetter(letter) {\n    return deburredLetters[letter];\n  }\n\n  /**\n   * Used by `_.escape` to convert characters to HTML entities.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  function escapeHtmlChar(chr) {\n    return htmlEscapes[chr];\n  }\n\n  /**\n   * Used by `_.escapeRegExp` to escape characters for inclusion in compiled regexes.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @param {string} leadingChar The capture group for a leading character.\n   * @param {string} whitespaceChar The capture group for a whitespace character.\n   * @returns {string} Returns the escaped character.\n   */\n  function escapeRegExpChar(chr, leadingChar, whitespaceChar) {\n    if (leadingChar) {\n      chr = regexpEscapes[chr];\n    } else if (whitespaceChar) {\n      chr = stringEscapes[chr];\n    }\n    return '\\\\' + chr;\n  }\n\n  /**\n   * Used by `_.template` to escape characters for inclusion in compiled string literals.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  function escapeStringChar(chr) {\n    return '\\\\' + stringEscapes[chr];\n  }\n\n  /**\n   * Gets the index at which the first occurrence of `NaN` is found in `array`.\n   *\n   * @private\n   * @param {Array} array The array to search.\n   * @param {number} fromIndex The index to search from.\n   * @param {boolean} [fromRight] Specify iterating from right to left.\n   * @returns {number} Returns the index of the matched `NaN`, else `-1`.\n   */\n  function indexOfNaN(array, fromIndex, fromRight) {\n    var length = array.length,\n        index = fromIndex + (fromRight ? 0 : -1);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      var other = array[index];\n      if (other !== other) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * Checks if `value` is object-like.\n   *\n   * @private\n   * @param {*} value The value to check.\n   * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n   */\n  function isObjectLike(value) {\n    return !!value && typeof value == 'object';\n  }\n\n  /**\n   * Used by `trimmedLeftIndex` and `trimmedRightIndex` to determine if a\n   * character code is whitespace.\n   *\n   * @private\n   * @param {number} charCode The character code to inspect.\n   * @returns {boolean} Returns `true` if `charCode` is whitespace, else `false`.\n   */\n  function isSpace(charCode) {\n    return ((charCode <= 160 && (charCode >= 9 && charCode <= 13) || charCode == 32 || charCode == 160) || charCode == 5760 || charCode == 6158 ||\n      (charCode >= 8192 && (charCode <= 8202 || charCode == 8232 || charCode == 8233 || charCode == 8239 || charCode == 8287 || charCode == 12288 || charCode == 65279)));\n  }\n\n  /**\n   * Replaces all `placeholder` elements in `array` with an internal placeholder\n   * and returns an array of their indexes.\n   *\n   * @private\n   * @param {Array} array The array to modify.\n   * @param {*} placeholder The placeholder to replace.\n   * @returns {Array} Returns the new array of placeholder indexes.\n   */\n  function replaceHolders(array, placeholder) {\n    var index = -1,\n        length = array.length,\n        resIndex = -1,\n        result = [];\n\n    while (++index < length) {\n      if (array[index] === placeholder) {\n        array[index] = PLACEHOLDER;\n        result[++resIndex] = index;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * An implementation of `_.uniq` optimized for sorted arrays without support\n   * for callback shorthands and `this` binding.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {Function} [iteratee] The function invoked per iteration.\n   * @returns {Array} Returns the new duplicate-value-free array.\n   */\n  function sortedUniq(array, iteratee) {\n    var seen,\n        index = -1,\n        length = array.length,\n        resIndex = -1,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index],\n          computed = iteratee ? iteratee(value, index, array) : value;\n\n      if (!index || seen !== computed) {\n        seen = computed;\n        result[++resIndex] = value;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimLeft` to get the index of the first non-whitespace\n   * character of `string`.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {number} Returns the index of the first non-whitespace character.\n   */\n  function trimmedLeftIndex(string) {\n    var index = -1,\n        length = string.length;\n\n    while (++index < length && isSpace(string.charCodeAt(index))) {}\n    return index;\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimRight` to get the index of the last non-whitespace\n   * character of `string`.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {number} Returns the index of the last non-whitespace character.\n   */\n  function trimmedRightIndex(string) {\n    var index = string.length;\n\n    while (index-- && isSpace(string.charCodeAt(index))) {}\n    return index;\n  }\n\n  /**\n   * Used by `_.unescape` to convert HTML entities to characters.\n   *\n   * @private\n   * @param {string} chr The matched character to unescape.\n   * @returns {string} Returns the unescaped character.\n   */\n  function unescapeHtmlChar(chr) {\n    return htmlUnescapes[chr];\n  }\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * Create a new pristine `lodash` function using the given `context` object.\n   *\n   * @static\n   * @memberOf _\n   * @category Utility\n   * @param {Object} [context=root] The context object.\n   * @returns {Function} Returns a new `lodash` function.\n   * @example\n   *\n   * _.mixin({ 'foo': _.constant('foo') });\n   *\n   * var lodash = _.runInContext();\n   * lodash.mixin({ 'bar': lodash.constant('bar') });\n   *\n   * _.isFunction(_.foo);\n   * // => true\n   * _.isFunction(_.bar);\n   * // => false\n   *\n   * lodash.isFunction(lodash.foo);\n   * // => false\n   * lodash.isFunction(lodash.bar);\n   * // => true\n   *\n   * // using `context` to mock `Date#getTime` use in `_.now`\n   * var mock = _.runInContext({\n   *   'Date': function() {\n   *     return { 'getTime': getTimeMock };\n   *   }\n   * });\n   *\n   * // or creating a suped-up `defer` in Node.js\n   * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n   */\n  function runInContext(context) {\n    // Avoid issues with some ES3 environments that attempt to use values, named\n    // after built-in constructors like `Object`, for the creation of literals.\n    // ES5 clears this up by stating that literals must use built-in constructors.\n    // See https://es5.github.io/#x11.1.5 for more details.\n    context = context ? _.defaults(root.Object(), context, _.pick(root, contextProps)) : root;\n\n    /** Native constructor references. */\n    var Array = context.Array,\n        Date = context.Date,\n        Error = context.Error,\n        Function = context.Function,\n        Math = context.Math,\n        Number = context.Number,\n        Object = context.Object,\n        RegExp = context.RegExp,\n        String = context.String,\n        TypeError = context.TypeError;\n\n    /** Used for native method references. */\n    var arrayProto = Array.prototype,\n        objectProto = Object.prototype,\n        stringProto = String.prototype;\n\n    /** Used to resolve the decompiled source of functions. */\n    var fnToString = Function.prototype.toString;\n\n    /** Used to check objects for own properties. */\n    var hasOwnProperty = objectProto.hasOwnProperty;\n\n    /** Used to generate unique IDs. */\n    var idCounter = 0;\n\n    /**\n     * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n     * of values.\n     */\n    var objToString = objectProto.toString;\n\n    /** Used to restore the original `_` reference in `_.noConflict`. */\n    var oldDash = root._;\n\n    /** Used to detect if a method is native. */\n    var reIsNative = RegExp('^' +\n      fnToString.call(hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n      .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n    );\n\n    /** Native method references. */\n    var ArrayBuffer = context.ArrayBuffer,\n        clearTimeout = context.clearTimeout,\n        parseFloat = context.parseFloat,\n        pow = Math.pow,\n        propertyIsEnumerable = objectProto.propertyIsEnumerable,\n        Set = getNative(context, 'Set'),\n        setTimeout = context.setTimeout,\n        splice = arrayProto.splice,\n        Uint8Array = context.Uint8Array,\n        WeakMap = getNative(context, 'WeakMap');\n\n    /* Native method references for those with the same name as other `lodash` methods. */\n    var nativeCeil = Math.ceil,\n        nativeCreate = getNative(Object, 'create'),\n        nativeFloor = Math.floor,\n        nativeIsArray = getNative(Array, 'isArray'),\n        nativeIsFinite = context.isFinite,\n        nativeKeys = getNative(Object, 'keys'),\n        nativeMax = Math.max,\n        nativeMin = Math.min,\n        nativeNow = getNative(Date, 'now'),\n        nativeParseInt = context.parseInt,\n        nativeRandom = Math.random;\n\n    /** Used as references for `-Infinity` and `Infinity`. */\n    var NEGATIVE_INFINITY = Number.NEGATIVE_INFINITY,\n        POSITIVE_INFINITY = Number.POSITIVE_INFINITY;\n\n    /** Used as references for the maximum length and index of an array. */\n    var MAX_ARRAY_LENGTH = 4294967295,\n        MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n        HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n    /**\n     * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n     * of an array-like value.\n     */\n    var MAX_SAFE_INTEGER = 9007199254740991;\n\n    /** Used to store function metadata. */\n    var metaMap = WeakMap && new WeakMap;\n\n    /** Used to lookup unminified function names. */\n    var realNames = {};\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` object which wraps `value` to enable implicit chaining.\n     * Methods that operate on and return arrays, collections, and functions can\n     * be chained together. Methods that retrieve a single value or may return a\n     * primitive value will automatically end the chain returning the unwrapped\n     * value. Explicit chaining may be enabled using `_.chain`. The execution of\n     * chained methods is lazy, that is, execution is deferred until `_#value`\n     * is implicitly or explicitly called.\n     *\n     * Lazy evaluation allows several methods to support shortcut fusion. Shortcut\n     * fusion is an optimization strategy which merge iteratee calls; this can help\n     * to avoid the creation of intermediate data structures and greatly reduce the\n     * number of iteratee executions.\n     *\n     * Chaining is supported in custom builds as long as the `_#value` method is\n     * directly or indirectly included in the build.\n     *\n     * In addition to lodash methods, wrappers have `Array` and `String` methods.\n     *\n     * The wrapper `Array` methods are:\n     * `concat`, `join`, `pop`, `push`, `reverse`, `shift`, `slice`, `sort`,\n     * `splice`, and `unshift`\n     *\n     * The wrapper `String` methods are:\n     * `replace` and `split`\n     *\n     * The wrapper methods that support shortcut fusion are:\n     * `compact`, `drop`, `dropRight`, `dropRightWhile`, `dropWhile`, `filter`,\n     * `first`, `initial`, `last`, `map`, `pluck`, `reject`, `rest`, `reverse`,\n     * `slice`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, `toArray`,\n     * and `where`\n     *\n     * The chainable wrapper methods are:\n     * `after`, `ary`, `assign`, `at`, `before`, `bind`, `bindAll`, `bindKey`,\n     * `callback`, `chain`, `chunk`, `commit`, `compact`, `concat`, `constant`,\n     * `countBy`, `create`, `curry`, `debounce`, `defaults`, `defaultsDeep`,\n     * `defer`, `delay`, `difference`, `drop`, `dropRight`, `dropRightWhile`,\n     * `dropWhile`, `fill`, `filter`, `flatten`, `flattenDeep`, `flow`, `flowRight`,\n     * `forEach`, `forEachRight`, `forIn`, `forInRight`, `forOwn`, `forOwnRight`,\n     * `functions`, `groupBy`, `indexBy`, `initial`, `intersection`, `invert`,\n     * `invoke`, `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`,\n     * `matchesProperty`, `memoize`, `merge`, `method`, `methodOf`, `mixin`,\n     * `modArgs`, `negate`, `omit`, `once`, `pairs`, `partial`, `partialRight`,\n     * `partition`, `pick`, `plant`, `pluck`, `property`, `propertyOf`, `pull`,\n     * `pullAt`, `push`, `range`, `rearg`, `reject`, `remove`, `rest`, `restParam`,\n     * `reverse`, `set`, `shuffle`, `slice`, `sort`, `sortBy`, `sortByAll`,\n     * `sortByOrder`, `splice`, `spread`, `take`, `takeRight`, `takeRightWhile`,\n     * `takeWhile`, `tap`, `throttle`, `thru`, `times`, `toArray`, `toPlainObject`,\n     * `transform`, `union`, `uniq`, `unshift`, `unzip`, `unzipWith`, `values`,\n     * `valuesIn`, `where`, `without`, `wrap`, `xor`, `zip`, `zipObject`, `zipWith`\n     *\n     * The wrapper methods that are **not** chainable by default are:\n     * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clone`, `cloneDeep`,\n     * `deburr`, `endsWith`, `escape`, `escapeRegExp`, `every`, `find`, `findIndex`,\n     * `findKey`, `findLast`, `findLastIndex`, `findLastKey`, `findWhere`, `first`,\n     * `floor`, `get`, `gt`, `gte`, `has`, `identity`, `includes`, `indexOf`,\n     * `inRange`, `isArguments`, `isArray`, `isBoolean`, `isDate`, `isElement`,\n     * `isEmpty`, `isEqual`, `isError`, `isFinite` `isFunction`, `isMatch`,\n     * `isNative`, `isNaN`, `isNull`, `isNumber`, `isObject`, `isPlainObject`,\n     * `isRegExp`, `isString`, `isUndefined`, `isTypedArray`, `join`, `kebabCase`,\n     * `last`, `lastIndexOf`, `lt`, `lte`, `max`, `min`, `noConflict`, `noop`,\n     * `now`, `pad`, `padLeft`, `padRight`, `parseInt`, `pop`, `random`, `reduce`,\n     * `reduceRight`, `repeat`, `result`, `round`, `runInContext`, `shift`, `size`,\n     * `snakeCase`, `some`, `sortedIndex`, `sortedLastIndex`, `startCase`,\n     * `startsWith`, `sum`, `template`, `trim`, `trimLeft`, `trimRight`, `trunc`,\n     * `unescape`, `uniqueId`, `value`, and `words`\n     *\n     * The wrapper method `sample` will return a wrapped value when `n` is provided,\n     * otherwise an unwrapped value is returned.\n     *\n     * @name _\n     * @constructor\n     * @category Chain\n     * @param {*} value The value to wrap in a `lodash` instance.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var wrapped = _([1, 2, 3]);\n     *\n     * // returns an unwrapped value\n     * wrapped.reduce(function(total, n) {\n     *   return total + n;\n     * });\n     * // => 6\n     *\n     * // returns a wrapped value\n     * var squares = wrapped.map(function(n) {\n     *   return n * n;\n     * });\n     *\n     * _.isArray(squares);\n     * // => false\n     *\n     * _.isArray(squares.value());\n     * // => true\n     */\n    function lodash(value) {\n      if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n        if (value instanceof LodashWrapper) {\n          return value;\n        }\n        if (hasOwnProperty.call(value, '__chain__') && hasOwnProperty.call(value, '__wrapped__')) {\n          return wrapperClone(value);\n        }\n      }\n      return new LodashWrapper(value);\n    }\n\n    /**\n     * The function whose prototype all chaining wrappers inherit from.\n     *\n     * @private\n     */\n    function baseLodash() {\n      // No operation performed.\n    }\n\n    /**\n     * The base constructor for creating `lodash` wrapper objects.\n     *\n     * @private\n     * @param {*} value The value to wrap.\n     * @param {boolean} [chainAll] Enable chaining for all wrapper methods.\n     * @param {Array} [actions=[]] Actions to peform to resolve the unwrapped value.\n     */\n    function LodashWrapper(value, chainAll, actions) {\n      this.__wrapped__ = value;\n      this.__actions__ = actions || [];\n      this.__chain__ = !!chainAll;\n    }\n\n    /**\n     * An object environment feature flags.\n     *\n     * @static\n     * @memberOf _\n     * @type Object\n     */\n    var support = lodash.support = {};\n\n    /**\n     * By default, the template delimiters used by lodash are like those in\n     * embedded Ruby (ERB). Change the following template settings to use\n     * alternative delimiters.\n     *\n     * @static\n     * @memberOf _\n     * @type Object\n     */\n    lodash.templateSettings = {\n\n      /**\n       * Used to detect `data` property values to be HTML-escaped.\n       *\n       * @memberOf _.templateSettings\n       * @type RegExp\n       */\n      'escape': reEscape,\n\n      /**\n       * Used to detect code to be evaluated.\n       *\n       * @memberOf _.templateSettings\n       * @type RegExp\n       */\n      'evaluate': reEvaluate,\n\n      /**\n       * Used to detect `data` property values to inject.\n       *\n       * @memberOf _.templateSettings\n       * @type RegExp\n       */\n      'interpolate': reInterpolate,\n\n      /**\n       * Used to reference the data object in the template text.\n       *\n       * @memberOf _.templateSettings\n       * @type string\n       */\n      'variable': '',\n\n      /**\n       * Used to import variables into the compiled template.\n       *\n       * @memberOf _.templateSettings\n       * @type Object\n       */\n      'imports': {\n\n        /**\n         * A reference to the `lodash` function.\n         *\n         * @memberOf _.templateSettings.imports\n         * @type Function\n         */\n        '_': lodash\n      }\n    };\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n     *\n     * @private\n     * @param {*} value The value to wrap.\n     */\n    function LazyWrapper(value) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__dir__ = 1;\n      this.__filtered__ = false;\n      this.__iteratees__ = [];\n      this.__takeCount__ = POSITIVE_INFINITY;\n      this.__views__ = [];\n    }\n\n    /**\n     * Creates a clone of the lazy wrapper object.\n     *\n     * @private\n     * @name clone\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the cloned `LazyWrapper` object.\n     */\n    function lazyClone() {\n      var result = new LazyWrapper(this.__wrapped__);\n      result.__actions__ = arrayCopy(this.__actions__);\n      result.__dir__ = this.__dir__;\n      result.__filtered__ = this.__filtered__;\n      result.__iteratees__ = arrayCopy(this.__iteratees__);\n      result.__takeCount__ = this.__takeCount__;\n      result.__views__ = arrayCopy(this.__views__);\n      return result;\n    }\n\n    /**\n     * Reverses the direction of lazy iteration.\n     *\n     * @private\n     * @name reverse\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the new reversed `LazyWrapper` object.\n     */\n    function lazyReverse() {\n      if (this.__filtered__) {\n        var result = new LazyWrapper(this);\n        result.__dir__ = -1;\n        result.__filtered__ = true;\n      } else {\n        result = this.clone();\n        result.__dir__ *= -1;\n      }\n      return result;\n    }\n\n    /**\n     * Extracts the unwrapped value from its lazy wrapper.\n     *\n     * @private\n     * @name value\n     * @memberOf LazyWrapper\n     * @returns {*} Returns the unwrapped value.\n     */\n    function lazyValue() {\n      var array = this.__wrapped__.value(),\n          dir = this.__dir__,\n          isArr = isArray(array),\n          isRight = dir < 0,\n          arrLength = isArr ? array.length : 0,\n          view = getView(0, arrLength, this.__views__),\n          start = view.start,\n          end = view.end,\n          length = end - start,\n          index = isRight ? end : (start - 1),\n          iteratees = this.__iteratees__,\n          iterLength = iteratees.length,\n          resIndex = 0,\n          takeCount = nativeMin(length, this.__takeCount__);\n\n      if (!isArr || arrLength < LARGE_ARRAY_SIZE || (arrLength == length && takeCount == length)) {\n        return baseWrapperValue((isRight && isArr) ? array.reverse() : array, this.__actions__);\n      }\n      var result = [];\n\n      outer:\n      while (length-- && resIndex < takeCount) {\n        index += dir;\n\n        var iterIndex = -1,\n            value = array[index];\n\n        while (++iterIndex < iterLength) {\n          var data = iteratees[iterIndex],\n              iteratee = data.iteratee,\n              type = data.type,\n              computed = iteratee(value);\n\n          if (type == LAZY_MAP_FLAG) {\n            value = computed;\n          } else if (!computed) {\n            if (type == LAZY_FILTER_FLAG) {\n              continue outer;\n            } else {\n              break outer;\n            }\n          }\n        }\n        result[resIndex++] = value;\n      }\n      return result;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a cache object to store key/value pairs.\n     *\n     * @private\n     * @static\n     * @name Cache\n     * @memberOf _.memoize\n     */\n    function MapCache() {\n      this.__data__ = {};\n    }\n\n    /**\n     * Removes `key` and its value from the cache.\n     *\n     * @private\n     * @name delete\n     * @memberOf _.memoize.Cache\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed successfully, else `false`.\n     */\n    function mapDelete(key) {\n      return this.has(key) && delete this.__data__[key];\n    }\n\n    /**\n     * Gets the cached value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf _.memoize.Cache\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the cached value.\n     */\n    function mapGet(key) {\n      return key == '__proto__' ? undefined : this.__data__[key];\n    }\n\n    /**\n     * Checks if a cached value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf _.memoize.Cache\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function mapHas(key) {\n      return key != '__proto__' && hasOwnProperty.call(this.__data__, key);\n    }\n\n    /**\n     * Sets `value` to `key` of the cache.\n     *\n     * @private\n     * @name set\n     * @memberOf _.memoize.Cache\n     * @param {string} key The key of the value to cache.\n     * @param {*} value The value to cache.\n     * @returns {Object} Returns the cache object.\n     */\n    function mapSet(key, value) {\n      if (key != '__proto__') {\n        this.__data__[key] = value;\n      }\n      return this;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     *\n     * Creates a cache object to store unique values.\n     *\n     * @private\n     * @param {Array} [values] The values to cache.\n     */\n    function SetCache(values) {\n      var length = values ? values.length : 0;\n\n      this.data = { 'hash': nativeCreate(null), 'set': new Set };\n      while (length--) {\n        this.push(values[length]);\n      }\n    }\n\n    /**\n     * Checks if `value` is in `cache` mimicking the return signature of\n     * `_.indexOf` by returning `0` if the value is found, else `-1`.\n     *\n     * @private\n     * @param {Object} cache The cache to search.\n     * @param {*} value The value to search for.\n     * @returns {number} Returns `0` if `value` is found, else `-1`.\n     */\n    function cacheIndexOf(cache, value) {\n      var data = cache.data,\n          result = (typeof value == 'string' || isObject(value)) ? data.set.has(value) : data.hash[value];\n\n      return result ? 0 : -1;\n    }\n\n    /**\n     * Adds `value` to the cache.\n     *\n     * @private\n     * @name push\n     * @memberOf SetCache\n     * @param {*} value The value to cache.\n     */\n    function cachePush(value) {\n      var data = this.data;\n      if (typeof value == 'string' || isObject(value)) {\n        data.set.add(value);\n      } else {\n        data.hash[value] = true;\n      }\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a new array joining `array` with `other`.\n     *\n     * @private\n     * @param {Array} array The array to join.\n     * @param {Array} other The other array to join.\n     * @returns {Array} Returns the new concatenated array.\n     */\n    function arrayConcat(array, other) {\n      var index = -1,\n          length = array.length,\n          othIndex = -1,\n          othLength = other.length,\n          result = Array(length + othLength);\n\n      while (++index < length) {\n        result[index] = array[index];\n      }\n      while (++othIndex < othLength) {\n        result[index++] = other[othIndex];\n      }\n      return result;\n    }\n\n    /**\n     * Copies the values of `source` to `array`.\n     *\n     * @private\n     * @param {Array} source The array to copy values from.\n     * @param {Array} [array=[]] The array to copy values to.\n     * @returns {Array} Returns `array`.\n     */\n    function arrayCopy(source, array) {\n      var index = -1,\n          length = source.length;\n\n      array || (array = Array(length));\n      while (++index < length) {\n        array[index] = source[index];\n      }\n      return array;\n    }\n\n    /**\n     * A specialized version of `_.forEach` for arrays without support for callback\n     * shorthands and `this` binding.\n     *\n     * @private\n     * @param {Array} array The array to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array} Returns `array`.\n     */\n    function arrayEach(array, iteratee) {\n      var index = -1,\n          length = array.length;\n\n      while (++index < length) {\n        if (iteratee(array[index], index, array) === false) {\n          break;\n        }\n      }\n      return array;\n    }\n\n    /**\n     * A specialized version of `_.forEachRight` for arrays without support for\n     * callback shorthands and `this` binding.\n     *\n     * @private\n     * @param {Array} array The array to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array} Returns `array`.\n     */\n    function arrayEachRight(array, iteratee) {\n      var length = array.length;\n\n      while (length--) {\n        if (iteratee(array[length], length, array) === false) {\n          break;\n        }\n      }\n      return array;\n    }\n\n    /**\n     * A specialized version of `_.every` for arrays without support for callback\n     * shorthands and `this` binding.\n     *\n     * @private\n     * @param {Array} array The array to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`.\n     */\n    function arrayEvery(array, predicate) {\n      var index = -1,\n          length = array.length;\n\n      while (++index < length) {\n        if (!predicate(array[index], index, array)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * A specialized version of `baseExtremum` for arrays which invokes `iteratee`\n     * with one argument: (value).\n     *\n     * @private\n     * @param {Array} array The array to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} comparator The function used to compare values.\n     * @param {*} exValue The initial extremum value.\n     * @returns {*} Returns the extremum value.\n     */\n    function arrayExtremum(array, iteratee, comparator, exValue) {\n      var index = -1,\n          length = array.length,\n          computed = exValue,\n          result = computed;\n\n      while (++index < length) {\n        var value = array[index],\n            current = +iteratee(value);\n\n        if (comparator(current, computed)) {\n          computed = current;\n          result = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * A specialized version of `_.filter` for arrays without support for callback\n     * shorthands and `this` binding.\n     *\n     * @private\n     * @param {Array} array The array to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     */\n    function arrayFilter(array, predicate) {\n      var index = -1,\n          length = array.length,\n          resIndex = -1,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index];\n        if (predicate(value, index, array)) {\n          result[++resIndex] = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * A specialized version of `_.map` for arrays without support for callback\n     * shorthands and `this` binding.\n     *\n     * @private\n     * @param {Array} array The array to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     */\n    function arrayMap(array, iteratee) {\n      var index = -1,\n          length = array.length,\n          result = Array(length);\n\n      while (++index < length) {\n        result[index] = iteratee(array[index], index, array);\n      }\n      return result;\n    }\n\n    /**\n     * Appends the elements of `values` to `array`.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to append.\n     * @returns {Array} Returns `array`.\n     */\n    function arrayPush(array, values) {\n      var index = -1,\n          length = values.length,\n          offset = array.length;\n\n      while (++index < length) {\n        array[offset + index] = values[index];\n      }\n      return array;\n    }\n\n    /**\n     * A specialized version of `_.reduce` for arrays without support for callback\n     * shorthands and `this` binding.\n     *\n     * @private\n     * @param {Array} array The array to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @param {boolean} [initFromArray] Specify using the first element of `array`\n     *  as the initial value.\n     * @returns {*} Returns the accumulated value.\n     */\n    function arrayReduce(array, iteratee, accumulator, initFromArray) {\n      var index = -1,\n          length = array.length;\n\n      if (initFromArray && length) {\n        accumulator = array[++index];\n      }\n      while (++index < length) {\n        accumulator = iteratee(accumulator, array[index], index, array);\n      }\n      return accumulator;\n    }\n\n    /**\n     * A specialized version of `_.reduceRight` for arrays without support for\n     * callback shorthands and `this` binding.\n     *\n     * @private\n     * @param {Array} array The array to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @param {boolean} [initFromArray] Specify using the last element of `array`\n     *  as the initial value.\n     * @returns {*} Returns the accumulated value.\n     */\n    function arrayReduceRight(array, iteratee, accumulator, initFromArray) {\n      var length = array.length;\n      if (initFromArray && length) {\n        accumulator = array[--length];\n      }\n      while (length--) {\n        accumulator = iteratee(accumulator, array[length], length, array);\n      }\n      return accumulator;\n    }\n\n    /**\n     * A specialized version of `_.some` for arrays without support for callback\n     * shorthands and `this` binding.\n     *\n     * @private\n     * @param {Array} array The array to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     */\n    function arraySome(array, predicate) {\n      var index = -1,\n          length = array.length;\n\n      while (++index < length) {\n        if (predicate(array[index], index, array)) {\n          return true;\n        }\n      }\n      return false;\n    }\n\n    /**\n     * A specialized version of `_.sum` for arrays without support for callback\n     * shorthands and `this` binding..\n     *\n     * @private\n     * @param {Array} array The array to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {number} Returns the sum.\n     */\n    function arraySum(array, iteratee) {\n      var length = array.length,\n          result = 0;\n\n      while (length--) {\n        result += +iteratee(array[length]) || 0;\n      }\n      return result;\n    }\n\n    /**\n     * Used by `_.defaults` to customize its `_.assign` use.\n     *\n     * @private\n     * @param {*} objectValue The destination object property value.\n     * @param {*} sourceValue The source object property value.\n     * @returns {*} Returns the value to assign to the destination object.\n     */\n    function assignDefaults(objectValue, sourceValue) {\n      return objectValue === undefined ? sourceValue : objectValue;\n    }\n\n    /**\n     * Used by `_.template` to customize its `_.assign` use.\n     *\n     * **Note:** This function is like `assignDefaults` except that it ignores\n     * inherited property values when checking if a property is `undefined`.\n     *\n     * @private\n     * @param {*} objectValue The destination object property value.\n     * @param {*} sourceValue The source object property value.\n     * @param {string} key The key associated with the object and source values.\n     * @param {Object} object The destination object.\n     * @returns {*} Returns the value to assign to the destination object.\n     */\n    function assignOwnDefaults(objectValue, sourceValue, key, object) {\n      return (objectValue === undefined || !hasOwnProperty.call(object, key))\n        ? sourceValue\n        : objectValue;\n    }\n\n    /**\n     * A specialized version of `_.assign` for customizing assigned values without\n     * support for argument juggling, multiple sources, and `this` binding `customizer`\n     * functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {Function} customizer The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     */\n    function assignWith(object, source, customizer) {\n      var index = -1,\n          props = keys(source),\n          length = props.length;\n\n      while (++index < length) {\n        var key = props[index],\n            value = object[key],\n            result = customizer(value, source[key], key, object, source);\n\n        if ((result === result ? (result !== value) : (value === value)) ||\n            (value === undefined && !(key in object))) {\n          object[key] = result;\n        }\n      }\n      return object;\n    }\n\n    /**\n     * The base implementation of `_.assign` without support for argument juggling,\n     * multiple sources, and `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @returns {Object} Returns `object`.\n     */\n    function baseAssign(object, source) {\n      return source == null\n        ? object\n        : baseCopy(source, keys(source), object);\n    }\n\n    /**\n     * The base implementation of `_.at` without support for string collections\n     * and individual key arguments.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {number[]|string[]} props The property names or indexes of elements to pick.\n     * @returns {Array} Returns the new array of picked elements.\n     */\n    function baseAt(collection, props) {\n      var index = -1,\n          isNil = collection == null,\n          isArr = !isNil && isArrayLike(collection),\n          length = isArr ? collection.length : 0,\n          propsLength = props.length,\n          result = Array(propsLength);\n\n      while(++index < propsLength) {\n        var key = props[index];\n        if (isArr) {\n          result[index] = isIndex(key, length) ? collection[key] : undefined;\n        } else {\n          result[index] = isNil ? undefined : collection[key];\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Copies properties of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy properties from.\n     * @param {Array} props The property names to copy.\n     * @param {Object} [object={}] The object to copy properties to.\n     * @returns {Object} Returns `object`.\n     */\n    function baseCopy(source, props, object) {\n      object || (object = {});\n\n      var index = -1,\n          length = props.length;\n\n      while (++index < length) {\n        var key = props[index];\n        object[key] = source[key];\n      }\n      return object;\n    }\n\n    /**\n     * The base implementation of `_.callback` which supports specifying the\n     * number of arguments to provide to `func`.\n     *\n     * @private\n     * @param {*} [func=_.identity] The value to convert to a callback.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {number} [argCount] The number of arguments to provide to `func`.\n     * @returns {Function} Returns the callback.\n     */\n    function baseCallback(func, thisArg, argCount) {\n      var type = typeof func;\n      if (type == 'function') {\n        return thisArg === undefined\n          ? func\n          : bindCallback(func, thisArg, argCount);\n      }\n      if (func == null) {\n        return identity;\n      }\n      if (type == 'object') {\n        return baseMatches(func);\n      }\n      return thisArg === undefined\n        ? property(func)\n        : baseMatchesProperty(func, thisArg);\n    }\n\n    /**\n     * The base implementation of `_.clone` without support for argument juggling\n     * and `this` binding `customizer` functions.\n     *\n     * @private\n     * @param {*} value The value to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @param {Function} [customizer] The function to customize cloning values.\n     * @param {string} [key] The key of `value`.\n     * @param {Object} [object] The object `value` belongs to.\n     * @param {Array} [stackA=[]] Tracks traversed source objects.\n     * @param {Array} [stackB=[]] Associates clones with source counterparts.\n     * @returns {*} Returns the cloned value.\n     */\n    function baseClone(value, isDeep, customizer, key, object, stackA, stackB) {\n      var result;\n      if (customizer) {\n        result = object ? customizer(value, key, object) : customizer(value);\n      }\n      if (result !== undefined) {\n        return result;\n      }\n      if (!isObject(value)) {\n        return value;\n      }\n      var isArr = isArray(value);\n      if (isArr) {\n        result = initCloneArray(value);\n        if (!isDeep) {\n          return arrayCopy(value, result);\n        }\n      } else {\n        var tag = objToString.call(value),\n            isFunc = tag == funcTag;\n\n        if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n          result = initCloneObject(isFunc ? {} : value);\n          if (!isDeep) {\n            return baseAssign(result, value);\n          }\n        } else {\n          return cloneableTags[tag]\n            ? initCloneByTag(value, tag, isDeep)\n            : (object ? value : {});\n        }\n      }\n      // Check for circular references and return its corresponding clone.\n      stackA || (stackA = []);\n      stackB || (stackB = []);\n\n      var length = stackA.length;\n      while (length--) {\n        if (stackA[length] == value) {\n          return stackB[length];\n        }\n      }\n      // Add the source value to the stack of traversed objects and associate it with its clone.\n      stackA.push(value);\n      stackB.push(result);\n\n      // Recursively populate clone (susceptible to call stack limits).\n      (isArr ? arrayEach : baseForOwn)(value, function(subValue, key) {\n        result[key] = baseClone(subValue, isDeep, customizer, key, value, stackA, stackB);\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.create` without support for assigning\n     * properties to the created object.\n     *\n     * @private\n     * @param {Object} prototype The object to inherit from.\n     * @returns {Object} Returns the new object.\n     */\n    var baseCreate = (function() {\n      function object() {}\n      return function(prototype) {\n        if (isObject(prototype)) {\n          object.prototype = prototype;\n          var result = new object;\n          object.prototype = undefined;\n        }\n        return result || {};\n      };\n    }());\n\n    /**\n     * The base implementation of `_.delay` and `_.defer` which accepts an index\n     * of where to slice the arguments to provide to `func`.\n     *\n     * @private\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {Object} args The arguments provide to `func`.\n     * @returns {number} Returns the timer id.\n     */\n    function baseDelay(func, wait, args) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return setTimeout(function() { func.apply(undefined, args); }, wait);\n    }\n\n    /**\n     * The base implementation of `_.difference` which accepts a single array\n     * of values to exclude.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Array} values The values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     */\n    function baseDifference(array, values) {\n      var length = array ? array.length : 0,\n          result = [];\n\n      if (!length) {\n        return result;\n      }\n      var index = -1,\n          indexOf = getIndexOf(),\n          isCommon = indexOf == baseIndexOf,\n          cache = (isCommon && values.length >= LARGE_ARRAY_SIZE) ? createCache(values) : null,\n          valuesLength = values.length;\n\n      if (cache) {\n        indexOf = cacheIndexOf;\n        isCommon = false;\n        values = cache;\n      }\n      outer:\n      while (++index < length) {\n        var value = array[index];\n\n        if (isCommon && value === value) {\n          var valuesIndex = valuesLength;\n          while (valuesIndex--) {\n            if (values[valuesIndex] === value) {\n              continue outer;\n            }\n          }\n          result.push(value);\n        }\n        else if (indexOf(values, value, 0) < 0) {\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.forEach` without support for callback\n     * shorthands and `this` binding.\n     *\n     * @private\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array|Object|string} Returns `collection`.\n     */\n    var baseEach = createBaseEach(baseForOwn);\n\n    /**\n     * The base implementation of `_.forEachRight` without support for callback\n     * shorthands and `this` binding.\n     *\n     * @private\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array|Object|string} Returns `collection`.\n     */\n    var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n    /**\n     * The base implementation of `_.every` without support for callback\n     * shorthands and `this` binding.\n     *\n     * @private\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`\n     */\n    function baseEvery(collection, predicate) {\n      var result = true;\n      baseEach(collection, function(value, index, collection) {\n        result = !!predicate(value, index, collection);\n        return result;\n      });\n      return result;\n    }\n\n    /**\n     * Gets the extremum value of `collection` invoking `iteratee` for each value\n     * in `collection` to generate the criterion by which the value is ranked.\n     * The `iteratee` is invoked with three arguments: (value, index|key, collection).\n     *\n     * @private\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} comparator The function used to compare values.\n     * @param {*} exValue The initial extremum value.\n     * @returns {*} Returns the extremum value.\n     */\n    function baseExtremum(collection, iteratee, comparator, exValue) {\n      var computed = exValue,\n          result = computed;\n\n      baseEach(collection, function(value, index, collection) {\n        var current = +iteratee(value, index, collection);\n        if (comparator(current, computed) || (current === exValue && current === result)) {\n          computed = current;\n          result = value;\n        }\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.fill` without an iteratee call guard.\n     *\n     * @private\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     */\n    function baseFill(array, value, start, end) {\n      var length = array.length;\n\n      start = start == null ? 0 : (+start || 0);\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = (end === undefined || end > length) ? length : (+end || 0);\n      if (end < 0) {\n        end += length;\n      }\n      length = start > end ? 0 : (end >>> 0);\n      start >>>= 0;\n\n      while (start < length) {\n        array[start++] = value;\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.filter` without support for callback\n     * shorthands and `this` binding.\n     *\n     * @private\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     */\n    function baseFilter(collection, predicate) {\n      var result = [];\n      baseEach(collection, function(value, index, collection) {\n        if (predicate(value, index, collection)) {\n          result.push(value);\n        }\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.find`, `_.findLast`, `_.findKey`, and `_.findLastKey`,\n     * without support for callback shorthands and `this` binding, which iterates\n     * over `collection` using the provided `eachFunc`.\n     *\n     * @private\n     * @param {Array|Object|string} collection The collection to search.\n     * @param {Function} predicate The function invoked per iteration.\n     * @param {Function} eachFunc The function to iterate over `collection`.\n     * @param {boolean} [retKey] Specify returning the key of the found element\n     *  instead of the element itself.\n     * @returns {*} Returns the found element or its key, else `undefined`.\n     */\n    function baseFind(collection, predicate, eachFunc, retKey) {\n      var result;\n      eachFunc(collection, function(value, key, collection) {\n        if (predicate(value, key, collection)) {\n          result = retKey ? key : value;\n          return false;\n        }\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.flatten` with added support for restricting\n     * flattening and specifying the start index.\n     *\n     * @private\n     * @param {Array} array The array to flatten.\n     * @param {boolean} [isDeep] Specify a deep flatten.\n     * @param {boolean} [isStrict] Restrict flattening to arrays-like objects.\n     * @param {Array} [result=[]] The initial result value.\n     * @returns {Array} Returns the new flattened array.\n     */\n    function baseFlatten(array, isDeep, isStrict, result) {\n      result || (result = []);\n\n      var index = -1,\n          length = array.length;\n\n      while (++index < length) {\n        var value = array[index];\n        if (isObjectLike(value) && isArrayLike(value) &&\n            (isStrict || isArray(value) || isArguments(value))) {\n          if (isDeep) {\n            // Recursively flatten arrays (susceptible to call stack limits).\n            baseFlatten(value, isDeep, isStrict, result);\n          } else {\n            arrayPush(result, value);\n          }\n        } else if (!isStrict) {\n          result[result.length] = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `baseForIn` and `baseForOwn` which iterates\n     * over `object` properties returned by `keysFunc` invoking `iteratee` for\n     * each property. Iteratee functions may exit iteration early by explicitly\n     * returning `false`.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @returns {Object} Returns `object`.\n     */\n    var baseFor = createBaseFor();\n\n    /**\n     * This function is like `baseFor` except that it iterates over properties\n     * in the opposite order.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @returns {Object} Returns `object`.\n     */\n    var baseForRight = createBaseFor(true);\n\n    /**\n     * The base implementation of `_.forIn` without support for callback\n     * shorthands and `this` binding.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     */\n    function baseForIn(object, iteratee) {\n      return baseFor(object, iteratee, keysIn);\n    }\n\n    /**\n     * The base implementation of `_.forOwn` without support for callback\n     * shorthands and `this` binding.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     */\n    function baseForOwn(object, iteratee) {\n      return baseFor(object, iteratee, keys);\n    }\n\n    /**\n     * The base implementation of `_.forOwnRight` without support for callback\n     * shorthands and `this` binding.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     */\n    function baseForOwnRight(object, iteratee) {\n      return baseForRight(object, iteratee, keys);\n    }\n\n    /**\n     * The base implementation of `_.functions` which creates an array of\n     * `object` function property names filtered from those provided.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Array} props The property names to filter.\n     * @returns {Array} Returns the new array of filtered property names.\n     */\n    function baseFunctions(object, props) {\n      var index = -1,\n          length = props.length,\n          resIndex = -1,\n          result = [];\n\n      while (++index < length) {\n        var key = props[index];\n        if (isFunction(object[key])) {\n          result[++resIndex] = key;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `get` without support for string paths\n     * and default values.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array} path The path of the property to get.\n     * @param {string} [pathKey] The key representation of path.\n     * @returns {*} Returns the resolved value.\n     */\n    function baseGet(object, path, pathKey) {\n      if (object == null) {\n        return;\n      }\n      if (pathKey !== undefined && pathKey in toObject(object)) {\n        path = [pathKey];\n      }\n      var index = 0,\n          length = path.length;\n\n      while (object != null && index < length) {\n        object = object[path[index++]];\n      }\n      return (index && index == length) ? object : undefined;\n    }\n\n    /**\n     * The base implementation of `_.isEqual` without support for `this` binding\n     * `customizer` functions.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @param {Function} [customizer] The function to customize comparing values.\n     * @param {boolean} [isLoose] Specify performing partial comparisons.\n     * @param {Array} [stackA] Tracks traversed `value` objects.\n     * @param {Array} [stackB] Tracks traversed `other` objects.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     */\n    function baseIsEqual(value, other, customizer, isLoose, stackA, stackB) {\n      if (value === other) {\n        return true;\n      }\n      if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) {\n        return value !== value && other !== other;\n      }\n      return baseIsEqualDeep(value, other, baseIsEqual, customizer, isLoose, stackA, stackB);\n    }\n\n    /**\n     * A specialized version of `baseIsEqual` for arrays and objects which performs\n     * deep comparisons and tracks traversed objects enabling objects with circular\n     * references to be compared.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Function} [customizer] The function to customize comparing objects.\n     * @param {boolean} [isLoose] Specify performing partial comparisons.\n     * @param {Array} [stackA=[]] Tracks traversed `value` objects.\n     * @param {Array} [stackB=[]] Tracks traversed `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function baseIsEqualDeep(object, other, equalFunc, customizer, isLoose, stackA, stackB) {\n      var objIsArr = isArray(object),\n          othIsArr = isArray(other),\n          objTag = arrayTag,\n          othTag = arrayTag;\n\n      if (!objIsArr) {\n        objTag = objToString.call(object);\n        if (objTag == argsTag) {\n          objTag = objectTag;\n        } else if (objTag != objectTag) {\n          objIsArr = isTypedArray(object);\n        }\n      }\n      if (!othIsArr) {\n        othTag = objToString.call(other);\n        if (othTag == argsTag) {\n          othTag = objectTag;\n        } else if (othTag != objectTag) {\n          othIsArr = isTypedArray(other);\n        }\n      }\n      var objIsObj = objTag == objectTag,\n          othIsObj = othTag == objectTag,\n          isSameTag = objTag == othTag;\n\n      if (isSameTag && !(objIsArr || objIsObj)) {\n        return equalByTag(object, other, objTag);\n      }\n      if (!isLoose) {\n        var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n            othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n        if (objIsWrapped || othIsWrapped) {\n          return equalFunc(objIsWrapped ? object.value() : object, othIsWrapped ? other.value() : other, customizer, isLoose, stackA, stackB);\n        }\n      }\n      if (!isSameTag) {\n        return false;\n      }\n      // Assume cyclic values are equal.\n      // For more information on detecting circular references see https://es5.github.io/#JO.\n      stackA || (stackA = []);\n      stackB || (stackB = []);\n\n      var length = stackA.length;\n      while (length--) {\n        if (stackA[length] == object) {\n          return stackB[length] == other;\n        }\n      }\n      // Add `object` and `other` to the stack of traversed objects.\n      stackA.push(object);\n      stackB.push(other);\n\n      var result = (objIsArr ? equalArrays : equalObjects)(object, other, equalFunc, customizer, isLoose, stackA, stackB);\n\n      stackA.pop();\n      stackB.pop();\n\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.isMatch` without support for callback\n     * shorthands and `this` binding.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Array} matchData The propery names, values, and compare flags to match.\n     * @param {Function} [customizer] The function to customize comparing objects.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     */\n    function baseIsMatch(object, matchData, customizer) {\n      var index = matchData.length,\n          length = index,\n          noCustomizer = !customizer;\n\n      if (object == null) {\n        return !length;\n      }\n      object = toObject(object);\n      while (index--) {\n        var data = matchData[index];\n        if ((noCustomizer && data[2])\n              ? data[1] !== object[data[0]]\n              : !(data[0] in object)\n            ) {\n          return false;\n        }\n      }\n      while (++index < length) {\n        data = matchData[index];\n        var key = data[0],\n            objValue = object[key],\n            srcValue = data[1];\n\n        if (noCustomizer && data[2]) {\n          if (objValue === undefined && !(key in object)) {\n            return false;\n          }\n        } else {\n          var result = customizer ? customizer(objValue, srcValue, key) : undefined;\n          if (!(result === undefined ? baseIsEqual(srcValue, objValue, customizer, true) : result)) {\n            return false;\n          }\n        }\n      }\n      return true;\n    }\n\n    /**\n     * The base implementation of `_.map` without support for callback shorthands\n     * and `this` binding.\n     *\n     * @private\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     */\n    function baseMap(collection, iteratee) {\n      var index = -1,\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value, key, collection) {\n        result[++index] = iteratee(value, key, collection);\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.matches` which does not clone `source`.\n     *\n     * @private\n     * @param {Object} source The object of property values to match.\n     * @returns {Function} Returns the new function.\n     */\n    function baseMatches(source) {\n      var matchData = getMatchData(source);\n      if (matchData.length == 1 && matchData[0][2]) {\n        var key = matchData[0][0],\n            value = matchData[0][1];\n\n        return function(object) {\n          if (object == null) {\n            return false;\n          }\n          return object[key] === value && (value !== undefined || (key in toObject(object)));\n        };\n      }\n      return function(object) {\n        return baseIsMatch(object, matchData);\n      };\n    }\n\n    /**\n     * The base implementation of `_.matchesProperty` which does not clone `srcValue`.\n     *\n     * @private\n     * @param {string} path The path of the property to get.\n     * @param {*} srcValue The value to compare.\n     * @returns {Function} Returns the new function.\n     */\n    function baseMatchesProperty(path, srcValue) {\n      var isArr = isArray(path),\n          isCommon = isKey(path) && isStrictComparable(srcValue),\n          pathKey = (path + '');\n\n      path = toPath(path);\n      return function(object) {\n        if (object == null) {\n          return false;\n        }\n        var key = pathKey;\n        object = toObject(object);\n        if ((isArr || !isCommon) && !(key in object)) {\n          object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));\n          if (object == null) {\n            return false;\n          }\n          key = last(path);\n          object = toObject(object);\n        }\n        return object[key] === srcValue\n          ? (srcValue !== undefined || (key in object))\n          : baseIsEqual(srcValue, object[key], undefined, true);\n      };\n    }\n\n    /**\n     * The base implementation of `_.merge` without support for argument juggling,\n     * multiple sources, and `this` binding `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {Function} [customizer] The function to customize merged values.\n     * @param {Array} [stackA=[]] Tracks traversed source objects.\n     * @param {Array} [stackB=[]] Associates values with source counterparts.\n     * @returns {Object} Returns `object`.\n     */\n    function baseMerge(object, source, customizer, stackA, stackB) {\n      if (!isObject(object)) {\n        return object;\n      }\n      var isSrcArr = isArrayLike(source) && (isArray(source) || isTypedArray(source)),\n          props = isSrcArr ? undefined : keys(source);\n\n      arrayEach(props || source, function(srcValue, key) {\n        if (props) {\n          key = srcValue;\n          srcValue = source[key];\n        }\n        if (isObjectLike(srcValue)) {\n          stackA || (stackA = []);\n          stackB || (stackB = []);\n          baseMergeDeep(object, source, key, baseMerge, customizer, stackA, stackB);\n        }\n        else {\n          var value = object[key],\n              result = customizer ? customizer(value, srcValue, key, object, source) : undefined,\n              isCommon = result === undefined;\n\n          if (isCommon) {\n            result = srcValue;\n          }\n          if ((result !== undefined || (isSrcArr && !(key in object))) &&\n              (isCommon || (result === result ? (result !== value) : (value === value)))) {\n            object[key] = result;\n          }\n        }\n      });\n      return object;\n    }\n\n    /**\n     * A specialized version of `baseMerge` for arrays and objects which performs\n     * deep merges and tracks traversed objects enabling objects with circular\n     * references to be merged.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {string} key The key of the value to merge.\n     * @param {Function} mergeFunc The function to merge values.\n     * @param {Function} [customizer] The function to customize merged values.\n     * @param {Array} [stackA=[]] Tracks traversed source objects.\n     * @param {Array} [stackB=[]] Associates values with source counterparts.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function baseMergeDeep(object, source, key, mergeFunc, customizer, stackA, stackB) {\n      var length = stackA.length,\n          srcValue = source[key];\n\n      while (length--) {\n        if (stackA[length] == srcValue) {\n          object[key] = stackB[length];\n          return;\n        }\n      }\n      var value = object[key],\n          result = customizer ? customizer(value, srcValue, key, object, source) : undefined,\n          isCommon = result === undefined;\n\n      if (isCommon) {\n        result = srcValue;\n        if (isArrayLike(srcValue) && (isArray(srcValue) || isTypedArray(srcValue))) {\n          result = isArray(value)\n            ? value\n            : (isArrayLike(value) ? arrayCopy(value) : []);\n        }\n        else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n          result = isArguments(value)\n            ? toPlainObject(value)\n            : (isPlainObject(value) ? value : {});\n        }\n        else {\n          isCommon = false;\n        }\n      }\n      // Add the source value to the stack of traversed objects and associate\n      // it with its merged value.\n      stackA.push(srcValue);\n      stackB.push(result);\n\n      if (isCommon) {\n        // Recursively merge objects and arrays (susceptible to call stack limits).\n        object[key] = mergeFunc(result, srcValue, customizer, stackA, stackB);\n      } else if (result === result ? (result !== value) : (value === value)) {\n        object[key] = result;\n      }\n    }\n\n    /**\n     * The base implementation of `_.property` without support for deep paths.\n     *\n     * @private\n     * @param {string} key The key of the property to get.\n     * @returns {Function} Returns the new function.\n     */\n    function baseProperty(key) {\n      return function(object) {\n        return object == null ? undefined : object[key];\n      };\n    }\n\n    /**\n     * A specialized version of `baseProperty` which supports deep paths.\n     *\n     * @private\n     * @param {Array|string} path The path of the property to get.\n     * @returns {Function} Returns the new function.\n     */\n    function basePropertyDeep(path) {\n      var pathKey = (path + '');\n      path = toPath(path);\n      return function(object) {\n        return baseGet(object, path, pathKey);\n      };\n    }\n\n    /**\n     * The base implementation of `_.pullAt` without support for individual\n     * index arguments and capturing the removed elements.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {number[]} indexes The indexes of elements to remove.\n     * @returns {Array} Returns `array`.\n     */\n    function basePullAt(array, indexes) {\n      var length = array ? indexes.length : 0;\n      while (length--) {\n        var index = indexes[length];\n        if (index != previous && isIndex(index)) {\n          var previous = index;\n          splice.call(array, index, 1);\n        }\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.random` without support for argument juggling\n     * and returning floating-point numbers.\n     *\n     * @private\n     * @param {number} min The minimum possible value.\n     * @param {number} max The maximum possible value.\n     * @returns {number} Returns the random number.\n     */\n    function baseRandom(min, max) {\n      return min + nativeFloor(nativeRandom() * (max - min + 1));\n    }\n\n    /**\n     * The base implementation of `_.reduce` and `_.reduceRight` without support\n     * for callback shorthands and `this` binding, which iterates over `collection`\n     * using the provided `eachFunc`.\n     *\n     * @private\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {*} accumulator The initial value.\n     * @param {boolean} initFromCollection Specify using the first or last element\n     *  of `collection` as the initial value.\n     * @param {Function} eachFunc The function to iterate over `collection`.\n     * @returns {*} Returns the accumulated value.\n     */\n    function baseReduce(collection, iteratee, accumulator, initFromCollection, eachFunc) {\n      eachFunc(collection, function(value, index, collection) {\n        accumulator = initFromCollection\n          ? (initFromCollection = false, value)\n          : iteratee(accumulator, value, index, collection);\n      });\n      return accumulator;\n    }\n\n    /**\n     * The base implementation of `setData` without support for hot loop detection.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */\n    var baseSetData = !metaMap ? identity : function(func, data) {\n      metaMap.set(func, data);\n      return func;\n    };\n\n    /**\n     * The base implementation of `_.slice` without an iteratee call guard.\n     *\n     * @private\n     * @param {Array} array The array to slice.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function baseSlice(array, start, end) {\n      var index = -1,\n          length = array.length;\n\n      start = start == null ? 0 : (+start || 0);\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = (end === undefined || end > length) ? length : (+end || 0);\n      if (end < 0) {\n        end += length;\n      }\n      length = start > end ? 0 : ((end - start) >>> 0);\n      start >>>= 0;\n\n      var result = Array(length);\n      while (++index < length) {\n        result[index] = array[index + start];\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.some` without support for callback shorthands\n     * and `this` binding.\n     *\n     * @private\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     */\n    function baseSome(collection, predicate) {\n      var result;\n\n      baseEach(collection, function(value, index, collection) {\n        result = predicate(value, index, collection);\n        return !result;\n      });\n      return !!result;\n    }\n\n    /**\n     * The base implementation of `_.sortBy` which uses `comparer` to define\n     * the sort order of `array` and replaces criteria objects with their\n     * corresponding values.\n     *\n     * @private\n     * @param {Array} array The array to sort.\n     * @param {Function} comparer The function to define sort order.\n     * @returns {Array} Returns `array`.\n     */\n    function baseSortBy(array, comparer) {\n      var length = array.length;\n\n      array.sort(comparer);\n      while (length--) {\n        array[length] = array[length].value;\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.sortByOrder` without param guards.\n     *\n     * @private\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n     * @param {boolean[]} orders The sort orders of `iteratees`.\n     * @returns {Array} Returns the new sorted array.\n     */\n    function baseSortByOrder(collection, iteratees, orders) {\n      var callback = getCallback(),\n          index = -1;\n\n      iteratees = arrayMap(iteratees, function(iteratee) { return callback(iteratee); });\n\n      var result = baseMap(collection, function(value) {\n        var criteria = arrayMap(iteratees, function(iteratee) { return iteratee(value); });\n        return { 'criteria': criteria, 'index': ++index, 'value': value };\n      });\n\n      return baseSortBy(result, function(object, other) {\n        return compareMultiple(object, other, orders);\n      });\n    }\n\n    /**\n     * The base implementation of `_.sum` without support for callback shorthands\n     * and `this` binding.\n     *\n     * @private\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {number} Returns the sum.\n     */\n    function baseSum(collection, iteratee) {\n      var result = 0;\n      baseEach(collection, function(value, index, collection) {\n        result += +iteratee(value, index, collection) || 0;\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.uniq` without support for callback shorthands\n     * and `this` binding.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The function invoked per iteration.\n     * @returns {Array} Returns the new duplicate-value-free array.\n     */\n    function baseUniq(array, iteratee) {\n      var index = -1,\n          indexOf = getIndexOf(),\n          length = array.length,\n          isCommon = indexOf == baseIndexOf,\n          isLarge = isCommon && length >= LARGE_ARRAY_SIZE,\n          seen = isLarge ? createCache() : null,\n          result = [];\n\n      if (seen) {\n        indexOf = cacheIndexOf;\n        isCommon = false;\n      } else {\n        isLarge = false;\n        seen = iteratee ? [] : result;\n      }\n      outer:\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value, index, array) : value;\n\n        if (isCommon && value === value) {\n          var seenIndex = seen.length;\n          while (seenIndex--) {\n            if (seen[seenIndex] === computed) {\n              continue outer;\n            }\n          }\n          if (iteratee) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n        else if (indexOf(seen, computed, 0) < 0) {\n          if (iteratee || isLarge) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.values` and `_.valuesIn` which creates an\n     * array of `object` property values corresponding to the property names\n     * of `props`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array} props The property names to get values for.\n     * @returns {Object} Returns the array of property values.\n     */\n    function baseValues(object, props) {\n      var index = -1,\n          length = props.length,\n          result = Array(length);\n\n      while (++index < length) {\n        result[index] = object[props[index]];\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.dropRightWhile`, `_.dropWhile`, `_.takeRightWhile`,\n     * and `_.takeWhile` without support for callback shorthands and `this` binding.\n     *\n     * @private\n     * @param {Array} array The array to query.\n     * @param {Function} predicate The function invoked per iteration.\n     * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function baseWhile(array, predicate, isDrop, fromRight) {\n      var length = array.length,\n          index = fromRight ? length : -1;\n\n      while ((fromRight ? index-- : ++index < length) && predicate(array[index], index, array)) {}\n      return isDrop\n        ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n        : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n    }\n\n    /**\n     * The base implementation of `wrapperValue` which returns the result of\n     * performing a sequence of actions on the unwrapped `value`, where each\n     * successive action is supplied the return value of the previous.\n     *\n     * @private\n     * @param {*} value The unwrapped value.\n     * @param {Array} actions Actions to peform to resolve the unwrapped value.\n     * @returns {*} Returns the resolved value.\n     */\n    function baseWrapperValue(value, actions) {\n      var result = value;\n      if (result instanceof LazyWrapper) {\n        result = result.value();\n      }\n      var index = -1,\n          length = actions.length;\n\n      while (++index < length) {\n        var action = actions[index];\n        result = action.func.apply(action.thisArg, arrayPush([result], action.args));\n      }\n      return result;\n    }\n\n    /**\n     * Performs a binary search of `array` to determine the index at which `value`\n     * should be inserted into `array` in order to maintain its sort order.\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */\n    function binaryIndex(array, value, retHighest) {\n      var low = 0,\n          high = array ? array.length : low;\n\n      if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n        while (low < high) {\n          var mid = (low + high) >>> 1,\n              computed = array[mid];\n\n          if ((retHighest ? (computed <= value) : (computed < value)) && computed !== null) {\n            low = mid + 1;\n          } else {\n            high = mid;\n          }\n        }\n        return high;\n      }\n      return binaryIndexBy(array, value, identity, retHighest);\n    }\n\n    /**\n     * This function is like `binaryIndex` except that it invokes `iteratee` for\n     * `value` and each element of `array` to compute their sort ranking. The\n     * iteratee is invoked with one argument; (value).\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */\n    function binaryIndexBy(array, value, iteratee, retHighest) {\n      value = iteratee(value);\n\n      var low = 0,\n          high = array ? array.length : 0,\n          valIsNaN = value !== value,\n          valIsNull = value === null,\n          valIsUndef = value === undefined;\n\n      while (low < high) {\n        var mid = nativeFloor((low + high) / 2),\n            computed = iteratee(array[mid]),\n            isDef = computed !== undefined,\n            isReflexive = computed === computed;\n\n        if (valIsNaN) {\n          var setLow = isReflexive || retHighest;\n        } else if (valIsNull) {\n          setLow = isReflexive && isDef && (retHighest || computed != null);\n        } else if (valIsUndef) {\n          setLow = isReflexive && (retHighest || isDef);\n        } else if (computed == null) {\n          setLow = false;\n        } else {\n          setLow = retHighest ? (computed <= value) : (computed < value);\n        }\n        if (setLow) {\n          low = mid + 1;\n        } else {\n          high = mid;\n        }\n      }\n      return nativeMin(high, MAX_ARRAY_INDEX);\n    }\n\n    /**\n     * A specialized version of `baseCallback` which only supports `this` binding\n     * and specifying the number of arguments to provide to `func`.\n     *\n     * @private\n     * @param {Function} func The function to bind.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {number} [argCount] The number of arguments to provide to `func`.\n     * @returns {Function} Returns the callback.\n     */\n    function bindCallback(func, thisArg, argCount) {\n      if (typeof func != 'function') {\n        return identity;\n      }\n      if (thisArg === undefined) {\n        return func;\n      }\n      switch (argCount) {\n        case 1: return function(value) {\n          return func.call(thisArg, value);\n        };\n        case 3: return function(value, index, collection) {\n          return func.call(thisArg, value, index, collection);\n        };\n        case 4: return function(accumulator, value, index, collection) {\n          return func.call(thisArg, accumulator, value, index, collection);\n        };\n        case 5: return function(value, other, key, object, source) {\n          return func.call(thisArg, value, other, key, object, source);\n        };\n      }\n      return function() {\n        return func.apply(thisArg, arguments);\n      };\n    }\n\n    /**\n     * Creates a clone of the given array buffer.\n     *\n     * @private\n     * @param {ArrayBuffer} buffer The array buffer to clone.\n     * @returns {ArrayBuffer} Returns the cloned array buffer.\n     */\n    function bufferClone(buffer) {\n      var result = new ArrayBuffer(buffer.byteLength),\n          view = new Uint8Array(result);\n\n      view.set(new Uint8Array(buffer));\n      return result;\n    }\n\n    /**\n     * Creates an array that is the composition of partially applied arguments,\n     * placeholders, and provided arguments into a single array of arguments.\n     *\n     * @private\n     * @param {Array|Object} args The provided arguments.\n     * @param {Array} partials The arguments to prepend to those provided.\n     * @param {Array} holders The `partials` placeholder indexes.\n     * @returns {Array} Returns the new array of composed arguments.\n     */\n    function composeArgs(args, partials, holders) {\n      var holdersLength = holders.length,\n          argsIndex = -1,\n          argsLength = nativeMax(args.length - holdersLength, 0),\n          leftIndex = -1,\n          leftLength = partials.length,\n          result = Array(leftLength + argsLength);\n\n      while (++leftIndex < leftLength) {\n        result[leftIndex] = partials[leftIndex];\n      }\n      while (++argsIndex < holdersLength) {\n        result[holders[argsIndex]] = args[argsIndex];\n      }\n      while (argsLength--) {\n        result[leftIndex++] = args[argsIndex++];\n      }\n      return result;\n    }\n\n    /**\n     * This function is like `composeArgs` except that the arguments composition\n     * is tailored for `_.partialRight`.\n     *\n     * @private\n     * @param {Array|Object} args The provided arguments.\n     * @param {Array} partials The arguments to append to those provided.\n     * @param {Array} holders The `partials` placeholder indexes.\n     * @returns {Array} Returns the new array of composed arguments.\n     */\n    function composeArgsRight(args, partials, holders) {\n      var holdersIndex = -1,\n          holdersLength = holders.length,\n          argsIndex = -1,\n          argsLength = nativeMax(args.length - holdersLength, 0),\n          rightIndex = -1,\n          rightLength = partials.length,\n          result = Array(argsLength + rightLength);\n\n      while (++argsIndex < argsLength) {\n        result[argsIndex] = args[argsIndex];\n      }\n      var offset = argsIndex;\n      while (++rightIndex < rightLength) {\n        result[offset + rightIndex] = partials[rightIndex];\n      }\n      while (++holdersIndex < holdersLength) {\n        result[offset + holders[holdersIndex]] = args[argsIndex++];\n      }\n      return result;\n    }\n\n    /**\n     * Creates a `_.countBy`, `_.groupBy`, `_.indexBy`, or `_.partition` function.\n     *\n     * @private\n     * @param {Function} setter The function to set keys and values of the accumulator object.\n     * @param {Function} [initializer] The function to initialize the accumulator object.\n     * @returns {Function} Returns the new aggregator function.\n     */\n    function createAggregator(setter, initializer) {\n      return function(collection, iteratee, thisArg) {\n        var result = initializer ? initializer() : {};\n        iteratee = getCallback(iteratee, thisArg, 3);\n\n        if (isArray(collection)) {\n          var index = -1,\n              length = collection.length;\n\n          while (++index < length) {\n            var value = collection[index];\n            setter(result, value, iteratee(value, index, collection), collection);\n          }\n        } else {\n          baseEach(collection, function(value, key, collection) {\n            setter(result, value, iteratee(value, key, collection), collection);\n          });\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Creates a `_.assign`, `_.defaults`, or `_.merge` function.\n     *\n     * @private\n     * @param {Function} assigner The function to assign values.\n     * @returns {Function} Returns the new assigner function.\n     */\n    function createAssigner(assigner) {\n      return restParam(function(object, sources) {\n        var index = -1,\n            length = object == null ? 0 : sources.length,\n            customizer = length > 2 ? sources[length - 2] : undefined,\n            guard = length > 2 ? sources[2] : undefined,\n            thisArg = length > 1 ? sources[length - 1] : undefined;\n\n        if (typeof customizer == 'function') {\n          customizer = bindCallback(customizer, thisArg, 5);\n          length -= 2;\n        } else {\n          customizer = typeof thisArg == 'function' ? thisArg : undefined;\n          length -= (customizer ? 1 : 0);\n        }\n        if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n          customizer = length < 3 ? undefined : customizer;\n          length = 1;\n        }\n        while (++index < length) {\n          var source = sources[index];\n          if (source) {\n            assigner(object, source, customizer);\n          }\n        }\n        return object;\n      });\n    }\n\n    /**\n     * Creates a `baseEach` or `baseEachRight` function.\n     *\n     * @private\n     * @param {Function} eachFunc The function to iterate over a collection.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new base function.\n     */\n    function createBaseEach(eachFunc, fromRight) {\n      return function(collection, iteratee) {\n        var length = collection ? getLength(collection) : 0;\n        if (!isLength(length)) {\n          return eachFunc(collection, iteratee);\n        }\n        var index = fromRight ? length : -1,\n            iterable = toObject(collection);\n\n        while ((fromRight ? index-- : ++index < length)) {\n          if (iteratee(iterable[index], index, iterable) === false) {\n            break;\n          }\n        }\n        return collection;\n      };\n    }\n\n    /**\n     * Creates a base function for `_.forIn` or `_.forInRight`.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new base function.\n     */\n    function createBaseFor(fromRight) {\n      return function(object, iteratee, keysFunc) {\n        var iterable = toObject(object),\n            props = keysFunc(object),\n            length = props.length,\n            index = fromRight ? length : -1;\n\n        while ((fromRight ? index-- : ++index < length)) {\n          var key = props[index];\n          if (iteratee(iterable[key], key, iterable) === false) {\n            break;\n          }\n        }\n        return object;\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` and invokes it with the `this`\n     * binding of `thisArg`.\n     *\n     * @private\n     * @param {Function} func The function to bind.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @returns {Function} Returns the new bound function.\n     */\n    function createBindWrapper(func, thisArg) {\n      var Ctor = createCtorWrapper(func);\n\n      function wrapper() {\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return fn.apply(thisArg, arguments);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a `Set` cache object to optimize linear searches of large arrays.\n     *\n     * @private\n     * @param {Array} [values] The values to cache.\n     * @returns {null|Object} Returns the new cache object if `Set` is supported, else `null`.\n     */\n    function createCache(values) {\n      return (nativeCreate && Set) ? new SetCache(values) : null;\n    }\n\n    /**\n     * Creates a function that produces compound words out of the words in a\n     * given string.\n     *\n     * @private\n     * @param {Function} callback The function to combine each word.\n     * @returns {Function} Returns the new compounder function.\n     */\n    function createCompounder(callback) {\n      return function(string) {\n        var index = -1,\n            array = words(deburr(string)),\n            length = array.length,\n            result = '';\n\n        while (++index < length) {\n          result = callback(result, array[index], index);\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function that produces an instance of `Ctor` regardless of\n     * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n     *\n     * @private\n     * @param {Function} Ctor The constructor to wrap.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createCtorWrapper(Ctor) {\n      return function() {\n        // Use a `switch` statement to work with class constructors.\n        // See http://ecma-international.org/ecma-262/6.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n        // for more details.\n        var args = arguments;\n        switch (args.length) {\n          case 0: return new Ctor;\n          case 1: return new Ctor(args[0]);\n          case 2: return new Ctor(args[0], args[1]);\n          case 3: return new Ctor(args[0], args[1], args[2]);\n          case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n          case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n          case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n          case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n        }\n        var thisBinding = baseCreate(Ctor.prototype),\n            result = Ctor.apply(thisBinding, args);\n\n        // Mimic the constructor's `return` behavior.\n        // See https://es5.github.io/#x13.2.2 for more details.\n        return isObject(result) ? result : thisBinding;\n      };\n    }\n\n    /**\n     * Creates a `_.curry` or `_.curryRight` function.\n     *\n     * @private\n     * @param {boolean} flag The curry bit flag.\n     * @returns {Function} Returns the new curry function.\n     */\n    function createCurry(flag) {\n      function curryFunc(func, arity, guard) {\n        if (guard && isIterateeCall(func, arity, guard)) {\n          arity = undefined;\n        }\n        var result = createWrapper(func, flag, undefined, undefined, undefined, undefined, undefined, arity);\n        result.placeholder = curryFunc.placeholder;\n        return result;\n      }\n      return curryFunc;\n    }\n\n    /**\n     * Creates a `_.defaults` or `_.defaultsDeep` function.\n     *\n     * @private\n     * @param {Function} assigner The function to assign values.\n     * @param {Function} customizer The function to customize assigned values.\n     * @returns {Function} Returns the new defaults function.\n     */\n    function createDefaults(assigner, customizer) {\n      return restParam(function(args) {\n        var object = args[0];\n        if (object == null) {\n          return object;\n        }\n        args.push(customizer);\n        return assigner.apply(undefined, args);\n      });\n    }\n\n    /**\n     * Creates a `_.max` or `_.min` function.\n     *\n     * @private\n     * @param {Function} comparator The function used to compare values.\n     * @param {*} exValue The initial extremum value.\n     * @returns {Function} Returns the new extremum function.\n     */\n    function createExtremum(comparator, exValue) {\n      return function(collection, iteratee, thisArg) {\n        if (thisArg && isIterateeCall(collection, iteratee, thisArg)) {\n          iteratee = undefined;\n        }\n        iteratee = getCallback(iteratee, thisArg, 3);\n        if (iteratee.length == 1) {\n          collection = isArray(collection) ? collection : toIterable(collection);\n          var result = arrayExtremum(collection, iteratee, comparator, exValue);\n          if (!(collection.length && result === exValue)) {\n            return result;\n          }\n        }\n        return baseExtremum(collection, iteratee, comparator, exValue);\n      };\n    }\n\n    /**\n     * Creates a `_.find` or `_.findLast` function.\n     *\n     * @private\n     * @param {Function} eachFunc The function to iterate over a collection.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new find function.\n     */\n    function createFind(eachFunc, fromRight) {\n      return function(collection, predicate, thisArg) {\n        predicate = getCallback(predicate, thisArg, 3);\n        if (isArray(collection)) {\n          var index = baseFindIndex(collection, predicate, fromRight);\n          return index > -1 ? collection[index] : undefined;\n        }\n        return baseFind(collection, predicate, eachFunc);\n      };\n    }\n\n    /**\n     * Creates a `_.findIndex` or `_.findLastIndex` function.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new find function.\n     */\n    function createFindIndex(fromRight) {\n      return function(array, predicate, thisArg) {\n        if (!(array && array.length)) {\n          return -1;\n        }\n        predicate = getCallback(predicate, thisArg, 3);\n        return baseFindIndex(array, predicate, fromRight);\n      };\n    }\n\n    /**\n     * Creates a `_.findKey` or `_.findLastKey` function.\n     *\n     * @private\n     * @param {Function} objectFunc The function to iterate over an object.\n     * @returns {Function} Returns the new find function.\n     */\n    function createFindKey(objectFunc) {\n      return function(object, predicate, thisArg) {\n        predicate = getCallback(predicate, thisArg, 3);\n        return baseFind(object, predicate, objectFunc, true);\n      };\n    }\n\n    /**\n     * Creates a `_.flow` or `_.flowRight` function.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new flow function.\n     */\n    function createFlow(fromRight) {\n      return function() {\n        var wrapper,\n            length = arguments.length,\n            index = fromRight ? length : -1,\n            leftIndex = 0,\n            funcs = Array(length);\n\n        while ((fromRight ? index-- : ++index < length)) {\n          var func = funcs[leftIndex++] = arguments[index];\n          if (typeof func != 'function') {\n            throw new TypeError(FUNC_ERROR_TEXT);\n          }\n          if (!wrapper && LodashWrapper.prototype.thru && getFuncName(func) == 'wrapper') {\n            wrapper = new LodashWrapper([], true);\n          }\n        }\n        index = wrapper ? -1 : length;\n        while (++index < length) {\n          func = funcs[index];\n\n          var funcName = getFuncName(func),\n              data = funcName == 'wrapper' ? getData(func) : undefined;\n\n          if (data && isLaziable(data[0]) && data[1] == (ARY_FLAG | CURRY_FLAG | PARTIAL_FLAG | REARG_FLAG) && !data[4].length && data[9] == 1) {\n            wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n          } else {\n            wrapper = (func.length == 1 && isLaziable(func)) ? wrapper[funcName]() : wrapper.thru(func);\n          }\n        }\n        return function() {\n          var args = arguments,\n              value = args[0];\n\n          if (wrapper && args.length == 1 && isArray(value) && value.length >= LARGE_ARRAY_SIZE) {\n            return wrapper.plant(value).value();\n          }\n          var index = 0,\n              result = length ? funcs[index].apply(this, args) : value;\n\n          while (++index < length) {\n            result = funcs[index].call(this, result);\n          }\n          return result;\n        };\n      };\n    }\n\n    /**\n     * Creates a function for `_.forEach` or `_.forEachRight`.\n     *\n     * @private\n     * @param {Function} arrayFunc The function to iterate over an array.\n     * @param {Function} eachFunc The function to iterate over a collection.\n     * @returns {Function} Returns the new each function.\n     */\n    function createForEach(arrayFunc, eachFunc) {\n      return function(collection, iteratee, thisArg) {\n        return (typeof iteratee == 'function' && thisArg === undefined && isArray(collection))\n          ? arrayFunc(collection, iteratee)\n          : eachFunc(collection, bindCallback(iteratee, thisArg, 3));\n      };\n    }\n\n    /**\n     * Creates a function for `_.forIn` or `_.forInRight`.\n     *\n     * @private\n     * @param {Function} objectFunc The function to iterate over an object.\n     * @returns {Function} Returns the new each function.\n     */\n    function createForIn(objectFunc) {\n      return function(object, iteratee, thisArg) {\n        if (typeof iteratee != 'function' || thisArg !== undefined) {\n          iteratee = bindCallback(iteratee, thisArg, 3);\n        }\n        return objectFunc(object, iteratee, keysIn);\n      };\n    }\n\n    /**\n     * Creates a function for `_.forOwn` or `_.forOwnRight`.\n     *\n     * @private\n     * @param {Function} objectFunc The function to iterate over an object.\n     * @returns {Function} Returns the new each function.\n     */\n    function createForOwn(objectFunc) {\n      return function(object, iteratee, thisArg) {\n        if (typeof iteratee != 'function' || thisArg !== undefined) {\n          iteratee = bindCallback(iteratee, thisArg, 3);\n        }\n        return objectFunc(object, iteratee);\n      };\n    }\n\n    /**\n     * Creates a function for `_.mapKeys` or `_.mapValues`.\n     *\n     * @private\n     * @param {boolean} [isMapKeys] Specify mapping keys instead of values.\n     * @returns {Function} Returns the new map function.\n     */\n    function createObjectMapper(isMapKeys) {\n      return function(object, iteratee, thisArg) {\n        var result = {};\n        iteratee = getCallback(iteratee, thisArg, 3);\n\n        baseForOwn(object, function(value, key, object) {\n          var mapped = iteratee(value, key, object);\n          key = isMapKeys ? mapped : key;\n          value = isMapKeys ? value : mapped;\n          result[key] = value;\n        });\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function for `_.padLeft` or `_.padRight`.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify padding from the right.\n     * @returns {Function} Returns the new pad function.\n     */\n    function createPadDir(fromRight) {\n      return function(string, length, chars) {\n        string = baseToString(string);\n        return (fromRight ? string : '') + createPadding(string, length, chars) + (fromRight ? '' : string);\n      };\n    }\n\n    /**\n     * Creates a `_.partial` or `_.partialRight` function.\n     *\n     * @private\n     * @param {boolean} flag The partial bit flag.\n     * @returns {Function} Returns the new partial function.\n     */\n    function createPartial(flag) {\n      var partialFunc = restParam(function(func, partials) {\n        var holders = replaceHolders(partials, partialFunc.placeholder);\n        return createWrapper(func, flag, undefined, partials, holders);\n      });\n      return partialFunc;\n    }\n\n    /**\n     * Creates a function for `_.reduce` or `_.reduceRight`.\n     *\n     * @private\n     * @param {Function} arrayFunc The function to iterate over an array.\n     * @param {Function} eachFunc The function to iterate over a collection.\n     * @returns {Function} Returns the new each function.\n     */\n    function createReduce(arrayFunc, eachFunc) {\n      return function(collection, iteratee, accumulator, thisArg) {\n        var initFromArray = arguments.length < 3;\n        return (typeof iteratee == 'function' && thisArg === undefined && isArray(collection))\n          ? arrayFunc(collection, iteratee, accumulator, initFromArray)\n          : baseReduce(collection, getCallback(iteratee, thisArg, 4), accumulator, initFromArray, eachFunc);\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` and invokes it with optional `this`\n     * binding of, partial application, and currying.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to reference.\n     * @param {number} bitmask The bitmask of flags. See `createWrapper` for more details.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to prepend to those provided to the new function.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [partialsRight] The arguments to append to those provided to the new function.\n     * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createHybridWrapper(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n      var isAry = bitmask & ARY_FLAG,\n          isBind = bitmask & BIND_FLAG,\n          isBindKey = bitmask & BIND_KEY_FLAG,\n          isCurry = bitmask & CURRY_FLAG,\n          isCurryBound = bitmask & CURRY_BOUND_FLAG,\n          isCurryRight = bitmask & CURRY_RIGHT_FLAG,\n          Ctor = isBindKey ? undefined : createCtorWrapper(func);\n\n      function wrapper() {\n        // Avoid `arguments` object use disqualifying optimizations by\n        // converting it to an array before providing it to other functions.\n        var length = arguments.length,\n            index = length,\n            args = Array(length);\n\n        while (index--) {\n          args[index] = arguments[index];\n        }\n        if (partials) {\n          args = composeArgs(args, partials, holders);\n        }\n        if (partialsRight) {\n          args = composeArgsRight(args, partialsRight, holdersRight);\n        }\n        if (isCurry || isCurryRight) {\n          var placeholder = wrapper.placeholder,\n              argsHolders = replaceHolders(args, placeholder);\n\n          length -= argsHolders.length;\n          if (length < arity) {\n            var newArgPos = argPos ? arrayCopy(argPos) : undefined,\n                newArity = nativeMax(arity - length, 0),\n                newsHolders = isCurry ? argsHolders : undefined,\n                newHoldersRight = isCurry ? undefined : argsHolders,\n                newPartials = isCurry ? args : undefined,\n                newPartialsRight = isCurry ? undefined : args;\n\n            bitmask |= (isCurry ? PARTIAL_FLAG : PARTIAL_RIGHT_FLAG);\n            bitmask &= ~(isCurry ? PARTIAL_RIGHT_FLAG : PARTIAL_FLAG);\n\n            if (!isCurryBound) {\n              bitmask &= ~(BIND_FLAG | BIND_KEY_FLAG);\n            }\n            var newData = [func, bitmask, thisArg, newPartials, newsHolders, newPartialsRight, newHoldersRight, newArgPos, ary, newArity],\n                result = createHybridWrapper.apply(undefined, newData);\n\n            if (isLaziable(func)) {\n              setData(result, newData);\n            }\n            result.placeholder = placeholder;\n            return result;\n          }\n        }\n        var thisBinding = isBind ? thisArg : this,\n            fn = isBindKey ? thisBinding[func] : func;\n\n        if (argPos) {\n          args = reorder(args, argPos);\n        }\n        if (isAry && ary < args.length) {\n          args.length = ary;\n        }\n        if (this && this !== root && this instanceof wrapper) {\n          fn = Ctor || createCtorWrapper(func);\n        }\n        return fn.apply(thisBinding, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates the padding required for `string` based on the given `length`.\n     * The `chars` string is truncated if the number of characters exceeds `length`.\n     *\n     * @private\n     * @param {string} string The string to create padding for.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the pad for `string`.\n     */\n    function createPadding(string, length, chars) {\n      var strLength = string.length;\n      length = +length;\n\n      if (strLength >= length || !nativeIsFinite(length)) {\n        return '';\n      }\n      var padLength = length - strLength;\n      chars = chars == null ? ' ' : (chars + '');\n      return repeat(chars, nativeCeil(padLength / chars.length)).slice(0, padLength);\n    }\n\n    /**\n     * Creates a function that wraps `func` and invokes it with the optional `this`\n     * binding of `thisArg` and the `partials` prepended to those provided to\n     * the wrapper.\n     *\n     * @private\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {number} bitmask The bitmask of flags. See `createWrapper` for more details.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {Array} partials The arguments to prepend to those provided to the new function.\n     * @returns {Function} Returns the new bound function.\n     */\n    function createPartialWrapper(func, bitmask, thisArg, partials) {\n      var isBind = bitmask & BIND_FLAG,\n          Ctor = createCtorWrapper(func);\n\n      function wrapper() {\n        // Avoid `arguments` object use disqualifying optimizations by\n        // converting it to an array before providing it `func`.\n        var argsIndex = -1,\n            argsLength = arguments.length,\n            leftIndex = -1,\n            leftLength = partials.length,\n            args = Array(leftLength + argsLength);\n\n        while (++leftIndex < leftLength) {\n          args[leftIndex] = partials[leftIndex];\n        }\n        while (argsLength--) {\n          args[leftIndex++] = arguments[++argsIndex];\n        }\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return fn.apply(isBind ? thisArg : this, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a `_.ceil`, `_.floor`, or `_.round` function.\n     *\n     * @private\n     * @param {string} methodName The name of the `Math` method to use when rounding.\n     * @returns {Function} Returns the new round function.\n     */\n    function createRound(methodName) {\n      var func = Math[methodName];\n      return function(number, precision) {\n        precision = precision === undefined ? 0 : (+precision || 0);\n        if (precision) {\n          precision = pow(10, precision);\n          return func(number * precision) / precision;\n        }\n        return func(number);\n      };\n    }\n\n    /**\n     * Creates a `_.sortedIndex` or `_.sortedLastIndex` function.\n     *\n     * @private\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {Function} Returns the new index function.\n     */\n    function createSortedIndex(retHighest) {\n      return function(array, value, iteratee, thisArg) {\n        var callback = getCallback(iteratee);\n        return (iteratee == null && callback === baseCallback)\n          ? binaryIndex(array, value, retHighest)\n          : binaryIndexBy(array, value, callback(iteratee, thisArg, 1), retHighest);\n      };\n    }\n\n    /**\n     * Creates a function that either curries or invokes `func` with optional\n     * `this` binding and partially applied arguments.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to reference.\n     * @param {number} bitmask The bitmask of flags.\n     *  The bitmask may be composed of the following flags:\n     *     1 - `_.bind`\n     *     2 - `_.bindKey`\n     *     4 - `_.curry` or `_.curryRight` of a bound function\n     *     8 - `_.curry`\n     *    16 - `_.curryRight`\n     *    32 - `_.partial`\n     *    64 - `_.partialRight`\n     *   128 - `_.rearg`\n     *   256 - `_.ary`\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to be partially applied.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createWrapper(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n      var isBindKey = bitmask & BIND_KEY_FLAG;\n      if (!isBindKey && typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var length = partials ? partials.length : 0;\n      if (!length) {\n        bitmask &= ~(PARTIAL_FLAG | PARTIAL_RIGHT_FLAG);\n        partials = holders = undefined;\n      }\n      length -= (holders ? holders.length : 0);\n      if (bitmask & PARTIAL_RIGHT_FLAG) {\n        var partialsRight = partials,\n            holdersRight = holders;\n\n        partials = holders = undefined;\n      }\n      var data = isBindKey ? undefined : getData(func),\n          newData = [func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity];\n\n      if (data) {\n        mergeData(newData, data);\n        bitmask = newData[1];\n        arity = newData[9];\n      }\n      newData[9] = arity == null\n        ? (isBindKey ? 0 : func.length)\n        : (nativeMax(arity - length, 0) || 0);\n\n      if (bitmask == BIND_FLAG) {\n        var result = createBindWrapper(newData[0], newData[2]);\n      } else if ((bitmask == PARTIAL_FLAG || bitmask == (BIND_FLAG | PARTIAL_FLAG)) && !newData[4].length) {\n        result = createPartialWrapper.apply(undefined, newData);\n      } else {\n        result = createHybridWrapper.apply(undefined, newData);\n      }\n      var setter = data ? baseSetData : setData;\n      return setter(result, newData);\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for arrays with support for\n     * partial deep comparisons.\n     *\n     * @private\n     * @param {Array} array The array to compare.\n     * @param {Array} other The other array to compare.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Function} [customizer] The function to customize comparing arrays.\n     * @param {boolean} [isLoose] Specify performing partial comparisons.\n     * @param {Array} [stackA] Tracks traversed `value` objects.\n     * @param {Array} [stackB] Tracks traversed `other` objects.\n     * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n     */\n    function equalArrays(array, other, equalFunc, customizer, isLoose, stackA, stackB) {\n      var index = -1,\n          arrLength = array.length,\n          othLength = other.length;\n\n      if (arrLength != othLength && !(isLoose && othLength > arrLength)) {\n        return false;\n      }\n      // Ignore non-index properties.\n      while (++index < arrLength) {\n        var arrValue = array[index],\n            othValue = other[index],\n            result = customizer ? customizer(isLoose ? othValue : arrValue, isLoose ? arrValue : othValue, index) : undefined;\n\n        if (result !== undefined) {\n          if (result) {\n            continue;\n          }\n          return false;\n        }\n        // Recursively compare arrays (susceptible to call stack limits).\n        if (isLoose) {\n          if (!arraySome(other, function(othValue) {\n                return arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB);\n              })) {\n            return false;\n          }\n        } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB))) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for comparing objects of\n     * the same `toStringTag`.\n     *\n     * **Note:** This function only supports comparing values with tags of\n     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {string} tag The `toStringTag` of the objects to compare.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function equalByTag(object, other, tag) {\n      switch (tag) {\n        case boolTag:\n        case dateTag:\n          // Coerce dates and booleans to numbers, dates to milliseconds and booleans\n          // to `1` or `0` treating invalid dates coerced to `NaN` as not equal.\n          return +object == +other;\n\n        case errorTag:\n          return object.name == other.name && object.message == other.message;\n\n        case numberTag:\n          // Treat `NaN` vs. `NaN` as equal.\n          return (object != +object)\n            ? other != +other\n            : object == +other;\n\n        case regexpTag:\n        case stringTag:\n          // Coerce regexes to strings and treat strings primitives and string\n          // objects as equal. See https://es5.github.io/#x15.10.6.4 for more details.\n          return object == (other + '');\n      }\n      return false;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for objects with support for\n     * partial deep comparisons.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Function} [customizer] The function to customize comparing values.\n     * @param {boolean} [isLoose] Specify performing partial comparisons.\n     * @param {Array} [stackA] Tracks traversed `value` objects.\n     * @param {Array} [stackB] Tracks traversed `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function equalObjects(object, other, equalFunc, customizer, isLoose, stackA, stackB) {\n      var objProps = keys(object),\n          objLength = objProps.length,\n          othProps = keys(other),\n          othLength = othProps.length;\n\n      if (objLength != othLength && !isLoose) {\n        return false;\n      }\n      var index = objLength;\n      while (index--) {\n        var key = objProps[index];\n        if (!(isLoose ? key in other : hasOwnProperty.call(other, key))) {\n          return false;\n        }\n      }\n      var skipCtor = isLoose;\n      while (++index < objLength) {\n        key = objProps[index];\n        var objValue = object[key],\n            othValue = other[key],\n            result = customizer ? customizer(isLoose ? othValue : objValue, isLoose? objValue : othValue, key) : undefined;\n\n        // Recursively compare objects (susceptible to call stack limits).\n        if (!(result === undefined ? equalFunc(objValue, othValue, customizer, isLoose, stackA, stackB) : result)) {\n          return false;\n        }\n        skipCtor || (skipCtor = key == 'constructor');\n      }\n      if (!skipCtor) {\n        var objCtor = object.constructor,\n            othCtor = other.constructor;\n\n        // Non `Object` object instances with different constructors are not equal.\n        if (objCtor != othCtor &&\n            ('constructor' in object && 'constructor' in other) &&\n            !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n              typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * Gets the appropriate \"callback\" function. If the `_.callback` method is\n     * customized this function returns the custom method, otherwise it returns\n     * the `baseCallback` function. If arguments are provided the chosen function\n     * is invoked with them and its result is returned.\n     *\n     * @private\n     * @returns {Function} Returns the chosen function or its result.\n     */\n    function getCallback(func, thisArg, argCount) {\n      var result = lodash.callback || callback;\n      result = result === callback ? baseCallback : result;\n      return argCount ? result(func, thisArg, argCount) : result;\n    }\n\n    /**\n     * Gets metadata for `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {*} Returns the metadata for `func`.\n     */\n    var getData = !metaMap ? noop : function(func) {\n      return metaMap.get(func);\n    };\n\n    /**\n     * Gets the name of `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {string} Returns the function name.\n     */\n    function getFuncName(func) {\n      var result = func.name,\n          array = realNames[result],\n          length = array ? array.length : 0;\n\n      while (length--) {\n        var data = array[length],\n            otherFunc = data.func;\n        if (otherFunc == null || otherFunc == func) {\n          return data.name;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Gets the appropriate \"indexOf\" function. If the `_.indexOf` method is\n     * customized this function returns the custom method, otherwise it returns\n     * the `baseIndexOf` function. If arguments are provided the chosen function\n     * is invoked with them and its result is returned.\n     *\n     * @private\n     * @returns {Function|number} Returns the chosen function or its result.\n     */\n    function getIndexOf(collection, target, fromIndex) {\n      var result = lodash.indexOf || indexOf;\n      result = result === indexOf ? baseIndexOf : result;\n      return collection ? result(collection, target, fromIndex) : result;\n    }\n\n    /**\n     * Gets the \"length\" property value of `object`.\n     *\n     * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n     * that affects Safari on at least iOS 8.1-8.3 ARM64.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {*} Returns the \"length\" value.\n     */\n    var getLength = baseProperty('length');\n\n    /**\n     * Gets the propery names, values, and compare flags of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the match data of `object`.\n     */\n    function getMatchData(object) {\n      var result = pairs(object),\n          length = result.length;\n\n      while (length--) {\n        result[length][2] = isStrictComparable(result[length][1]);\n      }\n      return result;\n    }\n\n    /**\n     * Gets the native function at `key` of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {string} key The key of the method to get.\n     * @returns {*} Returns the function if it's native, else `undefined`.\n     */\n    function getNative(object, key) {\n      var value = object == null ? undefined : object[key];\n      return isNative(value) ? value : undefined;\n    }\n\n    /**\n     * Gets the view, applying any `transforms` to the `start` and `end` positions.\n     *\n     * @private\n     * @param {number} start The start of the view.\n     * @param {number} end The end of the view.\n     * @param {Array} transforms The transformations to apply to the view.\n     * @returns {Object} Returns an object containing the `start` and `end`\n     *  positions of the view.\n     */\n    function getView(start, end, transforms) {\n      var index = -1,\n          length = transforms.length;\n\n      while (++index < length) {\n        var data = transforms[index],\n            size = data.size;\n\n        switch (data.type) {\n          case 'drop':      start += size; break;\n          case 'dropRight': end -= size; break;\n          case 'take':      end = nativeMin(end, start + size); break;\n          case 'takeRight': start = nativeMax(start, end - size); break;\n        }\n      }\n      return { 'start': start, 'end': end };\n    }\n\n    /**\n     * Initializes an array clone.\n     *\n     * @private\n     * @param {Array} array The array to clone.\n     * @returns {Array} Returns the initialized clone.\n     */\n    function initCloneArray(array) {\n      var length = array.length,\n          result = new array.constructor(length);\n\n      // Add array properties assigned by `RegExp#exec`.\n      if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n        result.index = array.index;\n        result.input = array.input;\n      }\n      return result;\n    }\n\n    /**\n     * Initializes an object clone.\n     *\n     * @private\n     * @param {Object} object The object to clone.\n     * @returns {Object} Returns the initialized clone.\n     */\n    function initCloneObject(object) {\n      var Ctor = object.constructor;\n      if (!(typeof Ctor == 'function' && Ctor instanceof Ctor)) {\n        Ctor = Object;\n      }\n      return new Ctor;\n    }\n\n    /**\n     * Initializes an object clone based on its `toStringTag`.\n     *\n     * **Note:** This function only supports cloning values with tags of\n     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n     *\n     * @private\n     * @param {Object} object The object to clone.\n     * @param {string} tag The `toStringTag` of the object to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the initialized clone.\n     */\n    function initCloneByTag(object, tag, isDeep) {\n      var Ctor = object.constructor;\n      switch (tag) {\n        case arrayBufferTag:\n          return bufferClone(object);\n\n        case boolTag:\n        case dateTag:\n          return new Ctor(+object);\n\n        case float32Tag: case float64Tag:\n        case int8Tag: case int16Tag: case int32Tag:\n        case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n          var buffer = object.buffer;\n          return new Ctor(isDeep ? bufferClone(buffer) : buffer, object.byteOffset, object.length);\n\n        case numberTag:\n        case stringTag:\n          return new Ctor(object);\n\n        case regexpTag:\n          var result = new Ctor(object.source, reFlags.exec(object));\n          result.lastIndex = object.lastIndex;\n      }\n      return result;\n    }\n\n    /**\n     * Invokes the method at `path` on `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {Array} args The arguments to invoke the method with.\n     * @returns {*} Returns the result of the invoked method.\n     */\n    function invokePath(object, path, args) {\n      if (object != null && !isKey(path, object)) {\n        path = toPath(path);\n        object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));\n        path = last(path);\n      }\n      var func = object == null ? object : object[path];\n      return func == null ? undefined : func.apply(object, args);\n    }\n\n    /**\n     * Checks if `value` is array-like.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n     */\n    function isArrayLike(value) {\n      return value != null && isLength(getLength(value));\n    }\n\n    /**\n     * Checks if `value` is a valid array-like index.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n     * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n     */\n    function isIndex(value, length) {\n      value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;\n      length = length == null ? MAX_SAFE_INTEGER : length;\n      return value > -1 && value % 1 == 0 && value < length;\n    }\n\n    /**\n     * Checks if the provided arguments are from an iteratee call.\n     *\n     * @private\n     * @param {*} value The potential iteratee value argument.\n     * @param {*} index The potential iteratee index or key argument.\n     * @param {*} object The potential iteratee object argument.\n     * @returns {boolean} Returns `true` if the arguments are from an iteratee call, else `false`.\n     */\n    function isIterateeCall(value, index, object) {\n      if (!isObject(object)) {\n        return false;\n      }\n      var type = typeof index;\n      if (type == 'number'\n          ? (isArrayLike(object) && isIndex(index, object.length))\n          : (type == 'string' && index in object)) {\n        var other = object[index];\n        return value === value ? (value === other) : (other !== other);\n      }\n      return false;\n    }\n\n    /**\n     * Checks if `value` is a property name and not a property path.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @param {Object} [object] The object to query keys on.\n     * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n     */\n    function isKey(value, object) {\n      var type = typeof value;\n      if ((type == 'string' && reIsPlainProp.test(value)) || type == 'number') {\n        return true;\n      }\n      if (isArray(value)) {\n        return false;\n      }\n      var result = !reIsDeepProp.test(value);\n      return result || (object != null && value in toObject(object));\n    }\n\n    /**\n     * Checks if `func` has a lazy counterpart.\n     *\n     * @private\n     * @param {Function} func The function to check.\n     * @returns {boolean} Returns `true` if `func` has a lazy counterpart, else `false`.\n     */\n    function isLaziable(func) {\n      var funcName = getFuncName(func);\n      if (!(funcName in LazyWrapper.prototype)) {\n        return false;\n      }\n      var other = lodash[funcName];\n      if (func === other) {\n        return true;\n      }\n      var data = getData(other);\n      return !!data && func === data[0];\n    }\n\n    /**\n     * Checks if `value` is a valid array-like length.\n     *\n     * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n     */\n    function isLength(value) {\n      return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n    }\n\n    /**\n     * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` if suitable for strict\n     *  equality comparisons, else `false`.\n     */\n    function isStrictComparable(value) {\n      return value === value && !isObject(value);\n    }\n\n    /**\n     * Merges the function metadata of `source` into `data`.\n     *\n     * Merging metadata reduces the number of wrappers required to invoke a function.\n     * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n     * may be applied regardless of execution order. Methods like `_.ary` and `_.rearg`\n     * augment function arguments, making the order in which they are executed important,\n     * preventing the merging of metadata. However, we make an exception for a safe\n     * common case where curried functions have `_.ary` and or `_.rearg` applied.\n     *\n     * @private\n     * @param {Array} data The destination metadata.\n     * @param {Array} source The source metadata.\n     * @returns {Array} Returns `data`.\n     */\n    function mergeData(data, source) {\n      var bitmask = data[1],\n          srcBitmask = source[1],\n          newBitmask = bitmask | srcBitmask,\n          isCommon = newBitmask < ARY_FLAG;\n\n      var isCombo =\n        (srcBitmask == ARY_FLAG && bitmask == CURRY_FLAG) ||\n        (srcBitmask == ARY_FLAG && bitmask == REARG_FLAG && data[7].length <= source[8]) ||\n        (srcBitmask == (ARY_FLAG | REARG_FLAG) && bitmask == CURRY_FLAG);\n\n      // Exit early if metadata can't be merged.\n      if (!(isCommon || isCombo)) {\n        return data;\n      }\n      // Use source `thisArg` if available.\n      if (srcBitmask & BIND_FLAG) {\n        data[2] = source[2];\n        // Set when currying a bound function.\n        newBitmask |= (bitmask & BIND_FLAG) ? 0 : CURRY_BOUND_FLAG;\n      }\n      // Compose partial arguments.\n      var value = source[3];\n      if (value) {\n        var partials = data[3];\n        data[3] = partials ? composeArgs(partials, value, source[4]) : arrayCopy(value);\n        data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : arrayCopy(source[4]);\n      }\n      // Compose partial right arguments.\n      value = source[5];\n      if (value) {\n        partials = data[5];\n        data[5] = partials ? composeArgsRight(partials, value, source[6]) : arrayCopy(value);\n        data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : arrayCopy(source[6]);\n      }\n      // Use source `argPos` if available.\n      value = source[7];\n      if (value) {\n        data[7] = arrayCopy(value);\n      }\n      // Use source `ary` if it's smaller.\n      if (srcBitmask & ARY_FLAG) {\n        data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n      }\n      // Use source `arity` if one is not provided.\n      if (data[9] == null) {\n        data[9] = source[9];\n      }\n      // Use source `func` and merge bitmasks.\n      data[0] = source[0];\n      data[1] = newBitmask;\n\n      return data;\n    }\n\n    /**\n     * Used by `_.defaultsDeep` to customize its `_.merge` use.\n     *\n     * @private\n     * @param {*} objectValue The destination object property value.\n     * @param {*} sourceValue The source object property value.\n     * @returns {*} Returns the value to assign to the destination object.\n     */\n    function mergeDefaults(objectValue, sourceValue) {\n      return objectValue === undefined ? sourceValue : merge(objectValue, sourceValue, mergeDefaults);\n    }\n\n    /**\n     * A specialized version of `_.pick` which picks `object` properties specified\n     * by `props`.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {string[]} props The property names to pick.\n     * @returns {Object} Returns the new object.\n     */\n    function pickByArray(object, props) {\n      object = toObject(object);\n\n      var index = -1,\n          length = props.length,\n          result = {};\n\n      while (++index < length) {\n        var key = props[index];\n        if (key in object) {\n          result[key] = object[key];\n        }\n      }\n      return result;\n    }\n\n    /**\n     * A specialized version of `_.pick` which picks `object` properties `predicate`\n     * returns truthy for.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {Object} Returns the new object.\n     */\n    function pickByCallback(object, predicate) {\n      var result = {};\n      baseForIn(object, function(value, key, object) {\n        if (predicate(value, key, object)) {\n          result[key] = value;\n        }\n      });\n      return result;\n    }\n\n    /**\n     * Reorder `array` according to the specified indexes where the element at\n     * the first index is assigned as the first element, the element at\n     * the second index is assigned as the second element, and so on.\n     *\n     * @private\n     * @param {Array} array The array to reorder.\n     * @param {Array} indexes The arranged array indexes.\n     * @returns {Array} Returns `array`.\n     */\n    function reorder(array, indexes) {\n      var arrLength = array.length,\n          length = nativeMin(indexes.length, arrLength),\n          oldArray = arrayCopy(array);\n\n      while (length--) {\n        var index = indexes[length];\n        array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n      }\n      return array;\n    }\n\n    /**\n     * Sets metadata for `func`.\n     *\n     * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n     * period of time, it will trip its breaker and transition to an identity function\n     * to avoid garbage collection pauses in V8. See [V8 issue 2070](https://code.google.com/p/v8/issues/detail?id=2070)\n     * for more details.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */\n    var setData = (function() {\n      var count = 0,\n          lastCalled = 0;\n\n      return function(key, value) {\n        var stamp = now(),\n            remaining = HOT_SPAN - (stamp - lastCalled);\n\n        lastCalled = stamp;\n        if (remaining > 0) {\n          if (++count >= HOT_COUNT) {\n            return key;\n          }\n        } else {\n          count = 0;\n        }\n        return baseSetData(key, value);\n      };\n    }());\n\n    /**\n     * A fallback implementation of `Object.keys` which creates an array of the\n     * own enumerable property names of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function shimKeys(object) {\n      var props = keysIn(object),\n          propsLength = props.length,\n          length = propsLength && object.length;\n\n      var allowIndexes = !!length && isLength(length) &&\n        (isArray(object) || isArguments(object));\n\n      var index = -1,\n          result = [];\n\n      while (++index < propsLength) {\n        var key = props[index];\n        if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Converts `value` to an array-like object if it's not one.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {Array|Object} Returns the array-like object.\n     */\n    function toIterable(value) {\n      if (value == null) {\n        return [];\n      }\n      if (!isArrayLike(value)) {\n        return values(value);\n      }\n      return isObject(value) ? value : Object(value);\n    }\n\n    /**\n     * Converts `value` to an object if it's not one.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {Object} Returns the object.\n     */\n    function toObject(value) {\n      return isObject(value) ? value : Object(value);\n    }\n\n    /**\n     * Converts `value` to property path array if it's not one.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {Array} Returns the property path array.\n     */\n    function toPath(value) {\n      if (isArray(value)) {\n        return value;\n      }\n      var result = [];\n      baseToString(value).replace(rePropName, function(match, number, quote, string) {\n        result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));\n      });\n      return result;\n    }\n\n    /**\n     * Creates a clone of `wrapper`.\n     *\n     * @private\n     * @param {Object} wrapper The wrapper to clone.\n     * @returns {Object} Returns the cloned wrapper.\n     */\n    function wrapperClone(wrapper) {\n      return wrapper instanceof LazyWrapper\n        ? wrapper.clone()\n        : new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__, arrayCopy(wrapper.__actions__));\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an array of elements split into groups the length of `size`.\n     * If `collection` can't be split evenly, the final chunk will be the remaining\n     * elements.\n     *\n     * @static\n     * @memberOf _\n     * @category Array\n     * @param {Array} array The array to process.\n     * @param {number} [size=1] The length of each chunk.\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\n     * @returns {Array} Returns the new array containing chunks.\n     * @example\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 2);\n     * // => [['a', 'b'], ['c', 'd']]\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 3);\n     * // => [['a', 'b', 'c'], ['d']]\n     */\n    function chunk(array, size, guard) {\n      if (guard ? isIterateeCall(array, size, guard) : size == null) {\n        size = 1;\n      } else {\n        size = nativeMax(nativeFloor(size) || 1, 1);\n      }\n      var index = 0,\n          length = array ? array.length : 0,\n          resIndex = -1,\n          result = Array(nativeCeil(length / size));\n\n      while (index < length) {\n        result[++resIndex] = baseSlice(array, index, (index += size));\n      }\n      return result;\n    }\n\n    /**\n     * Creates an array with all falsey values removed. The values `false`, `null`,\n     * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n     *\n     * @static\n     * @memberOf _\n     * @category Array\n     * @param {Array} array The array to compact.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.compact([0, 1, false, 2, '', 3]);\n     * // => [1, 2, 3]\n     */\n    function compact(array) {\n      var index = -1,\n          length = array ? array.length : 0,\n          resIndex = -1,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index];\n        if (value) {\n          result[++resIndex] = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Creates an array of unique `array` values not included in the other\n     * provided arrays using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The arrays of values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.difference([1, 2, 3], [4, 2]);\n     * // => [1, 3]\n     */\n    var difference = restParam(function(array, values) {\n      return (isObjectLike(array) && isArrayLike(array))\n        ? baseDifference(array, baseFlatten(values, false, true))\n        : [];\n    });\n\n    /**\n     * Creates a slice of `array` with `n` elements dropped from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.drop([1, 2, 3]);\n     * // => [2, 3]\n     *\n     * _.drop([1, 2, 3], 2);\n     * // => [3]\n     *\n     * _.drop([1, 2, 3], 5);\n     * // => []\n     *\n     * _.drop([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */\n    function drop(array, n, guard) {\n      var length = array ? array.length : 0;\n      if (!length) {\n        return [];\n      }\n      if (guard ? isIterateeCall(array, n, guard) : n == null) {\n        n = 1;\n      }\n      return baseSlice(array, n < 0 ? 0 : n);\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements dropped from the end.\n     *\n     * @static\n     * @memberOf _\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.dropRight([1, 2, 3]);\n     * // => [1, 2]\n     *\n     * _.dropRight([1, 2, 3], 2);\n     * // => [1]\n     *\n     * _.dropRight([1, 2, 3], 5);\n     * // => []\n     *\n     * _.dropRight([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */\n    function dropRight(array, n, guard) {\n      var length = array ? array.length : 0;\n      if (!length) {\n        return [];\n      }\n      if (guard ? isIterateeCall(array, n, guard) : n == null) {\n        n = 1;\n      }\n      n = length - (+n || 0);\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n\n    /**\n     * Creates a slice of `array` excluding elements dropped from the end.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * bound to `thisArg` and invoked with three arguments: (value, index, array).\n     *\n     * If a property name is provided for `predicate` the created `_.property`\n     * style callback returns the property value of the given element.\n     *\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\n     * style callback returns `true` for elements that have a matching property\n     * value, else `false`.\n     *\n     * If an object is provided for `predicate` the created `_.matches` style\n     * callback returns `true` for elements that match the properties of the given\n     * object, else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function|Object|string} [predicate=_.identity] The function invoked\n     *  per iteration.\n     * @param {*} [thisArg] The `this` binding of `predicate`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.dropRightWhile([1, 2, 3], function(n) {\n     *   return n > 1;\n     * });\n     * // => [1]\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * // using the `_.matches` callback shorthand\n     * _.pluck(_.dropRightWhile(users, { 'user': 'pebbles', 'active': false }), 'user');\n     * // => ['barney', 'fred']\n     *\n     * // using the `_.matchesProperty` callback shorthand\n     * _.pluck(_.dropRightWhile(users, 'active', false), 'user');\n     * // => ['barney']\n     *\n     * // using the `_.property` callback shorthand\n     * _.pluck(_.dropRightWhile(users, 'active'), 'user');\n     * // => ['barney', 'fred', 'pebbles']\n     */\n    function dropRightWhile(array, predicate, thisArg) {\n      return (array && array.length)\n        ? baseWhile(array, getCallback(predicate, thisArg, 3), true, true)\n        : [];\n    }\n\n    /**\n     * Creates a slice of `array` excluding elements dropped from the beginning.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * bound to `thisArg` and invoked with three arguments: (value, index, array).\n     *\n     * If a property name is provided for `predicate` the created `_.property`\n     * style callback returns the property value of the given element.\n     *\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\n     * style callback returns `true` for elements that have a matching property\n     * value, else `false`.\n     *\n     * If an object is provided for `predicate` the created `_.matches` style\n     * callback returns `true` for elements that have the properties of the given\n     * object, else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function|Object|string} [predicate=_.identity] The function invoked\n     *  per iteration.\n     * @param {*} [thisArg] The `this` binding of `predicate`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.dropWhile([1, 2, 3], function(n) {\n     *   return n < 3;\n     * });\n     * // => [3]\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * // using the `_.matches` callback shorthand\n     * _.pluck(_.dropWhile(users, { 'user': 'barney', 'active': false }), 'user');\n     * // => ['fred', 'pebbles']\n     *\n     * // using the `_.matchesProperty` callback shorthand\n     * _.pluck(_.dropWhile(users, 'active', false), 'user');\n     * // => ['pebbles']\n     *\n     * // using the `_.property` callback shorthand\n     * _.pluck(_.dropWhile(users, 'active'), 'user');\n     * // => ['barney', 'fred', 'pebbles']\n     */\n    function dropWhile(array, predicate, thisArg) {\n      return (array && array.length)\n        ? baseWhile(array, getCallback(predicate, thisArg, 3), true)\n        : [];\n    }\n\n    /**\n     * Fills elements of `array` with `value` from `start` up to, but not\n     * including, `end`.\n     *\n     * **Note:** This method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @category Array\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _.fill(array, 'a');\n     * console.log(array);\n     * // => ['a', 'a', 'a']\n     *\n     * _.fill(Array(3), 2);\n     * // => [2, 2, 2]\n     *\n     * _.fill([4, 6, 8], '*', 1, 2);\n     * // => [4, '*', 8]\n     */\n    function fill(array, value, start, end) {\n      var length = array ? array.length : 0;\n      if (!length) {\n        return [];\n      }\n      if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n        start = 0;\n        end = length;\n      }\n      return baseFill(array, value, start, end);\n    }\n\n    /**\n     * This method is like `_.find` except that it returns the index of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * If a property name is provided for `predicate` the created `_.property`\n     * style callback returns the property value of the given element.\n     *\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\n     * style callback returns `true` for elements that have a matching property\n     * value, else `false`.\n     *\n     * If an object is provided for `predicate` the created `_.matches` style\n     * callback returns `true` for elements that have the properties of the given\n     * object, else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Array\n     * @param {Array} array The array to search.\n     * @param {Function|Object|string} [predicate=_.identity] The function invoked\n     *  per iteration.\n     * @param {*} [thisArg] The `this` binding of `predicate`.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.findIndex(users, function(chr) {\n     *   return chr.user == 'barney';\n     * });\n     * // => 0\n     *\n     * // using the `_.matches` callback shorthand\n     * _.findIndex(users, { 'user': 'fred', 'active': false });\n     * // => 1\n     *\n     * // using the `_.matchesProperty` callback shorthand\n     * _.findIndex(users, 'active', false);\n     * // => 0\n     *\n     * // using the `_.property` callback shorthand\n     * _.findIndex(users, 'active');\n     * // => 2\n     */\n    var findIndex = createFindIndex();\n\n    /**\n     * This method is like `_.findIndex` except that it iterates over elements\n     * of `collection` from right to left.\n     *\n     * If a property name is provided for `predicate` the created `_.property`\n     * style callback returns the property value of the given element.\n     *\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\n     * style callback returns `true` for elements that have a matching property\n     * value, else `false`.\n     *\n     * If an object is provided for `predicate` the created `_.matches` style\n     * callback returns `true` for elements that have the properties of the given\n     * object, else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Array\n     * @param {Array} array The array to search.\n     * @param {Function|Object|string} [predicate=_.identity] The function invoked\n     *  per iteration.\n     * @param {*} [thisArg] The `this` binding of `predicate`.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.findLastIndex(users, function(chr) {\n     *   return chr.user == 'pebbles';\n     * });\n     * // => 2\n     *\n     * // using the `_.matches` callback shorthand\n     * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n     * // => 0\n     *\n     * // using the `_.matchesProperty` callback shorthand\n     * _.findLastIndex(users, 'active', false);\n     * // => 2\n     *\n     * // using the `_.property` callback shorthand\n     * _.findLastIndex(users, 'active');\n     * // => 0\n     */\n    var findLastIndex = createFindIndex(true);\n\n    /**\n     * Gets the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @alias head\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the first element of `array`.\n     * @example\n     *\n     * _.first([1, 2, 3]);\n     * // => 1\n     *\n     * _.first([]);\n     * // => undefined\n     */\n    function first(array) {\n      return array ? array[0] : undefined;\n    }\n\n    /**\n     * Flattens a nested array. If `isDeep` is `true` the array is recursively\n     * flattened, otherwise it is only flattened a single level.\n     *\n     * @static\n     * @memberOf _\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @param {boolean} [isDeep] Specify a deep flatten.\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * _.flatten([1, [2, 3, [4]]]);\n     * // => [1, 2, 3, [4]]\n     *\n     * // using `isDeep`\n     * _.flatten([1, [2, 3, [4]]], true);\n     * // => [1, 2, 3, 4]\n     */\n    function flatten(array, isDeep, guard) {\n      var length = array ? array.length : 0;\n      if (guard && isIterateeCall(array, isDeep, guard)) {\n        isDeep = false;\n      }\n      return length ? baseFlatten(array, isDeep) : [];\n    }\n\n    /**\n     * Recursively flattens a nested array.\n     *\n     * @static\n     * @memberOf _\n     * @category Array\n     * @param {Array} array The array to recursively flatten.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * _.flattenDeep([1, [2, 3, [4]]]);\n     * // => [1, 2, 3, 4]\n     */\n    function flattenDeep(array) {\n      var length = array ? array.length : 0;\n      return length ? baseFlatten(array, true) : [];\n    }\n\n    /**\n     * Gets the index at which the first occurrence of `value` is found in `array`\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)\n     * for equality comparisons. If `fromIndex` is negative, it is used as the offset\n     * from the end of `array`. If `array` is sorted providing `true` for `fromIndex`\n     * performs a faster binary search.\n     *\n     * @static\n     * @memberOf _\n     * @category Array\n     * @param {Array} array The array to search.\n     * @param {*} value The value to search for.\n     * @param {boolean|number} [fromIndex=0] The index to search from or `true`\n     *  to perform a binary search on a sorted array.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.indexOf([1, 2, 1, 2], 2);\n     * // => 1\n     *\n     * // using `fromIndex`\n     * _.indexOf([1, 2, 1, 2], 2, 2);\n     * // => 3\n     *\n     * // performing a binary search\n     * _.indexOf([1, 1, 2, 2], 2, true);\n     * // => 2\n     */\n    function indexOf(array, value, fromIndex) {\n      var length = array ? array.length : 0;\n      if (!length) {\n        return -1;\n      }\n      if (typeof fromIndex == 'number') {\n        fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : fromIndex;\n      } else if (fromIndex) {\n        var index = binaryIndex(array, value);\n        if (index < length &&\n            (value === value ? (value === array[index]) : (array[index] !== array[index]))) {\n          return index;\n        }\n        return -1;\n      }\n      return baseIndexOf(array, value, fromIndex || 0);\n    }\n\n    /**\n     * Gets all but the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.initial([1, 2, 3]);\n     * // => [1, 2]\n     */\n    function initial(array) {\n      return dropRight(array, 1);\n    }\n\n    /**\n     * Creates an array of unique values that are included in all of the provided\n     * arrays using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of shared values.\n     * @example\n     * _.intersection([1, 2], [4, 2], [2, 1]);\n     * // => [2]\n     */\n    var intersection = restParam(function(arrays) {\n      var othLength = arrays.length,\n          othIndex = othLength,\n          caches = Array(length),\n          indexOf = getIndexOf(),\n          isCommon = indexOf == baseIndexOf,\n          result = [];\n\n      while (othIndex--) {\n        var value = arrays[othIndex] = isArrayLike(value = arrays[othIndex]) ? value : [];\n        caches[othIndex] = (isCommon && value.length >= 120) ? createCache(othIndex && value) : null;\n      }\n      var array = arrays[0],\n          index = -1,\n          length = array ? array.length : 0,\n          seen = caches[0];\n\n      outer:\n      while (++index < length) {\n        value = array[index];\n        if ((seen ? cacheIndexOf(seen, value) : indexOf(result, value, 0)) < 0) {\n          var othIndex = othLength;\n          while (--othIndex) {\n            var cache = caches[othIndex];\n            if ((cache ? cacheIndexOf(cache, value) : indexOf(arrays[othIndex], value, 0)) < 0) {\n              continue outer;\n            }\n          }\n          if (seen) {\n            seen.push(value);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    });\n\n    /**\n     * Gets the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the last element of `array`.\n     * @example\n     *\n     * _.last([1, 2, 3]);\n     * // => 3\n     */\n    function last(array) {\n      var length = array ? array.length : 0;\n      return length ? array[length - 1] : undefined;\n    }\n\n    /**\n     * This method is like `_.indexOf` except that it iterates over elements of\n     * `array` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @category Array\n     * @param {Array} array The array to search.\n     * @param {*} value The value to search for.\n     * @param {boolean|number} [fromIndex=array.length-1] The index to search from\n     *  or `true` to perform a binary search on a sorted array.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.lastIndexOf([1, 2, 1, 2], 2);\n     * // => 3\n     *\n     * // using `fromIndex`\n     * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n     * // => 1\n     *\n     * // performing a binary search\n     * _.lastIndexOf([1, 1, 2, 2], 2, true);\n     * // => 3\n     */\n    function lastIndexOf(array, value, fromIndex) {\n      var length = array ? array.length : 0;\n      if (!length) {\n        return -1;\n      }\n      var index = length;\n      if (typeof fromIndex == 'number') {\n        index = (fromIndex < 0 ? nativeMax(length + fromIndex, 0) : nativeMin(fromIndex || 0, length - 1)) + 1;\n      } else if (fromIndex) {\n        index = binaryIndex(array, value, true) - 1;\n        var other = array[index];\n        if (value === value ? (value === other) : (other !== other)) {\n          return index;\n        }\n        return -1;\n      }\n      if (value !== value) {\n        return indexOfNaN(array, index, true);\n      }\n      while (index--) {\n        if (array[index] === value) {\n          return index;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * Removes all provided values from `array` using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * **Note:** Unlike `_.without`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...*} [values] The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3, 1, 2, 3];\n     *\n     * _.pull(array, 2, 3);\n     * console.log(array);\n     * // => [1, 1]\n     */\n    function pull() {\n      var args = arguments,\n          array = args[0];\n\n      if (!(array && array.length)) {\n        return array;\n      }\n      var index = 0,\n          indexOf = getIndexOf(),\n          length = args.length;\n\n      while (++index < length) {\n        var fromIndex = 0,\n            value = args[index];\n\n        while ((fromIndex = indexOf(array, value, fromIndex)) > -1) {\n          splice.call(array, fromIndex, 1);\n        }\n      }\n      return array;\n    }\n\n    /**\n     * Removes elements from `array` corresponding to the given indexes and returns\n     * an array of the removed elements. Indexes may be specified as an array of\n     * indexes or as individual arguments.\n     *\n     * **Note:** Unlike `_.at`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...(number|number[])} [indexes] The indexes of elements to remove,\n     *  specified as individual indexes or arrays of indexes.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = [5, 10, 15, 20];\n     * var evens = _.pullAt(array, 1, 3);\n     *\n     * console.log(array);\n     * // => [5, 15]\n     *\n     * console.log(evens);\n     * // => [10, 20]\n     */\n    var pullAt = restParam(function(array, indexes) {\n      indexes = baseFlatten(indexes);\n\n      var result = baseAt(array, indexes);\n      basePullAt(array, indexes.sort(baseCompareAscending));\n      return result;\n    });\n\n    /**\n     * Removes all elements from `array` that `predicate` returns truthy for\n     * and returns an array of the removed elements. The predicate is bound to\n     * `thisArg` and invoked with three arguments: (value, index, array).\n     *\n     * If a property name is provided for `predicate` the created `_.property`\n     * style callback returns the property value of the given element.\n     *\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\n     * style callback returns `true` for elements that have a matching property\n     * value, else `false`.\n     *\n     * If an object is provided for `predicate` the created `_.matches` style\n     * callback returns `true` for elements that have the properties of the given\n     * object, else `false`.\n     *\n     * **Note:** Unlike `_.filter`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Function|Object|string} [predicate=_.identity] The function invoked\n     *  per iteration.\n     * @param {*} [thisArg] The `this` binding of `predicate`.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = [1, 2, 3, 4];\n     * var evens = _.remove(array, function(n) {\n     *   return n % 2 == 0;\n     * });\n     *\n     * console.log(array);\n     * // => [1, 3]\n     *\n     * console.log(evens);\n     * // => [2, 4]\n     */\n    function remove(array, predicate, thisArg) {\n      var result = [];\n      if (!(array && array.length)) {\n        return result;\n      }\n      var index = -1,\n          indexes = [],\n          length = array.length;\n\n      predicate = getCallback(predicate, thisArg, 3);\n      while (++index < length) {\n        var value = array[index];\n        if (predicate(value, index, array)) {\n          result.push(value);\n          indexes.push(index);\n        }\n      }\n      basePullAt(array, indexes);\n      return result;\n    }\n\n    /**\n     * Gets all but the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @alias tail\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.rest([1, 2, 3]);\n     * // => [2, 3]\n     */\n    function rest(array) {\n      return drop(array, 1);\n    }\n\n    /**\n     * Creates a slice of `array` from `start` up to, but not including, `end`.\n     *\n     * **Note:** This method is used instead of `Array#slice` to support node\n     * lists in IE < 9 and to ensure dense arrays are returned.\n     *\n     * @static\n     * @memberOf _\n     * @category Array\n     * @param {Array} array The array to slice.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function slice(array, start, end) {\n      var length = array ? array.length : 0;\n      if (!length) {\n        return [];\n      }\n      if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n        start = 0;\n        end = length;\n      }\n      return baseSlice(array, start, end);\n    }\n\n    /**\n     * Uses a binary search to determine the lowest index at which `value` should\n     * be inserted into `array` in order to maintain its sort order. If an iteratee\n     * function is provided it is invoked for `value` and each element of `array`\n     * to compute their sort ranking. The iteratee is bound to `thisArg` and\n     * invoked with one argument; (value).\n     *\n     * If a property name is provided for `iteratee` the created `_.property`\n     * style callback returns the property value of the given element.\n     *\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\n     * style callback returns `true` for elements that have a matching property\n     * value, else `false`.\n     *\n     * If an object is provided for `iteratee` the created `_.matches` style\n     * callback returns `true` for elements that have the properties of the given\n     * object, else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function|Object|string} [iteratee=_.identity] The function invoked\n     *  per iteration.\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedIndex([30, 50], 40);\n     * // => 1\n     *\n     * _.sortedIndex([4, 4, 5, 5], 5);\n     * // => 2\n     *\n     * var dict = { 'data': { 'thirty': 30, 'forty': 40, 'fifty': 50 } };\n     *\n     * // using an iteratee function\n     * _.sortedIndex(['thirty', 'fifty'], 'forty', function(word) {\n     *   return this.data[word];\n     * }, dict);\n     * // => 1\n     *\n     * // using the `_.property` callback shorthand\n     * _.sortedIndex([{ 'x': 30 }, { 'x': 50 }], { 'x': 40 }, 'x');\n     * // => 1\n     */\n    var sortedIndex = createSortedIndex();\n\n    /**\n     * This method is like `_.sortedIndex` except that it returns the highest\n     * index at which `value` should be inserted into `array` in order to\n     * maintain its sort order.\n     *\n     * @static\n     * @memberOf _\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function|Object|string} [iteratee=_.identity] The function invoked\n     *  per iteration.\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedLastIndex([4, 4, 5, 5], 5);\n     * // => 4\n     */\n    var sortedLastIndex = createSortedIndex(true);\n\n    /**\n     * Creates a slice of `array` with `n` elements taken from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.take([1, 2, 3]);\n     * // => [1]\n     *\n     * _.take([1, 2, 3], 2);\n     * // => [1, 2]\n     *\n     * _.take([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.take([1, 2, 3], 0);\n     * // => []\n     */\n    function take(array, n, guard) {\n      var length = array ? array.length : 0;\n      if (!length) {\n        return [];\n      }\n      if (guard ? isIterateeCall(array, n, guard) : n == null) {\n        n = 1;\n      }\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements taken from the end.\n     *\n     * @static\n     * @memberOf _\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.takeRight([1, 2, 3]);\n     * // => [3]\n     *\n     * _.takeRight([1, 2, 3], 2);\n     * // => [2, 3]\n     *\n     * _.takeRight([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.takeRight([1, 2, 3], 0);\n     * // => []\n     */\n    function takeRight(array, n, guard) {\n      var length = array ? array.length : 0;\n      if (!length) {\n        return [];\n      }\n      if (guard ? isIterateeCall(array, n, guard) : n == null) {\n        n = 1;\n      }\n      n = length - (+n || 0);\n      return baseSlice(array, n < 0 ? 0 : n);\n    }\n\n    /**\n     * Creates a slice of `array` with elements taken from the end. Elements are\n     * taken until `predicate` returns falsey. The predicate is bound to `thisArg`\n     * and invoked with three arguments: (value, index, array).\n     *\n     * If a property name is provided for `predicate` the created `_.property`\n     * style callback returns the property value of the given element.\n     *\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\n     * style callback returns `true` for elements that have a matching property\n     * value, else `false`.\n     *\n     * If an object is provided for `predicate` the created `_.matches` style\n     * callback returns `true` for elements that have the properties of the given\n     * object, else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function|Object|string} [predicate=_.identity] The function invoked\n     *  per iteration.\n     * @param {*} [thisArg] The `this` binding of `predicate`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.takeRightWhile([1, 2, 3], function(n) {\n     *   return n > 1;\n     * });\n     * // => [2, 3]\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * // using the `_.matches` callback shorthand\n     * _.pluck(_.takeRightWhile(users, { 'user': 'pebbles', 'active': false }), 'user');\n     * // => ['pebbles']\n     *\n     * // using the `_.matchesProperty` callback shorthand\n     * _.pluck(_.takeRightWhile(users, 'active', false), 'user');\n     * // => ['fred', 'pebbles']\n     *\n     * // using the `_.property` callback shorthand\n     * _.pluck(_.takeRightWhile(users, 'active'), 'user');\n     * // => []\n     */\n    function takeRightWhile(array, predicate, thisArg) {\n      return (array && array.length)\n        ? baseWhile(array, getCallback(predicate, thisArg, 3), false, true)\n        : [];\n    }\n\n    /**\n     * Creates a slice of `array` with elements taken from the beginning. Elements\n     * are taken until `predicate` returns falsey. The predicate is bound to\n     * `thisArg` and invoked with three arguments: (value, index, array).\n     *\n     * If a property name is provided for `predicate` the created `_.property`\n     * style callback returns the property value of the given element.\n     *\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\n     * style callback returns `true` for elements that have a matching property\n     * value, else `false`.\n     *\n     * If an object is provided for `predicate` the created `_.matches` style\n     * callback returns `true` for elements that have the properties of the given\n     * object, else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function|Object|string} [predicate=_.identity] The function invoked\n     *  per iteration.\n     * @param {*} [thisArg] The `this` binding of `predicate`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.takeWhile([1, 2, 3], function(n) {\n     *   return n < 3;\n     * });\n     * // => [1, 2]\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false},\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * // using the `_.matches` callback shorthand\n     * _.pluck(_.takeWhile(users, { 'user': 'barney', 'active': false }), 'user');\n     * // => ['barney']\n     *\n     * // using the `_.matchesProperty` callback shorthand\n     * _.pluck(_.takeWhile(users, 'active', false), 'user');\n     * // => ['barney', 'fred']\n     *\n     * // using the `_.property` callback shorthand\n     * _.pluck(_.takeWhile(users, 'active'), 'user');\n     * // => []\n     */\n    function takeWhile(array, predicate, thisArg) {\n      return (array && array.length)\n        ? baseWhile(array, getCallback(predicate, thisArg, 3))\n        : [];\n    }\n\n    /**\n     * Creates an array of unique values, in order, from all of the provided arrays\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * _.union([1, 2], [4, 2], [2, 1]);\n     * // => [1, 2, 4]\n     */\n    var union = restParam(function(arrays) {\n      return baseUniq(baseFlatten(arrays, false, true));\n    });\n\n    /**\n     * Creates a duplicate-free version of an array, using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)\n     * for equality comparisons, in which only the first occurence of each element\n     * is kept. Providing `true` for `isSorted` performs a faster search algorithm\n     * for sorted arrays. If an iteratee function is provided it is invoked for\n     * each element in the array to generate the criterion by which uniqueness\n     * is computed. The `iteratee` is bound to `thisArg` and invoked with three\n     * arguments: (value, index, array).\n     *\n     * If a property name is provided for `iteratee` the created `_.property`\n     * style callback returns the property value of the given element.\n     *\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\n     * style callback returns `true` for elements that have a matching property\n     * value, else `false`.\n     *\n     * If an object is provided for `iteratee` the created `_.matches` style\n     * callback returns `true` for elements that have the properties of the given\n     * object, else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @alias unique\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {boolean} [isSorted] Specify the array is sorted.\n     * @param {Function|Object|string} [iteratee] The function invoked per iteration.\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\n     * @returns {Array} Returns the new duplicate-value-free array.\n     * @example\n     *\n     * _.uniq([2, 1, 2]);\n     * // => [2, 1]\n     *\n     * // using `isSorted`\n     * _.uniq([1, 1, 2], true);\n     * // => [1, 2]\n     *\n     * // using an iteratee function\n     * _.uniq([1, 2.5, 1.5, 2], function(n) {\n     *   return this.floor(n);\n     * }, Math);\n     * // => [1, 2.5]\n     *\n     * // using the `_.property` callback shorthand\n     * _.uniq([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */\n    function uniq(array, isSorted, iteratee, thisArg) {\n      var length = array ? array.length : 0;\n      if (!length) {\n        return [];\n      }\n      if (isSorted != null && typeof isSorted != 'boolean') {\n        thisArg = iteratee;\n        iteratee = isIterateeCall(array, isSorted, thisArg) ? undefined : isSorted;\n        isSorted = false;\n      }\n      var callback = getCallback();\n      if (!(iteratee == null && callback === baseCallback)) {\n        iteratee = callback(iteratee, thisArg, 3);\n      }\n      return (isSorted && getIndexOf() == baseIndexOf)\n        ? sortedUniq(array, iteratee)\n        : baseUniq(array, iteratee);\n    }\n\n    /**\n     * This method is like `_.zip` except that it accepts an array of grouped\n     * elements and creates an array regrouping the elements to their pre-zip\n     * configuration.\n     *\n     * @static\n     * @memberOf _\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip(['fred', 'barney'], [30, 40], [true, false]);\n     * // => [['fred', 30, true], ['barney', 40, false]]\n     *\n     * _.unzip(zipped);\n     * // => [['fred', 'barney'], [30, 40], [true, false]]\n     */\n    function unzip(array) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      var index = -1,\n          length = 0;\n\n      array = arrayFilter(array, function(group) {\n        if (isArrayLike(group)) {\n          length = nativeMax(group.length, length);\n          return true;\n        }\n      });\n      var result = Array(length);\n      while (++index < length) {\n        result[index] = arrayMap(array, baseProperty(index));\n      }\n      return result;\n    }\n\n    /**\n     * This method is like `_.unzip` except that it accepts an iteratee to specify\n     * how regrouped values should be combined. The `iteratee` is bound to `thisArg`\n     * and invoked with four arguments: (accumulator, value, index, group).\n     *\n     * @static\n     * @memberOf _\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @param {Function} [iteratee] The function to combine regrouped values.\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n     * // => [[1, 10, 100], [2, 20, 200]]\n     *\n     * _.unzipWith(zipped, _.add);\n     * // => [3, 30, 300]\n     */\n    function unzipWith(array, iteratee, thisArg) {\n      var length = array ? array.length : 0;\n      if (!length) {\n        return [];\n      }\n      var result = unzip(array);\n      if (iteratee == null) {\n        return result;\n      }\n      iteratee = bindCallback(iteratee, thisArg, 4);\n      return arrayMap(result, function(group) {\n        return arrayReduce(group, iteratee, undefined, true);\n      });\n    }\n\n    /**\n     * Creates an array excluding all provided values using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @category Array\n     * @param {Array} array The array to filter.\n     * @param {...*} [values] The values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.without([1, 2, 1, 3], 1, 2);\n     * // => [3]\n     */\n    var without = restParam(function(array, values) {\n      return isArrayLike(array)\n        ? baseDifference(array, values)\n        : [];\n    });\n\n    /**\n     * Creates an array of unique values that is the [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n     * of the provided arrays.\n     *\n     * @static\n     * @memberOf _\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of values.\n     * @example\n     *\n     * _.xor([1, 2], [4, 2]);\n     * // => [1, 4]\n     */\n    function xor() {\n      var index = -1,\n          length = arguments.length;\n\n      while (++index < length) {\n        var array = arguments[index];\n        if (isArrayLike(array)) {\n          var result = result\n            ? arrayPush(baseDifference(result, array), baseDifference(array, result))\n            : array;\n        }\n      }\n      return result ? baseUniq(result) : [];\n    }\n\n    /**\n     * Creates an array of grouped elements, the first of which contains the first\n     * elements of the given arrays, the second of which contains the second elements\n     * of the given arrays, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zip(['fred', 'barney'], [30, 40], [true, false]);\n     * // => [['fred', 30, true], ['barney', 40, false]]\n     */\n    var zip = restParam(unzip);\n\n    /**\n     * The inverse of `_.pairs`; this method returns an object composed from arrays\n     * of property names and values. Provide either a single two dimensional array,\n     * e.g. `[[key1, value1], [key2, value2]]` or two arrays, one of property names\n     * and one of corresponding values.\n     *\n     * @static\n     * @memberOf _\n     * @alias object\n     * @category Array\n     * @param {Array} props The property names.\n     * @param {Array} [values=[]] The property values.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.zipObject([['fred', 30], ['barney', 40]]);\n     * // => { 'fred': 30, 'barney': 40 }\n     *\n     * _.zipObject(['fred', 'barney'], [30, 40]);\n     * // => { 'fred': 30, 'barney': 40 }\n     */\n    function zipObject(props, values) {\n      var index = -1,\n          length = props ? props.length : 0,\n          result = {};\n\n      if (length && !values && !isArray(props[0])) {\n        values = [];\n      }\n      while (++index < length) {\n        var key = props[index];\n        if (values) {\n          result[key] = values[index];\n        } else if (key) {\n          result[key[0]] = key[1];\n        }\n      }\n      return result;\n    }\n\n    /**\n     * This method is like `_.zip` except that it accepts an iteratee to specify\n     * how grouped values should be combined. The `iteratee` is bound to `thisArg`\n     * and invoked with four arguments: (accumulator, value, index, group).\n     *\n     * @static\n     * @memberOf _\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @param {Function} [iteratee] The function to combine grouped values.\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zipWith([1, 2], [10, 20], [100, 200], _.add);\n     * // => [111, 222]\n     */\n    var zipWith = restParam(function(arrays) {\n      var length = arrays.length,\n          iteratee = length > 2 ? arrays[length - 2] : undefined,\n          thisArg = length > 1 ? arrays[length - 1] : undefined;\n\n      if (length > 2 && typeof iteratee == 'function') {\n        length -= 2;\n      } else {\n        iteratee = (length > 1 && typeof thisArg == 'function') ? (--length, thisArg) : undefined;\n        thisArg = undefined;\n      }\n      arrays.length = length;\n      return unzipWith(arrays, iteratee, thisArg);\n    });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` object that wraps `value` with explicit method\n     * chaining enabled.\n     *\n     * @static\n     * @memberOf _\n     * @category Chain\n     * @param {*} value The value to wrap.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36 },\n     *   { 'user': 'fred',    'age': 40 },\n     *   { 'user': 'pebbles', 'age': 1 }\n     * ];\n     *\n     * var youngest = _.chain(users)\n     *   .sortBy('age')\n     *   .map(function(chr) {\n     *     return chr.user + ' is ' + chr.age;\n     *   })\n     *   .first()\n     *   .value();\n     * // => 'pebbles is 1'\n     */\n    function chain(value) {\n      var result = lodash(value);\n      result.__chain__ = true;\n      return result;\n    }\n\n    /**\n     * This method invokes `interceptor` and returns `value`. The interceptor is\n     * bound to `thisArg` and invoked with one argument; (value). The purpose of\n     * this method is to \"tap into\" a method chain in order to perform operations\n     * on intermediate results within the chain.\n     *\n     * @static\n     * @memberOf _\n     * @category Chain\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @param {*} [thisArg] The `this` binding of `interceptor`.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * _([1, 2, 3])\n     *  .tap(function(array) {\n     *    array.pop();\n     *  })\n     *  .reverse()\n     *  .value();\n     * // => [2, 1]\n     */\n    function tap(value, interceptor, thisArg) {\n      interceptor.call(thisArg, value);\n      return value;\n    }\n\n    /**\n     * This method is like `_.tap` except that it returns the result of `interceptor`.\n     *\n     * @static\n     * @memberOf _\n     * @category Chain\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @param {*} [thisArg] The `this` binding of `interceptor`.\n     * @returns {*} Returns the result of `interceptor`.\n     * @example\n     *\n     * _('  abc  ')\n     *  .chain()\n     *  .trim()\n     *  .thru(function(value) {\n     *    return [value];\n     *  })\n     *  .value();\n     * // => ['abc']\n     */\n    function thru(value, interceptor, thisArg) {\n      return interceptor.call(thisArg, value);\n    }\n\n    /**\n     * Enables explicit method chaining on the wrapper object.\n     *\n     * @name chain\n     * @memberOf _\n     * @category Chain\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 40 }\n     * ];\n     *\n     * // without explicit chaining\n     * _(users).first();\n     * // => { 'user': 'barney', 'age': 36 }\n     *\n     * // with explicit chaining\n     * _(users).chain()\n     *   .first()\n     *   .pick('user')\n     *   .value();\n     * // => { 'user': 'barney' }\n     */\n    function wrapperChain() {\n      return chain(this);\n    }\n\n    /**\n     * Executes the chained sequence and returns the wrapped result.\n     *\n     * @name commit\n     * @memberOf _\n     * @category Chain\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2];\n     * var wrapped = _(array).push(3);\n     *\n     * console.log(array);\n     * // => [1, 2]\n     *\n     * wrapped = wrapped.commit();\n     * console.log(array);\n     * // => [1, 2, 3]\n     *\n     * wrapped.last();\n     * // => 3\n     *\n     * console.log(array);\n     * // => [1, 2, 3]\n     */\n    function wrapperCommit() {\n      return new LodashWrapper(this.value(), this.__chain__);\n    }\n\n    /**\n     * Creates a new array joining a wrapped array with any additional arrays\n     * and/or values.\n     *\n     * @name concat\n     * @memberOf _\n     * @category Chain\n     * @param {...*} [values] The values to concatenate.\n     * @returns {Array} Returns the new concatenated array.\n     * @example\n     *\n     * var array = [1];\n     * var wrapped = _(array).concat(2, [3], [[4]]);\n     *\n     * console.log(wrapped.value());\n     * // => [1, 2, 3, [4]]\n     *\n     * console.log(array);\n     * // => [1]\n     */\n    var wrapperConcat = restParam(function(values) {\n      values = baseFlatten(values);\n      return this.thru(function(array) {\n        return arrayConcat(isArray(array) ? array : [toObject(array)], values);\n      });\n    });\n\n    /**\n     * Creates a clone of the chained sequence planting `value` as the wrapped value.\n     *\n     * @name plant\n     * @memberOf _\n     * @category Chain\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2];\n     * var wrapped = _(array).map(function(value) {\n     *   return Math.pow(value, 2);\n     * });\n     *\n     * var other = [3, 4];\n     * var otherWrapped = wrapped.plant(other);\n     *\n     * otherWrapped.value();\n     * // => [9, 16]\n     *\n     * wrapped.value();\n     * // => [1, 4]\n     */\n    function wrapperPlant(value) {\n      var result,\n          parent = this;\n\n      while (parent instanceof baseLodash) {\n        var clone = wrapperClone(parent);\n        if (result) {\n          previous.__wrapped__ = clone;\n        } else {\n          result = clone;\n        }\n        var previous = clone;\n        parent = parent.__wrapped__;\n      }\n      previous.__wrapped__ = value;\n      return result;\n    }\n\n    /**\n     * Reverses the wrapped array so the first element becomes the last, the\n     * second element becomes the second to last, and so on.\n     *\n     * **Note:** This method mutates the wrapped array.\n     *\n     * @name reverse\n     * @memberOf _\n     * @category Chain\n     * @returns {Object} Returns the new reversed `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _(array).reverse().value()\n     * // => [3, 2, 1]\n     *\n     * console.log(array);\n     * // => [3, 2, 1]\n     */\n    function wrapperReverse() {\n      var value = this.__wrapped__;\n\n      var interceptor = function(value) {\n        return (wrapped && wrapped.__dir__ < 0) ? value : value.reverse();\n      };\n      if (value instanceof LazyWrapper) {\n        var wrapped = value;\n        if (this.__actions__.length) {\n          wrapped = new LazyWrapper(this);\n        }\n        wrapped = wrapped.reverse();\n        wrapped.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });\n        return new LodashWrapper(wrapped, this.__chain__);\n      }\n      return this.thru(interceptor);\n    }\n\n    /**\n     * Produces the result of coercing the unwrapped value to a string.\n     *\n     * @name toString\n     * @memberOf _\n     * @category Chain\n     * @returns {string} Returns the coerced string value.\n     * @example\n     *\n     * _([1, 2, 3]).toString();\n     * // => '1,2,3'\n     */\n    function wrapperToString() {\n      return (this.value() + '');\n    }\n\n    /**\n     * Executes the chained sequence to extract the unwrapped value.\n     *\n     * @name value\n     * @memberOf _\n     * @alias run, toJSON, valueOf\n     * @category Chain\n     * @returns {*} Returns the resolved unwrapped value.\n     * @example\n     *\n     * _([1, 2, 3]).value();\n     * // => [1, 2, 3]\n     */\n    function wrapperValue() {\n      return baseWrapperValue(this.__wrapped__, this.__actions__);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an array of elements corresponding to the given keys, or indexes,\n     * of `collection`. Keys may be specified as individual arguments or as arrays\n     * of keys.\n     *\n     * @static\n     * @memberOf _\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {...(number|number[]|string|string[])} [props] The property names\n     *  or indexes of elements to pick, specified individually or in arrays.\n     * @returns {Array} Returns the new array of picked elements.\n     * @example\n     *\n     * _.at(['a', 'b', 'c'], [0, 2]);\n     * // => ['a', 'c']\n     *\n     * _.at(['barney', 'fred', 'pebbles'], 0, 2);\n     * // => ['barney', 'pebbles']\n     */\n    var at = restParam(function(collection, props) {\n      return baseAt(collection, baseFlatten(props));\n    });\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` through `iteratee`. The corresponding value\n     * of each key is the number of times the key was returned by `iteratee`.\n     * The `iteratee` is bound to `thisArg` and invoked with three arguments:\n     * (value, index|key, collection).\n     *\n     * If a property name is provided for `iteratee` the created `_.property`\n     * style callback returns the property value of the given element.\n     *\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\n     * style callback returns `true` for elements that have a matching property\n     * value, else `false`.\n     *\n     * If an object is provided for `iteratee` the created `_.matches` style\n     * callback returns `true` for elements that have the properties of the given\n     * object, else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function|Object|string} [iteratee=_.identity] The function invoked\n     *  per iteration.\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.countBy([4.3, 6.1, 6.4], function(n) {\n     *   return Math.floor(n);\n     * });\n     * // => { '4': 1, '6': 2 }\n     *\n     * _.countBy([4.3, 6.1, 6.4], function(n) {\n     *   return this.floor(n);\n     * }, Math);\n     * // => { '4': 1, '6': 2 }\n     *\n     * _.countBy(['one', 'two', 'three'], 'length');\n     * // => { '3': 2, '5': 1 }\n     */\n    var countBy = createAggregator(function(result, value, key) {\n      hasOwnProperty.call(result, key) ? ++result[key] : (result[key] = 1);\n    });\n\n    /**\n     * Checks if `predicate` returns truthy for **all** elements of `collection`.\n     * The predicate is bound to `thisArg` and invoked with three arguments:\n     * (value, index|key, collection).\n     *\n     * If a property name is provided for `predicate` the created `_.property`\n     * style callback returns the property value of the given element.\n     *\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\n     * style callback returns `true` for elements that have a matching property\n     * value, else `false`.\n     *\n     * If an object is provided for `predicate` the created `_.matches` style\n     * callback returns `true` for elements that have the properties of the given\n     * object, else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @alias all\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function|Object|string} [predicate=_.identity] The function invoked\n     *  per iteration.\n     * @param {*} [thisArg] The `this` binding of `predicate`.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.every([true, 1, null, 'yes'], Boolean);\n     * // => false\n     *\n     * var users = [\n     *   { 'user': 'barney', 'active': false },\n     *   { 'user': 'fred',   'active': false }\n     * ];\n     *\n     * // using the `_.matches` callback shorthand\n     * _.every(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // using the `_.matchesProperty` callback shorthand\n     * _.every(users, 'active', false);\n     * // => true\n     *\n     * // using the `_.property` callback shorthand\n     * _.every(users, 'active');\n     * // => false\n     */\n    function every(collection, predicate, thisArg) {\n      var func = isArray(collection) ? arrayEvery : baseEvery;\n      if (thisArg && isIterateeCall(collection, predicate, thisArg)) {\n        predicate = undefined;\n      }\n      if (typeof predicate != 'function' || thisArg !== undefined) {\n        predicate = getCallback(predicate, thisArg, 3);\n      }\n      return func(collection, predicate);\n    }\n\n    /**\n     * Iterates over elements of `collection`, returning an array of all elements\n     * `predicate` returns truthy for. The predicate is bound to `thisArg` and\n     * invoked with three arguments: (value, index|key, collection).\n     *\n     * If a property name is provided for `predicate` the created `_.property`\n     * style callback returns the property value of the given element.\n     *\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\n     * style callback returns `true` for elements that have a matching property\n     * value, else `false`.\n     *\n     * If an object is provided for `predicate` the created `_.matches` style\n     * callback returns `true` for elements that have the properties of the given\n     * object, else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @alias select\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function|Object|string} [predicate=_.identity] The function invoked\n     *  per iteration.\n     * @param {*} [thisArg] The `this` binding of `predicate`.\n     * @returns {Array} Returns the new filtered array.\n     * @example\n     *\n     * _.filter([4, 5, 6], function(n) {\n     *   return n % 2 == 0;\n     * });\n     * // => [4, 6]\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * // using the `_.matches` callback shorthand\n     * _.pluck(_.filter(users, { 'age': 36, 'active': true }), 'user');\n     * // => ['barney']\n     *\n     * // using the `_.matchesProperty` callback shorthand\n     * _.pluck(_.filter(users, 'active', false), 'user');\n     * // => ['fred']\n     *\n     * // using the `_.property` callback shorthand\n     * _.pluck(_.filter(users, 'active'), 'user');\n     * // => ['barney']\n     */\n    function filter(collection, predicate, thisArg) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      predicate = getCallback(predicate, thisArg, 3);\n      return func(collection, predicate);\n    }\n\n    /**\n     * Iterates over elements of `collection`, returning the first element\n     * `predicate` returns truthy for. The predicate is bound to `thisArg` and\n     * invoked with three arguments: (value, index|key, collection).\n     *\n     * If a property name is provided for `predicate` the created `_.property`\n     * style callback returns the property value of the given element.\n     *\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\n     * style callback returns `true` for elements that have a matching property\n     * value, else `false`.\n     *\n     * If an object is provided for `predicate` the created `_.matches` style\n     * callback returns `true` for elements that have the properties of the given\n     * object, else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @alias detect\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to search.\n     * @param {Function|Object|string} [predicate=_.identity] The function invoked\n     *  per iteration.\n     * @param {*} [thisArg] The `this` binding of `predicate`.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': true },\n     *   { 'user': 'fred',    'age': 40, 'active': false },\n     *   { 'user': 'pebbles', 'age': 1,  'active': true }\n     * ];\n     *\n     * _.result(_.find(users, function(chr) {\n     *   return chr.age < 40;\n     * }), 'user');\n     * // => 'barney'\n     *\n     * // using the `_.matches` callback shorthand\n     * _.result(_.find(users, { 'age': 1, 'active': true }), 'user');\n     * // => 'pebbles'\n     *\n     * // using the `_.matchesProperty` callback shorthand\n     * _.result(_.find(users, 'active', false), 'user');\n     * // => 'fred'\n     *\n     * // using the `_.property` callback shorthand\n     * _.result(_.find(users, 'active'), 'user');\n     * // => 'barney'\n     */\n    var find = createFind(baseEach);\n\n    /**\n     * This method is like `_.find` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to search.\n     * @param {Function|Object|string} [predicate=_.identity] The function invoked\n     *  per iteration.\n     * @param {*} [thisArg] The `this` binding of `predicate`.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * _.findLast([1, 2, 3, 4], function(n) {\n     *   return n % 2 == 1;\n     * });\n     * // => 3\n     */\n    var findLast = createFind(baseEachRight, true);\n\n    /**\n     * Performs a deep comparison between each element in `collection` and the\n     * source object, returning the first element that has equivalent property\n     * values.\n     *\n     * **Note:** This method supports comparing arrays, booleans, `Date` objects,\n     * numbers, `Object` objects, regexes, and strings. Objects are compared by\n     * their own, not inherited, enumerable properties. For comparing a single\n     * own or inherited property value see `_.matchesProperty`.\n     *\n     * @static\n     * @memberOf _\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to search.\n     * @param {Object} source The object of property values to match.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * _.result(_.findWhere(users, { 'age': 36, 'active': true }), 'user');\n     * // => 'barney'\n     *\n     * _.result(_.findWhere(users, { 'age': 40, 'active': false }), 'user');\n     * // => 'fred'\n     */\n    function findWhere(collection, source) {\n      return find(collection, baseMatches(source));\n    }\n\n    /**\n     * Iterates over elements of `collection` invoking `iteratee` for each element.\n     * The `iteratee` is bound to `thisArg` and invoked with three arguments:\n     * (value, index|key, collection). Iteratee functions may exit iteration early\n     * by explicitly returning `false`.\n     *\n     * **Note:** As with other \"Collections\" methods, objects with a \"length\" property\n     * are iterated like arrays. To avoid this behavior `_.forIn` or `_.forOwn`\n     * may be used for object iteration.\n     *\n     * @static\n     * @memberOf _\n     * @alias each\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\n     * @returns {Array|Object|string} Returns `collection`.\n     * @example\n     *\n     * _([1, 2]).forEach(function(n) {\n     *   console.log(n);\n     * }).value();\n     * // => logs each value from left to right and returns the array\n     *\n     * _.forEach({ 'a': 1, 'b': 2 }, function(n, key) {\n     *   console.log(n, key);\n     * });\n     * // => logs each value-key pair and returns the object (iteration order is not guaranteed)\n     */\n    var forEach = createForEach(arrayEach, baseEach);\n\n    /**\n     * This method is like `_.forEach` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @alias eachRight\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\n     * @returns {Array|Object|string} Returns `collection`.\n     * @example\n     *\n     * _([1, 2]).forEachRight(function(n) {\n     *   console.log(n);\n     * }).value();\n     * // => logs each value from right to left and returns the array\n     */\n    var forEachRight = createForEach(arrayEachRight, baseEachRight);\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` through `iteratee`. The corresponding value\n     * of each key is an array of the elements responsible for generating the key.\n     * The `iteratee` is bound to `thisArg` and invoked with three arguments:\n     * (value, index|key, collection).\n     *\n     * If a property name is provided for `iteratee` the created `_.property`\n     * style callback returns the property value of the given element.\n     *\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\n     * style callback returns `true` for elements that have a matching property\n     * value, else `false`.\n     *\n     * If an object is provided for `iteratee` the created `_.matches` style\n     * callback returns `true` for elements that have the properties of the given\n     * object, else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function|Object|string} [iteratee=_.identity] The function invoked\n     *  per iteration.\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.groupBy([4.2, 6.1, 6.4], function(n) {\n     *   return Math.floor(n);\n     * });\n     * // => { '4': [4.2], '6': [6.1, 6.4] }\n     *\n     * _.groupBy([4.2, 6.1, 6.4], function(n) {\n     *   return this.floor(n);\n     * }, Math);\n     * // => { '4': [4.2], '6': [6.1, 6.4] }\n     *\n     * // using the `_.property` callback shorthand\n     * _.groupBy(['one', 'two', 'three'], 'length');\n     * // => { '3': ['one', 'two'], '5': ['three'] }\n     */\n    var groupBy = createAggregator(function(result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        result[key].push(value);\n      } else {\n        result[key] = [value];\n      }\n    });\n\n    /**\n     * Checks if `value` is in `collection` using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)\n     * for equality comparisons. If `fromIndex` is negative, it is used as the offset\n     * from the end of `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @alias contains, include\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to search.\n     * @param {*} target The value to search for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.reduce`.\n     * @returns {boolean} Returns `true` if a matching element is found, else `false`.\n     * @example\n     *\n     * _.includes([1, 2, 3], 1);\n     * // => true\n     *\n     * _.includes([1, 2, 3], 1, 2);\n     * // => false\n     *\n     * _.includes({ 'user': 'fred', 'age': 40 }, 'fred');\n     * // => true\n     *\n     * _.includes('pebbles', 'eb');\n     * // => true\n     */\n    function includes(collection, target, fromIndex, guard) {\n      var length = collection ? getLength(collection) : 0;\n      if (!isLength(length)) {\n        collection = values(collection);\n        length = collection.length;\n      }\n      if (typeof fromIndex != 'number' || (guard && isIterateeCall(target, fromIndex, guard))) {\n        fromIndex = 0;\n      } else {\n        fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : (fromIndex || 0);\n      }\n      return (typeof collection == 'string' || !isArray(collection) && isString(collection))\n        ? (fromIndex <= length && collection.indexOf(target, fromIndex) > -1)\n        : (!!length && getIndexOf(collection, target, fromIndex) > -1);\n    }\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` through `iteratee`. The corresponding value\n     * of each key is the last element responsible for generating the key. The\n     * iteratee function is bound to `thisArg` and invoked with three arguments:\n     * (value, index|key, collection).\n     *\n     * If a property name is provided for `iteratee` the created `_.property`\n     * style callback returns the property value of the given element.\n     *\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\n     * style callback returns `true` for elements that have a matching property\n     * value, else `false`.\n     *\n     * If an object is provided for `iteratee` the created `_.matches` style\n     * callback returns `true` for elements that have the properties of the given\n     * object, else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function|Object|string} [iteratee=_.identity] The function invoked\n     *  per iteration.\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * var keyData = [\n     *   { 'dir': 'left', 'code': 97 },\n     *   { 'dir': 'right', 'code': 100 }\n     * ];\n     *\n     * _.indexBy(keyData, 'dir');\n     * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n     *\n     * _.indexBy(keyData, function(object) {\n     *   return String.fromCharCode(object.code);\n     * });\n     * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n     *\n     * _.indexBy(keyData, function(object) {\n     *   return this.fromCharCode(object.code);\n     * }, String);\n     * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n     */\n    var indexBy = createAggregator(function(result, value, key) {\n      result[key] = value;\n    });\n\n    /**\n     * Invokes the method at `path` of each element in `collection`, returning\n     * an array of the results of each invoked method. Any additional arguments\n     * are provided to each invoked method. If `methodName` is a function it is\n     * invoked for, and `this` bound to, each element in `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Array|Function|string} path The path of the method to invoke or\n     *  the function invoked per iteration.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * _.invoke([[5, 1, 7], [3, 2, 1]], 'sort');\n     * // => [[1, 5, 7], [1, 2, 3]]\n     *\n     * _.invoke([123, 456], String.prototype.split, '');\n     * // => [['1', '2', '3'], ['4', '5', '6']]\n     */\n    var invoke = restParam(function(collection, path, args) {\n      var index = -1,\n          isFunc = typeof path == 'function',\n          isProp = isKey(path),\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value) {\n        var func = isFunc ? path : ((isProp && value != null) ? value[path] : undefined);\n        result[++index] = func ? func.apply(value, args) : invokePath(value, path, args);\n      });\n      return result;\n    });\n\n    /**\n     * Creates an array of values by running each element in `collection` through\n     * `iteratee`. The `iteratee` is bound to `thisArg` and invoked with three\n     * arguments: (value, index|key, collection).\n     *\n     * If a property name is provided for `iteratee` the created `_.property`\n     * style callback returns the property value of the given element.\n     *\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\n     * style callback returns `true` for elements that have a matching property\n     * value, else `false`.\n     *\n     * If an object is provided for `iteratee` the created `_.matches` style\n     * callback returns `true` for elements that have the properties of the given\n     * object, else `false`.\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n     *\n     * The guarded methods are:\n     * `ary`, `callback`, `chunk`, `clone`, `create`, `curry`, `curryRight`,\n     * `drop`, `dropRight`, `every`, `fill`, `flatten`, `invert`, `max`, `min`,\n     * `parseInt`, `slice`, `sortBy`, `take`, `takeRight`, `template`, `trim`,\n     * `trimLeft`, `trimRight`, `trunc`, `random`, `range`, `sample`, `some`,\n     * `sum`, `uniq`, and `words`\n     *\n     * @static\n     * @memberOf _\n     * @alias collect\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function|Object|string} [iteratee=_.identity] The function invoked\n     *  per iteration.\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\n     * @returns {Array} Returns the new mapped array.\n     * @example\n     *\n     * function timesThree(n) {\n     *   return n * 3;\n     * }\n     *\n     * _.map([1, 2], timesThree);\n     * // => [3, 6]\n     *\n     * _.map({ 'a': 1, 'b': 2 }, timesThree);\n     * // => [3, 6] (iteration order is not guaranteed)\n     *\n     * var users = [\n     *   { 'user': 'barney' },\n     *   { 'user': 'fred' }\n     * ];\n     *\n     * // using the `_.property` callback shorthand\n     * _.map(users, 'user');\n     * // => ['barney', 'fred']\n     */\n    function map(collection, iteratee, thisArg) {\n      var func = isArray(collection) ? arrayMap : baseMap;\n      iteratee = getCallback(iteratee, thisArg, 3);\n      return func(collection, iteratee);\n    }\n\n    /**\n     * Creates an array of elements split into two groups, the first of which\n     * contains elements `predicate` returns truthy for, while the second of which\n     * contains elements `predicate` returns falsey for. The predicate is bound\n     * to `thisArg` and invoked with three arguments: (value, index|key, collection).\n     *\n     * If a property name is provided for `predicate` the created `_.property`\n     * style callback returns the property value of the given element.\n     *\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\n     * style callback returns `true` for elements that have a matching property\n     * value, else `false`.\n     *\n     * If an object is provided for `predicate` the created `_.matches` style\n     * callback returns `true` for elements that have the properties of the given\n     * object, else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function|Object|string} [predicate=_.identity] The function invoked\n     *  per iteration.\n     * @param {*} [thisArg] The `this` binding of `predicate`.\n     * @returns {Array} Returns the array of grouped elements.\n     * @example\n     *\n     * _.partition([1, 2, 3], function(n) {\n     *   return n % 2;\n     * });\n     * // => [[1, 3], [2]]\n     *\n     * _.partition([1.2, 2.3, 3.4], function(n) {\n     *   return this.floor(n) % 2;\n     * }, Math);\n     * // => [[1.2, 3.4], [2.3]]\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': false },\n     *   { 'user': 'fred',    'age': 40, 'active': true },\n     *   { 'user': 'pebbles', 'age': 1,  'active': false }\n     * ];\n     *\n     * var mapper = function(array) {\n     *   return _.pluck(array, 'user');\n     * };\n     *\n     * // using the `_.matches` callback shorthand\n     * _.map(_.partition(users, { 'age': 1, 'active': false }), mapper);\n     * // => [['pebbles'], ['barney', 'fred']]\n     *\n     * // using the `_.matchesProperty` callback shorthand\n     * _.map(_.partition(users, 'active', false), mapper);\n     * // => [['barney', 'pebbles'], ['fred']]\n     *\n     * // using the `_.property` callback shorthand\n     * _.map(_.partition(users, 'active'), mapper);\n     * // => [['fred'], ['barney', 'pebbles']]\n     */\n    var partition = createAggregator(function(result, value, key) {\n      result[key ? 0 : 1].push(value);\n    }, function() { return [[], []]; });\n\n    /**\n     * Gets the property value of `path` from all elements in `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Array|string} path The path of the property to pluck.\n     * @returns {Array} Returns the property values.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 40 }\n     * ];\n     *\n     * _.pluck(users, 'user');\n     * // => ['barney', 'fred']\n     *\n     * var userIndex = _.indexBy(users, 'user');\n     * _.pluck(userIndex, 'age');\n     * // => [36, 40] (iteration order is not guaranteed)\n     */\n    function pluck(collection, path) {\n      return map(collection, property(path));\n    }\n\n    /**\n     * Reduces `collection` to a value which is the accumulated result of running\n     * each element in `collection` through `iteratee`, where each successive\n     * invocation is supplied the return value of the previous. If `accumulator`\n     * is not provided the first element of `collection` is used as the initial\n     * value. The `iteratee` is bound to `thisArg` and invoked with four arguments:\n     * (accumulator, value, index|key, collection).\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.reduce`, `_.reduceRight`, and `_.transform`.\n     *\n     * The guarded methods are:\n     * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `sortByAll`,\n     * and `sortByOrder`\n     *\n     * @static\n     * @memberOf _\n     * @alias foldl, inject\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\n     * @returns {*} Returns the accumulated value.\n     * @example\n     *\n     * _.reduce([1, 2], function(total, n) {\n     *   return total + n;\n     * });\n     * // => 3\n     *\n     * _.reduce({ 'a': 1, 'b': 2 }, function(result, n, key) {\n     *   result[key] = n * 3;\n     *   return result;\n     * }, {});\n     * // => { 'a': 3, 'b': 6 } (iteration order is not guaranteed)\n     */\n    var reduce = createReduce(arrayReduce, baseEach);\n\n    /**\n     * This method is like `_.reduce` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @alias foldr\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\n     * @returns {*} Returns the accumulated value.\n     * @example\n     *\n     * var array = [[0, 1], [2, 3], [4, 5]];\n     *\n     * _.reduceRight(array, function(flattened, other) {\n     *   return flattened.concat(other);\n     * }, []);\n     * // => [4, 5, 2, 3, 0, 1]\n     */\n    var reduceRight = createReduce(arrayReduceRight, baseEachRight);\n\n    /**\n     * The opposite of `_.filter`; this method returns the elements of `collection`\n     * that `predicate` does **not** return truthy for.\n     *\n     * @static\n     * @memberOf _\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function|Object|string} [predicate=_.identity] The function invoked\n     *  per iteration.\n     * @param {*} [thisArg] The `this` binding of `predicate`.\n     * @returns {Array} Returns the new filtered array.\n     * @example\n     *\n     * _.reject([1, 2, 3, 4], function(n) {\n     *   return n % 2 == 0;\n     * });\n     * // => [1, 3]\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false },\n     *   { 'user': 'fred',   'age': 40, 'active': true }\n     * ];\n     *\n     * // using the `_.matches` callback shorthand\n     * _.pluck(_.reject(users, { 'age': 40, 'active': true }), 'user');\n     * // => ['barney']\n     *\n     * // using the `_.matchesProperty` callback shorthand\n     * _.pluck(_.reject(users, 'active', false), 'user');\n     * // => ['fred']\n     *\n     * // using the `_.property` callback shorthand\n     * _.pluck(_.reject(users, 'active'), 'user');\n     * // => ['barney']\n     */\n    function reject(collection, predicate, thisArg) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      predicate = getCallback(predicate, thisArg, 3);\n      return func(collection, function(value, index, collection) {\n        return !predicate(value, index, collection);\n      });\n    }\n\n    /**\n     * Gets a random element or `n` random elements from a collection.\n     *\n     * @static\n     * @memberOf _\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to sample.\n     * @param {number} [n] The number of elements to sample.\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\n     * @returns {*} Returns the random sample(s).\n     * @example\n     *\n     * _.sample([1, 2, 3, 4]);\n     * // => 2\n     *\n     * _.sample([1, 2, 3, 4], 2);\n     * // => [3, 1]\n     */\n    function sample(collection, n, guard) {\n      if (guard ? isIterateeCall(collection, n, guard) : n == null) {\n        collection = toIterable(collection);\n        var length = collection.length;\n        return length > 0 ? collection[baseRandom(0, length - 1)] : undefined;\n      }\n      var index = -1,\n          result = toArray(collection),\n          length = result.length,\n          lastIndex = length - 1;\n\n      n = nativeMin(n < 0 ? 0 : (+n || 0), length);\n      while (++index < n) {\n        var rand = baseRandom(index, lastIndex),\n            value = result[rand];\n\n        result[rand] = result[index];\n        result[index] = value;\n      }\n      result.length = n;\n      return result;\n    }\n\n    /**\n     * Creates an array of shuffled values, using a version of the\n     * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n     *\n     * @static\n     * @memberOf _\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     * @example\n     *\n     * _.shuffle([1, 2, 3, 4]);\n     * // => [4, 1, 3, 2]\n     */\n    function shuffle(collection) {\n      return sample(collection, POSITIVE_INFINITY);\n    }\n\n    /**\n     * Gets the size of `collection` by returning its length for array-like\n     * values or the number of own enumerable properties for objects.\n     *\n     * @static\n     * @memberOf _\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @returns {number} Returns the size of `collection`.\n     * @example\n     *\n     * _.size([1, 2, 3]);\n     * // => 3\n     *\n     * _.size({ 'a': 1, 'b': 2 });\n     * // => 2\n     *\n     * _.size('pebbles');\n     * // => 7\n     */\n    function size(collection) {\n      var length = collection ? getLength(collection) : 0;\n      return isLength(length) ? length : keys(collection).length;\n    }\n\n    /**\n     * Checks if `predicate` returns truthy for **any** element of `collection`.\n     * The function returns as soon as it finds a passing value and does not iterate\n     * over the entire collection. The predicate is bound to `thisArg` and invoked\n     * with three arguments: (value, index|key, collection).\n     *\n     * If a property name is provided for `predicate` the created `_.property`\n     * style callback returns the property value of the given element.\n     *\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\n     * style callback returns `true` for elements that have a matching property\n     * value, else `false`.\n     *\n     * If an object is provided for `predicate` the created `_.matches` style\n     * callback returns `true` for elements that have the properties of the given\n     * object, else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @alias any\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function|Object|string} [predicate=_.identity] The function invoked\n     *  per iteration.\n     * @param {*} [thisArg] The `this` binding of `predicate`.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.some([null, 0, 'yes', false], Boolean);\n     * // => true\n     *\n     * var users = [\n     *   { 'user': 'barney', 'active': true },\n     *   { 'user': 'fred',   'active': false }\n     * ];\n     *\n     * // using the `_.matches` callback shorthand\n     * _.some(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // using the `_.matchesProperty` callback shorthand\n     * _.some(users, 'active', false);\n     * // => true\n     *\n     * // using the `_.property` callback shorthand\n     * _.some(users, 'active');\n     * // => true\n     */\n    function some(collection, predicate, thisArg) {\n      var func = isArray(collection) ? arraySome : baseSome;\n      if (thisArg && isIterateeCall(collection, predicate, thisArg)) {\n        predicate = undefined;\n      }\n      if (typeof predicate != 'function' || thisArg !== undefined) {\n        predicate = getCallback(predicate, thisArg, 3);\n      }\n      return func(collection, predicate);\n    }\n\n    /**\n     * Creates an array of elements, sorted in ascending order by the results of\n     * running each element in a collection through `iteratee`. This method performs\n     * a stable sort, that is, it preserves the original sort order of equal elements.\n     * The `iteratee` is bound to `thisArg` and invoked with three arguments:\n     * (value, index|key, collection).\n     *\n     * If a property name is provided for `iteratee` the created `_.property`\n     * style callback returns the property value of the given element.\n     *\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\n     * style callback returns `true` for elements that have a matching property\n     * value, else `false`.\n     *\n     * If an object is provided for `iteratee` the created `_.matches` style\n     * callback returns `true` for elements that have the properties of the given\n     * object, else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function|Object|string} [iteratee=_.identity] The function invoked\n     *  per iteration.\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * _.sortBy([1, 2, 3], function(n) {\n     *   return Math.sin(n);\n     * });\n     * // => [3, 1, 2]\n     *\n     * _.sortBy([1, 2, 3], function(n) {\n     *   return this.sin(n);\n     * }, Math);\n     * // => [3, 1, 2]\n     *\n     * var users = [\n     *   { 'user': 'fred' },\n     *   { 'user': 'pebbles' },\n     *   { 'user': 'barney' }\n     * ];\n     *\n     * // using the `_.property` callback shorthand\n     * _.pluck(_.sortBy(users, 'user'), 'user');\n     * // => ['barney', 'fred', 'pebbles']\n     */\n    function sortBy(collection, iteratee, thisArg) {\n      if (collection == null) {\n        return [];\n      }\n      if (thisArg && isIterateeCall(collection, iteratee, thisArg)) {\n        iteratee = undefined;\n      }\n      var index = -1;\n      iteratee = getCallback(iteratee, thisArg, 3);\n\n      var result = baseMap(collection, function(value, key, collection) {\n        return { 'criteria': iteratee(value, key, collection), 'index': ++index, 'value': value };\n      });\n      return baseSortBy(result, compareAscending);\n    }\n\n    /**\n     * This method is like `_.sortBy` except that it can sort by multiple iteratees\n     * or property names.\n     *\n     * If a property name is provided for an iteratee the created `_.property`\n     * style callback returns the property value of the given element.\n     *\n     * If an object is provided for an iteratee the created `_.matches` style\n     * callback returns `true` for elements that have the properties of the given\n     * object, else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {...(Function|Function[]|Object|Object[]|string|string[])} iteratees\n     *  The iteratees to sort by, specified as individual values or arrays of values.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'fred',   'age': 48 },\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 42 },\n     *   { 'user': 'barney', 'age': 34 }\n     * ];\n     *\n     * _.map(_.sortByAll(users, ['user', 'age']), _.values);\n     * // => [['barney', 34], ['barney', 36], ['fred', 42], ['fred', 48]]\n     *\n     * _.map(_.sortByAll(users, 'user', function(chr) {\n     *   return Math.floor(chr.age / 10);\n     * }), _.values);\n     * // => [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]]\n     */\n    var sortByAll = restParam(function(collection, iteratees) {\n      if (collection == null) {\n        return [];\n      }\n      var guard = iteratees[2];\n      if (guard && isIterateeCall(iteratees[0], iteratees[1], guard)) {\n        iteratees.length = 1;\n      }\n      return baseSortByOrder(collection, baseFlatten(iteratees), []);\n    });\n\n    /**\n     * This method is like `_.sortByAll` except that it allows specifying the\n     * sort orders of the iteratees to sort by. If `orders` is unspecified, all\n     * values are sorted in ascending order. Otherwise, a value is sorted in\n     * ascending order if its corresponding order is \"asc\", and descending if \"desc\".\n     *\n     * If a property name is provided for an iteratee the created `_.property`\n     * style callback returns the property value of the given element.\n     *\n     * If an object is provided for an iteratee the created `_.matches` style\n     * callback returns `true` for elements that have the properties of the given\n     * object, else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n     * @param {boolean[]} [orders] The sort orders of `iteratees`.\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.reduce`.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'fred',   'age': 48 },\n     *   { 'user': 'barney', 'age': 34 },\n     *   { 'user': 'fred',   'age': 42 },\n     *   { 'user': 'barney', 'age': 36 }\n     * ];\n     *\n     * // sort by `user` in ascending order and by `age` in descending order\n     * _.map(_.sortByOrder(users, ['user', 'age'], ['asc', 'desc']), _.values);\n     * // => [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]]\n     */\n    function sortByOrder(collection, iteratees, orders, guard) {\n      if (collection == null) {\n        return [];\n      }\n      if (guard && isIterateeCall(iteratees, orders, guard)) {\n        orders = undefined;\n      }\n      if (!isArray(iteratees)) {\n        iteratees = iteratees == null ? [] : [iteratees];\n      }\n      if (!isArray(orders)) {\n        orders = orders == null ? [] : [orders];\n      }\n      return baseSortByOrder(collection, iteratees, orders);\n    }\n\n    /**\n     * Performs a deep comparison between each element in `collection` and the\n     * source object, returning an array of all elements that have equivalent\n     * property values.\n     *\n     * **Note:** This method supports comparing arrays, booleans, `Date` objects,\n     * numbers, `Object` objects, regexes, and strings. Objects are compared by\n     * their own, not inherited, enumerable properties. For comparing a single\n     * own or inherited property value see `_.matchesProperty`.\n     *\n     * @static\n     * @memberOf _\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to search.\n     * @param {Object} source The object of property values to match.\n     * @returns {Array} Returns the new filtered array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false, 'pets': ['hoppy'] },\n     *   { 'user': 'fred',   'age': 40, 'active': true, 'pets': ['baby puss', 'dino'] }\n     * ];\n     *\n     * _.pluck(_.where(users, { 'age': 36, 'active': false }), 'user');\n     * // => ['barney']\n     *\n     * _.pluck(_.where(users, { 'pets': ['dino'] }), 'user');\n     * // => ['fred']\n     */\n    function where(collection, source) {\n      return filter(collection, baseMatches(source));\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Gets the number of milliseconds that have elapsed since the Unix epoch\n     * (1 January 1970 00:00:00 UTC).\n     *\n     * @static\n     * @memberOf _\n     * @category Date\n     * @example\n     *\n     * _.defer(function(stamp) {\n     *   console.log(_.now() - stamp);\n     * }, _.now());\n     * // => logs the number of milliseconds it took for the deferred function to be invoked\n     */\n    var now = nativeNow || function() {\n      return new Date().getTime();\n    };\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * The opposite of `_.before`; this method creates a function that invokes\n     * `func` once it is called `n` or more times.\n     *\n     * @static\n     * @memberOf _\n     * @category Function\n     * @param {number} n The number of calls before `func` is invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var saves = ['profile', 'settings'];\n     *\n     * var done = _.after(saves.length, function() {\n     *   console.log('done saving!');\n     * });\n     *\n     * _.forEach(saves, function(type) {\n     *   asyncSave({ 'type': type, 'complete': done });\n     * });\n     * // => logs 'done saving!' after the two async saves have completed\n     */\n    function after(n, func) {\n      if (typeof func != 'function') {\n        if (typeof n == 'function') {\n          var temp = n;\n          n = func;\n          func = temp;\n        } else {\n          throw new TypeError(FUNC_ERROR_TEXT);\n        }\n      }\n      n = nativeIsFinite(n = +n) ? n : 0;\n      return function() {\n        if (--n < 1) {\n          return func.apply(this, arguments);\n        }\n      };\n    }\n\n    /**\n     * Creates a function that accepts up to `n` arguments ignoring any\n     * additional arguments.\n     *\n     * @static\n     * @memberOf _\n     * @category Function\n     * @param {Function} func The function to cap arguments for.\n     * @param {number} [n=func.length] The arity cap.\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n     * // => [6, 8, 10]\n     */\n    function ary(func, n, guard) {\n      if (guard && isIterateeCall(func, n, guard)) {\n        n = undefined;\n      }\n      n = (func && n == null) ? func.length : nativeMax(+n || 0, 0);\n      return createWrapper(func, ARY_FLAG, undefined, undefined, undefined, undefined, n);\n    }\n\n    /**\n     * Creates a function that invokes `func`, with the `this` binding and arguments\n     * of the created function, while it is called less than `n` times. Subsequent\n     * calls to the created function return the result of the last `func` invocation.\n     *\n     * @static\n     * @memberOf _\n     * @category Function\n     * @param {number} n The number of calls at which `func` is no longer invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * jQuery('#add').on('click', _.before(5, addContactToList));\n     * // => allows adding up to 4 contacts to the list\n     */\n    function before(n, func) {\n      var result;\n      if (typeof func != 'function') {\n        if (typeof n == 'function') {\n          var temp = n;\n          n = func;\n          func = temp;\n        } else {\n          throw new TypeError(FUNC_ERROR_TEXT);\n        }\n      }\n      return function() {\n        if (--n > 0) {\n          result = func.apply(this, arguments);\n        }\n        if (n <= 1) {\n          func = undefined;\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of `thisArg`\n     * and prepends any additional `_.bind` arguments to those provided to the\n     * bound function.\n     *\n     * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n     * may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** Unlike native `Function#bind` this method does not set the \"length\"\n     * property of bound functions.\n     *\n     * @static\n     * @memberOf _\n     * @category Function\n     * @param {Function} func The function to bind.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * var greet = function(greeting, punctuation) {\n     *   return greeting + ' ' + this.user + punctuation;\n     * };\n     *\n     * var object = { 'user': 'fred' };\n     *\n     * var bound = _.bind(greet, object, 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * // using placeholders\n     * var bound = _.bind(greet, object, _, '!');\n     * bound('hi');\n     * // => 'hi fred!'\n     */\n    var bind = restParam(function(func, thisArg, partials) {\n      var bitmask = BIND_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, bind.placeholder);\n        bitmask |= PARTIAL_FLAG;\n      }\n      return createWrapper(func, bitmask, thisArg, partials, holders);\n    });\n\n    /**\n     * Binds methods of an object to the object itself, overwriting the existing\n     * method. Method names may be specified as individual arguments or as arrays\n     * of method names. If no method names are provided all enumerable function\n     * properties, own and inherited, of `object` are bound.\n     *\n     * **Note:** This method does not set the \"length\" property of bound functions.\n     *\n     * @static\n     * @memberOf _\n     * @category Function\n     * @param {Object} object The object to bind and assign the bound methods to.\n     * @param {...(string|string[])} [methodNames] The object method names to bind,\n     *  specified as individual method names or arrays of method names.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var view = {\n     *   'label': 'docs',\n     *   'onClick': function() {\n     *     console.log('clicked ' + this.label);\n     *   }\n     * };\n     *\n     * _.bindAll(view);\n     * jQuery('#docs').on('click', view.onClick);\n     * // => logs 'clicked docs' when the element is clicked\n     */\n    var bindAll = restParam(function(object, methodNames) {\n      methodNames = methodNames.length ? baseFlatten(methodNames) : functions(object);\n\n      var index = -1,\n          length = methodNames.length;\n\n      while (++index < length) {\n        var key = methodNames[index];\n        object[key] = createWrapper(object[key], BIND_FLAG, object);\n      }\n      return object;\n    });\n\n    /**\n     * Creates a function that invokes the method at `object[key]` and prepends\n     * any additional `_.bindKey` arguments to those provided to the bound function.\n     *\n     * This method differs from `_.bind` by allowing bound functions to reference\n     * methods that may be redefined or don't yet exist.\n     * See [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n     * for more details.\n     *\n     * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * @static\n     * @memberOf _\n     * @category Function\n     * @param {Object} object The object the method belongs to.\n     * @param {string} key The key of the method.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * var object = {\n     *   'user': 'fred',\n     *   'greet': function(greeting, punctuation) {\n     *     return greeting + ' ' + this.user + punctuation;\n     *   }\n     * };\n     *\n     * var bound = _.bindKey(object, 'greet', 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * object.greet = function(greeting, punctuation) {\n     *   return greeting + 'ya ' + this.user + punctuation;\n     * };\n     *\n     * bound('!');\n     * // => 'hiya fred!'\n     *\n     * // using placeholders\n     * var bound = _.bindKey(object, 'greet', _, '!');\n     * bound('hi');\n     * // => 'hiya fred!'\n     */\n    var bindKey = restParam(function(object, key, partials) {\n      var bitmask = BIND_FLAG | BIND_KEY_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, bindKey.placeholder);\n        bitmask |= PARTIAL_FLAG;\n      }\n      return createWrapper(key, bitmask, object, partials, holders);\n    });\n\n    /**\n     * Creates a function that accepts one or more arguments of `func` that when\n     * called either invokes `func` returning its result, if all `func` arguments\n     * have been provided, or returns a function that accepts one or more of the\n     * remaining `func` arguments, and so on. The arity of `func` may be specified\n     * if `func.length` is not sufficient.\n     *\n     * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n     * may be used as a placeholder for provided arguments.\n     *\n     * **Note:** This method does not set the \"length\" property of curried functions.\n     *\n     * @static\n     * @memberOf _\n     * @category Function\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var abc = function(a, b, c) {\n     *   return [a, b, c];\n     * };\n     *\n     * var curried = _.curry(abc);\n     *\n     * curried(1)(2)(3);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2)(3);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2, 3);\n     * // => [1, 2, 3]\n     *\n     * // using placeholders\n     * curried(1)(_, 3)(2);\n     * // => [1, 2, 3]\n     */\n    var curry = createCurry(CURRY_FLAG);\n\n    /**\n     * This method is like `_.curry` except that arguments are applied to `func`\n     * in the manner of `_.partialRight` instead of `_.partial`.\n     *\n     * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for provided arguments.\n     *\n     * **Note:** This method does not set the \"length\" property of curried functions.\n     *\n     * @static\n     * @memberOf _\n     * @category Function\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var abc = function(a, b, c) {\n     *   return [a, b, c];\n     * };\n     *\n     * var curried = _.curryRight(abc);\n     *\n     * curried(3)(2)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(2, 3)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2, 3);\n     * // => [1, 2, 3]\n     *\n     * // using placeholders\n     * curried(3)(1, _)(2);\n     * // => [1, 2, 3]\n     */\n    var curryRight = createCurry(CURRY_RIGHT_FLAG);\n\n    /**\n     * Creates a debounced function that delays invoking `func` until after `wait`\n     * milliseconds have elapsed since the last time the debounced function was\n     * invoked. The debounced function comes with a `cancel` method to cancel\n     * delayed invocations. Provide an options object to indicate that `func`\n     * should be invoked on the leading and/or trailing edge of the `wait` timeout.\n     * Subsequent calls to the debounced function return the result of the last\n     * `func` invocation.\n     *\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked\n     * on the trailing edge of the timeout only if the the debounced function is\n     * invoked more than once during the `wait` timeout.\n     *\n     * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation)\n     * for details over the differences between `_.debounce` and `_.throttle`.\n     *\n     * @static\n     * @memberOf _\n     * @category Function\n     * @param {Function} func The function to debounce.\n     * @param {number} [wait=0] The number of milliseconds to delay.\n     * @param {Object} [options] The options object.\n     * @param {boolean} [options.leading=false] Specify invoking on the leading\n     *  edge of the timeout.\n     * @param {number} [options.maxWait] The maximum time `func` is allowed to be\n     *  delayed before it is invoked.\n     * @param {boolean} [options.trailing=true] Specify invoking on the trailing\n     *  edge of the timeout.\n     * @returns {Function} Returns the new debounced function.\n     * @example\n     *\n     * // avoid costly calculations while the window size is in flux\n     * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n     *\n     * // invoke `sendMail` when the click event is fired, debouncing subsequent calls\n     * jQuery('#postbox').on('click', _.debounce(sendMail, 300, {\n     *   'leading': true,\n     *   'trailing': false\n     * }));\n     *\n     * // ensure `batchLog` is invoked once after 1 second of debounced calls\n     * var source = new EventSource('/stream');\n     * jQuery(source).on('message', _.debounce(batchLog, 250, {\n     *   'maxWait': 1000\n     * }));\n     *\n     * // cancel a debounced call\n     * var todoChanges = _.debounce(batchLog, 1000);\n     * Object.observe(models.todo, todoChanges);\n     *\n     * Object.observe(models, function(changes) {\n     *   if (_.find(changes, { 'user': 'todo', 'type': 'delete'})) {\n     *     todoChanges.cancel();\n     *   }\n     * }, ['delete']);\n     *\n     * // ...at some point `models.todo` is changed\n     * models.todo.completed = true;\n     *\n     * // ...before 1 second has passed `models.todo` is deleted\n     * // which cancels the debounced `todoChanges` call\n     * delete models.todo;\n     */\n    function debounce(func, wait, options) {\n      var args,\n          maxTimeoutId,\n          result,\n          stamp,\n          thisArg,\n          timeoutId,\n          trailingCall,\n          lastCalled = 0,\n          maxWait = false,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      wait = wait < 0 ? 0 : (+wait || 0);\n      if (options === true) {\n        var leading = true;\n        trailing = false;\n      } else if (isObject(options)) {\n        leading = !!options.leading;\n        maxWait = 'maxWait' in options && nativeMax(+options.maxWait || 0, wait);\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n\n      function cancel() {\n        if (timeoutId) {\n          clearTimeout(timeoutId);\n        }\n        if (maxTimeoutId) {\n          clearTimeout(maxTimeoutId);\n        }\n        lastCalled = 0;\n        maxTimeoutId = timeoutId = trailingCall = undefined;\n      }\n\n      function complete(isCalled, id) {\n        if (id) {\n          clearTimeout(id);\n        }\n        maxTimeoutId = timeoutId = trailingCall = undefined;\n        if (isCalled) {\n          lastCalled = now();\n          result = func.apply(thisArg, args);\n          if (!timeoutId && !maxTimeoutId) {\n            args = thisArg = undefined;\n          }\n        }\n      }\n\n      function delayed() {\n        var remaining = wait - (now() - stamp);\n        if (remaining <= 0 || remaining > wait) {\n          complete(trailingCall, maxTimeoutId);\n        } else {\n          timeoutId = setTimeout(delayed, remaining);\n        }\n      }\n\n      function maxDelayed() {\n        complete(trailing, timeoutId);\n      }\n\n      function debounced() {\n        args = arguments;\n        stamp = now();\n        thisArg = this;\n        trailingCall = trailing && (timeoutId || !leading);\n\n        if (maxWait === false) {\n          var leadingCall = leading && !timeoutId;\n        } else {\n          if (!maxTimeoutId && !leading) {\n            lastCalled = stamp;\n          }\n          var remaining = maxWait - (stamp - lastCalled),\n              isCalled = remaining <= 0 || remaining > maxWait;\n\n          if (isCalled) {\n            if (maxTimeoutId) {\n              maxTimeoutId = clearTimeout(maxTimeoutId);\n            }\n            lastCalled = stamp;\n            result = func.apply(thisArg, args);\n          }\n          else if (!maxTimeoutId) {\n            maxTimeoutId = setTimeout(maxDelayed, remaining);\n          }\n        }\n        if (isCalled && timeoutId) {\n          timeoutId = clearTimeout(timeoutId);\n        }\n        else if (!timeoutId && wait !== maxWait) {\n          timeoutId = setTimeout(delayed, wait);\n        }\n        if (leadingCall) {\n          isCalled = true;\n          result = func.apply(thisArg, args);\n        }\n        if (isCalled && !timeoutId && !maxTimeoutId) {\n          args = thisArg = undefined;\n        }\n        return result;\n      }\n      debounced.cancel = cancel;\n      return debounced;\n    }\n\n    /**\n     * Defers invoking the `func` until the current call stack has cleared. Any\n     * additional arguments are provided to `func` when it is invoked.\n     *\n     * @static\n     * @memberOf _\n     * @category Function\n     * @param {Function} func The function to defer.\n     * @param {...*} [args] The arguments to invoke the function with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.defer(function(text) {\n     *   console.log(text);\n     * }, 'deferred');\n     * // logs 'deferred' after one or more milliseconds\n     */\n    var defer = restParam(function(func, args) {\n      return baseDelay(func, 1, args);\n    });\n\n    /**\n     * Invokes `func` after `wait` milliseconds. Any additional arguments are\n     * provided to `func` when it is invoked.\n     *\n     * @static\n     * @memberOf _\n     * @category Function\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {...*} [args] The arguments to invoke the function with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.delay(function(text) {\n     *   console.log(text);\n     * }, 1000, 'later');\n     * // => logs 'later' after one second\n     */\n    var delay = restParam(function(func, wait, args) {\n      return baseDelay(func, wait, args);\n    });\n\n    /**\n     * Creates a function that returns the result of invoking the provided\n     * functions with the `this` binding of the created function, where each\n     * successive invocation is supplied the return value of the previous.\n     *\n     * @static\n     * @memberOf _\n     * @category Function\n     * @param {...Function} [funcs] Functions to invoke.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var addSquare = _.flow(_.add, square);\n     * addSquare(1, 2);\n     * // => 9\n     */\n    var flow = createFlow();\n\n    /**\n     * This method is like `_.flow` except that it creates a function that\n     * invokes the provided functions from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @alias backflow, compose\n     * @category Function\n     * @param {...Function} [funcs] Functions to invoke.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var addSquare = _.flowRight(square, _.add);\n     * addSquare(1, 2);\n     * // => 9\n     */\n    var flowRight = createFlow(true);\n\n    /**\n     * Creates a function that memoizes the result of `func`. If `resolver` is\n     * provided it determines the cache key for storing the result based on the\n     * arguments provided to the memoized function. By default, the first argument\n     * provided to the memoized function is coerced to a string and used as the\n     * cache key. The `func` is invoked with the `this` binding of the memoized\n     * function.\n     *\n     * **Note:** The cache is exposed as the `cache` property on the memoized\n     * function. Its creation may be customized by replacing the `_.memoize.Cache`\n     * constructor with one whose instances implement the [`Map`](http://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-map-prototype-object)\n     * method interface of `get`, `has`, and `set`.\n     *\n     * @static\n     * @memberOf _\n     * @category Function\n     * @param {Function} func The function to have its output memoized.\n     * @param {Function} [resolver] The function to resolve the cache key.\n     * @returns {Function} Returns the new memoizing function.\n     * @example\n     *\n     * var upperCase = _.memoize(function(string) {\n     *   return string.toUpperCase();\n     * });\n     *\n     * upperCase('fred');\n     * // => 'FRED'\n     *\n     * // modifying the result cache\n     * upperCase.cache.set('fred', 'BARNEY');\n     * upperCase('fred');\n     * // => 'BARNEY'\n     *\n     * // replacing `_.memoize.Cache`\n     * var object = { 'user': 'fred' };\n     * var other = { 'user': 'barney' };\n     * var identity = _.memoize(_.identity);\n     *\n     * identity(object);\n     * // => { 'user': 'fred' }\n     * identity(other);\n     * // => { 'user': 'fred' }\n     *\n     * _.memoize.Cache = WeakMap;\n     * var identity = _.memoize(_.identity);\n     *\n     * identity(object);\n     * // => { 'user': 'fred' }\n     * identity(other);\n     * // => { 'user': 'barney' }\n     */\n    function memoize(func, resolver) {\n      if (typeof func != 'function' || (resolver && typeof resolver != 'function')) {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var memoized = function() {\n        var args = arguments,\n            key = resolver ? resolver.apply(this, args) : args[0],\n            cache = memoized.cache;\n\n        if (cache.has(key)) {\n          return cache.get(key);\n        }\n        var result = func.apply(this, args);\n        memoized.cache = cache.set(key, result);\n        return result;\n      };\n      memoized.cache = new memoize.Cache;\n      return memoized;\n    }\n\n    /**\n     * Creates a function that runs each argument through a corresponding\n     * transform function.\n     *\n     * @static\n     * @memberOf _\n     * @category Function\n     * @param {Function} func The function to wrap.\n     * @param {...(Function|Function[])} [transforms] The functions to transform\n     * arguments, specified as individual functions or arrays of functions.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * function doubled(n) {\n     *   return n * 2;\n     * }\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var modded = _.modArgs(function(x, y) {\n     *   return [x, y];\n     * }, square, doubled);\n     *\n     * modded(1, 2);\n     * // => [1, 4]\n     *\n     * modded(5, 10);\n     * // => [25, 20]\n     */\n    var modArgs = restParam(function(func, transforms) {\n      transforms = baseFlatten(transforms);\n      if (typeof func != 'function' || !arrayEvery(transforms, baseIsFunction)) {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var length = transforms.length;\n      return restParam(function(args) {\n        var index = nativeMin(args.length, length);\n        while (index--) {\n          args[index] = transforms[index](args[index]);\n        }\n        return func.apply(this, args);\n      });\n    });\n\n    /**\n     * Creates a function that negates the result of the predicate `func`. The\n     * `func` predicate is invoked with the `this` binding and arguments of the\n     * created function.\n     *\n     * @static\n     * @memberOf _\n     * @category Function\n     * @param {Function} predicate The predicate to negate.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * function isEven(n) {\n     *   return n % 2 == 0;\n     * }\n     *\n     * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n     * // => [1, 3, 5]\n     */\n    function negate(predicate) {\n      if (typeof predicate != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return function() {\n        return !predicate.apply(this, arguments);\n      };\n    }\n\n    /**\n     * Creates a function that is restricted to invoking `func` once. Repeat calls\n     * to the function return the value of the first call. The `func` is invoked\n     * with the `this` binding and arguments of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @category Function\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var initialize = _.once(createApplication);\n     * initialize();\n     * initialize();\n     * // `initialize` invokes `createApplication` once\n     */\n    function once(func) {\n      return before(2, func);\n    }\n\n    /**\n     * Creates a function that invokes `func` with `partial` arguments prepended\n     * to those provided to the new function. This method is like `_.bind` except\n     * it does **not** alter the `this` binding.\n     *\n     * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method does not set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * var greet = function(greeting, name) {\n     *   return greeting + ' ' + name;\n     * };\n     *\n     * var sayHelloTo = _.partial(greet, 'hello');\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     *\n     * // using placeholders\n     * var greetFred = _.partial(greet, _, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     */\n    var partial = createPartial(PARTIAL_FLAG);\n\n    /**\n     * This method is like `_.partial` except that partially applied arguments\n     * are appended to those provided to the new function.\n     *\n     * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method does not set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * var greet = function(greeting, name) {\n     *   return greeting + ' ' + name;\n     * };\n     *\n     * var greetFred = _.partialRight(greet, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     *\n     * // using placeholders\n     * var sayHelloTo = _.partialRight(greet, 'hello', _);\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     */\n    var partialRight = createPartial(PARTIAL_RIGHT_FLAG);\n\n    /**\n     * Creates a function that invokes `func` with arguments arranged according\n     * to the specified indexes where the argument value at the first index is\n     * provided as the first argument, the argument value at the second index is\n     * provided as the second argument, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @category Function\n     * @param {Function} func The function to rearrange arguments for.\n     * @param {...(number|number[])} indexes The arranged argument indexes,\n     *  specified as individual indexes or arrays of indexes.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var rearged = _.rearg(function(a, b, c) {\n     *   return [a, b, c];\n     * }, 2, 0, 1);\n     *\n     * rearged('b', 'c', 'a')\n     * // => ['a', 'b', 'c']\n     *\n     * var map = _.rearg(_.map, [1, 0]);\n     * map(function(n) {\n     *   return n * 3;\n     * }, [1, 2, 3]);\n     * // => [3, 6, 9]\n     */\n    var rearg = restParam(function(func, indexes) {\n      return createWrapper(func, REARG_FLAG, undefined, undefined, undefined, baseFlatten(indexes));\n    });\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of the\n     * created function and arguments from `start` and beyond provided as an array.\n     *\n     * **Note:** This method is based on the [rest parameter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters).\n     *\n     * @static\n     * @memberOf _\n     * @category Function\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var say = _.restParam(function(what, names) {\n     *   return what + ' ' + _.initial(names).join(', ') +\n     *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n     * });\n     *\n     * say('hello', 'fred', 'barney', 'pebbles');\n     * // => 'hello fred, barney, & pebbles'\n     */\n    function restParam(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0);\n      return function() {\n        var args = arguments,\n            index = -1,\n            length = nativeMax(args.length - start, 0),\n            rest = Array(length);\n\n        while (++index < length) {\n          rest[index] = args[start + index];\n        }\n        switch (start) {\n          case 0: return func.call(this, rest);\n          case 1: return func.call(this, args[0], rest);\n          case 2: return func.call(this, args[0], args[1], rest);\n        }\n        var otherArgs = Array(start + 1);\n        index = -1;\n        while (++index < start) {\n          otherArgs[index] = args[index];\n        }\n        otherArgs[start] = rest;\n        return func.apply(this, otherArgs);\n      };\n    }\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of the created\n     * function and an array of arguments much like [`Function#apply`](https://es5.github.io/#x15.3.4.3).\n     *\n     * **Note:** This method is based on the [spread operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator).\n     *\n     * @static\n     * @memberOf _\n     * @category Function\n     * @param {Function} func The function to spread arguments over.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var say = _.spread(function(who, what) {\n     *   return who + ' says ' + what;\n     * });\n     *\n     * say(['fred', 'hello']);\n     * // => 'fred says hello'\n     *\n     * // with a Promise\n     * var numbers = Promise.all([\n     *   Promise.resolve(40),\n     *   Promise.resolve(36)\n     * ]);\n     *\n     * numbers.then(_.spread(function(x, y) {\n     *   return x + y;\n     * }));\n     * // => a Promise of 76\n     */\n    function spread(func) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return function(array) {\n        return func.apply(this, array);\n      };\n    }\n\n    /**\n     * Creates a throttled function that only invokes `func` at most once per\n     * every `wait` milliseconds. The throttled function comes with a `cancel`\n     * method to cancel delayed invocations. Provide an options object to indicate\n     * that `func` should be invoked on the leading and/or trailing edge of the\n     * `wait` timeout. Subsequent calls to the throttled function return the\n     * result of the last `func` call.\n     *\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked\n     * on the trailing edge of the timeout only if the the throttled function is\n     * invoked more than once during the `wait` timeout.\n     *\n     * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation)\n     * for details over the differences between `_.throttle` and `_.debounce`.\n     *\n     * @static\n     * @memberOf _\n     * @category Function\n     * @param {Function} func The function to throttle.\n     * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n     * @param {Object} [options] The options object.\n     * @param {boolean} [options.leading=true] Specify invoking on the leading\n     *  edge of the timeout.\n     * @param {boolean} [options.trailing=true] Specify invoking on the trailing\n     *  edge of the timeout.\n     * @returns {Function} Returns the new throttled function.\n     * @example\n     *\n     * // avoid excessively updating the position while scrolling\n     * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n     *\n     * // invoke `renewToken` when the click event is fired, but not more than once every 5 minutes\n     * jQuery('.interactive').on('click', _.throttle(renewToken, 300000, {\n     *   'trailing': false\n     * }));\n     *\n     * // cancel a trailing throttled call\n     * jQuery(window).on('popstate', throttled.cancel);\n     */\n    function throttle(func, wait, options) {\n      var leading = true,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      if (options === false) {\n        leading = false;\n      } else if (isObject(options)) {\n        leading = 'leading' in options ? !!options.leading : leading;\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n      return debounce(func, wait, { 'leading': leading, 'maxWait': +wait, 'trailing': trailing });\n    }\n\n    /**\n     * Creates a function that provides `value` to the wrapper function as its\n     * first argument. Any additional arguments provided to the function are\n     * appended to those provided to the wrapper function. The wrapper is invoked\n     * with the `this` binding of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @category Function\n     * @param {*} value The value to wrap.\n     * @param {Function} wrapper The wrapper function.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var p = _.wrap(_.escape, function(func, text) {\n     *   return '<p>' + func(text) + '</p>';\n     * });\n     *\n     * p('fred, barney, & pebbles');\n     * // => '<p>fred, barney, &amp; pebbles</p>'\n     */\n    function wrap(value, wrapper) {\n      wrapper = wrapper == null ? identity : wrapper;\n      return createWrapper(wrapper, PARTIAL_FLAG, undefined, [value], []);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a clone of `value`. If `isDeep` is `true` nested objects are cloned,\n     * otherwise they are assigned by reference. If `customizer` is provided it is\n     * invoked to produce the cloned values. If `customizer` returns `undefined`\n     * cloning is handled by the method instead. The `customizer` is bound to\n     * `thisArg` and invoked with two argument; (value [, index|key, object]).\n     *\n     * **Note:** This method is loosely based on the\n     * [structured clone algorithm](http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm).\n     * The enumerable properties of `arguments` objects and objects created by\n     * constructors other than `Object` are cloned to plain `Object` objects. An\n     * empty object is returned for uncloneable values such as functions, DOM nodes,\n     * Maps, Sets, and WeakMaps.\n     *\n     * @static\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @param {Function} [customizer] The function to customize cloning values.\n     * @param {*} [thisArg] The `this` binding of `customizer`.\n     * @returns {*} Returns the cloned value.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney' },\n     *   { 'user': 'fred' }\n     * ];\n     *\n     * var shallow = _.clone(users);\n     * shallow[0] === users[0];\n     * // => true\n     *\n     * var deep = _.clone(users, true);\n     * deep[0] === users[0];\n     * // => false\n     *\n     * // using a customizer callback\n     * var el = _.clone(document.body, function(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(false);\n     *   }\n     * });\n     *\n     * el === document.body\n     * // => false\n     * el.nodeName\n     * // => BODY\n     * el.childNodes.length;\n     * // => 0\n     */\n    function clone(value, isDeep, customizer, thisArg) {\n      if (isDeep && typeof isDeep != 'boolean' && isIterateeCall(value, isDeep, customizer)) {\n        isDeep = false;\n      }\n      else if (typeof isDeep == 'function') {\n        thisArg = customizer;\n        customizer = isDeep;\n        isDeep = false;\n      }\n      return typeof customizer == 'function'\n        ? baseClone(value, isDeep, bindCallback(customizer, thisArg, 1))\n        : baseClone(value, isDeep);\n    }\n\n    /**\n     * Creates a deep clone of `value`. If `customizer` is provided it is invoked\n     * to produce the cloned values. If `customizer` returns `undefined` cloning\n     * is handled by the method instead. The `customizer` is bound to `thisArg`\n     * and invoked with two argument; (value [, index|key, object]).\n     *\n     * **Note:** This method is loosely based on the\n     * [structured clone algorithm](http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm).\n     * The enumerable properties of `arguments` objects and objects created by\n     * constructors other than `Object` are cloned to plain `Object` objects. An\n     * empty object is returned for uncloneable values such as functions, DOM nodes,\n     * Maps, Sets, and WeakMaps.\n     *\n     * @static\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to deep clone.\n     * @param {Function} [customizer] The function to customize cloning values.\n     * @param {*} [thisArg] The `this` binding of `customizer`.\n     * @returns {*} Returns the deep cloned value.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney' },\n     *   { 'user': 'fred' }\n     * ];\n     *\n     * var deep = _.cloneDeep(users);\n     * deep[0] === users[0];\n     * // => false\n     *\n     * // using a customizer callback\n     * var el = _.cloneDeep(document.body, function(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(true);\n     *   }\n     * });\n     *\n     * el === document.body\n     * // => false\n     * el.nodeName\n     * // => BODY\n     * el.childNodes.length;\n     * // => 20\n     */\n    function cloneDeep(value, customizer, thisArg) {\n      return typeof customizer == 'function'\n        ? baseClone(value, true, bindCallback(customizer, thisArg, 1))\n        : baseClone(value, true);\n    }\n\n    /**\n     * Checks if `value` is greater than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than `other`, else `false`.\n     * @example\n     *\n     * _.gt(3, 1);\n     * // => true\n     *\n     * _.gt(3, 3);\n     * // => false\n     *\n     * _.gt(1, 3);\n     * // => false\n     */\n    function gt(value, other) {\n      return value > other;\n    }\n\n    /**\n     * Checks if `value` is greater than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than or equal to `other`, else `false`.\n     * @example\n     *\n     * _.gte(3, 1);\n     * // => true\n     *\n     * _.gte(3, 3);\n     * // => true\n     *\n     * _.gte(1, 3);\n     * // => false\n     */\n    function gte(value, other) {\n      return value >= other;\n    }\n\n    /**\n     * Checks if `value` is classified as an `arguments` object.\n     *\n     * @static\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n     * @example\n     *\n     * _.isArguments(function() { return arguments; }());\n     * // => true\n     *\n     * _.isArguments([1, 2, 3]);\n     * // => false\n     */\n    function isArguments(value) {\n      return isObjectLike(value) && isArrayLike(value) &&\n        hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');\n    }\n\n    /**\n     * Checks if `value` is classified as an `Array` object.\n     *\n     * @static\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n     * @example\n     *\n     * _.isArray([1, 2, 3]);\n     * // => true\n     *\n     * _.isArray(function() { return arguments; }());\n     * // => false\n     */\n    var isArray = nativeIsArray || function(value) {\n      return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;\n    };\n\n    /**\n     * Checks if `value` is classified as a boolean primitive or object.\n     *\n     * @static\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n     * @example\n     *\n     * _.isBoolean(false);\n     * // => true\n     *\n     * _.isBoolean(null);\n     * // => false\n     */\n    function isBoolean(value) {\n      return value === true || value === false || (isObjectLike(value) && objToString.call(value) == boolTag);\n    }\n\n    /**\n     * Checks if `value` is classified as a `Date` object.\n     *\n     * @static\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n     * @example\n     *\n     * _.isDate(new Date);\n     * // => true\n     *\n     * _.isDate('Mon April 23 2012');\n     * // => false\n     */\n    function isDate(value) {\n      return isObjectLike(value) && objToString.call(value) == dateTag;\n    }\n\n    /**\n     * Checks if `value` is a DOM element.\n     *\n     * @static\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n     * @example\n     *\n     * _.isElement(document.body);\n     * // => true\n     *\n     * _.isElement('<body>');\n     * // => false\n     */\n    function isElement(value) {\n      return !!value && value.nodeType === 1 && isObjectLike(value) && !isPlainObject(value);\n    }\n\n    /**\n     * Checks if `value` is empty. A value is considered empty unless it is an\n     * `arguments` object, array, string, or jQuery-like collection with a length\n     * greater than `0` or an object with own enumerable properties.\n     *\n     * @static\n     * @memberOf _\n     * @category Lang\n     * @param {Array|Object|string} value The value to inspect.\n     * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n     * @example\n     *\n     * _.isEmpty(null);\n     * // => true\n     *\n     * _.isEmpty(true);\n     * // => true\n     *\n     * _.isEmpty(1);\n     * // => true\n     *\n     * _.isEmpty([1, 2, 3]);\n     * // => false\n     *\n     * _.isEmpty({ 'a': 1 });\n     * // => false\n     */\n    function isEmpty(value) {\n      if (value == null) {\n        return true;\n      }\n      if (isArrayLike(value) && (isArray(value) || isString(value) || isArguments(value) ||\n          (isObjectLike(value) && isFunction(value.splice)))) {\n        return !value.length;\n      }\n      return !keys(value).length;\n    }\n\n    /**\n     * Performs a deep comparison between two values to determine if they are\n     * equivalent. If `customizer` is provided it is invoked to compare values.\n     * If `customizer` returns `undefined` comparisons are handled by the method\n     * instead. The `customizer` is bound to `thisArg` and invoked with three\n     * arguments: (value, other [, index|key]).\n     *\n     * **Note:** This method supports comparing arrays, booleans, `Date` objects,\n     * numbers, `Object` objects, regexes, and strings. Objects are compared by\n     * their own, not inherited, enumerable properties. Functions and DOM nodes\n     * are **not** supported. Provide a customizer function to extend support\n     * for comparing other values.\n     *\n     * @static\n     * @memberOf _\n     * @alias eq\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @param {Function} [customizer] The function to customize value comparisons.\n     * @param {*} [thisArg] The `this` binding of `customizer`.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * var object = { 'user': 'fred' };\n     * var other = { 'user': 'fred' };\n     *\n     * object == other;\n     * // => false\n     *\n     * _.isEqual(object, other);\n     * // => true\n     *\n     * // using a customizer callback\n     * var array = ['hello', 'goodbye'];\n     * var other = ['hi', 'goodbye'];\n     *\n     * _.isEqual(array, other, function(value, other) {\n     *   if (_.every([value, other], RegExp.prototype.test, /^h(?:i|ello)$/)) {\n     *     return true;\n     *   }\n     * });\n     * // => true\n     */\n    function isEqual(value, other, customizer, thisArg) {\n      customizer = typeof customizer == 'function' ? bindCallback(customizer, thisArg, 3) : undefined;\n      var result = customizer ? customizer(value, other) : undefined;\n      return  result === undefined ? baseIsEqual(value, other, customizer) : !!result;\n    }\n\n    /**\n     * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n     * `SyntaxError`, `TypeError`, or `URIError` object.\n     *\n     * @static\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n     * @example\n     *\n     * _.isError(new Error);\n     * // => true\n     *\n     * _.isError(Error);\n     * // => false\n     */\n    function isError(value) {\n      return isObjectLike(value) && typeof value.message == 'string' && objToString.call(value) == errorTag;\n    }\n\n    /**\n     * Checks if `value` is a finite primitive number.\n     *\n     * **Note:** This method is based on [`Number.isFinite`](http://ecma-international.org/ecma-262/6.0/#sec-number.isfinite).\n     *\n     * @static\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n     * @example\n     *\n     * _.isFinite(10);\n     * // => true\n     *\n     * _.isFinite('10');\n     * // => false\n     *\n     * _.isFinite(true);\n     * // => false\n     *\n     * _.isFinite(Object(10));\n     * // => false\n     *\n     * _.isFinite(Infinity);\n     * // => false\n     */\n    function isFinite(value) {\n      return typeof value == 'number' && nativeIsFinite(value);\n    }\n\n    /**\n     * Checks if `value` is classified as a `Function` object.\n     *\n     * @static\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n     * @example\n     *\n     * _.isFunction(_);\n     * // => true\n     *\n     * _.isFunction(/abc/);\n     * // => false\n     */\n    function isFunction(value) {\n      // The use of `Object#toString` avoids issues with the `typeof` operator\n      // in older versions of Chrome and Safari which return 'function' for regexes\n      // and Safari 8 equivalents which return 'object' for typed array constructors.\n      return isObject(value) && objToString.call(value) == funcTag;\n    }\n\n    /**\n     * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n     * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n     *\n     * @static\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n     * @example\n     *\n     * _.isObject({});\n     * // => true\n     *\n     * _.isObject([1, 2, 3]);\n     * // => true\n     *\n     * _.isObject(1);\n     * // => false\n     */\n    function isObject(value) {\n      // Avoid a V8 JIT bug in Chrome 19-20.\n      // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n      var type = typeof value;\n      return !!value && (type == 'object' || type == 'function');\n    }\n\n    /**\n     * Performs a deep comparison between `object` and `source` to determine if\n     * `object` contains equivalent property values. If `customizer` is provided\n     * it is invoked to compare values. If `customizer` returns `undefined`\n     * comparisons are handled by the method instead. The `customizer` is bound\n     * to `thisArg` and invoked with three arguments: (value, other, index|key).\n     *\n     * **Note:** This method supports comparing properties of arrays, booleans,\n     * `Date` objects, numbers, `Object` objects, regexes, and strings. Functions\n     * and DOM nodes are **not** supported. Provide a customizer function to extend\n     * support for comparing other values.\n     *\n     * @static\n     * @memberOf _\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @param {Function} [customizer] The function to customize value comparisons.\n     * @param {*} [thisArg] The `this` binding of `customizer`.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     * @example\n     *\n     * var object = { 'user': 'fred', 'age': 40 };\n     *\n     * _.isMatch(object, { 'age': 40 });\n     * // => true\n     *\n     * _.isMatch(object, { 'age': 36 });\n     * // => false\n     *\n     * // using a customizer callback\n     * var object = { 'greeting': 'hello' };\n     * var source = { 'greeting': 'hi' };\n     *\n     * _.isMatch(object, source, function(value, other) {\n     *   return _.every([value, other], RegExp.prototype.test, /^h(?:i|ello)$/) || undefined;\n     * });\n     * // => true\n     */\n    function isMatch(object, source, customizer, thisArg) {\n      customizer = typeof customizer == 'function' ? bindCallback(customizer, thisArg, 3) : undefined;\n      return baseIsMatch(object, getMatchData(source), customizer);\n    }\n\n    /**\n     * Checks if `value` is `NaN`.\n     *\n     * **Note:** This method is not the same as [`isNaN`](https://es5.github.io/#x15.1.2.4)\n     * which returns `true` for `undefined` and other non-numeric values.\n     *\n     * @static\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n     * @example\n     *\n     * _.isNaN(NaN);\n     * // => true\n     *\n     * _.isNaN(new Number(NaN));\n     * // => true\n     *\n     * isNaN(undefined);\n     * // => true\n     *\n     * _.isNaN(undefined);\n     * // => false\n     */\n    function isNaN(value) {\n      // An `NaN` primitive is the only value that is not equal to itself.\n      // Perform the `toStringTag` check first to avoid errors with some host objects in IE.\n      return isNumber(value) && value != +value;\n    }\n\n    /**\n     * Checks if `value` is a native function.\n     *\n     * @static\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\n     * @example\n     *\n     * _.isNative(Array.prototype.push);\n     * // => true\n     *\n     * _.isNative(_);\n     * // => false\n     */\n    function isNative(value) {\n      if (value == null) {\n        return false;\n      }\n      if (isFunction(value)) {\n        return reIsNative.test(fnToString.call(value));\n      }\n      return isObjectLike(value) && reIsHostCtor.test(value);\n    }\n\n    /**\n     * Checks if `value` is `null`.\n     *\n     * @static\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n     * @example\n     *\n     * _.isNull(null);\n     * // => true\n     *\n     * _.isNull(void 0);\n     * // => false\n     */\n    function isNull(value) {\n      return value === null;\n    }\n\n    /**\n     * Checks if `value` is classified as a `Number` primitive or object.\n     *\n     * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are classified\n     * as numbers, use the `_.isFinite` method.\n     *\n     * @static\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n     * @example\n     *\n     * _.isNumber(8.4);\n     * // => true\n     *\n     * _.isNumber(NaN);\n     * // => true\n     *\n     * _.isNumber('8.4');\n     * // => false\n     */\n    function isNumber(value) {\n      return typeof value == 'number' || (isObjectLike(value) && objToString.call(value) == numberTag);\n    }\n\n    /**\n     * Checks if `value` is a plain object, that is, an object created by the\n     * `Object` constructor or one with a `[[Prototype]]` of `null`.\n     *\n     * **Note:** This method assumes objects created by the `Object` constructor\n     * have no inherited enumerable properties.\n     *\n     * @static\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * _.isPlainObject(new Foo);\n     * // => false\n     *\n     * _.isPlainObject([1, 2, 3]);\n     * // => false\n     *\n     * _.isPlainObject({ 'x': 0, 'y': 0 });\n     * // => true\n     *\n     * _.isPlainObject(Object.create(null));\n     * // => true\n     */\n    function isPlainObject(value) {\n      var Ctor;\n\n      // Exit early for non `Object` objects.\n      if (!(isObjectLike(value) && objToString.call(value) == objectTag && !isArguments(value)) ||\n          (!hasOwnProperty.call(value, 'constructor') && (Ctor = value.constructor, typeof Ctor == 'function' && !(Ctor instanceof Ctor)))) {\n        return false;\n      }\n      // IE < 9 iterates inherited properties before own properties. If the first\n      // iterated property is an object's own property then there are no inherited\n      // enumerable properties.\n      var result;\n      // In most environments an object's own properties are iterated before\n      // its inherited properties. If the last iterated property is an object's\n      // own property then there are no inherited enumerable properties.\n      baseForIn(value, function(subValue, key) {\n        result = key;\n      });\n      return result === undefined || hasOwnProperty.call(value, result);\n    }\n\n    /**\n     * Checks if `value` is classified as a `RegExp` object.\n     *\n     * @static\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n     * @example\n     *\n     * _.isRegExp(/abc/);\n     * // => true\n     *\n     * _.isRegExp('/abc/');\n     * // => false\n     */\n    function isRegExp(value) {\n      return isObject(value) && objToString.call(value) == regexpTag;\n    }\n\n    /**\n     * Checks if `value` is classified as a `String` primitive or object.\n     *\n     * @static\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n     * @example\n     *\n     * _.isString('abc');\n     * // => true\n     *\n     * _.isString(1);\n     * // => false\n     */\n    function isString(value) {\n      return typeof value == 'string' || (isObjectLike(value) && objToString.call(value) == stringTag);\n    }\n\n    /**\n     * Checks if `value` is classified as a typed array.\n     *\n     * @static\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n     * @example\n     *\n     * _.isTypedArray(new Uint8Array);\n     * // => true\n     *\n     * _.isTypedArray([]);\n     * // => false\n     */\n    function isTypedArray(value) {\n      return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objToString.call(value)];\n    }\n\n    /**\n     * Checks if `value` is `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n     * @example\n     *\n     * _.isUndefined(void 0);\n     * // => true\n     *\n     * _.isUndefined(null);\n     * // => false\n     */\n    function isUndefined(value) {\n      return value === undefined;\n    }\n\n    /**\n     * Checks if `value` is less than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than `other`, else `false`.\n     * @example\n     *\n     * _.lt(1, 3);\n     * // => true\n     *\n     * _.lt(3, 3);\n     * // => false\n     *\n     * _.lt(3, 1);\n     * // => false\n     */\n    function lt(value, other) {\n      return value < other;\n    }\n\n    /**\n     * Checks if `value` is less than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than or equal to `other`, else `false`.\n     * @example\n     *\n     * _.lte(1, 3);\n     * // => true\n     *\n     * _.lte(3, 3);\n     * // => true\n     *\n     * _.lte(3, 1);\n     * // => false\n     */\n    function lte(value, other) {\n      return value <= other;\n    }\n\n    /**\n     * Converts `value` to an array.\n     *\n     * @static\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {Array} Returns the converted array.\n     * @example\n     *\n     * (function() {\n     *   return _.toArray(arguments).slice(1);\n     * }(1, 2, 3));\n     * // => [2, 3]\n     */\n    function toArray(value) {\n      var length = value ? getLength(value) : 0;\n      if (!isLength(length)) {\n        return values(value);\n      }\n      if (!length) {\n        return [];\n      }\n      return arrayCopy(value);\n    }\n\n    /**\n     * Converts `value` to a plain object flattening inherited enumerable\n     * properties of `value` to own properties of the plain object.\n     *\n     * @static\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {Object} Returns the converted plain object.\n     * @example\n     *\n     * function Foo() {\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.assign({ 'a': 1 }, new Foo);\n     * // => { 'a': 1, 'b': 2 }\n     *\n     * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n     * // => { 'a': 1, 'b': 2, 'c': 3 }\n     */\n    function toPlainObject(value) {\n      return baseCopy(value, keysIn(value));\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Recursively merges own enumerable properties of the source object(s), that\n     * don't resolve to `undefined` into the destination object. Subsequent sources\n     * overwrite property assignments of previous sources. If `customizer` is\n     * provided it is invoked to produce the merged values of the destination and\n     * source properties. If `customizer` returns `undefined` merging is handled\n     * by the method instead. The `customizer` is bound to `thisArg` and invoked\n     * with five arguments: (objectValue, sourceValue, key, object, source).\n     *\n     * @static\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @param {*} [thisArg] The `this` binding of `customizer`.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var users = {\n     *   'data': [{ 'user': 'barney' }, { 'user': 'fred' }]\n     * };\n     *\n     * var ages = {\n     *   'data': [{ 'age': 36 }, { 'age': 40 }]\n     * };\n     *\n     * _.merge(users, ages);\n     * // => { 'data': [{ 'user': 'barney', 'age': 36 }, { 'user': 'fred', 'age': 40 }] }\n     *\n     * // using a customizer callback\n     * var object = {\n     *   'fruits': ['apple'],\n     *   'vegetables': ['beet']\n     * };\n     *\n     * var other = {\n     *   'fruits': ['banana'],\n     *   'vegetables': ['carrot']\n     * };\n     *\n     * _.merge(object, other, function(a, b) {\n     *   if (_.isArray(a)) {\n     *     return a.concat(b);\n     *   }\n     * });\n     * // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot'] }\n     */\n    var merge = createAssigner(baseMerge);\n\n    /**\n     * Assigns own enumerable properties of source object(s) to the destination\n     * object. Subsequent sources overwrite property assignments of previous sources.\n     * If `customizer` is provided it is invoked to produce the assigned values.\n     * The `customizer` is bound to `thisArg` and invoked with five arguments:\n     * (objectValue, sourceValue, key, object, source).\n     *\n     * **Note:** This method mutates `object` and is based on\n     * [`Object.assign`](http://ecma-international.org/ecma-262/6.0/#sec-object.assign).\n     *\n     * @static\n     * @memberOf _\n     * @alias extend\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @param {*} [thisArg] The `this` binding of `customizer`.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * _.assign({ 'user': 'barney' }, { 'age': 40 }, { 'user': 'fred' });\n     * // => { 'user': 'fred', 'age': 40 }\n     *\n     * // using a customizer callback\n     * var defaults = _.partialRight(_.assign, function(value, other) {\n     *   return _.isUndefined(value) ? other : value;\n     * });\n     *\n     * defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' });\n     * // => { 'user': 'barney', 'age': 36 }\n     */\n    var assign = createAssigner(function(object, source, customizer) {\n      return customizer\n        ? assignWith(object, source, customizer)\n        : baseAssign(object, source);\n    });\n\n    /**\n     * Creates an object that inherits from the given `prototype` object. If a\n     * `properties` object is provided its own enumerable properties are assigned\n     * to the created object.\n     *\n     * @static\n     * @memberOf _\n     * @category Object\n     * @param {Object} prototype The object to inherit from.\n     * @param {Object} [properties] The properties to assign to the object.\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * function Shape() {\n     *   this.x = 0;\n     *   this.y = 0;\n     * }\n     *\n     * function Circle() {\n     *   Shape.call(this);\n     * }\n     *\n     * Circle.prototype = _.create(Shape.prototype, {\n     *   'constructor': Circle\n     * });\n     *\n     * var circle = new Circle;\n     * circle instanceof Circle;\n     * // => true\n     *\n     * circle instanceof Shape;\n     * // => true\n     */\n    function create(prototype, properties, guard) {\n      var result = baseCreate(prototype);\n      if (guard && isIterateeCall(prototype, properties, guard)) {\n        properties = undefined;\n      }\n      return properties ? baseAssign(result, properties) : result;\n    }\n\n    /**\n     * Assigns own enumerable properties of source object(s) to the destination\n     * object for all destination properties that resolve to `undefined`. Once a\n     * property is set, additional values of the same property are ignored.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * _.defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' });\n     * // => { 'user': 'barney', 'age': 36 }\n     */\n    var defaults = createDefaults(assign, assignDefaults);\n\n    /**\n     * This method is like `_.defaults` except that it recursively assigns\n     * default properties.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * _.defaultsDeep({ 'user': { 'name': 'barney' } }, { 'user': { 'name': 'fred', 'age': 36 } });\n     * // => { 'user': { 'name': 'barney', 'age': 36 } }\n     *\n     */\n    var defaultsDeep = createDefaults(merge, mergeDefaults);\n\n    /**\n     * This method is like `_.find` except that it returns the key of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * If a property name is provided for `predicate` the created `_.property`\n     * style callback returns the property value of the given element.\n     *\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\n     * style callback returns `true` for elements that have a matching property\n     * value, else `false`.\n     *\n     * If an object is provided for `predicate` the created `_.matches` style\n     * callback returns `true` for elements that have the properties of the given\n     * object, else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to search.\n     * @param {Function|Object|string} [predicate=_.identity] The function invoked\n     *  per iteration.\n     * @param {*} [thisArg] The `this` binding of `predicate`.\n     * @returns {string|undefined} Returns the key of the matched element, else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findKey(users, function(chr) {\n     *   return chr.age < 40;\n     * });\n     * // => 'barney' (iteration order is not guaranteed)\n     *\n     * // using the `_.matches` callback shorthand\n     * _.findKey(users, { 'age': 1, 'active': true });\n     * // => 'pebbles'\n     *\n     * // using the `_.matchesProperty` callback shorthand\n     * _.findKey(users, 'active', false);\n     * // => 'fred'\n     *\n     * // using the `_.property` callback shorthand\n     * _.findKey(users, 'active');\n     * // => 'barney'\n     */\n    var findKey = createFindKey(baseForOwn);\n\n    /**\n     * This method is like `_.findKey` except that it iterates over elements of\n     * a collection in the opposite order.\n     *\n     * If a property name is provided for `predicate` the created `_.property`\n     * style callback returns the property value of the given element.\n     *\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\n     * style callback returns `true` for elements that have a matching property\n     * value, else `false`.\n     *\n     * If an object is provided for `predicate` the created `_.matches` style\n     * callback returns `true` for elements that have the properties of the given\n     * object, else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to search.\n     * @param {Function|Object|string} [predicate=_.identity] The function invoked\n     *  per iteration.\n     * @param {*} [thisArg] The `this` binding of `predicate`.\n     * @returns {string|undefined} Returns the key of the matched element, else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findLastKey(users, function(chr) {\n     *   return chr.age < 40;\n     * });\n     * // => returns `pebbles` assuming `_.findKey` returns `barney`\n     *\n     * // using the `_.matches` callback shorthand\n     * _.findLastKey(users, { 'age': 36, 'active': true });\n     * // => 'barney'\n     *\n     * // using the `_.matchesProperty` callback shorthand\n     * _.findLastKey(users, 'active', false);\n     * // => 'fred'\n     *\n     * // using the `_.property` callback shorthand\n     * _.findLastKey(users, 'active');\n     * // => 'pebbles'\n     */\n    var findLastKey = createFindKey(baseForOwnRight);\n\n    /**\n     * Iterates over own and inherited enumerable properties of an object invoking\n     * `iteratee` for each property. The `iteratee` is bound to `thisArg` and invoked\n     * with three arguments: (value, key, object). Iteratee functions may exit\n     * iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forIn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => logs 'a', 'b', and 'c' (iteration order is not guaranteed)\n     */\n    var forIn = createForIn(baseFor);\n\n    /**\n     * This method is like `_.forIn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forInRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => logs 'c', 'b', and 'a' assuming `_.forIn ` logs 'a', 'b', and 'c'\n     */\n    var forInRight = createForIn(baseForRight);\n\n    /**\n     * Iterates over own enumerable properties of an object invoking `iteratee`\n     * for each property. The `iteratee` is bound to `thisArg` and invoked with\n     * three arguments: (value, key, object). Iteratee functions may exit iteration\n     * early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => logs 'a' and 'b' (iteration order is not guaranteed)\n     */\n    var forOwn = createForOwn(baseForOwn);\n\n    /**\n     * This method is like `_.forOwn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwnRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => logs 'b' and 'a' assuming `_.forOwn` logs 'a' and 'b'\n     */\n    var forOwnRight = createForOwn(baseForOwnRight);\n\n    /**\n     * Creates an array of function property names from all enumerable properties,\n     * own and inherited, of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @alias methods\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns the new array of property names.\n     * @example\n     *\n     * _.functions(_);\n     * // => ['after', 'ary', 'assign', ...]\n     */\n    function functions(object) {\n      return baseFunctions(object, keysIn(object));\n    }\n\n    /**\n     * Gets the property value at `path` of `object`. If the resolved value is\n     * `undefined` the `defaultValue` is used in its place.\n     *\n     * @static\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to get.\n     * @param {*} [defaultValue] The value returned if the resolved value is `undefined`.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.get(object, 'a[0].b.c');\n     * // => 3\n     *\n     * _.get(object, ['a', '0', 'b', 'c']);\n     * // => 3\n     *\n     * _.get(object, 'a.b.c', 'default');\n     * // => 'default'\n     */\n    function get(object, path, defaultValue) {\n      var result = object == null ? undefined : baseGet(object, toPath(path), path + '');\n      return result === undefined ? defaultValue : result;\n    }\n\n    /**\n     * Checks if `path` is a direct property.\n     *\n     * @static\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @returns {boolean} Returns `true` if `path` is a direct property, else `false`.\n     * @example\n     *\n     * var object = { 'a': { 'b': { 'c': 3 } } };\n     *\n     * _.has(object, 'a');\n     * // => true\n     *\n     * _.has(object, 'a.b.c');\n     * // => true\n     *\n     * _.has(object, ['a', 'b', 'c']);\n     * // => true\n     */\n    function has(object, path) {\n      if (object == null) {\n        return false;\n      }\n      var result = hasOwnProperty.call(object, path);\n      if (!result && !isKey(path)) {\n        path = toPath(path);\n        object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));\n        if (object == null) {\n          return false;\n        }\n        path = last(path);\n        result = hasOwnProperty.call(object, path);\n      }\n      return result || (isLength(object.length) && isIndex(path, object.length) &&\n        (isArray(object) || isArguments(object)));\n    }\n\n    /**\n     * Creates an object composed of the inverted keys and values of `object`.\n     * If `object` contains duplicate values, subsequent values overwrite property\n     * assignments of previous values unless `multiValue` is `true`.\n     *\n     * @static\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to invert.\n     * @param {boolean} [multiValue] Allow multiple values per key.\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\n     * @returns {Object} Returns the new inverted object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\n     *\n     * _.invert(object);\n     * // => { '1': 'c', '2': 'b' }\n     *\n     * // with `multiValue`\n     * _.invert(object, true);\n     * // => { '1': ['a', 'c'], '2': ['b'] }\n     */\n    function invert(object, multiValue, guard) {\n      if (guard && isIterateeCall(object, multiValue, guard)) {\n        multiValue = undefined;\n      }\n      var index = -1,\n          props = keys(object),\n          length = props.length,\n          result = {};\n\n      while (++index < length) {\n        var key = props[index],\n            value = object[key];\n\n        if (multiValue) {\n          if (hasOwnProperty.call(result, value)) {\n            result[value].push(key);\n          } else {\n            result[value] = [key];\n          }\n        }\n        else {\n          result[value] = key;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Creates an array of the own enumerable property names of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects. See the\n     * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys)\n     * for more details.\n     *\n     * @static\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.keys(new Foo);\n     * // => ['a', 'b'] (iteration order is not guaranteed)\n     *\n     * _.keys('hi');\n     * // => ['0', '1']\n     */\n    var keys = !nativeKeys ? shimKeys : function(object) {\n      var Ctor = object == null ? undefined : object.constructor;\n      if ((typeof Ctor == 'function' && Ctor.prototype === object) ||\n          (typeof object != 'function' && isArrayLike(object))) {\n        return shimKeys(object);\n      }\n      return isObject(object) ? nativeKeys(object) : [];\n    };\n\n    /**\n     * Creates an array of the own and inherited enumerable property names of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.keysIn(new Foo);\n     * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n     */\n    function keysIn(object) {\n      if (object == null) {\n        return [];\n      }\n      if (!isObject(object)) {\n        object = Object(object);\n      }\n      var length = object.length;\n      length = (length && isLength(length) &&\n        (isArray(object) || isArguments(object)) && length) || 0;\n\n      var Ctor = object.constructor,\n          index = -1,\n          isProto = typeof Ctor == 'function' && Ctor.prototype === object,\n          result = Array(length),\n          skipIndexes = length > 0;\n\n      while (++index < length) {\n        result[index] = (index + '');\n      }\n      for (var key in object) {\n        if (!(skipIndexes && isIndex(key, length)) &&\n            !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The opposite of `_.mapValues`; this method creates an object with the\n     * same values as `object` and keys generated by running each own enumerable\n     * property of `object` through `iteratee`.\n     *\n     * @static\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function|Object|string} [iteratee=_.identity] The function invoked\n     *  per iteration.\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\n     * @returns {Object} Returns the new mapped object.\n     * @example\n     *\n     * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n     *   return key + value;\n     * });\n     * // => { 'a1': 1, 'b2': 2 }\n     */\n    var mapKeys = createObjectMapper(true);\n\n    /**\n     * Creates an object with the same keys as `object` and values generated by\n     * running each own enumerable property of `object` through `iteratee`. The\n     * iteratee function is bound to `thisArg` and invoked with three arguments:\n     * (value, key, object).\n     *\n     * If a property name is provided for `iteratee` the created `_.property`\n     * style callback returns the property value of the given element.\n     *\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\n     * style callback returns `true` for elements that have a matching property\n     * value, else `false`.\n     *\n     * If an object is provided for `iteratee` the created `_.matches` style\n     * callback returns `true` for elements that have the properties of the given\n     * object, else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function|Object|string} [iteratee=_.identity] The function invoked\n     *  per iteration.\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\n     * @returns {Object} Returns the new mapped object.\n     * @example\n     *\n     * _.mapValues({ 'a': 1, 'b': 2 }, function(n) {\n     *   return n * 3;\n     * });\n     * // => { 'a': 3, 'b': 6 }\n     *\n     * var users = {\n     *   'fred':    { 'user': 'fred',    'age': 40 },\n     *   'pebbles': { 'user': 'pebbles', 'age': 1 }\n     * };\n     *\n     * // using the `_.property` callback shorthand\n     * _.mapValues(users, 'age');\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n     */\n    var mapValues = createObjectMapper();\n\n    /**\n     * The opposite of `_.pick`; this method creates an object composed of the\n     * own and inherited enumerable properties of `object` that are not omitted.\n     *\n     * @static\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function|...(string|string[])} [predicate] The function invoked per\n     *  iteration or property names to omit, specified as individual property\n     *  names or arrays of property names.\n     * @param {*} [thisArg] The `this` binding of `predicate`.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'user': 'fred', 'age': 40 };\n     *\n     * _.omit(object, 'age');\n     * // => { 'user': 'fred' }\n     *\n     * _.omit(object, _.isNumber);\n     * // => { 'user': 'fred' }\n     */\n    var omit = restParam(function(object, props) {\n      if (object == null) {\n        return {};\n      }\n      if (typeof props[0] != 'function') {\n        var props = arrayMap(baseFlatten(props), String);\n        return pickByArray(object, baseDifference(keysIn(object), props));\n      }\n      var predicate = bindCallback(props[0], props[1], 3);\n      return pickByCallback(object, function(value, key, object) {\n        return !predicate(value, key, object);\n      });\n    });\n\n    /**\n     * Creates a two dimensional array of the key-value pairs for `object`,\n     * e.g. `[[key1, value1], [key2, value2]]`.\n     *\n     * @static\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the new array of key-value pairs.\n     * @example\n     *\n     * _.pairs({ 'barney': 36, 'fred': 40 });\n     * // => [['barney', 36], ['fred', 40]] (iteration order is not guaranteed)\n     */\n    function pairs(object) {\n      object = toObject(object);\n\n      var index = -1,\n          props = keys(object),\n          length = props.length,\n          result = Array(length);\n\n      while (++index < length) {\n        var key = props[index];\n        result[index] = [key, object[key]];\n      }\n      return result;\n    }\n\n    /**\n     * Creates an object composed of the picked `object` properties. Property\n     * names may be specified as individual arguments or as arrays of property\n     * names. If `predicate` is provided it is invoked for each property of `object`\n     * picking the properties `predicate` returns truthy for. The predicate is\n     * bound to `thisArg` and invoked with three arguments: (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function|...(string|string[])} [predicate] The function invoked per\n     *  iteration or property names to pick, specified as individual property\n     *  names or arrays of property names.\n     * @param {*} [thisArg] The `this` binding of `predicate`.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'user': 'fred', 'age': 40 };\n     *\n     * _.pick(object, 'user');\n     * // => { 'user': 'fred' }\n     *\n     * _.pick(object, _.isString);\n     * // => { 'user': 'fred' }\n     */\n    var pick = restParam(function(object, props) {\n      if (object == null) {\n        return {};\n      }\n      return typeof props[0] == 'function'\n        ? pickByCallback(object, bindCallback(props[0], props[1], 3))\n        : pickByArray(object, baseFlatten(props));\n    });\n\n    /**\n     * This method is like `_.get` except that if the resolved value is a function\n     * it is invoked with the `this` binding of its parent object and its result\n     * is returned.\n     *\n     * @static\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to resolve.\n     * @param {*} [defaultValue] The value returned if the resolved value is `undefined`.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n     *\n     * _.result(object, 'a[0].b.c1');\n     * // => 3\n     *\n     * _.result(object, 'a[0].b.c2');\n     * // => 4\n     *\n     * _.result(object, 'a.b.c', 'default');\n     * // => 'default'\n     *\n     * _.result(object, 'a.b.c', _.constant('default'));\n     * // => 'default'\n     */\n    function result(object, path, defaultValue) {\n      var result = object == null ? undefined : object[path];\n      if (result === undefined) {\n        if (object != null && !isKey(path, object)) {\n          path = toPath(path);\n          object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));\n          result = object == null ? undefined : object[last(path)];\n        }\n        result = result === undefined ? defaultValue : result;\n      }\n      return isFunction(result) ? result.call(object) : result;\n    }\n\n    /**\n     * Sets the property value of `path` on `object`. If a portion of `path`\n     * does not exist it is created.\n     *\n     * @static\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to augment.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.set(object, 'a[0].b.c', 4);\n     * console.log(object.a[0].b.c);\n     * // => 4\n     *\n     * _.set(object, 'x[0].y.z', 5);\n     * console.log(object.x[0].y.z);\n     * // => 5\n     */\n    function set(object, path, value) {\n      if (object == null) {\n        return object;\n      }\n      var pathKey = (path + '');\n      path = (object[pathKey] != null || isKey(path, object)) ? [pathKey] : toPath(path);\n\n      var index = -1,\n          length = path.length,\n          lastIndex = length - 1,\n          nested = object;\n\n      while (nested != null && ++index < length) {\n        var key = path[index];\n        if (isObject(nested)) {\n          if (index == lastIndex) {\n            nested[key] = value;\n          } else if (nested[key] == null) {\n            nested[key] = isIndex(path[index + 1]) ? [] : {};\n          }\n        }\n        nested = nested[key];\n      }\n      return object;\n    }\n\n    /**\n     * An alternative to `_.reduce`; this method transforms `object` to a new\n     * `accumulator` object which is the result of running each of its own enumerable\n     * properties through `iteratee`, with each invocation potentially mutating\n     * the `accumulator` object. The `iteratee` is bound to `thisArg` and invoked\n     * with four arguments: (accumulator, value, key, object). Iteratee functions\n     * may exit iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Object\n     * @param {Array|Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The custom accumulator value.\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\n     * @returns {*} Returns the accumulated value.\n     * @example\n     *\n     * _.transform([2, 3, 4], function(result, n) {\n     *   result.push(n *= n);\n     *   return n % 2 == 0;\n     * });\n     * // => [4, 9]\n     *\n     * _.transform({ 'a': 1, 'b': 2 }, function(result, n, key) {\n     *   result[key] = n * 3;\n     * });\n     * // => { 'a': 3, 'b': 6 }\n     */\n    function transform(object, iteratee, accumulator, thisArg) {\n      var isArr = isArray(object) || isTypedArray(object);\n      iteratee = getCallback(iteratee, thisArg, 4);\n\n      if (accumulator == null) {\n        if (isArr || isObject(object)) {\n          var Ctor = object.constructor;\n          if (isArr) {\n            accumulator = isArray(object) ? new Ctor : [];\n          } else {\n            accumulator = baseCreate(isFunction(Ctor) ? Ctor.prototype : undefined);\n          }\n        } else {\n          accumulator = {};\n        }\n      }\n      (isArr ? arrayEach : baseForOwn)(object, function(value, index, object) {\n        return iteratee(accumulator, value, index, object);\n      });\n      return accumulator;\n    }\n\n    /**\n     * Creates an array of the own enumerable property values of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.values(new Foo);\n     * // => [1, 2] (iteration order is not guaranteed)\n     *\n     * _.values('hi');\n     * // => ['h', 'i']\n     */\n    function values(object) {\n      return baseValues(object, keys(object));\n    }\n\n    /**\n     * Creates an array of the own and inherited enumerable property values\n     * of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.valuesIn(new Foo);\n     * // => [1, 2, 3] (iteration order is not guaranteed)\n     */\n    function valuesIn(object) {\n      return baseValues(object, keysIn(object));\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Checks if `n` is between `start` and up to but not including, `end`. If\n     * `end` is not specified it is set to `start` with `start` then set to `0`.\n     *\n     * @static\n     * @memberOf _\n     * @category Number\n     * @param {number} n The number to check.\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @returns {boolean} Returns `true` if `n` is in the range, else `false`.\n     * @example\n     *\n     * _.inRange(3, 2, 4);\n     * // => true\n     *\n     * _.inRange(4, 8);\n     * // => true\n     *\n     * _.inRange(4, 2);\n     * // => false\n     *\n     * _.inRange(2, 2);\n     * // => false\n     *\n     * _.inRange(1.2, 2);\n     * // => true\n     *\n     * _.inRange(5.2, 4);\n     * // => false\n     */\n    function inRange(value, start, end) {\n      start = +start || 0;\n      if (end === undefined) {\n        end = start;\n        start = 0;\n      } else {\n        end = +end || 0;\n      }\n      return value >= nativeMin(start, end) && value < nativeMax(start, end);\n    }\n\n    /**\n     * Produces a random number between `min` and `max` (inclusive). If only one\n     * argument is provided a number between `0` and the given number is returned.\n     * If `floating` is `true`, or either `min` or `max` are floats, a floating-point\n     * number is returned instead of an integer.\n     *\n     * @static\n     * @memberOf _\n     * @category Number\n     * @param {number} [min=0] The minimum possible value.\n     * @param {number} [max=1] The maximum possible value.\n     * @param {boolean} [floating] Specify returning a floating-point number.\n     * @returns {number} Returns the random number.\n     * @example\n     *\n     * _.random(0, 5);\n     * // => an integer between 0 and 5\n     *\n     * _.random(5);\n     * // => also an integer between 0 and 5\n     *\n     * _.random(5, true);\n     * // => a floating-point number between 0 and 5\n     *\n     * _.random(1.2, 5.2);\n     * // => a floating-point number between 1.2 and 5.2\n     */\n    function random(min, max, floating) {\n      if (floating && isIterateeCall(min, max, floating)) {\n        max = floating = undefined;\n      }\n      var noMin = min == null,\n          noMax = max == null;\n\n      if (floating == null) {\n        if (noMax && typeof min == 'boolean') {\n          floating = min;\n          min = 1;\n        }\n        else if (typeof max == 'boolean') {\n          floating = max;\n          noMax = true;\n        }\n      }\n      if (noMin && noMax) {\n        max = 1;\n        noMax = false;\n      }\n      min = +min || 0;\n      if (noMax) {\n        max = min;\n        min = 0;\n      } else {\n        max = +max || 0;\n      }\n      if (floating || min % 1 || max % 1) {\n        var rand = nativeRandom();\n        return nativeMin(min + (rand * (max - min + parseFloat('1e-' + ((rand + '').length - 1)))), max);\n      }\n      return baseRandom(min, max);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n     *\n     * @static\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the camel cased string.\n     * @example\n     *\n     * _.camelCase('Foo Bar');\n     * // => 'fooBar'\n     *\n     * _.camelCase('--foo-bar');\n     * // => 'fooBar'\n     *\n     * _.camelCase('__foo_bar__');\n     * // => 'fooBar'\n     */\n    var camelCase = createCompounder(function(result, word, index) {\n      word = word.toLowerCase();\n      return result + (index ? (word.charAt(0).toUpperCase() + word.slice(1)) : word);\n    });\n\n    /**\n     * Capitalizes the first character of `string`.\n     *\n     * @static\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The string to capitalize.\n     * @returns {string} Returns the capitalized string.\n     * @example\n     *\n     * _.capitalize('fred');\n     * // => 'Fred'\n     */\n    function capitalize(string) {\n      string = baseToString(string);\n      return string && (string.charAt(0).toUpperCase() + string.slice(1));\n    }\n\n    /**\n     * Deburrs `string` by converting [latin-1 supplementary letters](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n     * to basic latin letters and removing [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n     *\n     * @static\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The string to deburr.\n     * @returns {string} Returns the deburred string.\n     * @example\n     *\n     * _.deburr('déjà vu');\n     * // => 'deja vu'\n     */\n    function deburr(string) {\n      string = baseToString(string);\n      return string && string.replace(reLatin1, deburrLetter).replace(reComboMark, '');\n    }\n\n    /**\n     * Checks if `string` ends with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The string to search.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=string.length] The position to search from.\n     * @returns {boolean} Returns `true` if `string` ends with `target`, else `false`.\n     * @example\n     *\n     * _.endsWith('abc', 'c');\n     * // => true\n     *\n     * _.endsWith('abc', 'b');\n     * // => false\n     *\n     * _.endsWith('abc', 'b', 2);\n     * // => true\n     */\n    function endsWith(string, target, position) {\n      string = baseToString(string);\n      target = (target + '');\n\n      var length = string.length;\n      position = position === undefined\n        ? length\n        : nativeMin(position < 0 ? 0 : (+position || 0), length);\n\n      position -= target.length;\n      return position >= 0 && string.indexOf(target, position) == position;\n    }\n\n    /**\n     * Converts the characters \"&\", \"<\", \">\", '\"', \"'\", and \"\\`\", in `string` to\n     * their corresponding HTML entities.\n     *\n     * **Note:** No other characters are escaped. To escape additional characters\n     * use a third-party library like [_he_](https://mths.be/he).\n     *\n     * Though the \">\" character is escaped for symmetry, characters like\n     * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n     * unless they're part of a tag or unquoted attribute value.\n     * See [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n     * (under \"semi-related fun fact\") for more details.\n     *\n     * Backticks are escaped because in Internet Explorer < 9, they can break out\n     * of attribute values or HTML comments. See [#59](https://html5sec.org/#59),\n     * [#102](https://html5sec.org/#102), [#108](https://html5sec.org/#108), and\n     * [#133](https://html5sec.org/#133) of the [HTML5 Security Cheatsheet](https://html5sec.org/)\n     * for more details.\n     *\n     * When working with HTML you should always [quote attribute values](http://wonko.com/post/html-escaping)\n     * to reduce XSS vectors.\n     *\n     * @static\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escape('fred, barney, & pebbles');\n     * // => 'fred, barney, &amp; pebbles'\n     */\n    function escape(string) {\n      // Reset `lastIndex` because in IE < 9 `String#replace` does not.\n      string = baseToString(string);\n      return (string && reHasUnescapedHtml.test(string))\n        ? string.replace(reUnescapedHtml, escapeHtmlChar)\n        : string;\n    }\n\n    /**\n     * Escapes the `RegExp` special characters \"\\\", \"/\", \"^\", \"$\", \".\", \"|\", \"?\",\n     * \"*\", \"+\", \"(\", \")\", \"[\", \"]\", \"{\" and \"}\" in `string`.\n     *\n     * @static\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escapeRegExp('[lodash](https://lodash.com/)');\n     * // => '\\[lodash\\]\\(https:\\/\\/lodash\\.com\\/\\)'\n     */\n    function escapeRegExp(string) {\n      string = baseToString(string);\n      return (string && reHasRegExpChars.test(string))\n        ? string.replace(reRegExpChars, escapeRegExpChar)\n        : (string || '(?:)');\n    }\n\n    /**\n     * Converts `string` to [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n     *\n     * @static\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the kebab cased string.\n     * @example\n     *\n     * _.kebabCase('Foo Bar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('fooBar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('__foo_bar__');\n     * // => 'foo-bar'\n     */\n    var kebabCase = createCompounder(function(result, word, index) {\n      return result + (index ? '-' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Pads `string` on the left and right sides if it's shorter than `length`.\n     * Padding characters are truncated if they can't be evenly divided by `length`.\n     *\n     * @static\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.pad('abc', 8);\n     * // => '  abc   '\n     *\n     * _.pad('abc', 8, '_-');\n     * // => '_-abc_-_'\n     *\n     * _.pad('abc', 3);\n     * // => 'abc'\n     */\n    function pad(string, length, chars) {\n      string = baseToString(string);\n      length = +length;\n\n      var strLength = string.length;\n      if (strLength >= length || !nativeIsFinite(length)) {\n        return string;\n      }\n      var mid = (length - strLength) / 2,\n          leftLength = nativeFloor(mid),\n          rightLength = nativeCeil(mid);\n\n      chars = createPadding('', rightLength, chars);\n      return chars.slice(0, leftLength) + string + chars;\n    }\n\n    /**\n     * Pads `string` on the left side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padLeft('abc', 6);\n     * // => '   abc'\n     *\n     * _.padLeft('abc', 6, '_-');\n     * // => '_-_abc'\n     *\n     * _.padLeft('abc', 3);\n     * // => 'abc'\n     */\n    var padLeft = createPadDir();\n\n    /**\n     * Pads `string` on the right side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padRight('abc', 6);\n     * // => 'abc   '\n     *\n     * _.padRight('abc', 6, '_-');\n     * // => 'abc_-_'\n     *\n     * _.padRight('abc', 3);\n     * // => 'abc'\n     */\n    var padRight = createPadDir(true);\n\n    /**\n     * Converts `string` to an integer of the specified radix. If `radix` is\n     * `undefined` or `0`, a `radix` of `10` is used unless `value` is a hexadecimal,\n     * in which case a `radix` of `16` is used.\n     *\n     * **Note:** This method aligns with the [ES5 implementation](https://es5.github.io/#E)\n     * of `parseInt`.\n     *\n     * @static\n     * @memberOf _\n     * @category String\n     * @param {string} string The string to convert.\n     * @param {number} [radix] The radix to interpret `value` by.\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.parseInt('08');\n     * // => 8\n     *\n     * _.map(['6', '08', '10'], _.parseInt);\n     * // => [6, 8, 10]\n     */\n    function parseInt(string, radix, guard) {\n      // Firefox < 21 and Opera < 15 follow ES3 for `parseInt`.\n      // Chrome fails to trim leading <BOM> whitespace characters.\n      // See https://code.google.com/p/v8/issues/detail?id=3109 for more details.\n      if (guard ? isIterateeCall(string, radix, guard) : radix == null) {\n        radix = 0;\n      } else if (radix) {\n        radix = +radix;\n      }\n      string = trim(string);\n      return nativeParseInt(string, radix || (reHasHexPrefix.test(string) ? 16 : 10));\n    }\n\n    /**\n     * Repeats the given string `n` times.\n     *\n     * @static\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The string to repeat.\n     * @param {number} [n=0] The number of times to repeat the string.\n     * @returns {string} Returns the repeated string.\n     * @example\n     *\n     * _.repeat('*', 3);\n     * // => '***'\n     *\n     * _.repeat('abc', 2);\n     * // => 'abcabc'\n     *\n     * _.repeat('abc', 0);\n     * // => ''\n     */\n    function repeat(string, n) {\n      var result = '';\n      string = baseToString(string);\n      n = +n;\n      if (n < 1 || !string || !nativeIsFinite(n)) {\n        return result;\n      }\n      // Leverage the exponentiation by squaring algorithm for a faster repeat.\n      // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n      do {\n        if (n % 2) {\n          result += string;\n        }\n        n = nativeFloor(n / 2);\n        string += string;\n      } while (n);\n\n      return result;\n    }\n\n    /**\n     * Converts `string` to [snake case](https://en.wikipedia.org/wiki/Snake_case).\n     *\n     * @static\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the snake cased string.\n     * @example\n     *\n     * _.snakeCase('Foo Bar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('fooBar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('--foo-bar');\n     * // => 'foo_bar'\n     */\n    var snakeCase = createCompounder(function(result, word, index) {\n      return result + (index ? '_' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Converts `string` to [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n     *\n     * @static\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the start cased string.\n     * @example\n     *\n     * _.startCase('--foo-bar');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('fooBar');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('__foo_bar__');\n     * // => 'Foo Bar'\n     */\n    var startCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + (word.charAt(0).toUpperCase() + word.slice(1));\n    });\n\n    /**\n     * Checks if `string` starts with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The string to search.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=0] The position to search from.\n     * @returns {boolean} Returns `true` if `string` starts with `target`, else `false`.\n     * @example\n     *\n     * _.startsWith('abc', 'a');\n     * // => true\n     *\n     * _.startsWith('abc', 'b');\n     * // => false\n     *\n     * _.startsWith('abc', 'b', 1);\n     * // => true\n     */\n    function startsWith(string, target, position) {\n      string = baseToString(string);\n      position = position == null\n        ? 0\n        : nativeMin(position < 0 ? 0 : (+position || 0), string.length);\n\n      return string.lastIndexOf(target, position) == position;\n    }\n\n    /**\n     * Creates a compiled template function that can interpolate data properties\n     * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n     * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n     * properties may be accessed as free variables in the template. If a setting\n     * object is provided it takes precedence over `_.templateSettings` values.\n     *\n     * **Note:** In the development build `_.template` utilizes\n     * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n     * for easier debugging.\n     *\n     * For more information on precompiling templates see\n     * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n     *\n     * For more information on Chrome extension sandboxes see\n     * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n     *\n     * @static\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The template string.\n     * @param {Object} [options] The options object.\n     * @param {RegExp} [options.escape] The HTML \"escape\" delimiter.\n     * @param {RegExp} [options.evaluate] The \"evaluate\" delimiter.\n     * @param {Object} [options.imports] An object to import into the template as free variables.\n     * @param {RegExp} [options.interpolate] The \"interpolate\" delimiter.\n     * @param {string} [options.sourceURL] The sourceURL of the template's compiled source.\n     * @param {string} [options.variable] The data object variable name.\n     * @param- {Object} [otherOptions] Enables the legacy `options` param signature.\n     * @returns {Function} Returns the compiled template function.\n     * @example\n     *\n     * // using the \"interpolate\" delimiter to create a compiled template\n     * var compiled = _.template('hello <%= user %>!');\n     * compiled({ 'user': 'fred' });\n     * // => 'hello fred!'\n     *\n     * // using the HTML \"escape\" delimiter to escape data property values\n     * var compiled = _.template('<b><%- value %></b>');\n     * compiled({ 'value': '<script>' });\n     * // => '<b>&lt;script&gt;</b>'\n     *\n     * // using the \"evaluate\" delimiter to execute JavaScript and generate HTML\n     * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // using the internal `print` function in \"evaluate\" delimiters\n     * var compiled = _.template('<% print(\"hello \" + user); %>!');\n     * compiled({ 'user': 'barney' });\n     * // => 'hello barney!'\n     *\n     * // using the ES delimiter as an alternative to the default \"interpolate\" delimiter\n     * var compiled = _.template('hello ${ user }!');\n     * compiled({ 'user': 'pebbles' });\n     * // => 'hello pebbles!'\n     *\n     * // using custom template delimiters\n     * _.templateSettings.interpolate = /{{([\\s\\S]+?)}}/g;\n     * var compiled = _.template('hello {{ user }}!');\n     * compiled({ 'user': 'mustache' });\n     * // => 'hello mustache!'\n     *\n     * // using backslashes to treat delimiters as plain text\n     * var compiled = _.template('<%= \"\\\\<%- value %\\\\>\" %>');\n     * compiled({ 'value': 'ignored' });\n     * // => '<%- value %>'\n     *\n     * // using the `imports` option to import `jQuery` as `jq`\n     * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\n     * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // using the `sourceURL` option to specify a custom sourceURL for the template\n     * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\n     * compiled(data);\n     * // => find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector\n     *\n     * // using the `variable` option to ensure a with-statement isn't used in the compiled template\n     * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\n     * compiled.source;\n     * // => function(data) {\n     * //   var __t, __p = '';\n     * //   __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\n     * //   return __p;\n     * // }\n     *\n     * // using the `source` property to inline compiled templates for meaningful\n     * // line numbers in error messages and a stack trace\n     * fs.writeFileSync(path.join(cwd, 'jst.js'), '\\\n     *   var JST = {\\\n     *     \"main\": ' + _.template(mainText).source + '\\\n     *   };\\\n     * ');\n     */\n    function template(string, options, otherOptions) {\n      // Based on John Resig's `tmpl` implementation (http://ejohn.org/blog/javascript-micro-templating/)\n      // and Laura Doktorova's doT.js (https://github.com/olado/doT).\n      var settings = lodash.templateSettings;\n\n      if (otherOptions && isIterateeCall(string, options, otherOptions)) {\n        options = otherOptions = undefined;\n      }\n      string = baseToString(string);\n      options = assignWith(baseAssign({}, otherOptions || options), settings, assignOwnDefaults);\n\n      var imports = assignWith(baseAssign({}, options.imports), settings.imports, assignOwnDefaults),\n          importsKeys = keys(imports),\n          importsValues = baseValues(imports, importsKeys);\n\n      var isEscaping,\n          isEvaluating,\n          index = 0,\n          interpolate = options.interpolate || reNoMatch,\n          source = \"__p += '\";\n\n      // Compile the regexp to match each delimiter.\n      var reDelimiters = RegExp(\n        (options.escape || reNoMatch).source + '|' +\n        interpolate.source + '|' +\n        (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\n        (options.evaluate || reNoMatch).source + '|$'\n      , 'g');\n\n      // Use a sourceURL for easier debugging.\n      var sourceURL = '//# sourceURL=' +\n        ('sourceURL' in options\n          ? options.sourceURL\n          : ('lodash.templateSources[' + (++templateCounter) + ']')\n        ) + '\\n';\n\n      string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n        interpolateValue || (interpolateValue = esTemplateValue);\n\n        // Escape characters that can't be included in string literals.\n        source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n\n        // Replace delimiters with snippets.\n        if (escapeValue) {\n          isEscaping = true;\n          source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n        }\n        if (evaluateValue) {\n          isEvaluating = true;\n          source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n        }\n        if (interpolateValue) {\n          source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n        }\n        index = offset + match.length;\n\n        // The JS engine embedded in Adobe products requires returning the `match`\n        // string in order to produce the correct `offset` value.\n        return match;\n      });\n\n      source += \"';\\n\";\n\n      // If `variable` is not specified wrap a with-statement around the generated\n      // code to add the data object to the top of the scope chain.\n      var variable = options.variable;\n      if (!variable) {\n        source = 'with (obj) {\\n' + source + '\\n}\\n';\n      }\n      // Cleanup code by stripping empty strings.\n      source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\n        .replace(reEmptyStringMiddle, '$1')\n        .replace(reEmptyStringTrailing, '$1;');\n\n      // Frame code as the function body.\n      source = 'function(' + (variable || 'obj') + ') {\\n' +\n        (variable\n          ? ''\n          : 'obj || (obj = {});\\n'\n        ) +\n        \"var __t, __p = ''\" +\n        (isEscaping\n           ? ', __e = _.escape'\n           : ''\n        ) +\n        (isEvaluating\n          ? ', __j = Array.prototype.join;\\n' +\n            \"function print() { __p += __j.call(arguments, '') }\\n\"\n          : ';\\n'\n        ) +\n        source +\n        'return __p\\n}';\n\n      var result = attempt(function() {\n        return Function(importsKeys, sourceURL + 'return ' + source).apply(undefined, importsValues);\n      });\n\n      // Provide the compiled function's source by its `toString` method or\n      // the `source` property as a convenience for inlining compiled templates.\n      result.source = source;\n      if (isError(result)) {\n        throw result;\n      }\n      return result;\n    }\n\n    /**\n     * Removes leading and trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trim('  abc  ');\n     * // => 'abc'\n     *\n     * _.trim('-_-abc-_-', '_-');\n     * // => 'abc'\n     *\n     * _.map(['  foo  ', '  bar  '], _.trim);\n     * // => ['foo', 'bar']\n     */\n    function trim(string, chars, guard) {\n      var value = string;\n      string = baseToString(string);\n      if (!string) {\n        return string;\n      }\n      if (guard ? isIterateeCall(value, chars, guard) : chars == null) {\n        return string.slice(trimmedLeftIndex(string), trimmedRightIndex(string) + 1);\n      }\n      chars = (chars + '');\n      return string.slice(charsLeftIndex(string, chars), charsRightIndex(string, chars) + 1);\n    }\n\n    /**\n     * Removes leading whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimLeft('  abc  ');\n     * // => 'abc  '\n     *\n     * _.trimLeft('-_-abc-_-', '_-');\n     * // => 'abc-_-'\n     */\n    function trimLeft(string, chars, guard) {\n      var value = string;\n      string = baseToString(string);\n      if (!string) {\n        return string;\n      }\n      if (guard ? isIterateeCall(value, chars, guard) : chars == null) {\n        return string.slice(trimmedLeftIndex(string));\n      }\n      return string.slice(charsLeftIndex(string, (chars + '')));\n    }\n\n    /**\n     * Removes trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimRight('  abc  ');\n     * // => '  abc'\n     *\n     * _.trimRight('-_-abc-_-', '_-');\n     * // => '-_-abc'\n     */\n    function trimRight(string, chars, guard) {\n      var value = string;\n      string = baseToString(string);\n      if (!string) {\n        return string;\n      }\n      if (guard ? isIterateeCall(value, chars, guard) : chars == null) {\n        return string.slice(0, trimmedRightIndex(string) + 1);\n      }\n      return string.slice(0, charsRightIndex(string, (chars + '')) + 1);\n    }\n\n    /**\n     * Truncates `string` if it's longer than the given maximum string length.\n     * The last characters of the truncated string are replaced with the omission\n     * string which defaults to \"...\".\n     *\n     * @static\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The string to truncate.\n     * @param {Object|number} [options] The options object or maximum string length.\n     * @param {number} [options.length=30] The maximum string length.\n     * @param {string} [options.omission='...'] The string to indicate text is omitted.\n     * @param {RegExp|string} [options.separator] The separator pattern to truncate to.\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\n     * @returns {string} Returns the truncated string.\n     * @example\n     *\n     * _.trunc('hi-diddly-ho there, neighborino');\n     * // => 'hi-diddly-ho there, neighbo...'\n     *\n     * _.trunc('hi-diddly-ho there, neighborino', 24);\n     * // => 'hi-diddly-ho there, n...'\n     *\n     * _.trunc('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': ' '\n     * });\n     * // => 'hi-diddly-ho there,...'\n     *\n     * _.trunc('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': /,? +/\n     * });\n     * // => 'hi-diddly-ho there...'\n     *\n     * _.trunc('hi-diddly-ho there, neighborino', {\n     *   'omission': ' [...]'\n     * });\n     * // => 'hi-diddly-ho there, neig [...]'\n     */\n    function trunc(string, options, guard) {\n      if (guard && isIterateeCall(string, options, guard)) {\n        options = undefined;\n      }\n      var length = DEFAULT_TRUNC_LENGTH,\n          omission = DEFAULT_TRUNC_OMISSION;\n\n      if (options != null) {\n        if (isObject(options)) {\n          var separator = 'separator' in options ? options.separator : separator;\n          length = 'length' in options ? (+options.length || 0) : length;\n          omission = 'omission' in options ? baseToString(options.omission) : omission;\n        } else {\n          length = +options || 0;\n        }\n      }\n      string = baseToString(string);\n      if (length >= string.length) {\n        return string;\n      }\n      var end = length - omission.length;\n      if (end < 1) {\n        return omission;\n      }\n      var result = string.slice(0, end);\n      if (separator == null) {\n        return result + omission;\n      }\n      if (isRegExp(separator)) {\n        if (string.slice(end).search(separator)) {\n          var match,\n              newEnd,\n              substring = string.slice(0, end);\n\n          if (!separator.global) {\n            separator = RegExp(separator.source, (reFlags.exec(separator) || '') + 'g');\n          }\n          separator.lastIndex = 0;\n          while ((match = separator.exec(substring))) {\n            newEnd = match.index;\n          }\n          result = result.slice(0, newEnd == null ? end : newEnd);\n        }\n      } else if (string.indexOf(separator, end) != end) {\n        var index = result.lastIndexOf(separator);\n        if (index > -1) {\n          result = result.slice(0, index);\n        }\n      }\n      return result + omission;\n    }\n\n    /**\n     * The inverse of `_.escape`; this method converts the HTML entities\n     * `&amp;`, `&lt;`, `&gt;`, `&quot;`, `&#39;`, and `&#96;` in `string` to their\n     * corresponding characters.\n     *\n     * **Note:** No other HTML entities are unescaped. To unescape additional HTML\n     * entities use a third-party library like [_he_](https://mths.be/he).\n     *\n     * @static\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The string to unescape.\n     * @returns {string} Returns the unescaped string.\n     * @example\n     *\n     * _.unescape('fred, barney, &amp; pebbles');\n     * // => 'fred, barney, & pebbles'\n     */\n    function unescape(string) {\n      string = baseToString(string);\n      return (string && reHasEscapedHtml.test(string))\n        ? string.replace(reEscapedHtml, unescapeHtmlChar)\n        : string;\n    }\n\n    /**\n     * Splits `string` into an array of its words.\n     *\n     * @static\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {RegExp|string} [pattern] The pattern to match words.\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\n     * @returns {Array} Returns the words of `string`.\n     * @example\n     *\n     * _.words('fred, barney, & pebbles');\n     * // => ['fred', 'barney', 'pebbles']\n     *\n     * _.words('fred, barney, & pebbles', /[^, ]+/g);\n     * // => ['fred', 'barney', '&', 'pebbles']\n     */\n    function words(string, pattern, guard) {\n      if (guard && isIterateeCall(string, pattern, guard)) {\n        pattern = undefined;\n      }\n      string = baseToString(string);\n      return string.match(pattern || reWords) || [];\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Attempts to invoke `func`, returning either the result or the caught error\n     * object. Any additional arguments are provided to `func` when it is invoked.\n     *\n     * @static\n     * @memberOf _\n     * @category Utility\n     * @param {Function} func The function to attempt.\n     * @returns {*} Returns the `func` result or error object.\n     * @example\n     *\n     * // avoid throwing errors for invalid selectors\n     * var elements = _.attempt(function(selector) {\n     *   return document.querySelectorAll(selector);\n     * }, '>_>');\n     *\n     * if (_.isError(elements)) {\n     *   elements = [];\n     * }\n     */\n    var attempt = restParam(function(func, args) {\n      try {\n        return func.apply(undefined, args);\n      } catch(e) {\n        return isError(e) ? e : new Error(e);\n      }\n    });\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of `thisArg`\n     * and arguments of the created function. If `func` is a property name the\n     * created callback returns the property value for a given element. If `func`\n     * is an object the created callback returns `true` for elements that contain\n     * the equivalent object properties, otherwise it returns `false`.\n     *\n     * @static\n     * @memberOf _\n     * @alias iteratee\n     * @category Utility\n     * @param {*} [func=_.identity] The value to convert to a callback.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\n     * @returns {Function} Returns the callback.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 40 }\n     * ];\n     *\n     * // wrap to create custom callback shorthands\n     * _.callback = _.wrap(_.callback, function(callback, func, thisArg) {\n     *   var match = /^(.+?)__([gl]t)(.+)$/.exec(func);\n     *   if (!match) {\n     *     return callback(func, thisArg);\n     *   }\n     *   return function(object) {\n     *     return match[2] == 'gt'\n     *       ? object[match[1]] > match[3]\n     *       : object[match[1]] < match[3];\n     *   };\n     * });\n     *\n     * _.filter(users, 'age__gt36');\n     * // => [{ 'user': 'fred', 'age': 40 }]\n     */\n    function callback(func, thisArg, guard) {\n      if (guard && isIterateeCall(func, thisArg, guard)) {\n        thisArg = undefined;\n      }\n      return isObjectLike(func)\n        ? matches(func)\n        : baseCallback(func, thisArg);\n    }\n\n    /**\n     * Creates a function that returns `value`.\n     *\n     * @static\n     * @memberOf _\n     * @category Utility\n     * @param {*} value The value to return from the new function.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var object = { 'user': 'fred' };\n     * var getter = _.constant(object);\n     *\n     * getter() === object;\n     * // => true\n     */\n    function constant(value) {\n      return function() {\n        return value;\n      };\n    }\n\n    /**\n     * This method returns the first argument provided to it.\n     *\n     * @static\n     * @memberOf _\n     * @category Utility\n     * @param {*} value Any value.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * var object = { 'user': 'fred' };\n     *\n     * _.identity(object) === object;\n     * // => true\n     */\n    function identity(value) {\n      return value;\n    }\n\n    /**\n     * Creates a function that performs a deep comparison between a given object\n     * and `source`, returning `true` if the given object has equivalent property\n     * values, else `false`.\n     *\n     * **Note:** This method supports comparing arrays, booleans, `Date` objects,\n     * numbers, `Object` objects, regexes, and strings. Objects are compared by\n     * their own, not inherited, enumerable properties. For comparing a single\n     * own or inherited property value see `_.matchesProperty`.\n     *\n     * @static\n     * @memberOf _\n     * @category Utility\n     * @param {Object} source The object of property values to match.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * _.filter(users, _.matches({ 'age': 40, 'active': false }));\n     * // => [{ 'user': 'fred', 'age': 40, 'active': false }]\n     */\n    function matches(source) {\n      return baseMatches(baseClone(source, true));\n    }\n\n    /**\n     * Creates a function that compares the property value of `path` on a given\n     * object to `value`.\n     *\n     * **Note:** This method supports comparing arrays, booleans, `Date` objects,\n     * numbers, `Object` objects, regexes, and strings. Objects are compared by\n     * their own, not inherited, enumerable properties.\n     *\n     * @static\n     * @memberOf _\n     * @category Utility\n     * @param {Array|string} path The path of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney' },\n     *   { 'user': 'fred' }\n     * ];\n     *\n     * _.find(users, _.matchesProperty('user', 'fred'));\n     * // => { 'user': 'fred' }\n     */\n    function matchesProperty(path, srcValue) {\n      return baseMatchesProperty(path, baseClone(srcValue, true));\n    }\n\n    /**\n     * Creates a function that invokes the method at `path` on a given object.\n     * Any additional arguments are provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @category Utility\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': { 'b': { 'c': _.constant(2) } } },\n     *   { 'a': { 'b': { 'c': _.constant(1) } } }\n     * ];\n     *\n     * _.map(objects, _.method('a.b.c'));\n     * // => [2, 1]\n     *\n     * _.invoke(_.sortBy(objects, _.method(['a', 'b', 'c'])), 'a.b.c');\n     * // => [1, 2]\n     */\n    var method = restParam(function(path, args) {\n      return function(object) {\n        return invokePath(object, path, args);\n      };\n    });\n\n    /**\n     * The opposite of `_.method`; this method creates a function that invokes\n     * the method at a given path on `object`. Any additional arguments are\n     * provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @category Utility\n     * @param {Object} object The object to query.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var array = _.times(3, _.constant),\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.methodOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.methodOf(object));\n     * // => [2, 0]\n     */\n    var methodOf = restParam(function(object, args) {\n      return function(path) {\n        return invokePath(object, path, args);\n      };\n    });\n\n    /**\n     * Adds all own enumerable function properties of a source object to the\n     * destination object. If `object` is a function then methods are added to\n     * its prototype as well.\n     *\n     * **Note:** Use `_.runInContext` to create a pristine `lodash` function to\n     * avoid conflicts caused by modifying the original.\n     *\n     * @static\n     * @memberOf _\n     * @category Utility\n     * @param {Function|Object} [object=lodash] The destination object.\n     * @param {Object} source The object of functions to add.\n     * @param {Object} [options] The options object.\n     * @param {boolean} [options.chain=true] Specify whether the functions added\n     *  are chainable.\n     * @returns {Function|Object} Returns `object`.\n     * @example\n     *\n     * function vowels(string) {\n     *   return _.filter(string, function(v) {\n     *     return /[aeiou]/i.test(v);\n     *   });\n     * }\n     *\n     * _.mixin({ 'vowels': vowels });\n     * _.vowels('fred');\n     * // => ['e']\n     *\n     * _('fred').vowels().value();\n     * // => ['e']\n     *\n     * _.mixin({ 'vowels': vowels }, { 'chain': false });\n     * _('fred').vowels();\n     * // => ['e']\n     */\n    function mixin(object, source, options) {\n      if (options == null) {\n        var isObj = isObject(source),\n            props = isObj ? keys(source) : undefined,\n            methodNames = (props && props.length) ? baseFunctions(source, props) : undefined;\n\n        if (!(methodNames ? methodNames.length : isObj)) {\n          methodNames = false;\n          options = source;\n          source = object;\n          object = this;\n        }\n      }\n      if (!methodNames) {\n        methodNames = baseFunctions(source, keys(source));\n      }\n      var chain = true,\n          index = -1,\n          isFunc = isFunction(object),\n          length = methodNames.length;\n\n      if (options === false) {\n        chain = false;\n      } else if (isObject(options) && 'chain' in options) {\n        chain = options.chain;\n      }\n      while (++index < length) {\n        var methodName = methodNames[index],\n            func = source[methodName];\n\n        object[methodName] = func;\n        if (isFunc) {\n          object.prototype[methodName] = (function(func) {\n            return function() {\n              var chainAll = this.__chain__;\n              if (chain || chainAll) {\n                var result = object(this.__wrapped__),\n                    actions = result.__actions__ = arrayCopy(this.__actions__);\n\n                actions.push({ 'func': func, 'args': arguments, 'thisArg': object });\n                result.__chain__ = chainAll;\n                return result;\n              }\n              return func.apply(object, arrayPush([this.value()], arguments));\n            };\n          }(func));\n        }\n      }\n      return object;\n    }\n\n    /**\n     * Reverts the `_` variable to its previous value and returns a reference to\n     * the `lodash` function.\n     *\n     * @static\n     * @memberOf _\n     * @category Utility\n     * @returns {Function} Returns the `lodash` function.\n     * @example\n     *\n     * var lodash = _.noConflict();\n     */\n    function noConflict() {\n      root._ = oldDash;\n      return this;\n    }\n\n    /**\n     * A no-operation function that returns `undefined` regardless of the\n     * arguments it receives.\n     *\n     * @static\n     * @memberOf _\n     * @category Utility\n     * @example\n     *\n     * var object = { 'user': 'fred' };\n     *\n     * _.noop(object) === undefined;\n     * // => true\n     */\n    function noop() {\n      // No operation performed.\n    }\n\n    /**\n     * Creates a function that returns the property value at `path` on a\n     * given object.\n     *\n     * @static\n     * @memberOf _\n     * @category Utility\n     * @param {Array|string} path The path of the property to get.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': { 'b': { 'c': 2 } } },\n     *   { 'a': { 'b': { 'c': 1 } } }\n     * ];\n     *\n     * _.map(objects, _.property('a.b.c'));\n     * // => [2, 1]\n     *\n     * _.pluck(_.sortBy(objects, _.property(['a', 'b', 'c'])), 'a.b.c');\n     * // => [1, 2]\n     */\n    function property(path) {\n      return isKey(path) ? baseProperty(path) : basePropertyDeep(path);\n    }\n\n    /**\n     * The opposite of `_.property`; this method creates a function that returns\n     * the property value at a given path on `object`.\n     *\n     * @static\n     * @memberOf _\n     * @category Utility\n     * @param {Object} object The object to query.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var array = [0, 1, 2],\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.propertyOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));\n     * // => [2, 0]\n     */\n    function propertyOf(object) {\n      return function(path) {\n        return baseGet(object, toPath(path), path + '');\n      };\n    }\n\n    /**\n     * Creates an array of numbers (positive and/or negative) progressing from\n     * `start` up to, but not including, `end`. If `end` is not specified it is\n     * set to `start` with `start` then set to `0`. If `end` is less than `start`\n     * a zero-length range is created unless a negative `step` is specified.\n     *\n     * @static\n     * @memberOf _\n     * @category Utility\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} [step=1] The value to increment or decrement by.\n     * @returns {Array} Returns the new array of numbers.\n     * @example\n     *\n     * _.range(4);\n     * // => [0, 1, 2, 3]\n     *\n     * _.range(1, 5);\n     * // => [1, 2, 3, 4]\n     *\n     * _.range(0, 20, 5);\n     * // => [0, 5, 10, 15]\n     *\n     * _.range(0, -4, -1);\n     * // => [0, -1, -2, -3]\n     *\n     * _.range(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.range(0);\n     * // => []\n     */\n    function range(start, end, step) {\n      if (step && isIterateeCall(start, end, step)) {\n        end = step = undefined;\n      }\n      start = +start || 0;\n      step = step == null ? 1 : (+step || 0);\n\n      if (end == null) {\n        end = start;\n        start = 0;\n      } else {\n        end = +end || 0;\n      }\n      // Use `Array(length)` so engines like Chakra and V8 avoid slower modes.\n      // See https://youtu.be/XAqIpGU8ZZk#t=17m25s for more details.\n      var index = -1,\n          length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n          result = Array(length);\n\n      while (++index < length) {\n        result[index] = start;\n        start += step;\n      }\n      return result;\n    }\n\n    /**\n     * Invokes the iteratee function `n` times, returning an array of the results\n     * of each invocation. The `iteratee` is bound to `thisArg` and invoked with\n     * one argument; (index).\n     *\n     * @static\n     * @memberOf _\n     * @category Utility\n     * @param {number} n The number of times to invoke `iteratee`.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * var diceRolls = _.times(3, _.partial(_.random, 1, 6, false));\n     * // => [3, 6, 4]\n     *\n     * _.times(3, function(n) {\n     *   mage.castSpell(n);\n     * });\n     * // => invokes `mage.castSpell(n)` three times with `n` of `0`, `1`, and `2`\n     *\n     * _.times(3, function(n) {\n     *   this.cast(n);\n     * }, mage);\n     * // => also invokes `mage.castSpell(n)` three times\n     */\n    function times(n, iteratee, thisArg) {\n      n = nativeFloor(n);\n\n      // Exit early to avoid a JSC JIT bug in Safari 8\n      // where `Array(0)` is treated as `Array(1)`.\n      if (n < 1 || !nativeIsFinite(n)) {\n        return [];\n      }\n      var index = -1,\n          result = Array(nativeMin(n, MAX_ARRAY_LENGTH));\n\n      iteratee = bindCallback(iteratee, thisArg, 1);\n      while (++index < n) {\n        if (index < MAX_ARRAY_LENGTH) {\n          result[index] = iteratee(index);\n        } else {\n          iteratee(index);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Generates a unique ID. If `prefix` is provided the ID is appended to it.\n     *\n     * @static\n     * @memberOf _\n     * @category Utility\n     * @param {string} [prefix] The value to prefix the ID with.\n     * @returns {string} Returns the unique ID.\n     * @example\n     *\n     * _.uniqueId('contact_');\n     * // => 'contact_104'\n     *\n     * _.uniqueId();\n     * // => '105'\n     */\n    function uniqueId(prefix) {\n      var id = ++idCounter;\n      return baseToString(prefix) + id;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Adds two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @category Math\n     * @param {number} augend The first number to add.\n     * @param {number} addend The second number to add.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * _.add(6, 4);\n     * // => 10\n     */\n    function add(augend, addend) {\n      return (+augend || 0) + (+addend || 0);\n    }\n\n    /**\n     * Calculates `n` rounded up to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @category Math\n     * @param {number} n The number to round up.\n     * @param {number} [precision=0] The precision to round up to.\n     * @returns {number} Returns the rounded up number.\n     * @example\n     *\n     * _.ceil(4.006);\n     * // => 5\n     *\n     * _.ceil(6.004, 2);\n     * // => 6.01\n     *\n     * _.ceil(6040, -2);\n     * // => 6100\n     */\n    var ceil = createRound('ceil');\n\n    /**\n     * Calculates `n` rounded down to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @category Math\n     * @param {number} n The number to round down.\n     * @param {number} [precision=0] The precision to round down to.\n     * @returns {number} Returns the rounded down number.\n     * @example\n     *\n     * _.floor(4.006);\n     * // => 4\n     *\n     * _.floor(0.046, 2);\n     * // => 0.04\n     *\n     * _.floor(4060, -2);\n     * // => 4000\n     */\n    var floor = createRound('floor');\n\n    /**\n     * Gets the maximum value of `collection`. If `collection` is empty or falsey\n     * `-Infinity` is returned. If an iteratee function is provided it is invoked\n     * for each value in `collection` to generate the criterion by which the value\n     * is ranked. The `iteratee` is bound to `thisArg` and invoked with three\n     * arguments: (value, index, collection).\n     *\n     * If a property name is provided for `iteratee` the created `_.property`\n     * style callback returns the property value of the given element.\n     *\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\n     * style callback returns `true` for elements that have a matching property\n     * value, else `false`.\n     *\n     * If an object is provided for `iteratee` the created `_.matches` style\n     * callback returns `true` for elements that have the properties of the given\n     * object, else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Math\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function|Object|string} [iteratee] The function invoked per iteration.\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * _.max([4, 2, 8, 6]);\n     * // => 8\n     *\n     * _.max([]);\n     * // => -Infinity\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 40 }\n     * ];\n     *\n     * _.max(users, function(chr) {\n     *   return chr.age;\n     * });\n     * // => { 'user': 'fred', 'age': 40 }\n     *\n     * // using the `_.property` callback shorthand\n     * _.max(users, 'age');\n     * // => { 'user': 'fred', 'age': 40 }\n     */\n    var max = createExtremum(gt, NEGATIVE_INFINITY);\n\n    /**\n     * Gets the minimum value of `collection`. If `collection` is empty or falsey\n     * `Infinity` is returned. If an iteratee function is provided it is invoked\n     * for each value in `collection` to generate the criterion by which the value\n     * is ranked. The `iteratee` is bound to `thisArg` and invoked with three\n     * arguments: (value, index, collection).\n     *\n     * If a property name is provided for `iteratee` the created `_.property`\n     * style callback returns the property value of the given element.\n     *\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\n     * style callback returns `true` for elements that have a matching property\n     * value, else `false`.\n     *\n     * If an object is provided for `iteratee` the created `_.matches` style\n     * callback returns `true` for elements that have the properties of the given\n     * object, else `false`.\n     *\n     * @static\n     * @memberOf _\n     * @category Math\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function|Object|string} [iteratee] The function invoked per iteration.\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * _.min([4, 2, 8, 6]);\n     * // => 2\n     *\n     * _.min([]);\n     * // => Infinity\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 40 }\n     * ];\n     *\n     * _.min(users, function(chr) {\n     *   return chr.age;\n     * });\n     * // => { 'user': 'barney', 'age': 36 }\n     *\n     * // using the `_.property` callback shorthand\n     * _.min(users, 'age');\n     * // => { 'user': 'barney', 'age': 36 }\n     */\n    var min = createExtremum(lt, POSITIVE_INFINITY);\n\n    /**\n     * Calculates `n` rounded to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @category Math\n     * @param {number} n The number to round.\n     * @param {number} [precision=0] The precision to round to.\n     * @returns {number} Returns the rounded number.\n     * @example\n     *\n     * _.round(4.006);\n     * // => 4\n     *\n     * _.round(4.006, 2);\n     * // => 4.01\n     *\n     * _.round(4060, -2);\n     * // => 4100\n     */\n    var round = createRound('round');\n\n    /**\n     * Gets the sum of the values in `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @category Math\n     * @param {Array|Object|string} collection The collection to iterate over.\n     * @param {Function|Object|string} [iteratee] The function invoked per iteration.\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * _.sum([4, 6]);\n     * // => 10\n     *\n     * _.sum({ 'a': 4, 'b': 6 });\n     * // => 10\n     *\n     * var objects = [\n     *   { 'n': 4 },\n     *   { 'n': 6 }\n     * ];\n     *\n     * _.sum(objects, function(object) {\n     *   return object.n;\n     * });\n     * // => 10\n     *\n     * // using the `_.property` callback shorthand\n     * _.sum(objects, 'n');\n     * // => 10\n     */\n    function sum(collection, iteratee, thisArg) {\n      if (thisArg && isIterateeCall(collection, iteratee, thisArg)) {\n        iteratee = undefined;\n      }\n      iteratee = getCallback(iteratee, thisArg, 3);\n      return iteratee.length == 1\n        ? arraySum(isArray(collection) ? collection : toIterable(collection), iteratee)\n        : baseSum(collection, iteratee);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    // Ensure wrappers are instances of `baseLodash`.\n    lodash.prototype = baseLodash.prototype;\n\n    LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n    LodashWrapper.prototype.constructor = LodashWrapper;\n\n    LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n    LazyWrapper.prototype.constructor = LazyWrapper;\n\n    // Add functions to the `Map` cache.\n    MapCache.prototype['delete'] = mapDelete;\n    MapCache.prototype.get = mapGet;\n    MapCache.prototype.has = mapHas;\n    MapCache.prototype.set = mapSet;\n\n    // Add functions to the `Set` cache.\n    SetCache.prototype.push = cachePush;\n\n    // Assign cache to `_.memoize`.\n    memoize.Cache = MapCache;\n\n    // Add functions that return wrapped values when chaining.\n    lodash.after = after;\n    lodash.ary = ary;\n    lodash.assign = assign;\n    lodash.at = at;\n    lodash.before = before;\n    lodash.bind = bind;\n    lodash.bindAll = bindAll;\n    lodash.bindKey = bindKey;\n    lodash.callback = callback;\n    lodash.chain = chain;\n    lodash.chunk = chunk;\n    lodash.compact = compact;\n    lodash.constant = constant;\n    lodash.countBy = countBy;\n    lodash.create = create;\n    lodash.curry = curry;\n    lodash.curryRight = curryRight;\n    lodash.debounce = debounce;\n    lodash.defaults = defaults;\n    lodash.defaultsDeep = defaultsDeep;\n    lodash.defer = defer;\n    lodash.delay = delay;\n    lodash.difference = difference;\n    lodash.drop = drop;\n    lodash.dropRight = dropRight;\n    lodash.dropRightWhile = dropRightWhile;\n    lodash.dropWhile = dropWhile;\n    lodash.fill = fill;\n    lodash.filter = filter;\n    lodash.flatten = flatten;\n    lodash.flattenDeep = flattenDeep;\n    lodash.flow = flow;\n    lodash.flowRight = flowRight;\n    lodash.forEach = forEach;\n    lodash.forEachRight = forEachRight;\n    lodash.forIn = forIn;\n    lodash.forInRight = forInRight;\n    lodash.forOwn = forOwn;\n    lodash.forOwnRight = forOwnRight;\n    lodash.functions = functions;\n    lodash.groupBy = groupBy;\n    lodash.indexBy = indexBy;\n    lodash.initial = initial;\n    lodash.intersection = intersection;\n    lodash.invert = invert;\n    lodash.invoke = invoke;\n    lodash.keys = keys;\n    lodash.keysIn = keysIn;\n    lodash.map = map;\n    lodash.mapKeys = mapKeys;\n    lodash.mapValues = mapValues;\n    lodash.matches = matches;\n    lodash.matchesProperty = matchesProperty;\n    lodash.memoize = memoize;\n    lodash.merge = merge;\n    lodash.method = method;\n    lodash.methodOf = methodOf;\n    lodash.mixin = mixin;\n    lodash.modArgs = modArgs;\n    lodash.negate = negate;\n    lodash.omit = omit;\n    lodash.once = once;\n    lodash.pairs = pairs;\n    lodash.partial = partial;\n    lodash.partialRight = partialRight;\n    lodash.partition = partition;\n    lodash.pick = pick;\n    lodash.pluck = pluck;\n    lodash.property = property;\n    lodash.propertyOf = propertyOf;\n    lodash.pull = pull;\n    lodash.pullAt = pullAt;\n    lodash.range = range;\n    lodash.rearg = rearg;\n    lodash.reject = reject;\n    lodash.remove = remove;\n    lodash.rest = rest;\n    lodash.restParam = restParam;\n    lodash.set = set;\n    lodash.shuffle = shuffle;\n    lodash.slice = slice;\n    lodash.sortBy = sortBy;\n    lodash.sortByAll = sortByAll;\n    lodash.sortByOrder = sortByOrder;\n    lodash.spread = spread;\n    lodash.take = take;\n    lodash.takeRight = takeRight;\n    lodash.takeRightWhile = takeRightWhile;\n    lodash.takeWhile = takeWhile;\n    lodash.tap = tap;\n    lodash.throttle = throttle;\n    lodash.thru = thru;\n    lodash.times = times;\n    lodash.toArray = toArray;\n    lodash.toPlainObject = toPlainObject;\n    lodash.transform = transform;\n    lodash.union = union;\n    lodash.uniq = uniq;\n    lodash.unzip = unzip;\n    lodash.unzipWith = unzipWith;\n    lodash.values = values;\n    lodash.valuesIn = valuesIn;\n    lodash.where = where;\n    lodash.without = without;\n    lodash.wrap = wrap;\n    lodash.xor = xor;\n    lodash.zip = zip;\n    lodash.zipObject = zipObject;\n    lodash.zipWith = zipWith;\n\n    // Add aliases.\n    lodash.backflow = flowRight;\n    lodash.collect = map;\n    lodash.compose = flowRight;\n    lodash.each = forEach;\n    lodash.eachRight = forEachRight;\n    lodash.extend = assign;\n    lodash.iteratee = callback;\n    lodash.methods = functions;\n    lodash.object = zipObject;\n    lodash.select = filter;\n    lodash.tail = rest;\n    lodash.unique = uniq;\n\n    // Add functions to `lodash.prototype`.\n    mixin(lodash, lodash);\n\n    /*------------------------------------------------------------------------*/\n\n    // Add functions that return unwrapped values when chaining.\n    lodash.add = add;\n    lodash.attempt = attempt;\n    lodash.camelCase = camelCase;\n    lodash.capitalize = capitalize;\n    lodash.ceil = ceil;\n    lodash.clone = clone;\n    lodash.cloneDeep = cloneDeep;\n    lodash.deburr = deburr;\n    lodash.endsWith = endsWith;\n    lodash.escape = escape;\n    lodash.escapeRegExp = escapeRegExp;\n    lodash.every = every;\n    lodash.find = find;\n    lodash.findIndex = findIndex;\n    lodash.findKey = findKey;\n    lodash.findLast = findLast;\n    lodash.findLastIndex = findLastIndex;\n    lodash.findLastKey = findLastKey;\n    lodash.findWhere = findWhere;\n    lodash.first = first;\n    lodash.floor = floor;\n    lodash.get = get;\n    lodash.gt = gt;\n    lodash.gte = gte;\n    lodash.has = has;\n    lodash.identity = identity;\n    lodash.includes = includes;\n    lodash.indexOf = indexOf;\n    lodash.inRange = inRange;\n    lodash.isArguments = isArguments;\n    lodash.isArray = isArray;\n    lodash.isBoolean = isBoolean;\n    lodash.isDate = isDate;\n    lodash.isElement = isElement;\n    lodash.isEmpty = isEmpty;\n    lodash.isEqual = isEqual;\n    lodash.isError = isError;\n    lodash.isFinite = isFinite;\n    lodash.isFunction = isFunction;\n    lodash.isMatch = isMatch;\n    lodash.isNaN = isNaN;\n    lodash.isNative = isNative;\n    lodash.isNull = isNull;\n    lodash.isNumber = isNumber;\n    lodash.isObject = isObject;\n    lodash.isPlainObject = isPlainObject;\n    lodash.isRegExp = isRegExp;\n    lodash.isString = isString;\n    lodash.isTypedArray = isTypedArray;\n    lodash.isUndefined = isUndefined;\n    lodash.kebabCase = kebabCase;\n    lodash.last = last;\n    lodash.lastIndexOf = lastIndexOf;\n    lodash.lt = lt;\n    lodash.lte = lte;\n    lodash.max = max;\n    lodash.min = min;\n    lodash.noConflict = noConflict;\n    lodash.noop = noop;\n    lodash.now = now;\n    lodash.pad = pad;\n    lodash.padLeft = padLeft;\n    lodash.padRight = padRight;\n    lodash.parseInt = parseInt;\n    lodash.random = random;\n    lodash.reduce = reduce;\n    lodash.reduceRight = reduceRight;\n    lodash.repeat = repeat;\n    lodash.result = result;\n    lodash.round = round;\n    lodash.runInContext = runInContext;\n    lodash.size = size;\n    lodash.snakeCase = snakeCase;\n    lodash.some = some;\n    lodash.sortedIndex = sortedIndex;\n    lodash.sortedLastIndex = sortedLastIndex;\n    lodash.startCase = startCase;\n    lodash.startsWith = startsWith;\n    lodash.sum = sum;\n    lodash.template = template;\n    lodash.trim = trim;\n    lodash.trimLeft = trimLeft;\n    lodash.trimRight = trimRight;\n    lodash.trunc = trunc;\n    lodash.unescape = unescape;\n    lodash.uniqueId = uniqueId;\n    lodash.words = words;\n\n    // Add aliases.\n    lodash.all = every;\n    lodash.any = some;\n    lodash.contains = includes;\n    lodash.eq = isEqual;\n    lodash.detect = find;\n    lodash.foldl = reduce;\n    lodash.foldr = reduceRight;\n    lodash.head = first;\n    lodash.include = includes;\n    lodash.inject = reduce;\n\n    mixin(lodash, (function() {\n      var source = {};\n      baseForOwn(lodash, function(func, methodName) {\n        if (!lodash.prototype[methodName]) {\n          source[methodName] = func;\n        }\n      });\n      return source;\n    }()), false);\n\n    /*------------------------------------------------------------------------*/\n\n    // Add functions capable of returning wrapped and unwrapped values when chaining.\n    lodash.sample = sample;\n\n    lodash.prototype.sample = function(n) {\n      if (!this.__chain__ && n == null) {\n        return sample(this.value());\n      }\n      return this.thru(function(value) {\n        return sample(value, n);\n      });\n    };\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * The semantic version number.\n     *\n     * @static\n     * @memberOf _\n     * @type string\n     */\n    lodash.VERSION = VERSION;\n\n    // Assign default placeholders.\n    arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {\n      lodash[methodName].placeholder = lodash;\n    });\n\n    // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.\n    arrayEach(['drop', 'take'], function(methodName, index) {\n      LazyWrapper.prototype[methodName] = function(n) {\n        var filtered = this.__filtered__;\n        if (filtered && !index) {\n          return new LazyWrapper(this);\n        }\n        n = n == null ? 1 : nativeMax(nativeFloor(n) || 0, 0);\n\n        var result = this.clone();\n        if (filtered) {\n          result.__takeCount__ = nativeMin(result.__takeCount__, n);\n        } else {\n          result.__views__.push({ 'size': n, 'type': methodName + (result.__dir__ < 0 ? 'Right' : '') });\n        }\n        return result;\n      };\n\n      LazyWrapper.prototype[methodName + 'Right'] = function(n) {\n        return this.reverse()[methodName](n).reverse();\n      };\n    });\n\n    // Add `LazyWrapper` methods that accept an `iteratee` value.\n    arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {\n      var type = index + 1,\n          isFilter = type != LAZY_MAP_FLAG;\n\n      LazyWrapper.prototype[methodName] = function(iteratee, thisArg) {\n        var result = this.clone();\n        result.__iteratees__.push({ 'iteratee': getCallback(iteratee, thisArg, 1), 'type': type });\n        result.__filtered__ = result.__filtered__ || isFilter;\n        return result;\n      };\n    });\n\n    // Add `LazyWrapper` methods for `_.first` and `_.last`.\n    arrayEach(['first', 'last'], function(methodName, index) {\n      var takeName = 'take' + (index ? 'Right' : '');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this[takeName](1).value()[0];\n      };\n    });\n\n    // Add `LazyWrapper` methods for `_.initial` and `_.rest`.\n    arrayEach(['initial', 'rest'], function(methodName, index) {\n      var dropName = 'drop' + (index ? '' : 'Right');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\n      };\n    });\n\n    // Add `LazyWrapper` methods for `_.pluck` and `_.where`.\n    arrayEach(['pluck', 'where'], function(methodName, index) {\n      var operationName = index ? 'filter' : 'map',\n          createCallback = index ? baseMatches : property;\n\n      LazyWrapper.prototype[methodName] = function(value) {\n        return this[operationName](createCallback(value));\n      };\n    });\n\n    LazyWrapper.prototype.compact = function() {\n      return this.filter(identity);\n    };\n\n    LazyWrapper.prototype.reject = function(predicate, thisArg) {\n      predicate = getCallback(predicate, thisArg, 1);\n      return this.filter(function(value) {\n        return !predicate(value);\n      });\n    };\n\n    LazyWrapper.prototype.slice = function(start, end) {\n      start = start == null ? 0 : (+start || 0);\n\n      var result = this;\n      if (result.__filtered__ && (start > 0 || end < 0)) {\n        return new LazyWrapper(result);\n      }\n      if (start < 0) {\n        result = result.takeRight(-start);\n      } else if (start) {\n        result = result.drop(start);\n      }\n      if (end !== undefined) {\n        end = (+end || 0);\n        result = end < 0 ? result.dropRight(-end) : result.take(end - start);\n      }\n      return result;\n    };\n\n    LazyWrapper.prototype.takeRightWhile = function(predicate, thisArg) {\n      return this.reverse().takeWhile(predicate, thisArg).reverse();\n    };\n\n    LazyWrapper.prototype.toArray = function() {\n      return this.take(POSITIVE_INFINITY);\n    };\n\n    // Add `LazyWrapper` methods to `lodash.prototype`.\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var checkIteratee = /^(?:filter|map|reject)|While$/.test(methodName),\n          retUnwrapped = /^(?:first|last)$/.test(methodName),\n          lodashFunc = lodash[retUnwrapped ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName];\n\n      if (!lodashFunc) {\n        return;\n      }\n      lodash.prototype[methodName] = function() {\n        var args = retUnwrapped ? [1] : arguments,\n            chainAll = this.__chain__,\n            value = this.__wrapped__,\n            isHybrid = !!this.__actions__.length,\n            isLazy = value instanceof LazyWrapper,\n            iteratee = args[0],\n            useLazy = isLazy || isArray(value);\n\n        if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\n          // Avoid lazy use if the iteratee has a \"length\" value other than `1`.\n          isLazy = useLazy = false;\n        }\n        var interceptor = function(value) {\n          return (retUnwrapped && chainAll)\n            ? lodashFunc(value, 1)[0]\n            : lodashFunc.apply(undefined, arrayPush([value], args));\n        };\n\n        var action = { 'func': thru, 'args': [interceptor], 'thisArg': undefined },\n            onlyLazy = isLazy && !isHybrid;\n\n        if (retUnwrapped && !chainAll) {\n          if (onlyLazy) {\n            value = value.clone();\n            value.__actions__.push(action);\n            return func.call(value);\n          }\n          return lodashFunc.call(undefined, this.value())[0];\n        }\n        if (!retUnwrapped && useLazy) {\n          value = onlyLazy ? value : new LazyWrapper(this);\n          var result = func.apply(value, args);\n          result.__actions__.push(action);\n          return new LodashWrapper(result, chainAll);\n        }\n        return this.thru(interceptor);\n      };\n    });\n\n    // Add `Array` and `String` methods to `lodash.prototype`.\n    arrayEach(['join', 'pop', 'push', 'replace', 'shift', 'sort', 'splice', 'split', 'unshift'], function(methodName) {\n      var func = (/^(?:replace|split)$/.test(methodName) ? stringProto : arrayProto)[methodName],\n          chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\n          retUnwrapped = /^(?:join|pop|replace|shift)$/.test(methodName);\n\n      lodash.prototype[methodName] = function() {\n        var args = arguments;\n        if (retUnwrapped && !this.__chain__) {\n          return func.apply(this.value(), args);\n        }\n        return this[chainName](function(value) {\n          return func.apply(value, args);\n        });\n      };\n    });\n\n    // Map minified function names to their real names.\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var lodashFunc = lodash[methodName];\n      if (lodashFunc) {\n        var key = lodashFunc.name,\n            names = realNames[key] || (realNames[key] = []);\n\n        names.push({ 'name': methodName, 'func': lodashFunc });\n      }\n    });\n\n    realNames[createHybridWrapper(undefined, BIND_KEY_FLAG).name] = [{ 'name': 'wrapper', 'func': undefined }];\n\n    // Add functions to the lazy wrapper.\n    LazyWrapper.prototype.clone = lazyClone;\n    LazyWrapper.prototype.reverse = lazyReverse;\n    LazyWrapper.prototype.value = lazyValue;\n\n    // Add chaining functions to the `lodash` wrapper.\n    lodash.prototype.chain = wrapperChain;\n    lodash.prototype.commit = wrapperCommit;\n    lodash.prototype.concat = wrapperConcat;\n    lodash.prototype.plant = wrapperPlant;\n    lodash.prototype.reverse = wrapperReverse;\n    lodash.prototype.toString = wrapperToString;\n    lodash.prototype.run = lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;\n\n    // Add function aliases to the `lodash` wrapper.\n    lodash.prototype.collect = lodash.prototype.map;\n    lodash.prototype.head = lodash.prototype.first;\n    lodash.prototype.select = lodash.prototype.filter;\n    lodash.prototype.tail = lodash.prototype.rest;\n\n    return lodash;\n  }\n\n  /*--------------------------------------------------------------------------*/\n\n  // Export lodash.\n  var _ = runInContext();\n\n  // Some AMD build optimizers like r.js check for condition patterns like the following:\n  if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n    // Expose lodash to the global object when an AMD loader is present to avoid\n    // errors in cases where lodash is loaded by a script tag and not intended\n    // as an AMD module. See http://requirejs.org/docs/errors.html#mismatch for\n    // more details.\n    root._ = _;\n\n    // Define as an anonymous module so, through path mapping, it can be\n    // referenced as the \"underscore\" module.\n    define(function() {\n      return _;\n    });\n  }\n  // Check for `exports` after `define` in case a build optimizer adds an `exports` object.\n  else if (freeExports && freeModule) {\n    // Export for Node.js or RingoJS.\n    if (moduleExports) {\n      (freeModule.exports = _)._ = _;\n    }\n    // Export for Rhino with CommonJS support.\n    else {\n      freeExports._ = _;\n    }\n  }\n  else {\n    // Export for a browser or Rhino.\n    root._ = _;\n  }\n}.call(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}]},{},[\"/node_modules/xqlint/lib/xqlint.js\"]);\n\n});\n"
  },
  {
    "path": "lib/ace/mode/xquery/xquery_lexer.js",
    "content": "define(function(require, exports, module) {\nmodule.exports = (function outer (modules, cache, entry) {\n    var previousRequire = typeof require == \"function\" && require;\n    function newRequire(name, jumped){\n        if(!cache[name]) {\n            if(!modules[name]) {\n                var currentRequire = typeof require == \"function\" && require;\n                if (!jumped && currentRequire) return currentRequire(name, true);\n                if (previousRequire) return previousRequire(name, true);\n                var err = new Error('Cannot find module \\'' + name + '\\'');\n                err.code = 'MODULE_NOT_FOUND';\n                throw err;\n            }\n            var m = cache[name] = {exports:{}};\n            modules[name][0].call(m.exports, function(x){\n                var id = modules[name][1][x];\n                return newRequire(id ? id : x);\n            },m,m.exports,outer,modules,cache,entry);\n        }\n        return cache[name].exports;\n    }\n    for(var i=0;i<entry.length;i++) newRequire(entry[i]);\n    return newRequire(entry[0]);\n})\n({\"/node_modules/xqlint/lib/lexers/XQueryTokenizer.js\":[function(_dereq_,module,exports){\n// This file was generated on Thu Jul 24, 2014 15:01 (UTC+01) by REx v5.30 which is Copyright (c) 1979-2014 by Gunther Rademacher <grd@gmx.net>\n// REx command line: XQueryTokenizer.ebnf -ll 2 -backtrack -tree -javascript -a xqlint\n\n                                                            // line 2 \"XQueryTokenizer.ebnf\"\n                                                            var XQueryTokenizer = exports.XQueryTokenizer = function XQueryTokenizer(string, parsingEventHandler)\n                                                            {\n                                                              init(string, parsingEventHandler);\n                                                            // line 9 \"XQueryTokenizer.js\"\n  var self = this;\n\n  this.ParseException = function(b, e, s, o, x)\n  {\n    var\n      begin = b,\n      end = e,\n      state = s,\n      offending = o,\n      expected = x;\n\n    this.getBegin = function() {return begin;};\n    this.getEnd = function() {return end;};\n    this.getState = function() {return state;};\n    this.getExpected = function() {return expected;};\n    this.getOffending = function() {return offending;};\n\n    this.getMessage = function()\n    {\n      return offending < 0 ? \"lexical analysis failed\" : \"syntax error\";\n    };\n  };\n\n  function init(string, parsingEventHandler)\n  {\n    eventHandler = parsingEventHandler;\n    input = string;\n    size = string.length;\n    reset(0, 0, 0);\n  }\n\n  this.getInput = function()\n  {\n    return input;\n  };\n\n  function reset(l, b, e)\n  {\n            b0 = b; e0 = b;\n    l1 = l; b1 = b; e1 = e;\n    end = e;\n    eventHandler.reset(input);\n  }\n\n  this.getOffendingToken = function(e)\n  {\n    var o = e.getOffending();\n    return o >= 0 ? XQueryTokenizer.TOKEN[o] : null;\n  };\n\n  this.getExpectedTokenSet = function(e)\n  {\n    var expected;\n    if (e.getExpected() < 0)\n    {\n      expected = XQueryTokenizer.getTokenSet(- e.getState());\n    }\n    else\n    {\n      expected = [XQueryTokenizer.TOKEN[e.getExpected()]];\n    }\n    return expected;\n  };\n\n  this.getErrorMessage = function(e)\n  {\n    var tokenSet = this.getExpectedTokenSet(e);\n    var found = this.getOffendingToken(e);\n    var prefix = input.substring(0, e.getBegin());\n    var lines = prefix.split(\"\\n\");\n    var line = lines.length;\n    var column = lines[line - 1].length + 1;\n    var size = e.getEnd() - e.getBegin();\n    return e.getMessage()\n         + (found == null ? \"\" : \", found \" + found)\n         + \"\\nwhile expecting \"\n         + (tokenSet.length == 1 ? tokenSet[0] : (\"[\" + tokenSet.join(\", \") + \"]\"))\n         + \"\\n\"\n         + (size == 0 || found != null ? \"\" : \"after successfully scanning \" + size + \" characters beginning \")\n         + \"at line \" + line + \", column \" + column + \":\\n...\"\n         + input.substring(e.getBegin(), Math.min(input.length, e.getBegin() + 64))\n         + \"...\";\n  };\n\n  this.parse_start = function()\n  {\n    eventHandler.startNonterminal(\"start\", e0);\n    lookahead1W(14);                // ModuleDecl | Annotation | OptionDecl | Operator | Variable | Tag | AttrTest |\n                                    // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n                                    // S^WS | EOF | '!' | '\"' | \"'\" | '(' | '(#' | '(:' | '(:~' | ')' | ',' | '.' |\n                                    // '/' | ':' | ';' | '<!--' | '<![CDATA[' | '<?' | '[' | ']' | 'after' |\n                                    // 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' | 'as' | 'ascending' |\n                                    // 'at' | 'attribute' | 'base-uri' | 'before' | 'boundary-space' | 'break' |\n                                    // 'case' | 'cast' | 'castable' | 'catch' | 'child' | 'collation' | 'comment' |\n                                    // 'constraint' | 'construction' | 'context' | 'continue' | 'copy' |\n                                    // 'copy-namespaces' | 'count' | 'decimal-format' | 'declare' | 'default' |\n                                    // 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' |\n                                    // 'document' | 'document-node' | 'element' | 'else' | 'empty' | 'empty-sequence' |\n                                    // 'encoding' | 'end' | 'eq' | 'every' | 'except' | 'exit' | 'external' | 'first' |\n                                    // 'following' | 'following-sibling' | 'for' | 'ft-option' | 'function' | 'ge' |\n                                    // 'group' | 'gt' | 'idiv' | 'if' | 'import' | 'in' | 'index' | 'insert' |\n                                    // 'instance' | 'integrity' | 'intersect' | 'into' | 'is' | 'item' | 'last' |\n                                    // 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' | 'modify' | 'module' |\n                                    // 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' | 'only' | 'option' |\n                                    // 'or' | 'order' | 'ordered' | 'ordering' | 'parent' | 'preceding' |\n                                    // 'preceding-sibling' | 'processing-instruction' | 'rename' | 'replace' |\n                                    // 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'switch' | 'text' | 'to' | 'treat' | 'try' |\n                                    // 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // 'xquery' | '{' | '|' | '}'\n    switch (l1)\n    {\n    case 55:                        // '<![CDATA['\n      shift(55);                    // '<![CDATA['\n      break;\n    case 54:                        // '<!--'\n      shift(54);                    // '<!--'\n      break;\n    case 56:                        // '<?'\n      shift(56);                    // '<?'\n      break;\n    case 40:                        // '(#'\n      shift(40);                    // '(#'\n      break;\n    case 42:                        // '(:~'\n      shift(42);                    // '(:~'\n      break;\n    case 41:                        // '(:'\n      shift(41);                    // '(:'\n      break;\n    case 35:                        // '\"'\n      shift(35);                    // '\"'\n      break;\n    case 38:                        // \"'\"\n      shift(38);                    // \"'\"\n      break;\n    case 274:                       // '}'\n      shift(274);                   // '}'\n      break;\n    case 271:                       // '{'\n      shift(271);                   // '{'\n      break;\n    case 39:                        // '('\n      shift(39);                    // '('\n      break;\n    case 43:                        // ')'\n      shift(43);                    // ')'\n      break;\n    case 49:                        // '/'\n      shift(49);                    // '/'\n      break;\n    case 62:                        // '['\n      shift(62);                    // '['\n      break;\n    case 63:                        // ']'\n      shift(63);                    // ']'\n      break;\n    case 46:                        // ','\n      shift(46);                    // ','\n      break;\n    case 48:                        // '.'\n      shift(48);                    // '.'\n      break;\n    case 53:                        // ';'\n      shift(53);                    // ';'\n      break;\n    case 51:                        // ':'\n      shift(51);                    // ':'\n      break;\n    case 34:                        // '!'\n      shift(34);                    // '!'\n      break;\n    case 273:                       // '|'\n      shift(273);                   // '|'\n      break;\n    case 2:                         // Annotation\n      shift(2);                     // Annotation\n      break;\n    case 1:                         // ModuleDecl\n      shift(1);                     // ModuleDecl\n      break;\n    case 3:                         // OptionDecl\n      shift(3);                     // OptionDecl\n      break;\n    case 12:                        // AttrTest\n      shift(12);                    // AttrTest\n      break;\n    case 13:                        // Wildcard\n      shift(13);                    // Wildcard\n      break;\n    case 15:                        // IntegerLiteral\n      shift(15);                    // IntegerLiteral\n      break;\n    case 16:                        // DecimalLiteral\n      shift(16);                    // DecimalLiteral\n      break;\n    case 17:                        // DoubleLiteral\n      shift(17);                    // DoubleLiteral\n      break;\n    case 5:                         // Variable\n      shift(5);                     // Variable\n      break;\n    case 6:                         // Tag\n      shift(6);                     // Tag\n      break;\n    case 4:                         // Operator\n      shift(4);                     // Operator\n      break;\n    case 33:                        // EOF\n      shift(33);                    // EOF\n      break;\n    default:\n      parse_EQName();\n    }\n    eventHandler.endNonterminal(\"start\", e0);\n  };\n\n  this.parse_StartTag = function()\n  {\n    eventHandler.startNonterminal(\"StartTag\", e0);\n    lookahead1W(8);                 // QName | S^WS | EOF | '\"' | \"'\" | '/>' | '=' | '>'\n    switch (l1)\n    {\n    case 58:                        // '>'\n      shift(58);                    // '>'\n      break;\n    case 50:                        // '/>'\n      shift(50);                    // '/>'\n      break;\n    case 27:                        // QName\n      shift(27);                    // QName\n      break;\n    case 57:                        // '='\n      shift(57);                    // '='\n      break;\n    case 35:                        // '\"'\n      shift(35);                    // '\"'\n      break;\n    case 38:                        // \"'\"\n      shift(38);                    // \"'\"\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"StartTag\", e0);\n  };\n\n  this.parse_TagContent = function()\n  {\n    eventHandler.startNonterminal(\"TagContent\", e0);\n    lookahead1(11);                 // Tag | EndTag | PredefinedEntityRef | ElementContentChar | CharRef | EOF |\n                                    // '<!--' | '<![CDATA[' | '{' | '{{' | '}}'\n    switch (l1)\n    {\n    case 23:                        // ElementContentChar\n      shift(23);                    // ElementContentChar\n      break;\n    case 6:                         // Tag\n      shift(6);                     // Tag\n      break;\n    case 7:                         // EndTag\n      shift(7);                     // EndTag\n      break;\n    case 55:                        // '<![CDATA['\n      shift(55);                    // '<![CDATA['\n      break;\n    case 54:                        // '<!--'\n      shift(54);                    // '<!--'\n      break;\n    case 18:                        // PredefinedEntityRef\n      shift(18);                    // PredefinedEntityRef\n      break;\n    case 29:                        // CharRef\n      shift(29);                    // CharRef\n      break;\n    case 272:                       // '{{'\n      shift(272);                   // '{{'\n      break;\n    case 275:                       // '}}'\n      shift(275);                   // '}}'\n      break;\n    case 271:                       // '{'\n      shift(271);                   // '{'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"TagContent\", e0);\n  };\n\n  this.parse_AposAttr = function()\n  {\n    eventHandler.startNonterminal(\"AposAttr\", e0);\n    lookahead1(10);                 // PredefinedEntityRef | EscapeApos | AposAttrContentChar | CharRef | EOF | \"'\" |\n                                    // '{' | '{{' | '}}'\n    switch (l1)\n    {\n    case 20:                        // EscapeApos\n      shift(20);                    // EscapeApos\n      break;\n    case 25:                        // AposAttrContentChar\n      shift(25);                    // AposAttrContentChar\n      break;\n    case 18:                        // PredefinedEntityRef\n      shift(18);                    // PredefinedEntityRef\n      break;\n    case 29:                        // CharRef\n      shift(29);                    // CharRef\n      break;\n    case 272:                       // '{{'\n      shift(272);                   // '{{'\n      break;\n    case 275:                       // '}}'\n      shift(275);                   // '}}'\n      break;\n    case 271:                       // '{'\n      shift(271);                   // '{'\n      break;\n    case 38:                        // \"'\"\n      shift(38);                    // \"'\"\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"AposAttr\", e0);\n  };\n\n  this.parse_QuotAttr = function()\n  {\n    eventHandler.startNonterminal(\"QuotAttr\", e0);\n    lookahead1(9);                  // PredefinedEntityRef | EscapeQuot | QuotAttrContentChar | CharRef | EOF | '\"' |\n                                    // '{' | '{{' | '}}'\n    switch (l1)\n    {\n    case 19:                        // EscapeQuot\n      shift(19);                    // EscapeQuot\n      break;\n    case 24:                        // QuotAttrContentChar\n      shift(24);                    // QuotAttrContentChar\n      break;\n    case 18:                        // PredefinedEntityRef\n      shift(18);                    // PredefinedEntityRef\n      break;\n    case 29:                        // CharRef\n      shift(29);                    // CharRef\n      break;\n    case 272:                       // '{{'\n      shift(272);                   // '{{'\n      break;\n    case 275:                       // '}}'\n      shift(275);                   // '}}'\n      break;\n    case 271:                       // '{'\n      shift(271);                   // '{'\n      break;\n    case 35:                        // '\"'\n      shift(35);                    // '\"'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"QuotAttr\", e0);\n  };\n\n  this.parse_CData = function()\n  {\n    eventHandler.startNonterminal(\"CData\", e0);\n    lookahead1(1);                  // CDataSectionContents | EOF | ']]>'\n    switch (l1)\n    {\n    case 11:                        // CDataSectionContents\n      shift(11);                    // CDataSectionContents\n      break;\n    case 64:                        // ']]>'\n      shift(64);                    // ']]>'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"CData\", e0);\n  };\n\n  this.parse_XMLComment = function()\n  {\n    eventHandler.startNonterminal(\"XMLComment\", e0);\n    lookahead1(0);                  // DirCommentContents | EOF | '-->'\n    switch (l1)\n    {\n    case 9:                         // DirCommentContents\n      shift(9);                     // DirCommentContents\n      break;\n    case 47:                        // '-->'\n      shift(47);                    // '-->'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"XMLComment\", e0);\n  };\n\n  this.parse_PI = function()\n  {\n    eventHandler.startNonterminal(\"PI\", e0);\n    lookahead1(3);                  // DirPIContents | EOF | '?' | '?>'\n    switch (l1)\n    {\n    case 10:                        // DirPIContents\n      shift(10);                    // DirPIContents\n      break;\n    case 59:                        // '?'\n      shift(59);                    // '?'\n      break;\n    case 60:                        // '?>'\n      shift(60);                    // '?>'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"PI\", e0);\n  };\n\n  this.parse_Pragma = function()\n  {\n    eventHandler.startNonterminal(\"Pragma\", e0);\n    lookahead1(2);                  // PragmaContents | EOF | '#' | '#)'\n    switch (l1)\n    {\n    case 8:                         // PragmaContents\n      shift(8);                     // PragmaContents\n      break;\n    case 36:                        // '#'\n      shift(36);                    // '#'\n      break;\n    case 37:                        // '#)'\n      shift(37);                    // '#)'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"Pragma\", e0);\n  };\n\n  this.parse_Comment = function()\n  {\n    eventHandler.startNonterminal(\"Comment\", e0);\n    lookahead1(4);                  // CommentContents | EOF | '(:' | ':)'\n    switch (l1)\n    {\n    case 52:                        // ':)'\n      shift(52);                    // ':)'\n      break;\n    case 41:                        // '(:'\n      shift(41);                    // '(:'\n      break;\n    case 30:                        // CommentContents\n      shift(30);                    // CommentContents\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"Comment\", e0);\n  };\n\n  this.parse_CommentDoc = function()\n  {\n    eventHandler.startNonterminal(\"CommentDoc\", e0);\n    lookahead1(5);                  // DocTag | DocCommentContents | EOF | '(:' | ':)'\n    switch (l1)\n    {\n    case 31:                        // DocTag\n      shift(31);                    // DocTag\n      break;\n    case 32:                        // DocCommentContents\n      shift(32);                    // DocCommentContents\n      break;\n    case 52:                        // ':)'\n      shift(52);                    // ':)'\n      break;\n    case 41:                        // '(:'\n      shift(41);                    // '(:'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"CommentDoc\", e0);\n  };\n\n  this.parse_QuotString = function()\n  {\n    eventHandler.startNonterminal(\"QuotString\", e0);\n    lookahead1(6);                  // PredefinedEntityRef | EscapeQuot | QuotChar | CharRef | EOF | '\"'\n    switch (l1)\n    {\n    case 18:                        // PredefinedEntityRef\n      shift(18);                    // PredefinedEntityRef\n      break;\n    case 29:                        // CharRef\n      shift(29);                    // CharRef\n      break;\n    case 19:                        // EscapeQuot\n      shift(19);                    // EscapeQuot\n      break;\n    case 21:                        // QuotChar\n      shift(21);                    // QuotChar\n      break;\n    case 35:                        // '\"'\n      shift(35);                    // '\"'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"QuotString\", e0);\n  };\n\n  this.parse_AposString = function()\n  {\n    eventHandler.startNonterminal(\"AposString\", e0);\n    lookahead1(7);                  // PredefinedEntityRef | EscapeApos | AposChar | CharRef | EOF | \"'\"\n    switch (l1)\n    {\n    case 18:                        // PredefinedEntityRef\n      shift(18);                    // PredefinedEntityRef\n      break;\n    case 29:                        // CharRef\n      shift(29);                    // CharRef\n      break;\n    case 20:                        // EscapeApos\n      shift(20);                    // EscapeApos\n      break;\n    case 22:                        // AposChar\n      shift(22);                    // AposChar\n      break;\n    case 38:                        // \"'\"\n      shift(38);                    // \"'\"\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"AposString\", e0);\n  };\n\n  this.parse_Prefix = function()\n  {\n    eventHandler.startNonterminal(\"Prefix\", e0);\n    lookahead1W(13);                // NCName^Token | S^WS | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'first' | 'following' | 'following-sibling' | 'for' |\n                                    // 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' |\n                                    // 'in' | 'index' | 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' |\n                                    // 'is' | 'item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'switch' | 'text' | 'to' | 'treat' | 'try' |\n                                    // 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // 'xquery'\n    whitespace();\n    parse_NCName();\n    eventHandler.endNonterminal(\"Prefix\", e0);\n  };\n\n  this.parse__EQName = function()\n  {\n    eventHandler.startNonterminal(\"_EQName\", e0);\n    lookahead1W(12);                // EQName^Token | S^WS | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n                                    // 'and' | 'as' | 'ascending' | 'at' | 'attribute' | 'base-uri' | 'before' |\n                                    // 'boundary-space' | 'break' | 'case' | 'cast' | 'castable' | 'catch' | 'child' |\n                                    // 'collation' | 'comment' | 'constraint' | 'construction' | 'context' |\n                                    // 'continue' | 'copy' | 'copy-namespaces' | 'count' | 'decimal-format' |\n                                    // 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' |\n                                    // 'descending' | 'div' | 'document' | 'document-node' | 'element' | 'else' |\n                                    // 'empty' | 'empty-sequence' | 'encoding' | 'end' | 'eq' | 'every' | 'except' |\n                                    // 'exit' | 'external' | 'first' | 'following' | 'following-sibling' | 'for' |\n                                    // 'ft-option' | 'function' | 'ge' | 'group' | 'gt' | 'idiv' | 'if' | 'import' |\n                                    // 'in' | 'index' | 'insert' | 'instance' | 'integrity' | 'intersect' | 'into' |\n                                    // 'is' | 'item' | 'last' | 'lax' | 'le' | 'let' | 'loop' | 'lt' | 'mod' |\n                                    // 'modify' | 'module' | 'namespace' | 'namespace-node' | 'ne' | 'node' | 'nodes' |\n                                    // 'only' | 'option' | 'or' | 'order' | 'ordered' | 'ordering' | 'parent' |\n                                    // 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' |\n                                    // 'replace' | 'return' | 'returning' | 'revalidation' | 'satisfies' | 'schema' |\n                                    // 'schema-attribute' | 'schema-element' | 'score' | 'self' | 'sliding' | 'some' |\n                                    // 'stable' | 'start' | 'strict' | 'switch' | 'text' | 'to' | 'treat' | 'try' |\n                                    // 'tumbling' | 'type' | 'typeswitch' | 'union' | 'unordered' | 'updating' |\n                                    // 'validate' | 'value' | 'variable' | 'version' | 'where' | 'while' | 'with' |\n                                    // 'xquery'\n    whitespace();\n    parse_EQName();\n    eventHandler.endNonterminal(\"_EQName\", e0);\n  };\n\n  function parse_EQName()\n  {\n    eventHandler.startNonterminal(\"EQName\", e0);\n    switch (l1)\n    {\n    case 77:                        // 'attribute'\n      shift(77);                    // 'attribute'\n      break;\n    case 91:                        // 'comment'\n      shift(91);                    // 'comment'\n      break;\n    case 115:                       // 'document-node'\n      shift(115);                   // 'document-node'\n      break;\n    case 116:                       // 'element'\n      shift(116);                   // 'element'\n      break;\n    case 119:                       // 'empty-sequence'\n      shift(119);                   // 'empty-sequence'\n      break;\n    case 140:                       // 'function'\n      shift(140);                   // 'function'\n      break;\n    case 147:                       // 'if'\n      shift(147);                   // 'if'\n      break;\n    case 160:                       // 'item'\n      shift(160);                   // 'item'\n      break;\n    case 180:                       // 'namespace-node'\n      shift(180);                   // 'namespace-node'\n      break;\n    case 186:                       // 'node'\n      shift(186);                   // 'node'\n      break;\n    case 211:                       // 'processing-instruction'\n      shift(211);                   // 'processing-instruction'\n      break;\n    case 221:                       // 'schema-attribute'\n      shift(221);                   // 'schema-attribute'\n      break;\n    case 222:                       // 'schema-element'\n      shift(222);                   // 'schema-element'\n      break;\n    case 238:                       // 'switch'\n      shift(238);                   // 'switch'\n      break;\n    case 239:                       // 'text'\n      shift(239);                   // 'text'\n      break;\n    case 248:                       // 'typeswitch'\n      shift(248);                   // 'typeswitch'\n      break;\n    default:\n      parse_FunctionName();\n    }\n    eventHandler.endNonterminal(\"EQName\", e0);\n  }\n\n  function parse_FunctionName()\n  {\n    eventHandler.startNonterminal(\"FunctionName\", e0);\n    switch (l1)\n    {\n    case 14:                        // EQName^Token\n      shift(14);                    // EQName^Token\n      break;\n    case 65:                        // 'after'\n      shift(65);                    // 'after'\n      break;\n    case 68:                        // 'ancestor'\n      shift(68);                    // 'ancestor'\n      break;\n    case 69:                        // 'ancestor-or-self'\n      shift(69);                    // 'ancestor-or-self'\n      break;\n    case 70:                        // 'and'\n      shift(70);                    // 'and'\n      break;\n    case 74:                        // 'as'\n      shift(74);                    // 'as'\n      break;\n    case 75:                        // 'ascending'\n      shift(75);                    // 'ascending'\n      break;\n    case 79:                        // 'before'\n      shift(79);                    // 'before'\n      break;\n    case 83:                        // 'case'\n      shift(83);                    // 'case'\n      break;\n    case 84:                        // 'cast'\n      shift(84);                    // 'cast'\n      break;\n    case 85:                        // 'castable'\n      shift(85);                    // 'castable'\n      break;\n    case 88:                        // 'child'\n      shift(88);                    // 'child'\n      break;\n    case 89:                        // 'collation'\n      shift(89);                    // 'collation'\n      break;\n    case 98:                        // 'copy'\n      shift(98);                    // 'copy'\n      break;\n    case 100:                       // 'count'\n      shift(100);                   // 'count'\n      break;\n    case 103:                       // 'declare'\n      shift(103);                   // 'declare'\n      break;\n    case 104:                       // 'default'\n      shift(104);                   // 'default'\n      break;\n    case 105:                       // 'delete'\n      shift(105);                   // 'delete'\n      break;\n    case 106:                       // 'descendant'\n      shift(106);                   // 'descendant'\n      break;\n    case 107:                       // 'descendant-or-self'\n      shift(107);                   // 'descendant-or-self'\n      break;\n    case 108:                       // 'descending'\n      shift(108);                   // 'descending'\n      break;\n    case 113:                       // 'div'\n      shift(113);                   // 'div'\n      break;\n    case 114:                       // 'document'\n      shift(114);                   // 'document'\n      break;\n    case 117:                       // 'else'\n      shift(117);                   // 'else'\n      break;\n    case 118:                       // 'empty'\n      shift(118);                   // 'empty'\n      break;\n    case 121:                       // 'end'\n      shift(121);                   // 'end'\n      break;\n    case 123:                       // 'eq'\n      shift(123);                   // 'eq'\n      break;\n    case 124:                       // 'every'\n      shift(124);                   // 'every'\n      break;\n    case 126:                       // 'except'\n      shift(126);                   // 'except'\n      break;\n    case 129:                       // 'first'\n      shift(129);                   // 'first'\n      break;\n    case 130:                       // 'following'\n      shift(130);                   // 'following'\n      break;\n    case 131:                       // 'following-sibling'\n      shift(131);                   // 'following-sibling'\n      break;\n    case 132:                       // 'for'\n      shift(132);                   // 'for'\n      break;\n    case 141:                       // 'ge'\n      shift(141);                   // 'ge'\n      break;\n    case 143:                       // 'group'\n      shift(143);                   // 'group'\n      break;\n    case 145:                       // 'gt'\n      shift(145);                   // 'gt'\n      break;\n    case 146:                       // 'idiv'\n      shift(146);                   // 'idiv'\n      break;\n    case 148:                       // 'import'\n      shift(148);                   // 'import'\n      break;\n    case 154:                       // 'insert'\n      shift(154);                   // 'insert'\n      break;\n    case 155:                       // 'instance'\n      shift(155);                   // 'instance'\n      break;\n    case 157:                       // 'intersect'\n      shift(157);                   // 'intersect'\n      break;\n    case 158:                       // 'into'\n      shift(158);                   // 'into'\n      break;\n    case 159:                       // 'is'\n      shift(159);                   // 'is'\n      break;\n    case 165:                       // 'last'\n      shift(165);                   // 'last'\n      break;\n    case 167:                       // 'le'\n      shift(167);                   // 'le'\n      break;\n    case 169:                       // 'let'\n      shift(169);                   // 'let'\n      break;\n    case 173:                       // 'lt'\n      shift(173);                   // 'lt'\n      break;\n    case 175:                       // 'mod'\n      shift(175);                   // 'mod'\n      break;\n    case 176:                       // 'modify'\n      shift(176);                   // 'modify'\n      break;\n    case 177:                       // 'module'\n      shift(177);                   // 'module'\n      break;\n    case 179:                       // 'namespace'\n      shift(179);                   // 'namespace'\n      break;\n    case 181:                       // 'ne'\n      shift(181);                   // 'ne'\n      break;\n    case 193:                       // 'only'\n      shift(193);                   // 'only'\n      break;\n    case 195:                       // 'or'\n      shift(195);                   // 'or'\n      break;\n    case 196:                       // 'order'\n      shift(196);                   // 'order'\n      break;\n    case 197:                       // 'ordered'\n      shift(197);                   // 'ordered'\n      break;\n    case 201:                       // 'parent'\n      shift(201);                   // 'parent'\n      break;\n    case 207:                       // 'preceding'\n      shift(207);                   // 'preceding'\n      break;\n    case 208:                       // 'preceding-sibling'\n      shift(208);                   // 'preceding-sibling'\n      break;\n    case 213:                       // 'rename'\n      shift(213);                   // 'rename'\n      break;\n    case 214:                       // 'replace'\n      shift(214);                   // 'replace'\n      break;\n    case 215:                       // 'return'\n      shift(215);                   // 'return'\n      break;\n    case 219:                       // 'satisfies'\n      shift(219);                   // 'satisfies'\n      break;\n    case 224:                       // 'self'\n      shift(224);                   // 'self'\n      break;\n    case 230:                       // 'some'\n      shift(230);                   // 'some'\n      break;\n    case 231:                       // 'stable'\n      shift(231);                   // 'stable'\n      break;\n    case 232:                       // 'start'\n      shift(232);                   // 'start'\n      break;\n    case 243:                       // 'to'\n      shift(243);                   // 'to'\n      break;\n    case 244:                       // 'treat'\n      shift(244);                   // 'treat'\n      break;\n    case 245:                       // 'try'\n      shift(245);                   // 'try'\n      break;\n    case 249:                       // 'union'\n      shift(249);                   // 'union'\n      break;\n    case 251:                       // 'unordered'\n      shift(251);                   // 'unordered'\n      break;\n    case 255:                       // 'validate'\n      shift(255);                   // 'validate'\n      break;\n    case 261:                       // 'where'\n      shift(261);                   // 'where'\n      break;\n    case 265:                       // 'with'\n      shift(265);                   // 'with'\n      break;\n    case 269:                       // 'xquery'\n      shift(269);                   // 'xquery'\n      break;\n    case 67:                        // 'allowing'\n      shift(67);                    // 'allowing'\n      break;\n    case 76:                        // 'at'\n      shift(76);                    // 'at'\n      break;\n    case 78:                        // 'base-uri'\n      shift(78);                    // 'base-uri'\n      break;\n    case 80:                        // 'boundary-space'\n      shift(80);                    // 'boundary-space'\n      break;\n    case 81:                        // 'break'\n      shift(81);                    // 'break'\n      break;\n    case 86:                        // 'catch'\n      shift(86);                    // 'catch'\n      break;\n    case 93:                        // 'construction'\n      shift(93);                    // 'construction'\n      break;\n    case 96:                        // 'context'\n      shift(96);                    // 'context'\n      break;\n    case 97:                        // 'continue'\n      shift(97);                    // 'continue'\n      break;\n    case 99:                        // 'copy-namespaces'\n      shift(99);                    // 'copy-namespaces'\n      break;\n    case 101:                       // 'decimal-format'\n      shift(101);                   // 'decimal-format'\n      break;\n    case 120:                       // 'encoding'\n      shift(120);                   // 'encoding'\n      break;\n    case 127:                       // 'exit'\n      shift(127);                   // 'exit'\n      break;\n    case 128:                       // 'external'\n      shift(128);                   // 'external'\n      break;\n    case 136:                       // 'ft-option'\n      shift(136);                   // 'ft-option'\n      break;\n    case 149:                       // 'in'\n      shift(149);                   // 'in'\n      break;\n    case 150:                       // 'index'\n      shift(150);                   // 'index'\n      break;\n    case 156:                       // 'integrity'\n      shift(156);                   // 'integrity'\n      break;\n    case 166:                       // 'lax'\n      shift(166);                   // 'lax'\n      break;\n    case 187:                       // 'nodes'\n      shift(187);                   // 'nodes'\n      break;\n    case 194:                       // 'option'\n      shift(194);                   // 'option'\n      break;\n    case 198:                       // 'ordering'\n      shift(198);                   // 'ordering'\n      break;\n    case 217:                       // 'revalidation'\n      shift(217);                   // 'revalidation'\n      break;\n    case 220:                       // 'schema'\n      shift(220);                   // 'schema'\n      break;\n    case 223:                       // 'score'\n      shift(223);                   // 'score'\n      break;\n    case 229:                       // 'sliding'\n      shift(229);                   // 'sliding'\n      break;\n    case 235:                       // 'strict'\n      shift(235);                   // 'strict'\n      break;\n    case 246:                       // 'tumbling'\n      shift(246);                   // 'tumbling'\n      break;\n    case 247:                       // 'type'\n      shift(247);                   // 'type'\n      break;\n    case 252:                       // 'updating'\n      shift(252);                   // 'updating'\n      break;\n    case 256:                       // 'value'\n      shift(256);                   // 'value'\n      break;\n    case 257:                       // 'variable'\n      shift(257);                   // 'variable'\n      break;\n    case 258:                       // 'version'\n      shift(258);                   // 'version'\n      break;\n    case 262:                       // 'while'\n      shift(262);                   // 'while'\n      break;\n    case 92:                        // 'constraint'\n      shift(92);                    // 'constraint'\n      break;\n    case 171:                       // 'loop'\n      shift(171);                   // 'loop'\n      break;\n    default:\n      shift(216);                   // 'returning'\n    }\n    eventHandler.endNonterminal(\"FunctionName\", e0);\n  }\n\n  function parse_NCName()\n  {\n    eventHandler.startNonterminal(\"NCName\", e0);\n    switch (l1)\n    {\n    case 26:                        // NCName^Token\n      shift(26);                    // NCName^Token\n      break;\n    case 65:                        // 'after'\n      shift(65);                    // 'after'\n      break;\n    case 70:                        // 'and'\n      shift(70);                    // 'and'\n      break;\n    case 74:                        // 'as'\n      shift(74);                    // 'as'\n      break;\n    case 75:                        // 'ascending'\n      shift(75);                    // 'ascending'\n      break;\n    case 79:                        // 'before'\n      shift(79);                    // 'before'\n      break;\n    case 83:                        // 'case'\n      shift(83);                    // 'case'\n      break;\n    case 84:                        // 'cast'\n      shift(84);                    // 'cast'\n      break;\n    case 85:                        // 'castable'\n      shift(85);                    // 'castable'\n      break;\n    case 89:                        // 'collation'\n      shift(89);                    // 'collation'\n      break;\n    case 100:                       // 'count'\n      shift(100);                   // 'count'\n      break;\n    case 104:                       // 'default'\n      shift(104);                   // 'default'\n      break;\n    case 108:                       // 'descending'\n      shift(108);                   // 'descending'\n      break;\n    case 113:                       // 'div'\n      shift(113);                   // 'div'\n      break;\n    case 117:                       // 'else'\n      shift(117);                   // 'else'\n      break;\n    case 118:                       // 'empty'\n      shift(118);                   // 'empty'\n      break;\n    case 121:                       // 'end'\n      shift(121);                   // 'end'\n      break;\n    case 123:                       // 'eq'\n      shift(123);                   // 'eq'\n      break;\n    case 126:                       // 'except'\n      shift(126);                   // 'except'\n      break;\n    case 132:                       // 'for'\n      shift(132);                   // 'for'\n      break;\n    case 141:                       // 'ge'\n      shift(141);                   // 'ge'\n      break;\n    case 143:                       // 'group'\n      shift(143);                   // 'group'\n      break;\n    case 145:                       // 'gt'\n      shift(145);                   // 'gt'\n      break;\n    case 146:                       // 'idiv'\n      shift(146);                   // 'idiv'\n      break;\n    case 155:                       // 'instance'\n      shift(155);                   // 'instance'\n      break;\n    case 157:                       // 'intersect'\n      shift(157);                   // 'intersect'\n      break;\n    case 158:                       // 'into'\n      shift(158);                   // 'into'\n      break;\n    case 159:                       // 'is'\n      shift(159);                   // 'is'\n      break;\n    case 167:                       // 'le'\n      shift(167);                   // 'le'\n      break;\n    case 169:                       // 'let'\n      shift(169);                   // 'let'\n      break;\n    case 173:                       // 'lt'\n      shift(173);                   // 'lt'\n      break;\n    case 175:                       // 'mod'\n      shift(175);                   // 'mod'\n      break;\n    case 176:                       // 'modify'\n      shift(176);                   // 'modify'\n      break;\n    case 181:                       // 'ne'\n      shift(181);                   // 'ne'\n      break;\n    case 193:                       // 'only'\n      shift(193);                   // 'only'\n      break;\n    case 195:                       // 'or'\n      shift(195);                   // 'or'\n      break;\n    case 196:                       // 'order'\n      shift(196);                   // 'order'\n      break;\n    case 215:                       // 'return'\n      shift(215);                   // 'return'\n      break;\n    case 219:                       // 'satisfies'\n      shift(219);                   // 'satisfies'\n      break;\n    case 231:                       // 'stable'\n      shift(231);                   // 'stable'\n      break;\n    case 232:                       // 'start'\n      shift(232);                   // 'start'\n      break;\n    case 243:                       // 'to'\n      shift(243);                   // 'to'\n      break;\n    case 244:                       // 'treat'\n      shift(244);                   // 'treat'\n      break;\n    case 249:                       // 'union'\n      shift(249);                   // 'union'\n      break;\n    case 261:                       // 'where'\n      shift(261);                   // 'where'\n      break;\n    case 265:                       // 'with'\n      shift(265);                   // 'with'\n      break;\n    case 68:                        // 'ancestor'\n      shift(68);                    // 'ancestor'\n      break;\n    case 69:                        // 'ancestor-or-self'\n      shift(69);                    // 'ancestor-or-self'\n      break;\n    case 77:                        // 'attribute'\n      shift(77);                    // 'attribute'\n      break;\n    case 88:                        // 'child'\n      shift(88);                    // 'child'\n      break;\n    case 91:                        // 'comment'\n      shift(91);                    // 'comment'\n      break;\n    case 98:                        // 'copy'\n      shift(98);                    // 'copy'\n      break;\n    case 103:                       // 'declare'\n      shift(103);                   // 'declare'\n      break;\n    case 105:                       // 'delete'\n      shift(105);                   // 'delete'\n      break;\n    case 106:                       // 'descendant'\n      shift(106);                   // 'descendant'\n      break;\n    case 107:                       // 'descendant-or-self'\n      shift(107);                   // 'descendant-or-self'\n      break;\n    case 114:                       // 'document'\n      shift(114);                   // 'document'\n      break;\n    case 115:                       // 'document-node'\n      shift(115);                   // 'document-node'\n      break;\n    case 116:                       // 'element'\n      shift(116);                   // 'element'\n      break;\n    case 119:                       // 'empty-sequence'\n      shift(119);                   // 'empty-sequence'\n      break;\n    case 124:                       // 'every'\n      shift(124);                   // 'every'\n      break;\n    case 129:                       // 'first'\n      shift(129);                   // 'first'\n      break;\n    case 130:                       // 'following'\n      shift(130);                   // 'following'\n      break;\n    case 131:                       // 'following-sibling'\n      shift(131);                   // 'following-sibling'\n      break;\n    case 140:                       // 'function'\n      shift(140);                   // 'function'\n      break;\n    case 147:                       // 'if'\n      shift(147);                   // 'if'\n      break;\n    case 148:                       // 'import'\n      shift(148);                   // 'import'\n      break;\n    case 154:                       // 'insert'\n      shift(154);                   // 'insert'\n      break;\n    case 160:                       // 'item'\n      shift(160);                   // 'item'\n      break;\n    case 165:                       // 'last'\n      shift(165);                   // 'last'\n      break;\n    case 177:                       // 'module'\n      shift(177);                   // 'module'\n      break;\n    case 179:                       // 'namespace'\n      shift(179);                   // 'namespace'\n      break;\n    case 180:                       // 'namespace-node'\n      shift(180);                   // 'namespace-node'\n      break;\n    case 186:                       // 'node'\n      shift(186);                   // 'node'\n      break;\n    case 197:                       // 'ordered'\n      shift(197);                   // 'ordered'\n      break;\n    case 201:                       // 'parent'\n      shift(201);                   // 'parent'\n      break;\n    case 207:                       // 'preceding'\n      shift(207);                   // 'preceding'\n      break;\n    case 208:                       // 'preceding-sibling'\n      shift(208);                   // 'preceding-sibling'\n      break;\n    case 211:                       // 'processing-instruction'\n      shift(211);                   // 'processing-instruction'\n      break;\n    case 213:                       // 'rename'\n      shift(213);                   // 'rename'\n      break;\n    case 214:                       // 'replace'\n      shift(214);                   // 'replace'\n      break;\n    case 221:                       // 'schema-attribute'\n      shift(221);                   // 'schema-attribute'\n      break;\n    case 222:                       // 'schema-element'\n      shift(222);                   // 'schema-element'\n      break;\n    case 224:                       // 'self'\n      shift(224);                   // 'self'\n      break;\n    case 230:                       // 'some'\n      shift(230);                   // 'some'\n      break;\n    case 238:                       // 'switch'\n      shift(238);                   // 'switch'\n      break;\n    case 239:                       // 'text'\n      shift(239);                   // 'text'\n      break;\n    case 245:                       // 'try'\n      shift(245);                   // 'try'\n      break;\n    case 248:                       // 'typeswitch'\n      shift(248);                   // 'typeswitch'\n      break;\n    case 251:                       // 'unordered'\n      shift(251);                   // 'unordered'\n      break;\n    case 255:                       // 'validate'\n      shift(255);                   // 'validate'\n      break;\n    case 257:                       // 'variable'\n      shift(257);                   // 'variable'\n      break;\n    case 269:                       // 'xquery'\n      shift(269);                   // 'xquery'\n      break;\n    case 67:                        // 'allowing'\n      shift(67);                    // 'allowing'\n      break;\n    case 76:                        // 'at'\n      shift(76);                    // 'at'\n      break;\n    case 78:                        // 'base-uri'\n      shift(78);                    // 'base-uri'\n      break;\n    case 80:                        // 'boundary-space'\n      shift(80);                    // 'boundary-space'\n      break;\n    case 81:                        // 'break'\n      shift(81);                    // 'break'\n      break;\n    case 86:                        // 'catch'\n      shift(86);                    // 'catch'\n      break;\n    case 93:                        // 'construction'\n      shift(93);                    // 'construction'\n      break;\n    case 96:                        // 'context'\n      shift(96);                    // 'context'\n      break;\n    case 97:                        // 'continue'\n      shift(97);                    // 'continue'\n      break;\n    case 99:                        // 'copy-namespaces'\n      shift(99);                    // 'copy-namespaces'\n      break;\n    case 101:                       // 'decimal-format'\n      shift(101);                   // 'decimal-format'\n      break;\n    case 120:                       // 'encoding'\n      shift(120);                   // 'encoding'\n      break;\n    case 127:                       // 'exit'\n      shift(127);                   // 'exit'\n      break;\n    case 128:                       // 'external'\n      shift(128);                   // 'external'\n      break;\n    case 136:                       // 'ft-option'\n      shift(136);                   // 'ft-option'\n      break;\n    case 149:                       // 'in'\n      shift(149);                   // 'in'\n      break;\n    case 150:                       // 'index'\n      shift(150);                   // 'index'\n      break;\n    case 156:                       // 'integrity'\n      shift(156);                   // 'integrity'\n      break;\n    case 166:                       // 'lax'\n      shift(166);                   // 'lax'\n      break;\n    case 187:                       // 'nodes'\n      shift(187);                   // 'nodes'\n      break;\n    case 194:                       // 'option'\n      shift(194);                   // 'option'\n      break;\n    case 198:                       // 'ordering'\n      shift(198);                   // 'ordering'\n      break;\n    case 217:                       // 'revalidation'\n      shift(217);                   // 'revalidation'\n      break;\n    case 220:                       // 'schema'\n      shift(220);                   // 'schema'\n      break;\n    case 223:                       // 'score'\n      shift(223);                   // 'score'\n      break;\n    case 229:                       // 'sliding'\n      shift(229);                   // 'sliding'\n      break;\n    case 235:                       // 'strict'\n      shift(235);                   // 'strict'\n      break;\n    case 246:                       // 'tumbling'\n      shift(246);                   // 'tumbling'\n      break;\n    case 247:                       // 'type'\n      shift(247);                   // 'type'\n      break;\n    case 252:                       // 'updating'\n      shift(252);                   // 'updating'\n      break;\n    case 256:                       // 'value'\n      shift(256);                   // 'value'\n      break;\n    case 258:                       // 'version'\n      shift(258);                   // 'version'\n      break;\n    case 262:                       // 'while'\n      shift(262);                   // 'while'\n      break;\n    case 92:                        // 'constraint'\n      shift(92);                    // 'constraint'\n      break;\n    case 171:                       // 'loop'\n      shift(171);                   // 'loop'\n      break;\n    default:\n      shift(216);                   // 'returning'\n    }\n    eventHandler.endNonterminal(\"NCName\", e0);\n  }\n\n  function shift(t)\n  {\n    if (l1 == t)\n    {\n      whitespace();\n      eventHandler.terminal(XQueryTokenizer.TOKEN[l1], b1, e1 > size ? size : e1);\n      b0 = b1; e0 = e1; l1 = 0;\n    }\n    else\n    {\n      error(b1, e1, 0, l1, t);\n    }\n  }\n\n  function whitespace()\n  {\n    if (e0 != b1)\n    {\n      b0 = e0;\n      e0 = b1;\n      eventHandler.whitespace(b0, e0);\n    }\n  }\n\n  function matchW(set)\n  {\n    var code;\n    for (;;)\n    {\n      code = match(set);\n      if (code != 28)               // S^WS\n      {\n        break;\n      }\n    }\n    return code;\n  }\n\n  function lookahead1W(set)\n  {\n    if (l1 == 0)\n    {\n      l1 = matchW(set);\n      b1 = begin;\n      e1 = end;\n    }\n  }\n\n  function lookahead1(set)\n  {\n    if (l1 == 0)\n    {\n      l1 = match(set);\n      b1 = begin;\n      e1 = end;\n    }\n  }\n\n  function error(b, e, s, l, t)\n  {\n    throw new self.ParseException(b, e, s, l, t);\n  }\n\n  var lk, b0, e0;\n  var l1, b1, e1;\n  var eventHandler;\n\n  var input;\n  var size;\n  var begin;\n  var end;\n\n  function match(tokenSetId)\n  {\n    var nonbmp = false;\n    begin = end;\n    var current = end;\n    var result = XQueryTokenizer.INITIAL[tokenSetId];\n    var state = 0;\n\n    for (var code = result & 4095; code != 0; )\n    {\n      var charclass;\n      var c0 = current < size ? input.charCodeAt(current) : 0;\n      ++current;\n      if (c0 < 0x80)\n      {\n        charclass = XQueryTokenizer.MAP0[c0];\n      }\n      else if (c0 < 0xd800)\n      {\n        var c1 = c0 >> 4;\n        charclass = XQueryTokenizer.MAP1[(c0 & 15) + XQueryTokenizer.MAP1[(c1 & 31) + XQueryTokenizer.MAP1[c1 >> 5]]];\n      }\n      else\n      {\n        if (c0 < 0xdc00)\n        {\n          var c1 = current < size ? input.charCodeAt(current) : 0;\n          if (c1 >= 0xdc00 && c1 < 0xe000)\n          {\n            ++current;\n            c0 = ((c0 & 0x3ff) << 10) + (c1 & 0x3ff) + 0x10000;\n            nonbmp = true;\n          }\n        }\n        var lo = 0, hi = 5;\n        for (var m = 3; ; m = (hi + lo) >> 1)\n        {\n          if (XQueryTokenizer.MAP2[m] > c0) hi = m - 1;\n          else if (XQueryTokenizer.MAP2[6 + m] < c0) lo = m + 1;\n          else {charclass = XQueryTokenizer.MAP2[12 + m]; break;}\n          if (lo > hi) {charclass = 0; break;}\n        }\n      }\n\n      state = code;\n      var i0 = (charclass << 12) + code - 1;\n      code = XQueryTokenizer.TRANSITION[(i0 & 15) + XQueryTokenizer.TRANSITION[i0 >> 4]];\n\n      if (code > 4095)\n      {\n        result = code;\n        code &= 4095;\n        end = current;\n      }\n    }\n\n    result >>= 12;\n    if (result == 0)\n    {\n      end = current - 1;\n      var c1 = end < size ? input.charCodeAt(end) : 0;\n      if (c1 >= 0xdc00 && c1 < 0xe000) --end;\n      return error(begin, end, state, -1, -1);\n    }\n\n    if (nonbmp)\n    {\n      for (var i = result >> 9; i > 0; --i)\n      {\n        --end;\n        var c1 = end < size ? input.charCodeAt(end) : 0;\n        if (c1 >= 0xdc00 && c1 < 0xe000) --end;\n      }\n    }\n    else\n    {\n      end -= result >> 9;\n    }\n\n    return (result & 511) - 1;\n  }\n}\n\nXQueryTokenizer.getTokenSet = function(tokenSetId)\n{\n  var set = [];\n  var s = tokenSetId < 0 ? - tokenSetId : INITIAL[tokenSetId] & 4095;\n  for (var i = 0; i < 276; i += 32)\n  {\n    var j = i;\n    var i0 = (i >> 5) * 2062 + s - 1;\n    var i1 = i0 >> 2;\n    var i2 = i1 >> 2;\n    var f = XQueryTokenizer.EXPECTED[(i0 & 3) + XQueryTokenizer.EXPECTED[(i1 & 3) + XQueryTokenizer.EXPECTED[(i2 & 3) + XQueryTokenizer.EXPECTED[i2 >> 2]]]];\n    for ( ; f != 0; f >>>= 1, ++j)\n    {\n      if ((f & 1) != 0)\n      {\n        set.push(XQueryTokenizer.TOKEN[j]);\n      }\n    }\n  }\n  return set;\n};\n\nXQueryTokenizer.MAP0 =\n[\n  /*   0 */ 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5,\n  /*  36 */ 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 20, 21, 22, 23, 24,\n  /*  64 */ 25, 26, 27, 28, 29, 30, 27, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 31, 31, 33, 31, 31, 31, 31, 31, 31,\n  /*  91 */ 34, 35, 36, 35, 31, 35, 37, 38, 39, 40, 41, 42, 43, 44, 45, 31, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,\n  /* 118 */ 57, 58, 59, 60, 31, 61, 62, 63, 64, 35\n];\n\nXQueryTokenizer.MAP1 =\n[\n  /*   0 */ 108, 124, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 156, 181, 181, 181, 181,\n  /*  21 */ 181, 214, 215, 213, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214,\n  /*  42 */ 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214,\n  /*  63 */ 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214,\n  /*  84 */ 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214,\n  /* 105 */ 214, 214, 214, 247, 261, 277, 293, 309, 347, 363, 379, 416, 416, 416, 408, 331, 323, 331, 323, 331, 331,\n  /* 126 */ 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 433, 433, 433, 433, 433, 433, 433,\n  /* 147 */ 316, 331, 331, 331, 331, 331, 331, 331, 331, 394, 416, 416, 417, 415, 416, 416, 331, 331, 331, 331, 331,\n  /* 168 */ 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 416, 416, 416, 416, 416, 416, 416, 416,\n  /* 189 */ 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416,\n  /* 210 */ 416, 416, 416, 330, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331,\n  /* 231 */ 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 416, 66, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 256 */ 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,\n  /* 290 */ 15, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 27, 31,\n  /* 317 */ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 35, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,\n  /* 344 */ 31, 31, 31, 31, 32, 31, 31, 33, 31, 31, 31, 31, 31, 31, 34, 35, 36, 35, 31, 35, 37, 38, 39, 40, 41, 42, 43,\n  /* 371 */ 44, 45, 31, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 31, 61, 62, 63, 64, 35, 35, 35, 35,\n  /* 398 */ 35, 35, 35, 35, 35, 35, 35, 35, 31, 31, 35, 35, 35, 35, 35, 35, 35, 65, 35, 35, 35, 35, 35, 35, 35, 35, 35,\n  /* 425 */ 35, 35, 35, 35, 35, 35, 35, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65\n];\n\nXQueryTokenizer.MAP2 =\n[\n  /*  0 */ 57344, 63744, 64976, 65008, 65536, 983040, 63743, 64975, 65007, 65533, 983039, 1114111, 35, 31, 35, 31, 31,\n  /* 17 */ 35\n];\n\nXQueryTokenizer.INITIAL =\n[\n  /*  0 */ 1, 2, 36867, 45060, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15\n];\n\nXQueryTokenizer.TRANSITION =\n[\n  /*     0 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*    15 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*    30 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*    45 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*    60 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*    75 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*    90 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   105 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   120 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   135 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   150 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   165 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   180 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   195 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   210 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   225 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   240 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   255 */ 17590, 22908, 18836, 17152, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189,\n  /*   270 */ 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 17365, 21880, 18649, 18665, 19006, 17265, 22033,\n  /*   285 */ 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 17470, 17497, 17520, 17251,\n  /*   300 */ 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 18157, 21940,\n  /*   315 */ 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531,\n  /*   330 */ 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 17848, 17880, 18731, 17918, 36551,\n  /*   345 */ 17292, 17934, 17979, 18727, 18023, 36545, 18621, 18039, 18056, 18072, 18117, 18143, 18173, 18052, 18209,\n  /*   360 */ 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816,\n  /*   375 */ 32961, 17687, 18805, 18421, 18437, 18101, 17393, 18489, 18505, 18535, 17590, 17590, 17590, 17590, 17590,\n  /*   390 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   405 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   420 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   435 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   450 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   465 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   480 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   495 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   510 */ 17590, 17590, 18579, 21711, 17152, 19008, 19233, 20367, 19008, 28684, 30763, 36437, 17330, 17349, 18921,\n  /*   525 */ 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 17365, 21880, 18649, 18665, 19006, 17265,\n  /*   540 */ 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 17470, 17497, 17520,\n  /*   555 */ 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 18157,\n  /*   570 */ 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223,\n  /*   585 */ 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 17848, 17880, 18731, 17918,\n  /*   600 */ 36551, 17292, 17934, 17979, 18727, 18023, 36545, 18621, 18039, 18056, 18072, 18117, 18143, 18173, 18052,\n  /*   615 */ 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392,\n  /*   630 */ 17816, 32961, 17687, 18805, 18421, 18437, 18101, 17393, 18489, 18505, 18535, 17590, 17590, 17590, 17590,\n  /*   645 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   660 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   675 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   690 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   705 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   720 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   735 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   750 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   765 */ 17590, 17590, 17590, 20116, 18836, 18637, 19008, 19233, 21267, 19008, 17173, 30763, 36437, 17330, 17349,\n  /*   780 */ 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006,\n  /*   795 */ 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497,\n  /*   810 */ 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418,\n  /*   825 */ 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473,\n  /*   840 */ 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731,\n  /*   855 */ 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706,\n  /*   870 */ 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642,\n  /*   885 */ 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590,\n  /*   900 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   915 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   930 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   945 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   960 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   975 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*   990 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1005 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1020 */ 17590, 17590, 17590, 17590, 18763, 18778, 18794, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330,\n  /*  1035 */ 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665,\n  /*  1050 */ 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952,\n  /*  1065 */ 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258,\n  /*  1080 */ 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617,\n  /*  1095 */ 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864,\n  /*  1110 */ 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143,\n  /*  1125 */ 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163,\n  /*  1140 */ 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590,\n  /*  1155 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1170 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1185 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1200 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1215 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1230 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1245 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1260 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1275 */ 17590, 17590, 17590, 17590, 17590, 18821, 22923, 18906, 19008, 19233, 17431, 19008, 17173, 30763, 36437,\n  /*  1290 */ 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18937, 21880, 18649,\n  /*  1305 */ 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 19054, 17311, 18658, 18999, 19008, 17447,\n  /*  1320 */ 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 18953, 21887, 17504, 17527,\n  /*  1335 */ 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946,\n  /*  1350 */ 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156,\n  /*  1365 */ 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117,\n  /*  1380 */ 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796,\n  /*  1395 */ 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590,\n  /*  1410 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1425 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1440 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1455 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1470 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1485 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1500 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1515 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1530 */ 17590, 17590, 17590, 17590, 17590, 17590, 21843, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763,\n  /*  1545 */ 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880,\n  /*  1560 */ 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008,\n  /*  1575 */ 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504,\n  /*  1590 */ 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737,\n  /*  1605 */ 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481,\n  /*  1620 */ 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072,\n  /*  1635 */ 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232,\n  /*  1650 */ 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535,\n  /*  1665 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1680 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1695 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1710 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1725 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1740 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1755 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1770 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1785 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21696, 18836, 18987, 19008, 19233, 20367, 19008, 17173,\n  /*  1800 */ 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452,\n  /*  1815 */ 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999,\n  /*  1830 */ 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887,\n  /*  1845 */ 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730,\n  /*  1860 */ 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620,\n  /*  1875 */ 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056,\n  /*  1890 */ 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403,\n  /*  1905 */ 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505,\n  /*  1920 */ 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1935 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1950 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1965 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1980 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  1995 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2010 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2025 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2040 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22429, 20131, 18720, 19008, 19233, 20367, 19008,\n  /*  2055 */ 17173, 23559, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 18087, 17308, 17327, 17346, 18918,\n  /*  2070 */ 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 21242, 19111, 17311, 18658,\n  /*  2085 */ 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585,\n  /*  2100 */ 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176,\n  /*  2115 */ 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590,\n  /*  2130 */ 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039,\n  /*  2145 */ 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807,\n  /*  2160 */ 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747,\n  /*  2175 */ 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2190 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2205 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2220 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2235 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2250 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2265 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2280 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2295 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 19024, 18836, 18609, 19008, 19233, 20367,\n  /*  2310 */ 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346,\n  /*  2325 */ 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311,\n  /*  2340 */ 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559,\n  /*  2355 */ 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703,\n  /*  2370 */ 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832,\n  /*  2385 */ 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621,\n  /*  2400 */ 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376,\n  /*  2415 */ 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393,\n  /*  2430 */ 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2445 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2460 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2475 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2490 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2505 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2520 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2535 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2550 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 19081, 22444, 18987, 19008, 19233,\n  /*  2565 */ 20367, 19008, 19065, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327,\n  /*  2580 */ 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873,\n  /*  2595 */ 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543,\n  /*  2610 */ 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190,\n  /*  2625 */ 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753,\n  /*  2640 */ 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405,\n  /*  2655 */ 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312,\n  /*  2670 */ 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519,\n  /*  2685 */ 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2700 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2715 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2730 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2745 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2760 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2775 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2790 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2805 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21992, 22007, 18987, 19008,\n  /*  2820 */ 19233, 20367, 19008, 18690, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308,\n  /*  2835 */ 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127,\n  /*  2850 */ 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326,\n  /*  2865 */ 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661,\n  /*  2880 */ 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675,\n  /*  2895 */ 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681,\n  /*  2910 */ 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296,\n  /*  2925 */ 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437,\n  /*  2940 */ 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2955 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2970 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  2985 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3000 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3015 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3030 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3045 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3060 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22414, 18836, 18987,\n  /*  3075 */ 19008, 19233, 30651, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 19138,\n  /*  3090 */ 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192,\n  /*  3105 */ 18127, 19280, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714,\n  /*  3120 */ 18326, 17543, 17559, 19172, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633,\n  /*  3135 */ 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892,\n  /*  3150 */ 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727,\n  /*  3165 */ 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963,\n  /*  3180 */ 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421,\n  /*  3195 */ 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3210 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3225 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3240 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3255 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3270 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3285 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3300 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3315 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21783, 18836,\n  /*  3330 */ 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355,\n  /*  3345 */ 19218, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535,\n  /*  3360 */ 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682,\n  /*  3375 */ 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217,\n  /*  3390 */ 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860,\n  /*  3405 */ 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979,\n  /*  3420 */ 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266,\n  /*  3435 */ 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805,\n  /*  3450 */ 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3465 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3480 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3495 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3510 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3525 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3540 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3555 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3570 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21651,\n  /*  3585 */ 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281,\n  /*  3600 */ 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421,\n  /*  3615 */ 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782,\n  /*  3630 */ 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467,\n  /*  3645 */ 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152,\n  /*  3660 */ 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934,\n  /*  3675 */ 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239,\n  /*  3690 */ 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645,\n  /*  3705 */ 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3720 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3735 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3750 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3765 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3780 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3795 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3810 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3825 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3840 */ 19249, 19265, 19307, 18888, 27857, 30536, 24401, 31444, 23357, 18888, 19351, 18888, 18890, 27211, 19370,\n  /*  3855 */ 27211, 27211, 19392, 24401, 31911, 24401, 24401, 25467, 18888, 18888, 18888, 18888, 18888, 25783, 27211,\n  /*  3870 */ 27211, 27211, 27211, 28537, 19440, 24401, 24401, 24401, 24401, 24036, 17994, 24060, 18888, 18888, 18888,\n  /*  3885 */ 18890, 19468, 27211, 27211, 27211, 27211, 19484, 35367, 19520, 24401, 24401, 24401, 19628, 18888, 29855,\n  /*  3900 */ 18888, 18888, 23086, 27211, 19538, 27211, 27211, 30756, 24012, 24401, 19560, 24401, 24401, 26750, 18888,\n  /*  3915 */ 18888, 19327, 27855, 27211, 27211, 19580, 17590, 24017, 24401, 24401, 19600, 25665, 18888, 18888, 28518,\n  /*  3930 */ 27211, 27212, 24016, 19620, 19868, 28435, 25722, 18889, 19644, 27211, 32888, 35852, 19868, 31018, 19694,\n  /*  3945 */ 19376, 19717, 22215, 19735, 22098, 19751, 35203, 19776, 19797, 19817, 19840, 25783, 31738, 24135, 19701,\n  /*  3960 */ 19856, 31015, 23516, 31008, 28311, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3975 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  3990 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4005 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4020 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4035 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4050 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4065 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4080 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4095 */ 17590, 21768, 18836, 19307, 18888, 27857, 27904, 24401, 29183, 28015, 18888, 18888, 18888, 18890, 27211,\n  /*  4110 */ 27211, 27211, 27211, 19888, 24401, 24401, 24401, 24401, 22953, 18888, 18888, 18888, 18888, 18888, 25783,\n  /*  4125 */ 27211, 27211, 27211, 27211, 28537, 19440, 24401, 24401, 24401, 24401, 24036, 18881, 18888, 18888, 18888,\n  /*  4140 */ 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888,\n  /*  4155 */ 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750,\n  /*  4170 */ 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888,\n  /*  4185 */ 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018,\n  /*  4200 */ 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837,\n  /*  4215 */ 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590,\n  /*  4230 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4245 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4260 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4275 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4290 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4305 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4320 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4335 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4350 */ 17590, 17590, 22399, 18836, 19918, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921,\n  /*  4365 */ 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265,\n  /*  4380 */ 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520,\n  /*  4395 */ 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915,\n  /*  4410 */ 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223,\n  /*  4425 */ 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918,\n  /*  4440 */ 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052,\n  /*  4455 */ 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392,\n  /*  4470 */ 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590,\n  /*  4485 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4500 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4515 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4530 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4545 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4560 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4575 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4590 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4605 */ 17590, 17590, 17590, 21666, 18836, 19307, 18888, 27857, 27525, 24401, 29183, 21467, 18888, 18888, 18888,\n  /*  4620 */ 18890, 27211, 27211, 27211, 27211, 19946, 24401, 24401, 24401, 24401, 32382, 18888, 18888, 18888, 18888,\n  /*  4635 */ 18888, 25783, 27211, 27211, 27211, 27211, 28537, 19998, 24401, 24401, 24401, 24401, 31500, 18467, 18888,\n  /*  4650 */ 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 20021, 24401, 24401, 24401, 24401, 24401,\n  /*  4665 */ 34271, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 32926, 29908, 24401, 24401, 24401,\n  /*  4680 */ 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 20050, 22968, 24401, 24401, 24401, 18887,\n  /*  4695 */ 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889,\n  /*  4710 */ 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783,\n  /*  4725 */ 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590,\n  /*  4740 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4755 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4770 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4785 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4800 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4815 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4830 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4845 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  4860 */ 17590, 17590, 17590, 17590, 20101, 19039, 20191, 20412, 20903, 17569, 20309, 20872, 25633, 20623, 20505,\n  /*  4875 */ 20218, 20242, 17189, 17208, 17281, 20355, 20265, 20306, 20328, 20383, 22490, 20796, 20619, 21354, 20654,\n  /*  4890 */ 20410, 20956, 21232, 20765, 17421, 20535, 17192, 18127, 22459, 20312, 25531, 22470, 20309, 20428, 18964,\n  /*  4905 */ 20466, 20491, 21342, 21070, 20521, 20682, 17714, 18326, 17543, 17559, 17585, 22497, 20559, 19504, 20279,\n  /*  4920 */ 20575, 20290, 20475, 20604, 20639, 20226, 20670, 17661, 21190, 17703, 21176, 17730, 19494, 20698, 20711,\n  /*  4935 */ 22480, 21046, 21116, 18971, 21130, 20727, 20755, 17675, 17753, 17832, 17590, 25518, 20394, 20781, 20831,\n  /*  4950 */ 20202, 20847, 21401, 17292, 17934, 17979, 18549, 20863, 20588, 25542, 20888, 20919, 18072, 18117, 20935,\n  /*  4965 */ 20972, 21032, 21062, 21086, 18239, 21102, 18563, 21146, 21162, 21206, 18351, 20949, 20902, 18340, 21222,\n  /*  4980 */ 21258, 21283, 18360, 20249, 17405, 21295, 21311, 21327, 20739, 20343, 21370, 21386, 21417, 17590, 17590,\n  /*  4995 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5010 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5025 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5040 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5055 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5070 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5085 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5100 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5115 */ 17590, 17590, 17590, 17590, 17590, 21977, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437,\n  /*  5130 */ 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 21452, 21880, 18649,\n  /*  5145 */ 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 21504,\n  /*  5160 */ 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527,\n  /*  5175 */ 17258, 36418, 36501, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 28674, 21946,\n  /*  5190 */ 17617, 36473, 18223, 17237, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 21575, 21534, 17481, 19156,\n  /*  5205 */ 17864, 18731, 17918, 36551, 17292, 17934, 21560, 30628, 18681, 18405, 18621, 18039, 18056, 18072, 18117,\n  /*  5220 */ 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796,\n  /*  5235 */ 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590,\n  /*  5250 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5265 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5280 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5295 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5310 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5325 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5340 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5355 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5370 */ 17590, 17590, 17590, 17590, 17590, 17590, 21798, 18836, 21612, 19008, 19233, 20367, 19008, 17173, 30763,\n  /*  5385 */ 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880,\n  /*  5400 */ 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008,\n  /*  5415 */ 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504,\n  /*  5430 */ 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737,\n  /*  5445 */ 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481,\n  /*  5460 */ 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072,\n  /*  5475 */ 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232,\n  /*  5490 */ 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535,\n  /*  5505 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5520 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5535 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5550 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5565 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5580 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5595 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5610 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5625 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21636, 18836, 18987, 19008, 19233, 17902, 19008, 17173,\n  /*  5640 */ 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452,\n  /*  5655 */ 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999,\n  /*  5670 */ 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887,\n  /*  5685 */ 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730,\n  /*  5700 */ 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620,\n  /*  5715 */ 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056,\n  /*  5730 */ 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403,\n  /*  5745 */ 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505,\n  /*  5760 */ 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5775 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5790 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5805 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5820 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5835 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5850 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5865 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  5880 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21753, 19096, 21903, 19008, 19233, 20367, 19008,\n  /*  5895 */ 19291, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918,\n  /*  5910 */ 17379, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658,\n  /*  5925 */ 18999, 19008, 17447, 21931, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585,\n  /*  5940 */ 21887, 17504, 17527, 17258, 36418, 18280, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176,\n  /*  5955 */ 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590,\n  /*  5970 */ 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039,\n  /*  5985 */ 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807,\n  /*  6000 */ 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747,\n  /*  6015 */ 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6030 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6045 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6060 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6075 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6090 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6105 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6120 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6135 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21962, 18594, 18987, 19008, 19233, 22043,\n  /*  6150 */ 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346,\n  /*  6165 */ 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311,\n  /*  6180 */ 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559,\n  /*  6195 */ 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703,\n  /*  6210 */ 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832,\n  /*  6225 */ 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621,\n  /*  6240 */ 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376,\n  /*  6255 */ 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393,\n  /*  6270 */ 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6285 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6300 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6315 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6330 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6345 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6360 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6375 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6390 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21681, 21858, 18987, 19008, 19233,\n  /*  6405 */ 20367, 19008, 21544, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327,\n  /*  6420 */ 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873,\n  /*  6435 */ 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543,\n  /*  6450 */ 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190,\n  /*  6465 */ 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753,\n  /*  6480 */ 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405,\n  /*  6495 */ 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312,\n  /*  6510 */ 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519,\n  /*  6525 */ 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6540 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6555 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6570 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6585 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6600 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6615 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6630 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6645 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888,\n  /*  6660 */ 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401,\n  /*  6675 */ 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072,\n  /*  6690 */ 22164, 24401, 24401, 24401, 24401, 31500, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211,\n  /*  6705 */ 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 32319, 18888, 18888, 18888, 18888, 23086, 27211,\n  /*  6720 */ 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211,\n  /*  6735 */ 27211, 27211, 22187, 22968, 24401, 24401, 24401, 22231, 18888, 18888, 27211, 27211, 35779, 20080, 24402,\n  /*  6750 */ 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447,\n  /*  6765 */ 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008,\n  /*  6780 */ 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6795 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6810 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6825 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6840 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6855 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6870 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6885 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  6900 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059,\n  /*  6915 */ 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121,\n  /*  6930 */ 24401, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211,\n  /*  6945 */ 35072, 22164, 24401, 24401, 24401, 24401, 31500, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211,\n  /*  6960 */ 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 18888, 18888, 18888, 18888, 23086,\n  /*  6975 */ 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855,\n  /*  6990 */ 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080,\n  /*  7005 */ 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406,\n  /*  7020 */ 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516,\n  /*  7035 */ 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7050 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7065 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7080 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7095 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7110 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7125 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7140 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7155 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836,\n  /*  7170 */ 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211,\n  /*  7185 */ 22121, 24401, 24401, 24401, 24401, 31678, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211,\n  /*  7200 */ 27211, 35072, 22164, 24401, 24401, 24401, 24401, 31500, 31693, 18888, 18888, 18888, 18888, 18890, 27211,\n  /*  7215 */ 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 18888, 18888, 18888, 18888,\n  /*  7230 */ 23086, 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888,\n  /*  7245 */ 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779,\n  /*  7260 */ 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833,\n  /*  7275 */ 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015,\n  /*  7290 */ 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7305 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7320 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7335 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7350 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7365 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7380 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7395 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7410 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339,\n  /*  7425 */ 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211,\n  /*  7440 */ 27211, 22121, 24401, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211,\n  /*  7455 */ 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 33588, 31693, 18888, 18888, 18888, 18888, 18890,\n  /*  7470 */ 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 18888, 18888, 18888,\n  /*  7485 */ 18888, 23086, 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888,\n  /*  7500 */ 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211,\n  /*  7515 */ 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211,\n  /*  7530 */ 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760,\n  /*  7545 */ 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7560 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7575 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7590 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7605 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7620 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7635 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7650 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7665 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7680 */ 22339, 18836, 22059, 18888, 27857, 35019, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211,\n  /*  7695 */ 27211, 27211, 22248, 24401, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 18888, 25783, 27211,\n  /*  7710 */ 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 31500, 31693, 18888, 18888, 18888, 18888,\n  /*  7725 */ 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 18888, 18888,\n  /*  7740 */ 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888,\n  /*  7755 */ 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211,\n  /*  7770 */ 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890,\n  /*  7785 */ 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782,\n  /*  7800 */ 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7815 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7830 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7845 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7860 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7875 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7890 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7905 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7920 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  7935 */ 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211,\n  /*  7950 */ 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 25783,\n  /*  7965 */ 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 31693, 18888, 18888, 18888,\n  /*  7980 */ 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888,\n  /*  7995 */ 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750,\n  /*  8010 */ 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888,\n  /*  8025 */ 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018,\n  /*  8040 */ 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837,\n  /*  8055 */ 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590,\n  /*  8070 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8085 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8100 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8115 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8130 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8145 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8160 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8175 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8190 */ 17590, 17590, 22324, 18836, 22059, 18888, 27857, 30501, 24401, 29183, 22087, 18888, 18888, 18888, 18890,\n  /*  8205 */ 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888,\n  /*  8220 */ 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 31693, 18888, 18888,\n  /*  8235 */ 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628,\n  /*  8250 */ 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401,\n  /*  8265 */ 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888,\n  /*  8280 */ 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868,\n  /*  8295 */ 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738,\n  /*  8310 */ 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590,\n  /*  8325 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8340 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8355 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8370 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8385 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8400 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8415 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8430 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8445 */ 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888,\n  /*  8460 */ 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888,\n  /*  8475 */ 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 31693, 18888,\n  /*  8490 */ 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401,\n  /*  8505 */ 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401,\n  /*  8520 */ 24401, 34365, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887,\n  /*  8535 */ 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889,\n  /*  8550 */ 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783,\n  /*  8565 */ 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590,\n  /*  8580 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8595 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8610 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8625 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8640 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8655 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8670 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8685 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8700 */ 17590, 17590, 17590, 17590, 22354, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 27086, 36437, 17330,\n  /*  8715 */ 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665,\n  /*  8730 */ 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952,\n  /*  8745 */ 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258,\n  /*  8760 */ 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617,\n  /*  8775 */ 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864,\n  /*  8790 */ 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 19930, 18039, 18056, 18072, 18117, 18143,\n  /*  8805 */ 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163,\n  /*  8820 */ 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590,\n  /*  8835 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8850 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8865 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8880 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8895 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8910 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8925 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8940 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  8955 */ 17590, 17590, 17590, 17590, 17590, 21828, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437,\n  /*  8970 */ 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649,\n  /*  8985 */ 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447,\n  /*  9000 */ 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527,\n  /*  9015 */ 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946,\n  /*  9030 */ 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156,\n  /*  9045 */ 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117,\n  /*  9060 */ 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796,\n  /*  9075 */ 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590,\n  /*  9090 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9105 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9120 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9135 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9150 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9165 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9180 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9195 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9210 */ 17590, 17590, 17590, 17590, 17590, 17590, 22309, 22513, 18987, 19008, 19233, 20367, 19008, 19122, 30763,\n  /*  9225 */ 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 22544, 21880,\n  /*  9240 */ 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008,\n  /*  9255 */ 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504,\n  /*  9270 */ 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737,\n  /*  9285 */ 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481,\n  /*  9300 */ 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072,\n  /*  9315 */ 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232,\n  /*  9330 */ 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535,\n  /*  9345 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9360 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9375 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9390 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9405 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9420 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9435 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9450 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9465 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22608, 18836, 22988, 23004, 27585, 23020, 23036, 23067,\n  /*  9480 */ 22087, 18888, 18888, 18888, 23083, 27211, 27211, 27211, 23102, 22121, 24401, 24401, 24401, 23122, 31386,\n  /*  9495 */ 26154, 19674, 18888, 28119, 28232, 19424, 23705, 27211, 27211, 23142, 23173, 23189, 23212, 24401, 24401,\n  /*  9510 */ 23246, 34427, 31693, 23262, 18888, 23290, 23308, 27783, 27620, 23327, 35263, 35107, 33383, 23346, 18193,\n  /*  9525 */ 23393, 32748, 23968, 24401, 23414, 35153, 23463, 18888, 33913, 23442, 23482, 27211, 27211, 23532, 23552,\n  /*  9540 */ 21431, 23575, 24401, 24401, 23604, 26095, 23635, 23657, 18888, 33482, 23685, 33251, 27211, 22187, 18851,\n  /*  9555 */ 23721, 35536, 24401, 18887, 23750, 32641, 27211, 23769, 23787, 20080, 33012, 24384, 25659, 18888, 18889,\n  /*  9570 */ 27211, 27211, 19719, 23889, 23803, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 28224,\n  /*  9585 */ 31826, 23823, 26917, 34978, 23850, 26493, 25782, 23878, 23914, 23516, 31008, 22105, 19419, 27963, 19659,\n  /*  9600 */ 29781, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9615 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9630 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9645 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9660 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9675 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9690 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9705 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9720 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22623, 18836, 22059, 18888, 27857, 34097, 24401,\n  /*  9735 */ 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401,\n  /*  9750 */ 30613, 18888, 18888, 18888, 18888, 28909, 25783, 27211, 27211, 27211, 34048, 23933, 22164, 24401, 24401,\n  /*  9765 */ 24401, 28409, 23949, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484,\n  /*  9780 */ 24401, 24401, 24401, 24401, 24401, 31181, 26583, 18888, 18888, 18888, 35585, 23984, 27211, 27211, 27211,\n  /*  9795 */ 24005, 22201, 24033, 24401, 24401, 24401, 24052, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187,\n  /*  9810 */ 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888,\n  /*  9825 */ 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828,\n  /*  9840 */ 31017, 27856, 31741, 26496, 24076, 24126, 24151, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963,\n  /*  9855 */ 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9870 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9885 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9900 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9915 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9930 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9945 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9960 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /*  9975 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22638, 18836, 22059, 19678, 27857, 24185,\n  /*  9990 */ 24401, 24201, 24217, 26592, 18888, 18888, 18890, 24252, 24268, 27211, 27211, 22121, 24287, 24303, 24401,\n  /* 10005 */ 24401, 30613, 19781, 35432, 36007, 32649, 18888, 25783, 24322, 28966, 23771, 27211, 35072, 22164, 24358,\n  /* 10020 */ 32106, 26829, 24400, 31500, 31693, 18888, 18888, 18888, 24801, 18890, 27211, 27211, 27211, 27211, 24418,\n  /* 10035 */ 19484, 24401, 24401, 24401, 24401, 20167, 31181, 18888, 18888, 18888, 27833, 23086, 27211, 27211, 33540,\n  /* 10050 */ 27211, 30756, 21431, 24401, 24401, 22972, 24401, 26095, 18888, 36131, 18888, 27855, 27211, 24440, 27211,\n  /* 10065 */ 22187, 22968, 24401, 24459, 24401, 31699, 28454, 18888, 34528, 34570, 35779, 24478, 24402, 24494, 25659,\n  /* 10080 */ 18888, 36228, 27211, 27211, 24515, 30981, 23734, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330,\n  /* 10095 */ 24538, 31017, 27856, 31741, 30059, 23377, 24563, 19837, 25782, 19760, 31015, 23516, 25374, 22105, 19419,\n  /* 10110 */ 29793, 24579, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10125 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10140 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10155 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10170 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10185 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10200 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10215 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10230 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22653, 18836, 22059, 25756, 19982,\n  /* 10245 */ 34097, 23196, 29183, 24614, 24110, 23641, 24673, 26103, 24697, 24443, 24713, 28558, 22121, 24748, 24462,\n  /* 10260 */ 24764, 23398, 30613, 18888, 18888, 18888, 18888, 24798, 25783, 27211, 27211, 27211, 34232, 35072, 22164,\n  /* 10275 */ 24401, 24401, 24401, 33302, 31500, 22559, 24106, 24232, 18888, 18888, 34970, 24817, 30411, 27211, 27211,\n  /* 10290 */ 32484, 19484, 29750, 35127, 24401, 24401, 19872, 31181, 24852, 18888, 18888, 24871, 29221, 27211, 27211,\n  /* 10305 */ 32072, 27211, 30756, 34441, 24401, 24401, 31571, 24401, 26095, 33141, 27802, 27011, 27855, 25295, 25607,\n  /* 10320 */ 24888, 22187, 22968, 19195, 34593, 24906, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868,\n  /* 10335 */ 25659, 18888, 33663, 27211, 27211, 24924, 24947, 23588, 31018, 18890, 27211, 31833, 22135, 19447, 23086,\n  /* 10350 */ 23330, 19828, 30904, 31042, 24972, 19840, 25000, 31738, 30898, 25782, 19760, 31015, 23516, 31008, 22105,\n  /* 10365 */ 19419, 25016, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10380 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10395 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10410 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10425 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10440 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10455 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10470 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10485 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22668, 18836, 25041, 25057,\n  /* 10500 */ 31320, 25073, 25089, 25105, 22087, 34796, 24236, 36138, 34870, 34125, 25121, 23106, 35497, 22248, 36613,\n  /* 10515 */ 25137, 30671, 27365, 30613, 25153, 26447, 25199, 25233, 22574, 23274, 25249, 25265, 25281, 25318, 25344,\n  /* 10530 */ 25360, 25400, 25428, 25452, 26731, 25504, 31693, 23669, 25558, 27407, 25575, 28599, 25934, 25599, 27211,\n  /* 10545 */ 28180, 27304, 25623, 25839, 25649, 24401, 34820, 25681, 25698, 22586, 27775, 30190, 25745, 25778, 25799,\n  /* 10560 */ 25817, 28995, 33569, 30756, 21518, 33443, 25837, 25855, 25893, 26095, 31254, 26677, 30136, 27855, 25930,\n  /* 10575 */ 25950, 27211, 22187, 22968, 25966, 25986, 24401, 23428, 27763, 36330, 26959, 26002, 26029, 26045, 26085,\n  /* 10590 */ 26119, 26170, 26203, 26222, 26239, 30527, 26372, 26274, 28404, 31018, 33757, 27211, 34262, 26316, 36729,\n  /* 10605 */ 26345, 26366, 35337, 31017, 26388, 26407, 30954, 26350, 33861, 26434, 26463, 26479, 26512, 23516, 33189,\n  /* 10620 */ 26531, 26547, 27963, 31293, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10635 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10650 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10665 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10680 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10695 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10710 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10725 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10740 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22683, 18836, 26568,\n  /* 10755 */ 26181, 26608, 34097, 26643, 29183, 22087, 26669, 18888, 18888, 18890, 26693, 27211, 27211, 27211, 22121,\n  /* 10770 */ 26720, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 26774, 25783, 27211, 27211, 27211, 26619,\n  /* 10785 */ 35072, 22164, 24401, 24401, 24401, 21596, 31500, 31693, 18888, 18888, 33978, 18888, 18890, 27211, 27211,\n  /* 10800 */ 25801, 27211, 27211, 19484, 24401, 24401, 24401, 26792, 24401, 31181, 18888, 18888, 18888, 35464, 23086,\n  /* 10815 */ 27211, 27211, 27211, 26809, 30756, 21431, 24401, 24401, 24401, 26828, 26095, 18888, 18888, 18888, 27855,\n  /* 10830 */ 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080,\n  /* 10845 */ 24402, 19868, 25659, 31948, 18889, 35707, 27211, 19719, 26845, 19868, 31018, 18890, 27211, 31833, 19406,\n  /* 10860 */ 19447, 23086, 23330, 26905, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516,\n  /* 10875 */ 24984, 31088, 19419, 26945, 27651, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10890 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10905 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10920 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10935 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10950 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10965 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10980 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 10995 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22698, 18836,\n  /* 11010 */ 26999, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211,\n  /* 11025 */ 22121, 24401, 24401, 24401, 24401, 23051, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211,\n  /* 11040 */ 27211, 35072, 27033, 24401, 24401, 24401, 24401, 24036, 31693, 18888, 18888, 27056, 18888, 18890, 27211,\n  /* 11055 */ 27211, 30320, 27211, 27211, 27075, 24401, 24401, 29032, 24401, 24401, 19628, 18888, 18888, 18888, 18888,\n  /* 11070 */ 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 33986,\n  /* 11085 */ 27855, 27211, 27211, 27102, 17590, 24017, 24401, 24401, 27123, 27144, 36254, 27162, 27210, 27228, 28500,\n  /* 11100 */ 18187, 34842, 33426, 27244, 35980, 27277, 27302, 27320, 36048, 34013, 20999, 31882, 21478, 27895, 27356,\n  /* 11115 */ 30287, 27381, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015,\n  /* 11130 */ 23516, 31008, 22105, 26329, 30087, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11145 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11160 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11175 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11190 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11205 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11220 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11235 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11250 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339,\n  /* 11265 */ 18836, 22059, 27406, 27423, 27445, 35294, 27461, 22087, 18888, 18888, 30140, 18890, 27211, 27211, 27989,\n  /* 11280 */ 27211, 22121, 24401, 24401, 25682, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 34042, 27211, 27211,\n  /* 11295 */ 27211, 27211, 29700, 22164, 24401, 24401, 24401, 24401, 27128, 31693, 27477, 18888, 18888, 18888, 18890,\n  /* 11310 */ 27194, 27211, 27211, 27211, 27211, 19484, 35299, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888,\n  /* 11325 */ 27059, 23086, 27211, 27211, 27211, 33366, 30756, 24012, 24401, 24401, 24401, 35044, 26750, 18888, 18888,\n  /* 11340 */ 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211,\n  /* 11355 */ 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 20815, 27211,\n  /* 11370 */ 30818, 19960, 33969, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760,\n  /* 11385 */ 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11400 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11415 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11430 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11445 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11460 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11475 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11490 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11505 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11520 */ 22713, 18836, 22059, 27496, 27516, 27541, 35231, 27557, 22087, 29662, 26292, 23292, 27573, 24836, 27601,\n  /* 11535 */ 27211, 27636, 22121, 35544, 27686, 24401, 27721, 18866, 18888, 27799, 18888, 27818, 22071, 27853, 32260,\n  /* 11550 */ 27211, 26013, 27873, 27920, 22164, 29419, 24401, 29946, 33413, 26742, 27751, 26881, 18888, 18888, 27261,\n  /* 11565 */ 36776, 27936, 27211, 27211, 27211, 27988, 28005, 28031, 28052, 24401, 24401, 28069, 28088, 28135, 25488,\n  /* 11580 */ 28152, 26069, 28167, 27211, 28340, 24657, 28196, 30756, 31523, 24401, 28212, 34176, 36174, 24956, 28248,\n  /* 11595 */ 28266, 28290, 21488, 33077, 28327, 28356, 17590, 20986, 23126, 28391, 28425, 28102, 28451, 28470, 28490,\n  /* 11610 */ 28516, 28534, 20034, 33728, 25868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 30241, 28274,\n  /* 11625 */ 28553, 28574, 19406, 28590, 23086, 23330, 19828, 19452, 28615, 28660, 26147, 25783, 31738, 19837, 25782,\n  /* 11640 */ 19760, 29613, 35958, 29276, 22105, 19419, 27963, 23157, 28700, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11655 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11670 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11685 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11700 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11715 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11730 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11745 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11760 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11775 */ 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211,\n  /* 11790 */ 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 25783,\n  /* 11805 */ 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 22528, 18888, 18888, 18888,\n  /* 11820 */ 18888, 18890, 27333, 27211, 27211, 27211, 27211, 19484, 30853, 24401, 24401, 24401, 24401, 19628, 18888,\n  /* 11835 */ 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750,\n  /* 11850 */ 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888,\n  /* 11865 */ 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018,\n  /* 11880 */ 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837,\n  /* 11895 */ 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590,\n  /* 11910 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11925 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11940 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11955 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11970 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 11985 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12000 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12015 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12030 */ 17590, 17590, 22728, 18836, 28747, 28782, 28817, 28841, 28857, 28880, 28896, 24161, 28943, 32011, 36261,\n  /* 12045 */ 27340, 28961, 29492, 28982, 29011, 24522, 29027, 25436, 29048, 23051, 27500, 29090, 29110, 30713, 18888,\n  /* 12060 */ 23512, 29130, 25183, 27211, 29155, 28927, 27033, 29173, 23230, 24401, 29199, 35373, 31693, 18888, 18888,\n  /* 12075 */ 25583, 32629, 29218, 27211, 27211, 31461, 30692, 29237, 27075, 24401, 24401, 24401, 29262, 29302, 19628,\n  /* 12090 */ 18888, 34329, 18888, 18888, 23086, 27211, 29329, 27211, 27211, 30756, 24012, 35933, 24401, 24401, 24401,\n  /* 12105 */ 27705, 31612, 18888, 18888, 29346, 29374, 27211, 35650, 17590, 21436, 29393, 24401, 25970, 18887, 33895,\n  /* 12120 */ 18888, 27211, 32528, 27212, 24016, 32769, 19868, 25659, 18888, 26889, 27211, 27211, 29412, 23889, 24371,\n  /* 12135 */ 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31768, 19840, 25783, 31738,\n  /* 12150 */ 19837, 29435, 29508, 31102, 29550, 29606, 22105, 30300, 29462, 19659, 27951, 17590, 17590, 17590, 17590,\n  /* 12165 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12180 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12195 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12210 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12225 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12240 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12255 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12270 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12285 */ 17590, 17590, 17590, 22743, 18836, 22059, 29629, 29473, 34097, 33285, 29183, 29651, 27254, 18888, 29678,\n  /* 12300 */ 33329, 32535, 27211, 29694, 29716, 22121, 19202, 24401, 32742, 29741, 18866, 26776, 33921, 28474, 18888,\n  /* 12315 */ 18888, 25783, 29766, 27211, 29809, 27211, 35072, 22164, 35825, 24401, 29828, 24401, 24036, 36769, 25217,\n  /* 12330 */ 18888, 18888, 29848, 18890, 27211, 29871, 27211, 26258, 27211, 29894, 24401, 29929, 24401, 36587, 24401,\n  /* 12345 */ 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 29725, 29962, 24401, 24401, 24401,\n  /* 12360 */ 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18473,\n  /* 12375 */ 18888, 18888, 19584, 27211, 27212, 24016, 29982, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889,\n  /* 12390 */ 19868, 31018, 18890, 27211, 31833, 19902, 19447, 32052, 19544, 19828, 29998, 30097, 30031, 19840, 25783,\n  /* 12405 */ 30047, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 30075, 17590, 17590, 17590,\n  /* 12420 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12435 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12450 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12465 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12480 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12495 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12510 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12525 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12540 */ 17590, 17590, 17590, 17590, 22758, 18836, 30121, 30156, 30206, 30257, 30273, 30336, 22087, 35624, 32837,\n  /* 12555 */ 25762, 18890, 29878, 34934, 26812, 27211, 22121, 24931, 23223, 29202, 24401, 18866, 34373, 30352, 18888,\n  /* 12570 */ 18888, 18888, 23447, 24828, 27211, 27211, 27211, 35072, 30370, 35052, 24401, 24401, 24401, 24036, 29523,\n  /* 12585 */ 18888, 18888, 27146, 18888, 31308, 30386, 27211, 27211, 30405, 30558, 19484, 30427, 24401, 24401, 29938,\n  /* 12600 */ 35686, 19628, 28766, 30447, 34506, 35614, 23086, 28731, 30482, 30517, 30552, 30756, 24012, 20156, 30574,\n  /* 12615 */ 30598, 30667, 26283, 33464, 28945, 27670, 30687, 32915, 33504, 25328, 17590, 23963, 20450, 33837, 21016,\n  /* 12630 */ 32397, 26300, 30708, 30729, 27885, 30748, 21588, 36373, 30779, 26653, 24628, 33220, 32514, 30806, 31835,\n  /* 12645 */ 25412, 25906, 26515, 18890, 28825, 31833, 26133, 19447, 28304, 31730, 23834, 26057, 30869, 30885, 32181,\n  /* 12660 */ 30920, 30942, 32797, 25782, 30970, 31015, 23516, 31008, 30997, 31034, 27963, 19659, 29450, 17590, 17590,\n  /* 12675 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12690 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12705 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12720 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12735 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12750 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12765 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12780 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12795 */ 17590, 17590, 17590, 17590, 17590, 22773, 18836, 31058, 31074, 32463, 31125, 31141, 31197, 22087, 18888,\n  /* 12810 */ 29534, 35471, 36738, 27211, 24342, 31213, 24424, 22121, 24401, 20175, 31229, 31917, 27736, 31245, 34334,\n  /* 12825 */ 27175, 18888, 29094, 27286, 27211, 31278, 31336, 27211, 31355, 31371, 24401, 31402, 31418, 24401, 31437,\n  /* 12840 */ 31693, 18888, 31619, 32841, 18888, 18890, 27211, 27211, 31460, 31477, 27211, 19484, 24401, 24401, 31497,\n  /* 12855 */ 36581, 24401, 33020, 18888, 18888, 18888, 18888, 30007, 27211, 27211, 27211, 27211, 31516, 32310, 24401,\n  /* 12870 */ 24401, 24401, 24401, 31539, 18888, 28762, 18888, 24651, 35740, 27211, 27211, 28644, 31565, 35796, 24401,\n  /* 12885 */ 24401, 19318, 32188, 18888, 24334, 28366, 27212, 29966, 29832, 19868, 25659, 18888, 18889, 27211, 27211,\n  /* 12900 */ 19719, 31587, 19868, 31635, 32435, 33693, 30105, 31663, 20005, 31715, 31757, 31784, 31812, 30015, 31851,\n  /* 12915 */ 31878, 25783, 31898, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 31933, 30221, 17590,\n  /* 12930 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12945 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12960 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12975 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 12990 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13005 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13020 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13035 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13050 */ 17590, 17590, 17590, 17590, 17590, 17590, 22788, 18836, 22059, 25729, 30466, 31968, 24306, 31984, 32000,\n  /* 13065 */ 32807, 35160, 27017, 29590, 34941, 19801, 29377, 33700, 22121, 27040, 30431, 29396, 28864, 29565, 18888,\n  /* 13080 */ 18888, 18888, 32027, 18888, 25783, 27211, 27211, 23698, 27211, 35072, 22164, 24401, 24401, 30845, 24401,\n  /* 13095 */ 24036, 32045, 18888, 26929, 18888, 18888, 18890, 27211, 31481, 32068, 27211, 27211, 32088, 24401, 33058,\n  /* 13110 */ 32122, 24401, 24401, 33736, 18888, 18888, 33162, 18888, 23086, 27211, 27211, 29484, 27211, 28375, 32144,\n  /* 13125 */ 24401, 24401, 33831, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 36704, 24017, 24401,\n  /* 13140 */ 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211,\n  /* 13155 */ 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 33107, 22171, 33224, 24271, 32169, 31017, 27856,\n  /* 13170 */ 31741, 19840, 25783, 31738, 30234, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951,\n  /* 13185 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13200 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13215 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13230 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13245 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13260 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13275 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13290 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13305 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 32204, 32232, 32252, 32677, 33295, 29074,\n  /* 13320 */ 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 23619,\n  /* 13335 */ 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 32276, 24401, 24401, 24401,\n  /* 13350 */ 24401, 24036, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 32299, 24401,\n  /* 13365 */ 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756,\n  /* 13380 */ 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017,\n  /* 13395 */ 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 33886, 18889,\n  /* 13410 */ 36065, 27211, 19719, 35326, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017,\n  /* 13425 */ 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659,\n  /* 13440 */ 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13455 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13470 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13485 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13500 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13515 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13530 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13545 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13560 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22803, 18836, 32335, 31647, 34666, 32351, 32367,\n  /* 13575 */ 32417, 22087, 18888, 32433, 19335, 32451, 27211, 32479, 27107, 32500, 22121, 24401, 32551, 20085, 32572,\n  /* 13590 */ 18866, 22287, 23753, 18888, 18888, 32602, 32665, 27211, 32693, 27211, 26972, 32713, 32729, 24401, 32764,\n  /* 13605 */ 24401, 25877, 32785, 34768, 18888, 27390, 32823, 24594, 24855, 32857, 24890, 32878, 32904, 27211, 32942,\n  /* 13620 */ 32977, 24401, 33000, 29313, 24401, 30790, 26206, 27666, 33904, 18888, 23086, 36353, 27211, 33036, 27211,\n  /* 13635 */ 30756, 24012, 32153, 24401, 33056, 24401, 35861, 18888, 18888, 30354, 27972, 27211, 27211, 33800, 17590,\n  /* 13650 */ 20145, 24401, 24401, 34638, 20811, 18888, 18888, 33074, 27211, 27212, 36167, 24402, 19868, 25659, 18888,\n  /* 13665 */ 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 34616, 24169, 33093, 33123,\n  /* 13680 */ 33157, 27856, 31741, 23862, 26552, 34302, 19837, 25782, 19760, 31015, 23516, 31008, 33178, 19973, 27963,\n  /* 13695 */ 23497, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13710 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13725 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13740 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13755 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13770 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13785 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13800 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13815 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22818, 18836, 33205, 28113, 33240, 34097,\n  /* 13830 */ 33275, 29183, 22087, 33318, 35438, 18888, 18890, 33345, 26391, 33382, 27211, 22121, 33399, 28072, 33442,\n  /* 13845 */ 24401, 18866, 22232, 18888, 33459, 18888, 18888, 33480, 33498, 25175, 27211, 27211, 26704, 22164, 24775,\n  /* 13860 */ 35239, 24401, 24401, 25914, 29580, 18888, 18888, 31109, 25211, 33520, 33539, 27211, 27211, 33556, 36284,\n  /* 13875 */ 19484, 33585, 24401, 24401, 33604, 32556, 19628, 18888, 18888, 31262, 33658, 23086, 27211, 27211, 33679,\n  /* 13890 */ 27211, 30756, 24012, 24401, 24401, 33716, 24401, 26854, 27480, 18888, 33752, 27855, 33259, 34701, 27211,\n  /* 13905 */ 17590, 32102, 24782, 23807, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 33773, 36105, 19868, 25659,\n  /* 13920 */ 18888, 23368, 27211, 29157, 19719, 23889, 34454, 29286, 18890, 33794, 25302, 33816, 19447, 34079, 33853,\n  /* 13935 */ 31862, 31017, 27856, 31741, 33877, 28920, 33937, 19837, 30461, 34002, 22276, 36041, 34029, 22105, 19419,\n  /* 13950 */ 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13965 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13980 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 13995 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14010 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14025 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14040 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14055 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14070 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22833, 18836, 34064, 32616, 34113,\n  /* 14085 */ 34141, 34157, 34192, 34208, 32216, 36013, 31549, 31952, 34224, 34248, 34287, 29330, 34350, 34389, 34413,\n  /* 14100 */ 34481, 26793, 18866, 26187, 29635, 22293, 18888, 36654, 25783, 34522, 34544, 34566, 25821, 35072, 22164,\n  /* 14115 */ 34586, 34609, 34632, 19604, 24036, 36644, 36674, 24681, 18888, 32401, 34654, 31339, 34682, 34698, 27211,\n  /* 14130 */ 34717, 34753, 28053, 34812, 34836, 24401, 33619, 19628, 34858, 32236, 34906, 24598, 33523, 27612, 34890,\n  /* 14145 */ 34922, 24732, 29246, 36717, 33634, 34465, 32984, 34168, 26750, 34957, 18888, 18888, 34994, 35010, 27211,\n  /* 14160 */ 33040, 17590, 29913, 35035, 24401, 36304, 25482, 30171, 35883, 35068, 35088, 26627, 20441, 31173, 35123,\n  /* 14175 */ 35143, 35176, 24640, 30492, 29358, 19719, 35192, 35219, 25384, 28801, 35255, 35279, 32586, 34496, 23086,\n  /* 14190 */ 23330, 29061, 31017, 27856, 31741, 19840, 25783, 31738, 24547, 25164, 35315, 31796, 35353, 34316, 22105,\n  /* 14205 */ 19419, 27963, 24091, 28630, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14220 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14235 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14250 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14265 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14280 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14295 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14310 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14325 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22848, 18836, 22059, 34782,\n  /* 14340 */ 34088, 35389, 21008, 35405, 35421, 35454, 18888, 18888, 23466, 35487, 27211, 27211, 27211, 35513, 31154,\n  /* 14355 */ 24401, 24401, 24401, 35560, 18888, 26863, 36664, 35601, 24872, 25783, 30389, 23536, 26250, 35647, 35666,\n  /* 14370 */ 22164, 19522, 19564, 30582, 35682, 27697, 35575, 29114, 18888, 18888, 18888, 18890, 27211, 35702, 27211,\n  /* 14385 */ 27211, 27211, 35723, 24401, 35527, 24401, 24401, 24401, 19628, 30184, 18888, 18888, 18888, 23086, 35739,\n  /* 14400 */ 27211, 27211, 27211, 29139, 22938, 24401, 24401, 24401, 24401, 23898, 35756, 18888, 18888, 25025, 35778,\n  /* 14415 */ 27211, 27211, 17590, 20064, 35795, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402,\n  /* 14430 */ 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 23917, 18890, 34550, 31833, 22262, 19447,\n  /* 14445 */ 23086, 23330, 26418, 31017, 27856, 31741, 19840, 25783, 35812, 19837, 27187, 35841, 33135, 23516, 31008,\n  /* 14460 */ 22105, 22148, 28712, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14475 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14490 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14505 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14520 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14535 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14550 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14565 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14580 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22863, 18836, 22059,\n  /* 14595 */ 35877, 28723, 34097, 31164, 29183, 22087, 26758, 18888, 22592, 18890, 23989, 27211, 29812, 27211, 22121,\n  /* 14610 */ 33778, 24401, 31421, 24401, 18866, 18888, 18888, 26872, 18888, 18888, 25783, 27211, 30732, 27211, 27211,\n  /* 14625 */ 35072, 22164, 24401, 24908, 24401, 24401, 24036, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211,\n  /* 14640 */ 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086,\n  /* 14655 */ 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855,\n  /* 14670 */ 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016,\n  /* 14685 */ 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406,\n  /* 14700 */ 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516,\n  /* 14715 */ 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14730 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14745 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14760 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14775 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14790 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14805 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14820 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14835 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22878, 18836,\n  /* 14850 */ 22059, 27837, 27857, 35899, 24401, 35915, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211,\n  /* 14865 */ 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211,\n  /* 14880 */ 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 31602, 18888, 18888, 18888, 18888, 26223, 27211,\n  /* 14895 */ 27211, 27211, 27211, 27211, 19484, 35931, 24401, 24401, 24401, 24401, 19628, 18888, 28136, 18888, 18888,\n  /* 14910 */ 35949, 27211, 32862, 27211, 32697, 30756, 24012, 24401, 32283, 24401, 32128, 26750, 18888, 18888, 18888,\n  /* 14925 */ 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212,\n  /* 14940 */ 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833,\n  /* 14955 */ 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015,\n  /* 14970 */ 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 14985 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15000 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15015 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15030 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15045 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15060 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15075 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15090 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22893,\n  /* 15105 */ 18836, 22059, 35974, 34882, 34097, 33960, 29183, 35996, 18888, 23311, 18888, 36029, 27211, 27211, 36064,\n  /* 15120 */ 36081, 22121, 24401, 24401, 36104, 33950, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211,\n  /* 15135 */ 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 36121, 18888, 25559, 18888, 18888, 18890,\n  /* 15150 */ 27211, 27211, 30313, 27211, 27211, 36154, 24401, 24401, 34397, 24401, 24401, 19628, 28250, 18888, 18888,\n  /* 15165 */ 18888, 23086, 30926, 27211, 27211, 27211, 26983, 24012, 33642, 24401, 24401, 24401, 26750, 18888, 18888,\n  /* 15180 */ 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211,\n  /* 15195 */ 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211,\n  /* 15210 */ 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760,\n  /* 15225 */ 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15240 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15255 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15270 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15285 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15300 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15315 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15330 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15345 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15360 */ 22339, 18836, 22059, 19354, 27857, 36190, 24401, 36206, 22087, 18888, 18888, 18888, 18007, 27211, 27211,\n  /* 15375 */ 27211, 24724, 22121, 24401, 24401, 24401, 30827, 18866, 18888, 36222, 18888, 28795, 18888, 25783, 35100,\n  /* 15390 */ 27211, 27429, 27211, 35072, 22164, 30836, 24401, 24499, 24401, 24036, 31693, 18888, 36244, 18888, 18888,\n  /* 15405 */ 18890, 27211, 36088, 27211, 27211, 27211, 19484, 24401, 28036, 24401, 24401, 24401, 19628, 18888, 18888,\n  /* 15420 */ 35631, 18888, 35762, 27211, 27211, 36277, 27211, 34730, 24012, 24401, 24401, 36300, 24401, 36320, 18888,\n  /* 15435 */ 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 25712, 18888, 18888, 36346,\n  /* 15450 */ 27211, 27212, 19184, 24402, 19868, 25659, 32029, 18889, 27211, 33359, 19719, 23889, 36369, 31018, 18890,\n  /* 15465 */ 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782,\n  /* 15480 */ 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15495 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15510 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15525 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15540 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15555 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15570 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15585 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15600 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15615 */ 17590, 22384, 18836, 36389, 19008, 19233, 20367, 36434, 17173, 17595, 36437, 17330, 17349, 18921, 17189,\n  /* 15630 */ 17208, 17281, 20355, 36453, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033,\n  /* 15645 */ 20765, 17421, 20535, 17192, 20362, 21726, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251,\n  /* 15660 */ 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940,\n  /* 15675 */ 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531,\n  /* 15690 */ 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551,\n  /* 15705 */ 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209,\n  /* 15720 */ 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816,\n  /* 15735 */ 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590,\n  /* 15750 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15765 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15780 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15795 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15810 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15825 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15840 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15855 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 15870 */ 17590, 17590, 22369, 18836, 18987, 19008, 19233, 20367, 19008, 21737, 30763, 36437, 17330, 17349, 18921,\n  /* 15885 */ 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265,\n  /* 15900 */ 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520,\n  /* 15915 */ 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915,\n  /* 15930 */ 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223,\n  /* 15945 */ 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918,\n  /* 15960 */ 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052,\n  /* 15975 */ 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392,\n  /* 15990 */ 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590,\n  /* 16005 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16020 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16035 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16050 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16065 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16080 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16095 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16110 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16125 */ 17590, 17590, 17590, 21813, 18836, 36489, 19008, 19233, 20367, 19008, 17173, 17737, 36437, 17330, 17349,\n  /* 16140 */ 18921, 17189, 17208, 17281, 20355, 17768, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006,\n  /* 16155 */ 17265, 22033, 20765, 17421, 20535, 17192, 20543, 22022, 17311, 18658, 18999, 19008, 17447, 32952, 17497,\n  /* 16170 */ 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418,\n  /* 16185 */ 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473,\n  /* 16200 */ 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731,\n  /* 16215 */ 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706,\n  /* 16230 */ 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642,\n  /* 16245 */ 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590,\n  /* 16260 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16275 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16290 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16305 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16320 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16335 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16350 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16365 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16380 */ 17590, 17590, 17590, 17590, 21828, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330,\n  /* 16395 */ 17349, 18921, 17189, 17208, 17281, 20355, 36517, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665,\n  /* 16410 */ 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952,\n  /* 16425 */ 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258,\n  /* 16440 */ 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617,\n  /* 16455 */ 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864,\n  /* 16470 */ 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143,\n  /* 16485 */ 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163,\n  /* 16500 */ 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590,\n  /* 16515 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16530 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16545 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16560 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16575 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16590 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16605 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16620 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16635 */ 17590, 17590, 17590, 17590, 17590, 21828, 18836, 19307, 18888, 27857, 30756, 24401, 29183, 28015, 18888,\n  /* 16650 */ 18888, 18888, 18890, 27211, 27211, 27211, 27211, 36567, 24401, 24401, 24401, 24401, 22953, 18888, 18888,\n  /* 16665 */ 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 28537, 36603, 24401, 24401, 24401, 24401, 24036,\n  /* 16680 */ 18881, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401,\n  /* 16695 */ 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401,\n  /* 16710 */ 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401,\n  /* 16725 */ 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211,\n  /* 16740 */ 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741,\n  /* 16755 */ 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590,\n  /* 16770 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16785 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16800 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16815 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16830 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16845 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16860 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16875 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 16890 */ 17590, 17590, 17590, 17590, 17590, 17590, 36629, 36690, 18720, 19008, 19233, 20367, 19008, 17454, 17595,\n  /* 16905 */ 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17223, 17308, 17327, 17346, 18918, 36754, 21880,\n  /* 16920 */ 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 20362, 21726, 17311, 18658, 18999, 19008,\n  /* 16935 */ 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504,\n  /* 16950 */ 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737,\n  /* 16965 */ 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481,\n  /* 16980 */ 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072,\n  /* 16995 */ 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232,\n  /* 17010 */ 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535,\n  /* 17025 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 17040 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 17055 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 17070 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 17085 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 17100 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 17115 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 17130 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590,\n  /* 17145 */ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 0, 94242, 0, 118820, 0, 2211840, 102439, 0, 0, 106538,\n  /* 17162 */ 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2482176, 2158592,\n  /* 17174 */ 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 2207744, 2404352,\n  /* 17191 */ 2412544, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744,\n  /* 17202 */ 2207744, 2207744, 2207744, 2207744, 2207744, 3104768, 2605056, 2207744, 2207744, 2207744, 2207744,\n  /* 17213 */ 2207744, 2207744, 2678784, 2207744, 2695168, 2207744, 2703360, 2207744, 2711552, 2752512, 2207744, 0, 0,\n  /* 17226 */ 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 3170304, 3174400, 2158592, 0, 139, 0, 2158592,\n  /* 17246 */ 2158592, 2158592, 2158592, 2158592, 2424832, 2158592, 2158592, 2158592, 2748416, 2756608, 2777088,\n  /* 17257 */ 2801664, 2158592, 2158592, 2158592, 2863104, 2891776, 2158592, 2158592, 2158592, 2158592, 2158592,\n  /* 17268 */ 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3104768, 2158592, 2158592, 2158592, 2158592,\n  /* 17279 */ 2158592, 2158592, 2207744, 2785280, 2207744, 2809856, 2207744, 2207744, 2842624, 2207744, 2207744,\n  /* 17290 */ 2207744, 2899968, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2473984,\n  /* 17301 */ 2207744, 2207744, 2494464, 2207744, 2207744, 2207744, 2523136, 2158592, 2404352, 2412544, 2158592,\n  /* 17312 */ 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592,\n  /* 17323 */ 2158592, 2564096, 2158592, 2158592, 2605056, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592,\n  /* 17334 */ 2678784, 2158592, 2695168, 2158592, 2703360, 2158592, 2711552, 2752512, 2158592, 2158592, 2785280,\n  /* 17345 */ 2158592, 2158592, 2785280, 2158592, 2809856, 2158592, 2158592, 2842624, 2158592, 2158592, 2158592,\n  /* 17356 */ 2899968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 18, 0, 0, 0, 0,\n  /* 17371 */ 0, 0, 0, 2211840, 0, 0, 641, 0, 2158592, 0, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 32768, 0, 2158592, 0,\n  /* 17395 */ 2158592, 2158592, 2158592, 2383872, 2158592, 2158592, 2158592, 2158592, 3006464, 2383872, 2207744,\n  /* 17406 */ 2207744, 2207744, 2207744, 2158877, 2158877, 2158877, 2158877, 0, 0, 0, 2158877, 2572573, 2158877,\n  /* 17419 */ 2158877, 0, 2207744, 2207744, 2596864, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2641920,\n  /* 17431 */ 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 167936, 0, 0, 2162688, 0, 0,\n  /* 17447 */ 3104768, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592,\n  /* 17458 */ 2158592, 2158592, 0, 0, 0, 2146304, 2146304, 2224128, 2224128, 2232320, 2232320, 2232320, 641, 0, 0, 0, 0,\n  /* 17475 */ 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2531328, 2158592,\n  /* 17488 */ 2158592, 2158592, 2158592, 2158592, 2617344, 2158592, 2158592, 2158592, 2158592, 2441216, 2445312,\n  /* 17499 */ 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2502656, 2158592, 2158592, 2158592, 2158592,\n  /* 17510 */ 2158592, 2158592, 2158592, 2158592, 2580480, 2158592, 2158592, 2158592, 2158592, 2621440, 2158592,\n  /* 17521 */ 2580480, 2158592, 2158592, 2158592, 2158592, 2621440, 2158592, 2158592, 2158592, 2158592, 2158592,\n  /* 17532 */ 2158592, 2699264, 2158592, 2158592, 2158592, 2158592, 2158592, 2748416, 2756608, 2777088, 2801664,\n  /* 17543 */ 2207744, 2863104, 2891776, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744,\n  /* 17554 */ 2207744, 2207744, 2207744, 2207744, 3018752, 2207744, 3043328, 2207744, 2207744, 2207744, 2207744,\n  /* 17565 */ 3080192, 2207744, 2207744, 3112960, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0,\n  /* 17578 */ 0, 172310, 279, 0, 2162688, 0, 0, 2207744, 2207744, 2207744, 3186688, 2207744, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 17599 */ 0, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2404352, 2412544, 2158592, 2510848, 2158592, 2158592,\n  /* 17615 */ 2158592, 2158592, 2158592, 2158592, 2158592, 2584576, 2158592, 2609152, 2158592, 2158592, 2629632,\n  /* 17626 */ 2158592, 2158592, 2158592, 2686976, 2158592, 2715648, 2158592, 2158592, 3121152, 2158592, 2158592,\n  /* 17637 */ 2158592, 3149824, 2158592, 2158592, 3170304, 3174400, 2158592, 2367488, 2207744, 2207744, 2207744,\n  /* 17648 */ 2207744, 2158592, 2158592, 2158592, 2158592, 0, 0, 0, 2158592, 2572288, 2158592, 2158592, 0, 2207744,\n  /* 17662 */ 2207744, 2207744, 2433024, 2207744, 2453504, 2461696, 2207744, 2207744, 2207744, 2207744, 2207744,\n  /* 17673 */ 2207744, 2510848, 2207744, 2207744, 2207744, 2207744, 2207744, 2531328, 2207744, 2207744, 2207744,\n  /* 17684 */ 2207744, 2207744, 2617344, 2207744, 2207744, 2207744, 2207744, 2158592, 2158592, 2158592, 2158592, 0, 0,\n  /* 17697 */ 0, 2158592, 2572288, 2158592, 2158592, 1508, 2715648, 2207744, 2207744, 2207744, 2207744, 2207744,\n  /* 17709 */ 2207744, 2207744, 2867200, 2207744, 2904064, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744,\n  /* 17720 */ 2207744, 2207744, 2580480, 2207744, 2207744, 2207744, 2207744, 2621440, 2207744, 2207744, 2207744,\n  /* 17731 */ 3149824, 2207744, 2207744, 3170304, 3174400, 2207744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 2158592, 2158592,\n  /* 17750 */ 2158592, 2404352, 2412544, 2707456, 2732032, 2207744, 2207744, 2207744, 2822144, 2826240, 2207744,\n  /* 17761 */ 2895872, 2207744, 2207744, 2924544, 2207744, 2207744, 2973696, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0,\n  /* 17778 */ 0, 0, 0, 285, 2158592, 2158592, 3112960, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592,\n  /* 17792 */ 2158592, 2158592, 3186688, 2158592, 2207744, 2207744, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 0,\n  /* 17805 */ 0, 2158592, 2158592, 2158592, 2158592, 0, 0, 2535424, 2543616, 2158592, 2158592, 2158592, 0, 0, 0,\n  /* 17820 */ 2158592, 2158592, 2158592, 2990080, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592,\n  /* 17831 */ 2572288, 2981888, 2207744, 2207744, 3002368, 2207744, 3047424, 3063808, 3076096, 2207744, 2207744,\n  /* 17842 */ 2207744, 2207744, 2207744, 2207744, 2207744, 3203072, 2708960, 2732032, 2158592, 2158592, 2158592,\n  /* 17853 */ 2822144, 2827748, 2158592, 2895872, 2158592, 2158592, 2924544, 2158592, 2158592, 2973696, 2158592,\n  /* 17864 */ 2981888, 2158592, 2158592, 3002368, 2158592, 3047424, 3063808, 3076096, 2158592, 2158592, 2158592,\n  /* 17875 */ 2158592, 2158592, 2158592, 2158592, 3203072, 2981888, 2158592, 2158592, 3003876, 2158592, 3047424,\n  /* 17886 */ 3063808, 3076096, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3203072, 2207744,\n  /* 17897 */ 2207744, 2207744, 2207744, 2207744, 2424832, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744,\n  /* 17908 */ 2207744, 20480, 0, 0, 0, 0, 0, 2162688, 20480, 0, 2523136, 2527232, 2158592, 2158592, 2576384, 2158592,\n  /* 17924 */ 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2908160, 2527232,\n  /* 17935 */ 2207744, 2207744, 2576384, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744,\n  /* 17946 */ 2207744, 2207744, 2908160, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 0, 286, 2158592, 2158592, 0, 0,\n  /* 17967 */ 2158592, 2158592, 2158592, 2158592, 2633728, 2658304, 0, 0, 2740224, 2744320, 0, 2834432, 2207744,\n  /* 17980 */ 2207744, 2977792, 2207744, 2207744, 2207744, 2207744, 3039232, 2207744, 2207744, 2207744, 2207744,\n  /* 17991 */ 2207744, 2207744, 3158016, 0, 0, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 933, 45, 45, 45, 45, 442, 45, 45,\n  /* 18014 */ 45, 45, 45, 45, 45, 45, 45, 67, 67, 2494464, 2158592, 2158592, 2158592, 2524757, 2527232, 2158592,\n  /* 18030 */ 2158592, 2576384, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 1504, 2158592, 2498560, 2158592,\n  /* 18042 */ 2158592, 2158592, 2158592, 2568192, 2158592, 2592768, 2625536, 2158592, 2158592, 2674688, 2736128,\n  /* 18053 */ 2158592, 2158592, 0, 2158592, 2912256, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592,\n  /* 18065 */ 3108864, 2158592, 2158592, 3133440, 3145728, 3153920, 2375680, 2379776, 2207744, 2207744, 2420736,\n  /* 18076 */ 2207744, 2449408, 2207744, 2207744, 2207744, 2498560, 2207744, 2207744, 2207744, 2207744, 2568192,\n  /* 18087 */ 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 0, 551, 2158592, 2158592, 2158592, 2158592, 2207744,\n  /* 18106 */ 2506752, 2207744, 2207744, 2207744, 2207744, 2207744, 2158592, 2506752, 0, 2020, 2158592, 2592768,\n  /* 18118 */ 2625536, 2207744, 2207744, 2674688, 2736128, 2207744, 2207744, 2207744, 2912256, 2207744, 2207744,\n  /* 18129 */ 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 542, 0, 544,\n  /* 18143 */ 2207744, 3108864, 2207744, 2207744, 3133440, 3145728, 3153920, 2375680, 2379776, 2158592, 2158592,\n  /* 18154 */ 2420736, 2158592, 2449408, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 0, 641, 0, 0, 0,\n  /* 18169 */ 0, 0, 0, 2367488, 2158592, 2498560, 2158592, 2158592, 1621, 2158592, 2158592, 2568192, 2158592, 2592768,\n  /* 18183 */ 2625536, 2158592, 2158592, 2674688, 0, 0, 0, 0, 0, 1608, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1107, 97,\n  /* 18205 */ 97, 1110, 97, 97, 3133440, 3145728, 3153920, 2158592, 2408448, 2416640, 2158592, 2465792, 2158592,\n  /* 18218 */ 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3014656, 2158592, 2158592, 3051520,\n  /* 18229 */ 2158592, 2158592, 3100672, 2158592, 2158592, 3121152, 2158592, 2158592, 2158592, 3149824, 2416640,\n  /* 18240 */ 2207744, 2465792, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2633728,\n  /* 18251 */ 2658304, 2740224, 2744320, 2834432, 2949120, 2158592, 2985984, 2158592, 2998272, 2158592, 2158592,\n  /* 18262 */ 2158592, 3129344, 2207744, 2408448, 2949120, 2207744, 2985984, 2207744, 2998272, 2207744, 2207744,\n  /* 18273 */ 2207744, 3129344, 2158592, 2408448, 2416640, 2158592, 2465792, 2158592, 2158592, 2158592, 2158592,\n  /* 18284 */ 2158592, 3186688, 2158592, 0, 32768, 0, 0, 0, 0, 0, 0, 2367488, 2949120, 2158592, 2985984, 2158592,\n  /* 18300 */ 2998272, 2158592, 2158592, 2158592, 3129344, 2158592, 2158592, 2478080, 2158592, 2158592, 2158592,\n  /* 18311 */ 2535424, 2543616, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592,\n  /* 18322 */ 3117056, 2207744, 2207744, 2478080, 2207744, 2207744, 2207744, 2207744, 2699264, 2207744, 2207744,\n  /* 18333 */ 2207744, 2207744, 2207744, 2748416, 2756608, 2777088, 2801664, 2207744, 2207744, 2158877, 2158877,\n  /* 18344 */ 2158877, 2158877, 2158877, 0, 0, 0, 2158877, 2158877, 2158877, 2158877, 0, 0, 2535709, 2543901, 2158877,\n  /* 18359 */ 2158877, 2158877, 0, 0, 0, 2158877, 2158877, 2158877, 2990365, 2158877, 2158877, 2158730, 2158730,\n  /* 18372 */ 2158730, 2158730, 2158730, 2572426, 2207744, 2535424, 2543616, 2207744, 2207744, 2207744, 2207744,\n  /* 18383 */ 2207744, 2207744, 2207744, 2207744, 2207744, 3117056, 2158592, 2158592, 2478080, 2207744, 2207744,\n  /* 18394 */ 2990080, 2207744, 2207744, 2158592, 2158592, 2482176, 2158592, 2158592, 0, 0, 0, 2158592, 2158592,\n  /* 18407 */ 2158592, 0, 2158592, 2908160, 2158592, 2158592, 2158592, 2977792, 2158592, 2158592, 2158592, 2158592,\n  /* 18419 */ 3039232, 2158592, 2158592, 3010560, 2207744, 2428928, 2207744, 2514944, 2207744, 2588672, 2207744,\n  /* 18430 */ 2838528, 2207744, 2207744, 2207744, 3010560, 2158592, 2428928, 2158592, 2514944, 0, 0, 2158592, 2588672,\n  /* 18443 */ 2158592, 0, 2838528, 2158592, 2158592, 2158592, 3010560, 2158592, 2506752, 2158592, 18, 0, 0, 0, 0, 0, 0,\n  /* 18460 */ 0, 2211840, 0, 0, 0, 0, 2158592, 0, 0, 29315, 922, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 18485 */ 45, 45, 1539, 45, 3006464, 2383872, 0, 2020, 2158592, 2158592, 2158592, 2158592, 3006464, 2158592,\n  /* 18499 */ 2637824, 2953216, 2158592, 2207744, 2637824, 2953216, 2207744, 0, 0, 2158592, 2637824, 2953216, 2158592,\n  /* 18512 */ 2539520, 2158592, 2539520, 2207744, 0, 0, 2539520, 2158592, 2158592, 2158592, 2158592, 2207744, 2506752,\n  /* 18525 */ 2207744, 2207744, 2207744, 2207744, 2207744, 2158592, 2506752, 0, 0, 2158592, 2207744, 0, 2158592,\n  /* 18538 */ 2158592, 2207744, 0, 2158592, 2158592, 2207744, 0, 2158592, 2965504, 2965504, 2965504, 0, 0, 0, 0, 0,\n  /* 18554 */ 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2474269, 2158877, 2158877, 0, 0,\n  /* 18567 */ 2158877, 2158877, 2158877, 2158877, 2634013, 2658589, 0, 0, 2740509, 2744605, 0, 2834717, 40976, 18,\n  /* 18581 */ 36884, 45078, 24, 28, 90143, 94242, 118820, 102439, 106538, 98347, 118820, 118820, 118820, 40976, 18, 18,\n  /* 18597 */ 36884, 0, 0, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 86016, 0, 0, 2211840, 102439, 0, 0, 0, 98347, 0,\n  /* 18621 */ 2158592, 2158592, 2158592, 2158592, 2158592, 3158016, 0, 2375680, 2379776, 2158592, 2158592, 2420736,\n  /* 18633 */ 2158592, 2449408, 2158592, 2158592, 0, 94242, 0, 0, 0, 2211840, 102439, 0, 0, 106538, 98347, 135, 2158592,\n  /* 18650 */ 2158592, 2158592, 2158592, 2158592, 2158592, 2564096, 2158592, 2158592, 2158592, 2158592, 2158592,\n  /* 18661 */ 2596864, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2641920, 2158592, 2158592, 2158592,\n  /* 18672 */ 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2781184, 2793472, 2494464, 2158592,\n  /* 18683 */ 2158592, 2158592, 2523136, 2527232, 2158592, 2158592, 2576384, 2158592, 2158592, 2158592, 2158592,\n  /* 18694 */ 2158592, 2158592, 0, 40976, 0, 18, 18, 24, 0, 27, 27, 0, 2158592, 2498560, 2158592, 2158592, 0, 2158592,\n  /* 18712 */ 2158592, 2568192, 2158592, 2592768, 2625536, 2158592, 2158592, 2674688, 0, 0, 0, 0, 0, 2211840, 0, 0, 0,\n  /* 18729 */ 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2473984, 2158592,\n  /* 18742 */ 2158592, 2494464, 2158592, 2158592, 2158592, 3006464, 2383872, 0, 0, 2158592, 2158592, 2158592, 2158592,\n  /* 18755 */ 3006464, 2158592, 2637824, 2953216, 2158592, 2207744, 2637824, 2953216, 40976, 18, 36884, 45078, 24, 27,\n  /* 18769 */ 147488, 94242, 147456, 147488, 106538, 98347, 0, 0, 147456, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24,\n  /* 18788 */ 27, 27, 27, 27, 0, 81920, 0, 94242, 0, 0, 0, 2211840, 0, 0, 0, 106538, 98347, 0, 2158592, 2158592,\n  /* 18808 */ 2158592, 2158592, 2158592, 2158592, 2428928, 2158592, 2514944, 2158592, 2588672, 2158592, 2838528,\n  /* 18819 */ 2158592, 2158592, 40976, 18, 151573, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 0,\n  /* 18836 */ 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 1315, 0, 97, 97, 97, 97, 97,\n  /* 18860 */ 97, 97, 97, 97, 97, 1487, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 0, 29315, 0, 0,\n  /* 18886 */ 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 130, 94242, 0, 0, 0,\n  /* 18911 */ 2211840, 102439, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3096576,\n  /* 18925 */ 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2207744,\n  /* 18936 */ 2207744, 2158592, 18, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 2158592, 644, 2207744, 2207744, 2207744,\n  /* 18956 */ 3186688, 2207744, 0, 1080, 0, 1084, 0, 1088, 0, 0, 0, 0, 0, 0, 0, 2158730, 2158730, 2158730, 2158730,\n  /* 18975 */ 2158730, 2158730, 2158730, 2158730, 2158730, 2531466, 2158730, 2158730, 2158730, 2158730, 2158730,\n  /* 18986 */ 2617482, 0, 94242, 0, 0, 0, 2211840, 102439, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592,\n  /* 19003 */ 2158592, 2781184, 2793472, 2158592, 2818048, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592,\n  /* 19014 */ 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 40976, 18,\n  /* 19026 */ 36884, 45078, 24, 27, 90143, 159779, 159744, 102439, 159779, 98347, 0, 0, 159744, 40976, 18, 18, 36884, 0,\n  /* 19044 */ 45078, 0, 2224253, 172032, 2224253, 2232448, 2232448, 172032, 2232448, 90143, 0, 0, 2170880, 0, 0, 550,\n  /* 19060 */ 829, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976,\n  /* 19073 */ 0, 18, 18, 124, 124, 127, 127, 127, 40976, 18, 36884, 45078, 25, 29, 90143, 94242, 0, 102439, 106538,\n  /* 19092 */ 98347, 0, 0, 163931, 40976, 18, 18, 36884, 0, 45078, 249856, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0,\n  /* 19113 */ 2170880, 0, 0, 827, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592,\n  /* 19127 */ 2158592, 0, 40976, 0, 4243810, 4243810, 24, 24, 27, 27, 27, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0,\n  /* 19149 */ 0, 57344, 286, 2158592, 2158592, 2158592, 2158592, 2707456, 2732032, 2158592, 2158592, 2158592, 2822144,\n  /* 19162 */ 2826240, 2158592, 2895872, 2158592, 2158592, 2924544, 2158592, 2158592, 2973696, 2158592, 2207744,\n  /* 19173 */ 2207744, 2207744, 3186688, 2207744, 0, 0, 0, 0, 0, 0, 53248, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 1613, 97,\n  /* 19196 */ 97, 97, 97, 97, 97, 1495, 97, 97, 97, 97, 97, 97, 97, 97, 97, 566, 97, 97, 97, 97, 97, 97, 2207744, 0, 0,\n  /* 19221 */ 0, 0, 0, 0, 2166784, 546, 0, 0, 0, 0, 286, 2158592, 2158592, 2158592, 2207744, 2207744, 2207744, 2207744,\n  /* 19239 */ 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 17, 18, 36884,\n  /* 19252 */ 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 20480, 120, 121, 18, 18, 36884, 0, 45078, 0,\n  /* 19272 */ 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 2170880, 0, 53248, 550, 0, 2158592, 2158592, 2158592, 2387968,\n  /* 19291 */ 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 196608, 18, 266240, 24, 24, 27, 27, 27, 0,\n  /* 19308 */ 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 0, 45, 45, 45, 45, 45, 45, 45, 1535, 45, 45, 45, 45, 45,\n  /* 19332 */ 45, 45, 1416, 45, 45, 45, 45, 45, 45, 45, 45, 424, 45, 45, 45, 45, 45, 45, 45, 45, 45, 405, 45, 45, 45,\n  /* 19357 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 199, 45, 45, 67, 67, 67, 67, 67, 491, 67, 67, 67, 67, 67, 67, 67,\n  /* 19383 */ 67, 67, 67, 67, 1766, 67, 67, 67, 1767, 67, 24850, 24850, 12564, 12564, 0, 0, 2166784, 546, 0, 53531,\n  /* 19403 */ 53531, 0, 286, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 45, 45, 45, 45, 45,\n  /* 19430 */ 67, 67, 67, 67, 67, 67, 67, 67, 67, 743, 57889, 0, 2170880, 0, 0, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 19455 */ 97, 45, 45, 45, 45, 45, 45, 45, 45, 1856, 45, 1858, 1859, 67, 67, 67, 1009, 67, 67, 67, 67, 67, 67, 67,\n  /* 19479 */ 67, 67, 67, 67, 1021, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2367773,\n  /* 19504 */ 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2699549, 2158877, 2158877, 2158877, 2158877,\n  /* 19515 */ 2158877, 2748701, 2756893, 2777373, 2801949, 97, 1115, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 19535 */ 97, 857, 97, 67, 67, 67, 67, 67, 1258, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1826, 67, 97, 97, 97,\n  /* 19560 */ 97, 97, 97, 1338, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 870, 97, 97, 67, 67, 67, 1463, 67,\n  /* 19585 */ 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1579, 67, 67, 97, 97, 97, 1518, 97, 97, 97, 97, 97, 97,\n  /* 19610 */ 97, 97, 97, 97, 97, 97, 97, 904, 905, 97, 97, 97, 97, 1620, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0,\n  /* 19636 */ 921, 0, 0, 0, 0, 0, 0, 45, 1679, 67, 67, 67, 1682, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1690, 67, 0, 0, 97,\n  /* 19663 */ 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 45, 45, 45, 669, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 19690 */ 189, 45, 45, 45, 1748, 45, 45, 45, 1749, 1750, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1959, 67,\n  /* 19714 */ 67, 67, 67, 1768, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1791, 97, 97, 97,\n  /* 19739 */ 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1802, 67, 1817, 67, 67, 67, 67, 67, 67, 1823, 67, 67, 67, 67,\n  /* 19764 */ 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 97, 1848, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 19791 */ 45, 659, 45, 45, 45, 45, 45, 45, 45, 1863, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 495, 67, 67,\n  /* 19816 */ 67, 67, 67, 1878, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97,\n  /* 19844 */ 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 0, 1973, 97, 97, 97,\n  /* 19871 */ 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1165, 97, 1167, 67, 24850, 24850, 12564, 12564, 0,\n  /* 19894 */ 0, 2166784, 0, 0, 53531, 53531, 0, 286, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 1789, 97, 0,\n  /* 19919 */ 94242, 0, 0, 0, 2211840, 102439, 0, 0, 106538, 98347, 136, 2158592, 2158592, 2158592, 2158592, 2158592,\n  /* 19935 */ 3158016, 229376, 2375680, 2379776, 2158592, 2158592, 2420736, 2158592, 2449408, 2158592, 2158592, 67,\n  /* 19947 */ 24850, 24850, 12564, 12564, 0, 0, 280, 547, 0, 53531, 53531, 0, 286, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97,\n  /* 19970 */ 0, 1788, 97, 97, 0, 97, 2024, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 235, 67, 67, 67,\n  /* 19996 */ 67, 67, 57889, 547, 547, 0, 0, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 1799, 45, 45, 45,\n  /* 20021 */ 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 1092, 0, 0, 0, 0, 0, 97, 97, 97, 97, 1612, 97, 97,\n  /* 20046 */ 97, 97, 1616, 97, 1297, 1472, 0, 0, 0, 0, 1303, 1474, 0, 0, 0, 0, 1309, 1476, 0, 0, 0, 0, 97, 97, 97,\n  /* 20071 */ 1481, 97, 97, 97, 97, 97, 97, 1488, 97, 0, 1474, 0, 1476, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 20096 */ 607, 97, 97, 97, 97, 40976, 18, 36884, 45078, 26, 30, 90143, 94242, 0, 102439, 106538, 98347, 0, 0,\n  /* 20115 */ 213080, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 143448, 40976, 18,\n  /* 20133 */ 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 0, 0, 0, 0, 97, 97, 97, 97, 1482, 97, 1483, 97, 97,\n  /* 20158 */ 97, 97, 97, 97, 1326, 97, 97, 1329, 1330, 97, 97, 97, 97, 97, 97, 1159, 1160, 97, 97, 97, 97, 97, 97, 97,\n  /* 20182 */ 97, 590, 97, 97, 97, 97, 97, 97, 97, 0, 94242, 0, 0, 0, 2211974, 102439, 0, 0, 106538, 98347, 0, 2158730,\n  /* 20204 */ 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2474122, 2158730, 2158730, 2494602,\n  /* 20215 */ 2158730, 2158730, 2158730, 2809994, 2158730, 2158730, 2842762, 2158730, 2158730, 2158730, 2900106,\n  /* 20226 */ 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3014794, 2158730, 2158730,\n  /* 20237 */ 3051658, 2158730, 2158730, 3100810, 2158730, 2158730, 2158730, 2158730, 3096714, 2158730, 2158730,\n  /* 20248 */ 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2207744, 2207744, 2207744,\n  /* 20259 */ 2207744, 2207744, 2572288, 2207744, 2207744, 2207744, 2207744, 541, 541, 543, 543, 0, 0, 2166784, 0, 548,\n  /* 20275 */ 549, 549, 0, 286, 2158877, 2158877, 2158877, 2863389, 2892061, 2158877, 2158877, 2158877, 2158877,\n  /* 20288 */ 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 3186973, 2158877, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 20305 */ 2367626, 2158877, 2404637, 2412829, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877,\n  /* 20316 */ 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2564381, 2158877,\n  /* 20327 */ 2158877, 2605341, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2679069, 2158877, 2695453,\n  /* 20338 */ 2158877, 2703645, 2158877, 2711837, 2752797, 2158877, 0, 2158877, 2158877, 2158877, 2384010, 2158730,\n  /* 20350 */ 2158730, 2158730, 2158730, 3006602, 2383872, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744,\n  /* 20361 */ 3096576, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744,\n  /* 20372 */ 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162688, 0, 0, 2158877, 2785565, 2158877, 2810141, 2158877, 2158877,\n  /* 20389 */ 2842909, 2158877, 2158877, 2158877, 2900253, 2158877, 2158877, 2158877, 2158877, 2158877, 2531613,\n  /* 20400 */ 2158877, 2158877, 2158877, 2158877, 2158877, 2617629, 2158877, 2158877, 2158877, 2158877, 2158730,\n  /* 20411 */ 2818186, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730,\n  /* 20422 */ 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3105053, 2158877, 2158877, 2158877, 2158877,\n  /* 20433 */ 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 0, 0, 0, 0, 0, 97, 97, 97, 1611,\n  /* 20450 */ 97, 97, 97, 97, 97, 97, 97, 1496, 97, 97, 1499, 97, 97, 97, 97, 97, 2441354, 2445450, 2158730, 2158730,\n  /* 20470 */ 2158730, 2158730, 2158730, 2158730, 2502794, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730,\n  /* 20481 */ 2158730, 2433162, 2158730, 2453642, 2461834, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730,\n  /* 20492 */ 2580618, 2158730, 2158730, 2158730, 2158730, 2621578, 2158730, 2158730, 2158730, 2158730, 2158730,\n  /* 20503 */ 2158730, 2699402, 2158730, 2158730, 2158730, 2158730, 2678922, 2158730, 2695306, 2158730, 2703498,\n  /* 20514 */ 2158730, 2711690, 2752650, 2158730, 2158730, 2785418, 2158730, 2158730, 2158730, 3113098, 2158730,\n  /* 20525 */ 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3186826, 2158730, 2207744,\n  /* 20536 */ 2207744, 2207744, 2207744, 2781184, 2793472, 2207744, 2818048, 2207744, 2207744, 2207744, 2207744,\n  /* 20547 */ 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 541, 0, 543, 2158877, 2502941,\n  /* 20561 */ 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2580765, 2158877, 2158877,\n  /* 20572 */ 2158877, 2158877, 2621725, 2158877, 3019037, 2158877, 3043613, 2158877, 2158877, 2158877, 2158877,\n  /* 20583 */ 3080477, 2158877, 2158877, 3113245, 2158877, 2158877, 2158877, 2158877, 0, 2158877, 2908445, 2158877,\n  /* 20595 */ 2158877, 2158877, 2978077, 2158877, 2158877, 2158877, 2158877, 3039517, 2158877, 2158730, 2510986,\n  /* 20606 */ 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2584714, 2158730, 2609290, 2158730,\n  /* 20617 */ 2158730, 2629770, 2158730, 2158730, 2158730, 2388106, 2158730, 2158730, 2158730, 2158730, 2158730,\n  /* 20628 */ 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2605194, 2158730, 2158730,\n  /* 20639 */ 2158730, 2158730, 2687114, 2158730, 2715786, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730,\n  /* 20650 */ 2158730, 2867338, 2158730, 2904202, 2158730, 2158730, 2158730, 2642058, 2158730, 2158730, 2158730,\n  /* 20661 */ 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2781322, 2793610, 2158730, 3121290,\n  /* 20672 */ 2158730, 2158730, 2158730, 3149962, 2158730, 2158730, 3170442, 3174538, 2158730, 2367488, 2207744,\n  /* 20683 */ 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2441216, 2445312, 2207744, 2207744, 2207744,\n  /* 20694 */ 2207744, 2207744, 2207744, 2502656, 2158877, 2433309, 2158877, 2453789, 2461981, 2158877, 2158877,\n  /* 20705 */ 2158877, 2158877, 2158877, 2158877, 2511133, 2158877, 2158877, 2158877, 2158877, 2584861, 2158877,\n  /* 20716 */ 2609437, 2158877, 2158877, 2629917, 2158877, 2158877, 2158877, 2687261, 2158877, 2715933, 2158877,\n  /* 20727 */ 2158730, 2158730, 2973834, 2158730, 2982026, 2158730, 2158730, 3002506, 2158730, 3047562, 3063946,\n  /* 20738 */ 3076234, 2158730, 2158730, 2158730, 2158730, 2207744, 2506752, 2207744, 2207744, 2207744, 2207744,\n  /* 20749 */ 2207744, 2158877, 2507037, 0, 0, 2158877, 2158730, 2158730, 2158730, 3203210, 2207744, 2207744, 2207744,\n  /* 20762 */ 2207744, 2207744, 2424832, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744,\n  /* 20773 */ 2207744, 2207744, 2207744, 2207744, 2564096, 2207744, 2207744, 2207744, 2707741, 2732317, 2158877,\n  /* 20784 */ 2158877, 2158877, 2822429, 2826525, 2158877, 2896157, 2158877, 2158877, 2924829, 2158877, 2158877,\n  /* 20795 */ 2973981, 2158877, 18, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 642, 0, 2158592, 0, 45, 1529, 45, 45, 45, 45,\n  /* 20818 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 1755, 45, 67, 67, 2982173, 2158877, 2158877, 3002653, 2158877,\n  /* 20836 */ 3047709, 3064093, 3076381, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 3203357,\n  /* 20847 */ 2523274, 2527370, 2158730, 2158730, 2576522, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730,\n  /* 20858 */ 2158730, 2158730, 2158730, 2158730, 2908298, 2494749, 2158877, 2158877, 2158877, 2523421, 2527517,\n  /* 20869 */ 2158877, 2158877, 2576669, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 0, 40976, 0, 18, 18,\n  /* 20883 */ 4321280, 2224253, 2232448, 4329472, 2232448, 2158730, 2498698, 2158730, 2158730, 2158730, 2158730,\n  /* 20894 */ 2568330, 2158730, 2592906, 2625674, 2158730, 2158730, 2674826, 2736266, 2158730, 2158730, 2158730,\n  /* 20905 */ 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744,\n  /* 20916 */ 2207744, 2207744, 2207744, 2158730, 2912394, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730,\n  /* 20927 */ 2158730, 3109002, 2158730, 2158730, 3133578, 3145866, 3154058, 2375680, 2207744, 3108864, 2207744,\n  /* 20938 */ 2207744, 3133440, 3145728, 3153920, 2375965, 2380061, 2158877, 2158877, 2421021, 2158877, 2449693,\n  /* 20949 */ 2158877, 2158877, 2158877, 3117341, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730,\n  /* 20960 */ 2158730, 2158730, 2158730, 2158730, 2158730, 3104906, 2158730, 2158730, 2158730, 2158730, 2158730,\n  /* 20971 */ 2158730, 2158877, 2498845, 2158877, 2158877, 0, 2158877, 2158877, 2568477, 2158877, 2593053, 2625821,\n  /* 20983 */ 2158877, 2158877, 2674973, 0, 0, 0, 0, 97, 97, 1480, 97, 97, 97, 97, 97, 1485, 97, 97, 97, 0, 97, 97,\n  /* 21005 */ 1729, 97, 1731, 97, 97, 97, 97, 97, 97, 97, 311, 97, 97, 97, 97, 97, 97, 97, 97, 1520, 97, 97, 1523, 97,\n  /* 21029 */ 97, 1526, 97, 2736413, 2158877, 2158877, 0, 2158877, 2912541, 2158877, 2158877, 2158877, 2158877, 2158877,\n  /* 21043 */ 2158877, 2158877, 3109149, 2158877, 2158877, 3014941, 2158877, 2158877, 3051805, 2158877, 2158877,\n  /* 21054 */ 3100957, 2158877, 2158877, 3121437, 2158877, 2158877, 2158877, 3150109, 3133725, 3146013, 3154205,\n  /* 21065 */ 2158730, 2408586, 2416778, 2158730, 2465930, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730,\n  /* 21076 */ 2158730, 2158730, 3018890, 2158730, 3043466, 2158730, 2158730, 2158730, 2158730, 3080330, 2633866,\n  /* 21087 */ 2658442, 2740362, 2744458, 2834570, 2949258, 2158730, 2986122, 2158730, 2998410, 2158730, 2158730,\n  /* 21098 */ 2158730, 3129482, 2207744, 2408448, 2949120, 2207744, 2985984, 2207744, 2998272, 2207744, 2207744,\n  /* 21109 */ 2207744, 3129344, 2158877, 2408733, 2416925, 2158877, 2466077, 2158877, 2158877, 3170589, 3174685,\n  /* 21120 */ 2158877, 0, 0, 0, 2158730, 2158730, 2158730, 2158730, 2158730, 2424970, 2158730, 2158730, 2158730,\n  /* 21133 */ 2158730, 2707594, 2732170, 2158730, 2158730, 2158730, 2822282, 2826378, 2158730, 2896010, 2158730,\n  /* 21144 */ 2158730, 2924682, 2949405, 2158877, 2986269, 2158877, 2998557, 2158877, 2158877, 2158877, 3129629,\n  /* 21155 */ 2158730, 2158730, 2478218, 2158730, 2158730, 2158730, 2535562, 2543754, 2158730, 2158730, 2158730,\n  /* 21166 */ 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3117194, 2207744, 2207744, 2478080, 2207744,\n  /* 21177 */ 2207744, 2207744, 2207744, 3014656, 2207744, 2207744, 3051520, 2207744, 2207744, 3100672, 2207744,\n  /* 21188 */ 2207744, 3121152, 2207744, 2207744, 2207744, 2207744, 2207744, 2584576, 2207744, 2609152, 2207744,\n  /* 21199 */ 2207744, 2629632, 2207744, 2207744, 2207744, 2686976, 2207744, 2207744, 2535424, 2543616, 2207744,\n  /* 21210 */ 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3117056, 2158877, 2158877,\n  /* 21221 */ 2478365, 0, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158730, 2158730, 2482314, 2158730,\n  /* 21233 */ 2158730, 2158730, 2158730, 2158730, 2158730, 2207744, 2207744, 2207744, 2387968, 2207744, 2207744,\n  /* 21244 */ 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 823, 0, 825,\n  /* 21258 */ 2158730, 2158730, 2158730, 2990218, 2158730, 2158730, 2207744, 2207744, 2482176, 2207744, 2207744,\n  /* 21269 */ 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162688, 135, 0, 2207744, 2207744, 2990080,\n  /* 21286 */ 2207744, 2207744, 2158877, 2158877, 2482461, 2158877, 2158877, 0, 0, 0, 2158877, 2158877, 2158877,\n  /* 21299 */ 2158877, 2158877, 2158730, 2429066, 2158730, 2515082, 2158730, 2588810, 2158730, 2838666, 2158730,\n  /* 21310 */ 2158730, 2158730, 3010698, 2207744, 2428928, 2207744, 2514944, 2207744, 2588672, 2207744, 2838528,\n  /* 21321 */ 2207744, 2207744, 2207744, 3010560, 2158877, 2429213, 2158877, 2515229, 0, 0, 2158877, 2588957, 2158877,\n  /* 21334 */ 0, 2838813, 2158877, 2158877, 2158877, 3010845, 2158730, 2506890, 2158730, 2158730, 2158730, 2748554,\n  /* 21346 */ 2756746, 2777226, 2801802, 2158730, 2158730, 2158730, 2863242, 2891914, 2158730, 2158730, 2158730,\n  /* 21357 */ 2158730, 2158730, 2158730, 2564234, 2158730, 2158730, 2158730, 2158730, 2158730, 2597002, 2158730,\n  /* 21368 */ 2158730, 2158730, 3006464, 2384157, 0, 0, 2158877, 2158877, 2158877, 2158877, 3006749, 2158730, 2637962,\n  /* 21381 */ 2953354, 2158730, 2207744, 2637824, 2953216, 2207744, 0, 0, 2158877, 2638109, 2953501, 2158877, 2539658,\n  /* 21394 */ 2158730, 2539520, 2207744, 0, 0, 2539805, 2158877, 2158730, 2158730, 2158730, 2977930, 2158730, 2158730,\n  /* 21407 */ 2158730, 2158730, 3039370, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3158154, 2207744, 0,\n  /* 21419 */ 2158877, 2158730, 2207744, 0, 2158877, 2158730, 2207744, 0, 2158877, 2965642, 2965504, 2965789, 0, 0, 0,\n  /* 21434 */ 0, 1315, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1484, 97, 97, 97, 97, 2158592, 18, 0, 122880, 0, 0, 0,\n  /* 21459 */ 77824, 0, 2211840, 0, 0, 0, 0, 2158592, 0, 356, 0, 0, 0, 0, 0, 0, 28809, 0, 139, 45, 45, 45, 45, 45, 45,\n  /* 21484 */ 1751, 45, 45, 45, 45, 45, 45, 45, 67, 67, 1427, 67, 67, 67, 67, 67, 1432, 67, 67, 67, 3104768, 2158592,\n  /* 21506 */ 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 122880,\n  /* 21518 */ 0, 0, 0, 0, 1315, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 1322, 550, 0, 286, 0, 2158592, 2158592, 2158592,\n  /* 21541 */ 2158592, 2158592, 2424832, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 24,\n  /* 21556 */ 24, 4329472, 27, 27, 2207744, 2207744, 2977792, 2207744, 2207744, 2207744, 2207744, 3039232, 2207744,\n  /* 21569 */ 2207744, 2207744, 2207744, 2207744, 2207744, 3158016, 542, 0, 0, 0, 542, 0, 544, 0, 0, 0, 544, 0, 550, 0,\n  /* 21589 */ 0, 0, 0, 0, 97, 97, 1610, 97, 97, 97, 97, 97, 97, 97, 97, 898, 97, 97, 97, 97, 97, 97, 97, 0, 94242, 0, 0,\n  /* 21616 */ 0, 2211840, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2424832, 2158592, 2158592,\n  /* 21632 */ 2158592, 2158592, 2158592, 2158592, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 237568, 102439, 106538,\n  /* 21647 */ 98347, 0, 0, 20480, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 192512,\n  /* 21666 */ 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 94, 40976, 18, 36884,\n  /* 21684 */ 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 96, 40976, 18, 36884, 45078, 24, 27, 90143,\n  /* 21703 */ 94242, 0, 102439, 106538, 98347, 0, 0, 12378, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 126, 126,\n  /* 21723 */ 126, 126, 90143, 0, 0, 2170880, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592,\n  /* 21740 */ 2158592, 2158592, 2158592, 20480, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 40976, 18, 36884, 45078, 24, 27,\n  /* 21759 */ 90143, 94242, 241664, 102439, 106538, 98347, 0, 0, 20568, 40976, 18, 36884, 45078, 24, 27, 90143, 94242,\n  /* 21776 */ 0, 102439, 106538, 98347, 0, 0, 200797, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538,\n  /* 21794 */ 98347, 0, 0, 20480, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 0, 0, 44, 0, 0, 20575, 40976, 18,\n  /* 21815 */ 36884, 45078, 24, 27, 90143, 94242, 0, 41, 41, 41, 0, 0, 1126400, 40976, 18, 36884, 45078, 24, 27, 90143,\n  /* 21835 */ 94242, 0, 102439, 106538, 98347, 0, 0, 0, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439,\n  /* 21853 */ 106538, 98347, 0, 0, 89, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 131201, 27, 27, 90143, 0, 0,\n  /* 21875 */ 2170880, 0, 0, 550, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592,\n  /* 21889 */ 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2441216, 2445312, 2158592, 2158592,\n  /* 21900 */ 2158592, 2158592, 2158592, 0, 94242, 0, 0, 208896, 2211840, 102439, 0, 0, 106538, 98347, 0, 2158592,\n  /* 21916 */ 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 0, 0, 0, 0, 0, 0, 0, 0, 2367488, 32768, 0, 0, 0, 0,\n  /* 21936 */ 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2433024, 2158592,\n  /* 21949 */ 2453504, 2461696, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2510848, 2158592, 2158592,\n  /* 21960 */ 2158592, 2158592, 40976, 18, 36884, 245783, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 20480,\n  /* 21977 */ 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 221184, 40976, 18, 36884,\n  /* 21995 */ 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 180224, 40976, 18, 18, 36884, 155648, 45078,\n  /* 22013 */ 0, 24, 24, 217088, 27, 27, 27, 217088, 90143, 0, 0, 2170880, 0, 0, 828, 0, 2158592, 2158592, 2158592,\n  /* 22032 */ 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2207744, 2207744, 2207744, 2387968,\n  /* 22043 */ 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162688, 233472, 0, 0,\n  /* 22060 */ 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 45, 45, 718, 45, 45, 45, 45, 45, 45,\n  /* 22083 */ 45, 45, 45, 727, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 45, 1808, 45, 45,\n  /* 22107 */ 45, 45, 67, 67, 67, 67, 67, 67, 67, 97, 97, 0, 0, 97, 67, 24850, 24850, 12564, 12564, 0, 57889, 0, 0, 0,\n  /* 22131 */ 53531, 53531, 367, 286, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 1787, 0, 97, 97, 0, 97, 97, 97, 45, 45, 45,\n  /* 22156 */ 45, 2029, 45, 67, 67, 67, 67, 2033, 57889, 0, 0, 54074, 54074, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 22180 */ 45, 1798, 45, 45, 1800, 45, 45, 0, 1472, 0, 0, 0, 0, 0, 1474, 0, 0, 0, 0, 0, 1476, 0, 0, 0, 0, 1315, 0, 0,\n  /* 22208 */ 0, 0, 97, 97, 97, 97, 1320, 97, 97, 0, 0, 97, 97, 97, 97, 1786, 97, 0, 0, 97, 97, 0, 1790, 1527, 45, 45,\n  /* 22234 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 663, 67, 24850, 24850, 12564, 12564, 0, 57889, 281, 0,\n  /* 22257 */ 0, 53531, 53531, 367, 286, 97, 97, 0, 0, 97, 97, 97, 1785, 97, 97, 0, 0, 97, 97, 0, 97, 97, 1979, 97, 97,\n  /* 22282 */ 45, 45, 1983, 45, 1984, 45, 45, 45, 45, 45, 652, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 690, 45, 45, 694,\n  /* 22307 */ 45, 45, 40976, 19, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 262144, 40976, 18,\n  /* 22326 */ 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 46, 67, 98, 40976, 18, 36884, 45078, 24,\n  /* 22344 */ 27, 90143, 94242, 38, 102439, 106538, 98347, 45, 67, 97, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0,\n  /* 22363 */ 102439, 106538, 98347, 0, 0, 258048, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538,\n  /* 22380 */ 98347, 0, 0, 1122423, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 1114152, 1114152, 1114152, 0, 0,\n  /* 22398 */ 1114112, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 37, 102439, 106538, 98347, 0, 0, 204800, 40976,\n  /* 22415 */ 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 57436, 40976, 18, 36884, 45078,\n  /* 22433 */ 24, 27, 33, 33, 0, 33, 33, 33, 0, 0, 0, 40976, 18, 18, 36884, 0, 45078, 0, 124, 124, 124, 127, 127, 127,\n  /* 22457 */ 127, 90143, 0, 0, 2170880, 0, 0, 550, 0, 2158877, 2158877, 2158877, 2388253, 2158877, 2158877, 2158877,\n  /* 22473 */ 2158877, 2158877, 2781469, 2793757, 2158877, 2818333, 2158877, 2158877, 2158877, 2158877, 2158877,\n  /* 22484 */ 2158877, 2158877, 2867485, 2158877, 2904349, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877,\n  /* 22495 */ 2158877, 3096861, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877,\n  /* 22506 */ 2441501, 2445597, 2158877, 2158877, 2158877, 2158877, 2158877, 40976, 122, 123, 36884, 0, 45078, 0, 24,\n  /* 22521 */ 24, 24, 27, 27, 27, 27, 90143, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 936, 2158592,\n  /* 22545 */ 4243810, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 2158592, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45,\n  /* 22571 */ 45, 45, 935, 45, 45, 45, 715, 45, 45, 45, 45, 45, 45, 45, 723, 45, 45, 45, 45, 45, 1182, 45, 45, 45, 45,\n  /* 22596 */ 45, 45, 45, 45, 45, 45, 430, 45, 45, 45, 45, 45, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38,\n  /* 22617 */ 102439, 106538, 98347, 47, 68, 99, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538,\n  /* 22634 */ 98347, 48, 69, 100, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 49, 70, 101,\n  /* 22653 */ 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 50, 71, 102, 40976, 18, 36884,\n  /* 22671 */ 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 51, 72, 103, 40976, 18, 36884, 45078, 24, 27,\n  /* 22689 */ 90143, 94242, 38, 102439, 106538, 98347, 52, 73, 104, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38,\n  /* 22707 */ 102439, 106538, 98347, 53, 74, 105, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538,\n  /* 22724 */ 98347, 54, 75, 106, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 55, 76, 107,\n  /* 22743 */ 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 56, 77, 108, 40976, 18, 36884,\n  /* 22761 */ 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 57, 78, 109, 40976, 18, 36884, 45078, 24, 27,\n  /* 22779 */ 90143, 94242, 38, 102439, 106538, 98347, 58, 79, 110, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38,\n  /* 22797 */ 102439, 106538, 98347, 59, 80, 111, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538,\n  /* 22814 */ 98347, 60, 81, 112, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 61, 82, 113,\n  /* 22833 */ 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 62, 83, 114, 40976, 18, 36884,\n  /* 22851 */ 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 63, 84, 115, 40976, 18, 36884, 45078, 24, 27,\n  /* 22869 */ 90143, 94242, 38, 102439, 106538, 98347, 64, 85, 116, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38,\n  /* 22887 */ 102439, 106538, 98347, 65, 86, 117, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538,\n  /* 22904 */ 98347, 66, 87, 118, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 118820, 102439, 106538, 98347, 118820,\n  /* 22921 */ 118820, 118820, 40976, 18, 18, 0, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 1314, 0, 0, 0, 0,\n  /* 22945 */ 0, 0, 97, 97, 97, 97, 97, 1321, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 0, 367, 0, 0, 1315, 0,\n  /* 22972 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1360, 97, 97, 131, 94242, 0, 0, 0, 38, 102439, 0, 0,\n  /* 22997 */ 106538, 98347, 28809, 45, 45, 45, 145, 149, 45, 45, 45, 45, 45, 174, 45, 179, 45, 185, 45, 188, 45, 45,\n  /* 23019 */ 202, 67, 255, 67, 67, 269, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 292, 296, 97,\n  /* 23042 */ 97, 97, 97, 97, 321, 97, 326, 97, 332, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 646,\n  /* 23067 */ 335, 97, 97, 349, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 437, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 23092 */ 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 523, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 23118 */ 511, 67, 67, 67, 97, 97, 97, 620, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1501, 1502, 97, 793,\n  /* 23143 */ 67, 67, 796, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 808, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0,\n  /* 23170 */ 97, 97, 2052, 67, 67, 67, 67, 813, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 57889, 0, 0, 54074,\n  /* 23193 */ 54074, 550, 830, 97, 97, 97, 97, 97, 97, 97, 97, 97, 315, 97, 97, 97, 97, 97, 97, 841, 97, 97, 97, 97, 97,\n  /* 23218 */ 97, 97, 97, 97, 854, 97, 97, 97, 97, 97, 97, 589, 97, 97, 97, 97, 97, 97, 97, 97, 97, 867, 97, 97, 97, 97,\n  /* 23244 */ 97, 97, 97, 891, 97, 97, 894, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 906, 45, 937, 45, 45, 940, 45, 45,\n  /* 23269 */ 45, 45, 45, 45, 948, 45, 45, 45, 45, 45, 734, 735, 67, 737, 67, 738, 67, 740, 67, 67, 67, 45, 967, 45, 45,\n  /* 23294 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 435, 45, 45, 45, 980, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 23320 */ 45, 45, 45, 45, 415, 45, 45, 67, 67, 1024, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97,\n  /* 23346 */ 67, 67, 67, 67, 67, 25398, 1081, 13112, 1085, 54074, 1089, 0, 0, 0, 0, 0, 0, 363, 0, 28809, 0, 139, 45,\n  /* 23369 */ 45, 45, 45, 45, 45, 1674, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1913, 67, 1914, 67, 67, 67, 1918, 67, 67,\n  /* 23393 */ 97, 97, 97, 97, 1118, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 630, 97, 97, 97, 97, 97, 1169, 97, 97,\n  /* 23418 */ 97, 97, 97, 0, 921, 0, 1175, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 1534, 45, 45, 45, 45, 45, 1538, 45, 45,\n  /* 23444 */ 45, 45, 1233, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 742, 67, 45, 45, 1191, 45, 45, 45,\n  /* 23469 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 454, 67, 67, 67, 67, 1243, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 23495 */ 67, 1251, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 2050, 0, 97, 97, 45, 45, 45, 732, 45, 45, 67, 67, 67,\n  /* 23521 */ 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 67, 67, 67, 1284, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 23547 */ 67, 772, 67, 67, 67, 1293, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 368, 2158592, 2158592,\n  /* 23572 */ 2158592, 2404352, 2412544, 1323, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1331, 97, 97, 97, 0, 97, 97,\n  /* 23594 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 1737, 97, 1364, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1373,\n  /* 23619 */ 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 647, 45, 45, 1387, 45, 45, 1391, 45, 45, 45,\n  /* 23644 */ 45, 45, 45, 45, 45, 45, 45, 410, 45, 45, 45, 45, 45, 1400, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1407,\n  /* 23669 */ 45, 45, 45, 45, 45, 941, 45, 943, 45, 45, 45, 45, 45, 45, 951, 45, 67, 1438, 67, 67, 67, 67, 67, 67, 67,\n  /* 23694 */ 67, 67, 67, 1447, 67, 67, 67, 67, 67, 67, 782, 67, 67, 67, 67, 67, 67, 67, 67, 67, 756, 67, 67, 67, 67,\n  /* 23719 */ 67, 67, 97, 1491, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1500, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97,\n  /* 23745 */ 97, 97, 97, 1736, 97, 45, 45, 1541, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 677, 45, 45, 67,\n  /* 23770 */ 1581, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 791, 792, 67, 67, 67, 67, 1598, 67, 1600,\n  /* 23794 */ 67, 67, 67, 67, 67, 67, 67, 67, 1472, 97, 97, 97, 1727, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 23819 */ 97, 1513, 97, 97, 67, 67, 97, 1879, 97, 1881, 97, 0, 1884, 0, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 0,\n  /* 23845 */ 0, 0, 1842, 97, 97, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1928, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45,\n  /* 23872 */ 45, 45, 1903, 45, 45, 45, 67, 67, 67, 67, 97, 97, 97, 97, 1971, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 97,\n  /* 23898 */ 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 1381, 45, 45, 45, 45, 1976, 97, 97, 97, 97, 97, 45, 45, 45, 45,\n  /* 23924 */ 45, 45, 45, 45, 45, 45, 45, 45, 1747, 809, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112,\n  /* 23948 */ 544, 97, 907, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 638, 0, 0, 0, 0, 1478, 97, 97, 97, 97, 97, 97,\n  /* 23974 */ 97, 97, 97, 97, 97, 1150, 97, 97, 97, 97, 67, 67, 67, 67, 1244, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 23999 */ 67, 477, 67, 67, 67, 67, 67, 67, 1294, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97,\n  /* 24027 */ 97, 97, 97, 97, 97, 97, 97, 97, 1324, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 1374,\n  /* 24053 */ 97, 97, 97, 97, 0, 1175, 0, 45, 45, 45, 45, 45, 45, 45, 45, 945, 45, 45, 45, 45, 45, 45, 45, 45, 1908, 45,\n  /* 24079 */ 45, 1910, 45, 67, 67, 67, 67, 67, 67, 67, 67, 1919, 67, 0, 0, 97, 97, 97, 97, 45, 2048, 67, 2049, 0, 0,\n  /* 24104 */ 97, 2051, 45, 45, 45, 939, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 397, 45, 45, 45, 1921, 67, 67,\n  /* 24129 */ 1923, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 1947, 45, 1935, 0, 0, 0,\n  /* 24155 */ 97, 1939, 97, 97, 1941, 97, 45, 45, 45, 45, 45, 45, 382, 389, 45, 45, 45, 45, 45, 45, 45, 45, 1810, 45,\n  /* 24179 */ 45, 1812, 67, 67, 67, 67, 67, 256, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 336, 97,\n  /* 24203 */ 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139,\n  /* 24228 */ 45, 45, 371, 373, 45, 45, 45, 955, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 413, 45, 45, 45, 457,\n  /* 24253 */ 459, 67, 67, 67, 67, 67, 67, 67, 67, 473, 67, 478, 67, 67, 482, 67, 67, 485, 67, 67, 67, 67, 67, 67, 67,\n  /* 24278 */ 67, 67, 67, 67, 67, 67, 97, 1828, 97, 554, 556, 97, 97, 97, 97, 97, 97, 97, 97, 570, 97, 575, 97, 97, 579,\n  /* 24303 */ 97, 97, 582, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 330, 97, 97, 67, 746, 67, 67, 67, 67, 67,\n  /* 24329 */ 67, 67, 67, 67, 758, 67, 67, 67, 67, 67, 67, 67, 1575, 67, 67, 67, 67, 67, 67, 67, 67, 493, 67, 67, 67,\n  /* 24354 */ 67, 67, 67, 67, 97, 97, 844, 97, 97, 97, 97, 97, 97, 97, 97, 97, 856, 97, 97, 97, 0, 97, 97, 97, 97, 97,\n  /* 24380 */ 97, 97, 97, 1735, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 1642, 97, 1644, 97, 97, 890, 97, 97, 97, 97,\n  /* 24405 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 67, 67, 67, 67, 1065, 1066, 67, 67, 67, 67, 67, 67, 67,\n  /* 24431 */ 67, 67, 67, 532, 67, 67, 67, 67, 67, 67, 67, 1451, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 24456 */ 496, 67, 67, 97, 97, 1505, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 593, 97, 97, 0, 1474, 0,\n  /* 24481 */ 1476, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1617, 97, 97, 1635, 0, 1637, 97, 97, 97, 97, 97, 97, 97,\n  /* 24506 */ 97, 97, 97, 97, 885, 97, 97, 97, 97, 67, 67, 1704, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 24531 */ 565, 572, 97, 97, 97, 97, 97, 97, 97, 97, 1832, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97,\n  /* 24557 */ 45, 45, 45, 1946, 45, 45, 67, 67, 67, 67, 67, 97, 1926, 97, 1927, 97, 0, 0, 0, 97, 97, 1934, 2043, 0, 0,\n  /* 24582 */ 97, 97, 97, 2047, 45, 45, 67, 67, 0, 1832, 97, 97, 45, 45, 45, 981, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 24607 */ 45, 45, 45, 1227, 45, 45, 45, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 372, 45, 45, 45,\n  /* 24631 */ 45, 1661, 1662, 45, 45, 45, 45, 45, 1666, 45, 45, 45, 45, 45, 1673, 45, 1675, 45, 45, 45, 45, 45, 45, 45,\n  /* 24655 */ 67, 1426, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1275, 67, 67, 67, 67, 67, 45, 418, 45, 45, 420, 45, 45,\n  /* 24680 */ 423, 45, 45, 45, 45, 45, 45, 45, 45, 959, 45, 45, 962, 45, 45, 45, 45, 458, 67, 67, 67, 67, 67, 67, 67,\n  /* 24705 */ 67, 67, 67, 67, 67, 67, 67, 483, 67, 67, 67, 67, 504, 67, 67, 506, 67, 67, 509, 67, 67, 67, 67, 67, 67,\n  /* 24730 */ 67, 528, 67, 67, 67, 67, 67, 67, 67, 67, 1287, 67, 67, 67, 67, 67, 67, 67, 555, 97, 97, 97, 97, 97, 97,\n  /* 24755 */ 97, 97, 97, 97, 97, 97, 97, 97, 580, 97, 97, 97, 97, 601, 97, 97, 603, 97, 97, 606, 97, 97, 97, 97, 97,\n  /* 24780 */ 97, 848, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1498, 97, 97, 97, 97, 97, 97, 45, 45, 714, 45, 45, 45, 45,\n  /* 24805 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 989, 990, 45, 67, 67, 67, 67, 67, 1011, 67, 67, 67, 67, 1015, 67, 67,\n  /* 24830 */ 67, 67, 67, 67, 67, 753, 67, 67, 67, 67, 67, 67, 67, 67, 467, 67, 67, 67, 67, 67, 67, 67, 45, 45, 1179,\n  /* 24855 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1003, 1004, 67, 1217, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 24880 */ 45, 45, 45, 45, 45, 45, 45, 728, 67, 1461, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1034,\n  /* 24905 */ 67, 97, 1516, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 871, 97, 67, 67, 67, 1705, 67, 67,\n  /* 24930 */ 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 567, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1715, 97, 97, 97, 97,\n  /* 24956 */ 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 1380, 45, 45, 45, 45, 45, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97,\n  /* 24983 */ 1887, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 2006, 45, 45, 1907, 45, 45, 45, 45, 45, 67, 67, 67,\n  /* 25009 */ 67, 67, 67, 67, 67, 67, 1920, 67, 97, 0, 2035, 97, 97, 97, 97, 97, 45, 45, 45, 45, 67, 67, 67, 1428, 67,\n  /* 25034 */ 67, 67, 67, 67, 67, 1435, 67, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 146,\n  /* 25057 */ 45, 152, 45, 45, 165, 45, 175, 45, 180, 45, 45, 187, 190, 195, 45, 203, 254, 257, 262, 67, 270, 67, 67, 0,\n  /* 25081 */ 24850, 12564, 0, 0, 0, 281, 28809, 53531, 97, 97, 97, 293, 97, 299, 97, 97, 312, 97, 322, 97, 327, 97, 97,\n  /* 25104 */ 334, 337, 342, 97, 350, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 67, 484, 67, 67, 67, 67, 67, 67,\n  /* 25129 */ 67, 67, 67, 67, 67, 67, 67, 499, 97, 581, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 596, 648,\n  /* 25154 */ 45, 650, 45, 651, 45, 653, 45, 45, 45, 657, 45, 45, 45, 45, 45, 45, 1954, 67, 67, 67, 1958, 67, 67, 67,\n  /* 25178 */ 67, 67, 67, 67, 768, 67, 67, 67, 67, 67, 67, 67, 67, 769, 67, 67, 67, 67, 67, 67, 67, 680, 45, 45, 45, 45,\n  /* 25204 */ 45, 45, 45, 45, 688, 689, 691, 45, 45, 45, 45, 45, 983, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 947, 45,\n  /* 25229 */ 45, 45, 45, 952, 45, 45, 698, 699, 45, 45, 702, 703, 45, 45, 45, 45, 45, 45, 45, 711, 744, 67, 67, 67, 67,\n  /* 25254 */ 67, 67, 67, 67, 67, 757, 67, 67, 67, 67, 761, 67, 67, 67, 67, 765, 67, 767, 67, 67, 67, 67, 67, 67, 67,\n  /* 25279 */ 67, 775, 776, 778, 67, 67, 67, 67, 67, 67, 785, 786, 67, 67, 789, 790, 67, 67, 67, 67, 67, 67, 1442, 67,\n  /* 25303 */ 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 1775, 97, 97, 97, 67, 67, 67, 67, 67, 798, 67, 67, 67, 802,\n  /* 25328 */ 67, 67, 67, 67, 67, 67, 67, 67, 1465, 67, 67, 1468, 67, 67, 1471, 67, 67, 810, 67, 67, 67, 67, 67, 67, 67,\n  /* 25353 */ 67, 67, 821, 25398, 542, 13112, 544, 57889, 0, 0, 54074, 54074, 550, 0, 833, 97, 835, 97, 836, 97, 838,\n  /* 25374 */ 97, 97, 0, 0, 97, 97, 97, 2002, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 1740, 45, 45, 45, 1744, 45, 45,\n  /* 25399 */ 45, 97, 842, 97, 97, 97, 97, 97, 97, 97, 97, 97, 855, 97, 97, 97, 97, 0, 1717, 1718, 97, 97, 97, 97, 97,\n  /* 25424 */ 1722, 97, 0, 0, 859, 97, 97, 97, 97, 863, 97, 865, 97, 97, 97, 97, 97, 97, 97, 97, 604, 97, 97, 97, 97,\n  /* 25449 */ 97, 97, 97, 873, 874, 876, 97, 97, 97, 97, 97, 97, 883, 884, 97, 97, 887, 888, 97, 18, 131427, 0, 0, 0, 0,\n  /* 25474 */ 0, 0, 362, 225280, 0, 365, 0, 367, 0, 45, 45, 45, 1531, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1199,\n  /* 25499 */ 45, 45, 45, 45, 45, 97, 97, 908, 97, 97, 97, 97, 97, 97, 97, 97, 97, 919, 638, 0, 0, 0, 0, 2158877,\n  /* 25523 */ 2158877, 2158877, 2158877, 2158877, 2425117, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877,\n  /* 25534 */ 2597149, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2642205, 2158877, 2158877, 2158877,\n  /* 25545 */ 2158877, 2158877, 3158301, 0, 2375818, 2379914, 2158730, 2158730, 2420874, 2158730, 2449546, 2158730,\n  /* 25557 */ 2158730, 953, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 965, 978, 45, 45, 45, 45, 45,\n  /* 25581 */ 45, 985, 45, 45, 45, 45, 45, 45, 45, 45, 971, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1027, 67,\n  /* 25606 */ 1029, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1455, 67, 67, 67, 67, 67, 67, 67, 1077, 1078, 67, 67, 25398, 0,\n  /* 25630 */ 13112, 0, 54074, 0, 0, 0, 0, 0, 0, 0, 0, 366, 0, 139, 2158730, 2158730, 2158730, 2404490, 2412682, 1113,\n  /* 25650 */ 97, 97, 97, 97, 97, 97, 1121, 97, 1123, 97, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 25676 */ 45, 45, 45, 45, 1540, 1155, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 615, 1168, 97, 97,\n  /* 25701 */ 1171, 1172, 97, 97, 0, 921, 0, 1175, 0, 0, 0, 0, 45, 45, 45, 45, 45, 1533, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 25727 */ 45, 1663, 45, 45, 45, 45, 45, 45, 45, 45, 45, 183, 45, 45, 45, 45, 201, 45, 45, 45, 1219, 45, 45, 45, 45,\n  /* 25752 */ 45, 45, 45, 1226, 45, 45, 45, 45, 45, 168, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 427, 45, 45, 45, 45,\n  /* 25777 */ 45, 45, 45, 1231, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1242, 67,\n  /* 25802 */ 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1046, 67, 67, 1254, 67, 1256, 67, 67, 67, 67, 67, 67,\n  /* 25827 */ 67, 67, 67, 67, 67, 67, 806, 807, 67, 67, 97, 1336, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 25852 */ 97, 1111, 97, 97, 97, 97, 97, 1351, 97, 97, 97, 1354, 97, 97, 97, 1359, 97, 97, 97, 0, 97, 97, 97, 97,\n  /* 25876 */ 1640, 97, 97, 97, 97, 97, 97, 97, 897, 97, 97, 97, 902, 97, 97, 97, 97, 97, 97, 97, 97, 1366, 97, 97, 97,\n  /* 25901 */ 97, 97, 97, 97, 1371, 97, 97, 97, 0, 97, 97, 97, 1730, 97, 97, 97, 97, 97, 97, 97, 97, 915, 97, 97, 97,\n  /* 25926 */ 97, 0, 360, 0, 67, 67, 67, 1440, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1017, 67, 1019, 67, 67,\n  /* 25951 */ 67, 67, 67, 1453, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1459, 97, 97, 97, 1493, 97, 97, 97, 97, 97, 97,\n  /* 25976 */ 97, 97, 97, 97, 97, 97, 97, 1525, 97, 97, 97, 97, 97, 97, 1507, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 26001 */ 1514, 67, 67, 67, 67, 1584, 67, 67, 67, 67, 67, 1590, 67, 67, 67, 67, 67, 67, 67, 783, 67, 67, 67, 788,\n  /* 26025 */ 67, 67, 67, 67, 67, 67, 67, 67, 67, 1599, 1601, 67, 67, 67, 1604, 67, 1606, 1607, 67, 1472, 0, 1474, 0,\n  /* 26048 */ 1476, 0, 97, 97, 97, 97, 97, 97, 1614, 97, 97, 97, 97, 45, 45, 1850, 45, 45, 45, 45, 1855, 45, 45, 45, 45,\n  /* 26073 */ 45, 1222, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1229, 97, 1618, 97, 97, 97, 97, 97, 97, 97, 1625, 97, 97,\n  /* 26097 */ 97, 97, 97, 0, 1175, 0, 45, 45, 45, 45, 45, 45, 45, 45, 447, 45, 45, 45, 45, 45, 67, 67, 1633, 97, 97, 0,\n  /* 26123 */ 97, 97, 97, 97, 97, 97, 97, 97, 1643, 1645, 97, 97, 0, 0, 97, 97, 1784, 97, 97, 97, 0, 0, 97, 97, 0, 97,\n  /* 26149 */ 1894, 1895, 97, 1897, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 656, 45, 45, 45, 45, 45, 45, 97, 1648, 97,\n  /* 26173 */ 1650, 1651, 97, 0, 45, 45, 45, 1654, 45, 45, 45, 45, 45, 169, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 658,\n  /* 26198 */ 45, 45, 45, 45, 664, 45, 45, 1659, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1187, 45, 45, 1669,\n  /* 26223 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1005, 67, 67, 1681, 67, 67, 67, 67, 67, 67,\n  /* 26248 */ 67, 1686, 67, 67, 67, 67, 67, 67, 67, 784, 67, 67, 67, 67, 67, 67, 67, 67, 1055, 67, 67, 67, 67, 1060, 67,\n  /* 26273 */ 67, 97, 97, 1713, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 1378, 45, 45, 45, 45, 45, 45, 45,\n  /* 26299 */ 408, 45, 45, 45, 45, 45, 45, 45, 45, 1547, 45, 1549, 45, 45, 45, 45, 45, 97, 97, 1780, 0, 97, 97, 97, 97,\n  /* 26324 */ 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 45, 2027, 2028, 45, 45, 67, 67, 2031, 2032, 67, 45, 45, 1804, 45,\n  /* 26349 */ 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1917, 67, 67, 67, 67, 67, 67, 67, 1819, 67, 67, 67,\n  /* 26374 */ 67, 67, 67, 67, 67, 97, 97, 97, 1708, 97, 97, 97, 97, 97, 45, 45, 1862, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 26399 */ 67, 67, 67, 67, 67, 497, 67, 67, 67, 1877, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 0, 97, 97, 97,\n  /* 26426 */ 97, 97, 1839, 0, 0, 97, 97, 97, 97, 1936, 0, 0, 97, 97, 97, 97, 97, 97, 1943, 1944, 1945, 45, 45, 45, 45,\n  /* 26451 */ 670, 45, 45, 45, 45, 674, 45, 45, 45, 45, 678, 45, 1948, 45, 1950, 45, 45, 45, 45, 1955, 1956, 1957, 67,\n  /* 26474 */ 67, 67, 1960, 67, 1962, 67, 67, 67, 67, 1967, 1968, 1969, 97, 0, 0, 0, 97, 97, 1974, 97, 0, 1936, 0, 97,\n  /* 26498 */ 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 1906, 0, 1977, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45,\n  /* 26524 */ 45, 45, 45, 45, 45, 1746, 45, 45, 45, 45, 2011, 67, 67, 2013, 67, 67, 67, 2017, 97, 97, 0, 0, 2021, 97,\n  /* 26548 */ 8192, 97, 97, 2025, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1916, 67, 67, 67, 67, 0, 94242, 0, 0, 0,\n  /* 26573 */ 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 140, 45, 45, 45, 1180, 45, 45, 45, 45, 1184, 45, 45, 45,\n  /* 26595 */ 45, 45, 45, 45, 387, 45, 392, 45, 45, 396, 45, 45, 399, 45, 45, 67, 207, 67, 67, 67, 67, 67, 67, 236, 67,\n  /* 26620 */ 67, 67, 67, 67, 67, 67, 800, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1603, 67, 67, 67, 67, 67, 0, 97, 97, 287,\n  /* 26646 */ 97, 97, 97, 97, 97, 97, 316, 97, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 1656, 1657, 45, 376,\n  /* 26671 */ 45, 45, 45, 45, 45, 388, 45, 45, 45, 45, 45, 45, 45, 45, 1406, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67,\n  /* 26697 */ 462, 67, 67, 67, 67, 67, 474, 67, 67, 67, 67, 67, 67, 67, 817, 67, 67, 67, 67, 25398, 542, 13112, 544, 97,\n  /* 26721 */ 97, 97, 97, 559, 97, 97, 97, 97, 97, 571, 97, 97, 97, 97, 97, 97, 896, 97, 97, 97, 900, 97, 97, 97, 97,\n  /* 26746 */ 97, 97, 912, 914, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 391, 45, 45, 45, 45, 45,\n  /* 26772 */ 45, 45, 45, 713, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 662, 45, 1140, 97, 97, 97, 97,\n  /* 26797 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 636, 67, 67, 1283, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 26823 */ 67, 67, 513, 67, 67, 1363, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 889, 97, 97, 97,\n  /* 26848 */ 1714, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 926, 45, 45, 45, 45, 45, 45, 45, 45, 672, 45, 45, 45,\n  /* 26874 */ 45, 45, 45, 45, 45, 686, 45, 45, 45, 45, 45, 45, 45, 45, 944, 45, 45, 45, 45, 45, 45, 45, 45, 1676, 45,\n  /* 26899 */ 45, 45, 45, 45, 45, 67, 97, 97, 97, 1833, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45,\n  /* 26926 */ 45, 45, 1902, 45, 45, 45, 45, 45, 957, 45, 45, 45, 45, 961, 45, 963, 45, 45, 45, 67, 97, 2034, 0, 97, 97,\n  /* 26951 */ 97, 97, 97, 2040, 45, 45, 45, 2042, 67, 67, 67, 67, 67, 67, 1574, 67, 67, 67, 67, 67, 1578, 67, 67, 67,\n  /* 26975 */ 67, 67, 67, 799, 67, 67, 67, 804, 67, 67, 67, 67, 67, 67, 67, 1298, 0, 0, 0, 1304, 0, 0, 0, 1310, 132,\n  /* 27000 */ 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 45, 45, 1414, 45, 45, 45, 45, 45, 45,\n  /* 27023 */ 45, 45, 45, 45, 428, 45, 45, 45, 45, 45, 57889, 0, 0, 54074, 54074, 550, 831, 97, 97, 97, 97, 97, 97, 97,\n  /* 27047 */ 97, 97, 568, 97, 97, 97, 97, 578, 97, 45, 45, 968, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 27072 */ 1228, 45, 45, 67, 67, 67, 67, 67, 25398, 1082, 13112, 1086, 54074, 1090, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0,\n  /* 27096 */ 139, 2158592, 2158592, 2158592, 2404352, 2412544, 67, 67, 67, 67, 1464, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 27115 */ 67, 67, 67, 510, 67, 67, 67, 67, 97, 97, 97, 97, 1519, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 918,\n  /* 27140 */ 97, 0, 0, 0, 0, 1528, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 976, 45, 1554, 45, 45, 45,\n  /* 27166 */ 45, 45, 45, 45, 45, 1562, 45, 45, 1565, 45, 45, 45, 45, 683, 45, 45, 45, 687, 45, 45, 692, 45, 45, 45, 45,\n  /* 27191 */ 45, 1953, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1014, 67, 67, 67, 67, 67, 67, 1568, 67, 67, 67, 67, 67,\n  /* 27216 */ 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 67, 67, 67, 67, 67, 1585, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 27242 */ 67, 1594, 97, 97, 1649, 97, 97, 97, 0, 45, 45, 1653, 45, 45, 45, 45, 45, 45, 383, 45, 45, 45, 45, 45, 45,\n  /* 27267 */ 45, 45, 45, 986, 45, 45, 45, 45, 45, 45, 45, 45, 1670, 45, 1672, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 27292 */ 67, 736, 67, 67, 67, 67, 67, 741, 67, 67, 67, 1680, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 27317 */ 67, 1074, 67, 67, 67, 1692, 67, 67, 67, 67, 67, 67, 67, 1697, 67, 1699, 67, 67, 67, 67, 67, 67, 1012, 67,\n  /* 27341 */ 67, 67, 67, 67, 67, 67, 67, 67, 468, 475, 67, 67, 67, 67, 67, 67, 1769, 67, 67, 67, 67, 67, 67, 67, 97,\n  /* 27366 */ 97, 97, 97, 97, 97, 97, 624, 97, 97, 97, 97, 97, 97, 634, 97, 97, 1792, 97, 97, 97, 97, 97, 97, 97, 45,\n  /* 27391 */ 45, 45, 45, 45, 45, 45, 958, 45, 45, 45, 45, 45, 45, 964, 45, 150, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 27417 */ 45, 45, 45, 45, 45, 977, 204, 45, 67, 67, 67, 217, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 787, 67, 67,\n  /* 27442 */ 67, 67, 67, 67, 67, 67, 67, 67, 271, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 97, 351,\n  /* 27466 */ 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 45, 45, 938, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 27492 */ 45, 1398, 45, 45, 45, 153, 45, 161, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 660, 661, 45, 45, 205,\n  /* 27517 */ 45, 67, 67, 67, 67, 220, 67, 228, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 280, 94, 0, 0, 67, 67, 67,\n  /* 27544 */ 67, 67, 272, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 97, 352, 97, 0, 40976, 0, 18, 18,\n  /* 27568 */ 24, 24, 27, 27, 27, 45, 439, 45, 45, 45, 45, 45, 445, 45, 45, 45, 452, 45, 45, 67, 67, 212, 216, 67, 67,\n  /* 27593 */ 67, 67, 67, 241, 67, 246, 67, 252, 67, 67, 486, 67, 67, 67, 67, 67, 67, 67, 494, 67, 67, 67, 67, 67, 67,\n  /* 27618 */ 67, 1245, 67, 67, 67, 67, 67, 67, 67, 67, 1013, 67, 67, 1016, 67, 67, 67, 67, 67, 521, 67, 67, 525, 67,\n  /* 27642 */ 67, 67, 67, 67, 531, 67, 67, 67, 538, 67, 0, 0, 2046, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 45, 45,\n  /* 27668 */ 45, 1192, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1418, 45, 45, 1421, 97, 97, 583, 97, 97, 97, 97,\n  /* 27693 */ 97, 97, 97, 591, 97, 97, 97, 97, 97, 97, 913, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45,\n  /* 27720 */ 1384, 97, 618, 97, 97, 622, 97, 97, 97, 97, 97, 628, 97, 97, 97, 635, 97, 18, 131427, 0, 0, 0, 639, 0,\n  /* 27744 */ 132, 362, 0, 0, 365, 29315, 367, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 932, 45, 45, 45, 45, 45, 1544,\n  /* 27769 */ 45, 45, 45, 45, 45, 1550, 45, 45, 45, 45, 45, 1194, 45, 1196, 45, 45, 45, 45, 45, 45, 45, 45, 999, 45, 45,\n  /* 27794 */ 45, 45, 45, 67, 67, 45, 45, 667, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1408, 45, 45, 45,\n  /* 27819 */ 696, 45, 45, 45, 701, 45, 45, 45, 45, 45, 45, 45, 45, 710, 45, 45, 45, 1220, 45, 45, 45, 45, 45, 45, 45,\n  /* 27844 */ 45, 45, 45, 45, 45, 194, 45, 45, 45, 729, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 27870 */ 67, 67, 67, 67, 67, 67, 67, 797, 67, 67, 67, 67, 67, 67, 805, 67, 67, 67, 67, 67, 67, 67, 1587, 67, 1589,\n  /* 27895 */ 67, 67, 67, 67, 67, 67, 67, 67, 1763, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 2162968, 0, 0, 67, 67,\n  /* 27922 */ 67, 67, 67, 814, 816, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 67, 67, 1008, 67, 67, 67, 67, 67, 67,\n  /* 27945 */ 67, 67, 67, 67, 67, 1020, 67, 0, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 97, 0, 0, 97, 97, 97, 97, 97,\n  /* 27972 */ 45, 45, 45, 45, 67, 67, 67, 67, 1429, 67, 1430, 67, 67, 67, 67, 67, 1062, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 27997 */ 67, 67, 67, 67, 67, 67, 67, 518, 1076, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* 28023 */ 28809, 0, 139, 45, 45, 45, 45, 45, 97, 97, 97, 97, 1102, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1124,\n  /* 28048 */ 97, 1126, 97, 97, 1114, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1112, 97, 97, 1156,\n  /* 28072 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 594, 97, 97, 97, 97, 1170, 97, 97, 97, 97, 0, 921, 0,\n  /* 28098 */ 0, 0, 0, 0, 0, 45, 45, 45, 45, 1532, 45, 45, 45, 45, 1536, 45, 45, 45, 45, 45, 172, 45, 45, 45, 45, 45,\n  /* 28124 */ 45, 45, 45, 45, 45, 706, 45, 45, 709, 45, 45, 1177, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 28149 */ 45, 45, 1202, 45, 1204, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1215, 45, 45, 45, 1232, 45, 45,\n  /* 28173 */ 45, 45, 45, 45, 45, 67, 1237, 67, 67, 67, 67, 67, 67, 1053, 1054, 67, 67, 67, 67, 67, 67, 1061, 67, 67,\n  /* 28197 */ 1282, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1289, 67, 67, 67, 1292, 97, 97, 97, 97, 1339, 97, 97, 97, 97,\n  /* 28221 */ 97, 97, 1344, 97, 97, 97, 97, 45, 1849, 45, 1851, 45, 45, 45, 45, 45, 45, 45, 45, 721, 45, 45, 45, 45, 45,\n  /* 28246 */ 726, 45, 1385, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1188, 45, 45, 1401, 1402, 45,\n  /* 28270 */ 45, 45, 45, 1405, 45, 45, 45, 45, 45, 45, 45, 45, 1752, 45, 45, 45, 45, 45, 67, 67, 1410, 45, 45, 45,\n  /* 28294 */ 1413, 45, 1415, 45, 45, 45, 45, 45, 45, 1419, 45, 45, 45, 45, 1806, 45, 45, 45, 45, 45, 45, 67, 67, 67,\n  /* 28318 */ 67, 67, 67, 67, 97, 97, 2019, 0, 97, 67, 67, 67, 1452, 67, 67, 67, 67, 67, 67, 67, 67, 1457, 67, 67, 67,\n  /* 28343 */ 67, 67, 67, 1259, 67, 67, 67, 67, 67, 67, 1264, 67, 67, 1460, 67, 1462, 67, 67, 67, 67, 67, 67, 1466, 67,\n  /* 28367 */ 67, 67, 67, 67, 67, 67, 67, 1588, 67, 67, 67, 67, 67, 67, 67, 0, 1300, 0, 0, 0, 1306, 0, 0, 0, 97, 97, 97,\n  /* 28394 */ 1506, 97, 97, 97, 97, 97, 97, 97, 97, 1512, 97, 97, 97, 0, 1728, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 28419 */ 97, 901, 97, 97, 97, 97, 1515, 97, 1517, 97, 97, 97, 97, 97, 97, 1521, 97, 97, 97, 97, 97, 97, 0, 45,\n  /* 28443 */ 1652, 45, 45, 45, 1655, 45, 45, 45, 45, 45, 1542, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 28467 */ 1552, 1553, 45, 45, 45, 1556, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 693, 45, 45, 45, 67, 67,\n  /* 28492 */ 67, 67, 1572, 67, 67, 67, 67, 1576, 67, 67, 67, 67, 67, 67, 67, 67, 1602, 67, 67, 1605, 67, 67, 67, 0, 67,\n  /* 28517 */ 1582, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1580, 67, 67, 1596, 67, 67, 67, 67, 67, 67,\n  /* 28542 */ 67, 67, 67, 67, 67, 67, 67, 0, 542, 0, 544, 67, 67, 67, 67, 1759, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 28568 */ 67, 533, 67, 67, 67, 67, 67, 67, 67, 1770, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 1777, 97, 97, 97,\n  /* 28593 */ 1793, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 998, 45, 45, 1001, 1002, 45, 45, 67, 67, 45, 1861,\n  /* 28617 */ 45, 67, 67, 67, 67, 67, 67, 67, 67, 1871, 67, 1873, 1874, 67, 0, 97, 45, 67, 0, 97, 45, 67, 16384, 97, 45,\n  /* 28642 */ 67, 97, 0, 0, 0, 1473, 0, 1082, 0, 0, 0, 1475, 0, 1086, 0, 0, 0, 1477, 1876, 67, 97, 97, 97, 97, 97, 1883,\n  /* 28668 */ 0, 1885, 97, 97, 97, 1889, 0, 0, 0, 286, 0, 0, 0, 286, 0, 2367488, 2158592, 2158592, 2158592, 2158592,\n  /* 28688 */ 2158592, 2158592, 0, 40976, 0, 18, 18, 24, 24, 126, 126, 126, 2053, 0, 2055, 45, 67, 0, 97, 45, 67, 0, 97,\n  /* 28711 */ 45, 67, 97, 0, 0, 97, 97, 97, 2039, 97, 45, 45, 45, 45, 67, 67, 67, 67, 67, 226, 67, 67, 67, 67, 67, 67,\n  /* 28737 */ 67, 67, 1246, 67, 67, 1249, 1250, 67, 67, 67, 132, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809,\n  /* 28759 */ 45, 45, 141, 45, 45, 45, 1403, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1186, 45, 45, 1189, 45, 45,\n  /* 28784 */ 155, 45, 45, 45, 45, 45, 45, 45, 45, 45, 191, 45, 45, 45, 45, 700, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 28810 */ 45, 1753, 45, 45, 45, 67, 67, 45, 45, 67, 208, 67, 67, 67, 222, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1764,\n  /* 28835 */ 67, 67, 67, 67, 67, 67, 67, 258, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97,\n  /* 28859 */ 288, 97, 97, 97, 302, 97, 97, 97, 97, 97, 97, 97, 97, 97, 627, 97, 97, 97, 97, 97, 97, 338, 97, 97, 97,\n  /* 28884 */ 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45,\n  /* 28908 */ 370, 45, 45, 45, 45, 716, 45, 45, 45, 45, 45, 722, 45, 45, 45, 45, 45, 45, 1912, 67, 67, 67, 67, 67, 67,\n  /* 28933 */ 67, 67, 67, 819, 67, 67, 25398, 542, 13112, 544, 45, 403, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 28957 */ 45, 45, 1409, 45, 67, 67, 67, 67, 489, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 771, 67, 67, 67, 67,\n  /* 28982 */ 520, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 534, 67, 67, 67, 67, 67, 67, 1271, 67, 67, 67, 1274, 67,\n  /* 29007 */ 67, 67, 1279, 67, 67, 24850, 24850, 12564, 12564, 0, 57889, 0, 0, 0, 53531, 53531, 367, 286, 97, 553, 97,\n  /* 29028 */ 97, 97, 97, 586, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1138, 97, 97, 97, 97, 617, 97, 97, 97, 97,\n  /* 29053 */ 97, 97, 97, 97, 97, 97, 97, 631, 97, 97, 97, 0, 1834, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97,\n  /* 29079 */ 353, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 45, 45, 668, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 29105 */ 45, 724, 45, 45, 45, 45, 45, 682, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 949, 45, 45, 45, 67,\n  /* 29131 */ 67, 747, 748, 67, 67, 67, 67, 755, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 1302, 0, 0, 0, 1308, 0, 67, 794,\n  /* 29157 */ 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1701, 67, 97, 97, 97, 845, 846, 97, 97, 97, 97,\n  /* 29182 */ 853, 97, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 97, 97, 892, 97, 97, 97, 97, 97, 97,\n  /* 29208 */ 97, 97, 97, 97, 97, 97, 97, 610, 97, 97, 45, 992, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67,\n  /* 29234 */ 67, 1239, 67, 67, 67, 1063, 67, 67, 67, 67, 67, 1068, 67, 67, 67, 67, 67, 67, 67, 0, 0, 1301, 0, 0, 0,\n  /* 29259 */ 1307, 0, 0, 97, 1141, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1152, 97, 97, 0, 0, 97, 97, 2001, 0, 97,\n  /* 29285 */ 2003, 97, 97, 97, 45, 45, 45, 1739, 45, 45, 45, 1742, 45, 45, 45, 45, 45, 97, 97, 97, 97, 1157, 97, 97,\n  /* 29309 */ 97, 97, 97, 1162, 97, 97, 97, 97, 97, 97, 1145, 97, 97, 97, 97, 97, 1151, 97, 97, 97, 1253, 67, 67, 67,\n  /* 29333 */ 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 539, 45, 1423, 45, 45, 67, 67, 67, 67, 67, 67, 67, 1431,\n  /* 29358 */ 67, 67, 67, 67, 67, 67, 67, 1695, 67, 67, 67, 67, 67, 1700, 67, 1702, 67, 67, 1439, 67, 67, 67, 67, 67,\n  /* 29382 */ 67, 67, 67, 67, 67, 67, 67, 67, 514, 67, 67, 97, 97, 1492, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 29408 */ 97, 611, 97, 97, 1703, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 852, 97, 97, 97, 97,\n  /* 29433 */ 97, 97, 45, 1949, 45, 1951, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 1961, 67, 0, 97, 45, 67, 0, 97, 2060,\n  /* 29458 */ 2061, 0, 2062, 45, 67, 97, 0, 0, 2036, 97, 97, 97, 97, 45, 45, 45, 45, 67, 67, 67, 67, 67, 223, 67, 67,\n  /* 29483 */ 237, 67, 67, 67, 67, 67, 67, 67, 1272, 67, 67, 67, 67, 67, 67, 67, 67, 507, 67, 67, 67, 67, 67, 67, 67,\n  /* 29508 */ 1963, 67, 67, 67, 97, 97, 97, 97, 0, 1972, 0, 97, 97, 97, 1975, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45,\n  /* 29533 */ 931, 45, 45, 45, 45, 45, 407, 45, 45, 45, 45, 45, 45, 45, 45, 45, 417, 45, 45, 1989, 67, 67, 67, 67, 67,\n  /* 29558 */ 67, 67, 67, 67, 67, 67, 1996, 97, 18, 131427, 0, 0, 360, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 921,\n  /* 29582 */ 29315, 0, 0, 0, 0, 45, 45, 930, 45, 45, 45, 45, 45, 45, 444, 45, 45, 45, 45, 45, 45, 45, 67, 67, 97, 97,\n  /* 29608 */ 1998, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1985, 45, 1986, 45, 45, 45, 156, 45,\n  /* 29633 */ 45, 170, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 675, 45, 45, 45, 45, 679, 131427, 0, 358, 0, 0, 362, 0,\n  /* 29658 */ 365, 28809, 367, 139, 45, 45, 45, 45, 45, 381, 45, 45, 45, 45, 45, 45, 45, 45, 45, 400, 45, 45, 419, 45,\n  /* 29682 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 436, 67, 67, 67, 67, 67, 505, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 29708 */ 67, 67, 820, 67, 25398, 542, 13112, 544, 67, 67, 522, 67, 67, 67, 67, 67, 529, 67, 67, 67, 67, 67, 67, 67,\n  /* 29732 */ 0, 1299, 0, 0, 0, 1305, 0, 0, 0, 97, 97, 619, 97, 97, 97, 97, 97, 626, 97, 97, 97, 97, 97, 97, 97, 1105,\n  /* 29758 */ 97, 97, 97, 97, 1109, 97, 97, 97, 67, 67, 67, 67, 749, 67, 67, 67, 67, 67, 67, 67, 67, 67, 760, 67, 0, 97,\n  /* 29784 */ 45, 67, 2058, 97, 45, 67, 0, 97, 45, 67, 97, 0, 0, 97, 97, 97, 97, 97, 45, 45, 45, 2041, 67, 67, 67, 67,\n  /* 29810 */ 67, 780, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 516, 67, 67, 97, 97, 97, 878, 97, 97, 97, 97,\n  /* 29836 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 1629, 97, 0, 45, 979, 45, 45, 45, 45, 984, 45, 45, 45, 45, 45, 45, 45,\n  /* 29862 */ 45, 45, 1198, 45, 45, 45, 45, 45, 45, 67, 1023, 67, 67, 67, 67, 1028, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 29887 */ 470, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 1094, 0, 0, 0, 1092,\n  /* 29912 */ 1315, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1486, 97, 1489, 97, 97, 97, 1117, 97, 97, 97, 97,\n  /* 29937 */ 1122, 97, 97, 97, 97, 97, 97, 97, 1146, 97, 97, 97, 97, 97, 97, 97, 97, 881, 97, 97, 97, 886, 97, 97, 97,\n  /* 29962 */ 1311, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1615, 97, 97, 97, 97, 97, 1619, 97, 97, 97, 97,\n  /* 29989 */ 97, 97, 97, 97, 97, 97, 97, 97, 1631, 97, 97, 1847, 97, 45, 45, 45, 45, 1852, 45, 45, 45, 45, 45, 45, 45,\n  /* 30014 */ 1235, 45, 45, 45, 67, 67, 67, 67, 67, 1868, 67, 67, 67, 1872, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1882, 0,\n  /* 30039 */ 0, 0, 97, 97, 97, 97, 0, 1891, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 1929, 0, 0, 97, 97, 97, 97, 97, 97,\n  /* 30066 */ 45, 1900, 45, 1901, 45, 45, 45, 1905, 45, 67, 2054, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 97, 0, 0,\n  /* 30091 */ 97, 2037, 2038, 97, 97, 45, 45, 45, 45, 67, 67, 67, 67, 1867, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1774,\n  /* 30115 */ 97, 97, 97, 97, 97, 97, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 142, 45, 45,\n  /* 30138 */ 45, 1412, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 432, 45, 45, 45, 45, 45, 157, 45, 45, 171, 45,\n  /* 30163 */ 45, 45, 182, 45, 45, 45, 45, 200, 45, 45, 45, 1543, 45, 45, 45, 45, 45, 45, 45, 45, 1551, 45, 45, 45, 45,\n  /* 30188 */ 1181, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1211, 45, 45, 45, 1214, 45, 45, 45, 67, 209, 67, 67, 67,\n  /* 30213 */ 224, 67, 67, 238, 67, 67, 67, 249, 67, 0, 97, 2056, 2057, 0, 2059, 45, 67, 0, 97, 45, 67, 97, 0, 0, 1937,\n  /* 30238 */ 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1741, 45, 45, 45, 45, 45, 45, 67, 67, 67, 267, 67, 67, 67,\n  /* 30264 */ 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 289, 97, 97, 97, 304, 97, 97, 318, 97, 97, 97, 329, 97,\n  /* 30288 */ 97, 0, 0, 97, 1783, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 2026, 45, 45, 45, 45, 67, 2030, 67,\n  /* 30314 */ 67, 67, 67, 67, 67, 1041, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1044, 67, 67, 67, 67, 67, 67, 97, 97, 347,\n  /* 30339 */ 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 45, 666, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 30365 */ 45, 45, 45, 1420, 45, 57889, 0, 0, 54074, 54074, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 840, 67, 1007,\n  /* 30388 */ 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 759, 67, 67, 67, 67, 67, 67, 67, 1052, 67, 67, 67,\n  /* 30414 */ 67, 67, 67, 67, 67, 67, 67, 1031, 67, 67, 67, 67, 67, 97, 97, 97, 1101, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 30439 */ 97, 97, 97, 97, 592, 97, 97, 97, 1190, 45, 45, 45, 45, 45, 1195, 45, 1197, 45, 45, 45, 45, 1201, 45, 45,\n  /* 30463 */ 45, 45, 1952, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 250, 67, 67, 67, 1255, 67, 1257, 67,\n  /* 30488 */ 67, 67, 67, 1261, 67, 67, 67, 67, 67, 67, 67, 67, 1685, 67, 67, 67, 67, 67, 67, 67, 0, 24851, 12565, 0, 0,\n  /* 30513 */ 0, 0, 28809, 53532, 67, 67, 1267, 67, 67, 67, 67, 67, 67, 1273, 67, 67, 67, 67, 67, 67, 67, 67, 1696, 67,\n  /* 30537 */ 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 2162688, 0, 0, 1281, 67, 67, 67, 67, 1285, 67, 67, 67, 67, 67,\n  /* 30563 */ 67, 67, 67, 67, 67, 1070, 67, 67, 67, 67, 67, 1335, 97, 1337, 97, 97, 97, 97, 1341, 97, 97, 97, 97, 97,\n  /* 30587 */ 97, 97, 97, 882, 97, 97, 97, 97, 97, 97, 97, 1347, 97, 97, 97, 97, 97, 97, 1353, 97, 97, 97, 97, 97, 97,\n  /* 30612 */ 1361, 97, 18, 131427, 0, 638, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 544, 0, 550, 0, 2158592, 2158592,\n  /* 30635 */ 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2473984, 2158592, 2158592, 2158592, 2990080,\n  /* 30646 */ 2158592, 2158592, 2207744, 2207744, 2482176, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744,\n  /* 30657 */ 2207744, 0, 0, 0, 0, 0, 0, 2162688, 0, 53530, 97, 97, 97, 1365, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 30681 */ 97, 97, 608, 97, 97, 97, 45, 45, 1424, 45, 1425, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1058, 67, 67,\n  /* 30706 */ 67, 67, 45, 1555, 45, 45, 1557, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 707, 45, 45, 45, 45, 67, 67,\n  /* 30731 */ 1570, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 773, 67, 67, 1595, 67, 67, 1597, 67, 67, 67, 67,\n  /* 30756 */ 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 2158592, 2158592, 2158592, 2404352,\n  /* 30778 */ 2412544, 97, 97, 97, 1636, 97, 97, 97, 1639, 97, 97, 1641, 97, 97, 97, 97, 97, 97, 1173, 0, 921, 0, 0, 0,\n  /* 30802 */ 0, 0, 0, 45, 67, 67, 67, 1693, 67, 67, 67, 67, 67, 67, 67, 1698, 67, 67, 67, 67, 67, 67, 67, 1773, 67, 97,\n  /* 30828 */ 97, 97, 97, 97, 97, 97, 625, 97, 97, 97, 97, 97, 97, 97, 97, 850, 97, 97, 97, 97, 97, 97, 97, 97, 880, 97,\n  /* 30854 */ 97, 97, 97, 97, 97, 97, 97, 1106, 97, 97, 97, 97, 97, 97, 97, 1860, 45, 45, 67, 67, 1865, 67, 67, 67, 67,\n  /* 30879 */ 1870, 67, 67, 67, 67, 1875, 67, 67, 97, 97, 1880, 97, 97, 0, 0, 0, 97, 97, 1888, 97, 0, 0, 0, 1938, 97,\n  /* 30904 */ 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1854, 45, 45, 45, 45, 45, 45, 45, 1909, 45, 45, 1911, 67, 67, 67,\n  /* 30929 */ 67, 67, 67, 67, 67, 67, 67, 1248, 67, 67, 67, 67, 67, 67, 1922, 67, 67, 1924, 97, 97, 97, 97, 97, 0, 0, 0,\n  /* 30955 */ 97, 97, 97, 97, 97, 1898, 45, 45, 45, 45, 45, 45, 1904, 45, 45, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0,\n  /* 30980 */ 16384, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 1724, 2008, 2009, 45, 45, 67, 67, 67,\n  /* 31004 */ 2014, 2015, 67, 67, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 31030 */ 45, 45, 45, 45, 2022, 0, 2023, 97, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1869, 67, 67, 67,\n  /* 31055 */ 67, 67, 67, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 147, 151, 154, 45, 162,\n  /* 31078 */ 45, 45, 176, 178, 181, 45, 45, 45, 192, 196, 45, 45, 45, 45, 2012, 67, 67, 67, 67, 67, 67, 2018, 97, 0, 0,\n  /* 31103 */ 97, 1978, 97, 97, 97, 1982, 45, 45, 45, 45, 45, 45, 45, 45, 45, 972, 973, 45, 45, 45, 45, 45, 67, 259,\n  /* 31127 */ 263, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 294, 298, 301, 97, 309, 97,\n  /* 31150 */ 97, 323, 325, 328, 97, 97, 97, 97, 97, 560, 97, 97, 97, 569, 97, 97, 97, 97, 97, 97, 306, 97, 97, 97, 97,\n  /* 31175 */ 97, 97, 97, 97, 97, 1624, 97, 97, 97, 97, 97, 97, 97, 0, 921, 0, 1175, 0, 0, 0, 0, 45, 339, 343, 97, 97,\n  /* 31201 */ 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 67, 67, 503, 67, 67, 67, 67, 67, 67, 67, 67, 67, 512, 67,\n  /* 31227 */ 67, 519, 97, 97, 600, 97, 97, 97, 97, 97, 97, 97, 97, 97, 609, 97, 97, 616, 45, 649, 45, 45, 45, 45, 45,\n  /* 31252 */ 654, 45, 45, 45, 45, 45, 45, 45, 45, 1393, 45, 45, 45, 45, 45, 45, 45, 45, 1209, 45, 45, 45, 45, 45, 45,\n  /* 31277 */ 45, 67, 763, 67, 67, 67, 67, 67, 67, 67, 67, 770, 67, 67, 67, 774, 67, 0, 2045, 97, 97, 97, 97, 45, 45,\n  /* 31302 */ 67, 67, 0, 0, 97, 97, 45, 45, 45, 994, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 213, 67, 219, 67,\n  /* 31328 */ 67, 232, 67, 242, 67, 247, 67, 67, 67, 779, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1018,\n  /* 31353 */ 67, 67, 67, 67, 811, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 57889, 0, 0, 54074,\n  /* 31375 */ 54074, 550, 0, 97, 834, 97, 97, 97, 97, 97, 839, 97, 18, 131427, 0, 638, 0, 0, 0, 0, 362, 0, 0, 365,\n  /* 31399 */ 29315, 367, 645, 97, 97, 861, 97, 97, 97, 97, 97, 97, 97, 97, 868, 97, 97, 97, 872, 97, 97, 877, 97, 97,\n  /* 31423 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 613, 97, 97, 97, 97, 97, 909, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 31449 */ 97, 0, 0, 0, 18, 18, 24, 24, 27, 27, 27, 1036, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 31476 */ 1047, 67, 67, 67, 1050, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1033, 67, 67, 67, 97, 97, 1130,\n  /* 31500 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 638, 0, 0, 67, 67, 67, 1295, 67, 67, 67, 0, 0, 0, 0,\n  /* 31527 */ 0, 0, 0, 0, 0, 97, 1317, 97, 97, 97, 97, 97, 97, 1375, 97, 97, 97, 0, 0, 0, 45, 1379, 45, 45, 45, 45, 45,\n  /* 31554 */ 45, 422, 45, 45, 45, 429, 431, 45, 45, 45, 45, 0, 1090, 0, 0, 97, 1479, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 31579 */ 97, 97, 1357, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1716, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1723, 0, 921,\n  /* 31604 */ 29315, 0, 0, 0, 0, 45, 929, 45, 45, 45, 45, 45, 45, 45, 1392, 45, 45, 45, 45, 45, 45, 45, 45, 45, 960, 45,\n  /* 31630 */ 45, 45, 45, 45, 45, 97, 97, 97, 1738, 45, 45, 45, 45, 45, 45, 45, 1743, 45, 45, 45, 45, 166, 45, 45, 45,\n  /* 31655 */ 45, 184, 186, 45, 45, 197, 45, 45, 97, 1779, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 18,\n  /* 31680 */ 131427, 0, 638, 0, 0, 0, 0, 362, 0, 640, 365, 29315, 367, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45,\n  /* 31705 */ 45, 45, 45, 45, 45, 1537, 45, 45, 45, 45, 45, 1803, 45, 45, 45, 45, 45, 1809, 45, 45, 45, 67, 67, 67,\n  /* 31729 */ 1814, 67, 67, 67, 67, 67, 67, 1821, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97,\n  /* 31755 */ 0, 0, 67, 67, 67, 1818, 67, 67, 67, 67, 67, 1824, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97,\n  /* 31782 */ 1890, 0, 1829, 97, 97, 0, 0, 97, 97, 1836, 97, 97, 0, 0, 0, 97, 97, 97, 97, 1981, 45, 45, 45, 45, 45, 45,\n  /* 31808 */ 45, 45, 45, 1987, 1845, 97, 97, 97, 45, 45, 45, 45, 45, 1853, 45, 45, 45, 1857, 45, 45, 45, 67, 1864, 67,\n  /* 31832 */ 1866, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 1710, 1711, 67, 67, 97, 97, 97, 97,\n  /* 31857 */ 97, 0, 0, 0, 1886, 97, 97, 97, 0, 0, 97, 97, 97, 97, 1838, 0, 0, 0, 97, 1843, 97, 0, 1893, 97, 97, 97, 97,\n  /* 31884 */ 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1745, 45, 45, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0,\n  /* 31910 */ 1931, 97, 97, 97, 97, 97, 588, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 629, 97, 97, 97, 97, 97, 67, 2044,\n  /* 31935 */ 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 45, 45, 45, 1660, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 31962 */ 45, 45, 453, 45, 455, 67, 67, 67, 67, 268, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97,\n  /* 31986 */ 348, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 359, 0, 0, 362, 0, 365, 28809, 367,\n  /* 32010 */ 139, 45, 45, 45, 45, 45, 421, 45, 45, 45, 45, 45, 45, 45, 434, 45, 45, 695, 45, 45, 45, 45, 45, 45, 45,\n  /* 32035 */ 45, 45, 45, 45, 45, 45, 45, 45, 1667, 45, 0, 921, 29315, 0, 925, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 32061 */ 1811, 45, 67, 67, 67, 67, 67, 67, 1037, 67, 1039, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1277,\n  /* 32085 */ 67, 67, 67, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 1095, 0, 0, 0, 1096, 97, 97, 97, 97,\n  /* 32110 */ 97, 97, 97, 97, 97, 97, 97, 97, 869, 97, 97, 97, 97, 97, 97, 1131, 97, 1133, 97, 97, 97, 97, 97, 97, 97,\n  /* 32135 */ 97, 97, 97, 1370, 97, 97, 97, 97, 97, 1312, 0, 0, 0, 0, 1096, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1327,\n  /* 32161 */ 97, 97, 97, 97, 97, 1332, 97, 97, 97, 1830, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 1896, 97,\n  /* 32187 */ 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1548, 45, 45, 45, 45, 45, 45, 133, 94242, 0, 0, 0, 38, 102439, 0,\n  /* 32212 */ 0, 106538, 98347, 28809, 45, 45, 45, 45, 380, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 401, 45, 45, 158,\n  /* 32235 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1200, 45, 45, 45, 45, 206, 67, 67, 67, 67, 67, 225,\n  /* 32260 */ 67, 67, 67, 67, 67, 67, 67, 67, 754, 67, 67, 67, 67, 67, 67, 67, 57889, 0, 0, 54074, 54074, 550, 832, 97,\n  /* 32284 */ 97, 97, 97, 97, 97, 97, 97, 97, 1342, 97, 97, 97, 97, 97, 97, 67, 67, 67, 67, 67, 25398, 1083, 13112,\n  /* 32307 */ 1087, 54074, 1091, 0, 0, 0, 0, 0, 0, 1316, 0, 831, 97, 97, 97, 97, 97, 97, 97, 1174, 921, 0, 1175, 0, 0,\n  /* 32332 */ 0, 0, 45, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 148, 67, 67, 264, 67, 67,\n  /* 32356 */ 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 295, 97, 97, 97, 97, 313, 97, 97, 97, 97,\n  /* 32380 */ 331, 333, 97, 18, 131427, 356, 638, 0, 0, 0, 0, 362, 0, 0, 365, 0, 367, 0, 45, 45, 1530, 45, 45, 45, 45,\n  /* 32405 */ 45, 45, 45, 45, 45, 45, 45, 45, 988, 45, 45, 45, 97, 344, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27,\n  /* 32431 */ 27, 27, 402, 404, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1756, 67, 438, 45, 45, 45, 45,\n  /* 32456 */ 45, 45, 45, 45, 449, 450, 45, 45, 45, 67, 67, 214, 218, 221, 67, 229, 67, 67, 243, 245, 248, 67, 67, 67,\n  /* 32480 */ 67, 67, 488, 490, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1071, 67, 1073, 67, 67, 67, 67, 67, 524, 67,\n  /* 32505 */ 67, 67, 67, 67, 67, 67, 67, 535, 536, 67, 67, 67, 67, 67, 67, 1683, 1684, 67, 67, 67, 67, 1688, 1689, 67,\n  /* 32529 */ 67, 67, 67, 67, 67, 1586, 67, 67, 67, 67, 67, 67, 67, 67, 67, 469, 67, 67, 67, 67, 67, 67, 97, 97, 97,\n  /* 32554 */ 585, 587, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1163, 97, 97, 97, 97, 97, 97, 97, 621, 97, 97, 97,\n  /* 32579 */ 97, 97, 97, 97, 97, 632, 633, 97, 97, 0, 0, 1782, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 712, 45, 45,\n  /* 32605 */ 45, 717, 45, 45, 45, 45, 45, 45, 45, 45, 725, 45, 45, 45, 163, 167, 173, 177, 45, 45, 45, 45, 45, 193, 45,\n  /* 32630 */ 45, 45, 45, 982, 45, 45, 45, 45, 45, 45, 987, 45, 45, 45, 45, 45, 1558, 45, 1560, 45, 45, 45, 45, 45, 45,\n  /* 32655 */ 45, 45, 704, 705, 45, 45, 45, 45, 45, 45, 45, 45, 731, 45, 45, 45, 67, 67, 67, 67, 67, 739, 67, 67, 67,\n  /* 32680 */ 67, 67, 67, 273, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 67, 67, 67, 764, 67, 67, 67, 67, 67, 67, 67,\n  /* 32704 */ 67, 67, 67, 67, 67, 1290, 67, 67, 67, 67, 67, 67, 812, 67, 67, 67, 67, 818, 67, 67, 67, 25398, 542, 13112,\n  /* 32728 */ 544, 57889, 0, 0, 54074, 54074, 550, 0, 97, 97, 97, 97, 97, 837, 97, 97, 97, 97, 97, 602, 97, 97, 97, 97,\n  /* 32752 */ 97, 97, 97, 97, 97, 97, 1137, 97, 97, 97, 97, 97, 97, 97, 97, 97, 862, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 32778 */ 97, 97, 1627, 97, 97, 97, 0, 97, 97, 97, 97, 910, 97, 97, 97, 97, 916, 97, 97, 97, 0, 0, 0, 97, 97, 1940,\n  /* 32804 */ 97, 97, 1942, 45, 45, 45, 45, 45, 45, 385, 45, 45, 45, 45, 395, 45, 45, 45, 45, 966, 45, 969, 45, 45, 45,\n  /* 32829 */ 45, 45, 45, 45, 45, 45, 45, 975, 45, 45, 45, 406, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 974, 45,\n  /* 32855 */ 45, 45, 67, 67, 67, 67, 1010, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1262, 67, 67, 67, 67, 67, 67,\n  /* 32880 */ 67, 67, 67, 1040, 67, 1042, 67, 1045, 67, 67, 67, 67, 67, 67, 67, 97, 1706, 97, 97, 97, 1709, 97, 97, 97,\n  /* 32904 */ 67, 67, 67, 67, 1051, 67, 67, 67, 67, 67, 1057, 67, 67, 67, 67, 67, 67, 67, 1443, 67, 67, 1446, 67, 67,\n  /* 32928 */ 67, 67, 67, 67, 67, 1297, 0, 0, 0, 1303, 0, 0, 0, 1309, 67, 67, 67, 67, 1079, 25398, 0, 13112, 0, 54074,\n  /* 32952 */ 0, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592,\n  /* 32968 */ 2207744, 2207744, 2207744, 2207744, 2207744, 2572288, 2207744, 2207744, 2207744, 1098, 97, 97, 97, 97, 97,\n  /* 32983 */ 1104, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1356, 97, 97, 97, 97, 97, 97, 1128, 97, 97, 97, 97, 97, 97,\n  /* 33007 */ 1134, 97, 1136, 97, 1139, 97, 97, 97, 97, 97, 97, 1622, 97, 97, 97, 97, 97, 97, 97, 97, 0, 921, 0, 0, 0,\n  /* 33032 */ 1176, 0, 646, 45, 67, 67, 67, 1268, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1469, 67, 67, 67, 97,\n  /* 33057 */ 1348, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1127, 97, 67, 1569, 67, 67, 67, 67, 67, 67,\n  /* 33082 */ 67, 67, 67, 67, 67, 67, 67, 67, 1448, 1449, 67, 1816, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1825, 67, 67,\n  /* 33106 */ 1827, 97, 97, 0, 1781, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 1831, 0, 0, 97, 97, 97, 97,\n  /* 33132 */ 97, 0, 0, 0, 97, 97, 97, 1980, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1395, 45, 45, 45, 45, 45, 97,\n  /* 33158 */ 1846, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1212, 45, 45, 45, 45, 45, 45, 2010, 45, 67,\n  /* 33183 */ 67, 67, 67, 67, 2016, 67, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 45, 45, 2007, 0, 94242, 0, 0,\n  /* 33209 */ 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 143, 45, 45, 45, 1671, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 33232 */ 45, 45, 45, 67, 1813, 67, 67, 1815, 45, 45, 67, 210, 67, 67, 67, 67, 67, 67, 239, 67, 67, 67, 67, 67, 67,\n  /* 33257 */ 67, 1454, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1445, 67, 67, 67, 67, 67, 67, 97, 97, 290, 97, 97, 97, 97,\n  /* 33282 */ 97, 97, 319, 97, 97, 97, 97, 97, 97, 303, 97, 97, 317, 97, 97, 97, 97, 97, 97, 305, 97, 97, 97, 97, 97,\n  /* 33307 */ 97, 97, 97, 97, 899, 97, 97, 97, 97, 97, 97, 375, 45, 45, 45, 379, 45, 45, 390, 45, 45, 394, 45, 45, 45,\n  /* 33332 */ 45, 45, 443, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 461, 67, 67, 67, 465, 67, 67, 476, 67,\n  /* 33357 */ 67, 480, 67, 67, 67, 67, 67, 67, 1694, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1288, 67, 67, 67, 67, 67, 67,\n  /* 33382 */ 500, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1075, 97, 97, 97, 558, 97, 97, 97, 562,\n  /* 33407 */ 97, 97, 573, 97, 97, 577, 97, 97, 97, 97, 97, 895, 97, 97, 97, 97, 97, 97, 903, 97, 97, 97, 0, 97, 97,\n  /* 33432 */ 1638, 97, 97, 97, 97, 97, 97, 97, 97, 1646, 597, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 33457 */ 97, 1334, 45, 681, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1396, 45, 45, 1399, 45, 45,\n  /* 33481 */ 730, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1434, 67, 67, 67, 67, 67, 67, 750, 67, 67,\n  /* 33506 */ 67, 67, 67, 67, 67, 67, 67, 67, 1456, 67, 67, 67, 67, 67, 45, 45, 993, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 33532 */ 45, 45, 67, 67, 1238, 67, 67, 1006, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1280,\n  /* 33556 */ 1048, 1049, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1059, 67, 67, 67, 67, 67, 67, 1286, 67, 67, 67, 67,\n  /* 33580 */ 67, 67, 67, 1291, 67, 97, 97, 1100, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 638, 0, 920, 97,\n  /* 33605 */ 97, 1142, 1143, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1153, 97, 97, 97, 97, 97, 1158, 97, 97, 97, 1161,\n  /* 33629 */ 97, 97, 97, 97, 1166, 97, 97, 97, 97, 97, 1325, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1328, 97, 97, 97,\n  /* 33654 */ 97, 97, 97, 97, 45, 1218, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1678, 45, 45, 45, 67,\n  /* 33679 */ 67, 67, 67, 67, 1269, 67, 67, 67, 67, 67, 67, 67, 67, 1278, 67, 67, 67, 67, 67, 67, 1761, 67, 67, 67, 67,\n  /* 33704 */ 67, 67, 67, 67, 67, 530, 67, 67, 67, 67, 67, 67, 97, 97, 1349, 97, 97, 97, 97, 97, 97, 97, 97, 1358, 97,\n  /* 33729 */ 97, 97, 97, 97, 97, 1623, 97, 97, 97, 97, 97, 97, 97, 97, 0, 921, 0, 0, 926, 0, 0, 0, 45, 45, 1411, 45,\n  /* 33755 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1754, 45, 45, 67, 67, 1301, 0, 1307, 0, 1313, 97, 97,\n  /* 33780 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 21054, 97, 97, 97, 97, 67, 1757, 67, 67, 67, 1760, 67, 67, 67, 67, 67,\n  /* 33805 */ 67, 67, 67, 67, 67, 1467, 67, 67, 67, 67, 67, 1778, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97,\n  /* 33832 */ 97, 97, 97, 97, 1352, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1511, 97, 97, 97, 97, 97, 67, 67, 67, 67,\n  /* 33857 */ 67, 1820, 67, 1822, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 1933, 97, 1892, 97, 97, 97, 97,\n  /* 33882 */ 97, 97, 1899, 45, 45, 45, 45, 45, 45, 45, 45, 1664, 45, 45, 45, 45, 45, 45, 45, 45, 1546, 45, 45, 45, 45,\n  /* 33907 */ 45, 45, 45, 45, 1208, 45, 45, 45, 45, 45, 45, 45, 45, 1224, 45, 45, 45, 45, 45, 45, 45, 45, 673, 45, 45,\n  /* 33932 */ 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1925, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 623, 97, 97,\n  /* 33958 */ 97, 97, 97, 97, 97, 97, 97, 97, 307, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1796, 97, 45, 45, 45, 45, 45, 45,\n  /* 33984 */ 45, 970, 45, 45, 45, 45, 45, 45, 45, 45, 1417, 45, 45, 45, 45, 45, 45, 45, 67, 1964, 67, 67, 97, 97, 97,\n  /* 34009 */ 97, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 1721, 97, 97, 0, 0, 1997, 97, 0, 0, 2000, 97, 97,\n  /* 34036 */ 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 733, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 803, 67, 67, 67,\n  /* 34062 */ 67, 67, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 144, 45, 45, 45, 1805, 45,\n  /* 34084 */ 1807, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 231, 67, 67, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0,\n  /* 34109 */ 0, 0, 28809, 53531, 45, 45, 67, 211, 67, 67, 67, 67, 230, 234, 240, 244, 67, 67, 67, 67, 67, 67, 464, 67,\n  /* 34133 */ 67, 67, 67, 67, 67, 479, 67, 67, 67, 260, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531,\n  /* 34157 */ 97, 97, 291, 97, 97, 97, 97, 310, 314, 320, 324, 97, 97, 97, 97, 97, 97, 1367, 97, 97, 97, 97, 97, 97, 97,\n  /* 34182 */ 97, 97, 1355, 97, 97, 97, 97, 97, 97, 1362, 340, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27,\n  /* 34207 */ 27, 131427, 0, 0, 360, 0, 362, 0, 365, 28809, 367, 139, 369, 45, 45, 45, 374, 67, 67, 460, 67, 67, 67, 67,\n  /* 34231 */ 466, 67, 67, 67, 67, 67, 67, 67, 67, 801, 67, 67, 67, 67, 67, 67, 67, 67, 67, 487, 67, 67, 67, 67, 67, 67,\n  /* 34257 */ 67, 67, 67, 67, 498, 67, 67, 67, 67, 67, 67, 1772, 67, 67, 97, 97, 97, 97, 97, 97, 97, 0, 921, 922, 1175,\n  /* 34282 */ 0, 0, 0, 0, 45, 67, 502, 67, 67, 67, 67, 67, 67, 67, 508, 67, 67, 67, 515, 517, 67, 67, 67, 67, 67, 97,\n  /* 34308 */ 97, 97, 97, 97, 0, 0, 0, 1932, 97, 97, 0, 1999, 97, 97, 97, 0, 97, 97, 2004, 2005, 97, 45, 45, 45, 45,\n  /* 34333 */ 1193, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 676, 45, 45, 45, 45, 67, 24850, 24850, 12564, 12564, 0,\n  /* 34356 */ 57889, 0, 0, 0, 53531, 53531, 367, 286, 552, 97, 97, 97, 97, 97, 1377, 0, 0, 45, 45, 45, 45, 45, 45, 45,\n  /* 34380 */ 45, 655, 45, 45, 45, 45, 45, 45, 45, 97, 97, 557, 97, 97, 97, 97, 563, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 34405 */ 1135, 97, 97, 97, 97, 97, 97, 97, 97, 97, 584, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 595, 97, 97, 97,\n  /* 34430 */ 97, 97, 911, 97, 97, 97, 97, 97, 97, 97, 638, 0, 0, 0, 0, 1315, 0, 0, 0, 0, 97, 97, 97, 1319, 97, 97, 97,\n  /* 34457 */ 0, 97, 97, 97, 97, 97, 97, 1733, 97, 97, 97, 97, 97, 97, 1340, 97, 97, 97, 1343, 97, 97, 1345, 97, 1346,\n  /* 34481 */ 97, 599, 97, 97, 97, 97, 97, 97, 97, 605, 97, 97, 97, 612, 614, 97, 97, 97, 97, 97, 1794, 97, 97, 97, 45,\n  /* 34506 */ 45, 45, 45, 45, 45, 45, 1207, 45, 45, 45, 45, 45, 45, 1213, 45, 45, 745, 67, 67, 67, 67, 751, 67, 67, 67,\n  /* 34531 */ 67, 67, 67, 67, 67, 67, 67, 1577, 67, 67, 67, 67, 67, 762, 67, 67, 67, 67, 766, 67, 67, 67, 67, 67, 67,\n  /* 34556 */ 67, 67, 67, 67, 1765, 67, 67, 67, 67, 67, 777, 67, 67, 781, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 34581 */ 67, 1592, 1593, 67, 67, 97, 843, 97, 97, 97, 97, 849, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1510, 97, 97,\n  /* 34605 */ 97, 97, 97, 97, 97, 860, 97, 97, 97, 97, 864, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1797, 45, 45, 45, 45,\n  /* 34630 */ 1801, 45, 97, 875, 97, 97, 879, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1522, 97, 97, 97, 97, 97, 991,\n  /* 34655 */ 45, 45, 45, 45, 996, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 215, 67, 67, 67, 67, 233, 67, 67, 67, 67,\n  /* 34680 */ 251, 253, 1022, 67, 67, 67, 1026, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1035, 67, 67, 1038, 67, 67, 67,\n  /* 34704 */ 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1458, 67, 67, 67, 67, 67, 1064, 67, 67, 67, 1067, 67, 67, 67, 67,\n  /* 34729 */ 1072, 67, 67, 67, 67, 67, 67, 1296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2367488, 2158592, 2158592, 2158592,\n  /* 34750 */ 2158592, 2158592, 2158592, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 1096, 0, 921, 29315,\n  /* 34771 */ 0, 0, 0, 0, 928, 45, 45, 45, 45, 45, 934, 45, 45, 45, 164, 45, 45, 45, 45, 45, 45, 45, 45, 45, 198, 45,\n  /* 34797 */ 45, 45, 378, 45, 45, 45, 45, 45, 45, 393, 45, 45, 45, 398, 45, 97, 97, 1116, 97, 97, 97, 1120, 97, 97, 97,\n  /* 34822 */ 97, 97, 97, 97, 97, 97, 1147, 1148, 97, 97, 97, 97, 97, 97, 97, 1129, 97, 97, 1132, 97, 97, 97, 97, 97,\n  /* 34846 */ 97, 97, 97, 97, 97, 97, 1626, 97, 97, 97, 97, 0, 45, 1178, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1185, 45,\n  /* 34871 */ 45, 45, 45, 441, 45, 45, 45, 45, 45, 45, 451, 45, 45, 67, 67, 67, 67, 67, 227, 67, 67, 67, 67, 67, 67, 67,\n  /* 34897 */ 67, 1260, 67, 67, 67, 1263, 67, 67, 1265, 1203, 45, 45, 1205, 45, 1206, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 34920 */ 45, 1216, 67, 1266, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1276, 67, 67, 67, 67, 67, 67, 492, 67, 67, 67, 67,\n  /* 34945 */ 67, 67, 67, 67, 67, 471, 67, 67, 67, 67, 481, 67, 45, 1386, 45, 1389, 45, 45, 45, 45, 1394, 45, 45, 45,\n  /* 34969 */ 1397, 45, 45, 45, 45, 995, 45, 997, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1915, 67, 67, 67, 67, 67,\n  /* 34994 */ 1422, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1433, 67, 1436, 67, 67, 67, 67, 1441, 67, 67, 67,\n  /* 35018 */ 1444, 67, 67, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 281, 28809, 53531, 97, 97, 97, 97, 1494, 97,\n  /* 35041 */ 97, 97, 1497, 97, 97, 97, 97, 97, 97, 97, 1368, 97, 97, 97, 97, 97, 97, 97, 97, 851, 97, 97, 97, 97, 97,\n  /* 35066 */ 97, 97, 67, 67, 67, 1571, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 67, 67,\n  /* 35090 */ 1583, 67, 67, 67, 67, 67, 67, 67, 67, 1591, 67, 67, 67, 67, 67, 67, 752, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 35115 */ 67, 1056, 67, 67, 67, 67, 67, 67, 97, 1634, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1125,\n  /* 35140 */ 97, 97, 97, 1647, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1183, 45, 45, 45, 45, 45, 45,\n  /* 35166 */ 45, 45, 45, 409, 45, 45, 45, 45, 45, 45, 1658, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 35191 */ 1668, 1712, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 1835, 97, 97, 97, 97, 0, 0, 0, 97,\n  /* 35217 */ 97, 1844, 97, 97, 1726, 0, 97, 97, 97, 97, 97, 1732, 97, 1734, 97, 97, 97, 97, 97, 300, 97, 308, 97, 97,\n  /* 35241 */ 97, 97, 97, 97, 97, 97, 866, 97, 97, 97, 97, 97, 97, 97, 67, 67, 67, 1758, 67, 67, 67, 1762, 67, 67, 67,\n  /* 35266 */ 67, 67, 67, 67, 67, 1043, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1771, 67, 67, 67, 97, 97, 97,\n  /* 35291 */ 97, 97, 1776, 97, 97, 97, 97, 297, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1108, 97, 97, 97, 97, 67,\n  /* 35316 */ 67, 67, 1966, 97, 97, 97, 1970, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 1720, 97, 97, 97, 97, 97, 0, 0,\n  /* 35342 */ 97, 97, 97, 1837, 97, 0, 1840, 1841, 97, 97, 97, 1988, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1994, 1995,\n  /* 35366 */ 67, 97, 97, 97, 97, 97, 1103, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 917, 97, 97, 0, 0, 0, 67, 67, 265,\n  /* 35392 */ 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 345, 97, 97, 97, 97, 0, 40976, 0, 18, 18,\n  /* 35416 */ 24, 24, 27, 27, 27, 131427, 0, 0, 0, 361, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 671, 45, 45,\n  /* 35440 */ 45, 45, 45, 45, 45, 45, 45, 45, 411, 45, 45, 414, 45, 45, 45, 45, 377, 45, 45, 45, 386, 45, 45, 45, 45,\n  /* 35465 */ 45, 45, 45, 45, 45, 1223, 45, 45, 45, 45, 45, 45, 45, 45, 45, 426, 45, 45, 433, 45, 45, 45, 67, 67, 67,\n  /* 35490 */ 67, 67, 463, 67, 67, 67, 472, 67, 67, 67, 67, 67, 67, 67, 527, 67, 67, 67, 67, 67, 67, 537, 67, 540,\n  /* 35514 */ 24850, 24850, 12564, 12564, 0, 57889, 0, 0, 0, 53531, 53531, 367, 286, 97, 97, 97, 97, 97, 1119, 97, 97,\n  /* 35535 */ 97, 97, 97, 97, 97, 97, 97, 97, 1509, 97, 97, 97, 97, 97, 97, 97, 97, 564, 97, 97, 97, 97, 97, 97, 97,\n  /* 35560 */ 637, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 921, 29315, 0, 0, 0, 927, 45, 45, 45,\n  /* 35585 */ 45, 45, 45, 45, 45, 45, 1234, 45, 45, 45, 45, 67, 67, 67, 67, 1240, 45, 697, 45, 45, 45, 45, 45, 45, 45,\n  /* 35610 */ 45, 45, 45, 708, 45, 45, 45, 45, 1221, 45, 45, 45, 45, 1225, 45, 45, 45, 45, 45, 45, 384, 45, 45, 45, 45,\n  /* 35635 */ 45, 45, 45, 45, 45, 1210, 45, 45, 45, 45, 45, 45, 67, 67, 795, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 35661 */ 67, 67, 1470, 67, 67, 67, 67, 67, 67, 67, 815, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 97, 97, 97,\n  /* 35685 */ 893, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1164, 97, 97, 97, 67, 67, 67, 1025, 67, 67, 67, 67,\n  /* 35710 */ 67, 67, 67, 67, 67, 67, 67, 67, 1687, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0,\n  /* 35735 */ 0, 0, 0, 1097, 1241, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1450, 45, 45, 1388, 45,\n  /* 35760 */ 1390, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1236, 67, 67, 67, 67, 67, 1437, 67, 67, 67, 67, 67, 67,\n  /* 35785 */ 67, 67, 67, 67, 67, 67, 67, 67, 67, 1472, 1490, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 35810 */ 97, 1503, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 1930, 0, 97, 97, 97, 97, 97, 847, 97, 97, 97, 97, 97,\n  /* 35836 */ 97, 97, 97, 97, 858, 67, 67, 1965, 67, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 1719, 97, 97,\n  /* 35862 */ 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 45, 1382, 45, 1383, 45, 45, 45, 159, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 35888 */ 45, 45, 45, 45, 45, 1563, 45, 45, 45, 45, 45, 67, 261, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0,\n  /* 35913 */ 28809, 53531, 341, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 97, 1099, 97, 97, 97, 97,\n  /* 35937 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1333, 97, 1230, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67,\n  /* 35962 */ 67, 67, 67, 67, 1992, 67, 1993, 67, 67, 67, 97, 97, 45, 45, 160, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 35987 */ 45, 45, 45, 1665, 45, 45, 45, 45, 45, 131427, 357, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45,\n  /* 36011 */ 45, 684, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 412, 45, 45, 45, 416, 45, 45, 45, 440, 45, 45, 45, 45,\n  /* 36036 */ 45, 45, 45, 45, 45, 45, 45, 67, 67, 1990, 67, 1991, 67, 67, 67, 67, 67, 67, 67, 97, 97, 1707, 97, 97, 97,\n  /* 36061 */ 97, 97, 97, 501, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1691, 67, 67, 67, 67, 67,\n  /* 36086 */ 526, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1030, 67, 1032, 67, 67, 67, 67, 598, 97, 97, 97, 97, 97, 97,\n  /* 36111 */ 97, 97, 97, 97, 97, 97, 97, 97, 97, 1632, 0, 921, 29315, 923, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 36137 */ 1404, 45, 45, 45, 45, 45, 45, 45, 45, 45, 425, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 25398, 0,\n  /* 36161 */ 13112, 0, 54074, 0, 0, 1093, 0, 0, 0, 0, 0, 97, 1609, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1369, 97, 97,\n  /* 36186 */ 97, 1372, 97, 97, 67, 67, 266, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 346, 97, 97,\n  /* 36210 */ 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 665, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,\n  /* 36236 */ 45, 45, 1677, 45, 45, 45, 45, 67, 45, 45, 954, 45, 956, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1545,\n  /* 36261 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 448, 45, 45, 45, 45, 67, 456, 67, 67, 67, 67, 67, 1270, 67, 67, 67,\n  /* 36286 */ 67, 67, 67, 67, 67, 67, 67, 1069, 67, 67, 67, 67, 67, 67, 97, 97, 97, 1350, 97, 97, 97, 97, 97, 97, 97,\n  /* 36311 */ 97, 97, 97, 97, 97, 1524, 97, 97, 97, 97, 97, 97, 97, 1376, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 1559,\n  /* 36337 */ 1561, 45, 45, 45, 1564, 45, 1566, 1567, 45, 67, 67, 67, 67, 67, 1573, 67, 67, 67, 67, 67, 67, 67, 67, 67,\n  /* 36361 */ 67, 1247, 67, 67, 67, 67, 67, 1252, 97, 1725, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1628,\n  /* 36386 */ 97, 1630, 0, 0, 94242, 0, 0, 0, 2211840, 0, 1118208, 0, 0, 0, 0, 2158592, 2158731, 2158592, 2158592,\n  /* 36405 */ 2158592, 3117056, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592,\n  /* 36416 */ 2158592, 2158592, 2158592, 3018752, 2158592, 3043328, 2158592, 2158592, 2158592, 2158592, 3080192,\n  /* 36427 */ 2158592, 2158592, 3112960, 2158592, 2158592, 2158592, 2158592, 2158592, 2158878, 2158592, 2158592,\n  /* 36438 */ 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592,\n  /* 36449 */ 2158592, 2605056, 2158592, 2158592, 2207744, 0, 542, 0, 544, 0, 0, 2166784, 0, 0, 0, 550, 0, 0, 2158592,\n  /* 36468 */ 2158592, 2686976, 2158592, 2715648, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592,\n  /* 36479 */ 2867200, 2158592, 2904064, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 94242, 0, 0,\n  /* 36493 */ 0, 2211840, 0, 0, 1130496, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 0, 0,\n  /* 36510 */ 139, 0, 0, 0, 139, 0, 2367488, 2207744, 0, 0, 0, 0, 176128, 0, 2166784, 0, 0, 0, 0, 0, 286, 2158592,\n  /* 36532 */ 2158592, 3170304, 3174400, 2158592, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2424832,\n  /* 36545 */ 2158592, 2158592, 2158592, 1508, 2158592, 2908160, 2158592, 2158592, 2158592, 2977792, 2158592, 2158592,\n  /* 36557 */ 2158592, 2158592, 3039232, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3158016, 67, 24850,\n  /* 36569 */ 24850, 12564, 12564, 0, 0, 0, 0, 0, 53531, 53531, 0, 286, 97, 97, 97, 97, 97, 1144, 97, 97, 97, 97, 97,\n  /* 36592 */ 97, 97, 97, 97, 97, 1149, 97, 97, 97, 97, 1154, 57889, 0, 0, 0, 0, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97,\n  /* 36618 */ 97, 561, 97, 97, 97, 97, 97, 97, 576, 97, 97, 139264, 139264, 139264, 139264, 139264, 139264, 139264,\n  /* 36636 */ 139264, 139264, 139264, 139264, 139264, 0, 0, 139264, 0, 921, 29315, 0, 0, 926, 0, 45, 45, 45, 45, 45, 45,\n  /* 36657 */ 45, 45, 45, 719, 720, 45, 45, 45, 45, 45, 45, 45, 45, 685, 45, 45, 45, 45, 45, 45, 45, 45, 45, 942, 45,\n  /* 36682 */ 45, 946, 45, 45, 45, 950, 45, 45, 0, 2146304, 2146304, 0, 0, 0, 0, 2224128, 2224128, 2224128, 2232320,\n  /* 36701 */ 2232320, 2232320, 2232320, 0, 0, 1301, 0, 0, 0, 0, 0, 1307, 0, 0, 0, 0, 0, 1313, 0, 0, 0, 0, 0, 0, 0, 97,\n  /* 36727 */ 97, 1318, 97, 97, 97, 97, 97, 97, 1795, 97, 97, 45, 45, 45, 45, 45, 45, 45, 446, 45, 45, 45, 45, 45, 45,\n  /* 36752 */ 67, 67, 2158592, 2146304, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 2158592, 0, 921, 29315, 0, 924, 0, 0,\n  /* 36776 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 1000, 45, 45, 45, 45, 67, 67\n];\n\nXQueryTokenizer.EXPECTED =\n[\n  /*    0 */ 290, 300, 304, 353, 296, 309, 305, 319, 315, 324, 328, 352, 354, 334, 338, 330, 320, 345, 349, 293, 358,\n  /*   21 */ 362, 341, 366, 312, 370, 374, 378, 382, 386, 390, 394, 398, 737, 402, 634, 439, 604, 634, 634, 634, 634,\n  /*   42 */ 408, 634, 634, 634, 404, 634, 634, 634, 457, 634, 634, 963, 634, 634, 413, 634, 634, 634, 634, 634, 634,\n  /*   63 */ 634, 663, 418, 422, 903, 902, 426, 431, 548, 634, 437, 521, 919, 443, 615, 409, 449, 455, 624, 731, 751,\n  /*   84 */ 634, 461, 465, 672, 470, 469, 474, 481, 485, 477, 489, 493, 629, 542, 497, 505, 603, 602, 991, 648, 510,\n  /*  105 */ 804, 634, 515, 958, 526, 525, 530, 768, 634, 546, 552, 711, 710, 593, 558, 562, 618, 566, 570, 574, 578,\n  /*  126 */ 582, 586, 590, 608, 612, 660, 822, 821, 634, 622, 596, 444, 628, 533, 724, 633, 640, 653, 647, 652, 536,\n  /*  147 */ 1008, 451, 450, 445, 657, 670, 676, 685, 689, 693, 697, 701, 704, 707, 715, 719, 798, 815, 634, 723, 762,\n  /*  168 */ 996, 634, 728, 969, 730, 735, 908, 634, 741, 679, 889, 511, 747, 634, 750, 755, 499, 666, 499, 501, 759,\n  /*  189 */ 772, 776, 780, 634, 787, 784, 797, 802, 809, 808, 427, 814, 1006, 517, 634, 519, 853, 634, 813, 850, 793,\n  /*  210 */ 634, 819, 826, 833, 832, 837, 843, 847, 857, 861, 863, 867, 871, 875, 879, 883, 643, 887, 539, 980, 979,\n  /*  231 */ 634, 893, 944, 634, 900, 896, 634, 907, 933, 506, 912, 917, 828, 433, 636, 635, 554, 961, 923, 930, 927,\n  /*  252 */ 937, 941, 634, 634, 634, 974, 948, 952, 985, 913, 968, 967, 743, 634, 973, 839, 634, 978, 599, 634, 984,\n  /*  273 */ 989, 765, 444, 995, 1000, 634, 1003, 790, 955, 1012, 681, 634, 634, 634, 634, 634, 414, 1016, 1020, 1024,\n  /*  293 */ 1085, 1027, 1090, 1090, 1046, 1080, 1137, 1108, 1215, 1049, 1032, 1039, 1085, 1085, 1085, 1085, 1058, 1062,\n  /*  311 */ 1068, 1085, 1086, 1090, 1090, 1091, 1072, 1064, 1107, 1090, 1090, 1090, 1118, 1123, 1138, 1078, 1074, 1084,\n  /*  329 */ 1085, 1085, 1085, 1087, 1090, 1062, 1052, 1060, 1114, 1062, 1104, 1085, 1085, 1090, 1090, 1028, 1122, 1063,\n  /*  347 */ 1128, 1139, 1127, 1158, 1085, 1085, 1151, 1090, 1090, 1090, 1095, 1090, 1132, 1073, 1136, 1143, 1061, 1150,\n  /*  365 */ 1085, 1155, 1098, 1101, 1146, 1162, 1169, 1101, 1185, 1151, 1090, 1110, 1173, 1054, 1087, 1109, 1177, 1165,\n  /*  383 */ 1089, 1204, 1184, 1107, 1189, 1193, 1088, 1197, 1180, 1201, 1208, 1042, 1212, 1219, 1223, 1227, 1231, 1235,\n  /*  401 */ 1245, 1777, 1527, 1686, 1686, 1238, 1686, 1254, 1686, 1686, 1686, 1294, 1669, 1686, 1686, 1686, 1322, 1625,\n  /*  419 */ 1534, 1268, 1624, 1275, 1281, 1443, 1292, 1300, 1686, 1686, 1686, 1350, 1826, 1306, 1686, 1686, 1240, 2032,\n  /*  437 */ 1317, 1321, 1686, 1686, 1253, 1686, 1326, 1686, 1686, 1686, 1418, 1709, 1446, 1686, 1686, 1686, 1492, 1686,\n  /*  455 */ 1295, 1447, 1686, 1686, 1258, 1686, 1736, 1686, 1686, 1520, 1355, 1686, 1288, 1348, 1361, 1686, 1359, 1686,\n  /*  473 */ 1364, 1498, 1368, 1302, 1362, 1381, 1389, 1395, 1486, 1686, 1371, 1377, 1370, 1686, 1375, 1382, 1384, 1402,\n  /*  491 */ 1408, 1385, 1383, 1619, 1413, 1423, 1428, 1433, 1686, 1686, 1270, 1686, 1338, 1686, 1440, 1686, 1686, 1686,\n  /*  509 */ 1499, 1465, 1686, 1686, 1686, 1639, 1473, 1884, 1686, 1686, 1293, 1864, 1686, 1686, 1296, 1321, 1483, 1686,\n  /*  527 */ 1686, 1686, 1646, 1686, 1748, 1496, 1686, 1418, 1675, 1686, 1418, 1702, 1686, 1418, 1981, 1686, 1429, 1409,\n  /*  545 */ 1427, 1504, 1692, 1686, 1686, 1313, 1448, 1651, 1508, 1686, 1686, 1340, 1686, 1903, 1686, 1686, 1435, 1513,\n  /*  563 */ 1686, 1283, 1287, 1519, 1686, 1524, 1363, 1568, 1938, 1539, 1566, 1579, 1479, 1533, 1538, 1553, 1544, 1552,\n  /*  581 */ 1557, 1563, 1574, 1557, 1583, 1589, 1590, 1759, 1594, 1603, 1607, 1611, 1686, 1436, 1514, 1686, 1434, 1656,\n  /*  599 */ 1686, 1434, 1680, 1686, 1453, 1686, 1686, 1686, 1559, 1617, 1686, 1770, 1418, 1623, 1769, 1629, 1686, 1515,\n  /*  617 */ 1335, 1686, 1285, 1686, 1671, 1921, 1650, 1686, 1686, 1344, 1308, 1666, 1686, 1686, 1686, 1659, 1685, 1686,\n  /*  635 */ 1686, 1686, 1686, 1241, 1686, 1686, 1844, 1691, 1686, 1630, 1977, 1970, 1362, 1686, 1686, 1686, 1693, 1698,\n  /*  653 */ 1686, 1686, 1686, 1697, 1686, 1764, 1715, 1686, 1634, 1638, 1686, 1599, 1585, 1686, 1271, 1686, 1269, 1686,\n  /*  671 */ 1721, 1686, 1686, 1354, 1686, 1801, 1686, 1799, 1686, 1640, 1686, 1686, 1461, 1686, 1686, 1732, 1686, 1944,\n  /*  689 */ 1686, 1740, 1686, 1746, 1415, 1396, 1686, 1598, 1547, 1417, 1597, 1416, 1577, 1546, 1397, 1577, 1547, 1548,\n  /*  707 */ 1570, 1398, 1753, 1686, 1652, 1509, 1686, 1686, 1686, 1757, 1686, 1419, 1686, 1763, 1418, 1768, 1781, 1686,\n  /*  725 */ 1686, 1686, 1705, 1686, 2048, 1792, 1686, 1686, 1686, 1735, 1686, 1797, 1686, 1686, 1404, 1686, 1639, 1815,\n  /*  743 */ 1686, 1686, 1418, 2017, 1820, 1686, 1686, 1803, 1686, 1686, 1686, 1736, 1489, 1686, 1686, 1825, 1338, 1260,\n  /*  761 */ 1263, 1686, 1686, 1785, 1686, 1686, 1728, 1686, 1686, 1749, 1497, 1830, 1830, 1262, 1248, 1261, 1329, 1260,\n  /*  779 */ 1264, 1329, 1248, 1249, 1259, 1540, 1849, 1842, 1686, 1686, 1835, 1686, 1686, 1816, 1686, 1686, 1831, 1882,\n  /*  797 */ 1848, 1686, 1686, 1686, 1774, 2071, 1854, 1686, 1686, 1469, 1884, 1686, 1821, 1859, 1686, 1686, 1350, 1883,\n  /*  815 */ 1686, 1686, 1686, 1781, 1391, 1875, 1686, 1686, 1613, 1644, 1686, 1686, 1889, 1686, 1686, 1662, 1884, 1686,\n  /*  833 */ 1885, 1890, 1686, 1686, 1686, 1894, 1686, 1686, 1678, 1686, 1907, 1686, 1686, 1529, 1914, 1686, 1838, 1686,\n  /*  851 */ 1686, 1881, 1686, 1686, 1872, 1876, 1836, 1919, 1686, 1837, 1692, 1910, 1686, 1925, 1928, 1742, 1686, 1811,\n  /*  869 */ 1811, 1930, 1810, 1929, 1935, 1928, 1900, 1942, 1867, 1868, 1931, 1035, 1788, 1948, 1952, 1956, 1960, 1964,\n  /*  887 */ 1686, 1976, 1686, 1686, 1686, 2065, 1686, 1992, 2037, 1686, 1686, 1998, 2009, 1972, 2002, 1686, 1686, 1686,\n  /*  905 */ 2077, 1300, 2023, 1686, 1686, 1686, 1807, 2031, 1686, 1686, 1686, 1860, 1500, 2032, 1686, 1686, 1686, 2083,\n  /*  923 */ 1686, 2036, 1686, 1277, 1276, 2042, 1877, 1686, 1686, 2041, 1686, 1686, 2027, 2037, 2012, 1686, 2012, 1855,\n  /*  941 */ 1850, 1686, 2046, 1686, 1686, 2054, 1996, 1686, 1897, 1309, 2059, 2052, 1686, 2058, 1686, 1686, 2081, 1686,\n  /*  959 */ 1717, 1477, 1686, 1331, 1686, 1686, 1687, 1686, 1860, 1681, 1686, 1686, 1686, 1966, 1724, 1686, 1686, 1686,\n  /*  977 */ 1984, 2015, 1686, 1686, 1686, 1988, 1686, 2063, 1686, 1686, 1686, 2005, 1686, 1727, 1686, 1686, 1711, 1457,\n  /*  995 */ 2069, 1686, 1686, 1686, 2019, 2075, 1686, 1686, 1915, 1686, 1686, 1793, 1874, 1686, 1686, 1491, 1362, 1449,\n  /* 1013 */ 1686, 1686, 1460, 2098, 2087, 2091, 2095, 2184, 2102, 2113, 2780, 2117, 2134, 2142, 2281, 2146, 2146, 2146,\n  /* 1031 */ 2304, 2296, 2181, 2639, 2591, 2872, 2592, 2873, 2313, 2195, 2200, 2281, 2146, 2273, 2226, 2204, 2152, 2219,\n  /* 1049 */ 2276, 2167, 2177, 2276, 2235, 2276, 2276, 2230, 2281, 2276, 2296, 2276, 2293, 2276, 2276, 2276, 2276, 2234,\n  /* 1067 */ 2276, 2311, 2314, 2210, 2199, 2217, 2222, 2276, 2276, 2276, 2240, 2276, 2294, 2276, 2276, 2173, 2276, 2198,\n  /* 1085 */ 2281, 2281, 2281, 2281, 2282, 2146, 2146, 2146, 2146, 2205, 2146, 2204, 2248, 2276, 2235, 2276, 2297, 2276,\n  /* 1103 */ 2276, 2276, 2277, 2256, 2281, 2283, 2146, 2146, 2146, 2275, 2276, 2295, 2276, 2276, 2293, 2146, 2304, 2264,\n  /* 1121 */ 2269, 2221, 2276, 2276, 2276, 2293, 2295, 2276, 2276, 2276, 2295, 2263, 2205, 2268, 2220, 2172, 2276, 2276,\n  /* 1139 */ 2276, 2296, 2276, 2276, 2296, 2294, 2276, 2276, 2278, 2281, 2281, 2280, 2281, 2281, 2281, 2283, 2206, 2223,\n  /* 1157 */ 2276, 2276, 2279, 2281, 2281, 2146, 2273, 2276, 2276, 2281, 2281, 2281, 2276, 2292, 2276, 2298, 2225, 2276,\n  /* 1175 */ 2298, 2169, 2224, 2292, 2298, 2171, 2229, 2281, 2281, 2171, 2236, 2281, 2281, 2281, 2146, 2275, 2225, 2292,\n  /* 1193 */ 2299, 2276, 2229, 2281, 2146, 2276, 2290, 2297, 2283, 2146, 2146, 2274, 2224, 2227, 2298, 2225, 2297, 2276,\n  /* 1211 */ 2230, 2170, 2230, 2282, 2146, 2147, 2151, 2156, 2288, 2276, 2230, 2303, 2308, 2236, 2284, 2228, 2318, 2318,\n  /* 1229 */ 2318, 2326, 2335, 2339, 2343, 2349, 2416, 2693, 2357, 2592, 2109, 2592, 2592, 2162, 2943, 2823, 2646, 2592,\n  /* 1247 */ 2361, 2592, 2122, 2592, 2592, 2122, 2470, 2592, 2592, 2592, 2109, 2107, 2592, 2592, 2592, 2123, 2592, 2592,\n  /* 1265 */ 2592, 2125, 2592, 2413, 2592, 2592, 2592, 2127, 2592, 2592, 2414, 2592, 2592, 2592, 2130, 2952, 2592, 2594,\n  /* 1283 */ 2592, 2592, 2212, 2609, 2252, 2592, 2592, 2592, 2446, 2434, 2592, 2592, 2592, 2212, 2446, 2450, 2456, 2431,\n  /* 1301 */ 2435, 2592, 2592, 2243, 2478, 2448, 2439, 2946, 2592, 2592, 2592, 2368, 2809, 2813, 2450, 2441, 2212, 2812,\n  /* 1319 */ 2449, 2440, 2947, 2592, 2592, 2592, 2345, 2451, 2457, 2948, 2592, 2124, 2592, 2592, 2650, 2823, 2449, 2455,\n  /* 1337 */ 2946, 2592, 2128, 2592, 2592, 2649, 2952, 2592, 2810, 2448, 2461, 2991, 2467, 2592, 2592, 2329, 2817, 2474,\n  /* 1355 */ 2990, 2466, 2592, 2592, 2373, 2447, 2992, 2469, 2592, 2592, 2592, 2373, 2447, 2477, 2468, 2592, 2592, 2353,\n  /* 1373 */ 2469, 2592, 2495, 2592, 2592, 2415, 2483, 2592, 2415, 2496, 2592, 2592, 2352, 2592, 2592, 2352, 2352, 2469,\n  /* 1391 */ 2592, 2592, 2363, 2331, 2494, 2592, 2592, 2592, 2375, 2592, 2375, 2415, 2504, 2592, 2592, 2367, 2372, 2503,\n  /* 1409 */ 2592, 2592, 2592, 2389, 2418, 2415, 2592, 2592, 2373, 2592, 2592, 2592, 2593, 2732, 2417, 2415, 2592, 2417,\n  /* 1427 */ 2520, 2592, 2592, 2592, 2390, 2521, 2521, 2592, 2592, 2592, 2401, 2599, 2585, 2526, 2531, 2120, 2592, 2212,\n  /* 1445 */ 2426, 2450, 2463, 2948, 2592, 2592, 2592, 2213, 2389, 2527, 2532, 2121, 2542, 2551, 2105, 2592, 2213, 2592,\n  /* 1463 */ 2592, 2592, 2558, 2538, 2544, 2553, 2557, 2537, 2543, 2552, 2421, 2572, 2576, 2546, 2543, 2547, 2592, 2592,\n  /* 1481 */ 2373, 2615, 2575, 2545, 2105, 2592, 2244, 2479, 2592, 2129, 2592, 2592, 2628, 2690, 2469, 2562, 2566, 2592,\n  /* 1499 */ 2592, 2592, 2415, 2928, 2934, 2401, 2570, 2574, 2564, 2572, 2585, 2590, 2592, 2592, 2585, 2965, 2592, 2592,\n  /* 1517 */ 2592, 2445, 2251, 2592, 2592, 2592, 2474, 2592, 2609, 2892, 2592, 2362, 2592, 2592, 2138, 2851, 2159, 2592,\n  /* 1535 */ 2592, 2592, 2509, 2888, 2892, 2592, 2592, 2592, 2490, 2418, 2891, 2592, 2592, 2376, 2592, 2592, 2374, 2592,\n  /* 1553 */ 2889, 2388, 2592, 2373, 2373, 2890, 2592, 2592, 2387, 2592, 2887, 2505, 2892, 2592, 2373, 2610, 2388, 2592,\n  /* 1571 */ 2592, 2376, 2373, 2592, 2887, 2891, 2592, 2374, 2592, 2592, 2608, 2159, 2614, 2620, 2592, 2592, 2394, 2594,\n  /* 1589 */ 2887, 2399, 2592, 2887, 2397, 2508, 2374, 2507, 2592, 2375, 2592, 2592, 2592, 2595, 2508, 2506, 2592, 2506,\n  /* 1607 */ 2505, 2505, 2592, 2507, 2637, 2505, 2592, 2592, 2401, 2661, 2592, 2643, 2592, 2592, 2417, 2592, 2655, 2592,\n  /* 1625 */ 2592, 2592, 2510, 2414, 2656, 2592, 2592, 2592, 2516, 2592, 2593, 2660, 2665, 2880, 2592, 2592, 2592, 2522,\n  /* 1643 */ 2767, 2666, 2881, 2592, 2592, 2420, 2571, 2696, 2592, 2592, 2592, 2580, 2572, 2686, 2632, 2698, 2592, 2383,\n  /* 1661 */ 2514, 2592, 2163, 2932, 2465, 2685, 2631, 2697, 2592, 2388, 2592, 2592, 2212, 2604, 2671, 2632, 2678, 2592,\n  /* 1679 */ 2401, 2405, 2409, 2592, 2592, 2592, 2679, 2592, 2592, 2592, 2592, 2108, 2677, 2591, 2592, 2592, 2592, 2419,\n  /* 1697 */ 2592, 2683, 2187, 2191, 2469, 2671, 2189, 2467, 2592, 2401, 2629, 2633, 2702, 2468, 2592, 2592, 2421, 2536,\n  /* 1715 */ 2703, 2469, 2592, 2592, 2422, 2573, 2593, 2672, 2467, 2592, 2402, 2406, 2592, 2402, 2979, 2592, 2592, 2626,\n  /* 1733 */ 2673, 2467, 2592, 2446, 2259, 2947, 2592, 2377, 2709, 2592, 2592, 2522, 2862, 2713, 2468, 2592, 2592, 2581,\n  /* 1751 */ 2572, 2562, 2374, 2374, 2592, 2376, 2721, 2724, 2592, 2592, 2624, 2373, 2731, 2592, 2592, 2592, 2626, 2732,\n  /* 1769 */ 2592, 2592, 2592, 2755, 2656, 2726, 2736, 2741, 2592, 2486, 2593, 2381, 2592, 2727, 2737, 2742, 2715, 2747,\n  /* 1787 */ 2753, 2592, 2498, 2469, 2873, 2743, 2592, 2592, 2592, 2791, 2759, 2763, 2592, 2592, 2627, 2704, 2592, 2592,\n  /* 1805 */ 2522, 2789, 2593, 2761, 2753, 2592, 2498, 2863, 2592, 2592, 2767, 2592, 2592, 2592, 2792, 2789, 2592, 2592,\n  /* 1823 */ 2592, 2803, 2126, 2592, 2592, 2592, 2811, 2122, 2592, 2592, 2592, 2834, 2777, 2592, 2592, 2592, 2848, 2936,\n  /* 1841 */ 2591, 2489, 2797, 2592, 2592, 2670, 2631, 2490, 2798, 2592, 2592, 2592, 2963, 2807, 2592, 2592, 2592, 2965,\n  /* 1859 */ 2838, 2592, 2592, 2592, 2975, 2330, 2818, 2829, 2592, 2498, 2939, 2592, 2498, 2592, 2791, 2331, 2819, 2830,\n  /* 1877 */ 2592, 2592, 2592, 2982, 2834, 2817, 2828, 2106, 2592, 2592, 2592, 2405, 2405, 2817, 2828, 2592, 2592, 2415,\n  /* 1895 */ 2849, 2842, 2592, 2522, 2773, 2592, 2522, 2868, 2592, 2580, 2600, 2586, 2137, 2850, 2843, 2592, 2592, 2855,\n  /* 1913 */ 2937, 2844, 2592, 2592, 2592, 2987, 2936, 2591, 2592, 2592, 2684, 2630, 2592, 2856, 2938, 2592, 2592, 2860,\n  /* 1931 */ 2939, 2592, 2592, 2872, 2592, 2861, 2591, 2592, 2592, 2887, 2616, 2592, 2867, 2592, 2592, 2708, 2592, 2498,\n  /* 1949 */ 2469, 2498, 2497, 2785, 2773, 2499, 2783, 2770, 2877, 2877, 2877, 2772, 2592, 2592, 2345, 2885, 2592, 2592,\n  /* 1967 */ 2592, 2715, 2762, 2515, 2896, 2592, 2592, 2715, 2917, 2516, 2897, 2592, 2592, 2592, 2901, 2906, 2911, 2592,\n  /* 1985 */ 2592, 2956, 2960, 2715, 2902, 2907, 2912, 2593, 2916, 2920, 2820, 2922, 2822, 2592, 2592, 2715, 2927, 2921,\n  /* 2003 */ 2821, 2106, 2592, 2592, 2974, 2408, 2321, 2821, 2106, 2592, 2592, 2983, 2592, 2593, 2404, 2408, 2592, 2592,\n  /* 2021 */ 2717, 2749, 2716, 2928, 2322, 2822, 2593, 2926, 2919, 2820, 2934, 2823, 2592, 2592, 2592, 2651, 2824, 2592,\n  /* 2039 */ 2592, 2592, 2130, 2952, 2592, 2592, 2592, 2592, 2964, 2592, 2592, 2716, 2748, 2592, 2969, 2592, 2592, 2716,\n  /* 2057 */ 2918, 2368, 2970, 2592, 2592, 2592, 2403, 2407, 2592, 2592, 2787, 2211, 2404, 2409, 2592, 2592, 2802, 2837,\n  /* 2075 */ 2987, 2592, 2592, 2592, 2809, 2427, 2592, 2793, 2592, 2592, 2809, 2447, 1073741824, 0x80000000, 539754496,\n  /* 2090 */ 542375936, 402653184, 554434560, 571736064, 545521856, 268451840, 335544320, 268693630, 512, 2048, 256,\n  /* 2101 */ 1024, 0, 1024, 0, 1073741824, 0x80000000, 0, 0, 0, 8388608, 0, 0, 1073741824, 1073741824, 0, 0x80000000,\n  /* 2117 */ 537133056, 4194304, 1048576, 268435456, -1073741824, 0, 0, 0, 1048576, 0, 0, 0, 1572864, 0, 0, 0, 4194304,\n  /* 2134 */ 0, 134217728, 16777216, 0, 0, 32, 64, 98304, 0, 33554432, 8388608, 192, 67108864, 67108864, 67108864,\n  /* 2149 */ 67108864, 16, 32, 4, 0, 8192, 196608, 196608, 229376, 80, 4096, 524288, 8388608, 0, 0, 32, 128, 256, 24576,\n  /* 2168 */ 24600, 24576, 24576, 2, 24576, 24576, 24576, 24584, 24592, 24576, 24578, 24576, 24578, 24576, 24576, 16,\n  /* 2184 */ 512, 2048, 2048, 256, 4096, 32768, 1048576, 4194304, 67108864, 134217728, 268435456, 262144, 134217728, 0,\n  /* 2198 */ 128, 128, 64, 16384, 16384, 16384, 67108864, 32, 32, 4, 4, 4096, 262144, 134217728, 0, 0, 0, 2, 0, 8192,\n  /* 2218 */ 131072, 131072, 4096, 4096, 4096, 4096, 24576, 24576, 24576, 8, 8, 24576, 24576, 16384, 16384, 16384,\n  /* 2234 */ 24576, 24584, 24576, 24576, 24576, 16384, 24576, 536870912, 262144, 0, 0, 32, 2048, 8192, 4, 4096, 4096,\n  /* 2251 */ 4096, 786432, 8388608, 16777216, 0, 128, 16384, 16384, 16384, 32768, 65536, 2097152, 32, 32, 32, 32, 4, 4,\n  /* 2269 */ 4, 4, 4, 4096, 67108864, 67108864, 67108864, 24576, 24576, 24576, 24576, 0, 16384, 16384, 16384, 16384,\n  /* 2285 */ 67108864, 67108864, 8, 67108864, 24576, 8, 8, 8, 24576, 24576, 24576, 24578, 24576, 24576, 24576, 2, 2, 2,\n  /* 2303 */ 16384, 67108864, 67108864, 67108864, 32, 67108864, 8, 8, 24576, 2048, 0x80000000, 536870912, 262144,\n  /* 2316 */ 262144, 262144, 67108864, 8, 24576, 16384, 32768, 1048576, 4194304, 25165824, 67108864, 24576, 32770, 2, 4,\n  /* 2331 */ 112, 512, 98304, 524288, 50, 402653186, 1049090, 1049091, 10, 66, 100925514, 10, 66, 12582914, 0, 0,\n  /* 2347 */ -1678194207, -1678194207, -1041543218, 0, 32768, 0, 0, 32, 65536, 268435456, 1, 1, 513, 1048577, 0,\n  /* 2362 */ 12582912, 0, 0, 0, 4, 1792, 0, 0, 0, 7, 29360128, 0, 0, 0, 8, 0, 0, 0, 12, 1, 1, 0, 0, -604102721,\n  /* 2386 */ -604102721, 4194304, 8388608, 0, 0, 0, 31, 925600, 997981306, 997981306, 997981306, 0, 0, 2048, 8388608, 0,\n  /* 2402 */ 0, 1, 2, 4, 32, 64, 512, 8192, 0, 0, 0, 245760, 997720064, 0, 0, 0, 32, 0, 0, 0, 3, 12, 16, 32, 8, 112,\n  /* 2428 */ 3072, 12288, 16384, 32768, 65536, 131072, 7864320, 16777216, 973078528, 0, 0, 65536, 131072, 3670016,\n  /* 2442 */ 4194304, 16777216, 33554432, 2, 8, 48, 2048, 8192, 16384, 32768, 65536, 131072, 524288, 131072, 524288,\n  /* 2457 */ 3145728, 4194304, 16777216, 33554432, 65536, 131072, 2097152, 4194304, 16777216, 33554432, 134217728,\n  /* 2468 */ 268435456, 536870912, 0, 0, 0, 1024, 0, 8, 48, 2048, 8192, 65536, 33554432, 268435456, 536870912, 65536,\n  /* 2484 */ 268435456, 536870912, 0, 0, 32768, 0, 0, 126, 623104, 65011712, 0, 32, 65536, 536870912, 0, 0, 65536,\n  /* 2501 */ 524288, 0, 32, 65536, 0, 0, 0, 2048, 0, 0, 0, 15482, 245760, -604102721, 0, 0, 0, 18913, 33062912, 925600,\n  /* 2521 */ -605028352, 0, 0, 0, 65536, 31, 8096, 131072, 786432, 3145728, 3145728, 12582912, 50331648, 134217728,\n  /* 2535 */ 268435456, 160, 256, 512, 7168, 131072, 786432, 131072, 786432, 1048576, 2097152, 12582912, 16777216,\n  /* 2548 */ 268435456, 1073741824, 0x80000000, 12582912, 16777216, 33554432, 268435456, 1073741824, 0x80000000, 3, 12,\n  /* 2559 */ 16, 160, 256, 7168, 786432, 1048576, 12582912, 16777216, 268435456, 1073741824, 0, 8, 16, 32, 128, 256,\n  /* 2575 */ 512, 7168, 786432, 1048576, 2097152, 0, 1, 2, 8, 16, 7168, 786432, 1048576, 8388608, 16777216, 16777216,\n  /* 2591 */ 1073741824, 0, 0, 0, 0, 1, 0, 0, 8, 32, 128, 256, 7168, 8, 32, 0, 3072, 0, 8, 32, 3072, 4096, 524288, 8,\n  /* 2615 */ 32, 0, 0, 3072, 4096, 0, 2048, 524288, 8388608, 8, 2048, 0, 0, 1, 12, 256, 4096, 32768, 262144, 1048576,\n  /* 2635 */ 4194304, 67108864, 0, 2048, 0, 2048, 2048, 1073741824, -58805985, -58805985, -58805985, 0, 0, 262144, 0, 0,\n  /* 2651 */ 32, 4194304, 16777216, 134217728, 4382, 172032, -58982400, 0, 0, 2, 28, 256, 4096, 8192, 8192, 32768,\n  /* 2667 */ 131072, 262144, 524288, 1, 2, 12, 256, 4096, 0, 0, 4194304, 67108864, 134217728, 805306368, 1073741824, 0,\n  /* 2683 */ 0, 1, 2, 12, 16, 256, 4096, 1048576, 67108864, 134217728, 268435456, 0, 512, 1048576, 4194304, 201326592,\n  /* 2699 */ 1879048192, 0, 0, 12, 256, 4096, 134217728, 268435456, 536870912, 12, 256, 268435456, 536870912, 0, 12,\n  /* 2714 */ 256, 0, 0, 1, 32, 64, 512, 0, 0, 205236961, 205236961, 0, 0, 0, 1, 96, 640, 1, 10976, 229376, 204996608, 0,\n  /* 2736 */ 640, 2048, 8192, 229376, 1572864, 1572864, 2097152, 201326592, 0, 0, 0, 64, 512, 2048, 229376, 1572864,\n  /* 2752 */ 201326592, 1572864, 201326592, 0, 0, 1, 4382, 0, 1, 32, 2048, 65536, 131072, 1572864, 201326592, 131072,\n  /* 2768 */ 1572864, 134217728, 0, 0, 524288, 524288, 0, 0, 0, -68582786, -68582786, -68582786, 0, 0, 2097152, 524288,\n  /* 2784 */ 0, 524288, 0, 0, 65536, 131072, 1572864, 0, 0, 2, 4, 0, 0, 65011712, -134217728, 0, 0, 0, 0, 2, 4, 120,\n  /* 2806 */ 512, -268435456, 0, 0, 0, 2, 8, 48, 64, 2048, 8192, 98304, 524288, 2097152, 4194304, 25165824, 33554432,\n  /* 2823 */ 134217728, 268435456, 0x80000000, 0, 0, 25165824, 33554432, 134217728, 1879048192, 0x80000000, 0, 0, 4,\n  /* 2836 */ 112, 512, 622592, 65011712, 134217728, -268435456, 16777216, 33554432, 134217728, 1610612736, 0, 0, 0, 64,\n  /* 2850 */ 98304, 524288, 4194304, 16777216, 33554432, 0, 98304, 524288, 16777216, 33554432, 0, 65536, 524288,\n  /* 2863 */ 33554432, 536870912, 1073741824, 0, 65536, 524288, 536870912, 1073741824, 0, 0, 65536, 524288, 536870912,\n  /* 2876 */ 0, 524288, 0, 524288, 524288, 1048576, 2086666240, 0x80000000, 0, -1678194207, 0, 0, 0, 8, 32, 2048,\n  /* 2892 */ 524288, 8388608, 0, 0, 33062912, 436207616, 0x80000000, 0, 0, 32, 64, 2432, 16384, 32768, 32768, 524288,\n  /* 2908 */ 3145728, 4194304, 25165824, 25165824, 167772160, 268435456, 0x80000000, 0, 32, 64, 384, 2048, 16384, 32768,\n  /* 2922 */ 1048576, 2097152, 4194304, 25165824, 32, 64, 128, 256, 2048, 16384, 2048, 16384, 1048576, 4194304,\n  /* 2936 */ 16777216, 33554432, 134217728, 536870912, 1073741824, 0, 0, 2048, 16384, 4194304, 16777216, 33554432,\n  /* 2948 */ 134217728, 805306368, 0, 0, 16777216, 134217728, 268435456, 0x80000000, 0, 622592, 622592, 622592, 8807,\n  /* 2961 */ 8807, 434791, 0, 0, 16777216, 0, 0, 0, 7, 608, 8192, 0, 0, 0, 3, 4, 96, 512, 32, 64, 8192, 0, 0, 16777216,\n  /* 2985 */ 134217728, 0, 0, 2, 4, 8192, 16384, 65536, 2097152, 33554432, 268435456\n];\n\nXQueryTokenizer.TOKEN =\n[\n  \"(0)\",\n  \"ModuleDecl\",\n  \"Annotation\",\n  \"OptionDecl\",\n  \"Operator\",\n  \"Variable\",\n  \"Tag\",\n  \"EndTag\",\n  \"PragmaContents\",\n  \"DirCommentContents\",\n  \"DirPIContents\",\n  \"CDataSectionContents\",\n  \"AttrTest\",\n  \"Wildcard\",\n  \"EQName\",\n  \"IntegerLiteral\",\n  \"DecimalLiteral\",\n  \"DoubleLiteral\",\n  \"PredefinedEntityRef\",\n  \"'\\\"\\\"'\",\n  \"EscapeApos\",\n  \"QuotChar\",\n  \"AposChar\",\n  \"ElementContentChar\",\n  \"QuotAttrContentChar\",\n  \"AposAttrContentChar\",\n  \"NCName\",\n  \"QName\",\n  \"S\",\n  \"CharRef\",\n  \"CommentContents\",\n  \"DocTag\",\n  \"DocCommentContents\",\n  \"EOF\",\n  \"'!'\",\n  \"'\\\"'\",\n  \"'#'\",\n  \"'#)'\",\n  \"''''\",\n  \"'('\",\n  \"'(#'\",\n  \"'(:'\",\n  \"'(:~'\",\n  \"')'\",\n  \"'*'\",\n  \"'*'\",\n  \"','\",\n  \"'-->'\",\n  \"'.'\",\n  \"'/'\",\n  \"'/>'\",\n  \"':'\",\n  \"':)'\",\n  \"';'\",\n  \"'<!--'\",\n  \"'<![CDATA['\",\n  \"'<?'\",\n  \"'='\",\n  \"'>'\",\n  \"'?'\",\n  \"'?>'\",\n  \"'NaN'\",\n  \"'['\",\n  \"']'\",\n  \"']]>'\",\n  \"'after'\",\n  \"'all'\",\n  \"'allowing'\",\n  \"'ancestor'\",\n  \"'ancestor-or-self'\",\n  \"'and'\",\n  \"'any'\",\n  \"'append'\",\n  \"'array'\",\n  \"'as'\",\n  \"'ascending'\",\n  \"'at'\",\n  \"'attribute'\",\n  \"'base-uri'\",\n  \"'before'\",\n  \"'boundary-space'\",\n  \"'break'\",\n  \"'by'\",\n  \"'case'\",\n  \"'cast'\",\n  \"'castable'\",\n  \"'catch'\",\n  \"'check'\",\n  \"'child'\",\n  \"'collation'\",\n  \"'collection'\",\n  \"'comment'\",\n  \"'constraint'\",\n  \"'construction'\",\n  \"'contains'\",\n  \"'content'\",\n  \"'context'\",\n  \"'continue'\",\n  \"'copy'\",\n  \"'copy-namespaces'\",\n  \"'count'\",\n  \"'decimal-format'\",\n  \"'decimal-separator'\",\n  \"'declare'\",\n  \"'default'\",\n  \"'delete'\",\n  \"'descendant'\",\n  \"'descendant-or-self'\",\n  \"'descending'\",\n  \"'diacritics'\",\n  \"'different'\",\n  \"'digit'\",\n  \"'distance'\",\n  \"'div'\",\n  \"'document'\",\n  \"'document-node'\",\n  \"'element'\",\n  \"'else'\",\n  \"'empty'\",\n  \"'empty-sequence'\",\n  \"'encoding'\",\n  \"'end'\",\n  \"'entire'\",\n  \"'eq'\",\n  \"'every'\",\n  \"'exactly'\",\n  \"'except'\",\n  \"'exit'\",\n  \"'external'\",\n  \"'first'\",\n  \"'following'\",\n  \"'following-sibling'\",\n  \"'for'\",\n  \"'foreach'\",\n  \"'foreign'\",\n  \"'from'\",\n  \"'ft-option'\",\n  \"'ftand'\",\n  \"'ftnot'\",\n  \"'ftor'\",\n  \"'function'\",\n  \"'ge'\",\n  \"'greatest'\",\n  \"'group'\",\n  \"'grouping-separator'\",\n  \"'gt'\",\n  \"'idiv'\",\n  \"'if'\",\n  \"'import'\",\n  \"'in'\",\n  \"'index'\",\n  \"'infinity'\",\n  \"'inherit'\",\n  \"'insensitive'\",\n  \"'insert'\",\n  \"'instance'\",\n  \"'integrity'\",\n  \"'intersect'\",\n  \"'into'\",\n  \"'is'\",\n  \"'item'\",\n  \"'json'\",\n  \"'json-item'\",\n  \"'key'\",\n  \"'language'\",\n  \"'last'\",\n  \"'lax'\",\n  \"'le'\",\n  \"'least'\",\n  \"'let'\",\n  \"'levels'\",\n  \"'loop'\",\n  \"'lowercase'\",\n  \"'lt'\",\n  \"'minus-sign'\",\n  \"'mod'\",\n  \"'modify'\",\n  \"'module'\",\n  \"'most'\",\n  \"'namespace'\",\n  \"'namespace-node'\",\n  \"'ne'\",\n  \"'next'\",\n  \"'no'\",\n  \"'no-inherit'\",\n  \"'no-preserve'\",\n  \"'node'\",\n  \"'nodes'\",\n  \"'not'\",\n  \"'object'\",\n  \"'occurs'\",\n  \"'of'\",\n  \"'on'\",\n  \"'only'\",\n  \"'option'\",\n  \"'or'\",\n  \"'order'\",\n  \"'ordered'\",\n  \"'ordering'\",\n  \"'paragraph'\",\n  \"'paragraphs'\",\n  \"'parent'\",\n  \"'pattern-separator'\",\n  \"'per-mille'\",\n  \"'percent'\",\n  \"'phrase'\",\n  \"'position'\",\n  \"'preceding'\",\n  \"'preceding-sibling'\",\n  \"'preserve'\",\n  \"'previous'\",\n  \"'processing-instruction'\",\n  \"'relationship'\",\n  \"'rename'\",\n  \"'replace'\",\n  \"'return'\",\n  \"'returning'\",\n  \"'revalidation'\",\n  \"'same'\",\n  \"'satisfies'\",\n  \"'schema'\",\n  \"'schema-attribute'\",\n  \"'schema-element'\",\n  \"'score'\",\n  \"'self'\",\n  \"'sensitive'\",\n  \"'sentence'\",\n  \"'sentences'\",\n  \"'skip'\",\n  \"'sliding'\",\n  \"'some'\",\n  \"'stable'\",\n  \"'start'\",\n  \"'stemming'\",\n  \"'stop'\",\n  \"'strict'\",\n  \"'strip'\",\n  \"'structured-item'\",\n  \"'switch'\",\n  \"'text'\",\n  \"'then'\",\n  \"'thesaurus'\",\n  \"'times'\",\n  \"'to'\",\n  \"'treat'\",\n  \"'try'\",\n  \"'tumbling'\",\n  \"'type'\",\n  \"'typeswitch'\",\n  \"'union'\",\n  \"'unique'\",\n  \"'unordered'\",\n  \"'updating'\",\n  \"'uppercase'\",\n  \"'using'\",\n  \"'validate'\",\n  \"'value'\",\n  \"'variable'\",\n  \"'version'\",\n  \"'weight'\",\n  \"'when'\",\n  \"'where'\",\n  \"'while'\",\n  \"'wildcards'\",\n  \"'window'\",\n  \"'with'\",\n  \"'without'\",\n  \"'word'\",\n  \"'words'\",\n  \"'xquery'\",\n  \"'zero-digit'\",\n  \"'{'\",\n  \"'{{'\",\n  \"'|'\",\n  \"'}'\",\n  \"'}}'\"\n];\n\n// End\n\n},{}],\"/node_modules/xqlint/lib/lexers/lexer.js\":[function(_dereq_,module,exports){\n'use strict';\n\nvar TokenHandler = function(code) {\n    var input = code;\n    this.tokens = [];\n \n    this.reset = function() {\n        input = input;\n        this.tokens = [];\n    };\n    \n    this.startNonterminal = function() {};\n    this.endNonterminal = function() {};\n\n    this.terminal = function(name, begin, end) {\n        this.tokens.push({\n            name: name,\n            value: input.substring(begin, end)\n        });\n    };\n\n    this.whitespace = function(begin, end) {\n        this.tokens.push({\n            name: 'WS',\n            value: input.substring(begin, end)\n        });\n    };\n};\n\nexports.Lexer = function(Tokenizer, Rules) {\n\n    this.tokens = [];\n  \n    this.getLineTokens = function(line, state) {\n        state = (state === 'start' || !state) ? '[\"start\"]' : state;\n        var stack = JSON.parse(state);\n        var h = new TokenHandler(line);\n        var tokenizer = new Tokenizer(line, h);\n        var tokens = [];\n    \n        while(true) {\n            var currentState = stack[stack.length - 1];\n            try {\n                h.tokens = [];\n                tokenizer['parse_' + currentState]();\n                var info = null;\n        \n                if(h.tokens.length > 1 && h.tokens[0].name === 'WS') {\n                    tokens.push({\n                        type: 'text',\n                        value: h.tokens[0].value\n                    });\n                    h.tokens.splice(0, 1);\n                }\n        \n                var token = h.tokens[0];\n                var rules  = Rules[currentState];\n                for(var k = 0; k < rules.length; k++) {\n                    var rule = Rules[currentState][k];\n                    if((typeof(rule.name) === 'function' && rule.name(token)) || rule.name === token.name) {\n                        info = rule;\n                        break;\n                    }\n                }\n        \n                if(token.name === 'EOF') { break; }\n                if(token.value === '') { throw 'Encountered empty string lexical rule.'; }\n        \n                tokens.push({\n                    type: info === null ? 'text' : (typeof(info.token) === 'function' ? info.token(token.value) : info.token),\n                    value: token.value\n                });\n        \n                if(info && info.next) {\n                    info.next(stack);\n                }\n      \n            } catch(e) {\n                if(e instanceof tokenizer.ParseException) {\n                    var index = 0;\n                    for(var i=0; i < tokens.length; i++) {\n                        index += tokens[i].value.length;\n                    }\n                    tokens.push({ type: 'text', value: line.substring(index) });\n                    return {\n                        tokens: tokens,\n                        state: JSON.stringify(['start'])\n                    };\n                } else {\n                    throw e;\n                }\n            }\n        }\n\n        return {\n            tokens: tokens,\n            state: JSON.stringify(stack)\n        };\n    };\n};\n},{}],\"/node_modules/xqlint/lib/lexers/xquery_lexer.js\":[function(_dereq_,module,exports){\n'use strict';\n\nvar XQueryTokenizer = _dereq_('./XQueryTokenizer').XQueryTokenizer;\nvar Lexer = _dereq_('./lexer').Lexer;\n\nvar keys = 'after|ancestor|ancestor-or-self|and|as|ascending|attribute|before|case|cast|castable|child|collation|comment|copy|count|declare|default|delete|descendant|descendant-or-self|descending|div|document|document-node|element|else|empty|empty-sequence|end|eq|every|except|first|following|following-sibling|for|function|ge|group|gt|idiv|if|import|insert|instance|intersect|into|is|item|last|le|let|lt|mod|modify|module|namespace|namespace-node|ne|node|only|or|order|ordered|parent|preceding|preceding-sibling|processing-instruction|rename|replace|return|satisfies|schema-attribute|schema-element|self|some|stable|start|switch|text|to|treat|try|typeswitch|union|unordered|validate|where|with|xquery|contains|paragraphs|sentences|times|words|by|collectionreturn|variable|version|option|when|encoding|toswitch|catch|tumbling|sliding|window|at|using|stemming|collection|schema|while|on|nodes|index|external|then|in|updating|value|of|containsbreak|loop|continue|exit|returning|append|json|position|strict'.split('|');\n\nvar keywords = keys.map(function(val) { return { name: '\\'' + val + '\\'', token: 'keyword' }; });\nvar ncnames = keys.map(function(val) { return { name: '\\'' + val + '\\'', token: 'text', next: function(stack){ stack.pop(); } }; });\n\nvar cdata = 'constant.language';\nvar number = 'constant';\nvar xmlcomment = 'comment';\nvar pi = 'xml-pe';\nvar pragma = 'constant.buildin';\nvar n = function(name){\n    return '\\'' + name + '\\'';\n};\nvar Rules = {\n    start: [\n        { name: n('(#'), token: pragma, next: function(stack){ stack.push('Pragma'); } },\n        { name: n('(:'), token: 'comment', next: function(stack){ stack.push('Comment'); } },\n        { name: n('(:~'), token: 'comment.doc', next: function(stack){ stack.push('CommentDoc'); } },\n        { name: n('<!--'), token: xmlcomment, next: function(stack){ stack.push('XMLComment'); } },\n        { name: n('<?'), token: pi, next: function(stack) { stack.push('PI'); } },\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.push('AposString'); } },\n        { name: n('\"'), token: 'string', next: function(stack){ stack.push('QuotString'); } },\n        { name: 'Annotation', token: 'support.function' },\n        { name: 'ModuleDecl', token: 'keyword', next: function(stack){ stack.push('Prefix'); } },\n        { name: 'OptionDecl', token: 'keyword', next: function(stack){ stack.push('_EQName'); } },\n        { name: 'AttrTest', token: 'support.type' },\n        { name: 'Variable', token: 'variable' },\n        { name: n('<![CDATA['), token: cdata, next: function(stack){ stack.push('CData'); } },\n        { name: 'IntegerLiteral', token: number },\n        { name: 'DecimalLiteral', token: number },\n        { name: 'DoubleLiteral', token: number },\n        { name: 'Operator', token: 'keyword.operator' },\n        { name: 'EQName', token: function(val) { return keys.indexOf(val) !== -1 ? 'keyword' : 'support.function'; } },\n        { name: n('('), token: 'lparen' },\n        { name: n(')'), token: 'rparen' },\n        { name: 'Tag', token: 'meta.tag', next: function(stack){ stack.push('StartTag'); } },\n        { name: n('}'), token: 'text', next: function(stack){ if(stack.length > 1) { stack.pop(); } } },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } } //, next: function(stack){ if(stack.length > 1) { stack.pop(); } } }\n    ].concat(keywords),\n    _EQName: [\n        { name: 'EQName', token: 'text', next: function(stack) { stack.pop(); } }\n    ].concat(ncnames),\n    Prefix: [\n        { name: 'NCName', token: 'text', next: function(stack) { stack.pop(); } }\n    ].concat(ncnames),\n    StartTag: [\n        { name: n('>'), token: 'meta.tag', next: function(stack){ stack.push('TagContent'); } },\n        { name: 'QName', token: 'entity.other.attribute-name' },\n        { name: n('='), token: 'text' },\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.push('AposAttr'); } },\n        { name: n('\"'), token: 'string', next: function(stack){ stack.push('QuotAttr'); } },\n        { name: n('/>'), token: 'meta.tag.r', next: function(stack){ stack.pop(); } }\n    ],\n    TagContent: [\n        { name: 'ElementContentChar', token: 'text' },\n        { name: n('<![CDATA['), token: cdata, next: function(stack){ stack.push('CData'); } },\n        { name: n('<!--'), token: xmlcomment, next: function(stack){ stack.push('XMLComment'); } },\n        { name: 'Tag', token: 'meta.tag', next: function(stack){ stack.push('StartTag'); } },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: n('{{'), token: 'text' },\n        { name: n('}}'), token: 'text' },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } },\n        { name: 'EndTag', token: 'meta.tag', next: function(stack){ stack.pop(); stack.pop(); } }\n    ],\n    AposAttr: [\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'EscapeApos', token: 'constant.language.escape' },\n        { name: 'AposAttrContentChar', token: 'string' },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: n('{{'), token: 'string' },\n        { name: n('}}'), token: 'string' },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } }\n    ],\n    QuotAttr: [\n        { name: n('\\\"'), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'EscapeQuot', token: 'constant.language.escape' },\n        { name: 'QuotAttrContentChar', token: 'string' },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: n('{{'), token: 'string' },\n        { name: n('}}'), token: 'string' },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } }\n    ],\n    Pragma: [\n        { name: 'PragmaContents', token: pragma },\n        { name: n('#'), token: pragma },\n        { name: n('#)'), token: pragma, next: function(stack){ stack.pop(); } }\n    ],\n    Comment: [\n        { name: 'CommentContents', token: 'comment' },\n        { name: n('(:'), token: 'comment', next: function(stack){ stack.push('Comment'); } },\n        { name: n(':)'), token: 'comment', next: function(stack){ stack.pop(); } }\n    ],\n    CommentDoc: [\n        { name: 'DocCommentContents', token: 'comment.doc' },\n        { name: 'DocTag', token: 'comment.doc.tag' },\n        { name: n('(:'), token: 'comment.doc', next: function(stack){ stack.push('CommentDoc'); } },\n        { name: n(':)'), token: 'comment.doc', next: function(stack){ stack.pop(); } }\n    ],\n    XMLComment: [\n        { name: 'DirCommentContents', token: xmlcomment },\n        { name: n('-->'), token: xmlcomment, next: function(stack){ stack.pop(); } }\n    ],\n    CData: [\n        { name: 'CDataSectionContents', token: cdata },\n        { name: n(']]>'), token: cdata, next: function(stack){ stack.pop(); } }\n    ],\n    PI: [\n        { name: 'DirPIContents', token: pi },\n        { name: n('?'), token: pi },\n        { name: n('?>'), token: pi, next: function(stack){ stack.pop(); } }\n    ],\n    AposString: [\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: 'EscapeApos', token: 'constant.language.escape' },\n        { name: 'AposChar', token: 'string' }\n    ],\n    QuotString: [\n        { name: n('\"'), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: 'EscapeQuot', token: 'constant.language.escape' },\n        { name: 'QuotChar', token: 'string' }\n    ]\n};\n    \nexports.XQueryLexer = function(){ return new Lexer(XQueryTokenizer, Rules); };\n},{\"./XQueryTokenizer\":\"/node_modules/xqlint/lib/lexers/XQueryTokenizer.js\",\"./lexer\":\"/node_modules/xqlint/lib/lexers/lexer.js\"}]},{},[\"/node_modules/xqlint/lib/lexers/xquery_lexer.js\"]);\n\n});"
  },
  {
    "path": "lib/ace/mode/xquery.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar XQueryLexer = require(\"./xquery/xquery_lexer\").XQueryLexer;\nvar Range = require(\"../range\").Range;\nvar XQueryBehaviour = require(\"./behaviour/xquery\").XQueryBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Anchor = require(\"../anchor\").Anchor;\n\nvar Mode = function() {\n    this.$tokenizer   = new XQueryLexer();\n    this.$behaviour   = new XQueryBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n    this.$highlightRules = new TextHighlightRules();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    \n    this.completer = {\n        getCompletions: function(editor, session, pos, prefix, callback) {\n            if (!session.$worker)\n                return callback();\n            session.$worker.emit(\"complete\", { data: { pos: pos, prefix: prefix } });\n            session.$worker.on(\"complete\", function(e){\n                callback(null, e.data);\n            });\n        }\n    };\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var match = line.match(/\\s*(?:then|else|return|[{\\(]|<\\w+>)\\s*$/);\n        if (match)\n            indent += tab;\n        return indent;\n    };\n    \n    this.checkOutdent = function(state, line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return (/^\\s*[\\}\\)]/).test(input);\n    };\n    \n    this.autoOutdent = function(state, doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*[\\}\\)])/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.toggleCommentLines = function(state, doc, startRow, endRow) {\n        var i, line;\n        var outdent = true;\n        var re = /^\\s*\\(:(.*):\\)/;\n\n        for (i=startRow; i<= endRow; i++) {\n            if (!re.test(doc.getLine(i))) {\n                outdent = false;\n                break;\n            }\n        }\n\n        var range = new Range(0, 0, 0, 0);\n        for (i=startRow; i<= endRow; i++) {\n            line = doc.getLine(i);\n            range.start.row  = i;\n            range.end.row    = i;\n            range.end.column = line.length;\n\n            doc.replace(range, outdent ? line.match(re)[1] : \"(:\" + line + \":)\");\n        }\n    };\n    \n    this.createWorker = function(session) {\n        \n      var worker = new WorkerClient([\"ace\"], \"ace/mode/xquery_worker\", \"XQueryWorker\");\n        var that = this;\n\n        worker.attachToDocument(session.getDocument());\n        \n        worker.on(\"ok\", function(e) {\n          session.clearAnnotations();\n        });\n        \n        worker.on(\"markers\", function(e) {\n          session.clearAnnotations();\n          that.addMarkers(e.data, session);\n        });\n \n        worker.on(\"highlight\", function(tokens) {\n          that.$tokenizer.tokens = tokens.data.tokens;\n          that.$tokenizer.lines  = session.getDocument().getAllLines();\n          \n          var rows = Object.keys(that.$tokenizer.tokens);\n          for(var i=0; i < rows.length; i++) {\n            var row = parseInt(rows[i]);\n            delete session.bgTokenizer.lines[row];\n            delete session.bgTokenizer.states[row];\n            session.bgTokenizer.fireUpdateEvent(row, row);\n          }\n        });\n        \n        return worker;\n    };\n\n    this.removeMarkers = function(session) {\n        var markers = session.getMarkers(false);\n        for (var id in markers) {\n            // All language analysis' markers are prefixed with language_highlight\n            if (markers[id].clazz.indexOf('language_highlight_') === 0) {\n                session.removeMarker(id);\n            }\n        }\n        for (var i = 0; i < session.markerAnchors.length; i++) {\n            session.markerAnchors[i].detach();\n        }\n        session.markerAnchors = [];\n    };\n\n    this.addMarkers = function(annos, mySession) {\n        var _self = this;\n        \n        if (!mySession.markerAnchors) mySession.markerAnchors = [];\n        this.removeMarkers(mySession);\n        mySession.languageAnnos = [];\n        annos.forEach(function(anno) {\n            // Certain annotations can temporarily be disabled\n            //if (_self.disabledMarkerTypes[anno.type])\n            //    return;\n            // Multi-line markers are not supported, and typically are a result from a bad error recover, ignore\n            //if(anno.pos.el && anno.pos.sl !== anno.pos.el)\n            //    return;\n            // Using anchors here, to automaticaly move markers as text around the marker is updated\n            var anchor = new Anchor(mySession.getDocument(), anno.pos.sl, anno.pos.sc || 0);\n            mySession.markerAnchors.push(anchor);\n            var markerId;\n            var colDiff = anno.pos.ec - anno.pos.sc;\n            var rowDiff = anno.pos.el - anno.pos.sl;\n            var gutterAnno = {\n                guttertext: anno.message,\n                type: anno.level || \"warning\",\n                text: anno.message\n                // row will be filled in updateFloat()\n            };\n\n            function updateFloat(single) {\n                if (markerId)\n                    mySession.removeMarker(markerId);\n                gutterAnno.row = anchor.row;\n                if (anno.pos.sc !== undefined && anno.pos.ec !== undefined) {\n                    var range = new Range(anno.pos.sl, anno.pos.sc, anno.pos.el, anno.pos.ec);\n                    //var range = Range.fromPoints(anchor.getPosition(), {\n                    //    row: anchor.row + rowDiff,\n                    //    column: anchor.column + colDiff\n                    //});\n                    markerId = mySession.addMarker(range, \"language_highlight_\" + (anno.type ? anno.type : \"default\"));\n                }\n                if (single) mySession.setAnnotations(mySession.languageAnnos);\n            }\n            updateFloat();\n            anchor.on(\"change\", function() {\n                updateFloat(true);\n            });\n            if (anno.message) mySession.languageAnnos.push(gutterAnno);\n        });\n        mySession.setAnnotations(mySession.languageAnnos);\n    };    \n        \n    this.$id = \"ace/mode/xquery\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "lib/ace/mode/xquery_worker.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n \ndefine(function(require, exports, module) {\n\"use strict\";\n    \nvar oop = require(\"../lib/oop\");\nvar Mirror = require(\"../worker/mirror\").Mirror;\nvar XQLintLib = require(\"./xquery/xqlint\");\nvar XQLint =  XQLintLib.XQLint;\n\nvar getModuleResolverFromModules = function(modules){\n    return function(uri){\n            var index = modules;\n            var mod = index[uri];\n            var variables = {};\n            var functions = {};\n            mod.functions.forEach(function(fn){\n                functions[uri + '#' + fn.name + '#' + fn.arity] = {\n                    params: []\n                };\n                fn.parameters.forEach(function(param){\n                    functions[uri + '#' + fn.name + '#' + fn.arity].params.push('$' + param.name);\n                });\n            });\n            mod.variables.forEach(function(variable){\n                var name = variable.name.substring(variable.name.indexOf(':') + 1);\n                variables[uri + '#' + name] = { type: 'VarDecl', annotations: [] };\n            });\n            return {\n                variables: variables,\n                functions: functions\n            };\n    };\n};\n\nvar XQueryWorker = exports.XQueryWorker = function(sender) {\n    Mirror.call(this, sender);\n    this.setTimeout(200);\n    //this.availableModuleNamespaces = Object.keys(Modules);\n    //this.moduleResolver; = getModuleResolverFromModules(Modules);\n    var that = this;\n\n    this.sender.on(\"complete\", function(e){\n        if(that.xqlint) {\n            var pos = { line: e.data.pos.row, col: e.data.pos.column };\n            var proposals = that.xqlint.getCompletions(pos);\n            that.sender.emit(\"complete\", proposals);\n        }\n    });\n\n    this.sender.on(\"setAvailableModuleNamespaces\", function(e){\n        that.availableModuleNamespaces = e.data;\n    });\n\n    this.sender.on(\"setFileName\", function(e){\n        that.fileName = e.data;\n    });\n\n    this.sender.on(\"setModuleResolver\", function(e){\n        that.moduleResolver = getModuleResolverFromModules(e.data);\n    });\n};\n\noop.inherits(XQueryWorker, Mirror);\n\n(function() {\n    \n    this.onUpdate = function() {\n        this.sender.emit(\"start\");\n        var value = this.doc.getValue();\n        var sctx = XQLintLib.createStaticContext();\n        if(this.moduleResolver) {\n            sctx.setModuleResolver(this.moduleResolver);\n        }\n        if(this.availableModuleNamespaces) {\n            sctx.availableModuleNamespaces = this.availableModuleNamespaces;\n        }\n        var opts = {\n            styleCheck: this.styleCheck,\n            staticContext: sctx,\n            fileName: this.fileName\n        };\n        this.xqlint = new XQLint(value, opts);\n        this.sender.emit(\"markers\", this.xqlint.getMarkers());\n    };\n}).call(XQueryWorker.prototype);\n\n});\n"
  },
  {
    "path": "lib/ace/mode/yaml.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar YamlHighlightRules = require(\"./yaml_highlight_rules\").YamlHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = YamlHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = [\"#\", \"//\"];\n    \n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n\n    this.$id = \"ace/mode/yaml\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n"
  },
  {
    "path": "lib/ace/mode/yaml_highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar YamlHighlightRules = function() {\n\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"#.*$\"\n            }, {\n                token : \"list.markup\",\n                regex : /^(?:-{3}|\\.{3})\\s*(?=#|$)/\n            },  {\n                token : \"list.markup\",\n                regex : /^\\s*[\\-?](?:$|\\s)/\n            }, {\n                token: \"constant\",\n                regex: \"!![\\\\w//]+\"\n            }, {\n                token: \"constant.language\",\n                regex: \"[&\\\\*][a-zA-Z0-9-_]+\"\n            }, {\n                token: [\"meta.tag\", \"keyword\"],\n                regex: /^(\\s*\\w.*?)(:(?=\\s|$))/\n            },{\n                token: [\"meta.tag\", \"keyword\"],\n                regex: /(\\w+?)(\\s*:(?=\\s|$))/\n            }, {\n                token : \"keyword.operator\",\n                regex : \"<<\\\\w*:\\\\w*\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"-\\\\s*(?=[{])\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // multi line string start\n                regex : /[|>][-+\\d\\s]*$/,\n                onMatch: function(val, state, stack, line) {\n                    var indent = /^\\s*/.exec(line)[0];\n                    if (stack.length < 1) {\n                        stack.push(this.next);\n                    } else {\n                        stack[0] = \"mlString\";\n                    }\n\n                    if (stack.length < 2) {\n                        stack.push(indent.length);\n                    }\n                    else {\n                        stack[1] = indent.length;\n                    }\n                    return this.token;\n                },\n                next : \"mlString\"\n            }, {\n                token : \"string\", // single quoted string\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : /(\\b|[+\\-\\.])[\\d_]+(?:(?:\\.[\\d_]*)?(?:[eE][+\\-]?[\\d_]+)?)(?=[^\\d-\\w]|$)/\n            }, {\n                token : \"constant.numeric\", // other number\n                regex : /[+\\-]?\\.inf\\b|NaN\\b|0x[\\dA-Fa-f_]+|0b[10_]+/\n            }, {\n                token : \"constant.language.boolean\",\n                regex : \"\\\\b(?:true|false|TRUE|FALSE|True|False|yes|no)\\\\b\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : /[^\\s,:\\[\\]\\{\\}]+/\n            }\n        ],\n        \"mlString\" : [\n            {\n                token : \"indent\",\n                regex : /^\\s*$/\n            }, {\n                token : \"indent\",\n                regex : /^\\s*/,\n                onMatch: function(val, state, stack) {\n                    var curIndent = stack[1];\n\n                    if (curIndent >= val.length) {\n                        this.next = \"start\";\n                        stack.splice(0);\n                    }\n                    else {\n                        this.next = \"mlString\";\n                    }\n                    return this.token;\n                },\n                next : \"mlString\"\n            }, {\n                token : \"string\",\n                regex : '.+'\n            }\n        ]};\n    this.normalizeRules();\n\n};\n\noop.inherits(YamlHighlightRules, TextHighlightRules);\n\nexports.YamlHighlightRules = YamlHighlightRules;\n});\n"
  },
  {
    "path": "lib/ace/model/editor.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"ace/lib/oop\");\nvar EventEmitter = require(\"ace/lib/event_emitter\").EventEmitter;\n\nvar Editor = exports.Editor = function() {\n    this._buffers = [];\n    this._windows = [];\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    \n    this.addBuffer = function(buffer) {\n        this._buffers.push(buffer);\n        return this._buffers.length-1;\n    };\n    \n    this.addWindow = function(win) {\n        this._windows.push(win);\n        return this._windows.length-1;\n    };\n    \n    this.openInWindow = function(bufferId, winId) {\n        this._windows[winId || 0].setBuffer(this._buffers[bufferId]);\n    };\n    \n}).call(Editor.prototype);\n\n});\n"
  },
  {
    "path": "lib/ace/mouse/default_gutter_handler.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar event = require(\"../lib/event\");\nvar Tooltip = require(\"../tooltip\").Tooltip;\n\nfunction GutterHandler(mouseHandler) {\n    var editor = mouseHandler.editor;\n    var gutter = editor.renderer.$gutterLayer;\n    var tooltip = new GutterTooltip(editor.container);\n\n    mouseHandler.editor.setDefaultHandler(\"guttermousedown\", function(e) {\n        if (!editor.isFocused() || e.getButton() != 0)\n            return;\n        var gutterRegion = gutter.getRegion(e);\n\n        if (gutterRegion == \"foldWidgets\")\n            return;\n\n        var row = e.getDocumentPosition().row;\n        var selection = editor.session.selection;\n\n        if (e.getShiftKey())\n            selection.selectTo(row, 0);\n        else {\n            if (e.domEvent.detail == 2) {\n                editor.selectAll();\n                return e.preventDefault();\n            }\n            mouseHandler.$clickSelection = editor.selection.getLineRange(row);\n        }\n        mouseHandler.setState(\"selectByLines\");\n        mouseHandler.captureMouse(e);\n        return e.preventDefault();\n    });\n\n\n    var tooltipTimeout, mouseEvent, tooltipAnnotation;\n\n    function showTooltip() {\n        var row = mouseEvent.getDocumentPosition().row;\n        var annotation = gutter.$annotations[row];\n        if (!annotation)\n            return hideTooltip();\n\n        var maxRow = editor.session.getLength();\n        if (row == maxRow) {\n            var screenRow = editor.renderer.pixelToScreenCoordinates(0, mouseEvent.y).row;\n            var pos = mouseEvent.$pos;\n            if (screenRow > editor.session.documentToScreenRow(pos.row, pos.column))\n                return hideTooltip();\n        }\n\n        if (tooltipAnnotation == annotation)\n            return;\n        tooltipAnnotation = annotation.text.join(\"<br/>\");\n\n        tooltip.setHtml(tooltipAnnotation);\n        tooltip.show();\n        editor._signal(\"showGutterTooltip\", tooltip);\n        editor.on(\"mousewheel\", hideTooltip);\n\n        if (mouseHandler.$tooltipFollowsMouse) {\n            moveTooltip(mouseEvent);\n        } else {\n            var gutterElement = mouseEvent.domEvent.target;\n            var rect = gutterElement.getBoundingClientRect();\n            var style = tooltip.getElement().style;\n            style.left = rect.right + \"px\";\n            style.top = rect.bottom + \"px\";\n        }\n    }\n\n    function hideTooltip() {\n        if (tooltipTimeout)\n            tooltipTimeout = clearTimeout(tooltipTimeout);\n        if (tooltipAnnotation) {\n            tooltip.hide();\n            tooltipAnnotation = null;\n            editor._signal(\"hideGutterTooltip\", tooltip);\n            editor.removeEventListener(\"mousewheel\", hideTooltip);\n        }\n    }\n\n    function moveTooltip(e) {\n        tooltip.setPosition(e.x, e.y);\n    }\n\n    mouseHandler.editor.setDefaultHandler(\"guttermousemove\", function(e) {\n        var target = e.domEvent.target || e.domEvent.srcElement;\n        if (dom.hasCssClass(target, \"ace_fold-widget\"))\n            return hideTooltip();\n\n        if (tooltipAnnotation && mouseHandler.$tooltipFollowsMouse)\n            moveTooltip(e);\n\n        mouseEvent = e;\n        if (tooltipTimeout)\n            return;\n        tooltipTimeout = setTimeout(function() {\n            tooltipTimeout = null;\n            if (mouseEvent && !mouseHandler.isMousePressed)\n                showTooltip();\n            else\n                hideTooltip();\n        }, 50);\n    });\n\n    event.addListener(editor.renderer.$gutter, \"mouseout\", function(e) {\n        mouseEvent = null;\n        if (!tooltipAnnotation || tooltipTimeout)\n            return;\n\n        tooltipTimeout = setTimeout(function() {\n            tooltipTimeout = null;\n            hideTooltip();\n        }, 50);\n    });\n    \n    editor.on(\"changeSession\", hideTooltip);\n}\n\nfunction GutterTooltip(parentNode) {\n    Tooltip.call(this, parentNode);\n}\n\noop.inherits(GutterTooltip, Tooltip);\n\n(function(){\n    this.setPosition = function(x, y) {\n        var windowWidth = window.innerWidth || document.documentElement.clientWidth;\n        var windowHeight = window.innerHeight || document.documentElement.clientHeight;\n        var width = this.getWidth();\n        var height = this.getHeight();\n        x += 15;\n        y += 15;\n        if (x + width > windowWidth) {\n            x -= (x + width) - windowWidth;\n        }\n        if (y + height > windowHeight) {\n            y -= 20 + height;\n        }\n        Tooltip.prototype.setPosition.call(this, x, y);\n    };\n\n}).call(GutterTooltip.prototype);\n\n\n\nexports.GutterHandler = GutterHandler;\n\n});\n"
  },
  {
    "path": "lib/ace/mouse/default_handlers.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar dom = require(\"../lib/dom\");\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\n\nvar DRAG_OFFSET = 0; // pixels\nvar SCROLL_COOLDOWN_T = 250; // milliseconds\n\nfunction DefaultHandlers(mouseHandler) {\n    mouseHandler.$clickSelection = null;\n\n    var editor = mouseHandler.editor;\n    editor.setDefaultHandler(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n    editor.setDefaultHandler(\"dblclick\", this.onDoubleClick.bind(mouseHandler));\n    editor.setDefaultHandler(\"tripleclick\", this.onTripleClick.bind(mouseHandler));\n    editor.setDefaultHandler(\"quadclick\", this.onQuadClick.bind(mouseHandler));\n    editor.setDefaultHandler(\"mousewheel\", this.onMouseWheel.bind(mouseHandler));\n    editor.setDefaultHandler(\"touchmove\", this.onTouchMove.bind(mouseHandler));\n\n    var exports = [\"select\", \"startSelect\", \"selectEnd\", \"selectAllEnd\", \"selectByWordsEnd\",\n        \"selectByLinesEnd\", \"dragWait\", \"dragWaitEnd\", \"focusWait\"];\n\n    exports.forEach(function(x) {\n        mouseHandler[x] = this[x];\n    }, this);\n\n    mouseHandler.selectByLines = this.extendSelectionBy.bind(mouseHandler, \"getLineRange\");\n    mouseHandler.selectByWords = this.extendSelectionBy.bind(mouseHandler, \"getWordRange\");\n}\n\n(function() {\n\n    this.onMouseDown = function(ev) {\n        var inSelection = ev.inSelection();\n        var pos = ev.getDocumentPosition();\n        this.mousedownEvent = ev;\n        var editor = this.editor;\n\n        var button = ev.getButton();\n        if (button !== 0) {\n            var selectionRange = editor.getSelectionRange();\n            var selectionEmpty = selectionRange.isEmpty();\n            if (selectionEmpty || button == 1)\n                editor.selection.moveToPosition(pos);\n            // 2: contextmenu, 1: linux paste\n            if (button == 2) {\n                editor.textInput.onContextMenu(ev.domEvent);\n                if (!useragent.isMozilla)\n                    ev.preventDefault();\n            }\n            // stopping event here breaks contextmenu on ff mac\n            // not stoping breaks it on chrome mac\n            return;\n        }\n\n        this.mousedownEvent.time = Date.now();\n        // if this click caused the editor to be focused should not clear the\n        // selection\n        if (inSelection && !editor.isFocused()) {\n            editor.focus();\n            if (this.$focusTimout && !this.$clickSelection && !editor.inMultiSelectMode) {\n                this.setState(\"focusWait\");\n                this.captureMouse(ev);\n                return;\n            }\n        }\n\n        this.captureMouse(ev);\n        this.startSelect(pos, ev.domEvent._clicks > 1);\n        return ev.preventDefault();\n    };\n\n    this.startSelect = function(pos, waitForClickSelection) {\n        pos = pos || this.editor.renderer.screenToTextCoordinates(this.x, this.y);\n        var editor = this.editor;\n        // allow double/triple click handlers to change selection\n        if (this.mousedownEvent.getShiftKey())\n            editor.selection.selectToPosition(pos);\n        else if (!waitForClickSelection)\n            editor.selection.moveToPosition(pos);\n        if (!waitForClickSelection)\n            this.select();\n        if (editor.renderer.scroller.setCapture) {\n            editor.renderer.scroller.setCapture();\n        }\n        editor.setStyle(\"ace_selecting\");\n        this.setState(\"select\");\n    };\n\n    this.select = function() {\n        var anchor, editor = this.editor;\n        var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n        if (this.$clickSelection) {\n            var cmp = this.$clickSelection.comparePoint(cursor);\n\n            if (cmp == -1) {\n                anchor = this.$clickSelection.end;\n            } else if (cmp == 1) {\n                anchor = this.$clickSelection.start;\n            } else {\n                var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\n                cursor = orientedRange.cursor;\n                anchor = orientedRange.anchor;\n            }\n            editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n        }\n        editor.selection.selectToPosition(cursor);\n        editor.renderer.scrollCursorIntoView();\n    };\n\n    this.extendSelectionBy = function(unitName) {\n        var anchor, editor = this.editor;\n        var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n        var range = editor.selection[unitName](cursor.row, cursor.column);\n        if (this.$clickSelection) {\n            var cmpStart = this.$clickSelection.comparePoint(range.start);\n            var cmpEnd = this.$clickSelection.comparePoint(range.end);\n\n            if (cmpStart == -1 && cmpEnd <= 0) {\n                anchor = this.$clickSelection.end;\n                if (range.end.row != cursor.row || range.end.column != cursor.column)\n                    cursor = range.start;\n            } else if (cmpEnd == 1 && cmpStart >= 0) {\n                anchor = this.$clickSelection.start;\n                if (range.start.row != cursor.row || range.start.column != cursor.column)\n                    cursor = range.end;\n            } else if (cmpStart == -1 && cmpEnd == 1) {\n                cursor = range.end;\n                anchor = range.start;\n            } else {\n                var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\n                cursor = orientedRange.cursor;\n                anchor = orientedRange.anchor;\n            }\n            editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n        }\n        editor.selection.selectToPosition(cursor);\n        editor.renderer.scrollCursorIntoView();\n    };\n\n    this.selectEnd =\n    this.selectAllEnd =\n    this.selectByWordsEnd =\n    this.selectByLinesEnd = function() {\n        this.$clickSelection = null;\n        this.editor.unsetStyle(\"ace_selecting\");\n        if (this.editor.renderer.scroller.releaseCapture) {\n            this.editor.renderer.scroller.releaseCapture();\n        }\n    };\n\n    this.focusWait = function() {\n        var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n        var time = Date.now();\n\n        if (distance > DRAG_OFFSET || time - this.mousedownEvent.time > this.$focusTimout)\n            this.startSelect(this.mousedownEvent.getDocumentPosition());\n    };\n\n    this.onDoubleClick = function(ev) {\n        var pos = ev.getDocumentPosition();\n        var editor = this.editor;\n        var session = editor.session;\n\n        var range = session.getBracketRange(pos);\n        if (range) {\n            if (range.isEmpty()) {\n                range.start.column--;\n                range.end.column++;\n            }\n            this.setState(\"select\");\n        } else {\n            range = editor.selection.getWordRange(pos.row, pos.column);\n            this.setState(\"selectByWords\");\n        }\n        this.$clickSelection = range;\n        this.select();\n    };\n\n    this.onTripleClick = function(ev) {\n        var pos = ev.getDocumentPosition();\n        var editor = this.editor;\n\n        this.setState(\"selectByLines\");\n        var range = editor.getSelectionRange();\n        if (range.isMultiLine() && range.contains(pos.row, pos.column)) {\n            this.$clickSelection = editor.selection.getLineRange(range.start.row);\n            this.$clickSelection.end = editor.selection.getLineRange(range.end.row).end;\n        } else {\n            this.$clickSelection = editor.selection.getLineRange(pos.row);\n        }\n        this.select();\n    };\n\n    this.onQuadClick = function(ev) {\n        var editor = this.editor;\n\n        editor.selectAll();\n        this.$clickSelection = editor.getSelectionRange();\n        this.setState(\"selectAll\");\n    };\n\n    this.onMouseWheel = function(ev) {\n        if (ev.getAccelKey())\n            return;\n\n        // shift wheel to horizontal scroll\n        if (ev.getShiftKey() && ev.wheelY && !ev.wheelX) {\n            ev.wheelX = ev.wheelY;\n            ev.wheelY = 0;\n        }\n        \n        var editor = this.editor;\n        \n        if (!this.$lastScroll)\n            this.$lastScroll = { t: 0, vx: 0, vy: 0, allowed: 0 };\n        \n        var prevScroll = this.$lastScroll;\n        var t = ev.domEvent.timeStamp;\n        var dt = t - prevScroll.t;\n        var vx = ev.wheelX / dt;\n        var vy = ev.wheelY / dt;\n        \n        // touchbar keeps sending scroll events after touchend, if we do not stop these events,\n        // users can't scrol editor without scrolling the parent node\n        if (dt < SCROLL_COOLDOWN_T) {\n            vx = (vx + prevScroll.vx) / 2;\n            vy = (vy + prevScroll.vy) / 2;\n        }\n        \n        var direction = Math.abs(vx / vy);\n        \n        var canScroll = false;\n        if (direction >= 1 && editor.renderer.isScrollableBy(ev.wheelX * ev.speed, 0))\n            canScroll = true;\n        if (direction <= 1 && editor.renderer.isScrollableBy(0, ev.wheelY * ev.speed))\n            canScroll = true;\n            \n        if (canScroll) {\n            prevScroll.allowed = t;\n        } else if (t - prevScroll.allowed < SCROLL_COOLDOWN_T) {\n            var isSlower = Math.abs(vx) <= 1.1 * Math.abs(prevScroll.vx)\n                && Math.abs(vy) <= 1.1 * Math.abs(prevScroll.vy);\n            if (isSlower) {\n                canScroll = true;\n                prevScroll.allowed = t;\n            }\n            else {\n                prevScroll.allowed = 0;\n            }\n        }\n        \n        prevScroll.t = t;\n        prevScroll.vx = vx;\n        prevScroll.vy = vy;\n\n        if (canScroll) {\n            editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\n            return ev.stop();\n        }\n    };\n    \n    this.onTouchMove = function(ev) {\n        this.editor._emit(\"mousewheel\", ev);\n    };\n\n}).call(DefaultHandlers.prototype);\n\nexports.DefaultHandlers = DefaultHandlers;\n\nfunction calcDistance(ax, ay, bx, by) {\n    return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\n\nfunction calcRangeOrientation(range, cursor) {\n    if (range.start.row == range.end.row)\n        var cmp = 2 * cursor.column - range.start.column - range.end.column;\n    else if (range.start.row == range.end.row - 1 && !range.start.column && !range.end.column)\n        var cmp = cursor.column - 4;\n    else\n        var cmp = 2 * cursor.row - range.start.row - range.end.row;\n\n    if (cmp < 0)\n        return {cursor: range.start, anchor: range.end};\n    else\n        return {cursor: range.end, anchor: range.start};\n}\n\n});\n"
  },
  {
    "path": "lib/ace/mouse/dragdrop_handler.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar dom = require(\"../lib/dom\");\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\n\nvar AUTOSCROLL_DELAY = 200;\nvar SCROLL_CURSOR_DELAY = 200;\nvar SCROLL_CURSOR_HYSTERESIS = 5;\n\nfunction DragdropHandler(mouseHandler) {\n\n    var editor = mouseHandler.editor;\n\n    var blankImage = dom.createElement(\"img\");\n    // Safari crashes without image data\n    blankImage.src = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n    if (useragent.isOpera)\n        blankImage.style.cssText = \"width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;\";\n\n    var exports = [\"dragWait\", \"dragWaitEnd\", \"startDrag\", \"dragReadyEnd\", \"onMouseDrag\"];\n\n     exports.forEach(function(x) {\n         mouseHandler[x] = this[x];\n    }, this);\n    editor.addEventListener(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n\n\n    var mouseTarget = editor.container;\n    var dragSelectionMarker, x, y;\n    var timerId, range;\n    var dragCursor, counter = 0;\n    var dragOperation;\n    var isInternal;\n    var autoScrollStartTime;\n    var cursorMovedTime;\n    var cursorPointOnCaretMoved;\n\n    this.onDragStart = function(e) {\n        // webkit workaround, see this.onMouseDown\n        if (this.cancelDrag || !mouseTarget.draggable) {\n            var self = this;\n            setTimeout(function(){\n                self.startSelect();\n                self.captureMouse(e);\n            }, 0);\n            return e.preventDefault();\n        }\n        range = editor.getSelectionRange();\n\n        var dataTransfer = e.dataTransfer;\n        dataTransfer.effectAllowed = editor.getReadOnly() ? \"copy\" : \"copyMove\";\n        if (useragent.isOpera) {\n            editor.container.appendChild(blankImage);\n            // force layout\n            blankImage.scrollTop = 0;\n        }\n        dataTransfer.setDragImage && dataTransfer.setDragImage(blankImage, 0, 0);\n        if (useragent.isOpera) {\n            editor.container.removeChild(blankImage);\n        }\n        // clear Opera garbage\n        dataTransfer.clearData();\n        dataTransfer.setData(\"Text\", editor.session.getTextRange());\n\n        isInternal = true;\n        this.setState(\"drag\");\n    };\n\n    this.onDragEnd = function(e) {\n        mouseTarget.draggable = false;\n        isInternal = false;\n        this.setState(null);\n        if (!editor.getReadOnly()) {\n            var dropEffect = e.dataTransfer.dropEffect;\n            if (!dragOperation && dropEffect == \"move\")\n                // text was dragged outside the editor\n                editor.session.remove(editor.getSelectionRange());\n            editor.renderer.$cursorLayer.setBlinking(true);\n        }\n        this.editor.unsetStyle(\"ace_dragging\");\n        this.editor.renderer.setCursorStyle(\"\");\n    };\n\n    this.onDragEnter = function(e) {\n        if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n            return;\n        x = e.clientX;\n        y = e.clientY;\n        if (!dragSelectionMarker)\n            addDragMarker();\n        counter++;\n        // dataTransfer object does not save dropEffect across events on IE, so we store it in dragOperation\n        e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n        return event.preventDefault(e);\n    };\n\n    this.onDragOver = function(e) {\n        if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n            return;\n        x = e.clientX;\n        y = e.clientY;\n        // Opera doesn't trigger dragenter event on drag start\n        if (!dragSelectionMarker) {\n            addDragMarker();\n            counter++;\n        }\n        if (onMouseMoveTimer !== null)\n            onMouseMoveTimer = null;\n\n        e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n        return event.preventDefault(e);\n    };\n\n    this.onDragLeave = function(e) {\n        counter--;\n        if (counter <= 0 && dragSelectionMarker) {\n            clearDragMarker();\n            dragOperation = null;\n            return event.preventDefault(e);\n        }\n    };\n\n    this.onDrop = function(e) {\n        if (!dragCursor)\n            return;\n        var dataTransfer = e.dataTransfer;\n        if (isInternal) {\n            switch (dragOperation) {\n                case \"move\":\n                    if (range.contains(dragCursor.row, dragCursor.column)) {\n                        // clear selection\n                        range = {\n                            start: dragCursor,\n                            end: dragCursor\n                        };\n                    } else {\n                        // move text\n                        range = editor.moveText(range, dragCursor);\n                    }\n                    break;\n                case \"copy\":\n                    // copy text\n                    range = editor.moveText(range, dragCursor, true);\n                    break;\n            }\n        } else {\n            var dropData = dataTransfer.getData('Text');\n            range = {\n                start: dragCursor,\n                end: editor.session.insert(dragCursor, dropData)\n            };\n            editor.focus();\n            dragOperation = null;\n        }\n        clearDragMarker();\n        return event.preventDefault(e);\n    };\n\n    event.addListener(mouseTarget, \"dragstart\", this.onDragStart.bind(mouseHandler));\n    event.addListener(mouseTarget, \"dragend\", this.onDragEnd.bind(mouseHandler));\n    event.addListener(mouseTarget, \"dragenter\", this.onDragEnter.bind(mouseHandler));\n    event.addListener(mouseTarget, \"dragover\", this.onDragOver.bind(mouseHandler));\n    event.addListener(mouseTarget, \"dragleave\", this.onDragLeave.bind(mouseHandler));\n    event.addListener(mouseTarget, \"drop\", this.onDrop.bind(mouseHandler));\n\n    function scrollCursorIntoView(cursor, prevCursor) {\n        var now = Date.now();\n        var vMovement = !prevCursor || cursor.row != prevCursor.row;\n        var hMovement = !prevCursor || cursor.column != prevCursor.column;\n        if (!cursorMovedTime || vMovement || hMovement) {\n            editor.moveCursorToPosition(cursor);\n            cursorMovedTime = now;\n            cursorPointOnCaretMoved = {x: x, y: y};\n        } else {\n            var distance = calcDistance(cursorPointOnCaretMoved.x, cursorPointOnCaretMoved.y, x, y);\n            if (distance > SCROLL_CURSOR_HYSTERESIS) {\n                cursorMovedTime = null;\n            } else if (now - cursorMovedTime >= SCROLL_CURSOR_DELAY) {\n                editor.renderer.scrollCursorIntoView();\n                cursorMovedTime = null;\n            }\n        }\n    }\n\n    function autoScroll(cursor, prevCursor) {\n        var now = Date.now();\n        var lineHeight = editor.renderer.layerConfig.lineHeight;\n        var characterWidth = editor.renderer.layerConfig.characterWidth;\n        var editorRect = editor.renderer.scroller.getBoundingClientRect();\n        var offsets = {\n           x: {\n               left: x - editorRect.left,\n               right: editorRect.right - x\n           },\n           y: {\n               top: y - editorRect.top,\n               bottom: editorRect.bottom - y\n           }\n        };\n        var nearestXOffset = Math.min(offsets.x.left, offsets.x.right);\n        var nearestYOffset = Math.min(offsets.y.top, offsets.y.bottom);\n        var scrollCursor = {row: cursor.row, column: cursor.column};\n        if (nearestXOffset / characterWidth <= 2) {\n            scrollCursor.column += (offsets.x.left < offsets.x.right ? -3 : +2);\n        }\n        if (nearestYOffset / lineHeight <= 1) {\n            scrollCursor.row += (offsets.y.top < offsets.y.bottom ? -1 : +1);\n        }\n        var vScroll = cursor.row != scrollCursor.row;\n        var hScroll = cursor.column != scrollCursor.column;\n        var vMovement = !prevCursor || cursor.row != prevCursor.row;\n        if (vScroll || (hScroll && !vMovement)) {\n            if (!autoScrollStartTime)\n                autoScrollStartTime = now;\n            else if (now - autoScrollStartTime >= AUTOSCROLL_DELAY)\n                editor.renderer.scrollCursorIntoView(scrollCursor);\n        } else {\n            autoScrollStartTime = null;\n        }\n    }\n\n    function onDragInterval() {\n        var prevCursor = dragCursor;\n        dragCursor = editor.renderer.screenToTextCoordinates(x, y);\n        scrollCursorIntoView(dragCursor, prevCursor);\n        autoScroll(dragCursor, prevCursor);\n    }\n\n    function addDragMarker() {\n        range = editor.selection.toOrientedRange();\n        dragSelectionMarker = editor.session.addMarker(range, \"ace_selection\", editor.getSelectionStyle());\n        editor.clearSelection();\n        if (editor.isFocused())\n            editor.renderer.$cursorLayer.setBlinking(false);\n        clearInterval(timerId);\n        onDragInterval();\n        timerId = setInterval(onDragInterval, 20);\n        counter = 0;\n        event.addListener(document, \"mousemove\", onMouseMove);\n    }\n\n    function clearDragMarker() {\n        clearInterval(timerId);\n        editor.session.removeMarker(dragSelectionMarker);\n        dragSelectionMarker = null;\n        editor.selection.fromOrientedRange(range);\n        if (editor.isFocused() && !isInternal)\n            editor.renderer.$cursorLayer.setBlinking(!editor.getReadOnly());\n        range = null;\n        dragCursor = null;\n        counter = 0;\n        autoScrollStartTime = null;\n        cursorMovedTime = null;\n        event.removeListener(document, \"mousemove\", onMouseMove);\n    }\n\n    // sometimes other code on the page can stop dragleave event leaving editor stuck in the drag state\n    var onMouseMoveTimer = null;\n    function onMouseMove() {\n        if (onMouseMoveTimer == null) {\n            onMouseMoveTimer = setTimeout(function() {\n                if (onMouseMoveTimer != null && dragSelectionMarker)\n                    clearDragMarker();\n            }, 20);\n        }\n    }\n\n    function canAccept(dataTransfer) {\n        var types = dataTransfer.types;\n        return !types || Array.prototype.some.call(types, function(type) {\n            return type == 'text/plain' || type == 'Text';\n        });\n    }\n\n    function getDropEffect(e) {\n        var copyAllowed = ['copy', 'copymove', 'all', 'uninitialized'];\n        var moveAllowed = ['move', 'copymove', 'linkmove', 'all', 'uninitialized'];\n\n        var copyModifierState = useragent.isMac ? e.altKey : e.ctrlKey;\n\n        // IE throws error while dragging from another app\n        var effectAllowed = \"uninitialized\";\n        try {\n            effectAllowed = e.dataTransfer.effectAllowed.toLowerCase();\n        } catch (e) {}\n        var dropEffect = \"none\";\n\n        if (copyModifierState && copyAllowed.indexOf(effectAllowed) >= 0)\n            dropEffect = \"copy\";\n        else if (moveAllowed.indexOf(effectAllowed) >= 0)\n            dropEffect = \"move\";\n        else if (copyAllowed.indexOf(effectAllowed) >= 0)\n            dropEffect = \"copy\";\n\n        return dropEffect;\n    }\n}\n\n(function() {\n\n    this.dragWait = function() {\n        var interval = Date.now() - this.mousedownEvent.time;\n        if (interval > this.editor.getDragDelay())\n            this.startDrag();\n    };\n\n    this.dragWaitEnd = function() {\n        var target = this.editor.container;\n        target.draggable = false;\n        this.startSelect(this.mousedownEvent.getDocumentPosition());\n        this.selectEnd();\n    };\n\n    this.dragReadyEnd = function(e) {\n        this.editor.renderer.$cursorLayer.setBlinking(!this.editor.getReadOnly());\n        this.editor.unsetStyle(\"ace_dragging\");\n        this.editor.renderer.setCursorStyle(\"\");\n        this.dragWaitEnd();\n    };\n\n    this.startDrag = function(){\n        this.cancelDrag = false;\n        var editor = this.editor;\n        var target = editor.container;\n        target.draggable = true;\n        editor.renderer.$cursorLayer.setBlinking(false);\n        editor.setStyle(\"ace_dragging\");\n        var cursorStyle = useragent.isWin ? \"default\" : \"move\";\n        editor.renderer.setCursorStyle(cursorStyle);\n        this.setState(\"dragReady\");\n    };\n\n    this.onMouseDrag = function(e) {\n        var target = this.editor.container;\n        if (useragent.isIE && this.state == \"dragReady\") {\n            // IE does not handle [draggable] attribute set after mousedown\n            var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n            if (distance > 3)\n                target.dragDrop();\n        }\n        if (this.state === \"dragWait\") {\n            var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n            if (distance > 0) {\n                target.draggable = false;\n                this.startSelect(this.mousedownEvent.getDocumentPosition());\n            }\n        }\n    };\n\n    this.onMouseDown = function(e) {\n        if (!this.$dragEnabled)\n            return;\n        this.mousedownEvent = e;\n        var editor = this.editor;\n\n        var inSelection = e.inSelection();\n        var button = e.getButton();\n        var clickCount = e.domEvent.detail || 1;\n        if (clickCount === 1 && button === 0 && inSelection) {\n            if (e.editor.inMultiSelectMode && (e.getAccelKey() || e.getShiftKey()))\n                return;\n            this.mousedownEvent.time = Date.now();\n            var eventTarget = e.domEvent.target || e.domEvent.srcElement;\n            if (\"unselectable\" in eventTarget)\n                eventTarget.unselectable = \"on\";\n            if (editor.getDragDelay()) {\n                // https://code.google.com/p/chromium/issues/detail?id=286700\n                if (useragent.isWebKit) {\n                    this.cancelDrag = true;\n                    var mouseTarget = editor.container;\n                    mouseTarget.draggable = true;\n                }\n                this.setState(\"dragWait\");\n            } else {\n                this.startDrag();\n            }\n            this.captureMouse(e, this.onMouseDrag.bind(this));\n            // TODO: a better way to prevent default handler without preventing browser default action\n            e.defaultPrevented = true;\n        }\n    };\n\n}).call(DragdropHandler.prototype);\n\n\nfunction calcDistance(ax, ay, bx, by) {\n    return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\n\nexports.DragdropHandler = DragdropHandler;\n\n});"
  },
  {
    "path": "lib/ace/mouse/fold_handler.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nfunction FoldHandler(editor) {\n\n    editor.on(\"click\", function(e) {\n        var position = e.getDocumentPosition();\n        var session = editor.session;\n\n        // If the user clicked on a fold, then expand it.\n        var fold = session.getFoldAt(position.row, position.column, 1);\n        if (fold) {\n            if (e.getAccelKey())\n                session.removeFold(fold);\n            else\n                session.expandFold(fold);\n\n            e.stop();\n        }\n    });\n\n    editor.on(\"gutterclick\", function(e) {\n        var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n\n        if (gutterRegion == \"foldWidgets\") {\n            var row = e.getDocumentPosition().row;\n            var session = editor.session;\n            if (session.foldWidgets && session.foldWidgets[row])\n                editor.session.onFoldWidgetClick(row, e);\n            if (!editor.isFocused())\n                editor.focus();\n            e.stop();\n        }\n    });\n\n    editor.on(\"gutterdblclick\", function(e) {\n        var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n\n        if (gutterRegion == \"foldWidgets\") {\n            var row = e.getDocumentPosition().row;\n            var session = editor.session;\n            var data = session.getParentFoldRangeData(row, true);\n            var range = data.range || data.firstRange;\n\n            if (range) {\n                row = range.start.row;\n                var fold = session.getFoldAt(row, session.getLine(row).length, 1);\n\n                if (fold) {\n                    session.removeFold(fold);\n                } else {\n                    session.addFold(\"...\", range);\n                    editor.renderer.scrollCursorIntoView({row: range.start.row, column: 0});\n                }\n            }\n            e.stop();\n        }\n    });\n}\n\nexports.FoldHandler = FoldHandler;\n\n});\n"
  },
  {
    "path": "lib/ace/mouse/mouse_event.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\n\n/*\n * Custom Ace mouse event\n */\nvar MouseEvent = exports.MouseEvent = function(domEvent, editor) {\n    this.domEvent = domEvent;\n    this.editor = editor;\n    \n    this.x = this.clientX = domEvent.clientX;\n    this.y = this.clientY = domEvent.clientY;\n\n    this.$pos = null;\n    this.$inSelection = null;\n    \n    this.propagationStopped = false;\n    this.defaultPrevented = false;\n};\n\n(function() {  \n    \n    this.stopPropagation = function() {\n        event.stopPropagation(this.domEvent);\n        this.propagationStopped = true;\n    };\n    \n    this.preventDefault = function() {\n        event.preventDefault(this.domEvent);\n        this.defaultPrevented = true;\n    };\n    \n    this.stop = function() {\n        this.stopPropagation();\n        this.preventDefault();\n    };\n\n    /*\n     * Get the document position below the mouse cursor\n     * \n     * @return {Object} 'row' and 'column' of the document position\n     */\n    this.getDocumentPosition = function() {\n        if (this.$pos)\n            return this.$pos;\n        \n        this.$pos = this.editor.renderer.screenToTextCoordinates(this.clientX, this.clientY);\n        return this.$pos;\n    };\n    \n    /*\n     * Check if the mouse cursor is inside of the text selection\n     * \n     * @return {Boolean} whether the mouse cursor is inside of the selection\n     */\n    this.inSelection = function() {\n        if (this.$inSelection !== null)\n            return this.$inSelection;\n            \n        var editor = this.editor;\n        \n\n        var selectionRange = editor.getSelectionRange();\n        if (selectionRange.isEmpty())\n            this.$inSelection = false;\n        else {\n            var pos = this.getDocumentPosition();\n            this.$inSelection = selectionRange.contains(pos.row, pos.column);\n        }\n\n        return this.$inSelection;\n    };\n    \n    /*\n     * Get the clicked mouse button\n     * \n     * @return {Number} 0 for left button, 1 for middle button, 2 for right button\n     */\n    this.getButton = function() {\n        return event.getButton(this.domEvent);\n    };\n    \n    /*\n     * @return {Boolean} whether the shift key was pressed when the event was emitted\n     */\n    this.getShiftKey = function() {\n        return this.domEvent.shiftKey;\n    };\n    \n    this.getAccelKey = useragent.isMac\n        ? function() { return this.domEvent.metaKey; }\n        : function() { return this.domEvent.ctrlKey; };\n    \n}).call(MouseEvent.prototype);\n\n});\n"
  },
  {
    "path": "lib/ace/mouse/mouse_handler.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar DefaultHandlers = require(\"./default_handlers\").DefaultHandlers;\nvar DefaultGutterHandler = require(\"./default_gutter_handler\").GutterHandler;\nvar MouseEvent = require(\"./mouse_event\").MouseEvent;\nvar DragdropHandler = require(\"./dragdrop_handler\").DragdropHandler;\nvar config = require(\"../config\");\n\nvar MouseHandler = function(editor) {\n    var _self = this;\n    this.editor = editor;\n\n    new DefaultHandlers(this);\n    new DefaultGutterHandler(this);\n    new DragdropHandler(this);\n\n    var focusEditor = function(e) {\n        // because we have to call event.preventDefault() any window on ie and iframes\n        // on other browsers do not get focus, so we have to call window.focus() here\n        var windowBlurred = !document.hasFocus || !document.hasFocus()\n            || !editor.isFocused() && document.activeElement == (editor.textInput && editor.textInput.getElement());\n        if (windowBlurred)\n            window.focus();\n        editor.focus();\n    };\n\n    var mouseTarget = editor.renderer.getMouseEventTarget();\n    event.addListener(mouseTarget, \"click\", this.onMouseEvent.bind(this, \"click\"));\n    event.addListener(mouseTarget, \"mousemove\", this.onMouseMove.bind(this, \"mousemove\"));\n    event.addMultiMouseDownListener([\n        mouseTarget,\n        editor.renderer.scrollBarV && editor.renderer.scrollBarV.inner,\n        editor.renderer.scrollBarH && editor.renderer.scrollBarH.inner,\n        editor.textInput && editor.textInput.getElement()\n    ].filter(Boolean), [400, 300, 250], this, \"onMouseEvent\");\n    event.addMouseWheelListener(editor.container, this.onMouseWheel.bind(this, \"mousewheel\"));\n    event.addTouchMoveListener(editor.container, this.onTouchMove.bind(this, \"touchmove\"));\n\n    var gutterEl = editor.renderer.$gutter;\n    event.addListener(gutterEl, \"mousedown\", this.onMouseEvent.bind(this, \"guttermousedown\"));\n    event.addListener(gutterEl, \"click\", this.onMouseEvent.bind(this, \"gutterclick\"));\n    event.addListener(gutterEl, \"dblclick\", this.onMouseEvent.bind(this, \"gutterdblclick\"));\n    event.addListener(gutterEl, \"mousemove\", this.onMouseEvent.bind(this, \"guttermousemove\"));\n\n    event.addListener(mouseTarget, \"mousedown\", focusEditor);\n    event.addListener(gutterEl, \"mousedown\", focusEditor);\n    if (useragent.isIE && editor.renderer.scrollBarV) {\n        event.addListener(editor.renderer.scrollBarV.element, \"mousedown\", focusEditor);\n        event.addListener(editor.renderer.scrollBarH.element, \"mousedown\", focusEditor);\n    }\n\n    editor.on(\"mousemove\", function(e){\n        if (_self.state || _self.$dragDelay || !_self.$dragEnabled)\n            return;\n\n        var character = editor.renderer.screenToTextCoordinates(e.x, e.y);\n        var range = editor.session.selection.getRange();\n        var renderer = editor.renderer;\n\n        if (!range.isEmpty() && range.insideStart(character.row, character.column)) {\n            renderer.setCursorStyle(\"default\");\n        } else {\n            renderer.setCursorStyle(\"\");\n        }\n    });\n};\n\n(function() {\n    this.onMouseEvent = function(name, e) {\n        this.editor._emit(name, new MouseEvent(e, this.editor));\n    };\n\n    this.onMouseMove = function(name, e) {\n        // optimization, because mousemove doesn't have a default handler.\n        var listeners = this.editor._eventRegistry && this.editor._eventRegistry.mousemove;\n        if (!listeners || !listeners.length)\n            return;\n\n        this.editor._emit(name, new MouseEvent(e, this.editor));\n    };\n\n    this.onMouseWheel = function(name, e) {\n        var mouseEvent = new MouseEvent(e, this.editor);\n        mouseEvent.speed = this.$scrollSpeed * 2;\n        mouseEvent.wheelX = e.wheelX;\n        mouseEvent.wheelY = e.wheelY;\n\n        this.editor._emit(name, mouseEvent);\n    };\n    \n    this.onTouchMove = function (name, e) {\n        var mouseEvent = new MouseEvent(e, this.editor);\n        mouseEvent.speed = 1;//this.$scrollSpeed * 2;\n        mouseEvent.wheelX = e.wheelX;\n        mouseEvent.wheelY = e.wheelY;\n        this.editor._emit(name, mouseEvent);\n    };\n\n    this.setState = function(state) {\n        this.state = state;\n    };\n\n    this.captureMouse = function(ev, mouseMoveHandler) {\n        this.x = ev.x;\n        this.y = ev.y;\n\n        this.isMousePressed = true;\n\n        // do not move textarea during selection\n        var renderer = this.editor.renderer;\n        if (renderer.$keepTextAreaAtCursor)\n            renderer.$keepTextAreaAtCursor = null;\n\n        var self = this;\n        var onMouseMove = function(e) {\n            if (!e) return;\n            // if editor is loaded inside iframe, and mouseup event is outside\n            // we won't recieve it, so we cancel on first mousemove without button\n            if (useragent.isWebKit && !e.which && self.releaseMouse)\n                return self.releaseMouse();\n\n            self.x = e.clientX;\n            self.y = e.clientY;\n            mouseMoveHandler && mouseMoveHandler(e);\n            self.mouseEvent = new MouseEvent(e, self.editor);\n            self.$mouseMoved = true;\n        };\n\n        var onCaptureEnd = function(e) {\n            clearInterval(timerId);\n            onCaptureInterval();\n            self[self.state + \"End\"] && self[self.state + \"End\"](e);\n            self.state = \"\";\n            if (renderer.$keepTextAreaAtCursor == null) {\n                renderer.$keepTextAreaAtCursor = true;\n                renderer.$moveTextAreaToCursor();\n            }\n            self.isMousePressed = false;\n            self.$onCaptureMouseMove = self.releaseMouse = null;\n            e && self.onMouseEvent(\"mouseup\", e);\n        };\n\n        var onCaptureInterval = function() {\n            self[self.state] && self[self.state]();\n            self.$mouseMoved = false;\n        };\n\n        if (useragent.isOldIE && ev.domEvent.type == \"dblclick\") {\n            return setTimeout(function() {onCaptureEnd(ev);});\n        }\n\n        self.$onCaptureMouseMove = onMouseMove;\n        self.releaseMouse = event.capture(this.editor.container, onMouseMove, onCaptureEnd);\n        var timerId = setInterval(onCaptureInterval, 20);\n    };\n    this.releaseMouse = null;\n    this.cancelContextMenu = function() {\n        var stop = function(e) {\n            if (e && e.domEvent && e.domEvent.type != \"contextmenu\")\n                return;\n            this.editor.off(\"nativecontextmenu\", stop);\n            if (e && e.domEvent)\n                event.stopEvent(e.domEvent);\n        }.bind(this);\n        setTimeout(stop, 10);\n        this.editor.on(\"nativecontextmenu\", stop);\n    };\n}).call(MouseHandler.prototype);\n\nconfig.defineOptions(MouseHandler.prototype, \"mouseHandler\", {\n    scrollSpeed: {initialValue: 2},\n    dragDelay: {initialValue: (useragent.isMac ? 150 : 0)},\n    dragEnabled: {initialValue: true},\n    focusTimout: {initialValue: 0},\n    tooltipFollowsMouse: {initialValue: true}\n});\n\n\nexports.MouseHandler = MouseHandler;\n});\n"
  },
  {
    "path": "lib/ace/mouse/mouse_handler_test.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\nif (typeof process !== \"undefined\") {\n    require(\"amd-loader\");\n    require(\"../test/mockdom\");\n}\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar Editor = require(\"../editor\").Editor;\nvar MockRenderer = require(\"../test/mockrenderer\").MockRenderer;\nvar assert = require(\"../test/assertions\");\nvar MouseEvent = function(type, opts){\n    var e = document.createEvent(\"MouseEvents\");\n    e.initMouseEvent(\"mouse\" + type,\n        true, true, window,\n        opts.detail,\n        opts.x, opts.y, opts.x, opts.y,\n        opts.ctrl, opts.alt, opts.shift, opts.meta,\n        opts.button || 0, opts.relatedTarget);\n    return e;\n};\n\nmodule.exports = {\n\n    setUp : function(next) {\n        this.editor = new Editor(new MockRenderer());\n        this.editor.setValue(\"Juhu kinners!\");\n        next();\n    },\n\n    \"test: double tap. issue #956\" : function() {\n        // mouse up fired immediately after mouse down\n        var target = this.editor.renderer.getMouseEventTarget();\n        target.dispatchEvent(MouseEvent(\"down\", {x: 1, y: 1}));\n        target.dispatchEvent(MouseEvent(\"up\", {x: 1, y: 1}));\n        target.dispatchEvent(MouseEvent(\"down\", {x: 1, y: 1, detail: 2}));\n        target.dispatchEvent(MouseEvent(\"up\", {x: 1, y: 1, detail: 2}));\n        \n        assert.equal(this.editor.getSelectedText(), \"Juhu\");\n    }\n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main) {\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n}\n"
  },
  {
    "path": "lib/ace/mouse/multi_select_handler.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\n\n// mouse\nfunction isSamePoint(p1, p2) {\n    return p1.row == p2.row && p1.column == p2.column;\n}\n\nfunction onMouseDown(e) {\n    var ev = e.domEvent;\n    var alt = ev.altKey;\n    var shift = ev.shiftKey;\n    var ctrl = ev.ctrlKey;\n    var accel = e.getAccelKey();\n    var button = e.getButton();\n    \n    if (ctrl && useragent.isMac)\n        button = ev.button;\n\n    if (e.editor.inMultiSelectMode && button == 2) {\n        e.editor.textInput.onContextMenu(e.domEvent);\n        return;\n    }\n    \n    if (!ctrl && !alt && !accel) {\n        if (button === 0 && e.editor.inMultiSelectMode)\n            e.editor.exitMultiSelectMode();\n        return;\n    }\n    \n    if (button !== 0)\n        return;\n\n    var editor = e.editor;\n    var selection = editor.selection;\n    var isMultiSelect = editor.inMultiSelectMode;\n    var pos = e.getDocumentPosition();\n    var cursor = selection.getCursor();\n    var inSelection = e.inSelection() || (selection.isEmpty() && isSamePoint(pos, cursor));\n\n    var mouseX = e.x, mouseY = e.y;\n    var onMouseSelection = function(e) {\n        mouseX = e.clientX;\n        mouseY = e.clientY;\n    };\n    \n    var session = editor.session;\n    var screenAnchor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n    var screenCursor = screenAnchor;\n    \n    var selectionMode;\n    if (editor.$mouseHandler.$enableJumpToDef) {\n        if (ctrl && alt || accel && alt)\n            selectionMode = shift ? \"block\" : \"add\";\n        else if (alt && editor.$blockSelectEnabled)\n            selectionMode = \"block\";\n    } else {\n        if (accel && !alt) {\n            selectionMode = \"add\";\n            if (!isMultiSelect && shift)\n                return;\n        } else if (alt && editor.$blockSelectEnabled) {\n            selectionMode = \"block\";\n        }\n    }\n    \n    if (selectionMode && useragent.isMac && ev.ctrlKey) {\n        editor.$mouseHandler.cancelContextMenu();\n    }\n\n    if (selectionMode == \"add\") {\n        if (!isMultiSelect && inSelection)\n            return; // dragging\n\n        if (!isMultiSelect) {\n            var range = selection.toOrientedRange();\n            editor.addSelectionMarker(range);\n        }\n\n        var oldRange = selection.rangeList.rangeAtPoint(pos);\n        \n        editor.inVirtualSelectionMode = true;\n        \n        if (shift) {\n            oldRange = null;\n            range = selection.ranges[0] || range;\n            editor.removeSelectionMarker(range);\n        }\n        editor.once(\"mouseup\", function() {\n            var tmpSel = selection.toOrientedRange();\n\n            if (oldRange && tmpSel.isEmpty() && isSamePoint(oldRange.cursor, tmpSel.cursor))\n                selection.substractPoint(tmpSel.cursor);\n            else {\n                if (shift) {\n                    selection.substractPoint(range.cursor);\n                } else if (range) {\n                    editor.removeSelectionMarker(range);\n                    selection.addRange(range);\n                }\n                selection.addRange(tmpSel);\n            }\n            editor.inVirtualSelectionMode = false;\n        });\n\n    } else if (selectionMode == \"block\") {\n        e.stop();\n        editor.inVirtualSelectionMode = true;        \n        var initialRange;\n        var rectSel = [];\n        var blockSelect = function() {\n            var newCursor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n            var cursor = session.screenToDocumentPosition(newCursor.row, newCursor.column, newCursor.offsetX);\n\n            if (isSamePoint(screenCursor, newCursor) && isSamePoint(cursor, selection.lead))\n                return;\n            screenCursor = newCursor;\n            \n            editor.selection.moveToPosition(cursor);\n            editor.renderer.scrollCursorIntoView();\n\n            editor.removeSelectionMarkers(rectSel);\n            rectSel = selection.rectangularRangeBlock(screenCursor, screenAnchor);\n            if (editor.$mouseHandler.$clickSelection && rectSel.length == 1 && rectSel[0].isEmpty())\n                rectSel[0] = editor.$mouseHandler.$clickSelection.clone();\n            rectSel.forEach(editor.addSelectionMarker, editor);\n            editor.updateSelectionMarkers();\n        };\n        if (isMultiSelect && !accel) {\n            selection.toSingleRange();\n        } else if (!isMultiSelect && accel) {\n            initialRange = selection.toOrientedRange();\n            editor.addSelectionMarker(initialRange);\n        }\n        \n        if (shift)\n            screenAnchor = session.documentToScreenPosition(selection.lead);            \n        else\n            selection.moveToPosition(pos);\n        \n        screenCursor = {row: -1, column: -1};\n\n        var onMouseSelectionEnd = function(e) {\n            clearInterval(timerId);\n            editor.removeSelectionMarkers(rectSel);\n            if (!rectSel.length)\n                rectSel = [selection.toOrientedRange()];\n            if (initialRange) {\n                editor.removeSelectionMarker(initialRange);\n                selection.toSingleRange(initialRange);\n            }\n            for (var i = 0; i < rectSel.length; i++)\n                selection.addRange(rectSel[i]);\n            editor.inVirtualSelectionMode = false;\n            editor.$mouseHandler.$clickSelection = null;\n        };\n\n        var onSelectionInterval = blockSelect;\n\n        event.capture(editor.container, onMouseSelection, onMouseSelectionEnd);\n        var timerId = setInterval(function() {onSelectionInterval();}, 20);\n\n        return e.preventDefault();\n    }\n}\n\n\nexports.onMouseDown = onMouseDown;\n\n});\n"
  },
  {
    "path": "lib/ace/multi_select.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\nvar RangeList = require(\"./range_list\").RangeList;\nvar Range = require(\"./range\").Range;\nvar Selection = require(\"./selection\").Selection;\nvar onMouseDown = require(\"./mouse/multi_select_handler\").onMouseDown;\nvar event = require(\"./lib/event\");\nvar lang = require(\"./lib/lang\");\nvar commands = require(\"./commands/multi_select_commands\");\nexports.commands = commands.defaultCommands.concat(commands.multiSelectCommands);\n\n// Todo: session.find or editor.findVolatile that returns range\nvar Search = require(\"./search\").Search;\nvar search = new Search();\n\nfunction find(session, needle, dir) {\n    search.$options.wrap = true;\n    search.$options.needle = needle;\n    search.$options.backwards = dir == -1;\n    return search.find(session);\n}\n\n// extend EditSession\nvar EditSession = require(\"./edit_session\").EditSession;\n(function() {\n    this.getSelectionMarkers = function() {\n        return this.$selectionMarkers;\n    };\n}).call(EditSession.prototype);\n\n// extend Selection\n(function() {\n    // list of ranges in reverse addition order\n    this.ranges = null;\n\n    // automatically sorted list of ranges\n    this.rangeList = null;\n\n    /** \n     * Adds a range to a selection by entering multiselect mode, if necessary.\n     * @param {Range} range The new range to add\n     * @param {Boolean} $blockChangeEvents Whether or not to block changing events\n     * @method Selection.addRange\n     **/\n    this.addRange = function(range, $blockChangeEvents) {\n        if (!range)\n            return;\n\n        if (!this.inMultiSelectMode && this.rangeCount === 0) {\n            var oldRange = this.toOrientedRange();\n            this.rangeList.add(oldRange);\n            this.rangeList.add(range);\n            if (this.rangeList.ranges.length != 2) {\n                this.rangeList.removeAll();\n                return $blockChangeEvents || this.fromOrientedRange(range);\n            }\n            this.rangeList.removeAll();\n            this.rangeList.add(oldRange);\n            this.$onAddRange(oldRange);\n        }\n\n        if (!range.cursor)\n            range.cursor = range.end;\n\n        var removed = this.rangeList.add(range);\n\n        this.$onAddRange(range);\n\n        if (removed.length)\n            this.$onRemoveRange(removed);\n\n        if (this.rangeCount > 1 && !this.inMultiSelectMode) {\n            this._signal(\"multiSelect\");\n            this.inMultiSelectMode = true;\n            this.session.$undoSelect = false;\n            this.rangeList.attach(this.session);\n        }\n\n        return $blockChangeEvents || this.fromOrientedRange(range);\n    };\n\n    /**\n     * @method Selection.toSingleRange\n     **/\n\n    this.toSingleRange = function(range) {\n        range = range || this.ranges[0];\n        var removed = this.rangeList.removeAll();\n        if (removed.length)\n            this.$onRemoveRange(removed);\n\n        range && this.fromOrientedRange(range);\n    };\n\n    /**\n     * Removes a Range containing pos (if it exists).\n     * @param {Range} pos The position to remove, as a `{row, column}` object\n     * @method Selection.substractPoint\n     **/\n    this.substractPoint = function(pos) {\n        var removed = this.rangeList.substractPoint(pos);\n        if (removed) {\n            this.$onRemoveRange(removed);\n            return removed[0];\n        }\n    };\n\n    /**\n     * Merges overlapping ranges ensuring consistency after changes\n     * @method Selection.mergeOverlappingRanges\n     **/\n    this.mergeOverlappingRanges = function() {\n        var removed = this.rangeList.merge();\n        if (removed.length)\n            this.$onRemoveRange(removed);\n        else if(this.ranges[0])\n            this.fromOrientedRange(this.ranges[0]);\n    };\n\n    this.$onAddRange = function(range) {\n        this.rangeCount = this.rangeList.ranges.length;\n        this.ranges.unshift(range);\n        this._signal(\"addRange\", {range: range});\n    };\n\n    this.$onRemoveRange = function(removed) {\n        this.rangeCount = this.rangeList.ranges.length;\n        if (this.rangeCount == 1 && this.inMultiSelectMode) {\n            var lastRange = this.rangeList.ranges.pop();\n            removed.push(lastRange);\n            this.rangeCount = 0;\n        }\n\n        for (var i = removed.length; i--; ) {\n            var index = this.ranges.indexOf(removed[i]);\n            this.ranges.splice(index, 1);\n        }\n\n        this._signal(\"removeRange\", {ranges: removed});\n\n        if (this.rangeCount === 0 && this.inMultiSelectMode) {\n            this.inMultiSelectMode = false;\n            this._signal(\"singleSelect\");\n            this.session.$undoSelect = true;\n            this.rangeList.detach(this.session);\n        }\n\n        lastRange = lastRange || this.ranges[0];\n        if (lastRange && !lastRange.isEqual(this.getRange()))\n            this.fromOrientedRange(lastRange);\n    };\n\n    // adds multicursor support to selection\n    this.$initRangeList = function() {\n        if (this.rangeList)\n            return;\n\n        this.rangeList = new RangeList();\n        this.ranges = [];\n        this.rangeCount = 0;\n    };\n\n    /**\n     * Returns a concatenation of all the ranges.\n     * @returns {Array}\n     * @method Selection.getAllRanges\n     **/\n    this.getAllRanges = function() {\n        return this.rangeCount ? this.rangeList.ranges.concat() : [this.getRange()];\n    };\n\n    /**\n     * Splits all the ranges into lines.\n     * @method Selection.splitIntoLines\n     **/\n\n    this.splitIntoLines = function () {\n        if (this.rangeCount > 1) {\n            var ranges = this.rangeList.ranges;\n            var lastRange = ranges[ranges.length - 1];\n            var range = Range.fromPoints(ranges[0].start, lastRange.end);\n\n            this.toSingleRange();\n            this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n        } else {\n            var range = this.getRange();\n            var isBackwards = this.isBackwards();\n            var startRow = range.start.row;\n            var endRow = range.end.row;\n            if (startRow == endRow) {\n                if (isBackwards)\n                    var start = range.end, end = range.start;\n                else\n                    var start = range.start, end = range.end;\n                \n                this.addRange(Range.fromPoints(end, end));\n                this.addRange(Range.fromPoints(start, start));\n                return;\n            }\n\n            var rectSel = [];\n            var r = this.getLineRange(startRow, true);\n            r.start.column = range.start.column;\n            rectSel.push(r);\n\n            for (var i = startRow + 1; i < endRow; i++)\n                rectSel.push(this.getLineRange(i, true));\n\n            r = this.getLineRange(endRow, true);\n            r.end.column = range.end.column;\n            rectSel.push(r);\n\n            rectSel.forEach(this.addRange, this);\n        }\n    };\n\n    /**\n     * @method Selection.toggleBlockSelection\n     **/\n    this.toggleBlockSelection = function () {\n        if (this.rangeCount > 1) {\n            var ranges = this.rangeList.ranges;\n            var lastRange = ranges[ranges.length - 1];\n            var range = Range.fromPoints(ranges[0].start, lastRange.end);\n\n            this.toSingleRange();\n            this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n        } else {\n            var cursor = this.session.documentToScreenPosition(this.selectionLead);\n            var anchor = this.session.documentToScreenPosition(this.selectionAnchor);\n\n            var rectSel = this.rectangularRangeBlock(cursor, anchor);\n            rectSel.forEach(this.addRange, this);\n        }\n    };\n\n    /**\n     * \n     * Gets list of ranges composing rectangular block on the screen\n     * \n     * @param {Cursor} screenCursor The cursor to use\n     * @param {Anchor} screenAnchor The anchor to use\n     * @param {Boolean} includeEmptyLines If true, this includes ranges inside the block which are empty due to clipping\n     * @returns {Range}\n     * @method Selection.rectangularRangeBlock\n     **/\n    this.rectangularRangeBlock = function(screenCursor, screenAnchor, includeEmptyLines) {\n        var rectSel = [];\n\n        var xBackwards = screenCursor.column < screenAnchor.column;\n        if (xBackwards) {\n            var startColumn = screenCursor.column;\n            var endColumn = screenAnchor.column;\n            var startOffsetX = screenCursor.offsetX;\n            var endOffsetX = screenAnchor.offsetX;\n        } else {\n            var startColumn = screenAnchor.column;\n            var endColumn = screenCursor.column;\n            var startOffsetX = screenAnchor.offsetX;\n            var endOffsetX = screenCursor.offsetX;\n        }\n\n        var yBackwards = screenCursor.row < screenAnchor.row;\n        if (yBackwards) {\n            var startRow = screenCursor.row;\n            var endRow = screenAnchor.row;\n        } else {\n            var startRow = screenAnchor.row;\n            var endRow = screenCursor.row;\n        }\n\n        if (startColumn < 0)\n            startColumn = 0;\n        if (startRow < 0)\n            startRow = 0;\n\n        if (startRow == endRow)\n            includeEmptyLines = true;\n\n        var docEnd;\n        for (var row = startRow; row <= endRow; row++) {\n            var range = Range.fromPoints(\n                this.session.screenToDocumentPosition(row, startColumn, startOffsetX),\n                this.session.screenToDocumentPosition(row, endColumn, endOffsetX)\n            );\n            if (range.isEmpty()) {\n                if (docEnd && isSamePoint(range.end, docEnd))\n                    break;\n                docEnd = range.end;\n            }\n            range.cursor = xBackwards ? range.start : range.end;\n            rectSel.push(range);\n        }\n\n        if (yBackwards)\n            rectSel.reverse();\n\n        if (!includeEmptyLines) {\n            var end = rectSel.length - 1;\n            while (rectSel[end].isEmpty() && end > 0)\n                end--;\n            if (end > 0) {\n                var start = 0;\n                while (rectSel[start].isEmpty())\n                    start++;\n            }\n            for (var i = end; i >= start; i--) {\n                if (rectSel[i].isEmpty())\n                    rectSel.splice(i, 1);\n            }\n        }\n\n        return rectSel;\n    };\n}).call(Selection.prototype);\n\n// extend Editor\nvar Editor = require(\"./editor\").Editor;\n(function() {\n\n    /** \n     * \n     * Updates the cursor and marker layers.\n     * @method Editor.updateSelectionMarkers\n     *\n     **/\n    this.updateSelectionMarkers = function() {\n        this.renderer.updateCursor();\n        this.renderer.updateBackMarkers();\n    };\n\n    /** \n     * Adds the selection and cursor.\n     * @param {Range} orientedRange A range containing a cursor\n     * @returns {Range}\n     * @method Editor.addSelectionMarker\n     **/\n    this.addSelectionMarker = function(orientedRange) {\n        if (!orientedRange.cursor)\n            orientedRange.cursor = orientedRange.end;\n\n        var style = this.getSelectionStyle();\n        orientedRange.marker = this.session.addMarker(orientedRange, \"ace_selection\", style);\n\n        this.session.$selectionMarkers.push(orientedRange);\n        this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n        return orientedRange;\n    };\n\n    /** \n     * Removes the selection marker.\n     * @param {Range} range The selection range added with [[Editor.addSelectionMarker `addSelectionMarker()`]].\n     * @method Editor.removeSelectionMarker\n     **/\n    this.removeSelectionMarker = function(range) {\n        if (!range.marker)\n            return;\n        this.session.removeMarker(range.marker);\n        var index = this.session.$selectionMarkers.indexOf(range);\n        if (index != -1)\n            this.session.$selectionMarkers.splice(index, 1);\n        this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n    };\n\n    this.removeSelectionMarkers = function(ranges) {\n        var markerList = this.session.$selectionMarkers;\n        for (var i = ranges.length; i--; ) {\n            var range = ranges[i];\n            if (!range.marker)\n                continue;\n            this.session.removeMarker(range.marker);\n            var index = markerList.indexOf(range);\n            if (index != -1)\n                markerList.splice(index, 1);\n        }\n        this.session.selectionMarkerCount = markerList.length;\n    };\n\n    this.$onAddRange = function(e) {\n        this.addSelectionMarker(e.range);\n        this.renderer.updateCursor();\n        this.renderer.updateBackMarkers();\n    };\n\n    this.$onRemoveRange = function(e) {\n        this.removeSelectionMarkers(e.ranges);\n        this.renderer.updateCursor();\n        this.renderer.updateBackMarkers();\n    };\n\n    this.$onMultiSelect = function(e) {\n        if (this.inMultiSelectMode)\n            return;\n        this.inMultiSelectMode = true;\n\n        this.setStyle(\"ace_multiselect\");\n        this.keyBinding.addKeyboardHandler(commands.keyboardHandler);\n        this.commands.setDefaultHandler(\"exec\", this.$onMultiSelectExec);\n\n        this.renderer.updateCursor();\n        this.renderer.updateBackMarkers();\n    };\n\n    this.$onSingleSelect = function(e) {\n        if (this.session.multiSelect.inVirtualMode)\n            return;\n        this.inMultiSelectMode = false;\n\n        this.unsetStyle(\"ace_multiselect\");\n        this.keyBinding.removeKeyboardHandler(commands.keyboardHandler);\n\n        this.commands.removeDefaultHandler(\"exec\", this.$onMultiSelectExec);\n        this.renderer.updateCursor();\n        this.renderer.updateBackMarkers();\n        this._emit(\"changeSelection\");\n    };\n\n    this.$onMultiSelectExec = function(e) {\n        var command = e.command;\n        var editor = e.editor;\n        if (!editor.multiSelect)\n            return;\n        if (!command.multiSelectAction) {\n            var result = command.exec(editor, e.args || {});\n            editor.multiSelect.addRange(editor.multiSelect.toOrientedRange());\n            editor.multiSelect.mergeOverlappingRanges();\n        } else if (command.multiSelectAction == \"forEach\") {\n            result = editor.forEachSelection(command, e.args);\n        } else if (command.multiSelectAction == \"forEachLine\") {\n            result = editor.forEachSelection(command, e.args, true);\n        } else if (command.multiSelectAction == \"single\") {\n            editor.exitMultiSelectMode();\n            result = command.exec(editor, e.args || {});\n        } else {\n            result = command.multiSelectAction(editor, e.args || {});\n        }\n        return result;\n    };\n\n    /** \n     * Executes a command for each selection range.\n     * @param {Object} cmd The command to execute\n     * @param {String} args Any arguments for the command\n     * @method Editor.forEachSelection\n     **/ \n    this.forEachSelection = function(cmd, args, options) {\n        if (this.inVirtualSelectionMode)\n            return;\n        var keepOrder = options && options.keepOrder;\n        var $byLines = options == true || options && options.$byLines;\n        var session = this.session;\n        var selection = this.selection;\n        var rangeList = selection.rangeList;\n        var ranges = (keepOrder ? selection : rangeList).ranges;\n        var result;\n        \n        if (!ranges.length)\n            return cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n        \n        var reg = selection._eventRegistry;\n        selection._eventRegistry = {};\n\n        var tmpSel = new Selection(session);\n        this.inVirtualSelectionMode = true;\n        for (var i = ranges.length; i--;) {\n            if ($byLines) {\n                while (i > 0 && ranges[i].start.row == ranges[i - 1].end.row)\n                    i--;\n            }\n            tmpSel.fromOrientedRange(ranges[i]);\n            tmpSel.index = i;\n            this.selection = session.selection = tmpSel;\n            var cmdResult = cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n            if (!result && cmdResult !== undefined)\n                result = cmdResult;\n            tmpSel.toOrientedRange(ranges[i]);\n        }\n        tmpSel.detach();\n\n        this.selection = session.selection = selection;\n        this.inVirtualSelectionMode = false;\n        selection._eventRegistry = reg;\n        selection.mergeOverlappingRanges();\n        \n        var anim = this.renderer.$scrollAnimation;\n        this.onCursorChange();\n        this.onSelectionChange();\n        if (anim && anim.from == anim.to)\n            this.renderer.animateScrolling(anim.from);\n        \n        return result;\n    };\n\n    /** \n    * Removes all the selections except the last added one.\n    * @method Editor.exitMultiSelectMode\n    **/\n    this.exitMultiSelectMode = function() {\n        if (!this.inMultiSelectMode || this.inVirtualSelectionMode)\n            return;\n        this.multiSelect.toSingleRange();\n    };\n\n    this.getSelectedText = function() {\n        var text = \"\";\n        if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n            var ranges = this.multiSelect.rangeList.ranges;\n            var buf = [];\n            for (var i = 0; i < ranges.length; i++) {\n                buf.push(this.session.getTextRange(ranges[i]));\n            }\n            var nl = this.session.getDocument().getNewLineCharacter();\n            text = buf.join(nl);\n            if (text.length == (buf.length - 1) * nl.length)\n                text = \"\";\n        } else if (!this.selection.isEmpty()) {\n            text = this.session.getTextRange(this.getSelectionRange());\n        }\n        return text;\n    };\n    \n    this.$checkMultiselectChange = function(e, anchor) {\n        if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n            var range = this.multiSelect.ranges[0];\n            if (this.multiSelect.isEmpty() && anchor == this.multiSelect.anchor)\n                return;\n            var pos = anchor == this.multiSelect.anchor\n                ? range.cursor == range.start ? range.end : range.start\n                : range.cursor;\n            if (pos.row != anchor.row \n                || this.session.$clipPositionToDocument(pos.row, pos.column).column != anchor.column)\n                this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange());\n        }\n    };\n\n    /**\n     * Finds and selects all the occurrences of `needle`.\n     * @param {String} The text to find\n     * @param {Object} The search options\n     * @param {Boolean} keeps\n     *\n     * @returns {Number} The cumulative count of all found matches \n     * @method Editor.findAll\n     **/\n    this.findAll = function(needle, options, additive) {\n        options = options || {};\n        options.needle = needle || options.needle;\n        if (options.needle == undefined) {\n            var range = this.selection.isEmpty()\n                ? this.selection.getWordRange()\n                : this.selection.getRange();\n            options.needle = this.session.getTextRange(range);\n        }    \n        this.$search.set(options);\n        \n        var ranges = this.$search.findAll(this.session);\n        if (!ranges.length)\n            return 0;\n\n        var selection = this.multiSelect;\n\n        if (!additive)\n            selection.toSingleRange(ranges[0]);\n\n        for (var i = ranges.length; i--; )\n            selection.addRange(ranges[i], true);\n\n        // keep old selection as primary if possible\n        if (range && selection.rangeList.rangeAtPoint(range.start))\n            selection.addRange(range, true);\n        \n        return ranges.length;\n    };\n\n    /**\n     * Adds a cursor above or below the active cursor.\n     * \n     * @param {Number} dir The direction of lines to select: -1 for up, 1 for down\n     * @param {Boolean} skip If `true`, removes the active selection range\n     *\n     * @method Editor.selectMoreLines \n     */\n    this.selectMoreLines = function(dir, skip) {\n        var range = this.selection.toOrientedRange();\n        var isBackwards = range.cursor == range.end;\n\n        var screenLead = this.session.documentToScreenPosition(range.cursor);\n        if (this.selection.$desiredColumn)\n            screenLead.column = this.selection.$desiredColumn;\n\n        var lead = this.session.screenToDocumentPosition(screenLead.row + dir, screenLead.column);\n\n        if (!range.isEmpty()) {\n            var screenAnchor = this.session.documentToScreenPosition(isBackwards ? range.end : range.start);\n            var anchor = this.session.screenToDocumentPosition(screenAnchor.row + dir, screenAnchor.column);\n        } else {\n            var anchor = lead;\n        }\n\n        if (isBackwards) {\n            var newRange = Range.fromPoints(lead, anchor);\n            newRange.cursor = newRange.start;\n        } else {\n            var newRange = Range.fromPoints(anchor, lead);\n            newRange.cursor = newRange.end;\n        }\n\n        newRange.desiredColumn = screenLead.column;\n        if (!this.selection.inMultiSelectMode) {\n            this.selection.addRange(range);\n        } else {\n            if (skip)\n                var toRemove = range.cursor;\n        }\n\n        this.selection.addRange(newRange);\n        if (toRemove)\n            this.selection.substractPoint(toRemove);\n    };\n\n    /** \n     * Transposes the selected ranges.\n     * @param {Number} dir The direction to rotate selections\n     * @method Editor.transposeSelections\n     **/\n    this.transposeSelections = function(dir) {\n        var session = this.session;\n        var sel = session.multiSelect;\n        var all = sel.ranges;\n\n        for (var i = all.length; i--; ) {\n            var range = all[i];\n            if (range.isEmpty()) {\n                var tmp = session.getWordRange(range.start.row, range.start.column);\n                range.start.row = tmp.start.row;\n                range.start.column = tmp.start.column;\n                range.end.row = tmp.end.row;\n                range.end.column = tmp.end.column;\n            }\n        }\n        sel.mergeOverlappingRanges();\n\n        var words = [];\n        for (var i = all.length; i--; ) {\n            var range = all[i];\n            words.unshift(session.getTextRange(range));\n        }\n\n        if (dir < 0)\n            words.unshift(words.pop());\n        else\n            words.push(words.shift());\n\n        for (var i = all.length; i--; ) {\n            var range = all[i];\n            var tmp = range.clone();\n            session.replace(range, words[i]);\n            range.start.row = tmp.start.row;\n            range.start.column = tmp.start.column;\n        }\n    };\n\n    /** \n     * Finds the next occurrence of text in an active selection and adds it to the selections.\n     * @param {Number} dir The direction of lines to select: -1 for up, 1 for down\n     * @param {Boolean} skip If `true`, removes the active selection range\n     * @method Editor.selectMore\n     **/\n    this.selectMore = function(dir, skip, stopAtFirst) {\n        var session = this.session;\n        var sel = session.multiSelect;\n\n        var range = sel.toOrientedRange();\n        if (range.isEmpty()) {\n            range = session.getWordRange(range.start.row, range.start.column);\n            range.cursor = dir == -1 ? range.start : range.end;\n            this.multiSelect.addRange(range);\n            if (stopAtFirst)\n                return;\n        }\n        var needle = session.getTextRange(range);\n\n        var newRange = find(session, needle, dir);\n        if (newRange) {\n            newRange.cursor = dir == -1 ? newRange.start : newRange.end;\n            this.session.unfold(newRange);\n            this.multiSelect.addRange(newRange);\n            this.renderer.scrollCursorIntoView(null, 0.5);\n        }\n        if (skip)\n            this.multiSelect.substractPoint(range.cursor);\n    };\n\n    /** \n     * Aligns the cursors or selected text.\n     * @method Editor.alignCursors\n     **/\n    this.alignCursors = function() {\n        var session = this.session;\n        var sel = session.multiSelect;\n        var ranges = sel.ranges;\n        // filter out ranges on same row\n        var row = -1;\n        var sameRowRanges = ranges.filter(function(r) {\n            if (r.cursor.row == row)\n                return true;\n            row = r.cursor.row;\n        });\n        \n        if (!ranges.length || sameRowRanges.length == ranges.length - 1) {\n            var range = this.selection.getRange();\n            var fr = range.start.row, lr = range.end.row;\n            var guessRange = fr == lr;\n            if (guessRange) {\n                var max = this.session.getLength();\n                var line;\n                do {\n                    line = this.session.getLine(lr);\n                } while (/[=:]/.test(line) && ++lr < max);\n                do {\n                    line = this.session.getLine(fr);\n                } while (/[=:]/.test(line) && --fr > 0);\n                \n                if (fr < 0) fr = 0;\n                if (lr >= max) lr = max - 1;\n            }\n            var lines = this.session.removeFullLines(fr, lr);\n            lines = this.$reAlignText(lines, guessRange);\n            this.session.insert({row: fr, column: 0}, lines.join(\"\\n\") + \"\\n\");\n            if (!guessRange) {\n                range.start.column = 0;\n                range.end.column = lines[lines.length - 1].length;\n            }\n            this.selection.setRange(range);\n        } else {\n            sameRowRanges.forEach(function(r) {\n                sel.substractPoint(r.cursor);\n            });\n\n            var maxCol = 0;\n            var minSpace = Infinity;\n            var spaceOffsets = ranges.map(function(r) {\n                var p = r.cursor;\n                var line = session.getLine(p.row);\n                var spaceOffset = line.substr(p.column).search(/\\S/g);\n                if (spaceOffset == -1)\n                    spaceOffset = 0;\n\n                if (p.column > maxCol)\n                    maxCol = p.column;\n                if (spaceOffset < minSpace)\n                    minSpace = spaceOffset;\n                return spaceOffset;\n            });\n            ranges.forEach(function(r, i) {\n                var p = r.cursor;\n                var l = maxCol - p.column;\n                var d = spaceOffsets[i] - minSpace;\n                if (l > d)\n                    session.insert(p, lang.stringRepeat(\" \", l - d));\n                else\n                    session.remove(new Range(p.row, p.column, p.row, p.column - l + d));\n\n                r.start.column = r.end.column = maxCol;\n                r.start.row = r.end.row = p.row;\n                r.cursor = r.end;\n            });\n            sel.fromOrientedRange(ranges[0]);\n            this.renderer.updateCursor();\n            this.renderer.updateBackMarkers();\n        }\n    };\n\n    this.$reAlignText = function(lines, forceLeft) {\n        var isLeftAligned = true, isRightAligned = true;\n        var startW, textW, endW;\n\n        return lines.map(function(line) {\n            var m = line.match(/(\\s*)(.*?)(\\s*)([=:].*)/);\n            if (!m)\n                return [line];\n\n            if (startW == null) {\n                startW = m[1].length;\n                textW = m[2].length;\n                endW = m[3].length;\n                return m;\n            }\n\n            if (startW + textW + endW != m[1].length + m[2].length + m[3].length)\n                isRightAligned = false;\n            if (startW != m[1].length)\n                isLeftAligned = false;\n\n            if (startW > m[1].length)\n                startW = m[1].length;\n            if (textW < m[2].length)\n                textW = m[2].length;\n            if (endW > m[3].length)\n                endW = m[3].length;\n\n            return m;\n        }).map(forceLeft ? alignLeft :\n            isLeftAligned ? isRightAligned ? alignRight : alignLeft : unAlign);\n\n        function spaces(n) {\n            return lang.stringRepeat(\" \", n);\n        }\n\n        function alignLeft(m) {\n            return !m[2] ? m[0] : spaces(startW) + m[2]\n                + spaces(textW - m[2].length + endW)\n                + m[4].replace(/^([=:])\\s+/, \"$1 \");\n        }\n        function alignRight(m) {\n            return !m[2] ? m[0] : spaces(startW + textW - m[2].length) + m[2]\n                + spaces(endW)\n                + m[4].replace(/^([=:])\\s+/, \"$1 \");\n        }\n        function unAlign(m) {\n            return !m[2] ? m[0] : spaces(startW) + m[2]\n                + spaces(endW)\n                + m[4].replace(/^([=:])\\s+/, \"$1 \");\n        }\n    };\n}).call(Editor.prototype);\n\n\nfunction isSamePoint(p1, p2) {\n    return p1.row == p2.row && p1.column == p2.column;\n}\n\n// patch\n// adds multicursor support to a session\nexports.onSessionChange = function(e) {\n    var session = e.session;\n    if (session && !session.multiSelect) {\n        session.$selectionMarkers = [];\n        session.selection.$initRangeList();\n        session.multiSelect = session.selection;\n    }\n    this.multiSelect = session && session.multiSelect;\n\n    var oldSession = e.oldSession;\n    if (oldSession) {\n        oldSession.multiSelect.off(\"addRange\", this.$onAddRange);\n        oldSession.multiSelect.off(\"removeRange\", this.$onRemoveRange);\n        oldSession.multiSelect.off(\"multiSelect\", this.$onMultiSelect);\n        oldSession.multiSelect.off(\"singleSelect\", this.$onSingleSelect);\n        oldSession.multiSelect.lead.off(\"change\", this.$checkMultiselectChange);\n        oldSession.multiSelect.anchor.off(\"change\", this.$checkMultiselectChange);\n    }\n\n    if (session) {\n        session.multiSelect.on(\"addRange\", this.$onAddRange);\n        session.multiSelect.on(\"removeRange\", this.$onRemoveRange);\n        session.multiSelect.on(\"multiSelect\", this.$onMultiSelect);\n        session.multiSelect.on(\"singleSelect\", this.$onSingleSelect);\n        session.multiSelect.lead.on(\"change\", this.$checkMultiselectChange);\n        session.multiSelect.anchor.on(\"change\", this.$checkMultiselectChange);\n    }\n\n    if (session && this.inMultiSelectMode != session.selection.inMultiSelectMode) {\n        if (session.selection.inMultiSelectMode)\n            this.$onMultiSelect();\n        else\n            this.$onSingleSelect();\n    }\n};\n\n// MultiSelect(editor)\n// adds multiple selection support to the editor\n// (note: should be called only once for each editor instance)\nfunction MultiSelect(editor) {\n    if (editor.$multiselectOnSessionChange)\n        return;\n    editor.$onAddRange = editor.$onAddRange.bind(editor);\n    editor.$onRemoveRange = editor.$onRemoveRange.bind(editor);\n    editor.$onMultiSelect = editor.$onMultiSelect.bind(editor);\n    editor.$onSingleSelect = editor.$onSingleSelect.bind(editor);\n    editor.$multiselectOnSessionChange = exports.onSessionChange.bind(editor);\n    editor.$checkMultiselectChange = editor.$checkMultiselectChange.bind(editor);\n\n    editor.$multiselectOnSessionChange(editor);\n    editor.on(\"changeSession\", editor.$multiselectOnSessionChange);\n\n    editor.on(\"mousedown\", onMouseDown);\n    editor.commands.addCommands(commands.defaultCommands);\n\n    addAltCursorListeners(editor);\n}\n\nfunction addAltCursorListeners(editor){\n    var el = editor.textInput.getElement();\n    var altCursor = false;\n    event.addListener(el, \"keydown\", function(e) {\n        var altDown = e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey);\n        if (editor.$blockSelectEnabled && altDown) {\n            if (!altCursor) {\n                editor.renderer.setMouseCursor(\"crosshair\");\n                altCursor = true;\n            }\n        } else if (altCursor) {\n            reset();\n        }\n    });\n\n    event.addListener(el, \"keyup\", reset);\n    event.addListener(el, \"blur\", reset);\n    function reset(e) {\n        if (altCursor) {\n            editor.renderer.setMouseCursor(\"\");\n            altCursor = false;\n            // TODO disable menu popping up\n            // e && e.preventDefault()\n        }\n    }\n}\n\nexports.MultiSelect = MultiSelect;\n\n\nrequire(\"./config\").defineOptions(Editor.prototype, \"editor\", {\n    enableMultiselect: {\n        set: function(val) {\n            MultiSelect(this);\n            if (val) {\n                this.on(\"changeSession\", this.$multiselectOnSessionChange);\n                this.on(\"mousedown\", onMouseDown);\n            } else {\n                this.off(\"changeSession\", this.$multiselectOnSessionChange);\n                this.off(\"mousedown\", onMouseDown);\n            }\n        },\n        value: true\n    },\n    enableBlockSelect: {\n        set: function(val) {\n            this.$blockSelectEnabled = val;\n        },\n        value: true\n    }\n});\n\n\n\n});\n"
  },
  {
    "path": "lib/ace/multi_select_test.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\nif (typeof process !== \"undefined\") {\n    require(\"amd-loader\");\n    require(\"./test/mockdom\");\n}\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nrequire(\"./multi_select\");\nvar assert = require(\"./test/assertions\");\nvar Range = require(\"./range\").Range;\nvar Editor = require(\"./editor\").Editor;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar MockRenderer = require(\"./test/mockrenderer\").MockRenderer;\nvar UndoManager = require(\"./undomanager\").UndoManager;\n\nvar editor;\nvar exec = function(name, times, args) {\n    do {\n        editor.commands.exec(name, editor, args);\n    } while(times --> 1);\n};\nvar testRanges = function(str) {\n    assert.equal(editor.selection.getAllRanges() + \"\", str + \"\");\n};\nfunction getSelection(editor) {\n    var data = editor.multiSelect.toJSON();\n    if (!data.length) data = [data];\n    data = data.map(function(x) {\n        var a, c;\n        if (x.isBackwards) {\n            a = x.end;\n            c = x.start;\n        } else {\n            c = x.end;\n            a = x.start;\n        }\n        return Range.comparePoints(a, c) \n            ? [a.row, a.column, c.row, c.column]\n            : [a.row, a.column];\n    });\n    return data.length > 1 ? data : data[0];\n}\nfunction testSelection(editor, data) {\n    assert.equal(getSelection(editor) + \"\", data + \"\");\n}\nfunction setSelection(editor, data) {\n    if (typeof data[0] == \"number\")\n        data = [data];\n    editor.selection.fromJSON(data.map(function(x) {\n        var start = {row: x[0], column: x[1]};\n        var end = x.length == 2 ? start : {row: x[2], column: x[3]};\n        var isBackwards = Range.comparePoints(start, end) > 0;\n        return isBackwards ? {\n            start: end,\n            end: start,\n            isBackwards: isBackwards\n        } : {\n            start: start,\n            end: end,\n            isBackwards: isBackwards\n        };\n    }));\n}\n\nmodule.exports = {\n\n    name: \"ACE multi_select.js\",\n\n    \"test: multiselect editing\": function() {\n        var doc = new EditSession([\n            \"w1.w2\",\n            \"    wtt.w\",\n            \"    wtt.w\"\n        ]);\n        editor = new Editor(new MockRenderer(), doc);\n\n        editor.navigateFileEnd();\n        exec(\"selectMoreBefore\", 3);\n        assert.ok(editor.inMultiSelectMode);\n        assert.equal(editor.selection.getAllRanges().length, 4);\n\n        var newLine = editor.session.getDocument().getNewLineCharacter();\n        var copyText = \"wwww\".split(\"\").join(newLine);\n        assert.equal(editor.getCopyText(), copyText);\n        exec(\"insertstring\", 1, \"a\");\n        exec(\"backspace\", 2);\n        assert.equal(editor.session.getValue(), \"w1.w2\\ntt\\ntt\");\n        assert.equal(editor.selection.getAllRanges().length, 4);\n\n        exec(\"selectall\");\n        assert.ok(!editor.inMultiSelectMode);\n        //assert.equal(editor.selection.getAllRanges().length, 1);\n    },\n\n    \"test: multiselect navigation\": function() {\n        var doc = new EditSession([\n            \"w1.w2\",\n            \"    wtt.w\",\n            \"    wtt.we\"\n        ]);\n        editor = new Editor(new MockRenderer(), doc);\n\n        editor.selectMoreLines(1);\n        testRanges(\"Range: [0/0] -> [0/0],Range: [1/0] -> [1/0]\");\n        assert.ok(editor.inMultiSelectMode);\n\n        exec(\"golinedown\");\n        exec(\"gotolineend\");\n        testRanges(\"Range: [1/9] -> [1/9],Range: [2/10] -> [2/10]\");\n        exec(\"selectwordleft\");\n\n        testRanges(\"Range: [1/8] -> [1/9],Range: [2/8] -> [2/10]\");\n        exec(\"golinedown\", 2);\n        assert.ok(!editor.inMultiSelectMode);\n    },\n\n    \"test: multiselect session change\": function() {\n        var doc = new EditSession([\n            \"w1.w2\",\n            \"    wtt.w\",\n            \"    wtt.w\"\n        ]);\n        editor = new Editor(new MockRenderer(), doc);\n\n        editor.selectMoreLines(1);\n        testRanges(\"Range: [0/0] -> [0/0],Range: [1/0] -> [1/0]\");\n        assert.ok(editor.inMultiSelectMode);\n\n        var doc2 = new EditSession([\"w1\"]);\n        editor.setSession(doc2);\n        assert.ok(!editor.inMultiSelectMode);\n\n        editor.setSession(doc);\n        assert.ok(editor.inMultiSelectMode);\n    },\n\n    \"test: multiselect addRange\": function() {\n        var doc = new EditSession([\n            \"w1.w2\",\n            \"    wtt.w\",\n            \"    wtt.w\"\n        ]);\n        editor = new Editor(new MockRenderer(), doc);\n        var selection = editor.selection;\n\n        var range1 = new Range(0, 2, 0, 4);\n        editor.selection.fromOrientedRange(range1);\n\n        var range2 = new Range(0, 3, 0, 4);\n        selection.addRange(range2);\n        assert.ok(!editor.inMultiSelectMode);\n        assert.ok(range2.isEqual(editor.selection.getRange()));\n\n        var range3 = new Range(0, 1, 0, 1);\n        selection.addRange(range3);\n        assert.ok(editor.inMultiSelectMode);\n        testRanges([range3, range2]);\n\n        var range4 = new Range(0, 0, 4, 0);\n        selection.addRange(range4);\n        assert.ok(!editor.inMultiSelectMode);\n    },\n\n    \"test: onPaste in command with multiselect\": function() {\n        var doc = new EditSession([\"l1\", \"l2\"]);\n        editor = new Editor(new MockRenderer(), doc);\n        editor.commands.addCommand({\n            name: 'insertfoo',\n            exec: function(ed) { ed.onPaste('foo'); },\n            multiSelectAction: \"forEach\"\n        });\n        var selection = editor.selection;\n        var range1 = new Range(0,2,0,2);\n        var range2 = new Range(1,2,1,2);\n        selection.fromOrientedRange(range1);\n        selection.addRange(range2);\n        editor.execCommand('insertfoo');\n        assert.equal('l1foo\\nl2foo', editor.getValue());\n    },\n    \n    \"test multiselect move lines\": function() {\n        editor = new Editor(new MockRenderer());\n        \n        editor.setValue(\"l1\\nl2\\nl3\\nl4\", -1);\n        setSelection(editor, [[0,2],[1,2],[2,2],[3,2]]);\n        \n        exec(\"copylinesdown\");\n        assert.equal(editor.getValue(),\"l1\\nl1\\nl2\\nl2\\nl3\\nl3\\nl4\\nl4\");\n        testSelection(editor, [[1,2],[3,2],[5,2],[7,2]]);\n        exec(\"copylinesup\");\n        assert.equal(editor.getValue(),\"l1\\nl1\\nl1\\nl2\\nl2\\nl2\\nl3\\nl3\\nl3\\nl4\\nl4\\nl4\");\n        testSelection(editor, [[1,2],[4,2],[7,2],[10,2]]);\n        exec(\"removeline\");\n        assert.equal(editor.getValue(),\"l1\\nl1\\nl2\\nl2\\nl3\\nl3\\nl4\\nl4\");\n        testSelection(editor, [[1,0],[3,0],[5,0],[7,0]]);\n        \n        setSelection(editor, [[1,2],[1,1,1,0],[3,0,3,1],[5,0,5,1],[7,0,7,1]]);\n        exec(\"copylinesdown\");\n        exec(\"copylinesup\");\n        assert.equal(editor.getValue(),\"l1\\nl1\\nl1\\nl1\\nl2\\nl2\\nl2\\nl2\\nl3\\nl3\\nl3\\nl3\\nl4\\nl4\\nl4\\nl4\");\n        testSelection(editor, [[2,2],[2,1,2,0],[6,0,6,1],[10,0,10,1],[14,0,14,1]]);\n        \n        exec(\"movelinesdown\", 12);\n        assert.equal(editor.getValue(),\"l1\\nl1\\nl1\\nl2\\nl2\\nl2\\nl3\\nl3\\nl3\\nl4\\nl4\\nl4\\nl1\\nl2\\nl3\\nl4\");\n        testSelection(editor, [[12,2],[12,1,12,0],[13,0,13,1],[14,0,14,1],[15,0,15,1]]);\n        \n        exec(\"movelinesup\", 12);\n        assert.equal(editor.getValue(),\"l1\\nl2\\nl3\\nl4\\nl1\\nl1\\nl1\\nl2\\nl2\\nl2\\nl3\\nl3\\nl3\\nl4\\nl4\\nl4\");\n        testSelection(editor, [[0,2],[0,1,0,0],[1,0,1,1],[2,0,2,1],[3,0,3,1]]);\n    },\n\n    \"test multiselect fromJSON/toJSON\": function() {\n        var doc = new EditSession([\"l1\", \"l2\"]);\n        editor = new Editor(new MockRenderer(), doc);\n        var selection = editor.selection;\n        \n        var before = selection.toJSON();\n        \n        var range1 = new Range(0,2,0,2);\n        var range2 = new Range(1,2,1,2);\n        selection.fromOrientedRange(range1);\n        selection.addRange(range2);\n        \n        var after = selection.toJSON();\n        \n        selection.fromJSON(before);\n        assert.ok(!selection.isEqual(after));\n        assert.ok(selection.isEqual(before));\n        \n        selection.fromJSON(after);\n        assert.ok(!selection.isEqual(before));\n        assert.ok(selection.isEqual(after));\n    },\n    \n    \"test multiselect align\": function() {\n        var doc = new EditSession([\"l1\", \"l2\", \"l3\"]);\n        doc.setUndoManager(new UndoManager());\n        editor = new Editor(new MockRenderer(), doc);\n        var selection = editor.selection;\n        selection.addRange(new Range(1,0,1,0));\n        selection.addRange(new Range(2,2,2,2));\n        editor.execCommand(\"alignCursors\");\n        assert.equal('  l1\\n  l2\\nl3', editor.getValue());\n        doc.markUndoGroup();\n        editor.execCommand(\"undo\");\n        assert.equal('l1\\nl2\\nl3', editor.getValue());\n    }\n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main) {\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n}\n"
  },
  {
    "path": "lib/ace/occur.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar Range = require(\"./range\").Range;\nvar Search = require(\"./search\").Search;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar SearchHighlight = require(\"./search_highlight\").SearchHighlight;\n\n/**\n * @class Occur\n *\n * Finds all lines matching a search term in the current [[Document\n * `Document`]] and displays them instead of the original `Document`. Keeps\n * track of the mapping between the occur doc and the original doc.\n *\n **/\n\n\n/**\n * Creates a new `Occur` object.\n *\n * @constructor\n **/\nfunction Occur() {}\n\noop.inherits(Occur, Search);\n\n(function() {\n\n    /**\n     * Enables occur mode. expects that `options.needle` is a search term.\n     * This search term is used to filter out all the lines that include it\n     * and these are then used as the content of a new [[Document\n     * `Document`]]. The current cursor position of editor will be translated\n     * so that the cursor is on the matching row/column as it was before.\n     * @param {Editor} editor\n     * @param {Object} options options.needle should be a String\n     * @return {Boolean} Whether occur activation was successful\n     *\n     **/\n    this.enter = function(editor, options) {\n        if (!options.needle) return false;\n        var pos = editor.getCursorPosition();\n        this.displayOccurContent(editor, options);\n        var translatedPos = this.originalToOccurPosition(editor.session, pos);\n        editor.moveCursorToPosition(translatedPos);\n        return true;\n    };\n\n    /**\n     * Disables occur mode. Resets the [[Sessions `EditSession`]] [[Document\n     * `Document`]] back to the original doc. If options.translatePosition is\n     * truthy also maps the [[Editors `Editor`]] cursor position accordingly.\n     * @param {Editor} editor\n     * @param {Object} options options.translatePosition\n     * @return {Boolean} Whether occur deactivation was successful\n     *\n     **/\n    this.exit = function(editor, options) {\n        var pos = options.translatePosition && editor.getCursorPosition();\n        var translatedPos = pos && this.occurToOriginalPosition(editor.session, pos);\n        this.displayOriginalContent(editor);\n        if (translatedPos)\n            editor.moveCursorToPosition(translatedPos);\n        return true;\n    };\n\n    this.highlight = function(sess, regexp) {\n        var hl = sess.$occurHighlight = sess.$occurHighlight || sess.addDynamicMarker(\n                new SearchHighlight(null, \"ace_occur-highlight\", \"text\"));\n        hl.setRegexp(regexp);\n        sess._emit(\"changeBackMarker\"); // force highlight layer redraw\n    };\n\n    this.displayOccurContent = function(editor, options) {\n        // this.setSession(session || new EditSession(\"\"))\n        this.$originalSession = editor.session;\n        var found = this.matchingLines(editor.session, options);\n        var lines = found.map(function(foundLine) { return foundLine.content; });\n        var occurSession = new EditSession(lines.join('\\n'));\n        occurSession.$occur = this;\n        occurSession.$occurMatchingLines = found;\n        editor.setSession(occurSession);\n        this.$useEmacsStyleLineStart = this.$originalSession.$useEmacsStyleLineStart;\n        occurSession.$useEmacsStyleLineStart = this.$useEmacsStyleLineStart;\n        this.highlight(occurSession, options.re);\n        occurSession._emit('changeBackMarker');\n    };\n\n    this.displayOriginalContent = function(editor) {\n        editor.setSession(this.$originalSession);\n        this.$originalSession.$useEmacsStyleLineStart = this.$useEmacsStyleLineStart;\n    };\n\n    /**\n    * Translates the position from the original document to the occur lines in\n    * the document or the beginning if the doc {row: 0, column: 0} if not\n    * found.\n    * @param {EditSession} session The occur session\n    * @param {Object} pos The position in the original document\n    * @return {Object} position in occur doc\n    **/\n    this.originalToOccurPosition = function(session, pos) {\n        var lines = session.$occurMatchingLines;\n        var nullPos = {row: 0, column: 0};\n        if (!lines) return nullPos;\n        for (var i = 0; i < lines.length; i++) {\n            if (lines[i].row === pos.row)\n                return {row: i, column: pos.column};\n        }\n        return nullPos;\n    };\n\n    /**\n    * Translates the position from the occur document to the original document\n    * or `pos` if not found.\n    * @param {EditSession} session The occur session\n    * @param {Object} pos The position in the occur session document\n    * @return {Object} position\n    **/\n    this.occurToOriginalPosition = function(session, pos) {\n        var lines = session.$occurMatchingLines;\n        if (!lines || !lines[pos.row])\n            return pos;\n        return {row: lines[pos.row].row, column: pos.column};\n    };\n\n    this.matchingLines = function(session, options) {\n        options = oop.mixin({}, options);\n        if (!session || !options.needle) return [];\n        var search = new Search();\n        search.set(options);\n        return search.findAll(session).reduce(function(lines, range) {\n            var row = range.start.row;\n            var last = lines[lines.length-1];\n            return last && last.row === row ?\n                lines :\n                lines.concat({row: row, content: session.getLine(row)});\n        }, []);\n    };\n\n}).call(Occur.prototype);\n\nvar dom = require('./lib/dom');\ndom.importCssString(\".ace_occur-highlight {\\n\\\n    border-radius: 4px;\\n\\\n    background-color: rgba(87, 255, 8, 0.25);\\n\\\n    position: absolute;\\n\\\n    z-index: 4;\\n\\\n    -moz-box-sizing: border-box;\\n\\\n    -webkit-box-sizing: border-box;\\n\\\n    box-sizing: border-box;\\n\\\n    box-shadow: 0 0 4px rgb(91, 255, 50);\\n\\\n}\\n\\\n.ace_dark .ace_occur-highlight {\\n\\\n    background-color: rgb(80, 140, 85);\\n\\\n    box-shadow: 0 0 4px rgb(60, 120, 70);\\n\\\n}\\n\", \"incremental-occur-highlighting\");\n\nexports.Occur = Occur;\n\n});\n"
  },
  {
    "path": "lib/ace/occur_test.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\nif (typeof process !== \"undefined\") {\n    require(\"amd-loader\");\n}\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar EditSession = require(\"./edit_session\").EditSession;\nvar Editor = require(\"./editor\").Editor;\nvar MockRenderer = require(\"./test/mockrenderer\").MockRenderer;\nvar Range = require(\"./range\").Range;\nvar assert = require(\"./test/assertions\");\nvar Occur = require(\"./occur\").Occur;\nvar occurStartCommand = require(\"./commands/occur_commands\").occurStartCommand;\nvar editor, occur;\n\nmodule.exports = {\n\n    name: \"ACE occur.js\",\n\n    setUp: function() {\n        var session = new EditSession('');\n        editor = new Editor(new MockRenderer(), session);\n        occur = new Occur();\n    },\n\n    \"test: find lines matching\" : function() {\n        editor.session.insert({row: 0, column: 0}, 'abc\\ndef\\nxyz\\nbcxbc');\n        var result = occur.matchingLines(editor.session, {needle: 'bc'}),\n            expected = [{row: 0, content: 'abc'}, {row: 3, content: 'bcxbc'}];\n        assert.deepEqual(result, expected);\n    },\n\n    \"test: display occurrences\" : function() {\n        var text = 'abc\\ndef\\nxyz\\nbcx\\n';\n        editor.session.insert({row: 0, column: 0}, text);\n        occur.displayOccurContent(editor, {needle: 'bc'});\n        assert.equal(editor.getValue(), 'abc\\nbcx');\n        occur.displayOriginalContent(editor);\n        assert.equal(editor.getValue(), text);\n    },\n\n    \"test: original position from occur doc\" : function() {\n        var text = 'abc\\ndef\\nxyz\\nbcx\\n';\n        editor.session.insert({row: 0, column: 0}, text);\n        occur.displayOccurContent(editor, {needle: 'bc'});\n        assert.equal(editor.getValue(), 'abc\\nbcx');\n        var pos = occur.occurToOriginalPosition(editor.session, {row: 1, column: 2});\n        assert.position(pos, 3, 2);\n    },\n\n    \"test: occur command\" : function() {\n        // setup\n        var text = 'hel\\nlo\\n\\nwo\\nrld\\n';\n        editor.session.insert({row: 0, column: 0}, text);\n        editor.commands.addCommand(occurStartCommand);\n\n        // run occur for lines including 'o'\n        editor.execCommand('occur', {needle: 'o'});\n        assert.equal(editor.getValue(), 'lo\\nwo');\n        // command install OK?\n        // assert.ok(editor.getReadOnly(), 'occur doc not marked as read only');\n        assert.ok(editor.getKeyboardHandler().isOccurHandler, 'no occur handler installed');\n        assert.ok(editor.commands.byName.occurexit, 'no exitoccur command installed');\n\n        // exit occur\n        editor.execCommand('occurexit');\n        assert.equal(editor.getValue(), text);\n\n        // editor state cleaned up?\n        // assert.ok(!editor.getReadOnly(), 'original doc is marked as read only');\n        assert.ok(!editor.getKeyboardHandler().isOccurHandler, 'occur handler installed after detach');\n        assert.ok(!editor.commands.byName.occurexit, 'exitoccur installed after exiting occur');\n    },\n\n    \"test: occur navigation\" : function() {\n        // setup\n        var text = 'hel\\nlo\\n\\nwo\\nrld\\n';\n        editor.session.insert({row: 0, column: 0}, text);\n        editor.commands.addCommand(occurStartCommand);\n        editor.moveCursorToPosition({row: 1, column: 1});\n\n        // run occur for lines including 'o'\n        editor.execCommand('occur', {needle: 'o'});\n        assert.equal(editor.getValue(), 'lo\\nwo');\n        assert.position(editor.getCursorPosition(), 0, 1, 'original -> occur pos');\n\n        // move to second line and accept\n        editor.moveCursorToPosition({row: 1, column: 1});\n        editor.execCommand('occuraccept');\n\n        assert.position(editor.getCursorPosition(), 3, 1, 'occur -> original pos');\n    },\n\n    \"test: recursive occur\" : function() {\n        // setup\n        var text = 'x\\nabc1\\nx\\nabc2\\n';\n        editor.session.insert({row: 0, column: 0}, text);\n        editor.commands.addCommand(occurStartCommand);\n\n        // orig -> occur1\n        editor.execCommand('occur', {needle: 'abc'});\n        assert.equal(editor.getValue(), 'abc1\\nabc2', \"orig -> occur1\");\n\n        // occur1 -> occur2\n        editor.execCommand('occur', {needle: '2'});\n        assert.equal(editor.getValue(), 'abc2', \"occur1 -> occur2\");\n\n        // occur2 -> occur1\n        editor.execCommand('occurexit');\n        assert.equal(editor.getValue(), 'abc1\\nabc2', \"occur2 -> occur1\");\n\n        // occur1 -> orig\n        editor.execCommand('occurexit');\n        assert.equal(editor.getValue(), text, \"occur1 -> orig\");\n    }\n\n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main) {\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n}\n"
  },
  {
    "path": "lib/ace/placeholder.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"./range\").Range;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar oop = require(\"./lib/oop\");\n\n/**\n * @class PlaceHolder\n *\n **/\n\n/**\n * - session (Document): The document to associate with the anchor\n * - length (Number): The starting row position\n * - pos (Number): The starting column position\n * - others (String):\n * - mainClass (String):\n * - othersClass (String):\n * \n * @constructor\n **/\n\nvar PlaceHolder = function(session, length, pos, others, mainClass, othersClass) {\n    var _self = this;\n    this.length = length;\n    this.session = session;\n    this.doc = session.getDocument();\n    this.mainClass = mainClass;\n    this.othersClass = othersClass;\n    this.$onUpdate = this.onUpdate.bind(this);\n    this.doc.on(\"change\", this.$onUpdate);\n    this.$others = others;\n    \n    this.$onCursorChange = function() {\n        setTimeout(function() {\n            _self.onCursorChange();\n        });\n    };\n    \n    this.$pos = pos;\n    // Used for reset\n    var undoStack = session.getUndoManager().$undoStack || session.getUndoManager().$undostack || {length: -1};\n    this.$undoStackDepth = undoStack.length;\n    this.setup();\n\n    session.selection.on(\"changeCursor\", this.$onCursorChange);\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n\n    /**\n     * PlaceHolder.setup()\n     *\n     * TODO\n     *\n     **/\n    this.setup = function() {\n        var _self = this;\n        var doc = this.doc;\n        var session = this.session;\n        \n        this.selectionBefore = session.selection.toJSON();\n        if (session.selection.inMultiSelectMode)\n            session.selection.toSingleRange();\n\n        this.pos = doc.createAnchor(this.$pos.row, this.$pos.column);\n        var pos = this.pos;\n        pos.$insertRight = true;\n        pos.detach();\n        pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + this.length), this.mainClass, null, false);\n        this.others = [];\n        this.$others.forEach(function(other) {\n            var anchor = doc.createAnchor(other.row, other.column);\n            anchor.$insertRight = true;\n            anchor.detach();\n            _self.others.push(anchor);\n        });\n        session.setUndoSelect(false);\n    };\n    \n    /**\n     * PlaceHolder.showOtherMarkers()\n     *\n     * TODO\n     *\n     **/\n    this.showOtherMarkers = function() {\n        if (this.othersActive) return;\n        var session = this.session;\n        var _self = this;\n        this.othersActive = true;\n        this.others.forEach(function(anchor) {\n            anchor.markerId = session.addMarker(new Range(anchor.row, anchor.column, anchor.row, anchor.column+_self.length), _self.othersClass, null, false);\n        });\n    };\n    \n    /**\n     * PlaceHolder.hideOtherMarkers()\n     *\n     * Hides all over markers in the [[EditSession `EditSession`]] that are not the currently selected one.\n     *\n     **/\n    this.hideOtherMarkers = function() {\n        if (!this.othersActive) return;\n        this.othersActive = false;\n        for (var i = 0; i < this.others.length; i++) {\n            this.session.removeMarker(this.others[i].markerId);\n        }\n    };\n\n    /**\n     * PlaceHolder@onUpdate(e)\n     * \n     * Emitted when the place holder updates.\n     *\n     **/\n    this.onUpdate = function(delta) {\n        if (this.$updating)\n            return this.updateAnchors(delta);\n            \n        var range = delta;\n        if (range.start.row !== range.end.row) return;\n        if (range.start.row !== this.pos.row) return;\n        this.$updating = true;\n        var lengthDiff = delta.action === \"insert\" ? range.end.column - range.start.column : range.start.column - range.end.column;\n        var inMainRange = range.start.column >= this.pos.column && range.start.column <= this.pos.column + this.length + 1;\n        var distanceFromStart = range.start.column - this.pos.column;\n        \n        this.updateAnchors(delta);\n        \n        if (inMainRange)\n            this.length += lengthDiff;\n\n        if (inMainRange && !this.session.$fromUndo) {\n            if (delta.action === 'insert') {\n                for (var i = this.others.length - 1; i >= 0; i--) {\n                    var otherPos = this.others[i];\n                    var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart};\n                    this.doc.insertMergedLines(newPos, delta.lines);\n                }\n            } else if (delta.action === 'remove') {\n                for (var i = this.others.length - 1; i >= 0; i--) {\n                    var otherPos = this.others[i];\n                    var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart};\n                    this.doc.remove(new Range(newPos.row, newPos.column, newPos.row, newPos.column - lengthDiff));\n                }\n            }\n        }\n        \n        this.$updating = false;\n        this.updateMarkers();\n    };\n    \n    this.updateAnchors = function(delta) {\n        this.pos.onChange(delta);\n        for (var i = this.others.length; i--;)\n            this.others[i].onChange(delta);\n        this.updateMarkers();\n    };\n    \n    this.updateMarkers = function() {\n        if (this.$updating)\n            return;\n        var _self = this;\n        var session = this.session;\n        var updateMarker = function(pos, className) {\n            session.removeMarker(pos.markerId);\n            pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column+_self.length), className, null, false);\n        };\n        updateMarker(this.pos, this.mainClass);\n        for (var i = this.others.length; i--;)\n            updateMarker(this.others[i], this.othersClass);\n    };\n    \n    /**\n     * PlaceHolder@onCursorChange(e)\n     * \n     * Emitted when the cursor changes.\n     *\n     **/\n\n    this.onCursorChange = function(event) {\n        if (this.$updating || !this.session) return;\n        var pos = this.session.selection.getCursor();\n        if (pos.row === this.pos.row && pos.column >= this.pos.column && pos.column <= this.pos.column + this.length) {\n            this.showOtherMarkers();\n            this._emit(\"cursorEnter\", event);\n        } else {\n            this.hideOtherMarkers();\n            this._emit(\"cursorLeave\", event);\n        }\n    };\n    \n    /**\n     * PlaceHolder.detach()\n     * \n     * TODO\n     *\n     **/    \n    this.detach = function() {\n        this.session.removeMarker(this.pos && this.pos.markerId);\n        this.hideOtherMarkers();\n        this.doc.removeEventListener(\"change\", this.$onUpdate);\n        this.session.selection.removeEventListener(\"changeCursor\", this.$onCursorChange);\n        this.session.setUndoSelect(true);\n        this.session = null;\n    };\n    \n    /**\n     * PlaceHolder.cancel()\n     * \n     * TODO\n     *\n     **/\n    this.cancel = function() {\n        if (this.$undoStackDepth === -1)\n            return;\n        var undoManager = this.session.getUndoManager();\n        var undosRequired = (undoManager.$undoStack || undoManager.$undostack).length - this.$undoStackDepth;\n        for (var i = 0; i < undosRequired; i++) {\n            undoManager.undo(this.session, true);\n        }\n        if (this.selectionBefore)\n            this.session.selection.fromJSON(this.selectionBefore);\n    };\n}).call(PlaceHolder.prototype);\n\n\nexports.PlaceHolder = PlaceHolder;\n});\n"
  },
  {
    "path": "lib/ace/placeholder_test.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\nif (typeof process !== \"undefined\") {\n    require(\"amd-loader\");\n    require(\"./test/mockdom\");\n}\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar EditSession = require(\"./edit_session\").EditSession;\nvar Editor = require(\"./editor\").Editor;\nvar MockRenderer = require(\"./test/mockrenderer\").MockRenderer;\nvar assert = require(\"./test/assertions\");\nvar JavaScriptMode = require(\"./mode/javascript\").Mode;\nvar PlaceHolder = require(\"./placeholder\").PlaceHolder;\nvar UndoManager = require(\"./undomanager\").UndoManager;\nrequire(\"./multi_select\");\n\nmodule.exports = {\n\n   \"test: simple at the end appending of text\" : function() {\n        var session = new EditSession(\"var a = 10;\\nconsole.log(a, a);\", new JavaScriptMode());\n        var editor = new Editor(new MockRenderer(), session);\n        \n        new PlaceHolder(session, 1, {row: 0, column: 4}, [{row: 1, column: 12}, {row: 1, column: 15}]);\n        \n        editor.moveCursorTo(0, 5);\n        editor.insert('b');\n        assert.equal(session.doc.getValue(), \"var ab = 10;\\nconsole.log(ab, ab);\");\n        editor.insert('cd');\n        assert.equal(session.doc.getValue(), \"var abcd = 10;\\nconsole.log(abcd, abcd);\");\n        editor.remove('left');\n        editor.remove('left');\n        editor.remove('left');\n        assert.equal(session.doc.getValue(), \"var a = 10;\\nconsole.log(a, a);\");\n    },\n\n    \"test: inserting text outside placeholder\" : function() {\n        var session = new EditSession(\"var a = 10;\\nconsole.log(a, a);\\n\", new JavaScriptMode());\n        var editor = new Editor(new MockRenderer(), session);\n        \n        new PlaceHolder(session, 1, {row: 0, column: 4}, [{row: 1, column: 12}, {row: 1, column: 15}]);\n        \n        editor.moveCursorTo(2, 0);\n        editor.insert('b');\n        assert.equal(session.doc.getValue(), \"var a = 10;\\nconsole.log(a, a);\\nb\");\n    },\n    \n   \"test: insertion at the beginning\" : function(next) {\n        var session = new EditSession(\"var a = 10;\\nconsole.log(a, a);\", new JavaScriptMode());\n        var editor = new Editor(new MockRenderer(), session);\n        \n        var p = new PlaceHolder(session, 1, {row: 0, column: 4}, [{row: 1, column: 12}, {row: 1, column: 15}]);\n        \n        editor.moveCursorTo(0, 4);\n        editor.insert('$');\n        assert.equal(session.doc.getValue(), \"var $a = 10;\\nconsole.log($a, $a);\");\n        editor.moveCursorTo(0, 4);\n        // Have to put this in a setTimeout because the anchor is only fixed later.\n        setTimeout(function() {\n            editor.insert('v');\n            assert.equal(session.doc.getValue(), \"var v$a = 10;\\nconsole.log(v$a, v$a);\");\n            next();\n        }, 20);\n    },\n\n   \"test: detaching placeholder\" : function() {\n        var session = new EditSession(\"var a = 10;\\nconsole.log(a, a);\", new JavaScriptMode());\n        var editor = new Editor(new MockRenderer(), session);\n        \n        var p = new PlaceHolder(session, 1, {row: 0, column: 4}, [{row: 1, column: 12}, {row: 1, column: 15}]);\n        \n        editor.moveCursorTo(0, 5);\n        editor.insert('b');\n        assert.equal(session.doc.getValue(), \"var ab = 10;\\nconsole.log(ab, ab);\");\n        p.detach();\n        editor.insert('cd');\n        assert.equal(session.doc.getValue(), \"var abcd = 10;\\nconsole.log(ab, ab);\");\n    },\n\n   \"test: events\" : function() {\n        var session = new EditSession(\"var a = 10;\\nconsole.log(a, a);\", new JavaScriptMode());\n        var editor = new Editor(new MockRenderer(), session);\n        \n        var p = new PlaceHolder(session, 1, {row: 0, column: 4}, [{row: 1, column: 12}, {row: 1, column: 15}]);\n        var entered = false;\n        var left = false;\n        p.on(\"cursorEnter\", function() {\n            entered = true;\n        });\n        p.on(\"cursorLeave\", function() {\n            left = true;\n        });\n        \n        editor.moveCursorTo(0, 0);\n        editor.moveCursorTo(0, 4);\n        p.onCursorChange(); // Have to do this by hand because moveCursorTo doesn't trigger the event\n        assert.ok(entered);\n        editor.moveCursorTo(1, 0);\n        p.onCursorChange(); // Have to do this by hand because moveCursorTo doesn't trigger the event\n        assert.ok(left);\n    },\n    \n    \"test: cancel\": function(next) {\n        var session = new EditSession(\"var a = 10;\\nconsole.log(a, a);\", new JavaScriptMode());\n        session.setUndoManager(new UndoManager());\n        var editor = new Editor(new MockRenderer(), session);\n        var p = new PlaceHolder(session, 1, {row: 0, column: 4}, [{row: 1, column: 12}, {row: 1, column: 15}]);\n        \n        editor.moveCursorTo(0, 5);\n        editor.insert('b');\n        editor.insert('cd');\n        editor.remove('left');\n        assert.equal(session.doc.getValue(), \"var abc = 10;\\nconsole.log(abc, abc);\");\n        // Wait a little for the changes to enter the undo stack\n        setTimeout(function() {\n            p.cancel();\n            assert.equal(session.doc.getValue(), \"var a = 10;\\nconsole.log(a, a);\");\n            next();\n        }, 80);\n    }\n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main) {\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n}\n"
  },
  {
    "path": "lib/ace/range.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\nvar comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\n/**\n * This object is used in various places to indicate a region within the editor. To better visualize how this works, imagine a rectangle. Each quadrant of the rectangle is analogous to a range, as ranges contain a starting row and starting column, and an ending row, and ending column.\n * @class Range\n **/\n\n/**\n * Creates a new `Range` object with the given starting and ending row and column points.\n * @param {Number} startRow The starting row\n * @param {Number} startColumn The starting column\n * @param {Number} endRow The ending row\n * @param {Number} endColumn The ending column\n *\n * @constructor\n **/\nvar Range = function(startRow, startColumn, endRow, endColumn) {\n    this.start = {\n        row: startRow,\n        column: startColumn\n    };\n\n    this.end = {\n        row: endRow,\n        column: endColumn\n    };\n};\n\n(function() {\n    /**\n     * Returns `true` if and only if the starting row and column, and ending row and column, are equivalent to those given by `range`.\n     * @param {Range} range A range to check against\n     *\n     * @return {Boolean}\n     **/\n    this.isEqual = function(range) {\n        return this.start.row === range.start.row &&\n            this.end.row === range.end.row &&\n            this.start.column === range.start.column &&\n            this.end.column === range.end.column;\n    };\n\n    /**\n     *\n     * Returns a string containing the range's row and column information, given like this:\n     * ```\n     *    [start.row/start.column] -> [end.row/end.column]\n     * ```\n     * @return {String}\n     **/\n    this.toString = function() {\n        return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n            \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n    };\n\n    /**\n     *\n     * Returns `true` if the `row` and `column` provided are within the given range. This can better be expressed as returning `true` if:\n     * ```javascript\n     *    this.start.row <= row <= this.end.row &&\n     *    this.start.column <= column <= this.end.column\n     * ```\n     * @param {Number} row A row to check for\n     * @param {Number} column A column to check for\n     * @returns {Boolean}\n     * @related Range.compare\n     **/\n\n    this.contains = function(row, column) {\n        return this.compare(row, column) == 0;\n    };\n\n    /**\n     * Compares `this` range (A) with another range (B).\n     * @param {Range} range A range to compare with\n     *\n     * @related Range.compare\n     * @returns {Number} This method returns one of the following numbers:<br/>\n     * <br/>\n     * * `-2`: (B) is in front of (A), and doesn't intersect with (A)<br/>\n     * * `-1`: (B) begins before (A) but ends inside of (A)<br/>\n     * * `0`: (B) is completely inside of (A) OR (A) is completely inside of (B)<br/>\n     * * `+1`: (B) begins inside of (A) but ends outside of (A)<br/>\n     * * `+2`: (B) is after (A) and doesn't intersect with (A)<br/>\n     * * `42`: FTW state: (B) ends in (A) but starts outside of (A)\n     **/\n    this.compareRange = function(range) {\n        var cmp,\n            end = range.end,\n            start = range.start;\n\n        cmp = this.compare(end.row, end.column);\n        if (cmp == 1) {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == 1) {\n                return 2;\n            } else if (cmp == 0) {\n                return 1;\n            } else {\n                return 0;\n            }\n        } else if (cmp == -1) {\n            return -2;\n        } else {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == -1) {\n                return -1;\n            } else if (cmp == 1) {\n                return 42;\n            } else {\n                return 0;\n            }\n        }\n    };\n\n    /**\n     * Checks the row and column points of `p` with the row and column points of the calling range.\n     *\n     * @param {Range} p A point to compare with\n     *\n     * @related Range.compare\n     * @returns {Number} This method returns one of the following numbers:<br/>\n     * * `0` if the two points are exactly equal<br/>\n     * * `-1` if `p.row` is less then the calling range<br/>\n     * * `1` if `p.row` is greater than the calling range<br/>\n     * <br/>\n     * If the starting row of the calling range is equal to `p.row`, and:<br/>\n     * * `p.column` is greater than or equal to the calling range's starting column, this returns `0`<br/>\n     * * Otherwise, it returns -1<br/>\n     *<br/>\n     * If the ending row of the calling range is equal to `p.row`, and:<br/>\n     * * `p.column` is less than or equal to the calling range's ending column, this returns `0`<br/>\n     * * Otherwise, it returns 1<br/>\n     **/\n    this.comparePoint = function(p) {\n        return this.compare(p.row, p.column);\n    };\n\n    /**\n     * Checks the start and end points of `range` and compares them to the calling range. Returns `true` if the `range` is contained within the caller's range.\n     * @param {Range} range A range to compare with\n     *\n     * @returns {Boolean}\n     * @related Range.comparePoint\n     **/\n    this.containsRange = function(range) {\n        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n    };\n\n    /**\n     * Returns `true` if passed in `range` intersects with the one calling this method.\n     * @param {Range} range A range to compare with\n     *\n     * @returns {Boolean}\n     **/\n    this.intersects = function(range) {\n        var cmp = this.compareRange(range);\n        return (cmp == -1 || cmp == 0 || cmp == 1);\n    };\n\n    /**\n     * Returns `true` if the caller's ending row point is the same as `row`, and if the caller's ending column is the same as `column`.\n     * @param {Number} row A row point to compare with\n     * @param {Number} column A column point to compare with\n     *\n     * @returns {Boolean}\n     **/\n    this.isEnd = function(row, column) {\n        return this.end.row == row && this.end.column == column;\n    };\n\n    /**\n     * Returns `true` if the caller's starting row point is the same as `row`, and if the caller's starting column is the same as `column`.\n     * @param {Number} row A row point to compare with\n     * @param {Number} column A column point to compare with\n     *\n     * @returns {Boolean}\n     **/\n    this.isStart = function(row, column) {\n        return this.start.row == row && this.start.column == column;\n    };\n\n    /**\n     * Sets the starting row and column for the range.\n     * @param {Number} row A row point to set\n     * @param {Number} column A column point to set\n     *\n     **/\n    this.setStart = function(row, column) {\n        if (typeof row == \"object\") {\n            this.start.column = row.column;\n            this.start.row = row.row;\n        } else {\n            this.start.row = row;\n            this.start.column = column;\n        }\n    };\n\n    /**\n     * Sets the starting row and column for the range.\n     * @param {Number} row A row point to set\n     * @param {Number} column A column point to set\n     *\n     **/\n    this.setEnd = function(row, column) {\n        if (typeof row == \"object\") {\n            this.end.column = row.column;\n            this.end.row = row.row;\n        } else {\n            this.end.row = row;\n            this.end.column = column;\n        }\n    };\n\n    /**\n     * Returns `true` if the `row` and `column` are within the given range.\n     * @param {Number} row A row point to compare with\n     * @param {Number} column A column point to compare with\n     *\n     *\n     * @returns {Boolean}\n     * @related Range.compare\n     **/\n    this.inside = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column) || this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n\n    /**\n     * Returns `true` if the `row` and `column` are within the given range's starting points.\n     * @param {Number} row A row point to compare with\n     * @param {Number} column A column point to compare with\n     *\n     * @returns {Boolean}\n     * @related Range.compare\n     **/\n    this.insideStart = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n\n    /**\n     * Returns `true` if the `row` and `column` are within the given range's ending points.\n     * @param {Number} row A row point to compare with\n     * @param {Number} column A column point to compare with\n     *\n     * @returns {Boolean}\n     * @related Range.compare\n     *\n     **/\n    this.insideEnd = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n\n    /**\n     * Checks the row and column points with the row and column points of the calling range.\n     * @param {Number} row A row point to compare with\n     * @param {Number} column A column point to compare with\n     *\n     *\n     * @returns {Number} This method returns one of the following numbers:<br/>\n     * `0` if the two points are exactly equal <br/>\n     * `-1` if `p.row` is less then the calling range <br/>\n     * `1` if `p.row` is greater than the calling range <br/>\n     *  <br/>\n     * If the starting row of the calling range is equal to `p.row`, and: <br/>\n     * `p.column` is greater than or equal to the calling range's starting column, this returns `0`<br/>\n     * Otherwise, it returns -1<br/>\n     * <br/>\n     * If the ending row of the calling range is equal to `p.row`, and: <br/>\n     * `p.column` is less than or equal to the calling range's ending column, this returns `0` <br/>\n     * Otherwise, it returns 1\n     **/\n    this.compare = function(row, column) {\n        if (!this.isMultiLine()) {\n            if (row === this.start.row) {\n                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n            }\n        }\n\n        if (row < this.start.row)\n            return -1;\n\n        if (row > this.end.row)\n            return 1;\n\n        if (this.start.row === row)\n            return column >= this.start.column ? 0 : -1;\n\n        if (this.end.row === row)\n            return column <= this.end.column ? 0 : 1;\n\n        return 0;\n    };\n\n    /**\n     * Checks the row and column points with the row and column points of the calling range.\n     * @param {Number} row A row point to compare with\n     * @param {Number} column A column point to compare with\n     *\n     * @returns {Number} This method returns one of the following numbers:<br/>\n     * <br/>\n     * `0` if the two points are exactly equal<br/>\n     * `-1` if `p.row` is less then the calling range<br/>\n     * `1` if `p.row` is greater than the calling range, or if `isStart` is `true`.<br/>\n     * <br/>\n     * If the starting row of the calling range is equal to `p.row`, and:<br/>\n     * `p.column` is greater than or equal to the calling range's starting column, this returns `0`<br/>\n     * Otherwise, it returns -1<br/>\n     * <br/>\n     * If the ending row of the calling range is equal to `p.row`, and:<br/>\n     * `p.column` is less than or equal to the calling range's ending column, this returns `0`<br/>\n     * Otherwise, it returns 1\n     *\n     **/\n    this.compareStart = function(row, column) {\n        if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n\n    /**\n     * Checks the row and column points with the row and column points of the calling range.\n     * @param {Number} row A row point to compare with\n     * @param {Number} column A column point to compare with\n     *\n     *\n     * @returns {Number} This method returns one of the following numbers:<br/>\n     * `0` if the two points are exactly equal<br/>\n     * `-1` if `p.row` is less then the calling range<br/>\n     * `1` if `p.row` is greater than the calling range, or if `isEnd` is `true.<br/>\n     * <br/>\n     * If the starting row of the calling range is equal to `p.row`, and:<br/>\n     * `p.column` is greater than or equal to the calling range's starting column, this returns `0`<br/>\n     * Otherwise, it returns -1<br/>\n     *<br/>\n     * If the ending row of the calling range is equal to `p.row`, and:<br/>\n     * `p.column` is less than or equal to the calling range's ending column, this returns `0`<br/>\n     * Otherwise, it returns 1\n     */\n    this.compareEnd = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n\n    /**\n     * Checks the row and column points with the row and column points of the calling range.\n     * @param {Number} row A row point to compare with\n     * @param {Number} column A column point to compare with\n     *\n     *\n     * @returns {Number} This method returns one of the following numbers:<br/>\n     * * `1` if the ending row of the calling range is equal to `row`, and the ending column of the calling range is equal to `column`<br/>\n     * * `-1` if the starting row of the calling range is equal to `row`, and the starting column of the calling range is equal to `column`<br/>\n     * <br/>\n     * Otherwise, it returns the value after calling [[Range.compare `compare()`]].\n     *\n     **/\n    this.compareInside = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n\n    /**\n     * Returns the part of the current `Range` that occurs within the boundaries of `firstRow` and `lastRow` as a new `Range` object.\n     * @param {Number} firstRow The starting row\n     * @param {Number} lastRow The ending row\n     *\n     *\n     * @returns {Range}\n    **/\n    this.clipRows = function(firstRow, lastRow) {\n        if (this.end.row > lastRow)\n            var end = {row: lastRow + 1, column: 0};\n        else if (this.end.row < firstRow)\n            var end = {row: firstRow, column: 0};\n\n        if (this.start.row > lastRow)\n            var start = {row: lastRow + 1, column: 0};\n        else if (this.start.row < firstRow)\n            var start = {row: firstRow, column: 0};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n\n    /**\n     * Changes the row and column points for the calling range for both the starting and ending points.\n     * @param {Number} row A new row to extend to\n     * @param {Number} column A new column to extend to\n     *\n     *\n     * @returns {Range} The original range with the new row\n    **/\n    this.extend = function(row, column) {\n        var cmp = this.compare(row, column);\n\n        if (cmp == 0)\n            return this;\n        else if (cmp == -1)\n            var start = {row: row, column: column};\n        else\n            var end = {row: row, column: column};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n\n    this.isEmpty = function() {\n        return (this.start.row === this.end.row && this.start.column === this.end.column);\n    };\n\n    /**\n     *\n     * Returns `true` if the range spans across multiple lines.\n     * @returns {Boolean}\n    **/\n    this.isMultiLine = function() {\n        return (this.start.row !== this.end.row);\n    };\n\n    /**\n     *\n     * Returns a duplicate of the calling range.\n     * @returns {Range}\n    **/\n    this.clone = function() {\n        return Range.fromPoints(this.start, this.end);\n    };\n\n    /**\n     *\n     * Returns a range containing the starting and ending rows of the original range, but with a column value of `0`.\n     * @returns {Range}\n    **/\n    this.collapseRows = function() {\n        if (this.end.column == 0)\n            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0);\n        else\n            return new Range(this.start.row, 0, this.end.row, 0);\n    };\n\n    /**\n     * Given the current `Range`, this function converts those starting and ending points into screen positions, and then returns a new `Range` object.\n     * @param {EditSession} session The `EditSession` to retrieve coordinates from\n     *\n     *\n     * @returns {Range}\n    **/\n    this.toScreenRange = function(session) {\n        var screenPosStart = session.documentToScreenPosition(this.start);\n        var screenPosEnd = session.documentToScreenPosition(this.end);\n\n        return new Range(\n            screenPosStart.row, screenPosStart.column,\n            screenPosEnd.row, screenPosEnd.column\n        );\n    };\n    \n    \n    /* experimental */\n    this.moveBy = function(row, column) {\n        this.start.row += row;\n        this.start.column += column;\n        this.end.row += row;\n        this.end.column += column;\n    };\n\n}).call(Range.prototype);\n\n/**\n * Creates and returns a new `Range` based on the row and column of the given parameters.\n * @param {Range} start A starting point to use\n * @param {Range} end An ending point to use\n *\n * @returns {Range}\n**/\nRange.fromPoints = function(start, end) {\n    return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = comparePoints;\n\nRange.comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\n\n\nexports.Range = Range;\n});\n"
  },
  {
    "path": "lib/ace/range_list.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\nvar Range = require(\"./range\").Range;\nvar comparePoints = Range.comparePoints;\n\nvar RangeList = function() {\n    this.ranges = [];\n};\n\n(function() {\n    this.comparePoints = comparePoints;\n\n    this.pointIndex = function(pos, excludeEdges, startIndex) {\n        var list = this.ranges;\n\n        for (var i = startIndex || 0; i < list.length; i++) {\n            var range = list[i];\n            var cmpEnd = comparePoints(pos, range.end);\n            if (cmpEnd > 0)\n                continue;\n            var cmpStart = comparePoints(pos, range.start);\n            if (cmpEnd === 0)\n                return excludeEdges && cmpStart !== 0 ? -i-2 : i;\n            if (cmpStart > 0 || (cmpStart === 0 && !excludeEdges))\n                return i;\n\n            return -i-1;\n        }\n        return -i - 1;\n    };\n\n    this.add = function(range) {\n        var excludeEdges = !range.isEmpty();\n        var startIndex = this.pointIndex(range.start, excludeEdges);\n        if (startIndex < 0)\n            startIndex = -startIndex - 1;\n\n        var endIndex = this.pointIndex(range.end, excludeEdges, startIndex);\n\n        if (endIndex < 0)\n            endIndex = -endIndex - 1;\n        else\n            endIndex++;\n        return this.ranges.splice(startIndex, endIndex - startIndex, range);\n    };\n\n    this.addList = function(list) {\n        var removed = [];\n        for (var i = list.length; i--; ) {\n            removed.push.apply(removed, this.add(list[i]));\n        }\n        return removed;\n    };\n\n    this.substractPoint = function(pos) {\n        var i = this.pointIndex(pos);\n\n        if (i >= 0)\n            return this.ranges.splice(i, 1);\n    };\n\n    // merge overlapping ranges\n    this.merge = function() {\n        var removed = [];\n        var list = this.ranges;\n        \n        list = list.sort(function(a, b) {\n            return comparePoints(a.start, b.start);\n        });\n        \n        var next = list[0], range;\n        for (var i = 1; i < list.length; i++) {\n            range = next;\n            next = list[i];\n            var cmp = comparePoints(range.end, next.start);\n            if (cmp < 0)\n                continue;\n\n            if (cmp == 0 && !range.isEmpty() && !next.isEmpty())\n                continue;\n\n            if (comparePoints(range.end, next.end) < 0) {\n                range.end.row = next.end.row;\n                range.end.column = next.end.column;\n            }\n\n            list.splice(i, 1);\n            removed.push(next);\n            next = range;\n            i--;\n        }\n        \n        this.ranges = list;\n\n        return removed;\n    };\n\n    this.contains = function(row, column) {\n        return this.pointIndex({row: row, column: column}) >= 0;\n    };\n\n    this.containsPoint = function(pos) {\n        return this.pointIndex(pos) >= 0;\n    };\n\n    this.rangeAtPoint = function(pos) {\n        var i = this.pointIndex(pos);\n        if (i >= 0)\n            return this.ranges[i];\n    };\n\n\n    this.clipRows = function(startRow, endRow) {\n        var list = this.ranges;\n        if (list[0].start.row > endRow || list[list.length - 1].start.row < startRow)\n            return [];\n\n        var startIndex = this.pointIndex({row: startRow, column: 0});\n        if (startIndex < 0)\n            startIndex = -startIndex - 1;\n        var endIndex = this.pointIndex({row: endRow, column: 0}, startIndex);\n        if (endIndex < 0)\n            endIndex = -endIndex - 1;\n\n        var clipped = [];\n        for (var i = startIndex; i < endIndex; i++) {\n            clipped.push(list[i]);\n        }\n        return clipped;\n    };\n\n    this.removeAll = function() {\n        return this.ranges.splice(0, this.ranges.length);\n    };\n\n    this.attach = function(session) {\n        if (this.session)\n            this.detach();\n\n        this.session = session;\n        this.onChange = this.$onChange.bind(this);\n\n        this.session.on('change', this.onChange);\n    };\n\n    this.detach = function() {\n        if (!this.session)\n            return;\n        this.session.removeListener('change', this.onChange);\n        this.session = null;\n    };\n\n    this.$onChange = function(delta) {\n        if (delta.action == \"insert\"){\n            var start = delta.start;\n            var end = delta.end;\n        } else {\n            var end = delta.start;\n            var start = delta.end;\n        }\n        var startRow = start.row;\n        var endRow = end.row;\n        var lineDif = endRow - startRow;\n\n        var colDiff = -start.column + end.column;\n        var ranges = this.ranges;\n\n        for (var i = 0, n = ranges.length; i < n; i++) {\n            var r = ranges[i];\n            if (r.end.row < startRow)\n                continue;\n            if (r.start.row > startRow)\n                break;\n\n            if (r.start.row == startRow && r.start.column >= start.column ) {\n                if (r.start.column == start.column && this.$insertRight) {\n                    // do nothing\n                } else {\n                    r.start.column += colDiff;\n                    r.start.row += lineDif;\n                }\n            }\n            if (r.end.row == startRow && r.end.column >= start.column) {\n                if (r.end.column == start.column && this.$insertRight) {\n                    continue;\n                }\n                // special handling for the case when two ranges share an edge\n                if (r.end.column == start.column && colDiff > 0 && i < n - 1) {                \n                    if (r.end.column > r.start.column && r.end.column == ranges[i+1].start.column)\n                        r.end.column -= colDiff;\n                }\n                r.end.column += colDiff;\n                r.end.row += lineDif;\n            }\n        }\n\n        if (lineDif != 0 && i < n) {\n            for (; i < n; i++) {\n                var r = ranges[i];\n                r.start.row += lineDif;\n                r.end.row += lineDif;\n            }\n        }\n    };\n\n}).call(RangeList.prototype);\n\nexports.RangeList = RangeList;\n});\n"
  },
  {
    "path": "lib/ace/range_list_test.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\nif (typeof process !== \"undefined\") {\n    require(\"amd-loader\");\n}\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"./range\").Range;\nvar RangeList = require(\"./range_list\").RangeList;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar assert = require(\"./test/assertions\");\n\nfunction flatten(rangeList) {\n    var points = [];\n    rangeList.ranges.forEach(function(r) {\n        points.push(r.start.row, r.start.column, r.end.row, r.end.column);\n    });\n    return points;\n}\nfunction testRangeList(rangeList, points) {\n    assert.equal(\"\" + flatten(rangeList), \"\" + points);\n}\n\nmodule.exports = {\n\n    name: \"ACE range_list.js\",\n\n    \"test: rangeList pointIndex\": function() {\n        var rangeList = new RangeList();\n        rangeList.ranges = [\n            new Range(1,2,3,4),\n            new Range(4,2,5,4),\n            new Range(8,8,9,9)\n        ];\n\n        assert.equal(rangeList.pointIndex({row: 0, column: 1}), -1);\n        assert.equal(rangeList.pointIndex({row: 1, column: 2}), 0);\n        assert.equal(rangeList.pointIndex({row: 1, column: 3}), 0);\n        assert.equal(rangeList.pointIndex({row: 3, column: 4}), 0);\n        assert.equal(rangeList.pointIndex({row: 4, column: 1}), -2);\n        assert.equal(rangeList.pointIndex({row: 5, column: 1}), 1);\n        assert.equal(rangeList.pointIndex({row: 8, column: 9}), 2);\n        assert.equal(rangeList.pointIndex({row: 18, column: 9}), -4);\n    },\n    \n    \"test: rangeList pointIndex excludeEdges\": function() {\n        var rangeList = new RangeList();\n        rangeList.ranges = [\n            new Range(1,2,3,4),\n            new Range(4,2,5,4),\n            new Range(8,8,9,9),\n            new Range(10,10,10,10)\n        ];\n\n        assert.equal(rangeList.pointIndex({row: 0, column: 1}, true), -1);\n        assert.equal(rangeList.pointIndex({row: 1, column: 2}, true), -1);\n        assert.equal(rangeList.pointIndex({row: 1, column: 3}, true), 0);\n        assert.equal(rangeList.pointIndex({row: 3, column: 4}, true), -2);\n        assert.equal(rangeList.pointIndex({row: 4, column: 1}, true), -2);\n        assert.equal(rangeList.pointIndex({row: 5, column: 1}, true), 1);\n        assert.equal(rangeList.pointIndex({row: 8, column: 9}, true), 2);\n        assert.equal(rangeList.pointIndex({row: 10, column: 10}, true), 3);\n        assert.equal(rangeList.pointIndex({row: 18, column: 9}, true), -5);\n    },\n\n    \"test: rangeList add\": function() {\n        var rangeList = new RangeList();\n        rangeList.addList([\n            new Range(9,0,9,1),\n            new Range(1,2,3,4),\n            new Range(8,8,9,9),\n            new Range(4,2,5,4),\n            new Range(3,20,3,24),\n            new Range(6,6,7,7)\n        ]);\n        assert.equal(rangeList.ranges.length, 5);\n\n        rangeList.add(new Range(1,2,3,5));\n        assert.range(rangeList.ranges[0], 1,2,3,5);\n        assert.equal(rangeList.ranges.length, 5);\n\n        rangeList.add(new Range(7,7,7,7));\n        assert.range(rangeList.ranges[3], 7,7,7,7);\n        rangeList.add(new Range(7,8,7,8));\n        assert.range(rangeList.ranges[4], 7,8,7,8);\n    },\n\n    \"test: rangeList add empty\": function() {\n        var rangeList = new RangeList();\n        rangeList.addList([\n            new Range(7,10,7,10),\n            new Range(9,10,9,10),\n            new Range(8,10,8,10)\n        ]);\n        assert.equal(rangeList.ranges.length, 3);\n\n        rangeList.add(new Range(9,10,9,10));\n        testRangeList(rangeList, [7,10,7,10,8,10,8,10,9,10,9,10]);\n    },\n\n    \"test: rangeList merge\": function() {\n        var rangeList = new RangeList();\n        rangeList.addList([\n            new Range(1,2,3,4),\n            new Range(4,2,5,4),\n            new Range(6,6,7,7),\n            new Range(8,8,9,9)\n        ]);\n        var removed = [];\n\n        assert.equal(rangeList.ranges.length, 4);\n\n        rangeList.ranges[1].end.row = 7;\n        removed = rangeList.merge();\n        assert.equal(removed.length, 1);\n        assert.range(rangeList.ranges[1], 4,2,7,7);\n        assert.equal(rangeList.ranges.length, 3);\n\n        rangeList.ranges[0].end.row = 10;\n        removed = rangeList.merge();\n        assert.range(rangeList.ranges[0], 1,2,10,4);\n        assert.equal(removed.length, 2);\n        assert.equal(rangeList.ranges.length, 1);\n\n        rangeList.ranges.push(new Range(10,10,10,10));\n        rangeList.ranges.push(new Range(10,10,10,10));\n        removed = rangeList.merge();\n        assert.equal(rangeList.ranges.length, 2);\n    },\n\n    \"test: rangeList remove\": function() {\n        var rangeList = new RangeList();\n        var list = [\n            new Range(1,2,3,4),\n            new Range(4,2,5,4),\n            new Range(6,6,7,7),\n            new Range(8,8,9,9)\n        ];\n        rangeList.addList(list);\n        assert.equal(rangeList.ranges.length, 4);\n        rangeList.substractPoint({row: 1, column: 2});\n        assert.equal(rangeList.ranges.length, 3);\n        rangeList.substractPoint({row: 6, column: 7});\n        assert.equal(rangeList.ranges.length, 2);\n    }\n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main) {\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n}\n"
  },
  {
    "path": "lib/ace/range_test.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\nif (typeof process !== \"undefined\") {\n    require(\"amd-loader\");\n}\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"./range\").Range;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar assert = require(\"./test/assertions\");\n\nmodule.exports = {\n    \n    name: \"ACE range.js\",\n    \n    \"test: create range\": function() {\n        var range = new Range(1,2,3,4);\n\n        assert.equal(range.start.row, 1);\n        assert.equal(range.start.column, 2);\n        assert.equal(range.end.row, 3);\n        assert.equal(range.end.column, 4);\n    },\n\n    \"test: create from points\": function() {\n        var range = Range.fromPoints({row: 1, column: 2}, {row:3, column:4});\n\n        assert.equal(range.start.row, 1);\n        assert.equal(range.start.column, 2);\n        assert.equal(range.end.row, 3);\n        assert.equal(range.end.column, 4);\n    },\n\n    \"test: clip to rows\": function() {\n        assert.range(new Range(0, 20, 100, 30).clipRows(10, 30), 10, 0, 31, 0);\n        assert.range(new Range(0, 20, 30, 10).clipRows(10, 30), 10, 0, 30, 10);\n\n        var range = new Range(0, 20, 3, 10);\n        var range = range.clipRows(10, 30);\n\n        assert.ok(range.isEmpty());\n        assert.range(range, 10, 0, 10, 0);\n    },\n\n    \"test: isEmpty\": function() {\n        var range = new Range(1, 2, 1, 2);\n        assert.ok(range.isEmpty());\n\n        var range = new Range(1, 2, 1, 6);\n        assert.notOk(range.isEmpty());\n    },\n\n    \"test: is multi line\": function() {\n        var range = new Range(1, 2, 1, 6);\n        assert.notOk(range.isMultiLine());\n\n        var range = new Range(1, 2, 2, 6);\n        assert.ok(range.isMultiLine());\n    },\n\n    \"test: clone\": function() {\n        var range = new Range(1, 2, 3, 4);\n        var clone = range.clone();\n\n        assert.position(clone.start, 1, 2);\n        assert.position(clone.end, 3, 4);\n\n        clone.start.column = 20;\n        assert.position(range.start, 1, 2);\n\n        clone.end.column = 20;\n        assert.position(range.end, 3, 4);\n    },\n\n    \"test: contains for multi line ranges\": function() {\n        var range = new Range(1, 10, 5, 20);\n\n        assert.ok(range.contains(1, 10));\n        assert.ok(range.contains(2, 0));\n        assert.ok(range.contains(3, 100));\n        assert.ok(range.contains(5, 19));\n        assert.ok(range.contains(5, 20));\n\n        assert.notOk(range.contains(1, 9));\n        assert.notOk(range.contains(0, 0));\n        assert.notOk(range.contains(5, 21));\n    },\n\n    \"test: contains for single line ranges\": function() {\n        var range = new Range(1, 10, 1, 20);\n\n        assert.ok(range.contains(1, 10));\n        assert.ok(range.contains(1, 15));\n        assert.ok(range.contains(1, 20));\n\n        assert.notOk(range.contains(0, 9));\n        assert.notOk(range.contains(2, 9));\n        assert.notOk(range.contains(1, 9));\n        assert.notOk(range.contains(1, 21));\n    },\n\n    \"test: extend range\": function() {\n        var range = new Range(2, 10, 2, 30);\n\n        var range = range.extend(2, 5);\n        assert.range(range, 2, 5, 2, 30);\n\n        var range = range.extend(2, 35);\n        assert.range(range, 2, 5, 2, 35);\n\n        var range = range.extend(2, 15);\n        assert.range(range, 2, 5, 2, 35);\n\n        var range = range.extend(1, 4);\n        assert.range(range, 1, 4, 2, 35);\n\n        var range = range.extend(6, 10);\n        assert.range(range, 1, 4, 6, 10);\n    },\n\n    \"test: collapse rows\" : function() {\n        var range = new Range(0, 2, 1, 2);\n        assert.range(range.collapseRows(), 0, 0, 1, 0);\n\n        var range = new Range(2, 2, 3, 1);\n        assert.range(range.collapseRows(), 2, 0, 3, 0);\n\n        var range = new Range(2, 2, 3, 0);\n        assert.range(range.collapseRows(), 2, 0, 2, 0);\n\n        var range = new Range(2, 0, 2, 0);\n        assert.range(range.collapseRows(), 2, 0, 2, 0);\n    },\n    \n    \"test: to screen range\" : function() {\n        var session = new EditSession([\n            \"juhu\",\n            \"12\\t\\t34\",\n            \"ぁぁa\",\n            \"\\t\\t34\"\n        ]);\n        \n        var range = new Range(0, 0, 0, 3);\n        assert.range(range.toScreenRange(session), 0, 0, 0, 3);\n        \n        var range = new Range(1, 1, 1, 3);\n        assert.range(range.toScreenRange(session), 1, 1, 1, 4);\n        \n        var range = new Range(2, 1, 2, 2);\n        assert.range(range.toScreenRange(session), 2, 2, 2, 4);\n\n        var range = new Range(3, 0, 3, 4);\n        assert.range(range.toScreenRange(session), 3, 0, 3, 10);\n    }\n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main) {\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n}\n"
  },
  {
    "path": "lib/ace/renderloop.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar event = require(\"./lib/event\");\n\n/** \n *\n *\n * Batches changes (that force something to be redrawn) in the background.\n * @class RenderLoop\n **/\n\n\nvar RenderLoop = function(onRender, win) {\n    this.onRender = onRender;\n    this.pending = false;\n    this.changes = 0;\n    this.window = win || window;\n};\n\n(function() {\n\n\n    this.schedule = function(change) {\n        //this.onRender(change);\n        //return;\n        this.changes = this.changes | change;\n        if (!this.pending && this.changes) {\n            this.pending = true;\n            var _self = this;\n            event.nextFrame(function() {\n                _self.pending = false;\n                var changes;\n                while (changes = _self.changes) {\n                    _self.changes = 0;\n                    _self.onRender(changes);\n                }\n            }, this.window);\n        }\n    };\n\n}).call(RenderLoop.prototype);\n\nexports.RenderLoop = RenderLoop;\n});\n"
  },
  {
    "path": "lib/ace/requirejs/text.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*\n * Extremely simplified version of the requireJS text plugin\n */\n \n(function() {\n    \nvar globalRequire = typeof require != \"undefined\" && require;\nif (typeof define !== \"function\") // running in webpack\n    return module.exports = function(source) { return source; };\n\ndefine(function (require, exports, module) {\n    \"use strict\";\n    if (globalRequire && globalRequire.nodeRequire) {\n        module.exports = globalRequire.nodeRequire(require.toUrl(\"./text_build\"));\n    } else {\n        exports.load = function(name, req, onLoad, config) {    \n            require(\"../lib/net\").get(req.toUrl(name), onLoad);\n        };\n    }\n});\n\n})();\n"
  },
  {
    "path": "lib/ace/requirejs/text_build.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*\n * used by r.js during build\n */\n \n\"use strict\";\nexports.buildMap = Object.create(null);\nexports.load = function(name, req, onLoad, config) {\n    var buildMap = exports.buildMap;\n    buildMap[name] = require('fs').readFileSync(req.toUrl(name), 'utf8');\n    onLoad(buildMap[name]);\n};\nexports.write = function(pluginName, moduleName, write, config) {\n    if (exports.buildMap[moduleName]) {\n        var content = exports.jsEscape(exports.buildMap[moduleName]);\n        write.asModule(pluginName + \"!\" + moduleName,\n           \"define(function () { return '\" +\n               content +\n           \"';});\\n\");\n    }\n};\nexports.jsEscape = function(content) {\n    return content.replace(/(['\\\\])/g, '\\\\$1')\n        .replace(/[\\f]/g, \"\\\\f\")\n        .replace(/[\\b]/g, \"\\\\b\")\n        .replace(/[\\n]/g, \"\\\\n\")\n        .replace(/[\\t]/g, \"\\\\t\")\n        .replace(/[\\r]/g, \"\\\\r\")\n        .replace(/[\\u2028]/g, \"\\\\u2028\")\n        .replace(/[\\u2029]/g, \"\\\\u2029\");\n};\n"
  },
  {
    "path": "lib/ace/scrollbar.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n// on ie maximal element height is smaller than what we get from 4-5K line document\n// so scrollbar doesn't work, as a workaround we do not set height higher than MAX_SCROLL_H\n// and rescale scrolltop\nvar MAX_SCROLL_H = 0x8000;\n\n/**\n * An abstract class representing a native scrollbar control.\n * @class ScrollBar\n **/\n\n/**\n * Creates a new `ScrollBar`. `parent` is the owner of the scroll bar.\n * @param {DOMElement} parent A DOM element \n *\n * @constructor\n **/\nvar ScrollBar = function(parent) {\n    this.element = dom.createElement(\"div\");\n    this.element.className = \"ace_scrollbar ace_scrollbar\" + this.classSuffix;\n\n    this.inner = dom.createElement(\"div\");\n    this.inner.className = \"ace_scrollbar-inner\";\n    this.element.appendChild(this.inner);\n\n    parent.appendChild(this.element);\n\n    this.setVisible(false);\n    this.skipEvent = false;\n\n    event.addListener(this.element, \"scroll\", this.onScroll.bind(this));\n    event.addListener(this.element, \"mousedown\", event.preventDefault);\n};\n\n(function() {\n    oop.implement(this, EventEmitter);\n\n    this.setVisible = function(isVisible) {\n        this.element.style.display = isVisible ? \"\" : \"none\";\n        this.isVisible = isVisible;\n        this.coeff = 1;\n    };\n}).call(ScrollBar.prototype);\n\n/**\n * Represents a vertical scroll bar.\n * @class VScrollBar\n **/\n\n/**\n * Creates a new `VScrollBar`. `parent` is the owner of the scroll bar.\n * @param {DOMElement} parent A DOM element\n * @param {Object} renderer An editor renderer\n *\n * @constructor\n **/\nvar VScrollBar = function(parent, renderer) {\n    ScrollBar.call(this, parent);\n    this.scrollTop = 0;\n    this.scrollHeight = 0;\n\n    // in OSX lion the scrollbars appear to have no width. In this case resize the\n    // element to show the scrollbar but still pretend that the scrollbar has a width\n    // of 0px\n    // in Firefox 6+ scrollbar is hidden if element has the same width as scrollbar\n    // make element a little bit wider to retain scrollbar when page is zoomed \n    renderer.$scrollbarWidth = \n    this.width = dom.scrollbarWidth(parent.ownerDocument);\n    this.inner.style.width =\n    this.element.style.width = (this.width || 15) + 5 + \"px\";\n    this.$minWidth = 0;\n};\n\noop.inherits(VScrollBar, ScrollBar);\n\n(function() {\n\n    this.classSuffix = '-v';\n\n    /**\n     * Emitted when the scroll bar, well, scrolls.\n     * @event scroll\n     * @param {Object} e Contains one property, `\"data\"`, which indicates the current scroll top position\n     **/\n    this.onScroll = function() {\n        if (!this.skipEvent) {\n            this.scrollTop = this.element.scrollTop;\n            if (this.coeff != 1) {\n                var h = this.element.clientHeight / this.scrollHeight;\n                this.scrollTop = this.scrollTop * (1 - h) / (this.coeff - h);\n            }\n            this._emit(\"scroll\", {data: this.scrollTop});\n        }\n        this.skipEvent = false;\n    };\n\n    /**\n     * Returns the width of the scroll bar.\n     * @returns {Number}\n     **/\n    this.getWidth = function() {\n        return Math.max(this.isVisible ? this.width : 0, this.$minWidth || 0);\n    };\n\n    /**\n     * Sets the height of the scroll bar, in pixels.\n     * @param {Number} height The new height\n     **/\n    this.setHeight = function(height) {\n        this.element.style.height = height + \"px\";\n    };\n\n    /**\n     * Sets the inner height of the scroll bar, in pixels.\n     * @param {Number} height The new inner height\n     * @deprecated Use setScrollHeight instead\n     **/\n    this.setInnerHeight = \n    /**\n     * Sets the scroll height of the scroll bar, in pixels.\n     * @param {Number} height The new scroll height\n     **/\n    this.setScrollHeight = function(height) {\n        this.scrollHeight = height;\n        if (height > MAX_SCROLL_H) {\n            this.coeff = MAX_SCROLL_H / height;\n            height = MAX_SCROLL_H;\n        } else if (this.coeff != 1) {\n            this.coeff = 1;\n        }\n        this.inner.style.height = height + \"px\";\n    };\n\n    /**\n     * Sets the scroll top of the scroll bar.\n     * @param {Number} scrollTop The new scroll top\n     **/\n    this.setScrollTop = function(scrollTop) {\n        // on chrome 17+ for small zoom levels after calling this function\n        // this.element.scrollTop != scrollTop which makes page to scroll up.\n        if (this.scrollTop != scrollTop) {\n            this.skipEvent = true;\n            this.scrollTop = scrollTop;\n            this.element.scrollTop = scrollTop * this.coeff;\n        }\n    };\n\n}).call(VScrollBar.prototype);\n\n/**\n * Represents a horisontal scroll bar.\n * @class HScrollBar\n **/\n\n/**\n * Creates a new `HScrollBar`. `parent` is the owner of the scroll bar.\n * @param {DOMElement} parent A DOM element\n * @param {Object} renderer An editor renderer\n *\n * @constructor\n **/\nvar HScrollBar = function(parent, renderer) {\n    ScrollBar.call(this, parent);\n    this.scrollLeft = 0;\n\n    // in OSX lion the scrollbars appear to have no width. In this case resize the\n    // element to show the scrollbar but still pretend that the scrollbar has a width\n    // of 0px\n    // in Firefox 6+ scrollbar is hidden if element has the same width as scrollbar\n    // make element a little bit wider to retain scrollbar when page is zoomed \n    this.height = renderer.$scrollbarWidth;\n    this.inner.style.height =\n    this.element.style.height = (this.height || 15) + 5 + \"px\";\n};\n\noop.inherits(HScrollBar, ScrollBar);\n\n(function() {\n\n    this.classSuffix = '-h';\n\n    /**\n     * Emitted when the scroll bar, well, scrolls.\n     * @event scroll\n     * @param {Object} e Contains one property, `\"data\"`, which indicates the current scroll left position\n     **/\n    this.onScroll = function() {\n        if (!this.skipEvent) {\n            this.scrollLeft = this.element.scrollLeft;\n            this._emit(\"scroll\", {data: this.scrollLeft});\n        }\n        this.skipEvent = false;\n    };\n\n    /**\n     * Returns the height of the scroll bar.\n     * @returns {Number}\n     **/\n    this.getHeight = function() {\n        return this.isVisible ? this.height : 0;\n    };\n\n    /**\n     * Sets the width of the scroll bar, in pixels.\n     * @param {Number} width The new width\n     **/\n    this.setWidth = function(width) {\n        this.element.style.width = width + \"px\";\n    };\n\n    /**\n     * Sets the inner width of the scroll bar, in pixels.\n     * @param {Number} width The new inner width\n     * @deprecated Use setScrollWidth instead\n     **/\n    this.setInnerWidth = function(width) {\n        this.inner.style.width = width + \"px\";\n    };\n\n    /**\n     * Sets the scroll width of the scroll bar, in pixels.\n     * @param {Number} width The new scroll width\n     **/\n    this.setScrollWidth = function(width) {\n        this.inner.style.width = width + \"px\";\n    };\n\n    /**\n     * Sets the scroll left of the scroll bar.\n     * @param {Number} scrollTop The new scroll left\n     **/\n    this.setScrollLeft = function(scrollLeft) {\n        // on chrome 17+ for small zoom levels after calling this function\n        // this.element.scrollTop != scrollTop which makes page to scroll up.\n        if (this.scrollLeft != scrollLeft) {\n            this.skipEvent = true;\n            this.scrollLeft = this.element.scrollLeft = scrollLeft;\n        }\n    };\n\n}).call(HScrollBar.prototype);\n\n\nexports.ScrollBar = VScrollBar; // backward compatibility\nexports.ScrollBarV = VScrollBar; // backward compatibility\nexports.ScrollBarH = HScrollBar; // backward compatibility\n\nexports.VScrollBar = VScrollBar;\nexports.HScrollBar = HScrollBar;\n});\n"
  },
  {
    "path": "lib/ace/search.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar lang = require(\"./lib/lang\");\nvar oop = require(\"./lib/oop\");\nvar Range = require(\"./range\").Range;\n\n/**\n * @class Search\n *\n * A class designed to handle all sorts of text searches within a [[Document `Document`]].\n *\n **/\n\n/**\n * \n *\n * Creates a new `Search` object. The following search options are available:\n *\n * - `needle`: The string or regular expression you're looking for\n * - `backwards`: Whether to search backwards from where cursor currently is. Defaults to `false`.\n * - `wrap`: Whether to wrap the search back to the beginning when it hits the end. Defaults to `false`.\n * - `caseSensitive`: Whether the search ought to be case-sensitive. Defaults to `false`.\n * - `wholeWord`: Whether the search matches only on whole words. Defaults to `false`.\n * - `range`: The [[Range]] to search within. Set this to `null` for the whole document\n * - `regExp`: Whether the search is a regular expression or not. Defaults to `false`.\n * - `start`: The starting [[Range]] or cursor position to begin the search\n * - `skipCurrent`: Whether or not to include the current line in the search. Default to `false`.\n * \n * @constructor\n **/\n\nvar Search = function() {\n    this.$options = {};\n};\n\n(function() {\n    /**\n     * Sets the search options via the `options` parameter.\n     * @param {Object} options An object containing all the new search properties\n     *\n     * \n     * @returns {Search}\n     * @chainable\n    **/\n    this.set = function(options) {\n        oop.mixin(this.$options, options);\n        return this;\n    };\n\n    /**\n     * [Returns an object containing all the search options.]{: #Search.getOptions}\n     * @returns {Object}\n    **/\n    this.getOptions = function() {\n        return lang.copyObject(this.$options);\n    };\n    \n    /**\n     * Sets the search options via the `options` parameter.\n     * @param {Object} An object containing all the search propertie\n     * @related Search.set\n    **/\n    this.setOptions = function(options) {\n        this.$options = options;\n    };\n    /**\n     * Searches for `options.needle`. If found, this method returns the [[Range `Range`]] where the text first occurs. If `options.backwards` is `true`, the search goes backwards in the session.\n     * @param {EditSession} session The session to search with\n     *\n     * \n     * @returns {Range}\n    **/\n    this.find = function(session) {\n        var options = this.$options;\n        var iterator = this.$matchIterator(session, options);\n        if (!iterator)\n            return false;\n\n        var firstRange = null;\n        iterator.forEach(function(sr, sc, er, ec) {\n            firstRange = new Range(sr, sc, er, ec);\n            if (sc == ec && options.start && options.start.start\n                && options.skipCurrent != false && firstRange.isEqual(options.start)\n            ) {\n                firstRange = null;\n                return false;\n            }\n            \n            return true;\n        });\n\n        return firstRange;\n    };\n\n    /**\n     * Searches for all occurrances `options.needle`. If found, this method returns an array of [[Range `Range`s]] where the text first occurs. If `options.backwards` is `true`, the search goes backwards in the session.\n     * @param {EditSession} session The session to search with\n     *\n     * \n     * @returns {[Range]}\n    **/\n    this.findAll = function(session) {\n        var options = this.$options;\n        if (!options.needle)\n            return [];\n        this.$assembleRegExp(options);\n\n        var range = options.range;\n        var lines = range\n            ? session.getLines(range.start.row, range.end.row)\n            : session.doc.getAllLines();\n\n        var ranges = [];\n        var re = options.re;\n        if (options.$isMultiLine) {\n            var len = re.length;\n            var maxRow = lines.length - len;\n            var prevRange;\n            outer: for (var row = re.offset || 0; row <= maxRow; row++) {\n                for (var j = 0; j < len; j++)\n                    if (lines[row + j].search(re[j]) == -1)\n                        continue outer;\n                \n                var startLine = lines[row];\n                var line = lines[row + len - 1];\n                var startIndex = startLine.length - startLine.match(re[0])[0].length;\n                var endIndex = line.match(re[len - 1])[0].length;\n                \n                if (prevRange && prevRange.end.row === row &&\n                    prevRange.end.column > startIndex\n                ) {\n                    continue;\n                }\n                ranges.push(prevRange = new Range(\n                    row, startIndex, row + len - 1, endIndex\n                ));\n                if (len > 2)\n                    row = row + len - 2;\n            }\n        } else {\n            for (var i = 0; i < lines.length; i++) {\n                var matches = lang.getMatchOffsets(lines[i], re);\n                for (var j = 0; j < matches.length; j++) {\n                    var match = matches[j];\n                    ranges.push(new Range(i, match.offset, i, match.offset + match.length));\n                }\n            }\n        }\n\n        if (range) {\n            var startColumn = range.start.column;\n            var endColumn = range.start.column;\n            var i = 0, j = ranges.length - 1;\n            while (i < j && ranges[i].start.column < startColumn && ranges[i].start.row == range.start.row)\n                i++;\n\n            while (i < j && ranges[j].end.column > endColumn && ranges[j].end.row == range.end.row)\n                j--;\n            \n            ranges = ranges.slice(i, j + 1);\n            for (i = 0, j = ranges.length; i < j; i++) {\n                ranges[i].start.row += range.start.row;\n                ranges[i].end.row += range.start.row;\n            }\n        }\n\n        return ranges;\n    };\n\n    /**\n     * Searches for `options.needle` in `input`, and, if found, replaces it with `replacement`.\n     * @param {String} input The text to search in\n     * @param {String} replacement The replacing text\n     * + (String): If `options.regExp` is `true`, this function returns `input` with the replacement already made. Otherwise, this function just returns `replacement`.<br/>\n     * If `options.needle` was not found, this function returns `null`.\n     *\n     * \n     * @returns {String}\n    **/\n    this.replace = function(input, replacement) {\n        var options = this.$options;\n\n        var re = this.$assembleRegExp(options);\n        if (options.$isMultiLine)\n            return replacement;\n\n        if (!re)\n            return;\n\n        var match = re.exec(input);\n        if (!match || match[0].length != input.length)\n            return null;\n        \n        replacement = input.replace(re, replacement);\n        if (options.preserveCase) {\n            replacement = replacement.split(\"\");\n            for (var i = Math.min(input.length, input.length); i--; ) {\n                var ch = input[i];\n                if (ch && ch.toLowerCase() != ch)\n                    replacement[i] = replacement[i].toUpperCase();\n                else\n                    replacement[i] = replacement[i].toLowerCase();\n            }\n            replacement = replacement.join(\"\");\n        }\n        \n        return replacement;\n    };\n\n    this.$assembleRegExp = function(options, $disableFakeMultiline) {\n        if (options.needle instanceof RegExp)\n            return options.re = options.needle;\n\n        var needle = options.needle;\n\n        if (!options.needle)\n            return options.re = false;\n\n        if (!options.regExp)\n            needle = lang.escapeRegExp(needle);\n\n        if (options.wholeWord)\n            needle = addWordBoundary(needle, options);\n\n        var modifier = options.caseSensitive ? \"gm\" : \"gmi\";\n\n        options.$isMultiLine = !$disableFakeMultiline && /[\\n\\r]/.test(needle);\n        if (options.$isMultiLine)\n            return options.re = this.$assembleMultilineRegExp(needle, modifier);\n\n        try {\n            var re = new RegExp(needle, modifier);\n        } catch(e) {\n            re = false;\n        }\n        return options.re = re;\n    };\n\n    this.$assembleMultilineRegExp = function(needle, modifier) {\n        var parts = needle.replace(/\\r\\n|\\r|\\n/g, \"$\\n^\").split(\"\\n\");\n        var re = [];\n        for (var i = 0; i < parts.length; i++) try {\n            re.push(new RegExp(parts[i], modifier));\n        } catch(e) {\n            return false;\n        }\n        return re;\n    };\n\n    this.$matchIterator = function(session, options) {\n        var re = this.$assembleRegExp(options);\n        if (!re)\n            return false;\n        var backwards = options.backwards == true;\n        var skipCurrent = options.skipCurrent != false;\n\n        var range = options.range;\n        var start = options.start;\n        if (!start)\n            start = range ? range[backwards ? \"end\" : \"start\"] : session.selection.getRange();\n         \n        if (start.start)\n            start = start[skipCurrent != backwards ? \"end\" : \"start\"];\n\n        var firstRow = range ? range.start.row : 0;\n        var lastRow = range ? range.end.row : session.getLength() - 1;\n        \n        if (backwards) {\n            var forEach = function(callback) {\n                var row = start.row;\n                if (forEachInLine(row, start.column, callback))\n                    return;\n                for (row--; row >= firstRow; row--)\n                    if (forEachInLine(row, Number.MAX_VALUE, callback))\n                        return;\n                if (options.wrap == false)\n                    return;\n                for (row = lastRow, firstRow = start.row; row >= firstRow; row--)\n                    if (forEachInLine(row, Number.MAX_VALUE, callback))\n                        return;\n            };\n        }\n        else {\n            var forEach = function(callback) {\n                var row = start.row;\n                if (forEachInLine(row, start.column, callback))\n                    return;\n                for (row = row + 1; row <= lastRow; row++)\n                    if (forEachInLine(row, 0, callback))\n                        return;\n                if (options.wrap == false)\n                    return;\n                for (row = firstRow, lastRow = start.row; row <= lastRow; row++)\n                    if (forEachInLine(row, 0, callback))\n                        return;\n            };\n        }\n        \n        if (options.$isMultiLine) {\n            var len = re.length;\n            var forEachInLine = function(row, offset, callback) {\n                var startRow = backwards ? row - len + 1 : row;\n                if (startRow < 0) return;\n                var line = session.getLine(startRow);\n                var startIndex = line.search(re[0]);\n                if (!backwards && startIndex < offset || startIndex === -1) return;\n                for (var i = 1; i < len; i++) {\n                    line = session.getLine(startRow + i);\n                    if (line.search(re[i]) == -1)\n                        return;\n                }\n                var endIndex = line.match(re[len - 1])[0].length;\n                if (backwards && endIndex > offset) return;\n                if (callback(startRow, startIndex, startRow + len - 1, endIndex))\n                    return true;\n            };\n        }\n        else if (backwards) {\n            var forEachInLine = function(row, endIndex, callback) {\n                var line = session.getLine(row);\n                var matches = [];\n                var m, last = 0;\n                re.lastIndex = 0;\n                while((m = re.exec(line))) {\n                    var length = m[0].length;\n                    last = m.index;\n                    if (!length) {\n                        if (last >= line.length) break;\n                        re.lastIndex = last += 1;\n                    }\n                    if (m.index + length > endIndex)\n                        break;\n                    matches.push(m.index, length);\n                }\n                for (var i = matches.length - 1; i >= 0; i -= 2) {\n                    var column = matches[i - 1];\n                    var length = matches[i];\n                    if (callback(row, column, row, column + length))\n                        return true;\n                }\n            };\n        }\n        else {\n            var forEachInLine = function(row, startIndex, callback) {\n                var line = session.getLine(row);\n                var last;\n                var m;\n                re.lastIndex = startIndex;\n                while((m = re.exec(line))) {\n                    var length = m[0].length;\n                    last = m.index;\n                    if (callback(row, last, row,last + length))\n                        return true;\n                    if (!length) {\n                        re.lastIndex = last += 1;\n                        if (last >= line.length) return false;\n                    }\n                }\n            };\n        }\n        return {forEach: forEach};\n    };\n\n}).call(Search.prototype);\n\nfunction addWordBoundary(needle, options) {\n    function wordBoundary(c) {\n        if (/\\w/.test(c) || options.regExp) return \"\\\\b\";\n        return \"\";\n    }\n    return wordBoundary(needle[0]) + needle\n        + wordBoundary(needle[needle.length - 1]);\n}\n\nexports.Search = Search;\n});\n"
  },
  {
    "path": "lib/ace/search_highlight.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar lang = require(\"./lib/lang\");\nvar oop = require(\"./lib/oop\");\nvar Range = require(\"./range\").Range;\n\nvar SearchHighlight = function(regExp, clazz, type) {\n    this.setRegexp(regExp);\n    this.clazz = clazz;\n    this.type = type || \"text\";\n};\n\n(function() {\n    // needed to prevent long lines from freezing the browser\n    this.MAX_RANGES = 500;\n    \n    this.setRegexp = function(regExp) {\n        if (this.regExp+\"\" == regExp+\"\")\n            return;\n        this.regExp = regExp;\n        this.cache = [];\n    };\n\n    this.update = function(html, markerLayer, session, config) {\n        if (!this.regExp)\n            return;\n        var start = config.firstRow, end = config.lastRow;\n\n        for (var i = start; i <= end; i++) {\n            var ranges = this.cache[i];\n            if (ranges == null) {\n                ranges = lang.getMatchOffsets(session.getLine(i), this.regExp);\n                if (ranges.length > this.MAX_RANGES)\n                    ranges = ranges.slice(0, this.MAX_RANGES);\n                ranges = ranges.map(function(match) {\n                    return new Range(i, match.offset, i, match.offset + match.length);\n                });\n                this.cache[i] = ranges.length ? ranges : \"\";\n            }\n\n            for (var j = ranges.length; j --; ) {\n                markerLayer.drawSingleLineMarker(\n                    html, ranges[j].toScreenRange(session), this.clazz, config);\n            }\n        }\n    };\n\n}).call(SearchHighlight.prototype);\n\nexports.SearchHighlight = SearchHighlight;\n});\n"
  },
  {
    "path": "lib/ace/search_test.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\nif (typeof process !== \"undefined\") {\n    require(\"amd-loader\");\n}\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar EditSession = require(\"./edit_session\").EditSession;\nvar MockRenderer = require(\"./test/mockrenderer\").MockRenderer;\nvar Editor = require(\"./editor\").Editor;\nvar Search = require(\"./search\").Search;\nvar assert = require(\"./test/assertions\");\n\nmodule.exports = {\n    \"test: configure the search object\" : function() {\n        var search = new Search();\n        search.set({\n            needle: \"juhu\"\n        });\n    },\n\n    \"test: find simple text in document\" : function() {\n        var session = new EditSession([\"juhu kinners 123\", \"456\"]);\n        var search = new Search().set({\n            needle: \"kinners\"\n        });\n\n        var range = search.find(session);\n        assert.position(range.start, 0, 5);\n        assert.position(range.end, 0, 12);\n    },\n\n    \"test: find simple text in next line\" : function() {\n        var session = new EditSession([\"abc\", \"juhu kinners 123\", \"456\"]);\n        var search = new Search().set({\n            needle: \"kinners\"\n        });\n\n        var range = search.find(session);\n        assert.position(range.start, 1, 5);\n        assert.position(range.end, 1, 12);\n    },\n\n    \"test: find text starting at cursor position\" : function() {\n        var session = new EditSession([\"juhu kinners\", \"juhu kinners 123\"]);\n        session.getSelection().moveCursorTo(0, 6);\n        var search = new Search().set({\n            needle: \"kinners\"\n        });\n\n        var range = search.find(session);\n        assert.position(range.start, 1, 5);\n        assert.position(range.end, 1, 12);\n    },\n\n    \"test: wrap search is on by default\" : function() {\n        var session = new EditSession([\"abc\", \"juhu kinners 123\", \"456\"]);\n        session.getSelection().moveCursorTo(2, 1);\n\n        var search = new Search().set({\n            needle: \"kinners\"\n        });\n\n        assert.notEqual(search.find(session), null);\n    },\n\n    \"test: wrap search should wrap at file end\" : function() {\n        var session = new EditSession([\"abc\", \"juhu kinners 123\", \"456\"]);\n        session.getSelection().moveCursorTo(2, 1);\n\n        var search = new Search().set({\n            needle: \"kinners\",\n            wrap: true\n        });\n\n        var range = search.find(session);\n        assert.position(range.start, 1, 5);\n        assert.position(range.end, 1, 12);\n    },\n\n    \"test: wrap search should find needle even if it starts inside it\" : function() {\n        var session = new EditSession([\"abc\", \"juhu kinners 123\", \"456\"]);\n        session.getSelection().moveCursorTo(6, 1);\n\n        var search = new Search().set({\n            needle: \"kinners\",\n            wrap: true\n        });\n\n        var range = search.find(session);\n        assert.position(range.start, 1, 5);\n        assert.position(range.end, 1, 12);\n    },\n\n    \"test: wrap search with no match should return 'null'\": function() {\n        var session = new EditSession([\"abc\", \"juhu kinners 123\", \"456\"]);\n        session.getSelection().moveCursorTo(2, 1);\n\n        var search = new Search().set({\n            needle: \"xyz\",\n            wrap: true\n        });\n\n        assert.equal(search.find(session), null);\n    },\n\n    \"test: case sensitive is by default off\": function() {\n        var session = new EditSession([\"abc\", \"juhu kinners 123\", \"456\"]);\n\n        var search = new Search().set({\n            needle: \"JUHU\"\n        });\n\n        assert.range(search.find(session), 1, 0, 1, 4);\n    },\n\n    \"test: case sensitive search\": function() {\n        var session = new EditSession([\"abc\", \"juhu kinners 123\", \"456\"]);\n\n        var search = new Search().set({\n            needle: \"KINNERS\",\n            caseSensitive: true\n        });\n\n        var range = search.find(session);\n        assert.equal(range, null);\n    },\n\n    \"test: whole word search should not match inside of words\": function() {\n        var session = new EditSession([\"juhukinners\", \"juhu kinners 123\", \"456\"]);\n\n        var search = new Search().set({\n            needle: \"kinners\",\n            wholeWord: true\n        });\n\n        var range = search.find(session);\n        assert.position(range.start, 1, 5);\n        assert.position(range.end, 1, 12);\n    },\n\n    \"test: find backwards\": function() {\n        var session = new EditSession([\"juhu juhu juhu juhu\"]);\n        session.getSelection().moveCursorTo(0, 10);\n        var search = new Search().set({\n            needle: \"juhu\",\n            backwards: true\n        });\n\n        var range = search.find(session);\n        assert.position(range.start, 0, 5);\n        assert.position(range.end, 0, 9);\n    },\n\n    \"test: find in selection\": function() {\n        var session = new EditSession([\"juhu\", \"juhu\", \"juhu\", \"juhu\"]);\n        session.getSelection().setSelectionAnchor(1, 0);\n        session.getSelection().selectTo(3, 5);\n\n        var search = new Search().set({\n            needle: \"juhu\",\n            wrap: true,\n            range: session.getSelection().getRange()\n        });\n\n        var range = search.find(session);\n        assert.position(range.start, 1, 0);\n        assert.position(range.end, 1, 4);\n\n        search = new Search().set({\n            needle: \"juhu\",\n            wrap: true,\n            range: session.getSelection().getRange()\n        });\n\n        session.getSelection().setSelectionAnchor(0, 2);\n        session.getSelection().selectTo(3, 2);\n\n        var range = search.find(session);\n        assert.position(range.start, 1, 0);\n        assert.position(range.end, 1, 4);\n    },\n\n    \"test: find backwards in selection\": function() {\n        var session = new EditSession([\"juhu\", \"juhu\", \"juhu\", \"juhu\"]);\n\n        session.getSelection().setSelectionAnchor(0, 2);\n        session.getSelection().selectTo(3, 2);\n\n        var search = new Search().set({\n            needle: \"juhu\",\n            wrap: true,\n            backwards: true,\n            range: session.getSelection().getRange()\n        });\n\n        var range = search.find(session);\n        assert.position(range.start, 2, 0);\n        assert.position(range.end, 2, 4);\n\n        search = new Search().set({\n            needle: \"juhu\",\n            wrap: true,\n            range: session.getSelection().getRange()\n        });\n\n        session.getSelection().setSelectionAnchor(0, 2);\n        session.getSelection().selectTo(1, 2);\n\n        var range = search.find(session);\n        assert.position(range.start, 1, 0);\n        assert.position(range.end, 1, 4);\n    },\n\n    \"test: edge case - match directly before the cursor\" : function() {\n        var session = new EditSession([\"123\", \"123\", \"juhu\"]);\n\n        var search = new Search().set({\n            needle: \"juhu\",\n            wrap: true\n        });\n\n        session.getSelection().moveCursorTo(2, 5);\n\n        var range = search.find(session);\n        assert.position(range.start, 2, 0);\n        assert.position(range.end, 2, 4);\n    },\n\n    \"test: edge case - match backwards directly after the cursor\" : function() {\n        var session = new EditSession([\"123\", \"123\", \"juhu\"]);\n\n        var search = new Search().set({\n            needle: \"juhu\",\n            wrap: true,\n            backwards: true\n        });\n\n        session.getSelection().moveCursorTo(2, 0);\n\n        var range = search.find(session);\n        assert.position(range.start, 2, 0);\n        assert.position(range.end, 2, 4);\n    },\n\n    \"test: find using a regular expression\" : function() {\n        var session = new EditSession([\"abc123 123 cd\", \"abc\"]);\n\n        var search = new Search().set({\n            needle: \"\\\\d+\",\n            regExp: true\n        });\n\n        var range = search.find(session);\n        assert.position(range.start, 0, 3);\n        assert.position(range.end, 0, 6);\n    },\n\n    \"test: find using a regular expression and whole word\" : function() {\n        var session = new EditSession([\"abc123 123 cd\", \"abc\"]);\n\n        var search = new Search().set({\n            needle: \"\\\\d+\\\\b\",\n            regExp: true,\n            wholeWord: true\n        });\n\n        var range = search.find(session);\n        assert.position(range.start, 0, 7);\n        assert.position(range.end, 0, 10);\n    },\n\n    \"test: use regular expressions with capture groups\": function() {\n        var session = new EditSession([\"  ab: 12px\", \"  <h1 abc\"]);\n\n        var search = new Search().set({\n            needle: \"(\\\\d+)\",\n            regExp: true\n        });\n\n        var range = search.find(session);\n        assert.position(range.start, 0, 6);\n        assert.position(range.end, 0, 8);\n    },\n\n    \"test: find all matches in selection\" : function() {\n        var session = new EditSession([\"juhu\", \"juhu\", \"juhu\", \"juhu\"]);\n\n        session.getSelection().setSelectionAnchor(0, 2);\n        session.getSelection().selectTo(3, 2);\n\n        var search = new Search().set({\n            needle: \"uh\",\n            wrap: true,\n            range: session.getSelection().getRange()\n        });\n\n        var ranges = search.findAll(session);\n\n        assert.equal(ranges.length, 2);\n        assert.position(ranges[0].start, 1, 1);\n        assert.position(ranges[0].end, 1, 3);\n        assert.position(ranges[1].start, 2, 1);\n        assert.position(ranges[1].end, 2, 3);\n    },\n    \n    \n    \"test: find all multiline matches\" : function() {\n        var session = new EditSession([\"juhu\", \"juhu\", \"juhu\", \"juhu\"]);\n\n        var search = new Search().set({\n            needle: \"hu\\nju\",\n            wrap: true\n        });\n\n        var ranges = search.findAll(session);\n\n        assert.equal(ranges.length, 3);\n        assert.position(ranges[0].start, 0, 2);\n        assert.position(ranges[0].end, 1, 2);\n        assert.position(ranges[1].start, 1, 2);\n        assert.position(ranges[1].end, 2, 2);\n    },\n\n    \"test: replace() should return the replacement if the input matches the needle\" : function() {\n        var search = new Search().set({\n            needle: \"juhu\"\n        });\n\n        assert.equal(search.replace(\"juhu\", \"kinners\"), \"kinners\");\n        assert.equal(search.replace(\"\", \"kinners\"), null);\n        assert.equal(search.replace(\" juhu\", \"kinners\"), null);\n\n        // case sensitivity\n        assert.equal(search.replace(\"Juhu\", \"kinners\"), \"kinners\");\n        search.set({caseSensitive: true});\n        assert.equal(search.replace(\"Juhu\", \"kinners\"), null);\n\n        // regexp replacement\n    },\n\n    \"test: replace with a RegExp search\" : function() {\n        var search = new Search().set({\n            needle: \"\\\\d+\",\n            regExp: true\n        });\n\n        assert.equal(search.replace(\"123\", \"kinners\"), \"kinners\");\n        assert.equal(search.replace(\"01234\", \"kinners\"), \"kinners\");\n        assert.equal(search.replace(\"\", \"kinners\"), null);\n        assert.equal(search.replace(\"a12\", \"kinners\"), null);\n        assert.equal(search.replace(\"12a\", \"kinners\"), null);\n    },\n\n    \"test: replace with RegExp match and capture groups\" : function() {\n        var search = new Search().set({\n            needle: \"ab(\\\\d\\\\d)\",\n            regExp: true\n        });\n\n        assert.equal(search.replace(\"ab12\", \"cd$1\"), \"cd12\");\n        assert.equal(search.replace(\"ab12\", \"-$&-\"), \"-ab12-\");\n        assert.equal(search.replace(\"ab12\", \"$$\"), \"$\");\n    },\n\n    \"test: find all using regular expresion containing $\" : function() {\n        var session = new EditSession([\"a\", \"     b\", \"c \", \"d\"]);\n\n        var search = new Search().set({\n            needle: \"[ ]+$\",\n            regExp: true,\n            wrap: true\n        });\n\n        session.getSelection().moveCursorTo(1, 2);\n        var ranges = search.findAll(session);\n\n        assert.equal(ranges.length, 1);\n        assert.position(ranges[0].start, 2, 1);\n        assert.position(ranges[0].end, 2, 2);\n    },\n\n    \"test: find all matches in a line\" : function() {\n        var session = new EditSession(\"foo bar foo baz foobar foo\");\n\n        var search = new Search().set({\n            needle: \"foo\",\n            wrap: true,\n            wholeWord: true\n        });\n\n        session.getSelection().moveCursorTo(0, 4);\n\n        var ranges = search.findAll(session);\n\n        assert.equal(ranges.length, 3);\n        assert.position(ranges[0].start, 0, 0);\n        assert.position(ranges[0].end, 0, 3);\n        assert.position(ranges[1].start, 0, 8);\n        assert.position(ranges[1].end, 0, 11);\n        assert.position(ranges[2].start, 0, 23);\n        assert.position(ranges[2].end, 0, 26);\n    },\n\n    \"test: find all matches in a line backwards\" : function() {\n        var session = new EditSession(\"foo bar foo baz foobar foo\");\n\n        var search = new Search().set({\n            needle: \"foo\",\n            wrap: true,\n            wholeWord: true,\n            backwards: true\n        });\n\n        session.getSelection().moveCursorTo(0, 13);\n\n        var ranges = search.findAll(session);\n\n        assert.equal(ranges.length, 3);\n        assert.position(ranges[2].start, 0, 23);\n        assert.position(ranges[2].end, 0, 26);\n        assert.position(ranges[1].start, 0, 8);\n        assert.position(ranges[1].end, 0, 11);\n        assert.position(ranges[0].start, 0, 0);\n        assert.position(ranges[0].end, 0, 3);\n    },\n\n    \"test: find next empty range\" : function() {\n        var session = new EditSession(\"foo foobar foo\");\n        var editor = new Editor(new MockRenderer(), session);\n        \n        var options = {\n            needle: \"o*\",\n            wrap: true,\n            regExp: true,\n            backwards: false\n        };\n        var positions = [4, 5.2, 7, 8, 9, 10, 11, 12.2, 14, 0, 1.2, 3];\n        \n        session.selection.moveCursorTo(0, 3);\n        for (var i = 0; i < 12; i++) {\n            editor.find(options);\n            var range = editor.selection.getRange();\n            var start = range.start.column;\n            var len = range.end.column - start;\n            assert.equal(start + 0.1 * len, positions[i]);\n        }\n        options.backwards = true;\n        positions = [1.2, 1, 0, 14, 12.2, 12, 11, 10, 9, 8, 7, 5.2, 5, 4, 3];\n        for (var i = 0; i < 16; i++) {\n            editor.find(options);\n            var range = editor.selection.getRange();\n            var start = range.start.column;\n            var len = range.end.column - start;\n            console.log(start + 0.1 * len);\n        }\n    },\n    \"test: repeating text\": function() {\n        var session = new EditSession(\"tttttt\\ntttttt\\ntttttt\\ntttttt\\ntttttt\\ntttttt\");\n        var editor = new Editor(new MockRenderer(), session);\n        \n        var options = {\n            needle: \"^\",\n            wrap: true,\n            regExp: true,\n            backwards: false\n        };\n        function check(sl, sc, el, ec) {\n            editor.find(options);\n            var range = editor.selection.getRange();\n            console.log(range+\"\");\n            assert.range(range, sl, sc, el, ec);\n        }\n        \n        session.selection.moveCursorTo(1, 3);\n        check(2, 0, 2, 0);\n        \n        options.needle = \"tttt\\ntttt\";\n        check(2, 2, 3, 4);\n        check(4, 2, 5, 4);\n        check(0, 2, 1, 4);\n        \n        options.backwards = true;\n        check(4, 2, 5, 4);\n        check(2, 2, 3, 4);\n        check(0, 2, 1, 4);\n        check(4, 2, 5, 4);\n    }\n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main) {\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n}\n"
  },
  {
    "path": "lib/ace/selection.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar lang = require(\"./lib/lang\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\n\n/**\n * Contains the cursor position and the text selection of an edit session.\n *\n * The row/columns used in the selection are in document coordinates representing the coordinates as they appear in the document before applying soft wrap and folding.\n * @class Selection\n **/\n\n\n/**\n * Emitted when the cursor position changes.\n * @event changeCursor\n *\n**/\n/**\n * Emitted when the cursor selection changes.\n * \n *  @event changeSelection\n**/\n/**\n * Creates a new `Selection` object.\n * @param {EditSession} session The session to use\n * \n * @constructor\n **/\nvar Selection = function(session) {\n    this.session = session;\n    this.doc = session.getDocument();\n\n    this.clearSelection();\n    this.lead = this.selectionLead = this.doc.createAnchor(0, 0);\n    this.anchor = this.selectionAnchor = this.doc.createAnchor(0, 0);\n\n    var self = this;\n    this.lead.on(\"change\", function(e) {\n        self._emit(\"changeCursor\");\n        if (!self.$isEmpty)\n            self._emit(\"changeSelection\");\n        if (!self.$keepDesiredColumnOnChange && e.old.column != e.value.column)\n            self.$desiredColumn = null;\n    });\n\n    this.selectionAnchor.on(\"change\", function() {\n        if (!self.$isEmpty)\n            self._emit(\"changeSelection\");\n    });\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n\n    /**\n    *\n    * Returns `true` if the selection is empty.\n    * @returns {Boolean}\n    **/\n    this.isEmpty = function() {\n        return (this.$isEmpty || (\n            this.anchor.row == this.lead.row &&\n            this.anchor.column == this.lead.column\n        ));\n    };\n\n    /**\n    * Returns `true` if the selection is a multi-line.\n    * @returns {Boolean}\n    **/\n    this.isMultiLine = function() {\n        if (this.isEmpty()) {\n            return false;\n        }\n\n        return this.getRange().isMultiLine();\n    };\n\n    /**\n    * Returns an object containing the `row` and `column` current position of the cursor.\n    * @returns {Object}\n    **/\n    this.getCursor = function() {\n        return this.lead.getPosition();\n    };\n\n    /**\n    * Sets the row and column position of the anchor. This function also emits the `'changeSelection'` event.\n    * @param {Number} row The new row\n    * @param {Number} column The new column\n    *\n    *\n    **/\n    this.setSelectionAnchor = function(row, column) {\n        this.anchor.setPosition(row, column);\n\n        if (this.$isEmpty) {\n            this.$isEmpty = false;\n            this._emit(\"changeSelection\");\n        }\n    };\n\n    /**\n    * Returns an object containing the `row` and `column` of the calling selection anchor.\n    *\n    * @returns {Object}\n    * @related Anchor.getPosition\n    **/\n    this.getSelectionAnchor = function() {\n        if (this.$isEmpty)\n            return this.getSelectionLead();\n        else\n            return this.anchor.getPosition();\n    };\n\n    /**\n    *\n    * Returns an object containing the `row` and `column` of the calling selection lead.\n    * @returns {Object}\n    **/\n    this.getSelectionLead = function() {\n        return this.lead.getPosition();\n    };\n\n    /**\n    * Shifts the selection up (or down, if [[Selection.isBackwards `isBackwards()`]] is true) the given number of columns.\n    * @param {Number} columns The number of columns to shift by\n    *\n    *\n    *\n    **/\n    this.shiftSelection = function(columns) {\n        if (this.$isEmpty) {\n            this.moveCursorTo(this.lead.row, this.lead.column + columns);\n            return;\n        }\n\n        var anchor = this.getSelectionAnchor();\n        var lead = this.getSelectionLead();\n\n        var isBackwards = this.isBackwards();\n\n        if (!isBackwards || anchor.column !== 0)\n            this.setSelectionAnchor(anchor.row, anchor.column + columns);\n\n        if (isBackwards || lead.column !== 0) {\n            this.$moveSelection(function() {\n                this.moveCursorTo(lead.row, lead.column + columns);\n            });\n        }\n    };\n\n    /**\n    * Returns `true` if the selection is going backwards in the document.\n    * @returns {Boolean}\n    **/\n    this.isBackwards = function() {\n        var anchor = this.anchor;\n        var lead = this.lead;\n        return (anchor.row > lead.row || (anchor.row == lead.row && anchor.column > lead.column));\n    };\n\n    /**\n    * [Returns the [[Range]] for the selected text.]{: #Selection.getRange}\n    * @returns {Range}\n    **/\n    this.getRange = function() {\n        var anchor = this.anchor;\n        var lead = this.lead;\n\n        if (this.isEmpty())\n            return Range.fromPoints(lead, lead);\n\n        if (this.isBackwards()) {\n            return Range.fromPoints(lead, anchor);\n        }\n        else {\n            return Range.fromPoints(anchor, lead);\n        }\n    };\n\n    /**\n    * [Empties the selection (by de-selecting it). This function also emits the `'changeSelection'` event.]{: #Selection.clearSelection}\n    **/\n    this.clearSelection = function() {\n        if (!this.$isEmpty) {\n            this.$isEmpty = true;\n            this._emit(\"changeSelection\");\n        }\n    };\n\n    /**\n    * Selects all the text in the document.\n    **/\n    this.selectAll = function() {\n        var lastRow = this.doc.getLength() - 1;\n        this.setSelectionAnchor(0, 0);\n        this.moveCursorTo(lastRow, this.doc.getLine(lastRow).length);\n    };\n\n    /**\n    * Sets the selection to the provided range.\n    * @param {Range} range The range of text to select\n    * @param {Boolean} reverse Indicates if the range should go backwards (`true`) or not\n    *\n    *\n    * @method setSelectionRange\n    * @alias setRange\n    **/\n    this.setRange =\n    this.setSelectionRange = function(range, reverse) {\n        if (reverse) {\n            this.setSelectionAnchor(range.end.row, range.end.column);\n            this.selectTo(range.start.row, range.start.column);\n        } else {\n            this.setSelectionAnchor(range.start.row, range.start.column);\n            this.selectTo(range.end.row, range.end.column);\n        }\n        if (this.getRange().isEmpty())\n            this.$isEmpty = true;\n        this.$desiredColumn = null;\n    };\n\n    this.$moveSelection = function(mover) {\n        var lead = this.lead;\n        if (this.$isEmpty)\n            this.setSelectionAnchor(lead.row, lead.column);\n\n        mover.call(this);\n    };\n\n    /**\n    * Moves the selection cursor to the indicated row and column.\n    * @param {Number} row The row to select to\n    * @param {Number} column The column to select to\n    *\n    *\n    *\n    **/\n    this.selectTo = function(row, column) {\n        this.$moveSelection(function() {\n            this.moveCursorTo(row, column);\n        });\n    };\n\n    /**\n    * Moves the selection cursor to the row and column indicated by `pos`.\n    * @param {Object} pos An object containing the row and column\n    *\n    *\n    *\n    **/\n    this.selectToPosition = function(pos) {\n        this.$moveSelection(function() {\n            this.moveCursorToPosition(pos);\n        });\n    };\n\n    /**\n    * Moves the selection cursor to the indicated row and column.\n    * @param {Number} row The row to select to\n    * @param {Number} column The column to select to\n    *\n    **/\n    this.moveTo = function(row, column) {\n        this.clearSelection();\n        this.moveCursorTo(row, column);\n    };\n\n    /**\n    * Moves the selection cursor to the row and column indicated by `pos`.\n    * @param {Object} pos An object containing the row and column\n    **/\n    this.moveToPosition = function(pos) {\n        this.clearSelection();\n        this.moveCursorToPosition(pos);\n    };\n\n\n    /**\n    *\n    * Moves the selection up one row.\n    **/\n    this.selectUp = function() {\n        this.$moveSelection(this.moveCursorUp);\n    };\n\n    /**\n    *\n    * Moves the selection down one row.\n    **/\n    this.selectDown = function() {\n        this.$moveSelection(this.moveCursorDown);\n    };\n\n    /**\n    *\n    *\n    * Moves the selection right one column.\n    **/\n    this.selectRight = function() {\n        this.$moveSelection(this.moveCursorRight);\n    };\n\n    /**\n    *\n    * Moves the selection left one column.\n    **/\n    this.selectLeft = function() {\n        this.$moveSelection(this.moveCursorLeft);\n    };\n\n    /**\n    *\n    * Moves the selection to the beginning of the current line.\n    **/\n    this.selectLineStart = function() {\n        this.$moveSelection(this.moveCursorLineStart);\n    };\n\n    /**\n    *\n    * Moves the selection to the end of the current line.\n    **/\n    this.selectLineEnd = function() {\n        this.$moveSelection(this.moveCursorLineEnd);\n    };\n\n    /**\n    *\n    * Moves the selection to the end of the file.\n    **/\n    this.selectFileEnd = function() {\n        this.$moveSelection(this.moveCursorFileEnd);\n    };\n\n    /**\n    *\n    * Moves the selection to the start of the file.\n    **/\n    this.selectFileStart = function() {\n        this.$moveSelection(this.moveCursorFileStart);\n    };\n\n    /**\n    *\n    * Moves the selection to the first word on the right.\n    **/\n    this.selectWordRight = function() {\n        this.$moveSelection(this.moveCursorWordRight);\n    };\n\n    /**\n    *\n    * Moves the selection to the first word on the left.\n    **/\n    this.selectWordLeft = function() {\n        this.$moveSelection(this.moveCursorWordLeft);\n    };\n\n    /**\n    * Moves the selection to highlight the entire word.\n    * @related EditSession.getWordRange\n    **/\n    this.getWordRange = function(row, column) {\n        if (typeof column == \"undefined\") {\n            var cursor = row || this.lead;\n            row = cursor.row;\n            column = cursor.column;\n        }\n        return this.session.getWordRange(row, column);\n    };\n\n    /**\n    *\n    * Selects an entire word boundary.\n    **/\n    this.selectWord = function() {\n        this.setSelectionRange(this.getWordRange());\n    };\n\n    /**\n    * Selects a word, including its right whitespace.\n    * @related EditSession.getAWordRange\n    **/\n    this.selectAWord = function() {\n        var cursor = this.getCursor();\n        var range = this.session.getAWordRange(cursor.row, cursor.column);\n        this.setSelectionRange(range);\n    };\n\n    this.getLineRange = function(row, excludeLastChar) {\n        var rowStart = typeof row == \"number\" ? row : this.lead.row;\n        var rowEnd;\n\n        var foldLine = this.session.getFoldLine(rowStart);\n        if (foldLine) {\n            rowStart = foldLine.start.row;\n            rowEnd = foldLine.end.row;\n        } else {\n            rowEnd = rowStart;\n        }\n        if (excludeLastChar === true)\n            return new Range(rowStart, 0, rowEnd, this.session.getLine(rowEnd).length);\n        else\n            return new Range(rowStart, 0, rowEnd + 1, 0);\n    };\n\n    /**\n    * Selects the entire line.\n    **/\n    this.selectLine = function() {\n        this.setSelectionRange(this.getLineRange());\n    };\n\n    /**\n    *\n    * Moves the cursor up one row.\n    **/\n    this.moveCursorUp = function() {\n        this.moveCursorBy(-1, 0);\n    };\n\n    /**\n    *\n    * Moves the cursor down one row.\n    **/\n    this.moveCursorDown = function() {\n        this.moveCursorBy(1, 0);\n    };\n\n    /**\n     *\n     * Returns `true` if moving the character next to the cursor in the specified direction is a soft tab.\n     * @param {Object} cursor the current cursor position\n     * @param {Number} tabSize the tab size\n     * @param {Number} direction 1 for right, -1 for left\n    */\n    this.wouldMoveIntoSoftTab = function(cursor, tabSize, direction) {\n        var start = cursor.column;\n        var end = cursor.column + tabSize;\n\n        if (direction < 0) {\n            start = cursor.column - tabSize;\n            end = cursor.column;\n        }\n        return this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(start, end).split(\" \").length-1 == tabSize;\n    };\n\n    /**\n    *\n    * Moves the cursor left one column.\n    **/\n    this.moveCursorLeft = function() {\n        var cursor = this.lead.getPosition(),\n            fold;\n\n        if (fold = this.session.getFoldAt(cursor.row, cursor.column, -1)) {\n            this.moveCursorTo(fold.start.row, fold.start.column);\n        } else if (cursor.column === 0) {\n            // cursor is a line (start\n            if (cursor.row > 0) {\n                this.moveCursorTo(cursor.row - 1, this.doc.getLine(cursor.row - 1).length);\n            }\n        }\n        else {\n            var tabSize = this.session.getTabSize();\n            if (this.wouldMoveIntoSoftTab(cursor, tabSize, -1) && !this.session.getNavigateWithinSoftTabs()) {\n                this.moveCursorBy(0, -tabSize);\n            } else {\n                this.moveCursorBy(0, -1);\n            }\n        }\n    };\n\n    /**\n    *\n    * Moves the cursor right one column.\n    **/\n    this.moveCursorRight = function() {\n        var cursor = this.lead.getPosition(),\n            fold;\n        if (fold = this.session.getFoldAt(cursor.row, cursor.column, 1)) {\n            this.moveCursorTo(fold.end.row, fold.end.column);\n        }\n        else if (this.lead.column == this.doc.getLine(this.lead.row).length) {\n            if (this.lead.row < this.doc.getLength() - 1) {\n                this.moveCursorTo(this.lead.row + 1, 0);\n            }\n        }\n        else {\n            var tabSize = this.session.getTabSize();\n            var cursor = this.lead;\n            if (this.wouldMoveIntoSoftTab(cursor, tabSize, 1) && !this.session.getNavigateWithinSoftTabs()) {\n                this.moveCursorBy(0, tabSize);\n            } else {\n                this.moveCursorBy(0, 1);\n            }\n        }\n    };\n\n    /**\n    *\n    * Moves the cursor to the start of the line.\n    **/\n    this.moveCursorLineStart = function() {\n        var row = this.lead.row;\n        var column = this.lead.column;\n        var screenRow = this.session.documentToScreenRow(row, column);\n\n        // Determ the doc-position of the first character at the screen line.\n        var firstColumnPosition = this.session.screenToDocumentPosition(screenRow, 0);\n\n        // Determ the line\n        var beforeCursor = this.session.getDisplayLine(\n            row, null, firstColumnPosition.row,\n            firstColumnPosition.column\n        );\n\n        var leadingSpace = beforeCursor.match(/^\\s*/);\n        // TODO find better way for emacs mode to override selection behaviors\n        if (leadingSpace[0].length != column && !this.session.$useEmacsStyleLineStart)\n            firstColumnPosition.column += leadingSpace[0].length;\n        this.moveCursorToPosition(firstColumnPosition);\n    };\n\n    /**\n    *\n    * Moves the cursor to the end of the line.\n    **/\n    this.moveCursorLineEnd = function() {\n        var lead = this.lead;\n        var lineEnd = this.session.getDocumentLastRowColumnPosition(lead.row, lead.column);\n        if (this.lead.column == lineEnd.column) {\n            var line = this.session.getLine(lineEnd.row);\n            if (lineEnd.column == line.length) {\n                var textEnd = line.search(/\\s+$/);\n                if (textEnd > 0)\n                    lineEnd.column = textEnd;\n            }\n        }\n\n        this.moveCursorTo(lineEnd.row, lineEnd.column);\n    };\n\n    /**\n    *\n    * Moves the cursor to the end of the file.\n    **/\n    this.moveCursorFileEnd = function() {\n        var row = this.doc.getLength() - 1;\n        var column = this.doc.getLine(row).length;\n        this.moveCursorTo(row, column);\n    };\n\n    /**\n    *\n    * Moves the cursor to the start of the file.\n    **/\n    this.moveCursorFileStart = function() {\n        this.moveCursorTo(0, 0);\n    };\n\n    /**\n    *\n    * Moves the cursor to the word on the right.\n    **/\n    this.moveCursorLongWordRight = function() {\n        var row = this.lead.row;\n        var column = this.lead.column;\n        var line = this.doc.getLine(row);\n        var rightOfCursor = line.substring(column);\n\n        var match;\n        this.session.nonTokenRe.lastIndex = 0;\n        this.session.tokenRe.lastIndex = 0;\n\n        // skip folds\n        var fold = this.session.getFoldAt(row, column, 1);\n        if (fold) {\n            this.moveCursorTo(fold.end.row, fold.end.column);\n            return;\n        }\n\n        // first skip space\n        if (match = this.session.nonTokenRe.exec(rightOfCursor)) {\n            column += this.session.nonTokenRe.lastIndex;\n            this.session.nonTokenRe.lastIndex = 0;\n            rightOfCursor = line.substring(column);\n        }\n\n        // if at line end proceed with next line\n        if (column >= line.length) {\n            this.moveCursorTo(row, line.length);\n            this.moveCursorRight();\n            if (row < this.doc.getLength() - 1)\n                this.moveCursorWordRight();\n            return;\n        }\n\n        // advance to the end of the next token\n        if (match = this.session.tokenRe.exec(rightOfCursor)) {\n            column += this.session.tokenRe.lastIndex;\n            this.session.tokenRe.lastIndex = 0;\n        }\n\n        this.moveCursorTo(row, column);\n    };\n\n    /**\n    *\n    * Moves the cursor to the word on the left.\n    **/\n    this.moveCursorLongWordLeft = function() {\n        var row = this.lead.row;\n        var column = this.lead.column;\n\n        // skip folds\n        var fold;\n        if (fold = this.session.getFoldAt(row, column, -1)) {\n            this.moveCursorTo(fold.start.row, fold.start.column);\n            return;\n        }\n\n        var str = this.session.getFoldStringAt(row, column, -1);\n        if (str == null) {\n            str = this.doc.getLine(row).substring(0, column);\n        }\n\n        var leftOfCursor = lang.stringReverse(str);\n        var match;\n        this.session.nonTokenRe.lastIndex = 0;\n        this.session.tokenRe.lastIndex = 0;\n\n        // skip whitespace\n        if (match = this.session.nonTokenRe.exec(leftOfCursor)) {\n            column -= this.session.nonTokenRe.lastIndex;\n            leftOfCursor = leftOfCursor.slice(this.session.nonTokenRe.lastIndex);\n            this.session.nonTokenRe.lastIndex = 0;\n        }\n\n        // if at begin of the line proceed in line above\n        if (column <= 0) {\n            this.moveCursorTo(row, 0);\n            this.moveCursorLeft();\n            if (row > 0)\n                this.moveCursorWordLeft();\n            return;\n        }\n\n        // move to the begin of the word\n        if (match = this.session.tokenRe.exec(leftOfCursor)) {\n            column -= this.session.tokenRe.lastIndex;\n            this.session.tokenRe.lastIndex = 0;\n        }\n\n        this.moveCursorTo(row, column);\n    };\n\n    this.$shortWordEndIndex = function(rightOfCursor) {\n        var match, index = 0, ch;\n        var whitespaceRe = /\\s/;\n        var tokenRe = this.session.tokenRe;\n\n        tokenRe.lastIndex = 0;\n        if (match = this.session.tokenRe.exec(rightOfCursor)) {\n            index = this.session.tokenRe.lastIndex;\n        } else {\n            while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\n                index ++;\n\n            if (index < 1) {\n                tokenRe.lastIndex = 0;\n                 while ((ch = rightOfCursor[index]) && !tokenRe.test(ch)) {\n                    tokenRe.lastIndex = 0;\n                    index ++;\n                    if (whitespaceRe.test(ch)) {\n                        if (index > 2) {\n                            index--;\n                            break;\n                        } else {\n                            while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\n                                index ++;\n                            if (index > 2)\n                                break;\n                        }\n                    }\n                }\n            }\n        }\n        tokenRe.lastIndex = 0;\n\n        return index;\n    };\n\n    this.moveCursorShortWordRight = function() {\n        var row = this.lead.row;\n        var column = this.lead.column;\n        var line = this.doc.getLine(row);\n        var rightOfCursor = line.substring(column);\n\n        var fold = this.session.getFoldAt(row, column, 1);\n        if (fold)\n            return this.moveCursorTo(fold.end.row, fold.end.column);\n\n        if (column == line.length) {\n            var l = this.doc.getLength();\n            do {\n                row++;\n                rightOfCursor = this.doc.getLine(row);\n            } while (row < l && /^\\s*$/.test(rightOfCursor));\n\n            if (!/^\\s+/.test(rightOfCursor))\n                rightOfCursor = \"\";\n            column = 0;\n        }\n\n        var index = this.$shortWordEndIndex(rightOfCursor);\n\n        this.moveCursorTo(row, column + index);\n    };\n\n    this.moveCursorShortWordLeft = function() {\n        var row = this.lead.row;\n        var column = this.lead.column;\n\n        var fold;\n        if (fold = this.session.getFoldAt(row, column, -1))\n            return this.moveCursorTo(fold.start.row, fold.start.column);\n\n        var line = this.session.getLine(row).substring(0, column);\n        if (column === 0) {\n            do {\n                row--;\n                line = this.doc.getLine(row);\n            } while (row > 0 && /^\\s*$/.test(line));\n\n            column = line.length;\n            if (!/\\s+$/.test(line))\n                line = \"\";\n        }\n\n        var leftOfCursor = lang.stringReverse(line);\n        var index = this.$shortWordEndIndex(leftOfCursor);\n\n        return this.moveCursorTo(row, column - index);\n    };\n\n    this.moveCursorWordRight = function() {\n        if (this.session.$selectLongWords)\n            this.moveCursorLongWordRight();\n        else\n            this.moveCursorShortWordRight();\n    };\n\n    this.moveCursorWordLeft = function() {\n        if (this.session.$selectLongWords)\n            this.moveCursorLongWordLeft();\n        else\n            this.moveCursorShortWordLeft();\n    };\n\n    /**\n    * Moves the cursor to position indicated by the parameters. Negative numbers move the cursor backwards in the document.\n    * @param {Number} rows The number of rows to move by\n    * @param {Number} chars The number of characters to move by\n    *\n    *\n    * @related EditSession.documentToScreenPosition\n    **/\n    this.moveCursorBy = function(rows, chars) {\n        var screenPos = this.session.documentToScreenPosition(\n            this.lead.row,\n            this.lead.column\n        );\n\n        var offsetX;\n\n        if (chars === 0) {\n            if (rows !== 0) {\n                if (this.session.$bidiHandler.isBidiRow(screenPos.row, this.lead.row)) {\n                    offsetX = this.session.$bidiHandler.getPosLeft(screenPos.column);\n                    screenPos.column = Math.round(offsetX / this.session.$bidiHandler.charWidths[0]);\n                } else {\n                    offsetX = screenPos.column * this.session.$bidiHandler.charWidths[0];\n                }\n            }\n\n            if (this.$desiredColumn)\n                screenPos.column = this.$desiredColumn;\n            else\n                this.$desiredColumn = screenPos.column;\n        }\n\n        var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column, offsetX);\n        \n        if (rows !== 0 && chars === 0 && docPos.row === this.lead.row && docPos.column === this.lead.column) {\n            if (this.session.lineWidgets && this.session.lineWidgets[docPos.row]) {\n                if (docPos.row > 0 || rows > 0)\n                    docPos.row++;\n            }\n        }\n\n        // move the cursor and update the desired column\n        this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0);\n    };\n\n    /**\n    * Moves the selection to the position indicated by its `row` and `column`.\n    * @param {Object} position The position to move to\n    *\n    *\n    **/\n    this.moveCursorToPosition = function(position) {\n        this.moveCursorTo(position.row, position.column);\n    };\n\n    /**\n     * Moves the cursor to the row and column provided. [If `preventUpdateDesiredColumn` is `true`, then the cursor stays in the same column position as its original point.]{: #preventUpdateBoolDesc}\n     * @param {Number} row The row to move to\n     * @param {Number} column The column to move to\n     * @param {Boolean} keepDesiredColumn [If `true`, the cursor move does not respect the previous column]{: #preventUpdateBool}\n     *\n     **/\n    this.moveCursorTo = function(row, column, keepDesiredColumn) {\n        // Ensure the row/column is not inside of a fold.\n        var fold = this.session.getFoldAt(row, column, 1);\n        if (fold) {\n            row = fold.start.row;\n            column = fold.start.column;\n        }\n\n        this.$keepDesiredColumnOnChange = true;\n        var line = this.session.getLine(row);\n        // do not allow putting cursor in the middle of surrogate pairs\n        if (/[\\uDC00-\\uDFFF]/.test(line.charAt(column)) && line.charAt(column - 1)) {\n            if (this.lead.row == row && this.lead.column == column + 1)\n                column = column - 1;\n            else\n                column = column + 1;\n        }\n        this.lead.setPosition(row, column);\n        this.$keepDesiredColumnOnChange = false;\n\n        if (!keepDesiredColumn)\n            this.$desiredColumn = null;\n    };\n\n    /**\n     * Moves the cursor to the screen position indicated by row and column. {:preventUpdateBoolDesc}\n     * @param {Number} row The row to move to\n     * @param {Number} column The column to move to\n     * @param {Boolean} keepDesiredColumn {:preventUpdateBool}\n     *\n     **/\n    this.moveCursorToScreen = function(row, column, keepDesiredColumn) {\n        var pos = this.session.screenToDocumentPosition(row, column);\n        this.moveCursorTo(pos.row, pos.column, keepDesiredColumn);\n    };\n\n    // remove listeners from document\n    this.detach = function() {\n        this.lead.detach();\n        this.anchor.detach();\n        this.session = this.doc = null;\n    };\n\n    this.fromOrientedRange = function(range) {\n        this.setSelectionRange(range, range.cursor == range.start);\n        this.$desiredColumn = range.desiredColumn || this.$desiredColumn;\n    };\n\n    this.toOrientedRange = function(range) {\n        var r = this.getRange();\n        if (range) {\n            range.start.column = r.start.column;\n            range.start.row = r.start.row;\n            range.end.column = r.end.column;\n            range.end.row = r.end.row;\n        } else {\n            range = r;\n        }\n\n        range.cursor = this.isBackwards() ? range.start : range.end;\n        range.desiredColumn = this.$desiredColumn;\n        return range;\n    };\n\n    /**\n     * Saves the current cursor position and calls `func` that can change the cursor\n     * postion. The result is the range of the starting and eventual cursor position.\n     * Will reset the cursor position.\n     * @param {Function} The callback that should change the cursor position\n     * @returns {Range}\n     *\n     **/\n    this.getRangeOfMovements = function(func) {\n        var start = this.getCursor();\n        try {\n            func(this);\n            var end = this.getCursor();\n            return Range.fromPoints(start,end);\n        } catch(e) {\n            return Range.fromPoints(start,start);\n        } finally {\n            this.moveCursorToPosition(start);\n        }\n    };\n\n    this.toJSON = function() {\n        if (this.rangeCount) {\n            var data = this.ranges.map(function(r) {\n                var r1 = r.clone();\n                r1.isBackwards = r.cursor == r.start;\n                return r1;\n            });\n        } else {\n            var data = this.getRange();\n            data.isBackwards = this.isBackwards();\n        }\n        return data;\n    };\n\n    this.fromJSON = function(data) {\n        if (data.start == undefined) {\n            if (this.rangeList) {\n                this.toSingleRange(data[0]);\n                for (var i = data.length; i--; ) {\n                    var r = Range.fromPoints(data[i].start, data[i].end);\n                    if (data[i].isBackwards)\n                        r.cursor = r.start;\n                    this.addRange(r, true);\n                }\n                return;\n            } else\n                data = data[0];\n        }\n        if (this.rangeList)\n            this.toSingleRange(data);\n        this.setSelectionRange(data, data.isBackwards);\n    };\n\n    this.isEqual = function(data) {\n        if ((data.length || this.rangeCount) && data.length != this.rangeCount)\n            return false;\n        if (!data.length || !this.ranges)\n            return this.getRange().isEqual(data);\n\n        for (var i = this.ranges.length; i--; ) {\n            if (!this.ranges[i].isEqual(data[i]))\n                return false;\n        }\n        return true;\n    };\n\n}).call(Selection.prototype);\n\nexports.Selection = Selection;\n});\n"
  },
  {
    "path": "lib/ace/selection_test.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\nif (typeof process !== \"undefined\") {\n    require(\"amd-loader\");\n}\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar EditSession = require(\"./edit_session\").EditSession;\nvar assert = require(\"./test/assertions\");\n\nmodule.exports = {\n    createSession : function(rows, cols) {\n        var line = new Array(cols + 1).join(\"a\");\n        var text = new Array(rows).join(line + \"\\n\") + line;\n        return new EditSession(text);\n    },\n\n    \"test: move cursor to end of file should place the cursor on last row and column\" : function() {\n        var session = this.createSession(200, 10);\n        var selection = session.getSelection();\n\n        selection.moveCursorFileEnd();\n        assert.position(selection.getCursor(), 199, 10);\n    },\n\n    \"test: moveCursor to start of file should place the cursor on the first row and column\" : function() {\n        var session = this.createSession(200, 10);\n        var selection = session.getSelection();\n\n        selection.moveCursorFileStart();\n        assert.position(selection.getCursor(), 0, 0);\n    },\n\n    \"test: move selection lead to end of file\" : function() {\n        var session = this.createSession(200, 10);\n        var selection = session.getSelection();\n\n        selection.moveCursorTo(100, 5);\n        selection.selectFileEnd();\n\n        var range = selection.getRange();\n\n        assert.position(range.start, 100, 5);\n        assert.position(range.end, 199, 10);\n    },\n\n    \"test: move selection lead to start of file\" : function() {\n        var session = this.createSession(200, 10);\n        var selection = session.getSelection();\n\n        selection.moveCursorTo(100, 5);\n        selection.selectFileStart();\n\n        var range = selection.getRange();\n\n        assert.position(range.start, 0, 0);\n        assert.position(range.end, 100, 5);\n    },\n\n    \"test: move cursor word right\" : function() {\n        var session = new EditSession([\n            \"ab\",\n            \" Juhu Kinners (abc, 12)\",\n            \" cde\"\n        ].join(\"\\n\"));\n        \n        var selection = session.getSelection();\n        session.$selectLongWords = true;\n\n        selection.moveCursorDown();\n        assert.position(selection.getCursor(), 1, 0);\n\n        selection.moveCursorWordRight();\n        assert.position(selection.getCursor(), 1, 5);\n\n        selection.moveCursorWordRight();\n        assert.position(selection.getCursor(), 1, 13);\n\n        selection.moveCursorWordRight();\n        assert.position(selection.getCursor(), 1, 18);\n\n        selection.moveCursorWordRight();\n        assert.position(selection.getCursor(), 1, 22);\n\n        // wrap line\n        selection.moveCursorWordRight();\n        assert.position(selection.getCursor(), 2, 4);\n        \n        selection.moveCursorWordRight();\n        assert.position(selection.getCursor(), 2, 4);\n    },\n\n    \"test: select word right if cursor in word\" : function() {\n        var session = new EditSession(\"Juhu Kinners\");\n        var selection = session.getSelection();\n\n        selection.moveCursorTo(0, 2);\n        selection.moveCursorWordRight();\n\n        assert.position(selection.getCursor(), 0, 4);\n    },\n\n    \"test: moveCursor word left\" : function() {\n        var session = new EditSession([\n            \"ab\",\n            \" Juhu Kinners (abc, 12)\",\n            \" cde\"\n        ].join(\"\\n\"));\n\n        var selection = session.getSelection();\n        session.$selectLongWords = true;\n\n        selection.moveCursorDown();\n        selection.moveCursorLineEnd();\n        assert.position(selection.getCursor(), 1, 23);\n\n        selection.moveCursorWordLeft();\n        assert.position(selection.getCursor(), 1, 20);\n\n        selection.moveCursorWordLeft();\n        assert.position(selection.getCursor(), 1, 15);\n\n        selection.moveCursorWordLeft();\n        assert.position(selection.getCursor(), 1, 6);\n\n        selection.moveCursorWordLeft();\n        assert.position(selection.getCursor(), 1, 1);\n\n        // wrap line\n        selection.moveCursorWordLeft();\n        assert.position(selection.getCursor(), 0, 0);\n\n        selection.moveCursorWordLeft();\n        assert.position(selection.getCursor(), 0, 0);\n    },\n\n    \"test: moveCursor word left with umlauts\" : function() {\n        var session = new EditSession(\" Fuß Füße\");\n        session.$selectLongWords = true;\n\n        var selection = session.getSelection();\n        selection.moveCursorTo(0, 9);\n        selection.moveCursorWordLeft();\n        assert.position(selection.getCursor(), 0, 5);\n\n        selection.moveCursorWordLeft();\n        assert.position(selection.getCursor(), 0, 1);\n    },\n\n    \"test: select word left if cursor in word\" : function() {\n        var session = new EditSession(\"Juhu Kinners\");\n        var selection = session.getSelection();\n        session.$selectLongWords = true;\n\n        selection.moveCursorTo(0, 8);\n\n        selection.moveCursorWordLeft();\n        assert.position(selection.getCursor(), 0, 5);\n    },\n\n    \"test: select word right and select\" : function() {\n        var session = new EditSession(\"Juhu Kinners\");\n        var selection = session.getSelection();\n\n        selection.moveCursorTo(0, 0);\n        selection.selectWordRight();\n\n        var range = selection.getRange();\n\n        assert.position(range.start, 0, 0);\n        assert.position(range.end, 0, 4);\n    },\n\n    \"test: select word left and select\" : function() {\n        var session = new EditSession(\"Juhu Kinners\");\n        var selection = session.getSelection();\n\n        selection.moveCursorTo(0, 3);\n        selection.selectWordLeft();\n\n        var range = selection.getRange();\n\n        assert.position(range.start, 0, 0);\n        assert.position(range.end, 0, 3);\n    },\n\n    \"test: select word with cursor in word should select the word\" : function() {\n        var session = new EditSession(\"Juhu Kinners 123\");\n        var selection = session.getSelection();\n\n        selection.moveCursorTo(0, 8);\n        selection.selectWord();\n\n        var range = selection.getRange();\n        assert.position(range.start, 0, 5);\n        assert.position(range.end, 0, 12);\n    },\n\n    \"test: select word with cursor in word including right whitespace should select the word\" : function() {\n        var session = new EditSession(\"Juhu Kinners      123\");\n        var selection = session.getSelection();\n\n        selection.moveCursorTo(0, 8);\n        selection.selectAWord();\n\n        var range = selection.getRange();\n        assert.position(range.start, 0, 5);\n        assert.position(range.end, 0, 18);\n    },\n\n    \"test: select word with cursor betwen white space and word should select the word\" : function() {\n        var session = new EditSession(\"Juhu Kinners\");\n        var selection = session.getSelection();\n        session.$selectLongWords = true;\n\n        selection.moveCursorTo(0, 4);\n        selection.selectWord();\n\n        var range = selection.getRange();\n        assert.position(range.start, 0, 0);\n        assert.position(range.end, 0, 4);\n\n        selection.moveCursorTo(0, 5);\n        selection.selectWord();\n\n        var range = selection.getRange();\n        assert.position(range.start, 0, 5);\n        assert.position(range.end, 0, 12);\n    },\n\n    \"test: select word with cursor in white space should select white space\" : function() {\n        var session = new EditSession(\"Juhu  Kinners\");\n        var selection = session.getSelection();\n        session.$selectLongWords = true;\n\n        selection.moveCursorTo(0, 5);\n        selection.selectWord();\n\n        var range = selection.getRange();\n        assert.position(range.start, 0, 4);\n        assert.position(range.end, 0, 6);\n    },\n\n    \"test: moving cursor should fire a 'changeCursor' event\" : function() {\n        var session = new EditSession(\"Juhu  Kinners\");\n        var selection = session.getSelection();\n        session.$selectLongWords = true;\n\n        selection.moveCursorTo(0, 5);\n\n        var called = false;\n        selection.addEventListener(\"changeCursor\", function() {\n           called = true;\n        });\n\n        selection.moveCursorTo(0, 6);\n        assert.ok(called);\n    },\n\n    \"test: calling setCursor with the same position should not fire an event\": function() {\n        var session = new EditSession(\"Juhu  Kinners\");\n        var selection = session.getSelection();\n        session.$selectLongWords = true;\n\n        selection.moveCursorTo(0, 5);\n\n        var called = false;\n        selection.addEventListener(\"changeCursor\", function() {\n           called = true;\n        });\n\n        selection.moveCursorTo(0, 5);\n        assert.notOk(called);\n    },\n\n    \"test: moveWordright should move past || and [\": function() {\n        var session = new EditSession(\"||foo[\");\n        var selection = session.getSelection();\n        session.$selectLongWords = true;\n\n        // Move behind ||foo\n        selection.moveCursorWordRight();\n        assert.position(selection.getCursor(), 0, 5);\n\n        // Move behind [\n        selection.moveCursorWordRight();\n        assert.position(selection.getCursor(), 0, 6);\n    },\n\n    \"test: moveWordLeft should move past || and [\": function() {\n        var session = new EditSession(\"||foo[\");\n        var selection = session.getSelection();\n        session.$selectLongWords = true;\n\n        selection.moveCursorTo(0, 6);\n\n        // Move behind [foo\n        selection.moveCursorWordLeft();\n        assert.position(selection.getCursor(), 0, 2);\n\n        // Move behind ||\n        selection.moveCursorWordLeft();\n        assert.position(selection.getCursor(), 0, 0);\n    },\n\n    \"test: move cursor to line start should move cursor to end of the indentation first\": function() {\n        var session = new EditSession(\"12\\n    Juhu\\n12\");\n        var selection = session.getSelection();\n\n        selection.moveCursorTo(1, 6);\n        selection.moveCursorLineStart();\n\n        assert.position(selection.getCursor(), 1, 4);\n    },\n\n    \"test: move cursor to line start when the cursor is at the end of the indentation should move cursor to column 0\": function() {\n        var session = new EditSession(\"12\\n    Juhu\\n12\");\n        var selection = session.getSelection();\n\n        selection.moveCursorTo(1, 4);\n        selection.moveCursorLineStart();\n\n        assert.position(selection.getCursor(), 1, 0);\n    },\n\n    \"test: move cursor to line start when the cursor is at column 0 should move cursor to the end of the indentation\": function() {\n        var session = new EditSession(\"12\\n    Juhu\\n12\");\n        var selection = session.getSelection();\n\n        selection.moveCursorTo(1, 0);\n        selection.moveCursorLineStart();\n\n        assert.position(selection.getCursor(), 1, 4);\n    },\n\n    // Eclipse style\n    \"test: move cursor to line start when the cursor is before the initial indentation should move cursor to the end of the indentation\": function() {\n        var session = new EditSession(\"12\\n    Juhu\\n12\");\n        var selection = session.getSelection();\n\n        selection.moveCursorTo(1, 2);\n        selection.moveCursorLineStart();\n\n        assert.position(selection.getCursor(), 1, 4);\n    },\n\n    \"test go line up when in the middle of the first line should go to document start\": function() {\n        var session = new EditSession(\"juhu kinners\");\n        var selection = session.getSelection();\n\n        selection.moveCursorTo(0, 4);\n        selection.moveCursorUp();\n\n        assert.position(selection.getCursor(), 0, 0);\n    },\n\n    \"test: (wrap) go line up when in the middle of the first line should go to document start\": function() {\n        var session = new EditSession(\"juhu kinners\");\n        session.setWrapLimitRange(5, 5);\n        session.adjustWrapLimit(80);\n\n        var selection = session.getSelection();\n\n        selection.moveCursorTo(0, 4);\n        selection.moveCursorUp();\n\n        assert.position(selection.getCursor(), 0, 0);\n    },\n\n\n    \"test go line down when in the middle of the last line should go to document end\": function() {\n        var session = new EditSession(\"juhu kinners\");\n        var selection = session.getSelection();\n\n        selection.moveCursorTo(0, 4);\n        selection.moveCursorDown();\n\n        assert.position(selection.getCursor(), 0, 12);\n    },\n\n    \"test (wrap) go line down when in the middle of the last line should go to document end\": function() {\n        var session = new EditSession(\"juhu kinners\");\n        session.setWrapLimitRange(8, 8);\n        session.adjustWrapLimit(80);\n\n        var selection = session.getSelection();\n\n        selection.moveCursorTo(0, 10);\n        selection.moveCursorDown();\n\n        assert.position(selection.getCursor(), 0, 12);\n    },\n\n    \"test go line up twice and then once down when in the second should go back to the previous column\": function() {\n        var session = new EditSession(\"juhu\\nkinners\");\n        var selection = session.getSelection();\n\n        selection.moveCursorTo(1, 4);\n        selection.moveCursorUp();\n        selection.moveCursorUp();\n        selection.moveCursorDown();\n\n        assert.position(selection.getCursor(), 1, 4);\n    },\n\n    \"test (keyboard navigation) when curLine is not EOL and targetLine is all whitespace new column should be current column\": function() {\n        var session = new EditSession(\"function (a) {\\n    \\n}\");\n        var selection = session.getSelection();\n\n        selection.moveCursorTo(2, 0);\n        selection.moveCursorUp();\n\n        assert.position(selection.getCursor(), 1, 0);\n    },\n\n    \"test (keyboard navigation) when curLine is EOL and targetLine is shorter than current column, new column should be targetLine's EOL\": function() {\n        var session = new EditSession(\"function (a) {\\n    \\n}\");\n        var selection = session.getSelection();\n\n        selection.moveCursorTo(0, 14);\n        selection.moveCursorDown();\n\n        assert.position(selection.getCursor(), 1, 4);\n    },\n\n    \"test fromJSON/toJSON\": function() {\n        var session = new EditSession(\"function (a) {\\n    \\n}\");\n        var selection = session.getSelection();\n\n        selection.moveCursorTo(0, 14);\n        selection.moveCursorDown();\n        assert.position(selection.getCursor(), 1, 4);\n        var data = selection.toJSON();\n        data = JSON.parse(JSON.stringify(data));\n        selection.moveCursorDown();        \n        assert.position(selection.getCursor(), 2, 1);\n        \n        assert.ok(!selection.isEqual(data));\n        \n        selection.fromJSON(data);\n        assert.position(selection.getCursor(), 1, 4);\n        assert.ok(selection.isEqual(data));\n    }\n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main) {\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n}\n"
  },
  {
    "path": "lib/ace/snippets/_.snippets",
    "content": "# Global snippets\n\n# (c) holds no legal value ;)\nsnippet c)\n\tCopyright `&enc[:2] == \"utf\" ? \"©\" : \"(c)\"` `strftime(\"%Y\")` ${1:`g:snips_author`}. All Rights Reserved.${2}\nsnippet date\n\t`strftime(\"%Y-%m-%d\")`\nsnippet ddate\n\t`strftime(\"%B %d, %Y\")`\nsnippet time\n\t`strftime(\"%H:%M\")`\nsnippet lorem\n\tLorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\nsnippet GPL2\n\t${1:One line to give the program's name and a brief description.}\n\tCopyright (C) `strftime(\"%Y\")` ${2:copyright holder}\n\t\n\tThis program is free software; you can redistribute it and/or modify\n\tit under the terms of the GNU General Public License as published by\n\tthe Free Software Foundation; either version 2 of the License, or\n\t(at your option) any later version.\n\t\n\tThis program is distributed in the hope that it will be useful,\n\tbut WITHOUT ANY WARRANTY; without even the implied warranty of\n\tMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\tGNU General Public License for more details.\n\t\n\tYou should have received a copy of the GNU General Public License\n\talong with this program; if not, write to the Free Software Foundation,\n\tInc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n\n\t${3}\nsnippet LGPL2\n\t${1:One line to give the program's name and a brief description.}\n\tCopyright (C) `strftime(\"%Y\")` ${2:copyright holder}\n\t\n\tThis library is free software; you can redistribute it and/or modify\n\tit under the terms of the GNU Lesser General Public License as published\n\tby the Free Software Foundation; either version 2.1 of the License, or\n\t(at your option) any later version.\n\t\n\tThis library is distributed in the hope that it will be useful,\n\tbut WITHOUT ANY WARRANTY; without even the implied warranty of\n\tMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n\tGNU Lesser General Public License for more details.\n\t\n\tYou should have received a copy of the GNU Lesser General Public License\n\talong with this library; if not, write to the Free Software Foundation,\n\tInc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n\n\t${3}\nsnippet GPL3\n\t${1:one line to give the program's name and a brief description.}\n\tCopyright (C) `strftime(\"%Y\")` ${2:copyright holder}\n\t\n\tThis program is free software: you can redistribute it and/or modify\n\tit under the terms of the GNU General Public License as published by\n\tthe Free Software Foundation, either version 3 of the License, or\n\t(at your option) any later version.\n\t\n\tThis program is distributed in the hope that it will be useful,\n\tbut WITHOUT ANY WARRANTY; without even the implied warranty of\n\tMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n\tGNU General Public License for more details.\n\t\n\tYou should have received a copy of the GNU General Public License\n\talong with this program.  If not, see <http://www.gnu.org/licenses/>.\n\t\n\t${3}\nsnippet LGPL3\n\t${1:One line to give the program's name and a brief description.}\n\tCopyright (C) `strftime(\"%Y\")` ${2:copyright holder}\n\t\n\tThis library is free software; you can redistribute it and/or modify\n\tit under the terms of the GNU Lesser General Public License as published\n\tby the Free Software Foundation; either version 3 of the License, or\n\t(at your option) any later version.\n\t\n\tThis library is distributed in the hope that it will be useful,\n\tbut WITHOUT ANY WARRANTY; without even the implied warranty of\n\tMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n\tGNU Lesser General Public License for more details.\n\t\n\tYou should have received a copy of the GNU Lesser General Public License\n\talong with this library; if not, write to the Free Software Foundation,\n\tInc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n\n\t${3}\nsnippet BSD2\n\t${1:one line to give the program's name and a brief description}\n\tCopyright (C) `strftime(\"%Y\")` ${2:copyright holder}\n\tAll rights reserved.\n\t\n\tRedistribution and use in source and binary forms, with or without\n\tmodification, are permitted provided that the following conditions are met:\n\t1. Redistributions of source code must retain the above copyright\n\tnotice, this list of conditions and the following disclaimer.\n\t2. Redistributions in binary form must reproduce the above copyright\n\tnotice, this list of conditions and the following disclaimer in the\n\tdocumentation and/or other materials provided with the distribution.\n\t\n\tTHIS SOFTWARE IS PROVIDED BY $2 ''AS IS'' AND ANY\n\tEXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n\tWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n\tDISCLAIMED. IN NO EVENT SHALL $2 BE LIABLE FOR ANY\n\tDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n\t(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n\tLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n\tON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\t(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n\tSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\t\n\t\n\tThe views and conclusions contained in the software and documentation \n\tare those of the authors and should not be interpreted as representing\n\tofficial policies, either expressedor implied, of $2.\n\n\t${4}\nsnippet BSD3\n\t${1:one line to give the program's name and a brief description}\n\tCopyright (C) `strftime(\"%Y\")` ${2:copyright holder}\n\tAll rights reserved.\n\t\n\tRedistribution and use in source and binary forms, with or without\n\tmodification, are permitted provided that the following conditions are met:\n\t1. Redistributions of source code must retain the above copyright\n\tnotice, this list of conditions and the following disclaimer.\n\t2. Redistributions in binary form must reproduce the above copyright\n\tnotice, this list of conditions and the following disclaimer in the\n\tdocumentation and/or other materials provided with the distribution.\n\t3. Neither the name of the ${3:organization} nor the\n\tnames of its contributors may be used to endorse or promote products\n\tderived from this software without specific prior written permission.\n\t\n\tTHIS SOFTWARE IS PROVIDED BY $2 ''AS IS'' AND ANY\n\tEXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n\tWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n\tDISCLAIMED. IN NO EVENT SHALL $2 BE LIABLE FOR ANY\n\tDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n\t(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n\tLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n\tON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\t(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n\tSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n\t${4}\nsnippet BSD4\n\t${1:one line to give the program's name and a brief description}\n\tCopyright (C) `strftime(\"%Y\")` ${2:copyright holder}\n\tAll rights reserved.\n\t\n\tRedistribution and use in source and binary forms, with or without\n\tmodification, are permitted provided that the following conditions are met:\n\t1. Redistributions of source code must retain the above copyright\n\tnotice, this list of conditions and the following disclaimer.\n\t2. Redistributions in binary form must reproduce the above copyright\n\tnotice, this list of conditions and the following disclaimer in the\n\tdocumentation and/or other materials provided with the distribution.\n\t3. All advertising materials mentioning features or use of this software\n\tmust display the following acknowledgement:\n\tThis product includes software developed by the ${3:organization}.\n\t4. Neither the name of the $3 nor the\n\tnames of its contributors may be used to endorse or promote products\n\tderived from this software without specific prior written permission.\n\t\n\tTHIS SOFTWARE IS PROVIDED BY $2 ''AS IS'' AND ANY\n\tEXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n\tWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n\tDISCLAIMED. IN NO EVENT SHALL $2 BE LIABLE FOR ANY\n\tDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n\t(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n\tLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n\tON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\t(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n\tSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n\t${4}\nsnippet MIT\n\t${1:one line to give the program's name and a brief description}\n\tCopyright (C) `strftime(\"%Y\")` ${2:copyright holder}\n\t\n\tPermission is hereby granted, free of charge, to any person obtaining\n\ta copy of this software and associated documentation files (the \"Software\"),\n\tto deal in the Software without restriction, including without limitation\n\tthe rights to use, copy, modify, merge, publish, distribute, sublicense,\n\tand/or sell copies of the Software, and to permit persons to whom the \n\tSoftware is furnished to do so, subject to the following conditions:\n\t\n\tThe above copyright notice and this permission notice shall be included\n\tin all copies or substantial portions of the Software.\n\t\n\tTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n\tEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n\tOF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n\tIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n\tDAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n\tTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE\n\tOR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\t${3}\nsnippet APACHE\n\t${1:one line to give the program's name and a brief description}\n\tCopyright `strftime(\"%Y\")` ${2:copyright holder}\n\t\n\tLicensed under the Apache License, Version 2.0 (the \"License\");\n\tyou may not use this file except in compliance with the License.\n\tYou may obtain a copy of the License at\n\t\n\t\thttp://www.apache.org/licenses/LICENSE-2.0\n\t\n\tUnless required by applicable law or agreed to in writing, software\n\tdistributed under the License is distributed on an \"AS IS\" BASIS,\n\tWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\tSee the License for the specific language governing permissions and\n\tlimitations under the License.\n\n\t${3}\nsnippet BEERWARE \n\t${2:one line to give the program's name and a brief description}\n\tCopyright `strftime(\"%Y\")` ${3:copyright holder}\n\t\n\tLicensed under the \"THE BEER-WARE LICENSE\" (Revision 42):\n\t${1:`g:snips_author`} wrote this file. As long as you retain this notice you\n\tcan do whatever you want with this stuff. If we meet some day, and you think\n\tthis stuff is worth it, you can buy me a beer or coffee in return \n\n\t${4}\n\nsnippet WTFPL\n\t\t\tDO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE\n\t\t\t\t\tVersion 2, December 2004\n\n\tCopyright `strftime(\"%Y\")` ${1:copyright holder}\n\n\tEveryone is permitted to copy and distribute verbatim or modified\n\tcopies of this license document, and changing it is allowed as long\n\tas the name is changed.\n\n\t\t\tDO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE\n\tTERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n"
  },
  {
    "path": "lib/ace/snippets/_all_modes.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./_all_modes.snippets\");\nexports.scope = \"_all_modes\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/_all_modes.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/abap.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./abap.snippets\");\nexports.scope = \"abap\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/abap.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/abc.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./abc.snippets\");\nexports.scope = \"abc\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/abc.snippets",
    "content": "\nsnippet zupfnoter.print\n\t%%%%hn.print {\"startpos\": ${1:pos_y}, \"t\":\"${2:title}\", \"v\":[${3:voices}], \"s\":[[${4:syncvoices}1,2]], \"f\":[${5:flowlines}],  \"sf\":[${6:subflowlines}], \"j\":[${7:jumplines}]}\n\nsnippet zupfnoter.note\n\t%%%%hn.note {\"pos\": [${1:pos_x},${2:pos_y}], \"text\": \"${3:text}\", \"style\": \"${4:style}\"}\n\nsnippet zupfnoter.annotation\n\t%%%%hn.annotation {\"id\": \"${1:id}\", \"pos\": [${2:pos}], \"text\": \"${3:text}\"}\n\nsnippet zupfnoter.lyrics\n\t%%%%hn.lyrics {\"pos\": [${1:x_pos},${2:y_pos}]}\n\nsnippet zupfnoter.legend\n\t%%%%hn.legend {\"pos\": [${1:x_pos},${2:y_pos}]}\n\n\n\nsnippet zupfnoter.target\n\t\"^:${1:target}\"\n\nsnippet zupfnoter.goto\n\t\"^@${1:target}@${2:distance}\"\n\nsnippet zupfnoter.annotationref\n\t\"^#${1:target}\"\n\nsnippet zupfnoter.annotation\n\t\"^!${1:text}@${2:x_offset},${3:y_offset}\"\n\n\n"
  },
  {
    "path": "lib/ace/snippets/actionscript.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./actionscript.snippets\");\nexports.scope = \"actionscript\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/actionscript.snippets",
    "content": "snippet main\n\tpackage {\n\t\timport flash.display.*;\n\t\timport flash.Events.*;\n\t\n\t\tpublic class Main extends Sprite {\n\t\t\tpublic function Main (\t) {\n\t\t\t\ttrace(\"start\");\n\t\t\t\tstage.scaleMode = StageScaleMode.NO_SCALE;\n\t\t\t\tstage.addEventListener(Event.RESIZE, resizeListener);\n\t\t\t}\n\t\n\t\t\tprivate function resizeListener (e:Event):void {\n\t\t\t\ttrace(\"The application window changed size!\");\n\t\t\t\ttrace(\"New width:  \" + stage.stageWidth);\n\t\t\t\ttrace(\"New height: \" + stage.stageHeight);\n\t\t\t}\n\t\n\t\t}\n\t\n\t}\nsnippet class\n\t${1:public|internal} class ${2:name} ${3:extends } {\n\t\tpublic function $2 (\t) {\n\t\t\t(\"start\");\n\t\t}\n\t}\nsnippet all\n\tpackage name {\n\n\t\t${1:public|internal|final} class ${2:name} ${3:extends } {\n\t\t\tprivate|public| static const FOO = \"abc\";\n\t\t\tprivate|public| static var BAR = \"abc\";\n\n\t\t\t// class initializer - no JIT !! one time setup\n\t\t\tif Cababilities.os == \"Linux|MacOS\" {\n\t\t\t\tFOO = \"other\";\n\t\t\t}\n\n\t\t\t// constructor:\n\t\t\tpublic function $2 (\t){\n\t\t\t\tsuper2();\n\t\t\t\ttrace(\"start\");\n\t\t\t}\n\t\t\tpublic function name (a, b...){\n\t\t\t\tsuper.name(..);\n\t\t\t\tlable:break\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction A(){\n\t\t// A can only be accessed within this file\n\t}\nsnippet switch\n\tswitch(${1}){\n\t\tcase ${2}:\n\t\t\t${3}\n\t\tbreak;\n\t\tdefault:\n\t}\nsnippet case\n\t\tcase ${1}:\n\t\t\t${2}\n\t\tbreak;\nsnippet package\n\tpackage ${1:package}{\n\t\t${2}\n\t}\nsnippet wh\n\twhile ${1:cond}{\n\t\t${2}\n\t}\nsnippet do\n\tdo {\n\t\t${2}\n\t} while (${1:cond})\nsnippet while\n\twhile ${1:cond}{\n\t\t${2}\n\t}\nsnippet for enumerate names\n\tfor (${1:var} in ${2:object}){\n\t\t${3}\n\t}\nsnippet for enumerate values\n\tfor each (${1:var} in ${2:object}){\n\t\t${3}\n\t}\nsnippet get_set\n\tfunction get ${1:name} {\n\t\treturn ${2}\n\t}\n\tfunction set $1 (newValue) {\n\t\t${3}\n\t}\nsnippet interface\n\tinterface name {\n\t\tfunction method(${1}):${2:returntype};\n\t}\nsnippet try\n\ttry {\n\t\t${1}\n\t} catch (error:ErrorType) {\n\t\t${2}\n\t} finally {\n\t\t${3}\n\t}\n# For Loop (same as c.snippet)\nsnippet for for (..) {..}\n\tfor (${2:i} = 0; $2 < ${1:count}; $2${3:++}) {\n\t\t${4:/* code */}\n\t}\n# Custom For Loop\nsnippet forr\n\tfor (${1:i} = ${2:0}; ${3:$1 < 10}; $1${4:++}) {\n\t\t${5:/* code */}\n\t}\n# If Condition\nsnippet if\n\tif (${1:/* condition */}) {\n\t\t${2:/* code */}\n\t}\nsnippet el\n\telse {\n\t\t${1}\n\t}\n# Ternary conditional\nsnippet t\n\t${1:/* condition */} ? ${2:a} : ${3:b}\nsnippet fun\n\tfunction ${1:function_name}(${2})${3}\n\t{\n\t\t${4:/* code */}\n\t}\n# FlxSprite (usefull when using the flixel library)\nsnippet FlxSprite\n\tpackage\n\t{\n\t\timport org.flixel.*\n\n\t\tpublic class ${1:ClassName} extends ${2:FlxSprite}\n\t\t{\n\t\t\tpublic function $1(${3: X:Number, Y:Number}):void\n\t\t\t{\n\t\t\t\tsuper(X,Y);\n\t\t\t\t${4: //code...}\n\t\t\t}\n\n\t\t\toverride public function update():void\n\t\t\t{\n\t\t\t\tsuper.update();\n\t\t\t\t${5: //code...}\n\t\t\t}\n\t\t}\n\t}\n\n"
  },
  {
    "path": "lib/ace/snippets/ada.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./ada.snippets\");\nexports.scope = \"ada\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/ada.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/all_modes.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./all_modes.snippets\");\nexports.scope = \"all_modes\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/all_modes.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/apache.snippets",
    "content": "# Snippets for code blocks used oftenly in Apache files.\n# <Directory>\nsnippet dir\n\t<Directory ${1:/}>\n\t\tDirectoryIndex ${2:index.html}\n\t\tOrder Deny,Allow\n\t\tDeny from All\n\t</Directory>\n# <FilesMatch>   \nsnippet filesmatch\n\t<FilesMatch \"${1:regex}\">\n\t\t${2}\n\t</FilesMatch>\n# <IfModule>\nsnippet ifmodule\n\t<IfModule ${1:mod_example.c}>\n\t\t${2}\n\t</IfModule>\n# <LimitExcept>\nsnippet limitexcept\n\t<LimitExcept ${1:POST GET}>\n\t\t${2}\n\t</LimitExcept>\n# <Proxy>\nsnippet proxy\n\t<Proxy ${1:*}>\n\t\t${2}\n\t</Proxy>\n# <VirtualHost>\nsnippet virtualhost\n\t<VirtualHost ${1:*}:${2:80}>\n\t\tServerAdmin ${3:webmaster@example.com}\n\t\tDocumentRoot ${4:/www/example.com}\n\t\tServerName ${5:www.example.com}\n\t</VirtualHost>\n"
  },
  {
    "path": "lib/ace/snippets/apache_conf.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./apache_conf.snippets\");\nexports.scope = \"apache_conf\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/apache_conf.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/applescript.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./applescript.snippets\");\nexports.scope = \"applescript\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/applescript.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/asciidoc.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./asciidoc.snippets\");\nexports.scope = \"asciidoc\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/asciidoc.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/assembly_x86.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./assembly_x86.snippets\");\nexports.scope = \"assembly_x86\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/assembly_x86.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/autohotkey.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./autohotkey.snippets\");\nexports.scope = \"autohotkey\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/autohotkey.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/autoit.snippets",
    "content": "snippet if\n\tIf ${1:condition} Then\n\t\t${2:; True code}\n\tEndIf\nsnippet el\n\tElse\n\t\t${1}\nsnippet elif\n\tElseIf ${1:condition} Then\n\t\t${2:; True code}\n# If/Else block\nsnippet ifel\n\tIf ${1:condition} Then\n\t\t${2:; True code}\n\tElse\n\t\t${3:; Else code}\n\tEndIf\n# If/ElseIf/Else block\nsnippet ifelif\n\tIf ${1:condition 1} Then\n\t\t${2:; True code}\n\tElseIf ${3:condition 2} Then\n\t\t${4:; True code}\n\tElse\n\t\t${5:; Else code}\n\tEndIf\n# Switch block\nsnippet switch\n\tSwitch (${1:condition})\n\tCase {$2:case1}:\n\t\t{$3:; Case 1 code}\n\tCase Else:\n\t\t{$4:; Else code}\n\tEndSwitch\n# Select block\nsnippet select\n\tSelect (${1:condition})\n\tCase {$2:case1}:\n\t\t{$3:; Case 1 code}\n\tCase Else:\n\t\t{$4:; Else code}\n\tEndSelect\n# While loop\nsnippet while\n\tWhile (${1:condition})\n\t\t${2:; code...}\n\tWEnd\n# For loop\nsnippet for\n\tFor ${1:n} = ${3:1} to ${2:count}\n\t\t${4:; code...}\n\tNext\n# New Function\nsnippet func\n\tFunc ${1:fname}(${2:`indent('.') ? 'self' : ''`}):\n\t\t${4:Return}\n\tEndFunc\n# Message box\nsnippet msg\n\tMsgBox(${3:MsgType}, ${1:\"Title\"}, ${2:\"Message Text\"})\n# Debug Message\nsnippet debug\n\tMsgBox(0, \"Debug\", ${1:\"Debug Message\"})\n# Show Variable Debug Message\nsnippet showvar\n\tMsgBox(0, \"${1:VarName}\", $1)\n"
  },
  {
    "path": "lib/ace/snippets/batchfile.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./batchfile.snippets\");\nexports.scope = \"batchfile\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/batchfile.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/bro.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./.snippets\");\nexports.scope = \"\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/c.snippets",
    "content": "## Main\n# main\nsnippet main\n\tint main(int argc, const char *argv[])\n\t{\n\t\t${1}\n\t\treturn 0;\n\t}\n# main(void)\nsnippet mainn\n\tint main(void)\n\t{\n\t\t${1}\n\t\treturn 0;\n\t}\n##\n## Preprocessor \n# #include <...>\nsnippet inc\n\t#include <${1:stdio}.h>${2}\n# #include \"...\"\nsnippet Inc\n\t#include \"${1:`Filename(\"$1.h\")`}\"${2}\n# ifndef...define...endif\nsnippet ndef\n\t#ifndef $1\n\t#define ${1:SYMBOL} ${2:value}\n\t#endif${3}\n# define\nsnippet def\n\t#define\n# ifdef...endif\nsnippet ifdef\n\t#ifdef ${1:FOO}\n\t\t${2:#define }\n\t#endif${3}\n# if\nsnippet #if\n\t#if ${1:FOO}\n\t\t${2}\n\t#endif\n# header include guard\nsnippet once\n\t#ifndef ${1:`toupper(Filename('$1_H', 'UNTITLED_H'))`}\n\n\t#define $1\n\n\t${2}\n\n\t#endif /* end of include guard: $1 */\n##\n## Control Statements\n# if\nsnippet if\n\tif (${1:/* condition */}) {\n\t\t${2:/* code */}\n\t}${3}\n# else\nsnippet el\n\telse {\n\t\t${1}\n\t}${3}\n# else if\nsnippet elif\n\telse if (${1:/* condition */}) {\n\t\t${2:/* code */}\n\t}${3}\n# ternary\nsnippet t\n\t${1:/* condition */} ? ${2:a} : ${3:b}\n# switch\nsnippet switch\n\tswitch (${1:/* variable */}) {\n\t\tcase ${2:/* variable case */}:\n\t\t\t${3}\n\t\t\t${4:break;}${5}\n\t\tdefault:\n\t\t\t${6}\n\t}${7}\n# switch without default\nsnippet switchndef\n\tswitch (${1:/* variable */}) {\n\t\tcase ${2:/* variable case */}:\n\t\t\t${3}\n\t\t\t${4:break;}${5}\n\t}${6}\n# case\nsnippet case\n\tcase ${1:/* variable case */}:\n\t\t${2}\n\t\t${3:break;}${4}\n##\n## Loops\n# for\nsnippet for\n\tfor (${2:i} = 0; $2 < ${1:count}; $2${3:++}) {\n\t\t${4:/* code */}\n\t}${5}\n# for (custom)\nsnippet forr\n\tfor (${1:i} = ${2:0}; ${3:$1 < 10}; $1${4:++}) {\n\t\t${5:/* code */}\n\t}${6}\n# while\nsnippet wh\n\twhile (${1:/* condition */}) {\n\t\t${2:/* code */}\n\t}${3}\n# do... while\nsnippet do\n\tdo {\n\t\t${2:/* code */}\n\t} while (${1:/* condition */});${3}\n##\n## Functions\n# function definition\nsnippet fun\n\t${1:void} ${2:function_name}(${3})\n\t{\n\t\t${4:/* code */}\n\t}${5}\n# function declaration\nsnippet fund\n\t${1:void} ${2:function_name}(${3});${4}\n##\n## Types\n# typedef\nsnippet td\n\ttypedef ${1:int} ${2:MyCustomType};${3}\n# struct\nsnippet st\n\tstruct ${1:`Filename('$1_t', 'name')`} {\n\t\t${2:/* data */}\n\t}${3: /* optional variable list */};${4}\n# typedef struct\nsnippet tds\n\ttypedef struct ${2:_$1 }{\n\t\t${3:/* data */}\n\t} ${1:`Filename('$1_t', 'name')`};${4}\n# typedef enum\nsnippet tde\n\ttypedef enum {\n\t\t${1:/* data */}\n\t} ${2:foo};${3}\n##\n## Input/Output\n# printf\nsnippet pr\n\tprintf(\"${1:%s}\\n\"${2});${3}\n# fprintf (again, this isn't as nice as TextMate's version, but it works)\nsnippet fpr\n\tfprintf(${1:stderr}, \"${2:%s}\\n\"${3});${4}\n# getopt\nsnippet getopt\n\tint choice;\n\twhile (1)\n\t{\n\t\tstatic struct option long_options[] =\n\t\t{\n\t\t\t/* Use flags like so:\n\t\t\t{\"verbose\",\tno_argument,\t&verbose_flag, 'V'}*/\n\t\t\t/* Argument styles: no_argument, required_argument, optional_argument */\n\t\t\t{\"version\", no_argument,\t0,\t'v'},\n\t\t\t{\"help\",\tno_argument,\t0,\t'h'},\n\t\t\t${1}\n\t\t\t{0,0,0,0}\n\t\t};\n\n\t\tint option_index = 0;\n\n\t\t/* Argument parameters:\n\t\t\tno_argument: \" \"\n\t\t\trequired_argument: \":\"\n\t\t\toptional_argument: \"::\" */\n\n\t\tchoice = getopt_long( argc, argv, \"vh\",\n\t\t\t\t\tlong_options, &option_index);\n\n\t\tif (choice == -1)\n\t\t\tbreak;\n\n\t\tswitch( choice )\n\t\t{\n\t\t\tcase 'v':\n\t\t\t\t${2}\n\t\t\t\tbreak;\n\n\t\t\tcase 'h':\n\t\t\t\t${3}\n\t\t\t\tbreak;\n\n\t\t\tcase '?':\n\t\t\t\t/* getopt_long will have already printed an error */\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\t/* Not sure how to get here... */\n\t\t\t\treturn EXIT_FAILURE;\n\t\t}\n\t}\n\n\t/* Deal with non-option arguments here */\n\tif ( optind < argc )\n\t{\n\t\twhile ( optind < argc )\n\t\t{\n\t\t\t${4}\n\t\t}\n\t}\n##\n## Miscellaneous\n# This is kind of convenient\nsnippet .\n\t[${1}]${2}\n# GPL\nsnippet gpl\n\t/*\n\t * This program is free software; you can redistribute it and/or modify\n\t * it under the terms of the GNU General Public License as published by\n\t * the Free Software Foundation; either version 2 of the License, or\n\t * (at your option) any later version.\n\t *\n\t * This program is distributed in the hope that it will be useful,\n\t * but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n\t * GNU General Public License for more details.\n\t *\n\t * You should have received a copy of the GNU General Public License\n\t * along with this program; if not, write to the Free Software\n\t * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\n\t *\n\t * Copyright (C) ${1:Author}, `strftime(\"%Y\")`\n\t */\n\t\n\t${2}\n"
  },
  {
    "path": "lib/ace/snippets/c9search.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./c9search.snippets\");\nexports.scope = \"c9search\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/c9search.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/c_cpp.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./c_cpp.snippets\");\nexports.scope = \"c_cpp\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/c_cpp.snippets",
    "content": "## STL Collections\n# std::array\nsnippet array\n\tstd::array<${1:T}, ${2:N}> ${3};${4}\n# std::vector\nsnippet vector\n\tstd::vector<${1:T}> ${2};${3}\n# std::deque\nsnippet deque\n\tstd::deque<${1:T}> ${2};${3}\n# std::forward_list\nsnippet flist\n\tstd::forward_list<${1:T}> ${2};${3}\n# std::list\nsnippet list\n\tstd::list<${1:T}> ${2};${3}\n# std::set\nsnippet set\n\tstd::set<${1:T}> ${2};${3}\n# std::map\nsnippet map\n\tstd::map<${1:Key}, ${2:T}> ${3};${4}\n# std::multiset\nsnippet mset\n\tstd::multiset<${1:T}> ${2};${3}\n# std::multimap\nsnippet mmap\n\tstd::multimap<${1:Key}, ${2:T}> ${3};${4}\n# std::unordered_set\nsnippet uset\n\tstd::unordered_set<${1:T}> ${2};${3}\n# std::unordered_map\nsnippet umap\n\tstd::unordered_map<${1:Key}, ${2:T}> ${3};${4}\n# std::unordered_multiset\nsnippet umset\n\tstd::unordered_multiset<${1:T}> ${2};${3}\n# std::unordered_multimap\nsnippet ummap\n\tstd::unordered_multimap<${1:Key}, ${2:T}> ${3};${4}\n# std::stack\nsnippet stack\n\tstd::stack<${1:T}> ${2};${3}\n# std::queue\nsnippet queue\n\tstd::queue<${1:T}> ${2};${3}\n# std::priority_queue\nsnippet pqueue\n\tstd::priority_queue<${1:T}> ${2};${3}\n##\n## Access Modifiers\n# private\nsnippet pri\n\tprivate\n# protected\nsnippet pro\n\tprotected\n# public\nsnippet pub\n\tpublic\n# friend\nsnippet fr\n\tfriend\n# mutable\nsnippet mu\n\tmutable\n## \n## Class\n# class\nsnippet cl\n\tclass ${1:`Filename('$1', 'name')`} \n\t{\n\tpublic:\n\t\t$1(${2});\n\t\t~$1();\n\n\tprivate:\n\t\t${3:/* data */}\n\t};\n# member function implementation\nsnippet mfun\n\t${4:void} ${1:`Filename('$1', 'ClassName')`}::${2:memberFunction}(${3}) {\n\t\t${5:/* code */}\n\t}\n# namespace\nsnippet ns\n\tnamespace ${1:`Filename('', 'my')`} {\n\t\t${2}\n\t} /* namespace $1 */\n##\n## Input/Output\n# std::cout\nsnippet cout\n\tstd::cout << ${1} << std::endl;${2}\n# std::cin\nsnippet cin\n\tstd::cin >> ${1};${2}\n##\n## Iteration\n# for i \nsnippet fori\n\tfor (int ${2:i} = 0; $2 < ${1:count}; $2${3:++}) {\n\t\t${4:/* code */}\n\t}${5}\n\n# foreach\nsnippet fore\n\tfor (${1:auto} ${2:i} : ${3:container}) {\n\t\t${4:/* code */}\n\t}${5}\n# iterator\nsnippet iter\n\tfor (${1:std::vector}<${2:type}>::${3:const_iterator} ${4:i} = ${5:container}.begin(); $4 != $5.end(); ++$4) {\n\t\t${6}\n\t}${7}\n\n# auto iterator\nsnippet itera\n\tfor (auto ${1:i} = $1.begin(); $1 != $1.end(); ++$1) {\n\t\t${2:std::cout << *$1 << std::endl;}\n\t}${3}\n##\n## Lambdas\n# lamda (one line)\nsnippet ld\n\t[${1}](${2}){${3:/* code */}}${4}\n# lambda (multi-line)\nsnippet lld\n\t[${1}](${2}){\n\t\t${3:/* code */}\n\t}${4}\n"
  },
  {
    "path": "lib/ace/snippets/chef.snippets",
    "content": "# Opscode Chef Cookbook Recipe Resources\n# Snippet by: Mike Smullin <mike@smullindesign.com>\n# Based on: http://wiki.opscode.com/display/chef/Resources\n\n# @TODO: Include Meta attributes and actions in all snippets\n# @TODO: Finish writing snippets for remaining Resources\n\nsnippet cookbook_file\n\t# Cookbook File resource\n\tcookbook_file ${1:\"/path/to/file\"} do # The remote path where the file will reside\n\t\t${2:#}backup ${3} # How many backups of this file to keep. Set to false  if you want no backups\n\t\t${4:#}group ${5} # The group owner of the file (string or id)\n\t\t${6:#}mode ${7} # The octal mode of the file - e.g. 0755\n\t\t${8:#}owner ${9} # The owner for the file\n\t\t${10:#}source ${11} # The basename of the source file\n\t\t${12:#}cookbook ${13} # The cookbook this file is stored in\n\n\t\t${14:#}${15: action :create} # Create this file (Default)\n\t\t${16:#}${17: action :create_if_missing} # Create only if it doesn't exist yet\n\t\t${18:#}${19: action :delete} # Delete this file\n\tend\n\nsnippet execute\n\t# Execute resource\n\texecute ${1:\"command to execute\"} do # The command to execute\n\t\t${2:#}creates ${3:nil} # A file this command creates - if the file exists, the command will not be run.\n\t\t${4:#}cwd ${5:nil} # Current working directory to run the command from.\n\t\t${6:#}environment ${7:nil} # A hash of environment variables to set before running this command.\n\t\t${8:#}group ${9:nil} # A group name or group ID that we should change to before running this command.\n\t\t${10:#}path ${11:nil} # An array of paths to use when searching for the command. Nil uses system path.\n\t\t${12:#}returns ${13:0} # The return value of the command - this resource raises an exception if the return value does not match.\n\t\t${14:#}timeout ${15:nil} # How many seconds to let the command run before timing it out.\n\t\t${16:#}user ${17:nil} # A user name or user ID that we should change to before running this command.\n\t\t${18:#}umask ${19:nil} # Umask for files created by the command\n\n\t\t${20:#}${21:action :run} # Run this command (Default)\n\t\t${22:#}${23:action :nothing} # Do not run this command\n\tend\n\nsnippet link\n\t# Link resource\n\tlink ${1:\"/target/file\"} do # The file name of the link\n\t\t${2:#}to ${3} # The real file you want to link to\n\t\t${4:#}link_type ${5:symbolic} # Either :symbolic or :hard\n\t\t${6:#}owner ${7} # The owner of the symlink\n\t\t${8:#}group ${9} # The group of the symlink\n\n\t\t${10:#}${11:action :create} # Create a link (Default)\n\t\t${12:#}${13:action :delete} # Delete a link\n\tend\n\nsnippet package\n\t# Package resource\n\tpackage ${1:\"package_name\"} do # Name of the package to install\n\t\t${2:#}version ${3:nil} # The version of the package to install/upgrade\n\t\t${4:#}response_file ${5:nil} # An optional response file - used to pre-seed packages (note: the file is fetched by Remote File)\n\t\t${6:#}source ${7} # Used to provide an optional package source for providers that use a local file (rubygems, dpkg and rpm)\n\t\t${8:#}options ${9:nil} # Add additional options to the underlying package command\n\t\t${10:#}gem_binary ${11:gem} # A gem_package attribut to specify a gem binary. Useful for installing ruby 1.9 gems while running chef in ruby 1.8\n\n\t\t${12:#}${13:action :install} # Install a package - if version is provided, install that specific version (Default)\n\t\t${14:#}${15:action :upgrade} # Upgrade a package - if version is provided, upgrade to that specific version\n\t\t${16:#}${17:action :remove} # Remove a package\n\t\t${18:#}${19:action :purge} # Purge a package (this usually entails removing configuration files as well as the package itself)\n\tend\n\nsnippet service\n\t# Service resource\n\tservice ${1:\"service_name\"} do # Name of the service\n\t\t${2:#}enabled ${3:nil} # Whether the service is enabled at boot time\n\t\t${4:#}running ${5:nil} # Make sure the service is running. Start if stopped\n\t\t${6:#}pattern ${7} # Pattern to look for in the process table\n\t\t${8:#}start_command ${9:nil} # Command used to start this service\n\t\t${10:#}stop_command ${11:nil} # Command used to stop this service\n\t\t${12:#}status_command ${13:nil} # Command used to check the service run status\n\t\t${14:#}restart_command ${15:nil} # Command used to restart this service\n\t\t${16:#}reload_command ${17:nil} # Command used to tell this service to reload its configuration\n\t\t${18:#}supports ${19:false} # Features this service supports, ie :restart, :reload, :status\n\n\t\t${20:#}${21:action :enable} # Enable this service\n\t\t${22:#}${23:action :disable} # Disable this service\n\t\t${24:#}${25:action :nothing} # Don't do anything with this service (Default)\n\t\t${26:#}${27:action :start} # Start this service\n\t\t${28:#}${29:action :stop} # Stop this service\n\t\t${30:#}${31:action :restart} # Restart this service\n\t\t${32:#}${33:action :reload} # Reload the configuration for this service\n\tend\n\nsnippet file\n\t# File resource\n\tfile ${1:\"/path/to/file\"} do # Path to the file\n\t\t${2:#}backup ${3:5} # How many backups of this file to keep. Set to false if you want no backups.\n\t\t${4:#}owner ${5} # The owner for the file\n\t\t${6:#}group ${7} # The group owner of the file (string or id)\n\t\t${8:#}mode ${9} # The octal mode of the file (4-digit format)\n\t\t${10:#}content ${11:nil} # A string to write to the file. This will replace any previous content if set\n\n\t\t${12:#}${13:action :create} # Create this file (Default)\n\t\t${14:#}${15:action :delete} # Delete this file\n\t\t${16:#}${17:action :touch} # Touch this file (update the mtime/atime)\n\tend\n\nsnippet directory\n\t# Directory resource\n\tdirectory ${1:\"/path/to/dir\"} do # The path to the directory\n\t\t${2:#}group ${3} # The group owner of the directory (string or id)\n\t\t${4:#}mode ${5} # The octal mode of the directory, eg 0755\n\t\t${6:#}owner ${7} # The owner for the directory\n\t\t${10:#}recursive ${11:false} # When deleting the directory, delete it recursively. When creating the directory, create recursively (ie, mkdir -p)\n\n\t\t${12:#}${13:action :create} # Create this directory (Default)\n\t\t${14:#}${15:action :delete} # Delete this directory\n\tend\n\nsnippet template\n\t# Template resource\n\ttemplate ${1:\"/path/to/file\"} do # Path to the file\n\t\t${2:#}cookbook ${3:nil} # Specify the cookbook where the template is located, default is current cookbook\n\t\t${4:#}source ${5:nil} # Template source file. Found in templates/default for the cookbook\n\t\t${6:#}variables ${7} # Variables to use in the template\n\t\t${8:#}local ${9:false} # Is the template already present on the node?\n\t\t${10:#}backup ${11:5} # How many backups of this file to keep. Set to false if you want no backups.\n\t\t${12:#}owner ${13} # The owner for the file\n\t\t${14:#}group ${15} # The group owner of the file (string or id)\n\t\t${16:#}mode ${17} # The octal mode of the file (4-digit format)\n\t\t${18:#}content ${19:nil} # A string to write to the file. This will replace any previous content if set\n\n\t\t${20:#}${21:action :create} # Create the file (Default)\n\t\t${22:#}${23:action :delete} # Delete this file\n\t\t${24:#}${25:action :touch} # Touch this file (update the mtime/atime)\n\tend\n\nsnippet svn\n\t# SCM Resource, Chef::Provider::Subversion\n\tsvn ${1:\"/destination/path\"} do # Path to clone/checkout/export the source to\n\t\t${2:#}repository ${3} # URI of the repository\n\t\t${4:#}revision ${5:\"HEAD\"} # revision to checkout. can be symbolic, like \"HEAD\" or an SCM specific revision id\n\t\t${6:#}reference ${7} # (Git only) alias for revision\n\t\t${8:#}user ${9:nil} # System user to own the checked out code\n\t\t${10:#}group ${11:nil} # System group to own the checked out code\n\t\t${12:#}svn_username ${13} # (Subversion only) Username for Subversion operations\n\t\t${14:#}svn_password ${15} # (Subversion only) Password for Subversion operations\n\t\t${16:#}svn_arguments ${17} # (Subversion only) Extra arguments passed to the subversion command\n\t\t\n\t\t${18:#}${19:action :sync} # Update the source to the specified revision, or get a new checkout (Default)\n\t\t${20:#}${21:action :checkout} # Checkout the source. Does nothing if a checkout is available\n\t\t${22:#}${23:action :export} # Export the source, excluding or removing any version control artifacts\n\tend\n\nsnippet git\n\t# SCM Resource, Chef::Provider::Git\n\tgit ${1:\"/destination/path\"} do # Path to clone/checkout/export the source to\n\t\t${2:#}repository ${3} # URI of the repository\n\t\t${4:#}revision ${5:\"HEAD\"} # revision to checkout. can be symbolic, like \"HEAD\" or an SCM specific revision id\n\t\t${6:#}reference ${7} # (Git only) alias for revision\n\t\t${8:#}user ${9:nil} # System user to own the checked out code\n\t\t${10:#}group ${11:nil} # System group to own the checked out code\n\t\t${12:#}depth ${13:nil} # (Git only) Number of past revisions to include in Git shallow clone\n\t\t${14:#}enable_submodules ${15:\"false\"} # (Git only) performs a submodule init and submodule update\n\t\t${16:#}remote ${17:\"origin\"} # (Git only) remote repository to use for syncing an existing clone\n\t\t${18:#}ssh_wrapper ${19} # (Git only) path to a wrapper script for running SSH with git. GIT_SSH environment variable is set to this.\n\t\t\n\t\t${20:#}${21:action :sync} # Update the source to the specified revision, or get a new clone (Default)\n\t\t${22:#}${23:action :checkout} # Clone the source. Does nothing if a checkout is available\n\t\t${24:#}${25:action :export} # Export the source, excluding or removing any version control artifacts\n\tend\n\nsnippet deploy\n\t# Deploy resource\n\tdeploy ${1:\"/deploy/dir/\"} do # Path to deploy to\n\t\t${2:#}deploy_to ${3} # The \"meta root\" for your application.\n\t\t${4:#}repository ${5} # URI of the repository\n\t\t${6:#}repo ${7} # alias for repository\n\t\t${8:#}revision ${9:\"HEAD\"} # revision to checkout. can be symbolic, like \"HEAD\" or an SCM specific revision id\n\t\t${10:#}branch ${11} # alias for revision\n\t\t${12:#}user ${13:nil} # System user to run the deploy as\n\t\t${14:#}group ${15:nil} # System group to run the deploy as\n\t\t${16:#}svn_username ${17} # (Subversion only) Username for Subversion operations}\n\t\t${18:#}svn_password ${19} # (Subversion only) Password for Subversion operations}\n\t\t${20:#}svn_arguments ${21} # (Subversion only) Extra arguments passed to the subversion command}\n\t\t${22:#}shallow_clone ${23:nil} # (Git only) boolean, true sets clone depth to 5\n\t\t${24:#}enable_submodules ${25:false} # (Git only) performs a submodule init and submodule update\n\t\t${26:#}remote ${27:\"origin\"} # (Git only) remote repository to use for syncing an existing clone\n\t\t${28:#}ssh_wrapper ${29} # (Git only) path to a wrapper script for running SSH with git. GIT_SSH environment variable is set to this.\n\t\t${30:#}git_ssh_wrapper ${31} # alias for ssh_wrapper\n\t\t${32:#}scm_provider ${33:Chef::Provider::Git} # SCM Provider to use.\n\t\t${34:#}repository_cache ${35: \"cached-copy\"} # Name of the subdirectory where the pristine copy of your app's source is kept\n\t\t${36:#}environment ${37} # A hash of the form {\"ENV_VARIABLE\"=>\"VALUE\"}}\n\t\t${38:#}purge_before_symlink ${39:%w(log tmp/pids public/system)} # An array of paths, relative to app root, to be removed from a checkout before symlinking\n\t\t${40:#}create_dirs_before_symlink ${41:%w(tmp public config)} # Directories to create before symlinking. Runs after purge_before_symlink\n\t\t${42:#}symlinks ${43:\"system\" => \"public/system\", \"pids\" => \"tmp/pids\", \"log\" => \"log\"} # A hash that maps files in the shared directory to their paths in the current release\n\t\t${44:#}symlink_before_migrate ${45:\"config/database.yml\" => \"config/database.yml\"} # A hash that maps files in the shared directory into the current release. Runs before migration\n\t\t${46:#}migrate ${47:false} # Should the migration command be executed? (true or false)\n\t\t${48:#}migration_command ${49} # A string containing a shell command to execute to run the migration\n\t\t${50:#}restart_command ${51:nil} # A code block to evaluate or a string containing a shell command\n\t\t${52:#}before_migrate ${53:\"deploy/before_migrate.rb\"} # A block or path to a file containing chef code to run before migrating\n\t\t${54:#}before_symlink ${55:\"deploy/before_symlink.rb\"} # A block or path to a file containing chef code to run before symlinking\n\t\t${56:#}before_restart ${57:\"deploy/before_restart.rb\"} # A block or path to a file containing chef code to run before restarting\n\t\t${58:#}after_restart ${59:\"deploy/after_restart.rb\"} # A block or path to a file containing chef code to run after restarting\n\t\t\n\t\t${60:#}${61::deploy} # Deploy the application (Default)\n\t\t${62:#}${63::force_deploy} # For the revision deploy strategy, this removes any existing release of the same code version and re-deploys in its place\n\t\t${64:#}${65::rollback} # Rollback the application to the previous release\n\tend\n"
  },
  {
    "path": "lib/ace/snippets/cirru.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./cirru.snippets\");\nexports.scope = \"cirru\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/cirru.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/clojure.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./clojure.snippets\");\nexports.scope = \"clojure\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/clojure.snippets",
    "content": "snippet comm\n\t(comment\n\t  ${1}\n\t  )\nsnippet condp\n\t(condp ${1:pred} ${2:expr}\n\t  ${3})\nsnippet def\n\t(def ${1})\nsnippet defm\n\t(defmethod ${1:multifn} \"${2:doc-string}\" ${3:dispatch-val} [${4:args}]\n\t  ${5})\nsnippet defmm\n\t(defmulti ${1:name} \"${2:doc-string}\" ${3:dispatch-fn})\nsnippet defma\n\t(defmacro ${1:name} \"${2:doc-string}\" ${3:dispatch-fn})\nsnippet defn\n\t(defn ${1:name} \"${2:doc-string}\" [${3:arg-list}]\n\t  ${4})\nsnippet defp\n\t(defprotocol ${1:name}\n\t  ${2})\nsnippet defr\n\t(defrecord ${1:name} [${2:fields}]\n\t  ${3:protocol}\n\t  ${4})\nsnippet deft\n\t(deftest ${1:name}\n\t    (is (= ${2:assertion})))\n\t  ${3})\nsnippet is\n\t(is (= ${1} ${2}))\nsnippet defty\n\t(deftype ${1:Name} [${2:fields}]\n\t  ${3:Protocol}\n\t  ${4})\nsnippet doseq\n\t(doseq [${1:elem} ${2:coll}]\n\t  ${3})\nsnippet fn\n\t(fn [${1:arg-list}] ${2})\nsnippet if\n\t(if ${1:test-expr}\n\t  ${2:then-expr}\n\t  ${3:else-expr})\nsnippet if-let \n\t(if-let [${1:result} ${2:test-expr}]\n\t\t(${3:then-expr} $1)\n\t\t(${4:else-expr}))\nsnippet imp\n\t(:import [${1:package}])\n\t& {:keys [${1:keys}] :or {${2:defaults}}}\nsnippet let\n\t(let [${1:name} ${2:expr}]\n\t\t${3})\nsnippet letfn\n\t(letfn [(${1:name) [${2:args}]\n\t          ${3})])\nsnippet map\n\t(map ${1:func} ${2:coll})\nsnippet mapl\n\t(map #(${1:lambda}) ${2:coll})\nsnippet met\n\t(${1:name} [${2:this} ${3:args}]\n\t  ${4})\nsnippet ns\n\t(ns ${1:name}\n\t  ${2})\nsnippet dotimes\n\t(dotimes [_ 10]\n\t  (time\n\t    (dotimes [_ ${1:times}]\n\t      ${2})))\nsnippet pmethod\n\t(${1:name} [${2:this} ${3:args}])\nsnippet refer\n\t(:refer-clojure :exclude [${1}])\nsnippet require\n\t(:require [${1:namespace} :as [${2}]])\nsnippet use\n\t(:use [${1:namespace} :only [${2}]])\nsnippet print\n\t(println ${1})\nsnippet reduce\n\t(reduce ${1:(fn [p n] ${3})} ${2})\nsnippet when\n\t(when ${1:test} ${2:body})\nsnippet when-let\n\t(when-let [${1:result} ${2:test}]\n\t\t${3:body})\n"
  },
  {
    "path": "lib/ace/snippets/cmake.snippets",
    "content": "snippet cmake\n\tCMAKE_MINIMUM_REQUIRED(VERSION 2.6)\n\tPROJECT(${1:ProjectName})\n\n\tFIND_PACKAGE(${2:LIBRARY})\n\n\tINCLUDE_DIRECTORIES(\n\t\t${$2_INCLUDE_DIR}\n\t)\n\n\tADD_SUBDIRECTORY(${3:src})\n\n\tADD_EXECUTABLE($1)\n\n\tTARGET_LINK_LIBRARIES($1\n\t\t${$2_LIBRARIES}\n\t)\n\nsnippet include\n\tINCLUDE_DIRECTORIES(\n\t\t${${1:INCLUDE_DIR}}\n\t)\n\nsnippet find\n\tFIND_PACKAGE(${1:LIBRARY})\n\nsnippet glob\n\tFILE(GLOB ${1:SRCS} *.${2:cpp})\n\nsnippet subdir\n\tADD_SUBDIRECTORY(${1:src})\n\nsnippet lib\n\tADD_LIBRARY(${1:lib} ${2:STATIC}\n\t\t${${3:SRCS}}\n\t)\n\nsnippet link\n\tTARGET_LINK_LIBRARIES(${1:bin}\n\t\t${2:somelib}\n\t)\n\t\nsnippet bin\n\tADD_EXECUTABLE(${1:bin})\n\nsnippet set\n\tSET(${1:var} ${2:val})\n\nsnippet dep\n\tADD_DEPENDENCIES(${1:target}\n\t\t${2:dep}\n\t)\n\nsnippet props\n\tSET_TARGET_PROPERTIES(${1:target} \n\t\t${2:PROPERTIES} ${3:COMPILE_FLAGS} \n\t\t${4:\"-O3 -Wall -pedantic\"}\n\t)\n"
  },
  {
    "path": "lib/ace/snippets/cobol.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./cobol.snippets\");\nexports.scope = \"cobol\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/cobol.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/coffee.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./coffee.snippets\");\nexports.scope = \"coffee\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/coffee.snippets",
    "content": "# Closure loop\nsnippet forindo\n\tfor ${1:name} in ${2:array}\n\t\tdo ($1) ->\n\t\t\t${3:// body}\n# Array comprehension\nsnippet fora\n\tfor ${1:name} in ${2:array}\n\t\t${3:// body...}\n# Object comprehension\nsnippet foro\n\tfor ${1:key}, ${2:value} of ${3:object}\n\t\t${4:// body...}\n# Range comprehension (inclusive)\nsnippet forr\n\tfor ${1:name} in [${2:start}..${3:finish}]\n\t\t${4:// body...}\nsnippet forrb\n\tfor ${1:name} in [${2:start}..${3:finish}] by ${4:step}\n\t\t${5:// body...}\n# Range comprehension (exclusive)\nsnippet forrex\n\tfor ${1:name} in [${2:start}...${3:finish}]\n\t\t${4:// body...}\nsnippet forrexb\n\tfor ${1:name} in [${2:start}...${3:finish}] by ${4:step}\n\t\t${5:// body...}\n# Function\nsnippet fun\n\t(${1:args}) ->\n\t\t${2:// body...}\n# Function (bound)\nsnippet bfun\n\t(${1:args}) =>\n\t\t${2:// body...}\n# Class\nsnippet cla class ..\n\tclass ${1:`substitute(Filename(), '\\(_\\|^\\)\\(.\\)', '\\u\\2', 'g')`}\n\t\t${2}\nsnippet cla class .. constructor: ..\n\tclass ${1:`substitute(Filename(), '\\(_\\|^\\)\\(.\\)', '\\u\\2', 'g')`}\n\t\tconstructor: (${2:args}) ->\n\t\t\t${3}\n\n\t\t${4}\nsnippet cla class .. extends ..\n\tclass ${1:`substitute(Filename(), '\\(_\\|^\\)\\(.\\)', '\\u\\2', 'g')`} extends ${2:ParentClass}\n\t\t${3}\nsnippet cla class .. extends .. constructor: ..\n\tclass ${1:`substitute(Filename(), '\\(_\\|^\\)\\(.\\)', '\\u\\2', 'g')`} extends ${2:ParentClass}\n\t\tconstructor: (${3:args}) ->\n\t\t\t${4}\n\n\t\t${5}\n# If\nsnippet if\n\tif ${1:condition}\n\t\t${2:// body...}\n# If __ Else\nsnippet ife\n\tif ${1:condition}\n\t\t${2:// body...}\n\telse\n\t\t${3:// body...}\n# Else if\nsnippet elif\n\telse if ${1:condition}\n\t\t${2:// body...}\n# Ternary If\nsnippet ifte\n\tif ${1:condition} then ${2:value} else ${3:other}\n# Unless\nsnippet unl\n\t${1:action} unless ${2:condition}\n# Switch\nsnippet swi\n\tswitch ${1:object}\n\t\twhen ${2:value}\n\t\t\t${3:// body...}\n\n# Log\nsnippet log\n\tconsole.log ${1}\n# Try __ Catch\nsnippet try\n\ttry\n\t\t${1}\n\tcatch ${2:error}\n\t\t${3}\n# Require\nsnippet req\n\t${2:$1} = require '${1:sys}'${3}\n# Export\nsnippet exp\n\t${1:root} = exports ? this\n"
  },
  {
    "path": "lib/ace/snippets/coldfusion.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./coldfusion.snippets\");\nexports.scope = \"coldfusion\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/coldfusion.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/cs.snippets",
    "content": "# cs.snippets\n# ===========\n# \n# Standard C-Sharp snippets for snipmate.\n#\n# Largely ported over from Visual Studio 2010 snippets plus\n# a few snippets from Resharper plus a few widely known snippets.\n#\n# Most snippets on elements (i.e. classes, properties) \n# follow suffix conventions. The order of suffixes to a snippet\n# is fixed.\n#\n# Snippet Suffix Order\n# --------------------\n# 1. Access Modifiers\n# 2. Class Modifiers\n#\n# Access Modifier Suffix Table\n# ----------------------------\n# + = public\n# & = internal\n# | = protected\n# - = private\n#\n# Example: `cls&` expands to `internal class $1`.\n# Access modifiers might be doubled to indicate\n# different modifiers for get/set on properties.\n# Example: `pb+-` expands to `public bool $1 { get; private set; }`\n#\n# Class Modifier Table\n# --------------------\n# ^ = static\n# % = abstract\n#\n# Example: `cls|%` expands to `protected abstract class $1`\n#\n# On method and property snippets, you can directly set\n# one of the common types int, string and bool, if desired,\n# just by appending the type modifier.\n#\n# Type Modifier Table\n# -------------------\n# i = integer\n# s = string\n# b = bool\n#\n# Example: `pi+&` expands to `public int $1 { get; internal set; }`\n#\n# I'll most propably add more stuff in here like\n# * List/Array constructio\n# * Mostly used generics\n# * Linq\n# * Funcs, Actions, Predicates\n# * Lambda\n# * Events\n#\n# Feedback is welcome!\n# \n# entry point\nsnippet sim\n\tpublic static int Main(string[] args) {\n\t\t${1}\n\t\treturn 0;\n\t} \nsnippet simc\n\tpublic class Application {\n\t\tpublic static int Main(string[] args) {\n\t\t\t${1}\n\t\t\treturn 0;\n\t\t}\n\t}\n# if condition\nsnippet if\n\tif (${1}) {\n\t\t${2}\n\t} \nsnippet el\n\telse {\n\t\t${1}\n\t} \nsnippet ifs\n\tif (${1}) \n\t\t${2}\n# ternary conditional\nsnippet t\n\t${1} ? ${2} : ${3}\nsnippet ?\n\t${1} ? ${2} : ${3}\n# do while loop\nsnippet do\n\tdo {\n\t\t${2}\n\t} while (${1});\n# while loop\nsnippet wh\n\twhile (${1}) {\n\t\t${2}\n\t}\n# for loop\nsnippet for\n\tfor (int ${1:i} = 0; $1 < ${2:count}; $1${3:++}) {\n\t\t${4}\n\t}\n# foreach\nsnippet fore\n\tforeach (var ${1:entry} in ${2}) {\n\t\t${3}\n\t}\nsnippet foreach\n\tforeach (var ${1:entry} in ${2}) {\n\t\t${3}\n\t}\nsnippet each\n\tforeach (var ${1:entry} in ${2}) {\n\t\t${3}\n\t}\n# interfaces\nsnippet interface\n\tpublic interface ${1:`Filename()`} {\n\t\t${2}\n\t}\nsnippet if+\n\tpublic interface ${1:`Filename()`} {\n\t\t${2}\n\t}\n# class bodies\nsnippet class\n\tpublic class ${1:`Filename()`} {\n\t\t${2}\n\t}\nsnippet cls\n\t${2:public} class ${1:`Filename()`} {\n\t\t${3}\n\t}\nsnippet cls+\n\tpublic class ${1:`Filename()`} {\n\t\t${2}\n\t}\nsnippet cls+^\n\tpublic static class ${1:`Filename()`} {\n\t\t${2}\n\t}\nsnippet cls&\n\tinternal class ${1:`Filename()`} {\n\t\t${2}\n\t}\nsnippet cls&^\n\tinternal static class ${1:`Filename()`} {\n\t\t${2}\n\t}\nsnippet cls|\n\tprotected class ${1:`Filename()`} {\n\t\t${2}\n\t}\nsnippet cls|%\n\tprotected abstract class ${1:`Filename()`} {\n\t\t${2}\n\t}\n# constructor\nsnippet ctor\n\tpublic ${1:`Filename()`}() {\n\t\t${2}\n\t}\n# properties - auto properties by default.\n# default type is int with layout get / set.\nsnippet prop\n\t${1:public} ${2:int} ${3:} { get; set; }${4}\nsnippet p\n\t${1:public} ${2:int} ${3:} { get; set; }${4}\nsnippet p+\n\tpublic ${1:int} ${2:} { get; set; }${3}\nsnippet p+&\n\tpublic ${1:int} ${2:} { get; internal set; }${3}\nsnippet p+|\n\tpublic ${1:int} ${2:} { get; protected set; }${3}\nsnippet p+-\n\tpublic ${1:int} ${2:} { get; private set; }${3}\nsnippet p&\n\tinternal ${1:int} ${2:} { get; set; }${3}\nsnippet p&|\n\tinternal ${1:int} ${2:} { get; protected set; }${3}\nsnippet p&-\n\tinternal ${1:int} ${2:} { get; private set; }${3}\nsnippet p|\n\tprotected ${1:int} ${2:} { get; set; }${3}\nsnippet p|-\n\tprotected ${1:int} ${2:} { get; private set; }${3}\nsnippet p-\n\tprivate ${1:int} ${2:} { get; set; }${3}\n# property - bool\nsnippet pi\n\t${1:public} int ${2:} { get; set; }${3}\nsnippet pi+\n\tpublic int ${1} { get; set; }${2}\nsnippet pi+&\n\tpublic int ${1} { get; internal set; }${2}\nsnippet pi+|\n\tpublic int ${1} { get; protected set; }${2}\nsnippet pi+-\n\tpublic int ${1} { get; private set; }${2}\nsnippet pi&\n\tinternal int ${1} { get; set; }${2}\nsnippet pi&|\n\tinternal int ${1} { get; protected set; }${2}\nsnippet pi&-\n\tinternal int ${1} { get; private set; }${2}\nsnippet pi|\n\tprotected int ${1} { get; set; }${2}\nsnippet pi|-\n\tprotected int ${1} { get; private set; }${2}\nsnippet pi-\n\tprivate int ${1} { get; set; }${2}\n# property - bool\nsnippet pb\n\t${1:public} bool ${2:} { get; set; }${3}\nsnippet pb+\n\tpublic bool ${1} { get; set; }${2}\nsnippet pb+&\n\tpublic bool ${1} { get; internal set; }${2}\nsnippet pb+|\n\tpublic bool ${1} { get; protected set; }${2}\nsnippet pb+-\n\tpublic bool ${1} { get; private set; }${2}\nsnippet pb&\n\tinternal bool ${1} { get; set; }${2}\nsnippet pb&|\n\tinternal bool ${1} { get; protected set; }${2}\nsnippet pb&-\n\tinternal bool ${1} { get; private set; }${2}\nsnippet pb|\n\tprotected bool ${1} { get; set; }${2}\nsnippet pb|-\n\tprotected bool ${1} { get; private set; }${2}\nsnippet pb-\n\tprivate bool ${1} { get; set; }${2}\n# property - string\nsnippet ps\n\t${1:public} string ${2:} { get; set; }${3}\nsnippet ps+\n\tpublic string ${1} { get; set; }${2}\nsnippet ps+&\n\tpublic string ${1} { get; internal set; }${2}\nsnippet ps+|\n\tpublic string ${1} { get; protected set; }${2}\nsnippet ps+-\n\tpublic string ${1} { get; private set; }${2}\nsnippet ps&\n\tinternal string ${1} { get; set; }${2}\nsnippet ps&|\n\tinternal string ${1} { get; protected set; }${2}\nsnippet ps&-\n\tinternal string ${1} { get; private set; }${2}\nsnippet ps|\n\tprotected string ${1} { get; set; }${2}\nsnippet ps|-\n\tprotected string ${1} { get; private set; }${2}\nsnippet ps-\n\tprivate string ${1} { get; set; }${2}\n# members - void\nsnippet m\n\t${1:public} ${2:void} ${3:}(${4:}) {\n\t\t${5:}\n\t}\nsnippet m+\n\tpublic ${1:void} ${2:}(${3:}) {\n\t\t${4:}\n\t}\nsnippet m&\n\tinternal ${1:void} ${2:}(${3:}) {\n\t\t${4:}\n\t}\nsnippet m|\n\tprotected ${1:void} ${2:}(${3:}) {\n\t\t${4:}\n\t}\nsnippet m-\n\tprivate ${1:void} ${2:}(${3:}) {\n\t\t${4:}\n\t}\n# members - int\nsnippet mi\n\t${1:public} int ${2:}(${3:}) {\n\t\t${4:return 0;}\n\t}\nsnippet mi+\n\tpublic int ${1:}(${2:}) {\n\t\t${3:return 0;}\n\t}\nsnippet mi&\n\tinternal int ${1:}(${2:}) {\n\t\t${3:return 0;}\n\t}\nsnippet mi|\n\tprotected int ${1:}(${2:}) {\n\t\t${3:return 0;}\n\t}\nsnippet mi-\n\tprivate int ${1:}(${2:}) {\n\t\t${3:return 0;}\n\t}\n# members - bool\nsnippet mb\n\t${1:public} bool ${2:}(${3:}) {\n\t\t${4:return false;}\n\t}\nsnippet mb+\n\tpublic bool ${1:}(${2:}) {\n\t\t${3:return false;}\n\t}\nsnippet mb&\n\tinternal bool ${1:}(${2:}) {\n\t\t${3:return false;}\n\t}\nsnippet mb|\n\tprotected bool ${1:}(${2:}) {\n\t\t${3:return false;}\n\t}\nsnippet mb-\n\tprivate bool ${1:}(${2:}) {\n\t\t${3:return false;}\n\t}\n# members - string\nsnippet ms\n\t${1:public} string ${2:}(${3:}) {\n\t\t${4:return \"\";}\n\t}\nsnippet ms+\n\tpublic string ${1:}(${2:}) {\n\t\t${3:return \"\";}\n\t}\nsnippet ms&\n\tinternal string ${1:}(${2:}) {\n\t\t${3:return \"\";}\n\t}\nsnippet ms|\n\tprotected string ${1:}(${2:}) {\n\t\t${3:return \"\";}\n\t}\nsnippet ms-\n\tprivate string ${1:}(${2:}) {\n\t\t${3:return \"\";}\n\t}\n# structure\nsnippet struct\n\tpublic struct ${1:`Filename()`} {\n\t\t${2}\n\t}\n# enumeration\nsnippet enum\n\tpublic enum ${1} {\n\t\t${2}\n\t}\n# preprocessor directives\nsnippet #if\n\t#if\n\t\t${1}\n\t#endif\n# inline xml documentation\nsnippet ///\n\t/// <summary>\n\t/// ${1}\n\t/// </summary>\nsnippet <p\n\t<param name=\"${1}\">${2:$1}</param>${3}\nsnippet <ex\n\t<exception cref=\"${1:System.Exception}\">${2}</exception>${3}\nsnippet <r\n\t<returns>${1}</returns>{${2}\nsnippet <s\n\t<see cref=\"${1}\"/>${2}\nsnippet <rem\n\t<remarks>${1}</remarks>${2}\nsnippet <c\n\t<code>${1}</code>${2}\n"
  },
  {
    "path": "lib/ace/snippets/csharp.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./csharp.snippets\");\nexports.scope = \"csharp\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/csharp.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/csound_document.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./csound_document.snippets\");\nexports.scope = \"csound_document\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/csound_document.snippets",
    "content": "# <CsoundSynthesizer>\nsnippet synth\n\t<CsoundSynthesizer>\n\t<CsInstruments>\n\t${1}\n\t</CsInstruments>\n\t<CsScore>\n\te\n\t</CsScore>\n\t</CsoundSynthesizer>\n"
  },
  {
    "path": "lib/ace/snippets/csound_orchestra.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./csound_orchestra.snippets\");\nexports.scope = \"csound_orchestra\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/csound_orchestra.snippets",
    "content": "# else\nsnippet else\n\telse\n\t\t${1:/* statements */}\n# elseif\nsnippet elseif\n\telseif ${1:/* condition */} then\n\t\t${2:/* statements */}\n# if\nsnippet if\n\tif ${1:/* condition */} then\n\t\t${2:/* statements */}\n\tendif\n# instrument block\nsnippet instr\n\tinstr ${1:name}\n\t\t${2:/* statements */}\n\tendin\n# i-time while loop\nsnippet iwhile\n\ti${1:Index} = ${2:0}\n\twhile i${1:Index} < ${3:/* count */} do\n\t\t${4:/* statements */}\n\t\ti${1:Index} += 1\n\tod\n# k-rate while loop\nsnippet kwhile\n\tk${1:Index} = ${2:0}\n\twhile k${1:Index} < ${3:/* count */} do\n\t\t${4:/* statements */}\n\t\tk${1:Index} += 1\n\tod\n# opcode\nsnippet opcode\n\topcode ${1:name}, ${2:/* output types */ 0}, ${3:/* input types */ 0}\n\t\t${4:/* statements */}\n\tendop\n# until loop\nsnippet until\n\tuntil ${1:/* condition */} do\n\t\t${2:/* statements */}\n\tod\n# while loop\nsnippet while\n\twhile ${1:/* condition */} do\n\t\t${2:/* statements */}\n\tod\n"
  },
  {
    "path": "lib/ace/snippets/csound_score.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./csound_score.snippets\");\nexports.scope = \"csound_score\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/csound_score.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/css.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./css.snippets\");\nexports.scope = \"css\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/css.snippets",
    "content": "snippet .\n\t${1} {\n\t\t${2}\n\t}\nsnippet !\n\t !important\nsnippet bdi:m+\n\t-moz-border-image: url(${1}) ${2:0} ${3:0} ${4:0} ${5:0} ${6:stretch} ${7:stretch};\nsnippet bdi:m\n\t-moz-border-image: ${1};\nsnippet bdrz:m\n\t-moz-border-radius: ${1};\nsnippet bxsh:m+\n\t-moz-box-shadow: ${1:0} ${2:0} ${3:0} #${4:000};\nsnippet bxsh:m\n\t-moz-box-shadow: ${1};\nsnippet bdi:w+\n\t-webkit-border-image: url(${1}) ${2:0} ${3:0} ${4:0} ${5:0} ${6:stretch} ${7:stretch};\nsnippet bdi:w\n\t-webkit-border-image: ${1};\nsnippet bdrz:w\n\t-webkit-border-radius: ${1};\nsnippet bxsh:w+\n\t-webkit-box-shadow: ${1:0} ${2:0} ${3:0} #${4:000};\nsnippet bxsh:w\n\t-webkit-box-shadow: ${1};\nsnippet @f\n\t@font-face {\n\t\tfont-family: ${1};\n\t\tsrc: url(${2});\n\t}\nsnippet @i\n\t@import url(${1});\nsnippet @m\n\t@media ${1:print} {\n\t\t${2}\n\t}\nsnippet bg+\n\tbackground: #${1:FFF} url(${2}) ${3:0} ${4:0} ${5:no-repeat};\nsnippet bga\n\tbackground-attachment: ${1};\nsnippet bga:f\n\tbackground-attachment: fixed;\nsnippet bga:s\n\tbackground-attachment: scroll;\nsnippet bgbk\n\tbackground-break: ${1};\nsnippet bgbk:bb\n\tbackground-break: bounding-box;\nsnippet bgbk:c\n\tbackground-break: continuous;\nsnippet bgbk:eb\n\tbackground-break: each-box;\nsnippet bgcp\n\tbackground-clip: ${1};\nsnippet bgcp:bb\n\tbackground-clip: border-box;\nsnippet bgcp:cb\n\tbackground-clip: content-box;\nsnippet bgcp:nc\n\tbackground-clip: no-clip;\nsnippet bgcp:pb\n\tbackground-clip: padding-box;\nsnippet bgc\n\tbackground-color: #${1:FFF};\nsnippet bgc:t\n\tbackground-color: transparent;\nsnippet bgi\n\tbackground-image: url(${1});\nsnippet bgi:n\n\tbackground-image: none;\nsnippet bgo\n\tbackground-origin: ${1};\nsnippet bgo:bb\n\tbackground-origin: border-box;\nsnippet bgo:cb\n\tbackground-origin: content-box;\nsnippet bgo:pb\n\tbackground-origin: padding-box;\nsnippet bgpx\n\tbackground-position-x: ${1};\nsnippet bgpy\n\tbackground-position-y: ${1};\nsnippet bgp\n\tbackground-position: ${1:0} ${2:0};\nsnippet bgr\n\tbackground-repeat: ${1};\nsnippet bgr:n\n\tbackground-repeat: no-repeat;\nsnippet bgr:x\n\tbackground-repeat: repeat-x;\nsnippet bgr:y\n\tbackground-repeat: repeat-y;\nsnippet bgr:r\n\tbackground-repeat: repeat;\nsnippet bgz\n\tbackground-size: ${1};\nsnippet bgz:a\n\tbackground-size: auto;\nsnippet bgz:ct\n\tbackground-size: contain;\nsnippet bgz:cv\n\tbackground-size: cover;\nsnippet bg\n\tbackground: ${1};\nsnippet bg:ie\n\tfilter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='${1}',sizingMethod='${2:crop}');\nsnippet bg:n\n\tbackground: none;\nsnippet bd+\n\tborder: ${1:1px} ${2:solid} #${3:000};\nsnippet bdb+\n\tborder-bottom: ${1:1px} ${2:solid} #${3:000};\nsnippet bdbc\n\tborder-bottom-color: #${1:000};\nsnippet bdbi\n\tborder-bottom-image: url(${1});\nsnippet bdbi:n\n\tborder-bottom-image: none;\nsnippet bdbli\n\tborder-bottom-left-image: url(${1});\nsnippet bdbli:c\n\tborder-bottom-left-image: continue;\nsnippet bdbli:n\n\tborder-bottom-left-image: none;\nsnippet bdblrz\n\tborder-bottom-left-radius: ${1};\nsnippet bdbri\n\tborder-bottom-right-image: url(${1});\nsnippet bdbri:c\n\tborder-bottom-right-image: continue;\nsnippet bdbri:n\n\tborder-bottom-right-image: none;\nsnippet bdbrrz\n\tborder-bottom-right-radius: ${1};\nsnippet bdbs\n\tborder-bottom-style: ${1};\nsnippet bdbs:n\n\tborder-bottom-style: none;\nsnippet bdbw\n\tborder-bottom-width: ${1};\nsnippet bdb\n\tborder-bottom: ${1};\nsnippet bdb:n\n\tborder-bottom: none;\nsnippet bdbk\n\tborder-break: ${1};\nsnippet bdbk:c\n\tborder-break: close;\nsnippet bdcl\n\tborder-collapse: ${1};\nsnippet bdcl:c\n\tborder-collapse: collapse;\nsnippet bdcl:s\n\tborder-collapse: separate;\nsnippet bdc\n\tborder-color: #${1:000};\nsnippet bdci\n\tborder-corner-image: url(${1});\nsnippet bdci:c\n\tborder-corner-image: continue;\nsnippet bdci:n\n\tborder-corner-image: none;\nsnippet bdf\n\tborder-fit: ${1};\nsnippet bdf:c\n\tborder-fit: clip;\nsnippet bdf:of\n\tborder-fit: overwrite;\nsnippet bdf:ow\n\tborder-fit: overwrite;\nsnippet bdf:r\n\tborder-fit: repeat;\nsnippet bdf:sc\n\tborder-fit: scale;\nsnippet bdf:sp\n\tborder-fit: space;\nsnippet bdf:st\n\tborder-fit: stretch;\nsnippet bdi\n\tborder-image: url(${1}) ${2:0} ${3:0} ${4:0} ${5:0} ${6:stretch} ${7:stretch};\nsnippet bdi:n\n\tborder-image: none;\nsnippet bdl+\n\tborder-left: ${1:1px} ${2:solid} #${3:000};\nsnippet bdlc\n\tborder-left-color: #${1:000};\nsnippet bdli\n\tborder-left-image: url(${1});\nsnippet bdli:n\n\tborder-left-image: none;\nsnippet bdls\n\tborder-left-style: ${1};\nsnippet bdls:n\n\tborder-left-style: none;\nsnippet bdlw\n\tborder-left-width: ${1};\nsnippet bdl\n\tborder-left: ${1};\nsnippet bdl:n\n\tborder-left: none;\nsnippet bdlt\n\tborder-length: ${1};\nsnippet bdlt:a\n\tborder-length: auto;\nsnippet bdrz\n\tborder-radius: ${1};\nsnippet bdr+\n\tborder-right: ${1:1px} ${2:solid} #${3:000};\nsnippet bdrc\n\tborder-right-color: #${1:000};\nsnippet bdri\n\tborder-right-image: url(${1});\nsnippet bdri:n\n\tborder-right-image: none;\nsnippet bdrs\n\tborder-right-style: ${1};\nsnippet bdrs:n\n\tborder-right-style: none;\nsnippet bdrw\n\tborder-right-width: ${1};\nsnippet bdr\n\tborder-right: ${1};\nsnippet bdr:n\n\tborder-right: none;\nsnippet bdsp\n\tborder-spacing: ${1};\nsnippet bds\n\tborder-style: ${1};\nsnippet bds:ds\n\tborder-style: dashed;\nsnippet bds:dtds\n\tborder-style: dot-dash;\nsnippet bds:dtdtds\n\tborder-style: dot-dot-dash;\nsnippet bds:dt\n\tborder-style: dotted;\nsnippet bds:db\n\tborder-style: double;\nsnippet bds:g\n\tborder-style: groove;\nsnippet bds:h\n\tborder-style: hidden;\nsnippet bds:i\n\tborder-style: inset;\nsnippet bds:n\n\tborder-style: none;\nsnippet bds:o\n\tborder-style: outset;\nsnippet bds:r\n\tborder-style: ridge;\nsnippet bds:s\n\tborder-style: solid;\nsnippet bds:w\n\tborder-style: wave;\nsnippet bdt+\n\tborder-top: ${1:1px} ${2:solid} #${3:000};\nsnippet bdtc\n\tborder-top-color: #${1:000};\nsnippet bdti\n\tborder-top-image: url(${1});\nsnippet bdti:n\n\tborder-top-image: none;\nsnippet bdtli\n\tborder-top-left-image: url(${1});\nsnippet bdtli:c\n\tborder-corner-image: continue;\nsnippet bdtli:n\n\tborder-corner-image: none;\nsnippet bdtlrz\n\tborder-top-left-radius: ${1};\nsnippet bdtri\n\tborder-top-right-image: url(${1});\nsnippet bdtri:c\n\tborder-top-right-image: continue;\nsnippet bdtri:n\n\tborder-top-right-image: none;\nsnippet bdtrrz\n\tborder-top-right-radius: ${1};\nsnippet bdts\n\tborder-top-style: ${1};\nsnippet bdts:n\n\tborder-top-style: none;\nsnippet bdtw\n\tborder-top-width: ${1};\nsnippet bdt\n\tborder-top: ${1};\nsnippet bdt:n\n\tborder-top: none;\nsnippet bdw\n\tborder-width: ${1};\nsnippet bd\n\tborder: ${1};\nsnippet bd:n\n\tborder: none;\nsnippet b\n\tbottom: ${1};\nsnippet b:a\n\tbottom: auto;\nsnippet bxsh+\n\tbox-shadow: ${1:0} ${2:0} ${3:0} #${4:000};\nsnippet bxsh\n\tbox-shadow: ${1};\nsnippet bxsh:n\n\tbox-shadow: none;\nsnippet bxz\n\tbox-sizing: ${1};\nsnippet bxz:bb\n\tbox-sizing: border-box;\nsnippet bxz:cb\n\tbox-sizing: content-box;\nsnippet cps\n\tcaption-side: ${1};\nsnippet cps:b\n\tcaption-side: bottom;\nsnippet cps:t\n\tcaption-side: top;\nsnippet cl\n\tclear: ${1};\nsnippet cl:b\n\tclear: both;\nsnippet cl:l\n\tclear: left;\nsnippet cl:n\n\tclear: none;\nsnippet cl:r\n\tclear: right;\nsnippet cp\n\tclip: ${1};\nsnippet cp:a\n\tclip: auto;\nsnippet cp:r\n\tclip: rect(${1:0} ${2:0} ${3:0} ${4:0});\nsnippet c\n\tcolor: #${1:000};\nsnippet ct\n\tcontent: ${1};\nsnippet ct:a\n\tcontent: attr(${1});\nsnippet ct:cq\n\tcontent: close-quote;\nsnippet ct:c\n\tcontent: counter(${1});\nsnippet ct:cs\n\tcontent: counters(${1});\nsnippet ct:ncq\n\tcontent: no-close-quote;\nsnippet ct:noq\n\tcontent: no-open-quote;\nsnippet ct:n\n\tcontent: normal;\nsnippet ct:oq\n\tcontent: open-quote;\nsnippet coi\n\tcounter-increment: ${1};\nsnippet cor\n\tcounter-reset: ${1};\nsnippet cur\n\tcursor: ${1};\nsnippet cur:a\n\tcursor: auto;\nsnippet cur:c\n\tcursor: crosshair;\nsnippet cur:d\n\tcursor: default;\nsnippet cur:ha\n\tcursor: hand;\nsnippet cur:he\n\tcursor: help;\nsnippet cur:m\n\tcursor: move;\nsnippet cur:p\n\tcursor: pointer;\nsnippet cur:t\n\tcursor: text;\nsnippet d\n\tdisplay: ${1};\nsnippet d:mib\n\tdisplay: -moz-inline-box;\nsnippet d:mis\n\tdisplay: -moz-inline-stack;\nsnippet d:b\n\tdisplay: block;\nsnippet d:cp\n\tdisplay: compact;\nsnippet d:ib\n\tdisplay: inline-block;\nsnippet d:itb\n\tdisplay: inline-table;\nsnippet d:i\n\tdisplay: inline;\nsnippet d:li\n\tdisplay: list-item;\nsnippet d:n\n\tdisplay: none;\nsnippet d:ri\n\tdisplay: run-in;\nsnippet d:tbcp\n\tdisplay: table-caption;\nsnippet d:tbc\n\tdisplay: table-cell;\nsnippet d:tbclg\n\tdisplay: table-column-group;\nsnippet d:tbcl\n\tdisplay: table-column;\nsnippet d:tbfg\n\tdisplay: table-footer-group;\nsnippet d:tbhg\n\tdisplay: table-header-group;\nsnippet d:tbrg\n\tdisplay: table-row-group;\nsnippet d:tbr\n\tdisplay: table-row;\nsnippet d:tb\n\tdisplay: table;\nsnippet ec\n\tempty-cells: ${1};\nsnippet ec:h\n\tempty-cells: hide;\nsnippet ec:s\n\tempty-cells: show;\nsnippet exp\n\texpression()\nsnippet fl\n\tfloat: ${1};\nsnippet fl:l\n\tfloat: left;\nsnippet fl:n\n\tfloat: none;\nsnippet fl:r\n\tfloat: right;\nsnippet f+\n\tfont: ${1:1em} ${2:Arial},${3:sans-serif};\nsnippet fef\n\tfont-effect: ${1};\nsnippet fef:eb\n\tfont-effect: emboss;\nsnippet fef:eg\n\tfont-effect: engrave;\nsnippet fef:n\n\tfont-effect: none;\nsnippet fef:o\n\tfont-effect: outline;\nsnippet femp\n\tfont-emphasize-position: ${1};\nsnippet femp:a\n\tfont-emphasize-position: after;\nsnippet femp:b\n\tfont-emphasize-position: before;\nsnippet fems\n\tfont-emphasize-style: ${1};\nsnippet fems:ac\n\tfont-emphasize-style: accent;\nsnippet fems:c\n\tfont-emphasize-style: circle;\nsnippet fems:ds\n\tfont-emphasize-style: disc;\nsnippet fems:dt\n\tfont-emphasize-style: dot;\nsnippet fems:n\n\tfont-emphasize-style: none;\nsnippet fem\n\tfont-emphasize: ${1};\nsnippet ff\n\tfont-family: ${1};\nsnippet ff:c\n\tfont-family: ${1:'Monotype Corsiva','Comic Sans MS'},cursive;\nsnippet ff:f\n\tfont-family: ${1:Capitals,Impact},fantasy;\nsnippet ff:m\n\tfont-family: ${1:Monaco,'Courier New'},monospace;\nsnippet ff:ss\n\tfont-family: ${1:Helvetica,Arial},sans-serif;\nsnippet ff:s\n\tfont-family: ${1:Georgia,'Times New Roman'},serif;\nsnippet fza\n\tfont-size-adjust: ${1};\nsnippet fza:n\n\tfont-size-adjust: none;\nsnippet fz\n\tfont-size: ${1};\nsnippet fsm\n\tfont-smooth: ${1};\nsnippet fsm:aw\n\tfont-smooth: always;\nsnippet fsm:a\n\tfont-smooth: auto;\nsnippet fsm:n\n\tfont-smooth: never;\nsnippet fst\n\tfont-stretch: ${1};\nsnippet fst:c\n\tfont-stretch: condensed;\nsnippet fst:e\n\tfont-stretch: expanded;\nsnippet fst:ec\n\tfont-stretch: extra-condensed;\nsnippet fst:ee\n\tfont-stretch: extra-expanded;\nsnippet fst:n\n\tfont-stretch: normal;\nsnippet fst:sc\n\tfont-stretch: semi-condensed;\nsnippet fst:se\n\tfont-stretch: semi-expanded;\nsnippet fst:uc\n\tfont-stretch: ultra-condensed;\nsnippet fst:ue\n\tfont-stretch: ultra-expanded;\nsnippet fs\n\tfont-style: ${1};\nsnippet fs:i\n\tfont-style: italic;\nsnippet fs:n\n\tfont-style: normal;\nsnippet fs:o\n\tfont-style: oblique;\nsnippet fv\n\tfont-variant: ${1};\nsnippet fv:n\n\tfont-variant: normal;\nsnippet fv:sc\n\tfont-variant: small-caps;\nsnippet fw\n\tfont-weight: ${1};\nsnippet fw:b\n\tfont-weight: bold;\nsnippet fw:br\n\tfont-weight: bolder;\nsnippet fw:lr\n\tfont-weight: lighter;\nsnippet fw:n\n\tfont-weight: normal;\nsnippet f\n\tfont: ${1};\nsnippet h\n\theight: ${1};\nsnippet h:a\n\theight: auto;\nsnippet l\n\tleft: ${1};\nsnippet l:a\n\tleft: auto;\nsnippet lts\n\tletter-spacing: ${1};\nsnippet lh\n\tline-height: ${1};\nsnippet lisi\n\tlist-style-image: url(${1});\nsnippet lisi:n\n\tlist-style-image: none;\nsnippet lisp\n\tlist-style-position: ${1};\nsnippet lisp:i\n\tlist-style-position: inside;\nsnippet lisp:o\n\tlist-style-position: outside;\nsnippet list\n\tlist-style-type: ${1};\nsnippet list:c\n\tlist-style-type: circle;\nsnippet list:dclz\n\tlist-style-type: decimal-leading-zero;\nsnippet list:dc\n\tlist-style-type: decimal;\nsnippet list:d\n\tlist-style-type: disc;\nsnippet list:lr\n\tlist-style-type: lower-roman;\nsnippet list:n\n\tlist-style-type: none;\nsnippet list:s\n\tlist-style-type: square;\nsnippet list:ur\n\tlist-style-type: upper-roman;\nsnippet lis\n\tlist-style: ${1};\nsnippet lis:n\n\tlist-style: none;\nsnippet mb\n\tmargin-bottom: ${1};\nsnippet mb:a\n\tmargin-bottom: auto;\nsnippet ml\n\tmargin-left: ${1};\nsnippet ml:a\n\tmargin-left: auto;\nsnippet mr\n\tmargin-right: ${1};\nsnippet mr:a\n\tmargin-right: auto;\nsnippet mt\n\tmargin-top: ${1};\nsnippet mt:a\n\tmargin-top: auto;\nsnippet m\n\tmargin: ${1};\nsnippet m:4\n\tmargin: ${1:0} ${2:0} ${3:0} ${4:0};\nsnippet m:3\n\tmargin: ${1:0} ${2:0} ${3:0};\nsnippet m:2\n\tmargin: ${1:0} ${2:0};\nsnippet m:0\n\tmargin: 0;\nsnippet m:a\n\tmargin: auto;\nsnippet mah\n\tmax-height: ${1};\nsnippet mah:n\n\tmax-height: none;\nsnippet maw\n\tmax-width: ${1};\nsnippet maw:n\n\tmax-width: none;\nsnippet mih\n\tmin-height: ${1};\nsnippet miw\n\tmin-width: ${1};\nsnippet op\n\topacity: ${1};\nsnippet op:ie\n\tfilter: progid:DXImageTransform.Microsoft.Alpha(Opacity=${1:100});\nsnippet op:ms\n\t-ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=${1:100})';\nsnippet orp\n\torphans: ${1};\nsnippet o+\n\toutline: ${1:1px} ${2:solid} #${3:000};\nsnippet oc\n\toutline-color: ${1:#000};\nsnippet oc:i\n\toutline-color: invert;\nsnippet oo\n\toutline-offset: ${1};\nsnippet os\n\toutline-style: ${1};\nsnippet ow\n\toutline-width: ${1};\nsnippet o\n\toutline: ${1};\nsnippet o:n\n\toutline: none;\nsnippet ovs\n\toverflow-style: ${1};\nsnippet ovs:a\n\toverflow-style: auto;\nsnippet ovs:mq\n\toverflow-style: marquee;\nsnippet ovs:mv\n\toverflow-style: move;\nsnippet ovs:p\n\toverflow-style: panner;\nsnippet ovs:s\n\toverflow-style: scrollbar;\nsnippet ovx\n\toverflow-x: ${1};\nsnippet ovx:a\n\toverflow-x: auto;\nsnippet ovx:h\n\toverflow-x: hidden;\nsnippet ovx:s\n\toverflow-x: scroll;\nsnippet ovx:v\n\toverflow-x: visible;\nsnippet ovy\n\toverflow-y: ${1};\nsnippet ovy:a\n\toverflow-y: auto;\nsnippet ovy:h\n\toverflow-y: hidden;\nsnippet ovy:s\n\toverflow-y: scroll;\nsnippet ovy:v\n\toverflow-y: visible;\nsnippet ov\n\toverflow: ${1};\nsnippet ov:a\n\toverflow: auto;\nsnippet ov:h\n\toverflow: hidden;\nsnippet ov:s\n\toverflow: scroll;\nsnippet ov:v\n\toverflow: visible;\nsnippet pb\n\tpadding-bottom: ${1};\nsnippet pl\n\tpadding-left: ${1};\nsnippet pr\n\tpadding-right: ${1};\nsnippet pt\n\tpadding-top: ${1};\nsnippet p\n\tpadding: ${1};\nsnippet p:4\n\tpadding: ${1:0} ${2:0} ${3:0} ${4:0};\nsnippet p:3\n\tpadding: ${1:0} ${2:0} ${3:0};\nsnippet p:2\n\tpadding: ${1:0} ${2:0};\nsnippet p:0\n\tpadding: 0;\nsnippet pgba\n\tpage-break-after: ${1};\nsnippet pgba:aw\n\tpage-break-after: always;\nsnippet pgba:a\n\tpage-break-after: auto;\nsnippet pgba:l\n\tpage-break-after: left;\nsnippet pgba:r\n\tpage-break-after: right;\nsnippet pgbb\n\tpage-break-before: ${1};\nsnippet pgbb:aw\n\tpage-break-before: always;\nsnippet pgbb:a\n\tpage-break-before: auto;\nsnippet pgbb:l\n\tpage-break-before: left;\nsnippet pgbb:r\n\tpage-break-before: right;\nsnippet pgbi\n\tpage-break-inside: ${1};\nsnippet pgbi:a\n\tpage-break-inside: auto;\nsnippet pgbi:av\n\tpage-break-inside: avoid;\nsnippet pos\n\tposition: ${1};\nsnippet pos:a\n\tposition: absolute;\nsnippet pos:f\n\tposition: fixed;\nsnippet pos:r\n\tposition: relative;\nsnippet pos:s\n\tposition: static;\nsnippet q\n\tquotes: ${1};\nsnippet q:en\n\tquotes: '\\201C' '\\201D' '\\2018' '\\2019';\nsnippet q:n\n\tquotes: none;\nsnippet q:ru\n\tquotes: '\\00AB' '\\00BB' '\\201E' '\\201C';\nsnippet rz\n\tresize: ${1};\nsnippet rz:b\n\tresize: both;\nsnippet rz:h\n\tresize: horizontal;\nsnippet rz:n\n\tresize: none;\nsnippet rz:v\n\tresize: vertical;\nsnippet r\n\tright: ${1};\nsnippet r:a\n\tright: auto;\nsnippet tbl\n\ttable-layout: ${1};\nsnippet tbl:a\n\ttable-layout: auto;\nsnippet tbl:f\n\ttable-layout: fixed;\nsnippet tal\n\ttext-align-last: ${1};\nsnippet tal:a\n\ttext-align-last: auto;\nsnippet tal:c\n\ttext-align-last: center;\nsnippet tal:l\n\ttext-align-last: left;\nsnippet tal:r\n\ttext-align-last: right;\nsnippet ta\n\ttext-align: ${1};\nsnippet ta:c\n\ttext-align: center;\nsnippet ta:l\n\ttext-align: left;\nsnippet ta:r\n\ttext-align: right;\nsnippet td\n\ttext-decoration: ${1};\nsnippet td:l\n\ttext-decoration: line-through;\nsnippet td:n\n\ttext-decoration: none;\nsnippet td:o\n\ttext-decoration: overline;\nsnippet td:u\n\ttext-decoration: underline;\nsnippet te\n\ttext-emphasis: ${1};\nsnippet te:ac\n\ttext-emphasis: accent;\nsnippet te:a\n\ttext-emphasis: after;\nsnippet te:b\n\ttext-emphasis: before;\nsnippet te:c\n\ttext-emphasis: circle;\nsnippet te:ds\n\ttext-emphasis: disc;\nsnippet te:dt\n\ttext-emphasis: dot;\nsnippet te:n\n\ttext-emphasis: none;\nsnippet th\n\ttext-height: ${1};\nsnippet th:a\n\ttext-height: auto;\nsnippet th:f\n\ttext-height: font-size;\nsnippet th:m\n\ttext-height: max-size;\nsnippet th:t\n\ttext-height: text-size;\nsnippet ti\n\ttext-indent: ${1};\nsnippet ti:-\n\ttext-indent: -9999px;\nsnippet tj\n\ttext-justify: ${1};\nsnippet tj:a\n\ttext-justify: auto;\nsnippet tj:d\n\ttext-justify: distribute;\nsnippet tj:ic\n\ttext-justify: inter-cluster;\nsnippet tj:ii\n\ttext-justify: inter-ideograph;\nsnippet tj:iw\n\ttext-justify: inter-word;\nsnippet tj:k\n\ttext-justify: kashida;\nsnippet tj:t\n\ttext-justify: tibetan;\nsnippet to+\n\ttext-outline: ${1:0} ${2:0} #${3:000};\nsnippet to\n\ttext-outline: ${1};\nsnippet to:n\n\ttext-outline: none;\nsnippet tr\n\ttext-replace: ${1};\nsnippet tr:n\n\ttext-replace: none;\nsnippet tsh+\n\ttext-shadow: ${1:0} ${2:0} ${3:0} #${4:000};\nsnippet tsh\n\ttext-shadow: ${1};\nsnippet tsh:n\n\ttext-shadow: none;\nsnippet tt\n\ttext-transform: ${1};\nsnippet tt:c\n\ttext-transform: capitalize;\nsnippet tt:l\n\ttext-transform: lowercase;\nsnippet tt:n\n\ttext-transform: none;\nsnippet tt:u\n\ttext-transform: uppercase;\nsnippet tw\n\ttext-wrap: ${1};\nsnippet tw:no\n\ttext-wrap: none;\nsnippet tw:n\n\ttext-wrap: normal;\nsnippet tw:s\n\ttext-wrap: suppress;\nsnippet tw:u\n\ttext-wrap: unrestricted;\nsnippet t\n\ttop: ${1};\nsnippet t:a\n\ttop: auto;\nsnippet va\n\tvertical-align: ${1};\nsnippet va:bl\n\tvertical-align: baseline;\nsnippet va:b\n\tvertical-align: bottom;\nsnippet va:m\n\tvertical-align: middle;\nsnippet va:sub\n\tvertical-align: sub;\nsnippet va:sup\n\tvertical-align: super;\nsnippet va:tb\n\tvertical-align: text-bottom;\nsnippet va:tt\n\tvertical-align: text-top;\nsnippet va:t\n\tvertical-align: top;\nsnippet v\n\tvisibility: ${1};\nsnippet v:c\n\tvisibility: collapse;\nsnippet v:h\n\tvisibility: hidden;\nsnippet v:v\n\tvisibility: visible;\nsnippet whsc\n\twhite-space-collapse: ${1};\nsnippet whsc:ba\n\twhite-space-collapse: break-all;\nsnippet whsc:bs\n\twhite-space-collapse: break-strict;\nsnippet whsc:k\n\twhite-space-collapse: keep-all;\nsnippet whsc:l\n\twhite-space-collapse: loose;\nsnippet whsc:n\n\twhite-space-collapse: normal;\nsnippet whs\n\twhite-space: ${1};\nsnippet whs:n\n\twhite-space: normal;\nsnippet whs:nw\n\twhite-space: nowrap;\nsnippet whs:pl\n\twhite-space: pre-line;\nsnippet whs:pw\n\twhite-space: pre-wrap;\nsnippet whs:p\n\twhite-space: pre;\nsnippet wid\n\twidows: ${1};\nsnippet w\n\twidth: ${1};\nsnippet w:a\n\twidth: auto;\nsnippet wob\n\tword-break: ${1};\nsnippet wob:ba\n\tword-break: break-all;\nsnippet wob:bs\n\tword-break: break-strict;\nsnippet wob:k\n\tword-break: keep-all;\nsnippet wob:l\n\tword-break: loose;\nsnippet wob:n\n\tword-break: normal;\nsnippet wos\n\tword-spacing: ${1};\nsnippet wow\n\tword-wrap: ${1};\nsnippet wow:no\n\tword-wrap: none;\nsnippet wow:n\n\tword-wrap: normal;\nsnippet wow:s\n\tword-wrap: suppress;\nsnippet wow:u\n\tword-wrap: unrestricted;\nsnippet z\n\tz-index: ${1};\nsnippet z:a\n\tz-index: auto;\nsnippet zoo\n\tzoom: 1;\n"
  },
  {
    "path": "lib/ace/snippets/curly.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./curly.snippets\");\nexports.scope = \"curly\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/curly.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/d.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./d.snippets\");\nexports.scope = \"d\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/d.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/dart.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./dart.snippets\");\nexports.scope = \"dart\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/dart.snippets",
    "content": "snippet lib\n\tlibrary ${1};\n\t${2}\nsnippet im\n\timport '${1}';\n\t${2}\nsnippet pa\n\tpart '${1}';\n\t${2}\nsnippet pao\n\tpart of ${1};\n\t${2}\nsnippet main\n\tvoid main() {\n\t  ${1:/* code */}\n\t}\nsnippet st\n\tstatic ${1}\nsnippet fi\n\tfinal ${1}\nsnippet re\n\treturn ${1}\nsnippet br\n\tbreak;\nsnippet th\n\tthrow ${1}\nsnippet cl\n\tclass ${1:`Filename(\"\", \"untitled\")`} ${2}\nsnippet imp\n\timplements ${1}\nsnippet ext\n\textends ${1}\nsnippet if\n\tif (${1:true}) {\n\t  ${2}\n\t}\nsnippet ife\n\tif (${1:true}) {\n\t  ${2}\n\t} else {\n\t  ${3}\n\t}\nsnippet el\n\telse\nsnippet sw\n\tswitch (${1}) {\n\t  ${2}\n\t}\nsnippet cs\n\tcase ${1}:\n\t  ${2}\nsnippet de\n\tdefault:\n\t  ${1}\nsnippet for\n\tfor (var ${2:i} = 0, len = ${1:things}.length; $2 < len; ${3:++}$2) {\n\t  ${4:$1[$2]}\n\t}\nsnippet fore\n\tfor (final ${2:item} in ${1:itemList}) {\n\t  ${3:/* code */}\n\t}\nsnippet wh\n\twhile (${1:/* condition */}) {\n\t  ${2:/* code */}\n\t}\nsnippet dowh\n\tdo {\n\t  ${2:/* code */}\n\t} while (${1:/* condition */});\nsnippet as\n\tassert(${1:/* condition */});\nsnippet try\n\ttry {\n\t  ${2}\n\t} catch (${1:Exception e}) {\n\t}\nsnippet tryf\n\ttry {\n\t  ${2}\n\t} catch (${1:Exception e}) {\n\t} finally {\n\t}\n"
  },
  {
    "path": "lib/ace/snippets/diff.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./diff.snippets\");\nexports.scope = \"diff\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/diff.snippets",
    "content": "# DEP-3 (http://dep.debian.net/deps/dep3/) style patch header\nsnippet header DEP-3 style header\n\tDescription: ${1}\n\tOrigin: ${2:vendor|upstream|other}, ${3:url of the original patch}\n\tBug: ${4:url in upstream bugtracker}\n\tForwarded: ${5:no|not-needed|url}\n\tAuthor: ${6:`g:snips_author`}\n\tReviewed-by: ${7:name and email}\n\tLast-Update: ${8:`strftime(\"%Y-%m-%d\")`}\n\tApplied-Upstream: ${9:upstream version|url|commit}\n\n"
  },
  {
    "path": "lib/ace/snippets/django.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./django.snippets\");\nexports.scope = \"django\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/django.snippets",
    "content": "# Model Fields\n\n# Note: Optional arguments are using defaults that match what Django will use\n# as a default, e.g. with max_length fields.  Doing this as a form of self\n# documentation and to make it easy to know whether you should override the\n# default or not.\n\n# Note: Optional arguments that are booleans will use the opposite since you\n# can either not specify them, or override them, e.g. auto_now_add=False.\n\nsnippet auto\n\t${1:FIELDNAME} = models.AutoField(${2})\nsnippet bool\n\t${1:FIELDNAME} = models.BooleanField(${2:default=True})\nsnippet char\n\t${1:FIELDNAME} = models.CharField(max_length=${2}${3:, blank=True})\nsnippet comma\n\t${1:FIELDNAME} = models.CommaSeparatedIntegerField(max_length=${2}${3:, blank=True})\nsnippet date\n\t${1:FIELDNAME} = models.DateField(${2:auto_now_add=True, auto_now=True}${3:, blank=True, null=True})\nsnippet datetime\n\t${1:FIELDNAME} = models.DateTimeField(${2:auto_now_add=True, auto_now=True}${3:, blank=True, null=True})\nsnippet decimal\n\t${1:FIELDNAME} = models.DecimalField(max_digits=${2}, decimal_places=${3})\nsnippet email\n\t${1:FIELDNAME} = models.EmailField(max_length=${2:75}${3:, blank=True})\nsnippet file\n\t${1:FIELDNAME} = models.FileField(upload_to=${2:path/for/upload}${3:, max_length=100})\nsnippet filepath\n\t${1:FIELDNAME} = models.FilePathField(path=${2:\"/abs/path/to/dir\"}${3:, max_length=100}${4:, match=\"*.ext\"}${5:, recursive=True}${6:, blank=True, })\nsnippet float\n\t${1:FIELDNAME} = models.FloatField(${2})\nsnippet image\n\t${1:FIELDNAME} = models.ImageField(upload_to=${2:path/for/upload}${3:, height_field=height, width_field=width}${4:, max_length=100})\nsnippet int\n\t${1:FIELDNAME} = models.IntegerField(${2})\nsnippet ip\n\t${1:FIELDNAME} = models.IPAddressField(${2})\nsnippet nullbool\n\t${1:FIELDNAME} = models.NullBooleanField(${2})\nsnippet posint\n\t${1:FIELDNAME} = models.PositiveIntegerField(${2})\nsnippet possmallint\n\t${1:FIELDNAME} = models.PositiveSmallIntegerField(${2})\nsnippet slug\n\t${1:FIELDNAME} = models.SlugField(max_length=${2:50}${3:, blank=True})\nsnippet smallint\n\t${1:FIELDNAME} = models.SmallIntegerField(${2})\nsnippet text\n\t${1:FIELDNAME} = models.TextField(${2:blank=True})\nsnippet time\n\t${1:FIELDNAME} = models.TimeField(${2:auto_now_add=True, auto_now=True}${3:, blank=True, null=True})\nsnippet url\n\t${1:FIELDNAME} = models.URLField(${2:verify_exists=False}${3:, max_length=200}${4:, blank=True})\nsnippet xml\n\t${1:FIELDNAME} = models.XMLField(schema_path=${2:None}${3:, blank=True})\n# Relational Fields\nsnippet fk\n\t${1:FIELDNAME} = models.ForeignKey(${2:OtherModel}${3:, related_name=''}${4:, limit_choices_to=}${5:, to_field=''})\nsnippet m2m\n\t${1:FIELDNAME} = models.ManyToManyField(${2:OtherModel}${3:, related_name=''}${4:, limit_choices_to=}${5:, symmetrical=False}${6:, through=''}${7:, db_table=''})\nsnippet o2o\n\t${1:FIELDNAME} = models.OneToOneField(${2:OtherModel}${3:, parent_link=True}${4:, related_name=''}${5:, limit_choices_to=}${6:, to_field=''})\n\n# Code Skeletons\n\nsnippet form\n\tclass ${1:FormName}(forms.Form):\n\t\t\"\"\"${2:docstring}\"\"\"\n\t\t${3}\n\nsnippet model\n\tclass ${1:ModelName}(models.Model):\n\t\t\"\"\"${2:docstring}\"\"\"\n\t\t${3}\n\t\t\n\t\tclass Meta:\n\t\t\t${4}\n\t\t\n\t\tdef __unicode__(self):\n\t\t\t${5}\n\t\t\n\t\tdef save(self, force_insert=False, force_update=False):\n\t\t\t${6}\n\t\t\n\t\t@models.permalink\n\t\tdef get_absolute_url(self):\n\t\t\treturn ('${7:view_or_url_name}' ${8})\n\nsnippet modeladmin\n\tclass ${1:ModelName}Admin(admin.ModelAdmin):\n\t\t${2}\n\t\n\tadmin.site.register($1, $1Admin)\n\t\nsnippet tabularinline\n\tclass ${1:ModelName}Inline(admin.TabularInline):\n\t\tmodel = $1\n\nsnippet stackedinline\n\tclass ${1:ModelName}Inline(admin.StackedInline):\n\t\tmodel = $1\n\nsnippet r2r\n\treturn render_to_response('${1:template.html}', {\n\t\t\t${2}\n\t\t}${3:, context_instance=RequestContext(request)}\n\t)\n"
  },
  {
    "path": "lib/ace/snippets/dockerfile.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./dockerfile.snippets\");\nexports.scope = \"dockerfile\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/dockerfile.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/dot.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./dot.snippets\");\nexports.scope = \"dot\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/dot.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/drools.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./drools.snippets\");\nexports.scope = \"drools\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/drools.snippets",
    "content": "\nsnippet rule\n\trule \"${1?:rule_name}\"\n\twhen\n\t\t${2:// when...} \n\tthen\n\t\t${3:// then...}\n\tend\n\nsnippet query\n\tquery ${1?:query_name}\n\t\t${2:// find} \n\tend\n\t\nsnippet declare\n\tdeclare ${1?:type_name}\n\t\t${2:// attributes} \n\tend\n\n"
  },
  {
    "path": "lib/ace/snippets/dummy.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./.snippets\");\nexports.scope = \"\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/dummy_syntax.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./.snippets\");\nexports.scope = \"\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/eiffel.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./eiffel.snippets\");\nexports.scope = \"eiffel\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/eiffel.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/ejs.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./ejs.snippets\");\nexports.scope = \"ejs\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/ejs.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/elixir.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./.snippets\");\nexports.scope = \"\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/elixir.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/elm.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./elm.snippets\");\nexports.scope = \"elm\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/elm.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/erlang.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./erlang.snippets\");\nexports.scope = \"erlang\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/erlang.snippets",
    "content": "# module and export all\nsnippet mod\n\t-module(${1:`Filename('', 'my')`}).\n\t\n\t-compile([export_all]).\n\t\n\tstart() ->\n\t    ${2}\n\t\n\tstop() ->\n\t    ok.\n# define directive\nsnippet def\n\t-define(${1:macro}, ${2:body}).${3}\n# export directive\nsnippet exp\n\t-export([${1:function}/${2:arity}]).\n# include directive\nsnippet inc\n\t-include(\"${1:file}\").${2}\n# behavior directive\nsnippet beh\n\t-behaviour(${1:behaviour}).${2}\n# if expression\nsnippet if\n\tif\n\t    ${1:guard} ->\n\t        ${2:body}\n\tend\n# case expression\nsnippet case\n\tcase ${1:expression} of\n\t    ${2:pattern} ->\n\t        ${3:body};\n\tend\n# anonymous function\nsnippet fun\n\tfun (${1:Parameters}) -> ${2:body} end${3}\n# try...catch\nsnippet try\n\ttry\n\t    ${1}\n\tcatch\n\t    ${2:_:_} -> ${3:got_some_exception}\n\tend\n# record directive\nsnippet rec\n\t-record(${1:record}, {\n\t    ${2:field}=${3:value}}).${4}\n# todo comment\nsnippet todo\n\t%% TODO: ${1}\n## Snippets below (starting with '%') are in EDoc format.\n## See http://www.erlang.org/doc/apps/edoc/chapter.html#id56887 for more details\n# doc comment\nsnippet %d\n\t%% @doc ${1}\n# end of doc comment\nsnippet %e\n\t%% @end\n# specification comment\nsnippet %s\n\t%% @spec ${1}\n# private function marker\nsnippet %p\n\t%% @private\n# OTP application\nsnippet application\n\t-module(${1:`Filename('', 'my')`}).\n\n\t-behaviour(application).\n\n\t-export([start/2, stop/1]).\n\n\tstart(_Type, _StartArgs) ->\n\t    case ${2:root_supervisor}:start_link() of\n\t        {ok, Pid} ->\n\t            {ok, Pid};\n\t        Other ->\n\t\t          {error, Other}\n\t    end.\n\n\tstop(_State) ->\n\t    ok.\t\n# OTP supervisor\nsnippet supervisor\n\t-module(${1:`Filename('', 'my')`}).\n\n\t-behaviour(supervisor).\n\n\t%% API\n\t-export([start_link/0]).\n\n\t%% Supervisor callbacks\n\t-export([init/1]).\n\n\t-define(SERVER, ?MODULE).\n\n\tstart_link() ->\n\t    supervisor:start_link({local, ?SERVER}, ?MODULE, []).\n\n\tinit([]) ->\n\t    Server = {${2:my_server}, {$2, start_link, []},\n\t      permanent, 2000, worker, [$2]},\n\t    Children = [Server],\n\t    RestartStrategy = {one_for_one, 0, 1},\n\t    {ok, {RestartStrategy, Children}}.\n# OTP gen_server\nsnippet gen_server\n\t-module(${1:`Filename('', 'my')`}).\n\n\t-behaviour(gen_server).\n\n\t%% API\n\t-export([\n\t         start_link/0\n\t        ]).\n\n\t%% gen_server callbacks\n\t-export([init/1, handle_call/3, handle_cast/2, handle_info/2,\n\t         terminate/2, code_change/3]).\n\n\t-define(SERVER, ?MODULE).\n\n\t-record(state, {}).\n\n\t%%%===================================================================\n\t%%% API\n\t%%%===================================================================\n\n\tstart_link() ->\n\t    gen_server:start_link({local, ?SERVER}, ?MODULE, [], []).\n\n\t%%%===================================================================\n\t%%% gen_server callbacks\n\t%%%===================================================================\n\n\tinit([]) ->\n\t    {ok, #state{}}.\n\n\thandle_call(_Request, _From, State) ->\n\t    Reply = ok,\n\t    {reply, Reply, State}.\n\n\thandle_cast(_Msg, State) ->\n\t    {noreply, State}.\n\n\thandle_info(_Info, State) ->\n\t    {noreply, State}.\n\n\tterminate(_Reason, _State) ->\n\t    ok.\n\n\tcode_change(_OldVsn, State, _Extra) ->\n\t    {ok, State}.\n\n\t%%%===================================================================\n\t%%% Internal functions\n\t%%%===================================================================\n\n"
  },
  {
    "path": "lib/ace/snippets/eruby.snippets",
    "content": "# .erb and .rhmtl files\n\n# Includes html.snippets\n\n# Rails *****************************\nsnippet rc\n\t<% ${1} %>\nsnippet rce\n\t<%= ${1} %>${2}\nsnippet %\n\t<% ${1} %>\nsnippet =\n\t<%= ${1} %>${2}\nsnippet end\n\t<% end %>${1}\nsnippet ead\n\t<% ${1}.each do |${2}| %>\n\t\t${3}\n\t<% end %>\nsnippet for\n\t<% for ${2:item} in ${1} %>\n\t\t${3}\n\t<% end %>\nsnippet rp\n\t<%= render :partial => '${1:item}' %>\nsnippet rpl\n\t<%= render :partial => '${1:item}', :locals => { :${2:name} => '${3:value}'$4 } %>\nsnippet rps\n\t<%= render :partial => '${1:item}', :status => ${2:500} %>\nsnippet rpc\n\t<%= render :partial => '${1:item}', :collection => ${2:items} %>\nsnippet lia\n\t<%= link_to '${1:link text...}', :action => '${2:index}' %>\nsnippet liai\n\t<%= link_to '${1:link text...}', :action => '${2:edit}', :id => ${3:@item} %>\nsnippet lic\n\t<%= link_to '${1:link text...}', :controller => '${2:items}' %>\nsnippet lica\n\t<%= link_to '${1:link text...}', :controller => '${2:items}', :action => '${3:index}' %>\nsnippet licai\n\t<%= link_to '${1:link text...}', :controller => '${2:items}', :action => '${3:edit}', :id => ${4:@item} %>\nsnippet yield\n\t<%= yield ${1::content_symbol} %>${2}\nsnippet conf\n\t<% content_for :${1:head} do %>\n\t\t${2}\n\t<% end %>\nsnippet cs\n\t<%= collection_select <+object+>, <+method+>, <+collection+>, <+value_method+>, <+text_method+><+, <+[options]+>, <+[html_options]+>+> %>\nsnippet ct\n\t<%= content_tag '${1:DIV}', ${2:content}${3:,options} %>\nsnippet ff\n\t<% form_for @${1:model} do |f| %>\n\t\t${2}\n\t<% end %>\nsnippet ffcb\n\t<%= ${1:f}.check_box :${2:attribute} %>\nsnippet ffe\n\t<% error_messages_for :${1:model} %>\n\t\n\t<% form_for @${2:model} do |f| %>\n\t\t${3}\n\t<% end %>\nsnippet ffff\n\t<%= ${1:f}.file_field :${2:attribute} %>\nsnippet ffhf\n\t<%= ${1:f}.hidden_field :${2:attribute} %>\nsnippet ffl\n\t<%= ${1:f}.label :${2:attribute}, '${3:$2}' %>\nsnippet ffpf\n\t<%= ${1:f}.password_field :${2:attribute} %>\nsnippet ffrb\n\t<%= ${1:f}.radio_button :${2:attribute}, :${3:tag_value} %>\nsnippet ffs\n\t<%= ${1:f}.submit \"${2:submit}\" %>\nsnippet ffta\n\t<%= ${1:f}.text_area :${2:attribute} %>\nsnippet fftf\n\t<%= ${1:f}.text_field :${2:attribute} %>\nsnippet fields\n\t<% fields_for :${1:model}, @$1 do |${2:f}| %>\n\t\t${3}\n\t<% end %>\nsnippet i18\n\tI18n.t('${1:type.key}')${2}\nsnippet it\n\t<%= image_tag \"${1}\"${2} %>\nsnippet jit\n\t<%= javascript_include_tag ${1::all} %>\nsnippet jsit\n\t<%= javascript_include_tag \"${1}\" %>\nsnippet lim\n\t<%= link_to ${1:model}.${2:name}, ${3:$1}_path(${4:$1}) %>\nsnippet linp\n\t<%= link_to \"${1:Link text...}\", ${2:parent}_${3:child}_path(${4:@$2}, ${5:@$3}) %>\nsnippet linpp\n\t<%= link_to \"${1:Link text...}\", ${2:parent}_${3:child}_path(${4:@$2}) %>\nsnippet lip\n\t<%= link_to \"${1:Link text...}\", ${2:model}_path(${3:@$2}) %>\nsnippet lipp\n\t<%= link_to \"${1:Link text...}\", ${2:model}s_path %>\nsnippet lt\n\t<%= link_to \"${1:name}\", ${2:dest} %>\nsnippet ofcfs\n\t<%= options_from_collection_for_select ${1:collection}, ${2:value_method}, ${3:text_method}, ${4:selected_value} %>\nsnippet rf\n\t<%= render :file => \"${1:file}\"${2} %>\nsnippet rt\n\t<%= render :template => \"${1:file}\"${2} %>\nsnippet slt\n\t<%= stylesheet_link_tag ${1::all}, :cache => ${2:true} %>\nsnippet sslt\n\t<%= stylesheet_link_tag \"${1}\" %>\n"
  },
  {
    "path": "lib/ace/snippets/falcon.snippets",
    "content": "snippet #!\n\t#!/usr/bin/env falcon\n\n# Import\t\nsnippet imp\n\timport ${1:module}\n\n# Function\nsnippet fun\n\tfunction ${2:function_name}(${3})\t\n\t\t${4:/* code */}\n\tend\t\n\n# Class\nsnippet class\n\tclass ${1:class_name}(${2:class_params})\n\t\t${3:/* members/methods */}\n\tend\n\n# If \nsnippet if\n\tif ${1:condition}\n\t\t${2:/* code */}\t\t\n\tend\n\n# If else\nsnippet ife\n\tif ${1:condition}\n\t\t${2:/* code */}\t\t\n\telse\n\t    ${1}\t\n\tend\n\n# If else if\t\nsnippet elif\n\telif ${1:condition}\n\t\t${2:/* code */}\t        \n\n# Switch case\nsnippet switch\n\tswitch ${1:expression}\n\t\tcase ${2:item}\n\t\tcase ${3:item}\n\t\tdefault \n\tend\n\n# Select\nsnippet select \n\tselect ${1:variable}\n\t\tcase ${2:TypeSpec}\n\t\tcase ${3:TypeSpec}\n\t\tdefault\n\tend\n\n# For/in Loop\nsnippet forin\n\tfor ${1:element} in ${2:container}\n\t\t${3:/* code */}\n\tend\n\n# For/to Loop\nsnippet forto\n\tfor ${1:lowerbound} to ${2:upperbound}\n\t\t${3:/* code */}\n\tend\n\n# While Loop\nsnippet while \n\twhile ${1:conidition}\n\t\t${2:/* code */}\t\n\tend\n"
  },
  {
    "path": "lib/ace/snippets/forth.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./forth.snippets\");\nexports.scope = \"forth\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/forth.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/ftl.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./ftl.snippets\");\nexports.scope = \"ftl\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/ftl.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/gcode.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./gcode.snippets\");\nexports.scope = \"gcode\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/gcode.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/gherkin.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./gherkin.snippets\");\nexports.scope = \"gherkin\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/gherkin.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/gitignore.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./gitignore.snippets\");\nexports.scope = \"gitignore\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/gitignore.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/glsl.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./glsl.snippets\");\nexports.scope = \"glsl\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/glsl.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/go.snippets",
    "content": "# append\nsnippet ap\n\tappend(${1:slice}, ${2:value})\n# bool\nsnippet bl\n\tbool\n# byte \nsnippet bt\n\tbyte\n# break\nsnippet br\n\tbreak\n# channel\nsnippet ch\n\tchan ${1:int}\n# case\nsnippet cs\n\tcase ${1:value}:\n\t\t${2:/* code */}\n# const\nsnippet c\n\tconst ${1:NAME} = ${2:0}\n# constants with iota\nsnippet co\n\tconst (\n\t\t${1:NAME1} = iota\n\t\t${2:NAME2}\n\t)\n# continue\nsnippet cn\n\tcontinue\n# defer \nsnippet df\n\tdefer ${1:func}()\n# defer recover\nsnippet dfr\n\tdefer func() {\n\t\tif err := recover(); err != nil {\n\t\t\t${1:/* code */}\n\t\t}\n\t}()\n# gpl\nsnippet gpl\n\t/*\n\t * This program is free software; you can redistribute it and/or modify\n\t * it under the terms of the GNU General Public License as published by\n\t * the Free Software Foundation; either version 2 of the License, or\n\t * (at your option) any later version.\n\t *\n\t * This program is distributed in the hope that it will be useful,\n\t * but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n\t * GNU General Public License for more details.\n\t *\n\t * You should have received a copy of the GNU General Public License\n\t * along with this program; if not, write to the Free Software\n\t * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\n\t *\n\t * Copyright (C) ${1:Author}, `strftime(\"%Y\")`\n\t */\n\t\n\t${2}\n# int\nsnippet i\n\tint\n# import \nsnippet im\n\timport (\n\t\t\"${1:package}\" \n\t)\n# interface \nsnippet in\n\tinterface{}\n# full interface snippet \nsnippet inf\n\tinterface ${1:name} {\n\t\t${2:/* methods */}\n\t}${3}\n# if condition\nsnippet if\n\tif ${1:/* condition */} {\n\t\t${2:/* code */}\n\t}\n# else snippet\nsnippet el\n\telse {\n\t\t${1}\n\t}\n# error snippet\nsnippet ir\n\tif err != nil {\n\t\treturn err\n\t}\n\t${1}\n# false\nsnippet f\n\tfalse\n# fallthrough\nsnippet ft\n\tfallthrough\n# float\nsnippet fl\n\tfloat32\n# float32\nsnippet f3\n\tfloat32\n# float64\nsnippet f6\n\tfloat64\n# if else\nsnippet ie\n\tif ${1:/* condition */} {\n\t\t${2:/* code */}\n\t} else {\n\t\t${3}\n\t}\n# for loop\nsnippet fo\n\tfor ${2:i} = 0; $2 < ${1:count}; $2${3:++} {\n\t\t${4:/* code */}\n\t}\n# for range loop\nsnippet fr\n\tfor ${1:k}, ${2:v} := range ${3} {\n\t\t${4:/* code */}\n\t}\n# function simple \nsnippet fun\n\tfunc ${1:funcName}(${2}) ${3:os.Error} {\n\t\t${4:/* code */}\n\t}\n# function on receiver \nsnippet fum\n\tfunc (self ${1:type}) ${2:funcName}(${3}) ${4:os.Error} {\n\t\t${5:/* code */}\n\t}\n# make\nsnippet mk\n\tmake(${1:[]string}, ${2:0})\n# map \nsnippet mp\n\tmap[${1:string}]${2:int}\n# main()\nsnippet main\n\tfunc main() {\n\t\t${1:/* code */}\n\t}\n# new\nsnippet nw\n\tnew(${1:type})\n# panic \nsnippet pn\n\tpanic(\"${1:msg}\")\n# print\nsnippet pr\n\tfmt.Printf(\"${1:%s}\\n\", ${2:var})${3}\n# range \nsnippet rn\n\trange ${1}\n# return \nsnippet rt\n\treturn ${1}\n# result \nsnippet rs\n\tresult\n# select\nsnippet sl\n\tselect {\n\tcase ${1:v1} := <-${2:chan1}\n\t\t${3:/* code */}\n\tcase ${4:v2} := <-${5:chan2}\n\t\t${6:/* code */}\n\tdefault:\n\t\t${7:/* code */}\n\t}\n# string\nsnippet sr\n\tstring\n# struct\nsnippet st\n\tstruct ${1:name} {\n\t\t${2:/* data */}\n\t}${4}\n# switch \nsnippet sw\n\tswitch ${1:var} {\n\tcase ${2:value1}:\n\t\t${3:/* code */}\n\tcase ${4:value2}:\n\t\t${5:/* code */}\n\tdefault:\n\t\t${6:/* code */}\n\t}\nsnippet sp\n\tfmt.Sprintf(\"${1:%s}\", ${2:var})${3}\n# true \nsnippet t\n\ttrue\n# variable declaration\nsnippet v\n\tvar ${1:t} ${2:string}\n"
  },
  {
    "path": "lib/ace/snippets/gobstones.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./gobstones.snippets\");\nexports.scope = \"gobstones\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/gobstones.snippets",
    "content": "# Procedure\nsnippet proc\n\tprocedure ${1?:name}(${2:argument}) {\n\t\t${3:// body...}\n\t}\n\n# Function\nsnippet fun\n\tfunction ${1?:name}(${2:argument}) {\n\t\treturn ${3:// body...}\n\t}\n\n# Repeat\nsnippet rep\n\trepeat ${1?:times} {\n\t\t${2:// body...}\n\t}\n\n# For\nsnippet for\n\tforeach ${1?:e} in ${2?:list} {\n\t\t${3:// body...}\t\n\t}\n\n# If\nsnippet if\n\tif (${1?:condition}) {\n\t\t${3:// body...}\t\n\t}\n\n# While\n  while (${1?:condition}) {\n    ${2:// body...}\t\n  }\n"
  },
  {
    "path": "lib/ace/snippets/golang.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./golang.snippets\");\nexports.scope = \"golang\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/golang.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/graphqlschema.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./graphqlschema.snippets\");\nexports.scope = \"graphqlschema\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/graphqlschema.snippets",
    "content": "# Type Snippet\ntrigger type\nsnippet type\n\ttype ${1:type_name} {\n\t\t${2:type_siblings}\n\t}\n\n# Input Snippet\ntrigger input\nsnippet input\n\tinput ${1:input_name} {\n\t\t${2:input_siblings}\n\t}\n\n# Interface Snippet\ntrigger interface\nsnippet interface\n\tinterface ${1:interface_name} {\n\t\t${2:interface_siblings}\n\t}\n\n# Interface Snippet\ntrigger union\nsnippet union\n\tunion ${1:union_name} = ${2:type} | ${3: type}\n\n# Enum Snippet\ntrigger enum\nsnippet enum\n\tenum ${1:enum_name} {\n\t\t${2:enum_siblings}\n\t}\n"
  },
  {
    "path": "lib/ace/snippets/groovy.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./groovy.snippets\");\nexports.scope = \"groovy\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/groovy.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/haml.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./haml.snippets\");\nexports.scope = \"haml\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/haml.snippets",
    "content": "snippet t\n\t%table\n\t\t%tr\n\t\t\t%th\n\t\t\t\t${1:headers}\n\t\t%tr\n\t\t\t%td\n\t\t\t\t${2:headers}\nsnippet ul\n\t%ul\n\t\t%li\n\t\t\t${1:item}\n\t\t%li\nsnippet =rp\n\t= render :partial => '${1:partial}'\nsnippet =rpl\n\t= render :partial => '${1:partial}', :locals => {}\nsnippet =rpc\n\t= render :partial => '${1:partial}', :collection => @$1\n\n"
  },
  {
    "path": "lib/ace/snippets/handlebars.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./handlebars.snippets\");\nexports.scope = \"handlebars\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/handlebars.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/haskell.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./haskell.snippets\");\nexports.scope = \"haskell\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/haskell.snippets",
    "content": "snippet lang\n\t{-# LANGUAGE ${1:OverloadedStrings} #-}\nsnippet info\n\t-- |\n\t-- Module      :  ${1:Module.Namespace}\n\t-- Copyright   :  ${2:Author} ${3:2011-2012}\n\t-- License     :  ${4:BSD3}\n\t--\n\t-- Maintainer  :  ${5:email@something.com}\n\t-- Stability   :  ${6:experimental}\n\t-- Portability :  ${7:unknown}\n\t--\n\t-- ${8:Description}\n\t--\nsnippet import\n\timport           ${1:Data.Text}\nsnippet import2\n\timport           ${1:Data.Text} (${2:head})\nsnippet importq\n\timport qualified ${1:Data.Text} as ${2:T}\nsnippet inst\n\tinstance ${1:Monoid} ${2:Type} where\n\t\t${3}\nsnippet type\n\ttype ${1:Type} = ${2:Type}\nsnippet data\n\tdata ${1:Type} = ${2:$1} ${3:Int}\nsnippet newtype\n\tnewtype ${1:Type} = ${2:$1} ${3:Int}\nsnippet class\n\tclass ${1:Class} a where\n\t\t${2}\nsnippet module\n\tmodule `substitute(substitute(expand('%:r'), '[/\\\\]','.','g'),'^\\%(\\l*\\.\\)\\?','','')` (\n\t)\twhere\n\t`expand('%') =~ 'Main' ? \"\\n\\nmain = do\\n  print \\\"hello world\\\"\" : \"\"`\n\nsnippet const\n\t${1:name} :: ${2:a}\n\t$1 = ${3:undefined}\nsnippet fn\n\t${1:fn} :: ${2:a} -> ${3:a}\n\t$1 ${4} = ${5:undefined}\nsnippet fn2\n\t${1:fn} :: ${2:a} -> ${3:a} -> ${4:a}\n\t$1 ${5} = ${6:undefined}\nsnippet ap\n\t${1:map} ${2:fn} ${3:list}\nsnippet do\n\tdo\n\t\t\nsnippet λ\n\t\\${1:x} -> ${2}\nsnippet \\\n\t\\${1:x} -> ${2}\nsnippet <-\n\t${1:a} <- ${2:m a}\nsnippet ←\n\t${1:a} <- ${2:m a}\nsnippet ->\n\t${1:m a} -> ${2:a}\nsnippet →\n\t${1:m a} -> ${2:a}\nsnippet tup\n\t(${1:a}, ${2:b})\nsnippet tup2\n\t(${1:a}, ${2:b}, ${3:c})\nsnippet tup3\n\t(${1:a}, ${2:b}, ${3:c}, ${4:d})\nsnippet rec\n\t${1:Record} { ${2:recFieldA} = ${3:undefined}\n\t\t\t\t, ${4:recFieldB} = ${5:undefined}\n\t\t\t\t}\nsnippet case\n\tcase ${1:something} of\n\t\t${2} -> ${3}\nsnippet let\n\tlet ${1} = ${2}\n\tin ${3}\nsnippet where\n\twhere\n\t\t${1:fn} = ${2:undefined}\n"
  },
  {
    "path": "lib/ace/snippets/haxe.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./haxe.snippets\");\nexports.scope = \"haxe\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/haxe.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/hjson.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./.snippets\");\nexports.scope = \"\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/html.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./html.snippets\");\nexports.scope = \"html\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/html.snippets",
    "content": "# Some useful Unicode entities\n# Non-Breaking Space\nsnippet nbs\n\t&nbsp;\n# ←\nsnippet left\n\t&#x2190;\n# →\nsnippet right\n\t&#x2192;\n# ↑\nsnippet up\n\t&#x2191;\n# ↓\nsnippet down\n\t&#x2193;\n# ↩\nsnippet return\n\t&#x21A9;\n# ⇤\nsnippet backtab\n\t&#x21E4;\n# ⇥\nsnippet tab\n\t&#x21E5;\n# ⇧\nsnippet shift\n\t&#x21E7;\n# ⌃\nsnippet ctrl\n\t&#x2303;\n# ⌅\nsnippet enter\n\t&#x2305;\n# ⌘\nsnippet cmd\n\t&#x2318;\n# ⌥\nsnippet option\n\t&#x2325;\n# ⌦\nsnippet delete\n\t&#x2326;\n# ⌫\nsnippet backspace\n\t&#x232B;\n# ⎋\nsnippet esc\n\t&#x238B;\n# Generic Doctype\nsnippet doctype HTML 4.01 Strict\n\t<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"\n\t\"http://www.w3.org/TR/html4/strict.dtd\">\nsnippet doctype HTML 4.01 Transitional\n\t<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n\t\"http://www.w3.org/TR/html4/loose.dtd\">\nsnippet doctype HTML 5\n\t<!DOCTYPE HTML>\nsnippet doctype XHTML 1.0 Frameset\n\t<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n\t\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\nsnippet doctype XHTML 1.0 Strict\n\t<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n\t\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\nsnippet doctype XHTML 1.0 Transitional\n\t<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n\t\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\nsnippet doctype XHTML 1.1\n\t<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\"\n\t\"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\n# HTML Doctype 4.01 Strict\nsnippet docts\n\t<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"\n\t\"http://www.w3.org/TR/html4/strict.dtd\">\n# HTML Doctype 4.01 Transitional\nsnippet doct\n\t<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n\t\"http://www.w3.org/TR/html4/loose.dtd\">\n# HTML Doctype 5\nsnippet doct5\n\t<!DOCTYPE html>\n# XHTML Doctype 1.0 Frameset\nsnippet docxf\n\t<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Frameset//EN\"\n\t\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd\">\n# XHTML Doctype 1.0 Strict\nsnippet docxs\n\t<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n\t\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n# XHTML Doctype 1.0 Transitional\nsnippet docxt\n\t<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n\t\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n# XHTML Doctype 1.1\nsnippet docx\n\t<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\"\n\t\"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\n# html5shiv\nsnippet html5shiv\n\t<!--[if lte IE 8]>\n\t\t<script src=\"https://cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv.min.js\"></script>\n\t<![endif]-->\nsnippet html5printshiv\n\t<!--[if lte IE 8]>\n\t\t<script src=\"https://cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js\"></script>\n\t<![endif]-->\n# Attributes\nsnippet attr\n\t${1:attribute}=\"${2:property}\"\nsnippet attr+\n\t${1:attribute}=\"${2:property}\" attr+${3}\nsnippet .\n\tclass=\"${1}\"${2}\nsnippet #\n\tid=\"${1}\"${2}\nsnippet alt\n\talt=\"${1}\"${2}\nsnippet charset\n\tcharset=\"${1:utf-8}\"${2}\nsnippet data\n\tdata-${1}=\"${2:$1}\"${3}\nsnippet for\n\tfor=\"${1}\"${2}\nsnippet height\n\theight=\"${1}\"${2}\nsnippet href\n\thref=\"${1:#}\"${2}\nsnippet lang\n\tlang=\"${1:en}\"${2}\nsnippet media\n\tmedia=\"${1}\"${2}\nsnippet name\n\tname=\"${1}\"${2}\nsnippet rel\n\trel=\"${1}\"${2}\nsnippet scope\n\tscope=\"${1:row}\"${2}\nsnippet src\n\tsrc=\"${1}\"${2}\nsnippet title=\n\ttitle=\"${1}\"${2}\nsnippet type\n\ttype=\"${1}\"${2}\nsnippet value\n\tvalue=\"${1}\"${2}\nsnippet width\n\twidth=\"${1}\"${2}\n# Elements\nsnippet a\n\t<a href=\"${1:#}\">${2:$1}</a>\nsnippet a.\n\t<a class=\"${1}\" href=\"${2:#}\">${3:$1}</a>\nsnippet a#\n\t<a id=\"${1}\" href=\"${2:#}\">${3:$1}</a>\nsnippet a:ext\n\t<a href=\"http://${1:example.com}\">${2:$1}</a>\nsnippet a:mail\n\t<a href=\"mailto:${1:joe@example.com}?subject=${2:feedback}\">${3:email me}</a>\nsnippet abbr\n\t<abbr title=\"${1}\">${2}</abbr>\nsnippet address\n\t<address>\n\t\t${1}\n\t</address>\nsnippet area\n\t<area shape=\"${1:rect}\" coords=\"${2}\" href=\"${3}\" alt=\"${4}\" />\nsnippet area+\n\t<area shape=\"${1:rect}\" coords=\"${2}\" href=\"${3}\" alt=\"${4}\" />\n\tarea+${5}\nsnippet area:c\n\t<area shape=\"circle\" coords=\"${1}\" href=\"${2}\" alt=\"${3}\" />\nsnippet area:d\n\t<area shape=\"default\" coords=\"${1}\" href=\"${2}\" alt=\"${3}\" />\nsnippet area:p\n\t<area shape=\"poly\" coords=\"${1}\" href=\"${2}\" alt=\"${3}\" />\nsnippet area:r\n\t<area shape=\"rect\" coords=\"${1}\" href=\"${2}\" alt=\"${3}\" />\nsnippet article\n\t<article>\n\t\t${1}\n\t</article>\nsnippet article.\n\t<article class=\"${1}\">\n\t\t${2}\n\t</article>\nsnippet article#\n\t<article id=\"${1}\">\n\t\t${2}\n\t</article>\nsnippet aside\n\t<aside>\n\t\t${1}\n\t</aside>\nsnippet aside.\n\t<aside class=\"${1}\">\n\t\t${2}\n\t</aside>\nsnippet aside#\n\t<aside id=\"${1}\">\n\t\t${2}\n\t</aside>\nsnippet audio\n\t<audio src=\"${1}>${2}</audio>\nsnippet b\n\t<b>${1}</b>\nsnippet base\n\t<base href=\"${1}\" target=\"${2}\" />\nsnippet bdi\n\t<bdi>${1}</bdo>\nsnippet bdo\n\t<bdo dir=\"${1}\">${2}</bdo>\nsnippet bdo:l\n\t<bdo dir=\"ltr\">${1}</bdo>\nsnippet bdo:r\n\t<bdo dir=\"rtl\">${1}</bdo>\nsnippet blockquote\n\t<blockquote>\n\t\t${1}\n\t</blockquote>\nsnippet body\n\t<body>\n\t\t${1}\n\t</body>\nsnippet br\n\t<br />${1}\nsnippet button\n\t<button type=\"${1:submit}\">${2}</button>\nsnippet button.\n\t<button class=\"${1:button}\" type=\"${2:submit}\">${3}</button>\nsnippet button#\n\t<button id=\"${1}\" type=\"${2:submit}\">${3}</button>\nsnippet button:s\n\t<button type=\"submit\">${1}</button>\nsnippet button:r\n\t<button type=\"reset\">${1}</button>\nsnippet canvas\n\t<canvas>\n\t\t${1}\n\t</canvas>\nsnippet caption\n\t<caption>${1}</caption>\nsnippet cite\n\t<cite>${1}</cite>\nsnippet code\n\t<code>${1}</code>\nsnippet col\n\t<col />${1}\nsnippet col+\n\t<col />\n\tcol+${1}\nsnippet colgroup\n\t<colgroup>\n\t\t${1}\n\t</colgroup>\nsnippet colgroup+\n\t<colgroup>\n\t\t<col />\n\t\tcol+${1}\n\t</colgroup>\nsnippet command\n\t<command type=\"command\" label=\"${1}\" icon=\"${2}\" />\nsnippet command:c\n\t<command type=\"checkbox\" label=\"${1}\" icon=\"${2}\" />\nsnippet command:r\n\t<command type=\"radio\" radiogroup=\"${1}\" label=\"${2}\" icon=\"${3}\" />\nsnippet datagrid\n\t<datagrid>\n\t\t${1}\n\t</datagrid>\nsnippet datalist\n\t<datalist>\n\t\t${1}\n\t</datalist>\nsnippet datatemplate\n\t<datatemplate>\n\t\t${1}\n\t</datatemplate>\nsnippet dd\n\t<dd>${1}</dd>\nsnippet dd.\n\t<dd class=\"${1}\">${2}</dd>\nsnippet dd#\n\t<dd id=\"${1}\">${2}</dd>\nsnippet del\n\t<del>${1}</del>\nsnippet details\n\t<details>${1}</details>\nsnippet dfn\n\t<dfn>${1}</dfn>\nsnippet dialog\n\t<dialog>\n\t\t${1}\n\t</dialog>\nsnippet div\n\t<div>\n\t\t${1}\n\t</div>\nsnippet div.\n\t<div class=\"${1}\">\n\t\t${2}\n\t</div>\nsnippet div#\n\t<div id=\"${1}\">\n\t\t${2}\n\t</div>\nsnippet dl\n\t<dl>\n\t\t${1}\n\t</dl>\nsnippet dl.\n\t<dl class=\"${1}\">\n\t\t${2}\n\t</dl>\nsnippet dl#\n\t<dl id=\"${1}\">\n\t\t${2}\n\t</dl>\nsnippet dl+\n\t<dl>\n\t\t<dt>${1}</dt>\n\t\t<dd>${2}</dd>\n\t\tdt+${3}\n\t</dl>\nsnippet dt\n\t<dt>${1}</dt>\nsnippet dt.\n\t<dt class=\"${1}\">${2}</dt>\nsnippet dt#\n\t<dt id=\"${1}\">${2}</dt>\nsnippet dt+\n\t<dt>${1}</dt>\n\t<dd>${2}</dd>\n\tdt+${3}\nsnippet em\n\t<em>${1}</em>\nsnippet embed\n\t<embed src=${1} type=\"${2} />\nsnippet fieldset\n\t<fieldset>\n\t\t${1}\n\t</fieldset>\nsnippet fieldset.\n\t<fieldset class=\"${1}\">\n\t\t${2}\n\t</fieldset>\nsnippet fieldset#\n\t<fieldset id=\"${1}\">\n\t\t${2}\n\t</fieldset>\nsnippet fieldset+\n\t<fieldset>\n\t\t<legend><span>${1}</span></legend>\n\t\t${2}\n\t</fieldset>\n\tfieldset+${3}\nsnippet figcaption\n\t<figcaption>${1}</figcaption>\nsnippet figure\n\t<figure>${1}</figure>\nsnippet footer\n\t<footer>\n\t\t${1}\n\t</footer>\nsnippet footer.\n\t<footer class=\"${1}\">\n\t\t${2}\n\t</footer>\nsnippet footer#\n\t<footer id=\"${1}\">\n\t\t${2}\n\t</footer>\nsnippet form\n\t<form action=\"${1}\" method=\"${2:get}\" accept-charset=\"utf-8\">\n\t\t${3}\n\t</form>\nsnippet form.\n\t<form class=\"${1}\" action=\"${2}\" method=\"${3:get}\" accept-charset=\"utf-8\">\n\t\t${4}\n\t</form>\nsnippet form#\n\t<form id=\"${1}\" action=\"${2}\" method=\"${3:get}\" accept-charset=\"utf-8\">\n\t\t${4}\n\t</form>\nsnippet h1\n\t<h1>${1}</h1>\nsnippet h1.\n\t<h1 class=\"${1}\">${2}</h1>\nsnippet h1#\n\t<h1 id=\"${1}\">${2}</h1>\nsnippet h2\n\t<h2>${1}</h2>\nsnippet h2.\n\t<h2 class=\"${1}\">${2}</h2>\nsnippet h2#\n\t<h2 id=\"${1}\">${2}</h2>\nsnippet h3\n\t<h3>${1}</h3>\nsnippet h3.\n\t<h3 class=\"${1}\">${2}</h3>\nsnippet h3#\n\t<h3 id=\"${1}\">${2}</h3>\nsnippet h4\n\t<h4>${1}</h4>\nsnippet h4.\n\t<h4 class=\"${1}\">${2}</h4>\nsnippet h4#\n\t<h4 id=\"${1}\">${2}</h4>\nsnippet h5\n\t<h5>${1}</h5>\nsnippet h5.\n\t<h5 class=\"${1}\">${2}</h5>\nsnippet h5#\n\t<h5 id=\"${1}\">${2}</h5>\nsnippet h6\n\t<h6>${1}</h6>\nsnippet h6.\n\t<h6 class=\"${1}\">${2}</h6>\nsnippet h6#\n\t<h6 id=\"${1}\">${2}</h6>\nsnippet head\n\t<head>\n\t\t<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />\n\n\t\t<title>${1:`substitute(Filename('', 'Page Title'), '^.', '\\u&', '')`}</title>\n\t\t${2}\n\t</head>\nsnippet header\n\t<header>\n\t\t${1}\n\t</header>\nsnippet header.\n\t<header class=\"${1}\">\n\t\t${2}\n\t</header>\nsnippet header#\n\t<header id=\"${1}\">\n\t\t${2}\n\t</header>\nsnippet hgroup\n\t<hgroup>\n\t\t${1}\n\t</hgroup>\nsnippet hgroup.\n\t<hgroup class=\"${1}>\n\t\t${2}\n\t</hgroup>\nsnippet hr\n\t<hr />${1}\nsnippet html\n\t<html>\n\t${1}\n\t</html>\nsnippet xhtml\n\t<html xmlns=\"http://www.w3.org/1999/xhtml\">\n\t${1}\n\t</html>\nsnippet html5\n\t<!DOCTYPE html>\n\t<html>\n\t\t<head>\n\t\t\t<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />\n\t\t\t<title>${1:`substitute(Filename('', 'Page Title'), '^.', '\\u&', '')`}</title>\n\t\t\t${2:meta}\n\t\t</head>\n\t\t<body>\n\t\t\t${3:body}\n\t\t</body>\n\t</html>\nsnippet xhtml5\n\t<!DOCTYPE html>\n\t<html xmlns=\"http://www.w3.org/1999/xhtml\">\n\t\t<head>\n\t\t\t<meta http-equiv=\"content-type\" content=\"application/xhtml+xml; charset=utf-8\" />\n\t\t\t<title>${1:`substitute(Filename('', 'Page Title'), '^.', '\\u&', '')`}</title>\n\t\t\t${2:meta}\n\t\t</head>\n\t\t<body>\n\t\t\t${3:body}\n\t\t</body>\n\t</html>\nsnippet i\n\t<i>${1}</i>\nsnippet iframe\n\t<iframe src=\"${1}\" frameborder=\"0\"></iframe>${2}\nsnippet iframe.\n\t<iframe class=\"${1}\" src=\"${2}\" frameborder=\"0\"></iframe>${3}\nsnippet iframe#\n\t<iframe id=\"${1}\" src=\"${2}\" frameborder=\"0\"></iframe>${3}\nsnippet img\n\t<img src=\"${1}\" alt=\"${2}\" />${3}\nsnippet img.\n\t<img class=\"${1}\" src=\"${2}\" alt=\"${3}\" />${4}\nsnippet img#\n\t<img id=\"${1}\" src=\"${2}\" alt=\"${3}\" />${4}\nsnippet input\n\t<input type=\"${1:text/submit/hidden/button/image}\" name=\"${2}\" id=\"${3:$2}\" value=\"${4}\" />${5}\nsnippet input.\n\t<input class=\"${1}\" type=\"${2:text/submit/hidden/button/image}\" name=\"${3}\" id=\"${4:$3}\" value=\"${5}\" />${6}\nsnippet input:text\n\t<input type=\"text\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\nsnippet input:submit\n\t<input type=\"submit\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\nsnippet input:hidden\n\t<input type=\"hidden\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\nsnippet input:button\n\t<input type=\"button\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\nsnippet input:image\n\t<input type=\"image\" name=\"${1}\" id=\"${2:$1}\" src=\"${3}\" alt=\"${4}\" />${5}\nsnippet input:checkbox\n\t<input type=\"checkbox\" name=\"${1}\" id=\"${2:$1}\" />${3}\nsnippet input:radio\n\t<input type=\"radio\" name=\"${1}\" id=\"${2:$1}\" />${3}\nsnippet input:color\n\t<input type=\"color\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\nsnippet input:date\n\t<input type=\"date\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\nsnippet input:datetime\n\t<input type=\"datetime\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\nsnippet input:datetime-local\n\t<input type=\"datetime-local\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\nsnippet input:email\n\t<input type=\"email\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\nsnippet input:file\n\t<input type=\"file\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\nsnippet input:month\n\t<input type=\"month\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\nsnippet input:number\n\t<input type=\"number\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\nsnippet input:password\n\t<input type=\"password\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\nsnippet input:range\n\t<input type=\"range\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\nsnippet input:reset\n\t<input type=\"reset\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\nsnippet input:search\n\t<input type=\"search\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\nsnippet input:time\n\t<input type=\"time\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\nsnippet input:url\n\t<input type=\"url\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\nsnippet input:week\n\t<input type=\"week\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\nsnippet ins\n\t<ins>${1}</ins>\nsnippet kbd\n\t<kbd>${1}</kbd>\nsnippet keygen\n\t<keygen>${1}</keygen>\nsnippet label\n\t<label for=\"${2:$1}\">${1}</label>\nsnippet label:i\n\t<label for=\"${2:$1}\">${1}</label>\n\t<input type=\"${3:text/submit/hidden/button}\" name=\"${4:$2}\" id=\"${5:$2}\" value=\"${6}\" />${7}\nsnippet label:s\n\t<label for=\"${2:$1}\">${1}</label>\n\t<select name=\"${3:$2}\" id=\"${4:$2}\">\n\t\t<option value=\"${5}\">${6:$5}</option>\n\t</select>\nsnippet legend\n\t<legend>${1}</legend>\nsnippet legend+\n\t<legend><span>${1}</span></legend>\nsnippet li\n\t<li>${1}</li>\nsnippet li.\n\t<li class=\"${1}\">${2}</li>\nsnippet li+\n\t<li>${1}</li>\n\tli+${2}\nsnippet lia\n\t<li><a href=\"${2:#}\">${1}</a></li>\nsnippet lia+\n\t<li><a href=\"${2:#}\">${1}</a></li>\n\tlia+${3}\nsnippet link\n\t<link rel=\"${1}\" href=\"${2}\" title=\"${3}\" type=\"${4}\" />${5}\nsnippet link:atom\n\t<link rel=\"alternate\" href=\"${1:atom.xml}\" title=\"Atom\" type=\"application/atom+xml\" />${2}\nsnippet link:css\n\t<link rel=\"stylesheet\" href=\"${2:style.css}\" type=\"text/css\" media=\"${3:all}\" />${4}\nsnippet link:favicon\n\t<link rel=\"shortcut icon\" href=\"${1:favicon.ico}\" type=\"image/x-icon\" />${2}\nsnippet link:rss\n\t<link rel=\"alternate\" href=\"${1:rss.xml}\" title=\"RSS\" type=\"application/atom+xml\" />${2}\nsnippet link:touch\n\t<link rel=\"apple-touch-icon\" href=\"${1:favicon.png}\" />${2}\nsnippet map\n\t<map name=\"${1}\">\n\t\t${2}\n\t</map>\nsnippet map.\n\t<map class=\"${1}\" name=\"${2}\">\n\t\t${3}\n\t</map>\nsnippet map#\n\t<map name=\"${1}\" id=\"${2:$1}>\n\t\t${3}\n\t</map>\nsnippet map+\n\t<map name=\"${1}\">\n\t\t<area shape=\"${2}\" coords=\"${3}\" href=\"${4}\" alt=\"${5}\" />${6}\n\t</map>${7}\nsnippet mark\n\t<mark>${1}</mark>\nsnippet menu\n\t<menu>\n\t\t${1}\n\t</menu>\nsnippet menu:c\n\t<menu type=\"context\">\n\t\t${1}\n\t</menu>\nsnippet menu:t\n\t<menu type=\"toolbar\">\n\t\t${1}\n\t</menu>\nsnippet meta\n\t<meta http-equiv=\"${1}\" content=\"${2}\" />${3}\nsnippet meta:compat\n\t<meta http-equiv=\"X-UA-Compatible\" content=\"IE=${1:7,8,edge}\" />${3}\nsnippet meta:refresh\n\t<meta http-equiv=\"refresh\" content=\"text/html;charset=UTF-8\" />${3}\nsnippet meta:utf\n\t<meta http-equiv=\"content-type\" content=\"text/html;charset=UTF-8\" />${3}\nsnippet meter\n\t<meter>${1}</meter>\nsnippet nav\n\t<nav>\n\t\t${1}\n\t</nav>\nsnippet nav.\n\t<nav class=\"${1}\">\n\t\t${2}\n\t</nav>\nsnippet nav#\n\t<nav id=\"${1}\">\n\t\t${2}\n\t</nav>\nsnippet noscript\n\t<noscript>\n\t\t${1}\n\t</noscript>\nsnippet object\n\t<object data=\"${1}\" type=\"${2}\">\n\t\t${3}\n\t</object>${4}\n# Embed QT Movie\nsnippet movie\n\t<object width=\"$2\" height=\"$3\" classid=\"clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B\"\n\t codebase=\"http://www.apple.com/qtactivex/qtplugin.cab\">\n\t\t<param name=\"src\" value=\"$1\" />\n\t\t<param name=\"controller\" value=\"$4\" />\n\t\t<param name=\"autoplay\" value=\"$5\" />\n\t\t<embed src=\"${1:movie.mov}\"\n\t\t\twidth=\"${2:320}\" height=\"${3:240}\"\n\t\t\tcontroller=\"${4:true}\" autoplay=\"${5:true}\"\n\t\t\tscale=\"tofit\" cache=\"true\"\n\t\t\tpluginspage=\"http://www.apple.com/quicktime/download/\" />\n\t</object>${6}\nsnippet ol\n\t<ol>\n\t\t${1}\n\t</ol>\nsnippet ol.\n\t<ol class=\"${1}>\n\t\t${2}\n\t</ol>\nsnippet ol#\n\t<ol id=\"${1}>\n\t\t${2}\n\t</ol>\nsnippet ol+\n\t<ol>\n\t\t<li>${1}</li>\n\t\tli+${2}\n\t</ol>\nsnippet opt\n\t<option value=\"${1}\">${2:$1}</option>\nsnippet opt+\n\t<option value=\"${1}\">${2:$1}</option>\n\topt+${3}\nsnippet optt\n\t<option>${1}</option>\nsnippet optgroup\n\t<optgroup>\n\t\t<option value=\"${1}\">${2:$1}</option>\n\t\topt+${3}\n\t</optgroup>\nsnippet output\n\t<output>${1}</output>\nsnippet p\n\t<p>${1}</p>\nsnippet param\n\t<param name=\"${1}\" value=\"${2}\" />${3}\nsnippet pre\n\t<pre>\n\t\t${1}\n\t</pre>\nsnippet progress\n\t<progress>${1}</progress>\nsnippet q\n\t<q>${1}</q>\nsnippet rp\n\t<rp>${1}</rp>\nsnippet rt\n\t<rt>${1}</rt>\nsnippet ruby\n\t<ruby>\n\t\t<rp><rt>${1}</rt></rp>\n\t</ruby>\nsnippet s\n\t<s>${1}</s>\nsnippet samp\n\t<samp>\n\t\t${1}\n\t</samp>\nsnippet script\n\t<script type=\"text/javascript\" charset=\"utf-8\">\n\t\t${1}\n\t</script>\nsnippet scriptsrc\n\t<script src=\"${1}.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\nsnippet newscript\n\t<script type=\"application/javascript\" charset=\"utf-8\">\n\t\t${1}\n\t</script>\nsnippet newscriptsrc\n\t<script src=\"${1}.js\" type=\"application/javascript\" charset=\"utf-8\"></script>\nsnippet section\n\t<section>\n\t\t${1}\n\t</section>\nsnippet section.\n\t<section class=\"${1}\">\n\t\t${2}\n\t</section>\nsnippet section#\n\t<section id=\"${1}\">\n\t\t${2}\n\t</section>\nsnippet select\n\t<select name=\"${1}\" id=\"${2:$1}\">\n\t\t${3}\n\t</select>\nsnippet select.\n\t<select name=\"${1}\" id=\"${2:$1}\" class=\"${3}>\n\t\t${4}\n\t</select>\nsnippet select+\n\t<select name=\"${1}\" id=\"${2:$1}\">\n\t\t<option value=\"${3}\">${4:$3}</option>\n\t\topt+${5}\n\t</select>\nsnippet small\n\t<small>${1}</small>\nsnippet source\n\t<source src=\"${1}\" type=\"${2}\" media=\"${3}\" />\nsnippet span\n\t<span>${1}</span>\nsnippet strong\n\t<strong>${1}</strong>\nsnippet style\n\t<style type=\"text/css\" media=\"${1:all}\">\n\t\t${2}\n\t</style>\nsnippet sub\n\t<sub>${1}</sub>\nsnippet summary\n\t<summary>\n\t\t${1}\n\t</summary>\nsnippet sup\n\t<sup>${1}</sup>\nsnippet table\n\t<table border=\"${1:0}\">\n\t\t${2}\n\t</table>\nsnippet table.\n\t<table class=\"${1}\" border=\"${2:0}\">\n\t\t${3}\n\t</table>\nsnippet table#\n\t<table id=\"${1}\" border=\"${2:0}\">\n\t\t${3}\n\t</table>\nsnippet tbody\n\t<tbody>\n\t\t${1}\n\t</tbody>\nsnippet td\n\t<td>${1}</td>\nsnippet td.\n\t<td class=\"${1}\">${2}</td>\nsnippet td#\n\t<td id=\"${1}\">${2}</td>\nsnippet td+\n\t<td>${1}</td>\n\ttd+${2}\nsnippet textarea\n\t<textarea name=\"${1}\" id=${2:$1} rows=\"${3:8}\" cols=\"${4:40}\">${5}</textarea>${6}\nsnippet tfoot\n\t<tfoot>\n\t\t${1}\n\t</tfoot>\nsnippet th\n\t<th>${1}</th>\nsnippet th.\n\t<th class=\"${1}\">${2}</th>\nsnippet th#\n\t<th id=\"${1}\">${2}</th>\nsnippet th+\n\t<th>${1}</th>\n\tth+${2}\nsnippet thead\n\t<thead>\n\t\t${1}\n\t</thead>\nsnippet time\n\t<time datetime=\"${1}\" pubdate=\"${2:$1}>${3:$1}</time>\nsnippet title\n\t<title>${1:`substitute(Filename('', 'Page Title'), '^.', '\\u&', '')`}</title>\nsnippet tr\n\t<tr>\n\t\t${1}\n\t</tr>\nsnippet tr+\n\t<tr>\n\t\t<td>${1}</td>\n\t\ttd+${2}\n\t</tr>\nsnippet track\n\t<track src=\"${1}\" srclang=\"${2}\" label=\"${3}\" default=\"${4:default}>${5}</track>${6}\nsnippet ul\n\t<ul>\n\t\t${1}\n\t</ul>\nsnippet ul.\n\t<ul class=\"${1}\">\n\t\t${2}\n\t</ul>\nsnippet ul#\n\t<ul id=\"${1}\">\n\t\t${2}\n\t</ul>\nsnippet ul+\n\t<ul>\n\t\t<li>${1}</li>\n\t\tli+${2}\n\t</ul>\nsnippet var\n\t<var>${1}</var>\nsnippet video\n\t<video src=\"${1} height=\"${2}\" width=\"${3}\" preload=\"${5:none}\" autoplay=\"${6:autoplay}>${7}</video>${8}\nsnippet wbr\n\t<wbr />${1}\n"
  },
  {
    "path": "lib/ace/snippets/html_elixir.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./html_elixir.snippets\");\nexports.scope = \"html_elixir\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/html_elixir.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/html_ruby.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./html_ruby.snippets\");\nexports.scope = \"html_ruby\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/html_ruby.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/htmldjango.snippets",
    "content": "# Generic tags\n\nsnippet %\n\t{% ${1} %}${2}\nsnippet %%\n\t{% ${1:tag_name} %}\n\t${2}\n\t{% end$1 %}\nsnippet {\n\t{{ ${1} }}${2}\n# Template Tags\n\nsnippet autoescape\n\t{% autoescape ${1:off} %}\n\t\t${2}\n\t{% endautoescape %}\nsnippet block\n\t{% block ${1} %}\n\t\t${2}\n\t{% endblock %}\nsnippet #\n\t{# ${1:comment} #}\nsnippet comment\n\t{% comment %}\n\t\t${1}\n\t{% endcomment %}\nsnippet cycle\n\t{% cycle ${1:val1} ${2:val2} ${3:as ${4}} %}\nsnippet debug\n\t{% debug %}\nsnippet extends\n\t{% extends \"${1:base.html}\" %}\nsnippet filter\n\t{% filter ${1} %}\n\t\t${2}\n\t{% endfilter %}\nsnippet firstof\n\t{% firstof ${1} %}\nsnippet for\n\t{% for ${1} in ${2} %}\n\t\t${3}\n\t{% endfor %}\nsnippet empty\n\t{% empty %}\n\t${1}\nsnippet if\n\t{% if ${1} %}\n\t\t${2}\n\t{% endif %}\nsnippet else\n\t{% else %}\n\t\t${1}\nsnippet ifchanged\n\t{% ifchanged %}${1}{% endifchanged %}\nsnippet ifequal\n\t{% ifequal ${1} ${2} %}\n\t\t${3}\n\t{% endifequal %}\nsnippet ifnotequal\n\t{% ifnotequal ${1} ${2} %}\n\t\t${3}\n\t{% endifnotequal %}\nsnippet include\n\t{% include \"${1}\" %}\nsnippet load\n\t{% load ${1} %}\nsnippet now\n\t{% now \"${1:jS F Y H:i}\" %}\nsnippet regroup\n\t{% regroup ${1} by ${2} as ${3} %}\nsnippet spaceless\n\t{% spaceless %}${1}{% endspaceless %}\nsnippet ssi\n\t{% ssi ${1} %}\nsnippet trans\n\t{% trans \"${1:string}\" %}\nsnippet url\n\t{% url ${1} as ${2} %}\nsnippet widthratio\n\t{% widthratio ${1:this_value} ${2:max_value} ${3:100} %}\nsnippet with\n\t{% with ${1} as ${2} %}\n\n# Template Filters\n\n# Note: Since SnipMate can't determine which template filter you are\n# expanding without the \"|\" character, these do not add the \"|\"\n# character.  These save a few keystrokes still.\n\n# Note: Template tags that take no arguments are not implemented.\n\nsnippet add\n\tadd:\"${1}\"\nsnippet center\n\tcenter:\"${1}\"\nsnippet cut\n\tcut:\"${1}\"\nsnippet date\n\tdate:\"${1}\"\nsnippet default\n\tdefault:\"${1}\"\nsnippet defaultifnone\n\tdefault_if_none:\"${1}\"\nsnippet dictsort\n\tdictsort:\"${1}\"\nsnippet dictsortrev\n\tdictsortreversed:\"${1}\"\nsnippet divisibleby\n\tdivisibleby:\"${1}\"\nsnippet floatformat\n\tfloatformat:\"${1}\"\nsnippet getdigit\n\tget_digit:\"${1}\"\nsnippet join\n\tjoin:\"${1}\"\nsnippet lengthis\n\tlength_is:\"${1}\"\nsnippet pluralize\n\tpluralize:\"${1}\"\nsnippet removetags\n\tremovetags:\"${1}\"\nsnippet slice\n\tslice:\"${1}\"\nsnippet stringformat\n\tstringformat:\"${1}\"\nsnippet time\n\ttime:\"${1}\"\nsnippet truncatewords\n\ttruncatewords:${1}\nsnippet truncatewordshtml\n\ttruncatewords_html:${1}\nsnippet urlizetrunc\n\turlizetrunc:${1}\nsnippet wordwrap\n\twordwrap:${1}\n\n"
  },
  {
    "path": "lib/ace/snippets/htmltornado.snippets",
    "content": "# Generic tags\n\nsnippet {\n\t{{ ${1} }}\n\n# Template tags\n\nsnippet extends\n\t{% extends \"${1:base.html}\" %}\nsnippet autoescape\n\t{% autoescape ${1:xhtml_escape | None} %}\nsnippet apply\n\t{% apply ${1:function} %}\n\t  ${2}\n\t{% end %}\nsnippet block\n\t{% block ${1} %}\n\t  ${2}\n\t{% end %}\nsnippet for\n\t{% for ${1:item} in ${2} %}\n\t  ${3}\n\t{% end %}\nsnippet from\n\t{% from ${1:x} import ${2:y} %}\nsnippet if\n\t{% if ${1:condition} %}\n\t  ${2}\n\t{% end %}\nsnippet elif\n\t{% elif ${1:condition} %} \nsnippet else\n\t{% else %}\nsnippet import\n\t{% import ${1:module} %}\nsnippet include\n\t{% include \"${1:filename}\" %}\nsnippet module\n\t{% module ${1:expression} %}\nsnippet raw\n\t{% raw ${1:expression} %}\nsnippet set\n\t{% set ${1:x} = ${2:y} %}\nsnippet try\n\t{% try %}\n\t  ${1}\n\t{% except %}\n\t  ${2}\n\t{% finallly %}\n\t  ${3}\n\t{% end %}\nsnippet while\n\t{% while ${1:condition} %}\n\t  ${2}\n\t{% end %}\n"
  },
  {
    "path": "lib/ace/snippets/ini.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./ini.snippets\");\nexports.scope = \"ini\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/ini.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/io.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippets = [\n    {\n        \"content\": \"assertEquals(${1:expected}, ${2:expr})\",\n        \"name\": \"assertEquals\",\n        \"scope\": \"io\",\n        \"tabTrigger\": \"ae\"\n    },\n    {\n        \"content\": \"${1:${2:newValue} := ${3:Object} }clone do(\\n\\t$0\\n)\",\n        \"name\": \"clone do\",\n        \"scope\": \"io\",\n        \"tabTrigger\": \"cdo\"\n    },\n    {\n        \"content\": \"docSlot(\\\"${1:slotName}\\\", \\\"${2:documentation}\\\")\",\n        \"name\": \"docSlot\",\n        \"scope\": \"io\",\n        \"tabTrigger\": \"ds\"\n    },\n    {\n        \"content\": \"(${1:header,}\\n\\t${2:body}\\n)$0\",\n        \"keyEquivalent\": \"@(\",\n        \"name\": \"Indented Bracketed Line\",\n        \"scope\": \"io\",\n        \"tabTrigger\": \"(\"\n    },\n    {\n        \"content\": \"\\n\\t$0\\n\",\n        \"keyEquivalent\": \"\\r\",\n        \"name\": \"Special: Return Inside Empty Parenthesis\",\n        \"scope\": \"io meta.empty-parenthesis.io, io meta.comma-parenthesis.io\"\n    },\n    {\n        \"content\": \"${1:methodName} := method(${2:args,}\\n\\t$0\\n)\",\n        \"name\": \"method\",\n        \"scope\": \"io\",\n        \"tabTrigger\": \"m\"\n    },\n    {\n        \"content\": \"newSlot(\\\"${1:slotName}\\\", ${2:defaultValue}, \\\"${3:docString}\\\")$0\",\n        \"name\": \"newSlot\",\n        \"scope\": \"io\",\n        \"tabTrigger\": \"ns\"\n    },\n    {\n        \"content\": \"${1:name} := Object clone do(\\n\\t$0\\n)\",\n        \"name\": \"Object clone do\",\n        \"scope\": \"io\",\n        \"tabTrigger\": \"ocdo\"\n    },\n    {\n        \"content\": \"test${1:SomeFeature} := method(\\n\\t$0\\n)\",\n        \"name\": \"testMethod\",\n        \"scope\": \"io\",\n        \"tabTrigger\": \"ts\"\n    },\n    {\n        \"content\": \"${1:Something}Test := ${2:UnitTest} clone do(\\n\\t$0\\n)\",\n        \"name\": \"UnitTest\",\n        \"scope\": \"io\",\n        \"tabTrigger\": \"ut\"\n    }\n];\nexports.scope = \"io\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/io.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/jack.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./jack.snippets\");\nexports.scope = \"jack\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/jack.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/jade.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./jade.snippets\");\nexports.scope = \"jade\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/jade.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/java.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./java.snippets\");\nexports.scope = \"java\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/java.snippets",
    "content": "## Access Modifiers\nsnippet po\n\tprotected\nsnippet pu\n\tpublic\nsnippet pr\n\tprivate\n##\n## Annotations\nsnippet before\n\t@Before\n\tstatic void ${1:intercept}(${2:args}) { ${3} }\nsnippet mm\n\t@ManyToMany\n\t${1}\nsnippet mo\n\t@ManyToOne\n\t${1}\nsnippet om\n\t@OneToMany${1:(cascade=CascadeType.ALL)}\n\t${2}\nsnippet oo\n\t@OneToOne\n\t${1}\n##\n## Basic Java packages and import\nsnippet im\n\timport\nsnippet j.b\n\tjava.beans.\nsnippet j.i\n\tjava.io.\nsnippet j.m\n\tjava.math.\nsnippet j.n\n\tjava.net.\nsnippet j.u\n\tjava.util.\n##\n## Class\nsnippet cl\n\tclass ${1:`Filename(\"\", \"untitled\")`} ${2}\nsnippet in\n\tinterface ${1:`Filename(\"\", \"untitled\")`} ${2:extends Parent}${3}\nsnippet tc\n\tpublic class ${1:`Filename()`} extends ${2:TestCase}\n##\n## Class Enhancements\nsnippet ext\n\textends \nsnippet imp\n\timplements\n##\n## Comments\nsnippet /*\n\t/*\n\t * ${1}\n\t */\n##\n## Constants\nsnippet co\n\tstatic public final ${1:String} ${2:var} = ${3};${4}\nsnippet cos\n\tstatic public final String ${1:var} = \"${2}\";${3}\n##\n## Control Statements\nsnippet case\n\tcase ${1}:\n\t\t${2}\nsnippet def\n\tdefault:\n\t\t${2}\nsnippet el\n\telse\nsnippet elif\n\telse if (${1}) ${2}\nsnippet if\n\tif (${1}) ${2}\nsnippet sw\n\tswitch (${1}) {\n\t\t${2}\n\t}\n##\n## Create a Method\nsnippet m\n\t${1:void} ${2:method}(${3}) ${4:throws }${5}\n##\n## Create a Variable\nsnippet v\n\t${1:String} ${2:var}${3: = null}${4};${5}\n##\n## Enhancements to Methods, variables, classes, etc.\nsnippet ab\n\tabstract\nsnippet fi\n\tfinal\nsnippet st\n\tstatic\nsnippet sy\n\tsynchronized\n##\n## Error Methods\nsnippet err\n\tSystem.err.print(\"${1:Message}\");\nsnippet errf\n\tSystem.err.printf(\"${1:Message}\", ${2:exception});\nsnippet errln\n\tSystem.err.println(\"${1:Message}\");\n##\n## Exception Handling\nsnippet as\n\tassert ${1:test} : \"${2:Failure message}\";${3}\nsnippet ca\n\tcatch(${1:Exception} ${2:e}) ${3}\nsnippet thr\n\tthrow\nsnippet ths\n\tthrows\nsnippet try\n\ttry {\n\t\t${3}\n\t} catch(${1:Exception} ${2:e}) {\n\t}\nsnippet tryf\n\ttry {\n\t\t${3}\n\t} catch(${1:Exception} ${2:e}) {\n\t} finally {\n\t}\n##\n## Find Methods\nsnippet findall\n\tList<${1:listName}> ${2:items} = ${1}.findAll();${3}\nsnippet findbyid\n\t${1:var} ${2:item} = ${1}.findById(${3});${4}\n##\n## Javadocs\nsnippet /**\n\t/**\n\t * ${1}\n\t */\nsnippet @au\n\t@author `system(\"grep \\`id -un\\` /etc/passwd | cut -d \\\":\\\" -f5 | cut -d \\\",\\\" -f1\")`\nsnippet @br\n\t@brief ${1:Description}\nsnippet @fi\n\t@file ${1:`Filename()`}.java\nsnippet @pa\n\t@param ${1:param}\nsnippet @re\n\t@return ${1:param}\n##\n## Logger Methods\nsnippet debug\n\tLogger.debug(${1:param});${2}\nsnippet error\n\tLogger.error(${1:param});${2}\nsnippet info\n\tLogger.info(${1:param});${2}\nsnippet warn\n\tLogger.warn(${1:param});${2}\n##\n## Loops\nsnippet enfor\n\tfor (${1} : ${2}) ${3}\nsnippet for\n\tfor (${1}; ${2}; ${3}) ${4}\nsnippet wh\n\twhile (${1}) ${2}\n##\n## Main method\nsnippet main\n\tpublic static void main (String[] args) {\n\t\t${1:/* code */}\n\t}\n##\n## Print Methods\nsnippet print\n\tSystem.out.print(\"${1:Message}\");\nsnippet printf\n\tSystem.out.printf(\"${1:Message}\", ${2:args});\nsnippet println\n\tSystem.out.println(${1});\n##\n## Render Methods\nsnippet ren\n\trender(${1:param});${2}\nsnippet rena\n\trenderArgs.put(\"${1}\", ${2});${3}\nsnippet renb\n\trenderBinary(${1:param});${2}\nsnippet renj\n\trenderJSON(${1:param});${2}\nsnippet renx\n\trenderXml(${1:param});${2}\n##\n## Setter and Getter Methods\nsnippet set\n\t${1:public} void set${3:}(${2:String} ${4:}){\n\t\tthis.$4 = $4;\n\t}\nsnippet get\n\t${1:public} ${2:String} get${3:}(){\n\t\treturn this.${4:};\n\t}\n##\n## Terminate Methods or Loops\nsnippet re\n\treturn\nsnippet br\n\tbreak;\n##\n## Test Methods\nsnippet t\n\tpublic void test${1:Name}() throws Exception {\n\t\t${2}\n\t}\nsnippet test\n\t@Test\n\tpublic void test${1:Name}() throws Exception {\n\t\t${2}\n\t}\n##\n## Utils\nsnippet Sc\n\tScanner\n##\n## Miscellaneous\nsnippet action\n\tpublic static void ${1:index}(${2:args}) { ${3} }\nsnippet rnf\n\tnotFound(${1:param});${2}\nsnippet rnfin\n\tnotFoundIfNull(${1:param});${2}\nsnippet rr\n\tredirect(${1:param});${2}\nsnippet ru\n\tunauthorized(${1:param});${2}\nsnippet unless\n\t(unless=${1:param});${2}\n"
  },
  {
    "path": "lib/ace/snippets/javascript-jquery.snippets",
    "content": "snippet add\n\t${1:obj}.add('${2:selector expression}')${3}\nsnippet addClass\n\t${1:obj}.addClass('${2:class name}')${3}\nsnippet after\n\t${1:obj}.after('${2:Some text <b>and bold!</b>}')${3}\nsnippet ajax\n\t$.ajax({\n\t\turl: '${1:mydomain.com/url}',\n\t\ttype: '${2:POST}',\n\t\tdataType: '${3:xml/html/script/json}',\n\t\tdata: $.param( $('${4:Element or Expression}') ),\n\t\tcomplete: function (jqXHR, textStatus) {\n\t\t\t${5:// callback}\n\t\t},\n\t\tsuccess: function (data, textStatus, jqXHR) {\n\t\t\t${6:// success callback}\n\t\t},\n\t\terror: function (jqXHR, textStatus, errorThrown) {\n\t\t\t${7:// error callback}\n\t\t}\n\t});\nsnippet ajaxcomplete\n\t${1:obj}.ajaxComplete(function (${1:e}, xhr, settings) {\n\t\t${2:// callback}\n\t});\nsnippet ajaxerror\n\t${1:obj}.ajaxError(function (${1:e}, xhr, settings, thrownError) {\n\t\t${2:// error callback}\n\t});\n\t${3}\nsnippet ajaxget\n\t$.get('${1:mydomain.com/url}',\n\t\t${2:{ param1: value1 },}\n\t\tfunction (data, textStatus, jqXHR) {\n\t\t\t${3:// success callback}\n\t\t}\n\t);\nsnippet ajaxpost\n\t$.post('${1:mydomain.com/url}',\n\t\t${2:{ param1: value1 },}\n\t\tfunction (data, textStatus, jqXHR) {\n\t\t\t${3:// success callback}\n\t\t}\n\t);\nsnippet ajaxprefilter\n\t$.ajaxPrefilter(function (${1:options}, ${2:originalOptions}, jqXHR) {\n\t\t${3: // Modify options, control originalOptions, store jqXHR, etc}\n\t});\nsnippet ajaxsend\n\t${1:obj}.ajaxSend(function (${1:request, settings}) {\n\t\t${2:// error callback}\n\t});\n\t${3}\nsnippet ajaxsetup\n\t$.ajaxSetup({\n\t\turl: \"${1:mydomain.com/url}\",\n\t\ttype: \"${2:POST}\",\n\t\tdataType: \"${3:xml/html/script/json}\",\n\t\tdata: $.param( $(\"${4:Element or Expression}\") ),\n\t\tcomplete: function (jqXHR, textStatus) {\n\t\t\t${5:// callback}\n\t\t},\n\t\tsuccess: function (data, textStatus, jqXHR) {\n\t\t\t${6:// success callback}\n\t\t},\n\t\terror: function (jqXHR, textStatus, errorThrown) {\n\t\t\t${7:// error callback}\n\t\t}\n\t});\nsnippet ajaxstart\n\t$.ajaxStart(function () {\n\t\t${1:// handler for when an AJAX call is started and no other AJAX calls are in progress};\n\t});\n\t${2}\nsnippet ajaxstop\n\t$.ajaxStop(function () {\n\t\t${1:// handler for when all AJAX calls have been completed};\n\t});\n\t${2}\nsnippet ajaxsuccess\n\t$.ajaxSuccess(function (${1:e}, xhr, settings) {\n\t\t${2:// handler for when any AJAX call is successfully completed};\n\t});\n\t${2}\nsnippet andself\n\t${1:obj}.andSelf()${2}\nsnippet animate\n\t${1:obj}.animate({${2:param1: value1, param2: value2}}, ${3:speed})${4}\nsnippet append\n\t${1:obj}.append('${2:Some text <b>and bold!</b>}')${3}\nsnippet appendTo\n\t${1:obj}.appendTo('${2:selector expression}')${3}\nsnippet attr\n\t${1:obj}.attr('${2:attribute}', '${3:value}')${4}\nsnippet attrm\n\t${1:obj}.attr({'${2:attr1}': '${3:value1}', '${4:attr2}': '${5:value2}'})${6}\nsnippet before\n\t${1:obj}.before('${2:Some text <b>and bold!</b>}')${3}\nsnippet bind\n\t${1:obj}.bind('${2:event name}', function (${3:e}) {\n\t\t${4:// event handler}\n\t});\nsnippet blur\n\t${1:obj}.blur(function (${2:e}) {\n\t\t${3:// event handler}\n\t});\nsnippet C\n\t$.Callbacks()${1}\nsnippet Cadd\n\t${1:callbacks}.add(${2:callbacks})${3}\nsnippet Cdis\n\t${1:callbacks}.disable()${2}\nsnippet Cempty\n\t${1:callbacks}.empty()${2}\nsnippet Cfire\n\t${1:callbacks}.fire(${2:args})${3}\nsnippet Cfired\n\t${1:callbacks}.fired()${2}\nsnippet Cfirew\n\t${1:callbacks}.fireWith(${2:this}, ${3:args})${4}\nsnippet Chas\n\t${1:callbacks}.has(${2:callback})${3}\nsnippet Clock\n\t${1:callbacks}.lock()${2}\nsnippet Clocked\n\t${1:callbacks}.locked()${2}\nsnippet Crem\n\t${1:callbacks}.remove(${2:callbacks})${3}\nsnippet change\n\t${1:obj}.change(function (${2:e}) {\n\t\t${3:// event handler}\n\t});\nsnippet children\n\t${1:obj}.children('${2:selector expression}')${3}\nsnippet clearq\n\t${1:obj}.clearQueue(${2:'queue name'})${3}\nsnippet click\n\t${1:obj}.click(function (${2:e}) {\n\t\t${3:// event handler}\n\t});\nsnippet clone\n\t${1:obj}.clone()${2}\nsnippet contains\n\t$.contains(${1:container}, ${2:contents});\nsnippet css\n\t${1:obj}.css('${2:attribute}', '${3:value}')${4}\nsnippet csshooks\n\t$.cssHooks['${1:CSS prop}'] = {\n\t\tget: function (elem, computed, extra) {\n\t\t\t${2: // handle getting the CSS property}\n\t\t},\n\t\tset: function (elem, value) {\n\t\t\t${3: // handle setting the CSS value}\n\t\t}\n\t};\nsnippet cssm\n\t${1:obj}.css({${2:attribute1}: '${3:value1}', ${4:attribute2}: '${5:value2}'})${6}\nsnippet D\n\t$.Deferred()${1}\nsnippet Dalways\n\t${1:deferred}.always(${2:callbacks})${3}\nsnippet Ddone\n\t${1:deferred}.done(${2:callbacks})${3}\nsnippet Dfail\n\t${1:deferred}.fail(${2:callbacks})${3}\nsnippet Disrej\n\t${1:deferred}.isRejected()${2}\nsnippet Disres\n\t${1:deferred}.isResolved()${2}\nsnippet Dnotify\n\t${1:deferred}.notify(${2:args})${3}\nsnippet Dnotifyw\n\t${1:deferred}.notifyWith(${2:this}, ${3:args})${4}\nsnippet Dpipe\n\t${1:deferred}.then(${2:doneFilter}, ${3:failFilter}, ${4:progressFilter})${5}\nsnippet Dprog\n\t${1:deferred}.progress(${2:callbacks})${3}\nsnippet Dprom\n\t${1:deferred}.promise(${2:target})${3}\nsnippet Drej\n\t${1:deferred}.reject(${2:args})${3}\nsnippet Drejw\n\t${1:deferred}.rejectWith(${2:this}, ${3:args})${4}\nsnippet Dres\n\t${1:deferred}.resolve(${2:args})${3}\nsnippet Dresw\n\t${1:deferred}.resolveWith(${2:this}, ${3:args})${4}\nsnippet Dstate\n\t${1:deferred}.state()${2}\nsnippet Dthen\n\t${1:deferred}.then(${2:doneCallbacks}, ${3:failCallbacks}, ${4:progressCallbacks})${5}\nsnippet Dwhen\n\t$.when(${1:deferreds})${2}\nsnippet data\n\t${1:obj}.data(${2:obj})${3}\nsnippet dataa\n\t$.data('${1:selector expression}', '${2:key}'${3:, 'value'})${4}\nsnippet dblclick\n\t${1:obj}.dblclick(function (${2:e}) {\n\t\t${3:// event handler}\n\t});\nsnippet delay\n\t${1:obj}.delay('${2:slow/400/fast}'${3:, 'queue name'})${4}\nsnippet dele\n\t${1:obj}.delegate('${2:selector expression}', '${3:event name}', function (${4:e}) {\n\t\t${5:// event handler}\n\t});\nsnippet deq\n\t${1:obj}.dequeue(${2:'queue name'})${3}\nsnippet deqq\n\t$.dequeue('${1:selector expression}'${2:, 'queue name'})${3}\nsnippet detach\n\t${1:obj}.detach('${2:selector expression}')${3}\nsnippet die\n\t${1:obj}.die(${2:event}, ${3:handler})${4}\nsnippet each\n\t${1:obj}.each(function (index) {\n\t\t${2:this.innerHTML = this + \" is the element, \" + index + \" is the position\";}\n\t});\nsnippet el\n\t$('<${1}/>'${2:, {}})${3}\nsnippet eltrim\n\t$.trim('${1:string}')${2}\nsnippet empty\n\t${1:obj}.empty()${2}\nsnippet end\n\t${1:obj}.end()${2}\nsnippet eq\n\t${1:obj}.eq(${2:element index})${3}\nsnippet error\n\t${1:obj}.error(function (${2:e}) {\n\t\t${3:// event handler}\n\t});\nsnippet eventsmap\n\t{\n\t\t:f${1}\n\t}\nsnippet extend\n\t$.extend(${1:true, }${2:target}, ${3:obj})${4}\nsnippet fadein\n\t${1:obj}.fadeIn('${2:slow/400/fast}')${3}\nsnippet fadeinc\n\t${1:obj}.fadeIn('slow/400/fast', function () {\n\t\t${2:// callback};\n\t});\nsnippet fadeout\n\t${1:obj}.fadeOut('${2:slow/400/fast}')${3}\nsnippet fadeoutc\n\t${1:obj}.fadeOut('slow/400/fast', function () {\n\t\t${2:// callback};\n\t});\nsnippet fadeto\n\t${1:obj}.fadeTo('${2:slow/400/fast}', ${3:0.5})${4}\nsnippet fadetoc\n\t${1:obj}.fadeTo('slow/400/fast', ${2:0.5}, function () {\n\t\t${3:// callback};\n\t});\nsnippet filter\n\t${1:obj}.filter('${2:selector expression}')${3}\nsnippet filtert\n\t${1:obj}.filter(function (${2:index}) {\n\t\t${3:// test code}\n\t})${4}\nsnippet find\n\t${1:obj}.find('${2:selector expression}')${3}\nsnippet focus\n\t${1:obj}.focus(function (${2:e}) {\n\t\t${3:// event handler}\n\t});\nsnippet focusin\n\t${1:obj}.focusIn(function (${2:e}) {\n\t\t${3:// event handler}\n\t});\nsnippet focusout\n\t${1:obj}.focusOut(function (${2:e}) {\n\t\t${3:// event handler}\n\t});\nsnippet get\n\t${1:obj}.get(${2:element index})${3}\nsnippet getjson\n\t$.getJSON('${1:mydomain.com/url}',\n\t\t${2:{ param1: value1 },}\n\t\tfunction (data, textStatus, jqXHR) {\n\t\t\t${3:// success callback}\n\t\t}\n\t);\nsnippet getscript\n\t$.getScript('${1:mydomain.com/url}', function (script, textStatus, jqXHR) {\n\t\t${2:// callback}\n\t});\nsnippet grep\n\t$.grep(${1:array}, function (item, index) {\n\t\t${2:// test code}\n\t}${3:, true});\nsnippet hasc\n\t${1:obj}.hasClass('${2:className}')${3}\nsnippet hasd\n\t$.hasData('${1:selector expression}');\nsnippet height\n\t${1:obj}.height(${2:integer})${3}\nsnippet hide\n\t${1:obj}.hide('${2:slow/400/fast}')${3}\nsnippet hidec\n\t${1:obj}.hide('${2:slow/400/fast}', function () {\n\t\t${3:// callback}\n\t});\nsnippet hover\n\t${1:obj}.hover(function (${2:e}) {\n\t\t${3:// event handler}\n\t}, function ($2) {\n\t\t${4:// event handler}\n\t});${5}\nsnippet html\n\t${1:obj}.html('${2:Some text <b>and bold!</b>}')${3}\nsnippet inarr\n\t$.inArray(${1:value}, ${2:array});\nsnippet insa\n\t${1:obj}.insertAfter('${2:selector expression}')${3}\nsnippet insb\n\t${1:obj}.insertBefore('${2:selector expression}')${3}\nsnippet is\n\t${1:obj}.is('${2:selector expression}')${3}\nsnippet isarr\n\t$.isArray(${1:obj})${2}\nsnippet isempty\n\t$.isEmptyObject(${1:obj})${2}\nsnippet isfunc\n\t$.isFunction(${1:obj})${2}\nsnippet isnum\n\t$.isNumeric(${1:value})${2}\nsnippet isobj\n\t$.isPlainObject(${1:obj})${2}\nsnippet iswin\n\t$.isWindow(${1:obj})${2}\nsnippet isxml\n\t$.isXMLDoc(${1:node})${2}\nsnippet jj\n\t$('${1:selector}')${2}\nsnippet kdown\n\t${1:obj}.keydown(function (${2:e}) {\n\t\t${3:// event handler}\n\t});\nsnippet kpress\n\t${1:obj}.keypress(function (${2:e}) {\n\t\t${3:// event handler}\n\t});\nsnippet kup\n\t${1:obj}.keyup(function (${2:e}) {\n\t\t${3:// event handler}\n\t});\nsnippet last\n\t${1:obj}.last('${1:selector expression}')${3}\nsnippet live\n\t${1:obj}.live('${2:events}', function (${3:e}) {\n\t\t${4:// event handler}\n\t});\nsnippet load\n\t${1:obj}.load(function (${2:e}) {\n\t\t${3:// event handler}\n\t});\nsnippet loadf\n\t${1:obj}.load('${2:mydomain.com/url}',\n\t\t${2:{ param1: value1 },}\n\t\tfunction (responseText, textStatus, xhr) {\n\t\t\t${3:// success callback}\n\t\t}\n\t});\nsnippet makearray\n\t$.makeArray(${1:obj});\nsnippet map\n\t${1:obj}.map(function (${2:index}, ${3:element}) {\n\t\t${4:// callback}\n\t});\nsnippet mapp\n\t$.map(${1:arrayOrObject}, function (${2:value}, ${3:indexOrKey}) {\n\t\t${4:// callback}\n\t});\nsnippet merge\n\t$.merge(${1:target}, ${2:original});\nsnippet mdown\n\t${1:obj}.mousedown(function (${2:e}) {\n\t\t${3:// event handler}\n\t});\nsnippet menter\n\t${1:obj}.mouseenter(function (${2:e}) {\n\t\t${3:// event handler}\n\t});\nsnippet mleave\n\t${1:obj}.mouseleave(function (${2:e}) {\n\t\t${3:// event handler}\n\t});\nsnippet mmove\n\t${1:obj}.mousemove(function (${2:e}) {\n\t\t${3:// event handler}\n\t});\nsnippet mout\n\t${1:obj}.mouseout(function (${2:e}) {\n\t\t${3:// event handler}\n\t});\nsnippet mover\n\t${1:obj}.mouseover(function (${2:e}) {\n\t\t${3:// event handler}\n\t});\nsnippet mup\n\t${1:obj}.mouseup(function (${2:e}) {\n\t\t${3:// event handler}\n\t});\nsnippet next\n\t${1:obj}.next('${2:selector expression}')${3}\nsnippet nexta\n\t${1:obj}.nextAll('${2:selector expression}')${3}\nsnippet nextu\n\t${1:obj}.nextUntil('${2:selector expression}'${3:, 'filter expression'})${4}\nsnippet not\n\t${1:obj}.not('${2:selector expression}')${3}\nsnippet off\n\t${1:obj}.off('${2:events}', '${3:selector expression}'${4:, handler})${5}\nsnippet offset\n\t${1:obj}.offset()${2}\nsnippet offsetp\n\t${1:obj}.offsetParent()${2}\nsnippet on\n\t${1:obj}.on('${2:events}', '${3:selector expression}', function (${4:e}) {\n\t\t${5:// event handler}\n\t});\nsnippet one\n\t${1:obj}.one('${2:event name}', function (${3:e}) {\n\t\t${4:// event handler}\n\t});\nsnippet outerh\n\t${1:obj}.outerHeight()${2}\nsnippet outerw\n\t${1:obj}.outerWidth()${2}\nsnippet param\n\t$.param(${1:obj})${2}\nsnippet parent\n\t${1:obj}.parent('${2:selector expression}')${3}\nsnippet parents\n\t${1:obj}.parents('${2:selector expression}')${3}\nsnippet parentsu\n\t${1:obj}.parentsUntil('${2:selector expression}'${3:, 'filter expression'})${4}\nsnippet parsejson\n\t$.parseJSON(${1:data})${2}\nsnippet parsexml\n\t$.parseXML(${1:data})${2}\nsnippet pos\n\t${1:obj}.position()${2}\nsnippet prepend\n\t${1:obj}.prepend('${2:Some text <b>and bold!</b>}')${3}\nsnippet prependto\n\t${1:obj}.prependTo('${2:selector expression}')${3}\nsnippet prev\n\t${1:obj}.prev('${2:selector expression}')${3}\nsnippet preva\n\t${1:obj}.prevAll('${2:selector expression}')${3}\nsnippet prevu\n\t${1:obj}.prevUntil('${2:selector expression}'${3:, 'filter expression'})${4}\nsnippet promise\n\t${1:obj}.promise(${2:'fx'}, ${3:target})${4}\nsnippet prop\n\t${1:obj}.prop('${2:property name}')${3}\nsnippet proxy\n\t$.proxy(${1:function}, ${2:this})${3}\nsnippet pushstack\n\t${1:obj}.pushStack(${2:elements})${3}\nsnippet queue\n\t${1:obj}.queue(${2:name}${3:, newQueue})${4}\nsnippet queuee\n\t$.queue(${1:element}${2:, name}${3:, newQueue})${4}\nsnippet ready\n\t$(function () {\n\t\t${1}\n\t});\nsnippet rem\n\t${1:obj}.remove()${2}\nsnippet rema\n\t${1:obj}.removeAttr('${2:attribute name}')${3}\nsnippet remc\n\t${1:obj}.removeClass('${2:class name}')${3}\nsnippet remd\n\t${1:obj}.removeData('${2:key name}')${3}\nsnippet remdd\n\t$.removeData(${1:element}${2:, 'key name}')${3}\nsnippet remp\n\t${1:obj}.removeProp('${2:property name}')${3}\nsnippet repa\n\t${1:obj}.replaceAll(${2:target})${3}\nsnippet repw\n\t${1:obj}.replaceWith(${2:content})${3}\nsnippet reset\n\t${1:obj}.reset(function (${2:e}) {\n\t\t${3:// event handler}\n\t});\nsnippet resize\n\t${1:obj}.resize(function (${2:e}) {\n\t\t${3:// event handler}\n\t});\nsnippet scroll\n\t${1:obj}.scroll(function (${2:e}) {\n\t\t${3:// event handler}\n\t});\nsnippet scrolll\n\t${1:obj}.scrollLeft(${2:value})${3}\nsnippet scrollt\n\t${1:obj}.scrollTop(${2:value})${3}\nsnippet sdown\n\t${1:obj}.slideDown('${2:slow/400/fast}')${3}\nsnippet sdownc\n\t${1:obj}.slideDown('${2:slow/400/fast}', function () {\n\t\t${3:// callback};\n\t});\nsnippet select\n\t${1:obj}.select(function (${2:e}) {\n\t\t${3:// event handler}\n\t});\nsnippet serialize\n\t${1:obj}.serialize()${2}\nsnippet serializea\n\t${1:obj}.serializeArray()${2}\nsnippet show\n\t${1:obj}.show('${2:slow/400/fast}')${3}\nsnippet showc\n\t${1:obj}.show('${2:slow/400/fast}', function () {\n\t\t${3:// callback}\n\t});\nsnippet sib\n\t${1:obj}.siblings('${2:selector expression}')${3}\nsnippet size\n\t${1:obj}.size()${2}\nsnippet slice\n\t${1:obj}.slice(${2:start}${3:, end})${4}\nsnippet stoggle\n\t${1:obj}.slideToggle('${2:slow/400/fast}')${3}\nsnippet stop\n\t${1:obj}.stop('${2:queue}', ${3:false}, ${4:false})${5}\nsnippet submit\n\t${1:obj}.submit(function (${2:e}) {\n\t\t${3:// event handler}\n\t});\nsnippet sup\n\t${1:obj}.slideUp('${2:slow/400/fast}')${3}\nsnippet supc\n\t${1:obj}.slideUp('${2:slow/400/fast}', function () {\n\t\t${3:// callback};\n\t});\nsnippet text\n\t${1:obj}.text(${2:'some text'})${3}\nsnippet this\n\t$(this)${1}\nsnippet toarr\n\t${1:obj}.toArray()\nsnippet tog\n\t${1:obj}.toggle(function (${2:e}) {\n\t\t${3:// event handler}\n\t}, function ($2) {\n\t\t${4:// event handler}\n\t});\n\t${4}\nsnippet togclass\n\t${1:obj}.toggleClass('${2:class name}')${3}\nsnippet togsh\n\t${1:obj}.toggle('${2:slow/400/fast}')${3}\nsnippet trig\n\t${1:obj}.trigger('${2:event name}')${3}\nsnippet trigh\n\t${1:obj}.triggerHandler('${2:event name}')${3}\nsnippet $trim\n\t$.trim(${1:str})${2}\nsnippet $type\n\t$.type(${1:obj})${2}\nsnippet unbind\n\t${1:obj}.unbind('${2:event name}')${3}\nsnippet undele\n\t${1:obj}.undelegate(${2:selector expression}, ${3:event}, ${4:handler})${5}\nsnippet uniq\n\t$.unique(${1:array})${2}\nsnippet unload\n\t${1:obj}.unload(function (${2:e}) {\n\t\t${3:// event handler}\n\t});\nsnippet unwrap\n\t${1:obj}.unwrap()${2}\nsnippet val\n\t${1:obj}.val('${2:text}')${3}\nsnippet width\n\t${1:obj}.width(${2:integer})${3}\nsnippet wrap\n\t${1:obj}.wrap('${2:&lt;div class=\"extra-wrapper\"&gt;&lt;/div&gt;}')${3}\n"
  },
  {
    "path": "lib/ace/snippets/javascript.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./javascript.snippets\");\nexports.scope = \"javascript\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/javascript.snippets",
    "content": "# Prototype\nsnippet proto\n\t${1:class_name}.prototype.${2:method_name} = function(${3:first_argument}) {\n\t\t${4:// body...}\n\t};\n# Function\nsnippet fun\n\tfunction ${1?:function_name}(${2:argument}) {\n\t\t${3:// body...}\n\t}\n# Anonymous Function\nregex /((=)\\s*|(:)\\s*|(\\()|\\b)/f/(\\))?/\nsnippet f\n\tfunction${M1?: ${1:functionName}}($2) {\n\t\t${0:$TM_SELECTED_TEXT}\n\t}${M2?;}${M3?,}${M4?)}\n# Immediate function\ntrigger \\(?f\\(\nendTrigger \\)?\nsnippet f(\n\t(function(${1}) {\n\t\t${0:${TM_SELECTED_TEXT:/* code */}}\n\t}(${1}));\n# if\nsnippet if\n\tif (${1:true}) {\n\t\t${0}\n\t}\n# if ... else\nsnippet ife\n\tif (${1:true}) {\n\t\t${2}\n\t} else {\n\t\t${0}\n\t}\n# tertiary conditional\nsnippet ter\n\t${1:/* condition */} ? ${2:a} : ${3:b}\n# switch\nsnippet switch\n\tswitch (${1:expression}) {\n\t\tcase '${3:case}':\n\t\t\t${4:// code}\n\t\t\tbreak;\n\t\t${5}\n\t\tdefault:\n\t\t\t${2:// code}\n\t}\n# case\nsnippet case\n\tcase '${1:case}':\n\t\t${2:// code}\n\t\tbreak;\n\t${3}\n\n# while (...) {...}\nsnippet wh\n\twhile (${1:/* condition */}) {\n\t\t${0:/* code */}\n\t}\n# try\nsnippet try\n\ttry {\n\t\t${0:/* code */}\n\t} catch (e) {}\n# do...while\nsnippet do\n\tdo {\n\t\t${2:/* code */}\n\t} while (${1:/* condition */});\n# Object Method\nsnippet :f\nregex /([,{[])|^\\s*/:f/\n\t${1:method_name}: function(${2:attribute}) {\n\t\t${0}\n\t}${3:,}\n# setTimeout function\nsnippet setTimeout\nregex /\\b/st|timeout|setTimeo?u?t?/\n\tsetTimeout(function() {${3:$TM_SELECTED_TEXT}}, ${1:10});\n# Get Elements\nsnippet gett\n\tgetElementsBy${1:TagName}('${2}')${3}\n# Get Element\nsnippet get\n\tgetElementBy${1:Id}('${2}')${3}\n# console.log (Firebug)\nsnippet cl\n\tconsole.log(${1});\n# return\nsnippet ret\n\treturn ${1:result}\n# for (property in object ) { ... }\nsnippet fori\n\tfor (var ${1:prop} in ${2:Things}) {\n\t\t${0:$2[$1]}\n\t}\n# hasOwnProperty\nsnippet has\n\thasOwnProperty(${1})\n# docstring\nsnippet /**\n\t/**\n\t * ${1:description}\n\t *\n\t */\nsnippet @par\nregex /^\\s*\\*\\s*/@(para?m?)?/\n\t@param {${1:type}} ${2:name} ${3:description}\nsnippet @ret\n\t@return {${1:type}} ${2:description}\n# JSON.parse\nsnippet jsonp\n\tJSON.parse(${1:jstr});\n# JSON.stringify\nsnippet jsons\n\tJSON.stringify(${1:object});\n# self-defining function\nsnippet sdf\n\tvar ${1:function_name} = function(${2:argument}) {\n\t\t${3:// initial code ...}\n\n\t\t$1 = function($2) {\n\t\t\t${4:// main code}\n\t\t};\n\t}\n# singleton\nsnippet sing\n\tfunction ${1:Singleton} (${2:argument}) {\n\t\t// the cached instance\n\t\tvar instance;\n\n\t\t// rewrite the constructor\n\t\t$1 = function $1($2) {\n\t\t\treturn instance;\n\t\t};\n\t\t\n\t\t// carry over the prototype properties\n\t\t$1.prototype = this;\n\n\t\t// the instance\n\t\tinstance = new $1();\n\n\t\t// reset the constructor pointer\n\t\tinstance.constructor = $1;\n\n\t\t${3:// code ...}\n\n\t\treturn instance;\n\t}\n# class\nsnippet class\nregex /^\\s*/clas{0,2}/\n\tvar ${1:class} = function(${20}) {\n\t\t$40$0\n\t};\n\t\n\t(function() {\n\t\t${60:this.prop = \"\"}\n\t}).call(${1:class}.prototype);\n\t\n\texports.${1:class} = ${1:class};\n# \nsnippet for-\n\tfor (var ${1:i} = ${2:Things}.length; ${1:i}--; ) {\n\t\t${0:${2:Things}[${1:i}];}\n\t}\n# for (...) {...}\nsnippet for\n\tfor (var ${1:i} = 0; $1 < ${2:Things}.length; $1++) {\n\t\t${3:$2[$1]}$0\n\t}\n# for (...) {...} (Improved Native For-Loop)\nsnippet forr\n\tfor (var ${1:i} = ${2:Things}.length - 1; $1 >= 0; $1--) {\n\t\t${3:$2[$1]}$0\n\t}\n\n\n#modules\nsnippet def\n\tdefine(function(require, exports, module) {\n\t\"use strict\";\n\tvar ${1/.*\\///} = require(\"${1}\");\n\t\n\t$TM_SELECTED_TEXT\n\t});\nsnippet req\nguard ^\\s*\n\tvar ${1/.*\\///} = require(\"${1}\");\n\t$0\nsnippet requ\nguard ^\\s*\n\tvar ${1/.*\\/(.)/\\u$1/} = require(\"${1}\").${1/.*\\/(.)/\\u$1/};\n\t$0\n"
  },
  {
    "path": "lib/ace/snippets/json.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./json.snippets\");\nexports.scope = \"json\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/json.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/jsoniq.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./jsoniq.snippets\");\nexports.scope = \"jsoniq\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/jsoniq.snippets",
    "content": "snippet for\n\tfor $${1:item} in ${2:expr}\nsnippet return\n\treturn ${1:expr}\nsnippet import\n\timport module namespace ${1:ns} = \"${2:http://www.example.com/}\";\nsnippet some\n\tsome $${1:varname} in ${2:expr} satisfies ${3:expr}\nsnippet every\n\tevery $${1:varname} in ${2:expr} satisfies ${3:expr}\nsnippet if\n\tif(${1:true}) then ${2:expr} else ${3:true}\nsnippet switch\n\tswitch(${1:\"foo\"})\n\tcase ${2:\"foo\"}\n\treturn ${3:true}\n\tdefault return ${4:false}\nsnippet try\n\ttry { ${1:expr} } catch ${2:*} { ${3:expr} }\nsnippet tumbling\n\tfor tumbling window $${1:varname} in ${2:expr}\n\tstart at $${3:start} when ${4:expr}\n\tend at $${5:end} when ${6:expr}\n\treturn ${7:expr}\nsnippet sliding\n\tfor sliding window $${1:varname} in ${2:expr}\n\tstart at $${3:start} when ${4:expr}\n\tend at $${5:end} when ${6:expr}\n\treturn ${7:expr}\nsnippet let\n\tlet $${1:varname} := ${2:expr}\nsnippet group\n\tgroup by $${1:varname} := ${2:expr}\nsnippet order\n\torder by ${1:expr} ${2:descending}\nsnippet stable\n\tstable order by ${1:expr}\nsnippet count\n\tcount $${1:varname}\nsnippet ordered\n\tordered { ${1:expr} }\nsnippet unordered\n\tunordered { ${1:expr} }\nsnippet treat \n\ttreat as ${1:expr}\nsnippet castable\n\tcastable as ${1:atomicType}\nsnippet cast\n\tcast as ${1:atomicType}\nsnippet typeswitch\n\ttypeswitch(${1:expr})\n\tcase ${2:type}  return ${3:expr}\n\tdefault return ${4:expr}\nsnippet var\n\tdeclare variable $${1:varname} := ${2:expr};\nsnippet fn\n\tdeclare function ${1:ns}:${2:name}(){\n\t${3:expr}\n\t};\nsnippet module\n\tmodule namespace ${1:ns} = \"${2:http://www.example.com}\";\n"
  },
  {
    "path": "lib/ace/snippets/jsp.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./jsp.snippets\");\nexports.scope = \"jsp\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/jsp.snippets",
    "content": "snippet @page\n\t<%@page contentType=\"text/html\" pageEncoding=\"UTF-8\"%>\nsnippet jstl\n\t<%@ taglib uri=\"http://java.sun.com/jsp/jstl/core\" prefix=\"c\" %>\n\t<%@ taglib uri=\"http://java.sun.com/jsp/jstl/functions\" prefix=\"fn\" %>\nsnippet jstl:c\n\t<%@ taglib uri=\"http://java.sun.com/jsp/jstl/core\" prefix=\"c\" %>\nsnippet jstl:fn\n\t<%@ taglib uri=\"http://java.sun.com/jsp/jstl/functions\" prefix=\"fn\" %>\nsnippet cpath\n\t${pageContext.request.contextPath}\nsnippet cout\n\t<c:out value=\"${1}\" default=\"${2}\" />\nsnippet cset\n\t<c:set var=\"${1}\" value=\"${2}\" />\nsnippet cremove\n\t<c:remove var=\"${1}\" scope=\"${2:page}\" />\nsnippet ccatch\n\t<c:catch var=\"${1}\" />\nsnippet cif\n\t<c:if test=\"${${1}}\">\n\t\t${2}\n\t</c:if>\nsnippet cchoose\n\t<c:choose>\n\t\t${1}\n\t</c:choose>\nsnippet cwhen\n\t<c:when test=\"${${1}}\">\n\t\t${2}\n\t</c:when>\nsnippet cother\n\t<c:otherwise>\n\t\t${1}\n\t</c:otherwise>\nsnippet cfore\n\t<c:forEach items=\"${${1}}\" var=\"${2}\" varStatus=\"${3}\">\n\t\t${4:<c:out value=\"$2\" />}\n\t</c:forEach>\nsnippet cfort\n\t<c:set var=\"${1}\">${2:item1,item2,item3}</c:set>\n\t<c:forTokens var=\"${3}\" items=\"${$1}\" delims=\"${4:,}\">\n\t\t${5:<c:out value=\"$3\" />}\n\t</c:forTokens>\nsnippet cparam\n\t<c:param name=\"${1}\" value=\"${2}\" />\nsnippet cparam+\n\t<c:param name=\"${1}\" value=\"${2}\" />\n\tcparam+${3}\nsnippet cimport\n\t<c:import url=\"${1}\" />\nsnippet cimport+\n\t<c:import url=\"${1}\">\n\t\t<c:param name=\"${2}\" value=\"${3}\" />\n\t\tcparam+${4}\n\t</c:import>\nsnippet curl\n\t<c:url value=\"${1}\" var=\"${2}\" />\n\t<a href=\"${$2}\">${3}</a>\nsnippet curl+\n\t<c:url value=\"${1}\" var=\"${2}\">\n\t\t<c:param name=\"${4}\" value=\"${5}\" />\n\t\tcparam+${6}\n\t</c:url>\n\t<a href=\"${$2}\">${3}</a>\nsnippet credirect\n\t<c:redirect url=\"${1}\" />\nsnippet contains\n\t${fn:contains(${1:string}, ${2:substr})}\nsnippet contains:i\n\t${fn:containsIgnoreCase(${1:string}, ${2:substr})}\nsnippet endswith\n\t${fn:endsWith(${1:string}, ${2:suffix})}\nsnippet escape\n\t${fn:escapeXml(${1:string})}\nsnippet indexof\n\t${fn:indexOf(${1:string}, ${2:substr})}\nsnippet join\n\t${fn:join(${1:collection}, ${2:delims})}\nsnippet length\n\t${fn:length(${1:collection_or_string})}\nsnippet replace\n\t${fn:replace(${1:string}, ${2:substr}, ${3:replace})}\nsnippet split\n\t${fn:split(${1:string}, ${2:delims})}\nsnippet startswith\n\t${fn:startsWith(${1:string}, ${2:prefix})}\nsnippet substr\n\t${fn:substring(${1:string}, ${2:begin}, ${3:end})}\nsnippet substr:a\n\t${fn:substringAfter(${1:string}, ${2:substr})}\nsnippet substr:b\n\t${fn:substringBefore(${1:string}, ${2:substr})}\nsnippet lc\n\t${fn:toLowerCase(${1:string})}\nsnippet uc\n\t${fn:toUpperCase(${1:string})}\nsnippet trim\n\t${fn:trim(${1:string})}\n"
  },
  {
    "path": "lib/ace/snippets/jssm.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./.snippets\");\nexports.scope = \"\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/jssm.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/jsx.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./jsx.snippets\");\nexports.scope = \"jsx\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/jsx.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/julia.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./julia.snippets\");\nexports.scope = \"julia\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/julia.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/kotlin.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./.snippets\");\nexports.scope = \"\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/latex.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./latex.snippets\");\nexports.scope = \"latex\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/latex.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/ledger.snippets",
    "content": "# Ledger <http://ledger-cli.org/>\nsnippet ent\n\t`strftime(\"%Y/%m/%d\")` ${1:transaction}\n\t    ${2:account}    ${3:value}\n\t    ${4:account}\n"
  },
  {
    "path": "lib/ace/snippets/less.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./less.snippets\");\nexports.scope = \"less\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/less.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/liquid.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./liquid.snippets\");\nexports.scope = \"liquid\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/liquid.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/lisp.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./lisp.snippets\");\nexports.scope = \"lisp\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/lisp.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/livescript.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./livescript.snippets\");\nexports.scope = \"livescript\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/livescript.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/logiql.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./logiql.snippets\");\nexports.scope = \"logiql\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/logiql.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/lsl.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./lsl.snippets\");\nexports.scope = \"lsl\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/lsl.snippets",
    "content": "snippet @\n\t@${1:label};\nsnippet CAMERA_ACTIVE\n\tCAMERA_ACTIVE, ${1:integer isActive}, $0\nsnippet CAMERA_BEHINDNESS_ANGLE\n\tCAMERA_BEHINDNESS_ANGLE, ${1:float degrees}, $0\nsnippet CAMERA_BEHINDNESS_LAG\n\tCAMERA_BEHINDNESS_LAG, ${1:float seconds}, $0\nsnippet CAMERA_DISTANCE\n\tCAMERA_DISTANCE, ${1:float meters}, $0\nsnippet CAMERA_FOCUS\n\tCAMERA_FOCUS, ${1:vector position}, $0\nsnippet CAMERA_FOCUS_LAG\n\tCAMERA_FOCUS_LAG, ${1:float seconds}, $0\nsnippet CAMERA_FOCUS_LOCKED\n\tCAMERA_FOCUS_LOCKED, ${1:integer isLocked}, $0\nsnippet CAMERA_FOCUS_OFFSET\n\tCAMERA_FOCUS_OFFSET, ${1:vector meters}, $0\nsnippet CAMERA_FOCUS_THRESHOLD\n\tCAMERA_FOCUS_THRESHOLD, ${1:float meters}, $0\nsnippet CAMERA_PITCH\n\tCAMERA_PITCH, ${1:float degrees}, $0\nsnippet CAMERA_POSITION\n\tCAMERA_POSITION, ${1:vector position}, $0\nsnippet CAMERA_POSITION_LAG\n\tCAMERA_POSITION_LAG, ${1:float seconds}, $0\nsnippet CAMERA_POSITION_LOCKED\n\tCAMERA_POSITION_LOCKED, ${1:integer isLocked}, $0\nsnippet CAMERA_POSITION_THRESHOLD\n\tCAMERA_POSITION_THRESHOLD, ${1:float meters}, $0\nsnippet CHARACTER_AVOIDANCE_MODE\n\tCHARACTER_AVOIDANCE_MODE, ${1:integer flags}, $0\nsnippet CHARACTER_DESIRED_SPEED\n\tCHARACTER_DESIRED_SPEED, ${1:float speed}, $0\nsnippet CHARACTER_DESIRED_TURN_SPEED\n\tCHARACTER_DESIRED_TURN_SPEED, ${1:float speed}, $0\nsnippet CHARACTER_LENGTH\n\tCHARACTER_LENGTH, ${1:float length}, $0\nsnippet CHARACTER_MAX_TURN_RADIUS\n\tCHARACTER_MAX_TURN_RADIUS, ${1:float radius}, $0\nsnippet CHARACTER_ORIENTATION\n\tCHARACTER_ORIENTATION, ${1:integer orientation}, $0\nsnippet CHARACTER_RADIUS\n\tCHARACTER_RADIUS, ${1:float radius}, $0\nsnippet CHARACTER_STAY_WITHIN_PARCEL\n\tCHARACTER_STAY_WITHIN_PARCEL, ${1:boolean stay}, $0\nsnippet CHARACTER_TYPE\n\tCHARACTER_TYPE, ${1:integer type}, $0\nsnippet HTTP_BODY_MAXLENGTH\n\tHTTP_BODY_MAXLENGTH, ${1:integer length}, $0\nsnippet HTTP_CUSTOM_HEADER\n\tHTTP_CUSTOM_HEADER, ${1:string name}, ${2:string value}, $0\nsnippet HTTP_METHOD\n\tHTTP_METHOD, ${1:string method}, $0\nsnippet HTTP_MIMETYPE\n\tHTTP_MIMETYPE, ${1:string mimeType}, $0\nsnippet HTTP_PRAGMA_NO_CACHE\n\tHTTP_PRAGMA_NO_CACHE, ${1:integer send_header}, $0\nsnippet HTTP_VERBOSE_THROTTLE\n\tHTTP_VERBOSE_THROTTLE, ${1:integer noisy}, $0\nsnippet HTTP_VERIFY_CERT\n\tHTTP_VERIFY_CERT, ${1:integer verify}, $0\nsnippet RC_DATA_FLAGS\n\tRC_DATA_FLAGS, ${1:integer flags}, $0\nsnippet RC_DETECT_PHANTOM\n\tRC_DETECT_PHANTOM, ${1:integer dectedPhantom}, $0\nsnippet RC_MAX_HITS\n\tRC_MAX_HITS, ${1:integer maxHits}, $0\nsnippet RC_REJECT_TYPES\n\tRC_REJECT_TYPES, ${1:integer filterMask}, $0\nsnippet at_rot_target\n\tat_rot_target(${1:integer handle}, ${2:rotation targetrot}, ${3:rotation ourrot})\n\t{\n\t\t$0\n\t}\nsnippet at_target\n\tat_target(${1:integer tnum}, ${2:vector targetpos}, ${3:vector ourpos})\n\t{\n\t\t$0\n\t}\nsnippet attach\n\tattach(${1:key id})\n\t{\n\t\t$0\n\t}\nsnippet changed\n\tchanged(${1:integer change})\n\t{\n\t\t$0\n\t}\nsnippet collision\n\tcollision(${1:integer index})\n\t{\n\t\t$0\n\t}\nsnippet collision_end\n\tcollision_end(${1:integer index})\n\t{\n\t\t$0\n\t}\nsnippet collision_start\n\tcollision_start(${1:integer index})\n\t{\n\t\t$0\n\t}\nsnippet control\n\tcontrol(${1:key id}, ${2:integer level}, ${3:integer edge})\n\t{\n\t\t$0\n\t}\nsnippet dataserver\n\tdataserver(${1:key query_id}, ${2:string data})\n\t{\n\t\t$0\n\t}\nsnippet do\n\tdo\n\t{\n\t\t$0\n\t}\n\twhile (${1:condition});\nsnippet else\n\telse\n\t{\n\t\t$0\n\t}\nsnippet email\n\temail(${1:string time}, ${2:string address}, ${3:string subject}, ${4:string message}, ${5:integer num_left})\n\t{\n\t\t$0\n\t}\nsnippet experience_permissions\n\texperience_permissions(${1:key agent_id})\n\t{\n\t\t$0\n\t}\nsnippet experience_permissions_denied\n\texperience_permissions_denied(${1:key agent_id}, ${2:integer reason})\n\t{\n\t\t$0\n\t}\nsnippet for\n\tfor (${1:start}; ${3:condition}; ${3:step})\n\t{\n\t\t$0\n\t}\nsnippet http_request\n\thttp_request(${1:key request_id}, ${2:string method}, ${3:string body})\n\t{\n\t\t$0\n\t}\nsnippet http_response\n\thttp_response(${1:key request_id}, ${2:integer status}, ${3:list metadata}, ${4:string body})\n\t{\n\t\t$0\n\t}\nsnippet if\n\tif (${1:condition})\n\t{\n\t\t$0\n\t}\nsnippet jump\n\tjump ${1:label};\nsnippet land_collision\n\tland_collision(${1:vector pos})\n\t{\n\t\t$0\n\t}\nsnippet land_collision_end\n\tland_collision_end(${1:vector pos})\n\t{\n\t\t$0\n\t}\nsnippet land_collision_start\n\tland_collision_start(${1:vector pos})\n\t{\n\t\t$0\n\t}\nsnippet link_message\n\tlink_message(${1:integer sender_num}, ${2:integer num}, ${3:string str}, ${4:key id})\n\t{\n\t\t$0\n\t}\nsnippet listen\n\tlisten(${1:integer channel}, ${2:string name}, ${3:key id}, ${4:string message})\n\t{\n\t\t$0\n\t}\nsnippet llAbs\n\tllAbs(${1:integer val})\nsnippet llAcos\n\tllAcos(${1:float val})\nsnippet llAddToLandBanList\n\tllAddToLandBanList(${1:key agent}, ${2:float hours});\n\t$0\nsnippet llAddToLandPassList\n\tllAddToLandPassList(${1:key agent}, ${2:float hours});\n\t$0\nsnippet llAdjustSoundVolume\n\tllAdjustSoundVolume(${1:float volume});\n\t$0\nsnippet llAgentInExperience\n\tllAgentInExperience(${1:key agent})\nsnippet llAllowInventoryDrop\n\tllAllowInventoryDrop(${1:integer add});\n\t$0\nsnippet llAngleBetween\n\tllAngleBetween(${1:rotation a}, ${2:rotation b})\nsnippet llApplyImpulse\n\tllApplyImpulse(${1:vector force}, ${2:integer local});\n\t$0\nsnippet llApplyRotationalImpulse\n\tllApplyRotationalImpulse(${1:vector force}, ${2:integer local});\n\t$0\nsnippet llAsin\n\tllAsin(${1:float val})\nsnippet llAtan2\n\tllAtan2(${1:float y}, ${2:float x})\nsnippet llAttachToAvatar\n\tllAttachToAvatar(${1:integer attach_point});\n\t$0\nsnippet llAttachToAvatarTemp\n\tllAttachToAvatarTemp(${1:integer attach_point});\n\t$0\nsnippet llAvatarOnLinkSitTarget\n\tllAvatarOnLinkSitTarget(${1:integer link})\nsnippet llAvatarOnSitTarget\n\tllAvatarOnSitTarget()\nsnippet llAxes2Rot\n\tllAxes2Rot(${1:vector fwd}, ${2:vector left}, ${3:vector up})\nsnippet llAxisAngle2Rot\n\tllAxisAngle2Rot(${1:vector axis}, ${2:float angle})\nsnippet llBase64ToInteger\n\tllBase64ToInteger(${1:string str})\nsnippet llBase64ToString\n\tllBase64ToString(${1:string str})\nsnippet llBreakAllLinks\n\tllBreakAllLinks();\n\t$0\nsnippet llBreakLink\n\tllBreakLink(${1:integer link});\n\t$0\nsnippet llCastRay\n\tllCastRay(${1:vector start}, ${2:vector end}, ${3:list options});\n\t$0\nsnippet llCeil\n\tllCeil(${1:float val})\nsnippet llClearCameraParams\n\tllClearCameraParams();\n\t$0\nsnippet llClearLinkMedia\n\tllClearLinkMedia(${1:integer link}, ${2:integer face});\n\t$0\nsnippet llClearPrimMedia\n\tllClearPrimMedia(${1:integer face});\n\t$0\nsnippet llCloseRemoteDataChannel\n\tllCloseRemoteDataChannel(${1:key channel});\n\t$0\nsnippet llCollisionFilter\n\tllCollisionFilter(${1:string name}, ${2:key id}, ${3:integer accept});\n\t$0\nsnippet llCollisionSound\n\tllCollisionSound(${1:string impact_sound}, ${2:float impact_volume});\n\t$0\nsnippet llCos\n\tllCos(${1:float theta})\nsnippet llCreateCharacter\n\tllCreateCharacter(${1:list options});\n\t$0\nsnippet llCreateKeyValue\n\tllCreateKeyValue(${1:string k})\nsnippet llCreateLink\n\tllCreateLink(${1:key target}, ${2:integer parent});\n\t$0\nsnippet llCSV2List\n\tllCSV2List(${1:string src})\nsnippet llDataSizeKeyValue\n\tllDataSizeKeyValue()\nsnippet llDeleteCharacter\n\tllDeleteCharacter();\n\t$0\nsnippet llDeleteKeyValue\n\tllDeleteKeyValue(${1:string k})\nsnippet llDeleteSubList\n\tllDeleteSubList(${1:list src}, ${2:integer start}, ${3:integer end})\nsnippet llDeleteSubString\n\tllDeleteSubString(${1:string src}, ${2:integer start}, ${3:integer end})\nsnippet llDetachFromAvatar\n\tllDetachFromAvatar();\n\t$0\nsnippet llDetectedGrab\n\tllDetectedGrab(${1:integer number})\nsnippet llDetectedGroup\n\tllDetectedGroup(${1:integer number})\nsnippet llDetectedKey\n\tllDetectedKey(${1:integer number})\nsnippet llDetectedLinkNumber\n\tllDetectedLinkNumber(${1:integer number})\nsnippet llDetectedName\n\tllDetectedName(${1:integer number})\nsnippet llDetectedOwner\n\tllDetectedOwner(${1:integer number})\nsnippet llDetectedPos\n\tllDetectedPosl(${1:integer number})\nsnippet llDetectedRot\n\tllDetectedRot(${1:integer number})\nsnippet llDetectedTouchBinormal\n\tllDetectedTouchBinormal(${1:integer number})\nsnippet llDetectedTouchFace\n\tllDetectedTouchFace(${1:integer number})\nsnippet llDetectedTouchNormal\n\tllDetectedTouchNormal(${1:integer number})\nsnippet llDetectedTouchPos\n\tllDetectedTouchPos(${1:integer number})\nsnippet llDetectedTouchST\n\tllDetectedTouchST(${1:integer number})\nsnippet llDetectedTouchUV\n\tllDetectedTouchUV(${1:integer number})\nsnippet llDetectedType\n\tllDetectedType(${1:integer number})\nsnippet llDetectedVel\n\tllDetectedVel(${1:integer number})\nsnippet llDialog\n\tllDialog(${1:key agent}, ${2:string message}, ${3:list buttons}, ${4:integer channel});\n\t$0\nsnippet llDie\n\tllDie();\n\t$0\nsnippet llDumpList2String\n\tllDumpList2String(${1:list src}, ${2:string separator})\nsnippet llEdgeOfWorld\n\tllEdgeOfWorld(${1:vector pos}, ${2:vector dir})\nsnippet llEjectFromLand\n\tllEjectFromLand(${1:key agent});\n\t$0\nsnippet llEmail\n\tllEmail(${1:string address}, ${2:string subject}, ${3:string message});\n\t$0\nsnippet llEscapeURL\n\tllEscapeURL(${1:string url})\nsnippet llEuler2Rot\n\tllEuler2Rot(${1:vector v})\nsnippet llExecCharacterCmd\n\tllExecCharacterCmd(${1:integer command}, ${2:list options});\n\t$0\nsnippet llEvade\n\tllEvade(${1:key target}, ${2:list options});\n\t$0\nsnippet llFabs\n\tllFabs(${1:float val})\nsnippet llFleeFrom\n\tllFleeFrom(${1:vector position}, ${2:float distance}, ${3:list options});\n\t$0\nsnippet llFloor\n\tllFloor(${1:float val})\nsnippet llForceMouselook\n\tllForceMouselook(${1:integer mouselook});\n\t$0\nsnippet llFrand\n\tllFrand(${1:float mag})\nsnippet llGenerateKey\n\tllGenerateKey()\nsnippet llGetAccel\n\tllGetAccel()\nsnippet llGetAgentInfo\n\tllGetAgentInfo(${1:key id})\nsnippet llGetAgentLanguage\n\tllGetAgentLanguage(${1:key agent})\nsnippet llGetAgentList\n\tllGetAgentList(${1:integer scope}, ${2:list options})\nsnippet llGetAgentSize\n\tllGetAgentSize(${1:key agent})\nsnippet llGetAlpha\n\tllGetAlpha(${1:integer face})\nsnippet llGetAndResetTime\n\tllGetAndResetTime()\nsnippet llGetAnimation\n\tllGetAnimation(${1:key id})\nsnippet llGetAnimationList\n\tllGetAnimationList(${1:key agent})\nsnippet llGetAnimationOverride\n\tllGetAnimationOverride(${1:string anim_state})\nsnippet llGetAttached\n\tllGetAttached()\nsnippet llGetAttachedList\n\tllGetAttachedList(${1:key id})\nsnippet llGetBoundingBox\n\tllGetBoundingBox(${1:key object})\nsnippet llGetCameraPos\n\tllGetCameraPos()\nsnippet llGetCameraRot\n\tllGetCameraRot()\nsnippet llGetCenterOfMass\n\tllGetCenterOfMass()\nsnippet llGetClosestNavPoint\n\tllGetClosestNavPoint(${1:vector point}, ${2:list options})\nsnippet llGetColor\n\tllGetColor(${1:integer face})\nsnippet llGetCreator\n\tllGetCreator()\nsnippet llGetDate\n\tllGetDate()\nsnippet llGetDisplayName\n\tllGetDisplayName(${1:key id})\nsnippet llGetEnergy\n\tllGetEnergy()\nsnippet llGetEnv\n\tllGetEnv(${1:string name})\nsnippet llGetExperienceDetails\n\tllGetExperienceDetails(${1:key experience_id})\nsnippet llGetExperienceErrorMessage\n\tllGetExperienceErrorMessage(${1:integer error})\nsnippet llGetForce\n\tllGetForce()\nsnippet llGetFreeMemory\n\tllGetFreeMemory()\nsnippet llGetFreeURLs\n\tllGetFreeURLs()\nsnippet llGetGeometricCenter\n\tllGetGeometricCenter()\nsnippet llGetGMTclock\n\tllGetGMTclock()\nsnippet llGetHTTPHeader\n\tllGetHTTPHeader(${1:key request_id}, ${2:string header})\nsnippet llGetInventoryCreator\n\tllGetInventoryCreator(${1:string item})\nsnippet llGetInventoryKey\n\tllGetInventoryKey(${1:string name})\nsnippet llGetInventoryName\n\tllGetInventoryName(${1:integer type}, ${2:integer number})\nsnippet llGetInventoryNumber\n\tllGetInventoryNumber(${1:integer type})\nsnippet llGetInventoryPermMask\n\tllGetInventoryPermMask(${1:string item}, ${2:integer mask})\nsnippet llGetInventoryType\n\tllGetInventoryType(${1:string name})\nsnippet llGetKey\n\tllGetKey()\nsnippet llGetLandOwnerAt\n\tllGetLandOwnerAt(${1:vector pos})\nsnippet llGetLinkKey\n\tllGetLinkKey(${1:integer link})\nsnippet llGetLinkMedia\n\tllGetLinkMedia(${1:integer link}, ${2:integer face}, ${3:list params})\nsnippet llGetLinkName\n\tllGetLinkName(${1:integer link})\nsnippet llGetLinkNumber\n\tllGetLinkNumber()\nsnippet llGetLinkNumberOfSides\n\tllGetLinkNumberOfSides(${1:integer link})\nsnippet llGetLinkPrimitiveParams\n\tllGetLinkPrimitiveParams(${1:integer link}, ${2:list params})\nsnippet llGetListEntryType\n\tllGetListEntryType(${1:list src}, ${2:integer index})\nsnippet llGetListLength\n\tllGetListLength(${1:list src})\nsnippet llGetLocalPos\n\tllGetLocalPos()\nsnippet llGetLocalRot\n\tllGetLocalRot()\nsnippet llGetMass\n\tllGetMass()\nsnippet llGetMassMKS\n\tllGetMassMKS()\nsnippet llGetMaxScaleFactor\n\tllGetMaxScaleFactor()\nsnippet llGetMemoryLimit\n\tllGetMemoryLimit()\nsnippet llGetMinScaleFactor\n\tllGetMinScaleFactor()\nsnippet llGetNextEmail\n\tllGetNextEmail(${1:string address}, ${2:string subject});\n\t$0\nsnippet llGetNotecardLine\n\tllGetNotecardLine(${1:string name}, ${2:integer line})\nsnippet llGetNumberOfNotecardLines\n\tllGetNumberOfNotecardLines(${1:string name})\nsnippet llGetNumberOfPrims\n\tllGetNumberOfPrims()\nsnippet llGetNumberOfSides\n\tllGetNumberOfSides()\nsnippet llGetObjectDesc\n\tllGetObjectDesc()\nsnippet llGetObjectDetails\n\tllGetObjectDetails(${1:key id}, ${2:list params})\nsnippet llGetObjectMass\n\tllGetObjectMass(${1:key id})\nsnippet llGetObjectName\n\tllGetObjectName()\nsnippet llGetObjectPermMask\n\tllGetObjectPermMask(${1:integer mask})\nsnippet llGetObjectPrimCount\n\tllGetObjectPrimCount(${1:key prim})\nsnippet llGetOmega\n\tllGetOmega()\nsnippet llGetOwner\n\tllGetOwner()\nsnippet llGetOwnerKey\n\tllGetOwnerKey(${1:key id})\nsnippet llGetParcelDetails\n\tllGetParcelDetails(${1:vector pos}, ${2:list params})\nsnippet llGetParcelFlags\n\tllGetParcelFlags(${1:vector pos})\nsnippet llGetParcelMaxPrims\n\tllGetParcelMaxPrims(${1:vector pos}, ${2:integer sim_wide})\nsnippet llGetParcelMusicURL\n\tllGetParcelMusicURL()\nsnippet llGetParcelPrimCount\n\tllGetParcelPrimCount(${1:vector pos}, ${2:integer category}, ${3:integer sim_wide})\nsnippet llGetParcelPrimOwners\n\tllGetParcelPrimOwners(${1:vector pos})\nsnippet llGetPermissions\n\tllGetPermissions()\nsnippet llGetPermissionsKey\n\tllGetPermissionsKey()\nsnippet llGetPhysicsMaterial\n\tllGetPhysicsMaterial()\nsnippet llGetPos\n\tllGetPos()\nsnippet llGetPrimitiveParams\n\tllGetPrimitiveParams(${1:list params})\nsnippet llGetPrimMediaParams\n\tllGetPrimMediaParams(${1:integer face}, ${2:list params})\nsnippet llGetRegionAgentCount\n\tllGetRegionAgentCount()\nsnippet llGetRegionCorner\n\tllGetRegionCorner()\nsnippet llGetRegionFlags\n\tllGetRegionFlags()\nsnippet llGetRegionFPS\n\tllGetRegionFPS()\nsnippet llGetRegionName\n\tllGetRegionName()\nsnippet llGetRegionTimeDilation\n\tllGetRegionTimeDilation()\nsnippet llGetRootPosition\n\tllGetRootPosition()\nsnippet llGetRootRotation\n\tllGetRootRotation()\nsnippet llGetRot\n\tllGetRot()\nsnippet llGetScale\n\tllGetScale()\nsnippet llGetScriptName\n\tllGetScriptName()\nsnippet llGetScriptState\n\tllGetScriptState(${1:string script})\nsnippet llGetSimStats\n\tllGetSimStats(${1:integer stat_type})\nsnippet llGetSimulatorHostname\n\tllGetSimulatorHostname()\nsnippet llGetSPMaxMemory\n\tllGetSPMaxMemory()\nsnippet llGetStartParameter\n\tllGetStartParameter()\nsnippet llGetStaticPath\n\tllGetStaticPath(${1:vector start}, ${2:vector end}, ${3:float radius}, ${4:list params})\nsnippet llGetStatus\n\tllGetStatus(${1:integer status})\nsnippet llGetSubString\n\tllGetSubString(${1:string src}, ${2:integer start}, ${3:integer end})\nsnippet llGetSunDirection\n\tllGetSunDirection()\nsnippet llGetTexture\n\tllGetTexture(${1:integer face})\nsnippet llGetTextureOffset\n\tllGetTextureOffset(${1:integer face})\nsnippet llGetTextureRot\n\tllGetTextureRot(${1:integer face})\nsnippet llGetTextureScale\n\tllGetTextureScale(${1:integer face})\nsnippet llGetTime\n\tllGetTime()\nsnippet llGetTimeOfDay\n\tllGetTimeOfDay()\nsnippet llGetTimestamp\n\tllGetTimestamp()\nsnippet llGetTorque\n\tllGetTorque()\nsnippet llGetUnixTime\n\tllGetUnixTime()\nsnippet llGetUsedMemory\n\tllGetUsedMemory()\nsnippet llGetUsername\n\tllGetUsername(${1:key id})\nsnippet llGetVel\n\tllGetVel()\nsnippet llGetWallclock\n\tllGetWallclock()\nsnippet llGiveInventory\n\tllGiveInventory(${1:key destination}, ${2:string inventory});\n\t$0\nsnippet llGiveInventoryList\n\tllGiveInventoryList(${1:key target}, ${2:string folder}, ${3:list inventory});\n\t$0\nsnippet llGiveMoney\n\tllGiveMoney(${1:key destination}, ${2:integer amount})\nsnippet llGround\n\tllGround(${1:vector offset})\nsnippet llGroundContour\n\tllGroundContour(${1:vector offset})\nsnippet llGroundNormal\n\tllGroundNormal(${1:vector offset})\nsnippet llGroundRepel\n\tllGroundRepel(${1:float height}, ${2:integer water}, ${3:float tau});\n\t$0\nsnippet llGroundSlope\n\tllGroundSlope(${1:vector offset})\nsnippet llHTTPRequest\n\tllHTTPRequest(${1:string url}, ${2:list parameters}, ${3:string body})\nsnippet llHTTPResponse\n\tllHTTPResponse(${1:key request_id}, ${2:integer status}, ${3:string body});\n\t$0\nsnippet llInsertString\n\tllInsertString(${1:string dst}, ${2:integer pos}, ${3:string src})\nsnippet llInstantMessage\n\tllInstantMessage(${1:key user}, ${2:string message});\n\t$0\nsnippet llIntegerToBase64\n\tllIntegerToBase64(${1:integer number})\nsnippet llJson2List\n\tllJson2List(${1:string json})\nsnippet llJsonGetValue\n\tllJsonGetValue(${1:string json}, ${2:list specifiers})\nsnippet llJsonSetValue\n\tllJsonSetValue(${1:string json}, ${2:list specifiers}, ${3:string newValue})\nsnippet llJsonValueType\n\tllJsonValueType(${1:string json}, ${2:list specifiers})\nsnippet llKey2Name\n\tllKey2Name(${1:key id})\nsnippet llKeyCountKeyValue\n\tllKeyCountKeyValue()\nsnippet llKeysKeyValue\n\tllKeysKeyValue(${1:integer first}, ${2:integer count})\nsnippet llLinkParticleSystem\n\tllLinkParticleSystem(${1:integer link}, ${2:list rules});\n\t$0\nsnippet llLinkSitTarget\n\tllLinkSitTarget(${1:integer link}, ${2:vector offset}, ${3:rotation rot});\n\t$0\nsnippet llList2CSV\n\tllList2CSV(${1:list src})\nsnippet llList2Float\n\tllList2Float(${1:list src}, ${2:integer index})\nsnippet llList2Integer\n\tllList2Integer(${1:list src}, ${2:integer index})\nsnippet llList2Json\n\tllList2Json(${1:string type}, ${2:list values})\nsnippet llList2Key\n\tllList2Key(${1:list src}, ${2:integer index})\nsnippet llList2List\n\tllList2List(${1:list src}, ${2:integer start}, ${3:integer end})\nsnippet llList2ListStrided\n\tllList2ListStrided(${1:list src}, ${2:integer start}, ${3:integer end}, ${4:integer stride})\nsnippet llList2Rot\n\tllList2Rot(${1:list src}, ${2:integer index})\nsnippet llList2String\n\tllList2String(${1:list src}, ${2:integer index})\nsnippet llList2Vector\n\tllList2Vector(${1:list src}, ${2:integer index})\nsnippet llListen\n\tllListen(${1:integer channel}, ${2:string name}, ${3:key id}, ${4:string msg})\nsnippet llListenControl\n\tllListenControl(${1:integer handle}, ${2:integer active});\n\t$0\nsnippet llListenRemove\n\tllListenRemove(${1:integer handle});\n\t$0\nsnippet llListFindList\n\tllListFindList(${1:list src}, ${2:list test})\nsnippet llListInsertList\n\tllListInsertList(${1:list dest}, ${2:list src}, ${3:integer start})\nsnippet llListRandomize\n\tllListRandomize(${1:list src}, ${2:integer stride})\nsnippet llListReplaceList\n\tllListReplaceList(${1:list dest}, ${2:list src}, ${3:integer start}, ${4:integer end})\nsnippet llListSort\n\tllListSort(${1:list src}, ${2:integer stride}, ${3:integer ascending})\nsnippet llListStatistics\n\tllListStatistics(${1:integer operation}, ${2:list src})\nsnippet llLoadURL\n\tllLoadURL(${1:key agent}, ${2:string message}, ${3:string url});\n\t$0\nsnippet llLog\n\tllLog(${1:float val})\nsnippet llLog10\n\tllLog10(${1:float val})\nsnippet llLookAt\n\tllLookAt(${1:vector target}, ${2:float strength}, ${3:float damping});\n\t$0\nsnippet llLoopSound\n\tllLoopSound(${1:string sound}, ${2:float volume});\n\t$0\nsnippet llLoopSoundMaster\n\tllLoopSoundMaster(${1:string sound}, ${2:float volume});\n\t$0\nsnippet llLoopSoundSlave\n\tllLoopSoundSlave(${1:string sound}, ${2:float volume});\n\t$0\nsnippet llManageEstateAccess\n\tllManageEstateAccess(${1:integer action}, ${2:key agent})\nsnippet llMapDestination\n\tllMapDestination(${1:string simname}, ${2:vector pos}, ${3:vector look_at});\n\t$0\nsnippet llMD5String\n\tllMD5String(${1:string src}, ${2:integer nonce})\nsnippet llMessageLinked\n\tllMessageLinked(${1:integer link}, ${2:integer num}, ${3:string str}, ${4:key id});\n\t$0\nsnippet llMinEventDelay\n\tllMinEventDelay(${1:float delay});\n\t$0\nsnippet llModifyLand\n\tllModifyLand(${1:integer action}, ${2:integer brush});\n\t$0\nsnippet llModPow\n\tllModPow(${1:integer a}, ${2:integer b}, ${3:integer c})\nsnippet llMoveToTarget\n\tllMoveToTarget(${1:vector target}, ${2:float tau});\n\t$0\nsnippet llNavigateTo\n\tllNavigateTo(${1:vector pos}, ${2:list options});\n\t$0\nsnippet llOffsetTexture\n\tllOffsetTexture(${1:float u}, ${2:float v}, ${3:integer face});\n\t$0\nsnippet llOpenRemoteDataChannel\n\tllOpenRemoteDataChannel();\n\t$0\nsnippet llOverMyLand\n\tllOverMyLand(${1:key id})\nsnippet llOwnerSay\n\tllOwnerSay(${1:string msg});\n\t$0\nsnippet llParcelMediaCommandList\n\tllParcelMediaCommandList(${1:list commandList});\n\t$0\nsnippet llParcelMediaQuery\n\tllParcelMediaQuery(${1:list query})\nsnippet llParseString2List\n\tllParseString2List(${1:string src}, ${2:list separators}, ${3:list spacers})\nsnippet llParseStringKeepNulls\n\tllParseStringKeepNulls(${1:string src}, ${2:list separators}, ${3:list spacers})\nsnippet llParticleSystem\n\tllParticleSystem(${1:list rules});\n\t$0\nsnippet llPassCollisions\n\tllPassCollisions(${1:integer pass});\n\t$0\nsnippet llPassTouches\n\tllPassTouches(${1:integer pass});\n\t$0\nsnippet llPatrolPoints\n\tllPatrolPoints(${1:list patrolPoints}, ${2:list options});\n\t$0\nsnippet llPlaySound\n\tllPlaySound(${1:string sound}, ${2:float volume});\n\t$0\nsnippet llPlaySoundSlave\n\tllPlaySoundSlave(${1:string sound}, ${2:float volume});\n\t$0\nsnippet llPow\n\tllPow(${1:float base}, ${2:float exponent})\nsnippet llPreloadSound\n\tllPreloadSound(${1:string sound});\n\t$0\nsnippet llPursue\n\tllPursue(${1:key target}, ${2:list options});\n\t$0\nsnippet llPushObject\n\tllPushObject(${1:key target}, ${2:vector impulse}, ${3:vector ang_impulse}, ${4:integer local});\n\t$0\nsnippet llReadKeyValue\n\tllReadKeyValue(${1:string k})\nsnippet llRegionSay\n\tllRegionSay(${1:integer channel}, ${2:string msg});\n\t$0\nsnippet llRegionSayTo\n\tllRegionSayTo(${1:key target}, ${2:integer channel}, ${3:string msg});\n\t$0\nsnippet llReleaseControls\n\tllReleaseControls();\n\t$0\nsnippet llReleaseURL\n\tllReleaseURL(${1:string url});\n\t$0\nsnippet llRemoteDataReply\n\tllRemoteDataReply(${1:key channel}, ${2:key message_id}, ${3:string sdata}, ${4:integer idata});\n\t$0\nsnippet llRemoteLoadScriptPin\n\tllRemoteLoadScriptPin(${1:key target}, ${2:string name}, ${3:integer pin}, ${4:integer running}, ${5:integer start_param});\n\t$0\nsnippet llRemoveFromLandBanList\n\tllRemoveFromLandBanList(${1:key agent});\n\t$0\nsnippet llRemoveFromLandPassList\n\tllRemoveFromLandPassList(${1:key agent});\n\t$0\nsnippet llRemoveInventory\n\tllRemoveInventory(${1:string item});\n\t$0\nsnippet llRemoveVehicleFlags\n\tllRemoveVehicleFlags(${1:integer flags});\n\t$0\nsnippet llRequestAgentData\n\tllRequestAgentData(${1:key id}, ${2:integer data})\nsnippet llRequestDisplayName\n\tllRequestDisplayName(${1:key id})\nsnippet llRequestExperiencePermissions\n\tllRequestExperiencePermissions(${1:key agent}, ${2:string name})\nsnippet llRequestInventoryData\n\tllRequestInventoryData(${1:string name})\nsnippet llRequestPermissions\n\tllRequestPermissions(${1:key agent}, ${2:integer permissions})\nsnippet llRequestSecureURL\n\tllRequestSecureURL()\nsnippet llRequestSimulatorData\n\tllRequestSimulatorData(${1:string region}, ${2:integer data})\nsnippet llRequestURL\n\tllRequestURL()\nsnippet llRequestUsername\n\tllRequestUsername(${1:key id})\nsnippet llResetAnimationOverride\n\tllResetAnimationOverride(${1:string anim_state});\n\t$0\nsnippet llResetLandBanList\n\tllResetLandBanList();\n\t$0\nsnippet llResetLandPassList\n\tllResetLandPassList();\n\t$0\nsnippet llResetOtherScript\n\tllResetOtherScript(${1:string name});\n\t$0\nsnippet llResetScript\n\tllResetScript();\n\t$0\nsnippet llResetTime\n\tllResetTime();\n\t$0\nsnippet llReturnObjectsByID\n\tllReturnObjectsByID(${1:list objects})\nsnippet llReturnObjectsByOwner\n\tllReturnObjectsByOwner(${1:key owner}, ${2:integer scope})\nsnippet llRezAtRoot\n\tllRezAtRoot(${1:string inventory}, ${2:vector position}, ${3:vector velocity}, ${4:rotation rot}, ${5:integer param});\n\t$0\nsnippet llRezObject\n\tllRezObject(${1:string inventory}, ${2:vector pos}, ${3:vector vel}, ${4:rotation rot}, ${5:integer param});\n\t$0\nsnippet llRot2Angle\n\tllRot2Angle(${1:rotation rot})\nsnippet llRot2Axis\n\tllRot2Axis(${1:rotation rot})\nsnippet llRot2Euler\n\tllRot2Euler(${1:rotation quat})\nsnippet llRot2Fwd\n\tllRot2Fwd(${1:rotation q})\nsnippet llRot2Left\n\tllRot2Left(${1:rotation q})\nsnippet llRot2Up\n\tllRot2Up(${1:rotation q})\nsnippet llRotateTexture\n\tllRotateTexture(${1:float angle}, ${2:integer face});\n\t$0\nsnippet llRotBetween\n\tllRotBetween(${1:vector start}, ${2:vector end})\nsnippet llRotLookAt\n\tllRotLookAt(${1:rotation target_direction}, ${2:float strength}, ${3:float damping});\n\t$0\nsnippet llRotTarget\n\tllRotTarget(${1:rotation rot}, ${2:float error})\nsnippet llRotTargetRemove\n\tllRotTargetRemove(${1:integer handle});\n\t$0\nsnippet llRound\n\tllRound(${1:float val})\nsnippet llSameGroup\n\tllSameGroup(${1:key group})\nsnippet llSay\n\tllSay(${1:integer channel}, ${2:string msg});\n\t$0\nsnippet llScaleByFactor\n\tllScaleByFactor(${1:float scaling_factor})\nsnippet llScaleTexture\n\tllScaleTexture(${1:float u}, ${2:float v}, ${3:integer face});\n\t$0\nsnippet llScriptDanger\n\tllScriptDanger(${1:vector pos})\nsnippet llScriptProfiler\n\tllScriptProfiler(${1:integer flags});\n\t$0\nsnippet llSendRemoteData\n\tllSendRemoteData(${1:key channel}, ${2:string dest}, ${3:integer idata}, ${4:string sdata})\nsnippet llSensor\n\tllSensor(${1:string name}, ${2:key id}, ${3:integer type}, ${4:float range}, ${5:float arc});\n\t$0\nsnippet llSensorRepeat\n\tllSensorRepeat(${1:string name}, ${2:key id}, ${3:integer type}, ${4:float range}, ${5:float arc}, ${6:float rate});\n\t$0\nsnippet llSetAlpha\n\tllSetAlpha(${1:float alpha}, ${2:integer face});\n\t$0\nsnippet llSetAngularVelocity\n\tllSetAngularVelocity(${1:vector force}, ${2:integer local});\n\t$0\nsnippet llSetAnimationOverride\n\tllSetAnimationOverride(${1:string anim_state}, ${2:string anim})\nsnippet llSetBuoyancy\n\tllSetBuoyancy(${1:float buoyancy});\n\t$0\nsnippet llSetCameraAtOffset\n\tllSetCameraAtOffset(${1:vector offset});\n\t$0\nsnippet llSetCameraEyeOffset\n\tllSetCameraEyeOffset(${1:vector offset});\n\t$0\nsnippet llSetCameraParams\n\tllSetCameraParams(${1:list rules});\n\t$0\nsnippet llSetClickAction\n\tllSetClickAction(${1:integer action});\n\t$0\nsnippet llSetColor\n\tllSetColor(${1:vector color}, ${2:integer face});\n\t$0\nsnippet llSetContentType\n\tllSetContentType(${1:key request_id}, ${2:integer content_type});\n\t$0\nsnippet llSetDamage\n\tllSetDamage(${1:float damage});\n\t$0\nsnippet llSetForce\n\tllSetForce(${1:vector force}, ${2:integer local});\n\t$0\nsnippet llSetForceAndTorque\n\tllSetForceAndTorque(${1:vector force}, ${2:vector torque}, ${3:integer local});\n\t$0\nsnippet llSetHoverHeight\n\tllSetHoverHeight(${1:float height}, ${2:integer water}, ${3:float tau});\n\t$0\nsnippet llSetKeyframedMotion\n\tllSetKeyframedMotion(${1:list keyframes}, ${2:list options});\n\t$0\nsnippet llSetLinkAlpha\n\tllSetLinkAlpha(${1:integer link}, ${2:float alpha}, ${3:integer face});\n\t$0\nsnippet llSetLinkCamera\n\tllSetLinkCamera(${1:integer link}, ${2:vector eye}, ${3:vector at});\n\t$0\nsnippet llSetLinkColor\n\tllSetLinkColor(${1:integer link}, ${2:vector color}, ${3:integer face});\n\t$0\nsnippet llSetLinkMedia\n\tllSetLinkMedia(${1:integer link}, ${2:integer face}, ${3:list params});\n\t$0\nsnippet llSetLinkPrimitiveParams\n\tllSetLinkPrimitiveParams(${1:integer link}, ${2:list rules});\n\t$0\nsnippet llSetLinkPrimitiveParamsFast\n\tllSetLinkPrimitiveParamsFast(${1:integer link}, ${2:list rules});\n\t$0\nsnippet llSetLinkTexture\n\tllSetLinkTexture(${1:integer link}, ${2:string texture}, ${3:integer face});\n\t$0\nsnippet llSetLinkTextureAnim\n\tllSetLinkTextureAnim(${1:integer link}, ${2:integer mode}, ${3:integer face}, ${4:integer sizex}, ${5:integer sizey}, ${6:float start}, ${7:float length}, ${8:float rate});\n\t$0\nsnippet llSetLocalRot\n\tllSetLocalRot(${1:rotation rot});\n\t$0\nsnippet llSetMemoryLimit\n\tllSetMemoryLimit(${1:integer limit})\nsnippet llSetObjectDesc\n\tllSetObjectDesc(${1:string description});\n\t$0\nsnippet llSetObjectName\n\tllSetObjectName(${1:string name});\n\t$0\nsnippet llSetParcelMusicURL\n\tllSetParcelMusicURL(${1:string url});\n\t$0\nsnippet llSetPayPrice\n\tllSetPayPrice(${1:integer price}, [${2:integer price_button_a}, ${3:integer price_button_b}, ${4:integer price_button_c}, ${5:integer price_button_d}]);\n\t$0\nsnippet llSetPhysicsMaterial\n\tllSetPhysicsMaterial(${1:integer mask}, ${2:float gravity_multiplier}, ${3:float restitution}, ${4:float friction}, ${5:float density});\n\t$0\nsnippet llSetPos\n\tllSetPos(${1:vector pos});\n\t$0\nsnippet llSetPrimitiveParams\n\tllSetPrimitiveParams(${1:list rules});\n\t$0\nsnippet llSetPrimMediaParams\n\tllSetPrimMediaParams(${1:integer face}, ${2:list params});\n\t$0\nsnippet llSetRegionPos\n\tllSetRegionPos(${1:vector position})\nsnippet llSetRemoteScriptAccessPin\n\tllSetRemoteScriptAccessPin(${1:integer pin});\n\t$0\nsnippet llSetRot\n\tllSetRot(${1:rotation rot});\n\t$0\nsnippet llSetScale\n\tllSetScale(${1:vector size});\n\t$0\nsnippet llSetScriptState\n\tllSetScriptState(${1:string name}, ${2:integer run});\n\t$0\nsnippet llSetSitText\n\tllSetSitText(${1:string text});\n\t$0\nsnippet llSetSoundQueueing\n\tllSetSoundQueueing(${1:integer queue});\n\t$0\nsnippet llSetSoundRadius\n\tllSetSoundRadius(${1:float radius});\n\t$0\nsnippet llSetStatus\n\tllSetStatus(${1:integer status}, ${2:integer value});\n\t$0\nsnippet llSetText\n\tllSetText(${1:string text}, ${2:vector color}, ${3:float alpha});\n\t$0\nsnippet llSetTexture\n\tllSetTexture(${1:string texture}, ${2:integer face});\n\t$0\nsnippet llSetTextureAnim\n\tllSetTextureAnim(${1:integer mode}, ${2:integer face}, ${3:integer sizex}, ${4:integer sizey}, ${5:float start}, ${6:float length}, ${7:float rate});\n\t$0\nsnippet llSetTimerEvent\n\tllSetTimerEvent(${1:float sec});\n\t$0\nsnippet llSetTorque\n\tllSetTorque(${1:vector torque}, ${2:integer local});\n\t$0\nsnippet llSetTouchText\n\tllSetTouchText(${1:string text});\n\t$0\nsnippet llSetVehicleFlags\n\tllSetVehicleFlags(${1:integer flags});\n\t$0\nsnippet llSetVehicleFloatParam\n\tllSetVehicleFloatParam(${1:integer param}, ${2:float value});\n\t$0\nsnippet llSetVehicleRotationParam\n\tllSetVehicleRotationParam(${1:integer param}, ${2:rotation rot});\n\t$0\nsnippet llSetVehicleType\n\tllSetVehicleType(${1:integer type});\n\t$0\nsnippet llSetVehicleVectorParam\n\tllSetVehicleVectorParam(${1:integer param}, ${2:vector vec});\n\t$0\nsnippet llSetVelocity\n\tllSetVelocity(${1:vector force}, ${2:integer local});\n\t$0\nsnippet llSHA1String\n\tllSHA1String(${1:string src})\nsnippet llShout\n\tllShout(${1:integer channel}, ${2:string msg});\n\t$0\nsnippet llSin\n\tllSin(${1:float theta})\nsnippet llSitTarget\n\tllSitTarget(${1:vector offset}, ${2:rotation rot});\n\t$0\nsnippet llSleep\n\tllSleep(${1:float sec});\n\t$0\nsnippet llSqrt\n\tllSqrt(${1:float val})\nsnippet llStartAnimation\n\tllStartAnimation(${1:string anim});\n\t$0\nsnippet llStopAnimation\n\tllStopAnimation(${1:string anim});\n\t$0\nsnippet llStopHover\n\tllStopHover();\n\t$0\nsnippet llStopLookAt\n\tllStopLookAt();\n\t$0\nsnippet llStopMoveToTarget\n\tllStopMoveToTarget();\n\t$0\nsnippet llStopSound\n\tllStopSound();\n\t$0\nsnippet llStringLength\n\tllStringLength(${1:string str})\nsnippet llStringToBase64\n\tllStringToBase64(${1:string str})\nsnippet llStringTrim\n\tllStringTrim(${1:string src}, ${2:integer type})\nsnippet llSubStringIndex\n\tllSubStringIndex(${1:string source}, ${2:string pattern})\nsnippet llTakeControls\n\tllTakeControls(${1:integer controls}, ${2:integer accept}, ${3:integer pass_on});\n\t$0\nsnippet llTan\n\tllTan(${1:float theta})\nsnippet llTarget\n\tllTarget(${1:vector position}, ${2:float range})\nsnippet llTargetOmega\n\tllTargetOmega(${1:vector axis}, ${2:float spinrate}, ${3:float gain});\n\t$0\nsnippet llTargetRemove\n\tllTargetRemove(${1:integer handle});\n\t$0\nsnippet llTeleportAgent\n\tllTeleportAgent(${1:key agent}, ${2:string landmark}, ${3:vector position}, ${4:vector look_at});\n\t$0\nsnippet llTeleportAgentGlobalCoords\n\tllTeleportAgentGlobalCoords(${1:key agent}, ${2:vector global_coordinates}, ${3:vector region_coordinates}, ${4:vector look_at});\n\t$0\nsnippet llTeleportAgentHome\n\tllTeleportAgentHome(${1:key agent});\n\t$0\nsnippet llTextBox\n\tllTextBox(${1:key agent}, ${2:string message}, ${3:integer channel});\n\t$0\nsnippet llToLower\n\tllToLower(${1:string src})\nsnippet llToUpper\n\tllToUpper(${1:string src})\nsnippet llTransferLindenDollars\n\tllTransferLindenDollars(${1:key destination}, ${2:integer amount})\nsnippet llTriggerSound\n\tllTriggerSound(${1:string sound}, ${2:float volume});\n\t$0\nsnippet llTriggerSoundLimited\n\tllTriggerSoundLimited(${1:string sound}, ${2:float volume}, ${3:vector top_north_east}, ${4:vector bottom_south_west});\n\t$0\nsnippet llUnescapeURL\n\tllUnescapeURL(${1:string url})\nsnippet llUnSit\n\tllUnSit(${1:key id});\n\t$0\nsnippet llUpdateCharacter\n\tllUpdateCharacter(${1:list options})\nsnippet llUpdateKeyValue\n\tllUpdateKeyValue(${1:string k}, ${2:string v}, ${3:integer checked}, ${4:string ov})\nsnippet llVecDist\n\tllVecDist(${1:vector vec_a}, ${2:vector vec_b})\nsnippet llVecMag\n\tllVecMag(${1:vector vec})\nsnippet llVecNorm\n\tllVecNorm(${1:vector vec})\nsnippet llVolumeDetect\n\tllVolumeDetect(${1:integer detect});\n\t$0\nsnippet llWanderWithin\n\tllWanderWithin(${1:vector origin}, ${2:vector dist}, ${3:list options});\n\t$0\nsnippet llWater\n\tllWater(${1:vector offset});\n\t$0\nsnippet llWhisper\n\tllWhisper(${1:integer channel}, ${2:string msg});\n\t$0\nsnippet llWind\n\tllWind(${1:vector offset});\n\t$0\nsnippet llXorBase64\n\tllXorBase64(${1:string str1}, ${2:string str2})\nsnippet money\n\tmoney(${1:key id}, ${2:integer amount})\n\t{\n\t\t$0\n\t}\nsnippet object_rez\n\tobject_rez(${1:key id})\n\t{\n\t\t$0\n\t}\nsnippet on_rez\n\ton_rez(${1:integer start_param})\n\t{\n\t\t$0\n\t}\nsnippet path_update\n\tpath_update(${1:integer type}, ${2:list reserved})\n\t{\n\t\t$0\n\t}\nsnippet remote_data\n\tremote_data(${1:integer event_type}, ${2:key channel}, ${3:key message_id}, ${4:string sender}, ${5:integer idata}, ${6:string sdata})\n\t{\n\t\t$0\n\t}\nsnippet run_time_permissions\n\trun_time_permissions(${1:integer perm})\n\t{\n\t\t$0\n\t}\nsnippet sensor\n\tsensor(${1:integer index})\n\t{\n\t\t$0\n\t}\nsnippet state\n\tstate ${1:name}\nsnippet touch\n\ttouch(${1:integer index})\n\t{\n\t\t$0\n\t}\nsnippet touch_end\n\ttouch_end(${1:integer index})\n\t{\n\t\t$0\n\t}\nsnippet touch_start\n\ttouch_start(${1:integer index})\n\t{\n\t\t$0\n\t}\nsnippet transaction_result\n\ttransaction_result(${1:key id}, ${2:integer success}, ${3:string data})\n\t{\n\t\t$0\n\t}\nsnippet while\n\twhile (${1:condition})\n\t{\n\t\t$0\n\t}\n"
  },
  {
    "path": "lib/ace/snippets/lua.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./lua.snippets\");\nexports.scope = \"lua\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/lua.snippets",
    "content": "snippet #!\n\t#!/usr/bin/env lua\n\t$1\nsnippet local\n\tlocal ${1:x} = ${2:1}\nsnippet fun\n\tfunction ${1:fname}(${2:...})\n\t\t${3:-- body}\n\tend\nsnippet for\n\tfor ${1:i}=${2:1},${3:10} do\n\t\t${4:print(i)}\n\tend\nsnippet forp\n\tfor ${1:i},${2:v} in pairs(${3:table_name}) do\n\t   ${4:-- body}\n\tend\nsnippet fori\n\tfor ${1:i},${2:v} in ipairs(${3:table_name}) do\n\t   ${4:-- body}\n\tend\n"
  },
  {
    "path": "lib/ace/snippets/luapage.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./luapage.snippets\");\nexports.scope = \"luapage\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/luapage.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/lucene.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./lucene.snippets\");\nexports.scope = \"lucene\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/lucene.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/makefile.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./makefile.snippets\");\nexports.scope = \"makefile\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/makefile.snippets",
    "content": "snippet ifeq\n\tifeq (${1:cond0},${2:cond1})\n\t\t${3:code}\n\tendif\n"
  },
  {
    "path": "lib/ace/snippets/mako.snippets",
    "content": "snippet def\n\t<%def name=\"${1:name}\">\n\t\t${2:}\n\t</%def>\nsnippet call\n\t<%call expr=\"${1:name}\">\n\t\t${2:}\n\t</%call>\nsnippet doc\n\t<%doc>\n\t\t${1:}\n\t</%doc>\nsnippet text\n\t<%text>\n\t\t${1:}\n\t</%text>\nsnippet for\n\t% for ${1:i} in ${2:iter}:\n\t\t${3:}\n\t% endfor\nsnippet if if\n\t% if ${1:condition}:\n\t\t${2:}\n\t% endif\nsnippet if if/else\n\t% if ${1:condition}:\n\t\t${2:}\n\t% else:\n\t\t${3:}\n\t% endif\nsnippet try\n\t% try:\n\t\t${1:}\n\t% except${2:}:\n\t\t${3:pass}\n\t% endtry\nsnippet wh\n\t% while ${1:}:\n\t\t${2:}\n\t% endwhile\nsnippet $\n\t${ ${1:} }\nsnippet <%\n\t<% ${1:} %>\nsnippet <!%\n\t<!% ${1:} %>\nsnippet inherit\n\t<%inherit file=\"${1:filename}\" />\nsnippet include\n\t<%include file=\"${1:filename}\" />\nsnippet namespace\n\t<%namespace file=\"${1:name}\" />\nsnippet page\n\t<%page args=\"${1:}\" />\n"
  },
  {
    "path": "lib/ace/snippets/markdown.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./markdown.snippets\");\nexports.scope = \"markdown\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/markdown.snippets",
    "content": "# Markdown\n\n# Includes octopress (http://octopress.org/) snippets\n\nsnippet [\n\t[${1:text}](http://${2:address} \"${3:title}\")\nsnippet [*\n\t[${1:link}](${2:`@*`} \"${3:title}\")${4}\n\nsnippet [:\n\t[${1:id}]: http://${2:url} \"${3:title}\"\nsnippet [:*\n\t[${1:id}]: ${2:`@*`} \"${3:title}\"\n\nsnippet ![\n\t![${1:alttext}](${2:/images/image.jpg} \"${3:title}\")\nsnippet ![*\n\t![${1:alt}](${2:`@*`} \"${3:title}\")${4}\n\nsnippet ![:\n\t![${1:id}]: ${2:url} \"${3:title}\"\nsnippet ![:*\n\t![${1:id}]: ${2:`@*`} \"${3:title}\"\n\nsnippet ===\nregex /^/=+/=*//\n\t${PREV_LINE/./=/g}\n\t\n\t${0}\nsnippet ---\nregex /^/-+/-*//\n\t${PREV_LINE/./-/g}\n\t\n\t${0}\nsnippet blockquote\n\t{% blockquote %}\n\t${1:quote}\n\t{% endblockquote %}\n\nsnippet blockquote-author\n\t{% blockquote ${1:author}, ${2:title} %}\n\t${3:quote}\n\t{% endblockquote %}\n\nsnippet blockquote-link\n\t{% blockquote ${1:author} ${2:URL} ${3:link_text} %}\n\t${4:quote}\n\t{% endblockquote %}\n\nsnippet bt-codeblock-short\n\t```\n\t${1:code_snippet}\n\t```\n\nsnippet bt-codeblock-full\n\t``` ${1:language} ${2:title} ${3:URL} ${4:link_text}\n\t${5:code_snippet}\n\t```\n\nsnippet codeblock-short\n\t{% codeblock %}\n\t${1:code_snippet}\n\t{% endcodeblock %}\n\nsnippet codeblock-full\n\t{% codeblock ${1:title} lang:${2:language} ${3:URL} ${4:link_text} %}\n\t${5:code_snippet}\n\t{% endcodeblock %}\n\nsnippet gist-full\n\t{% gist ${1:gist_id} ${2:filename} %}\n\nsnippet gist-short\n\t{% gist ${1:gist_id} %}\n\nsnippet img\n\t{% img ${1:class} ${2:URL} ${3:width} ${4:height} ${5:title_text} ${6:alt_text} %}\n\nsnippet youtube\n\t{% youtube ${1:video_id} %}\n\n# The quote should appear only once in the text. It is inherently part of it.\n# See http://octopress.org/docs/plugins/pullquote/ for more info.\n\nsnippet pullquote\n\t{% pullquote %}\n\t${1:text} {\" ${2:quote} \"} ${3:text}\n\t{% endpullquote %}\n"
  },
  {
    "path": "lib/ace/snippets/matlab.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./matlab.snippets\");\nexports.scope = \"matlab\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/matlab.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/maze.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./maze.snippets\");\nexports.scope = \"maze\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/maze.snippets",
    "content": "snippet >\ndescription assignment\nscope maze\n\t-> ${1}= ${2}\n\nsnippet >\ndescription if\nscope maze\n\t-> IF ${2:**} THEN %${3:L} ELSE %${4:R}\n"
  },
  {
    "path": "lib/ace/snippets/mel.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./mel.snippets\");\nexports.scope = \"mel\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/mel.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/mushcode.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./mushcode.snippets\");\nexports.scope = \"mushcode\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/mushcode.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/mushcode_high_rules.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./mushcode_high_rules.snippets\");\nexports.scope = \"mushcode_high_rules\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/mushcode_high_rules.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/mysql.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./mysql.snippets\");\nexports.scope = \"mysql\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/mysql.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/nix.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./nix.snippets\");\nexports.scope = \"nix\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/nix.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/nsis.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./.snippets\");\nexports.scope = \"\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/objc.snippets",
    "content": "# #import <...>\nsnippet Imp\n\t#import <${1:Cocoa/Cocoa.h}>${2}\n# #import \"...\"\nsnippet imp\n\t#import \"${1:`Filename()`.h}\"${2}\n# @selector(...)\nsnippet sel\n\t@selector(${1:method}:)${3}\n# @\"...\" string\nsnippet s\n\t@\"${1}\"${2}\n# Object\nsnippet o\n\t${1:NSObject} *${2:foo} = [${3:$1 alloc}]${4};${5}\n# NSLog(...)\nsnippet log\n\tNSLog(@\"${1:%@}\"${2});${3}\n# Class\nsnippet objc\n\t@interface ${1:`Filename('', 'someClass')`} : ${2:NSObject}\n\t{\n\t}\n\t@end\n\n\t@implementation $1\n\t${3}\n\t@end\n# Class Interface\nsnippet int\n\t@interface ${1:`Filename('', 'someClass')`} : ${2:NSObject}\n\t{${3}\n\t}\n\t${4}\n\t@end\nsnippet @interface\n\t@interface ${1:`Filename('', 'someClass')`} : ${2:NSObject}\n\t{${3}\n\t}\n\t${4}\n\t@end\n# Class Implementation\nsnippet impl\n\t@implementation ${1:`Filename('', 'someClass')`}\n\t${2}\n\t@end\nsnippet @implementation\n\t@implementation ${1:`Filename('', 'someClass')`}\n\t${2}\n\t@end\n# Protocol\nsnippet pro\n\t@protocol ${1:`Filename('$1Delegate', 'MyProtocol')`} ${2:<NSObject>}\n\t${3}\n\t@end\nsnippet @protocol\n\t@protocol ${1:`Filename('$1Delegate', 'MyProtocol')`} ${2:<NSObject>}\n\t${3}\n\t@end\n# init Definition\nsnippet init\n\t- (id)init\n\t{\n\t\tif (self = [super init]) {\n\t\t\t${1}\n\t\t}\n\t\treturn self;\n\t}\n# dealloc Definition\nsnippet dealloc\n\t- (void) dealloc\n\t{\n\t\t${1:deallocations}\n\t\t[super dealloc];\n\t}\nsnippet su\n\t[super ${1:init}]${2}\nsnippet ibo\n\tIBOutlet ${1:NSSomeClass} *${2:$1};${3}\n# Category\nsnippet cat\n\t@interface ${1:NSObject} (${2:MyCategory})\n\t@end\n\n\t@implementation $1 ($2)\n\t${3}\n\t@end\n# Category Interface\nsnippet cath\n\t@interface ${1:`Filename('$1', 'NSObject')`} (${2:MyCategory})\n\t${3}\n\t@end\n# Method\nsnippet m\n\t- (${1:id})${2:method}\n\t{\n\t\t${3}\n\t}\n# Method declaration\nsnippet md\n\t- (${1:id})${2:method};${3}\n# IBAction declaration\nsnippet ibad\n\t- (IBAction)${1:method}:(${2:id})sender;${3}\n# IBAction method\nsnippet iba\n\t- (IBAction)${1:method}:(${2:id})sender\n\t{\n\t\t${3}\n\t}\n# awakeFromNib method\nsnippet wake\n\t- (void)awakeFromNib\n\t{\n\t\t${1}\n\t}\n# Class Method\nsnippet M\n\t+ (${1:id})${2:method}\n\t{\n\t\t${3:return nil;}\n\t}\n# Sub-method (Call super)\nsnippet sm\n\t- (${1:id})${2:method}\n\t{\n\t\t[super $2];${3}\n\t\treturn self;\n\t}\n# Accessor Methods For:\n# Object\nsnippet objacc\n\t- (${1:id})${2:thing}\n\t{\n\t\treturn $2;\n\t}\n\n\t- (void)set$2:($1)${3:new$2}\n\t{\n\t\t[$3 retain];\n\t\t[$2 release];\n\t\t$2 = $3;\n\t}${4}\n# for (object in array)\nsnippet forin\n\tfor (${1:Class} *${2:some$1} in ${3:array}) {\n\t\t${4}\n\t}\nsnippet fore\n\tfor (${1:object} in ${2:array}) {\n\t\t${3:statements}\n\t}\nsnippet forarray\n\tunsigned int ${1:object}Count = [${2:array} count];\n\n\tfor (unsigned int index = 0; index < $1Count; index++) {\n\t\t${3:id} $1 = [$2 $1AtIndex:index];\n\t\t${4}\n\t}\nsnippet fora\n\tunsigned int ${1:object}Count = [${2:array} count];\n\n\tfor (unsigned int index = 0; index < $1Count; index++) {\n\t\t${3:id} $1 = [$2 $1AtIndex:index];\n\t\t${4}\n\t}\n# Try / Catch Block\nsnippet @try\n\t@try {\n\t\t${1:statements}\n\t}\n\t@catch (NSException * e) {\n\t\t${2:handler}\n\t}\n\t@finally {\n\t\t${3:statements}\n\t}\nsnippet @catch\n\t@catch (${1:exception}) {\n\t\t${2:handler}\n\t}\nsnippet @finally\n\t@finally {\n\t\t${1:statements}\n\t}\n# IBOutlet\n# @property (Objective-C 2.0)\nsnippet prop\n\t@property (${1:retain}) ${2:NSSomeClass} ${3:*$2};${4}\n# @synthesize (Objective-C 2.0)\nsnippet syn\n\t@synthesize ${1:property};${2}\n# [[ alloc] init]\nsnippet alloc\n\t[[${1:foo} alloc] init${2}];${3}\nsnippet a\n\t[[${1:foo} alloc] init${2}];${3}\n# retain\nsnippet ret\n\t[${1:foo} retain];${2}\n# release\nsnippet rel\n\t[${1:foo} release];\n# autorelease\nsnippet arel\n\t[${1:foo} autorelease];\n# autorelease pool\nsnippet pool\n\tNSAutoreleasePool *${1:pool} = [[NSAutoreleasePool alloc] init];\n\t${2:/* code */}\n\t[$1 drain];\n# Throw an exception\nsnippet except\n\tNSException *${1:badness};\n\t$1 = [NSException exceptionWithName:@\"${2:$1Name}\"\n\t                             reason:@\"${3}\"\n\t                           userInfo:nil];\n\t[$1 raise];\nsnippet prag\n\t#pragma mark ${1:-}\nsnippet cl\n\t@class ${1:Foo};${2}\nsnippet color\n\t[[NSColor ${1:blackColor}] set];\n# NSArray\nsnippet array\n\tNSMutableArray *${1:array} = [NSMutable array];${2}\nsnippet nsa\n\tNSArray ${1}\nsnippet nsma\n\tNSMutableArray ${1}\nsnippet aa\n\tNSArray * array;${1}\nsnippet ma\n\tNSMutableArray * array;${1}\n# NSDictionary\nsnippet dict\n\tNSMutableDictionary *${1:dict} = [NSMutableDictionary dictionary];${2}\nsnippet nsd\n\tNSDictionary ${1}\nsnippet nsmd\n\tNSMutableDictionary ${1}\n# NSString\nsnippet nss\n\tNSString ${1}\nsnippet nsms\n\tNSMutableString ${1}\n"
  },
  {
    "path": "lib/ace/snippets/objectivec.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./objectivec.snippets\");\nexports.scope = \"objectivec\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/objectivec.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/ocaml.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./ocaml.snippets\");\nexports.scope = \"ocaml\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/ocaml.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/pascal.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./pascal.snippets\");\nexports.scope = \"pascal\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/pascal.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/perl.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./perl.snippets\");\nexports.scope = \"perl\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/perl.snippets",
    "content": "# #!/usr/bin/perl\nsnippet #!\n\t#!/usr/bin/env perl\n\n# Hash Pointer\nsnippet .\n\t =>\n# Function\nsnippet sub\n\tsub ${1:function_name} {\n\t\t${2:#body ...}\n\t}\n# Conditional\nsnippet if\n\tif (${1}) {\n\t\t${2:# body...}\n\t}\n# Conditional if..else\nsnippet ife\n\tif (${1}) {\n\t\t${2:# body...}\n\t}\n\telse {\n\t\t${3:# else...}\n\t}\n# Conditional if..elsif..else\nsnippet ifee\n\tif (${1}) {\n\t\t${2:# body...}\n\t}\n\telsif (${3}) {\n\t\t${4:# elsif...}\n\t}\n\telse {\n\t\t${5:# else...}\n\t}\n# Conditional One-line\nsnippet xif\n\t${1:expression} if ${2:condition};${3}\n# Unless conditional\nsnippet unless\n\tunless (${1}) {\n\t\t${2:# body...}\n\t}\n# Unless conditional One-line\nsnippet xunless\n\t${1:expression} unless ${2:condition};${3}\n# Try/Except\nsnippet eval\n\tlocal $@;\n\teval {\n\t\t${1:# do something risky...}\n\t};\n\tif (my $e = $@) {\n\t\t${2:# handle failure...}\n\t}\n# While Loop\nsnippet wh\n\twhile (${1}) {\n\t\t${2:# body...}\n\t}\n# While Loop One-line\nsnippet xwh\n\t${1:expression} while ${2:condition};${3}\n# C-style For Loop\nsnippet cfor\n\tfor (my $${2:var} = 0; $$2 < ${1:count}; $$2${3:++}) {\n\t\t${4:# body...}\n\t}\n# For loop one-line\nsnippet xfor\n\t${1:expression} for @${2:array};${3}\n# Foreach Loop\nsnippet for\n\tforeach my $${1:x} (@${2:array}) {\n\t\t${3:# body...}\n\t}\n# Foreach Loop One-line\nsnippet fore\n\t${1:expression} foreach @${2:array};${3}\n# Package\nsnippet package\n\tpackage ${1:`substitute(Filename('', 'Page Title'), '^.', '\\u&', '')`};\n\n\t${2}\n\n\t1;\n\n\t__END__\n# Package syntax perl >= 5.14\nsnippet packagev514\n\tpackage ${1:`substitute(Filename('', 'Page Title'), '^.', '\\u&', '')`} ${2:0.99};\n\n\t${3}\n\n\t1;\n\n\t__END__\n#moose\nsnippet moose\n\tuse Moose;\n\tuse namespace::autoclean;\n\t${1:#}BEGIN {extends '${2:ParentClass}'};\n\n\t${3}\n# parent\nsnippet parent\n\tuse parent qw(${1:Parent Class});\n# Read File\nsnippet slurp\n\tmy $${1:var} = do { local $/; open my $file, '<', \"${2:file}\"; <$file> };\n\t${3}\n# strict warnings\nsnippet strwar\n\tuse strict;\n\tuse warnings;\n# older versioning with perlcritic bypass\nsnippet vers\n\t## no critic\n\tour $VERSION = '${1:version}';\n\teval $VERSION;\n\t## use critic\n# new 'switch' like feature\nsnippet switch\n\tuse feature 'switch';\n\n# Anonymous subroutine\nsnippet asub\n\tsub {\n\t \t${1:# body }\n\t}\n\n\n\n# Begin block\nsnippet begin\n\tBEGIN {\n\t\t${1:# begin body}\n\t}\n\n# call package function with some parameter\nsnippet pkgmv\n\t__PACKAGE__->${1:package_method}(${2:var})\n\n# call package function without a parameter\nsnippet pkgm\n\t__PACKAGE__->${1:package_method}()\n\n# call package \"get_\" function without a parameter\nsnippet pkget\n\t__PACKAGE__->get_${1:package_method}()\n\n# call package function with a parameter\nsnippet pkgetv\n\t__PACKAGE__->get_${1:package_method}(${2:var})\n\n# complex regex\nsnippet qrx\n\tqr/\n\t     ${1:regex}\n\t/xms\n\n#simpler regex\nsnippet qr/\n\tqr/${1:regex}/x\n\n#given\nsnippet given\n\tgiven ($${1:var}) {\n\t\t${2:# cases}\n\t\t${3:# default}\n\t}\n\n# switch-like case\nsnippet when\n\twhen (${1:case}) {\n\t\t${2:# body}\n\t}\n\n# hash slice\nsnippet hslice\n\t@{ ${1:hash}  }{ ${2:array} }\n\n\n# map\nsnippet map\n\tmap {  ${2: body }    }  ${1: @array } ;\n\n\n\n# Pod stub\nsnippet ppod\n\t=head1 NAME\n\n\t${1:ClassName} - ${2:ShortDesc}\n\n\t=head1 SYNOPSIS\n\n\t  use $1;\n\n\t  ${3:# synopsis...}\n\n\t=head1 DESCRIPTION\n\n\t${4:# longer description...}\n\n\n\t=head1 INTERFACE\n\n\n\t=head1 DEPENDENCIES\n\n\n\t=head1 SEE ALSO\n\n\n# Heading for a subroutine stub\nsnippet psub\n\t=head2 ${1:MethodName}\n\n\t${2:Summary....}\n\n# Heading for inline subroutine pod\nsnippet psubi\n\t=head2 ${1:MethodName}\n\n\t${2:Summary...}\n\n\n\t=cut\n# inline documented subroutine\nsnippet subpod\n\t=head2 $1\n\n\tSummary of $1\n\n\t=cut\n\n\tsub ${1:subroutine_name} {\n\t\t${2:# body...}\n\t}\n# Subroutine signature\nsnippet parg\n\t=over 2\n\n\t=item\n\tArguments\n\n\n\t=over 3\n\n\t=item\n\tC<${1:DataStructure}>\n\n\t  ${2:Sample}\n\n\n\t=back\n\n\n\t=item\n\tReturn\n\n\t=over 3\n\n\n\t=item\n\tC<${3:...return data}>\n\n\n\t=back\n\n\n\t=back\n\n\n\n# Moose has\nsnippet has\n\thas ${1:attribute} => (\n\t\tis\t    => '${2:ro|rw}',\n\t\tisa \t=> '${3:Str|Int|HashRef|ArrayRef|etc}',\n\t\tdefault => sub {\n\t\t\t${4:defaultvalue}\n\t\t},\n\t\t${5:# other attributes}\n\t);\n\n\n# override\nsnippet override\n\toverride ${1:attribute} => sub {\n\t\t${2:# my $self = shift;};\n\t\t${3:# my ($self, $args) = @_;};\n\t};\n\n\n# use test classes\nsnippet tuse\n\tuse Test::More;\n\tuse Test::Deep; # (); # uncomment to stop prototype errors\n\tuse Test::Exception;\n\n# local test lib\nsnippet tlib\n\tuse lib qw{ ./t/lib };\n\n#test methods\nsnippet tmeths\n\t$ENV{TEST_METHOD} = '${1:regex}';\n\n# runtestclass\nsnippet trunner\n\tuse ${1:test_class};\n\t$1->runtests();\n\n# Test::Class-style test\nsnippet tsub\n\tsub t${1:number}_${2:test_case} :Test(${3:num_of_tests}) {\n\t\tmy $self = shift;\n\t\t${4:#  body}\n\n\t}\n\n# Test::Routine-style test\nsnippet trsub\n\ttest ${1:test_name} => { description => '${2:Description of test.}'} => sub {\n\t\tmy ($self) = @_;\n\t\t${3:# test code}\n\t};\n\n#prep test method\nsnippet tprep\n\tsub prep${1:number}_${2:test_case} :Test(startup) {\n\t\tmy $self = shift;\n\t\t${4:#  body}\n\t}\n\n# cause failures to print stack trace\nsnippet debug_trace\n\tuse Carp; # 'verbose';\n\t# cloak \"die\"\n\t# warn \"warning\"\n\t$SIG{'__DIE__'} = sub {\n\t\trequire Carp; Carp::confess\n\t};\n\n"
  },
  {
    "path": "lib/ace/snippets/pgsql.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./pgsql.snippets\");\nexports.scope = \"pgsql\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/pgsql.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/php.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./php.snippets\");\nexports.scope = \"php\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/php.snippets",
    "content": "snippet <?\n\t<?php\n\n\t${1}\nsnippet ec\n\techo ${1};\nsnippet <?e\n\t<?php echo ${1} ?>\n# this one is for php5.4\nsnippet <?=\n\t<?=${1}?>\nsnippet ns\n\tnamespace ${1:Foo\\Bar\\Baz};\n\t${2}\nsnippet use\n\tuse ${1:Foo\\Bar\\Baz};\n\t${2}\nsnippet c\n\t${1:abstract }class ${2:$FILENAME}\n\t{\n\t\t${3}\n\t}\nsnippet i\n\tinterface ${1:$FILENAME}\n\t{\n\t\t${2}\n\t}\nsnippet t.\n\t$this->${1}\nsnippet f\n\tfunction ${1:foo}(${2:array }${3:$bar})\n\t{\n\t\t${4}\n\t}\n# method\nsnippet m\n\t${1:abstract }${2:protected}${3: static} function ${4:foo}(${5:array }${6:$bar})\n\t{\n\t\t${7}\n\t}\n# setter method\nsnippet sm \n\t/**\n\t * Sets the value of ${1:foo}\n\t *\n\t * @param ${2:$1} $$1 ${3:description}\n\t *\n\t * @return ${4:$FILENAME}\n\t */\n\t${5:public} function set${6:$2}(${7:$2 }$$1)\n\t{\n\t\t$this->${8:$1} = $$1;\n\t\treturn $this;\n\t}${9}\n# getter method\nsnippet gm\n\t/**\n\t * Gets the value of ${1:foo}\n\t *\n\t * @return ${2:$1}\n\t */\n\t${3:public} function get${4:$2}()\n\t{\n\t\treturn $this->${5:$1};\n\t}${6}\n#setter\nsnippet $s\n\t${1:$foo}->set${2:Bar}(${3});\n#getter\nsnippet $g\n\t${1:$foo}->get${2:Bar}();\n\n# Tertiary conditional\nsnippet =?:\n\t$${1:foo} = ${2:true} ? ${3:a} : ${4};\nsnippet ?:\n\t${1:true} ? ${2:a} : ${3}\n\nsnippet C\n\t$_COOKIE['${1:variable}']${2}\nsnippet E\n\t$_ENV['${1:variable}']${2}\nsnippet F\n\t$_FILES['${1:variable}']${2}\nsnippet G\n\t$_GET['${1:variable}']${2}\nsnippet P\n\t$_POST['${1:variable}']${2}\nsnippet R\n\t$_REQUEST['${1:variable}']${2}\nsnippet S\n\t$_SERVER['${1:variable}']${2}\nsnippet SS\n\t$_SESSION['${1:variable}']${2}\n\t\n# the following are old ones\nsnippet inc\n\tinclude '${1:file}';${2}\nsnippet inc1\n\tinclude_once '${1:file}';${2}\nsnippet req\n\trequire '${1:file}';${2}\nsnippet req1\n\trequire_once '${1:file}';${2}\n# Start Docblock\nsnippet /*\n\t/**\n\t * ${1}\n\t */\n# Class - post doc\nsnippet doc_cp\n\t/**\n\t * ${1:undocumented class}\n\t *\n\t * @package ${2:default}\n\t * @subpackage ${3:default}\n\t * @author ${4:`g:snips_author`}\n\t */${5}\n# Class Variable - post doc\nsnippet doc_vp\n\t/**\n\t * ${1:undocumented class variable}\n\t *\n\t * @var ${2:string}\n\t */${3}\n# Class Variable\nsnippet doc_v\n\t/**\n\t * ${3:undocumented class variable}\n\t *\n\t * @var ${4:string}\n\t */\n\t${1:var} $${2};${5}\n# Class\nsnippet doc_c\n\t/**\n\t * ${3:undocumented class}\n\t *\n\t * @package ${4:default}\n\t * @subpackage ${5:default}\n\t * @author ${6:`g:snips_author`}\n\t */\n\t${1:}class ${2:}\n\t{\n\t\t${7}\n\t} // END $1class $2\n# Constant Definition - post doc\nsnippet doc_dp\n\t/**\n\t * ${1:undocumented constant}\n\t */${2}\n# Constant Definition\nsnippet doc_d\n\t/**\n\t * ${3:undocumented constant}\n\t */\n\tdefine(${1}, ${2});${4}\n# Function - post doc\nsnippet doc_fp\n\t/**\n\t * ${1:undocumented function}\n\t *\n\t * @return ${2:void}\n\t * @author ${3:`g:snips_author`}\n\t */${4}\n# Function signature\nsnippet doc_s\n\t/**\n\t * ${4:undocumented function}\n\t *\n\t * @return ${5:void}\n\t * @author ${6:`g:snips_author`}\n\t */\n\t${1}function ${2}(${3});${7}\n# Function\nsnippet doc_f\n\t/**\n\t * ${4:undocumented function}\n\t *\n\t * @return ${5:void}\n\t * @author ${6:`g:snips_author`}\n\t */\n\t${1}function ${2}(${3})\n\t{${7}\n\t}\n# Header\nsnippet doc_h\n\t/**\n\t * ${1}\n\t *\n\t * @author ${2:`g:snips_author`}\n\t * @version ${3:$Id$}\n\t * @copyright ${4:$2}, `strftime('%d %B, %Y')`\n\t * @package ${5:default}\n\t */\n\t\n# Interface\nsnippet interface\n\t/**\n\t * ${2:undocumented class}\n\t *\n\t * @package ${3:default}\n\t * @author ${4:`g:snips_author`}\n\t */\n\tinterface ${1:$FILENAME}\n\t{\n\t\t${5}\n\t}\n# class ...\nsnippet class\n\t/**\n\t * ${1}\n\t */\n\tclass ${2:$FILENAME}\n\t{\n\t\t${3}\n\t\t/**\n\t\t * ${4}\n\t\t */\n\t\t${5:public} function ${6:__construct}(${7:argument})\n\t\t{\n\t\t\t${8:// code...}\n\t\t}\n\t}\n# define(...)\nsnippet def\n\tdefine('${1}'${2});${3}\n# defined(...)\nsnippet def?\n\t${1}defined('${2}')${3}\nsnippet wh\n\twhile (${1:/* condition */}) {\n\t\t${2:// code...}\n\t}\n# do ... while\nsnippet do\n\tdo {\n\t\t${2:// code... }\n\t} while (${1:/* condition */});\nsnippet if\n\tif (${1:/* condition */}) {\n\t\t${2:// code...}\n\t}\nsnippet ifil\n\t<?php if (${1:/* condition */}): ?>\n\t\t${2:<!-- code... -->}\n\t<?php endif; ?>\nsnippet ife\n\tif (${1:/* condition */}) {\n\t\t${2:// code...}\n\t} else {\n\t\t${3:// code...}\n\t}\n\t${4}\nsnippet ifeil\n\t<?php if (${1:/* condition */}): ?>\n\t\t${2:<!-- html... -->}\n\t<?php else: ?>\n\t\t${3:<!-- html... -->}\n\t<?php endif; ?>\n\t${4}\nsnippet else\n\telse {\n\t\t${1:// code...}\n\t}\nsnippet elseif\n\telseif (${1:/* condition */}) {\n\t\t${2:// code...}\n\t}\nsnippet switch\n\tswitch ($${1:variable}) {\n\t\tcase '${2:value}':\n\t\t\t${3:// code...}\n\t\t\tbreak;\n\t\t${5}\n\t\tdefault:\n\t\t\t${4:// code...}\n\t\t\tbreak;\n\t}\nsnippet case\n\tcase '${1:value}':\n\t\t${2:// code...}\n\t\tbreak;${3}\nsnippet for\n\tfor ($${2:i} = 0; $$2 < ${1:count}; $$2${3:++}) {\n\t\t${4: // code...}\n\t}\nsnippet foreach\n\tforeach ($${1:variable} as $${2:value}) {\n\t\t${3:// code...}\n\t}\nsnippet foreachil\n\t<?php foreach ($${1:variable} as $${2:value}): ?>\n\t\t${3:<!-- html... -->}\n\t<?php endforeach; ?>\nsnippet foreachk\n\tforeach ($${1:variable} as $${2:key} => $${3:value}) {\n\t\t${4:// code...}\n\t}\nsnippet foreachkil\n\t<?php foreach ($${1:variable} as $${2:key} => $${3:value}): ?>\n\t\t${4:<!-- html... -->}\n\t<?php endforeach; ?>\n# $... = array (...)\nsnippet array\n\t$${1:arrayName} = array('${2}' => ${3});${4}\nsnippet try\n\ttry {\n\t\t${2}\n\t} catch (${1:Exception} $e) {\n\t}\n# lambda with closure\nsnippet lambda\n\t${1:static }function (${2:args}) use (${3:&$x, $y /*put vars in scope (closure) */}) {\n\t\t${4}\n\t};\n# pre_dump();\nsnippet pd\n\techo '<pre>'; var_dump(${1}); echo '</pre>';\n# pre_dump(); die();\nsnippet pdd\n\techo '<pre>'; var_dump(${1}); echo '</pre>'; die(${2:});\nsnippet vd\n\tvar_dump(${1});\nsnippet vdd\n\tvar_dump(${1}); die(${2:});\nsnippet http_redirect\n\theader (\"HTTP/1.1 301 Moved Permanently\"); \n\theader (\"Location: \".URL); \n\texit();\n# Getters & Setters\nsnippet gs\n\t/**\n\t * Gets the value of ${1:foo}\n\t *\n\t * @return ${2:$1}\n\t */\n\tpublic function get${3:$2}()\n\t{\n\t\treturn $this->${4:$1};\n\t}\n\n\t/**\n\t * Sets the value of $1\n\t *\n\t * @param $2 $$1 ${5:description}\n\t *\n\t * @return ${6:$FILENAME}\n\t */\n\tpublic function set$3(${7:$2 }$$1)\n\t{\n\t\t$this->$4 = $$1;\n\t\treturn $this;\n\t}${8}\n# anotation, get, and set, useful for doctrine\nsnippet ags\n\t/**\n\t * ${1:description}\n\t * \n\t * @${7}\n\t */\n\t${2:protected} $${3:foo};\n\n\tpublic function get${4:$3}()\n\t{\n\t\treturn $this->$3;\n\t}\n\n\tpublic function set$4(${5:$4 }$${6:$3})\n\t{\n\t\t$this->$3 = $$6;\n\t\treturn $this;\n\t}\nsnippet rett\n\treturn true;\nsnippet retf\n\treturn false;\n"
  },
  {
    "path": "lib/ace/snippets/plain_text.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./plain_text.snippets\");\nexports.scope = \"plain_text\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/plain_text.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/powershell.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./powershell.snippets\");\nexports.scope = \"powershell\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/powershell.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/praat.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./praat.snippets\");\nexports.scope = \"praat\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/praat.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/prolog.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./prolog.snippets\");\nexports.scope = \"prolog\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/prolog.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/properties.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./properties.snippets\");\nexports.scope = \"properties\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/properties.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/protobuf.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"\";\nexports.scope = \"protobuf\";\n\n});"
  },
  {
    "path": "lib/ace/snippets/protobuf.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/python.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./python.snippets\");\nexports.scope = \"python\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/python.snippets",
    "content": "snippet #!\n\t#!/usr/bin/env python\nsnippet imp\n\timport ${1:module}\nsnippet from\n\tfrom ${1:package} import ${2:module}\n# Module Docstring\nsnippet docs\n\t'''\n\tFile: ${1:FILENAME:file_name}\n\tAuthor: ${2:author}\n\tDescription: ${3}\n\t'''\nsnippet wh\n\twhile ${1:condition}:\n\t\t${2:# TODO: write code...}\n# dowh - does the same as do...while in other languages\nsnippet dowh\n\twhile True:\n\t\t${1:# TODO: write code...}\n\t\tif ${2:condition}:\n\t\t\tbreak\nsnippet with\n\twith ${1:expr} as ${2:var}:\n\t\t${3:# TODO: write code...}\n# New Class\nsnippet cl\n\tclass ${1:ClassName}(${2:object}):\n\t\t\"\"\"${3:docstring for $1}\"\"\"\n\t\tdef __init__(self, ${4:arg}):\n\t\t\t${5:super($1, self).__init__()}\n\t\t\tself.$4 = $4\n\t\t\t${6}\n# New Function\nsnippet def\n\tdef ${1:fname}(${2:`indent('.') ? 'self' : ''`}):\n\t\t\"\"\"${3:docstring for $1}\"\"\"\n\t\t${4:# TODO: write code...}\nsnippet deff\n\tdef ${1:fname}(${2:`indent('.') ? 'self' : ''`}):\n\t\t${3:# TODO: write code...}\n# New Method\nsnippet defs\n\tdef ${1:mname}(self, ${2:arg}):\n\t\t${3:# TODO: write code...}\n# New Property\nsnippet property\n\tdef ${1:foo}():\n\t\tdoc = \"${2:The $1 property.}\"\n\t\tdef fget(self):\n\t\t\t${3:return self._$1}\n\t\tdef fset(self, value):\n\t\t\t${4:self._$1 = value}\n# Ifs\nsnippet if\n\tif ${1:condition}:\n\t\t${2:# TODO: write code...}\nsnippet el\n\telse:\n\t\t${1:# TODO: write code...}\nsnippet ei\n\telif ${1:condition}:\n\t\t${2:# TODO: write code...}\n# For\nsnippet for\n\tfor ${1:item} in ${2:items}:\n\t\t${3:# TODO: write code...}\n# Encodes\nsnippet cutf8\n\t# -*- coding: utf-8 -*-\nsnippet clatin1\n\t# -*- coding: latin-1 -*-\nsnippet cascii\n\t# -*- coding: ascii -*-\n# Lambda\nsnippet ld\n\t${1:var} = lambda ${2:vars} : ${3:action}\nsnippet .\n\tself.\nsnippet try Try/Except\n\ttry:\n\t\t${1:# TODO: write code...}\n\texcept ${2:Exception}, ${3:e}:\n\t\t${4:raise $3}\nsnippet try Try/Except/Else\n\ttry:\n\t\t${1:# TODO: write code...}\n\texcept ${2:Exception}, ${3:e}:\n\t\t${4:raise $3}\n\telse:\n\t\t${5:# TODO: write code...}\nsnippet try Try/Except/Finally\n\ttry:\n\t\t${1:# TODO: write code...}\n\texcept ${2:Exception}, ${3:e}:\n\t\t${4:raise $3}\n\tfinally:\n\t\t${5:# TODO: write code...}\nsnippet try Try/Except/Else/Finally\n\ttry:\n\t\t${1:# TODO: write code...}\n\texcept ${2:Exception}, ${3:e}:\n\t\t${4:raise $3}\n\telse:\n\t\t${5:# TODO: write code...}\n\tfinally:\n\t\t${6:# TODO: write code...}\n# if __name__ == '__main__':\nsnippet ifmain\n\tif __name__ == '__main__':\n\t\t${1:main()}\n# __magic__\nsnippet _\n\t__${1:init}__${2}\n# python debugger (pdb)\nsnippet pdb\n\timport pdb; pdb.set_trace()\n# ipython debugger (ipdb)\nsnippet ipdb\n\timport ipdb; ipdb.set_trace()\n# ipython debugger (pdbbb)\nsnippet pdbbb\n\timport pdbpp; pdbpp.set_trace()\nsnippet pprint\n\timport pprint; pprint.pprint(${1})${2}\nsnippet \"\n\t\"\"\"\n\t${1:doc}\n\t\"\"\"\n# test function/method\nsnippet test\n\tdef test_${1:description}(${2:self}):\n\t\t${3:# TODO: write code...}\n# test case\nsnippet testcase\n\tclass ${1:ExampleCase}(unittest.TestCase):\n\t\t\n\t\tdef test_${2:description}(self):\n\t\t\t${3:# TODO: write code...}\nsnippet fut\n\tfrom __future__ import ${1}\n#getopt\nsnippet getopt\n\ttry:\n\t\t# Short option syntax: \"hv:\"\n\t\t# Long option syntax: \"help\" or \"verbose=\"\n\t\topts, args = getopt.getopt(sys.argv[1:], \"${1:short_options}\", [${2:long_options}])\n\t\n\texcept getopt.GetoptError, err:\n\t\t# Print debug info\n\t\tprint str(err)\n\t\t${3:error_action}\n\n\tfor option, argument in opts:\n\t\tif option in (\"-h\", \"--help\"):\n\t\t\t${4}\n\t\telif option in (\"-v\", \"--verbose\"):\n\t\t\tverbose = argument\n"
  },
  {
    "path": "lib/ace/snippets/r.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./r.snippets\");\nexports.scope = \"r\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/r.snippets",
    "content": "snippet #!\n\t#!/usr/bin/env Rscript\n\n# includes\nsnippet lib\n\tlibrary(${1:package})\nsnippet req\n\trequire(${1:package})\nsnippet source\n\tsource('${1:file}')\n\n# conditionals\nsnippet if\n\tif (${1:condition}) {\n\t\t${2:code}\n\t}\nsnippet el\n\telse {\n\t\t${1:code}\n\t}\nsnippet ei\n\telse if (${1:condition}) {\n\t\t${2:code}\n\t}\n\n# functions\nsnippet fun\n\t${1:name} = function (${2:variables}) {\n\t\t${3:code}\n\t}\nsnippet ret\n\treturn(${1:code})\n\n# dataframes, lists, etc\nsnippet df\n\t${1:name}[${2:rows}, ${3:cols}]\nsnippet c\n\tc(${1:items})\nsnippet li\n\tlist(${1:items})\nsnippet mat\n\tmatrix(${1:data}, nrow=${2:rows}, ncol=${3:cols})\n\n# apply functions\nsnippet apply\n\tapply(${1:array}, ${2:margin}, ${3:function})\nsnippet lapply\n\tlapply(${1:list}, ${2:function})\nsnippet sapply\n\tsapply(${1:list}, ${2:function})\nsnippet vapply\n\tvapply(${1:list}, ${2:function}, ${3:type})\nsnippet mapply\n\tmapply(${1:function}, ${2:...})\nsnippet tapply\n\ttapply(${1:vector}, ${2:index}, ${3:function})\nsnippet rapply\n\trapply(${1:list}, ${2:function})\n\n# plyr functions\nsnippet dd\n\tddply(${1:frame}, ${2:variables}, ${3:function})\nsnippet dl\n\tdlply(${1:frame}, ${2:variables}, ${3:function})\nsnippet da\n\tdaply(${1:frame}, ${2:variables}, ${3:function})\nsnippet d_\n\td_ply(${1:frame}, ${2:variables}, ${3:function})\n\nsnippet ad\n\tadply(${1:array}, ${2:margin}, ${3:function})\nsnippet al\n\talply(${1:array}, ${2:margin}, ${3:function})\nsnippet aa\n\taaply(${1:array}, ${2:margin}, ${3:function})\nsnippet a_\n\ta_ply(${1:array}, ${2:margin}, ${3:function})\n\nsnippet ld\n\tldply(${1:list}, ${2:function})\nsnippet ll\n\tllply(${1:list}, ${2:function})\nsnippet la\n\tlaply(${1:list}, ${2:function})\nsnippet l_\n\tl_ply(${1:list}, ${2:function})\n\nsnippet md\n\tmdply(${1:matrix}, ${2:function})\nsnippet ml\n\tmlply(${1:matrix}, ${2:function})\nsnippet ma\n\tmaply(${1:matrix}, ${2:function})\nsnippet m_\n\tm_ply(${1:matrix}, ${2:function})\n\n# plot functions\nsnippet pl\n\tplot(${1:x}, ${2:y})\nsnippet ggp\n\tggplot(${1:data}, aes(${2:aesthetics}))\nsnippet img\n\t${1:(jpeg,bmp,png,tiff)}(filename=\"${2:filename}\", width=${3}, height=${4}, unit=\"${5}\")\n\t${6:plot}\n\tdev.off()\n\n# statistical test functions\nsnippet fis\n\tfisher.test(${1:x}, ${2:y})\nsnippet chi\n\tchisq.test(${1:x}, ${2:y})\nsnippet tt\n\tt.test(${1:x}, ${2:y})\nsnippet wil\n\twilcox.test(${1:x}, ${2:y})\nsnippet cor\n\tcor.test(${1:x}, ${2:y})\nsnippet fte\n\tvar.test(${1:x}, ${2:y})\nsnippet kvt \n\tkv.test(${1:x}, ${2:y})\n"
  },
  {
    "path": "lib/ace/snippets/razor.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./razor.snippets\");\nexports.scope = \"razor\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/razor.snippets",
    "content": "snippet if\n(${1} == ${2}) {\n\t${3}\n}"
  },
  {
    "path": "lib/ace/snippets/rdoc.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./rdoc.snippets\");\nexports.scope = \"rdoc\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/rdoc.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/red.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./red.snippets\");\nexports.scope = \"red\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/red.snippets",
    "content": " "
  },
  {
    "path": "lib/ace/snippets/rhtml.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./rhtml.snippets\");\nexports.scope = \"rhtml\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/rhtml.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/rst.snippets",
    "content": "# rst\n\nsnippet :\n\t:${1:field name}: ${2:field body}\nsnippet *\n\t*${1:Emphasis}*\nsnippet **\n\t**${1:Strong emphasis}**\nsnippet _\n\t\\`${1:hyperlink-name}\\`_\n\t.. _\\`$1\\`: ${2:link-block}\nsnippet =\n\t${1:Title}\n\t=====${2:=}\n\t${3}\nsnippet -\n\t${1:Title}\n\t-----${2:-}\n\t${3}\nsnippet cont:\n\t.. contents::\n\t\n"
  },
  {
    "path": "lib/ace/snippets/ruby.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./ruby.snippets\");\nexports.scope = \"ruby\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/ruby.snippets",
    "content": "########################################\n# Ruby snippets - for Rails, see below #\n########################################\n\n# encoding for Ruby 1.9\nsnippet enc\n\t# encoding: utf-8\n\n# #!/usr/bin/env ruby\nsnippet #!\n\t#!/usr/bin/env ruby\n\t# encoding: utf-8\n\n# New Block\nsnippet =b\n\t=begin rdoc\n\t\t${1}\n\t=end\nsnippet y\n\t:yields: ${1:arguments}\nsnippet rb\n\t#!/usr/bin/env ruby -wKU\nsnippet beg\n\tbegin\n\t\t${3}\n\trescue ${1:Exception} => ${2:e}\n\tend\n\nsnippet req require\n\trequire \"${1}\"${2}\nsnippet #\n\t# =>\nsnippet end\n\t__END__\nsnippet case\n\tcase ${1:object}\n\twhen ${2:condition}\n\t\t${3}\n\tend\nsnippet when\n\twhen ${1:condition}\n\t\t${2}\nsnippet def\n\tdef ${1:method_name}\n\t\t${2}\n\tend\nsnippet deft\n\tdef test_${1:case_name}\n\t\t${2}\n\tend\nsnippet if\n\tif ${1:condition}\n\t\t${2}\n\tend\nsnippet ife\n\tif ${1:condition}\n\t\t${2}\n\telse\n\t\t${3}\n\tend\nsnippet elsif\n\telsif ${1:condition}\n\t\t${2}\nsnippet unless\n\tunless ${1:condition}\n\t\t${2}\n\tend\nsnippet while\n\twhile ${1:condition}\n\t\t${2}\n\tend\nsnippet for\n\tfor ${1:e} in ${2:c}\n\t\t${3}\n\tend\nsnippet until\n\tuntil ${1:condition}\n\t\t${2}\n\tend\nsnippet cla class .. end\n\tclass ${1:`substitute(Filename(), '\\(_\\|^\\)\\(.\\)', '\\u\\2', 'g')`}\n\t\t${2}\n\tend\nsnippet cla class .. initialize .. end\n\tclass ${1:`substitute(Filename(), '\\(_\\|^\\)\\(.\\)', '\\u\\2', 'g')`}\n\t\tdef initialize(${2:args})\n\t\t\t${3}\n\t\tend\n\tend\nsnippet cla class .. < ParentClass .. initialize .. end\n\tclass ${1:`substitute(Filename(), '\\(_\\|^\\)\\(.\\)', '\\u\\2', 'g')`} < ${2:ParentClass}\n\t\tdef initialize(${3:args})\n\t\t\t${4}\n\t\tend\n\tend\nsnippet cla ClassName = Struct .. do .. end\n\t${1:`substitute(Filename(), '\\(_\\|^\\)\\(.\\)', '\\u\\2', 'g')`} = Struct.new(:${2:attr_names}) do\n\t\tdef ${3:method_name}\n\t\t\t${4}\n\t\tend\n\tend\nsnippet cla class BlankSlate .. initialize .. end\n\tclass ${1:BlankSlate}\n\t\tinstance_methods.each { |meth| undef_method(meth) unless meth =~ /\\A__/ }\n\tend\nsnippet cla class << self .. end\n\tclass << ${1:self}\n\t\t${2}\n\tend\n# class .. < DelegateClass .. initialize .. end\nsnippet cla-\n\tclass ${1:`substitute(Filename(), '\\(_\\|^\\)\\(.\\)', '\\u\\2', 'g')`} < DelegateClass(${2:ParentClass})\n\t\tdef initialize(${3:args})\n\t\t\tsuper(${4:del_obj})\n\n\t\t\t${5}\n\t\tend\n\tend\nsnippet mod module .. end\n\tmodule ${1:`substitute(Filename(), '\\(_\\|^\\)\\(.\\)', '\\u\\2', 'g')`}\n\t\t${2}\n\tend\nsnippet mod module .. module_function .. end\n\tmodule ${1:`substitute(Filename(), '\\(_\\|^\\)\\(.\\)', '\\u\\2', 'g')`}\n\t\tmodule_function\n\n\t\t${2}\n\tend\nsnippet mod module .. ClassMethods .. end\n\tmodule ${1:`substitute(Filename(), '\\(_\\|^\\)\\(.\\)', '\\u\\2', 'g')`}\n\t\tmodule ClassMethods\n\t\t\t${2}\n\t\tend\n\n\t\tmodule InstanceMethods\n\n\t\tend\n\n\t\tdef self.included(receiver)\n\t\t\treceiver.extend         ClassMethods\n\t\t\treceiver.send :include, InstanceMethods\n\t\tend\n\tend\n# attr_reader\nsnippet r\n\tattr_reader :${1:attr_names}\n# attr_writer\nsnippet w\n\tattr_writer :${1:attr_names}\n# attr_accessor\nsnippet rw\n\tattr_accessor :${1:attr_names}\nsnippet atp\n\tattr_protected :${1:attr_names}\nsnippet ata\n\tattr_accessible :${1:attr_names}\n# include Enumerable\nsnippet Enum\n\tinclude Enumerable\n\n\tdef each(&block)\n\t\t${1}\n\tend\n# include Comparable\nsnippet Comp\n\tinclude Comparable\n\n\tdef <=>(other)\n\t\t${1}\n\tend\n# extend Forwardable\nsnippet Forw-\n\textend Forwardable\n# def self\nsnippet defs\n\tdef self.${1:class_method_name}\n\t\t${2}\n\tend\n# def method_missing\nsnippet defmm\n\tdef method_missing(meth, *args, &blk)\n\t\t${1}\n\tend\nsnippet defd\n\tdef_delegator :${1:@del_obj}, :${2:del_meth}, :${3:new_name}\nsnippet defds\n\tdef_delegators :${1:@del_obj}, :${2:del_methods}\nsnippet am\n\talias_method :${1:new_name}, :${2:old_name}\nsnippet app\n\tif __FILE__ == $PROGRAM_NAME\n\t\t${1}\n\tend\n# usage_if()\nsnippet usai\n\tif ARGV.${1}\n\t\tabort \"Usage: #{$PROGRAM_NAME} ${2:ARGS_GO_HERE}\"${3}\n\tend\n# usage_unless()\nsnippet usau\n\tunless ARGV.${1}\n\t\tabort \"Usage: #{$PROGRAM_NAME} ${2:ARGS_GO_HERE}\"${3}\n\tend\nsnippet array\n\tArray.new(${1:10}) { |${2:i}| ${3} }\nsnippet hash\n\tHash.new { |${1:hash}, ${2:key}| $1[$2] = ${3} }\nsnippet file File.foreach() { |line| .. }\n\tFile.foreach(${1:\"path/to/file\"}) { |${2:line}| ${3} }\nsnippet file File.read()\n\tFile.read(${1:\"path/to/file\"})${2}\nsnippet Dir Dir.global() { |file| .. }\n\tDir.glob(${1:\"dir/glob/*\"}) { |${2:file}| ${3} }\nsnippet Dir Dir[\"..\"]\n\tDir[${1:\"glob/**/*.rb\"}]${2}\nsnippet dir\n\tFilename.dirname(__FILE__)\nsnippet deli\n\tdelete_if { |${1:e}| ${2} }\nsnippet fil\n\tfill(${1:range}) { |${2:i}| ${3} }\n# flatten_once()\nsnippet flao\n\tinject(Array.new) { |${1:arr}, ${2:a}| $1.push(*$2)}${3}\nsnippet zip\n\tzip(${1:enums}) { |${2:row}| ${3} }\n# downto(0) { |n| .. }\nsnippet dow\n\tdownto(${1:0}) { |${2:n}| ${3} }\nsnippet ste\n\tstep(${1:2}) { |${2:n}| ${3} }\nsnippet tim\n\ttimes { |${1:n}| ${2} }\nsnippet upt\n\tupto(${1:1.0/0.0}) { |${2:n}| ${3} }\nsnippet loo\n\tloop { ${1} }\nsnippet ea\n\teach { |${1:e}| ${2} }\nsnippet ead\n\teach do |${1:e}|\n\t\t${2}\n\tend\nsnippet eab\n\teach_byte { |${1:byte}| ${2} }\nsnippet eac- each_char { |chr| .. }\n\teach_char { |${1:chr}| ${2} }\nsnippet eac- each_cons(..) { |group| .. }\n\teach_cons(${1:2}) { |${2:group}| ${3} }\nsnippet eai\n\teach_index { |${1:i}| ${2} }\nsnippet eaid\n\teach_index do |${1:i}|\n\t\t${2}\n\tend\nsnippet eak\n\teach_key { |${1:key}| ${2} }\nsnippet eakd\n\teach_key do |${1:key}|\n\t\t${2}\n\tend\nsnippet eal\n\teach_line { |${1:line}| ${2} }\nsnippet eald\n\teach_line do |${1:line}|\n\t\t${2}\n\tend\nsnippet eap\n\teach_pair { |${1:name}, ${2:val}| ${3} }\nsnippet eapd\n\teach_pair do |${1:name}, ${2:val}|\n\t\t${3}\n\tend\nsnippet eas-\n\teach_slice(${1:2}) { |${2:group}| ${3} }\nsnippet easd-\n\teach_slice(${1:2}) do |${2:group}|\n\t\t${3}\n\tend\nsnippet eav\n\teach_value { |${1:val}| ${2} }\nsnippet eavd\n\teach_value do |${1:val}|\n\t\t${2}\n\tend\nsnippet eawi\n\teach_with_index { |${1:e}, ${2:i}| ${3} }\nsnippet eawid\n\teach_with_index do |${1:e},${2:i}|\n\t\t${3}\n\tend\nsnippet reve\n\treverse_each { |${1:e}| ${2} }\nsnippet reved\n\treverse_each do |${1:e}|\n\t\t${2}\n\tend\nsnippet inj\n\tinject(${1:init}) { |${2:mem}, ${3:var}| ${4} }\nsnippet injd\n\tinject(${1:init}) do |${2:mem}, ${3:var}|\n\t\t${4}\n\tend\nsnippet map\n\tmap { |${1:e}| ${2} }\nsnippet mapd\n\tmap do |${1:e}|\n\t\t${2}\n\tend\nsnippet mapwi-\n\tenum_with_index.map { |${1:e}, ${2:i}| ${3} }\nsnippet sor\n\tsort { |a, b| ${1} }\nsnippet sorb\n\tsort_by { |${1:e}| ${2} }\nsnippet ran\n\tsort_by { rand }\nsnippet all\n\tall? { |${1:e}| ${2} }\nsnippet any\n\tany? { |${1:e}| ${2} }\nsnippet cl\n\tclassify { |${1:e}| ${2} }\nsnippet col\n\tcollect { |${1:e}| ${2} }\nsnippet cold\n\tcollect do |${1:e}|\n\t\t${2}\n\tend\nsnippet det\n\tdetect { |${1:e}| ${2} }\nsnippet detd\n\tdetect do |${1:e}|\n\t\t${2}\n\tend\nsnippet fet\n\tfetch(${1:name}) { |${2:key}| ${3} }\nsnippet fin\n\tfind { |${1:e}| ${2} }\nsnippet find\n\tfind do |${1:e}|\n\t\t${2}\n\tend\nsnippet fina\n\tfind_all { |${1:e}| ${2} }\nsnippet finad\n\tfind_all do |${1:e}|\n\t\t${2}\n\tend\nsnippet gre\n\tgrep(${1:/pattern/}) { |${2:match}| ${3} }\nsnippet sub\n\t${1:g}sub(${2:/pattern/}) { |${3:match}| ${4} }\nsnippet sca\n\tscan(${1:/pattern/}) { |${2:match}| ${3} }\nsnippet scad\n\tscan(${1:/pattern/}) do |${2:match}|\n\t\t${3}\n\tend\nsnippet max\n\tmax { |a, b| ${1} }\nsnippet min\n\tmin { |a, b| ${1} }\nsnippet par\n\tpartition { |${1:e}| ${2} }\nsnippet pard\n\tpartition do |${1:e}|\n\t\t${2}\n\tend\nsnippet rej\n\treject { |${1:e}| ${2} }\nsnippet rejd\n\treject do |${1:e}|\n\t\t${2}\n\tend\nsnippet sel\n\tselect { |${1:e}| ${2} }\nsnippet seld\n\tselect do |${1:e}|\n\t\t${2}\n\tend\nsnippet lam\n\tlambda { |${1:args}| ${2} }\nsnippet doo\n\tdo\n\t\t${1}\n\tend\nsnippet dov\n\tdo |${1:variable}|\n\t\t${2}\n\tend\nsnippet :\n\t:${1:key} => ${2:\"value\"}${3}\nsnippet ope\n\topen(${1:\"path/or/url/or/pipe\"}, \"${2:w}\") { |${3:io}| ${4} }\n# path_from_here()\nsnippet fpath\n\tFile.join(File.dirname(__FILE__), *%2[${1:rel path here}])${2}\n# unix_filter {}\nsnippet unif\n\tARGF.each_line${1} do |${2:line}|\n\t\t${3}\n\tend\n# option_parse {}\nsnippet optp\n\trequire \"optparse\"\n\n\toptions = {${1:default => \"args\"}}\n\n\tARGV.options do |opts|\n\t\topts.banner = \"Usage: #{File.basename($PROGRAM_NAME)}\nsnippet opt\n\topts.on( \"-${1:o}\", \"--${2:long-option-name}\", ${3:String},\n\t         \"${4:Option description.}\") do |${5:opt}|\n\t\t${6}\n\tend\nsnippet tc\n\trequire \"test/unit\"\n\n\trequire \"${1:library_file_name}\"\n\n\tclass Test${2:$1} < Test::Unit::TestCase\n\t\tdef test_${3:case_name}\n\t\t\t${4}\n\t\tend\n\tend\nsnippet ts\n\trequire \"test/unit\"\n\n\trequire \"tc_${1:test_case_file}\"\n\trequire \"tc_${2:test_case_file}\"${3}\nsnippet as\n\tassert ${1:test}, \"${2:Failure message.}\"${3}\nsnippet ase\n\tassert_equal ${1:expected}, ${2:actual}${3}\nsnippet asne\n\tassert_not_equal ${1:unexpected}, ${2:actual}${3}\nsnippet asid\n\tassert_in_delta ${1:expected_float}, ${2:actual_float}, ${3:2 ** -20}${4}\nsnippet asio\n\tassert_instance_of ${1:ExpectedClass}, ${2:actual_instance}${3}\nsnippet asko\n\tassert_kind_of ${1:ExpectedKind}, ${2:actual_instance}${3}\nsnippet asn\n\tassert_nil ${1:instance}${2}\nsnippet asnn\n\tassert_not_nil ${1:instance}${2}\nsnippet asm\n\tassert_match /${1:expected_pattern}/, ${2:actual_string}${3}\nsnippet asnm\n\tassert_no_match /${1:unexpected_pattern}/, ${2:actual_string}${3}\nsnippet aso\n\tassert_operator ${1:left}, :${2:operator}, ${3:right}${4}\nsnippet asr\n\tassert_raise ${1:Exception} { ${2} }\nsnippet asrd\n\tassert_raise ${1:Exception} do\n\t\t${2}\n\tend\nsnippet asnr\n\tassert_nothing_raised ${1:Exception} { ${2} }\nsnippet asnrd\n\tassert_nothing_raised ${1:Exception} do\n\t\t${2}\n\tend\nsnippet asrt\n\tassert_respond_to ${1:object}, :${2:method}${3}\nsnippet ass assert_same(..)\n\tassert_same ${1:expected}, ${2:actual}${3}\nsnippet ass assert_send(..)\n\tassert_send [${1:object}, :${2:message}, ${3:args}]${4}\nsnippet asns\n\tassert_not_same ${1:unexpected}, ${2:actual}${3}\nsnippet ast\n\tassert_throws :${1:expected} { ${2} }\nsnippet astd\n\tassert_throws :${1:expected} do\n\t\t${2}\n\tend\nsnippet asnt\n\tassert_nothing_thrown { ${1} }\nsnippet asntd\n\tassert_nothing_thrown do\n\t\t${1}\n\tend\nsnippet fl\n\tflunk \"${1:Failure message.}\"${2}\n# Benchmark.bmbm do .. end\nsnippet bm-\n\tTESTS = ${1:10_000}\n\tBenchmark.bmbm do |results|\n\t\t${2}\n\tend\nsnippet rep\n\tresults.report(\"${1:name}:\") { TESTS.times { ${2} }}\n# Marshal.dump(.., file)\nsnippet Md\n\tFile.open(${1:\"path/to/file.dump\"}, \"wb\") { |${2:file}| Marshal.dump(${3:obj}, $2) }${4}\n# Mashal.load(obj)\nsnippet Ml\n\tFile.open(${1:\"path/to/file.dump\"}, \"rb\") { |${2:file}| Marshal.load($2) }${3}\n# deep_copy(..)\nsnippet deec\n\tMarshal.load(Marshal.dump(${1:obj_to_copy}))${2}\nsnippet Pn-\n\tPStore.new(${1:\"file_name.pstore\"})${2}\nsnippet tra\n\ttransaction(${1:true}) { ${2} }\n# xmlread(..)\nsnippet xml-\n\tREXML::Document.new(File.read(${1:\"path/to/file\"}))${2}\n# xpath(..) { .. }\nsnippet xpa\n\telements.each(${1:\"//Xpath\"}) do |${2:node}|\n\t\t${3}\n\tend\n# class_from_name()\nsnippet clafn\n\tsplit(\"::\").inject(Object) { |par, const| par.const_get(const) }\n# singleton_class()\nsnippet sinc\n\tclass << self; self end\nsnippet nam\n\tnamespace :${1:`Filename()`} do\n\t\t${2}\n\tend\nsnippet tas\n\tdesc \"${1:Task description}\"\n\ttask :${2:task_name => [:dependent, :tasks]} do\n\t\t${3}\n\tend\n# block\nsnippet b\n\t{ |${1:var}| ${2} }\nsnippet begin\n\tbegin\n\t\traise 'A test exception.'\n\trescue Exception => e\n\t\tputs e.message\n\t\tputs e.backtrace.inspect\n\telse\n\t\t# other exception\n\tensure\n\t\t# always executed\n\tend\n\n#debugging\nsnippet debug\n\trequire 'ruby-debug'; debugger; true;\nsnippet pry\n\trequire 'pry'; binding.pry\n\n#############################################\n# Rails snippets - for pure Ruby, see above #\n#############################################\nsnippet art\n\tassert_redirected_to ${1::action => \"${2:index}\"}\nsnippet artnp\n\tassert_redirected_to ${1:parent}_${2:child}_path(${3:@$1}, ${4:@$2})\nsnippet artnpp\n\tassert_redirected_to ${1:parent}_${2:child}_path(${3:@$1})\nsnippet artp\n\tassert_redirected_to ${1:model}_path(${2:@$1})\nsnippet artpp\n\tassert_redirected_to ${1:model}s_path\nsnippet asd\n\tassert_difference \"${1:Model}.${2:count}\", $1 do\n\t\t${3}\n\tend\nsnippet asnd\n\tassert_no_difference \"${1:Model}.${2:count}\" do\n\t\t${3}\n\tend\nsnippet asre\n\tassert_response :${1:success}, @response.body${2}\nsnippet asrj\n\tassert_rjs :${1:replace}, \"${2:dom id}\"\nsnippet ass assert_select(..)\n\tassert_select '${1:path}', :${2:text} => '${3:inner_html' ${4:do}\nsnippet bf\n\tbefore_filter :${1:method}\nsnippet bt\n\tbelongs_to :${1:association}\nsnippet crw\n\tcattr_accessor :${1:attr_names}\nsnippet defcreate\n\tdef create\n\t\t@${1:model_class_name} = ${2:ModelClassName}.new(params[:$1])\n\n\t\trespond_to do |wants|\n\t\t\tif @$1.save\n\t\t\t\tflash[:notice] = '$2 was successfully created.'\n\t\t\t\twants.html { redirect_to(@$1) }\n\t\t\t\twants.xml  { render :xml => @$1, :status => :created, :location => @$1 }\n\t\t\telse\n\t\t\t\twants.html { render :action => \"new\" }\n\t\t\t\twants.xml  { render :xml => @$1.errors, :status => :unprocessable_entity }\n\t\t\tend\n\t\tend\n\tend${3}\nsnippet defdestroy\n\tdef destroy\n\t\t@${1:model_class_name} = ${2:ModelClassName}.find(params[:id])\n\t\t@$1.destroy\n\n\t\trespond_to do |wants|\n\t\t\twants.html { redirect_to($1s_url) }\n\t\t\twants.xml  { head :ok }\n\t\tend\n\tend${3}\nsnippet defedit\n\tdef edit\n\t\t@${1:model_class_name} = ${2:ModelClassName}.find(params[:id])\n\tend\nsnippet defindex\n\tdef index\n\t\t@${1:model_class_name} = ${2:ModelClassName}.all\n\n\t\trespond_to do |wants|\n\t\t\twants.html # index.html.erb\n\t\t\twants.xml  { render :xml => @$1s }\n\t\tend\n\tend${3}\nsnippet defnew\n\tdef new\n\t\t@${1:model_class_name} = ${2:ModelClassName}.new\n\n\t\trespond_to do |wants|\n\t\t\twants.html # new.html.erb\n\t\t\twants.xml  { render :xml => @$1 }\n\t\tend\n\tend${3}\nsnippet defshow\n\tdef show\n\t\t@${1:model_class_name} = ${2:ModelClassName}.find(params[:id])\n\n\t\trespond_to do |wants|\n\t\t\twants.html # show.html.erb\n\t\t\twants.xml  { render :xml => @$1 }\n\t\tend\n\tend${3}\nsnippet defupdate\n\tdef update\n\t\t@${1:model_class_name} = ${2:ModelClassName}.find(params[:id])\n\n\t\trespond_to do |wants|\n\t\t\tif @$1.update_attributes(params[:$1])\n\t\t\t\tflash[:notice] = '$2 was successfully updated.'\n\t\t\t\twants.html { redirect_to(@$1) }\n\t\t\t\twants.xml  { head :ok }\n\t\t\telse\n\t\t\t\twants.html { render :action => \"edit\" }\n\t\t\t\twants.xml  { render :xml => @$1.errors, :status => :unprocessable_entity }\n\t\t\tend\n\t\tend\n\tend${3}\nsnippet flash\n\tflash[:${1:notice}] = \"${2}\"\nsnippet habtm\n\thas_and_belongs_to_many :${1:object}, :join_table => \"${2:table_name}\", :foreign_key => \"${3}_id\"${4}\nsnippet hm\n\thas_many :${1:object}\nsnippet hmd\n\thas_many :${1:other}s, :class_name => \"${2:$1}\", :foreign_key => \"${3:$1}_id\", :dependent => :destroy${4}\nsnippet hmt\n\thas_many :${1:object}, :through => :${2:object}\nsnippet ho\n\thas_one :${1:object}\nsnippet i18\n\tI18n.t('${1:type.key}')${2}\nsnippet ist\n\t<%= image_submit_tag(\"${1:agree.png}\", :id => \"${2:id}\"${3} %>\nsnippet log\n\tRails.logger.${1:debug} ${2}\nsnippet log2\n\tRAILS_DEFAULT_LOGGER.${1:debug} ${2}\nsnippet logd\n\tlogger.debug { \"${1:message}\" }${2}\nsnippet loge\n\tlogger.error { \"${1:message}\" }${2}\nsnippet logf\n\tlogger.fatal { \"${1:message}\" }${2}\nsnippet logi\n\tlogger.info { \"${1:message}\" }${2}\nsnippet logw\n\tlogger.warn { \"${1:message}\" }${2}\nsnippet mapc\n\t${1:map}.${2:connect} '${3:controller/:action/:id}'\nsnippet mapca\n\t${1:map}.catch_all \"*${2:anything}\", :controller => \"${3:default}\", :action => \"${4:error}\"${5}\nsnippet mapr\n\t${1:map}.resource :${2:resource}\nsnippet maprs\n\t${1:map}.resources :${2:resource}\nsnippet mapwo\n\t${1:map}.with_options :${2:controller} => '${3:thing}' do |$3|\n\t\t${4}\n\tend\nsnippet mbs\n\tbefore_save :${1:method}\nsnippet mcht\n\tchange_table :${1:table_name} do |t|\n\t\t${2}\n\tend\nsnippet mp\n\tmap(&:${1:id})\nsnippet mrw\n\tmattr_accessor :${1:attr_names}\nsnippet oa\n\torder(\"${1:field}\")\nsnippet od\n\torder(\"${1:field} DESC\")\nsnippet pa\n\tparams[:${1:id}]${2}\nsnippet ra\n\trender :action => \"${1:action}\"\nsnippet ral\n\trender :action => \"${1:action}\", :layout => \"${2:layoutname}\"\nsnippet rest\n\trespond_to do |wants|\n\t\twants.${1:html} { ${2} }\n\tend\nsnippet rf\n\trender :file => \"${1:filepath}\"\nsnippet rfu\n\trender :file => \"${1:filepath}\", :use_full_path => ${2:false}\nsnippet ri\n\trender :inline => \"${1:<%= 'hello' %>}\"\nsnippet ril\n\trender :inline => \"${1:<%= 'hello' %>}\", :locals => { ${2::name} => \"${3:value}\"${4} }\nsnippet rit\n\trender :inline => \"${1:<%= 'hello' %>}\", :type => ${2::rxml}\nsnippet rjson\n\trender :json => ${1:text to render}\nsnippet rl\n\trender :layout => \"${1:layoutname}\"\nsnippet rn\n\trender :nothing => ${1:true}\nsnippet rns\n\trender :nothing => ${1:true}, :status => ${2:401}\nsnippet rp\n\trender :partial => \"${1:item}\"\nsnippet rpc\n\trender :partial => \"${1:item}\", :collection => ${2:@$1s}\nsnippet rpl\n\trender :partial => \"${1:item}\", :locals => { :${2:$1} => ${3:@$1}\nsnippet rpo\n\trender :partial => \"${1:item}\", :object => ${2:@$1}\nsnippet rps\n\trender :partial => \"${1:item}\", :status => ${2:500}\nsnippet rt\n\trender :text => \"${1:text to render}\"\nsnippet rtl\n\trender :text => \"${1:text to render}\", :layout => \"${2:layoutname}\"\nsnippet rtlt\n\trender :text => \"${1:text to render}\", :layout => ${2:true}\nsnippet rts\n\trender :text => \"${1:text to render}\", :status => ${2:401}\nsnippet ru\n\trender :update do |${1:page}|\n\t\t$1.${2}\n\tend\nsnippet rxml\n\trender :xml => ${1:text to render}\nsnippet sc\n\tscope :${1:name}, :where(:@${2:field} => ${3:value})\nsnippet sl\n\tscope :${1:name}, lambda do |${2:value}|\n\t\twhere(\"${3:field = ?}\", ${4:bind var})\n\tend\nsnippet sha1\n\tDigest::SHA1.hexdigest(${1:string})\nsnippet sweeper\n\tclass ${1:ModelClassName}Sweeper < ActionController::Caching::Sweeper\n\t\tobserve $1\n\n\t\tdef after_save(${2:model_class_name})\n\t\t\texpire_cache($2)\n\t\tend\n\n\t\tdef after_destroy($2)\n\t\t\texpire_cache($2)\n\t\tend\n\n\t\tdef expire_cache($2)\n\t\t\texpire_page\n\t\tend\n\tend\nsnippet tcb\n\tt.boolean :${1:title}\n\t${2}\nsnippet tcbi\n\tt.binary :${1:title}, :limit => ${2:2}.megabytes\n\t${3}\nsnippet tcd\n\tt.decimal :${1:title}, :precision => ${2:10}, :scale => ${3:2}\n\t${4}\nsnippet tcda\n\tt.date :${1:title}\n\t${2}\nsnippet tcdt\n\tt.datetime :${1:title}\n\t${2}\nsnippet tcf\n\tt.float :${1:title}\n\t${2}\nsnippet tch\n\tt.change :${1:name}, :${2:string}, :${3:limit} => ${4:80}\n\t${5}\nsnippet tci\n\tt.integer :${1:title}\n\t${2}\nsnippet tcl\n\tt.integer :lock_version, :null => false, :default => 0\n\t${1}\nsnippet tcr\n\tt.references :${1:taggable}, :polymorphic => { :default => '${2:Photo}' }\n\t${3}\nsnippet tcs\n\tt.string :${1:title}\n\t${2}\nsnippet tct\n\tt.text :${1:title}\n\t${2}\nsnippet tcti\n\tt.time :${1:title}\n\t${2}\nsnippet tcts\n\tt.timestamp :${1:title}\n\t${2}\nsnippet tctss\n\tt.timestamps\n\t${1}\nsnippet va\n\tvalidates_associated :${1:attribute}\nsnippet vao\n\tvalidates_acceptance_of :${1:terms}\nsnippet vc\n\tvalidates_confirmation_of :${1:attribute}\nsnippet ve\n\tvalidates_exclusion_of :${1:attribute}, :in => ${2:%w( mov avi )}\nsnippet vf\n\tvalidates_format_of :${1:attribute}, :with => /${2:regex}/\nsnippet vi\n\tvalidates_inclusion_of :${1:attribute}, :in => %w(${2: mov avi })\nsnippet vl\n\tvalidates_length_of :${1:attribute}, :within => ${2:3}..${3:20}\nsnippet vn\n\tvalidates_numericality_of :${1:attribute}\nsnippet vpo\n\tvalidates_presence_of :${1:attribute}\nsnippet vu\n\tvalidates_uniqueness_of :${1:attribute}\nsnippet wants\n\twants.${1:js|xml|html} { ${2} }\nsnippet wc\n\twhere(${1:\"conditions\"}${2:, bind_var})\nsnippet wh\n\twhere(${1:field} => ${2:value})\nsnippet xdelete\n\txhr :delete, :${1:destroy}, :id => ${2:1}${3}\nsnippet xget\n\txhr :get, :${1:show}, :id => ${2:1}${3}\nsnippet xpost\n\txhr :post, :${1:create}, :${2:object} => { ${3} }\nsnippet xput\n\txhr :put, :${1:update}, :id => ${2:1}, :${3:object} => { ${4} }${5}\nsnippet test\n\ttest \"should ${1:do something}\" do\n\t\t${2}\n\tend\n#migrations\nsnippet mac\n\tadd_column :${1:table_name}, :${2:column_name}, :${3:data_type}\nsnippet mrc\n\tremove_column :${1:table_name}, :${2:column_name}\nsnippet mrnc\n\trename_column :${1:table_name}, :${2:old_column_name}, :${3:new_column_name}\nsnippet mcc\n\tchange_column :${1:table}, :${2:column}, :${3:type}\nsnippet mccc\n\tt.column :${1:title}, :${2:string}\nsnippet mct\n\tcreate_table :${1:table_name} do |t|\n\t\tt.column :${2:name}, :${3:type}\n\tend\nsnippet migration\n\tclass ${1:class_name} < ActiveRecord::Migration\n\t\tdef self.up\n\t\t\t${2}\n\t\tend\n\n\t\tdef self.down\n\t\tend\n\tend\n\nsnippet trc\n\tt.remove :${1:column}\nsnippet tre\n\tt.rename :${1:old_column_name}, :${2:new_column_name}\n\t${3}\nsnippet tref\n\tt.references :${1:model}\n\n#rspec\nsnippet it\n\tit \"${1:spec_name}\" do\n\t\t${2}\n\tend\nsnippet itp\n\tit \"${1:spec_name}\"\n\t${2}\nsnippet desc\n\tdescribe ${1:class_name} do\n\t\t${2}\n\tend\nsnippet cont\n\tcontext \"${1:message}\" do\n\t\t${2}\n\tend\nsnippet bef\n\tbefore :${1:each} do\n\t\t${2}\n\tend\nsnippet aft\n\tafter :${1:each} do\n\t\t${2}\n\tend\n"
  },
  {
    "path": "lib/ace/snippets/rust.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./rust.snippets\");\nexports.scope = \"rust\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/rust.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/sass.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./sass.snippets\");\nexports.scope = \"sass\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/sass.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/scad.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./scad.snippets\");\nexports.scope = \"scad\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/scad.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/scala.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./scala.snippets\");\nexports.scope = \"scala\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/scala.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/scheme.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./scheme.snippets\");\nexports.scope = \"scheme\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/scheme.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/scss.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./scss.snippets\");\nexports.scope = \"scss\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/scss.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/sh.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./sh.snippets\");\nexports.scope = \"sh\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/sh.snippets",
    "content": "# Shebang. Executing bash via /usr/bin/env makes scripts more portable.\nsnippet #!\n\t#!/usr/bin/env bash\n\t\nsnippet if\n\tif [[ ${1:condition} ]]; then\n\t\t${2:#statements}\n\tfi\nsnippet elif\n\telif [[ ${1:condition} ]]; then\n\t\t${2:#statements}\nsnippet for\n\tfor (( ${2:i} = 0; $2 < ${1:count}; $2++ )); do\n\t\t${3:#statements}\n\tdone\nsnippet fori\n\tfor ${1:needle} in ${2:haystack} ; do\n\t\t${3:#statements}\n\tdone\nsnippet wh\n\twhile [[ ${1:condition} ]]; do\n\t\t${2:#statements}\n\tdone\nsnippet until\n\tuntil [[ ${1:condition} ]]; do\n\t\t${2:#statements}\n\tdone\nsnippet case\n\tcase ${1:word} in\n\t\t${2:pattern})\n\t\t\t${3};;\n\tesac\nsnippet go \n\twhile getopts '${1:o}' ${2:opts} \n\tdo \n\t\tcase $$2 in\n\t\t${3:o0})\n\t\t\t${4:#staments};;\n\t\tesac\n\tdone\n# Set SCRIPT_DIR variable to directory script is located.\nsnippet sdir\n\tSCRIPT_DIR=\"$( cd \"$( dirname \"${BASH_SOURCE[0]}\" )\" && pwd )\"\n# getopt\nsnippet getopt\n\t__ScriptVersion=\"${1:version}\"\n\n\t#===  FUNCTION  ================================================================\n\t#         NAME:  usage\n\t#  DESCRIPTION:  Display usage information.\n\t#===============================================================================\n\tfunction usage ()\n\t{\n\t\t\tcat <<- EOT\n\n\t  Usage :  $${0:0} [options] [--] \n\n\t  Options: \n\t  -h|help       Display this message\n\t  -v|version    Display script version\n\n\tEOT\n\t}    # ----------  end of function usage  ----------\n\n\t#-----------------------------------------------------------------------\n\t#  Handle command line arguments\n\t#-----------------------------------------------------------------------\n\n\twhile getopts \":hv\" opt\n\tdo\n\t  case $opt in\n\n\t\th|help     )  usage; exit 0   ;;\n\n\t\tv|version  )  echo \"$${0:0} -- Version $__ScriptVersion\"; exit 0   ;;\n\n\t\t\\? )  echo -e \"\\n  Option does not exist : $OPTARG\\n\"\n\t\t\t  usage; exit 1   ;;\n\n\t  esac    # --- end of case ---\n\tdone\n\tshift $(($OPTIND-1))\n\n"
  },
  {
    "path": "lib/ace/snippets/sjs.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./sjs.snippets\");\nexports.scope = \"sjs\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/sjs.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/smarty.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./smarty.snippets\");\nexports.scope = \"smarty\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/smarty.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/snippets.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./snippets.snippets\");\nexports.scope = \"snippets\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/snippets.snippets",
    "content": "# snippets for making snippets :)\nsnippet snip\n\tsnippet ${1:trigger}\n\t\t${2}\nsnippet msnip\n\tsnippet ${1:trigger} ${2:description}\n\t\t${3}\nsnippet v\n\t{VISUAL}\n"
  },
  {
    "path": "lib/ace/snippets/soy_template.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./soy_template.snippets\");\nexports.scope = \"soy_template\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/soy_template.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/space.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./space.snippets\");\nexports.scope = \"space\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/space.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/sparql.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./.snippets\");\nexports.scope = \"\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/sql.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./sql.snippets\");\nexports.scope = \"sql\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/sql.snippets",
    "content": "snippet tbl\n\tcreate table ${1:table} (\n\t\t${2:columns}\n\t);\nsnippet col\n\t${1:name}\t${2:type}\t${3:default ''}\t${4:not null}\nsnippet ccol\n\t${1:name}\tvarchar2(${2:size})\t${3:default ''}\t${4:not null}\nsnippet ncol\n\t${1:name}\tnumber\t${3:default 0}\t${4:not null}\nsnippet dcol\n\t${1:name}\tdate\t${3:default sysdate}\t${4:not null}\nsnippet ind\n\tcreate index ${3:$1_$2} on ${1:table}(${2:column});\nsnippet uind\n\tcreate unique index ${1:name} on ${2:table}(${3:column});\nsnippet tblcom\n\tcomment on table ${1:table} is '${2:comment}';\nsnippet colcom\n\tcomment on column ${1:table}.${2:column} is '${3:comment}';\nsnippet addcol\n\talter table ${1:table} add (${2:column} ${3:type});\nsnippet seq\n\tcreate sequence ${1:name} start with ${2:1} increment by ${3:1} minvalue ${4:1};\nsnippet s*\n\tselect * from ${1:table}\n"
  },
  {
    "path": "lib/ace/snippets/sqlserver.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./sqlserver.snippets\");\nexports.scope = \"sqlserver\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/sqlserver.snippets",
    "content": "# ISNULL\nsnippet isnull\n\tISNULL(${1:check_expression}, ${2:replacement_value})\n# FORMAT\nsnippet format\n\tFORMAT(${1:value}, ${2:format})\n# CAST\nsnippet cast\n\tCAST(${1:expression} AS ${2:data_type})\n# CONVERT\nsnippet convert\n\tCONVERT(${1:data_type}, ${2:expression})\n# DATEPART\nsnippet datepart\n\tDATEPART(${1:datepart}, ${2:date})\n# DATEDIFF\nsnippet datediff\n\tDATEDIFF(${1:datepart}, ${2:startdate}, ${3:enddate})\n# DATEADD\nsnippet dateadd\n\tDATEADD(${1:datepart}, ${2:number}, ${3:date})\n# DATEFROMPARTS \nsnippet datefromparts\n\tDATEFROMPARTS(${1:year}, ${2:month}, ${3:day})\n# OBJECT_DEFINITION\nsnippet objectdef\n\tSELECT OBJECT_DEFINITION(OBJECT_ID('${1:sys.server_permissions /*object name*/}'))\n# STUFF XML\nsnippet stuffxml\n\tSTUFF((SELECT ', ' + ${1:ColumnName}\n\t\tFROM ${2:TableName}\n\t\tWHERE ${3:WhereClause}\n\t\tFOR XML PATH('')), 1, 1, '') AS ${4:Alias}\n\t${5:/*https://msdn.microsoft.com/en-us/library/ms188043.aspx*/}\n# Create Procedure\nsnippet createproc\n\t-- =============================================\n\t-- Author:\t\t${1:Author}\n\t-- Create date: ${2:Date}\n\t-- Description:\t${3:Description}\n\t-- =============================================\n\tCREATE PROCEDURE ${4:Procedure_Name}\n\t\t${5:/*Add the parameters for the stored procedure here*/}\n\tAS\n\tBEGIN\n\t\t-- SET NOCOUNT ON added to prevent extra result sets from interfering with SELECT statements.\n\t\tSET NOCOUNT ON;\n\t\t\n\t\t${6:/*Add the T-SQL statements to compute the return value here*/}\n\t\t\n\tEND\n\tGO\n# Create Scalar Function\nsnippet createfn\n\t-- =============================================\n\t-- Author:\t\t${1:Author}\n\t-- Create date: ${2:Date}\n\t-- Description:\t${3:Description}\n\t-- =============================================\n\tCREATE FUNCTION ${4:Scalar_Function_Name}\n\t\t-- Add the parameters for the function here\n\tRETURNS ${5:Function_Data_Type}\n\tAS\n\tBEGIN\n\t\tDECLARE @Result ${5:Function_Data_Type}\n\t\t\n\t\t${6:/*Add the T-SQL statements to compute the return value here*/}\n\t\t\n\tEND\n\tGO"
  },
  {
    "path": "lib/ace/snippets/stylus.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./stylus.snippets\");\nexports.scope = \"stylus\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/stylus.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/svg.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./svg.snippets\");\nexports.scope = \"svg\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/svg.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/tcl.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./tcl.snippets\");\nexports.scope = \"tcl\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/tcl.snippets",
    "content": "# #!/usr/bin/env tclsh\nsnippet #!\n\t#!/usr/bin/env tclsh\n\t\n# Process\nsnippet pro\n\tproc ${1:function_name} {${2:args}} {\n\t\t${3:#body ...}\n\t}\n#xif\nsnippet xif\n\t${1:expr}? ${2:true} : ${3:false}\n# Conditional\nsnippet if\n\tif {${1}} {\n\t\t${2:# body...}\n\t}\n# Conditional if..else\nsnippet ife\n\tif {${1}} {\n\t\t${2:# body...}\n\t} else {\n\t\t${3:# else...}\n\t}\n# Conditional if..elsif..else\nsnippet ifee\n\tif {${1}} {\n\t\t${2:# body...}\n\t} elseif {${3}} {\n\t\t${4:# elsif...}\n\t} else {\n\t\t${5:# else...}\n\t}\n# If catch then\nsnippet ifc\n\tif { [catch {${1:#do something...}} ${2:err}] } {\n\t\t${3:# handle failure...}\n\t}\n# Catch\nsnippet catch\n\tcatch {${1}} ${2:err} ${3:options}\n# While Loop\nsnippet wh\n\twhile {${1}} {\n\t\t${2:# body...}\n\t}\n# For Loop\nsnippet for\n\tfor {set ${2:var} 0} {$$2 < ${1:count}} {${3:incr} $2} {\n\t\t${4:# body...}\n\t}\n# Foreach Loop\nsnippet fore\n\tforeach ${1:x} {${2:#list}} {\n\t\t${3:# body...}\n\t}\n# after ms script...\nsnippet af\n\tafter ${1:ms} ${2:#do something}\n# after cancel id\nsnippet afc\n\tafter cancel ${1:id or script}\n# after idle\nsnippet afi\n\tafter idle ${1:script}\n# after info id\nsnippet afin\n\tafter info ${1:id}\n# Expr\nsnippet exp\n\texpr {${1:#expression here}}\n# Switch\nsnippet sw\n\tswitch ${1:var} {\n\t\t${3:pattern 1} {\n\t\t\t${4:#do something}\n\t\t}\n\t\tdefault {\n\t\t\t${2:#do something}\n\t\t}\n\t}\n# Case\nsnippet ca\n\t${1:pattern} {\n\t\t${2:#do something}\n\t}${3}\n# Namespace eval\nsnippet ns\n\tnamespace eval ${1:path} {${2:#script...}}\n# Namespace current\nsnippet nsc\n\tnamespace current\n"
  },
  {
    "path": "lib/ace/snippets/tex.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./tex.snippets\");\nexports.scope = \"tex\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/tex.snippets",
    "content": "#PREAMBLE\n#newcommand\nsnippet nc\n\t\\newcommand{\\${1:cmd}}[${2:opt}]{${3:realcmd}}${4}\n#usepackage\nsnippet up\n\t\\usepackage[${1:[options}]{${2:package}}\n#newunicodechar\nsnippet nuc\n\t\\newunicodechar{${1}}{${2:\\ensuremath}${3:tex-substitute}}}\n#DeclareMathOperator\nsnippet dmo\n\t\\DeclareMathOperator{${1}}{${2}}\n\n#DOCUMENT\n# \\begin{}...\\end{}\nsnippet begin\n\t\\begin{${1:env}}\n\t\t${2}\n\t\\end{$1}\n# Tabular\nsnippet tab\n\t\\begin{${1:tabular}}{${2:c}}\n\t${3}\n\t\\end{$1}\nsnippet thm\n\t\\begin[${1:author}]{${2:thm}}\n\t${3}\n\t\\end{$1}\nsnippet center\n\t\\begin{center}\n\t\t${1}\n\t\\end{center}\n# Align(ed)\nsnippet ali\n\t\\begin{align${1:ed}}\n\t\t${2}\n\t\\end{align$1}\n# Gather(ed)\nsnippet gat\n\t\\begin{gather${1:ed}}\n\t\t${2}\n\t\\end{gather$1}\n# Equation\nsnippet eq\n\t\\begin{equation}\n\t\t${1}\n\t\\end{equation}\n# Equation\nsnippet eq*\n\t\\begin{equation*}\n\t\t${1}\n\t\\end{equation*}\n# Unnumbered Equation\nsnippet \\\n\t\\[\n\t\t${1}\n\t\\]\n# Enumerate\nsnippet enum\n\t\\begin{enumerate}\n\t\t\\item ${1}\n\t\\end{enumerate}\n# Itemize\nsnippet itemize\n\t\\begin{itemize}\n\t\t\\item ${1}\n\t\\end{itemize}\n# Description\nsnippet desc\n\t\\begin{description}\n\t\t\\item[${1}] ${2}\n\t\\end{description}\n# Matrix\nsnippet mat\n\t\\begin{${1:p/b/v/V/B/small}matrix}\n\t\t${2}\n\t\\end{$1matrix}\n# Cases\nsnippet cas\n\t\\begin{cases}\n\t\t${1:equation}, &\\text{ if }${2:case}\\\\\n\t\t${3}\n\t\\end{cases}\n# Split\nsnippet spl\n\t\\begin{split}\n\t\t${1}\n\t\\end{split}\n# Part\nsnippet part\n\t\\part{${1:part name}} % (fold)\n\t\\label{prt:${2:$1}}\n\t${3}\n\t% part $2 (end)\n# Chapter\nsnippet cha\n\t\\chapter{${1:chapter name}}\n\t\\label{cha:${2:$1}}\n\t${3}\n# Section\nsnippet sec\n\t\\section{${1:section name}}\n\t\\label{sec:${2:$1}}\n\t${3}\n# Sub Section\nsnippet sub\n\t\\subsection{${1:subsection name}}\n\t\\label{sub:${2:$1}}\n\t${3}\n# Sub Sub Section\nsnippet subs\n\t\\subsubsection{${1:subsubsection name}}\n\t\\label{ssub:${2:$1}}\n\t${3}\n# Paragraph\nsnippet par\n\t\\paragraph{${1:paragraph name}}\n\t\\label{par:${2:$1}}\n\t${3}\n# Sub Paragraph\nsnippet subp\n\t\\subparagraph{${1:subparagraph name}}\n\t\\label{subp:${2:$1}}\n\t${3}\n#References\nsnippet itd\n\t\\item[${1:description}] ${2:item}\nsnippet figure\n\t${1:Figure}~\\ref{${2:fig:}}${3}\nsnippet table\n\t${1:Table}~\\ref{${2:tab:}}${3}\nsnippet listing\n\t${1:Listing}~\\ref{${2:list}}${3}\nsnippet section\n\t${1:Section}~\\ref{${2:sec:}}${3}\nsnippet page\n\t${1:page}~\\pageref{${2}}${3}\nsnippet index\n\t\\index{${1:index}}${2}\n#Citations\nsnippet cite\n\t\\cite[${1}]{${2}}${3}\nsnippet fcite\n\t\\footcite[${1}]{${2}}${3}\n#Formating text: italic, bold, underline, small capital, emphase ..\nsnippet it\n\t\\textit{${1:text}}\nsnippet bf\n\t\\textbf{${1:text}}\nsnippet under\n\t\\underline{${1:text}}\nsnippet emp\n\t\\emph{${1:text}}\nsnippet sc\n\t\\textsc{${1:text}}\n#Choosing font\nsnippet sf\n\t\\textsf{${1:text}}\nsnippet rm\n\t\\textrm{${1:text}}\nsnippet tt\n\t\\texttt{${1:text}}\n#misc\nsnippet ft\n\t\\footnote{${1:text}}\nsnippet fig\n\t\\begin{figure}\n\t\\begin{center}\n\t    \\includegraphics[scale=${1}]{Figures/${2}}\n\t\\end{center}\n\t\\caption{${3}}\n\t\\label{fig:${4}}\n\t\\end{figure}\nsnippet tikz\n\t\\begin{figure}\n\t\\begin{center}\n\t\\begin{tikzpicture}[scale=${1:1}]\n\t\t${2}\n\t\\end{tikzpicture}\n\t\\end{center}\n\t\\caption{${3}}\n\t\\label{fig:${4}}\n\t\\end{figure}\n#math\nsnippet stackrel\n\t\\stackrel{${1:above}}{${2:below}} ${3}\nsnippet frac\n\t\\frac{${1:num}}{${2:denom}}\nsnippet sum\n\t\\sum^{${1:n}}_{${2:i=1}}{${3}}"
  },
  {
    "path": "lib/ace/snippets/text.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./text.snippets\");\nexports.scope = \"text\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/text.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/textile.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./textile.snippets\");\nexports.scope = \"textile\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/textile.snippets",
    "content": "# Jekyll post header\nsnippet header\n\t---\n\ttitle: ${1:title}\n\tlayout: post\n\tdate: ${2:date} ${3:hour:minute:second} -05:00\n\t---\n\n# Image\nsnippet img\n\t!${1:url}(${2:title}):${3:link}!\n\n# Table\nsnippet |\n\t|${1}|${2}\n\n# Link\nsnippet link\n\t\"${1:link text}\":${2:url}\n\n# Acronym\nsnippet (\n\t(${1:Expand acronym})${2}\n\n# Footnote\nsnippet fn\n\t[${1:ref number}] ${3}\n\n\tfn$1. ${2:footnote}\n\t\n"
  },
  {
    "path": "lib/ace/snippets/tmsnippet.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/toml.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./toml.snippets\");\nexports.scope = \"toml\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/toml.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/turtle.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./.snippets\");\nexports.scope = \"\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/twig.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./twig.snippets\");\nexports.scope = \"twig\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/twig.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/typescript.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./typescript.snippets\");\nexports.scope = \"typescript\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/typescript.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/vala.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\n// exports.snippetText = require(\"../requirejs/text!./.snippets\");\nexports.snippets = [\n    {\n        \"content\": \"case ${1:condition}:\\n\\t$0\\n\\tbreak;\\n\",\n        \"name\": \"case\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"case\"\n    },\n    {\n        \"content\": \"/**\\n * ${6}\\n */\\n${1:public} class ${2:MethodName}${3: : GLib.Object} {\\n\\n\\t/**\\n\\t * ${7}\\n\\t */\\n\\tpublic ${2}(${4}) {\\n\\t\\t${5}\\n\\t}\\n\\n\\t$0\\n}\",\n        \"name\": \"class\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"class\"\n    },\n    {\n        \"content\": \"(${1}) => {\\n\\t${0}\\n}\\n\",\n        \"name\": \"closure\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"=>\"\n    },\n    {\n        \"content\": \"/*\\n * $0\\n */\",\n        \"name\": \"Comment (multiline)\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"/*\"\n    },\n    {\n        \"content\": \"Console.WriteLine($1);\\n$0\",\n        \"name\": \"Console.WriteLine (writeline)\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"writeline\"\n    },\n    {\n        \"content\": \"[DBus(name = \\\"$0\\\")]\",\n        \"name\": \"DBus annotation\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"[DBus\"\n    },\n    {\n        \"content\": \"delegate ${1:void} ${2:DelegateName}($0);\",\n        \"name\": \"delegate\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"delegate\"\n    },\n    {\n        \"content\": \"do {\\n\\t$0\\n} while ($1);\\n\",\n        \"name\": \"do while\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"dowhile\"\n    },\n    {\n        \"content\": \"/**\\n * $0\\n */\",\n        \"name\": \"DocBlock\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"/**\"\n    },\n    {\n        \"content\": \"else if ($1) {\\n\\t$0\\n}\\n\",\n        \"name\": \"else if (elseif)\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"elseif\"\n    },\n    {\n        \"content\": \"else {\\n\\t$0\\n}\",\n        \"name\": \"else\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"else\"\n    },\n    {\n        \"content\": \"enum {$1:EnumName} {\\n\\t$0\\n}\",\n        \"name\": \"enum\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"enum\"\n    },\n    {\n        \"content\": \"public errordomain ${1:Error} {\\n\\t$0\\n}\",\n        \"name\": \"error domain\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"errordomain\"\n    },\n    {\n        \"content\": \"for ($1;$2;$3) {\\n\\t$0\\n}\",\n        \"name\": \"for\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"for\"\n    },\n    {\n        \"content\": \"foreach ($1 in $2) {\\n\\t$0\\n}\",\n        \"name\": \"foreach\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"foreach\"\n    },\n    {\n        \"content\": \"Gee.ArrayList<${1:G}>($0);\",\n        \"name\": \"Gee.ArrayList\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"ArrayList\"\n    },\n    {\n        \"content\": \"Gee.HashMap<${1:K},${2:V}>($0);\",\n        \"name\": \"Gee.HashMap\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"HashMap\"\n    },\n    {\n        \"content\": \"Gee.HashSet<${1:G}>($0);\",\n        \"name\": \"Gee.HashSet\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"HashSet\"\n    },\n    {\n        \"content\": \"if ($1) {\\n\\t$0\\n}\",\n        \"name\": \"if\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"if\"\n    },\n    {\n        \"content\": \"interface ${1:InterfaceName}{$2: : SuperInterface} {\\n\\t$0\\n}\",\n        \"name\": \"interface\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"interface\"\n    },\n    {\n        \"content\": \"public static int main(string [] argv) {\\n\\t${0}\\n\\treturn 0;\\n}\",\n        \"name\": \"Main function\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"main\"\n    },\n    {\n        \"content\": \"namespace $1 {\\n\\t$0\\n}\\n\",\n        \"name\": \"namespace (ns)\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"ns\"\n    },\n    {\n        \"content\": \"stdout.printf($0);\",\n        \"name\": \"printf\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"printf\"\n    },\n    {\n        \"content\": \"${1:public} ${2:Type} ${3:Name} {\\n\\tset {\\n\\t\\t$0\\n\\t}\\n\\tget {\\n\\n\\t}\\n}\",\n        \"name\": \"property (prop)\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"prop\"\n    },\n    {\n        \"content\": \"${1:public} ${2:Type} ${3:Name} {\\n\\tget {\\n\\t\\t$0\\n\\t}\\n}\",\n        \"name\": \"read-only property (roprop)\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"roprop\"\n    },\n    {\n        \"content\": \"@\\\"${1:\\\\$var}\\\"\",\n        \"name\": \"String template (@)\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"@\"\n    },\n    {\n        \"content\": \"struct ${1:StructName} {\\n\\t$0\\n}\",\n        \"name\": \"struct\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"struct\"\n    },\n    {\n        \"content\": \"switch ($1) {\\n\\t$0\\n}\",\n        \"name\": \"switch\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"switch\"\n    },\n    {\n        \"content\": \"try {\\n\\t$2\\n} catch (${1:Error} e) {\\n\\t$0\\n}\",\n        \"name\": \"try/catch\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"try\"\n    },\n    {\n        \"content\": \"\\\"\\\"\\\"$0\\\"\\\"\\\";\",\n        \"name\": \"Verbatim string (\\\"\\\"\\\")\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"verbatim\"\n    },\n    {\n        \"content\": \"while ($1) {\\n\\t$0\\n}\",\n        \"name\": \"while\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"while\"\n    }\n];\nexports.scope = \"\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/vala.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/vbscript.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./vbscript.snippets\");\nexports.scope = \"vbscript\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/vbscript.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/velocity.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./velocity.snippets\");\nexports.scope = \"velocity\";\nexports.includeScopes = [\"html\", \"javascript\", \"css\"];\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/velocity.snippets",
    "content": "# macro\nsnippet #macro\n\t#macro ( ${1:macroName} ${2:\\$var1, [\\$var2, ...]} )\n\t\t${3:## macro code}\n\t#end\n# foreach\nsnippet #foreach\n\t#foreach ( ${1:\\$item} in ${2:\\$collection} )\n\t\t${3:## foreach code}\n\t#end\n# if\nsnippet #if\n\t#if ( ${1:true} )\n\t\t${0}\n\t#end\n# if ... else\nsnippet #ife\n\t#if ( ${1:true} )\n\t\t${2}\n\t#else\n\t\t${0}\n\t#end\n#import\nsnippet #import\n\t#import ( \"${1:path/to/velocity/format}\" )\n# set\nsnippet #set\n\t#set ( $${1:var} = ${0} )\n"
  },
  {
    "path": "lib/ace/snippets/verilog.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./verilog.snippets\");\nexports.scope = \"verilog\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/verilog.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/vhdl.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./vhdl.snippets\");\nexports.scope = \"vhdl\";\n\n});"
  },
  {
    "path": "lib/ace/snippets/vhdl.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/wollok.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./wollok.snippets\");\nexports.scope = \"wollok\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/wollok.snippets",
    "content": "##\n## Basic Java packages and import\nsnippet im\n\timport\nsnippet w.l\n\twollok.lang\nsnippet w.i\n\twollok.lib\n\n## Class and object\nsnippet cl\n\tclass ${1:`Filename(\"\", \"untitled\")`} ${2}\nsnippet obj\n\tobject ${1:`Filename(\"\", \"untitled\")`} ${2:inherits Parent}${3}\nsnippet te\n\ttest ${1:`Filename(\"\", \"untitled\")`}\n\n##\n## Enhancements\nsnippet inh\n\tinherits\n\n##\n## Comments\nsnippet /*\n\t/*\n\t * ${1}\n\t */\n\n##\n## Control Statements\nsnippet el\n\telse\nsnippet if\n\tif (${1}) ${2}\n\n##\n## Create a Method\nsnippet m\n\tmethod ${1:method}(${2}) ${5}\n\n##  \n## Tests\nsnippet as\n\tassert.equals(${1:expected}, ${2:actual})\n\n##\n## Exceptions\nsnippet ca\n\tcatch ${1:e} : (${2:Exception} ) ${3}\nsnippet thr\n\tthrow\nsnippet try\n\ttry {\n\t\t${3}\n\t} catch ${1:e} : ${2:Exception} {\n\t}\n\n##\n## Javadocs\nsnippet /**\n\t/**\n\t * ${1}\n\t */\n\n##\n## Print Methods\nsnippet print\n\tconsole.println(\"${1:Message}\")\n\n##\n## Setter and Getter Methods\nsnippet set\n\tmethod set${1:}(${2:}) {\n\t\t$1 = $2\n\t}\nsnippet get\n\tmethod get${1:}() {\n\t\treturn ${1:};\n\t}\n\n##\n## Terminate Methods or Loops\nsnippet re\n\treturn"
  },
  {
    "path": "lib/ace/snippets/xml.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./xml.snippets\");\nexports.scope = \"xml\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/xml.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets/xquery.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./xquery.snippets\");\nexports.scope = \"xquery\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/xquery.snippets",
    "content": "snippet for\n\tfor $${1:item} in ${2:expr}\nsnippet return\n\treturn ${1:expr}\nsnippet import\n\timport module namespace ${1:ns} = \"${2:http://www.example.com/}\";\nsnippet some\n\tsome $${1:varname} in ${2:expr} satisfies ${3:expr}\nsnippet every\n\tevery $${1:varname} in ${2:expr} satisfies ${3:expr}\nsnippet if\n\tif(${1:true}) then ${2:expr} else ${3:true}\nsnippet switch\n\tswitch(${1:\"foo\"})\n\tcase ${2:\"foo\"}\n\treturn ${3:true}\n\tdefault return ${4:false}\nsnippet try\n\ttry { ${1:expr} } catch ${2:*} { ${3:expr} }\nsnippet tumbling\n\tfor tumbling window $${1:varname} in ${2:expr}\n\tstart at $${3:start} when ${4:expr}\n\tend at $${5:end} when ${6:expr}\n\treturn ${7:expr}\nsnippet sliding\n\tfor sliding window $${1:varname} in ${2:expr}\n\tstart at $${3:start} when ${4:expr}\n\tend at $${5:end} when ${6:expr}\n\treturn ${7:expr}\nsnippet let\n\tlet $${1:varname} := ${2:expr}\nsnippet group\n\tgroup by $${1:varname} := ${2:expr}\nsnippet order\n\torder by ${1:expr} ${2:descending}\nsnippet stable\n\tstable order by ${1:expr}\nsnippet count\n\tcount $${1:varname}\nsnippet ordered\n\tordered { ${1:expr} }\nsnippet unordered\n\tunordered { ${1:expr} }\nsnippet treat \n\ttreat as ${1:expr}\nsnippet castable\n\tcastable as ${1:atomicType}\nsnippet cast\n\tcast as ${1:atomicType}\nsnippet typeswitch\n\ttypeswitch(${1:expr})\n\tcase ${2:type}  return ${3:expr}\n\tdefault return ${4:expr}\nsnippet var\n\tdeclare variable $${1:varname} := ${2:expr};\nsnippet fn\n\tdeclare function ${1:ns}:${2:name}(){\n\t${3:expr}\n\t};\nsnippet module\n\tmodule namespace ${1:ns} = \"${2:http://www.example.com}\";\n"
  },
  {
    "path": "lib/ace/snippets/xslt.snippets",
    "content": "snippet apply-templates with-param\n\t<xsl:apply-templates select=\"${1:*}\">\n\t\t<xsl:with-param name=\"${2:param}\">${3}</xsl:with-param>${4}\n\t</xsl:apply-templates>${5}\n\nsnippet apply-templates sort-by\n\t<xsl:apply-templates select=\"${1:*}\">\n\t\t<xsl:sort select=\"${2:node}\" order=\"${3:ascending}\" data-type=\"${4:text}\">${5}\n\t</xsl:apply-templates>${6}\n\nsnippet apply-templates plain\n\t<xsl:apply-templates select=\"${1:*}\" />${2}\n\nsnippet attribute blank\n\t<xsl:attribute name=\"${1:name}\">${2}</xsl:attribute>${3}\n\nsnippet attribute value-of\n\t<xsl:attribute name=\"${1:name}\">\n\t\t<xsl:value-of select=\"${2:*}\" />\n\t</xsl:attribute>${3}\n\nsnippet call-template\n\t<xsl:call-template name=\"${1:template}\" />\n\nsnippet call-template with-param\n\t<xsl:call-template name=\"${1:template}\">\n\t\t<xsl:with-param name=\"${2:param}\">${3}</xsl:with-param>${4}\n\t</xsl:call-template>${5}\n\nsnippet choose\n\t<xsl:choose>\n\t\t<xsl:when test=\"${1:value}\">\n\t\t\t${2}\n\t\t</xsl:when>${3}\n\t</xsl:choose>\n\nsnippet copy-of\n\t<xsl:copy-of select=\"${1:*}\" />${2}\n\nsnippet for-each\n\t<xsl:for-each select=\"${1:*}\">${2}\n\t</xsl:for-each>${3}\n\nsnippet if\n\t<xsl:if test=\"${1:test}\">${2}\n\t</xsl:if>${3}\n\nsnippet import\n\t<xsl:import href=\"${1:stylesheet}\" />${2}\n\nsnippet include\n\t<xsl:include href=\"${1:stylesheet}\" />${2}\n\t\nsnippet otherwise\n\t<xsl:otherwise>${1}\n\t</xsl:otherwise>\n\nsnippet param\n\t<xsl:param name=\"${1:name}\">${2}\n\t</xsl:param>${3}\n\nsnippet stylesheet\n\t<xsl:stylesheet version=\"1.0\"\n\txmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">${1}\n\t</xsl:stylesheet>\n\nsnippet template \n\t<xsl:template match=\"${1:*}\">${3}\n\t</xsl:template>\n\nsnippet template named\n\t<xsl:template name=\"${1:name}\">${2}\n\t</xsl:template>\n\nsnippet text\n\t<xsl:text>${1}</xsl:text>\n\nsnippet value-of\n\t<xsl:value-of select=\"${1:*}\" />${2}\n\nsnippet variable blank\n\t<xsl:variable name=\"${1:name}\">${2}\n\t</xsl:variable>\n\nsnippet variable select\n\t<xsl:variable select=\"${1:*}\" />${2}\n\nsnippet when\n\t<xsl:when test=\"${1:test}\">${2}\n\t</xsl:when>\n\nsnippet with-param\n\t<xsl:with-param name=\"${1:name}\">${2}</xsl:with-param>\n\t\nsnippet with-param select\n\t<xsl:with-param name=\"${1:name}\" select=\"${2:*}\" />\n\t\n"
  },
  {
    "path": "lib/ace/snippets/yaml.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./yaml.snippets\");\nexports.scope = \"yaml\";\n\n});\n"
  },
  {
    "path": "lib/ace/snippets/yaml.snippets",
    "content": ""
  },
  {
    "path": "lib/ace/snippets.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar lang = require(\"./lib/lang\");\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\nvar HashHandler = require(\"./keyboard/hash_handler\").HashHandler;\nvar Tokenizer = require(\"./tokenizer\").Tokenizer;\nvar comparePoints = Range.comparePoints;\n\nvar SnippetManager = function() {\n    this.snippetMap = {};\n    this.snippetNameMap = {};\n};\n\n(function() {\n    oop.implement(this, EventEmitter);\n    \n    this.getTokenizer = function() {\n        function TabstopToken(str, _, stack) {\n            str = str.substr(1);\n            if (/^\\d+$/.test(str) && !stack.inFormatString)\n                return [{tabstopId: parseInt(str, 10)}];\n            return [{text: str}];\n        }\n        function escape(ch) {\n            return \"(?:[^\\\\\\\\\" + ch + \"]|\\\\\\\\.)\";\n        }\n        SnippetManager.$tokenizer = new Tokenizer({\n            start: [\n                {regex: /:/, onMatch: function(val, state, stack) {\n                    if (stack.length && stack[0].expectIf) {\n                        stack[0].expectIf = false;\n                        stack[0].elseBranch = stack[0];\n                        return [stack[0]];\n                    }\n                    return \":\";\n                }},\n                {regex: /\\\\./, onMatch: function(val, state, stack) {\n                    var ch = val[1];\n                    if (ch == \"}\" && stack.length) {\n                        val = ch;\n                    }else if (\"`$\\\\\".indexOf(ch) != -1) {\n                        val = ch;\n                    } else if (stack.inFormatString) {\n                        if (ch == \"n\")\n                            val = \"\\n\";\n                        else if (ch == \"t\")\n                            val = \"\\n\";\n                        else if (\"ulULE\".indexOf(ch) != -1) {\n                            val = {changeCase: ch, local: ch > \"a\"};\n                        }\n                    }\n\n                    return [val];\n                }},\n                {regex: /}/, onMatch: function(val, state, stack) {\n                    return [stack.length ? stack.shift() : val];\n                }},\n                {regex: /\\$(?:\\d+|\\w+)/, onMatch: TabstopToken},\n                {regex: /\\$\\{[\\dA-Z_a-z]+/, onMatch: function(str, state, stack) {\n                    var t = TabstopToken(str.substr(1), state, stack);\n                    stack.unshift(t[0]);\n                    return t;\n                }, next: \"snippetVar\"},\n                {regex: /\\n/, token: \"newline\", merge: false}\n            ],\n            snippetVar: [\n                {regex: \"\\\\|\" + escape(\"\\\\|\") + \"*\\\\|\", onMatch: function(val, state, stack) {\n                    stack[0].choices = val.slice(1, -1).split(\",\");\n                }, next: \"start\"},\n                {regex: \"/(\" + escape(\"/\") + \"+)/(?:(\" + escape(\"/\") + \"*)/)(\\\\w*):?\",\n                 onMatch: function(val, state, stack) {\n                    var ts = stack[0];\n                    ts.fmtString = val;\n\n                    val = this.splitRegex.exec(val);\n                    ts.guard = val[1];\n                    ts.fmt = val[2];\n                    ts.flag = val[3];\n                    return \"\";\n                }, next: \"start\"},\n                {regex: \"`\" + escape(\"`\") + \"*`\", onMatch: function(val, state, stack) {\n                    stack[0].code = val.splice(1, -1);\n                    return \"\";\n                }, next: \"start\"},\n                {regex: \"\\\\?\", onMatch: function(val, state, stack) {\n                    if (stack[0])\n                        stack[0].expectIf = true;\n                }, next: \"start\"},\n                {regex: \"([^:}\\\\\\\\]|\\\\\\\\.)*:?\", token: \"\", next: \"start\"}\n            ],\n            formatString: [\n                {regex: \"/(\" + escape(\"/\") + \"+)/\", token: \"regex\"},\n                {regex: \"\", onMatch: function(val, state, stack) {\n                    stack.inFormatString = true;\n                }, next: \"start\"}\n            ]\n        });\n        SnippetManager.prototype.getTokenizer = function() {\n            return SnippetManager.$tokenizer;\n        };\n        return SnippetManager.$tokenizer;\n    };\n\n    this.tokenizeTmSnippet = function(str, startState) {\n        return this.getTokenizer().getLineTokens(str, startState).tokens.map(function(x) {\n            return x.value || x;\n        });\n    };\n\n    this.$getDefaultValue = function(editor, name) {\n        if (/^[A-Z]\\d+$/.test(name)) {\n            var i = name.substr(1);\n            return (this.variables[name[0] + \"__\"] || {})[i];\n        }\n        if (/^\\d+$/.test(name)) {\n            return (this.variables.__ || {})[name];\n        }\n        name = name.replace(/^TM_/, \"\");\n\n        if (!editor)\n            return;\n        var s = editor.session;\n        switch(name) {\n            case \"CURRENT_WORD\":\n                var r = s.getWordRange(); \n                /* falls through */\n            case \"SELECTION\":\n            case \"SELECTED_TEXT\":\n                return s.getTextRange(r);\n            case \"CURRENT_LINE\":\n                return s.getLine(editor.getCursorPosition().row);\n            case \"PREV_LINE\": // not possible in textmate\n                return s.getLine(editor.getCursorPosition().row - 1);\n            case \"LINE_INDEX\":\n                return editor.getCursorPosition().column;\n            case \"LINE_NUMBER\":\n                return editor.getCursorPosition().row + 1;\n            case \"SOFT_TABS\":\n                return s.getUseSoftTabs() ? \"YES\" : \"NO\";\n            case \"TAB_SIZE\":\n                return s.getTabSize();\n            // default but can't fill :(\n            case \"FILENAME\":\n            case \"FILEPATH\":\n                return \"\";\n            case \"FULLNAME\":\n                return \"Ace\";\n        }\n    };\n    this.variables = {};\n    this.getVariableValue = function(editor, varName) {\n        if (this.variables.hasOwnProperty(varName))\n            return this.variables[varName](editor, varName) || \"\";\n        return this.$getDefaultValue(editor, varName) || \"\";\n    };\n\n    // returns string formatted according to http://manual.macromates.com/en/regular_expressions#replacement_string_syntax_format_strings\n    this.tmStrFormat = function(str, ch, editor) {\n        var flag = ch.flag || \"\";\n        var re = ch.guard;\n        re = new RegExp(re, flag.replace(/[^gi]/, \"\"));\n        var fmtTokens = this.tokenizeTmSnippet(ch.fmt, \"formatString\");\n        var _self = this;\n        var formatted = str.replace(re, function() {\n            _self.variables.__ = arguments;\n            var fmtParts = _self.resolveVariables(fmtTokens, editor);\n            var gChangeCase = \"E\";\n            for (var i  = 0; i < fmtParts.length; i++) {\n                var ch = fmtParts[i];\n                if (typeof ch == \"object\") {\n                    fmtParts[i] = \"\";\n                    if (ch.changeCase && ch.local) {\n                        var next = fmtParts[i + 1];\n                        if (next && typeof next == \"string\") {\n                            if (ch.changeCase == \"u\")\n                                fmtParts[i] = next[0].toUpperCase();\n                            else\n                                fmtParts[i] = next[0].toLowerCase();\n                            fmtParts[i + 1] = next.substr(1);\n                        }\n                    } else if (ch.changeCase) {\n                        gChangeCase = ch.changeCase;\n                    }\n                } else if (gChangeCase == \"U\") {\n                    fmtParts[i] = ch.toUpperCase();\n                } else if (gChangeCase == \"L\") {\n                    fmtParts[i] = ch.toLowerCase();\n                }\n            }\n            return fmtParts.join(\"\");\n        });\n        this.variables.__ = null;\n        return formatted;\n    };\n\n    this.resolveVariables = function(snippet, editor) {\n        var result = [];\n        for (var i = 0; i < snippet.length; i++) {\n            var ch = snippet[i];\n            if (typeof ch == \"string\") {\n                result.push(ch);\n            } else if (typeof ch != \"object\") {\n                continue;\n            } else if (ch.skip) {\n                gotoNext(ch);\n            } else if (ch.processed < i) {\n                continue;\n            } else if (ch.text) {\n                var value = this.getVariableValue(editor, ch.text);\n                if (value && ch.fmtString)\n                    value = this.tmStrFormat(value, ch);\n                ch.processed = i;\n                if (ch.expectIf == null) {\n                    if (value) {\n                        result.push(value);\n                        gotoNext(ch);\n                    }\n                } else {\n                    if (value) {\n                        ch.skip = ch.elseBranch;\n                    } else\n                        gotoNext(ch);\n                }\n            } else if (ch.tabstopId != null) {\n                result.push(ch);\n            } else if (ch.changeCase != null) {\n                result.push(ch);\n            }\n        }\n        function gotoNext(ch) {\n            var i1 = snippet.indexOf(ch, i + 1);\n            if (i1 != -1)\n                i = i1;\n        }\n        return result;\n    };\n\n    this.insertSnippetForSelection = function(editor, snippetText) {\n        var cursor = editor.getCursorPosition();\n        var line = editor.session.getLine(cursor.row);\n        var tabString = editor.session.getTabString();\n        var indentString = line.match(/^\\s*/)[0];\n        \n        if (cursor.column < indentString.length)\n            indentString = indentString.slice(0, cursor.column);\n\n        snippetText = snippetText.replace(/\\r/g, \"\");\n        var tokens = this.tokenizeTmSnippet(snippetText);\n        tokens = this.resolveVariables(tokens, editor);\n        // indent\n        tokens = tokens.map(function(x) {\n            if (x == \"\\n\")\n                return x + indentString;\n            if (typeof x == \"string\")\n                return x.replace(/\\t/g, tabString);\n            return x;\n        });\n        // tabstop values\n        var tabstops = [];\n        tokens.forEach(function(p, i) {\n            if (typeof p != \"object\")\n                return;\n            var id = p.tabstopId;\n            var ts = tabstops[id];\n            if (!ts) {\n                ts = tabstops[id] = [];\n                ts.index = id;\n                ts.value = \"\";\n            }\n            if (ts.indexOf(p) !== -1)\n                return;\n            ts.push(p);\n            var i1 = tokens.indexOf(p, i + 1);\n            if (i1 === -1)\n                return;\n\n            var value = tokens.slice(i + 1, i1);\n            var isNested = value.some(function(t) {return typeof t === \"object\";});          \n            if (isNested && !ts.value) {\n                ts.value = value;\n            } else if (value.length && (!ts.value || typeof ts.value !== \"string\")) {\n                ts.value = value.join(\"\");\n            }\n        });\n\n        // expand tabstop values\n        tabstops.forEach(function(ts) {ts.length = 0;});\n        var expanding = {};\n        function copyValue(val) {\n            var copy = [];\n            for (var i = 0; i < val.length; i++) {\n                var p = val[i];\n                if (typeof p == \"object\") {\n                    if (expanding[p.tabstopId])\n                        continue;\n                    var j = val.lastIndexOf(p, i - 1);\n                    p = copy[j] || {tabstopId: p.tabstopId};\n                }\n                copy[i] = p;\n            }\n            return copy;\n        }\n        for (var i = 0; i < tokens.length; i++) {\n            var p = tokens[i];\n            if (typeof p != \"object\")\n                continue;\n            var id = p.tabstopId;\n            var i1 = tokens.indexOf(p, i + 1);\n            if (expanding[id]) {\n                // if reached closing bracket clear expanding state\n                if (expanding[id] === p)\n                    expanding[id] = null;\n                // otherwise just ignore recursive tabstop\n                continue;\n            }\n            \n            var ts = tabstops[id];\n            var arg = typeof ts.value == \"string\" ? [ts.value] : copyValue(ts.value);\n            arg.unshift(i + 1, Math.max(0, i1 - i));\n            arg.push(p);\n            expanding[id] = p;\n            tokens.splice.apply(tokens, arg);\n\n            if (ts.indexOf(p) === -1)\n                ts.push(p);\n        }\n        \n        // convert to plain text\n        var row = 0, column = 0;\n        var text = \"\";\n        tokens.forEach(function(t) {\n            if (typeof t === \"string\") {\n                var lines = t.split(\"\\n\");\n                if (lines.length > 1){\n                    column = lines[lines.length - 1].length;\n                    row += lines.length - 1;\n                } else\n                    column += t.length;\n                text += t;\n            } else {\n                if (!t.start)\n                    t.start = {row: row, column: column};\n                else\n                    t.end = {row: row, column: column};\n            }\n        });\n        var range = editor.getSelectionRange();\n        var end = editor.session.replace(range, text);\n\n        var tabstopManager = new TabstopManager(editor);\n        var selectionId = editor.inVirtualSelectionMode && editor.selection.index;\n        tabstopManager.addTabstops(tabstops, range.start, end, selectionId);\n    };\n    \n    this.insertSnippet = function(editor, snippetText) {\n        var self = this;\n        if (editor.inVirtualSelectionMode)\n            return self.insertSnippetForSelection(editor, snippetText);\n        \n        editor.forEachSelection(function() {\n            self.insertSnippetForSelection(editor, snippetText);\n        }, null, {keepOrder: true});\n        \n        if (editor.tabstopManager)\n            editor.tabstopManager.tabNext();\n    };\n\n    this.$getScope = function(editor) {\n        var scope = editor.session.$mode.$id || \"\";\n        scope = scope.split(\"/\").pop();\n        if (scope === \"html\" || scope === \"php\") {\n            // PHP is actually HTML\n            if (scope === \"php\" && !editor.session.$mode.inlinePhp) \n                scope = \"html\";\n            var c = editor.getCursorPosition();\n            var state = editor.session.getState(c.row);\n            if (typeof state === \"object\") {\n                state = state[0];\n            }\n            if (state.substring) {\n                if (state.substring(0, 3) == \"js-\")\n                    scope = \"javascript\";\n                else if (state.substring(0, 4) == \"css-\")\n                    scope = \"css\";\n                else if (state.substring(0, 4) == \"php-\")\n                    scope = \"php\";\n            }\n        }\n        \n        return scope;\n    };\n\n    this.getActiveScopes = function(editor) {\n        var scope = this.$getScope(editor);\n        var scopes = [scope];\n        var snippetMap = this.snippetMap;\n        if (snippetMap[scope] && snippetMap[scope].includeScopes) {\n            scopes.push.apply(scopes, snippetMap[scope].includeScopes);\n        }\n        scopes.push(\"_\");\n        return scopes;\n    };\n\n    this.expandWithTab = function(editor, options) {\n        var self = this;\n        var result = editor.forEachSelection(function() {\n            return self.expandSnippetForSelection(editor, options);\n        }, null, {keepOrder: true});\n        if (result && editor.tabstopManager)\n            editor.tabstopManager.tabNext();\n        return result;\n    };\n    \n    this.expandSnippetForSelection = function(editor, options) {\n        var cursor = editor.getCursorPosition();\n        var line = editor.session.getLine(cursor.row);\n        var before = line.substring(0, cursor.column);\n        var after = line.substr(cursor.column);\n\n        var snippetMap = this.snippetMap;\n        var snippet;\n        this.getActiveScopes(editor).some(function(scope) {\n            var snippets = snippetMap[scope];\n            if (snippets)\n                snippet = this.findMatchingSnippet(snippets, before, after);\n            return !!snippet;\n        }, this);\n        if (!snippet)\n            return false;\n        if (options && options.dryRun)\n            return true;\n        editor.session.doc.removeInLine(cursor.row,\n            cursor.column - snippet.replaceBefore.length,\n            cursor.column + snippet.replaceAfter.length\n        );\n\n        this.variables.M__ = snippet.matchBefore;\n        this.variables.T__ = snippet.matchAfter;\n        this.insertSnippetForSelection(editor, snippet.content);\n\n        this.variables.M__ = this.variables.T__ = null;\n        return true;\n    };\n\n    this.findMatchingSnippet = function(snippetList, before, after) {\n        for (var i = snippetList.length; i--;) {\n            var s = snippetList[i];\n            if (s.startRe && !s.startRe.test(before))\n                continue;\n            if (s.endRe && !s.endRe.test(after))\n                continue;\n            if (!s.startRe && !s.endRe)\n                continue;\n\n            s.matchBefore = s.startRe ? s.startRe.exec(before) : [\"\"];\n            s.matchAfter = s.endRe ? s.endRe.exec(after) : [\"\"];\n            s.replaceBefore = s.triggerRe ? s.triggerRe.exec(before)[0] : \"\";\n            s.replaceAfter = s.endTriggerRe ? s.endTriggerRe.exec(after)[0] : \"\";\n            return s;\n        }\n    };\n\n    this.snippetMap = {};\n    this.snippetNameMap = {};\n    this.register = function(snippets, scope) {\n        var snippetMap = this.snippetMap;\n        var snippetNameMap = this.snippetNameMap;\n        var self = this;\n        \n        if (!snippets) \n            snippets = [];\n        \n        function wrapRegexp(src) {\n            if (src && !/^\\^?\\(.*\\)\\$?$|^\\\\b$/.test(src))\n                src = \"(?:\" + src + \")\";\n\n            return src || \"\";\n        }\n        function guardedRegexp(re, guard, opening) {\n            re = wrapRegexp(re);\n            guard = wrapRegexp(guard);\n            if (opening) {\n                re = guard + re;\n                if (re && re[re.length - 1] != \"$\")\n                    re = re + \"$\";\n            } else {\n                re = re + guard;\n                if (re && re[0] != \"^\")\n                    re = \"^\" + re;\n            }\n            return new RegExp(re);\n        }\n\n        function addSnippet(s) {\n            if (!s.scope)\n                s.scope = scope || \"_\";\n            scope = s.scope;\n            if (!snippetMap[scope]) {\n                snippetMap[scope] = [];\n                snippetNameMap[scope] = {};\n            }\n\n            var map = snippetNameMap[scope];\n            if (s.name) {\n                var old = map[s.name];\n                if (old)\n                    self.unregister(old);\n                map[s.name] = s;\n            }\n            snippetMap[scope].push(s);\n\n            if (s.tabTrigger && !s.trigger) {\n                if (!s.guard && /^\\w/.test(s.tabTrigger))\n                    s.guard = \"\\\\b\";\n                s.trigger = lang.escapeRegExp(s.tabTrigger);\n            }\n            \n            if (!s.trigger && !s.guard && !s.endTrigger && !s.endGuard)\n                return;\n            \n            s.startRe = guardedRegexp(s.trigger, s.guard, true);\n            s.triggerRe = new RegExp(s.trigger);\n\n            s.endRe = guardedRegexp(s.endTrigger, s.endGuard, true);\n            s.endTriggerRe = new RegExp(s.endTrigger);\n        }\n\n        if (snippets && snippets.content)\n            addSnippet(snippets);\n        else if (Array.isArray(snippets))\n            snippets.forEach(addSnippet);\n        \n        this._signal(\"registerSnippets\", {scope: scope});\n    };\n    this.unregister = function(snippets, scope) {\n        var snippetMap = this.snippetMap;\n        var snippetNameMap = this.snippetNameMap;\n\n        function removeSnippet(s) {\n            var nameMap = snippetNameMap[s.scope||scope];\n            if (nameMap && nameMap[s.name]) {\n                delete nameMap[s.name];\n                var map = snippetMap[s.scope||scope];\n                var i = map && map.indexOf(s);\n                if (i >= 0)\n                    map.splice(i, 1);\n            }\n        }\n        if (snippets.content)\n            removeSnippet(snippets);\n        else if (Array.isArray(snippets))\n            snippets.forEach(removeSnippet);\n    };\n    this.parseSnippetFile = function(str) {\n        str = str.replace(/\\r/g, \"\");\n        var list = [], snippet = {};\n        var re = /^#.*|^({[\\s\\S]*})\\s*$|^(\\S+) (.*)$|^((?:\\n*\\t.*)+)/gm;\n        var m;\n        while (m = re.exec(str)) {\n            if (m[1]) {\n                try {\n                    snippet = JSON.parse(m[1]);\n                    list.push(snippet);\n                } catch (e) {}\n            } if (m[4]) {\n                snippet.content = m[4].replace(/^\\t/gm, \"\");\n                list.push(snippet);\n                snippet = {};\n            } else {\n                var key = m[2], val = m[3];\n                if (key == \"regex\") {\n                    var guardRe = /\\/((?:[^\\/\\\\]|\\\\.)*)|$/g;\n                    snippet.guard = guardRe.exec(val)[1];\n                    snippet.trigger = guardRe.exec(val)[1];\n                    snippet.endTrigger = guardRe.exec(val)[1];\n                    snippet.endGuard = guardRe.exec(val)[1];\n                } else if (key == \"snippet\") {\n                    snippet.tabTrigger = val.match(/^\\S*/)[0];\n                    if (!snippet.name)\n                        snippet.name = val;\n                } else {\n                    snippet[key] = val;\n                }\n            }\n        }\n        return list;\n    };\n    this.getSnippetByName = function(name, editor) {\n        var snippetMap = this.snippetNameMap;\n        var snippet;\n        this.getActiveScopes(editor).some(function(scope) {\n            var snippets = snippetMap[scope];\n            if (snippets)\n                snippet = snippets[name];\n            return !!snippet;\n        }, this);\n        return snippet;\n    };\n\n}).call(SnippetManager.prototype);\n\n\nvar TabstopManager = function(editor) {\n    if (editor.tabstopManager)\n        return editor.tabstopManager;\n    editor.tabstopManager = this;\n    this.$onChange = this.onChange.bind(this);\n    this.$onChangeSelection = lang.delayedCall(this.onChangeSelection.bind(this)).schedule;\n    this.$onChangeSession = this.onChangeSession.bind(this);\n    this.$onAfterExec = this.onAfterExec.bind(this);\n    this.attach(editor);\n};\n(function() {\n    this.attach = function(editor) {\n        this.index = 0;\n        this.ranges = [];\n        this.tabstops = [];\n        this.$openTabstops = null;\n        this.selectedTabstop = null;\n\n        this.editor = editor;\n        this.editor.on(\"change\", this.$onChange);\n        this.editor.on(\"changeSelection\", this.$onChangeSelection);\n        this.editor.on(\"changeSession\", this.$onChangeSession);\n        this.editor.commands.on(\"afterExec\", this.$onAfterExec);\n        this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n    };\n    this.detach = function() {\n        this.tabstops.forEach(this.removeTabstopMarkers, this);\n        this.ranges = null;\n        this.tabstops = null;\n        this.selectedTabstop = null;\n        this.editor.removeListener(\"change\", this.$onChange);\n        this.editor.removeListener(\"changeSelection\", this.$onChangeSelection);\n        this.editor.removeListener(\"changeSession\", this.$onChangeSession);\n        this.editor.commands.removeListener(\"afterExec\", this.$onAfterExec);\n        this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);\n        this.editor.tabstopManager = null;\n        this.editor = null;\n    };\n\n    this.onChange = function(delta) {\n        var changeRange = delta;\n        var isRemove = delta.action[0] == \"r\";\n        var start = delta.start;\n        var end = delta.end;\n        var startRow = start.row;\n        var endRow = end.row;\n        var lineDif = endRow - startRow;\n        var colDiff = end.column - start.column;\n\n        if (isRemove) {\n            lineDif = -lineDif;\n            colDiff = -colDiff;\n        }\n        if (!this.$inChange && isRemove) {\n            var ts = this.selectedTabstop;\n            var changedOutside = ts && !ts.some(function(r) {\n                return comparePoints(r.start, start) <= 0 && comparePoints(r.end, end) >= 0;\n            });\n            if (changedOutside)\n                return this.detach();\n        }\n        var ranges = this.ranges;\n        for (var i = 0; i < ranges.length; i++) {\n            var r = ranges[i];\n            if (r.end.row < start.row)\n                continue;\n\n            if (isRemove && comparePoints(start, r.start) < 0 && comparePoints(end, r.end) > 0) {\n                this.removeRange(r);\n                i--;\n                continue;\n            }\n\n            if (r.start.row == startRow && r.start.column > start.column)\n                r.start.column += colDiff;\n            if (r.end.row == startRow && r.end.column >= start.column)\n                r.end.column += colDiff;\n            if (r.start.row >= startRow)\n                r.start.row += lineDif;\n            if (r.end.row >= startRow)\n                r.end.row += lineDif;\n\n            if (comparePoints(r.start, r.end) > 0)\n                this.removeRange(r);\n        }\n        if (!ranges.length)\n            this.detach();\n    };\n    this.updateLinkedFields = function() {\n        var ts = this.selectedTabstop;\n        if (!ts || !ts.hasLinkedRanges)\n            return;\n        this.$inChange = true;\n        var session = this.editor.session;\n        var text = session.getTextRange(ts.firstNonLinked);\n        for (var i = ts.length; i--;) {\n            var range = ts[i];\n            if (!range.linked)\n                continue;\n            var fmt = exports.snippetManager.tmStrFormat(text, range.original);\n            session.replace(range, fmt);\n        }\n        this.$inChange = false;\n    };\n    this.onAfterExec = function(e) {\n        if (e.command && !e.command.readOnly)\n            this.updateLinkedFields();\n    };\n    this.onChangeSelection = function() {\n        if (!this.editor)\n            return;\n        var lead = this.editor.selection.lead;\n        var anchor = this.editor.selection.anchor;\n        var isEmpty = this.editor.selection.isEmpty();\n        for (var i = this.ranges.length; i--;) {\n            if (this.ranges[i].linked)\n                continue;\n            var containsLead = this.ranges[i].contains(lead.row, lead.column);\n            var containsAnchor = isEmpty || this.ranges[i].contains(anchor.row, anchor.column);\n            if (containsLead && containsAnchor)\n                return;\n        }\n        this.detach();\n    };\n    this.onChangeSession = function() {\n        this.detach();\n    };\n    this.tabNext = function(dir) {\n        var max = this.tabstops.length;\n        var index = this.index + (dir || 1);\n        index = Math.min(Math.max(index, 1), max);\n        if (index == max)\n            index = 0;\n        this.selectTabstop(index);\n        if (index === 0)\n            this.detach();\n    };\n    this.selectTabstop = function(index) {\n        this.$openTabstops = null;\n        var ts = this.tabstops[this.index];\n        if (ts)\n            this.addTabstopMarkers(ts);\n        this.index = index;\n        ts = this.tabstops[this.index];\n        if (!ts || !ts.length)\n            return;\n        \n        this.selectedTabstop = ts;\n        if (!this.editor.inVirtualSelectionMode) {        \n            var sel = this.editor.multiSelect;\n            sel.toSingleRange(ts.firstNonLinked.clone());\n            for (var i = ts.length; i--;) {\n                if (ts.hasLinkedRanges && ts[i].linked)\n                    continue;\n                sel.addRange(ts[i].clone(), true);\n            }\n            // todo investigate why is this needed\n            if (sel.ranges[0])\n                sel.addRange(sel.ranges[0].clone());\n        } else {\n            this.editor.selection.setRange(ts.firstNonLinked);\n        }\n        \n        this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n    };\n    this.addTabstops = function(tabstops, start, end) {\n        if (!this.$openTabstops)\n            this.$openTabstops = [];\n        // add final tabstop if missing\n        if (!tabstops[0]) {\n            var p = Range.fromPoints(end, end);\n            moveRelative(p.start, start);\n            moveRelative(p.end, start);\n            tabstops[0] = [p];\n            tabstops[0].index = 0;\n        }\n\n        var i = this.index;\n        var arg = [i + 1, 0];\n        var ranges = this.ranges;\n        tabstops.forEach(function(ts, index) {\n            var dest = this.$openTabstops[index] || ts;\n                \n            for (var i = ts.length; i--;) {\n                var p = ts[i];\n                var range = Range.fromPoints(p.start, p.end || p.start);\n                movePoint(range.start, start);\n                movePoint(range.end, start);\n                range.original = p;\n                range.tabstop = dest;\n                ranges.push(range);\n                if (dest != ts)\n                    dest.unshift(range);\n                else\n                    dest[i] = range;\n                if (p.fmtString) {\n                    range.linked = true;\n                    dest.hasLinkedRanges = true;\n                } else if (!dest.firstNonLinked)\n                    dest.firstNonLinked = range;\n            }\n            if (!dest.firstNonLinked)\n                dest.hasLinkedRanges = false;\n            if (dest === ts) {\n                arg.push(dest);\n                this.$openTabstops[index] = dest;\n            }\n            this.addTabstopMarkers(dest);\n        }, this);\n        \n        if (arg.length > 2) {\n            // when adding new snippet inside existing one, make sure 0 tabstop is at the end\n            if (this.tabstops.length)\n                arg.push(arg.splice(2, 1)[0]);\n            this.tabstops.splice.apply(this.tabstops, arg);\n        }\n    };\n\n    this.addTabstopMarkers = function(ts) {\n        var session = this.editor.session;\n        ts.forEach(function(range) {\n            if  (!range.markerId)\n                range.markerId = session.addMarker(range, \"ace_snippet-marker\", \"text\");\n        });\n    };\n    this.removeTabstopMarkers = function(ts) {\n        var session = this.editor.session;\n        ts.forEach(function(range) {\n            session.removeMarker(range.markerId);\n            range.markerId = null;\n        });\n    };\n    this.removeRange = function(range) {\n        var i = range.tabstop.indexOf(range);\n        range.tabstop.splice(i, 1);\n        i = this.ranges.indexOf(range);\n        this.ranges.splice(i, 1);\n        this.editor.session.removeMarker(range.markerId);\n        if (!range.tabstop.length) {\n            i = this.tabstops.indexOf(range.tabstop);\n            if (i != -1)\n                this.tabstops.splice(i, 1);\n            if (!this.tabstops.length)\n                this.detach();\n        }\n    };\n\n    this.keyboardHandler = new HashHandler();\n    this.keyboardHandler.bindKeys({\n        \"Tab\": function(ed) {\n            if (exports.snippetManager && exports.snippetManager.expandWithTab(ed)) {\n                return;\n            }\n\n            ed.tabstopManager.tabNext(1);\n        },\n        \"Shift-Tab\": function(ed) {\n            ed.tabstopManager.tabNext(-1);\n        },\n        \"Esc\": function(ed) {\n            ed.tabstopManager.detach();\n        },\n        \"Return\": function(ed) {\n            //ed.tabstopManager.tabNext(1);\n            return false;\n        }\n    });\n}).call(TabstopManager.prototype);\n\n\n\nvar changeTracker = {};\nchangeTracker.onChange = Anchor.prototype.onChange;\nchangeTracker.setPosition = function(row, column) {\n    this.pos.row = row;\n    this.pos.column = column;\n};\nchangeTracker.update = function(pos, delta, $insertRight) {\n    this.$insertRight = $insertRight;\n    this.pos = pos; \n    this.onChange(delta);\n};\n\nvar movePoint = function(point, diff) {\n    if (point.row == 0)\n        point.column += diff.column;\n    point.row += diff.row;\n};\n\nvar moveRelative = function(point, start) {\n    if (point.row == start.row)\n        point.column -= start.column;\n    point.row -= start.row;\n};\n\n\nrequire(\"./lib/dom\").importCssString(\"\\\n.ace_snippet-marker {\\\n    -moz-box-sizing: border-box;\\\n    box-sizing: border-box;\\\n    background: rgba(194, 193, 208, 0.09);\\\n    border: 1px dotted rgba(211, 208, 235, 0.62);\\\n    position: absolute;\\\n}\");\n\nexports.snippetManager = new SnippetManager();\n\n\nvar Editor = require(\"./editor\").Editor;\n(function() {\n    this.insertSnippet = function(content, options) {\n        return exports.snippetManager.insertSnippet(this, content, options);\n    };\n    this.expandSnippet = function(options) {\n        return exports.snippetManager.expandWithTab(this, options);\n    };\n}).call(Editor.prototype);\n\n});\n"
  },
  {
    "path": "lib/ace/snippets_test.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\nif (typeof process !== \"undefined\") {\n    require(\"amd-loader\");\n    require(\"./test/mockdom\");\n}\n\ndefine(function(require, exports, module) {\n\"use strict\";\nvar EditSession = require(\"./edit_session\").EditSession;\nvar Editor = require(\"./editor\").Editor;\nvar MockRenderer = require(\"./test/mockrenderer\").MockRenderer;\nvar MultiSelect = require(\"./multi_select\").MultiSelect;\n\nvar snippetManager = require(\"./snippets\").snippetManager;\nvar assert = require(\"./test/assertions\");\n\nmodule.exports = {\n    setUp : function(next) {\n        this.editor = new Editor(new MockRenderer());\n        next();\n    },\n    \n    \"test: textmate style format strings\" : function() {\n        var fmt = snippetManager.tmStrFormat;\n        snippetManager.tmStrFormat(\"hello\", {\n            guard: \"(..)(.)(.)\",\n            flag:\"g\",\n            fmt: \"a\\\\UO\\\\l$1\\\\E$2\"\n        }) == \"aOHElo\";\n    },\n    \"test: parse snipmate file\" : function() {\n        var expected = [{\n            name: \"a\",\n            guard: \"(?:(=)|(:))?\\\\s*)\",\n            trigger: \"\\\\(?f\",\n            endTrigger: \"\\\\)\",\n            endGuard: \"\",\n            content: \"{$0}\\n\"\n         }, {\n            tabTrigger: \"f\",\n            name: \"f function\",\n            content: \"function\"\n        }];\n        \n        var parsed = snippetManager.parseSnippetFile(\n            \"name a\\nregex /(?:(=)|(:))?\\\\s*)/\\\\(?f/\\\\)/\\n\\t{$0}\" +\n            \"\\n\\t\\n\\n#function\\nsnippet f function\\n\\tfunction\"\n        );\n\n        assert.equal(JSON.stringify(expected, null, 4), JSON.stringify(parsed, null, 4));\n    },\n    \"test: parse snippet\": function() {\n        var content = \"-\\\\$$2a${1:x${$2:y$3\\\\}\\\\n\\\\}$TM_SELECTION}\";\n        var tokens = snippetManager.tokenizeTmSnippet(content);\n        assert.equal(tokens.length, 15);\n        assert.equal(tokens[4], tokens[14]);\n        assert.equal(tokens[2].tabstopId, 2);\n\n        var content = \"\\\\}${var/as\\\\/d/\\\\ul\\\\//g:s}\";\n        var tokens = snippetManager.tokenizeTmSnippet(content);\n        assert.equal(tokens.length, 4);\n        assert.equal(tokens[1], tokens[3]);\n        assert.equal(tokens[2], \"s\");\n        assert.equal(tokens[1].text, \"var\");\n        assert.equal(tokens[1].fmt, \"\\\\ul\\\\/\");\n        assert.equal(tokens[1].guard, \"as\\\\/d\");\n        assert.equal(tokens[1].flag, \"g\");\n    },\n    \"test: expand snippet with nested tabstops\": function() {\n        var content = \"-${1}-${1:t\\n1}--${2:2 ${3} 2}-${3:3 $1 3}-${4:4 $2 4}\";\n        this.editor.setValue(\"\");\n        snippetManager.insertSnippet(this.editor, content);\n        assert.equal(this.editor.getValue(), [\n            \"-t\",\n            \"1-t\",\n            \"1--2 3 t\",\n            \"1 3 2-3 t\",\n            \"1 3-4 2 3 t\",\n            \"1 3 2 4\"\n        ].join(\"\\n\"));\n        \n        assert.equal(this.editor.getSelectedText(), \"t\\n1\\nt\\n1\\nt\\n1\\nt\\n1\\nt\\n1\");\n        this.editor.tabstopManager.tabNext();\n        assert.equal(this.editor.getSelectedText(), \"2 3 t\\n1 3 2\\n2 3 t\\n1 3 2\");\n        this.editor.tabstopManager.tabNext();\n        assert.equal(this.editor.getSelectedText(), \"3 t\\n1 3\\n3 t\\n1 3\\n3 t\\n1 3\");\n        this.editor.tabstopManager.tabNext();\n        assert.equal(this.editor.getSelectedText(), \"4 2 3 t\\n1 3 2 4\");\n        this.editor.tabstopManager.tabNext();\n        assert.equal(this.editor.getSelectedText(), \"\");\n        \n        this.editor.setValue(\"\");\n        snippetManager.insertSnippet(this.editor, \"-${1:a$2}-${2:b$1}\");\n        assert.equal(this.editor.getValue(), \"-ab-ba\");\n        \n        assert.equal(this.editor.getSelectedText(), \"ab\\na\");\n        this.editor.tabstopManager.tabNext();\n        assert.equal(this.editor.getSelectedText(), \"b\\nba\");\n        this.editor.tabstopManager.tabNext();\n        assert.equal(this.editor.getSelectedText(), \"\");\n    }\n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main) {\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n}\n"
  },
  {
    "path": "lib/ace/split.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar lang = require(\"./lib/lang\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\nvar Editor = require(\"./editor\").Editor;\nvar Renderer = require(\"./virtual_renderer\").VirtualRenderer;\nvar EditSession = require(\"./edit_session\").EditSession;\n\n/** \n * @class Split\n *\n **/\n\n\nvar Split = function(container, theme, splits) {\n    this.BELOW = 1;\n    this.BESIDE = 0;\n\n    this.$container = container;\n    this.$theme = theme;\n    this.$splits = 0;\n    this.$editorCSS = \"\";\n    this.$editors = [];\n    this.$orientation = this.BESIDE;\n\n    this.setSplits(splits || 1);\n    this.$cEditor = this.$editors[0];\n\n\n    this.on(\"focus\", function(editor) {\n        this.$cEditor = editor;\n    }.bind(this));\n};\n\n(function(){\n\n    oop.implement(this, EventEmitter);\n\n    this.$createEditor = function() {\n        var el = document.createElement(\"div\");\n        el.className = this.$editorCSS;\n        el.style.cssText = \"position: absolute; top:0px; bottom:0px\";\n        this.$container.appendChild(el);\n        var editor = new Editor(new Renderer(el, this.$theme));\n\n        editor.on(\"focus\", function() {\n            this._emit(\"focus\", editor);\n        }.bind(this));\n\n        this.$editors.push(editor);\n        editor.setFontSize(this.$fontSize);\n        return editor;\n    };\n\n    this.setSplits = function(splits) {\n        var editor;\n        if (splits < 1) {\n            throw \"The number of splits have to be > 0!\";\n        }\n\n        if (splits == this.$splits) {\n            return;\n        } else if (splits > this.$splits) {\n            while (this.$splits < this.$editors.length && this.$splits < splits) {\n                editor = this.$editors[this.$splits];\n                this.$container.appendChild(editor.container);\n                editor.setFontSize(this.$fontSize);\n                this.$splits ++;\n            }\n            while (this.$splits < splits) {\n                this.$createEditor();\n                this.$splits ++;\n            }\n        } else {\n            while (this.$splits > splits) {\n                editor = this.$editors[this.$splits - 1];\n                this.$container.removeChild(editor.container);\n                this.$splits --;\n            }\n        }\n        this.resize();\n    };\n\n    /**\n     * \n     * Returns the number of splits.\n     * @returns {Number}\n     **/\n    this.getSplits = function() {\n        return this.$splits;\n    };\n\n    /**\n     * @param {Number} idx The index of the editor you want\n     *\n     * Returns the editor identified by the index `idx`.\n     *\n     **/\n    this.getEditor = function(idx) {\n        return this.$editors[idx];\n    };\n\n    /**\n     * \n     * Returns the current editor.\n     * @returns {Editor}\n     **/\n    this.getCurrentEditor = function() {\n        return this.$cEditor;\n    };\n\n    /** \n     * Focuses the current editor.\n     * @related Editor.focus\n     **/\n    this.focus = function() {\n        this.$cEditor.focus();\n    };\n\n    /** \n     * Blurs the current editor.\n     * @related Editor.blur\n     **/\n    this.blur = function() {\n        this.$cEditor.blur();\n    };\n\n    /** \n     * \n     * @param {String} theme The name of the theme to set\n     * \n     * Sets a theme for each of the available editors.\n     * @related Editor.setTheme\n     **/\n    this.setTheme = function(theme) {\n        this.$editors.forEach(function(editor) {\n            editor.setTheme(theme);\n        });\n    };\n\n    /** \n     * \n     * @param {String} keybinding \n     * \n     * Sets the keyboard handler for the editor.\n     * @related editor.setKeyboardHandler\n     **/\n    this.setKeyboardHandler = function(keybinding) {\n        this.$editors.forEach(function(editor) {\n            editor.setKeyboardHandler(keybinding);\n        });\n    };\n\n    /** \n     * \n     * @param {Function} callback A callback function to execute\n     * @param {String} scope The default scope for the callback\n     * \n     * Executes `callback` on all of the available editors. \n     *\n     **/\n    this.forEach = function(callback, scope) {\n        this.$editors.forEach(callback, scope);\n    };\n\n\n    this.$fontSize = \"\";\n    /** \n     * @param {Number} size The new font size\n     * \n     * Sets the font size, in pixels, for all the available editors.\n     *\n     **/\n    this.setFontSize = function(size) {\n        this.$fontSize = size;\n        this.forEach(function(editor) {\n           editor.setFontSize(size);\n        });\n    };\n\n    this.$cloneSession = function(session) {\n        var s = new EditSession(session.getDocument(), session.getMode());\n\n        var undoManager = session.getUndoManager();\n        s.setUndoManager(undoManager);\n\n        // Copy over 'settings' from the session.\n        s.setTabSize(session.getTabSize());\n        s.setUseSoftTabs(session.getUseSoftTabs());\n        s.setOverwrite(session.getOverwrite());\n        s.setBreakpoints(session.getBreakpoints());\n        s.setUseWrapMode(session.getUseWrapMode());\n        s.setUseWorker(session.getUseWorker());\n        s.setWrapLimitRange(session.$wrapLimitRange.min,\n                            session.$wrapLimitRange.max);\n        s.$foldData = session.$cloneFoldData();\n\n        return s;\n    };\n\n   /** \n     * \n     * @param {EditSession} session The new edit session\n     * @param {Number} idx The editor's index you're interested in\n     * \n     * Sets a new [[EditSession `EditSession`]] for the indicated editor.\n     * @related Editor.setSession\n     **/\n    this.setSession = function(session, idx) {\n        var editor;\n        if (idx == null) {\n            editor = this.$cEditor;\n        } else {\n            editor = this.$editors[idx];\n        }\n\n        // Check if the session is used already by any of the editors in the\n        // split. If it is, we have to clone the session as two editors using\n        // the same session can cause terrible side effects (e.g. UndoQueue goes\n        // wrong). This also gives the user of Split the possibility to treat\n        // each session on each split editor different.\n        var isUsed = this.$editors.some(function(editor) {\n           return editor.session === session;\n        });\n\n        if (isUsed) {\n            session = this.$cloneSession(session);\n        }\n        editor.setSession(session);\n\n        // Return the session set on the editor. This might be a cloned one.\n        return session;\n    };\n\n   /** \n     * \n     * Returns the orientation.\n     * @returns {Number}\n     **/\n    this.getOrientation = function() {\n        return this.$orientation;\n    };\n\n   /** \n     * \n     * Sets the orientation.\n     * @param {Number} orientation The new orientation value\n     *\n     *\n     **/\n    this.setOrientation = function(orientation) {\n        if (this.$orientation == orientation) {\n            return;\n        }\n        this.$orientation = orientation;\n        this.resize();\n    };\n\n   /**  \n     * Resizes the editor.\n     **/\n    this.resize = function() {\n        var width = this.$container.clientWidth;\n        var height = this.$container.clientHeight;\n        var editor;\n\n        if (this.$orientation == this.BESIDE) {\n            var editorWidth = width / this.$splits;\n            for (var i = 0; i < this.$splits; i++) {\n                editor = this.$editors[i];\n                editor.container.style.width = editorWidth + \"px\";\n                editor.container.style.top = \"0px\";\n                editor.container.style.left = i * editorWidth + \"px\";\n                editor.container.style.height = height + \"px\";\n                editor.resize();\n            }\n        } else {\n            var editorHeight = height / this.$splits;\n            for (var i = 0; i < this.$splits; i++) {\n                editor = this.$editors[i];\n                editor.container.style.width = width + \"px\";\n                editor.container.style.top = i * editorHeight + \"px\";\n                editor.container.style.left = \"0px\";\n                editor.container.style.height = editorHeight + \"px\";\n                editor.resize();\n            }\n        }\n    };\n\n}).call(Split.prototype);\n\nexports.Split = Split;\n});\n"
  },
  {
    "path": "lib/ace/test/all.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n\"use strict\";\n\nrequire(\"amd-loader\");\nvar test = require(\"asyncjs\").test;\ntest.walkTestCases(__dirname + \"/..\").exec();\n"
  },
  {
    "path": "lib/ace/test/all_browser.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nrequire(\"ace/lib/fixoldbrowsers\");\nvar AsyncTest = require(\"asyncjs\").test;\nvar async = require(\"asyncjs\");\n\nvar passed = 0;\nvar failed = 0;\nvar log = document.getElementById(\"log\");\n\nvar testNames = [\n    \"ace/anchor_test\",\n    \"ace/background_tokenizer_test\",\n    \"ace/commands/command_manager_test\",\n    \"ace/config_test\",\n    \"ace/document_test\",\n    \"ace/edit_session_test\",\n    \"ace/editor_change_document_test\",\n    \"ace/editor_highlight_selected_word_test\",\n    \"ace/editor_navigation_test\",\n    \"ace/editor_text_edit_test\",\n    \"ace/ext/static_highlight_test\",\n    \"ace/ext/whitespace_test\",\n    \"ace/incremental_search_test\",\n    \"ace/keyboard/emacs_test\",\n    \"ace/keyboard/keybinding_test\",\n    \"ace/keyboard/vim_test\",\n    \"ace/layer/text_test\",\n    \"ace/lib/event_emitter_test\",\n    \"ace/mode/coffee/parser_test\",\n    \"ace/mode/coldfusion_test\",\n    \"ace/mode/css_test\",\n    \"ace/mode/css_worker\",\n    \"ace/mode/html_test\",\n    \"ace/mode/javascript_test\",\n    \"ace/mode/javascript_worker_test\",\n    \"ace/mode/logiql_test\",\n    \"ace/mode/python_test\",\n    \"ace/mode/text_test\",\n    \"ace/mode/xml_test\",\n    \"ace/mode/folding/cstyle_test\",\n    \"ace/mode/folding/html_test\",\n    \"ace/mode/folding/pythonic_test\",\n    \"ace/mode/folding/xml_test\",\n    \"ace/mode/folding/coffee_test\",\n    \"ace/mode/behaviour/behaviour_test\",\n    \"ace/multi_select_test\",\n    \"ace/mouse/mouse_handler_test\",\n    \"ace/occur_test\",\n    \"ace/placeholder_test\",\n    \"ace/range_test\",\n    \"ace/range_list_test\",\n    \"ace/search_test\",\n    \"ace/selection_test\",\n    \"ace/snippets_test\",\n    \"ace/token_iterator_test\",\n    \"ace/tokenizer_test\",\n    \"ace/undomanager_test\",\n    \"ace/virtual_renderer_test\"\n];\n\nvar html = [\"<a href='?'>all tests</a><br>\"];\nfor (var i in testNames) {\n    var href = testNames[i];\n    html.push(\"<a href='?\", href, \"'>\", href.replace(/^ace\\//, \"\") ,\"</a><br>\");\n}\n\n\nif (location.search.indexOf(\"show=1\") != -1) {\n    var VirtualRenderer = require(\"ace/virtual_renderer\").VirtualRenderer;\n    require(\"ace/test/mockrenderer\").MockRenderer = function() {\n        var el = document.createElement(\"div\");\n        el.style.position = \"fixed\";\n        el.style.left = \"20px\";\n        el.style.top = \"30px\";\n        el.style.width = \"500px\";\n        el.style.height = \"300px\";\n        document.body.appendChild(el);\n        \n        return new VirtualRenderer(el);\n    };\n}\n\n\nvar nav = document.createElement(\"div\");\nnav.innerHTML = html.join(\"\");\nnav.style.cssText = \"position:absolute;right:0;top:0\";\ndocument.body.appendChild(nav);\n\nif (location.search)\n    testNames = location.search.substr(1).split(\",\");\n\nvar filter = location.hash.substr(1);\n\nrequire(testNames, function() {\n    var tests = testNames.map(function(x) {\n        var module = require(x);\n        module.href = x;\n        return module;\n    });\n\n    async.list(tests)\n        .expand(function(test) {\n            if (filter) {\n                Object.keys(test).forEach(function(method) {\n                    if (method.match(/^>?test/) && !method.match(filter))\n                        test[method] = undefined;\n                });\n            }\n            return AsyncTest.testcase(test);\n        }, AsyncTest.TestGenerator)\n        .run()\n        .each(function(test, next) {\n            if (test.index == 1 && test.context.href) {\n                var href = test.context.href;\n                var node = document.createElement(\"div\");\n                node.innerHTML = \"<a href='?\" + href + \"'>\" + href.replace(/^ace\\//, \"\") + \"</a>\";\n                log.appendChild(node);\n            }\n            var node = document.createElement(\"div\");\n            node.className = test.passed ? \"passed\" : \"failed\";\n\n            var name = test.name;\n            if (test.suiteName)\n                name = test.suiteName + \": \" + test.name;\n\n            var msg = \"[\" + test.count + \"/\" + test.index + \"] \" + name + \" \" + (test.passed ? \"OK\" : \"FAIL\");\n            if (!test.passed) {\n                if (test.err.stack)\n                    var err = test.err.stack;\n                else\n                    var err = test.err;\n\n                console.error(msg);\n                console.error(err);\n                msg += \"<pre class='error'>\" + err + \"</pre>\";\n            } else {\n                console.log(msg);\n            }\n\n            node.innerHTML = msg;\n            log.appendChild(node);\n\n            next();\n        })\n        .each(function(test) {\n            if (test.passed)\n                passed += 1;\n            else\n                failed += 1;\n        })\n        .end(function() {\n            log.innerHTML += [\n                \"<div class='summary'>\",\n                \"<br>\",\n                \"Summary: <br>\",\n                \"<br>\",\n                \"Total number of tests: \" + (passed + failed) + \"<br>\",\n                (passed ? \"Passed tests: \" + passed + \"<br>\" : \"\"),\n                (failed ? \"Failed tests: \" + failed + \"<br>\" : \"\")\n            ].join(\"\");\n            console.log(\"Total number of tests: \" + (passed + failed));\n            console.log(\"Passed tests: \" + passed);\n            console.log(\"Failed tests: \" + failed);\n        });\n});\n\n});\n"
  },
  {
    "path": "lib/ace/test/assertions.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar assert = require(\"assert\");\n    \nassert.position = function(cursor, row, column) {\n    assert.equal(cursor.row, row);\n    assert.equal(cursor.column, column);\n};\n\nassert.range = function(range, startRow, startColumn, endRow, endColumn) {\n    assert.position(range.start, startRow, startColumn);\n    assert.position(range.end, endRow, endColumn);\n};\n\nassert.notOk = function(value) {\n    assert.equal(value, false);   \n};\n\nexports.jsonEquals = function(foundJson, expectedJson) {\n    assert.equal(JSON.stringify(foundJson), JSON.stringify(expectedJson));\n};\n\nmodule.exports = assert;\n\n});\n"
  },
  {
    "path": "lib/ace/test/asyncjs/assert.js",
    "content": "define(function(require, exports, module) {\n\n// http://wiki.commonjs.org/wiki/Unit_Testing/1.0\n//\n// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!\n//\n// Originally from narwhal.js (http://narwhaljs.org)\n// Copyright (c) 2009 Thomas Robinson <280north.com>\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the 'Software'), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// UTILITY\nvar oop = require(\"ace/lib/oop\");\nvar pSlice = Array.prototype.slice;\n\n// 1. The assert module provides functions that throw\n// AssertionError's when particular conditions are not met. The\n// assert module must conform to the following interface.\n\nvar assert = exports;\n\n// 2. The AssertionError is defined in assert.\n// new assert.AssertionError({ message: message,\n//                             actual: actual,\n//                             expected: expected })\n\nassert.AssertionError = function AssertionError(options) {\n  this.name = 'AssertionError';\n  this.message = options.message;\n  this.actual = options.actual;\n  this.expected = options.expected;\n  this.operator = options.operator;\n  var stackStartFunction = options.stackStartFunction || fail;\n\n  if (Error.captureStackTrace) {\n    Error.captureStackTrace(this, stackStartFunction);\n  }\n};\noop.inherits(assert.AssertionError, Error);\n\ntoJSON = function(obj) {\n    if (typeof JSON !== \"undefined\")\n        return JSON.stringify(obj);\n    else\n        return obj.toString();\n}\n\nassert.AssertionError.prototype.toString = function() {\n  if (this.message) {\n    return [this.name + ':', this.message].join(' ');\n  } else {\n    return [this.name + ':',\n            toJSON(this.expected),\n            this.operator,\n            toJSON(this.actual)].join(' ');\n  }\n};\n\n// assert.AssertionError instanceof Error\n\nassert.AssertionError.__proto__ = Error.prototype;\n\n// At present only the three keys mentioned above are used and\n// understood by the spec. Implementations or sub modules can pass\n// other keys to the AssertionError's constructor - they will be\n// ignored.\n\n// 3. All of the following functions must throw an AssertionError\n// when a corresponding condition is not met, with a message that\n// may be undefined if not provided.  All assertion methods provide\n// both the actual and expected values to the assertion error for\n// display purposes.\n\nfunction fail(actual, expected, message, operator, stackStartFunction) {\n  throw new assert.AssertionError({\n    message: message,\n    actual: actual,\n    expected: expected,\n    operator: operator,\n    stackStartFunction: stackStartFunction\n  });\n}\n\n// EXTENSION! allows for well behaved errors defined elsewhere.\nassert.fail = fail;\n\n// 4. Pure assertion tests whether a value is truthy, as determined\n// by !!guard.\n// assert.ok(guard, message_opt);\n// This statement is equivalent to assert.equal(true, guard,\n// message_opt);. To test strictly for the value true, use\n// assert.strictEqual(true, guard, message_opt);.\n\nassert.ok = function ok(value, message) {\n  if (!!!value) fail(value, true, message, '==', assert.ok);\n};\n\n// 5. The equality assertion tests shallow, coercive equality with\n// ==.\n// assert.equal(actual, expected, message_opt);\n\nassert.equal = function equal(actual, expected, message) {\n  if (actual != expected) fail(actual, expected, message, '==', assert.equal);\n};\n\n// 6. The non-equality assertion tests for whether two objects are not equal\n// with != assert.notEqual(actual, expected, message_opt);\n\nassert.notEqual = function notEqual(actual, expected, message) {\n  if (actual == expected) {\n    fail(actual, expected, message, '!=', assert.notEqual);\n  }\n};\n\n// 7. The equivalence assertion tests a deep equality relation.\n// assert.deepEqual(actual, expected, message_opt);\n\nassert.deepEqual = function deepEqual(actual, expected, message) {\n  if (!_deepEqual(actual, expected)) {\n    fail(actual, expected, message, 'deepEqual', assert.deepEqual);\n  }\n};\n\nfunction _deepEqual(actual, expected) {\n  // 7.1. All identical values are equivalent, as determined by ===.\n  if (actual === expected) {\n    return true;\n\n  } else if (typeof Buffer !== \"undefined\" && Buffer.isBuffer(actual) && Buffer.isBuffer(expected)) {\n    if (actual.length != expected.length) return false;\n\n    for (var i = 0; i < actual.length; i++) {\n      if (actual[i] !== expected[i]) return false;\n    }\n\n    return true;\n\n  // 7.2. If the expected value is a Date object, the actual value is\n  // equivalent if it is also a Date object that refers to the same time.\n  } else if (actual instanceof Date && expected instanceof Date) {\n    return actual.getTime() === expected.getTime();\n\n  // 7.3. Other pairs that do not both pass typeof value == 'object',\n  // equivalence is determined by ==.\n  } else if (typeof actual != 'object' && typeof expected != 'object') {\n    return actual == expected;\n\n  // 7.4. For all other Object pairs, including Array objects, equivalence is\n  // determined by having the same number of owned properties (as verified\n  // with Object.prototype.hasOwnProperty.call), the same set of keys\n  // (although not necessarily the same order), equivalent values for every\n  // corresponding key, and an identical 'prototype' property. Note: this\n  // accounts for both named and indexed properties on Arrays.\n  } else {\n    return objEquiv(actual, expected);\n  }\n}\n\nfunction isUndefinedOrNull(value) {\n  return value === null || value === undefined;\n}\n\nfunction isArguments(object) {\n  return Object.prototype.toString.call(object) == '[object Arguments]';\n}\n\nfunction objEquiv(a, b) {\n  if (isUndefinedOrNull(a) || isUndefinedOrNull(b))\n    return false;\n  // an identical 'prototype' property.\n  if (a.prototype !== b.prototype) return false;\n  //~~~I've managed to break Object.keys through screwy arguments passing.\n  //   Converting to array solves the problem.\n  if (isArguments(a)) {\n    if (!isArguments(b)) {\n      return false;\n    }\n    a = pSlice.call(a);\n    b = pSlice.call(b);\n    return _deepEqual(a, b);\n  }\n  try {\n    var ka = Object.keys(a),\n        kb = Object.keys(b),\n        key, i;\n  } catch (e) {//happens when one is a string literal and the other isn't\n    return false;\n  }\n  // having the same number of owned properties (keys incorporates\n  // hasOwnProperty)\n  if (ka.length != kb.length)\n    return false;\n  //the same set of keys (although not necessarily the same order),\n  ka.sort();\n  kb.sort();\n  //~~~cheap key test\n  for (i = ka.length - 1; i >= 0; i--) {\n    if (ka[i] != kb[i])\n      return false;\n  }\n  //equivalent values for every corresponding key, and\n  //~~~possibly expensive deep test\n  for (i = ka.length - 1; i >= 0; i--) {\n    key = ka[i];\n    if (!_deepEqual(a[key], b[key])) return false;\n  }\n  return true;\n}\n\n// 8. The non-equivalence assertion tests for any deep inequality.\n// assert.notDeepEqual(actual, expected, message_opt);\n\nassert.notDeepEqual = function notDeepEqual(actual, expected, message) {\n  if (_deepEqual(actual, expected)) {\n    fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);\n  }\n};\n\n// 9. The strict equality assertion tests strict equality, as determined by ===.\n// assert.strictEqual(actual, expected, message_opt);\n\nassert.strictEqual = function strictEqual(actual, expected, message) {\n  if (actual !== expected) {\n    fail(actual, expected, message, '===', assert.strictEqual);\n  }\n};\n\n// 10. The strict non-equality assertion tests for strict inequality, as\n// determined by !==.  assert.notStrictEqual(actual, expected, message_opt);\n\nassert.notStrictEqual = function notStrictEqual(actual, expected, message) {\n  if (actual === expected) {\n    fail(actual, expected, message, '!==', assert.notStrictEqual);\n  }\n};\n\nfunction expectedException(actual, expected) {\n  if (!actual || !expected) {\n    return false;\n  }\n\n  if (expected instanceof RegExp) {\n    return expected.test(actual);\n  } else if (actual instanceof expected) {\n    return true;\n  } else if (expected.call({}, actual) === true) {\n    return true;\n  }\n\n  return false;\n}\n\nfunction _throws(shouldThrow, block, expected, message) {\n  var actual;\n\n  if (typeof expected === 'string') {\n    message = expected;\n    expected = null;\n  }\n\n  try {\n    block();\n  } catch (e) {\n    actual = e;\n  }\n\n  message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +\n            (message ? ' ' + message : '.');\n\n  if (shouldThrow && !actual) {\n    fail('Missing expected exception' + message);\n  }\n\n  if (!shouldThrow && expectedException(actual, expected)) {\n    fail('Got unwanted exception' + message);\n  }\n\n  if ((shouldThrow && actual && expected &&\n      !expectedException(actual, expected)) || (!shouldThrow && actual)) {\n    throw actual;\n  }\n}\n\n// 11. Expected to throw an error:\n// assert.throws(block, Error_opt, message_opt);\n\nassert.throws = function(block, /*optional*/error, /*optional*/message) {\n  _throws.apply(this, [true].concat(pSlice.call(arguments)));\n};\n\n// EXTENSION! This is annoying to write outside this module.\nassert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {\n  _throws.apply(this, [false].concat(pSlice.call(arguments)));\n};\n\nassert.ifError = function(err) { if (err) {throw err;}};\n\n});\n"
  },
  {
    "path": "lib/ace/test/asyncjs/async.js",
    "content": "/*!\n * async.js\n * Copyright(c) 2010 Fabian Jakobs <fabian.jakobs@web.de>\n * MIT Licensed\n */\n\ndefine(function(require, exports, module) {\n\nvar STOP = exports.STOP = {}\n\nexports.Generator = function(source) {\n    if (typeof source == \"function\")\n        this.source = {\n            next: source\n        }\n    else\n        this.source = source\n}\n\n;(function() {\n    this.next = function(callback) {\n        this.source.next(callback)\n    }\n\n    this.map = function(mapper) {\n        if (!mapper)\n            return this\n            \n        mapper = makeAsync(1, mapper)\n        \n        var source = this.source\n        this.next = function(callback) {\n            source.next(function(err, value) {\n                if (err)\n                    callback(err)\n                else {\n                    mapper(value, function(err, value) {\n                        if (err)\n                            callback(err)\n                        else\n                            callback(null, value)\n                    })\n                }\n            })\n        }\n        return new this.constructor(this)\n    }\n    \n    this.filter = function(filter) {\n        if (!filter)\n            return this\n            \n        filter = makeAsync(1, filter)\n        \n        var source = this.source\n        this.next = function(callback) {\n            source.next(function handler(err, value) {\n                if (err)\n                    callback(err)\n                else {\n                    filter(value, function(err, takeIt) {\n                        if (err)\n                            callback(err)\n                        else if (takeIt)\n                            callback(null, value)\n                        else\n                            source.next(handler)\n                    })\n                }\n            })\n        }\n        return new this.constructor(this)\n    }\n\n    this.slice = function(begin, end) {\n        var count = -1\n        if (!end || end < 0)\n            var end = Infinity\n        \n        var source = this.source\n        this.next = function(callback) {\n            source.next(function handler(err, value) {\n                count++\n                if (err)\n                    callback(err)\n                else if (count >= begin && count < end)\n                    callback(null, value)\n                else if (count >= end)\n                    callback(STOP)\n                else\n                    source.next(handler)\n            })\n        }\n        return new this.constructor(this)\n    }\n    \n    this.reduce = function(reduce, initialValue) {\n        reduce = makeAsync(3, reduce)\n\n        var index = 0\n        var done = false\n        var previousValue = initialValue\n        \n        var source = this.source\n        this.next = function(callback) {\n            if (done)\n                return callback(STOP)\n\n            if (initialValue === undefined) {\n                source.next(function(err, currentValue) {\n                    if (err)\n                        return callback(err, previousValue)\n                    \n                    previousValue = currentValue\n                    reduceAll()\n                })\n            }\n            else\n                reduceAll()\n\n            function reduceAll() {\n                source.next(function handler(err, currentValue) {                    \n                    if (err) {\n                        done = true\n                        if (err == STOP)                            \n                            return callback(null, previousValue)\n                        else\n                            return(err)\n                    }\n                    reduce(previousValue, currentValue, index++, function(err, value) {\n                        previousValue = value\n                        source.next(handler)\n                    })\n                })\n            }            \n        }\n        return new this.constructor(this)\n    }\n    \n    this.forEach =\n    this.each = function(fn) {\n        fn = makeAsync(1, fn)\n            \n        var source = this.source\n        this.next = function(callback) {\n            source.next(function handler(err, value) {\n                if (err) \n                    callback(err)\n                else {\n                    fn(value, function(err) {\n                        callback(err, value)\n                    })\n                }\n            })\n        }\n        return new this.constructor(this)\n    }\n    \n    this.some = function(condition) {\n        condition = makeAsync(1, condition)\n        \n        var source = this.source\n        var done = false\n        this.next = function(callback) {\n            if (done)\n                return callback(STOP)\n            \n            source.next(function handler(err, value) {\n                if (err)\n                    return callback(err)\n                    \n                condition(value, function(err, result) {\n                    if (err) {\n                        done = true\n                        if (err == STOP)\n                            callback(null, false)\n                        else\n                            callback(err)\n                    }                        \n                    else if (result) {\n                        done = true\n                        callback(null, true)\n                    }\n                    else \n                        source.next(handler)\n                })\n            })\n        }\n        return new this.constructor(this)\n    }\n    \n    this.every = function(condition) {\n        condition = makeAsync(1, condition)\n        \n        var source = this.source\n        var done = false\n        this.next = function(callback) {\n            if (done)\n                return callback(STOP)\n            \n            source.next(function handler(err, value) {\n                if (err)\n                    return callback(err)\n                    \n                condition(value, function(err, result) {\n                    if (err) {\n                        done = true\n                        if (err == STOP)\n                            callback(null, true)\n                        else\n                            callback(err)\n                    }                        \n                    else if (!result) {\n                        done = true\n                        callback(null, false)\n                    }\n                    else \n                        source.next(handler)\n                })\n            })\n        }\n        return new this.constructor(this)\n    }\n    \n    this.call = function(context) {\n        var source = this.source\n        return this.map(function(fn, next) {\n            fn = makeAsync(0, fn, context)\n            fn.call(context, function(err, value) {\n                next(err, value)\n            })\n        })\n    }\n    \n    this.concat = function(generator) {\n        var generators = [this]\n        generators.push.apply(generators, arguments)\n        var index = 0\n        var source = generators[index++]\n        \n        return new this.constructor(function(callback) {            \n            source.next(function handler(err, value) {\n                if (err) {\n                    if (err == STOP) {\n                        source = generators[index++]\n                        if (!source)\n                            return callback(STOP)\n                        else\n                            return source.next(handler)\n                    }\n                    else\n                        return callback(err)\n                }\n                else\n                    return callback(null, value)\n            })\n        })\n    }\n    \n    this.zip = function(generator) {\n        var generators = [this]\n        generators.push.apply(generators, arguments)\n        \n        return new this.constructor(function(callback) {\n            exports.list(generators)\n                .map(function(gen, next) {                    \n                    gen.next(next)\n                })\n                .toArray(callback)\n        })\n    }\n    \n    this.expand = function(inserter, constructor) {\n       if (!inserter)\n            return this\n            \n        var inserter = makeAsync(1, inserter)\n        var constructor = constructor || this.constructor\n        var source = this.source;\n        var spliced = null;\n        \n        return new constructor(function next(callback) {\n            if (!spliced) {\n                source.next(function(err, value) {\n                    if (err)\n                        return callback(err)\n                        \n                    inserter(value, function(err, toInsert) {\n                        if (err)\n                            return callback(err)\n                            \n                        spliced = toInsert                        \n                        next(callback)\n                    })\n\n                })\n            } \n            else {\n                spliced.next(function(err, value) {\n                    if (err == STOP) {\n                        spliced = null\n                        return next(callback)\n                    }\n                    else if (err)\n                        return callback(err)\n                    \n                    callback(err, value)\n                })\n            }\n        })\n    }\n\n    this.sort = function(compare) {\n        var self = this\n        var arrGen\n        this.next = function(callback) {\n            if (arrGen)\n                return arrGen.next(callback)\n\n            self.toArray(function(err, arr) {\n                if (err)\n                    callback(err)\n                else {\n                    arrGen = exports.list(arr.sort(compare))\n                    arrGen.next(callback)\n                }\n            })            \n        }\n        return new this.constructor(this)\n    }\n\n    this.join = function(separator) {\n        return this.$arrayOp(Array.prototype.join, separator !== undefined ? [separator] : null)\n    }\n    \n    this.reverse = function() {\n        return this.$arrayOp(Array.prototype.reverse)\n    }\n    \n    this.$arrayOp = function(arrayMethod, args) {\n        var self = this\n        var i = 0\n        this.next = function(callback) {\n            if (i++ > 0)\n                return callback(STOP)\n                \n            self.toArray(function(err, arr) {\n                if (err)\n                    callback(err, \"\")\n                else {\n                    if (args)\n                        callback(null, arrayMethod.apply(arr, args))\n                    else\n                        callback(null, arrayMethod.call(arr))\n                }\n            })\n        }\n        return new this.constructor(this)\n        \n    }\n    \n    this.end = function(breakOnError, callback) {\n        if (!callback) {\n            callback = arguments[0]\n            breakOnError = true\n        }\n\n        var source = this.source\n        var last\n        var lastError\n        source.next(function handler(err, value) {\n            if (err) {\n                if (err == STOP)\n                    callback && callback(lastError, last)\n                else if (!breakOnError) {\n                    lastError = err\n                    source.next(handler)\n                }\n                else\n                    callback && callback(err, value)\n            }\n            else  {\n                last = value\n                source.next(handler)\n            }\n        })\n    }\n\n    this.toArray = function(breakOnError, callback) {\n        if (!callback) {\n            callback = arguments[0]\n            breakOnError = true\n        }\n        \n        var values = []\n        var errors = []\n        var source = this.source\n        \n        source.next(function handler(err, value) {\n            if (err) {\n                if (err == STOP) {\n                    if (breakOnError)\n                        return callback(null, values)\n                    else {\n                        errors.length = values.length\n                        return callback(errors, values)\n                    }\n                }\n                else {\n                    if (breakOnError)\n                        return callback(err)\n                    else\n                        errors[values.length] = err\n                }\n            }\n\n            values.push(value)\n            source.next(handler)\n        })\n    }\n\n}).call(exports.Generator.prototype)\n\nvar makeAsync = exports.makeAsync = function(args, fn, context) {\n    if (fn.length > args) \n        return fn\n    else {\n        return function() {\n            var value\n            var next = arguments[args]\n            try {\n                value = fn.apply(context || this, arguments)\n            } catch(e) {\n                return next(e)\n            }\n            next(null, value)\n        }\n    }\n}\n\nexports.list = function(arr, construct) {\n    var construct = construct || exports.Generator\n    var i = 0\n    var len = arr.length\n    \n    return new construct(function(callback) {\n        if (i < len)\n            callback(null, arr[i++])\n        else\n            callback(STOP)\n    })\n}\n\nexports.values = function(map, construct) {\n    var values = []\n    for (var key in map) \n        values.push(map[key])\n        \n    return exports.list(values, construct)\n}\n\nexports.keys = function(map, construct) {\n    var keys = []\n    for (var key in map) \n        keys.push(key)\n        \n    return exports.list(keys, construct)\n}\n\n/*\n * range([start,] stop[, step]) -> generator of integers\n *\n * Return a generator containing an arithmetic progression of integers.\n * range(i, j) returns [i, i+1, i+2, ..., j-1] start (!) defaults to 0.\n * When step is given, it specifies the increment (or decrement).\n */ \nexports.range = function(start, stop, step, construct) {\n    var construct = construct || exports.Generator\n    start = start || 0\n    step = step || 1\n    \n    if (stop === undefined || stop === null)\n        stop = step > 0 ? Infinity : -Infinity\n        \n    var value = start\n    \n    return new construct(function(callback) {\n        if (step > 0 && value >= stop || step < 0 && value <= stop)\n            callback(STOP)\n        else {\n            var current = value\n            value += step\n            callback(null, current)\n        }\n    })\n}\n\nexports.concat = function(first, varargs) {\n    if (arguments.length > 1)\n        return first.concat.apply(first, Array.prototype.slice.call(arguments, 1))\n    else\n        return first\n}\n\nexports.zip = function(first, varargs) {\n    if (arguments.length > 1)\n        return first.zip.apply(first, Array.prototype.slice.call(arguments, 1))\n    else\n        return first.map(function(item, next) {\n            next(null, [item])\n        })\n}\n\n\nexports.plugin = function(members, constructors) {\n    if (members) {\n        for (var key in members) {\n            exports.Generator.prototype[key] = members[key]\n        }\n    }\n\n    if (constructors) {\n        for (var key in constructors) {\n            exports[key] = constructors[key]\n        }\n    }    \n}\n\n})\n"
  },
  {
    "path": "lib/ace/test/asyncjs/index.js",
    "content": "/*!\n * async.js\n * Copyright(c) 2010 Fabian Jakobs <fabian.jakobs@web.de>\n * MIT Licensed\n */\n\ndefine(function(require, exports, module) {\n    \nmodule.exports = require(\"./async\")\nmodule.exports.test = require(\"./test\")\nrequire(\"./utils\")\n\n})\n"
  },
  {
    "path": "lib/ace/test/asyncjs/test.js",
    "content": "/*!\n * async.js\n * Copyright(c) 2010 Fabian Jakobs <fabian.jakobs@web.de>\n * MIT Licensed\n */\n\ndefine(function(require, exports, module) {\n\nvar oop = require(\"ace/lib/oop\")\nvar async = require(\"asyncjs/async\")\nrequire(\"asyncjs/utils\")\n\nexports.TestGenerator = function(source) {\n    async.Generator.call(this, source)\n}\n\noop.inherits(exports.TestGenerator, async.Generator)\n\n;(function() {\n    \n    this.exec = function() {\n        this.run().report().summary(function(err, passed) {\n            console.log(\"DONE\")\n        })\n    }\n    \n    this.run = function() {\n        return this.setupTest()\n            .each(function(test, next) {\n                if (test.setUpSuite)\n                    test.setUpSuite(next)\n                else\n                    next()\n            })\n            .each(function(test, next) {\n                test.test(function(err, passed) {\n                    test.err = err\n                    test.passed = passed\n                    next()\n                })\n            })\n            .each(function(test, next) {\n                if (test.tearDownSuite)\n                    test.tearDownSuite(next)\n                else\n                    next()\n            })\n    }\n    \n    this.report = function() {\n        return this.each(function(test, next) {\n            var color = test.passed ? \"\\x1b[32m\" : \"\\x1b[31m\"\n            var name = test.name\n            if (test.suiteName)\n                name = test.suiteName + \": \" + test.name\n            console.log(color + \"[\" + test.count + \"/\" + test.index + \"] \" + name + \" \" + (test.passed ? \"OK\" : \"FAIL\") + \"\\x1b[0m\")\n            if (!test.passed)                \n                if (test.err.stack)\n                    console.log(test.err.stack)\n                else\n                    console.log(test.err)\n                    \n            next()\n        })\n    }\n    \n    this.summary = function(callback) {\n        var passed = 0\n        var failed = 0\n        \n        this.each(function(test) {\n            if (test.passed)\n                passed += 1\n            else\n                failed += 1\n        }).end(function() {\n            console.log(\"\")\n            console.log(\"Summary:\")\n            console.log(\"\")\n            console.log(                  \"Total number of tests: \" + (passed + failed))\n            passed && console.log(\"\\x1b[32mPassed tests:          \" + passed + \"\\x1b[0m\")\n            failed && console.log(\"\\x1b[31mFailed tests:          \" + failed + \"\\x1b[0m\")\n            console.log(\"\")            \n            callback(null, failed == 0)\n        })\n    }\n    \n    this.setupTest = function() {\n        return this.each(function(test, next) {\n            var empty = function(next) { next() }\n            var context = test.context || this\n            \n            if (test.setUp)\n                var setUp = async.makeAsync(0, test.setUp, context)\n            else \n                setUp = empty\n\n            tearDownCalled = false\n            if (test.tearDown)\n                var tearDownInner = async.makeAsync(0, test.tearDown, context)\n            else\n                tearDownInner = empty\n                \n            function tearDown(next) {\n                tearDownCalled = true\n                tearDownInner.call(test.context, next)\n            }\n\n            var testFn = async.makeAsync(0, test.fn, context)\n                \n            test.test = function(callback) {    \n                var called            \n                function errorListener(e) {\n                    if (called)\n                        return\n                    called = true\n                    //process.removeListener('uncaughtException', errorListener)\n                    if (!tearDownCalled) {\n                        async.list([tearDown])\n                            .call()\n                            .timeout(test.timeout)\n                            .end(function() {\n                                callback(e, false)\n                            })                    }\n                    else\n                        callback(e, false)\n                }\n                //process.addListener('uncaughtException', errorListener)\n                \n                async.list([setUp, testFn, tearDown])\n                    .delay(0)\n                    .call(context)\n                    .timeout(test.timeout)\n                    .toArray(false, function(errors, values) {\n                        if (called)\n                            return\n                        called = true\n                        var err = errors[1]\n                        //process.removeListener('uncaughtException', errorListener)                            \n                        callback(err, !err)                        \n                    })\n            }\n            \n            next()\n        })\n    }\n    \n}).call(exports.TestGenerator.prototype)\n\nexports.testcase = function(testcase, suiteName, timeout) {\n    var methods = []\n    for (var method in testcase)\n        methods.push(method)\n        \n    var setUp = testcase.setUp || null\n    var tearDown = testcase.tearDown || null\n    \n    var single\n    methods.forEach(function(name) {\n        if (name.charAt(0) == '>')\n           single = name\n    })\n    if (single)\n        methods = [single]\n    \n    var testNames = methods.filter(function(method) { \n        return method.match(/^>?test/) && typeof(testcase[method]) == \"function\"\n    })\n    var count = testNames.length\n    var i=1\n    tests = testNames.map(function(name) {\n        return {\n            suiteName: suiteName || testcase.name || \"\",\n            name: name,\n            setUp: setUp,\n            tearDown: tearDown,\n            context: testcase,\n            timeout: timeout === undefined ? 3000 : timeout,\n            fn: testcase[name],\n            count: count,\n            index: i++\n        }\n    })\n\n    if (testcase.setUpSuite) {\n        tests[0].setUpSuite = async.makeAsync(0, testcase.setUpSuite, testcase)\n    }\n    if (testcase.tearDownSuite) {\n        tests[tests.length-1].tearDownSuite = async.makeAsync(0, testcase.tearDownSuite, testcase)\n    }\n\n    return async.list(tests, exports.TestGenerator)\n}\n\n})\n"
  },
  {
    "path": "lib/ace/test/asyncjs/utils.js",
    "content": "/*!\n * async.js\n * Copyright(c) 2010 Fabian Jakobs <fabian.jakobs@web.de>\n * MIT Licensed\n */\n\ndefine(function(require, exports, module) {\n\nvar async = require(\"asyncjs/async\")\n\nasync.plugin({\n    delay: function(delay) {\n        return this.each(function(item, next) {\n            setTimeout(function() {\n                next();\n            }, delay)\n        })\n    },\n    \n    timeout: function(timeout) {\n        timeout = timeout || 0\n        var source = this.source\n        \n        this.next = function(callback) {\n            var called            \n            var id = setTimeout(function() {\n                called = true\n                callback(\"Source did not respond after \" + timeout + \"ms!\")\n            }, timeout)\n            \n            source.next(function(err, value) {\n                if (called)\n                    return\n\n                called = true\n                clearTimeout(id)\n                \n                callback(err, value)\n            })\n        }\n        return new this.constructor(this)\n    },\n    \n    get: function(key) {\n        return this.map(function(value, next) {\n            next(null, value[key])\n        })\n    },\n    \n    inspect: function() {\n        return this.each(function(item, next) {\n            console.log(JSON.stringify(item))\n            next()\n        })\n    },\n    \n    print: function() {\n        return this.each(function(item, next) {\n            console.log(item)\n            next()\n        })\n    }    \n})\n\n})\n"
  },
  {
    "path": "lib/ace/test/benchmark.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\nif (typeof process !== \"undefined\") {\n    require(\"amd-loader\");\n}\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar EditSession = require(\"../edit_session\").EditSession;\n\nmodule.exports = {\n    setUp : function() {\n        this.start = Date.now();\n    },\n    \n    tearDown : function() {\n        console.log(\"took: \", Date.now() - this.start + \"ms\");\n    },\n    \n    \"test: document to screen position\": function() {\n        var s = new EditSession(Array(6000).join('someText\\n'));\n\n        for (var i=0; i<6000; i++)\n            s.documentToScreenPosition(i, 0);\n\n        for (var i=0; i<6000; i++)\n            s.documentToScreenPosition(i, 0);\n\n        console.log(s.$rowCache.length);\n    },\n    \n    \"test: screen to document position\": function() {\n        var s = new EditSession(Array(6000).join('someText\\n'));\n\n        for (var i=0; i<6000; i++)\n            s.screenToDocumentPosition(i, 0);\n\n        for (var i=0; i<6000; i++)\n            s.documentToScreenPosition(i, 0);\n\n        console.log(s.$rowCache.length);\n    }\n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main) {\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n}\n"
  },
  {
    "path": "lib/ace/test/mockdom.js",
    "content": "\"use strict\";\n\nvar jsdom = require('jsdom/').jsdom;\nvar doc = jsdom(\"<html><head></head><body></body></html>\");\n\nglobal.document     = doc;\nglobal.window       = doc.defaultView;\nglobal.self         = doc.self;\nglobal.navigator    = doc.navigator;\nglobal.location     = doc.location;\n"
  },
  {
    "path": "lib/ace/test/mockrenderer.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar MockRenderer = exports.MockRenderer = function(visibleRowCount) {\n    if (typeof document == \"object\") {\n        this.container = document.createElement(\"div\");\n        this.scroller = document.createElement(\"div\");\n    }\n    this.visibleRowCount = visibleRowCount || 20;\n\n    this.layerConfig = {\n        firstVisibleRow : 0,\n        lastVisibleRow : this.visibleRowCount\n    };\n\n    this.isMockRenderer = true;\n\n    this.$gutter = {};\n};\n\n\nMockRenderer.prototype.getFirstVisibleRow = function() {\n    return this.layerConfig.firstVisibleRow;\n};\n\nMockRenderer.prototype.getLastVisibleRow = function() {\n    return this.layerConfig.lastVisibleRow;\n};\n\nMockRenderer.prototype.getFirstFullyVisibleRow = function() {\n    return this.layerConfig.firstVisibleRow;\n};\n\nMockRenderer.prototype.getLastFullyVisibleRow = function() {\n    return this.layerConfig.lastVisibleRow;\n};\n\nMockRenderer.prototype.getContainerElement = function() {\n    return this.container;\n};\n\nMockRenderer.prototype.getMouseEventTarget = function() {\n    return this.container;\n};\n\nMockRenderer.prototype.getTextAreaContainer = function() {\n    return this.container;\n};\n\nMockRenderer.prototype.addGutterDecoration = function() {\n};\n\nMockRenderer.prototype.removeGutterDecoration = function() {\n};\n\nMockRenderer.prototype.moveTextAreaToCursor = function() {\n};\n\nMockRenderer.prototype.setSession = function(session) {\n    this.session = session;\n};\n\nMockRenderer.prototype.getSession = function(session) {\n    return this.session;\n};\n\nMockRenderer.prototype.setTokenizer = function() {\n};\n\nMockRenderer.prototype.on = function() {\n};\n\nMockRenderer.prototype.updateCursor = function() {\n};\n\nMockRenderer.prototype.animateScrolling = function(fromValue, callback) {\n    callback && callback();\n};\n\nMockRenderer.prototype.scrollToX = function(scrollTop) {};\nMockRenderer.prototype.scrollToY = function(scrollLeft) {};\n\nMockRenderer.prototype.scrollToLine = function(line, center) {\n    var lineHeight = 16;\n    var row = 0;\n    for (var l = 1; l < line; l++) {\n        row += this.session.getRowLength(l-1);\n    }\n\n    if (center) {\n        row -= this.visibleRowCount / 2;\n    }\n    this.scrollToRow(row);\n};\n\nMockRenderer.prototype.scrollSelectionIntoView = function() {\n};\n\nMockRenderer.prototype.scrollCursorIntoView = function() {\n    var cursor = this.session.getSelection().getCursor();\n    if (cursor.row < this.layerConfig.firstVisibleRow) {\n        this.scrollToRow(cursor.row);\n    }\n    else if (cursor.row > this.layerConfig.lastVisibleRow) {\n        this.scrollToRow(cursor.row);\n    }\n};\n\nMockRenderer.prototype.scrollToRow = function(row) {\n    var row = Math.min(this.session.getLength() - this.visibleRowCount, Math.max(0,\n                                                                          row));\n    this.layerConfig.firstVisibleRow = row;\n    this.layerConfig.lastVisibleRow = row + this.visibleRowCount;\n};\n\nMockRenderer.prototype.getScrollTopRow = function() {\n  return this.layerConfig.firstVisibleRow;\n};\n\nMockRenderer.prototype.draw = function() {\n};\n\nMockRenderer.prototype.onChangeTabSize = function(startRow, endRow) {\n};\n\nMockRenderer.prototype.updateLines = function(startRow, endRow) {\n};\n\nMockRenderer.prototype.updateBackMarkers = function() {\n};\n\nMockRenderer.prototype.updateFrontMarkers = function() {\n};\n\nMockRenderer.prototype.updateBreakpoints = function() {\n};\n\nMockRenderer.prototype.onResize = function() {\n};\n\nMockRenderer.prototype.updateFull = function() {\n};\n\nMockRenderer.prototype.updateText = function() {\n};\n\nMockRenderer.prototype.showCursor = function() {\n};\n\nMockRenderer.prototype.visualizeFocus = function() {\n};\n\nMockRenderer.prototype.setAnnotations = function() {\n};\n\nMockRenderer.prototype.setStyle = function() {\n};\n\nMockRenderer.prototype.unsetStyle = function() {\n};\n\nMockRenderer.prototype.textToScreenCoordinates = function() {\n    return {\n        pageX: 0,\n        pageY: 0\n    };\n};\n\nMockRenderer.prototype.screenToTextCoordinates = function() {\n    return {\n        row: 0,\n        column: 0\n    };\n};\n\nMockRenderer.prototype.adjustWrapLimit = function () {\n\n};\n\n});\n"
  },
  {
    "path": "lib/ace/test/tests.html",
    "content": "\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\">\n  <title>Ace Unit Tests</title>\n  <style type=\"text/css\" media=\"screen\">\n\n    #log .passed {\n        color: green;\n    }\n    \n    #log .failed {\n        color: red;\n    }\n    \n    #log pre.error {\n        color: black;\n    }\n  </style>\n</head>\n<body>\n    \n<div id=\"log\"></div>\n\n<script type=\"text/javascript\">\n    var require = {\n        paths: {\n            ace: \"../\"\n        },\n        packages : [{\n            name: \"asyncjs\",\n            location: \"./asyncjs\",\n            main: \"index\"\n        }, {\n            name: \"assert\",\n            location: \"./asyncjs\",\n            main: \"assert\"\n        }]\n    };\n</script>\n<script src=\"../../../demo/kitchen-sink/require.js\" data-main=\"all_browser\" type=\"text/javascript\" charset=\"utf-8\"></script>\n\n\n</body>\n</html>\n"
  },
  {
    "path": "lib/ace/theme/ambiance.css",
    "content": ".ace-ambiance .ace_gutter {\n  background-color: #3d3d3d;\n  background-image: -moz-linear-gradient(left, #3D3D3D, #333);\n  background-image: -ms-linear-gradient(left, #3D3D3D, #333);\n  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#3D3D3D), to(#333));\n  background-image: -webkit-linear-gradient(left, #3D3D3D, #333);\n  background-image: -o-linear-gradient(left, #3D3D3D, #333);\n  background-image: linear-gradient(left, #3D3D3D, #333);\n  background-repeat: repeat-x;\n  border-right: 1px solid #4d4d4d;\n  text-shadow: 0px 1px 1px #4d4d4d;\n  color: #222;\n}\n\n.ace-ambiance .ace_gutter-layer {\n  background: repeat left top;\n}\n\n.ace-ambiance .ace_gutter-active-line {\n  background-color: #3F3F3F;\n}\n\n.ace-ambiance .ace_fold-widget {\n  text-align: center;\n}\n\n.ace-ambiance .ace_fold-widget:hover {\n  color: #777;\n}\n\n.ace-ambiance .ace_fold-widget.ace_start,\n.ace-ambiance .ace_fold-widget.ace_end,\n.ace-ambiance .ace_fold-widget.ace_closed{\n  background: none;\n  border: none;\n  box-shadow: none;\n}\n\n.ace-ambiance .ace_fold-widget.ace_start:after {\n  content: '▾'\n}\n\n.ace-ambiance .ace_fold-widget.ace_end:after {\n  content: '▴'\n}\n\n.ace-ambiance .ace_fold-widget.ace_closed:after {\n  content: '‣'\n}\n\n.ace-ambiance .ace_print-margin {\n  border-left: 1px dotted #2D2D2D;\n  right: 0;\n  background: #262626;\n}\n\n.ace-ambiance .ace_scroller {\n  -webkit-box-shadow: inset 0 0 10px black;\n  -moz-box-shadow: inset 0 0 10px black;\n  -o-box-shadow: inset 0 0 10px black;\n  box-shadow: inset 0 0 10px black;\n}\n\n.ace-ambiance {\n  color: #E6E1DC;\n  background-color: #202020;\n}\n\n.ace-ambiance .ace_cursor {\n  border-left: 1px solid #7991E8;\n}\n\n.ace-ambiance .ace_overwrite-cursors .ace_cursor {\n  border: 1px solid #FFE300;\n  background: #766B13;\n}\n\n.ace-ambiance.normal-mode .ace_cursor-layer {\n  z-index: 0;\n}\n \n.ace-ambiance .ace_marker-layer .ace_selection {\n  background: rgba(221, 240, 255, 0.20);\n}\n\n.ace-ambiance .ace_marker-layer .ace_selected-word {\n  border-radius: 4px;\n  border: 8px solid #3f475d;\n  box-shadow: 0 0 4px black;\n}\n\n.ace-ambiance .ace_marker-layer .ace_step {\n  background: rgb(198, 219, 174);\n}\n\n.ace-ambiance .ace_marker-layer .ace_bracket {\n  margin: -1px 0 0 -1px;\n  border: 1px solid rgba(255, 255, 255, 0.25);\n}\n\n.ace-ambiance .ace_marker-layer .ace_active-line {\n  background: rgba(255, 255, 255, 0.031);\n}\n\n.ace-ambiance .ace_invisible {\n  color: #333;\n}\n\n.ace-ambiance .ace_paren {\n  color: #24C2C7;\n}\n\n.ace-ambiance .ace_keyword {\n  color: #cda869;\n}\n\n.ace-ambiance .ace_keyword.ace_operator {\n  color: #fa8d6a;\n}\n\n.ace-ambiance .ace_punctuation.ace_operator {\n  color: #fa8d6a;\n}\n\n.ace-ambiance .ace_identifier {\n}\n\n.ace-ambiance .ace-statement {\n  color: #cda869;\n}\n\n.ace-ambiance .ace_constant {\n  color: #CF7EA9;\n}\n\n.ace-ambiance .ace_constant.ace_language {\n  color: #CF7EA9;\n}\n\n.ace-ambiance .ace_constant.ace_library {\n  \n}\n\n.ace-ambiance .ace_constant.ace_numeric {\n  color: #78CF8A;\n}\n\n.ace-ambiance .ace_invalid {\n  text-decoration: underline;\n}\n\n.ace-ambiance .ace_invalid.ace_illegal {\n  color:#F8F8F8;\n  background-color: rgba(86, 45, 86, 0.75);\n}\n\n.ace-ambiance .ace_invalid,\n.ace-ambiance .ace_deprecated {\n  text-decoration: underline;\n  font-style: italic;\n  color: #D2A8A1;\n}\n\n.ace-ambiance .ace_support {\n  color: #9B859D;\n}\n\n.ace-ambiance .ace_support.ace_function {\n  color: #DAD085;\n}\n\n.ace-ambiance .ace_function.ace_buildin {\n  color: #9b859d;\n}\n\n.ace-ambiance .ace_string {\n  color: #8f9d6a;\n}\n\n.ace-ambiance .ace_string.ace_regexp {\n  color: #DAD085;\n}\n\n.ace-ambiance .ace_comment {\n  font-style: italic;\n  color: #555;\n}\n\n.ace-ambiance .ace_comment.ace_doc {\n}\n\n.ace-ambiance .ace_comment.ace_doc.ace_tag {\n  color: #666;\n  font-style: normal;\n}\n\n.ace-ambiance .ace_definition,\n.ace-ambiance .ace_type {\n  color: #aac6e3;\n}\n\n.ace-ambiance .ace_variable {\n  color: #9999cc;\n}\n\n.ace-ambiance .ace_variable.ace_language {\n  color: #9b859d;\n}\n\n.ace-ambiance .ace_xml-pe {\n  color: #494949;\n}\n\n.ace-ambiance .ace_gutter-layer,\n.ace-ambiance .ace_text-layer {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAQAAAAHUWYVAABFFUlEQVQYGbzBCeDVU/74/6fj9HIcx/FRHx9JCFmzMyGRURhLZIkUsoeRfUjS2FNDtr6WkMhO9sm+S8maJfu+Jcsg+/o/c+Z4z/t97/vezy3z+z8ekGlnYICG/o7gdk+wmSHZ1z4pJItqapjoKXWahm8NmV6eOTbWUOp6/6a/XIg6GQqmenJ2lDHyvCFZ2cBDbmtHA043VFhHwXxClWmeYAdLhV00Bd85go8VmaFCkbVkzlQENzfBDZ5gtN7HwF0KDrTwJ0dypSOzpaKCMwQHKTIreYIxlmhXTzTWkVm+LTynZhiSBT3RZQ7aGfjGEd3qyXQ1FDymqbKxpspERQN2MiRjNZlFFQXfCNFm9nM1zpAsoYjmtRTc5ajwuaXc5xrWskT97RaKzAGe5ARHhVUsDbjKklziiX5WROcJwSNCNI+9w1Jwv4Zb2r7lCMZ4oq5C0EdTx+2GzNuKpJ+iFf38JEWkHJn9DNF7mmBDITrWEg0VWL3pHU20tSZnuqWu+R3BtYa8XxV1HO7GyD32UkOpL/yDloINFTmvtId+nmAjxRw40VMwVKiwrKLE4bK5UOVntYwhOcSSXKrJHKPJedocpGjVz/ZMIbnYUPB10/eKCrs5apqpgVmWzBYWpmtKHecJPjaUuEgRDDaU0oZghCJ6zNMQ5ZhDYx05r5v2muQdM0EILtXUsaKiQX9WMEUotagQzFbUNN6NUPC2nm5pxEWGCjMc3GdJHjSU2kORLK/JGSrkfGEIjncU/CYUnOipoYemwj8tST9NsJmB7TUVXtbUtXATJVZXBMvYeTXJfobgJUPmGMP/yFaWonaa6BcFO3nqcIqCozSZoZoSr1g4zJOzuyGnxTEX3lUEJ7WcZgme8ddaWvWJo2AJR9DZU3CUIbhCSG6ybSwN6qtJVnCU2svDTP2ZInOw2cBTrqtQahtNZn9NcJ4l2NaSmSkkP1noZWnVwkLmdUPOwLZEwy2Z3S3R+4rIG9hcbpPXHFVWcQdZkn2FOta3cKWQnNRC5g1LsJah4GCzSVsKnCOY5OAFRTBekyyryeyilhFKva75r4Mc0aWanGEaThcy31s439KKxTzJYY5WTHPU1FtIHjQU3Oip4xlNzj/lBw23dYZVliQa7WAXf4shetcQfatI+jWRDBPmyNeW6A1P5kdDgyYJlba0BIM8BZu1JfrFwItyjcAMR3K0BWOIrtMEXyhyrlVEx3ui5dUBjmB/Q3CXW85R4mBD0s7B+4q5tKUjOlb9qqmhi5AZ6GFIC5HXtOobdYGlVdMVbNJ8toNTFcHxnoL+muBagcctjWnbNMuR00uI7nQESwg5q2qqrKWIfrNUmeQocY6HuyxJV02wj36w00yhpmUFenv4p6fUkZYqLyuinx2RGOjhCXYyJF84oiU00YMOOhhquNdfbOB7gU88pY4xJO8LVdp6/q2voeB4R04vIdhSE40xZObx1HGGJ/ja0LBthFInKaLPPFzuCaYaoj8JjPME8yoyxo6zlBqkiUZYgq00OYMswbWO5NGmq+xhipxHLRW29ARjNKXO0wRnear8XSg4XFPLKEPUS1GqvyLwiuBUoa7zpZ0l5xxFwWmWZC1H5h5FwU8eQ7K+g8UcVY6TMQreVQT/8uQ8Z+ALIXnSEa2pYZQneE9RZbSBNYXfWYJzW/h/4j4Dp1tYVcFIC5019Vyi4ThPqSFCzjGWaHQTBU8q6vrVwgxP9Lkm840imWKpcLCjYTtrKuwvsKSnrvHCXGkSMk9p6lhckfRpIeis+N2PiszT+mFLspyGleUhDwcLrZqmyeylxwjBcKHEapqkmyangyLZRVOijwOtCY5SsG5zL0OwlCJ4y5KznF3EUNDDrinwiyLZRzOXtlBbK5ITHFGLp8Q0R6ab6mS7enI2cFrxOyHvOCFaT1HThS1krjCwqWeurCkk+willhCC+RSZnRXBiZaC5RXRIZYKp2lyfrHwiKPKR0JDzrdU2EFgpidawlFDR6FgXUMNa+g1FY3bUQh2cLCwosRdnuQTS/S+JVrGLeWIvtQUvONJxlqSQYYKpwoN2kaocLjdVsis4Mk80ESF2YpSkzwldjHkjFCUutI/r+EHDU8oCs6yzL3PhWiEooZdFMkymlas4AcI3KmoMMNSQ3tHzjGWCrcJJdYyZC7QFGwjRL9p+MrRkAGWzIaWCn9W0F3TsK01c2ZvQw0byvxuQU0r1lM0qJO7wW0kRIMdDTtXEdzi4VIh+EoIHm0mWtAtpCixlabgn83fKTI7anJe9ST7WIK1DMGpQmYeA58ImV6ezOGOzK2Kgq01pd60cKWiUi9Lievb/0vIDPHQ05Kzt4ddPckQBQtoaurjyHnek/nKzpQLrVgKPjIkh2v4uyezpv+Xoo7fPFXaGFp1vaLKxQ4uUpQQS5VuQs7BCq4xRJv7fwpVvvFEB3j+620haOuocqMhWd6TTPAEx+mdFNGHdranFe95WrWmIvlY4F1Dle2ECgc6cto7SryuqGGGha0tFQ5V53migUKmg6XKAo4qS3mik+0OZpAhOLeZKicacgaYcyx5hypYQE02ZA4xi/pNhOQxR4klNKyqacj+mpxnLTnnGSo85++3ZCZq6lrZkXlGEX3o+C9FieccJbZWVFjC0Yo1FZnJhoYMFoI1hEZ9r6hwg75HwzBNhbZCdJEfJwTPGzJvaKImw1yYX1HDAmpXR+ZJQ/SmgqMNVQb5vgamGwLtt7VwvP7Qk1xpiM5x5Cyv93E06MZmgs0Nya2azIKOYKCGBQQW97RmhKNKF02JZqHEJ4o58qp7X5EcZmc56trXEqzjCBZ1MFGR87Ql2tSTs6CGxS05PTzRQorkbw7aKoKXFDXsYW42VJih/q+FP2BdTzDTwVqOYB13liM50vG7wy28qagyuIXMeQI/Oqq8bcn5wJI50xH00CRntyfpL1T4hydYpoXgNiFzoIUTDZnLNRzh4TBHwbYGDvZkxmlyJloyr6tRihpeUG94GnKtIznREF0tzJG/OOr73JBcrSh1k6WuTprgLU+mnSGnv6Zge0NNz+kTDdH8nuAuTdJDCNb21LCiIuqlYbqGzT3RAoZofQfjFazkqeNWdYaGvYTM001EW2oKPvVk1ldUGSgUtHFwjKM1h9jnFcmy5lChoLNaQMGGDsYbKixlaMBmmsx1QjCfflwTfO/gckW0ruZ3jugKR3R5W9hGUWqCgxuFgsuaCHorotGKzGaeZB9DMsaTnKCpMtwTvOzhYk0rdrArKCqcaWmVk1+F372ur1YkKxgatI8Qfe1gIX9wE9FgS8ESmuABIXnRUbCapcKe+nO7slClSZFzpV/LkLncEb1qiO42fS3R855Su2mCLh62t1SYZZYVmKwIHjREF2uihTzB20JOkz7dkxzYQnK0UOU494wh+VWRc6Un2kpTaVgLDFEkJ/uhzRcI0YKGgpGWOlocBU/a4fKoJ/pEaNV6jip3+Es9VXY078rGnmAdf7t9ylPXS34RBSuYPs1UecZTU78WanhBCHpZ5sAoTz0LGZKjPf9TRypqWEiTvOFglL1fCEY3wY/++rbk7C8bWebA6p6om6PgOL2kp44TFJlVNBXae2rqqdZztOJpT87GQsE9jqCPIe9VReZuQ/CIgacsyZdCpIScSYqcZk8r+nsyCzhyfhOqHGOIvrLknC8wTpFcaYiGC/RU1NRbUeUpocQOnkRpGOrIOcNRx+1uA0UrzhSSt+VyS3SJpnFWkzNDqOFGIWcfR86DnmARTQ1HKIL33ExPiemeOhYSSjzlSUZZuE4TveoJLnBUOFof6KiysCbnAEcZgcUNTDOwkqWu3RWtmGpZwlHhJENdZ3miGz0lJlsKnjbwqSHQjpxnFDlTLLwqJPMZMjd7KrzkSG7VsxXBZE+F8YZkb01Oe00yyRK9psh5SYh29ySPKBo2ylNht7ZkZnsKenjKNJu9PNEyZpaCHv4Kt6RQsLvAVp7M9kIimmCUwGeWqLMmGuIotYMmWNpSahkhZw9FqZsVnKJhsjAHvtHMsTM9fCI06Dx/u3vfUXCqfsKRc4oFY2jMsoo/7DJDwZ1CsIKnJu+J9ldkpmiCxQx1rWjI+T9FwcWWzOuaYH0Hj7klNRVWEQpmaqosakiGNTFHdjS/qnUdmf0NJW5xsL0HhimCCZZSRzmSPTXJQ4aaztAwtZnoabebJ+htCaZ7Cm535ByoqXKbX1WRc4Eh2MkRXWzImVc96Cj4VdOKVxR84VdQsIUM8Psoou2byVHyZFuq7O8otbSQ2UAoeEWTudATLGSpZzVLlXVkPU2Jc+27lsw2jmg5T5VhbeE3BT083K9WsTTkFU/Osi0rC5lRlpwRHUiesNS0sOvmqGML1aRbPAxTJD9ZKtxuob+hhl8cwYGWpJ8nub7t5p6coYbMovZ1BTdaKn1jYD6h4GFDNFyT/Kqe1XCXphXHOKLZmuRSRdBPEfVUXQzJm5YGPGGJdvAEr7hHNdGZnuBvrpciGmopOLf5N0uVMy0FfYToJk90uUCbJupaVpO53UJXR2bVpoU00V2KOo4zMFrBd0Jtz2pa0clT5Q5L8IpQ177mWQejPMEJhuQjS10ref6HHjdEhy1P1EYR7GtO0uSsKJQYLiTnG1rVScj5lyazpqWGl5uBbRWl7m6ixGOOnEsMJR7z8J0n6KMnCdxhiNYQCoZ6CmYLnO8omC3MkW3bktlPmEt/VQQHejL3+dOE5FlPdK/Mq8hZxxJtLyRrepLThYKbLZxkSb5W52vYxNOaOxUF0yxMUPwBTYqCzy01XayYK0sJyWBLqX0MwU5CzoymRzV0EjjeUeLgDpTo6ij42ZAzvD01dHUUTPLU96MdLbBME8nFBn7zJCMtJcZokn8YoqU0FS5WFKyniHobguMcmW8N0XkWZjkyN3hqOMtS08r+/xTBwpZSZ3qiVRX8SzMHHjfUNFjgHEPmY9PL3ykEzxkSre/1ZD6z/NuznuB0RcE1TWTm9zRgfUWVJiG6yrzgmWPXC8EAR4Wxhlad0ZbgQyEz3pG5RVEwwDJH2mgKpjcTiCOzn1lfUWANFbZ2BA8balnEweJC9J0iuaeZoI+ippFCztEKVvckR2iice1JvhVytrQwUAZpgsubCPaU7xUe9vWnaOpaSBEspalykhC9bUlOMpT42ZHca6hyrqKmw/wMR8H5ZmdFoBVJb03O4UL0tSNnvIeRmkrLWqrs78gcrEn2tpcboh0UPOW3UUR9PMk4T4nnNKWmCjlrefhCwxRNztfmIQVdDElvS4m1/WuOujoZCs5XVOjtKPGokJzsYCtFYoWonSPT21DheU/wWhM19FcElwqNGOsp9Q8N/cwXaiND1MmeL1Q5XROtYYgGeFq1aTMsoMmcrKjQrOFQTQ1fmBYhmW6o8Jkjc7iDJRTBIo5kgJD5yMEYA3srCg7VFKwiVJkmRCc5ohGOKhsYMn/XBLdo5taZjlb9YAlGWRimqbCsoY7HFAXLa5I1HPRxMMsQDHFkWtRNniqT9UEeNjcE7RUlrCJ4R2CSJuqlKHWvJXjAUNcITYkenuBRB84TbeepcqTj3zZyFJzgYQdHnqfgI0ddUwS6GqWpsKWhjq9cV0vBAEMN2znq+EBfIWT+pClYw5xsTlJU6GeIBsjGmmANTzJZiIYpgrM0Oa8ZMjd7NP87jxhqGOhJlnQtjuQpB+8aEE00wZFznSJPyHxgH3HkPOsJFvYk8zqCHzTs1BYOa4J3PFU+UVRZxlHDM4YavlNUuMoRveiZA2d7grMNc2g+RbSCEKzmgYsUmWmazFJyoiOZ4KnyhKOGRzWJa0+moyV4TVHDzn51Awtqaphfk/lRQ08FX1iiqxTB/kLwd0VynKfEvI6cd4XMV5bMhZ7gZUWVzYQ6Nm2BYzxJbw3bGthEUUMfgbGeorae6DxHtJoZ6alhZ0+ytiVoK1R4z5PTrOECT/SugseEOlb1MMNR4VRNcJy+V1Hg9ONClSZFZjdHlc6W6FBLdJja2MC5hhpu0DBYEY1TFGwiFAxRRCsYkiM9JRb0JNMVkW6CZYT/2EiTGWmo8k+h4FhDNE7BvppoTSFnmCV5xZKzvcCdDo7VVPnIU+I+Rc68juApC90MwcFCsJ5hDqxgScYKreruyQwTqrzoqDCmhWi4IbhB0Yrt3RGa6GfDv52rKXWhh28dyZaWUvcZeMTBaZoSGyiCtRU5J8iviioHaErs7Jkj61syVzTTgOcUOQ8buFBTYWdL5g3T4qlpe0+wvD63heAXRfCCIed9RbCsp2CiI7raUOYOTU13N8PNHvpaGvayo4a3LLT1lDrVEPT2zLUlheB1R+ZTRfKWJ+dcocLJfi11vyJ51lLqJ0WD7tRwryezjiV5W28uJO9qykzX8JDe2lHl/9oyBwa2UMfOngpXCixvKdXTk3wrsKmiVYdZIqsoWEERjbcUNDuiaQomGoIbFdEHmsyWnuR+IeriKDVLnlawlyNHKwKlSU631PKep8J4Q+ayjkSLKYLhalNHlYvttb6fHm0p6OApsZ4l2VfdqZkjuysy6ysKLlckf1KUutCTs39bmCgEyyoasIWlVaMF7mgmWtBT8Kol5xpH9IGllo8cJdopcvZ2sImlDmMIbtDk3KIpeNiS08lQw11NFPTwVFlPP6pJ2gvRfI7gQUfmNAtf6Gs0wQxDsKGlVBdF8rCa3jzdwMaGHOsItrZk7hAyOzpK9VS06j5F49b0VNGOOfKs3lDToMsMBe9ZWtHFEgxTJLs7qrygKZjUnmCYoeAqeU6jqWuLJup4WghOdvCYJnrSkSzoyRkm5M2StQwVltPkfCAk58tET/CSg+8MUecmotMEnhBKfWBIZsg2ihruMJQaoIm+tkTLKEqspMh00w95gvFCQRtDwTT1gVDDSEVdlwqZfxoQRbK0g+tbiBZxzKlpnpypejdDwTaeOvorMk/IJE10h9CqRe28hhLbe0pMsdSwv4ZbhKivo2BjDWfL8UKJgeavwlwb5KlwhyE4u4XkGE2ytZCznKLCDZZq42VzT8HLCrpruFbIfOIINmh/qCdZ1ZBc65kLHR1Bkyf5zn6pN3SvGKIlFNGplhrO9QSXanLOMQTLCa0YJCRrCZm/CZmrLTm7WzCK4GJDiWUdFeYx1LCFg3NMd0XmCuF3Y5rITLDUsYS9zoHVzwnJoYpSTQoObyEzr4cFBNqYTopoaU/wkyLZ2lPhX/5Y95ulxGTV7KjhWrOZgl8MyUUafjYraNjNU1N3IWcjT5WzWqjwtoarHSUObGYO3GCJZpsBlnJGPd6ZYLyl1GdCA2625IwwJDP8GUKymbzuyPlZlvTUsaUh5zFDhRWFzPKKZLAlWdcQbObgF9tOqOsmB1dqcqYJmWstFbZRRI9poolmqiLnU0POvxScpah2iSL5UJNzgScY5+AuIbpO0YD3NCW+dLMszFSdFCWGqG6eVq2uYVNDdICGD6W7EPRWZEY5gpsE9rUkS3mijzzJnm6UpUFXG1hCUeVoS5WfNcFpblELL2qqrCvMvRfd45oalvKU2tiQ6ePJOVMRXase9iTtLJztPxJKLWpo2CRDcJwn2sWSLKIO1WQWNTCvpVUvOZhgSC40JD0dOctaSqzkCRbXsKlb11Oip6PCJ0IwSJM31j3akRxlP7Rwn6aGaUL0qiLnJkvB3xWZ2+Q1TfCwpQH3G0o92UzmX4o/oJNQMMSQc547wVHhdk+VCw01DFYEnTxzZKAm74QmeNNR1w6WzEhNK15VJzuCdxQ53dRUDws5KvwgBMOEgpcVNe0hZI6RXT1Jd0cyj5nsaEAHgVmGaJIlWdsc5Ui2ElrRR6jrRAttNMEAIWrTDFubkZaok7/AkzfIwfuWVq0jHzuCK4QabtLUMVPB3kJ0oyHTSVFlqMALilJf2Rf8k5aaHtMfayocLBS8L89oKoxpJvnAkDPa0qp5DAUTHKWmCcnthlou8iCKaFFLHWcINd1nyIwXqrSxMNmSs6KmoL2QrKuWtlQ5V0120xQ5vRyZS1rgFkWwhiOwiuQbR0OOVhQM9iS3tiXp4RawRPMp5tDletOOBL95MpM01dZTBM9pkn5qF010rIeHFcFZhmSGpYpTsI6nwhqe5C9ynhlpp5ophuRb6WcJFldkVnVEwwxVfrVkvnWUuNLCg5bgboFHPDlDPDmnK7hUrWiIbjadDclujlZcaokOFup4Ri1kacV6jmrrK1hN9bGwpKEBQ4Q6DvIUXOmo6U5LqQM6EPyiKNjVkPnJkDPNEaxhiFay5ExW1NXVUGqcpYYdPcGiCq7z/TSlbhL4pplWXKd7NZO5QQFrefhRQW/NHOsqcIglc4UhWklR8K0QzbAw08CBDnpbgqXdeD/QUsM4RZXDFBW6WJKe/mFPdH0LtBgiq57wFLzlyQzz82qYx5D5WJP5yVJDW01BfyHnS6HKO/reZqId1WGa4Hkh2kWodJ8i6KoIPlAj2hPt76CzXsVR6koPRzWTfKqIentatYpQw2me4AA3y1Kind3SwoOKZDcFXTwl9tWU6mfgRk9d71sKtlNwrjnYw5tC5n5LdKiGry3JKNlHEd3oaMCFHrazBPMp/uNJ+V7IudcSbeOIdjUEdwl0VHCOZo5t6YluEuaC9mQeMgSfOyKnYGFHcIeQ84yQWbuJYJpZw5CzglDH7gKnWqqM9ZTaXcN0TeYhR84eQtJT76JJ1lREe7WnnvsMmRc9FQ7SBBM9mV3lCUdmHk/S2RAMt0QjFNFqQpWjDPQ01DXWUdDBkXziKPjGEP3VP+zIWU2t7im41FOloyWzn/L6dkUy3VLDaZ6appgDLHPjJEsyvJngWEPUyVBiAaHCTEXwrLvSEbV1e1gKJniicWorC1MUrVjB3uDhJE/wgSOzk1DXpk0k73qCM8xw2UvD5kJmDUfOomqMpWCkJRlvKXGmoeBm18USjVIk04SClxTB6YrgLAPLWYK9HLUt5cmc0vYES8GnTeRc6skZbQkWdxRsIcyBRzx1DbTk9FbU0caTPOgJHhJKnOGIVhQqvKmo0llRw9sabrZkDtdg3PqaKi9oatjY8B+G371paMg6+mZFNNtQ04mWBq3rYLOmtWWQp8KJnpy9DdFensyjdqZ+yY40VJlH8wcdLzC8PZnvHMFUTZUrDTkLyQaGus5X5LzpYAf3i+e/ZlhqGqWhh6Ou6xTR9Z6oi5AZZtp7Mj2EEm8oSpxiYZCHU/1fbGdNNNRRoZMhmilEb2gqHOEJDtXkHK/JnG6IrvbPCwV3NhONVdS1thBMs1T4QOBcTWa2IzhMk2nW5Kyn9tXUtpv9RsG2msxk+ZsQzRQacJncpgke0+T8y5Fzj8BiGo7XlJjaTIlpQs7KFjpqGnKuoyEPeIKnFMkZHvopgh81ySxNFWvJWcKRs70j2FOT012IllEEO1n4pD1513Yg2ssQPOThOkvyrqHUdEXOSEsihmBbTbKX1kLBPWqWkLOqJbjB3GBIZmoa8qWl4CG/iZ7oiA72ZL7TJNeZUY7kFQftDcHHluBzRbCegzMtrRjVQpX2lgoPKKLJAkcbMl01XK2p7yhL8pCBbQ3BN2avJgKvttcrWDK3CiUOVxQ8ZP+pqXKyIxnmBymCg5vJjNfkPK4+c8cIfK8ocVt7kmfd/I5SR1hKvCzUtb+lhgc00ZaO6CyhIQP1Uv4yIZjload72PXX0OIJvnFU+0Zf6MhsJwTfW0r0UwQfW4LNLZl5HK261JCZ4qnBaAreVAS3WrjV0LBnNDUNNDToCEeFfwgcb4gOEqLRhirWkexrCEYKVV711DLYEE1XBEsp5tpTGjorkomKYF9FDXv7fR3BGwbettSxnyL53MBPjsxDZjMh+VUW9NRxq1DhVk+FSxQcaGjV9Pawv6eGByw5qzoy7xk4RsOShqjJwWKe/1pEEfzkobeD/dQJmpqedcyBTy2sr4nGNRH0c0SPWTLrqAc0OQcb/gemKgqucQT7ySWKCn2EUotoCvpZct7RO2sy/QW0IWcXd7pQRQyZVwT2USRO87uhjioTLKV2brpMUcMQRbKH/N2T+UlTpaMls6cmc6CCNy3JdYYSUzzJQ4oSD3oKLncULOiJvjBEC2oqnCJkJluCYy2ZQ5so9YYlZ1VLlQU1mXEW1jZERwj/MUSRc24TdexlqLKfQBtDTScJUV8FszXBEY5ktpD5Ur9hYB4Nb1iikw3JoYpkKX+RodRKFt53MMuRnKSpY31PwYaGaILh3wxJGz9TkTPEETxoCWZrgvOlmyMzxFEwVJE5xZKzvyJ4WxEc16Gd4Xe3Weq4XH2jKRikqOkGQ87hQnC7wBmGYLAnesX3M+S87eFATauuN+Qcrh7xIxXJbUIdMw3JGE3ylCWzrieaqCn4zhGM19TQ3z1oH1AX+pWEqIc7wNGAkULBo/ZxRaV9NNyh4Br3rCHZzbzmSfawBL0dNRwpW1kK9mxPXR9povcdrGSZK9c2k0xwFGzjuniCtRSZCZ6ccZ7gaktmgAOtKbG/JnOkJrjcQTdFMsxRQ2cLY3WTIrlCw1eWKn8R6pvt4GFDso3QoL4a3nLk3G6JrtME3dSenpx7PNFTmga0EaJTLQ061sEeQoWXhSo9LTXsaSjoJQRXeZLtDclbCrYzfzHHeaKjHCVOUkQHO3JeEepr56mhiyaYYKjjNU+Fed1wS5VlhWSqI/hYUdDOkaxiKehoyOnrCV5yBHtbWFqTHCCwtpDcYolesVR5yUzTZBb3RNMd0d6WP+SvhuBmRcGxnuQzT95IC285cr41cLGQ6aJJhmi4TMGempxeimBRQw1tFKV+8jd6KuzoSTqqDxzRtpZkurvKEHxlqXKRIjjfUNNXQsNOsRScoWFLT+YeRZVD3GRN0MdQcKqQjHDMrdGGVu3iYJpQx3WGUvfbmxwFfR20WBq0oYY7LMFhhgYtr8jpaEnaOzjawWWaTP8mMr0t/EPDPoqcnxTBI5o58L7uoWnMrpoqPwgVrlAUWE+V+TQl9rawoyP6QGAlQw2TPRX+YSkxyBC8Z6jhHkXBgQL7WII3DVFnRfCrBfxewv9D6xsyjys4VkhWb9pUU627JllV0YDNHMku/ldNMMXDEo4aFnAkk4U6frNEU4XgZUPmEKHUl44KrzmYamjAbh0JFvGnaTLPu1s9jPCwjFpYiN7z1DTOk/nc07CfDFzmCf7i+bfNHXhDtLeBXzTBT5rkMvWOIxpl4EMh2LGJBu2syDnAEx2naEhHDWMMzPZEhygyS1mS5RTJr5ZkoKbEUoYqr2kqdDUE8ztK7OaIntJkFrIECwv8LJTaVx5XJE86go8dFeZ3FN3rjabCAYpoYEeC9zzJVULBbmZhDyd7ko09ydpNZ3nm2Kee4FPPXHnYEF1nqOFEC08LUVcDvYXkJHW8gTaKCk9YGOeIJhqiE4ToPEepdp7IWFjdwnWaufGMwJJCMtUTTBBK9BGCOy2tGGrJTHIwyEOzp6aPzNMOtlZkDvcEWpP5SVNhfkvDxhmSazTJXYrM9U1E0xwFVwqZQwzJxw6+kGGGUj2FglGGmnb1/G51udRSMNlTw6GGnCcUwVcOpmsqTHa06o72sw1RL02p9z0VbnMLOaIX3QKaYKSCFQzBKEUNHTSc48k53RH9wxGMtpQa5KjjW0W0n6XCCCG4yxNNdhQ4R4l1Ff+2sSd6UFHiIEOyqqFgT01mEUMD+joy75jPhOA+oVVLm309FR4yVOlp4RhLiScNmSmaYF5Pw0STrOIoWMSR2UkRXOMp+M4SHW8o8Zoi6OZgjKOaFar8zZDzkWzvKOjkKBjmCXby8JahhjXULY4KlzgKLvAwxVGhvyd4zxB1d9T0piazmKLCVZY5sKiD0y2ZSYrkUEPUbIk+dlQ4SJHTR50k1DPaUWIdTZW9NJwnJMOECgd7ou/MnppMJ02O1VT4Wsh85MnZzcFTngpXGKo84qmwgKbCL/orR/SzJ2crA+t6Mp94KvxJUeIbT3CQu1uIdlQEOzlKfS3UMcrTiFmOuroocrZrT2AcmamOKg8YomeEKm/rlT2sociMaybaUlFhuqHCM2qIJ+rg4EcDFymiDSxzaHdPcpE62pD5kyM5SBMoA1PaUtfIthS85ig1VPiPPYXgYEMNk4Qq7TXBgo7oT57gPUdwgCHzhIVFPFU6OYJzHAX9m5oNrVjeE61miDrqQ4VSa1oiURTsKHC0IfjNwU2WzK6eqK8jWln4g15TVBnqmDteCJ501PGAocJhhqjZdtBEB6lnhLreFJKxmlKbeGrqLiSThVIbCdGzloasa6lpMQXHCME2boLpJgT7yWaemu6wBONbqGNVRS0PKIL7LckbjmQtR7K8I5qtqel+T/ChJTNIKLjdUMNIRyvOEko9YYl2cwQveBikCNawJKcLBbc7+JM92mysNvd/Fqp8a0k6CNEe7cnZrxlW0wQXaXjaktnRwNOGZKYiONwS7a1JVheq3WgJHlQUGKHKmp4KAxXR/ULURcNgoa4zhKSLpZR3kxRRb0NmD0OFn+UCS7CzI1nbP6+o4x47QZE5xRCt3ZagnYcvmpYQktXdk5YKXTzBC57kKEe0VVuiSYqapssMS3C9p2CKkHOg8B8Pa8p5atrIw3qezIWanMGa5HRDNF6RM9wcacl0N+Q8Z8hsIkSnaIIdHRUOEebAPy1zbCkhM062FCJtif7PU+UtoVXzWKqM1PxXO8cfdruhFQ/a6x3JKYagvVDhQEtNiyiiSQ7OsuRsZUku0CRNDs4Sog6KKjsZgk2bYJqijgsEenoKeniinRXBn/U3lgpPdyDZynQx8IiioMnCep5Ky8mjGs6Wty0l1hUQTcNWswS3WRp2kCNZwJG8omG8JphPUaFbC8lEfabwP7VtM9yoaNCAjpR41VNhrD9LkbN722v0CoZMByFzhaW+MyzRYEWFDQwN2M4/JiT76PuljT3VU/A36eaIThb+R9oZGOAJ9tewkgGvqOMNRWYjT/Cwu99Q8LqDE4TgbLWxJ1jaDDAERsFOFrobgjUsBScaguXU8kKm2RL19tRypSHnHNlHiIZqgufs4opgQdVdwxBNNFBR6kVFqb8ogimOzB6a6HTzrlDHEpYaxjiiA4TMQobkDg2vejjfwJGWmnbVFAw3H3hq2NyQfG7hz4aC+w3BbwbesG0swYayvpAs6++Ri1Vfzx93mFChvyN5xVHTS+0p9aqCAxyZ6ZacZyw5+7uuQkFPR9DDk9NOiE7X1PCYJVjVUqq7JlrHwWALF5nfHNGjApdpqgzx5OwilDhCiDYTgnc9waGW4BdLNNUQvOtpzDOWHDH8D7TR/A/85KljEQu3NREc4Pl/6B1Hhc8Umb5CsKMmGC9EPcxoT2amwHNCmeOEnOPbklnMkbOgIvO5UMOpQrS9UGVdt6iH/fURjhI/WOpaW9OKLYRod6HCUEdOX000wpDZQ6hwg6LgZfOqo1RfT/CrJzjekXOGhpc1VW71ZLbXyyp+93ILbC1kPtIEYx0FIx1VDrLoVzXRKRYWk809yYlC9ImcrinxtabKnzRJk3lAU1OLEN1j2zrYzr2myHRXJFf4h4QKT1qSTzTB5+ZNTzTRkAxX8FcLV2uS8eoQQ2aAkFzvCM72sJIcJET3WPjRk5wi32uSS9rfZajpWEvj9hW42F4o5NytSXYy8IKHay10VYdrcl4SkqscrXpMwyGOgtkajheSxdQqmpxP1L3t4R5PqasFnrQEjytq6qgp9Y09Qx9o4S1FzhUCn1kyHSzBWLemoSGvOqLNhZyBjmCaAUYpMgt4Ck7wBBMMwWKWgjsUwTaGVsxWC1mYoKiyqqeGKYqonSIRQ3KIkHO0pmAxTdBHkbOvfllfr+AA+7gnc50huVKYK393FOyg7rbPO/izI7hE4CnHHHnJ0ogNPRUGeUpsrZZTBJcrovUcJe51BPsr6GkJdhCCsZ6aTtMEb2pqWkqeVtDXE/QVggsU/Nl86d9RMF3DxvZTA58agu810RWawCiSzzXBeU3MMW9oyJUedvNEvQyNu1f10BSMddR1vaLCYpYa/mGocLSiYDcLbQz8aMn5iyF4xBNMs1P0QEOV7o5gaWGuzSeLue4tt3ro7y4Tgm4G/mopdZgl6q0o6KzJWE3mMksNr3r+a6CbT8g5wZNzT9O7fi/zpaOmnz3BRoqos+tv9zMbdpxsqDBOEewtJLt7cg5wtKKbvldpSzRRCD43VFheCI7yZLppggMVBS/KMAdHODJvOwq2NQSbKKKPLdFWQs7Fqo+mpl01JXYRgq8dnGLhTiFzqmWsUMdpllZdbKlyvSdYxhI9YghOtxR8LgSLWHK62mGGVoxzBE8LNWzqH9CUesQzFy5RQzTc56mhi6fgXEWwpKfE5Z7M05ZgZUPmo6auiv8YKzDYwWBLMErIbKHJvOwIrvEdhOBcQ9JdU1NHQ7CXn2XIDFBKU2WAgcX9UAUzDXWd5alwuyJ41Z9rjKLCL4aCp4WarhPm2rH+SaHUYE001JDZ2ZAzXPjdMpZWvC9wmqIB2lLhQ01D5jO06hghWMndbM7yRJMsoCj1vYbnFQVrW9jak3OlEJ3s/96+p33dEPRV5GxiqaGjIthUU6FFEZyqCa5qJrpBdzSw95IUnOPIrCUUjRZQFrbw5PR0R1qiYx3cb6nrWUMrBmmiBQxVHtTew5ICP/ip6g4hed/Akob/32wvBHsIOX83cI8hGeNeNPCIkPmXe8fPKx84OMSRM1MTdXSwjCZ4S30jVGhvqTRak/OVhgGazHuOCud5onEO1lJr6ecVyaOK6H7zqlBlIaHE0oroCgfvGJIdPcmfLNGLjpz7hZwZQpUbFME0A1cIJa7VNORkgfsMBatbKgwwJM9bSvQXeNOvbIjelg6WWvo5kvbKaJJNHexkKNHL9xRyFlH8Ti2riB5wVPhUk7nGkJnoCe428LR/wRGdYIlmWebCyxou1rCk4g/ShugBDX0V0ZQWkh0dOVsagkM0yV6OoLd5ye+pRlsCr0n+KiQrGuq5yJDzrTAXHtLUMduTDBVKrSm3eHL+6ijxhFDX9Z5gVU/wliHYTMiMFpKLNMEywu80wd3meoFmt6VbRMPenhrOc6DVe4pgXU8DnnHakLOIIrlF4FZPIw6R+zxBP0dyq6OOZ4Q5sLKCcz084ok+VsMMyQhNZmmBgX5xIXOEJTmi7VsGTvMTNdHHhpzdbE8Du2oKxgvBqQKdDDnTFOylCFaxR1syz2iqrOI/FEpNc3C6f11/7+ASS6l2inq2ciTrCCzgyemrCL5SVPjQkdPZUmGy2c9Sw9FtR1sS30RmsKPCS4rkIC/2U0MduwucYolGaPjKEyhzmiPYXagyWbYz8LWBDdzRimAXzxx4z8K9hpzlhLq+NiQ97HuKorMUfK/OVvC2JfiHUPCQI/q7J2gjK+tTDNxkCc4TMssqCs4TGtLVwQihyoAWgj9bosU80XGW6Ac9TJGziaUh5+hnFcHOnlaM1iRn29NaqGENTTTSUHCH2tWTeV0osUhH6psuVLjRUmGWhm6OZEshGeNowABHcJ2Bpy2ZszRcKkRXd2QuKVEeXnbfaEq825FguqfgfE2whlChSRMdron+LATTPQ2Z369t4B9C5gs/ylzv+CMmepIDPclFQl13W0rspPd1JOcbghGOEutqCv5qacURQl3dDKyvyJlqKXGPgcM9FfawJAMVmdcspcYKOZc4GjDYkFlK05olNMHyHn4zFNykyOxt99RkHlfwmiHo60l2EKI+mhreEKp080Tbug08BVPcgoqC5zWt+NLDTZ7oNSF51N1qie7Va3uCCwyZbkINf/NED6jzOsBdZjFN8oqG3wxVunqCSYYKf3EdhJyf9YWGf7tRU2oH3VHgPr1fe5J9hOgHd7xQ0y7qBwXr23aGErP0cm64JVjZwsOGqL+mhNgZmhJLW2oY4UhedsyBgzrCKrq7BmcpNVhR6jBPq64Vgi+kn6XE68pp8J5/+0wRHGOpsKenQn9DZntPzjRLZpDAdD2fnSgkG9tmIXnUwQ6WVighs7Yi2MxQ0N3CqYaCXkJ0oyOztMDJjmSSpcpvlrk0RMMOjmArQ04PRV1DO1FwhCVaUVPpKUM03JK5SxPsIWRu8/CGHi8UHChiqGFDTbSRJWeYUDDcH6vJWUxR4k1FXbMUwV6e4AJFXS8oMqsZKqzvYQ9DDQdZckY4aGsIhtlubbd2r3j4QBMoTamdPZk7O/Bf62lacZwneNjQoGcdVU7zJOd7ghsUHOkosagic6cnWc8+4gg285R6zZP5s1/LUbCKIznTwK36PkdwlOrl4U1LwfdCCa+IrvFkmgw1PCAUXKWo0sURXWcI2muKJlgyFzhynCY4RBOsqCjoI1R5zREco0n2Vt09BQtYSizgKNHfUmUrQ5UOCh51BFcLmY7umhYqXKQomOop8bUnWNNQcIiBcYaC6xzMNOS8JQQfeqKBmmglB+97ok/lfk3ygaHSyZaCRTzRxQo6GzLfa2jWBPepw+UmT7SQEJyiyRkhBLMVOfcoMjcK0eZChfUNzFAUzCsEN5vP/X1uP/n/aoMX+K+nw/Hjr/9xOo7j7Pju61tLcgvJpTWXNbfN5jLpi6VfCOviTktKlFusQixdEKWmEBUKNaIpjZRSSOXSgzaaKLdabrm1/9nZ+/f+vd/vz/v9+Xy+zZ7PRorYoZqyLrCwQdEAixxVOEXNNnjX2nUSRlkqGmWowk8lxR50JPy9Bo6qJXaXwNvREBvnThPEPrewryLhcAnj5WE15Fqi8W7R1sAuEu86S4ENikItFN4xkv9Af4nXSnUVcLiA9xzesFpivRRVeFKtsMRaKBhuSbjOELnAUtlSQUpXgdfB4Z1oSbnFEetbQ0IrAe+Y+pqnDcEJFj6S8LDZzZHwY4e3XONNlARraomNEt2bkvGsosA3ioyHm+6jCMbI59wqt4eeara28IzEmyPgoRaUOEDhTVdEJhmCoTWfC0p8aNkCp0oYqih2iqGi4yXeMkOsn4LdLLnmKfh/YogjNsPebeFGR4m9BJHLzB61XQ3BtpISfS2FugsK9FAtLWX1dCRcrCnUp44CNzuCowUZmxSRgYaE6Za0W2u/E7CVXCiI/UOR8aAm1+OSyE3mOUcwyc1zBBeoX1kiKy0Zfxck1Gsyulti11i83QTBF5Kg3pDQThFMVHiPSlK+0cSedng/VaS8bOZbtsBcTcZAR8JP5KeqQ1OYKAi20njdNNRpgnsU//K+JnaXJaGTomr7aYIphoRn9aeShJWKEq9LcozSF7QleEfDI5LYm5bgVkFkRwVDBCVu0DDIkGupo8TZBq+/pMQURYErJQmPKGKjNDkWOLx7Jd5QizdUweIaKrlP7SwJDhZvONjLkOsBBX9UpGxnydhXkfBLQ8IxgojQbLFnJf81JytSljclYYyEFyx0kVBvKWOFJmONpshGAcsduQY5giVNCV51eOdJYo/pLhbvM0uDHSevNKRcrKZIqnCtJeEsO95RoqcgGK4ocZcho1tTYtcZvH41pNQ7vA0WrhIfOSraIIntIAi+NXWCErdbkvrWwjRLrt0NKUdL6KSOscTOdMSOUtBHwL6OLA0vNSdynaWQEnCpIvKaIrJJEbvHkmuNhn6OjM8VkSGSqn1uYJCGHnq9I3aLhNME3t6GjIkO7xrNFumpyTNX/NrwX7CrIRiqqWijI9JO4d1iieykyfiposQIQ8YjjsjlBh6oHWbwRjgYJQn2NgSnNycmJAk3NiXhx44Sxykihxm8ybUwT1OVKySc7vi3OXVkdBJ4AyXBeksDXG0IhgtYY0lY5ahCD0ehborIk5aUWRJviMA7Xt5kyRjonrXENkm8yYqgs8VzgrJmClK20uMM3jRJ0FiQICQF9hdETlLQWRIb5ki6WDfWRPobvO6a4GP5mcOrNzDFELtTkONLh9dXE8xypEg7z8A9jkhrQ6Fhjlg/QVktJXxt4WXzT/03Q8IaQWSqIuEvloQ2mqC9Jfi7wRul4RX3pSPlzpoVlmCtI2jvKHCFhjcM3sN6lqF6HxnKelLjXWbwrpR4xzuCrTUZx2qq9oAh8p6ixCUGr78g8oyjRAtB5CZFwi80VerVpI0h+IeBxa6Zg6kWvpDHaioYYuEsRbDC3eOmC2JvGYLeioxGknL2UATNJN6hmtj1DlpLvDVmocYbrGCVJKOrg4X6DgddLA203BKMFngdJJFtFd7vJLm6KEpc5yjQrkk7M80SGe34X24nSex1Ra5Omgb71JKyg8SrU3i/kARKwWpH0kOGhKkObyfd0ZGjvyXlAkVZ4xRbYJ2irFMkFY1SwyWxr2oo4zlNiV+7zmaweFpT4kR3kaDAFW6xpSqzJay05FtYR4HmZhc9UxKbbfF2V8RG1MBmSaE+kmC6JnaRXK9gsiXhJHl/U0qM0WTcbyhwkYIvFGwjSbjfwhiJt8ZSQU+Bd5+marPMOkVkD0muxYLIfEuhh60x/J92itguihJSEMySVPQnTewnEm+620rTQEMsOfo4/kP/0ARvWjitlpSX7GxBgcMEsd3EEeYWvdytd+Saawi6aCIj1CkGb6Aj9rwhx16Cf3vAwFy5pyLhVonXzy51FDpdEblbkdJbUcEPDEFzQ8qNmhzzLTmmKWKbFCXeEuRabp6rxbvAtLF442QjQ+wEA9eL1xSR7Q0JXzlSHjJ4exq89yR0laScJ/FW6z4a73pFMEfDiRZvuvijIt86RaSFOl01riV2mD1UEvxGk/Geg5aWwGki1zgKPG9J2U8PEg8qYvMsZeytiTRXBMslCU8JSlxi8EabjwUldlDNLfzTUmCgxWsjqWCOHavYAqsknKFIO0yQ61VL5AVFxk6WhEaCAkdJgt9aSkzXlKNX2jEa79waYuc7gq0N3GDJGCBhoiTXUEPsdknCUE1CK0fwsiaylSF2uiDyO4XX3pFhNd7R4itFGc0k/ElBZwWvq+GC6szVeEoS/MZ+qylwpKNKv9Z469UOjqCjwlusicyTxG6VpNxcQ8IncoR4RhLbR+NdpGGmJWOcIzJGUuKPGpQg8rrG21dOMqQssJQ4RxH5jaUqnZuQ0F4Q+cjxLwPtpZbIAk3QTJHQWBE5S1BokoVtDd6lhqr9UpHSUxMcIYl9pojsb8h4SBOsMQcqvOWC2E8EVehqiJ1hrrAEbQxeK0NGZ0Gkq+guSRgniM23bIHVkqwx4hiHd7smaOyglyIyQuM978j4VS08J/A2G1KeMBRo4fBaSNhKUEZfQewVQ/C1I+MgfbEleEzCUw7mKXI0M3hd1EESVji8x5uQ41nxs1q4RMJCCXs7Iq9acpxn22oSDnQ/sJTxsCbHIYZiLyhY05TY0ZLIOQrGaSJDDN4t8pVaIrsqqFdEegtizc1iTew5Q4ayBDMUsQMkXocaYkc0hZua412siZ1rSXlR460zRJ5SlHGe5j801RLMlJTxtaOM3Q1pvxJ45zUlWFD7rsAbpfEm1JHxG0eh8w2R7QQVzBUw28FhFp5QZzq8t2rx2joqulYTWSuJdTYfWwqMFMcovFmSyJPNyLhE4E10pHzYjOC3huArRa571ZsGajQpQx38SBP5pyZB6lMU3khDnp0MBV51BE9o2E+TY5Ml2E8S7C0o6w1xvCZjf0HkVEHCzFoyNmqC+9wdcqN+Tp7jSDheE9ws8Y5V0NJCn2bk2tqSY4okdrEhx1iDN8cSudwepWmAGXKcJXK65H9to8jYQRH7SBF01ESUJdd0TayVInaWhLkOjlXE5irKGOnI6GSWGCJa482zBI9rCr0jyTVcEuzriC1vcr6mwFGSiqy5zMwxBH/TJHwjSPhL8+01kaaSUuMFKTcLEvaUePcrSmwn8DZrgikWb7CGPxkSjhQwrRk57tctmxLsb9sZvL9LSlyuSLlWkqOjwduo8b6Uv1DkmudIeFF2dHCgxVtk8dpIvHpBxhEOdhKk7OLIUSdJ+cSRY57B+0DgGUUlNfpthTfGkauzxrvTsUUaCVhlKeteTXCoJDCa2NOKhOmC4G1H8JBd4OBZReSRGkqcb/CO1PyLJTLB4j1q8JYaIutEjSLX8YKM+a6phdMsdLFUoV5RTm9JSkuDN8WcIon0NZMNZWh1q8C7SJEwV5HxrmnnTrf3KoJBlmCYI2ilSLlfEvlE4011NNgjgthzEua0oKK7JLE7HZHlEl60BLMVFewg4EWNt0ThrVNEVkkiTwpKXSWJzdRENgvKGq4IhjsiezgSFtsfCUq8qki5S1LRQeYQQ4nemmCkImWMw3tFUoUBZk4NOeZYEp4XRKTGa6wJjrWNHBVJR4m3FCnbuD6aak2WsMTh3SZImGCIPKNgsDpVwnsa70K31lCFJZYcwwSMFcQulGTsZuEaSdBXkPGZhu0FsdUO73RHjq8MPGGIfaGIbVTk6iuI3GFgucHrIQkmWSJdBd7BBu+uOryWAhY7+Lki9rK5wtEQzWwvtbqGhIMFwWRJsElsY4m9IIg9L6lCX0VklaPAYkfkZEGDnOWowlBJjtMUkcGK4Lg6EtoZInMUBVYLgn0UsdmCyCz7gIGHFfk+k1QwTh5We7A9x+IdJ6CvIkEagms0hR50eH9UnTQJ+2oiKyVlLFUE+8gBGu8MQ3CppUHesnjTHN4QB/UGPhCTHLFPHMFrCqa73gqObUJGa03wgbhHkrCfpEpzNLE7JDS25FMKhlhKKWKfCgqstLCPu1zBXy0J2ztwjtixBu8UTRn9LVtkmCN2iyFhtME70JHRQ1KVZXqKI/KNIKYMCYs1GUMEKbM1bKOI9LDXC7zbHS+bt+1MTWS9odA9DtrYtpbImQJ2VHh/lisEwaHqUk1kjKTAKknkBEXkbkdMGwq0dnhzLJF3NJH3JVwrqOB4Sca2hti75nmJN0WzxS6UxDYoEpxpa4htVlRjkYE7DZGzJVU72uC9IyhQL4i8YfGWSYLLNcHXloyz7QhNifmKSE9JgfGmuyLhc403Xm9vqcp6gXe3xuuv8F6VJNxkyTHEkHG2g0aKXL0MsXc1bGfgas2//dCONXiNLCX+5mB7eZIl1kHh7ajwpikyzlUUWOVOsjSQlsS+M0R+pPje/dzBXRZGO0rMtgQrLLG9VSu9n6CMXS3BhwYmSoIBhsjNBmZbgusE9BCPCP5triU4VhNbJfE+swSP27aayE8tuTpYYjtrYjMVGZdp2NpS1s6aBnKSHDsbKuplKbHM4a0wMFd/5/DmGyKrJSUaW4IBrqUhx0vyfzTBBLPIUcnZdrAkNsKR0sWRspumSns6Ch0v/qqIbBYUWKvPU/CFoyrDJGwSNFhbA/MlzKqjrO80hRbpKx0Jewsi/STftwGSlKc1JZyAzx05dhLEdnfQvhZOqiHWWEAHC7+30FuRcZUgaO5gpaIK+xsiHRUsqaPElTV40xQZQ107Q9BZE1nryDVGU9ZSQ47bmhBpLcYpUt7S+xuK/FiT8qKjwXYw5ypS2iuCv7q1gtgjhuBuB8LCFY5cUuCNtsQOFcT+4Ih9JX+k8Ea6v0iCIRZOtCT0Et00JW5UeC85Cg0ScK0k411HcG1zKtre3SeITBRk7WfwDhEvaYLTHP9le0m8By0JDwn4TlLW/aJOvGHxdjYUes+ScZigCkYQdNdEOhkiezgShqkx8ueKjI8lDfK2oNiOFvrZH1hS+tk7NV7nOmLHicGWEgubkXKdwdtZknCLJXaCpkrjZBtLZFsDP9CdxWsSr05Sxl6CMmoFbCOgryX40uDtamB7SVmXW4Ihlgpmq+00tBKUUa83WbjLUNkzDmY7cow1JDygyPGlhgGKYKz4vcV7QBNbJIgM11TUqZaMdwTeSguH6rOaw1JRKzaaGyxVm2EJ/uCIrVWUcZUkcp2grMsEjK+DMwS59jQk3Kd6SEq1d0S6uVmO4Bc1lDXTUcHjluCXEq+1OlBDj1pi9zgiXxnKuE0SqTXwhqbETW6RggMEnGl/q49UT2iCzgJvRwVXS2K/d6+ZkyUl7jawSVLit46EwxVljDZwoSQ20sDBihztHfk2yA8NVZghiXwrYHQdfKAOtzsayjhY9bY0yE2CWEeJ9xfzO423xhL5syS2TFJofO2pboHob0nY4GiAgRrvGQEDa/FWSsoaaYl0syRsEt3kWoH3B01shCXhTUWe9w3Bt44SC9QCh3eShQctwbaK2ApLroGCMlZrYqvlY3qYhM0aXpFkPOuoqJ3Dm6fxXrGwVF9gCWZagjPqznfkuMKQ8DPTQRO8ZqG1hPGKEm9IgpGW4DZDgTNriTxvFiq+Lz+0cKfp4wj6OCK9JSnzNSn9LFU7UhKZZMnYwcJ8s8yRsECScK4j5UOB95HFO0CzhY4xJxuCix0lDlEUeMdS6EZBkTsUkZ4K74dugyTXS7aNgL8aqjDfkCE0ZbwkCXpaWCKhl8P7VD5jxykivSyxyZrYERbe168LYu9ZYh86IkscgVLE7tWPKmJv11CgoyJltMEbrohtVAQfO4ImltiHEroYEs7RxAarVpY8AwXMcMReFOTYWe5iiLRQxJ5Q8DtJ8LQhWOhIeFESPGsILhbNDRljNbHzNRlTFbk2S3L0NOS6V1KFJYKUbSTcIIhM0wQ/s2TM0SRMNcQmSap3jCH4yhJZKSkwyRHpYYgsFeQ4U7xoCB7VVOExhXepo9ABBsYbvGWKXPME3lyH95YioZ0gssQRWWbI+FaSMkXijZXwgiTlYdPdkNLaETxlyDVIwqeaEus0aTcYcg0RVOkpR3CSJqIddK+90JCxzsDVloyrFd5ZAr4TBKfaWa6boEA7C7s6EpYaeFPjveooY72mjIccLHJ9HUwVlDhKkmutJDJBwnp1rvulJZggKDRfbXAkvC/4l3ozQOG9a8lxjx0i7nV4jSXc7vhe3OwIxjgSHjdEhhsif9YkPGlus3iLFDnWOFhtCZbJg0UbQcIaR67JjthoCyMEZRwhiXWyxO5QxI6w5NhT4U1WsJvDO60J34fW9hwzwlKij6ZAW9ne4L0s8C6XeBMEkd/LQy1VucBRot6QMlbivaBhoBgjqGiCJNhsqVp/S2SsG6DIONCR0dXhvWbJ+MRRZJkkuEjgDXJjFQW6SSL7GXK8Z2CZg7cVsbWGoKmEpzQ5elpiy8Ryg7dMkLLUEauzeO86CuwlSOlgYLojZWeJ9xM3S1PWfEfKl5ISLQ0MEKR8YOB2QfCxJBjrKPCN4f9MkaSsqoVXJBmP7EpFZ9UQfOoOFwSzBN4MQ8LsGrymlipcJQhmy0GaQjPqCHaXRwuCZwRbqK2Fg9wlClZqYicrIgMdZfxTQ0c7TBIbrChxmuzoKG8XRaSrIhhiyNFJkrC7oIAWMEOQa5aBekPCRknCo4IKPrYkvCDI8aYmY7WFtprgekcJZ3oLIqssCSMtFbQTJKwXYy3BY5oCh2iKPCpJOE+zRdpYgi6O2KmOAgvVCYaU4ySRek1sgyFhJ403QFHiVEmJHwtybO1gs8Hr5+BETQX3War0qZngYGgtVZtoqd6vFSk/UwdZElYqyjrF4HXUeFspIi9IGKf4j92pKGAdCYMVsbcV3kRF0N+R8LUd5PCsIGWoxDtBkCI0nKofdJQxT+LtZflvuc8Q3CjwWkq8KwUpHzkK/NmSsclCL0nseQdj5FRH5CNHSgtLiW80Of5HU9Hhlsga9bnBq3fEVltKfO5IaSTmGjjc4J0otcP7QsJUSQM8pEj5/wCuUuC2DWz8AAAAAElFTkSuQmCC\");\n}\n\n.ace-ambiance .ace_indent-guide {\n  background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNQUFD4z6Crq/sfAAuYAuYl+7lfAAAAAElFTkSuQmCC\") right repeat-y;\n}"
  },
  {
    "path": "lib/ace/theme/ambiance.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n * \n * Copyright 2011 Irakli Gozalishvili. All rights reserved.\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-ambiance\";\nexports.cssText = require(\"../requirejs/text!./ambiance.css\");\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n\n});\n"
  },
  {
    "path": "lib/ace/theme/chaos.css",
    "content": ".ace-chaos .ace_gutter {\n  background: #141414;\n  color: #595959;\n  border-right: 1px solid #282828;\n}\n.ace-chaos .ace_gutter-cell.ace_warning {\n  background-image: none;\n  background: #FC0;\n  border-left: none;\n  padding-left: 0;\n  color: #000;\n}\n.ace-chaos .ace_gutter-cell.ace_error {\n  background-position: -6px center;\n  background-image: none;\n  background: #F10;\n  border-left: none;\n  padding-left: 0;\n  color: #000;\n}\n.ace-chaos .ace_print-margin {\n  border-left: 1px solid #555;\n  right: 0;\n  background: #1D1D1D;\n}\n.ace-chaos {\n  background-color: #161616;\n  color: #E6E1DC;\n}\n\n.ace-chaos .ace_cursor {\n  border-left: 2px solid #FFFFFF;\n}\n.ace-chaos .ace_cursor.ace_overwrite {\n  border-left: 0px;\n  border-bottom: 1px solid #FFFFFF;\n}\n.ace-chaos .ace_marker-layer .ace_selection {\n  background: #494836;\n}\n.ace-chaos .ace_marker-layer .ace_step {\n  background: rgb(198, 219, 174);\n}\n.ace-chaos .ace_marker-layer .ace_bracket {\n  margin: -1px 0 0 -1px;\n  border: 1px solid #FCE94F;\n}\n.ace-chaos .ace_marker-layer .ace_active-line {\n  background: #333;\n}\n.ace-chaos .ace_gutter-active-line {\n  background-color: #222;\n}\n.ace-chaos .ace_invisible {\n  color: #404040;\n}\n.ace-chaos .ace_keyword {\n  color:#00698F;\n}\n.ace-chaos .ace_keyword.ace_operator {\n  color:#FF308F;\n}\n.ace-chaos .ace_constant {\n  color:#1EDAFB;\n}\n.ace-chaos .ace_constant.ace_language {\n  color:#FDC251;\n}\n.ace-chaos .ace_constant.ace_library {\n  color:#8DFF0A;\n}\n.ace-chaos .ace_constant.ace_numeric {\n  color:#58C554;\n}\n.ace-chaos .ace_invalid {\n  color:#FFFFFF;\n  background-color:#990000;\n}\n.ace-chaos .ace_invalid.ace_deprecated {\n  color:#FFFFFF;\n  background-color:#990000;\n}\n.ace-chaos .ace_support {\n  color: #999;\n}\n.ace-chaos .ace_support.ace_function {\n  color:#00AEEF;\n}\n.ace-chaos .ace_function {\n  color:#00AEEF;\n}\n.ace-chaos .ace_string {\n  color:#58C554;\n}\n.ace-chaos .ace_comment {\n  color:#555;\n  font-style:italic;\n  padding-bottom: 0px;\n}\n.ace-chaos .ace_variable {\n  color:#997744;\n}\n.ace-chaos .ace_meta.ace_tag {\n  color:#BE53E6;\n}\n.ace-chaos .ace_entity.ace_other.ace_attribute-name {\n  color:#FFFF89;\n}\n.ace-chaos .ace_markup.ace_underline {\n  text-decoration: underline;\n}\n.ace-chaos .ace_fold-widget {\n  text-align: center;\n}\n\n.ace-chaos .ace_fold-widget:hover {\n  color: #777;\n}\n\n.ace-chaos .ace_fold-widget.ace_start,\n.ace-chaos .ace_fold-widget.ace_end,\n.ace-chaos .ace_fold-widget.ace_closed{\n  background: none;\n  border: none;\n  box-shadow: none;\n}\n\n.ace-chaos .ace_fold-widget.ace_start:after {\n  content: '▾'\n}\n\n.ace-chaos .ace_fold-widget.ace_end:after {\n  content: '▴'\n}\n\n.ace-chaos .ace_fold-widget.ace_closed:after {\n  content: '‣'\n}\n\n.ace-chaos .ace_indent-guide {\n  border-right:1px dotted #333;\n  margin-right:-1px;\n}\n\n.ace-chaos .ace_fold { \n  background: #222; \n  border-radius: 3px; \n  color: #7AF; \n  border: none; \n}\n.ace-chaos .ace_fold:hover {\n  background: #CCC; \n  color: #000;\n}\n"
  },
  {
    "path": "lib/ace/theme/chaos.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n * \n * Copyright 2011 Irakli Gozalishvili. All rights reserved.\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-chaos\";\nexports.cssText = require(\"../requirejs/text!./chaos.css\");\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n\n});"
  },
  {
    "path": "lib/ace/theme/chrome.css",
    "content": ".ace-chrome .ace_gutter {\n  background: #ebebeb;\n  color: #333;\n  overflow : hidden;\n}\n\n.ace-chrome .ace_print-margin {\n  width: 1px;\n  background: #e8e8e8;\n}\n\n.ace-chrome {\n  background-color: #FFFFFF;\n  color: black;\n}\n\n.ace-chrome .ace_cursor {\n  color: black;\n}\n\n.ace-chrome .ace_invisible {\n  color: rgb(191, 191, 191);\n}\n\n.ace-chrome .ace_constant.ace_buildin {\n  color: rgb(88, 72, 246);\n}\n\n.ace-chrome .ace_constant.ace_language {\n  color: rgb(88, 92, 246);\n}\n\n.ace-chrome .ace_constant.ace_library {\n  color: rgb(6, 150, 14);\n}\n\n.ace-chrome .ace_invalid {\n  background-color: rgb(153, 0, 0);\n  color: white;\n}\n\n.ace-chrome .ace_fold {\n}\n\n.ace-chrome .ace_support.ace_function {\n  color: rgb(60, 76, 114);\n}\n\n.ace-chrome .ace_support.ace_constant {\n  color: rgb(6, 150, 14);\n}\n\n.ace-chrome .ace_support.ace_type,\n.ace-chrome .ace_support.ace_class\n.ace-chrome .ace_support.ace_other {\n  color: rgb(109, 121, 222);\n}\n\n.ace-chrome .ace_variable.ace_parameter {\n  font-style:italic;\n  color:#FD971F;\n}\n.ace-chrome .ace_keyword.ace_operator {\n  color: rgb(104, 118, 135);\n}\n\n.ace-chrome .ace_comment {\n  color: #236e24;\n}\n\n.ace-chrome .ace_comment.ace_doc {\n  color: #236e24;\n}\n\n.ace-chrome .ace_comment.ace_doc.ace_tag {\n  color: #236e24;\n}\n\n.ace-chrome .ace_constant.ace_numeric {\n  color: rgb(0, 0, 205);\n}\n\n.ace-chrome .ace_variable {\n  color: rgb(49, 132, 149);\n}\n\n.ace-chrome .ace_xml-pe {\n  color: rgb(104, 104, 91);\n}\n\n.ace-chrome .ace_entity.ace_name.ace_function {\n  color: #0000A2;\n}\n\n\n.ace-chrome .ace_heading {\n  color: rgb(12, 7, 255);\n}\n\n.ace-chrome .ace_list {\n  color:rgb(185, 6, 144);\n}\n\n.ace-chrome .ace_marker-layer .ace_selection {\n  background: rgb(181, 213, 255);\n}\n\n.ace-chrome .ace_marker-layer .ace_step {\n  background: rgb(252, 255, 0);\n}\n\n.ace-chrome .ace_marker-layer .ace_stack {\n  background: rgb(164, 229, 101);\n}\n\n.ace-chrome .ace_marker-layer .ace_bracket {\n  margin: -1px 0 0 -1px;\n  border: 1px solid rgb(192, 192, 192);\n}\n\n.ace-chrome .ace_marker-layer .ace_active-line {\n  background: rgba(0, 0, 0, 0.07);\n}\n\n.ace-chrome .ace_gutter-active-line {\n    background-color : #dcdcdc;\n}\n\n.ace-chrome .ace_marker-layer .ace_selected-word {\n  background: rgb(250, 250, 255);\n  border: 1px solid rgb(200, 200, 250);\n}\n\n.ace-chrome .ace_storage,\n.ace-chrome .ace_keyword,\n.ace-chrome .ace_meta.ace_tag {\n  color: rgb(147, 15, 128);\n}\n\n.ace-chrome .ace_string.ace_regex {\n  color: rgb(255, 0, 0)\n}\n\n.ace-chrome .ace_string {\n  color: #1A1AA6;\n}\n\n.ace-chrome .ace_entity.ace_other.ace_attribute-name {\n  color: #994409;\n}\n\n.ace-chrome .ace_indent-guide {\n  background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;\n}\n"
  },
  {
    "path": "lib/ace/theme/chrome.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\nexports.isDark = false;\nexports.cssClass = \"ace-chrome\";\nexports.cssText = require(\"../requirejs/text!./chrome.css\");\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "lib/ace/theme/clouds.css",
    "content": ".ace-clouds .ace_gutter {\n  background: #ebebeb;\n  color: #333\n}\n\n.ace-clouds .ace_print-margin {\n  width: 1px;\n  background: #e8e8e8\n}\n\n.ace-clouds {\n  background-color: #FFFFFF;\n  color: #000000\n}\n\n.ace-clouds .ace_cursor {\n  color: #000000\n}\n\n.ace-clouds .ace_marker-layer .ace_selection {\n  background: #BDD5FC\n}\n\n.ace-clouds.ace_multiselect .ace_selection.ace_start {\n  box-shadow: 0 0 3px 0px #FFFFFF;\n}\n\n.ace-clouds .ace_marker-layer .ace_step {\n  background: rgb(255, 255, 0)\n}\n\n.ace-clouds .ace_marker-layer .ace_bracket {\n  margin: -1px 0 0 -1px;\n  border: 1px solid #BFBFBF\n}\n\n.ace-clouds .ace_marker-layer .ace_active-line {\n  background: #FFFBD1\n}\n\n.ace-clouds .ace_gutter-active-line {\n  background-color : #dcdcdc\n}\n\n.ace-clouds .ace_marker-layer .ace_selected-word {\n  border: 1px solid #BDD5FC\n}\n\n.ace-clouds .ace_invisible {\n  color: #BFBFBF\n}\n\n.ace-clouds .ace_keyword,\n.ace-clouds .ace_meta,\n.ace-clouds .ace_support.ace_constant.ace_property-value {\n  color: #AF956F\n}\n\n.ace-clouds .ace_keyword.ace_operator {\n  color: #484848\n}\n\n.ace-clouds .ace_keyword.ace_other.ace_unit {\n  color: #96DC5F\n}\n\n.ace-clouds .ace_constant.ace_language {\n  color: #39946A\n}\n\n.ace-clouds .ace_constant.ace_numeric {\n  color: #46A609\n}\n\n.ace-clouds .ace_constant.ace_character.ace_entity {\n  color: #BF78CC\n}\n\n.ace-clouds .ace_invalid {\n  background-color: #FF002A\n}\n\n.ace-clouds .ace_fold {\n  background-color: #AF956F;\n  border-color: #000000\n}\n\n.ace-clouds .ace_storage,\n.ace-clouds .ace_support.ace_class,\n.ace-clouds .ace_support.ace_function,\n.ace-clouds .ace_support.ace_other,\n.ace-clouds .ace_support.ace_type {\n  color: #C52727\n}\n\n.ace-clouds .ace_string {\n  color: #5D90CD\n}\n\n.ace-clouds .ace_comment {\n  color: #BCC8BA\n}\n\n.ace-clouds .ace_entity.ace_name.ace_tag,\n.ace-clouds .ace_entity.ace_other.ace_attribute-name {\n  color: #606060\n}\n\n.ace-clouds .ace_indent-guide {\n  background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y\n}"
  },
  {
    "path": "lib/ace/theme/clouds.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\nexports.isDark = false;\nexports.cssClass = \"ace-clouds\";\nexports.cssText = require(\"../requirejs/text!./clouds.css\");\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "lib/ace/theme/clouds_midnight.css",
    "content": ".ace-clouds-midnight .ace_gutter {\n  background: #232323;\n  color: #929292\n}\n\n.ace-clouds-midnight .ace_print-margin {\n  width: 1px;\n  background: #232323\n}\n\n.ace-clouds-midnight {\n  background-color: #191919;\n  color: #929292\n}\n\n.ace-clouds-midnight .ace_cursor {\n  color: #7DA5DC\n}\n\n.ace-clouds-midnight .ace_marker-layer .ace_selection {\n  background: #000000\n}\n\n.ace-clouds-midnight.ace_multiselect .ace_selection.ace_start {\n  box-shadow: 0 0 3px 0px #191919;\n}\n\n.ace-clouds-midnight .ace_marker-layer .ace_step {\n  background: rgb(102, 82, 0)\n}\n\n.ace-clouds-midnight .ace_marker-layer .ace_bracket {\n  margin: -1px 0 0 -1px;\n  border: 1px solid #BFBFBF\n}\n\n.ace-clouds-midnight .ace_marker-layer .ace_active-line {\n  background: rgba(215, 215, 215, 0.031)\n}\n\n.ace-clouds-midnight .ace_gutter-active-line {\n  background-color: rgba(215, 215, 215, 0.031)\n}\n\n.ace-clouds-midnight .ace_marker-layer .ace_selected-word {\n  border: 1px solid #000000\n}\n\n.ace-clouds-midnight .ace_invisible {\n  color: #666\n}\n\n.ace-clouds-midnight .ace_keyword,\n.ace-clouds-midnight .ace_meta,\n.ace-clouds-midnight .ace_support.ace_constant.ace_property-value {\n  color: #927C5D\n}\n\n.ace-clouds-midnight .ace_keyword.ace_operator {\n  color: #4B4B4B\n}\n\n.ace-clouds-midnight .ace_keyword.ace_other.ace_unit {\n  color: #366F1A\n}\n\n.ace-clouds-midnight .ace_constant.ace_language {\n  color: #39946A\n}\n\n.ace-clouds-midnight .ace_constant.ace_numeric {\n  color: #46A609\n}\n\n.ace-clouds-midnight .ace_constant.ace_character.ace_entity {\n  color: #A165AC\n}\n\n.ace-clouds-midnight .ace_invalid {\n  color: #FFFFFF;\n  background-color: #E92E2E\n}\n\n.ace-clouds-midnight .ace_fold {\n  background-color: #927C5D;\n  border-color: #929292\n}\n\n.ace-clouds-midnight .ace_storage,\n.ace-clouds-midnight .ace_support.ace_class,\n.ace-clouds-midnight .ace_support.ace_function,\n.ace-clouds-midnight .ace_support.ace_other,\n.ace-clouds-midnight .ace_support.ace_type {\n  color: #E92E2E\n}\n\n.ace-clouds-midnight .ace_string {\n  color: #5D90CD\n}\n\n.ace-clouds-midnight .ace_comment {\n  color: #3C403B\n}\n\n.ace-clouds-midnight .ace_entity.ace_name.ace_tag,\n.ace-clouds-midnight .ace_entity.ace_other.ace_attribute-name {\n  color: #606060\n}\n\n.ace-clouds-midnight .ace_indent-guide {\n  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHB3d/8PAAOIAdULw8qMAAAAAElFTkSuQmCC) right repeat-y\n}"
  },
  {
    "path": "lib/ace/theme/clouds_midnight.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-clouds-midnight\";\nexports.cssText = require(\"../requirejs/text!./clouds_midnight.css\");\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "lib/ace/theme/cobalt.css",
    "content": ".ace-cobalt .ace_gutter {\n  background: #011e3a;\n  color: rgb(128,145,160)\n}\n\n.ace-cobalt .ace_print-margin {\n  width: 1px;\n  background: #555555\n}\n\n.ace-cobalt {\n  background-color: #002240;\n  color: #FFFFFF\n}\n\n.ace-cobalt .ace_cursor {\n  color: #FFFFFF\n}\n\n.ace-cobalt .ace_marker-layer .ace_selection {\n  background: rgba(179, 101, 57, 0.75)\n}\n\n.ace-cobalt.ace_multiselect .ace_selection.ace_start {\n  box-shadow: 0 0 3px 0px #002240;\n}\n\n.ace-cobalt .ace_marker-layer .ace_step {\n  background: rgb(127, 111, 19)\n}\n\n.ace-cobalt .ace_marker-layer .ace_bracket {\n  margin: -1px 0 0 -1px;\n  border: 1px solid rgba(255, 255, 255, 0.15)\n}\n\n.ace-cobalt .ace_marker-layer .ace_active-line {\n  background: rgba(0, 0, 0, 0.35)\n}\n\n.ace-cobalt .ace_gutter-active-line {\n  background-color: rgba(0, 0, 0, 0.35)\n}\n\n.ace-cobalt .ace_marker-layer .ace_selected-word {\n  border: 1px solid rgba(179, 101, 57, 0.75)\n}\n\n.ace-cobalt .ace_invisible {\n  color: rgba(255, 255, 255, 0.15)\n}\n\n.ace-cobalt .ace_keyword,\n.ace-cobalt .ace_meta {\n  color: #FF9D00\n}\n\n.ace-cobalt .ace_constant,\n.ace-cobalt .ace_constant.ace_character,\n.ace-cobalt .ace_constant.ace_character.ace_escape,\n.ace-cobalt .ace_constant.ace_other {\n  color: #FF628C\n}\n\n.ace-cobalt .ace_invalid {\n  color: #F8F8F8;\n  background-color: #800F00\n}\n\n.ace-cobalt .ace_support {\n  color: #80FFBB\n}\n\n.ace-cobalt .ace_support.ace_constant {\n  color: #EB939A\n}\n\n.ace-cobalt .ace_fold {\n  background-color: #FF9D00;\n  border-color: #FFFFFF\n}\n\n.ace-cobalt .ace_support.ace_function {\n  color: #FFB054\n}\n\n.ace-cobalt .ace_storage {\n  color: #FFEE80\n}\n\n.ace-cobalt .ace_entity {\n  color: #FFDD00\n}\n\n.ace-cobalt .ace_string {\n  color: #3AD900\n}\n\n.ace-cobalt .ace_string.ace_regexp {\n  color: #80FFC2\n}\n\n.ace-cobalt .ace_comment {\n  font-style: italic;\n  color: #0088FF\n}\n\n.ace-cobalt .ace_heading,\n.ace-cobalt .ace_markup.ace_heading {\n  color: #C8E4FD;\n  background-color: #001221\n}\n\n.ace-cobalt .ace_list,\n.ace-cobalt .ace_markup.ace_list {\n  background-color: #130D26\n}\n\n.ace-cobalt .ace_variable {\n  color: #CCCCCC\n}\n\n.ace-cobalt .ace_variable.ace_language {\n  color: #FF80E1\n}\n\n.ace-cobalt .ace_meta.ace_tag {\n  color: #9EFFFF\n}\n\n.ace-cobalt .ace_indent-guide {\n  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHCLSvkPAAP3AgSDTRd4AAAAAElFTkSuQmCC) right repeat-y\n}\n"
  },
  {
    "path": "lib/ace/theme/cobalt.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-cobalt\";\nexports.cssText = require(\"../requirejs/text!./cobalt.css\");\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "lib/ace/theme/crimson_editor.css",
    "content": ".ace-crimson-editor .ace_gutter {\n  background: #ebebeb;\n  color: #333;\n  overflow : hidden;\n}\n\n.ace-crimson-editor .ace_gutter-layer {\n  width: 100%;\n  text-align: right;\n}\n\n.ace-crimson-editor .ace_print-margin {\n  width: 1px;\n  background: #e8e8e8;\n}\n\n.ace-crimson-editor {\n  background-color: #FFFFFF;\n  color: rgb(64, 64, 64);\n}\n\n.ace-crimson-editor .ace_cursor {\n  color: black;\n}\n\n.ace-crimson-editor .ace_invisible {\n  color: rgb(191, 191, 191);\n}\n\n.ace-crimson-editor .ace_identifier {\n  color: black;\n}\n\n.ace-crimson-editor .ace_keyword {\n  color: blue;\n}\n\n.ace-crimson-editor .ace_constant.ace_buildin {\n  color: rgb(88, 72, 246);\n}\n\n.ace-crimson-editor .ace_constant.ace_language {\n  color: rgb(255, 156, 0);\n}\n\n.ace-crimson-editor .ace_constant.ace_library {\n  color: rgb(6, 150, 14);\n}\n\n.ace-crimson-editor .ace_invalid {\n  text-decoration: line-through;\n  color: rgb(224, 0, 0);\n}\n\n.ace-crimson-editor .ace_fold {\n}\n\n.ace-crimson-editor .ace_support.ace_function {\n  color: rgb(192, 0, 0);\n}\n\n.ace-crimson-editor .ace_support.ace_constant {\n  color: rgb(6, 150, 14);\n}\n\n.ace-crimson-editor .ace_support.ace_type,\n.ace-crimson-editor .ace_support.ace_class {\n  color: rgb(109, 121, 222);\n}\n\n.ace-crimson-editor .ace_keyword.ace_operator {\n  color: rgb(49, 132, 149);\n}\n\n.ace-crimson-editor .ace_string {\n  color: rgb(128, 0, 128);\n}\n\n.ace-crimson-editor .ace_comment {\n  color: rgb(76, 136, 107);\n}\n\n.ace-crimson-editor .ace_comment.ace_doc {\n  color: rgb(0, 102, 255);\n}\n\n.ace-crimson-editor .ace_comment.ace_doc.ace_tag {\n  color: rgb(128, 159, 191);\n}\n\n.ace-crimson-editor .ace_constant.ace_numeric {\n  color: rgb(0, 0, 64);\n}\n\n.ace-crimson-editor .ace_variable {\n  color: rgb(0, 64, 128);\n}\n\n.ace-crimson-editor .ace_xml-pe {\n  color: rgb(104, 104, 91);\n}\n\n.ace-crimson-editor .ace_marker-layer .ace_selection {\n  background: rgb(181, 213, 255);\n}\n\n.ace-crimson-editor .ace_marker-layer .ace_step {\n  background: rgb(252, 255, 0);\n}\n\n.ace-crimson-editor .ace_marker-layer .ace_stack {\n  background: rgb(164, 229, 101);\n}\n\n.ace-crimson-editor .ace_marker-layer .ace_bracket {\n  margin: -1px 0 0 -1px;\n  border: 1px solid rgb(192, 192, 192);\n}\n\n.ace-crimson-editor .ace_marker-layer .ace_active-line {\n  background: rgb(232, 242, 254);\n}\n\n.ace-crimson-editor .ace_gutter-active-line {\n    background-color : #dcdcdc;\n}\n\n.ace-crimson-editor .ace_meta.ace_tag {\n  color:rgb(28, 2, 255);\n}\n\n.ace-crimson-editor .ace_marker-layer .ace_selected-word {\n  background: rgb(250, 250, 255);\n  border: 1px solid rgb(200, 200, 250);\n}\n\n.ace-crimson-editor .ace_string.ace_regex {\n  color: rgb(192, 0, 192);\n}\n\n.ace-crimson-editor .ace_indent-guide {\n  background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;\n}"
  },
  {
    "path": "lib/ace/theme/crimson_editor.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\nexports.isDark = false;\nexports.cssText = require(\"../requirejs/text!./crimson_editor.css\");\n\nexports.cssClass = \"ace-crimson-editor\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "lib/ace/theme/dawn.css",
    "content": ".ace-dawn .ace_gutter {\n  background: #ebebeb;\n  color: #333\n}\n\n.ace-dawn .ace_print-margin {\n  width: 1px;\n  background: #e8e8e8\n}\n\n.ace-dawn {\n  background-color: #F9F9F9;\n  color: #080808\n}\n\n.ace-dawn .ace_cursor {\n  color: #000000\n}\n\n.ace-dawn .ace_marker-layer .ace_selection {\n  background: rgba(39, 95, 255, 0.30)\n}\n\n.ace-dawn.ace_multiselect .ace_selection.ace_start {\n  box-shadow: 0 0 3px 0px #F9F9F9;\n}\n\n.ace-dawn .ace_marker-layer .ace_step {\n  background: rgb(255, 255, 0)\n}\n\n.ace-dawn .ace_marker-layer .ace_bracket {\n  margin: -1px 0 0 -1px;\n  border: 1px solid rgba(75, 75, 126, 0.50)\n}\n\n.ace-dawn .ace_marker-layer .ace_active-line {\n  background: rgba(36, 99, 180, 0.12)\n}\n\n.ace-dawn .ace_gutter-active-line {\n  background-color : #dcdcdc\n}\n\n.ace-dawn .ace_marker-layer .ace_selected-word {\n  border: 1px solid rgba(39, 95, 255, 0.30)\n}\n\n.ace-dawn .ace_invisible {\n  color: rgba(75, 75, 126, 0.50)\n}\n\n.ace-dawn .ace_keyword,\n.ace-dawn .ace_meta {\n  color: #794938\n}\n\n.ace-dawn .ace_constant,\n.ace-dawn .ace_constant.ace_character,\n.ace-dawn .ace_constant.ace_character.ace_escape,\n.ace-dawn .ace_constant.ace_other {\n  color: #811F24\n}\n\n.ace-dawn .ace_invalid.ace_illegal {\n  text-decoration: underline;\n  font-style: italic;\n  color: #F8F8F8;\n  background-color: #B52A1D\n}\n\n.ace-dawn .ace_invalid.ace_deprecated {\n  text-decoration: underline;\n  font-style: italic;\n  color: #B52A1D\n}\n\n.ace-dawn .ace_support {\n  color: #691C97\n}\n\n.ace-dawn .ace_support.ace_constant {\n  color: #B4371F\n}\n\n.ace-dawn .ace_fold {\n  background-color: #794938;\n  border-color: #080808\n}\n\n.ace-dawn .ace_list,\n.ace-dawn .ace_markup.ace_list,\n.ace-dawn .ace_support.ace_function {\n  color: #693A17\n}\n\n.ace-dawn .ace_storage {\n  font-style: italic;\n  color: #A71D5D\n}\n\n.ace-dawn .ace_string {\n  color: #0B6125\n}\n\n.ace-dawn .ace_string.ace_regexp {\n  color: #CF5628\n}\n\n.ace-dawn .ace_comment {\n  font-style: italic;\n  color: #5A525F\n}\n\n.ace-dawn .ace_heading,\n.ace-dawn .ace_markup.ace_heading {\n  color: #19356D\n}\n\n.ace-dawn .ace_variable {\n  color: #234A97\n}\n\n.ace-dawn .ace_indent-guide {\n  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYLh/5+x/AAizA4hxNNsZAAAAAElFTkSuQmCC) right repeat-y\n}"
  },
  {
    "path": "lib/ace/theme/dawn.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\nexports.isDark = false;\nexports.cssClass = \"ace-dawn\";\nexports.cssText = require(\"../requirejs/text!./dawn.css\");\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "lib/ace/theme/dracula.css",
    "content": "/*\n * Copyright © 2017 Zeno Rocha <hi@zenorocha.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\nace-dracula .ace_gutter {\n  background: #282a36;\n  color: rgb(144,145,148)\n}\n\n.ace-dracula .ace_print-margin {\n  width: 1px;\n  background: #e8e8e8\n}\n\n.ace-dracula {\n  background-color: #282a36;\n  color: #f8f8f2\n}\n\n.ace-dracula .ace_cursor {\n  color: #f8f8f0\n}\n\n.ace-dracula .ace_marker-layer .ace_selection {\n  background: #44475a\n}\n\n.ace-dracula.ace_multiselect .ace_selection.ace_start {\n  box-shadow: 0 0 3px 0px #282a36;\n  border-radius: 2px\n}\n\n.ace-dracula .ace_marker-layer .ace_step {\n  background: rgb(198, 219, 174)\n}\n\n.ace-dracula .ace_marker-layer .ace_bracket {\n  margin: -1px 0 0 -1px;\n  border: 1px solid #3B3A32\n}\n\n.ace-dracula .ace_marker-layer .ace_active-line {\n  background: #44475a\n}\n\n.ace-dracula .ace_gutter-active-line {\n  background-color: #44475a\n}\n\n.ace-dracula .ace_marker-layer .ace_selected-word {\n  border: 1px solid #44475a\n}\n\n.ace-dracula .ace_fold {\n  background-color: #50fa7b;\n  border-color: #f8f8f2\n}\n\n.ace-dracula .ace_keyword {\n  color: #ff79c6\n}\n\n.ace-dracula .ace_constant.ace_language {\n  color: #bd93f9\n}\n\n.ace-dracula .ace_constant.ace_numeric {\n  color: #bd93f9\n}\n\n.ace-dracula .ace_constant.ace_character {\n  color: #bd93f9\n}\n\n.ace-dracula .ace_constant.ace_character.ace_escape {\n  color: #ff79c6\n}\n\n.ace-dracula .ace_constant.ace_other {\n  color: #bd93f9\n}\n\n.ace-dracula .ace_support.ace_function {\n  color: #8be9fd\n}\n\n.ace-dracula .ace_support.ace_constant {\n  color: #6be5fd\n}\n\n.ace-dracula .ace_support.ace_class {\n  font-style: italic;\n  color: #66d9ef\n}\n\n.ace-dracula .ace_support.ace_type {\n  font-style: italic;\n  color: #66d9ef\n}\n\n.ace-dracula .ace_storage {\n  color: #ff79c6\n}\n\n.ace-dracula .ace_storage.ace_type {\n  font-style: italic;\n  color: #8be9fd\n}\n\n.ace-dracula .ace_invalid {\n  color: #F8F8F0;\n  background-color: #ff79c6\n}\n\n.ace-dracula .ace_invalid.ace_deprecated {\n  color: #F8F8F0;\n  background-color: #bd93f9\n}\n\n.ace-dracula .ace_string {\n  color: #f1fa8c\n}\n\n.ace-dracula .ace_comment {\n  color: #6272a4\n}\n\n.ace-dracula .ace_variable {\n  color: #50fa7b\n}\n\n.ace-dracula .ace_variable.ace_parameter {\n  font-style: italic;\n  color: #ffb86c\n}\n\n.ace-dracula .ace_entity.ace_other.ace_attribute-name {\n  color: #50fa7b\n}\n\n.ace-dracula .ace_entity.ace_name.ace_function {\n  color: #50fa7b\n}\n\n.ace-dracula .ace_entity.ace_name.ace_tag {\n  color: #ff79c6\n}\n"
  },
  {
    "path": "lib/ace/theme/dracula.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-dracula\";\nexports.cssText = require(\"../requirejs/text!./dracula.css\");\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "lib/ace/theme/dreamweaver.css",
    "content": ".ace-dreamweaver .ace_gutter {\n  background: #e8e8e8;\n  color: #333;\n}\n\n.ace-dreamweaver .ace_print-margin {\n  width: 1px;\n  background: #e8e8e8;\n}\n\n.ace-dreamweaver {\n  background-color: #FFFFFF;\n  color: black;\n}\n\n.ace-dreamweaver .ace_fold {\n    background-color: #757AD8;\n}\n\n.ace-dreamweaver .ace_cursor {\n  color: black;\n}\n        \n.ace-dreamweaver .ace_invisible {\n  color: rgb(191, 191, 191);\n}\n\n.ace-dreamweaver .ace_storage,\n.ace-dreamweaver .ace_keyword {\n  color: blue;\n}\n\n.ace-dreamweaver .ace_constant.ace_buildin {\n  color: rgb(88, 72, 246);\n}\n\n.ace-dreamweaver .ace_constant.ace_language {\n  color: rgb(88, 92, 246);\n}\n\n.ace-dreamweaver .ace_constant.ace_library {\n  color: rgb(6, 150, 14);\n}\n\n.ace-dreamweaver .ace_invalid {\n  background-color: rgb(153, 0, 0);\n  color: white;\n}\n\n.ace-dreamweaver .ace_support.ace_function {\n  color: rgb(60, 76, 114);\n}\n\n.ace-dreamweaver .ace_support.ace_constant {\n  color: rgb(6, 150, 14);\n}\n\n.ace-dreamweaver .ace_support.ace_type,\n.ace-dreamweaver .ace_support.ace_class {\n  color: #009;\n}\n\n.ace-dreamweaver .ace_support.ace_php_tag {\n  color: #f00;\n}\n\n.ace-dreamweaver .ace_keyword.ace_operator {\n  color: rgb(104, 118, 135);\n}\n\n.ace-dreamweaver .ace_string {\n  color: #00F;\n}\n\n.ace-dreamweaver .ace_comment {\n  color: rgb(76, 136, 107);\n}\n\n.ace-dreamweaver .ace_comment.ace_doc {\n  color: rgb(0, 102, 255);\n}\n\n.ace-dreamweaver .ace_comment.ace_doc.ace_tag {\n  color: rgb(128, 159, 191);\n}\n\n.ace-dreamweaver .ace_constant.ace_numeric {\n  color: rgb(0, 0, 205);\n}\n\n.ace-dreamweaver .ace_variable {\n  color: #06F\n}\n\n.ace-dreamweaver .ace_xml-pe {\n  color: rgb(104, 104, 91);\n}\n\n.ace-dreamweaver .ace_entity.ace_name.ace_function {\n  color: #00F;\n}\n\n\n.ace-dreamweaver .ace_heading {\n  color: rgb(12, 7, 255);\n}\n\n.ace-dreamweaver .ace_list {\n  color:rgb(185, 6, 144);\n}\n\n.ace-dreamweaver .ace_marker-layer .ace_selection {\n  background: rgb(181, 213, 255);\n}\n\n.ace-dreamweaver .ace_marker-layer .ace_step {\n  background: rgb(252, 255, 0);\n}\n\n.ace-dreamweaver .ace_marker-layer .ace_stack {\n  background: rgb(164, 229, 101);\n}\n\n.ace-dreamweaver .ace_marker-layer .ace_bracket {\n  margin: -1px 0 0 -1px;\n  border: 1px solid rgb(192, 192, 192);\n}\n\n.ace-dreamweaver .ace_marker-layer .ace_active-line {\n  background: rgba(0, 0, 0, 0.07);\n}\n\n.ace-dreamweaver .ace_gutter-active-line {\n  background-color : #DCDCDC;\n}\n\n.ace-dreamweaver .ace_marker-layer .ace_selected-word {\n  background: rgb(250, 250, 255);\n  border: 1px solid rgb(200, 200, 250);\n}\n\n.ace-dreamweaver .ace_meta.ace_tag {\n  color:#009;\n}\n\n.ace-dreamweaver .ace_meta.ace_tag.ace_anchor {\n  color:#060;\n}\n\n.ace-dreamweaver .ace_meta.ace_tag.ace_form {\n  color:#F90;\n}\n\n.ace-dreamweaver .ace_meta.ace_tag.ace_image {\n  color:#909;\n}\n\n.ace-dreamweaver .ace_meta.ace_tag.ace_script {\n  color:#900;\n}\n\n.ace-dreamweaver .ace_meta.ace_tag.ace_style {\n  color:#909;\n}\n\n.ace-dreamweaver .ace_meta.ace_tag.ace_table {\n  color:#099;\n}\n\n.ace-dreamweaver .ace_string.ace_regex {\n  color: rgb(255, 0, 0)\n}\n\n.ace-dreamweaver .ace_indent-guide {\n  background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;\n}"
  },
  {
    "path": "lib/ace/theme/dreamweaver.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\nexports.isDark = false;\nexports.cssClass = \"ace-dreamweaver\";\nexports.cssText = require(\"../requirejs/text!./dreamweaver.css\");\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "lib/ace/theme/eclipse.css",
    "content": ".ace-eclipse .ace_gutter {\n  background: #ebebeb;\n  border-right: 1px solid rgb(159, 159, 159);\n  color: rgb(136, 136, 136);\n}\n\n.ace-eclipse .ace_print-margin {\n  width: 1px;\n  background: #ebebeb;\n}\n\n.ace-eclipse {\n  background-color: #FFFFFF;\n  color: black;\n}\n\n.ace-eclipse .ace_fold {\n    background-color: rgb(60, 76, 114);\n}\n\n.ace-eclipse .ace_cursor {\n  color: black;\n}\n\n.ace-eclipse .ace_storage,\n.ace-eclipse .ace_keyword,\n.ace-eclipse .ace_variable {\n  color: rgb(127, 0, 85);\n}\n\n.ace-eclipse .ace_constant.ace_buildin {\n  color: rgb(88, 72, 246);\n}\n\n.ace-eclipse .ace_constant.ace_library {\n  color: rgb(6, 150, 14);\n}\n\n.ace-eclipse .ace_function {\n  color: rgb(60, 76, 114);\n}\n\n.ace-eclipse .ace_string {\n  color: rgb(42, 0, 255);\n}\n\n.ace-eclipse .ace_comment {\n  color: rgb(113, 150, 130);\n}\n\n.ace-eclipse .ace_comment.ace_doc {\n  color: rgb(63, 95, 191);\n}\n\n.ace-eclipse .ace_comment.ace_doc.ace_tag {\n  color: rgb(127, 159, 191);\n}\n\n.ace-eclipse .ace_constant.ace_numeric {\n  color: darkblue;\n}\n\n.ace-eclipse .ace_tag {\n  color: rgb(25, 118, 116);\n}\n\n.ace-eclipse .ace_type {\n  color: rgb(127, 0, 127);\n}\n\n.ace-eclipse .ace_xml-pe {\n  color: rgb(104, 104, 91);\n}\n\n.ace-eclipse .ace_marker-layer .ace_selection {\n  background: rgb(181, 213, 255);\n}\n\n.ace-eclipse .ace_marker-layer .ace_bracket {\n  margin: -1px 0 0 -1px;\n  border: 1px solid rgb(192, 192, 192);\n}\n\n.ace-eclipse .ace_meta.ace_tag {\n  color:rgb(25, 118, 116);\n}\n\n.ace-eclipse .ace_invisible {\n  color: #ddd;\n}\n\n.ace-eclipse .ace_entity.ace_other.ace_attribute-name {\n  color:rgb(127, 0, 127);\n}\n.ace-eclipse .ace_marker-layer .ace_step {\n  background: rgb(255, 255, 0);\n}\n\n.ace-eclipse .ace_active-line {\n  background: rgb(232, 242, 254);\n}\n\n.ace-eclipse .ace_gutter-active-line {\n  background-color : #DADADA;\n}\n\n.ace-eclipse .ace_marker-layer .ace_selected-word {\n  border: 1px solid rgb(181, 213, 255);\n}\n\n.ace-eclipse .ace_indent-guide {\n  background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;\n}"
  },
  {
    "path": "lib/ace/theme/eclipse.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nexports.isDark = false;\nexports.cssText = require(\"../requirejs/text!./eclipse.css\");\n\nexports.cssClass = \"ace-eclipse\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "lib/ace/theme/github.css",
    "content": "/* CSS style content from github's default pygments highlighter template.\n   Cursor and selection styles from textmate.css. */\n.ace-github .ace_gutter {\n  background: #e8e8e8;\n  color: #AAA;\n}\n\n.ace-github  {\n  background: #fff;\n  color: #000;\n}\n\n.ace-github .ace_keyword {\n  font-weight: bold;\n}\n\n.ace-github .ace_string {\n  color: #D14;\n}\n\n.ace-github .ace_variable.ace_class {\n  color: teal;\n}\n\n.ace-github .ace_constant.ace_numeric {\n  color: #099;\n}\n\n.ace-github .ace_constant.ace_buildin {\n  color: #0086B3;\n}\n\n.ace-github .ace_support.ace_function {\n  color: #0086B3;\n}\n\n.ace-github .ace_comment {\n  color: #998;\n  font-style: italic;\n}\n\n.ace-github .ace_variable.ace_language  {\n  color: #0086B3;\n}\n\n.ace-github .ace_paren {\n  font-weight: bold;\n}\n\n.ace-github .ace_boolean {\n  font-weight: bold;\n}\n\n.ace-github .ace_string.ace_regexp {\n  color: #009926;\n  font-weight: normal;\n}\n\n.ace-github .ace_variable.ace_instance {\n  color: teal;\n}\n\n.ace-github .ace_constant.ace_language {\n  font-weight: bold;\n}\n\n.ace-github .ace_cursor {\n  color: black;\n}\n\n.ace-github.ace_focus .ace_marker-layer .ace_active-line {\n  background: rgb(255, 255, 204);\n}\n.ace-github .ace_marker-layer .ace_active-line {\n  background: rgb(245, 245, 245);\n}\n\n.ace-github .ace_marker-layer .ace_selection {\n  background: rgb(181, 213, 255);\n}\n\n.ace-github.ace_multiselect .ace_selection.ace_start {\n  box-shadow: 0 0 3px 0px white;\n}\n/* bold keywords cause cursor issues for some fonts */\n/* this disables bold style for editor and keeps for static highlighter */\n.ace-github.ace_nobold .ace_line > span {\n    font-weight: normal !important;\n}\n\n.ace-github .ace_marker-layer .ace_step {\n  background: rgb(252, 255, 0);\n}\n\n.ace-github .ace_marker-layer .ace_stack {\n  background: rgb(164, 229, 101);\n}\n\n.ace-github .ace_marker-layer .ace_bracket {\n  margin: -1px 0 0 -1px;\n  border: 1px solid rgb(192, 192, 192);\n}\n\n.ace-github .ace_gutter-active-line {\n    background-color : rgba(0, 0, 0, 0.07);\n}\n\n.ace-github .ace_marker-layer .ace_selected-word {\n  background: rgb(250, 250, 255);\n  border: 1px solid rgb(200, 200, 250);\n}\n\n.ace-github .ace_invisible {\n  color: #BFBFBF\n}\n\n.ace-github .ace_print-margin {\n  width: 1px;\n  background: #e8e8e8;\n}\n\n.ace-github .ace_indent-guide {\n  background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;\n}"
  },
  {
    "path": "lib/ace/theme/github.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\nexports.isDark = false;\nexports.cssClass = \"ace-github\";\nexports.cssText = require(\"../requirejs/text!./github.css\");\n\n    var dom = require(\"../lib/dom\");\n    dom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "lib/ace/theme/gob.css",
    "content": ".ace-gob .ace_gutter {\n  background: #0B1818;\n  color: #03EE03\n}\n\n.ace-gob .ace_print-margin {\n  width: 1px;\n  background: #131313\n}\n\n.ace-gob {\n  background-color: #0B0B0B;\n  color: #00FF00\n}\n\n.ace-gob .ace_cursor {\n  border-color: rgba(16, 248, 255, 0.90);\n  background-color: rgba(16, 240, 248, 0.70);\n  opacity: 0.4;\n}\n\n.ace-gob .ace_marker-layer .ace_selection {\n  background: rgba(221, 240, 255, 0.20)\n}\n\n.ace-gob.ace_multiselect .ace_selection.ace_start {\n  box-shadow: 0 0 3px 0px #141414;\n}\n\n.ace-gob .ace_marker-layer .ace_step {\n  background: rgb(16, 128, 0)\n}\n\n.ace-gob .ace_marker-layer .ace_bracket {\n  margin: -1px 0 0 -1px;\n  border: 1px solid rgba(64, 255, 255, 0.25)\n}\n\n.ace-gob .ace_marker-layer .ace_active-line {\n  background: rgba(255, 255, 255, 0.04)\n}\n\n.ace-gob .ace_gutter-active-line {\n  background-color: rgba(255, 255, 255, 0.04)\n}\n\n.ace-gob .ace_marker-layer .ace_selected-word {\n  border: 1px solid rgba(192, 240, 255, 0.20)\n}\n\n.ace-gob .ace_invisible {\n  color: rgba(255, 255, 255, 0.25)\n}\n\n.ace-gob .ace_keyword,\n.ace-gob .ace_meta {\n  color: #10D8E8\n}\n\n.ace-gob .ace_constant,\n.ace-gob .ace_constant.ace_character,\n.ace-gob .ace_constant.ace_character.ace_escape,\n.ace-gob .ace_constant.ace_other,\n.ace-gob .ace_heading,\n.ace-gob .ace_markup.ace_heading,\n.ace-gob .ace_support.ace_constant {\n  color: #10F0A0\n}\n\n.ace-gob .ace_invalid.ace_illegal {\n  color: #F8F8F8;\n  background-color: rgba(86, 45, 86, 0.75)\n}\n\n.ace-gob .ace_invalid.ace_deprecated {\n  text-decoration: underline;\n  font-style: italic;\n  color: #20F8C0\n}\n\n.ace-gob .ace_support {\n  color: #20E8B0\n}\n\n.ace-gob .ace_fold {\n  background-color: #50B8B8;\n  border-color: #70F8F8\n}\n\n.ace-gob .ace_support.ace_function {\n  color: #00F800\n}\n\n.ace-gob .ace_list,\n.ace-gob .ace_markup.ace_list,\n.ace-gob .ace_storage {\n  color: #10FF98\n}\n\n.ace-gob .ace_entity.ace_name.ace_function,\n.ace-gob .ace_meta.ace_tag,\n.ace-gob .ace_variable {\n  color: #00F868\n}\n\n.ace-gob .ace_string {\n  color: #10F060\n}\n\n.ace-gob .ace_string.ace_regexp {\n  color: #20F090;\n}\n\n.ace-gob .ace_comment {\n  font-style: italic;\n  color: #00E060;\n}\n\n.ace-gob .ace_variable {\n  color: #00F888;\n}\n\n.ace-gob .ace_xml-pe {\n  color: #488858;\n}\n\n.ace-gob .ace_indent-guide {\n  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWMQERFpYLC1tf0PAAgOAnPnhxyiAAAAAElFTkSuQmCC) right repeat-y\n}\n\n"
  },
  {
    "path": "lib/ace/theme/gob.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-gob\";\nexports.cssText = require(\"../requirejs/text!./gob.css\");\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "lib/ace/theme/gruvbox.css",
    "content": ".ace-gruvbox .ace_gutter-active-line {\n  background-color: #3C3836;\n}\n\n.ace-gruvbox {\n  color: #EBDAB4;\n  background-color: #1D2021;\n}\n\n.ace-gruvbox .ace_invisible {\n  color: #504945;\n}\n\n.ace-gruvbox .ace_marker-layer .ace_selection {\n  background: rgba(179, 101, 57, 0.75)\n}\n\n.ace-gruvbox.ace_multiselect .ace_selection.ace_start {\n  box-shadow: 0 0 3px 0px #002240;\n}\n\n.ace-gruvbox .ace_keyword {\n  color: #8ec07c;\n}\n\n.ace-gruvbox .ace_comment {\n  font-style: italic;\n  color: #928375;\n}\n\n.ace-gruvbox .ace-statement {\n  color: red;\n}\n\n.ace-gruvbox .ace_variable {\n  color: #84A598;\n}\n\n.ace-gruvbox .ace_variable.ace_language {\n  color: #D2879B;\n}\n\n.ace-gruvbox .ace_constant {\n  color: #C2859A;\n}\n\n.ace-gruvbox .ace_constant.ace_language {\n  color: #C2859A;\n}\n\n.ace-gruvbox .ace_constant.ace_numeric {\n  color: #C2859A;\n}\n\n.ace-gruvbox .ace_string {\n  color: #B8BA37;\n}\n\n.ace-gruvbox .ace_support {\n  color: #F9BC41;\n}\n\n.ace-gruvbox .ace_support.ace_function {\n  color: #F84B3C;\n}\n\n.ace-gruvbox .ace_storage {\n  color: #8FBF7F;\n}\n\n.ace-gruvbox .ace_keyword.ace_operator {\n  color: #EBDAB4;\n}\n\n.ace-gruvbox .ace_punctuation.ace_operator {\n  color: yellow;\n}\n\n.ace-gruvbox .ace_marker-layer .ace_active-line {\n  background: #3C3836;\n}\n\n.ace-gruvbox .ace_marker-layer .ace_selected-word {\n  border-radius: 4px;\n  border: 8px solid #3f475d;\n}\n\n.ace-gruvbox .ace_print-margin {\n  width: 5px;\n  background: #3C3836;\n}\n\n.ace-gruvbox .ace_indent-guide {\n  background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNQUFD4z6Crq/sfAAuYAuYl+7lfAAAAAElFTkSuQmCC\") right repeat-y;\n}"
  },
  {
    "path": "lib/ace/theme/gruvbox.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright 2011 Irakli Gozalishvili. All rights reserved.\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-gruvbox\";\nexports.cssText = require(\"../requirejs/text!./gruvbox.css\");\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n\n});\n"
  },
  {
    "path": "lib/ace/theme/idle_fingers.css",
    "content": ".ace-idle-fingers .ace_gutter {\n  background: #3b3b3b;\n  color: rgb(153,153,153)\n}\n\n.ace-idle-fingers .ace_print-margin {\n  width: 1px;\n  background: #3b3b3b\n}\n\n.ace-idle-fingers {\n  background-color: #323232;\n  color: #FFFFFF\n}\n\n.ace-idle-fingers .ace_cursor {\n  color: #91FF00\n}\n\n.ace-idle-fingers .ace_marker-layer .ace_selection {\n  background: rgba(90, 100, 126, 0.88)\n}\n\n.ace-idle-fingers.ace_multiselect .ace_selection.ace_start {\n  box-shadow: 0 0 3px 0px #323232;\n}\n\n.ace-idle-fingers .ace_marker-layer .ace_step {\n  background: rgb(102, 82, 0)\n}\n\n.ace-idle-fingers .ace_marker-layer .ace_bracket {\n  margin: -1px 0 0 -1px;\n  border: 1px solid #404040\n}\n\n.ace-idle-fingers .ace_marker-layer .ace_active-line {\n  background: #353637\n}\n\n.ace-idle-fingers .ace_gutter-active-line {\n  background-color: #353637\n}\n\n.ace-idle-fingers .ace_marker-layer .ace_selected-word {\n  border: 1px solid rgba(90, 100, 126, 0.88)\n}\n\n.ace-idle-fingers .ace_invisible {\n  color: #404040\n}\n\n.ace-idle-fingers .ace_keyword,\n.ace-idle-fingers .ace_meta {\n  color: #CC7833\n}\n\n.ace-idle-fingers .ace_constant,\n.ace-idle-fingers .ace_constant.ace_character,\n.ace-idle-fingers .ace_constant.ace_character.ace_escape,\n.ace-idle-fingers .ace_constant.ace_other,\n.ace-idle-fingers .ace_support.ace_constant {\n  color: #6C99BB\n}\n\n.ace-idle-fingers .ace_invalid {\n  color: #FFFFFF;\n  background-color: #FF0000\n}\n\n.ace-idle-fingers .ace_fold {\n  background-color: #CC7833;\n  border-color: #FFFFFF\n}\n\n.ace-idle-fingers .ace_support.ace_function {\n  color: #B83426\n}\n\n.ace-idle-fingers .ace_variable.ace_parameter {\n  font-style: italic\n}\n\n.ace-idle-fingers .ace_string {\n  color: #A5C261\n}\n\n.ace-idle-fingers .ace_string.ace_regexp {\n  color: #CCCC33\n}\n\n.ace-idle-fingers .ace_comment {\n  font-style: italic;\n  color: #BC9458\n}\n\n.ace-idle-fingers .ace_meta.ace_tag {\n  color: #FFE5BB\n}\n\n.ace-idle-fingers .ace_entity.ace_name {\n  color: #FFC66D\n}\n\n.ace-idle-fingers .ace_collab.ace_user1 {\n  color: #323232;\n  background-color: #FFF980\n}\n\n.ace-idle-fingers .ace_indent-guide {\n  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWMwMjLyZYiPj/8PAAreAwAI1+g0AAAAAElFTkSuQmCC) right repeat-y\n}"
  },
  {
    "path": "lib/ace/theme/idle_fingers.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-idle-fingers\";\nexports.cssText = require(\"../requirejs/text!./idle_fingers.css\");\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "lib/ace/theme/iplastic.css",
    "content": ".ace-iplastic .ace_gutter {\n  background: #dddddd;\n  color: #666666\n}\n\n.ace-iplastic .ace_print-margin {\n  width: 1px;\n  background: #bbbbbb\n}\n\n.ace-iplastic {\n  background-color: #eeeeee;\n  color: #333333\n}\n\n.ace-iplastic .ace_cursor {\n  color: #333\n}\n\n.ace-iplastic .ace_marker-layer .ace_selection {\n  background: #BAD6FD;\n}\n\n.ace-iplastic.ace_multiselect .ace_selection.ace_start {\n  border-radius: 4px\n}\n\n.ace-iplastic .ace_marker-layer .ace_step {\n  background: #444444\n}\n\n.ace-iplastic .ace_marker-layer .ace_bracket {\n  margin: -1px 0 0 -1px;\n  border: 1px solid #49483E;\n  background: #FFF799\n}\n\n.ace-iplastic .ace_marker-layer .ace_active-line {\n  background: #e5e5e5\n}\n\n.ace-iplastic .ace_gutter-active-line {\n  background-color: #eeeeee\n}\n\n.ace-iplastic .ace_marker-layer .ace_selected-word {\n  border: 1px solid #555555;\n  border-radius:4px\n}\n\n.ace-iplastic .ace_invisible {\n  color: #999999\n}\n\n.ace-iplastic .ace_entity.ace_name.ace_tag,\n.ace-iplastic .ace_keyword,\n.ace-iplastic .ace_meta.ace_tag,\n.ace-iplastic .ace_storage {\n  color: #0000FF\n}\n\n.ace-iplastic .ace_punctuation,\n.ace-iplastic .ace_punctuation.ace_tag {\n  color: #000\n}\n\n.ace-iplastic .ace_constant {\n  color: #333333;\n  font-weight: 700\n}\n\n.ace-iplastic .ace_constant.ace_character,\n.ace-iplastic .ace_constant.ace_language,\n.ace-iplastic .ace_constant.ace_numeric,\n.ace-iplastic .ace_constant.ace_other {\n  color: #0066FF;\n  font-weight: 700\n}\n\n.ace-iplastic .ace_constant.ace_numeric{\n  font-weight: 100\n}\n\n.ace-iplastic .ace_invalid {\n  color: #F8F8F0;\n  background-color: #F92672\n}\n\n.ace-iplastic .ace_invalid.ace_deprecated {\n  color: #F8F8F0;\n  background-color: #AE81FF\n}\n\n.ace-iplastic .ace_support.ace_constant,\n.ace-iplastic .ace_support.ace_function {\n  color: #333333;\n  font-weight: 700\n}\n\n.ace-iplastic .ace_fold {\n  background-color: #464646;\n  border-color: #F8F8F2\n}\n\n.ace-iplastic .ace_storage.ace_type,\n.ace-iplastic .ace_support.ace_class,\n.ace-iplastic .ace_support.ace_type {\n  color: #3333fc;\n  font-weight: 700\n}\n\n.ace-iplastic .ace_entity.ace_name.ace_function,\n.ace-iplastic .ace_entity.ace_other,\n.ace-iplastic .ace_entity.ace_other.ace_attribute-name,\n.ace-iplastic .ace_variable {\n  color: #3366cc;\n  font-style: italic\n}\n\n.ace-iplastic .ace_variable.ace_parameter {\n  font-style: italic;\n  color: #2469E0\n}\n\n.ace-iplastic .ace_string {\n  color: #a55f03\n}\n\n.ace-iplastic .ace_comment {\n  color: #777777;\n  font-style: italic\n}\n\n.ace-iplastic .ace_fold-widget {\n  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==);\n}\n\n.ace-iplastic .ace_indent-guide {\n  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAABlJREFUeNpi+P//PwMzMzPzfwAAAAD//wMAGRsECSML/RIAAAAASUVORK5CYII=) right repeat-y\n}"
  },
  {
    "path": "lib/ace/theme/iplastic.js",
    "content": "\n/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\nexports.isDark = false;\nexports.cssClass = \"ace-iplastic\";\nexports.cssText = require(\"../requirejs/text!./iplastic.css\");\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "lib/ace/theme/katzenmilch.css",
    "content": ".ace-katzenmilch .ace_gutter,\n/* THIS THEME WAS AUTOGENERATED BY Theme.tmpl.css (UUID: ) */\n\n.ace-katzenmilch .ace_gutter {\n  background: #e8e8e8;\n  color: #333\n}\n\n.ace-katzenmilch .ace_print-margin {\n  width: 1px;\n  background: #e8e8e8\n}\n\n.ace-katzenmilch {\n  background-color: #f3f2f3;\n  color: rgba(15, 0, 9, 1.0)\n}\n\n.ace-katzenmilch .ace_cursor {\n  border-left: 2px solid #100011\n}\n\n.ace-katzenmilch .ace_overwrite-cursors .ace_cursor {\n  border-left: 0px;\n  border-bottom: 1px solid #100011\n}\n\n.ace-katzenmilch .ace_marker-layer .ace_selection {\n  background: rgba(100, 5, 208, 0.27)\n}\n\n.ace-katzenmilch.ace_multiselect .ace_selection.ace_start {\n  box-shadow: 0 0 3px 0px #f3f2f3;\n}\n\n.ace-katzenmilch .ace_marker-layer .ace_step {\n  background: rgb(198, 219, 174)\n}\n\n.ace-katzenmilch .ace_marker-layer .ace_bracket {\n  margin: -1px 0 0 -1px;\n  border: 1px solid rgba(0, 0, 0, 0.33);\n}\n\n.ace-katzenmilch .ace_marker-layer .ace_active-line {\n  background: rgb(232, 242, 254)\n}\n\n.ace-katzenmilch .ace_gutter-active-line {\n  background-color: rgb(232, 242, 254)\n}\n\n.ace-katzenmilch .ace_marker-layer .ace_selected-word {\n  border: 1px solid rgba(100, 5, 208, 0.27)\n}\n\n.ace-katzenmilch .ace_invisible {\n  color: #BFBFBF\n}\n\n.ace-katzenmilch .ace_fold {\n  background-color: rgba(2, 95, 73, 0.97);\n  border-color: rgba(15, 0, 9, 1.0)\n}\n\n.ace-katzenmilch .ace_keyword {\n  color: #674Aa8;\n  rbackground-color: rgba(163, 170, 216, 0.055)\n}\n\n.ace-katzenmilch .ace_constant.ace_language {\n  color: #7D7e52;\n  rbackground-color: rgba(189, 190, 130, 0.059)\n}\n\n.ace-katzenmilch .ace_constant.ace_numeric {\n  color: rgba(79, 130, 123, 0.93);\n  rbackground-color: rgba(119, 194, 187, 0.059)\n}\n\n.ace-katzenmilch .ace_constant.ace_character,\n.ace-katzenmilch .ace_constant.ace_other {\n  color: rgba(2, 95, 105, 1.0);\n  rbackground-color: rgba(127, 34, 153, 0.063)\n}\n\n.ace-katzenmilch .ace_support.ace_function {\n  color: #9D7e62;\n  rbackground-color: rgba(189, 190, 130, 0.039)\n}\n\n.ace-katzenmilch .ace_support.ace_class {\n  color: rgba(239, 106, 167, 1.0);\n  rbackground-color: rgba(239, 106, 167, 0.063)\n}\n\n.ace-katzenmilch .ace_storage {\n  color: rgba(123, 92, 191, 1.0);\n  rbackground-color: rgba(139, 93, 223, 0.051)\n}\n\n.ace-katzenmilch .ace_invalid {\n  color: #DFDFD5;\n  rbackground-color: #CC1B27\n}\n\n.ace-katzenmilch .ace_string {\n  color: #5a5f9b;\n  rbackground-color: rgba(170, 175, 219, 0.035)\n}\n\n.ace-katzenmilch .ace_comment {\n  font-style: italic;\n  color: rgba(64, 79, 80, 0.67);\n  rbackground-color: rgba(95, 15, 255, 0.0078)\n}\n\n.ace-katzenmilch .ace_entity.ace_name.ace_function,\n.ace-katzenmilch .ace_variable {\n  color: rgba(2, 95, 73, 0.97);\n  rbackground-color: rgba(34, 255, 73, 0.12)\n}\n\n.ace-katzenmilch .ace_variable.ace_language {\n  color: #316fcf;\n  rbackground-color: rgba(58, 175, 255, 0.039)\n}\n\n.ace-katzenmilch .ace_variable.ace_parameter {\n  font-style: italic;\n  color: rgba(51, 150, 159, 0.87);\n  rbackground-color: rgba(5, 214, 249, 0.043)\n}\n\n.ace-katzenmilch .ace_entity.ace_other.ace_attribute-name {\n  color: rgba(73, 70, 194, 0.93);\n  rbackground-color: rgba(73, 134, 194, 0.035)\n}\n\n.ace-katzenmilch .ace_entity.ace_name.ace_tag {\n  color: #3976a2;\n  rbackground-color: rgba(73, 166, 210, 0.039)\n}"
  },
  {
    "path": "lib/ace/theme/katzenmilch.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\nexports.isDark = false;\nexports.cssClass = \"ace-katzenmilch\";\nexports.cssText = require(\"../requirejs/text!./katzenmilch.css\");\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "lib/ace/theme/kr_theme.css",
    "content": ".ace-kr-theme .ace_gutter {\n  background: #1c1917;\n  color: #FCFFE0\n}\n\n.ace-kr-theme .ace_print-margin {\n  width: 1px;\n  background: #1c1917\n}\n\n.ace-kr-theme {\n  background-color: #0B0A09;\n  color: #FCFFE0\n}\n\n.ace-kr-theme .ace_cursor {\n  color: #FF9900\n}\n\n.ace-kr-theme .ace_marker-layer .ace_selection {\n  background: rgba(170, 0, 255, 0.45)\n}\n\n.ace-kr-theme.ace_multiselect .ace_selection.ace_start {\n  box-shadow: 0 0 3px 0px #0B0A09;\n}\n\n.ace-kr-theme .ace_marker-layer .ace_step {\n  background: rgb(102, 82, 0)\n}\n\n.ace-kr-theme .ace_marker-layer .ace_bracket {\n  margin: -1px 0 0 -1px;\n  border: 1px solid rgba(255, 177, 111, 0.32)\n}\n\n.ace-kr-theme .ace_marker-layer .ace_active-line {\n  background: #38403D\n}\n\n.ace-kr-theme .ace_gutter-active-line {\n  background-color : #38403D\n}\n\n.ace-kr-theme .ace_marker-layer .ace_selected-word {\n  border: 1px solid rgba(170, 0, 255, 0.45)\n}\n\n.ace-kr-theme .ace_invisible {\n  color: rgba(255, 177, 111, 0.32)\n}\n\n.ace-kr-theme .ace_keyword,\n.ace-kr-theme .ace_meta {\n  color: #949C8B\n}\n\n.ace-kr-theme .ace_constant,\n.ace-kr-theme .ace_constant.ace_character,\n.ace-kr-theme .ace_constant.ace_character.ace_escape,\n.ace-kr-theme .ace_constant.ace_other {\n  color: rgba(210, 117, 24, 0.76)\n}\n\n.ace-kr-theme .ace_invalid {\n  color: #F8F8F8;\n  background-color: #A41300\n}\n\n.ace-kr-theme .ace_support {\n  color: #9FC28A\n}\n\n.ace-kr-theme .ace_support.ace_constant {\n  color: #C27E66\n}\n\n.ace-kr-theme .ace_fold {\n  background-color: #949C8B;\n  border-color: #FCFFE0\n}\n\n.ace-kr-theme .ace_support.ace_function {\n  color: #85873A\n}\n\n.ace-kr-theme .ace_storage {\n  color: #FFEE80\n}\n\n.ace-kr-theme .ace_string {\n  color: rgba(164, 161, 181, 0.8)\n}\n\n.ace-kr-theme .ace_string.ace_regexp {\n  color: rgba(125, 255, 192, 0.65)\n}\n\n.ace-kr-theme .ace_comment {\n  font-style: italic;\n  color: #706D5B\n}\n\n.ace-kr-theme .ace_variable {\n  color: #D1A796\n}\n\n.ace-kr-theme .ace_list,\n.ace-kr-theme .ace_markup.ace_list {\n  background-color: #0F0040\n}\n\n.ace-kr-theme .ace_variable.ace_language {\n  color: #FF80E1\n}\n\n.ace-kr-theme .ace_meta.ace_tag {\n  color: #BABD9C\n}\n\n.ace-kr-theme .ace_indent-guide {\n  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYFBXV/8PAAJoAXX4kT2EAAAAAElFTkSuQmCC) right repeat-y\n}"
  },
  {
    "path": "lib/ace/theme/kr_theme.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-kr-theme\";\nexports.cssText = require(\"../requirejs/text!./kr_theme.css\");\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "lib/ace/theme/kuroir.css",
    "content": "/* THIS THEME WAS AUTOGENERATED BY Theme.tmpl.css (UUID: 467560D0-6ACE-4409-82FD-4791420837AC) */\n\n.ace-kuroir .ace_gutter {\n  background: #e8e8e8;\n  color: #333;\n}\n\n.ace-kuroir .ace_print-margin {\n  width: 1px;\n  background: #e8e8e8;\n}\n\n.ace-kuroir {\n  background-color: #E8E9E8;\n  color: #363636;\n}\n\n.ace-kuroir .ace_cursor {\n  color: #202020;\n}\n\n.ace-kuroir .ace_marker-layer .ace_selection {\n  background: rgba(245, 170, 0, 0.57);\n}\n\n.ace-kuroir.ace_multiselect .ace_selection.ace_start {\n  box-shadow: 0 0 3px 0px #E8E9E8;\n}\n\n.ace-kuroir .ace_marker-layer .ace_step {\n  background: rgb(198, 219, 174);\n}\n\n.ace-kuroir .ace_marker-layer .ace_bracket {\n  margin: -1px 0 0 -1px;\n  border: 1px solid rgba(0, 0, 0, 0.29);\n}\n\n.ace-kuroir .ace_marker-layer .ace_active-line {\n  background: rgba(203, 220, 47, 0.22);\n}\n\n.ace-kuroir .ace_gutter-active-line {\n  background-color: rgba(203, 220, 47, 0.22);\n}\n\n.ace-kuroir .ace_marker-layer .ace_selected-word {\n  border: 1px solid rgba(245, 170, 0, 0.57);\n}\n\n.ace-kuroir .ace_invisible {\n  color: #BFBFBF\n}\n\n.ace-kuroir .ace_fold {\n  border-color: #363636;\n}\n\n\n\n\n\n.ace-kuroir .ace_constant{color:#CD6839;}.ace-kuroir .ace_constant.ace_numeric{color:#9A5925;}.ace-kuroir .ace_support{color:#104E8B;}.ace-kuroir .ace_support.ace_function{color:#005273;}.ace-kuroir .ace_support.ace_constant{color:#CF6A4C;}.ace-kuroir .ace_storage{color:#A52A2A;}.ace-kuroir .ace_invalid.ace_illegal{color:#FD1224;\nbackground-color:rgba(255, 6, 0, 0.15);}.ace-kuroir .ace_invalid.ace_deprecated{text-decoration:underline;\nfont-style:italic;\ncolor:#FD1732;\nbackground-color:#E8E9E8;}.ace-kuroir .ace_string{color:#639300;}.ace-kuroir .ace_string.ace_regexp{color:#417E00;\nbackground-color:#C9D4BE;}.ace-kuroir .ace_comment{color:rgba(148, 148, 148, 0.91);\nbackground-color:rgba(220, 220, 220, 0.56);}.ace-kuroir .ace_variable{color:#009ACD;}.ace-kuroir .ace_meta.ace_tag{color:#005273;}.ace-kuroir .ace_markup.ace_heading{color:#B8012D;\nbackground-color:rgba(191, 97, 51, 0.051);}.ace-kuroir .ace_markup.ace_list{color:#8F5B26;}\n"
  },
  {
    "path": "lib/ace/theme/kuroir.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\nexports.isDark = false;\nexports.cssClass = \"ace-kuroir\";\nexports.cssText = require(\"../requirejs/text!./kuroir.css\");\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "lib/ace/theme/merbivore.css",
    "content": ".ace-merbivore .ace_gutter {\n  background: #202020;\n  color: #E6E1DC\n}\n\n.ace-merbivore .ace_print-margin {\n  width: 1px;\n  background: #555651\n}\n\n.ace-merbivore {\n  background-color: #161616;\n  color: #E6E1DC\n}\n\n.ace-merbivore .ace_cursor {\n  color: #FFFFFF\n}\n\n.ace-merbivore .ace_marker-layer .ace_selection {\n  background: #454545\n}\n\n.ace-merbivore.ace_multiselect .ace_selection.ace_start {\n  box-shadow: 0 0 3px 0px #161616;\n}\n\n.ace-merbivore .ace_marker-layer .ace_step {\n  background: rgb(102, 82, 0)\n}\n\n.ace-merbivore .ace_marker-layer .ace_bracket {\n  margin: -1px 0 0 -1px;\n  border: 1px solid #404040\n}\n\n.ace-merbivore .ace_marker-layer .ace_active-line {\n  background: #333435\n}\n\n.ace-merbivore .ace_gutter-active-line {\n  background-color: #333435\n}\n\n.ace-merbivore .ace_marker-layer .ace_selected-word {\n  border: 1px solid #454545\n}\n\n.ace-merbivore .ace_invisible {\n  color: #404040\n}\n\n.ace-merbivore .ace_entity.ace_name.ace_tag,\n.ace-merbivore .ace_keyword,\n.ace-merbivore .ace_meta,\n.ace-merbivore .ace_meta.ace_tag,\n.ace-merbivore .ace_storage,\n.ace-merbivore .ace_support.ace_function {\n  color: #FC6F09\n}\n\n.ace-merbivore .ace_constant,\n.ace-merbivore .ace_constant.ace_character,\n.ace-merbivore .ace_constant.ace_character.ace_escape,\n.ace-merbivore .ace_constant.ace_other,\n.ace-merbivore .ace_support.ace_type {\n  color: #1EDAFB\n}\n\n.ace-merbivore .ace_constant.ace_character.ace_escape {\n  color: #519F50\n}\n\n.ace-merbivore .ace_constant.ace_language {\n  color: #FDC251\n}\n\n.ace-merbivore .ace_constant.ace_library,\n.ace-merbivore .ace_string,\n.ace-merbivore .ace_support.ace_constant {\n  color: #8DFF0A\n}\n\n.ace-merbivore .ace_constant.ace_numeric {\n  color: #58C554\n}\n\n.ace-merbivore .ace_invalid {\n  color: #FFFFFF;\n  background-color: #990000\n}\n\n.ace-merbivore .ace_fold {\n  background-color: #FC6F09;\n  border-color: #E6E1DC\n}\n\n.ace-merbivore .ace_comment {\n  font-style: italic;\n  color: #AD2EA4\n}\n\n.ace-merbivore .ace_entity.ace_other.ace_attribute-name {\n  color: #FFFF89\n}\n\n.ace-merbivore .ace_indent-guide {\n  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWMQFxf3ZXB1df0PAAdsAmERTkEHAAAAAElFTkSuQmCC) right repeat-y\n}"
  },
  {
    "path": "lib/ace/theme/merbivore.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-merbivore\";\nexports.cssText = require(\"../requirejs/text!./merbivore.css\");\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "lib/ace/theme/merbivore_soft.css",
    "content": ".ace-merbivore-soft .ace_gutter {\n  background: #262424;\n  color: #E6E1DC\n}\n\n.ace-merbivore-soft .ace_print-margin {\n  width: 1px;\n  background: #262424\n}\n\n.ace-merbivore-soft {\n  background-color: #1C1C1C;\n  color: #E6E1DC\n}\n\n.ace-merbivore-soft .ace_cursor {\n  color: #FFFFFF\n}\n\n.ace-merbivore-soft .ace_marker-layer .ace_selection {\n  background: #494949\n}\n\n.ace-merbivore-soft.ace_multiselect .ace_selection.ace_start {\n  box-shadow: 0 0 3px 0px #1C1C1C;\n}\n\n.ace-merbivore-soft .ace_marker-layer .ace_step {\n  background: rgb(102, 82, 0)\n}\n\n.ace-merbivore-soft .ace_marker-layer .ace_bracket {\n  margin: -1px 0 0 -1px;\n  border: 1px solid #404040\n}\n\n.ace-merbivore-soft .ace_marker-layer .ace_active-line {\n  background: #333435\n}\n\n.ace-merbivore-soft .ace_gutter-active-line {\n  background-color: #333435\n}\n\n.ace-merbivore-soft .ace_marker-layer .ace_selected-word {\n  border: 1px solid #494949\n}\n\n.ace-merbivore-soft .ace_invisible {\n  color: #404040\n}\n\n.ace-merbivore-soft .ace_entity.ace_name.ace_tag,\n.ace-merbivore-soft .ace_keyword,\n.ace-merbivore-soft .ace_meta,\n.ace-merbivore-soft .ace_meta.ace_tag,\n.ace-merbivore-soft .ace_storage {\n  color: #FC803A\n}\n\n.ace-merbivore-soft .ace_constant,\n.ace-merbivore-soft .ace_constant.ace_character,\n.ace-merbivore-soft .ace_constant.ace_character.ace_escape,\n.ace-merbivore-soft .ace_constant.ace_other,\n.ace-merbivore-soft .ace_support.ace_type {\n  color: #68C1D8\n}\n\n.ace-merbivore-soft .ace_constant.ace_character.ace_escape {\n  color: #B3E5B4\n}\n\n.ace-merbivore-soft .ace_constant.ace_language {\n  color: #E1C582\n}\n\n.ace-merbivore-soft .ace_constant.ace_library,\n.ace-merbivore-soft .ace_string,\n.ace-merbivore-soft .ace_support.ace_constant {\n  color: #8EC65F\n}\n\n.ace-merbivore-soft .ace_constant.ace_numeric {\n  color: #7FC578\n}\n\n.ace-merbivore-soft .ace_invalid,\n.ace-merbivore-soft .ace_invalid.ace_deprecated {\n  color: #FFFFFF;\n  background-color: #FE3838\n}\n\n.ace-merbivore-soft .ace_fold {\n  background-color: #FC803A;\n  border-color: #E6E1DC\n}\n\n.ace-merbivore-soft .ace_comment,\n.ace-merbivore-soft .ace_meta {\n  font-style: italic;\n  color: #AC4BB8\n}\n\n.ace-merbivore-soft .ace_entity.ace_other.ace_attribute-name {\n  color: #EAF1A3\n}\n\n.ace-merbivore-soft .ace_indent-guide {\n  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWOQkpLyZfD09PwPAAfYAnaStpHRAAAAAElFTkSuQmCC) right repeat-y\n}"
  },
  {
    "path": "lib/ace/theme/merbivore_soft.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-merbivore-soft\";\nexports.cssText = require(\"../requirejs/text!./merbivore_soft.css\");\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "lib/ace/theme/mono_industrial.css",
    "content": ".ace-mono-industrial .ace_gutter {\n  background: #1d2521;\n  color: #C5C9C9\n}\n\n.ace-mono-industrial .ace_print-margin {\n  width: 1px;\n  background: #555651\n}\n\n.ace-mono-industrial {\n  background-color: #222C28;\n  color: #FFFFFF\n}\n\n.ace-mono-industrial .ace_cursor {\n  color: #FFFFFF\n}\n\n.ace-mono-industrial .ace_marker-layer .ace_selection {\n  background: rgba(145, 153, 148, 0.40)\n}\n\n.ace-mono-industrial.ace_multiselect .ace_selection.ace_start {\n  box-shadow: 0 0 3px 0px #222C28;\n}\n\n.ace-mono-industrial .ace_marker-layer .ace_step {\n  background: rgb(102, 82, 0)\n}\n\n.ace-mono-industrial .ace_marker-layer .ace_bracket {\n  margin: -1px 0 0 -1px;\n  border: 1px solid rgba(102, 108, 104, 0.50)\n}\n\n.ace-mono-industrial .ace_marker-layer .ace_active-line {\n  background: rgba(12, 13, 12, 0.25)\n}\n\n.ace-mono-industrial .ace_gutter-active-line {\n  background-color: rgba(12, 13, 12, 0.25)\n}\n\n.ace-mono-industrial .ace_marker-layer .ace_selected-word {\n  border: 1px solid rgba(145, 153, 148, 0.40)\n}\n\n.ace-mono-industrial .ace_invisible {\n  color: rgba(102, 108, 104, 0.50)\n}\n\n.ace-mono-industrial .ace_string {\n  background-color: #151C19;\n  color: #FFFFFF\n}\n\n.ace-mono-industrial .ace_keyword,\n.ace-mono-industrial .ace_meta {\n  color: #A39E64\n}\n\n.ace-mono-industrial .ace_constant,\n.ace-mono-industrial .ace_constant.ace_character,\n.ace-mono-industrial .ace_constant.ace_character.ace_escape,\n.ace-mono-industrial .ace_constant.ace_numeric,\n.ace-mono-industrial .ace_constant.ace_other {\n  color: #E98800\n}\n\n.ace-mono-industrial .ace_entity.ace_name.ace_function,\n.ace-mono-industrial .ace_keyword.ace_operator,\n.ace-mono-industrial .ace_variable {\n  color: #A8B3AB\n}\n\n.ace-mono-industrial .ace_invalid {\n  color: #FFFFFF;\n  background-color: rgba(153, 0, 0, 0.68)\n}\n\n.ace-mono-industrial .ace_support.ace_constant {\n  color: #C87500\n}\n\n.ace-mono-industrial .ace_fold {\n  background-color: #A8B3AB;\n  border-color: #FFFFFF\n}\n\n.ace-mono-industrial .ace_support.ace_function {\n  color: #588E60\n}\n\n.ace-mono-industrial .ace_entity.ace_name,\n.ace-mono-industrial .ace_support.ace_class,\n.ace-mono-industrial .ace_support.ace_type {\n  color: #5778B6\n}\n\n.ace-mono-industrial .ace_storage {\n  color: #C23B00\n}\n\n.ace-mono-industrial .ace_variable.ace_language,\n.ace-mono-industrial .ace_variable.ace_parameter {\n  color: #648BD2\n}\n\n.ace-mono-industrial .ace_comment {\n  color: #666C68;\n  background-color: #151C19\n}\n\n.ace-mono-industrial .ace_entity.ace_other.ace_attribute-name {\n  color: #909993\n}\n\n.ace-mono-industrial .ace_entity.ace_name.ace_tag {\n  color: #A65EFF\n}\n\n.ace-mono-industrial .ace_indent-guide {\n  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNQ1NbwZfALD/4PAAlTArlEC4r/AAAAAElFTkSuQmCC) right repeat-y\n}"
  },
  {
    "path": "lib/ace/theme/mono_industrial.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-mono-industrial\";\nexports.cssText = require(\"../requirejs/text!./mono_industrial.css\");\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "lib/ace/theme/monokai.css",
    "content": ".ace-monokai .ace_gutter {\n  background: #2F3129;\n  color: #8F908A\n}\n\n.ace-monokai .ace_print-margin {\n  width: 1px;\n  background: #555651\n}\n\n.ace-monokai {\n  background-color: #272822;\n  color: #F8F8F2\n}\n\n.ace-monokai .ace_cursor {\n  color: #F8F8F0\n}\n\n.ace-monokai .ace_marker-layer .ace_selection {\n  background: #49483E\n}\n\n.ace-monokai.ace_multiselect .ace_selection.ace_start {\n  box-shadow: 0 0 3px 0px #272822;\n}\n\n.ace-monokai .ace_marker-layer .ace_step {\n  background: rgb(102, 82, 0)\n}\n\n.ace-monokai .ace_marker-layer .ace_bracket {\n  margin: -1px 0 0 -1px;\n  border: 1px solid #49483E\n}\n\n.ace-monokai .ace_marker-layer .ace_active-line {\n  background: #202020\n}\n\n.ace-monokai .ace_gutter-active-line {\n  background-color: #272727\n}\n\n.ace-monokai .ace_marker-layer .ace_selected-word {\n  border: 1px solid #49483E\n}\n\n.ace-monokai .ace_invisible {\n  color: #52524d\n}\n\n.ace-monokai .ace_entity.ace_name.ace_tag,\n.ace-monokai .ace_keyword,\n.ace-monokai .ace_meta.ace_tag,\n.ace-monokai .ace_storage {\n  color: #F92672\n}\n\n.ace-monokai .ace_punctuation,\n.ace-monokai .ace_punctuation.ace_tag {\n  color: #fff\n}\n\n.ace-monokai .ace_constant.ace_character,\n.ace-monokai .ace_constant.ace_language,\n.ace-monokai .ace_constant.ace_numeric,\n.ace-monokai .ace_constant.ace_other {\n  color: #AE81FF\n}\n\n.ace-monokai .ace_invalid {\n  color: #F8F8F0;\n  background-color: #F92672\n}\n\n.ace-monokai .ace_invalid.ace_deprecated {\n  color: #F8F8F0;\n  background-color: #AE81FF\n}\n\n.ace-monokai .ace_support.ace_constant,\n.ace-monokai .ace_support.ace_function {\n  color: #66D9EF\n}\n\n.ace-monokai .ace_fold {\n  background-color: #A6E22E;\n  border-color: #F8F8F2\n}\n\n.ace-monokai .ace_storage.ace_type,\n.ace-monokai .ace_support.ace_class,\n.ace-monokai .ace_support.ace_type {\n  font-style: italic;\n  color: #66D9EF\n}\n\n.ace-monokai .ace_entity.ace_name.ace_function,\n.ace-monokai .ace_entity.ace_other,\n.ace-monokai .ace_entity.ace_other.ace_attribute-name,\n.ace-monokai .ace_variable {\n  color: #A6E22E\n}\n\n.ace-monokai .ace_variable.ace_parameter {\n  font-style: italic;\n  color: #FD971F\n}\n\n.ace-monokai .ace_string {\n  color: #E6DB74\n}\n\n.ace-monokai .ace_comment {\n  color: #75715E\n}\n\n.ace-monokai .ace_indent-guide {\n  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWPQ0FD0ZXBzd/wPAAjVAoxeSgNeAAAAAElFTkSuQmCC) right repeat-y\n}"
  },
  {
    "path": "lib/ace/theme/monokai.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-monokai\";\nexports.cssText = require(\"../requirejs/text!./monokai.css\");\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "lib/ace/theme/pastel_on_dark.css",
    "content": ".ace-pastel-on-dark .ace_gutter {\n  background: #353030;\n  color: #8F938F\n}\n\n.ace-pastel-on-dark .ace_print-margin {\n  width: 1px;\n  background: #353030\n}\n\n.ace-pastel-on-dark {\n  background-color: #2C2828;\n  color: #8F938F\n}\n\n.ace-pastel-on-dark .ace_cursor {\n  color: #A7A7A7\n}\n\n.ace-pastel-on-dark .ace_marker-layer .ace_selection {\n  background: rgba(221, 240, 255, 0.20)\n}\n\n.ace-pastel-on-dark.ace_multiselect .ace_selection.ace_start {\n  box-shadow: 0 0 3px 0px #2C2828;\n}\n\n.ace-pastel-on-dark .ace_marker-layer .ace_step {\n  background: rgb(102, 82, 0)\n}\n\n.ace-pastel-on-dark .ace_marker-layer .ace_bracket {\n  margin: -1px 0 0 -1px;\n  border: 1px solid rgba(255, 255, 255, 0.25)\n}\n\n.ace-pastel-on-dark .ace_marker-layer .ace_active-line {\n  background: rgba(255, 255, 255, 0.031)\n}\n\n.ace-pastel-on-dark .ace_gutter-active-line {\n  background-color: rgba(255, 255, 255, 0.031)\n}\n\n.ace-pastel-on-dark .ace_marker-layer .ace_selected-word {\n  border: 1px solid rgba(221, 240, 255, 0.20)\n}\n\n.ace-pastel-on-dark .ace_invisible {\n  color: rgba(255, 255, 255, 0.25)\n}\n\n.ace-pastel-on-dark .ace_keyword,\n.ace-pastel-on-dark .ace_meta {\n  color: #757aD8\n}\n\n.ace-pastel-on-dark .ace_constant,\n.ace-pastel-on-dark .ace_constant.ace_character,\n.ace-pastel-on-dark .ace_constant.ace_character.ace_escape,\n.ace-pastel-on-dark .ace_constant.ace_other {\n  color: #4FB7C5\n}\n\n.ace-pastel-on-dark .ace_keyword.ace_operator {\n  color: #797878\n}\n\n.ace-pastel-on-dark .ace_constant.ace_character {\n  color: #AFA472\n}\n\n.ace-pastel-on-dark .ace_constant.ace_language {\n  color: #DE8E30\n}\n\n.ace-pastel-on-dark .ace_constant.ace_numeric {\n  color: #CCCCCC\n}\n\n.ace-pastel-on-dark .ace_invalid,\n.ace-pastel-on-dark .ace_invalid.ace_illegal {\n  color: #F8F8F8;\n  background-color: rgba(86, 45, 86, 0.75)\n}\n\n.ace-pastel-on-dark .ace_invalid.ace_deprecated {\n  text-decoration: underline;\n  font-style: italic;\n  color: #D2A8A1\n}\n\n.ace-pastel-on-dark .ace_fold {\n  background-color: #757aD8;\n  border-color: #8F938F\n}\n\n.ace-pastel-on-dark .ace_support.ace_function {\n  color: #AEB2F8\n}\n\n.ace-pastel-on-dark .ace_string {\n  color: #66A968\n}\n\n.ace-pastel-on-dark .ace_string.ace_regexp {\n  color: #E9C062\n}\n\n.ace-pastel-on-dark .ace_comment {\n  color: #A6C6FF\n}\n\n.ace-pastel-on-dark .ace_variable {\n  color: #BEBF55\n}\n\n.ace-pastel-on-dark .ace_variable.ace_language {\n  color: #C1C144\n}\n\n.ace-pastel-on-dark .ace_xml-pe {\n  color: #494949\n}\n\n.ace-pastel-on-dark .ace_indent-guide {\n  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYIiPj/8PAARgAh2NTMh8AAAAAElFTkSuQmCC) right repeat-y\n}"
  },
  {
    "path": "lib/ace/theme/pastel_on_dark.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-pastel-on-dark\";\nexports.cssText = require(\"../requirejs/text!./pastel_on_dark.css\");\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "lib/ace/theme/solarized_dark.css",
    "content": ".ace-solarized-dark .ace_gutter {\n  background: #01313f;\n  color: #d0edf7\n}\n\n.ace-solarized-dark .ace_print-margin {\n  width: 1px;\n  background: #33555E\n}\n\n.ace-solarized-dark {\n  background-color: #002B36;\n  color: #93A1A1\n}\n\n.ace-solarized-dark .ace_entity.ace_other.ace_attribute-name,\n.ace-solarized-dark .ace_storage {\n  color: #93A1A1\n}\n\n.ace-solarized-dark .ace_cursor,\n.ace-solarized-dark .ace_string.ace_regexp {\n  color: #D30102\n}\n\n.ace-solarized-dark .ace_marker-layer .ace_active-line,\n.ace-solarized-dark .ace_marker-layer .ace_selection {\n  background: rgba(255, 255, 255, 0.1)\n}\n\n.ace-solarized-dark.ace_multiselect .ace_selection.ace_start {\n  box-shadow: 0 0 3px 0px #002B36;\n}\n\n.ace-solarized-dark .ace_marker-layer .ace_step {\n  background: rgb(102, 82, 0)\n}\n\n.ace-solarized-dark .ace_marker-layer .ace_bracket {\n  margin: -1px 0 0 -1px;\n  border: 1px solid rgba(147, 161, 161, 0.50)\n}\n\n.ace-solarized-dark .ace_gutter-active-line {\n  background-color: #0d3440\n}\n\n.ace-solarized-dark .ace_marker-layer .ace_selected-word {\n  border: 1px solid #073642\n}\n\n.ace-solarized-dark .ace_invisible {\n  color: rgba(147, 161, 161, 0.50)\n}\n\n.ace-solarized-dark .ace_keyword,\n.ace-solarized-dark .ace_meta,\n.ace-solarized-dark .ace_support.ace_class,\n.ace-solarized-dark .ace_support.ace_type {\n  color: #859900\n}\n\n.ace-solarized-dark .ace_constant.ace_character,\n.ace-solarized-dark .ace_constant.ace_other {\n  color: #CB4B16\n}\n\n.ace-solarized-dark .ace_constant.ace_language {\n  color: #B58900\n}\n\n.ace-solarized-dark .ace_constant.ace_numeric {\n  color: #D33682\n}\n\n.ace-solarized-dark .ace_fold {\n  background-color: #268BD2;\n  border-color: #93A1A1\n}\n\n.ace-solarized-dark .ace_entity.ace_name.ace_function,\n.ace-solarized-dark .ace_entity.ace_name.ace_tag,\n.ace-solarized-dark .ace_support.ace_function,\n.ace-solarized-dark .ace_variable,\n.ace-solarized-dark .ace_variable.ace_language {\n  color: #268BD2\n}\n\n.ace-solarized-dark .ace_string {\n  color: #2AA198\n}\n\n.ace-solarized-dark .ace_comment {\n  font-style: italic;\n  color: #657B83\n}\n\n.ace-solarized-dark .ace_indent-guide {\n  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNg0Db1ZVCxc/sPAAd4AlUHlLenAAAAAElFTkSuQmCC) right repeat-y\n}"
  },
  {
    "path": "lib/ace/theme/solarized_dark.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-solarized-dark\";\nexports.cssText = require(\"../requirejs/text!./solarized_dark.css\");\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "lib/ace/theme/solarized_light.css",
    "content": ".ace-solarized-light .ace_gutter {\n  background: #fbf1d3;\n  color: #333\n}\n\n.ace-solarized-light .ace_print-margin {\n  width: 1px;\n  background: #e8e8e8\n}\n\n.ace-solarized-light {\n  background-color: #FDF6E3;\n  color: #586E75\n}\n\n.ace-solarized-light .ace_cursor {\n  color: #000000\n}\n\n.ace-solarized-light .ace_marker-layer .ace_selection {\n  background: rgba(7, 54, 67, 0.09)\n}\n\n.ace-solarized-light.ace_multiselect .ace_selection.ace_start {\n  box-shadow: 0 0 3px 0px #FDF6E3;\n}\n\n.ace-solarized-light .ace_marker-layer .ace_step {\n  background: rgb(255, 255, 0)\n}\n\n.ace-solarized-light .ace_marker-layer .ace_bracket {\n  margin: -1px 0 0 -1px;\n  border: 1px solid rgba(147, 161, 161, 0.50)\n}\n\n.ace-solarized-light .ace_marker-layer .ace_active-line {\n  background: #EEE8D5\n}\n\n.ace-solarized-light .ace_gutter-active-line {\n  background-color : #EDE5C1\n}\n\n.ace-solarized-light .ace_marker-layer .ace_selected-word {\n  border: 1px solid #073642\n}\n\n.ace-solarized-light .ace_invisible {\n  color: rgba(147, 161, 161, 0.50)\n}\n\n.ace-solarized-light .ace_keyword,\n.ace-solarized-light .ace_meta,\n.ace-solarized-light .ace_support.ace_class,\n.ace-solarized-light .ace_support.ace_type {\n  color: #859900\n}\n\n.ace-solarized-light .ace_constant.ace_character,\n.ace-solarized-light .ace_constant.ace_other {\n  color: #CB4B16\n}\n\n.ace-solarized-light .ace_constant.ace_language {\n  color: #B58900\n}\n\n.ace-solarized-light .ace_constant.ace_numeric {\n  color: #D33682\n}\n\n.ace-solarized-light .ace_fold {\n  background-color: #268BD2;\n  border-color: #586E75\n}\n\n.ace-solarized-light .ace_entity.ace_name.ace_function,\n.ace-solarized-light .ace_entity.ace_name.ace_tag,\n.ace-solarized-light .ace_support.ace_function,\n.ace-solarized-light .ace_variable,\n.ace-solarized-light .ace_variable.ace_language {\n  color: #268BD2\n}\n\n.ace-solarized-light .ace_storage {\n  color: #073642\n}\n\n.ace-solarized-light .ace_string {\n  color: #2AA198\n}\n\n.ace-solarized-light .ace_string.ace_regexp {\n  color: #D30102\n}\n\n.ace-solarized-light .ace_comment,\n.ace-solarized-light .ace_entity.ace_other.ace_attribute-name {\n  color: #93A1A1\n}\n\n.ace-solarized-light .ace_indent-guide {\n  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHjy8NJ/AAjgA5fzQUmBAAAAAElFTkSuQmCC) right repeat-y\n}"
  },
  {
    "path": "lib/ace/theme/solarized_light.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\nexports.isDark = false;\nexports.cssClass = \"ace-solarized-light\";\nexports.cssText = require(\"../requirejs/text!./solarized_light.css\");\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "lib/ace/theme/sqlserver.css",
    "content": ".ace-sqlserver .ace_gutter {\n    background: #ebebeb;\n    color: #333;\n    overflow: hidden;\n}\n\n.ace-sqlserver .ace_print-margin {\n    width: 1px;\n    background: #e8e8e8;\n}\n\n.ace-sqlserver {\n    background-color: #FFFFFF;\n    color: black;\n}\n\n.ace-sqlserver .ace_identifier {\n    color: black;\n}\n\n.ace-sqlserver .ace_keyword {\n    color: #0000FF;\n}\n\n.ace-sqlserver .ace_numeric {\n    color: black;\n}\n\n.ace-sqlserver .ace_storage {\n    color: #11B7BE;\n}\n\n.ace-sqlserver .ace_keyword.ace_operator,\n.ace-sqlserver .ace_lparen,\n.ace-sqlserver .ace_rparen,\n.ace-sqlserver .ace_punctuation {\n    color: #808080;\n}\n\n.ace-sqlserver .ace_set.ace_statement {\n    color: #0000FF;\n    text-decoration: underline;\n}\n\n.ace-sqlserver .ace_cursor {\n    color: black;\n}\n\n.ace-sqlserver .ace_invisible {\n    color: rgb(191, 191, 191);\n}\n\n.ace-sqlserver .ace_constant.ace_buildin {\n    color: rgb(88, 72, 246);\n}\n\n.ace-sqlserver .ace_constant.ace_language {\n    color: #979797;\n}\n\n.ace-sqlserver .ace_constant.ace_library {\n    color: rgb(6, 150, 14);\n}\n\n.ace-sqlserver .ace_invalid {\n    background-color: rgb(153, 0, 0);\n    color: white;\n}\n\n.ace-sqlserver .ace_support.ace_function {\n    color: #FF00FF;\n}\n\n.ace-sqlserver .ace_support.ace_constant {\n    color: rgb(6, 150, 14);\n}\n\n.ace-sqlserver .ace_class {\n    color: #008080;\n}\n\n.ace-sqlserver .ace_support.ace_other {\n    color: #6D79DE;\n}\n\n.ace-sqlserver .ace_variable.ace_parameter {\n    font-style: italic;\n    color: #FD971F;\n}\n\n.ace-sqlserver .ace_comment {\n    color: #008000;\n}\n\n.ace-sqlserver .ace_constant.ace_numeric {\n    color: black;\n}\n\n.ace-sqlserver .ace_variable {\n    color: rgb(49, 132, 149);\n}\n\n.ace-sqlserver .ace_xml-pe {\n    color: rgb(104, 104, 91);\n}\n\n.ace-sqlserver .ace_support.ace_storedprocedure {\n    color: #800000;\n}\n\n.ace-sqlserver .ace_heading {\n    color: rgb(12, 7, 255);\n}\n\n.ace-sqlserver .ace_list {\n    color: rgb(185, 6, 144);\n}\n\n.ace-sqlserver .ace_marker-layer .ace_selection {\n    background: rgb(181, 213, 255);\n}\n\n.ace-sqlserver .ace_marker-layer .ace_step {\n    background: rgb(252, 255, 0);\n}\n\n.ace-sqlserver .ace_marker-layer .ace_stack {\n    background: rgb(164, 229, 101);\n}\n\n.ace-sqlserver .ace_marker-layer .ace_bracket {\n    margin: -1px 0 0 -1px;\n    border: 1px solid rgb(192, 192, 192);\n}\n\n.ace-sqlserver .ace_marker-layer .ace_active-line {\n    background: rgba(0, 0, 0, 0.07);\n}\n\n.ace-sqlserver .ace_gutter-active-line {\n    background-color: #dcdcdc;\n}\n\n.ace-sqlserver .ace_marker-layer .ace_selected-word {\n    background: rgb(250, 250, 255);\n    border: 1px solid rgb(200, 200, 250);\n}\n\n.ace-sqlserver .ace_meta.ace_tag {\n    color: #0000FF;\n}\n\n.ace-sqlserver .ace_string.ace_regex {\n    color: #FF0000;\n}\n\n.ace-sqlserver .ace_string {\n    color: #FF0000;\n}\n\n.ace-sqlserver .ace_entity.ace_other.ace_attribute-name {\n    color: #994409;\n}\n\n.ace-sqlserver .ace_indent-guide {\n    background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;\n}\n"
  },
  {
    "path": "lib/ace/theme/sqlserver.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\nexports.isDark = false;\nexports.cssClass = \"ace-sqlserver\";\nexports.cssText = require(\"../requirejs/text!./sqlserver.css\");\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "lib/ace/theme/terminal.css",
    "content": ".ace-terminal-theme .ace_gutter {\n  background: #1a0005;\n  color: steelblue\n}\n\n.ace-terminal-theme .ace_print-margin {\n  width: 1px;\n  background: #1a1a1a\n}\n\n.ace-terminal-theme {\n  background-color: black;\n  color: #DEDEDE\n}\n\n.ace-terminal-theme .ace_cursor {\n  color: #9F9F9F\n}\n\n.ace-terminal-theme .ace_marker-layer .ace_selection {\n  background: #424242\n}\n\n.ace-terminal-theme.ace_multiselect .ace_selection.ace_start {\n  box-shadow: 0 0 3px 0px black;\n}\n\n.ace-terminal-theme .ace_marker-layer .ace_step {\n  background: rgb(0, 0, 0)\n}\n\n.ace-terminal-theme .ace_marker-layer .ace_bracket {\n  background: #090;\n}\n\n.ace-terminal-theme .ace_marker-layer .ace_bracket-start {\n  background: #090;\n}\n\n.ace-terminal-theme .ace_marker-layer .ace_bracket-unmatched {\n  margin: -1px 0 0 -1px;\n  border: 1px solid #900\n}\n\n.ace-terminal-theme .ace_marker-layer .ace_active-line {\n  background: #2A2A2A\n}\n\n.ace-terminal-theme .ace_gutter-active-line {\n  background-color: #2A112A\n}\n\n.ace-terminal-theme .ace_marker-layer .ace_selected-word {\n  border: 1px solid #424242\n}\n\n.ace-terminal-theme .ace_invisible {\n  color: #343434\n}\n\n.ace-terminal-theme .ace_keyword,\n.ace-terminal-theme .ace_meta,\n.ace-terminal-theme .ace_storage,\n.ace-terminal-theme .ace_storage.ace_type,\n.ace-terminal-theme .ace_support.ace_type {\n  color: tomato\n}\n\n.ace-terminal-theme .ace_keyword.ace_operator {\n  color: deeppink\n}\n\n.ace-terminal-theme .ace_constant.ace_character,\n.ace-terminal-theme .ace_constant.ace_language,\n.ace-terminal-theme .ace_constant.ace_numeric,\n.ace-terminal-theme .ace_keyword.ace_other.ace_unit,\n.ace-terminal-theme .ace_support.ace_constant,\n.ace-terminal-theme .ace_variable.ace_parameter {\n  color: #E78C45\n}\n\n.ace-terminal-theme .ace_constant.ace_other {\n  color: gold\n}\n\n.ace-terminal-theme .ace_invalid {\n  color: yellow;\n  background-color: red\n}\n\n.ace-terminal-theme .ace_invalid.ace_deprecated {\n  color: #CED2CF;\n  background-color: #B798BF\n}\n\n.ace-terminal-theme .ace_fold {\n  background-color: #7AA6DA;\n  border-color: #DEDEDE\n}\n\n.ace-terminal-theme .ace_entity.ace_name.ace_function,\n.ace-terminal-theme .ace_support.ace_function,\n.ace-terminal-theme .ace_variable {\n  color: #7AA6DA\n}\n\n.ace-terminal-theme .ace_support.ace_class,\n.ace-terminal-theme .ace_support.ace_type {\n  color: #E7C547\n}\n\n.ace-terminal-theme .ace_heading,\n.ace-terminal-theme .ace_string {\n  color: #B9CA4A\n}\n\n.ace-terminal-theme .ace_entity.ace_name.ace_tag,\n.ace-terminal-theme .ace_entity.ace_other.ace_attribute-name,\n.ace-terminal-theme .ace_meta.ace_tag,\n.ace-terminal-theme .ace_string.ace_regexp,\n.ace-terminal-theme .ace_variable {\n  color: #D54E53\n}\n\n.ace-terminal-theme .ace_comment {\n  color: orangered\n}\n\n.ace-terminal-theme .ace_indent-guide {\n  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYLBWV/8PAAK4AYnhiq+xAAAAAElFTkSuQmCC) right repeat-y;\n}\n"
  },
  {
    "path": "lib/ace/theme/terminal.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-terminal-theme\";\nexports.cssText = require(\"../requirejs/text!./terminal.css\");\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "lib/ace/theme/textmate.css",
    "content": ".ace-tm .ace_gutter {\n  background: #f0f0f0;\n  color: #333;\n}\n\n.ace-tm .ace_print-margin {\n  width: 1px;\n  background: #e8e8e8;\n}\n\n.ace-tm .ace_fold {\n    background-color: #6B72E6;\n}\n\n.ace-tm {\n  background-color: #FFFFFF;\n  color: black;\n}\n\n.ace-tm .ace_cursor {\n  color: black;\n}\n        \n.ace-tm .ace_invisible {\n  color: rgb(191, 191, 191);\n}\n\n.ace-tm .ace_storage,\n.ace-tm .ace_keyword {\n  color: blue;\n}\n\n.ace-tm .ace_constant {\n  color: rgb(197, 6, 11);\n}\n\n.ace-tm .ace_constant.ace_buildin {\n  color: rgb(88, 72, 246);\n}\n\n.ace-tm .ace_constant.ace_language {\n  color: rgb(88, 92, 246);\n}\n\n.ace-tm .ace_constant.ace_library {\n  color: rgb(6, 150, 14);\n}\n\n.ace-tm .ace_invalid {\n  background-color: rgba(255, 0, 0, 0.1);\n  color: red;\n}\n\n.ace-tm .ace_support.ace_function {\n  color: rgb(60, 76, 114);\n}\n\n.ace-tm .ace_support.ace_constant {\n  color: rgb(6, 150, 14);\n}\n\n.ace-tm .ace_support.ace_type,\n.ace-tm .ace_support.ace_class {\n  color: rgb(109, 121, 222);\n}\n\n.ace-tm .ace_keyword.ace_operator {\n  color: rgb(104, 118, 135);\n}\n\n.ace-tm .ace_string {\n  color: rgb(3, 106, 7);\n}\n\n.ace-tm .ace_comment {\n  color: rgb(76, 136, 107);\n}\n\n.ace-tm .ace_comment.ace_doc {\n  color: rgb(0, 102, 255);\n}\n\n.ace-tm .ace_comment.ace_doc.ace_tag {\n  color: rgb(128, 159, 191);\n}\n\n.ace-tm .ace_constant.ace_numeric {\n  color: rgb(0, 0, 205);\n}\n\n.ace-tm .ace_variable {\n  color: rgb(49, 132, 149);\n}\n\n.ace-tm .ace_xml-pe {\n  color: rgb(104, 104, 91);\n}\n\n.ace-tm .ace_entity.ace_name.ace_function {\n  color: #0000A2;\n}\n\n\n.ace-tm .ace_heading {\n  color: rgb(12, 7, 255);\n}\n\n.ace-tm .ace_list {\n  color:rgb(185, 6, 144);\n}\n\n.ace-tm .ace_meta.ace_tag {\n  color:rgb(0, 22, 142);\n}\n\n.ace-tm .ace_string.ace_regex {\n  color: rgb(255, 0, 0)\n}\n\n.ace-tm .ace_marker-layer .ace_selection {\n  background: rgb(181, 213, 255);\n}\n.ace-tm.ace_multiselect .ace_selection.ace_start {\n  box-shadow: 0 0 3px 0px white;\n}\n.ace-tm .ace_marker-layer .ace_step {\n  background: rgb(252, 255, 0);\n}\n\n.ace-tm .ace_marker-layer .ace_stack {\n  background: rgb(164, 229, 101);\n}\n\n.ace-tm .ace_marker-layer .ace_bracket {\n  margin: -1px 0 0 -1px;\n  border: 1px solid rgb(192, 192, 192);\n}\n\n.ace-tm .ace_marker-layer .ace_active-line {\n  background: rgba(0, 0, 0, 0.07);\n}\n\n.ace-tm .ace_gutter-active-line {\n    background-color : #dcdcdc;\n}\n\n.ace-tm .ace_marker-layer .ace_selected-word {\n  background: rgb(250, 250, 255);\n  border: 1px solid rgb(200, 200, 250);\n}\n\n.ace-tm .ace_indent-guide {\n  background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;\n}\n"
  },
  {
    "path": "lib/ace/theme/textmate.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nexports.isDark = false;\nexports.cssClass = \"ace-tm\";\nexports.cssText = require(\"../requirejs/text!./textmate.css\");\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "lib/ace/theme/tomorrow.css",
    "content": ".ace-tomorrow .ace_gutter {\n  background: #f6f6f6;\n  color: #4D4D4C\n}\n\n.ace-tomorrow .ace_print-margin {\n  width: 1px;\n  background: #f6f6f6\n}\n\n.ace-tomorrow {\n  background-color: #FFFFFF;\n  color: #4D4D4C\n}\n\n.ace-tomorrow .ace_cursor {\n  color: #AEAFAD\n}\n\n.ace-tomorrow .ace_marker-layer .ace_selection {\n  background: #D6D6D6\n}\n\n.ace-tomorrow.ace_multiselect .ace_selection.ace_start {\n  box-shadow: 0 0 3px 0px #FFFFFF;\n}\n\n.ace-tomorrow .ace_marker-layer .ace_step {\n  background: rgb(255, 255, 0)\n}\n\n.ace-tomorrow .ace_marker-layer .ace_bracket {\n  margin: -1px 0 0 -1px;\n  border: 1px solid #D1D1D1\n}\n\n.ace-tomorrow .ace_marker-layer .ace_active-line {\n  background: #EFEFEF\n}\n\n.ace-tomorrow .ace_gutter-active-line {\n  background-color : #dcdcdc\n}\n\n.ace-tomorrow .ace_marker-layer .ace_selected-word {\n  border: 1px solid #D6D6D6\n}\n\n.ace-tomorrow .ace_invisible {\n  color: #D1D1D1\n}\n\n.ace-tomorrow .ace_keyword,\n.ace-tomorrow .ace_meta,\n.ace-tomorrow .ace_storage,\n.ace-tomorrow .ace_storage.ace_type,\n.ace-tomorrow .ace_support.ace_type {\n  color: #8959A8\n}\n\n.ace-tomorrow .ace_keyword.ace_operator {\n  color: #3E999F\n}\n\n.ace-tomorrow .ace_constant.ace_character,\n.ace-tomorrow .ace_constant.ace_language,\n.ace-tomorrow .ace_constant.ace_numeric,\n.ace-tomorrow .ace_keyword.ace_other.ace_unit,\n.ace-tomorrow .ace_support.ace_constant,\n.ace-tomorrow .ace_variable.ace_parameter {\n  color: #F5871F\n}\n\n.ace-tomorrow .ace_constant.ace_other {\n  color: #666969\n}\n\n.ace-tomorrow .ace_invalid {\n  color: #FFFFFF;\n  background-color: #C82829\n}\n\n.ace-tomorrow .ace_invalid.ace_deprecated {\n  color: #FFFFFF;\n  background-color: #8959A8\n}\n\n.ace-tomorrow .ace_fold {\n  background-color: #4271AE;\n  border-color: #4D4D4C\n}\n\n.ace-tomorrow .ace_entity.ace_name.ace_function,\n.ace-tomorrow .ace_support.ace_function,\n.ace-tomorrow .ace_variable {\n  color: #4271AE\n}\n\n.ace-tomorrow .ace_support.ace_class,\n.ace-tomorrow .ace_support.ace_type {\n  color: #C99E00\n}\n\n.ace-tomorrow .ace_heading,\n.ace-tomorrow .ace_markup.ace_heading,\n.ace-tomorrow .ace_string {\n  color: #718C00\n}\n\n.ace-tomorrow .ace_entity.ace_name.ace_tag,\n.ace-tomorrow .ace_entity.ace_other.ace_attribute-name,\n.ace-tomorrow .ace_meta.ace_tag,\n.ace-tomorrow .ace_string.ace_regexp,\n.ace-tomorrow .ace_variable {\n  color: #C82829\n}\n\n.ace-tomorrow .ace_comment {\n  color: #8E908C\n}\n\n.ace-tomorrow .ace_indent-guide {\n  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bdu3f/BwAlfgctduB85QAAAABJRU5ErkJggg==) right repeat-y\n}"
  },
  {
    "path": "lib/ace/theme/tomorrow.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\nexports.isDark = false;\nexports.cssClass = \"ace-tomorrow\";\nexports.cssText = require(\"../requirejs/text!./tomorrow.css\");\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "lib/ace/theme/tomorrow_night.css",
    "content": ".ace-tomorrow-night .ace_gutter {\n  background: #25282c;\n  color: #C5C8C6\n}\n\n.ace-tomorrow-night .ace_print-margin {\n  width: 1px;\n  background: #25282c\n}\n\n.ace-tomorrow-night {\n  background-color: #1D1F21;\n  color: #C5C8C6\n}\n\n.ace-tomorrow-night .ace_cursor {\n  color: #AEAFAD\n}\n\n.ace-tomorrow-night .ace_marker-layer .ace_selection {\n  background: #373B41\n}\n\n.ace-tomorrow-night.ace_multiselect .ace_selection.ace_start {\n  box-shadow: 0 0 3px 0px #1D1F21;\n}\n\n.ace-tomorrow-night .ace_marker-layer .ace_step {\n  background: rgb(102, 82, 0)\n}\n\n.ace-tomorrow-night .ace_marker-layer .ace_bracket {\n  margin: -1px 0 0 -1px;\n  border: 1px solid #4B4E55\n}\n\n.ace-tomorrow-night .ace_marker-layer .ace_active-line {\n  background: #282A2E\n}\n\n.ace-tomorrow-night .ace_gutter-active-line {\n  background-color: #282A2E\n}\n\n.ace-tomorrow-night .ace_marker-layer .ace_selected-word {\n  border: 1px solid #373B41\n}\n\n.ace-tomorrow-night .ace_invisible {\n  color: #4B4E55\n}\n\n.ace-tomorrow-night .ace_keyword,\n.ace-tomorrow-night .ace_meta,\n.ace-tomorrow-night .ace_storage,\n.ace-tomorrow-night .ace_storage.ace_type,\n.ace-tomorrow-night .ace_support.ace_type {\n  color: #B294BB\n}\n\n.ace-tomorrow-night .ace_keyword.ace_operator {\n  color: #8ABEB7\n}\n\n.ace-tomorrow-night .ace_constant.ace_character,\n.ace-tomorrow-night .ace_constant.ace_language,\n.ace-tomorrow-night .ace_constant.ace_numeric,\n.ace-tomorrow-night .ace_keyword.ace_other.ace_unit,\n.ace-tomorrow-night .ace_support.ace_constant,\n.ace-tomorrow-night .ace_variable.ace_parameter {\n  color: #DE935F\n}\n\n.ace-tomorrow-night .ace_constant.ace_other {\n  color: #CED1CF\n}\n\n.ace-tomorrow-night .ace_invalid {\n  color: #CED2CF;\n  background-color: #DF5F5F\n}\n\n.ace-tomorrow-night .ace_invalid.ace_deprecated {\n  color: #CED2CF;\n  background-color: #B798BF\n}\n\n.ace-tomorrow-night .ace_fold {\n  background-color: #81A2BE;\n  border-color: #C5C8C6\n}\n\n.ace-tomorrow-night .ace_entity.ace_name.ace_function,\n.ace-tomorrow-night .ace_support.ace_function,\n.ace-tomorrow-night .ace_variable {\n  color: #81A2BE\n}\n\n.ace-tomorrow-night .ace_support.ace_class,\n.ace-tomorrow-night .ace_support.ace_type {\n  color: #F0C674\n}\n\n.ace-tomorrow-night .ace_heading,\n.ace-tomorrow-night .ace_markup.ace_heading,\n.ace-tomorrow-night .ace_string {\n  color: #B5BD68\n}\n\n.ace-tomorrow-night .ace_entity.ace_name.ace_tag,\n.ace-tomorrow-night .ace_entity.ace_other.ace_attribute-name,\n.ace-tomorrow-night .ace_meta.ace_tag,\n.ace-tomorrow-night .ace_string.ace_regexp,\n.ace-tomorrow-night .ace_variable {\n  color: #CC6666\n}\n\n.ace-tomorrow-night .ace_comment {\n  color: #969896\n}\n\n.ace-tomorrow-night .ace_indent-guide {\n  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHB3d/8PAAOIAdULw8qMAAAAAElFTkSuQmCC) right repeat-y\n}"
  },
  {
    "path": "lib/ace/theme/tomorrow_night.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-tomorrow-night\";\nexports.cssText = require(\"../requirejs/text!./tomorrow_night.css\");\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "lib/ace/theme/tomorrow_night_blue.css",
    "content": ".ace-tomorrow-night-blue .ace_gutter {\n  background: #00204b;\n  color: #7388b5\n}\n\n.ace-tomorrow-night-blue .ace_print-margin {\n  width: 1px;\n  background: #00204b\n}\n\n.ace-tomorrow-night-blue {\n  background-color: #002451;\n  color: #FFFFFF\n}\n\n.ace-tomorrow-night-blue .ace_constant.ace_other,\n.ace-tomorrow-night-blue .ace_cursor {\n  color: #FFFFFF\n}\n\n.ace-tomorrow-night-blue .ace_marker-layer .ace_selection {\n  background: #003F8E\n}\n\n.ace-tomorrow-night-blue.ace_multiselect .ace_selection.ace_start {\n  box-shadow: 0 0 3px 0px #002451;\n}\n\n.ace-tomorrow-night-blue .ace_marker-layer .ace_step {\n  background: rgb(127, 111, 19)\n}\n\n.ace-tomorrow-night-blue .ace_marker-layer .ace_bracket {\n  margin: -1px 0 0 -1px;\n  border: 1px solid #404F7D\n}\n\n.ace-tomorrow-night-blue .ace_marker-layer .ace_active-line {\n  background: #00346E\n}\n\n.ace-tomorrow-night-blue .ace_gutter-active-line {\n  background-color: #022040\n}\n\n.ace-tomorrow-night-blue .ace_marker-layer .ace_selected-word {\n  border: 1px solid #003F8E\n}\n\n.ace-tomorrow-night-blue .ace_invisible {\n  color: #404F7D\n}\n\n.ace-tomorrow-night-blue .ace_keyword,\n.ace-tomorrow-night-blue .ace_meta,\n.ace-tomorrow-night-blue .ace_storage,\n.ace-tomorrow-night-blue .ace_storage.ace_type,\n.ace-tomorrow-night-blue .ace_support.ace_type {\n  color: #EBBBFF\n}\n\n.ace-tomorrow-night-blue .ace_keyword.ace_operator {\n  color: #99FFFF\n}\n\n.ace-tomorrow-night-blue .ace_constant.ace_character,\n.ace-tomorrow-night-blue .ace_constant.ace_language,\n.ace-tomorrow-night-blue .ace_constant.ace_numeric,\n.ace-tomorrow-night-blue .ace_keyword.ace_other.ace_unit,\n.ace-tomorrow-night-blue .ace_support.ace_constant,\n.ace-tomorrow-night-blue .ace_variable.ace_parameter {\n  color: #FFC58F\n}\n\n.ace-tomorrow-night-blue .ace_invalid {\n  color: #FFFFFF;\n  background-color: #F99DA5\n}\n\n.ace-tomorrow-night-blue .ace_invalid.ace_deprecated {\n  color: #FFFFFF;\n  background-color: #EBBBFF\n}\n\n.ace-tomorrow-night-blue .ace_fold {\n  background-color: #BBDAFF;\n  border-color: #FFFFFF\n}\n\n.ace-tomorrow-night-blue .ace_entity.ace_name.ace_function,\n.ace-tomorrow-night-blue .ace_support.ace_function,\n.ace-tomorrow-night-blue .ace_variable {\n  color: #BBDAFF\n}\n\n.ace-tomorrow-night-blue .ace_support.ace_class,\n.ace-tomorrow-night-blue .ace_support.ace_type {\n  color: #FFEEAD\n}\n\n.ace-tomorrow-night-blue .ace_heading,\n.ace-tomorrow-night-blue .ace_markup.ace_heading,\n.ace-tomorrow-night-blue .ace_string {\n  color: #D1F1A9\n}\n\n.ace-tomorrow-night-blue .ace_entity.ace_name.ace_tag,\n.ace-tomorrow-night-blue .ace_entity.ace_other.ace_attribute-name,\n.ace-tomorrow-night-blue .ace_meta.ace_tag,\n.ace-tomorrow-night-blue .ace_string.ace_regexp,\n.ace-tomorrow-night-blue .ace_variable {\n  color: #FF9DA4\n}\n\n.ace-tomorrow-night-blue .ace_comment {\n  color: #7285B7\n}\n\n.ace-tomorrow-night-blue .ace_indent-guide {\n  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYJDzqfwPAANXAeNsiA+ZAAAAAElFTkSuQmCC) right repeat-y\n}"
  },
  {
    "path": "lib/ace/theme/tomorrow_night_blue.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-tomorrow-night-blue\";\nexports.cssText = require(\"../requirejs/text!./tomorrow_night_blue.css\");\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "lib/ace/theme/tomorrow_night_bright.css",
    "content": ".ace-tomorrow-night-bright .ace_gutter {\n  background: #1a1a1a;\n  color: #DEDEDE\n}\n\n.ace-tomorrow-night-bright .ace_print-margin {\n  width: 1px;\n  background: #1a1a1a\n}\n\n.ace-tomorrow-night-bright {\n  background-color: #000000;\n  color: #DEDEDE\n}\n\n.ace-tomorrow-night-bright .ace_cursor {\n  color: #9F9F9F\n}\n\n.ace-tomorrow-night-bright .ace_marker-layer .ace_selection {\n  background: #424242\n}\n\n.ace-tomorrow-night-bright.ace_multiselect .ace_selection.ace_start {\n  box-shadow: 0 0 3px 0px #000000;\n}\n\n.ace-tomorrow-night-bright .ace_marker-layer .ace_step {\n  background: rgb(102, 82, 0)\n}\n\n.ace-tomorrow-night-bright .ace_marker-layer .ace_bracket {\n  margin: -1px 0 0 -1px;\n  border: 1px solid #888888\n}\n\n.ace-tomorrow-night-bright .ace_marker-layer .ace_highlight {\n  border: 1px solid rgb(110, 119, 0);\n  border-bottom: 0;\n  box-shadow: inset 0 -1px rgb(110, 119, 0);\n  margin: -1px 0 0 -1px;\n  background: rgba(255, 235, 0, 0.1)\n}\n\n.ace-tomorrow-night-bright .ace_marker-layer .ace_active-line {\n  background: #2A2A2A\n}\n\n.ace-tomorrow-night-bright .ace_gutter-active-line {\n  background-color: #2A2A2A\n}\n\n.ace-tomorrow-night-bright .ace_stack {\n  background-color: rgb(66, 90, 44)\n}\n\n.ace-tomorrow-night-bright .ace_marker-layer .ace_selected-word {\n  border: 1px solid #888888\n}\n\n.ace-tomorrow-night-bright .ace_invisible {\n  color: #343434\n}\n\n.ace-tomorrow-night-bright .ace_keyword,\n.ace-tomorrow-night-bright .ace_meta,\n.ace-tomorrow-night-bright .ace_storage,\n.ace-tomorrow-night-bright .ace_storage.ace_type,\n.ace-tomorrow-night-bright .ace_support.ace_type {\n  color: #C397D8\n}\n\n.ace-tomorrow-night-bright .ace_keyword.ace_operator {\n  color: #70C0B1\n}\n\n.ace-tomorrow-night-bright .ace_constant.ace_character,\n.ace-tomorrow-night-bright .ace_constant.ace_language,\n.ace-tomorrow-night-bright .ace_constant.ace_numeric,\n.ace-tomorrow-night-bright .ace_keyword.ace_other.ace_unit,\n.ace-tomorrow-night-bright .ace_support.ace_constant,\n.ace-tomorrow-night-bright .ace_variable.ace_parameter {\n  color: #E78C45\n}\n\n.ace-tomorrow-night-bright .ace_constant.ace_other {\n  color: #EEEEEE\n}\n\n.ace-tomorrow-night-bright .ace_invalid {\n  color: #CED2CF;\n  background-color: #DF5F5F\n}\n\n.ace-tomorrow-night-bright .ace_invalid.ace_deprecated {\n  color: #CED2CF;\n  background-color: #B798BF\n}\n\n.ace-tomorrow-night-bright .ace_fold {\n  background-color: #7AA6DA;\n  border-color: #DEDEDE\n}\n\n.ace-tomorrow-night-bright .ace_entity.ace_name.ace_function,\n.ace-tomorrow-night-bright .ace_support.ace_function,\n.ace-tomorrow-night-bright .ace_variable {\n  color: #7AA6DA\n}\n\n.ace-tomorrow-night-bright .ace_support.ace_class,\n.ace-tomorrow-night-bright .ace_support.ace_type {\n  color: #E7C547\n}\n\n.ace-tomorrow-night-bright .ace_heading,\n.ace-tomorrow-night-bright .ace_markup.ace_heading,\n.ace-tomorrow-night-bright .ace_string {\n  color: #B9CA4A\n}\n\n.ace-tomorrow-night-bright .ace_entity.ace_name.ace_tag,\n.ace-tomorrow-night-bright .ace_entity.ace_other.ace_attribute-name,\n.ace-tomorrow-night-bright .ace_meta.ace_tag,\n.ace-tomorrow-night-bright .ace_string.ace_regexp,\n.ace-tomorrow-night-bright .ace_variable {\n  color: #D54E53\n}\n\n.ace-tomorrow-night-bright .ace_comment {\n  color: #969896\n}\n\n.ace-tomorrow-night-bright .ace_c9searchresults.ace_keyword {\n  color: #C2C280\n}\n\n.ace-tomorrow-night-bright .ace_indent-guide {\n  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYFBXV/8PAAJoAXX4kT2EAAAAAElFTkSuQmCC) right repeat-y\n}"
  },
  {
    "path": "lib/ace/theme/tomorrow_night_bright.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-tomorrow-night-bright\";\nexports.cssText = require(\"../requirejs/text!./tomorrow_night_bright.css\");\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "lib/ace/theme/tomorrow_night_eighties.css",
    "content": ".ace-tomorrow-night-eighties .ace_gutter {\n  background: #272727;\n  color: #CCC\n}\n\n.ace-tomorrow-night-eighties .ace_print-margin {\n  width: 1px;\n  background: #272727\n}\n\n.ace-tomorrow-night-eighties {\n  background-color: #2D2D2D;\n  color: #CCCCCC\n}\n\n.ace-tomorrow-night-eighties .ace_constant.ace_other,\n.ace-tomorrow-night-eighties .ace_cursor {\n  color: #CCCCCC\n}\n\n.ace-tomorrow-night-eighties .ace_marker-layer .ace_selection {\n  background: #515151\n}\n\n.ace-tomorrow-night-eighties.ace_multiselect .ace_selection.ace_start {\n  box-shadow: 0 0 3px 0px #2D2D2D;\n}\n\n.ace-tomorrow-night-eighties .ace_marker-layer .ace_step {\n  background: rgb(102, 82, 0)\n}\n\n.ace-tomorrow-night-eighties .ace_marker-layer .ace_bracket {\n  margin: -1px 0 0 -1px;\n  border: 1px solid #6A6A6A\n}\n\n.ace-tomorrow-night-bright .ace_stack {\n  background: rgb(66, 90, 44)\n}\n\n.ace-tomorrow-night-eighties .ace_marker-layer .ace_active-line {\n  background: #393939\n}\n\n.ace-tomorrow-night-eighties .ace_gutter-active-line {\n  background-color: #393939\n}\n\n.ace-tomorrow-night-eighties .ace_marker-layer .ace_selected-word {\n  border: 1px solid #515151\n}\n\n.ace-tomorrow-night-eighties .ace_invisible {\n  color: #6A6A6A\n}\n\n.ace-tomorrow-night-eighties .ace_keyword,\n.ace-tomorrow-night-eighties .ace_meta,\n.ace-tomorrow-night-eighties .ace_storage,\n.ace-tomorrow-night-eighties .ace_storage.ace_type,\n.ace-tomorrow-night-eighties .ace_support.ace_type {\n  color: #CC99CC\n}\n\n.ace-tomorrow-night-eighties .ace_keyword.ace_operator {\n  color: #66CCCC\n}\n\n.ace-tomorrow-night-eighties .ace_constant.ace_character,\n.ace-tomorrow-night-eighties .ace_constant.ace_language,\n.ace-tomorrow-night-eighties .ace_constant.ace_numeric,\n.ace-tomorrow-night-eighties .ace_keyword.ace_other.ace_unit,\n.ace-tomorrow-night-eighties .ace_support.ace_constant,\n.ace-tomorrow-night-eighties .ace_variable.ace_parameter {\n  color: #F99157\n}\n\n.ace-tomorrow-night-eighties .ace_invalid {\n  color: #CDCDCD;\n  background-color: #F2777A\n}\n\n.ace-tomorrow-night-eighties .ace_invalid.ace_deprecated {\n  color: #CDCDCD;\n  background-color: #CC99CC\n}\n\n.ace-tomorrow-night-eighties .ace_fold {\n  background-color: #6699CC;\n  border-color: #CCCCCC\n}\n\n.ace-tomorrow-night-eighties .ace_entity.ace_name.ace_function,\n.ace-tomorrow-night-eighties .ace_support.ace_function,\n.ace-tomorrow-night-eighties .ace_variable {\n  color: #6699CC\n}\n\n.ace-tomorrow-night-eighties .ace_support.ace_class,\n.ace-tomorrow-night-eighties .ace_support.ace_type {\n  color: #FFCC66\n}\n\n.ace-tomorrow-night-eighties .ace_heading,\n.ace-tomorrow-night-eighties .ace_markup.ace_heading,\n.ace-tomorrow-night-eighties .ace_string {\n  color: #99CC99\n}\n\n.ace-tomorrow-night-eighties .ace_comment {\n  color: #999999\n}\n\n.ace-tomorrow-night-eighties .ace_entity.ace_name.ace_tag,\n.ace-tomorrow-night-eighties .ace_entity.ace_other.ace_attribute-name,\n.ace-tomorrow-night-eighties .ace_meta.ace_tag,\n.ace-tomorrow-night-eighties .ace_variable {\n  color: #F2777A\n}\n\n.ace-tomorrow-night-eighties .ace_indent-guide {\n  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWPQ09NrYAgMjP4PAAtGAwchHMyAAAAAAElFTkSuQmCC) right repeat-y\n}"
  },
  {
    "path": "lib/ace/theme/tomorrow_night_eighties.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-tomorrow-night-eighties\";\nexports.cssText = require(\"../requirejs/text!./tomorrow_night_eighties.css\");\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "lib/ace/theme/twilight.css",
    "content": ".ace-twilight .ace_gutter {\n  background: #232323;\n  color: #E2E2E2\n}\n\n.ace-twilight .ace_print-margin {\n  width: 1px;\n  background: #232323\n}\n\n.ace-twilight {\n  background-color: #141414;\n  color: #F8F8F8\n}\n\n.ace-twilight .ace_cursor {\n  color: #A7A7A7\n}\n\n.ace-twilight .ace_marker-layer .ace_selection {\n  background: rgba(221, 240, 255, 0.20)\n}\n\n.ace-twilight.ace_multiselect .ace_selection.ace_start {\n  box-shadow: 0 0 3px 0px #141414;\n}\n\n.ace-twilight .ace_marker-layer .ace_step {\n  background: rgb(102, 82, 0)\n}\n\n.ace-twilight .ace_marker-layer .ace_bracket {\n  margin: -1px 0 0 -1px;\n  border: 1px solid rgba(255, 255, 255, 0.25)\n}\n\n.ace-twilight .ace_marker-layer .ace_active-line {\n  background: rgba(255, 255, 255, 0.031)\n}\n\n.ace-twilight .ace_gutter-active-line {\n  background-color: rgba(255, 255, 255, 0.031)\n}\n\n.ace-twilight .ace_marker-layer .ace_selected-word {\n  border: 1px solid rgba(221, 240, 255, 0.20)\n}\n\n.ace-twilight .ace_invisible {\n  color: rgba(255, 255, 255, 0.25)\n}\n\n.ace-twilight .ace_keyword,\n.ace-twilight .ace_meta {\n  color: #CDA869\n}\n\n.ace-twilight .ace_constant,\n.ace-twilight .ace_constant.ace_character,\n.ace-twilight .ace_constant.ace_character.ace_escape,\n.ace-twilight .ace_constant.ace_other,\n.ace-twilight .ace_heading,\n.ace-twilight .ace_markup.ace_heading,\n.ace-twilight .ace_support.ace_constant {\n  color: #CF6A4C\n}\n\n.ace-twilight .ace_invalid.ace_illegal {\n  color: #F8F8F8;\n  background-color: rgba(86, 45, 86, 0.75)\n}\n\n.ace-twilight .ace_invalid.ace_deprecated {\n  text-decoration: underline;\n  font-style: italic;\n  color: #D2A8A1\n}\n\n.ace-twilight .ace_support {\n  color: #9B859D\n}\n\n.ace-twilight .ace_fold {\n  background-color: #AC885B;\n  border-color: #F8F8F8\n}\n\n.ace-twilight .ace_support.ace_function {\n  color: #DAD085\n}\n\n.ace-twilight .ace_list,\n.ace-twilight .ace_markup.ace_list,\n.ace-twilight .ace_storage {\n  color: #F9EE98\n}\n\n.ace-twilight .ace_entity.ace_name.ace_function,\n.ace-twilight .ace_meta.ace_tag,\n.ace-twilight .ace_variable {\n  color: #AC885B\n}\n\n.ace-twilight .ace_string {\n  color: #8F9D6A\n}\n\n.ace-twilight .ace_string.ace_regexp {\n  color: #E9C062\n}\n\n.ace-twilight .ace_comment {\n  font-style: italic;\n  color: #5F5A60\n}\n\n.ace-twilight .ace_variable {\n  color: #7587A6\n}\n\n.ace-twilight .ace_xml-pe {\n  color: #494949\n}\n\n.ace-twilight .ace_indent-guide {\n  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWMQERFpYLC1tf0PAAgOAnPnhxyiAAAAAElFTkSuQmCC) right repeat-y\n}"
  },
  {
    "path": "lib/ace/theme/twilight.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-twilight\";\nexports.cssText = require(\"../requirejs/text!./twilight.css\");\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "lib/ace/theme/vibrant_ink.css",
    "content": ".ace-vibrant-ink .ace_gutter {\n  background: #1a1a1a;\n  color: #BEBEBE\n}\n\n.ace-vibrant-ink .ace_print-margin {\n  width: 1px;\n  background: #1a1a1a\n}\n\n.ace-vibrant-ink {\n  background-color: #0F0F0F;\n  color: #FFFFFF\n}\n\n.ace-vibrant-ink .ace_cursor {\n  color: #FFFFFF\n}\n\n.ace-vibrant-ink .ace_marker-layer .ace_selection {\n  background: #6699CC\n}\n\n.ace-vibrant-ink.ace_multiselect .ace_selection.ace_start {\n  box-shadow: 0 0 3px 0px #0F0F0F;\n}\n\n.ace-vibrant-ink .ace_marker-layer .ace_step {\n  background: rgb(102, 82, 0)\n}\n\n.ace-vibrant-ink .ace_marker-layer .ace_bracket {\n  margin: -1px 0 0 -1px;\n  border: 1px solid #404040\n}\n\n.ace-vibrant-ink .ace_marker-layer .ace_active-line {\n  background: #333333\n}\n\n.ace-vibrant-ink .ace_gutter-active-line {\n  background-color: #333333\n}\n\n.ace-vibrant-ink .ace_marker-layer .ace_selected-word {\n  border: 1px solid #6699CC\n}\n\n.ace-vibrant-ink .ace_invisible {\n  color: #404040\n}\n\n.ace-vibrant-ink .ace_keyword,\n.ace-vibrant-ink .ace_meta {\n  color: #FF6600\n}\n\n.ace-vibrant-ink .ace_constant,\n.ace-vibrant-ink .ace_constant.ace_character,\n.ace-vibrant-ink .ace_constant.ace_character.ace_escape,\n.ace-vibrant-ink .ace_constant.ace_other {\n  color: #339999\n}\n\n.ace-vibrant-ink .ace_constant.ace_numeric {\n  color: #99CC99\n}\n\n.ace-vibrant-ink .ace_invalid,\n.ace-vibrant-ink .ace_invalid.ace_deprecated {\n  color: #CCFF33;\n  background-color: #000000\n}\n\n.ace-vibrant-ink .ace_fold {\n  background-color: #FFCC00;\n  border-color: #FFFFFF\n}\n\n.ace-vibrant-ink .ace_entity.ace_name.ace_function,\n.ace-vibrant-ink .ace_support.ace_function,\n.ace-vibrant-ink .ace_variable {\n  color: #FFCC00\n}\n\n.ace-vibrant-ink .ace_variable.ace_parameter {\n  font-style: italic\n}\n\n.ace-vibrant-ink .ace_string {\n  color: #66FF00\n}\n\n.ace-vibrant-ink .ace_string.ace_regexp {\n  color: #44B4CC\n}\n\n.ace-vibrant-ink .ace_comment {\n  color: #9933CC\n}\n\n.ace-vibrant-ink .ace_entity.ace_other.ace_attribute-name {\n  font-style: italic;\n  color: #99CC99\n}\n\n.ace-vibrant-ink .ace_indent-guide {\n  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYNDTc/oPAALPAZ7hxlbYAAAAAElFTkSuQmCC) right repeat-y\n}"
  },
  {
    "path": "lib/ace/theme/vibrant_ink.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-vibrant-ink\";\nexports.cssText = require(\"../requirejs/text!./vibrant_ink.css\");\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "lib/ace/theme/xcode.css",
    "content": "/* THIS THEME WAS AUTOGENERATED BY Theme.tmpl.css (UUID: EE3AD170-2B7F-4DE1-B724-C75F13FE0085) */\n\n.ace-xcode .ace_gutter {\n  background: #e8e8e8;\n  color: #333\n}\n\n.ace-xcode .ace_print-margin {\n  width: 1px;\n  background: #e8e8e8\n}\n\n.ace-xcode {\n  background-color: #FFFFFF;\n  color: #000000\n}\n\n.ace-xcode .ace_cursor {\n  color: #000000\n}\n\n.ace-xcode .ace_marker-layer .ace_selection {\n  background: #B5D5FF\n}\n\n.ace-xcode.ace_multiselect .ace_selection.ace_start {\n  box-shadow: 0 0 3px 0px #FFFFFF;\n}\n\n.ace-xcode .ace_marker-layer .ace_step {\n  background: rgb(198, 219, 174)\n}\n\n.ace-xcode .ace_marker-layer .ace_bracket {\n  margin: -1px 0 0 -1px;\n  border: 1px solid #BFBFBF\n}\n\n.ace-xcode .ace_marker-layer .ace_active-line {\n  background: rgba(0, 0, 0, 0.071)\n}\n\n.ace-xcode .ace_gutter-active-line {\n  background-color: rgba(0, 0, 0, 0.071)\n}\n\n.ace-xcode .ace_marker-layer .ace_selected-word {\n  border: 1px solid #B5D5FF\n}\n\n.ace-xcode .ace_constant.ace_language,\n.ace-xcode .ace_keyword,\n.ace-xcode .ace_meta,\n.ace-xcode .ace_variable.ace_language {\n  color: #C800A4\n}\n\n.ace-xcode .ace_invisible {\n  color: #BFBFBF\n}\n\n.ace-xcode .ace_constant.ace_character,\n.ace-xcode .ace_constant.ace_other {\n  color: #275A5E\n}\n\n.ace-xcode .ace_constant.ace_numeric {\n  color: #3A00DC\n}\n\n.ace-xcode .ace_entity.ace_other.ace_attribute-name,\n.ace-xcode .ace_support.ace_constant,\n.ace-xcode .ace_support.ace_function {\n  color: #450084\n}\n\n.ace-xcode .ace_fold {\n  background-color: #C800A4;\n  border-color: #000000\n}\n\n.ace-xcode .ace_entity.ace_name.ace_tag,\n.ace-xcode .ace_support.ace_class,\n.ace-xcode .ace_support.ace_type {\n  color: #790EAD\n}\n\n.ace-xcode .ace_storage {\n  color: #C900A4\n}\n\n.ace-xcode .ace_string {\n  color: #DF0002\n}\n\n.ace-xcode .ace_comment {\n  color: #008E00\n}\n\n.ace-xcode .ace_indent-guide {\n  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==) right repeat-y\n}"
  },
  {
    "path": "lib/ace/theme/xcode.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\nexports.isDark = false;\nexports.cssClass = \"ace-xcode\";\nexports.cssText = require(\"../requirejs/text!./xcode.css\");\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "lib/ace/token_iterator.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"./range\").Range;\n\n/**\n * \n *\n * This class provides an essay way to treat the document as a stream of tokens, and provides methods to iterate over these tokens.\n * @class TokenIterator\n **/\n\n/**\n * Creates a new token iterator object. The inital token index is set to the provided row and column coordinates.\n * @param {EditSession} session The session to associate with\n * @param {Number} initialRow The row to start the tokenizing at\n * @param {Number} initialColumn The column to start the tokenizing at\n *\n * @constructor\n **/\nvar TokenIterator = function(session, initialRow, initialColumn) {\n    this.$session = session;\n    this.$row = initialRow;\n    this.$rowTokens = session.getTokens(initialRow);\n\n    var token = session.getTokenAt(initialRow, initialColumn);\n    this.$tokenIndex = token ? token.index : -1;\n};\n\n(function() {\n   \n    /**\n     * Tokenizes all the items from the current point to the row prior in the document. \n     * @returns {[String]} If the current point is not at the top of the file, this function returns `null`. Otherwise, it returns an array of the tokenized strings.\n     **/ \n    this.stepBackward = function() {\n        this.$tokenIndex -= 1;\n        \n        while (this.$tokenIndex < 0) {\n            this.$row -= 1;\n            if (this.$row < 0) {\n                this.$row = 0;\n                return null;\n            }\n                \n            this.$rowTokens = this.$session.getTokens(this.$row);\n            this.$tokenIndex = this.$rowTokens.length - 1;\n        }\n            \n        return this.$rowTokens[this.$tokenIndex];\n    };\n  \n    /**\n     * Tokenizes all the items from the current point until the next row in the document. If the current point is at the end of the file, this function returns `null`. Otherwise, it returns the tokenized string.\n     * @returns {String}\n     **/   \n    this.stepForward = function() {\n        this.$tokenIndex += 1;\n        var rowCount;\n        while (this.$tokenIndex >= this.$rowTokens.length) {\n            this.$row += 1;\n            if (!rowCount)\n                rowCount = this.$session.getLength();\n            if (this.$row >= rowCount) {\n                this.$row = rowCount - 1;\n                return null;\n            }\n\n            this.$rowTokens = this.$session.getTokens(this.$row);\n            this.$tokenIndex = 0;\n        }\n            \n        return this.$rowTokens[this.$tokenIndex];\n    };\n \n    /**\n     * \n     * Returns the current tokenized string.\n     * @returns {String}\n     **/      \n    this.getCurrentToken = function () {\n        return this.$rowTokens[this.$tokenIndex];\n    };\n\n    /**\n     * \n     * Returns the current row.\n     * @returns {Number}\n     **/      \n    this.getCurrentTokenRow = function () {\n        return this.$row;\n    };\n\n    /**\n     * \n     * Returns the current column.\n     * @returns {Number}\n     **/     \n    this.getCurrentTokenColumn = function() {\n        var rowTokens = this.$rowTokens;\n        var tokenIndex = this.$tokenIndex;\n        \n        // If a column was cached by EditSession.getTokenAt, then use it\n        var column = rowTokens[tokenIndex].start;\n        if (column !== undefined)\n            return column;\n            \n        column = 0;\n        while (tokenIndex > 0) {\n            tokenIndex -= 1;\n            column += rowTokens[tokenIndex].value.length;\n        }\n        \n        return column;  \n    };\n\n    /**\n     * Return the current token position.\n     * @returns {Position}\n     */\n    this.getCurrentTokenPosition = function() {\n        return {row: this.$row, column: this.getCurrentTokenColumn()};\n    };\n    \n    /**\n     * Return the current token range.\n     * @returns {Range}\n     */\n    this.getCurrentTokenRange = function() {\n        var token = this.$rowTokens[this.$tokenIndex];\n        var column = this.getCurrentTokenColumn();\n        return new Range(this.$row, column, this.$row, column + token.value.length);\n    };\n    \n}).call(TokenIterator.prototype);\n\nexports.TokenIterator = TokenIterator;\n});\n"
  },
  {
    "path": "lib/ace/token_iterator_test.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n if (typeof process !== \"undefined\") {\n     require(\"amd-loader\");\n }\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar EditSession = require(\"./edit_session\").EditSession;\nvar JavaScriptMode = require(\"./mode/javascript\").Mode;\nvar TokenIterator = require(\"./token_iterator\").TokenIterator;\nvar assert = require(\"./test/assertions\");\n\nmodule.exports = {\n    \"test: token iterator initialization in JavaScript document\" : function() {\n        var lines = [\n            \"function foo(items) {\",\n            \"    for (var i=0; i<items.length; i++) {\",\n            \"        alert(items[i] + \\\"juhu\\\");\",\n            \"    } // Real Tab.\",\n            \"}\"\n        ];\n        var session = new EditSession(lines.join(\"\\n\"), new JavaScriptMode());\n\n        var iterator = new TokenIterator(session, 0, 0);\n        assert.equal(iterator.getCurrentToken().value, \"function\");\n        assert.equal(iterator.getCurrentTokenRow(), 0);\n        assert.equal(iterator.getCurrentTokenColumn(), 0);\n\n        iterator.stepForward();\n        assert.equal(iterator.getCurrentToken().value, \" \");\n        assert.equal(iterator.getCurrentTokenRow(), 0);\n        assert.equal(iterator.getCurrentTokenColumn(), 8);\n\n        var iterator = new TokenIterator(session, 0, 4);\n        assert.equal(iterator.getCurrentToken().value, \"function\");\n        assert.equal(iterator.getCurrentTokenRow(), 0);\n        assert.equal(iterator.getCurrentTokenColumn(), 0);\n\n        iterator.stepForward();\n        assert.equal(iterator.getCurrentToken().value, \" \");\n        assert.equal(iterator.getCurrentTokenRow(), 0);\n        assert.equal(iterator.getCurrentTokenColumn(), 8);\n\n        var iterator = new TokenIterator(session, 2, 18);\n        assert.equal(iterator.getCurrentToken().value, \"items\");\n        assert.equal(iterator.getCurrentTokenRow(), 2);\n        assert.equal(iterator.getCurrentTokenColumn(), 14);\n\n        iterator.stepForward();\n        assert.equal(iterator.getCurrentToken().value, \"[\");\n        assert.equal(iterator.getCurrentTokenRow(), 2);\n        assert.equal(iterator.getCurrentTokenColumn(), 19);\n\n        var iterator = new TokenIterator(session, 4, 0);\n        assert.equal(iterator.getCurrentToken().value, \"}\");\n        assert.equal(iterator.getCurrentTokenRow(), 4);\n        assert.equal(iterator.getCurrentTokenColumn(), 0);\n\n        iterator.stepBackward();\n        assert.equal(iterator.getCurrentToken().value, \"// Real Tab.\");\n        assert.equal(iterator.getCurrentTokenRow(), 3);\n        assert.equal(iterator.getCurrentTokenColumn(), 6);\n\n        var iterator = new TokenIterator(session, 5, 0);\n        assert.equal(iterator.getCurrentToken(), null);\n    },\n\n    \"test: token iterator initialization in text document\" : function() {\n        var lines = [\n            \"Lorem ipsum dolor sit amet, consectetur adipisicing elit,\",\n            \"sed do eiusmod tempor incididunt ut labore et dolore magna\",\n            \"aliqua. Ut enim ad minim veniam, quis nostrud exercitation\",\n            \"ullamco laboris nisi ut aliquip ex ea commodo consequat.\"\n        ];\n        var session = new EditSession(lines.join(\"\\n\"));\n\n        var iterator = new TokenIterator(session, 0, 0);\n        assert.equal(iterator.getCurrentToken().value, lines[0]);\n        assert.equal(iterator.getCurrentTokenRow(), 0);\n        assert.equal(iterator.getCurrentTokenColumn(), 0);\n\n        var iterator = new TokenIterator(session, 0, 4);\n        assert.equal(iterator.getCurrentToken().value, lines[0]);\n        assert.equal(iterator.getCurrentTokenRow(), 0);\n        assert.equal(iterator.getCurrentTokenColumn(), 0);\n\n        var iterator = new TokenIterator(session, 2, 18);\n        assert.equal(iterator.getCurrentToken().value, lines[2]);\n        assert.equal(iterator.getCurrentTokenRow(), 2);\n        assert.equal(iterator.getCurrentTokenColumn(), 0);\n\n        var iterator = new TokenIterator(session, 3, lines[3].length-1);\n        assert.equal(iterator.getCurrentToken().value, lines[3]);\n        assert.equal(iterator.getCurrentTokenRow(), 3);\n        assert.equal(iterator.getCurrentTokenColumn(), 0);\n\n        var iterator = new TokenIterator(session, 4, 0);\n        assert.equal(iterator.getCurrentToken(), null);\n    },\n\n    \"test: token iterator step forward in JavaScript document\" : function() {\n        var lines = [\n            \"function foo(items) {\",\n            \"    for (var i=0; i<items.length; i++) {\",\n            \"        alert(items[i] + \\\"juhu\\\");\",\n            \"    } // Real Tab.\",\n            \"}\"\n        ];\n        var session = new EditSession(lines.join(\"\\n\"), new JavaScriptMode());\n\n        var tokens = [];\n        var len = session.getLength();\n        for (var i = 0; i < len; i++)\n            tokens = tokens.concat(session.getTokens(i));\n\n        var iterator = new TokenIterator(session, 0, 0);\n        for (var i = 1; i < tokens.length; i++)\n            assert.equal(iterator.stepForward(), tokens[i]);\n        assert.equal(iterator.stepForward(), null);\n        assert.equal(iterator.getCurrentToken(), null);\n    },\n\n    \"test: token iterator step backward in JavaScript document\" : function() {\n        var lines = [\n            \"function foo(items) {\",\n            \"     for (var i=0; i<items.length; i++) {\",\n            \"         alert(items[i] + \\\"juhu\\\");\",\n            \"     } // Real Tab.\",\n            \"}\"\n        ];\n        var session = new EditSession(lines.join(\"\\n\"), new JavaScriptMode());\n\n        var tokens = [];\n        var len = session.getLength();\n        for (var i = 0; i < len; i++)\n            tokens = tokens.concat(session.getTokens(i));\n\n        var iterator = new TokenIterator(session, 4, 0);\n        for (var i = tokens.length-2; i >= 0; i--)\n            assert.equal(iterator.stepBackward(), tokens[i]);\n        assert.equal(iterator.stepBackward(), null);\n        assert.equal(iterator.getCurrentToken(), null);\n    },\n\n    \"test: token iterator reports correct row and column\" : function() {\n        var lines = [\n            \"function foo(items) {\",\n            \"    for (var i=0; i<items.length; i++) {\",\n            \"        alert(items[i] + \\\"juhu\\\");\",\n            \"    } // Real Tab.\",\n            \"}\"\n        ];\n        var session = new EditSession(lines.join(\"\\n\"), new JavaScriptMode());\n\n        var iterator = new TokenIterator(session, 0, 0);\n\n        iterator.stepForward();\n        iterator.stepForward();\n\n        assert.equal(iterator.getCurrentToken().value, \"foo\");\n        assert.equal(iterator.getCurrentTokenRow(), 0);\n        assert.equal(iterator.getCurrentTokenColumn(), 9);\n\n        iterator.stepForward();\n        iterator.stepForward();\n        iterator.stepForward();\n        iterator.stepForward();\n        iterator.stepForward();\n        iterator.stepForward();\n        iterator.stepForward();\n\n        assert.equal(iterator.getCurrentToken().value, \"for\");\n        assert.equal(iterator.getCurrentTokenRow(), 1);\n        assert.equal(iterator.getCurrentTokenColumn(), 4);\n    }\n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main) {\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n}\n"
  },
  {
    "path": "lib/ace/tokenizer.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar config = require(\"./config\");\n// tokenizing lines longer than this makes editor very slow\nvar MAX_TOKEN_COUNT = 2000;\n/**\n * This class takes a set of highlighting rules, and creates a tokenizer out of them. For more information, see [the wiki on extending highlighters](https://github.com/ajaxorg/ace/wiki/Creating-or-Extending-an-Edit-Mode#wiki-extendingTheHighlighter).\n * @class Tokenizer\n **/\n\n/**\n * Constructs a new tokenizer based on the given rules and flags.\n * @param {Object} rules The highlighting rules\n *\n * @constructor\n **/\nvar Tokenizer = function(rules) {\n    this.states = rules;\n\n    this.regExps = {};\n    this.matchMappings = {};\n    for (var key in this.states) {\n        var state = this.states[key];\n        var ruleRegExps = [];\n        var matchTotal = 0;\n        var mapping = this.matchMappings[key] = {defaultToken: \"text\"};\n        var flag = \"g\";\n\n        var splitterRurles = [];\n        for (var i = 0; i < state.length; i++) {\n            var rule = state[i];\n            if (rule.defaultToken)\n                mapping.defaultToken = rule.defaultToken;\n            if (rule.caseInsensitive)\n                flag = \"gi\";\n            if (rule.regex == null)\n                continue;\n\n            if (rule.regex instanceof RegExp)\n                rule.regex = rule.regex.toString().slice(1, -1);\n\n            // Count number of matching groups. 2 extra groups from the full match\n            // And the catch-all on the end (used to force a match);\n            var adjustedregex = rule.regex;\n            var matchcount = new RegExp(\"(?:(\" + adjustedregex + \")|(.))\").exec(\"a\").length - 2;\n            if (Array.isArray(rule.token)) {\n                if (rule.token.length == 1 || matchcount == 1) {\n                    rule.token = rule.token[0];\n                } else if (matchcount - 1 != rule.token.length) {\n                    this.reportError(\"number of classes and regexp groups doesn't match\", { \n                        rule: rule,\n                        groupCount: matchcount - 1\n                    });\n                    rule.token = rule.token[0];\n                } else {\n                    rule.tokenArray = rule.token;\n                    rule.token = null;\n                    rule.onMatch = this.$arrayTokens;\n                }\n            } else if (typeof rule.token == \"function\" && !rule.onMatch) {\n                if (matchcount > 1)\n                    rule.onMatch = this.$applyToken;\n                else\n                    rule.onMatch = rule.token;\n            }\n\n            if (matchcount > 1) {\n                if (/\\\\\\d/.test(rule.regex)) {\n                    // Replace any backreferences and offset appropriately.\n                    adjustedregex = rule.regex.replace(/\\\\([0-9]+)/g, function(match, digit) {\n                        return \"\\\\\" + (parseInt(digit, 10) + matchTotal + 1);\n                    });\n                } else {\n                    matchcount = 1;\n                    adjustedregex = this.removeCapturingGroups(rule.regex);\n                }\n                if (!rule.splitRegex && typeof rule.token != \"string\")\n                    splitterRurles.push(rule); // flag will be known only at the very end\n            }\n\n            mapping[matchTotal] = i;\n            matchTotal += matchcount;\n\n            ruleRegExps.push(adjustedregex);\n\n            // makes property access faster\n            if (!rule.onMatch)\n                rule.onMatch = null;\n        }\n        \n        if (!ruleRegExps.length) {\n            mapping[0] = 0;\n            ruleRegExps.push(\"$\");\n        }\n        \n        splitterRurles.forEach(function(rule) {\n            rule.splitRegex = this.createSplitterRegexp(rule.regex, flag);\n        }, this);\n\n        this.regExps[key] = new RegExp(\"(\" + ruleRegExps.join(\")|(\") + \")|($)\", flag);\n    }\n};\n\n(function() {\n    this.$setMaxTokenCount = function(m) {\n        MAX_TOKEN_COUNT = m | 0;\n    };\n    \n    this.$applyToken = function(str) {\n        var values = this.splitRegex.exec(str).slice(1);\n        var types = this.token.apply(this, values);\n\n        // required for compatibility with old modes\n        if (typeof types === \"string\")\n            return [{type: types, value: str}];\n\n        var tokens = [];\n        for (var i = 0, l = types.length; i < l; i++) {\n            if (values[i])\n                tokens[tokens.length] = {\n                    type: types[i],\n                    value: values[i]\n                };\n        }\n        return tokens;\n    };\n\n    this.$arrayTokens = function(str) {\n        if (!str)\n            return [];\n        var values = this.splitRegex.exec(str);\n        if (!values)\n            return \"text\";\n        var tokens = [];\n        var types = this.tokenArray;\n        for (var i = 0, l = types.length; i < l; i++) {\n            if (values[i + 1])\n                tokens[tokens.length] = {\n                    type: types[i],\n                    value: values[i + 1]\n                };\n        }\n        return tokens;\n    };\n\n    this.removeCapturingGroups = function(src) {\n        var r = src.replace(\n            /\\[(?:\\\\.|[^\\]])*?\\]|\\\\.|\\(\\?[:=!]|(\\()/g,\n            function(x, y) {return y ? \"(?:\" : x;}\n        );\n        return r;\n    };\n\n    this.createSplitterRegexp = function(src, flag) {\n        if (src.indexOf(\"(?=\") != -1) {\n            var stack = 0;\n            var inChClass = false;\n            var lastCapture = {};\n            src.replace(/(\\\\.)|(\\((?:\\?[=!])?)|(\\))|([\\[\\]])/g, function(\n                m, esc, parenOpen, parenClose, square, index\n            ) {\n                if (inChClass) {\n                    inChClass = square != \"]\";\n                } else if (square) {\n                    inChClass = true;\n                } else if (parenClose) {\n                    if (stack == lastCapture.stack) {\n                        lastCapture.end = index+1;\n                        lastCapture.stack = -1;\n                    }\n                    stack--;\n                } else if (parenOpen) {\n                    stack++;\n                    if (parenOpen.length != 1) {\n                        lastCapture.stack = stack;\n                        lastCapture.start = index;\n                    }\n                }\n                return m;\n            });\n\n            if (lastCapture.end != null && /^\\)*$/.test(src.substr(lastCapture.end)))\n                src = src.substring(0, lastCapture.start) + src.substr(lastCapture.end);\n        }\n        \n        // this is needed for regexps that can match in multiple ways\n        if (src.charAt(0) != \"^\") src = \"^\" + src;\n        if (src.charAt(src.length - 1) != \"$\") src += \"$\";\n        \n        return new RegExp(src, (flag||\"\").replace(\"g\", \"\"));\n    };\n\n    /**\n     * Returns an object containing two properties: `tokens`, which contains all the tokens; and `state`, the current state.\n     * @returns {Object}\n     **/\n    this.getLineTokens = function(line, startState) {\n        if (startState && typeof startState != \"string\") {\n            var stack = startState.slice(0);\n            startState = stack[0];\n            if (startState === \"#tmp\") {\n                stack.shift();\n                startState = stack.shift();\n            }\n        } else\n            var stack = [];\n\n        var currentState = startState || \"start\";\n        var state = this.states[currentState];\n        if (!state) {\n            currentState = \"start\";\n            state = this.states[currentState];\n        }\n        var mapping = this.matchMappings[currentState];\n        var re = this.regExps[currentState];\n        re.lastIndex = 0;\n\n        var match, tokens = [];\n        var lastIndex = 0;\n        var matchAttempts = 0;\n\n        var token = {type: null, value: \"\"};\n\n        while (match = re.exec(line)) {\n            var type = mapping.defaultToken;\n            var rule = null;\n            var value = match[0];\n            var index = re.lastIndex;\n\n            if (index - value.length > lastIndex) {\n                var skipped = line.substring(lastIndex, index - value.length);\n                if (token.type == type) {\n                    token.value += skipped;\n                } else {\n                    if (token.type)\n                        tokens.push(token);\n                    token = {type: type, value: skipped};\n                }\n            }\n\n            for (var i = 0; i < match.length-2; i++) {\n                if (match[i + 1] === undefined)\n                    continue;\n\n                rule = state[mapping[i]];\n\n                if (rule.onMatch)\n                    type = rule.onMatch(value, currentState, stack, line);\n                else\n                    type = rule.token;\n\n                if (rule.next) {\n                    if (typeof rule.next == \"string\") {\n                        currentState = rule.next;\n                    } else {\n                        currentState = rule.next(currentState, stack);\n                    }\n                    \n                    state = this.states[currentState];\n                    if (!state) {\n                        this.reportError(\"state doesn't exist\", currentState);\n                        currentState = \"start\";\n                        state = this.states[currentState];\n                    }\n                    mapping = this.matchMappings[currentState];\n                    lastIndex = index;\n                    re = this.regExps[currentState];\n                    re.lastIndex = index;\n                }\n                if (rule.consumeLineEnd)\n                    lastIndex = index;\n                break;\n            }\n\n            if (value) {\n                if (typeof type === \"string\") {\n                    if ((!rule || rule.merge !== false) && token.type === type) {\n                        token.value += value;\n                    } else {\n                        if (token.type)\n                            tokens.push(token);\n                        token = {type: type, value: value};\n                    }\n                } else if (type) {\n                    if (token.type)\n                        tokens.push(token);\n                    token = {type: null, value: \"\"};\n                    for (var i = 0; i < type.length; i++)\n                        tokens.push(type[i]);\n                }\n            }\n\n            if (lastIndex == line.length)\n                break;\n\n            lastIndex = index;\n\n            if (matchAttempts++ > MAX_TOKEN_COUNT) {\n                if (matchAttempts > 2 * line.length) {\n                    this.reportError(\"infinite loop with in ace tokenizer\", {\n                        startState: startState,\n                        line: line\n                    });\n                }\n                // chrome doens't show contents of text nodes with very long text\n                while (lastIndex < line.length) {\n                    if (token.type)\n                        tokens.push(token);\n                    token = {\n                        value: line.substring(lastIndex, lastIndex += 2000),\n                        type: \"overflow\"\n                    };\n                }\n                currentState = \"start\";\n                stack = [];\n                break;\n            }\n        }\n\n        if (token.type)\n            tokens.push(token);\n        \n        if (stack.length > 1) {\n            if (stack[0] !== currentState)\n                stack.unshift(\"#tmp\", currentState);\n        }\n        return {\n            tokens : tokens,\n            state : stack.length ? stack : currentState\n        };\n    };\n    \n    this.reportError = config.reportError;\n    \n}).call(Tokenizer.prototype);\n\nexports.Tokenizer = Tokenizer;\n});\n"
  },
  {
    "path": "lib/ace/tokenizer_dev.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\nvar BaseTokenizer = require(\"./tokenizer\").Tokenizer;\n\n// tokenizing lines longer than this makes editor very slow\nvar MAX_TOKEN_COUNT = 2000;\n/*\n * version of Tokenizer with additional logging\n * and infinite loop checks\n * can be used for developing/testing new modes\n **/\n\nvar Tokenizer = function(rules) {\n    BaseTokenizer.call(this, rules);\n\n    /**\n     * Returns an object containing two properties: `tokens`, which contains all the tokens; and `state`, the current state.\n     * @returns {Object}\n     **/\n    this.getLineTokens = function(line, startState) {\n        if (startState && typeof startState != \"string\") {\n            var stack = startState.slice(0);\n            startState = stack[0];\n        } else\n            var stack = [];\n\n        var currentState = startState || \"start\";\n        var state = this.states[currentState];\n        var mapping = this.matchMappings[currentState];\n        var re = this.regExps[currentState];\n        re.lastIndex = 0;\n\n        var match, tokens = [];\n\n        var lastIndex = 0;\n\n        var stateTransitions = [];\n        function onStateChange() {\n            stateTransitions.push(startState+\"@\"+lastIndex);\n        }\n        function initState() {\n            onStateChange();\n            stateTransitions = [];\n            onStateChange();\n        }\n        \n        var token = {\n            type: null,\n            value: \"\",\n            state: currentState\n        };\n        initState();\n        \n        var maxRecur = 20000;\n        \n        while (match = re.exec(line)) {\n            var type = mapping.defaultToken;\n            var rule = null;\n            var value = match[0];\n            var index = re.lastIndex;\n\n            if (index - value.length > lastIndex) {\n                var skipped = line.substring(lastIndex, index - value.length);\n                if (token.type == type) {\n                    token.value += skipped;\n                } else {\n                    if (token.type)\n                        tokens.push(token);\n                    token = {type: type, value: skipped};\n                }\n            }\n\n            for (var i = 0; i < match.length-2; i++) {\n                if (match[i + 1] === undefined)\n                    continue;\n                \n                if (!maxRecur--) {\n                    throw \"infinite\" + state[mapping[i]] + currentState;\n                }\n\n                rule = state[mapping[i]];\n\n                if (rule.onMatch)\n                    type = rule.onMatch(value, currentState, stack, line);\n                else\n                    type = rule.token;\n\n                if (rule.next) {\n                    if (typeof rule.next == \"string\")\n                        currentState = rule.next;\n                    else\n                        currentState = rule.next(currentState, stack);\n\n                    state = this.states[currentState];\n                    if (!state) {\n                        window.console && console.error && console.error(currentState, \"doesn't exist\");\n                        currentState = \"start\";\n                        state = this.states[currentState];\n                    }\n                    mapping = this.matchMappings[currentState];\n                    lastIndex = index;\n                    re = this.regExps[currentState];\n                    re.lastIndex = index;\n\n                    onStateChange();\n                }\n                if (rule.consumeLineEnd)\n                    lastIndex = index;\n                break;\n            }\n\n            if (value) {\n                if (typeof type == \"string\") {\n                    if ((!rule || rule.merge !== false) && token.type === type) {\n                        token.value += value;\n                    } else {\n                        if (token.type)\n                            tokens.push(token);\n                        token = {type: type, value: value};\n                    }\n                } else {\n                    if (token.type)\n                        tokens.push(token);\n                    token = {type: null, value: \"\"};\n                    for (var i = 0; i < type.length; i++)\n                        tokens.push(type[i]);\n                }\n            }\n\n            if (lastIndex == line.length)\n                break;\n\n            lastIndex = index;\n\n            if (tokens.length > MAX_TOKEN_COUNT) {\n                token.value += line.substr(lastIndex);\n                currentState = \"start\";\n                break;\n            }\n        }\n\n        if (token.type)\n            tokens.push(token);\n\n        return {\n            tokens : tokens,\n            state : stack.length ? stack : currentState\n        };\n    };\n\n};\n\nTokenizer.prototype = BaseTokenizer.prototype;\n\nexports.Tokenizer = Tokenizer;\n});\n"
  },
  {
    "path": "lib/ace/tokenizer_test.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n if (typeof process !== \"undefined\") {\n    require(\"amd-loader\");\n }\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar Tokenizer = require(\"./tokenizer\").Tokenizer;\nvar assert = require(\"./test/assertions\");\n\nmodule.exports = {\n    \"test: createSplitterRegexp\" : function() {\n        var t = new Tokenizer({});\n        var re = t.createSplitterRegexp(\"(a)(b)(?=[x)(])\");\n        assert.equal(re.source, \"^(a)(b)$\");\n        var re = t.createSplitterRegexp(\"xc(?=([x)(]))\");\n        assert.equal(re.source, \"^xc$\");\n        var re = t.createSplitterRegexp(\"(xc(?=([x)(])))\");\n        assert.equal(re.source, \"^(xc)$\");\n        var re = t.createSplitterRegexp(\"(?=r)[(?=)](?=([x)(]))\");\n        assert.equal(re.source, \"^(?=r)[(?=)]$\");\n        var re = t.createSplitterRegexp(\"(?=r)[(?=)](\\\\?=t)\");\n        assert.equal(re.source, \"^(?=r)[(?=)](\\\\?=t)$\");\n        var re = t.createSplitterRegexp(\"[(?=)](\\\\?=t)\");\n        assert.equal(re.source, \"^[(?=)](\\\\?=t)$\");\n    },\n\n    \"test: removeCapturingGroups\" : function() {\n        var t = new Tokenizer({});\n        var re = t.removeCapturingGroups(\"(ax(by))[()]\");\n        assert.equal(re, \"(?:ax(?:by))[()]\");\n    },\n    \n    \"test: broken highlight rules\": function() {\n        var t = new Tokenizer({\n            start: [{ \n                token: 's',\n                regex: '&&&|^^^' \n            }, {\n                defaultToken: \"def\"\n            }],\n            state1: [{ \n                token: 'x',\n                regex: /\\b([\\w]*)(\\s*)((?::)?)/\n            }]\n        });\n        var errorReports = 0;\n        t.reportError = function() { errorReports++; };\n        var tokens = t.getLineTokens(\"x|\", \"start\");\n        assert.deepEqual(tokens, {\n            tokens: [{value: 'x|', type: 'overflow'}],\n            state: 'start'\n        });\n        var tokens = t.getLineTokens(\"x|\", \"state1\");\n        assert.deepEqual(tokens, {\n            tokens: [{value: 'x', type: 'x'}, {value: '|', type: 'overflow'}],\n            state: 'start'\n        });\n        assert.equal(errorReports, 2);\n    } \n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main) {\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n}\n"
  },
  {
    "path": "lib/ace/tooltip.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\n\n/**\n * @class Tooltip\n **/\n\n/**\n * @param {Element} parentNode\n *\n * @constructor\n **/\nfunction Tooltip (parentNode) {\n    this.isOpen = false;\n    this.$element = null;\n    this.$parentNode = parentNode;\n}\n\n(function() {\n    this.$init = function() {\n        this.$element = dom.createElement(\"div\");\n        this.$element.className = \"ace_tooltip\";\n        this.$element.style.display = \"none\";\n        this.$parentNode.appendChild(this.$element);\n        return this.$element;\n    };\n\n    /**\n     * @returns {Element}\n     **/\n    this.getElement = function() {\n        return this.$element || this.$init();\n    };\n\n    /**\n     * @param {String} text\n     **/\n    this.setText = function(text) {\n        dom.setInnerText(this.getElement(), text);\n    };\n\n    /**\n     * @param {String} html\n     **/\n    this.setHtml = function(html) {\n        this.getElement().innerHTML = html;\n    };\n\n    /**\n     * @param {Number} x\n     * @param {Number} y\n     **/\n    this.setPosition = function(x, y) {\n        this.getElement().style.left = x + \"px\";\n        this.getElement().style.top = y + \"px\";\n    };\n\n    /**\n     * @param {String} className\n     **/\n    this.setClassName = function(className) {\n        dom.addCssClass(this.getElement(), className);\n    };\n\n    /**\n     * @param {String} text\n     * @param {Number} x\n     * @param {Number} y\n     **/\n    this.show = function(text, x, y) {\n        if (text != null)\n            this.setText(text);\n        if (x != null && y != null)\n            this.setPosition(x, y);\n        if (!this.isOpen) {\n            this.getElement().style.display = \"block\";\n            this.isOpen = true;\n        }\n    };\n\n    this.hide = function() {\n        if (this.isOpen) {\n            this.getElement().style.display = \"none\";\n            this.isOpen = false;\n        }\n    };\n\n    /**\n     * @returns {Number}\n     **/\n    this.getHeight = function() {\n        return this.getElement().offsetHeight;\n    };\n\n    /**\n     * @returns {Number}\n     **/\n    this.getWidth = function() {\n        return this.getElement().offsetWidth;\n    };\n    \n    this.destroy = function() {\n        this.isOpen = false;\n        if (this.$element && this.$element.parentNode) {\n            this.$element.parentNode.removeChild(this.$element);\n        }\n    };\n\n}).call(Tooltip.prototype);\n\nexports.Tooltip = Tooltip;\n});\n"
  },
  {
    "path": "lib/ace/undomanager.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\n/**\n * This object maintains the undo stack for an [[EditSession `EditSession`]].\n * @class UndoManager\n **/\n\n/**\n * Resets the current undo state and creates a new `UndoManager`.\n * \n * @constructor\n **/\nvar UndoManager = function() {\n    this.$maxRev = 0;\n    this.$fromUndo = false;\n    this.reset();\n};\n\n(function() {\n    \n    this.addSession = function(session) {\n        this.$session = session;\n    };\n    /**\n     * Provides a means for implementing your own undo manager. `options` has one property, `args`, an [[Array `Array`]], with two elements:\n     *\n     * - `args[0]` is an array of deltas\n     * - `args[1]` is the document to associate with\n     *\n     * @param {Object} options Contains additional properties\n     *\n     **/\n    this.add = function(delta, allowMerge, session) {\n        if (this.$fromUndo) return;\n        if (delta == this.$lastDelta) return;\n        if (allowMerge === false || !this.lastDeltas) {\n            this.lastDeltas = [];\n            this.$undoStack.push(this.lastDeltas);\n            delta.id = this.$rev = ++this.$maxRev;\n        }\n        if (delta.action == \"remove\" || delta.action == \"insert\")\n            this.$lastDelta = delta;\n        this.lastDeltas.push(delta);\n    };\n    \n    this.addSelection = function(selection, rev) {\n        this.selections.push({\n            value: selection,\n            rev: rev || this.$rev\n        });\n    };\n    \n    this.startNewGroup = function() {\n        this.lastDeltas = null;\n        return this.$rev;\n    };\n    \n    this.markIgnored = function(from, to) {\n        if (to == null) to = this.$rev + 1;\n        var stack = this.$undoStack;\n        for (var i = stack.length; i--;) {\n            var delta = stack[i][0];\n            if (delta.id <= from)\n                break;\n            if (delta.id < to)\n                delta.ignore = true;\n        }\n        this.lastDeltas = null;\n    };\n    \n    this.getSelection = function(rev, after) {\n        var stack = this.selections;\n        for (var i = stack.length; i--;) {\n            var selection = stack[i];\n            if (selection.rev < rev) {\n                if (after)\n                    selection = stack[i + 1];\n                return selection;\n            }\n        }\n    };\n    \n    this.getRevision = function() {\n        return this.$rev;\n    };\n    \n    this.getDeltas = function(from, to) {\n        if (to == null) to = this.$rev + 1;\n        var stack = this.$undoStack;\n        var end = null, start = 0;\n        for (var i = stack.length; i--;) {\n            var delta = stack[i][0];\n            if (delta.id < to && !end)\n                end = i+1;\n            if (delta.id <= from) {\n                start = i + 1;\n                break;\n            }\n        }\n        return stack.slice(start, end);\n    };\n    \n    this.getChangedRanges = function(from, to) {\n        if (to == null) to = this.$rev + 1;\n        \n    };\n    \n    this.getChangedLines = function(from, to) {\n        if (to == null) to = this.$rev + 1;\n        \n    };\n    \n    /**\n     * [Perform an undo operation on the document, reverting the last change.]{: #UndoManager.undo}\n     * @param {Boolean} dontSelect {:dontSelect}\n     *\n     * @returns {Range} The range of the undo.\n     **/\n    this.undo = function(session, dontSelect) {\n        this.lastDeltas = null;\n        var stack = this.$undoStack;\n        \n        if (!rearrangeUndoStack(stack, stack.length))\n            return;\n        \n        if (!session)\n            session = this.$session;\n        \n        if (this.$redoStackBaseRev !== this.$rev && this.$redoStack.length)\n            this.$redoStack = [];\n        \n        this.$fromUndo = true;\n        \n        var deltaSet = stack.pop();\n        var undoSelectionRange = null;\n        if (deltaSet && deltaSet.length) {\n            undoSelectionRange = session.undoChanges(deltaSet, dontSelect);\n            this.$redoStack.push(deltaSet);\n            this.$syncRev();\n        }\n        \n        this.$fromUndo = false;\n\n        return undoSelectionRange;\n    };\n    \n    /**\n     * [Perform a redo operation on the document, reimplementing the last change.]{: #UndoManager.redo}\n     * @param {Boolean} dontSelect {:dontSelect}\n     *\n     **/\n    this.redo = function(session, dontSelect) {\n        this.lastDeltas = null;\n        \n        if (!session)\n            session = this.$session;\n        \n        this.$fromUndo = true;\n        if (this.$redoStackBaseRev != this.$rev) {\n            var diff = this.getDeltas(this.$redoStackBaseRev, this.$rev + 1);\n            rebaseRedoStack(this.$redoStack, diff);\n            this.$redoStackBaseRev = this.$rev;\n            this.$redoStack.forEach(function(x) {\n                x[0].id = ++this.$maxRev;\n            }, this);\n        }\n        var deltaSet = this.$redoStack.pop();\n        var redoSelectionRange = null;\n        \n        if (deltaSet) {\n            redoSelectionRange = session.redoChanges(deltaSet, dontSelect);\n            this.$undoStack.push(deltaSet);\n            this.$syncRev();\n        }\n        this.$fromUndo = false;\n        \n        return redoSelectionRange;\n    };\n    \n    this.$syncRev = function() {\n        var stack = this.$undoStack;\n        var nextDelta = stack[stack.length - 1];\n        var id = nextDelta && nextDelta[0].id || 0;\n        this.$redoStackBaseRev = id;\n        this.$rev = id;\n    };\n\n    /**\n     * Destroys the stack of undo and redo redo operations.\n     **/\n    this.reset = function() {\n        this.lastDeltas = null;\n        this.$lastDelta = null;\n        this.$undoStack = [];\n        this.$redoStack = [];\n        this.$rev = 0;\n        this.mark = 0;\n        this.$redoStackBaseRev = this.$rev;\n        this.selections = [];\n    };\n\n    \n    /**\n     * Returns `true` if there are undo operations left to perform.\n     * @returns {Boolean}\n     **/\n    this.canUndo = function() {\n        return this.$undoStack.length > 0;\n    };\n\n    /**\n     * Returns `true` if there are redo operations left to perform.\n     * @returns {Boolean}\n     **/\n    this.canRedo = function() {\n        return this.$redoStack.length > 0;\n    };\n    \n    /**\n     * Marks the current status clean\n     **/\n    this.bookmark = function(rev) {\n        if (rev == undefined)\n            rev = this.$rev;\n        this.mark = rev;\n    };\n\n    /**\n     * Returns if the current status is clean\n     * @returns {Boolean}\n     **/\n    this.isAtBookmark = function() {\n        return this.$rev === this.mark;\n    };\n    \n    this.toJSON = function() {\n        \n    };\n    \n    this.fromJSON = function() {\n        \n    };\n    \n    this.hasUndo = this.canUndo;\n    this.hasRedo = this.canRedo;\n    this.isClean = this.isAtBookmark;\n    this.markClean = this.bookmark;\n    \n}).call(UndoManager.prototype);\n\nfunction rearrangeUndoStack(stack, pos) {\n    for (var i = pos; i--; ) {\n        var deltaSet = stack[i];\n        if (deltaSet && !deltaSet[0].ignore) {\n            while(i < pos - 1) {\n                var swapped = swapGroups(stack[i], stack[i + 1]);\n                stack[i] = swapped[0];\n                stack[i + 1] = swapped[1];\n                i++;\n            }\n            return true;\n        }\n    }\n}\n\nvar Range = require(\"./range\").Range;\nvar cmp = Range.comparePoints;\nvar comparePoints = Range.comparePoints;\n\nfunction $updateMarkers(delta) {\n    var isInsert = delta.action == \"insert\";\n    var start = delta.start;\n    var end = delta.end;\n    var rowShift = (end.row - start.row) * (isInsert ? 1 : -1);\n    var colShift = (end.column - start.column) * (isInsert ? 1 : -1);\n    if (isInsert) end = start;\n\n    for (var i in this.marks) {\n        var point = this.marks[i];\n        var cmp = comparePoints(point, start);\n        if (cmp < 0) {\n            continue; // delta starts after the range\n        }\n        if (cmp === 0) {\n            if (isInsert) {\n                if (point.bias == 1) {\n                    cmp = 1;\n                }\n                else {\n                    point.bias == -1;\n                    continue;\n                }\n            }\n        }\n        var cmp2 = isInsert ? cmp : comparePoints(point, end);\n        if (cmp2 > 0) {\n            point.row += rowShift;\n            point.column += point.row == end.row ? colShift : 0;\n            continue;\n        }\n        if (!isInsert && cmp2 <= 0) {\n            point.row = start.row;\n            point.column = start.column;\n            if (cmp2 === 0)\n                point.bias = 1;\n        }\n    }\n}\n\n\n\nfunction clonePos(pos) {\n    return {row: pos.row,column: pos.column};\n}\nfunction cloneDelta(d) {\n    return {\n        start: clonePos(d.start),\n        end: clonePos(d.end),\n        action: d.action,\n        lines: d.lines.slice()\n    };\n}\nfunction stringifyDelta(d) {\n    d = d || this;\n    if (Array.isArray(d)) {\n        return d.map(stringifyDelta).join(\"\\n\");\n    }\n    var type = \"\";\n    if (d.action) {\n        type = d.action == \"insert\" ? \"+\" : \"-\";\n        type += \"[\" + d.lines + \"]\";\n    } else if (d.value) {\n        if (Array.isArray(d.value)) {\n            type = d.value.map(stringifyRange).join(\"\\n\");\n        } else {\n            type = stringifyRange(d.value);\n        }\n    }\n    if (d.start) {\n        type += stringifyRange(d);\n    }\n    if (d.id || d.rev) {\n        type += \"\\t(\" + (d.id || d.rev) + \")\";\n    }\n    return type;\n}\nfunction stringifyRange(r) {\n    return r.start.row + \":\" + r.start.column \n        + \"=>\" + r.end.row + \":\" + r.end.column;\n}\n/*\n * i i  d1  d2\n *      |/  |/  d2.s >= d1.e shift(d2, d1, -1)\n *              d2.s <= d1.s shift(d1, d2, +1)\n *       d1.s < d2.s < d1.e // can split\n * \n * i r  d1  d2\n *      |/  |\\  d2.s >= d1.e shift(d2, d1, -1)\n *              d2.e <= d1.s shift(d1, d2, -1)\n *       else // can't swap\n * \n * r i  d1  d2\n *      |\\  |/  d2.s >= d1.s shift(d2, d1, +1)\n *              d2.s <= d1.s shift(d1, d2, +1)\n *       // no else\n * \n * r r  d1  d2\n *      |\\  |\\  d2.s >= d1.s shift(d2, d1, +1)\n *              d2.e <= d1.s shift(d1, d2, -1)\n *       d2.s < d1.s < d2.e // can split\n */\n\nfunction swap(d1, d2) {\n    var i1 = d1.action == \"insert\";\n    var i2 = d2.action == \"insert\";\n    \n    if (i1 && i2) {\n        if (cmp(d2.start, d1.end) >= 0) {\n            shift(d2, d1, -1);\n        } else if (cmp(d2.start, d1.start) <= 0) {\n            shift(d1, d2, +1);\n        } else {\n            return null;\n        }\n    } else if (i1 && !i2) {\n        if (cmp(d2.start, d1.end) >= 0) {\n            shift(d2, d1, -1);\n        } else if (cmp(d2.end, d1.start) <= 0) {\n            shift(d1, d2, -1);\n        } else {\n            return null;\n        }\n    } else if (!i1 && i2) {\n        if (cmp(d2.start, d1.start) >= 0) {\n            shift(d2, d1, +1);\n        } else if (cmp(d2.start, d1.start) <= 0) {\n            shift(d1, d2, +1);\n        } else {\n            return null;\n        }\n    } else if (!i1 && !i2) {\n        if (cmp(d2.start, d1.start) >= 0) {\n            shift(d2, d1, +1);\n        } else if (cmp(d2.end, d1.start) <= 0) {\n            shift(d1, d2, -1);\n        } else {\n            return null;\n        }\n    }\n    return [d2, d1];\n}\nfunction swapGroups(ds1, ds2) {\n    for (var i = ds1.length; i--; ) {\n        for (var j = 0; j < ds2.length; j++) {\n            if (!swap(ds1[i], ds2[j])) {\n                // rollback, we have to undo ds2 first\n                while (i < ds1.length) {\n                    while (j--) {\n                        swap(ds2[j], ds1[i]);\n                    }\n                    j = ds2.length;\n                    i++;\n                }                \n                return [ds1, ds2];\n            }\n        }\n    }\n    ds1.selectionBefore = ds2.selectionBefore = \n    ds1.selectionAfter = ds2.selectionAfter = null;\n    return [ds2, ds1];\n}\n\n/*\n      d2          xform(d1, c1) = [d2, c2]\n    o<---o        xform(c1, d1) = [c2, d2]\n c2 |    | d1     \n    o<---o\n      c1\n*/\nfunction xform(d1, c1) {\n    var i1 = d1.action == \"insert\";\n    var i2 = c1.action == \"insert\";\n    \n    if (i1 && i2) {\n        if (cmp(d1.start, c1.start) < 0) {\n            shift(c1, d1, 1);\n        } else {\n            shift(d1, c1, 1);\n        }\n    } else if (i1 && !i2) {\n        if (cmp(d1.start, c1.end) >= 0) {\n            shift(d1, c1, -1);\n        } else if (cmp(d1.start, c1.start) <= 0) {\n            shift(c1, d1, +1);\n        } else {\n            shift(d1, Range.fromPoints(c1.start, d1.start), -1);\n            shift(c1, d1, +1);\n        }\n    } else if (!i1 && i2) {\n        if (cmp(c1.start, d1.end) >= 0) {\n            shift(c1, d1, -1);\n        } else if (cmp(c1.start, d1.start) <= 0) {\n            shift(d1, c1, +1);\n        } else {\n            shift(c1, Range.fromPoints(d1.start, c1.start), -1);\n            shift(d1, c1, +1);\n        }\n    } else if (!i1 && !i2) {\n        if (cmp(c1.start, d1.end) >= 0) {\n            shift(c1, d1, -1);\n        } else if (cmp(c1.end, d1.start) <= 0) {\n            shift(d1, c1, -1);\n        } else {\n            var before, after;\n            if (cmp(d1.start, c1.start) < 0) {\n                before = d1;\n                d1 = splitDelta(d1, c1.start);\n            }\n            if (cmp(d1.end, c1.end) > 0) {\n                after = splitDelta(d1, c1.end);\n            }\n\n            shiftPos(c1.end, d1.start, d1.end, -1);\n            if (after && !before) {\n                d1.lines = after.lines;\n                d1.start = after.start;\n                d1.end = after.end;\n                after = d1;\n            }\n\n            return [c1, before, after].filter(Boolean);\n        }\n    }\n    return [c1, d1];\n}\n    \nfunction shift(d1, d2, dir) {\n    shiftPos(d1.start, d2.start, d2.end, dir);\n    shiftPos(d1.end, d2.start, d2.end, dir);\n}\nfunction shiftPos(pos, start, end, dir) {\n    if (pos.row == (dir == 1 ? start : end).row) {\n        pos.column += dir * (end.column - start.column);\n    }\n    pos.row += dir * (end.row - start.row);\n}\nfunction splitDelta(c, pos) {\n    var lines = c.lines;\n    var end = c.end;\n    c.end = clonePos(pos);    \n    var rowsBefore = c.end.row - c.start.row;\n    var otherLines = lines.splice(rowsBefore, lines.length);\n    \n    var col = rowsBefore ? pos.column : pos.column - c.start.column;\n    lines.push(otherLines[0].substring(0, col));\n    otherLines[0] = otherLines[0].substr(col)   ; \n    var rest = {\n        start: clonePos(pos),\n        end: end,\n        lines: otherLines,\n        action: c.action\n    };\n    return rest;\n}\n\nfunction moveDeltasByOne(redoStack, d) {\n    d = cloneDelta(d);\n    for (var j = redoStack.length; j--;) {\n        var deltaSet = redoStack[j];\n        for (var i = deltaSet.length; i--> 0;) {\n            var x = deltaSet[i];\n            var xformed = xform(x, d);\n            d = xformed[0];\n            if (xformed.length != 2) {\n                if (xformed[2]) {\n                    redoStack.splice(i + 1, 1, xformed[1], xformed[2]);\n                    i++;\n                } else if (!xformed[1]) {\n                    redoStack.splice(i, 1);\n                    i--;\n                }\n            }\n        }\n    }\n    return redoStack;\n}\nfunction rebaseRedoStack(redoStack, deltaSets) {\n    for (var i = 0; i < deltaSets.length; i++) {\n        var deltas = deltaSets[i];\n        for (var j = 0; j < deltas.length; j++) {\n            moveDeltasByOne(redoStack, deltas[j]);\n        }\n    }\n}\n\nexports.UndoManager = UndoManager;\n\n});\n"
  },
  {
    "path": "lib/ace/undomanager_test.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\nif (typeof process !== \"undefined\") {\n    require(\"amd-loader\");\n    require(\"./test/mockdom\");\n}\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nrequire(\"./multi_select\");\nvar assert = require(\"./test/assertions\");\nvar Range = require(\"./range\").Range;\nvar Editor = require(\"./editor\").Editor;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar MockRenderer = require(\"./test/mockrenderer\").MockRenderer;\nvar UndoManager = require(\"./undomanager\").UndoManager;\n\nvar editor;\n\n\nmodule.exports = {\n\n    name: \"ACE undoManager.js\",\n\n    \"test: reabsing\": function() {\n        var session = new EditSession(\"\");\n        var editor = new Editor(new MockRenderer(), session);\n        var undoManager = new UndoManager();\n        session.setUndoManager(undoManager);\n        \n        session.setValue(\"012345-012345-012345\");\n        session.insert({row: 0, column: 0}, \"xx\");\n        session.markUndoGroup();\n        session.remove(new Range(0, 10, 0, 15));\n        session.markUndoGroup();\n        session.insert({row: 0, column: 5}, \"yy\");\n        session.markUndoGroup();\n        editor.undo();\n        editor.undo();\n        var rev = session.getUndoManager().startNewGroup();\n        session.insert({row: 0, column: 5}, \"z\\nz\");\n        session.getUndoManager().markIgnored(rev);\n        // editor.undo()\n        editor.redo();\n        editor.redo();\n        var val1 = editor.getValue();\n        editor.undo();\n        editor.undo();\n        editor.undo();\n        \n        editor.redo();\n        editor.redo();\n        editor.redo();\n        var val2 = editor.getValue();\n        assert.equal(val1, val2);\n    },\n    \"test: conflicting deletes\": function() {\n        var session = new EditSession(\"\");\n        var editor = new Editor(new MockRenderer(), session);\n        var undoManager = new UndoManager();\n        session.setUndoManager(undoManager);\n        \n        session.setValue(\"012345\\nabcdefg\\nxyz\");\n        session.remove(new Range(0, 2, 0, 4));\n        assert.equal(session.getLine(0), \"0145\");\n        session.markUndoGroup();\n        editor.undo();\n        session.remove(new Range(0, 1, 0, 5));\n        assert.equal(session.getLine(0), \"05\");\n        session.markUndoGroup();\n        editor.redo();\n        assert.equal(session.getLine(0), \"05\");\n        editor.undo();\n        assert.equal(session.getLine(0), \"012345\");\n    }\n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main) {\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n}\n"
  },
  {
    "path": "lib/ace/unicode.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\n// generated by tool/unicode.js\nvar wordChars = [48,9,8,25,5,0,2,25,48,0,11,0,5,0,6,22,2,30,2,457,5,11,15,4,8,0,2,0,18,116,2,1,3,3,9,0,2,2,2,0,2,19,2,82,2,138,2,4,3,155,12,37,3,0,8,38,10,44,2,0,2,1,2,1,2,0,9,26,6,2,30,10,7,61,2,9,5,101,2,7,3,9,2,18,3,0,17,58,3,100,15,53,5,0,6,45,211,57,3,18,2,5,3,11,3,9,2,1,7,6,2,2,2,7,3,1,3,21,2,6,2,0,4,3,3,8,3,1,3,3,9,0,5,1,2,4,3,11,16,2,2,5,5,1,3,21,2,6,2,1,2,1,2,1,3,0,2,4,5,1,3,2,4,0,8,3,2,0,8,15,12,2,2,8,2,2,2,21,2,6,2,1,2,4,3,9,2,2,2,2,3,0,16,3,3,9,18,2,2,7,3,1,3,21,2,6,2,1,2,4,3,8,3,1,3,2,9,1,5,1,2,4,3,9,2,0,17,1,2,5,4,2,2,3,4,1,2,0,2,1,4,1,4,2,4,11,5,4,4,2,2,3,3,0,7,0,15,9,18,2,2,7,2,2,2,22,2,9,2,4,4,7,2,2,2,3,8,1,2,1,7,3,3,9,19,1,2,7,2,2,2,22,2,9,2,4,3,8,2,2,2,3,8,1,8,0,2,3,3,9,19,1,2,7,2,2,2,22,2,15,4,7,2,2,2,3,10,0,9,3,3,9,11,5,3,1,2,17,4,23,2,8,2,0,3,6,4,0,5,5,2,0,2,7,19,1,14,57,6,14,2,9,40,1,2,0,3,1,2,0,3,0,7,3,2,6,2,2,2,0,2,0,3,1,2,12,2,2,3,4,2,0,2,5,3,9,3,1,35,0,24,1,7,9,12,0,2,0,2,0,5,9,2,35,5,19,2,5,5,7,2,35,10,0,58,73,7,77,3,37,11,42,2,0,4,328,2,3,3,6,2,0,2,3,3,40,2,3,3,32,2,3,3,6,2,0,2,3,3,14,2,56,2,3,3,66,5,0,33,15,17,84,13,619,3,16,2,25,6,74,22,12,2,6,12,20,12,19,13,12,2,2,2,1,13,51,3,29,4,0,5,1,3,9,34,2,3,9,7,87,9,42,6,69,11,28,4,11,5,11,11,39,3,4,12,43,5,25,7,10,38,27,5,62,2,28,3,10,7,9,14,0,89,75,5,9,18,8,13,42,4,11,71,55,9,9,4,48,83,2,2,30,14,230,23,280,3,5,3,37,3,5,3,7,2,0,2,0,2,0,2,30,3,52,2,6,2,0,4,2,2,6,4,3,3,5,5,12,6,2,2,6,67,1,20,0,29,0,14,0,17,4,60,12,5,0,4,11,18,0,5,0,3,9,2,0,4,4,7,0,2,0,2,0,2,3,2,10,3,3,6,4,5,0,53,1,2684,46,2,46,2,132,7,6,15,37,11,53,10,0,17,22,10,6,2,6,2,6,2,6,2,6,2,6,2,6,2,6,2,31,48,0,470,1,36,5,2,4,6,1,5,85,3,1,3,2,2,89,2,3,6,40,4,93,18,23,57,15,513,6581,75,20939,53,1164,68,45,3,268,4,27,21,31,3,13,13,1,2,24,9,69,11,1,38,8,3,102,3,1,111,44,25,51,13,68,12,9,7,23,4,0,5,45,3,35,13,28,4,64,15,10,39,54,10,13,3,9,7,22,4,1,5,66,25,2,227,42,2,1,3,9,7,11171,13,22,5,48,8453,301,3,61,3,105,39,6,13,4,6,11,2,12,2,4,2,0,2,1,2,1,2,107,34,362,19,63,3,53,41,11,5,15,17,6,13,1,25,2,33,4,2,134,20,9,8,25,5,0,2,25,12,88,4,5,3,5,3,5,3,2];\n\nvar code = 0;\nvar str = [];\nfor (var i = 0; i < wordChars.length; i += 2) {\n    str.push(code += wordChars[i]);\n    if (wordChars[i + 1])\n        str.push(45, code += wordChars[i + 1]);\n}\n\nexports.wordChars = String.fromCharCode.apply(null, str);\n\n});\n"
  },
  {
    "path": "lib/ace/virtual_renderer.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar config = require(\"./config\");\nvar useragent = require(\"./lib/useragent\");\nvar GutterLayer = require(\"./layer/gutter\").Gutter;\nvar MarkerLayer = require(\"./layer/marker\").Marker;\nvar TextLayer = require(\"./layer/text\").Text;\nvar CursorLayer = require(\"./layer/cursor\").Cursor;\nvar HScrollBar = require(\"./scrollbar\").HScrollBar;\nvar VScrollBar = require(\"./scrollbar\").VScrollBar;\nvar RenderLoop = require(\"./renderloop\").RenderLoop;\nvar FontMetrics = require(\"./layer/font_metrics\").FontMetrics;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar editorCss = require(\"./requirejs/text!./css/editor.css\");\n\ndom.importCssString(editorCss, \"ace_editor.css\");\n\n/**\n * The class that is responsible for drawing everything you see on the screen!\n * @related editor.renderer \n * @class VirtualRenderer\n **/\n\n/**\n * Constructs a new `VirtualRenderer` within the `container` specified, applying the given `theme`.\n * @param {DOMElement} container The root element of the editor\n * @param {String} theme The starting theme\n *\n * @constructor\n **/\n\nvar VirtualRenderer = function(container, theme) {\n    var _self = this;\n\n    this.container = container || dom.createElement(\"div\");\n\n    // TODO: this breaks rendering in Cloud9 with multiple ace instances\n    // // Imports CSS once per DOM document ('ace_editor' serves as an identifier).\n    // dom.importCssString(editorCss, \"ace_editor\", container.ownerDocument);\n\n    // in IE <= 9 the native cursor always shines through\n    this.$keepTextAreaAtCursor = !useragent.isOldIE;\n\n    dom.addCssClass(this.container, \"ace_editor\");\n\n    this.setTheme(theme);\n\n    this.$gutter = dom.createElement(\"div\");\n    this.$gutter.className = \"ace_gutter\";\n    this.container.appendChild(this.$gutter);\n    this.$gutter.setAttribute(\"aria-hidden\", true);\n\n    this.scroller = dom.createElement(\"div\");\n    this.scroller.className = \"ace_scroller\";\n    this.container.appendChild(this.scroller);\n\n    this.content = dom.createElement(\"div\");\n    this.content.className = \"ace_content\";\n    this.scroller.appendChild(this.content);\n\n    this.$gutterLayer = new GutterLayer(this.$gutter);\n    this.$gutterLayer.on(\"changeGutterWidth\", this.onGutterResize.bind(this));\n\n    this.$markerBack = new MarkerLayer(this.content);\n\n    var textLayer = this.$textLayer = new TextLayer(this.content);\n    this.canvas = textLayer.element;\n\n    this.$markerFront = new MarkerLayer(this.content);\n\n    this.$cursorLayer = new CursorLayer(this.content);\n\n    // Indicates whether the horizontal scrollbar is visible\n    this.$horizScroll = false;\n    this.$vScroll = false;\n\n    this.scrollBar = \n    this.scrollBarV = new VScrollBar(this.container, this);\n    this.scrollBarH = new HScrollBar(this.container, this);\n    this.scrollBarV.addEventListener(\"scroll\", function(e) {\n        if (!_self.$scrollAnimation)\n            _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n    });\n    this.scrollBarH.addEventListener(\"scroll\", function(e) {\n        if (!_self.$scrollAnimation)\n            _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n    });\n\n    this.scrollTop = 0;\n    this.scrollLeft = 0;\n\n    this.cursorPos = {\n        row : 0,\n        column : 0\n    };\n\n    this.$fontMetrics = new FontMetrics(this.container);\n    this.$textLayer.$setFontMetrics(this.$fontMetrics);\n    this.$textLayer.addEventListener(\"changeCharacterSize\", function(e) {\n        _self.updateCharacterSize();\n        _self.onResize(true, _self.gutterWidth, _self.$size.width, _self.$size.height);\n        _self._signal(\"changeCharacterSize\", e);\n    });\n\n    this.$size = {\n        width: 0,\n        height: 0,\n        scrollerHeight: 0,\n        scrollerWidth: 0,\n        $dirty: true\n    };\n\n    this.layerConfig = {\n        width : 1,\n        padding : 0,\n        firstRow : 0,\n        firstRowScreen: 0,\n        lastRow : 0,\n        lineHeight : 0,\n        characterWidth : 0,\n        minHeight : 1,\n        maxHeight : 1,\n        offset : 0,\n        height : 1,\n        gutterOffset: 1\n    };\n    \n    this.scrollMargin = {\n        left: 0,\n        right: 0,\n        top: 0,\n        bottom: 0,\n        v: 0,\n        h: 0\n    };\n\n    this.$loop = new RenderLoop(\n        this.$renderChanges.bind(this),\n        this.container.ownerDocument.defaultView\n    );\n    this.$loop.schedule(this.CHANGE_FULL);\n\n    this.updateCharacterSize();\n    this.setPadding(4);\n    config.resetOptions(this);\n    config._emit(\"renderer\", this);\n};\n\n(function() {\n\n    this.CHANGE_CURSOR = 1;\n    this.CHANGE_MARKER = 2;\n    this.CHANGE_GUTTER = 4;\n    this.CHANGE_SCROLL = 8;\n    this.CHANGE_LINES = 16;\n    this.CHANGE_TEXT = 32;\n    this.CHANGE_SIZE = 64;\n    this.CHANGE_MARKER_BACK = 128;\n    this.CHANGE_MARKER_FRONT = 256;\n    this.CHANGE_FULL = 512;\n    this.CHANGE_H_SCROLL = 1024;\n\n    // this.$logChanges = function(changes) {\n    //     var a = \"\"\n    //     if (changes & this.CHANGE_CURSOR) a += \" cursor\";\n    //     if (changes & this.CHANGE_MARKER) a += \" marker\";\n    //     if (changes & this.CHANGE_GUTTER) a += \" gutter\";\n    //     if (changes & this.CHANGE_SCROLL) a += \" scroll\";\n    //     if (changes & this.CHANGE_LINES) a += \" lines\";\n    //     if (changes & this.CHANGE_TEXT) a += \" text\";\n    //     if (changes & this.CHANGE_SIZE) a += \" size\";\n    //     if (changes & this.CHANGE_MARKER_BACK) a += \" marker_back\";\n    //     if (changes & this.CHANGE_MARKER_FRONT) a += \" marker_front\";\n    //     if (changes & this.CHANGE_FULL) a += \" full\";\n    //     if (changes & this.CHANGE_H_SCROLL) a += \" h_scroll\";\n    //     console.log(a.trim())\n    // };\n\n    oop.implement(this, EventEmitter);\n\n    this.updateCharacterSize = function() {\n        if (this.$textLayer.allowBoldFonts != this.$allowBoldFonts) {\n            this.$allowBoldFonts = this.$textLayer.allowBoldFonts;\n            this.setStyle(\"ace_nobold\", !this.$allowBoldFonts);\n        }\n\n        this.layerConfig.characterWidth =\n        this.characterWidth = this.$textLayer.getCharacterWidth();\n        this.layerConfig.lineHeight =\n        this.lineHeight = this.$textLayer.getLineHeight();\n        this.$updatePrintMargin();\n    };\n\n    /**\n     *\n     * Associates the renderer with an [[EditSession `EditSession`]].\n     **/\n    this.setSession = function(session) {\n        if (this.session)\n            this.session.doc.off(\"changeNewLineMode\", this.onChangeNewLineMode);\n            \n        this.session = session;\n        if (session && this.scrollMargin.top && session.getScrollTop() <= 0)\n            session.setScrollTop(-this.scrollMargin.top);\n\n        this.$cursorLayer.setSession(session);\n        this.$markerBack.setSession(session);\n        this.$markerFront.setSession(session);\n        this.$gutterLayer.setSession(session);\n        this.$textLayer.setSession(session);\n        if (!session)\n            return;\n        \n        this.$loop.schedule(this.CHANGE_FULL);\n        this.session.$setFontMetrics(this.$fontMetrics);\n        this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null;\n        \n        this.onChangeNewLineMode = this.onChangeNewLineMode.bind(this);\n        this.onChangeNewLineMode();\n        this.session.doc.on(\"changeNewLineMode\", this.onChangeNewLineMode);\n    };\n\n    /**\n     * Triggers a partial update of the text, from the range given by the two parameters.\n     * @param {Number} firstRow The first row to update\n     * @param {Number} lastRow The last row to update\n     *\n     **/\n    this.updateLines = function(firstRow, lastRow, force) {\n        if (lastRow === undefined)\n            lastRow = Infinity;\n\n        if (!this.$changedLines) {\n            this.$changedLines = {\n                firstRow: firstRow,\n                lastRow: lastRow\n            };\n        }\n        else {\n            if (this.$changedLines.firstRow > firstRow)\n                this.$changedLines.firstRow = firstRow;\n\n            if (this.$changedLines.lastRow < lastRow)\n                this.$changedLines.lastRow = lastRow;\n        }\n\n        // If the change happened offscreen above us then it's possible\n        // that a new line wrap will affect the position of the lines on our\n        // screen so they need redrawn.\n        // TODO: better solution is to not change scroll position when text is changed outside of visible area\n        if (this.$changedLines.lastRow < this.layerConfig.firstRow) {\n            if (force)\n                this.$changedLines.lastRow = this.layerConfig.lastRow;\n            else\n                return;\n        }\n        if (this.$changedLines.firstRow > this.layerConfig.lastRow)\n            return;\n        this.$loop.schedule(this.CHANGE_LINES);\n    };\n\n    this.onChangeNewLineMode = function() {\n        this.$loop.schedule(this.CHANGE_TEXT);\n        this.$textLayer.$updateEolChar();\n        this.session.$bidiHandler.setEolChar(this.$textLayer.EOL_CHAR);\n    };\n    \n    this.onChangeTabSize = function() {\n        this.$loop.schedule(this.CHANGE_TEXT | this.CHANGE_MARKER);\n        this.$textLayer.onChangeTabSize();\n    };\n\n    /**\n     * Triggers a full update of the text, for all the rows.\n     **/\n    this.updateText = function() {\n        this.$loop.schedule(this.CHANGE_TEXT);\n    };\n\n    /**\n     * Triggers a full update of all the layers, for all the rows.\n     * @param {Boolean} force If `true`, forces the changes through\n     *\n     **/\n    this.updateFull = function(force) {\n        if (force)\n            this.$renderChanges(this.CHANGE_FULL, true);\n        else\n            this.$loop.schedule(this.CHANGE_FULL);\n    };\n\n    /**\n     * Updates the font size.\n     **/\n    this.updateFontSize = function() {\n        this.$textLayer.checkForSizeChanges();\n    };\n\n    this.$changes = 0;\n    this.$updateSizeAsync = function() {\n        if (this.$loop.pending)\n            this.$size.$dirty = true;\n        else\n            this.onResize();\n    };\n    /**\n     * [Triggers a resize of the editor.]{: #VirtualRenderer.onResize}\n     * @param {Boolean} force If `true`, recomputes the size, even if the height and width haven't changed\n     * @param {Number} gutterWidth The width of the gutter in pixels\n     * @param {Number} width The width of the editor in pixels\n     * @param {Number} height The hiehgt of the editor, in pixels\n     *\n     **/\n    this.onResize = function(force, gutterWidth, width, height) {\n        if (this.resizing > 2)\n            return;\n        else if (this.resizing > 0)\n            this.resizing++;\n        else\n            this.resizing = force ? 1 : 0;\n        // `|| el.scrollHeight` is required for outosizing editors on ie\n        // where elements with clientHeight = 0 alsoe have clientWidth = 0\n        var el = this.container;\n        if (!height)\n            height = el.clientHeight || el.scrollHeight;\n        if (!width)\n            width = el.clientWidth || el.scrollWidth;\n        var changes = this.$updateCachedSize(force, gutterWidth, width, height);\n\n        \n        if (!this.$size.scrollerHeight || (!width && !height))\n            return this.resizing = 0;\n\n        if (force)\n            this.$gutterLayer.$padding = null;\n\n        if (force)\n            this.$renderChanges(changes | this.$changes, true);\n        else\n            this.$loop.schedule(changes | this.$changes);\n\n        if (this.resizing)\n            this.resizing = 0;\n        // reset cached values on scrollbars, needs to be removed when switching to non-native scrollbars\n        // see https://github.com/ajaxorg/ace/issues/2195\n        this.scrollBarV.scrollLeft = this.scrollBarV.scrollTop = null;\n    };\n    \n    this.$updateCachedSize = function(force, gutterWidth, width, height) {\n        height -= (this.$extraHeight || 0);\n        var changes = 0;\n        var size = this.$size;\n        var oldSize = {\n            width: size.width,\n            height: size.height,\n            scrollerHeight: size.scrollerHeight,\n            scrollerWidth: size.scrollerWidth\n        };\n        if (height && (force || size.height != height)) {\n            size.height = height;\n            changes |= this.CHANGE_SIZE;\n\n            size.scrollerHeight = size.height;\n            if (this.$horizScroll)\n                size.scrollerHeight -= this.scrollBarH.getHeight();\n                \n            // this.scrollBarV.setHeight(size.scrollerHeight);\n            this.scrollBarV.element.style.bottom = this.scrollBarH.getHeight() + \"px\";\n\n            changes = changes | this.CHANGE_SCROLL;\n        }\n\n        if (width && (force || size.width != width)) {\n            changes |= this.CHANGE_SIZE;\n            size.width = width;\n            \n            if (gutterWidth == null)\n                gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;\n            \n            this.gutterWidth = gutterWidth;\n            \n            this.scrollBarH.element.style.left = \n            this.scroller.style.left = gutterWidth + \"px\";\n            size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBarV.getWidth());           \n            \n            this.scrollBarH.element.style.right = \n            this.scroller.style.right = this.scrollBarV.getWidth() + \"px\";\n            this.scroller.style.bottom = this.scrollBarH.getHeight() + \"px\";\n                \n            // this.scrollBarH.element.style.setWidth(size.scrollerWidth);\n\n            if (this.session && this.session.getUseWrapMode() && this.adjustWrapLimit() || force)\n                changes |= this.CHANGE_FULL;\n        }\n        \n        size.$dirty = !width || !height;\n\n        if (changes)\n            this._signal(\"resize\", oldSize);\n\n        return changes;\n    };\n\n    this.onGutterResize = function() {\n        var gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;\n        if (gutterWidth != this.gutterWidth)\n            this.$changes |= this.$updateCachedSize(true, gutterWidth, this.$size.width, this.$size.height);\n\n        if (this.session.getUseWrapMode() && this.adjustWrapLimit()) {\n            this.$loop.schedule(this.CHANGE_FULL);\n        } else if (this.$size.$dirty) {\n            this.$loop.schedule(this.CHANGE_FULL);\n        } else {\n            this.$computeLayerConfig();\n            this.$loop.schedule(this.CHANGE_MARKER);\n        }\n    };\n\n    /**\n     * Adjusts the wrap limit, which is the number of characters that can fit within the width of the edit area on screen.\n     **/\n    this.adjustWrapLimit = function() {\n        var availableWidth = this.$size.scrollerWidth - this.$padding * 2;\n        var limit = Math.floor(availableWidth / this.characterWidth);\n        return this.session.adjustWrapLimit(limit, this.$showPrintMargin && this.$printMarginColumn);\n    };\n\n    /**\n     * Identifies whether you want to have an animated scroll or not.\n     * @param {Boolean} shouldAnimate Set to `true` to show animated scrolls\n     *\n     **/\n    this.setAnimatedScroll = function(shouldAnimate){\n        this.setOption(\"animatedScroll\", shouldAnimate);\n    };\n\n    /**\n     * Returns whether an animated scroll happens or not.\n     * @returns {Boolean}\n     **/\n    this.getAnimatedScroll = function() {\n        return this.$animatedScroll;\n    };\n\n    /**\n     * Identifies whether you want to show invisible characters or not.\n     * @param {Boolean} showInvisibles Set to `true` to show invisibles\n     *\n     **/\n    this.setShowInvisibles = function(showInvisibles) {\n        this.setOption(\"showInvisibles\", showInvisibles);\n        this.session.$bidiHandler.setShowInvisibles(showInvisibles);\n    };\n\n    /**\n     * Returns whether invisible characters are being shown or not.\n     * @returns {Boolean}\n     **/\n    this.getShowInvisibles = function() {\n        return this.getOption(\"showInvisibles\");\n    };\n    this.getDisplayIndentGuides = function() {\n        return this.getOption(\"displayIndentGuides\");\n    };\n\n    this.setDisplayIndentGuides = function(display) {\n        this.setOption(\"displayIndentGuides\", display);\n    };\n\n    /**\n     * Identifies whether you want to show the print margin or not.\n     * @param {Boolean} showPrintMargin Set to `true` to show the print margin\n     *\n     **/\n    this.setShowPrintMargin = function(showPrintMargin) {\n        this.setOption(\"showPrintMargin\", showPrintMargin);\n    };\n\n    /**\n     * Returns whether the print margin is being shown or not.\n     * @returns {Boolean}\n     **/\n    this.getShowPrintMargin = function() {\n        return this.getOption(\"showPrintMargin\");\n    };\n    /**\n     * Identifies whether you want to show the print margin column or not.\n     * @param {Boolean} showPrintMargin Set to `true` to show the print margin column\n     *\n     **/\n    this.setPrintMarginColumn = function(showPrintMargin) {\n        this.setOption(\"printMarginColumn\", showPrintMargin);\n    };\n\n    /**\n     * Returns whether the print margin column is being shown or not.\n     * @returns {Boolean}\n     **/\n    this.getPrintMarginColumn = function() {\n        return this.getOption(\"printMarginColumn\");\n    };\n\n    /**\n     * Returns `true` if the gutter is being shown.\n     * @returns {Boolean}\n     **/\n    this.getShowGutter = function(){\n        return this.getOption(\"showGutter\");\n    };\n\n    /**\n     * Identifies whether you want to show the gutter or not.\n     * @param {Boolean} show Set to `true` to show the gutter\n     *\n     **/\n    this.setShowGutter = function(show){\n        return this.setOption(\"showGutter\", show);\n    };\n\n    this.getFadeFoldWidgets = function(){\n        return this.getOption(\"fadeFoldWidgets\");\n    };\n\n    this.setFadeFoldWidgets = function(show) {\n        this.setOption(\"fadeFoldWidgets\", show);\n    };\n\n    this.setHighlightGutterLine = function(shouldHighlight) {\n        this.setOption(\"highlightGutterLine\", shouldHighlight);\n    };\n\n    this.getHighlightGutterLine = function() {\n        return this.getOption(\"highlightGutterLine\");\n    };\n\n    this.$updateGutterLineHighlight = function() {\n        var pos = this.$cursorLayer.$pixelPos;\n        var height = this.layerConfig.lineHeight;\n        if (this.session.getUseWrapMode()) {\n            var cursor = this.session.selection.getCursor();\n            cursor.column = 0;\n            pos = this.$cursorLayer.getPixelPosition(cursor, true);\n            height *= this.session.getRowLength(cursor.row);\n        }\n        this.$gutterLineHighlight.style.top = pos.top - this.layerConfig.offset + \"px\";\n        this.$gutterLineHighlight.style.height = height + \"px\";\n    };\n\n    this.$updatePrintMargin = function() {\n        if (!this.$showPrintMargin && !this.$printMarginEl)\n            return;\n\n        if (!this.$printMarginEl) {\n            var containerEl = dom.createElement(\"div\");\n            containerEl.className = \"ace_layer ace_print-margin-layer\";\n            this.$printMarginEl = dom.createElement(\"div\");\n            this.$printMarginEl.className = \"ace_print-margin\";\n            containerEl.appendChild(this.$printMarginEl);\n            this.content.insertBefore(containerEl, this.content.firstChild);\n        }\n\n        var style = this.$printMarginEl.style;\n        style.left = ((this.characterWidth * this.$printMarginColumn) + this.$padding) + \"px\";\n        style.visibility = this.$showPrintMargin ? \"visible\" : \"hidden\";\n        \n        if (this.session && this.session.$wrap == -1)\n            this.adjustWrapLimit();\n    };\n\n    /**\n     *\n     * Returns the root element containing this renderer.\n     * @returns {DOMElement}\n     **/\n    this.getContainerElement = function() {\n        return this.container;\n    };\n\n    /**\n     *\n     * Returns the element that the mouse events are attached to\n     * @returns {DOMElement}\n     **/\n    this.getMouseEventTarget = function() {\n        return this.scroller;\n    };\n\n    /**\n     *\n     * Returns the element to which the hidden text area is added.\n     * @returns {DOMElement}\n     **/\n    this.getTextAreaContainer = function() {\n        return this.container;\n    };\n\n    // move text input over the cursor\n    // this is required for iOS and IME\n    this.$moveTextAreaToCursor = function() {\n        if (!this.$keepTextAreaAtCursor)\n            return;\n        var config = this.layerConfig;\n        var posTop = this.$cursorLayer.$pixelPos.top;\n        var posLeft = this.$cursorLayer.$pixelPos.left;\n        posTop -= config.offset;\n\n        var style = this.textarea.style;\n        var h = this.lineHeight;\n        if (posTop < 0 || posTop > config.height - h) {\n            style.top = style.left = \"0\";\n            return;\n        }\n\n        var w = this.characterWidth;\n        if (this.$composition) {\n            var val = this.textarea.value.replace(/^\\x01+/, \"\");\n            w *= (this.session.$getStringScreenWidth(val)[0]+2);\n            h += 2;\n        }\n        posLeft -= this.scrollLeft;\n        if (posLeft > this.$size.scrollerWidth - w)\n            posLeft = this.$size.scrollerWidth - w;\n\n        posLeft += this.gutterWidth;\n        style.height = h + \"px\";\n        style.width = w + \"px\";\n        style.left = Math.min(posLeft, this.$size.scrollerWidth - w) + \"px\";\n        style.top = Math.min(posTop, this.$size.height - h) + \"px\";\n    };\n\n    /**\n     * [Returns the index of the first visible row.]{: #VirtualRenderer.getFirstVisibleRow}\n     * @returns {Number}\n     **/\n    this.getFirstVisibleRow = function() {\n        return this.layerConfig.firstRow;\n    };\n\n    /**\n     *\n     * Returns the index of the first fully visible row. \"Fully\" here means that the characters in the row are not truncated; that the top and the bottom of the row are on the screen.\n     * @returns {Number}\n     **/\n    this.getFirstFullyVisibleRow = function() {\n        return this.layerConfig.firstRow + (this.layerConfig.offset === 0 ? 0 : 1);\n    };\n\n    /**\n     *\n     * Returns the index of the last fully visible row. \"Fully\" here means that the characters in the row are not truncated; that the top and the bottom of the row are on the screen.\n     * @returns {Number}\n     **/\n    this.getLastFullyVisibleRow = function() {\n        var config = this.layerConfig;\n        var lastRow = config.lastRow;\n        var top = this.session.documentToScreenRow(lastRow, 0) * config.lineHeight;\n        if (top - this.session.getScrollTop() > config.height - config.lineHeight)\n            return lastRow - 1;\n        return lastRow;\n    };\n\n    /**\n     *\n     * [Returns the index of the last visible row.]{: #VirtualRenderer.getLastVisibleRow}\n     * @returns {Number}\n     **/\n    this.getLastVisibleRow = function() {\n        return this.layerConfig.lastRow;\n    };\n\n    this.$padding = null;\n\n    /**\n     * Sets the padding for all the layers.\n     * @param {Number} padding A new padding value (in pixels)\n     *\n     **/\n    this.setPadding = function(padding) {\n        this.$padding = padding;\n        this.$textLayer.setPadding(padding);\n        this.$cursorLayer.setPadding(padding);\n        this.$markerFront.setPadding(padding);\n        this.$markerBack.setPadding(padding);\n        this.$loop.schedule(this.CHANGE_FULL);\n        this.$updatePrintMargin();\n    };\n    \n    this.setScrollMargin = function(top, bottom, left, right) {\n        var sm = this.scrollMargin;\n        sm.top = top|0;\n        sm.bottom = bottom|0;\n        sm.right = right|0;\n        sm.left = left|0;\n        sm.v = sm.top + sm.bottom;\n        sm.h = sm.left + sm.right;\n        if (sm.top && this.scrollTop <= 0 && this.session)\n            this.session.setScrollTop(-sm.top);\n        this.updateFull();\n    };\n\n    /**\n     * Returns whether the horizontal scrollbar is set to be always visible.\n     * @returns {Boolean}\n     **/\n    this.getHScrollBarAlwaysVisible = function() {\n        return this.$hScrollBarAlwaysVisible;\n    };\n\n    /**\n     * Identifies whether you want to show the horizontal scrollbar or not.\n     * @param {Boolean} alwaysVisible Set to `true` to make the horizontal scroll bar visible\n     **/\n    this.setHScrollBarAlwaysVisible = function(alwaysVisible) {\n        this.setOption(\"hScrollBarAlwaysVisible\", alwaysVisible);\n    };\n    /**\n     * Returns whether the horizontal scrollbar is set to be always visible.\n     * @returns {Boolean}\n     **/\n    this.getVScrollBarAlwaysVisible = function() {\n        return this.$vScrollBarAlwaysVisible;\n    };\n\n    /**\n     * Identifies whether you want to show the horizontal scrollbar or not.\n     * @param {Boolean} alwaysVisible Set to `true` to make the horizontal scroll bar visible\n     **/\n    this.setVScrollBarAlwaysVisible = function(alwaysVisible) {\n        this.setOption(\"vScrollBarAlwaysVisible\", alwaysVisible);\n    };\n\n    this.$updateScrollBarV = function() {\n        var scrollHeight = this.layerConfig.maxHeight;\n        var scrollerHeight = this.$size.scrollerHeight;\n        if (!this.$maxLines && this.$scrollPastEnd) {\n            scrollHeight -= (scrollerHeight - this.lineHeight) * this.$scrollPastEnd;\n            if (this.scrollTop > scrollHeight - scrollerHeight) {\n                scrollHeight = this.scrollTop + scrollerHeight;\n                this.scrollBarV.scrollTop = null;\n            }\n        }\n        this.scrollBarV.setScrollHeight(scrollHeight + this.scrollMargin.v);\n        this.scrollBarV.setScrollTop(this.scrollTop + this.scrollMargin.top);\n    };\n    this.$updateScrollBarH = function() {\n        this.scrollBarH.setScrollWidth(this.layerConfig.width + 2 * this.$padding + this.scrollMargin.h);\n        this.scrollBarH.setScrollLeft(this.scrollLeft + this.scrollMargin.left);\n    };\n    \n    this.$frozen = false;\n    this.freeze = function() {\n        this.$frozen = true;\n    };\n    \n    this.unfreeze = function() {\n        this.$frozen = false;\n    };\n\n    this.$renderChanges = function(changes, force) {\n        if (this.$changes) {\n            changes |= this.$changes;\n            this.$changes = 0;\n        }\n        if ((!this.session || !this.container.offsetWidth || this.$frozen) || (!changes && !force)) {\n            this.$changes |= changes;\n            return; \n        } \n        if (this.$size.$dirty) {\n            this.$changes |= changes;\n            return this.onResize(true);\n        }\n        if (!this.lineHeight) {\n            this.$textLayer.checkForSizeChanges();\n        }\n        // this.$logChanges(changes);\n        \n        this._signal(\"beforeRender\");\n        \n        if (this.session && this.session.$bidiHandler)\n            this.session.$bidiHandler.updateCharacterWidths(this.$fontMetrics);\n\n        var config = this.layerConfig;\n        // text, scrolling and resize changes can cause the view port size to change\n        if (changes & this.CHANGE_FULL ||\n            changes & this.CHANGE_SIZE ||\n            changes & this.CHANGE_TEXT ||\n            changes & this.CHANGE_LINES ||\n            changes & this.CHANGE_SCROLL ||\n            changes & this.CHANGE_H_SCROLL\n        ) {\n            changes |= this.$computeLayerConfig();\n            // If a change is made offscreen and wrapMode is on, then the onscreen\n            // lines may have been pushed down. If so, the first screen row will not\n            // have changed, but the first actual row will. In that case, adjust \n            // scrollTop so that the cursor and onscreen content stays in the same place.\n            // TODO: find a better way to handle this, that works non wrapped case and doesn't compute layerConfig twice\n            if (config.firstRow != this.layerConfig.firstRow && config.firstRowScreen == this.layerConfig.firstRowScreen) {\n                var st = this.scrollTop + (config.firstRow - this.layerConfig.firstRow) * this.lineHeight;\n                if (st > 0) {\n                    // this check is needed as a workaround for the documentToScreenRow returning -1 if document.length == 0\n                    this.scrollTop = st;\n                    changes = changes | this.CHANGE_SCROLL;\n                    changes |= this.$computeLayerConfig();\n                }\n            }\n            config = this.layerConfig;\n            // update scrollbar first to not lose scroll position when gutter calls resize\n            this.$updateScrollBarV();\n            if (changes & this.CHANGE_H_SCROLL)\n                this.$updateScrollBarH();\n            this.$gutterLayer.element.style.marginTop = (-config.offset) + \"px\";\n            this.content.style.marginTop = (-config.offset) + \"px\";\n            this.content.style.width = config.width + 2 * this.$padding + \"px\";\n            this.content.style.height = config.minHeight + \"px\";\n        }\n        \n        // horizontal scrolling\n        if (changes & this.CHANGE_H_SCROLL) {\n            this.content.style.marginLeft = -this.scrollLeft + \"px\";\n            this.scroller.className = this.scrollLeft <= 0 ? \"ace_scroller\" : \"ace_scroller ace_scroll-left\";\n        }\n\n        // full\n        if (changes & this.CHANGE_FULL) {\n            this.$textLayer.update(config);\n            if (this.$showGutter)\n                this.$gutterLayer.update(config);\n            this.$markerBack.update(config);\n            this.$markerFront.update(config);\n            this.$cursorLayer.update(config);\n            this.$moveTextAreaToCursor();\n            this.$highlightGutterLine && this.$updateGutterLineHighlight();\n            this._signal(\"afterRender\");\n            return;\n        }\n\n        // scrolling\n        if (changes & this.CHANGE_SCROLL) {\n            if (changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES)\n                this.$textLayer.update(config);\n            else\n                this.$textLayer.scrollLines(config);\n\n            if (this.$showGutter)\n                this.$gutterLayer.update(config);\n            this.$markerBack.update(config);\n            this.$markerFront.update(config);\n            this.$cursorLayer.update(config);\n            this.$highlightGutterLine && this.$updateGutterLineHighlight();\n            this.$moveTextAreaToCursor();\n            this._signal(\"afterRender\");\n            return;\n        }\n\n        if (changes & this.CHANGE_TEXT) {\n            this.$textLayer.update(config);\n            if (this.$showGutter)\n                this.$gutterLayer.update(config);\n        }\n        else if (changes & this.CHANGE_LINES) {\n            if (this.$updateLines() || (changes & this.CHANGE_GUTTER) && this.$showGutter)\n                this.$gutterLayer.update(config);\n        }\n        else if (changes & this.CHANGE_TEXT || changes & this.CHANGE_GUTTER) {\n            if (this.$showGutter)\n                this.$gutterLayer.update(config);\n        }\n\n        if (changes & this.CHANGE_CURSOR) {\n            this.$cursorLayer.update(config);\n            this.$moveTextAreaToCursor();\n            this.$highlightGutterLine && this.$updateGutterLineHighlight();\n        }\n\n        if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_FRONT)) {\n            this.$markerFront.update(config);\n        }\n\n        if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_BACK)) {\n            this.$markerBack.update(config);\n        }\n\n        this._signal(\"afterRender\");\n    };\n\n    \n    this.$autosize = function() {\n        var height = this.session.getScreenLength() * this.lineHeight;\n        var maxHeight = this.$maxLines * this.lineHeight;\n        var desiredHeight = Math.min(maxHeight, \n            Math.max((this.$minLines || 1) * this.lineHeight, height)\n        ) + this.scrollMargin.v + (this.$extraHeight || 0);\n        if (this.$horizScroll)\n            desiredHeight += this.scrollBarH.getHeight();\n        if (this.$maxPixelHeight && desiredHeight > this.$maxPixelHeight)\n            desiredHeight = this.$maxPixelHeight;\n        var vScroll = height > maxHeight;\n        \n        if (desiredHeight != this.desiredHeight ||\n            this.$size.height != this.desiredHeight || vScroll != this.$vScroll) {\n            if (vScroll != this.$vScroll) {\n                this.$vScroll = vScroll;\n                this.scrollBarV.setVisible(vScroll);\n            }\n            \n            var w = this.container.clientWidth;\n            this.container.style.height = desiredHeight + \"px\";\n            this.$updateCachedSize(true, this.$gutterWidth, w, desiredHeight);\n            // this.$loop.changes = 0;\n            this.desiredHeight = desiredHeight;\n            \n            this._signal(\"autosize\");\n        }\n    };\n    \n    this.$computeLayerConfig = function() {\n        var session = this.session;\n        var size = this.$size;\n        \n        var hideScrollbars = size.height <= 2 * this.lineHeight;\n        var screenLines = this.session.getScreenLength();\n        var maxHeight = screenLines * this.lineHeight;\n\n        var longestLine = this.$getLongestLine();\n        \n        var horizScroll = !hideScrollbars && (this.$hScrollBarAlwaysVisible ||\n            size.scrollerWidth - longestLine - 2 * this.$padding < 0);\n\n        var hScrollChanged = this.$horizScroll !== horizScroll;\n        if (hScrollChanged) {\n            this.$horizScroll = horizScroll;\n            this.scrollBarH.setVisible(horizScroll);\n        }\n        var vScrollBefore = this.$vScroll; // autosize can change vscroll value in which case we need to update longestLine\n        // autoresize only after updating hscroll to include scrollbar height in desired height\n        if (this.$maxLines && this.lineHeight > 1)\n            this.$autosize();\n\n        var offset = this.scrollTop % this.lineHeight;\n        var minHeight = size.scrollerHeight + this.lineHeight;\n        \n        var scrollPastEnd = !this.$maxLines && this.$scrollPastEnd\n            ? (size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd\n            : 0;\n        maxHeight += scrollPastEnd;\n        \n        var sm = this.scrollMargin;\n        this.session.setScrollTop(Math.max(-sm.top,\n            Math.min(this.scrollTop, maxHeight - size.scrollerHeight + sm.bottom)));\n\n        this.session.setScrollLeft(Math.max(-sm.left, Math.min(this.scrollLeft, \n            longestLine + 2 * this.$padding - size.scrollerWidth + sm.right)));\n        \n        var vScroll = !hideScrollbars && (this.$vScrollBarAlwaysVisible ||\n            size.scrollerHeight - maxHeight + scrollPastEnd < 0 || this.scrollTop > sm.top);\n        var vScrollChanged = vScrollBefore !== vScroll;\n        if (vScrollChanged) {\n            this.$vScroll = vScroll;\n            this.scrollBarV.setVisible(vScroll);\n        }\n\n        var lineCount = Math.ceil(minHeight / this.lineHeight) - 1;\n        var firstRow = Math.max(0, Math.round((this.scrollTop - offset) / this.lineHeight));\n        var lastRow = firstRow + lineCount;\n\n        // Map lines on the screen to lines in the document.\n        var firstRowScreen, firstRowHeight;\n        var lineHeight = this.lineHeight;\n        firstRow = session.screenToDocumentRow(firstRow, 0);\n\n        // Check if firstRow is inside of a foldLine. If true, then use the first\n        // row of the foldLine.\n        var foldLine = session.getFoldLine(firstRow);\n        if (foldLine) {\n            firstRow = foldLine.start.row;\n        }\n\n        firstRowScreen = session.documentToScreenRow(firstRow, 0);\n        firstRowHeight = session.getRowLength(firstRow) * lineHeight;\n\n        lastRow = Math.min(session.screenToDocumentRow(lastRow, 0), session.getLength() - 1);\n        minHeight = size.scrollerHeight + session.getRowLength(lastRow) * lineHeight +\n                                                firstRowHeight;\n\n        offset = this.scrollTop - firstRowScreen * lineHeight;\n\n        var changes = 0;\n        if (this.layerConfig.width != longestLine) \n            changes = this.CHANGE_H_SCROLL;\n        // Horizontal scrollbar visibility may have changed, which changes\n        // the client height of the scroller\n        if (hScrollChanged || vScrollChanged) {\n            changes = this.$updateCachedSize(true, this.gutterWidth, size.width, size.height);\n            this._signal(\"scrollbarVisibilityChanged\");\n            if (vScrollChanged)\n                longestLine = this.$getLongestLine();\n        }\n        \n        this.layerConfig = {\n            width : longestLine,\n            padding : this.$padding,\n            firstRow : firstRow,\n            firstRowScreen: firstRowScreen,\n            lastRow : lastRow,\n            lineHeight : lineHeight,\n            characterWidth : this.characterWidth,\n            minHeight : minHeight,\n            maxHeight : maxHeight,\n            offset : offset,\n            gutterOffset : lineHeight ? Math.max(0, Math.ceil((offset + size.height - size.scrollerHeight) / lineHeight)) : 0,\n            height : this.$size.scrollerHeight\n        };\n\n        // For debugging.\n        // console.log(JSON.stringify(this.layerConfig));\n\n        return changes;\n    };\n\n    this.$updateLines = function() {\n        if (!this.$changedLines) return;\n        var firstRow = this.$changedLines.firstRow;\n        var lastRow = this.$changedLines.lastRow;\n        this.$changedLines = null;\n\n        var layerConfig = this.layerConfig;\n\n        if (firstRow > layerConfig.lastRow + 1) { return; }\n        if (lastRow < layerConfig.firstRow) { return; }\n\n        // if the last row is unknown -> redraw everything\n        if (lastRow === Infinity) {\n            if (this.$showGutter)\n                this.$gutterLayer.update(layerConfig);\n            this.$textLayer.update(layerConfig);\n            return;\n        }\n\n        // else update only the changed rows\n        this.$textLayer.updateLines(layerConfig, firstRow, lastRow);\n        return true;\n    };\n\n    this.$getLongestLine = function() {\n        var charCount = this.session.getScreenWidth();\n        if (this.showInvisibles && !this.session.$useWrapMode)\n            charCount += 1;\n\n        return Math.max(this.$size.scrollerWidth - 2 * this.$padding, Math.round(charCount * this.characterWidth));\n    };\n\n    /**\n     * Schedules an update to all the front markers in the document.\n     **/\n    this.updateFrontMarkers = function() {\n        this.$markerFront.setMarkers(this.session.getMarkers(true));\n        this.$loop.schedule(this.CHANGE_MARKER_FRONT);\n    };\n\n    /**\n     *\n     * Schedules an update to all the back markers in the document.\n     **/\n    this.updateBackMarkers = function() {\n        this.$markerBack.setMarkers(this.session.getMarkers());\n        this.$loop.schedule(this.CHANGE_MARKER_BACK);\n    };\n\n    /**\n     *\n     * Deprecated; (moved to [[EditSession]])\n     * @deprecated\n     **/\n    this.addGutterDecoration = function(row, className){\n        this.$gutterLayer.addGutterDecoration(row, className);\n    };\n\n    /**\n     * Deprecated; (moved to [[EditSession]])\n     * @deprecated\n     **/\n    this.removeGutterDecoration = function(row, className){\n        this.$gutterLayer.removeGutterDecoration(row, className);\n    };\n\n    /**\n     *\n     * Redraw breakpoints.\n     **/\n    this.updateBreakpoints = function(rows) {\n        this.$loop.schedule(this.CHANGE_GUTTER);\n    };\n\n    /**\n     * Sets annotations for the gutter.\n     * @param {Array} annotations An array containing annotations\n     *\n     **/\n    this.setAnnotations = function(annotations) {\n        this.$gutterLayer.setAnnotations(annotations);\n        this.$loop.schedule(this.CHANGE_GUTTER);\n    };\n\n    /**\n     *\n     * Updates the cursor icon.\n     **/\n    this.updateCursor = function() {\n        this.$loop.schedule(this.CHANGE_CURSOR);\n    };\n\n    /**\n     *\n     * Hides the cursor icon.\n     **/\n    this.hideCursor = function() {\n        this.$cursorLayer.hideCursor();\n    };\n\n    /**\n     *\n     * Shows the cursor icon.\n     **/\n    this.showCursor = function() {\n        this.$cursorLayer.showCursor();\n    };\n\n    this.scrollSelectionIntoView = function(anchor, lead, offset) {\n        // first scroll anchor into view then scroll lead into view\n        this.scrollCursorIntoView(anchor, offset);\n        this.scrollCursorIntoView(lead, offset);\n    };\n\n    /**\n     *\n     * Scrolls the cursor into the first visibile area of the editor\n     **/\n    this.scrollCursorIntoView = function(cursor, offset, $viewMargin) {\n        // the editor is not visible\n        if (this.$size.scrollerHeight === 0)\n            return;\n\n        var pos = this.$cursorLayer.getPixelPosition(cursor);\n\n        var left = pos.left;\n        var top = pos.top;\n        \n        var topMargin = $viewMargin && $viewMargin.top || 0;\n        var bottomMargin = $viewMargin && $viewMargin.bottom || 0;\n        \n        var scrollTop = this.$scrollAnimation ? this.session.getScrollTop() : this.scrollTop;\n        \n        if (scrollTop + topMargin > top) {\n            if (offset && scrollTop + topMargin > top + this.lineHeight)\n                top -= offset * this.$size.scrollerHeight;\n            if (top === 0)\n                top = -this.scrollMargin.top;\n            this.session.setScrollTop(top);\n        } else if (scrollTop + this.$size.scrollerHeight - bottomMargin < top + this.lineHeight) {\n            if (offset && scrollTop + this.$size.scrollerHeight - bottomMargin < top -  this.lineHeight)\n                top += offset * this.$size.scrollerHeight;\n            this.session.setScrollTop(top + this.lineHeight - this.$size.scrollerHeight);\n        }\n\n        var scrollLeft = this.scrollLeft;\n\n        if (scrollLeft > left) {\n            if (left < this.$padding + 2 * this.layerConfig.characterWidth)\n                left = -this.scrollMargin.left;\n            this.session.setScrollLeft(left);\n        } else if (scrollLeft + this.$size.scrollerWidth < left + this.characterWidth) {\n            this.session.setScrollLeft(Math.round(left + this.characterWidth - this.$size.scrollerWidth));\n        } else if (scrollLeft <= this.$padding && left - scrollLeft < this.characterWidth) {\n            this.session.setScrollLeft(0);\n        }\n    };\n\n    /**\n     * {:EditSession.getScrollTop}\n     * @related EditSession.getScrollTop\n     * @returns {Number}\n     **/\n    this.getScrollTop = function() {\n        return this.session.getScrollTop();\n    };\n\n    /**\n     * {:EditSession.getScrollLeft}\n     * @related EditSession.getScrollLeft\n     * @returns {Number}\n     **/\n    this.getScrollLeft = function() {\n        return this.session.getScrollLeft();\n    };\n\n    /**\n     * Returns the first visible row, regardless of whether it's fully visible or not.\n     * @returns {Number}\n     **/\n    this.getScrollTopRow = function() {\n        return this.scrollTop / this.lineHeight;\n    };\n\n    /**\n     * Returns the last visible row, regardless of whether it's fully visible or not.\n     * @returns {Number}\n     **/\n    this.getScrollBottomRow = function() {\n        return Math.max(0, Math.floor((this.scrollTop + this.$size.scrollerHeight) / this.lineHeight) - 1);\n    };\n\n    /**\n     * Gracefully scrolls from the top of the editor to the row indicated.\n     * @param {Number} row A row id\n     *\n     * @related EditSession.setScrollTop\n     **/\n    this.scrollToRow = function(row) {\n        this.session.setScrollTop(row * this.lineHeight);\n    };\n\n    this.alignCursor = function(cursor, alignment) {\n        if (typeof cursor == \"number\")\n            cursor = {row: cursor, column: 0};\n\n        var pos = this.$cursorLayer.getPixelPosition(cursor);\n        var h = this.$size.scrollerHeight - this.lineHeight;\n        var offset = pos.top - h * (alignment || 0);\n\n        this.session.setScrollTop(offset);\n        return offset;\n    };\n\n    this.STEPS = 8;\n    this.$calcSteps = function(fromValue, toValue){\n        var i = 0;\n        var l = this.STEPS;\n        var steps = [];\n\n        var func  = function(t, x_min, dx) {\n            return dx * (Math.pow(t - 1, 3) + 1) + x_min;\n        };\n\n        for (i = 0; i < l; ++i)\n            steps.push(func(i / this.STEPS, fromValue, toValue - fromValue));\n\n        return steps;\n    };\n\n    /**\n     * Gracefully scrolls the editor to the row indicated.\n     * @param {Number} line A line number\n     * @param {Boolean} center If `true`, centers the editor the to indicated line\n     * @param {Boolean} animate If `true` animates scrolling\n     * @param {Function} callback Function to be called after the animation has finished\n     *\n     **/\n    this.scrollToLine = function(line, center, animate, callback) {\n        var pos = this.$cursorLayer.getPixelPosition({row: line, column: 0});\n        var offset = pos.top;\n        if (center)\n            offset -= this.$size.scrollerHeight / 2;\n\n        var initialScroll = this.scrollTop;\n        this.session.setScrollTop(offset);\n        if (animate !== false)\n            this.animateScrolling(initialScroll, callback);\n    };\n\n    this.animateScrolling = function(fromValue, callback) {\n        var toValue = this.scrollTop;\n        if (!this.$animatedScroll)\n            return;\n        var _self = this;\n        \n        if (fromValue == toValue)\n            return;\n        \n        if (this.$scrollAnimation) {\n            var oldSteps = this.$scrollAnimation.steps;\n            if (oldSteps.length) {\n                fromValue = oldSteps[0];\n                if (fromValue == toValue)\n                    return;\n            }\n        }\n        \n        var steps = _self.$calcSteps(fromValue, toValue);\n        this.$scrollAnimation = {from: fromValue, to: toValue, steps: steps};\n\n        clearInterval(this.$timer);\n\n        _self.session.setScrollTop(steps.shift());\n        // trick session to think it's already scrolled to not loose toValue\n        _self.session.$scrollTop = toValue;\n        this.$timer = setInterval(function() {\n            if (steps.length) {\n                _self.session.setScrollTop(steps.shift());\n                _self.session.$scrollTop = toValue;\n            } else if (toValue != null) {\n                _self.session.$scrollTop = -1;\n                _self.session.setScrollTop(toValue);\n                toValue = null;\n            } else {\n                // do this on separate step to not get spurious scroll event from scrollbar\n                _self.$timer = clearInterval(_self.$timer);\n                _self.$scrollAnimation = null;\n                callback && callback();\n            }\n        }, 10);\n    };\n\n    /**\n     * Scrolls the editor to the y pixel indicated.\n     * @param {Number} scrollTop The position to scroll to\n     *\n     * @returns {Number}\n     **/\n    this.scrollToY = function(scrollTop) {\n        // after calling scrollBar.setScrollTop\n        // scrollbar sends us event with same scrollTop. ignore it\n        if (this.scrollTop !== scrollTop) {\n            this.$loop.schedule(this.CHANGE_SCROLL);\n            this.scrollTop = scrollTop;\n        }\n    };\n\n    /**\n     * Scrolls the editor across the x-axis to the pixel indicated.\n     * @param {Number} scrollLeft The position to scroll to\n     *\n     * @returns {Number}\n     **/\n    this.scrollToX = function(scrollLeft) {\n        if (this.scrollLeft !== scrollLeft)\n            this.scrollLeft = scrollLeft;\n        this.$loop.schedule(this.CHANGE_H_SCROLL);\n    };\n\n    /**\n     * Scrolls the editor across both x- and y-axes.\n     * @param {Number} x The x value to scroll to\n     * @param {Number} y The y value to scroll to\n     **/\n    this.scrollTo = function(x, y) {\n        this.session.setScrollTop(y);\n        this.session.setScrollLeft(y);\n    };\n    \n    /**\n     * Scrolls the editor across both x- and y-axes.\n     * @param {Number} deltaX The x value to scroll by\n     * @param {Number} deltaY The y value to scroll by\n     **/\n    this.scrollBy = function(deltaX, deltaY) {\n        deltaY && this.session.setScrollTop(this.session.getScrollTop() + deltaY);\n        deltaX && this.session.setScrollLeft(this.session.getScrollLeft() + deltaX);\n    };\n\n    /**\n     * Returns `true` if you can still scroll by either parameter; in other words, you haven't reached the end of the file or line.\n     * @param {Number} deltaX The x value to scroll by\n     * @param {Number} deltaY The y value to scroll by\n     *\n     * @returns {Boolean}\n     **/\n    this.isScrollableBy = function(deltaX, deltaY) {\n        if (deltaY < 0 && this.session.getScrollTop() >= 1 - this.scrollMargin.top)\n           return true;\n        if (deltaY > 0 && this.session.getScrollTop() + this.$size.scrollerHeight\n            - this.layerConfig.maxHeight < -1 + this.scrollMargin.bottom)\n           return true;\n        if (deltaX < 0 && this.session.getScrollLeft() >= 1 - this.scrollMargin.left)\n            return true;\n        if (deltaX > 0 && this.session.getScrollLeft() + this.$size.scrollerWidth\n            - this.layerConfig.width < -1 + this.scrollMargin.right)\n           return true;\n    };\n\n    this.pixelToScreenCoordinates = function(x, y) {\n        var canvasPos = this.scroller.getBoundingClientRect();\n\n        var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n        var offset = offsetX / this.characterWidth;\n        var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);\n        var col = Math.round(offset);\n\n        return {row: row, column: col, side: offset - col > 0 ? 1 : -1, offsetX:  offsetX};\n    };\n\n    this.screenToTextCoordinates = function(x, y) {\n        var canvasPos = this.scroller.getBoundingClientRect();\n        var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n        \n        var col = Math.round(offsetX / this.characterWidth);\n\n        var row = (y + this.scrollTop - canvasPos.top) / this.lineHeight;\n\n        return this.session.screenToDocumentPosition(row, Math.max(col, 0), offsetX);\n    };\n\n    /**\n     * Returns an object containing the `pageX` and `pageY` coordinates of the document position.\n     * @param {Number} row The document row position\n     * @param {Number} column The document column position\n     *\n     * @returns {Object}\n     **/\n    this.textToScreenCoordinates = function(row, column) {\n        var canvasPos = this.scroller.getBoundingClientRect();\n        var pos = this.session.documentToScreenPosition(row, column);\n\n        var x = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, row)\n             ? this.session.$bidiHandler.getPosLeft(pos.column)\n             : Math.round(pos.column * this.characterWidth));\n        \n        var y = pos.row * this.lineHeight;\n\n        return {\n            pageX: canvasPos.left + x - this.scrollLeft,\n            pageY: canvasPos.top + y - this.scrollTop\n        };\n    };\n\n    /**\n     *\n     * Focuses the current container.\n     **/\n    this.visualizeFocus = function() {\n        dom.addCssClass(this.container, \"ace_focus\");\n    };\n\n    /**\n     *\n     * Blurs the current container.\n     **/\n    this.visualizeBlur = function() {\n        dom.removeCssClass(this.container, \"ace_focus\");\n    };\n\n    /**\n     * @param {Number} position\n     *\n     * @private\n     **/\n    this.showComposition = function(position) {\n        if (!this.$composition)\n            this.$composition = {\n                keepTextAreaAtCursor: this.$keepTextAreaAtCursor,\n                cssText: this.textarea.style.cssText\n            };\n\n        this.$keepTextAreaAtCursor = true;\n        dom.addCssClass(this.textarea, \"ace_composition\");\n        this.textarea.style.cssText = \"\";\n        this.$moveTextAreaToCursor();\n    };\n\n    /**\n     * @param {String} text A string of text to use\n     *\n     * Sets the inner text of the current composition to `text`.\n     **/\n    this.setCompositionText = function(text) {\n        this.$moveTextAreaToCursor();\n    };\n\n    /**\n     *\n     * Hides the current composition.\n     **/\n    this.hideComposition = function() {\n        if (!this.$composition)\n            return;\n\n        dom.removeCssClass(this.textarea, \"ace_composition\");\n        this.$keepTextAreaAtCursor = this.$composition.keepTextAreaAtCursor;\n        this.textarea.style.cssText = this.$composition.cssText;\n        this.$composition = null;\n    };\n\n    /**\n     * [Sets a new theme for the editor. `theme` should exist, and be a directory path, like `ace/theme/textmate`.]{: #VirtualRenderer.setTheme}\n     * @param {String} theme The path to a theme\n     * @param {Function} cb optional callback\n     *\n     **/\n    this.setTheme = function(theme, cb) {\n        var _self = this;\n        this.$themeId = theme;\n        _self._dispatchEvent('themeChange',{theme:theme});\n\n        if (!theme || typeof theme == \"string\") {\n            var moduleName = theme || this.$options.theme.initialValue;\n            config.loadModule([\"theme\", moduleName], afterLoad);\n        } else {\n            afterLoad(theme);\n        }\n\n        function afterLoad(module) {\n            if (_self.$themeId != theme)\n                return cb && cb();\n            if (!module || !module.cssClass)\n                throw new Error(\"couldn't load module \" + theme + \" or it didn't call define\");\n            dom.importCssString(\n                module.cssText,\n                module.cssClass,\n                _self.container.ownerDocument\n            );\n\n            if (_self.theme)\n                dom.removeCssClass(_self.container, _self.theme.cssClass);\n\n            var padding = \"padding\" in module ? module.padding \n                : \"padding\" in (_self.theme || {}) ? 4 : _self.$padding;\n            if (_self.$padding && padding != _self.$padding)\n                _self.setPadding(padding);\n                \n            // this is kept only for backwards compatibility\n            _self.$theme = module.cssClass;\n\n            _self.theme = module;\n            dom.addCssClass(_self.container, module.cssClass);\n            dom.setCssClass(_self.container, \"ace_dark\", module.isDark);\n\n            // force re-measure of the gutter width\n            if (_self.$size) {\n                _self.$size.width = 0;\n                _self.$updateSizeAsync();\n            }\n\n            _self._dispatchEvent('themeLoaded', {theme:module});\n            cb && cb();\n        }\n    };\n\n    /**\n     * [Returns the path of the current theme.]{: #VirtualRenderer.getTheme}\n     * @returns {String}\n     **/\n    this.getTheme = function() {\n        return this.$themeId;\n    };\n\n    // Methods allows to add / remove CSS classnames to the editor element.\n    // This feature can be used by plug-ins to provide a visual indication of\n    // a certain mode that editor is in.\n\n    /**\n     * [Adds a new class, `style`, to the editor.]{: #VirtualRenderer.setStyle}\n     * @param {String} style A class name\n     *\n     **/\n    this.setStyle = function(style, include) {\n        dom.setCssClass(this.container, style, include !== false);\n    };\n\n    /**\n     * [Removes the class `style` from the editor.]{: #VirtualRenderer.unsetStyle}\n     * @param {String} style A class name\n     *\n     **/\n    this.unsetStyle = function(style) {\n        dom.removeCssClass(this.container, style);\n    };\n    \n    this.setCursorStyle = function(style) {\n        if (this.scroller.style.cursor != style)\n            this.scroller.style.cursor = style;\n    };\n\n    /**\n     * @param {String} cursorStyle A css cursor style\n     *\n     **/\n    this.setMouseCursor = function(cursorStyle) {\n        this.scroller.style.cursor = cursorStyle;\n    };\n\n    /**\n     * Destroys the text and cursor layers for this renderer.\n     **/\n    this.destroy = function() {\n        this.$textLayer.destroy();\n        this.$cursorLayer.destroy();\n    };\n\n}).call(VirtualRenderer.prototype);\n\n\nconfig.defineOptions(VirtualRenderer.prototype, \"renderer\", {\n    animatedScroll: {initialValue: false},\n    showInvisibles: {\n        set: function(value) {\n            if (this.$textLayer.setShowInvisibles(value))\n                this.$loop.schedule(this.CHANGE_TEXT);\n        },\n        initialValue: false\n    },\n    showPrintMargin: {\n        set: function() { this.$updatePrintMargin(); },\n        initialValue: true\n    },\n    printMarginColumn: {\n        set: function() { this.$updatePrintMargin(); },\n        initialValue: 80\n    },\n    printMargin: {\n        set: function(val) {\n            if (typeof val == \"number\")\n                this.$printMarginColumn = val;\n            this.$showPrintMargin = !!val;\n            this.$updatePrintMargin();\n        },\n        get: function() {\n            return this.$showPrintMargin && this.$printMarginColumn; \n        }\n    },\n    showGutter: {\n        set: function(show){\n            this.$gutter.style.display = show ? \"block\" : \"none\";\n            this.$loop.schedule(this.CHANGE_FULL);\n            this.onGutterResize();\n        },\n        initialValue: true\n    },\n    fadeFoldWidgets: {\n        set: function(show) {\n            dom.setCssClass(this.$gutter, \"ace_fade-fold-widgets\", show);\n        },\n        initialValue: false\n    },\n    showFoldWidgets: {\n        set: function(show) {this.$gutterLayer.setShowFoldWidgets(show);},\n        initialValue: true\n    },\n    showLineNumbers: {\n        set: function(show) {\n            this.$gutterLayer.setShowLineNumbers(show);\n            this.$loop.schedule(this.CHANGE_GUTTER);\n        },\n        initialValue: true\n    },\n    displayIndentGuides: {\n        set: function(show) {\n            if (this.$textLayer.setDisplayIndentGuides(show))\n                this.$loop.schedule(this.CHANGE_TEXT);\n        },\n        initialValue: true\n    },\n    highlightGutterLine: {\n        set: function(shouldHighlight) {\n            if (!this.$gutterLineHighlight) {\n                this.$gutterLineHighlight = dom.createElement(\"div\");\n                this.$gutterLineHighlight.className = \"ace_gutter-active-line\";\n                this.$gutter.appendChild(this.$gutterLineHighlight);\n                return;\n            }\n\n            this.$gutterLineHighlight.style.display = shouldHighlight ? \"\" : \"none\";\n            // if cursorlayer have never been updated there's nothing on screen to update\n            if (this.$cursorLayer.$pixelPos)\n                this.$updateGutterLineHighlight();\n        },\n        initialValue: false,\n        value: true\n    },\n    hScrollBarAlwaysVisible: {\n        set: function(val) {\n            if (!this.$hScrollBarAlwaysVisible || !this.$horizScroll)\n                this.$loop.schedule(this.CHANGE_SCROLL);\n        },\n        initialValue: false\n    },\n    vScrollBarAlwaysVisible: {\n        set: function(val) {\n            if (!this.$vScrollBarAlwaysVisible || !this.$vScroll)\n                this.$loop.schedule(this.CHANGE_SCROLL);\n        },\n        initialValue: false\n    },\n    fontSize:  {\n        set: function(size) {\n            if (typeof size == \"number\")\n                size = size + \"px\";\n            this.container.style.fontSize = size;\n            this.updateFontSize();\n        },\n        initialValue: 12\n    },\n    fontFamily: {\n        set: function(name) {\n            this.container.style.fontFamily = name;\n            this.updateFontSize();\n        }\n    },\n    maxLines: {\n        set: function(val) {\n            this.updateFull();\n        }\n    },\n    minLines: {\n        set: function(val) {\n            this.updateFull();\n        }\n    },\n    maxPixelHeight: {\n        set: function(val) {\n            this.updateFull();\n        },\n        initialValue: 0\n    },\n    scrollPastEnd: {\n        set: function(val) {\n            val = +val || 0;\n            if (this.$scrollPastEnd == val)\n                return;\n            this.$scrollPastEnd = val;\n            this.$loop.schedule(this.CHANGE_SCROLL);\n        },\n        initialValue: 0,\n        handlesSet: true\n    },\n    fixedWidthGutter: {\n        set: function(val) {\n            this.$gutterLayer.$fixedWidth = !!val;\n            this.$loop.schedule(this.CHANGE_GUTTER);\n        }\n    },\n    theme: {\n        set: function(val) { this.setTheme(val); },\n        get: function() { return this.$themeId || this.theme; },\n        initialValue: \"./theme/textmate\",\n        handlesSet: true\n    }\n});\n\nexports.VirtualRenderer = VirtualRenderer;\n});\n"
  },
  {
    "path": "lib/ace/virtual_renderer_test.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\nif (typeof process !== \"undefined\") {\n    require(\"amd-loader\");\n    require(\"./test/mockdom\");\n}\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar Editor = require(\"./edit_session\").Editor;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar VirtualRenderer = require(\"./virtual_renderer\").VirtualRenderer;\nvar assert = require(\"./test/assertions\");\n\nvar editor = null;\nmodule.exports = {\n    setUp: function() {\n        if (editor)\n            editor.destroy();\n        var el = document.createElement(\"div\");\n\n        el.style.left = \"20px\";\n        el.style.top = \"30px\";\n        el.style.width = \"300px\";\n        el.style.height = \"100px\";\n        document.body.appendChild(el);\n        var renderer = new VirtualRenderer(el);\n        editor = new Editor(renderer);\n        editor.on(\"destroy\", function() {\n            document.body.removeChild(el);\n        });\n    },\n    tearDown: function() {\n        editor && editor.destroy();\n        editor = null;\n    },\n    \"test: screen2text the column should be rounded to the next character edge\" : function(done) {\n        if (!editor) return done();\n        var renderer = editor.renderer;\n\n        renderer.setPadding(0);\n        renderer.setSession(new EditSession(\"1234\"));\n\n        var r = renderer.scroller.getBoundingClientRect();\n        function testPixelToText(x, y, row, column) {\n            assert.position(renderer.screenToTextCoordinates(x+r.left, y+r.top), row, column);\n        }\n\n        renderer.characterWidth = 10;\n        renderer.lineHeight = 15;\n\n        testPixelToText(4, 0, 0, 0);\n        testPixelToText(5, 0, 0, 1);\n        testPixelToText(9, 0, 0, 1);\n        testPixelToText(10, 0, 0, 1);\n        testPixelToText(14, 0, 0, 1);\n        testPixelToText(15, 0, 0, 2);\n        done();\n    },\n    \n    \"test scrollmargin + autosize\": function(done) {\n        if (!editor) return done();\n        editor.setOptions({\n            maxLines: 100,\n            useWrapMode: true\n        });        \n        editor.renderer.setScrollMargin(10, 10);\n        editor.setValue(\"\\n\\n\");\n        editor.setValue(\"\\n\\n\\n\\n\");\n        editor.renderer.once(\"afterRender\", function() {\n            setTimeout(function() {\n                done();\n            }, 0);\n        });\n    }\n\n    // change tab size after setDocument (for text layer)\n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main) {\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n}\n"
  },
  {
    "path": "lib/ace/worker/mirror.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\nvar Document = require(\"../document\").Document;\nvar lang = require(\"../lib/lang\");\n    \nvar Mirror = exports.Mirror = function(sender) {\n    this.sender = sender;\n    var doc = this.doc = new Document(\"\");\n    \n    var deferredUpdate = this.deferredUpdate = lang.delayedCall(this.onUpdate.bind(this));\n    \n    var _self = this;\n    sender.on(\"change\", function(e) {\n        var data = e.data;\n        if (data[0].start) {\n            doc.applyDeltas(data);\n        } else {\n            for (var i = 0; i < data.length; i += 2) {\n                if (Array.isArray(data[i+1])) {\n                    var d = {action: \"insert\", start: data[i], lines: data[i+1]};\n                } else {\n                    var d = {action: \"remove\", start: data[i], end: data[i+1]};\n                }\n                doc.applyDelta(d, true);\n            }\n        }\n        if (_self.$timeout)\n            return deferredUpdate.schedule(_self.$timeout);\n        _self.onUpdate();\n    });\n};\n\n(function() {\n    \n    this.$timeout = 500;\n    \n    this.setTimeout = function(timeout) {\n        this.$timeout = timeout;\n    };\n    \n    this.setValue = function(value) {\n        this.doc.setValue(value);\n        this.deferredUpdate.schedule(this.$timeout);\n    };\n    \n    this.getValue = function(callbackId) {\n        this.sender.callback(this.doc.getValue(), callbackId);\n    };\n    \n    this.onUpdate = function() {\n        // abstract method\n    };\n    \n    this.isPending = function() {\n        return this.deferredUpdate.isPending();\n    };\n    \n}).call(Mirror.prototype);\n\n});\n"
  },
  {
    "path": "lib/ace/worker/worker.js",
    "content": "\"no use strict\";\n!(function(window) {\nif (typeof window.window != \"undefined\" && window.document)\n    return;\nif (window.require && window.define)\n    return;\n\nif (!window.console) {\n    window.console = function() {\n        var msgs = Array.prototype.slice.call(arguments, 0);\n        postMessage({type: \"log\", data: msgs});\n    };\n    window.console.error =\n    window.console.warn = \n    window.console.log =\n    window.console.trace = window.console;\n}\nwindow.window = window;\nwindow.ace = window;\n\nwindow.onerror = function(message, file, line, col, err) {\n    postMessage({type: \"error\", data: {\n        message: message,\n        data: err.data,\n        file: file,\n        line: line, \n        col: col,\n        stack: err.stack\n    }});\n};\n\nwindow.normalizeModule = function(parentId, moduleName) {\n    // normalize plugin requires\n    if (moduleName.indexOf(\"!\") !== -1) {\n        var chunks = moduleName.split(\"!\");\n        return window.normalizeModule(parentId, chunks[0]) + \"!\" + window.normalizeModule(parentId, chunks[1]);\n    }\n    // normalize relative requires\n    if (moduleName.charAt(0) == \".\") {\n        var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n        moduleName = (base ? base + \"/\" : \"\") + moduleName;\n        \n        while (moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n            var previous = moduleName;\n            moduleName = moduleName.replace(/^\\.\\//, \"\").replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n        }\n    }\n    \n    return moduleName;\n};\n\nwindow.require = function require(parentId, id) {\n    if (!id) {\n        id = parentId;\n        parentId = null;\n    }\n    if (!id.charAt)\n        throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");\n\n    id = window.normalizeModule(parentId, id);\n\n    var module = window.require.modules[id];\n    if (module) {\n        if (!module.initialized) {\n            module.initialized = true;\n            module.exports = module.factory().exports;\n        }\n        return module.exports;\n    }\n   \n    if (!window.require.tlns)\n        return console.log(\"unable to load \" + id);\n    \n    var path = resolveModuleId(id, window.require.tlns);\n    if (path.slice(-3) != \".js\") path += \".js\";\n    \n    window.require.id = id;\n    window.require.modules[id] = {}; // prevent infinite loop on broken modules\n    importScripts(path);\n    return window.require(parentId, id);\n};\nfunction resolveModuleId(id, paths) {\n    var testPath = id, tail = \"\";\n    while (testPath) {\n        var alias = paths[testPath];\n        if (typeof alias == \"string\") {\n            return alias + tail;\n        } else if (alias) {\n            return  alias.location.replace(/\\/*$/, \"/\") + (tail || alias.main || alias.name);\n        } else if (alias === false) {\n            return \"\";\n        }\n        var i = testPath.lastIndexOf(\"/\");\n        if (i === -1) break;\n        tail = testPath.substr(i) + tail;\n        testPath = testPath.slice(0, i);\n    }\n    return id;\n}\nwindow.require.modules = {};\nwindow.require.tlns = {};\n\nwindow.define = function(id, deps, factory) {\n    if (arguments.length == 2) {\n        factory = deps;\n        if (typeof id != \"string\") {\n            deps = id;\n            id = window.require.id;\n        }\n    } else if (arguments.length == 1) {\n        factory = id;\n        deps = [];\n        id = window.require.id;\n    }\n    \n    if (typeof factory != \"function\") {\n        window.require.modules[id] = {\n            exports: factory,\n            initialized: true\n        };\n        return;\n    }\n\n    if (!deps.length)\n        // If there is no dependencies, we inject \"require\", \"exports\" and\n        // \"module\" as dependencies, to provide CommonJS compatibility.\n        deps = [\"require\", \"exports\", \"module\"];\n\n    var req = function(childId) {\n        return window.require(id, childId);\n    };\n\n    window.require.modules[id] = {\n        exports: {},\n        factory: function() {\n            var module = this;\n            var returnExports = factory.apply(this, deps.map(function(dep) {\n                switch (dep) {\n                    // Because \"require\", \"exports\" and \"module\" aren't actual\n                    // dependencies, we must handle them seperately.\n                    case \"require\": return req;\n                    case \"exports\": return module.exports;\n                    case \"module\":  return module;\n                    // But for all other dependencies, we can just go ahead and\n                    // require them.\n                    default:        return req(dep);\n                }\n            }));\n            if (returnExports)\n                module.exports = returnExports;\n            return module;\n        }\n    };\n};\nwindow.define.amd = {};\nrequire.tlns = {};\nwindow.initBaseUrls  = function initBaseUrls(topLevelNamespaces) {\n    for (var i in topLevelNamespaces)\n        require.tlns[i] = topLevelNamespaces[i];\n};\n\nwindow.initSender = function initSender() {\n\n    var EventEmitter = window.require(\"ace/lib/event_emitter\").EventEmitter;\n    var oop = window.require(\"ace/lib/oop\");\n    \n    var Sender = function() {};\n    \n    (function() {\n        \n        oop.implement(this, EventEmitter);\n                \n        this.callback = function(data, callbackId) {\n            postMessage({\n                type: \"call\",\n                id: callbackId,\n                data: data\n            });\n        };\n    \n        this.emit = function(name, data) {\n            postMessage({\n                type: \"event\",\n                name: name,\n                data: data\n            });\n        };\n        \n    }).call(Sender.prototype);\n    \n    return new Sender();\n};\n\nvar main = window.main = null;\nvar sender = window.sender = null;\n\nwindow.onmessage = function(e) {\n    var msg = e.data;\n    if (msg.event && sender) {\n        sender._signal(msg.event, msg.data);\n    }\n    else if (msg.command) {\n        if (main[msg.command])\n            main[msg.command].apply(main, msg.args);\n        else if (window[msg.command])\n            window[msg.command].apply(window, msg.args);\n        else\n            throw new Error(\"Unknown command:\" + msg.command);\n    }\n    else if (msg.init) {\n        window.initBaseUrls(msg.tlns);\n        require(\"ace/lib/es5-shim\");\n        sender = window.sender = window.initSender();\n        var clazz = require(msg.module)[msg.classname];\n        main = window.main = new clazz(sender);\n    }\n};\n})(this);"
  },
  {
    "path": "lib/ace/worker/worker_client.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar net = require(\"../lib/net\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar config = require(\"../config\");\n\nfunction $workerBlob(workerUrl) {\n    // workerUrl can be protocol relative\n    // importScripts only takes fully qualified urls\n    var script = \"importScripts('\" + net.qualifyURL(workerUrl) + \"');\";\n    try {\n        return new Blob([script], {\"type\": \"application/javascript\"});\n    } catch (e) { // Backwards-compatibility\n        var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder;\n        var blobBuilder = new BlobBuilder();\n        blobBuilder.append(script);\n        return blobBuilder.getBlob(\"application/javascript\");\n    }\n}\n\nfunction createWorker(workerUrl) {\n    var blob = $workerBlob(workerUrl);\n    var URL = window.URL || window.webkitURL;\n    var blobURL = URL.createObjectURL(blob);\n    // calling URL.revokeObjectURL before worker is terminated breaks it on IE Edge\n    return new Worker(blobURL);\n}\n\nvar WorkerClient = function(topLevelNamespaces, mod, classname, workerUrl, importScripts) {\n    this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this);\n    this.changeListener = this.changeListener.bind(this);\n    this.onMessage = this.onMessage.bind(this);\n\n    // nameToUrl is renamed to toUrl in requirejs 2\n    if (require.nameToUrl && !require.toUrl)\n        require.toUrl = require.nameToUrl;\n    \n    if (config.get(\"packaged\") || !require.toUrl) {\n        workerUrl = workerUrl || config.moduleUrl(mod, \"worker\");\n    } else {\n        var normalizePath = this.$normalizePath;\n        workerUrl = workerUrl || normalizePath(require.toUrl(\"ace/worker/worker.js\", null, \"_\"));\n\n        var tlns = {};\n        topLevelNamespaces.forEach(function(ns) {\n            tlns[ns] = normalizePath(require.toUrl(ns, null, \"_\").replace(/(\\.js)?(\\?.*)?$/, \"\"));\n        });\n    }\n\n    this.$worker = createWorker(workerUrl);\n    if (importScripts) {\n        this.send(\"importScripts\", importScripts);\n    }\n    this.$worker.postMessage({\n        init : true,\n        tlns : tlns,\n        module : mod,\n        classname : classname\n    });\n\n    this.callbackId = 1;\n    this.callbacks = {};\n\n    this.$worker.onmessage = this.onMessage;\n};\n\n(function(){\n\n    oop.implement(this, EventEmitter);\n\n    this.onMessage = function(e) {\n        var msg = e.data;\n        switch (msg.type) {\n            case \"event\":\n                this._signal(msg.name, {data: msg.data});\n                break;\n            case \"call\":\n                var callback = this.callbacks[msg.id];\n                if (callback) {\n                    callback(msg.data);\n                    delete this.callbacks[msg.id];\n                }\n                break;\n            case \"error\":\n                this.reportError(msg.data);\n                break;\n            case \"log\":\n                window.console && console.log && console.log.apply(console, msg.data);\n                break;\n        }\n    };\n    \n    this.reportError = function(err) {\n        window.console && console.error && console.error(err);\n    };\n\n    this.$normalizePath = function(path) {\n        return net.qualifyURL(path);\n    };\n\n    this.terminate = function() {\n        this._signal(\"terminate\", {});\n        this.deltaQueue = null;\n        this.$worker.terminate();\n        this.$worker = null;\n        if (this.$doc)\n            this.$doc.off(\"change\", this.changeListener);\n        this.$doc = null;\n    };\n\n    this.send = function(cmd, args) {\n        this.$worker.postMessage({command: cmd, args: args});\n    };\n\n    this.call = function(cmd, args, callback) {\n        if (callback) {\n            var id = this.callbackId++;\n            this.callbacks[id] = callback;\n            args.push(id);\n        }\n        this.send(cmd, args);\n    };\n\n    this.emit = function(event, data) {\n        try {\n            // firefox refuses to clone objects which have function properties\n            // TODO: cleanup event\n            this.$worker.postMessage({event: event, data: {data: data.data}});\n        }\n        catch(ex) {\n            console.error(ex.stack);\n        }\n    };\n\n    this.attachToDocument = function(doc) {\n        if (this.$doc)\n            this.terminate();\n\n        this.$doc = doc;\n        this.call(\"setValue\", [doc.getValue()]);\n        doc.on(\"change\", this.changeListener);\n    };\n\n    this.changeListener = function(delta) {\n        if (!this.deltaQueue) {\n            this.deltaQueue = [];\n            setTimeout(this.$sendDeltaQueue, 0);\n        }\n        if (delta.action == \"insert\")\n            this.deltaQueue.push(delta.start, delta.lines);\n        else\n            this.deltaQueue.push(delta.start, delta.end);\n    };\n\n    this.$sendDeltaQueue = function() {\n        var q = this.deltaQueue;\n        if (!q) return;\n        this.deltaQueue = null;\n        if (q.length > 50 && q.length > this.$doc.getLength() >> 1) {\n            this.call(\"setValue\", [this.$doc.getValue()]);\n        } else\n            this.emit(\"change\", {data: q});\n    };\n\n}).call(WorkerClient.prototype);\n\n\nvar UIWorkerClient = function(topLevelNamespaces, mod, classname) {\n    this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this);\n    this.changeListener = this.changeListener.bind(this);\n    this.callbackId = 1;\n    this.callbacks = {};\n    this.messageBuffer = [];\n\n    var main = null;\n    var emitSync = false;\n    var sender = Object.create(EventEmitter);\n    var _self = this;\n\n    this.$worker = {};\n    this.$worker.terminate = function() {};\n    this.$worker.postMessage = function(e) {\n        _self.messageBuffer.push(e);\n        if (main) {\n            if (emitSync)\n                setTimeout(processNext);\n            else\n                processNext();\n        }\n    };\n    this.setEmitSync = function(val) { emitSync = val; };\n\n    var processNext = function() {\n        var msg = _self.messageBuffer.shift();\n        if (msg.command)\n            main[msg.command].apply(main, msg.args);\n        else if (msg.event)\n            sender._signal(msg.event, msg.data);\n    };\n\n    sender.postMessage = function(msg) {\n        _self.onMessage({data: msg});\n    };\n    sender.callback = function(data, callbackId) {\n        this.postMessage({type: \"call\", id: callbackId, data: data});\n    };\n    sender.emit = function(name, data) {\n        this.postMessage({type: \"event\", name: name, data: data});\n    };\n\n    config.loadModule([\"worker\", mod], function(Main) {\n        main = new Main[classname](sender);\n        while (_self.messageBuffer.length)\n            processNext();\n    });\n};\n\nUIWorkerClient.prototype = WorkerClient.prototype;\n\nexports.UIWorkerClient = UIWorkerClient;\nexports.WorkerClient = WorkerClient;\nexports.createWorker = createWorker;\n\n\n});\n"
  },
  {
    "path": "lib/ace/worker/worker_test.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n// The loading of ace/worker/worker is complicated, because when we need to load\n// it via RequireJS, it needs a shim to make it into a AMD-module.\n// When using the AMD-loader it's just works, so we just it load the file now\n\nrequire(\"amd-loader\");\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar assert = require(\"../test/assertions\");\nvar worker = require(\"./worker\");\n\nmodule.exports = {\n    setUp : function() {\n        // And define a few mock dependency modules\n        worker.define(\"depA\", [], function(require, exports, module) {\n            module.exports = 'dependency A';\n        });\n        worker.define(\"depB\", [], function(require, exports, module) {\n            module.exports = 'dependency B';\n        });\n    },\n\n    \"test: define() with no dependencies, and CommonJS-compatability require()-calls\" : function() {\n        // We want to be able to call define without an id or deps, but\n        // since we aren't loading an external file, we must explicitly give\n        // it some kind of id, in this case 'test1'.\n        worker.require.id = 'test1';\n        // Now define out module\n        worker.define(function(require, exports, module) {\n            var depA = require(\"depA\");\n            var depB = require(\"depB\");\n            assert.equal(\"dependency A\", depA);\n            assert.equal(\"dependency B\", depB);\n            module.exports = 'test 1';\n        });\n        // And then try and require it\n        var res = worker.require(\"test1\");\n        assert.equal(\"test 1\", res);\n    },\n    \"test: define() with dependencies\" : function() {\n        // We want to be able to call define without an id, but since we aren't\n        // loading an external file, we must explicitly give it some kind of\n        // id, in this case 'test2'.\n        worker.require.id = 'test2';\n        // Now define our module\n        worker.define(['depA', 'depB'], function(depA, depB) {\n            assert.equal(\"dependency A\", depA);\n            assert.equal(\"dependency B\", depB);\n            return 'test 2';\n        });\n        // And then try and require it\n        var res = worker.require(\"test2\");\n        assert.equal(\"test 2\", res);\n    },\n    \"test: define() used require, exports and module as a dependency\": function() {\n        // We want to be able to call define without an id, but since we aren't\n        // loading an external file, we must explicitly give it some kind of\n        // id, in this case 'test3'.\n        worker.require.id = 'test3';\n        // Now define our module\n        worker.define(['require', 'exports', 'module', 'depA', 'depB'], function(require, exports, module) {\n            var depA = require(\"depA\");\n            var depB = require(\"depB\");\n            assert.equal(\"dependency A\", depA);\n            assert.equal(\"dependency B\", depB);\n            module.exports = 'test 3';\n        });\n        // And then try and require it\n        var res = worker.require(\"test3\");\n        assert.equal(\"test 3\", res);\n    },\n    \"test: define() with a mix of require and actual dependecies\": function() {\n        // We want to be able to call define without an id, but since we aren't\n        // loading an external file, we must explicitly give it some kind of\n        // id, in this case 'test4'.\n        worker.require.id = 'test4';\n        // Now define our module\n        worker.define(['depA', 'require'], function(depA, require) {\n            var depB = require(\"depB\");\n            assert.equal(\"dependency A\", depA);\n            assert.equal(\"dependency B\", depB);\n            return 'test 4';\n        });\n        // And then try and require it\n        var res = worker.require(\"test4\");\n        assert.equal(\"test 4\", res);\n    }\n};\n\n});\n\nif (typeof module !== \"undefined\" && module === require.main) {\n    require(\"asyncjs\").test.testcase(module.exports).exec();\n}"
  },
  {
    "path": "package.json",
    "content": "{\n    \"name\": \"ace\",\n    \"description\": \"Ajax.org Code Editor is a full featured source code highlighting editor that powers the Cloud9 IDE\",\n    \"version\": \"1.2.9\",\n    \"homepage\": \"http://github.com/ajaxorg/ace\",\n    \"engines\": {\"node\": \">= 0.6.0\"},\n    \"author\": \"Fabian Jakobs <fabian@c9.io>\",\n    \"main\": \"lib/ace\",\n    \"repository\": {\n        \"type\": \"git\",\n         \"url\": \"http://github.com/ajaxorg/ace.git\"\n    },\n    \"devDependencies\": {\n        \"asyncjs\": \"0.0.x\",\n        \"jsdom\": \"9.3.0\",\n        \"amd-loader\": \"~0.0.4\",\n        \"dryice\": \"0.4.11\",\n        \"architect-build\": \"https://github.com/c9/architect-build/tarball/17268dce65\"\n    },\n    \"mappings\": {\n        \"ace\": \".\"\n    },\n    \"licenses\": [{\n        \"type\": \"BSD New\",\n        \"url\": \"http://opensource.org/licenses/BSD-3-Clause\"\n    }],\n    \"directories\": {\n        \"lib\": \"lib/ace\"\n    },\n    \"scripts\": {\n        \"start\": \"node static.js\",\n        \"test\": \"node lib/ace/test/all.js\",\n        \"lint\": \"eslint 'lib/ace/**/*.js'\"\n    }\n}\n"
  },
  {
    "path": "static.js",
    "content": "#!/usr/bin/env node\n\nvar http = require(\"http\")\n  , path = require(\"path\")\n  , url = require(\"url\")\n  , fs = require(\"fs\")\n  , port = process.env.PORT || 8888\n  , ip = process.env.IP || \"0.0.0.0\";\n\nfunction lookupMime(filename) {\n    var ext = /[^\\/\\\\.]*$/.exec(filename)[0];\n    return {\n        js: \"application/javascript\",\n        ico: \"image/x-icon\",\n        css: \"text/css\",\n        svg: \"image/svg+xml\",\n        png: \"image/png\",\n        jpg: \"image/jpg\",\n        html: \"text/html\",\n        jpeg: \"image/jpeg\"\n    }[ext];\n}\n  \n// compatibility with node 0.6\nif (!fs.exists)\n    fs.exists = path.exists;\n\nvar allowSave = process.argv.indexOf(\"--allow-save\") != -1;\nif (allowSave)\n    console.warn(\"writing files from browser is enabled\");\n\nhttp.createServer(function(req, res) {\n    var uri = unescape(url.parse(req.url).pathname);\n    var filename = path.join(process.cwd(), uri);\n\n    if (req.method == \"OPTIONS\") {\n        writeHead(res, 200);\n        return res.end();\n    }\n    \n    if (req.method == \"PUT\") {\n        if (!allowSave)\n            return error(res, 404, \"Saving not allowed pass --allow-save to enable\");\n        return save(req, res, filename);\n    }\n\n    fs.exists(filename, function(exists) {\n        if (!exists)\n            return error(res, 404, \"404 Not Found\\n\" + filename);\n\n        if (fs.statSync(filename).isDirectory())\n            return serveDirectory(filename, uri, req, res);\n\n        fs.readFile(filename, \"binary\", function(err, file) {\n            if (err) {\n                writeHead(res, 500, \"text/plain\");\n                res.write(err + \"\\n\");\n                res.end();\n                return;\n            }\n\n            var contentType = lookupMime(filename);\n            writeHead(res, 200, contentType);\n            res.write(file, \"binary\");\n            res.end();\n        });\n    });\n}).listen(port, ip);\n\nfunction writeHead(res, code, contentType) {\n    var headers = {\n        \"Access-Control-Allow-Origin\": \"file://\",\n        \"Access-Control-Allow-Methods\": \"PUT, GET, OPTIONS, HEAD\"\n    };\n    headers[\"Content-Type\"] = contentType || \"text/plain\";\n    res.writeHead(code, headers);\n}\n\nfunction serveDirectory(filename, uri, req, res) {\n    var files = fs.readdirSync(filename);\n    writeHead(res, 200, \"text/html\");\n    \n    files.push(\"..\", \".\");\n    var html = files.map(function(name) {\n        try {\n            var stat = fs.statSync(filename + \"/\" + name);\n        } catch(e) {}\n        var index = name == \".\" ? 2 : name == \"..\" ? 3 : stat.isDirectory() ? 1 : 0;\n        return { name: name, index: index, size: stat.size };\n    }).filter(Boolean).sort(function(a, b) {\n        if (a.index == b.index)\n            return a.name.localeCompare(b.name);\n        return b.index - a.index;\n    }).map(function(stat) {\n        var name = stat.name;\n        if (stat.index) name += \"/\";\n        var size = \"\"\n        if (!stat.size) size = \"\"\n        else if (stat.size < 1024) size = stat.size + \"b\";\n        else if (stat.size < 1024 * 1024) size = (stat.size / 1024).toFixed(2) + \"kb\";\n        else size = (stat.size / 1024 / 1024).toFixed(2) + \"mb\";\n        return \"<tr>\"\n            + \"<td>&nbsp;&nbsp;\" + size + \"&nbsp;&nbsp;</td>\"\n            + \"<td><a href='\" + name + \"'>\" + name + \"</a></td>\"\n        + \"</tr>\";\n    }).join(\"\");\n    html = \"<table>\" + html + \"</table>\"\n\n    res._hasBody && res.write(html);\n    res.end();\n}\n\nfunction error(res, status, message, error) {\n    console.error(error || message);\n    writeHead(res, status, \"text/plain\");\n    res.write(message);\n    res.end();\n}\n\nfunction save(req, res, filePath) {\n    var data = \"\";\n    req.on(\"data\", function(chunk) {\n        data += chunk;\n    });\n    req.on(\"error\", function() {\n        error(res, 404, \"Could't save file\");\n    });\n    req.on(\"end\", function() {\n        try {\n            fs.writeFileSync(filePath, data);\n        }\n        catch (e) {\n            return error(res, 404, \"Could't save file\", e);\n        }\n        writeHead(res, 200);\n        res.end(\"OK\");\n        console.log(\"saved \", filePath);\n    });\n}\n\nfunction getLocalIps() {\n    var os = require(\"os\");\n\n    var interfaces = os.networkInterfaces ? os.networkInterfaces() : {};\n    var addresses = [];\n    for (var k in interfaces) {\n        for (var k2 in interfaces[k]) {\n            var address = interfaces[k][k2];\n            if (address.family === \"IPv4\" && !address.internal) {\n                addresses.push(address.address);\n            }\n        }\n    }\n    return addresses;\n}\n\nconsole.log(\"http://\" + (ip == \"0.0.0.0\" ? getLocalIps()[0] : ip) + \":\" + port);\n\n"
  },
  {
    "path": "tool/Readme.md",
    "content": "Helper Scripts for Ace\n======================\n\nTo use this you need to install node.js. and run `npm install` in this directory.\n\n\n# add_mode.js\n\n  Run \n```\nnode add_mode.js ModeName \"extension1|extension2|^FullName\"\n```\n  to create all the files needed for a new mode named `ModeName` \n  this adds stubs for:\n    `ace/mode/mode_name.js`\n    `ace/mode/mode_name_hightlight_rules.js`\n    `ace/snippets/mode_name.js`\n    `ace/demo/kitchen_sink/docs/mode_name.extension1`\n  and adds entry for the new mode to `ace/ext/modelist.js`\n \n \n# tmlanguage.js\n\n```\nnode tmlanguage.js ./templates/dummy.JSON-tmLanguage\n```"
  },
  {
    "path": "tool/add_mode.js",
    "content": "var fs = require('fs');\nvar lib = require('./lib');\nvar path = require('path');\n\nfunction main(displayName, extRe) {\n    var name = lib.snakeCase(displayName).replace(/[^\\w]/g, \"\");\n\n    /** demo **/\n    var demoFileExt = extRe.split(\"|\")[0] || name;\n    var demoFileName = demoFileExt[0] == \"^\" ? demoFileExt.substr(1) : name + \".\" + demoFileExt;\n    var demoFilePath = lib.AceRoot + \"demo/kitchen-sink/docs/\" + demoFileName;\n    fs.writeFileSync(demoFilePath, \"TODO add a nice demo!\\nTry to keep it short!\", \"utf8\");\n    console.log(\"Created demo file at: \" + path.normalize(demoFilePath));\n\n    /** mode **/\n    var template = fs.readFileSync(__dirname + \"/templates/mode.js\", \"utf8\");\n    var modePath = lib.AceLib + \"ace/mode/\" + name + \".js\";\n    var text = lib.fillTemplate(template, {\n        languageHighlightFilename: name,\n        languagename: name,\n        lineCommentStart: \"TODO\",\n        blockCommentStart: \"TODO\",\n        blockCommentEnd: \"TODO\"\n    });\n    fs.writeFileSync(modePath, text);\n    console.log(\"Created mode file at: \" + path.normalize(modePath));\n\n    /** highlight rules **/\n    template = fs.readFileSync(__dirname + \"/templates/highlight_rules.js\", \"utf8\");\n    var hlPath = lib.AceLib + \"ace/mode/\" + name + \"_highlight_rules.js\";\n    template = template.replace(/\\/\\* THIS[\\s\\S]*?\\*{3}\\/\\s*/, \"\");\n    text = lib.fillTemplate(template, {\n        language: name,\n        languageTokens: '{\\n\\\n            start: [{\\n\\\n                token: \"string.start\",\\n\\\n                regex: \\'\"\\',\\n\\\n                next: \"qstring\"\\n\\\n            }],\\n\\\n            qstring: [{\\n\\\n                token: \"escape\",\\n\\\n                regex: /\\\\\\\\./,\\n\\\n            }, {\\n\\\n                token: \"string.end\",\\n\\\n                regex: \\'\"\\',\\n\\\n                next: \"start\"\\n\\\n            }],\\n\\\n        }'\n    });\n    fs.writeFileSync(hlPath, text);\n    console.log(\"Created mode file at: \" + path.normalize(hlPath));\n\n    /** snippets **/\n    template = fs.readFileSync(__dirname + \"/templates/snippets.js\", \"utf8\");\n    var snipetsPath = lib.AceLib + \"ace/snippets/\" + name + \".js\";\n    text = lib.fillTemplate(template, {\n        languagename: name,\n        snippets: \"\"\n    });\n    fs.writeFileSync(snipetsPath, text);\n    console.log(\"Created snippets file at: \" + path.normalize(snipetsPath));\n\n    /** modelist **/\n    var modelistPath = lib.AceLib + \"ace/ext/modelist.js\";\n    var modelist = fs.readFileSync(modelistPath, \"utf8\").replace(/\\r\\n?/g, \"\\n\");\n    modelist = modelist.replace(/(supportedModes = {\\n)([\\s\\S]*?)(\\n^};)/m, function(_, m1, m2, m3) {\n        var langs = m2.split(/,\\n/);\n        var unsorted = [];\n        for (var i = langs.length; i--;) {\n            if (/\\s*\\/\\//.test(langs[i])) {\n                unsorted = langs.splice(i, langs.length);\n                break;\n            }\n        }\n        console.log(unsorted)\n        var offset = langs[0].trim().indexOf(\"[\");\n        var padding = Array(Math.max(offset - displayName.length - 1, 0) + 1).join(\" \");\n        var newLang = \"    \" + displayName + \":\" + padding + \"[\\\"\" + extRe + \"\\\"]\";\n        langs = langs.concat(newLang).map(function(x) {\n            return {\n                value: x,\n                id: x.match(/[^\"':\\s]+/)[0].toLowerCase()\n            };\n        });\n        langs[langs.length - 1].isNew = true;\n        \n        langs = langs.filter(function(x) {\n            console.log(x.id, displayName)\n            return x.id != displayName.toLowerCase() || x.isNew;\n        });\n        langs = langs.sort(function(a, b) {\n            return a.id.localeCompare(b.id);\n        }).map(function(x) {\n            return x.value;\n        });\n        \n        return m1 + langs.concat(unsorted).join(\",\\n\") + m3;\n    });\n    fs.writeFileSync(modelistPath, modelist, \"utf8\");\n    console.log(\"Updated modelist at: \" + path.normalize(modelistPath));\n}\n\nif (!module.parent) {\n    var args = process.argv.slice(2);\n    var displayName = args[0];\n    var extRe = args[1];\n    if (!displayName || ! extRe) {\n        console.log(\"Usage: ModeName ext1|ext2\");\n        process.exit(1);\n    }\n    main(displayName, extRe);\n} else {\n    module.exports = main;\n}\n\n"
  },
  {
    "path": "tool/lib.js",
    "content": "var plist = require(\"plist\");\nvar util = require(\"util\");\nvar url = require(\"url\");\nvar cson = require(\"cson\");\n\nvar https = require(\"https\");\nvar http = require(\"http\");\n\nexports.parsePlist = function(xmlOrJSON, callback) {\n    var json;\n    if (xmlOrJSON[0] == \"<\") {\n        plist.parseString(xmlOrJSON, function(_, result) {\n            json = result[0];\n        });\n    } else {\n        try {\n            xmlOrJSON = xmlOrJSON.replace(\n                /(\"(?:\\\\.|[^\"])*\")|(?:,\\s*)+([\\]\\}])|(\\w+)\\s*:|([\\]\\}]\\s*[\\[\\{])|(\\/\\/.*|\\/\\*(?:[^\\*]|\\*(?=[^\\/]))*?\\*\\/)/g,\n                function(_, str, extraComma, noQuote, missingComma, comment) {\n                    if (comment)\n                        return \"\";\n                    if (missingComma)\n                        return missingComma[0] + \",\" + missingComma.slice(1);\n                    return str || extraComma || '\"' + noQuote + '\":';\n            });\n            json = JSON.parse(xmlOrJSON);\n        } catch(e) {\n            json = cson.parse(xmlOrJSON);\n        }\n    }\n    callback && callback(json);\n    return json;\n};\n\n\nexports.formatJSON = function(object, initialIndent) {\n    return JSON.stringify(object, null, 4).replace(/^/gm, initialIndent||\"\");\n};\n\nexports.formatJS = function(object, initialIndent) {\n    return formatJS(object, 4, initialIndent);\n};\n\nfunction formatJS(object, indent, initialIndent) {\n    if (typeof  indent == \"number\")\n        indent = Array(indent + 1).join(\" \");\n    \n    function $format(buffer, totalIndent, state, o) {\n        if (typeof o != \"object\" || !o) {\n            if (typeof o == \"string\")\n                buffer.push(JSON.stringify(o));\n            else\n                buffer.push(\"\" + o);\n        }\n        else if (Array.isArray(o)) {\n            buffer.push(\"[\")\n            \n            var len = totalIndent.length\n            var oneLine = true;\n            for (var i = 0; i < o.length; i++) {\n                if (typeof o[i] == \"string\") {\n                    len += o[i].length + 2\n                } else if (!o[i]) {\n                    len += (o[i] + \"\").length\n                } else {\n                    oneLine = false;\n                    break;\n                }\n                len += 2;\n                if (len > 60) {\n                    oneLine = false;\n                    break;\n                }\n            }\n            \n            for (var i = 0; i < o.length; i++) {\n                if (o[i] && typeof o[i] == \"object\") {\n                    $format(buffer, totalIndent, state, o[i]);\n                    if (i < o.length - 1)\n                        buffer.push(\", \");\n                } else {\n                    if (oneLine)\n                        i && buffer.push(\" \");\n                    else\n                        buffer.push(\"\\n\", totalIndent + indent)\n                    $format(buffer, totalIndent + indent, state, o[i]);\n                    if (i < o.length - 1)\n                        buffer.push(\",\");\n                }\n                \n            }\n            if (!oneLine && buffer[buffer.length - 1] != \"}\")\n                buffer.push(\"\\n\" + totalIndent)\n            buffer.push(\"]\")\n        }\n        else {\n            var keys = Object.keys(o);\n            buffer.push(\"{\", \"\\n\");\n            for (var i = 0; i < keys.length; i++) {\n                buffer.push(totalIndent + indent);\n                if (/^\\w+$/.test(keys[i]))\n                    buffer.push(keys[i]);\n                else\n                    buffer.push(JSON.stringify(keys[i]));\n                buffer.push(\": \")\n\n                if (keys[i] == \"regex\" && typeof o[keys[i]] == \"string\") {\n                    try {\n                        var re = new RegExp(o[keys[i]]);\n                        buffer.push(\"/\" + re.source.replace(/\\\\.|\\//g, function(f) {\n                            return f.length == 1 ? \"\\\\\" + f : f;\n                        }) + \"/\");\n                    } catch(e) {\n                        $format(buffer, totalIndent + indent, state, o[keys[i]]);\n                    }\n                } else {\n                    $format(buffer, totalIndent + indent, state, o[keys[i]]);\n                }\n                \n                if (i < keys.length - 1)\n                    buffer.push(\",\", \"\\n\");\n            }\n            buffer.push(\"\\n\", totalIndent, \"}\");\n        }\n    }\n    var buffer = [];\n    $format(buffer, initialIndent || \"\", {}, object);\n    return buffer.join(\"\");\n}\n\nexports.fillTemplate = function(template, replacements) {\n    return template.replace(/%(.+?)%/g, function(str, m) {\n        return replacements[m] || \"\";\n    });\n};\n\nexports.hyphenate = function(str) {\n    return str.replace(/([A-Z])/g, \"-$1\").replace(/[_\\s\\-]+/g, \"-\").toLowerCase();\n};\n\nexports.camelCase = function(str) {\n    return str.replace(/[\\-_\\s]+(.?)/g, function(x, y) {return y.toUpperCase()});\n};\n\nexports.snakeCase = function(str) {\n    return str.replace(/([a-z])([A-Z])/g, \"$1-$2\").replace(/[_\\s\\-]+/g, \"_\").toLowerCase();\n};\n\nexports.quoteString = function(str) {\n    return '\"' + str.replace(/\\\\/, \"\\\\\\\\\").replace(/\"/g, '\\\\\"').replace(/\\n/g, \"\\\\\\n\") + '\"';\n};\n\n\nexports.restoreJSONComments = function(objStr) {\n    return objStr.replace(/^(\\s*)comment: '(.*)'/gm, function(_, i, c) {\n        return i + \"//\" +  c.replace(/\\\\n(\\\\t)*/g, \"\\n\" + i + \"//\") + \"\\n\" + i;\n    }).replace(/ \\/\\/ ERROR/g, '\", // ERROR');\n};\n\n\nexports.download = function(href, callback) {\n\tvar options = url.parse(href);   \n\tvar protocol = options.protocol === \"https:\" ? https : http;\n\tconsole.log(\"connecting to \" + options.host + \" \" + options.path);\n\tvar request = protocol.get(options, function(res) {\n\t\tvar data = \"\";\n\t\tres.setEncoding(\"utf-8\");\n\n\t\tres.on(\"data\", function(chunk) {\n\t\t\tdata += chunk;\n\t\t});\n\n\t\tres.on(\"end\", function(){\n\t\t\tcallback(data);\n\t\t});\n\t});\n};\n\n\nexports.AceRoot = __dirname + \"/../\";\nexports.AceLib = __dirname + \"/../lib/\";\n\n"
  },
  {
    "path": "tool/mode_creator.html",
    "content": "<!DOCTYPE html>\n\n<html lang=\"en\">\n<head>\n    <base href=\"../\">\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n    <title>Ace Mode Creator</title>\n    <meta name=\"author\" content=\"Harutyun Amirjanyan\">\n    <style type=\"text/css\" >\n        body, html {\n            overflow: hidden;\n            height: 100%;\n            width: 100%;\n            margin: 0;\n            padding: 0;\n        }\n\n        #header {\n            border-bottom: solid 1px;\n        }\n        .separator-h {\n            padding: 0 10px;\n        }\n        #closeBtn {\n            background: rgba(245, 146, 146, 0.5);\n            border: 1px solid #F48A8A;\n            border-radius: 50%;\n            padding: 7px;\n            position: absolute;\n            right: -8px;\n            top: -8px;\n            z-index: 1000;\n        }\n        #closeBtn:hover {\n            background: rgba(245, 146, 146, 0.9);\n        }\n        #console{\n            /border: 1px solid lightblue;\n            bottom: 0;\n            height: 80px;\n            margin: 0 4%;\n            position: absolute;\n            width: 92%;\n            z-index: 1000;\n            box-shadow: 0 0 1px 2px gray\n        }\n        #consoleEditor{\n            height: 100%;\n            position: relative;\n            width: 100%;\n        }\n    </style>\n    <link href=\"../doc/site/images/favicon.ico\" rel=\"icon\" type=\"image/x-icon\">\n</head>\n<body>\n\n<div id=\"header\">\n    <label for=\"modeEl\">mode</label>\n    <select id=\"modeEl\" size=\"1\"></select>\n    <input type=\"button\" value=\"&#10227;\" title=\"sync\" id=\"syncToMode\"></select>\n    <span id=\"tablist\"></span>\n    <input type=\"button\" value=\"Save\" id=\"saveButton1\"></select>\n    <span class=\"separator-h\"></span>\n    <label for=\"autorunEl\">live preview</label>\n    <input type=\"checkbox\" label=\"autorun\" id=\"autorunEl\" checked>\n    <span class=\"separator-h\"></span>\n    <input type=\"button\" value=\"measure speed\" id=\"perfTest\"></select>\n\n\n    <div style='float:right'>\n        <label for=\"themeEl\">Theme</label>\n        <select id=\"themeEl\" size=\"1\" value=\"textmate\"></select>\n        <span class=\"separator-h\"></span>\n        <input type=\"button\" value=\"Save\" id=\"saveButton2\"></select>\n        <label for=\"doc\">Document</label>\n        <select id=\"doc\" size=\"1\"></select>\n    </div>\n</div>\n<div id=\"editor\"></div>\n<div id=\"console\" style=\"display:none\">\n    <span id=\"closeBtn\" onclick=\"this.parentNode.style.display='none'\"></span>\n    <div id=\"consoleEditor\"></div>\n</div>\n\n\n<script type=\"text/javascript\">\n  var require = {\n      baseUrl: window.location.protocol + \"//\" + window.location.host + window.location.pathname.split(\"/\").slice(0, -1).join(\"/\"),\n      paths: {\n          ace: \"../lib/ace\",\n          demo: \"../demo\",\n          tool: \"../tool\"\n      }\n  };\n</script>\n<script src=\"./demo/kitchen-sink/require.js\" data-main=\"mode_creator\"></script>\n\n\n\n</body>\n</html>"
  },
  {
    "path": "tool/mode_creator.js",
    "content": "define(function(require, exports, module) {\n\n/** creates globals intentionally to make things easily accessible from console **/\n\nrequire(\"ace/ext/language_tools\");\nrequire(\"ace/config\").setDefaultValues(\"editor\", {\n    enableBasicAutocompletion: true,\n    enableSnippets: true\n});\nvar net = require(\"ace/lib/net\");\nvar Range = require(\"ace/range\").Range;\nvar util = require(\"demo/kitchen-sink/util\");\nvar layout = require(\"demo/kitchen-sink/layout\");\nvar modelist = require(\"ace/ext/modelist\");\nvar doclist = require(\"demo/kitchen-sink/doclist\");\nvar TokenTooltip = require(\"demo/kitchen-sink/token_tooltip\").TokenTooltip;\n\nvar EditSession = require(\"ace/edit_session\").EditSession;\nvar UndoManager = require(\"ace/undomanager\").UndoManager;\n\nvar DebugTokenizer = require(\"ace/tokenizer_dev\").Tokenizer;\nvar Tokenizer = require(\"ace/tokenizer\").Tokenizer;\n\n// createEditor\nvar splitEditor = window.splitEditor = util.createSplitEditor(\"editor\");\n\nvar editor1 = window.editor1 = splitEditor.editor0;\nvar editor2 = window.editor2 = splitEditor.editor1;\nnew TokenTooltip(editor2);\n\nvar timeout = null;\nvar schedule = function() {\n    if (timeout != null) {\n        clearTimeout(timeout);\n    }\n    timeout = setTimeout(run, 800);\n};\n\n\nvar setAutorunEnabled = function(val) {\n    if (val)\n        editor1.on('change', schedule);\n    else\n        editor1.removeEventListener('change', schedule);\n};\n\nutil.bindCheckbox(\"autorunEl\", setAutorunEnabled);\n\n\nvar docEl = document.getElementById(\"doc\");\nutil.fillDropdown(docEl, doclist.docs);\nutil.bindDropdown(\"doc\", function(value) {\n    doclist.loadDoc(value, function(session) {\n        if (session) {\n            editor2.setSession(session);\n            updateSaveButtonState(null, editor2);\n        }\n    });\n});\n\nvar modeEl = document.getElementById(\"modeEl\");\nutil.fillDropdown(modeEl, modelist.modes);\nvar modeSessions = {};\n\nutil.bindDropdown(modeEl, function(value) {\n    if (modeSessions[value]) {\n        editor1.setSession(modeSessions[value]);\n        schedule();\n        return;\n    }\n    var hp = \"./lib/ace/mode/\" + value + \"_highlight_rules.js\";\n    net.get(hp, function(text) {\n        var session = new EditSession(text);\n        session.setUndoManager(new UndoManager());\n\n        modeSessions[value] = session;\n        session.setMode(\"ace/mode/javascript\", function() {\n            if (session.getLine(0).match(/^\\s*\\//))\n                session.toggleFoldWidget(0); // fold licence comment\n        });\n\n        editor1.setSession(modeSessions[value]);\n        updateSaveButtonState(null, editor1);\n        schedule();\n    });\n});\n\ndocument.getElementById(\"syncToMode\").onclick = function() {\n    docEl.value = modelist.modesByName[modeEl.value].desc;\n    docEl.onchange();\n    run();\n};\n\neditor1.saveButton = document.getElementById(\"saveButton1\");\neditor2.saveButton = document.getElementById(\"saveButton2\");\neditor1.saveButton.editor = editor1;\neditor2.saveButton.editor = editor2;\n\neditor1.saveButton.onclick = function() {\n    doclist.saveDoc({\n        path: \"./lib/ace/mode/\" + modeEl.value + \"_highlight_rules.js\",\n        session: editor1.session\n    }, function(err) {\n        handleSaveResult(err, editor1);\n    });\n};\neditor1.commands.bindKey({\n    win: \"Ctrl-S\", mac: \"Cmd-s\"\n}, editor1.saveButton.onclick);\neditor2.saveButton.onclick = function() {\n    doclist.saveDoc(docEl.value, function(err) {\n        handleSaveResult(err, editor2);\n    });\n};\neditor2.commands.bindKey({\n    win: \"Ctrl-S\", mac: \"Cmd-s\"\n}, editor2.saveButton.onclick);\nfunction updateSaveButtonState(e, editor){\n    editor.saveButton.disabled = editor.session.getUndoManager().isClean();\n}\neditor1.on(\"input\", updateSaveButtonState);\neditor2.on(\"input\", updateSaveButtonState);\n\nfunction handleSaveResult(err, editor) {\n    if (err) {\n        return log(\n            \"Write access to this file is disabled.\\n\"+\n            \"To enable saving your changes to disk, clone the Ace repository\\n\"+\n            \"and run the included web server with the --allow-save option\\n\"+\n            \"`node static.js --allow-save` or `static.py --puttable=*`\"\n        );\n    }\n    editor.session.getUndoManager().markClean();\n    updateSaveButtonState(null, editor);\n}\n\ndocument.getElementById(\"perfTest\").onclick = function() {\n    var lines = editor2.session.doc.getAllLines();\n    if (!lines.length)\n        return;\n    while (lines.length < 1000) {\n        lines = lines.concat(lines);\n    }\n\n    var tk = new Tokenizer(currentRules);\n    var testPerf = function(lines, tk) {\n        var state = \"start\";\n        for (var i=0, l = lines.length; i <l; i++) {\n            state = tk.getLineTokens(lines[i], state).state;\n        }\n    };\n\n    var t = performance.now();\n    testPerf(lines, tk);\n    t = t - performance.now(t);\n    log(\"tokenized \" + lines.length + \" lines in \" + t + \" ms\");\n};\n\nutil.fillDropdown(\"themeEl\", {\n    bright: [\n        \"chrome\", \"clouds\", \"crimson_editor\", \"dawn\", \"dreamweaver\", \"eclipse\", \"github\",\n        \"solarized_light\", \"textmate\", \"tomorrow\", \"xcode\"],\n    dark: [ \"clouds_midnight\", \"cobalt\", \"idle_fingers\", \"kr_theme\", \"merbivore\", \"merbivore_soft\",\n        \"mono_industrial\", \"monokai\", \"pastel_on_dark\", \"solarized_dark\",  \"terminal\", \"tomorrow_night\",\n        \"tomorrow_night_blue\", \"tomorrow_night_bright\", \"tomorrow_night_eighties\", \"twilight\", \"vibrant_ink\"]\n});\n\nutil.bindDropdown(\"themeEl\", function(value) {\n    if (!value)\n        return;\n    editor1.setTheme(\"ace/theme/\" + value);\n    editor2.setTheme(\"ace/theme/\" + value);\n});\n\n\nfunction getDeps(src, path) {\n    var deps = [];\n    src.replace(/require\\((['\"])(.*?)\\1/g, function(a,b,c) {\n        if (c[0] == \".\") {\n            var base = path.split(\"/\");\n            c.split(\"/\").forEach(function(part) {\n                if (part == \".\") {\n                    base.pop();\n                } else if (part == \"..\") {\n                    base.pop();\n                    base.pop();\n                } else {\n                    base.push(part);\n                }\n            });\n            c = base.join(\"/\");\n        }\n        deps.push('\"' + c + '\"');\n    });\n\n    return deps;\n}\nfunction run() {\n    var src = editor1.getValue();\n    var path = \"ace/mode/new\";\n    var deps = getDeps(src, path);\n    window.require.undef(path);\n    src = src.replace(\"define(\", 'define(\"' + path +'\", [\"require\",\"exports\",\"module\",' + deps +'],');\n    try {\n        eval(src);\n        require([path], function(e) {\n            try {\n                continueRun(e);\n            } catch(e) {\n                log(e);\n            }\n        }, function(e) {\n            log(e);\n            window.require.undef(path);\n        });\n        hideLog();\n    } catch(e) {\n        log(e);\n    }\n}\nvar currentRules;\nvar continueRun = function(rules) {\n    for (var i in rules) {\n        if (typeof rules[i] == \"function\" && /rules/i.test(i)) {\n            rules = rules[i];\n            break;\n        }\n    }\n    currentRules = new rules().getRules();\n    var Tokenizer = DebugTokenizer;\n    var Mode = require(editor2.session.$mode.$id).Mode;\n    editor2.session.$mode = new Mode();\n    var tk = new Tokenizer(currentRules);\n    editor2.session.$mode.$tokenizer = tk;\n    editor2.session.bgTokenizer.setTokenizer(tk);\n    editor2.renderer.updateText();\n};\n\neditor1.commands.bindKey(\"ctrl-Return\", run);\n\nvar logEditor;\nfunction log(e) {\n    console.log(e);\n    if (!logEditor) {\n        logEditor = util.createEditor(document.getElementById(\"consoleEditor\"));\n        logEditor.session.setMode(\"ace/mode/javascript\");\n        logEditor.session.setUseWorker(false);\n    }\n    logEditor.container.parentNode.style.display = '';\n    logEditor.resize();\n    logEditor.navigateFileEnd(e);\n    logEditor.insert(e + \"\\n\");\n}\nfunction hideLog() {\n    if (logEditor)\n        logEditor.container.parentNode.style.display = 'none';\n}\n\n});\n\n"
  },
  {
    "path": "tool/package.json",
    "content": "{\n  \"name\": \"ace-tools\",\n  \"version\": \"0.1.0\",\n  \"dependencies\": {\n    \"amd-loader\": \"~0.0.4\",\n    \"browser-pack\": \"5.0.1\",\n    \"browserify\": \"10.2.4\",\n    \"cson\": \"3.0.1\",\n    \"css-parse\": \"1.0.3\",\n    \"css-stringify\": \"1.0.3\",\n    \"deps-sort\": \"1.3.9\",\n    \"derequire\": \"2.0.0\",\n    \"plist\": \"1.1.0\"\n  }\n}\n"
  },
  {
    "path": "tool/perf-test.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\"\n   \"http://www.w3.org/TR/html4/strict.dtd\">\n\n<html lang=\"en\">\n<head>\n    <base href=\"..\">\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n    <title>Ace Profile  util</title>\n    <link rel=\"stylesheet\" href=\"demo/kitchen-sink/styles.css\" type=\"text/css\" media=\"screen\" charset=\"utf-8\">\n    <link href=\"../doc/site/images/favicon.ico\" rel=\"icon\" type=\"image/x-icon\">\n</head>\n<body>\n<div id=\"optionsPanel\" style=\"position:absolute;height:100%;width:260px\">\n  <a href=\"http://ajaxorg.github.com/ace/\" >\n    <img id=\"logo\" src=\"demo/kitchen-sink/logo.png\">\n  </a>\n  <div style=\"position: absolute; overflow: hidden; top:80px; bottom:0\">\n  <div style=\"width: 120%; height:100%; overflow-y: scroll\">\n\n  <table id=\"controls\">\n    <tr>\n      <td colspan=\"2\">\n        <label for=\"profile\">profile</label>\n        <input type=\"checkbox\" checked id=\"profile\"></input>\n        <label for=\"timeout\">delay</label>\n        <input id=\"timeout\" type=\"text\" value=\"3\" style=\"width:10em\"></input>\n      </td>\n    </tr>\n    <tr>\n      <td colspan=\"2\">\n        <button onclick = \"start(this.textContent)\">scroll</button>\n        <button onclick = \"start(this.textContent)\">select</button>\n        <button onclick = \"start(this.textContent)\">type</button>\n        <button onclick = \"start(this.textContent)\">selectH</button>\n      </td>\n    </tr>\n    <tr>\n      <td colspan=\"2\">\n        <button onclick = \"start(this.textContent)\">tokenize</button>\n      </td>\n    </tr>\n    <tr>\n      <td>\n        <label for=\"doc\">Document</label>\n      </td><td>\n        <select id=\"doc\" size=\"1\">\n        </select>\n      </td>\n    </tr>\n    <tr>\n      <td >\n        <label for=\"mode\">Mode</label>\n      </td><td>\n        <select id=\"mode\" size=\"1\">\n        </select>\n      </td>\n    </tr>\n    <tr>\n      <td>\n        <label for=\"split\">Split</label>\n      </td><td>\n        <select id=\"split\" size=\"1\">\n          <option value=\"none\">None</option>\n          <option value=\"below\">Below</option>\n          <option value=\"beside\">Beside</option>\n        </select>\n      </td>\n    </tr>\n    <tr>\n      <td >\n        <label for=\"theme\">Theme</label>\n      </td><td>\n        <select id=\"theme\" size=\"1\">\n          <optgroup label=\"Bright\">\n            <option value=\"ace/theme/chrome\">Chrome</option>\n            <option value=\"ace/theme/clouds\">Clouds</option>\n            <option value=\"ace/theme/crimson_editor\">Crimson Editor</option>\n            <option value=\"ace/theme/dawn\">Dawn</option>\n            <option value=\"ace/theme/dreamweaver\">Dreamweaver</option>\n            <option value=\"ace/theme/eclipse\">Eclipse</option>\n            <option value=\"ace/theme/github\">GitHub</option>\n            <option value=\"ace/theme/solarized_light\">Solarized Light</option>\n            <option value=\"ace/theme/textmate\" selected=\"selected\">TextMate</option>\n            <option value=\"ace/theme/tomorrow\">Tomorrow</option>\n            <option value=\"ace/theme/xcode\">XCode</option>\n          </optgroup>\n          <optgroup label=\"Dark\">\n            <option value=\"ace/theme/ambiance\">Ambiance</option>\n            <option value=\"ace/theme/chaos\">Chaos</option>\n            <option value=\"ace/theme/clouds_midnight\">Clouds Midnight</option>\n            <option value=\"ace/theme/cobalt\">Cobalt</option>\n            <option value=\"ace/theme/idle_fingers\">idleFingers</option>\n            <option value=\"ace/theme/kr_theme\">krTheme</option>\n            <option value=\"ace/theme/merbivore\">Merbivore</option>\n            <option value=\"ace/theme/merbivore_soft\">Merbivore Soft</option>\n            <option value=\"ace/theme/mono_industrial\">Mono Industrial</option>\n            <option value=\"ace/theme/monokai\">Monokai</option>\n            <option value=\"ace/theme/pastel_on_dark\">Pastel on dark</option>\n            <option value=\"ace/theme/solarized_dark\">Solarized Dark</option>\n            <option value=\"ace/theme/terminal\">Terminal</option>\n            <option value=\"ace/theme/tomorrow_night\">Tomorrow Night</option>\n            <option value=\"ace/theme/tomorrow_night_blue\">Tomorrow Night Blue</option>\n            <option value=\"ace/theme/tomorrow_night_bright\">Tomorrow Night Bright</option>\n            <option value=\"ace/theme/tomorrow_night_eighties\">Tomorrow Night 80s</option>\n            <option value=\"ace/theme/twilight\">Twilight</option>    \n            <option value=\"ace/theme/vibrant_ink\">Vibrant Ink</option>\n          </optgroup>\n        </select>\n      </td>\n    </tr>\n    <tr>\n      <td>\n        <label for=\"fontsize\">Font Size</label>\n      </td><td>\n        <select id=\"fontsize\" size=\"1\">\n          <option value=\"10px\">10px</option>\n          <option value=\"11px\">11px</option>\n          <option value=\"12px\" selected=\"selected\">12px</option>\n          <option value=\"13px\">13px</option>\n          <option value=\"14px\">14px</option>\n          <option value=\"16px\">16px</option>\n          <option value=\"18px\">18px</option>\n          <option value=\"20px\">20px</option>\n          <option value=\"24px\">24px</option>\n        </select>\n      </td>\n    </tr>\n    <tr>\n      <td>\n        <label for=\"folding\">Code Folding</label>\n      </td><td>\n        <select id=\"folding\" size=\"1\">\n          <option value=\"manual\">manual</option>\n          <option value=\"markbegin\" selected=\"selected\">mark begin</option>\n          <option value=\"markbeginend\">mark begin and end</option>\n        </select>\n      </td>\n    </tr>\n    <tr>\n      <td >\n        <label for=\"keybinding\">Key Binding</label>\n      </td><td>\n        <select id=\"keybinding\" size=\"1\">\n          <option value=\"ace\">Ace</option>\n          <option value=\"vim\">Vim</option>\n          <option value=\"emacs\">Emacs</option>\n          <option value=\"custom\">Custom</option>\n        </select>\n      </td>\n    </tr>\n    <tr>\n      <td >\n        <label for=\"soft_wrap\">Soft Wrap</label>\n      </td><td>\n        <select id=\"soft_wrap\" size=\"1\">\n          <option value=\"off\">Off</option>\n          <option value=\"40\">40 Chars</option>\n          <option value=\"80\">80 Chars</option>\n          <option value=\"free\">Free</option>\n        </select>\n      </td>\n    </tr>\n\n    <tr><td colspan=\"2\">\n    <table id=\"more-controls\">\n    <tr>\n      <td>\n        <label for=\"select_style\">Full Line Selection</label>\n      </td><td>\n        <input type=\"checkbox\" name=\"select_style\" id=\"select_style\" checked>\n      </td>\n    </tr>\n    <tr>\n      <td>\n        <label for=\"highlight_active\">Highlight Active Line</label>\n      </td><td>\n        <input type=\"checkbox\" name=\"highlight_active\" id=\"highlight_active\" checked>\n      </td>\n    </tr>\n    <tr>\n      <td >\n        <label for=\"show_hidden\">Show Invisibles</label>\n      </td><td>\n        <input type=\"checkbox\" name=\"show_hidden\" id=\"show_hidden\" checked>\n      </td>\n    </tr>\n    <tr>\n      <td >\n        <label for=\"display_indent_guides\">Show Indent Guides</label>\n      </td><td>\n        <input type=\"checkbox\" name=\"display_indent_guides\" id=\"display_indent_guides\" checked>\n      </td>\n    </tr>\n    <tr>\n      <td >\n        <label for=\"show_hscroll\">Persistent HScroll</label>\n      </td><td>\n        <input type=\"checkbox\" name=\"show_hscroll\" id=\"show_hscroll\">\n      </td>\n    </tr>\n    <tr>\n      <td >\n        <label for=\"animate_scroll\">Animate scrolling</label>\n      </td><td>\n        <input type=\"checkbox\" name=\"animate_scroll\" id=\"animate_scroll\">\n      </td>\n    </tr>\n    <tr>\n      <td >\n        <label for=\"show_gutter\">Show Gutter</label>\n      </td><td>\n        <input type=\"checkbox\" id=\"show_gutter\" checked>\n      </td>\n    </tr>\n    <tr>\n      <td >\n        <label for=\"show_print_margin\">Show Print Margin</label>\n      </td><td>\n        <input type=\"checkbox\" id=\"show_print_margin\" checked>\n      </td>\n    </tr>\n    <tr>\n      <td >\n        <label for=\"soft_tab\">Use Soft Tab</label>\n      </td><td>\n        <input type=\"checkbox\" id=\"soft_tab\" checked>\n      </td>\n    </tr>\n    <tr>\n      <td >\n        <label for=\"navigate_within_soft_tab\">Navigate within soft tabs</label>\n      </td><td>\n        <input type=\"checkbox\" id=\"navigate_within_soft_tab\">\n      </td>\n    </tr>\n    <tr>\n      <td >\n        <label for=\"highlight_selected_word\">Highlight selected word</label>\n      </td>\n      <td>\n        <input type=\"checkbox\" id=\"highlight_selected_word\" checked>\n      </td>\n    </tr>\n    <tr>\n      <td >\n        <label for=\"enable_behaviours\">Enable Behaviours</label>\n      </td>\n      <td>\n        <input type=\"checkbox\" id=\"enable_behaviours\">\n      </td>\n    </tr>\n    <tr>\n      <td >\n        <label for=\"fade_fold_widgets\">Fade Fold Widgets</label>\n      </td>\n      <td>\n        <input type=\"checkbox\" id=\"fade_fold_widgets\">\n      </td>\n    </tr>\n    <tr>\n      <td >\n        <label for=\"elastic_tabstops\">Enable Elastic Tabstops</label>\n      </td>\n      <td>\n        <input type=\"checkbox\" id=\"elastic_tabstops\">\n      </td>\n    </tr>\n    <tr>\n      <td >\n        <label for=\"isearch\">Incremental Search</label>\n      </td>\n      <td>\n        <input type=\"checkbox\" id=\"isearch\">\n      </td>\n    </tr>\n    <tr>\n      <td >\n        <label for=\"highlight_token\">Show token info</label>\n      </td>\n      <td>\n        <input type=\"checkbox\" id=\"highlight_token\">\n      </td>\n    </tr>\n    <tr>\n      <td >\n        <label for=\"read_only\">Read-only</label>\n      </td>\n      <td>\n        <input type=\"checkbox\" id=\"read_only\">\n      </td>\n    </tr>\n    <tr>\n      <td colspan=\"2\">\n        <input type=\"button\" value=\"Edit Snippets\", onclick=\"env.editSnippets()\">\n      </td>\n    </tr>\n  </table>\n  </td></tr>\n  </table>\n\n  </div>\n  </div>\n</div>\n  <div id=\"editor-container\"></div>\n\n<!--DEVEL-->\n  <script type=\"text/javascript\">\n      var require = {\n          baseUrl: window.location.protocol + \"//\" + window.location.host + window.location.pathname.split(\"/\").slice(0, -1).join(\"/\"),\n          paths: {\n              ace: \"../lib/ace\"\n          }\n      };\n  </script>\n  <script src=\"demo/kitchen-sink/require.js\" data-main=\"../demo/kitchen-sink/demo\" type=\"text/javascript\"></script>\n\n  <script>\n    if (!Date.now) {\n        Date.now = function() { return (new Date()).getTime() };\n    }\n\n\n    var scrollTop, startTime;\n    var timeout, speed, next\n    var editor, shouldProfile;\n\n    function start(testName) {\n        editor = env.editor\n        timeout = parseInt(document.getElementById(\"timeout\").value);\n        shouldProfile = document.getElementById(\"profile\").checked;\n\n        startTime = Date.now()\n        shouldProfile && console.profile()\n\n        speed = 10;\n        next = window[testName + \"Next\"];\n\n        window[testName + \"Start\"] && window[testName + \"Start\"]()\n        setTimeout(next, 1);\n    }\n    function end(){\n        shouldProfile && console.profileEnd()\n        var dt = startTime - Date.now()\n        console.log(dt)\n        ace.cmdLine.setValue(dt+\"\", 1)\n    }\n\n    /*editor.renderer.scrollToY(0);\n    editor.navigateFileStart(0);\n    */\n\n    var scrollNext = function() {\n        var r = editor.renderer\n        for (var i = speed; i--; )\n            r.scrollBy(0, 1)\n        if (r.scrollTop + r.layerConfig.height > r.layerConfig.maxHeight - 20)\n            end()\n        else\n            setTimeout(next, timeout, speed++)\n    }\n\n    var selectNext = function() {\n        var r = editor.renderer\n        for (var i = speed; i-- > 0; )\n            editor.selection.selectDown()\n        if (r.scrollTop + r.layerConfig.height > r.layerConfig.maxHeight - 20)\n            end()\n        else\n            setTimeout(next, timeout, speed+=0.1)\n    }\n\n    var selectHNext = function() {\n        var r = editor.renderer\n        for (var i = speed; i-- > 0; )\n            editor.selection.selectRight()\n        if (r.scrollTop + r.layerConfig.height > r.layerConfig.maxHeight - 20)\n            end()\n        else\n            setTimeout(next, timeout, speed+=0.1)\n    }\n\n    var typeChars = start.toString().split(\"\")\n    var typeNext = function() {\n        var r = editor.renderer\n        for (var i = speed; i--; )\n            editor.insert(typeChars[i % typeChars.length])\n        if (speed == 100)\n            end()\n        else\n            setTimeout(next, timeout, speed++)\n    }\n\n    var tokenizer, state, lines, chunk\n    var tokenizeStart = function() {\n        var b = ace.session.bgTokenizer\n        state = null\n        tokenizer = b.tokenizer\n        lines = b.doc.getAllLines()\n        chunk = 1000\n    }\n    \n    var tokenizeNext = function() {\n        var states = []\n        for (var i = 0, l = lines.length; i < l; i++) {\n            state = tokenizer.getLineTokens(lines[i], state).state\n        }\n        states.push(state)\n        if (speed-- > 3)\n            setTimeout(next, timeout)\n        else\n            end()\n    }\n\n  </script>\n\n</body>\n</html>\n"
  },
  {
    "path": "tool/regexp_tokenizer.js",
    "content": "/***** regexp tokenizer */\nrequire(\"amd-loader\");\nvar lib = require(\"./lib\");\n\nvar Tokenizer = require(lib.AceLib+ \"ace/tokenizer\").Tokenizer;\nvar Tokenizer = require(lib.AceLib + \"ace/tokenizer_dev\").Tokenizer; // todo can't use tokenizer because of max token count\nvar TextHighlightRules = require(lib.AceLib + \"ace/mode/text_highlight_rules\").TextHighlightRules;\n\nvar r = new TextHighlightRules()\nr.$rules = {\n    start: [\n        {token: \"anchor\", regex: /[\\^\\$]|\\\\[bBAZzG]/, merge:false},\n        {token: \"backRef\", regex: /\\\\([1-9]|k(<\\w+\\b[+-]?\\d>|'\\w+\\b[+-]?\\d'))/, merge:false},\n        {include: \"charTypes\", merge:false},\n        {token: \"charclass\", regex: /\\[\\^?/, push: \"charclass\", merge:false},\n        {token: \"alternation\", regex: /\\|/, merge:false},\n        {include: \"quantifiers\", merge:false},\n        {include: \"groups\", merge:false},\n        {include: \"xGroup\", merge:true}\n    ],\n    charTypes: [\n        {token: \"char\", regex: /\\\\([tvnrbfae]|[0-8]{1,3}|x[\\dA-Fa-f]{2}|x7[\\dA-Fa-f]{7})/, merge:false}, // todo \\cx\n        {token: \"charType\", regex: /\\.|\\\\[wWsSdDhH]/, merge:false},\n        {token: \"charProperty\", regex: /\\\\p{\\w+}/, merge:false},\n        {token: \"char\", regex: /\\\\./, merge:false},\n    ],\n    quantifiers: [\n        {token: \"quantifier\", regex: /([?*+]|{\\d+\\b,?\\d*}|{,\\d+})[?+]?/, merge:false}\n    ],\n    charclass: [\n        {include: \"charTypes\", merge:false},\n        {token: \"charclass.start\", regex: /\\[\\^?/, push: \"charclass\", merge:false},\n        {token: \"charclass.end\", regex: /\\]/, next: \"pop\", merge:false}\n    ],\n    groups: [\n        {token: \"group\", regex: /[(]([?](#|[imx\\-]+:?|:|=|!|<=|<!|>|<\\w+>|'\\w+'|))?|[)]/,\n            onMatch: function(val, state, stack) {\n                if (!stack.groupNumber)\n                    stack.groupNumber = 1;\n\n                var isStart = val !== \")\";\n                var t = {depth:0,type: isStart ? \"group.start\" : \"group.end\", value: val};\n                t.groupType = val[2];\n\n                if (val == \"(\") {\n                    t.number = stack.groupNumber++;\n                    t.isGroup = true\n                } else if (t.groupType == \"'\" || (t.groupType == \"<\" && val.slice(-1) == \">\")) {\n                    t.name = val.slice(2, -1)\n                    t.isGroup = true\n                } else if (t.groupType == \":\") {\n                    t.isGroup = true\n                }\n\n                if (t.groupType && val.indexOf(\"x\") != -1) {\n                    var minus = val.indexOf(\"-\");\n                    if (minus == -1 || minus > val.indexOf(\"x\"))\n                        stack.xGroup = t;\n                    else\n                        stack.xGroup = null;\n                } else if (!isStart && stack.xGroup && stack.xGroup == stack[0]) {\n                    if (stack.xGroup.value.slice(-1) == \":\")\n                        stack.xGroup = null;\n                }\n\n                if (isStart) {\n                    if (stack.groupDepth) {\n                        stack[0].hasChildren = true\n                    }\n                    stack.groupDepth = (stack.groupDepth||0)+1;\n                    stack.unshift(t)\n                } else {\n                    stack.groupDepth --;\n                    t.start = stack.shift(t)\n                    t.start.end = t\n                }\n                return [t]\n            }, merge:false\n        }\n    ],\n    xGroup: [\n        {token: \"text\", regex:/\\s+/, onMatch: function(val, state, stack) {\n            return stack.xGroup ? [] : \"text\"\n        }, merge: true},\n        {token: \"text\", regex: /#/, onMatch: function(val, state, stack) {\n            if (stack.xGroup) {\n                this.next = \"comment\";\n                stack.unshift(state);\n                return  [];\n            }\n            this.next = \"\";\n            return \"text\";\n        }, merge: true}\n    ],\n    comment: [{\n        regex: \"[^\\n\\r]*|^\", token: \"\",  onMatch: function(val, state, stack) {\n            this.next = stack.shift();\n            return [];\n        }\n    }]\n}\nr.normalizeRules()\nvar tmReTokenizer = new Tokenizer(r.getRules());\n\nfunction tokenize(str) {\n    return tmReTokenizer.getLineTokens(str).tokens;\n}\n\nfunction toStr(tokens) { return tokens.map(function(x){return x.value}).join(\"\")}\n\n\nexports.tokenize = tokenize;\nexports.toStr = toStr;\nexports.tmReTokenizer = tmReTokenizer;"
  },
  {
    "path": "tool/regexp_tokenizer_test.js",
    "content": "require(\"amd-loader\");\nvar assert = require(\"assert\");\n\nvar tk = require(\"./regexp_tokenizer\");\nvar tokenize = tk.tokenize;\nvar toStr = tk.toStr;\n\nvar logTokens = function(tokens) {\n    tokens.forEach(function(x) {\n        delete x.end\n        delete x.start\n    })\n    console.log(tokens)\n}\n\nassert.equal(toStr(\n    tokenize(\"(?x)c + +\\n\\\n    # comment\\n\\\n    (?-x)  #  (?x:  1 \\n\\\n        (2) [ ]   # a    \\n\\\n        3  4)  c#\"\n    )),    \n    \"(?x)c++(?-x)  #  (?x:1(2)[ ]34)  c#\"\n )\nassert.equal(toStr(\n    tokenize(\"(?x)\\n\\\n        u  # comment\\n\\\n    \")),\n    \"(?x)u\"\n )\n"
  },
  {
    "path": "tool/release.sh",
    "content": "#!/bin/bash\nset -e\n\npause() {\n    while true; do\n        read -p \"$1 \" yn\n        case $yn in\n            [Yy]* ) break;;\n            [Nn]* ) exit;;\n            * ) echo \"Please answer yes or no.\";;\n        esac\n    done\n}\n\n\n\ncd `dirname $0`/..\nSOURCE=`pwd`\n\n# check if build dir is clean\nif ! [ -f build/.git/HEAD ]; then\n    git clone git@github.com:ajaxorg/ace-builds.git build\nfi\npushd build\ngit fetch\nif [ \"$(git rev-parse --revs-only HEAD)\" != \"$(git rev-parse --revs-only refs/remotes/origin/master)\" ]; then \n    echo build directory not clean; \n    exit 1\nfi\nif [  \"$(git ls-files --others --exclude-standard)\" ]; \n    then echo untracked files;\n    git ls-files --others --exclude-standard\n    exit 1\nfi\npopd\n\n# clean untracked files from modes and themes\nwhile read line; do\n    if [ -f \"$line\" ]; then\n        mkdir -p \"_$(dirname \"$line\")\"; \n        echo \"$line\"; \n        mv \"$line\" \"_$line\";\n    fi\ndone <<< \"$(git ls-files --others --exclude-standard lib/ace)\"\n\n\n# show history\ngit checkout refs/remotes/origin/master -- package.json\nCUR_VERSION=`node -e 'console.log(require(\"./package.json\").version)'`\ngit --no-pager log --color --first-parent --oneline v$CUR_VERSION..master | \n    sed -e s\"/^/https:\\/\\/github.com\\/ajaxorg\\/ace\\/commit\\//\"\necho \"current version is $CUR_VERSION\"\n\n# get new version number\nVERSION_NUM=;\nuntil [[ \"$VERSION_NUM\" =~ ^[0-9]+\\.[0-9]+\\.[0-9]+$ ]] ; do\n    read -p \"enter version number for the build \" VERSION_NUM\ndone\n\n# update version number everywhere\nnode -e \"\n    var fs = require('fs');\n    var version = '$VERSION_NUM';\n    function replaceVersion(str) {\n        return str.replace(/(['\\\"]?version['\\\"]?\\s*[:=]\\s*['\\\"])[\\\\d.\\\\w\\\\-]+(['\\\"])/, function(_, m1, m2) {\n            return m1 + version + m2;\n        });\n    }\n    function update(path, replace) {\n        var pkg = fs.readFileSync(path, 'utf8');\n        pkg = (replace || replaceVersion)(pkg);\n        fs.writeFileSync(path, pkg, 'utf8');\n    }\n    update('package.json');\n    update('build/package.json');\n    update('./lib/ace/ace.js');\n    update('ChangeLog.txt', function(str) {\n        var date='\"`date +%Y.%m.%d`\"';\n        return date + ' Version ' + version + '\\n' + str.replace(/^\\d+.*/, '').replace(/^\\n/, '');\n    });\n\"\n\npause \"versions updated. do you want to start build script? [y/n]\"\n\nnode Makefile.dryice.js full\ncd build\ngit add .\ngit commit --all -m \"package `date +%d.%m.%y`\"\n\n\necho \"build task completed.\"\npause \"continue creating the tag for v$VERSION_NUM [y/n]\"\nif [[ ${VERSION_NUM} != *\"-\"* ]]; then\n    git tag \"v\"$VERSION_NUM\nfi\n\npause \"continue pushing to github? [y/n]\"\n\ngit push --progress --tags \"origin\" HEAD:gh-pages HEAD:master\n\necho \"build repository updated\"\n\npause \"continue update ace repo? [y/n]\"\ncd ..\n\ngit commit -a -m \"release v$VERSION_NUM\"\n\necho \"new commit added\"\npause \"continue creating the tag for v$VERSION_NUM [y/n]\"\nif [[ ${VERSION_NUM} != *\"-\"* ]]; then\n    git tag \"v\"$VERSION_NUM\nfi\n\npause \"continue pushing to github? [y/n]\"\n\ngit push --progress --tags \"origin\" HEAD:gh-pages HEAD:master\necho \"All done!\"\npause \"May I go now? [y/n]\"\n\n"
  },
  {
    "path": "tool/templates/dummy.JSON-tmLanguage",
    "content": "// [PackageDev] target_format: plist, ext: tmLanguage\n{ \n\t\"name\": \"Dummy\",\n  \t\"scopeName\": \"source.dummy\",\n  \t\"fileTypes\": [\"dummy\"],\n  \t\"patterns\": [\n\t    {\n            \"include\": \"#string\"\n        }, {\n            \"include\": \"#escapes\"\n        }\n  \t],\n  \t\"repository\": {\n  \t\t\"escapes\": {\n            \"patterns\": [\n  \t\t\t\t{\n                    \"match\": \"\\\\\\\\[nrt\\\\\\\\\\\\$\\\\\\\"']\", \n                    \"name\": \"keyword.dummy\"\n                }\n            ]\n        },\n        \"string\": {\n        \t\"beginCaptures\": {\n                \"0\": {\n                    \"name\": \"punctuation.definition.string.begin.dummy\"\n                }\n            }, \n            \"endCaptures\": {\n                \"0\": {\n                    \"name\": \"punctuation.definition.string.end.dummy\"\n                }\n            }, \n            \"contentName\": \"meta.string-contents.quoted.double.dummy\", \n            \"name\": \"string.quoted.double.dummy\", \n            \"end\": \"'''\", \n            \"begin\": \"'''\", \n            \"patterns\": [\n                {\n                    \"include\": \"#escapes\"\n                }\n            ], \n            \"comment\": \"This is a comment\"\n        }\n  \t}\n}"
  },
  {
    "path": "tool/templates/highlight_rules.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/* This file was autogenerated from %name% (uuid: %uuid%) */\n/****************************************************************************************\n * IT MIGHT NOT BE PERFECT ...But it's a good start from an existing *.tmlanguage file. *\n * fileTypes                                                                            *\n ****************************************************************************************/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar %language%HighlightRules = function() {\n    // regexp must not have capturing parentheses. Use (?:) instead.\n    // regexps are ordered -> the first match is used\n\n    this.$rules = %languageTokens%\n    \n    this.normalizeRules();\n};\n\n%language%HighlightRules.metaData = %metaData%\n\n\noop.inherits(%language%HighlightRules, TextHighlightRules);\n\nexports.%language%HighlightRules = %language%HighlightRules;\n});"
  },
  {
    "path": "tool/templates/mode.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2012, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\ndefine(function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar %language%HighlightRules = require(\"./%languageHighlightFilename%_highlight_rules\").%language%HighlightRules;\n// TODO: pick appropriate fold mode\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = %language%HighlightRules;\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    // this.lineCommentStart = \"%lineCommentStart%\";\n    // this.blockComment = {start: \"%blockCommentStart%\", end: \"%blockCommentEnd%\"};\n    // Extra logic goes here.\n    this.$id = \"ace/mode/%languageHighlightFilename%\"\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});"
  },
  {
    "path": "tool/templates/snippets.js",
    "content": "define(function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = require(\"../requirejs/text!./%modeName%.snippets\");\nexports.scope = \"%modeName%\";\n\n});\n"
  },
  {
    "path": "tool/templates/theme.css",
    "content": "/* THIS THEME WAS AUTOGENERATED BY Theme.tmpl.css (UUID: %uuid%) */\n\n.%cssClass% .ace_gutter {\n  background: %gutterBg%;\n  color: %gutterFg%;\n}\n\n.%cssClass% .ace_print-margin {\n  width: 1px;\n  background: %printMargin%;\n}\n\n.%cssClass% {\n  background-color: %background%;\n  color: %foreground%;\n}\n\n.%cssClass% .ace_cursor {\n  color: %cursor%;\n}\n\n.%cssClass% .ace_marker-layer .ace_selection {\n  background: %selection%;\n}\n\n.%cssClass%.ace_multiselect .ace_selection.ace_start {\n  box-shadow: 0 0 3px 0px %background%;\n  border-radius: 2px;\n}\n\n.%cssClass% .ace_marker-layer .ace_step {\n  background: %step%;\n}\n\n.%cssClass% .ace_marker-layer .ace_bracket {\n  margin: -1px 0 0 -1px;\n  border: 1px solid %bracket%;\n}\n\n.%cssClass% .ace_marker-layer .ace_active-line {\n  background: %active_line%;\n}\n\n.%cssClass% .ace_gutter-active-line {\n  background-color: %active_line%;\n}\n\n.%cssClass% .ace_marker-layer .ace_selected-word {\n  %selected_word_highlight%\n}\n\n.%cssClass% .ace_fold {\n    background-color: %fold%;\n    border-color: %foreground%;\n}\n\n\n\n\n\n"
  },
  {
    "path": "tool/templates/theme.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\ndefine(function(require, exports, module) {\n\nexports.isDark = %isDark%;\nexports.cssClass = \"%cssClass%\";\nexports.cssText = %css%;\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "tool/tmlanguage.js",
    "content": "require(\"amd-loader\");\n\nvar fs = require(\"fs\");\nvar util = require(\"util\");\nvar lib = require(\"./lib\");\nvar pathlib = require(\"path\");\nvar parseLanguage = lib.parsePlist;\n\nvar tk = require(\"./regexp_tokenizer\");\nvar tokenize = tk.tokenize;\nvar toStr = tk.toStr;\n\nfunction last(array) {return array[array.length - 1]}\n\nfunction convertHexEscape(tokens) {\n    var inChClass = false;\n    tokens.forEach(function(t) {\n        if (t.type == \"charclass\")\n            inChClass = true;\n        else if (t.type == \"charclass.end\")\n            inChClass = false;\n        else if (t.type == \"charType\"){\n            if (t.value == \"\\\\h\") {\n                t.type = \"text\";\n                t.value = inChClass ? \"\\\\da-fA-F\" : \"[\\\\da-fA-F]\";\n            }\n            else if (t.value == \"\\\\H\") {\n                if (inChClass) {\n                    console.warn(\"can't convert \\\\H in charclass\");\n                    return;\n                }\n                t.type = \"text\";\n                t.value = \"[^\\\\da-fA-F]\";\n            }\n        }\n    });\n    return tokens;\n}\n\nfunction convertNewLinesTo$(str) {\n    var tokens = tokenize(str);\n    for (var i = 0; i < tokens.length; i++) {\n        var t= tokens[i];\n        if (t.type == \"char\" && t.value == \"\\\\n\") {\n            var p = tokens[i + 1] || {};\n            if (p.type != \"quantifier\") {\n                t.value = \"$\";\n                while (p.value == \"\\\\n\" || p.type == \"quantifier\") {\n                    p.value = \"\";\n                    p = tokens[++i + 1] || {};\n                }\n            } else if (/\\?|\\*|{,|{0,/.test(p.value)) {\n                t.value = p.value = \"\";\n            } else\n                p.value = \"\";\n        }\n    }\n    return toStr(tokens).replace(/[$]+/g, \"$\");\n}\n\nfunction convertCharacterTypes(str) {\n    var tokens = tokenize(str);\n    tokens = convertHexEscape(tokens);\n\n    var warn = false;\n    tokens.forEach(function(t){\n        if (t.type == \"quantifier\") {\n            var val = t.value;\n            if (val.slice(-1) == \"+\" && val.length > 1) {\n                t.value = val.slice(0, -1);\n                warn = val;\n            }\n        }\n    });\n    if (warn)\n        console.log(\"converted possesive quantifier \" + warn + \" to *\");\n    return toStr(tokens);\n}\n\nfunction removeInlineFlags(str, rule) {\n    var tokens = tokenize(str);\n    var caseInsensitive = false;\n    tokens.forEach(function(t, i) {\n        if (t.type == \"group.start\" && /[imsx]/.test(t.value)) {\n            if (/i/.test(t.value))\n                caseInsensitive = true;\n            t.value = t.value.replace(/[imsx\\-]/g, \"\");\n            var next = tokens[i + 1];\n            if (next && next.type == \"group.end\") {\n                t.value = next.value = \"\";\n            }\n        }\n    });\n    if (caseInsensitive && rule)\n        rule.caseInsensitive = true;\n    return toStr(tokens);\n}\n\nfunction convertToNonCapturingGroups(str) {\n    var tokens = tokenize(str);\n    tokens.forEach(function(t, i) {\n        if (t.type == \"group.start\" && t.value == \"(\")\n            t.value += \"?:\";\n    });\n    return toStr(tokens);\n}\n\nfunction simplifyNonCapturingGroups(str) {\n    var tokens = tokenize(str);\n    var t = tokens[0] || {};\n    if (t.type == \"group.start\" && t.value == \"(?:\"\n        && t.end == last(tokens)) {\n        t.value = t.end.value = \"\";\n    }\n    var i = 0;\n    function iter(f) {\n        for (i = 0; i < tokens.length; i++)\n            f(tokens[i]);\n    }\n    function iterGroup(end, f) {\n        for (var i1 = i + 1; i1 < tokens.length; i1++) {\n            var t = tokens[i1];\n            if (t == end)\n                break;\n            var index = f && f(t);\n            if (index > i1)\n                i1 = index;\n        }\n        return i1;\n    }\n\n    iter(function (t) {\n        if (t.type == \"group.start\" && t.value == \"(?:\") {\n            if (!t.end)\n                return console.error(\"malformed regex: \" + str);\n\n            var canRemove = true;\n            var next = tokens[tokens.indexOf(t.end, i) + 1];\n            if (next && next.type == \"quantifier\")\n                return;\n            iterGroup(t.end, function(t) {\n                if (t.type == \"alternation\")\n                    canRemove = false;\n                else if (t.type == \"group.start\" && t.end)\n                    return iterGroup(t.end);\n            });\n            if (canRemove)\n                t.value = t.end.value = \"\";\n        }\n    });\n\n    return toStr(tokens);\n}\n\nfunction removeLookBehinds(str) {\n    var tokens = tokenize(str);\n    var toRemove = null;\n    tokens.forEach(function(t, i) {\n        if (!toRemove && t.type == \"group.start\" && /</.test(t.value)) {\n            toRemove = t.end;\n            toRemove.content = [];\n        }\n        if (toRemove) {\n            toRemove.content.push(t.value);\n            t.value = \"\";\n        }\n        if (t == toRemove) {\n            var c = toRemove.content.slice(1, -1).join(\"\");\n            if (/\\^/.test(c))\n                toRemove.value = \"(?:\" + c +\")\";\n\n            toRemove = null;\n        }\n    });\n    return toStr(tokens);\n}\n\nfunction convertBeginEndBackrefs(rule) {\n    if (!/\\\\\\d/.test(rule.end))\n        return;\n    var startTokens = tokenize(rule.begin);\n    var endTokens = tokenize(rule.end);\n\n\n    var groups = {};\n    startTokens.forEach(function(t, i) {\n        if (t.number && t.end && t.type == \"group.start\") {\n            var endIndex = startTokens.indexOf(t.end, i + 1);\n            var content = startTokens.slice(i+1, endIndex);\n            groups[t.number] = toStr(content);\n        }\n    });\n\n    endTokens.forEach(function(t) {\n        if (t.type == \"backRef\") {\n            var num = t.value.substr(1);\n            if (groups[num])\n                t.value = \"(?:\" + groups[num] + \")\";\n        }\n    });\n\n    rule.end = toStr(endTokens);\n\n    console.warn(\"Begin-End-Backreference is detected\", rule);\n}\n\nfunction checkForNamedCaptures(str) {\n    var tokens = tokenize(str);\n    tokens.forEach(function(t) {\n        if (t.type == \"group.start\" && t.name)\n            console.warn(\"named capture not implemented\", str);\n        if (t.type == \"backRef\")\n            console.warn(\"backRef not implemented \", str);\n    });\n}\n\nfunction fixGroups(captures, defaultName, regex) {\n    var tokens = tokenize(regex);\n\n    var opened = [], isStart = true, i = 0;\n    function open() {\n        var t = {value: \"(\", type: \"group.start\", isGroup: true};\n        opened.push(t);\n        tokens.splice(i++, 0, t);\n    }\n    function close() {\n        var t = {value: \")\", type: \"group.start\"};\n        t.start = opened.pop();\n        t.start.end = t;\n        tokens.splice(i++, 0, t);\n    }\n    function tryOpen(){if (isStart) {open(); isStart = false}}\n    function tryClose(){if (opened.length) close()}\n    function skip(t) {\n        var i1 = tokens.indexOf(t.end, i);\n        if (i1 > i)\n            i = i1;\n    }\n    function lst(t) {return t[t.length - 1]}\n    function iter(f) {\n        for (i = 0; i < tokens.length; i++)\n            f(tokens[i]);\n    }\n    function iterGroup(end, f) {\n        for (var i1 = i + 1; i1 < tokens.length; i1++) {\n            var t = tokens[i1];\n            if (t == end)\n                break;\n            f(t);\n        }\n    }\n    function peek() { return tokens[i + 1] || {}}\n\n    // groupify\n    iter(function(t){\n        if (t.type == \"group.start\") {\n            tryClose();\n            isStart = true;\n            if (!t.hasChildren || t.isSpecial)\n                skip(t);\n        } else if (t.type == \"group.end\") {\n            isStart = true;\n            tryClose();\n        } else if (t.type == \"alternation\") {\n            isStart = true;\n            tryClose();\n        } else if (t.type != \"anchor\" && t.type != \"quantifier\"){\n            tryOpen();\n        }\n    });\n    tryClose();\n\n    // remove redundand groups\n    var names = [defaultName];\n    iter(function(t){\n        if (t.type == \"group.start\" && !t.isSpecial) {\n            var captureName = captures[t.number];\n\n            if (!t.hasChildren) {\n                t.tokenName = captureName || lst(names);\n                skip(t);\n            }  else {\n                var hasCapture = false;\n                iterGroup(t.end, function(t1) {\n                    if (t1.type == \"group.start\" && captures[t1.number])\n                        hasCapture = true;\n                });\n                if (hasCapture) {\n                    t.value = \"(?:\";\n                    if (captureName) {\n                        names.push(captureName);\n                        t.isTokenGroup = true;\n                    }\n                } else {\n                    t.tokenName = captureName || lst(names);\n                    iterGroup(t.end, function(t1) {\n                        if (t1.value == \"(\")\n                            t1.value = \"(?:\";\n                    });\n                }\n            }\n        } else if (t.type == \"group.end\") {\n            if (t.start.isTokenGroup)\n                names.pop();\n        }\n    });\n\n    // wrap capturing groups with quantifier\n    iter(function(t){\n        if (t.type == \"group.end\" && t.start.value == \"(\" && peek().type == \"quantifier\") {\n            peek().value += \")\";\n            t.start.value += \"(?:\";\n        }\n    });\n\n    names = [];\n    tokens.forEach(function(t) {\n        if (t.value == \"(\" || t.value == \"((?:\" )\n            t.tokenName && names.push(t.tokenName);\n    });\n    return {\n        names: names,\n        regex: toStr(tokens)\n    };\n}\n\n/***** converter */\n\nfunction logDebug(string, obj) {\n    console.log(string, obj);\n}\n\n\n// tmLanguage processor\n\n// for tracking token states\nvar states = {start: []};\n\nfunction processRules(rules){\n    if (rules.patterns)\n        states.start = processPatterns(rules.patterns);\n    if (rules.repository)\n        processRepository(rules.repository);\n    return states;\n}\nfunction processRepository(r) {\n    for (var key in r) {\n        var p = r[key];\n        if (p.begin)\n            var stateObj = [processPattern(r[key])];\n        else if (p.patterns && !p.repository)\n            var stateObj = processPatterns(p.patterns);\n        else\n            var stateObj = [processPattern(r[key])];\n\n        if (stateObj)\n            states[\"#\" + key] = stateObj;\n    }\n}\nfunction processPatterns(pl) {\n    return pl.map(processPattern);\n}\nfunction processPattern(p) {\n    if (p.end == \"(?!\\\\G)\" && p.patterns && p.patterns.length == 1) {\n        var rule = processPattern(p.patterns[0]);\n    }\n    else if (p.begin != null && p.end != null) {\n        convertBeginEndBackrefs(p);\n\n        var rule = simpleRule(p.begin, p.name, p.beginCaptures || p.captures);\n\n        var next = processPatterns(p.patterns || []);\n        var endRule = simpleRule(p.end, p.name, p.endCaptures || p.captures);\n        endRule.next = \"pop\";\n        if (p.applyEndPatternLast)\n            next.push(endRule);\n        else\n            next.unshift(endRule);\n\n        if (p.name || p.contentName)\n            next.push({defaultToken: p.name || p.contentName});\n\n        rule.push = next;\n\n        rule = removeIncludeSelf(rule);\n    }\n    else if (p.match) {\n        var rule = simpleRule(p.match, p.name, p.captures);\n    }\n    else if (p.include) {\n        var rule =  {include: p.include};\n    }\n    else {\n        var rule =  {todo: p};\n    }\n\n    if (p.comment)\n        rule.comment = (rule.comment || \"\") +  p.comment;\n\n    if (p.repository)\n        processRepository(p.repository);\n    return rule;\n}\nfunction simpleRule(regex, name, captures) {\n    name = name || \"text\";\n    var rule = {token: \"\", regex: \"\"};\n\n    var origRegex = regex;\n    regex = transformRegExp(origRegex, rule);\n    if (captures) {\n        var tokenArray = [];\n        Object.keys(captures).forEach(function(x){\n            tokenArray[x] = captures[x] && captures[x].name;\n        });\n\n        if (tokenArray.length == 1) {\n            name = tokenArray[0];\n        } else {\n            var fixed = fixGroups(tokenArray, name, regex);\n            name = fixed.names;\n            regex = fixed.regex;\n            if (name.length == 1)\n                name = name[0];\n        }\n    }\n\n    if (typeof name == \"string\")\n        regex = convertToNonCapturingGroups(regex);\n\n    regex = simplifyNonCapturingGroups(regex);\n\n    try {new RegExp(regex);} catch(e) {\n        rule.TODO = \"FIXME: regexp doesn't have js equivalent\";\n        rule.originalRegex = origRegex;\n\n        // lookbehinds are mostly used to force ordering\n        // regex = removeLookBehinds(regex);\n    }\n    rule.token = name;\n    rule.regex = regex;\n    return rule;\n}\n\nfunction removeIncludeSelf(rule) {\n    if (!rule.push)\n        return rule;\n    var hasSelfInclude = false;\n    var escapeRule = null;\n    var complexSelfInclude = false;\n    rule.push.forEach(function(sub) {\n        if (sub.include == \"$self\") {\n            hasSelfInclude = true;\n        } else if (sub.defaultToken) {\n            return;\n        } else if (sub.next == \"pop\") {\n            escapeRule = sub;\n        } else\n            complexSelfInclude = true;\n    });\n\n    if (hasSelfInclude) {\n        console.warn(\"can't convert include $self\");\n        return {todo: rule};\n        \n        if (complexSelfInclude) {\n            console.warn(\"can't convert include $self\");\n            rule.toDo = \"include $self not fully supported\";\n            return rule;\n        }\n        console.warn(\"include $self not fully supported\");\n        delete rule.push;\n        delete escapeRule.next;\n        rule.includeSelf = true;\n        escapeRule.includeSelf = true;\n        return [rule, escapeRule];\n    }\n    return rule;\n}\n\n// regex transformation\n\nfunction removeXFlag(str) {\n    var tokens = tokenize(str);\n    return toStr(tokens);\n}\n\nfunction transformRegExp(str, rule) {\n    str = convertNewLinesTo$(str);\n\n    str = removeInlineFlags(str, rule);\n\n    str = str.replace(/(\\\\[xu]){([a-fA-F\\d]+)}/g, '$1$2');\n\n    str = convertCharacterTypes(str);\n\n    checkForNamedCaptures(str);\n\n    return str;\n}\n\n//\nfunction extractPatterns(tmRules) {\n    return  processRules(tmRules);\n}\n\n\nfunction detectLoops(states) {\n    var data = {};\n    var keys = Object.keys(states);\n    var flattenedStates = {};\n    function addRef(item, name) {\n        if (item.refs.indexOf(name) == -1)\n            item.refs.push(name);\n    }\n    function anonStateId(name, next) {\n        var i = 0, old = name;\n        while (flattenedStates[name] || states[name]) {\n            name = old + \"_\" + i++;\n        }\n        // console.log(old, name)\n        return name;\n    }\n    function addState(key, rules) {\n        if (rules && !flattenedStates[key])\n            flattenedStates[key] = rules;\n        return rules || flattenedStates[key];\n    }\n    \n    \n    for (var i = 0; i < keys.length; i++) {\n        var key = keys[i];\n        var state = addState(key, states[key]);\n        \n        var item = data[key] || (data[key] = {/* name: key, */ refs: []});\n        state.forEach(function(rule) {\n            var next = rule.push || rule.next;\n            if (next == \"pop\") {\n                // nothing\n            } else if (typeof next == \"string\") {\n                addRef(item, next);\n            } else if (next) {\n                var anonId = anonStateId(key, next);\n                addState(anonId, next);\n                if (rule.push)\n                    addRef(item, anonId);\n                keys.push(anonId);\n            } else if (rule.include) {\n                addRef(item, rule.include);\n            }\n        });\n    }\n    \n    \n    var cycles = [];\n    function addPath(start, path) {\n        var node = data[start];\n        path.push(start);\n        if (!node || !node.refs)\n            console.log(start);\n        var i = path.indexOf(start);\n        if (i > -1 && i != path.length - 1 || start == \"$self\" || start == \"$base\") {\n            if (i != -1)\n                path = path.slice(i);\n            for (var j = 0; j < cycles.length; j++) {\n                if (cycles[j] + \"\" == path + \"\")\n                    return;\n            }\n            return cycles.push(path);\n        }\n        \n        if (!node || !node.refs || !node.refs.length || path.length>30)\n            return;\n        node.refs.forEach(function(x) {\n            addPath(x, path.concat());\n        });\n    }\n    addPath(\"start\", []);\n    \n    console.error(cycles.join(\"\\n\"));\n}\n\n\nfunction test(fileName) {\n    console.log(\"testing highlighter\");\n    try {\n        var module = require(fileName);\n        var Mode = module[Object.keys(module)[0]];\n        var mode = new Mode();\n        mode.getTokenizer().getLineTokens(\"hello world\");\n    } catch(e) {\n        console.log(e);\n    }\n}\n\nfunction guessComment(patterns) {\n    var comment = {};\n    for (var i in patterns) {\n        var state = patterns[i];\n        state.forEach(function(r) {\n            if (typeof r.token == \"string\") {\n                if (/\\bcomment\\b/.test(r.token)) {\n                    comment.line = r.regex;\n                }\n            }\n        });\n    }\n\n    return comment;\n}\n\n// cli stuff\nvar modeTemplate = fs.readFileSync(__dirname + \"/templates/mode.js\", \"utf8\");\nvar modeHighlightTemplate = fs.readFileSync(__dirname + \"/templates/highlight_rules.js\", \"utf8\");\n\nfunction fetchAndConvert(name) {\n    console.log(\"Converting \" + name);\n    if (/^http/.test(name)) {\n        if (/:\\/\\/github.com/.test(name)) {\n            name = name.replace(/\\/blob\\//, \"/\").replace(\"github.com\", \"raw.github.com\");\n        }\n        return lib.download(name, function(data) {\n            convertTmLanguage(name, data);\n        });\n    }\n    var path = /^(\\/|\\w:)/.test(name) ? name : process.cwd() + \"/\" + name;\n    var langStr = fs.readFileSync(path, \"utf8\");\n    convertTmLanguage(name, langStr);\n}\n\n\nfunction convertTmLanguage(name, langStr) {\n    parseLanguage(langStr, function(language) {\n        var highlighterFilename = lib.snakeCase(language.name).replace(/[^\\w]/g, \"\");\n        var languageNameSanitized = lib.camelCase(language.name).replace(/[^\\w]/g, \"\");\n        \n        require(\"./add_mode\")(languageNameSanitized, (language.fileTypes || []).join(\"|\"));\n\n        var highlighterFile = pathlib.normalize(lib.AceLib + \"ace/mode/\" + highlighterFilename + \"_highlight_rules.js\");\n        var modeFile = pathlib.normalize(lib.AceLib + \"ace/mode/\" + highlighterFilename + \".js\");\n\n        if (devMode) {\n            console.log(util.inspect(language.patterns, false, 4));\n            console.log(util.inspect(language.repository, false, 4));\n        }\n\n        var patterns = extractPatterns(language);\n        detectLoops(patterns);\n        \n        // var uuid = language.uuid\n        delete language.uuid;\n        delete language.patterns;\n        delete language.repository;\n\n        var comment = guessComment(patterns);\n        var languageMode = lib.fillTemplate(modeTemplate, {\n            language: languageNameSanitized,\n            languageHighlightFilename: highlighterFilename,\n            lineCommentStart: JSON.stringify(comment.line || \"//\"),\n            blockCommentStart: JSON.stringify(comment.start || \"/*\"),\n            blockCommentEnd: JSON.stringify(comment.end || \"*/\")\n        });\n\n        var languageHighlightRules = lib.fillTemplate(modeHighlightTemplate, {\n            language: languageNameSanitized,\n            languageTokens: lib.formatJS(patterns, \"    \").trim(),\n            uuid: language.uuid,\n            name: name,\n            metaData: lib.formatJS(language, \"\").trim()\n        });\n\n        if (devMode) {\n            console.log(languageMode);\n            console.log(languageHighlightRules);\n            console.log(\"Not writing, 'cause we're in dev mode, baby.\");\n        }\n        else {\n            fs.writeFileSync(highlighterFile, languageHighlightRules);\n            fs.writeFileSync(modeFile, languageMode);\n            console.log(\"created file \" + highlighterFile);\n            test(modeFile);\n        }\n    });\n}\n\nif (!module.parent) {\n    var args = process.argv.splice(2);\n    var devMode = args[0] == \"--dev\";\n    if (devMode)\n        args.shift();\n    if (args.length < 1) {\n        console.error(\"Usage: node tmlanguage.js [--dev] path/or/url/to/syntax.file ...\");\n        process.exit(1);\n    }\n    args.forEach(fetchAndConvert);\n} else {\n    exports.fetchAndConvert = fetchAndConvert;\n}\n"
  },
  {
    "path": "tool/tmsnippets.js",
    "content": "var fs = require('fs')\nvar plist = require('plist')\n\nvar snippets = [];\nvar path = process.argv[2] || process.cwd();\nfunction readSnippet(path, name) {\n    if (name)\n        path += name\n    console.log(name)\n    if (!/\\.(tmSnippet|sublime-snippet|plist)$/i.test(path))\n        return\n    console.log(name)\n    var plistString = fs.readFileSync(path, \"utf8\");\n    plist.parseString(plistString, function(_, plist){\n        snippets.push(plist)\n    })\n}\n\n// read\nfunction readDir(path) {\n    if (fs.statSync(path).isDirectory()) {\n        path += \"/\"\n        fs.readdirSync(path).forEach(function(name) {        \n            if (/snippets/i.test(name))\n                readSnippetsInDir(path + name)\n            else\n                readDir(path + name)\n        })\n    }\n}\nfunction readSnippetsInDir(path) {\n    if (fs.statSync(path).isDirectory()) {\n        path += \"/\"\n        snippets.push(path)\n        fs.readdirSync(path).forEach(function(name) {\n            readSnippet(path, name)\n        })\n    } else {\n        readSnippet(path)\n    }\n}\nreadDir(path) \n// transform\nsnippets = snippets.map(function(s) {\n    if (s.length == 1)\n        s = s[0]\n    if (s.scope)\n        s.scope = s.scope.replace(/source\\./g, \"\")\n    delete s.uuid\n    return s\n})\n\n// stringify\nvar indent = \"\"\nvar text = JSON.stringify(snippets, null, 1)\n    // .replace(/(\\n\\s*)\"(\\w+)\"\\:/g, \"$1$2:\")\n    .replace(/(\\n\\s*)\\},\\n\\s*{/g, \"$1}, {\")\n    .replace(/\\[\\n\\s*\\{\\n/g, \"[{\\n\").replace(/(\\n\\s*)\\}\\n\\s*\\]/g, \"$1}]\")\n    .replace(/\\[\\n\\s*[^\\[\\{\\}\\]]{0,100}\\]/g, function(x){return x.replace(/\\n\\s*/g, \" \")})\n    .replace(/\\:\\s*\\{\\n\\s*(.*)\\n\\s*\\}/g, \": {$1}\")\n    .split(/\\n\\s*/).map(function(x){\n        if (x[0] == \"}\" || x[0] == \"]\")\n            indent = indent.substr(1)\n            \n        if (x.slice(-1) == \"{\" || x.slice(-1) == \"[\") {        \n            indent += \"\\t\"\n            return  indent.substr(1) + x\n        }\n        return indent +x\n    }).join(\"\\n\")\n    .replace(/\\\\[\\\\tnr]/g, function(a){\n        if (a[1] == \"\\\\\")\n            return a\n        else if (a[1] == \"t\")\n            return \"\\t\"\n        else\n            return \"\\\\n\"+\"\\\\\" + \"\\n\"\n    })\n\nfs.writeFileSync(path += \"/./ace.snippets.js\", text)\n\nconsole.log(path)"
  },
  {
    "path": "tool/tmtheme.js",
    "content": "var fs = require(\"fs\");\nvar path = require(\"path\");\nvar util = require(\"util\");\nvar cssParse = require(\"css-parse\");\nvar cssStringify = require(\"css-stringify\");\n\nvar parseString = require(\"plist\").parseString;\nfunction parseTheme(themeXml, callback) {\n    parseString(themeXml, function(_, theme) {\n        callback(theme[0])\n    });\n}\n\nvar unsupportedScopes = { };\n\nvar supportedScopes = {\n   \"keyword\": \"keyword\",\n   \"keyword.operator\": \"keyword.operator\",\n   \"keyword.other.unit\": \"keyword.other.unit\",\n\n   \"constant\": \"constant\",\n   \"constant.language\": \"constant.language\",\n   \"constant.library\": \"constant.library\",\n   \"constant.numeric\": \"constant.numeric\",\n   \"constant.character\" : \"constant.character\",\n   \"constant.character.escape\" : \"constant.character.escape\",\n   \"constant.character.entity\": \"constant.character.entity\",\n   \"constant.other\" : \"constant.other\",\n\n   \"support\": \"support\",\n   \"support.function\": \"support.function\",\n   \"support.function.dom\": \"support.function.dom\",\n   \"support.function.firebug\": \"support.firebug\",\n   \"support.function.constant\": \"support.function.constant\",\n   \"support.constant\": \"support.constant\",\n   \"support.constant.property-value\": \"support.constant.property-value\",\n   \"support.class\": \"support.class\",\n   \"support.type\": \"support.type\",\n   \"support.other\": \"support.other\",\n\n   \"function\": \"function\",\n   \"function.buildin\": \"function.buildin\",\n\n   \"storage\": \"storage\",\n   \"storage.type\": \"storage.type\",\n\n   \"invalid\": \"invalid\",\n   \"invalid.illegal\": \"invalid.illegal\",\n   \"invalid.deprecated\": \"invalid.deprecated\",\n\n   \"string\": \"string\",\n   \"string.regexp\": \"string.regexp\",\n\n   \"comment\": \"comment\",\n   \"comment.documentation\": \"comment.doc\",\n   \"comment.documentation.tag\": \"comment.doc.tag\",\n\n   \"variable\": \"variable\",\n   \"variable.language\": \"variable.language\",\n   \"variable.parameter\": \"variable.parameter\",\n\n   \"meta\": \"meta\",\n   \"meta.tag.sgml.doctype\": \"xml-pe\",\n   \"meta.tag\": \"meta.tag\",\n   \"meta.selector\": \"meta.selector\",\n   \n   \"entity.other.attribute-name\": \"entity.other.attribute-name\",\n   \"entity.name.function\": \"entity.name.function\",\n   \"entity.name\": \"entity.name\",\n   \"entity.name.tag\": \"entity.name.tag\",\n\n   \"markup.heading\": \"markup.heading\",\n   \"markup.heading.1\": \"markup.heading.1\",\n   \"markup.heading.2\": \"markup.heading.2\",\n   \"markup.heading.3\": \"markup.heading.3\",\n   \"markup.heading.4\": \"markup.heading.4\",\n   \"markup.heading.5\": \"markup.heading.5\",\n   \"markup.heading.6\": \"markup.heading.6\",\n   \"markup.list\": \"markup.list\",\n\n   \"collab.user1\": \"collab.user1\"\n};\n\nvar fallbackScopes = {\n    \"keyword\": \"meta\",\n    \"support.type\": \"storage.type\",\n    \"variable\": \"entity.name.function\"\n};\n\n// Taken from .ace-tm\nvar defaultGlobals = {\n    \"printMargin\": \"#e8e8e8\",\n    \"background\": \"#ffffff\",\n    \"foreground\": \"#000000\",\n    \"gutter\": \"#f0f0f0\",\n    \"selection\": \"rgb(181, 213, 255)\",\n    \"step\": \"rgb(198, 219, 174)\",\n    \"bracket\": \"rgb(192, 192, 192)\",\n    \"active_line\": \"rgba(0, 0, 0, 0.07)\",\n    \"cursor\": \"#000000\",\n    \"invisible\": \"rgb(191, 191, 191)\",\n    \"fold\": \"#6b72e6\"\n};\n\nfunction extractStyles(theme) {\n    var globalSettings = theme.settings[0].settings;\n\n    var colors = {\n        \"printMargin\": defaultGlobals.printMargin,\n        \"background\": parseColor(globalSettings.background) || defaultGlobals.background,\n        \"foreground\": parseColor(globalSettings.foreground) || defaultGlobals.foreground,\n        \"gutter\": defaultGlobals.gutter,\n        \"selection\": parseColor(globalSettings.selection) || defaultGlobals.selection,\n        \"step\": defaultGlobals.step,\n        \"bracket\": parseColor(globalSettings.invisibles) || defaultGlobals.bracket,\n        \"active_line\": parseColor(globalSettings.lineHighlight) || defaultGlobals.active_line,\n        \"cursor\": parseColor(globalSettings.caret) || defaultGlobals.cursor,\n        \"invisible\": \"color: \" + (parseColor(globalSettings.invisibles) || defaultGlobals.invisible) + \";\"\n    };\n\n    for (var i=1; i<theme.settings.length; i++) {\n        var element = theme.settings[i];\n        if (!element.scope || !element.settings)\n            continue;\n        var scopes = element.scope.split(/\\s*[|,]\\s*/g);\n        for (var j = 0; j < scopes.length; j++) {\n            var scope = scopes[j];\n            var style = parseStyles(element.settings);\n        \n            var aceScope = supportedScopes[scope];\n            if (aceScope) {\n                colors[aceScope] = style;\n            }\n            else if (style) {\n                unsupportedScopes[scope] = (unsupportedScopes[scope] || 0) + 1;\n            }\n        }        \n    }\n    \n    for (var i in fallbackScopes) {\n        if (!colors[i])\n            colors[i] = colors[fallbackScopes[i]];\n    }\n\n    if (!colors.fold) {\n        var foldSource = colors[\"entity.name.function\"] || colors.keyword;\n        if (foldSource) {\n            colors.fold = foldSource.match(/\\:([^;]+)/)[1];\n        } else {\n            colors.fold = defaultGlobals.fold;\n        }\n    }\n    \n    colors.gutterBg = colors.background\n    colors.gutterFg = mix(colors.foreground, colors.background, 0.5)\n\n    if (!colors.selected_word_highlight)\n        colors.selected_word_highlight =  \"border: 1px solid \" + colors.selection + \";\";\n\n    colors.isDark = (luma(colors.background) < 0.5) + \"\";\n    \n    return colors;\n};\n\nfunction mix(c1, c2, a1, a2) {\n    c1 = rgbColor(c1);\n    c2 = rgbColor(c2);\n    if (a2 === undefined)\n        a2 = 1 - a1\n    return \"rgb(\" + [\n        Math.round(a1*c1[0] + a2*c2[0]),\n        Math.round(a1*c1[1] + a2*c2[1]),\n        Math.round(a1*c1[2] + a2*c2[2])\n    ].join(\",\") + \")\";\n}\n\nfunction rgbColor(color) {\n    if (typeof color == \"object\")\n        return color;\n    if (color[0]==\"#\")\n        return color.match(/^#(..)(..)(..)/).slice(1).map(function(c) {\n            return parseInt(c, 16);\n        });\n    else\n        return color.match(/\\(([^,]+),([^,]+),([^,]+)/).slice(1).map(function(c) {\n            return parseInt(c, 10);\n        });\n}\nfunction luma(color) {\n    var rgb = rgbColor(color);\n    return (0.21 * rgb[0] + 0.72 * rgb[1] + 0.07 * rgb[2]) / 255;\n}\n\nfunction parseColor(color) {\n    if (!color.length) return null;\n    if (color.length == 4)\n        color = color.replace(/[a-fA-F\\d]/g, \"$&$&\");\n    if (color.length == 7)\n        return color;\n    else {\n        if (!color.match(/^#(..)(..)(..)(..)$/))\n            console.error(\"can't parse color\", color);\n        var rgba = color.match(/^#(..)(..)(..)(..)$/).slice(1).map(function(c) {\n            return parseInt(c, 16);\n        });\n        rgba[3] = (rgba[3] / 0xFF).toPrecision(2);\n        return \"rgba(\" + rgba.join(\", \") + \")\";\n    }\n}\n\nfunction parseStyles(styles) {\n    var css = [];\n    var fontStyle = styles.fontStyle || \"\";\n    if (fontStyle.indexOf(\"underline\") !== -1) {\n        css.push(\"text-decoration:underline;\");\n    }\n    if (fontStyle.indexOf(\"italic\") !== -1) {\n        css.push(\"font-style:italic;\");\n    }\n\n    if (styles.foreground) {\n        css.push(\"color:\" + parseColor(styles.foreground) + \";\");\n    }\n    if (styles.background) {\n        css.push(\"background-color:\" + parseColor(styles.background) + \";\");\n    }\n\n    return css.join(\"\\n\");\n}\n\nfunction fillTemplate(template, replacements) {\n    return template.replace(/%(.+?)%/g, function(str, m) {\n        return replacements[m] || \"\";\n    });\n}\n\nfunction hyphenate(str) {\n    return str.replace(/([A-Z])/g, \"-$1\").replace(/_/g, \"-\").toLowerCase();\n}\n\nfunction quoteString(str) {\n    return '\"' + str.replace(/\\\\/, \"\\\\\\\\\").replace(/\"/g, '\\\\\"').replace(/\\n/g, \"\\\\\\n\") + '\"';\n}\n\nvar cssTemplate = fs.readFileSync(__dirname + \"/templates/theme.css\", \"utf8\");\nvar jsTemplate = fs.readFileSync(__dirname + \"/templates/theme.js\", \"utf8\");\n\nfunction normalizeStylesheet(rules) {\n    for (var i = rules.length; i--; ) {\n        var s = JSON.stringify(rules[i].declarations);\n        for (var j = i; j --; ) {\n            if (s == JSON.stringify(rules[j].declarations)) {\n            console.log(rules[j].selectors, rules[i].selectors)\n            console.log(i, j)\n                rules[j].selectors = rules[i].selectors.concat(rules[j].selectors);\n                rules.splice(i, 1);\n                break;\n            }\n        }\n    }\n    for (var i = rules.length; i--; ) {\n        var s = rules[i].selectors.sort();\n        rules[i].selectors = s.filter(function(x, i) {\n            return x && x != s[i + 1];\n        });                \n    }\n    return rules;\n}\n\nvar themes = {\n    //\"chrome\": \"Chrome DevTools\",\n    \"clouds\": \"Clouds\",\n    \"clouds_midnight\": \"Clouds Midnight\",\n    \"cobalt\": \"Cobalt\",\n    //\"crimson_editor\": \"Crimson Editor\",\n    \"dawn\": \"Dawn\",\n    //\"dreamweaver\": \"Dreamweaver\",\n    //\"eclipse\": \"Eclipse\",\n    //\"github\": \"GitHub\",\n    \"idle_fingers\": \"idleFingers\",\n    \"kr_theme\": \"krTheme\",\n    \"merbivore\": \"Merbivore\",\n    \"merbivore_soft\": \"Merbivore Soft\",\n    \"mono_industrial\": \"monoindustrial\",\n    \"monokai\": \"Monokai\",\n    \"pastel_on_dark\": \"Pastels on Dark\",\n    \"solarized_dark\": \"Solarized-dark\",\n    \"solarized_light\": \"Solarized-light\",\n    \"katzenmilch\": \"Katzenmilch\",\n    \"kuroir\": \"Kuroir Theme\",\n    //\"textmate\": \"Textmate (Mac Classic)\",\n    \"tomorrow\": \"Tomorrow\",\n    \"tomorrow_night\": \"Tomorrow-Night\",\n    \"tomorrow_night_blue\": \"Tomorrow-Night-Blue\",\n    \"tomorrow_night_bright\": \"Tomorrow-Night-Bright\",\n    \"tomorrow_night_eighties\": \"Tomorrow-Night-Eighties\",\n    \"twilight\": \"Twilight\",\n    \"vibrant_ink\": \"Vibrant Ink\",\n    \"xcode\": \"Xcode_default\"\n};\n\nfunction convertBuiltinTheme(name) {\n    return convertTheme(name, __dirname + \"/tmthemes/\" + themes[name] + \".tmTheme\", __dirname + \"/../lib/ace/theme\");\n}\n\nfunction convertTheme(name, tmThemePath, outputDirectory) {\n    console.log(\"Converting \" + name);\n    var tmTheme = fs.readFileSync(tmThemePath, \"utf8\");\n    parseTheme(tmTheme, function(theme) {\n        var styles = extractStyles(theme);\n\n        styles.cssClass = \"ace-\" + hyphenate(name);\n        styles.uuid = theme.uuid;\n        var css = fillTemplate(cssTemplate, styles);\n        css = css.replace(/[^\\{\\}]+{\\s*}/g, \"\");\n        \n        for (var i in supportedScopes) {\n            if (!styles[i])\n                continue;\n            css += \".\" + styles.cssClass + \" \" +\n                i.replace(/^|\\./g, \".ace_\") + \"{\" + styles[i] + \"}\";\n        }\n\n        // we're going to look for NEW rules in the parsed content only\n        // if such a rule exists, add it to the destination file\n        // this way, we preserve all hand-modified rules in the <theme>.css rules,\n        // (because some exist, for collab1 and ace_indentation_guide\n        try {\n            var outThemeCss = fs.readFileSync(outputDirectory + \"/\" + name + \".css\");\n            var oldRules = cssParse(outThemeCss).stylesheet.rules;\n            var newRules = cssParse(css).stylesheet.rules;\n\n\n            for (var i = 0; i < newRules.length; i++) {\n                var newSelectors = newRules[i].selectors;\n\n                for (var j = 0; j < oldRules.length; j++) {\n                    var oldSelectors = oldRules[j].selectors;\n                    newSelectors = newSelectors.filter(function(s) {\n                        return oldSelectors.indexOf(s) == -1;\n                    })\n                    if (!newSelectors.length)\n                        break;\n                }\n                if (newSelectors.length) {\n                    newRules[i].selectors = newSelectors;\n                    console.log(\"Adding NEW rule: \", newRules[i])\n                    oldRules.splice(i, 0, newRules[i]);\n                }\n            }\n            \n            oldRules = normalizeStylesheet(oldRules);\n            \n            css = cssStringify({stylesheet: {rules: oldRules}}, { compress: false });\n        } catch(e) {\n            console.log(\"Creating new file: \" +  name + \".css\")\n            css = cssStringify(cssParse(css), { compress: false });\n        }\n        \n        var js = fillTemplate(jsTemplate, {\n            name: name,\n            css: 'require(\"../requirejs/text!./' + name + '.css\")', // quoteString(css), //\n            cssClass: \"ace-\" + hyphenate(name),\n            isDark: styles.isDark\n        });\n\n        fs.writeFileSync(outputDirectory + \"/\" + name + \".js\", js);\n        fs.writeFileSync(outputDirectory + \"/\" + name + \".css\", css);\n    })\n}\n\nif (process.argv.length > 2) {\n    var args = process.argv.splice(2);\n    if (args.length < 3) {\n        console.error(\"Usage: node tmtheme.js [theme_name, path/to/theme.tmTheme path/to/output/directory]\");\n        process.exit(1);\n    }\n    var name = args[0];\n    var themePath = args[1];\n    var outputDirectory = args[2];\n    convertTheme(name, themePath, outputDirectory);\n} else {\n    for (var name in themes) {\n        convertBuiltinTheme(name);\n    }\n}\n\nif (Object.keys(unsupportedScopes).length > 0) {\n    var sortedUnsupportedScopes = {};\n    for (var u in unsupportedScopes) {\n        var value = unsupportedScopes[u];\n        if (sortedUnsupportedScopes[value] === undefined) {\n            sortedUnsupportedScopes[value] = [];\n        }\n        sortedUnsupportedScopes[value].push(u);\n    }\n    console.log(\"I found these unsupported scopes:\");\n    console.log(sortedUnsupportedScopes);\n    console.log(\"It's safe to ignore these, but they may affect your syntax highlighting if your mode depends on any of these rules.\");\n    console.log(\"Refer to the docs on ace.ajax.org for information on how to add a scope to the CSS generator.\");\n}\n\n\n/*** TODO: generate images for indent guides in node\n\nvar indentGuideColor = \"#2D2D2D\"\nvar canvas = document.createElement(\"canvas\")\ncanvas.width = 1; canvas.height = 2;\nvar ctx = canvas.getContext(\"2d\")\nimageData = ctx.getImageData(0,0,1,2)\n\nfunction getColor(color) {\n    ctx.fillStyle = color;\n    ctx.fillRect(0,0,1,2);\n    return Array.slice(ctx.getImageData(0,0,1,2).data).slice(0,4)    \n}\nbgColor = getComputedStyle(ace.renderer.scroller).backgroundColor\nvar a = [].concat(getColor(bgColor), getColor(indentGuideColor));\na.forEach(function(val,i){imageData.data[i] = val})\n\nctx.putImageData(imageData,0,0)\nimage = canvas.toDataURL(\"png\")\n\nvar rule = \".\"+ace.renderer.$theme +\" .ace_indent-guide {\\n\\\n  background: url(\" + image +\") right repeat-y;\\n\\\n}\"\nconsole.log(rule)\nrequire(\"ace/lib/dom\").importCssString(rule)\n\n*/\n"
  },
  {
    "path": "tool/tmthemes/Active4D.tmTheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>name</key>\n\t<string>Active4D</string>\n\t<key>settings</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#FFFFFF</string>\n\t\t\t\t<key>caret</key>\n\t\t\t\t<string>#000000</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#3B3B3B</string>\n\t\t\t\t<key>invisibles</key>\n\t\t\t\t<string>#BFBFBF</string>\n\t\t\t\t<key>lineHighlight</key>\n\t\t\t\t<string>#00000012</string>\n\t\t\t\t<key>selection</key>\n\t\t\t\t<string>#BAD6FD</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Embedded source</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>text.html source.active4d</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#E2E9FF5E</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Plain XML text</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>text.xml</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#000000</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Line comment</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>comment.line</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#AF82D4</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Block comment</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>comment.block</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#AF82D4</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>String</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#666666</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Interpolated entity</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string.interpolated variable</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#66CCFF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Number</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.numeric</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#A8017E</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>User-defined constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.character, constant.other</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Date/time literal</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.other.date, constant.other.time</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#66CCFF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Built-in constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.language</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#A535AE</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Local variable</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>variable.other.local</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#6392FF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Variable</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>variable</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#0053FF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Table/field</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>variable.other.table-field</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#6988AE</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Keyword</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#006699</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Operator</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword.operator</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Storage</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>storage</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FF5600</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Type name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.type</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#21439C</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Inherited class</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.other.inherited-class</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Function name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.function</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#21439C</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Function argument</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>variable.parameter</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Tag container</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.tag</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#7A7A7A</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Tag name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.tag</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#016CFF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Tag attribute</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.other.attribute-name</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#963DFF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Command/method</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.function</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#45AE34</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Named constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.constant</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#B7734C</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Library class/type</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.type, support.class</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#A535AE</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Library variable</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.variable</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#A535AE</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Invalid</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>invalid</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#990000</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FFFFFF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>diff header</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.diff</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#656565</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FFFFFF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>diff line range</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.diff.range</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#1B63FF</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FFFFFF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>diff deleted line</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.deleted.diff</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#FF7880</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#000000</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>diff inserted line</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.inserted.diff</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#98FF9A</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#000000</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>diff unchanged line</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source.diff</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#5E5E5E</string>\n\t\t\t</dict>\n\t\t</dict>\n\t</array>\n\t<key>uuid</key>\n\t<string>7D2863D0-473C-47A0-B03B-92880559EBA9</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "tool/tmthemes/Amy.tmTheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>name</key>\n\t<string>Amy</string>\n\t<key>author</key>\n\t<string>William D. Neumann</string>\n\t<key>settings</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#200020</string>\n\t\t\t\t<key>caret</key>\n\t\t\t\t<string>#7070FF</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#D0D0FF</string>\n\t\t\t\t<key>invisibles</key>\n\t\t\t\t<string>#BFBFBF</string>\n\t\t\t\t<key>lineHighlight</key>\n\t\t\t\t<string>#80000040</string>\n\t\t\t\t<key>selection</key>\n\t\t\t\t<string>#80000080</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Comment</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>comment.block</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#200020</string>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#404080</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>String</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#999999</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Built-in constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.language</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#707090</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Integer</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.numeric</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#7090B0</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Int32 constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.numeric.integer.int32</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Int64 constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.numeric.integer.int64</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Nativeint constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.numeric.integer.nativeint</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold italic</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Floating-point constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.numeric.floating-point.ocaml</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>underline</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Character constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.character</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#666666</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Boolean constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.language.boolean</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#8080A0</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Built-in constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.language</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>User-defined constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.other</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Variable</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>variable.language, variable.other</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#008080</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Keyword</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#A080FF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Keyword operator</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword.operator</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#A0A0FF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Keyword decorator</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword.other.decorator</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#D0D0FF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Floating-point infix operator</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword.operator.infix.floating-point.ocaml</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>underline</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Floating-point prefix operator</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword.operator.prefix.floating-point.ocaml</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>underline</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Compiler directives</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword.other.directive</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#C080C0</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Line-number directives</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword.other.directive.line-number</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>underline</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#C080C0</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Control keyword</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword.control</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#80A0FF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Storage</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>storage</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#B0FFF0</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Variants</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.type.variant</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#60B0FF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Polymorphic variants</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>storage.type.variant.polymorphic, entity.name.type.variant.polymorphic</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#60B0FF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Module definitions</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.type.module</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#B000B0</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Module type definitions</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.type.module-type.ocaml</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>underline</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#B000B0</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Support modules</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.other</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#A00050</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Class name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.type.class</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#70E080</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Class type</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.type.class-type</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#70E0A0</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Inherited class</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.other.inherited-class</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Function name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.function</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#50A0A0</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Function argument</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>variable.parameter</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#80B0B0</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Token definition (ocamlyacc)</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.type.token</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#3080A0</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Token reference (ocamlyacc)</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.type.token.reference</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#3CB0D0</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Non-terminal definition (ocamlyacc)</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.function.non-terminal</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#90E0E0</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Non-terminal reference (ocamlyacc)</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.function.non-terminal.reference</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#C0F0F0</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Tag name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.tag</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#009090</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Tag attribute</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.other.attribute-name</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Library function</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#200020</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Library constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.constant</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#200020</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Library class/type</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.type, support.class</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Library variable</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.other.variable</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Invalid - illegal</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>invalid.illegal</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#FFFF00</string>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#400080</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Invalid - depricated</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>invalid.deprecated</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#CC66FF</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#200020</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Camlp4 code</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source.camlp4.embedded</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#40008054</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Camlp4 temp (parser)</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source.camlp4.embedded.parser.ocaml</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Punctuation</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>punctuation</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#805080</string>\n\t\t\t</dict>\n\t\t</dict>\n\t</array>\n\t<key>uuid</key>\n\t<string>3C01FADD-7592-49DD-B7A5-1B82CA4E57B5</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "tool/tmthemes/Blackboard.tmTheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>name</key>\n\t<string>Blackboard</string>\n\t<key>author</key>\n\t<string>Domenico Carbotta</string>\n\t<key>settings</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#0C1021</string>\n\t\t\t\t<key>caret</key>\n\t\t\t\t<string>#FFFFFFA6</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#F8F8F8</string>\n\t\t\t\t<key>invisibles</key>\n\t\t\t\t<string>#FFFFFF40</string>\n\t\t\t\t<key>lineHighlight</key>\n\t\t\t\t<string>#FFFFFF0F</string>\n\t\t\t\t<key>selection</key>\n\t\t\t\t<string>#253B76</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Comment</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>comment</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#AEAEAE</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#D8FA3C</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Entity</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FF6400</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Keyword</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FBDE2D</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Storage</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>storage</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FBDE2D</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>String</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string, meta.verbatim</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#61CE3C</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Support</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#8DA6CE</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Variable</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>variable</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Invalid – Deprecated</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>invalid.deprecated</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#AB2A1D</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Invalid – Illegal</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>invalid.illegal</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#9D1E15</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#F8F8F8</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Superclass</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.other.inherited-class</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FF6400</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>String interpolation</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string constant.other.placeholder</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FF6400</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>meta.function-call.py</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.function-call.py</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#BECDE6</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>meta.tag</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.tag, meta.tag entity</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#7F90AA</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>entity.name.section</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.section</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FFFFFF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>OCaml variant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword.type.variant</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#D5E0F3</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>OCaml operator</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source.ocaml keyword.operator.symbol</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#F8F8F8</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>OCaml infix operator</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source.ocaml keyword.operator.symbol.infix</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#8DA6CE</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>OCaml prefix operator</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source.ocaml keyword.operator.symbol.prefix</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#8DA6CE</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>OCaml f-p infix operator</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source.ocaml keyword.operator.symbol.infix.floating-point</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>underline</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>OCaml f-p prefix operator</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source.ocaml keyword.operator.symbol.prefix.floating-point</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>underline</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>OCaml f-p constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source.ocaml constant.numeric.floating-point</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>underline</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>LaTeX environment</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>text.tex.latex meta.function.environment</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#FFFFFF08</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>LaTeX environment (nested)</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>text.tex.latex meta.function.environment meta.function.environment</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#7A96FA08</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Latex support</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>text.tex.latex support.function</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FBDE2D</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>PList unquoted string</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source.plist string.unquoted, source.plist keyword.operator</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FFFFFF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t</array>\n\t<key>uuid</key>\n\t<string>A2C6BAA7-90D0-4147-BBF5-96B0CD92D109</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "tool/tmthemes/Clouds.tmTheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>name</key>\n\t<string>Clouds</string>\n\t<key>settings</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#FFFFFF</string>\n\t\t\t\t<key>caret</key>\n\t\t\t\t<string>#000000</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#000000</string>\n\t\t\t\t<key>invisibles</key>\n\t\t\t\t<string>#BFBFBF</string>\n\t\t\t\t<key>lineHighlight</key>\n\t\t\t\t<string>#FFFBD1</string>\n\t\t\t\t<key>selection</key>\n\t\t\t\t<string>#BDD5FC</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Comment</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>comment</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#BCC8BA</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>String</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#5D90CD</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Number</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.numeric</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#46A609</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Built-in constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.language</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#39946A</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>User-defined constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.character, constant.other</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Variable</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>variable.language, variable.other</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Keyword</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword, support.constant.property-value, constant.other.color</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#AF956F</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Keyword -&gt; Unit</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword.other.unit</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#96DC5F</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Keyword -&gt; Operator</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword.operator</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#484848</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Storage</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>storage</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#C52727</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Class name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.class</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Inherited class</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.other.inherited-class</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#858585</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Function name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.function</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Function argument</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>variable.parameter</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Tag name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.tag</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#606060</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>HTML Entity</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.character.entity</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#BF78CC</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>JS Support Class</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.class.js</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#BF78CC</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Tag attribute</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.other.attribute-name</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#606060</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>CSS Selector</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.selector.css, entity.name.tag.css, entity.other.attribute-name.id.css, entity.other.attribute-name.class.css</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#C52727</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>CSS Property</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.property-name.css</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#484848</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Library function</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.function</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#C52727</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Library constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.constant</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Library class/type</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.type, support.class</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Library variable</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.other.variable</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Invalid</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>invalid</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#FF002A</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Punctuation/Widgets</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>punctuation.section.embedded</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#C52727</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Punctuation (Tags)</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>punctuation.definition.tag</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#606060</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Keyword -&gt; CSS</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.other.color.rgb-value.css, support.constant.property-value.css</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#BF78CC</string>\n\t\t\t</dict>\n\t\t</dict>\n\t</array>\n\t<key>uuid</key>\n\t<string>47536290-6FC1-4B09-A08F-B219909E1A69</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "tool/tmthemes/Cobalt.tmTheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>author</key>\n\t<string>Jacob Rus</string>\n\t<key>comment</key>\n\t<string>Created by Jacob Rus.  Based on ‘Slate’ by Wilson Miner</string>\n\t<key>name</key>\n\t<string>Cobalt</string>\n\t<key>settings</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#002240</string>\n\t\t\t\t<key>caret</key>\n\t\t\t\t<string>#FFFFFF</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FFFFFF</string>\n\t\t\t\t<key>invisibles</key>\n\t\t\t\t<string>#FFFFFF26</string>\n\t\t\t\t<key>lineHighlight</key>\n\t\t\t\t<string>#00000059</string>\n\t\t\t\t<key>selection</key>\n\t\t\t\t<string>#B36539BF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Punctuation</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>punctuation - (punctuation.definition.string | punctuation.definition.comment)</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#E1EFFF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FF628C</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Entity</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FFDD00</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Keyword</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FF9D00</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Storage</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>storage</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FFEE80</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>String</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string -string.unquoted.old-plist -string.unquoted.heredoc, string.unquoted.heredoc string</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#3AD900</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Comment</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>comment</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#0088FF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Support</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#80FFBB</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Variable</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>variable</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#CCCCCC</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Lang Variable</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>variable.language</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FF80E1</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Function Call</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.function-call</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FFEE80</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Invalid</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>invalid</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#800F00</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#F8F8F8</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Embedded Source</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>text source, string.unquoted.heredoc, source source</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#223545</string>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FFFFFF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Entity inherited-class</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.other.inherited-class</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#80FCFF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>String embedded-source</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string.quoted source</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#9EFF80</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>String constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string constant</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#80FF82</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>String.regexp</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string.regexp</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#80FFC2</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>String variable</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string variable</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#EDEF7D</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Support.function</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.function</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FFB054</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Support.constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.constant</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#EB939A</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Exception</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.type.exception</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FF1E00</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>C/C++ Preprocessor Line</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.preprocessor.c</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#8996A8</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>C/C++ Preprocessor Directive</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.preprocessor.c keyword</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#AFC4DB</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Doctype/XML Processing</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.sgml.html meta.doctype, meta.sgml.html meta.doctype entity, meta.sgml.html meta.doctype string, meta.xml-processing, meta.xml-processing entity, meta.xml-processing string</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#73817D</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Meta.tag.A</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.tag, meta.tag entity</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#9EFFFF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>css tag-name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.selector.css entity.name.tag</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#9EFFFF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>css#id</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.selector.css entity.other.attribute-name.id</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FFB454</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>css.class</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.selector.css entity.other.attribute-name.class</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#5FE461</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>css property-name:</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.type.property-name.css</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#9DF39F</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>css property-value;</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.property-group support.constant.property-value.css, meta.property-value support.constant.property-value.css</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#F6F080</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>css @at-rule</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.preprocessor.at-rule keyword.control.at-rule</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#F6AA11</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>css additional-constants</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.property-value support.constant.named-color.css, meta.property-value constant</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#EDF080</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>css constructor.argument</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.constructor.argument.css</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#EB939A</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>diff.header</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.diff, meta.diff.header</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#000E1A</string>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#F8F8F8</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>diff.deleted</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.deleted</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#4C0900</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#F8F8F8</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>diff.changed</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.changed</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#806F00</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#F8F8F8</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>diff.inserted</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.inserted</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#154F00</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#F8F8F8</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Raw Markup</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.raw</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#8FDDF630</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Block Quote</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.quote</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#004480</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>List</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.list</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#130D26</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Bold Markup</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.bold</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#C1AFFF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Italic Markup</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.italic</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#B8FFD9</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Heading Markup</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.heading</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#001221</string>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#C8E4FD</string>\n\t\t\t</dict>\n\t\t</dict>\n\t</array>\n\t<key>uuid</key>\n\t<string>06CD1FB2-A00A-4F8C-97B2-60E131980454</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "tool/tmthemes/Dawn.tmTheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>author</key>\n\t<string>David Powers</string>\n\t<key>comment</key>\n\t<string>Dawn</string>\n\t<key>name</key>\n\t<string>Dawn</string>\n\t<key>settings</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#F9F9F9</string>\n\t\t\t\t<key>caret</key>\n\t\t\t\t<string>#000000</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#080808</string>\n\t\t\t\t<key>invisibles</key>\n\t\t\t\t<string>#4B4B7E80</string>\n\t\t\t\t<key>lineHighlight</key>\n\t\t\t\t<string>#2463B41F</string>\n\t\t\t\t<key>selection</key>\n\t\t\t\t<string>#275FFF4D</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Comment</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>comment</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#5A525F</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#811F24</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Entity</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#BF4F24</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Keyword</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#794938</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Storage</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>storage</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#A71D5D</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>String</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string | punctuation.definition.string</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#0B6125</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Support</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#691C97</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Variable</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>variable</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#234A97</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Punctuation.separator</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>punctuation.separator</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#794938</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Invalid – Deprecated</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>invalid.deprecated</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold italic underline</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#B52A1D</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Invalid – Illegal</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>invalid.illegal</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#B52A1D</string>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic underline</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#F8F8F8</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>String embedded-source</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string source</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#6F8BBA26</string>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#080808</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>String constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string constant</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#696969</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>String variable</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string variable</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#234A97</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>String.regexp</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string.regexp</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#CF5628</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>String.regexp.«special»</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string.regexp.character-class, string.regexp constant.character.escaped, string.regexp source.ruby.embedded, string.regexp string.regexp.arbitrary-repitition</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold italic</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#CF5628</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>String.regexp constant.character.escape</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string.regexp constant.character.escape</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#811F24</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Embedded Source</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>text source</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#6F8BBA26</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Support.function</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.function</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#693A17</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Support.constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.constant</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#B4371F</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Support.variable</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.variable</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#234A97</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Markup.list</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.list</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#693A17</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Markup.heading</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.heading | markup.heading entity.name</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#19356D</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Markup.quote</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.quote</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#BBBBBB30</string>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#0B6125</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Markup.italic</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.italic</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#080808</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Markup.bold</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.bold</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#080808</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Markup.underline</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.underline</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>underline</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#080808</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Markup.link</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.link</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic underline</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#234A97</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Markup.raw</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.raw</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#BBBBBB30</string>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#234A97</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Markup.deleted</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.deleted</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#59140E</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Meta.separator</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.separator</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#DCDCDC</string>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#19356D</string>\n\t\t\t</dict>\n\t\t</dict>\n\t</array>\n\t<key>uuid</key>\n\t<string>E7E82498-F9EA-49A6-A0D8-12327EA46B01</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "tool/tmthemes/Dreamweaver.tmTheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>comment</key>\n\t<string>By Jim Isaacs - jimisaacs.com</string>\n\t<key>name</key>\n\t<string>Dreamweaver</string>\n\t<key>settings</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#FFFFFF</string>\n\t\t\t\t<key>caret</key>\n\t\t\t\t<string>#000000</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#000000</string>\n\t\t\t\t<key>invisibles</key>\n\t\t\t\t<string>#BFBFBF</string>\n\t\t\t\t<key>lineHighlight</key>\n\t\t\t\t<string>#00000012</string>\n\t\t\t\t<key>selection</key>\n\t\t\t\t<string>#5EA0FF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>text</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>text</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#000000</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>constant numeric</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.numeric - source.css</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#EE000B</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>comment general</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>comment</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#9A9A9A</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>html meta</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>text.html meta.tag</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#00359E</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>html string</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>text.html.basic meta.tag string.quoted - source</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#001EFF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>html contstant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>text.html.basic constant.character.entity.html</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#000000</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>html a tag</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>text.html meta.tag.a - string</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#106800</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>html img tag</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>text.html meta.tag.img - string</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#6D232E</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>html form tag</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>text.html meta.tag.form - string</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FF9700</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>html table</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>text.html meta.tag.table - string</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#009079</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>js embedded</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source.js.embedded.html punctuation.definition.tag - source.php, source.js.embedded.html entity.name.tag.script, source.js.embedded entity.other.attribute-name - source.js string</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#842B44</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>js comment</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source.js comment - source.php</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#9A9A9A</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>js meta function</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source.js meta.function - source.php</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#000000</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>js instance / support.function</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source.js meta.class - source.php, source.js support.function - source.php</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#24C696</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>js string</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source.js string - source.php, source.js keyword.operator</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#0035FF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>js support</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source.js support.class</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#7E00B7</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>js storage</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source.js storage</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#000000</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>js storage (not function) / bool / new / braces</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source.js storage - storage.type.function - source.php, source.js constant - source.php, source.js keyword - source.php, source.js variable.language, source.js meta.brace, source.js punctuation.definition.parameters.begin, source.js punctuation.definition.parameters.end</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#05208C</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>js regexp</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source.js string.regexp, source.js string.regexp constant</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#106800</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>css embedded</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source.css.embedded.html punctuation.definition.tag, source.css.embedded.html entity.name.tag.style, source.css.embedded entity.other.attribute-name - meta.selector</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#8D00B7</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>css @import</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source.css meta.at-rule.import.css</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#009C7F</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>css @important</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source.css keyword.other.important</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#EE000B</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>css @media</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source.css meta.at-rule.media</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#430303</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>css string</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source.css string</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#106800</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>css selector/prop-list</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source.css meta.selector, source.css meta.property-list, source.css meta.at-rule</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#DA29FF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>css punctuation</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source.css punctuation.separator - source.php, source.css punctuation.terminator - source.php</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#DA29FF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>css property name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source.css meta.property-name</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#05208C</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>css property value</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source.css meta.property-value</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#0035FF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>php begin/end block</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source.php punctuation.section.embedded.begin, source.php punctuation.section.embedded.end</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#EE000B</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>php</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source.php - punctuation.section</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#000000</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>php varaible</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source.php variable, source.php meta.function.arguments</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#000000</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>php punctuation</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source.php punctuation - string - variable - meta.function</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#05208C</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>php storage.type</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source.php storage.type</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#24BF96</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>php keyword general / storage misc</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source.php keyword - comment, source.php storage.type.class, source.php storage.type.interface, source.php storage.modifier, source.php constant.language</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#009714</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>php support / storage / operator</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source.php support , source.php storage, source.php keyword.operator, source.php storage.type.function</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#0035FF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>php varaible global</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source.php variable.other.global</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#0092F2</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>php support constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source.php support.constant, source.php constant.language.php</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#551D02</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>php string</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source.php string, source.php string keyword.operator</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#E20000</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>php string variable</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source.php string.quoted.double variable</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FF6200</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>php comment general</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source.php comment</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FF9404</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Invalid</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>invalid</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#EFFF8A</string>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#EE000B</string>\n\t\t\t</dict>\n\t\t</dict>\n\t</array>\n\t<key>uuid</key>\n\t<string>4C43099A-C325-4F56-BACB-F332209207B0</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "tool/tmthemes/Eiffel.tmTheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>name</key>\n\t<string>Eiffel</string>\n\t<key>author</key>\n\t<string>Ian Joyner</string>\n\t<key>settings</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#FFFFFF</string>\n\t\t\t\t<key>caret</key>\n\t\t\t\t<string>#000000</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#000000</string>\n\t\t\t\t<key>invisibles</key>\n\t\t\t\t<string>#BFBFBF</string>\n\t\t\t\t<key>lineHighlight</key>\n\t\t\t\t<string>#00000012</string>\n\t\t\t\t<key>selection</key>\n\t\t\t\t<string>#C3DCFF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Comment</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>comment</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#00B418</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Variable</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>variable</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#0206FF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Keyword</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#0100B6</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Number</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.numeric</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#CD0000</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>User-defined constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#C5060B</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Built-in constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.language</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#585CF6</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>String</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#D80800</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>String interpolation</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.character.escape, string source</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#26B31A</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Preprocessor line</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.preprocessor</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#1A921C</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Preprocessor directive</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword.control.import</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#0C450D</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Function name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.function, keyword.other.name-of-parameter.objc</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#0000A2</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Type name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.type</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Inherited class name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.other.inherited-class</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Function parameter</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>variable.parameter</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Function argument and result types</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>storage.type.method</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#70727E</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Section</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.section entity.name.section, declaration.section entity.name.section</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Library function</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.function</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#3C4C72</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Library object</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.class, support.type</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#6D79DE</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Library constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.constant</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#06960E</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Library variable</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.variable</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#21439C</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>JS: Operator</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword.operator.js</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#687687</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Invalid</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>invalid</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#990000</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FFFFFF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Invalid trailing whitespace</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>invalid.deprecated.trailing-whitespace</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#FFD0D0</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Embedded source</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>text source, string.unquoted</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#427FF530</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Markup XML declaration</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.xml-processing, declaration.xml-processing</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#68685B</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Markup DOCTYPE</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.doctype, declaration.doctype</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#888888</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Markup DTD</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.doctype.DTD, declaration.doctype.DTD</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Markup tag</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.tag, declaration.tag</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#1C02FF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Markup name of tag</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.tag</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Markup tag attribute</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.other.attribute-name</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Markup: Heading</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.heading</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#0C07FF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Markup: Quote</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.quote</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#000000</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Markup: List</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.list</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#B90690</string>\n\t\t\t</dict>\n\t\t</dict>\n\t</array>\n\t<key>uuid</key>\n\t<string>ADD7FDE7-C6BE-454B-A71A-7951ED54FB04</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "tool/tmthemes/GitHub.tmTheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>author</key>\n\t<string>Martin Kühl</string>\n\t<key>comment</key>\n\t<string>A theme based on the GitHub code stylesheet.</string>\n\t<key>name</key>\n\t<string>GitHub</string>\n\t<key>settings</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>comment</key>\n\t\t\t<string>\nbackground              #files .file .data background-color\ncaret                   #files .file .meta color\ninvisibles              .syntax .w\nlineHighlight   #FFFEEB #files .file .private background-color\n    alt:        #FFFFCC colour that gets added via javascript\nselection       #B4D5FE handmade :-)\n    alt:        #FFFFCC colour that gets added via javascript\n                #EAF2F5 #header .userbox background-color\n                #EAEAEA #files .file background-color\n                #DEDEDE #files .file border-color\n                #F9EA86 Mac OS X system selection colour “Gold”\n\t\t\t</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#F8F8FF</string>\n\t\t\t\t<key>caret</key>\n\t\t\t\t<string>#666666</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#000000</string>\n\t\t\t\t<key>invisibles</key>\n\t\t\t\t<string>#BBBBBB</string>\n\t\t\t\t<key>lineHighlight</key>\n\t\t\t\t<string>#FFFEEB</string>\n\t\t\t\t<key>selection</key>\n\t\t\t\t<string>#B4D5FE</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>comment</key>\n\t\t\t<string>.syntax .c, .syntax .c[ml]</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Comment</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>comment</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#999988</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Comment.Preproc</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>comment.block.preprocessor</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>comment</key>\n\t\t\t\t<string>.syntax .cp</string>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#999999</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Comment.Special</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>comment.documentation, comment.block.documentation</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>comment</key>\n\t\t\t\t<string>.syntax .cs</string>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold italic</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#999999</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Error</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>invalid.illegal</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#E3D2D2</string>\n\t\t\t\t<key>comment</key>\n\t\t\t\t<string>.syntax .err</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#A61717</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>comment</key>\n\t\t\t<string>.syntax .k, .syntax .k[dpr]</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Keyword</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword, storage</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>comment</key>\n\t\t\t<string>.syntax .o, .syntax .ow</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Operator</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword.operator</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Keyword.Constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.language, support.constant</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>comment</key>\n\t\t\t\t<string>.style .kc</string>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Keyword.Type</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>storage.type, support.type</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>comment</key>\n\t\t\t\t<string>.style .kt</string>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#445588</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Name.Attribute</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.other.attribute-name</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>comment</key>\n\t\t\t\t<string>.style .na</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#008080</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Name.Builtin</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>variable.other</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>comment</key>\n\t\t\t\t<string>.style .nb</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#0086B3</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Name.Builtin.Pseudo</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>variable.language</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>comment</key>\n\t\t\t\t<string>.style .bp</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#999999</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>comment</key>\n\t\t\t<string>TODO: support.class is styled as Name.Constant on GitHub.</string>\n\t\t\t<key>name</key>\n\t\t\t<string>Name.Class</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.type, entity.other.inherited-class, support.class</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>comment</key>\n\t\t\t\t<string>.style .nc</string>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#445588</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Name.Constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>variable.other.constant</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>comment</key>\n\t\t\t\t<string>.style .no</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#008080</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Name.Entity</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.character.entity</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>comment</key>\n\t\t\t\t<string>.style .ni</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#800080</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Name.Exception</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.exception</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>comment</key>\n\t\t\t\t<string>.style .ne</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#990000</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Name.Function</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.function, support.function, keyword.other.name-of-parameter</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>comment</key>\n\t\t\t\t<string>.style .nf</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#990000</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Name.Namespace</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.section</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>comment</key>\n\t\t\t\t<string>.style .nn</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#555555</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Name.Tag</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.tag</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>comment</key>\n\t\t\t\t<string>.style .nt</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#000080</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Name.Variable</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>variable.parameter, support.variable</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>comment</key>\n\t\t\t\t<string>.style .nv, .style .v[cgi]</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#008080</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Literal.Number</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.numeric, constant.other</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>comment</key>\n\t\t\t\t<string>.style .m, .style .m[fhio], .style .il</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#009999</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Literal.String</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string - string source, constant.character</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>comment</key>\n\t\t\t\t<string>.style .s[bcd2ehixl]</string>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#DD1144</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Literal.String.Regex</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string.regexp</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>comment</key>\n\t\t\t\t<string>.style .sr</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#009926</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Literal.String.Symbol</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.other.symbol</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>comment</key>\n\t\t\t\t<string>.style .ss</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#990073</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Punctuation</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>punctuation</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Generic.Deleted</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.deleted</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#FFDDDD</string>\n\t\t\t\t<key>comment</key>\n\t\t\t\t<string>.syntax .gd</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#000000</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Generic.Emph</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.italic</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>comment</key>\n\t\t\t\t<string>.syntax .ge</string>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Generic.Error</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.error</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>comment</key>\n\t\t\t\t<string>.syntax .gr</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#AA0000</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Generic.Heading</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.heading.1</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>comment</key>\n\t\t\t\t<string>.syntax .gh</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#999999</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Generic.Inserted</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.inserted</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#DDFFDD</string>\n\t\t\t\t<key>comment</key>\n\t\t\t\t<string>.syntax .gi</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#000000</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Generic.Output</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.output, markup.raw</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>comment</key>\n\t\t\t\t<string>.syntax .go</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#888888</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Generic.Prompt</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.prompt</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>comment</key>\n\t\t\t\t<string>.syntax .gp</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#555555</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Generic.Strong</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.bold</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>comment</key>\n\t\t\t\t<string>.syntax .gs</string>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Generic.Subheading</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.heading</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>comment</key>\n\t\t\t\t<string>.syntax .gu</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#AAAAAA</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Generic.Traceback</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.traceback</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>comment</key>\n\t\t\t\t<string>.syntax .gt</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#AA0000</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Generic.Underline</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.underline</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>underline</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Extra: Diff Range</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.diff.range, meta.diff.index, meta.separator</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#EAF2F5</string>\n\t\t\t\t<key>comment</key>\n\t\t\t\t<string>.syntax .gc</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#999999</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Extra: Diff From</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.diff.header.from-file</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#FFDDDD</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#999999</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Extra: Diff To</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.diff.header.to-file</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#DDFFDD</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#999999</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Extra: Link</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.link</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#4183C4</string>\n\t\t\t</dict>\n\t\t</dict>\n\t</array>\n\t<key>uuid</key>\n\t<string>FDD6F02A-74F7-4B6C-97F1-857D792EC90E</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "tool/tmthemes/IDLE.tmTheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>author</key>\n\t<string>Domenico Carbotta</string>\n\t<key>name</key>\n\t<string>IDLE</string>\n\t<key>settings</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#FFFFFF</string>\n\t\t\t\t<key>caret</key>\n\t\t\t\t<string>#000000</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#000000</string>\n\t\t\t\t<key>invisibles</key>\n\t\t\t\t<string>#BFBFBF</string>\n\t\t\t\t<key>lineHighlight</key>\n\t\t\t\t<string>#00000012</string>\n\t\t\t\t<key>selection</key>\n\t\t\t\t<string>#BAD6FD</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Comment</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>comment</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#919191</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>String</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#00A33F</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Number</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.numeric</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Built-in constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.language</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#A535AE</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>User-defined constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.character, constant.other</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Variable</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>variable.language, variable.other</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Keyword</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FF5600</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Storage</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>storage</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FF5600</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Type name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.type</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#21439C</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Inherited class</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.other.inherited-class</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Function name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.function</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#21439C</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Function argument</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>variable.parameter</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Tag name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.tag</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Tag attribute</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.other.attribute-name</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Library function</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.function</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#A535AE</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Library constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.constant</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#A535AE</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Library class/type</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.type, support.class</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#A535AE</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Library variable</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.variable</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#A535AE</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Invalid</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>invalid</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#990000</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FFFFFF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>String interpolation</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.other.placeholder.py</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#990000</string>\n\t\t\t</dict>\n\t\t</dict>\n\t</array>\n\t<key>uuid</key>\n\t<string>DDC0CBE1-442B-4CB5-80E4-26E4CFB3A277</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "tool/tmthemes/Katzenmilch.tmTheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist\n  PUBLIC '-//Apple//DTD PLIST 1.0//EN'\n  'http://www.apple.com/DTDs/PropertyList-1.0.dtd'>\n<plist version=\"1.0\">\n\t<dict>\n\t\t<key>name</key>\n\t\t<string>Katzen-Milch</string>\n\t\t<key>comment</key>\n\t\t<string>Those silly germans and their cat milk! Ghee wizz!</string>\n\t\t<key>settings</key>\n\t\t<array>\n\t\t\t<dict>\n\t\t\t\t<key>settings</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>background</key>\n\t\t\t\t\t<string>#f3f2f3</string>\n\t\t\t\t\t<key>caret</key>\n\t\t\t\t\t<string>#100011</string>\n\t\t\t\t\t<key>foreground</key>\n\t\t\t\t\t<string>#0f0009ff</string>\n\t\t\t\t\t<key>invisibles</key>\n\t\t\t\t\t<string>#000000</string>\n\t\t\t\t\t<key>lineHighlight</key>\n\t\t\t\t\t<string>#ffffff</string>\n\t\t\t\t\t<key>selection</key>\n\t\t\t\t\t<string>#6405D044</string>\n\t\t\t\t\t<key>selectionBorder</key>\n\t\t\t\t\t<string>#8425f0</string>\n\t\t\t\t\t<key>bracketContentsOptions</key>\n\t\t\t\t\t<string>underline</string>\n\t\t\t\t\t<key>tagsForeground</key>\n\t\t\t\t\t<string>#0f0009ff</string>\n\t\t\t\t\t<key>tagsOptions</key>\n\t\t\t\t\t<string>underline</string>\n\t\t\t\t</dict>\n\t\t\t</dict>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>Parenthesis</string>\n\t\t\t\t<key>scope</key>\n\t\t\t\t<string>punctuation.definition.list</string>\n\t\t\t\t<key>settings</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>fontStyle</key>\n\t\t\t\t\t<string/>\n\t\t\t\t\t<key>foreground</key>\n\t\t\t\t\t<string>#940494</string>\n\t\t\t\t\t<key>background</key>\n\t\t\t\t\t<string>#4444940a</string>\n\t\t\t\t</dict>\n\t\t\t</dict>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>Comment</string>\n\t\t\t\t<key>scope</key>\n\t\t\t\t<string>comment</string>\n\t\t\t\t<key>settings</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>fontStyle</key>\n\t\t\t\t\t<string>italic</string>\n\t\t\t\t\t<key>foreground</key>\n\t\t\t\t\t<string>#404f50aa</string>\n\t\t\t\t\t<key>background</key>\n\t\t\t\t\t<string>#5f0fff02</string>\n\t\t\t\t</dict>\n\t\t\t</dict>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>String</string>\n\t\t\t\t<key>scope</key>\n\t\t\t\t<string>string</string>\n\t\t\t\t<key>settings</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>foreground</key>\n\t\t\t\t\t<string>#5a5f9b</string>\n\t\t\t\t\t<key>background</key>\n\t\t\t\t\t<string>#aaafdb09</string>\n\t\t\t\t</dict>\n\t\t\t</dict>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>Number</string>\n\t\t\t\t<key>scope</key>\n\t\t\t\t<string>constant.numeric</string>\n\t\t\t\t<key>settings</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>foreground</key>\n\t\t\t\t\t<string>#4f827bee</string>\n\t\t\t\t\t<key>background</key>\n\t\t\t\t\t<string>#77c2bb0f</string>\n\t\t\t\t</dict>\n\t\t\t</dict>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>User-defined Constant</string>\n\t\t\t\t<key>scope</key>\n\t\t\t\t<string>constant.character, constant.other</string>\n\t\t\t\t<key>settings</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>foreground</key>\n\t\t\t\t\t<string>#025f69ff</string>\n\t\t\t\t\t<key>background</key>\n\t\t\t\t\t<string>#7f229910</string>\n\t\t\t\t</dict>\n\t\t\t</dict>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>Built-in Constant</string>\n\t\t\t\t<key>scope</key>\n\t\t\t\t<string>constant.language</string>\n\t\t\t\t<key>settings</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>fontStyle</key>\n\t\t\t\t\t<string/>\n\t\t\t\t\t<key>foreground</key>\n\t\t\t\t\t<string>#7D7e52</string>\n\t\t\t\t\t<key>background</key>\n\t\t\t\t\t<string>#bDbe820f</string>\n\t\t\t\t</dict>\n\t\t\t</dict>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>Storage Modifier</string>\n\t\t\t\t<key>scope</key>\n\t\t\t\t<string>storage.modifier</string>\n\t\t\t\t<key>settings</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>fontStyle</key>\n\t\t\t\t\t<string>bold</string>\n\t\t\t\t\t<key>foreground</key>\n\t\t\t\t\t<string>#7B5D8f</string>\n\t\t\t\t\t<key>background</key>\n\t\t\t\t\t<string>#9B9FfD0a</string>\n\t\t\t\t</dict>\n\t\t\t</dict>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>Storage</string>\n\t\t\t\t<key>scope</key>\n\t\t\t\t<string>storage</string>\n\t\t\t\t<key>settings</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>fontStyle</key>\n\t\t\t\t\t<string>bold</string>\n\t\t\t\t\t<key>foreground</key>\n\t\t\t\t\t<string>#7B5cbfff</string>\n\t\t\t\t\t<key>background</key>\n\t\t\t\t\t<string>#8B5Ddf0d</string>\n\t\t\t\t\t\t\t\t\t</dict>\n\t\t\t</dict>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>Function Name</string>\n\t\t\t\t<key>scope</key>\n\t\t\t\t<string>entity.name.function</string>\n\t\t\t\t<key>settings</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>fontStyle</key>\n\t\t\t\t\t<string></string>\n\t\t\t\t\t<key>foreground</key>\n\t\t\t\t\t<string>#025f49f7</string>\n\t\t\t\t\t<key>background</key>\n\t\t\t\t\t<string>#22ff491f</string>\n\t\t\t\t</dict>\n\t\t\t</dict>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>Support Function</string>\n\t\t\t\t<key>scope</key>\n\t\t\t\t<string>support.function</string>\n\t\t\t\t<key>settings</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>foreground</key>\n\t\t\t\t\t<string>#9D7e62</string>\n\t\t\t\t\t<key>background</key>\n\t\t\t\t\t<string>#bDbe820a</string>\n\t\t\t\t</dict>\n\t\t\t</dict>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>Misc Function</string>\n\t\t\t\t<key>scope</key>\n\t\t\t\t<string>entity.name.function.misc</string>\n\t\t\t\t<key>settings</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>foreground</key>\n\t\t\t\t\t<string>#939469</string>\n\t\t\t\t\t<key>background</key>\n\t\t\t\t\t<string>#E3E4A90a</string>\n\t\t\t\t</dict>\n\t\t\t</dict>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>Predicate Function</string>\n\t\t\t\t<key>scope</key>\n\t\t\t\t<string>entity.name.function.predicate</string>\n\t\t\t\t<key>settings</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>foreground</key>\n\t\t\t\t\t<string>#856F63</string>\n\t\t\t\t\t<key>background</key>\n\t\t\t\t\t<string>#A5DF930a</string>\n\t\t\t\t</dict>\n\t\t\t</dict>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>Input/Output Function</string>\n\t\t\t\t<key>scope</key>\n\t\t\t\t<string>entity.name.function.io</string>\n\t\t\t\t<key>settings</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>foreground</key>\n\t\t\t\t\t<string>#aF938C</string>\n\t\t\t\t\t<key>background</key>\n\t\t\t\t\t<string>#DFB3AC0a</string>\n\t\t\t\t</dict>\n\t\t\t</dict>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>External Symbol</string>\n\t\t\t\t<key>scope</key>\n\t\t\t\t<string>variable.other.external-symbol</string>\n\t\t\t\t<key>settings</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>foreground</key>\n\t\t\t\t\t<string>#7BaFaD</string>\n\t\t\t\t\t<key>background</key>\n\t\t\t\t\t<string>#BBDFDD0a</string>\n\t\t\t\t</dict>\n\t\t\t</dict>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>Variable</string>\n\t\t\t\t<key>scope</key>\n\t\t\t\t<string>variable.language, variable.other</string>\n\t\t\t\t<key>settings</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>foreground</key>\n\t\t\t\t\t<string>#316fcf</string>\n\t\t\t\t\t<key>background</key>\n\t\t\t\t\t<string>#3aafff0a</string>\n\t\t\t\t</dict>\n\t\t\t</dict>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>Parameter Variable</string>\n\t\t\t\t<key>scope</key>\n\t\t\t\t<string>variable.parameter</string>\n\t\t\t\t<key>settings</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>fontStyle</key>\n\t\t\t\t\t<string>italic</string>\n\t\t\t\t\t<key>foreground</key>\n\t\t\t\t\t<string>#33969fdd</string>\n\t\t\t\t\t<key>background</key>\n\t\t\t\t\t<string>#05d6f90b</string>\n\t\t\t\t</dict>\n\t\t\t</dict>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>Keyword</string>\n\t\t\t\t<key>scope</key>\n\t\t\t\t<string>keyword</string>\n\t\t\t\t<key>settings</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>foreground</key>\n\t\t\t\t\t<string>#674Aa8</string>\n\t\t\t\t\t<key>background</key>\n\t\t\t\t\t<string>#A3AAD80e</string>\n\t\t\t\t</dict>\n\t\t\t</dict>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>Class Name</string>\n\t\t\t\t<key>scope</key>\n\t\t\t\t<string>entity.name.class</string>\n\t\t\t\t<key>settings</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>fontStyle</key>\n\t\t\t\t\t<string>bold</string>\n\t\t\t\t\t<key>foreground</key>\n\t\t\t\t\t<string>#B9986F</string>\n\t\t\t\t\t<key>background</key>\n\t\t\t\t\t<string>#B998DF22</string>\n\t\t\t\t</dict>\n\t\t\t</dict>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>Structure Name</string>\n\t\t\t\t<key>scope</key>\n\t\t\t\t<string>entity.name.structure</string>\n\t\t\t\t<key>settings</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>foreground</key>\n\t\t\t\t\t<string>#22af9d</string>\n\t\t\t\t\t<key>background</key>\n\t\t\t\t\t<string>#B998DF0a</string>\n\t\t\t\t</dict>\n\t\t\t</dict>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>Type Name</string>\n\t\t\t\t<key>scope</key>\n\t\t\t\t<string>entity.name.type</string>\n\t\t\t\t<key>settings</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>foreground</key>\n\t\t\t\t\t<string>#af47a9</string>\n\t\t\t\t\t<key>background</key>\n\t\t\t\t\t<string>#af77a90d</string>\n\t\t\t\t</dict>\n\t\t\t</dict>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>Class name</string>\n\t\t\t\t<key>scope</key>\n\t\t\t\t<string>entity.name.class, entity.name.type.class</string>\n\t\t\t\t<key>settings</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>foreground</key>\n\t\t\t\t\t<string>#cc4357</string>\n\t\t\t\t\t<key>background</key>\n\t\t\t\t\t<string>#ffddff92</string>\n\t\t\t\t</dict>\n\t\t\t</dict>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>Support Class</string>\n\t\t\t\t<key>scope</key>\n\t\t\t\t<string>support.class</string>\n\t\t\t\t<key>settings</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>foreground</key>\n\t\t\t\t\t<string>#ef6aa7ff</string>\n\t\t\t\t\t<key>background</key>\n\t\t\t\t\t<string>#ef6aa710</string>\n\t\t\t\t</dict>\n\t\t\t</dict>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>Invalid</string>\n\t\t\t\t<key>scope</key>\n\t\t\t\t<string>invalid</string>\n\t\t\t\t<key>settings</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>background</key>\n\t\t\t\t\t<string>#CC1B27</string>\n\t\t\t\t\t<key>foreground</key>\n\t\t\t\t\t<string>#DFDFD5</string>\n\t\t\t\t</dict>\n\t\t\t</dict>\n\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>♦ String embedded-source</string>\n\t\t\t\t<key>scope</key>\n\t\t\t\t<string>string source</string>\n\t\t\t\t<key>settings</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>fontStyle</key>\n\t\t\t\t\t<string>italic</string>\n\t\t\t\t\t<key>foreground</key>\n\t\t\t\t\t<string>#13499fdd</string>\n\t\t\t\t\t<key>background</key>\n\t\t\t\t\t<string>#0099ff0a</string>\n\t\t\t\t</dict>\n\t\t\t</dict>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>Tag name</string>\n\t\t\t\t<key>scope</key>\n\t\t\t\t<string>entity.name.tag</string>\n\t\t\t\t<key>settings</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>foreground</key>\n\t\t\t\t\t<string>#3976a2</string>\n\t\t\t\t\t<key>background</key>\n\t\t\t\t\t<string>#49a6d20a</string>\n\t\t\t\t</dict>\n\t\t\t</dict>\n\t\t\t<dict>\n\t\t\t\t<key>name</key>\n\t\t\t\t<string>Tag attribute</string>\n\t\t\t\t<key>scope</key>\n\t\t\t\t<string>entity.other.attribute-name</string>\n\t\t\t\t<key>settings</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>fontStyle</key>\n\t\t\t\t\t<string/>\n\t\t\t\t\t<key>foreground</key>\n\t\t\t\t\t<string>#4946c2ee</string>\n\t\t\t\t\t<key>background</key>\n\t\t\t\t\t<string>#4986c209</string>\n\t\t\t\t</dict>\n\t\t\t</dict>\n\t\t</array>\n\t</dict>\n</plist>\n"
  },
  {
    "path": "tool/tmthemes/LAZY.tmTheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>author</key>\n\t<string>Domenico Carbotta</string>\n\t<key>name</key>\n\t<string>LAZY</string>\n\t<key>settings</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#FFFFFF</string>\n\t\t\t\t<key>caret</key>\n\t\t\t\t<string>#7C7C7C</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#000000</string>\n\t\t\t\t<key>invisibles</key>\n\t\t\t\t<string>#B6B6B6</string>\n\t\t\t\t<key>lineHighlight</key>\n\t\t\t\t<string>#EFFCA68F</string>\n\t\t\t\t<key>selection</key>\n\t\t\t\t<string>#E3FC8D</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Comment</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>comment</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#8C868F</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#3B5BB5</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Entity</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#3B5BB5</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Latex Entity</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>text.tex.latex entity</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#D62A28</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Keyword</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword, storage</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FF7800</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>String</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string, meta.verbatim</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#409B1C</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Support</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#3B5BB5</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Variable</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>variable</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Invalid – Deprecated</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>invalid.deprecated</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#990000</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Invalid – Illegal</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>invalid.illegal</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#9D1E15</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#F8F8F8</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Superclass</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.other.inherited-class</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#3B5BB5</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>String interpolation</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string constant.other.placeholder</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#671EBB</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>meta.function-call.py</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.function-call.py</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#3E4558</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>meta.tag</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.tag, meta.tag entity</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#3A4A64</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>OCaml variant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword.type.variant</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#7F90AA</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>OCaml operator</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source.ocaml keyword.operator</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#000000</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>OCaml infix operator</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source.ocaml keyword.operator.symbol.infix</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#3B5BB5</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>OCaml prefix operator</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source.ocaml keyword.operator.symbol.prefix</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#3B5BB5</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>OCaml infix f-p operator</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source.ocaml keyword.operator.symbol.infix.floating-point</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>underline</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>OCaml prefix f-p operator</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source.ocaml keyword.operator.symbol.prefix.floating-point</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>underline</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>OCaml f-p constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source.ocaml constant.numeric.floating-point</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>underline</string>\n\t\t\t</dict>\n\t\t</dict>\n\t</array>\n\t<key>uuid</key>\n\t<string>A1E55FCB-3CD2-4811-9E73-D9B87419443A</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "tool/tmthemes/LICENSE",
    "content": "If not otherwise specified (see below), files in this directory fall under the following license:\n\n   Permission to copy, use, modify, sell and distribute this\n   software is granted. This software is provided \"as is\" without\n   express or implied warranty, and with no claim as to its\n   suitability for any purpose.\n\nAn exception is made for files in readable text which contain their own license information, or files where an accompanying file exists (in the same directory) with a “-license” suffix added to the base-name name of the original file, and an extension of txt, html, or similar. For example “tidy” is accompanied by “tidy-license.txt”."
  },
  {
    "path": "tool/tmthemes/Merbivore.tmTheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>name</key>\n\t<string>Merbivore</string>\n\t<key>settings</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#161616</string>\n\t\t\t\t<key>caret</key>\n\t\t\t\t<string>#FFFFFF</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#E6E1DC</string>\n\t\t\t\t<key>invisibles</key>\n\t\t\t\t<string>#404040</string>\n\t\t\t\t<key>lineHighlight</key>\n\t\t\t\t<string>#333435</string>\n\t\t\t\t<key>selection</key>\n\t\t\t\t<string>#454545</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Source</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Comment</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>comment</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#AD2EA4</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Keyword</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword, storage</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FC6F09</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Function (definition)</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.function, keyword.other.name-of-parameter.objc</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Class (definition)</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Class inheritence</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.other.inherited-class</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FC83FF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Number</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.numeric</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#58C554</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Variable</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>variable.language, variable.other</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#1EDAFB</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Constant (other variable)</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>variable.other.constant</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Constant lib</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.library</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#8DFF0A</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>support function</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.function</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FC6F09</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Constant (built-in)</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.language</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FDC251</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>String</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#8DFF0A</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Library type</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.type</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#1EDAFB</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Library constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.constant</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#8DFF0A</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Markup tag</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.tag, declaration.tag, entity.name.tag</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FC6F09</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Markup tag attribute</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.other.attribute-name</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FFFF89</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Invalid</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>invalid</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#990000</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FFFFFF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>String interpolation</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.character.escaped, constant.character.escape, string source, string source.ruby</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#519F50</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Diff Add</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.inserted</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#144212</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#E6E1DC</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Diff Remove</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.deleted</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#660000</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#E6E1DC</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Diff Header</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.diff.header, meta.separator.diff, meta.diff.index, meta.diff.range</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#2F33AB</string>\n\t\t\t</dict>\n\t\t</dict>\n\t</array>\n\t<key>uuid</key>\n\t<string>2ABC646D-06F3-48A5-94E9-18EF34474C97</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "tool/tmthemes/Monokai.tmTheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>name</key>\n\t<string>Monokai</string>\n\t<key>settings</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#272822</string>\n\t\t\t\t<key>caret</key>\n\t\t\t\t<string>#F8F8F0</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#F8F8F2</string>\n\t\t\t\t<key>invisibles</key>\n\t\t\t\t<string>#3B3A32</string>\n\t\t\t\t<key>lineHighlight</key>\n\t\t\t\t<string>#3E3D32</string>\n\t\t\t\t<key>selection</key>\n\t\t\t\t<string>#49483E</string>\n\t\t\t\t<key>findHighlight</key>\n\t\t\t\t<string>#FFE792</string>\n\t\t\t\t<key>findHighlightForeground</key>\n\t\t\t\t<string>#000000</string>\n\t\t\t\t<key>selectionBorder</key>\n\t\t\t\t<string>#222218</string>\n\t\t\t\t<key>activeGuide</key>\n\t\t\t\t<string>#9D550FB0</string>\n\n\t\t\t\t<key>bracketsForeground</key>\n\t\t\t\t<string>#F8F8F2A5</string>\n\t\t\t\t<key>bracketsOptions</key>\n\t\t\t\t<string>underline</string>\n\n\t\t\t\t<key>bracketContentsForeground</key>\n\t\t\t\t<string>#F8F8F2A5</string>\n\t\t\t\t<key>bracketContentsOptions</key>\n\t\t\t\t<string>underline</string>\n\n\t\t\t\t<key>tagsOptions</key>\n\t\t\t\t<string>stippled_underline</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Comment</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>comment</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#75715E</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>String</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#E6DB74</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Number</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.numeric</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#AE81FF</string>\n\t\t\t</dict>\n\t\t</dict>\n\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Built-in constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.language</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#AE81FF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>User-defined constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.character, constant.other</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#AE81FF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Variable</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>variable</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Keyword</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#F92672</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Storage</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>storage</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#F92672</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Storage type</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>storage.type</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#66D9EF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Class name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.class</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>underline</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#A6E22E</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Inherited class</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.other.inherited-class</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic underline</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#A6E22E</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Function name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.function</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#A6E22E</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Function argument</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>variable.parameter</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FD971F</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Tag name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.tag</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#F92672</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Tag attribute</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.other.attribute-name</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#A6E22E</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Library function</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.function</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#66D9EF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Library constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.constant</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#66D9EF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Library class/type</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.type, support.class</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#66D9EF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Library variable</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.other.variable</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Invalid</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>invalid</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#F92672</string>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#F8F8F0</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Invalid deprecated</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>invalid.deprecated</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#AE81FF</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#F8F8F0</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>JSON String</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.structure.dictionary.json string.quoted.double.json</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#CFCFC2</string>\n\t\t\t</dict>\n\t\t</dict>\n\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>diff.header</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.diff, meta.diff.header</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#75715E</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>diff.deleted</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.deleted</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#F92672</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>diff.inserted</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.inserted</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#A6E22E</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>diff.changed</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.changed</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#E6DB74</string>\n\t\t\t</dict>\n\t\t</dict>\n\n\t\t<dict>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.numeric.line-number.find-in-files - match</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#AE81FFA0</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.filename.find-in-files</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#E6DB74</string>\n\t\t\t</dict>\n\t\t</dict>\n\n\t</array>\n\t<key>uuid</key>\n\t<string>D8D5E82E-3D5B-46B5-B38E-8C841C21347D</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "tool/tmthemes/Solarized-dark.tmTheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>name</key>\n\t<string>Solarized (dark)</string>\n\t<key>settings</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#002B36</string>\n\t\t\t\t<key>caret</key>\n\t\t\t\t<string>#D30102</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#93A1A1</string>\n\t\t\t\t<key>invisibles</key>\n\t\t\t\t<string>#93A1A180</string>\n\t\t\t\t<key>lineHighlight</key>\n\t\t\t\t<string>#073642</string>\n\t\t\t\t<key>selection</key>\n\t\t\t\t<string>#073642</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Comment</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>comment</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#657B83</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>String</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#2AA198</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Regexp</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string.regexp</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#D30102</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Number</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.numeric</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#D33682</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Variable</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>variable.language, variable.other</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#268BD2</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Keyword</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#859900</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Storage</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>storage</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#93A1A1</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Class name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.class, entity.name.type.class</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#CB4B16</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Function name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.function</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#268BD2</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Variable start</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>punctuation.definition.variable</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#859900</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Embedded code markers</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>punctuation.section.embedded.begin, punctuation.section.embedded.end</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#D30102</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Built-in constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.language, meta.preprocessor</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#B58900</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Support.construct</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.function.construct, keyword.other.new</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#CB4B16</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>User-defined constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.character, constant.other</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#CB4B16</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Inherited class</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.other.inherited-class</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#6C71C4</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Function argument</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>variable.parameter</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Tag name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.tag</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#268BD2</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Tag start/end</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>punctuation.definition.tag</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#657B83</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Tag attribute</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.other.attribute-name</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#93A1A1</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Library function</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.function</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#268BD2</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Continuation</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>punctuation.separator.continuation</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#D30102</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Library constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.constant</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Library class/type</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.type, support.class</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#859900</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Library Exception</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.type.exception</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#CB4B16</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Library variable</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.other.variable</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Invalid</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>invalid</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t</array>\n\t<key>uuid</key>\n\t<string>F930B0BF-AA03-4232-A30F-CEF749FF8E72</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "tool/tmthemes/Solarized-light.tmTheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>name</key>\n\t<string>Solarized (light)</string>\n\t<key>settings</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#FDF6E3</string>\n\t\t\t\t<key>caret</key>\n\t\t\t\t<string>#000000</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#586E75</string>\n\t\t\t\t<key>invisibles</key>\n\t\t\t\t<string>#93A1A180</string>\n\t\t\t\t<key>lineHighlight</key>\n\t\t\t\t<string>#EEE8D5</string>\n\t\t\t\t<key>selection</key>\n\t\t\t\t<string>#073642</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Comment</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>comment</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#93A1A1</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>String</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#2AA198</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Regexp</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string.regexp</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#D30102</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Number</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.numeric</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#D33682</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Variable</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>variable.language, variable.other</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#268BD2</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Keyword</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#859900</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Storage</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>storage</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#073642</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Class name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.class, entity.name.type.class</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#268BD2</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Function name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.function</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#268BD2</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Variable start</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>punctuation.definition.variable</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#859900</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Embedded code markers</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>punctuation.section.embedded.begin, punctuation.section.embedded.end</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#D30102</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Built-in constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.language, meta.preprocessor</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#B58900</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Support.construct</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.function.construct, keyword.other.new</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#D30102</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>User-defined constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.character, constant.other</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#CB4B16</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Inherited class</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.other.inherited-class</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Function argument</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>variable.parameter</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Tag name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.tag</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#268BD2</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Tag start/end</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>punctuation.definition.tag.begin, punctuation.definition.tag.end</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#93A1A1</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Tag attribute</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.other.attribute-name</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#93A1A1</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Library function</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.function</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#268BD2</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Continuation</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>punctuation.separator.continuation</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#D30102</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Library constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.constant</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Library class/type</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.type, support.class</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#859900</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Library Exception</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.type.exception</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#CB4B16</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Library variable</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.other.variable</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Invalid</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>invalid</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t</array>\n\t<key>uuid</key>\n\t<string>38E819D9-AE02-452F-9231-ECC3B204AFD7</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "tool/tmthemes/SpaceCadet.tmTheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>author</key>\n\t<string>Alex Ross</string>\n\t<key>comment</key>\n\t<string>Created by Alex Ross</string>\n\t<key>name</key>\n\t<string>SpaceCadet</string>\n\t<key>settings</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#0D0D0D</string>\n\t\t\t\t<key>caret</key>\n\t\t\t\t<string>#7F005D</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#DDE6CF</string>\n\t\t\t\t<key>invisibles</key>\n\t\t\t\t<string>#BFBFBF</string>\n\t\t\t\t<key>lineHighlight</key>\n\t\t\t\t<string>#00000012</string>\n\t\t\t\t<key>selection</key>\n\t\t\t\t<string>#40002F</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Comment</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>comment</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#473C45</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>String</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#805978</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#A8885A</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Variable</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>variable.parameter, variable.other</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#596380</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Keyword</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword - keyword.operator, keyword.operator.logical</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#728059</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Storage</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>storage</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#9EBF60</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Entity</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#6078BF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Inherited class</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.other.inherited-class</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Support</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#8A4B66</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Exception</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.type.exception</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#893062</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Tag name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.tag</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Tag attribute</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.other.attribute-name</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Library constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.constant</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Library class/type</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.type, support.class</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Library variable</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.other.variable</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Invalid</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>invalid</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#5F0047</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>- Meta</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>  function.section</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.function.section</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#371D28</string>\n\t\t\t</dict>\n\t\t</dict>\n\t</array>\n\t<key>uuid</key>\n\t<string>2C24E84F-F9FE-4C2E-92D2-F52198BA7E41</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "tool/tmthemes/Sunburst.tmTheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>author</key>\n\t<string>Stanley Rost</string>\n\t<key>comment</key>\n\t<string>(π) Soryu, 2005</string>\n\t<key>name</key>\n\t<string>Sunburst</string>\n\t<key>settings</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#000000</string>\n\t\t\t\t<key>caret</key>\n\t\t\t\t<string>#A7A7A7</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#F8F8F8</string>\n\t\t\t\t<key>invisibles</key>\n\t\t\t\t<string>#CAE2FB3D</string>\n\t\t\t\t<key>lineHighlight</key>\n\t\t\t\t<string>#FFFFFF1A</string>\n\t\t\t\t<key>selection</key>\n\t\t\t\t<string>#DDF0FF33</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Comment</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>comment</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#AEAEAE</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#3387CC</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Entity</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#89BDFF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Keyword</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#E28964</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Storage</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>storage</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#99CF50</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>String</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#65B042</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Support</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#9B859D</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Variable</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>variable</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#3E87E3</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Invalid – Deprecated</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>invalid.deprecated</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic underline</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FD5FF1</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Invalid – Illegal</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>invalid.illegal</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#562D56BF</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FD5FF1</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>-----------------------------------</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>♦ Embedded Source (Bright)</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>text source</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#B1B3BA08</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>♦ Entity inherited-class</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.other.inherited-class</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#9B5C2E</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>♦ String embedded-source</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string.quoted source</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#DAEFA3</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>♦ String constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string constant</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#DDF2A4</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>♦ String.regexp</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string.regexp</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#E9C062</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>♦ String.regexp.«special»</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string.regexp constant.character.escape, string.regexp source.ruby.embedded, string.regexp string.regexp.arbitrary-repitition</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#CF7D34</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>♦ String variable</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string variable</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#8A9A95</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>♦ Support.function</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.function</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#DAD085</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>♦ Support.constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.constant</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#CF6A4C</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>c C/C++ Preprocessor Line</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.preprocessor.c</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#8996A8</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>c C/C++ Preprocessor Directive</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.preprocessor.c keyword</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#AFC4DB</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>j Entity Name Type</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.type</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>underline</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>j Cast</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.cast</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#676767</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>✘ Doctype/XML Processing</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.sgml.html meta.doctype, meta.sgml.html meta.doctype entity, meta.sgml.html meta.doctype string, meta.xml-processing, meta.xml-processing entity, meta.xml-processing string</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#494949</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>✘ Meta.tag.«all»</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.tag, meta.tag entity</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#89BDFF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>✘ Meta.tag.inline</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source entity.name.tag, source entity.other.attribute-name, meta.tag.inline, meta.tag.inline entity</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#E0C589</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>✘ Namespaces</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.tag.namespace, entity.other.attribute-name.namespace</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#E18964</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>§ css tag-name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.selector.css entity.name.tag</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#CDA869</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>§ css:pseudo-class</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.selector.css entity.other.attribute-name.tag.pseudo-class</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#8F9D6A</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>§ css#id</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.selector.css entity.other.attribute-name.id</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#8B98AB</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>§ css.class</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.selector.css entity.other.attribute-name.class</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#9B703F</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>§ css property-name:</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.type.property-name.css</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#C5AF75</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>§ css property-value;</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.property-group support.constant.property-value.css, meta.property-value support.constant.property-value.css</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#F9EE98</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>§ css @at-rule</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.preprocessor.at-rule keyword.control.at-rule</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#8693A5</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>§ css additional-constants</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.property-value support.constant.named-color.css, meta.property-value constant</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#DD7B3B</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>§ css constructor.argument</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.constructor.argument.css</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#8F9D6A</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>⎇ diff.header</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.diff, meta.diff.header</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#0E2231</string>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#F8F8F8</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>⎇ diff.deleted</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.deleted</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#420E09</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#F8F8F8</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>⎇ diff.changed</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.changed</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#4A410D</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#F8F8F8</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>⎇ diff.inserted</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.inserted</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#253B22</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#F8F8F8</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>--------------------------------</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Markup: Italic</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.italic</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#E9C062</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Markup: Bold</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.bold</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#E9C062</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Markup: Underline</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.underline</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>underline</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#E18964</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Markup: Quote</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.quote</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#FEE09C12</string>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#E1D4B9</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Markup: Heading</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.heading, markup.heading entity</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#632D04</string>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FEDCC5</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Markup: List</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.list</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#E1D4B9</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Markup: Raw</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.raw</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#B1B3BA08</string>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#578BB3</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Markup: Comment</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup comment</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#F67B37</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Markup: Separator</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.separator</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#242424</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#60A633</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Log Entry</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.line.entry.logfile, meta.line.exit.logfile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#EEEEEE29</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Log Entry Error</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.line.error.logfile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#751012</string>\n\t\t\t</dict>\n\t\t</dict>\n\t</array>\n\t<key>uuid</key>\n\t<string>C8C58F9A-35FE-44A4-9BC2-2F3C343DC81D</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "tool/tmthemes/Tomorrow-Night-Blue.tmTheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>comment</key>\n\t<string>http://chriskempson.com</string>\n\t<key>name</key>\n\t<string>Tomorrow Night - Blue</string>\n\t<key>settings</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#002451</string>\n\t\t\t\t<key>caret</key>\n\t\t\t\t<string>#FFFFFF</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FFFFFF</string>\n\t\t\t\t<key>invisibles</key>\n\t\t\t\t<string>#404F7D</string>\n\t\t\t\t<key>lineHighlight</key>\n\t\t\t\t<string>#00346E</string>\n\t\t\t\t<key>selection</key>\n\t\t\t\t<string>#003F8E</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Comment</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>comment</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#7285B7</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Foreground, Operator</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword.operator.class, keyword.operator, constant.other, source.php.embedded.line</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FFFFFF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Variable, String Link, Regular Expression, Tag Name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>variable, support.other.variable, string.other.link, string.regexp, entity.name.tag, entity.other.attribute-name, meta.tag, declaration.tag</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FF9DA4</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Number, Constant, Function Argument, Tag Attribute, Embedded</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.numeric, constant.language, support.constant, constant.character, variable.parameter, punctuation.section.embedded, keyword.other.unit</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FFC58F</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Class, Support</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.class, entity.name.type.class, support.type, support.class</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FFEEAD</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>String, Symbols, Inherited Class, Markup Heading</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string, constant.other.symbol, entity.other.inherited-class, markup.heading</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#D1F1A9</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Operator, Misc</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword.operator, constant.other.color</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#99FFFF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Function, Special Method, Block Level</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.function, meta.function-call, support.function, keyword.other.special-method, meta.block-level</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#BBDAFF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Keyword, Storage</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword, storage, storage.type, entity.name.tag.css</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#EBBBFF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Invalid</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>invalid</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#F99DA5</string>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FFFFFF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Separator</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.separator</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#BBDAFE</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FFFFFF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Deprecated</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>invalid.deprecated</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#EBBBFF</string>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FFFFFF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t</array>\n\t<key>uuid</key>\n\t<string>3F4BB232-3C3A-4396-99C0-06A9573715E9</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "tool/tmthemes/Tomorrow-Night-Bright.tmTheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>comment</key>\n\t<string>http://chriskempson.com</string>\n\t<key>name</key>\n\t<string>Tomorrow Night - Bright</string>\n\t<key>settings</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#000000</string>\n\t\t\t\t<key>caret</key>\n\t\t\t\t<string>#9F9F9F</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#DEDEDE</string>\n\t\t\t\t<key>invisibles</key>\n\t\t\t\t<string>#343434</string>\n\t\t\t\t<key>lineHighlight</key>\n\t\t\t\t<string>#2A2A2A</string>\n\t\t\t\t<key>selection</key>\n\t\t\t\t<string>#424242</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Comment</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>comment</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#969896</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Foreground</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword.operator.class, constant.other, source.php.embedded.line</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#EEEEEE</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Variable, String Link, Regular Expression, Tag Name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>variable, support.other.variable, string.other.link, string.regexp, entity.name.tag, entity.other.attribute-name, meta.tag, declaration.tag</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#D54E53</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Number, Constant, Function Argument, Tag Attribute, Embedded</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.numeric, constant.language, support.constant, constant.character, variable.parameter, punctuation.section.embedded, keyword.other.unit</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#E78C45</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Class, Support</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.class, entity.name.type.class, support.type, support.class</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#E7C547</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>String, Symbols, Inherited Class, Markup Heading</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string, constant.other.symbol, entity.other.inherited-class, markup.heading</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#B9CA4A</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Operator, Misc</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword.operator, constant.other.color</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#70C0B1</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Function, Special Method, Block Level</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.function, meta.function-call, support.function, keyword.other.special-method, meta.block-level</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#7AA6DA</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Keyword, Storage</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword, storage, storage.type, entity.name.tag.css</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#C397D8</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Invalid</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>invalid</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#DF5F5F</string>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#CED2CF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Separator</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.separator</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#82A3BF</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#CED2CF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Deprecated</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>invalid.deprecated</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#B798BF</string>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#CED2CF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t</array>\n\t<key>uuid</key>\n\t<string>33D8C715-AD3A-455B-8DF2-56F708909FFE</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "tool/tmthemes/Tomorrow-Night-Eighties.tmTheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>comment</key>\n\t<string>http://chriskempson.com</string>\n\t<key>name</key>\n\t<string>Tomorrow Night - Eighties</string>\n\t<key>settings</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#2D2D2D</string>\n\t\t\t\t<key>caret</key>\n\t\t\t\t<string>#CCCCCC</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#CCCCCC</string>\n\t\t\t\t<key>invisibles</key>\n\t\t\t\t<string>#6A6A6A</string>\n\t\t\t\t<key>lineHighlight</key>\n\t\t\t\t<string>#393939</string>\n\t\t\t\t<key>selection</key>\n\t\t\t\t<string>#515151</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Comment</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>comment</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#999999</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Foreground</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword.operator.class, constant.other, source.php.embedded.line</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#CCCCCC</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Variable, String Link, Tag Name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>variable, support.other.variable, string.other.link, entity.name.tag, entity.other.attribute-name, meta.tag, declaration.tag</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#F2777A</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Number, Constant, Function Argument, Tag Attribute, Embedded</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.numeric, constant.language, support.constant, constant.character, variable.parameter, punctuation.section.embedded, keyword.other.unit</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#F99157</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Class, Support</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.class, entity.name.type.class, support.type, support.class</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FFCC66</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>String, Symbols, Inherited Class, Markup Heading</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string, constant.other.symbol, entity.other.inherited-class, markup.heading</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#99CC99</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Operator, Misc</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword.operator, constant.other.color</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#66CCCC</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Function, Special Method, Block Level</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.function, meta.function-call, support.function, keyword.other.special-method, meta.block-level</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#6699CC</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Keyword, Storage</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword, storage, storage.type, entity.name.tag.css</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#CC99CC</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Invalid</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>invalid</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#F2777A</string>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#CDCDCD</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Separator</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.separator</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#99CCCC</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#CDCDCD</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Deprecated</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>invalid.deprecated</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#CC99CC</string>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#CDCDCD</string>\n\t\t\t</dict>\n\t\t</dict>\n\t</array>\n\t<key>uuid</key>\n\t<string>DE477E5B-BD4D-46B0-BF80-2EA32A2814D5</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "tool/tmthemes/Tomorrow-Night.tmTheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>comment</key>\n\t<string>http://chriskempson.com</string>\n\t<key>name</key>\n\t<string>Tomorrow Night</string>\n\t<key>settings</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#1D1F21</string>\n\t\t\t\t<key>caret</key>\n\t\t\t\t<string>#AEAFAD</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#C5C8C6</string>\n\t\t\t\t<key>invisibles</key>\n\t\t\t\t<string>#4B4E55</string>\n\t\t\t\t<key>lineHighlight</key>\n\t\t\t\t<string>#282A2E</string>\n\t\t\t\t<key>selection</key>\n\t\t\t\t<string>#373B41</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Comment</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>comment</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#969896</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Foreground</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword.operator.class, constant.other, source.php.embedded.line</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#CED1CF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Variable, String Link, Regular Expression, Tag Name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>variable, support.other.variable, string.other.link, string.regexp, entity.name.tag, entity.other.attribute-name, meta.tag, declaration.tag</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#CC6666</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Number, Constant, Function Argument, Tag Attribute, Embedded</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.numeric, constant.language, support.constant, constant.character, variable.parameter, punctuation.section.embedded, keyword.other.unit</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#DE935F</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Class, Support</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.class, entity.name.type.class, support.type, support.class</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#F0C674</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>String, Symbols, Inherited Class, Markup Heading</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string, constant.other.symbol, entity.other.inherited-class, markup.heading</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#B5BD68</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Operator, Misc</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword.operator, constant.other.color</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#8ABEB7</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Function, Special Method, Block Level</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.function, meta.function-call, support.function, keyword.other.special-method, meta.block-level</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#81A2BE</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Keyword, Storage</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword, storage, storage.type, entity.name.tag.css</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#B294BB</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Invalid</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>invalid</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#DF5F5F</string>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#CED2CF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Separator</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.separator</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#82A3BF</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#CED2CF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Deprecated</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>invalid.deprecated</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#B798BF</string>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#CED2CF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t</array>\n\t<key>uuid</key>\n\t<string>F96223EB-1A60-4617-92F3-D24D4F13DB09</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "tool/tmthemes/Tomorrow.tmTheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>comment</key>\n\t<string>http://chriskempson.com</string>\n\t<key>name</key>\n\t<string>Tomorrow</string>\n\t<key>settings</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#FFFFFF</string>\n\t\t\t\t<key>caret</key>\n\t\t\t\t<string>#AEAFAD</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#4D4D4C</string>\n\t\t\t\t<key>invisibles</key>\n\t\t\t\t<string>#D1D1D1</string>\n\t\t\t\t<key>lineHighlight</key>\n\t\t\t\t<string>#EFEFEF</string>\n\t\t\t\t<key>selection</key>\n\t\t\t\t<string>#D6D6D6</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Comment</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>comment</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#8E908C</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Foreground</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword.operator.class, constant.other, source.php.embedded.line</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#666969</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Variable, String Link, Regular Expression, Tag Name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>variable, support.other.variable, string.other.link, string.regexp, entity.name.tag, entity.other.attribute-name, meta.tag, declaration.tag</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#C82829</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Number, Constant, Function Argument, Tag Attribute, Embedded</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.numeric, constant.language, support.constant, constant.character, variable.parameter, punctuation.section.embedded, keyword.other.unit</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#F5871F</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Class, Support</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.class, entity.name.type.class, support.type, support.class</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#C99E00</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>String, Symbols, Inherited Class, Markup Heading</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string, constant.other.symbol, entity.other.inherited-class, markup.heading</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#718C00</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Operator, Misc</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword.operator, constant.other.color</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#3E999F</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Function, Special Method, Block Level</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.function, meta.function-call, support.function, keyword.other.special-method, meta.block-level</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#4271AE</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Keyword, Storage</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword, storage, storage.type</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#8959A8</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Invalid</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>invalid</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#C82829</string>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FFFFFF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Separator</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.separator</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#4271AE</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FFFFFF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Deprecated</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>invalid.deprecated</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#8959A8</string>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FFFFFF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t</array>\n\t<key>uuid</key>\n\t<string>82CCD69C-F1B1-4529-B39E-780F91F07604</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "tool/tmthemes/Twilight.tmTheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>author</key>\n\t<string>Michael Sheets</string>\n\t<key>name</key>\n\t<string>Twilight</string>\n\t<key>settings</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#141414</string>\n\t\t\t\t<key>caret</key>\n\t\t\t\t<string>#A7A7A7</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#F8F8F8</string>\n\t\t\t\t<key>invisibles</key>\n\t\t\t\t<string>#FFFFFF40</string>\n\t\t\t\t<key>lineHighlight</key>\n\t\t\t\t<string>#FFFFFF08</string>\n\t\t\t\t<key>selection</key>\n\t\t\t\t<string>#DDF0FF33</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Comment</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>comment</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#5F5A60</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#CF6A4C</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Entity</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#9B703F</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Keyword</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#CDA869</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Storage</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>storage</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#F9EE98</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>String</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#8F9D6A</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Support</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#9B859D</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Variable</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>variable</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#7587A6</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Invalid – Deprecated</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>invalid.deprecated</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic underline</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#D2A8A1</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Invalid – Illegal</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>invalid.illegal</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#562D56BF</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#F8F8F8</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>-----------------------------------</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>♦ Embedded Source</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>text source</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#B0B3BA14</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>♦ Embedded Source (Bright)</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>text.html.ruby source</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#B1B3BA21</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>♦ Entity inherited-class</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.other.inherited-class</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#9B5C2E</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>♦ String embedded-source</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string source</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#DAEFA3</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>♦ String constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string constant</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#DDF2A4</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>♦ String.regexp</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string.regexp</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#E9C062</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>♦ String.regexp.«special»</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string.regexp constant.character.escape, string.regexp source.ruby.embedded, string.regexp string.regexp.arbitrary-repitition</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#CF7D34</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>♦ String variable</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string variable</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#8A9A95</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>♦ Support.function</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.function</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#DAD085</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>♦ Support.constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.constant</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#CF6A4C</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>c C/C++ Preprocessor Line</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.preprocessor.c</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#8996A8</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>c C/C++ Preprocessor Directive</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.preprocessor.c keyword</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#AFC4DB</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>✘ Doctype/XML Processing</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.tag.sgml.doctype, meta.tag.sgml.doctype entity, meta.tag.sgml.doctype string, meta.tag.preprocessor.xml, meta.tag.preprocessor.xml entity, meta.tag.preprocessor.xml string</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#494949</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>✘ Meta.tag.«all»</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>declaration.tag, declaration.tag entity, meta.tag, meta.tag entity</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#AC885B</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>✘ Meta.tag.inline</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>declaration.tag.inline, declaration.tag.inline entity, source entity.name.tag, source entity.other.attribute-name, meta.tag.inline, meta.tag.inline entity</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#E0C589</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>§ css tag-name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.selector.css entity.name.tag</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#CDA869</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Function name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.function, support.function.any-method</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#AC885B</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>§ css:pseudo-class</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.selector.css entity.other.attribute-name.tag.pseudo-class</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#8F9D6A</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>§ css#id</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.selector.css entity.other.attribute-name.id</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#8B98AB</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>§ css.class</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.selector.css entity.other.attribute-name.class</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#9B703F</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>§ css property-name:</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.type.property-name.css</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#C5AF75</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>§ css property-value;</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.property-group support.constant.property-value.css, meta.property-value support.constant.property-value.css</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#F9EE98</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>§ css @at-rule</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.preprocessor.at-rule keyword.control.at-rule</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#8693A5</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>§ css additional-constants</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.property-value support.constant.named-color.css, meta.property-value constant</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#CA7840</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>§ css constructor.argument</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.constructor.argument.css</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#8F9D6A</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>⎇ diff.header</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.diff, meta.diff.header, meta.separator</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#0E2231</string>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#F8F8F8</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>⎇ diff.deleted</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.deleted</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#420E09</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#F8F8F8</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>⎇ diff.changed</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.changed</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#4A410D</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#F8F8F8</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>⎇ diff.inserted</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.inserted</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#253B22</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#F8F8F8</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Markup: List</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.list</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#F9EE98</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Markup: Heading</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.heading</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#CF6A4C</string>\n\t\t\t</dict>\n\t\t</dict>\n\t</array>\n\t<key>uuid</key>\n\t<string>766026CB-703D-4610-B070-8DE07D967C5F</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "tool/tmthemes/Xcode_default.tmTheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>comment</key>\n\t<string>Carmine Paolino</string>\n\t<key>name</key>\n\t<string>Xcode default</string>\n\t<key>settings</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#FFFFFF</string>\n\t\t\t\t<key>caret</key>\n\t\t\t\t<string>#000000</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#000000</string>\n\t\t\t\t<key>invisibles</key>\n\t\t\t\t<string>#BFBFBF</string>\n\t\t\t\t<key>lineHighlight</key>\n\t\t\t\t<string>#00000012</string>\n\t\t\t\t<key>selection</key>\n\t\t\t\t<string>#B5D5FF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Comment</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>comment</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#008E00</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Preprocessor Statements</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.preprocessor, keyword.control.import</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#7D4726</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>String</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#DF0002</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Number</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.numeric</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#3A00DC</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Built-in constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.language</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#C800A4</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>User-defined constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.character, constant.other</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#275A5E</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Variable</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>variable.language, variable.other</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#C800A4</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Keyword</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#C800A4</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Storage</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>storage</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#C900A4</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Class name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.class</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#438288</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Inherited class</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.other.inherited-class</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Function name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.function</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Function argument</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>variable.parameter</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Tag name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.tag</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#790EAD</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Tag attribute</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.other.attribute-name</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#450084</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Library function</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.function</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#450084</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Library constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.constant</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#450084</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Library class/type</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.type, support.class</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#790EAD</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Library variable</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.other.variable</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#790EAD</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Invalid</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>invalid</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t</array>\n\t<key>uuid</key>\n\t<string>EE3AD170-2B7F-4DE1-B724-C75F13FE0085</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "tool/tmthemes/Zenburnesque.tmTheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>author</key>\n\t<string>William D. Neumann</string>\n\t<key>name</key>\n\t<string>Zenburnesque</string>\n\t<key>settings</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#404040</string>\n\t\t\t\t<key>caret</key>\n\t\t\t\t<string>#FFFF66</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#DEDEDE</string>\n\t\t\t\t<key>invisibles</key>\n\t\t\t\t<string>#A8A8A8</string>\n\t\t\t\t<key>lineHighlight</key>\n\t\t\t\t<string>#A0804026</string>\n\t\t\t\t<key>selection</key>\n\t\t\t\t<string>#A0A0C0</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Comment</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>comment</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#709070</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Directive</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword.other.directive</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Line-number directives</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword.other.directive.line-number</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>underline</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Characters</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.character</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FF8080</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>String</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FF2020</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Number</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.numeric</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#22C0FF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Floating-point numbers</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.numeric.floating-point</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>underline</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Built-in constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.language</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>User-defined constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.character, constant.other</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Variable</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>variable.parameter, variable.other</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Language Keyword</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FFFFA0</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Module Keyword</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.module,  support.other.module</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FF8000</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Operators</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword.operator</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FFFFA0</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Floating-point infix operators</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source.ocaml keyword.operator.symbol.infix.floating-point</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>underline</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Floating-point prefix operators</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source.ocaml keyword.operator.symbol.prefix.floating-point</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>underline</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Storage Types</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>storage.type</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#6080FF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Variant Types</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.class.variant</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#4080A0</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Storage</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>storage</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Type name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.type</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#F09040</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Inherited class</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.other.inherited-class</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Function name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.function</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FFCC66</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Type name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>storage.type.user-defined</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FFE000</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Class type name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.type.class.type</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#F4A020</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Function argument</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>variable.parameter</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Tag name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.tag</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Tag attribute</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.other.attribute-name</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Library function</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.function</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Library constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.constant</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Library class/type</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.type, support.class</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Library variable</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.variable</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Invalid</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>invalid</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict/>\n\t\t</dict>\n\t</array>\n\t<key>uuid</key>\n\t<string>8D4988B9-ADD8-436F-B388-BC1360F8504B</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "tool/tmthemes/iPlastic.tmTheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>author</key>\n\t<string>Jeroen van der Ham</string>\n\t<key>name</key>\n\t<string>iPlastic</string>\n\t<key>settings</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#EEEEEEEB</string>\n\t\t\t\t<key>caret</key>\n\t\t\t\t<string>#000000</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#000000</string>\n\t\t\t\t<key>invisibles</key>\n\t\t\t\t<string>#B3B3B3F4</string>\n\t\t\t\t<key>lineHighlight</key>\n\t\t\t\t<string>#0000001A</string>\n\t\t\t\t<key>selection</key>\n\t\t\t\t<string>#BAD6FD</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>String</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#009933</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Number</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.numeric</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#0066FF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Regular expression</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string.regexp</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FF0080</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Keyword</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#0000FF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Identifier</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.language</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#9700CC</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Exception</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.class.exception</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#990000</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Function name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.function</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FF8000</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Type name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.type</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold underline</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Arguments</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>variable.parameter</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Comment</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>comment</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#0066FF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Invalid</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>invalid</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#E71A114D</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FF0000</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Trailing whitespace</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>invalid.deprecated.trailing-whitespace</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#E71A1100</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Embedded source</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>text source</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#FAFAFAFC</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#000000</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Tag</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.tag, declaration.tag</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#0033CC</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant, support.constant</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#6782D3</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Support</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#3333FF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Storage</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>storage</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Section name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.section</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold underline</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Frame title</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.function.frame</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#000000</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>XML Declaration</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.tag.preprocessor.xml</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#333333</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Tag Attribute</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.other.attribute-name</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#3366CC</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Tag Name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.tag</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t</dict>\n\t\t</dict>\n\t</array>\n\t<key>uuid</key>\n\t<string>4FCFA210-B247-11D9-9D00-000D93347A42</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "tool/tmthemes/idleFingers.tmTheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>name</key>\n\t<string>idleFingers</string>\n\t<key>settings</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#323232</string>\n\t\t\t\t<key>caret</key>\n\t\t\t\t<string>#91FF00</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FFFFFF</string>\n\t\t\t\t<key>invisibles</key>\n\t\t\t\t<string>#404040</string>\n\t\t\t\t<key>lineHighlight</key>\n\t\t\t\t<string>#353637</string>\n\t\t\t\t<key>selection</key>\n\t\t\t\t<string>#5A647EE0</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>text</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>text</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FFFFFF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Source base</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#282828</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#CDCDCD</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Comment</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>comment</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#BC9458</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Html Tags</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.tag, declaration.tag, meta.doctype</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FFE5BB</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Function Name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FFC66D</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Ruby Function Name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source.ruby entity.name</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FFF980</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Other Variable</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>variable.other</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#B7DFF8</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Ruby Class Name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.class.ruby</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#CCCC33</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant, support.constant</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#6C99BB</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Keyword</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#CC7833</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Pre-processor Line</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>other.preprocessor.c</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#D0D0FF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Pre-processor Directive</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.preprocessor</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Function name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.function</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Function argument</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>variable.parameter</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Block comment</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>source comment.block</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#575757</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FFFFFF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>String</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#A5C261</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>String escapes</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string constant.character.escape</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#AAAAAA</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>String (executed)</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string.interpolated</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#CCCC33</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#000000</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Regular expression</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string.regexp</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#CCCC33</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>String (literal)</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string.literal</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#CCCC33</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>String escapes (executed)</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string.interpolated constant.character.escape</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#787878</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Class name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.class</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>underline</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Class inheritance</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.other.inherited-class</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic underline</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Tag name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.tag</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Tag attribute</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.other.attribute-name</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Support function</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.function</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#B83426</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Textile List</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.list.unnumbered.textile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#6EA533</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Textile Numbered list</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.list.numbered.textile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#6EA533</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Textile Bold</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.bold.textile</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#C2C2C2</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Invalid</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>invalid</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#FF0000</string>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FFFFFF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>User1</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>collab.user1</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#FFF980</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#323232</string>\n\t\t\t</dict>\n\t\t</dict>\n\t</array>\n\t<key>uuid</key>\n\t<string>95BEF169-A2E5-4041-A84A-AAFC1DD61558</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "tool/tmthemes/krTheme.tmTheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>comment</key>\n\t<string>Created by Kenneth Reitz, inspired by minimal design</string>\n\t<key>name</key>\n\t<string>krTheme</string>\n\t<key>settings</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#0B0A09</string>\n\t\t\t\t<key>caret</key>\n\t\t\t\t<string>#FF9900</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FCFFE0</string>\n\t\t\t\t<key>invisibles</key>\n\t\t\t\t<string>#FFB16F52</string>\n\t\t\t\t<key>lineHighlight</key>\n\t\t\t\t<string>#38403D</string>\n\t\t\t\t<key>selection</key>\n\t\t\t\t<string>#AA00FF73</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#D27518C2</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Entity</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#A89100B5</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Entity Other</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.other</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#BA6912</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Keyword</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#949C8B</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Storage</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>storage</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FFEE80</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>String</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string -string.unquoted.old-plist -string.unquoted.heredoc, string.unquoted.heredoc string</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#C7A4A1B5</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Comment</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>comment</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#706D5B</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Support</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#9FC28A</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Variable</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>variable</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#D1A796</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Lang Variable</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>variable.language</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FF80E1</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Function Call</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.function-call</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FFEE80</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Invalid</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>invalid</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#A41300</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#F8F8F8</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Embedded Source</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>text source, string.unquoted.heredoc, source source</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#24231D4D</string>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#D9D59F</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Entity inherited-class</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.other.inherited-class</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#7EFCFF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>String embedded-source</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string.quoted source</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#439740BA</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>String constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string constant</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#60DB5DBA</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>String.regexp</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string.regexp</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#7DFFC0A6</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>String variable</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string variable</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#B8B960</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Support.function</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.function</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#85873A</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Support.constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.constant</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#C27E66</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Exception</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.class.exception</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FF1E00</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>C/C++ Preprocessor Line</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.preprocessor.c</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#8996A8</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>C/C++ Preprocessor Directive</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.preprocessor.c keyword</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#AFC4DB</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Doctype/XML Processing</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.sgml.html meta.doctype, meta.sgml.html meta.doctype entity, meta.sgml.html meta.doctype string, meta.xml-processing, meta.xml-processing entity, meta.xml-processing string</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#73817D</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Meta.tag.A</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.tag, meta.tag entity</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#BABD9C</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>css tag-name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.selector.css entity.name.tag</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#99A190</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>css#id</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.selector.css entity.other.attribute-name.id</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#CC8844</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>css.class</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.selector.css entity.other.attribute-name.class</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#CFB958</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>css property-name:</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.type.property-name.css</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#E0DDAD</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>css property-value;</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.property-group support.constant.property-value.css, meta.property-value support.constant.property-value.css</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#AEB14B</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>css @at-rule</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.preprocessor.at-rule keyword.control.at-rule</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FFB010</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>css additional-constants</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.property-value support.constant.named-color.css, meta.property-value constant</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#999179</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>css constructor.argument</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.constructor.argument.css</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#EB939A</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>diff.header</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.diff, meta.diff.header</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#000E1A</string>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#F8F8F8</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>diff.deleted</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.deleted</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#800F00</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#F8F8F8</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>diff.changed</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.changed</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#806F00</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#F8F8F8</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>diff.inserted</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.inserted</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#228000</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#F8F8F8</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Raw Markup</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.raw</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#8FDDF630</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Block Quote</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.quote</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#005BAA</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>List</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.list</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#0F0040</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Bold Markup</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.bold</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#9D80FF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Italic Markup</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.italic</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>italic</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#80FFBB</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Heading Markup</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>markup.heading</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string>bold</string>\n\t\t\t</dict>\n\t\t</dict>\n\t</array>\n\t<key>uuid</key>\n\t<string>87F051F7-B6FB-408C-96F9-467B66C14E9F</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "tool/tmthemes/monoindustrial.tmTheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>name</key>\n\t<string>monoindustrial</string>\n\t<key>settings</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#222C28</string>\n\t\t\t\t<key>caret</key>\n\t\t\t\t<string>#FFFFFF</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FFFFFF</string>\n\t\t\t\t<key>invisibles</key>\n\t\t\t\t<string>#666C6880</string>\n\t\t\t\t<key>lineHighlight</key>\n\t\t\t\t<string>#0C0D0C40</string>\n\t\t\t\t<key>selection</key>\n\t\t\t\t<string>#91999466</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Comment</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>comment</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#151C19</string>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#666C68</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Type</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>storage, support.type</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#C23B00</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Embedded code</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string.unquoted.embedded, text source, string.unquoted</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#151C19</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FFFFFF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>String interpolation</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.character.escaped, string source - string.unquoted.embedded, string string source</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#1A0700</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#E9470000</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>String</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>string - string source, string source string, meta.scope.heredoc</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#1A0700</string>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#C23800</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Number</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant.numeric</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#E98800</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Variable</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>variable.language, variable.other</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#648BD2</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>constant</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#E98800</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Preprocessor line</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>other.preprocessor</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#161D1A</string>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#A8B3AB</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Preprocessor directive</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.preprocessor</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#161D1A</string>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#A8B3AB</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Function name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.function, keyword.operator, keyword.other.name-of-parameter</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#A8B3AB</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Class name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.class</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#9A2F00</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Function parameter</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>variable.parameter</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#648BD2</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Function argument and result types</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>storage.type.method</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#666C68</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Keyword</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>keyword, storage.type.function.php</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#A39E64</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Invalid</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>invalid</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#990000AD</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FFFFFF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Invalid trailing whitespace</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>invalid.trailing-whitespace</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#FFD0D0</string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#000000</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Library function</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.function</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#588E60</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Library object</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.class, support.type, entity.name</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#5778B6</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Library constant</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.constant</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#C87500</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Library variable</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>support.other.variable</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#5879B7</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Markup XML declaration</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>declaration.xml-processing</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#68685B</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Markup DOCTYPE</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>declaration.doctype</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#888888</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Markup DTD</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>declaration.doctype.DTD</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#888888</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Markup tag</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>declaration.tag</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#A65EFF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Markup name of tag</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.name.tag</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#A65EFF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Markup tag attribute</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.other.attribute-name</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#909993</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Punctuation</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>punctuation</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#90999380</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Inherited class name</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>entity.other.inherited-class</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#7642B7</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Changed files (Subversion)</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.scope.changed-files.svn, markup.inserted.svn, markup.changed.svn, markup.deleted.svn</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#00000059</string>\n\t\t\t\t<key>fontStyle</key>\n\t\t\t\t<string></string>\n\t\t\t\t<key>foreground</key>\n\t\t\t\t<string>#FFFFFF</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Blocks, Expressions 1</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.section</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#78807B0A</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Blocks, Expressions 2</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.section meta.section</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#78807B0A</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>name</key>\n\t\t\t<string>Blocks, Expressions 3</string>\n\t\t\t<key>scope</key>\n\t\t\t<string>meta.section meta.section meta.section</string>\n\t\t\t<key>settings</key>\n\t\t\t<dict>\n\t\t\t\t<key>background</key>\n\t\t\t\t<string>#78807B0A</string>\n\t\t\t</dict>\n\t\t</dict>\n\t</array>\n\t<key>uuid</key>\n\t<string>EEA328BA-54E5-49DC-81F3-1F25BF8AF163</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "tool/unicode.js",
    "content": "\"use strict\";\n\n/*\nXRegExp Unicode plugin pack: Categories 1.0\n(c) 2010 Steven Levithan\nMIT License\n<http://xregexp.com>\nUses the Unicode 5.2 character database\n\nThis package for the XRegExp Unicode plugin enables the following Unicode categories (aka properties):\n\nL - Letter (the top-level Letter category is included in the Unicode plugin base script)\n    Ll - Lowercase letter\n    Lu - Uppercase letter\n    Lt - Titlecase letter\n    Lm - Modifier letter\n    Lo - Letter without case\nM - Mark\n    Mn - Non-spacing mark\n    Mc - Spacing combining mark\n    Me - Enclosing mark\nN - Number\n    Nd - Decimal digit\n    Nl - Letter number\n    No -  Other number\nP - Punctuation\n    Pd - Dash punctuation\n    Ps - Open punctuation\n    Pe - Close punctuation\n    Pi - Initial punctuation\n    Pf - Final punctuation\n    Pc - Connector punctuation\n    Po - Other punctuation\nS - Symbol\n    Sm - Math symbol\n    Sc - Currency symbol\n    Sk - Modifier symbol\n    So - Other symbol\nZ - Separator\n    Zs - Space separator\n    Zl - Line separator\n    Zp - Paragraph separator\nC - Other\n    Cc - Control\n    Cf - Format\n    Co - Private use\n    Cs - Surrogate\n    Cn - Unassigned\n\nExample usage:\n\n    \\p{N}\n    \\p{Cn}\n*/\n\n\n// will be populated by addUnicodePackage\nvar packages = {\n    L:  \"0041-005A0061-007A00AA00B500BA00C0-00D600D8-00F600F8-02C102C6-02D102E0-02E402EC02EE0370-037403760377037A-037D03860388-038A038C038E-03A103A3-03F503F7-0481048A-05250531-055605590561-058705D0-05EA05F0-05F20621-064A066E066F0671-06D306D506E506E606EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA07F407F507FA0800-0815081A082408280904-0939093D09500958-0961097109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E460E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EC60EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10A0-10C510D0-10FA10FC1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317D717DC1820-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541AA71B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C7D1CE9-1CEC1CEE-1CF11D00-1DBF1E00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FBC1FBE1FC2-1FC41FC6-1FCC1FD0-1FD31FD6-1FDB1FE0-1FEC1FF2-1FF41FF6-1FFC2071207F2090-209421022107210A-211321152119-211D212421262128212A-212D212F-2139213C-213F2145-2149214E218321842C00-2C2E2C30-2C5E2C60-2CE42CEB-2CEE2D00-2D252D30-2D652D6F2D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2E2F300530063031-3035303B303C3041-3096309D-309F30A1-30FA30FC-30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A48CA4D0-A4FDA500-A60CA610-A61FA62AA62BA640-A65FA662-A66EA67F-A697A6A0-A6E5A717-A71FA722-A788A78BA78CA7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2A9CFAA00-AA28AA40-AA42AA44-AA4BAA60-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADB-AADDABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF21-FF3AFF41-FF5AFF66-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC\",\n    Ll: \"0061-007A00AA00B500BA00DF-00F600F8-00FF01010103010501070109010B010D010F01110113011501170119011B011D011F01210123012501270129012B012D012F01310133013501370138013A013C013E014001420144014601480149014B014D014F01510153015501570159015B015D015F01610163016501670169016B016D016F0171017301750177017A017C017E-0180018301850188018C018D019201950199-019B019E01A101A301A501A801AA01AB01AD01B001B401B601B901BA01BD-01BF01C601C901CC01CE01D001D201D401D601D801DA01DC01DD01DF01E101E301E501E701E901EB01ED01EF01F001F301F501F901FB01FD01FF02010203020502070209020B020D020F02110213021502170219021B021D021F02210223022502270229022B022D022F02310233-0239023C023F0240024202470249024B024D024F-02930295-02AF037103730377037B-037D039003AC-03CE03D003D103D5-03D703D903DB03DD03DF03E103E303E503E703E903EB03ED03EF-03F303F503F803FB03FC0430-045F04610463046504670469046B046D046F04710473047504770479047B047D047F0481048B048D048F04910493049504970499049B049D049F04A104A304A504A704A904AB04AD04AF04B104B304B504B704B904BB04BD04BF04C204C404C604C804CA04CC04CE04CF04D104D304D504D704D904DB04DD04DF04E104E304E504E704E904EB04ED04EF04F104F304F504F704F904FB04FD04FF05010503050505070509050B050D050F05110513051505170519051B051D051F0521052305250561-05871D00-1D2B1D62-1D771D79-1D9A1E011E031E051E071E091E0B1E0D1E0F1E111E131E151E171E191E1B1E1D1E1F1E211E231E251E271E291E2B1E2D1E2F1E311E331E351E371E391E3B1E3D1E3F1E411E431E451E471E491E4B1E4D1E4F1E511E531E551E571E591E5B1E5D1E5F1E611E631E651E671E691E6B1E6D1E6F1E711E731E751E771E791E7B1E7D1E7F1E811E831E851E871E891E8B1E8D1E8F1E911E931E95-1E9D1E9F1EA11EA31EA51EA71EA91EAB1EAD1EAF1EB11EB31EB51EB71EB91EBB1EBD1EBF1EC11EC31EC51EC71EC91ECB1ECD1ECF1ED11ED31ED51ED71ED91EDB1EDD1EDF1EE11EE31EE51EE71EE91EEB1EED1EEF1EF11EF31EF51EF71EF91EFB1EFD1EFF-1F071F10-1F151F20-1F271F30-1F371F40-1F451F50-1F571F60-1F671F70-1F7D1F80-1F871F90-1F971FA0-1FA71FB0-1FB41FB61FB71FBE1FC2-1FC41FC61FC71FD0-1FD31FD61FD71FE0-1FE71FF2-1FF41FF61FF7210A210E210F2113212F21342139213C213D2146-2149214E21842C30-2C5E2C612C652C662C682C6A2C6C2C712C732C742C76-2C7C2C812C832C852C872C892C8B2C8D2C8F2C912C932C952C972C992C9B2C9D2C9F2CA12CA32CA52CA72CA92CAB2CAD2CAF2CB12CB32CB52CB72CB92CBB2CBD2CBF2CC12CC32CC52CC72CC92CCB2CCD2CCF2CD12CD32CD52CD72CD92CDB2CDD2CDF2CE12CE32CE42CEC2CEE2D00-2D25A641A643A645A647A649A64BA64DA64FA651A653A655A657A659A65BA65DA65FA663A665A667A669A66BA66DA681A683A685A687A689A68BA68DA68FA691A693A695A697A723A725A727A729A72BA72DA72F-A731A733A735A737A739A73BA73DA73FA741A743A745A747A749A74BA74DA74FA751A753A755A757A759A75BA75DA75FA761A763A765A767A769A76BA76DA76FA771-A778A77AA77CA77FA781A783A785A787A78CFB00-FB06FB13-FB17FF41-FF5A\",\n    Lu: \"0041-005A00C0-00D600D8-00DE01000102010401060108010A010C010E01100112011401160118011A011C011E01200122012401260128012A012C012E01300132013401360139013B013D013F0141014301450147014A014C014E01500152015401560158015A015C015E01600162016401660168016A016C016E017001720174017601780179017B017D018101820184018601870189-018B018E-0191019301940196-0198019C019D019F01A001A201A401A601A701A901AC01AE01AF01B1-01B301B501B701B801BC01C401C701CA01CD01CF01D101D301D501D701D901DB01DE01E001E201E401E601E801EA01EC01EE01F101F401F6-01F801FA01FC01FE02000202020402060208020A020C020E02100212021402160218021A021C021E02200222022402260228022A022C022E02300232023A023B023D023E02410243-02460248024A024C024E03700372037603860388-038A038C038E038F0391-03A103A3-03AB03CF03D2-03D403D803DA03DC03DE03E003E203E403E603E803EA03EC03EE03F403F703F903FA03FD-042F04600462046404660468046A046C046E04700472047404760478047A047C047E0480048A048C048E04900492049404960498049A049C049E04A004A204A404A604A804AA04AC04AE04B004B204B404B604B804BA04BC04BE04C004C104C304C504C704C904CB04CD04D004D204D404D604D804DA04DC04DE04E004E204E404E604E804EA04EC04EE04F004F204F404F604F804FA04FC04FE05000502050405060508050A050C050E05100512051405160518051A051C051E0520052205240531-055610A0-10C51E001E021E041E061E081E0A1E0C1E0E1E101E121E141E161E181E1A1E1C1E1E1E201E221E241E261E281E2A1E2C1E2E1E301E321E341E361E381E3A1E3C1E3E1E401E421E441E461E481E4A1E4C1E4E1E501E521E541E561E581E5A1E5C1E5E1E601E621E641E661E681E6A1E6C1E6E1E701E721E741E761E781E7A1E7C1E7E1E801E821E841E861E881E8A1E8C1E8E1E901E921E941E9E1EA01EA21EA41EA61EA81EAA1EAC1EAE1EB01EB21EB41EB61EB81EBA1EBC1EBE1EC01EC21EC41EC61EC81ECA1ECC1ECE1ED01ED21ED41ED61ED81EDA1EDC1EDE1EE01EE21EE41EE61EE81EEA1EEC1EEE1EF01EF21EF41EF61EF81EFA1EFC1EFE1F08-1F0F1F18-1F1D1F28-1F2F1F38-1F3F1F48-1F4D1F591F5B1F5D1F5F1F68-1F6F1FB8-1FBB1FC8-1FCB1FD8-1FDB1FE8-1FEC1FF8-1FFB21022107210B-210D2110-211221152119-211D212421262128212A-212D2130-2133213E213F214521832C00-2C2E2C602C62-2C642C672C692C6B2C6D-2C702C722C752C7E-2C802C822C842C862C882C8A2C8C2C8E2C902C922C942C962C982C9A2C9C2C9E2CA02CA22CA42CA62CA82CAA2CAC2CAE2CB02CB22CB42CB62CB82CBA2CBC2CBE2CC02CC22CC42CC62CC82CCA2CCC2CCE2CD02CD22CD42CD62CD82CDA2CDC2CDE2CE02CE22CEB2CEDA640A642A644A646A648A64AA64CA64EA650A652A654A656A658A65AA65CA65EA662A664A666A668A66AA66CA680A682A684A686A688A68AA68CA68EA690A692A694A696A722A724A726A728A72AA72CA72EA732A734A736A738A73AA73CA73EA740A742A744A746A748A74AA74CA74EA750A752A754A756A758A75AA75CA75EA760A762A764A766A768A76AA76CA76EA779A77BA77DA77EA780A782A784A786A78BFF21-FF3A\",\n    Lt: \"01C501C801CB01F21F88-1F8F1F98-1F9F1FA8-1FAF1FBC1FCC1FFC\",\n    Lm: \"02B0-02C102C6-02D102E0-02E402EC02EE0374037A0559064006E506E607F407F507FA081A0824082809710E460EC610FC17D718431AA71C78-1C7D1D2C-1D611D781D9B-1DBF2071207F2090-20942C7D2D6F2E2F30053031-3035303B309D309E30FC-30FEA015A4F8-A4FDA60CA67FA717-A71FA770A788A9CFAA70AADDFF70FF9EFF9F\",\n    Lo: \"01BB01C0-01C3029405D0-05EA05F0-05F20621-063F0641-064A066E066F0671-06D306D506EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA0800-08150904-0939093D09500958-096109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E450E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10D0-10FA1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317DC1820-18421844-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C771CE9-1CEC1CEE-1CF12135-21382D30-2D652D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE3006303C3041-3096309F30A1-30FA30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A014A016-A48CA4D0-A4F7A500-A60BA610-A61FA62AA62BA66EA6A0-A6E5A7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2AA00-AA28AA40-AA42AA44-AA4BAA60-AA6FAA71-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADBAADCABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF66-FF6FFF71-FF9DFFA0-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC\",\n    M:  \"0300-036F0483-04890591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DE-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0903093C093E-094E0951-0955096209630981-098309BC09BE-09C409C709C809CB-09CD09D709E209E30A01-0A030A3C0A3E-0A420A470A480A4B-0A4D0A510A700A710A750A81-0A830ABC0ABE-0AC50AC7-0AC90ACB-0ACD0AE20AE30B01-0B030B3C0B3E-0B440B470B480B4B-0B4D0B560B570B620B630B820BBE-0BC20BC6-0BC80BCA-0BCD0BD70C01-0C030C3E-0C440C46-0C480C4A-0C4D0C550C560C620C630C820C830CBC0CBE-0CC40CC6-0CC80CCA-0CCD0CD50CD60CE20CE30D020D030D3E-0D440D46-0D480D4A-0D4D0D570D620D630D820D830DCA0DCF-0DD40DD60DD8-0DDF0DF20DF30E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F3E0F3F0F71-0F840F860F870F90-0F970F99-0FBC0FC6102B-103E1056-1059105E-10601062-10641067-106D1071-10741082-108D108F109A-109D135F1712-17141732-1734175217531772177317B6-17D317DD180B-180D18A91920-192B1930-193B19B0-19C019C819C91A17-1A1B1A55-1A5E1A60-1A7C1A7F1B00-1B041B34-1B441B6B-1B731B80-1B821BA1-1BAA1C24-1C371CD0-1CD21CD4-1CE81CED1CF21DC0-1DE61DFD-1DFF20D0-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66F-A672A67CA67DA6F0A6F1A802A806A80BA823-A827A880A881A8B4-A8C4A8E0-A8F1A926-A92DA947-A953A980-A983A9B3-A9C0AA29-AA36AA43AA4CAA4DAA7BAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE3-ABEAABECABEDFB1EFE00-FE0FFE20-FE26\",\n    Mn: \"0300-036F0483-04870591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DF-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0902093C0941-0948094D0951-095509620963098109BC09C1-09C409CD09E209E30A010A020A3C0A410A420A470A480A4B-0A4D0A510A700A710A750A810A820ABC0AC1-0AC50AC70AC80ACD0AE20AE30B010B3C0B3F0B41-0B440B4D0B560B620B630B820BC00BCD0C3E-0C400C46-0C480C4A-0C4D0C550C560C620C630CBC0CBF0CC60CCC0CCD0CE20CE30D41-0D440D4D0D620D630DCA0DD2-0DD40DD60E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F71-0F7E0F80-0F840F860F870F90-0F970F99-0FBC0FC6102D-10301032-10371039103A103D103E10581059105E-10601071-1074108210851086108D109D135F1712-17141732-1734175217531772177317B7-17BD17C617C9-17D317DD180B-180D18A91920-19221927192819321939-193B1A171A181A561A58-1A5E1A601A621A65-1A6C1A73-1A7C1A7F1B00-1B031B341B36-1B3A1B3C1B421B6B-1B731B801B811BA2-1BA51BA81BA91C2C-1C331C361C371CD0-1CD21CD4-1CE01CE2-1CE81CED1DC0-1DE61DFD-1DFF20D0-20DC20E120E5-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66FA67CA67DA6F0A6F1A802A806A80BA825A826A8C4A8E0-A8F1A926-A92DA947-A951A980-A982A9B3A9B6-A9B9A9BCAA29-AA2EAA31AA32AA35AA36AA43AA4CAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE5ABE8ABEDFB1EFE00-FE0FFE20-FE26\",\n    Mc: \"0903093E-09400949-094C094E0982098309BE-09C009C709C809CB09CC09D70A030A3E-0A400A830ABE-0AC00AC90ACB0ACC0B020B030B3E0B400B470B480B4B0B4C0B570BBE0BBF0BC10BC20BC6-0BC80BCA-0BCC0BD70C01-0C030C41-0C440C820C830CBE0CC0-0CC40CC70CC80CCA0CCB0CD50CD60D020D030D3E-0D400D46-0D480D4A-0D4C0D570D820D830DCF-0DD10DD8-0DDF0DF20DF30F3E0F3F0F7F102B102C10311038103B103C105610571062-10641067-106D108310841087-108C108F109A-109C17B617BE-17C517C717C81923-19261929-192B193019311933-193819B0-19C019C819C91A19-1A1B1A551A571A611A631A641A6D-1A721B041B351B3B1B3D-1B411B431B441B821BA11BA61BA71BAA1C24-1C2B1C341C351CE11CF2A823A824A827A880A881A8B4-A8C3A952A953A983A9B4A9B5A9BAA9BBA9BD-A9C0AA2FAA30AA33AA34AA4DAA7BABE3ABE4ABE6ABE7ABE9ABEAABEC\",\n    Me: \"0488048906DE20DD-20E020E2-20E4A670-A672\",\n    N:  \"0030-003900B200B300B900BC-00BE0660-066906F0-06F907C0-07C90966-096F09E6-09EF09F4-09F90A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BF20C66-0C6F0C78-0C7E0CE6-0CEF0D66-0D750E50-0E590ED0-0ED90F20-0F331040-10491090-10991369-137C16EE-16F017E0-17E917F0-17F91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C5920702074-20792080-20892150-21822185-21892460-249B24EA-24FF2776-27932CFD30073021-30293038-303A3192-31953220-32293251-325F3280-328932B1-32BFA620-A629A6E6-A6EFA830-A835A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19\",\n    Nd: \"0030-00390660-066906F0-06F907C0-07C90966-096F09E6-09EF0A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BEF0C66-0C6F0CE6-0CEF0D66-0D6F0E50-0E590ED0-0ED90F20-0F291040-10491090-109917E0-17E91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C59A620-A629A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19\",\n    Nl: \"16EE-16F02160-21822185-218830073021-30293038-303AA6E6-A6EF\",\n    No: \"00B200B300B900BC-00BE09F4-09F90BF0-0BF20C78-0C7E0D70-0D750F2A-0F331369-137C17F0-17F920702074-20792080-20892150-215F21892460-249B24EA-24FF2776-27932CFD3192-31953220-32293251-325F3280-328932B1-32BFA830-A835\",\n    P:  \"0021-00230025-002A002C-002F003A003B003F0040005B-005D005F007B007D00A100AB00B700BB00BF037E0387055A-055F0589058A05BE05C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F3A-0F3D0F850FD0-0FD4104A-104F10FB1361-13681400166D166E169B169C16EB-16ED1735173617D4-17D617D8-17DA1800-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD32010-20272030-20432045-20512053-205E207D207E208D208E2329232A2768-277527C527C627E6-27EF2983-299829D8-29DB29FC29FD2CF9-2CFC2CFE2CFF2E00-2E2E2E302E313001-30033008-30113014-301F3030303D30A030FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFD3EFD3FFE10-FE19FE30-FE52FE54-FE61FE63FE68FE6AFE6BFF01-FF03FF05-FF0AFF0C-FF0FFF1AFF1BFF1FFF20FF3B-FF3DFF3FFF5BFF5DFF5F-FF65\",\n    Pd: \"002D058A05BE140018062010-20152E172E1A301C303030A0FE31FE32FE58FE63FF0D\",\n    Ps: \"0028005B007B0F3A0F3C169B201A201E2045207D208D23292768276A276C276E27702772277427C527E627E827EA27EC27EE2983298529872989298B298D298F299129932995299729D829DA29FC2E222E242E262E283008300A300C300E3010301430163018301A301DFD3EFE17FE35FE37FE39FE3BFE3DFE3FFE41FE43FE47FE59FE5BFE5DFF08FF3BFF5BFF5FFF62\",\n    Pe: \"0029005D007D0F3B0F3D169C2046207E208E232A2769276B276D276F27712773277527C627E727E927EB27ED27EF298429862988298A298C298E2990299229942996299829D929DB29FD2E232E252E272E293009300B300D300F3011301530173019301B301E301FFD3FFE18FE36FE38FE3AFE3CFE3EFE40FE42FE44FE48FE5AFE5CFE5EFF09FF3DFF5DFF60FF63\",\n    Pi: \"00AB2018201B201C201F20392E022E042E092E0C2E1C2E20\",\n    Pf: \"00BB2019201D203A2E032E052E0A2E0D2E1D2E21\",\n    Pc: \"005F203F20402054FE33FE34FE4D-FE4FFF3F\",\n    Po: \"0021-00230025-0027002A002C002E002F003A003B003F0040005C00A100B700BF037E0387055A-055F058905C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F850FD0-0FD4104A-104F10FB1361-1368166D166E16EB-16ED1735173617D4-17D617D8-17DA1800-18051807-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD3201620172020-20272030-2038203B-203E2041-20432047-205120532055-205E2CF9-2CFC2CFE2CFF2E002E012E06-2E082E0B2E0E-2E162E182E192E1B2E1E2E1F2E2A-2E2E2E302E313001-3003303D30FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFE10-FE16FE19FE30FE45FE46FE49-FE4CFE50-FE52FE54-FE57FE5F-FE61FE68FE6AFE6BFF01-FF03FF05-FF07FF0AFF0CFF0EFF0FFF1AFF1BFF1FFF20FF3CFF61FF64FF65\",\n    S:  \"0024002B003C-003E005E0060007C007E00A2-00A900AC00AE-00B100B400B600B800D700F702C2-02C502D2-02DF02E5-02EB02ED02EF-02FF03750384038503F604820606-0608060B060E060F06E906FD06FE07F609F209F309FA09FB0AF10B700BF3-0BFA0C7F0CF10CF20D790E3F0F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-139917DB194019E0-19FF1B61-1B6A1B74-1B7C1FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE20442052207A-207C208A-208C20A0-20B8210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B2140-2144214A-214D214F2190-2328232B-23E82400-24262440-244A249C-24E92500-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE27C0-27C427C7-27CA27CC27D0-27E527F0-29822999-29D729DC-29FB29FE-2B4C2B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F309B309C319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A700-A716A720A721A789A78AA828-A82BA836-A839AA77-AA79FB29FDFCFDFDFE62FE64-FE66FE69FF04FF0BFF1C-FF1EFF3EFF40FF5CFF5EFFE0-FFE6FFE8-FFEEFFFCFFFD\",\n    Sm: \"002B003C-003E007C007E00AC00B100D700F703F60606-060820442052207A-207C208A-208C2140-2144214B2190-2194219A219B21A021A321A621AE21CE21CF21D221D421F4-22FF2308-230B23202321237C239B-23B323DC-23E125B725C125F8-25FF266F27C0-27C427C7-27CA27CC27D0-27E527F0-27FF2900-29822999-29D729DC-29FB29FE-2AFF2B30-2B442B47-2B4CFB29FE62FE64-FE66FF0BFF1C-FF1EFF5CFF5EFFE2FFE9-FFEC\",\n    Sc: \"002400A2-00A5060B09F209F309FB0AF10BF90E3F17DB20A0-20B8A838FDFCFE69FF04FFE0FFE1FFE5FFE6\",\n    Sk: \"005E006000A800AF00B400B802C2-02C502D2-02DF02E5-02EB02ED02EF-02FF0375038403851FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE309B309CA700-A716A720A721A789A78AFF3EFF40FFE3\",\n    So: \"00A600A700A900AE00B000B60482060E060F06E906FD06FE07F609FA0B700BF3-0BF80BFA0C7F0CF10CF20D790F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-1399194019E0-19FF1B61-1B6A1B74-1B7C210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B214A214C214D214F2195-2199219C-219F21A121A221A421A521A7-21AD21AF-21CD21D021D121D321D5-21F32300-2307230C-231F2322-2328232B-237B237D-239A23B4-23DB23E2-23E82400-24262440-244A249C-24E92500-25B625B8-25C025C2-25F72600-266E2670-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE2800-28FF2B00-2B2F2B452B462B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A828-A82BA836A837A839AA77-AA79FDFDFFE4FFE8FFEDFFEEFFFCFFFD\",\n    Z:  \"002000A01680180E2000-200A20282029202F205F3000\",\n    Zs: \"002000A01680180E2000-200A202F205F3000\",\n    Zl: \"2028\",\n    Zp: \"2029\",\n    C:  \"0000-001F007F-009F00AD03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-0605061C061D0620065F06DD070E070F074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17B417B517DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF200B-200F202A-202E2060-206F20722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-F8FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFD-FF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFFBFFFEFFFF\",\n    Cc: \"0000-001F007F-009F\",\n    Cf: \"00AD0600-060306DD070F17B417B5200B-200F202A-202E2060-2064206A-206FFEFFFFF9-FFFB\",\n    Co: \"E000-F8FF\",\n    Cs: \"D800-DFFF\",\n    Cn: \"03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-05FF06040605061C061D0620065F070E074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF2065-206920722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-D7FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFDFEFEFF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFF8FFFEFFFF\"\n};\n\nfunction mergeRanges(charString) {\n    function toChar(code) {\n        var str = code.toString(16);\n        return \"0\".repeat(4 - str.length) + str;\n    }\n    var ranges = [];\n    charString.replace(/(\\w{4})(?:-(\\w{4}))?/g, function(_, a, b) {\n        ranges.push([parseInt(a, 16), parseInt(b || a, 16)]);\n    });\n    ranges = ranges.sort(function(a, b) { return a[0] - b[0] });\n    for (var i = 1; i < ranges.length; i++) {\n        if (ranges[i - 1][1] + 1 >= ranges[i][0]) {\n            ranges[i] = [ranges[i - 1][0], Math.max(ranges[i - 1][1], ranges[i][1])];\n            ranges[i - 1] = null;\n        }\n    }\n    return ranges.map(function(r) {\n        if (!r) \n            return \"\";\n        if (r[0] == r[1])\n            return toChar(r[1]);\n        return toChar(r[0]) + \"-\" + toChar(r[1]);\n    }).join(\"\");\n}\n\nfunction test() {\n    function toRegex(chars) { \n        return new RegExp(\"^[\" + chars.replace(/\\w{4}/g, \"\\\\u$&\") + \"]\");\n    }\n\n    var re1 = toRegex(wordChars)\n    var re2 = toRegex(wordCharsMerged)\n    var re3 = RegExp(\"^[\" + unicode.wordChars + \"]\");\n\n\n    for (var i = 0; i < 0xffff; i++) {\n        var ch = String.fromCharCode(i);\n        if (re1.test(ch) != re2.test(ch)) {\n            throw new Error(\"char: \" + ch + \", code: \" + i);\n        }\n        if (re3.test(ch) != re2.test(ch)) {\n            throw new Error(\"char: \" + ch + \", code: \" + i);\n        }\n    }\n}\n\nfunction toRollingSum(str) {\n    var charCodes = [];\n    str.replace(/(\\w{4})(?:-(\\w{4}))?/g, function(_, a, b) {\n        charCodes.push(parseInt(a, 16)); \n        charCodes.push(parseInt(b, 16) || 0) \n    });\n    var sum = 0; \n    return charCodes.map(function(c) { \n        if (c) { \n            var c1 = c;\n            c = c - sum;\n            sum = c1;  \n        }\n        return c;\n    });\n}\n \nvar wordChars = packages.L\n    + packages.Mn + packages.Mc\n    + packages.Nd\n    + packages.Pc;\n\nvar wordCharsMerged = mergeRanges(wordChars);\nvar wordCharCodes = toRollingSum(wordCharsMerged);\n\nvar fs = require(\"fs\");\nvar path = __dirname + \"/../lib/ace/unicode.js\"\nvar value = fs.readFileSync(path, \"utf8\");\nvalue = value.replace(/(var wordChars = )[\\[\"].*[\"\\]](;)/, function(_, $1, $2) {\n    return $1 + JSON.stringify(wordCharCodes) + $2;\n});\n\nfs.writeFileSync(path, value, \"utf8\");\n\nrequire(\"amd-loader\")\nvar unicode = require(path);\ntest();\n\n\n\n\n"
  },
  {
    "path": "tool/update_deps.js",
    "content": "var https = require(\"https\");\nvar http = require(\"http\");\nvar url = require(\"url\");\nvar fs = require(\"fs\");\n\nvar Path = require(\"path\");\nvar spawn = require(\"child_process\").spawn;\nvar async = require(\"asyncjs\");\nvar rootDir = __dirname + \"/../lib/ace/\";\n\nvar SKIP_NPM = false;\n\nvar deps = {\n    csslint: {\n        path: \"mode/css/csslint.js\",\n        // url: \"https://raw.github.com/stubbornella/csslint/master/release/csslint.js\",\n        browserify: {\n            npmModule: \"git+https://github.com/CSSLint/csslint.git#master\",\n            path: \"jshint/src/jshint.js\",\n            exports: \"jshint\"\n        },\n        fetch: browserify,\n        wrapAmd: true\n    }, \n    requirejs: {\n        path: \"../../demo/kitchen-sink/require.js\",\n        url: \"https://raw.github.com/jrburke/requirejs/master/require.js\",\n        wrapAmd: false\n    },\n    luaparse: {\n        path: \"mode/lua/luaparse.js\",\n        url: \"https://raw.github.com/oxyc/luaparse/master/luaparse.js\",\n        wrapAmd: true,\n        postProcess: function(src) {\n            return src.replace(\n                /\\(function\\s*\\(root,\\s*name,\\s*factory\\)\\s*{[\\s\\S]*?}\\(this,\\s*'luaparse',/,\n                \"(function (root, name, factory) {\\n   factory(exports)\\n}(this, 'luaparse',\"\n            )\n        }\n    },\n    html5: {\n        path: \"mode/html/saxparser.js\",\n        browserify: {\n            npmModule: \"git+https://github.com/aredridel/html5.git#master\",\n            path: \"html5/lib/sax/SAXParser.js\",  \n            exports: \"SAXParser\"\n        },\n        fetch: browserify,\n        wrapAmd: true,\n        postProcess: function(src) {\n            return src;\n        }\n    },\n    xquery: {\n       path: \"mode/xquery/xquery_lexer.js\",\n       browserify: {\n           npmModule: \"git+https://github.com/wcandillon/xqlint.git#master\",\n           path: \"xqlint/lib/lexers/xquery_lexer.js\",\n           exports: \"XQueryLexer\"\n       },\n       fetch: browserify,\n       wrapAmd: true,\n       postProcess: function(src){\n           return src;\n       }\n    },\n    jsoniq: {\n       path: \"mode/xquery/jsoniq_lexer.js\",\n       browserify: {\n           npmModule: \"git+https://github.com/wcandillon/xqlint.git#master\",\n           path: \"xqlint/lib/lexers/jsoniq_lexer.js\",\n           exports: \"JSONiqLexer\"\n       },\n       fetch: browserify,\n       wrapAmd: true,\n       postProcess: function(src){\n           return src;\n       }\n    },\n    xqlint: {\n       path: \"mode/xquery/xqlint.js\",\n       browserify: {\n           npmModule: \"git+https://github.com/wcandillon/xqlint.git#master\",\n           path: \"xqlint/lib/xqlint.js\",\n           exports: \"XQLint\"\n       },\n       fetch: browserify,\n       wrapAmd: true,\n       postProcess: function(src){\n           return src;\n       }\n    },\n    jshint: {\n        path: \"mode/javascript/jshint.js\",\n        browserify: {\n            npmModule: \"git+https://github.com/ajaxorg/jshint.git#master\",\n            path: \"jshint/src/jshint.js\",\n            exports: \"jshint\"\n        },\n        fetch: browserify,\n        wrapAmd: true,\n        postProcess: function(src) {\n            src = src.replace(\n                /\"Expected a conditional expression and instead saw an assignment.\"/g,\n                '\"Assignment in conditional expression\"'\n            );\n            src = src.replace(/var defaultMaxListeners = 10;/, function(a) {return a.replace(\"10\", \"200\")});\n            return src;\n        }\n    }, \n    emmet: {\n        path: \"ext/emmet core.js\",\n        url: [\n            \"https://raw.github.com/sergeche/emmet-sublime/master/emmet/emmet-app.js\",\n            \"https://raw.github.com/sergeche/emmet-sublime/master/emmet/snippets.json\"\n        ],\n        postProcess: function(data) {\n            return data[0]\n                .replace(\"define(emmet)\", \"define('emmet', [], emmet)\")\n                .replace(/(emmet.define\\('bootstrap'.*)[\\s\\S]*$/, function(_, x) {\n                    return x + \"\\n\" +\n                        \"var snippets = \" + data[1] + \";\\n\" +\n                        \"var res = require('resources');\\n\" +\n                        \"var userData = res.getVocabulary('user') || {};\\n\" +\n                        \"res.setVocabulary(require('utils').deepMerge(userData, snippets), 'user');\\n\" +\n                        \"});\";\n            });\n        }\n    },\n    vim: {\n        fetch: function(){\n            var rootHref = \"https://raw.githubusercontent.com/codemirror/CodeMirror/master/\"\n            var fileMap = {\"keymap/vim.js\": \"keyboard/vim.js\", \"test/vim_test.js\": \"keyboard/vim_test.js\"};\n            async.forEach(Object.keys(fileMap), function(x, next) {\n                download(rootHref + x, function(e, d) {\n                    d = d.replace(/^\\(function.*{[^{}]+^}[^{}]+{/m, \"define(function(require, exports, module) {\");\n                    d = d.replace(/^\\s*return vimApi;\\s*};/gm, \"  //};\")\n                        .replace(\"var Vim = function() {\", \"$& return vimApi; } //{\")\n                    fs.writeFile(rootDir + fileMap[x], d, next)\n                })\n            }, function() {\n                console.log(\"done\")\n            });\n        }\n    },\n    liveScript: {\n        path: \"mode/livescript.js\",\n        url: \"https://raw.githubusercontent.com/gkz/LiveScript/master/lib/mode-ls.js\"        \n    },\n    coffee: {\n        path: \"mode/coffee/coffee.js\",\n        url: \"https://raw.githubusercontent.com/jashkenas/coffeescript/master/extras/coffee-script.js\",    \n        wrapAmd: true,\n        postProcess: function(src){\n            return \"function define(f) { module.exports = f() }; define.amd = {};\\n\"\n                + dereqire(src);\n        }\n    },\n    xmldom: {\n        fetch: function() {\n            var rootHref = \"https://raw.githubusercontent.com/iDeBugger/xmldom/master/\"\n            var fileMap = {\n               \"sax.js\": \"mode/xml/sax.js\",\n               \"dom-parser.js\": \"mode/xml/dom-parser.js\",\n               \"dom.js\": \"mode/xml/dom.js\"\n            };\n            async.forEach(Object.keys(fileMap), function(x, next) {\n                download(rootHref + x, function(e, d) {\n                    fs.writeFile(rootDir + fileMap[x], d, next)\n                })\n            }, function() {\n                console.log(\"XmlDOM updating done\")\n            });\n        }\n    },\n};\n\nvar download = function(href, callback) {\n    if (Array.isArray(href))\n        return async.map(href, download, callback);\n\n    var options = url.parse(href);\n    var protocol = options.protocol === \"https:\" ? https : http;\n    console.log(\"connecting to \" + options.host + \" \" + options.path);\n    protocol.get(options, function(res) {\n        var data = \"\";\n        res.setEncoding(\"utf-8\");\n\n        res.on(\"data\", function(chunk){\n            data += chunk;\n        });\n\n        res.on(\"end\", function(){\n            callback(null, data);\n        });\n    });\n};\n\nvar getDep = function(dep) {\n    if (!dep.fetch)\n        dep.fetch = download\n    dep.fetch(dep.url, function(err, data) {\n        if (dep.postProcess)\n            data = dep.postProcess(data);\n        if (dep.wrapAmd)\n            data = \"define(function(require, exports, module) {\\n\"\n                + data\n                + \"\\n});\";\n\n        fs.writeFile(rootDir + dep.path, data, \"utf-8\", function(err){\n            if (err) throw err;\n            console.log(\"File \" + dep.path + \" saved.\");\n        });\n    });\n};\n\nfunction run(cmd, cb) {\n\tvar proc = process.platform == \"win32\"\n        ? spawn(\"cmd\", [\"/c\", cmd], {cwd: __dirname})\n        : spawn(\"bash\", [\"-c\", cmd], {cwd: __dirname});\n\n    var result = \"\", err = \"\";\n\tproc.stderr.setEncoding(\"utf8\");    \n\tproc.stderr.on('data', function (data) {\n        err += data;\n\t});\n\n\tproc.stdout.setEncoding(\"utf8\");\n\tproc.stdout.on('data', function (data) {\n        result += data;\n\t});\n\n    proc.on('close', done);\n    function done(code) {\n        if (code !== 0) {\n            console.error(cmd + '::: process exited with code :::' + code);\n            console.error(err)\n        }\n        cb(err, result)\n    }\n}\n\nfunction unquote(str) {\n    return str.replace(/\\\\(.)/g, function(x, a) {\n        return a == \"n\" ? \"\\n\" \n            : a == \"t\" ? \"\\t\" \n            : a == \"r\" ? \"\\r\"\n            : a\n    });\n}\n\nfunction dereqire(src) {\n    return require(\"derequire\")(src, [\n        {from: 'require', to: '_dereq_'},\n        {from: 'define', to: '_defi_'}\n    ]);\n}\n\nfunction browserify(_, cb) {\n    var br = this.browserify;\n    var path = Path.join(\"node_modules\", br.path)\n    process.chdir(__dirname);\n    if (Path.sep == \"\\\\\" && !Path._relative) {\n        Path._relative = Path.relative;\n        Path.relative = function() {\n            var v = Path._relative.apply(this, arguments);\n            return v.replace(/\\\\/g, \"/\");\n        }\n    }\n    function done() {\n        var browserify = require('browserify');\n        var absPath = require.resolve(__dirname + \"/\" + path);\n        var defaultPreludePath = Path.join(require.resolve(\"browser-pack\"), \"../prelude.js\");\n        var defaultPrelude = \"module.exports = \" + fs.readFileSync(defaultPreludePath, 'utf8')\n            .replace(/^[ \\t]*\\/\\/.*/gm, \"\")\n            .replace(/^\\s*\\n\\r?/gm, \"\")\n            .replace(/return newRequire;/, \"return newRequire(entry[0]);\")\n        var opts = {\n            expose: br.exports,\n            prelude: defaultPrelude,\n            exposeAll: true\n        }\n        var b = browserify(opts);\n        b.plugin(require(\"deps-sort\"), opts);\n        b.add(absPath);\n        var p = b.bundle();\n        var buffer = \"\";\n        p.on(\"data\", function(e) { buffer += e; });\n        p.on(\"end\", function() {\n            var src = dereqire(buffer);\n            cb(null, src);\n        });\n    }\n    if (SKIP_NPM) return done();\n    run(\"npm install \" + br.npmModule,  done);\n}\n\nvar args = process.argv.slice(2);\nSKIP_NPM = args.indexOf(\"--skip-npm\") != -1;\nargs = args.filter(function(x) {return x[0] != \"-\" });\nif (!args.length)\n    args = Object.keys(deps);\n    \nargs.forEach(function(key) {\n    getDep(deps[key])\n});\n\n"
  },
  {
    "path": "tool/wrap_keyword_regexp.js",
    "content": "// a little script to turn giant keyword regexps into\n// something that ace can use; for example: \n//\n// \\b(NS(Rect(ToCGRect|FromCGRect)|MakeCollectable|S(tringFromProtocol))\\b\n// \n// into\n//\n// (?:\\\\b)(NS(?:Rect(?:ToCGRect|FromCGRect)|MakeCollectable|S(?:tringFromProtocol))(?:\\b)\n\nvar inputString = process.argv.splice(2)[0];\n\n// solve word boundaries\nvar outputString = inputString.replace(/\\\\b/g, \"(?:\\\\\\\\b)\");\n\n// I apparently need to do this, instead of something clever, because the regexp\n// lastIndex is screwing up my positional\noutputString = outputString.split(\"b)(\");\n\noutputString = outputString[0] + \"b)(\" + outputString[1].replace(/\\(([^\\?])/g, \"(?:$1\");\n\nconsole.log(\"\\n\\n\" + outputString + \"\\n\\n\");"
  },
  {
    "path": "version.js",
    "content": "#!/usr/bin/env node\nvar x;\nx = require('./package');\nconsole.log(x.version)\n"
  }
]